4242import static com .oracle .svm .espresso .classfile .Constants .ACC_SUPER ;
4343import static com .oracle .svm .espresso .classfile .Constants .JVM_ACC_WRITTEN_FLAGS ;
4444import static com .oracle .svm .espresso .shared .meta .SignaturePolymorphicIntrinsic .InvokeGeneric ;
45+ import static com .oracle .svm .interpreter .Interpreter .unbasic ;
4546import static com .oracle .svm .interpreter .InterpreterStubSection .getCremaStubForVTableIndex ;
4647
4748import java .lang .invoke .MethodType ;
122123import com .oracle .svm .interpreter .metadata .InterpreterResolvedJavaMethod ;
123124import com .oracle .svm .interpreter .metadata .InterpreterResolvedJavaType ;
124125import com .oracle .svm .interpreter .metadata .InterpreterResolvedObjectType ;
126+ import com .oracle .svm .interpreter .metadata .InterpreterUnresolvedSignature ;
125127
126128import jdk .graal .compiler .word .Word ;
127129import jdk .vm .ci .meta .ResolvedJavaField ;
@@ -1312,12 +1314,15 @@ public Object invokeBasic(Target_java_lang_invoke_MemberName memberName, Object
13121314 @ Override
13131315 public Object linkToVirtual (Object [] args ) {
13141316 // This is AOT-compiled code calling MethodHandle.linkToVirtual
1317+ // See also PolymorphicSignatureWrapperMethod.buildGraph
13151318 Target_java_lang_invoke_MemberName mnTarget = (Target_java_lang_invoke_MemberName ) args [args .length - 1 ];
13161319 InterpreterResolvedJavaMethod target = InterpreterResolvedJavaMethod .fromMemberName (mnTarget );
1317- Object [] basicArgs = Arrays .copyOf (args , args .length - 1 );
1320+ InterpreterUnresolvedSignature signature = target .getSignature ();
1321+ Object [] basicArgs = unbasic (args , signature , true );
13181322 logIntrinsic ("[from compiled] linkToVirtual " , target , basicArgs );
13191323 try {
1320- return InterpreterToVM .dispatchInvocation (target , basicArgs , true , false , false , false , true );
1324+ Object result = InterpreterToVM .dispatchInvocation (target , basicArgs , true , false , false , false , true );
1325+ return Interpreter .rebasic (result , signature .getReturnKind ());
13211326 } catch (SemanticJavaException e ) {
13221327 throw uncheckedThrow (e .getCause ());
13231328 }
@@ -1326,12 +1331,15 @@ public Object linkToVirtual(Object[] args) {
13261331 @ Override
13271332 public Object linkToStatic (Object [] args ) {
13281333 // This is AOT-compiled code calling MethodHandle.linkToStatic
1334+ // See also PolymorphicSignatureWrapperMethod.buildGraph
13291335 Target_java_lang_invoke_MemberName mnTarget = (Target_java_lang_invoke_MemberName ) args [args .length - 1 ];
13301336 InterpreterResolvedJavaMethod target = InterpreterResolvedJavaMethod .fromMemberName (mnTarget );
1331- Object [] basicArgs = Arrays .copyOf (args , args .length - 1 );
1337+ InterpreterUnresolvedSignature signature = target .getSignature ();
1338+ Object [] basicArgs = unbasic (args , signature , false );
13321339 logIntrinsic ("[from compiled] linkToStatic " , target , basicArgs );
13331340 try {
1334- return InterpreterToVM .dispatchInvocation (target , basicArgs , false , false , false , false , true );
1341+ Object result = InterpreterToVM .dispatchInvocation (target , basicArgs , false , false , false , false , true );
1342+ return Interpreter .rebasic (result , signature .getReturnKind ());
13351343 } catch (SemanticJavaException e ) {
13361344 throw uncheckedThrow (e .getCause ());
13371345 }
@@ -1340,12 +1348,15 @@ public Object linkToStatic(Object[] args) {
13401348 @ Override
13411349 public Object linkToSpecial (Object [] args ) {
13421350 // This is AOT-compiled code calling MethodHandle.linkToSpecial
1351+ // See also PolymorphicSignatureWrapperMethod.buildGraph
13431352 Target_java_lang_invoke_MemberName mnTarget = (Target_java_lang_invoke_MemberName ) args [args .length - 1 ];
13441353 InterpreterResolvedJavaMethod target = InterpreterResolvedJavaMethod .fromMemberName (mnTarget );
1345- Object [] basicArgs = Arrays .copyOf (args , args .length - 1 );
1354+ InterpreterUnresolvedSignature signature = target .getSignature ();
1355+ Object [] basicArgs = unbasic (args , signature , true );
13461356 logIntrinsic ("[from compiled] linkToSpecial " , target , basicArgs );
13471357 try {
1348- return InterpreterToVM .dispatchInvocation (target , basicArgs , false , false , false , false , true );
1358+ Object result = InterpreterToVM .dispatchInvocation (target , basicArgs , false , false , false , false , true );
1359+ return Interpreter .rebasic (result , signature .getReturnKind ());
13491360 } catch (SemanticJavaException e ) {
13501361 throw uncheckedThrow (e .getCause ());
13511362 }
@@ -1354,12 +1365,15 @@ public Object linkToSpecial(Object[] args) {
13541365 @ Override
13551366 public Object linkToInterface (Object [] args ) {
13561367 // This is AOT-compiled code calling MethodHandle.linkToInterface
1368+ // See also PolymorphicSignatureWrapperMethod.buildGraph
13571369 Target_java_lang_invoke_MemberName mnTarget = (Target_java_lang_invoke_MemberName ) args [args .length - 1 ];
13581370 InterpreterResolvedJavaMethod target = InterpreterResolvedJavaMethod .fromMemberName (mnTarget );
1359- Object [] basicArgs = Arrays .copyOf (args , args .length - 1 );
1371+ InterpreterUnresolvedSignature signature = target .getSignature ();
1372+ Object [] basicArgs = unbasic (args , signature , true );
13601373 logIntrinsic ("[from compiled] linkToInterface " , target , basicArgs );
13611374 try {
1362- return InterpreterToVM .dispatchInvocation (target , basicArgs , true , false , false , true , true );
1375+ Object result = InterpreterToVM .dispatchInvocation (target , basicArgs , true , false , false , true , true );
1376+ return Interpreter .rebasic (result , signature .getReturnKind ());
13631377 } catch (SemanticJavaException e ) {
13641378 throw uncheckedThrow (e .getCause ());
13651379 }
0 commit comments