diff --git a/src/grammar.y b/src/grammar.y index ab9e3a2..4e2aa1d 100644 --- a/src/grammar.y +++ b/src/grammar.y @@ -365,11 +365,12 @@ sblock: } statement_list { - $$ = $3; + //$$ = $3; printdebug("Moving up a scope after seeing sblock"); cur = getParent(cur); } R_BRACE + {$$ = $3;} | L_BRACE { @@ -390,9 +391,10 @@ sblock: { printdebug("Moving up a scope after seeing sblock with dblock"); cur = getParent(cur); - $$ = $5; + //$$ = $5; } R_BRACE + {$$ = $5;} ; @@ -880,7 +882,8 @@ assignable: if (getNumArrDim(look_up(getParent(cur), getName((TableNode*)$1))) != $2) { printdebug("expected %d arguments but had %d at line %d and column %d\n", getNumArrDim(look_up(cur, getName((TableNode*)$1))), $2, @2.first_line, @2.first_column); } - $$ = getArrType(look_up(getParent(cur), getName((TableNode*)$1))); + $$ = getArrType(look_up(cur, getName((TableNode*)$1))); + printdebug("[ASSIGNABLE - RULE 2] assignable = type: %s | name_func = %s", getName((TableNode*)$$), getName((TableNode*)$1)); printdebug("[ASSIGNABLE - RULE 2] assignable = type: %s | name_func = %s", getName((TableNode*)$$), getName((TableNode*)$1)); } cur = getParent(cur); diff --git a/src/symbol_table.c b/src/symbol_table.c index 897d787..4232c16 100644 --- a/src/symbol_table.c +++ b/src/symbol_table.c @@ -92,9 +92,10 @@ int getNumArrDim(TableNode *definition) { "function. Invalid."); return -1; } - if (strcmp(getType(definition), "array") != 0) { - printdebug("not checking the dim of an array -- invalid op"); - return 0; + if(getAdInfoType(definition) != TYPE_ARRAY_TYPE){ + printdebug( + "passed an invalid node to getNumArrDim. Seeing tag %d in getNumArrDim. Invalid.",getAdInfoType(definition)); + return -1; } return definition->additionalinfo->ArrayAdInfo->numofdimensions; } @@ -113,8 +114,9 @@ TableNode *getArrType(TableNode *definition) { "function. Invalid."); return undefined; } - if (strcmp(getType(definition), "array") != 0) { - printdebug("not checking the type of an array -- invalid op"); + if(getAdInfoType(definition) != TYPE_ARRAY_TYPE){ + printdebug( + "passed an invalid node to getArrType. Seeing tag %d. Invalid.",getAdInfoType(definition)); return undefined; } return definition->additionalinfo->ArrayAdInfo->typeofarray; @@ -1132,8 +1134,8 @@ void print_symbol_table(SymbolTable *table, FILE *file_ptr) { } if (getAdInfoType(entry) == TYPE_ARRAY) { char *arrayType = (char *)malloc(100); - sprintf(arrayType, " %d -> %s", getNumArrDim(entry), - getName(getArrType(entry))); + //sprintf(arrayType, " %d -> %s", getNumArrDim(entry), + // getName(getArrType(entry))); if (parentScopeNum == 0) { st_fprint(file_ptr, getName(entry), currentScopeNum, -100, getType(entry), " Array Instance"); diff --git a/tests/sprint2/test/sp2_simple.alpha b/tests/sprint2/test/sp2_simple.alpha index 5f60c1b..825fdcd 100644 --- a/tests/sprint2/test/sp2_simple.alpha +++ b/tests/sprint2/test/sp2_simple.alpha @@ -2,6 +2,6 @@ type main: string -> integer function entry: main entry(arg) := { - [int : x] + [integer : x] return 0; } diff --git a/tests/sprint3/test/sp3_record_size_check.alpha b/tests/sprint3/test/sp3_record_size_check.alpha index a6217fe..8e123d0 100644 --- a/tests/sprint3/test/sp3_record_size_check.alpha +++ b/tests/sprint3/test/sp3_record_size_check.alpha @@ -1,2 +1,3 @@ type tom : [integer : x; integer: y] -type rec : [integer : x; tom : prev; character : c; character : d; Boolean: b; integer : y] \ No newline at end of file +type rec : [integer : x; tom : prev; character : c; character : d; Boolean: b; integer : y] +type tricky : [Boolean : b1; integer : k1; Boolean : b2; integer : k2] \ No newline at end of file