fixed grammar issues with reserve and release
This commit is contained in:
@ -687,7 +687,8 @@ simple_statement:
|
|||||||
//updating context for reserve/release
|
//updating context for reserve/release
|
||||||
if(getAdInfoType((TableNode*)$1) == TYPE_ARRAY || getAdInfoType((TableNode*)$1) == TYPE_FUNCTION_DECLARATION){
|
if(getAdInfoType((TableNode*)$1) == TYPE_ARRAY || getAdInfoType((TableNode*)$1) == TYPE_FUNCTION_DECLARATION){
|
||||||
PushContext(getTypeEntry((TableNode*)$1));
|
PushContext(getTypeEntry((TableNode*)$1));
|
||||||
printdebug("pushed %s to context stack in simple statement assignable rule\n",getName(getTypeEntry((TableNode*)$1)));
|
|
||||||
|
printf("pushed %s to context stack in simple statement assignable rule\n",getName(getContextTypeEntry(context_head)));
|
||||||
}
|
}
|
||||||
S_Push(TrueList, S_Init(), 0);
|
S_Push(TrueList, S_Init(), 0);
|
||||||
S_Push(FalseList, S_Init(), 0);
|
S_Push(FalseList, S_Init(), 0);
|
||||||
@ -1196,14 +1197,23 @@ expression:
|
|||||||
emit_reserve(node, tn_or_const(NODE,$2));
|
emit_reserve(node, tn_or_const(NODE,$2));
|
||||||
$$ = node;
|
$$ = node;
|
||||||
}
|
}
|
||||||
if(((getTypeEntry((TableNode*)$2)) == getArrType(getContextTypeEntry(context_head)))
|
else if(((getTypeEntry((TableNode*)$2)) == getArrType(getContextTypeEntry(context_head)))
|
||||||
&& (getAdInfoType(getContextTypeEntry(context_head)) == TYPE_ARRAY_TYPE)){
|
&& (getAdInfoType(getContextTypeEntry(context_head)) == TYPE_ARRAY_TYPE)){
|
||||||
char* temp = temp_var_gen();
|
char* temp = temp_var_gen();
|
||||||
//does this have integer?
|
//does this have integer?
|
||||||
TableNode* node = CreateEntry(cur,TYPE_ARRAY, getContextTypeEntry(context_head), temp, NULL);
|
TableNode* node = CreateEntry(cur,TYPE_ARRAY, getContextTypeEntry(context_head), temp, NULL);
|
||||||
emit_reserve(node, tn_or_const(NODE,$2));
|
emit_reserve(node, tn_or_const(NODE,$2));
|
||||||
$$ = node;
|
$$ = node;
|
||||||
}else{
|
}else if(((getTypeEntry((TableNode*)$2)) == getArrType(getContextTypeEntry(context_head)))
|
||||||
|
&& (getAdInfoType(getContextTypeEntry(context_head)) == TYPE_ARRAY_TYPE)){
|
||||||
|
char* temp = temp_var_gen();
|
||||||
|
//does this have integer?
|
||||||
|
TableNode* node = CreateEntry(cur,TYPE_ARRAY, getContextTypeEntry(context_head), temp, NULL);
|
||||||
|
emit_reserve(node, tn_or_const(NODE,$2));
|
||||||
|
$$ = node;
|
||||||
|
}else{
|
||||||
|
printf("%s on right %s on left\n",getType((TableNode*)$2),getName(getArrType(getContextTypeEntry(context_head))));
|
||||||
|
printf("%s is the name of the left\n",getName(getContextTypeEntry(context_head)));
|
||||||
$$ = undefined;
|
$$ = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1218,7 +1228,7 @@ expression:
|
|||||||
emit_release((TableNode*)$2);
|
emit_release((TableNode*)$2);
|
||||||
$$ = node;
|
$$ = node;
|
||||||
}
|
}
|
||||||
if(((getTypeEntry((TableNode*)$2)) == getArrType(getContextTypeEntry(context_head)))
|
else if(((getTypeEntry((TableNode*)$2)) == getArrType(getContextTypeEntry(context_head)))
|
||||||
&& (getAdInfoType(getContextTypeEntry(context_head)) == TYPE_ARRAY_TYPE)){
|
&& (getAdInfoType(getContextTypeEntry(context_head)) == TYPE_ARRAY_TYPE)){
|
||||||
char* temp = temp_var_gen();
|
char* temp = temp_var_gen();
|
||||||
//does this have integer?
|
//does this have integer?
|
||||||
|
@ -283,7 +283,7 @@ TableNode *getContextTypeEntry(Context_stack *cs) {
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
TableNode* tn = cs->typeToCompare;
|
TableNode* tn = cs->typeToCompare;
|
||||||
return NULL;
|
return tn;
|
||||||
}
|
}
|
||||||
Constant_Stack *Pop() {
|
Constant_Stack *Pop() {
|
||||||
if (head == NULL) {
|
if (head == NULL) {
|
||||||
@ -1056,31 +1056,31 @@ SymbolTable *init(SymbolTable *start) {
|
|||||||
chara = (TableNode *)calloc(1, sizeof(TableNode));
|
chara = (TableNode *)calloc(1, sizeof(TableNode));
|
||||||
stri = (TableNode *)calloc(1, sizeof(TableNode));
|
stri = (TableNode *)calloc(1, sizeof(TableNode));
|
||||||
boo = (TableNode *)calloc(1, sizeof(TableNode));
|
boo = (TableNode *)calloc(1, sizeof(TableNode));
|
||||||
TableNode *reservetype = (TableNode *)calloc(1, sizeof(TableNode));
|
//TableNode *reservetype = (TableNode *)calloc(1, sizeof(TableNode));
|
||||||
TableNode *reserve = (TableNode *)calloc(1, sizeof(TableNode));
|
//TableNode *reserve = (TableNode *)calloc(1, sizeof(TableNode));
|
||||||
TableNode *releasetype = (TableNode *)calloc(1, sizeof(TableNode));
|
//TableNode *releasetype = (TableNode *)calloc(1, sizeof(TableNode));
|
||||||
TableNode *release = (TableNode *)calloc(1, sizeof(TableNode));
|
//TableNode *release = (TableNode *)calloc(1, sizeof(TableNode));
|
||||||
// TableNode* arr = (TableNode*)malloc(sizeof(SymbolTable));
|
// TableNode* arr = (TableNode*)malloc(sizeof(SymbolTable));
|
||||||
start->entries = integ;
|
start->entries = integ;
|
||||||
integ->next = addr;
|
integ->next = addr;
|
||||||
addr->next = chara;
|
addr->next = chara;
|
||||||
chara->next = stri;
|
chara->next = stri;
|
||||||
stri->next = boo;
|
stri->next = boo;
|
||||||
boo->next = reservetype;
|
boo->next = NULL;//reservetype;
|
||||||
reservetype->next = reserve;
|
//reservetype->next = reserve;
|
||||||
reserve->next = releasetype;
|
//reserve->next = releasetype;
|
||||||
releasetype->next = release;
|
//releasetype->next = release;
|
||||||
release->next = NULL;
|
//release->next = NULL;
|
||||||
|
|
||||||
integ->theName = "integer";
|
integ->theName = "integer";
|
||||||
addr->theName = "address";
|
addr->theName = "address";
|
||||||
chara->theName = "character";
|
chara->theName = "character";
|
||||||
boo->theName = "Boolean";
|
boo->theName = "Boolean";
|
||||||
stri->theName = "string";
|
stri->theName = "string";
|
||||||
reserve->theName = "reserve";
|
//reserve->theName = "reserve";
|
||||||
reservetype->theName = "reserve type";
|
//reservetype->theName = "reserve type";
|
||||||
releasetype->theName = "release type";
|
//releasetype->theName = "release type";
|
||||||
release->theName = "release";
|
//release->theName = "release";
|
||||||
// arr->theName= "array"
|
// arr->theName= "array"
|
||||||
|
|
||||||
// root TableNode that all are pointing to but not in table
|
// root TableNode that all are pointing to but not in table
|
||||||
@ -1147,10 +1147,10 @@ SymbolTable *init(SymbolTable *start) {
|
|||||||
chara->theType = prime;
|
chara->theType = prime;
|
||||||
stri->theType = arrayprim;
|
stri->theType = arrayprim;
|
||||||
boo->theType = prime;
|
boo->theType = prime;
|
||||||
reserve->theType = reservetype;
|
//reserve->theType = reservetype;
|
||||||
reservetype->theType = funtypeprime;
|
//reservetype->theType = funtypeprime;
|
||||||
releasetype->theType = funtypeprime;
|
//releasetype->theType = funtypeprime;
|
||||||
release->theType = releasetype;
|
//release->theType = releasetype;
|
||||||
|
|
||||||
// arr->theType=arrayprim;
|
// arr->theType=arrayprim;
|
||||||
|
|
||||||
@ -1164,20 +1164,20 @@ SymbolTable *init(SymbolTable *start) {
|
|||||||
chara->additionalinfo = CreatePrimitiveInfo(SIZE_CHAR);
|
chara->additionalinfo = CreatePrimitiveInfo(SIZE_CHAR);
|
||||||
stri->additionalinfo = CreateArrayInfo(1, chara);
|
stri->additionalinfo = CreateArrayInfo(1, chara);
|
||||||
boo->additionalinfo = CreatePrimitiveInfo(SIZE_BOOL);
|
boo->additionalinfo = CreatePrimitiveInfo(SIZE_BOOL);
|
||||||
reserve->additionalinfo = CreateFunctionDeclarationInfo(0, false, NULL);
|
//reserve->additionalinfo = CreateFunctionDeclarationInfo(0, false, NULL);
|
||||||
reservetype->additionalinfo = CreateFunctionTypeInfo(integ, addr);
|
//reservetype->additionalinfo = CreateFunctionTypeInfo(integ, addr);
|
||||||
releasetype->additionalinfo = CreateFunctionTypeInfo(addr, integ);
|
//releasetype->additionalinfo = CreateFunctionTypeInfo(addr, integ);
|
||||||
release->additionalinfo = CreateFunctionDeclarationInfo(0, false, NULL);
|
//release->additionalinfo = CreateFunctionDeclarationInfo(0, false, NULL);
|
||||||
|
|
||||||
integ->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for integ
|
integ->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for integ
|
||||||
addr->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for addr
|
addr->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for addr
|
||||||
chara->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for chara
|
chara->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for chara
|
||||||
stri->tag = TYPE_ARRAY_TYPE; // explicitly set the type for stri
|
stri->tag = TYPE_ARRAY_TYPE; // explicitly set the type for stri
|
||||||
boo->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for boo
|
boo->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for boo
|
||||||
reserve->tag = TYPE_FUNCTION_DECLARATION;
|
//reserve->tag = TYPE_FUNCTION_DECLARATION;
|
||||||
reservetype->tag = TYPE_FUNCTION_TYPE;
|
//reservetype->tag = TYPE_FUNCTION_TYPE;
|
||||||
releasetype->tag = TYPE_FUNCTION_TYPE;
|
//releasetype->tag = TYPE_FUNCTION_TYPE;
|
||||||
release->tag = TYPE_FUNCTION_DECLARATION;
|
//release->tag = TYPE_FUNCTION_DECLARATION;
|
||||||
// addr->additionalinfo = CreatePrimitiveInfo(8);
|
// addr->additionalinfo = CreatePrimitiveInfo(8);
|
||||||
|
|
||||||
start->Line_Number = 1;
|
start->Line_Number = 1;
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
#include "std.alpha"
|
#include "../../library/std.alpha"
|
||||||
|
|
||||||
type main: string -> integer
|
type main: string -> integer
|
||||||
function entry: main
|
function entry: main
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user