hotspot/src/share/vm/ci/ciObjectFactory.cpp
changeset 13929 8da0dc50a6e4
parent 13728 882756847a04
child 13969 d2a189b83b87
child 13961 aeaa21c167d1
equal deleted inserted replaced
13918:b01a48301e67 13929:8da0dc50a6e4
    28 #include "ci/ciInstanceKlass.hpp"
    28 #include "ci/ciInstanceKlass.hpp"
    29 #include "ci/ciMemberName.hpp"
    29 #include "ci/ciMemberName.hpp"
    30 #include "ci/ciMethod.hpp"
    30 #include "ci/ciMethod.hpp"
    31 #include "ci/ciMethodData.hpp"
    31 #include "ci/ciMethodData.hpp"
    32 #include "ci/ciMethodHandle.hpp"
    32 #include "ci/ciMethodHandle.hpp"
       
    33 #include "ci/ciMethodType.hpp"
    33 #include "ci/ciNullObject.hpp"
    34 #include "ci/ciNullObject.hpp"
    34 #include "ci/ciObjArray.hpp"
    35 #include "ci/ciObjArray.hpp"
    35 #include "ci/ciObjArrayKlass.hpp"
    36 #include "ci/ciObjArrayKlass.hpp"
    36 #include "ci/ciObject.hpp"
    37 #include "ci/ciObject.hpp"
    37 #include "ci/ciObjectFactory.hpp"
    38 #include "ci/ciObjectFactory.hpp"
   235 ciObject* ciObjectFactory::get(oop key) {
   236 ciObject* ciObjectFactory::get(oop key) {
   236   ASSERT_IN_VM;
   237   ASSERT_IN_VM;
   237 
   238 
   238   assert(key == NULL || Universe::heap()->is_in_reserved(key), "must be");
   239   assert(key == NULL || Universe::heap()->is_in_reserved(key), "must be");
   239 
   240 
   240     NonPermObject* &bucket = find_non_perm(key);
   241   NonPermObject* &bucket = find_non_perm(key);
   241     if (bucket != NULL) {
   242   if (bucket != NULL) {
   242       return bucket->object();
   243     return bucket->object();
   243     }
   244   }
   244 
   245 
   245     // The ciObject does not yet exist.  Create it and insert it
   246   // The ciObject does not yet exist.  Create it and insert it
   246     // into the cache.
   247   // into the cache.
   247     Handle keyHandle(key);
   248   Handle keyHandle(key);
   248     ciObject* new_object = create_new_object(keyHandle());
   249   ciObject* new_object = create_new_object(keyHandle());
   249     assert(keyHandle() == new_object->get_oop(), "must be properly recorded");
   250   assert(keyHandle() == new_object->get_oop(), "must be properly recorded");
   250     init_ident_of(new_object);
   251   init_ident_of(new_object);
   251   assert(Universe::heap()->is_in_reserved(new_object->get_oop()), "must be");
   252   assert(Universe::heap()->is_in_reserved(new_object->get_oop()), "must be");
   252 
   253 
   253       // Not a perm-space object.
   254   // Not a perm-space object.
   254       insert_non_perm(bucket, keyHandle(), new_object);
   255   insert_non_perm(bucket, keyHandle(), new_object);
   255       return new_object;
   256   return new_object;
   256     }
   257 }
   257 
   258 
   258 // ------------------------------------------------------------------
   259 // ------------------------------------------------------------------
   259 // ciObjectFactory::get
   260 // ciObjectFactory::get
   260 //
   261 //
   261 // Get the ciObject corresponding to some oop.  If the ciObject has
   262 // Get the ciObject corresponding to some oop.  If the ciObject has
   322       return new (arena()) ciCallSite(h_i);
   323       return new (arena()) ciCallSite(h_i);
   323     else if (java_lang_invoke_MemberName::is_instance(o))
   324     else if (java_lang_invoke_MemberName::is_instance(o))
   324       return new (arena()) ciMemberName(h_i);
   325       return new (arena()) ciMemberName(h_i);
   325     else if (java_lang_invoke_MethodHandle::is_instance(o))
   326     else if (java_lang_invoke_MethodHandle::is_instance(o))
   326       return new (arena()) ciMethodHandle(h_i);
   327       return new (arena()) ciMethodHandle(h_i);
       
   328     else if (java_lang_invoke_MethodType::is_instance(o))
       
   329       return new (arena()) ciMethodType(h_i);
   327     else
   330     else
   328       return new (arena()) ciInstance(h_i);
   331       return new (arena()) ciInstance(h_i);
   329   } else if (o->is_objArray()) {
   332   } else if (o->is_objArray()) {
   330     objArrayHandle h_oa(THREAD, (objArrayOop)o);
   333     objArrayHandle h_oa(THREAD, (objArrayOop)o);
   331     return new (arena()) ciObjArray(h_oa);
   334     return new (arena()) ciObjArray(h_oa);