conditional-expression is no longer recursive

This commit is contained in:
Pierre Pronchery 2008-06-12 05:40:16 +00:00
parent c44c0e4bd6
commit 5689b654bc

View File

@ -1072,10 +1072,6 @@ static int _postfix_expr(C99 * c99)
if(!_parse_is_code(c99, C99_CODE_OPERATOR_RPAREN)) if(!_parse_is_code(c99, C99_CODE_OPERATOR_RPAREN))
ret |= _argument_expr_list(c99); ret |= _argument_expr_list(c99);
ret |= _parse_check(c99, C99_CODE_OPERATOR_RPAREN); ret |= _parse_check(c99, C99_CODE_OPERATOR_RPAREN);
#if 0
if(code_function_call(c99->code, c99->identifier) != 0)
ret |= _parse_error(c99, "%s", error_get());
#endif
} }
else if(code == C99_CODE_OPERATOR_DOT else if(code == C99_CODE_OPERATOR_DOT
|| code == C99_CODE_OPERATOR_MGREATER) || code == C99_CODE_OPERATOR_MGREATER)
@ -1209,19 +1205,19 @@ static int _assignment_operator(C99 * c99)
/* conditional-expr */ /* conditional-expr */
static int _conditional_expr(C99 * c99) static int _conditional_expr(C99 * c99)
/* logical-OR-expr [ "?" expr ":" conditional-expr ] */ /* logical-OR-expr [ "?" expression ":" conditional-expr ] */
{ {
int ret; int ret;
DEBUG_GRAMMAR(); DEBUG_GRAMMAR();
ret = _logical_or_expr(c99); ret = _logical_or_expr(c99);
if(_parse_is_code(c99, C99_CODE_OPERATOR_QUESTION)) while(_parse_is_code(c99, C99_CODE_OPERATOR_QUESTION))
{ {
ret |= scan(c99); ret |= scan(c99);
ret |= _parse_check_set(c99, c99set_expression, "expression", ret |= _parse_check_set(c99, c99set_expression, "expression",
_expression); _expression);
ret |= _parse_check(c99, C99_CODE_OPERATOR_COLON); ret |= _parse_check(c99, C99_CODE_OPERATOR_COLON);
ret |= _conditional_expr(c99); ret |= _logical_or_expr(c99);
} }
return ret; return ret;
} }
@ -1582,7 +1578,8 @@ static int _expression(C99 * c99)
while(_parse_is_code(c99, C99_CODE_COMMA)) while(_parse_is_code(c99, C99_CODE_COMMA))
{ {
scan(c99); scan(c99);
ret |= _assignment_expr(c99); ret |= _parse_check_set(c99, c99set_assignment_expr,
"assignment expression", _assignment_expr);
} }
return ret; return ret;
} }