Skip to content

Commit 9822485

Browse files
committed
Adopt shared lookup in Crema.
1 parent cecc20b commit 9822485

File tree

6 files changed

+53
-36
lines changed

6 files changed

+53
-36
lines changed

substratevm/src/com.oracle.svm.interpreter.metadata/src/com/oracle/svm/interpreter/metadata/CremaMethodAccess.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import com.oracle.svm.espresso.classfile.descriptors.Symbol;
4040
import com.oracle.svm.espresso.classfile.descriptors.Type;
4141
import com.oracle.svm.espresso.classfile.descriptors.TypeSymbols;
42+
import com.oracle.svm.espresso.shared.lookup.LookupSuccessInvocationFailure;
4243
import com.oracle.svm.espresso.shared.meta.MethodAccess;
4344

4445
import jdk.vm.ci.meta.JavaKind;
@@ -101,7 +102,12 @@ static InterpreterResolvedJavaMethod toJVMCI(Executable executable) {
101102
sb.append('V');
102103
}
103104
Symbol<Signature> signature = SymbolsSupport.getSignatures().lookupValidSignature(sb.toString());
104-
return holder.lookupMethod(name, signature);
105+
try {
106+
return holder.lookupMethod(name, signature);
107+
} catch (LookupSuccessInvocationFailure e) {
108+
// GR-70938
109+
return e.getResult();
110+
}
105111
}
106112

