< 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 >