src/share/vm/runtime/frame.cpp

changeset 6442
b5c8a61d7fa0
parent 6440
0f03ff49c720
parent 5222
28e5aed7f3a6
child 6446
583211d4b16b
     1.1 --- a/src/share/vm/runtime/frame.cpp	Thu Jun 20 16:30:44 2013 -0700
     1.2 +++ b/src/share/vm/runtime/frame.cpp	Fri Jun 21 15:56:24 2013 -0700
     1.3 @@ -1008,6 +1008,7 @@
     1.4    OopClosure*     _f;
     1.5    int             _offset;        // the current offset, incremented with each argument
     1.6    bool            _has_receiver;  // true if the callee has a receiver
     1.7 +  bool            _has_appendix;  // true if the call has an appendix
     1.8    frame           _fr;
     1.9    RegisterMap*    _reg_map;
    1.10    int             _arg_size;
    1.11 @@ -1027,19 +1028,20 @@
    1.12    }
    1.13  
    1.14   public:
    1.15 -  CompiledArgumentOopFinder(Symbol* signature, bool has_receiver, OopClosure* f, frame fr,  const RegisterMap* reg_map)
    1.16 +  CompiledArgumentOopFinder(Symbol* signature, bool has_receiver, bool has_appendix, OopClosure* f, frame fr,  const RegisterMap* reg_map)
    1.17      : SignatureInfo(signature) {
    1.18  
    1.19      // initialize CompiledArgumentOopFinder
    1.20      _f         = f;
    1.21      _offset    = 0;
    1.22      _has_receiver = has_receiver;
    1.23 +    _has_appendix = has_appendix;
    1.24      _fr        = fr;
    1.25      _reg_map   = (RegisterMap*)reg_map;
    1.26 -    _arg_size  = ArgumentSizeComputer(signature).size() + (has_receiver ? 1 : 0);
    1.27 +    _arg_size  = ArgumentSizeComputer(signature).size() + (has_receiver ? 1 : 0) + (has_appendix ? 1 : 0);
    1.28  
    1.29      int arg_size;
    1.30 -    _regs = SharedRuntime::find_callee_arguments(signature, has_receiver, &arg_size);
    1.31 +    _regs = SharedRuntime::find_callee_arguments(signature, has_receiver, has_appendix, &arg_size);
    1.32      assert(arg_size == _arg_size, "wrong arg size");
    1.33    }
    1.34  
    1.35 @@ -1049,12 +1051,16 @@
    1.36        _offset++;
    1.37      }
    1.38      iterate_parameters();
    1.39 +    if (_has_appendix) {
    1.40 +      handle_oop_offset();
    1.41 +      _offset++;
    1.42 +    }
    1.43    }
    1.44  };
    1.45  
    1.46 -void frame::oops_compiled_arguments_do(Symbol* signature, bool has_receiver, const RegisterMap* reg_map, OopClosure* f) {
    1.47 +void frame::oops_compiled_arguments_do(Symbol* signature, bool has_receiver, bool has_appendix, const RegisterMap* reg_map, OopClosure* f) {
    1.48    ResourceMark rm;
    1.49 -  CompiledArgumentOopFinder finder(signature, has_receiver, f, *this, reg_map);
    1.50 +  CompiledArgumentOopFinder finder(signature, has_receiver, has_appendix, f, *this, reg_map);
    1.51    finder.oops_do();
    1.52  }
    1.53  

mercurial