comparison src/share/vm/ci/ciObjectFactory.cpp @ 6822:f6b0eb4e44cf

7200949: JSR 292: rubybench/bench/time/bench_base64.rb fails with jruby.jar not on boot class path Reviewed-by: jrose, kvn
author twisti
date Mon, 01 Oct 2012 14:50:10 -0700
parents da91efe96a93
children 6e5a59a8e4a7 8e47bac5643a
comparison
equal deleted inserted replaced
6811:1b582b1bf7cb 6822:f6b0eb4e44cf
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);