Skip to content

Commit 4bf9759

Browse files
committed
Support multidim arrays in dotty.
1 parent dcdcbe6 commit 4bf9759

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,6 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
612612

613613

614614
private def mkArrayConstructorCall(arr: ArrayBType, app: Apply, args: List[Tree]) = {
615-
genLoadArguments(args, paramTKs(app))
616615
val dims = arr.dimension
617616
var elemKind = arr.elementType
618617
val argsSize = args.length
@@ -626,10 +625,11 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
626625
*/
627626
for (i <- args.length until dims) elemKind = ArrayBType(elemKind)
628627
}
628+
genLoadArguments(args, List.fill(args.size)(INT))
629629
(argsSize : @switch) match {
630630
case 1 => bc newarray elemKind
631631
case _ =>
632-
val descr = ('[' * argsSize) + elemKind.descriptor // denotes the same as: arrayN(elemKind, argsSize).descriptor
632+
val descr = ("[" * argsSize) + elemKind.descriptor // denotes the same as: arrayN(elemKind, argsSize).descriptor
633633
mnode.visitMultiANewArrayInsn(descr, argsSize)
634634
}
635635
}
@@ -640,8 +640,10 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
640640
lineNumber(app)
641641
app match {
642642
case Apply(_, args) if isSyntheticArrayConstructor(app.symbol) =>
643-
generatedType = toTypeKind(app.tpe)
644-
mkArrayConstructorCall(generatedType.asArrayBType, app, args)
643+
val List(elemClaz, Literal(c: Constant), ArrayValue(_, dims)) = args
644+
645+
generatedType = toTypeKind(c.typeValue)
646+
mkArrayConstructorCall(generatedType.asArrayBType, app, dims)
645647
case Apply(t :TypeApply, _) =>
646648

647649
generatedType = genTypeApply(t)

0 commit comments

Comments
 (0)