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> 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. * 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> ...@@ -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 * typeck.c (build_modify_expr): Remove code that ignores trivial
methods. 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> Mon Dec 22 11:36:27 1997 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* call.c (add_builtin_candidate): Add default case in enumeration * 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` ...@@ -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` GXX_CROSS_NAME = `t='$(program_transform_cross_name)'; echo g++ | sed $$t`
# The name to use for the demangler program. # The name to use for the demangler program.
DEMANGLER_PROG = c++filt DEMANGLER_PROG = c++filt$(exeext)
# Extra headers to install. # Extra headers to install.
CXX_EXTRA_HEADERS = $(srcdir)/cp/inc/typeinfo $(srcdir)/cp/inc/exception \ CXX_EXTRA_HEADERS = $(srcdir)/cp/inc/typeinfo $(srcdir)/cp/inc/exception \
...@@ -225,6 +225,8 @@ c++.install-common: ...@@ -225,6 +225,8 @@ c++.install-common:
rm -f $(bindir)/$(CXX_INSTALL_NAME)$(exeext); \ rm -f $(bindir)/$(CXX_INSTALL_NAME)$(exeext); \
$(LN) $(bindir)/$(GXX_INSTALL_NAME)$(exeext) $(bindir)/$(CXX_INSTALL_NAME)$(exeext); \ $(LN) $(bindir)/$(GXX_INSTALL_NAME)$(exeext) $(bindir)/$(CXX_INSTALL_NAME)$(exeext); \
fi ; \ fi ; \
rm -f $(bindir)/$(DEMANGLER_PROG) ; \
$(INSTALL_PROGRAM) $(DEMANGLER_PROG) $(bindir)/$(DEMANGLER_PROG) ; \
fi fi
c++.install-info: c++.install-info:
......
...@@ -146,7 +146,8 @@ tree access_protected_node; /* 2 */ ...@@ -146,7 +146,8 @@ tree access_protected_node; /* 2 */
tree access_private_node; /* 3 */ tree access_private_node; /* 3 */
tree access_default_virtual_node; /* 4 */ tree access_default_virtual_node; /* 4 */
tree access_public_virtual_node; /* 5 */ 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. */ /* Variables shared between class.c and call.c. */
...@@ -4683,7 +4684,8 @@ init_class_processing () ...@@ -4683,7 +4684,8 @@ init_class_processing ()
access_private_node = build_int_2 (3, 0); access_private_node = build_int_2 (3, 0);
access_default_virtual_node = build_int_2 (4, 0); access_default_virtual_node = build_int_2 (4, 0);
access_public_virtual_node = build_int_2 (5, 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. */ /* Keep these values lying around. */
base_layout_decl = build_lang_field_decl (FIELD_DECL, NULL_TREE, error_mark_node); base_layout_decl = build_lang_field_decl (FIELD_DECL, NULL_TREE, error_mark_node);
......
...@@ -1779,7 +1779,8 @@ extern tree access_protected_node; /* 2 */ ...@@ -1779,7 +1779,8 @@ extern tree access_protected_node; /* 2 */
extern tree access_private_node; /* 3 */ extern tree access_private_node; /* 3 */
extern tree access_default_virtual_node; /* 4 */ extern tree access_default_virtual_node; /* 4 */
extern tree access_public_virtual_node; /* 5 */ 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. */ /* Things for handling inline functions. */
......
...@@ -11031,9 +11031,12 @@ xref_basetypes (code_type_node, name, ref, binfo) ...@@ -11031,9 +11031,12 @@ xref_basetypes (code_type_node, name, ref, binfo)
|| (tag_code != class_type || (tag_code != class_type
&& (TREE_PURPOSE (binfo) == access_default_node && (TREE_PURPOSE (binfo) == access_default_node
|| TREE_PURPOSE (binfo) == access_default_virtual_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 int via_virtual
= (TREE_PURPOSE (binfo) == access_private_virtual_node = (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_public_virtual_node
|| TREE_PURPOSE (binfo) == access_default_virtual_node); || TREE_PURPOSE (binfo) == access_default_virtual_node);
tree basetype = TREE_VALUE (binfo); tree basetype = TREE_VALUE (binfo);
......
...@@ -2601,42 +2601,32 @@ base_class.1: ...@@ -2601,42 +2601,32 @@ base_class.1:
base_class_access_list: base_class_access_list:
VISSPEC see_typename VISSPEC see_typename
| SCSPEC see_typename | SCSPEC see_typename
{ if ($<ttype>$ != ridpointers[(int)RID_VIRTUAL]) { if ($1 != ridpointers[(int)RID_VIRTUAL])
sorry ("non-virtual access"); cp_error ("`%D' access", $1);
$$ = access_default_virtual_node; } $$ = access_default_virtual_node; }
| base_class_access_list VISSPEC see_typename | base_class_access_list VISSPEC see_typename
{ int err = 0; {
if ($2 == access_protected_node) if ($1 != access_default_virtual_node)
{ error ("multiple access specifiers");
warning ("`protected' access not implemented");
$2 = access_public_node;
err++;
}
else if ($2 == access_public_node) else if ($2 == access_public_node)
{ $$ = access_public_virtual_node;
if ($1 == access_private_node) else if ($2 == access_protected_node)
{ $$ = access_protected_virtual_node;
mixed:
error ("base class cannot be public and private");
}
else if ($1 == access_default_virtual_node)
$$ = access_public_virtual_node;
}
else /* $2 == access_private_node */ else /* $2 == access_private_node */
{ $$ = access_private_virtual_node;
if ($1 == access_public_node)
goto mixed;
else if ($1 == access_default_virtual_node)
$$ = access_private_virtual_node;
}
} }
| base_class_access_list SCSPEC see_typename | base_class_access_list SCSPEC see_typename
{ if ($2 != ridpointers[(int)RID_VIRTUAL]) { if ($2 != ridpointers[(int)RID_VIRTUAL])
sorry ("non-virtual access"); cp_error ("`%D' access", $2);
if ($$ == access_public_node) else if ($$ == access_public_node)
$$ = access_public_virtual_node; $$ = access_public_virtual_node;
else if ($$ == access_protected_node)
$$ = access_protected_virtual_node;
else if ($$ == access_private_node) else if ($$ == access_private_node)
$$ = access_private_virtual_node; } $$ = access_private_virtual_node;
else
error ("multiple `virtual' specifiers");
}
; ;
left_curly: 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