mirah 0.0.12-java → 0.1.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (171) hide show
  1. data/History.txt +372 -0
  2. data/README.txt +4 -5
  3. data/Rakefile +178 -55
  4. data/examples/appengine/Readme +3 -3
  5. data/examples/appengine/src/org/mirah/MirahApp.mirah +1 -1
  6. data/examples/appengine/src/org/mirah/list.dhtml +1 -1
  7. data/examples/bintrees.mirah +1 -1
  8. data/examples/edb.mirah +1 -1
  9. data/examples/fib.mirah +1 -1
  10. data/examples/interfaces.mirah +1 -1
  11. data/examples/macros/{string-each-char.mirah → string_each_char.mirah} +4 -5
  12. data/examples/maven/README.txt +1 -1
  13. data/examples/maven/src/main/mirah/hello_mirah.mirah +1 -1
  14. data/examples/plugins/appengine/Rakefile +1 -1
  15. data/examples/plugins/appengine/src/com/google/appengine/ext/duby/db/MetaModel.mirah +1 -1
  16. data/examples/plugins/appengine/src/com/google/appengine/ext/duby/db/Model.duby +1 -1
  17. data/examples/plugins/appengine/test/com/google/appengine/ext/duby/db/ModelTest.duby +1 -1
  18. data/examples/rosettacode/100-doors.mirah +6 -6
  19. data/examples/rosettacode/README.txt +3 -3
  20. data/examples/rosettacode/boolean-values.mirah +1 -1
  21. data/examples/rosettacode/comments.mirah +1 -1
  22. data/examples/rosettacode/count-occurrences-of-a-substring.mirah +1 -1
  23. data/examples/rosettacode/factorial.mirah +1 -1
  24. data/examples/rosettacode/fibonacci.mirah +1 -1
  25. data/examples/rosettacode/fizz-buzz.mirah +2 -2
  26. data/examples/rosettacode/flatten-a-list.mirah +4 -4
  27. data/examples/rosettacode/guess-the-number.mirah +2 -2
  28. data/examples/rosettacode/hamming-numbers.mirah +4 -4
  29. data/examples/rosettacode/is-string-numeric.mirah +22 -22
  30. data/examples/rosettacode/palindrome.mirah +2 -2
  31. data/examples/rosettacode/random-numbers.mirah +1 -1
  32. data/examples/rosettacode/repeat-a-string.mirah +1 -1
  33. data/examples/rosettacode/reverse-a-string.mirah +1 -1
  34. data/examples/rosettacode/rot-13.mirah +5 -5
  35. data/examples/rosettacode/secure-temporary-file.mirah +2 -2
  36. data/examples/rosettacode/sleep.mirah +1 -1
  37. data/examples/rosettacode/string-length.mirah +5 -5
  38. data/examples/swing.mirah +1 -1
  39. data/examples/test.edb +1 -1
  40. data/javalib/mirah-bootstrap.jar +0 -0
  41. data/javalib/mirah-builtins.jar +0 -0
  42. data/javalib/mirah-parser.jar +0 -0
  43. data/javalib/mirah-util.jar +0 -0
  44. data/lib/duby.rb +1 -1
  45. data/lib/mirah.rb +50 -28
  46. data/lib/mirah/ast.rb +15 -605
  47. data/lib/mirah/ast/scope.rb +98 -69
  48. data/lib/mirah/commands.rb +1 -1
  49. data/lib/mirah/commands/base.rb +7 -7
  50. data/lib/mirah/commands/compile.rb +3 -3
  51. data/lib/mirah/commands/parse.rb +7 -5
  52. data/lib/mirah/commands/run.rb +12 -19
  53. data/lib/mirah/compiler.rb +15 -23
  54. data/lib/mirah/errors.rb +16 -1
  55. data/lib/mirah/generator.rb +79 -39
  56. data/lib/mirah/jvm/compiler.rb +1 -19
  57. data/lib/mirah/jvm/compiler/base.rb +233 -90
  58. data/lib/mirah/jvm/compiler/jvm_bytecode.rb +675 -363
  59. data/lib/mirah/jvm/method_lookup.rb +134 -65
  60. data/lib/mirah/jvm/typer.rb +10 -5
  61. data/lib/mirah/jvm/types.rb +10 -2
  62. data/lib/mirah/jvm/types/array_type.rb +10 -12
  63. data/lib/mirah/{compiler/type.rb → jvm/types/ast_ext.rb} +12 -8
  64. data/lib/mirah/jvm/types/basic_types.rb +26 -33
  65. data/lib/mirah/jvm/types/bitescript_ext.rb +1 -1
  66. data/lib/mirah/jvm/types/block_type.rb +15 -0
  67. data/lib/mirah/jvm/types/boolean.rb +8 -4
  68. data/lib/mirah/jvm/types/dynamic_type.rb +12 -13
  69. data/lib/mirah/jvm/types/enumerable.rb +7 -7
  70. data/lib/mirah/jvm/types/extensions.rb +11 -6
  71. data/lib/mirah/jvm/types/factory.rb +624 -94
  72. data/lib/mirah/jvm/types/floats.rb +21 -15
  73. data/lib/mirah/jvm/types/generic_type.rb +72 -0
  74. data/lib/mirah/jvm/types/implicit_nil_type.rb +29 -0
  75. data/lib/mirah/jvm/types/integers.rb +26 -71
  76. data/lib/mirah/jvm/types/interface_definition.rb +3 -3
  77. data/lib/mirah/jvm/types/intrinsics.rb +203 -168
  78. data/lib/mirah/jvm/types/literals.rb +6 -6
  79. data/lib/mirah/jvm/types/meta_type.rb +13 -4
  80. data/lib/mirah/jvm/types/methods.rb +281 -93
  81. data/lib/mirah/jvm/types/null_type.rb +17 -5
  82. data/lib/mirah/jvm/types/number.rb +10 -7
  83. data/lib/mirah/jvm/types/primitive_type.rb +17 -6
  84. data/lib/mirah/jvm/types/source_mirror.rb +12 -7
  85. data/lib/mirah/jvm/types/type.rb +107 -23
  86. data/lib/mirah/jvm/types/type_definition.rb +25 -10
  87. data/lib/mirah/jvm/types/unreachable_type.rb +1 -1
  88. data/lib/mirah/jvm/types/void_type.rb +3 -3
  89. data/lib/mirah/parser.rb +154 -16
  90. data/lib/mirah/plugin/edb.rb +1 -1
  91. data/lib/mirah/transform.rb +1 -2
  92. data/lib/mirah/transform/ast_ext.rb +24 -43
  93. data/lib/mirah/transform/transformer.rb +29 -224
  94. data/lib/mirah/typer.rb +2 -16
  95. data/lib/mirah/util/argument_processor.rb +25 -10
  96. data/lib/mirah/util/class_loader.rb +1 -1
  97. data/lib/mirah/util/compilation_state.rb +16 -17
  98. data/lib/mirah/util/delegate.rb +2 -2
  99. data/lib/mirah/util/logging.rb +110 -0
  100. data/lib/mirah/util/process_errors.rb +69 -11
  101. data/lib/mirah/version.rb +1 -1
  102. data/test/core/commands_test.rb +6 -24
  103. data/test/core/env_test.rb +5 -5
  104. data/{lib/mirah/jvm/source_generator/typer.rb → test/core/generator_test.rb} +9 -9
  105. data/test/core/typer_test.rb +196 -158
  106. data/test/core/util/argument_processor_test.rb +10 -10
  107. data/test/core/util/class_loader_test.rb +6 -5
  108. data/test/fixtures/org/foo/LowerCaseInnerClass$inner.class +0 -0
  109. data/test/fixtures/org/foo/LowerCaseInnerClass.class +0 -0
  110. data/test/fixtures/org/foo/LowerCaseInnerClass.java +7 -0
  111. data/test/jvm/annotations_test.rb +5 -5
  112. data/test/jvm/blocks_test.rb +140 -88
  113. data/test/jvm/bytecode_test_helper.rb +112 -94
  114. data/test/jvm/cast_test.rb +162 -0
  115. data/test/jvm/constructors_test.rb +18 -8
  116. data/test/jvm/enumerable_test.rb +77 -44
  117. data/test/jvm/example_test.rb +53 -0
  118. data/test/jvm/factory_test.rb +7 -1
  119. data/test/jvm/generics_test.rb +57 -0
  120. data/test/jvm/hash_test.rb +106 -0
  121. data/test/jvm/import_test.rb +81 -0
  122. data/test/jvm/interface_test.rb +73 -0
  123. data/test/jvm/java_typer_test.rb +92 -66
  124. data/{lib/mirah/typer/base.rb → test/jvm/jvm_commands_test.rb} +6 -10
  125. data/test/jvm/jvm_compiler_test.rb +170 -604
  126. data/test/jvm/list_extensions_test.rb +23 -0
  127. data/test/jvm/macros_test.rb +197 -32
  128. data/test/jvm/main_method_test.rb +4 -4
  129. data/test/jvm/numeric_extensions_test.rb +13 -0
  130. data/test/jvm/rescue_test.rb +73 -16
  131. data/test/jvm/varargs_test.rb +65 -0
  132. data/test/test_helper.rb +1 -2
  133. metadata +234 -251
  134. data/examples/SortClosure$__xform_tmp_1.class +0 -0
  135. data/examples/SortClosure$__xform_tmp_2.class +0 -0
  136. data/examples/SortClosure.class +0 -0
  137. data/examples/macros/StringEachChar$Extension1.class +0 -0
  138. data/lib/mirah/ast/call.rb +0 -345
  139. data/lib/mirah/ast/class.rb +0 -359
  140. data/lib/mirah/ast/flow.rb +0 -381
  141. data/lib/mirah/ast/intrinsics.rb +0 -563
  142. data/lib/mirah/ast/literal.rb +0 -178
  143. data/lib/mirah/ast/local.rb +0 -112
  144. data/lib/mirah/ast/method.rb +0 -408
  145. data/lib/mirah/ast/structure.rb +0 -387
  146. data/lib/mirah/ast/type.rb +0 -146
  147. data/lib/mirah/commands/base.rb~ +0 -57
  148. data/lib/mirah/compiler/call.rb +0 -45
  149. data/lib/mirah/compiler/class.rb +0 -81
  150. data/lib/mirah/compiler/flow.rb +0 -109
  151. data/lib/mirah/compiler/literal.rb +0 -130
  152. data/lib/mirah/compiler/local.rb +0 -59
  153. data/lib/mirah/compiler/method.rb +0 -44
  154. data/lib/mirah/compiler/structure.rb +0 -65
  155. data/lib/mirah/jvm/compiler/java_source.rb +0 -787
  156. data/lib/mirah/jvm/method_lookup.rb~ +0 -247
  157. data/lib/mirah/jvm/source_generator/builder.rb +0 -468
  158. data/lib/mirah/jvm/source_generator/loops.rb +0 -131
  159. data/lib/mirah/jvm/source_generator/precompile.rb +0 -210
  160. data/lib/mirah/plugin/gwt.rb +0 -189
  161. data/lib/mirah/plugin/java.rb +0 -70
  162. data/lib/mirah/transform/error.rb +0 -13
  163. data/lib/mirah/transform/helper.rb +0 -765
  164. data/lib/mirah/typer/simple.rb +0 -384
  165. data/lib/mirah/version.rb~ +0 -18
  166. data/test/core/ast_test.rb +0 -382
  167. data/test/core/compilation_test.rb +0 -130
  168. data/test/core/macros_test.rb +0 -61
  169. data/test/jvm/javac_test_helper.rb +0 -89
  170. data/test/jvm/jvm_compiler_test.rb~ +0 -2181
  171. data/test/plugins/gwt_test.rb +0 -69
