Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/ParseNode.h

    rac71a86 r8b7ee09  
    103103//##############################################################################
    104104
    105 class ExpressionNode final : public ParseNode {
     105class ExpressionNode : public ParseNode {
    106106  public:
    107107        ExpressionNode( Expression * expr = nullptr ) : expr( expr ) {}
     
    114114        ExpressionNode *set_extension( bool exten ) { extension = exten; return this; }
    115115
    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(); }
     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; }
    125120  private:
    126121        bool extension = false;
    127         std::unique_ptr<Expression> expr;
     122        Expression *expr;
    128123};
    129124
     
    156151};
    157152
    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 );
     153Expression *build_constantInteger( std::string &str );
     154Expression *build_constantFloat( std::string &str );
     155Expression *build_constantChar( std::string &str );
     156ConstantExpr *build_constantStr( std::string &str );
    162157
    163158NameExpr *build_varref( const std::string *name, bool labelp = false );
     
    309304//##############################################################################
    310305
    311 class StatementNode final : public ParseNode {
     306class StatementNode : public ParseNode {
    312307  public:
    313308        StatementNode() { stmt = nullptr; }
     
    316311        virtual ~StatementNode() {}
    317312
    318         virtual StatementNode *clone() const final { assert( false ); return nullptr; }
    319         Statement *build() const { return const_cast<StatementNode*>(this)->stmt.release(); }
     313        virtual StatementNode *clone() const { assert( false ); return nullptr; }
     314        virtual Statement *build() const { return stmt; }
    320315
    321316        virtual StatementNode *add_label( const std::string * name ) {
    322317                stmt->get_labels().emplace_back( *name );
    323                 delete name;
    324318                return this;
    325319        }
     
    330324        virtual void printList( std::ostream &os, int indent = 0 ) {}
    331325  private:
    332         std::unique_ptr<Statement> stmt;
     326        Statement *stmt;
    333327}; // StatementNode
    334328
Note: See TracChangeset for help on using the changeset viewer.