comparison src/share/vm/opto/parse2.cpp @ 1602:136b78722a08

6939203: JSR 292 needs method handle constants Summary: Add new CP types CONSTANT_MethodHandle, CONSTANT_MethodType; extend 'ldc' bytecode. Reviewed-by: twisti, never
author jrose
date Wed, 09 Jun 2010 18:50:45 -0700
parents e9ff18c4ace7
children 4b29a725c43c
comparison
equal deleted inserted replaced
1585:49fac4acd688 1602:136b78722a08
1322 case Bytecodes::_aconst_null: push(null()); break; 1322 case Bytecodes::_aconst_null: push(null()); break;
1323 case Bytecodes::_ldc: 1323 case Bytecodes::_ldc:
1324 case Bytecodes::_ldc_w: 1324 case Bytecodes::_ldc_w:
1325 case Bytecodes::_ldc2_w: 1325 case Bytecodes::_ldc2_w:
1326 // If the constant is unresolved, run this BC once in the interpreter. 1326 // If the constant is unresolved, run this BC once in the interpreter.
1327 if (iter().is_unresolved_string()) { 1327 {
1328 uncommon_trap(Deoptimization::make_trap_request
1329 (Deoptimization::Reason_unloaded,
1330 Deoptimization::Action_reinterpret,
1331 iter().get_constant_index()),
1332 NULL, "unresolved_string");
1333 break;
1334 } else {
1335 ciConstant constant = iter().get_constant(); 1328 ciConstant constant = iter().get_constant();
1336 if (constant.basic_type() == T_OBJECT) { 1329 if (constant.basic_type() == T_OBJECT &&
1337 ciObject* c = constant.as_object(); 1330 !constant.as_object()->is_loaded()) {
1338 if (c->is_klass()) { 1331 int index = iter().get_constant_pool_index();
1339 // The constant returned for a klass is the ciKlass for the 1332 constantTag tag = iter().get_constant_pool_tag(index);
1340 // entry. We want the java_mirror so get it. 1333 uncommon_trap(Deoptimization::make_trap_request
1341 ciKlass* klass = c->as_klass(); 1334 (Deoptimization::Reason_unloaded,
1342 if (klass->is_loaded()) { 1335 Deoptimization::Action_reinterpret,
1343 constant = ciConstant(T_OBJECT, klass->java_mirror()); 1336 index),
1344 } else { 1337 NULL, tag.internal_name());
1345 uncommon_trap(Deoptimization::make_trap_request 1338 break;
1346 (Deoptimization::Reason_unloaded,
1347 Deoptimization::Action_reinterpret,
1348 iter().get_constant_index()),
1349 NULL, "unresolved_klass");
1350 break;
1351 }
1352 }
1353 } 1339 }
1340 assert(constant.basic_type() != T_OBJECT || !constant.as_object()->is_klass(),
1341 "must be java_mirror of klass");
1354 bool pushed = push_constant(constant, true); 1342 bool pushed = push_constant(constant, true);
1355 guarantee(pushed, "must be possible to push this constant"); 1343 guarantee(pushed, "must be possible to push this constant");
1356 } 1344 }
1357 1345
1358 break; 1346 break;