Annotation of gcc/cp/lex.h, revision 1.1.1.1

1.1       root        1: /* Define constants and variables for communication with parse.y.
                      2:    Copyright (C) 1987, 1992, 1993 Free Software Foundation, Inc.
                      3:    Hacked by Michael Tiemann ([email protected])
                      4:    and by Brendan Kehoe ([email protected]).
                      5: 
                      6: This file is part of GNU CC.
                      7: 
                      8: GNU CC is distributed in the hope that it will be useful,
                      9: but WITHOUT ANY WARRANTY.  No author or distributor
                     10: accepts responsibility to anyone for the consequences of using it
                     11: or for whether it serves any particular purpose or works at all,
                     12: unless he says so in writing.  Refer to the GNU CC General Public
                     13: License for full details.
                     14: 
                     15: Everyone is granted permission to copy, modify and redistribute
                     16: GNU CC, but only under the conditions described in the
                     17: GNU CC General Public License.   A copy of this license is
                     18: supposed to have been given to you along with GNU CC so you
                     19: can know your rights and responsibilities.  It should be in a
                     20: file named COPYING.  Among other things, the copyright notice
                     21: and this notice must be preserved on all copies.  */
                     22: 
                     23: 
                     24: 
                     25: enum rid
                     26: {
                     27:   RID_UNUSED,
                     28:   RID_INT,
                     29:   RID_BOOL,
                     30:   RID_CHAR,
                     31:   RID_WCHAR,
                     32:   RID_FLOAT,
                     33:   RID_DOUBLE,
                     34:   RID_VOID,
                     35: 
                     36:   /* C++ extension */
                     37:   RID_CLASS,
                     38:   RID_RECORD,
                     39:   RID_UNION,
                     40:   RID_ENUM,
                     41:   RID_LONGLONG,
                     42: 
                     43:   /* This is where grokdeclarator starts its search when setting the specbits.
                     44:      The first seven are in the order of most frequently used, as found
                     45:      building libg++.  */
                     46: 
                     47:   RID_EXTERN,
                     48:   RID_CONST,
                     49:   RID_LONG,
                     50:   RID_TYPEDEF,
                     51:   RID_UNSIGNED,
                     52:   RID_SHORT,
                     53:   RID_INLINE,
                     54: 
                     55:   RID_STATIC,
                     56: 
                     57:   RID_REGISTER,
                     58:   RID_VOLATILE,
                     59:   RID_FRIEND,
                     60:   RID_VIRTUAL,
                     61:   RID_SIGNED,
                     62:   RID_AUTO,
                     63:   RID_MUTABLE,
                     64: 
                     65:   /* This is where grokdeclarator ends its search when setting the specbits. */
                     66: 
                     67:   RID_PUBLIC,
                     68:   RID_PRIVATE,
                     69:   RID_PROTECTED,
                     70:   RID_EXCEPTION,
                     71:   RID_TEMPLATE,
                     72:   RID_SIGNATURE,
                     73:   /* Before adding enough to get up to 64, the RIDBIT_* macros
                     74:      will have to be changed a little. */
                     75:   RID_MAX
                     76: };
                     77: 
                     78: #define NORID RID_UNUSED
                     79: 
                     80: #define RID_FIRST_MODIFIER RID_EXTERN
                     81: #define RID_LAST_MODIFIER RID_MUTABLE
                     82: 
                     83: /* The type that can represent all values of RIDBIT.  */
                     84: /* We assume that we can stick in at least 32 bits into this. */
                     85: typedef struct { unsigned long idata[2]; }
                     86:      RID_BIT_TYPE;
                     87: 
                     88: /* Be careful, all these modify N twice. */
                     89: #define RIDBIT_SETP(N, V) (((unsigned long)1 << (int) ((N)%32))                      \
                     90:                            & (V).idata[(N)/32])
                     91: #define RIDBIT_NOTSETP(NN, VV) (! RIDBIT_SETP (NN, VV))
                     92: #define RIDBIT_SET(N, V) do {                                                \
                     93:                                (V).idata[(N)/32]                             \
                     94:                                  |= ((unsigned long)1 << (int) ((N)%32));    \
                     95:                              } while (0)
                     96: #define RIDBIT_RESET(N, V) do {                                                      \
                     97:                                  (V).idata[(N)/32]                           \
                     98:                                    &= ~((unsigned long)1 << (int) ((N)%32)); \
                     99:                                } while (0)
                    100: #define RIDBIT_RESET_ALL(V) do {                                             \
                    101:                                   (V).idata[0] = 0;                          \
                    102:                                   (V).idata[1] = 0;                          \
                    103:                                 } while (0)
                    104: #define RIDBIT_ANY_SET(V) ((V).idata[0] || (V).idata[1])
                    105: 
                    106: /* The elements of `ridpointers' are identifier nodes
                    107:    for the reserved type names and storage classes.
                    108:    It is indexed by a RID_... value.  */
                    109: extern tree ridpointers[(int) RID_MAX];
                    110: 
                    111: /* the declaration found for the last IDENTIFIER token read in.
                    112:    yylex must look this up to detect typedefs, which get token type TYPENAME,
                    113:    so it is left around in case the identifier is not a typedef but is
                    114:    used in a context which makes it a reference to a variable.  */
                    115: extern tree lastiddecl;
                    116: 
                    117: extern char *token_buffer;     /* Pointer to token buffer.  */
                    118: 
                    119: /* Back-door communication channel to the lexer.  */
                    120: extern int looking_for_typename;
                    121: extern int looking_for_template;
                    122: 
                    123: /* Tell the lexer where to look for names.  */
                    124: extern tree got_scope;
                    125: 
                    126: /* Pending language change.
                    127:    Positive is push count, negative is pop count.  */
                    128: extern int pending_lang_change;
                    129: 
                    130: extern tree make_pointer_declarator (), make_reference_declarator ();
                    131: extern void reinit_parse_for_function ();
                    132: extern void reinit_parse_for_method ();
                    133: extern int yylex ();

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.