@@ -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
@@ -1142,15 +1142,16 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
1142
1142
}
1143
1143
}
1144
1144
1145
- if (style.isStatic) { bc.invokestatic (jowner, jname, mdescr) }
1146
- else if (style.isSpecial) { bc.invokespecial (jowner, jname, mdescr) }
1145
+ val isInterface = receiver.isEmittedInterface
1146
+ if (style.isStatic) { bc.invokestatic (jowner, jname, mdescr, itf = isInterface) }
1147
+ else if (style.isSpecial) { bc.invokespecial (jowner, jname, mdescr, itf = isInterface) }
1147
1148
else if (style.isVirtual) {
1148
1149
if (needsInterfaceCall(receiver)) { bc.invokeinterface(jowner, jname, mdescr) }
1149
1150
else { bc.invokevirtual (jowner, jname, mdescr) }
1150
1151
}
1151
1152
else {
1152
1153
assert(style.isSuper, s " An unknown InvokeStyle: $style" )
1153
- bc.invokespecial(jowner, jname, mdescr)
1154
+ bc.invokespecial(jowner, jname, mdescr, itf = isInterface )
1154
1155
initModule()
1155
1156
}
1156
1157
@@ -1397,17 +1398,19 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
1397
1398
def genInvokeDynamicLambda (ctor : Symbol , lambdaTarget : Symbol , environmentSize : Int , functionalInterface : Symbol ): BType = {
1398
1399
debuglog(s " Using invokedynamic rather than `new ${ctor.owner}` " )
1399
1400
val generatedType = classBTypeFromSymbol(functionalInterface)
1401
+ val isInterface = lambdaTarget.owner.isEmittedInterface
1400
1402
val invokeStyle =
1401
1403
if (lambdaTarget.isStaticMember) asm.Opcodes .H_INVOKESTATIC
1402
1404
else if (lambdaTarget.isPrivate || lambdaTarget.isClassConstructor) asm.Opcodes .H_INVOKESPECIAL
1403
- else if (lambdaTarget.owner. isInterface) asm.Opcodes .H_INVOKEINTERFACE
1405
+ else if (isInterface) asm.Opcodes .H_INVOKEINTERFACE
1404
1406
else asm.Opcodes .H_INVOKEVIRTUAL
1405
1407
1406
1408
val targetHandle =
1407
1409
new asm.Handle (invokeStyle,
1408
1410
classBTypeFromSymbol(lambdaTarget.owner).internalName,
1409
1411
lambdaTarget.name.mangledString,
1410
- asmMethodType(lambdaTarget).descriptor)
1412
+ asmMethodType(lambdaTarget).descriptor,
1413
+ /* itf = */ isInterface)
1411
1414
1412
1415
val (a,b) = lambdaTarget.info.paramTypes.splitAt(environmentSize)
1413
1416
var (capturedParamsTypes, lambdaParamTypes) = if (int.doLabmdasFollowJVMMetafactoryOrder) (a,b) else (b,a)
@@ -1437,6 +1440,7 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
1437
1440
val lambdaMetaFactoryBootstrapHandle =
1438
1441
new asm.Handle (asm.Opcodes .H_INVOKESTATIC ,
1439
1442
int.LambdaMetaFactory .javaBinaryName, int.MetafactoryName ,
1440
- " (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;" )
1443
+ " (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;" ,
1444
+ /* itf = */ int.LambdaMetaFactory .isEmittedInterface)
1441
1445
1442
1446
}
0 commit comments