Skip to content

Commit c56d1de

Browse files
committed
Fix interpreter metadata serialization.
1 parent 2c77276 commit c56d1de

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,13 +116,16 @@ public static InterpreterResolvedJavaField createAtBuildTime(AnalysisField origi
116116
}
117117

118118
public static InterpreterResolvedJavaField createForInterpreter(String name, int modifiers,
119-
InterpreterResolvedJavaType type, InterpreterResolvedObjectType declaringClass,
119+
JavaType type, InterpreterResolvedObjectType declaringClass,
120120
int offset,
121-
JavaConstant constant) {
121+
JavaConstant constant,
122+
boolean isWordStorage) {
122123
MetadataUtil.requireNonNull(type);
123124
MetadataUtil.requireNonNull(declaringClass);
124125
Symbol<Name> nameSymbol = SymbolsSupport.getNames().getOrCreate(name);
125-
return new InterpreterResolvedJavaField(nameSymbol, type.getSymbolicType(), modifiers, type, declaringClass, offset, constant, type.isWordType());
126+
InterpreterResolvedJavaType resolvedType = type instanceof InterpreterResolvedJavaType ? (InterpreterResolvedJavaType) type : null;
127+
Symbol<Type> symbolicType = resolvedType == null ? CremaTypeAccess.jvmciNameToType(type.getName()) : resolvedType.getSymbolicType();
128+
return new InterpreterResolvedJavaField(nameSymbol, symbolicType, modifiers, resolvedType, declaringClass, offset, constant, isWordStorage);
126129
}
127130

128131
@Platforms(Platform.HOSTED_ONLY.class)

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -546,12 +546,13 @@ public static ValueSerializer<ReferenceConstant<?>> newReferenceConstantSerializ
546546
static final ValueSerializer<InterpreterResolvedJavaField> RESOLVED_FIELD = createSerializer(
547547
(context, in) -> {
548548
String name = context.readReference(in);
549-
InterpreterResolvedJavaType type = context.readReference(in);
549+
JavaType type = context.readReference(in);
550550
InterpreterResolvedObjectType declaringClass = context.readReference(in);
551551
int modifiers = LEB128.readUnsignedInt(in);
552552
int offset = LEB128.readUnsignedInt(in);
553553
JavaConstant constant = context.readReference(in);
554-
return InterpreterResolvedJavaField.createForInterpreter(name, modifiers, type, declaringClass, offset, constant);
554+
boolean isWordStorage = in.readBoolean();
555+
return InterpreterResolvedJavaField.createForInterpreter(name, modifiers, type, declaringClass, offset, constant, isWordStorage);
555556
},
556557
(context, out, value) -> {
557558
context.writeReference(out, value.getName());
@@ -565,6 +566,7 @@ public static ValueSerializer<ReferenceConstant<?>> newReferenceConstantSerializ
565566
} else {
566567
context.writeReference(out, null);
567568
}
569+
out.writeBoolean(value.isWordStorage());
568570
});
569571

570572
static final ValueSerializer<InterpreterResolvedObjectType> OBJECT_TYPE = createSerializer(

0 commit comments

Comments
 (0)