Commit 4a4b0aa3 by Richard Henderson Committed by Richard Henderson

decl.c (ptr_type_node, [...]): New.

        * decl.c (ptr_type_node, va_list_type_node): New.
        * gxx.gperf (__builtin_va_arg): New.
        * parse.y (VA_ARG): New token.
        (unary_expr): Recognize it.

From-SVN: r28242
parent 88c7af34
1999-07-24 Richard Henderson <rth@cygnus.com>
* decl.c (ptr_type_node, va_list_type_node): New.
* gxx.gperf (__builtin_va_arg): New.
* parse.y (VA_ARG): New token.
(unary_expr): Recognize it.
Sun Jul 25 15:24:21 1999 Jeffrey A Law (law@cygnus.com)
* g++FAQ.texi: Deleted per Joe Buck's request.
......
......@@ -275,6 +275,12 @@ tree char_type_node;
tree integer_type_node;
tree unsigned_type_node;
/* These can't be part of the above array, since they are declared
individially in tree.h and used by the target routines. */
tree ptr_type_node;
tree va_list_type_node;
/* Indicates that there is a type value in some namespace, although
that is not necessarily in scope at the moment. */
......
......@@ -9,6 +9,7 @@ __asm, ASM_KEYWORD, RID_UNUSED
__asm__, ASM_KEYWORD, RID_UNUSED
__attribute, ATTRIBUTE, RID_UNUSED
__attribute__, ATTRIBUTE, RID_UNUSED
__builtin_va_arg, VA_ARG, RID_UNUSED
__complex, TYPESPEC, RID_COMPLEX
__complex__, TYPESPEC, RID_COMPLEX
__const, CV_QUALIFIER, RID_CONST
......
/* 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,$ ../../../gcc/cp/gxx.gperf */
/* C code produced by gperf version 2.7 */
/* Command-line: gperf -L C -F , 0, 0 -p -j1 -g -o -t -N is_reserved_word -k1,4,7,$ ../../../../egcs/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;};
#define TOTAL_KEYWORDS 106
#define TOTAL_KEYWORDS 107
#define MIN_WORD_LENGTH 2
#define MAX_WORD_LENGTH 16
#define MIN_HASH_VALUE 4
#define MAX_HASH_VALUE 250
/* maximum key range = 247, duplicates = 0 */
#define MAX_HASH_VALUE 244
/* maximum key range = 241, duplicates = 0 */
#ifdef __GNUC__
__inline
......@@ -20,32 +20,32 @@ hash (str, len)
{
static unsigned char asso_values[] =
{
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 0, 251, 64, 93, 3,
0, 0, 74, 35, 0, 26, 251, 2, 31, 65,
23, 76, 7, 19, 45, 37, 6, 64, 12, 38,
14, 4, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
251, 251, 251, 251, 251, 251
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 0, 245, 92, 3, 3,
0, 0, 75, 24, 0, 90, 245, 10, 31, 49,
23, 74, 0, 24, 30, 37, 6, 77, 10, 19,
5, 4, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
245, 245, 245, 245, 245, 245
};
register int hval = len;
......@@ -83,142 +83,152 @@ is_reserved_word (str, len)
{"delete", DELETE, RID_UNUSED,},
{"case", CASE, RID_UNUSED,},
{"__real__", REALPART, RID_UNUSED},
{"", 0, 0},
{"double", TYPESPEC, RID_DOUBLE,},
{"true", CXX_TRUE, RID_UNUSED,},
{"catch", CATCH, RID_UNUSED,},
{"typeid", TYPEID, RID_UNUSED,},
{"try", TRY, RID_UNUSED,},
{"", 0, 0}, {"", 0, 0},
{"void", TYPESPEC, RID_VOID,},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"", 0, 0}, {"", 0, 0},
{"private", VISSPEC, RID_PRIVATE,},
{"", 0, 0}, {"", 0, 0},
{"template", TEMPLATE, RID_TEMPLATE,},
{"protected", VISSPEC, RID_PROTECTED,},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"extern", SCSPEC, RID_EXTERN,},
{"", 0, 0}, {"", 0, 0},
{"not", '!', RID_UNUSED,},
{"", 0, 0}, {"", 0, 0},
{"xor_eq", ASSIGN, RID_UNUSED,},
{"", 0, 0},
{"__signed", TYPESPEC, RID_SIGNED},
{"int", TYPESPEC, RID_INT,},
{"__signed__", TYPESPEC, RID_SIGNED},
{"__real", REALPART, RID_UNUSED},
{"", 0, 0},
{"xor_eq", ASSIGN, RID_UNUSED,},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"__attribute", ATTRIBUTE, RID_UNUSED},
{"__asm__", ASM_KEYWORD, RID_UNUSED},
{"__attribute__", ATTRIBUTE, RID_UNUSED},
{"xor", '^', RID_UNUSED,},
{"compl", '~', RID_UNUSED,},
{"public", VISSPEC, RID_PUBLIC,},
{"not_eq", EQCOMPARE, RID_UNUSED,},
{"switch", SWITCH, RID_UNUSED,},
{"__extension__", EXTENSION, RID_UNUSED},
{"__restrict__", CV_QUALIFIER, RID_RESTRICT},
{"", 0, 0},
{"__asm__", ASM_KEYWORD, RID_UNUSED},
{"new", NEW, RID_UNUSED,},
{"__restrict", CV_QUALIFIER, RID_RESTRICT},
{"", 0, 0},
{"__wchar_t", TYPESPEC, RID_WCHAR /* Unique to ANSI C++ */,},
{"switch", SWITCH, RID_UNUSED,},
{"", 0, 0},
{"const", CV_QUALIFIER, RID_CONST,},
{"static", SCSPEC, RID_STATIC,},
{"", 0, 0},
{"not_eq", EQCOMPARE, RID_UNUSED,},
{"__inline", SCSPEC, RID_INLINE},
{"", 0, 0},
{"while", WHILE, RID_UNUSED,},
{"__inline__", SCSPEC, RID_INLINE},
{"__restrict__", CV_QUALIFIER, RID_RESTRICT},
{"inline", SCSPEC, RID_INLINE,},
{"__imag__", IMAGPART, RID_UNUSED},
{"", 0, 0},
{"const_cast", CONST_CAST, RID_UNUSED,},
{"static_cast", STATIC_CAST, RID_UNUSED,},
{"__restrict", CV_QUALIFIER, RID_RESTRICT},
{"xor", '^', RID_UNUSED,},
{"__wchar_t", TYPESPEC, RID_WCHAR /* Unique to ANSI C++ */,},
{"new", NEW, RID_UNUSED,},
{"", 0, 0}, {"", 0, 0},
{"typename", TYPENAME_KEYWORD, RID_UNUSED,},
{"", 0, 0},
{"__alignof__", ALIGNOF, RID_UNUSED},
{"signed", TYPESPEC, RID_SIGNED,},
{"and", ANDAND, RID_UNUSED,},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"explicit", SCSPEC, RID_EXPLICIT,},
{"char", TYPESPEC, RID_CHAR,},
{"", 0, 0},
{"__imag__", IMAGPART, RID_UNUSED},
{"while", WHILE, RID_UNUSED,},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"bool", TYPESPEC, RID_BOOL,},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"do", DO, RID_UNUSED,},
{"typename", TYPENAME_KEYWORD, RID_UNUSED,},
{"", 0, 0},
{"short", TYPESPEC, RID_SHORT,},
{"__imag", IMAGPART, RID_UNUSED},
{"", 0, 0},
{"friend", SCSPEC, RID_FRIEND,},
{"continue", CONTINUE, RID_UNUSED,},
{"class", AGGR, RID_CLASS,},
{"default", DEFAULT, RID_UNUSED,},
{"long", TYPESPEC, RID_LONG,},
{"this", THIS, RID_UNUSED,},
{"dynamic_cast", DYNAMIC_CAST, RID_UNUSED,},
{"typeof", TYPEOF, RID_UNUSED,},
{"virtual", SCSPEC, RID_VIRTUAL,},
{"export", SCSPEC, RID_EXPORT,},
{"and_eq", ASSIGN, RID_UNUSED,},
{"typeof", TYPEOF, RID_UNUSED,},
{"__typeof__", TYPEOF, RID_UNUSED},
{"__const__", CV_QUALIFIER, RID_CONST},
{"__volatile", CV_QUALIFIER, RID_VOLATILE},
{"short", TYPESPEC, RID_SHORT,},
{"__asm", ASM_KEYWORD, RID_UNUSED},
{"__volatile__", CV_QUALIFIER, RID_VOLATILE},
{"__const", CV_QUALIFIER, RID_CONST},
{"namespace", NAMESPACE, RID_UNUSED,},
{"char", TYPESPEC, RID_CHAR,},
{"unsigned", TYPESPEC, RID_UNSIGNED,},
{"double", TYPESPEC, RID_DOUBLE,},
{"continue", CONTINUE, RID_UNUSED,},
{"and", ANDAND, RID_UNUSED,},
{"", 0, 0}, {"", 0, 0},
{"__signed", TYPESPEC, RID_SIGNED},
{"int", TYPESPEC, RID_INT,},
{"__signed__", TYPESPEC, RID_SIGNED},
{"bitand", '&', RID_UNUSED,},
{"enum", ENUM, RID_UNUSED,},
{"or_eq", ASSIGN, RID_UNUSED,},
{"throw", THROW, RID_UNUSED,},
{"reinterpret_cast", REINTERPRET_CAST, RID_UNUSED,},
{"or", OROR, RID_UNUSED,},
{"__attribute", ATTRIBUTE, RID_UNUSED},
{"for", FOR, RID_UNUSED,},
{"__attribute__", ATTRIBUTE, RID_UNUSED},
{"break", BREAK, RID_UNUSED,},
{"default", DEFAULT, RID_UNUSED,},
{"bitor", '|', RID_UNUSED,},
{"dynamic_cast", DYNAMIC_CAST, RID_UNUSED,},
{"__null", CONSTANT, RID_NULL},
{"if", IF, RID_UNUSED,},
{"__signature__", AGGR, RID_SIGNATURE /* Extension */,},
{"__label__", LABEL, RID_UNUSED},
{"long", TYPESPEC, RID_LONG,},
{"__imag", IMAGPART, RID_UNUSED},
{"__asm", ASM_KEYWORD, RID_UNUSED},
{"", 0, 0},
{"__sigof__", SIGOF, RID_UNUSED /* Extension */,},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"struct", AGGR, RID_RECORD,},
{"", 0, 0},
{"volatile", CV_QUALIFIER, RID_VOLATILE,},
{"__complex__", TYPESPEC, RID_COMPLEX},
{"false", CXX_FALSE, RID_UNUSED,},
{"sizeof", SIZEOF, RID_UNUSED,},
{"__complex__", TYPESPEC, RID_COMPLEX},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"for", FOR, RID_UNUSED,},
{"or", OROR, RID_UNUSED,},
{"register", SCSPEC, RID_REGISTER,},
{"throw", THROW, RID_UNUSED,},
{"__complex", TYPESPEC, RID_COMPLEX},
{"", 0, 0}, {"", 0, 0},
{"and_eq", ASSIGN, RID_UNUSED,},
{"__builtin_va_arg", VA_ARG, RID_UNUSED},
{"namespace", NAMESPACE, RID_UNUSED,},
{"", 0, 0},
{"struct", AGGR, RID_RECORD,},
{"", 0, 0}, {"", 0, 0},
{"using", USING, RID_UNUSED,},
{"", 0, 0}, {"", 0, 0},
{"__complex", TYPESPEC, RID_COMPLEX},
{"__label__", LABEL, RID_UNUSED},
{"", 0, 0}, {"", 0, 0},
{"explicit", SCSPEC, RID_EXPLICIT,},
{"return", RETURN_KEYWORD, RID_UNUSED,},
{"", 0, 0},
{"__alignof", ALIGNOF, RID_UNUSED},
{"", 0, 0}, {"", 0, 0},
{"volatile", CV_QUALIFIER, RID_VOLATILE,},
{"", 0, 0}, {"", 0, 0},
{"asm", ASM_KEYWORD, RID_UNUSED,},
{"", 0, 0},
{"signature", AGGR, RID_SIGNATURE /* Extension */,},
{"enum", ENUM, RID_UNUSED,},
{"reinterpret_cast", REINTERPRET_CAST, RID_UNUSED,},
{"mutable", SCSPEC, RID_MUTABLE,},
{"__alignof", ALIGNOF, RID_UNUSED},
{"return", RETURN_KEYWORD, RID_UNUSED,},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"", 0, 0},
{"float", TYPESPEC, RID_FLOAT,},
{"mutable", SCSPEC, RID_MUTABLE,},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"bool", TYPESPEC, RID_BOOL,},
{"register", SCSPEC, RID_REGISTER,},
{"", 0, 0}, {"", 0, 0},
{"__typeof", TYPEOF, RID_UNUSED},
{"", 0, 0},
{"typedef", SCSPEC, RID_TYPEDEF,},
{"__typeof", TYPEOF, RID_UNUSED},
{"bitand", '&', RID_UNUSED,},
{"break", BREAK, RID_UNUSED,},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"if", IF, RID_UNUSED,},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"__sigof__", SIGOF, RID_UNUSED /* Extension */,},
{"unsigned", TYPESPEC, RID_UNSIGNED,},
{"goto", GOTO, RID_UNUSED,},
{"", 0, 0},
{"float", TYPESPEC, RID_FLOAT,},
{"union", AGGR, RID_UNION,},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"inline", SCSPEC, RID_INLINE,},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"goto", GOTO, RID_UNUSED,},
{"sigof", SIGOF, RID_UNUSED /* Extension */,},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"__signature__", AGGR, RID_SIGNATURE /* Extension */,},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"bitor", '|', RID_UNUSED,},
{"auto", SCSPEC, RID_AUTO,},
{"", 0, 0}, {"", 0, 0},
{"operator", OPERATOR, RID_UNUSED,},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
{"", 0, 0}, {"", 0, 0},
{"operator", OPERATOR, RID_UNUSED,}
{"auto", SCSPEC, RID_AUTO,}
};
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
......
This source diff could not be displayed because it is too large. You can view the blob instead.
typedef union {long itype; tree ttype; char *strtype; enum tree_code code; flagged_type_tree ftype; } YYSTYPE;
#define IDENTIFIER 258
#define TYPENAME 259
#define SELFNAME 260
#define PFUNCNAME 261
#define SCSPEC 262
#define TYPESPEC 263
#define CV_QUALIFIER 264
#define CONSTANT 265
#define STRING 266
#define ELLIPSIS 267
#define SIZEOF 268
#define ENUM 269
#define IF 270
#define ELSE 271
#define WHILE 272
#define DO 273
#define FOR 274
#define SWITCH 275
#define CASE 276
#define DEFAULT 277
#define BREAK 278
#define CONTINUE 279
#define RETURN_KEYWORD 280
#define GOTO 281
#define ASM_KEYWORD 282
#define TYPEOF 283
#define ALIGNOF 284
#define SIGOF 285
#define ATTRIBUTE 286
#define EXTENSION 287
#define LABEL 288
#define REALPART 289
#define IMAGPART 290
#define IDENTIFIER 257
#define TYPENAME 258
#define SELFNAME 259
#define PFUNCNAME 260
#define SCSPEC 261
#define TYPESPEC 262
#define CV_QUALIFIER 263
#define CONSTANT 264
#define STRING 265
#define ELLIPSIS 266
#define SIZEOF 267
#define ENUM 268
#define IF 269
#define ELSE 270
#define WHILE 271
#define DO 272
#define FOR 273
#define SWITCH 274
#define CASE 275
#define DEFAULT 276
#define BREAK 277
#define CONTINUE 278
#define RETURN_KEYWORD 279
#define GOTO 280
#define ASM_KEYWORD 281
#define TYPEOF 282
#define ALIGNOF 283
#define SIGOF 284
#define ATTRIBUTE 285
#define EXTENSION 286
#define LABEL 287
#define REALPART 288
#define IMAGPART 289
#define VA_ARG 290
#define AGGR 291
#define VISSPEC 292
#define DELETE 293
......
......@@ -133,7 +133,7 @@ empty_parms ()
%token BREAK CONTINUE RETURN_KEYWORD GOTO ASM_KEYWORD TYPEOF ALIGNOF
%token SIGOF
%token ATTRIBUTE EXTENSION LABEL
%token REALPART IMAGPART
%token REALPART IMAGPART VA_ARG
/* the reserved words... C++ extensions */
%token <ttype> AGGR
......@@ -1162,6 +1162,9 @@ unary_expr:
{ $$ = build_x_unary_op (REALPART_EXPR, $2); }
| IMAGPART cast_expr %prec UNARY
{ $$ = build_x_unary_op (IMAGPART_EXPR, $2); }
| VA_ARG '(' expr_no_commas ',' type_id ')'
{ $$ = build_va_arg ($3, groktypename ($5.t));
check_for_new_type ("__builtin_va_arg", $5); }
;
/* Note this rule is not suitable for use in new_placement
......
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