diff src/share/vm/oops/instanceKlass.cpp @ 15106:6876a4599b7e

create NodeClass for each Node subclass during class initialization of the latter
author Doug Simon <doug.simon@oracle.com>
date Tue, 15 Apr 2014 13:34:29 +0200
parents 5e6f29f287d6
children bd4c7b669bd8
line wrap: on
line diff
--- a/src/share/vm/oops/instanceKlass.cpp	Tue Apr 15 12:20:43 2014 +0200
+++ b/src/share/vm/oops/instanceKlass.cpp	Tue Apr 15 13:34:29 2014 +0200
@@ -1201,6 +1201,18 @@
     JavaValue result(T_VOID);
     JavaCalls::call(&result, h_method, &args, CHECK); // Static call (no args)
   }
+
+#ifdef GRAAL
+  if (this_oop->class_loader() == NULL && this_oop->is_subtype_of(SystemDictionary::Node_klass())) {
+    if (this_oop() != SystemDictionary::Node_klass()) {
+      // Create the NodeClass for a Node subclass.
+      TempNewSymbol sig = SymbolTable::new_symbol("(Ljava/lang/Class;)Lcom/oracle/graal/graph/NodeClass;", CHECK);
+      JavaValue result(T_OBJECT);
+      JavaCalls::call_static(&result, SystemDictionary::NodeClass_klass(), vmSymbols::get_name(), sig, this_oop->java_mirror(), CHECK);
+      this_oop->set_graal_node_class((oop) result.get_jobject());
+    }
+  }
+#endif
 }