mirah 0.1.2-java → 0.1.3-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/History.txt +225 -0
  3. data/Rakefile +108 -315
  4. data/TODO.md +100 -0
  5. data/bin/bundler +16 -0
  6. data/bin/rake +16 -0
  7. data/dist/mirahc.jar +0 -0
  8. data/examples/appengine/Readme +0 -1
  9. data/examples/literals.mirah +17 -0
  10. data/examples/macros/string_each_char.mirah +1 -1
  11. data/lib/mirah.rb +11 -21
  12. data/lib/mirah/transform/transformer.rb +1 -2
  13. data/lib/mirah/util/class_loader.rb +1 -1
  14. data/lib/mirah/util/logging.rb +0 -63
  15. data/lib/mirah/util/process_errors.rb +1 -0
  16. data/lib/mirah/version.rb +1 -1
  17. data/{examples/simple_class.mirah~ → test/artifacts/jar_test.rb} +7 -11
  18. data/{lib/mirah/commands.rb → test/artifacts/jruby_test.rb} +8 -5
  19. data/test/core/typer_test.rb +29 -11
  20. data/test/core/util/argument_processor_test.rb +24 -23
  21. data/test/core/util/class_loader_test.rb +7 -4
  22. data/test/core/util/{compilation_state_test.rb → jvm_version_test.rb} +20 -16
  23. data/test/fixtures/org/foo/ImplicitClassRetAnno.java +4 -0
  24. data/test/fixtures/org/foo/IntAnno.java +9 -0
  25. data/test/jvm/annotations_test.rb +11 -11
  26. data/test/jvm/blocks_test.rb +16 -12
  27. data/test/jvm/constructors_test.rb +8 -8
  28. data/test/jvm/enumerable_test.rb +48 -24
  29. data/test/jvm/generics_test.rb +3 -7
  30. data/test/jvm/import_test.rb +14 -0
  31. data/test/jvm/interface_test.rb +9 -24
  32. data/test/jvm/jvm_commands_test.rb +22 -4
  33. data/test/jvm/jvm_compiler_test.rb +124 -79
  34. data/test/jvm/list_extensions_test.rb +1 -1
  35. data/test/jvm/macros_test.rb +67 -14
  36. data/test/jvm/main_method_test.rb +1 -1
  37. data/test/jvm/new_backend_test_helper.rb +100 -3
  38. data/{lib/mirah/jvm/types/bitescript_ext.rb → test/jvm/static_fields_test.rb} +22 -21
  39. data/test/mirrors/base_type_test.rb +4 -3
  40. data/test/mirrors/bytecode_mirror_test.rb +35 -15
  41. data/test/mirrors/generics_test.rb +14 -5
  42. data/test/mirrors/member_test.rb +2 -1
  43. data/test/mirrors/method_lookup_test.rb +18 -6
  44. data/test/mirrors/mirrors_test.rb +87 -20
  45. data/test/mirrors/simple_async_mirror_loader_test.rb +7 -3
  46. data/test/mirrors/simple_mirror_loader_test.rb +5 -5
  47. data/test/test_helper.rb +25 -1
  48. metadata +18 -78
  49. data/bin/mirahp +0 -27
  50. data/bin/mirahp.cmd +0 -16
  51. data/examples/Fib.class +0 -0
  52. data/javalib/mirah-bootstrap.jar +0 -0
  53. data/javalib/mirah-builtins.jar +0 -0
  54. data/javalib/mirah-compiler.jar +0 -0
  55. data/javalib/mirah-mirrors.jar +0 -0
  56. data/javalib/mirah-newast-transitional.jar +0 -0
  57. data/javalib/mirah-parser.jar +0 -0
  58. data/javalib/mirah-util.jar +0 -0
  59. data/lib/mirah/ast.rb +0 -43
  60. data/lib/mirah/ast/scope.rb +0 -262
  61. data/lib/mirah/commands/base.rb +0 -59
  62. data/lib/mirah/commands/compile.rb +0 -39
  63. data/lib/mirah/commands/parse.rb +0 -36
  64. data/lib/mirah/commands/run.rb +0 -78
  65. data/lib/mirah/generator.rb +0 -150
  66. data/lib/mirah/jvm/compiler.rb +0 -50
  67. data/lib/mirah/jvm/compiler/base.rb +0 -421
  68. data/lib/mirah/jvm/compiler/jvm_bytecode.rb +0 -1194
  69. data/lib/mirah/jvm/method_lookup.rb +0 -307
  70. data/lib/mirah/jvm/types.rb +0 -45
  71. data/lib/mirah/jvm/types/array_type.rb +0 -60
  72. data/lib/mirah/jvm/types/ast_ext.rb +0 -31
  73. data/lib/mirah/jvm/types/basic_types.rb +0 -41
  74. data/lib/mirah/jvm/types/block_type.rb +0 -15
  75. data/lib/mirah/jvm/types/boolean.rb +0 -70
  76. data/lib/mirah/jvm/types/enumerable.rb +0 -80
  77. data/lib/mirah/jvm/types/extensions.rb +0 -110
  78. data/lib/mirah/jvm/types/factory.rb +0 -830
  79. data/lib/mirah/jvm/types/floats.rb +0 -99
  80. data/lib/mirah/jvm/types/generic_type.rb +0 -72
  81. data/lib/mirah/jvm/types/implicit_nil_type.rb +0 -29
  82. data/lib/mirah/jvm/types/integers.rb +0 -131
  83. data/lib/mirah/jvm/types/interface_definition.rb +0 -20
  84. data/lib/mirah/jvm/types/intrinsics.rb +0 -385
  85. data/lib/mirah/jvm/types/literals.rb +0 -89
  86. data/lib/mirah/jvm/types/meta_type.rb +0 -54
  87. data/lib/mirah/jvm/types/methods.rb +0 -946
  88. data/lib/mirah/jvm/types/null_type.rb +0 -39
  89. data/lib/mirah/jvm/types/number.rb +0 -184
  90. data/lib/mirah/jvm/types/primitive_type.rb +0 -76
  91. data/lib/mirah/jvm/types/source_mirror.rb +0 -274
  92. data/lib/mirah/jvm/types/type.rb +0 -311
  93. data/lib/mirah/jvm/types/type_definition.rb +0 -72
  94. data/lib/mirah/jvm/types/void_type.rb +0 -19
  95. data/lib/mirah/util/compilation_state.rb +0 -60
  96. data/test/core/commands_test.rb +0 -89
  97. data/test/core/generator_test.rb +0 -26
  98. data/test/fixtures/org/foo/LowerCaseInnerClass$inner.class +0 -0
  99. data/test/fixtures/org/foo/LowerCaseInnerClass.class +0 -0
  100. data/test/jvm/bytecode_test_helper.rb +0 -193
  101. data/test/jvm/factory_test.rb +0 -28
  102. data/test/jvm/java_typer_test.rb +0 -283