@@ -0,0 +1,162 @@
1
+ # Copyright (c) 2013 The Mirah project authors. All Rights Reserved.
2
+ # All contributing project authors may be found in the NOTICE file.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ class CastTest < Test::Unit::TestCase
17
+
18
+ def test_cast
19
+ cls, = compile(<<-EOF)
20
+ def f2b; byte(1.0); end
21
+ def f2s; short(1.0); end
22
+ def f2c; char(1.0); end
23
+ def f2i; int(1.0); end
24
+ def f2l; long(1.0); end
25
+ def f2d; int(1.0); end
26
+
27
+ def i2b; byte(1); end
28
+ def i2s; short(1); end
29
+ def i2c; char(1); end
30
+ def i2l; long(1); end
31
+ def i2f; float(1); end
32
+ def i2d; int(1); end
33
+
34
+ def b2s; short(byte(1)); end
35
+ def b2c; char(byte(1)); end
36
+ def b2i; int(byte(1)); end
37
+ def b2l; long(byte(1)); end
38
+ def b2f; float(byte(1)); end
39
+ def b2d; double(byte(1)); end
40
+
41
+ def s2b; byte(short(1)); end
42
+ def s2c; char(short(1)); end
43
+ def s2i; int(short(1)); end
44
+ def s2l; long(short(1)); end
45
+ def s2f; float(short(1)); end
46
+ def s2d; double(short(1)); end
47
+
48
+ def c2b; byte(char(1)); end
49
+ def c2s; short(char(1)); end
50
+ def c2i; int(char(1)); end
51
+ def c2l; long(char(1)); end
52
+ def c2f; float(char(1)); end
53
+ def c2d; double(char(1)); end
54
+
55
+ def l2b; byte(long(1)); end
56
+ def l2c; char(long(1)); end
57
+ def l2i; int(long(1)); end
58
+ def l2l; long(long(1)); end
59
+ def l2f; float(long(1)); end
60
+ def l2d; double(long(1)); end
61
+
62
+ def d2b; byte(1.0); end
63
+ def d2s; short(1.0); end
64
+ def d2c; char(1.0); end
65
+ def d2i; int(1.0); end
66
+ def d2l; long(1.0); end
67
+ def d2f; float(1.0); end
68
+
69
+ def hard_i2f(a:int)
70
+ float(if a < 0
71
+ a *= -1
72
+ a * 2
73
+ else
74
+ a * 2
75
+ end)
76
+ end
77
+ EOF
78
+
79
+ assert_equal 1, cls.b2s
80
+ assert_equal 1, cls.b2c
81
+ assert_equal 1, cls.b2i
82
+ assert_equal 1, cls.b2l
83
+ assert_equal 1.0, cls.b2f
84
+ assert_equal 1.0, cls.b2d
85
+
86
+ assert_equal 1, cls.s2b
87
+ assert_equal 1, cls.s2c
88
+ assert_equal 1, cls.s2i
89
+ assert_equal 1, cls.s2l
90
+ assert_equal 1.0, cls.s2f
91
+ assert_equal 1.0, cls.s2d
92
+
93
+ assert_equal 1, cls.c2b
94
+ assert_equal 1, cls.c2s
95
+ assert_equal 1, cls.c2i
96
+ assert_equal 1, cls.c2l
97
+ assert_equal 1.0, cls.c2f
98
+ assert_equal 1.0, cls.c2d
99
+
100
+ assert_equal 1, cls.i2b
101
+ assert_equal 1, cls.i2s
102
+ assert_equal 1, cls.i2c
103
+ assert_equal 1, cls.i2l
104
+ assert_equal 1.0, cls.i2f
105
+ assert_equal 1.0, cls.i2d
106
+
107
+ assert_equal 1, cls.f2b
108
+ assert_equal 1, cls.f2s
109
+ assert_equal 1, cls.f2c
110
+ assert_equal 1, cls.f2i
111
+ assert_equal 1, cls.f2l
112
+ assert_equal 1.0, cls.f2d
113
+
114
+ assert_equal 1, cls.d2b
115
+ assert_equal 1, cls.d2s
116
+ assert_equal 1, cls.d2c
117
+ assert_equal 1, cls.d2i
118
+ assert_equal 1, cls.d2l
119
+ assert_equal 1.0, cls.d2f
120
+
121
+ assert_equal 2.0, cls.hard_i2f(1)
122
+ assert_equal 4.0, cls.hard_i2f(-2)
123
+ end
124
+
125
+ def test_java_lang_cast
126
+ cls, = compile(<<-EOF)
127
+ def foo(a:Object)
128
+ Integer(a).intValue
129
+ end
130
+ EOF
131
+
132
+ assert_equal(2, cls.foo(java.lang.Integer.new(2)))
133
+ end
134
+
135
+ def test_array_cast
136
+ cls, = compile(<<-EOF)
137
+ def foo(a:Object)
138
+ bar(String[].cast(a))
139
+ end
140
+
141
+ def bar(a:String[])
142
+ a[0]
143
+ end
144
+ EOF
145
+
146
+ assert_equal("foo", cls.foo(["foo", "bar"].to_java(:string)))
147
+ end
148
+
149
+ def test_array_cast_primitive
150
+ cls, = compile(<<-EOF)
151
+ def foo(a:Object)
152
+ bar(int[].cast(a))
153
+ end
154
+
155
+ def bar(a:int[])
156
+ a[0]
157
+ end
158
+ EOF
159
+
160
+ assert_equal(2, cls.foo([2, 3].to_java(:int)))
161
+ end
162
+ end
@@ -16,12 +16,12 @@
16
16
  class ConstructorsTest < Test::Unit::TestCase
