diff --git a/parser.c b/parser.c index 6e72ba1..27e7f70 100644 --- a/parser.c +++ b/parser.c @@ -431,13 +431,9 @@ static bool parser_sy_pop(parser_t *parser, shunt *sy) return true; case opid1('+'): - if (exprs[0]->expression.vtype != exprs[1]->expression.vtype) { - parseerror(parser, "invalid types used in expression: cannot add type %s and %s", - type_name[exprs[0]->expression.vtype], - type_name[exprs[1]->expression.vtype]); - return false; - } - if (exprs[0]->expression.vtype != TYPE_VECTOR && exprs[0]->expression.vtype != TYPE_FLOAT) { + if (exprs[0]->expression.vtype != exprs[1]->expression.vtype || + (exprs[0]->expression.vtype != TYPE_VECTOR && exprs[0]->expression.vtype != TYPE_FLOAT) ) + { parseerror(parser, "invalid types used in expression: cannot add type %s and %s", type_name[exprs[0]->expression.vtype], type_name[exprs[1]->expression.vtype]); @@ -458,18 +454,14 @@ static bool parser_sy_pop(parser_t *parser, shunt *sy) }; break; case opid1('-'): - if (exprs[0]->expression.vtype != exprs[1]->expression.vtype) { + if (exprs[0]->expression.vtype != exprs[1]->expression.vtype || + (exprs[0]->expression.vtype != TYPE_VECTOR && exprs[0]->expression.vtype != TYPE_FLOAT) ) + { parseerror(parser, "invalid types used in expression: cannot subtract type %s from %s", type_name[exprs[1]->expression.vtype], type_name[exprs[0]->expression.vtype]); return false; } - if (exprs[0]->expression.vtype != TYPE_VECTOR && exprs[0]->expression.vtype != TYPE_FLOAT) { - parseerror(parser, "invalid types used in expression: cannot subtract type %s from %s", - type_name[exprs[0]->expression.vtype], - type_name[exprs[1]->expression.vtype]); - return false; - } switch (exprs[0]->expression.vtype) { case TYPE_FLOAT: out = (ast_expression*)ast_binary_new(ctx, INSTR_SUB_F, exprs[0], exprs[1]);