SymTableNode_T newtemp(){ SymTableNode_T sym; char* name; sym = (SymTableNode_T) malloc (sizeof(struct symbol)); name = newtempname(); sym = SymTable_getNodeFromScope(name, cur_scope); if (sym == NULL){ sym = SymTableNode_put(name, yylineno, cur_scope, VARIABLE, TRUE_T); sym->space = currscopespace(); sym->offset = currscopeoffset(); inccurrscopeoffset(); } return sym; }
// Creates a new hidden var SymbolTableEntry * newtemp(){ // MONO NEES KRIFES METAVLITES // OXI EPANAXRISIMOPOIHSH SymbolTableEntry* entry; entry = (SymbolTableEntry *)malloc(sizeof(SymbolTableEntry)); Variable *var; var = (Variable *)malloc(sizeof(Variable)); var->name = strdup(newtempname()); var->scope = get_current_scope(); var->line = yylineno; entry->value.varVal = var; entry->isActive = SYM_TRUE; entry->scope = get_current_scope(); entry->space = currscopespace(); inccurrscopeoffset(); entry->offset = currscopeoffset(); //entry->type = ; return entry; }
// Creates a new hidden var SymbolTableEntry * newtemp(){ // MONO NEES KRIFES METAVLITES // OXI EPANAXRISIMOPOIHSH char* new_name = strdup(newtempname()); if(lookup_sym(new_name, get_current_scope()) != NULL) { return lookup_sym(new_name, get_current_scope()); } else { SymbolTableEntry* entry; entry = (SymbolTableEntry *)malloc(sizeof(SymbolTableEntry)); Variable *var; var = (Variable *)malloc(sizeof(Variable)); var->name = strdup(new_name); var->scope = get_current_scope(); var->line = yylineno; entry->value.varVal = var; entry->isActive = SYM_TRUE; entry->scope = get_current_scope(); entry->space = currscopespace(); inccurrscopeoffset(); entry->offset = currscopeoffset(); if(get_current_scope() == 0) { entry->type = GLOBAL; printf("LOOKUP: %d\n", Lookup(new_name,VAR,GLOBAL)); if(Lookup(new_name,VAR,GLOBAL) == 0) { insert(entry); insert_in_heads(entry); } else { printf("GLOBAL ERROR\n"); } } else { entry->type = SYM_LOCAL; if(Lookup(new_name,VAR,SYM_LOCAL) == 1) { insert(entry); insert_in_heads(entry); } else if(Lookup(new_name,VAR,SYM_LOCAL) == 2) { insert(entry); update_heads(entry,0,0); } else if(Lookup(new_name,VAR,SYM_LOCAL) == 5) { printf("pedaraki\n"); } else if(Lookup(new_name,VAR,SYM_LOCAL) == 0) { printf("LOCAL ERROR\n"); } } // kode gia insert tou entry sto symbol table return entry; } }