17
17
  def test_constructor
18
18
  cls, = compile(
19
- "class InitializeTest;def initialize;puts 'Constructed';end;end")
19
+ "class InitializeTest;def initialize;System.out.println 'Constructed';end;end")
20
20
  assert_output("Constructed\n") do
21
21
  cls.new
22
22
  end
23
23
  end
24
-
24
+
25
25
  def test_constructor_chaining
26
26
  foo, = compile(<<-EOF)
27
27
  class Foo5
@@ -57,18 +57,17 @@ class ConstructorsTest < Test::Unit::TestCase
57
57
  sc_a, sc_b = compile(<<-EOF)
58
58
  class SC_A
59
59
  def initialize(a:int)
60
- puts "A"
60
+ System.out.println "A"
61
61
  end
62
62
  end
63
63
 
64
64
  class SC_B < SC_A
65
65
  def initialize
66
66
  super(0)
67
- puts "B"
67
+ System.out.println "B"
68
68
  end
69
69
  end
70
70
  EOF
71
-
72
71
  assert_output("A\nB\n") do
73
72
  sc_b.new
74
73
  end
@@ -85,8 +84,19 @@ class ConstructorsTest < Test::Unit::TestCase
85
84
 
86
85
  def test_inexact_constructor
87
86
  # FIXME: this is a stupid test
