Skip to content
Snippets Groups Projects
Commit 5c1c676e authored by krf41037's avatar krf41037
Browse files

Fix if check - missing return in parent fixes #1

parent 192f25dd
No related branches found
No related tags found
No related merge requests found
......@@ -124,6 +124,7 @@ int mcc_symbol_table_validate_statement_return(
struct mcc_ast_statement *statement,
enum mcc_ast_data_type return_type,
struct mcc_symbol_table *symbol_table,
struct mcc_ast_function *func_def,
struct mcc_symbol_table_error_collector *ec
);
......
......@@ -239,6 +239,7 @@ int mcc_symbol_table_parse_function(
func_def -> statement,
func_def -> return_type,
sub_table,
func_def,
ec
);
}
......
......@@ -621,6 +621,7 @@ int mcc_symbol_table_validate_statement_return(
struct mcc_ast_statement *statement,
enum mcc_ast_data_type return_type,
struct mcc_symbol_table *symbol_table,
struct mcc_ast_function *func_def,
struct mcc_symbol_table_error_collector *ec) {
struct mcc_ast_statement_list *st_l = NULL;
struct mcc_ast_statement_list *next = NULL;
......@@ -646,6 +647,7 @@ int mcc_symbol_table_validate_statement_return(
st_l->statement->while_stmt,
return_type,
symbol_table,
func_def,
ec
);
} else if(st_l->statement->type == MCC_AST_STATEMENT_TYPE_IF) {
......@@ -653,6 +655,7 @@ int mcc_symbol_table_validate_statement_return(
st_l->statement->if_stmt,
return_type,
symbol_table,
func_def,
ec
);
......@@ -662,12 +665,24 @@ int mcc_symbol_table_validate_statement_return(
st_l->statement->else_stmt,
return_type,
symbol_table,
func_def,
ec
);
}else{
return valid_if;
if(symbol_table->parent != NULL){
struct mcc_symbol_table *parent = symbol_table->parent;
int result = mcc_symbol_table_validate_statement_return(
func_def -> statement,
return_type,
parent,
func_def,
ec
);
printf("\n Result of parent return %d\n",result);
}
}
return valid_if | valid_else;
} else {
......
......@@ -29,8 +29,25 @@ void mcc_tac_parse_expression(struct mcc_ast_expression *expression, struct mcc_
switch (expression -> type) {
case MCC_AST_EXPRESSION_TYPE_IDENTIFIER:
char *temp =
break;
case MCC_AST_EXPRESSION_TYPE_LITERAL :
break;
case MCC_AST_EXPRESSION_TYPE_CALL_EXPRESSION :
break;
case MCC_AST_EXPRESSION_TYPE_UNARY_OP :
//struct mcc_tac_entry *tac_unary = mcc_tac_new_entry();
break;
case MCC_AST_EXPRESSION_TYPE_BINARY_OP :
break;
case MCC_AST_EXPRESSION_TYPE_PARENTH :
break;
case MCC_AST_EXPRESSION_TYPE_BRACKET :
default:
return;
}
......@@ -68,6 +85,8 @@ struct mcc_tac *mcc_tac_parse_statement(struct mcc_ast_statement *statement, str
mcc_tac_parse_statement_list(statement -> statement_list, tac);
case MCC_AST_STATEMENT_TYPE_IF:
return NULL;
case MCC_AST_STATEMENT_TYPE_EXPRESSION:
mcc_tac_parse_expression(statement ->expression, tac);
}
}
......
......@@ -3,10 +3,8 @@ int main() {
if (1 < 2) {
int a;
{
int a;
}
return 2;
}
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment