small changes, segfault issue found

This commit is contained in:
Scarlett
2025-03-31 17:38:37 -04:00
parent 0593673d89
commit 188c734465
2 changed files with 35 additions and 32 deletions

View File

@ -121,7 +121,7 @@ prototype:
L_PAREN EXTERNAL R_PAREN FUNCTION ID COLON ID;
definition:
TYPE ID COLON {
TYPE ID COLON {
printdebug("Currently see a record definition for %s", $<words>2);
tn = CreateEntry(getAncestor(cur), recprime, $2, CreateRecordInfo(0, cur = CreateScope(cur, 0, 0)));
if (table_lookup(getAncestor(cur), $2) == undefined) {
@ -238,7 +238,7 @@ declaration:
;
id_or_types:
ID {printdebug("string of id is %s in ID pattern of id_or_type rule."); $$ = $1;}
ID {printdebug("string of id is %s in ID pattern of id_or_type rule.", $1); $$ = $1;}
//{printdebug("string of id is %s in ID pattern of id_or_type rule. Type passed up the tree is %s.",$1,getType(look_up(cur,$1))); $$ = getType(look_up(cur,$1));}
| types {printdebug("string of type is %s in types pattern of id_or_type rule.",$1);} {$$ = $1;}
//{printdebug("string of type is %s in types pattern of id_or_type rule. That is passed up the tree.",$<words>1);} {$$ = $<words>1;}

View File

@ -148,8 +148,8 @@ int getPrimSize(TableNode *definition) {
return -1;
}
if (definition == undefined) {
printdebug(
"passed an undefined entry to getPrimSize function. Invalid.");
printdebug("passed an undefined entry to getPrimSize function. "
"Invalid.");
return -1;
}
if (definition->additionalinfo == NULL) {
@ -360,15 +360,13 @@ int getStartLine(TableNode *definition) {
TableNode *setStartLine(TableNode *tn, int start) {
if (tn == NULL) {
printdebug(
"passing in a NULL entry to setStartLine. "
"invalid");
printdebug("passing in a NULL entry to setStartLine. "
"invalid");
return undefined;
}
if (tn == undefined) {
printdebug(
"passing in an undefined entry to setStartLine. "
"invalid");
printdebug("passing in an undefined entry to setStartLine. "
"invalid");
return undefined;
}
tn->additionalinfo->FunDecAdInfo->startlinenumber = start;
@ -398,15 +396,13 @@ bool getAsKeyword(TableNode *definition) {
TableNode *setAsKeyword(TableNode *tn, bool as) {
if (tn == NULL) {
printdebug(
"passing in a NULL entry to setAsKeyword. "
"invalid");
printdebug("passing in a NULL entry to setAsKeyword. "
"invalid");
return undefined;
}
if (tn == undefined) {
printdebug(
"passing in an undefined entry to setAsKeyword. "
"invalid");
printdebug("passing in an undefined entry to setAsKeyword. "
"invalid");
return undefined;
}
tn->additionalinfo->FunDecAdInfo->regularoras = as;
@ -630,11 +626,13 @@ TableNode* funtypeprime;
*/
TableNode *populateTypeAndInfo(TableNode *tn, TableNode *type, AdInfo *info) {
if (tn == NULL) {
printdebug("passed in an NULL table node to populateTypeAndInfo.");
printdebug(
"passed in an NULL table node to populateTypeAndInfo.");
return undefined;
}
if (tn == undefined) {
printdebug("passed in an undefined table node to populateTypeAndInfo");
printdebug(
"passed in an undefined table node to populateTypeAndInfo");
return undefined;
}
if (type == NULL) {
@ -661,11 +659,13 @@ TableNode *populateTypeAndInfo(TableNode *tn, TableNode *type, AdInfo *info) {
int getAdInfoType(TableNode *tn) {
if (tn == NULL) {
printdebug("passing in NULL table entry to getAdInfoType. Invalid");
printdebug(
"passing in NULL table entry to getAdInfoType. Invalid");
return -1;
}
if (tn == undefined) {
printdebug("passing in undefined table entry to getAdInfoType. Invalid");
printdebug("passing in undefined table entry to getAdInfoType. "
"Invalid");
return -1;
}
if (tn->theType == NULL) {
@ -725,26 +725,27 @@ TableNode *CreateEntry(SymbolTable *table, TableNode *typeOf, char *id,
}
*/
if (typeOf == NULL) {
printdebug(
"Passing an NULL Type Node to Create Entry");
printdebug("Passing an NULL Type Node to Create Entry");
return undefined;
}
if (typeOf == undefined) {
printdebug(
"Passing an undefined Type Node to Create Entry");
printdebug("Passing an undefined Type Node to Create Entry");
return undefined;
}
TableNode *newEntry = (TableNode *)calloc(1, sizeof(TableNode));
newEntry->theType = typeOf /*topDef*/;
newEntry->theName = id;
newEntry->additionalinfo = ad;
if (table->entries == NULL) {
table->entries = newEntry;
printdebug("[CreateEntry] Adding %s to the symbol table", id);
return newEntry;
} else {
TableNode *oldEntry = table->entries;
table->entries = newEntry;
newEntry->next = oldEntry;
printdebug("[CreateEntry] Adding %s to the symbol table", id);
return newEntry;
}
}
@ -779,7 +780,7 @@ char *getName(TableNode *tn) {
return undefined->theName;
}
if (tn->theName == NULL) {
// printdebug("name of entry is currently NULL, undefined");
printdebug("name of entry is currently NULL, undefined");
return undefined->theName;
}
return tn->theName;
@ -803,15 +804,13 @@ int getColumn(SymbolTable *st) {
}
TableNode *addName(TableNode *tn, char *str) {
if (tn == NULL) {
printdebug(
"passed a Null table node to the addName "
"function. Invalid.");
printdebug("passed a Null table node to the addName "
"function. Invalid.");
return undefined;
}
if (tn == undefined) {
printdebug(
"passed an undefined table node to the addName "
"function. Invalid.");
printdebug("passed an undefined table node to the addName "
"function. Invalid.");
return undefined;
}
if (tn->theName != NULL) {
@ -1220,7 +1219,11 @@ ListOfTable *getChildren(SymbolTable *st) { return st->Children_Scope; }
SymbolTable *getFirstChild(ListOfTable *lt) { return lt->table; }
ListOfTable *getRestOfChildren(ListOfTable *lt) { return lt->next; }
TableNode *getFirstEntry(SymbolTable *st) { return st->entries; }
TableNode *getNextEntry(TableNode *tn) { return tn->next; }
// Segfaults when passed an invalid table node!
TableNode *getNextEntry(TableNode *tn) { return tn; }
// uncomment the below main function along with the headers above for a simple
// standalone test of table and entry creation