< prev index next >

src/hotspot/share/c1/c1_ValueStack.hpp

Print this page
@@ -52,10 +52,11 @@
   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

@@ -72,21 +73,21 @@
  
    // 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

@@ -104,10 +105,12 @@
    // 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 >