|
|
1.1 root 1: /* Define constants and variables for communication with parse.y. 1.1.1.2 ! root 2: Copyright (C) 1987, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. 1.1 root 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, 1.1.1.2 ! root 61: RID_EXPLICIT, 1.1 root 62: RID_SIGNED, 63: RID_AUTO, 64: RID_MUTABLE, 65: 66: /* This is where grokdeclarator ends its search when setting the specbits. */ 67: 68: RID_PUBLIC, 69: RID_PRIVATE, 70: RID_PROTECTED, 71: RID_EXCEPTION, 72: RID_TEMPLATE, 73: RID_SIGNATURE, 74: /* Before adding enough to get up to 64, the RIDBIT_* macros 75: will have to be changed a little. */ 76: RID_MAX 77: }; 78: 79: #define NORID RID_UNUSED 80: 81: #define RID_FIRST_MODIFIER RID_EXTERN 82: #define RID_LAST_MODIFIER RID_MUTABLE 83: 84: /* The type that can represent all values of RIDBIT. */ 85: /* We assume that we can stick in at least 32 bits into this. */ 86: typedef struct { unsigned long idata[2]; } 87: RID_BIT_TYPE; 88: 89: /* Be careful, all these modify N twice. */ 90: #define RIDBIT_SETP(N, V) (((unsigned long)1 << (int) ((N)%32)) \ 91: & (V).idata[(N)/32]) 92: #define RIDBIT_NOTSETP(NN, VV) (! RIDBIT_SETP (NN, VV)) 93: #define RIDBIT_SET(N, V) do { \ 94: (V).idata[(N)/32] \ 95: |= ((unsigned long)1 << (int) ((N)%32)); \ 96: } while (0) 97: #define RIDBIT_RESET(N, V) do { \ 98: (V).idata[(N)/32] \ 99: &= ~((unsigned long)1 << (int) ((N)%32)); \ 100: } while (0) 101: #define RIDBIT_RESET_ALL(V) do { \ 102: (V).idata[0] = 0; \ 103: (V).idata[1] = 0; \ 104: } while (0) 105: #define RIDBIT_ANY_SET(V) ((V).idata[0] || (V).idata[1]) 106: 107: /* The elements of `ridpointers' are identifier nodes 108: for the reserved type names and storage classes. 109: It is indexed by a RID_... value. */ 110: extern tree ridpointers[(int) RID_MAX]; 111: 112: /* the declaration found for the last IDENTIFIER token read in. 113: yylex must look this up to detect typedefs, which get token type TYPENAME, 114: so it is left around in case the identifier is not a typedef but is 115: used in a context which makes it a reference to a variable. */ 116: extern tree lastiddecl; 117: 118: extern char *token_buffer; /* Pointer to token buffer. */ 119: 120: /* Back-door communication channel to the lexer. */ 121: extern int looking_for_typename; 122: extern int looking_for_template; 123: 124: /* Tell the lexer where to look for names. */ 125: extern tree got_scope; 1.1.1.2 ! root 126: extern tree got_object; 1.1 root 127: 128: /* Pending language change. 129: Positive is push count, negative is pop count. */ 130: extern int pending_lang_change; 131: 132: extern tree make_pointer_declarator (), make_reference_declarator (); 133: extern void reinit_parse_for_function (); 134: extern void reinit_parse_for_method (); 135: extern int yylex ();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.