Changeset ac71a86 for src/Parser/ParseNode.h
- Timestamp:
- Aug 19, 2016, 12:57:05 PM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 04cdd9b, 2037f82
- Parents:
- 8b7ee09
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/ParseNode.h
r8b7ee09 rac71a86 103 103 //############################################################################## 104 104 105 class ExpressionNode : public ParseNode {105 class ExpressionNode final : public ParseNode { 106 106 public: 107 107 ExpressionNode( Expression * expr = nullptr ) : expr( expr ) {} … … 114 114 ExpressionNode *set_extension( bool exten ) { extension = exten; return this; } 115 115 116 virtual void print( std::ostream &os, int indent = 0 ) const {} 117 virtual void printOneLine( std::ostream &os, int indent = 0 ) const {} 118 119 virtual Expression *build() const { return expr; } 116 void print( std::ostream &os, int indent = 0 ) const {} 117 void printOneLine( std::ostream &os, int indent = 0 ) const {} 118 119 template<typename T> 120 bool isExpressionType() const { 121 return nullptr != dynamic_cast<T>(expr.get()); 122 } 123 124 Expression *build() const { return const_cast<ExpressionNode*>(this)->expr.release(); } 120 125 private: 121 126 bool extension = false; 122 Expression *expr;127 std::unique_ptr<Expression> expr; 123 128 }; 124 129 … … 151 156 }; 152 157 153 Expression *build_constantInteger( std::string &str );154 Expression *build_constantFloat( std::string &str );155 Expression *build_constantChar( std::string &str );156 ConstantExpr *build_constantStr( std::string &str );158 Expression *build_constantInteger( const std::string &str ); 159 Expression *build_constantFloat( const std::string &str ); 160 Expression *build_constantChar( const std::string &str ); 161 ConstantExpr *build_constantStr( const std::string &str ); 157 162 158 163 NameExpr *build_varref( const std::string *name, bool labelp = false ); … … 304 309 //############################################################################## 305 310 306 class StatementNode : public ParseNode {311 class StatementNode final : public ParseNode { 307 312 public: 308 313 StatementNode() { stmt = nullptr; } … … 311 316 virtual ~StatementNode() {} 312 317 313 virtual StatementNode *clone() const { assert( false ); return nullptr; }314 virtual Statement *build() const { return stmt; }318 virtual StatementNode *clone() const final { assert( false ); return nullptr; } 319 Statement *build() const { return const_cast<StatementNode*>(this)->stmt.release(); } 315 320 316 321 virtual StatementNode *add_label( const std::string * name ) { 317 322 stmt->get_labels().emplace_back( *name ); 323 delete name; 318 324 return this; 319 325 } … … 324 330 virtual void printList( std::ostream &os, int indent = 0 ) {} 325 331 private: 326 Statement *stmt;332 std::unique_ptr<Statement> stmt; 327 333 }; // StatementNode 328 334
Note: See TracChangeset
for help on using the changeset viewer.