From 614fcb12f5989ba62894ee8a09b396d6fd0af37b Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Thu, 3 Jan 2013 12:56:26 +0100 Subject: [PATCH] check for TYPE_NOEXPR in general when applying an operator --- parser.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/parser.c b/parser.c index 14b4c81..f49184d 100644 --- a/parser.c +++ b/parser.c @@ -549,6 +549,16 @@ static bool parser_sy_apply_operator(parser_t *parser, shunt *sy) exprs[i] = sy->out[vec_size(sy->out)+i].out; blocks[i] = sy->out[vec_size(sy->out)+i].block; asvalue[i] = (ast_value*)exprs[i]; + + if (exprs[i]->expression.vtype == TYPE_NOEXPR && + !(i != 0 && op->id == opid2('?',':'))) + { + if (ast_istype(exprs[i], ast_label)) + compile_error(ast_ctx(exprs[i]), "expected expression, got an unknown identifier"); + else + compile_error(ast_ctx(exprs[i]), "not an expression"); + (void)!compile_warning(ast_ctx(exprs[i]), WARN_DEBUG, "expression %u\n", (unsigned int)i); + } } if (blocks[0] && !vec_size(blocks[0]->exprs) && op->id != opid1(',')) {