@@ -14,12 +14,8 @@
14
14
  # limitations under the License.
15
15
 
16
16
  require 'test_helper'
17
- require 'jvm/bytecode_test_helper'
18
- class TestGenerics < Test::Unit::TestCase
19
17
 
20
- def parse_and_type code, name=tmp_script_name
21
- parse_and_resolve_types name, code
22
- end
18
+ class GenericsTest < Test::Unit::TestCase
23
19
 
24
20
  def test_generics_calls_collections
25
21
  cls, = compile(<<-EOF)
@@ -28,7 +24,7 @@ class TestGenerics < Test::Unit::TestCase
28
24
  foo = ArrayList.new()
29
25
  foo.add("first string")
30
26
  foo.add("second string")
31
- System.out.println(foo.get(1).substring(2))
27
+ puts(foo.get(1).substring(2))
32
28
  EOF
33
29
 
34
30
  assert_output("cond string\n") do
@@ -45,7 +41,7 @@ class TestGenerics < Test::Unit::TestCase
45
41
  foo.add("second string")
46
42
  bar = ArrayList.new()
47
43
  bar.add(foo)
48
- System.out.println(bar.get(0).get(1).substring(2))
44
+ puts(bar.get(0).get(1).substring(2))
49
45
  EOF
50
46
 
51
47
  assert_output("cond string\n") do
