662 // notions of expression stack and locals
663 vframeArray* cur_array = thread->vframe_array_last();
664 RegisterMap rm(thread, false);
665 rm.set_include_argument_oops(false);
666 bool is_top_frame = true;
667 int callee_size_of_parameters = 0;
668 int callee_max_locals = 0;
669 for (int i = 0; i < cur_array->frames(); i++) {
670 vframeArrayElement* el = cur_array->element(i);
671 frame* iframe = el->iframe();
672 guarantee(iframe->is_interpreted_frame(), "Wrong frame type");
673
674 // Get the oop map for this bci
675 InterpreterOopMap mask;
676 int cur_invoke_parameter_size = 0;
677 bool try_next_mask = false;
678 int next_mask_expression_stack_size = -1;
679 int top_frame_expression_stack_adjustment = 0;
680 methodHandle mh(thread, iframe->interpreter_frame_method());
681 OopMapCache::compute_one_oop_map(mh, iframe->interpreter_frame_bci(), &mask);
682 BytecodeStream str(mh);
683 str.set_start(iframe->interpreter_frame_bci());
684 int max_bci = mh->code_size();
685 // Get to the next bytecode if possible
686 assert(str.bci() < max_bci, "bci in interpreter frame out of bounds");
687 // Check to see if we can grab the number of outgoing arguments
688 // at an uncommon trap for an invoke (where the compiler
689 // generates debug info before the invoke has executed)
690 Bytecodes::Code cur_code = str.next();
691 if (Bytecodes::is_invoke(cur_code)) {
692 Bytecode_invoke invoke(mh, iframe->interpreter_frame_bci());
693 cur_invoke_parameter_size = invoke.size_of_parameters();
694 if (i != 0 && !invoke.is_invokedynamic() && MethodHandles::has_member_arg(invoke.klass(), invoke.name())) {
695 callee_size_of_parameters++;
696 }
697 }
698 if (str.bci() < max_bci) {
699 Bytecodes::Code next_code = str.next();
700 if (next_code >= 0) {
701 // The interpreter oop map generator reports results before
702 // the current bytecode has executed except in the case of
703 // calls. It seems to be hard to tell whether the compiler
|
662 // notions of expression stack and locals
663 vframeArray* cur_array = thread->vframe_array_last();
664 RegisterMap rm(thread, false);
665 rm.set_include_argument_oops(false);
666 bool is_top_frame = true;
667 int callee_size_of_parameters = 0;
668 int callee_max_locals = 0;
669 for (int i = 0; i < cur_array->frames(); i++) {
670 vframeArrayElement* el = cur_array->element(i);
671 frame* iframe = el->iframe();
672 guarantee(iframe->is_interpreted_frame(), "Wrong frame type");
673
674 // Get the oop map for this bci
675 InterpreterOopMap mask;
676 int cur_invoke_parameter_size = 0;
677 bool try_next_mask = false;
678 int next_mask_expression_stack_size = -1;
679 int top_frame_expression_stack_adjustment = 0;
680 methodHandle mh(thread, iframe->interpreter_frame_method());
681 OopMapCache::compute_one_oop_map(mh, iframe->interpreter_frame_bci(), &mask);
682 BytecodeStream str(mh, iframe->interpreter_frame_bci());
683 int max_bci = mh->code_size();
684 // Get to the next bytecode if possible
685 assert(str.bci() < max_bci, "bci in interpreter frame out of bounds");
686 // Check to see if we can grab the number of outgoing arguments
687 // at an uncommon trap for an invoke (where the compiler
688 // generates debug info before the invoke has executed)
689 Bytecodes::Code cur_code = str.next();
690 if (Bytecodes::is_invoke(cur_code)) {
691 Bytecode_invoke invoke(mh, iframe->interpreter_frame_bci());
692 cur_invoke_parameter_size = invoke.size_of_parameters();
693 if (i != 0 && !invoke.is_invokedynamic() && MethodHandles::has_member_arg(invoke.klass(), invoke.name())) {
694 callee_size_of_parameters++;
695 }
696 }
697 if (str.bci() < max_bci) {
698 Bytecodes::Code next_code = str.next();
699 if (next_code >= 0) {
700 // The interpreter oop map generator reports results before
701 // the current bytecode has executed except in the case of
702 // calls. It seems to be hard to tell whether the compiler
|