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.
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