@@ -78,4 +78,18 @@ class ImportTest < Test::Unit::TestCase
78
78
  assert_equal(["1", "2", "3"], list.to_a)
79
79
  end
80
80
 
81
+ def test_static_import_late_resolve
82
+ cls, = compile(<<-EOF)
83
+ import static StaticImports2.*
84
+ doFoo()
85
+
86
+ class StaticImports2
87
+ def self.doFoo
88
+ puts :hi
89
+ end
90
+ end
91
+ EOF
92
+ assert_output("hi\n") { cls.main(nil) }
93
+ end
94
+
81
95
  end
@@ -83,31 +83,16 @@ class InterfaceTest < Test::Unit::TestCase
83
83
  EOF
84
84
  end
85
85
 
86
- def test_interface_implementation_with_array_params_requires_type_information
86
+ def test_interface_implementation_with_array_params_doesnt_requires_type_information
87
87
  interface, a_impl = compile(<<-EOF)
88
- interface InterfaceWithArrays
89
- def arr(messages:String[]):int; end
90
- end
91
-
92
- class ExplicitArrImpl implements InterfaceWithArrays
93
- def blah(s:String[]) s.length ; end
94
- def arr(messages:String[]) blah messages ; end
95
- end
96
- EOF
97
-
98
- # this is the current behavior. I think we should fix it. nh
99
- error = assert_raises Mirah::MirahError do
100
- interface, a_impl = compile(<<-EOF)
101
- interface InterfaceWithArrays
102
- def arr(messages:String[]):int; end
103
- end
88
+ interface InterfaceWithArrays
89
+ def arr(messages:String[]):int; end
90
+ end
104
91
 
105
- class ImplicitArrImpl implements InterfaceWithArrays
106
- def blah(s:String[]) s.length ; end
107
- def arr(messages) blah messages ; end
108
- end
109
- EOF
110
- end
111
- assert_equal "Cannot find instance method blah(java.lang.String) on ImplicitArrImpl", error.message
92
+ class ImplicitArrImpl implements InterfaceWithArrays
93
+ def blah(s:String[]) s.length ; end
94
+ def arr(messages) blah messages ; end
95
+ end
96
+ EOF
112
97
  end
113
98
  end
@@ -16,19 +16,37 @@ require 'test_helper'
16
16
 
17
17
 
18
18
  class JVMCommandsTest < Test::Unit::TestCase
19
+
19
20
  def test_dash_e_eval
20
21
  assert_output "1\n" do
21
- Mirah::Commands::Run.new(['-e','puts 1']).execute
22
+ Mirah.run('-e','puts 1')
22
23
  end
23
24
  end
24
25
 
26
+ def test_force_verbose_has_logging
27
+ out = capture_output do
28
+ Mirah.run('-V', '-e','puts 1')
29
+ end
30
+ assert out.include? "Finished class DashE"
31
+ end
32
+
25
33
  def test_runtime_classpath_modifications
26
34
  assert_output "1234\n" do
