summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTuowen Zhao <ztuowen@gmail.com>2016-09-29 22:59:50 -0600
committerTuowen Zhao <ztuowen@gmail.com>2016-09-29 22:59:50 -0600
commita679e8028eba8a6d9b3ed3d45ba0f397b1083f0c (patch)
tree7030376251beb2ffc1c39b1cd729ea86cb9647c2
parent7b0774752e8f163f4861bb338172fcdcd60cee36 (diff)
downloadchill-a679e8028eba8a6d9b3ed3d45ba0f397b1083f0c.tar.gz
chill-a679e8028eba8a6d9b3ed3d45ba0f397b1083f0c.tar.bz2
chill-a679e8028eba8a6d9b3ed3d45ba0f397b1083f0c.zip
fixed funcdecl
-rw-r--r--include/chillAST/chillASTs.hh36
-rw-r--r--src/chillASTs.cc60
-rw-r--r--src/printer/dump.cpp8
3 files changed, 27 insertions, 77 deletions
diff --git a/include/chillAST/chillASTs.hh b/include/chillAST/chillASTs.hh
index b2cea3a..a30a420 100644
--- a/include/chillAST/chillASTs.hh
+++ b/include/chillAST/chillASTs.hh
@@ -364,7 +364,6 @@ public:
class chillAST_FunctionDecl : public chillAST_Node {
private:
- chillAST_CompoundStmt *body; // always a compound statement?
CHILLAST_FUNCTION_TYPE function_type; // CHILLAST_FUNCTION_CPU or CHILLAST_FUNCTION_GPU
bool externfunc; // function is external
bool builtin; // function is a builtin
@@ -405,12 +404,9 @@ public:
void addDecl(chillAST_VarDecl *vd); // just adds to symbol table?? TODO
- void addChild(chillAST_Node *node); // special because inserts into BODY
- void insertChild(int i, chillAST_Node *node); // special because inserts into BODY
-
- void setBody(chillAST_Node *bod);
+ void setBody(chillAST_Node *bod) { if (bod->isCompoundStmt()) { children[0] = bod; bod->setParent(this); }}
- chillAST_CompoundStmt *getBody() { return (body); }
+ chillAST_CompoundStmt *getBody() { return (chillAST_CompoundStmt*)children[0]; }
void gatherVarDecls(std::vector<chillAST_VarDecl *> &decls);
@@ -435,10 +431,7 @@ public:
chillAST_Node *constantFold();
- void replaceChild(chillAST_Node *old, chillAST_Node *newchild) {
- body->replaceChild(old, newchild);
- }
-}; // end FunctionDecl
+}; // end FunctionDecl
class chillAST_SourceFile : public chillAST_Node {
// TODO included source file
@@ -493,6 +486,7 @@ public:
};
+//! A Macro definition
class chillAST_MacroDefinition : public chillAST_Node {
private:
chillAST_Node *body; // rhs always a compound statement?
@@ -538,14 +532,15 @@ public:
};
class chillAST_ForStmt : public chillAST_Node {
-public:
- virtual CHILLAST_NODE_TYPE getType() { return CHILLAST_NODE_FORSTMT; }
-
- // variables that are special for this type of node
+private:
chillAST_Node *init;
chillAST_Node *cond;
chillAST_Node *incr;
chillAST_Node *body; // always a compoundstmt?
+public:
+ virtual CHILLAST_NODE_TYPE getType() { return CHILLAST_NODE_FORSTMT; }
+
+ // variables that are special for this type of node
IR_CONDITION_TYPE conditionoperator; // from ir_code.hh
bool hasSymbolTable() { return true; };
@@ -561,20 +556,17 @@ public:
void removeSyncComment();
chillAST_Node *getInit() { return init; };
+ void setInit(chillAST_Node *i) { init = i; i->parent = this; }
chillAST_Node *getCond() { return cond; };
+ void setCond(chillAST_Node *c) { cond = c; c->parent = this; }
chillAST_Node *getInc() { return incr; };
+ void setInc(chillAST_Node *i) { incr = i; i->parent = this; }
- chillAST_Node *
- getBody() { //fprintf(stderr, "chillAST_ForStmt::getBody(), returning a chillAST_Node of type %s\n", body->getTypeString());
- return body;
- };
+ chillAST_Node *getBody() { return body; };
+ void setBody(chillAST_Node *b) { body = b; b->parent = this; };
- void setBody(chillAST_Node *b) {
- body = b;
- b->parent = this;
- };
bool isNotLeaf() { return true; };
diff --git a/src/chillASTs.cc b/src/chillASTs.cc
index 31c6758..e026e45 100644
--- a/src/chillASTs.cc
+++ b/src/chillASTs.cc
@@ -441,54 +441,12 @@ chillAST_FunctionDecl::chillAST_FunctionDecl(const char *rt, const char *fname,
forwarddecl = externfunc = builtin = false;
parameters = new chillAST_SymbolTable();
this->setFunctionCPU();
- body = new chillAST_CompoundStmt();
returnType = strdup(rt);
this->setFunctionCPU();
+ children.push_back(new chillAST_CompoundStmt());
uniquePtr = unique; // a quick way to check equivalence. DO NOT ACCESS THROUGH THIS
};
-void chillAST_FunctionDecl::setBody(chillAST_Node *bod) {
- if (bod->isCompoundStmt()) body = (chillAST_CompoundStmt *) bod;
- else {
- CHILL_ERROR("Should always be a compound statements");
- body = new chillAST_CompoundStmt();
- body->addChild(bod);
- }
- bod->setParent(this); // well, ...
-}
-
-void chillAST_FunctionDecl::insertChild(int i, chillAST_Node *node) {
- fprintf(stderr, "chillAST_FunctionDecl::insertChild() ");
- node->print(0, stderr);
- fprintf(stderr, "\n\n");
- body->insertChild(i, node);
-
- if (node->isVarDecl()) {
- chillAST_VarDecl *vd = ((chillAST_VarDecl *) node);
- fprintf(stderr, "functiondecl %s inserting a VarDecl named %s\n", functionName, vd->varname);
- chillAST_SymbolTable *st = getSymbolTable();
- if (!st)
- fprintf(stderr, "symbol table is NULL!\n");
- else
- fprintf(stderr, "%d entries in the symbol table\n", st->size());
- fprintf(stderr, "\n\n");
- }
-}
-
-void chillAST_FunctionDecl::addChild(chillAST_Node *node) {
- CHILL_DEBUG_BEGIN
- node->print(0, stderr);
- fprintf(stderr, "\n\n");
- CHILL_DEBUG_END
- if (node->isVarDecl()) {
- chillAST_VarDecl *vd = ((chillAST_VarDecl *) node);
- CHILL_DEBUG_PRINT("functiondecl %s adding a VarDecl named %s\n", functionName, vd->varname);
- }
-
- body->addChild(node);
- node->setParent(this); // this, or body??
-}
-
void chillAST_FunctionDecl::gatherVarDecls(vector<chillAST_VarDecl *> &decls) {
//fprintf(stderr, "chillAST_FunctionDecl::gatherVarDecls()\n");
//if (0 < children.size()) fprintf(stderr, "functiondecl has %d children\n", children.size());
@@ -497,7 +455,7 @@ void chillAST_FunctionDecl::gatherVarDecls(vector<chillAST_VarDecl *> &decls) {
//fprintf(stderr, "after parms, %d decls\n", decls.size());
for (int i = 0; i < children.size(); i++) children[i]->gatherVarDecls(decls);
//fprintf(stderr, "after children, %d decls\n", decls.size());
- body->gatherVarDecls(decls); // todo, figure out if functiondecl has actual children
+ getBody()->gatherVarDecls(decls); // todo, figure out if functiondecl has actual children
//fprintf(stderr, "after body, %d decls\n", decls.size());
//for (int d=0; d<decls.size(); d++) {
// decls[d]->print(0,stderr); fprintf(stderr, "\n");
@@ -510,7 +468,7 @@ void chillAST_FunctionDecl::gatherScalarVarDecls(vector<chillAST_VarDecl *> &dec
for (int i = 0; i < getParameters()->size(); i++) (*getSymbolTable())[i]->gatherScalarVarDecls(decls);
for (int i = 0; i < children.size(); i++) children[i]->gatherScalarVarDecls(decls);
- body->gatherScalarVarDecls(decls); // todo, figure out if functiondecl has actual children
+ getBody()->gatherScalarVarDecls(decls); // todo, figure out if functiondecl has actual children
}
@@ -519,7 +477,7 @@ void chillAST_FunctionDecl::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decl
for (int i = 0; i < getParameters()->size(); i++) (*getSymbolTable())[i]->gatherArrayVarDecls(decls);
for (int i = 0; i < children.size(); i++) children[i]->gatherArrayVarDecls(decls);
- body->gatherArrayVarDecls(decls); // todo, figure out if functiondecl has actual children
+ getBody()->gatherArrayVarDecls(decls); // todo, figure out if functiondecl has actual children
}
@@ -529,7 +487,7 @@ chillAST_VarDecl *chillAST_FunctionDecl::findArrayDecl(const char *name) {
//if (p) fprintf(stderr, "function %s has parameter named %s\n", functionName, name );
if (p && p->isArray()) return p;
- chillAST_VarDecl *v = body->getVariableDeclaration(name);
+ chillAST_VarDecl *v = getBody()->getVariableDeclaration(name);
//if (v) fprintf(stderr, "function %s has symbol table variable named %s\n", functionName, name );
if (v && v->isArray()) return v;
@@ -548,13 +506,13 @@ chillAST_VarDecl *chillAST_FunctionDecl::findArrayDecl(const char *name) {
void chillAST_FunctionDecl::gatherVarUsage(vector<chillAST_VarDecl *> &decls) {
for (int i = 0; i < children.size(); i++) children[i]->gatherVarUsage(decls);
- body->gatherVarUsage(decls); // todo, figure out if functiondecl has actual children
+ getBody()->gatherVarUsage(decls); // todo, figure out if functiondecl has actual children
}
void chillAST_FunctionDecl::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) {
for (int i = 0; i < children.size(); i++) children[i]->gatherDeclRefExprs(refs);
- body->gatherDeclRefExprs(refs); // todo, figure out if functiondecl has actual children
+ getBody()->gatherDeclRefExprs(refs); // todo, figure out if functiondecl has actual children
}
@@ -626,13 +584,13 @@ void chillAST_FunctionDecl::cleanUpVarDecls() {
bool chillAST_FunctionDecl::findLoopIndexesToReplace(chillAST_SymbolTable *symtab, bool forcesync) {
- if (body) body->findLoopIndexesToReplace(symtab, false);
+ if (getBody()) getBody()->findLoopIndexesToReplace(symtab, false);
return false;
}
chillAST_Node *chillAST_FunctionDecl::constantFold() {
- if (body) body = (chillAST_CompoundStmt *) body->constantFold();
+ if (getBody()) setBody((chillAST_CompoundStmt *) getBody()->constantFold());
return this;
}
diff --git a/src/printer/dump.cpp b/src/printer/dump.cpp
index a88f472..c7abc63 100644
--- a/src/printer/dump.cpp
+++ b/src/printer/dump.cpp
@@ -125,10 +125,10 @@ void Dump::printS(std::string ident, chillAST_FloatingLiteral *n, std::ostream &
}
void Dump::printS(std::string ident, chillAST_ForStmt *n, std::ostream &o) {
- print(ident, n->init, o);
- print(ident, n->cond, o);
- print(ident, n->incr, o);
- print(ident, n->body, o);
+ print(ident, n->getInit(), o);
+ print(ident, n->getCond(), o);
+ print(ident, n->getInc(), o);
+ print(ident, n->getBody(), o);
}
void Dump::printS(std::string ident, chillAST_Free *n, std::ostream &o) {}