src/share/vm/c1/c1_ValueStack.cpp

Print this page
rev 5933 : 8035493: JVMTI PopFrame capability must instruct compilers not to prune locals
Reviewed-by: kvn, sla, coleenp


  35 , _caller_state(caller_state)
  36 , _bci(-99)
  37 , _kind(Parsing)
  38 , _locals(scope->method()->max_locals(), NULL)
  39 , _stack(scope->method()->max_stack())
  40 , _locks()
  41 {
  42   verify();
  43 }
  44 
  45 
  46 ValueStack::ValueStack(ValueStack* copy_from, Kind kind, int bci)
  47   : _scope(copy_from->scope())
  48   , _caller_state(copy_from->caller_state())
  49   , _bci(bci)
  50   , _kind(kind)
  51   , _locals()
  52   , _stack()
  53   , _locks(copy_from->locks_size())
  54 {
  55   assert(kind != EmptyExceptionState || !Compilation::current()->env()->jvmti_can_access_local_variables(), "need locals");
  56   if (kind != EmptyExceptionState) {
  57     // only allocate space if we need to copy the locals-array
  58     _locals = Values(copy_from->locals_size());
  59     _locals.appendAll(&copy_from->_locals);
  60   }
  61 
  62   if (kind != ExceptionState && kind != EmptyExceptionState) {
  63     if (kind == Parsing) {
  64       // stack will be modified, so reserve enough space to avoid resizing
  65       _stack = Values(scope()->method()->max_stack());
  66     } else {
  67       // stack will not be modified, so do not waste space
  68       _stack = Values(copy_from->stack_size());
  69     }
  70     _stack.appendAll(&copy_from->_stack);
  71   }
  72 
  73   _locks.appendAll(&copy_from->_locks);
  74 
  75   verify();




  35 , _caller_state(caller_state)
  36 , _bci(-99)
  37 , _kind(Parsing)
  38 , _locals(scope->method()->max_locals(), NULL)
  39 , _stack(scope->method()->max_stack())
  40 , _locks()
  41 {
  42   verify();
  43 }
  44 
  45 
  46 ValueStack::ValueStack(ValueStack* copy_from, Kind kind, int bci)
  47   : _scope(copy_from->scope())
  48   , _caller_state(copy_from->caller_state())
  49   , _bci(bci)
  50   , _kind(kind)
  51   , _locals()
  52   , _stack()
  53   , _locks(copy_from->locks_size())
  54 {
  55   assert(kind != EmptyExceptionState || !Compilation::current()->env()->should_retain_local_variables(), "need locals");
  56   if (kind != EmptyExceptionState) {
  57     // only allocate space if we need to copy the locals-array
  58     _locals = Values(copy_from->locals_size());
  59     _locals.appendAll(&copy_from->_locals);
  60   }
  61 
  62   if (kind != ExceptionState && kind != EmptyExceptionState) {
  63     if (kind == Parsing) {
  64       // stack will be modified, so reserve enough space to avoid resizing
  65       _stack = Values(scope()->method()->max_stack());
  66     } else {
  67       // stack will not be modified, so do not waste space
  68       _stack = Values(copy_from->stack_size());
  69     }
  70     _stack.appendAll(&copy_from->_stack);
  71   }
  72 
  73   _locks.appendAll(&copy_from->_locks);
  74 
  75   verify();