From: Wolfgang Bumiller Date: Thu, 29 Aug 2013 06:26:17 +0000 (+0200) Subject: also warn about mixing logical and/or operations without parenthesis X-Git-Tag: 0.3.5~118^2~1 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=fa468e06733d2860082f7c3652aa464e96b13586;p=xonotic%2Fgmqcc.git also warn about mixing logical and/or operations without parenthesis --- diff --git a/parser.c b/parser.c index 92301d4..e086449 100644 --- a/parser.c +++ b/parser.c @@ -1629,7 +1629,7 @@ static ast_expression* parse_expression_leave(parser_t *parser, bool stopatcomma /* only warn once about an assignment in a truth value because the current code * would trigger twice on: if(a = b && ...), once for the if-truth-value, once for the && part */ - bool warn_truthvalue = true; + bool warn_parenthesis = true; /* count the parens because an if starts with one, so the * end of a condition is an unmatched closing paren @@ -1703,24 +1703,30 @@ static ast_expression* parse_expression_leave(parser_t *parser, bool stopatcomma (x) == opid2('|','=') || \ (x) == opid3('&','~','=') \ ) - if (warn_truthvalue) { + if (warn_parenthesis) { if ( (olast && IsAssignOp(olast->id) && (op->id == opid2('&','&') || op->id == opid2('|','|'))) || (olast && IsAssignOp(op->id) && (olast->id == opid2('&','&') || olast->id == opid2('|','|'))) || (truthvalue && !vec_size(sy.paren) && IsAssignOp(op->id)) ) { (void)!parsewarning(parser, WARN_PARENTHESIS, "suggesting parenthesis around assignment used as truth value"); - warn_truthvalue = false; + warn_parenthesis = false; } - } - if (olast && - olast->id != op->id && - (op->id == opid1('&') || op->id == opid1('|') || op->id == opid1('^')) && - (olast->id == opid1('&') || olast->id == opid1('|') || olast->id == opid1('^'))) - { - (void)!parsewarning(parser, WARN_PARENTHESIS, "suggesting parenthesis around bitwise operations"); - warn_truthvalue = false; + if (olast && olast->id != op->id) { + if ((op->id == opid1('&') || op->id == opid1('|') || op->id == opid1('^')) && + (olast->id == opid1('&') || olast->id == opid1('|') || olast->id == opid1('^'))) + { + (void)!parsewarning(parser, WARN_PARENTHESIS, "suggesting parenthesis around bitwise operations"); + warn_parenthesis = false; + } + else if ((op->id == opid2('&','&') || op->id == opid2('|','|')) && + (olast->id == opid2('&','&') || olast->id == opid2('|','|'))) + { + (void)!parsewarning(parser, WARN_PARENTHESIS, "suggesting parenthesis around logical operations"); + warn_parenthesis = false; + } + } } while (olast && (