get rid of more duplicate code

This commit is contained in:
Wolfgang (Blub) Bumiller 2012-08-14 22:34:20 +02:00
parent de4fe00d2f
commit 9ed9a0c669

View file

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