Mercurial > hg > graal-compiler
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)},