+2002-04-08 Paolo Carlini <pcarlini@unitus.it>
+
+ * parse.y (namespace_qualifier, maybe_identifier,
+ begin_explicit_instantiation, end_explicit_instantiation,
+ apparent_template_type, .finish_template_type,
+ do_id, maybe_init, defarg_again, component_decl_1):
+ Add ending ';', in accordance with POSIX.
+
2002-04-06 Mark Mitchell <mark@codesourcery.com>
PR c++/5571
$$ = lastiddecl;
got_scope = $$;
}
+ ;
any_id:
unqualified_id
{ $$ = $1; }
| /* empty */
{ $$ = NULL_TREE; }
+ ;
template_type_parm:
aggr maybe_identifier
begin_explicit_instantiation:
{ begin_explicit_instantiation(); }
+ ;
end_explicit_instantiation:
{ end_explicit_instantiation(); }
+ ;
/* The TYPENAME expansions are to deal with use of a template class name as
a template within the class itself, where the template decl is hidden by
| identifier '<' template_arg_list_opt '>'
.finish_template_type
{ $$ = $5; }
+ ;
self_template_type:
SELFNAME '<' template_arg_list_opt template_close_bracket
$$ = finish_template_type ($<ttype>-3, $<ttype>-1,
yychar == SCOPE);
}
+ ;
template_close_bracket:
'>'
else
$$ = $<ttype>-1;
}
+ ;
template_id:
PFUNCNAME '<' do_id template_arg_list_opt template_close_bracket
{ $$ = NULL_TREE; }
| '=' init
{ $$ = $2; }
+ ;
/* If we are processing a template, we don't want to expand this
initializer yet. */
{ replace_defarg ($1, $2); }
| DEFARG_MARKER error END_OF_SAVED_INPUT
{ replace_defarg ($1, error_mark_node); }
+ ;
pending_defargs:
/* empty */ %prec EMPTY
{ $$ = grokfield ($$, NULL_TREE, $4, $2, $3); }
| using_decl
{ $$ = do_class_using_decl ($1); }
+ ;
/* The case of exactly one component is handled directly by component_decl. */
/* ??? Huh? ^^^ */