< prev index next >
src/share/vm/oops/valueKlass.cpp
Print this page
@@ -312,10 +312,11 @@
if (fs.access_flags().is_static()) continue;
fieldDescriptor& fd = fs.field_descriptor();
BasicType bt = fd.field_type();
int offset = base_off + fd.offset() - (base_off > 0 ? first_field_offset() : 0);
if (bt == T_VALUETYPE) {
+ if (fd.is_flatten()) {
Symbol* signature = fd.signature();
JavaThread* THREAD = JavaThread::current();
oop loader = class_loader();
oop domain = protection_domain();
ResetNoHandleMark rnhm;
@@ -326,10 +327,13 @@
THREAD);
assert(klass != NULL && !HAS_PENDING_EXCEPTION, "lookup shouldn't fail");
const GrowableArray<SigEntry>& embedded = ValueKlass::cast(klass)->collect_fields(offset);
sig_extended.appendAll(&embedded);
} else {
+ sig_extended.push(SigEntry(T_OBJECT, offset));
+ }
+ } else {
sig_extended.push(SigEntry(bt, offset));
if (bt == T_LONG || bt == T_DOUBLE) {
sig_extended.push(SigEntry(T_VOID, offset));
}
}
< prev index next >