88
- cls, = compile(
89
- "class EmptyEmpty; def self.empty_empty; t = Thread.new(Thread.new); t.start; begin; t.join; rescue InterruptedException; end; puts 'ok'; end; end")
87
+ cls, = compile(<<-EOF)
88
+ class EmptyEmpty
89
+ def self.empty_empty
90
+ t = Thread.new(Thread.new)
91
+ t.start
92
+ begin
93
+ t.join
94
+ rescue InterruptedException
95
+ end
96
+ System.out.println 'ok'
97
+ end
98
+ end
99
+ EOF
90
100
  assert_output("ok\n") do
91
101
  cls.empty_empty
92
102
  end
@@ -100,7 +110,7 @@ class ConstructorsTest < Test::Unit::TestCase
100
110
  end
101
111
  end
102
112
 
103
- print DefaultConstructable.new.foo
113
+ System.out.print DefaultConstructable.new.foo
104
114
  EOF
105
115
 
106
116
  assert_output("foo") do
@@ -14,7 +14,7 @@
14
14
  # limitations under the License.
15
15
 
16
16
  class EnumerableTest < Test::Unit::TestCase
17
- def test_for
17
+ def test_for_in_int_array
18
18
  cls, = compile(<<-EOF)
19
19
  def foo
20
20
  a = int[3]
