Changes in src/Parser/ParseNode.h [44adf1b:5bf685f]
- File:
-
- 1 edited
-
src/Parser/ParseNode.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/ParseNode.h
r44adf1b r5bf685f 33 33 34 34 struct DeclarationNode; 35 structInitializerNode;36 structExpressionNode;35 class InitializerNode; 36 class ExpressionNode; 37 37 struct StatementNode; 38 38 … … 45 45 extern YYLTYPE yylloc; 46 46 47 struct ParseNode { 48 ParseNode() {} 49 virtual ~ParseNode() {} 47 class ParseNode { 48 public: 49 ParseNode() {}; 50 virtual ~ParseNode() { delete next; delete name; }; 50 51 virtual ParseNode * clone() const = 0; 51 52 52 virtual void print( __attribute__((unused)) std::ostream & os, __attribute__((unused)) int indent = 0 ) const {} 53 ParseNode * get_next() const { return next; } 54 ParseNode * set_next( ParseNode * newlink ) { next = newlink; return this; } 53 55 54 static int indent_by; 55 56 CodeLocation location = yylloc; 57 }; // ParseNode 58 59 /// Only ever use in the form `struct NAME final : public ParseList<NAME>`! 60 template<typename Next> 61 struct ParseList : public ParseNode { 62 ParseList() {} 63 virtual ~ParseList() { delete next; }; 64 virtual ParseList<Next> * clone() const = 0; 65 66 Next * get_last() { 67 Next * current = static_cast<Next *>( this ); 68 while ( current->next != nullptr ) current = current->next; 56 ParseNode * get_last() { 57 ParseNode * current; 58 for ( current = this; current->get_next() != nullptr; current = current->get_next() ); 69 59 return current; 70 60 } 71 Next * set_last( Next* newlast ) {72 if ( newlast != nullptr ) get_last()-> next = newlast;73 return static_cast<Next *>( this );61 ParseNode * set_last( ParseNode * newlast ) { 62 if ( newlast != nullptr ) get_last()->set_next( newlast ); 63 return this; 74 64 } 75 65 66 virtual void print( __attribute__((unused)) std::ostream & os, __attribute__((unused)) int indent = 0 ) const {} 76 67 virtual void printList( std::ostream & os, int indent = 0 ) const { 77 68 print( os, indent ); … … 79 70 } 80 71 81 Next * next = nullptr; 82 }; 72 static int indent_by; 73 74 ParseNode * next = nullptr; 75 const std::string * name = nullptr; 76 CodeLocation location = yylloc; 77 }; // ParseNode 83 78 84 79 // Must harmonize with OperName.
Note:
See TracChangeset
for help on using the changeset viewer.