Changeset dc3fbe5 for src/Parser/ParseNode.h
- Timestamp:
- Feb 27, 2024, 12:28:58 PM (5 months ago)
- Branches:
- master
- Children:
- 924534e
- Parents:
- 4c0b674
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/ParseNode.h
r4c0b674 rdc3fbe5 33 33 34 34 struct DeclarationNode; 35 classInitializerNode;36 classExpressionNode;35 struct InitializerNode; 36 struct ExpressionNode; 37 37 struct StatementNode; 38 38 … … 45 45 extern YYLTYPE yylloc; 46 46 47 class ParseNode { 48 public: 49 ParseNode() {}; 50 virtual ~ParseNode() { delete next; }; 47 struct ParseNode { 48 ParseNode() {} 49 virtual ~ParseNode() {} 51 50 virtual ParseNode * clone() const = 0; 52 51 53 ParseNode * get_next() const { return next; } 54 ParseNode * set_next( ParseNode * newlink ) { next = newlink; return this; } 52 virtual void print( __attribute__((unused)) std::ostream & os, __attribute__((unused)) int indent = 0 ) const {} 55 53 56 ParseNode * get_last() { 57 ParseNode * current; 58 for ( current = this; current->get_next() != nullptr; current = current->get_next() ); 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_next() const { return next; } 67 void set_next( Next * newlink ) { next = newlink; } 68 69 Next * get_last() { 70 Next * current = static_cast<Next *>( this ); 71 while ( current->next != nullptr ) current = current->next; 59 72 return current; 60 73 } 61 ParseNode * set_last( ParseNode* newlast ) {62 if ( newlast != nullptr ) get_last()-> set_next( newlast );63 return this;74 Next * set_last( Next * newlast ) { 75 if ( newlast != nullptr ) get_last()->next = newlast; 76 return static_cast<Next *>( this ); 64 77 } 65 78 66 virtual void print( __attribute__((unused)) std::ostream & os, __attribute__((unused)) int indent = 0 ) const {}67 79 virtual void printList( std::ostream & os, int indent = 0 ) const { 68 80 print( os, indent ); … … 70 82 } 71 83 72 static int indent_by; 73 74 ParseNode * next = nullptr; 75 CodeLocation location = yylloc; 76 }; // ParseNode 84 Next * next = nullptr; 85 }; 77 86 78 87 // Must harmonize with OperName.
Note: See TracChangeset
for help on using the changeset viewer.