Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/ParseNode.h

    r7305915 r8e9cbb2  
    1010// Created On       : Sat May 16 13:28:16 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jun 27 23:28:10 2016
    13 // Update Count     : 242
     12// Last Modified On : Mon Jul  4 15:35:09 2016
     13// Update Count     : 260
    1414//
    1515
     
    2828//#include "SynTree/Declaration.h"
    2929#include "Common/UniqueName.h"
     30#include "SynTree/Label.h"
    3031
    3132class ExpressionNode;
     
    4243        ParseNode();
    4344        ParseNode( const std::string * );
    44         ParseNode( const std::string & );  // for copy constructing subclasses
     45        ParseNode( const std::string & );                                       // for copy constructing subclasses
    4546        virtual ~ParseNode();
    4647
    47         ParseNode *get_link() const;
     48        ParseNode *get_link() const { return next; }
    4849        ParseNode *get_last();
    4950        ParseNode *set_link( ParseNode * );
     
    6162  protected:
    6263        std::string name;
     64        static int indent_by;
    6365        ParseNode *next;
    64         static int indent_by;
    6566};
    6667
     
    125126        enum Type { Integer, Float, Character, String };
    126127
    127         ConstantNode( Type, std::string * );
    128         ConstantNode( const ConstantNode &other ) : type( other.type ), btype( other.btype), value( *new std::string( other.value ) ) {};
    129         ~ConstantNode() { delete &value; }
     128        ConstantNode( ConstantExpr * );
     129        ConstantNode( const ConstantNode &other ) : expr( other.expr->clone() ) {};
     130        ~ConstantNode() { delete expr; }
    130131
    131132        virtual ConstantNode *clone() const { return new ConstantNode( *this ); }
    132         Type get_type( void ) const { return type; }
    133133        virtual void print( std::ostream &, int indent = 0) const;
    134134        virtual void printOneLine( std::ostream &, int indent = 0) const;
    135135
    136         const std::string &get_value() const { return value; }
    137136        ConstantNode *appendstr( const std::string *newValue );
    138137
    139138        Expression *build() const;
    140139  private:
    141         Type type;
    142         BasicType::Kind btype;
    143         std::string &value;
    144 };
     140        ConstantExpr *expr;
     141};
     142
     143ConstantNode *makeConstant( ConstantNode::Type, std::string * );
     144ConstantNode *makeConstantStr( ConstantNode::Type type, std::string *str );
    145145
    146146class VarRefNode : public ExpressionNode {
     
    284284        virtual void printOneLine( std::ostream &, int indent = 0) const;
    285285
    286         const std::list< std::string > &get_labels() const { return labels; };
     286        const std::list< Label > &get_labels() const { return labels; };
    287287        void append_label( std::string *label ) { labels.push_back( *label ); delete label; }
    288288  private:
    289         std::list< std::string > labels;
     289        std::list< Label > labels;
    290290};
    291291
     
    481481        void setCatchRest( bool newVal ) { isCatchRest = newVal; }
    482482
    483         bool get_extension() const { return extension; }
    484         StatementNode *set_extension( bool exten ) { extension = exten; return this; }
    485 
    486483        std::string get_target() const;
    487484
     
    502499        DeclarationNode *decl;
    503500        bool isCatchRest;
    504         bool extension = false;
    505501}; // StatementNode
    506502
     
    532528        ExpressionNode *output, *input;
    533529        ConstantNode *clobber;
    534         std::list<std::string> gotolabels;
     530        std::list< Label > gotolabels;
    535531};
    536532
Note: See TracChangeset for help on using the changeset viewer.