diff --git a/src/grammar.y b/src/grammar.y index 4e2aa1d..0a03126 100644 --- a/src/grammar.y +++ b/src/grammar.y @@ -392,6 +392,7 @@ sblock: printdebug("Moving up a scope after seeing sblock with dblock"); cur = getParent(cur); //$$ = $5; + } R_BRACE {$$ = $5;} diff --git a/src/symbol_table.c b/src/symbol_table.c index 4232c16..cd44b40 100644 --- a/src/symbol_table.c +++ b/src/symbol_table.c @@ -605,20 +605,31 @@ SymbolTable *init(SymbolTable *start) { chara = (TableNode *)calloc(1, sizeof(TableNode)); stri = (TableNode *)calloc(1, sizeof(TableNode)); boo = (TableNode *)calloc(1, sizeof(TableNode)); + TableNode* reservetype = (TableNode *)calloc(1, sizeof(TableNode)); + TableNode* reserve = (TableNode *)calloc(1, sizeof(TableNode)); + TableNode* releasetype = (TableNode *)calloc(1, sizeof(TableNode)); + TableNode* release = (TableNode *)calloc(1, sizeof(TableNode)); // TableNode* arr = (TableNode*)malloc(sizeof(SymbolTable)); start->entries = integ; integ->next = addr; addr->next = chara; chara->next = stri; stri->next = boo; - // boo->next = arr; - boo->next = NULL; + boo->next = reservetype; + reservetype->next = reserve; + reserve->next = releasetype; + releasetype->next = release; + release->next = NULL; integ->theName = "integer"; addr->theName = "address"; chara->theName = "character"; boo->theName = "Boolean"; stri->theName = "string"; + reserve->theName = "reserve"; + reservetype->theName = "reserve type"; + releasetype->theName = "release type"; + release->theName = "release"; // arr->theName= "array" // root TableNode that all are pointing to but not in table @@ -685,6 +696,11 @@ SymbolTable *init(SymbolTable *start) { chara->theType = prime; stri->theType = arrayprim; boo->theType = prime; + reserve->theType = reservetype; + reservetype->theType = funtypeprime; + releasetype->theType = funtypeprime; + release->theType = releasetype; + // arr->theType=arrayprim; // filling in all the values for the additional info for initial types @@ -697,12 +713,20 @@ SymbolTable *init(SymbolTable *start) { chara->additionalinfo = CreatePrimitiveInfo(SIZE_CHAR); stri->additionalinfo = CreateArrayInfo(1, chara); boo->additionalinfo = CreatePrimitiveInfo(SIZE_BOOL); + reserve->additionalinfo = CreateFunctionDeclarationInfo(0, false); + reservetype->additionalinfo = CreateFunctionTypeInfo(integ, addr); + releasetype->additionalinfo = CreateFunctionTypeInfo(addr, integ); + release->additionalinfo = CreateFunctionDeclarationInfo(0, false); integ->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for integ addr->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for addr chara->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for chara stri->tag = TYPE_ARRAY_TYPE; // explicitly set the type for stri boo->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for boo + reserve->tag = TYPE_FUNCTION_DECLARATION; + reservetype->tag = TYPE_FUNCTION_TYPE; + releasetype->tag = TYPE_FUNCTION_TYPE; + release->tag = TYPE_FUNCTION_DECLARATION; // addr->additionalinfo = CreatePrimitiveInfo(8); start->Line_Number = 1; diff --git a/tests/sprint2/test/sp2_simple.alpha b/tests/sprint2/test/sp2_simple.alpha index 825fdcd..58934e6 100644 --- a/tests/sprint2/test/sp2_simple.alpha +++ b/tests/sprint2/test/sp2_simple.alpha @@ -4,4 +4,4 @@ function entry: main entry(arg) := { [integer : x] return 0; -} +} \ No newline at end of file