27
- Mirah::Commands::Run.new(['-c', FIXTURE_TEST_DEST,
35
+ Mirah.run('-cp', FIXTURE_TEST_DEST,
36
+ '-e',
37
+ 'import org.foo.LowerCaseInnerClass
38
+ puts LowerCaseInnerClass.inner.field'
39
+ )
40
+ end
41
+ end
42
+
43
+ def test_dash_c_is_deprecated
44
+ assert_output "WARN: option -c is deprecated.\n1234\n" do
45
+ Mirah.run('-c', FIXTURE_TEST_DEST,
28
46
  '-e',
29
47
  'import org.foo.LowerCaseInnerClass
30
- puts LowerCaseInnerClass.inner.field']
31
- ).execute
48
+ puts LowerCaseInnerClass.inner.field'
49
+ )
32
50
  end
33
51
  end
34
52
  end
@@ -34,6 +34,14 @@ class JVMCompilerTest < Test::Unit::TestCase
34
34
  assert_equal(3.0, cls.foo)
35
35
  end
36
36
 
37
+ def test_unary_negation
38
+ cls, = compile("def foo; a = 1; -a; end")
39
+ assert_equal(-1, cls.foo)
40
+
41
+ cls, = compile("def foo; a = 1; 1 + -a; end")
42
+ assert_equal(0, cls.foo)
43
+ end
44
+
37
45
  def test_subtraction
38
46
  cls, = compile("def foo; a = 3; b = 2; a - b; end")
39
47
  assert_equal(1, cls.foo)
@@ -101,6 +109,25 @@ class JVMCompilerTest < Test::Unit::TestCase
101
109
  assert_equal(6, cls.foo)
102
110
  end
103
111
 
112
+ def test_negate
113
+ cls, = compile("def foo; a = 5; -a; end")
114
+ assert_equal(-5, cls.foo)
115
+ cls, = compile("def foo; a = 7.5; -a; end")
116
+ assert_equal(-7.5, cls.foo)
117
+ end
118
+
119
+ def test_nan
120
+ cls, = compile("def foo(a:double); if a < 0 then 1 else 2 end; end")
121
+ assert_equal(1, cls.foo(-1))
122
+ assert_equal(2, cls.foo(0))
123
+ assert_equal(2, cls.foo(java.lang.Double::NaN))
124
+
125
+ cls, = compile("def foo(a:double); a > 0 ? 1 : 2; end")
126
+ assert_equal(1, cls.foo(1))
127
+ assert_equal(2, cls.foo(-1))
128
+ assert_equal(2, cls.foo(java.lang.Double::NaN))
129
+ end
130
+
104
131
  def test_return
105
132
  cls, = compile("def foo; return 1; end")
106
133
  assert_equal(1, cls.foo)
@@ -193,9 +220,11 @@ class JVMCompilerTest < Test::Unit::TestCase
193
220
  end
194
221
 
195
222
  def test_object_array
196
- cls, = compile("import java.lang.Object;def foo; a = Object[2];end")
197
- assert_equal(Java::JavaLang::Object[].java_class, cls.foo.class.java_class)
198
- assert_equal([nil, nil], cls.foo.to_a)
223
+ pend_on_jruby("1.7.13") do
224
+ cls, = compile("import java.lang.Object;def foo; a = Object[2];end")
225
+ assert_equal(Java::JavaLang::Object[].java_class, cls.foo.class.java_class)
226
+ assert_equal([nil, nil], cls.foo.to_a)
227
+ end
199
228
  end
200
229
 
201
230
  def test_void_selfcall
@@ -218,12 +247,12 @@ class JVMCompilerTest < Test::Unit::TestCase
218
247
  a, b = compile(<<-EOF)
219
248
  class VoidBase
220
249
  def foo:void
221
- System.out.println "foo"
250
+ puts "foo"
222
251
  end
223
252
  end
224
253
  class VoidChain < VoidBase
225
254
  def bar:void
226
- System.out.println "bar"
255
+ puts "bar"
227
256
  end
228
257
 
229
258
  def self.foobar
@@ -241,12 +270,12 @@ class JVMCompilerTest < Test::Unit::TestCase
241
270
  end
242
271
 
243
272
  def test_class_name_from_file_with_underscore
244
- foo, = compile("System.out.println 'blah'", :name => 'class_name_test.mirah')
273
+ foo, = compile("puts 'blah'", :name => 'class_name_test.mirah')
245
274
  assert_equal('ClassNameTest', foo.java_class.name)
246
275
  end
247
276
 
248
277
  def test_class_name_from_file_with_dash
249
- foo, = compile("System.out.println 'blah'", :name => 'class-dash-test.mirah')
278
+ foo, = compile("puts 'blah'", :name => 'class-dash-test.mirah')
250
279
  assert_equal('ClassDashTest', foo.java_class.name)
251
280
  end
252
281
 
@@ -415,25 +444,25 @@ class JVMCompilerTest < Test::Unit::TestCase
415
444
 
416
445
  def test_loop
417
446
  cls, = compile(
418
- 'def foo(a:int);while a > 0; a -= 1; System.out.println ".";end;end')
447
+ 'def foo(a:int);while a > 0; a -= 1; puts ".";end;end')
419
448
  assert_equal('', capture_output{cls.foo(0)})
420
449
  assert_equal(".\n", capture_output{cls.foo(1)})
421
450
  assert_equal(".\n.\n", capture_output{cls.foo(2)})
422
451
 
