@@ -691,15 +691,15 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
691
691
val nativeKind = tpeTK(expr)
692
692
genLoad(expr, nativeKind)
693
693
val MethodNameAndType (mname, methodType) = asmBoxTo(nativeKind)
694
- bc.invokestatic(BoxesRunTime .internalName, mname, methodType.descriptor)
694
+ bc.invokestatic(BoxesRunTime .internalName, mname, methodType.descriptor, itf = false )
695
695
generatedType = boxResultType(fun.symbol) // was toTypeKind(fun.symbol.tpe.resultType)
696
696
697
697
case Apply (fun, List (expr)) if isUnbox(fun.symbol) =>
698
698
genLoad(expr)
699
699
val boxType = unboxResultType(fun.symbol) // was toTypeKind(fun.symbol.owner.linkedClassOfClass.tpe)
700
700
generatedType = boxType
701
701
val MethodNameAndType (mname, methodType) = asmUnboxTo(boxType)
702
- bc.invokestatic(BoxesRunTime .internalName, mname, methodType.descriptor)
702
+ bc.invokestatic(BoxesRunTime .internalName, mname, methodType.descriptor, itf = false )
703
703
704
704
case app @ Apply (fun, args) =>
705
705
val sym = fun.symbol
@@ -1150,15 +1150,16 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
1150
1150
}
1151
1151
}
1152
1152
1153
- if (style.isStatic) { bc.invokestatic (jowner, jname, mdescr) }
1154
- else if (style.isSpecial) { bc.invokespecial (jowner, jname, mdescr) }
1153
+ val isInterface = receiver.isEmittedInterface
1154
+ if (style.isStatic) { bc.invokestatic (jowner, jname, mdescr, itf = isInterface) }
1155
+ else if (style.isSpecial) { bc.invokespecial (jowner, jname, mdescr, itf = isInterface) }
1155
1156
else if (style.isVirtual) {
1156
1157
if (needsInterfaceCall(receiver)) { bc.invokeinterface(jowner, jname, mdescr) }
1157
1158
else { bc.invokevirtual (jowner, jname, mdescr) }
1158
1159
}
1159
1160
else {
1160
1161
assert(style.isSuper, s " An unknown InvokeStyle: $style" )
1161
- bc.invokespecial(jowner, jname, mdescr)
1162
+ bc.invokespecial(jowner, jname, mdescr, itf = isInterface )
1162
1163
initModule()
1163
1164
}
1164
1165
@@ -1405,7 +1406,7 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
1405
1406
def genInvokeDynamicLambda (ctor : Symbol , lambdaTarget : Symbol , environmentSize : Int , functionalInterface : Symbol ): BType = {
1406
1407
debuglog(s " Using invokedynamic rather than `new ${ctor.owner}` " )
1407
1408
val generatedType = classBTypeFromSymbol(functionalInterface)
1408
- val isInterface = lambdaTarget.owner.isInterface
1409
+ val isInterface = lambdaTarget.owner.isEmittedInterface
1409
1410
val invokeStyle =
1410
1411
if (lambdaTarget.isStaticMember) asm.Opcodes .H_INVOKESTATIC
1411
1412
else if (lambdaTarget.isPrivate || lambdaTarget.isClassConstructor) asm.Opcodes .H_INVOKESPECIAL
@@ -1417,7 +1418,7 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
1417
1418
classBTypeFromSymbol(lambdaTarget.owner).internalName,
1418
1419
lambdaTarget.name.mangledString,
1419
1420
asmMethodType(lambdaTarget).descriptor,
1420
- isInterface)
1421
+ /* itf = */ isInterface)
1421
1422
1422
1423
val (a,b) = lambdaTarget.info.paramTypes.splitAt(environmentSize)
1423
1424
var (capturedParamsTypes, lambdaParamTypes) = if (int.doLabmdasFollowJVMMetafactoryOrder) (a,b) else (b,a)
@@ -1448,6 +1449,6 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
1448
1449
new asm.Handle (asm.Opcodes .H_INVOKESTATIC ,
1449
1450
int.LambdaMetaFactory .javaBinaryName, int.MetafactoryName ,
1450
1451
" (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;" ,
1451
- int.LambdaMetaFactory .isInterface )
1452
+ /* itf = */ int.LambdaMetaFactory .isEmittedInterface )
1452
1453
1453
1454
}
0 commit comments