Lines Matching full:parser
1 /* C++ Parser.
46 and c-lex.c) and the C++ parser. */
113 it to the parser. Tokens are never added to the cp_lexer after
748 /* We don't use cpp_type2name here because the parser defines in cp_lexer_print_token()
757 /* C++ parser token types - see "Manifest constants", above. */ in cp_lexer_print_token()
834 /* Nothing other than the parser should be creating declarators;
1050 /* The parser. */
1057 example, the parser breaks the token stream into declarators,
1063 The parser invokes routines elsewhere in the compiler to perform
1067 The parser (and the template instantiation code, which is, in a
1070 related functions. The parser (and template instantiation code)
1079 The parser is of the standard recursive-descent variety. Upcoming
1085 Therefore, the parser is capable of "parsing tentatively." When the
1086 parser is not sure what construct comes next, it enters this mode.
1087 Then, while we attempt to parse the construct, the parser queues up
1090 parser "commits", i.e., it issues any queued error messages and
1092 If, however, the construct is not parsed successfully, the parser
1099 The performance of the parser could probably be improved substantially.
1297 /* The cp_parser structure represents the C++ parser. */
1926 cp_parser_parsing_tentatively (cp_parser* parser) in cp_parser_parsing_tentatively() argument
1928 return parser->context->next != NULL; in cp_parser_parsing_tentatively()
1954 cp_parser_error (cp_parser* parser, const char* message) in cp_parser_error() argument
1956 if (!cp_parser_simulate_error (parser)) in cp_parser_error()
1958 cp_token *token = cp_lexer_peek_token (parser->lexer); in cp_parser_error()
1966 cp_parser_skip_to_pragma_eol (parser, token); in cp_parser_error()
1985 cp_parser_name_lookup_error (cp_parser* parser, in cp_parser_name_lookup_error() argument
1994 if (parser->scope && parser->scope != global_namespace) in cp_parser_name_lookup_error()
1996 parser->scope, name); in cp_parser_name_lookup_error()
1997 else if (parser->scope == global_namespace) in cp_parser_name_lookup_error()
1999 else if (parser->object_scope in cp_parser_name_lookup_error()
2000 && !CLASS_TYPE_P (parser->object_scope)) in cp_parser_name_lookup_error()
2002 name, parser->object_scope); in cp_parser_name_lookup_error()
2003 else if (parser->object_scope) in cp_parser_name_lookup_error()
2005 parser->object_scope, name); in cp_parser_name_lookup_error()
2009 else if (parser->scope && parser->scope != global_namespace) in cp_parser_name_lookup_error()
2010 error ("%<%D::%D%> %s", parser->scope, name, desired); in cp_parser_name_lookup_error()
2011 else if (parser->scope == global_namespace) in cp_parser_name_lookup_error()
2022 cp_parser_simulate_error (cp_parser* parser) in cp_parser_simulate_error() argument
2024 if (cp_parser_uncommitted_to_tentative_parse_p (parser)) in cp_parser_simulate_error()
2026 parser->context->status = CP_PARSER_STATUS_KIND_ERROR; in cp_parser_simulate_error()
2080 cp_parser_check_type_definition (cp_parser* parser) in cp_parser_check_type_definition() argument
2083 if (parser->type_definition_forbidden_message) in cp_parser_check_type_definition()
2087 error ("%s", parser->type_definition_forbidden_message); in cp_parser_check_type_definition()
2125 cp_parser_check_for_invalid_template_id (cp_parser* parser, in cp_parser_check_for_invalid_template_id() argument
2130 if (cp_lexer_next_token_is (parser->lexer, CPP_LESS)) in cp_parser_check_for_invalid_template_id()
2139 if (cp_parser_uncommitted_to_tentative_parse_p (parser)) in cp_parser_check_for_invalid_template_id()
2140 start = cp_lexer_token_position (parser->lexer, true); in cp_parser_check_for_invalid_template_id()
2142 cp_lexer_consume_token (parser->lexer); in cp_parser_check_for_invalid_template_id()
2144 cp_parser_enclosed_template_argument_list (parser); in cp_parser_check_for_invalid_template_id()
2148 cp_lexer_purge_tokens_after (parser->lexer, start); in cp_parser_check_for_invalid_template_id()
2155 PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P. */
2158 cp_parser_non_integral_constant_expression (cp_parser *parser, in cp_parser_non_integral_constant_expression() argument
2161 parser->non_integral_constant_expression_p = true; in cp_parser_non_integral_constant_expression()
2162 if (parser->integral_constant_expression_p) in cp_parser_non_integral_constant_expression()
2164 if (!parser->allow_non_integral_constant_expression_p) in cp_parser_non_integral_constant_expression()
2180 cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id) in cp_parser_diagnose_invalid_type_name() argument
2184 old_scope = parser->scope; in cp_parser_diagnose_invalid_type_name()
2185 parser->scope = scope; in cp_parser_diagnose_invalid_type_name()
2186 decl = cp_parser_lookup_name_simple (parser, id); in cp_parser_diagnose_invalid_type_name()
2187 parser->scope = old_scope; in cp_parser_diagnose_invalid_type_name()
2197 else if (!parser->scope) in cp_parser_diagnose_invalid_type_name()
2244 else if (parser->scope != error_mark_node) in cp_parser_diagnose_invalid_type_name()
2246 if (TREE_CODE (parser->scope) == NAMESPACE_DECL) in cp_parser_diagnose_invalid_type_name()
2248 id, parser->scope); in cp_parser_diagnose_invalid_type_name()
2249 else if (TYPE_P (parser->scope)) in cp_parser_diagnose_invalid_type_name()
2250 error ("%qE in class %qT does not name a type", id, parser->scope); in cp_parser_diagnose_invalid_type_name()
2254 cp_parser_commit_to_tentative_parse (parser); in cp_parser_diagnose_invalid_type_name()
2268 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser) in cp_parser_parse_and_diagnose_invalid_type_name() argument
2272 cp_parser_parse_tentatively (parser); in cp_parser_parse_and_diagnose_invalid_type_name()
2273 id = cp_parser_id_expression (parser, in cp_parser_parse_and_diagnose_invalid_type_name()
2282 if (!cp_lexer_next_token_is (parser->lexer, CPP_NAME) in cp_parser_parse_and_diagnose_invalid_type_name()
2283 || (parser->scope && TYPE_P (parser->scope) in cp_parser_parse_and_diagnose_invalid_type_name()
2284 && dependent_type_p (parser->scope)) in cp_parser_parse_and_diagnose_invalid_type_name()
2287 cp_parser_abort_tentative_parse (parser); in cp_parser_parse_and_diagnose_invalid_type_name()
2290 if (!cp_parser_parse_definitely (parser)) in cp_parser_parse_and_diagnose_invalid_type_name()
2294 cp_parser_diagnose_invalid_type_name (parser, parser->scope, id); in cp_parser_parse_and_diagnose_invalid_type_name()
2297 cp_parser_skip_to_end_of_block_or_statement (parser); in cp_parser_parse_and_diagnose_invalid_type_name()
2307 cp_parser_skip_to_closing_parenthesis (cp_parser *parser, in cp_parser_skip_to_closing_parenthesis() argument
2316 && cp_parser_uncommitted_to_tentative_parse_p (parser)) in cp_parser_skip_to_closing_parenthesis()
2321 cp_token * token = cp_lexer_peek_token (parser->lexer); in cp_parser_skip_to_closing_parenthesis()
2358 cp_lexer_consume_token (parser->lexer); in cp_parser_skip_to_closing_parenthesis()
2368 cp_lexer_consume_token (parser->lexer); in cp_parser_skip_to_closing_parenthesis()
2377 cp_parser_skip_to_end_of_statement (cp_parser* parser) in cp_parser_skip_to_end_of_statement() argument
2383 cp_token *token = cp_lexer_peek_token (parser->lexer); in cp_parser_skip_to_end_of_statement()
2422 cp_lexer_consume_token (parser->lexer); in cp_parser_skip_to_end_of_statement()
2435 cp_lexer_consume_token (parser->lexer); in cp_parser_skip_to_end_of_statement()
2444 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser) in cp_parser_consume_semicolon_at_end_of_statement() argument
2447 if (!cp_parser_require (parser, CPP_SEMICOLON, "`;'")) in cp_parser_consume_semicolon_at_end_of_statement()
2451 cp_parser_skip_to_end_of_statement (parser); in cp_parser_consume_semicolon_at_end_of_statement()
2453 if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)) in cp_parser_consume_semicolon_at_end_of_statement()
2454 cp_lexer_consume_token (parser->lexer); in cp_parser_consume_semicolon_at_end_of_statement()
2462 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser) in cp_parser_skip_to_end_of_block_or_statement() argument
2468 cp_token *token = cp_lexer_peek_token (parser->lexer); in cp_parser_skip_to_end_of_block_or_statement()
2501 cp_lexer_consume_token (parser->lexer); in cp_parser_skip_to_end_of_block_or_statement()
2509 cp_parser_skip_to_closing_brace (cp_parser *parser) in cp_parser_skip_to_closing_brace() argument
2515 cp_token *token = cp_lexer_peek_token (parser->lexer); in cp_parser_skip_to_closing_brace()
2542 cp_lexer_consume_token (parser->lexer); in cp_parser_skip_to_closing_brace()
2551 cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok) in cp_parser_skip_to_pragma_eol() argument
2555 parser->lexer->in_pragma = false; in cp_parser_skip_to_pragma_eol()
2558 token = cp_lexer_consume_token (parser->lexer); in cp_parser_skip_to_pragma_eol()
2562 cp_lexer_purge_tokens_after (parser->lexer, pragma_tok); in cp_parser_skip_to_pragma_eol()
2569 cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok) in cp_parser_require_pragma_eol() argument
2571 parser->lexer->in_pragma = false; in cp_parser_require_pragma_eol()
2572 if (!cp_parser_require (parser, CPP_PRAGMA_EOL, "end of line")) in cp_parser_require_pragma_eol()
2573 cp_parser_skip_to_pragma_eol (parser, pragma_tok); in cp_parser_require_pragma_eol()
2581 cp_parser_make_typename_type (cp_parser *parser, tree scope, tree id) in cp_parser_make_typename_type() argument
2589 cp_parser_diagnose_invalid_type_name (parser, scope, id); in cp_parser_make_typename_type()
2596 /* Create a new C++ parser. */
2601 cp_parser *parser; in cp_parser_new() local
2614 parser = GGC_CNEW (cp_parser); in cp_parser_new()
2615 parser->lexer = lexer; in cp_parser_new()
2616 parser->context = cp_parser_context_new (NULL); in cp_parser_new()
2619 parser->allow_gnu_extensions_p = 1; in cp_parser_new()
2623 parser->greater_than_is_operator_p = true; in cp_parser_new()
2625 parser->default_arg_ok_p = true; in cp_parser_new()
2628 parser->integral_constant_expression_p = false; in cp_parser_new()
2629 parser->allow_non_integral_constant_expression_p = false; in cp_parser_new()
2630 parser->non_integral_constant_expression_p = false; in cp_parser_new()
2633 parser->local_variables_forbidden_p = false; in cp_parser_new()
2636 parser->in_unbraced_linkage_specification_p = false; in cp_parser_new()
2639 parser->in_declarator_p = false; in cp_parser_new()
2642 parser->in_template_argument_list_p = false; in cp_parser_new()
2645 parser->in_statement = 0; in cp_parser_new()
2648 parser->in_switch_statement_p = false; in cp_parser_new()
2651 parser->in_type_id_in_expr_p = false; in cp_parser_new()
2654 parser->implicit_extern_c = false; in cp_parser_new()
2657 parser->translate_strings_p = true; in cp_parser_new()
2660 parser->in_function_body = false; in cp_parser_new()
2663 parser->unparsed_functions_queues = build_tree_list (NULL_TREE, NULL_TREE); in cp_parser_new()
2666 parser->num_classes_being_defined = 0; in cp_parser_new()
2669 parser->num_template_parameter_lists = 0; in cp_parser_new()
2671 return parser; in cp_parser_new()
2675 and push it onto the parser's lexer stack. This is used for delayed
2679 cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache) in cp_parser_push_lexer_for_tokens() argument
2682 lexer->next = parser->lexer; in cp_parser_push_lexer_for_tokens()
2683 parser->lexer = lexer; in cp_parser_push_lexer_for_tokens()
2690 /* Pop the top lexer off the parser stack. This is never used for the
2693 cp_parser_pop_lexer (cp_parser *parser) in cp_parser_pop_lexer() argument
2695 cp_lexer *lexer = parser->lexer; in cp_parser_pop_lexer()
2696 parser->lexer = lexer->next; in cp_parser_pop_lexer()
2701 cp_lexer_set_source_position_from_token (parser->lexer->next_token); in cp_parser_pop_lexer()
2710 cp_parser_identifier (cp_parser* parser) in cp_parser_identifier() argument
2715 token = cp_parser_require (parser, CPP_NAME, "identifier"); in cp_parser_identifier()
2735 cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok) in cp_parser_string_literal() argument
2744 tok = cp_lexer_peek_token (parser->lexer); in cp_parser_string_literal()
2747 cp_parser_error (parser, "expected string-literal"); in cp_parser_string_literal()
2754 (cp_lexer_peek_nth_token (parser->lexer, 2))) in cp_parser_string_literal()
2756 cp_lexer_consume_token (parser->lexer); in cp_parser_string_literal()
2773 cp_lexer_consume_token (parser->lexer); in cp_parser_string_literal()
2782 tok = cp_lexer_peek_token (parser->lexer); in cp_parser_string_literal()
2791 cp_parser_error (parser, "a wide string is invalid in this context"); in cp_parser_string_literal()
2825 cp_parser_translation_unit (cp_parser* parser) in cp_parser_translation_unit() argument
2845 cp_parser_declaration_seq_opt (parser); in cp_parser_translation_unit()
2848 if (cp_lexer_next_token_is (parser->lexer, CPP_EOF)) in cp_parser_translation_unit()
2851 cp_lexer_destroy (parser->lexer); in cp_parser_translation_unit()
2852 parser->lexer = NULL; in cp_parser_translation_unit()
2856 if (parser->implicit_extern_c) in cp_parser_translation_unit()
2859 parser->implicit_extern_c = false; in cp_parser_translation_unit()
2869 cp_parser_error (parser, "expected declaration"); in cp_parser_translation_unit()
2915 cp_parser_primary_expression (cp_parser *parser, in cp_parser_primary_expression() argument
2927 token = cp_lexer_peek_token (parser->lexer); in cp_parser_primary_expression()
2939 token = cp_lexer_consume_token (parser->lexer); in cp_parser_primary_expression()
2944 && parser->integral_constant_expression_p in cp_parser_primary_expression()
2954 next_token = cp_lexer_peek_token (parser->lexer); in cp_parser_primary_expression()
2968 || parser->greater_than_is_operator_p)) in cp_parser_primary_expression()
2978 (parser, "floating-point literal"); in cp_parser_primary_expression()
2984 /* ??? Should wide strings be allowed when parser->translate_strings_p in cp_parser_primary_expression()
2987 return cp_parser_string_literal (parser, in cp_parser_primary_expression()
2988 parser->translate_strings_p, in cp_parser_primary_expression()
2997 cp_lexer_consume_token (parser->lexer); in cp_parser_primary_expression()
3001 = parser->greater_than_is_operator_p; in cp_parser_primary_expression()
3002 parser->greater_than_is_operator_p = true; in cp_parser_primary_expression()
3005 if (cp_parser_allow_gnu_extensions_p (parser) in cp_parser_primary_expression()
3006 && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) in cp_parser_primary_expression()
3018 if (!parser->in_function_body) in cp_parser_primary_expression()
3023 cp_parser_compound_statement (parser, expr, false); in cp_parser_primary_expression()
3030 expr = cp_parser_expression (parser, cast_p); in cp_parser_primary_expression()
3040 parser->greater_than_is_operator_p in cp_parser_primary_expression()
3043 if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'")) in cp_parser_primary_expression()
3044 cp_parser_skip_to_end_of_statement (parser); in cp_parser_primary_expression()
3054 cp_lexer_consume_token (parser->lexer); in cp_parser_primary_expression()
3057 cp_lexer_consume_token (parser->lexer); in cp_parser_primary_expression()
3062 cp_lexer_consume_token (parser->lexer); in cp_parser_primary_expression()
3067 cp_lexer_consume_token (parser->lexer); in cp_parser_primary_expression()
3068 if (parser->local_variables_forbidden_p) in cp_parser_primary_expression()
3074 if (cp_parser_non_integral_constant_expression (parser, in cp_parser_primary_expression()
3094 token = cp_lexer_consume_token (parser->lexer); in cp_parser_primary_expression()
3105 cp_lexer_consume_token (parser->lexer); in cp_parser_primary_expression()
3107 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_primary_expression()
3109 expression = cp_parser_assignment_expression (parser, in cp_parser_primary_expression()
3112 cp_parser_require (parser, CPP_COMMA, "`,'"); in cp_parser_primary_expression()
3114 type = cp_parser_type_id (parser); in cp_parser_primary_expression()
3116 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_primary_expression()
3119 if (cp_parser_non_integral_constant_expression (parser, in cp_parser_primary_expression()
3126 return cp_parser_builtin_offsetof (parser); in cp_parser_primary_expression()
3132 return cp_parser_objc_expression (parser); in cp_parser_primary_expression()
3135 cp_parser_error (parser, "expected primary-expression"); in cp_parser_primary_expression()
3156 = cp_parser_id_expression (parser, in cp_parser_primary_expression()
3164 token = cp_lexer_peek_token (parser->lexer); in cp_parser_primary_expression()
3182 decl = cp_parser_lookup_name (parser, id_expression, in cp_parser_primary_expression()
3215 if (parser->local_variables_forbidden_p in cp_parser_primary_expression()
3242 (id_expression, decl, parser->scope, in cp_parser_primary_expression()
3244 parser->integral_constant_expression_p, in cp_parser_primary_expression()
3245 parser->allow_non_integral_constant_expression_p, in cp_parser_primary_expression()
3246 &parser->non_integral_constant_expression_p, in cp_parser_primary_expression()
3251 cp_parser_error (parser, error_msg); in cp_parser_primary_expression()
3260 return cp_parser_objc_expression (parser); in cp_parser_primary_expression()
3262 cp_parser_error (parser, "expected primary-expression"); in cp_parser_primary_expression()
3280 identifier. Sets PARSER->SCOPE to the qualifying scope if there is
3302 cp_parser_id_expression (cp_parser *parser, in cp_parser_id_expression() argument
3318 = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false) in cp_parser_id_expression()
3322 = (cp_parser_nested_name_specifier_opt (parser, in cp_parser_id_expression()
3341 *template_p = cp_parser_optional_template_keyword (parser); in cp_parser_id_expression()
3344 saved_scope = parser->scope; in cp_parser_id_expression()
3345 saved_object_scope = parser->object_scope; in cp_parser_id_expression()
3346 saved_qualifying_scope = parser->qualifying_scope; in cp_parser_id_expression()
3348 unqualified_id = cp_parser_unqualified_id (parser, *template_p, in cp_parser_id_expression()
3353 parser->scope = saved_scope; in cp_parser_id_expression()
3354 parser->object_scope = saved_object_scope; in cp_parser_id_expression()
3355 parser->qualifying_scope = saved_qualifying_scope; in cp_parser_id_expression()
3367 token = cp_lexer_peek_token (parser->lexer); in cp_parser_id_expression()
3374 (parser, 2)) in cp_parser_id_expression()
3375 return cp_parser_identifier (parser); in cp_parser_id_expression()
3377 cp_parser_parse_tentatively (parser); in cp_parser_id_expression()
3379 id = cp_parser_template_id (parser, in cp_parser_id_expression()
3384 if (cp_parser_parse_definitely (parser)) in cp_parser_id_expression()
3389 token = cp_lexer_peek_token (parser->lexer); in cp_parser_id_expression()
3394 return cp_parser_identifier (parser); in cp_parser_id_expression()
3398 return cp_parser_operator_function_id (parser); in cp_parser_id_expression()
3402 cp_parser_error (parser, "expected id-expression"); in cp_parser_id_expression()
3407 return cp_parser_unqualified_id (parser, template_keyword_p, in cp_parser_id_expression()
3436 cp_parser_unqualified_id (cp_parser* parser, in cp_parser_unqualified_id() argument
3445 token = cp_lexer_peek_token (parser->lexer); in cp_parser_unqualified_id()
3455 cp_parser_parse_tentatively (parser); in cp_parser_unqualified_id()
3457 id = cp_parser_template_id (parser, template_keyword_p, in cp_parser_unqualified_id()
3461 if (cp_parser_parse_definitely (parser)) in cp_parser_unqualified_id()
3464 return cp_parser_identifier (parser); in cp_parser_unqualified_id()
3468 return cp_parser_template_id (parser, template_keyword_p, in cp_parser_unqualified_id()
3481 cp_lexer_consume_token (parser->lexer); in cp_parser_unqualified_id()
3517 scope = parser->scope; in cp_parser_unqualified_id()
3518 object_scope = parser->object_scope; in cp_parser_unqualified_id()
3519 qualifying_scope = parser->qualifying_scope; in cp_parser_unqualified_id()
3524 if (cp_lexer_next_token_is (parser->lexer, CPP_NAME)) in cp_parser_unqualified_id()
3525 cp_lexer_consume_token (parser->lexer); in cp_parser_unqualified_id()
3530 if (!cp_parser_uncommitted_to_tentative_parse_p (parser)) in cp_parser_unqualified_id()
3532 cp_parser_simulate_error (parser); in cp_parser_unqualified_id()
3533 if (cp_lexer_next_token_is (parser->lexer, CPP_NAME)) in cp_parser_unqualified_id()
3534 cp_lexer_consume_token (parser->lexer); in cp_parser_unqualified_id()
3540 token = cp_lexer_peek_token (parser->lexer); in cp_parser_unqualified_id()
3543 && (cp_lexer_peek_nth_token (parser->lexer, 2)->type in cp_parser_unqualified_id()
3547 cp_lexer_consume_token (parser->lexer); in cp_parser_unqualified_id()
3557 cp_parser_parse_tentatively (parser); in cp_parser_unqualified_id()
3558 type_decl = cp_parser_class_name (parser, in cp_parser_unqualified_id()
3565 if (cp_parser_parse_definitely (parser)) in cp_parser_unqualified_id()
3571 cp_parser_parse_tentatively (parser); in cp_parser_unqualified_id()
3572 parser->scope = qualifying_scope; in cp_parser_unqualified_id()
3573 parser->object_scope = NULL_TREE; in cp_parser_unqualified_id()
3574 parser->qualifying_scope = NULL_TREE; in cp_parser_unqualified_id()
3576 = cp_parser_class_name (parser, in cp_parser_unqualified_id()
3583 if (cp_parser_parse_definitely (parser)) in cp_parser_unqualified_id()
3589 cp_parser_parse_tentatively (parser); in cp_parser_unqualified_id()
3590 parser->scope = object_scope; in cp_parser_unqualified_id()
3591 parser->object_scope = NULL_TREE; in cp_parser_unqualified_id()
3592 parser->qualifying_scope = NULL_TREE; in cp_parser_unqualified_id()
3594 = cp_parser_class_name (parser, in cp_parser_unqualified_id()
3601 if (cp_parser_parse_definitely (parser)) in cp_parser_unqualified_id()
3607 parser->scope = NULL_TREE; in cp_parser_unqualified_id()
3608 parser->object_scope = NULL_TREE; in cp_parser_unqualified_id()
3609 parser->qualifying_scope = NULL_TREE; in cp_parser_unqualified_id()
3611 = cp_parser_class_name (parser, in cp_parser_unqualified_id()
3631 if (!cp_parser_uncommitted_to_tentative_parse_p (parser)) in cp_parser_unqualified_id()
3634 cp_parser_simulate_error (parser); in cp_parser_unqualified_id()
3645 && !cp_parser_uncommitted_to_tentative_parse_p (parser)) in cp_parser_unqualified_id()
3658 cp_parser_parse_tentatively (parser); in cp_parser_unqualified_id()
3660 id = cp_parser_template_id (parser, template_keyword_p, in cp_parser_unqualified_id()
3664 if (cp_parser_parse_definitely (parser)) in cp_parser_unqualified_id()
3668 cp_parser_parse_tentatively (parser); in cp_parser_unqualified_id()
3670 id = cp_parser_operator_function_id (parser); in cp_parser_unqualified_id()
3672 if (!cp_parser_parse_definitely (parser)) in cp_parser_unqualified_id()
3673 id = cp_parser_conversion_function_id (parser); in cp_parser_unqualified_id()
3682 cp_parser_error (parser, "expected unqualified-id"); in cp_parser_unqualified_id()
3693 PARSER->SCOPE should be set appropriately before this function is
3698 Sets PARSER->SCOPE to the class (TYPE) or namespace
3707 cp_parser_nested_name_specifier_opt (cp_parser *parser, in cp_parser_nested_name_specifier_opt() argument
3718 if (cp_parser_uncommitted_to_tentative_parse_p (parser)) in cp_parser_nested_name_specifier_opt()
3720 start = cp_lexer_token_position (parser->lexer, false); in cp_parser_nested_name_specifier_opt()
3733 token = cp_lexer_peek_token (parser->lexer); in cp_parser_nested_name_specifier_opt()
3740 cp_parser_pre_parsed_nested_name_specifier (parser); in cp_parser_nested_name_specifier_opt()
3745 && TREE_CODE (parser->scope) == TYPENAME_TYPE) in cp_parser_nested_name_specifier_opt()
3747 new_scope = resolve_typename_type (parser->scope, in cp_parser_nested_name_specifier_opt()
3750 parser->scope = new_scope; in cp_parser_nested_name_specifier_opt()
3773 token = cp_lexer_peek_nth_token (parser->lexer, 2); in cp_parser_nested_name_specifier_opt()
3776 (parser, 2)) in cp_parser_nested_name_specifier_opt()
3782 cp_parser_parse_tentatively (parser); in cp_parser_nested_name_specifier_opt()
3787 template_keyword_p = cp_parser_optional_template_keyword (parser); in cp_parser_nested_name_specifier_opt()
3793 old_scope = parser->scope; in cp_parser_nested_name_specifier_opt()
3794 saved_qualifying_scope = parser->qualifying_scope; in cp_parser_nested_name_specifier_opt()
3801 && parser->scope in cp_parser_nested_name_specifier_opt()
3802 && TREE_CODE (parser->scope) == TYPENAME_TYPE) in cp_parser_nested_name_specifier_opt()
3803 parser->scope = resolve_typename_type (parser->scope, in cp_parser_nested_name_specifier_opt()
3807 = cp_parser_class_or_namespace_name (parser, in cp_parser_nested_name_specifier_opt()
3814 cp_parser_require (parser, CPP_SCOPE, "`::'"); in cp_parser_nested_name_specifier_opt()
3818 if (!cp_parser_parse_definitely (parser)) in cp_parser_nested_name_specifier_opt()
3825 parser->scope = old_scope; in cp_parser_nested_name_specifier_opt()
3826 parser->qualifying_scope = saved_qualifying_scope; in cp_parser_nested_name_specifier_opt()
3827 if (cp_parser_uncommitted_to_tentative_parse_p (parser)) in cp_parser_nested_name_specifier_opt()
3832 while (cp_lexer_next_token_is (parser->lexer, CPP_NAME) in cp_parser_nested_name_specifier_opt()
3833 && (cp_lexer_peek_nth_token (parser->lexer, 2)->type in cp_parser_nested_name_specifier_opt()
3835 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type in cp_parser_nested_name_specifier_opt()
3838 token = cp_lexer_consume_token (parser->lexer); in cp_parser_nested_name_specifier_opt()
3846 decl = cp_parser_lookup_name (parser, token->u.value, in cp_parser_nested_name_specifier_opt()
3863 (parser, token->u.value, decl, in cp_parser_nested_name_specifier_opt()
3866 parser->scope = error_mark_node; in cp_parser_nested_name_specifier_opt()
3878 cp_lexer_consume_token (parser->lexer); in cp_parser_nested_name_specifier_opt()
3911 parser->scope = new_scope; in cp_parser_nested_name_specifier_opt()
3923 token = cp_lexer_token_at (parser->lexer, start); in cp_parser_nested_name_specifier_opt()
3929 token->u.tree_check_value->value = parser->scope; in cp_parser_nested_name_specifier_opt()
3932 parser->qualifying_scope; in cp_parser_nested_name_specifier_opt()
3936 cp_lexer_purge_tokens_after (parser->lexer, start); in cp_parser_nested_name_specifier_opt()
3942 return success ? parser->scope : NULL_TREE; in cp_parser_nested_name_specifier_opt()
3951 cp_parser_nested_name_specifier (cp_parser *parser, in cp_parser_nested_name_specifier() argument
3960 scope = cp_parser_nested_name_specifier_opt (parser, in cp_parser_nested_name_specifier()
3968 cp_parser_error (parser, "expected nested-name-specifier"); in cp_parser_nested_name_specifier()
3969 parser->scope = NULL_TREE; in cp_parser_nested_name_specifier()
3993 cp_parser_class_or_namespace_name (cp_parser *parser, in cp_parser_class_or_namespace_name() argument
4007 current PARSER->SCOPE since cp_parser_class_name will destroy in cp_parser_class_or_namespace_name()
4009 saved_scope = parser->scope; in cp_parser_class_or_namespace_name()
4010 saved_qualifying_scope = parser->qualifying_scope; in cp_parser_class_or_namespace_name()
4011 saved_object_scope = parser->object_scope; in cp_parser_class_or_namespace_name()
4016 cp_parser_parse_tentatively (parser); in cp_parser_class_or_namespace_name()
4017 scope = cp_parser_class_name (parser, in cp_parser_class_or_namespace_name()
4025 if (!only_class_p && !cp_parser_parse_definitely (parser)) in cp_parser_class_or_namespace_name()
4028 parser->scope = saved_scope; in cp_parser_class_or_namespace_name()
4029 parser->qualifying_scope = saved_qualifying_scope; in cp_parser_class_or_namespace_name()
4030 parser->object_scope = saved_object_scope; in cp_parser_class_or_namespace_name()
4035 if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME) in cp_parser_class_or_namespace_name()
4036 || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE) in cp_parser_class_or_namespace_name()
4038 scope = cp_parser_namespace_name (parser); in cp_parser_class_or_namespace_name()
4084 cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p) in cp_parser_postfix_expression() argument
4092 token = cp_lexer_peek_token (parser->lexer); in cp_parser_postfix_expression()
4109 cp_lexer_consume_token (parser->lexer); in cp_parser_postfix_expression()
4112 saved_message = parser->type_definition_forbidden_message; in cp_parser_postfix_expression()
4113 parser->type_definition_forbidden_message in cp_parser_postfix_expression()
4117 cp_parser_require (parser, CPP_LESS, "`<'"); in cp_parser_postfix_expression()
4119 type = cp_parser_type_id (parser); in cp_parser_postfix_expression()
4121 cp_parser_require (parser, CPP_GREATER, "`>'"); in cp_parser_postfix_expression()
4123 parser->type_definition_forbidden_message = saved_message; in cp_parser_postfix_expression()
4126 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_postfix_expression()
4127 expression = cp_parser_expression (parser, /*cast_p=*/true); in cp_parser_postfix_expression()
4128 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_postfix_expression()
4134 (parser, in cp_parser_postfix_expression()
4170 cp_lexer_consume_token (parser->lexer); in cp_parser_postfix_expression()
4172 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_postfix_expression()
4174 saved_message = parser->type_definition_forbidden_message; in cp_parser_postfix_expression()
4175 parser->type_definition_forbidden_message in cp_parser_postfix_expression()
4179 cp_parser_parse_tentatively (parser); in cp_parser_postfix_expression()
4181 saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p; in cp_parser_postfix_expression()
4182 parser->in_type_id_in_expr_p = true; in cp_parser_postfix_expression()
4183 type = cp_parser_type_id (parser); in cp_parser_postfix_expression()
4184 parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p; in cp_parser_postfix_expression()
4188 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_postfix_expression()
4190 if (cp_parser_parse_definitely (parser)) in cp_parser_postfix_expression()
4198 expression = cp_parser_expression (parser, /*cast_p=*/false); in cp_parser_postfix_expression()
4202 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_postfix_expression()
4205 parser->type_definition_forbidden_message = saved_message; in cp_parser_postfix_expression()
4207 if (cp_parser_non_integral_constant_expression(parser, in cp_parser_postfix_expression()
4218 type = cp_parser_elaborated_type_specifier (parser, in cp_parser_postfix_expression()
4221 postfix_expression = cp_parser_functional_cast (parser, type); in cp_parser_postfix_expression()
4233 cp_parser_parse_tentatively (parser); in cp_parser_postfix_expression()
4235 type = cp_parser_simple_type_specifier (parser, in cp_parser_postfix_expression()
4239 if (!cp_parser_error_occurred (parser)) in cp_parser_postfix_expression()
4241 = cp_parser_functional_cast (parser, type); in cp_parser_postfix_expression()
4243 if (cp_parser_parse_definitely (parser)) in cp_parser_postfix_expression()
4248 if (cp_parser_allow_gnu_extensions_p (parser) in cp_parser_postfix_expression()
4249 && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)) in cp_parser_postfix_expression()
4254 cp_parser_parse_tentatively (parser); in cp_parser_postfix_expression()
4256 cp_lexer_consume_token (parser->lexer); in cp_parser_postfix_expression()
4258 saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p; in cp_parser_postfix_expression()
4259 parser->in_type_id_in_expr_p = true; in cp_parser_postfix_expression()
4260 type = cp_parser_type_id (parser); in cp_parser_postfix_expression()
4261 parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p; in cp_parser_postfix_expression()
4263 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_postfix_expression()
4265 cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"); in cp_parser_postfix_expression()
4268 if (!cp_parser_error_occurred (parser)) in cp_parser_postfix_expression()
4273 = cp_parser_initializer_list (parser, &non_constant_p); in cp_parser_postfix_expression()
4275 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA)) in cp_parser_postfix_expression()
4276 cp_lexer_consume_token (parser->lexer); in cp_parser_postfix_expression()
4278 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'"); in cp_parser_postfix_expression()
4282 if (cp_parser_parse_definitely (parser)) in cp_parser_postfix_expression()
4298 (parser, "non-constant compound literals")) in cp_parser_postfix_expression()
4312 = cp_parser_primary_expression (parser, address_p, cast_p, in cp_parser_postfix_expression()
4324 && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN)) in cp_parser_postfix_expression()
4330 token = cp_lexer_peek_token (parser->lexer); in cp_parser_postfix_expression()
4336 = cp_parser_postfix_open_square_expression (parser, in cp_parser_postfix_expression()
4358 = parser->integral_constant_expression_p; in cp_parser_postfix_expression()
4360 = parser->non_integral_constant_expression_p; in cp_parser_postfix_expression()
4361 parser->integral_constant_expression_p = false; in cp_parser_postfix_expression()
4364 (parser, /*is_attribute_list=*/false, in cp_parser_postfix_expression()
4369 parser->integral_constant_expression_p in cp_parser_postfix_expression()
4371 parser->non_integral_constant_expression_p in cp_parser_postfix_expression()
4384 && cp_parser_non_integral_constant_expression (parser, in cp_parser_postfix_expression()
4491 cp_lexer_consume_token (parser->lexer); in cp_parser_postfix_expression()
4494 = cp_parser_postfix_dot_deref_expression (parser, token->type, in cp_parser_postfix_expression()
4502 cp_lexer_consume_token (parser->lexer); in cp_parser_postfix_expression()
4508 if (cp_parser_non_integral_constant_expression (parser, in cp_parser_postfix_expression()
4517 cp_lexer_consume_token (parser->lexer); in cp_parser_postfix_expression()
4523 if (cp_parser_non_integral_constant_expression (parser, in cp_parser_postfix_expression()
4548 cp_parser_postfix_open_square_expression (cp_parser *parser, in cp_parser_postfix_open_square_expression() argument
4555 cp_lexer_consume_token (parser->lexer); in cp_parser_postfix_open_square_expression()
4566 index = cp_parser_constant_expression (parser, false, NULL); in cp_parser_postfix_open_square_expression()
4568 index = cp_parser_expression (parser, /*cast_p=*/false); in cp_parser_postfix_open_square_expression()
4571 cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"); in cp_parser_postfix_open_square_expression()
4580 (parser, "an array reference"))) in cp_parser_postfix_open_square_expression()
4600 cp_parser_postfix_dot_deref_expression (cp_parser *parser, in cp_parser_postfix_dot_deref_expression() argument
4616 parser->scope = NULL_TREE; in cp_parser_postfix_dot_deref_expression()
4617 parser->qualifying_scope = NULL_TREE; in cp_parser_postfix_dot_deref_expression()
4618 parser->object_scope = NULL_TREE; in cp_parser_postfix_dot_deref_expression()
4642 parser->context->object_type = scope; in cp_parser_postfix_dot_deref_expression()
4665 cp_parser_parse_tentatively (parser); in cp_parser_postfix_dot_deref_expression()
4668 cp_parser_pseudo_destructor_name (parser, &s, &type); in cp_parser_postfix_dot_deref_expression()
4669 if (cp_parser_parse_definitely (parser)) in cp_parser_postfix_dot_deref_expression()
4686 (parser, in cp_parser_postfix_dot_deref_expression()
4687 cp_parser_optional_template_keyword (parser), in cp_parser_postfix_dot_deref_expression()
4704 if (parser->scope) in cp_parser_postfix_dot_deref_expression()
4716 if (name != error_mark_node && !BASELINK_P (name) && parser->scope) in cp_parser_postfix_dot_deref_expression()
4719 parser->scope, in cp_parser_postfix_dot_deref_expression()
4722 parser->scope = NULL_TREE; in cp_parser_postfix_dot_deref_expression()
4723 parser->qualifying_scope = NULL_TREE; in cp_parser_postfix_dot_deref_expression()
4724 parser->object_scope = NULL_TREE; in cp_parser_postfix_dot_deref_expression()
4737 parser->context->object_type = NULL_TREE; in cp_parser_postfix_dot_deref_expression()
4743 (parser, token_type == CPP_DEREF ? "'->'" : "`.'"))) in cp_parser_postfix_dot_deref_expression()
4773 cp_parser_parenthesized_expression_list (cp_parser* parser, in cp_parser_parenthesized_expression_list() argument
4786 if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('")) in cp_parser_parenthesized_expression_list()
4790 if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)) in cp_parser_parenthesized_expression_list()
4798 && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME) in cp_parser_parenthesized_expression_list()
4803 token = cp_lexer_consume_token (parser->lexer); in cp_parser_parenthesized_expression_list()
4814 (parser, /*allow_non_constant_p=*/true, in cp_parser_parenthesized_expression_list()
4820 expr = cp_parser_assignment_expression (parser, cast_p); in cp_parser_parenthesized_expression_list()
4841 if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA)) in cp_parser_parenthesized_expression_list()
4845 cp_lexer_consume_token (parser->lexer); in cp_parser_parenthesized_expression_list()
4848 if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'")) in cp_parser_parenthesized_expression_list()
4855 ending = cp_parser_skip_to_closing_parenthesis (parser, in cp_parser_parenthesized_expression_list()
4886 cp_parser_pseudo_destructor_name (cp_parser* parser, in cp_parser_pseudo_destructor_name() argument
4896 cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true); in cp_parser_pseudo_destructor_name()
4899 = (cp_parser_nested_name_specifier_opt (parser, in cp_parser_pseudo_destructor_name()
4908 && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE)) in cp_parser_pseudo_destructor_name()
4911 cp_lexer_consume_token (parser->lexer); in cp_parser_pseudo_destructor_name()
4913 cp_parser_template_id (parser, in cp_parser_pseudo_destructor_name()
4918 cp_parser_require (parser, CPP_SCOPE, "`::'"); in cp_parser_pseudo_destructor_name()
4922 else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL)) in cp_parser_pseudo_destructor_name()
4925 *scope = TREE_TYPE (cp_parser_type_name (parser)); in cp_parser_pseudo_destructor_name()
4935 if (cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE) in cp_parser_pseudo_destructor_name()
4936 || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_COMPL) in cp_parser_pseudo_destructor_name()
4938 cp_parser_error (parser, "request for member of non-aggregate type"); in cp_parser_pseudo_destructor_name()
4943 cp_parser_require (parser, CPP_SCOPE, "`::'"); in cp_parser_pseudo_destructor_name()
4949 cp_parser_require (parser, CPP_COMPL, "`~'"); in cp_parser_pseudo_destructor_name()
4952 *type = cp_parser_type_name (parser); in cp_parser_pseudo_destructor_name()
4984 cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p) in cp_parser_unary_expression() argument
4990 token = cp_lexer_peek_token (parser->lexer); in cp_parser_unary_expression()
5006 cp_lexer_consume_token (parser->lexer); in cp_parser_unary_expression()
5008 operand = cp_parser_sizeof_operand (parser, keyword); in cp_parser_unary_expression()
5017 return cp_parser_new_expression (parser); in cp_parser_unary_expression()
5020 return cp_parser_delete_expression (parser); in cp_parser_unary_expression()
5029 cp_parser_extension_opt (parser, &saved_pedantic); in cp_parser_unary_expression()
5031 expr = cp_parser_simple_cast_expression (parser); in cp_parser_unary_expression()
5044 cp_lexer_consume_token (parser->lexer); in cp_parser_unary_expression()
5046 expression = cp_parser_simple_cast_expression (parser); in cp_parser_unary_expression()
5063 if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)) in cp_parser_unary_expression()
5069 keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword; in cp_parser_unary_expression()
5072 return cp_parser_new_expression (parser); in cp_parser_unary_expression()
5075 return cp_parser_delete_expression (parser); in cp_parser_unary_expression()
5089 else if (cp_parser_allow_gnu_extensions_p (parser) in cp_parser_unary_expression()
5095 cp_lexer_consume_token (parser->lexer); in cp_parser_unary_expression()
5097 identifier = cp_parser_identifier (parser); in cp_parser_unary_expression()
5109 token = cp_lexer_consume_token (parser->lexer); in cp_parser_unary_expression()
5112 = cp_parser_cast_expression (parser, in cp_parser_unary_expression()
5146 && cp_parser_non_integral_constant_expression (parser, in cp_parser_unary_expression()
5153 return cp_parser_postfix_expression (parser, address_p, cast_p); in cp_parser_unary_expression()
5196 cp_parser_new_expression (cp_parser* parser) in cp_parser_new_expression() argument
5206 = (cp_parser_global_scope_opt (parser, in cp_parser_new_expression()
5210 cp_parser_require_keyword (parser, RID_NEW, "`new'"); in cp_parser_new_expression()
5213 cp_parser_parse_tentatively (parser); in cp_parser_new_expression()
5215 placement = cp_parser_new_placement (parser); in cp_parser_new_expression()
5217 if (!cp_parser_parse_definitely (parser)) in cp_parser_new_expression()
5222 if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)) in cp_parser_new_expression()
5225 cp_lexer_consume_token (parser->lexer); in cp_parser_new_expression()
5227 type = cp_parser_type_id (parser); in cp_parser_new_expression()
5229 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_new_expression()
5233 if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE)) in cp_parser_new_expression()
5237 cp_parser_direct_new_declarator (parser); in cp_parser_new_expression()
5243 type = cp_parser_new_type_id (parser, &nelts); in cp_parser_new_expression()
5246 if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)) in cp_parser_new_expression()
5247 initializer = cp_parser_new_initializer (parser); in cp_parser_new_expression()
5253 if (cp_parser_non_integral_constant_expression (parser, "`new'")) in cp_parser_new_expression()
5268 cp_parser_new_placement (cp_parser* parser) in cp_parser_new_placement() argument
5274 (parser, false, /*cast_p=*/false, in cp_parser_new_placement()
5290 cp_parser_new_type_id (cp_parser* parser, tree *nelts) in cp_parser_new_type_id() argument
5303 saved_message = parser->type_definition_forbidden_message; in cp_parser_new_type_id()
5304 parser->type_definition_forbidden_message in cp_parser_new_type_id()
5307 cp_parser_type_specifier_seq (parser, /*is_condition=*/false, in cp_parser_new_type_id()
5310 parser->type_definition_forbidden_message = saved_message; in cp_parser_new_type_id()
5312 new_declarator = cp_parser_new_declarator_opt (parser); in cp_parser_new_type_id()
5365 cp_parser_new_declarator_opt (cp_parser* parser) in cp_parser_new_declarator_opt() argument
5372 cp_parser_parse_tentatively (parser); in cp_parser_new_declarator_opt()
5374 code = cp_parser_ptr_operator (parser, &type, &cv_quals); in cp_parser_new_declarator_opt()
5376 if (cp_parser_parse_definitely (parser)) in cp_parser_new_declarator_opt()
5381 declarator = cp_parser_new_declarator_opt (parser); in cp_parser_new_declarator_opt()
5395 if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE)) in cp_parser_new_declarator_opt()
5396 return cp_parser_direct_new_declarator (parser); in cp_parser_new_declarator_opt()
5410 cp_parser_direct_new_declarator (cp_parser* parser) in cp_parser_direct_new_declarator() argument
5419 cp_parser_require (parser, CPP_OPEN_SQUARE, "`['"); in cp_parser_direct_new_declarator()
5423 expression = cp_parser_expression (parser, /*cast_p=*/false); in cp_parser_direct_new_declarator()
5447 = cp_parser_constant_expression (parser, in cp_parser_direct_new_declarator()
5451 cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"); in cp_parser_direct_new_declarator()
5458 if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE)) in cp_parser_direct_new_declarator()
5474 cp_parser_new_initializer (cp_parser* parser) in cp_parser_new_initializer() argument
5479 (parser, false, /*cast_p=*/false, in cp_parser_new_initializer()
5496 cp_parser_delete_expression (cp_parser* parser) in cp_parser_delete_expression() argument
5504 = (cp_parser_global_scope_opt (parser, in cp_parser_delete_expression()
5508 cp_parser_require_keyword (parser, RID_DELETE, "`delete'"); in cp_parser_delete_expression()
5510 if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE)) in cp_parser_delete_expression()
5513 cp_lexer_consume_token (parser->lexer); in cp_parser_delete_expression()
5515 cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"); in cp_parser_delete_expression()
5523 expression = cp_parser_simple_cast_expression (parser); in cp_parser_delete_expression()
5527 if (cp_parser_non_integral_constant_expression (parser, "`delete'")) in cp_parser_delete_expression()
5546 cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p) in cp_parser_cast_expression() argument
5549 if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)) in cp_parser_cast_expression()
5559 cp_parser_parse_tentatively (parser); in cp_parser_cast_expression()
5561 saved_message = parser->type_definition_forbidden_message; in cp_parser_cast_expression()
5562 parser->type_definition_forbidden_message in cp_parser_cast_expression()
5565 cp_lexer_consume_token (parser->lexer); in cp_parser_cast_expression()
5582 cp_lexer_save_tokens (parser->lexer); in cp_parser_cast_expression()
5587 = (cp_parser_skip_to_closing_parenthesis (parser, false, false, in cp_parser_cast_expression()
5589 && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)); in cp_parser_cast_expression()
5591 cp_lexer_rollback_tokens (parser->lexer); in cp_parser_cast_expression()
5596 cp_parser_simulate_error (parser); in cp_parser_cast_expression()
5599 bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p; in cp_parser_cast_expression()
5600 parser->in_type_id_in_expr_p = true; in cp_parser_cast_expression()
5602 type = cp_parser_type_id (parser); in cp_parser_cast_expression()
5604 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_cast_expression()
5605 parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p; in cp_parser_cast_expression()
5609 parser->type_definition_forbidden_message = saved_message; in cp_parser_cast_expression()
5615 if (!cp_parser_error_occurred (parser)) in cp_parser_cast_expression()
5616 expr = cp_parser_cast_expression (parser, in cp_parser_cast_expression()
5620 if (cp_parser_parse_definitely (parser)) in cp_parser_cast_expression()
5633 (parser, in cp_parser_cast_expression()
5646 return cp_parser_unary_expression (parser, address_p, cast_p); in cp_parser_cast_expression()
5722 ((token->type == CPP_GREATER && !parser->greater_than_is_operator_p) \
5727 cp_parser_binary_expression (cp_parser* parser, bool cast_p) in cp_parser_binary_expression() argument
5738 lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p); in cp_parser_binary_expression()
5743 token = cp_lexer_peek_token (parser->lexer); in cp_parser_binary_expression()
5766 cp_lexer_consume_token (parser->lexer); in cp_parser_binary_expression()
5770 rhs = cp_parser_simple_cast_expression (parser); in cp_parser_binary_expression()
5775 token = cp_lexer_peek_token (parser->lexer); in cp_parser_binary_expression()
5818 (parser, "calls to overloaded operators"))) in cp_parser_binary_expression()
5840 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr) in cp_parser_question_colon_clause() argument
5846 cp_lexer_consume_token (parser->lexer); in cp_parser_question_colon_clause()
5847 if (cp_parser_allow_gnu_extensions_p (parser) in cp_parser_question_colon_clause()
5848 && cp_lexer_next_token_is (parser->lexer, CPP_COLON)) in cp_parser_question_colon_clause()
5853 expr = cp_parser_expression (parser, /*cast_p=*/false); in cp_parser_question_colon_clause()
5856 cp_parser_require (parser, CPP_COLON, "`:'"); in cp_parser_question_colon_clause()
5858 assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false); in cp_parser_question_colon_clause()
5878 cp_parser_assignment_expression (cp_parser* parser, bool cast_p) in cp_parser_assignment_expression() argument
5884 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW)) in cp_parser_assignment_expression()
5885 expr = cp_parser_throw_expression (parser); in cp_parser_assignment_expression()
5891 expr = cp_parser_binary_expression (parser, cast_p); in cp_parser_assignment_expression()
5894 if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY)) in cp_parser_assignment_expression()
5895 return cp_parser_question_colon_clause (parser, expr); in cp_parser_assignment_expression()
5903 = cp_parser_assignment_operator_opt (parser); in cp_parser_assignment_expression()
5909 rhs = cp_parser_assignment_expression (parser, cast_p); in cp_parser_assignment_expression()
5912 if (cp_parser_non_integral_constant_expression (parser, in cp_parser_assignment_expression()
5944 cp_parser_assignment_operator_opt (cp_parser* parser) in cp_parser_assignment_operator_opt() argument
5950 token = cp_lexer_peek_token (parser->lexer); in cp_parser_assignment_operator_opt()
6005 cp_lexer_consume_token (parser->lexer); in cp_parser_assignment_operator_opt()
6021 cp_parser_expression (cp_parser* parser, bool cast_p) in cp_parser_expression() argument
6031 = cp_parser_assignment_expression (parser, cast_p); in cp_parser_expression()
6041 if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA)) in cp_parser_expression()
6044 cp_lexer_consume_token (parser->lexer); in cp_parser_expression()
6046 if (cp_parser_non_integral_constant_expression (parser, in cp_parser_expression()
6065 cp_parser_constant_expression (cp_parser* parser, in cp_parser_constant_expression() argument
6092 saved_integral_constant_expression_p = parser->integral_constant_expression_p; in cp_parser_constant_expression()
6094 = parser->allow_non_integral_constant_expression_p; in cp_parser_constant_expression()
6095 saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p; in cp_parser_constant_expression()
6097 parser->integral_constant_expression_p = true; in cp_parser_constant_expression()
6098 parser->allow_non_integral_constant_expression_p = allow_non_constant_p; in cp_parser_constant_expression()
6099 parser->non_integral_constant_expression_p = false; in cp_parser_constant_expression()
6109 expression = cp_parser_assignment_expression (parser, /*cast_p=*/false); in cp_parser_constant_expression()
6111 parser->integral_constant_expression_p in cp_parser_constant_expression()
6113 parser->allow_non_integral_constant_expression_p in cp_parser_constant_expression()
6116 *non_constant_p = parser->non_integral_constant_expression_p; in cp_parser_constant_expression()
6117 else if (parser->non_integral_constant_expression_p) in cp_parser_constant_expression()
6119 parser->non_integral_constant_expression_p in cp_parser_constant_expression()
6136 cp_parser_builtin_offsetof (cp_parser *parser) in cp_parser_builtin_offsetof() argument
6145 save_ice_p = parser->integral_constant_expression_p; in cp_parser_builtin_offsetof()
6146 save_non_ice_p = parser->non_integral_constant_expression_p; in cp_parser_builtin_offsetof()
6149 cp_lexer_consume_token (parser->lexer); in cp_parser_builtin_offsetof()
6151 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_builtin_offsetof()
6153 type = cp_parser_type_id (parser); in cp_parser_builtin_offsetof()
6155 cp_parser_require (parser, CPP_COMMA, "`,'"); in cp_parser_builtin_offsetof()
6161 expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr, in cp_parser_builtin_offsetof()
6165 cp_token *token = cp_lexer_peek_token (parser->lexer); in cp_parser_builtin_offsetof()
6170 expr = cp_parser_postfix_open_square_expression (parser, expr, true); in cp_parser_builtin_offsetof()
6175 cp_lexer_consume_token (parser->lexer); in cp_parser_builtin_offsetof()
6176 expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT, expr, in cp_parser_builtin_offsetof()
6182 cp_lexer_consume_token (parser->lexer); in cp_parser_builtin_offsetof()
6188 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_builtin_offsetof()
6189 cp_parser_skip_to_closing_parenthesis (parser, true, false, true); in cp_parser_builtin_offsetof()
6204 parser->integral_constant_expression_p = save_ice_p; in cp_parser_builtin_offsetof()
6205 parser->non_integral_constant_expression_p = save_non_ice_p; in cp_parser_builtin_offsetof()
6228 cp_parser_statement (cp_parser* parser, tree in_statement_expr, in cp_parser_statement() argument
6239 token = cp_lexer_peek_token (parser->lexer); in cp_parser_statement()
6255 cp_parser_label_for_labeled_statement (parser); in cp_parser_statement()
6260 statement = cp_parser_selection_statement (parser); in cp_parser_statement()
6266 statement = cp_parser_iteration_statement (parser); in cp_parser_statement()
6273 statement = cp_parser_jump_statement (parser); in cp_parser_statement()
6282 statement = cp_parser_objc_statement (parser); in cp_parser_statement()
6286 statement = cp_parser_try_block (parser); in cp_parser_statement()
6299 token = cp_lexer_peek_nth_token (parser->lexer, 2); in cp_parser_statement()
6305 cp_parser_label_for_labeled_statement (parser); in cp_parser_statement()
6311 statement = cp_parser_compound_statement (parser, NULL, false); in cp_parser_statement()
6322 cp_parser_pragma (parser, pragma_compound); in cp_parser_statement()
6323 else if (!cp_parser_pragma (parser, pragma_stmt)) in cp_parser_statement()
6329 cp_parser_error (parser, "expected statement"); in cp_parser_statement()
6339 if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)) in cp_parser_statement()
6341 cp_parser_parse_tentatively (parser); in cp_parser_statement()
6343 cp_parser_declaration_statement (parser); in cp_parser_statement()
6345 if (cp_parser_parse_definitely (parser)) in cp_parser_statement()
6349 statement = cp_parser_expression_statement (parser, in_statement_expr); in cp_parser_statement()
6371 cp_parser_label_for_labeled_statement (cp_parser* parser) in cp_parser_label_for_labeled_statement() argument
6376 token = cp_lexer_peek_token (parser->lexer); in cp_parser_label_for_labeled_statement()
6380 cp_parser_error (parser, "expected labeled-statement"); in cp_parser_label_for_labeled_statement()
6392 cp_lexer_consume_token (parser->lexer); in cp_parser_label_for_labeled_statement()
6394 expr = cp_parser_constant_expression (parser, in cp_parser_label_for_labeled_statement()
6398 ellipsis = cp_lexer_peek_token (parser->lexer); in cp_parser_label_for_labeled_statement()
6402 cp_lexer_consume_token (parser->lexer); in cp_parser_label_for_labeled_statement()
6404 cp_parser_constant_expression (parser, in cp_parser_label_for_labeled_statement()
6413 if (parser->in_switch_statement_p) in cp_parser_label_for_labeled_statement()
6422 cp_lexer_consume_token (parser->lexer); in cp_parser_label_for_labeled_statement()
6424 if (parser->in_switch_statement_p) in cp_parser_label_for_labeled_statement()
6432 finish_label_stmt (cp_parser_identifier (parser)); in cp_parser_label_for_labeled_statement()
6437 cp_parser_require (parser, CPP_COLON, "`:'"); in cp_parser_label_for_labeled_statement()
6451 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr) in cp_parser_expression_statement() argument
6457 if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)) in cp_parser_expression_statement()
6458 statement = cp_parser_expression (parser, /*cast_p=*/false); in cp_parser_expression_statement()
6461 cp_parser_consume_semicolon_at_end_of_statement (parser); in cp_parser_expression_statement()
6464 && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE)) in cp_parser_expression_statement()
6484 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr, in cp_parser_compound_statement() argument
6490 if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'")) in cp_parser_compound_statement()
6495 cp_parser_statement_seq_opt (parser, in_statement_expr); in cp_parser_compound_statement()
6499 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'"); in cp_parser_compound_statement()
6511 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr) in cp_parser_statement_seq_opt() argument
6516 cp_token *token = cp_lexer_peek_token (parser->lexer); in cp_parser_statement_seq_opt()
6525 cp_parser_statement (parser, in_statement_expr, true); in cp_parser_statement_seq_opt()
6539 cp_parser_selection_statement (cp_parser* parser) in cp_parser_selection_statement() argument
6545 token = cp_parser_require (parser, CPP_KEYWORD, "selection-statement"); in cp_parser_selection_statement()
6558 if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('")) in cp_parser_selection_statement()
6560 cp_parser_skip_to_end_of_statement (parser); in cp_parser_selection_statement()
6571 condition = cp_parser_condition (parser); in cp_parser_selection_statement()
6573 if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'")) in cp_parser_selection_statement()
6574 cp_parser_skip_to_closing_parenthesis (parser, true, false, in cp_parser_selection_statement()
6583 cp_parser_implicitly_scoped_statement (parser); in cp_parser_selection_statement()
6587 if (cp_lexer_next_token_is_keyword (parser->lexer, in cp_parser_selection_statement()
6591 cp_lexer_consume_token (parser->lexer); in cp_parser_selection_statement()
6594 cp_parser_implicitly_scoped_statement (parser); in cp_parser_selection_statement()
6610 in_switch_statement_p = parser->in_switch_statement_p; in cp_parser_selection_statement()
6611 in_statement = parser->in_statement; in cp_parser_selection_statement()
6612 parser->in_switch_statement_p = true; in cp_parser_selection_statement()
6613 parser->in_statement |= IN_SWITCH_STMT; in cp_parser_selection_statement()
6614 cp_parser_implicitly_scoped_statement (parser); in cp_parser_selection_statement()
6615 parser->in_switch_statement_p = in_switch_statement_p; in cp_parser_selection_statement()
6616 parser->in_statement = in_statement; in cp_parser_selection_statement()
6627 cp_parser_error (parser, "expected selection-statement"); in cp_parser_selection_statement()
6647 cp_parser_condition (cp_parser* parser) in cp_parser_condition() argument
6653 cp_parser_parse_tentatively (parser); in cp_parser_condition()
6656 saved_message = parser->type_definition_forbidden_message; in cp_parser_condition()
6657 parser->type_definition_forbidden_message in cp_parser_condition()
6660 cp_parser_type_specifier_seq (parser, /*is_condition==*/true, in cp_parser_condition()
6663 parser->type_definition_forbidden_message = saved_message; in cp_parser_condition()
6665 if (!cp_parser_error_occurred (parser)) in cp_parser_condition()
6674 declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED, in cp_parser_condition()
6679 attributes = cp_parser_attributes_opt (parser); in cp_parser_condition()
6681 asm_specification = cp_parser_asm_specification_opt (parser); in cp_parser_condition()
6689 cp_parser_require (parser, CPP_EQ, "`='"); in cp_parser_condition()
6692 if (cp_parser_parse_definitely (parser)) in cp_parser_condition()
6704 = cp_parser_constant_expression (parser, in cp_parser_condition()
6725 cp_parser_abort_tentative_parse (parser); in cp_parser_condition()
6728 return cp_parser_expression (parser, /*cast_p=*/false); in cp_parser_condition()
6742 cp_parser_iteration_statement (cp_parser* parser) in cp_parser_iteration_statement() argument
6750 token = cp_parser_require (parser, CPP_KEYWORD, "iteration-statement"); in cp_parser_iteration_statement()
6756 in_statement = parser->in_statement; in cp_parser_iteration_statement()
6769 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_iteration_statement()
6771 condition = cp_parser_condition (parser); in cp_parser_iteration_statement()
6774 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_iteration_statement()
6776 parser->in_statement = IN_ITERATION_STMT; in cp_parser_iteration_statement()
6777 cp_parser_already_scoped_statement (parser); in cp_parser_iteration_statement()
6778 parser->in_statement = in_statement; in cp_parser_iteration_statement()
6791 parser->in_statement = IN_ITERATION_STMT; in cp_parser_iteration_statement()
6792 cp_parser_implicitly_scoped_statement (parser); in cp_parser_iteration_statement()
6793 parser->in_statement = in_statement; in cp_parser_iteration_statement()
6796 cp_parser_require_keyword (parser, RID_WHILE, "`while'"); in cp_parser_iteration_statement()
6798 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_iteration_statement()
6800 expression = cp_parser_expression (parser, /*cast_p=*/false); in cp_parser_iteration_statement()
6804 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_iteration_statement()
6806 cp_parser_require (parser, CPP_SEMICOLON, "`;'"); in cp_parser_iteration_statement()
6818 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_iteration_statement()
6820 cp_parser_for_init_statement (parser); in cp_parser_iteration_statement()
6824 if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)) in cp_parser_iteration_statement()
6825 condition = cp_parser_condition (parser); in cp_parser_iteration_statement()
6828 cp_parser_require (parser, CPP_SEMICOLON, "`;'"); in cp_parser_iteration_statement()
6831 if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)) in cp_parser_iteration_statement()
6832 expression = cp_parser_expression (parser, /*cast_p=*/false); in cp_parser_iteration_statement()
6835 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_iteration_statement()
6838 parser->in_statement = IN_ITERATION_STMT; in cp_parser_iteration_statement()
6839 cp_parser_already_scoped_statement (parser); in cp_parser_iteration_statement()
6840 parser->in_statement = in_statement; in cp_parser_iteration_statement()
6848 cp_parser_error (parser, "expected iteration-statement"); in cp_parser_iteration_statement()
6863 cp_parser_for_init_statement (cp_parser* parser) in cp_parser_for_init_statement() argument
6871 if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)) in cp_parser_for_init_statement()
6875 cp_parser_parse_tentatively (parser); in cp_parser_for_init_statement()
6877 cp_parser_simple_declaration (parser, in cp_parser_for_init_statement()
6881 if (cp_parser_parse_definitely (parser)) in cp_parser_for_init_statement()
6885 cp_parser_expression_statement (parser, false); in cp_parser_for_init_statement()
6904 cp_parser_jump_statement (cp_parser* parser) in cp_parser_jump_statement() argument
6911 token = cp_parser_require (parser, CPP_KEYWORD, "jump-statement"); in cp_parser_jump_statement()
6920 switch (parser->in_statement) in cp_parser_jump_statement()
6926 gcc_assert ((parser->in_statement & IN_SWITCH_STMT) in cp_parser_jump_statement()
6927 || parser->in_statement == IN_ITERATION_STMT); in cp_parser_jump_statement()
6937 cp_parser_require (parser, CPP_SEMICOLON, "%<;%>"); in cp_parser_jump_statement()
6941 switch (parser->in_statement & ~IN_SWITCH_STMT) in cp_parser_jump_statement()
6956 cp_parser_require (parser, CPP_SEMICOLON, "%<;%>"); in cp_parser_jump_statement()
6965 if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)) in cp_parser_jump_statement()
6966 expr = cp_parser_expression (parser, /*cast_p=*/false); in cp_parser_jump_statement()
6972 cp_parser_require (parser, CPP_SEMICOLON, "%<;%>"); in cp_parser_jump_statement()
6978 if (cp_lexer_next_token_is (parser->lexer, CPP_MULT)) in cp_parser_jump_statement()
6984 cp_lexer_consume_token (parser->lexer); in cp_parser_jump_statement()
6986 finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false)); in cp_parser_jump_statement()
6989 finish_goto_stmt (cp_parser_identifier (parser)); in cp_parser_jump_statement()
6991 cp_parser_require (parser, CPP_SEMICOLON, "%<;%>"); in cp_parser_jump_statement()
6995 cp_parser_error (parser, "expected jump-statement"); in cp_parser_jump_statement()
7008 cp_parser_declaration_statement (cp_parser* parser) in cp_parser_declaration_statement() argument
7016 cp_parser_block_declaration (parser, /*statement_p=*/true); in cp_parser_declaration_statement()
7037 cp_parser_implicitly_scoped_statement (cp_parser* parser) in cp_parser_implicitly_scoped_statement() argument
7042 if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)) in cp_parser_implicitly_scoped_statement()
7044 cp_lexer_consume_token (parser->lexer); in cp_parser_implicitly_scoped_statement()
7048 else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) in cp_parser_implicitly_scoped_statement()
7049 statement = cp_parser_compound_statement (parser, NULL, false); in cp_parser_implicitly_scoped_statement()
7056 cp_parser_statement (parser, NULL_TREE, false); in cp_parser_implicitly_scoped_statement()
7071 cp_parser_already_scoped_statement (cp_parser* parser) in cp_parser_already_scoped_statement() argument
7074 if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)) in cp_parser_already_scoped_statement()
7075 cp_parser_statement (parser, NULL_TREE, false); in cp_parser_already_scoped_statement()
7080 cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"); in cp_parser_already_scoped_statement()
7081 cp_parser_statement_seq_opt (parser, NULL_TREE); in cp_parser_already_scoped_statement()
7082 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'"); in cp_parser_already_scoped_statement()
7095 cp_parser_declaration_seq_opt (cp_parser* parser) in cp_parser_declaration_seq_opt() argument
7101 token = cp_lexer_peek_token (parser->lexer); in cp_parser_declaration_seq_opt()
7112 cp_lexer_consume_token (parser->lexer); in cp_parser_declaration_seq_opt()
7120 if (!parser->implicit_extern_c && token->implicit_extern_c) in cp_parser_declaration_seq_opt()
7123 parser->implicit_extern_c = true; in cp_parser_declaration_seq_opt()
7125 else if (parser->implicit_extern_c && !token->implicit_extern_c) in cp_parser_declaration_seq_opt()
7128 parser->implicit_extern_c = false; in cp_parser_declaration_seq_opt()
7137 cp_parser_pragma (parser, pragma_external); in cp_parser_declaration_seq_opt()
7142 cp_parser_declaration (parser); in cp_parser_declaration_seq_opt()
7163 cp_parser_declaration (cp_parser* parser) in cp_parser_declaration() argument
7171 if (cp_parser_extension_opt (parser, &saved_pedantic)) in cp_parser_declaration()
7174 cp_parser_declaration (parser); in cp_parser_declaration()
7182 token1 = *cp_lexer_peek_token (parser->lexer); in cp_parser_declaration()
7185 token2 = *cp_lexer_peek_nth_token (parser->lexer, 2); in cp_parser_declaration()
7199 cp_parser_linkage_specification (parser); in cp_parser_declaration()
7207 && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER) in cp_parser_declaration()
7208 cp_parser_explicit_specialization (parser); in cp_parser_declaration()
7211 cp_parser_template_declaration (parser, /*member_p=*/false); in cp_parser_declaration()
7214 cp_parser_explicit_instantiation (parser); in cp_parser_declaration()
7219 cp_parser_template_declaration (parser, /*member_p=*/false); in cp_parser_declaration()
7223 else if (cp_parser_allow_gnu_extensions_p (parser) in cp_parser_declaration()
7228 cp_parser_explicit_instantiation (parser); in cp_parser_declaration()
7234 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type in cp_parser_declaration()
7239 cp_parser_namespace_definition (parser); in cp_parser_declaration()
7242 cp_parser_objc_declaration (parser); in cp_parser_declaration()
7247 cp_parser_block_declaration (parser, /*statement_p=*/false); in cp_parser_declaration()
7272 cp_parser_block_declaration (cp_parser *parser, in cp_parser_block_declaration() argument
7279 if (cp_parser_extension_opt (parser, &saved_pedantic)) in cp_parser_block_declaration()
7282 cp_parser_block_declaration (parser, statement_p); in cp_parser_block_declaration()
7291 token1 = cp_lexer_peek_token (parser->lexer); in cp_parser_block_declaration()
7297 cp_parser_commit_to_tentative_parse (parser); in cp_parser_block_declaration()
7298 cp_parser_asm_definition (parser); in cp_parser_block_declaration()
7303 cp_parser_namespace_alias_definition (parser); in cp_parser_block_declaration()
7311 cp_parser_commit_to_tentative_parse (parser); in cp_parser_block_declaration()
7314 token2 = cp_lexer_peek_nth_token (parser->lexer, 2); in cp_parser_block_declaration()
7316 cp_parser_using_directive (parser); in cp_parser_block_declaration()
7319 cp_parser_using_declaration (parser, in cp_parser_block_declaration()
7326 cp_parser_commit_to_tentative_parse (parser); in cp_parser_block_declaration()
7327 cp_parser_label_declaration (parser); in cp_parser_block_declaration()
7331 cp_parser_simple_declaration (parser, !statement_p); in cp_parser_block_declaration()
7347 cp_parser_simple_declaration (cp_parser* parser, in cp_parser_simple_declaration() argument
7370 cp_parser_decl_specifier_seq (parser, in cp_parser_simple_declaration()
7383 cp_parser_error (parser, "expected declaration"); in cp_parser_simple_declaration()
7394 && cp_parser_parse_and_diagnose_invalid_type_name (parser)) in cp_parser_simple_declaration()
7398 cp_parser_commit_to_tentative_parse (parser); in cp_parser_simple_declaration()
7407 && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN)) in cp_parser_simple_declaration()
7408 cp_parser_commit_to_tentative_parse (parser); in cp_parser_simple_declaration()
7413 while (cp_lexer_next_token_is_not (parser->lexer, in cp_parser_simple_declaration()
7423 token = cp_lexer_peek_token (parser->lexer); in cp_parser_simple_declaration()
7425 cp_lexer_consume_token (parser->lexer); in cp_parser_simple_declaration()
7431 decl = cp_parser_init_declarator (parser, &decl_specifiers, in cp_parser_simple_declaration()
7441 if (cp_parser_error_occurred (parser)) in cp_parser_simple_declaration()
7452 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA)) in cp_parser_simple_declaration()
7462 token = cp_lexer_peek_token (parser->lexer); in cp_parser_simple_declaration()
7475 || cp_parser_uncommitted_to_tentative_parse_p (parser)) in cp_parser_simple_declaration()
7476 cp_parser_error (parser, "expected %<,%> or %<;%>"); in cp_parser_simple_declaration()
7478 cp_parser_skip_to_end_of_statement (parser); in cp_parser_simple_declaration()
7480 if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)) in cp_parser_simple_declaration()
7481 cp_lexer_consume_token (parser->lexer); in cp_parser_simple_declaration()
7498 if (cp_parser_declares_only_class_p (parser)) in cp_parser_simple_declaration()
7505 cp_parser_require (parser, CPP_SEMICOLON, "`;'"); in cp_parser_simple_declaration()
7530 The parser flags FLAGS is used to control type-specifier parsing.
7543 cp_parser_decl_specifier_seq (cp_parser* parser, in cp_parser_decl_specifier_seq() argument
7548 bool constructor_possible_p = !parser->in_declarator_p; in cp_parser_decl_specifier_seq()
7564 token = cp_lexer_peek_token (parser->lexer); in cp_parser_decl_specifier_seq()
7571 cp_parser_attributes_opt (parser)); in cp_parser_decl_specifier_seq()
7586 cp_lexer_purge_token (parser->lexer); in cp_parser_decl_specifier_seq()
7592 cp_lexer_consume_token (parser->lexer); in cp_parser_decl_specifier_seq()
7603 cp_parser_function_specifier_opt (parser, decl_specs); in cp_parser_decl_specifier_seq()
7611 cp_lexer_consume_token (parser->lexer); in cp_parser_decl_specifier_seq()
7616 cp_parser_commit_to_tentative_parse (parser); in cp_parser_decl_specifier_seq()
7637 cp_lexer_consume_token (parser->lexer); in cp_parser_decl_specifier_seq()
7638 cp_parser_set_storage_class (parser, decl_specs, token->keyword); in cp_parser_decl_specifier_seq()
7642 cp_lexer_consume_token (parser->lexer); in cp_parser_decl_specifier_seq()
7658 (parser, decl_specs->specs[(int) ds_friend] != 0))); in cp_parser_decl_specifier_seq()
7669 = cp_parser_type_specifier (parser, flags, in cp_parser_decl_specifier_seq()
7759 cp_parser_storage_class_specifier_opt (cp_parser* parser) in cp_parser_storage_class_specifier_opt() argument
7761 switch (cp_lexer_peek_token (parser->lexer)->keyword) in cp_parser_storage_class_specifier_opt()
7770 return cp_lexer_consume_token (parser->lexer)->u.value; in cp_parser_storage_class_specifier_opt()
7788 cp_parser_function_specifier_opt (cp_parser* parser, in cp_parser_function_specifier_opt() argument
7791 switch (cp_lexer_peek_token (parser->lexer)->keyword) in cp_parser_function_specifier_opt()
7818 return cp_lexer_consume_token (parser->lexer)->u.value; in cp_parser_function_specifier_opt()
7828 cp_parser_linkage_specification (cp_parser* parser) in cp_parser_linkage_specification() argument
7833 cp_parser_require_keyword (parser, RID_EXTERN, "`extern'"); in cp_parser_linkage_specification()
7836 linkage = cp_parser_string_literal (parser, false, false); in cp_parser_linkage_specification()
7844 cp_parser_error (parser, "invalid linkage-specification"); in cp_parser_linkage_specification()
7856 if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) in cp_parser_linkage_specification()
7859 cp_lexer_consume_token (parser->lexer); in cp_parser_linkage_specification()
7861 cp_parser_declaration_seq_opt (parser); in cp_parser_linkage_specification()
7863 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'"); in cp_parser_linkage_specification()
7871 = parser->in_unbraced_linkage_specification_p; in cp_parser_linkage_specification()
7872 parser->in_unbraced_linkage_specification_p = true; in cp_parser_linkage_specification()
7873 cp_parser_declaration (parser); in cp_parser_linkage_specification()
7874 parser->in_unbraced_linkage_specification_p in cp_parser_linkage_specification()
7892 cp_parser_conversion_function_id (cp_parser* parser) in cp_parser_conversion_function_id() argument
7901 if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'")) in cp_parser_conversion_function_id()
7906 saved_scope = parser->scope; in cp_parser_conversion_function_id()
7907 saved_qualifying_scope = parser->qualifying_scope; in cp_parser_conversion_function_id()
7908 saved_object_scope = parser->object_scope; in cp_parser_conversion_function_id()
7925 type = cp_parser_conversion_type_id (parser); in cp_parser_conversion_function_id()
7930 parser->scope = saved_scope; in cp_parser_conversion_function_id()
7931 parser->qualifying_scope = saved_qualifying_scope; in cp_parser_conversion_function_id()
7932 parser->object_scope = saved_object_scope; in cp_parser_conversion_function_id()
7947 cp_parser_conversion_type_id (cp_parser* parser) in cp_parser_conversion_type_id() argument
7955 attributes = cp_parser_attributes_opt (parser); in cp_parser_conversion_type_id()
7957 cp_parser_type_specifier_seq (parser, /*is_condition=*/false, in cp_parser_conversion_type_id()
7963 declarator = cp_parser_conversion_declarator_opt (parser); in cp_parser_conversion_type_id()
7980 cp_parser_conversion_declarator_opt (cp_parser* parser) in cp_parser_conversion_declarator_opt() argument
7987 cp_parser_parse_tentatively (parser); in cp_parser_conversion_declarator_opt()
7989 code = cp_parser_ptr_operator (parser, &class_type, &cv_quals); in cp_parser_conversion_declarator_opt()
7991 if (cp_parser_parse_definitely (parser)) in cp_parser_conversion_declarator_opt()
7996 declarator = cp_parser_conversion_declarator_opt (parser); in cp_parser_conversion_declarator_opt()
8021 cp_parser_ctor_initializer_opt (cp_parser* parser) in cp_parser_ctor_initializer_opt() argument
8025 if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)) in cp_parser_ctor_initializer_opt()
8035 cp_lexer_consume_token (parser->lexer); in cp_parser_ctor_initializer_opt()
8037 cp_parser_mem_initializer_list (parser); in cp_parser_ctor_initializer_opt()
8049 cp_parser_mem_initializer_list (cp_parser* parser) in cp_parser_mem_initializer_list() argument
8064 mem_initializer = cp_parser_mem_initializer (parser); in cp_parser_mem_initializer_list()
8072 if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA)) in cp_parser_mem_initializer_list()
8075 cp_lexer_consume_token (parser->lexer); in cp_parser_mem_initializer_list()
8099 cp_parser_mem_initializer (cp_parser* parser) in cp_parser_mem_initializer() argument
8106 if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)) in cp_parser_mem_initializer()
8112 mem_initializer_id = cp_parser_mem_initializer_id (parser); in cp_parser_mem_initializer()
8118 = cp_parser_parenthesized_expression_list (parser, false, in cp_parser_mem_initializer()
8142 cp_parser_mem_initializer_id (cp_parser* parser) in cp_parser_mem_initializer_id() argument
8150 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME)) in cp_parser_mem_initializer_id()
8154 cp_lexer_consume_token (parser->lexer); in cp_parser_mem_initializer_id()
8158 = (cp_parser_global_scope_opt (parser, in cp_parser_mem_initializer_id()
8174 = (cp_parser_nested_name_specifier_opt (parser, in cp_parser_mem_initializer_id()
8181 template_p = cp_parser_optional_template_keyword (parser); in cp_parser_mem_initializer_id()
8185 return cp_parser_class_name (parser, in cp_parser_mem_initializer_id()
8193 cp_parser_parse_tentatively (parser); in cp_parser_mem_initializer_id()
8195 id = cp_parser_class_name (parser, in cp_parser_mem_initializer_id()
8203 if (cp_parser_parse_definitely (parser)) in cp_parser_mem_initializer_id()
8206 return cp_parser_identifier (parser); in cp_parser_mem_initializer_id()
8220 cp_parser_operator_function_id (cp_parser* parser) in cp_parser_operator_function_id() argument
8223 if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'")) in cp_parser_operator_function_id()
8226 return cp_parser_operator (parser); in cp_parser_operator_function_id()
8245 cp_parser_operator (cp_parser* parser) in cp_parser_operator() argument
8251 token = cp_lexer_peek_token (parser->lexer); in cp_parser_operator()
8268 cp_lexer_consume_token (parser->lexer); in cp_parser_operator()
8271 token = cp_lexer_peek_token (parser->lexer); in cp_parser_operator()
8277 cp_lexer_consume_token (parser->lexer); in cp_parser_operator()
8279 cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"); in cp_parser_operator()
8436 cp_lexer_consume_token (parser->lexer); in cp_parser_operator()
8438 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_operator()
8443 cp_lexer_consume_token (parser->lexer); in cp_parser_operator()
8445 cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"); in cp_parser_operator()
8456 cp_lexer_consume_token (parser->lexer); in cp_parser_operator()
8460 cp_parser_error (parser, "expected operator"); in cp_parser_operator()
8489 cp_parser_template_declaration (cp_parser* parser, bool member_p) in cp_parser_template_declaration() argument
8492 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT)) in cp_parser_template_declaration()
8495 cp_lexer_consume_token (parser->lexer); in cp_parser_template_declaration()
8500 cp_parser_template_declaration_after_export (parser, member_p); in cp_parser_template_declaration()
8513 cp_parser_template_parameter_list (cp_parser* parser) in cp_parser_template_parameter_list() argument
8525 parameter = cp_parser_template_parameter (parser, &is_non_type); in cp_parser_template_parameter_list()
8539 token = cp_lexer_peek_token (parser->lexer); in cp_parser_template_parameter_list()
8544 cp_lexer_consume_token (parser->lexer); in cp_parser_template_parameter_list()
8562 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type) in cp_parser_template_parameter() argument
8571 token = cp_lexer_peek_token (parser->lexer); in cp_parser_template_parameter()
8574 return cp_parser_type_parameter (parser); in cp_parser_template_parameter()
8591 token = cp_lexer_peek_nth_token (parser->lexer, 2); in cp_parser_template_parameter()
8594 token = cp_lexer_peek_nth_token (parser->lexer, 3); in cp_parser_template_parameter()
8600 return cp_parser_type_parameter (parser); in cp_parser_template_parameter()
8613 = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true, in cp_parser_template_parameter()
8640 cp_parser_type_parameter (cp_parser* parser) in cp_parser_type_parameter() argument
8646 token = cp_parser_require (parser, CPP_KEYWORD, in cp_parser_type_parameter()
8661 if (cp_lexer_next_token_is (parser->lexer, CPP_NAME)) in cp_parser_type_parameter()
8662 identifier = cp_parser_identifier (parser); in cp_parser_type_parameter()
8670 if (cp_lexer_next_token_is (parser->lexer, CPP_EQ)) in cp_parser_type_parameter()
8673 cp_lexer_consume_token (parser->lexer); in cp_parser_type_parameter()
8676 default_argument = cp_parser_type_id (parser); in cp_parser_type_parameter()
8695 cp_parser_require (parser, CPP_LESS, "`<'"); in cp_parser_type_parameter()
8697 parameter_list = cp_parser_template_parameter_list (parser); in cp_parser_type_parameter()
8699 cp_parser_require (parser, CPP_GREATER, "`>'"); in cp_parser_type_parameter()
8701 cp_parser_require_keyword (parser, RID_CLASS, "`class'"); in cp_parser_type_parameter()
8706 if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ) in cp_parser_type_parameter()
8707 && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER) in cp_parser_type_parameter()
8708 && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA)) in cp_parser_type_parameter()
8710 identifier = cp_parser_identifier (parser); in cp_parser_type_parameter()
8724 if (cp_lexer_next_token_is (parser->lexer, CPP_EQ)) in cp_parser_type_parameter()
8729 cp_lexer_consume_token (parser->lexer); in cp_parser_type_parameter()
8733 = cp_parser_id_expression (parser, in cp_parser_type_parameter()
8747 = cp_parser_lookup_name (parser, default_argument, in cp_parser_type_parameter()
8790 cp_parser_template_id (cp_parser *parser, in cp_parser_template_id() argument
8807 next_token = cp_lexer_peek_token (parser->lexer); in cp_parser_template_id()
8813 check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value; in cp_parser_template_id()
8836 (parser, 2))) in cp_parser_template_id()
8838 cp_parser_error (parser, "expected template-id"); in cp_parser_template_id()
8843 if (cp_parser_uncommitted_to_tentative_parse_p (parser)) in cp_parser_template_id()
8844 start_of_id = cp_lexer_token_position (parser->lexer, false); in cp_parser_template_id()
8850 template = cp_parser_template_name (parser, template_keyword_p, in cp_parser_template_id()
8863 next_token = cp_lexer_peek_token (parser->lexer); in cp_parser_template_id()
8864 next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2); in cp_parser_template_id()
8870 cp_parser_parse_tentatively (parser); in cp_parser_template_id()
8875 cp_lexer_consume_token (parser->lexer); in cp_parser_template_id()
8877 arguments = cp_parser_enclosed_template_argument_list (parser); in cp_parser_template_id()
8878 if (!cp_parser_parse_definitely (parser)) in cp_parser_template_id()
8884 cp_parser_error (parser, "expected %<<%>"); in cp_parser_template_id()
8906 if (!cp_parser_require (parser, CPP_LESS, "`<'")) in cp_parser_template_id()
8912 arguments = cp_parser_enclosed_template_argument_list (parser); in cp_parser_template_id()
8928 && cp_lexer_next_token_is (parser->lexer, in cp_parser_template_id()
8952 cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id); in cp_parser_template_id()
8964 cp_lexer_purge_tokens_after (parser->lexer, start_of_id); in cp_parser_template_id()
8970 if (cp_parser_error_occurred (parser) && template_id != error_mark_node) in cp_parser_template_id()
9016 cp_parser_template_name (cp_parser* parser, in cp_parser_template_name() argument
9028 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR)) in cp_parser_template_name()
9032 cp_parser_parse_tentatively (parser); in cp_parser_template_name()
9034 identifier = cp_parser_operator_function_id (parser); in cp_parser_template_name()
9036 if (!cp_parser_parse_definitely (parser)) in cp_parser_template_name()
9038 cp_parser_error (parser, "expected template-name"); in cp_parser_template_name()
9044 identifier = cp_parser_identifier (parser); in cp_parser_template_name()
9063 && cp_parser_nth_token_starts_template_argument_list_p (parser, 1)) in cp_parser_template_name()
9074 && parser->scope && TYPE_P (parser->scope) in cp_parser_template_name()
9076 && dependent_type_p (parser->scope) in cp_parser_template_name()
9079 && !constructor_name_p (identifier, parser->scope)) in cp_parser_template_name()
9086 parser->scope, identifier); in cp_parser_template_name()
9088 if (cp_parser_simulate_error (parser)) in cp_parser_template_name()
9089 start = cp_lexer_token_position (parser->lexer, true); in cp_parser_template_name()
9092 cp_lexer_consume_token (parser->lexer); in cp_parser_template_name()
9093 cp_parser_enclosed_template_argument_list (parser); in cp_parser_template_name()
9096 cp_parser_skip_to_closing_parenthesis (parser, in cp_parser_template_name()
9105 cp_lexer_purge_tokens_after (parser->lexer, start); in cp_parser_template_name()
9116 && (!parser->scope in cp_parser_template_name()
9117 || (TYPE_P (parser->scope) in cp_parser_template_name()
9118 && dependent_type_p (parser->scope)))) in cp_parser_template_name()
9123 decl = cp_parser_lookup_name (parser, identifier, in cp_parser_template_name()
9152 cp_parser_error (parser, "expected template-name"); in cp_parser_template_name()
9178 cp_parser_template_argument_list (cp_parser* parser) in cp_parser_template_argument_list() argument
9189 saved_in_template_argument_list_p = parser->in_template_argument_list_p; in cp_parser_template_argument_list()
9190 parser->in_template_argument_list_p = true; in cp_parser_template_argument_list()
9194 saved_ice_p = parser->integral_constant_expression_p; in cp_parser_template_argument_list()
9195 parser->integral_constant_expression_p = false; in cp_parser_template_argument_list()
9196 saved_non_ice_p = parser->non_integral_constant_expression_p; in cp_parser_template_argument_list()
9197 parser->non_integral_constant_expression_p = false; in cp_parser_template_argument_list()
9205 cp_lexer_consume_token (parser->lexer); in cp_parser_template_argument_list()
9208 argument = cp_parser_template_argument (parser); in cp_parser_template_argument_list()
9223 while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA)); in cp_parser_template_argument_list()
9232 parser->non_integral_constant_expression_p = saved_non_ice_p; in cp_parser_template_argument_list()
9233 parser->integral_constant_expression_p = saved_ice_p; in cp_parser_template_argument_list()
9234 parser->in_template_argument_list_p = saved_in_template_argument_list_p; in cp_parser_template_argument_list()
9255 cp_parser_template_argument (cp_parser* parser) in cp_parser_template_argument() argument
9274 cp_parser_parse_tentatively (parser); in cp_parser_template_argument()
9275 argument = cp_parser_type_id (parser); in cp_parser_template_argument()
9288 if (!cp_parser_error_occurred (parser) in cp_parser_template_argument()
9289 && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT)) in cp_parser_template_argument()
9292 cp_parser_abort_tentative_parse (parser); in cp_parser_template_argument()
9299 if (!cp_parser_next_token_ends_template_argument_p (parser)) in cp_parser_template_argument()
9300 cp_parser_error (parser, "expected template-argument"); in cp_parser_template_argument()
9302 if (cp_parser_parse_definitely (parser)) in cp_parser_template_argument()
9306 cp_parser_parse_tentatively (parser); in cp_parser_template_argument()
9308 argument = cp_parser_id_expression (parser, in cp_parser_template_argument()
9316 if (!cp_parser_next_token_ends_template_argument_p (parser)) in cp_parser_template_argument()
9317 cp_parser_error (parser, "expected template-argument"); in cp_parser_template_argument()
9318 if (!cp_parser_error_occurred (parser)) in cp_parser_template_argument()
9325 argument = cp_parser_lookup_name (parser, argument, in cp_parser_template_argument()
9333 cp_parser_error (parser, "expected template-name"); in cp_parser_template_argument()
9335 if (cp_parser_parse_definitely (parser)) in cp_parser_template_argument()
9351 if (cp_lexer_next_token_is (parser->lexer, CPP_NAME)) in cp_parser_template_argument()
9353 cp_parser_parse_tentatively (parser); in cp_parser_template_argument()
9354 argument = cp_parser_primary_expression (parser, in cp_parser_template_argument()
9360 || !cp_parser_next_token_ends_template_argument_p (parser)) in cp_parser_template_argument()
9361 cp_parser_simulate_error (parser); in cp_parser_template_argument()
9362 if (cp_parser_parse_definitely (parser)) in cp_parser_template_argument()
9368 address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND); in cp_parser_template_argument()
9370 cp_lexer_consume_token (parser->lexer); in cp_parser_template_argument()
9372 token = cp_lexer_peek_token (parser->lexer); in cp_parser_template_argument()
9379 cp_parser_parse_tentatively (parser); in cp_parser_template_argument()
9380 argument = cp_parser_primary_expression (parser, in cp_parser_template_argument()
9385 if (cp_parser_error_occurred (parser) in cp_parser_template_argument()
9386 || !cp_parser_next_token_ends_template_argument_p (parser)) in cp_parser_template_argument()
9387 cp_parser_abort_tentative_parse (parser); in cp_parser_template_argument()
9402 cp_parser_simulate_error (parser); in cp_parser_template_argument()
9417 cp_parser_simulate_error (parser); in cp_parser_template_argument()
9419 if (cp_parser_parse_definitely (parser)) in cp_parser_template_argument()
9431 cp_parser_error (parser, "invalid non-type template argument"); in cp_parser_template_argument()
9440 cp_parser_parse_tentatively (parser); in cp_parser_template_argument()
9441 argument = cp_parser_constant_expression (parser, in cp_parser_template_argument()
9447 if (!cp_parser_next_token_ends_template_argument_p (parser)) in cp_parser_template_argument()
9448 cp_parser_error (parser, "expected template-argument"); in cp_parser_template_argument()
9449 if (cp_parser_parse_definitely (parser)) in cp_parser_template_argument()
9455 return cp_parser_type_id (parser); in cp_parser_template_argument()
9481 cp_parser_explicit_instantiation (cp_parser* parser) in cp_parser_explicit_instantiation() argument
9489 if (cp_parser_allow_gnu_extensions_p (parser)) in cp_parser_explicit_instantiation()
9492 = cp_parser_storage_class_specifier_opt (parser); in cp_parser_explicit_instantiation()
9495 = cp_parser_function_specifier_opt (parser, in cp_parser_explicit_instantiation()
9500 cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'"); in cp_parser_explicit_instantiation()
9508 cp_parser_decl_specifier_seq (parser, in cp_parser_explicit_instantiation()
9515 if (declares_class_or_enum && cp_parser_declares_only_class_p (parser)) in cp_parser_explicit_instantiation()
9534 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED, in cp_parser_explicit_instantiation()
9555 cp_parser_skip_to_end_of_statement (parser); in cp_parser_explicit_instantiation()
9561 cp_parser_consume_semicolon_at_end_of_statement (parser); in cp_parser_explicit_instantiation()
9578 cp_parser_explicit_specialization (cp_parser* parser) in cp_parser_explicit_specialization() argument
9582 cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'"); in cp_parser_explicit_specialization()
9584 cp_parser_require (parser, CPP_LESS, "`<'"); in cp_parser_explicit_specialization()
9586 cp_parser_require (parser, CPP_GREATER, "`>'"); in cp_parser_explicit_specialization()
9588 ++parser->num_template_parameter_lists; in cp_parser_explicit_specialization()
9607 cp_parser_skip_to_end_of_block_or_statement (parser); in cp_parser_explicit_specialization()
9613 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE)) in cp_parser_explicit_specialization()
9615 if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS in cp_parser_explicit_specialization()
9616 && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER) in cp_parser_explicit_specialization()
9617 cp_parser_template_declaration_after_export (parser, in cp_parser_explicit_specialization()
9620 cp_parser_explicit_specialization (parser); in cp_parser_explicit_specialization()
9624 cp_parser_single_declaration (parser, in cp_parser_explicit_specialization()
9635 --parser->num_template_parameter_lists; in cp_parser_explicit_specialization()
9656 The parser flags FLAGS is used to control type-specifier parsing.
9672 cp_parser_type_specifier (cp_parser* parser, in cp_parser_type_specifier() argument
9691 token = cp_lexer_peek_token (parser->lexer); in cp_parser_type_specifier()
9700 type_spec = cp_parser_enum_specifier (parser); in cp_parser_type_specifier()
9722 cp_parser_parse_tentatively (parser); in cp_parser_type_specifier()
9724 type_spec = cp_parser_class_specifier (parser); in cp_parser_type_specifier()
9726 if (cp_parser_parse_definitely (parser)) in cp_parser_type_specifier()
9748 (parser, in cp_parser_type_specifier()
9792 return cp_lexer_consume_token (parser->lexer)->u.value; in cp_parser_type_specifier()
9797 type_spec = cp_parser_simple_type_specifier (parser, in cp_parser_type_specifier()
9805 cp_parser_error (parser, "expected type specifier"); in cp_parser_type_specifier()
9839 cp_parser_simple_type_specifier (cp_parser* parser, in cp_parser_simple_type_specifier() argument
9847 token = cp_lexer_peek_token (parser->lexer); in cp_parser_simple_type_specifier()
9900 cp_lexer_consume_token (parser->lexer); in cp_parser_simple_type_specifier()
9902 type = cp_parser_sizeof_operand (parser, RID_TYPEOF); in cp_parser_simple_type_specifier()
9935 id = cp_lexer_consume_token (parser->lexer)->u.value; in cp_parser_simple_type_specifier()
9940 cp_parser_check_for_invalid_template_id (parser, type); in cp_parser_simple_type_specifier()
9954 cp_parser_parse_tentatively (parser); in cp_parser_simple_type_specifier()
9958 = (cp_parser_global_scope_opt (parser, in cp_parser_simple_type_specifier()
9963 = (cp_parser_nested_name_specifier_opt (parser, in cp_parser_simple_type_specifier()
9971 if (parser->scope in cp_parser_simple_type_specifier()
9972 && cp_parser_optional_template_keyword (parser)) in cp_parser_simple_type_specifier()
9975 type = cp_parser_template_id (parser, in cp_parser_simple_type_specifier()
9983 cp_parser_error (parser, "expected template-id for type"); in cp_parser_simple_type_specifier()
9989 type = cp_parser_type_name (parser); in cp_parser_simple_type_specifier()
9999 && !cp_parser_parse_definitely (parser)) in cp_parser_simple_type_specifier()
10009 cp_parser_error (parser, "expected type-name"); in cp_parser_simple_type_specifier()
10024 tree protos = cp_parser_objc_protocol_refs_opt (parser); in cp_parser_simple_type_specifier()
10035 cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type)); in cp_parser_simple_type_specifier()
10057 cp_parser_type_name (cp_parser* parser) in cp_parser_type_name() argument
10063 cp_parser_parse_tentatively (parser); in cp_parser_type_name()
10065 type_decl = cp_parser_class_name (parser, in cp_parser_type_name()
10073 if (!cp_parser_parse_definitely (parser)) in cp_parser_type_name()
10076 identifier = cp_parser_identifier (parser); in cp_parser_type_name()
10081 type_decl = cp_parser_lookup_name_simple (parser, identifier); in cp_parser_type_name()
10087 tree protos = cp_parser_objc_protocol_refs_opt (parser); in cp_parser_type_name()
10096 if (!cp_parser_simulate_error (parser)) in cp_parser_type_name()
10097 cp_parser_name_lookup_error (parser, identifier, type_decl, in cp_parser_type_name()
10106 && !parser->scope) in cp_parser_type_name()
10141 cp_parser_elaborated_type_specifier (cp_parser* parser, in cp_parser_elaborated_type_specifier() argument
10151 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM)) in cp_parser_elaborated_type_specifier()
10154 cp_lexer_consume_token (parser->lexer); in cp_parser_elaborated_type_specifier()
10158 attributes = cp_parser_attributes_opt (parser); in cp_parser_elaborated_type_specifier()
10161 else if (cp_lexer_next_token_is_keyword (parser->lexer, in cp_parser_elaborated_type_specifier()
10165 cp_lexer_consume_token (parser->lexer); in cp_parser_elaborated_type_specifier()
10175 tag_type = cp_parser_class_key (parser); in cp_parser_elaborated_type_specifier()
10179 attributes = cp_parser_attributes_opt (parser); in cp_parser_elaborated_type_specifier()
10183 cp_parser_global_scope_opt (parser, in cp_parser_elaborated_type_specifier()
10188 if (!cp_parser_nested_name_specifier (parser, in cp_parser_elaborated_type_specifier()
10199 cp_parser_nested_name_specifier_opt (parser, in cp_parser_elaborated_type_specifier()
10212 template_p = cp_parser_optional_template_keyword (parser); in cp_parser_elaborated_type_specifier()
10216 cp_parser_parse_tentatively (parser); in cp_parser_elaborated_type_specifier()
10218 decl = cp_parser_template_id (parser, template_p, in cp_parser_elaborated_type_specifier()
10223 if (!template_p && !cp_parser_parse_definitely (parser)) in cp_parser_elaborated_type_specifier()
10230 type = make_typename_type (parser->scope, decl, in cp_parser_elaborated_type_specifier()
10239 identifier = cp_parser_identifier (parser); in cp_parser_elaborated_type_specifier()
10243 parser->scope = NULL_TREE; in cp_parser_elaborated_type_specifier()
10249 && TREE_CODE (parser->scope) != NAMESPACE_DECL) in cp_parser_elaborated_type_specifier()
10250 return cp_parser_make_typename_type (parser, parser->scope, in cp_parser_elaborated_type_specifier()
10253 if (parser->scope) in cp_parser_elaborated_type_specifier()
10257 decl = cp_parser_lookup_name (parser, identifier, in cp_parser_elaborated_type_specifier()
10287 && parser->num_template_parameter_lists)); in cp_parser_elaborated_type_specifier()
10291 cp_parser_diagnose_invalid_type_name (parser, in cp_parser_elaborated_type_specifier()
10292 parser->scope, in cp_parser_elaborated_type_specifier()
10299 bool allow_template = (parser->num_template_parameter_lists in cp_parser_elaborated_type_specifier()
10362 && cp_lexer_next_token_is (parser->lexer, in cp_parser_elaborated_type_specifier()
10370 (parser->num_template_parameter_lists in cp_parser_elaborated_type_specifier()
10371 && (cp_parser_next_token_starts_class_definition_p (parser) in cp_parser_elaborated_type_specifier()
10372 || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))); in cp_parser_elaborated_type_specifier()
10375 if (!cp_parser_check_template_parameters (parser, in cp_parser_elaborated_type_specifier()
10395 else if (is_declaration && cp_parser_declares_only_class_p (parser)) in cp_parser_elaborated_type_specifier()
10407 cp_parser_check_for_invalid_template_id (parser, type); in cp_parser_elaborated_type_specifier()
10425 cp_parser_enum_specifier (cp_parser* parser) in cp_parser_enum_specifier() argument
10433 cp_parser_parse_tentatively (parser); in cp_parser_enum_specifier()
10439 cp_lexer_consume_token (parser->lexer); in cp_parser_enum_specifier()
10441 attributes = cp_parser_attributes_opt (parser); in cp_parser_enum_specifier()
10443 if (cp_lexer_next_token_is (parser->lexer, CPP_NAME)) in cp_parser_enum_specifier()
10444 identifier = cp_parser_identifier (parser); in cp_parser_enum_specifier()
10449 if (!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) in cp_parser_enum_specifier()
10450 cp_parser_simulate_error (parser); in cp_parser_enum_specifier()
10452 if (!cp_parser_parse_definitely (parser)) in cp_parser_enum_specifier()
10456 if (!cp_parser_check_type_definition (parser)) in cp_parser_enum_specifier()
10465 cp_lexer_consume_token (parser->lexer); in cp_parser_enum_specifier()
10469 cp_parser_skip_to_end_of_block_or_statement (parser); in cp_parser_enum_specifier()
10474 if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE)) in cp_parser_enum_specifier()
10475 cp_parser_enumerator_list (parser, type); in cp_parser_enum_specifier()
10478 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'"); in cp_parser_enum_specifier()
10482 if (cp_parser_allow_gnu_extensions_p (parser)) in cp_parser_enum_specifier()
10484 tree trailing_attr = cp_parser_attributes_opt (parser); in cp_parser_enum_specifier()
10505 cp_parser_enumerator_list (cp_parser* parser, tree type) in cp_parser_enumerator_list() argument
10510 cp_parser_enumerator_definition (parser, type); in cp_parser_enumerator_list()
10514 if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA)) in cp_parser_enumerator_list()
10517 cp_lexer_consume_token (parser->lexer); in cp_parser_enumerator_list()
10519 if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE)) in cp_parser_enumerator_list()
10539 cp_parser_enumerator_definition (cp_parser* parser, tree type) in cp_parser_enumerator_definition() argument
10545 identifier = cp_parser_identifier (parser); in cp_parser_enumerator_definition()
10550 if (cp_lexer_next_token_is (parser->lexer, CPP_EQ)) in cp_parser_enumerator_definition()
10553 cp_lexer_consume_token (parser->lexer); in cp_parser_enumerator_definition()
10555 value = cp_parser_constant_expression (parser, in cp_parser_enumerator_definition()
10575 cp_parser_namespace_name (cp_parser* parser) in cp_parser_namespace_name() argument
10581 identifier = cp_parser_identifier (parser); in cp_parser_namespace_name()
10603 namespace_decl = cp_parser_lookup_name (parser, identifier, in cp_parser_namespace_name()
10613 if (!cp_parser_uncommitted_to_tentative_parse_p (parser)) in cp_parser_namespace_name()
10615 cp_parser_error (parser, "expected namespace-name"); in cp_parser_namespace_name()
10642 cp_parser_namespace_definition (cp_parser* parser) in cp_parser_namespace_definition() argument
10647 cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'"); in cp_parser_namespace_definition()
10653 if (cp_lexer_next_token_is (parser->lexer, CPP_NAME)) in cp_parser_namespace_definition()
10654 identifier = cp_parser_identifier (parser); in cp_parser_namespace_definition()
10659 attribs = cp_parser_attributes_opt (parser); in cp_parser_namespace_definition()
10662 cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"); in cp_parser_namespace_definition()
10666 cp_parser_namespace_body (parser); in cp_parser_namespace_definition()
10670 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'"); in cp_parser_namespace_definition()
10679 cp_parser_namespace_body (cp_parser* parser) in cp_parser_namespace_body() argument
10681 cp_parser_declaration_seq_opt (parser); in cp_parser_namespace_body()
10690 cp_parser_namespace_alias_definition (cp_parser* parser) in cp_parser_namespace_alias_definition() argument
10696 cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'"); in cp_parser_namespace_alias_definition()
10698 identifier = cp_parser_identifier (parser); in cp_parser_namespace_alias_definition()
10702 cp_parser_require (parser, CPP_EQ, "`='"); in cp_parser_namespace_alias_definition()
10705 = cp_parser_qualified_namespace_specifier (parser); in cp_parser_namespace_alias_definition()
10707 cp_parser_require (parser, CPP_SEMICOLON, "`;'"); in cp_parser_namespace_alias_definition()
10722 cp_parser_qualified_namespace_specifier (cp_parser* parser) in cp_parser_qualified_namespace_specifier() argument
10725 cp_parser_global_scope_opt (parser, in cp_parser_qualified_namespace_specifier()
10729 cp_parser_nested_name_specifier_opt (parser, in cp_parser_qualified_namespace_specifier()
10735 return cp_parser_namespace_name (parser); in cp_parser_qualified_namespace_specifier()
10751 cp_parser_using_declaration (cp_parser* parser, in cp_parser_using_declaration() argument
10762 cp_parser_parse_tentatively (parser); in cp_parser_using_declaration()
10766 cp_parser_require_keyword (parser, RID_USING, "`using'"); in cp_parser_using_declaration()
10769 token = cp_lexer_peek_token (parser->lexer); in cp_parser_using_declaration()
10776 cp_lexer_consume_token (parser->lexer); in cp_parser_using_declaration()
10782 = (cp_parser_global_scope_opt (parser, in cp_parser_using_declaration()
10789 qscope = cp_parser_nested_name_specifier (parser, typename_p, in cp_parser_using_declaration()
10796 qscope = cp_parser_nested_name_specifier_opt (parser, in cp_parser_using_declaration()
10804 if (access_declaration_p && cp_parser_error_occurred (parser)) in cp_parser_using_declaration()
10808 return cp_parser_parse_definitely (parser); in cp_parser_using_declaration()
10811 identifier = cp_parser_unqualified_id (parser, in cp_parser_using_declaration()
10819 if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)) in cp_parser_using_declaration()
10820 cp_parser_simulate_error (parser); in cp_parser_using_declaration()
10821 if (!cp_parser_parse_definitely (parser)) in cp_parser_using_declaration()
10840 decl = do_class_using_decl (parser->scope, identifier); in cp_parser_using_declaration()
10846 decl = cp_parser_lookup_name_simple (parser, identifier); in cp_parser_using_declaration()
10848 cp_parser_name_lookup_error (parser, identifier, decl, NULL); in cp_parser_using_declaration()
10857 cp_parser_require (parser, CPP_SEMICOLON, "`;'"); in cp_parser_using_declaration()
10869 cp_parser_using_directive (cp_parser* parser) in cp_parser_using_directive() argument
10875 cp_parser_require_keyword (parser, RID_USING, "`using'"); in cp_parser_using_directive()
10877 cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'"); in cp_parser_using_directive()
10879 cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false); in cp_parser_using_directive()
10881 cp_parser_nested_name_specifier_opt (parser, in cp_parser_using_directive()
10887 namespace_decl = cp_parser_namespace_name (parser); in cp_parser_using_directive()
10889 attribs = cp_parser_attributes_opt (parser); in cp_parser_using_directive()
10893 cp_parser_require (parser, CPP_SEMICOLON, "`;'"); in cp_parser_using_directive()
10913 cp_parser_asm_definition (cp_parser* parser) in cp_parser_asm_definition() argument
10924 cp_parser_require_keyword (parser, RID_ASM, "`asm'"); in cp_parser_asm_definition()
10926 if (cp_parser_allow_gnu_extensions_p (parser) in cp_parser_asm_definition()
10927 && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE)) in cp_parser_asm_definition()
10932 cp_lexer_consume_token (parser->lexer); in cp_parser_asm_definition()
10935 if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('")) in cp_parser_asm_definition()
10938 string = cp_parser_string_literal (parser, false, false); in cp_parser_asm_definition()
10941 cp_parser_skip_to_closing_parenthesis (parser, true, false, in cp_parser_asm_definition()
10951 if (cp_parser_allow_gnu_extensions_p (parser) in cp_parser_asm_definition()
10952 && parser->in_function_body in cp_parser_asm_definition()
10953 && (cp_lexer_next_token_is (parser->lexer, CPP_COLON) in cp_parser_asm_definition()
10954 || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))) in cp_parser_asm_definition()
10963 if (cp_lexer_next_token_is (parser->lexer, CPP_COLON)) in cp_parser_asm_definition()
10966 cp_lexer_consume_token (parser->lexer); in cp_parser_asm_definition()
10968 if (cp_lexer_next_token_is_not (parser->lexer, in cp_parser_asm_definition()
10970 && cp_lexer_next_token_is_not (parser->lexer, in cp_parser_asm_definition()
10972 && cp_lexer_next_token_is_not (parser->lexer, in cp_parser_asm_definition()
10974 outputs = cp_parser_asm_operand_list (parser); in cp_parser_asm_definition()
10978 else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)) in cp_parser_asm_definition()
10984 || cp_lexer_next_token_is (parser->lexer, CPP_COLON)) in cp_parser_asm_definition()
10987 cp_lexer_consume_token (parser->lexer); in cp_parser_asm_definition()
10989 if (cp_lexer_next_token_is_not (parser->lexer, in cp_parser_asm_definition()
10991 && cp_lexer_next_token_is_not (parser->lexer, in cp_parser_asm_definition()
10993 inputs = cp_parser_asm_operand_list (parser); in cp_parser_asm_definition()
10995 else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)) in cp_parser_asm_definition()
11001 || cp_lexer_next_token_is (parser->lexer, CPP_COLON)) in cp_parser_asm_definition()
11004 cp_lexer_consume_token (parser->lexer); in cp_parser_asm_definition()
11006 if (cp_lexer_next_token_is_not (parser->lexer, in cp_parser_asm_definition()
11008 clobbers = cp_parser_asm_clobber_list (parser); in cp_parser_asm_definition()
11012 if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'")) in cp_parser_asm_definition()
11013 cp_parser_skip_to_closing_parenthesis (parser, true, false, in cp_parser_asm_definition()
11015 cp_parser_require (parser, CPP_SEMICOLON, "`;'"); in cp_parser_asm_definition()
11018 if (parser->in_function_body) in cp_parser_asm_definition()
11077 cp_parser_init_declarator (cp_parser* parser, in cp_parser_init_declarator() argument
11120 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED, in cp_parser_init_declarator()
11133 if (!cp_parser_check_declarator_template_parameters (parser, declarator)) in cp_parser_init_declarator()
11147 if (cp_parser_allow_gnu_extensions_p (parser)) in cp_parser_init_declarator()
11150 asm_specification = cp_parser_asm_specification_opt (parser); in cp_parser_init_declarator()
11152 attributes = cp_parser_attributes_opt (parser); in cp_parser_init_declarator()
11161 token = cp_lexer_peek_token (parser->lexer); in cp_parser_init_declarator()
11170 cp_parser_error (parser, in cp_parser_init_declarator()
11187 decl = cp_parser_save_member_function_body (parser, in cp_parser_init_declarator()
11194 (parser, decl_specifiers, prefix_attributes, declarator)); in cp_parser_init_declarator()
11210 cp_parser_error (parser, in cp_parser_init_declarator()
11229 cp_parser_error (parser, "expected initializer"); in cp_parser_init_declarator()
11239 cp_parser_commit_to_tentative_parse (parser); in cp_parser_init_declarator()
11248 cp_parser_error (parser, "invalid type in declaration"); in cp_parser_init_declarator()
11260 if (parser->in_unbraced_linkage_specification_p) in cp_parser_init_declarator()
11307 initializer = cp_parser_pure_specifier (parser); in cp_parser_init_declarator()
11315 cp_parser_skip_to_closing_parenthesis (parser, in cp_parser_init_declarator()
11322 initializer = cp_parser_initializer (parser, in cp_parser_init_declarator()
11327 /* The old parser allows attributes to appear after a parenthesized in cp_parser_init_declarator()
11329 on the GCC mailing lists on 2002-08-13. This parser accepts the in cp_parser_init_declarator()
11331 if (cp_parser_allow_gnu_extensions_p (parser) && is_parenthesized_init) in cp_parser_init_declarator()
11332 if (cp_parser_attributes_opt (parser)) in cp_parser_init_declarator()
11350 cp_parser_save_default_args (parser, decl); in cp_parser_init_declarator()
11413 cp_parser_declarator (cp_parser* parser, in cp_parser_declarator() argument
11431 if (cp_parser_allow_gnu_extensions_p (parser)) in cp_parser_declarator()
11432 attributes = cp_parser_attributes_opt (parser); in cp_parser_declarator()
11435 token = cp_lexer_peek_token (parser->lexer); in cp_parser_declarator()
11438 cp_parser_parse_tentatively (parser); in cp_parser_declarator()
11440 code = cp_parser_ptr_operator (parser, in cp_parser_declarator()
11444 if (cp_parser_parse_definitely (parser)) in cp_parser_declarator()
11453 cp_parser_parse_tentatively (parser); in cp_parser_declarator()
11456 declarator = cp_parser_declarator (parser, dcl_kind, in cp_parser_declarator()
11464 && !cp_parser_parse_definitely (parser)) in cp_parser_declarator()
11481 *parenthesized_p = cp_lexer_next_token_is (parser->lexer, in cp_parser_declarator()
11483 declarator = cp_parser_direct_declarator (parser, dcl_kind, in cp_parser_declarator()
11522 cp_parser_direct_declarator (cp_parser* parser, in cp_parser_direct_declarator() argument
11530 bool saved_default_arg_ok_p = parser->default_arg_ok_p; in cp_parser_direct_declarator()
11531 bool saved_in_declarator_p = parser->in_declarator_p; in cp_parser_direct_declarator()
11538 token = cp_lexer_peek_token (parser->lexer); in cp_parser_direct_declarator()
11591 cp_parser_parse_tentatively (parser); in cp_parser_direct_declarator()
11594 cp_lexer_consume_token (parser->lexer); in cp_parser_direct_declarator()
11599 parser->default_arg_ok_p = false; in cp_parser_direct_declarator()
11600 parser->in_declarator_p = true; in cp_parser_direct_declarator()
11606 = parser->num_template_parameter_lists; in cp_parser_direct_declarator()
11607 parser->num_template_parameter_lists = 0; in cp_parser_direct_declarator()
11610 params = cp_parser_parameter_declaration_clause (parser); in cp_parser_direct_declarator()
11612 parser->num_template_parameter_lists in cp_parser_direct_declarator()
11617 if (member_p || cp_parser_parse_definitely (parser)) in cp_parser_direct_declarator()
11626 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_direct_declarator()
11629 cv_quals = cp_parser_cv_qualifier_seq_opt (parser); in cp_parser_direct_declarator()
11632 = cp_parser_exception_specification_opt (parser); in cp_parser_direct_declarator()
11642 parser->default_arg_ok_p = false; in cp_parser_direct_declarator()
11655 parser->default_arg_ok_p = saved_default_arg_ok_p; in cp_parser_direct_declarator()
11656 parser->in_declarator_p = saved_in_declarator_p; in cp_parser_direct_declarator()
11659 cp_lexer_consume_token (parser->lexer); in cp_parser_direct_declarator()
11661 saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p; in cp_parser_direct_declarator()
11662 parser->in_type_id_in_expr_p = true; in cp_parser_direct_declarator()
11664 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p, in cp_parser_direct_declarator()
11667 parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p; in cp_parser_direct_declarator()
11670 if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'")) in cp_parser_direct_declarator()
11691 parser->default_arg_ok_p = false; in cp_parser_direct_declarator()
11692 parser->in_declarator_p = true; in cp_parser_direct_declarator()
11694 cp_lexer_consume_token (parser->lexer); in cp_parser_direct_declarator()
11696 token = cp_lexer_peek_token (parser->lexer); in cp_parser_direct_declarator()
11704 = cp_parser_constant_expression (parser, in cp_parser_direct_declarator()
11712 else if (!parser->in_function_body) in cp_parser_direct_declarator()
11721 if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'")) in cp_parser_direct_declarator()
11739 cp_parser_parse_tentatively (parser); in cp_parser_direct_declarator()
11741 = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok); in cp_parser_direct_declarator()
11742 qualifying_scope = parser->scope; in cp_parser_direct_declarator()
11745 if (!cp_parser_parse_definitely (parser)) in cp_parser_direct_declarator()
11752 cp_parser_error (parser, "expected unqualified-id"); in cp_parser_direct_declarator()
11834 cp_parser_error (parser, "invalid declarator"); in cp_parser_direct_declarator()
11872 parser->in_declarator_p = true; in cp_parser_direct_declarator()
11877 parser->default_arg_ok_p = saved_default_arg_ok_p; in cp_parser_direct_declarator()
11879 parser->default_arg_ok_p = false; in cp_parser_direct_declarator()
11891 cp_parser_error (parser, "expected declarator"); in cp_parser_direct_declarator()
11897 parser->default_arg_ok_p = saved_default_arg_ok_p; in cp_parser_direct_declarator()
11898 parser->in_declarator_p = saved_in_declarator_p; in cp_parser_direct_declarator()
11923 cp_parser_ptr_operator (cp_parser* parser, in cp_parser_ptr_operator() argument
11936 token = cp_lexer_peek_token (parser->lexer); in cp_parser_ptr_operator()
11944 cp_lexer_consume_token (parser->lexer); in cp_parser_ptr_operator()
11951 || cp_parser_allow_gnu_extensions_p (parser)) in cp_parser_ptr_operator()
11952 *cv_quals = cp_parser_cv_qualifier_seq_opt (parser); in cp_parser_ptr_operator()
11957 cp_parser_parse_tentatively (parser); in cp_parser_ptr_operator()
11959 cp_parser_global_scope_opt (parser, in cp_parser_ptr_operator()
11962 cp_parser_nested_name_specifier (parser, in cp_parser_ptr_operator()
11969 if (!cp_parser_error_occurred (parser) in cp_parser_ptr_operator()
11970 && cp_parser_require (parser, CPP_MULT, "`*'")) in cp_parser_ptr_operator()
11975 if (TREE_CODE (parser->scope) == NAMESPACE_DECL) in cp_parser_ptr_operator()
11976 error ("%qD is a namespace", parser->scope); in cp_parser_ptr_operator()
11981 *type = parser->scope; in cp_parser_ptr_operator()
11983 parser->scope = NULL_TREE; in cp_parser_ptr_operator()
11984 parser->qualifying_scope = NULL_TREE; in cp_parser_ptr_operator()
11985 parser->object_scope = NULL_TREE; in cp_parser_ptr_operator()
11987 *cv_quals = cp_parser_cv_qualifier_seq_opt (parser); in cp_parser_ptr_operator()
11991 if (!cp_parser_parse_definitely (parser)) in cp_parser_ptr_operator()
11992 cp_parser_error (parser, "expected ptr-operator"); in cp_parser_ptr_operator()
12015 cp_parser_cv_qualifier_seq_opt (cp_parser* parser) in cp_parser_cv_qualifier_seq_opt() argument
12025 token = cp_lexer_peek_token (parser->lexer); in cp_parser_cv_qualifier_seq_opt()
12052 cp_lexer_purge_token (parser->lexer); in cp_parser_cv_qualifier_seq_opt()
12056 cp_lexer_consume_token (parser->lexer); in cp_parser_cv_qualifier_seq_opt()
12078 cp_parser_declarator_id (cp_parser* parser, bool optional_p) in cp_parser_declarator_id() argument
12095 id = cp_parser_id_expression (parser, in cp_parser_declarator_id()
12114 cp_parser_type_id (cp_parser* parser) in cp_parser_type_id() argument
12120 cp_parser_type_specifier_seq (parser, /*is_condition=*/false, in cp_parser_type_id()
12126 cp_parser_parse_tentatively (parser); in cp_parser_type_id()
12129 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL, in cp_parser_type_id()
12133 if (!cp_parser_parse_definitely (parser)) in cp_parser_type_id()
12155 cp_parser_type_specifier_seq (cp_parser* parser, in cp_parser_type_specifier_seq() argument
12172 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE)) in cp_parser_type_specifier_seq()
12176 cp_parser_attributes_opt (parser)); in cp_parser_type_specifier_seq()
12181 type_specifier = cp_parser_type_specifier (parser, in cp_parser_type_specifier_seq()
12193 cp_parser_error (parser, "expected type-specifier"); in cp_parser_type_specifier_seq()
12237 cp_parser_parameter_declaration_clause (cp_parser* parser) in cp_parser_parameter_declaration_clause() argument
12245 token = cp_lexer_peek_token (parser->lexer); in cp_parser_parameter_declaration_clause()
12250 cp_lexer_consume_token (parser->lexer); in cp_parser_parameter_declaration_clause()
12266 && (cp_lexer_peek_nth_token (parser->lexer, 2)->type in cp_parser_parameter_declaration_clause()
12270 cp_lexer_consume_token (parser->lexer); in cp_parser_parameter_declaration_clause()
12276 parameters = cp_parser_parameter_declaration_list (parser, &is_error); in cp_parser_parameter_declaration_clause()
12284 token = cp_lexer_peek_token (parser->lexer); in cp_parser_parameter_declaration_clause()
12289 cp_lexer_consume_token (parser->lexer); in cp_parser_parameter_declaration_clause()
12292 = (cp_parser_require (parser, CPP_ELLIPSIS, "`...'") != NULL); in cp_parser_parameter_declaration_clause()
12299 cp_lexer_consume_token (parser->lexer); in cp_parser_parameter_declaration_clause()
12325 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error) in cp_parser_parameter_declaration_list() argument
12337 = parser->in_unbraced_linkage_specification_p; in cp_parser_parameter_declaration_list()
12338 parser->in_unbraced_linkage_specification_p = false; in cp_parser_parameter_declaration_list()
12347 = cp_parser_parameter_declaration (parser, in cp_parser_parameter_declaration_list()
12364 if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN) in cp_parser_parameter_declaration_list()
12365 || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS) in cp_parser_parameter_declaration_list()
12367 || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON) in cp_parser_parameter_declaration_list()
12368 || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) in cp_parser_parameter_declaration_list()
12371 else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA)) in cp_parser_parameter_declaration_list()
12376 token = cp_lexer_peek_nth_token (parser->lexer, 2); in cp_parser_parameter_declaration_list()
12382 cp_lexer_consume_token (parser->lexer); in cp_parser_parameter_declaration_list()
12395 if (!parser->in_template_argument_list_p in cp_parser_parameter_declaration_list()
12396 && !parser->in_type_id_in_expr_p in cp_parser_parameter_declaration_list()
12397 && cp_parser_uncommitted_to_tentative_parse_p (parser) in cp_parser_parameter_declaration_list()
12403 cp_parser_commit_to_tentative_parse (parser); in cp_parser_parameter_declaration_list()
12407 cp_parser_error (parser, "expected %<,%> or %<...%>"); in cp_parser_parameter_declaration_list()
12408 if (!cp_parser_uncommitted_to_tentative_parse_p (parser)) in cp_parser_parameter_declaration_list()
12409 cp_parser_skip_to_closing_parenthesis (parser, in cp_parser_parameter_declaration_list()
12417 parser->in_unbraced_linkage_specification_p in cp_parser_parameter_declaration_list()
12441 cp_parser_parameter_declaration (cp_parser *parser, in cp_parser_parameter_declaration() argument
12464 saved_message = parser->type_definition_forbidden_message; in cp_parser_parameter_declaration()
12465 parser->type_definition_forbidden_message in cp_parser_parameter_declaration()
12469 cp_parser_decl_specifier_seq (parser, in cp_parser_parameter_declaration()
12475 if (cp_parser_error_occurred (parser)) in cp_parser_parameter_declaration()
12477 parser->type_definition_forbidden_message = saved_message; in cp_parser_parameter_declaration()
12482 token = cp_lexer_peek_token (parser->lexer); in cp_parser_parameter_declaration()
12498 bool saved_default_arg_ok_p = parser->default_arg_ok_p; in cp_parser_parameter_declaration()
12499 parser->default_arg_ok_p = false; in cp_parser_parameter_declaration()
12505 if (!parser->in_template_argument_list_p in cp_parser_parameter_declaration()
12513 && !parser->in_type_id_in_expr_p in cp_parser_parameter_declaration()
12514 && cp_parser_uncommitted_to_tentative_parse_p (parser) in cp_parser_parameter_declaration()
12515 && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN)) in cp_parser_parameter_declaration()
12516 cp_parser_commit_to_tentative_parse (parser); in cp_parser_parameter_declaration()
12518 declarator = cp_parser_declarator (parser, in cp_parser_parameter_declaration()
12523 parser->default_arg_ok_p = saved_default_arg_ok_p; in cp_parser_parameter_declaration()
12527 cp_parser_attributes_opt (parser)); in cp_parser_parameter_declaration()
12532 parser->type_definition_forbidden_message = saved_message; in cp_parser_parameter_declaration()
12535 if (cp_lexer_next_token_is (parser->lexer, CPP_EQ)) in cp_parser_parameter_declaration()
12539 cp_lexer_consume_token (parser->lexer); in cp_parser_parameter_declaration()
12552 first_token = cp_lexer_peek_token (parser->lexer); in cp_parser_parameter_declaration()
12558 token = cp_lexer_peek_token (parser->lexer); in cp_parser_parameter_declaration()
12623 token = cp_lexer_consume_token (parser->lexer); in cp_parser_parameter_declaration()
12639 /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is in cp_parser_parameter_declaration()
12642 = parser->greater_than_is_operator_p; in cp_parser_parameter_declaration()
12643 parser->greater_than_is_operator_p = greater_than_is_operator_p; in cp_parser_parameter_declaration()
12647 = parser->local_variables_forbidden_p; in cp_parser_parameter_declaration()
12648 parser->local_variables_forbidden_p = true; in cp_parser_parameter_declaration()
12659 = cp_parser_assignment_expression (parser, /*cast_p=*/false); in cp_parser_parameter_declaration()
12664 parser->greater_than_is_operator_p in cp_parser_parameter_declaration()
12666 parser->local_variables_forbidden_p in cp_parser_parameter_declaration()
12669 if (!parser->default_arg_ok_p) in cp_parser_parameter_declaration()
12694 cp_parser_function_body (cp_parser *parser) in cp_parser_function_body() argument
12696 cp_parser_compound_statement (parser, NULL, false); in cp_parser_function_body()
12703 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser) in cp_parser_ctor_initializer_opt_and_function_body() argument
12711 ctor_initializer_p = cp_parser_ctor_initializer_opt (parser); in cp_parser_ctor_initializer_opt_and_function_body()
12713 cp_parser_function_body (parser); in cp_parser_ctor_initializer_opt_and_function_body()
12736 cp_parser_initializer (cp_parser* parser, bool* is_parenthesized_init, in cp_parser_initializer() argument
12743 token = cp_lexer_peek_token (parser->lexer); in cp_parser_initializer()
12754 cp_lexer_consume_token (parser->lexer); in cp_parser_initializer()
12756 init = cp_parser_initializer_clause (parser, non_constant_p); in cp_parser_initializer()
12759 init = cp_parser_parenthesized_expression_list (parser, false, in cp_parser_initializer()
12765 cp_parser_error (parser, "expected initializer"); in cp_parser_initializer()
12792 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p) in cp_parser_initializer_clause() argument
12801 if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)) in cp_parser_initializer_clause()
12804 = cp_parser_constant_expression (parser, in cp_parser_initializer_clause()
12813 cp_lexer_consume_token (parser->lexer); in cp_parser_initializer_clause()
12817 if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE)) in cp_parser_initializer_clause()
12821 = cp_parser_initializer_list (parser, non_constant_p); in cp_parser_initializer_clause()
12823 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA)) in cp_parser_initializer_clause()
12824 cp_lexer_consume_token (parser->lexer); in cp_parser_initializer_clause()
12827 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'"); in cp_parser_initializer_clause()
12851 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p) in VEC()
12869 if (cp_parser_allow_gnu_extensions_p (parser) in VEC()
12870 && cp_lexer_next_token_is (parser->lexer, CPP_NAME) in VEC()
12871 && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON) in VEC()
12877 identifier = cp_lexer_consume_token (parser->lexer)->u.value; in VEC()
12879 cp_lexer_consume_token (parser->lexer); in VEC()
12885 initializer = cp_parser_initializer_clause (parser, in VEC()
12896 if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA)) in VEC()
12900 token = cp_lexer_peek_nth_token (parser->lexer, 2); in VEC()
12908 cp_lexer_consume_token (parser->lexer); in VEC()
12934 cp_parser_class_name (cp_parser *parser, in cp_parser_class_name() argument
12948 token = cp_lexer_peek_token (parser->lexer); in cp_parser_class_name()
12951 cp_parser_error (parser, "expected class-name"); in cp_parser_class_name()
12955 /* PARSER->SCOPE can be cleared when parsing the template-arguments in cp_parser_class_name()
12957 scope = parser->scope; in cp_parser_class_name()
12968 && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2)) in cp_parser_class_name()
12975 identifier_token = cp_lexer_peek_token (parser->lexer); in cp_parser_class_name()
12977 identifier = cp_parser_identifier (parser); in cp_parser_class_name()
12994 cp_parser_simulate_error (parser); in cp_parser_class_name()
13005 if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)) in cp_parser_class_name()
13008 decl = cp_parser_lookup_name (parser, identifier, in cp_parser_class_name()
13018 if (cp_parser_parsing_tentatively (parser)) in cp_parser_class_name()
13021 cp_parser_simulate_error (parser); in cp_parser_class_name()
13030 decl = cp_parser_template_id (parser, template_keyword_p, in cp_parser_class_name()
13051 && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)) in cp_parser_class_name()
13073 cp_parser_error (parser, "expected class-name"); in cp_parser_class_name()
13086 cp_parser_class_specifier (cp_parser* parser) in cp_parser_class_specifier() argument
13102 type = cp_parser_class_head (parser, in cp_parser_class_specifier()
13110 cp_parser_skip_to_end_of_block_or_statement (parser); in cp_parser_class_specifier()
13116 if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'")) in cp_parser_class_specifier()
13126 cp_parser_skip_to_closing_brace (parser); in cp_parser_class_specifier()
13130 cp_lexer_consume_token (parser->lexer); in cp_parser_class_specifier()
13136 cp_parser_check_type_definition (parser); in cp_parser_class_specifier()
13138 ++parser->num_classes_being_defined; in cp_parser_class_specifier()
13142 = parser->num_template_parameter_lists; in cp_parser_class_specifier()
13143 parser->num_template_parameter_lists = 0; in cp_parser_class_specifier()
13145 saved_in_function_body = parser->in_function_body; in cp_parser_class_specifier()
13146 parser->in_function_body = false; in cp_parser_class_specifier()
13158 cp_parser_skip_to_closing_brace (parser); in cp_parser_class_specifier()
13161 cp_parser_member_specification_opt (parser); in cp_parser_class_specifier()
13164 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'"); in cp_parser_class_specifier()
13167 token = cp_lexer_peek_token (parser->lexer); in cp_parser_class_specifier()
13170 if (cp_parser_allow_gnu_extensions_p (parser)) in cp_parser_class_specifier()
13171 attributes = cp_parser_attributes_opt (parser); in cp_parser_class_specifier()
13196 if (--parser->num_classes_being_defined == 0) in cp_parser_class_specifier()
13213 for (TREE_PURPOSE (parser->unparsed_functions_queues) in cp_parser_class_specifier()
13214 = nreverse (TREE_PURPOSE (parser->unparsed_functions_queues)); in cp_parser_class_specifier()
13215 (queue_entry = TREE_PURPOSE (parser->unparsed_functions_queues)); in cp_parser_class_specifier()
13216 TREE_PURPOSE (parser->unparsed_functions_queues) in cp_parser_class_specifier()
13217 = TREE_CHAIN (TREE_PURPOSE (parser->unparsed_functions_queues))) in cp_parser_class_specifier()
13232 cp_parser_late_parsing_default_args (parser, fn); in cp_parser_class_specifier()
13239 for (TREE_VALUE (parser->unparsed_functions_queues) in cp_parser_class_specifier()
13240 = nreverse (TREE_VALUE (parser->unparsed_functions_queues)); in cp_parser_class_specifier()
13241 (queue_entry = TREE_VALUE (parser->unparsed_functions_queues)); in cp_parser_class_specifier()
13242 TREE_VALUE (parser->unparsed_functions_queues) in cp_parser_class_specifier()
13243 = TREE_CHAIN (TREE_VALUE (parser->unparsed_functions_queues))) in cp_parser_class_specifier()
13248 cp_parser_late_parsing_for_member (parser, fn); in cp_parser_class_specifier()
13256 parser->in_function_body = saved_in_function_body; in cp_parser_class_specifier()
13257 parser->num_template_parameter_lists in cp_parser_class_specifier()
13288 cp_parser_class_head (cp_parser* parser, in cp_parser_class_head() argument
13312 class_key = cp_parser_class_key (parser); in cp_parser_class_head()
13317 attributes = cp_parser_attributes_opt (parser); in cp_parser_class_head()
13328 if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)) in cp_parser_class_head()
13336 = cp_parser_nested_name_specifier_opt (parser, in cp_parser_class_head()
13362 cp_parser_parse_tentatively (parser); in cp_parser_class_head()
13363 type = cp_parser_class_name (parser, in cp_parser_class_head()
13371 if (!cp_parser_parse_definitely (parser)) in cp_parser_class_head()
13374 id = cp_parser_identifier (parser); in cp_parser_class_head()
13406 cp_parser_parse_tentatively (parser); in cp_parser_class_head()
13408 id = cp_parser_template_id (parser, in cp_parser_class_head()
13413 if (!cp_parser_parse_definitely (parser)) in cp_parser_class_head()
13415 if (cp_lexer_next_token_is (parser->lexer, CPP_NAME)) in cp_parser_class_head()
13416 id = cp_parser_identifier (parser); in cp_parser_class_head()
13430 cp_parser_check_for_invalid_template_id (parser, id); in cp_parser_class_head()
13436 if (!cp_parser_next_token_starts_class_definition_p (parser)) in cp_parser_class_head()
13438 cp_parser_error (parser, "expected %<{%> or %<:%>"); in cp_parser_class_head()
13444 cp_parser_commit_to_tentative_parse (parser); in cp_parser_class_head()
13447 cp_parser_error (parser, in cp_parser_class_head()
13450 cp_parser_error (parser, in cp_parser_class_head()
13491 && parser->num_template_parameter_lists == 0 in cp_parser_class_head()
13498 ++parser->num_template_parameter_lists; in cp_parser_class_head()
13506 if (!cp_parser_check_template_parameters (parser, num_templates)) in cp_parser_class_head()
13542 cp_parser_error (parser, "could not resolve typename type"); in cp_parser_class_head()
13573 parser->num_template_parameter_lists); in cp_parser_class_head()
13604 if (cp_lexer_next_token_is (parser->lexer, CPP_COLON)) in cp_parser_class_head()
13605 *bases = cp_parser_base_clause (parser); in cp_parser_class_head()
13616 --parser->num_template_parameter_lists; in cp_parser_class_head()
13633 cp_parser_class_key (cp_parser* parser) in cp_parser_class_key() argument
13639 token = cp_parser_require (parser, CPP_KEYWORD, "class-key"); in cp_parser_class_key()
13646 cp_parser_error (parser, "expected class-key"); in cp_parser_class_key()
13657 cp_parser_member_specification_opt (cp_parser* parser) in cp_parser_member_specification_opt() argument
13665 token = cp_lexer_peek_token (parser->lexer); in cp_parser_member_specification_opt()
13680 cp_lexer_consume_token (parser->lexer); in cp_parser_member_specification_opt()
13684 cp_parser_require (parser, CPP_COLON, "`:'"); in cp_parser_member_specification_opt()
13691 cp_parser_pragma (parser, pragma_external); in cp_parser_member_specification_opt()
13697 cp_parser_member_declaration (parser); in cp_parser_member_specification_opt()
13731 cp_parser_member_declaration (cp_parser* parser) in cp_parser_member_declaration() argument
13742 if (cp_parser_extension_opt (parser, &saved_pedantic)) in cp_parser_member_declaration()
13745 cp_parser_member_declaration (parser); in cp_parser_member_declaration()
13753 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE)) in cp_parser_member_declaration()
13757 if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS in cp_parser_member_declaration()
13758 && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER) in cp_parser_member_declaration()
13759 cp_parser_explicit_specialization (parser); in cp_parser_member_declaration()
13761 cp_parser_template_declaration (parser, /*member_p=*/true); in cp_parser_member_declaration()
13767 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING)) in cp_parser_member_declaration()
13770 cp_parser_using_declaration (parser, in cp_parser_member_declaration()
13776 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS)) in cp_parser_member_declaration()
13779 tree ivar_chains = cp_parser_objc_defs_expression (parser); in cp_parser_member_declaration()
13791 if (cp_parser_using_declaration (parser, /*access_declaration=*/true)) in cp_parser_member_declaration()
13795 cp_parser_decl_specifier_seq (parser, in cp_parser_member_declaration()
13803 && cp_parser_parse_and_diagnose_invalid_type_name (parser)) in cp_parser_member_declaration()
13807 if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)) in cp_parser_member_declaration()
13820 cp_token *token = cp_lexer_peek_token (parser->lexer); in cp_parser_member_declaration()
13888 while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)) in cp_parser_member_declaration()
13894 token = cp_lexer_peek_token (parser->lexer); in cp_parser_member_declaration()
13899 && cp_lexer_peek_nth_token (parser->lexer, 2)->type in cp_parser_member_declaration()
13908 if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON) in cp_parser_member_declaration()
13909 identifier = cp_parser_identifier (parser); in cp_parser_member_declaration()
13914 cp_lexer_consume_token (parser->lexer); in cp_parser_member_declaration()
13917 = cp_parser_constant_expression (parser, in cp_parser_member_declaration()
13922 attributes = cp_parser_attributes_opt (parser); in cp_parser_member_declaration()
13949 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED, in cp_parser_member_declaration()
13959 cp_parser_skip_to_end_of_statement (parser); in cp_parser_member_declaration()
13965 if (cp_lexer_next_token_is (parser->lexer, in cp_parser_member_declaration()
13967 cp_lexer_consume_token (parser->lexer); in cp_parser_member_declaration()
13976 asm_specification = cp_parser_asm_specification_opt (parser); in cp_parser_member_declaration()
13978 attributes = cp_parser_attributes_opt (parser); in cp_parser_member_declaration()
13992 if (cp_lexer_next_token_is (parser->lexer, CPP_EQ)) in cp_parser_member_declaration()
14008 initializer = cp_parser_pure_specifier (parser); in cp_parser_member_declaration()
14011 initializer = cp_parser_constant_initializer (parser); in cp_parser_member_declaration()
14023 (cp_lexer_peek_token (parser->lexer))) in cp_parser_member_declaration()
14032 decl = cp_parser_save_member_function_body (parser, in cp_parser_member_declaration()
14040 token = cp_lexer_peek_token (parser->lexer); in cp_parser_member_declaration()
14043 cp_lexer_consume_token (parser->lexer); in cp_parser_member_declaration()
14062 parser->scope = NULL_TREE; in cp_parser_member_declaration()
14063 parser->qualifying_scope = NULL_TREE; in cp_parser_member_declaration()
14064 parser->object_scope = NULL_TREE; in cp_parser_member_declaration()
14066 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA)) in cp_parser_member_declaration()
14067 cp_lexer_consume_token (parser->lexer); in cp_parser_member_declaration()
14069 else if (cp_lexer_next_token_is_not (parser->lexer, in cp_parser_member_declaration()
14072 cp_parser_error (parser, "expected %<;%>"); in cp_parser_member_declaration()
14074 cp_parser_skip_to_end_of_statement (parser); in cp_parser_member_declaration()
14086 cp_parser_save_default_args (parser, decl); in cp_parser_member_declaration()
14091 cp_parser_require (parser, CPP_SEMICOLON, "`;'"); in cp_parser_member_declaration()
14103 cp_parser_pure_specifier (cp_parser* parser) in cp_parser_pure_specifier() argument
14108 if (!cp_parser_require (parser, CPP_EQ, "`='")) in cp_parser_pure_specifier()
14111 token = cp_lexer_consume_token (parser->lexer); in cp_parser_pure_specifier()
14115 cp_parser_error (parser, in cp_parser_pure_specifier()
14117 cp_parser_skip_to_end_of_statement (parser); in cp_parser_pure_specifier()
14137 cp_parser_constant_initializer (cp_parser* parser) in cp_parser_constant_initializer() argument
14140 if (!cp_parser_require (parser, CPP_EQ, "`='")) in cp_parser_constant_initializer()
14148 if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) in cp_parser_constant_initializer()
14150 cp_parser_error (parser, in cp_parser_constant_initializer()
14153 cp_lexer_consume_token (parser->lexer); in cp_parser_constant_initializer()
14155 cp_parser_skip_to_closing_brace (parser); in cp_parser_constant_initializer()
14157 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'"); in cp_parser_constant_initializer()
14162 return cp_parser_constant_expression (parser, in cp_parser_constant_initializer()
14186 cp_parser_base_clause (cp_parser* parser) in cp_parser_base_clause() argument
14191 cp_parser_require (parser, CPP_COLON, "`:'"); in cp_parser_base_clause()
14200 base = cp_parser_base_specifier (parser); in cp_parser_base_clause()
14208 token = cp_lexer_peek_token (parser->lexer); in cp_parser_base_clause()
14213 cp_lexer_consume_token (parser->lexer); in cp_parser_base_clause()
14216 /* PARSER->SCOPE may still be non-NULL at this point, if the last in cp_parser_base_clause()
14219 parser->scope = NULL_TREE; in cp_parser_base_clause()
14220 parser->qualifying_scope = NULL_TREE; in cp_parser_base_clause()
14221 parser->object_scope = NULL_TREE; in cp_parser_base_clause()
14241 cp_parser_base_specifier (cp_parser* parser) in cp_parser_base_specifier() argument
14256 token = cp_lexer_peek_token (parser->lexer); in cp_parser_base_specifier()
14264 cp_parser_error (parser, in cp_parser_base_specifier()
14272 cp_lexer_consume_token (parser->lexer); in cp_parser_base_specifier()
14284 cp_parser_error (parser, in cp_parser_base_specifier()
14292 cp_lexer_consume_token (parser->lexer); in cp_parser_base_specifier()
14304 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME)) in cp_parser_base_specifier()
14311 cp_lexer_consume_token (parser->lexer); in cp_parser_base_specifier()
14315 cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false); in cp_parser_base_specifier()
14328 cp_parser_nested_name_specifier_opt (parser, in cp_parser_base_specifier()
14335 class_scope_p = (parser->scope && TYPE_P (parser->scope)); in cp_parser_base_specifier()
14336 template_p = class_scope_p && cp_parser_optional_template_keyword (parser); in cp_parser_base_specifier()
14339 type = cp_parser_class_name (parser, in cp_parser_base_specifier()
14364 cp_parser_exception_specification_opt (cp_parser* parser) in cp_parser_exception_specification_opt() argument
14370 token = cp_lexer_peek_token (parser->lexer); in cp_parser_exception_specification_opt()
14376 cp_lexer_consume_token (parser->lexer); in cp_parser_exception_specification_opt()
14379 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_exception_specification_opt()
14382 token = cp_lexer_peek_token (parser->lexer); in cp_parser_exception_specification_opt()
14389 saved_message = parser->type_definition_forbidden_message; in cp_parser_exception_specification_opt()
14390 parser->type_definition_forbidden_message in cp_parser_exception_specification_opt()
14393 type_id_list = cp_parser_type_id_list (parser); in cp_parser_exception_specification_opt()
14395 parser->type_definition_forbidden_message = saved_message; in cp_parser_exception_specification_opt()
14401 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_exception_specification_opt()
14416 cp_parser_type_id_list (cp_parser* parser) in cp_parser_type_id_list() argument
14426 type = cp_parser_type_id (parser); in cp_parser_type_id_list()
14430 token = cp_lexer_peek_token (parser->lexer); in cp_parser_type_id_list()
14435 cp_lexer_consume_token (parser->lexer); in cp_parser_type_id_list()
14447 cp_parser_try_block (cp_parser* parser) in cp_parser_try_block() argument
14451 cp_parser_require_keyword (parser, RID_TRY, "`try'"); in cp_parser_try_block()
14453 cp_parser_compound_statement (parser, NULL, true); in cp_parser_try_block()
14455 cp_parser_handler_seq (parser); in cp_parser_try_block()
14467 cp_parser_function_try_block (cp_parser* parser) in cp_parser_function_try_block() argument
14474 if (!cp_parser_require_keyword (parser, RID_TRY, "`try'")) in cp_parser_function_try_block()
14480 = cp_parser_ctor_initializer_opt_and_function_body (parser); in cp_parser_function_try_block()
14484 cp_parser_handler_seq (parser); in cp_parser_function_try_block()
14497 cp_parser_handler_seq (cp_parser* parser) in cp_parser_handler_seq() argument
14504 cp_parser_handler (parser); in cp_parser_handler_seq()
14506 token = cp_lexer_peek_token (parser->lexer); in cp_parser_handler_seq()
14519 cp_parser_handler (cp_parser* parser) in cp_parser_handler() argument
14524 cp_parser_require_keyword (parser, RID_CATCH, "`catch'"); in cp_parser_handler()
14526 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_handler()
14527 declaration = cp_parser_exception_declaration (parser); in cp_parser_handler()
14529 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_handler()
14530 cp_parser_compound_statement (parser, NULL, false); in cp_parser_handler()
14546 cp_parser_exception_declaration (cp_parser* parser) in cp_parser_exception_declaration() argument
14553 if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)) in cp_parser_exception_declaration()
14556 cp_lexer_consume_token (parser->lexer); in cp_parser_exception_declaration()
14561 saved_message = parser->type_definition_forbidden_message; in cp_parser_exception_declaration()
14562 parser->type_definition_forbidden_message in cp_parser_exception_declaration()
14566 cp_parser_type_specifier_seq (parser, /*is_condition=*/false, in cp_parser_exception_declaration()
14569 if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)) in cp_parser_exception_declaration()
14572 declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER, in cp_parser_exception_declaration()
14578 parser->type_definition_forbidden_message = saved_message; in cp_parser_exception_declaration()
14594 cp_parser_throw_expression (cp_parser* parser) in cp_parser_throw_expression() argument
14599 cp_parser_require_keyword (parser, RID_THROW, "`throw'"); in cp_parser_throw_expression()
14600 token = cp_lexer_peek_token (parser->lexer); in cp_parser_throw_expression()
14611 expression = cp_parser_assignment_expression (parser, in cp_parser_throw_expression()
14629 cp_parser_asm_specification_opt (cp_parser* parser) in cp_parser_asm_specification_opt() argument
14635 token = cp_lexer_peek_token (parser->lexer); in cp_parser_asm_specification_opt()
14642 cp_lexer_consume_token (parser->lexer); in cp_parser_asm_specification_opt()
14644 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_asm_specification_opt()
14647 asm_specification = cp_parser_string_literal (parser, false, false); in cp_parser_asm_specification_opt()
14650 cp_parser_require (parser, CPP_CLOSE_PAREN, "`('"); in cp_parser_asm_specification_opt()
14672 cp_parser_asm_operand_list (cp_parser* parser) in cp_parser_asm_operand_list() argument
14682 if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE)) in cp_parser_asm_operand_list()
14685 cp_lexer_consume_token (parser->lexer); in cp_parser_asm_operand_list()
14687 name = cp_parser_identifier (parser); in cp_parser_asm_operand_list()
14692 cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"); in cp_parser_asm_operand_list()
14697 string_literal = cp_parser_string_literal (parser, false, false); in cp_parser_asm_operand_list()
14700 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_asm_operand_list()
14702 expression = cp_parser_expression (parser, /*cast_p=*/false); in cp_parser_asm_operand_list()
14704 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_asm_operand_list()
14712 if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA)) in cp_parser_asm_operand_list()
14715 cp_lexer_consume_token (parser->lexer); in cp_parser_asm_operand_list()
14731 cp_parser_asm_clobber_list (cp_parser* parser) in cp_parser_asm_clobber_list() argument
14740 string_literal = cp_parser_string_literal (parser, false, false); in cp_parser_asm_clobber_list()
14745 if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA)) in cp_parser_asm_clobber_list()
14748 cp_lexer_consume_token (parser->lexer); in cp_parser_asm_clobber_list()
14765 cp_parser_attributes_opt (cp_parser* parser) in cp_parser_attributes_opt() argument
14775 token = cp_lexer_peek_token (parser->lexer); in cp_parser_attributes_opt()
14781 cp_lexer_consume_token (parser->lexer); in cp_parser_attributes_opt()
14783 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_attributes_opt()
14784 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_attributes_opt()
14787 token = cp_lexer_peek_token (parser->lexer); in cp_parser_attributes_opt()
14790 attribute_list = cp_parser_attribute_list (parser); in cp_parser_attributes_opt()
14797 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_attributes_opt()
14798 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_attributes_opt()
14825 cp_parser_attribute_list (cp_parser* parser) in cp_parser_attribute_list() argument
14828 bool save_translate_strings_p = parser->translate_strings_p; in cp_parser_attribute_list()
14830 parser->translate_strings_p = false; in cp_parser_attribute_list()
14839 token = cp_lexer_peek_token (parser->lexer); in cp_parser_attribute_list()
14846 token = cp_lexer_consume_token (parser->lexer); in cp_parser_attribute_list()
14854 token = cp_lexer_peek_token (parser->lexer); in cp_parser_attribute_list()
14859 (parser, true, /*cast_p=*/false, in cp_parser_attribute_list()
14872 token = cp_lexer_peek_token (parser->lexer); in cp_parser_attribute_list()
14880 cp_lexer_consume_token (parser->lexer); in cp_parser_attribute_list()
14882 parser->translate_strings_p = save_translate_strings_p; in cp_parser_attribute_list()
14895 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic) in cp_parser_extension_opt() argument
14900 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION)) in cp_parser_extension_opt()
14903 cp_lexer_consume_token (parser->lexer); in cp_parser_extension_opt()
14924 cp_parser_label_declaration (cp_parser* parser) in cp_parser_label_declaration() argument
14927 cp_parser_require_keyword (parser, RID_LABEL, "`__label__'"); in cp_parser_label_declaration()
14934 identifier = cp_parser_identifier (parser); in cp_parser_label_declaration()
14941 if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)) in cp_parser_label_declaration()
14944 cp_parser_require (parser, CPP_COMMA, "`,'"); in cp_parser_label_declaration()
14948 cp_parser_require (parser, CPP_SEMICOLON, "`;'"); in cp_parser_label_declaration()
14953 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
14956 is returned. If PARSER->SCOPE is a dependent type, then a
14989 cp_parser_lookup_name (cp_parser *parser, tree name, in cp_parser_lookup_name() argument
14998 tree object_type = parser->context->object_type; in cp_parser_lookup_name()
15000 if (!cp_parser_uncommitted_to_tentative_parse_p (parser)) in cp_parser_lookup_name()
15010 parser->context->object_type = NULL_TREE; in cp_parser_lookup_name()
15034 if (parser->scope) in cp_parser_lookup_name()
15035 type = parser->scope; in cp_parser_lookup_name()
15053 stored in PARSER->SCOPE at this point. */ in cp_parser_lookup_name()
15057 if (parser->scope) in cp_parser_lookup_name()
15061 if (parser->scope == error_mark_node) in cp_parser_lookup_name()
15069 dependent_p = (TYPE_P (parser->scope) in cp_parser_lookup_name()
15070 && !(parser->in_declarator_p in cp_parser_lookup_name()
15071 && currently_open_class (parser->scope)) in cp_parser_lookup_name()
15072 && dependent_type_p (parser->scope)); in cp_parser_lookup_name()
15073 if ((check_dependency || !CLASS_TYPE_P (parser->scope)) in cp_parser_lookup_name()
15083 type = make_typename_type (parser->scope, name, tag_type, in cp_parser_lookup_name()
15088 && (cp_parser_next_token_ends_template_argument_p (parser) in cp_parser_lookup_name()
15089 || cp_lexer_next_token_is (parser->lexer, in cp_parser_lookup_name()
15091 decl = make_unbound_class_template (parser->scope, in cp_parser_lookup_name()
15096 parser->scope, name, in cp_parser_lookup_name()
15103 /* If PARSER->SCOPE is a dependent type, then it must be a in cp_parser_lookup_name()
15106 that PARSER->SCOPE is not considered a dependent base by in cp_parser_lookup_name()
15109 pushed_scope = push_scope (parser->scope); in cp_parser_lookup_name()
15110 /* If the PARSER->SCOPE is a template specialization, it in cp_parser_lookup_name()
15114 decl = lookup_qualified_name (parser->scope, name, in cp_parser_lookup_name()
15120 parser->qualifying_scope = parser->scope; in cp_parser_lookup_name()
15121 parser->object_scope = NULL_TREE; in cp_parser_lookup_name()
15141 parser->object_scope = object_type; in cp_parser_lookup_name()
15142 parser->qualifying_scope = NULL_TREE; in cp_parser_lookup_name()
15151 parser->qualifying_scope = NULL_TREE; in cp_parser_lookup_name()
15152 parser->object_scope = NULL_TREE; in cp_parser_lookup_name()
15166 if (!cp_parser_simulate_error (parser)) in cp_parser_lookup_name()
15188 check_accessibility_of_qualified_id (decl, object_type, parser->scope); in cp_parser_lookup_name()
15198 cp_parser_lookup_name_simple (cp_parser* parser, tree name) in cp_parser_lookup_name_simple() argument
15200 return cp_parser_lookup_name (parser, name, in cp_parser_lookup_name_simple()
15257 cp_parser_check_declarator_template_parameters (cp_parser* parser, in cp_parser_check_declarator_template_parameters() argument
15307 return cp_parser_check_template_parameters (parser, in cp_parser_check_declarator_template_parameters()
15316 (parser, declarator->declarator)); in cp_parser_check_declarator_template_parameters()
15332 cp_parser_check_template_parameters (cp_parser* parser, in cp_parser_check_template_parameters() argument
15339 if (parser->num_template_parameter_lists < num_templates) in cp_parser_check_template_parameters()
15346 if (parser->num_template_parameter_lists == num_templates) in cp_parser_check_template_parameters()
15350 if (parser->num_template_parameter_lists == num_templates + 1) in cp_parser_check_template_parameters()
15361 from the global namespace. If so, PARSER->SCOPE is set to the
15362 GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
15364 Returns the new value of PARSER->SCOPE, if the `::' token is
15368 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p) in cp_parser_global_scope_opt() argument
15373 token = cp_lexer_peek_token (parser->lexer); in cp_parser_global_scope_opt()
15379 cp_lexer_consume_token (parser->lexer); in cp_parser_global_scope_opt()
15381 parser->scope = global_namespace; in cp_parser_global_scope_opt()
15382 parser->qualifying_scope = global_namespace; in cp_parser_global_scope_opt()
15383 parser->object_scope = NULL_TREE; in cp_parser_global_scope_opt()
15385 return parser->scope; in cp_parser_global_scope_opt()
15389 parser->scope = NULL_TREE; in cp_parser_global_scope_opt()
15390 parser->qualifying_scope = NULL_TREE; in cp_parser_global_scope_opt()
15391 parser->object_scope = NULL_TREE; in cp_parser_global_scope_opt()
15402 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p) in cp_parser_constructor_declarator_p() argument
15412 if (parser->in_function_body) in cp_parser_constructor_declarator_p()
15415 next_token = cp_lexer_peek_token (parser->lexer); in cp_parser_constructor_declarator_p()
15424 cp_parser_parse_tentatively (parser); in cp_parser_constructor_declarator_p()
15429 cp_parser_global_scope_opt (parser, in cp_parser_constructor_declarator_p()
15433 = (cp_parser_nested_name_specifier_opt (parser, in cp_parser_constructor_declarator_p()
15460 type_decl = cp_parser_class_name (parser, in cp_parser_constructor_declarator_p()
15468 constructor_p = !cp_parser_error_occurred (parser); in cp_parser_constructor_declarator_p()
15482 && cp_parser_require (parser, CPP_OPEN_PAREN, "`('")) in cp_parser_constructor_declarator_p()
15484 if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN) in cp_parser_constructor_declarator_p()
15485 && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS) in cp_parser_constructor_declarator_p()
15489 && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer)) in cp_parser_constructor_declarator_p()
15508 cp_parser_abort_tentative_parse (parser); in cp_parser_constructor_declarator_p()
15518 = parser->num_template_parameter_lists; in cp_parser_constructor_declarator_p()
15519 parser->num_template_parameter_lists = 0; in cp_parser_constructor_declarator_p()
15522 cp_parser_type_specifier (parser, in cp_parser_constructor_declarator_p()
15529 parser->num_template_parameter_lists in cp_parser_constructor_declarator_p()
15536 constructor_p = !cp_parser_error_occurred (parser); in cp_parser_constructor_declarator_p()
15542 cp_parser_abort_tentative_parse (parser); in cp_parser_constructor_declarator_p()
15555 (cp_parser* parser, in cp_parser_function_definition_from_specifiers_and_declarator() argument
15579 cp_parser_skip_to_end_of_block_or_statement (parser); in cp_parser_function_definition_from_specifiers_and_declarator()
15583 fn = cp_parser_function_definition_after_declarator (parser, in cp_parser_function_definition_from_specifiers_and_declarator()
15596 cp_parser_function_definition_after_declarator (cp_parser* parser, in cp_parser_function_definition_after_declarator() argument
15605 saved_in_function_body = parser->in_function_body; in cp_parser_function_definition_after_declarator()
15606 parser->in_function_body = true; in cp_parser_function_definition_after_declarator()
15610 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN)) in cp_parser_function_definition_after_declarator()
15613 cp_lexer_consume_token (parser->lexer); in cp_parser_function_definition_after_declarator()
15616 cp_parser_identifier (parser); in cp_parser_function_definition_after_declarator()
15622 cp_token *token = cp_lexer_peek_token (parser->lexer); in cp_parser_function_definition_after_declarator()
15627 cp_lexer_consume_token (parser->lexer); in cp_parser_function_definition_after_declarator()
15633 = parser->in_unbraced_linkage_specification_p; in cp_parser_function_definition_after_declarator()
15634 parser->in_unbraced_linkage_specification_p = false; in cp_parser_function_definition_after_declarator()
15638 = parser->num_template_parameter_lists; in cp_parser_function_definition_after_declarator()
15639 parser->num_template_parameter_lists = 0; in cp_parser_function_definition_after_declarator()
15642 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY)) in cp_parser_function_definition_after_declarator()
15643 ctor_initializer_p = cp_parser_function_try_block (parser); in cp_parser_function_definition_after_declarator()
15648 = cp_parser_ctor_initializer_opt_and_function_body (parser); in cp_parser_function_definition_after_declarator()
15656 parser->in_unbraced_linkage_specification_p in cp_parser_function_definition_after_declarator()
15658 parser->num_template_parameter_lists in cp_parser_function_definition_after_declarator()
15660 parser->in_function_body = saved_in_function_body; in cp_parser_function_definition_after_declarator()
15670 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p) in cp_parser_template_declaration_after_export() argument
15679 if (!cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'")) in cp_parser_template_declaration_after_export()
15683 if (!cp_parser_require (parser, CPP_LESS, "`<'")) in cp_parser_template_declaration_after_export()
15691 cp_parser_skip_to_end_of_block_or_statement (parser); in cp_parser_template_declaration_after_export()
15716 if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER)) in cp_parser_template_declaration_after_export()
15718 cp_parser_error (parser, "invalid explicit specialization"); in cp_parser_template_declaration_after_export()
15724 parameter_list = cp_parser_template_parameter_list (parser); in cp_parser_template_declaration_after_export()
15733 cp_parser_skip_to_end_of_template_parameter_list (parser); in cp_parser_template_declaration_after_export()
15735 ++parser->num_template_parameter_lists; in cp_parser_template_declaration_after_export()
15738 if (cp_lexer_next_token_is_keyword (parser->lexer, in cp_parser_template_declaration_after_export()
15740 cp_parser_template_declaration_after_export (parser, member_p); in cp_parser_template_declaration_after_export()
15746 decl = cp_parser_single_declaration (parser, in cp_parser_template_declaration_after_export()
15766 --parser->num_template_parameter_lists; in cp_parser_template_declaration_after_export()
15786 TREE_VALUE (parser->unparsed_functions_queues) in cp_parser_template_declaration_after_export()
15788 TREE_VALUE (parser->unparsed_functions_queues)); in cp_parser_template_declaration_after_export()
15811 cp_parser_single_declaration (cp_parser* parser, in cp_parser_single_declaration() argument
15831 cp_parser_decl_specifier_seq (parser, in cp_parser_single_declaration()
15852 if (cp_parser_declares_only_class_p (parser)) in cp_parser_single_declaration()
15885 && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON) in cp_parser_single_declaration()
15887 decl = cp_parser_init_declarator (parser, in cp_parser_single_declaration()
15899 parser->scope = NULL_TREE; in cp_parser_single_declaration()
15900 parser->qualifying_scope = NULL_TREE; in cp_parser_single_declaration()
15901 parser->object_scope = NULL_TREE; in cp_parser_single_declaration()
15905 || !cp_parser_require (parser, CPP_SEMICOLON, "`;'"))) in cp_parser_single_declaration()
15906 cp_parser_skip_to_end_of_block_or_statement (parser); in cp_parser_single_declaration()
15914 cp_parser_simple_cast_expression (cp_parser *parser) in cp_parser_simple_cast_expression() argument
15916 return cp_parser_cast_expression (parser, /*address_p=*/false, in cp_parser_simple_cast_expression()
15924 cp_parser_functional_cast (cp_parser* parser, tree type) in cp_parser_functional_cast() argument
15930 = cp_parser_parenthesized_expression_list (parser, false, in cp_parser_functional_cast()
15942 (parser, "a call to a constructor"))) in cp_parser_functional_cast()
15954 cp_parser_save_member_function_body (cp_parser* parser, in cp_parser_save_member_function_body() argument
15970 (cp_lexer_peek_token (parser->lexer))) in cp_parser_save_member_function_body()
15971 cp_parser_skip_to_end_of_block_or_statement (parser); in cp_parser_save_member_function_body()
15976 cp_parser_save_default_args (parser, fn); in cp_parser_save_member_function_body()
15980 first = parser->lexer->next_token; in cp_parser_save_member_function_body()
15981 cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0); in cp_parser_save_member_function_body()
15983 while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH)) in cp_parser_save_member_function_body()
15984 cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0); in cp_parser_save_member_function_body()
15985 last = parser->lexer->next_token; in cp_parser_save_member_function_body()
16000 TREE_VALUE (parser->unparsed_functions_queues) in cp_parser_save_member_function_body()
16002 TREE_VALUE (parser->unparsed_functions_queues)); in cp_parser_save_member_function_body()
16012 cp_parser_enclosed_template_argument_list (cp_parser* parser) in cp_parser_enclosed_template_argument_list() argument
16027 = parser->greater_than_is_operator_p; in cp_parser_enclosed_template_argument_list()
16028 parser->greater_than_is_operator_p = false; in cp_parser_enclosed_template_argument_list()
16031 saved_scope = parser->scope; in cp_parser_enclosed_template_argument_list()
16032 saved_qualifying_scope = parser->qualifying_scope; in cp_parser_enclosed_template_argument_list()
16033 saved_object_scope = parser->object_scope; in cp_parser_enclosed_template_argument_list()
16039 if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER)) in cp_parser_enclosed_template_argument_list()
16042 arguments = cp_parser_template_argument_list (parser); in cp_parser_enclosed_template_argument_list()
16045 if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT)) in cp_parser_enclosed_template_argument_list()
16055 cp_token *token = cp_lexer_peek_token (parser->lexer); in cp_parser_enclosed_template_argument_list()
16070 cp_lexer_consume_token (parser->lexer); in cp_parser_enclosed_template_argument_list()
16076 cp_parser_skip_to_end_of_template_parameter_list (parser); in cp_parser_enclosed_template_argument_list()
16078 parser->greater_than_is_operator_p in cp_parser_enclosed_template_argument_list()
16081 parser->scope = saved_scope; in cp_parser_enclosed_template_argument_list()
16082 parser->qualifying_scope = saved_qualifying_scope; in cp_parser_enclosed_template_argument_list()
16083 parser->object_scope = saved_object_scope; in cp_parser_enclosed_template_argument_list()
16094 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function) in cp_parser_late_parsing_for_member() argument
16104 gcc_assert (parser->num_classes_being_defined == 0); in cp_parser_late_parsing_for_member()
16109 parser->unparsed_functions_queues in cp_parser_late_parsing_for_member()
16110 = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues); in cp_parser_late_parsing_for_member()
16135 cp_parser_push_lexer_for_tokens (parser, tokens); in cp_parser_late_parsing_for_member()
16147 cp_parser_function_definition_after_declarator (parser, in cp_parser_late_parsing_for_member()
16156 cp_parser_pop_lexer (parser); in cp_parser_late_parsing_for_member()
16163 parser->unparsed_functions_queues in cp_parser_late_parsing_for_member()
16164 = TREE_CHAIN (parser->unparsed_functions_queues); in cp_parser_late_parsing_for_member()
16171 cp_parser_save_default_args (cp_parser* parser, tree decl) in cp_parser_save_default_args() argument
16180 TREE_PURPOSE (parser->unparsed_functions_queues) in cp_parser_save_default_args()
16182 TREE_PURPOSE (parser->unparsed_functions_queues)); in cp_parser_save_default_args()
16193 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn) in cp_parser_late_parsing_default_args() argument
16202 parser->unparsed_functions_queues in cp_parser_late_parsing_default_args()
16203 = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues); in cp_parser_late_parsing_default_args()
16207 saved_local_variables_forbidden_p = parser->local_variables_forbidden_p; in cp_parser_late_parsing_default_args()
16208 parser->local_variables_forbidden_p = true; in cp_parser_late_parsing_default_args()
16229 /* Push the saved tokens for the default argument onto the parser's in cp_parser_late_parsing_default_args()
16232 cp_parser_push_lexer_for_tokens (parser, tokens); in cp_parser_late_parsing_default_args()
16235 parsed_arg = cp_parser_assignment_expression (parser, /*cast_p=*/false); in cp_parser_late_parsing_default_args()
16250 if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF)) in cp_parser_late_parsing_default_args()
16251 cp_parser_error (parser, "expected %<,%>"); in cp_parser_late_parsing_default_args()
16254 cp_parser_pop_lexer (parser); in cp_parser_late_parsing_default_args()
16261 parser->local_variables_forbidden_p = saved_local_variables_forbidden_p; in cp_parser_late_parsing_default_args()
16264 parser->unparsed_functions_queues in cp_parser_late_parsing_default_args()
16265 = TREE_CHAIN (parser->unparsed_functions_queues); in cp_parser_late_parsing_default_args()
16274 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword) in cp_parser_sizeof_operand() argument
16288 saved_message = parser->type_definition_forbidden_message; in cp_parser_sizeof_operand()
16290 parser->type_definition_forbidden_message in cp_parser_sizeof_operand()
16294 sprintf ((char *) parser->type_definition_forbidden_message, in cp_parser_sizeof_operand()
16300 = parser->integral_constant_expression_p; in cp_parser_sizeof_operand()
16302 = parser->non_integral_constant_expression_p; in cp_parser_sizeof_operand()
16303 parser->integral_constant_expression_p = false; in cp_parser_sizeof_operand()
16309 if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)) in cp_parser_sizeof_operand()
16316 cp_parser_parse_tentatively (parser); in cp_parser_sizeof_operand()
16318 cp_lexer_consume_token (parser->lexer); in cp_parser_sizeof_operand()
16320 saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p; in cp_parser_sizeof_operand()
16321 parser->in_type_id_in_expr_p = true; in cp_parser_sizeof_operand()
16322 type = cp_parser_type_id (parser); in cp_parser_sizeof_operand()
16323 parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p; in cp_parser_sizeof_operand()
16325 cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"); in cp_parser_sizeof_operand()
16327 if (cp_parser_parse_definitely (parser)) in cp_parser_sizeof_operand()
16347 expr = cp_parser_unary_expression (parser, /*address_p=*/false, in cp_parser_sizeof_operand()
16353 free ((char *) parser->type_definition_forbidden_message); in cp_parser_sizeof_operand()
16355 parser->type_definition_forbidden_message = saved_message; in cp_parser_sizeof_operand()
16356 parser->integral_constant_expression_p in cp_parser_sizeof_operand()
16358 parser->non_integral_constant_expression_p in cp_parser_sizeof_operand()
16367 cp_parser_declares_only_class_p (cp_parser *parser) in cp_parser_declares_only_class_p() argument
16371 return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON) in cp_parser_declares_only_class_p()
16372 || cp_lexer_next_token_is (parser->lexer, CPP_COMMA)); in cp_parser_declares_only_class_p()
16379 cp_parser_set_storage_class (cp_parser *parser, in cp_parser_set_storage_class() argument
16385 if (parser->in_unbraced_linkage_specification_p) in cp_parser_set_storage_class()
16492 cp_parser_require (cp_parser* parser, in cp_parser_require() argument
16496 if (cp_lexer_next_token_is (parser->lexer, type)) in cp_parser_require()
16497 return cp_lexer_consume_token (parser->lexer); in cp_parser_require()
16501 if (!cp_parser_simulate_error (parser)) in cp_parser_require()
16504 cp_parser_error (parser, message); in cp_parser_require()
16516 cp_parser_skip_to_end_of_template_parameter_list (cp_parser* parser) in cp_parser_skip_to_end_of_template_parameter_list() argument
16524 if (cp_parser_require (parser, CPP_GREATER, "%<>%>")) in cp_parser_skip_to_end_of_template_parameter_list()
16531 switch (cp_lexer_peek_token (parser->lexer)->type) in cp_parser_skip_to_end_of_template_parameter_list()
16542 cp_lexer_consume_token (parser->lexer); in cp_parser_skip_to_end_of_template_parameter_list()
16571 cp_lexer_consume_token (parser->lexer); in cp_parser_skip_to_end_of_template_parameter_list()
16582 cp_parser_require_keyword (cp_parser* parser, in cp_parser_require_keyword() argument
16586 cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc); in cp_parser_require_keyword()
16596 cp_parser_error (parser, error_msg->s); in cp_parser_require_keyword()
16624 cp_parser_next_token_starts_class_definition_p (cp_parser *parser) in cp_parser_next_token_starts_class_definition_p() argument
16628 token = cp_lexer_peek_token (parser->lexer); in cp_parser_next_token_starts_class_definition_p()
16636 cp_parser_next_token_ends_template_argument_p (cp_parser *parser) in cp_parser_next_token_ends_template_argument_p() argument
16640 token = cp_lexer_peek_token (parser->lexer); in cp_parser_next_token_ends_template_argument_p()
16648 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser, in cp_parser_nth_token_starts_template_argument_list_p() argument
16653 token = cp_lexer_peek_nth_token (parser->lexer, n); in cp_parser_nth_token_starts_template_argument_list_p()
16662 token2 = cp_lexer_peek_nth_token (parser->lexer, n+1); in cp_parser_nth_token_starts_template_argument_list_p()
16724 cp_parser_optional_template_keyword (cp_parser *parser) in cp_parser_optional_template_keyword() argument
16726 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE)) in cp_parser_optional_template_keyword()
16729 outside templates the parser can always figure out what is a in cp_parser_optional_template_keyword()
16738 cp_lexer_purge_token (parser->lexer); in cp_parser_optional_template_keyword()
16744 cp_lexer_consume_token (parser->lexer); in cp_parser_optional_template_keyword()
16753 set PARSER->SCOPE, and perform other related actions. */
16756 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser) in cp_parser_pre_parsed_nested_name_specifier() argument
16764 check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value; in cp_parser_pre_parsed_nested_name_specifier()
16779 parser->scope = check_value->value; in cp_parser_pre_parsed_nested_name_specifier()
16780 parser->qualifying_scope = check_value->qualifying_scope; in cp_parser_pre_parsed_nested_name_specifier()
16781 parser->object_scope = NULL_TREE; in cp_parser_pre_parsed_nested_name_specifier()
16787 cp_parser_cache_group (cp_parser *parser, in cp_parser_cache_group() argument
16797 && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)) in cp_parser_cache_group()
16800 if (cp_lexer_next_token_is (parser->lexer, CPP_EOF) in cp_parser_cache_group()
16802 && cp_lexer_next_token_is (parser->lexer, CPP_PRAGMA_EOL))) in cp_parser_cache_group()
16805 token = cp_lexer_consume_token (parser->lexer); in cp_parser_cache_group()
16809 cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1); in cp_parser_cache_group()
16814 cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1); in cp_parser_cache_group()
16816 cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1); in cp_parser_cache_group()
16827 cp_parser_parse_tentatively (cp_parser* parser) in cp_parser_parse_tentatively() argument
16830 parser->context = cp_parser_context_new (parser->context); in cp_parser_parse_tentatively()
16832 cp_lexer_save_tokens (parser->lexer); in cp_parser_parse_tentatively()
16842 cp_parser_commit_to_tentative_parse (cp_parser* parser) in cp_parser_commit_to_tentative_parse() argument
16848 lexer = parser->lexer; in cp_parser_commit_to_tentative_parse()
16849 for (context = parser->context; context->next; context = context->next) in cp_parser_commit_to_tentative_parse()
16864 cp_parser_abort_tentative_parse (cp_parser* parser) in cp_parser_abort_tentative_parse() argument
16866 cp_parser_simulate_error (parser); in cp_parser_abort_tentative_parse()
16869 cp_parser_parse_definitely (parser); in cp_parser_abort_tentative_parse()
16877 cp_parser_parse_definitely (cp_parser* parser) in cp_parser_parse_definitely() argument
16884 error_occurred = cp_parser_error_occurred (parser); in cp_parser_parse_definitely()
16886 context = parser->context; in cp_parser_parse_definitely()
16887 parser->context = context->next; in cp_parser_parse_definitely()
16894 cp_lexer_commit_tokens (parser->lexer); in cp_parser_parse_definitely()
16902 cp_lexer_rollback_tokens (parser->lexer); in cp_parser_parse_definitely()
16916 cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser) in cp_parser_uncommitted_to_tentative_parse_p() argument
16918 return (cp_parser_parsing_tentatively (parser) in cp_parser_uncommitted_to_tentative_parse_p()
16919 && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED); in cp_parser_uncommitted_to_tentative_parse_p()
16926 cp_parser_error_occurred (cp_parser* parser) in cp_parser_error_occurred() argument
16928 return (cp_parser_parsing_tentatively (parser) in cp_parser_error_occurred()
16929 && parser->context->status == CP_PARSER_STATUS_KIND_ERROR); in cp_parser_error_occurred()
16935 cp_parser_allow_gnu_extensions_p (cp_parser* parser) in cp_parser_allow_gnu_extensions_p() argument
16937 return parser->allow_gnu_extensions_p; in cp_parser_allow_gnu_extensions_p()
16956 cp_parser_objc_expression (cp_parser* parser) in cp_parser_objc_expression() argument
16959 cp_token *kwd = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_expression()
16964 return cp_parser_objc_message_expression (parser); in cp_parser_objc_expression()
16967 kwd = cp_lexer_consume_token (parser->lexer); in cp_parser_objc_expression()
16974 return cp_parser_objc_encode_expression (parser); in cp_parser_objc_expression()
16977 return cp_parser_objc_protocol_expression (parser); in cp_parser_objc_expression()
16980 return cp_parser_objc_selector_expression (parser); in cp_parser_objc_expression()
16987 cp_parser_skip_to_end_of_block_or_statement (parser); in cp_parser_objc_expression()
17001 cp_parser_objc_message_expression (cp_parser* parser) in cp_parser_objc_message_expression() argument
17005 cp_lexer_consume_token (parser->lexer); /* Eat '['. */ in cp_parser_objc_message_expression()
17006 receiver = cp_parser_objc_message_receiver (parser); in cp_parser_objc_message_expression()
17007 messageargs = cp_parser_objc_message_args (parser); in cp_parser_objc_message_expression()
17008 cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"); in cp_parser_objc_message_expression()
17022 cp_parser_objc_message_receiver (cp_parser* parser) in cp_parser_objc_message_receiver() argument
17028 cp_parser_parse_tentatively (parser); in cp_parser_objc_message_receiver()
17029 rcv = cp_parser_expression (parser, false); in cp_parser_objc_message_receiver()
17031 if (cp_parser_parse_definitely (parser)) in cp_parser_objc_message_receiver()
17034 rcv = cp_parser_simple_type_specifier (parser, in cp_parser_objc_message_receiver()
17061 cp_parser_objc_message_args (cp_parser* parser) in cp_parser_objc_message_args() argument
17065 cp_token *token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_message_args()
17072 selector = cp_parser_objc_selector (parser); in cp_parser_objc_message_args()
17076 && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)) in cp_parser_objc_message_args()
17080 cp_parser_require (parser, CPP_COLON, "`:'"); in cp_parser_objc_message_args()
17081 arg = cp_parser_assignment_expression (parser, false); in cp_parser_objc_message_args()
17087 token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_message_args()
17095 cp_lexer_consume_token (parser->lexer); in cp_parser_objc_message_args()
17096 arg = cp_parser_assignment_expression (parser, false); in cp_parser_objc_message_args()
17102 token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_message_args()
17116 cp_parser_objc_encode_expression (cp_parser* parser) in cp_parser_objc_encode_expression() argument
17120 cp_lexer_consume_token (parser->lexer); /* Eat '@encode'. */ in cp_parser_objc_encode_expression()
17121 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_objc_encode_expression()
17122 type = complete_type (cp_parser_type_id (parser)); in cp_parser_objc_encode_expression()
17123 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_objc_encode_expression()
17137 cp_parser_objc_defs_expression (cp_parser *parser) in cp_parser_objc_defs_expression() argument
17141 cp_lexer_consume_token (parser->lexer); /* Eat '@defs'. */ in cp_parser_objc_defs_expression()
17142 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_objc_defs_expression()
17143 name = cp_parser_identifier (parser); in cp_parser_objc_defs_expression()
17144 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_objc_defs_expression()
17157 cp_parser_objc_protocol_expression (cp_parser* parser) in cp_parser_objc_protocol_expression() argument
17161 cp_lexer_consume_token (parser->lexer); /* Eat '@protocol'. */ in cp_parser_objc_protocol_expression()
17162 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_objc_protocol_expression()
17163 proto = cp_parser_identifier (parser); in cp_parser_objc_protocol_expression()
17164 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_objc_protocol_expression()
17185 cp_parser_objc_selector_expression (cp_parser* parser) in cp_parser_objc_selector_expression() argument
17191 cp_lexer_consume_token (parser->lexer); /* Eat '@selector'. */ in cp_parser_objc_selector_expression()
17192 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_objc_selector_expression()
17193 token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_selector_expression()
17202 selector = cp_parser_objc_selector (parser); in cp_parser_objc_selector_expression()
17204 if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON) in cp_parser_objc_selector_expression()
17205 && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE)) in cp_parser_objc_selector_expression()
17215 cp_parser_error (parser, "expected %<:%>"); in cp_parser_objc_selector_expression()
17219 token = cp_lexer_consume_token (parser->lexer); in cp_parser_objc_selector_expression()
17235 token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_selector_expression()
17239 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_objc_selector_expression()
17253 cp_parser_objc_identifier_list (cp_parser* parser) in cp_parser_objc_identifier_list() argument
17255 tree list = build_tree_list (NULL_TREE, cp_parser_identifier (parser)); in cp_parser_objc_identifier_list()
17256 cp_token *sep = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_identifier_list()
17260 cp_lexer_consume_token (parser->lexer); /* Eat ','. */ in cp_parser_objc_identifier_list()
17263 cp_parser_identifier (parser))); in cp_parser_objc_identifier_list()
17264 sep = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_identifier_list()
17279 cp_parser_objc_alias_declaration (cp_parser* parser) in cp_parser_objc_alias_declaration() argument
17283 cp_lexer_consume_token (parser->lexer); /* Eat '@compatibility_alias'. */ in cp_parser_objc_alias_declaration()
17284 alias = cp_parser_identifier (parser); in cp_parser_objc_alias_declaration()
17285 orig = cp_parser_identifier (parser); in cp_parser_objc_alias_declaration()
17287 cp_parser_consume_semicolon_at_end_of_statement (parser); in cp_parser_objc_alias_declaration()
17299 cp_parser_objc_class_declaration (cp_parser* parser) in cp_parser_objc_class_declaration() argument
17301 cp_lexer_consume_token (parser->lexer); /* Eat '@class'. */ in cp_parser_objc_class_declaration()
17302 objc_declare_class (cp_parser_objc_identifier_list (parser)); in cp_parser_objc_class_declaration()
17303 cp_parser_consume_semicolon_at_end_of_statement (parser); in cp_parser_objc_class_declaration()
17317 cp_parser_objc_protocol_refs_opt (cp_parser* parser) in cp_parser_objc_protocol_refs_opt() argument
17321 if(cp_lexer_next_token_is (parser->lexer, CPP_LESS)) in cp_parser_objc_protocol_refs_opt()
17323 cp_lexer_consume_token (parser->lexer); /* Eat '<'. */ in cp_parser_objc_protocol_refs_opt()
17324 protorefs = cp_parser_objc_identifier_list (parser); in cp_parser_objc_protocol_refs_opt()
17325 cp_parser_require (parser, CPP_GREATER, "`>'"); in cp_parser_objc_protocol_refs_opt()
17334 cp_parser_objc_visibility_spec (cp_parser* parser) in cp_parser_objc_visibility_spec() argument
17336 cp_token *vis = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_visibility_spec()
17354 cp_lexer_consume_token (parser->lexer); in cp_parser_objc_visibility_spec()
17360 cp_parser_objc_method_type (cp_parser* parser) in cp_parser_objc_method_type() argument
17363 (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS in cp_parser_objc_method_type()
17371 cp_parser_objc_protocol_qualifiers (cp_parser* parser) in cp_parser_objc_protocol_qualifiers() argument
17374 cp_token *token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_protocol_qualifiers()
17387 cp_lexer_consume_token (parser->lexer); in cp_parser_objc_protocol_qualifiers()
17388 token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_protocol_qualifiers()
17398 cp_parser_objc_typename (cp_parser* parser) in cp_parser_objc_typename() argument
17402 if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)) in cp_parser_objc_typename()
17406 cp_lexer_consume_token (parser->lexer); /* Eat '('. */ in cp_parser_objc_typename()
17407 proto_quals = cp_parser_objc_protocol_qualifiers (parser); in cp_parser_objc_typename()
17411 if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)) in cp_parser_objc_typename()
17412 cp_type = cp_parser_type_id (parser); in cp_parser_objc_typename()
17414 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_objc_typename()
17436 cp_parser_objc_selector (cp_parser* parser) in cp_parser_objc_selector() argument
17438 cp_token *token = cp_lexer_consume_token (parser->lexer); in cp_parser_objc_selector()
17467 cp_parser_objc_method_keyword_params (cp_parser* parser) in cp_parser_objc_method_keyword_params() argument
17471 cp_token *token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_method_keyword_params()
17478 selector = cp_parser_objc_selector (parser); in cp_parser_objc_method_keyword_params()
17482 && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)) in cp_parser_objc_method_keyword_params()
17486 cp_parser_require (parser, CPP_COLON, "`:'"); in cp_parser_objc_method_keyword_params()
17487 typename = cp_parser_objc_typename (parser); in cp_parser_objc_method_keyword_params()
17488 identifier = cp_parser_identifier (parser); in cp_parser_objc_method_keyword_params()
17496 token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_method_keyword_params()
17505 cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp) in cp_parser_objc_method_tail_params_opt() argument
17508 cp_token *token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_method_tail_params_opt()
17516 cp_lexer_consume_token (parser->lexer); /* Eat ','. */ in cp_parser_objc_method_tail_params_opt()
17517 token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_method_tail_params_opt()
17521 cp_lexer_consume_token (parser->lexer); /* Eat '...'. */ in cp_parser_objc_method_tail_params_opt()
17526 parmdecl = cp_parser_parameter_declaration (parser, false, NULL); in cp_parser_objc_method_tail_params_opt()
17533 token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_method_tail_params_opt()
17542 cp_parser_objc_interstitial_code (cp_parser* parser) in cp_parser_objc_interstitial_code() argument
17544 cp_token *token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_interstitial_code()
17549 && cp_parser_is_string_literal (cp_lexer_peek_nth_token (parser->lexer, 2))) in cp_parser_objc_interstitial_code()
17550 cp_parser_linkage_specification (parser); in cp_parser_objc_interstitial_code()
17553 cp_parser_pragma (parser, pragma_external); in cp_parser_objc_interstitial_code()
17556 cp_lexer_consume_token (parser->lexer); in cp_parser_objc_interstitial_code()
17559 cp_parser_block_declaration (parser, /*statement_p=*/false); in cp_parser_objc_interstitial_code()
17565 cp_parser_objc_method_signature (cp_parser* parser) in cp_parser_objc_method_signature() argument
17570 cp_parser_objc_method_type (parser); in cp_parser_objc_method_signature()
17571 rettype = cp_parser_objc_typename (parser); in cp_parser_objc_method_signature()
17572 kwdparms = cp_parser_objc_method_keyword_params (parser); in cp_parser_objc_method_signature()
17573 optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis); in cp_parser_objc_method_signature()
17581 cp_parser_objc_method_prototype_list (cp_parser* parser) in cp_parser_objc_method_prototype_list() argument
17583 cp_token *token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_method_prototype_list()
17590 (cp_parser_objc_method_signature (parser)); in cp_parser_objc_method_prototype_list()
17591 cp_parser_consume_semicolon_at_end_of_statement (parser); in cp_parser_objc_method_prototype_list()
17595 cp_parser_objc_interstitial_code (parser); in cp_parser_objc_method_prototype_list()
17597 token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_method_prototype_list()
17600 cp_lexer_consume_token (parser->lexer); /* Eat '@end'. */ in cp_parser_objc_method_prototype_list()
17607 cp_parser_objc_method_definition_list (cp_parser* parser) in cp_parser_objc_method_definition_list() argument
17609 cp_token *token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_method_definition_list()
17619 (cp_parser_objc_method_signature (parser)); in cp_parser_objc_method_definition_list()
17622 if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)) in cp_parser_objc_method_definition_list()
17623 cp_lexer_consume_token (parser->lexer); in cp_parser_objc_method_definition_list()
17627 meth = cp_parser_function_definition_after_declarator (parser, in cp_parser_objc_method_definition_list()
17634 cp_parser_objc_interstitial_code (parser); in cp_parser_objc_method_definition_list()
17636 token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_method_definition_list()
17639 cp_lexer_consume_token (parser->lexer); /* Eat '@end'. */ in cp_parser_objc_method_definition_list()
17646 cp_parser_objc_class_ivars (cp_parser* parser) in cp_parser_objc_class_ivars() argument
17648 cp_token *token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_class_ivars()
17653 cp_lexer_consume_token (parser->lexer); /* Eat '{'. */ in cp_parser_objc_class_ivars()
17654 token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_class_ivars()
17662 cp_parser_objc_visibility_spec (parser); in cp_parser_objc_class_ivars()
17664 if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE)) in cp_parser_objc_class_ivars()
17667 cp_parser_decl_specifier_seq (parser, in cp_parser_objc_class_ivars()
17676 while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)) in cp_parser_objc_class_ivars()
17683 token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_class_ivars()
17688 && (cp_lexer_peek_nth_token (parser->lexer, 2)->type in cp_parser_objc_class_ivars()
17693 cp_parser_identifier (parser), in cp_parser_objc_class_ivars()
17697 cp_lexer_consume_token (parser->lexer); /* Eat ':'. */ in cp_parser_objc_class_ivars()
17700 = cp_parser_constant_expression (parser, in cp_parser_objc_class_ivars()
17708 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED, in cp_parser_objc_class_ivars()
17715 attributes = cp_parser_attributes_opt (parser); in cp_parser_objc_class_ivars()
17742 token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_class_ivars()
17746 cp_lexer_consume_token (parser->lexer); /* Eat ','. */ in cp_parser_objc_class_ivars()
17752 cp_parser_consume_semicolon_at_end_of_statement (parser); in cp_parser_objc_class_ivars()
17753 token = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_class_ivars()
17756 cp_lexer_consume_token (parser->lexer); /* Eat '}'. */ in cp_parser_objc_class_ivars()
17758 if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)) in cp_parser_objc_class_ivars()
17759 cp_lexer_consume_token (parser->lexer); in cp_parser_objc_class_ivars()
17765 cp_parser_objc_protocol_declaration (cp_parser* parser) in cp_parser_objc_protocol_declaration() argument
17770 cp_lexer_consume_token (parser->lexer); /* Eat '@protocol'. */ in cp_parser_objc_protocol_declaration()
17771 if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)) in cp_parser_objc_protocol_declaration()
17778 tok = cp_lexer_peek_nth_token (parser->lexer, 2); in cp_parser_objc_protocol_declaration()
17783 objc_declare_protocols (cp_parser_objc_identifier_list (parser)); in cp_parser_objc_protocol_declaration()
17785 cp_parser_consume_semicolon_at_end_of_statement (parser); in cp_parser_objc_protocol_declaration()
17791 proto = cp_parser_identifier (parser); in cp_parser_objc_protocol_declaration()
17792 protorefs = cp_parser_objc_protocol_refs_opt (parser); in cp_parser_objc_protocol_declaration()
17794 cp_parser_objc_method_prototype_list (parser); in cp_parser_objc_protocol_declaration()
17801 cp_parser_objc_superclass_or_category (cp_parser *parser, tree *super, in cp_parser_objc_superclass_or_category() argument
17804 cp_token *next = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_superclass_or_category()
17809 cp_lexer_consume_token (parser->lexer); /* Eat ':'. */ in cp_parser_objc_superclass_or_category()
17810 *super = cp_parser_identifier (parser); in cp_parser_objc_superclass_or_category()
17814 cp_lexer_consume_token (parser->lexer); /* Eat '('. */ in cp_parser_objc_superclass_or_category()
17815 *categ = cp_parser_identifier (parser); in cp_parser_objc_superclass_or_category()
17816 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_objc_superclass_or_category()
17823 cp_parser_objc_class_interface (cp_parser* parser) in cp_parser_objc_class_interface() argument
17827 cp_lexer_consume_token (parser->lexer); /* Eat '@interface'. */ in cp_parser_objc_class_interface()
17828 name = cp_parser_identifier (parser); in cp_parser_objc_class_interface()
17829 cp_parser_objc_superclass_or_category (parser, &super, &categ); in cp_parser_objc_class_interface()
17830 protos = cp_parser_objc_protocol_refs_opt (parser); in cp_parser_objc_class_interface()
17839 cp_parser_objc_class_ivars (parser); in cp_parser_objc_class_interface()
17843 cp_parser_objc_method_prototype_list (parser); in cp_parser_objc_class_interface()
17849 cp_parser_objc_class_implementation (cp_parser* parser) in cp_parser_objc_class_implementation() argument
17853 cp_lexer_consume_token (parser->lexer); /* Eat '@implementation'. */ in cp_parser_objc_class_implementation()
17854 name = cp_parser_identifier (parser); in cp_parser_objc_class_implementation()
17855 cp_parser_objc_superclass_or_category (parser, &super, &categ); in cp_parser_objc_class_implementation()
17864 cp_parser_objc_class_ivars (parser); in cp_parser_objc_class_implementation()
17868 cp_parser_objc_method_definition_list (parser); in cp_parser_objc_class_implementation()
17874 cp_parser_objc_end_implementation (cp_parser* parser) in cp_parser_objc_end_implementation() argument
17876 cp_lexer_consume_token (parser->lexer); /* Eat '@end'. */ in cp_parser_objc_end_implementation()
17883 cp_parser_objc_declaration (cp_parser* parser) in cp_parser_objc_declaration() argument
17886 cp_token *kwd = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_declaration()
17891 cp_parser_objc_alias_declaration (parser); in cp_parser_objc_declaration()
17894 cp_parser_objc_class_declaration (parser); in cp_parser_objc_declaration()
17897 cp_parser_objc_protocol_declaration (parser); in cp_parser_objc_declaration()
17900 cp_parser_objc_class_interface (parser); in cp_parser_objc_declaration()
17903 cp_parser_objc_class_implementation (parser); in cp_parser_objc_declaration()
17906 cp_parser_objc_end_implementation (parser); in cp_parser_objc_declaration()
17910 cp_parser_skip_to_end_of_block_or_statement (parser); in cp_parser_objc_declaration()
17932 cp_parser_objc_try_catch_finally_statement (cp_parser *parser) { in cp_parser_objc_try_catch_finally_statement() argument
17936 cp_parser_require_keyword (parser, RID_AT_TRY, "`@try'"); in cp_parser_objc_try_catch_finally_statement()
17937 location = cp_lexer_peek_token (parser->lexer)->location; in cp_parser_objc_try_catch_finally_statement()
17941 cp_parser_compound_statement (parser, NULL, false); in cp_parser_objc_try_catch_finally_statement()
17944 while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH)) in cp_parser_objc_try_catch_finally_statement()
17949 cp_lexer_consume_token (parser->lexer); in cp_parser_objc_try_catch_finally_statement()
17950 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_objc_try_catch_finally_statement()
17951 parmdecl = cp_parser_parameter_declaration (parser, false, NULL); in cp_parser_objc_try_catch_finally_statement()
17956 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_objc_try_catch_finally_statement()
17958 cp_parser_compound_statement (parser, NULL, false); in cp_parser_objc_try_catch_finally_statement()
17962 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY)) in cp_parser_objc_try_catch_finally_statement()
17964 cp_lexer_consume_token (parser->lexer); in cp_parser_objc_try_catch_finally_statement()
17965 location = cp_lexer_peek_token (parser->lexer)->location; in cp_parser_objc_try_catch_finally_statement()
17969 cp_parser_compound_statement (parser, NULL, false); in cp_parser_objc_try_catch_finally_statement()
17984 cp_parser_objc_synchronized_statement (cp_parser *parser) { in cp_parser_objc_synchronized_statement() argument
17988 cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, "`@synchronized'"); in cp_parser_objc_synchronized_statement()
17990 location = cp_lexer_peek_token (parser->lexer)->location; in cp_parser_objc_synchronized_statement()
17991 cp_parser_require (parser, CPP_OPEN_PAREN, "`('"); in cp_parser_objc_synchronized_statement()
17992 lock = cp_parser_expression (parser, false); in cp_parser_objc_synchronized_statement()
17993 cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); in cp_parser_objc_synchronized_statement()
17998 cp_parser_compound_statement (parser, NULL, false); in cp_parser_objc_synchronized_statement()
18011 cp_parser_objc_throw_statement (cp_parser *parser) { in cp_parser_objc_throw_statement() argument
18014 cp_parser_require_keyword (parser, RID_AT_THROW, "`@throw'"); in cp_parser_objc_throw_statement()
18016 if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)) in cp_parser_objc_throw_statement()
18017 expr = cp_parser_assignment_expression (parser, false); in cp_parser_objc_throw_statement()
18019 cp_parser_consume_semicolon_at_end_of_statement (parser); in cp_parser_objc_throw_statement()
18027 cp_parser_objc_statement (cp_parser * parser) { in cp_parser_objc_statement() argument
18029 cp_token *kwd = cp_lexer_peek_token (parser->lexer); in cp_parser_objc_statement()
18034 return cp_parser_objc_try_catch_finally_statement (parser); in cp_parser_objc_statement()
18036 return cp_parser_objc_synchronized_statement (parser); in cp_parser_objc_statement()
18038 return cp_parser_objc_throw_statement (parser); in cp_parser_objc_statement()
18041 cp_parser_skip_to_end_of_block_or_statement (parser); in cp_parser_objc_statement()
18074 cp_parser_omp_clause_name (cp_parser *parser) in cp_parser_omp_clause_name() argument
18078 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF)) in cp_parser_omp_clause_name()
18080 else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT)) in cp_parser_omp_clause_name()
18082 else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE)) in cp_parser_omp_clause_name()
18084 else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME)) in cp_parser_omp_clause_name()
18086 tree id = cp_lexer_peek_token (parser->lexer)->u.value; in cp_parser_omp_clause_name()
18129 cp_lexer_consume_token (parser->lexer); in cp_parser_omp_clause_name()
18164 cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind, in cp_parser_omp_var_list_no_open() argument
18171 name = cp_parser_id_expression (parser, /*template_p=*/false, in cp_parser_omp_var_list_no_open()
18179 decl = cp_parser_lookup_name_simple (parser, name); in cp_parser_omp_var_list_no_open()
18181 cp_parser_name_lookup_error (parser, name, decl, NULL); in cp_parser_omp_var_list_no_open()
18193 if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA)) in cp_parser_omp_var_list_no_open()
18195 cp_lexer_consume_token (parser->lexer); in cp_parser_omp_var_list_no_open()
18198 if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'")) in cp_parser_omp_var_list_no_open()
18205 ending = cp_parser_skip_to_closing_parenthesis (parser, in cp_parser_omp_var_list_no_open()
18220 cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list) in cp_parser_omp_var_list() argument
18222 if (cp_parser_require (parser, CPP_OPEN_PAREN, "`('")) in cp_parser_omp_var_list()
18223 return cp_parser_omp_var_list_no_open (parser, kind, list); in cp_parser_omp_var_list()
18231 cp_parser_omp_clause_default (cp_parser *parser, tree list) in cp_parser_omp_clause_default() argument
18236 if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('")) in cp_parser_omp_clause_default()
18238 if (cp_lexer_next_token_is (parser->lexer, CPP_NAME)) in cp_parser_omp_clause_default()
18240 tree id = cp_lexer_peek_token (parser->lexer)->u.value; in cp_parser_omp_clause_default()
18261 cp_lexer_consume_token (parser->lexer); in cp_parser_omp_clause_default()
18266 cp_parser_error (parser, "expected %<none%> or %<shared%>"); in cp_parser_omp_clause_default()
18269 if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'")) in cp_parser_omp_clause_default()
18270 cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true, in cp_parser_omp_clause_default()
18289 cp_parser_omp_clause_if (cp_parser *parser, tree list) in cp_parser_omp_clause_if() argument
18293 if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('")) in cp_parser_omp_clause_if()
18296 t = cp_parser_condition (parser); in cp_parser_omp_clause_if()
18299 || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'")) in cp_parser_omp_clause_if()
18300 cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true, in cp_parser_omp_clause_if()
18317 cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED, tree list) in cp_parser_omp_clause_nowait()
18332 cp_parser_omp_clause_num_threads (cp_parser *parser, tree list) in cp_parser_omp_clause_num_threads() argument
18336 if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('")) in cp_parser_omp_clause_num_threads()
18339 t = cp_parser_expression (parser, false); in cp_parser_omp_clause_num_threads()
18342 || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'")) in cp_parser_omp_clause_num_threads()
18343 cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true, in cp_parser_omp_clause_num_threads()
18360 cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED, tree list) in cp_parser_omp_clause_ordered()
18378 cp_parser_omp_clause_reduction (cp_parser *parser, tree list) in cp_parser_omp_clause_reduction() argument
18383 if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('")) in cp_parser_omp_clause_reduction()
18386 switch (cp_lexer_peek_token (parser->lexer)->type) in cp_parser_omp_clause_reduction()
18413 cp_parser_error (parser, "`+', `*', `-', `&', `^', `|', `&&', or `||'"); in cp_parser_omp_clause_reduction()
18415 cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true, in cp_parser_omp_clause_reduction()
18420 cp_lexer_consume_token (parser->lexer); in cp_parser_omp_clause_reduction()
18422 if (!cp_parser_require (parser, CPP_COLON, "`:'")) in cp_parser_omp_clause_reduction()
18425 nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list); in cp_parser_omp_clause_reduction()
18440 cp_parser_omp_clause_schedule (cp_parser *parser, tree list) in cp_parser_omp_clause_schedule() argument
18444 if (!cp_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>")) in cp_parser_omp_clause_schedule()
18449 if (cp_lexer_next_token_is (parser->lexer, CPP_NAME)) in cp_parser_omp_clause_schedule()
18451 tree id = cp_lexer_peek_token (parser->lexer)->u.value; in cp_parser_omp_clause_schedule()
18478 else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC)) in cp_parser_omp_clause_schedule()
18482 cp_lexer_consume_token (parser->lexer); in cp_parser_omp_clause_schedule()
18484 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA)) in cp_parser_omp_clause_schedule()
18486 cp_lexer_consume_token (parser->lexer); in cp_parser_omp_clause_schedule()
18488 t = cp_parser_assignment_expression (parser, false); in cp_parser_omp_clause_schedule()
18498 if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'")) in cp_parser_omp_clause_schedule()
18501 else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`,' or `)'")) in cp_parser_omp_clause_schedule()
18509 cp_parser_error (parser, "invalid schedule kind"); in cp_parser_omp_clause_schedule()
18511 cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true, in cp_parser_omp_clause_schedule()
18522 cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask, in cp_parser_omp_all_clauses() argument
18527 while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL)) in cp_parser_omp_all_clauses()
18529 pragma_omp_clause c_kind = cp_parser_omp_clause_name (parser); in cp_parser_omp_all_clauses()
18536 clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses); in cp_parser_omp_all_clauses()
18540 clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE, in cp_parser_omp_all_clauses()
18545 clauses = cp_parser_omp_clause_default (parser, clauses); in cp_parser_omp_all_clauses()
18549 clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE, in cp_parser_omp_all_clauses()
18554 clauses = cp_parser_omp_clause_if (parser, clauses); in cp_parser_omp_all_clauses()
18558 clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE, in cp_parser_omp_all_clauses()
18563 clauses = cp_parser_omp_clause_nowait (parser, clauses); in cp_parser_omp_all_clauses()
18567 clauses = cp_parser_omp_clause_num_threads (parser, clauses); in cp_parser_omp_all_clauses()
18571 clauses = cp_parser_omp_clause_ordered (parser, clauses); in cp_parser_omp_all_clauses()
18575 clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE, in cp_parser_omp_all_clauses()
18580 clauses = cp_parser_omp_clause_reduction (parser, clauses); in cp_parser_omp_all_clauses()
18584 clauses = cp_parser_omp_clause_schedule (parser, clauses); in cp_parser_omp_all_clauses()
18588 clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED, in cp_parser_omp_all_clauses()
18593 cp_parser_error (parser, "expected %<#pragma omp%> clause"); in cp_parser_omp_all_clauses()
18606 cp_parser_skip_to_pragma_eol (parser, pragma_tok); in cp_parser_omp_all_clauses()
18619 cp_parser_begin_omp_structured_block (cp_parser *parser) in cp_parser_begin_omp_structured_block() argument
18621 unsigned save = parser->in_statement; in cp_parser_begin_omp_structured_block()
18631 if (parser->in_statement) in cp_parser_begin_omp_structured_block()
18632 parser->in_statement = IN_OMP_BLOCK; in cp_parser_begin_omp_structured_block()
18638 cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save) in cp_parser_end_omp_structured_block() argument
18640 parser->in_statement = save; in cp_parser_end_omp_structured_block()
18644 cp_parser_omp_structured_block (cp_parser *parser) in cp_parser_omp_structured_block() argument
18647 unsigned int save = cp_parser_begin_omp_structured_block (parser); in cp_parser_omp_structured_block()
18649 cp_parser_statement (parser, NULL_TREE, false); in cp_parser_omp_structured_block()
18651 cp_parser_end_omp_structured_block (parser, save); in cp_parser_omp_structured_block()
18667 cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok) in cp_parser_omp_atomic() argument
18672 cp_parser_require_pragma_eol (parser, pragma_tok); in cp_parser_omp_atomic()
18674 lhs = cp_parser_unary_expression (parser, /*address_p=*/false, in cp_parser_omp_atomic()
18696 switch (cp_lexer_peek_token (parser->lexer)->type) in cp_parser_omp_atomic()
18726 cp_parser_error (parser, in cp_parser_omp_atomic()
18730 cp_lexer_consume_token (parser->lexer); in cp_parser_omp_atomic()
18732 rhs = cp_parser_expression (parser, false); in cp_parser_omp_atomic()
18738 cp_parser_consume_semicolon_at_end_of_statement (parser); in cp_parser_omp_atomic()
18742 cp_parser_skip_to_end_of_block_or_statement (parser); in cp_parser_omp_atomic()
18750 cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok) in cp_parser_omp_barrier() argument
18752 cp_parser_require_pragma_eol (parser, pragma_tok); in cp_parser_omp_barrier()
18761 cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok) in cp_parser_omp_critical() argument
18765 if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)) in cp_parser_omp_critical()
18767 cp_lexer_consume_token (parser->lexer); in cp_parser_omp_critical()
18769 name = cp_parser_identifier (parser); in cp_parser_omp_critical()
18772 || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'")) in cp_parser_omp_critical()
18773 cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true, in cp_parser_omp_critical()
18779 cp_parser_require_pragma_eol (parser, pragma_tok); in cp_parser_omp_critical()
18781 stmt = cp_parser_omp_structured_block (parser); in cp_parser_omp_critical()
18792 cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok) in cp_parser_omp_flush() argument
18794 if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)) in cp_parser_omp_flush()
18795 (void) cp_parser_omp_var_list (parser, 0, NULL); in cp_parser_omp_flush()
18796 cp_parser_require_pragma_eol (parser, pragma_tok); in cp_parser_omp_flush()
18804 cp_parser_omp_for_loop (cp_parser *parser) in cp_parser_omp_for_loop() argument
18809 if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR)) in cp_parser_omp_for_loop()
18811 cp_parser_error (parser, "for statement expected"); in cp_parser_omp_for_loop()
18814 loc = cp_lexer_consume_token (parser->lexer)->location; in cp_parser_omp_for_loop()
18815 if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('")) in cp_parser_omp_for_loop()
18820 if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)) in cp_parser_omp_for_loop()
18827 cp_parser_parse_tentatively (parser); in cp_parser_omp_for_loop()
18828 cp_parser_type_specifier_seq (parser, /*is_condition=*/false, in cp_parser_omp_for_loop()
18830 if (!cp_parser_error_occurred (parser)) in cp_parser_omp_for_loop()
18835 declarator = cp_parser_declarator (parser, in cp_parser_omp_for_loop()
18840 attributes = cp_parser_attributes_opt (parser); in cp_parser_omp_for_loop()
18841 asm_specification = cp_parser_asm_specification_opt (parser); in cp_parser_omp_for_loop()
18843 cp_parser_require (parser, CPP_EQ, "`='"); in cp_parser_omp_for_loop()
18844 if (cp_parser_parse_definitely (parser)) in cp_parser_omp_for_loop()
18853 init = cp_parser_assignment_expression (parser, false); in cp_parser_omp_for_loop()
18863 cp_parser_abort_tentative_parse (parser); in cp_parser_omp_for_loop()
18868 init = cp_parser_expression (parser, false); in cp_parser_omp_for_loop()
18870 cp_parser_require (parser, CPP_SEMICOLON, "`;'"); in cp_parser_omp_for_loop()
18874 if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)) in cp_parser_omp_for_loop()
18875 cond = cp_parser_condition (parser); in cp_parser_omp_for_loop()
18876 cp_parser_require (parser, CPP_SEMICOLON, "`;'"); in cp_parser_omp_for_loop()
18879 if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)) in cp_parser_omp_for_loop()
18880 incr = cp_parser_expression (parser, false); in cp_parser_omp_for_loop()
18882 if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'")) in cp_parser_omp_for_loop()
18883 cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true, in cp_parser_omp_for_loop()
18889 parser->in_statement = IN_OMP_FOR; in cp_parser_omp_for_loop()
18894 cp_parser_statement (parser, NULL_TREE, false); in cp_parser_omp_for_loop()
18914 cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok) in cp_parser_omp_for() argument
18919 clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK, in cp_parser_omp_for()
18923 save = cp_parser_begin_omp_structured_block (parser); in cp_parser_omp_for()
18925 ret = cp_parser_omp_for_loop (parser); in cp_parser_omp_for()
18929 cp_parser_end_omp_structured_block (parser, save); in cp_parser_omp_for()
18940 cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok) in cp_parser_omp_master() argument
18942 cp_parser_require_pragma_eol (parser, pragma_tok); in cp_parser_omp_master()
18943 return c_finish_omp_master (cp_parser_omp_structured_block (parser)); in cp_parser_omp_master()
18951 cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok) in cp_parser_omp_ordered() argument
18953 cp_parser_require_pragma_eol (parser, pragma_tok); in cp_parser_omp_ordered()
18954 return c_finish_omp_ordered (cp_parser_omp_structured_block (parser)); in cp_parser_omp_ordered()
18967 cp_parser_omp_sections_scope (cp_parser *parser) in cp_parser_omp_sections_scope() argument
18973 if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'")) in cp_parser_omp_sections_scope()
18978 if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION) in cp_parser_omp_sections_scope()
18983 save = cp_parser_begin_omp_structured_block (parser); in cp_parser_omp_sections_scope()
18987 cp_parser_statement (parser, NULL_TREE, false); in cp_parser_omp_sections_scope()
18989 tok = cp_lexer_peek_token (parser->lexer); in cp_parser_omp_sections_scope()
18998 cp_parser_end_omp_structured_block (parser, save); in cp_parser_omp_sections_scope()
19006 tok = cp_lexer_peek_token (parser->lexer); in cp_parser_omp_sections_scope()
19014 cp_lexer_consume_token (parser->lexer); in cp_parser_omp_sections_scope()
19015 cp_parser_require_pragma_eol (parser, tok); in cp_parser_omp_sections_scope()
19020 cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>"); in cp_parser_omp_sections_scope()
19024 substmt = cp_parser_omp_structured_block (parser); in cp_parser_omp_sections_scope()
19028 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'"); in cp_parser_omp_sections_scope()
19052 cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok) in cp_parser_omp_sections() argument
19056 clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK, in cp_parser_omp_sections()
19059 ret = cp_parser_omp_sections_scope (parser); in cp_parser_omp_sections()
19082 cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok) in cp_parser_omp_parallel() argument
19090 if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR)) in cp_parser_omp_parallel()
19092 cp_lexer_consume_token (parser->lexer); in cp_parser_omp_parallel()
19098 else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME)) in cp_parser_omp_parallel()
19100 tree id = cp_lexer_peek_token (parser->lexer)->u.value; in cp_parser_omp_parallel()
19104 cp_lexer_consume_token (parser->lexer); in cp_parser_omp_parallel()
19112 clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok); in cp_parser_omp_parallel()
19114 save = cp_parser_begin_omp_structured_block (parser); in cp_parser_omp_parallel()
19119 cp_parser_already_scoped_statement (parser); in cp_parser_omp_parallel()
19125 stmt = cp_parser_omp_for_loop (parser); in cp_parser_omp_parallel()
19132 stmt = cp_parser_omp_sections_scope (parser); in cp_parser_omp_parallel()
19141 cp_parser_end_omp_structured_block (parser, save); in cp_parser_omp_parallel()
19159 cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok) in cp_parser_omp_single() argument
19165 = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK, in cp_parser_omp_single()
19167 OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser); in cp_parser_omp_single()
19176 cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok) in cp_parser_omp_threadprivate() argument
19180 vars = cp_parser_omp_var_list (parser, 0, NULL); in cp_parser_omp_threadprivate()
19181 cp_parser_require_pragma_eol (parser, pragma_tok); in cp_parser_omp_threadprivate()
19192 cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok) in cp_parser_omp_construct() argument
19199 cp_parser_omp_atomic (parser, pragma_tok); in cp_parser_omp_construct()
19202 stmt = cp_parser_omp_critical (parser, pragma_tok); in cp_parser_omp_construct()
19205 stmt = cp_parser_omp_for (parser, pragma_tok); in cp_parser_omp_construct()
19208 stmt = cp_parser_omp_master (parser, pragma_tok); in cp_parser_omp_construct()
19211 stmt = cp_parser_omp_ordered (parser, pragma_tok); in cp_parser_omp_construct()
19214 stmt = cp_parser_omp_parallel (parser, pragma_tok); in cp_parser_omp_construct()
19217 stmt = cp_parser_omp_sections (parser, pragma_tok); in cp_parser_omp_construct()
19220 stmt = cp_parser_omp_single (parser, pragma_tok); in cp_parser_omp_construct()
19230 /* The parser. */
19283 cp_parser_pragma (cp_parser *parser, enum pragma_context context) in cp_parser_pragma() argument
19288 pragma_tok = cp_lexer_consume_token (parser->lexer); in cp_parser_pragma()
19290 parser->lexer->in_pragma = true; in cp_parser_pragma()
19303 cp_parser_omp_barrier (parser, pragma_tok); in cp_parser_pragma()
19318 cp_parser_omp_flush (parser, pragma_tok); in cp_parser_pragma()
19330 cp_parser_omp_threadprivate (parser, pragma_tok); in cp_parser_pragma()
19343 cp_parser_omp_construct (parser, pragma_tok); in cp_parser_pragma()
19357 cp_parser_error (parser, "expected declaration specifiers"); in cp_parser_pragma()
19361 cp_parser_skip_to_pragma_eol (parser, pragma_tok); in cp_parser_pragma()
19421 #include "gt-cp-parser.h"