Skip to content

Commit dd4c53c

Browse files
committed
0.4.7
1 parent 2971884 commit dd4c53c

File tree

3 files changed

+78
-1
lines changed

3 files changed

+78
-1
lines changed

lib/conversions/src/RLCToRuby.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -938,6 +938,29 @@ namespace mlir::rlc
938938

939939
emitSpecialFunctions(type, w, table, builder);
940940
// emitHinting(type.getMemberTypes(), type.getMemberNames(), w, table);
941+
942+
w.writenl("def self.all_members()");
943+
{
944+
auto _2 = w.indent();
945+
w.write("return {");
946+
for (const auto& [type, name] :
947+
llvm::zip(type.getMemberTypes(), type.getMemberNames()))
948+
{
949+
w.write(name, ": ");
950+
if (isUserDefined(type))
951+
{
952+
w.write("RLC::");
953+
w.writeType(type);
954+
}
955+
else
956+
{
957+
w.writeType(type);
958+
}
959+
w.write(", ");
960+
}
961+
w.writenl("}");
962+
}
963+
w.writenl("end");
941964
emitMemberAccessors(type, w, table);
942965
emitMemberFunctions(type, w, table);
943966

@@ -1074,6 +1097,27 @@ namespace mlir::rlc
10741097
w.endLine();
10751098
}
10761099
w.writenl("end");
1100+
1101+
w.writenl("def self.all_alternatives");
1102+
{
1103+
auto _2 = w.indent();
1104+
w.write("return [");
1105+
for (auto type : type.getUnderlying())
1106+
{
1107+
if (isUserDefined(type))
1108+
{
1109+
w.write("RLC::");
1110+
w.writeType(type);
1111+
}
1112+
else
1113+
{
1114+
w.writeType(type);
1115+
}
1116+
w.write(", ");
1117+
}
1118+
w.writenl("]");
1119+
}
1120+
w.writenl("end");
10771121
emitSpecialFunctions(type, w, table, builder);
10781122
w.writenl("def unwrap()");
10791123
{

python/rlc/program.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ class Program:
133133
def __init__(self, module_path: str, tmp_dir=None):
134134
if not isinstance(module_path, ModuleType):
135135
self.module_path = module_path
136-
self.module = import_file("sim", module_path)
136+
self.module = import_file(module_path, module_path)
137137
else:
138138
self.module = module_path
139139
self.module_path = None
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# REQUIRES: has_ruby
2+
# RUN: split-file %s %t
3+
4+
# RUN: rlc %t/source.rl -o %t/lib%sharedext -i %stdlib --shared
5+
# RUN: rlc %t/source.rl -o %t/lib%libext -i %stdlib --compile
6+
7+
# RUN: rlc %t/source.rl -o %t/library.rb -i %stdlib --ruby
8+
# RUN: ruby %t/to_run.rb
9+
10+
11+
#--- source.rl
12+
cls Pair:
13+
Int x
14+
Int y
15+
16+
fun to_invoke() -> Int {true}:
17+
return self.x + self.y
18+
19+
cls Outer:
20+
Pair inner
21+
22+
fun to_invoke() -> Int {true}:
23+
return self.inner.x + self.inner.y
24+
25+
using Asd = Int | Outer
26+
27+
#--- to_run.rb
28+
require_relative 'library'
29+
30+
raise "this is wrong" unless RLC::Outer.all_members == {inner: RLC::Pair}
31+
raise "this is wrong" unless RLC::RLCAsd.all_alternatives == [Integer, RLC::Outer]
32+
33+

0 commit comments

Comments
 (0)