Skip to content

Commit 41388d7

Browse files
committed
Adapt class file dumping to use the new hybrid CP support.
1 parent 38d2cca commit 41388d7

File tree

9 files changed

+301
-299
lines changed

9 files changed

+301
-299
lines changed

espresso-shared/src/com.oracle.truffle.espresso.classfile/src/com/oracle/truffle/espresso/classfile/ParserConstantPool.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.function.Function;
3030

3131
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
32+
import com.oracle.truffle.espresso.classfile.descriptors.ByteSequence;
3233
import com.oracle.truffle.espresso.classfile.descriptors.ModifiedUTF8;
3334
import com.oracle.truffle.espresso.classfile.descriptors.Symbol;
3435

@@ -107,7 +108,10 @@ public byte[] toBytesForSerialization() {
107108
}
108109

109110
@FunctionalInterface
110-
public interface Symbolify<T extends ModifiedUTF8> extends Function<byte[], Symbol<T>> {
111+
public interface Symbolify<T extends ModifiedUTF8> extends Function<ByteSequence, Symbol<T>> {
112+
default Symbol<T> apply(String string) {
113+
return apply(ByteSequence.create(string));
114+
}
111115
}
112116

113117
/**
@@ -130,7 +134,7 @@ public static ParserConstantPool fromBytesForSerialization(byte[] bytes, Symboli
130134
int symbolLength = bb.getInt();
131135
byte[] symbolBytes = new byte[symbolLength];
132136
bb.get(symbolBytes);
133-
symbols[i] = symbolify.apply(symbolBytes);
137+
symbols[i] = symbolify.apply(ByteSequence.wrap(symbolBytes));
134138
}
135139
assert !bb.hasRemaining();
136140
return new ParserConstantPool(tags, entries, symbols, majorVersion, minorVersion);

espresso-shared/src/com.oracle.truffle.espresso.classfile/src/com/oracle/truffle/espresso/classfile/descriptors/TypeSymbols.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
3333
import com.oracle.truffle.espresso.classfile.JavaKind;
34+
import com.oracle.truffle.espresso.classfile.ParserConstantPool;
3435
import com.oracle.truffle.espresso.classfile.ParserException;
3536

3637
/**
@@ -430,6 +431,29 @@ public static ByteSequence nameToType(ByteSequence name) {
430431
return wrap;
431432
}
432433

434+
/**
435+
* Reverse operation of {@link #fromClassNameEntry(Symbol)}. This conversion is <b>NOT</b> valid
436+
* for primitive types, to avoid ambiguity e.g. LI; vs I
437+
*/
438+
public static ByteSequence toClassNameEntry(Symbol<Type> type) {
439+
assert !isPrimitive(type);
440+
if (isArray(type)) {
441+
return type;
442+
}
443+
assert type.byteAt(0) == 'L';
444+
assert type.byteAt(type.length() - 1) == ';';
445+
return type.subSequence(1, type.length() - 1);
446+
}
447+
448+
/**
449+
* Reverse operation of {@link #fromClassNameEntry(Symbol)}. This conversion is <b>NOT</b> valid
450+
* for primitive types, to avoid ambiguity e.g. LI; vs I
451+
*/
452+
public static Symbol<Name> toClassNameEntry(Symbol<Type> type, ParserConstantPool.Symbolify<Name> symbolify) {
453+
ByteSequence className = toClassNameEntry(type);
454+
return symbolify.apply(className);
455+
}
456+
433457
public static ByteSequence getRuntimePackage(ByteSequence symbol) {
434458
if (symbol.byteAt(0) == '[') {
435459
int arrayDimensions = getArrayDimensions(symbol);

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
@@ -164,7 +164,7 @@ public boolean isJavaLangObject() {
164164
@Override
165165
public Symbol<Name> getSymbolicName() {
166166
// This is assumed to be low-traffic
167-
return SymbolsSupport.getNames().getOrCreate(TypeSymbols.typeToName(type));
167+
return SymbolsSupport.getNames().getOrCreate(TypeSymbols.toClassNameEntry(type));
168168
}
169169

170170
@Override

substratevm/src/com.oracle.svm.interpreter.metadata/src/com/oracle/svm/interpreter/metadata/serialization/Serializers.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import com.oracle.svm.core.snippets.KnownIntrinsics;
4141
import com.oracle.svm.core.util.VMError;
4242
import com.oracle.svm.espresso.classfile.ParserConstantPool;
43-
import com.oracle.svm.espresso.classfile.descriptors.ByteSequence;
4443
import com.oracle.svm.espresso.classfile.descriptors.ModifiedUTF8;
4544
import com.oracle.svm.espresso.classfile.descriptors.Symbol;
4645
import com.oracle.svm.interpreter.metadata.InterpreterConstantPool;
@@ -532,8 +531,7 @@ public static ValueSerializer<ReferenceConstant<?>> newReferenceConstantSerializ
532531

533532
@SuppressWarnings("unchecked")
534533
ParserConstantPool parserConstantPool = ParserConstantPool.fromBytesForSerialization(parserConstantPoolBytes,
535-
bytes -> {
536-
ByteSequence byteSequence = ByteSequence.wrap(bytes);
534+
byteSequence -> {
537535
return (Symbol<ModifiedUTF8>) SymbolsSupport.getUtf8().getOrCreateValidUtf8(byteSequence);
538536
});
539537
Object[] cachedEntries = context.readerFor(Object[].class).read(context, in);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
import com.oracle.svm.core.util.VMError;
5656
import com.oracle.svm.hosted.meta.HostedMethod;
5757
import com.oracle.svm.hosted.meta.HostedUniverse;
58-
import com.oracle.svm.interpreter.constantpool.ConstantPoolBuilder;
58+
import com.oracle.svm.interpreter.classfile.ConstantPoolBuilder;
5959
import com.oracle.svm.interpreter.metadata.BytecodeStream;
6060
import com.oracle.svm.interpreter.metadata.Bytecodes;
6161
import com.oracle.svm.interpreter.metadata.InterpreterConstantPool;

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import java.util.Arrays;
3232
import java.util.List;
3333

34-
import com.oracle.svm.interpreter.constantpool.RuntimeInterpreterConstantPool;
3534
import org.graalvm.collections.EconomicMap;
3635
import org.graalvm.collections.Equivalence;
3736
import org.graalvm.nativeimage.Platform;
Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
* or visit www.oracle.com if you need additional information or have any
2323
* questions.
2424
*/
25-
package com.oracle.svm.interpreter.constantpool;
25+
package com.oracle.svm.interpreter;
2626

2727
import com.oracle.svm.core.hub.registry.SymbolsSupport;
2828
import com.oracle.svm.core.util.VMError;
@@ -32,9 +32,6 @@
3232
import com.oracle.svm.espresso.classfile.descriptors.Symbol;
3333
import com.oracle.svm.espresso.classfile.descriptors.Type;
3434
import com.oracle.svm.espresso.classfile.descriptors.TypeSymbols;
35-
import com.oracle.svm.interpreter.CremaLinkResolver;
36-
import com.oracle.svm.interpreter.CremaRuntimeAccess;
37-
import com.oracle.svm.interpreter.SemanticJavaException;
3835
import com.oracle.svm.interpreter.metadata.InterpreterConstantPool;
3936
import com.oracle.svm.interpreter.metadata.InterpreterResolvedJavaField;
4037
import com.oracle.svm.interpreter.metadata.InterpreterResolvedJavaMethod;

0 commit comments

Comments
 (0)