mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-11 06:16:48 +08:00
parse.y (named_class_head): Push into class while parsing the base class list.
* parse.y (named_class_head): Push into class while parsing the base class list. * decl2.c (push_scope, pop_scope): New functions. * tree.h: Declare them. From-SVN: r23224
This commit is contained in:
parent
e0afe616d4
commit
f09bbbedfb
@ -1,5 +1,9 @@
|
|||||||
1998-10-22 Martin v. Löwis <loewis@informatik.hu-berlin.de>
|
1998-10-22 Martin von Löwis <loewis@informatik.hu-berlin.de>
|
||||||
|
|
||||||
|
* parse.y (named_class_head): Push into class while parsing the
|
||||||
|
base class list.
|
||||||
|
* decl2.c (push_scope, pop_scope): New functions.
|
||||||
|
* cp-tree.h: Declare them.
|
||||||
* init.c (build_new_1): Delay cleanup until end of full expression.
|
* init.c (build_new_1): Delay cleanup until end of full expression.
|
||||||
|
|
||||||
1998-10-21 Jason Merrill <jason@yorick.cygnus.com>
|
1998-10-21 Jason Merrill <jason@yorick.cygnus.com>
|
||||||
|
@ -2668,6 +2668,8 @@ extern void set_decl_namespace PROTO((tree, tree));
|
|||||||
extern tree current_decl_namespace PROTO((void));
|
extern tree current_decl_namespace PROTO((void));
|
||||||
extern void push_decl_namespace PROTO((tree));
|
extern void push_decl_namespace PROTO((tree));
|
||||||
extern void pop_decl_namespace PROTO((void));
|
extern void pop_decl_namespace PROTO((void));
|
||||||
|
extern void push_scope PROTO((tree));
|
||||||
|
extern void pop_scope PROTO((tree));
|
||||||
extern void do_namespace_alias PROTO((tree, tree));
|
extern void do_namespace_alias PROTO((tree, tree));
|
||||||
extern void do_toplevel_using_decl PROTO((tree));
|
extern void do_toplevel_using_decl PROTO((tree));
|
||||||
extern void do_local_using_decl PROTO((tree));
|
extern void do_local_using_decl PROTO((tree));
|
||||||
|
@ -4332,6 +4332,30 @@ check_decl_namespace ()
|
|||||||
my_friendly_assert (decl_namespace_list == NULL_TREE, 980711);
|
my_friendly_assert (decl_namespace_list == NULL_TREE, 980711);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Enter a class or namespace scope. */
|
||||||
|
|
||||||
|
void
|
||||||
|
push_scope (t)
|
||||||
|
tree t;
|
||||||
|
{
|
||||||
|
if (TREE_CODE (t) == NAMESPACE_DECL)
|
||||||
|
push_decl_namespace (t);
|
||||||
|
else
|
||||||
|
pushclass (t, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Leave scope pushed by push_scope. */
|
||||||
|
|
||||||
|
void
|
||||||
|
pop_scope (t)
|
||||||
|
tree t;
|
||||||
|
{
|
||||||
|
if (TREE_CODE (t) == NAMESPACE_DECL)
|
||||||
|
pop_decl_namespace ();
|
||||||
|
else
|
||||||
|
popclass (1);
|
||||||
|
}
|
||||||
|
|
||||||
/* [basic.lookup.koenig] */
|
/* [basic.lookup.koenig] */
|
||||||
/* A non-zero return value in the functions below indicates an error.
|
/* A non-zero return value in the functions below indicates an error.
|
||||||
All nodes allocated in the procedure are on the scratch obstack. */
|
All nodes allocated in the procedure are on the scratch obstack. */
|
||||||
|
@ -2235,14 +2235,19 @@ named_class_head:
|
|||||||
{ $$ = xref_tag (current_aggr, $1, 1); }
|
{ $$ = xref_tag (current_aggr, $1, 1); }
|
||||||
| named_class_head_sans_basetype_defn
|
| named_class_head_sans_basetype_defn
|
||||||
{ $<ttype>$ = xref_tag (current_aggr, $1, 0); }
|
{ $<ttype>$ = xref_tag (current_aggr, $1, 0); }
|
||||||
|
/* Class name is unqualified, so we look for base classes
|
||||||
|
in the current scope. */
|
||||||
maybe_base_class_list %prec EMPTY
|
maybe_base_class_list %prec EMPTY
|
||||||
{
|
{
|
||||||
$$ = $<ttype>2;
|
$$ = $<ttype>2;
|
||||||
if ($3)
|
if ($3)
|
||||||
xref_basetypes (current_aggr, $1, $<ttype>2, $3);
|
xref_basetypes (current_aggr, $1, $<ttype>2, $3);
|
||||||
}
|
}
|
||||||
| named_complex_class_head_sans_basetype maybe_base_class_list
|
| named_complex_class_head_sans_basetype
|
||||||
|
{ push_scope (CP_DECL_CONTEXT ($1)); }
|
||||||
|
maybe_base_class_list
|
||||||
{
|
{
|
||||||
|
pop_scope (CP_DECL_CONTEXT ($1));
|
||||||
$$ = TREE_TYPE ($1);
|
$$ = TREE_TYPE ($1);
|
||||||
if (TREE_INT_CST_LOW (current_aggr) == union_type
|
if (TREE_INT_CST_LOW (current_aggr) == union_type
|
||||||
&& TREE_CODE ($$) != UNION_TYPE)
|
&& TREE_CODE ($$) != UNION_TYPE)
|
||||||
@ -2250,10 +2255,10 @@ named_class_head:
|
|||||||
else if (TREE_CODE ($$) == UNION_TYPE
|
else if (TREE_CODE ($$) == UNION_TYPE
|
||||||
&& TREE_INT_CST_LOW (current_aggr) != union_type)
|
&& TREE_INT_CST_LOW (current_aggr) != union_type)
|
||||||
cp_pedwarn ("non-`union' tag used in declaring `%#T'", $$);
|
cp_pedwarn ("non-`union' tag used in declaring `%#T'", $$);
|
||||||
if ($2)
|
if ($3)
|
||||||
{
|
{
|
||||||
maybe_process_partial_specialization ($$);
|
maybe_process_partial_specialization ($$);
|
||||||
xref_basetypes (current_aggr, $1, $$, $2);
|
xref_basetypes (current_aggr, $1, $$, $3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
Loading…
Reference in New Issue
Block a user