gxx.gperf (RETURN): Rename to RETURN_KEYWORD to avoid clashes with the RTL code RETURN.

* gxx.gperf (RETURN): Rename to RETURN_KEYWORD to avoid clashes
	with the RTL code RETURN.
	* hash.h: Regenerated.
	* lex.c (reinit_parse_for_block): Use RETURN_KEYWORD.
	* parse.y: Replace RETURN with RETURN_KEYWORD throughout.
	* parse.c: Regenerated.
	* pt.c: Include varray.h.  Include rtl.h since varray.h requires
	it.
	(inline_parm_levels): New variable.
	(inline_parm_levels_used): Likewise.
	(maybe_begin_member_template_processing): Update them.
	(maybe_end_member_template_processing): Use them, rather than
	guessing how many levels to pop.

From-SVN: r26587
This commit is contained in:
Mark Mitchell 1999-04-22 17:37:02 +00:00 committed by Mark Mitchell
parent ad810b22b8
commit 3dcaad8b2d
8 changed files with 104 additions and 54 deletions

View File

@ -1,5 +1,19 @@
1999-04-22 Mark Mitchell <mark@codesourcery.com>
* gxx.gperf (RETURN): Rename to RETURN_KEYWORD to avoid clashes
with the RTL code RETURN.
* hash.h: Regenerated.
* lex.c (reinit_parse_for_block): Use RETURN_KEYWORD.
* parse.y: Replace RETURN with RETURN_KEYWORD throughout.
* parse.c: Regenerated.
* pt.c: Include varray.h. Include rtl.h since varray.h requires
it.
(inline_parm_levels): New variable.
(inline_parm_levels_used): Likewise.
(maybe_begin_member_template_processing): Update them.
(maybe_end_member_template_processing): Use them, rather than
guessing how many levels to pop.
* decl.c (make_typename_type): Tighten error-checking.
1999-04-20 Mark Mitchell <mark@codesourcery.com>

View File

@ -81,7 +81,7 @@ protected, VISSPEC, RID_PROTECTED,
public, VISSPEC, RID_PUBLIC,
register, SCSPEC, RID_REGISTER,
reinterpret_cast, REINTERPRET_CAST, NORID,
return, RETURN, NORID,
return, RETURN_KEYWORD, NORID,
short, TYPESPEC, RID_SHORT,
signature, AGGR, RID_SIGNATURE /* Extension */,
signed, TYPESPEC, RID_SIGNED,

View File

@ -1,5 +1,5 @@
/* C code produced by gperf version 2.7.1 (19981006 egcs) */
/* Command-line: gperf -L C -F , 0, 0 -p -j1 -g -o -t -N is_reserved_word -k1,4,7,$ ./gxx.gperf */
/* Command-line: gperf -L C -F , 0, 0 -p -j1 -g -o -t -N is_reserved_word -k1,4,7,$ ../../../gcc/cp/gxx.gperf */
/* Command-line: gperf -L KR-C -F ', 0, 0' -p -j1 -g -o -t -N is_reserved_word -k1,4,$,7 gplus.gperf */
struct resword { const char *name; short token; enum rid rid;};
@ -191,7 +191,7 @@ is_reserved_word (str, len)
{"reinterpret_cast", REINTERPRET_CAST, NORID,},
{"mutable", SCSPEC, RID_MUTABLE,},
{"__alignof", ALIGNOF, NORID},
{"return", RETURN, NORID,},
{"return", RETURN_KEYWORD, NORID,},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"", 0, 0},
{"float", TYPESPEC, RID_FLOAT,},

View File

@ -1496,7 +1496,7 @@ reinit_parse_for_block (pyychar, obstackp)
look_for_lbrac = 1;
blev = 0;
}
else if (pyychar == RETURN)
else if (pyychar == RETURN_KEYWORD)
{
obstack_grow (obstackp, "return", 6);
look_for_lbrac = 1;

View File

@ -27,7 +27,7 @@
#define DEFAULT 277
#define BREAK 278
#define CONTINUE 279
#define RETURN 280
#define RETURN_KEYWORD 280
#define GOTO 281
#define ASM_KEYWORD 282
#define TYPEOF 283
@ -742,35 +742,36 @@ static const short yyrline[] = { 0,
static const char * const yytname[] = { "$","error","$undefined.","IDENTIFIER",
"TYPENAME","SELFNAME","PFUNCNAME","SCSPEC","TYPESPEC","CV_QUALIFIER","CONSTANT",
"STRING","ELLIPSIS","SIZEOF","ENUM","IF","ELSE","WHILE","DO","FOR","SWITCH",
"CASE","DEFAULT","BREAK","CONTINUE","RETURN","GOTO","ASM_KEYWORD","TYPEOF","ALIGNOF",
"SIGOF","ATTRIBUTE","EXTENSION","LABEL","REALPART","IMAGPART","AGGR","VISSPEC",
"DELETE","NEW","THIS","OPERATOR","CXX_TRUE","CXX_FALSE","NAMESPACE","TYPENAME_KEYWORD",
"USING","LEFT_RIGHT","TEMPLATE","TYPEID","DYNAMIC_CAST","STATIC_CAST","REINTERPRET_CAST",
"CONST_CAST","SCOPE","EMPTY","PTYPENAME","NSNAME","'{'","','","';'","THROW",
"':'","ASSIGN","'='","'?'","OROR","ANDAND","'|'","'^'","'&'","MIN_MAX","EQCOMPARE",
"ARITHCOMPARE","'<'","'>'","LSHIFT","RSHIFT","'+'","'-'","'*'","'/'","'%'","POINTSAT_STAR",
"DOT_STAR","UNARY","PLUSPLUS","MINUSMINUS","'~'","HYPERUNARY","PAREN_STAR_PAREN",
"POINTSAT","'.'","'('","'['","TRY","CATCH","PRE_PARSED_FUNCTION_DECL","EXTERN_LANG_STRING",
"ALL","PRE_PARSED_CLASS_DECL","DEFARG","DEFARG_MARKER","TYPENAME_DEFN","IDENTIFIER_DEFN",
"PTYPENAME_DEFN","END_OF_LINE","END_OF_SAVED_INPUT","')'","'}'","'!'","']'",
"program","extdefs","@1","extdefs_opt",".hush_warning",".warning_ok","extension",
"asm_keyword","lang_extdef","@2","extdef","@3","@4","namespace_alias","@5","using_decl",
"namespace_using_decl","using_directive","@6","namespace_qualifier","any_id",
"extern_lang_string","template_header","@7","template_parm_list","maybe_identifier",
"template_type_parm","template_template_parm","template_parm","template_def",
"template_extdef","template_datadef","datadef","ctor_initializer_opt","maybe_return_init",
"eat_saved_input","fndef","constructor_declarator","@8","@9","@10","@11","fn.def1",
"component_constructor_declarator","fn.def2","return_id","return_init","base_init",
".set_base_init","member_init_list","member_init","identifier","notype_identifier",
"identifier_defn","explicit_instantiation","@12","@13","@14","@15","@16","@17",
"@18","@19","begin_explicit_instantiation","end_explicit_instantiation","template_type",
"apparent_template_type","self_template_type",".finish_template_type","template_close_bracket",
"template_arg_list_opt","template_arg_list","template_arg","unop","expr","paren_expr_or_null",
"paren_cond_or_null","xcond","condition","@20","compstmtend","already_scoped_stmt",
"@21","nontrivial_exprlist","nonnull_exprlist","unary_expr",".finish_new_placement",
".begin_new_placement","new_placement","new_initializer","regcast_or_absdcl",
"cast_expr","expr_no_commas","notype_unqualified_id","do_id","template_id","object_template_id",
"unqualified_id","expr_or_declarator_intern","expr_or_declarator","notype_template_declarator",
"CASE","DEFAULT","BREAK","CONTINUE","RETURN_KEYWORD","GOTO","ASM_KEYWORD","TYPEOF",
"ALIGNOF","SIGOF","ATTRIBUTE","EXTENSION","LABEL","REALPART","IMAGPART","AGGR",
"VISSPEC","DELETE","NEW","THIS","OPERATOR","CXX_TRUE","CXX_FALSE","NAMESPACE",
"TYPENAME_KEYWORD","USING","LEFT_RIGHT","TEMPLATE","TYPEID","DYNAMIC_CAST","STATIC_CAST",
"REINTERPRET_CAST","CONST_CAST","SCOPE","EMPTY","PTYPENAME","NSNAME","'{'","','",
"';'","THROW","':'","ASSIGN","'='","'?'","OROR","ANDAND","'|'","'^'","'&'","MIN_MAX",
"EQCOMPARE","ARITHCOMPARE","'<'","'>'","LSHIFT","RSHIFT","'+'","'-'","'*'","'/'",
"'%'","POINTSAT_STAR","DOT_STAR","UNARY","PLUSPLUS","MINUSMINUS","'~'","HYPERUNARY",
"PAREN_STAR_PAREN","POINTSAT","'.'","'('","'['","TRY","CATCH","PRE_PARSED_FUNCTION_DECL",
"EXTERN_LANG_STRING","ALL","PRE_PARSED_CLASS_DECL","DEFARG","DEFARG_MARKER",
"TYPENAME_DEFN","IDENTIFIER_DEFN","PTYPENAME_DEFN","END_OF_LINE","END_OF_SAVED_INPUT",
"')'","'}'","'!'","']'","program","extdefs","@1","extdefs_opt",".hush_warning",
".warning_ok","extension","asm_keyword","lang_extdef","@2","extdef","@3","@4",
"namespace_alias","@5","using_decl","namespace_using_decl","using_directive",
"@6","namespace_qualifier","any_id","extern_lang_string","template_header","@7",
"template_parm_list","maybe_identifier","template_type_parm","template_template_parm",
"template_parm","template_def","template_extdef","template_datadef","datadef",
"ctor_initializer_opt","maybe_return_init","eat_saved_input","fndef","constructor_declarator",
"@8","@9","@10","@11","fn.def1","component_constructor_declarator","fn.def2",
"return_id","return_init","base_init",".set_base_init","member_init_list","member_init",
"identifier","notype_identifier","identifier_defn","explicit_instantiation",
"@12","@13","@14","@15","@16","@17","@18","@19","begin_explicit_instantiation",
"end_explicit_instantiation","template_type","apparent_template_type","self_template_type",
".finish_template_type","template_close_bracket","template_arg_list_opt","template_arg_list",
"template_arg","unop","expr","paren_expr_or_null","paren_cond_or_null","xcond",
"condition","@20","compstmtend","already_scoped_stmt","@21","nontrivial_exprlist",
"nonnull_exprlist","unary_expr",".finish_new_placement",".begin_new_placement",
"new_placement","new_initializer","regcast_or_absdcl","cast_expr","expr_no_commas",
"notype_unqualified_id","do_id","template_id","object_template_id","unqualified_id",
"expr_or_declarator_intern","expr_or_declarator","notype_template_declarator",
"direct_notype_declarator","primary","@22","new","delete","boolean.literal",
"string","nodecls","object","decl","declarator","fcast_or_absdcl","type_id",
"typed_declspecs","typed_declspecs1","reserved_declspecs","declmods","typed_typespecs",

View File

@ -131,7 +131,7 @@ empty_parms ()
/* the reserved words */
/* SCO include files test "ASM", so use something else. */
%token SIZEOF ENUM /* STRUCT UNION */ IF ELSE WHILE DO FOR SWITCH CASE DEFAULT
%token BREAK CONTINUE RETURN GOTO ASM_KEYWORD TYPEOF ALIGNOF
%token BREAK CONTINUE RETURN_KEYWORD GOTO ASM_KEYWORD TYPEOF ALIGNOF
%token SIGOF
%token ATTRIBUTE EXTENSION LABEL
%token REALPART IMAGPART
@ -756,7 +756,7 @@ fn.def2:
;
return_id:
RETURN IDENTIFIER
RETURN_KEYWORD IDENTIFIER
{
if (! current_function_parms_stored)
store_parm_decls ();
@ -2475,7 +2475,7 @@ component_decl:
{ $$ = finish_method ($$); }
| fn.def2 TRY /* base_init compstmt */
{ $$ = finish_method ($$); }
| fn.def2 RETURN /* base_init compstmt */
| fn.def2 RETURN_KEYWORD /* base_init compstmt */
{ $$ = finish_method ($$); }
| fn.def2 '{' /* nodecls compstmt */
{ $$ = finish_method ($$); }
@ -3335,9 +3335,9 @@ simple_stmt:
{ finish_break_stmt (); }
| CONTINUE ';'
{ finish_continue_stmt (); }
| RETURN ';'
| RETURN_KEYWORD ';'
{ finish_return_stmt (NULL_TREE); }
| RETURN expr ';'
| RETURN_KEYWORD expr ';'
{ finish_return_stmt ($2); }
| asm_keyword maybe_cv_qualifier '(' string ')' ';'
{

View File

@ -39,6 +39,8 @@ Boston, MA 02111-1307, USA. */
#include "defaults.h"
#include "except.h"
#include "toplev.h"
#include "rtl.h"
#include "varray.h"
/* The type of functions taking a tree, and some additional data, and
returning an int. */
@ -67,6 +69,8 @@ int processing_template_parmlist;
static int template_header_count;
static tree saved_trees;
static varray_type inline_parm_levels;
static size_t inline_parm_levels_used;
#define obstack_chunk_alloc xmalloc
#define obstack_chunk_free free
@ -399,22 +403,30 @@ maybe_begin_member_template_processing (decl)
tree decl;
{
tree parms;
int levels;
int levels = 0;
if (! inline_needs_template_parms (decl))
return;
parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
if (DECL_TEMPLATE_SPECIALIZATION (decl))
if (inline_needs_template_parms (decl))
{
--levels;
parms = TREE_CHAIN (parms);
parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
if (DECL_TEMPLATE_SPECIALIZATION (decl))
{
--levels;
parms = TREE_CHAIN (parms);
}
push_inline_template_parms_recursive (parms, levels);
}
push_inline_template_parms_recursive (parms, levels);
/* Remember how many levels of template parameters we pushed so that
we can pop them later. */
if (!inline_parm_levels)
VARRAY_INT_INIT (inline_parm_levels, 4, "inline_parm_levels");
if (inline_parm_levels_used == inline_parm_levels->num_elements)
VARRAY_GROW (inline_parm_levels, 2 * inline_parm_levels_used);
VARRAY_INT (inline_parm_levels, inline_parm_levels_used) = levels;
++inline_parm_levels_used;
}
/* Undo the effects of begin_member_template_processing. */
@ -422,11 +434,15 @@ maybe_begin_member_template_processing (decl)
void
maybe_end_member_template_processing ()
{
if (! processing_template_decl)
int i;
if (!inline_parm_levels_used)
return;
while (current_template_parms
&& TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
--inline_parm_levels_used;
for (i = 0;
i < VARRAY_INT (inline_parm_levels, inline_parm_levels_used);
++i)
{
--processing_template_decl;
current_template_parms = TREE_CHAIN (current_template_parms);

View File

@ -0,0 +1,19 @@
// Build don't link:
// Origin: Ian Nixon <ian@tharas.com>
class Action {
public:
virtual void action () = 0;
};
class Var {
public:
template<class Base> void Add() {
struct tmp : public Action {
void action () {}
};
tmp *tp = new tmp;
}
};