Annotation of GNUtools/cc/cp-lex.h, revision 1.1

1.1     ! root        1: /* Define constants and variables for communication with cp-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_CHAR,
        !            30:   RID_WCHAR,
        !            31:   RID_FLOAT,
        !            32:   RID_DOUBLE,
        !            33:   RID_VOID,
        !            34: 
        !            35:   /* C++ extension */
        !            36:   RID_CLASS,
        !            37:   RID_RECORD,
        !            38:   RID_UNION,
        !            39:   RID_ENUM,
        !            40:   RID_LONGLONG,
        !            41: 
        !            42:   /* This is where grokdeclarator starts its search when setting the specbits.
        !            43:      The first seven are in the order of most frequently used, as found
        !            44:      building libg++.  */
        !            45: 
        !            46:   RID_EXTERN,
        !            47:   RID_CONST,
        !            48:   RID_LONG,
        !            49:   RID_TYPEDEF,
        !            50:   RID_UNSIGNED,
        !            51:   RID_SHORT,
        !            52:   RID_INLINE,
        !            53: 
        !            54:   RID_STATIC,
        !            55: 
        !            56:   RID_REGISTER,
        !            57:   RID_VOLATILE,
        !            58:   RID_FRIEND,
        !            59:   RID_VIRTUAL,
        !            60:   RID_PUBLIC,
        !            61:   RID_PRIVATE,
        !            62:   RID_PROTECTED,
        !            63:   RID_SIGNED,
        !            64:   RID_EXCEPTION,
        !            65:   RID_RAISES,
        !            66:   RID_AUTO,
        !            67:   RID_MUTABLE,
        !            68: 
        !            69: #ifdef OBJCPLUS
        !            70:   RID_IN,       /* begin Objective-C type modifiers */
        !            71:   RID_OUT,
        !            72:   RID_INOUT,
        !            73:   RID_BYCOPY,
        !            74:   RID_ONEWAY,
        !            75:   RID_ID,       /* end Objective-C type modifiers */
        !            76: #endif
        !            77: 
        !            78:   /* Before adding enough to get up to 64, the RIDBIT_* macros
        !            79:      will have to be changed a little. */
        !            80: 
        !            81:   RID_MAX
        !            82: };
        !            83: 
        !            84: #define NORID RID_UNUSED
        !            85: 
        !            86: #define RID_FIRST_MODIFIER RID_EXTERN
        !            87: 
        !            88: /* The type that can represent all values of RIDBIT.  */
        !            89: /* We assume that we can stick in at least 32 bits into this. */
        !            90: typedef struct { unsigned long idata[2]; }
        !            91:      RID_BIT_TYPE;
        !            92: 
        !            93: /* Be careful, all these modify N twice. */
        !            94: #define RIDBIT_SETP(N, V) (((unsigned long)1 << (int) ((N)%32))                      \
        !            95:                            & (V).idata[(N)/32])
        !            96: #define RIDBIT_NOTSETP(NN, VV) (! RIDBIT_SETP (NN, VV))
        !            97: #define RIDBIT_SET(N, V) do {                                                \
        !            98:                                (V).idata[(N)/32]                             \
        !            99:                                  |= ((unsigned long)1 << (int) ((N)%32));    \
        !           100:                              } while (0)
        !           101: #define RIDBIT_RESET(N, V) do {                                                      \
        !           102:                                  (V).idata[(N)/32]                           \
        !           103:                                    &= ~((unsigned long)1 << (int) ((N)%32)); \
        !           104:                                } while (0)
        !           105: #define RIDBIT_RESET_ALL(V) do {                                             \
        !           106:                                   (V).idata[0] = 0;                          \
        !           107:                                   (V).idata[1] = 0;                          \
        !           108:                                 } while (0)
        !           109: #define RIDBIT_ANY_SET(V) ((V).idata[0] || (V).idata[1])
        !           110: 
        !           111: /* The elements of `ridpointers' are identifier nodes
        !           112:    for the reserved type names and storage classes.
        !           113:    It is indexed by a RID_... value.  */
        !           114: extern tree ridpointers[(int) RID_MAX];
        !           115: 
        !           116: /* the declaration found for the last IDENTIFIER token read in.
        !           117:    yylex must look this up to detect typedefs, which get token type TYPENAME,
        !           118:    so it is left around in case the identifier is not a typedef but is
        !           119:    used in a context which makes it a reference to a variable.  */
        !           120: extern tree lastiddecl;
        !           121: 
        !           122: extern char *token_buffer;     /* Pointer to token buffer.  */
        !           123: 
        !           124: /* Back-door communication channel to the lexer.  */
        !           125: extern int looking_for_typename;
        !           126: 
        !           127: /* Wrap the current header file in extern "C".  */
        !           128: extern int in_c_header;
        !           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.