Files
BlitzNext/compiler/varnode.hpp
T
Michael Fabian 'Xaymar' Dirks c9ff5b8ca4 compiler: Formatting
2019-01-18 17:04:57 +01:00

82 lines
1.7 KiB
C++

#ifndef VARNODE_H
#define VARNODE_H
#include "varnode.hpp"
struct VarNode : public Node {
Type* sem_type;
//get set var
TNode* load(Codegen* g);
virtual TNode* store(Codegen* g, TNode* n);
virtual bool isObjParam();
//addr of var
virtual void semant(Environ* e) = 0;
virtual TNode* translate(Codegen* g) = 0;
};
#include "decl.hpp"
struct DeclVarNode : public VarNode {
Decl* sem_decl;
DeclVarNode(Decl* d = 0) : sem_decl(d)
{
if (d)
sem_type = d->type;
}
void semant(Environ* e);
TNode* translate(Codegen* g);
virtual TNode* store(Codegen* g, TNode* n);
bool isObjParam();
};
struct IdentVarNode : public DeclVarNode {
string ident, tag;
IdentVarNode(const string& i, const string& t) : ident(i), tag(t) {}
void semant(Environ* e);
};
struct ArrayVarNode : public VarNode {
string ident, tag;
ExprSeqNode* exprs;
Decl* sem_decl;
ArrayVarNode(const string& i, const string& t, ExprSeqNode* e) : ident(i), tag(t), exprs(e) {}
~ArrayVarNode()
{
delete exprs;
}
void semant(Environ* e);
TNode* translate(Codegen* g);
};
struct FieldVarNode : public VarNode {
ExprNode* expr;
string ident, tag;
Decl* sem_field;
FieldVarNode(ExprNode* e, const string& i, const string& t) : expr(e), ident(i), tag(t) {}
~FieldVarNode()
{
delete expr;
}
void semant(Environ* e);
TNode* translate(Codegen* g);
};
struct VectorVarNode : public VarNode {
ExprNode* expr;
ExprSeqNode* exprs;
VectorType* vec_type;
VectorVarNode(ExprNode* e, ExprSeqNode* es) : expr(e), exprs(es) {}
~VectorVarNode()
{
delete expr;
delete exprs;
}
void semant(Environ* e);
TNode* translate(Codegen* g);
};
#endif