finished more type check stuff and some loops

This commit is contained in:
Partho
2025-04-30 02:27:52 -04:00
parent 6d26ba25b0
commit f2affd8a55
3 changed files with 16 additions and 9 deletions

View File

@ -619,8 +619,8 @@ simple_statement:
else {
printf("%d\n",getAdInfoType((TableNode*)$1));
printf("%d\n",getAdInfoType((TableNode*)$3));
//printf("%d\n",getAdInfoType((TableNode*)$1));
//printf("%d\n",getAdInfoType((TableNode*)$3));
//printf("%d\n",getAdInfoType((TableNode*)$1));
//printf("%d\n",getAdInfoType((TableNode*)$3));
throw_error(ERROR_TYPE, "Assignable Assign Expression - Object %s of type %s != Object %s of type %s", getName(node), getType(node), getName((TableNode*)$3), getType((TableNode*)$3));
@ -662,7 +662,8 @@ ablock:
argument_list:
//NEED TO EMIT PARAMETERS HERE. MAYBE USE STACK STRUCTURE
expression{
TableNode* arg = CreateEntry(cur, getAdInfoType((TableNode*)$1), getTypeEntry((TableNode*)$1), arg_var_gen(), NULL);
char* name = arg_var_gen();
TableNode* arg = CreateEntry(cur, getAdInfoType((TableNode*)$1), getTypeEntry((TableNode*)$1), name, NULL);
emit_parameter(tn_or_const(NODE,arg));
//S_Push(stack,current);
//emit_detach();
@ -673,8 +674,9 @@ argument_list:
| expression
{
TableNode* arg = CreateEntry(cur, getAdInfoType((TableNode*)$1), getTypeEntry((TableNode*)$1), arg_var_gen(), NULL);
{
char* name = arg_var_gen();
TableNode* arg = CreateEntry(cur, getAdInfoType((TableNode*)$1), getTypeEntry((TableNode*)$1), name, NULL);
emit_parameter(tn_or_const(NODE,arg));
//S_Push(stack,current);
//emit_detach();
@ -949,7 +951,7 @@ assignable:
}else{
TableNode* param_arg_type = getFirstEntry(getRecList(expected));
TableNode* arg_given = getFirstEntry(cur);
while(arg_given != NULL && getName(arg_given)[0]!='&'){
while(arg_given != NULL && arg_given != undefined && getName(arg_given)[0]!='&'){
arg_given = getNextEntry(arg_given);
}
if(getTypeEntry(arg_given) != getTypeEntry(param_arg_type)){
@ -957,7 +959,7 @@ assignable:
}
param_arg_type = getNextEntry(param_arg_type);
arg_given = getNextEntry(arg_given);
while(arg_given != NULL && param_arg_type != NULL){
while(arg_given != NULL && arg_given != undefined && param_arg_type != NULL){
while(arg_given != NULL && getName(arg_given)[0]!='&'){
arg_given = getNextEntry(arg_given);
}
@ -970,7 +972,7 @@ assignable:
}
}else{
TableNode*actual_instance = getFirstEntry(cur);
while(actual_instance != NULL && getName(actual_instance)[0] !='&'){
while(actual_instance != NULL && actual_instance != undefined && getName(actual_instance)[0] !='&'){
actual_instance = getNextEntry(actual_instance);
}
if(actual_instance == NULL){