| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #ifndef DECLNODE_H
- #define DECLNODE_H
- struct DeclNode : public Node{
- int pos;
- string file;
- DeclNode():pos(-1){}
- virtual void proto( DeclSeq *d,Environ *e ){}
- virtual void semant( Environ *e ){}
- virtual void translate( Codegen *g ){}
- virtual void transdata( Codegen *g ){}
- };
- struct DeclSeqNode : public Node{
- vector<DeclNode*> decls;
- DeclSeqNode(){}
- ~DeclSeqNode(){ for(;decls.size();decls.pop_back())delete decls.back(); }
- void proto( DeclSeq *d,Environ *e );
- void semant( Environ *e );
- void translate( Codegen *g );
- void transdata( Codegen *g );
- void push_back( DeclNode *d ){ decls.push_back( d ); }
- int size(){ return decls.size(); }
- };
- #include "exprnode.h"
- #include "stmtnode.h"
- //'kind' shouldn't really be in Parser...
- //should probably be LocalDeclNode,GlobalDeclNode,ParamDeclNode
- struct VarDeclNode : public DeclNode{
- string ident,tag;
- int kind;bool constant;
- ExprNode *expr;
- DeclVarNode *sem_var;
- VarDeclNode( const string &i,const string &t,int k,bool c,ExprNode *e ):ident(i),tag(t),kind(k),constant(c),expr(e),sem_var(0){}
- ~VarDeclNode(){ delete expr;delete sem_var; }
- void proto( DeclSeq *d,Environ *e );
- void semant( Environ *e );
- void translate( Codegen *g );
- };
- struct FuncDeclNode : public DeclNode{
- string ident,tag;
- DeclSeqNode *params;
- StmtSeqNode *stmts;
- FuncType *sem_type;
- Environ *sem_env;
- FuncDeclNode( const string &i,const string &t,DeclSeqNode *p,StmtSeqNode *ss ):ident(i),tag(t),params(p),stmts(ss){}
- ~FuncDeclNode(){ delete params;delete stmts; }
- void proto( DeclSeq *d,Environ *e );
- void semant( Environ *e );
- void translate( Codegen *g );
- };
- struct StructDeclNode : public DeclNode{
- string ident;
- DeclSeqNode *fields;
- StructType *sem_type;
- StructDeclNode( const string &i,DeclSeqNode *f ):ident(i),fields(f){}
- ~StructDeclNode(){ delete fields; }
- void proto( DeclSeq *d,Environ *e );
- void semant( Environ *e );
- void translate( Codegen *g );
- };
- struct DataDeclNode : public DeclNode{
- ExprNode *expr;
- string str_label;
- DataDeclNode( ExprNode *e ):expr(e){}
- ~DataDeclNode(){ delete expr; }
- void proto( DeclSeq *d,Environ *e );
- void semant( Environ *e );
- void translate( Codegen *g );
- void transdata( Codegen *g );
- };
- struct VectorDeclNode : public DeclNode{
- string ident,tag;
- ExprSeqNode *exprs;
- int kind;
- VectorType *sem_type;
- VectorDeclNode( const string &i,const string &t,ExprSeqNode *e,int k ):ident(i),tag(t),exprs(e),kind(k){}
- ~VectorDeclNode(){ delete exprs; }
- void proto( DeclSeq *d,Environ *e );
- void translate( Codegen *g );
- };
- #endif
|