< prev index next >

src/share/vm/opto/parse.hpp

Print this page

        

@@ -341,10 +341,11 @@
   bool          _wrote_stable;       // Did we write a @Stable field?
   bool          _wrote_fields;       // Did we write any field?
   bool          _count_invocations;  // update and test invocation counter
   bool          _method_data_update; // update method data oop
   Node*         _alloc_with_final;   // An allocation node with final field
+  Node*         _alloc_with_stable;  // An allocation node with stable field
 
   // Variables which track Java semantics during bytecode parsing:
 
   Block*            _block;     // block currently getting parsed
   ciBytecodeStream  _iter;      // stream of this method's bytecodes

@@ -396,10 +397,29 @@
   void set_alloc_with_final(Node* n)  {
     assert((_alloc_with_final == NULL) || (_alloc_with_final == n), "different init objects?");
     _alloc_with_final = n;
   }
 
+  Node*    alloc_with_stable() const   {
+    if (_alloc_with_stable == NodeSentinel) {
+      return NULL;
+    }
+    return _alloc_with_stable; 
+  }
+
+  void set_alloc_with_stable(Node* n)  {
+    // uninitialized status, initialized with current input, can be null or valid node.
+    if (_alloc_with_stable == NodeSentinel) {
+      _alloc_with_stable = n;
+    }
+    // _alloc_with_stable is isn't equal with n
+    else if (_alloc_with_stable != n) {
+      _alloc_with_stable = NULL;
+    }
+    // _alloc_with_stable is equal with n, do nothing 
+  }
+
   Block*             block()    const { return _block; }
   ciBytecodeStream&  iter()           { return _iter; }
   Bytecodes::Code    bc()       const { return _iter.cur_bc(); }
 
   void set_block(Block* b)            { _block = b; }
< prev index next >