diff options
Diffstat (limited to 'src/chillASTs.cc')
-rw-r--r-- | src/chillASTs.cc | 6539 |
1 files changed, 3217 insertions, 3322 deletions
diff --git a/src/chillASTs.cc b/src/chillASTs.cc index 2564c63..c73eb98 100644 --- a/src/chillASTs.cc +++ b/src/chillASTs.cc @@ -7,322 +7,314 @@ using namespace std; int chillAST_node::chill_scalar_counter = 0; -int chillAST_node::chill_array_counter = 1; - - -const char* Chill_AST_Node_Names[] = { - "Unknown AST node type", - "SourceFile", - "TypedefDecl", - "VarDecl", - // "ParmVarDecl", not used any more - "FunctionDecl", - "RecordDecl", - "MacroDefinition", - "CompoundStmt", - "ForStmt", - "TernaryOperator", - "BinaryOperator", - "UnaryOperator", - "ArraySubscriptExpr", - "MemberExpr", - "DeclRefExpr", - "IntegerLiteral", - "FloatingLiteral", - "ImplicitCastExpr", // not sure we need this - "ReturnStmt", - "CallExpr", - "DeclStmt", - "ParenExpr", - "CStyleCastExpr", - "CStyleAddressOf", - "IfStmt", - "SizeOf", - "Malloc", - "Free", - "NoOp", -// CUDA specific - "CudaMalloc", - "CudaFree", - "CudaMemcpy", - "CudaKernelCall", - "CudaSyncthreads", - "fake1", - "fake2", - "fake3" +int chillAST_node::chill_array_counter = 1; + + +const char *Chill_AST_Node_Names[] = { + "Unknown AST node type", + "SourceFile", + "TypedefDecl", + "VarDecl", + // "ParmVarDecl", not used any more + "FunctionDecl", + "RecordDecl", + "MacroDefinition", + "CompoundStmt", + "ForStmt", + "TernaryOperator", + "BinaryOperator", + "UnaryOperator", + "ArraySubscriptExpr", + "MemberExpr", + "DeclRefExpr", + "IntegerLiteral", + "FloatingLiteral", + "ImplicitCastExpr", // not sure we need this + "ReturnStmt", + "CallExpr", + "DeclStmt", + "ParenExpr", + "CStyleCastExpr", + "CStyleAddressOf", + "IfStmt", + "SizeOf", + "Malloc", + "Free", + "NoOp", +// CUDA specific + "CudaMalloc", + "CudaFree", + "CudaMemcpy", + "CudaKernelCall", + "CudaSyncthreads", + "fake1", + "fake2", + "fake3" }; -char *parseUnderlyingType( char *sometype ) { +char *parseUnderlyingType(char *sometype) { int len = strlen(sometype); - //fprintf(stderr, "parseUnderlyingType( %s )\n", sometype); - char *underlying = strdup(sometype); + //fprintf(stderr, "parseUnderlyingType( %s )\n", sometype); + char *underlying = strdup(sometype); char *p; char *start = underlying; // ugly. we want to turn "float *" into "float" but "struct abc *" into struct abc. - // there are probably many more cases. have an approved list? TODO + // there are probably many more cases. have an approved list? TODO if (strstr(underlying, "struct ")) start += 7; // (length("struct ")) - //fprintf(stderr, "sometype '%s' start '%s'\n", sometype, start); + //fprintf(stderr, "sometype '%s' start '%s'\n", sometype, start); if (p = index(start, ' ')) *p = '\0'; // end at first space leak if (p = index(start, '[')) *p = '\0'; // leak if (p = index(start, '*')) *p = '\0'; // leak - - return underlying; + + return underlying; } -void printSymbolTable( chillAST_SymbolTable *st ) { - //printf("%d entries\n", st->size()); +void printSymbolTable(chillAST_SymbolTable *st) { + //printf("%d entries\n", st->size()); if (!st) return; - for (int i=0; i<st->size(); i++) { printf("%d ", i ); (*st)[i]->printName(); printf("\n"); } - if (st->size() )printf("\n"); - fflush(stdout); + for (int i = 0; i < st->size(); i++) { + printf("%d ", i); + (*st)[i]->printName(); + printf("\n"); + } + if (st->size())printf("\n"); + fflush(stdout); } -void printSymbolTableMoreInfo( chillAST_SymbolTable *st ) { - //printf("%d entries\n", st->size()); +void printSymbolTableMoreInfo(chillAST_SymbolTable *st) { + //printf("%d entries\n", st->size()); if (!st) return; - for (int i=0; i<st->size(); i++) { printf("%d ", i ); (*st)[i]->print(); printf("\n"); } - if (st->size() )printf("\n"); - fflush(stdout); + for (int i = 0; i < st->size(); i++) { + printf("%d ", i); + (*st)[i]->print(); + printf("\n"); + } + if (st->size())printf("\n"); + fflush(stdout); } -bool symbolTableHasVariableNamed( chillAST_SymbolTable *table, const char *name ) { - if (!table) return false; // ?? +bool symbolTableHasVariableNamed(chillAST_SymbolTable *table, const char *name) { + if (!table) return false; // ?? int numvars = table->size(); - for (int i=0; i<numvars; i++) { + for (int i = 0; i < numvars; i++) { chillAST_VarDecl *vd = (*table)[i]; - if (!strcmp(name, vd->varname)) return true; // need to check type? + if (!strcmp(name, vd->varname)) return true; // need to check type? } return false; } - -chillAST_VarDecl *symbolTableFindVariableNamed( chillAST_SymbolTable *table, const char *name ){ // fwd decl TODO too many similar named functions - if (!table) return NULL; // ?? +chillAST_VarDecl *symbolTableFindVariableNamed(chillAST_SymbolTable *table, + const char *name) { // fwd decl TODO too many similar named functions + if (!table) return NULL; // ?? // see if name has a dot or arrow (->) indicating that it is a structure/class - const char *cdot = strstr( name, "." ); + const char *cdot = strstr(name, "."); const char *carrow = strstr(name, "->"); // initial 'c' for const - can't change those char *varname; char *subpart = NULL; - if (cdot || carrow) { - fprintf(stderr, "symbolTableFindVariableNamed(), name '%s' looks like a struct\n", name); + if (cdot || carrow) { + fprintf(stderr, "symbolTableFindVariableNamed(), name '%s' looks like a struct\n", name); // so, look for the first part in the symbol table. // warning, this could be looking for a->b.c.d->e.f->g - varname = strdup( name ); + varname = strdup(name); - char *dot = strstr(varname, "." ); - char *arrow = strstr( varname, "->" ); - if (dot != NULL && arrow != NULL ) { // dot AND arrow, + char *dot = strstr(varname, "."); + char *arrow = strstr(varname, "->"); + if (dot != NULL && arrow != NULL) { // dot AND arrow, fprintf(stderr, "chillast.cc symbolTableFindVariableNamed(), name '%s' has both dot and arrow? TODO\n"); - exit(-1); - } - else if (dot != NULL && !arrow) { // just dot(s). dot points to the first one + exit(-1); + } else if (dot != NULL && !arrow) { // just dot(s). dot points to the first one //fprintf(stderr, "name '%s' has dot(s)\n", varname); *dot = '\0'; // end string at the dot subpart = &(dot[1]); fprintf(stderr, "will now look for a struct/class named %s that has member %s\n", varname, subpart); - } - else if (arrow != NULL && !dot) { // just arrow(s) arrow points to the first one + } else if (arrow != NULL && !dot) { // just arrow(s) arrow points to the first one //fprintf(stderr, "name '%s' has arrow(s)\n", varname); *arrow = '\0'; // end string at the arrow - subpart = &(arrow[2]); + subpart = &(arrow[2]); fprintf(stderr, "will now look for a struct/class named %s that has member %s\n", varname, subpart); + } else { // impossible + fprintf(stderr, + "chillast.cc symbolTableFindVariableNamed(), varname '%s', looks like a struct, but I can't figure it out\n", + varname); + exit(-1); } - else { // impossible - fprintf(stderr, "chillast.cc symbolTableFindVariableNamed(), varname '%s', looks like a struct, but I can't figure it out\n", varname); - exit(-1); - } - } - else { - varname = strdup(name); + } else { + varname = strdup(name); } int numvars = table->size(); - for (int i=0; i<numvars; i++) { + for (int i = 0; i < numvars; i++) { chillAST_VarDecl *vd = (*table)[i]; - if (!strcmp(varname, vd->varname)) { + if (!strcmp(varname, vd->varname)) { fprintf(stderr, "found variable named %s\n", varname); - if (!subpart) return vd; // need to check type? + if (!subpart) return vd; // need to check type? // OK, we have a variable, which looks like a struct/class, and a subpart that is some member names - //fprintf(stderr, "but I don't know how to check if it has member %s\n", subpart); - - char *dot = strstr(subpart, "." ); - char *arrow = strstr(subpart, "->" ); - + //fprintf(stderr, "but I don't know how to check if it has member %s\n", subpart); + + char *dot = strstr(subpart, "."); + char *arrow = strstr(subpart, "->"); + if (!dot && !arrow) { // whew, only one level of struct - //fprintf(stderr, "whew, only one level of struct\n"); - + //fprintf(stderr, "whew, only one level of struct\n"); + // make sure this variable definition is a struct - if (vd->isAStruct()) { - //fprintf(stderr, "%s is a struct of type %s\n", varname, vd->getTypeString()); - if (vd->isVarDecl()) { - chillAST_RecordDecl *rd = vd->getStructDef(); - if (rd) { - //fprintf(stderr, "has a recordDecl\n"); - - chillAST_VarDecl *sp = rd->findSubpart( subpart ); + if (vd->isAStruct()) { + //fprintf(stderr, "%s is a struct of type %s\n", varname, vd->getTypeString()); + if (vd->isVarDecl()) { + chillAST_RecordDecl *rd = vd->getStructDef(); + if (rd) { + //fprintf(stderr, "has a recordDecl\n"); + + chillAST_VarDecl *sp = rd->findSubpart(subpart); if (sp) fprintf(stderr, "found a struct member named %s\n", subpart); else fprintf(stderr, "DIDN'T FIND a struct member named %s\n", subpart); - return sp; // return the subpart?? - } - else { - fprintf(stderr, "no recordDecl\n"); - exit(-1); + return sp; // return the subpart?? + } else { + fprintf(stderr, "no recordDecl\n"); + exit(-1); } - } - else { + } else { fprintf(stderr, "NOT a VarDecl???\n"); // impossible } - } - else { - fprintf(stderr, "false alarm. %s is a variable, but doesn't have subparts\n", varname); - return NULL; // false alarm. a variable of the correct name exists, but is not a struct + } else { + fprintf(stderr, "false alarm. %s is a variable, but doesn't have subparts\n", varname); + return NULL; // false alarm. a variable of the correct name exists, but is not a struct } } - - fprintf(stderr, "chillast.cc symbolTableFindVariableNamed(), name '%s' can't figure out multiple levels of struct yet!\n"); - exit(-1); + fprintf(stderr, + "chillast.cc symbolTableFindVariableNamed(), name '%s' can't figure out multiple levels of struct yet!\n"); + + exit(-1); } } return NULL; } - -char *ulhack( char *brackets ) // remove UL from numbers, MODIFIES the argument! +char *ulhack(char *brackets) // remove UL from numbers, MODIFIES the argument! { - //fprintf(stderr, "ulhack( \"%s\" -> ", brackets); - // another hack. remove "UL" from integers + //fprintf(stderr, "ulhack( \"%s\" -> ", brackets); + // another hack. remove "UL" from integers int len = strlen(brackets); - for (int i=0; i< len-2; i++) { + for (int i = 0; i < len - 2; i++) { if (isdigit(brackets[i])) { - if (brackets[i+1] == 'U' && brackets[i+2] == 'L') { - // remove - for (int j=i+3; j<len; j++) brackets[j-2] = brackets[j]; - len -=2; + if (brackets[i + 1] == 'U' && brackets[i + 2] == 'L') { + // remove + for (int j = i + 3; j < len; j++) brackets[j - 2] = brackets[j]; + len -= 2; brackets[len] = '\0'; } } } - //fprintf(stderr, "\"%s\" )\n", brackets); + //fprintf(stderr, "\"%s\" )\n", brackets); return brackets; } -char *restricthack( char *typeinfo ) // remove __restrict__ , MODIFIES the argument! +char *restricthack(char *typeinfo) // remove __restrict__ , MODIFIES the argument! { //if (!isRestrict( typeinfo )) return typeinfo; // there is a "__restrict__ " somewhere embedded. remove it. - // duplicate work - std::string r( "__restrict__" ); - std::string t( typeinfo ); - size_t index = t.find( r ); + // duplicate work + std::string r("__restrict__"); + std::string t(typeinfo); + size_t index = t.find(r); - if (index == std::string::npos) return typeinfo; + if (index == std::string::npos) return typeinfo; - char *c = &( typeinfo[index] ); + char *c = &(typeinfo[index]); char *after = c + 12; if (*after == ' ') after++; - //fprintf(stderr, "after = '%s'\n", after); + //fprintf(stderr, "after = '%s'\n", after); - while (*after != '\0') *c++ = *after++; + while (*after != '\0') *c++ = *after++; *c = '\0'; - return typeinfo; + return typeinfo; } - - - -char *parseArrayParts( char *sometype ) { +char *parseArrayParts(char *sometype) { int len = strlen(sometype); - char *arraypart = (char *)calloc(1 + strlen(sometype), sizeof(char));// leak + char *arraypart = (char *) calloc(1 + strlen(sometype), sizeof(char));// leak int c = 0; - for (int i=0; i<strlen(sometype); ) { - if ( sometype[i] == '*') arraypart[c++] = '*'; - if ( sometype[i] == '[') { + for (int i = 0; i < strlen(sometype);) { + if (sometype[i] == '*') arraypart[c++] = '*'; + if (sometype[i] == '[') { while (sometype[i] != ']') { arraypart[c++] = sometype[i++]; } - arraypart[c++] = ']'; + arraypart[c++] = ']'; } i += 1; } ulhack(arraypart); - restricthack( arraypart ); + restricthack(arraypart); - //fprintf(stderr, "parseArrayParts( %s ) => %s\n", sometype, arraypart); + //fprintf(stderr, "parseArrayParts( %s ) => %s\n", sometype, arraypart); return arraypart; } +char *splitTypeInfo(char *underlyingtype) { // return the bracketed part of a type + char *ap = ulhack(parseArrayParts(underlyingtype)); // return this - - - - -char *splitTypeInfo( char *underlyingtype ) { // return the bracketed part of a type - char *ap = ulhack(parseArrayParts( underlyingtype )); // return this - - // now need to remove all that from the underlyingtype to get + // now need to remove all that from the underlyingtype to get char *arraypart = strdup(""); // leak if (index(underlyingtype, '[')) { - // looks like an array + // looks like an array free(arraypart); char *start = index(underlyingtype, '['); // wrong. can have int *buh[32] - arraypart = strdup( start ); - if (*(start-1) == ' ') start--; // hack + arraypart = strdup(start); + if (*(start - 1) == ' ') start--; // hack *start = '\0'; - // ugly. very leaky - strcpy( underlyingtype, parseUnderlyingType( underlyingtype )); - - // ulhack( arraypart ); + // ugly. very leaky + strcpy(underlyingtype, parseUnderlyingType(underlyingtype)); + + // ulhack( arraypart ); } - return ap; // leak unless caller frees this + return ap; // leak unless caller frees this } - -bool isRestrict( const char *sometype ) { // does not modify sometype - string r( "__restrict__" ); - string t( sometype ); - return (std::string::npos != t.find( r ) ); +bool isRestrict(const char *sometype) { // does not modify sometype + string r("__restrict__"); + string t(sometype); + return (std::string::npos != t.find(r)); } +bool streq(const char *a, const char *b) { return !strcmp(a, b); }; // slightly less ugly // TODO enums -bool streq( const char *a, const char *b) { return !strcmp(a,b); }; // slightly less ugly // TODO enums +void chillindent(int howfar, FILE *fp) { for (int i = 0; i < howfar; i++) fprintf(fp, " "); } -void chillindent( int howfar, FILE *fp ) { for (int i=0; i<howfar; i++) fprintf(fp, " "); } - - -chillAST_VarDecl * chillAST_node::findVariableNamed( const char *name ) { // generic, recursive - fprintf(stderr, "nodetype %s findVariableNamed( %s )\n", getTypeString(), name ); +chillAST_VarDecl *chillAST_node::findVariableNamed(const char *name) { // generic, recursive + fprintf(stderr, "nodetype %s findVariableNamed( %s )\n", getTypeString(), name); if (hasSymbolTable()) { // look in my symbol table if I have one - fprintf(stderr, "%s has a symbol table\n", getTypeString()); - chillAST_VarDecl *vd = symbolTableFindVariableNamed( getSymbolTable(), name); + fprintf(stderr, "%s has a symbol table\n", getTypeString()); + chillAST_VarDecl *vd = symbolTableFindVariableNamed(getSymbolTable(), name); if (vd) { - fprintf(stderr, "found it\n"); + fprintf(stderr, "found it\n"); return vd; // found locally } - fprintf(stderr, "%s has a symbol table but couldn't find %s\n", getTypeString(), name ); + fprintf(stderr, "%s has a symbol table but couldn't find %s\n", getTypeString(), name); } if (!parent) { fprintf(stderr, "%s has no parent\n", getTypeString()); @@ -331,62 +323,62 @@ chillAST_VarDecl * chillAST_node::findVariableNamed( const char *name ) { // gen // recurse upwards //fprintf(stderr, "recursing from %s up to parent %p\n", getTypeString(), parent); fprintf(stderr, "recursing from %s up to parent\n", getTypeString()); - return parent->findVariableNamed( name ); + return parent->findVariableNamed(name); } -chillAST_RecordDecl * chillAST_node::findRecordDeclNamed( const char *name ) { // recursive - fprintf(stderr, "%s::findRecordDeclNamed( %s )\n", getTypeString(), name); +chillAST_RecordDecl *chillAST_node::findRecordDeclNamed(const char *name) { // recursive + fprintf(stderr, "%s::findRecordDeclNamed( %s )\n", getTypeString(), name); // look in children int numchildren = children.size(); - fprintf(stderr, "%d children\n", numchildren); - for (int i=0; i<numchildren; i++) { + fprintf(stderr, "%d children\n", numchildren); + for (int i = 0; i < numchildren; i++) { fprintf(stderr, "child %d %s\n", i, children[i]->getTypeString()); if (children[i]->isRecordDecl()) { - chillAST_RecordDecl *RD = (chillAST_RecordDecl *)children[i]; - fprintf(stderr, "it is a recordDecl named '%s' vs '%s'\n", RD->getName(), name); - if (!strcmp( RD->getName(), name )) { - fprintf(stderr, "FOUND IT\n"); + chillAST_RecordDecl *RD = (chillAST_RecordDecl *) children[i]; + fprintf(stderr, "it is a recordDecl named '%s' vs '%s'\n", RD->getName(), name); + if (!strcmp(RD->getName(), name)) { + fprintf(stderr, "FOUND IT\n"); return RD; } } - } - + } + if (!parent) return NULL; // no more recursion available // recurse upwards - return parent->findRecordDeclNamed( name ); + return parent->findRecordDeclNamed(name); } -void chillAST_node::printPreprocBEFORE( int indent, FILE *fp ) { - int numstmts = preprocessinginfo.size(); - //if (0 != numstmts) { - // fprintf(fp, "chillAST_node::printPreprocBEFORE() %d statements\n", numstmts); - //} - - - for (int i=0; i< numstmts; i++) { - //fprintf(fp, "stmt %d %d\n", i, preprocessinginfo[i]->position); - if (preprocessinginfo[i]->position == CHILL_PREPROCESSING_LINEBEFORE || +void chillAST_node::printPreprocBEFORE(int indent, FILE *fp) { + int numstmts = preprocessinginfo.size(); + //if (0 != numstmts) { + // fprintf(fp, "chillAST_node::printPreprocBEFORE() %d statements\n", numstmts); + //} + + + for (int i = 0; i < numstmts; i++) { + //fprintf(fp, "stmt %d %d\n", i, preprocessinginfo[i]->position); + if (preprocessinginfo[i]->position == CHILL_PREPROCESSING_LINEBEFORE || preprocessinginfo[i]->position == CHILL_PREPROCESSING_IMMEDIATELYBEFORE) { - //fprintf(stderr, "before %d\n", preprocessinginfo[i]->position); - preprocessinginfo[i]->print(indent, fp); + //fprintf(stderr, "before %d\n", preprocessinginfo[i]->position); + preprocessinginfo[i]->print(indent, fp); } } } -void chillAST_node::printPreprocAFTER( int indent, FILE *fp ) { - for (int i=0; i< preprocessinginfo.size(); i++) { - if (preprocessinginfo[i]->position == CHILL_PREPROCESSING_LINEAFTER || - preprocessinginfo[i]->position == CHILL_PREPROCESSING_TOTHERIGHT) { - //fprintf(stderr, "after %d\n", preprocessinginfo[i]->position); - preprocessinginfo[i]->print(indent, fp); +void chillAST_node::printPreprocAFTER(int indent, FILE *fp) { + for (int i = 0; i < preprocessinginfo.size(); i++) { + if (preprocessinginfo[i]->position == CHILL_PREPROCESSING_LINEAFTER || + preprocessinginfo[i]->position == CHILL_PREPROCESSING_TOTHERIGHT) { + //fprintf(stderr, "after %d\n", preprocessinginfo[i]->position); + preprocessinginfo[i]->print(indent, fp); } } } -chillAST_SourceFile::chillAST_SourceFile::chillAST_SourceFile() { +chillAST_SourceFile::chillAST_SourceFile::chillAST_SourceFile() { SourceFileName = strdup("No Source File"); asttype = CHILLAST_NODETYPE_SOURCEFILE; parent = NULL; // top node @@ -394,30 +386,31 @@ chillAST_SourceFile::chillAST_SourceFile::chillAST_SourceFile() { global_symbol_table = NULL; global_typedef_table = NULL; FileToWrite = NULL; - frontend = strdup("unknown"); + frontend = strdup("unknown"); isFromSourceFile = true; - filename = NULL; + filename = NULL; }; -chillAST_SourceFile::chillAST_SourceFile(const char *filename ) { - SourceFileName = strdup(filename); - asttype = CHILLAST_NODETYPE_SOURCEFILE; +chillAST_SourceFile::chillAST_SourceFile(const char *filename) { + SourceFileName = strdup(filename); + asttype = CHILLAST_NODETYPE_SOURCEFILE; parent = NULL; // top node metacomment = NULL; global_symbol_table = NULL; global_typedef_table = NULL; - FileToWrite = NULL; - frontend = strdup("unknown"); + FileToWrite = NULL; + frontend = strdup("unknown"); isFromSourceFile = true; - filename = NULL; + filename = NULL; }; -void chillAST_SourceFile::print( int indent, FILE *fp ) { - //fprintf(stderr, "chillAST_SourceFile::print()\n"); +void chillAST_SourceFile::print(int indent, FILE *fp) { + //fprintf(stderr, "chillAST_SourceFile::print()\n"); fflush(fp); - fprintf(fp, "\n// this source derived from CHILL AST originally from file '%s' as parsed by frontend compiler %s\n\n", SourceFileName, frontend); - std::vector< char * > includedfiles; - int sofar = 0; + fprintf(fp, "\n// this source derived from CHILL AST originally from file '%s' as parsed by frontend compiler %s\n\n", + SourceFileName, frontend); + std::vector<char *> includedfiles; + int sofar = 0; //fprintf(fp, "#define __rose_lt(x,y) ((x)<(y)?(x):(y))\n#define __rose_gt(x,y) ((x)>(y)?(x):(y))\n"); // help diff figure out what's going on @@ -426,156 +419,150 @@ void chillAST_SourceFile::print( int indent, FILE *fp ) { //fprintf(stderr, "they are\n"); //for (int i=0; i<numchildren; i++) { // fprintf(stderr, "%s ", children[i]->getTypeString()); - // if (children[i]->isFunctionDecl()) { + // if (children[i]->isFunctionDecl()) { // fprintf(stderr, "%s ", ((chillAST_FunctionDecl *)children[i])->functionName); // } - // fprintf(stderr, "\n"); - //} + // fprintf(stderr, "\n"); + //} - for (int i=0; i<numchildren; i++) { + for (int i = 0; i < numchildren; i++) { //fprintf(fp, "\n// child %d of type %s:\n", i, children[i]->getTypeString()); - if (children[i]->isFromSourceFile) { - if (children[i]->isFunctionDecl()) { - fprintf(stderr, "\nchild %d function %s\n",i,((chillAST_FunctionDecl *)children[i])->functionName); - } - //fprintf(stderr, "child %d IS from source file\n", i); + if (children[i]->isFromSourceFile) { + if (children[i]->isFunctionDecl()) { + fprintf(stderr, "\nchild %d function %s\n", i, ((chillAST_FunctionDecl *) children[i])->functionName); + } + //fprintf(stderr, "child %d IS from source file\n", i); //if (children[i]->isMacroDefinition()) fprintf(fp, "\n"); fflush(fp); - children[i]->print( indent, fp ); - if (children[i]->isVarDecl()) fprintf(fp, ";\n"); fflush(fp); // top level vardecl\n"); - } - else { - //fprintf(stderr, "child %d is not from source file\n", i); - // this should all go away - -#ifdef NOPE - if (children[i]->filename // not null and not empty string + children[i]->print(indent, fp); + if (children[i]->isVarDecl()) fprintf(fp, ";\n"); + fflush(fp); // top level vardecl\n"); + } else { + //fprintf(stderr, "child %d is not from source file\n", i); + // this should all go away + +#ifdef NOPE + if (children[i]->filename // not null and not empty string //&& 0 != strlen(children[i]->filename) - ) { // should not be necessary - //fprintf(fp, "// need an include for %s\n", children[i]->filename); + ) { // should not be necessary + //fprintf(fp, "// need an include for %s\n", children[i]->filename); bool rddid = false; - sofar = includedfiles.size(); - + sofar = includedfiles.size(); + for (int j=0; j<sofar; j++) { - //fprintf(stderr, "comparing %s and %s\n", includedfiles[j], children[i]->filename ); + //fprintf(stderr, "comparing %s and %s\n", includedfiles[j], children[i]->filename ); if (!strcmp( includedfiles[j], children[i]->filename) ) { // this file has already been included rddid = true; - //fprintf(stderr, "already did that one\n"); + //fprintf(stderr, "already did that one\n"); } } - + if (false == rddid) { // we need to include it now fprintf(fp, "#include \"%s\"\n", children[i]->filename); includedfiles.push_back(strdup( children[i]->filename )); } - //else { - // fprintf(fp, "already did\n"); - //} + //else { + // fprintf(fp, "already did\n"); + //} } -#endif // NOPE +#endif // NOPE } - } + } - fflush(fp); + fflush(fp); - //fprintf(fp, "\n\n// functions??\n"); - //for (int i=0; i<functions.size(); i++) { - // fprintf(fp, "\n\n"); functions[i]->print(0,fp); fflush(fp); - //} + //fprintf(fp, "\n\n// functions??\n"); + //for (int i=0; i<functions.size(); i++) { + // fprintf(fp, "\n\n"); functions[i]->print(0,fp); fflush(fp); + //} }; - - -void chillAST_SourceFile::printToFile( char *filename ) { +void chillAST_SourceFile::printToFile(char *filename) { char fn[1024]; - if (NULL == filename) { // build up a filename using original name and frontend if known - if (FileToWrite) { - strcpy( fn, FileToWrite ); - } - else { + if (NULL == filename) { // build up a filename using original name and frontend if known + if (FileToWrite) { + strcpy(fn, FileToWrite); + } else { // input name with name of frontend compiler prepended if (frontend) sprintf(fn, "%s_%s\0", frontend, SourceFileName); else sprintf(fn, "UNKNOWNFRONTEND_%s\0", SourceFileName); // should never happen } - } - else strcpy( fn, filename ); + } else strcpy(fn, filename); FILE *fp = fopen(fn, "w"); - if (!fp) { + if (!fp) { fprintf(stderr, "can't open file '%s' for writing\n", fn); exit(-1); } - + //fprintf(fp, "\n\n"); - //dump(0, fp); + //dump(0, fp); fprintf(fp, "\n\n"); print(0, fp); - -} +} -void chillAST_SourceFile::dump( int indent, FILE *fp ) { - fflush(fp); - fprintf(fp, "\n//CHILL AST originally from file '%s'\n", SourceFileName); +void chillAST_SourceFile::dump(int indent, FILE *fp) { + fflush(fp); + fprintf(fp, "\n//CHILL AST originally from file '%s'\n", SourceFileName); int numchildren = children.size(); - for (int i=0; i<numchildren; i++) { - children[i]->dump( indent, fp ); + for (int i = 0; i < numchildren; i++) { + children[i]->dump(indent, fp); } - fflush(fp); + fflush(fp); }; - -chillAST_MacroDefinition * chillAST_SourceFile::findMacro( const char *name ) { +chillAST_MacroDefinition *chillAST_SourceFile::findMacro(const char *name) { //fprintf(stderr, "chillAST_SourceFile::findMacro( %s )\n", name ); - + int numMacros = macrodefinitions.size(); - for (int i=0; i<numMacros; i++) { - if (!strcmp( macrodefinitions[i]->macroName, name )) return macrodefinitions[i]; + for (int i = 0; i < numMacros; i++) { + if (!strcmp(macrodefinitions[i]->macroName, name)) return macrodefinitions[i]; } return NULL; // not found } -chillAST_FunctionDecl * chillAST_SourceFile::findFunction( const char *name ) { +chillAST_FunctionDecl *chillAST_SourceFile::findFunction(const char *name) { //fprintf(stderr, "chillAST_SourceFile::findMacro( %s )\n", name ); - + int numFuncs = functions.size(); - for (int i=0; i<numFuncs; i++) { - if ( !strcmp( functions[i]->functionName, name )) return functions[i]; + for (int i = 0; i < numFuncs; i++) { + if (!strcmp(functions[i]->functionName, name)) return functions[i]; } return NULL; } -chillAST_node *chillAST_SourceFile::findCall( const char *name ) { - chillAST_MacroDefinition *macro = findMacro( name ); - if (macro) return (chillAST_node *)macro; - chillAST_FunctionDecl *func =findFunction( name ); +chillAST_node *chillAST_SourceFile::findCall(const char *name) { + chillAST_MacroDefinition *macro = findMacro(name); + if (macro) return (chillAST_node *) macro; + chillAST_FunctionDecl *func = findFunction(name); return func; } -chillAST_VarDecl * chillAST_SourceFile::findVariableNamed( const char *name ) { - fprintf(stderr, "SOURCEFILE SPECIAL %s findVariableNamed( %s )\n", getTypeString(), name ); +chillAST_VarDecl *chillAST_SourceFile::findVariableNamed(const char *name) { + fprintf(stderr, "SOURCEFILE SPECIAL %s findVariableNamed( %s )\n", getTypeString(), name); if (hasSymbolTable()) { // look in my symbol table if I have one - fprintf(stderr, "%s has a symbol table\n", getTypeString()); - chillAST_VarDecl *vd = symbolTableFindVariableNamed( getSymbolTable(), name); + fprintf(stderr, "%s has a symbol table\n", getTypeString()); + chillAST_VarDecl *vd = symbolTableFindVariableNamed(getSymbolTable(), name); if (vd) { - fprintf(stderr, "found it\n"); + fprintf(stderr, "found it\n"); return vd; // found locally } - fprintf(stderr, "%s has a symbol table but couldn't find %s\n", getTypeString(), name ); + fprintf(stderr, "%s has a symbol table but couldn't find %s\n", getTypeString(), name); } fprintf(stderr, "looking for %s in SourceFile global_symbol_table\n", name); - chillAST_VarDecl *vd = symbolTableFindVariableNamed( global_symbol_table, name ); + chillAST_VarDecl *vd = symbolTableFindVariableNamed(global_symbol_table, name); if (vd) { - fprintf(stderr, "found it\n"); + fprintf(stderr, "found it\n"); return vd; // found locally } @@ -586,299 +573,296 @@ chillAST_VarDecl * chillAST_SourceFile::findVariableNamed( const char *name ) { // recurse upwards //fprintf(stderr, "recursing from %s up to parent %p\n", getTypeString(), parent); fprintf(stderr, "recursing from %s up to parent\n", getTypeString()); - return parent->findVariableNamed( name ); + return parent->findVariableNamed(name); } - -chillAST_TypedefDecl::chillAST_TypedefDecl() { - underlyingtype = newtype = arraypart = NULL; - asttype = CHILLAST_NODETYPE_TYPEDEFDECL; +chillAST_TypedefDecl::chillAST_TypedefDecl() { + underlyingtype = newtype = arraypart = NULL; + asttype = CHILLAST_NODETYPE_TYPEDEFDECL; parent = NULL; metacomment = NULL; isStruct = isUnion = false; - structname = NULL; - rd = NULL; - isFromSourceFile = true; // default - filename = NULL; + structname = NULL; + rd = NULL; + isFromSourceFile = true; // default + filename = NULL; }; chillAST_TypedefDecl::chillAST_TypedefDecl(char *t, const char *nt, chillAST_node *par) { - //fprintf(stderr, "chillAST_TypedefDecl::chillAST_TypedefDecl( underlying type %s, newtype %s )\n", t, nt); - underlyingtype = strdup(t); + //fprintf(stderr, "chillAST_TypedefDecl::chillAST_TypedefDecl( underlying type %s, newtype %s )\n", t, nt); + underlyingtype = strdup(t); newtype = strdup(nt); - arraypart = NULL; + arraypart = NULL; asttype = CHILLAST_NODETYPE_TYPEDEFDECL; - parent = NULL; + parent = NULL; metacomment = NULL; isStruct = isUnion = false; - structname = NULL; - rd = NULL; - isFromSourceFile = true; // default - filename = NULL; + structname = NULL; + rd = NULL; + isFromSourceFile = true; // default + filename = NULL; }; chillAST_TypedefDecl::chillAST_TypedefDecl(char *t, const char *a, char *p, chillAST_node *par) { - underlyingtype = strdup(t); - //fprintf(stderr, "chillAST_TypedefDecl::chillAST_TypedefDecl( underlying type %s )\n", underlyingtype); + underlyingtype = strdup(t); + //fprintf(stderr, "chillAST_TypedefDecl::chillAST_TypedefDecl( underlying type %s )\n", underlyingtype); newtype = strdup(a); // the new named type ?? - arraypart = strdup(p); // array (p)art? - // splitarraypart(); // TODO + arraypart = strdup(p); // array (p)art? + // splitarraypart(); // TODO - asttype = CHILLAST_NODETYPE_TYPEDEFDECL; + asttype = CHILLAST_NODETYPE_TYPEDEFDECL; parent = par; metacomment = NULL; isStruct = isUnion = false; - structname = NULL; - rd = NULL; - isFromSourceFile = true; // default - filename = NULL; + structname = NULL; + rd = NULL; + isFromSourceFile = true; // default + filename = NULL; }; +void chillAST_TypedefDecl::print(int indent, FILE *fp) { + //fprintf(fp, "typedefdecl->print()\n"); + printPreprocBEFORE(indent, fp); -void chillAST_TypedefDecl::print( int indent, FILE *fp ) { - //fprintf(fp, "typedefdecl->print()\n"); - - printPreprocBEFORE(indent, fp); - - if (isStruct) { - fprintf(fp, "\n/* A typedef STRUCT */\n"); chillindent(indent, fp); + if (isStruct) { + fprintf(fp, "\n/* A typedef STRUCT */\n"); + chillindent(indent, fp); } chillindent(indent, fp); - fprintf(fp, "typedef "); fflush(fp); - - if (rd) { - rd->print(indent, fp); // needs to not print the ending semicolon ?? - } - - else if (isStruct) { - fprintf(stderr, "/* no rd */\n"); - + fprintf(fp, "typedef "); + fflush(fp); + + if (rd) { + rd->print(indent, fp); // needs to not print the ending semicolon ?? + } else if (isStruct) { + fprintf(stderr, "/* no rd */\n"); + //fprintf(fp, "struct %s\n", structname); chillindent(indent, fp); fprintf(fp, "{\n"); - for (int i=0; i<subparts.size(); i++) { - //fprintf(fp, "a %s\n", subparts[i]->getTypeString()); - subparts[i]->print(indent+1, fp); + for (int i = 0; i < subparts.size(); i++) { + //fprintf(fp, "a %s\n", subparts[i]->getTypeString()); + subparts[i]->print(indent + 1, fp); fprintf(fp, ";\n"); } fprintf(fp, "};\n"); + } else { + fprintf(fp, "/* NOT A STRUCT */ typedef %s %s%s;\n", underlyingtype, newtype, arraypart); + dump(); + printf("\n\n"); + fflush(stdout); } - else { - fprintf(fp, "/* NOT A STRUCT */ typedef %s %s%s;\n", underlyingtype, newtype, arraypart ); - dump(); printf("\n\n"); fflush(stdout); - } - - // then the newname - fprintf(fp, "%s;\n", newtype); - fflush(fp); - printPreprocAFTER(indent, fp); + + // then the newname + fprintf(fp, "%s;\n", newtype); + fflush(fp); + printPreprocAFTER(indent, fp); return; } -chillAST_VarDecl *chillAST_TypedefDecl::findSubpart( const char *name ) { +chillAST_VarDecl *chillAST_TypedefDecl::findSubpart(const char *name) { //fprintf(stderr, "chillAST_TypedefDecl::findSubpart( %s )\n", name); - //fprintf(stderr, "typedef %s %s\n", structname, newtype); + //fprintf(stderr, "typedef %s %s\n", structname, newtype); if (rd) { // we have a record decl look there - chillAST_VarDecl *sub = rd->findSubpart( name ); - //fprintf(stderr, "rd found subpart %p\n", sub); - return sub; + chillAST_VarDecl *sub = rd->findSubpart(name); + //fprintf(stderr, "rd found subpart %p\n", sub); + return sub; } - // can this ever happen now ??? + // can this ever happen now ??? int nsub = subparts.size(); - //fprintf(stderr, "%d subparts\n", nsub); - for (int i=0; i<nsub; i++) { - if ( !strcmp( name, subparts[i]->varname )) return subparts[i]; + //fprintf(stderr, "%d subparts\n", nsub); + for (int i = 0; i < nsub; i++) { + if (!strcmp(name, subparts[i]->varname)) return subparts[i]; } - //fprintf(stderr, "subpart not found\n"); + //fprintf(stderr, "subpart not found\n"); + - - return NULL; + return NULL; } -chillAST_RecordDecl * chillAST_TypedefDecl::getStructDef() { +chillAST_RecordDecl *chillAST_TypedefDecl::getStructDef() { if (rd) return rd; - return NULL; + return NULL; } - -chillAST_RecordDecl::chillAST_RecordDecl() { +chillAST_RecordDecl::chillAST_RecordDecl() { asttype = CHILLAST_NODETYPE_RECORDDECL; - name = strdup("unknown"); // ?? - originalname = NULL; // ?? + name = strdup("unknown"); // ?? + originalname = NULL; // ?? isStruct = isUnion = false; - parent = NULL; - isFromSourceFile = true; // default - filename = NULL; + parent = NULL; + isFromSourceFile = true; // default + filename = NULL; } -chillAST_RecordDecl::chillAST_RecordDecl( const char *nam, chillAST_node *p ) { +chillAST_RecordDecl::chillAST_RecordDecl(const char *nam, chillAST_node *p) { //fprintf(stderr, "chillAST_RecordDecl::chillAST_RecordDecl()\n"); asttype = CHILLAST_NODETYPE_RECORDDECL; - parent = p; + parent = p; if (nam) name = strdup(nam); - else name = strdup("unknown"); // ?? + else name = strdup("unknown"); // ?? originalname = NULL; // ?? // make them do it manually? isStruct = isUnion = false; - isFromSourceFile = true; // default - filename = NULL; + isFromSourceFile = true; // default + filename = NULL; } -chillAST_RecordDecl::chillAST_RecordDecl( const char *nam, const char *orig, chillAST_node *p ) { - fprintf(stderr, "chillAST_RecordDecl::chillAST_RecordDecl( %s, ( AKA %s ) )\n", nam, orig); +chillAST_RecordDecl::chillAST_RecordDecl(const char *nam, const char *orig, chillAST_node *p) { + fprintf(stderr, "chillAST_RecordDecl::chillAST_RecordDecl( %s, ( AKA %s ) )\n", nam, orig); asttype = CHILLAST_NODETYPE_RECORDDECL; - parent = p; - if (p) p->addChild( this ); - + parent = p; + if (p) p->addChild(this); + if (nam) name = strdup(nam); - else name = strdup("unknown"); // ?? - - originalname = NULL; + else name = strdup("unknown"); // ?? + + originalname = NULL; if (orig) originalname = strdup(orig); - + isStruct = isUnion = false; - isFromSourceFile = true; // default - filename = NULL; + isFromSourceFile = true; // default + filename = NULL; } - -chillAST_VarDecl * chillAST_RecordDecl::findSubpart( const char *nam ){ +chillAST_VarDecl *chillAST_RecordDecl::findSubpart(const char *nam) { //fprintf(stderr, "chillAST_RecordDecl::findSubpart( %s )\n", nam); int nsub = subparts.size(); //fprintf(stderr, "%d subparts\n", nsub); - for (int i=0; i<nsub; i++) { + for (int i = 0; i < nsub; i++) { //fprintf(stderr, "comparing to '%s' to '%s'\n", nam, subparts[i]->varname); - if ( !strcmp( nam, subparts[i]->varname )) return subparts[i]; + if (!strcmp(nam, subparts[i]->varname)) return subparts[i]; } - fprintf(stderr, "chillAST_RecordDecl::findSubpart() couldn't find member NAMED %s in ", nam); print(); printf("\n\n"); fflush(stdout); + fprintf(stderr, "chillAST_RecordDecl::findSubpart() couldn't find member NAMED %s in ", nam); + print(); + printf("\n\n"); + fflush(stdout); - return NULL; + return NULL; } -chillAST_VarDecl * chillAST_RecordDecl::findSubpartByType( const char *typ ){ +chillAST_VarDecl *chillAST_RecordDecl::findSubpartByType(const char *typ) { //fprintf(stderr, "chillAST_RecordDecl::findSubpart( %s )\n", nam); int nsub = subparts.size(); //fprintf(stderr, "%d subparts\n", nsub); - for (int i=0; i<nsub; i++) { + for (int i = 0; i < nsub; i++) { //fprintf(stderr, "comparing '%s' to '%s'\n", typ, subparts[i]->vartype); - if ( !strcmp( typ, subparts[i]->vartype )) return subparts[i]; + if (!strcmp(typ, subparts[i]->vartype)) return subparts[i]; } - //fprintf(stderr, "chillAST_RecordDecl::findSubpart() couldn't find member of TYPE %s in ", typ); print(); printf("\n\n"); fflush(stdout); + //fprintf(stderr, "chillAST_RecordDecl::findSubpart() couldn't find member of TYPE %s in ", typ); print(); printf("\n\n"); fflush(stdout); - return NULL; + return NULL; } -void chillAST_RecordDecl::print( int indent, FILE *fp ) { +void chillAST_RecordDecl::print(int indent, FILE *fp) { //fprintf(fp, "chillAST_RecordDecl::print()\n"); - if (isUnnamed) return; - - printPreprocBEFORE(indent, fp); + if (isUnnamed) return; + + printPreprocBEFORE(indent, fp); - chillindent(indent, fp); - if (isStruct) { + chillindent(indent, fp); + if (isStruct) { //fprintf(fp, "\n/* A Record Decl STRUCT */\n"); chillindent(indent, fp); fprintf(fp, "struct "); - if ( strncmp( "unnamed", name, 7) ) fprintf(fp, "%s\n", name); - + if (strncmp("unnamed", name, 7)) fprintf(fp, "%s\n", name); + chillindent(indent, fp); fprintf(fp, "{\n"); - for (int i=0; i<subparts.size(); i++) { - //fprintf(fp, "a %s\n", subparts[i]->getTypeString()); - subparts[i]->print(indent+1, fp); + for (int i = 0; i < subparts.size(); i++) { + //fprintf(fp, "a %s\n", subparts[i]->getTypeString()); + subparts[i]->print(indent + 1, fp); fprintf(fp, ";\n"); } fprintf(fp, "} "); - fprintf(fp, "\n"); // TODO need semicolon when defining struct. can't have it when part of a typedef. One of the following lines is correct in each case. + fprintf(fp, + "\n"); // TODO need semicolon when defining struct. can't have it when part of a typedef. One of the following lines is correct in each case. //fprintf(fp, ";\n"); - } - else { + } else { fprintf(fp, "/* UNKNOWN RECORDDECL print() */ "); exit(-1); } - printPreprocAFTER(indent, fp); - fflush(fp); + printPreprocAFTER(indent, fp); + fflush(fp); } -chillAST_SymbolTable * chillAST_RecordDecl::addVariableToSymbolTable( chillAST_VarDecl *vd ){ +chillAST_SymbolTable *chillAST_RecordDecl::addVariableToSymbolTable(chillAST_VarDecl *vd) { // for now, just bail. or do we want the struct to have an actual symbol table? - //fprintf(stderr, "chillAST_RecordDecl::addVariableToSymbolTable() ignoring struct member %s vardecl\n", vd->varname); - return NULL; // damn, I hope nothing uses this! + //fprintf(stderr, "chillAST_RecordDecl::addVariableToSymbolTable() ignoring struct member %s vardecl\n", vd->varname); + return NULL; // damn, I hope nothing uses this! } -void chillAST_RecordDecl::printStructure( int indent, FILE *fp ) { - //fprintf(stderr, "chillAST_RecordDecl::printStructure()\n"); - chillindent(indent, fp); - if (isStruct) { +void chillAST_RecordDecl::printStructure(int indent, FILE *fp) { + //fprintf(stderr, "chillAST_RecordDecl::printStructure()\n"); + chillindent(indent, fp); + if (isStruct) { fprintf(fp, "struct { ", name); - for (int i=0; i<subparts.size(); i++) { - subparts[i]->print( 0, fp); // ?? TODO indent level + for (int i = 0; i < subparts.size(); i++) { + subparts[i]->print(0, fp); // ?? TODO indent level fprintf(fp, "; "); } fprintf(fp, "} "); - } - else { + } else { fprintf(fp, "/* UNKNOWN RECORDDECL printStructure() */ "); exit(-1); } - fflush(fp); + fflush(fp); } +void chillAST_RecordDecl::dump(int indent, FILE *fp) { + chillindent(indent, fp); -void chillAST_RecordDecl::dump( int indent, FILE *fp ) { - chillindent(indent, fp); - } -chillAST_FunctionDecl::chillAST_FunctionDecl() { - functionName = strdup("YouScrewedUp"); - asttype = CHILLAST_NODETYPE_FUNCTIONDECL; - forwarddecl = externfunc = builtin = false; +chillAST_FunctionDecl::chillAST_FunctionDecl() { + functionName = strdup("YouScrewedUp"); + asttype = CHILLAST_NODETYPE_FUNCTIONDECL; + forwarddecl = externfunc = builtin = false; uniquePtr = (void *) NULL; - this->setFunctionCPU(); + this->setFunctionCPU(); parent = NULL; metacomment = NULL; //symbol_table = NULL; // eventually, pointing to body's symbol table typedef_table = NULL; body = new chillAST_CompoundStmt(); - isFromSourceFile = true; // default - filename = NULL; + isFromSourceFile = true; // default + filename = NULL; }; -chillAST_FunctionDecl::chillAST_FunctionDecl(const char *rt, const char *fname, chillAST_node *par) { +chillAST_FunctionDecl::chillAST_FunctionDecl(const char *rt, const char *fname, chillAST_node *par) { returnType = strdup(rt); functionName = strdup(fname); - this->setFunctionCPU(); - //fprintf(stderr, "functionName %s\n", functionName); - forwarddecl = externfunc = builtin = false; + this->setFunctionCPU(); + //fprintf(stderr, "functionName %s\n", functionName); + forwarddecl = externfunc = builtin = false; - asttype = CHILLAST_NODETYPE_FUNCTIONDECL; + asttype = CHILLAST_NODETYPE_FUNCTIONDECL; parent = par; metacomment = NULL; - if (par) par->getSourceFile()->addFunc( this ); + if (par) par->getSourceFile()->addFunc(this); // symbol_table = NULL; //use body's instead typedef_table = NULL; body = new chillAST_CompoundStmt(); - isFromSourceFile = true; // default - filename = NULL; + isFromSourceFile = true; // default + filename = NULL; }; @@ -886,161 +870,161 @@ chillAST_FunctionDecl::chillAST_FunctionDecl(const char *rt, const char *fname, CHILL_DEBUG_PRINT("chillAST_FunctionDecl::chillAST_FunctionDecl with unique %p\n", unique); returnType = strdup(rt); functionName = strdup(fname); - this->setFunctionCPU(); - //fprintf(stderr, "functionName %s\n", functionName); - forwarddecl = externfunc = builtin = false; + this->setFunctionCPU(); + //fprintf(stderr, "functionName %s\n", functionName); + forwarddecl = externfunc = builtin = false; body = new chillAST_CompoundStmt(); - asttype = CHILLAST_NODETYPE_FUNCTIONDECL; - uniquePtr = unique; // a quick way to check equivalence. DO NOT ACCESS THROUGH THIS + asttype = CHILLAST_NODETYPE_FUNCTIONDECL; + uniquePtr = unique; // a quick way to check equivalence. DO NOT ACCESS THROUGH THIS parent = par; metacomment = NULL; - if (par) par->getSourceFile()->addFunc( this ); - //symbol_table = NULL; // use body's + if (par) par->getSourceFile()->addFunc(this); + //symbol_table = NULL; // use body's typedef_table = NULL; - isFromSourceFile = true; // default - filename = NULL; + isFromSourceFile = true; // default + filename = NULL; }; -void chillAST_FunctionDecl::addParameter( chillAST_VarDecl *p) { - CHILL_DEBUG_PRINT("%s chillAST_FunctionDecl::addParameter( 0x%x param %s) total of %d parameters\n", functionName, p, p->varname, 1+parameters.size()); +void chillAST_FunctionDecl::addParameter(chillAST_VarDecl *p) { + CHILL_DEBUG_PRINT("%s chillAST_FunctionDecl::addParameter( 0x%x param %s) total of %d parameters\n", functionName, + p, p->varname, 1 + parameters.size()); - if (symbolTableHasVariableNamed( ¶meters, p->varname)) { // NOT recursive. just in FunctionDecl + if (symbolTableHasVariableNamed(¶meters, p->varname)) { // NOT recursive. just in FunctionDecl CHILL_DEBUG_PRINT("chillAST_FunctionDecl::addParameter( %s ), parameter already exists?\n", p->varname); - // exit(-1); // ?? - return; // error? + // exit(-1); // ?? + return; // error? } parameters.push_back(p); //addSymbolToTable( parameters, p ); CHILL_DEBUG_PRINT("setting %s isAParameter\n", p->varname); - p->isAParameter = true; - - p->setParent( this ); // ?? unclear TODO - //p->dump(); printf("\naddparameter done\n\n"); fflush(stdout); -} + p->isAParameter = true; + p->setParent(this); // ?? unclear TODO + //p->dump(); printf("\naddparameter done\n\n"); fflush(stdout); +} -void chillAST_FunctionDecl::addDecl( chillAST_VarDecl *vd) { // to symbol table ONLY +void chillAST_FunctionDecl::addDecl(chillAST_VarDecl *vd) { // to symbol table ONLY CHILL_DEBUG_PRINT("chillAST_FunctionDecl::addDecl( %s )\n", vd->varname); - if (!body) { - //fprintf(stderr, "had no body\n"); + if (!body) { + //fprintf(stderr, "had no body\n"); body = new chillAST_CompoundStmt(); - + //body->symbol_table = symbol_table; // probably wrong if this ever does something } - //fprintf(stderr, "before body->addvar(), func symbol table had %d entries\n", symbol_table->size()); - //fprintf(stderr, "before body->addvar(), body symbol table was %p\n", body->symbol_table); - //fprintf(stderr, "before body->addvar(), body symbol table had %d entries\n", body->symbol_table->size()); + //fprintf(stderr, "before body->addvar(), func symbol table had %d entries\n", symbol_table->size()); + //fprintf(stderr, "before body->addvar(), body symbol table was %p\n", body->symbol_table); + //fprintf(stderr, "before body->addvar(), body symbol table had %d entries\n", body->symbol_table->size()); //adds to body symbol table, and makes sure function has a copy. probably dumb - body->symbol_table = body->addVariableToSymbolTable( vd ); - //fprintf(stderr, "after body->addvar(), func symbol table had %d entries\n", symbol_table->size()); + body->symbol_table = body->addVariableToSymbolTable(vd); + //fprintf(stderr, "after body->addvar(), func symbol table had %d entries\n", symbol_table->size()); } -chillAST_VarDecl *chillAST_FunctionDecl::hasParameterNamed( const char *name ) { +chillAST_VarDecl *chillAST_FunctionDecl::hasParameterNamed(const char *name) { int numparams = parameters.size(); - for (int i=0; i<numparams; i++) { - if (!strcmp(name, parameters[i]->varname)) return parameters[i]; // need to check type? + for (int i = 0; i < numparams; i++) { + if (!strcmp(name, parameters[i]->varname)) return parameters[i]; // need to check type? } - return NULL; + return NULL; } // similar to symbolTableHasVariableNamed() but returns the variable definition -chillAST_VarDecl *chillAST_FunctionDecl::funcHasVariableNamed( const char *name ) { // NOT recursive +chillAST_VarDecl *chillAST_FunctionDecl::funcHasVariableNamed(const char *name) { // NOT recursive //fprintf(stderr, "chillAST_FunctionDecl::funcHasVariableNamed( %s )\n", name ); // first check the parameters int numparams = parameters.size(); - for (int i=0; i<numparams; i++) { + for (int i = 0; i < numparams; i++) { chillAST_VarDecl *vd = parameters[i]; - if (!strcmp(name, vd->varname)) { - //fprintf(stderr, "yep, it's parameter %d\n", i); - return vd; // need to check type? + if (!strcmp(name, vd->varname)) { + //fprintf(stderr, "yep, it's parameter %d\n", i); + return vd; // need to check type? } } - //fprintf(stderr, "no parameter named %s\n", name); + //fprintf(stderr, "no parameter named %s\n", name); - chillAST_SymbolTable *st = getSymbolTable(); + chillAST_SymbolTable *st = getSymbolTable(); if (!st) { - fprintf(stderr,"and no symbol_table, so no variable named %s\n", name); - return NULL; // no symbol table so no variable by that name + fprintf(stderr, "and no symbol_table, so no variable named %s\n", name); + return NULL; // no symbol table so no variable by that name } - - int numvars = st->size(); - //fprintf(stderr, "checking against %d variables\n", numvars); - for (int i=0; i<numvars; i++) { + + int numvars = st->size(); + //fprintf(stderr, "checking against %d variables\n", numvars); + for (int i = 0; i < numvars; i++) { chillAST_VarDecl *vd = (*st)[i]; - //fprintf(stderr, "comparing '%s' to '%s'\n", name, vd->varname); + //fprintf(stderr, "comparing '%s' to '%s'\n", name, vd->varname); if (!strcmp(name, vd->varname)) { - //fprintf(stderr, "yep, it's variable %d\n", i); + //fprintf(stderr, "yep, it's variable %d\n", i); CHILL_DEBUG_PRINT("%s was already defined in the function body\n", vd->varname); - return vd; // need to check type? + return vd; // need to check type? } } CHILL_DEBUG_PRINT("not a parameter or variable named %s\n", name); - return NULL; + return NULL; } - - -void chillAST_FunctionDecl::setBody( chillAST_node * bod ) { - //fprintf(stderr, "%s chillAST_FunctionDecl::setBody( 0x%x ) total of %d children\n", functionName, bod, 1+children.size()); - if (bod->isCompoundStmt()) body = (chillAST_CompoundStmt *)bod; - else { +void chillAST_FunctionDecl::setBody(chillAST_node *bod) { + //fprintf(stderr, "%s chillAST_FunctionDecl::setBody( 0x%x ) total of %d children\n", functionName, bod, 1+children.size()); + if (bod->isCompoundStmt()) body = (chillAST_CompoundStmt *) bod; + else { body = new chillAST_CompoundStmt(); - body->addChild( bod ); + body->addChild(bod); } - //symbol_table = body->getSymbolTable(); + //symbol_table = body->getSymbolTable(); //addChild(bod); - bod->setParent( this ); // well, ... + 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 ); +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()) { + 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()); - printSymbolTable( getSymbolTable() ); + if (!st) { + fprintf(stderr, "symbol table is NULL!\n"); + } else { + fprintf(stderr, "%d entries in the symbol table\n", st->size()); + printSymbolTable(getSymbolTable()); } - fprintf(stderr, "\n\n"); + fprintf(stderr, "\n\n"); } } -void chillAST_FunctionDecl::addChild(chillAST_node* node) { +void chillAST_FunctionDecl::addChild(chillAST_node *node) { CHILL_DEBUG_BEGIN - node->print(0,stderr); fprintf(stderr, "\n\n"); + node->print(0, stderr); + fprintf(stderr, "\n\n"); CHILL_DEBUG_END - if (node->isVarDecl()) { + 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->parent = this; // this, or body?? + body->addChild(node); + node->parent = this; // this, or body?? } -void chillAST_FunctionDecl::printParameterTypes( FILE *fp ) { // also prints names - //fprintf(stderr, "\n\n%s chillAST_FunctionDecl::printParameterTypes()\n", functionName); - fprintf(fp, "( "); - int numparameters = parameters.size(); - for (int i=0; i<numparameters; i++) { - if (i!=0) fprintf(fp, ", "); +void chillAST_FunctionDecl::printParameterTypes(FILE *fp) { // also prints names + //fprintf(stderr, "\n\n%s chillAST_FunctionDecl::printParameterTypes()\n", functionName); + fprintf(fp, "( "); + int numparameters = parameters.size(); + for (int i = 0; i < numparameters; i++) { + if (i != 0) fprintf(fp, ", "); chillAST_VarDecl *p = parameters[i]; p->print(0, fp); // note: no indent, as this is in the function parens } @@ -1049,403 +1033,392 @@ void chillAST_FunctionDecl::printParameterTypes( FILE *fp ) { // also prints n } - - -void chillAST_FunctionDecl::print( int indent, FILE *fp ) { - //fprintf(fp, "\n// functiondecl %p \n", this); - //chillindent(indent, fp); +void chillAST_FunctionDecl::print(int indent, FILE *fp) { + //fprintf(fp, "\n// functiondecl %p \n", this); + //chillindent(indent, fp); //fprintf(fp, "//(functiondecl) %d parameters\n", numparameters); - printPreprocBEFORE(indent, fp); + printPreprocBEFORE(indent, fp); fprintf(fp, "\n"); - chillindent(indent, fp); + chillindent(indent, fp); + + if (externfunc) fprintf(fp, "extern "); - if (externfunc) fprintf(fp, "extern "); + if (function_type == CHILL_FUNCTION_GPU) fprintf(fp, "__global__ "); + fprintf(fp, "%s %s", returnType, functionName); + printParameterTypes(fp); - if (function_type == CHILL_FUNCTION_GPU) fprintf(fp, "__global__ "); - fprintf(fp, "%s %s", returnType, functionName ); - printParameterTypes(fp); - - // non-parameter variables (now must have explicit vardecl in the body) + // non-parameter variables (now must have explicit vardecl in the body) //int numvars = symbol_table.size(); - //for (int i=0; i<numvars; i++) { + //for (int i=0; i<numvars; i++) { // symbol_table[i]->print(1,fp); - // fprintf(fp, ";\n"); - //} - - // now the body - if (!(externfunc || forwarddecl)) { - if (body) { - fprintf(fp, "\n{\n"); - //chillindent(indent+1, fp); fprintf(fp, "//body\n"); fflush(fp); - body->print( indent+1, fp); - fprintf(fp, "\n"); - //chillindent(indent+1, fp); fprintf(fp, "//END body\n"); fflush(fp); - + // fprintf(fp, ";\n"); + //} + + // now the body + if (!(externfunc || forwarddecl)) { + if (body) { + fprintf(fp, "\n{\n"); + //chillindent(indent+1, fp); fprintf(fp, "//body\n"); fflush(fp); + body->print(indent + 1, fp); + fprintf(fp, "\n"); + //chillindent(indent+1, fp); fprintf(fp, "//END body\n"); fflush(fp); + // tidy up - chillindent(indent, fp); + chillindent(indent, fp); fprintf(fp, "}\n"); - } // if body - else { - fprintf(fp, "{}\n"); // should never happen, but not external and no body + } // if body + else { + fprintf(fp, "{}\n"); // should never happen, but not external and no body } - } - else { // extern func or forward decl. just end forward declaration + } else { // extern func or forward decl. just end forward declaration fprintf(fp, "; // fwd decl\n"); } - - printPreprocAFTER(indent, fp); - fflush(fp); + printPreprocAFTER(indent, fp); + + fflush(fp); } - -void chillAST_FunctionDecl::dump( int indent, FILE *fp ) { - fprintf(fp, "\n"); +void chillAST_FunctionDecl::dump(int indent, FILE *fp) { + fprintf(fp, "\n"); fprintf(fp, "// isFromSourceFile "); - if (filename) fprintf(fp, "%s ", filename); - if (isFromSourceFile) fprintf(fp, "true\n"); - else fprintf(fp, "false\n"); - chillindent(indent, fp); - fprintf(fp, "(FunctionDecl %s %s(", returnType, functionName ); - - int numparameters = parameters.size(); - for (int i=0; i<numparameters; i++) { - if (i!=0) fprintf(fp, ", "); + if (filename) fprintf(fp, "%s ", filename); + if (isFromSourceFile) fprintf(fp, "true\n"); + else fprintf(fp, "false\n"); + chillindent(indent, fp); + fprintf(fp, "(FunctionDecl %s %s(", returnType, functionName); + + int numparameters = parameters.size(); + for (int i = 0; i < numparameters; i++) { + if (i != 0) fprintf(fp, ", "); chillAST_VarDecl *p = parameters[i]; - //fprintf(stderr, "param type %s vartype %s\n", p->getTypeString(), p->vartype); + //fprintf(stderr, "param type %s vartype %s\n", p->getTypeString(), p->vartype); p->print(0, fp); // note: no indent, as this is in the function parens, ALSO print, not dump } fprintf(fp, ")\n"); // end of input parameters - - // now the body - - if (body) body->dump( indent+1 , fp); + + // now the body - + if (body) body->dump(indent + 1, fp); // tidy up - chillindent(indent, fp); + chillindent(indent, fp); fprintf(fp, ")\n"); - fflush(fp); + fflush(fp); } - - - - -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()); +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()); //fprintf(stderr, "functiondecl has %d parameters\n", numParameters()); - for (int i=0; i<numParameters(); i++) parameters[i]->gatherVarDecls( 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 - //fprintf(stderr, "after body, %d decls\n", decls.size()); + for (int i = 0; i < numParameters(); i++) parameters[i]->gatherVarDecls(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 + //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"); - //} + // decls[d]->print(0,stderr); fprintf(stderr, "\n"); + //} } -void chillAST_FunctionDecl::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - //if (0 < children.size()) fprintf(stderr, "functiondecl has %d children\n", children.size()); - - for (int i=0; i<numParameters(); i++) parameters[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 +void chillAST_FunctionDecl::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + //if (0 < children.size()) fprintf(stderr, "functiondecl has %d children\n", children.size()); + + for (int i = 0; i < numParameters(); i++) parameters[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 } -void chillAST_FunctionDecl::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - //if (0 < children.size()) fprintf(stderr, "functiondecl has %d children\n", children.size()); - - for (int i=0; i<numParameters(); i++) parameters[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 +void chillAST_FunctionDecl::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + //if (0 < children.size()) fprintf(stderr, "functiondecl has %d children\n", children.size()); + + for (int i = 0; i < numParameters(); i++) parameters[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 } -chillAST_VarDecl *chillAST_FunctionDecl::findArrayDecl( const char *name ) { +chillAST_VarDecl *chillAST_FunctionDecl::findArrayDecl(const char *name) { //fprintf(stderr, "chillAST_FunctionDecl::findArrayDecl( %s )\n", name ); - chillAST_VarDecl *p = hasParameterNamed( name ); + chillAST_VarDecl *p = hasParameterNamed(name); //if (p) fprintf(stderr, "function %s has parameter named %s\n", functionName, name ); if (p && p->isArray()) return p; - chillAST_VarDecl *v = funcHasVariableNamed ( name ); + chillAST_VarDecl *v = funcHasVariableNamed(name); //if (v) fprintf(stderr, "function %s has symbol table variable named %s\n", functionName, name ); if (v && v->isArray()) return v; // declared variables that may not be in symbol table but probably should be - vector<chillAST_VarDecl*> decls ; - gatherArrayVarDecls( decls ); - for (int i=0; i<decls.size(); i++) { - chillAST_VarDecl *vd = decls[i]; - if (0 == strcmp(vd->varname, name ) && vd->isArray()) return vd; + vector<chillAST_VarDecl *> decls; + gatherArrayVarDecls(decls); + for (int i = 0; i < decls.size(); i++) { + chillAST_VarDecl *vd = decls[i]; + if (0 == strcmp(vd->varname, name) && vd->isArray()) return vd; } - //fprintf(stderr, "can't find array named %s in function %s \n", name, functionName); - return NULL; + //fprintf(stderr, "can't find array named %s in function %s \n", name, functionName); + return NULL; } -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 +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 } -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 +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 } +void chillAST_FunctionDecl::cleanUpVarDecls() { + //fprintf(stderr, "\ncleanUpVarDecls() for function %s\n", functionName); + vector<chillAST_VarDecl *> used; + vector<chillAST_VarDecl *> defined; + vector<chillAST_VarDecl *> deletethese; -void chillAST_FunctionDecl::cleanUpVarDecls() { - //fprintf(stderr, "\ncleanUpVarDecls() for function %s\n", functionName); - vector<chillAST_VarDecl*> used; - vector<chillAST_VarDecl*> defined; - vector<chillAST_VarDecl*> deletethese; - - gatherVarUsage( used ); - gatherVarDecls( defined ); + gatherVarUsage(used); + gatherVarDecls(defined); - //fprintf(stderr, "\nvars used: \n"); - //for ( int i=0; i< used.size(); i++) { - //used[i]->print(0, stderr); fprintf(stderr, "\n"); - //} - //fprintf(stderr, "\n"); - //fprintf(stderr, "\nvars defined: \n"); - //for ( int i=0; i< defined.size(); i++) { - // defined[i]->print(0, stderr); fprintf(stderr, "\n"); - //} - //fprintf(stderr, "\n"); + //fprintf(stderr, "\nvars used: \n"); + //for ( int i=0; i< used.size(); i++) { + //used[i]->print(0, stderr); fprintf(stderr, "\n"); + //} + //fprintf(stderr, "\n"); + //fprintf(stderr, "\nvars defined: \n"); + //for ( int i=0; i< defined.size(); i++) { + // defined[i]->print(0, stderr); fprintf(stderr, "\n"); + //} + //fprintf(stderr, "\n"); - for ( int j=0; j < defined.size(); j++) { - //fprintf(stderr, "j %d defined %s\n", j, defined[j]->varname); + for (int j = 0; j < defined.size(); j++) { + //fprintf(stderr, "j %d defined %s\n", j, defined[j]->varname); bool definedandused = false; - for ( int i=0; i < used.size(); i++) { - if (used[i] == defined[j]) { - //fprintf(stderr, "i %d used %s\n", i, used[i]->varname); + for (int i = 0; i < used.size(); i++) { + if (used[i] == defined[j]) { + //fprintf(stderr, "i %d used %s\n", i, used[i]->varname); //fprintf(stderr, "\n"); definedandused = true; break; } } - if (!definedandused) { - if ( defined[j]->isParmVarDecl() ) { - //fprintf(stderr, "we'd remove %s except that it's a parameter. Maybe someday\n", defined[j]->varname); - } - else { - //fprintf(stderr, "we can probably remove the definition of %s\n", defined[j]->varname); - deletethese.push_back( defined[j] ); + if (!definedandused) { + if (defined[j]->isParmVarDecl()) { + //fprintf(stderr, "we'd remove %s except that it's a parameter. Maybe someday\n", defined[j]->varname); + } else { + //fprintf(stderr, "we can probably remove the definition of %s\n", defined[j]->varname); + deletethese.push_back(defined[j]); } } } - //fprintf(stderr, "deleting %d vardecls\n", deletethese.size()); - for (int i=0; i<deletethese.size(); i++) { - //fprintf(stderr, "deleting varDecl %s\n", deletethese[i]->varname); - chillAST_node *par = deletethese[i]->parent; - par->removeChild( par->findChild( deletethese[i] )); + //fprintf(stderr, "deleting %d vardecls\n", deletethese.size()); + for (int i = 0; i < deletethese.size(); i++) { + //fprintf(stderr, "deleting varDecl %s\n", deletethese[i]->varname); + chillAST_node *par = deletethese[i]->parent; + par->removeChild(par->findChild(deletethese[i])); } - //fprintf(stderr, "\n\nnow check for vars used but not defined\n"); + //fprintf(stderr, "\n\nnow check for vars used but not defined\n"); // now check for vars used but not defined? - for ( int j=0; j < used.size(); j++) { - //fprintf(stderr, "%s is used\n", used[j]->varname); + for (int j = 0; j < used.size(); j++) { + //fprintf(stderr, "%s is used\n", used[j]->varname); bool definedandused = false; - for ( int i=0; i < defined.size(); i++) { - if (used[j] == defined[i]) { - //fprintf(stderr, "%s is defined\n", defined[i]->varname); + for (int i = 0; i < defined.size(); i++) { + if (used[j] == defined[i]) { + //fprintf(stderr, "%s is defined\n", defined[i]->varname); definedandused = true; break; } } - if (!definedandused) { - //fprintf(stderr, "%s is used but not defined?\n", used[j]->varname); + if (!definedandused) { + //fprintf(stderr, "%s is used but not defined?\n", used[j]->varname); // add it to the beginning of the function - insertChild(0, used[j]); + insertChild(0, used[j]); } } - + } //void chillAST_FunctionDecl::replaceVarDecls( chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl ) { -// for (int i=0; i<children.size(); i++) children[i]->replaceVarDecls( olddecl, newdecl ); -//} +// for (int i=0; i<children.size(); i++) children[i]->replaceVarDecls( olddecl, newdecl ); +//} -bool chillAST_FunctionDecl::findLoopIndexesToReplace( chillAST_SymbolTable *symtab, bool forcesync ) { - if (body) body->findLoopIndexesToReplace( symtab, false ); +bool chillAST_FunctionDecl::findLoopIndexesToReplace(chillAST_SymbolTable *symtab, bool forcesync) { + if (body) body->findLoopIndexesToReplace(symtab, false); return false; } - - chillAST_node *chillAST_FunctionDecl::constantFold() { - //fprintf(stderr, "chillAST_FunctionDecl::constantFold()\n"); - // parameters can't have constants? - int numparameters = parameters.size(); - for (int i=0; i<numparameters; i++) { - parameters[i]->constantFold(); - } - if (body) body = (chillAST_CompoundStmt *)body->constantFold(); - return this; - } +chillAST_node *chillAST_FunctionDecl::constantFold() { + //fprintf(stderr, "chillAST_FunctionDecl::constantFold()\n"); + // parameters can't have constants? + int numparameters = parameters.size(); + for (int i = 0; i < numparameters; i++) { + parameters[i]->constantFold(); + } + if (body) body = (chillAST_CompoundStmt *) body->constantFold(); + return this; +} -chillAST_MacroDefinition::chillAST_MacroDefinition() { +chillAST_MacroDefinition::chillAST_MacroDefinition() { macroName = strdup("UNDEFINEDMACRO"); rhsString = NULL; - asttype = CHILLAST_NODETYPE_MACRODEFINITION; - parent = NULL; + asttype = CHILLAST_NODETYPE_MACRODEFINITION; + parent = NULL; metacomment = NULL; symbol_table = NULL; //rhsideString = NULL; - isFromSourceFile = true; // default - filename = NULL; + isFromSourceFile = true; // default + filename = NULL; }; -chillAST_MacroDefinition::chillAST_MacroDefinition(const char *mname, chillAST_node *par) { +chillAST_MacroDefinition::chillAST_MacroDefinition(const char *mname, chillAST_node *par) { macroName = strdup(mname); rhsString = NULL; - asttype = CHILLAST_NODETYPE_MACRODEFINITION; + asttype = CHILLAST_NODETYPE_MACRODEFINITION; parent = par; metacomment = NULL; symbol_table = NULL; //rhsideString = NULL; - if (par) par->getSourceFile()->addMacro( this ); + if (par) par->getSourceFile()->addMacro(this); - //fprintf(stderr, "chillAST_MacroDefinition::chillAST_MacroDefinition( %s, ", mname); + //fprintf(stderr, "chillAST_MacroDefinition::chillAST_MacroDefinition( %s, ", mname); //if (par) fprintf(stderr, " parent NOT NULL);\n"); //else fprintf(stderr, " parent NULL);\n"); - isFromSourceFile = true; // default - filename = NULL; + isFromSourceFile = true; // default + filename = NULL; }; -chillAST_MacroDefinition::chillAST_MacroDefinition(const char *mname, const char *rhs, chillAST_node *par) { +chillAST_MacroDefinition::chillAST_MacroDefinition(const char *mname, const char *rhs, chillAST_node *par) { macroName = strdup(mname); rhsString = strdup(rhs); - asttype = CHILLAST_NODETYPE_MACRODEFINITION; + asttype = CHILLAST_NODETYPE_MACRODEFINITION; parent = par; metacomment = NULL; symbol_table = NULL; - if (par) par->getSourceFile()->addMacro( this ); + if (par) par->getSourceFile()->addMacro(this); - //fprintf(stderr, "chillAST_MacroDefinition::chillAST_MacroDefinition( %s, ", mname); + //fprintf(stderr, "chillAST_MacroDefinition::chillAST_MacroDefinition( %s, ", mname); //if (par) fprintf(stderr, " parent NOT NULL);\n"); //else fprintf(stderr, " parent NULL);\n"); - isFromSourceFile = true; // default - filename = NULL; + isFromSourceFile = true; // default + filename = NULL; }; -chillAST_node* chillAST_MacroDefinition::clone() { +chillAST_node *chillAST_MacroDefinition::clone() { // TODO ?? cloning a macro makes no sense return this; -#ifdef CONFUSED +#ifdef CONFUSED - //fprintf(stderr, "chillAST_MacroDefinition::clone() for %s\n", macroName); - chillAST_MacroDefinition *clo = new chillAST_MacroDefinition( macroName, parent); + //fprintf(stderr, "chillAST_MacroDefinition::clone() for %s\n", macroName); + chillAST_MacroDefinition *clo = new chillAST_MacroDefinition( macroName, parent); for (int i=0; i<parameters.size(); i++) clo->addParameter( parameters[i] ); clo->setBody( body->clone() ); - return clo; -#endif + return clo; +#endif } -void chillAST_MacroDefinition::setBody( chillAST_node * bod ) { - fprintf(stderr, "%s chillAST_MacroDefinition::setBody( 0x%x )\n", macroName, bod); +void chillAST_MacroDefinition::setBody(chillAST_node *bod) { + fprintf(stderr, "%s chillAST_MacroDefinition::setBody( 0x%x )\n", macroName, bod); body = bod; - fprintf(stderr, "body is:\n"); body->print(0,stderr); fprintf(stderr, "\n\n"); - rhsString = body->stringRep(); - bod->setParent( this ); // well, ... + fprintf(stderr, "body is:\n"); + body->print(0, stderr); + fprintf(stderr, "\n\n"); + rhsString = body->stringRep(); + bod->setParent(this); // well, ... } -void chillAST_MacroDefinition::addParameter( chillAST_VarDecl *p) { - //fprintf(stderr, "%s chillAST_MacroDefinition::addParameter( 0x%x ) total of %d children\n", functionName, p, 1+children.size()); +void chillAST_MacroDefinition::addParameter(chillAST_VarDecl *p) { + //fprintf(stderr, "%s chillAST_MacroDefinition::addParameter( 0x%x ) total of %d children\n", functionName, p, 1+children.size()); parameters.push_back(p); - fprintf(stderr, "macro setting %s isAParameter\n", p->varname); - p->isAParameter = true; - p->setParent( this ); + fprintf(stderr, "macro setting %s isAParameter\n", p->varname); + p->isAParameter = true; + p->setParent(this); - addVariableToSymbolTable( p ); + addVariableToSymbolTable(p); } -chillAST_VarDecl *chillAST_MacroDefinition::hasParameterNamed( const char *name ) { +chillAST_VarDecl *chillAST_MacroDefinition::hasParameterNamed(const char *name) { int numparams = parameters.size(); - for (int i=0; i<numparams; i++) { - if (!strcmp(name, parameters[i]->varname)) return parameters[i]; // need to check type? + for (int i = 0; i < numparams; i++) { + if (!strcmp(name, parameters[i]->varname)) return parameters[i]; // need to check type? } - return NULL; + return NULL; } -void chillAST_MacroDefinition::insertChild(int i, chillAST_node* node) { - body->insertChild( i, node ); +void chillAST_MacroDefinition::insertChild(int i, chillAST_node *node) { + body->insertChild(i, node); } -void chillAST_MacroDefinition::addChild(chillAST_node* node) { - body->addChild( node ); - node->parent = this; // this, or body?? +void chillAST_MacroDefinition::addChild(chillAST_node *node) { + body->addChild(node); + node->parent = this; // this, or body?? } -void chillAST_MacroDefinition::dump( int indent, FILE *fp ) { - fprintf(fp, "\n"); - chillindent(indent, fp); +void chillAST_MacroDefinition::dump(int indent, FILE *fp) { + fprintf(fp, "\n"); + chillindent(indent, fp); fprintf(fp, "(MacroDefinition %s(", macroName); - for (int i=0; i<numParameters(); i++) { + for (int i = 0; i < numParameters(); i++) { fprintf(fp, "\n"); - chillindent(indent+1, fp); - fprintf(fp, "(%s)", parameters[i]->varname); + chillindent(indent + 1, fp); + fprintf(fp, "(%s)", parameters[i]->varname); } - fprintf(fp, ")\n"); - body->dump( indent+1, fp); - if (rhsString) fprintf(fp, " (aka %s)"); - fprintf(fp, "\n"); + fprintf(fp, ")\n"); + body->dump(indent + 1, fp); + if (rhsString) fprintf(fp, " (aka %s)"); + fprintf(fp, "\n"); fflush(fp); } -void chillAST_MacroDefinition::print( int indent, FILE *fp ) { // UHOH TODO +void chillAST_MacroDefinition::print(int indent, FILE *fp) { // UHOH TODO //fprintf(fp, "\n"); // ignore indentation - //fprintf(stderr, "macro has %d parameters\n", numParameters()); + //fprintf(stderr, "macro has %d parameters\n", numParameters()); - printPreprocBEFORE(indent, fp); + printPreprocBEFORE(indent, fp); fprintf(fp, "#define %s", macroName); - if (0 != numParameters()) { + if (0 != numParameters()) { fprintf(fp, "("); - for (int i=0; i<numParameters(); i++) { + for (int i = 0; i < numParameters(); i++) { if (i) fprintf(fp, ","); - fprintf(fp, "%s", parameters[i]->varname); + fprintf(fp, "%s", parameters[i]->varname); } fprintf(fp, ") "); } - if (body) body->print(0, fp); // TODO should force newlines out of multiline macros - fprintf(fp, "\n"); -} - - + if (body) body->print(0, fp); // TODO should force newlines out of multiline macros + fprintf(fp, "\n"); +} chillAST_ForStmt::chillAST_ForStmt() { @@ -1457,133 +1430,130 @@ chillAST_ForStmt::chillAST_ForStmt() { parent = NULL; metacomment = NULL; symbol_table = NULL; - isFromSourceFile = true; // default - filename = NULL; + isFromSourceFile = true; // default + filename = NULL; } -chillAST_ForStmt::chillAST_ForStmt( chillAST_node *ini, chillAST_node *con, chillAST_node *inc, chillAST_node *bod, chillAST_node *par) { - parent = par; +chillAST_ForStmt::chillAST_ForStmt(chillAST_node *ini, chillAST_node *con, chillAST_node *inc, chillAST_node *bod, + chillAST_node *par) { + parent = par; metacomment = NULL; init = ini; cond = con; incr = inc; body = bod; - init->setParent( this ); - cond->setParent( this ); - incr->setParent( this ); - - //fprintf(stderr, "chillAST_ForStmt::chillAST_ForStmt() bod %p\n", bod); + init->setParent(this); + cond->setParent(this); + incr->setParent(this); + + //fprintf(stderr, "chillAST_ForStmt::chillAST_ForStmt() bod %p\n", bod); + + if (body) body->setParent(this); // not sure this should be legal - if (body) body->setParent( this ); // not sure this should be legal - - asttype = CHILLAST_NODETYPE_LOOP; // breaking with tradition, this was CHILL_AST_FORSTMT + asttype = CHILLAST_NODETYPE_LOOP; // breaking with tradition, this was CHILL_AST_FORSTMT - if (!cond->isBinaryOperator()) { + if (!cond->isBinaryOperator()) { fprintf(stderr, "ForStmt conditional is of type %s. Expecting a BinaryOperator\n", cond->getTypeString()); - exit(-1); + exit(-1); } - chillAST_BinaryOperator *bo = (chillAST_BinaryOperator *)cond; - char *condstring = bo->op; - if (!strcmp(condstring, "<")) conditionoperator = IR_COND_LT; + chillAST_BinaryOperator *bo = (chillAST_BinaryOperator *) cond; + char *condstring = bo->op; + if (!strcmp(condstring, "<")) conditionoperator = IR_COND_LT; else if (!strcmp(condstring, "<=")) conditionoperator = IR_COND_LE; - else if (!strcmp(condstring, ">")) conditionoperator = IR_COND_GT; + else if (!strcmp(condstring, ">")) conditionoperator = IR_COND_GT; else if (!strcmp(condstring, ">=")) conditionoperator = IR_COND_GE; - else { + else { fprintf(stderr, "ForStmt, illegal/unhandled end condition \"%s\"\n", condstring); fprintf(stderr, "currently can only handle <, >, <=, >=\n"); exit(1); } - isFromSourceFile = true; // default - filename = NULL; + isFromSourceFile = true; // default + filename = NULL; } -bool chillAST_ForStmt::lowerBound( int &l ) { // l is an output (passed as reference) - - // above, cond must be a binaryoperator ... ??? - if (conditionoperator == IR_COND_LT || - conditionoperator == IR_COND_LE ) { - - // lower bound is rhs of init - if (!init->isBinaryOperator()) { +bool chillAST_ForStmt::lowerBound(int &l) { // l is an output (passed as reference) + + // above, cond must be a binaryoperator ... ??? + if (conditionoperator == IR_COND_LT || + conditionoperator == IR_COND_LE) { + + // lower bound is rhs of init + if (!init->isBinaryOperator()) { fprintf(stderr, "chillAST_ForStmt::lowerBound() init is not a chillAST_BinaryOperator\n"); exit(-1); } - - chillAST_BinaryOperator *bo = (chillAST_BinaryOperator *)init; - if (!init->isAssignmentOp()) { + + chillAST_BinaryOperator *bo = (chillAST_BinaryOperator *) init; + if (!init->isAssignmentOp()) { fprintf(stderr, "chillAST_ForStmt::lowerBound() init is not an assignment chillAST_BinaryOperator\n"); exit(-1); } - - //fprintf(stderr, "rhs "); bo->rhs->print(0,stderr); fprintf(stderr, " "); + + //fprintf(stderr, "rhs "); bo->rhs->print(0,stderr); fprintf(stderr, " "); l = bo->rhs->evalAsInt(); // float could be legal I suppose - //fprintf(stderr, " %d\n", l); - return true; - } - else if (conditionoperator == IR_COND_GT || - conditionoperator == IR_COND_GE ) { // decrementing + //fprintf(stderr, " %d\n", l); + return true; + } else if (conditionoperator == IR_COND_GT || + conditionoperator == IR_COND_GE) { // decrementing // lower bound is rhs of cond (not init) - chillAST_BinaryOperator *bo = (chillAST_BinaryOperator *)cond; + chillAST_BinaryOperator *bo = (chillAST_BinaryOperator *) cond; l = bo->rhs->evalAsInt(); // float could be legal I suppose - return true; + return true; } - - // some case we don't handle ?? - fprintf(stderr, "chillAST_ForStmt::lowerBound() can't find lower bound of "); - print(0,stderr); - fprintf(stderr, "\n\n"); + + // some case we don't handle ?? + fprintf(stderr, "chillAST_ForStmt::lowerBound() can't find lower bound of "); + print(0, stderr); + fprintf(stderr, "\n\n"); return false; // or exit ??? } -bool chillAST_ForStmt::upperBound( int &u ) { // u is an output (passed as reference) - - // above, cond must be a binaryoperator ... ??? - if (conditionoperator == IR_COND_GT || - conditionoperator == IR_COND_GE ) { // decrementing +bool chillAST_ForStmt::upperBound(int &u) { // u is an output (passed as reference) + + // above, cond must be a binaryoperator ... ??? + if (conditionoperator == IR_COND_GT || + conditionoperator == IR_COND_GE) { // decrementing - // upper bound is rhs of init - if (!init->isBinaryOperator()) { + // upper bound is rhs of init + if (!init->isBinaryOperator()) { fprintf(stderr, "chillAST_ForStmt::upperBound() init is not a chillAST_BinaryOperator\n"); exit(-1); } - chillAST_BinaryOperator *bo = (chillAST_BinaryOperator *)init; - if (!init->isAssignmentOp()) { + chillAST_BinaryOperator *bo = (chillAST_BinaryOperator *) init; + if (!init->isAssignmentOp()) { fprintf(stderr, "chillAST_ForStmt::upperBound() init is not an assignment chillAST_BinaryOperator\n"); exit(-1); } u = bo->rhs->evalAsInt(); // float could be legal I suppose - return true; - } - else if (conditionoperator == IR_COND_LT || - conditionoperator == IR_COND_LE ) { + return true; + } else if (conditionoperator == IR_COND_LT || + conditionoperator == IR_COND_LE) { //fprintf(stderr, "upper bound is rhs of cond "); // upper bound is rhs of cond (not init) - chillAST_BinaryOperator *bo = (chillAST_BinaryOperator *)cond; + chillAST_BinaryOperator *bo = (chillAST_BinaryOperator *) cond; //bo->rhs->print(0,stderr); u = bo->rhs->evalAsInt(); // float could be legal I suppose - if (conditionoperator == IR_COND_LT) u -= 1; + if (conditionoperator == IR_COND_LT) u -= 1; //fprintf(stderr, " %d\n", u); - return true; + return true; } - // some case we don't handle ?? - fprintf(stderr, "chillAST_ForStmt::upperBound() can't find upper bound of "); - print(0,stderr); - fprintf(stderr, "\n\n"); + // some case we don't handle ?? + fprintf(stderr, "chillAST_ForStmt::upperBound() can't find upper bound of "); + print(0, stderr); + fprintf(stderr, "\n\n"); return false; // or exit ??? } - - -void chillAST_ForStmt::printControl( int in, FILE *fp ) { +void chillAST_ForStmt::printControl(int in, FILE *fp) { chillindent(in, fp); fprintf(fp, "for ("); init->print(0, fp); @@ -1592,175 +1562,173 @@ void chillAST_ForStmt::printControl( int in, FILE *fp ) { fprintf(fp, "; "); incr->print(0, fp); fprintf(fp, ")"); - fflush(fp); + fflush(fp); } -void chillAST_ForStmt::print( int indent, FILE *fp ) { - printPreprocBEFORE(indent, fp); - //fprintf(fp, "chillAST_ForStmt::print()\n"); - if (metacomment) { +void chillAST_ForStmt::print(int indent, FILE *fp) { + printPreprocBEFORE(indent, fp); + //fprintf(fp, "chillAST_ForStmt::print()\n"); + if (metacomment) { chillindent(indent, fp); - //for(int i=0; i<indent; i++) fprintf(fp, ".."); + //for(int i=0; i<indent; i++) fprintf(fp, ".."); fprintf(fp, "// %s\n", metacomment); } - printControl(indent, fp); // does not do a newline or bracket - fprintf(fp, " {\n"); + printControl(indent, fp); // does not do a newline or bracket + fprintf(fp, " {\n"); - // I have no idea what made me do this next bit. - // A forstmt with compounds inside compounds ??? - // this should probably all go away + // I have no idea what made me do this next bit. + // A forstmt with compounds inside compounds ??? + // this should probably all go away chillAST_node *b = body; - //fprintf(fp, "b children %d\n", b->getNumChildren()); - //fprintf(fp, "body child 0 of type %s\n", b->children[0]->getTypeString()); - //fprintf(stderr, "forstmt body type %s\n", Chill_AST_Node_Names[b->asttype] ); + //fprintf(fp, "b children %d\n", b->getNumChildren()); + //fprintf(fp, "body child 0 of type %s\n", b->children[0]->getTypeString()); + //fprintf(stderr, "forstmt body type %s\n", Chill_AST_Node_Names[b->asttype] ); // deal with a tree of compound statements, in an ugly way. leave the ugliness - while (1 == b->getNumChildren() && b->children[0]->isCompoundStmt()) { - b = b->children[0]; + while (1 == b->getNumChildren() && b->children[0]->isCompoundStmt()) { + b = b->children[0]; } // this was to sometimes not enclose in a bracket. stupid. always enclose in a bracket. //if (1 == b->getNumChildren() && b->children[0]->isForStmt()) fprintf(fp, ") {\n" ); //else if (1 == b->getNumChildren() ) fprintf(fp, ") { ?? \n" ); // to allow for() for( ) to not have open bracket? - //else { - //fprintf(fp, ")\n"); - //chillindent(in, fp); - //fprintf(fp, "{\n" ); + //else { + //fprintf(fp, ")\n"); + //chillindent(in, fp); + //fprintf(fp, "{\n" ); - //fprintf(fp, ")"); + //fprintf(fp, ")"); //} - b->print(indent+1, fp ); + b->print(indent + 1, fp); - // I think this can't happen any more. body is always a compound statement - if (b->asttype == CHILLAST_NODETYPE_BINARYOPERATOR) { // a single assignment statement - fprintf(fp, ";\n"); + // I think this can't happen any more. body is always a compound statement + if (b->asttype == CHILLAST_NODETYPE_BINARYOPERATOR) { // a single assignment statement + fprintf(fp, ";\n"); } - // always print brackets + // always print brackets - //if ((1 == b->getNumChildren() && b->children[0]->isForStmt()) || + //if ((1 == b->getNumChildren() && b->children[0]->isForStmt()) || // (1 != b->getNumChildren() )) { chillindent(indent, fp); - fprintf(fp, "}\n" ); + fprintf(fp, "}\n"); //} - printPreprocAFTER(indent, fp); + printPreprocAFTER(indent, fp); fflush(fp); // } -void chillAST_ForStmt::dump( int indent, FILE *fp ) { +void chillAST_ForStmt::dump(int indent, FILE *fp) { chillindent(indent, fp); fprintf(fp, "(ForStmt \n"); - init->dump(indent+1, fp); - cond->dump(indent+1, fp); - incr->dump(indent+1, fp); - body->dump(indent+1, fp); + init->dump(indent + 1, fp); + cond->dump(indent + 1, fp); + incr->dump(indent + 1, fp); + body->dump(indent + 1, fp); chillindent(indent, fp); fprintf(fp, ")\n"); } - -chillAST_node *chillAST_ForStmt::constantFold() { - init = init->constantFold(); - cond = cond->constantFold(); - incr = incr->constantFold(); - body = body->constantFold(); - return this; - } + +chillAST_node *chillAST_ForStmt::constantFold() { + init = init->constantFold(); + cond = cond->constantFold(); + incr = incr->constantFold(); + body = body->constantFold(); + return this; +} - chillAST_node *chillAST_ForStmt::clone() { - chillAST_ForStmt *fs = new chillAST_ForStmt( init->clone(), cond->clone(), incr->clone(), body->clone(), parent); +chillAST_node *chillAST_ForStmt::clone() { + chillAST_ForStmt *fs = new chillAST_ForStmt(init->clone(), cond->clone(), incr->clone(), body->clone(), parent); fs->isFromSourceFile = isFromSourceFile; if (filename) fs->filename = strdup(filename); return fs; - } +} -void chillAST_ForStmt::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - //fprintf(stderr, "chillAST_ForStmt::gatherVarDecls()\n"); +void chillAST_ForStmt::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + //fprintf(stderr, "chillAST_ForStmt::gatherVarDecls()\n"); //fprintf(stderr, "chillAST_ForStmt::gatherVarDecls() before %d\n", decls.size()); - // TODO clear a loop_var_decls variable and then walk it ? - init->gatherVarDecls( decls ); - cond->gatherVarDecls( decls ); - incr->gatherVarDecls( decls ); - body->gatherVarDecls( decls ); - //fprintf(stderr, "after %d\n", decls.size()); + // TODO clear a loop_var_decls variable and then walk it ? + init->gatherVarDecls(decls); + cond->gatherVarDecls(decls); + incr->gatherVarDecls(decls); + body->gatherVarDecls(decls); + //fprintf(stderr, "after %d\n", decls.size()); } -void chillAST_ForStmt::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { +void chillAST_ForStmt::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { //fprintf(stderr, "chillAST_ForStmt::gatherScalarVarDecls() before %d\n", decls.size()); - init->gatherScalarVarDecls( decls ); - cond->gatherScalarVarDecls( decls ); - incr->gatherScalarVarDecls( decls ); - body->gatherScalarVarDecls( decls ); + init->gatherScalarVarDecls(decls); + cond->gatherScalarVarDecls(decls); + incr->gatherScalarVarDecls(decls); + body->gatherScalarVarDecls(decls); } -void chillAST_ForStmt::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { +void chillAST_ForStmt::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { //fprintf(stderr, "chillAST_ForStmt::gatherArrayVarDecls() before %d\n", decls.size()); - init->gatherArrayVarDecls( decls ); - cond->gatherArrayVarDecls( decls ); - incr->gatherArrayVarDecls( decls ); - body->gatherArrayVarDecls( decls ); + init->gatherArrayVarDecls(decls); + cond->gatherArrayVarDecls(decls); + incr->gatherArrayVarDecls(decls); + body->gatherArrayVarDecls(decls); } -void chillAST_ForStmt::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool writtento ) { - init->gatherArrayRefs( refs, 0 ); // 0 ?? - cond->gatherArrayRefs( refs, 0 ); // 0 ?? - incr->gatherArrayRefs( refs, 0 ); // 0 ?? - body->gatherArrayRefs( refs, 0 ); // 0 ?? +void chillAST_ForStmt::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool writtento) { + init->gatherArrayRefs(refs, 0); // 0 ?? + cond->gatherArrayRefs(refs, 0); // 0 ?? + incr->gatherArrayRefs(refs, 0); // 0 ?? + body->gatherArrayRefs(refs, 0); // 0 ?? } -void chillAST_ForStmt::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) { - init->gatherScalarRefs( refs, 0 ); // 0 ?? - cond->gatherScalarRefs( refs, 0 ); // 0 ?? - incr->gatherScalarRefs( refs, 0 ); // 0 ?? - body->gatherScalarRefs( refs, 0 ); // 0 ?? -} - -void chillAST_ForStmt::gatherDeclRefExprs( vector<chillAST_DeclRefExpr *>&refs ) { - init->gatherDeclRefExprs( refs ); - cond->gatherDeclRefExprs( refs ); - incr->gatherDeclRefExprs( refs ); - body->gatherDeclRefExprs( refs ); +void chillAST_ForStmt::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { + init->gatherScalarRefs(refs, 0); // 0 ?? + cond->gatherScalarRefs(refs, 0); // 0 ?? + incr->gatherScalarRefs(refs, 0); // 0 ?? + body->gatherScalarRefs(refs, 0); // 0 ?? } +void chillAST_ForStmt::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) { + init->gatherDeclRefExprs(refs); + cond->gatherDeclRefExprs(refs); + incr->gatherDeclRefExprs(refs); + body->gatherDeclRefExprs(refs); +} -void chillAST_ForStmt::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - init->gatherVarUsage( decls ); - cond->gatherVarUsage( decls ); - incr->gatherVarUsage( decls ); - body->gatherVarUsage( decls ); +void chillAST_ForStmt::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + init->gatherVarUsage(decls); + cond->gatherVarUsage(decls); + incr->gatherVarUsage(decls); + body->gatherVarUsage(decls); } -void chillAST_ForStmt::gatherStatements(std::vector<chillAST_node*> &statements ){ - +void chillAST_ForStmt::gatherStatements(std::vector<chillAST_node *> &statements) { + // for completeness, should do all 4. Maybe someday - //init->gatherStatements( statements ); - //cond->gatherStatements( statements ); - //incr->gatherStatements( statements ); - body->gatherStatements( statements ); + //init->gatherStatements( statements ); + //cond->gatherStatements( statements ); + //incr->gatherStatements( statements ); + body->gatherStatements(statements); } - void chillAST_ForStmt::addSyncs() { - //fprintf(stderr, "\nchillAST_ForStmt::addSyncs() "); + //fprintf(stderr, "\nchillAST_ForStmt::addSyncs() "); //fprintf(stderr, "for ("); //init->print(0, stderr); //fprintf(stderr, "; "); //cond->print(0, stderr); //fprintf(stderr, "; "); //incr->print(0, stderr); - //fprintf(stderr, ")\n"); - - if (!parent) { + //fprintf(stderr, ")\n"); + + if (!parent) { fprintf(stderr, "uhoh, chillAST_ForStmt::addSyncs() ForStmt has no parent!\n"); fprintf(stderr, "for ("); init->print(0, stderr); @@ -1768,86 +1736,83 @@ void chillAST_ForStmt::addSyncs() { cond->print(0, stderr); fprintf(stderr, "; "); incr->print(0, stderr); - fprintf(stderr, ")\n"); + fprintf(stderr, ")\n"); - return; // exit? + return; // exit? } - if (parent->isCompoundStmt()) { + if (parent->isCompoundStmt()) { //fprintf(stderr, "ForStmt parent is CompoundStmt 0x%x\n", parent); - vector<chillAST_node*> chillin = parent->getChildren(); + vector<chillAST_node *> chillin = parent->getChildren(); int numc = chillin.size(); //fprintf(stderr, "ForStmt parent is CompoundStmt 0x%x with %d children\n", parent, numc); - for (int i=0; i<numc; i++) { - if (this == parent->getChild(i)) { - //fprintf(stderr, "forstmt 0x%x is child %d of %d\n", this, i, numc); + for (int i = 0; i < numc; i++) { + if (this == parent->getChild(i)) { + //fprintf(stderr, "forstmt 0x%x is child %d of %d\n", this, i, numc); chillAST_CudaSyncthreads *ST = new chillAST_CudaSyncthreads(); - parent->insertChild(i+1, ST); // corrupts something ... - //fprintf(stderr, "Create a call to __syncthreads() 2\n"); - //parent->addChild(ST); // wrong, but safer still kills + parent->insertChild(i + 1, ST); // corrupts something ... + //fprintf(stderr, "Create a call to __syncthreads() 2\n"); + //parent->addChild(ST); // wrong, but safer still kills } } chillin = parent->getChildren(); int nowc = chillin.size(); - //fprintf(stderr, "old, new number of children = %d %d\n", numc, nowc); - - } - else { - fprintf(stderr, "chillAST_ForStmt::addSyncs() unhandled parent type %s\n", parent->getTypeString()); - exit(-1); + //fprintf(stderr, "old, new number of children = %d %d\n", numc, nowc); + + } else { + fprintf(stderr, "chillAST_ForStmt::addSyncs() unhandled parent type %s\n", parent->getTypeString()); + exit(-1); } - //fprintf(stderr, "leaving addSyncs()\n"); + //fprintf(stderr, "leaving addSyncs()\n"); } - - -void chillAST_ForStmt::removeSyncComment() { - //fprintf(stderr, "chillAST_ForStmt::removeSyncComment()\n"); - if (metacomment && strstr(metacomment, "~cuda~") && strstr(metacomment, "preferredIdx: ")) { - char *ptr = strlen( "preferredIdx: " ) + strstr(metacomment, "preferredIdx: "); - *ptr = '\0'; +void chillAST_ForStmt::removeSyncComment() { + //fprintf(stderr, "chillAST_ForStmt::removeSyncComment()\n"); + if (metacomment && strstr(metacomment, "~cuda~") && strstr(metacomment, "preferredIdx: ")) { + char *ptr = strlen("preferredIdx: ") + strstr(metacomment, "preferredIdx: "); + *ptr = '\0'; } } -bool chillAST_ForStmt::findLoopIndexesToReplace(chillAST_SymbolTable *symtab, bool forcesync ) { - fprintf(stderr, "\nchillAST_ForStmt::findLoopIndexesToReplace( force = %d )\n", forcesync); - //if (metacomment) fprintf(stderr, "metacomment '%s'\n", metacomment); +bool chillAST_ForStmt::findLoopIndexesToReplace(chillAST_SymbolTable *symtab, bool forcesync) { + fprintf(stderr, "\nchillAST_ForStmt::findLoopIndexesToReplace( force = %d )\n", forcesync); + //if (metacomment) fprintf(stderr, "metacomment '%s'\n", metacomment); bool force = forcesync; bool didasync = false; - if (forcesync) { - //fprintf(stderr, "calling addSyncs() because PREVIOUS ForStmt in a block had preferredIdx\n"); + if (forcesync) { + //fprintf(stderr, "calling addSyncs() because PREVIOUS ForStmt in a block had preferredIdx\n"); addSyncs(); - didasync = true; - } - - //fprintf(stderr, "chillAST_ForStmt::findLoopIndexesToReplace()\n"); - if (metacomment && strstr(metacomment, "~cuda~") && strstr(metacomment, "preferredIdx: ")) { - //fprintf(stderr, "metacomment '%s'\n", metacomment); - - char *copy = strdup(metacomment); - char *ptr = strstr(copy, "preferredIdx: "); - char *vname = ptr + strlen( "preferredIdx: " ); + didasync = true; + } + + //fprintf(stderr, "chillAST_ForStmt::findLoopIndexesToReplace()\n"); + if (metacomment && strstr(metacomment, "~cuda~") && strstr(metacomment, "preferredIdx: ")) { + //fprintf(stderr, "metacomment '%s'\n", metacomment); + + char *copy = strdup(metacomment); + char *ptr = strstr(copy, "preferredIdx: "); + char *vname = ptr + strlen("preferredIdx: "); char *space = strstr(vname, " "); // TODO index() - if (space) { - //fprintf(stderr, "vname = '%s'\n", vname); - force = true; + if (space) { + //fprintf(stderr, "vname = '%s'\n", vname); + force = true; } - if ((!didasync) && force ) { - //fprintf(stderr, "calling addSyncs() because ForStmt metacomment had preferredIdx '%s'\n", vname); + if ((!didasync) && force) { + //fprintf(stderr, "calling addSyncs() because ForStmt metacomment had preferredIdx '%s'\n", vname); addSyncs(); - removeSyncComment(); - didasync = true; + removeSyncComment(); + didasync = true; } - if (space) *space = '\0'; // if this is multiple words, grab the first one - //fprintf(stderr, "vname = '%s'\n", vname); - + if (space) *space = '\0'; // if this is multiple words, grab the first one + //fprintf(stderr, "vname = '%s'\n", vname); + //fprintf(stderr, "\nfor ("); //init->print(0, stderr); //fprintf(stderr, "; "); @@ -1856,74 +1821,75 @@ bool chillAST_ForStmt::findLoopIndexesToReplace(chillAST_SymbolTable *symtab, bo //incr->print(0, stderr); //fprintf(stderr, ") %s\n", metacomment ); //fprintf(stderr, "prefer '%s'\n", vname ); - - vector<chillAST_VarDecl*> decls; - init->gatherVarLHSUsage( decls ); - //cond->gatherVarUsage( decls ); - //incr->gatherVarUsage( decls ); - //fprintf(stderr, "forstmt has %d vardecls in init, cond, inc\n", decls.size()); - - if ( 1 != decls.size()) { + + vector<chillAST_VarDecl *> decls; + init->gatherVarLHSUsage(decls); + //cond->gatherVarUsage( decls ); + //incr->gatherVarUsage( decls ); + //fprintf(stderr, "forstmt has %d vardecls in init, cond, inc\n", decls.size()); + + if (1 != decls.size()) { fprintf(stderr, "uhoh, preferred index in for statement, but multiple variables used\n"); - print(0,stderr); - fprintf(stderr, "\nvariables are:\n"); - for (int i=0; i<decls.size(); i++) { - decls[i]->print(0,stderr); fprintf(stderr, "\n"); + print(0, stderr); + fprintf(stderr, "\nvariables are:\n"); + for (int i = 0; i < decls.size(); i++) { + decls[i]->print(0, stderr); + fprintf(stderr, "\n"); } - exit(0); + exit(0); } - chillAST_VarDecl* olddecl = decls[0]; + chillAST_VarDecl *olddecl = decls[0]; - // RIGHT NOW, change all the references that this loop wants swapped out + // RIGHT NOW, change all the references that this loop wants swapped out // find vardecl for named preferred index. it has to already exist - fprintf(stderr, "RIGHT NOW, change all the references that this loop wants swapped out \n"); + fprintf(stderr, "RIGHT NOW, change all the references that this loop wants swapped out \n"); - chillAST_VarDecl *newguy = findVariableNamed( vname ); // recursive - if (!newguy) { + chillAST_VarDecl *newguy = findVariableNamed(vname); // recursive + if (!newguy) { fprintf(stderr, "there was no variable named %s anywhere I could find\n", vname); } - // wrong - this only looks at variables defined in the forstmt, not + // wrong - this only looks at variables defined in the forstmt, not // in parents of the forstmt - //int numsym = symtab->size(); + //int numsym = symtab->size(); //fprintf(stderr, "%d symbols\n", numsym); - //for (int i=0; i<numsym; i++) { + //for (int i=0; i<numsym; i++) { // fprintf(stderr, "sym %d is '%s'\n", i, (*symtab)[i]->varname); - // if (!strcmp(vname, (*symtab)[i]->varname)) { + // if (!strcmp(vname, (*symtab)[i]->varname)) { // newguy = (*symtab)[i]; // } //} - if (!newguy) { - fprintf(stderr, "chillAST_ForStmt::findLoopIndexesToReplace() there is no defined variable %s\n", vname); + if (!newguy) { + fprintf(stderr, "chillAST_ForStmt::findLoopIndexesToReplace() there is no defined variable %s\n", vname); - // make one ?? seems like this should never happen - newguy = new chillAST_VarDecl( olddecl->vartype, vname, ""/*?*/, NULL ); + // make one ?? seems like this should never happen + newguy = new chillAST_VarDecl(olddecl->vartype, vname, ""/*?*/, NULL); // insert actual declaration in code location? how? // find parent of the ForStmt? // find parent^n of the ForStmt that is not a Forstmt? // find parent^n of the Forstmt that is a FunctionDecl? chillAST_node *contain = findContainingNonLoop(); - if (contain == NULL) { + if (contain == NULL) { fprintf(stderr, "nothing but loops all the way up?\n"); exit(0); } - fprintf(stderr, "containing non-loop is a %s\n", contain->getTypeString()); - - contain->print(0,stderr); - contain->insertChild( 0, newguy ); // ugly order TODO - contain->addVariableToSymbolTable( newguy ); // adds to first enclosing symbolTable - - if (! symbolTableHasVariableNamed( contain->getSymbolTable(), vname )) { - fprintf(stderr, "container doesn't have a var names %s afterwards???\n", vname); - exit(-1); + fprintf(stderr, "containing non-loop is a %s\n", contain->getTypeString()); + + contain->print(0, stderr); + contain->insertChild(0, newguy); // ugly order TODO + contain->addVariableToSymbolTable(newguy); // adds to first enclosing symbolTable + + if (!symbolTableHasVariableNamed(contain->getSymbolTable(), vname)) { + fprintf(stderr, "container doesn't have a var names %s afterwards???\n", vname); + exit(-1); } } - // swap out old for new in init, cond, incr, body - if (newguy) { - fprintf(stderr, "\nwill replace %s with %s in init, cond, incr\n", olddecl->varname, newguy->varname); + // swap out old for new in init, cond, incr, body + if (newguy) { + fprintf(stderr, "\nwill replace %s with %s in init, cond, incr\n", olddecl->varname, newguy->varname); fprintf(stderr, "was: for ("); init->print(0, stderr); fprintf(stderr, "; "); @@ -1931,11 +1897,11 @@ bool chillAST_ForStmt::findLoopIndexesToReplace(chillAST_SymbolTable *symtab, bo fprintf(stderr, "; "); incr->print(0, stderr); fprintf(stderr, ")\n"); - - - init->replaceVarDecls( olddecl, newguy ); - cond->replaceVarDecls( olddecl, newguy ); - incr->replaceVarDecls( olddecl, newguy ); + + + init->replaceVarDecls(olddecl, newguy); + cond->replaceVarDecls(olddecl, newguy); + incr->replaceVarDecls(olddecl, newguy); fprintf(stderr, " is: for ("); init->print(0, stderr); @@ -1945,74 +1911,74 @@ bool chillAST_ForStmt::findLoopIndexesToReplace(chillAST_SymbolTable *symtab, bo incr->print(0, stderr); fprintf(stderr, ")\n\n"); - fprintf(stderr,"recursing to ForStmt body of type %s\n", body->getTypeString()); - body->replaceVarDecls( olddecl, newguy ); + fprintf(stderr, "recursing to ForStmt body of type %s\n", body->getTypeString()); + body->replaceVarDecls(olddecl, newguy); fprintf(stderr, "\nafter recursing to body, this loop is (there should be no %s)\n", olddecl->varname); - print(0, stderr); fprintf(stderr, "\n"); - + print(0, stderr); + fprintf(stderr, "\n"); + } - + //if (!space) // there was only one preferred - //fprintf(stderr, "removing metacomment\n"); + //fprintf(stderr, "removing metacomment\n"); metacomment = NULL; // memleak } // check for more loops. We may have already swapped variables out in body (right above here) - body->findLoopIndexesToReplace( symtab, false ) ; + body->findLoopIndexesToReplace(symtab, false); - return force; + return force; } -void chillAST_ForStmt::replaceChild( chillAST_node *old, chillAST_node *newchild ){ - //fprintf(stderr, "chillAST_ForStmt::replaceChild() REALLY CALLING BODY->ReplaceCHILD\n"); - body->replaceChild( old, newchild ); +void chillAST_ForStmt::replaceChild(chillAST_node *old, chillAST_node *newchild) { + //fprintf(stderr, "chillAST_ForStmt::replaceChild() REALLY CALLING BODY->ReplaceCHILD\n"); + body->replaceChild(old, newchild); } - -void chillAST_ForStmt::replaceVarDecls( chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl){ - // logic problem if my loop var is olddecl! +void chillAST_ForStmt::replaceVarDecls(chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl) { + // logic problem if my loop var is olddecl! //fprintf(stderr, "chillAST_ForStmt::replaceVarDecls( old %s, new %s )\n", olddecl->varname, newdecl->varname); // this is called for inner loops! - init->replaceVarDecls( olddecl, newdecl ); - cond->replaceVarDecls( olddecl, newdecl ); - incr->replaceVarDecls( olddecl, newdecl ); - body->replaceVarDecls( olddecl, newdecl ); + init->replaceVarDecls(olddecl, newdecl); + cond->replaceVarDecls(olddecl, newdecl); + incr->replaceVarDecls(olddecl, newdecl); + body->replaceVarDecls(olddecl, newdecl); } -void chillAST_ForStmt::gatherLoopIndeces( std::vector<chillAST_VarDecl*> &indeces ) { - //fprintf(stderr, "chillAST_ForStmt::gatherLoopIndeces()\nloop is:\n"); print(0,stderr); +void chillAST_ForStmt::gatherLoopIndeces(std::vector<chillAST_VarDecl *> &indeces) { + //fprintf(stderr, "chillAST_ForStmt::gatherLoopIndeces()\nloop is:\n"); print(0,stderr); - vector<chillAST_VarDecl*> decls; - init->gatherVarLHSUsage( decls ); - cond->gatherVarLHSUsage( decls ); - incr->gatherVarLHSUsage( decls ); + vector<chillAST_VarDecl *> decls; + init->gatherVarLHSUsage(decls); + cond->gatherVarLHSUsage(decls); + incr->gatherVarLHSUsage(decls); // note: NOT GOING INTO BODY OF THE LOOP - int numdecls = decls.size(); + int numdecls = decls.size(); //fprintf(stderr, "gatherLoopIndeces(), %d lhs vardecls for this ForStmt\n", numdecls); - for (int i=0; i<decls.size(); i++) { + for (int i = 0; i < decls.size(); i++) { //fprintf(stderr, "%s %p\n", decls[i]->varname, decls[i] ); - indeces.push_back( decls[i] ); + indeces.push_back(decls[i]); } - + // Don't forget to keep heading upwards! if (parent) { - //fprintf(stderr, "loop %p has parent of type %s\n", this, parent->getTypeString()); - parent->gatherLoopIndeces( indeces ); + //fprintf(stderr, "loop %p has parent of type %s\n", this, parent->getTypeString()); + parent->gatherLoopIndeces(indeces); } //else fprintf(stderr, "this loop has no parent???\n"); } -void chillAST_ForStmt::gatherLoopVars( std::vector<std::string> &loopvars ) { +void chillAST_ForStmt::gatherLoopVars(std::vector<std::string> &loopvars) { //fprintf(stderr, "gathering loop vars for loop for ("); //init->print(0, stderr); //fprintf(stderr, "; "); @@ -2021,29 +1987,29 @@ void chillAST_ForStmt::gatherLoopVars( std::vector<std::string> &loopvars ) { //incr->print(0, stderr); //fprintf(stderr, ")\n" ); - //init->dump(0, stderr); + //init->dump(0, stderr); - vector<chillAST_VarDecl*> decls; - init->gatherVarLHSUsage( decls ); - cond->gatherVarLHSUsage( decls ); - incr->gatherVarLHSUsage( decls ); + vector<chillAST_VarDecl *> decls; + init->gatherVarLHSUsage(decls); + cond->gatherVarLHSUsage(decls); + incr->gatherVarLHSUsage(decls); // note: NOT GOING INTO BODY OF THE LOOP - - for (int i=0; i<decls.size(); i++) loopvars.push_back( strdup( decls[i]->varname )); + + for (int i = 0; i < decls.size(); i++) loopvars.push_back(strdup(decls[i]->varname)); } -void chillAST_ForStmt::loseLoopWithLoopVar( char *var ) { +void chillAST_ForStmt::loseLoopWithLoopVar(char *var) { - //fprintf(stderr, "\nchillAST_ForStmt::loseLoopWithLoopVar( %s )\n", var ); + //fprintf(stderr, "\nchillAST_ForStmt::loseLoopWithLoopVar( %s )\n", var ); - // now recurse (could do first, I suppose) + // now recurse (could do first, I suppose) // if you DON'T do this first, you may have already replaced yourself with this loop body // the body will no longer have this forstmt as parent, it will have the forstmt's parent as its parent - //fprintf(stderr, "forstmt 0x%x, recursing loseLoop to body 0x%x of type %s with parent 0x%x of type %s\n", this, body, body->getTypeString(), body->parent, body->parent->getTypeString()); - body->loseLoopWithLoopVar( var ) ; + //fprintf(stderr, "forstmt 0x%x, recursing loseLoop to body 0x%x of type %s with parent 0x%x of type %s\n", this, body, body->getTypeString(), body->parent, body->parent->getTypeString()); + body->loseLoopWithLoopVar(var); @@ -2051,306 +2017,309 @@ void chillAST_ForStmt::loseLoopWithLoopVar( char *var ) { // if *I* am a loop to be replaced, tell my parent to replace me with my loop body std::vector<std::string> loopvars; - gatherLoopVars( loopvars ); - - if (loopvars.size() != 1) { + gatherLoopVars(loopvars); + + if (loopvars.size() != 1) { fprintf(stderr, "uhoh, loop has more than a single loop var and trying to loseLoopWithLoopVar()\n"); - print(0,stderr); - fprintf(stderr, "\nvariables are:\n"); - for (int i=0; i<loopvars.size(); i++) { - fprintf(stderr, "%s\n", loopvars[i].c_str()); + print(0, stderr); + fprintf(stderr, "\nvariables are:\n"); + for (int i = 0; i < loopvars.size(); i++) { + fprintf(stderr, "%s\n", loopvars[i].c_str()); } - - exit(-1); + + exit(-1); } - + //fprintf(stderr, "my loop var %s, looking for %s\n", loopvars[0].c_str(), var ); - if (!strcmp(var, loopvars[0].c_str())) { + if (!strcmp(var, loopvars[0].c_str())) { //fprintf(stderr, "OK, trying to lose myself! for ("); //init->print(0, stderr); //fprintf(stderr, "; "); //cond->print(0, stderr); //fprintf(stderr, "; "); //incr->print(0, stderr); - //fprintf(stderr, ")\n" ); + //fprintf(stderr, ")\n" ); - if (!parent) { + if (!parent) { fprintf(stderr, "chillAST_ForStmt::loseLoopWithLoopVar() I have no parent!\n"); exit(-1); } - vector<chillAST_VarDecl*> decls; - init->gatherVarLHSUsage( decls ); // this can fail if init is outside the loop - cond->gatherVarLHSUsage( decls ); - incr->gatherVarLHSUsage( decls ); - if (decls.size() > 1) { + vector<chillAST_VarDecl *> decls; + init->gatherVarLHSUsage(decls); // this can fail if init is outside the loop + cond->gatherVarLHSUsage(decls); + incr->gatherVarLHSUsage(decls); + if (decls.size() > 1) { fprintf(stderr, "chill_ast.cc multiple loop variables confuses me\n"); - exit(-1); + exit(-1); } - chillAST_node *newstmt = body; + chillAST_node *newstmt = body; // ACTUALLY, if I am being replaced, and my loop conditional is a min (Ternary), then wrap my loop body in an if statement if (cond->isBinaryOperator()) { // what else could it be? chillAST_BinaryOperator *BO = (chillAST_BinaryOperator *) cond; - if (BO->rhs->isTernaryOperator()) { + if (BO->rhs->isTernaryOperator()) { + + chillAST_TernaryOperator *TO = (chillAST_TernaryOperator *) BO->rhs; + chillAST_BinaryOperator *C = (chillAST_BinaryOperator *) TO->condition; - chillAST_TernaryOperator *TO = (chillAST_TernaryOperator *)BO->rhs; - chillAST_BinaryOperator *C = (chillAST_BinaryOperator *)TO->condition; - //fprintf(stderr, "loop condition RHS is ternary\nCondition RHS"); - C->print(); printf("\n"); fflush(stdout); + C->print(); + printf("\n"); + fflush(stdout); chillAST_node *l = C->lhs; - if (l->isParenExpr()) l = ((chillAST_ParenExpr *)l)->subexpr; + if (l->isParenExpr()) l = ((chillAST_ParenExpr *) l)->subexpr; chillAST_node *r = C->rhs; - if (r->isParenExpr()) r = ((chillAST_ParenExpr *)r)->subexpr; + if (r->isParenExpr()) r = ((chillAST_ParenExpr *) r)->subexpr; - //fprintf(stderr, "lhs is %s rhs is %s\n", l->getTypeString(), r->getTypeString()); - - chillAST_node *ifcondrhs = NULL; + //fprintf(stderr, "lhs is %s rhs is %s\n", l->getTypeString(), r->getTypeString()); + + chillAST_node *ifcondrhs = NULL; if (!(l->isConstant())) ifcondrhs = l; else if (!(r->isConstant())) ifcondrhs = r; - else { + else { // should never happen. 2 constants. infinite loop - fprintf(stderr, "chill_ast.cc INIFNITE LOOP?\n"); - this->print(0,stderr); fprintf(stderr, "\n\n"); + fprintf(stderr, "chill_ast.cc INIFNITE LOOP?\n"); + this->print(0, stderr); + fprintf(stderr, "\n\n"); exit(-1); } - + // wrap the loop body in an if - chillAST_DeclRefExpr *DRE = new chillAST_DeclRefExpr( decls[0] ); - chillAST_BinaryOperator *ifcond = new chillAST_BinaryOperator( DRE, "<=", ifcondrhs ); - chillAST_IfStmt *ifstmt = new chillAST_IfStmt( ifcond, body, NULL, NULL ); - - newstmt = ifstmt; + chillAST_DeclRefExpr *DRE = new chillAST_DeclRefExpr(decls[0]); + chillAST_BinaryOperator *ifcond = new chillAST_BinaryOperator(DRE, "<=", ifcondrhs); + chillAST_IfStmt *ifstmt = new chillAST_IfStmt(ifcond, body, NULL, NULL); + + newstmt = ifstmt; } } - //fprintf(stderr, "forstmt 0x%x has parent 0x%x of type %s\n", this, parent, parent->getTypeString()); + //fprintf(stderr, "forstmt 0x%x has parent 0x%x of type %s\n", this, parent, parent->getTypeString()); //fprintf(stderr, "forstmt will be replaced by\n"); - //newstmt->print(0,stderr); fprintf(stderr, "\n\n"); + //newstmt->print(0,stderr); fprintf(stderr, "\n\n"); - parent->replaceChild( this, newstmt ); + parent->replaceChild(this, newstmt); } } - - - chillAST_BinaryOperator::chillAST_BinaryOperator() { //fprintf(stderr, "chillAST_BinaryOperator::chillAST_BinaryOperator() %p no parent\n", this); CHILL_DEBUG_PRINT("no parent\n"); lhs = rhs = NULL; op = NULL; - asttype = CHILLAST_NODETYPE_BINARYOPERATOR; - isFromSourceFile = true; // default + asttype = CHILLAST_NODETYPE_BINARYOPERATOR; + isFromSourceFile = true; // default filename = NULL; } -chillAST_BinaryOperator::chillAST_BinaryOperator(chillAST_node *l, const char *oper, chillAST_node *r, chillAST_node *par) { - //fprintf(stderr, "chillAST_BinaryOperator::chillAST_BinaryOperator( l %p %s r %p, parent %p) this %p\n", l, oper, r, par, this); +chillAST_BinaryOperator::chillAST_BinaryOperator(chillAST_node *l, const char *oper, chillAST_node *r, + chillAST_node *par) { + //fprintf(stderr, "chillAST_BinaryOperator::chillAST_BinaryOperator( l %p %s r %p, parent %p) this %p\n", l, oper, r, par, this); CHILL_DEBUG_PRINT("( l %s r )\n", oper); - //if (l && r ) { - // fprintf(stderr, "("); l->print(0,stderr); fprintf(stderr, ") %s (", oper); r->print(0,stderr); fprintf(stderr, ")\n\n"); - //} + //if (l && r ) { + // fprintf(stderr, "("); l->print(0,stderr); fprintf(stderr, ") %s (", oper); r->print(0,stderr); fprintf(stderr, ")\n\n"); + //} lhs = l; rhs = r; parent = par; - - if (lhs) lhs->setParent( this ); - if (rhs) rhs->setParent( this ); // may only have part of the lhs and rhs when binop is created + + if (lhs) lhs->setParent(this); + if (rhs) rhs->setParent(this); // may only have part of the lhs and rhs when binop is created op = strdup(oper); - asttype = CHILLAST_NODETYPE_BINARYOPERATOR; + asttype = CHILLAST_NODETYPE_BINARYOPERATOR; // if this writes to lhs and lhs type has an 'imwrittento' concept, set that up - if (isAssignmentOp()) { + if (isAssignmentOp()) { if (lhs && lhs->isArraySubscriptExpr()) { - ((chillAST_ArraySubscriptExpr*)lhs)->imwrittento = true; - //fprintf(stderr, "chillAST_BinaryOperator, op '=', lhs is an array reference LVALUE\n"); + ((chillAST_ArraySubscriptExpr *) lhs)->imwrittento = true; + //fprintf(stderr, "chillAST_BinaryOperator, op '=', lhs is an array reference LVALUE\n"); } } - if (isAugmentedAssignmentOp()) { // += etc - //fprintf(stderr, "isAugmentedAssignmentOp() "); print(); fflush(stdout); - if (lhs && lhs->isArraySubscriptExpr()) { - //fprintf(stderr, "lhs is also read from "); lhs->print(); fflush(stdout); - ((chillAST_ArraySubscriptExpr*)lhs)->imreadfrom = true; // note will ALSO have imwrittento true + if (isAugmentedAssignmentOp()) { // += etc + //fprintf(stderr, "isAugmentedAssignmentOp() "); print(); fflush(stdout); + if (lhs && lhs->isArraySubscriptExpr()) { + //fprintf(stderr, "lhs is also read from "); lhs->print(); fflush(stdout); + ((chillAST_ArraySubscriptExpr *) lhs)->imreadfrom = true; // note will ALSO have imwrittento true } } - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; } -int chillAST_BinaryOperator::evalAsInt() { +int chillAST_BinaryOperator::evalAsInt() { // very limited. allow +-*/ and integer literals ... - if (isAssignmentOp()) return rhs->evalAsInt(); // ?? ignores/loses lhs info + if (isAssignmentOp()) return rhs->evalAsInt(); // ?? ignores/loses lhs info - if (!strcmp("+", op)) { - //fprintf(stderr, "chillAST_BinaryOperator::evalAsInt() %d + %d\n", lhs->evalAsInt(), rhs->evalAsInt()); - return lhs->evalAsInt() + rhs->evalAsInt(); + if (!strcmp("+", op)) { + //fprintf(stderr, "chillAST_BinaryOperator::evalAsInt() %d + %d\n", lhs->evalAsInt(), rhs->evalAsInt()); + return lhs->evalAsInt() + rhs->evalAsInt(); } - if (!strcmp("-", op)) return lhs->evalAsInt() - rhs->evalAsInt(); - if (!strcmp("*", op)) return lhs->evalAsInt() * rhs->evalAsInt(); - if (!strcmp("/", op)) return lhs->evalAsInt() / rhs->evalAsInt(); - - fprintf(stderr, "chillAST_BinaryOperator::evalAsInt() unhandled op '%s'\n", op); - segfault(); + if (!strcmp("-", op)) return lhs->evalAsInt() - rhs->evalAsInt(); + if (!strcmp("*", op)) return lhs->evalAsInt() * rhs->evalAsInt(); + if (!strcmp("/", op)) return lhs->evalAsInt() / rhs->evalAsInt(); + + fprintf(stderr, "chillAST_BinaryOperator::evalAsInt() unhandled op '%s'\n", op); + exit(-1); } -chillAST_IntegerLiteral *chillAST_BinaryOperator::evalAsIntegerLiteral() { - return new chillAST_IntegerLiteral( evalAsInt() ); // ?? +chillAST_IntegerLiteral *chillAST_BinaryOperator::evalAsIntegerLiteral() { + return new chillAST_IntegerLiteral(evalAsInt()); // ?? } -void chillAST_BinaryOperator::dump( int indent, FILE *fp ) { - chillindent(indent, fp); +void chillAST_BinaryOperator::dump(int indent, FILE *fp) { + chillindent(indent, fp); fprintf(fp, "(BinaryOperator '%s'\n", op); - if (lhs) lhs->dump(indent+1, fp); // lhs could be null - else { chillindent(indent+1, fp); fprintf(fp, "(NULL)\n"); } - fflush(fp); + if (lhs) lhs->dump(indent + 1, fp); // lhs could be null + else { + chillindent(indent + 1, fp); + fprintf(fp, "(NULL)\n"); + } + fflush(fp); - if (rhs) rhs->dump(indent+1, fp); // rhs could be null - else { chillindent(indent+1, fp); fprintf(fp, "(NULL)\n"); } - fflush(fp); + if (rhs) rhs->dump(indent + 1, fp); // rhs could be null + else { + chillindent(indent + 1, fp); + fprintf(fp, "(NULL)\n"); + } + fflush(fp); - chillindent(indent, fp); + chillindent(indent, fp); fprintf(fp, ")\n"); - fflush(fp); + fflush(fp); } -void chillAST_BinaryOperator::print( int indent, FILE *fp ) { // TODO this needparens logic is wrong - printPreprocBEFORE(indent, fp); +void chillAST_BinaryOperator::print(int indent, FILE *fp) { // TODO this needparens logic is wrong + printPreprocBEFORE(indent, fp); - chillindent( indent, fp ); + chillindent(indent, fp); bool needparens = false; - if (lhs) { - if (lhs->isImplicitCastExpr()) { + if (lhs) { + if (lhs->isImplicitCastExpr()) { // fprintf(stderr, "\nlhs 0x%x isImplicitCastExpr()\n", lhs); // fprintf(stderr, "lhs subexpr 0x%x\n", ((chillAST_ImplicitCastExpr*)lhs)->subexpr); // fprintf(stderr, "lhs subexpr type %s\n", ((chillAST_ImplicitCastExpr*)lhs)->subexpr->getTypeString()); - // - if (((chillAST_ImplicitCastExpr*)lhs)->subexpr->isNotLeaf()) needparens = true; - } - else if (lhs->isNotLeaf()) { - if (isMinusOp() && lhs->isPlusOp()) needparens = false; - else if (isPlusMinusOp() && lhs->isMultDivOp()) needparens = false; + // + if (((chillAST_ImplicitCastExpr *) lhs)->subexpr->isNotLeaf()) needparens = true; + } else if (lhs->isNotLeaf()) { + if (isMinusOp() && lhs->isPlusOp()) needparens = false; + else if (isPlusMinusOp() && lhs->isMultDivOp()) needparens = false; else needparens = true; } } - //fprintf(stderr, "\n\nbinop "); - //lhs->printonly(0,stderr); - //fprintf(stderr," %s ",op); - //rhs->printonly(0,stderr); - //fprintf(stderr,"\n"); + //fprintf(stderr, "\n\nbinop "); + //lhs->printonly(0,stderr); + //fprintf(stderr," %s ",op); + //rhs->printonly(0,stderr); + //fprintf(stderr,"\n"); //fprintf(stderr, "op is %s lhs %s rhs %s\n", op, lhs->getTypeString(), rhs->getTypeString()); - //fprintf(stderr, "lhs "); lhs->printonly(0, stderr); fprintf(stderr, " "); - //fprintf(stderr, "lhs needparens = %d\n", needparens); + //fprintf(stderr, "lhs "); lhs->printonly(0, stderr); fprintf(stderr, " "); + //fprintf(stderr, "lhs needparens = %d\n", needparens); if (needparens) fprintf(fp, "("); - if (lhs) lhs->print( 0, fp ); - else fprintf(fp, "(NULL)"); - if (needparens) fprintf(fp, ")"); + if (lhs) lhs->print(0, fp); + else fprintf(fp, "(NULL)"); + if (needparens) fprintf(fp, ")"); - fprintf( fp, " %s ", op); + fprintf(fp, " %s ", op); needparens = false; - //fprintf(stderr, "binop rhs is of type %s\n", rhs->getTypeString()); - if (rhs) { - if (rhs->isImplicitCastExpr()) { - if (((chillAST_ImplicitCastExpr*)rhs)->subexpr->isNotLeaf()) needparens = true; - } - //else if (rhs->isNotLeaf()) needparens = true; // too many parens. test too simple - else if (rhs->isNotLeaf()) { + //fprintf(stderr, "binop rhs is of type %s\n", rhs->getTypeString()); + if (rhs) { + if (rhs->isImplicitCastExpr()) { + if (((chillAST_ImplicitCastExpr *) rhs)->subexpr->isNotLeaf()) needparens = true; + } + //else if (rhs->isNotLeaf()) needparens = true; // too many parens. test too simple + else if (rhs->isNotLeaf()) { // really need the precedence ordering, and check relative of op and rhs op - if (isMinusOp() ) needparens = true; // safer. perhaps complicated thing on rhs of a minus - else if (isPlusMinusOp() && rhs->isMultDivOp()) needparens = false; + if (isMinusOp()) needparens = true; // safer. perhaps complicated thing on rhs of a minus + else if (isPlusMinusOp() && rhs->isMultDivOp()) needparens = false; else needparens = true; } } - //fprintf(stderr, "rhs "); rhs->printonly(0, stderr); fprintf(stderr, " "); - //fprintf(stderr, "rhs needparens = %d\n\n", needparens); - //if (!needparens) fprintf(stderr, "rhs isNotLeaf() = %d\n", rhs->isNotLeaf()); + //fprintf(stderr, "rhs "); rhs->printonly(0, stderr); fprintf(stderr, " "); + //fprintf(stderr, "rhs needparens = %d\n\n", needparens); + //if (!needparens) fprintf(stderr, "rhs isNotLeaf() = %d\n", rhs->isNotLeaf()); if (needparens) fprintf(fp, "("); - if (rhs) rhs->print( 0, fp ); - else fprintf(fp, "(NULL)"); - if (needparens) fprintf(fp, ")"); - fflush(fp); - printPreprocAFTER(indent, fp); + if (rhs) rhs->print(0, fp); + else fprintf(fp, "(NULL)"); + if (needparens) fprintf(fp, ")"); + fflush(fp); + printPreprocAFTER(indent, fp); } -char *chillAST_BinaryOperator::stringRep(int indent ) { - std::string s = string( lhs->stringRep() ) + " " + op + " " + string(lhs->stringRep() ); - return strdup( s.c_str() ); +char *chillAST_BinaryOperator::stringRep(int indent) { + std::string s = string(lhs->stringRep()) + " " + op + " " + string(lhs->stringRep()); + return strdup(s.c_str()); } +void chillAST_BinaryOperator::printonly(int indent, FILE *fp) { -void chillAST_BinaryOperator::printonly( int indent, FILE *fp ) { - - lhs->printonly( indent, fp ); - fprintf( fp, " %s ", op); - rhs->printonly( 0, fp ); - fflush(fp); - + lhs->printonly(indent, fp); + fprintf(fp, " %s ", op); + rhs->printonly(0, fp); + fflush(fp); } -class chillAST_node* chillAST_BinaryOperator::constantFold() { +class chillAST_node *chillAST_BinaryOperator::constantFold() { //fprintf(stderr, "\nchillAST_BinaryOperator::constantFold() "); //print(0,stderr); fprintf(stderr, "\n"); lhs = lhs->constantFold(); rhs = rhs->constantFold(); - + chillAST_node *returnval = this; - if (lhs->isConstant() && rhs->isConstant() ) { + if (lhs->isConstant() && rhs->isConstant()) { //fprintf(stderr, "binop folding constants\n"); print(0,stderr); fprintf(stderr, "\n"); - if (streq(op, "+") || streq(op, "-") || streq(op, "*")) { + if (streq(op, "+") || streq(op, "-") || streq(op, "*")) { if (lhs->isIntegerLiteral() && rhs->isIntegerLiteral()) { - chillAST_IntegerLiteral *l = (chillAST_IntegerLiteral *)lhs; - chillAST_IntegerLiteral *r = (chillAST_IntegerLiteral *)rhs; + chillAST_IntegerLiteral *l = (chillAST_IntegerLiteral *) lhs; + chillAST_IntegerLiteral *r = (chillAST_IntegerLiteral *) rhs; chillAST_IntegerLiteral *I; - - if (streq(op, "+")) I = new chillAST_IntegerLiteral(l->value+r->value, parent); - if (streq(op, "-")) I = new chillAST_IntegerLiteral(l->value-r->value, parent); - if (streq(op, "*")) I = new chillAST_IntegerLiteral(l->value*r->value, parent); + + if (streq(op, "+")) I = new chillAST_IntegerLiteral(l->value + r->value, parent); + if (streq(op, "-")) I = new chillAST_IntegerLiteral(l->value - r->value, parent); + if (streq(op, "*")) I = new chillAST_IntegerLiteral(l->value * r->value, parent); returnval = I; //fprintf(stderr, "%d %s %d becomes %d\n", l->value,op, r->value, I->value); - } - else { // at least one is a float + } else { // at least one is a float // usually don't want to do this for floats or doubles - // could probably check for special cases like 0.0/30.0 or X/X or X/1.0 + // could probably check for special cases like 0.0/30.0 or X/X or X/1.0 #ifdef FOLDFLOATS - float lval, rval; - if (lhs->isIntegerLiteral()) { - lval = (float) ((chillAST_IntegerLiteral *)lhs)->value; + float lval, rval; + if (lhs->isIntegerLiteral()) { + lval = (float) ((chillAST_IntegerLiteral *)lhs)->value; } - else { - lval = ((chillAST_FloatingLiteral *)lhs)->value; + else { + lval = ((chillAST_FloatingLiteral *)lhs)->value; } - if (rhs->isIntegerLiteral()) { - rval = (float) ((chillAST_IntegerLiteral *)rhs)->value; + if (rhs->isIntegerLiteral()) { + rval = (float) ((chillAST_IntegerLiteral *)rhs)->value; } - else { - rval = ((chillAST_FloatingLiteral *)rhs)->value; + else { + rval = ((chillAST_FloatingLiteral *)rhs)->value; } chillAST_FloatingLiteral *F; @@ -2363,301 +2332,297 @@ class chillAST_node* chillAST_BinaryOperator::constantFold() { } } - //else fprintf(stderr, "can't fold op '%s' yet\n", op); + //else fprintf(stderr, "can't fold op '%s' yet\n", op); } - //fprintf(stderr, "returning "); returnval->print(0,stderr); fprintf(stderr, "\n"); + //fprintf(stderr, "returning "); returnval->print(0,stderr); fprintf(stderr, "\n"); return returnval; } -class chillAST_node* chillAST_BinaryOperator::clone() { - //fprintf(stderr, "chillAST_BinaryOperator::clone() "); print(); printf("\n"); fflush(stdout); +class chillAST_node *chillAST_BinaryOperator::clone() { + //fprintf(stderr, "chillAST_BinaryOperator::clone() "); print(); printf("\n"); fflush(stdout); - chillAST_node* l = lhs->clone(); - chillAST_node* r = rhs->clone(); - chillAST_BinaryOperator *bo = new chillAST_BinaryOperator( l, op, r, parent ); - l->setParent( bo ); - r->setParent( bo ); + chillAST_node *l = lhs->clone(); + chillAST_node *r = rhs->clone(); + chillAST_BinaryOperator *bo = new chillAST_BinaryOperator(l, op, r, parent); + l->setParent(bo); + r->setParent(bo); bo->isFromSourceFile = isFromSourceFile; - if (filename) bo->filename = strdup(filename); + if (filename) bo->filename = strdup(filename); return bo; } -void chillAST_BinaryOperator::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool w ) { - //fprintf(stderr, "chillAST_BinaryOperator::gatherArrayRefs()\n"); - //print(); fflush(stdout); fprintf(stderr, "\n"); - //if (isAugmentedAssignmentOp()) { +void chillAST_BinaryOperator::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool w) { + //fprintf(stderr, "chillAST_BinaryOperator::gatherArrayRefs()\n"); + //print(); fflush(stdout); fprintf(stderr, "\n"); + //if (isAugmentedAssignmentOp()) { // fprintf(stderr, "%s is augmented assignment\n", op); //} - //if (isAssignmentOp()) { + //if (isAssignmentOp()) { // fprintf(stderr, "%s is assignment\n", op); //} //if (isAugmentedAssignmentOp()) { // lhs is ALSO on the RHS, NOT as a write // if (lhs->isArraySubscriptExpr()) { // probably some case where this fails - // ((chillAST_ArraySubscriptExpr *) lhs)->imreadfrom = true; + // ((chillAST_ArraySubscriptExpr *) lhs)->imreadfrom = true; // //lhs->&gatherArrayRefs( refs, 0 ); // } - //} + //} - //fprintf(stderr, "in chillAST_BinaryOperator::gatherArrayRefs(), %d &arrayrefs before\n", refs.size()); - lhs->gatherArrayRefs( refs, isAssignmentOp() ); - //fprintf(stderr, "in chillAST_BinaryOperator::gatherArrayRefs(), %d &arrayrefs after lhs\n", refs.size()); - rhs->gatherArrayRefs( refs, 0 ); - //fprintf(stderr, "in chillAST_BinaryOperator::gatherArrayRefs(), %d &refs\n", refs.size()); - - //for (int i=0; i<refs.size(); i++) { - // fprintf(stderr, "%s\n", (*refs)[i]->basedecl->varname); - //} + //fprintf(stderr, "in chillAST_BinaryOperator::gatherArrayRefs(), %d &arrayrefs before\n", refs.size()); + lhs->gatherArrayRefs(refs, isAssignmentOp()); + //fprintf(stderr, "in chillAST_BinaryOperator::gatherArrayRefs(), %d &arrayrefs after lhs\n", refs.size()); + rhs->gatherArrayRefs(refs, 0); + //fprintf(stderr, "in chillAST_BinaryOperator::gatherArrayRefs(), %d &refs\n", refs.size()); + + //for (int i=0; i<refs.size(); i++) { + // fprintf(stderr, "%s\n", (*refs)[i]->basedecl->varname); + //} } -void chillAST_BinaryOperator::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) { - lhs->gatherScalarRefs( refs, isAssignmentOp() ); - rhs->gatherScalarRefs( refs, 0 ); -} +void chillAST_BinaryOperator::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { + lhs->gatherScalarRefs(refs, isAssignmentOp()); + rhs->gatherScalarRefs(refs, 0); +} -void chillAST_BinaryOperator::replaceChild( chillAST_node *old, chillAST_node *newchild ) { +void chillAST_BinaryOperator::replaceChild(chillAST_node *old, chillAST_node *newchild) { //fprintf(stderr, "\nbinop::replaceChild( old 0x%x, new ) lhs 0x%x rhd 0x%x\n", old, lhs, rhs); // will pointers match?? - if (lhs == old) setLHS( newchild ); - else if (rhs == old) setRHS( newchild ); - - // silently ignore? - //else { + if (lhs == old) setLHS(newchild); + else if (rhs == old) setRHS(newchild); + + // silently ignore? + //else { // fprintf(stderr, "\nERROR chillAST_BinaryOperator::replaceChild( old 0x%x, new ) lhs 0x%x rhd 0x%x\n", old, lhs, rhs); // fprintf(stderr, "old is not a child of this BinaryOperator\n"); // print(); // dump(); - // exit(-1); - //} + // exit(-1); + //} } +void chillAST_BinaryOperator::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + //fprintf(stderr, "chillAST_BinaryOperator::gatherVarDecls()\n"); -void chillAST_BinaryOperator::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - //fprintf(stderr, "chillAST_BinaryOperator::gatherVarDecls()\n"); - - //fprintf(stderr, "chillAST_BinaryOperator::gatherVarDecls() before %d\n", decls.size()); - //print(0,stderr); fprintf(stderr, "\n"); - //fprintf(stderr, "lhs is %s\n", lhs->getTypeString()); - if (lhs) lhs->gatherVarDecls( decls ); // 'if' to deal with partially formed - if (rhs) rhs->gatherVarDecls( decls ); - //fprintf(stderr, "after %d\n", decls.size()); + //fprintf(stderr, "chillAST_BinaryOperator::gatherVarDecls() before %d\n", decls.size()); + //print(0,stderr); fprintf(stderr, "\n"); + //fprintf(stderr, "lhs is %s\n", lhs->getTypeString()); + if (lhs) lhs->gatherVarDecls(decls); // 'if' to deal with partially formed + if (rhs) rhs->gatherVarDecls(decls); + //fprintf(stderr, "after %d\n", decls.size()); } -void chillAST_BinaryOperator::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - //fprintf(stderr, "chillAST_BinaryOperator::gatherScalarVarDecls() before %d\n", decls.size()); - //fprintf(stderr, "lhs is %s\n", lhs->getTypeString()); - lhs->gatherScalarVarDecls( decls ); - rhs->gatherScalarVarDecls( decls ); - //fprintf(stderr, "after %d\n", decls.size()); +void chillAST_BinaryOperator::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + //fprintf(stderr, "chillAST_BinaryOperator::gatherScalarVarDecls() before %d\n", decls.size()); + //fprintf(stderr, "lhs is %s\n", lhs->getTypeString()); + lhs->gatherScalarVarDecls(decls); + rhs->gatherScalarVarDecls(decls); + //fprintf(stderr, "after %d\n", decls.size()); } -void chillAST_BinaryOperator::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - //fprintf(stderr, "chillAST_BinaryOperator::gatherArrayVarDecls() before %d\n", decls.size()); - //fprintf(stderr, "lhs is %s\n", lhs->getTypeString()); - lhs->gatherArrayVarDecls( decls ); - rhs->gatherArrayVarDecls( decls ); - //fprintf(stderr, "after %d\n", decls.size()); +void chillAST_BinaryOperator::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + //fprintf(stderr, "chillAST_BinaryOperator::gatherArrayVarDecls() before %d\n", decls.size()); + //fprintf(stderr, "lhs is %s\n", lhs->getTypeString()); + lhs->gatherArrayVarDecls(decls); + rhs->gatherArrayVarDecls(decls); + //fprintf(stderr, "after %d\n", decls.size()); } - -void chillAST_BinaryOperator::gatherDeclRefExprs( vector<chillAST_DeclRefExpr *>&refs ) { - lhs->gatherDeclRefExprs( refs ); - rhs->gatherDeclRefExprs( refs ); +void chillAST_BinaryOperator::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) { + lhs->gatherDeclRefExprs(refs); + rhs->gatherDeclRefExprs(refs); } -void chillAST_BinaryOperator::gatherStatements(std::vector<chillAST_node*> &statements ){ - +void chillAST_BinaryOperator::gatherStatements(std::vector<chillAST_node *> &statements) { + // what's legit? - if (isAssignmentOp()) { - statements.push_back( this ); + if (isAssignmentOp()) { + statements.push_back(this); } } - - -void chillAST_BinaryOperator::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - lhs->gatherVarUsage( decls ); - rhs->gatherVarUsage( decls ); +void chillAST_BinaryOperator::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + lhs->gatherVarUsage(decls); + rhs->gatherVarUsage(decls); } -void chillAST_BinaryOperator::gatherVarLHSUsage( vector<chillAST_VarDecl*> &decls ) { - lhs->gatherVarUsage( decls ); +void chillAST_BinaryOperator::gatherVarLHSUsage(vector<chillAST_VarDecl *> &decls) { + lhs->gatherVarUsage(decls); } - void chillAST_BinaryOperator::replaceVarDecls( chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl) { - //if (!strcmp(op, "<=")) { - // fprintf(stderr, "chillAST_BinaryOperator::replaceVarDecls( old %s, new %s)\n", olddecl->varname, newdecl->varname ); - // print(); printf("\n"); fflush(stdout); - // fprintf(stderr, "binaryoperator, lhs is of type %s\n", lhs->getTypeString()); - // fprintf(stderr, "binaryoperator, rhs is of type %s\n", rhs->getTypeString()); - //} - lhs->replaceVarDecls( olddecl, newdecl ); - rhs->replaceVarDecls( olddecl, newdecl ); - //if (!strcmp(op, "<=")) { - // print(); printf("\n\n"); fflush(stdout); - //} - } +void chillAST_BinaryOperator::replaceVarDecls(chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl) { + //if (!strcmp(op, "<=")) { + // fprintf(stderr, "chillAST_BinaryOperator::replaceVarDecls( old %s, new %s)\n", olddecl->varname, newdecl->varname ); + // print(); printf("\n"); fflush(stdout); + // fprintf(stderr, "binaryoperator, lhs is of type %s\n", lhs->getTypeString()); + // fprintf(stderr, "binaryoperator, rhs is of type %s\n", rhs->getTypeString()); + //} + lhs->replaceVarDecls(olddecl, newdecl); + rhs->replaceVarDecls(olddecl, newdecl); + //if (!strcmp(op, "<=")) { + // print(); printf("\n\n"); fflush(stdout); + //} +} -bool chillAST_BinaryOperator::isSameAs( chillAST_node *other ){ +bool chillAST_BinaryOperator::isSameAs(chillAST_node *other) { if (!other->isBinaryOperator()) return false; - chillAST_BinaryOperator *o = (chillAST_BinaryOperator *)other; - if (strcmp(op, o->op)) return false; // different operators - return lhs->isSameAs( o->lhs ) && rhs->isSameAs( o->rhs ); // recurse + chillAST_BinaryOperator *o = (chillAST_BinaryOperator *) other; + if (strcmp(op, o->op)) return false; // different operators + return lhs->isSameAs(o->lhs) && rhs->isSameAs(o->rhs); // recurse } - - chillAST_TernaryOperator::chillAST_TernaryOperator() { op = strdup("?"); // the only one so far condition = lhs = rhs = NULL; - asttype = CHILLAST_NODETYPE_TERNARYOPERATOR; - isFromSourceFile = true; // default + asttype = CHILLAST_NODETYPE_TERNARYOPERATOR; + isFromSourceFile = true; // default filename = NULL; } -chillAST_TernaryOperator::chillAST_TernaryOperator(const char *oper, chillAST_node *c, chillAST_node *l, chillAST_node *r, chillAST_node *par) { - +chillAST_TernaryOperator::chillAST_TernaryOperator(const char *oper, chillAST_node *c, chillAST_node *l, + chillAST_node *r, chillAST_node *par) { + op = strdup(oper); - condition = c; condition->setParent( this ); - lhs = l; lhs->setParent( this ); - rhs = r; rhs->setParent( this ); - asttype = CHILLAST_NODETYPE_TERNARYOPERATOR; - isFromSourceFile = true; // default + condition = c; + condition->setParent(this); + lhs = l; + lhs->setParent(this); + rhs = r; + rhs->setParent(this); + asttype = CHILLAST_NODETYPE_TERNARYOPERATOR; + isFromSourceFile = true; // default filename = NULL; } -void chillAST_TernaryOperator::dump( int indent, FILE *fp ) { - chillindent(indent, fp); +void chillAST_TernaryOperator::dump(int indent, FILE *fp) { + chillindent(indent, fp); fprintf(fp, "(TernaryOperator '%s'\n", op); - condition->dump(indent+1, fp); - lhs->dump(indent+1, fp); - rhs->dump(indent+1, fp); - chillindent(indent, fp); + condition->dump(indent + 1, fp); + lhs->dump(indent + 1, fp); + rhs->dump(indent + 1, fp); + chillindent(indent, fp); fprintf(fp, ")\n"); fflush(fp); } -void chillAST_TernaryOperator::print( int indent, FILE *fp ) { - printPreprocBEFORE(indent, fp); +void chillAST_TernaryOperator::print(int indent, FILE *fp) { + printPreprocBEFORE(indent, fp); chillindent(indent, fp); fprintf(fp, "("); - condition->print(0,fp); - fprintf(fp, "%s", op); - lhs->print(0,fp); + condition->print(0, fp); + fprintf(fp, "%s", op); + lhs->print(0, fp); fprintf(fp, ":"); - rhs->print(0,fp); + rhs->print(0, fp); fprintf(fp, ")"); fflush(fp); } -void chillAST_TernaryOperator::replaceChild( chillAST_node *old, chillAST_node *newchild ) { +void chillAST_TernaryOperator::replaceChild(chillAST_node *old, chillAST_node *newchild) { //fprintf(stderr, "\nbinop::replaceChild( old 0x%x, new ) lhs 0x%x rhd 0x%x\n", old, lhs, rhs); // will pointers match?? - if (lhs == old) setLHS( newchild ); - else if (rhs == old) setRHS( newchild ); - else if (condition == old) setCond( newchild ); + if (lhs == old) setLHS(newchild); + else if (rhs == old) setRHS(newchild); + else if (condition == old) setCond(newchild); - // silently ignore? - //else { + // silently ignore? + //else { //} } -void chillAST_TernaryOperator::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - condition->gatherVarDecls( decls ); - lhs->gatherVarDecls( decls ); - rhs->gatherVarDecls( decls ); +void chillAST_TernaryOperator::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + condition->gatherVarDecls(decls); + lhs->gatherVarDecls(decls); + rhs->gatherVarDecls(decls); } -void chillAST_TernaryOperator::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - condition->gatherScalarVarDecls( decls ); - lhs->gatherScalarVarDecls( decls ); - rhs->gatherScalarVarDecls( decls ); +void chillAST_TernaryOperator::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + condition->gatherScalarVarDecls(decls); + lhs->gatherScalarVarDecls(decls); + rhs->gatherScalarVarDecls(decls); } -void chillAST_TernaryOperator::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - condition->gatherArrayVarDecls( decls ); - lhs->gatherArrayVarDecls( decls ); - rhs->gatherArrayVarDecls( decls ); +void chillAST_TernaryOperator::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + condition->gatherArrayVarDecls(decls); + lhs->gatherArrayVarDecls(decls); + rhs->gatherArrayVarDecls(decls); } - -void chillAST_TernaryOperator::gatherDeclRefExprs( vector<chillAST_DeclRefExpr *>&refs ) { - condition->gatherDeclRefExprs( refs ); - lhs->gatherDeclRefExprs( refs ); - rhs->gatherDeclRefExprs( refs ); +void chillAST_TernaryOperator::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) { + condition->gatherDeclRefExprs(refs); + lhs->gatherDeclRefExprs(refs); + rhs->gatherDeclRefExprs(refs); } - -void chillAST_TernaryOperator::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - condition->gatherVarUsage( decls ); - lhs->gatherVarUsage( decls ); - rhs->gatherVarUsage( decls ); +void chillAST_TernaryOperator::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + condition->gatherVarUsage(decls); + lhs->gatherVarUsage(decls); + rhs->gatherVarUsage(decls); } -void chillAST_TernaryOperator::gatherVarLHSUsage( vector<chillAST_VarDecl*> &decls ) { - // this makes no sense for ternary ?? +void chillAST_TernaryOperator::gatherVarLHSUsage(vector<chillAST_VarDecl *> &decls) { + // this makes no sense for ternary ?? } -void chillAST_TernaryOperator::replaceVarDecls( chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl) { - condition->replaceVarDecls( olddecl, newdecl ); - lhs->replaceVarDecls( olddecl, newdecl ); - rhs->replaceVarDecls( olddecl, newdecl ); +void chillAST_TernaryOperator::replaceVarDecls(chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl) { + condition->replaceVarDecls(olddecl, newdecl); + lhs->replaceVarDecls(olddecl, newdecl); + rhs->replaceVarDecls(olddecl, newdecl); } -void chillAST_TernaryOperator::printonly( int indent, FILE *fp ) { +void chillAST_TernaryOperator::printonly(int indent, FILE *fp) { fprintf(fp, "("); - condition->printonly(0,fp); - fprintf(fp, "%s", op); - lhs->printonly(0,fp); + condition->printonly(0, fp); + fprintf(fp, "%s", op); + lhs->printonly(0, fp); fprintf(fp, ":"); - rhs->printonly(0,fp); + rhs->printonly(0, fp); fprintf(fp, ")"); fflush(fp); } -class chillAST_node* chillAST_TernaryOperator::constantFold() { +class chillAST_node *chillAST_TernaryOperator::constantFold() { condition = condition->constantFold(); lhs = lhs->constantFold(); rhs = rhs->constantFold(); - + chillAST_node *returnval = this; - if (condition->isConstant()) { + if (condition->isConstant()) { //fprintf(stderr, "ternop folding constants\n"); //print(0,stderr); //fprintf(stderr, "\n"); // assume op is "?" - // TODO - /* - - if (streq(op, "+") || streq(op, "-") || streq(op, "*")) { + // TODO + /* + + if (streq(op, "+") || streq(op, "-") || streq(op, "*")) { if (lhs->isIntegerLiteral() && rhs->isIntegerLiteral()) { chillAST_IntegerLiteral *l = (chillAST_IntegerLiteral *)lhs; chillAST_IntegerLiteral *r = (chillAST_IntegerLiteral *)rhs; chillAST_IntegerLiteral *I; - + if (streq(op, "+")) I = new chillAST_IntegerLiteral(l->value+r->value, parent); if (streq(op, "-")) I = new chillAST_IntegerLiteral(l->value-r->value, parent); if (streq(op, "*")) I = new chillAST_IntegerLiteral(l->value*r->value, parent); @@ -2667,17 +2632,17 @@ class chillAST_node* chillAST_TernaryOperator::constantFold() { } else { // at least one is a float float lval, rval; - if (lhs->isIntegerLiteral()) { - lval = (float) ((chillAST_IntegerLiteral *)lhs)->value; + if (lhs->isIntegerLiteral()) { + lval = (float) ((chillAST_IntegerLiteral *)lhs)->value; } - else { - lval = ((chillAST_FloatingLiteral *)lhs)->value; + else { + lval = ((chillAST_FloatingLiteral *)lhs)->value; } - if (rhs->isIntegerLiteral()) { - rval = (float) ((chillAST_IntegerLiteral *)rhs)->value; + if (rhs->isIntegerLiteral()) { + rval = (float) ((chillAST_IntegerLiteral *)rhs)->value; } - else { - rval = ((chillAST_FloatingLiteral *)rhs)->value; + else { + rval = ((chillAST_FloatingLiteral *)rhs)->value; } chillAST_FloatingLiteral *F; @@ -2688,238 +2653,232 @@ class chillAST_node* chillAST_TernaryOperator::constantFold() { returnval = F; } } - else fprintf(stderr, "can't fold op '%s' yet\n", op); + else fprintf(stderr, "can't fold op '%s' yet\n", op); */ } return returnval; } -class chillAST_node* chillAST_TernaryOperator::clone() { - chillAST_node* c = condition->clone(); - chillAST_node* l = lhs->clone(); - chillAST_node* r = rhs->clone(); - chillAST_TernaryOperator *to = new chillAST_TernaryOperator( op, l, r, parent ); - c->setParent( to ); - l->setParent( to ); - r->setParent( to ); +class chillAST_node *chillAST_TernaryOperator::clone() { + chillAST_node *c = condition->clone(); + chillAST_node *l = lhs->clone(); + chillAST_node *r = rhs->clone(); + chillAST_TernaryOperator *to = new chillAST_TernaryOperator(op, l, r, parent); + c->setParent(to); + l->setParent(to); + r->setParent(to); to->isFromSourceFile = isFromSourceFile; filename = NULL; return to; } -void chillAST_TernaryOperator::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool w ) { - condition->gatherArrayRefs( refs, isAssignmentOp() ); - lhs->gatherArrayRefs( refs, isAssignmentOp() ); - rhs->gatherArrayRefs( refs, 0 ); +void chillAST_TernaryOperator::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool w) { + condition->gatherArrayRefs(refs, isAssignmentOp()); + lhs->gatherArrayRefs(refs, isAssignmentOp()); + rhs->gatherArrayRefs(refs, 0); } -void chillAST_TernaryOperator::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) { - condition->gatherScalarRefs( refs, isAssignmentOp() ); - lhs->gatherScalarRefs( refs, isAssignmentOp() ); - rhs->gatherScalarRefs( refs, 0 ); -} - - - - - +void chillAST_TernaryOperator::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { + condition->gatherScalarRefs(refs, isAssignmentOp()); + lhs->gatherScalarRefs(refs, isAssignmentOp()); + rhs->gatherScalarRefs(refs, 0); +} -chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr() { - //fprintf(stderr, "\n%p chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr() 0\n", this); - asttype = CHILLAST_NODETYPE_ARRAYSUBSCRIPTEXPR; +chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr() { + //fprintf(stderr, "\n%p chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr() 0\n", this); + asttype = CHILLAST_NODETYPE_ARRAYSUBSCRIPTEXPR; base = index = NULL; - basedecl = NULL; //fprintf(stderr, "setting basedecl NULL for ASE %p\n", this); - imwrittento = false; // ?? - imreadfrom = false; // ?? + basedecl = NULL; //fprintf(stderr, "setting basedecl NULL for ASE %p\n", this); + imwrittento = false; // ?? + imreadfrom = false; // ?? parent = NULL; metacomment = NULL; //fprintf(stderr, "chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr() NEED TO FAKE A LOCATION\n"); - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; - //fprintf(stderr, "\nASE %p is empty\n", this); + //fprintf(stderr, "\nASE %p is empty\n", this); } - -chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr( chillAST_node *bas, chillAST_node *indx, chillAST_node *par, void *unique ) { +chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr(chillAST_node *bas, chillAST_node *indx, chillAST_node *par, + void *unique) { //fprintf(stderr, "\nchillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr() 1\n"); - //fprintf(stderr, "ASE index %p ", indx); indx->print(0,stderr); fprintf(stderr, "\n"); - asttype = CHILLAST_NODETYPE_ARRAYSUBSCRIPTEXPR; - bas->setParent( this ); - if (bas->isImplicitCastExpr()) base = ((chillAST_ImplicitCastExpr*)bas)->subexpr; // probably wrong - else base = bas; - if (indx->isImplicitCastExpr()) index = ((chillAST_ImplicitCastExpr*)indx)->subexpr; // probably wrong + //fprintf(stderr, "ASE index %p ", indx); indx->print(0,stderr); fprintf(stderr, "\n"); + asttype = CHILLAST_NODETYPE_ARRAYSUBSCRIPTEXPR; + bas->setParent(this); + if (bas->isImplicitCastExpr()) base = ((chillAST_ImplicitCastExpr *) bas)->subexpr; // probably wrong + else base = bas; + if (indx->isImplicitCastExpr()) index = ((chillAST_ImplicitCastExpr *) indx)->subexpr; // probably wrong else index = indx; - base->setParent( this ); - index->setParent( this ); + base->setParent(this); + index->setParent(this); - imwrittento = false; // ?? - imreadfrom = false; // ?? + imwrittento = false; // ?? + imreadfrom = false; // ?? uniquePtr = (void *) unique; - //fprintf(stderr,"chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr() original = 0x%x\n", uniquePtr); - //fprintf(stderr, "chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr() 1 calling multibase()\n"); - basedecl = multibase();//fprintf(stderr, "%p ASE 1 basedecl = %p\n",this,basedecl); + //fprintf(stderr,"chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr() original = 0x%x\n", uniquePtr); + //fprintf(stderr, "chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr() 1 calling multibase()\n"); + basedecl = multibase();//fprintf(stderr, "%p ASE 1 basedecl = %p\n",this,basedecl); //basedecl->print(); printf("\n"); - //basedecl->dump(); printf("\n"); fflush(stdout); - //fprintf(stderr, "basedecl varname %s\n", basedecl->varname); - isFromSourceFile = true; // default + //basedecl->dump(); printf("\n"); fflush(stdout); + //fprintf(stderr, "basedecl varname %s\n", basedecl->varname); + isFromSourceFile = true; // default filename = NULL; - //fprintf(stderr, "\nASE %p parent %p ", this, parent); print(0,stderr); fprintf(stderr, "\n\n"); + //fprintf(stderr, "\nASE %p parent %p ", this, parent); print(0,stderr); fprintf(stderr, "\n\n"); } +chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr(chillAST_node *bas, chillAST_node *indx, bool writtento, + chillAST_node *par, void *unique) { + //fprintf(stderr, "\nchillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr() 2 parent %p\n", par ); + //fprintf(stderr, "ASE %p index %p ", this, indx); indx->print(0,stderr); fprintf(stderr, "\n"); -chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr( chillAST_node *bas, chillAST_node *indx, bool writtento, chillAST_node *par, void *unique ) { - //fprintf(stderr, "\nchillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr() 2 parent %p\n", par ); - //fprintf(stderr, "ASE %p index %p ", this, indx); indx->print(0,stderr); fprintf(stderr, "\n"); - - asttype = CHILLAST_NODETYPE_ARRAYSUBSCRIPTEXPR; - bas->setParent( this ); - if (bas->isImplicitCastExpr()) base = ((chillAST_ImplicitCastExpr*)bas)->subexpr; // probably wrong + asttype = CHILLAST_NODETYPE_ARRAYSUBSCRIPTEXPR; + bas->setParent(this); + if (bas->isImplicitCastExpr()) base = ((chillAST_ImplicitCastExpr *) bas)->subexpr; // probably wrong else base = bas; - if (indx->isImplicitCastExpr()) index = ((chillAST_ImplicitCastExpr*)indx)->subexpr; // probably wrong + if (indx->isImplicitCastExpr()) index = ((chillAST_ImplicitCastExpr *) indx)->subexpr; // probably wrong else index = indx; - + //fprintf(stderr, "setting parent of base %p to %p\n", base, this); //fprintf(stderr, "setting parent of index %p to %p\n", index, this); - base->setParent( this ); - index->setParent( this ); - - imwrittento = writtento; // ?? + base->setParent(this); + index->setParent(this); + + imwrittento = writtento; // ?? //fprintf(stderr, "ASE %p imwrittento %d\n", this, imwrittento); - imreadfrom = false; // ?? + imreadfrom = false; // ?? uniquePtr = (void *) unique; - //fprintf(stderr,"chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr() original = 0x%x\n", uniquePtr); + //fprintf(stderr,"chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr() original = 0x%x\n", uniquePtr); - basedecl = multibase(); + basedecl = multibase(); - //fprintf(stderr, "%p ASE 2 basedecl = %p\n", this, basedecl); - //printf("basedecl is "); fflush(stdout); basedecl->print(); printf("\n"); fflush(stdout); + //fprintf(stderr, "%p ASE 2 basedecl = %p\n", this, basedecl); + //printf("basedecl is "); fflush(stdout); basedecl->print(); printf("\n"); fflush(stdout); //basedecl->dump(); printf("\n"); fflush(stdout); - //fprintf(stderr, "basedecl varname %s\n", basedecl->varname); - isFromSourceFile = true; // default + //fprintf(stderr, "basedecl varname %s\n", basedecl->varname); + isFromSourceFile = true; // default filename = NULL; //fprintf(stderr, "chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr() 2 DONE\n"); - //print(0,stderr); fprintf(stderr, "\n\n"); - //fprintf(stderr, "\nASE %p parent %p ", this, parent); print(0,stderr); fprintf(stderr, "\n\n"); - } - + //print(0,stderr); fprintf(stderr, "\n\n"); + //fprintf(stderr, "\nASE %p parent %p ", this, parent); print(0,stderr); fprintf(stderr, "\n\n"); +} -chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr( chillAST_VarDecl *v, std::vector<chillAST_node *> indeces, chillAST_node *par) { - //fprintf(stderr, "\nchillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr() 4\n"); +chillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr(chillAST_VarDecl *v, std::vector<chillAST_node *> indeces, + chillAST_node *par) { + //fprintf(stderr, "\nchillAST_ArraySubscriptExpr::chillAST_ArraySubscriptExpr() 4\n"); //fprintf(stderr,"chillAST_ArraySubscriptExpr( chillAST_VarDecl *v, std::vector<int> indeces)\n"); - asttype = CHILLAST_NODETYPE_ARRAYSUBSCRIPTEXPR; + asttype = CHILLAST_NODETYPE_ARRAYSUBSCRIPTEXPR; parent = par; - //if (parent == NULL) { - // fprintf(stderr, "dammit. ASE %p has no parent\n", this); - //} + //if (parent == NULL) { + // fprintf(stderr, "dammit. ASE %p has no parent\n", this); + //} int numindeces = indeces.size(); - for (int i=0; i<numindeces; i++) { - fprintf(stderr, "ASE index %d ", i); indeces[i]->print(0,stderr); fprintf(stderr, "\n"); - // printf("["); - // indeces[i]->print(); - // printf("]"); - } - //fflush(stdout); + for (int i = 0; i < numindeces; i++) { + fprintf(stderr, "ASE index %d ", i); + indeces[i]->print(0, stderr); + fprintf(stderr, "\n"); + // printf("["); + // indeces[i]->print(); + // printf("]"); + } + //fflush(stdout); //fprintf(stderr, "\n"); - - chillAST_DeclRefExpr *DRE = new chillAST_DeclRefExpr( v->vartype, v->varname, v, NULL); - basedecl = v; // ?? - //fprintf(stderr, "%p ASE 3 basedecl = %p ", this, basedecl); - //fprintf(stderr, "of type %s\n", basedecl->getTypeString()); + + chillAST_DeclRefExpr *DRE = new chillAST_DeclRefExpr(v->vartype, v->varname, v, NULL); + basedecl = v; // ?? + //fprintf(stderr, "%p ASE 3 basedecl = %p ", this, basedecl); + //fprintf(stderr, "of type %s\n", basedecl->getTypeString()); //basedecl->print(); printf("\n"); - //basedecl->dump(); printf("\n"); fflush(stdout); - //fprintf(stderr, "basedecl varname %s\n", basedecl->varname); - + //basedecl->dump(); printf("\n"); fflush(stdout); + //fprintf(stderr, "basedecl varname %s\n", basedecl->varname); + chillAST_ArraySubscriptExpr *rent = this; // parent for subnodes - - // these are on the top level ASE that we're creating here + + // these are on the top level ASE that we're creating here base = (chillAST_node *) DRE; - index = indeces[ numindeces-1]; + index = indeces[numindeces - 1]; + + base->setParent(this); + index->setParent(this); - base->setParent( this ); - index->setParent(this); + for (int i = numindeces - 2; i >= 0; i--) { - for (int i=numindeces-2; i>=0; i--) { - - chillAST_ArraySubscriptExpr *ASE = new chillAST_ArraySubscriptExpr( DRE, indeces[i], rent, 0); - rent->base = ASE; // + chillAST_ArraySubscriptExpr *ASE = new chillAST_ArraySubscriptExpr(DRE, indeces[i], rent, 0); + rent->base = ASE; // rent = ASE; } - + imwrittento = false; - imreadfrom = false; - //fprintf(stderr, "ASE is "); print(); printf("\n\n"); fflush(stdout); - isFromSourceFile = true; // default + imreadfrom = false; + //fprintf(stderr, "ASE is "); print(); printf("\n\n"); fflush(stdout); + isFromSourceFile = true; // default filename = NULL; - //fprintf(stderr, "\nASE %p parent %p ", this, parent); print(0,stderr); fprintf(stderr, "\n\n"); + //fprintf(stderr, "\nASE %p parent %p ", this, parent); print(0,stderr); fprintf(stderr, "\n\n"); } - -chillAST_node *chillAST_node::getEnclosingStatement( int level ) { // TODO do for subclasses? +chillAST_node *chillAST_node::getEnclosingStatement(int level) { // TODO do for subclasses? //fprintf(stderr, "chillAST_node::getEnclosingStatement( level %d ) node type %s\n", level, getTypeString()); //print(); printf("\n"); fflush(stdout); // so far, user will ONLY call this directly on an array subscript expression - if (isArraySubscriptExpr()) return parent->getEnclosingStatement( level+1); + if (isArraySubscriptExpr()) return parent->getEnclosingStatement(level + 1); - if (level != 0) { - if (isBinaryOperator() || - isUnaryOperator() || - isTernaryOperator() || - isReturnStmt() || + if (level != 0) { + if (isBinaryOperator() || + isUnaryOperator() || + isTernaryOperator() || + isReturnStmt() || isCallExpr() - ) return this; - - - // things that are not endpoints. recurse through parent - if (isMemberExpr()) return parent->getEnclosingStatement( level+1 ); - if (isImplicitCastExpr()) return parent->getEnclosingStatement( level+1 ); - if (isSizeof()) return parent->getEnclosingStatement( level+1 ); - if (isCStyleCastExpr()) return parent->getEnclosingStatement( level+1 ); + ) + return this; + + + // things that are not endpoints. recurse through parent + if (isMemberExpr()) return parent->getEnclosingStatement(level + 1); + if (isImplicitCastExpr()) return parent->getEnclosingStatement(level + 1); + if (isSizeof()) return parent->getEnclosingStatement(level + 1); + if (isCStyleCastExpr()) return parent->getEnclosingStatement(level + 1); return NULL; } - fprintf(stderr, "getEnclosingStatement() level %d type %s, returning NULL\n", level, getTypeString()); - segfault(); + fprintf(stderr, "getEnclosingStatement() level %d type %s, returning NULL\n", level, getTypeString()); + exit(-1); return NULL; } - -void chillAST_ArraySubscriptExpr::gatherIndeces(std::vector<chillAST_node*>&ind) { - if (base->isArraySubscriptExpr()) ((chillAST_ArraySubscriptExpr *)base)->gatherIndeces( ind ); - ind.push_back( index ); +void chillAST_ArraySubscriptExpr::gatherIndeces(std::vector<chillAST_node *> &ind) { + if (base->isArraySubscriptExpr()) ((chillAST_ArraySubscriptExpr *) base)->gatherIndeces(ind); + ind.push_back(index); } - -void chillAST_ArraySubscriptExpr::dump( int indent, FILE *fp ) { +void chillAST_ArraySubscriptExpr::dump(int indent, FILE *fp) { // fprintf(stderr, "\n%p chillAST_ArraySubscriptExpr::dump() basedecl %p\n", basedecl); - + char *local; if (basedecl && basedecl->vartype) { - local = strdup( basedecl->vartype ); - } - else { - fprintf(stderr, "%p chillAST_ArraySubscriptExpr::dump(), no basedecl ???\n",this); + local = strdup(basedecl->vartype); + } else { + fprintf(stderr, "%p chillAST_ArraySubscriptExpr::dump(), no basedecl ???\n", this); local = strdup(""); - //fprintf(stderr, "base is "); base->dump(); printf("\n"); base->print(); printf("\n"); fflush(stdout); + //fprintf(stderr, "base is "); base->dump(); printf("\n"); base->print(); printf("\n"); fflush(stdout); //print(); printf("\n"); fflush(stdout); } @@ -2929,811 +2888,819 @@ void chillAST_ArraySubscriptExpr::dump( int indent, FILE *fp ) { chillindent(indent, fp); //fprintf(fp, "(ArraySubscriptExpr '%s' ", local); - if (basedecl) { - //fprintf(stderr, " chillAST_ArraySubscriptExpr::dump() basedecl is of type %s\n", basedecl->getTypeString()); - fprintf(fp, "(ArraySubscriptExpr (%s) '%s' ", basedecl->varname, local); - } - else fprintf(stderr, " chillAST_ArraySubscriptExpr::dump() has no basedecl\n"); + if (basedecl) { + //fprintf(stderr, " chillAST_ArraySubscriptExpr::dump() basedecl is of type %s\n", basedecl->getTypeString()); + fprintf(fp, "(ArraySubscriptExpr (%s) '%s' ", basedecl->varname, local); + } else fprintf(stderr, " chillAST_ArraySubscriptExpr::dump() has no basedecl\n"); free(local); - if (imwrittento) { - if (imreadfrom) fprintf(fp, "lvalue AND rvalue\n"); - else fprintf(fp, "lvalue\n"); - } - else fprintf(fp, "rvalue\n"); - base->dump( indent+1, fp ); - index->dump(indent+1, fp); + if (imwrittento) { + if (imreadfrom) fprintf(fp, "lvalue AND rvalue\n"); + else fprintf(fp, "lvalue\n"); + } else fprintf(fp, "rvalue\n"); + base->dump(indent + 1, fp); + index->dump(indent + 1, fp); chillindent(indent, fp); fprintf(fp, ")\n"); - fflush(fp); + fflush(fp); } - -void chillAST_ArraySubscriptExpr::print( int indent, FILE *fp ) { - base->print( indent, fp ); +void chillAST_ArraySubscriptExpr::print(int indent, FILE *fp) { + base->print(indent, fp); fprintf(fp, "["); - index->print(0, fp); + index->print(0, fp); fprintf(fp, "]"); - fflush(fp); + fflush(fp); } -char *chillAST_ArraySubscriptExpr::stringRep(int indent ) { - fprintf(stderr, "chillAST_ArraySubscriptExpr::stringRep\n"); +char *chillAST_ArraySubscriptExpr::stringRep(int indent) { + fprintf(stderr, "chillAST_ArraySubscriptExpr::stringRep\n"); char *blurb; - char *b = base->stringRep(0); - char *i = index->stringRep(0); + char *b = base->stringRep(0); + char *i = index->stringRep(0); // combine. shoudl be using strings. much cleaner TODO std::string s = string(b) + "[" + string(i) + "]"; - fprintf(stderr, "ASE stringrep %s\n", s.c_str()); - return strdup( s.c_str()); - + fprintf(stderr, "ASE stringrep %s\n", s.c_str()); + return strdup(s.c_str()); + } -void chillAST_ArraySubscriptExpr::printonly( int indent, FILE *fp ) { - base->printonly( indent, fp ); +void chillAST_ArraySubscriptExpr::printonly(int indent, FILE *fp) { + base->printonly(indent, fp); fprintf(fp, "["); - index->printonly(0, fp); + index->printonly(0, fp); fprintf(fp, "]"); - fflush(fp); + fflush(fp); } -void chillAST_ArraySubscriptExpr::print( int indent, FILE *fp ) const { - base->print( indent, fp ); +void chillAST_ArraySubscriptExpr::print(int indent, FILE *fp) const { + base->print(indent, fp); fprintf(fp, "["); - index->print(0, fp); + index->print(0, fp); fprintf(fp, "]"); - fflush(fp); + fflush(fp); }; -chillAST_VarDecl *chillAST_ArraySubscriptExpr::multibase() { +chillAST_VarDecl *chillAST_ArraySubscriptExpr::multibase() { // return the VARDECL of the thing the subscript is an index into //this should probably be a chillAST_node function instead of having all these ifs - //print(); printf("\n"); fflush(stdout); - //base->print(); printf("\n"); fflush(stdout); - //fprintf(stderr, "chillAST_ArraySubscriptExpr::multibase() base of type %s\n", base->getTypeString()); - - return base->multibase(); + //print(); printf("\n"); fflush(stdout); + //base->print(); printf("\n"); fflush(stdout); + //fprintf(stderr, "chillAST_ArraySubscriptExpr::multibase() base of type %s\n", base->getTypeString()); + + return base->multibase(); // this will be used to SET basedecl //basedecl = NULL; // do this so we don't confuse ourselves looking at uninitialized basedecl - chillAST_node *b = base; + chillAST_node *b = base; //fprintf(stderr, "base is of type %s\n", b->getTypeString()); if (!b) return NULL; // just in case ?? if (base->asttype == CHILLAST_NODETYPE_IMPLICITCASTEXPR) { // bad coding - b = ((chillAST_ImplicitCastExpr*)b)->subexpr; + b = ((chillAST_ImplicitCastExpr *) b)->subexpr; } if (b->asttype == CHILLAST_NODETYPE_ARRAYSUBSCRIPTEXPR) { // multidimensional array! // recurse - return ((chillAST_ArraySubscriptExpr *)b)->multibase(); + return ((chillAST_ArraySubscriptExpr *) b)->multibase(); } - if (b->asttype == CHILLAST_NODETYPE_DECLREFEXPR) return(((chillAST_DeclRefExpr*)b)->getVarDecl()); + if (b->asttype == CHILLAST_NODETYPE_DECLREFEXPR) return (((chillAST_DeclRefExpr *) b)->getVarDecl()); - - if (b->isBinaryOperator()) { + + if (b->isBinaryOperator()) { // presumably a dot or pointer ref that resolves to an array chillAST_BinaryOperator *BO = (chillAST_BinaryOperator *) b; - if ( strcmp(BO->op, ".") ) { + if (strcmp(BO->op, ".")) { fprintf(stderr, "chillAST_ArraySubscriptExpr::multibase(), UNHANDLED case:\n"); - fprintf(stderr, "base is binary operator, of type %s\n", BO->op); + fprintf(stderr, "base is binary operator, of type %s\n", BO->op); exit(-1); } chillAST_node *l = BO->lhs; chillAST_node *r = BO->rhs; - printf("L %s\nR %s\n", l->getTypeString(), r->getTypeString()); - exit(-1); + printf("L %s\nR %s\n", l->getTypeString(), r->getTypeString()); + exit(-1); return NULL; // TODO do checks? } - if (b->isMemberExpr()) { + if (b->isMemberExpr()) { //c.i[c.count] we want i member of inspector chillAST_MemberExpr *ME = (chillAST_MemberExpr *) b; - //fprintf(stderr, "multibase() Member Expression "); ME->print(); printf("\n"); fflush(stdout); + //fprintf(stderr, "multibase() Member Expression "); ME->print(); printf("\n"); fflush(stdout); chillAST_node *n = ME->base; // WRONG want the MEMBER //fprintf(stderr, "chillAST_ArraySubscriptExpr::multibase() Member Expression base of type %s\n", n->getTypeString()); - //fprintf(stderr, "base is "); ME->base->dump(); + //fprintf(stderr, "base is "); ME->base->dump(); // NEED to be able to get lowest level recorddecl or typedef from this base - fprintf(stderr, "chillast.cc, L2315, bailing??\n"); - exit(0); + fprintf(stderr, "chillast.cc, L2315, bailing??\n"); + exit(0); - if (!n->isDeclRefExpr()) { + if (!n->isDeclRefExpr()) { fprintf(stderr, "MemberExpr member is not chillAST_DeclRefExpr\n"); exit(-1); } - chillAST_DeclRefExpr *DRE = (chillAST_DeclRefExpr *)n; + chillAST_DeclRefExpr *DRE = (chillAST_DeclRefExpr *) n; n = DRE->decl; - //fprintf(stderr, "DRE decl is of type %s\n", n->getTypeString()); - assert( n->isVarDecl() ); + //fprintf(stderr, "DRE decl is of type %s\n", n->getTypeString()); + assert(n->isVarDecl()); chillAST_VarDecl *vd = (chillAST_VarDecl *) n; - vd->print(); printf("\n"); fflush(stdout); + vd->print(); + printf("\n"); + fflush(stdout); + + chillAST_TypedefDecl *tdd = vd->typedefinition; + chillAST_RecordDecl *rd = vd->vardef; + //fprintf(stderr, "tdd %p rd %p\n", tdd, rd); - chillAST_TypedefDecl *tdd = vd->typedefinition; - chillAST_RecordDecl *rd = vd->vardef; - //fprintf(stderr, "tdd %p rd %p\n", tdd, rd); - - print(); printf("\n"); - dump(); printf("\n"); fflush(stdout); + print(); + printf("\n"); + dump(); + printf("\n"); + fflush(stdout); + + assert(tdd != NULL || rd != NULL); - assert( tdd != NULL || rd != NULL ); - chillAST_VarDecl *sub; - if (tdd) sub = tdd->findSubpart( ME->member ); - if (rd) sub = rd->findSubpart( ME->member ); + if (tdd) sub = tdd->findSubpart(ME->member); + if (rd) sub = rd->findSubpart(ME->member); + + //fprintf(stderr, "subpart is "); sub->print(); printf("\n"); fflush(stdout); - //fprintf(stderr, "subpart is "); sub->print(); printf("\n"); fflush(stdout); - - return sub; // what if the sub is an array ?? TODO + return sub; // what if the sub is an array ?? TODO } - fprintf(stderr, "chillAST_ArraySubscriptExpr::multibase(), UNHANDLED case %s\n", - b->getTypeString()); - print(); printf("\n"); fflush(stdout); - fprintf(stderr, "base is: "); b->print(); printf("\n"); fflush(stdout); - segfault(); + fprintf(stderr, "chillAST_ArraySubscriptExpr::multibase(), UNHANDLED case %s\n", + b->getTypeString()); + print(); + printf("\n"); + fflush(stdout); + fprintf(stderr, "base is: "); + b->print(); + printf("\n"); + fflush(stdout); + exit(-1); } chillAST_node *chillAST_ArraySubscriptExpr::getIndex(int dim) { - //fprintf(stderr, "chillAST_ArraySubscriptExpr::getIndex( %d )\n", dim); + //fprintf(stderr, "chillAST_ArraySubscriptExpr::getIndex( %d )\n", dim); - chillAST_node *b = base; + chillAST_node *b = base; int depth = 0; - std::vector<chillAST_node*> ind; + std::vector<chillAST_node *> ind; chillAST_node *curindex = index; - for (;;) { - if (b->asttype == CHILLAST_NODETYPE_IMPLICITCASTEXPR) b = ((chillAST_ImplicitCastExpr*)b)->subexpr; + for (;;) { + if (b->asttype == CHILLAST_NODETYPE_IMPLICITCASTEXPR) b = ((chillAST_ImplicitCastExpr *) b)->subexpr; else if (b->asttype == CHILLAST_NODETYPE_ARRAYSUBSCRIPTEXPR) { - //fprintf(stderr, "base "); b->print(); fprintf(stderr, "\n"); - //fprintf(stderr, "index "); curindex->print(); fprintf(stderr, "\n"); + //fprintf(stderr, "base "); b->print(); fprintf(stderr, "\n"); + //fprintf(stderr, "index "); curindex->print(); fprintf(stderr, "\n"); ind.push_back(curindex); - curindex = ((chillAST_ArraySubscriptExpr*)b)->index; - b = ((chillAST_ArraySubscriptExpr*)b)->base; + curindex = ((chillAST_ArraySubscriptExpr *) b)->index; + b = ((chillAST_ArraySubscriptExpr *) b)->base; depth++; - } - else { - //fprintf(stderr, "base "); b->print(); fprintf(stderr, "\n"); - //fprintf(stderr, "index "); curindex->print(); fprintf(stderr, "\n"); + } else { + //fprintf(stderr, "base "); b->print(); fprintf(stderr, "\n"); + //fprintf(stderr, "index "); curindex->print(); fprintf(stderr, "\n"); //fprintf(stderr, "stopping at base type %s\n", b->getTypeString()); ind.push_back(curindex); - break; + break; } } //fprintf(stderr, "depth %d\n", depth ); - //for (int i=0; i<ind.size(); i++) { ind[i]->print(); fprintf(stderr, "\n"); } - - return ind[ depth - dim ]; - /* - if (dim == 0) return index; // single dimension - fprintf(stderr, "DIM NOT 0\n"); - // multidimension - chillAST_node *b = base; + //for (int i=0; i<ind.size(); i++) { ind[i]->print(); fprintf(stderr, "\n"); } + + return ind[depth - dim]; + /* + if (dim == 0) return index; // single dimension + fprintf(stderr, "DIM NOT 0\n"); + // multidimension + chillAST_node *b = base; if (base->asttype == CHILLAST_NODETYPE_IMPLICITCASTEXPR) { // bad coding b = ((chillAST_ImplicitCastExpr*)b)->subexpr; } if (b->asttype == CHILLAST_NODETYPE_IMPLICITCASTEXPR) { // bad coding b = ((chillAST_ImplicitCastExpr*)b)->subexpr; } - + b->print(); printf("\n"); fflush(stdout); if (b->asttype == CHILLAST_NODETYPE_ARRAYSUBSCRIPTEXPR) { return ((chillAST_ArraySubscriptExpr *)b)->getIndex(dim-1); } fprintf(stderr, "chillAST_ArraySubscriptExpr::getIndex() failed\n"); - */ - exit(-1); + */ + exit(-1); } - - -class chillAST_node* chillAST_ArraySubscriptExpr::constantFold() { - //fprintf(stderr, "chillAST_ArraySubscriptExpr::constantFold()\n"); - base = base->constantFold(); +class chillAST_node *chillAST_ArraySubscriptExpr::constantFold() { + //fprintf(stderr, "chillAST_ArraySubscriptExpr::constantFold()\n"); + base = base->constantFold(); index = index->constantFold(); return this; } -class chillAST_node* chillAST_ArraySubscriptExpr::clone() { +class chillAST_node *chillAST_ArraySubscriptExpr::clone() { //fprintf(stderr,"chillAST_ArraySubscriptExpr::clone() old imwrittento %d\n", imwrittento); //fprintf(stderr, "cloning ASE %p ", this); print(0,stderr); printf(" with parent %p\n", parent); fflush(stdout); - //fprintf(stderr, "base %p base->parent %p index %p index->parent %p\n", base, base->parent, index, index->parent); + //fprintf(stderr, "base %p base->parent %p index %p index->parent %p\n", base, base->parent, index, index->parent); //fprintf(stderr, "old base "); base->print(); printf("\n"); fflush(stdout); //fprintf(stderr, "old base "); base->dump(); printf("\n"); fflush(stdout); - if (base->isDeclRefExpr()) { - chillAST_VarDecl *vd = (chillAST_VarDecl *)(((chillAST_DeclRefExpr *)base)->decl); + if (base->isDeclRefExpr()) { + chillAST_VarDecl *vd = (chillAST_VarDecl *) (((chillAST_DeclRefExpr *) base)->decl); //fprintf(stderr, "old decl "); vd->print(); printf("\n");fflush(stdout); //fprintf(stderr, "old decl "); vd->dump(); printf("\n");fflush(stdout); } - chillAST_node *b = base->clone(); + chillAST_node *b = base->clone(); //fprintf(stderr, "new base "); b->print(); printf("\n"); fflush(stdout); //fprintf(stderr, "new base "); b->dump(); printf("\n"); fflush(stdout); chillAST_node *i = index->clone(); //fprintf(stderr, "new index "); i->print(); printf("\n"); fflush(stdout); - - //if (!index->parent) { + + //if (!index->parent) { // fprintf(stderr, "ASE %p SOURCE OF CLONE INDEX %p of type %s HAS NO PARENT\n", this, index, index->getTypeString()); // fprintf(stderr, "ASE SOURCE IS "); print(0,stderr); fprintf(stderr, "\n\n"); - //} - //fprintf(stderr, "cloning AST %p, after cloning base and index, creating a new ASE\n", this); - chillAST_ArraySubscriptExpr *ASE = new chillAST_ArraySubscriptExpr( b, i, imwrittento, parent, uniquePtr /* ?? */ ); - //fprintf(stderr, "cloned AST will be %p with parent %p and base %p index %p\n", ASE, parent, b, i); + //} + //fprintf(stderr, "cloning AST %p, after cloning base and index, creating a new ASE\n", this); + chillAST_ArraySubscriptExpr *ASE = new chillAST_ArraySubscriptExpr(b, i, imwrittento, parent, uniquePtr /* ?? */ ); + //fprintf(stderr, "cloned AST will be %p with parent %p and base %p index %p\n", ASE, parent, b, i); ASE->imreadfrom = false; // don't know this yet - //ASE->imreadfrom = imreadfrom; // ?? - //if (ASE->imreadfrom) { + //ASE->imreadfrom = imreadfrom; // ?? + //if (ASE->imreadfrom) { // fprintf(stderr, "in chillAST_ArraySubscriptExpr::clone(), imreadfrom is being set. \n"); - // ASE->print(); fflush(stdout); fprintf(stderr, "\n"); - //} + // ASE->print(); fflush(stdout); fprintf(stderr, "\n"); + //} //fprintf(stderr, "cloned result "); ASE->print(); printf("\n\n\n"); fflush(stdout); - //fprintf(stderr, "ASE clone() this 0x%x clone 0x%x\n", this, ASE); + //fprintf(stderr, "ASE clone() this 0x%x clone 0x%x\n", this, ASE); ASE->isFromSourceFile = isFromSourceFile; - if (filename) ASE->filename = strdup(filename); + if (filename) ASE->filename = strdup(filename); return ASE; } -void chillAST_ArraySubscriptExpr::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool writtento ) { - //fprintf(stderr, "chillAST_ArraySubscriptExpr::gatherArrayRefs setting imwrittento %d for ", writtento); -//fprintf(stderr, "%s ", base->getTypeString()); -//base->print(); printf("\n"); fflush(stdout); +void chillAST_ArraySubscriptExpr::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool writtento) { + //fprintf(stderr, "chillAST_ArraySubscriptExpr::gatherArrayRefs setting imwrittento %d for ", writtento); +//fprintf(stderr, "%s ", base->getTypeString()); +//base->print(); printf("\n"); fflush(stdout); //fprintf(stderr, "found an array subscript. &refs 0x%x ", refs); - if (!imwrittento) imwrittento = writtento; // may be both written and not for += - fflush(stdout); + if (!imwrittento) imwrittento = writtento; // may be both written and not for += + fflush(stdout); //fprintf(stderr, "recursing on index "); index->print(0,stderr); fprintf(stderr, "\n"); - index->gatherArrayRefs( refs, 0 ); // recurse first - //fprintf(stderr, "adding this "); print(0,stderr); fprintf(stderr, "\n"); - //fprintf(stderr, "refs[%d] = 0x%x = ", refs.size(), this); print(); fflush(stdout); - refs.push_back( this ); + index->gatherArrayRefs(refs, 0); // recurse first + //fprintf(stderr, "adding this "); print(0,stderr); fprintf(stderr, "\n"); + //fprintf(stderr, "refs[%d] = 0x%x = ", refs.size(), this); print(); fflush(stdout); + refs.push_back(this); - //fprintf(stderr, " size now %d\n", refs.size()); + //fprintf(stderr, " size now %d\n", refs.size()); } -void chillAST_ArraySubscriptExpr::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) { - index->gatherScalarRefs( refs, 0 ); -} +void chillAST_ArraySubscriptExpr::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { + index->gatherScalarRefs(refs, 0); +} -void chillAST_ArraySubscriptExpr::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - //fprintf(stderr, "chillAST_ArraySubscriptExpr::gatherVarDecls()\n"); +void chillAST_ArraySubscriptExpr::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + //fprintf(stderr, "chillAST_ArraySubscriptExpr::gatherVarDecls()\n"); - base->gatherVarDecls( decls ); - index->gatherVarDecls( decls ); + base->gatherVarDecls(decls); + index->gatherVarDecls(decls); } -void chillAST_ArraySubscriptExpr::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { +void chillAST_ArraySubscriptExpr::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { //fprintf(stderr, "chillAST_ArraySubscriptExpr::gatherScalarVarDecls()\n"); - //fprintf(stderr, "base %s index %s\n", base->getTypeString(), index->getTypeString()); - base->gatherScalarVarDecls( decls ); - index->gatherScalarVarDecls( decls ); + //fprintf(stderr, "base %s index %s\n", base->getTypeString(), index->getTypeString()); + base->gatherScalarVarDecls(decls); + index->gatherScalarVarDecls(decls); } -void chillAST_ArraySubscriptExpr::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { +void chillAST_ArraySubscriptExpr::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { //fprintf(stderr, "chillAST_ArraySubscriptExpr::gatherArrayVarDecls()\n"); - //fprintf(stderr, "base %s index %s\n", base->getTypeString(), index->getTypeString()); - base->gatherArrayVarDecls( decls ); - index->gatherArrayVarDecls( decls ); + //fprintf(stderr, "base %s index %s\n", base->getTypeString(), index->getTypeString()); + base->gatherArrayVarDecls(decls); + index->gatherArrayVarDecls(decls); } -void chillAST_ArraySubscriptExpr::gatherDeclRefExprs( vector<chillAST_DeclRefExpr *>&refs ) { - base->gatherDeclRefExprs( refs ); - index->gatherDeclRefExprs( refs ); +void chillAST_ArraySubscriptExpr::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) { + base->gatherDeclRefExprs(refs); + index->gatherDeclRefExprs(refs); } -void chillAST_ArraySubscriptExpr::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - base->gatherVarUsage( decls ); - index->gatherVarUsage( decls ); +void chillAST_ArraySubscriptExpr::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + base->gatherVarUsage(decls); + index->gatherVarUsage(decls); } -void chillAST_ArraySubscriptExpr::replaceVarDecls( chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl){ - base->replaceVarDecls( olddecl, newdecl ); - index->replaceVarDecls( olddecl, newdecl ); +void chillAST_ArraySubscriptExpr::replaceVarDecls(chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl) { + base->replaceVarDecls(olddecl, newdecl); + index->replaceVarDecls(olddecl, newdecl); } -void chillAST_ArraySubscriptExpr::replaceChild( chillAST_node *old, chillAST_node *newchild ) { - //fprintf(stderr,"chillAST_ArraySubscriptExpr::replaceChild()\n"); +void chillAST_ArraySubscriptExpr::replaceChild(chillAST_node *old, chillAST_node *newchild) { + //fprintf(stderr,"chillAST_ArraySubscriptExpr::replaceChild()\n"); // arraysubscriptexpression doesn t really have children (should it?) // try index ??? - if (old == index) { + if (old == index) { //fprintf(stderr, "old is index\n"); index = newchild; index->parent = this; return; } - - // try base ??? unclear if this makes sense TODO - if (old == base) { + + // try base ??? unclear if this makes sense TODO + if (old == base) { //fprintf(stderr, "old is base\n"); base = newchild; base->parent = this; return; } - - fprintf(stderr, "chillAST_ArraySubscriptExpr::replaceChild() old is not base or index\n"); - print(0,stderr); fprintf(stderr, "\nchild: "); + + fprintf(stderr, "chillAST_ArraySubscriptExpr::replaceChild() old is not base or index\n"); + print(0, stderr); + fprintf(stderr, "\nchild: "); if (!old) fprintf(stderr, "oldchild NULL!\n"); - old->print(0,stderr); fprintf(stderr, "\nnew: "); - newchild->print(0,stderr); fprintf(stderr, "\n"); - segfault(); // make easier for gdb + old->print(0, stderr); + fprintf(stderr, "\nnew: "); + newchild->print(0, stderr); + fprintf(stderr, "\n"); + exit(-1); // make easier for gdb }; -bool chillAST_ArraySubscriptExpr::operator!=( const chillAST_ArraySubscriptExpr &other) { +bool chillAST_ArraySubscriptExpr::operator!=(const chillAST_ArraySubscriptExpr &other) { bool opposite = *this == other; return !opposite; } - -bool chillAST_ArraySubscriptExpr::operator==( const chillAST_ArraySubscriptExpr &other) { +bool chillAST_ArraySubscriptExpr::operator==(const chillAST_ArraySubscriptExpr &other) { //fprintf(stderr, "chillAST_ArraySubscriptExpr::operator==\n"); //fprintf(stderr, "this->basedecl 0x%x other.basedecl 0x%x\n", this->basedecl, other.basedecl); //this->basedecl->print(); printf("\n\n"); //other.basedecl->print(); printf("\n"); fflush(stdout); - //this->print(); printf(" 0x%x == 0x%x ",this->uniquePtr, other.uniquePtr ); other.print(); printf(" ?? "); fflush(stdout); - //if ( this->uniquePtr == other.uniquePtr) fprintf(stderr, "t\n"); - //else fprintf(stderr, "f\n"); - return this->uniquePtr == other.uniquePtr; + //this->print(); printf(" 0x%x == 0x%x ",this->uniquePtr, other.uniquePtr ); other.print(); printf(" ?? "); fflush(stdout); + //if ( this->uniquePtr == other.uniquePtr) fprintf(stderr, "t\n"); + //else fprintf(stderr, "f\n"); + return this->uniquePtr == other.uniquePtr; } - - - -chillAST_MemberExpr::chillAST_MemberExpr() { - asttype = CHILLAST_NODETYPE_MEMBEREXPR; +chillAST_MemberExpr::chillAST_MemberExpr() { + asttype = CHILLAST_NODETYPE_MEMBEREXPR; base = NULL; member = NULL; parent = NULL; metacomment = NULL; - exptype = CHILL_MEMBER_EXP_DOT; - isFromSourceFile = true; // default + exptype = CHILL_MEMBER_EXP_DOT; + isFromSourceFile = true; // default filename = NULL; } -chillAST_MemberExpr::chillAST_MemberExpr( chillAST_node *bas, const char *mem, chillAST_node *p, void *unique, CHILL_MEMBER_EXP_TYPE t ) { - asttype = CHILLAST_NODETYPE_MEMBEREXPR; +chillAST_MemberExpr::chillAST_MemberExpr(chillAST_node *bas, const char *mem, chillAST_node *p, void *unique, + CHILL_MEMBER_EXP_TYPE t) { + asttype = CHILLAST_NODETYPE_MEMBEREXPR; base = bas; - if (base) base->setParent( this ); - if (mem) member = strdup( mem ); + if (base) base->setParent(this); + if (mem) member = strdup(mem); parent = p; metacomment = NULL; uniquePtr = unique; exptype = t; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; - return; // ignore tests below ?? TODO ?? + return; // ignore tests below ?? TODO ?? // base needs to RESOLVE to a decl ref expr but may not BE one // A.b . c lhs is a binop or memberexpr - if (bas->isBinaryOperator()) { + if (bas->isBinaryOperator()) { //fprintf(stderr, "checking binop to see if it resolved to a declrefexpr\n"); // cheat for now or just remove the check below - return; + return; } - if (! ( bas->isDeclRefExpr() || bas->isArraySubscriptExpr() )) { + if (!(bas->isDeclRefExpr() || bas->isArraySubscriptExpr())) { fprintf(stderr, "chillAST_MemberExpr::chillAST_MemberExpr(), base is of type %s\n", bas->getTypeString()); fprintf(stderr, "chillAST_MemberExpr::chillAST_MemberExpr(), base is not DeclRefExpr\n"); - - base->print(); printf(".%s\n", mem); fflush(stdout); - segfault(); + + base->print(); + printf(".%s\n", mem); + fflush(stdout); + exit(-1); } } -void chillAST_MemberExpr::dump( int indent, FILE *fp ) { +void chillAST_MemberExpr::dump(int indent, FILE *fp) { chillindent(indent, fp); - fprintf(fp, "(MemberExpr \n"); + fprintf(fp, "(MemberExpr \n"); - base->dump( indent+1, fp ); - chillindent(indent+1, fp); + base->dump(indent + 1, fp); + chillindent(indent + 1, fp); if (exptype == CHILL_MEMBER_EXP_ARROW) fprintf(fp, "->"); - else fprintf(fp, "."); - - fprintf(fp, "%s\n", member); + else fprintf(fp, "."); + + fprintf(fp, "%s\n", member); chillindent(indent, fp); fprintf(fp, ")\n"); } -void chillAST_MemberExpr::print( int indent, FILE *fp ) { - if (base) base->print( indent, fp ); +void chillAST_MemberExpr::print(int indent, FILE *fp) { + if (base) base->print(indent, fp); else { - chillindent( indent, fp ); - fprintf(fp, "(NULL)"); + chillindent(indent, fp); + fprintf(fp, "(NULL)"); } if (exptype == CHILL_MEMBER_EXP_ARROW) fprintf(fp, "->"); - else fprintf(fp, "."); + else fprintf(fp, "."); if (member) fprintf(fp, "%s", member); - else fprintf(fp, "(NULL)"); - fflush(fp); + else fprintf(fp, "(NULL)"); + fflush(fp); } -void chillAST_MemberExpr::printonly( int indent, FILE *fp ) { - base->print( indent, fp ); +void chillAST_MemberExpr::printonly(int indent, FILE *fp) { + base->print(indent, fp); if (exptype == CHILL_MEMBER_EXP_ARROW) fprintf(fp, "->"); - else fprintf(fp, "."); + else fprintf(fp, "."); fprintf(fp, "%s", member); - fflush(fp); + fflush(fp); } -char *chillAST_MemberExpr::stringRep( int indent ) { // char pointer to what we'd print - fprintf(stderr, "*chillAST_MemberExpr::stringRep()\n"); - if (base->isDeclRefExpr()) { // - chillAST_VarDecl *vd = (chillAST_VarDecl *) ((chillAST_DeclRefExpr *)base)->decl; - char *leak = (char *)malloc(128); +char *chillAST_MemberExpr::stringRep(int indent) { // char pointer to what we'd print + fprintf(stderr, "*chillAST_MemberExpr::stringRep()\n"); + if (base->isDeclRefExpr()) { // + chillAST_VarDecl *vd = (chillAST_VarDecl *) ((chillAST_DeclRefExpr *) base)->decl; + char *leak = (char *) malloc(128); if (exptype == CHILL_MEMBER_EXP_ARROW) sprintf(leak, "%s->%s", vd->varname, member); else sprintf(leak, "%s.%s", vd->varname, member); - printstring = leak; + printstring = leak; return leak; } - // else - // TODO - return strdup("chillAST_MemberExpr::getStringRep()hadanerror"); + // else + // TODO + return strdup("chillAST_MemberExpr::getStringRep()hadanerror"); } -class chillAST_node* chillAST_MemberExpr::constantFold() { - base = base->constantFold(); +class chillAST_node *chillAST_MemberExpr::constantFold() { + base = base->constantFold(); //member = member->constantFold(); return this; } -class chillAST_node* chillAST_MemberExpr::clone() { - chillAST_node *b = base->clone(); - char *m = strdup( member ); // ?? - chillAST_MemberExpr *ME = new chillAST_MemberExpr( b, m, parent, uniquePtr /* ?? */ ); +class chillAST_node *chillAST_MemberExpr::clone() { + chillAST_node *b = base->clone(); + char *m = strdup(member); // ?? + chillAST_MemberExpr *ME = new chillAST_MemberExpr(b, m, parent, uniquePtr /* ?? */ ); ME->isFromSourceFile = isFromSourceFile; - if (filename) ME->filename = strdup(filename); + if (filename) ME->filename = strdup(filename); return ME; } -void chillAST_MemberExpr::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool writtento ) { - fprintf(stderr, "chillAST_MemberExpr::gatherArrayRefs() "); print(0,stderr); fprintf(stderr, "\n"); - fprintf(stderr, "base of of type %s\n", base->getTypeString()); - base->gatherArrayRefs( refs, writtento ); // - +void chillAST_MemberExpr::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool writtento) { + fprintf(stderr, "chillAST_MemberExpr::gatherArrayRefs() "); + print(0, stderr); + fprintf(stderr, "\n"); + fprintf(stderr, "base of of type %s\n", base->getTypeString()); + base->gatherArrayRefs(refs, writtento); // + } -void chillAST_MemberExpr::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) { - base->gatherScalarRefs( refs, writtento ); -} +void chillAST_MemberExpr::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { + base->gatherScalarRefs(refs, writtento); +} -void chillAST_MemberExpr::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - base->gatherVarDecls( decls ); +void chillAST_MemberExpr::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + base->gatherVarDecls(decls); } -void chillAST_MemberExpr::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - base->gatherScalarVarDecls( decls ); +void chillAST_MemberExpr::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + base->gatherScalarVarDecls(decls); } -void chillAST_MemberExpr::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - base->gatherArrayVarDecls( decls ); +void chillAST_MemberExpr::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + base->gatherArrayVarDecls(decls); } -void chillAST_MemberExpr::gatherDeclRefExprs( vector<chillAST_DeclRefExpr *>&refs ) { - base->gatherDeclRefExprs( refs ); +void chillAST_MemberExpr::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) { + base->gatherDeclRefExprs(refs); } -void chillAST_MemberExpr::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - base->gatherVarUsage( decls ); +void chillAST_MemberExpr::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + base->gatherVarUsage(decls); } -void chillAST_MemberExpr::replaceVarDecls( chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl){ - base->replaceVarDecls( olddecl, newdecl ); +void chillAST_MemberExpr::replaceVarDecls(chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl) { + base->replaceVarDecls(olddecl, newdecl); } -bool chillAST_MemberExpr::operator!=( const chillAST_MemberExpr &other) { +bool chillAST_MemberExpr::operator!=(const chillAST_MemberExpr &other) { bool opposite = *this == other; return !opposite; } -bool chillAST_MemberExpr::operator==( const chillAST_MemberExpr &other) { - return this->uniquePtr == other.uniquePtr; +bool chillAST_MemberExpr::operator==(const chillAST_MemberExpr &other) { + return this->uniquePtr == other.uniquePtr; } -void chillAST_MemberExpr::replaceChild( chillAST_node *old, chillAST_node *newchild ) { +void chillAST_MemberExpr::replaceChild(chillAST_node *old, chillAST_node *newchild) { //printf("\nMemberExpr::replaceChild( )\n"); - //printf("old: "); - //old->print(); - //printf("\nnew: "); - //newchild->print(); - //printf("\n"); fflush(stdout); + //printf("old: "); + //old->print(); + //printf("\nnew: "); + //newchild->print(); + //printf("\n"); fflush(stdout); // will pointers match?? - if (base == old) { - //fprintf(stderr, "old matches base of MemberExpr\n"); - base = newchild; - } - else { - base->replaceChild( old, newchild ); + if (base == old) { + //fprintf(stderr, "old matches base of MemberExpr\n"); + base = newchild; + } else { + base->replaceChild(old, newchild); } -} +} -chillAST_node *chillAST_MemberExpr::multibase2() { /*fprintf(stderr, "ME MB2\n" );*/ return (chillAST_node *)this; } +chillAST_node *chillAST_MemberExpr::multibase2() { /*fprintf(stderr, "ME MB2\n" );*/ return (chillAST_node *) this; } -chillAST_VarDecl* chillAST_MemberExpr::getUnderlyingVarDecl() { +chillAST_VarDecl *chillAST_MemberExpr::getUnderlyingVarDecl() { fprintf(stderr, "chillAST_MemberExpr:getUnderlyingVarDecl()\n"); - print(); printf("\n"); fflush(stdout); - exit(-1); + print(); + printf("\n"); + fflush(stdout); + exit(-1); // find the member with the correct name - -} - +} chillAST_VarDecl *chillAST_MemberExpr::multibase() { - //c.i[c.count] we want i member of c - //fprintf(stderr, "ME MB\n" ); + //c.i[c.count] we want i member of c + //fprintf(stderr, "ME MB\n" ); //fprintf(stderr, "chillAST_MemberExpr::multibase()\n"); //print(); printf("\n"); fflush(stdout); //fprintf(stderr, "MemberExpr base is type %s, member %s\n", base->getTypeString(), member); - - //chillAST_VarDecl *vd = base->getUnderlyingVarDecl(); // this is the only thing that ever calls this ??? - chillAST_VarDecl *vd = base->multibase(); // ?? + + //chillAST_VarDecl *vd = base->getUnderlyingVarDecl(); // this is the only thing that ever calls this ??? + chillAST_VarDecl *vd = base->multibase(); // ?? //fprintf(stderr, "vd "); vd->print(); printf("\n"); fflush(stdout); - + chillAST_RecordDecl *rd = vd->getStructDef(); - if (!rd) { + if (!rd) { fprintf(stderr, "chillAST_MemberExpr::multibase() vardecl is not a struct??\n"); - fprintf(stderr, "vd "); vd->print(); printf("\n"); fflush(stdout); - fprintf(stderr, "vd "); vd->dump(); printf("\n"); fflush(stdout); + fprintf(stderr, "vd "); + vd->print(); + printf("\n"); + fflush(stdout); + fprintf(stderr, "vd "); + vd->dump(); + printf("\n"); + fflush(stdout); exit(-1); } // OK, we have the recorddecl that defines the structure // now find the member with the correct name - chillAST_VarDecl *sub = rd->findSubpart( member ); + chillAST_VarDecl *sub = rd->findSubpart(member); //fprintf(stderr, "sub %s:\n", member); - if (!sub) { + if (!sub) { fprintf(stderr, "can't find member %s in \n", member); - rd->print(); + rd->print(); } //sub->print(); printf("\n"); fflush(stdout); //sub->dump() ; printf("\n"); fflush(stdout); - return sub; + return sub; //find vardecl of member in def of base - -} - +} -chillAST_DeclRefExpr::chillAST_DeclRefExpr() { - asttype = CHILLAST_NODETYPE_DECLREFEXPR; - declarationType = strdup("UNKNOWN"); +chillAST_DeclRefExpr::chillAST_DeclRefExpr() { + asttype = CHILLAST_NODETYPE_DECLREFEXPR; + declarationType = strdup("UNKNOWN"); declarationName = strdup("NONE"); - decl = NULL; + decl = NULL; parent = NULL; metacomment = NULL; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; } -chillAST_DeclRefExpr::chillAST_DeclRefExpr( const char *varname, chillAST_node *par ) { - asttype = CHILLAST_NODETYPE_DECLREFEXPR; - declarationType = strdup("UNKNOWN"); - declarationName = strdup(varname); - decl = NULL; - parent = par; - isFromSourceFile = true; // default +chillAST_DeclRefExpr::chillAST_DeclRefExpr(const char *varname, chillAST_node *par) { + asttype = CHILLAST_NODETYPE_DECLREFEXPR; + declarationType = strdup("UNKNOWN"); + declarationName = strdup(varname); + decl = NULL; + parent = par; + isFromSourceFile = true; // default filename = NULL; } -chillAST_DeclRefExpr::chillAST_DeclRefExpr( const char *vartype, const char *varname, chillAST_node *par) { - //fprintf(stderr, "DRE::DRE 0x%x %s %s\n", this, vartype, varname ); - asttype = CHILLAST_NODETYPE_DECLREFEXPR; - declarationType = strdup(vartype); - declarationName = strdup(varname); - decl = NULL; - parent = par; - isFromSourceFile = true; // default +chillAST_DeclRefExpr::chillAST_DeclRefExpr(const char *vartype, const char *varname, chillAST_node *par) { + //fprintf(stderr, "DRE::DRE 0x%x %s %s\n", this, vartype, varname ); + asttype = CHILLAST_NODETYPE_DECLREFEXPR; + declarationType = strdup(vartype); + declarationName = strdup(varname); + decl = NULL; + parent = par; + isFromSourceFile = true; // default filename = NULL; } -chillAST_DeclRefExpr::chillAST_DeclRefExpr( const char *vartype, const char *varname, chillAST_node *d, chillAST_node *par ) { - //fprintf(stderr, "DRE::DRE2 0x%x %s %s 0x%x\n", this, vartype, varname, d ); - asttype = CHILLAST_NODETYPE_DECLREFEXPR; - declarationType = strdup(vartype); - declarationName = strdup(varname); - decl = d; - parent = par; - isFromSourceFile = true; // default +chillAST_DeclRefExpr::chillAST_DeclRefExpr(const char *vartype, const char *varname, chillAST_node *d, + chillAST_node *par) { + //fprintf(stderr, "DRE::DRE2 0x%x %s %s 0x%x\n", this, vartype, varname, d ); + asttype = CHILLAST_NODETYPE_DECLREFEXPR; + declarationType = strdup(vartype); + declarationName = strdup(varname); + decl = d; + parent = par; + isFromSourceFile = true; // default filename = NULL; } -chillAST_DeclRefExpr::chillAST_DeclRefExpr( chillAST_VarDecl *vd, chillAST_node *par ){ // variable def - //fprintf(stderr, "DRE::DRE3 (VD) 0x%x %s %s 0x%x\n", this, vd->vartype, vd->varname, vd ); - - asttype = CHILLAST_NODETYPE_DECLREFEXPR; - declarationType = strdup(vd->vartype); - declarationName = strdup(vd->varname); - decl = vd; +chillAST_DeclRefExpr::chillAST_DeclRefExpr(chillAST_VarDecl *vd, chillAST_node *par) { // variable def + //fprintf(stderr, "DRE::DRE3 (VD) 0x%x %s %s 0x%x\n", this, vd->vartype, vd->varname, vd ); + + asttype = CHILLAST_NODETYPE_DECLREFEXPR; + declarationType = strdup(vd->vartype); + declarationName = strdup(vd->varname); + decl = vd; parent = par; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; } -chillAST_DeclRefExpr::chillAST_DeclRefExpr( chillAST_FunctionDecl *fd, chillAST_node *par ){ // function def - asttype = CHILLAST_NODETYPE_DECLREFEXPR; - declarationType = strdup(fd->returnType); - declarationName = strdup(fd->functionName); - decl = fd; +chillAST_DeclRefExpr::chillAST_DeclRefExpr(chillAST_FunctionDecl *fd, chillAST_node *par) { // function def + asttype = CHILLAST_NODETYPE_DECLREFEXPR; + declarationType = strdup(fd->returnType); + declarationName = strdup(fd->functionName); + decl = fd; parent = par; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; } +chillAST_DeclRefExpr *buildDeclRefExpr(chillAST_VarDecl *vd) { + chillAST_DeclRefExpr *dre = new chillAST_DeclRefExpr(vd, NULL); -chillAST_DeclRefExpr *buildDeclRefExpr( chillAST_VarDecl *vd) { - chillAST_DeclRefExpr *dre = new chillAST_DeclRefExpr( vd, NULL ); - } -void chillAST_DeclRefExpr::print( int indent, FILE *fp) { +void chillAST_DeclRefExpr::print(int indent, FILE *fp) { chillindent(indent, fp); - //fprintf(fp, "%s %s", declarationType, declarationName); // this is printing float *A - fprintf(fp, "%s", declarationName); // this is printing A - fflush(fp); + //fprintf(fp, "%s %s", declarationType, declarationName); // this is printing float *A + fprintf(fp, "%s", declarationName); // this is printing A + fflush(fp); } -char *chillAST_DeclRefExpr::stringRep( int indent ) { - return strdup( declarationName ); +char *chillAST_DeclRefExpr::stringRep(int indent) { + return strdup(declarationName); } -void chillAST_DeclRefExpr::dump( int indent, FILE *fp) { +void chillAST_DeclRefExpr::dump(int indent, FILE *fp) { chillindent(indent, fp); - fprintf(fp, "(DeclRefExpr '%s' ", declarationType); + fprintf(fp, "(DeclRefExpr '%s' ", declarationType); chillAST_VarDecl *vd = getVarDecl(); - if (vd) { + if (vd) { if (vd->isAParameter) fprintf(fp, "ParmVar "); else fprintf(fp, "Var "); } - fprintf(fp, "'%s' ", declarationName); // variable or function name + fprintf(fp, "'%s' ", declarationName); // variable or function name - if (chillAST_FunctionDecl *fd = getFunctionDecl()) { - // print parameter types for functions - fd->printParameterTypes( fp ); + if (chillAST_FunctionDecl *fd = getFunctionDecl()) { + // print parameter types for functions + fd->printParameterTypes(fp); } - - fprintf(fp, ")\n"); - fflush(fp); + + fprintf(fp, ")\n"); + fflush(fp); } -class chillAST_node* chillAST_DeclRefExpr::constantFold() { // can never do anything? +class chillAST_node *chillAST_DeclRefExpr::constantFold() { // can never do anything? return this; } -class chillAST_node* chillAST_DeclRefExpr::clone() { - //fprintf(stderr, "chillAST_DeclRefExpr::clone()\n"); - chillAST_DeclRefExpr *DRE = new chillAST_DeclRefExpr( declarationType, declarationName, decl, parent ); +class chillAST_node *chillAST_DeclRefExpr::clone() { + //fprintf(stderr, "chillAST_DeclRefExpr::clone()\n"); + chillAST_DeclRefExpr *DRE = new chillAST_DeclRefExpr(declarationType, declarationName, decl, parent); DRE->isFromSourceFile = isFromSourceFile; - if (filename) DRE->filename = strdup(filename); + if (filename) DRE->filename = strdup(filename); return DRE; } -void chillAST_DeclRefExpr::gatherVarDeclsMore( vector<chillAST_VarDecl*> &decls ) { - //fprintf(stderr, "chillAST_DeclRefExpr::gatherVarDeclsMore()\n"); - decl->gatherVarDeclsMore( decls ); +void chillAST_DeclRefExpr::gatherVarDeclsMore(vector<chillAST_VarDecl *> &decls) { + //fprintf(stderr, "chillAST_DeclRefExpr::gatherVarDeclsMore()\n"); + decl->gatherVarDeclsMore(decls); } -void chillAST_DeclRefExpr::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - //fprintf(stderr, "chillAST_DeclRefExpr::gatherScalarVarDecls()\n"); - decl->gatherScalarVarDecls(decls); - //fprintf(stderr, "now %d scalar vardecls\n", decls.size()); +void chillAST_DeclRefExpr::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + //fprintf(stderr, "chillAST_DeclRefExpr::gatherScalarVarDecls()\n"); + decl->gatherScalarVarDecls(decls); + //fprintf(stderr, "now %d scalar vardecls\n", decls.size()); } -void chillAST_DeclRefExpr::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - //fprintf(stderr, "chillAST_DeclRefExpr::gatherArrayVarDecls()\n"); - decl->gatherArrayVarDecls(decls); - //fprintf(stderr, "now %d Array vardecls\n", decls.size()); +void chillAST_DeclRefExpr::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + //fprintf(stderr, "chillAST_DeclRefExpr::gatherArrayVarDecls()\n"); + decl->gatherArrayVarDecls(decls); + //fprintf(stderr, "now %d Array vardecls\n", decls.size()); } -void chillAST_DeclRefExpr::gatherDeclRefExprs( vector<chillAST_DeclRefExpr *>&refs ) { - refs.push_back(this); +void chillAST_DeclRefExpr::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) { + refs.push_back(this); } -void chillAST_DeclRefExpr::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) { - refs.push_back(this); -} +void chillAST_DeclRefExpr::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { + refs.push_back(this); +} -void chillAST_DeclRefExpr::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - //fprintf(stderr, "chillAST_DeclRefExpr::gatherVarUsage()\n"); - for (int i=0; i<decls.size(); i++) { - if (decls[i] == decl) { +void chillAST_DeclRefExpr::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + //fprintf(stderr, "chillAST_DeclRefExpr::gatherVarUsage()\n"); + for (int i = 0; i < decls.size(); i++) { + if (decls[i] == decl) { //fprintf(stderr, "decl was already there\n"); return; } - if (streq(declarationName, decls[i]->varname)) { - if (streq(declarationType, decls[i]->vartype)) { + if (streq(declarationName, decls[i]->varname)) { + if (streq(declarationType, decls[i]->vartype)) { //fprintf(stderr, "decl was already there\n"); return; } } } chillAST_VarDecl *vd = getVarDecl(); // null for functiondecl - if (vd) decls.push_back( vd ); + if (vd) decls.push_back(vd); } - - -void chillAST_DeclRefExpr::replaceVarDecls( chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl){ - //fprintf(stderr, "chillAST_DeclRefExpr::replaceVarDecls()\n"); - if (decl == olddecl) { +void chillAST_DeclRefExpr::replaceVarDecls(chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl) { + //fprintf(stderr, "chillAST_DeclRefExpr::replaceVarDecls()\n"); + if (decl == olddecl) { //fprintf(stderr, "replacing old %s with %s\n", olddecl->varname, newdecl->varname); - //fprintf(stderr, "DRE was "); print(); - decl = newdecl; - declarationType = strdup(newdecl->vartype); - declarationName = strdup(newdecl->varname); - //fprintf(stderr, "\nDRE is "); print(); fprintf(stderr, "\n\n"); - } - else { - if (!strcmp(olddecl->varname, declarationName)) { - //fprintf(stderr, "uhoh, chillAST_DeclRefExpr::replaceVarDecls()\n"); - decl = newdecl; - declarationType = strdup(newdecl->vartype); - declarationName = strdup(newdecl->varname); + //fprintf(stderr, "DRE was "); print(); + decl = newdecl; + declarationType = strdup(newdecl->vartype); + declarationName = strdup(newdecl->varname); + //fprintf(stderr, "\nDRE is "); print(); fprintf(stderr, "\n\n"); + } else { + if (!strcmp(olddecl->varname, declarationName)) { + //fprintf(stderr, "uhoh, chillAST_DeclRefExpr::replaceVarDecls()\n"); + decl = newdecl; + declarationType = strdup(newdecl->vartype); + declarationName = strdup(newdecl->varname); } } } @@ -3749,797 +3716,771 @@ chillAST_VarDecl *chillAST_DeclRefExpr::multibase() { } - - - - - - - -void chillAST_VarDecl::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - //fprintf(stderr, "chillAST_VarDecl::gatherVarDecls()\n"); - for (int i=0; i<decls.size(); i++) { - if (decls[i] == this) { +void chillAST_VarDecl::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + //fprintf(stderr, "chillAST_VarDecl::gatherVarDecls()\n"); + for (int i = 0; i < decls.size(); i++) { + if (decls[i] == this) { //fprintf(stderr, "decl was already there\n"); return; } - if (streq(decls[i]->varname, varname)) { - if (streq(decls[i]->vartype, vartype)) { + if (streq(decls[i]->varname, varname)) { + if (streq(decls[i]->vartype, vartype)) { //fprintf(stderr, "VarDecl (direct) decl was already there\n"); return; } } } - decls.push_back( this ); + decls.push_back(this); } -void chillAST_VarDecl::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - //fprintf(stderr, "chillAST_VarDecl::gatherScalarVarDecls(), %s numdimensions %d\n", varname, numdimensions); +void chillAST_VarDecl::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + //fprintf(stderr, "chillAST_VarDecl::gatherScalarVarDecls(), %s numdimensions %d\n", varname, numdimensions); if (numdimensions != 0) return; // not a scalar - - for (int i=0; i<decls.size(); i++) { - if (decls[i] == this) { + + for (int i = 0; i < decls.size(); i++) { + if (decls[i] == this) { //fprintf(stderr, "decl was already there\n"); return; } if (streq(decls[i]->varname, varname)) { // wrong. scoping. TODO - if (streq(decls[i]->vartype, vartype)) { + if (streq(decls[i]->vartype, vartype)) { //fprintf(stderr, "VarDecl (direct) decl was already there\n"); return; } } } - //fprintf(stderr, "adding vardecl for %s to decls\n", varname); - decls.push_back( this ); + //fprintf(stderr, "adding vardecl for %s to decls\n", varname); + decls.push_back(this); } -void chillAST_VarDecl::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - //fprintf(stderr, "chillAST_VarDecl::gatherScalarVarDecls(), %s numdimensions %d\n", varname, numdimensions); +void chillAST_VarDecl::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + //fprintf(stderr, "chillAST_VarDecl::gatherScalarVarDecls(), %s numdimensions %d\n", varname, numdimensions); if (numdimensions == 0) return; // not an array - - for (int i=0; i<decls.size(); i++) { - if (decls[i] == this) { + + for (int i = 0; i < decls.size(); i++) { + if (decls[i] == this) { //fprintf(stderr, "decl was already there\n"); return; } if (streq(decls[i]->varname, varname)) { // wrong. scoping. TODO - if (streq(decls[i]->vartype, vartype)) { + if (streq(decls[i]->vartype, vartype)) { //fprintf(stderr, "VarDecl (direct) decl was already there\n"); return; } } } - //fprintf(stderr, "adding vardecl for %s to decls\n", varname); - decls.push_back( this ); + //fprintf(stderr, "adding vardecl for %s to decls\n", varname); + decls.push_back(this); } +chillAST_node *chillAST_VarDecl::constantFold() { return this; } -chillAST_node *chillAST_VarDecl::constantFold() { return this; } - -chillAST_node* chillAST_VarDecl::clone() { - fprintf(stderr, "\nchillAST_VarDecl::clone() cloning vardecl for %s\n", varname); +chillAST_node *chillAST_VarDecl::clone() { + fprintf(stderr, "\nchillAST_VarDecl::clone() cloning vardecl for %s\n", varname); if (isAParameter) fprintf(stderr, "old vardecl IS a parameter\n"); //else fprintf(stderr, "old vardecl IS NOT a parameter\n"); - chillAST_VarDecl *vd = new chillAST_VarDecl( vartype, strdup(varname), arraypart, NULL); // NULL so we don't add the variable AGAIN to the (presumably) function - + chillAST_VarDecl *vd = new chillAST_VarDecl(vartype, strdup(varname), arraypart, + NULL); // NULL so we don't add the variable AGAIN to the (presumably) function + vd->typedefinition = typedefinition; - vd->vardef = vardef; // perhaps should not do this TODO + vd->vardef = vardef; // perhaps should not do this TODO //vd->isStruct = (vardef != NULL); // ?? - - vd->underlyingtype = strdup(underlyingtype); + + vd->underlyingtype = strdup(underlyingtype); vd->arraysizes = NULL; - vd->knownArraySizes = knownArraySizes; + vd->knownArraySizes = knownArraySizes; vd->numdimensions = numdimensions; vd->arraypointerpart = NULL; - if (arraypart != NULL && NULL!=arraysizes) { // !strcmp(arraypart, "")) { + if (arraypart != NULL && NULL != arraysizes) { // !strcmp(arraypart, "")) { //fprintf(stderr, "in chillAST_VarDecl::clone(), cloning the array info\n"); //fprintf(stderr, "numdimensions %d arraysizes 0x%x\n", numdimensions, arraysizes) ; vd->numdimensions = numdimensions; - if (arraysizes) { - vd->arraysizes = (int *)malloc( sizeof(int *) * numdimensions ); - for (int i=0; i< numdimensions; i++) { - //fprintf(stderr, "i %d\n", i); - vd->arraysizes[i] = arraysizes[i]; + if (arraysizes) { + vd->arraysizes = (int *) malloc(sizeof(int *) * numdimensions); + for (int i = 0; i < numdimensions; i++) { + //fprintf(stderr, "i %d\n", i); + vd->arraysizes[i] = arraysizes[i]; } } } - if ( arraypointerpart ) { - //fprintf(stderr, "copying arraypointerpart\n"); - vd->arraypointerpart = strdup( arraypointerpart); + if (arraypointerpart) { + //fprintf(stderr, "copying arraypointerpart\n"); + vd->arraypointerpart = strdup(arraypointerpart); } - vd->isStruct = this->isStruct; - //vd->insideAStruct = this->insideAStruct; + vd->isStruct = this->isStruct; + //vd->insideAStruct = this->insideAStruct; - //if (vd->isStruct) fprintf(stderr, "vardecl::clone() %s is a struct\n", varname); - //else fprintf(stderr, "vardecl::clone() %s is NOT a struct\n", varname); + //if (vd->isStruct) fprintf(stderr, "vardecl::clone() %s is a struct\n", varname); + //else fprintf(stderr, "vardecl::clone() %s is NOT a struct\n", varname); - vd->knownArraySizes = this->knownArraySizes; + vd->knownArraySizes = this->knownArraySizes; vd->isFromSourceFile = isFromSourceFile; - if (filename) vd->filename = strdup(filename); + if (filename) vd->filename = strdup(filename); return vd; } -void chillAST_VarDecl::splitarraypart() { +void chillAST_VarDecl::splitarraypart() { if (arraypart) CHILL_DEBUG_PRINT("%s\n", arraypart); // split arraypart into (leading??) asterisks and known sizes [1][2][3] - if (!arraypart || // NULL + if (!arraypart || // NULL (arraypart && (*arraypart == '\0'))) { // or empty string // parts are both empty string if (arraypointerpart) free(arraypointerpart); arraypointerpart = strdup(""); if (arraysetpart) free(arraysetpart); - arraysetpart = strdup(""); + arraysetpart = strdup(""); return; } // arraypart exists and is not empty int asteriskcount = 0; int fixedcount = 0; - for ( int i=0; i<strlen(arraypart); i++) { - if (arraypart[i] == '*') { + for (int i = 0; i < strlen(arraypart); i++) { + if (arraypart[i] == '*') { if (fixedcount) { CHILL_ERROR("illegal vardecl arraypart: '%s'\n", arraypart); - segfault(); + exit(-1); exit(-1); } asteriskcount++; - } - else { // remainder is fixed? - fixedcount++; + } else { // remainder is fixed? + fixedcount++; // check for brackets and digits only? TODO } } - arraypointerpart = (char *) calloc( asteriskcount+1, sizeof(char)); - arraysetpart = (char *) calloc( fixedcount+1, sizeof(char)); + arraypointerpart = (char *) calloc(asteriskcount + 1, sizeof(char)); + arraysetpart = (char *) calloc(fixedcount + 1, sizeof(char)); char *ptr = arraypart; - for ( int i=0; i<asteriskcount; i++) arraypointerpart[i] = *ptr++; - for ( int i=0; i<fixedcount; i++) arraysetpart[i] = *ptr++; + for (int i = 0; i < asteriskcount; i++) arraypointerpart[i] = *ptr++; + for (int i = 0; i < fixedcount; i++) arraysetpart[i] = *ptr++; - //fprintf(stderr, "%s = %s + %s\n", arraypart, arraypointerpart, arraysetpart); + //fprintf(stderr, "%s = %s + %s\n", arraypart, arraypointerpart, arraysetpart); } - - - - -chillAST_IntegerLiteral::chillAST_IntegerLiteral(int val, chillAST_node *par){ - value = val; +chillAST_IntegerLiteral::chillAST_IntegerLiteral(int val, chillAST_node *par) { + value = val; asttype = CHILLAST_NODETYPE_INTEGERLITERAL; parent = par; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; } -void chillAST_IntegerLiteral::print( int indent, FILE *fp) { +void chillAST_IntegerLiteral::print(int indent, FILE *fp) { chillindent(indent, fp); fprintf(fp, "%d", value); - fflush(fp); + fflush(fp); } -void chillAST_IntegerLiteral::dump( int indent, FILE *fp) { +void chillAST_IntegerLiteral::dump(int indent, FILE *fp) { chillindent(indent, fp); fprintf(fp, "(IntegerLiteral 'int' %d)\n", value); - fflush(fp); + fflush(fp); } +class chillAST_node *chillAST_IntegerLiteral::constantFold() { return this; } // can never do anything -class chillAST_node* chillAST_IntegerLiteral::constantFold() { return this; } // can never do anything +class chillAST_node *chillAST_IntegerLiteral::clone() { -class chillAST_node* chillAST_IntegerLiteral::clone() { - - chillAST_IntegerLiteral *IL = new chillAST_IntegerLiteral( value, parent ); - IL->isFromSourceFile = isFromSourceFile; - if (filename) IL->filename = strdup(filename); - return IL; + chillAST_IntegerLiteral *IL = new chillAST_IntegerLiteral(value, parent); + IL->isFromSourceFile = isFromSourceFile; + if (filename) IL->filename = strdup(filename); + return IL; } - -chillAST_FloatingLiteral::chillAST_FloatingLiteral(float val, chillAST_node *par){ - value = val; + +chillAST_FloatingLiteral::chillAST_FloatingLiteral(float val, chillAST_node *par) { + value = val; precision = 1; - float0double1 = 0; // which is live! - allthedigits = NULL; + float0double1 = 0; // which is live! + allthedigits = NULL; asttype = CHILLAST_NODETYPE_FLOATINGLITERAL; parent = par; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; } -chillAST_FloatingLiteral::chillAST_FloatingLiteral(double val, chillAST_node *par){ - doublevalue = val; +chillAST_FloatingLiteral::chillAST_FloatingLiteral(double val, chillAST_node *par) { + doublevalue = val; precision = 2; - float0double1 = 1; // which is live! - allthedigits = NULL; + float0double1 = 1; // which is live! + allthedigits = NULL; asttype = CHILLAST_NODETYPE_FLOATINGLITERAL; parent = par; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; } -chillAST_FloatingLiteral::chillAST_FloatingLiteral(float val, int precis, chillAST_node *par){ - value = val; +chillAST_FloatingLiteral::chillAST_FloatingLiteral(float val, int precis, chillAST_node *par) { + value = val; precision = 1; - float0double1 = 0; // which is live! - precision = precis; // - allthedigits = NULL; + float0double1 = 0; // which is live! + precision = precis; // + allthedigits = NULL; asttype = CHILLAST_NODETYPE_FLOATINGLITERAL; parent = par; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; } -chillAST_FloatingLiteral::chillAST_FloatingLiteral(double val, int precis, chillAST_node *par){ - doublevalue = val; - float0double1 = 1; // which is live! - precision = precis; // - allthedigits = NULL; +chillAST_FloatingLiteral::chillAST_FloatingLiteral(double val, int precis, chillAST_node *par) { + doublevalue = val; + float0double1 = 1; // which is live! + precision = precis; // + allthedigits = NULL; asttype = CHILLAST_NODETYPE_FLOATINGLITERAL; parent = par; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; } -chillAST_FloatingLiteral::chillAST_FloatingLiteral(float val, const char *printthis, chillAST_node *par){ - value = val; - float0double1 = 0; // which is live! +chillAST_FloatingLiteral::chillAST_FloatingLiteral(float val, const char *printthis, chillAST_node *par) { + value = val; + float0double1 = 0; // which is live! precision = 1; allthedigits = NULL; - if (printthis) allthedigits = strdup( printthis ); - //fprintf(stderr, "\nfloatingliteral allthedigits = '%s'\n", allthedigits); + if (printthis) allthedigits = strdup(printthis); + //fprintf(stderr, "\nfloatingliteral allthedigits = '%s'\n", allthedigits); asttype = CHILLAST_NODETYPE_FLOATINGLITERAL; parent = par; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; } -chillAST_FloatingLiteral::chillAST_FloatingLiteral(float val, int precis, const char *printthis, chillAST_node *par){ - value = val; - float0double1 = 0; // which is live! - precision = precis; // but value is a float?? TODO +chillAST_FloatingLiteral::chillAST_FloatingLiteral(float val, int precis, const char *printthis, chillAST_node *par) { + value = val; + float0double1 = 0; // which is live! + precision = precis; // but value is a float?? TODO allthedigits = NULL; - if (printthis) { - //fprintf(stderr, "\nchillAST_FloatingLiteral constructor, printthis "); - //fprintf(stderr, "%p\n", printthis); - allthedigits = strdup( printthis ); + if (printthis) { + //fprintf(stderr, "\nchillAST_FloatingLiteral constructor, printthis "); + //fprintf(stderr, "%p\n", printthis); + allthedigits = strdup(printthis); } - //fprintf(stderr, "\nfloatingliteral allthedigits = '%s'\n", allthedigits); + //fprintf(stderr, "\nfloatingliteral allthedigits = '%s'\n", allthedigits); asttype = CHILLAST_NODETYPE_FLOATINGLITERAL; parent = par; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; } -chillAST_FloatingLiteral::chillAST_FloatingLiteral( chillAST_FloatingLiteral *old ) { - //fprintf(stderr, "chillAST_FloatingLiteral::chillAST_FloatingLiteral( old ) allthedigits %p\n", old->allthedigits); +chillAST_FloatingLiteral::chillAST_FloatingLiteral(chillAST_FloatingLiteral *old) { + //fprintf(stderr, "chillAST_FloatingLiteral::chillAST_FloatingLiteral( old ) allthedigits %p\n", old->allthedigits); asttype = CHILLAST_NODETYPE_FLOATINGLITERAL; - value = old->value; - doublevalue = old->doublevalue; - float0double1 = old->float0double1; + value = old->value; + doublevalue = old->doublevalue; + float0double1 = old->float0double1; allthedigits = NULL; - if (old->allthedigits) allthedigits = strdup(old->allthedigits); - precision = old->precision; - isFromSourceFile = true; // default + if (old->allthedigits) allthedigits = strdup(old->allthedigits); + precision = old->precision; + isFromSourceFile = true; // default filename = NULL; } - -void chillAST_FloatingLiteral::print( int indent, FILE *fp) { +void chillAST_FloatingLiteral::print(int indent, FILE *fp) { chillindent(indent, fp); //fprintf(fp, "%f", value); // attempt to be more like rose output - char output[1024]; // warning, hardcoded + char output[1024]; // warning, hardcoded if (allthedigits != NULL) { - strcpy(output, allthedigits ); // if they have specified 100 digits of pi, give 'em 100 digits - //fprintf(stderr, "floatingliteral allthedigits = '%s'\n", allthedigits); - } - else { - if (float0double1 == 0) sprintf(output, "%f", value); + strcpy(output, allthedigits); // if they have specified 100 digits of pi, give 'em 100 digits + //fprintf(stderr, "floatingliteral allthedigits = '%s'\n", allthedigits); + } else { + if (float0double1 == 0) sprintf(output, "%f", value); else sprintf(output, "%f", doublevalue); - + // next part to avoid printing 123.4560000000000000000000000000 char *dot = index(output, '.'); - if (dot) { + if (dot) { char *end = output + strlen(output); char *onechar; char *lastnonzero = dot; - for (onechar = output; onechar < end; onechar ++) { + for (onechar = output; onechar < end; onechar++) { if (*onechar != '0') lastnonzero = onechar; } - - if (lastnonzero == dot) + + if (lastnonzero == dot) lastnonzero[2] = '\0'; // may be after end of string, but that should be OK else lastnonzero[1] = '\0'; // may be after end of string, but that should be OK } } - if (precision == 1) { + if (precision == 1) { int len = strlen(output); output[len] = 'f'; // explicit single precision - output[len+1] = '\0'; + output[len + 1] = '\0'; } - fprintf(fp, "%s", output); - fflush(fp); + fprintf(fp, "%s", output); + fflush(fp); } -void chillAST_FloatingLiteral::dump( int indent, FILE *fp) { +void chillAST_FloatingLiteral::dump(int indent, FILE *fp) { chillindent(indent, fp); // 2x2 cases ??? - if (precision == 1) - fprintf(fp, "(FloatingLiteral 'float' "); - else fprintf(fp, "(FloatingLiteral 'double' "); + if (precision == 1) + fprintf(fp, "(FloatingLiteral 'float' "); + else fprintf(fp, "(FloatingLiteral 'double' "); - if (float0double1 == 0) fprintf(fp, "%f)\n", value); // %f gives enough digits - else fprintf(fp, "%f)\n", doublevalue); // %f gives enough digits - fflush(fp); + if (float0double1 == 0) fprintf(fp, "%f)\n", value); // %f gives enough digits + else fprintf(fp, "%f)\n", doublevalue); // %f gives enough digits + fflush(fp); } -chillAST_node* chillAST_FloatingLiteral::constantFold() { return this; }; // NOOP +chillAST_node *chillAST_FloatingLiteral::constantFold() { return this; }; // NOOP -chillAST_node* chillAST_FloatingLiteral::clone() { - //fprintf(stderr, "chillAST_FloatingLiteral::clone() "); - //fprintf(stderr, "allthedigits %p \n", allthedigits); - chillAST_FloatingLiteral *newone = new chillAST_FloatingLiteral( this ); +chillAST_node *chillAST_FloatingLiteral::clone() { + //fprintf(stderr, "chillAST_FloatingLiteral::clone() "); + //fprintf(stderr, "allthedigits %p \n", allthedigits); + chillAST_FloatingLiteral *newone = new chillAST_FloatingLiteral(this); - newone->isFromSourceFile = isFromSourceFile; - if (filename) newone->filename = strdup(filename); - //print(); printf(" "); newone->print(); printf("\n"); fflush(stdout); + newone->isFromSourceFile = isFromSourceFile; + if (filename) newone->filename = strdup(filename); + //print(); printf(" "); newone->print(); printf("\n"); fflush(stdout); return newone; } - -bool chillAST_FloatingLiteral::isSameAs( chillAST_node *other ){ + +bool chillAST_FloatingLiteral::isSameAs(chillAST_node *other) { if (!other->isFloatingLiteral()) return false; - chillAST_FloatingLiteral *o = (chillAST_FloatingLiteral *)other; + chillAST_FloatingLiteral *o = (chillAST_FloatingLiteral *) other; // should we care about single vs double precision? if (float0double1 != o->float0double1) return false; - if (float0double1 == 0) { + if (float0double1 == 0) { return value == o->value; // WARNING, comparing floats with == } return doublevalue == o->doublevalue; // WARNING, comparing doubless with == -} - - - +} -chillAST_UnaryOperator::chillAST_UnaryOperator( const char *oper, bool pre, chillAST_node *sub, chillAST_node *par ) { +chillAST_UnaryOperator::chillAST_UnaryOperator(const char *oper, bool pre, chillAST_node *sub, chillAST_node *par) { op = strdup(oper); prefix = pre; - subexpr = sub; - subexpr->setParent( this ); - asttype = CHILLAST_NODETYPE_UNARYOPERATOR; - parent = par; - isFromSourceFile = true; // default + subexpr = sub; + subexpr->setParent(this); + asttype = CHILLAST_NODETYPE_UNARYOPERATOR; + parent = par; + isFromSourceFile = true; // default filename = NULL; } -void chillAST_UnaryOperator::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool w ) { - subexpr->gatherArrayRefs( refs, isAssignmentOp()); // +void chillAST_UnaryOperator::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool w) { + subexpr->gatherArrayRefs(refs, isAssignmentOp()); // } - -void chillAST_UnaryOperator::print( int indent, FILE *fp) { +void chillAST_UnaryOperator::print(int indent, FILE *fp) { bool needparens = false; if (subexpr->isNotLeaf()) needparens = true; // may get more complicated - chillindent( indent, fp); // will this ever be invoked? - if (prefix) fprintf(fp, "%s", op); + chillindent(indent, fp); // will this ever be invoked? + if (prefix) fprintf(fp, "%s", op); if (needparens) fprintf(fp, "("); - subexpr->print( 0, fp ); - if (needparens) fprintf(fp, ")"); - if (!prefix) fprintf(fp, "%s", op); - fflush(fp); + subexpr->print(0, fp); + if (needparens) fprintf(fp, ")"); + if (!prefix) fprintf(fp, "%s", op); + fflush(fp); } -void chillAST_UnaryOperator::dump( int indent, FILE *fp) { - chillindent( indent, fp); +void chillAST_UnaryOperator::dump(int indent, FILE *fp) { + chillindent(indent, fp); fprintf(fp, "(UnaryOperator "); - if (prefix) fprintf(fp, "prefix "); + if (prefix) fprintf(fp, "prefix "); else fprintf(fp, "postfix "); fprintf(fp, "%s\n", op); - subexpr->dump(indent+1, fp); + subexpr->dump(indent + 1, fp); - chillindent( indent, fp); + chillindent(indent, fp); fprintf(fp, ")\n"); } -void chillAST_UnaryOperator::gatherVarLHSUsage( vector<chillAST_VarDecl*> &decls ) { +void chillAST_UnaryOperator::gatherVarLHSUsage(vector<chillAST_VarDecl *> &decls) { if ((!strcmp("++", op)) || (!strcmp("--", op))) { - subexpr->gatherVarUsage( decls ); // do all unary modify the subexpr? (no, - ) + subexpr->gatherVarUsage(decls); // do all unary modify the subexpr? (no, - ) } } - -chillAST_node* chillAST_UnaryOperator::constantFold() { +chillAST_node *chillAST_UnaryOperator::constantFold() { //fprintf(stderr, "chillAST_UnaryOperator::constantFold() "); - //print(); fprintf(stderr, "\n"); + //print(); fprintf(stderr, "\n"); subexpr = subexpr->constantFold(); chillAST_node *returnval = this; if (subexpr->isConstant()) { //fprintf(stderr, "unary op folding constants\n"); //print(0,stderr); fprintf(stderr, "\n"); - - if (streq(op, "-")) { + + if (streq(op, "-")) { if (subexpr->isIntegerLiteral()) { - int intval = ((chillAST_IntegerLiteral*)subexpr)->value; - chillAST_IntegerLiteral *I = new chillAST_IntegerLiteral( -intval, parent); + int intval = ((chillAST_IntegerLiteral *) subexpr)->value; + chillAST_IntegerLiteral *I = new chillAST_IntegerLiteral(-intval, parent); returnval = I; //fprintf(stderr, "integer -%d becomes %d\n", intval, I->value); - } - else { - chillAST_FloatingLiteral *FL = (chillAST_FloatingLiteral*)subexpr; - chillAST_FloatingLiteral *F = new chillAST_FloatingLiteral( FL ); // clone + } else { + chillAST_FloatingLiteral *FL = (chillAST_FloatingLiteral *) subexpr; + chillAST_FloatingLiteral *F = new chillAST_FloatingLiteral(FL); // clone F->parent = FL->parent; F->value = -F->value; F->doublevalue = -F->doublevalue; - - F->print(); fprintf(stderr, "\n"); - + + F->print(); + fprintf(stderr, "\n"); + returnval = F; } - } - else fprintf(stderr, "can't fold op '%s' yet\n", op); - } + } else fprintf(stderr, "can't fold op '%s' yet\n", op); + } return returnval; } -class chillAST_node* chillAST_UnaryOperator::clone() { - chillAST_UnaryOperator *UO = new chillAST_UnaryOperator( op, prefix, subexpr->clone(), parent ); - UO->isFromSourceFile = isFromSourceFile; - if (filename) UO->filename = strdup(filename); - return UO; +class chillAST_node *chillAST_UnaryOperator::clone() { + chillAST_UnaryOperator *UO = new chillAST_UnaryOperator(op, prefix, subexpr->clone(), parent); + UO->isFromSourceFile = isFromSourceFile; + if (filename) UO->filename = strdup(filename); + return UO; } -void chillAST_UnaryOperator::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherVarDecls( decls ); +void chillAST_UnaryOperator::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherVarDecls(decls); } -void chillAST_UnaryOperator::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherScalarVarDecls( decls ); +void chillAST_UnaryOperator::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherScalarVarDecls(decls); } -void chillAST_UnaryOperator::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherArrayVarDecls( decls ); +void chillAST_UnaryOperator::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherArrayVarDecls(decls); } -void chillAST_UnaryOperator::gatherDeclRefExprs( vector<chillAST_DeclRefExpr *>&refs ) { - subexpr->gatherDeclRefExprs( refs ); +void chillAST_UnaryOperator::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) { + subexpr->gatherDeclRefExprs(refs); } -void chillAST_UnaryOperator::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherVarUsage( decls ); +void chillAST_UnaryOperator::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherVarUsage(decls); } - void chillAST_UnaryOperator::replaceVarDecls( chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl) { - subexpr->replaceVarDecls( olddecl, newdecl ); - } +void chillAST_UnaryOperator::replaceVarDecls(chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl) { + subexpr->replaceVarDecls(olddecl, newdecl); +} -int chillAST_UnaryOperator::evalAsInt() { +int chillAST_UnaryOperator::evalAsInt() { if (!strcmp("+", op)) return subexpr->evalAsInt(); if (!strcmp("-", op)) return -subexpr->evalAsInt(); if (!strcmp("++", op)) return 1 + subexpr->evalAsInt(); if (!strcmp("--", op)) return subexpr->evalAsInt() - 1; - fprintf(stderr, "chillAST_UnaryOperator::evalAsInt() unhandled op '%s'\n", op); - segfault(); + fprintf(stderr, "chillAST_UnaryOperator::evalAsInt() unhandled op '%s'\n", op); + exit(-1); } -bool chillAST_UnaryOperator::isSameAs( chillAST_node *other ){ +bool chillAST_UnaryOperator::isSameAs(chillAST_node *other) { if (!other->isUnaryOperator()) return false; - chillAST_UnaryOperator *o = (chillAST_UnaryOperator *)other; - if (strcmp(op, o->op)) return false; // different operators - return subexpr->isSameAs( o->subexpr ); // recurse + chillAST_UnaryOperator *o = (chillAST_UnaryOperator *) other; + if (strcmp(op, o->op)) return false; // different operators + return subexpr->isSameAs(o->subexpr); // recurse } -chillAST_ImplicitCastExpr::chillAST_ImplicitCastExpr( chillAST_node *sub, chillAST_node *par ) { +chillAST_ImplicitCastExpr::chillAST_ImplicitCastExpr(chillAST_node *sub, chillAST_node *par) { subexpr = sub; - subexpr->setParent( this ); - asttype = CHILLAST_NODETYPE_IMPLICITCASTEXPR; - parent = par; + subexpr->setParent(this); + asttype = CHILLAST_NODETYPE_IMPLICITCASTEXPR; + parent = par; //fprintf(stderr, "ImplicitCastExpr 0x%x has subexpr 0x%x", this, subexpr); - //fprintf(stderr, " of type %s\n", subexpr->getTypeString()); - isFromSourceFile = true; // default + //fprintf(stderr, " of type %s\n", subexpr->getTypeString()); + isFromSourceFile = true; // default filename = NULL; } -void chillAST_ImplicitCastExpr::print( int indent, FILE *fp) { +void chillAST_ImplicitCastExpr::print(int indent, FILE *fp) { // No need to print anything, simply forward to the sub expression. - subexpr->print( indent, fp ); - fflush(fp); + subexpr->print(indent, fp); + fflush(fp); }; -void chillAST_ImplicitCastExpr::printonly( int indent, FILE *fp) { +void chillAST_ImplicitCastExpr::printonly(int indent, FILE *fp) { // No need to print anything, simply forward to the sub expression. - subexpr->printonly( indent, fp ); - fflush(fp); + subexpr->printonly(indent, fp); + fflush(fp); }; -void chillAST_ImplicitCastExpr::replaceChild( chillAST_node *old, chillAST_node *newchild ){ +void chillAST_ImplicitCastExpr::replaceChild(chillAST_node *old, chillAST_node *newchild) { if (subexpr == old) { // should be the case for this to get called subexpr = newchild; - subexpr->setParent( this ); + subexpr->setParent(this); //old->parent = NULL; return; } fprintf(stderr, "chillAST_ImplicitCastExpr::replaceChild() called with bad 'old'\n"); - exit(-1); // ?? + exit(-1); // ?? } -class chillAST_node* chillAST_ImplicitCastExpr::constantFold() { +class chillAST_node *chillAST_ImplicitCastExpr::constantFold() { chillAST_node *child = subexpr->constantFold(); - child->setParent( parent ) ; // remove myself !! probably a bad idea. TODO - return child; + child->setParent(parent); // remove myself !! probably a bad idea. TODO + return child; } -class chillAST_node* chillAST_ImplicitCastExpr::clone() { - chillAST_ImplicitCastExpr *ICE = new chillAST_ImplicitCastExpr( subexpr->clone(), parent); - ICE->isFromSourceFile = isFromSourceFile; - if (filename) ICE->filename = strdup(filename); - return ICE; +class chillAST_node *chillAST_ImplicitCastExpr::clone() { + chillAST_ImplicitCastExpr *ICE = new chillAST_ImplicitCastExpr(subexpr->clone(), parent); + ICE->isFromSourceFile = isFromSourceFile; + if (filename) ICE->filename = strdup(filename); + return ICE; } -void chillAST_ImplicitCastExpr::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool w ) { - subexpr->gatherArrayRefs( refs, w ); +void chillAST_ImplicitCastExpr::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool w) { + subexpr->gatherArrayRefs(refs, w); } -void chillAST_ImplicitCastExpr::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) { - subexpr->gatherScalarRefs( refs, writtento ); -} +void chillAST_ImplicitCastExpr::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { + subexpr->gatherScalarRefs(refs, writtento); +} -void chillAST_ImplicitCastExpr::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherVarDecls( decls ); +void chillAST_ImplicitCastExpr::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherVarDecls(decls); } -void chillAST_ImplicitCastExpr::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherScalarVarDecls( decls ); +void chillAST_ImplicitCastExpr::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherScalarVarDecls(decls); } -void chillAST_ImplicitCastExpr::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherArrayVarDecls( decls ); +void chillAST_ImplicitCastExpr::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherArrayVarDecls(decls); } -void chillAST_ImplicitCastExpr::gatherDeclRefExprs( vector<chillAST_DeclRefExpr *>&refs ) { - subexpr->gatherDeclRefExprs( refs ); +void chillAST_ImplicitCastExpr::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) { + subexpr->gatherDeclRefExprs(refs); } -void chillAST_ImplicitCastExpr::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherVarUsage( decls ); +void chillAST_ImplicitCastExpr::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherVarUsage(decls); } +chillAST_CStyleCastExpr::chillAST_CStyleCastExpr(const char *to, chillAST_node *sub, chillAST_node *par) { -chillAST_CStyleCastExpr::chillAST_CStyleCastExpr( const char *to, chillAST_node *sub, chillAST_node *par ) { - - //fprintf(stderr, "chillAST_CStyleCastExpr::chillAST_CStyleCastExpr( %s, ...)\n", to); + //fprintf(stderr, "chillAST_CStyleCastExpr::chillAST_CStyleCastExpr( %s, ...)\n", to); towhat = strdup(to); subexpr = sub; - if (subexpr) subexpr->setParent( this ); - asttype = CHILLAST_NODETYPE_CSTYLECASTEXPR; - parent = par; - //fprintf(stderr, "chillAST_CStyleCastExpr (%s) sub 0x%x\n", towhat, sub ); - isFromSourceFile = true; // default + if (subexpr) subexpr->setParent(this); + asttype = CHILLAST_NODETYPE_CSTYLECASTEXPR; + parent = par; + //fprintf(stderr, "chillAST_CStyleCastExpr (%s) sub 0x%x\n", towhat, sub ); + isFromSourceFile = true; // default filename = NULL; } -void chillAST_CStyleCastExpr::replaceChild( chillAST_node *old, chillAST_node *newchild ){ +void chillAST_CStyleCastExpr::replaceChild(chillAST_node *old, chillAST_node *newchild) { if (subexpr == old) { // should be the case for this to get called subexpr = newchild; - subexpr->setParent( this ); + subexpr->setParent(this); //old->parent = NULL; return; } fprintf(stderr, "chillAST_CStyleCastExpr::replaceChild() called with bad 'old'\n"); - exit(-1); // ?? + exit(-1); // ?? } - void chillAST_CStyleCastExpr::replaceVarDecls( chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl) { - subexpr->replaceVarDecls( olddecl, newdecl); - } +void chillAST_CStyleCastExpr::replaceVarDecls(chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl) { + subexpr->replaceVarDecls(olddecl, newdecl); +} -void chillAST_CStyleCastExpr::print( int indent, FILE *fp) { - //fprintf(stderr, "CStyleCastExpr::print()\n"); - chillindent(indent, fp); +void chillAST_CStyleCastExpr::print(int indent, FILE *fp) { + //fprintf(stderr, "CStyleCastExpr::print()\n"); + chillindent(indent, fp); // special cases? should probably walk the AST and change the literal itself - if ( !strcmp("float", towhat) && subexpr->isIntegerLiteral()) { // (float) 3 => 3.0f - subexpr->print( 0, fp ); fprintf(fp, ".0f"); - } - else if ( !strcmp("double", towhat) && subexpr->isIntegerLiteral()) { // (double) 3 => 3.0 - subexpr->print( 0, fp ); fprintf(fp, ".0"); - } - else if ( !strcmp("float", towhat) && subexpr->isFloatingLiteral()) { // (float) 3.0 => 3.0f - subexpr->print( 0, fp ); fprintf(fp, "f"); - } - else { // general case - fprintf(fp, "((%s) ", towhat); - //fprintf(fp, "\ntowhat '%s'\n", towhat ); - - if (subexpr->isVarDecl()) fprintf(fp, "%s", ((chillAST_VarDecl *)subexpr)->varname); - else subexpr->print( indent, fp ); - //fprintf(fp, "subexpr '%s' ", subexpr->getTypeString()); - fprintf(fp, ")"); + if (!strcmp("float", towhat) && subexpr->isIntegerLiteral()) { // (float) 3 => 3.0f + subexpr->print(0, fp); + fprintf(fp, ".0f"); + } else if (!strcmp("double", towhat) && subexpr->isIntegerLiteral()) { // (double) 3 => 3.0 + subexpr->print(0, fp); + fprintf(fp, ".0"); + } else if (!strcmp("float", towhat) && subexpr->isFloatingLiteral()) { // (float) 3.0 => 3.0f + subexpr->print(0, fp); + fprintf(fp, "f"); + } else { // general case + fprintf(fp, "((%s) ", towhat); + //fprintf(fp, "\ntowhat '%s'\n", towhat ); + + if (subexpr->isVarDecl()) fprintf(fp, "%s", ((chillAST_VarDecl *) subexpr)->varname); + else subexpr->print(indent, fp); + //fprintf(fp, "subexpr '%s' ", subexpr->getTypeString()); + fprintf(fp, ")"); } - fflush(fp); + fflush(fp); }; -void chillAST_CStyleCastExpr::dump( int indent, FILE *fp) { +void chillAST_CStyleCastExpr::dump(int indent, FILE *fp) { chillindent(indent, fp); fprintf(fp, "(CStyleCastExpr (%s) \n", towhat); - subexpr->dump( indent+1, fp ); + subexpr->dump(indent + 1, fp); chillindent(indent, fp); fprintf(fp, ")\n"); - fflush(fp); + fflush(fp); } -class chillAST_node* chillAST_CStyleCastExpr::constantFold() { +class chillAST_node *chillAST_CStyleCastExpr::constantFold() { subexpr = subexpr->constantFold(); - return this; + return this; } -class chillAST_node* chillAST_CStyleCastExpr::clone() { - chillAST_CStyleCastExpr *CSCE = new chillAST_CStyleCastExpr( towhat, subexpr->clone(), parent ); - CSCE->isFromSourceFile = isFromSourceFile; - if (filename) CSCE->filename = strdup(filename); +class chillAST_node *chillAST_CStyleCastExpr::clone() { + chillAST_CStyleCastExpr *CSCE = new chillAST_CStyleCastExpr(towhat, subexpr->clone(), parent); + CSCE->isFromSourceFile = isFromSourceFile; + if (filename) CSCE->filename = strdup(filename); return CSCE; } -void chillAST_CStyleCastExpr::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool w ) { - subexpr->gatherArrayRefs( refs, w ); +void chillAST_CStyleCastExpr::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool w) { + subexpr->gatherArrayRefs(refs, w); } -void chillAST_CStyleCastExpr::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) { - subexpr->gatherScalarRefs( refs, writtento ); -} - - -void chillAST_CStyleCastExpr::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherVarDecls( decls ); +void chillAST_CStyleCastExpr::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { + subexpr->gatherScalarRefs(refs, writtento); } -void chillAST_CStyleCastExpr::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherScalarVarDecls( decls ); +void chillAST_CStyleCastExpr::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherVarDecls(decls); } -void chillAST_CStyleCastExpr::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherArrayVarDecls( decls ); +void chillAST_CStyleCastExpr::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherScalarVarDecls(decls); } -void chillAST_CStyleCastExpr::gatherDeclRefExprs( vector<chillAST_DeclRefExpr *>&refs ) { - subexpr->gatherDeclRefExprs( refs ); +void chillAST_CStyleCastExpr::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherArrayVarDecls(decls); } -void chillAST_CStyleCastExpr::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherVarUsage( decls ); +void chillAST_CStyleCastExpr::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) { + subexpr->gatherDeclRefExprs(refs); } +void chillAST_CStyleCastExpr::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherVarUsage(decls); +} -chillAST_CStyleAddressOf::chillAST_CStyleAddressOf( chillAST_node *sub, chillAST_node *par ) { +chillAST_CStyleAddressOf::chillAST_CStyleAddressOf(chillAST_node *sub, chillAST_node *par) { subexpr = sub; - subexpr->setParent( this ); - asttype = CHILLAST_NODETYPE_CSTYLEADDRESSOF; - parent = par; - //fprintf(stderr, "chillAST_CStyleCastExpr (%s) sub 0x%x\n", towhat, sub ); - isFromSourceFile = true; // default + subexpr->setParent(this); + asttype = CHILLAST_NODETYPE_CSTYLEADDRESSOF; + parent = par; + //fprintf(stderr, "chillAST_CStyleCastExpr (%s) sub 0x%x\n", towhat, sub ); + isFromSourceFile = true; // default filename = NULL; } -void chillAST_CStyleAddressOf::print( int indent, FILE *fp) { - //fprintf(stderr, "CStyleAddressOf::print()\n"); - chillindent(indent, fp); - fprintf(fp, "(&"); - subexpr->print( 0, fp ); - fprintf(fp, ")"); - fflush(fp); +void chillAST_CStyleAddressOf::print(int indent, FILE *fp) { + //fprintf(stderr, "CStyleAddressOf::print()\n"); + chillindent(indent, fp); + fprintf(fp, "(&"); + subexpr->print(0, fp); + fprintf(fp, ")"); + fflush(fp); }; -void chillAST_CStyleAddressOf::dump( int indent, FILE *fp) { +void chillAST_CStyleAddressOf::dump(int indent, FILE *fp) { chillindent(indent, fp); fprintf(fp, "(CStyleAddressOf \n"); - subexpr->print( indent+1, fp ); + subexpr->print(indent + 1, fp); chillindent(indent, fp); fprintf(fp, ")\n"); - fflush(fp); + fflush(fp); } -class chillAST_node* chillAST_CStyleAddressOf::constantFold() { +class chillAST_node *chillAST_CStyleAddressOf::constantFold() { subexpr = subexpr->constantFold(); - return this; + return this; } -class chillAST_node* chillAST_CStyleAddressOf::clone() { - chillAST_CStyleAddressOf *CSAO = new chillAST_CStyleAddressOf( subexpr->clone(), parent ); - CSAO->isFromSourceFile = isFromSourceFile; - if (filename) CSAO->filename = strdup(filename); +class chillAST_node *chillAST_CStyleAddressOf::clone() { + chillAST_CStyleAddressOf *CSAO = new chillAST_CStyleAddressOf(subexpr->clone(), parent); + CSAO->isFromSourceFile = isFromSourceFile; + if (filename) CSAO->filename = strdup(filename); return CSAO; } -void chillAST_CStyleAddressOf::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool w ) { - subexpr->gatherArrayRefs( refs, w ); +void chillAST_CStyleAddressOf::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool w) { + subexpr->gatherArrayRefs(refs, w); } -void chillAST_CStyleAddressOf::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) { - subexpr->gatherScalarRefs( refs, writtento ); -} - -void chillAST_CStyleAddressOf::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherVarDecls( decls ); +void chillAST_CStyleAddressOf::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { + subexpr->gatherScalarRefs(refs, writtento); } -void chillAST_CStyleAddressOf::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherScalarVarDecls( decls ); +void chillAST_CStyleAddressOf::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherVarDecls(decls); } - -void chillAST_CStyleAddressOf::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherArrayVarDecls( decls ); +void chillAST_CStyleAddressOf::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherScalarVarDecls(decls); } -void chillAST_CStyleAddressOf::gatherDeclRefExprs( vector<chillAST_DeclRefExpr *>&refs ) { - subexpr->gatherDeclRefExprs( refs ); +void chillAST_CStyleAddressOf::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherArrayVarDecls(decls); } -void chillAST_CStyleAddressOf::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherVarUsage( decls ); +void chillAST_CStyleAddressOf::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) { + subexpr->gatherDeclRefExprs(refs); } +void chillAST_CStyleAddressOf::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherVarUsage(decls); +} chillAST_Malloc::chillAST_Malloc(chillAST_node *size, chillAST_node *p) { @@ -4547,810 +4488,793 @@ chillAST_Malloc::chillAST_Malloc(chillAST_node *size, chillAST_node *p) { sizeexpr = size; // probably a multiply like sizeof(int) * 1024 asttype = CHILLAST_NODETYPE_MALLOC; parent = p; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; -}; +}; chillAST_Malloc::chillAST_Malloc(char *thething, chillAST_node *numthings, chillAST_node *p) { thing = strdup(thething); // "int" or "float" or "struct widget" - sizeexpr = numthings; + sizeexpr = numthings; asttype = CHILLAST_NODETYPE_MALLOC; parent = p; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; -}; +}; -chillAST_node* chillAST_Malloc::constantFold() { - sizeexpr->constantFold(); +chillAST_node *chillAST_Malloc::constantFold() { + sizeexpr->constantFold(); } -chillAST_node* chillAST_Malloc::clone() { - chillAST_Malloc *M = new chillAST_Malloc( thing, sizeexpr, parent); // the general version - M->isFromSourceFile = isFromSourceFile; - if (filename) M->filename = strdup(filename); +chillAST_node *chillAST_Malloc::clone() { + chillAST_Malloc *M = new chillAST_Malloc(thing, sizeexpr, parent); // the general version + M->isFromSourceFile = isFromSourceFile; + if (filename) M->filename = strdup(filename); return M; -}; +}; -void chillAST_Malloc::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool writtento ) { - sizeexpr->gatherArrayRefs( refs, writtento ); +void chillAST_Malloc::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool writtento) { + sizeexpr->gatherArrayRefs(refs, writtento); }; -void chillAST_Malloc::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) { - sizeexpr->gatherScalarRefs( refs, writtento ); +void chillAST_Malloc::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { + sizeexpr->gatherScalarRefs(refs, writtento); }; -void chillAST_Malloc::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - sizeexpr->gatherVarDecls(decls); +void chillAST_Malloc::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + sizeexpr->gatherVarDecls(decls); }; -void chillAST_Malloc::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ){ - sizeexpr->gatherScalarVarDecls(decls); +void chillAST_Malloc::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + sizeexpr->gatherScalarVarDecls(decls); }; -void chillAST_Malloc::gatherArrayVarDecls ( vector<chillAST_VarDecl*> &decls ) { - sizeexpr->gatherArrayVarDecls(decls); +void chillAST_Malloc::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + sizeexpr->gatherArrayVarDecls(decls); }; -void chillAST_Malloc::gatherVarUsage( vector<chillAST_VarDecl*> &decls ){ - sizeexpr->gatherVarUsage(decls); +void chillAST_Malloc::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + sizeexpr->gatherVarUsage(decls); }; +void chillAST_Malloc::print(int indent, FILE *fp) { + chillindent(indent, fp); + fprintf(fp, "malloc("); -void chillAST_Malloc::print( int indent, FILE *fp ) { - chillindent(indent, fp); - fprintf(fp, "malloc("); - if (thing) { - fprintf(fp, " sizeof(%s) * ", thing ); + fprintf(fp, " sizeof(%s) * ", thing); } - sizeexpr->print(0,fp); + sizeexpr->print(0, fp); fprintf(fp, ")"); - fflush(fp); -}; + fflush(fp); +}; -void chillAST_Malloc::dump( int indent, FILE *fp ) { - chillindent(indent, fp); - fprintf(fp, "(Malloc \n"); - sizeexpr->dump( indent+1, fp ); - chillindent(indent, fp); +void chillAST_Malloc::dump(int indent, FILE *fp) { + chillindent(indent, fp); + fprintf(fp, "(Malloc \n"); + sizeexpr->dump(indent + 1, fp); + chillindent(indent, fp); fprintf(fp, ")\n"); - fflush(fp); + fflush(fp); }; - chillAST_CudaMalloc::chillAST_CudaMalloc(chillAST_node *devmemptr, chillAST_node *size, chillAST_node *p) { - devPtr = devmemptr; + devPtr = devmemptr; sizeinbytes = size; // probably a multiply like sizeof(int) * 1024 asttype = CHILLAST_NODETYPE_CUDAMALLOC; parent = p; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; -}; +}; -void chillAST_CudaMalloc::print( int indent, FILE *fp ) { - chillindent(indent, fp); - fprintf(fp, "cudaMalloc("); - devPtr->print( 0, fp ); +void chillAST_CudaMalloc::print(int indent, FILE *fp) { + chillindent(indent, fp); + fprintf(fp, "cudaMalloc("); + devPtr->print(0, fp); fprintf(fp, ","); - sizeinbytes->print( 0, fp ); + sizeinbytes->print(0, fp); fprintf(fp, ")"); - fflush(fp); + fflush(fp); }; -void chillAST_CudaMalloc::dump( int indent, FILE *fp ) { - chillindent(indent, fp); - fprintf(fp, "(CudaMalloc \n"); - devPtr->dump( indent+1, fp ); +void chillAST_CudaMalloc::dump(int indent, FILE *fp) { + chillindent(indent, fp); + fprintf(fp, "(CudaMalloc \n"); + devPtr->dump(indent + 1, fp); fprintf(fp, "\n"); - sizeinbytes->dump( indent+1, fp ); + sizeinbytes->dump(indent + 1, fp); fprintf(fp, ")\n"); - fflush(fp); + fflush(fp); }; -class chillAST_node* chillAST_CudaMalloc::constantFold() { +class chillAST_node *chillAST_CudaMalloc::constantFold() { devPtr = devPtr->constantFold(); - return this; + return this; } -class chillAST_node* chillAST_CudaMalloc::clone() { - chillAST_CudaMalloc *CM = new chillAST_CudaMalloc( devPtr->clone(), sizeinbytes->clone(), parent ); - CM->isFromSourceFile = isFromSourceFile; - if (filename) CM->filename = strdup(filename); - return CM; +class chillAST_node *chillAST_CudaMalloc::clone() { + chillAST_CudaMalloc *CM = new chillAST_CudaMalloc(devPtr->clone(), sizeinbytes->clone(), parent); + CM->isFromSourceFile = isFromSourceFile; + if (filename) CM->filename = strdup(filename); + return CM; } -void chillAST_CudaMalloc::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool w ) { - devPtr->gatherArrayRefs( refs, false ); - sizeinbytes->gatherArrayRefs( refs, false ); +void chillAST_CudaMalloc::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool w) { + devPtr->gatherArrayRefs(refs, false); + sizeinbytes->gatherArrayRefs(refs, false); } -void chillAST_CudaMalloc::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) { - devPtr->gatherScalarRefs( refs, false ); - sizeinbytes->gatherScalarRefs( refs, false ); +void chillAST_CudaMalloc::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { + devPtr->gatherScalarRefs(refs, false); + sizeinbytes->gatherScalarRefs(refs, false); } -void chillAST_CudaMalloc::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - devPtr->gatherVarDecls( decls ); - sizeinbytes->gatherVarDecls( decls ); +void chillAST_CudaMalloc::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + devPtr->gatherVarDecls(decls); + sizeinbytes->gatherVarDecls(decls); } -void chillAST_CudaMalloc::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - devPtr->gatherScalarVarDecls( decls ); - sizeinbytes->gatherScalarVarDecls( decls ); +void chillAST_CudaMalloc::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + devPtr->gatherScalarVarDecls(decls); + sizeinbytes->gatherScalarVarDecls(decls); } - -void chillAST_CudaMalloc::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - devPtr->gatherArrayVarDecls( decls ); - sizeinbytes->gatherArrayVarDecls( decls ); +void chillAST_CudaMalloc::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + devPtr->gatherArrayVarDecls(decls); + sizeinbytes->gatherArrayVarDecls(decls); } - -void chillAST_CudaMalloc::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - devPtr->gatherVarUsage( decls ); - sizeinbytes->gatherVarUsage( decls ); +void chillAST_CudaMalloc::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + devPtr->gatherVarUsage(decls); + sizeinbytes->gatherVarUsage(decls); } - chillAST_CudaFree::chillAST_CudaFree(chillAST_VarDecl *var, chillAST_node *p) { - variable = var; + variable = var; parent = p; asttype = CHILLAST_NODETYPE_CUDAFREE; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; -}; +}; -void chillAST_CudaFree::print( int indent, FILE *fp ) { - chillindent(indent, fp); - fprintf(fp, "cudaFree(%s)", variable->varname); - fflush(fp); +void chillAST_CudaFree::print(int indent, FILE *fp) { + chillindent(indent, fp); + fprintf(fp, "cudaFree(%s)", variable->varname); + fflush(fp); }; -void chillAST_CudaFree::dump( int indent, FILE *fp ) { - chillindent(indent, fp); - fprintf(fp, "(CudaFree %s )\n", variable->varname); - fflush(fp); +void chillAST_CudaFree::dump(int indent, FILE *fp) { + chillindent(indent, fp); + fprintf(fp, "(CudaFree %s )\n", variable->varname); + fflush(fp); }; -class chillAST_node* chillAST_CudaFree::constantFold() { - return this; +class chillAST_node *chillAST_CudaFree::constantFold() { + return this; } -class chillAST_node* chillAST_CudaFree::clone() { - chillAST_CudaFree *CF = new chillAST_CudaFree( variable, parent ); - CF->isFromSourceFile = isFromSourceFile; - if (filename) CF->filename = strdup(filename); - return CF; +class chillAST_node *chillAST_CudaFree::clone() { + chillAST_CudaFree *CF = new chillAST_CudaFree(variable, parent); + CF->isFromSourceFile = isFromSourceFile; + if (filename) CF->filename = strdup(filename); + return CF; } -void chillAST_CudaFree::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool w ) {} -void chillAST_CudaFree::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) {} - -void chillAST_CudaFree::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - variable->gatherVarDecls( decls ); -} +void chillAST_CudaFree::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool w) {} +void chillAST_CudaFree::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) {} -void chillAST_CudaFree::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - variable->gatherScalarVarDecls( decls ); +void chillAST_CudaFree::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + variable->gatherVarDecls(decls); } -void chillAST_CudaFree::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - variable->gatherArrayVarDecls( decls ); +void chillAST_CudaFree::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + variable->gatherScalarVarDecls(decls); } - -void chillAST_CudaFree::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - variable->gatherVarUsage( decls ); +void chillAST_CudaFree::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + variable->gatherArrayVarDecls(decls); } +void chillAST_CudaFree::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + variable->gatherVarUsage(decls); +} - - - - - -chillAST_CudaMemcpy::chillAST_CudaMemcpy(chillAST_VarDecl *d, chillAST_VarDecl *s, chillAST_node *siz, char *kind, chillAST_node *par) { +chillAST_CudaMemcpy::chillAST_CudaMemcpy(chillAST_VarDecl *d, chillAST_VarDecl *s, chillAST_node *siz, char *kind, + chillAST_node *par) { dest = d; src = s; - //fprintf(stderr, "chillAST_CudaMemcpy::chillAST_CudaMemcpy( dest %s, src %s, ...)\n", d->varname, s->varname ); + //fprintf(stderr, "chillAST_CudaMemcpy::chillAST_CudaMemcpy( dest %s, src %s, ...)\n", d->varname, s->varname ); size = siz; cudaMemcpyKind = kind; asttype = CHILLAST_NODETYPE_CUDAMEMCPY; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; parent = par; -}; +}; -void chillAST_CudaMemcpy::print( int indent, FILE *fp ) { - chillindent(indent, fp); - fprintf(fp, "cudaMemcpy(%s,%s,", dest->varname, src->varname); +void chillAST_CudaMemcpy::print(int indent, FILE *fp) { + chillindent(indent, fp); + fprintf(fp, "cudaMemcpy(%s,%s,", dest->varname, src->varname); //dest->print( 0, fp ); //fprintf(fp, ","); - // src->print( 0, fp ); just want the src NAME, not name and array info + // src->print( 0, fp ); just want the src NAME, not name and array info //fprintf(fp, ","); - size->print( 0, fp ); + size->print(0, fp); fprintf(fp, ",%s)", cudaMemcpyKind); - fflush(fp); + fflush(fp); }; -void chillAST_CudaMemcpy::dump( int indent, FILE *fp ) { - chillindent(indent, fp); - fprintf(fp, "(CudaMemcpy \n"); - dest->dump( indent+1, fp ); - src->dump( indent+1, fp ); - size->dump( indent+1, fp ); - chillindent(indent+1, fp); +void chillAST_CudaMemcpy::dump(int indent, FILE *fp) { + chillindent(indent, fp); + fprintf(fp, "(CudaMemcpy \n"); + dest->dump(indent + 1, fp); + src->dump(indent + 1, fp); + size->dump(indent + 1, fp); + chillindent(indent + 1, fp); fprintf(fp, ",%s\n", cudaMemcpyKind); - fflush(fp); + fflush(fp); }; -class chillAST_node* chillAST_CudaMemcpy::constantFold() { - dest = (chillAST_VarDecl *)dest->constantFold(); - src = (chillAST_VarDecl *)src->constantFold(); +class chillAST_node *chillAST_CudaMemcpy::constantFold() { + dest = (chillAST_VarDecl *) dest->constantFold(); + src = (chillAST_VarDecl *) src->constantFold(); size = size->constantFold(); - return this; + return this; } -class chillAST_node* chillAST_CudaMemcpy::clone() { - chillAST_CudaMemcpy *CMCPY = new chillAST_CudaMemcpy((chillAST_VarDecl *)(dest->clone()),(chillAST_VarDecl *)(src->clone()), size->clone(), strdup(cudaMemcpyKind), parent ); - CMCPY->isFromSourceFile = isFromSourceFile; - if (filename) CMCPY->filename = strdup(filename); +class chillAST_node *chillAST_CudaMemcpy::clone() { + chillAST_CudaMemcpy *CMCPY = new chillAST_CudaMemcpy((chillAST_VarDecl *) (dest->clone()), + (chillAST_VarDecl *) (src->clone()), size->clone(), + strdup(cudaMemcpyKind), parent); + CMCPY->isFromSourceFile = isFromSourceFile; + if (filename) CMCPY->filename = strdup(filename); return CMCPY; } -void chillAST_CudaMemcpy::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool w ) { - dest->gatherArrayRefs( refs, false ); - src ->gatherArrayRefs( refs, false ); - size->gatherArrayRefs( refs, false ); +void chillAST_CudaMemcpy::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool w) { + dest->gatherArrayRefs(refs, false); + src->gatherArrayRefs(refs, false); + size->gatherArrayRefs(refs, false); } -void chillAST_CudaMemcpy::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) { - dest->gatherScalarRefs( refs, false ); - src ->gatherScalarRefs( refs, false ); - size->gatherScalarRefs( refs, false ); -} +void chillAST_CudaMemcpy::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { + dest->gatherScalarRefs(refs, false); + src->gatherScalarRefs(refs, false); + size->gatherScalarRefs(refs, false); +} -void chillAST_CudaMemcpy::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - dest->gatherVarDecls( decls ); - src ->gatherVarDecls( decls ); - size->gatherVarDecls( decls ); +void chillAST_CudaMemcpy::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + dest->gatherVarDecls(decls); + src->gatherVarDecls(decls); + size->gatherVarDecls(decls); } -void chillAST_CudaMemcpy::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - dest->gatherScalarVarDecls( decls ); - src ->gatherScalarVarDecls( decls ); - size->gatherScalarVarDecls( decls ); +void chillAST_CudaMemcpy::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + dest->gatherScalarVarDecls(decls); + src->gatherScalarVarDecls(decls); + size->gatherScalarVarDecls(decls); } -void chillAST_CudaMemcpy::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - dest->gatherArrayVarDecls( decls ); - src ->gatherArrayVarDecls( decls ); - size->gatherArrayVarDecls( decls ); +void chillAST_CudaMemcpy::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + dest->gatherArrayVarDecls(decls); + src->gatherArrayVarDecls(decls); + size->gatherArrayVarDecls(decls); } -void chillAST_CudaMemcpy::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - dest->gatherVarUsage( decls ); - src ->gatherVarUsage( decls ); - size->gatherVarUsage( decls ); +void chillAST_CudaMemcpy::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + dest->gatherVarUsage(decls); + src->gatherVarUsage(decls); + size->gatherVarUsage(decls); } - -chillAST_CudaSyncthreads::chillAST_CudaSyncthreads( chillAST_node *par) { +chillAST_CudaSyncthreads::chillAST_CudaSyncthreads(chillAST_node *par) { asttype = CHILLAST_NODETYPE_CUDASYNCTHREADS; parent = par; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; -} - - void chillAST_CudaSyncthreads::print( int indent, FILE *fp ) { - chillindent(indent, fp); - fprintf(fp, "__syncthreads()"); - fflush(fp); - } - - void chillAST_CudaSyncthreads::dump( int indent, FILE *fp ) { - chillindent(indent, fp); - fprintf(fp, "(syncthreads)\n"); - fflush(fp); - } - - - - - - +} +void chillAST_CudaSyncthreads::print(int indent, FILE *fp) { + chillindent(indent, fp); + fprintf(fp, "__syncthreads()"); + fflush(fp); +} +void chillAST_CudaSyncthreads::dump(int indent, FILE *fp) { + chillindent(indent, fp); + fprintf(fp, "(syncthreads)\n"); + fflush(fp); +} -chillAST_ReturnStmt::chillAST_ReturnStmt( chillAST_node *retval, chillAST_node *par ) { - asttype = CHILLAST_NODETYPE_RETURNSTMT; +chillAST_ReturnStmt::chillAST_ReturnStmt(chillAST_node *retval, chillAST_node *par) { + asttype = CHILLAST_NODETYPE_RETURNSTMT; returnvalue = retval; - if (returnvalue) returnvalue->setParent( this ); - parent = par; - isFromSourceFile = true; // default + if (returnvalue) returnvalue->setParent(this); + parent = par; + isFromSourceFile = true; // default filename = NULL; } -void chillAST_ReturnStmt::print( int indent, FILE *fp) { - printPreprocBEFORE(indent, fp); +void chillAST_ReturnStmt::print(int indent, FILE *fp) { + printPreprocBEFORE(indent, fp); chillindent(indent, fp); if (returnvalue != NULL) { fprintf(fp, "return("); - returnvalue->print( 0, fp ); - fprintf(fp, ")" ); // parent will add ";\n" ?? - } - else { + returnvalue->print(0, fp); + fprintf(fp, ")"); // parent will add ";\n" ?? + } else { fprintf(fp, "return"); } - fflush(fp); + fflush(fp); } -void chillAST_ReturnStmt::dump( int indent, FILE *fp) { +void chillAST_ReturnStmt::dump(int indent, FILE *fp) { chillindent(indent, fp); fprintf(fp, "(ReturnStmt"); if (returnvalue) { fprintf(fp, "\n"); - returnvalue->dump(indent+1,fp); + returnvalue->dump(indent + 1, fp); chillindent(indent, fp); } - fprintf(fp, ")\n"); + fprintf(fp, ")\n"); } -class chillAST_node* chillAST_ReturnStmt::constantFold() { - if (returnvalue) returnvalue = returnvalue->constantFold(); +class chillAST_node *chillAST_ReturnStmt::constantFold() { + if (returnvalue) returnvalue = returnvalue->constantFold(); return this; } - -class chillAST_node* chillAST_ReturnStmt::clone() { - chillAST_node *val = NULL; - if ( returnvalue ) val = returnvalue->clone(); - chillAST_ReturnStmt *RS = new chillAST_ReturnStmt( val, parent ); - RS->isFromSourceFile = isFromSourceFile; - if (filename) RS->filename = strdup(filename); +class chillAST_node *chillAST_ReturnStmt::clone() { + chillAST_node *val = NULL; + if (returnvalue) val = returnvalue->clone(); + chillAST_ReturnStmt *RS = new chillAST_ReturnStmt(val, parent); + RS->isFromSourceFile = isFromSourceFile; + if (filename) RS->filename = strdup(filename); return RS; } -void chillAST_ReturnStmt::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - if (returnvalue) returnvalue->gatherVarDecls( decls ); +void chillAST_ReturnStmt::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + if (returnvalue) returnvalue->gatherVarDecls(decls); } -void chillAST_ReturnStmt::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - if (returnvalue) returnvalue->gatherScalarVarDecls( decls ); +void chillAST_ReturnStmt::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + if (returnvalue) returnvalue->gatherScalarVarDecls(decls); } -void chillAST_ReturnStmt::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - if (returnvalue) returnvalue->gatherArrayVarDecls( decls ); +void chillAST_ReturnStmt::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + if (returnvalue) returnvalue->gatherArrayVarDecls(decls); } - -void chillAST_ReturnStmt::gatherDeclRefExprs( vector<chillAST_DeclRefExpr *>&refs ) { - if (returnvalue) returnvalue->gatherDeclRefExprs( refs ); +void chillAST_ReturnStmt::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) { + if (returnvalue) returnvalue->gatherDeclRefExprs(refs); } - -void chillAST_ReturnStmt::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - if (returnvalue) returnvalue->gatherVarUsage( decls ); +void chillAST_ReturnStmt::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + if (returnvalue) returnvalue->gatherVarUsage(decls); } +chillAST_CallExpr::chillAST_CallExpr(chillAST_node *c, + chillAST_node *par) { //, int numofargs, chillAST_node **theargs ) { - -chillAST_CallExpr::chillAST_CallExpr(chillAST_node *c, chillAST_node *par) { //, int numofargs, chillAST_node **theargs ) { - - //fprintf(stderr, "chillAST_CallExpr::chillAST_CallExpr callee type %s\n", c->getTypeString()); + //fprintf(stderr, "chillAST_CallExpr::chillAST_CallExpr callee type %s\n", c->getTypeString()); asttype = CHILLAST_NODETYPE_CALLEXPR; callee = c; - //callee->setParent( this ); // ?? + //callee->setParent( this ); // ?? numargs = 0; - parent = par; + parent = par; grid = block = NULL; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; } -void chillAST_CallExpr::addArg( chillAST_node *a ) { - args.push_back( a ); - a->setParent( this ); +void chillAST_CallExpr::addArg(chillAST_node *a) { + args.push_back(a); + a->setParent(this); numargs += 1; } -void chillAST_CallExpr::print( int indent, FILE *fp) { - printPreprocBEFORE(indent, fp); +void chillAST_CallExpr::print(int indent, FILE *fp) { + printPreprocBEFORE(indent, fp); chillindent(indent, fp); chillAST_FunctionDecl *FD = NULL; chillAST_MacroDefinition *MD = NULL; - if (callee->isDeclRefExpr()) { - chillAST_DeclRefExpr *DRE = (chillAST_DeclRefExpr *) callee; - //fprintf(stderr, "DRE decl is 0x%x\n", DRE->decl); - if (!DRE->decl) { - // a macro? - fprintf(fp, "%s ", DRE->declarationName); - return; // ?? + if (callee->isDeclRefExpr()) { + chillAST_DeclRefExpr *DRE = (chillAST_DeclRefExpr *) callee; + //fprintf(stderr, "DRE decl is 0x%x\n", DRE->decl); + if (!DRE->decl) { + // a macro? + fprintf(fp, "%s ", DRE->declarationName); + return; // ?? } - //fprintf(stderr, "DRE decl of type %s\n", DRE->decl->getTypeString()); - if ( (DRE->decl)->isFunctionDecl()) FD = (chillAST_FunctionDecl *)DRE->decl; - else { - fprintf(stderr, "chillAST_CallExpr::print() DRE decl of type %s\n", DRE->decl->getTypeString()); + //fprintf(stderr, "DRE decl of type %s\n", DRE->decl->getTypeString()); + if ((DRE->decl)->isFunctionDecl()) FD = (chillAST_FunctionDecl *) DRE->decl; + else { + fprintf(stderr, "chillAST_CallExpr::print() DRE decl of type %s\n", DRE->decl->getTypeString()); exit(-1); } - } - else if (callee->isFunctionDecl()) FD = (chillAST_FunctionDecl *) callee; - else if (callee->isMacroDefinition()) { + } else if (callee->isFunctionDecl()) FD = (chillAST_FunctionDecl *) callee; + else if (callee->isMacroDefinition()) { MD = (chillAST_MacroDefinition *) callee; - fprintf(fp, "%s(", MD->macroName); - } - else { - fprintf(stderr, "\nchillAST_CallExpr::print() callee of unhandled type %s\n", callee->getTypeString()); + fprintf(fp, "%s(", MD->macroName); + } else { + fprintf(stderr, "\nchillAST_CallExpr::print() callee of unhandled type %s\n", callee->getTypeString()); callee->dump(); - exit(-1); + exit(-1); } - - if (FD) { - fprintf(fp, "%s", FD->functionName ); fflush(fp); + + if (FD) { + fprintf(fp, "%s", FD->functionName); + fflush(fp); if (grid && block) { fprintf(fp, "<<<%s,%s>>>(", grid->varname, block->varname); // a - } - else fprintf(fp, "("); + } else fprintf(fp, "("); } //callee->print( indent, fp); - for (int i=0; i<args.size(); i++) { - if (i!=0) fprintf(fp, ", "); - args[i]->print(0, fp); + for (int i = 0; i < args.size(); i++) { + if (i != 0) fprintf(fp, ", "); + args[i]->print(0, fp); } fprintf(fp, ")"); //a - fflush(fp); + fflush(fp); } -void chillAST_CallExpr::dump( int indent, FILE *fp) { +void chillAST_CallExpr::dump(int indent, FILE *fp) { chillindent(indent, fp); fprintf(fp, "(CallExpr "); - //fprintf(stderr, "callee type %s\n", callee->getTypeString()); + //fprintf(stderr, "callee type %s\n", callee->getTypeString()); chillAST_FunctionDecl *fd = NULL; if (callee->isDeclRefExpr()) { // always? - chillAST_DeclRefExpr *dre = (chillAST_DeclRefExpr *)callee; + chillAST_DeclRefExpr *dre = (chillAST_DeclRefExpr *) callee; fd = dre->getFunctionDecl(); // if NULL, we've got a Vardecl instead if (fd) { - //fd->print(); + //fd->print(); fprintf(fp, "%s\n", fd->returnType); } - callee->dump(indent+1, fp); - if (fd) { + callee->dump(indent + 1, fp); + if (fd) { int numparams = fd->parameters.size(); - for (int i=0; i<numparams; i++) fd->parameters[i]->dump(indent+1, fp); + for (int i = 0; i < numparams; i++) fd->parameters[i]->dump(indent + 1, fp); } } chillindent(indent, fp); fprintf(fp, ")\n"); } -void chillAST_CallExpr::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool writtento ) { - for (int i=0; i<args.size(); i++) { - args[i]->gatherArrayRefs( refs, writtento ); +void chillAST_CallExpr::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool writtento) { + for (int i = 0; i < args.size(); i++) { + args[i]->gatherArrayRefs(refs, writtento); } } -void chillAST_CallExpr::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) { - for (int i=0; i<args.size(); i++) { - args[i]->gatherScalarRefs( refs, writtento ); + +void chillAST_CallExpr::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { + for (int i = 0; i < args.size(); i++) { + args[i]->gatherScalarRefs(refs, writtento); } -} +} -void chillAST_CallExpr::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - for (int i=0; i<args.size(); i++) { - args[i]->gatherVarDecls( decls ); +void chillAST_CallExpr::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + for (int i = 0; i < args.size(); i++) { + args[i]->gatherVarDecls(decls); } } -void chillAST_CallExpr::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - for (int i=0; i<args.size(); i++) { - args[i]->gatherScalarVarDecls( decls ); +void chillAST_CallExpr::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + for (int i = 0; i < args.size(); i++) { + args[i]->gatherScalarVarDecls(decls); } } -void chillAST_CallExpr::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - for (int i=0; i<args.size(); i++) { - args[i]->gatherArrayVarDecls( decls ); +void chillAST_CallExpr::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + for (int i = 0; i < args.size(); i++) { + args[i]->gatherArrayVarDecls(decls); } } -void chillAST_CallExpr::gatherDeclRefExprs( vector<chillAST_DeclRefExpr *>&refs ) { - for (int i=0; i<args.size(); i++) { - args[i]->gatherDeclRefExprs( refs ); +void chillAST_CallExpr::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) { + for (int i = 0; i < args.size(); i++) { + args[i]->gatherDeclRefExprs(refs); } } -void chillAST_CallExpr::replaceVarDecls( chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl){ - for (int i=0; i<args.size(); i++) args[i]->replaceVarDecls( olddecl, newdecl ); +void chillAST_CallExpr::replaceVarDecls(chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl) { + for (int i = 0; i < args.size(); i++) args[i]->replaceVarDecls(olddecl, newdecl); } -void chillAST_CallExpr::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - for (int i=0; i<args.size(); i++) { - args[i]->gatherVarUsage( decls ); +void chillAST_CallExpr::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + for (int i = 0; i < args.size(); i++) { + args[i]->gatherVarUsage(decls); } } -chillAST_node* chillAST_CallExpr::constantFold() { - numargs = args.size(); // wrong place for this - for (int i=0; i<numargs; i++) { - args[i] = args[i]->constantFold(); +chillAST_node *chillAST_CallExpr::constantFold() { + numargs = args.size(); // wrong place for this + for (int i = 0; i < numargs; i++) { + args[i] = args[i]->constantFold(); } - return this; + return this; } -chillAST_node* chillAST_CallExpr::clone() { +chillAST_node *chillAST_CallExpr::clone() { //fprintf(stderr, "chillAST_CallExpr::clone()\n"); - //print(0, stderr); fprintf(stderr, "\n"); + //print(0, stderr); fprintf(stderr, "\n"); - chillAST_CallExpr *CE = new chillAST_CallExpr( callee->clone(), NULL ); - for (int i=0; i<args.size(); i++) CE->addArg( args[i]->clone() ); - CE->isFromSourceFile = isFromSourceFile; - if (filename) CE->filename = strdup(filename); - return CE; + chillAST_CallExpr *CE = new chillAST_CallExpr(callee->clone(), NULL); + for (int i = 0; i < args.size(); i++) CE->addArg(args[i]->clone()); + CE->isFromSourceFile = isFromSourceFile; + if (filename) CE->filename = strdup(filename); + return CE; } - - -chillAST_VarDecl::chillAST_VarDecl() { - //fprintf(stderr, "0chillAST_VarDecl::chillAST_VarDecl() %p\n", this); - fprintf(stderr, "0chillAST_VarDecl::chillAST_VarDecl()\n"); +chillAST_VarDecl::chillAST_VarDecl() { + //fprintf(stderr, "0chillAST_VarDecl::chillAST_VarDecl() %p\n", this); + fprintf(stderr, "0chillAST_VarDecl::chillAST_VarDecl()\n"); vartype = underlyingtype = varname = arraypart = arraypointerpart = arraysetpart = NULL; - typedefinition = NULL; + typedefinition = NULL; - //fprintf(stderr, "setting underlying type NULL\n" ); + //fprintf(stderr, "setting underlying type NULL\n" ); init = NULL; - numdimensions=0; arraysizes = NULL; - asttype = CHILLAST_NODETYPE_VARDECL; // + numdimensions = 0; + arraysizes = NULL; + asttype = CHILLAST_NODETYPE_VARDECL; // parent = NULL; metacomment = NULL; - vardef = NULL; + vardef = NULL; isStruct = false; - - //insideAStruct = false; - isAParameter = false; + + //insideAStruct = false; + isAParameter = false; byreference = false; - isABuiltin = false; - isRestrict = isDevice = isShared = false; // fprintf(stderr, "RDS = false\n"); + isABuiltin = false; + isRestrict = isDevice = isShared = false; // fprintf(stderr, "RDS = false\n"); knownArraySizes = false; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; -}; - +}; -chillAST_VarDecl::chillAST_VarDecl( const char *t, const char *n, const char *a, chillAST_node *par) { - //fprintf(stderr, "1chillAST_VarDecl::chillAST_VarDecl( type %s, name %s, arraypart %s, parent %p) %p\n", t, n, a, par, this); - fprintf(stderr, "1chillAST_VarDecl::chillAST_VarDecl( type %s, name %s, arraypart %s)\n", t, n, a); - vartype = strdup(t); +chillAST_VarDecl::chillAST_VarDecl(const char *t, const char *n, const char *a, chillAST_node *par) { + //fprintf(stderr, "1chillAST_VarDecl::chillAST_VarDecl( type %s, name %s, arraypart %s, parent %p) %p\n", t, n, a, par, this); + fprintf(stderr, "1chillAST_VarDecl::chillAST_VarDecl( type %s, name %s, arraypart %s)\n", t, n, a); + vartype = strdup(t); typedefinition = NULL; - underlyingtype = parseUnderlyingType( vartype ); - //fprintf(stderr, "setting underlying type %s from %s\n", underlyingtype, vartype ); - varname = strdup(n); + underlyingtype = parseUnderlyingType(vartype); + //fprintf(stderr, "setting underlying type %s from %s\n", underlyingtype, vartype ); + varname = strdup(n); arraypointerpart = arraysetpart = NULL; if (a) arraypart = strdup(a); - else arraypart = strdup(""); + else arraypart = strdup(""); splitarraypart(); init = NULL; - numdimensions=0; arraysizes = NULL; + numdimensions = 0; + arraysizes = NULL; uniquePtr = NULL; asttype = CHILLAST_NODETYPE_VARDECL; parent = par; - - knownArraySizes = false; - //fprintf(stderr, "arraypart len %d\n", strlen(a)); - for (int i=0; i<strlen(a); i++) { - if (a[i] == '[') { numdimensions++; knownArraySizes = true; } + knownArraySizes = false; + //fprintf(stderr, "arraypart len %d\n", strlen(a)); + for (int i = 0; i < strlen(a); i++) { + if (a[i] == '[') { + numdimensions++; + knownArraySizes = true; + } if (!knownArraySizes && a[i] == '*') numdimensions++; } - - vardef = NULL; + + vardef = NULL; isStruct = false; - - //insideAStruct = false; - isAParameter = false; + + //insideAStruct = false; + isAParameter = false; byreference = false; - isABuiltin = false; - isRestrict = isDevice = isShared = false; // fprintf(stderr, "RDS = false\n"); + isABuiltin = false; + isRestrict = isDevice = isShared = false; // fprintf(stderr, "RDS = false\n"); + + if (parent) { + //fprintf(stderr, "chillAST_VarDecl::chillAST_VarDecl( %s ), adding to symbol table???\n", varname); + parent->addVariableToSymbolTable(this); // should percolate up until something has a symbol table - if (parent) { - //fprintf(stderr, "chillAST_VarDecl::chillAST_VarDecl( %s ), adding to symbol table???\n", varname); - parent->addVariableToSymbolTable( this ); // should percolate up until something has a symbol table - } - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; -}; - +}; -chillAST_VarDecl::chillAST_VarDecl( chillAST_RecordDecl *astruct, const char *nam, const char *array, chillAST_node *par) { +chillAST_VarDecl::chillAST_VarDecl(chillAST_RecordDecl *astruct, const char *nam, const char *array, + chillAST_node *par) { // define a variable whose type is a struct! - - fprintf(stderr, "3chillAST_VarDecl::chillAST_VarDecl( %s %p struct ", nam, this ); - const char *type = astruct->getName(); - fprintf (stderr, "%s, name %s, arraypart %s parent ) %p\n", type, nam, array, this); // , par); + + fprintf(stderr, "3chillAST_VarDecl::chillAST_VarDecl( %s %p struct ", nam, this); + const char *type = astruct->getName(); + fprintf(stderr, "%s, name %s, arraypart %s parent ) %p\n", type, nam, array, this); // , par); vartype = strdup(type); - // these always go together ?? - vardef = astruct;// pointer to the thing that says what is inside the struct - isStruct = true; // ?? wrong if it's a union ?? TODO - - //insideAStruct = false; - //fprintf(stderr, "setting vardef of %s to %p\n", nam, vardef); - - underlyingtype = parseUnderlyingType( vartype ); - //fprintf(stderr, "setting underlying type %s from %s\n", underlyingtype, vartype ); - varname = strdup(nam); + // these always go together ?? + vardef = astruct;// pointer to the thing that says what is inside the struct + isStruct = true; // ?? wrong if it's a union ?? TODO + + //insideAStruct = false; + //fprintf(stderr, "setting vardef of %s to %p\n", nam, vardef); + + underlyingtype = parseUnderlyingType(vartype); + //fprintf(stderr, "setting underlying type %s from %s\n", underlyingtype, vartype ); + varname = strdup(nam); arraypart = strdup(array); arraypointerpart = arraysetpart = NULL; - splitarraypart(); + splitarraypart(); init = NULL; - numdimensions=0; arraysizes = NULL; + numdimensions = 0; + arraysizes = NULL; uniquePtr = NULL; asttype = CHILLAST_NODETYPE_VARDECL; parent = par; - knownArraySizes = false; - //fprintf(stderr, "arraypart len %d\n", strlen(a)); - for (int i=0; i<strlen(array); i++) { - if (array[i] == '[') { numdimensions++; knownArraySizes = true; } + knownArraySizes = false; + //fprintf(stderr, "arraypart len %d\n", strlen(a)); + for (int i = 0; i < strlen(array); i++) { + if (array[i] == '[') { + numdimensions++; + knownArraySizes = true; + } if (!knownArraySizes && array[i] == '*') numdimensions++; } - + isAParameter = false; - fprintf(stderr, "%s is NOT a parameter\n", nam); + fprintf(stderr, "%s is NOT a parameter\n", nam); byreference = false; - isABuiltin = false; - isRestrict = isDevice = isShared = false; // fprintf(stderr, "RDS = false\n"); + isABuiltin = false; + isRestrict = isDevice = isShared = false; // fprintf(stderr, "RDS = false\n"); typedefinition = NULL; - //fprintf(stderr, "chillAST_VarDecl::chillAST_VarDecl( chillAST_RecordDecl *astruct, ...) MIGHT add struct to some symbol table\n"); - //if (parent) fprintf(stderr, "yep, adding it\n"); + //fprintf(stderr, "chillAST_VarDecl::chillAST_VarDecl( chillAST_RecordDecl *astruct, ...) MIGHT add struct to some symbol table\n"); + //if (parent) fprintf(stderr, "yep, adding it\n"); - if (parent) parent->addVariableToSymbolTable( this ); // should percolate up until something has a symbol table + if (parent) parent->addVariableToSymbolTable(this); // should percolate up until something has a symbol table - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; -}; - - - +}; -chillAST_VarDecl::chillAST_VarDecl( chillAST_TypedefDecl *tdd, const char *n, const char *a, chillAST_node *par) { +chillAST_VarDecl::chillAST_VarDecl(chillAST_TypedefDecl *tdd, const char *n, const char *a, chillAST_node *par) { fprintf(stderr, "4chillAST_VarDecl::chillAST_VarDecl( %s typedef ", n); const char *type = tdd->getStructName(); //fprintf (stderr, "%s, name %s, arraypart %s parent ) %p\n", type, n, a,this); // , par); typedefinition = tdd; - vartype = strdup(type); - underlyingtype = parseUnderlyingType( vartype ); - //fprintf(stderr, "setting underlying type %s from %s\n", underlyingtype, vartype ); - varname = strdup(n); + vartype = strdup(type); + underlyingtype = parseUnderlyingType(vartype); + //fprintf(stderr, "setting underlying type %s from %s\n", underlyingtype, vartype ); + varname = strdup(n); arraypart = strdup(a); arraypointerpart = arraysetpart = NULL; - splitarraypart(); + splitarraypart(); init = NULL; - numdimensions=0; arraysizes = NULL; + numdimensions = 0; + arraysizes = NULL; uniquePtr = NULL; asttype = CHILLAST_NODETYPE_VARDECL; parent = par; - knownArraySizes = false; - //fprintf(stderr, "arraypart len %d\n", strlen(a)); - for (int i=0; i<strlen(a); i++) { - if (a[i] == '[') { numdimensions++; knownArraySizes = true; } + knownArraySizes = false; + //fprintf(stderr, "arraypart len %d\n", strlen(a)); + for (int i = 0; i < strlen(a); i++) { + if (a[i] == '[') { + numdimensions++; + knownArraySizes = true; + } if (!knownArraySizes && a[i] == '*') numdimensions++; } isStruct = tdd->isAStruct(); - - //insideAStruct = false; - - vardef = NULL; + //insideAStruct = false; - isAParameter = false; - byreference = false; - isABuiltin = false; - isRestrict = isDevice = isShared = false; // //fprintf(stderr, "RDS = false\n"); - if (parent) parent->addVariableToSymbolTable( this ); // should percolate up until something has a symbol table - isFromSourceFile = true; // default - filename = NULL; -}; - + vardef = NULL; + isAParameter = false; + byreference = false; + isABuiltin = false; + isRestrict = isDevice = isShared = false; // //fprintf(stderr, "RDS = false\n"); + if (parent) parent->addVariableToSymbolTable(this); // should percolate up until something has a symbol table + isFromSourceFile = true; // default + filename = NULL; +}; -chillAST_VarDecl::chillAST_VarDecl( const char *t, const char *n, const char *a, void *ptr, chillAST_node *par) { +chillAST_VarDecl::chillAST_VarDecl(const char *t, const char *n, const char *a, void *ptr, chillAST_node *par) { CHILL_DEBUG_PRINT("chillAST_VarDecl::chillAST_VarDecl( type %s, name %s, arraypart '%s' ) %p\n", t, n, a, this); - vartype = strdup(t); + vartype = strdup(t); typedefinition = NULL; - underlyingtype = parseUnderlyingType( vartype ); - //fprintf(stderr, "setting underlying type %s from %s\n", underlyingtype, vartype ); - varname = strdup(n); + underlyingtype = parseUnderlyingType(vartype); + //fprintf(stderr, "setting underlying type %s from %s\n", underlyingtype, vartype ); + varname = strdup(n); vardef = NULL; // not a struct isStruct = false; - isAParameter = false; - + isAParameter = false; + if (a) arraypart = strdup(a); else arraypart = strdup(""); // should catch this earlier arraypointerpart = arraysetpart = NULL; - splitarraypart(); + splitarraypart(); init = NULL; - numdimensions=0; arraysizes = NULL; + numdimensions = 0; + arraysizes = NULL; uniquePtr = ptr; asttype = CHILLAST_NODETYPE_VARDECL; parent = par; - knownArraySizes = false; + knownArraySizes = false; if (par) par->addChild(this); // ?? - - //fprintf(stderr, "name arraypart len %d\n", strlen(a)); - //fprintf(stderr, "arraypart '%s'\n", arraypart); - for (int i=0; i<strlen(a); i++) { - if (a[i] == '[') { numdimensions++; knownArraySizes = true; } - if (!knownArraySizes && a[i] == '*') numdimensions++; // fails for a[4000 * 4] - } - //if (0 == strlen(a) && numdimensions == 0) { - // for (int i=0; i<strlen(t); i++) { // handle float * x + + //fprintf(stderr, "name arraypart len %d\n", strlen(a)); + //fprintf(stderr, "arraypart '%s'\n", arraypart); + for (int i = 0; i < strlen(a); i++) { + if (a[i] == '[') { + numdimensions++; + knownArraySizes = true; + } + if (!knownArraySizes && a[i] == '*') numdimensions++; // fails for a[4000 * 4] + } + //if (0 == strlen(a) && numdimensions == 0) { + // for (int i=0; i<strlen(t); i++) { // handle float * x // if (t[i] == '[') numdimensions++; // if (t[i] == '*') numdimensions++; - // } - //} - //fprintf(stderr, "2name %s numdimensions %d\n", n, numdimensions); + // } + //} + //fprintf(stderr, "2name %s numdimensions %d\n", n, numdimensions); @@ -5360,674 +5284,655 @@ chillAST_VarDecl::chillAST_VarDecl( const char *t, const char *n, const char *a //knownArraySizes = true; //if (index(vartype, '*')) knownArraySizes = false; // float *a; for example //if (index(arraypart, '*')) knownArraySizes = false; - + // note: vartype here, arraypart in next code.. is that right? - if (index(vartype, '*')) { - for (int i = 0; i<strlen(vartype); i++) if (vartype[i] == '*') numdim++; + if (index(vartype, '*')) { + for (int i = 0; i < strlen(vartype); i++) if (vartype[i] == '*') numdim++; //fprintf(stderr, "numd %d\n", numd); - numdimensions = numdim; + numdimensions = numdim; } - + if (index(arraypart, '[')) { // JUST [12][34][56] no asterisks char *dupe = strdup(arraypart); int len = strlen(arraypart); - for (int i=0; i<len; i++) if (dupe[i] == '[') numdim++; - + for (int i = 0; i < len; i++) if (dupe[i] == '[') numdim++; + //fprintf(stderr, "numdim %d\n", numdim); - - numdimensions = numdim; - int *as = (int *)malloc(sizeof(int *) * numdim ); - if (!as) { + + numdimensions = numdim; + int *as = (int *) malloc(sizeof(int *) * numdim); + if (!as) { fprintf(stderr, "can't malloc array sizes in ConvertVarDecl()\n"); exit(-1); } arraysizes = as; // 'as' changed later! - - + + char *ptr = dupe; //fprintf(stderr, "dupe '%s'\n", ptr); while (ptr = index(ptr, '[')) { // this fails for float a[4000*4] ptr++; char *leak = strdup(ptr); char *close = index(leak, ']'); - if (close) *close = '\0'; + if (close) *close = '\0'; int l = strlen(leak); bool justdigits = true; bool justmath = true; - for (int i=0; i<l; i++) { - char c = leak[i]; + for (int i = 0; i < l; i++) { + char c = leak[i]; if (!isdigit(c)) justdigits = false; - if (!( isdigit(c) || - isblank(c) || - ((c == '+') || (c == '*') || (c == '*') || (c == '*')) || // math - ((c == '(') || (c == ')'))) - ) { - //fprintf(stderr, " not justmath because '%c'\n", c); - justmath = false; + if (!(isdigit(c) || + isblank(c) || + ((c == '+') || (c == '*') || (c == '*') || (c == '*')) || // math + ((c == '(') || (c == ')'))) + ) { + //fprintf(stderr, " not justmath because '%c'\n", c); + justmath = false; } - + } //fprintf(stderr, "tmp '%s'\n", leak); - if (justdigits) { + if (justdigits) { int dim; sscanf(ptr, "%d", &dim); //fprintf(stderr, "dim %d\n", dim); - *as++ = dim; - } - else { + *as++ = dim; + } else { if (justmath) fprintf(stderr, "JUST MATH\n"); - fprintf(stderr, "need to evaluate %s, faking with hardcoded 16000\n", leak); - *as++ = 16000; // temp TODO DFL + fprintf(stderr, "need to evaluate %s, faking with hardcoded 16000\n", leak); + *as++ = 16000; // temp TODO DFL } - free (leak); + free(leak); - ptr = index(ptr, ']'); - //fprintf(stderr, "bottom of loop, ptr = '%s'\n", ptr); + ptr = index(ptr, ']'); + //fprintf(stderr, "bottom of loop, ptr = '%s'\n", ptr); } free(dupe); - //for (int i=0; i<numdim; i++) { - // fprintf(stderr, "dimension %d = %d\n", i, arraysizes[i]); - //} - + //for (int i=0; i<numdim; i++) { + // fprintf(stderr, "dimension %d = %d\n", i, arraysizes[i]); + //} + //fprintf(stderr, "need to handle [] array to determine num dimensions\n"); - //exit(-1); + //exit(-1); } - - - //insideAStruct = false; + + + //insideAStruct = false; byreference = false; - isABuiltin = false; - isRestrict = isDevice = isShared = false; // fprintf(stderr, "RDS = false\n"); - - //print(); printf("\n"); fflush(stdout); + isABuiltin = false; + isRestrict = isDevice = isShared = false; // fprintf(stderr, "RDS = false\n"); - // currently this is bad, because a struct does not have a symbol table, so the - // members of a struct are passed up to the func or sourcefile. - if (parent) parent->addVariableToSymbolTable( this ); // should percolate up until something has a symbol table + //print(); printf("\n"); fflush(stdout); + // currently this is bad, because a struct does not have a symbol table, so the + // members of a struct are passed up to the func or sourcefile. + if (parent) parent->addVariableToSymbolTable(this); // should percolate up until something has a symbol table - isFromSourceFile = true; // default + + isFromSourceFile = true; // default filename = NULL; CHILL_DEBUG_PRINT("LEAVING\n"); //parent->print(); fprintf(stderr, "\n\n"); -}; +}; -void chillAST_VarDecl::print( int indent, FILE *fp ) { +void chillAST_VarDecl::print(int indent, FILE *fp) { //fprintf(fp, "chillAST_VarDecl::print()\n"); - - printPreprocBEFORE(indent, fp); - //fprintf(fp, "VarDecl vartype '%s' varname %s ", vartype, varname); + printPreprocBEFORE(indent, fp); + + //fprintf(fp, "VarDecl vartype '%s' varname %s ", vartype, varname); //if (isAStruct()) fprintf(fp, "isAStruct()\n"); //else fprintf(fp, "NOT A Struct\n"); // fprintf(fp, "\n"); fflush(fp); dump(0,fp); fflush(fp); // debug chillindent(indent, fp); - //fprintf(fp, "vardecl->print vartype '%s'\n", vartype); - if (isDevice) fprintf(fp, "__device__ "); - if (isShared) fprintf(fp, "__shared__ "); - + //fprintf(fp, "vardecl->print vartype '%s'\n", vartype); + if (isDevice) fprintf(fp, "__device__ "); + if (isShared) fprintf(fp, "__shared__ "); + //if (isAStruct()) fprintf(fp, "/* isAStruct() */ "); //else fprintf(fp, "/* NOT A Struct() */ "); - //if (vardef) fprintf(fp, "/* vardef */ "); - //else fprintf(fp, "/* NOT vardef */ "); + //if (vardef) fprintf(fp, "/* vardef */ "); + //else fprintf(fp, "/* NOT vardef */ "); - //fprintf(stderr, "chillAST_VarDecl::print() %s\n", varname ); - //if (isParmVarDecl()) fprintf(stderr, "%s is a parameter\n", varname); - //if (isAStruct()) fprintf(stderr, "%s is a struct\n", varname); - //else fprintf(stderr, "%s is NOT a struct\n", varname); + //fprintf(stderr, "chillAST_VarDecl::print() %s\n", varname ); + //if (isParmVarDecl()) fprintf(stderr, "%s is a parameter\n", varname); + //if (isAStruct()) fprintf(stderr, "%s is a struct\n", varname); + //else fprintf(stderr, "%s is NOT a struct\n", varname); //if (!parent) fprintf(stderr, "VARDECL HAS NO PARENT\n"); - //else fprintf(stderr, "parent of %s is type %s\n", varname, parent->getTypeString()); + //else fprintf(stderr, "parent of %s is type %s\n", varname, parent->getTypeString()); // this logic is probably wrong (what about pointer to struct? ) //fprintf(stderr, "checking for unnamed only used here\n"); if ((!isAParameter) && isAStruct() && vardef) { // an unnamed struct used only here ?? - + //fprintf(fp, "i%s sAStruct() && vardef ?? vardecl of type UNNAMED ONLY USED HERE \n", varname ); - // print the internals of the struct and then the name - vardef->printStructure( 0, fp ); - fprintf(fp, "%s", varname ); - + // print the internals of the struct and then the name + vardef->printStructure(0, fp); + fprintf(fp, "%s", varname); + return; } - - //fprintf(fp, "ugly logic\n"); + + //fprintf(fp, "ugly logic\n"); // ugly logic TODO - - if (typedefinition && typedefinition->isAStruct()) fprintf(fp, "struct "); + + if (typedefinition && typedefinition->isAStruct()) fprintf(fp, "struct "); if (isAParameter) { - //fprintf(fp, "%s isaparameter\n", varname); - //if (isAStruct()) fprintf(fp, "struct "); - //fprintf(fp, "(param) nd %d", numdimensions ); - //dump(); + //fprintf(fp, "%s isaparameter\n", varname); + //if (isAStruct()) fprintf(fp, "struct "); + //fprintf(fp, "(param) nd %d", numdimensions ); + //dump(); if (numdimensions > 0) { - if (knownArraySizes) { // just [12][34][56] + if (knownArraySizes) { // just [12][34][56] fprintf(fp, "%s ", vartype); if (byreference) fprintf(fp, "&"); fprintf(fp, "%s", varname); - for (int n=0; n< (numdimensions); n++) fprintf(fp, "[%d]", arraysizes[n]); - } - else { // some unknown array part float *a; or float **a; or float (*)a[1234] + for (int n = 0; n < (numdimensions); n++) fprintf(fp, "[%d]", arraysizes[n]); + } else { // some unknown array part float *a; or float **a; or float (*)a[1234] //fprintf(fp, "\nsome unknown\n"); //fprintf(fp, "arraypointerpart '%s'\n", arraypointerpart); //fprintf(fp, "arraysetpart '%s'\n", arraysetpart); - - if (numdimensions == 1) { - //fprintf(fp, "\nnd1, vartype %s\n", vartype); - + + if (numdimensions == 1) { + //fprintf(fp, "\nnd1, vartype %s\n", vartype); + // TODO this if means I have probably made a mistake somewhere - if (!index(vartype, '*')) fprintf(fp, "%s *%s", vartype, varname ); // float *x + if (!index(vartype, '*')) fprintf(fp, "%s *%s", vartype, varname); // float *x else fprintf(fp, "%s%s", vartype, varname); // float *a; - - } - else { // more than one dimension - if ( !strcmp("", arraysetpart) ) { // no known dimensions float ***a; - fprintf(fp, "%s %s%s", vartype, arraypointerpart, varname); - } - else if ( !strcmp("", arraypointerpart)) { // ALL known float a[2][7]; - fprintf(fp, "%s %s", vartype, varname); - for (int n=0; n< numdimensions; n++) fprintf(fp, "[%d]", arraysizes[n]); - } - else { // float (*)a[1234] - // this seems really wrong - // float (*)a[1234] - fprintf(fp, "%s (", vartype); - for (int n=0; n< (numdimensions-1); n++) fprintf(fp, "*"); + } else { // more than one dimension + + if (!strcmp("", arraysetpart)) { // no known dimensions float ***a; + fprintf(fp, "%s %s%s", vartype, arraypointerpart, varname); + } else if (!strcmp("", arraypointerpart)) { // ALL known float a[2][7]; + fprintf(fp, "%s %s", vartype, varname); + for (int n = 0; n < numdimensions; n++) fprintf(fp, "[%d]", arraysizes[n]); + } else { // float (*)a[1234] + // this seems really wrong + // float (*)a[1234] + fprintf(fp, "%s (", vartype); + for (int n = 0; n < (numdimensions - 1); n++) fprintf(fp, "*"); fprintf(fp, "%s)", varname); - fprintf(fp, "[%d]", arraysizes[numdimensions-1]); + fprintf(fp, "[%d]", arraysizes[numdimensions - 1]); } - + } } } // if numdimensions > 0 else { // parameter float x - fprintf(fp, "%s ", vartype); - if (byreference) fprintf(fp, "&"); - fprintf(fp, "%s", varname); + fprintf(fp, "%s ", vartype); + if (byreference) fprintf(fp, "&"); + fprintf(fp, "%s", varname); } - } // end parameter + } // end parameter else { // NOT A PARAMETER - //fprintf(fp, "NOT A PARAM ... vartype '%s'\n", vartype); + //fprintf(fp, "NOT A PARAM ... vartype '%s'\n", vartype); //if (isArray()) fprintf(stderr, "an array, numdimensions %d\n", numdimensions); //fprintf(stderr, "arraysizes %p\n", arraysizes); - - - - //if (isArray() && arraysizes == NULL) { + + + + //if (isArray() && arraysizes == NULL) { // // we just know the number of dimensions but no sizes // // int ***something // fprintf(fp, "%s ", vartype); // "int " // for (int i=0; i<numdimensions; i++) fprintf(fp, "*"); // *** - // fprintf(fp, "%s", varname); // variable name + // fprintf(fp, "%s", varname); // variable name // } - // else - - fprintf(fp, "%s %s", vartype, arraypointerpart); + // else + + fprintf(fp, "%s %s", vartype, arraypointerpart); if (isRestrict) fprintf(fp, " __restrict__ "); // wrong place - fprintf(fp, "%s%s", varname, arraysetpart ); - if (init) { - fprintf(fp, " = "); fflush(fp); + fprintf(fp, "%s%s", varname, arraysetpart); + if (init) { + fprintf(fp, " = "); + fflush(fp); init->print(0, fp); } } - fflush(fp); - //fprintf(stderr, "numdimensions %d arraysizes address 0x%x\n", numdimensions, arraysizes); - //if (!isAParameter) fprintf(fp, ";\n", vartype, varname, arraypart ); + fflush(fp); + //fprintf(stderr, "numdimensions %d arraysizes address 0x%x\n", numdimensions, arraysizes); + //if (!isAParameter) fprintf(fp, ";\n", vartype, varname, arraypart ); }; - - -void chillAST_VarDecl::printName( int in, FILE *fp ) { +void chillAST_VarDecl::printName(int in, FILE *fp) { chillindent(in, fp); fprintf(fp, "%s", varname); }; - - -void chillAST_VarDecl::dump( int indent, FILE *fp ) { +void chillAST_VarDecl::dump(int indent, FILE *fp) { chillindent(indent, fp); - fprintf(fp, "(VarDecl \"'%s' '%s' '%s'\" n_dim %d ) ", vartype, varname, arraypart, numdimensions); - + fprintf(fp, "(VarDecl \"'%s' '%s' '%s'\" n_dim %d ) ", vartype, varname, arraypart, numdimensions); + //fprintf(fp, "vardef %p\n", vardef); - //if (vardef) fprintf(fp, "(typedef or struct!)\n"); + //if (vardef) fprintf(fp, "(typedef or struct!)\n"); //fprintf(fp, "typedefinition %p\n", typedefinition); - //if (isStruct) fprintf(fp, "isStruct\n"); - + //if (isStruct) fprintf(fp, "isStruct\n"); + //if (isAParameter) fprintf(fp, "PARAMETER\n"); //else fprintf(fp, "NOT PARAMETER\n"); - fflush(fp); + fflush(fp); - //segfault(); // see what called this + //exit(-1); // see what called this }; -chillAST_RecordDecl * chillAST_VarDecl::getStructDef() { +chillAST_RecordDecl *chillAST_VarDecl::getStructDef() { if (vardef) return vardef; if (typedefinition) return typedefinition->getStructDef(); - return NULL; + return NULL; } - - - chillAST_CompoundStmt::chillAST_CompoundStmt() { - //fprintf(stderr, "chillAST_CompoundStmt::chillAST_CompoundStmt() %p\n", this); - asttype = CHILLAST_NODETYPE_COMPOUNDSTMT; - parent = NULL; + //fprintf(stderr, "chillAST_CompoundStmt::chillAST_CompoundStmt() %p\n", this); + asttype = CHILLAST_NODETYPE_COMPOUNDSTMT; + parent = NULL; symbol_table = new chillAST_SymbolTable; typedef_table = NULL; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; -}; +}; -void chillAST_CompoundStmt::print( int indent, FILE *fp ) { - printPreprocBEFORE(indent, fp); +void chillAST_CompoundStmt::print(int indent, FILE *fp) { + printPreprocBEFORE(indent, fp); int numchildren = children.size(); - //fprintf(stderr, "NUMCHILDREN %d\n", numchildren); sleep(1); - for (int i=0; i<numchildren; i++) { + //fprintf(stderr, "NUMCHILDREN %d\n", numchildren); sleep(1); + for (int i = 0; i < numchildren; i++) { children[i]->print(indent, fp); - if (children[i]->asttype != CHILLAST_NODETYPE_FORSTMT + if (children[i]->asttype != CHILLAST_NODETYPE_FORSTMT && children[i]->asttype != CHILLAST_NODETYPE_IFSTMT && children[i]->asttype != CHILLAST_NODETYPE_COMPOUNDSTMT - //&& children[i]->asttype != CHILLAST_NODETYPE_VARDECL // vardecl does its own ";\n" - ) - { - fprintf(fp, ";\n"); // probably wrong - } + //&& children[i]->asttype != CHILLAST_NODETYPE_VARDECL // vardecl does its own ";\n" + ) { + fprintf(fp, ";\n"); // probably wrong + } } - fflush(fp); + fflush(fp); } -void chillAST_CompoundStmt::replaceChild( chillAST_node *old, chillAST_node *newchild ){ - //fprintf(stderr, "chillAST_CompoundStmt::replaceChild( old %s, new %s)\n", old->getTypeString(), newchild->getTypeString() ); - vector<chillAST_node*> dupe = children; - int numdupe = dupe.size(); - int any = 0; - - for (int i=0; i<numdupe; i++) { +void chillAST_CompoundStmt::replaceChild(chillAST_node *old, chillAST_node *newchild) { + //fprintf(stderr, "chillAST_CompoundStmt::replaceChild( old %s, new %s)\n", old->getTypeString(), newchild->getTypeString() ); + vector<chillAST_node *> dupe = children; + int numdupe = dupe.size(); + int any = 0; + + for (int i = 0; i < numdupe; i++) { - //fprintf(stderr, "\ni %d\n",i); - //for (int j=0; j<numdupe; j++) { - // fprintf(stderr, "this 0x%x children[%d/%d] = 0x%x type %s\n", this, j, children.size(), children[j], children[j]->getTypeString()); + //fprintf(stderr, "\ni %d\n",i); + //for (int j=0; j<numdupe; j++) { + // fprintf(stderr, "this 0x%x children[%d/%d] = 0x%x type %s\n", this, j, children.size(), children[j], children[j]->getTypeString()); //} - if (dupe[i] == old) { - //fprintf(stderr, "replacing child %d of %d\n", i, numdupe); + if (dupe[i] == old) { + //fprintf(stderr, "replacing child %d of %d\n", i, numdupe); //fprintf(stderr, "was \n"); print(); children[i] = newchild; - newchild->setParent( this ); - //fprintf(stderr, "is \n"); print(); fprintf(stderr, "\n\n"); - // old->parent = NULL; + newchild->setParent(this); + //fprintf(stderr, "is \n"); print(); fprintf(stderr, "\n\n"); + // old->parent = NULL; any = 1; } } - if (!any) { + if (!any) { fprintf(stderr, "chillAST_CompoundStmt::replaceChild(), could not find old\n"); - exit(-1); + exit(-1); } } -void chillAST_CompoundStmt::loseLoopWithLoopVar( char *var ) { - //fprintf(stderr, "chillAST_CompoundStmt::loseLoopWithLoopVar( %s )\n", var); +void chillAST_CompoundStmt::loseLoopWithLoopVar(char *var) { + //fprintf(stderr, "chillAST_CompoundStmt::loseLoopWithLoopVar( %s )\n", var); //fprintf(stderr, "CompoundStmt 0x%x has parent 0x%x ", this, this->parent); - //fprintf(stderr, "%s\n", parent->getTypeString()); + //fprintf(stderr, "%s\n", parent->getTypeString()); - - //fprintf(stderr, "CompoundStmt node has %d children\n", children.size()); - //fprintf(stderr, "before doing a damned thing, \n"); + + //fprintf(stderr, "CompoundStmt node has %d children\n", children.size()); + //fprintf(stderr, "before doing a damned thing, \n"); //print(); //dump(); fflush(stdout); - //fprintf(stderr, "\n\n"); + //fprintf(stderr, "\n\n"); #ifdef DAMNED - for (int j=0; j<children.size(); j++) { - fprintf(stderr, "j %d/%d ", j, children.size()); + for (int j=0; j<children.size(); j++) { + fprintf(stderr, "j %d/%d ", j, children.size()); fprintf(stderr, "subnode %d 0x%x ", j, children[j] ); - fprintf(stderr, "asttype %d ", children[j]->asttype); + fprintf(stderr, "asttype %d ", children[j]->asttype); fprintf(stderr, "%s ", children[j]->getTypeString()); - if (children[j]->isForStmt()) { - chillAST_ForStmt *FS = ((chillAST_ForStmt *) children[j]); + if (children[j]->isForStmt()) { + chillAST_ForStmt *FS = ((chillAST_ForStmt *) children[j]); fprintf(stderr, "for ("); FS->init->print(0, stderr); fprintf(stderr, "; "); FS->cond->print(0, stderr); fprintf(stderr, "; "); FS->incr->print(0, stderr); - fprintf(stderr, ") with %d statements in body 0x%x\n", FS->body->getNumChildren(), FS->body ); + fprintf(stderr, ") with %d statements in body 0x%x\n", FS->body->getNumChildren(), FS->body ); } - else fprintf(stderr, "\n"); + else fprintf(stderr, "\n"); } #endif - vector<chillAST_node*> dupe = children; // simple enough? - for (int i=0; i<dupe.size(); i++) { - //for (int j=0; j<dupe.size(); j++) { - // fprintf(stderr, "j %d/%d\n", j, dupe.size()); + vector<chillAST_node *> dupe = children; // simple enough? + for (int i = 0; i < dupe.size(); i++) { + //for (int j=0; j<dupe.size(); j++) { + // fprintf(stderr, "j %d/%d\n", j, dupe.size()); // fprintf(stderr, "subnode %d %s ", j, children[j]->getTypeString()); - // if (children[j]->isForStmt()) { - // chillAST_ForStmt *FS = ((chillAST_ForStmt *) children[j]); + // if (children[j]->isForStmt()) { + // chillAST_ForStmt *FS = ((chillAST_ForStmt *) children[j]); // fprintf(stderr, "for ("); // FS->init->print(0, stderr); // fprintf(stderr, "; "); // FS->cond->print(0, stderr); // fprintf(stderr, "; "); // FS->incr->print(0, stderr); - // fprintf(stderr, ") with %d statements in body 0x%x\n", FS->body->getNumChildren(), FS->body ); - //} - //else fprintf(stderr, "\n"); + // fprintf(stderr, ") with %d statements in body 0x%x\n", FS->body->getNumChildren(), FS->body ); + //} + //else fprintf(stderr, "\n"); //} - - //fprintf(stderr, "CompoundStmt 0x%x recursing to child %d/%d\n", this, i, dupe.size()); - dupe[i]->loseLoopWithLoopVar( var ); + + //fprintf(stderr, "CompoundStmt 0x%x recursing to child %d/%d\n", this, i, dupe.size()); + dupe[i]->loseLoopWithLoopVar(var); } - //fprintf(stderr, "CompoundStmt node 0x%x done recursing\n", this ); + //fprintf(stderr, "CompoundStmt node 0x%x done recursing\n", this ); } - -void chillAST_CompoundStmt::dump( int indent, FILE *fp ) { - chillindent(indent, fp); - fprintf(fp, "(CompoundStmt \n" ); +void chillAST_CompoundStmt::dump(int indent, FILE *fp) { + chillindent(indent, fp); + fprintf(fp, "(CompoundStmt \n"); int numchildren = children.size(); - //for (int i=0; i<numchildren; i++) { - // fprintf(fp, "%d %s 0x%x\n", i, children[i]->getTypeString(), children[i]); - //} - //fprintf(fp, "\n"); + //for (int i=0; i<numchildren; i++) { + // fprintf(fp, "%d %s 0x%x\n", i, children[i]->getTypeString(), children[i]); + //} + //fprintf(fp, "\n"); - for (int i=0; i<numchildren; i++) { - children[i]->dump(indent+1, fp); + for (int i = 0; i < numchildren; i++) { + children[i]->dump(indent + 1, fp); fprintf(fp, "\n"); // ??? fflush(fp); } - chillindent(indent, fp); - fprintf(fp, ")\n"); + chillindent(indent, fp); + fprintf(fp, ")\n"); }; - -chillAST_node* chillAST_CompoundStmt::constantFold(){ - //fprintf(stderr, "chillAST_CompoundStmt::constantFold()\n"); - for (int i=0; i<children.size(); i++) children[i] = children[i]->constantFold(); +chillAST_node *chillAST_CompoundStmt::constantFold() { + //fprintf(stderr, "chillAST_CompoundStmt::constantFold()\n"); + for (int i = 0; i < children.size(); i++) children[i] = children[i]->constantFold(); return this; } -chillAST_node* chillAST_CompoundStmt::clone(){ +chillAST_node *chillAST_CompoundStmt::clone() { chillAST_CompoundStmt *cs = new chillAST_CompoundStmt(); - for (int i=0; i<children.size(); i++) cs->addChild( children[i]->clone() ); - cs->setParent( parent ); - cs->isFromSourceFile = isFromSourceFile; - if (filename) cs->filename = strdup(filename); + for (int i = 0; i < children.size(); i++) cs->addChild(children[i]->clone()); + cs->setParent(parent); + cs->isFromSourceFile = isFromSourceFile; + if (filename) cs->filename = strdup(filename); return cs; } -void chillAST_CompoundStmt::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - //fprintf(stderr, "chillAST_CompoundStmt::gatherVarDecls()\n"); - for (int i=0; i<children.size(); i++) children[i]->gatherVarDecls( decls ); +void chillAST_CompoundStmt::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + //fprintf(stderr, "chillAST_CompoundStmt::gatherVarDecls()\n"); + for (int i = 0; i < children.size(); i++) children[i]->gatherVarDecls(decls); } -void chillAST_CompoundStmt::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - for (int i=0; i<children.size(); i++) children[i]->gatherScalarVarDecls( decls ); +void chillAST_CompoundStmt::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + for (int i = 0; i < children.size(); i++) children[i]->gatherScalarVarDecls(decls); } -void chillAST_CompoundStmt::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - for (int i=0; i<children.size(); i++) children[i]->gatherArrayVarDecls( decls ); +void chillAST_CompoundStmt::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + for (int i = 0; i < children.size(); i++) children[i]->gatherArrayVarDecls(decls); } -void chillAST_CompoundStmt::gatherDeclRefExprs( vector<chillAST_DeclRefExpr *>&refs ) { - for (int i=0; i<children.size(); i++) children[i]->gatherDeclRefExprs( refs ); +void chillAST_CompoundStmt::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) { + for (int i = 0; i < children.size(); i++) children[i]->gatherDeclRefExprs(refs); } -void chillAST_CompoundStmt::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - for (int i=0; i<children.size(); i++) children[i]->gatherVarUsage( decls ); +void chillAST_CompoundStmt::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + for (int i = 0; i < children.size(); i++) children[i]->gatherVarUsage(decls); } -void chillAST_CompoundStmt::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool writtento ) { - for (int i=0; i<children.size(); i++) children[i]->gatherArrayRefs( refs, 0); +void chillAST_CompoundStmt::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool writtento) { + for (int i = 0; i < children.size(); i++) children[i]->gatherArrayRefs(refs, 0); +} + +void chillAST_CompoundStmt::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { + for (int i = 0; i < children.size(); i++) children[i]->gatherScalarRefs(refs, 0); } -void chillAST_CompoundStmt::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) { - for (int i=0; i<children.size(); i++) children[i]->gatherScalarRefs( refs, 0); -} - -void chillAST_CompoundStmt::gatherStatements(std::vector<chillAST_node*> &statements ){ - for (int i=0; i<children.size(); i++) children[i]->gatherStatements( statements ); -} - +void chillAST_CompoundStmt::gatherStatements(std::vector<chillAST_node *> &statements) { + for (int i = 0; i < children.size(); i++) children[i]->gatherStatements(statements); +} -void chillAST_CompoundStmt::replaceVarDecls( chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl){ - for (int i=0; i<children.size(); i++) children[i]->replaceVarDecls( olddecl, newdecl ); +void chillAST_CompoundStmt::replaceVarDecls(chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl) { + for (int i = 0; i < children.size(); i++) children[i]->replaceVarDecls(olddecl, newdecl); } -bool chillAST_CompoundStmt::findLoopIndexesToReplace( chillAST_SymbolTable *symtab, bool forcesync ) { +bool chillAST_CompoundStmt::findLoopIndexesToReplace(chillAST_SymbolTable *symtab, bool forcesync) { // see how many elements we currently have - int sofar = children.size(); + int sofar = children.size(); // make big enough to add a sync after each statement. wasteful. TODO - // this prevents inserts happening at the forstmt::addSync() from causing a - // reallocation, which screwsup the loop below here - children.reserve( 2 * sofar ); - //fprintf(stderr, "sofar %d reserved %d\n", sofar, 2*sofar); + // this prevents inserts happening at the forstmt::addSync() from causing a + // reallocation, which screwsup the loop below here + children.reserve(2 * sofar); + //fprintf(stderr, "sofar %d reserved %d\n", sofar, 2*sofar); bool force = false; - for (int i=0; i<children.size(); i++) { // children.size() to see it gain each time - if (children.size() > sofar ) { - //fprintf(stderr, "HEY! CompoundStmt::findLoopIndexesToReplace() noticed that children increased from %d to %d\n", sofar, children.size()); - sofar = children.size(); + for (int i = 0; i < children.size(); i++) { // children.size() to see it gain each time + if (children.size() > sofar) { + //fprintf(stderr, "HEY! CompoundStmt::findLoopIndexesToReplace() noticed that children increased from %d to %d\n", sofar, children.size()); + sofar = children.size(); } - //fprintf(stderr, "compound child %d of type %s force %d\n", i, children[i]->getTypeString(), force ); - bool thisforces = children[i]->findLoopIndexesToReplace( symtab, force ); + //fprintf(stderr, "compound child %d of type %s force %d\n", i, children[i]->getTypeString(), force ); + bool thisforces = children[i]->findLoopIndexesToReplace(symtab, force); force = force || thisforces; // once set, always } - return false; + return false; -/* +/* vector<chillAST_node*> childrencopy; - for (int i=0; i<children.size(); i++) childrencopy.push_back( children[i] ); + for (int i=0; i<children.size(); i++) childrencopy.push_back( children[i] ); bool force = false; - - char *origtypes[64]; - int origsize = children.size(); - for (int i=0; i<children.size(); i++) { - fprintf(stderr, "ORIGINAL compound child %d of type %s\n", i, children[i]->getTypeString() ); - origtypes[i] = strdup( children[i]->getTypeString() ); - fprintf(stderr, "ORIGINAL compound child %d of type %s\n", i, children[i]->getTypeString() ); - } - - for (int i=0; i<childrencopy.size(); i++) { - fprintf(stderr, "compound child %d of type %s force %d\n", i, childrencopy[i]->getTypeString(), force ); + + char *origtypes[64]; + int origsize = children.size(); + for (int i=0; i<children.size(); i++) { + fprintf(stderr, "ORIGINAL compound child %d of type %s\n", i, children[i]->getTypeString() ); + origtypes[i] = strdup( children[i]->getTypeString() ); + fprintf(stderr, "ORIGINAL compound child %d of type %s\n", i, children[i]->getTypeString() ); + } + + for (int i=0; i<childrencopy.size(); i++) { + fprintf(stderr, "compound child %d of type %s force %d\n", i, childrencopy[i]->getTypeString(), force ); force = force || childrencopy[i]->findLoopIndexesToReplace( symtab, force ); // once set, always } - fprintf(stderr, "\n"); - for (int i=0; i<origsize; i++) { - fprintf(stderr, "BEFORE compound child %d/%d of type %s\n", i, origsize, origtypes[i]); + fprintf(stderr, "\n"); + for (int i=0; i<origsize; i++) { + fprintf(stderr, "BEFORE compound child %d/%d of type %s\n", i, origsize, origtypes[i]); } - for (int i=0; i<children.size(); i++) { - fprintf(stderr, "AFTER compound child %d/%d of type %s\n", i, children.size(), children[i]->getTypeString() ); + for (int i=0; i<children.size(); i++) { + fprintf(stderr, "AFTER compound child %d/%d of type %s\n", i, children.size(), children[i]->getTypeString() ); } return false; -*/ +*/ } - - - -chillAST_ParenExpr::chillAST_ParenExpr( chillAST_node *sub, chillAST_node *par ){ +chillAST_ParenExpr::chillAST_ParenExpr(chillAST_node *sub, chillAST_node *par) { subexpr = sub; - subexpr->setParent( this ); - asttype = CHILLAST_NODETYPE_PARENEXPR; + subexpr->setParent(this); + asttype = CHILLAST_NODETYPE_PARENEXPR; parent = par; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; } -void chillAST_ParenExpr::print( int indent, FILE *fp ) { - //fprintf(stderr, "chillAST_ParenExpr::print()\n"); +void chillAST_ParenExpr::print(int indent, FILE *fp) { + //fprintf(stderr, "chillAST_ParenExpr::print()\n"); chillindent(indent, fp); // hard to believe this will ever do anything - fprintf(fp, "(" ); - subexpr->print( 0, fp ); - fprintf(fp, ")" ); - fflush(fp); + fprintf(fp, "("); + subexpr->print(0, fp); + fprintf(fp, ")"); + fflush(fp); } -void chillAST_ParenExpr::dump( int indent, FILE *fp ) { - chillindent(indent, fp); - fprintf(fp, "(ParenExpr \n"); - subexpr->dump( indent+1, fp ); - chillindent(indent, fp); - fprintf(fp, ")\n"); +void chillAST_ParenExpr::dump(int indent, FILE *fp) { + chillindent(indent, fp); + fprintf(fp, "(ParenExpr \n"); + subexpr->dump(indent + 1, fp); + chillindent(indent, fp); + fprintf(fp, ")\n"); } -void chillAST_ParenExpr::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool writtento ) { - subexpr->gatherArrayRefs( refs, writtento ); +void chillAST_ParenExpr::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool writtento) { + subexpr->gatherArrayRefs(refs, writtento); } -void chillAST_ParenExpr::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) { - subexpr->gatherScalarRefs( refs, writtento ); -} - +void chillAST_ParenExpr::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { + subexpr->gatherScalarRefs(refs, writtento); +} -chillAST_node* chillAST_ParenExpr::constantFold() { +chillAST_node *chillAST_ParenExpr::constantFold() { subexpr = subexpr->constantFold(); - return this; + return this; } -chillAST_node* chillAST_ParenExpr::clone() { - chillAST_ParenExpr *PE = new chillAST_ParenExpr( subexpr->clone(), NULL ); - PE->isFromSourceFile = isFromSourceFile; - if (filename) PE->filename = strdup(filename); - return PE; +chillAST_node *chillAST_ParenExpr::clone() { + chillAST_ParenExpr *PE = new chillAST_ParenExpr(subexpr->clone(), NULL); + PE->isFromSourceFile = isFromSourceFile; + if (filename) PE->filename = strdup(filename); + return PE; } -void chillAST_ParenExpr::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherVarDecls( decls ); +void chillAST_ParenExpr::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherVarDecls(decls); } -void chillAST_ParenExpr::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherScalarVarDecls( decls ); +void chillAST_ParenExpr::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherScalarVarDecls(decls); } -void chillAST_ParenExpr::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherArrayVarDecls( decls ); +void chillAST_ParenExpr::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherArrayVarDecls(decls); } -void chillAST_ParenExpr::gatherDeclRefExprs( vector<chillAST_DeclRefExpr *>&refs ) { - subexpr->gatherDeclRefExprs( refs ); +void chillAST_ParenExpr::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) { + subexpr->gatherDeclRefExprs(refs); } -void chillAST_ParenExpr::replaceVarDecls( chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl){ - subexpr->replaceVarDecls( olddecl, newdecl ); +void chillAST_ParenExpr::replaceVarDecls(chillAST_VarDecl *olddecl, chillAST_VarDecl *newdecl) { + subexpr->replaceVarDecls(olddecl, newdecl); } -void chillAST_ParenExpr::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - subexpr->gatherVarUsage( decls ); +void chillAST_ParenExpr::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + subexpr->gatherVarUsage(decls); } - -chillAST_Sizeof::chillAST_Sizeof( char *athing, chillAST_node *par ){ - thing = strdup( athing ); // memory leak +chillAST_Sizeof::chillAST_Sizeof(char *athing, chillAST_node *par) { + thing = strdup(athing); // memory leak parent = par; - isFromSourceFile = true; // default + isFromSourceFile = true; // default filename = NULL; } -void chillAST_Sizeof::print( int indent, FILE *fp ) { - //fprintf(stderr, "chillAST_Sizeof::print()\n"); +void chillAST_Sizeof::print(int indent, FILE *fp) { + //fprintf(stderr, "chillAST_Sizeof::print()\n"); chillindent(indent, fp); // hard to believe this will ever do anything - fprintf(fp, "sizeof(" ); - fprintf(fp, "%s)", thing ); - fflush(fp); + fprintf(fp, "sizeof("); + fprintf(fp, "%s)", thing); + fflush(fp); } -void chillAST_Sizeof::dump( int indent, FILE *fp ) { - chillindent(indent, fp); - fprintf(fp, "(Sizeof %s )\n", thing); +void chillAST_Sizeof::dump(int indent, FILE *fp) { + chillindent(indent, fp); + fprintf(fp, "(Sizeof %s )\n", thing); } -void chillAST_Sizeof::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool writtento ) {} -void chillAST_Sizeof::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) {} +void chillAST_Sizeof::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool writtento) {} -chillAST_node* chillAST_Sizeof::constantFold() { - return this; +void chillAST_Sizeof::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) {} + +chillAST_node *chillAST_Sizeof::constantFold() { + return this; } -chillAST_node* chillAST_Sizeof::clone() { - chillAST_Sizeof *SO = new chillAST_Sizeof( thing, NULL ); - SO->isFromSourceFile = isFromSourceFile; - if (filename) SO->filename = strdup(filename); - return SO; +chillAST_node *chillAST_Sizeof::clone() { + chillAST_Sizeof *SO = new chillAST_Sizeof(thing, NULL); + SO->isFromSourceFile = isFromSourceFile; + if (filename) SO->filename = strdup(filename); + return SO; } -void chillAST_Sizeof::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { // TODO +void chillAST_Sizeof::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { // TODO } -void chillAST_Sizeof::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { // TODO +void chillAST_Sizeof::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { // TODO } -void chillAST_Sizeof::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { // TODO +void chillAST_Sizeof::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { // TODO } -void chillAST_Sizeof::gatherDeclRefExprs( vector<chillAST_DeclRefExpr *>&refs ) { - // TODO +void chillAST_Sizeof::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) { + // TODO } -void chillAST_Sizeof::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { +void chillAST_Sizeof::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { } -void insertNewDeclAtLocationOfOldIfNeeded( chillAST_VarDecl *newdecl, chillAST_VarDecl *olddecl) { +void insertNewDeclAtLocationOfOldIfNeeded(chillAST_VarDecl *newdecl, chillAST_VarDecl *olddecl) { //fprintf(stderr, "insertNewDeclAtLocationOfOldIfNeeded( new 0x%x old 0x%x\n", newdecl, olddecl ); if (newdecl == NULL || olddecl == NULL) { @@ -6041,196 +5946,195 @@ void insertNewDeclAtLocationOfOldIfNeeded( chillAST_VarDecl *newdecl, chillAST_V chillAST_node *newparent = newdecl->parent; chillAST_node *oldparent = olddecl->parent; - //fprintf(stderr, "newparent 0x%x oldparent 0x%x\n", newparent, oldparent ); + //fprintf(stderr, "newparent 0x%x oldparent 0x%x\n", newparent, oldparent ); if (newparent == oldparent) return; - if (newparent != NULL) + if (newparent != NULL) //fprintf(stderr, "chill_ast.cc insertNewDeclAtLocationOfOldIfNeeded() new decl already has parent?? probably wrong\n"); - newdecl->parent = oldparent; // will be true soon + newdecl->parent = oldparent; // will be true soon // find actual location of old decl and insert new one there //fprintf(stderr, "oldparent is of type %s\n", oldparent->getTypeString()); // better be compoundstmt ?? - vector<chillAST_node*> children = oldparent->getChildren(); - - int numchildren = children.size(); - //fprintf(stderr, "oldparent has %d children\n", numchildren); - + vector<chillAST_node *> children = oldparent->getChildren(); + + int numchildren = children.size(); + //fprintf(stderr, "oldparent has %d children\n", numchildren); + if (numchildren == 0) { - fprintf(stderr, "chill_ast.cc insertNewDeclAtLocationOfOldIfNeeded() impossible number of oldparent children (%d)\n", numchildren); + fprintf(stderr, + "chill_ast.cc insertNewDeclAtLocationOfOldIfNeeded() impossible number of oldparent children (%d)\n", + numchildren); exit(-1); } bool newalreadythere = false; int index = -1; - //fprintf(stderr, "olddecl is 0x%x\n", olddecl); + //fprintf(stderr, "olddecl is 0x%x\n", olddecl); //fprintf(stderr, "I know of %d variables\n", numchildren); - for (int i=0; i<numchildren; i++) { - chillAST_node *child = oldparent->getChild(i); - //fprintf(stderr, "child %d @ 0x%x is of type %s\n", i, child, child->getTypeString()); - if (children[i] == olddecl) { + for (int i = 0; i < numchildren; i++) { + chillAST_node *child = oldparent->getChild(i); + //fprintf(stderr, "child %d @ 0x%x is of type %s\n", i, child, child->getTypeString()); + if (children[i] == olddecl) { index = i; - //fprintf(stderr, "found old decl at index %d\n", index); + //fprintf(stderr, "found old decl at index %d\n", index); } - if (children[i] == newdecl) { - newalreadythere = true; - //fprintf(stderr, "new already there @ index %d\n", i); + if (children[i] == newdecl) { + newalreadythere = true; + //fprintf(stderr, "new already there @ index %d\n", i); } } - if (index == -1) { - fprintf(stderr, "chill_ast.cc insertNewDeclAtLocationOfOldIfNeeded() can't find old decl for %s\n", olddecl->varname); + if (index == -1) { + fprintf(stderr, "chill_ast.cc insertNewDeclAtLocationOfOldIfNeeded() can't find old decl for %s\n", + olddecl->varname); exit(-1); } - if (!newalreadythere) oldparent->insertChild( index, newdecl ); + if (!newalreadythere) oldparent->insertChild(index, newdecl); } -void gatherVarDecls( vector<chillAST_node*> &code, vector<chillAST_VarDecl*> &decls) { +void gatherVarDecls(vector<chillAST_node *> &code, vector<chillAST_VarDecl *> &decls) { //fprintf(stderr, "gatherVarDecls()\n"); int numcode = code.size(); //fprintf(stderr, "%d top level statements\n", numcode); - for (int i=0; i<numcode; i++) { + for (int i = 0; i < numcode; i++) { chillAST_node *statement = code[i]; - statement->gatherVarDecls( decls ); + statement->gatherVarDecls(decls); } } -void gatherVarUsage( vector<chillAST_node*> &code, vector<chillAST_VarDecl*> &decls) { +void gatherVarUsage(vector<chillAST_node *> &code, vector<chillAST_VarDecl *> &decls) { //fprintf(stderr, "gatherVarUsage()\n"); int numcode = code.size(); //fprintf(stderr, "%d top level statements\n", numcode); - for (int i=0; i<numcode; i++) { + for (int i = 0; i < numcode; i++) { chillAST_node *statement = code[i]; - statement->gatherVarUsage( decls ); + statement->gatherVarUsage(decls); } } - - -chillAST_IfStmt::chillAST_IfStmt() { - cond = thenpart = elsepart = NULL; - asttype = CHILLAST_NODETYPE_IFSTMT; - isFromSourceFile = true; // default +chillAST_IfStmt::chillAST_IfStmt() { + cond = thenpart = elsepart = NULL; + asttype = CHILLAST_NODETYPE_IFSTMT; + isFromSourceFile = true; // default filename = NULL; } -chillAST_IfStmt::chillAST_IfStmt(chillAST_node *c, chillAST_node *t, chillAST_node *e, chillAST_node *p){ +chillAST_IfStmt::chillAST_IfStmt(chillAST_node *c, chillAST_node *t, chillAST_node *e, chillAST_node *p) { cond = c; - if (cond) cond->setParent( this ); + if (cond) cond->setParent(this); thenpart = t; - if (thenpart) thenpart->setParent( this ); + if (thenpart) thenpart->setParent(this); elsepart = e; - if (elsepart) elsepart->setParent( this ); + if (elsepart) elsepart->setParent(this); parent = p; - asttype = CHILLAST_NODETYPE_IFSTMT; - isFromSourceFile = true; // default + asttype = CHILLAST_NODETYPE_IFSTMT; + isFromSourceFile = true; // default filename = NULL; } -void chillAST_IfStmt::gatherVarDecls( vector<chillAST_VarDecl*> &decls ) { - if (cond) cond->gatherVarDecls( decls ); - if (thenpart) thenpart->gatherVarDecls( decls ); - if (elsepart) elsepart->gatherVarDecls( decls ); +void chillAST_IfStmt::gatherVarDecls(vector<chillAST_VarDecl *> &decls) { + if (cond) cond->gatherVarDecls(decls); + if (thenpart) thenpart->gatherVarDecls(decls); + if (elsepart) elsepart->gatherVarDecls(decls); } -void chillAST_IfStmt::gatherScalarVarDecls( vector<chillAST_VarDecl*> &decls ) { - if (cond) cond->gatherScalarVarDecls( decls ); - if (thenpart) thenpart->gatherScalarVarDecls( decls ); - if (elsepart) elsepart->gatherScalarVarDecls( decls ); +void chillAST_IfStmt::gatherScalarVarDecls(vector<chillAST_VarDecl *> &decls) { + if (cond) cond->gatherScalarVarDecls(decls); + if (thenpart) thenpart->gatherScalarVarDecls(decls); + if (elsepart) elsepart->gatherScalarVarDecls(decls); } -void chillAST_IfStmt::gatherArrayVarDecls( vector<chillAST_VarDecl*> &decls ) { - if (cond) cond->gatherArrayVarDecls( decls ); - if (thenpart) thenpart->gatherArrayVarDecls( decls ); - if (elsepart) elsepart->gatherArrayVarDecls( decls ); +void chillAST_IfStmt::gatherArrayVarDecls(vector<chillAST_VarDecl *> &decls) { + if (cond) cond->gatherArrayVarDecls(decls); + if (thenpart) thenpart->gatherArrayVarDecls(decls); + if (elsepart) elsepart->gatherArrayVarDecls(decls); } -void chillAST_IfStmt::gatherDeclRefExprs( vector<chillAST_DeclRefExpr *>&refs ) { - if (cond) cond->gatherDeclRefExprs( refs ); - if (thenpart) thenpart->gatherDeclRefExprs( refs ); - if (elsepart) elsepart->gatherDeclRefExprs( refs ); +void chillAST_IfStmt::gatherDeclRefExprs(vector<chillAST_DeclRefExpr *> &refs) { + if (cond) cond->gatherDeclRefExprs(refs); + if (thenpart) thenpart->gatherDeclRefExprs(refs); + if (elsepart) elsepart->gatherDeclRefExprs(refs); } -void chillAST_IfStmt::gatherVarUsage( vector<chillAST_VarDecl*> &decls ) { - if (cond) cond->gatherVarUsage( decls ); - if (thenpart) thenpart->gatherVarUsage( decls ); - if (elsepart) elsepart->gatherVarUsage( decls ); +void chillAST_IfStmt::gatherVarUsage(vector<chillAST_VarDecl *> &decls) { + if (cond) cond->gatherVarUsage(decls); + if (thenpart) thenpart->gatherVarUsage(decls); + if (elsepart) elsepart->gatherVarUsage(decls); } -void chillAST_IfStmt::gatherArrayRefs( std::vector<chillAST_ArraySubscriptExpr*> &refs, bool writtento ) { - cond->gatherArrayRefs( refs, 0 ); // 0 ?? - thenpart->gatherArrayRefs( refs, 0 ); // 0 ?? - if (elsepart) elsepart->gatherArrayRefs( refs, 0 ); // 0 ?? +void chillAST_IfStmt::gatherArrayRefs(std::vector<chillAST_ArraySubscriptExpr *> &refs, bool writtento) { + cond->gatherArrayRefs(refs, 0); // 0 ?? + thenpart->gatherArrayRefs(refs, 0); // 0 ?? + if (elsepart) elsepart->gatherArrayRefs(refs, 0); // 0 ?? } -void chillAST_IfStmt::gatherScalarRefs( std::vector<chillAST_DeclRefExpr*> &refs, bool writtento ) { - cond->gatherScalarRefs( refs, 0 ); // 0 ?? - thenpart->gatherScalarRefs( refs, 0 ); // 0 ?? - if (elsepart) elsepart->gatherScalarRefs( refs, 0 ); // 0 ?? -} +void chillAST_IfStmt::gatherScalarRefs(std::vector<chillAST_DeclRefExpr *> &refs, bool writtento) { + cond->gatherScalarRefs(refs, 0); // 0 ?? + thenpart->gatherScalarRefs(refs, 0); // 0 ?? + if (elsepart) elsepart->gatherScalarRefs(refs, 0); // 0 ?? +} -chillAST_node *chillAST_IfStmt::constantFold() { +chillAST_node *chillAST_IfStmt::constantFold() { if (cond) cond = cond->constantFold(); if (thenpart) thenpart = thenpart->constantFold(); if (elsepart) elsepart = elsepart->constantFold(); - return this; + return this; } -void chillAST_IfStmt::gatherStatements(std::vector<chillAST_node*> &statements ){ +void chillAST_IfStmt::gatherStatements(std::vector<chillAST_node *> &statements) { - //print(); printf("\n"); fflush(stdout); - thenpart->gatherStatements( statements ); - //fprintf(stderr, "ifstmt, after then, %d statements\n", statements.size()); - if (elsepart){ - //fprintf(stderr, "there is an elsepart of type %s\n", elsepart->getTypeString()); - elsepart->gatherStatements( statements ); + //print(); printf("\n"); fflush(stdout); + thenpart->gatherStatements(statements); + //fprintf(stderr, "ifstmt, after then, %d statements\n", statements.size()); + if (elsepart) { + //fprintf(stderr, "there is an elsepart of type %s\n", elsepart->getTypeString()); + elsepart->gatherStatements(statements); } - //fprintf(stderr, "ifstmt, after else, %d statements\n", statements.size()); + //fprintf(stderr, "ifstmt, after else, %d statements\n", statements.size()); } - -chillAST_node *chillAST_IfStmt::clone() { - chillAST_node *c, *t, *e; - c = t = e = NULL; - if (cond) c = cond->clone(); // has to be one, right? +chillAST_node *chillAST_IfStmt::clone() { + chillAST_node *c, *t, *e; + c = t = e = NULL; + if (cond) c = cond->clone(); // has to be one, right? if (thenpart) t = thenpart->clone(); if (elsepart) e = elsepart->clone(); - chillAST_IfStmt *IS = new chillAST_IfStmt( c, t, e, parent); + chillAST_IfStmt *IS = new chillAST_IfStmt(c, t, e, parent); IS->isFromSourceFile = isFromSourceFile; - if (filename) IS->filename = strdup(filename); + if (filename) IS->filename = strdup(filename); return IS; -} - +} -void chillAST_IfStmt::dump( int indent, FILE *fp ) { +void chillAST_IfStmt::dump(int indent, FILE *fp) { chillindent(indent, fp); fprintf(fp, "(if "); fprintf(fp, "\n"); - cond->dump(indent+1, fp); + cond->dump(indent + 1, fp); fprintf(fp, "\n"); - thenpart->dump(indent+1, fp); - fprintf(fp, "\n"); + thenpart->dump(indent + 1, fp); + fprintf(fp, "\n"); - if (elsepart) { - elsepart->dump(indent+1, fp); + if (elsepart) { + elsepart->dump(indent + 1, fp); fprintf(fp, "\n"); } chillindent(indent, fp); @@ -6238,255 +6142,246 @@ void chillAST_IfStmt::dump( int indent, FILE *fp ) { } - -void chillAST_IfStmt::print(int indent, FILE *fp ) { - printPreprocBEFORE(indent, fp); +void chillAST_IfStmt::print(int indent, FILE *fp) { + printPreprocBEFORE(indent, fp); chillindent(indent, fp); - fprintf(fp, "if ("); + fprintf(fp, "if ("); if (cond) cond->print(0, fp); - else fprintf(fp, "(NULL cond)"); + else fprintf(fp, "(NULL cond)"); - bool needbracket = true; - if (thenpart) { + bool needbracket = true; + if (thenpart) { if (thenpart->isBinaryOperator()) needbracket = false; if (thenpart->isCompoundStmt()) { // almost always true - chillAST_CompoundStmt *CS = (chillAST_CompoundStmt*) thenpart; - if (CS->children.size() == 1 && CS->children[0]->isBinaryOperator()) needbracket = false; - } - - if(needbracket) fprintf(fp, ") {\n"); - else fprintf(fp, ")\n"); - - thenpart->print(indent+1, fp); // end of line - - if(needbracket) { - //fprintf(fp, "\n"); + chillAST_CompoundStmt *CS = (chillAST_CompoundStmt *) thenpart; + if (CS->children.size() == 1 && CS->children[0]->isBinaryOperator()) needbracket = false; + } + + if (needbracket) fprintf(fp, ") {\n"); + else fprintf(fp, ")\n"); + + thenpart->print(indent + 1, fp); // end of line + + if (needbracket) { + //fprintf(fp, "\n"); chillindent(indent, fp); - fprintf(fp, "}\n"); + fprintf(fp, "}\n"); } - } - else fprintf(fp, "(NULL thenpart)"); + } else fprintf(fp, "(NULL thenpart)"); + - needbracket = true; - if (elsepart) { + if (elsepart) { if (elsepart->isBinaryOperator()) needbracket = false; if (elsepart->isCompoundStmt()) { // almost always true - chillAST_CompoundStmt *CS = (chillAST_CompoundStmt*) elsepart; - - if (CS->children.size() == 1 && CS->children[0]->isBinaryOperator()) needbracket = false; - - } - - fprintf(fp, "\n"); + chillAST_CompoundStmt *CS = (chillAST_CompoundStmt *) elsepart; + + if (CS->children.size() == 1 && CS->children[0]->isBinaryOperator()) needbracket = false; + + } + + fprintf(fp, "\n"); chillindent(indent, fp); - - if (needbracket) fprintf(fp, "else {\n"); - else fprintf(fp, "else\n"); - - elsepart->print(indent+1, fp); - - if(needbracket) { - fprintf(fp, "\n"); + + if (needbracket) fprintf(fp, "else {\n"); + else fprintf(fp, "else\n"); + + elsepart->print(indent + 1, fp); + + if (needbracket) { + fprintf(fp, "\n"); chillindent(indent, fp); - fprintf(fp, "}\n"); + fprintf(fp, "}\n"); } } - //else fprintf(fp, "else { /* NOTHING */ }"); + //else fprintf(fp, "else { /* NOTHING */ }"); } - -bool chillAST_IfStmt::findLoopIndexesToReplace( chillAST_SymbolTable *symtab, bool forcesync ) { - thenpart->findLoopIndexesToReplace( symtab ); - elsepart->findLoopIndexesToReplace( symtab ); - return false; // ?? +bool chillAST_IfStmt::findLoopIndexesToReplace(chillAST_SymbolTable *symtab, bool forcesync) { + thenpart->findLoopIndexesToReplace(symtab); + elsepart->findLoopIndexesToReplace(symtab); + return false; // ?? } - -chillAST_node *lessthanmacro( chillAST_node *left, chillAST_node *right) { +chillAST_node *lessthanmacro(chillAST_node *left, chillAST_node *right) { - chillAST_ParenExpr *lp1 = new chillAST_ParenExpr( left ); - chillAST_ParenExpr *rp1 = new chillAST_ParenExpr( right ); - chillAST_BinaryOperator *cond = new chillAST_BinaryOperator( lp1, "<", rp1 ); + chillAST_ParenExpr *lp1 = new chillAST_ParenExpr(left); + chillAST_ParenExpr *rp1 = new chillAST_ParenExpr(right); + chillAST_BinaryOperator *cond = new chillAST_BinaryOperator(lp1, "<", rp1); - chillAST_ParenExpr *lp2 = new chillAST_ParenExpr( left ); - chillAST_ParenExpr *rp2 = new chillAST_ParenExpr( right ); - - chillAST_TernaryOperator *t = new chillAST_TernaryOperator("?", cond, lp2, rp2); - - return t; -} + chillAST_ParenExpr *lp2 = new chillAST_ParenExpr(left); + chillAST_ParenExpr *rp2 = new chillAST_ParenExpr(right); + chillAST_TernaryOperator *t = new chillAST_TernaryOperator("?", cond, lp2, rp2); + return t; +} // look for function declaration with a given name, in the tree with root "node" -void findFunctionDeclRecursive( chillAST_node *node, const char *procname, vector<chillAST_FunctionDecl*>& funcs ) -{ - //fprintf(stderr, "findmanually() CHILL AST node of type %s\n", node->getTypeString()); - - if (node->isFunctionDecl()) { +void findFunctionDeclRecursive(chillAST_node *node, const char *procname, vector<chillAST_FunctionDecl *> &funcs) { + //fprintf(stderr, "findmanually() CHILL AST node of type %s\n", node->getTypeString()); + + if (node->isFunctionDecl()) { char *name = ((chillAST_FunctionDecl *) node)->functionName; // compare name with desired name //fprintf(stderr, "node name 0x%x ", name); - //fprintf(stderr, "%s procname ", name); + //fprintf(stderr, "%s procname ", name); //fprintf(stderr, "0x%x ", procname); - //fprintf(stderr, "%s\n", procname); - if (!strcmp( name, procname)) { - //fprintf(stderr, "found procedure %s\n", procname ); - funcs.push_back( (chillAST_FunctionDecl*) node ); // this is it + //fprintf(stderr, "%s\n", procname); + if (!strcmp(name, procname)) { + //fprintf(stderr, "found procedure %s\n", procname ); + funcs.push_back((chillAST_FunctionDecl *) node); // this is it // quit recursing. probably not correct in some horrible case - return; + return; } - //else fprintf(stderr, "this is not the function we're looking for\n"); + //else fprintf(stderr, "this is not the function we're looking for\n"); } - // this is where the children can be used effectively. + // this is where the children can be used effectively. // we don't really care what kind of node we're at. We just check the node itself - // and then its children is needed. + // and then its children is needed. - int numc = node->children.size(); + int numc = node->children.size(); fprintf(stderr, "(top)node has %d children\n", numc); - for (int i=0; i<numc; i++) { - if (node->isSourceFile()) { - fprintf(stderr, "node of type %s is recursing to child %d of type %s\n", node->getTypeString(), i, node->children[i]->getTypeString()); - if (node->children[i]->isFunctionDecl()) { - chillAST_FunctionDecl *fd = (chillAST_FunctionDecl*) node->children[i]; - fprintf(stderr, "child %d is functiondecl %s\n", i, fd->functionName); + for (int i = 0; i < numc; i++) { + if (node->isSourceFile()) { + fprintf(stderr, "node of type %s is recursing to child %d of type %s\n", node->getTypeString(), i, + node->children[i]->getTypeString()); + if (node->children[i]->isFunctionDecl()) { + chillAST_FunctionDecl *fd = (chillAST_FunctionDecl *) node->children[i]; + fprintf(stderr, "child %d is functiondecl %s\n", i, fd->functionName); } } - findFunctionDeclRecursive( node->children[i], procname, funcs ); - + findFunctionDeclRecursive(node->children[i], procname, funcs); + } - return; + return; } -chillAST_FunctionDecl *findFunctionDecl( chillAST_node *node, const char *procname) -{ - vector<chillAST_FunctionDecl*> functions; - findFunctionDeclRecursive( node, procname, functions ); +chillAST_FunctionDecl *findFunctionDecl(chillAST_node *node, const char *procname) { + vector<chillAST_FunctionDecl *> functions; + findFunctionDeclRecursive(node, procname, functions); - if ( functions.size() == 0 ) { + if (functions.size() == 0) { fprintf(stderr, "could not find function named '%s'\n", procname); exit(-1); } - - if ( functions.size() > 1 ) { + + if (functions.size() > 1) { fprintf(stderr, "oddly, found %d functions named '%s'\n", functions.size(), procname); - fprintf(stderr, "I am unsure what to do\n"); + fprintf(stderr, "I am unsure what to do\n"); - for (int f = 0; f < functions.size(); f++) { - fprintf(stderr, "function %d %p %s\n", f, functions[f], functions[f]->functionName); + for (int f = 0; f < functions.size(); f++) { + fprintf(stderr, "function %d %p %s\n", f, functions[f], functions[f]->functionName); } exit(-1); } - - //fprintf(stderr, "found the procedure named %s\n", procname); + + //fprintf(stderr, "found the procedure named %s\n", procname); return functions[0]; } -chillAST_SymbolTable *addSymbolToTable( chillAST_SymbolTable *st, chillAST_VarDecl *vd ) // definition +chillAST_SymbolTable *addSymbolToTable(chillAST_SymbolTable *st, chillAST_VarDecl *vd) // definition { chillAST_SymbolTable *s = st; - if (!s) s = new chillAST_SymbolTable; - + if (!s) s = new chillAST_SymbolTable; + int tablesize = s->size(); - - for (int i=0; i<tablesize; i++) { - if ((*s)[i] == vd) { - //fprintf(stderr, "the exact same symbol, not just the same name, was already there\n"); - return s; // already there + + for (int i = 0; i < tablesize; i++) { + if ((*s)[i] == vd) { + //fprintf(stderr, "the exact same symbol, not just the same name, was already there\n"); + return s; // already there } } - for (int i=0; i<tablesize; i++) { - //fprintf(stderr, "name %s vs name %s\n", (*s)[i]->varname, vd->varname); - if (!strcmp( (*s)[i]->varname, vd->varname)) { - //fprintf(stderr, "symbol with the same name was already there\n"); - return s; // already there + for (int i = 0; i < tablesize; i++) { + //fprintf(stderr, "name %s vs name %s\n", (*s)[i]->varname, vd->varname); + if (!strcmp((*s)[i]->varname, vd->varname)) { + //fprintf(stderr, "symbol with the same name was already there\n"); + return s; // already there } } - //fprintf(stderr, "adding %s %s to a symbol table that didn't already have it\n", vd->vartype, vd->varname); + //fprintf(stderr, "adding %s %s to a symbol table that didn't already have it\n", vd->vartype, vd->varname); - //printf("before:\n"); - //printSymbolTable( s ); fflush(stdout); + //printf("before:\n"); + //printSymbolTable( s ); fflush(stdout); - s->push_back(vd); // add it + s->push_back(vd); // add it - //printf("after:\n"); - //printSymbolTable( s ); fflush(stdout); + //printf("after:\n"); + //printSymbolTable( s ); fflush(stdout); return s; } -chillAST_TypedefTable *addTypedefToTable( chillAST_TypedefTable *tdt, chillAST_TypedefDecl *td ) -{ +chillAST_TypedefTable *addTypedefToTable(chillAST_TypedefTable *tdt, chillAST_TypedefDecl *td) { chillAST_TypedefTable *t = tdt; if (!t) t = new chillAST_TypedefTable; int tablesize = t->size(); - - for (int i=0; i<tablesize; i++) { - if ((*t)[i] == td) return t; // already there + + for (int i = 0; i < tablesize; i++) { + if ((*t)[i] == td) return t; // already there } - t->push_back(td); // add it + t->push_back(td); // add it return t; } -chillAST_NoOp::chillAST_NoOp( chillAST_node *p ) { - parent = p; - isFromSourceFile = true; // default +chillAST_NoOp::chillAST_NoOp(chillAST_node *p) { + parent = p; + isFromSourceFile = true; // default filename = NULL; }; // so we have SOMETHING for NoOp in the cc file ??? -chillAST_Preprocessing::chillAST_Preprocessing() { +chillAST_Preprocessing::chillAST_Preprocessing() { position = CHILL_PREPROCESSING_POSITIONUNKNOWN; - pptype = CHILL_PREPROCESSING_TYPEUNKNOWN; + pptype = CHILL_PREPROCESSING_TYPEUNKNOWN; blurb = strdup(""); // never use null. ignore the leak ?? } - chillAST_Preprocessing::chillAST_Preprocessing(CHILL_PREPROCESSING_POSITION pos, - CHILL_PREPROCESSING_TYPE t, - char *text ) - { - position = pos; - pptype = t; - blurb = strdup( text ); - } - -void chillAST_Preprocessing::print( int indent, FILE *fp ) { // probably very wrong - if (position == CHILL_PREPROCESSING_LINEAFTER ) { - fprintf(fp, "\n"); - chillindent(indent, fp); - } - if (position == CHILL_PREPROCESSING_LINEBEFORE) { // ??? - //fprintf(fp, "\n"); - chillindent(indent, fp); - } - - fprintf(fp, "%s", blurb); - - if (position == CHILL_PREPROCESSING_TOTHERIGHT) { - fprintf(fp, "\n"); - } +chillAST_Preprocessing::chillAST_Preprocessing(CHILL_PREPROCESSING_POSITION pos, + CHILL_PREPROCESSING_TYPE t, + char *text) { + position = pos; + pptype = t; + blurb = strdup(text); +} + +void chillAST_Preprocessing::print(int indent, FILE *fp) { // probably very wrong + if (position == CHILL_PREPROCESSING_LINEAFTER) { + fprintf(fp, "\n"); + chillindent(indent, fp); + } + if (position == CHILL_PREPROCESSING_LINEBEFORE) { // ??? + //fprintf(fp, "\n"); + chillindent(indent, fp); + } + fprintf(fp, "%s", blurb); - if (position == CHILL_PREPROCESSING_LINEBEFORE) { - //fprintf(fp, "\n"); // comment seems to have \n at the end already - //chillindent(indent, fp); - } + if (position == CHILL_PREPROCESSING_TOTHERIGHT) { + fprintf(fp, "\n"); + } - //if (pptype != CHILL_PREPROCESSING_IMMEDIATELYBEFORE && pptype != CHILL_PREPROCESSING_UNKNOWN) fprint(fp, "\n"); - - } + if (position == CHILL_PREPROCESSING_LINEBEFORE) { + //fprintf(fp, "\n"); // comment seems to have \n at the end already + //chillindent(indent, fp); + } + + + //if (pptype != CHILL_PREPROCESSING_IMMEDIATELYBEFORE && pptype != CHILL_PREPROCESSING_UNKNOWN) fprint(fp, "\n"); + +} |