107113
static JavaType toJavaType(Symbol<Type> typeSymbol) {

substratevm/src/com.oracle.svm.interpreter.metadata/src/com/oracle/svm/interpreter/metadata/InterpreterResolvedJavaMethod.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,11 @@ public final boolean isCallerSensitive() {
336336
return (flags & ACC_CALLER_SENSITIVE) != 0;
337337
}
338338

339+
@Override
340+
public InterpreterResolvedJavaMethod findSignaturePolymorphicIntrinsic(Symbol<Signature> methodSignature) {
341+
return (InterpreterResolvedJavaMethod) CremaSupport.singleton().findMethodHandleIntrinsic(this, methodSignature);
342+
}
343+
339344
@Override
340345
public final boolean isDeclaredSignaturePolymorphic() {
341346
// Note: might not be true for the instantiation of polymorphic signature intrinsics.

substratevm/src/com.oracle.svm.interpreter.metadata/src/com/oracle/svm/interpreter/metadata/InterpreterResolvedJavaType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
* closed world e.g. instantiable, instantiated, effectively final ...
5454
*/
5555
public abstract class InterpreterResolvedJavaType implements ResolvedJavaType, CremaTypeAccess {
56-
public static InterpreterResolvedJavaType[] EMPTY_ARRAY = new InterpreterResolvedJavaType[0];
56+
public static final InterpreterResolvedJavaType[] EMPTY_ARRAY = new InterpreterResolvedJavaType[0];
5757

5858
private final Symbol<Type> type;
5959
protected final Class<?> clazz;

substratevm/src/com.oracle.svm.interpreter.metadata/src/com/oracle/svm/interpreter/metadata/InterpreterResolvedObjectType.java

Lines changed: 14 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
package com.oracle.svm.interpreter.metadata;
2626

2727
import static com.oracle.svm.core.BuildPhaseProvider.AfterAnalysis;
28-
import static com.oracle.svm.espresso.classfile.ParserKlass.isSignaturePolymorphicHolderType;
2928

29+
import java.util.Arrays;
3030
import java.util.List;
3131

3232
import org.graalvm.nativeimage.Platform;
@@ -36,18 +36,15 @@
3636
import com.oracle.svm.core.StaticFieldsSupport;
3737
import com.oracle.svm.core.heap.UnknownObjectField;
3838
import com.oracle.svm.core.hub.DynamicHub;
39-
import com.oracle.svm.core.hub.crema.CremaSupport;
4039
import com.oracle.svm.core.hub.registry.SymbolsSupport;
4140
import com.oracle.svm.core.layeredimagesingleton.MultiLayeredImageSingleton;
4241
import com.oracle.svm.core.util.VMError;
4342
import com.oracle.svm.espresso.classfile.ParserKlass;
4443
import com.oracle.svm.espresso.classfile.descriptors.ByteSequence;
4544
import com.oracle.svm.espresso.classfile.descriptors.Name;
46-
import com.oracle.svm.espresso.classfile.descriptors.Signature;
4745
import com.oracle.svm.espresso.classfile.descriptors.Symbol;
4846
import com.oracle.svm.espresso.classfile.descriptors.Type;
4947
import com.oracle.svm.espresso.classfile.descriptors.TypeSymbols;
50-
import com.oracle.svm.espresso.shared.meta.LookupHelper;
5148
import com.oracle.svm.interpreter.metadata.serialization.VisibleForSerialization;
5249

5350
import jdk.vm.ci.meta.JavaConstant;
@@ -358,8 +355,19 @@ public final InterpreterResolvedObjectType getSuperClass() {
358355
}
359356

360357
@Override
361-
public final InterpreterResolvedJavaType[] getSuperInterfaces() {
362-
return getInterfaces();
358+
public final List<InterpreterResolvedJavaType> getSuperInterfacesList() {
359+
return Arrays.asList(getInterfaces());
360+
}
361+
362+
@Override
363+
public List<InterpreterResolvedJavaMethod> getDeclaredMethodsList() {
364+
return Arrays.asList(declaredMethods);
365+
}
366+
367+
@Override
368+
public List<InterpreterResolvedJavaMethod> getImplicitInterfaceMethodsList() {
369+
// GR-70607: get mirandas.
370+
return null;
363371
}
364372

365373
@Override
@@ -392,28 +400,4 @@ public final InterpreterResolvedJavaField lookupField(Symbol<Name> name, Symbol<
392400
return null;
393401
}
394402

395-
@Override
396-
public final InterpreterResolvedJavaMethod lookupMethod(Symbol<Name> name, Symbol<Signature> signature) {
397-
return LookupHelper.lookupMethod(this, name, signature);
398-
}
399-
400-
@Override
401-
public final InterpreterResolvedJavaMethod lookupInstanceMethod(Symbol<Name> name, Symbol<Signature> signature) {
402-
return LookupHelper.lookupInstanceMethod(this, name, signature);
403-
}
404-
405-
@Override
406-
public InterpreterResolvedJavaMethod lookupInterfaceMethod(Symbol<Name> name, Symbol<Signature> signature) {
407-
return LookupHelper.lookupInterfaceMethod(this, name, signature);
408-
}
409-
410-
@Override
411-
public InterpreterResolvedJavaMethod lookupDeclaredSignaturePolymorphicMethod(Symbol<Name> methodName) {
412-
for (InterpreterResolvedJavaMethod m : getDeclaredMethods()) {
413-
if (m.getSymbolicName() == methodName && m.isDeclaredSignaturePolymorphic()) {
414-
return m;
415-
}
416-
}
417-
return null;
418-
}
419403
}

substratevm/src/com.oracle.svm.interpreter.metadata/src/com/oracle/svm/interpreter/metadata/InterpreterResolvedPrimitiveType.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
package com.oracle.svm.interpreter.metadata;
2626

2727
import java.lang.reflect.Modifier;
28+
import java.util.Collections;
2829
import java.util.List;
2930

3031
import com.oracle.svm.core.hub.registry.SymbolsSupport;
@@ -126,8 +127,8 @@ public InterpreterResolvedJavaType[] getInterfaces() {
126127
}
127128

128129
@Override
129-
public InterpreterResolvedJavaType[] getSuperInterfaces() {
130-
return getInterfaces();
130+
public List<InterpreterResolvedJavaType> getSuperInterfacesList() {
131+
return Collections.emptyList();
131132
}
132133

133134
@Override
@@ -140,6 +141,16 @@ public InterpreterResolvedJavaMethod[] getDeclaredMethods(boolean link) {
140141
return InterpreterResolvedJavaMethod.EMPTY_ARRAY;
141142
}
142143

144+
@Override
145+
public List<InterpreterResolvedJavaMethod> getDeclaredMethodsList() {
146+
return Collections.emptyList();
147+
}
148+
149+
@Override
150+
public List<InterpreterResolvedJavaMethod> getImplicitInterfaceMethodsList() {
151+
return null;
152+
}
153+
143154
@Override
144155
public ResolvedJavaField[] getInstanceFields(boolean includeSuperclasses) {
145156
return InterpreterResolvedJavaField.EMPTY_ARRAY;

substratevm/src/com.oracle.svm.interpreter/src/com/oracle/svm/interpreter/CremaLinkResolver.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.oracle.svm.espresso.classfile.descriptors.Signature;
2929
import com.oracle.svm.espresso.classfile.descriptors.Symbol;
3030
import com.oracle.svm.espresso.classfile.descriptors.Type;
31+
import com.oracle.svm.espresso.shared.lookup.LookupSuccessInvocationFailure;
3132
import com.oracle.svm.espresso.shared.resolver.CallSiteType;
3233
import com.oracle.svm.espresso.shared.resolver.FieldAccessType;
3334
import com.oracle.svm.espresso.shared.resolver.LinkResolver;
@@ -67,14 +68,24 @@ public static InterpreterResolvedJavaMethod resolveMethodSymbol(CremaRuntimeAcce
6768
Symbol<Name> name, Symbol<Signature> signature, InterpreterResolvedJavaType symbolicHolder,
6869
boolean interfaceLookup,
6970
boolean accessCheck, boolean loadingConstraints) {
70-
return LinkResolver.resolveMethodSymbol(runtime, accessingClass, name, signature, symbolicHolder, interfaceLookup, accessCheck, loadingConstraints);
71+
try {
72+
return LinkResolver.resolveMethodSymbol(runtime, accessingClass, name, signature, symbolicHolder, interfaceLookup, accessCheck, loadingConstraints);
73+
} catch (LookupSuccessInvocationFailure e) {
74+
// GR-70938 Somehow communicate to the caller this info.
75+
return e.getResult();
76+
}
7177
}
7278

7379
public static InterpreterResolvedJavaMethod resolveMethodSymbolOrNull(CremaRuntimeAccess runtime, InterpreterResolvedJavaType accessingClass,
7480
Symbol<Name> name, Symbol<Signature> signature, InterpreterResolvedJavaType symbolicHolder,
7581
boolean interfaceLookup,
7682
boolean accessCheck, boolean loadingConstraints) {
77-
return LinkResolver.resolveMethodSymbolOrNull(runtime, accessingClass, name, signature, symbolicHolder, interfaceLookup, accessCheck, loadingConstraints);
83+
try {
84+
return LinkResolver.resolveMethodSymbolOrNull(runtime, accessingClass, name, signature, symbolicHolder, interfaceLookup, accessCheck, loadingConstraints);
85+
} catch (LookupSuccessInvocationFailure e) {
86+
// GR-70938 Somehow communicate to the caller this info.
87+
return e.getResult();
88+
}
7889
}
7990

8091
public static ResolvedCall<InterpreterResolvedJavaType, InterpreterResolvedJavaMethod, InterpreterResolvedJavaField> resolveCallSiteOrThrow(

0 commit comments

Comments
 (0)