mirah 0.0.12-java → 0.1.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +372 -0
- data/README.txt +4 -5
- data/Rakefile +178 -55
- data/examples/appengine/Readme +3 -3
- data/examples/appengine/src/org/mirah/MirahApp.mirah +1 -1
- data/examples/appengine/src/org/mirah/list.dhtml +1 -1
- data/examples/bintrees.mirah +1 -1
- data/examples/edb.mirah +1 -1
- data/examples/fib.mirah +1 -1
- data/examples/interfaces.mirah +1 -1
- data/examples/macros/{string-each-char.mirah → string_each_char.mirah} +4 -5
- data/examples/maven/README.txt +1 -1
- data/examples/maven/src/main/mirah/hello_mirah.mirah +1 -1
- data/examples/plugins/appengine/Rakefile +1 -1
- data/examples/plugins/appengine/src/com/google/appengine/ext/duby/db/MetaModel.mirah +1 -1
- data/examples/plugins/appengine/src/com/google/appengine/ext/duby/db/Model.duby +1 -1
- data/examples/plugins/appengine/test/com/google/appengine/ext/duby/db/ModelTest.duby +1 -1
- data/examples/rosettacode/100-doors.mirah +6 -6
- data/examples/rosettacode/README.txt +3 -3
- data/examples/rosettacode/boolean-values.mirah +1 -1
- data/examples/rosettacode/comments.mirah +1 -1
- data/examples/rosettacode/count-occurrences-of-a-substring.mirah +1 -1
- data/examples/rosettacode/factorial.mirah +1 -1
- data/examples/rosettacode/fibonacci.mirah +1 -1
- data/examples/rosettacode/fizz-buzz.mirah +2 -2
- data/examples/rosettacode/flatten-a-list.mirah +4 -4
- data/examples/rosettacode/guess-the-number.mirah +2 -2
- data/examples/rosettacode/hamming-numbers.mirah +4 -4
- data/examples/rosettacode/is-string-numeric.mirah +22 -22
- data/examples/rosettacode/palindrome.mirah +2 -2
- data/examples/rosettacode/random-numbers.mirah +1 -1
- data/examples/rosettacode/repeat-a-string.mirah +1 -1
- data/examples/rosettacode/reverse-a-string.mirah +1 -1
- data/examples/rosettacode/rot-13.mirah +5 -5
- data/examples/rosettacode/secure-temporary-file.mirah +2 -2
- data/examples/rosettacode/sleep.mirah +1 -1
- data/examples/rosettacode/string-length.mirah +5 -5
- data/examples/swing.mirah +1 -1
- data/examples/test.edb +1 -1
- data/javalib/mirah-bootstrap.jar +0 -0
- data/javalib/mirah-builtins.jar +0 -0
- data/javalib/mirah-parser.jar +0 -0
- data/javalib/mirah-util.jar +0 -0
- data/lib/duby.rb +1 -1
- data/lib/mirah.rb +50 -28
- data/lib/mirah/ast.rb +15 -605
- data/lib/mirah/ast/scope.rb +98 -69
- data/lib/mirah/commands.rb +1 -1
- data/lib/mirah/commands/base.rb +7 -7
- data/lib/mirah/commands/compile.rb +3 -3
- data/lib/mirah/commands/parse.rb +7 -5
- data/lib/mirah/commands/run.rb +12 -19
- data/lib/mirah/compiler.rb +15 -23
- data/lib/mirah/errors.rb +16 -1
- data/lib/mirah/generator.rb +79 -39
- data/lib/mirah/jvm/compiler.rb +1 -19
- data/lib/mirah/jvm/compiler/base.rb +233 -90
- data/lib/mirah/jvm/compiler/jvm_bytecode.rb +675 -363
- data/lib/mirah/jvm/method_lookup.rb +134 -65
- data/lib/mirah/jvm/typer.rb +10 -5
- data/lib/mirah/jvm/types.rb +10 -2
- data/lib/mirah/jvm/types/array_type.rb +10 -12
- data/lib/mirah/{compiler/type.rb → jvm/types/ast_ext.rb} +12 -8
- data/lib/mirah/jvm/types/basic_types.rb +26 -33
- data/lib/mirah/jvm/types/bitescript_ext.rb +1 -1
- data/lib/mirah/jvm/types/block_type.rb +15 -0
- data/lib/mirah/jvm/types/boolean.rb +8 -4
- data/lib/mirah/jvm/types/dynamic_type.rb +12 -13
- data/lib/mirah/jvm/types/enumerable.rb +7 -7
- data/lib/mirah/jvm/types/extensions.rb +11 -6
- data/lib/mirah/jvm/types/factory.rb +624 -94
- data/lib/mirah/jvm/types/floats.rb +21 -15
- data/lib/mirah/jvm/types/generic_type.rb +72 -0
- data/lib/mirah/jvm/types/implicit_nil_type.rb +29 -0
- data/lib/mirah/jvm/types/integers.rb +26 -71
- data/lib/mirah/jvm/types/interface_definition.rb +3 -3
- data/lib/mirah/jvm/types/intrinsics.rb +203 -168
- data/lib/mirah/jvm/types/literals.rb +6 -6
- data/lib/mirah/jvm/types/meta_type.rb +13 -4
- data/lib/mirah/jvm/types/methods.rb +281 -93
- data/lib/mirah/jvm/types/null_type.rb +17 -5
- data/lib/mirah/jvm/types/number.rb +10 -7
- data/lib/mirah/jvm/types/primitive_type.rb +17 -6
- data/lib/mirah/jvm/types/source_mirror.rb +12 -7
- data/lib/mirah/jvm/types/type.rb +107 -23
- data/lib/mirah/jvm/types/type_definition.rb +25 -10
- data/lib/mirah/jvm/types/unreachable_type.rb +1 -1
- data/lib/mirah/jvm/types/void_type.rb +3 -3
- data/lib/mirah/parser.rb +154 -16
- data/lib/mirah/plugin/edb.rb +1 -1
- data/lib/mirah/transform.rb +1 -2
- data/lib/mirah/transform/ast_ext.rb +24 -43
- data/lib/mirah/transform/transformer.rb +29 -224
- data/lib/mirah/typer.rb +2 -16
- data/lib/mirah/util/argument_processor.rb +25 -10
- data/lib/mirah/util/class_loader.rb +1 -1
- data/lib/mirah/util/compilation_state.rb +16 -17
- data/lib/mirah/util/delegate.rb +2 -2
- data/lib/mirah/util/logging.rb +110 -0
- data/lib/mirah/util/process_errors.rb +69 -11
- data/lib/mirah/version.rb +1 -1
- data/test/core/commands_test.rb +6 -24
- data/test/core/env_test.rb +5 -5
- data/{lib/mirah/jvm/source_generator/typer.rb → test/core/generator_test.rb} +9 -9
- data/test/core/typer_test.rb +196 -158
- data/test/core/util/argument_processor_test.rb +10 -10
- data/test/core/util/class_loader_test.rb +6 -5
- data/test/fixtures/org/foo/LowerCaseInnerClass$inner.class +0 -0
- data/test/fixtures/org/foo/LowerCaseInnerClass.class +0 -0
- data/test/fixtures/org/foo/LowerCaseInnerClass.java +7 -0
- data/test/jvm/annotations_test.rb +5 -5
- data/test/jvm/blocks_test.rb +140 -88
- data/test/jvm/bytecode_test_helper.rb +112 -94
- data/test/jvm/cast_test.rb +162 -0
- data/test/jvm/constructors_test.rb +18 -8
- data/test/jvm/enumerable_test.rb +77 -44
- data/test/jvm/example_test.rb +53 -0
- data/test/jvm/factory_test.rb +7 -1
- data/test/jvm/generics_test.rb +57 -0
- data/test/jvm/hash_test.rb +106 -0
- data/test/jvm/import_test.rb +81 -0
- data/test/jvm/interface_test.rb +73 -0
- data/test/jvm/java_typer_test.rb +92 -66
- data/{lib/mirah/typer/base.rb → test/jvm/jvm_commands_test.rb} +6 -10
- data/test/jvm/jvm_compiler_test.rb +170 -604
- data/test/jvm/list_extensions_test.rb +23 -0
- data/test/jvm/macros_test.rb +197 -32
- data/test/jvm/main_method_test.rb +4 -4
- data/test/jvm/numeric_extensions_test.rb +13 -0
- data/test/jvm/rescue_test.rb +73 -16
- data/test/jvm/varargs_test.rb +65 -0
- data/test/test_helper.rb +1 -2
- metadata +234 -251
- data/examples/SortClosure$__xform_tmp_1.class +0 -0
- data/examples/SortClosure$__xform_tmp_2.class +0 -0
- data/examples/SortClosure.class +0 -0
- data/examples/macros/StringEachChar$Extension1.class +0 -0
- data/lib/mirah/ast/call.rb +0 -345
- data/lib/mirah/ast/class.rb +0 -359
- data/lib/mirah/ast/flow.rb +0 -381
- data/lib/mirah/ast/intrinsics.rb +0 -563
- data/lib/mirah/ast/literal.rb +0 -178
- data/lib/mirah/ast/local.rb +0 -112
- data/lib/mirah/ast/method.rb +0 -408
- data/lib/mirah/ast/structure.rb +0 -387
- data/lib/mirah/ast/type.rb +0 -146
- data/lib/mirah/commands/base.rb~ +0 -57
- data/lib/mirah/compiler/call.rb +0 -45
- data/lib/mirah/compiler/class.rb +0 -81
- data/lib/mirah/compiler/flow.rb +0 -109
- data/lib/mirah/compiler/literal.rb +0 -130
- data/lib/mirah/compiler/local.rb +0 -59
- data/lib/mirah/compiler/method.rb +0 -44
- data/lib/mirah/compiler/structure.rb +0 -65
- data/lib/mirah/jvm/compiler/java_source.rb +0 -787
- data/lib/mirah/jvm/method_lookup.rb~ +0 -247
- data/lib/mirah/jvm/source_generator/builder.rb +0 -468
- data/lib/mirah/jvm/source_generator/loops.rb +0 -131
- data/lib/mirah/jvm/source_generator/precompile.rb +0 -210
- data/lib/mirah/plugin/gwt.rb +0 -189
- data/lib/mirah/plugin/java.rb +0 -70
- data/lib/mirah/transform/error.rb +0 -13
- data/lib/mirah/transform/helper.rb +0 -765
- data/lib/mirah/typer/simple.rb +0 -384
- data/lib/mirah/version.rb~ +0 -18
- data/test/core/ast_test.rb +0 -382
- data/test/core/compilation_test.rb +0 -130
- data/test/core/macros_test.rb +0 -61
- data/test/jvm/javac_test_helper.rb +0 -89
- data/test/jvm/jvm_compiler_test.rb~ +0 -2181
- data/test/plugins/gwt_test.rb +0 -69
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class ListExtensionsTest < Test::Unit::TestCase
|
|
2
|
+
def test_bracket_getter
|
|
3
|
+
cls, = compile(<<-EOF)
|
|
4
|
+
x = [1,2]
|
|
5
|
+
puts x[0]
|
|
6
|
+
EOF
|
|
7
|
+
assert_output("1\n") do
|
|
8
|
+
cls.main(nil)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_bracket_assignment
|
|
13
|
+
cls, = compile(<<-EOF)
|
|
14
|
+
import java.util.ArrayList # literals are immutable
|
|
15
|
+
x = ArrayList.new
|
|
16
|
+
x[0]= "2"
|
|
17
|
+
puts x
|
|
18
|
+
EOF
|
|
19
|
+
assert_output("[2]\n") do
|
|
20
|
+
cls.main(nil)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
data/test/jvm/macros_test.rb
CHANGED
|
@@ -14,12 +14,66 @@
|
|
|
14
14
|
# limitations under the License.
|
|
15
15
|
|
|
16
16
|
class MacrosTest < Test::Unit::TestCase
|
|
17
|
-
def
|
|
17
|
+
def test_vcall_macro
|
|
18
18
|
cls, = compile(<<-EOF)
|
|
19
|
-
|
|
19
|
+
macro def foo
|
|
20
|
+
mirah::lang::ast::Null.new
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
System.out.println(foo)
|
|
24
|
+
EOF
|
|
25
|
+
|
|
26
|
+
assert_output("null\n") {cls.main(nil)}
|
|
27
|
+
assert(!cls.respond_to?(:foo))
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_imported_constants_available_in_macros
|
|
31
|
+
cls, = compile(<<-EOF)
|
|
32
|
+
import java.util.LinkedList
|
|
33
|
+
macro def foo
|
|
34
|
+
LinkedList.new
|
|
35
|
+
Node(nil)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
foo
|
|
39
|
+
EOF
|
|
40
|
+
|
|
41
|
+
assert_output("") {cls.main(nil)}
|
|
42
|
+
assert(!cls.respond_to?(:foo))
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_fcall_macro
|
|
46
|
+
cls, = compile(<<-EOF)
|
|
47
|
+
macro def foo
|
|
48
|
+
mirah::lang::ast::Null.new
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
System.out.println(foo())
|
|
52
|
+
EOF
|
|
53
|
+
|
|
54
|
+
assert_output("null\n") {cls.main(nil)}
|
|
55
|
+
assert(!cls.respond_to?(:foo))
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_quote
|
|
59
|
+
cls, = compile(<<-EOF)
|
|
60
|
+
macro def foo
|
|
61
|
+
quote { nil }
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
System.out.println(foo)
|
|
65
|
+
EOF
|
|
66
|
+
|
|
67
|
+
assert_output("null\n") {cls.main(nil)}
|
|
68
|
+
assert(!cls.respond_to?(:foo))
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def test_macro_def_with_arg
|
|
72
|
+
cls, = compile(<<-EOF)
|
|
73
|
+
macro def bar(x)
|
|
20
74
|
x
|
|
21
75
|
end
|
|
22
|
-
|
|
76
|
+
|
|
23
77
|
def foo
|
|
24
78
|
bar("bar")
|
|
25
79
|
end
|
|
@@ -28,10 +82,8 @@ class MacrosTest < Test::Unit::TestCase
|
|
|
28
82
|
assert_equal("bar", cls.foo)
|
|
29
83
|
assert(!cls.respond_to?(:bar))
|
|
30
84
|
end
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def test_instance_macro
|
|
34
|
-
# TODO fix annotation output and create a duby.anno.Extensions annotation.
|
|
85
|
+
|
|
86
|
+
def test_instance_macro_call
|
|
35
87
|
script, cls = compile(<<-EOF)
|
|
36
88
|
class InstanceMacros
|
|
37
89
|
def foobar
|
|
@@ -39,39 +91,98 @@ class MacrosTest < Test::Unit::TestCase
|
|
|
39
91
|
end
|
|
40
92
|
|
|
41
93
|
macro def macro_foobar
|
|
42
|
-
quote {foobar}
|
|
94
|
+
quote {`@call.target`.foobar}
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def macro
|
|
99
|
+
InstanceMacros.new.macro_foobar
|
|
100
|
+
end
|
|
101
|
+
EOF
|
|
102
|
+
|
|
103
|
+
assert_equal("foobar", script.macro)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def test_instance_macro_vcall
|
|
107
|
+
script, cls = compile(<<-EOF)
|
|
108
|
+
class InstanceMacros2
|
|
109
|
+
def foobar
|
|
110
|
+
"foobar"
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
macro def macro_foobar
|
|
114
|
+
quote {`@call.target`.foobar}
|
|
43
115
|
end
|
|
44
|
-
|
|
116
|
+
|
|
45
117
|
def call_foobar
|
|
46
118
|
macro_foobar
|
|
47
119
|
end
|
|
48
120
|
end
|
|
49
121
|
|
|
122
|
+
def function
|
|
123
|
+
InstanceMacros2.new.call_foobar
|
|
124
|
+
end
|
|
125
|
+
EOF
|
|
126
|
+
|
|
127
|
+
assert_equal("foobar", script.function)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def test_static_macro_call
|
|
132
|
+
script, cls = compile(<<-EOF)
|
|
133
|
+
class StaticMacros
|
|
134
|
+
def self.foobar
|
|
135
|
+
"foobar"
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
macro def self.macro_foobar
|
|
139
|
+
quote {`@call.target`.foobar}
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
50
143
|
def macro
|
|
51
|
-
|
|
144
|
+
StaticMacros.macro_foobar
|
|
145
|
+
end
|
|
146
|
+
EOF
|
|
147
|
+
|
|
148
|
+
assert_equal("foobar", script.macro)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def test_static_macro_vcall
|
|
152
|
+
script, cls = compile(<<-EOF)
|
|
153
|
+
class StaticMacros2
|
|
154
|
+
def foobar
|
|
155
|
+
"foobar"
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
macro def self.macro_foobar
|
|
159
|
+
quote {`@call.target`.new.foobar}
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def self.call_foobar
|
|
163
|
+
macro_foobar
|
|
164
|
+
end
|
|
52
165
|
end
|
|
53
166
|
|
|
54
167
|
def function
|
|
55
|
-
|
|
168
|
+
StaticMacros2.call_foobar
|
|
56
169
|
end
|
|
57
170
|
EOF
|
|
58
171
|
|
|
59
172
|
assert_equal("foobar", script.function)
|
|
60
|
-
assert_equal("foobar", script.macro)
|
|
61
173
|
end
|
|
62
174
|
|
|
63
|
-
def test_unquote_method_definitions_with_main
|
|
64
|
-
# TODO fix annotation output and create a duby.anno.Extensions annotation.
|
|
65
175
|
|
|
176
|
+
def test_unquote_method_definitions_with_main
|
|
66
177
|
script, cls = compile(<<-'EOF')
|
|
67
178
|
class UnquoteMacros
|
|
68
|
-
macro def make_attr(name_node, type)
|
|
69
|
-
name = name_node.
|
|
179
|
+
macro def self.make_attr(name_node:Identifier, type:TypeName)
|
|
180
|
+
name = name_node.identifier
|
|
70
181
|
quote do
|
|
71
182
|
def `name`
|
|
72
183
|
@`name`
|
|
73
184
|
end
|
|
74
|
-
def `"#{name}_set"`(`name
|
|
185
|
+
def `"#{name}_set"`(`name`: `type`)
|
|
75
186
|
@`name` = `name`
|
|
76
187
|
end
|
|
77
188
|
end
|
|
@@ -81,14 +192,16 @@ class MacrosTest < Test::Unit::TestCase
|
|
|
81
192
|
end
|
|
82
193
|
|
|
83
194
|
x = UnquoteMacros.new
|
|
84
|
-
|
|
195
|
+
System.out.println x.foo
|
|
85
196
|
x.foo = 3
|
|
86
|
-
|
|
197
|
+
System.out.println x.foo
|
|
87
198
|
EOF
|
|
88
199
|
assert_output("0\n3\n") {script.main(nil)}
|
|
89
200
|
end
|
|
90
201
|
|
|
91
202
|
def test_macro_hygene
|
|
203
|
+
# TODO hygenic macros?
|
|
204
|
+
return
|
|
92
205
|
cls, = compile(<<-EOF)
|
|
93
206
|
macro def doubleIt(arg)
|
|
94
207
|
quote do
|
|
@@ -100,24 +213,45 @@ class MacrosTest < Test::Unit::TestCase
|
|
|
100
213
|
|
|
101
214
|
def foo
|
|
102
215
|
x = "1"
|
|
103
|
-
|
|
104
|
-
|
|
216
|
+
System.out.println doubleIt(x)
|
|
217
|
+
System.out.println x
|
|
105
218
|
end
|
|
106
219
|
EOF
|
|
107
220
|
|
|
108
221
|
assert_output("11\n1\n") {cls.foo}
|
|
109
222
|
end
|
|
110
223
|
|
|
224
|
+
def test_gensym
|
|
225
|
+
# TODO hygenic macros?
|
|
226
|
+
return
|
|
227
|
+
cls, = compile(<<-EOF)
|
|
228
|
+
macro def doubleIt(arg)
|
|
229
|
+
x = gensym
|
|
230
|
+
quote do
|
|
231
|
+
`x` = `arg`
|
|
232
|
+
`x` = `x` + `x`
|
|
233
|
+
`x`
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def foo
|
|
238
|
+
x = 1
|
|
239
|
+
System.out.println doubleIt(x)
|
|
240
|
+
System.out.println x
|
|
241
|
+
end
|
|
242
|
+
EOF
|
|
243
|
+
|
|
244
|
+
assert_output("2\n1\n") {cls.foo}
|
|
245
|
+
end
|
|
111
246
|
|
|
112
247
|
def test_add_args_in_macro
|
|
113
248
|
cls, = compile(<<-EOF)
|
|
114
|
-
macro def foo(a)
|
|
115
|
-
|
|
116
|
-
quote { bar "1", `Node(a.child_nodes.get(0)).child_nodes`, "2"}
|
|
249
|
+
macro def foo(a:Array)
|
|
250
|
+
quote { bar "1", `a.values`, "2"}
|
|
117
251
|
end
|
|
118
252
|
|
|
119
253
|
def bar(a:String, b:String, c:String, d:String)
|
|
120
|
-
|
|
254
|
+
System.out.println "\#{a} \#{b} \#{c} \#{d}"
|
|
121
255
|
end
|
|
122
256
|
|
|
123
257
|
foo(["a", "b"])
|
|
@@ -127,11 +261,11 @@ class MacrosTest < Test::Unit::TestCase
|
|
|
127
261
|
cls.main(nil)
|
|
128
262
|
end
|
|
129
263
|
end
|
|
130
|
-
|
|
264
|
+
|
|
131
265
|
def test_block_parameter_uses_outer_scope
|
|
132
266
|
cls, = compile(<<-EOF)
|
|
133
|
-
macro def foo(
|
|
134
|
-
quote { z = `block.body`;
|
|
267
|
+
macro def foo(block:Block)
|
|
268
|
+
quote { z = `block.body`; System.out.println z }
|
|
135
269
|
end
|
|
136
270
|
apple = 1
|
|
137
271
|
foo do
|
|
@@ -145,14 +279,15 @@ class MacrosTest < Test::Unit::TestCase
|
|
|
145
279
|
end
|
|
146
280
|
|
|
147
281
|
def test_method_def_after_macro_def_with_same_name_raises_error
|
|
148
|
-
assert_raises Mirah::
|
|
282
|
+
assert_raises Mirah::MirahError do
|
|
149
283
|
compile(<<-EOF)
|
|
150
|
-
macro def foo
|
|
151
|
-
quote {
|
|
284
|
+
macro def self.foo
|
|
285
|
+
quote { System.out.println :z }
|
|
152
286
|
end
|
|
153
287
|
def foo
|
|
154
288
|
:bar
|
|
155
289
|
end
|
|
290
|
+
foo
|
|
156
291
|
EOF
|
|
157
292
|
end
|
|
158
293
|
end
|
|
@@ -160,7 +295,7 @@ class MacrosTest < Test::Unit::TestCase
|
|
|
160
295
|
def test_macro_def_unquote_named_method_without_main
|
|
161
296
|
cls, = compile <<-EOF
|
|
162
297
|
class FooHaver
|
|
163
|
-
macro def null_method
|
|
298
|
+
macro def self.null_method(name)
|
|
164
299
|
quote {
|
|
165
300
|
def `name`
|
|
166
301
|
end
|
|
@@ -171,4 +306,34 @@ class MacrosTest < Test::Unit::TestCase
|
|
|
171
306
|
EOF
|
|
172
307
|
assert_equal nil, cls.new.testing
|
|
173
308
|
end
|
|
309
|
+
|
|
310
|
+
def test_attr_accessor
|
|
311
|
+
script, cls = compile(<<-EOF)
|
|
312
|
+
class AttrAccessorTest
|
|
313
|
+
attr_accessor foo: int
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
x = AttrAccessorTest.new
|
|
317
|
+
System.out.println x.foo
|
|
318
|
+
x.foo = 3
|
|
319
|
+
System.out.println x.foo
|
|
320
|
+
EOF
|
|
321
|
+
assert_output("0\n3\n") {script.main(nil)}
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
def test_separate_compilation
|
|
325
|
+
compile(<<-CODE)
|
|
326
|
+
class InlineOneSayer
|
|
327
|
+
macro def say_one
|
|
328
|
+
quote do
|
|
329
|
+
puts "one"
|
|
330
|
+
end
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
CODE
|
|
334
|
+
script, _ =compile(<<-CODE)
|
|
335
|
+
InlineOneSayer.new.say_one
|
|
336
|
+
CODE
|
|
337
|
+
assert_output("one\n") {script.main(nil)}
|
|
338
|
+
end
|
|
174
339
|
end
|
|
@@ -3,11 +3,11 @@ class MainMethodTest < Test::Unit::TestCase
|
|
|
3
3
|
code = <<-EOC
|
|
4
4
|
class WithMain
|
|
5
5
|
end
|
|
6
|
-
|
|
6
|
+
System.out.println 'bar'
|
|
7
7
|
EOC
|
|
8
|
-
|
|
9
|
-
main_class, = compile code, 'with_main'
|
|
10
|
-
|
|
8
|
+
|
|
9
|
+
main_class, = compile code, :name => 'with_main'
|
|
10
|
+
|
|
11
11
|
assert_output "bar\n" do
|
|
12
12
|
main_class.main(nil)
|
|
13
13
|
end
|
data/test/jvm/rescue_test.rb
CHANGED
|
@@ -19,9 +19,9 @@ class RescueTest < Test::Unit::TestCase
|
|
|
19
19
|
cls, = compile(<<-EOF)
|
|
20
20
|
def foo
|
|
21
21
|
begin
|
|
22
|
-
|
|
22
|
+
System.out.println "body"
|
|
23
23
|
rescue
|
|
24
|
-
|
|
24
|
+
System.out.println "rescue"
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
27
|
EOF
|
|
@@ -34,10 +34,10 @@ class RescueTest < Test::Unit::TestCase
|
|
|
34
34
|
cls, = compile(<<-EOF)
|
|
35
35
|
def foo
|
|
36
36
|
begin
|
|
37
|
-
|
|
37
|
+
System.out.println "body"
|
|
38
38
|
raise
|
|
39
39
|
rescue
|
|
40
|
-
|
|
40
|
+
System.out.println "rescue"
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
43
|
EOF
|
|
@@ -50,16 +50,16 @@ class RescueTest < Test::Unit::TestCase
|
|
|
50
50
|
cls, = compile(<<-EOF)
|
|
51
51
|
def foo(a:int)
|
|
52
52
|
begin
|
|
53
|
-
|
|
53
|
+
System.out.println "body"
|
|
54
54
|
if a == 0
|
|
55
55
|
raise IllegalArgumentException
|
|
56
56
|
else
|
|
57
57
|
raise
|
|
58
58
|
end
|
|
59
59
|
rescue IllegalArgumentException
|
|
60
|
-
|
|
60
|
+
System.out.println "IllegalArgumentException"
|
|
61
61
|
rescue
|
|
62
|
-
|
|
62
|
+
System.out.println "rescue"
|
|
63
63
|
end
|
|
64
64
|
end
|
|
65
65
|
EOF
|
|
@@ -73,7 +73,7 @@ class RescueTest < Test::Unit::TestCase
|
|
|
73
73
|
cls, = compile(<<-EOF)
|
|
74
74
|
def foo(a:int)
|
|
75
75
|
begin
|
|
76
|
-
|
|
76
|
+
System.out.println "body"
|
|
77
77
|
if a == 0
|
|
78
78
|
raise IllegalArgumentException
|
|
79
79
|
elsif a == 1
|
|
@@ -81,10 +81,10 @@ class RescueTest < Test::Unit::TestCase
|
|
|
81
81
|
else
|
|
82
82
|
raise
|
|
83
83
|
end
|
|
84
|
-
rescue IllegalArgumentException,
|
|
85
|
-
|
|
84
|
+
rescue IllegalArgumentException, Exception
|
|
85
|
+
System.out.println "multi"
|
|
86
86
|
rescue Throwable
|
|
87
|
-
|
|
87
|
+
System.out.println "other"
|
|
88
88
|
end
|
|
89
89
|
end
|
|
90
90
|
EOF
|
|
@@ -101,7 +101,7 @@ class RescueTest < Test::Unit::TestCase
|
|
|
101
101
|
begin
|
|
102
102
|
raise "foo"
|
|
103
103
|
rescue => ex
|
|
104
|
-
|
|
104
|
+
System.out.println ex.getMessage
|
|
105
105
|
end
|
|
106
106
|
end
|
|
107
107
|
EOF
|
|
@@ -114,7 +114,7 @@ class RescueTest < Test::Unit::TestCase
|
|
|
114
114
|
|
|
115
115
|
cls, = compile(<<-EOF)
|
|
116
116
|
def foo(x:boolean)
|
|
117
|
-
throws Exception
|
|
117
|
+
# throws Exception
|
|
118
118
|
if x
|
|
119
119
|
raise Exception, "x"
|
|
120
120
|
end
|
|
@@ -126,10 +126,9 @@ class RescueTest < Test::Unit::TestCase
|
|
|
126
126
|
EOF
|
|
127
127
|
|
|
128
128
|
assert_equal "x", cls.foo(true)
|
|
129
|
-
|
|
129
|
+
assert_raise_java java.lang.Exception, "!x" do
|
|
130
130
|
cls.foo(false)
|
|
131
131
|
end
|
|
132
|
-
assert_equal "java.lang.Exception: !x", ex.message
|
|
133
132
|
|
|
134
133
|
cls, = compile(<<-EOF)
|
|
135
134
|
def foo:long
|
|
@@ -174,10 +173,68 @@ class RescueTest < Test::Unit::TestCase
|
|
|
174
173
|
end
|
|
175
174
|
rescue
|
|
176
175
|
ensure
|
|
177
|
-
|
|
176
|
+
System.out.println 'ensuring'
|
|
178
177
|
end
|
|
179
178
|
""
|
|
180
179
|
end
|
|
181
180
|
EOF
|
|
182
181
|
end
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def test_ensure
|
|
185
|
+
cls, = compile(<<-EOF)
|
|
186
|
+
def foo
|
|
187
|
+
1
|
|
188
|
+
ensure
|
|
189
|
+
System.out.println "Hi"
|
|
190
|
+
end
|
|
191
|
+
EOF
|
|
192
|
+
output = capture_output do
|
|
193
|
+
assert_equal(1, cls.foo)
|
|
194
|
+
end
|
|
195
|
+
assert_equal "Hi\n", output
|
|
196
|
+
|
|
197
|
+
cls, = compile(<<-EOF)
|
|
198
|
+
def foo
|
|
199
|
+
return 1
|
|
200
|
+
ensure
|
|
201
|
+
System.out.println "Hi"
|
|
202
|
+
end
|
|
203
|
+
EOF
|
|
204
|
+
output = capture_output do
|
|
205
|
+
assert_equal(1, cls.foo)
|
|
206
|
+
end
|
|
207
|
+
assert_equal "Hi\n", output
|
|
208
|
+
|
|
209
|
+
cls, = compile(<<-EOF)
|
|
210
|
+
def foo
|
|
211
|
+
begin
|
|
212
|
+
break
|
|
213
|
+
ensure
|
|
214
|
+
System.out.println "Hi"
|
|
215
|
+
end while false
|
|
216
|
+
end
|
|
217
|
+
EOF
|
|
218
|
+
output = capture_output do
|
|
219
|
+
cls.foo
|
|
220
|
+
end
|
|
221
|
+
assert_equal "Hi\n", output
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
def test_loop_in_ensure
|
|
225
|
+
cls, = compile(<<-EOF)
|
|
226
|
+
begin
|
|
227
|
+
System.out.println "a"
|
|
228
|
+
begin
|
|
229
|
+
System.out.println "b"
|
|
230
|
+
break
|
|
231
|
+
end while false
|
|
232
|
+
System.out.println "c"
|
|
233
|
+
ensure
|
|
234
|
+
System.out.println "ensure"
|
|
235
|
+
end
|
|
236
|
+
EOF
|
|
237
|
+
|
|
238
|
+
assert_output("a\nb\nc\nensure\n") { cls.main(nil) }
|
|
239
|
+
end
|
|
183
240
|
end
|