423
452
  cls, = compile(
424
- 'def foo(a:int);begin;a -= 1; System.out.println ".";end while a > 0;end')
453
+ 'def foo(a:int);begin;a -= 1; puts ".";end while a > 0;end')
425
454
  assert_equal(".\n", capture_output{cls.foo(0)})
426
455
  assert_equal(".\n", capture_output{cls.foo(1)})
427
456
  assert_equal(".\n.\n", capture_output{cls.foo(2)})
428
457
 
429
458
  cls, = compile(
430
- 'def foo(a:int);until a <= 0; a -= 1; System.out.println ".";end;end')
459
+ 'def foo(a:int);until a <= 0; a -= 1; puts ".";end;end')
431
460
  assert_equal('', capture_output{cls.foo(0)})
432
461
  assert_equal(".\n", capture_output{cls.foo(1)})
433
462
  assert_equal(".\n.\n", capture_output{cls.foo(2)})
434
463
 
435
464
  cls, = compile(
436
- 'def foo(a:int);begin;a -= 1; System.out.println ".";end until a <= 0;end')
465
+ 'def foo(a:int);begin;a -= 1; puts ".";end until a <= 0;end')
437
466
  assert_equal(".\n", capture_output{cls.foo(0)})
438
467
  assert_equal(".\n", capture_output{cls.foo(1)})
439
468
  assert_equal(".\n.\n", capture_output{cls.foo(2)})
@@ -857,7 +886,7 @@ class JVMCompilerTest < Test::Unit::TestCase
857
886
  def test_and
858
887
  cls, = compile(<<-EOF)
859
888
  def bool(n:String, x:boolean)
860
- System.out.println n
889
+ puts n
861
890
  x
862
891
  end
863
892
 
@@ -866,7 +895,7 @@ class JVMCompilerTest < Test::Unit::TestCase
866
895
  end
867
896
 
868
897
  def str(n:String, x:String)
869
- System.out.println n
898
+ puts n
870
899
  x
871
900
  end
872
901
 
@@ -976,7 +1005,7 @@ class JVMCompilerTest < Test::Unit::TestCase
976
1005
  def test_or
977
1006
  cls, = compile(<<-EOF)
978
1007
  def bool(n:String, x:boolean)
979
- System.out.println n
1008
+ puts n
980
1009
  x
981
1010
  end
982
1011
 
@@ -985,7 +1014,7 @@ class JVMCompilerTest < Test::Unit::TestCase
985
1014
  end
986
1015
 
987
1016
  def str(n:String, x:String)
988
- System.out.println n
1017
+ puts n
989
1018
  x
990
1019
  end
991
1020
 
@@ -1097,45 +1126,48 @@ class JVMCompilerTest < Test::Unit::TestCase
1097
1126
  end
1098
1127
 
1099
1128
  def test_op_elem_assign
1100
- foo, = compile(<<-EOF)
1101
- class Foo4
1102
- def initialize
1103
- @i = -1
1104
- end
1129
+ pend_on_jruby("1.7.13") do
1105
1130
 
1106
- def i
1107
- @i += 1
1108
- end
1131
+ foo, = compile(<<-EOF)
1132
+ class Foo4
1133
+ def initialize
1134
+ @i = -1
1135
+ end
1109
1136
 
1110
- def a
1111
- @a
1112
- end
1137
+ def i
1138
+ @i += 1
1139
+ end
1113
1140
 
1114
- def a=(a:String[])
1115
- @a = a
1116
- end
1141
+ def a
1142
+ @a
1143
+ end
1117
1144
 
1118
- def foo(x:String)
1119
- a[i] ||= x
1120
- end
1145
+ def a=(a:String[])
1146
+ @a = a
1147
+ end
1121
1148
 
1122
- def bar(x:String)
1123
- a[i] &&= x
1149
+ def foo(x:String)
1150
+ a[i] ||= x
1151
+ end
1152
+
1153
+ def bar(x:String)
1154
+ a[i] &&= x
1155
+ end
1124
1156
  end
1125
- end
1126
- EOF
1157
+ EOF
1127
1158
 
