From 960cb7034af7240036a969a59f21e28e63a86df2 Mon Sep 17 00:00:00 2001 From: Dale Weiler Date: Wed, 31 Jul 2013 18:53:00 +0000 Subject: [PATCH 1/1] The problem was so subtle --- fold.c | 3 ++- parser.c | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/fold.c b/fold.c index ad264e7..884e039 100644 --- a/fold.c +++ b/fold.c @@ -383,7 +383,7 @@ static GMQCC_INLINE ast_expression *fold_op_sub(fold_t *fold, ast_value *a, ast_ static GMQCC_INLINE ast_expression *fold_op_mul(fold_t *fold, ast_value *a, ast_value *b) { if (isfloat(a)) { - if (isfloat(b)) { + if (isvector(b)) { if (fold_can_2(a, b)) return fold_constgen_vector(fold, vec3_mulvf(fold_immvalue_vector(b), fold_immvalue_float(a))); } else { @@ -585,5 +585,6 @@ ast_expression *fold_op(fold_t *fold, const oper_info *info, ast_expression **op case opid2('=','='): return fold_op_cmp (fold, a, b, false); case opid2('~','P'): return fold_op_bnot (fold, a); } + compile_error(fold_ctx(fold), "internal error: attempted to constant for unsupported operator"); return NULL; } diff --git a/parser.c b/parser.c index 1661390..e8760bb 100644 --- a/parser.c +++ b/parser.c @@ -506,9 +506,11 @@ static bool parser_sy_apply_operator(parser_t *parser, shunt *sy) if (exprs[0]->vtype != exprs[1]->vtype || (exprs[0]->vtype != TYPE_VECTOR && exprs[0]->vtype != TYPE_FLOAT) ) { - compile_error(ctx, "invalid types used in expression: cannot add type %s and %s", + compile_error(ctx, "invalid types used in expression: cannot add type %s and %s (%s %s)", type_name[exprs[0]->vtype], - type_name[exprs[1]->vtype]); + type_name[exprs[1]->vtype], + asvalue[0]->name, + asvalue[1]->name); return false; } if (!(out = fold_op(parser->fold, op, exprs))) { -- 2.39.2