diff src/share/vm/graal/graalCodeInstaller.cpp @ 15018:db4254246f9a

Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
author Christian Wimmer <christian.wimmer@oracle.com>
date Mon, 07 Apr 2014 16:09:17 -0700
parents 8db730993642
children 5c71dcf0915d
line wrap: on
line diff
--- a/src/share/vm/graal/graalCodeInstaller.cpp	Mon Apr 07 23:35:41 2014 +0200
+++ b/src/share/vm/graal/graalCodeInstaller.cpp	Mon Apr 07 16:09:17 2014 -0700
@@ -180,14 +180,14 @@
 
 // Records any Metadata values embedded in a Constant (e.g., the value returned by HotSpotResolvedObjectType.klass()).
 static void record_metadata_in_constant(oop constant, OopRecorder* oop_recorder) {
-  char kind = Kind::typeChar(Constant::kind(constant));
-  char wordKind = 'j';
-  if (kind == wordKind) {
-    oop obj = Constant::object(constant);
-    jlong prim = Constant::primitive(constant);
-    if (obj != NULL) {
-      record_metadata_reference(obj, prim, false, oop_recorder);
-    }
+  if (constant->is_a(HotSpotMetaspaceConstant::klass())) {
+    oop obj = HotSpotMetaspaceConstant::metaspaceObject(constant);
+    jlong prim = HotSpotMetaspaceConstant::primitive(constant);
+    assert(Kind::typeChar(Constant::kind(constant)) == 'j', "must have word kind");
+    assert(obj != NULL, "must have an object");
+    assert(prim != 0, "must have a primitive value");
+
+    record_metadata_reference(obj, prim, false, oop_recorder);
   }
 }
 
@@ -263,17 +263,19 @@
     return value;
   } else if (value->is_a(Constant::klass())){
     record_metadata_in_constant(value, oop_recorder);
-    jlong prim = Constant::primitive(value);
     if (type == T_INT || type == T_FLOAT || type == T_SHORT || type == T_CHAR || type == T_BOOLEAN || type == T_BYTE) {
+      jlong prim = PrimitiveConstant::primitive(value);
       return new ConstantIntValue(*(jint*)&prim);
     } else if (type == T_LONG || type == T_DOUBLE) {
+      jlong prim = PrimitiveConstant::primitive(value);
       second = new ConstantIntValue(0);
       return new ConstantLongValue(prim);
     } else if (type == T_OBJECT) {
-      oop obj = Constant::object(value);
-      if (obj == NULL) {
+      if (value->is_a(NullConstant::klass())) {
         return new ConstantOopWriteValue(NULL);
       } else {
+        oop obj = HotSpotObjectConstant::object(value);
+        assert(obj != NULL, "null value must be in NullConstant");
         return new ConstantOopWriteValue(JNIHandles::make_local(obj));
       }
     } else if (type == T_ADDRESS) {