Skip to content

Commit c02018b

Browse files
Espresso: implement knownObjectFieldOffset0 (JDK-8361300)
1 parent d5e3af8 commit c02018b

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/substitutions/standard/Target_sun_misc_Unsafe.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -913,6 +913,32 @@ public static long objectFieldOffset1(@JavaType(Unsafe.class) StaticObject self,
913913
throw meta.throwException(meta.java_lang_InternalError);
914914
}
915915

916+
@Substitution(hasReceiver = true, nameProvider = Unsafe11.class)
917+
static long knownObjectFieldOffset0(@SuppressWarnings("unused") StaticObject self, @JavaType(Class.class) StaticObject c, @JavaType(String.class) StaticObject guestName,
918+
@Inject Meta meta, @Inject EspressoLanguage language) {
919+
// Error code -1 is not found, -2 is static field
920+
Klass k = c.getMirrorKlass(meta);
921+
if (!(k instanceof ObjectKlass kl)) {
922+
return -1;
923+
}
924+
String hostName = meta.toHostString(guestName);
925+
Symbol<Name> name = meta.getNames().lookup(hostName);
926+
if (name == null) {
927+
return -1;
928+
}
929+
for (Field f : kl.getFieldTable()) {
930+
if (!f.isRemoved() && f.getName() == name) {
931+
return getGuestFieldOffset(f, language);
932+
}
933+
}
934+
for (Field f : kl.getStaticFieldTable()) {
935+
if (!f.isRemoved() && f.getName() == name) {
936+
return -2;
937+
}
938+
}
939+
return -1;
940+
}
941+
916942
// region UnsafeAccessors
917943

918944
@GenerateInline

0 commit comments

Comments
 (0)