|
|
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 ();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.