Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/ParseNode.h

    r658fafe4 r2f22cc4  
    1010// Created On       : Sat May 16 13:28:16 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Jul 24 02:17:00 2016
    13 // Update Count     : 269
     12// Last Modified On : Wed Aug 10 13:08:46 2016
     13// Update Count     : 436
    1414//
    1515
     
    2626#include "SynTree/Type.h"
    2727#include "SynTree/Expression.h"
     28#include "SynTree/Statement.h"
    2829//#include "SynTree/Declaration.h"
    2930#include "Common/UniqueName.h"
    3031#include "SynTree/Label.h"
    3132
    32 class ExpressionNode;
    33 class CompositeExprNode;
    34 class CommaExprNode;
    3533class StatementNode;
    3634class CompoundStmtNode;
    3735class DeclarationNode;
     36class ExpressionNode;
    3837class InitializerNode;
    3938
     
    5655        void set_name( const std::string &newValue ) { name = newValue; }
    5756
    58         virtual void print( std::ostream &, int indent = 0 ) const;
    59         virtual void printList( std::ostream &, int indent = 0 ) const;
    60 
    61         ParseNode &operator,( ParseNode &);
     57        virtual void print( std::ostream &os, int indent = 0 ) const;
     58        virtual void printList( std::ostream &os, int indent = 0 ) const;
     59
     60        ParseNode &operator,( ParseNode & );
    6261  protected:
    6362        std::string name;
     
    6867ParseNode *mkList( ParseNode & );
    6968
     69//##############################################################################
     70
     71class InitializerNode : public ParseNode {
     72  public:
     73        InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode *des = 0 );
     74        InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 );
     75        ~InitializerNode();
     76
     77        ExpressionNode *get_expression() const { return expr; }
     78
     79        InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; }
     80        ExpressionNode *get_designators() const { return designator; }
     81
     82        InitializerNode *set_maybeConstructed( bool value ) { maybeConstructed = value; return this; }
     83        bool get_maybeConstructed() const { return maybeConstructed; }
     84
     85        InitializerNode *next_init() const { return kids; }
     86
     87        void print( std::ostream &os, int indent = 0 ) const;
     88        void printOneLine( std::ostream & ) const;
     89
     90        virtual Initializer *build() const;
     91  private:
     92        ExpressionNode *expr;
     93        bool aggregate;
     94        ExpressionNode *designator; // may be list
     95        InitializerNode *kids;
     96        bool maybeConstructed;
     97};
     98
     99//##############################################################################
     100
    70101class ExpressionNode : public ParseNode {
    71102  public:
    72         ExpressionNode();
    73         ExpressionNode( const std::string * );
     103        ExpressionNode( Expression * expr = nullptr ) : expr( expr ) {}
     104        ExpressionNode( Expression * expr, const std::string *name ) : ParseNode( name ), expr( expr ) {}
    74105        ExpressionNode( const ExpressionNode &other );
    75         virtual ~ExpressionNode() { delete argName; } // cannot delete argName because it might be referenced elsewhere
    76 
    77         virtual ExpressionNode *clone() const = 0;
    78 
    79         // virtual CommaExprNode *add_to_list( ExpressionNode * );
    80 
    81         ExpressionNode *get_argName() const { return argName; }
    82         ExpressionNode *set_argName( const std::string *aName );
    83         ExpressionNode *set_argName( ExpressionNode *aDesignator );
     106        virtual ~ExpressionNode() {}
     107
     108        virtual ExpressionNode *clone() const { return 0; }
     109
    84110        bool get_extension() const { return extension; }
    85111        ExpressionNode *set_extension( bool exten ) { extension = exten; return this; }
    86112
    87         virtual void print( std::ostream &, int indent = 0) const = 0;
    88         virtual void printOneLine( std::ostream &, int indent = 0) const = 0;
    89 
    90         virtual Expression *build() const = 0;
    91   protected:
    92         void printDesignation ( std::ostream &, int indent = 0) const;
    93   private:
    94         ExpressionNode *argName = 0;
     113        virtual void print( std::ostream &os, int indent = 0 ) const {}
     114        virtual void printOneLine( std::ostream &os, int indent = 0 ) const {}
     115
     116        virtual Expression *build() const { return expr; }
     117  private:
    95118        bool extension = false;
     119        Expression *expr;
    96120};
    97121
     
    109133};
    110134
    111 // NullExprNode is used in tuples as a place-holder where a tuple component is omitted e.g., [ 2, , 3 ]
    112 class NullExprNode : public ExpressionNode {
    113   public:
    114         NullExprNode();
    115 
    116         virtual NullExprNode *clone() const;
    117 
    118         virtual void print( std::ostream &, int indent = 0) const;
    119         virtual void printOneLine( std::ostream &, int indent = 0) const;
    120 
    121         virtual Expression *build() const;
    122 };
    123 
    124 class ConstantNode : public ExpressionNode {
    125   public:
    126         enum Type { Integer, Float, Character, String };
    127 
    128         ConstantNode( ConstantExpr * );
    129         ConstantNode( const ConstantNode &other ) : expr( other.expr->clone() ) {};
    130         ~ConstantNode() { delete expr; }
    131 
    132         virtual ConstantNode *clone() const { return new ConstantNode( *this ); }
    133         virtual void print( std::ostream &, int indent = 0) const;
    134         virtual void printOneLine( std::ostream &, int indent = 0) const;
    135 
    136         ConstantNode *appendstr( const std::string *newValue );
    137 
    138         Expression *build() const;
    139   private:
    140         ConstantExpr *expr;
    141 };
    142 
    143 ConstantNode *makeConstantInteger( std::string & );
    144 ConstantNode *makeConstantFloat( std::string & );
    145 ConstantNode *makeConstantChar( std::string & );
    146 ConstantNode *makeConstantStr( std::string & );
    147 
    148 class VarRefNode : public ExpressionNode {
    149   public:
    150         VarRefNode();
    151         VarRefNode( const std::string *, bool isLabel = false );
    152         VarRefNode( const VarRefNode &other );
    153 
    154         virtual Expression *build() const ;
    155 
    156         virtual VarRefNode *clone() const { return new VarRefNode( *this ); }
    157 
    158         virtual void print( std::ostream &, int indent = 0 ) const;
    159         virtual void printOneLine( std::ostream &, int indent = 0 ) const;
    160   private:
    161         bool isLabel;
    162 };
    163 
    164 class DesignatorNode : public ExpressionNode {
    165   public:
    166         DesignatorNode( ExpressionNode *expr, bool isArrayIndex = false );
    167         DesignatorNode( const DesignatorNode &other );
    168 
    169         virtual Expression *build() const ;
    170         virtual DesignatorNode *clone() const { return new DesignatorNode( *this ); }
    171 
    172         virtual void print( std::ostream &, int indent = 0 ) const;
    173         virtual void printOneLine( std::ostream &, int indent = 0 ) const;
    174   private:
    175         bool isArrayIndex;
    176 };
    177 
    178 class TypeValueNode : public ExpressionNode {
    179   public:
    180         TypeValueNode( DeclarationNode * );
    181         TypeValueNode( const TypeValueNode &other );
    182 
    183         DeclarationNode *get_decl() const { return decl; }
    184 
    185         virtual Expression *build() const ;
    186 
    187         virtual TypeValueNode *clone() const { return new TypeValueNode( *this ); }
    188 
    189         virtual void print( std::ostream &, int indent = 0) const;
    190         virtual void printOneLine( std::ostream &, int indent = 0) const;
    191   private:
    192         DeclarationNode *decl;
    193 };
    194 
    195 class OperatorNode : public ExpressionNode {
    196   public:
    197         enum Type { TupleC, Comma, TupleFieldSel, // n-adic
    198                                 // triadic
    199                                 Cond, NCond,
    200                                 // diadic
    201                                 SizeOf, AlignOf, OffsetOf, Attr, Plus, Minus, Mul, Div, Mod, Or, And,
    202                                 BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
    203                                 Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
    204                                 Index, FieldSel, PFieldSel, Range,
    205                                 // monadic
    206                                 UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress,
    207                                 Ctor, Dtor,
    208         };
    209 
    210         OperatorNode( Type t );
    211         OperatorNode( const OperatorNode &other );
    212         virtual ~OperatorNode();
    213 
    214         virtual OperatorNode *clone() const { return new OperatorNode( *this ); }
    215 
    216         Type get_type() const;
    217         const char *get_typename() const;
    218 
    219         virtual void print( std::ostream &, int indent = 0) const;
    220         virtual void printOneLine( std::ostream &, int indent = 0) const;
    221 
    222         virtual Expression *build() const { return 0; }
    223   private:
    224         Type type;
    225 };
    226 
    227 class CompositeExprNode : public ExpressionNode {
    228   public:
    229         CompositeExprNode();
    230         CompositeExprNode( const std::string * );
    231         CompositeExprNode( ExpressionNode *f, ExpressionNode *args = 0 );
    232         CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2 );
    233         CompositeExprNode( const CompositeExprNode &other );
    234         virtual ~CompositeExprNode();
    235 
    236         virtual CompositeExprNode *clone() const { return new CompositeExprNode( *this ); }
    237         virtual Expression *build() const;
    238 
    239         virtual void print( std::ostream &, int indent = 0) const;
    240         virtual void printOneLine( std::ostream &, int indent = 0) const;
    241 
    242         void set_function( ExpressionNode * );
    243         void set_args( ExpressionNode * );
    244 
    245         void add_arg( ExpressionNode * );
    246 
    247         ExpressionNode *get_function() const;
    248         ExpressionNode *get_args() const;
    249   private:
    250         ExpressionNode *function;
    251         ExpressionNode *arguments;
    252 };
    253 
    254 class AsmExprNode : public ExpressionNode {
    255   public:
    256         AsmExprNode();
    257         AsmExprNode( ExpressionNode *inout, ConstantNode *constraint, ExpressionNode *operand ) : inout( inout ), constraint( constraint ), operand( operand ) {}
    258         virtual ~AsmExprNode() { delete inout; delete constraint; delete operand; }
    259 
    260         virtual AsmExprNode *clone() const { return new AsmExprNode( *this ); }
    261         virtual Expression *build() const;
    262 
    263         virtual void print( std::ostream &, int indent = 0) const;
    264         virtual void printOneLine( std::ostream &, int indent = 0) const;
    265 
    266         ExpressionNode *get_inout() const { return inout; };
    267         void set_inout( ExpressionNode *newValue ) { inout = newValue; }
    268 
    269         ConstantNode *get_constraint() const { return constraint; };
    270         void set_constraint( ConstantNode *newValue ) { constraint = newValue; }
    271 
    272         ExpressionNode *get_operand() const { return operand; };
    273         void set_operand( ExpressionNode *newValue ) { operand = newValue; }
    274   private:
    275         ExpressionNode *inout;
    276         ConstantNode *constraint;
    277         ExpressionNode *operand;
    278 };
     135//##############################################################################
     136
     137Expression *build_constantInteger( std::string &str );
     138Expression *build_constantFloat( std::string &str );
     139Expression *build_constantChar( std::string &str );
     140ConstantExpr *build_constantStr( std::string &str );
     141
     142//##############################################################################
     143
     144NameExpr *build_varref( const std::string *name, bool labelp = false );
     145
     146//##############################################################################
     147
     148Expression *build_typevalue( DeclarationNode *decl );
     149
     150//##############################################################################
     151
     152enum class OperKinds {
     153        // diadic
     154        SizeOf, AlignOf, OffsetOf, Plus, Minus, Mul, Div, Mod, Or, And,
     155        BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
     156        Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
     157        Index, Range,
     158        // monadic
     159        UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress,
     160        Ctor, Dtor,
     161};
     162
     163Expression *build_cast( DeclarationNode * decl_node, ExpressionNode *expr_node );
     164Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member );
     165Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member );
     166Expression *build_addressOf( ExpressionNode *expr_node );
     167Expression *build_sizeOfexpr( ExpressionNode *expr_node );
     168Expression *build_sizeOftype( DeclarationNode *decl_node );
     169Expression *build_alignOfexpr( ExpressionNode *expr_node );
     170Expression *build_alignOftype( DeclarationNode *decl_node );
     171Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member );
     172Expression *build_and( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
     173Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind );
     174Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node );
     175Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node );
     176Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
     177Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
     178Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 );
     179Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
     180Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node );
     181Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node );
     182Expression *build_tuple( ExpressionNode * expr_node = 0 );
     183Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node );
     184Expression *build_range( ExpressionNode * low, ExpressionNode *high );
     185
     186//##############################################################################
     187
     188Expression *build_asm( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand );
     189
     190//##############################################################################
    279191
    280192class LabelNode : public ExpressionNode {
    281193  public:
    282194        virtual Expression *build() const { return NULL; }
    283         virtual LabelNode *clone() const { return new LabelNode( *this ); }
    284 
    285         virtual void print( std::ostream &, int indent = 0) const;
    286         virtual void printOneLine( std::ostream &, int indent = 0) const;
     195        virtual LabelNode *clone() const { assert( false ); return new LabelNode( *this ); }
     196
     197        virtual void print( std::ostream &os, int indent = 0) const;
     198        virtual void printOneLine( std::ostream &os, int indent = 0) const;
    287199
    288200        const std::list< Label > &get_labels() const { return labels; };
    289         void append_label( std::string *label ) { labels.push_back( *label ); delete label; }
     201        void append_label( std::string * label ) { labels.push_back( *label ); delete label; }
    290202  private:
    291203        std::list< Label > labels;
    292204};
    293205
    294 class ForCtlExprNode : public ExpressionNode {
    295   public:
    296         ForCtlExprNode( ParseNode *, ExpressionNode *, ExpressionNode * ) throw ( SemanticError );
    297         ForCtlExprNode( const ForCtlExprNode &other );
    298         ~ForCtlExprNode();
    299 
    300         StatementNode *get_init() const { return init; }
    301         ExpressionNode *get_condition() const { return condition; }
    302         ExpressionNode *get_change() const { return change; }
    303 
    304         virtual ForCtlExprNode *clone() const { return new ForCtlExprNode( *this ); }
    305         virtual Expression *build() const;
    306 
    307         virtual void print( std::ostream &, int indent = 0 ) const;
    308         virtual void printOneLine( std::ostream &, int indent = 0 ) const;
    309   private:
    310         StatementNode *init;
    311         ExpressionNode *condition;
    312         ExpressionNode *change;
    313 };
    314 
    315 class ValofExprNode : public ExpressionNode {
    316   public:
    317         ValofExprNode();
    318         ValofExprNode( StatementNode *s = 0 );
    319         ValofExprNode( const ValofExprNode &other );
    320         ~ValofExprNode();
    321 
    322         virtual ValofExprNode *clone() const { return new ValofExprNode( *this ); }
    323 
    324         StatementNode *get_body() const { return body; }
    325         void print( std::ostream &, int indent = 0 ) const;
    326         void printOneLine( std::ostream &, int indent = 0 ) const;
    327         Expression *build() const;
    328 
    329   private:
    330         StatementNode *body;
    331 };
     206//##############################################################################
     207
     208Expression *build_valexpr( StatementNode *s );
     209
     210//##############################################################################
     211
     212Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids );
     213
     214//##############################################################################
    332215
    333216class TypeData;
     
    404287
    405288        DeclarationNode *clone() const;
    406         void print( std::ostream &, int indent = 0 ) const;
    407         void printList( std::ostream &, int indent = 0 ) const;
     289        void print( std::ostream &os, int indent = 0 ) const;
     290        void printList( std::ostream &os, int indent = 0 ) const;
    408291
    409292        Declaration *build() const;
     
    439322}; // DeclarationNode
    440323
     324Type *buildType( TypeData *type );
     325
     326//##############################################################################
     327
    441328class StatementNode : public ParseNode {
    442329  public:
     
    458345        static StatementNode *newCatchStmt( DeclarationNode *d = 0, StatementNode *s = 0, bool catchRestP = false );
    459346
    460         StatementNode *set_block( StatementNode *b ) {  block = b; return this; }
     347        StatementNode *set_block( StatementNode *b ) { block = b; return this; }
    461348        StatementNode *get_block() const { return block; }
    462349
     
    466353        StatementNode::Type get_type() const { return type; }
    467354
    468         StatementNode *add_label( const std::string * );
    469         const std::list<std::string> &get_labels() const { return labels; }
     355        virtual StatementNode *add_label( const std::string * );
     356        virtual std::list<std::string> get_labels() const { return labels; }
    470357
    471358        void addDeclaration( DeclarationNode *newDecl ) { decl = newDecl; }
     
    478365        StatementNode *append_last_case( StatementNode * );
    479366
    480         void print( std::ostream &, int indent = 0) const;
     367        void print( std::ostream &os, int indent = 0) const;
    481368        virtual StatementNode *clone() const;
    482369        virtual Statement *build() const;
     
    492379}; // StatementNode
    493380
     381class StatementNode2 : public StatementNode {
     382  public:
     383        StatementNode2() {}
     384        StatementNode2( Statement *stmt ) : stmt( stmt ) {}
     385        virtual ~StatementNode2() {}
     386
     387        virtual StatementNode2 *clone() const { assert( false ); return nullptr; }
     388        virtual Statement *build() const { return stmt; }
     389
     390        virtual StatementNode2 *add_label( const std::string * name ) {
     391                stmt->get_labels().emplace_back( *name );
     392                return this;
     393        }
     394        virtual std::list<std::string> get_labels() const { assert( false ); return StatementNode::get_labels(); }
     395
     396        virtual void print( std::ostream &os, int indent = 0 ) {}
     397        virtual void printList( std::ostream &os, int indent = 0 ) {}
     398  private:
     399        Statement *stmt;
     400}; // StatementNode
     401
     402struct ForCtl {
     403        ForCtl( ExpressionNode *expr, ExpressionNode *condition, ExpressionNode *change ) :
     404                init( new StatementNode( StatementNode::Exp, expr ) ), condition( condition ), change( change ) {}
     405        ForCtl( DeclarationNode *decl, ExpressionNode *condition, ExpressionNode *change ) :
     406                init( new StatementNode( decl ) ), condition( condition ), change( change ) {}
     407
     408        StatementNode *init;
     409        ExpressionNode *condition;
     410        ExpressionNode *change;
     411};
     412
     413Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt );
     414Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt );
     415Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind = false );
     416Statement *build_for( ForCtl *forctl, StatementNode *stmt );
     417
     418//##############################################################################
     419
    494420class CompoundStmtNode : public StatementNode {
    495421  public:
     
    501427        void add_statement( StatementNode * );
    502428
    503         void print( std::ostream &, int indent = 0 ) const;
     429        void print( std::ostream &os, int indent = 0 ) const;
    504430        virtual Statement *build() const;
    505431  private:
     
    507433};
    508434
     435//##############################################################################
     436
    509437class AsmStmtNode : public StatementNode {
    510438  public:
    511         AsmStmtNode( Type, bool voltile, ConstantNode *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ConstantNode *clobber = 0, LabelNode *gotolabels = 0 );
     439        AsmStmtNode( Type, bool voltile, ConstantExpr *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ExpressionNode *clobber = 0, LabelNode *gotolabels = 0 );
    512440        ~AsmStmtNode();
    513441
    514         void print( std::ostream &, int indent = 0 ) const;
     442        void print( std::ostream &os, int indent = 0 ) const;
    515443        Statement *build() const;
    516444  private:
    517445        bool voltile;
    518         ConstantNode *instruction;
     446        ConstantExpr *instruction;
    519447        ExpressionNode *output, *input;
    520         ConstantNode *clobber;
     448        ExpressionNode *clobber;
    521449        std::list< Label > gotolabels;
    522450};
    523451
    524 class InitializerNode : public ParseNode {
    525   public:
    526         InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode *des = 0 );
    527         InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 );
    528         ~InitializerNode();
    529 
    530         ExpressionNode *get_expression() const { return expr; }
    531 
    532         InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; }
    533         ExpressionNode *get_designators() const { return designator; }
    534 
    535         InitializerNode *set_maybeConstructed( bool value ) { maybeConstructed = value; return this; }
    536         bool get_maybeConstructed() const { return maybeConstructed; }
    537 
    538         InitializerNode *next_init() const { return kids; }
    539 
    540         void print( std::ostream &, int indent = 0 ) const;
    541         void printOneLine( std::ostream & ) const;
    542 
    543         virtual Initializer *build() const;
    544   private:
    545         ExpressionNode *expr;
    546         bool aggregate;
    547         ExpressionNode *designator; // may be list
    548         InitializerNode *kids;
    549         bool maybeConstructed;
    550 };
    551 
    552 class CompoundLiteralNode : public ExpressionNode {
    553   public:
    554         CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids );
    555         CompoundLiteralNode( const CompoundLiteralNode &type );
    556         ~CompoundLiteralNode();
    557 
    558         virtual CompoundLiteralNode *clone() const;
    559 
    560         DeclarationNode *get_type() const { return type; }
    561         CompoundLiteralNode *set_type( DeclarationNode *t ) { type = t; return this; }
    562 
    563         InitializerNode *get_initializer() const { return kids; }
    564         CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; }
    565 
    566         void print( std::ostream &, int indent = 0 ) const;
    567         void printOneLine( std::ostream &, int indent = 0 ) const;
    568 
    569         virtual Expression *build() const;
    570   private:
    571         DeclarationNode *type;
    572         InitializerNode *kids;
    573 };
     452//##############################################################################
    574453
    575454template< typename SynTreeType, typename NodeType >
    576 void buildList( const NodeType *firstNode, std::list< SynTreeType *> &outputList ) {
     455void buildList( const NodeType *firstNode, std::list< SynTreeType * > &outputList ) {
    577456        SemanticError errors;
    578457        std::back_insert_iterator< std::list< SynTreeType *> > out( outputList );
     
    602481void buildTypeList( const DeclarationNode *firstNode, std::list< Type * > &outputList );
    603482
    604 // in ExpressionNode.cc
    605 ExpressionNode *flattenCommas( ExpressionNode *list );
    606 ExpressionNode *tupleContents( ExpressionNode *tuple );
    607 
    608483#endif // PARSENODE_H
    609484
Note: See TracChangeset for help on using the changeset viewer.