parser.c (cp_parser_uncommitted_to_tentative_parse_p): New function.

* parser.c (cp_parser_uncommitted_to_tentative_parse_p): New function.
	(cp_parser_name_lookup_error): Use it.
	(cp_parser_check_for_invalid_template_id): Likewise.
	(cp_parser_skip_to_closing_parenthesis): Likewise.
	(cp_parser_nested_name_specifier_opt): Likewise.
	(cp_parser_simple_declaration, cp_parser_template_id): Likewise.
	(cp_parser_parameter_declaration_list): Likewise.
	(cp_parser_parameter_declaration): Likewise.
	(cp_parser_template_name): Let cp_parser_simulate_error perform
	the checking.
	(cp_parser_committed_to_tentative_parse): Remove.

From-SVN: r92133
This commit is contained in:
Volker Reichelt 2004-12-14 13:32:03 +00:00 committed by Volker Reichelt
parent 985791f6fe
commit 0b16f8f413
2 changed files with 32 additions and 31 deletions

View File

@ -1,3 +1,17 @@
2004-12-14 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
* parser.c (cp_parser_uncommitted_to_tentative_parse_p): New function.
(cp_parser_name_lookup_error): Use it.
(cp_parser_check_for_invalid_template_id): Likewise.
(cp_parser_skip_to_closing_parenthesis): Likewise.
(cp_parser_nested_name_specifier_opt): Likewise.
(cp_parser_simple_declaration, cp_parser_template_id): Likewise.
(cp_parser_parameter_declaration_list): Likewise.
(cp_parser_parameter_declaration): Likewise.
(cp_parser_template_name): Let cp_parser_simulate_error perform
the checking.
(cp_parser_committed_to_tentative_parse): Remove.
2004-12-13 Andrew Pinski <pinskia@physics.uc.edu>
PR c++/18968

View File

@ -1702,7 +1702,7 @@ static bool cp_parser_parse_definitely
(cp_parser *);
static inline bool cp_parser_parsing_tentatively
(cp_parser *);
static bool cp_parser_committed_to_tentative_parse
static bool cp_parser_uncommitted_to_tentative_parse_p
(cp_parser *);
static void cp_parser_error
(cp_parser *, const char *);
@ -1838,8 +1838,7 @@ cp_parser_name_lookup_error (cp_parser* parser,
static bool
cp_parser_simulate_error (cp_parser* parser)
{
if (cp_parser_parsing_tentatively (parser)
&& !cp_parser_committed_to_tentative_parse (parser))
if (cp_parser_uncommitted_to_tentative_parse_p (parser))
{
parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
return true;
@ -1907,8 +1906,7 @@ cp_parser_check_for_invalid_template_id (cp_parser* parser,
else
error ("invalid template-id");
/* Remember the location of the invalid "<". */
if (cp_parser_parsing_tentatively (parser)
&& !cp_parser_committed_to_tentative_parse (parser))
if (cp_parser_uncommitted_to_tentative_parse_p (parser))
start = cp_lexer_token_position (parser->lexer, true);
/* Consume the "<". */
cp_lexer_consume_token (parser->lexer);
@ -2076,8 +2074,8 @@ cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
unsigned brace_depth = 0;
int result;
if (recovering && !or_comma && cp_parser_parsing_tentatively (parser)
&& !cp_parser_committed_to_tentative_parse (parser))
if (recovering && !or_comma
&& cp_parser_uncommitted_to_tentative_parse_p (parser))
return 0;
while (true)
@ -3324,8 +3322,7 @@ cp_parser_nested_name_specifier_opt (cp_parser *parser,
}
/* Remember where the nested-name-specifier starts. */
if (cp_parser_parsing_tentatively (parser)
&& !cp_parser_committed_to_tentative_parse (parser))
if (cp_parser_uncommitted_to_tentative_parse_p (parser))
start = cp_lexer_token_position (parser->lexer, false);
push_deferring_access_checks (dk_deferred);
@ -6946,8 +6943,7 @@ cp_parser_simple_declaration (cp_parser* parser,
/* If we have already issued an error message we don't need
to issue another one. */
if (decl != error_mark_node
|| (cp_parser_parsing_tentatively (parser)
&& !cp_parser_committed_to_tentative_parse (parser)))
|| cp_parser_uncommitted_to_tentative_parse_p (parser))
cp_parser_error (parser, "expected %<,%> or %<;%>");
/* Skip tokens until we reach the end of the statement. */
cp_parser_skip_to_end_of_statement (parser);
@ -8314,8 +8310,7 @@ cp_parser_template_id (cp_parser *parser,
}
/* Remember where the template-id starts. */
if (cp_parser_parsing_tentatively (parser)
&& !cp_parser_committed_to_tentative_parse (parser))
if (cp_parser_uncommitted_to_tentative_parse_p (parser))
start_of_id = cp_lexer_token_position (parser->lexer, false);
push_deferring_access_checks (dk_deferred);
@ -8544,14 +8539,9 @@ cp_parser_template_name (cp_parser* parser,
error ("non-template %qD used as template", identifier);
inform ("use %<%T::template %D%> to indicate that it is a template",
parser->scope, identifier);
/* If parsing tentatively, find the location of the "<"
token. */
if (cp_parser_parsing_tentatively (parser)
&& !cp_parser_committed_to_tentative_parse (parser))
{
cp_parser_simulate_error (parser);
start = cp_lexer_token_position (parser->lexer, true);
}
/* If parsing tentatively, find the location of the "<" token. */
if (cp_parser_simulate_error (parser))
start = cp_lexer_token_position (parser->lexer, true);
/* Parse the template arguments so that we can issue error
messages about them. */
cp_lexer_consume_token (parser->lexer);
@ -11620,8 +11610,7 @@ cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
list. */
if (!parser->in_template_argument_list_p
&& !parser->in_type_id_in_expr_p
&& cp_parser_parsing_tentatively (parser)
&& !cp_parser_committed_to_tentative_parse (parser)
&& cp_parser_uncommitted_to_tentative_parse_p (parser)
/* However, a parameter-declaration of the form
"foat(f)" (which is a valid declaration of a
parameter "f") can also be interpreted as an
@ -11632,8 +11621,7 @@ cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
else
{
cp_parser_error (parser, "expected %<,%> or %<...%>");
if (!cp_parser_parsing_tentatively (parser)
|| cp_parser_committed_to_tentative_parse (parser))
if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
cp_parser_skip_to_closing_parenthesis (parser,
/*recovering=*/true,
/*or_comma=*/false,
@ -11736,8 +11724,7 @@ cp_parser_parameter_declaration (cp_parser *parser,
function-type (taking a "char" as a parameter) or a cast
of some object of type "char" to "int". */
&& !parser->in_type_id_in_expr_p
&& cp_parser_parsing_tentatively (parser)
&& !cp_parser_committed_to_tentative_parse (parser)
&& cp_parser_uncommitted_to_tentative_parse_p (parser)
&& cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
cp_parser_commit_to_tentative_parse (parser);
/* Parse the declarator. */
@ -15847,14 +15834,14 @@ cp_parser_parse_definitely (cp_parser* parser)
return !error_occurred;
}
/* Returns true if we are parsing tentatively -- but have decided that
we will stick with this tentative parse, even if errors occur. */
/* Returns true if we are parsing tentatively and are not committed to
this tentative parse. */
static bool
cp_parser_committed_to_tentative_parse (cp_parser* parser)
cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
{
return (cp_parser_parsing_tentatively (parser)
&& parser->context->status == CP_PARSER_STATUS_KIND_COMMITTED);
&& parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
}
/* Returns nonzero iff an error has occurred during the most recent