Print this page
rev 1082 : [mq]: indy.compiler.patch

Split Close
Expand all
Collapse all
          --- old/src/share/vm/ci/ciTypeFlow.cpp
          +++ new/src/share/vm/ci/ciTypeFlow.cpp
↓ open down ↓ 627 lines elided ↑ open up ↑
 628  628  }
 629  629  
 630  630  // ------------------------------------------------------------------
 631  631  // ciTypeFlow::StateVector::do_invoke
 632  632  void ciTypeFlow::StateVector::do_invoke(ciBytecodeStream* str,
 633  633                                          bool has_receiver) {
 634  634    bool will_link;
 635  635    ciMethod* method = str->get_method(will_link);
 636  636    if (!will_link) {
 637  637      // We weren't able to find the method.
 638      -    ciKlass* unloaded_holder = method->holder();
 639      -    trap(str, unloaded_holder, str->get_method_holder_index());
      638 +    if (str->cur_bc() == Bytecodes::_invokedynamic) {
      639 +      trap(str, NULL,
      640 +           Deoptimization::make_trap_request
      641 +           (Deoptimization::Reason_uninitialized,
      642 +            Deoptimization::Action_reinterpret));
      643 +    } else {
      644 +      ciKlass* unloaded_holder = method->holder();
      645 +      trap(str, unloaded_holder, str->get_method_holder_index());
      646 +    }
 640  647    } else {
 641  648      ciSignature* signature = method->signature();
 642  649      ciSignatureStream sigstr(signature);
 643  650      int arg_size = signature->size();
 644  651      int stack_base = stack_size() - arg_size;
 645  652      int i = 0;
 646  653      for( ; !sigstr.at_return_type(); sigstr.next()) {
 647  654        ciType* type = sigstr.type();
 648  655        ciType* stack_type = type_at(stack(stack_base + i++));
 649  656        // Do I want to check this type?
↓ open down ↓ 635 lines elided ↑ open up ↑
1285 1292      {
1286 1293        // Check for uncommon trap:
1287 1294        do_checkcast(str);
1288 1295        pop_object();
1289 1296        push_int();
1290 1297        break;
1291 1298      }
1292 1299    case Bytecodes::_invokeinterface: do_invoke(str, true);           break;
1293 1300    case Bytecodes::_invokespecial:   do_invoke(str, true);           break;
1294 1301    case Bytecodes::_invokestatic:    do_invoke(str, false);          break;
1295      -
1296 1302    case Bytecodes::_invokevirtual:   do_invoke(str, true);           break;
     1303 +  case Bytecodes::_invokedynamic:   do_invoke(str, false);          break;
1297 1304  
1298 1305    case Bytecodes::_istore:   store_local_int(str->get_index());     break;
1299 1306    case Bytecodes::_istore_0: store_local_int(0);                    break;
1300 1307    case Bytecodes::_istore_1: store_local_int(1);                    break;
1301 1308    case Bytecodes::_istore_2: store_local_int(2);                    break;
1302 1309    case Bytecodes::_istore_3: store_local_int(3);                    break;
1303 1310  
1304 1311    case Bytecodes::_jsr:
1305 1312    case Bytecodes::_jsr_w: do_jsr(str);                              break;
1306 1313  
↓ open down ↓ 1613 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX