diff --git a/src/symbol_table_parse.c b/src/symbol_table_parse.c index 60b336cf1d1f4a0b866e36947acd76347f4af861..8f83643e4793493b62291a48715d5365131c52e4 100644 --- a/src/symbol_table_parse.c +++ b/src/symbol_table_parse.c @@ -160,7 +160,7 @@ int mcc_symbol_table_parse_statement( } else { return 1; } - case MCC_AST_STATEMENT_TYPE_IF:; + case MCC_AST_STATEMENT_TYPE_IF: if(mcc_symbol_table_validate_expression( statement->if_condition, symbol_table, ec) == 0) { if (mcc_symbol_table_validate_condition_to_type_bool( diff --git a/src/symbol_table_validate.c b/src/symbol_table_validate.c index a602353b2193ab1bf3897aac935090e5fe4590fe..a69572044a7e872ccd7f9a7a2f38a40f377854a7 100644 --- a/src/symbol_table_validate.c +++ b/src/symbol_table_validate.c @@ -340,7 +340,7 @@ int binary_operator_contains_illegal_array( struct mcc_symbol_table *symbol_table, struct mcc_symbol_table_error_collector *ec ) { - if (expression -> identifier != NULL) { + if (expression -> type == MCC_AST_EXPRESSION_TYPE_IDENTIFIER && expression -> identifier != NULL) { struct mcc_symbol *s = mcc_symbol_table_get_symbol(symbol_table, expression->identifier->i_value); // this is a binary op with an array without index provided @@ -371,8 +371,7 @@ int mcc_symbol_table_validate_binary_operator( } int illegal_array_op_lhs = binary_operator_contains_illegal_array(expression->lhs, symbol_table, ec); - int illegal_array_op_rhs = binary_operator_contains_illegal_array(expression->lhs, symbol_table, ec); - + int illegal_array_op_rhs = binary_operator_contains_illegal_array(expression->rhs, symbol_table, ec); if(illegal_array_op_lhs || illegal_array_op_rhs) { return 1; } @@ -437,7 +436,6 @@ int mcc_symbol_table_validate_expression( assert(symbol_table); assert(ec); - switch(expression->type) { case MCC_AST_EXPRESSION_TYPE_IDENTIFIER: return mcc_symbol_table_validate_identifier(expression->identifier, symbol_table, ec);