@@ -8,9 +8,7 @@ import scala.tools.asm.Opcodes._
88class ArrayApplyOptTest extends DottyBytecodeTest {
99 import ASMConverters ._
1010
11- // FIXME: Re-enable IArray bytecode tests (requires updated reference compiler)
12- // Also change: library/src/scala/IArray.scala
13- @ Test def testArrayEmptyGenericApply = {
11+ @ Test def testArrayEmptyGenericApply = {
1412 test(" Array[String]()" , List (Op (ICONST_0 ), TypeOp (ANEWARRAY , " java/lang/String" ), Op (POP ), Op (RETURN )))
1513 test(" Array[Unit]()" , List (Op (ICONST_0 ), TypeOp (ANEWARRAY , " scala/runtime/BoxedUnit" ), Op (POP ), Op (RETURN )))
1614 test(" Array[Object]()" , List (Op (ICONST_0 ), TypeOp (ANEWARRAY , " java/lang/Object" ), Op (POP ), Op (RETURN )))
@@ -24,91 +22,91 @@ class ArrayApplyOptTest extends DottyBytecodeTest {
2422 test(" Array[Char]()" , newArray0Opcodes(T_CHAR ))
2523 test(" Array[T]()" , newArray0Opcodes(T_INT ))
2624
27- // test("IArray[String]()", List(Op(ICONST_0), TypeOp(ANEWARRAY, "java/lang/String"), TypeOp(CHECKCAST, "[Ljava/lang/String;"), Op(POP), Op(RETURN)))
28- // test("IArray[Unit]()", List(Op(ICONST_0), TypeOp(ANEWARRAY, "scala/runtime/BoxedUnit"), TypeOp(CHECKCAST, "[Lscala/runtime/BoxedUnit;"), Op(POP), Op(RETURN)))
29- // test("IArray[Object]()", List(Op(ICONST_0), TypeOp(ANEWARRAY, "java/lang/Object"), TypeOp(CHECKCAST, "[Ljava/lang/Object;"), Op(POP), Op(RETURN)))
30- // test("IArray[Boolean]()", newArray0Opcodes(T_BOOLEAN, TypeOp(CHECKCAST, "[Z") :: Nil))
31- // test("IArray[Byte]()", newArray0Opcodes(T_BYTE, TypeOp(CHECKCAST, "[B") :: Nil))
32- // test("IArray[Short]()", newArray0Opcodes(T_SHORT, TypeOp(CHECKCAST, "[S") :: Nil))
33- // test("IArray[Int]()", newArray0Opcodes(T_INT, TypeOp(CHECKCAST, "[I") :: Nil))
34- // test("IArray[Long]()", newArray0Opcodes(T_LONG, TypeOp(CHECKCAST, "[J") :: Nil))
35- // test("IArray[Float]()", newArray0Opcodes(T_FLOAT, TypeOp(CHECKCAST, "[F") :: Nil))
36- // test("IArray[Double]()", newArray0Opcodes(T_DOUBLE, TypeOp(CHECKCAST, "[D") :: Nil))
37- // test("IArray[Char]()", newArray0Opcodes(T_CHAR, TypeOp(CHECKCAST, "[C") :: Nil))
38- // test("IArray[T]()", newArray0Opcodes(T_INT, TypeOp(CHECKCAST, "[I") :: Nil))
25+ test(" IArray[String]()" , List (Op (ICONST_0 ), TypeOp (ANEWARRAY , " java/lang/String" ), TypeOp (CHECKCAST , " [Ljava/lang/String;" ), Op (POP ), Op (RETURN )))
26+ test(" IArray[Unit]()" , List (Op (ICONST_0 ), TypeOp (ANEWARRAY , " scala/runtime/BoxedUnit" ), TypeOp (CHECKCAST , " [Lscala/runtime/BoxedUnit;" ), Op (POP ), Op (RETURN )))
27+ test(" IArray[Object]()" , List (Op (ICONST_0 ), TypeOp (ANEWARRAY , " java/lang/Object" ), TypeOp (CHECKCAST , " [Ljava/lang/Object;" ), Op (POP ), Op (RETURN )))
28+ test(" IArray[Boolean]()" , newArray0Opcodes(T_BOOLEAN , TypeOp (CHECKCAST , " [Z" ) :: Nil ))
29+ test(" IArray[Byte]()" , newArray0Opcodes(T_BYTE , TypeOp (CHECKCAST , " [B" ) :: Nil ))
30+ test(" IArray[Short]()" , newArray0Opcodes(T_SHORT , TypeOp (CHECKCAST , " [S" ) :: Nil ))
31+ test(" IArray[Int]()" , newArray0Opcodes(T_INT , TypeOp (CHECKCAST , " [I" ) :: Nil ))
32+ test(" IArray[Long]()" , newArray0Opcodes(T_LONG , TypeOp (CHECKCAST , " [J" ) :: Nil ))
33+ test(" IArray[Float]()" , newArray0Opcodes(T_FLOAT , TypeOp (CHECKCAST , " [F" ) :: Nil ))
34+ test(" IArray[Double]()" , newArray0Opcodes(T_DOUBLE , TypeOp (CHECKCAST , " [D" ) :: Nil ))
35+ test(" IArray[Char]()" , newArray0Opcodes(T_CHAR , TypeOp (CHECKCAST , " [C" ) :: Nil ))
36+ test(" IArray[T]()" , newArray0Opcodes(T_INT , TypeOp (CHECKCAST , " [I" ) :: Nil ))
3937 }
4038
41- @ Test def testArrayGenericApply = {
39+ @ Test def testArrayGenericApply = {
4240 def opCodes (tpe : String ) =
4341 List (Op (ICONST_2 ), TypeOp (ANEWARRAY , tpe), Op (DUP ), Op (ICONST_0 ), Ldc (LDC , " a" ), Op (AASTORE ), Op (DUP ), Op (ICONST_1 ), Ldc (LDC , " b" ), Op (AASTORE ), Op (POP ), Op (RETURN ))
4442 test(""" Array("a", "b")""" , opCodes(" java/lang/String" ))
4543 test(""" Array[Object]("a", "b")""" , opCodes(" java/lang/Object" ))
4644
4745 def opCodes2 (tpe : String ) =
4846 List (Op (ICONST_2 ), TypeOp (ANEWARRAY , tpe), Op (DUP ), Op (ICONST_0 ), Ldc (LDC , " a" ), Op (AASTORE ), Op (DUP ), Op (ICONST_1 ), Ldc (LDC , " b" ), Op (AASTORE ), TypeOp (CHECKCAST , s " [L $tpe; " ), Op (POP ), Op (RETURN ))
49- // test("""IArray("a", "b")""", opCodes2("java/lang/String"))
50- // test("""IArray[Object]("a", "b")""", opCodes2("java/lang/Object"))
47+ test(""" IArray("a", "b")""" , opCodes2(" java/lang/String" ))
48+ test(""" IArray[Object]("a", "b")""" , opCodes2(" java/lang/Object" ))
5149 }
5250
5351 @ Test def testArrayApplyBoolean = {
5452 val init = List (Op (DUP ), Op (ICONST_0 ), Op (ICONST_1 ), Op (BASTORE ), Op (DUP ), Op (ICONST_1 ), Op (ICONST_0 ), Op (BASTORE ))
5553 test(" Array(true, false)" , newArray2Opcodes(T_BOOLEAN , init))
56- // test("IArray(true, false)", newArray2Opcodes(T_BOOLEAN, init :+ TypeOp(CHECKCAST, "[Z")))
54+ test(" IArray(true, false)" , newArray2Opcodes(T_BOOLEAN , init :+ TypeOp (CHECKCAST , " [Z" )))
5755 }
5856
5957 @ Test def testArrayApplyByte = {
6058 val init = List (Op (DUP ), Op (ICONST_0 ), Op (ICONST_1 ), Op (BASTORE ), Op (DUP ), Op (ICONST_1 ), Op (ICONST_2 ), Op (BASTORE ))
6159 test(" Array[Byte](1, 2)" , newArray2Opcodes(T_BYTE , init))
62- // test("IArray[Byte](1, 2)", newArray2Opcodes(T_BYTE, init :+ TypeOp(CHECKCAST, "[B")))
60+ test(" IArray[Byte](1, 2)" , newArray2Opcodes(T_BYTE , init :+ TypeOp (CHECKCAST , " [B" )))
6361 }
6462
6563 @ Test def testArrayApplyShort = {
6664 val init = List (Op (DUP ), Op (ICONST_0 ), Op (ICONST_1 ), Op (SASTORE ), Op (DUP ), Op (ICONST_1 ), Op (ICONST_2 ), Op (SASTORE ))
6765 test(" Array[Short](1, 2)" , newArray2Opcodes(T_SHORT , init))
68- // test("IArray[Short](1, 2)", newArray2Opcodes(T_SHORT, init :+ TypeOp(CHECKCAST, "[S")))
66+ test(" IArray[Short](1, 2)" , newArray2Opcodes(T_SHORT , init :+ TypeOp (CHECKCAST , " [S" )))
6967 }
7068
7169 @ Test def testArrayApplyInt = {
7270 val init = List (Op (DUP ), Op (ICONST_0 ), Op (ICONST_1 ), Op (IASTORE ), Op (DUP ), Op (ICONST_1 ), Op (ICONST_2 ), Op (IASTORE ))
7371 test(" Array(1, 2)" , newArray2Opcodes(T_INT , init))
74- // test("IArray(1, 2)", newArray2Opcodes(T_INT, init :+ TypeOp(CHECKCAST, "[I")))
72+ test(" IArray(1, 2)" , newArray2Opcodes(T_INT , init :+ TypeOp (CHECKCAST , " [I" )))
7573
7674 val init2 = List (Op (DUP ), Op (ICONST_0 ), Field (GETSTATIC , " Foo$" , " MODULE$" , " LFoo$;" ), Invoke (INVOKEVIRTUAL , " Foo$" , " t" , " ()I" , false ), Op (IASTORE ), Op (DUP ), Op (ICONST_1 ), Field (GETSTATIC , " Foo$" , " MODULE$" , " LFoo$;" ), Invoke (INVOKEVIRTUAL , " Foo$" , " t" , " ()I" , false ), Op (IASTORE ))
7775 test(""" Array[T](t, t)""" , newArray2Opcodes(T_INT , init2))
78- // test("""IArray[T](t, t)""", newArray2Opcodes(T_INT, init2 :+ TypeOp(CHECKCAST, "[I")))
76+ test(""" IArray[T](t, t)""" , newArray2Opcodes(T_INT , init2 :+ TypeOp (CHECKCAST , " [I" )))
7977 }
8078
8179 @ Test def testArrayApplyLong = {
8280 val init = List (Op (DUP ), Op (ICONST_0 ), Ldc (LDC , 2 ), Op (LASTORE ), Op (DUP ), Op (ICONST_1 ), Ldc (LDC , 3 ), Op (LASTORE ))
8381 test(" Array(2L, 3L)" , newArray2Opcodes(T_LONG , init))
84- // test("IArray(2L, 3L)", newArray2Opcodes(T_LONG, init :+ TypeOp(CHECKCAST, "[J")))
82+ test(" IArray(2L, 3L)" , newArray2Opcodes(T_LONG , init :+ TypeOp (CHECKCAST , " [J" )))
8583 }
8684
8785 @ Test def testArrayApplyFloat = {
8886 val init = List (Op (DUP ), Op (ICONST_0 ), Ldc (LDC , 2.1f ), Op (FASTORE ), Op (DUP ), Op (ICONST_1 ), Ldc (LDC , 3.1f ), Op (FASTORE ))
8987 test(" Array(2.1f, 3.1f)" , newArray2Opcodes(T_FLOAT , init))
90- // test("IArray(2.1f, 3.1f)", newArray2Opcodes(T_FLOAT, init :+ TypeOp(CHECKCAST, "[F")))
88+ test(" IArray(2.1f, 3.1f)" , newArray2Opcodes(T_FLOAT , init :+ TypeOp (CHECKCAST , " [F" )))
9189 }
9290
9391 @ Test def testArrayApplyDouble = {
9492 val init = List (Op (DUP ), Op (ICONST_0 ), Ldc (LDC , 2.2d ), Op (DASTORE ), Op (DUP ), Op (ICONST_1 ), Ldc (LDC , 3.2d ), Op (DASTORE ))
9593 test(" Array(2.2d, 3.2d)" , newArray2Opcodes(T_DOUBLE , init))
96- // test("IArray(2.2d, 3.2d)", newArray2Opcodes(T_DOUBLE, init :+ TypeOp(CHECKCAST, "[D")))
94+ test(" IArray(2.2d, 3.2d)" , newArray2Opcodes(T_DOUBLE , init :+ TypeOp (CHECKCAST , " [D" )))
9795 }
9896
9997 @ Test def testArrayApplyChar = {
10098 val init = List (Op (DUP ), Op (ICONST_0 ), IntOp (BIPUSH , 120 ), Op (CASTORE ), Op (DUP ), Op (ICONST_1 ), IntOp (BIPUSH , 121 ), Op (CASTORE ))
10199 test(" Array('x', 'y')" , newArray2Opcodes(T_CHAR , init))
102- // test("IArray('x', 'y')", newArray2Opcodes(T_CHAR, init :+ TypeOp(CHECKCAST, "[C")))
100+ test(" IArray('x', 'y')" , newArray2Opcodes(T_CHAR , init :+ TypeOp (CHECKCAST , " [C" )))
103101 }
104102
105103 @ Test def testArrayApplyUnit = {
106104 test(" Array[Unit]((), ())" , List (Op (ICONST_2 ), TypeOp (ANEWARRAY , " scala/runtime/BoxedUnit" ), Op (DUP ),
107105 Op (ICONST_0 ), Field (GETSTATIC , " scala/runtime/BoxedUnit" , " UNIT" , " Lscala/runtime/BoxedUnit;" ), Op (AASTORE ), Op (DUP ),
108106 Op (ICONST_1 ), Field (GETSTATIC , " scala/runtime/BoxedUnit" , " UNIT" , " Lscala/runtime/BoxedUnit;" ), Op (AASTORE ), Op (POP ), Op (RETURN )))
109- // test("IArray[Unit]((), ())", List(Op(ICONST_2), TypeOp(ANEWARRAY, "scala/runtime/BoxedUnit"), Op(DUP),
110- // Op(ICONST_0), Field(GETSTATIC, "scala/runtime/BoxedUnit", "UNIT", "Lscala/runtime/BoxedUnit;"), Op(AASTORE), Op(DUP),
111- // Op(ICONST_1), Field(GETSTATIC, "scala/runtime/BoxedUnit", "UNIT", "Lscala/runtime/BoxedUnit;"), Op(AASTORE), TypeOp(CHECKCAST, "[Lscala/runtime/BoxedUnit;"), Op(POP), Op(RETURN)))
107+ test(" IArray[Unit]((), ())" , List (Op (ICONST_2 ), TypeOp (ANEWARRAY , " scala/runtime/BoxedUnit" ), Op (DUP ),
108+ Op (ICONST_0 ), Field (GETSTATIC , " scala/runtime/BoxedUnit" , " UNIT" , " Lscala/runtime/BoxedUnit;" ), Op (AASTORE ), Op (DUP ),
109+ Op (ICONST_1 ), Field (GETSTATIC , " scala/runtime/BoxedUnit" , " UNIT" , " Lscala/runtime/BoxedUnit;" ), Op (AASTORE ), TypeOp (CHECKCAST , " [Lscala/runtime/BoxedUnit;" ), Op (POP ), Op (RETURN )))
112110 }
113111
114112 @ Test def testArrayInlined = test(
0 commit comments