@@ -25,6 +25,7 @@ class EnumerableTest < Test::Unit::TestCase
25
25
  count
26
26
  end
27
27
  EOF
28
+ assert_equal(3, cls.foo)
28
29
 
29
30
  cls, = compile(<<-EOF)
30
31
  def foo(a:int[])
@@ -37,11 +38,13 @@ class EnumerableTest < Test::Unit::TestCase
37
38
  EOF
38
39
 
39
40
  assert_equal(9, cls.foo([2, 3, 4].to_java(:int)))
41
+ end
40
42
 
43
+ def test_each_iterable
41
44
  cls, = compile(<<-EOF)
42
45
  def foo(a:Iterable)
43
46
  a.each do |x|
44
- puts x
47
+ System.out.println x
45
48
  end
46
49
  end
47
50
  EOF
@@ -53,12 +56,14 @@ class EnumerableTest < Test::Unit::TestCase
53
56
  list << "3"
54
57
  cls.foo(list)
55
58
  end
59
+ end
56
60
 
61
+ def test_each_arraylist
57
62
  cls, = compile(<<-EOF)
58
63
  import java.util.ArrayList
59
64
  def foo(a:ArrayList)
60
65
  a.each do |x|
61
- puts x
66
+ System.out.println x
62
67
  end
63
68
  end
64
69
  EOF
@@ -70,10 +75,12 @@ class EnumerableTest < Test::Unit::TestCase
70
75
  list << "3"
71
76
  cls.foo(list)
72
77
  end
78
+ end
73
79
 
80
+ def test_each_int_arry
74
81
  cls, = compile(<<-EOF)
75
82
  def foo(a:int[])
