Commit d8b55a76 by Jason Merrill Committed by Jason Merrill

cp-tree.h: Add access_protected_virtual_node.

	* cp-tree.h: Add access_protected_virtual_node.
	* class.c (init_class_processing): Initialize it.
	* decl.c (xref_basetypes): Use it.
	* parse.y (base_class_access_list): Likewise.
	* Make-lang.in (DEMANGLER_PROG): Add $(exeext).
	(c++.install-common): Install c++filt.

From-SVN: r17894
parent 03453a9f
Fri Feb 13 00:21:59 1998 Jason Merrill <jason@yorick.cygnus.com>
* cp-tree.h: Add access_protected_virtual_node.
* class.c (init_class_processing): Initialize it.
* decl.c (xref_basetypes): Use it.
* parse.y (base_class_access_list): Likewise.
* Make-lang.in (DEMANGLER_PROG): Add $(exeext).
(c++.install-common): Install c++filt.
Thu Feb 12 12:46:51 1998 Benjamin Kosnik <bkoz@rhino.cygnus.com>
* decl.c (shadow_tag): Give error for typedef-ing built-in types.
......@@ -688,10 +698,6 @@ Wed Jan 7 23:47:13 1998 Jason Merrill <jason@yorick.cygnus.com>
* typeck.c (build_modify_expr): Remove code that ignores trivial
methods.
Mon Dec 22 17:46:17 1997 Mark Mitchell <mmitchell@usa.net>
* method.c (build_overload_name): Fix mangling for __null.
Mon Dec 22 11:36:27 1997 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* call.c (add_builtin_candidate): Add default case in enumeration
......
......@@ -51,7 +51,7 @@ CXX_CROSS_NAME = `t='$(program_transform_cross_name)'; echo c++ | sed $$t`
GXX_CROSS_NAME = `t='$(program_transform_cross_name)'; echo g++ | sed $$t`
# The name to use for the demangler program.
DEMANGLER_PROG = c++filt
DEMANGLER_PROG = c++filt$(exeext)
# Extra headers to install.
CXX_EXTRA_HEADERS = $(srcdir)/cp/inc/typeinfo $(srcdir)/cp/inc/exception \
......@@ -225,6 +225,8 @@ c++.install-common:
rm -f $(bindir)/$(CXX_INSTALL_NAME)$(exeext); \
$(LN) $(bindir)/$(GXX_INSTALL_NAME)$(exeext) $(bindir)/$(CXX_INSTALL_NAME)$(exeext); \
fi ; \
rm -f $(bindir)/$(DEMANGLER_PROG) ; \
$(INSTALL_PROGRAM) $(DEMANGLER_PROG) $(bindir)/$(DEMANGLER_PROG) ; \
fi
c++.install-info:
......
......@@ -146,7 +146,8 @@ tree access_protected_node; /* 2 */
tree access_private_node; /* 3 */
tree access_default_virtual_node; /* 4 */
tree access_public_virtual_node; /* 5 */
tree access_private_virtual_node; /* 6 */
tree access_protected_virtual_node; /* 6 */
tree access_private_virtual_node; /* 7 */
/* Variables shared between class.c and call.c. */
......@@ -4683,7 +4684,8 @@ init_class_processing ()
access_private_node = build_int_2 (3, 0);
access_default_virtual_node = build_int_2 (4, 0);
access_public_virtual_node = build_int_2 (5, 0);
access_private_virtual_node = build_int_2 (6, 0);
access_protected_virtual_node = build_int_2 (6, 0);
access_private_virtual_node = build_int_2 (7, 0);
/* Keep these values lying around. */
base_layout_decl = build_lang_field_decl (FIELD_DECL, NULL_TREE, error_mark_node);
......
......@@ -1779,7 +1779,8 @@ extern tree access_protected_node; /* 2 */
extern tree access_private_node; /* 3 */
extern tree access_default_virtual_node; /* 4 */
extern tree access_public_virtual_node; /* 5 */
extern tree access_private_virtual_node; /* 6 */
extern tree access_protected_virtual_node; /* 6 */
extern tree access_private_virtual_node; /* 7 */
/* Things for handling inline functions. */
......
......@@ -11031,9 +11031,12 @@ xref_basetypes (code_type_node, name, ref, binfo)
|| (tag_code != class_type
&& (TREE_PURPOSE (binfo) == access_default_node
|| TREE_PURPOSE (binfo) == access_default_virtual_node)));
int via_protected = TREE_PURPOSE (binfo) == access_protected_node;
int via_protected
= (TREE_PURPOSE (binfo) == access_protected_node
|| TREE_PURPOSE (binfo) == access_protected_virtual_node);
int via_virtual
= (TREE_PURPOSE (binfo) == access_private_virtual_node
|| TREE_PURPOSE (binfo) == access_protected_virtual_node
|| TREE_PURPOSE (binfo) == access_public_virtual_node
|| TREE_PURPOSE (binfo) == access_default_virtual_node);
tree basetype = TREE_VALUE (binfo);
......
......@@ -2601,42 +2601,32 @@ base_class.1:
base_class_access_list:
VISSPEC see_typename
| SCSPEC see_typename
{ if ($<ttype>$ != ridpointers[(int)RID_VIRTUAL])
sorry ("non-virtual access");
{ if ($1 != ridpointers[(int)RID_VIRTUAL])
cp_error ("`%D' access", $1);
$$ = access_default_virtual_node; }
| base_class_access_list VISSPEC see_typename
{ int err = 0;
if ($2 == access_protected_node)
{
warning ("`protected' access not implemented");
$2 = access_public_node;
err++;
}
{
if ($1 != access_default_virtual_node)
error ("multiple access specifiers");
else if ($2 == access_public_node)
{
if ($1 == access_private_node)
{
mixed:
error ("base class cannot be public and private");
}
else if ($1 == access_default_virtual_node)
$$ = access_public_virtual_node;
}
$$ = access_public_virtual_node;
else if ($2 == access_protected_node)
$$ = access_protected_virtual_node;
else /* $2 == access_private_node */
{
if ($1 == access_public_node)
goto mixed;
else if ($1 == access_default_virtual_node)
$$ = access_private_virtual_node;
}
$$ = access_private_virtual_node;
}
| base_class_access_list SCSPEC see_typename
{ if ($2 != ridpointers[(int)RID_VIRTUAL])
sorry ("non-virtual access");
if ($$ == access_public_node)
cp_error ("`%D' access", $2);
else if ($$ == access_public_node)
$$ = access_public_virtual_node;
else if ($$ == access_protected_node)
$$ = access_protected_virtual_node;
else if ($$ == access_private_node)
$$ = access_private_virtual_node; }
$$ = access_private_virtual_node;
else
error ("multiple `virtual' specifiers");
}
;
left_curly:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment