Skip to content

Commit f63e91d

Browse files
Fix CremaMethodAccess.toSymbol for signature with proxies
1 parent 08d4afb commit f63e91d

File tree

1 file changed

+9
-5
lines changed
  • substratevm/src/com.oracle.svm.interpreter.metadata/src/com/oracle/svm/interpreter/metadata

1 file changed

+9
-5
lines changed

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,15 @@ static InterpreterResolvedJavaMethod toJVMCI(Executable executable) {
8383
} else {
8484
name = SymbolsSupport.getNames().lookup(executable.getName());
8585
}
86+
// hidden classes and SVM stable proxy name contain a `.`, replace with a `+`
8687
StringBuilder sb = new StringBuilder();
8788
sb.append('(');
8889
for (Class<?> type : executable.getParameterTypes()) {
89-
sb.append(type.descriptorString());
90+
sb.append(type.descriptorString().replace('.', '+'));
9091
}
9192
sb.append(')');
9293
if (executable instanceof Method method) {
93-
sb.append(method.getReturnType().descriptorString());
94+
sb.append(method.getReturnType().descriptorString().replace('.', '+'));
9495
} else {
9596
assert executable instanceof Constructor;
9697
sb.append('V');
@@ -100,14 +101,17 @@ static InterpreterResolvedJavaMethod toJVMCI(Executable executable) {
100101
}
101102

102103
static Symbol<Signature> toSymbol(InterpreterUnresolvedSignature jvmciSignature, SignatureSymbols signatures) {
104+
// hidden classes and SVM stable proxy name contain a `.`, replace with a `+`
103105
StringBuilder sb = new StringBuilder();
104106
sb.append('(');
105107
for (int i = 0; i < jvmciSignature.getParameterCount(false); i++) {
106-
sb.append(jvmciSignature.getParameterType(i, null).getName());
108+
sb.append(jvmciSignature.getParameterType(i, null).getName().replace('.', '+'));
107109
}
108110
sb.append(')');
109-
sb.append(jvmciSignature.getReturnType(null).getName());
110-
return signatures.getOrCreateValidSignature(ByteSequence.create(sb.toString()));
111+
sb.append(jvmciSignature.getReturnType(null).getName().replace('.', '+'));
112+
Symbol<Signature> symbol = signatures.getOrCreateValidSignature(ByteSequence.create(sb.toString()));
113+
assert symbol != null : jvmciSignature;
114+
return symbol;
111115
}
112116

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

0 commit comments

Comments
 (0)