changeset 6549:15e04f248d6b

Add functionality to initialize a type
author Christian Wimmer <christian.wimmer@oracle.com>
date Wed, 10 Oct 2012 20:32:33 -0700
parents 4dc9e468c8b0
children 65f09f190be1
files graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaType.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaType.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotTypePrimitive.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotTypeUnresolved.java src/share/vm/graal/graalCompilerToVM.cpp
diffstat 7 files changed, 31 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaType.java	Wed Oct 10 20:29:53 2012 -0700
+++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaType.java	Wed Oct 10 20:32:33 2012 -0700
@@ -117,6 +117,11 @@
     boolean isInitialized();
 
     /**
+     * Initializes this type.
+     */
+    void initialize();
+
+    /**
      * Checks whether this type is a subtype of another type.
      *
      * @param other the type to test
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java	Wed Oct 10 20:29:53 2012 -0700
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVM.java	Wed Oct 10 20:32:33 2012 -0700
@@ -80,6 +80,8 @@
 
     boolean JavaType_isInitialized(HotSpotResolvedJavaType klass);
 
+    void JavaType_initialize(HotSpotResolvedJavaType klass);
+
     JavaType getType(Class<?> javaClass);
 
     JavaType JavaType_uniqueConcreteSubtype(HotSpotResolvedJavaType klass);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java	Wed Oct 10 20:29:53 2012 -0700
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/CompilerToVMImpl.java	Wed Oct 10 20:32:33 2012 -0700
@@ -112,6 +112,9 @@
     public native boolean JavaType_isInitialized(HotSpotResolvedJavaType klass);
 
     @Override
+    public native void JavaType_initialize(HotSpotResolvedJavaType klass);
+
+    @Override
     public native HotSpotMethodData JavaMethod_methodData(HotSpotResolvedJavaMethod method);
 
     @Override
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaType.java	Wed Oct 10 20:29:53 2012 -0700
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaType.java	Wed Oct 10 20:32:33 2012 -0700
@@ -157,6 +157,14 @@
     }
 
     @Override
+    public void initialize() {
+        if (!HotSpotGraalRuntime.getInstance().getCompilerToVM().JavaType_isInitialized(this)) {
+            HotSpotGraalRuntime.getInstance().getCompilerToVM().JavaType_initialize(this);
+        }
+        isInitialized = true;
+    }
+
+    @Override
     public boolean isInstance(Constant obj) {
         return javaMirror.isInstance(obj);
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotTypePrimitive.java	Wed Oct 10 20:29:53 2012 -0700
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotTypePrimitive.java	Wed Oct 10 20:32:33 2012 -0700
@@ -169,4 +169,8 @@
     public HotSpotKlassOop klassOop() {
         return klassOop;
     }
+
+    @Override
+    public void initialize() {
+    }
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotTypeUnresolved.java	Wed Oct 10 20:29:53 2012 -0700
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotTypeUnresolved.java	Wed Oct 10 20:32:33 2012 -0700
@@ -110,8 +110,7 @@
 
     @Override
     public ResolvedJavaType resolve(ResolvedJavaType accessingClass) {
-        JavaType type = HotSpotGraalRuntime.getInstance().lookupType(name, (HotSpotResolvedJavaType) accessingClass, true);
-        return (ResolvedJavaType) type;
+        return (ResolvedJavaType) HotSpotGraalRuntime.getInstance().lookupType(name, (HotSpotResolvedJavaType) accessingClass, true);
     }
 
     @Override
--- a/src/share/vm/graal/graalCompilerToVM.cpp	Wed Oct 10 20:29:53 2012 -0700
+++ b/src/share/vm/graal/graalCompilerToVM.cpp	Wed Oct 10 20:32:33 2012 -0700
@@ -562,6 +562,13 @@
   return instanceKlass::cast(klass)->is_initialized();
 C2V_END
 
+// public bool JavaType_isInitialized(HotSpotResolvedType klass);
+C2V_VMENTRY(void, JavaType_initialize, (JNIEnv *, jobject, jobject hotspot_klass))
+  klassOop klass = java_lang_Class::as_klassOop(HotSpotResolvedJavaType::javaMirror(hotspot_klass));
+  assert(klass != NULL, "method must not be called for primitive types");
+  instanceKlass::cast(klass)->initialize(JavaThread::current());
+C2V_END
+
 C2V_VMENTRY(jobject, JavaType_arrayOf, (JNIEnv *, jobject, jobject klass))
   KlassHandle klass_handle(java_lang_Class::as_klassOop(HotSpotResolvedJavaType::javaMirror(klass)));
   KlassHandle arr = klass_handle->array_klass(THREAD);
@@ -989,6 +996,7 @@
   {CC"JavaType_arrayOf",                    CC"("RESOLVED_TYPE")"TYPE,                            FN_PTR(JavaType_arrayOf)},
   {CC"JavaType_fields",                     CC"("RESOLVED_TYPE")["RESOLVED_FIELD,                 FN_PTR(JavaType_fields)},
   {CC"JavaType_isInitialized",              CC"("RESOLVED_TYPE")Z",                               FN_PTR(JavaType_isInitialized)},
+  {CC"JavaType_initialize",                 CC"("RESOLVED_TYPE")V",                               FN_PTR(JavaType_initialize)},
 
   {CC"getPrimitiveArrayType",               CC"("KIND")"TYPE,                                     FN_PTR(getPrimitiveArrayType)},
   {CC"getMaxCallTargetOffset",              CC"(J)J",                                             FN_PTR(getMaxCallTargetOffset)},