1128
- f = foo.new
1129
- f.a_set([nil, nil, nil].to_java(:string))
1130
- assert_equal(nil, f.bar("x"))
1131
- assert_equal([nil, nil, nil], f.a.to_a)
1132
- assert_equal("x", f.foo("x"))
1133
- assert_equal([nil, "x", nil], f.a.to_a)
1159
+ f = foo.new
1160
+ f.a_set([nil, nil, nil].to_java(:string))
1161
+ assert_equal(nil, f.bar("x"))
1162
+ assert_equal([nil, nil, nil], f.a.to_a)
1163
+ assert_equal("x", f.foo("x"))
1164
+ assert_equal([nil, "x", nil], f.a.to_a)
1165
+ end
1134
1166
  end
1135
1167
 
1136
1168
  def test_literal_array
1137
1169
  cls, = compile(<<-EOF)
1138
- def foo; System.out.println "hello"; nil; end
1170
+ def foo; puts "hello"; nil; end
1139
1171
  def expr
1140
1172
  [foo]
1141
1173
  end
@@ -1177,7 +1209,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1177
1209
  /foo/.split('barfoobaz')
1178
1210
  end
1179
1211
  def puts
1180
- System.out.println split
1212
+ puts split
1181
1213
  end
1182
1214
  EOF
1183
1215
 
@@ -1202,8 +1234,8 @@ class JVMCompilerTest < Test::Unit::TestCase
1202
1234
  end
1203
1235
  end
1204
1236
 
1205
- System.out.println A1.new.foo("Hi")
1206
- System.out.println B1.new.foo("There")
1237
+ puts A1.new.foo("Hi")
1238
+ puts B1.new.foo("There")
1207
1239
  EOF
1208
1240
 
1209
1241
  assert_output("Hi\nThere\n") do
@@ -1241,7 +1273,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1241
1273
  def test_optional_args
1242
1274
  cls, = compile(<<-EOF)
1243
1275
  def foo(a:int, b:int = 1, c:int = 2)
1244
- System.out.println a; System.out.println b; System.out.println c
1276
+ puts a; puts b; puts c
1245
1277
  end
1246
1278
  foo(0)
1247
1279
  foo(0,0)
@@ -1254,7 +1286,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1254
1286
 
1255
1287
  def test_field_read
1256
1288
  cls, = compile(<<-EOF)
1257
- System.out.println System.out.getClass.getName
1289
+ puts System.out.getClass.getName
1258
1290
  EOF
1259
1291
  assert_output("java.io.PrintStream\n") do
1260
1292
  cls.main([].to_java :String)
@@ -1457,10 +1489,10 @@ class JVMCompilerTest < Test::Unit::TestCase
1457
1489
  abstract_class, concrete_class = compile(<<-EOF)
1458
1490
  abstract class Abstract
1459
1491
  abstract def foo:void; end
1460
- def bar; System.out.println "bar"; end
1492
+ def bar; puts "bar"; end
1461
1493
  end
1462
1494
  class Concrete < Abstract
1463
- def foo; System.out.println :foo; end
1495
+ def foo; puts :foo; end
1464
1496
  end
1465
1497
  EOF
1466
1498
 
@@ -1477,7 +1509,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1477
1509
  def test_return_void
1478
1510
  script, = compile(<<-EOF)
1479
1511
  def foo:void
1480
- System.out.println :hi
1512
+ puts :hi
1481
1513
  return
1482
1514
  end
1483
1515
  EOF
@@ -1533,10 +1565,10 @@ class JVMCompilerTest < Test::Unit::TestCase
1533
1565
  begin
1534
1566
  raise "Foo"
1535
1567
  rescue => b
1536
- System.out.println a
1537
- System.out.println b.getMessage
1568
+ puts a
1569
+ puts b.getMessage
1538
1570
  end
1539
- System.out.println b
1571
+ puts b
1540
1572
  end
1541
1573
  EOF
1542
1574
 
@@ -1594,7 +1626,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1594
1626
 
1595
1627
  def test_covariant_arrays
1596
1628
  cls, = compile(<<-EOF)
1597
- System.out.println java::util::Arrays.toString(String[5])
1629
+ puts java::util::Arrays.toString(String[5])
1598
1630
  EOF
1599
1631
 