76
- a.each {|x| x += 1;puts x; redo if x == 2}
83
+ a.each {|x| x += 1;System.out.println x; redo if x == 2}
77
84
  end
78
85
  EOF
79
86
 
@@ -82,7 +89,7 @@ class EnumerableTest < Test::Unit::TestCase
82
89
  end
83
90
  end
84
91
 
85
- def test_all
92
+ def test_all_int_array
86
93
  cls, = compile(<<-EOF)
87
94
  def foo(a:int[])
88
95
  a.all? {|x| x % 2 == 0}
@@ -91,7 +98,9 @@ class EnumerableTest < Test::Unit::TestCase
91
98
 
92
99
  assert_equal(false, cls.foo([2, 3, 4].to_java(:int)))
93
100
  assert_equal(true, cls.foo([2, 0, 4].to_java(:int)))
101
+ end
94
102
 
103
+ def test_all_string_array
95
104
  cls, = compile(<<-EOF)
96
105
  def foo(a:String[])
97
106
  a.all?
@@ -105,7 +114,7 @@ class EnumerableTest < Test::Unit::TestCase
105
114
  def test_downto
106
115
  cls, = compile(<<-EOF)
107
116
  def foo(i:int)
108
- i.downto(1) {|x| puts x }
117
+ i.downto(1) {|x| System.out.println x }
109
118
  end
110
119
  EOF
111
120
 
@@ -117,7 +126,7 @@ class EnumerableTest < Test::Unit::TestCase
117
126
  def test_upto
118
127
  cls, = compile(<<-EOF)
119
128
  def foo(i:int)
120
- i.upto(3) {|x| puts x }
129
+ i.upto(3) {|x| System.out.println x }
121
130
  end
122
131
  EOF
123
132
 
@@ -129,7 +138,7 @@ class EnumerableTest < Test::Unit::TestCase
129
138
  def test_times
130
139
  cls, = compile(<<-EOF)
131
140
  def foo(i:int)
132
- i.times {|x| puts x }
141
+ i.times {|x| System.out.println x }
133
142
  end
134
143
  EOF
135
144
 
@@ -139,7 +148,7 @@ class EnumerableTest < Test::Unit::TestCase
139
148
 
140
149
  cls, = compile(<<-EOF)
141
150
  def foo(i:int)
142
- i.times { puts "Hi" }
151
+ i.times { System.out.println "Hi" }
143
152
  end
144
153
  EOF
145
154
 
@@ -151,85 +160,101 @@ class EnumerableTest < Test::Unit::TestCase
151
160
  def test_general_loop
152
161
  cls, = compile(<<-EOF)
153
162
  def foo(x:boolean)
154
- a = ""
155
- __gloop__(nil, x, true, nil, nil) {a += "<body>"}
156
- a
163
+ a = StringBuilder.new
164
+ while x
165
+ a.append "<body>"
166
+ end
167
+ a.toString
157
168
  end
158
169
  EOF
159
170
  assert_equal("", cls.foo(false))
160
171
 
161
172
  cls, = compile(<<-EOF)
162
173
  def foo
163
- a = ""
164
- __gloop__(nil, false, false, nil, nil) {a += "<body>"}
165
- a
174
+ a = StringBuilder.new
175
+ begin
176
+ a.append "<body>"
177
+ end while false
178
+ a.toString
166
179
  end
167
180
  EOF
168
181
  assert_equal("<body>", cls.foo)
169
182
 
170
183
  cls, = compile(<<-EOF)
171
184
  def foo(x:boolean)
172
- a = ""
173
- __gloop__(a += "<init>", x, true, a += "<pre>", a += "<post>") do
174
- a += "<body>"
185
+ a = StringBuilder.new
186
+ while x
187
+ init {a.append "<init>"}
188
+ pre {a.append "<pre>"}
189
+ post {a.append "<post>"}
190
+ a.append "<body>"
175
191
  end
176
- a
192
+ a.toString
177
193
  end
178
194
  EOF
179
195
  assert_equal("<init>", cls.foo(false))
180
196
 
181
197
  cls, = compile(<<-EOF)
182
198
  def foo
183
- a = ""
184
- __gloop__(a += "<init>", false, false, a += "<pre>", a += "<post>") do
185
- a += "<body>"
186
- end
187
- a
199
+ a = StringBuilder.new
200
+ begin
201
+ init {a.append "<init>"}
202
+ pre {a.append "<pre>"}
203
+ post {a.append "<post>"}
204
+ a.append "<body>"
205
+ end while false
206
+ a.toString
188
207
  end
