Skip to content

Commit

Permalink
Fix bytecode test
Browse files Browse the repository at this point in the history
  • Loading branch information
dwijnand committed Feb 5, 2024
1 parent c14daff commit 7c2f0a5
Showing 1 changed file with 22 additions and 5 deletions.
27 changes: 22 additions & 5 deletions compiler/test/dotty/tools/backend/jvm/ArrayApplyOptTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class ArrayApplyOptTest extends DottyBytecodeTest {
test("Array[Float]()", newArray0Opcodes(T_FLOAT))
test("Array[Double]()", newArray0Opcodes(T_DOUBLE))
test("Array[Char]()", newArray0Opcodes(T_CHAR))
test("Array[T]()", newArray0Opcodes(T_INT))
test("Array[T]()", mkInstr0("scala/Array$"))

test("IArray[String]()", List(Op(ICONST_0), TypeOp(ANEWARRAY, "java/lang/String"), Op(POP), Op(RETURN)))
test("IArray[Unit]()", List(Op(ICONST_0), TypeOp(ANEWARRAY, "scala/runtime/BoxedUnit"), Op(POP), Op(RETURN)))
Expand All @@ -34,7 +34,7 @@ class ArrayApplyOptTest extends DottyBytecodeTest {
test("IArray[Float]()", newArray0Opcodes(T_FLOAT))
test("IArray[Double]()", newArray0Opcodes(T_DOUBLE))
test("IArray[Char]()", newArray0Opcodes(T_CHAR))
test("IArray[T]()", newArray0Opcodes(T_INT))
test("IArray[T]()", mkInstr0("scala/IArray$package$IArray$"))
}

@Test def testArrayGenericApply = {
Expand Down Expand Up @@ -70,9 +70,8 @@ class ArrayApplyOptTest extends DottyBytecodeTest {
test("Array(1, 2)", newArray2Opcodes(T_INT, init))
test("IArray(1, 2)", newArray2Opcodes(T_INT, init))

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), TypeOp(CHECKCAST, "[I"))
test("""Array[T](t, t): Array[T]""", newArray2Opcodes(T_INT, init2))
test("""IArray[T](t, t): IArray[T]""", newArray2Opcodes(T_INT, init2))
test("""Array[T](t, t): Array[T]""", mkInstr2("scala/Array$"))
test("""IArray[T](t, t): IArray[T]""", mkInstr2("scala/IArray$package$IArray$"))
}

@Test def testArrayApplyLong = {
Expand Down Expand Up @@ -310,4 +309,22 @@ class ArrayApplyOptTest extends DottyBytecodeTest {
}
}

def pre(owner: String) = List(
Field(GETSTATIC, owner, "MODULE$", s"L$owner;"),
Field(GETSTATIC, "scala/runtime/ScalaRunTime$", "MODULE$", "Lscala/runtime/ScalaRunTime$;"),
)

def mkInstr0(owner: String) = pre(owner) ::: newArray0Opcodes(T_INT, mkApply(owner, Nil))
def mkInstr2(owner: String) = pre(owner) ::: newArray2Opcodes(T_INT, mkApply(owner, List(ICONST_0, ICONST_1)) ::: TypeOp(CHECKCAST, "[I") :: Nil)

def mkApply(owner: String, iconsts: List[Int]) =
iconsts.flatMap { iconst =>
List(Op(DUP), Op(iconst), Field(GETSTATIC, "Foo$", "MODULE$", "LFoo$;"), Invoke(INVOKEVIRTUAL, "Foo$", "t", "()I", false), Op(IASTORE))
} ::: List(
Invoke(INVOKEVIRTUAL, "scala/runtime/ScalaRunTime$", "genericWrapArray", "(Ljava/lang/Object;)Lscala/collection/immutable/ArraySeq;", false),
Field(GETSTATIC, "scala/reflect/ClassTag$", "MODULE$", "Lscala/reflect/ClassTag$;"),
Field(GETSTATIC, "java/lang/Integer", "TYPE", "Ljava/lang/Class;"),
Invoke(INVOKEVIRTUAL, "scala/reflect/ClassTag$", "apply", "(Ljava/lang/Class;)Lscala/reflect/ClassTag;", false),
Invoke(INVOKEVIRTUAL, owner, "apply", "(Lscala/collection/immutable/Seq;Lscala/reflect/ClassTag;)Ljava/lang/Object;", false),
)
}

0 comments on commit 7c2f0a5

Please sign in to comment.