Changes in / [73973b6:d2de1be9]
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Node.cpp
r73973b6 rd2de1be9 9 9 // Author : Thierry Delisle 10 10 // Created On : Thu May 16 14:16:00 2019 11 // Last Modified By : 12 // Last Modified On : 13 // Update Count : 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Fri Jun 5 10:21:00 2020 13 // Update Count : 1 14 14 // 15 15 … … 43 43 } 44 44 45 [[noreturn]] static inline void strict_fail(const ast::Node * node) { 46 assertf(node, "strict_as had nullptr input."); 47 const ast::ParseNode * parse = dynamic_cast<const ast::ParseNode *>( node ); 48 if ( nullptr == parse ) { 49 assertf(nullptr, "%s (no location)", toString(node).c_str()); 50 } else if ( parse->location.isUnset() ) { 51 assertf(nullptr, "%s (unset location)", toString(node).c_str()); 52 } else { 53 assertf(nullptr, "%s (at %s:%d)", toString(node).c_str(), 54 parse->location.filename.c_str(), parse->location.first_line); 55 } 56 } 57 58 template< typename node_t, enum ast::Node::ref_type ref_t > 59 void ast::ptr_base<node_t, ref_t>::_strict_fail() const { 60 strict_fail(node); 61 } 62 45 63 template< typename node_t, enum ast::Node::ref_type ref_t > 46 64 void ast::ptr_base<node_t, ref_t>::_inc( const node_t * node ) { … … 52 70 void ast::ptr_base<node_t, ref_t>::_dec( const node_t * node, bool do_delete ) { 53 71 _trap( node ); 54 node->decrement( ref_t, do_delete );55 } 56 57 template< typename node_t, enum ast::Node::ref_type ref_t > 58 void ast::ptr_base<node_t, ref_t>::_check() const { 72 node->decrement( ref_t, do_delete ); 73 } 74 75 template< typename node_t, enum ast::Node::ref_type ref_t > 76 void ast::ptr_base<node_t, ref_t>::_check() const { 59 77 // if(node) assert(node->was_ever_strong == false || node->strong_count > 0); 60 78 } -
src/AST/Node.hpp
r73973b6 rd2de1be9 10 10 // Created On : Wed May 8 10:27:04 2019 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Mon Jun 3 13:26:00 201913 // Update Count : 512 // Last Modified On : Fri Jun 5 9:47:00 2020 13 // Update Count : 6 14 14 // 15 15 … … 243 243 const o_node_t * as() const { _check(); return dynamic_cast<const o_node_t *>(node); } 244 244 245 /// wrapper for convenient access to strict_dynamic_cast245 /// Wrapper that makes sure dynamic_cast returns non-null. 246 246 template<typename o_node_t> 247 const o_node_t * strict_as() const { _check(); return strict_dynamic_cast<const o_node_t *>(node); } 247 const o_node_t * strict_as() const { 248 if (const o_node_t * ret = as<o_node_t>()) return ret; 249 _strict_fail(); 250 } 251 252 /// Wrapper that makes sure dynamic_cast does not fail. 253 template<typename o_node_t, decltype(nullptr) null> 254 const o_node_t * strict_as() const { return node ? strict_as<o_node_t>() : nullptr; } 248 255 249 256 /// Returns a mutable version of the pointer in this node. … … 266 273 void _dec( const node_t * other, bool do_delete = true ); 267 274 void _check() const; 275 void _strict_fail() const __attribute__((noreturn)); 268 276 269 277 const node_t * node;
Note: See TracChangeset
for help on using the changeset viewer.