< prev index next > src/hotspot/share/c1/c1_ValueStack.hpp
Print this page
private:
IRScope* _scope; // the enclosing scope
ValueStack* _caller_state;
int _bci;
Kind _kind;
+ bool _should_reexecute;
Values _locals; // the locals
Values _stack; // the expression stack
Values* _locks; // the monitor stack (holding the locked values)
bool _force_reexecute; // force the reexecute flag on, used for patching stub
// helper routine
static void apply(const Values& list, ValueVisitor* f);
// for simplified copying
- ValueStack(ValueStack* copy_from, Kind kind, int bci);
+ ValueStack(ValueStack* copy_from, Kind kind, int bci, bool reexecute);
int locals_size_for_copy(Kind kind) const;
int stack_size_for_copy(Kind kind) const;
public:
// creation
ValueStack(IRScope* scope, ValueStack* caller_state);
- ValueStack* copy() { return new ValueStack(this, _kind, _bci); }
- ValueStack* copy(Kind new_kind, int new_bci) { return new ValueStack(this, new_kind, new_bci); }
- ValueStack* copy_for_parsing() { return new ValueStack(this, Parsing, -99); }
+ ValueStack* copy() { return new ValueStack(this, _kind, _bci, _should_reexecute); }
+ ValueStack* copy(Kind new_kind, int new_bci) { return new ValueStack(this, new_kind, new_bci, _should_reexecute); }
+ ValueStack* copy_for_parsing() { return new ValueStack(this, Parsing, -99, false); }
// Used when no exception handler is found
static Kind empty_exception_kind(bool caller = false) {
return Compilation::current()->env()->should_retain_local_variables() ?
(caller ? CallerExceptionState : ExceptionState) : // retain locals
// accessors
IRScope* scope() const { return _scope; }
ValueStack* caller_state() const { return _caller_state; }
int bci() const { return _bci; }
Kind kind() const { return _kind; }
+ bool should_reexecute() const { return _should_reexecute; }
+ void set_should_reexecute(bool reexec) { _should_reexecute = reexec; }
int locals_size() const { return _locals.length(); }
int stack_size() const { return _stack.length(); }
int locks_size() const { return _locks == nullptr ? 0 : _locks->length(); }
bool stack_is_empty() const { return _stack.is_empty(); }
< prev index next >