hotspot/src/share/vm/prims/unsafe.cpp
changeset 35135 dd2ce9021031
parent 35103 d19354bcbfa6
parent 34666 1c7168ea0034
child 36086 f70e100d3195
equal deleted inserted replaced
35134:dbf1c77ae372 35135:dd2ce9021031
    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;