The problem was so subtle

This commit is contained in:
Dale Weiler 2013-07-31 18:53:00 +00:00
parent 3fa74da2b5
commit 960cb7034a
2 changed files with 6 additions and 3 deletions

3
fold.c
View file

@ -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) { static GMQCC_INLINE ast_expression *fold_op_mul(fold_t *fold, ast_value *a, ast_value *b) {
if (isfloat(a)) { if (isfloat(a)) {
if (isfloat(b)) { if (isvector(b)) {
if (fold_can_2(a, b)) if (fold_can_2(a, b))
return fold_constgen_vector(fold, vec3_mulvf(fold_immvalue_vector(b), fold_immvalue_float(a))); return fold_constgen_vector(fold, vec3_mulvf(fold_immvalue_vector(b), fold_immvalue_float(a)));
} else { } 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('=','='): return fold_op_cmp (fold, a, b, false);
case opid2('~','P'): return fold_op_bnot (fold, a); case opid2('~','P'): return fold_op_bnot (fold, a);
} }
compile_error(fold_ctx(fold), "internal error: attempted to constant for unsupported operator");
return NULL; return NULL;
} }

View file

@ -506,9 +506,11 @@ static bool parser_sy_apply_operator(parser_t *parser, shunt *sy)
if (exprs[0]->vtype != exprs[1]->vtype || if (exprs[0]->vtype != exprs[1]->vtype ||
(exprs[0]->vtype != TYPE_VECTOR && exprs[0]->vtype != TYPE_FLOAT) ) (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[0]->vtype],
type_name[exprs[1]->vtype]); type_name[exprs[1]->vtype],
asvalue[0]->name,
asvalue[1]->name);
return false; return false;
} }
if (!(out = fold_op(parser->fold, op, exprs))) { if (!(out = fold_op(parser->fold, op, exprs))) {