From 9f151e82dfd7573d28f5c1f505d5ec8a42b1fa49 Mon Sep 17 00:00:00 2001 From: "Wolfgang (Blub) Bumiller" Date: Mon, 13 Aug 2012 15:09:27 +0200 Subject: [PATCH] Check types on + and - operations --- parser.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/parser.c b/parser.c index 973ab4b..4a46b56 100644 --- a/parser.c +++ b/parser.c @@ -410,6 +410,12 @@ static bool parser_sy_pop(parser_t *parser, shunt *sy) type_name[exprs[1]->expression.vtype]); return false; } + if (exprs[0]->expression.vteyp != TYPE_VECTOR && exprs[0]->expression.vtype != TYPE_FLOAT) { + parseerror(parser, "type error: %s - %s not defined", + 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_ADD_F, exprs[0], exprs[1]); @@ -431,6 +437,12 @@ static bool parser_sy_pop(parser_t *parser, shunt *sy) type_name[exprs[0]->expression.vtype]); return false; } + if (exprs[0]->expression.vteyp != TYPE_VECTOR && exprs[0]->expression.vtype != TYPE_FLOAT) { + parseerror(parser, "type error: %s - %s not defined", + 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]); -- 2.39.2