189
208
  EOF
190
209
  assert_equal("<init><pre><body><post>", cls.foo)
191
210
 
192
211
  cls, = compile(<<-EOF)
193
212
  def foo
194
- a = ""
195
- __gloop__(a += "<init>", false, false, a += "<pre>", a += "<post>") do
196
- a += "<body>"
213
+ a = StringBuilder.new
214
+ begin
215
+ init {a.append "<init>"}
216
+ pre {a.append "<pre>"}
217
+ post {a.append "<post>"}
218
+ a.append "<body>"
197
219
  redo if a.length < 20
198
- end
199
- a
220
+ end while false
221
+ a.toString
200
222
  end
201
223
  EOF
202
224
  assert_equal( "<init><pre><body><body><post>", cls.foo)
203
225
 
204
226
  cls, = compile(<<-EOF)
205
227
  def foo
206
- a = ""
207
- __gloop__(a += "<init>", a.length < 20, true, a += "<pre>", a += "<post>") do
228
+ a = StringBuilder.new
229
+ while a.length < 20
230
+ init {a.append "<init>"}
231
+ pre {a.append "<pre>"}
232
+ post {a.append "<post>"}
208
233
  next if a.length < 17
209
- a += "<body>"
234
+ a.append "<body>"
210
235
  end
211
- a
236
+ a.toString
212
237
  end
213
238
  EOF
214
239
  assert_equal("<init><pre><post><pre><body><post>", cls.foo)
215
240
  end
216
241
 
217
-
242
+
218
243
  def test_each
219
244
  cls, = compile(<<-EOF)
220
245
  def foo
221
- [1,2,3].each {|x| puts x}
246
+ [1,2,3].each {|x| System.out.println x}
222
247
  end
223
248
  EOF
224
249
  assert_output("1\n2\n3\n") do
225
250
  cls.foo
226
251
  end
227
252
  end
228
-
253
+
229
254
  def test_each_without_block_arguments
230
255
  cls, = compile(<<-EOF)
231
256
  def foo
232
- [1,2,3].each { puts :thrice }
257
+ [1,2,3].each { System.out.println :thrice }
233
258
  end
234
259
  EOF
235
260
  assert_output("thrice\nthrice\nthrice\n") do
@@ -242,8 +267,8 @@ class EnumerableTest < Test::Unit::TestCase
242
267
  cls, = compile(<<-EOF)
243
268
  import java.lang.Integer
244
269
  def foo
245
- puts [1,2,3].any?
246
- puts [1,2,3].any? {|x| Integer(x).intValue > 3}
270
+ System.out.println [1,2,3].any?
271
+ System.out.println [1,2,3].any? {|x| Integer(x).intValue > 3}
247
272
  end
248
273
  EOF
249
274
  assert_output("true\nfalse\n") do
@@ -255,13 +280,22 @@ class EnumerableTest < Test::Unit::TestCase
255
280
  cls, = compile(<<-EOF)
256
281
  import java.lang.Integer
257
282
  def foo
258
- puts [1,2,3].all?
259
- puts [1,2,3].all? {|x| Integer(x).intValue > 3}
283
+ System.out.println [1,2,3].all?
284
+ System.out.println [1,2,3].all? {|x| Integer(x).intValue > 3}
260
285
  end
261
286
  EOF
262
287
  assert_output("true\nfalse\n") do
263
288
  cls.foo
264
289
  end
290
+
291
+ cls, = compile(<<-EOF)
292
+ def foo
293
+ System.out.println [1,2,3].all? {|x| x.intValue > 3}
294
+ end
295
+ EOF
296
+ assert_output("false\n") do
297
+ cls.foo
298
+ end
265
299
  end
266
300
 
267
301
  def test_mirah_iterable
@@ -291,14 +325,13 @@ class EnumerableTest < Test::Unit::TestCase
291
325
  end
292
326
 
293
327
  def self.test(x:String)
294
- MyIterator.new(x).each {|y| puts y}
328
+ MyIterator.new(x).each {|y| System.out.println y}
295
329
  end
296
330
  end
297
331
  EOF
298
-
332
+
299
333
  assert_output("Hi\n") do
300
334
  cls.test("Hi")
301
335
  end
302
336
  end
303
-
304
337
  end