< prev index next >

src/hotspot/share/oops/fieldInfo.inline.hpp

Print this page
@@ -27,10 +27,11 @@
  
  #include "oops/fieldInfo.hpp"
  
  #include "memory/metadataFactory.hpp"
  #include "oops/constantPool.hpp"
+ #include "oops/instanceKlass.hpp"
  #include "oops/symbol.hpp"
  #include "runtime/atomic.hpp"
  #include "utilities/checkedCast.hpp"
  
  inline Symbol* FieldInfo::name(ConstantPool* cp) const {

@@ -83,14 +84,22 @@
        _consumer->accept_uint(fi.generic_signature_index());
      }
      if (fi.field_flags().is_contended()) {
        _consumer->accept_uint(fi.contention_group());
      }
+     if (fi.field_flags().is_flat()) {
+       assert(fi.layout_kind() != LayoutKind::UNKNOWN, "Must be set");
+       _consumer->accept_uint(fi.layout_kind());
+     }
+     if (fi.field_flags().has_null_marker()) {
+       _consumer->accept_uint(fi.null_marker_offset());
+     }
    } else {
      assert(fi.initializer_index() == 0, "");
      assert(fi.generic_signature_index() == 0, "");
      assert(fi.contention_group() == 0, "");
+     assert(fi.null_marker_offset() == 0, "");
    }
  }
  
  
  inline FieldInfoReader::FieldInfoReader(const Array<u1>* fi)

@@ -117,21 +126,31 @@
    if (fi._field_flags.is_contended()) {
      fi._contention_group = checked_cast<u2>(next_uint());
    } else {
      fi._contention_group = 0;
    }
+   if (fi._field_flags.is_flat()) {
+     fi._layout_kind = static_cast<LayoutKind>(next_uint());
+   }
+   if (fi._field_flags.has_null_marker()) {
+     fi._null_marker_offset = next_uint();
+   } else {
+     fi._null_marker_offset = 0;
+   }
  }
  
  inline FieldInfoReader&  FieldInfoReader::skip_field_info() {
    _next_index++;
    const int name_sig_af_off = 4;  // four items
    skip(name_sig_af_off);
    FieldInfo::FieldFlags ff(next_uint());
    if (ff.has_any_optionals()) {
      const int init_gen_cont = (ff.is_initialized() +
                                  ff.is_generic() +
-                                 ff.is_contended());
+                                 ff.is_contended() +
+                                 ff.is_flat() +
+                                 ff.has_null_marker());
      skip(init_gen_cont);  // up to three items
    }
    return *this;
  }
  
< prev index next >