< prev index next >

src/hotspot/share/oops/valueKlass.cpp

Print this page

        

@@ -143,10 +143,33 @@
     block++;
   }
   return oops;
 }
 
+oop ValueKlass::read_flattened_field(oop obj, int offset, TRAPS) {
+  oop res = NULL;
+  this->initialize(CHECK_NULL); // will throw an exception if in error state
+  if (is_empty_value()) {
+    res = (instanceOop)default_value();
+  } else {
+    Handle obj_h(THREAD, obj);
+    res = allocate_instance(CHECK_NULL);
+    value_copy_payload_to_new_oop(((char*)(oopDesc*)obj_h()) + offset, res);
+  }
+  assert(res != NULL, "Must be set in one of two paths above");
+  return res;
+}
+
+void ValueKlass::write_flattened_field(oop obj, int offset, oop value, TRAPS) {
+  if (value == NULL) {
+    THROW(vmSymbols::java_lang_NullPointerException());
+  }
+  if (!is_empty_value()) {
+    value_copy_oop_to_payload(value, ((char*)(oopDesc*)obj) + offset);
+  }
+}
+
 // Arrays of...
 
 bool ValueKlass::flatten_array() {
   if (!ValueArrayFlatten) {
     return false;
< prev index next >