Fixed more segfaults

This commit is contained in:
Pierre Pronchery 2008-03-14 02:09:03 +00:00
parent d1fce35c7f
commit e0316a7f12

View File

@ -804,13 +804,11 @@ static int _assignment_expr(C99 * c99)
token_get_string(c99->token)); token_get_string(c99->token));
#endif #endif
/* FIXME heavily suspect conflict between unary and conditional */ /* FIXME heavily suspect conflict between unary and conditional */
#if 0
while(token_in_set(c99->token, c99set_unary_expr)) while(token_in_set(c99->token, c99set_unary_expr))
{ {
ret |= _unary_expr(c99); ret |= _unary_expr(c99);
ret |= _assignment_operator(c99); ret |= _assignment_operator(c99);
} }
#endif
ret |= _conditional_expr(c99); ret |= _conditional_expr(c99);
return ret; return ret;
} }
@ -1179,9 +1177,10 @@ static int _equality_expr(C99 * c99)
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
ret = _relational_expr(c99); ret = _relational_expr(c99);
/* FIXME may segfault upon EOF (c99->token is NULL) */ while(c99->token != NULL
while((code = token_get_code(c99->token)) == C99_CODE_OPERATOR_DEQUALS && ((code = token_get_code(c99->token))
|| code == C99_CODE_OPERATOR_NEQUALS) == C99_CODE_OPERATOR_DEQUALS
|| code == C99_CODE_OPERATOR_NEQUALS))
{ {
ret |= c99_scan(c99); ret |= c99_scan(c99);
ret |= _relational_expr(c99); ret |= _relational_expr(c99);
@ -1201,10 +1200,12 @@ static int _relational_expr(C99 * c99)
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
ret = _shift_expr(c99); ret = _shift_expr(c99);
while((code = token_get_code(c99->token)) == C99_CODE_OPERATOR_LESS while(c99->token != NULL
&& ((code = token_get_code(c99->token))
== C99_CODE_OPERATOR_LESS
|| code == C99_CODE_OPERATOR_GREATER || code == C99_CODE_OPERATOR_GREATER
|| code == C99_CODE_OPERATOR_LEQUALS || code == C99_CODE_OPERATOR_LEQUALS
|| code == C99_CODE_OPERATOR_GEQUALS) || code == C99_CODE_OPERATOR_GEQUALS))
{ {
ret |= c99_scan(c99); ret |= c99_scan(c99);
ret |= _shift_expr(c99); ret |= _shift_expr(c99);
@ -1224,8 +1225,10 @@ static int _shift_expr(C99 * c99)
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
ret = _additive_expr(c99); ret = _additive_expr(c99);
while((code = token_get_code(c99->token)) == C99_CODE_OPERATOR_DLESS while(c99->token != NULL
|| code == C99_CODE_OPERATOR_DGREATER) && ((code = token_get_code(c99->token))
== C99_CODE_OPERATOR_DLESS
|| code == C99_CODE_OPERATOR_DGREATER))
{ {
ret |= c99_scan(c99); ret |= c99_scan(c99);
ret |= _additive_expr(c99); ret |= _additive_expr(c99);
@ -1245,8 +1248,10 @@ static int _additive_expr(C99 * c99)
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
ret = _multiplicative_expr(c99); ret = _multiplicative_expr(c99);
while((code = token_get_code(c99->token)) == C99_CODE_OPERATOR_PLUS while(c99->token != NULL
|| code == C99_CODE_OPERATOR_MINUS) && ((code = token_get_code(c99->token))
== C99_CODE_OPERATOR_PLUS
|| code == C99_CODE_OPERATOR_MINUS))
{ {
ret |= c99_scan(c99); ret |= c99_scan(c99);
ret |= _multiplicative_expr(c99); ret |= _multiplicative_expr(c99);
@ -1266,9 +1271,11 @@ static int _multiplicative_expr(C99 * c99)
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
ret = _cast_expr(c99); ret = _cast_expr(c99);
while((code = token_get_code(c99->token)) == C99_CODE_OPERATOR_TIMES while(c99->token != NULL
&& ((code = token_get_code(c99->token))
== C99_CODE_OPERATOR_TIMES
|| code == C99_CODE_OPERATOR_DIVIDE || code == C99_CODE_OPERATOR_DIVIDE
|| code == C99_CODE_OPERATOR_MODULO) || code == C99_CODE_OPERATOR_MODULO))
{ {
ret |= c99_scan(c99); ret |= c99_scan(c99);
ret |= _cast_expr(c99); ret |= _cast_expr(c99);
@ -1357,17 +1364,17 @@ static int _statement(C99 * c99)
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
/* FIXME labeled and expression statements conflict */ /* FIXME labeled and expression statements conflict */
if(c99->in_switch && token_in_set(c99->token, c99set_labeled_statement)) if(c99->in_switch && _parse_in_set(c99, c99set_labeled_statement))
return _labeled_statement(c99); return _labeled_statement(c99);
else if(token_in_set(c99->token, c99set_compound_statement)) else if(_parse_in_set(c99, c99set_compound_statement))
return _compound_statement(c99); return _compound_statement(c99);
else if(token_in_set(c99->token, c99set_expression_statement)) else if(_parse_in_set(c99, c99set_expression_statement))
return _expression_statement(c99); return _expression_statement(c99);
else if(token_in_set(c99->token, c99set_selection_statement)) else if(_parse_in_set(c99, c99set_selection_statement))
return _selection_statement(c99); return _selection_statement(c99);
else if(token_in_set(c99->token, c99set_iteration_statement)) else if(_parse_in_set(c99, c99set_iteration_statement))
return _iteration_statement(c99); return _iteration_statement(c99);
else if(token_in_set(c99->token, c99set_jump_statement)) else if(_parse_in_set(c99, c99set_jump_statement))
return _jump_statement(c99); return _jump_statement(c99);
return _parse_error(c99, "Expected statement"); return _parse_error(c99, "Expected statement");
} }