Hi,
please review this patch, it allows to export to Java the host_class used
to create the anonymous class.
cheers,
Rémi
diff --git a/src/share/vm/oops/instanceKlass.hpp b/src/share/vm/oops/instanceKlass.hpp
--- a/src/share/vm/oops/instanceKlass.hpp
+++ b/src/share/vm/oops/instanceKlass.hpp
@@ -373,8 +373,8 @@ class instanceKlass: public Klass {
void set_protection_domain(oop pd) { oop_store((oop*) &_protection_domain, pd); }
// host class
- oop host_klass() const { return _host_klass; }
- void set_host_klass(oop host) { oop_store((oop*) &_host_klass, host); }
+ klassOop host_klass() const { return _host_klass; }
+ void set_host_klass(klassOop host) { oop_store((oop*) &_host_klass, host); }
bool is_anonymous() const { return _host_klass != NULL; }
// signers
diff --git a/src/share/vm/prims/unsafe.cpp b/src/share/vm/prims/unsafe.cpp
--- a/src/share/vm/prims/unsafe.cpp
+++ b/src/share/vm/prims/unsafe.cpp
@@ -861,6 +861,26 @@ UNSAFE_END
UNSAFE_END
+UNSAFE_ENTRY(jclass, Unsafe_GetAnonymousHostClass(JNIEnv *env, jobject unsafe, jclass cls))
+ UnsafeWrapper("Unsafe_GetAnonymousHostClass");
+ {
+ oop mirror = JNIHandles::resolve_non_null(cls);
+ KlassHandle klass(THREAD, java_lang_Class::as_klassOop(mirror));
+ if (java_lang_Class::is_primitive(mirror) ||
+ !(Klass::cast(klass())->oop_is_instance())) {
+ return NULL;
+ }
+
+ klassOop host_klass = instanceKlass::cast(klass())->host_klass();
+ if (host_klass == NULL)
+ return NULL;
+
+ return (jclass) JNIHandles::make_local(env,
+ instanceKlassHandle(THREAD, host_klass)->java_mirror());
+ }
+UNSAFE_END
+
+
UNSAFE_ENTRY(void, Unsafe_MonitorEnter(JNIEnv *env, jobject unsafe, jobject jobj))
UnsafeWrapper("Unsafe_MonitorEnter");
{
@@ -1315,7 +1335,8 @@ JNINativeMethod memcopy_methods_15[] = {
};
JNINativeMethod dynlang_methods[] = {
- {CC"defineAnonymousClass", CC"("DAC_Args")"CLS, FN_PTR(Unsafe_DefineAnonymousClass)},
+ {CC"defineAnonymousClass", CC"("DAC_Args")"CLS, FN_PTR(Unsafe_DefineAnonymousClass)},
+ {CC"getAnonymousHostClass", CC"("CLS")"CLS, FN_PTR(Unsafe_GetAnonymousHostClass)},
};
#undef CC
_______________________________________________
mlvm-dev mailing list
[email protected]
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev