FreeBSD/contrib/gcc/cp/parser.c
/* MEMBER_FUNCTION is a member function, or a friend.  If default
   arguments, or the body of the function have not yet been parsed,
   parse them now.  */
MEMBER_FUNCTION is a member function, or a friend.  If default
arguments, or the body of the function have not yet been parsed,
parse them now.
MEMBER_FUNCTION is a member function or a friend . If default arguments or the body of the function have not yet been parsed parse them now .
static void
cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
{
  if (DECL_FUNCTION_TEMPLATE_P (member_function))
    member_function = DECL_TEMPLATE_RESULT (member_function);
  gcc_assert (parser->num_classes_being_defined == 0);
  parser->unparsed_functions_queues
    = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
  maybe_begin_member_template_processing (member_function);
  if (DECL_PENDING_INLINE_P (member_function))
    {
      tree function_scope;
      cp_token_cache *tokens;
      tokens = DECL_PENDING_INLINE_INFO (member_function);
      DECL_PENDING_INLINE_INFO (member_function) = NULL;
      DECL_PENDING_INLINE_P (member_function) = 0;
      function_scope = current_function_decl;
      if (function_scope)
	push_function_context_to (function_scope);
      cp_parser_push_lexer_for_tokens (parser, tokens);
      start_preparsed_function (member_function, NULL_TREE,
				SF_PRE_PARSED | SF_INCLASS_INLINE);
      if (processing_template_decl)
	push_deferring_access_checks (dk_no_check);
      cp_parser_function_definition_after_declarator (parser,
						      true);
      if (processing_template_decl)
	pop_deferring_access_checks ();
      if (function_scope)
	pop_function_context_from (function_scope);
      cp_parser_pop_lexer (parser);
    }
  maybe_end_member_template_processing ();
  parser->unparsed_functions_queues
    = TREE_CHAIN (parser->unparsed_functions_queues);
}
static void cp_parser_late_parsing_for_member ( cp_parser * parser , tree member_function ) { if ( DECL_FUNCTION_TEMPLATE_P ( member_function ) ) member_function = DECL_TEMPLATE_RESULT ( member_function ) ; gcc_assert ( parser -> num_classes_being_defined == 0 ) ; parser -> unparsed_functions_queues = tree_cons ( NULL_TREE , NULL_TREE , parser -> unparsed_functions_queues ) ; maybe_begin_member_template_processing ( member_function ) ; if ( DECL_PENDING_INLINE_P ( member_function ) ) { tree function_scope ; cp_token_cache * tokens ; tokens = DECL_PENDING_INLINE_INFO ( member_function ) ; DECL_PENDING_INLINE_INFO ( member_function ) = NULL ; DECL_PENDING_INLINE_P ( member_function ) = 0 ; function_scope = current_function_decl ; if ( function_scope ) push_function_context_to ( function_scope ) ; cp_parser_push_lexer_for_tokens ( parser , tokens ) ; start_preparsed_function ( member_function , NULL_TREE , SF_PRE_PARSED | SF_INCLASS_INLINE ) ; if ( processing_template_decl ) push_deferring_access_checks ( dk_no_check ) ; cp_parser_function_definition_after_declarator ( parser , true ) ; if ( processing_template_decl ) pop_deferring_access_checks ( ) ; if ( function_scope ) pop_function_context_from ( function_scope ) ; cp_parser_pop_lexer ( parser ) ; } maybe_end_member_template_processing ( ) ; parser -> unparsed_functions_queues = TREE_CHAIN ( parser -> unparsed_functions_queues ) ; }
MEMBER_FUNCTION is a member function, or a friend.
MEMBER_FUNCTION is a member function or a friend .
/* If this member is a template, get the underlying
     FUNCTION_DECL.  */ /* There should not be any class definitions in progress at this
     point; the bodies of members are only parsed outside of all class
     definitions.  */ /* While we're parsing the member functions we might encounter more
     classes.  We want to handle them right away, but we don't want
     them getting mixed up with functions that are currently in the
     queue.  */ /* Make sure that any template parameters are in scope.  */ /* If the body of the function has not yet been parsed, parse it
     now.  */ /* The function is no longer pending; we are processing it.  */ /* If this is a local class, enter the scope of the containing
	 function.  */ /* Push the body of the function onto the lexer stack.  */ /* Let the front end know that we going to be defining this
	 function.  */ /* Don't do access checking if it is a templated function.  */ /* Now, parse the body of the function.  */ /*inline_p=*/ /* Leave the scope of the containing function.  */ /* Remove any template parameters from the symbol table.  */ /* Restore the queue.  */