equal
deleted
inserted
replaced
21 * questions. |
21 * questions. |
22 * |
22 * |
23 */ |
23 */ |
24 |
24 |
25 #include "precompiled.hpp" |
25 #include "precompiled.hpp" |
|
26 #include "classfile/classFileStream.hpp" |
26 #include "classfile/vmSymbols.hpp" |
27 #include "classfile/vmSymbols.hpp" |
27 #include "memory/allocation.inline.hpp" |
28 #include "memory/allocation.inline.hpp" |
28 #include "oops/objArrayOop.inline.hpp" |
29 #include "oops/objArrayOop.inline.hpp" |
29 #include "oops/oop.inline.hpp" |
30 #include "oops/oop.inline.hpp" |
30 #include "prims/jni.h" |
31 #include "prims/jni.h" |
995 if (!p->is_objArray()) |
996 if (!p->is_objArray()) |
996 THROW_0(vmSymbols::java_lang_IllegalArgumentException()); |
997 THROW_0(vmSymbols::java_lang_IllegalArgumentException()); |
997 cp_patches_h = objArrayHandle(THREAD, (objArrayOop)p); |
998 cp_patches_h = objArrayHandle(THREAD, (objArrayOop)p); |
998 } |
999 } |
999 |
1000 |
1000 KlassHandle host_klass(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(host_class))); |
1001 const Klass* host_klass = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(host_class)); |
|
1002 assert(host_klass != NULL, "invariant"); |
|
1003 |
1001 const char* host_source = host_klass->external_name(); |
1004 const char* host_source = host_klass->external_name(); |
1002 Handle host_loader(THREAD, host_klass->class_loader()); |
1005 Handle host_loader(THREAD, host_klass->class_loader()); |
1003 Handle host_domain(THREAD, host_klass->protection_domain()); |
1006 Handle host_domain(THREAD, host_klass->protection_domain()); |
1004 |
1007 |
1005 GrowableArray<Handle>* cp_patches = NULL; |
1008 GrowableArray<Handle>* cp_patches = NULL; |
1014 cp_patches->at_put(i, patch); |
1017 cp_patches->at_put(i, patch); |
1015 } |
1018 } |
1016 } |
1019 } |
1017 } |
1020 } |
1018 |
1021 |
1019 ClassFileStream st(class_bytes, class_bytes_length, (char*) host_source); |
1022 ClassFileStream st(class_bytes, |
|
1023 class_bytes_length, |
|
1024 host_source, |
|
1025 ClassFileStream::verify); |
1020 |
1026 |
1021 instanceKlassHandle anon_klass; |
1027 instanceKlassHandle anon_klass; |
1022 { |
1028 { |
1023 Symbol* no_class_name = NULL; |
1029 Symbol* no_class_name = NULL; |
1024 Klass* anonk = SystemDictionary::parse_stream(no_class_name, |
1030 Klass* anonk = SystemDictionary::parse_stream(no_class_name, |
1025 host_loader, host_domain, |
1031 host_loader, |
1026 &st, host_klass, cp_patches, |
1032 host_domain, |
1027 CHECK_NULL); |
1033 &st, |
|
1034 host_klass, |
|
1035 cp_patches, |
|
1036 CHECK_NULL); |
1028 if (anonk == NULL) return NULL; |
1037 if (anonk == NULL) return NULL; |
1029 anon_klass = instanceKlassHandle(THREAD, anonk); |
1038 anon_klass = instanceKlassHandle(THREAD, anonk); |
1030 } |
1039 } |
1031 |
1040 |
1032 return anon_klass; |
1041 return anon_klass; |