- Timestamp:
- Jun 25, 2019, 2:49:56 PM (5 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 92f5279
- Parents:
- 9ea38de
- Location:
- src/AST
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Node.cpp
r9ea38de rbcb311b 30 30 #include "Print.hpp" 31 31 32 /// MEMORY DEBUG -- allows breaking on construction/destructionof dynamically chosen object.32 /// MEMORY DEBUG -- allows breaking on ref-count changes of dynamically chosen object. 33 33 /// Process to use in GDB: 34 34 /// break ast::Node::_trap() … … 39 39 void * MEM_TRAP_OBJ = nullptr; 40 40 41 void ast::Node::_trap() { 42 if ( this == MEM_TRAP_OBJ ) std::raise(SIGTRAP); 43 } 44 45 template< typename node_t, enum ast::Node::ref_type ref_t > 46 void ast::ptr_base<node_t, ref_t>::_inc( const node_t * node ) { node->increment(ref_t); } 47 48 template< typename node_t, enum ast::Node::ref_type ref_t > 49 void ast::ptr_base<node_t, ref_t>::_dec( const node_t * node ) { node->decrement(ref_t); } 41 void _trap( const void * node ) { 42 if ( node == MEM_TRAP_OBJ ) std::raise(SIGTRAP); 43 } 44 45 template< typename node_t, enum ast::Node::ref_type ref_t > 46 void ast::ptr_base<node_t, ref_t>::_inc( const node_t * node ) { 47 node->increment(ref_t); 48 _trap( node ); 49 } 50 51 template< typename node_t, enum ast::Node::ref_type ref_t > 52 void ast::ptr_base<node_t, ref_t>::_dec( const node_t * node ) { 53 _trap( node ); 54 node->decrement(ref_t); 55 } 50 56 51 57 template< typename node_t, enum ast::Node::ref_type ref_t > -
src/AST/Node.hpp
r9ea38de rbcb311b 30 30 /// Keeps both strong and weak reference counts. 31 31 class Node { 32 /// call to debug on node creation/deletion33 void _trap();34 32 public: 35 33 // override defaults to ensure assignment doesn't 36 34 // change/share reference counts 37 Node() { _trap(); }38 Node(const Node&) : strong_count(0), weak_count(0) { _trap();}39 Node(Node&&) : strong_count(0), weak_count(0) { _trap();}35 Node() = default; 36 Node(const Node&) : strong_count(0), weak_count(0) {} 37 Node(Node&&) : strong_count(0), weak_count(0) {} 40 38 Node& operator= (const Node&) = delete; 41 39 Node& operator= (Node&&) = delete; 42 virtual ~Node() { _trap();}40 virtual ~Node() {} 43 41 44 42 virtual const Node * accept( Visitor & v ) const = 0;
Note: See TracChangeset
for help on using the changeset viewer.