1600
1632
  assert_output("[null, null, null, null, null]\n") do
@@ -1604,7 +1636,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1604
1636
 
1605
1637
  def test_getClass_on_object_array
1606
1638
  cls, = compile(<<-EOF)
1607
- System.out.println Object[0].getClass.getName
1639
+ puts Object[0].getClass.getName
1608
1640
  EOF
1609
1641
 
1610
1642
  assert_output("[Ljava.lang.Object;\n") do
@@ -1625,7 +1657,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1625
1657
 
1626
1658
  cls, = compile(<<-EOF)
1627
1659
  a = nil
1628
- System.out.println Object(a)
1660
+ puts Object(a)
1629
1661
  EOF
1630
1662
 
1631
1663
  assert_output("null\n") do
@@ -1636,7 +1668,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1636
1668
  def test_long_generation
1637
1669
  cls, = compile(<<-EOF)
1638
1670
  c = 2_000_000_000_000
1639
- System.out.println c
1671
+ puts c
1640
1672
  EOF
1641
1673
  end
1642
1674
 
@@ -1649,14 +1681,14 @@ class JVMCompilerTest < Test::Unit::TestCase
1649
1681
  end
1650
1682
 
1651
1683
  def test_bool_equality
1652
- cls, = compile("System.out.println true == false")
1684
+ cls, = compile("puts true == false")
1653
1685
  assert_output("false\n") do
1654
1686
  cls.main(nil)
1655
1687
  end
1656
1688
  end
1657
1689
 
1658
1690
  def test_bool_inequality
1659
- cls, = compile("System.out.println true != false")
1691
+ cls, = compile("puts true != false")
1660
1692
  assert_output("true\n") do
1661
1693
  cls.main(nil)
1662
1694
  end
@@ -1664,9 +1696,11 @@ class JVMCompilerTest < Test::Unit::TestCase
1664
1696
 
1665
1697
  def test_field_setter_with_nil
1666
1698
  cls, = compile(<<-EOF)
1667
- import mirah.lang.ast.*
1668
- a = Arguments.new
1669
- a.block = nil
1699
+ class FieldSetter
1700
+ attr_accessor field: String
1701
+ end
1702
+ a = FieldSetter.new
1703
+ a.field = nil
1670
1704
  print "OK"
1671
1705
  EOF
1672
1706
 
@@ -1763,28 +1797,39 @@ class JVMCompilerTest < Test::Unit::TestCase
1763
1797
  end
1764
1798
  end
1765
1799
 
1766
- def test_static_field_inheritance_lookup_with_dot
1800
+ def test_incompatible_meta_change
1767
1801
  cls, = compile(<<-EOF)
1768
- import java.util.GregorianCalendar
1769
- puts GregorianCalendar.AM
1770
- EOF
1802
+ class A < B
1803
+ def foo(a:Object)
1804
+ a.kind_of?(A)
1805
+ end
1806
+ end
1771
1807
 
1772
- assert_output "0\n" do
1773
- cls.main(nil)
1774
- end
1808
+ class B
1809
+ end
1810
+ EOF
1811
+
1812
+ a = cls.new
1813
+ assert(a.foo(a))
1775
1814
  end
1776
1815
 
1777
- def test_static_field_inheritance_lookup_with_double_colon
1778
- pend("double colon is treated special for lookup") {
1779
- cls, = compile(<<-EOF)
1780
- import java.util.GregorianCalendar
1781
- puts GregorianCalendar::AM
1816
+ def test_local_method_conflict
1817
+ cls, arg = compile(<<-EOF)
1818
+ def a; ArgType.new; end
1819
+ def foo(a:ArgType):void
1820
+ x = Object[ a ? a.bar : 0]
1821
+ puts x.length
1822
+ end
1823
+
1824
+ class ArgType
1825
+ def bar
1826
+ 2
1827
+ end
1828
+ end
1782
1829
  EOF
1783
1830
 
1784
- assert_output "0\n" do
1785
- cls.main(nil)
1786
- end
1787
- }
1831
+ assert_output("0\n") { cls.foo(nil)}
1832
+ assert_output("2\n") { cls.foo(arg.new)}
1788
1833
  end
1789
1834
 
1790
1835
  end