Using wrapper around token_in_set() to avoid segfaults

This commit is contained in:
Pierre Pronchery 2008-03-14 02:15:12 +00:00
parent e0316a7f12
commit a281b0da34

View File

@ -189,9 +189,9 @@ static int _external_declaration(C99 * c99)
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
if(token_in_set(c99->token, c99set_function_definition)) if(_parse_in_set(c99, c99set_function_definition))
return _function_definition(c99); return _function_definition(c99);
else if(token_in_set(c99->token, c99set_declaration)) else if(_parse_in_set(c99, c99set_declaration))
return _declaration(c99); return _declaration(c99);
return _parse_error(c99, "Expected function definition or declaration"); return _parse_error(c99, "Expected function definition or declaration");
} }
@ -226,7 +226,7 @@ static int _declaration_list(C99 * c99)
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
ret = _declaration(c99); ret = _declaration(c99);
while(token_in_set(c99->token, c99set_declaration)) while(_parse_in_set(c99, c99set_declaration))
ret |= _declaration(c99); ret |= _declaration(c99);
return ret; return ret;
} }
@ -242,7 +242,7 @@ static int _declaration(C99 * c99)
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
ret |= _declaration_specifiers(c99); ret |= _declaration_specifiers(c99);
if(token_in_set(c99->token, c99set_init_declarator)) if(_parse_in_set(c99, c99set_init_declarator))
ret |= _init_declarator_list(c99); ret |= _init_declarator_list(c99);
return ret; return ret;
} }
@ -263,13 +263,13 @@ static int _declaration_specifiers(C99 * c99)
#endif #endif
for(;;) for(;;)
{ {
if(token_in_set(c99->token, c99set_storage_class_specifier)) if(_parse_in_set(c99, c99set_storage_class_specifier))
ret |= _storage_class_specifier(c99); ret |= _storage_class_specifier(c99);
else if(token_in_set(c99->token, c99set_type_specifier)) else if(_parse_in_set(c99, c99set_type_specifier))
ret |= _type_specifier(c99); ret |= _type_specifier(c99);
else if(token_in_set(c99->token, c99set_type_qualifier)) else if(_parse_in_set(c99, c99set_type_qualifier))
ret |= _type_qualifier(c99); ret |= _type_qualifier(c99);
else if(token_in_set(c99->token, c99set_function_specifier)) else if(_parse_in_set(c99, c99set_function_specifier))
ret |= _function_specifier(c99); ret |= _function_specifier(c99);
else if(looped == 0) else if(looped == 0)
return _parse_error(c99, "Expected" return _parse_error(c99, "Expected"
@ -308,11 +308,11 @@ static int _type_specifier(C99 * c99)
fprintf(stderr, "DEBUG: %s() \"%s\"\n", __func__, fprintf(stderr, "DEBUG: %s() \"%s\"\n", __func__,
token_get_string(c99->token)); token_get_string(c99->token));
#endif #endif
if(token_in_set(c99->token, c99set_struct_or_union_specifier)) if(_parse_in_set(c99, c99set_struct_or_union_specifier))
ret = _struct_or_union_specifier(c99); ret = _struct_or_union_specifier(c99);
else if(token_in_set(c99->token, c99set_enum_specifier)) else if(_parse_in_set(c99, c99set_enum_specifier))
ret = _enum_specifier(c99); ret = _enum_specifier(c99);
else if(token_in_set(c99->token, c99set_typedef_name)) else if(_parse_in_set(c99, c99set_typedef_name))
ret = _typedef_name(c99); ret = _typedef_name(c99);
else else
ret = c99_scan(c99); ret = c99_scan(c99);
@ -368,7 +368,7 @@ static int _struct_declaration_list(C99 * c99)
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
ret = _struct_declaration(c99); ret = _struct_declaration(c99);
while(token_in_set(c99->token, c99set_struct_declaration)) while(_parse_in_set(c99, c99set_struct_declaration))
ret |= _struct_declaration(c99); ret |= _struct_declaration(c99);
return ret; return ret;
} }
@ -554,7 +554,7 @@ static int _declarator(C99 * c99)
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
if(token_in_set(c99->token, c99set_pointer)) if(_parse_in_set(c99, c99set_pointer))
ret |= _pointer(c99); ret |= _pointer(c99);
ret |= _direct_declarator(c99); ret |= _direct_declarator(c99);
return ret; return ret;
@ -572,12 +572,12 @@ static int _pointer(C99 * c99)
token_get_string(c99->token)); token_get_string(c99->token));
#endif #endif
ret = c99_scan(c99); ret = c99_scan(c99);
if(token_in_set(c99->token, c99set_type_qualifier_list)) if(_parse_in_set(c99, c99set_type_qualifier_list))
ret |= _type_qualifier_list(c99); ret |= _type_qualifier_list(c99);
while(token_in_set(c99->token, c99set_pointer)) while(_parse_in_set(c99, c99set_pointer))
{ {
ret |= c99_scan(c99); ret |= c99_scan(c99);
if(token_in_set(c99->token, c99set_type_qualifier_list)) if(_parse_in_set(c99, c99set_type_qualifier_list))
ret |= _type_qualifier_list(c99); ret |= _type_qualifier_list(c99);
} }
return ret; return ret;
@ -594,7 +594,7 @@ static int _type_qualifier_list(C99 * c99)
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
ret = _type_qualifier(c99); ret = _type_qualifier(c99);
while(token_in_set(c99->token, c99set_type_qualifier)) while(_parse_in_set(c99, c99set_type_qualifier))
ret |= _type_qualifier(c99); ret |= _type_qualifier(c99);
return ret; return ret;
} }
@ -638,9 +638,9 @@ static int _direct_declarator(C99 * c99)
} }
else /* C99_CODE_OPERATOR_LPAREN */ else /* C99_CODE_OPERATOR_LPAREN */
{ {
if(token_in_set(c99->token, c99set_parameter_type_list)) if(_parse_in_set(c99, c99set_parameter_type_list))
ret |= _parameter_type_list(c99); ret |= _parameter_type_list(c99);
else if(token_in_set(c99->token, c99set_identifier_list)) else if(_parse_in_set(c99, c99set_identifier_list))
ret |= _identifier_list(c99); ret |= _identifier_list(c99);
ret |= _parse_check(c99, C99_CODE_OPERATOR_RPAREN); ret |= _parse_check(c99, C99_CODE_OPERATOR_RPAREN);
} }
@ -712,9 +712,9 @@ static int _parameter_declaration(C99 * c99)
#endif #endif
ret = _declaration_specifiers(c99); ret = _declaration_specifiers(c99);
/* FIXME ambiguity between declarator and abstract declarator */ /* FIXME ambiguity between declarator and abstract declarator */
if(token_in_set(c99->token, c99set_abstract_declarator)) if(_parse_in_set(c99, c99set_abstract_declarator))
ret |= _abstract_declarator(c99); ret |= _abstract_declarator(c99);
else if(token_in_set(c99->token, c99set_declarator)) else if(_parse_in_set(c99, c99set_declarator))
ret |= _declarator(c99); ret |= _declarator(c99);
return ret; return ret;
} }
@ -804,7 +804,7 @@ 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 */
while(token_in_set(c99->token, c99set_unary_expr)) while(_parse_in_set(c99, c99set_unary_expr))
{ {
ret |= _unary_expr(c99); ret |= _unary_expr(c99);
ret |= _assignment_operator(c99); ret |= _assignment_operator(c99);
@ -832,7 +832,7 @@ static int _unary_expr(C99 * c99)
fprintf(stderr, "DEBUG: %s() \"%s\"\n", __func__, fprintf(stderr, "DEBUG: %s() \"%s\"\n", __func__,
token_get_string(c99->token)); token_get_string(c99->token));
#endif #endif
if(token_in_set(c99->token, c99set_postfix_expr)) if(_parse_in_set(c99, c99set_postfix_expr))
return _postfix_expr(c99); return _postfix_expr(c99);
else if((code = token_get_code(c99->token)) == C99_CODE_OPERATOR_DPLUS else if((code = token_get_code(c99->token)) == C99_CODE_OPERATOR_DPLUS
|| code == C99_CODE_OPERATOR_DMINUS) || code == C99_CODE_OPERATOR_DMINUS)
@ -840,7 +840,7 @@ static int _unary_expr(C99 * c99)
ret = c99_scan(c99); ret = c99_scan(c99);
ret |= _unary_expr(c99); ret |= _unary_expr(c99);
} }
else if(token_in_set(c99->token, c99set_unary_operator)) else if(_parse_in_set(c99, c99set_unary_operator))
{ {
ret = _unary_operator(c99); ret = _unary_operator(c99);
ret |= _cast_expr(c99); ret |= _cast_expr(c99);
@ -879,7 +879,7 @@ static int _postfix_expr(C99 * c99)
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
if(token_in_set(c99->token, c99set_primary_expr)) if(_parse_in_set(c99, c99set_primary_expr))
ret |= _primary_expr(c99); ret |= _primary_expr(c99);
else if(_parse_is_code(c99, C99_CODE_OPERATOR_LPAREN)) else if(_parse_is_code(c99, C99_CODE_OPERATOR_LPAREN))
{ {
@ -1009,9 +1009,9 @@ static int _specifier_qualifier_list(C99 * c99)
#endif #endif
for(;;) for(;;)
{ {
if(token_in_set(c99->token, c99set_type_specifier)) if(_parse_in_set(c99, c99set_type_specifier))
ret |= _type_specifier(c99); ret |= _type_specifier(c99);
else if(token_in_set(c99->token, c99set_type_qualifier)) else if(_parse_in_set(c99, c99set_type_qualifier))
ret |= _type_qualifier(c99); ret |= _type_qualifier(c99);
else if(looped == 0) else if(looped == 0)
ret |= _parse_error(c99, "Expected type specifier" ret |= _parse_error(c99, "Expected type specifier"
@ -1343,9 +1343,9 @@ static int _block_item(C99 * c99)
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
if(token_in_set(c99->token, c99set_declaration)) if(_parse_in_set(c99, c99set_declaration))
return _declaration(c99); return _declaration(c99);
else if(token_in_set(c99->token, c99set_statement)) else if(_parse_in_set(c99, c99set_statement))
return _statement(c99); return _statement(c99);
return _parse_error(c99, "Expected declaration or statement"); return _parse_error(c99, "Expected declaration or statement");
} }
@ -1431,7 +1431,7 @@ static int _expression_statement(C99 * c99)
fprintf(stderr, "DEBUG: %s() \"%s\"\n", __func__, fprintf(stderr, "DEBUG: %s() \"%s\"\n", __func__,
token_get_string(c99->token)); token_get_string(c99->token));
#endif #endif
if(token_in_set(c99->token, c99set_expression)) if(_parse_in_set(c99, c99set_expression))
ret = _expression(c99); ret = _expression(c99);
ret |= _parse_check(c99, C99_CODE_OPERATOR_SEMICOLON); ret |= _parse_check(c99, C99_CODE_OPERATOR_SEMICOLON);
return ret; return ret;
@ -1563,7 +1563,7 @@ static int _jump_statement(C99 * c99)
else if(code == C99_CODE_KEYWORD_RETURN) else if(code == C99_CODE_KEYWORD_RETURN)
{ {
ret = c99_scan(c99); ret = c99_scan(c99);
if(token_in_set(c99->token, c99set_expression)) if(_parse_in_set(c99, c99set_expression))
ret = _expression(c99); ret = _expression(c99);
} }
else /* continue or break */ else /* continue or break */
@ -1583,7 +1583,7 @@ static int _init_declarator_list(C99 * c99)
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
ret = _init_declarator(c99); ret = _init_declarator(c99);
while(token_in_set(c99->token, c99set_init_declarator)) while(_parse_in_set(c99, c99set_init_declarator))
ret |= _init_declarator(c99); ret |= _init_declarator(c99);
return ret; return ret;
} }
@ -1641,7 +1641,7 @@ static int _initializer_list(C99 * c99)
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
if(token_in_set(c99->token, c99set_designation)) if(_parse_in_set(c99, c99set_designation))
ret |= _designation(c99); ret |= _designation(c99);
ret |= _initializer(c99); ret |= _initializer(c99);
while(_parse_is_code(c99, C99_CODE_COMMA)) while(_parse_is_code(c99, C99_CODE_COMMA))
@ -1680,7 +1680,7 @@ static int _designator_list(C99 * c99)
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
ret = _designator(c99); ret = _designator(c99);
while(token_in_set(c99->token, c99set_designator)) while(_parse_in_set(c99, c99set_designator))
ret |= _designator(c99); ret |= _designator(c99);
return ret; return ret;
} }