xref: /openbsd-src/gnu/usr.bin/binutils/gdb/c-exp.c (revision 11efff7f3ac2b3cfeff0c0cddc14294d9b3aca4f)
1*11efff7fSkettenis /* A Bison parser, made by GNU Bison 1.875c.  */
2b725ae77Skettenis 
3*11efff7fSkettenis /* Skeleton parser for Yacc-like parsing with Bison,
4*11efff7fSkettenis    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
5b725ae77Skettenis 
6*11efff7fSkettenis    This program is free software; you can redistribute it and/or modify
7*11efff7fSkettenis    it under the terms of the GNU General Public License as published by
8*11efff7fSkettenis    the Free Software Foundation; either version 2, or (at your option)
9*11efff7fSkettenis    any later version.
10*11efff7fSkettenis 
11*11efff7fSkettenis    This program is distributed in the hope that it will be useful,
12*11efff7fSkettenis    but WITHOUT ANY WARRANTY; without even the implied warranty of
13*11efff7fSkettenis    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*11efff7fSkettenis    GNU General Public License for more details.
15*11efff7fSkettenis 
16*11efff7fSkettenis    You should have received a copy of the GNU General Public License
17*11efff7fSkettenis    along with this program; if not, write to the Free Software
18*11efff7fSkettenis    Foundation, Inc., 59 Temple Place - Suite 330,
19*11efff7fSkettenis    Boston, MA 02111-1307, USA.  */
20*11efff7fSkettenis 
21*11efff7fSkettenis /* As a special exception, when this file is copied by Bison into a
22*11efff7fSkettenis    Bison output file, you may use that output file without restriction.
23*11efff7fSkettenis    This special exception was added by the Free Software Foundation
24*11efff7fSkettenis    in version 1.24 of Bison.  */
25*11efff7fSkettenis 
26*11efff7fSkettenis /* Written by Richard Stallman by simplifying the original so called
27*11efff7fSkettenis    ``semantic'' parser.  */
28*11efff7fSkettenis 
29*11efff7fSkettenis /* All symbols defined below should begin with yy or YY, to avoid
30*11efff7fSkettenis    infringing on user name space.  This should be done even for local
31*11efff7fSkettenis    variables, as they might otherwise be expanded by user macros.
32*11efff7fSkettenis    There are some unavoidable exceptions within include files to
33*11efff7fSkettenis    define necessary library symbols; they are noted "INFRINGES ON
34*11efff7fSkettenis    USER NAME SPACE" below.  */
35*11efff7fSkettenis 
36*11efff7fSkettenis /* Identify Bison output.  */
37*11efff7fSkettenis #define YYBISON 1
38*11efff7fSkettenis 
39*11efff7fSkettenis /* Skeleton name.  */
40*11efff7fSkettenis #define YYSKELETON_NAME "yacc.c"
41*11efff7fSkettenis 
42*11efff7fSkettenis /* Pure parsers.  */
43*11efff7fSkettenis #define YYPURE 0
44*11efff7fSkettenis 
45*11efff7fSkettenis /* Using locations.  */
46*11efff7fSkettenis #define YYLSP_NEEDED 0
47*11efff7fSkettenis 
48*11efff7fSkettenis 
49*11efff7fSkettenis 
50*11efff7fSkettenis /* Tokens.  */
51*11efff7fSkettenis #ifndef YYTOKENTYPE
52*11efff7fSkettenis # define YYTOKENTYPE
53*11efff7fSkettenis    /* Put the tokens into the symbol table, so that GDB and other debuggers
54*11efff7fSkettenis       know about them.  */
55*11efff7fSkettenis    enum yytokentype {
56*11efff7fSkettenis      INT = 258,
57*11efff7fSkettenis      FLOAT = 259,
58*11efff7fSkettenis      STRING = 260,
59*11efff7fSkettenis      NAME = 261,
60*11efff7fSkettenis      TYPENAME = 262,
61*11efff7fSkettenis      NAME_OR_INT = 263,
62*11efff7fSkettenis      STRUCT = 264,
63*11efff7fSkettenis      CLASS = 265,
64*11efff7fSkettenis      UNION = 266,
65*11efff7fSkettenis      ENUM = 267,
66*11efff7fSkettenis      SIZEOF = 268,
67*11efff7fSkettenis      UNSIGNED = 269,
68*11efff7fSkettenis      COLONCOLON = 270,
69*11efff7fSkettenis      TEMPLATE = 271,
70*11efff7fSkettenis      ERROR = 272,
71*11efff7fSkettenis      SIGNED_KEYWORD = 273,
72*11efff7fSkettenis      LONG = 274,
73*11efff7fSkettenis      SHORT = 275,
74*11efff7fSkettenis      INT_KEYWORD = 276,
75*11efff7fSkettenis      CONST_KEYWORD = 277,
76*11efff7fSkettenis      VOLATILE_KEYWORD = 278,
77*11efff7fSkettenis      DOUBLE_KEYWORD = 279,
78*11efff7fSkettenis      VARIABLE = 280,
79*11efff7fSkettenis      ASSIGN_MODIFY = 281,
80*11efff7fSkettenis      TRUEKEYWORD = 282,
81*11efff7fSkettenis      FALSEKEYWORD = 283,
82*11efff7fSkettenis      ABOVE_COMMA = 284,
83*11efff7fSkettenis      OROR = 285,
84*11efff7fSkettenis      ANDAND = 286,
85*11efff7fSkettenis      NOTEQUAL = 287,
86*11efff7fSkettenis      EQUAL = 288,
87*11efff7fSkettenis      GEQ = 289,
88*11efff7fSkettenis      LEQ = 290,
89*11efff7fSkettenis      RSH = 291,
90*11efff7fSkettenis      LSH = 292,
91*11efff7fSkettenis      DECREMENT = 293,
92*11efff7fSkettenis      INCREMENT = 294,
93*11efff7fSkettenis      UNARY = 295,
94*11efff7fSkettenis      ARROW = 296,
95*11efff7fSkettenis      BLOCKNAME = 297,
96*11efff7fSkettenis      FILENAME = 298
97*11efff7fSkettenis    };
98*11efff7fSkettenis #endif
99*11efff7fSkettenis #define INT 258
100*11efff7fSkettenis #define FLOAT 259
101*11efff7fSkettenis #define STRING 260
102*11efff7fSkettenis #define NAME 261
103*11efff7fSkettenis #define TYPENAME 262
104*11efff7fSkettenis #define NAME_OR_INT 263
105*11efff7fSkettenis #define STRUCT 264
106*11efff7fSkettenis #define CLASS 265
107*11efff7fSkettenis #define UNION 266
108*11efff7fSkettenis #define ENUM 267
109*11efff7fSkettenis #define SIZEOF 268
110*11efff7fSkettenis #define UNSIGNED 269
111*11efff7fSkettenis #define COLONCOLON 270
112*11efff7fSkettenis #define TEMPLATE 271
113*11efff7fSkettenis #define ERROR 272
114*11efff7fSkettenis #define SIGNED_KEYWORD 273
115*11efff7fSkettenis #define LONG 274
116*11efff7fSkettenis #define SHORT 275
117*11efff7fSkettenis #define INT_KEYWORD 276
118*11efff7fSkettenis #define CONST_KEYWORD 277
119*11efff7fSkettenis #define VOLATILE_KEYWORD 278
120*11efff7fSkettenis #define DOUBLE_KEYWORD 279
121*11efff7fSkettenis #define VARIABLE 280
122*11efff7fSkettenis #define ASSIGN_MODIFY 281
123*11efff7fSkettenis #define TRUEKEYWORD 282
124*11efff7fSkettenis #define FALSEKEYWORD 283
125*11efff7fSkettenis #define ABOVE_COMMA 284
126*11efff7fSkettenis #define OROR 285
127*11efff7fSkettenis #define ANDAND 286
128b725ae77Skettenis #define NOTEQUAL 287
129*11efff7fSkettenis #define EQUAL 288
130b725ae77Skettenis #define GEQ 289
131*11efff7fSkettenis #define LEQ 290
132b725ae77Skettenis #define RSH 291
133*11efff7fSkettenis #define LSH 292
134*11efff7fSkettenis #define DECREMENT 293
135*11efff7fSkettenis #define INCREMENT 294
136*11efff7fSkettenis #define UNARY 295
137*11efff7fSkettenis #define ARROW 296
138*11efff7fSkettenis #define BLOCKNAME 297
139*11efff7fSkettenis #define FILENAME 298
140b725ae77Skettenis 
141*11efff7fSkettenis 
142*11efff7fSkettenis 
143*11efff7fSkettenis 
144*11efff7fSkettenis /* Copy the first part of user declarations.  */
145b725ae77Skettenis #line 39 "c-exp.y"
146b725ae77Skettenis 
147b725ae77Skettenis 
148b725ae77Skettenis #include "defs.h"
149b725ae77Skettenis #include "gdb_string.h"
150b725ae77Skettenis #include <ctype.h>
151b725ae77Skettenis #include "expression.h"
152b725ae77Skettenis #include "value.h"
153b725ae77Skettenis #include "parser-defs.h"
154b725ae77Skettenis #include "language.h"
155b725ae77Skettenis #include "c-lang.h"
156b725ae77Skettenis #include "bfd.h" /* Required by objfiles.h.  */
157b725ae77Skettenis #include "symfile.h" /* Required by objfiles.h.  */
158b725ae77Skettenis #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
159b725ae77Skettenis #include "charset.h"
160b725ae77Skettenis #include "block.h"
161b725ae77Skettenis #include "cp-support.h"
162b725ae77Skettenis 
163b725ae77Skettenis /* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
164b725ae77Skettenis    as well as gratuitiously global symbol names, so we can have multiple
165b725ae77Skettenis    yacc generated parsers in gdb.  Note that these are only the variables
166b725ae77Skettenis    produced by yacc.  If other parser generators (bison, byacc, etc) produce
167b725ae77Skettenis    additional global names that conflict at link time, then those parser
168b725ae77Skettenis    generators need to be fixed instead of adding those names to this list. */
169b725ae77Skettenis 
170b725ae77Skettenis #define	yymaxdepth c_maxdepth
171b725ae77Skettenis #define	yyparse	c_parse
172b725ae77Skettenis #define	yylex	c_lex
173b725ae77Skettenis #define	yyerror	c_error
174b725ae77Skettenis #define	yylval	c_lval
175b725ae77Skettenis #define	yychar	c_char
176b725ae77Skettenis #define	yydebug	c_debug
177b725ae77Skettenis #define	yypact	c_pact
178b725ae77Skettenis #define	yyr1	c_r1
179b725ae77Skettenis #define	yyr2	c_r2
180b725ae77Skettenis #define	yydef	c_def
181b725ae77Skettenis #define	yychk	c_chk
182b725ae77Skettenis #define	yypgo	c_pgo
183b725ae77Skettenis #define	yyact	c_act
184b725ae77Skettenis #define	yyexca	c_exca
185b725ae77Skettenis #define yyerrflag c_errflag
186b725ae77Skettenis #define yynerrs	c_nerrs
187b725ae77Skettenis #define	yyps	c_ps
188b725ae77Skettenis #define	yypv	c_pv
189b725ae77Skettenis #define	yys	c_s
190b725ae77Skettenis #define	yy_yys	c_yys
191b725ae77Skettenis #define	yystate	c_state
192b725ae77Skettenis #define	yytmp	c_tmp
193b725ae77Skettenis #define	yyv	c_v
194b725ae77Skettenis #define	yy_yyv	c_yyv
195b725ae77Skettenis #define	yyval	c_val
196b725ae77Skettenis #define	yylloc	c_lloc
197b725ae77Skettenis #define yyreds	c_reds		/* With YYDEBUG defined */
198b725ae77Skettenis #define yytoks	c_toks		/* With YYDEBUG defined */
199b725ae77Skettenis #define yyname	c_name		/* With YYDEBUG defined */
200b725ae77Skettenis #define yyrule	c_rule		/* With YYDEBUG defined */
201b725ae77Skettenis #define yylhs	c_yylhs
202b725ae77Skettenis #define yylen	c_yylen
203b725ae77Skettenis #define yydefred c_yydefred
204b725ae77Skettenis #define yydgoto	c_yydgoto
205b725ae77Skettenis #define yysindex c_yysindex
206b725ae77Skettenis #define yyrindex c_yyrindex
207b725ae77Skettenis #define yygindex c_yygindex
208b725ae77Skettenis #define yytable	 c_yytable
209b725ae77Skettenis #define yycheck	 c_yycheck
210b725ae77Skettenis 
211b725ae77Skettenis #ifndef YYDEBUG
212b725ae77Skettenis #define	YYDEBUG 1		/* Default to yydebug support */
213b725ae77Skettenis #endif
214b725ae77Skettenis 
215b725ae77Skettenis #define YYFPRINTF parser_fprintf
216b725ae77Skettenis 
217b725ae77Skettenis int yyparse (void);
218b725ae77Skettenis 
219b725ae77Skettenis static int yylex (void);
220b725ae77Skettenis 
221b725ae77Skettenis void yyerror (char *);
222b725ae77Skettenis 
223b725ae77Skettenis 
224*11efff7fSkettenis 
225*11efff7fSkettenis /* Enabling traces.  */
226*11efff7fSkettenis #ifndef YYDEBUG
227*11efff7fSkettenis # define YYDEBUG 0
228*11efff7fSkettenis #endif
229*11efff7fSkettenis 
230*11efff7fSkettenis /* Enabling verbose error messages.  */
231*11efff7fSkettenis #ifdef YYERROR_VERBOSE
232*11efff7fSkettenis # undef YYERROR_VERBOSE
233*11efff7fSkettenis # define YYERROR_VERBOSE 1
234*11efff7fSkettenis #else
235*11efff7fSkettenis # define YYERROR_VERBOSE 0
236*11efff7fSkettenis #endif
237*11efff7fSkettenis 
238*11efff7fSkettenis #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
239*11efff7fSkettenis #line 123 "c-exp.y"
240*11efff7fSkettenis typedef union YYSTYPE {
241b725ae77Skettenis     LONGEST lval;
242b725ae77Skettenis     struct {
243b725ae77Skettenis       LONGEST val;
244b725ae77Skettenis       struct type *type;
245b725ae77Skettenis     } typed_val_int;
246b725ae77Skettenis     struct {
247b725ae77Skettenis       DOUBLEST dval;
248b725ae77Skettenis       struct type *type;
249b725ae77Skettenis     } typed_val_float;
250b725ae77Skettenis     struct symbol *sym;
251b725ae77Skettenis     struct type *tval;
252b725ae77Skettenis     struct stoken sval;
253b725ae77Skettenis     struct ttype tsym;
254b725ae77Skettenis     struct symtoken ssym;
255b725ae77Skettenis     int voidval;
256b725ae77Skettenis     struct block *bval;
257b725ae77Skettenis     enum exp_opcode opcode;
258b725ae77Skettenis     struct internalvar *ivar;
259b725ae77Skettenis 
260b725ae77Skettenis     struct type **tvec;
261b725ae77Skettenis     int *ivec;
262*11efff7fSkettenis   } YYSTYPE;
263*11efff7fSkettenis /* Line 191 of yacc.c.  */
264*11efff7fSkettenis # define yystype YYSTYPE /* obsolescent; will be withdrawn */
265*11efff7fSkettenis # define YYSTYPE_IS_DECLARED 1
266b725ae77Skettenis # define YYSTYPE_IS_TRIVIAL 1
267b725ae77Skettenis #endif
268*11efff7fSkettenis 
269*11efff7fSkettenis 
270*11efff7fSkettenis 
271*11efff7fSkettenis /* Copy the second part of user declarations.  */
272*11efff7fSkettenis #line 147 "c-exp.y"
273b725ae77Skettenis 
274b725ae77Skettenis /* YYSTYPE gets defined by %union */
275b725ae77Skettenis static int parse_number (char *, int, int, YYSTYPE *);
276*11efff7fSkettenis 
277*11efff7fSkettenis 
278*11efff7fSkettenis /* Line 214 of yacc.c.  */
279*11efff7fSkettenis 
280*11efff7fSkettenis #if ! defined (yyoverflow) || YYERROR_VERBOSE
281*11efff7fSkettenis 
282*11efff7fSkettenis # ifndef YYFREE
283*11efff7fSkettenis #  define YYFREE free
284b725ae77Skettenis # endif
285*11efff7fSkettenis # ifndef YYMALLOC
286*11efff7fSkettenis #  define YYMALLOC xmalloc
287b725ae77Skettenis # endif
288b725ae77Skettenis 
289b725ae77Skettenis /* The parser invokes alloca or xmalloc; define the necessary symbols.  */
290b725ae77Skettenis 
291*11efff7fSkettenis # ifdef YYSTACK_USE_ALLOCA
292b725ae77Skettenis #  if YYSTACK_USE_ALLOCA
293b725ae77Skettenis #   define YYSTACK_ALLOC alloca
294*11efff7fSkettenis #  endif
295b725ae77Skettenis # else
296b725ae77Skettenis #  if defined (alloca) || defined (_ALLOCA_H)
297b725ae77Skettenis #   define YYSTACK_ALLOC alloca
298b725ae77Skettenis #  else
299b725ae77Skettenis #   ifdef __GNUC__
300b725ae77Skettenis #    define YYSTACK_ALLOC __builtin_alloca
301b725ae77Skettenis #   endif
302b725ae77Skettenis #  endif
303b725ae77Skettenis # endif
304b725ae77Skettenis 
305b725ae77Skettenis # ifdef YYSTACK_ALLOC
306b725ae77Skettenis    /* Pacify GCC's `empty if-body' warning. */
307b725ae77Skettenis #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
308b725ae77Skettenis # else
309b725ae77Skettenis #  if defined (__STDC__) || defined (__cplusplus)
310b725ae77Skettenis #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
311b725ae77Skettenis #   define YYSIZE_T size_t
312b725ae77Skettenis #  endif
313*11efff7fSkettenis #  define YYSTACK_ALLOC YYMALLOC
314*11efff7fSkettenis #  define YYSTACK_FREE YYFREE
315b725ae77Skettenis # endif
316*11efff7fSkettenis #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
317b725ae77Skettenis 
318b725ae77Skettenis 
319b725ae77Skettenis #if (! defined (yyoverflow) \
320b725ae77Skettenis      && (! defined (__cplusplus) \
321*11efff7fSkettenis 	 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
322b725ae77Skettenis 
323b725ae77Skettenis /* A type that is properly aligned for any stack member.  */
324b725ae77Skettenis union yyalloc
325b725ae77Skettenis {
326b725ae77Skettenis   short yyss;
327b725ae77Skettenis   YYSTYPE yyvs;
328b725ae77Skettenis   };
329b725ae77Skettenis 
330b725ae77Skettenis /* The size of the maximum gap between one aligned stack and the next.  */
331*11efff7fSkettenis # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
332b725ae77Skettenis 
333b725ae77Skettenis /* The size of an array large to enough to hold all stacks, each with
334b725ae77Skettenis    N elements.  */
335b725ae77Skettenis # define YYSTACK_BYTES(N) \
336b725ae77Skettenis      ((N) * (sizeof (short) + sizeof (YYSTYPE))				\
337*11efff7fSkettenis       + YYSTACK_GAP_MAXIMUM)
338b725ae77Skettenis 
339b725ae77Skettenis /* Copy COUNT objects from FROM to TO.  The source and destination do
340b725ae77Skettenis    not overlap.  */
341b725ae77Skettenis # ifndef YYCOPY
342*11efff7fSkettenis #  if defined (__GNUC__) && 1 < __GNUC__
343b725ae77Skettenis #   define YYCOPY(To, From, Count) \
344b725ae77Skettenis       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
345b725ae77Skettenis #  else
346b725ae77Skettenis #   define YYCOPY(To, From, Count)		\
347b725ae77Skettenis       do					\
348b725ae77Skettenis 	{					\
349b725ae77Skettenis 	  register YYSIZE_T yyi;		\
350b725ae77Skettenis 	  for (yyi = 0; yyi < (Count); yyi++)	\
351b725ae77Skettenis 	    (To)[yyi] = (From)[yyi];		\
352b725ae77Skettenis 	}					\
353b725ae77Skettenis       while (0)
354b725ae77Skettenis #  endif
355b725ae77Skettenis # endif
356b725ae77Skettenis 
357b725ae77Skettenis /* Relocate STACK from its old location to the new one.  The
358b725ae77Skettenis    local variables YYSIZE and YYSTACKSIZE give the old and new number of
359b725ae77Skettenis    elements in the stack, and YYPTR gives the new location of the
360b725ae77Skettenis    stack.  Advance YYPTR to a properly aligned location for the next
361b725ae77Skettenis    stack.  */
362b725ae77Skettenis # define YYSTACK_RELOCATE(Stack)					\
363b725ae77Skettenis     do									\
364b725ae77Skettenis       {									\
365b725ae77Skettenis 	YYSIZE_T yynewbytes;						\
366b725ae77Skettenis 	YYCOPY (&yyptr->Stack, Stack, yysize);				\
367b725ae77Skettenis 	Stack = &yyptr->Stack;						\
368*11efff7fSkettenis 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
369b725ae77Skettenis 	yyptr += yynewbytes / sizeof (*yyptr);				\
370b725ae77Skettenis       }									\
371b725ae77Skettenis     while (0)
372b725ae77Skettenis 
373b725ae77Skettenis #endif
374b725ae77Skettenis 
375*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
376*11efff7fSkettenis    typedef signed char yysigned_char;
377*11efff7fSkettenis #else
378*11efff7fSkettenis    typedef short yysigned_char;
379*11efff7fSkettenis #endif
380*11efff7fSkettenis 
381*11efff7fSkettenis /* YYFINAL -- State number of the termination state. */
382*11efff7fSkettenis #define YYFINAL  94
383*11efff7fSkettenis /* YYLAST -- Last index in YYTABLE.  */
384*11efff7fSkettenis #define YYLAST   804
385*11efff7fSkettenis 
386*11efff7fSkettenis /* YYNTOKENS -- Number of terminals. */
387*11efff7fSkettenis #define YYNTOKENS  68
388*11efff7fSkettenis /* YYNNTS -- Number of nonterminals. */
389*11efff7fSkettenis #define YYNNTS  31
390*11efff7fSkettenis /* YYNRULES -- Number of rules. */
391*11efff7fSkettenis #define YYNRULES  159
392*11efff7fSkettenis /* YYNRULES -- Number of states. */
393*11efff7fSkettenis #define YYNSTATES  242
394*11efff7fSkettenis 
395*11efff7fSkettenis /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
396*11efff7fSkettenis #define YYUNDEFTOK  2
397*11efff7fSkettenis #define YYMAXUTOK   298
398*11efff7fSkettenis 
399*11efff7fSkettenis #define YYTRANSLATE(YYX) 						\
400*11efff7fSkettenis   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
401*11efff7fSkettenis 
402*11efff7fSkettenis /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
403*11efff7fSkettenis static const unsigned char yytranslate[] =
404*11efff7fSkettenis {
405*11efff7fSkettenis        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
406*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
407*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
408*11efff7fSkettenis        2,     2,     2,    61,     2,     2,     2,    51,    37,     2,
409*11efff7fSkettenis       57,    64,    49,    47,    29,    48,    55,    50,     2,     2,
410*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,    67,     2,
411*11efff7fSkettenis       40,    31,    41,    32,    46,     2,     2,     2,     2,     2,
412*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
413*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
414*11efff7fSkettenis        2,    56,     2,    63,    36,     2,     2,     2,     2,     2,
415*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
416*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
417*11efff7fSkettenis        2,     2,     2,    65,    35,    66,    62,     2,     2,     2,
418*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
419*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
420*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
421*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
422*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
423*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
424*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
425*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
426*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
427*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
428*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
429*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
430*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
431*11efff7fSkettenis        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
432*11efff7fSkettenis       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
433*11efff7fSkettenis       25,    26,    27,    28,    30,    33,    34,    38,    39,    42,
434*11efff7fSkettenis       43,    44,    45,    52,    53,    54,    58,    59,    60
435*11efff7fSkettenis };
436*11efff7fSkettenis 
437*11efff7fSkettenis #if YYDEBUG
438*11efff7fSkettenis /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
439*11efff7fSkettenis    YYRHS.  */
440*11efff7fSkettenis static const unsigned short yyprhs[] =
441*11efff7fSkettenis {
442*11efff7fSkettenis        0,     0,     3,     5,     7,     9,    11,    15,    18,    21,
443*11efff7fSkettenis       24,    27,    30,    33,    36,    39,    42,    45,    49,    53,
444*11efff7fSkettenis       58,    62,    66,    71,    76,    77,    83,    85,    86,    88,
445*11efff7fSkettenis       92,    94,    98,   103,   108,   112,   116,   120,   124,   128,
446*11efff7fSkettenis      132,   136,   140,   144,   148,   152,   156,   160,   164,   168,
447*11efff7fSkettenis      172,   176,   180,   184,   188,   194,   198,   202,   204,   206,
448*11efff7fSkettenis      208,   210,   212,   217,   219,   221,   223,   225,   227,   231,
449*11efff7fSkettenis      235,   239,   244,   246,   249,   251,   254,   256,   257,   261,
450*11efff7fSkettenis      263,   265,   267,   268,   270,   273,   275,   278,   280,   284,
451*11efff7fSkettenis      287,   289,   292,   294,   297,   301,   304,   308,   310,   314,
452*11efff7fSkettenis      316,   318,   320,   322,   325,   329,   332,   336,   340,   344,
453*11efff7fSkettenis      347,   350,   354,   359,   363,   367,   372,   376,   381,   385,
454*11efff7fSkettenis      390,   393,   397,   400,   404,   407,   411,   413,   416,   419,
455*11efff7fSkettenis      422,   425,   428,   431,   433,   436,   438,   444,   447,   450,
456*11efff7fSkettenis      452,   456,   458,   460,   462,   464,   466,   470,   472,   477,
457*11efff7fSkettenis      480,   483,   485,   487,   489,   491,   493,   495,   497,   499
458*11efff7fSkettenis };
459*11efff7fSkettenis 
460*11efff7fSkettenis /* YYRHS -- A `-1'-separated list of the rules' RHS. */
461*11efff7fSkettenis static const yysigned_char yyrhs[] =
462*11efff7fSkettenis {
463*11efff7fSkettenis       69,     0,    -1,    71,    -1,    70,    -1,    89,    -1,    72,
464*11efff7fSkettenis       -1,    71,    29,    72,    -1,    49,    72,    -1,    37,    72,
465*11efff7fSkettenis       -1,    48,    72,    -1,    61,    72,    -1,    62,    72,    -1,
466*11efff7fSkettenis       53,    72,    -1,    52,    72,    -1,    72,    53,    -1,    72,
467*11efff7fSkettenis       52,    -1,    13,    72,    -1,    72,    58,    97,    -1,    72,
468*11efff7fSkettenis       58,    79,    -1,    72,    58,    49,    72,    -1,    72,    55,
469*11efff7fSkettenis       97,    -1,    72,    55,    79,    -1,    72,    55,    49,    72,
470*11efff7fSkettenis       -1,    72,    56,    71,    63,    -1,    -1,    72,    57,    73,
471*11efff7fSkettenis       75,    64,    -1,    65,    -1,    -1,    72,    -1,    75,    29,
472*11efff7fSkettenis       72,    -1,    66,    -1,    74,    75,    76,    -1,    74,    89,
473*11efff7fSkettenis       76,    72,    -1,    57,    89,    64,    72,    -1,    57,    71,
474*11efff7fSkettenis       64,    -1,    72,    46,    72,    -1,    72,    49,    72,    -1,
475*11efff7fSkettenis       72,    50,    72,    -1,    72,    51,    72,    -1,    72,    47,
476*11efff7fSkettenis       72,    -1,    72,    48,    72,    -1,    72,    45,    72,    -1,
477*11efff7fSkettenis       72,    44,    72,    -1,    72,    39,    72,    -1,    72,    38,
478*11efff7fSkettenis       72,    -1,    72,    43,    72,    -1,    72,    42,    72,    -1,
479*11efff7fSkettenis       72,    40,    72,    -1,    72,    41,    72,    -1,    72,    37,
480*11efff7fSkettenis       72,    -1,    72,    36,    72,    -1,    72,    35,    72,    -1,
481*11efff7fSkettenis       72,    34,    72,    -1,    72,    33,    72,    -1,    72,    32,
482*11efff7fSkettenis       72,    67,    72,    -1,    72,    31,    72,    -1,    72,    26,
483*11efff7fSkettenis       72,    -1,     3,    -1,     8,    -1,     4,    -1,    78,    -1,
484*11efff7fSkettenis       25,    -1,    13,    57,    89,    64,    -1,     5,    -1,    27,
485*11efff7fSkettenis       -1,    28,    -1,    59,    -1,    60,    -1,    77,    15,    97,
486*11efff7fSkettenis       -1,    77,    15,    97,    -1,    90,    15,    97,    -1,    90,
487*11efff7fSkettenis       15,    62,    97,    -1,    79,    -1,    15,    97,    -1,    98,
488*11efff7fSkettenis       -1,    46,     6,    -1,    96,    -1,    -1,    81,    80,    81,
489*11efff7fSkettenis       -1,    82,    -1,    96,    -1,    83,    -1,    -1,    49,    -1,
490*11efff7fSkettenis       49,    85,    -1,    37,    -1,    37,    85,    -1,    86,    -1,
491*11efff7fSkettenis       57,    85,    64,    -1,    86,    87,    -1,    87,    -1,    86,
492*11efff7fSkettenis       88,    -1,    88,    -1,    56,    63,    -1,    56,     3,    63,
493*11efff7fSkettenis       -1,    57,    64,    -1,    57,    93,    64,    -1,    94,    -1,
494*11efff7fSkettenis       90,    15,    49,    -1,     7,    -1,    21,    -1,    19,    -1,
495*11efff7fSkettenis       20,    -1,    19,    21,    -1,    19,    18,    21,    -1,    19,
496*11efff7fSkettenis       18,    -1,    18,    19,    21,    -1,    14,    19,    21,    -1,
497*11efff7fSkettenis       19,    14,    21,    -1,    19,    14,    -1,    19,    19,    -1,
498*11efff7fSkettenis       19,    19,    21,    -1,    19,    19,    18,    21,    -1,    19,
499*11efff7fSkettenis       19,    18,    -1,    18,    19,    19,    -1,    18,    19,    19,
500*11efff7fSkettenis       21,    -1,    14,    19,    19,    -1,    14,    19,    19,    21,
501*11efff7fSkettenis       -1,    19,    19,    14,    -1,    19,    19,    14,    21,    -1,
502*11efff7fSkettenis       20,    21,    -1,    20,    18,    21,    -1,    20,    18,    -1,
503*11efff7fSkettenis       14,    20,    21,    -1,    20,    14,    -1,    20,    14,    21,
504*11efff7fSkettenis       -1,    24,    -1,    19,    24,    -1,     9,    97,    -1,    10,
505*11efff7fSkettenis       97,    -1,    11,    97,    -1,    12,    97,    -1,    14,    92,
506*11efff7fSkettenis       -1,    14,    -1,    18,    92,    -1,    18,    -1,    16,    97,
507*11efff7fSkettenis       40,    89,    41,    -1,    83,    90,    -1,    90,    83,    -1,
508*11efff7fSkettenis       91,    -1,    90,    15,    97,    -1,     7,    -1,    21,    -1,
509*11efff7fSkettenis       19,    -1,    20,    -1,    89,    -1,    93,    29,    89,    -1,
510*11efff7fSkettenis       90,    -1,    94,    84,    85,    84,    -1,    22,    23,    -1,
511*11efff7fSkettenis       23,    22,    -1,    95,    -1,    22,    -1,    23,    -1,     6,
512*11efff7fSkettenis       -1,    59,    -1,     7,    -1,     8,    -1,     6,    -1,    59,
513*11efff7fSkettenis       -1
514*11efff7fSkettenis };
515*11efff7fSkettenis 
516*11efff7fSkettenis /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
517*11efff7fSkettenis static const unsigned short yyrline[] =
518*11efff7fSkettenis {
519*11efff7fSkettenis        0,   230,   230,   231,   234,   241,   242,   247,   251,   255,
520*11efff7fSkettenis      259,   263,   267,   271,   275,   279,   283,   287,   293,   301,
521*11efff7fSkettenis      305,   311,   319,   323,   330,   327,   337,   341,   344,   348,
522*11efff7fSkettenis      352,   355,   362,   368,   374,   380,   384,   388,   392,   396,
523*11efff7fSkettenis      400,   404,   408,   412,   416,   420,   424,   428,   432,   436,
524*11efff7fSkettenis      440,   444,   448,   452,   456,   460,   464,   470,   477,   488,
525*11efff7fSkettenis      495,   498,   502,   510,   535,   542,   551,   559,   565,   576,
526*11efff7fSkettenis      592,   606,   631,   632,   666,   723,   729,   730,   733,   736,
527*11efff7fSkettenis      737,   741,   742,   745,   747,   749,   751,   753,   756,   758,
528*11efff7fSkettenis      763,   770,   772,   776,   778,   782,   784,   796,   797,   802,
529*11efff7fSkettenis      804,   806,   808,   810,   812,   814,   816,   818,   820,   822,
530*11efff7fSkettenis      824,   826,   828,   830,   832,   834,   836,   838,   840,   842,
531*11efff7fSkettenis      844,   846,   848,   850,   852,   854,   856,   858,   860,   863,
532*11efff7fSkettenis      866,   869,   872,   874,   876,   878,   883,   887,   889,   891,
533*11efff7fSkettenis      939,   964,   965,   971,   977,   986,   991,   998,   999,  1003,
534*11efff7fSkettenis     1004,  1007,  1011,  1013,  1017,  1018,  1019,  1020,  1023,  1024
535*11efff7fSkettenis };
536*11efff7fSkettenis #endif
537*11efff7fSkettenis 
538*11efff7fSkettenis #if YYDEBUG || YYERROR_VERBOSE
539*11efff7fSkettenis /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
540*11efff7fSkettenis    First, the terminals, then, starting at YYNTOKENS, nonterminals. */
541*11efff7fSkettenis static const char *const yytname[] =
542*11efff7fSkettenis {
543*11efff7fSkettenis   "$end", "error", "$undefined", "INT", "FLOAT", "STRING", "NAME",
544*11efff7fSkettenis   "TYPENAME", "NAME_OR_INT", "STRUCT", "CLASS", "UNION", "ENUM", "SIZEOF",
545*11efff7fSkettenis   "UNSIGNED", "COLONCOLON", "TEMPLATE", "ERROR", "SIGNED_KEYWORD", "LONG",
546*11efff7fSkettenis   "SHORT", "INT_KEYWORD", "CONST_KEYWORD", "VOLATILE_KEYWORD",
547*11efff7fSkettenis   "DOUBLE_KEYWORD", "VARIABLE", "ASSIGN_MODIFY", "TRUEKEYWORD",
548*11efff7fSkettenis   "FALSEKEYWORD", "','", "ABOVE_COMMA", "'='", "'?'", "OROR", "ANDAND",
549*11efff7fSkettenis   "'|'", "'^'", "'&'", "NOTEQUAL", "EQUAL", "'<'", "'>'", "GEQ", "LEQ",
550*11efff7fSkettenis   "RSH", "LSH", "'@'", "'+'", "'-'", "'*'", "'/'", "'%'", "DECREMENT",
551*11efff7fSkettenis   "INCREMENT", "UNARY", "'.'", "'['", "'('", "ARROW", "BLOCKNAME",
552*11efff7fSkettenis   "FILENAME", "'!'", "'~'", "']'", "')'", "'{'", "'}'", "':'", "$accept",
553*11efff7fSkettenis   "start", "type_exp", "exp1", "exp", "@1", "lcurly", "arglist", "rcurly",
554*11efff7fSkettenis   "block", "variable", "qualified_name", "space_identifier",
555*11efff7fSkettenis   "const_or_volatile", "cv_with_space_id",
556*11efff7fSkettenis   "const_or_volatile_or_space_identifier_noopt",
557*11efff7fSkettenis   "const_or_volatile_or_space_identifier", "abs_decl", "direct_abs_decl",
558*11efff7fSkettenis   "array_mod", "func_mod", "type", "typebase", "qualified_type",
559*11efff7fSkettenis   "typename", "nonempty_typelist", "ptype", "const_and_volatile",
560*11efff7fSkettenis   "const_or_volatile_noopt", "name", "name_not_typename", 0
561*11efff7fSkettenis };
562*11efff7fSkettenis #endif
563*11efff7fSkettenis 
564*11efff7fSkettenis # ifdef YYPRINT
565*11efff7fSkettenis /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
566*11efff7fSkettenis    token YYLEX-NUM.  */
567*11efff7fSkettenis static const unsigned short yytoknum[] =
568*11efff7fSkettenis {
569*11efff7fSkettenis        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
570*11efff7fSkettenis      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
571*11efff7fSkettenis      275,   276,   277,   278,   279,   280,   281,   282,   283,    44,
572*11efff7fSkettenis      284,    61,    63,   285,   286,   124,    94,    38,   287,   288,
573*11efff7fSkettenis       60,    62,   289,   290,   291,   292,    64,    43,    45,    42,
574*11efff7fSkettenis       47,    37,   293,   294,   295,    46,    91,    40,   296,   297,
575*11efff7fSkettenis      298,    33,   126,    93,    41,   123,   125,    58
576*11efff7fSkettenis };
577*11efff7fSkettenis # endif
578*11efff7fSkettenis 
579*11efff7fSkettenis /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
580*11efff7fSkettenis static const unsigned char yyr1[] =
581*11efff7fSkettenis {
582*11efff7fSkettenis        0,    68,    69,    69,    70,    71,    71,    72,    72,    72,
583*11efff7fSkettenis       72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
584*11efff7fSkettenis       72,    72,    72,    72,    73,    72,    74,    75,    75,    75,
585*11efff7fSkettenis       76,    72,    72,    72,    72,    72,    72,    72,    72,    72,
586*11efff7fSkettenis       72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
587*11efff7fSkettenis       72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
588*11efff7fSkettenis       72,    72,    72,    72,    72,    72,    77,    77,    77,    78,
589*11efff7fSkettenis       79,    79,    78,    78,    78,    80,    81,    81,    82,    83,
590*11efff7fSkettenis       83,    84,    84,    85,    85,    85,    85,    85,    86,    86,
591*11efff7fSkettenis       86,    86,    86,    87,    87,    88,    88,    89,    89,    90,
592*11efff7fSkettenis       90,    90,    90,    90,    90,    90,    90,    90,    90,    90,
593*11efff7fSkettenis       90,    90,    90,    90,    90,    90,    90,    90,    90,    90,
594*11efff7fSkettenis       90,    90,    90,    90,    90,    90,    90,    90,    90,    90,
595*11efff7fSkettenis       90,    90,    90,    90,    90,    90,    90,    90,    90,    90,
596*11efff7fSkettenis       91,    92,    92,    92,    92,    93,    93,    94,    94,    95,
597*11efff7fSkettenis       95,    96,    96,    96,    97,    97,    97,    97,    98,    98
598*11efff7fSkettenis };
599*11efff7fSkettenis 
600*11efff7fSkettenis /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
601*11efff7fSkettenis static const unsigned char yyr2[] =
602*11efff7fSkettenis {
603*11efff7fSkettenis        0,     2,     1,     1,     1,     1,     3,     2,     2,     2,
604*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     3,     3,     4,
605*11efff7fSkettenis        3,     3,     4,     4,     0,     5,     1,     0,     1,     3,
606*11efff7fSkettenis        1,     3,     4,     4,     3,     3,     3,     3,     3,     3,
607*11efff7fSkettenis        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
608*11efff7fSkettenis        3,     3,     3,     3,     5,     3,     3,     1,     1,     1,
609*11efff7fSkettenis        1,     1,     4,     1,     1,     1,     1,     1,     3,     3,
610*11efff7fSkettenis        3,     4,     1,     2,     1,     2,     1,     0,     3,     1,
611*11efff7fSkettenis        1,     1,     0,     1,     2,     1,     2,     1,     3,     2,
612*11efff7fSkettenis        1,     2,     1,     2,     3,     2,     3,     1,     3,     1,
613*11efff7fSkettenis        1,     1,     1,     2,     3,     2,     3,     3,     3,     2,
614*11efff7fSkettenis        2,     3,     4,     3,     3,     4,     3,     4,     3,     4,
615*11efff7fSkettenis        2,     3,     2,     3,     2,     3,     1,     2,     2,     2,
616*11efff7fSkettenis        2,     2,     2,     1,     2,     1,     5,     2,     2,     1,
617*11efff7fSkettenis        3,     1,     1,     1,     1,     1,     3,     1,     4,     2,
618*11efff7fSkettenis        2,     1,     1,     1,     1,     1,     1,     1,     1,     1
619*11efff7fSkettenis };
620*11efff7fSkettenis 
621*11efff7fSkettenis /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
622*11efff7fSkettenis    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
623*11efff7fSkettenis    means the default is an error.  */
624*11efff7fSkettenis static const unsigned char yydefact[] =
625*11efff7fSkettenis {
626*11efff7fSkettenis       77,    57,    59,    63,   158,    99,    58,     0,     0,     0,
627*11efff7fSkettenis        0,    77,   133,     0,     0,   135,   101,   102,   100,   152,
628*11efff7fSkettenis      153,   126,    61,    64,    65,    77,    77,    77,    77,    77,
629*11efff7fSkettenis       77,   159,    67,    77,    77,    26,     0,     3,     2,     5,
630*11efff7fSkettenis       27,     0,    60,    72,     0,    79,    77,     4,   147,   139,
631*11efff7fSkettenis       97,   151,    80,    74,   154,   156,   157,   155,   128,   129,
632*11efff7fSkettenis      130,   131,    77,    16,    77,   141,   143,   144,   142,   132,
633*11efff7fSkettenis       73,     0,   143,   144,   134,   109,   105,   110,   103,   127,
634*11efff7fSkettenis      124,   122,   120,   149,   150,     8,     9,     7,    13,    12,
635*11efff7fSkettenis        0,     0,    10,    11,     1,    77,    77,    77,    77,    77,
636*11efff7fSkettenis       77,    77,    77,    77,    77,    77,    77,    77,    77,    77,
637*11efff7fSkettenis       77,    77,    77,    77,    77,    77,    77,    77,    15,    14,
638*11efff7fSkettenis       77,    77,    24,    77,    28,     0,     0,     0,     0,    77,
639*11efff7fSkettenis      137,     0,   138,    81,     0,     0,     0,   116,   107,   123,
640*11efff7fSkettenis       77,   114,   106,   108,   104,   118,   113,   111,   125,   121,
641*11efff7fSkettenis       34,    77,     6,    56,    55,     0,    53,    52,    51,    50,
642*11efff7fSkettenis       49,    44,    43,    47,    48,    46,    45,    42,    41,    35,
643*11efff7fSkettenis       39,    40,    36,    37,    38,   156,    77,    21,    20,     0,
644*11efff7fSkettenis       27,    77,    18,    17,    77,    30,    31,    77,    69,    75,
645*11efff7fSkettenis       78,    76,     0,    98,     0,    70,    85,    83,     0,    77,
646*11efff7fSkettenis       82,    87,    90,    92,    62,   117,     0,   147,   115,   119,
647*11efff7fSkettenis      112,    33,    77,    22,    23,     0,    19,    29,    32,   140,
648*11efff7fSkettenis       71,    86,    84,     0,    93,    95,     0,   145,     0,   148,
649*11efff7fSkettenis       77,    89,    91,   136,     0,    54,    25,    94,    88,    77,
650*11efff7fSkettenis       96,   146
651*11efff7fSkettenis };
652*11efff7fSkettenis 
653*11efff7fSkettenis /* YYDEFGOTO[NTERM-NUM]. */
654*11efff7fSkettenis static const short yydefgoto[] =
655*11efff7fSkettenis {
656*11efff7fSkettenis       -1,    36,    37,    90,    39,   180,    40,   125,   186,    41,
657*11efff7fSkettenis       42,    43,   129,    44,    45,    46,   134,   200,   201,   202,
658*11efff7fSkettenis      203,   227,    64,    49,    69,   228,    50,    51,    52,   195,
659*11efff7fSkettenis       53
660*11efff7fSkettenis };
661*11efff7fSkettenis 
662*11efff7fSkettenis /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
663*11efff7fSkettenis    STATE-NUM.  */
664*11efff7fSkettenis #define YYPACT_NINF -101
665*11efff7fSkettenis static const short yypact[] =
666*11efff7fSkettenis {
667*11efff7fSkettenis      320,  -101,  -101,  -101,  -101,  -101,  -101,    30,    30,    30,
668*11efff7fSkettenis       30,   383,    45,    30,    30,   200,   152,    36,  -101,   -11,
669*11efff7fSkettenis       17,  -101,  -101,  -101,  -101,   320,   320,   320,   320,   320,
670*11efff7fSkettenis      320,    29,  -101,   320,   320,  -101,    84,  -101,    39,   597,
671*11efff7fSkettenis      257,    56,  -101,  -101,    57,  -101,   172,  -101,    68,  -101,
672*11efff7fSkettenis       55,  -101,    67,  -101,  -101,  -101,  -101,  -101,  -101,  -101,
673*11efff7fSkettenis     -101,  -101,   320,   460,    87,  -101,    40,    95,  -101,  -101,
674*11efff7fSkettenis     -101,    99,   190,  -101,  -101,   156,   159,   223,  -101,  -101,
675*11efff7fSkettenis      164,   176,  -101,  -101,  -101,   460,   460,   460,   460,   460,
676*11efff7fSkettenis      -15,   158,   460,   460,  -101,   320,   320,   320,   320,   320,
677*11efff7fSkettenis      320,   320,   320,   320,   320,   320,   320,   320,   320,   320,
678*11efff7fSkettenis      320,   320,   320,   320,   320,   320,   320,   320,  -101,  -101,
679*11efff7fSkettenis      194,   320,  -101,   531,   597,   -19,   160,    30,   218,    -1,
680*11efff7fSkettenis       71,    20,  -101,  -101,   -14,   171,    26,   215,  -101,  -101,
681*11efff7fSkettenis      172,   217,  -101,  -101,  -101,   221,   224,  -101,  -101,  -101,
682*11efff7fSkettenis     -101,   320,   597,   597,   597,   560,   622,   646,   669,   691,
683*11efff7fSkettenis      712,   731,   731,   746,   746,   746,   746,   240,   240,   303,
684*11efff7fSkettenis      366,   366,   460,   460,   460,    83,   320,  -101,  -101,   -18,
685*11efff7fSkettenis      257,   320,  -101,  -101,   320,  -101,  -101,   320,   231,  -101,
686*11efff7fSkettenis     -101,  -101,    30,  -101,    30,   210,   118,    63,     4,   472,
687*11efff7fSkettenis        2,   112,  -101,  -101,   446,  -101,   206,    85,  -101,  -101,
688*11efff7fSkettenis     -101,   460,   320,   460,  -101,   -13,   460,   597,   460,  -101,
689*11efff7fSkettenis     -101,  -101,  -101,   185,  -101,  -101,   186,  -101,    -9,  -101,
690*11efff7fSkettenis      114,  -101,  -101,  -101,    11,   526,  -101,  -101,  -101,   172,
691*11efff7fSkettenis     -101,  -101
692*11efff7fSkettenis };
693*11efff7fSkettenis 
694*11efff7fSkettenis /* YYPGOTO[NTERM-NUM].  */
695*11efff7fSkettenis static const short yypgoto[] =
696*11efff7fSkettenis {
697*11efff7fSkettenis     -101,  -101,  -101,     6,    47,  -101,  -101,    69,   126,  -101,
698*11efff7fSkettenis     -101,   -67,  -101,   125,  -101,   -35,    58,  -100,  -101,    54,
699*11efff7fSkettenis       73,     1,     0,  -101,   241,  -101,  -101,  -101,   128,    -5,
700*11efff7fSkettenis     -101
701*11efff7fSkettenis };
702*11efff7fSkettenis 
703*11efff7fSkettenis /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
704*11efff7fSkettenis    positive, shift that token.  If negative, reduce the rule which
705*11efff7fSkettenis    number is the opposite.  If zero, do what YYDEFACT says.
706*11efff7fSkettenis    If YYTABLE_NINF, syntax error.  */
707*11efff7fSkettenis #define YYTABLE_NINF -141
708*11efff7fSkettenis static const short yytable[] =
709*11efff7fSkettenis {
710*11efff7fSkettenis       48,    47,    58,    59,    60,    61,    38,   223,    70,    71,
711*11efff7fSkettenis      184,    95,    83,   132,    95,   133,   184,    54,    55,    56,
712*11efff7fSkettenis      239,    19,    20,   196,    19,    20,    54,    55,    56,   132,
713*11efff7fSkettenis       48,    91,    54,    55,    56,   197,    54,    55,    56,    84,
714*11efff7fSkettenis       48,   126,   198,   199,   -66,   214,   130,   185,   -77,   150,
715*11efff7fSkettenis       80,   236,    65,   177,    81,   240,   182,    82,    63,   137,
716*11efff7fSkettenis      193,   138,    48,   135,    66,    67,    68,   224,    95,   193,
717*11efff7fSkettenis       57,   127,    85,    86,    87,    88,    89,    19,    20,    57,
718*11efff7fSkettenis       92,    93,   194,   131,    94,    57,   192,   124,   194,    57,
719*11efff7fSkettenis       19,    20,   -82,    19,    20,   132,   221,   222,   -99,   226,
720*11efff7fSkettenis      234,   -77,   136,   128,   -82,   -99,   -99,    19,    20,    19,
721*11efff7fSkettenis       20,   -82,   -82,   -76,   -77,   178,   139,   -77,   183,   198,
722*11efff7fSkettenis      199,     5,   188,     7,     8,     9,    10,   179,    12,   -99,
723*11efff7fSkettenis       14,   -77,    15,    16,    17,    18,    19,    20,    21,   140,
724*11efff7fSkettenis      207,   206,   152,   153,   154,   155,   156,   157,   158,   159,
725*11efff7fSkettenis      160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
726*11efff7fSkettenis      170,   171,   172,   173,   174,   133,    75,   197,   198,   230,
727*11efff7fSkettenis       76,    77,   132,    78,   198,   199,    79,   143,   225,     5,
728*11efff7fSkettenis      144,     7,     8,     9,    10,   148,    12,   219,    14,   220,
729*11efff7fSkettenis       15,    16,    17,    18,    19,    20,    21,   149,   211,   207,
730*11efff7fSkettenis       54,   175,    56,     7,     8,     9,    10,    65,    12,   141,
731*11efff7fSkettenis       14,   142,    15,    16,    17,    18,    19,    20,    21,    72,
732*11efff7fSkettenis       73,    68,   151,   213,   189,  -140,   185,   124,   216,   219,
733*11efff7fSkettenis      207,   217,  -140,  -140,   218,   204,   205,   145,   208,   207,
734*11efff7fSkettenis      241,   146,   209,   176,   147,   210,   -68,   233,   237,   215,
735*11efff7fSkettenis      238,   211,   187,    57,   190,   231,    74,   191,   229,   235,
736*11efff7fSkettenis        1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
737*11efff7fSkettenis       11,    12,    13,    14,   232,    15,    16,    17,    18,    19,
738*11efff7fSkettenis       20,    21,    22,     0,    23,    24,   112,   113,   114,   115,
739*11efff7fSkettenis      116,   117,   118,   119,    25,   120,   121,   122,   123,     0,
740*11efff7fSkettenis        0,     0,     0,   -77,     0,    26,    27,     0,     0,    28,
741*11efff7fSkettenis       29,     0,     0,     0,    30,     0,    31,    32,    33,    34,
742*11efff7fSkettenis        0,     0,    35,     1,     2,     3,     4,     5,     6,     7,
743*11efff7fSkettenis        8,     9,    10,    11,    12,    13,    14,     0,    15,    16,
744*11efff7fSkettenis       17,    18,    19,    20,    21,    22,     0,    23,    24,     0,
745*11efff7fSkettenis      113,   114,   115,   116,   117,   118,   119,    25,   120,   121,
746*11efff7fSkettenis      122,   123,     0,     0,     0,     0,     0,     0,    26,    27,
747*11efff7fSkettenis        0,     0,    28,    29,     0,     0,     0,    30,     0,    31,
748*11efff7fSkettenis       32,    33,    34,     0,     0,    35,     1,     2,     3,     4,
749*11efff7fSkettenis        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
750*11efff7fSkettenis        0,    15,    16,    17,    18,    19,    20,    21,    22,     0,
751*11efff7fSkettenis       23,    24,     0,     0,     0,   115,   116,   117,   118,   119,
752*11efff7fSkettenis       25,   120,   121,   122,   123,     0,     0,     0,     0,     0,
753*11efff7fSkettenis        0,    26,    27,     0,     0,    28,    29,     0,     0,     0,
754*11efff7fSkettenis       62,     0,    31,    32,    33,    34,     0,     0,    35,     1,
755*11efff7fSkettenis        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
756*11efff7fSkettenis       12,    13,    14,     0,    15,    16,    17,    18,    19,    20,
757*11efff7fSkettenis       21,    22,     0,    23,    24,     0,     0,     0,     0,     5,
758*11efff7fSkettenis        0,     7,     8,     9,    10,     0,    12,     0,    14,     0,
759*11efff7fSkettenis       15,    16,    17,    18,    19,    20,    21,     0,    28,    29,
760*11efff7fSkettenis        0,     0,     0,    30,     0,    31,    32,    33,    34,   196,
761*11efff7fSkettenis        0,    35,   118,   119,     0,   120,   121,   122,   123,     0,
762*11efff7fSkettenis        0,   197,     0,     0,     0,     0,     0,     0,   198,   199,
763*11efff7fSkettenis        0,     0,     0,     0,     0,     0,   225,    54,   175,    56,
764*11efff7fSkettenis        7,     8,     9,    10,     0,    12,     0,    14,     0,    15,
765*11efff7fSkettenis       16,    17,    18,    19,    20,    21,     0,     0,    98,    99,
766*11efff7fSkettenis      100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
767*11efff7fSkettenis      110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
768*11efff7fSkettenis      181,   120,   121,   122,   123,     0,    96,     0,     0,     0,
769*11efff7fSkettenis       57,    97,    98,    99,   100,   101,   102,   103,   104,   105,
770*11efff7fSkettenis      106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
771*11efff7fSkettenis      116,   117,   118,   119,     0,   120,   121,   122,   123,     0,
772*11efff7fSkettenis        0,     0,     0,    96,     0,     0,     0,   212,    97,    98,
773*11efff7fSkettenis       99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
774*11efff7fSkettenis      109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
775*11efff7fSkettenis      119,     0,   120,   121,   122,   123,   100,   101,   102,   103,
776*11efff7fSkettenis      104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
777*11efff7fSkettenis      114,   115,   116,   117,   118,   119,     0,   120,   121,   122,
778*11efff7fSkettenis      123,   101,   102,   103,   104,   105,   106,   107,   108,   109,
779*11efff7fSkettenis      110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
780*11efff7fSkettenis        0,   120,   121,   122,   123,   102,   103,   104,   105,   106,
781*11efff7fSkettenis      107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
782*11efff7fSkettenis      117,   118,   119,     0,   120,   121,   122,   123,   103,   104,
783*11efff7fSkettenis      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
784*11efff7fSkettenis      115,   116,   117,   118,   119,     0,   120,   121,   122,   123,
785*11efff7fSkettenis      104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
786*11efff7fSkettenis      114,   115,   116,   117,   118,   119,     0,   120,   121,   122,
787*11efff7fSkettenis      123,   106,   107,   108,   109,   110,   111,   112,   113,   114,
788*11efff7fSkettenis      115,   116,   117,   118,   119,     0,   120,   121,   122,   123,
789*11efff7fSkettenis      110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
790*11efff7fSkettenis        0,   120,   121,   122,   123
791*11efff7fSkettenis };
792*11efff7fSkettenis 
793*11efff7fSkettenis static const short yycheck[] =
794*11efff7fSkettenis {
795*11efff7fSkettenis        0,     0,     7,     8,     9,    10,     0,     3,    13,    14,
796*11efff7fSkettenis       29,    29,    23,    48,    29,    50,    29,     6,     7,     8,
797*11efff7fSkettenis       29,    22,    23,    37,    22,    23,     6,     7,     8,    64,
798*11efff7fSkettenis       30,    30,     6,     7,     8,    49,     6,     7,     8,    22,
799*11efff7fSkettenis       40,    40,    56,    57,    15,    63,    46,    66,    46,    64,
800*11efff7fSkettenis       14,    64,     7,   120,    18,    64,   123,    21,    11,    19,
801*11efff7fSkettenis       49,    21,    62,    62,    19,    20,    21,    63,    29,    49,
802*11efff7fSkettenis       59,    15,    25,    26,    27,    28,    29,    22,    23,    59,
803*11efff7fSkettenis       33,    34,    62,    15,     0,    59,    15,    40,    62,    59,
804*11efff7fSkettenis       22,    23,    37,    22,    23,   130,   196,   197,    15,   199,
805*11efff7fSkettenis       15,    46,    15,    46,    49,    22,    23,    22,    23,    22,
806*11efff7fSkettenis       23,    56,    57,    46,    46,   120,    21,    46,   123,    56,
807*11efff7fSkettenis       57,     7,   127,     9,    10,    11,    12,   121,    14,    46,
808*11efff7fSkettenis       16,    46,    18,    19,    20,    21,    22,    23,    24,    40,
809*11efff7fSkettenis      140,   140,    95,    96,    97,    98,    99,   100,   101,   102,
810*11efff7fSkettenis      103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
811*11efff7fSkettenis      113,   114,   115,   116,   117,   200,    14,    49,    56,    57,
812*11efff7fSkettenis       18,    19,   207,    21,    56,    57,    24,    21,    64,     7,
813*11efff7fSkettenis       21,     9,    10,    11,    12,    21,    14,   192,    16,   194,
814*11efff7fSkettenis       18,    19,    20,    21,    22,    23,    24,    21,   151,   199,
815*11efff7fSkettenis        6,     7,     8,     9,    10,    11,    12,     7,    14,    19,
816*11efff7fSkettenis       16,    21,    18,    19,    20,    21,    22,    23,    24,    19,
817*11efff7fSkettenis       20,    21,    64,   176,     6,    15,    66,   180,   181,   234,
818*11efff7fSkettenis      230,   184,    22,    23,   187,    64,    21,    14,    21,   239,
819*11efff7fSkettenis      239,    18,    21,    49,    21,    21,    15,    41,    63,   180,
820*11efff7fSkettenis       64,   204,   126,    59,   129,   201,    15,   129,   200,   212,
821*11efff7fSkettenis        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
822*11efff7fSkettenis       13,    14,    15,    16,   201,    18,    19,    20,    21,    22,
823*11efff7fSkettenis       23,    24,    25,    -1,    27,    28,    46,    47,    48,    49,
824*11efff7fSkettenis       50,    51,    52,    53,    37,    55,    56,    57,    58,    -1,
825*11efff7fSkettenis       -1,    -1,    -1,    46,    -1,    48,    49,    -1,    -1,    52,
826*11efff7fSkettenis       53,    -1,    -1,    -1,    57,    -1,    59,    60,    61,    62,
827*11efff7fSkettenis       -1,    -1,    65,     3,     4,     5,     6,     7,     8,     9,
828*11efff7fSkettenis       10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
829*11efff7fSkettenis       20,    21,    22,    23,    24,    25,    -1,    27,    28,    -1,
830*11efff7fSkettenis       47,    48,    49,    50,    51,    52,    53,    37,    55,    56,
831*11efff7fSkettenis       57,    58,    -1,    -1,    -1,    -1,    -1,    -1,    48,    49,
832*11efff7fSkettenis       -1,    -1,    52,    53,    -1,    -1,    -1,    57,    -1,    59,
833*11efff7fSkettenis       60,    61,    62,    -1,    -1,    65,     3,     4,     5,     6,
834*11efff7fSkettenis        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
835*11efff7fSkettenis       -1,    18,    19,    20,    21,    22,    23,    24,    25,    -1,
836*11efff7fSkettenis       27,    28,    -1,    -1,    -1,    49,    50,    51,    52,    53,
837*11efff7fSkettenis       37,    55,    56,    57,    58,    -1,    -1,    -1,    -1,    -1,
838*11efff7fSkettenis       -1,    48,    49,    -1,    -1,    52,    53,    -1,    -1,    -1,
839*11efff7fSkettenis       57,    -1,    59,    60,    61,    62,    -1,    -1,    65,     3,
840*11efff7fSkettenis        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
841*11efff7fSkettenis       14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
842*11efff7fSkettenis       24,    25,    -1,    27,    28,    -1,    -1,    -1,    -1,     7,
843*11efff7fSkettenis       -1,     9,    10,    11,    12,    -1,    14,    -1,    16,    -1,
844*11efff7fSkettenis       18,    19,    20,    21,    22,    23,    24,    -1,    52,    53,
845*11efff7fSkettenis       -1,    -1,    -1,    57,    -1,    59,    60,    61,    62,    37,
846*11efff7fSkettenis       -1,    65,    52,    53,    -1,    55,    56,    57,    58,    -1,
847*11efff7fSkettenis       -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    56,    57,
848*11efff7fSkettenis       -1,    -1,    -1,    -1,    -1,    -1,    64,     6,     7,     8,
849*11efff7fSkettenis        9,    10,    11,    12,    -1,    14,    -1,    16,    -1,    18,
850*11efff7fSkettenis       19,    20,    21,    22,    23,    24,    -1,    -1,    32,    33,
851*11efff7fSkettenis       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
852*11efff7fSkettenis       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
853*11efff7fSkettenis       49,    55,    56,    57,    58,    -1,    26,    -1,    -1,    -1,
854*11efff7fSkettenis       59,    31,    32,    33,    34,    35,    36,    37,    38,    39,
855*11efff7fSkettenis       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
856*11efff7fSkettenis       50,    51,    52,    53,    -1,    55,    56,    57,    58,    -1,
857*11efff7fSkettenis       -1,    -1,    -1,    26,    -1,    -1,    -1,    67,    31,    32,
858*11efff7fSkettenis       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
859*11efff7fSkettenis       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
860*11efff7fSkettenis       53,    -1,    55,    56,    57,    58,    34,    35,    36,    37,
861*11efff7fSkettenis       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
862*11efff7fSkettenis       48,    49,    50,    51,    52,    53,    -1,    55,    56,    57,
863*11efff7fSkettenis       58,    35,    36,    37,    38,    39,    40,    41,    42,    43,
864*11efff7fSkettenis       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
865*11efff7fSkettenis       -1,    55,    56,    57,    58,    36,    37,    38,    39,    40,
866*11efff7fSkettenis       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
867*11efff7fSkettenis       51,    52,    53,    -1,    55,    56,    57,    58,    37,    38,
868*11efff7fSkettenis       39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
869*11efff7fSkettenis       49,    50,    51,    52,    53,    -1,    55,    56,    57,    58,
870*11efff7fSkettenis       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
871*11efff7fSkettenis       48,    49,    50,    51,    52,    53,    -1,    55,    56,    57,
872*11efff7fSkettenis       58,    40,    41,    42,    43,    44,    45,    46,    47,    48,
873*11efff7fSkettenis       49,    50,    51,    52,    53,    -1,    55,    56,    57,    58,
874*11efff7fSkettenis       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
875*11efff7fSkettenis       -1,    55,    56,    57,    58
876*11efff7fSkettenis };
877*11efff7fSkettenis 
878*11efff7fSkettenis /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
879*11efff7fSkettenis    symbol of state STATE-NUM.  */
880*11efff7fSkettenis static const unsigned char yystos[] =
881*11efff7fSkettenis {
882*11efff7fSkettenis        0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
883*11efff7fSkettenis       12,    13,    14,    15,    16,    18,    19,    20,    21,    22,
884*11efff7fSkettenis       23,    24,    25,    27,    28,    37,    48,    49,    52,    53,
885*11efff7fSkettenis       57,    59,    60,    61,    62,    65,    69,    70,    71,    72,
886*11efff7fSkettenis       74,    77,    78,    79,    81,    82,    83,    89,    90,    91,
887*11efff7fSkettenis       94,    95,    96,    98,     6,     7,     8,    59,    97,    97,
888*11efff7fSkettenis       97,    97,    57,    72,    90,     7,    19,    20,    21,    92,
889*11efff7fSkettenis       97,    97,    19,    20,    92,    14,    18,    19,    21,    24,
890*11efff7fSkettenis       14,    18,    21,    23,    22,    72,    72,    72,    72,    72,
891*11efff7fSkettenis       71,    89,    72,    72,     0,    29,    26,    31,    32,    33,
892*11efff7fSkettenis       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
893*11efff7fSkettenis       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
894*11efff7fSkettenis       55,    56,    57,    58,    72,    75,    89,    15,    46,    80,
895*11efff7fSkettenis       90,    15,    83,    83,    84,    89,    15,    19,    21,    21,
896*11efff7fSkettenis       40,    19,    21,    21,    21,    14,    18,    21,    21,    21,
897*11efff7fSkettenis       64,    64,    72,    72,    72,    72,    72,    72,    72,    72,
898*11efff7fSkettenis       72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
899*11efff7fSkettenis       72,    72,    72,    72,    72,     7,    49,    79,    97,    71,
900*11efff7fSkettenis       73,    49,    79,    97,    29,    66,    76,    76,    97,     6,
901*11efff7fSkettenis       81,    96,    15,    49,    62,    97,    37,    49,    56,    57,
902*11efff7fSkettenis       85,    86,    87,    88,    64,    21,    89,    90,    21,    21,
903*11efff7fSkettenis       21,    72,    67,    72,    63,    75,    72,    72,    72,    97,
904*11efff7fSkettenis       97,    85,    85,     3,    63,    64,    85,    89,    93,    84,
905*11efff7fSkettenis       57,    87,    88,    41,    15,    72,    64,    63,    64,    29,
906*11efff7fSkettenis       64,    89
907*11efff7fSkettenis };
908b725ae77Skettenis 
909b725ae77Skettenis #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
910b725ae77Skettenis # define YYSIZE_T __SIZE_TYPE__
911b725ae77Skettenis #endif
912b725ae77Skettenis #if ! defined (YYSIZE_T) && defined (size_t)
913b725ae77Skettenis # define YYSIZE_T size_t
914b725ae77Skettenis #endif
915b725ae77Skettenis #if ! defined (YYSIZE_T)
916b725ae77Skettenis # if defined (__STDC__) || defined (__cplusplus)
917b725ae77Skettenis #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
918b725ae77Skettenis #  define YYSIZE_T size_t
919b725ae77Skettenis # endif
920b725ae77Skettenis #endif
921b725ae77Skettenis #if ! defined (YYSIZE_T)
922b725ae77Skettenis # define YYSIZE_T unsigned int
923b725ae77Skettenis #endif
924b725ae77Skettenis 
925b725ae77Skettenis #define yyerrok		(yyerrstatus = 0)
926b725ae77Skettenis #define yyclearin	(yychar = YYEMPTY)
927*11efff7fSkettenis #define YYEMPTY		(-2)
928b725ae77Skettenis #define YYEOF		0
929*11efff7fSkettenis 
930b725ae77Skettenis #define YYACCEPT	goto yyacceptlab
931b725ae77Skettenis #define YYABORT		goto yyabortlab
932*11efff7fSkettenis #define YYERROR		goto yyerrorlab
933*11efff7fSkettenis 
934*11efff7fSkettenis 
935b725ae77Skettenis /* Like YYERROR except do call yyerror.  This remains here temporarily
936b725ae77Skettenis    to ease the transition to the new meaning of YYERROR, for GCC.
937b725ae77Skettenis    Once GCC version 2 has supplanted version 1, this can go.  */
938*11efff7fSkettenis 
939b725ae77Skettenis #define YYFAIL		goto yyerrlab
940*11efff7fSkettenis 
941b725ae77Skettenis #define YYRECOVERING()  (!!yyerrstatus)
942*11efff7fSkettenis 
943b725ae77Skettenis #define YYBACKUP(Token, Value)					\
944b725ae77Skettenis do								\
945b725ae77Skettenis   if (yychar == YYEMPTY && yylen == 1)				\
946b725ae77Skettenis     {								\
947b725ae77Skettenis       yychar = (Token);						\
948b725ae77Skettenis       yylval = (Value);						\
949*11efff7fSkettenis       yytoken = YYTRANSLATE (yychar);				\
950b725ae77Skettenis       YYPOPSTACK;						\
951b725ae77Skettenis       goto yybackup;						\
952b725ae77Skettenis     }								\
953b725ae77Skettenis   else								\
954b725ae77Skettenis     { 								\
955b725ae77Skettenis       yyerror ("syntax error: cannot back up");\
956b725ae77Skettenis       YYERROR;							\
957b725ae77Skettenis     }								\
958b725ae77Skettenis while (0)
959b725ae77Skettenis 
960b725ae77Skettenis #define YYTERROR	1
961b725ae77Skettenis #define YYERRCODE	256
962b725ae77Skettenis 
963b725ae77Skettenis /* YYLLOC_DEFAULT -- Compute the default location (before the actions
964*11efff7fSkettenis    are run).  */
965b725ae77Skettenis 
966b725ae77Skettenis #ifndef YYLLOC_DEFAULT
967b725ae77Skettenis # define YYLLOC_DEFAULT(Current, Rhs, N)		\
968*11efff7fSkettenis    ((Current).first_line   = (Rhs)[1].first_line,	\
969*11efff7fSkettenis     (Current).first_column = (Rhs)[1].first_column,	\
970*11efff7fSkettenis     (Current).last_line    = (Rhs)[N].last_line,	\
971*11efff7fSkettenis     (Current).last_column  = (Rhs)[N].last_column)
972b725ae77Skettenis #endif
973b725ae77Skettenis 
974b725ae77Skettenis /* YYLEX -- calling `yylex' with the right arguments.  */
975b725ae77Skettenis 
976b725ae77Skettenis #ifdef YYLEX_PARAM
977*11efff7fSkettenis # define YYLEX yylex (YYLEX_PARAM)
978b725ae77Skettenis #else
979b725ae77Skettenis # define YYLEX yylex ()
980*11efff7fSkettenis #endif
981b725ae77Skettenis 
982b725ae77Skettenis /* Enable debugging if requested.  */
983b725ae77Skettenis #if YYDEBUG
984b725ae77Skettenis 
985b725ae77Skettenis # ifndef YYFPRINTF
986b725ae77Skettenis #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
987b725ae77Skettenis #  define YYFPRINTF fprintf
988b725ae77Skettenis # endif
989b725ae77Skettenis 
990b725ae77Skettenis # define YYDPRINTF(Args)			\
991b725ae77Skettenis do {						\
992b725ae77Skettenis   if (yydebug)					\
993b725ae77Skettenis     YYFPRINTF Args;				\
994b725ae77Skettenis } while (0)
995*11efff7fSkettenis 
996*11efff7fSkettenis # define YYDSYMPRINT(Args)			\
997*11efff7fSkettenis do {						\
998*11efff7fSkettenis   if (yydebug)					\
999*11efff7fSkettenis     yysymprint Args;				\
1000*11efff7fSkettenis } while (0)
1001*11efff7fSkettenis 
1002*11efff7fSkettenis # define YYDSYMPRINTF(Title, Token, Value, Location)		\
1003*11efff7fSkettenis do {								\
1004*11efff7fSkettenis   if (yydebug)							\
1005*11efff7fSkettenis     {								\
1006*11efff7fSkettenis       YYFPRINTF (stderr, "%s ", Title);				\
1007*11efff7fSkettenis       yysymprint (stderr, 					\
1008*11efff7fSkettenis                   Token, Value);	\
1009*11efff7fSkettenis       YYFPRINTF (stderr, "\n");					\
1010*11efff7fSkettenis     }								\
1011*11efff7fSkettenis } while (0)
1012*11efff7fSkettenis 
1013*11efff7fSkettenis /*------------------------------------------------------------------.
1014*11efff7fSkettenis | yy_stack_print -- Print the state stack from its BOTTOM up to its |
1015*11efff7fSkettenis | TOP (included).                                                   |
1016*11efff7fSkettenis `------------------------------------------------------------------*/
1017*11efff7fSkettenis 
1018*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
1019*11efff7fSkettenis static void
yy_stack_print(short * bottom,short * top)1020*11efff7fSkettenis yy_stack_print (short *bottom, short *top)
1021*11efff7fSkettenis #else
1022*11efff7fSkettenis static void
1023*11efff7fSkettenis yy_stack_print (bottom, top)
1024*11efff7fSkettenis     short *bottom;
1025*11efff7fSkettenis     short *top;
1026*11efff7fSkettenis #endif
1027*11efff7fSkettenis {
1028*11efff7fSkettenis   YYFPRINTF (stderr, "Stack now");
1029*11efff7fSkettenis   for (/* Nothing. */; bottom <= top; ++bottom)
1030*11efff7fSkettenis     YYFPRINTF (stderr, " %d", *bottom);
1031*11efff7fSkettenis   YYFPRINTF (stderr, "\n");
1032*11efff7fSkettenis }
1033*11efff7fSkettenis 
1034*11efff7fSkettenis # define YY_STACK_PRINT(Bottom, Top)				\
1035*11efff7fSkettenis do {								\
1036*11efff7fSkettenis   if (yydebug)							\
1037*11efff7fSkettenis     yy_stack_print ((Bottom), (Top));				\
1038*11efff7fSkettenis } while (0)
1039*11efff7fSkettenis 
1040*11efff7fSkettenis 
1041*11efff7fSkettenis /*------------------------------------------------.
1042*11efff7fSkettenis | Report that the YYRULE is going to be reduced.  |
1043*11efff7fSkettenis `------------------------------------------------*/
1044*11efff7fSkettenis 
1045*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
1046*11efff7fSkettenis static void
yy_reduce_print(int yyrule)1047*11efff7fSkettenis yy_reduce_print (int yyrule)
1048*11efff7fSkettenis #else
1049*11efff7fSkettenis static void
1050*11efff7fSkettenis yy_reduce_print (yyrule)
1051*11efff7fSkettenis     int yyrule;
1052*11efff7fSkettenis #endif
1053*11efff7fSkettenis {
1054*11efff7fSkettenis   int yyi;
1055*11efff7fSkettenis   unsigned int yylno = yyrline[yyrule];
1056*11efff7fSkettenis   YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
1057*11efff7fSkettenis              yyrule - 1, yylno);
1058*11efff7fSkettenis   /* Print the symbols being reduced, and their result.  */
1059*11efff7fSkettenis   for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
1060*11efff7fSkettenis     YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
1061*11efff7fSkettenis   YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
1062*11efff7fSkettenis }
1063*11efff7fSkettenis 
1064*11efff7fSkettenis # define YY_REDUCE_PRINT(Rule)		\
1065*11efff7fSkettenis do {					\
1066*11efff7fSkettenis   if (yydebug)				\
1067*11efff7fSkettenis     yy_reduce_print (Rule);		\
1068*11efff7fSkettenis } while (0)
1069*11efff7fSkettenis 
1070b725ae77Skettenis /* Nonzero means print parse trace.  It is left uninitialized so that
1071b725ae77Skettenis    multiple parsers can coexist.  */
1072b725ae77Skettenis int yydebug;
1073b725ae77Skettenis #else /* !YYDEBUG */
1074b725ae77Skettenis # define YYDPRINTF(Args)
1075*11efff7fSkettenis # define YYDSYMPRINT(Args)
1076*11efff7fSkettenis # define YYDSYMPRINTF(Title, Token, Value, Location)
1077*11efff7fSkettenis # define YY_STACK_PRINT(Bottom, Top)
1078*11efff7fSkettenis # define YY_REDUCE_PRINT(Rule)
1079b725ae77Skettenis #endif /* !YYDEBUG */
1080b725ae77Skettenis 
1081*11efff7fSkettenis 
1082b725ae77Skettenis /* YYINITDEPTH -- initial size of the parser's stacks.  */
1083b725ae77Skettenis #ifndef	YYINITDEPTH
1084b725ae77Skettenis # define YYINITDEPTH 200
1085b725ae77Skettenis #endif
1086b725ae77Skettenis 
1087b725ae77Skettenis /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1088b725ae77Skettenis    if the built-in stack extension method is used).
1089b725ae77Skettenis 
1090b725ae77Skettenis    Do not make this value too large; the results are undefined if
1091b725ae77Skettenis    SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
1092b725ae77Skettenis    evaluated with infinite-precision integer arithmetic.  */
1093b725ae77Skettenis 
1094*11efff7fSkettenis #if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
1095b725ae77Skettenis # undef YYMAXDEPTH
1096b725ae77Skettenis #endif
1097b725ae77Skettenis 
1098b725ae77Skettenis #ifndef YYMAXDEPTH
1099b725ae77Skettenis # define YYMAXDEPTH 10000
1100b725ae77Skettenis #endif
1101*11efff7fSkettenis 
1102b725ae77Skettenis 
1103*11efff7fSkettenis 
1104*11efff7fSkettenis #if YYERROR_VERBOSE
1105b725ae77Skettenis 
1106b725ae77Skettenis # ifndef yystrlen
1107b725ae77Skettenis #  if defined (__GLIBC__) && defined (_STRING_H)
1108b725ae77Skettenis #   define yystrlen strlen
1109b725ae77Skettenis #  else
1110b725ae77Skettenis /* Return the length of YYSTR.  */
1111b725ae77Skettenis static YYSIZE_T
1112b725ae77Skettenis #   if defined (__STDC__) || defined (__cplusplus)
yystrlen(const char * yystr)1113b725ae77Skettenis yystrlen (const char *yystr)
1114b725ae77Skettenis #   else
1115b725ae77Skettenis yystrlen (yystr)
1116b725ae77Skettenis      const char *yystr;
1117b725ae77Skettenis #   endif
1118b725ae77Skettenis {
1119b725ae77Skettenis   register const char *yys = yystr;
1120b725ae77Skettenis 
1121b725ae77Skettenis   while (*yys++ != '\0')
1122b725ae77Skettenis     continue;
1123b725ae77Skettenis 
1124b725ae77Skettenis   return yys - yystr - 1;
1125b725ae77Skettenis }
1126b725ae77Skettenis #  endif
1127b725ae77Skettenis # endif
1128b725ae77Skettenis 
1129b725ae77Skettenis # ifndef yystpcpy
1130b725ae77Skettenis #  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
1131b725ae77Skettenis #   define yystpcpy stpcpy
1132b725ae77Skettenis #  else
1133b725ae77Skettenis /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1134b725ae77Skettenis    YYDEST.  */
1135b725ae77Skettenis static char *
1136b725ae77Skettenis #   if defined (__STDC__) || defined (__cplusplus)
yystpcpy(char * yydest,const char * yysrc)1137b725ae77Skettenis yystpcpy (char *yydest, const char *yysrc)
1138b725ae77Skettenis #   else
1139b725ae77Skettenis yystpcpy (yydest, yysrc)
1140b725ae77Skettenis      char *yydest;
1141b725ae77Skettenis      const char *yysrc;
1142b725ae77Skettenis #   endif
1143b725ae77Skettenis {
1144b725ae77Skettenis   register char *yyd = yydest;
1145b725ae77Skettenis   register const char *yys = yysrc;
1146b725ae77Skettenis 
1147b725ae77Skettenis   while ((*yyd++ = *yys++) != '\0')
1148b725ae77Skettenis     continue;
1149b725ae77Skettenis 
1150b725ae77Skettenis   return yyd - 1;
1151b725ae77Skettenis }
1152b725ae77Skettenis #  endif
1153b725ae77Skettenis # endif
1154*11efff7fSkettenis 
1155*11efff7fSkettenis #endif /* !YYERROR_VERBOSE */
1156*11efff7fSkettenis 
1157b725ae77Skettenis 
1158b725ae77Skettenis 
1159*11efff7fSkettenis #if YYDEBUG
1160*11efff7fSkettenis /*--------------------------------.
1161*11efff7fSkettenis | Print this symbol on YYOUTPUT.  |
1162*11efff7fSkettenis `--------------------------------*/
1163b725ae77Skettenis 
1164*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
1165*11efff7fSkettenis static void
yysymprint(FILE * yyoutput,int yytype,YYSTYPE * yyvaluep)1166*11efff7fSkettenis yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
1167*11efff7fSkettenis #else
1168*11efff7fSkettenis static void
1169*11efff7fSkettenis yysymprint (yyoutput, yytype, yyvaluep)
1170*11efff7fSkettenis     FILE *yyoutput;
1171*11efff7fSkettenis     int yytype;
1172*11efff7fSkettenis     YYSTYPE *yyvaluep;
1173*11efff7fSkettenis #endif
1174*11efff7fSkettenis {
1175*11efff7fSkettenis   /* Pacify ``unused variable'' warnings.  */
1176*11efff7fSkettenis   (void) yyvaluep;
1177*11efff7fSkettenis 
1178*11efff7fSkettenis   if (yytype < YYNTOKENS)
1179*11efff7fSkettenis     {
1180*11efff7fSkettenis       YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
1181*11efff7fSkettenis # ifdef YYPRINT
1182*11efff7fSkettenis       YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
1183*11efff7fSkettenis # endif
1184*11efff7fSkettenis     }
1185*11efff7fSkettenis   else
1186*11efff7fSkettenis     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
1187*11efff7fSkettenis 
1188*11efff7fSkettenis   switch (yytype)
1189*11efff7fSkettenis     {
1190*11efff7fSkettenis       default:
1191*11efff7fSkettenis         break;
1192*11efff7fSkettenis     }
1193*11efff7fSkettenis   YYFPRINTF (yyoutput, ")");
1194*11efff7fSkettenis }
1195*11efff7fSkettenis 
1196*11efff7fSkettenis #endif /* ! YYDEBUG */
1197*11efff7fSkettenis /*-----------------------------------------------.
1198*11efff7fSkettenis | Release the memory associated to this symbol.  |
1199*11efff7fSkettenis `-----------------------------------------------*/
1200*11efff7fSkettenis 
1201*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
1202*11efff7fSkettenis static void
yydestruct(int yytype,YYSTYPE * yyvaluep)1203*11efff7fSkettenis yydestruct (int yytype, YYSTYPE *yyvaluep)
1204*11efff7fSkettenis #else
1205*11efff7fSkettenis static void
1206*11efff7fSkettenis yydestruct (yytype, yyvaluep)
1207*11efff7fSkettenis     int yytype;
1208*11efff7fSkettenis     YYSTYPE *yyvaluep;
1209*11efff7fSkettenis #endif
1210*11efff7fSkettenis {
1211*11efff7fSkettenis   /* Pacify ``unused variable'' warnings.  */
1212*11efff7fSkettenis   (void) yyvaluep;
1213*11efff7fSkettenis 
1214*11efff7fSkettenis   switch (yytype)
1215*11efff7fSkettenis     {
1216*11efff7fSkettenis 
1217*11efff7fSkettenis       default:
1218*11efff7fSkettenis         break;
1219*11efff7fSkettenis     }
1220*11efff7fSkettenis }
1221*11efff7fSkettenis 
1222*11efff7fSkettenis 
1223*11efff7fSkettenis /* Prevent warnings from -Wmissing-prototypes.  */
1224b725ae77Skettenis 
1225b725ae77Skettenis #ifdef YYPARSE_PARAM
1226b725ae77Skettenis # if defined (__STDC__) || defined (__cplusplus)
1227*11efff7fSkettenis int yyparse (void *YYPARSE_PARAM);
1228b725ae77Skettenis # else
1229*11efff7fSkettenis int yyparse ();
1230b725ae77Skettenis # endif
1231b725ae77Skettenis #else /* ! YYPARSE_PARAM */
1232*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
1233*11efff7fSkettenis int yyparse (void);
1234*11efff7fSkettenis #else
1235*11efff7fSkettenis int yyparse ();
1236*11efff7fSkettenis #endif
1237b725ae77Skettenis #endif /* ! YYPARSE_PARAM */
1238b725ae77Skettenis 
1239b725ae77Skettenis 
1240b725ae77Skettenis 
1241*11efff7fSkettenis /* The lookahead symbol.  */
1242*11efff7fSkettenis int yychar;
1243*11efff7fSkettenis 
1244*11efff7fSkettenis /* The semantic value of the lookahead symbol.  */
1245*11efff7fSkettenis YYSTYPE yylval;
1246*11efff7fSkettenis 
1247*11efff7fSkettenis /* Number of syntax errors so far.  */
1248b725ae77Skettenis int yynerrs;
1249b725ae77Skettenis 
1250*11efff7fSkettenis 
1251*11efff7fSkettenis 
1252*11efff7fSkettenis /*----------.
1253*11efff7fSkettenis | yyparse.  |
1254*11efff7fSkettenis `----------*/
1255*11efff7fSkettenis 
1256*11efff7fSkettenis #ifdef YYPARSE_PARAM
1257*11efff7fSkettenis # if defined (__STDC__) || defined (__cplusplus)
yyparse(void * YYPARSE_PARAM)1258*11efff7fSkettenis int yyparse (void *YYPARSE_PARAM)
1259b725ae77Skettenis # else
1260*11efff7fSkettenis int yyparse (YYPARSE_PARAM)
1261*11efff7fSkettenis   void *YYPARSE_PARAM;
1262b725ae77Skettenis # endif
1263*11efff7fSkettenis #else /* ! YYPARSE_PARAM */
1264*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
1265b725ae77Skettenis int
1266*11efff7fSkettenis yyparse (void)
1267*11efff7fSkettenis #else
1268*11efff7fSkettenis int
1269*11efff7fSkettenis yyparse ()
1270*11efff7fSkettenis 
1271*11efff7fSkettenis #endif
1272*11efff7fSkettenis #endif
1273b725ae77Skettenis {
1274b725ae77Skettenis 
1275b725ae77Skettenis   register int yystate;
1276b725ae77Skettenis   register int yyn;
1277b725ae77Skettenis   int yyresult;
1278b725ae77Skettenis   /* Number of tokens to shift before error messages enabled.  */
1279b725ae77Skettenis   int yyerrstatus;
1280b725ae77Skettenis   /* Lookahead token as an internal (translated) token number.  */
1281*11efff7fSkettenis   int yytoken = 0;
1282b725ae77Skettenis 
1283b725ae77Skettenis   /* Three stacks and their tools:
1284b725ae77Skettenis      `yyss': related to states,
1285b725ae77Skettenis      `yyvs': related to semantic values,
1286b725ae77Skettenis      `yyls': related to locations.
1287b725ae77Skettenis 
1288b725ae77Skettenis      Refer to the stacks thru separate pointers, to allow yyoverflow
1289b725ae77Skettenis      to xreallocate them elsewhere.  */
1290b725ae77Skettenis 
1291b725ae77Skettenis   /* The state stack.  */
1292b725ae77Skettenis   short	yyssa[YYINITDEPTH];
1293b725ae77Skettenis   short *yyss = yyssa;
1294b725ae77Skettenis   register short *yyssp;
1295b725ae77Skettenis 
1296b725ae77Skettenis   /* The semantic value stack.  */
1297b725ae77Skettenis   YYSTYPE yyvsa[YYINITDEPTH];
1298b725ae77Skettenis   YYSTYPE *yyvs = yyvsa;
1299b725ae77Skettenis   register YYSTYPE *yyvsp;
1300b725ae77Skettenis 
1301b725ae77Skettenis 
1302*11efff7fSkettenis 
1303b725ae77Skettenis #define YYPOPSTACK   (yyvsp--, yyssp--)
1304b725ae77Skettenis 
1305b725ae77Skettenis   YYSIZE_T yystacksize = YYINITDEPTH;
1306b725ae77Skettenis 
1307b725ae77Skettenis   /* The variables used to return semantic value and location from the
1308b725ae77Skettenis      action routines.  */
1309b725ae77Skettenis   YYSTYPE yyval;
1310*11efff7fSkettenis 
1311b725ae77Skettenis 
1312b725ae77Skettenis   /* When reducing, the number of symbols on the RHS of the reduced
1313b725ae77Skettenis      rule.  */
1314b725ae77Skettenis   int yylen;
1315b725ae77Skettenis 
1316b725ae77Skettenis   YYDPRINTF ((stderr, "Starting parse\n"));
1317b725ae77Skettenis 
1318b725ae77Skettenis   yystate = 0;
1319b725ae77Skettenis   yyerrstatus = 0;
1320b725ae77Skettenis   yynerrs = 0;
1321b725ae77Skettenis   yychar = YYEMPTY;		/* Cause a token to be read.  */
1322b725ae77Skettenis 
1323b725ae77Skettenis   /* Initialize stack pointers.
1324b725ae77Skettenis      Waste one element of value and location stack
1325b725ae77Skettenis      so that they stay on the same level as the state stack.
1326b725ae77Skettenis      The wasted elements are never initialized.  */
1327b725ae77Skettenis 
1328b725ae77Skettenis   yyssp = yyss;
1329b725ae77Skettenis   yyvsp = yyvs;
1330*11efff7fSkettenis 
1331b725ae77Skettenis   goto yysetstate;
1332b725ae77Skettenis 
1333b725ae77Skettenis /*------------------------------------------------------------.
1334b725ae77Skettenis | yynewstate -- Push a new state, which is found in yystate.  |
1335b725ae77Skettenis `------------------------------------------------------------*/
1336b725ae77Skettenis  yynewstate:
1337b725ae77Skettenis   /* In all cases, when you get here, the value and location stacks
1338b725ae77Skettenis      have just been pushed. so pushing a state here evens the stacks.
1339b725ae77Skettenis      */
1340b725ae77Skettenis   yyssp++;
1341b725ae77Skettenis 
1342b725ae77Skettenis  yysetstate:
1343b725ae77Skettenis   *yyssp = yystate;
1344b725ae77Skettenis 
1345*11efff7fSkettenis   if (yyss + yystacksize - 1 <= yyssp)
1346b725ae77Skettenis     {
1347b725ae77Skettenis       /* Get the current used size of the three stacks, in elements.  */
1348b725ae77Skettenis       YYSIZE_T yysize = yyssp - yyss + 1;
1349b725ae77Skettenis 
1350b725ae77Skettenis #ifdef yyoverflow
1351b725ae77Skettenis       {
1352b725ae77Skettenis 	/* Give user a chance to xreallocate the stack. Use copies of
1353b725ae77Skettenis 	   these so that the &'s don't force the real ones into
1354b725ae77Skettenis 	   memory.  */
1355b725ae77Skettenis 	YYSTYPE *yyvs1 = yyvs;
1356b725ae77Skettenis 	short *yyss1 = yyss;
1357b725ae77Skettenis 
1358*11efff7fSkettenis 
1359b725ae77Skettenis 	/* Each stack pointer address is followed by the size of the
1360*11efff7fSkettenis 	   data in use in that stack, in bytes.  This used to be a
1361*11efff7fSkettenis 	   conditional around just the two extra args, but that might
1362*11efff7fSkettenis 	   be undefined if yyoverflow is a macro.  */
1363b725ae77Skettenis 	yyoverflow ("parser stack overflow",
1364b725ae77Skettenis 		    &yyss1, yysize * sizeof (*yyssp),
1365b725ae77Skettenis 		    &yyvs1, yysize * sizeof (*yyvsp),
1366*11efff7fSkettenis 
1367b725ae77Skettenis 		    &yystacksize);
1368*11efff7fSkettenis 
1369b725ae77Skettenis 	yyss = yyss1;
1370b725ae77Skettenis 	yyvs = yyvs1;
1371b725ae77Skettenis       }
1372b725ae77Skettenis #else /* no yyoverflow */
1373b725ae77Skettenis # ifndef YYSTACK_RELOCATE
1374b725ae77Skettenis       goto yyoverflowlab;
1375b725ae77Skettenis # else
1376b725ae77Skettenis       /* Extend the stack our own way.  */
1377*11efff7fSkettenis       if (YYMAXDEPTH <= yystacksize)
1378b725ae77Skettenis 	goto yyoverflowlab;
1379b725ae77Skettenis       yystacksize *= 2;
1380*11efff7fSkettenis       if (YYMAXDEPTH < yystacksize)
1381b725ae77Skettenis 	yystacksize = YYMAXDEPTH;
1382b725ae77Skettenis 
1383b725ae77Skettenis       {
1384b725ae77Skettenis 	short *yyss1 = yyss;
1385b725ae77Skettenis 	union yyalloc *yyptr =
1386b725ae77Skettenis 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1387b725ae77Skettenis 	if (! yyptr)
1388b725ae77Skettenis 	  goto yyoverflowlab;
1389b725ae77Skettenis 	YYSTACK_RELOCATE (yyss);
1390b725ae77Skettenis 	YYSTACK_RELOCATE (yyvs);
1391*11efff7fSkettenis 
1392b725ae77Skettenis #  undef YYSTACK_RELOCATE
1393b725ae77Skettenis 	if (yyss1 != yyssa)
1394b725ae77Skettenis 	  YYSTACK_FREE (yyss1);
1395b725ae77Skettenis       }
1396b725ae77Skettenis # endif
1397b725ae77Skettenis #endif /* no yyoverflow */
1398b725ae77Skettenis 
1399b725ae77Skettenis       yyssp = yyss + yysize - 1;
1400b725ae77Skettenis       yyvsp = yyvs + yysize - 1;
1401*11efff7fSkettenis 
1402b725ae77Skettenis 
1403b725ae77Skettenis       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1404b725ae77Skettenis 		  (unsigned long int) yystacksize));
1405b725ae77Skettenis 
1406*11efff7fSkettenis       if (yyss + yystacksize - 1 <= yyssp)
1407b725ae77Skettenis 	YYABORT;
1408b725ae77Skettenis     }
1409b725ae77Skettenis 
1410b725ae77Skettenis   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1411b725ae77Skettenis 
1412b725ae77Skettenis   goto yybackup;
1413b725ae77Skettenis 
1414b725ae77Skettenis /*-----------.
1415b725ae77Skettenis | yybackup.  |
1416b725ae77Skettenis `-----------*/
1417b725ae77Skettenis yybackup:
1418b725ae77Skettenis 
1419b725ae77Skettenis /* Do appropriate processing given the current state.  */
1420b725ae77Skettenis /* Read a lookahead token if we need one and don't already have one.  */
1421b725ae77Skettenis /* yyresume: */
1422b725ae77Skettenis 
1423b725ae77Skettenis   /* First try to decide what to do without reference to lookahead token.  */
1424b725ae77Skettenis 
1425b725ae77Skettenis   yyn = yypact[yystate];
1426*11efff7fSkettenis   if (yyn == YYPACT_NINF)
1427b725ae77Skettenis     goto yydefault;
1428b725ae77Skettenis 
1429b725ae77Skettenis   /* Not known => get a lookahead token if don't already have one.  */
1430b725ae77Skettenis 
1431*11efff7fSkettenis   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
1432b725ae77Skettenis   if (yychar == YYEMPTY)
1433b725ae77Skettenis     {
1434b725ae77Skettenis       YYDPRINTF ((stderr, "Reading a token: "));
1435b725ae77Skettenis       yychar = YYLEX;
1436b725ae77Skettenis     }
1437b725ae77Skettenis 
1438*11efff7fSkettenis   if (yychar <= YYEOF)
1439b725ae77Skettenis     {
1440*11efff7fSkettenis       yychar = yytoken = YYEOF;
1441b725ae77Skettenis       YYDPRINTF ((stderr, "Now at end of input.\n"));
1442b725ae77Skettenis     }
1443b725ae77Skettenis   else
1444b725ae77Skettenis     {
1445*11efff7fSkettenis       yytoken = YYTRANSLATE (yychar);
1446*11efff7fSkettenis       YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
1447b725ae77Skettenis     }
1448b725ae77Skettenis 
1449*11efff7fSkettenis   /* If the proper action on seeing token YYTOKEN is to reduce or to
1450*11efff7fSkettenis      detect an error, take that action.  */
1451*11efff7fSkettenis   yyn += yytoken;
1452*11efff7fSkettenis   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1453b725ae77Skettenis     goto yydefault;
1454b725ae77Skettenis   yyn = yytable[yyn];
1455*11efff7fSkettenis   if (yyn <= 0)
1456b725ae77Skettenis     {
1457*11efff7fSkettenis       if (yyn == 0 || yyn == YYTABLE_NINF)
1458b725ae77Skettenis 	goto yyerrlab;
1459b725ae77Skettenis       yyn = -yyn;
1460b725ae77Skettenis       goto yyreduce;
1461b725ae77Skettenis     }
1462b725ae77Skettenis 
1463b725ae77Skettenis   if (yyn == YYFINAL)
1464b725ae77Skettenis     YYACCEPT;
1465b725ae77Skettenis 
1466b725ae77Skettenis   /* Shift the lookahead token.  */
1467*11efff7fSkettenis   YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
1468b725ae77Skettenis 
1469b725ae77Skettenis   /* Discard the token being shifted unless it is eof.  */
1470b725ae77Skettenis   if (yychar != YYEOF)
1471b725ae77Skettenis     yychar = YYEMPTY;
1472b725ae77Skettenis 
1473b725ae77Skettenis   *++yyvsp = yylval;
1474*11efff7fSkettenis 
1475b725ae77Skettenis 
1476b725ae77Skettenis   /* Count tokens shifted since error; after three, turn off error
1477b725ae77Skettenis      status.  */
1478b725ae77Skettenis   if (yyerrstatus)
1479b725ae77Skettenis     yyerrstatus--;
1480b725ae77Skettenis 
1481b725ae77Skettenis   yystate = yyn;
1482b725ae77Skettenis   goto yynewstate;
1483b725ae77Skettenis 
1484b725ae77Skettenis 
1485b725ae77Skettenis /*-----------------------------------------------------------.
1486b725ae77Skettenis | yydefault -- do the default action for the current state.  |
1487b725ae77Skettenis `-----------------------------------------------------------*/
1488b725ae77Skettenis yydefault:
1489b725ae77Skettenis   yyn = yydefact[yystate];
1490b725ae77Skettenis   if (yyn == 0)
1491b725ae77Skettenis     goto yyerrlab;
1492b725ae77Skettenis   goto yyreduce;
1493b725ae77Skettenis 
1494b725ae77Skettenis 
1495b725ae77Skettenis /*-----------------------------.
1496b725ae77Skettenis | yyreduce -- Do a reduction.  |
1497b725ae77Skettenis `-----------------------------*/
1498b725ae77Skettenis yyreduce:
1499b725ae77Skettenis   /* yyn is the number of a rule to reduce with.  */
1500b725ae77Skettenis   yylen = yyr2[yyn];
1501b725ae77Skettenis 
1502b725ae77Skettenis   /* If YYLEN is nonzero, implement the default value of the action:
1503b725ae77Skettenis      `$$ = $1'.
1504b725ae77Skettenis 
1505*11efff7fSkettenis      Otherwise, the following line sets YYVAL to garbage.
1506*11efff7fSkettenis      This behavior is undocumented and Bison
1507b725ae77Skettenis      users should not rely upon it.  Assigning to YYVAL
1508b725ae77Skettenis      unconditionally makes the parser a bit smaller, and it avoids a
1509b725ae77Skettenis      GCC warning that YYVAL may be used uninitialized.  */
1510b725ae77Skettenis   yyval = yyvsp[1-yylen];
1511b725ae77Skettenis 
1512b725ae77Skettenis 
1513*11efff7fSkettenis   YY_REDUCE_PRINT (yyn);
1514*11efff7fSkettenis   switch (yyn)
1515b725ae77Skettenis     {
1516*11efff7fSkettenis         case 4:
1517*11efff7fSkettenis #line 235 "c-exp.y"
1518b725ae77Skettenis     { write_exp_elt_opcode(OP_TYPE);
1519b725ae77Skettenis 			  write_exp_elt_type(yyvsp[0].tval);
1520b725ae77Skettenis 			  write_exp_elt_opcode(OP_TYPE);}
1521b725ae77Skettenis     break;
1522*11efff7fSkettenis 
1523*11efff7fSkettenis   case 6:
1524*11efff7fSkettenis #line 243 "c-exp.y"
1525b725ae77Skettenis     { write_exp_elt_opcode (BINOP_COMMA); }
1526b725ae77Skettenis     break;
1527*11efff7fSkettenis 
1528*11efff7fSkettenis   case 7:
1529*11efff7fSkettenis #line 248 "c-exp.y"
1530b725ae77Skettenis     { write_exp_elt_opcode (UNOP_IND); }
1531b725ae77Skettenis     break;
1532*11efff7fSkettenis 
1533*11efff7fSkettenis   case 8:
1534*11efff7fSkettenis #line 252 "c-exp.y"
1535b725ae77Skettenis     { write_exp_elt_opcode (UNOP_ADDR); }
1536b725ae77Skettenis     break;
1537*11efff7fSkettenis 
1538*11efff7fSkettenis   case 9:
1539*11efff7fSkettenis #line 256 "c-exp.y"
1540b725ae77Skettenis     { write_exp_elt_opcode (UNOP_NEG); }
1541b725ae77Skettenis     break;
1542*11efff7fSkettenis 
1543*11efff7fSkettenis   case 10:
1544*11efff7fSkettenis #line 260 "c-exp.y"
1545b725ae77Skettenis     { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
1546b725ae77Skettenis     break;
1547*11efff7fSkettenis 
1548*11efff7fSkettenis   case 11:
1549*11efff7fSkettenis #line 264 "c-exp.y"
1550b725ae77Skettenis     { write_exp_elt_opcode (UNOP_COMPLEMENT); }
1551b725ae77Skettenis     break;
1552*11efff7fSkettenis 
1553*11efff7fSkettenis   case 12:
1554*11efff7fSkettenis #line 268 "c-exp.y"
1555b725ae77Skettenis     { write_exp_elt_opcode (UNOP_PREINCREMENT); }
1556b725ae77Skettenis     break;
1557*11efff7fSkettenis 
1558*11efff7fSkettenis   case 13:
1559*11efff7fSkettenis #line 272 "c-exp.y"
1560b725ae77Skettenis     { write_exp_elt_opcode (UNOP_PREDECREMENT); }
1561b725ae77Skettenis     break;
1562*11efff7fSkettenis 
1563*11efff7fSkettenis   case 14:
1564*11efff7fSkettenis #line 276 "c-exp.y"
1565b725ae77Skettenis     { write_exp_elt_opcode (UNOP_POSTINCREMENT); }
1566b725ae77Skettenis     break;
1567*11efff7fSkettenis 
1568*11efff7fSkettenis   case 15:
1569*11efff7fSkettenis #line 280 "c-exp.y"
1570b725ae77Skettenis     { write_exp_elt_opcode (UNOP_POSTDECREMENT); }
1571b725ae77Skettenis     break;
1572*11efff7fSkettenis 
1573*11efff7fSkettenis   case 16:
1574*11efff7fSkettenis #line 284 "c-exp.y"
1575b725ae77Skettenis     { write_exp_elt_opcode (UNOP_SIZEOF); }
1576b725ae77Skettenis     break;
1577*11efff7fSkettenis 
1578*11efff7fSkettenis   case 17:
1579*11efff7fSkettenis #line 288 "c-exp.y"
1580b725ae77Skettenis     { write_exp_elt_opcode (STRUCTOP_PTR);
1581b725ae77Skettenis 			  write_exp_string (yyvsp[0].sval);
1582b725ae77Skettenis 			  write_exp_elt_opcode (STRUCTOP_PTR); }
1583b725ae77Skettenis     break;
1584*11efff7fSkettenis 
1585*11efff7fSkettenis   case 18:
1586*11efff7fSkettenis #line 294 "c-exp.y"
1587b725ae77Skettenis     { /* exp->type::name becomes exp->*(&type::name) */
1588b725ae77Skettenis 			  /* Note: this doesn't work if name is a
1589b725ae77Skettenis 			     static member!  FIXME */
1590b725ae77Skettenis 			  write_exp_elt_opcode (UNOP_ADDR);
1591b725ae77Skettenis 			  write_exp_elt_opcode (STRUCTOP_MPTR); }
1592b725ae77Skettenis     break;
1593*11efff7fSkettenis 
1594*11efff7fSkettenis   case 19:
1595*11efff7fSkettenis #line 302 "c-exp.y"
1596b725ae77Skettenis     { write_exp_elt_opcode (STRUCTOP_MPTR); }
1597b725ae77Skettenis     break;
1598*11efff7fSkettenis 
1599*11efff7fSkettenis   case 20:
1600*11efff7fSkettenis #line 306 "c-exp.y"
1601b725ae77Skettenis     { write_exp_elt_opcode (STRUCTOP_STRUCT);
1602b725ae77Skettenis 			  write_exp_string (yyvsp[0].sval);
1603b725ae77Skettenis 			  write_exp_elt_opcode (STRUCTOP_STRUCT); }
1604b725ae77Skettenis     break;
1605*11efff7fSkettenis 
1606*11efff7fSkettenis   case 21:
1607*11efff7fSkettenis #line 312 "c-exp.y"
1608b725ae77Skettenis     { /* exp.type::name becomes exp.*(&type::name) */
1609b725ae77Skettenis 			  /* Note: this doesn't work if name is a
1610b725ae77Skettenis 			     static member!  FIXME */
1611b725ae77Skettenis 			  write_exp_elt_opcode (UNOP_ADDR);
1612b725ae77Skettenis 			  write_exp_elt_opcode (STRUCTOP_MEMBER); }
1613b725ae77Skettenis     break;
1614*11efff7fSkettenis 
1615*11efff7fSkettenis   case 22:
1616*11efff7fSkettenis #line 320 "c-exp.y"
1617b725ae77Skettenis     { write_exp_elt_opcode (STRUCTOP_MEMBER); }
1618b725ae77Skettenis     break;
1619*11efff7fSkettenis 
1620*11efff7fSkettenis   case 23:
1621*11efff7fSkettenis #line 324 "c-exp.y"
1622b725ae77Skettenis     { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
1623b725ae77Skettenis     break;
1624*11efff7fSkettenis 
1625*11efff7fSkettenis   case 24:
1626*11efff7fSkettenis #line 330 "c-exp.y"
1627b725ae77Skettenis     { start_arglist (); }
1628b725ae77Skettenis     break;
1629*11efff7fSkettenis 
1630*11efff7fSkettenis   case 25:
1631*11efff7fSkettenis #line 332 "c-exp.y"
1632b725ae77Skettenis     { write_exp_elt_opcode (OP_FUNCALL);
1633b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST) end_arglist ());
1634b725ae77Skettenis 			  write_exp_elt_opcode (OP_FUNCALL); }
1635b725ae77Skettenis     break;
1636*11efff7fSkettenis 
1637*11efff7fSkettenis   case 26:
1638*11efff7fSkettenis #line 338 "c-exp.y"
1639b725ae77Skettenis     { start_arglist (); }
1640b725ae77Skettenis     break;
1641*11efff7fSkettenis 
1642*11efff7fSkettenis   case 28:
1643*11efff7fSkettenis #line 345 "c-exp.y"
1644b725ae77Skettenis     { arglist_len = 1; }
1645b725ae77Skettenis     break;
1646*11efff7fSkettenis 
1647*11efff7fSkettenis   case 29:
1648*11efff7fSkettenis #line 349 "c-exp.y"
1649b725ae77Skettenis     { arglist_len++; }
1650b725ae77Skettenis     break;
1651*11efff7fSkettenis 
1652*11efff7fSkettenis   case 30:
1653*11efff7fSkettenis #line 353 "c-exp.y"
1654b725ae77Skettenis     { yyval.lval = end_arglist () - 1; }
1655b725ae77Skettenis     break;
1656*11efff7fSkettenis 
1657*11efff7fSkettenis   case 31:
1658*11efff7fSkettenis #line 356 "c-exp.y"
1659b725ae77Skettenis     { write_exp_elt_opcode (OP_ARRAY);
1660b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST) 0);
1661b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
1662b725ae77Skettenis 			  write_exp_elt_opcode (OP_ARRAY); }
1663b725ae77Skettenis     break;
1664*11efff7fSkettenis 
1665*11efff7fSkettenis   case 32:
1666*11efff7fSkettenis #line 363 "c-exp.y"
1667b725ae77Skettenis     { write_exp_elt_opcode (UNOP_MEMVAL);
1668b725ae77Skettenis 			  write_exp_elt_type (yyvsp[-2].tval);
1669b725ae77Skettenis 			  write_exp_elt_opcode (UNOP_MEMVAL); }
1670b725ae77Skettenis     break;
1671*11efff7fSkettenis 
1672*11efff7fSkettenis   case 33:
1673*11efff7fSkettenis #line 369 "c-exp.y"
1674b725ae77Skettenis     { write_exp_elt_opcode (UNOP_CAST);
1675b725ae77Skettenis 			  write_exp_elt_type (yyvsp[-2].tval);
1676b725ae77Skettenis 			  write_exp_elt_opcode (UNOP_CAST); }
1677b725ae77Skettenis     break;
1678*11efff7fSkettenis 
1679*11efff7fSkettenis   case 34:
1680*11efff7fSkettenis #line 375 "c-exp.y"
1681b725ae77Skettenis     { }
1682b725ae77Skettenis     break;
1683*11efff7fSkettenis 
1684*11efff7fSkettenis   case 35:
1685*11efff7fSkettenis #line 381 "c-exp.y"
1686b725ae77Skettenis     { write_exp_elt_opcode (BINOP_REPEAT); }
1687b725ae77Skettenis     break;
1688*11efff7fSkettenis 
1689*11efff7fSkettenis   case 36:
1690*11efff7fSkettenis #line 385 "c-exp.y"
1691b725ae77Skettenis     { write_exp_elt_opcode (BINOP_MUL); }
1692b725ae77Skettenis     break;
1693*11efff7fSkettenis 
1694*11efff7fSkettenis   case 37:
1695*11efff7fSkettenis #line 389 "c-exp.y"
1696b725ae77Skettenis     { write_exp_elt_opcode (BINOP_DIV); }
1697b725ae77Skettenis     break;
1698*11efff7fSkettenis 
1699*11efff7fSkettenis   case 38:
1700*11efff7fSkettenis #line 393 "c-exp.y"
1701b725ae77Skettenis     { write_exp_elt_opcode (BINOP_REM); }
1702b725ae77Skettenis     break;
1703*11efff7fSkettenis 
1704*11efff7fSkettenis   case 39:
1705*11efff7fSkettenis #line 397 "c-exp.y"
1706b725ae77Skettenis     { write_exp_elt_opcode (BINOP_ADD); }
1707b725ae77Skettenis     break;
1708*11efff7fSkettenis 
1709*11efff7fSkettenis   case 40:
1710*11efff7fSkettenis #line 401 "c-exp.y"
1711b725ae77Skettenis     { write_exp_elt_opcode (BINOP_SUB); }
1712b725ae77Skettenis     break;
1713*11efff7fSkettenis 
1714*11efff7fSkettenis   case 41:
1715*11efff7fSkettenis #line 405 "c-exp.y"
1716b725ae77Skettenis     { write_exp_elt_opcode (BINOP_LSH); }
1717b725ae77Skettenis     break;
1718*11efff7fSkettenis 
1719*11efff7fSkettenis   case 42:
1720*11efff7fSkettenis #line 409 "c-exp.y"
1721b725ae77Skettenis     { write_exp_elt_opcode (BINOP_RSH); }
1722b725ae77Skettenis     break;
1723*11efff7fSkettenis 
1724*11efff7fSkettenis   case 43:
1725*11efff7fSkettenis #line 413 "c-exp.y"
1726b725ae77Skettenis     { write_exp_elt_opcode (BINOP_EQUAL); }
1727b725ae77Skettenis     break;
1728*11efff7fSkettenis 
1729*11efff7fSkettenis   case 44:
1730*11efff7fSkettenis #line 417 "c-exp.y"
1731b725ae77Skettenis     { write_exp_elt_opcode (BINOP_NOTEQUAL); }
1732b725ae77Skettenis     break;
1733*11efff7fSkettenis 
1734*11efff7fSkettenis   case 45:
1735*11efff7fSkettenis #line 421 "c-exp.y"
1736b725ae77Skettenis     { write_exp_elt_opcode (BINOP_LEQ); }
1737b725ae77Skettenis     break;
1738*11efff7fSkettenis 
1739*11efff7fSkettenis   case 46:
1740*11efff7fSkettenis #line 425 "c-exp.y"
1741b725ae77Skettenis     { write_exp_elt_opcode (BINOP_GEQ); }
1742b725ae77Skettenis     break;
1743*11efff7fSkettenis 
1744*11efff7fSkettenis   case 47:
1745*11efff7fSkettenis #line 429 "c-exp.y"
1746b725ae77Skettenis     { write_exp_elt_opcode (BINOP_LESS); }
1747b725ae77Skettenis     break;
1748*11efff7fSkettenis 
1749*11efff7fSkettenis   case 48:
1750*11efff7fSkettenis #line 433 "c-exp.y"
1751b725ae77Skettenis     { write_exp_elt_opcode (BINOP_GTR); }
1752b725ae77Skettenis     break;
1753*11efff7fSkettenis 
1754*11efff7fSkettenis   case 49:
1755*11efff7fSkettenis #line 437 "c-exp.y"
1756b725ae77Skettenis     { write_exp_elt_opcode (BINOP_BITWISE_AND); }
1757b725ae77Skettenis     break;
1758*11efff7fSkettenis 
1759*11efff7fSkettenis   case 50:
1760*11efff7fSkettenis #line 441 "c-exp.y"
1761b725ae77Skettenis     { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
1762b725ae77Skettenis     break;
1763*11efff7fSkettenis 
1764*11efff7fSkettenis   case 51:
1765*11efff7fSkettenis #line 445 "c-exp.y"
1766b725ae77Skettenis     { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
1767b725ae77Skettenis     break;
1768*11efff7fSkettenis 
1769*11efff7fSkettenis   case 52:
1770*11efff7fSkettenis #line 449 "c-exp.y"
1771b725ae77Skettenis     { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
1772b725ae77Skettenis     break;
1773*11efff7fSkettenis 
1774*11efff7fSkettenis   case 53:
1775*11efff7fSkettenis #line 453 "c-exp.y"
1776b725ae77Skettenis     { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
1777b725ae77Skettenis     break;
1778*11efff7fSkettenis 
1779*11efff7fSkettenis   case 54:
1780*11efff7fSkettenis #line 457 "c-exp.y"
1781b725ae77Skettenis     { write_exp_elt_opcode (TERNOP_COND); }
1782b725ae77Skettenis     break;
1783*11efff7fSkettenis 
1784*11efff7fSkettenis   case 55:
1785*11efff7fSkettenis #line 461 "c-exp.y"
1786b725ae77Skettenis     { write_exp_elt_opcode (BINOP_ASSIGN); }
1787b725ae77Skettenis     break;
1788*11efff7fSkettenis 
1789*11efff7fSkettenis   case 56:
1790*11efff7fSkettenis #line 465 "c-exp.y"
1791b725ae77Skettenis     { write_exp_elt_opcode (BINOP_ASSIGN_MODIFY);
1792b725ae77Skettenis 			  write_exp_elt_opcode (yyvsp[-1].opcode);
1793b725ae77Skettenis 			  write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); }
1794b725ae77Skettenis     break;
1795*11efff7fSkettenis 
1796*11efff7fSkettenis   case 57:
1797*11efff7fSkettenis #line 471 "c-exp.y"
1798b725ae77Skettenis     { write_exp_elt_opcode (OP_LONG);
1799b725ae77Skettenis 			  write_exp_elt_type (yyvsp[0].typed_val_int.type);
1800b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST)(yyvsp[0].typed_val_int.val));
1801b725ae77Skettenis 			  write_exp_elt_opcode (OP_LONG); }
1802b725ae77Skettenis     break;
1803*11efff7fSkettenis 
1804*11efff7fSkettenis   case 58:
1805*11efff7fSkettenis #line 478 "c-exp.y"
1806b725ae77Skettenis     { YYSTYPE val;
1807b725ae77Skettenis 			  parse_number (yyvsp[0].ssym.stoken.ptr, yyvsp[0].ssym.stoken.length, 0, &val);
1808b725ae77Skettenis 			  write_exp_elt_opcode (OP_LONG);
1809b725ae77Skettenis 			  write_exp_elt_type (val.typed_val_int.type);
1810b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST)val.typed_val_int.val);
1811b725ae77Skettenis 			  write_exp_elt_opcode (OP_LONG);
1812b725ae77Skettenis 			}
1813b725ae77Skettenis     break;
1814*11efff7fSkettenis 
1815*11efff7fSkettenis   case 59:
1816*11efff7fSkettenis #line 489 "c-exp.y"
1817b725ae77Skettenis     { write_exp_elt_opcode (OP_DOUBLE);
1818b725ae77Skettenis 			  write_exp_elt_type (yyvsp[0].typed_val_float.type);
1819b725ae77Skettenis 			  write_exp_elt_dblcst (yyvsp[0].typed_val_float.dval);
1820b725ae77Skettenis 			  write_exp_elt_opcode (OP_DOUBLE); }
1821b725ae77Skettenis     break;
1822*11efff7fSkettenis 
1823*11efff7fSkettenis   case 62:
1824*11efff7fSkettenis #line 503 "c-exp.y"
1825b725ae77Skettenis     { write_exp_elt_opcode (OP_LONG);
1826*11efff7fSkettenis 			  write_exp_elt_type (builtin_type (current_gdbarch)->builtin_int);
1827b725ae77Skettenis 			  CHECK_TYPEDEF (yyvsp[-1].tval);
1828b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST) TYPE_LENGTH (yyvsp[-1].tval));
1829b725ae77Skettenis 			  write_exp_elt_opcode (OP_LONG); }
1830b725ae77Skettenis     break;
1831*11efff7fSkettenis 
1832*11efff7fSkettenis   case 63:
1833*11efff7fSkettenis #line 511 "c-exp.y"
1834b725ae77Skettenis     { /* C strings are converted into array constants with
1835b725ae77Skettenis 			     an explicit null byte added at the end.  Thus
1836b725ae77Skettenis 			     the array upper bound is the string length.
1837b725ae77Skettenis 			     There is no such thing in C as a completely empty
1838b725ae77Skettenis 			     string. */
1839b725ae77Skettenis 			  char *sp = yyvsp[0].sval.ptr; int count = yyvsp[0].sval.length;
1840b725ae77Skettenis 			  while (count-- > 0)
1841b725ae77Skettenis 			    {
1842b725ae77Skettenis 			      write_exp_elt_opcode (OP_LONG);
1843*11efff7fSkettenis 			      write_exp_elt_type (builtin_type (current_gdbarch)->builtin_char);
1844b725ae77Skettenis 			      write_exp_elt_longcst ((LONGEST)(*sp++));
1845b725ae77Skettenis 			      write_exp_elt_opcode (OP_LONG);
1846b725ae77Skettenis 			    }
1847b725ae77Skettenis 			  write_exp_elt_opcode (OP_LONG);
1848*11efff7fSkettenis 			  write_exp_elt_type (builtin_type (current_gdbarch)->builtin_char);
1849b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST)'\0');
1850b725ae77Skettenis 			  write_exp_elt_opcode (OP_LONG);
1851b725ae77Skettenis 			  write_exp_elt_opcode (OP_ARRAY);
1852b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST) 0);
1853b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST) (yyvsp[0].sval.length));
1854b725ae77Skettenis 			  write_exp_elt_opcode (OP_ARRAY); }
1855b725ae77Skettenis     break;
1856*11efff7fSkettenis 
1857*11efff7fSkettenis   case 64:
1858*11efff7fSkettenis #line 536 "c-exp.y"
1859b725ae77Skettenis     { write_exp_elt_opcode (OP_LONG);
1860*11efff7fSkettenis                           write_exp_elt_type (builtin_type (current_gdbarch)->builtin_bool);
1861b725ae77Skettenis                           write_exp_elt_longcst ((LONGEST) 1);
1862b725ae77Skettenis                           write_exp_elt_opcode (OP_LONG); }
1863b725ae77Skettenis     break;
1864*11efff7fSkettenis 
1865*11efff7fSkettenis   case 65:
1866*11efff7fSkettenis #line 543 "c-exp.y"
1867b725ae77Skettenis     { write_exp_elt_opcode (OP_LONG);
1868*11efff7fSkettenis                           write_exp_elt_type (builtin_type (current_gdbarch)->builtin_bool);
1869b725ae77Skettenis                           write_exp_elt_longcst ((LONGEST) 0);
1870b725ae77Skettenis                           write_exp_elt_opcode (OP_LONG); }
1871b725ae77Skettenis     break;
1872*11efff7fSkettenis 
1873*11efff7fSkettenis   case 66:
1874*11efff7fSkettenis #line 552 "c-exp.y"
1875b725ae77Skettenis     {
1876b725ae77Skettenis 			  if (yyvsp[0].ssym.sym)
1877b725ae77Skettenis 			    yyval.bval = SYMBOL_BLOCK_VALUE (yyvsp[0].ssym.sym);
1878b725ae77Skettenis 			  else
1879b725ae77Skettenis 			    error ("No file or function \"%s\".",
1880b725ae77Skettenis 				   copy_name (yyvsp[0].ssym.stoken));
1881b725ae77Skettenis 			}
1882b725ae77Skettenis     break;
1883*11efff7fSkettenis 
1884*11efff7fSkettenis   case 67:
1885*11efff7fSkettenis #line 560 "c-exp.y"
1886b725ae77Skettenis     {
1887b725ae77Skettenis 			  yyval.bval = yyvsp[0].bval;
1888b725ae77Skettenis 			}
1889b725ae77Skettenis     break;
1890*11efff7fSkettenis 
1891*11efff7fSkettenis   case 68:
1892*11efff7fSkettenis #line 566 "c-exp.y"
1893b725ae77Skettenis     { struct symbol *tem
1894b725ae77Skettenis 			    = lookup_symbol (copy_name (yyvsp[0].sval), yyvsp[-2].bval,
1895b725ae77Skettenis 					     VAR_DOMAIN, (int *) NULL,
1896b725ae77Skettenis 					     (struct symtab **) NULL);
1897b725ae77Skettenis 			  if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
1898b725ae77Skettenis 			    error ("No function \"%s\" in specified context.",
1899b725ae77Skettenis 				   copy_name (yyvsp[0].sval));
1900b725ae77Skettenis 			  yyval.bval = SYMBOL_BLOCK_VALUE (tem); }
1901b725ae77Skettenis     break;
1902*11efff7fSkettenis 
1903*11efff7fSkettenis   case 69:
1904*11efff7fSkettenis #line 577 "c-exp.y"
1905b725ae77Skettenis     { struct symbol *sym;
1906b725ae77Skettenis 			  sym = lookup_symbol (copy_name (yyvsp[0].sval), yyvsp[-2].bval,
1907b725ae77Skettenis 					       VAR_DOMAIN, (int *) NULL,
1908b725ae77Skettenis 					       (struct symtab **) NULL);
1909b725ae77Skettenis 			  if (sym == 0)
1910b725ae77Skettenis 			    error ("No symbol \"%s\" in specified context.",
1911b725ae77Skettenis 				   copy_name (yyvsp[0].sval));
1912b725ae77Skettenis 
1913b725ae77Skettenis 			  write_exp_elt_opcode (OP_VAR_VALUE);
1914b725ae77Skettenis 			  /* block_found is set by lookup_symbol.  */
1915b725ae77Skettenis 			  write_exp_elt_block (block_found);
1916b725ae77Skettenis 			  write_exp_elt_sym (sym);
1917b725ae77Skettenis 			  write_exp_elt_opcode (OP_VAR_VALUE); }
1918b725ae77Skettenis     break;
1919*11efff7fSkettenis 
1920*11efff7fSkettenis   case 70:
1921*11efff7fSkettenis #line 593 "c-exp.y"
1922b725ae77Skettenis     {
1923b725ae77Skettenis 			  struct type *type = yyvsp[-2].tval;
1924b725ae77Skettenis 			  if (TYPE_CODE (type) != TYPE_CODE_STRUCT
1925b725ae77Skettenis 			      && TYPE_CODE (type) != TYPE_CODE_UNION
1926b725ae77Skettenis 			      && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
1927b725ae77Skettenis 			    error ("`%s' is not defined as an aggregate type.",
1928b725ae77Skettenis 				   TYPE_NAME (type));
1929b725ae77Skettenis 
1930b725ae77Skettenis 			  write_exp_elt_opcode (OP_SCOPE);
1931b725ae77Skettenis 			  write_exp_elt_type (type);
1932b725ae77Skettenis 			  write_exp_string (yyvsp[0].sval);
1933b725ae77Skettenis 			  write_exp_elt_opcode (OP_SCOPE);
1934b725ae77Skettenis 			}
1935b725ae77Skettenis     break;
1936*11efff7fSkettenis 
1937*11efff7fSkettenis   case 71:
1938*11efff7fSkettenis #line 607 "c-exp.y"
1939b725ae77Skettenis     {
1940b725ae77Skettenis 			  struct type *type = yyvsp[-3].tval;
1941b725ae77Skettenis 			  struct stoken tmp_token;
1942b725ae77Skettenis 			  if (TYPE_CODE (type) != TYPE_CODE_STRUCT
1943b725ae77Skettenis 			      && TYPE_CODE (type) != TYPE_CODE_UNION
1944b725ae77Skettenis 			      && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
1945b725ae77Skettenis 			    error ("`%s' is not defined as an aggregate type.",
1946b725ae77Skettenis 				   TYPE_NAME (type));
1947b725ae77Skettenis 
1948b725ae77Skettenis 			  tmp_token.ptr = (char*) alloca (yyvsp[0].sval.length + 2);
1949b725ae77Skettenis 			  tmp_token.length = yyvsp[0].sval.length + 1;
1950b725ae77Skettenis 			  tmp_token.ptr[0] = '~';
1951b725ae77Skettenis 			  memcpy (tmp_token.ptr+1, yyvsp[0].sval.ptr, yyvsp[0].sval.length);
1952b725ae77Skettenis 			  tmp_token.ptr[tmp_token.length] = 0;
1953b725ae77Skettenis 
1954b725ae77Skettenis 			  /* Check for valid destructor name.  */
1955b725ae77Skettenis 			  destructor_name_p (tmp_token.ptr, type);
1956b725ae77Skettenis 			  write_exp_elt_opcode (OP_SCOPE);
1957b725ae77Skettenis 			  write_exp_elt_type (type);
1958b725ae77Skettenis 			  write_exp_string (tmp_token);
1959b725ae77Skettenis 			  write_exp_elt_opcode (OP_SCOPE);
1960b725ae77Skettenis 			}
1961b725ae77Skettenis     break;
1962*11efff7fSkettenis 
1963*11efff7fSkettenis   case 73:
1964*11efff7fSkettenis #line 633 "c-exp.y"
1965b725ae77Skettenis     {
1966b725ae77Skettenis 			  char *name = copy_name (yyvsp[0].sval);
1967b725ae77Skettenis 			  struct symbol *sym;
1968b725ae77Skettenis 			  struct minimal_symbol *msymbol;
1969b725ae77Skettenis 
1970b725ae77Skettenis 			  sym =
1971b725ae77Skettenis 			    lookup_symbol (name, (const struct block *) NULL,
1972b725ae77Skettenis 					   VAR_DOMAIN, (int *) NULL,
1973b725ae77Skettenis 					   (struct symtab **) NULL);
1974b725ae77Skettenis 			  if (sym)
1975b725ae77Skettenis 			    {
1976b725ae77Skettenis 			      write_exp_elt_opcode (OP_VAR_VALUE);
1977b725ae77Skettenis 			      write_exp_elt_block (NULL);
1978b725ae77Skettenis 			      write_exp_elt_sym (sym);
1979b725ae77Skettenis 			      write_exp_elt_opcode (OP_VAR_VALUE);
1980b725ae77Skettenis 			      break;
1981b725ae77Skettenis 			    }
1982b725ae77Skettenis 
1983b725ae77Skettenis 			  msymbol = lookup_minimal_symbol (name, NULL, NULL);
1984b725ae77Skettenis 			  if (msymbol != NULL)
1985b725ae77Skettenis 			    {
1986b725ae77Skettenis 			      write_exp_msymbol (msymbol,
1987*11efff7fSkettenis 						 lookup_function_type (builtin_type (current_gdbarch)->builtin_int),
1988*11efff7fSkettenis 						 builtin_type (current_gdbarch)->builtin_int);
1989b725ae77Skettenis 			    }
1990b725ae77Skettenis 			  else
1991b725ae77Skettenis 			    if (!have_full_symbols () && !have_partial_symbols ())
1992b725ae77Skettenis 			      error ("No symbol table is loaded.  Use the \"file\" command.");
1993b725ae77Skettenis 			    else
1994b725ae77Skettenis 			      error ("No symbol \"%s\" in current context.", name);
1995b725ae77Skettenis 			}
1996b725ae77Skettenis     break;
1997*11efff7fSkettenis 
1998*11efff7fSkettenis   case 74:
1999*11efff7fSkettenis #line 667 "c-exp.y"
2000b725ae77Skettenis     { struct symbol *sym = yyvsp[0].ssym.sym;
2001b725ae77Skettenis 
2002b725ae77Skettenis 			  if (sym)
2003b725ae77Skettenis 			    {
2004b725ae77Skettenis 			      if (symbol_read_needs_frame (sym))
2005b725ae77Skettenis 				{
2006b725ae77Skettenis 				  if (innermost_block == 0 ||
2007b725ae77Skettenis 				      contained_in (block_found,
2008b725ae77Skettenis 						    innermost_block))
2009b725ae77Skettenis 				    innermost_block = block_found;
2010b725ae77Skettenis 				}
2011b725ae77Skettenis 
2012b725ae77Skettenis 			      write_exp_elt_opcode (OP_VAR_VALUE);
2013b725ae77Skettenis 			      /* We want to use the selected frame, not
2014b725ae77Skettenis 				 another more inner frame which happens to
2015b725ae77Skettenis 				 be in the same block.  */
2016b725ae77Skettenis 			      write_exp_elt_block (NULL);
2017b725ae77Skettenis 			      write_exp_elt_sym (sym);
2018b725ae77Skettenis 			      write_exp_elt_opcode (OP_VAR_VALUE);
2019b725ae77Skettenis 			    }
2020b725ae77Skettenis 			  else if (yyvsp[0].ssym.is_a_field_of_this)
2021b725ae77Skettenis 			    {
2022b725ae77Skettenis 			      /* C++: it hangs off of `this'.  Must
2023b725ae77Skettenis 			         not inadvertently convert from a method call
2024b725ae77Skettenis 				 to data ref.  */
2025b725ae77Skettenis 			      if (innermost_block == 0 ||
2026b725ae77Skettenis 				  contained_in (block_found, innermost_block))
2027b725ae77Skettenis 				innermost_block = block_found;
2028b725ae77Skettenis 			      write_exp_elt_opcode (OP_THIS);
2029b725ae77Skettenis 			      write_exp_elt_opcode (OP_THIS);
2030b725ae77Skettenis 			      write_exp_elt_opcode (STRUCTOP_PTR);
2031b725ae77Skettenis 			      write_exp_string (yyvsp[0].ssym.stoken);
2032b725ae77Skettenis 			      write_exp_elt_opcode (STRUCTOP_PTR);
2033b725ae77Skettenis 			    }
2034b725ae77Skettenis 			  else
2035b725ae77Skettenis 			    {
2036b725ae77Skettenis 			      struct minimal_symbol *msymbol;
2037b725ae77Skettenis 			      char *arg = copy_name (yyvsp[0].ssym.stoken);
2038b725ae77Skettenis 
2039b725ae77Skettenis 			      msymbol =
2040b725ae77Skettenis 				lookup_minimal_symbol (arg, NULL, NULL);
2041b725ae77Skettenis 			      if (msymbol != NULL)
2042b725ae77Skettenis 				{
2043b725ae77Skettenis 				  write_exp_msymbol (msymbol,
2044*11efff7fSkettenis 						     lookup_function_type (builtin_type (current_gdbarch)->builtin_int),
2045*11efff7fSkettenis 						     builtin_type (current_gdbarch)->builtin_int);
2046b725ae77Skettenis 				}
2047b725ae77Skettenis 			      else if (!have_full_symbols () && !have_partial_symbols ())
2048b725ae77Skettenis 				error ("No symbol table is loaded.  Use the \"file\" command.");
2049b725ae77Skettenis 			      else
2050b725ae77Skettenis 				error ("No symbol \"%s\" in current context.",
2051b725ae77Skettenis 				       copy_name (yyvsp[0].ssym.stoken));
2052b725ae77Skettenis 			    }
2053b725ae77Skettenis 			}
2054b725ae77Skettenis     break;
2055*11efff7fSkettenis 
2056*11efff7fSkettenis   case 75:
2057*11efff7fSkettenis #line 724 "c-exp.y"
2058b725ae77Skettenis     { push_type_address_space (copy_name (yyvsp[0].ssym.stoken));
2059b725ae77Skettenis 		  push_type (tp_space_identifier);
2060b725ae77Skettenis 		}
2061b725ae77Skettenis     break;
2062*11efff7fSkettenis 
2063*11efff7fSkettenis   case 83:
2064*11efff7fSkettenis #line 746 "c-exp.y"
2065b725ae77Skettenis     { push_type (tp_pointer); yyval.voidval = 0; }
2066b725ae77Skettenis     break;
2067*11efff7fSkettenis 
2068*11efff7fSkettenis   case 84:
2069*11efff7fSkettenis #line 748 "c-exp.y"
2070b725ae77Skettenis     { push_type (tp_pointer); yyval.voidval = yyvsp[0].voidval; }
2071b725ae77Skettenis     break;
2072*11efff7fSkettenis 
2073*11efff7fSkettenis   case 85:
2074*11efff7fSkettenis #line 750 "c-exp.y"
2075b725ae77Skettenis     { push_type (tp_reference); yyval.voidval = 0; }
2076b725ae77Skettenis     break;
2077*11efff7fSkettenis 
2078*11efff7fSkettenis   case 86:
2079*11efff7fSkettenis #line 752 "c-exp.y"
2080b725ae77Skettenis     { push_type (tp_reference); yyval.voidval = yyvsp[0].voidval; }
2081b725ae77Skettenis     break;
2082*11efff7fSkettenis 
2083*11efff7fSkettenis   case 88:
2084*11efff7fSkettenis #line 757 "c-exp.y"
2085b725ae77Skettenis     { yyval.voidval = yyvsp[-1].voidval; }
2086b725ae77Skettenis     break;
2087*11efff7fSkettenis 
2088*11efff7fSkettenis   case 89:
2089*11efff7fSkettenis #line 759 "c-exp.y"
2090b725ae77Skettenis     {
2091b725ae77Skettenis 			  push_type_int (yyvsp[0].lval);
2092b725ae77Skettenis 			  push_type (tp_array);
2093b725ae77Skettenis 			}
2094b725ae77Skettenis     break;
2095*11efff7fSkettenis 
2096*11efff7fSkettenis   case 90:
2097*11efff7fSkettenis #line 764 "c-exp.y"
2098b725ae77Skettenis     {
2099b725ae77Skettenis 			  push_type_int (yyvsp[0].lval);
2100b725ae77Skettenis 			  push_type (tp_array);
2101b725ae77Skettenis 			  yyval.voidval = 0;
2102b725ae77Skettenis 			}
2103b725ae77Skettenis     break;
2104*11efff7fSkettenis 
2105b725ae77Skettenis   case 91:
2106*11efff7fSkettenis #line 771 "c-exp.y"
2107b725ae77Skettenis     { push_type (tp_function); }
2108b725ae77Skettenis     break;
2109*11efff7fSkettenis 
2110b725ae77Skettenis   case 92:
2111*11efff7fSkettenis #line 773 "c-exp.y"
2112*11efff7fSkettenis     { push_type (tp_function); }
2113*11efff7fSkettenis     break;
2114*11efff7fSkettenis 
2115*11efff7fSkettenis   case 93:
2116*11efff7fSkettenis #line 777 "c-exp.y"
2117b725ae77Skettenis     { yyval.lval = -1; }
2118b725ae77Skettenis     break;
2119*11efff7fSkettenis 
2120*11efff7fSkettenis   case 94:
2121*11efff7fSkettenis #line 779 "c-exp.y"
2122b725ae77Skettenis     { yyval.lval = yyvsp[-1].typed_val_int.val; }
2123b725ae77Skettenis     break;
2124*11efff7fSkettenis 
2125*11efff7fSkettenis   case 95:
2126*11efff7fSkettenis #line 783 "c-exp.y"
2127b725ae77Skettenis     { yyval.voidval = 0; }
2128b725ae77Skettenis     break;
2129*11efff7fSkettenis 
2130*11efff7fSkettenis   case 96:
2131*11efff7fSkettenis #line 785 "c-exp.y"
2132b725ae77Skettenis     { free (yyvsp[-1].tvec); yyval.voidval = 0; }
2133b725ae77Skettenis     break;
2134*11efff7fSkettenis 
2135b725ae77Skettenis   case 98:
2136*11efff7fSkettenis #line 798 "c-exp.y"
2137*11efff7fSkettenis     { yyval.tval = lookup_member_type (builtin_type (current_gdbarch)->builtin_int, yyvsp[-2].tval); }
2138*11efff7fSkettenis     break;
2139*11efff7fSkettenis 
2140*11efff7fSkettenis   case 99:
2141*11efff7fSkettenis #line 803 "c-exp.y"
2142b725ae77Skettenis     { yyval.tval = yyvsp[0].tsym.type; }
2143b725ae77Skettenis     break;
2144*11efff7fSkettenis 
2145b725ae77Skettenis   case 100:
2146*11efff7fSkettenis #line 805 "c-exp.y"
2147*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_int; }
2148b725ae77Skettenis     break;
2149*11efff7fSkettenis 
2150b725ae77Skettenis   case 101:
2151*11efff7fSkettenis #line 807 "c-exp.y"
2152*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_long; }
2153b725ae77Skettenis     break;
2154*11efff7fSkettenis 
2155b725ae77Skettenis   case 102:
2156*11efff7fSkettenis #line 809 "c-exp.y"
2157*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_short; }
2158b725ae77Skettenis     break;
2159*11efff7fSkettenis 
2160b725ae77Skettenis   case 103:
2161*11efff7fSkettenis #line 811 "c-exp.y"
2162*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_long; }
2163b725ae77Skettenis     break;
2164*11efff7fSkettenis 
2165b725ae77Skettenis   case 104:
2166*11efff7fSkettenis #line 813 "c-exp.y"
2167*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_long; }
2168b725ae77Skettenis     break;
2169*11efff7fSkettenis 
2170b725ae77Skettenis   case 105:
2171*11efff7fSkettenis #line 815 "c-exp.y"
2172*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_long; }
2173b725ae77Skettenis     break;
2174*11efff7fSkettenis 
2175b725ae77Skettenis   case 106:
2176*11efff7fSkettenis #line 817 "c-exp.y"
2177*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_long; }
2178b725ae77Skettenis     break;
2179*11efff7fSkettenis 
2180b725ae77Skettenis   case 107:
2181*11efff7fSkettenis #line 819 "c-exp.y"
2182*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_long; }
2183b725ae77Skettenis     break;
2184*11efff7fSkettenis 
2185b725ae77Skettenis   case 108:
2186*11efff7fSkettenis #line 821 "c-exp.y"
2187*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_long; }
2188b725ae77Skettenis     break;
2189*11efff7fSkettenis 
2190b725ae77Skettenis   case 109:
2191*11efff7fSkettenis #line 823 "c-exp.y"
2192*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_long; }
2193b725ae77Skettenis     break;
2194*11efff7fSkettenis 
2195b725ae77Skettenis   case 110:
2196*11efff7fSkettenis #line 825 "c-exp.y"
2197*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_long_long; }
2198b725ae77Skettenis     break;
2199*11efff7fSkettenis 
2200b725ae77Skettenis   case 111:
2201*11efff7fSkettenis #line 827 "c-exp.y"
2202*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_long_long; }
2203b725ae77Skettenis     break;
2204*11efff7fSkettenis 
2205b725ae77Skettenis   case 112:
2206*11efff7fSkettenis #line 829 "c-exp.y"
2207*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_long_long; }
2208b725ae77Skettenis     break;
2209*11efff7fSkettenis 
2210b725ae77Skettenis   case 113:
2211*11efff7fSkettenis #line 831 "c-exp.y"
2212*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_long_long; }
2213b725ae77Skettenis     break;
2214*11efff7fSkettenis 
2215b725ae77Skettenis   case 114:
2216*11efff7fSkettenis #line 833 "c-exp.y"
2217*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_long_long; }
2218b725ae77Skettenis     break;
2219*11efff7fSkettenis 
2220b725ae77Skettenis   case 115:
2221*11efff7fSkettenis #line 835 "c-exp.y"
2222*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_long_long; }
2223b725ae77Skettenis     break;
2224*11efff7fSkettenis 
2225b725ae77Skettenis   case 116:
2226*11efff7fSkettenis #line 837 "c-exp.y"
2227*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_long_long; }
2228b725ae77Skettenis     break;
2229*11efff7fSkettenis 
2230b725ae77Skettenis   case 117:
2231*11efff7fSkettenis #line 839 "c-exp.y"
2232*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_long_long; }
2233b725ae77Skettenis     break;
2234*11efff7fSkettenis 
2235b725ae77Skettenis   case 118:
2236*11efff7fSkettenis #line 841 "c-exp.y"
2237*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_long_long; }
2238b725ae77Skettenis     break;
2239*11efff7fSkettenis 
2240b725ae77Skettenis   case 119:
2241*11efff7fSkettenis #line 843 "c-exp.y"
2242*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_long_long; }
2243b725ae77Skettenis     break;
2244*11efff7fSkettenis 
2245b725ae77Skettenis   case 120:
2246*11efff7fSkettenis #line 845 "c-exp.y"
2247*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_short; }
2248b725ae77Skettenis     break;
2249*11efff7fSkettenis 
2250b725ae77Skettenis   case 121:
2251*11efff7fSkettenis #line 847 "c-exp.y"
2252*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_short; }
2253b725ae77Skettenis     break;
2254*11efff7fSkettenis 
2255b725ae77Skettenis   case 122:
2256*11efff7fSkettenis #line 849 "c-exp.y"
2257*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_short; }
2258b725ae77Skettenis     break;
2259*11efff7fSkettenis 
2260b725ae77Skettenis   case 123:
2261*11efff7fSkettenis #line 851 "c-exp.y"
2262*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_short; }
2263b725ae77Skettenis     break;
2264*11efff7fSkettenis 
2265b725ae77Skettenis   case 124:
2266*11efff7fSkettenis #line 853 "c-exp.y"
2267*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_short; }
2268b725ae77Skettenis     break;
2269*11efff7fSkettenis 
2270b725ae77Skettenis   case 125:
2271*11efff7fSkettenis #line 855 "c-exp.y"
2272*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_short; }
2273b725ae77Skettenis     break;
2274*11efff7fSkettenis 
2275b725ae77Skettenis   case 126:
2276*11efff7fSkettenis #line 857 "c-exp.y"
2277*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_double; }
2278b725ae77Skettenis     break;
2279*11efff7fSkettenis 
2280b725ae77Skettenis   case 127:
2281*11efff7fSkettenis #line 859 "c-exp.y"
2282*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_long_double; }
2283*11efff7fSkettenis     break;
2284*11efff7fSkettenis 
2285*11efff7fSkettenis   case 128:
2286*11efff7fSkettenis #line 861 "c-exp.y"
2287*11efff7fSkettenis     { yyval.tval = lookup_struct (copy_name (yyvsp[0].sval),
2288*11efff7fSkettenis 					      expression_context_block); }
2289*11efff7fSkettenis     break;
2290*11efff7fSkettenis 
2291*11efff7fSkettenis   case 129:
2292b725ae77Skettenis #line 864 "c-exp.y"
2293b725ae77Skettenis     { yyval.tval = lookup_struct (copy_name (yyvsp[0].sval),
2294b725ae77Skettenis 					      expression_context_block); }
2295b725ae77Skettenis     break;
2296*11efff7fSkettenis 
2297*11efff7fSkettenis   case 130:
2298b725ae77Skettenis #line 867 "c-exp.y"
2299b725ae77Skettenis     { yyval.tval = lookup_union (copy_name (yyvsp[0].sval),
2300b725ae77Skettenis 					     expression_context_block); }
2301b725ae77Skettenis     break;
2302*11efff7fSkettenis 
2303*11efff7fSkettenis   case 131:
2304*11efff7fSkettenis #line 870 "c-exp.y"
2305b725ae77Skettenis     { yyval.tval = lookup_enum (copy_name (yyvsp[0].sval),
2306b725ae77Skettenis 					    expression_context_block); }
2307b725ae77Skettenis     break;
2308*11efff7fSkettenis 
2309*11efff7fSkettenis   case 132:
2310*11efff7fSkettenis #line 873 "c-exp.y"
2311b725ae77Skettenis     { yyval.tval = lookup_unsigned_typename (TYPE_NAME(yyvsp[0].tsym.type)); }
2312b725ae77Skettenis     break;
2313*11efff7fSkettenis 
2314b725ae77Skettenis   case 133:
2315*11efff7fSkettenis #line 875 "c-exp.y"
2316*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_int; }
2317*11efff7fSkettenis     break;
2318*11efff7fSkettenis 
2319*11efff7fSkettenis   case 134:
2320*11efff7fSkettenis #line 877 "c-exp.y"
2321b725ae77Skettenis     { yyval.tval = lookup_signed_typename (TYPE_NAME(yyvsp[0].tsym.type)); }
2322b725ae77Skettenis     break;
2323*11efff7fSkettenis 
2324b725ae77Skettenis   case 135:
2325*11efff7fSkettenis #line 879 "c-exp.y"
2326*11efff7fSkettenis     { yyval.tval = builtin_type (current_gdbarch)->builtin_int; }
2327*11efff7fSkettenis     break;
2328*11efff7fSkettenis 
2329*11efff7fSkettenis   case 136:
2330*11efff7fSkettenis #line 884 "c-exp.y"
2331b725ae77Skettenis     { yyval.tval = lookup_template_type(copy_name(yyvsp[-3].sval), yyvsp[-1].tval,
2332b725ae77Skettenis 						    expression_context_block);
2333b725ae77Skettenis 			}
2334b725ae77Skettenis     break;
2335*11efff7fSkettenis 
2336*11efff7fSkettenis   case 137:
2337*11efff7fSkettenis #line 888 "c-exp.y"
2338b725ae77Skettenis     { yyval.tval = follow_types (yyvsp[0].tval); }
2339b725ae77Skettenis     break;
2340*11efff7fSkettenis 
2341*11efff7fSkettenis   case 138:
2342*11efff7fSkettenis #line 890 "c-exp.y"
2343b725ae77Skettenis     { yyval.tval = follow_types (yyvsp[-1].tval); }
2344b725ae77Skettenis     break;
2345*11efff7fSkettenis 
2346*11efff7fSkettenis   case 140:
2347*11efff7fSkettenis #line 940 "c-exp.y"
2348b725ae77Skettenis     {
2349b725ae77Skettenis 		  struct type *type = yyvsp[-2].tval;
2350b725ae77Skettenis 		  struct type *new_type;
2351b725ae77Skettenis 		  char *ncopy = alloca (yyvsp[0].sval.length + 1);
2352b725ae77Skettenis 
2353b725ae77Skettenis 		  memcpy (ncopy, yyvsp[0].sval.ptr, yyvsp[0].sval.length);
2354b725ae77Skettenis 		  ncopy[yyvsp[0].sval.length] = '\0';
2355b725ae77Skettenis 
2356b725ae77Skettenis 		  if (TYPE_CODE (type) != TYPE_CODE_STRUCT
2357b725ae77Skettenis 		      && TYPE_CODE (type) != TYPE_CODE_UNION
2358b725ae77Skettenis 		      && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
2359b725ae77Skettenis 		    error ("`%s' is not defined as an aggregate type.",
2360b725ae77Skettenis 			   TYPE_NAME (type));
2361b725ae77Skettenis 
2362b725ae77Skettenis 		  new_type = cp_lookup_nested_type (type, ncopy,
2363b725ae77Skettenis 						    expression_context_block);
2364b725ae77Skettenis 		  if (new_type == NULL)
2365b725ae77Skettenis 		    error ("No type \"%s\" within class or namespace \"%s\".",
2366b725ae77Skettenis 			   ncopy, TYPE_NAME (type));
2367b725ae77Skettenis 
2368b725ae77Skettenis 		  yyval.tval = new_type;
2369b725ae77Skettenis 		}
2370b725ae77Skettenis     break;
2371*11efff7fSkettenis 
2372*11efff7fSkettenis   case 142:
2373*11efff7fSkettenis #line 966 "c-exp.y"
2374b725ae77Skettenis     {
2375b725ae77Skettenis 		  yyval.tsym.stoken.ptr = "int";
2376b725ae77Skettenis 		  yyval.tsym.stoken.length = 3;
2377*11efff7fSkettenis 		  yyval.tsym.type = builtin_type (current_gdbarch)->builtin_int;
2378b725ae77Skettenis 		}
2379b725ae77Skettenis     break;
2380*11efff7fSkettenis 
2381*11efff7fSkettenis   case 143:
2382*11efff7fSkettenis #line 972 "c-exp.y"
2383b725ae77Skettenis     {
2384b725ae77Skettenis 		  yyval.tsym.stoken.ptr = "long";
2385b725ae77Skettenis 		  yyval.tsym.stoken.length = 4;
2386*11efff7fSkettenis 		  yyval.tsym.type = builtin_type (current_gdbarch)->builtin_long;
2387b725ae77Skettenis 		}
2388b725ae77Skettenis     break;
2389*11efff7fSkettenis 
2390*11efff7fSkettenis   case 144:
2391*11efff7fSkettenis #line 978 "c-exp.y"
2392b725ae77Skettenis     {
2393b725ae77Skettenis 		  yyval.tsym.stoken.ptr = "short";
2394b725ae77Skettenis 		  yyval.tsym.stoken.length = 5;
2395*11efff7fSkettenis 		  yyval.tsym.type = builtin_type (current_gdbarch)->builtin_short;
2396b725ae77Skettenis 		}
2397b725ae77Skettenis     break;
2398*11efff7fSkettenis 
2399*11efff7fSkettenis   case 145:
2400*11efff7fSkettenis #line 987 "c-exp.y"
2401b725ae77Skettenis     { yyval.tvec = (struct type **) xmalloc (sizeof (struct type *) * 2);
2402b725ae77Skettenis 		  yyval.ivec[0] = 1;	/* Number of types in vector */
2403b725ae77Skettenis 		  yyval.tvec[1] = yyvsp[0].tval;
2404b725ae77Skettenis 		}
2405b725ae77Skettenis     break;
2406*11efff7fSkettenis 
2407*11efff7fSkettenis   case 146:
2408*11efff7fSkettenis #line 992 "c-exp.y"
2409b725ae77Skettenis     { int len = sizeof (struct type *) * (++(yyvsp[-2].ivec[0]) + 1);
2410b725ae77Skettenis 		  yyval.tvec = (struct type **) xrealloc ((char *) yyvsp[-2].tvec, len);
2411b725ae77Skettenis 		  yyval.tvec[yyval.ivec[0]] = yyvsp[0].tval;
2412b725ae77Skettenis 		}
2413b725ae77Skettenis     break;
2414*11efff7fSkettenis 
2415*11efff7fSkettenis   case 148:
2416*11efff7fSkettenis #line 1000 "c-exp.y"
2417b725ae77Skettenis     { yyval.tval = follow_types (yyvsp[-3].tval); }
2418b725ae77Skettenis     break;
2419*11efff7fSkettenis 
2420*11efff7fSkettenis   case 151:
2421*11efff7fSkettenis #line 1008 "c-exp.y"
2422b725ae77Skettenis     { push_type (tp_const);
2423b725ae77Skettenis 			  push_type (tp_volatile);
2424b725ae77Skettenis 			}
2425b725ae77Skettenis     break;
2426*11efff7fSkettenis 
2427*11efff7fSkettenis   case 152:
2428*11efff7fSkettenis #line 1012 "c-exp.y"
2429b725ae77Skettenis     { push_type (tp_const); }
2430b725ae77Skettenis     break;
2431*11efff7fSkettenis 
2432*11efff7fSkettenis   case 153:
2433*11efff7fSkettenis #line 1014 "c-exp.y"
2434b725ae77Skettenis     { push_type (tp_volatile); }
2435b725ae77Skettenis     break;
2436*11efff7fSkettenis 
2437*11efff7fSkettenis   case 154:
2438*11efff7fSkettenis #line 1017 "c-exp.y"
2439*11efff7fSkettenis     { yyval.sval = yyvsp[0].ssym.stoken; }
2440*11efff7fSkettenis     break;
2441*11efff7fSkettenis 
2442*11efff7fSkettenis   case 155:
2443*11efff7fSkettenis #line 1018 "c-exp.y"
2444*11efff7fSkettenis     { yyval.sval = yyvsp[0].ssym.stoken; }
2445*11efff7fSkettenis     break;
2446*11efff7fSkettenis 
2447*11efff7fSkettenis   case 156:
2448*11efff7fSkettenis #line 1019 "c-exp.y"
2449*11efff7fSkettenis     { yyval.sval = yyvsp[0].tsym.stoken; }
2450*11efff7fSkettenis     break;
2451*11efff7fSkettenis 
2452*11efff7fSkettenis   case 157:
2453b725ae77Skettenis #line 1020 "c-exp.y"
2454b725ae77Skettenis     { yyval.sval = yyvsp[0].ssym.stoken; }
2455b725ae77Skettenis     break;
2456*11efff7fSkettenis 
2457*11efff7fSkettenis 
2458b725ae77Skettenis     }
2459b725ae77Skettenis 
2460*11efff7fSkettenis /* Line 1000 of yacc.c.  */
2461b725ae77Skettenis 
2462b725ae77Skettenis   yyvsp -= yylen;
2463b725ae77Skettenis   yyssp -= yylen;
2464b725ae77Skettenis 
2465*11efff7fSkettenis 
2466*11efff7fSkettenis   YY_STACK_PRINT (yyss, yyssp);
2467b725ae77Skettenis 
2468b725ae77Skettenis   *++yyvsp = yyval;
2469*11efff7fSkettenis 
2470b725ae77Skettenis 
2471b725ae77Skettenis   /* Now `shift' the result of the reduction.  Determine what state
2472b725ae77Skettenis      that goes to, based on the state we popped back to and the rule
2473b725ae77Skettenis      number reduced by.  */
2474b725ae77Skettenis 
2475b725ae77Skettenis   yyn = yyr1[yyn];
2476b725ae77Skettenis 
2477*11efff7fSkettenis   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
2478*11efff7fSkettenis   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
2479b725ae77Skettenis     yystate = yytable[yystate];
2480b725ae77Skettenis   else
2481*11efff7fSkettenis     yystate = yydefgoto[yyn - YYNTOKENS];
2482b725ae77Skettenis 
2483b725ae77Skettenis   goto yynewstate;
2484b725ae77Skettenis 
2485b725ae77Skettenis 
2486b725ae77Skettenis /*------------------------------------.
2487b725ae77Skettenis | yyerrlab -- here on detecting error |
2488b725ae77Skettenis `------------------------------------*/
2489b725ae77Skettenis yyerrlab:
2490b725ae77Skettenis   /* If not already recovering from an error, report this error.  */
2491b725ae77Skettenis   if (!yyerrstatus)
2492b725ae77Skettenis     {
2493b725ae77Skettenis       ++yynerrs;
2494*11efff7fSkettenis #if YYERROR_VERBOSE
2495b725ae77Skettenis       yyn = yypact[yystate];
2496b725ae77Skettenis 
2497*11efff7fSkettenis       if (YYPACT_NINF < yyn && yyn < YYLAST)
2498b725ae77Skettenis 	{
2499b725ae77Skettenis 	  YYSIZE_T yysize = 0;
2500*11efff7fSkettenis 	  int yytype = YYTRANSLATE (yychar);
2501*11efff7fSkettenis 	  const char* yyprefix;
2502b725ae77Skettenis 	  char *yymsg;
2503*11efff7fSkettenis 	  int yyx;
2504b725ae77Skettenis 
2505b725ae77Skettenis 	  /* Start YYX at -YYN if negative to avoid negative indexes in
2506b725ae77Skettenis 	     YYCHECK.  */
2507*11efff7fSkettenis 	  int yyxbegin = yyn < 0 ? -yyn : 0;
2508*11efff7fSkettenis 
2509*11efff7fSkettenis 	  /* Stay within bounds of both yycheck and yytname.  */
2510*11efff7fSkettenis 	  int yychecklim = YYLAST - yyn;
2511*11efff7fSkettenis 	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
2512*11efff7fSkettenis 	  int yycount = 0;
2513*11efff7fSkettenis 
2514*11efff7fSkettenis 	  yyprefix = ", expecting ";
2515*11efff7fSkettenis 	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
2516*11efff7fSkettenis 	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
2517*11efff7fSkettenis 	      {
2518*11efff7fSkettenis 		yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
2519*11efff7fSkettenis 		yycount += 1;
2520*11efff7fSkettenis 		if (yycount == 5)
2521*11efff7fSkettenis 		  {
2522*11efff7fSkettenis 		    yysize = 0;
2523*11efff7fSkettenis 		    break;
2524*11efff7fSkettenis 		  }
2525*11efff7fSkettenis 	      }
2526*11efff7fSkettenis 	  yysize += (sizeof ("syntax error, unexpected ")
2527*11efff7fSkettenis 		     + yystrlen (yytname[yytype]));
2528b725ae77Skettenis 	  yymsg = (char *) YYSTACK_ALLOC (yysize);
2529b725ae77Skettenis 	  if (yymsg != 0)
2530b725ae77Skettenis 	    {
2531*11efff7fSkettenis 	      char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
2532*11efff7fSkettenis 	      yyp = yystpcpy (yyp, yytname[yytype]);
2533b725ae77Skettenis 
2534b725ae77Skettenis 	      if (yycount < 5)
2535b725ae77Skettenis 		{
2536*11efff7fSkettenis 		  yyprefix = ", expecting ";
2537*11efff7fSkettenis 		  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
2538*11efff7fSkettenis 		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
2539b725ae77Skettenis 		      {
2540*11efff7fSkettenis 			yyp = yystpcpy (yyp, yyprefix);
2541b725ae77Skettenis 			yyp = yystpcpy (yyp, yytname[yyx]);
2542*11efff7fSkettenis 			yyprefix = " or ";
2543b725ae77Skettenis 		      }
2544b725ae77Skettenis 		}
2545b725ae77Skettenis 	      yyerror (yymsg);
2546b725ae77Skettenis 	      YYSTACK_FREE (yymsg);
2547b725ae77Skettenis 	    }
2548b725ae77Skettenis 	  else
2549*11efff7fSkettenis 	    yyerror ("syntax error; also virtual memory exhausted");
2550b725ae77Skettenis 	}
2551b725ae77Skettenis       else
2552*11efff7fSkettenis #endif /* YYERROR_VERBOSE */
2553*11efff7fSkettenis 	yyerror ("syntax error");
2554b725ae77Skettenis     }
2555b725ae77Skettenis 
2556b725ae77Skettenis 
2557*11efff7fSkettenis 
2558b725ae77Skettenis   if (yyerrstatus == 3)
2559b725ae77Skettenis     {
2560b725ae77Skettenis       /* If just tried and failed to reuse lookahead token after an
2561b725ae77Skettenis 	 error, discard it.  */
2562b725ae77Skettenis 
2563*11efff7fSkettenis       if (yychar <= YYEOF)
2564*11efff7fSkettenis         {
2565*11efff7fSkettenis           /* If at end of input, pop the error token,
2566*11efff7fSkettenis 	     then the rest of the stack, then return failure.  */
2567b725ae77Skettenis 	  if (yychar == YYEOF)
2568*11efff7fSkettenis 	     for (;;)
2569*11efff7fSkettenis 	       {
2570*11efff7fSkettenis 		 YYPOPSTACK;
2571*11efff7fSkettenis 		 if (yyssp == yyss)
2572b725ae77Skettenis 		   YYABORT;
2573*11efff7fSkettenis 		 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
2574*11efff7fSkettenis 		 yydestruct (yystos[*yyssp], yyvsp);
2575*11efff7fSkettenis 	       }
2576*11efff7fSkettenis         }
2577*11efff7fSkettenis       else
2578*11efff7fSkettenis 	{
2579*11efff7fSkettenis 	  YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
2580*11efff7fSkettenis 	  yydestruct (yytoken, &yylval);
2581b725ae77Skettenis 	  yychar = YYEMPTY;
2582*11efff7fSkettenis 
2583*11efff7fSkettenis 	}
2584b725ae77Skettenis     }
2585b725ae77Skettenis 
2586b725ae77Skettenis   /* Else will try to reuse lookahead token after shifting the error
2587b725ae77Skettenis      token.  */
2588*11efff7fSkettenis   goto yyerrlab1;
2589b725ae77Skettenis 
2590b725ae77Skettenis 
2591*11efff7fSkettenis /*---------------------------------------------------.
2592*11efff7fSkettenis | yyerrorlab -- error raised explicitly by YYERROR.  |
2593*11efff7fSkettenis `---------------------------------------------------*/
2594*11efff7fSkettenis yyerrorlab:
2595b725ae77Skettenis 
2596*11efff7fSkettenis #ifdef __GNUC__
2597*11efff7fSkettenis   /* Pacify GCC when the user code never invokes YYERROR and the label
2598*11efff7fSkettenis      yyerrorlab therefore never appears in user code.  */
2599*11efff7fSkettenis   if (0)
2600*11efff7fSkettenis      goto yyerrorlab;
2601b725ae77Skettenis #endif
2602b725ae77Skettenis 
2603*11efff7fSkettenis   yyvsp -= yylen;
2604*11efff7fSkettenis   yyssp -= yylen;
2605*11efff7fSkettenis   yystate = *yyssp;
2606*11efff7fSkettenis   goto yyerrlab1;
2607b725ae77Skettenis 
2608*11efff7fSkettenis 
2609*11efff7fSkettenis /*-------------------------------------------------------------.
2610*11efff7fSkettenis | yyerrlab1 -- common code for both syntax error and YYERROR.  |
2611*11efff7fSkettenis `-------------------------------------------------------------*/
2612*11efff7fSkettenis yyerrlab1:
2613*11efff7fSkettenis   yyerrstatus = 3;	/* Each real token shifted decrements this.  */
2614*11efff7fSkettenis 
2615*11efff7fSkettenis   for (;;)
2616*11efff7fSkettenis     {
2617*11efff7fSkettenis       yyn = yypact[yystate];
2618*11efff7fSkettenis       if (yyn != YYPACT_NINF)
2619*11efff7fSkettenis 	{
2620*11efff7fSkettenis 	  yyn += YYTERROR;
2621*11efff7fSkettenis 	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
2622*11efff7fSkettenis 	    {
2623*11efff7fSkettenis 	      yyn = yytable[yyn];
2624*11efff7fSkettenis 	      if (0 < yyn)
2625*11efff7fSkettenis 		break;
2626*11efff7fSkettenis 	    }
2627*11efff7fSkettenis 	}
2628*11efff7fSkettenis 
2629*11efff7fSkettenis       /* Pop the current state because it cannot handle the error token.  */
2630b725ae77Skettenis       if (yyssp == yyss)
2631b725ae77Skettenis 	YYABORT;
2632b725ae77Skettenis 
2633*11efff7fSkettenis       YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
2634*11efff7fSkettenis       yydestruct (yystos[yystate], yyvsp);
2635*11efff7fSkettenis       YYPOPSTACK;
2636*11efff7fSkettenis       yystate = *yyssp;
2637*11efff7fSkettenis       YY_STACK_PRINT (yyss, yyssp);
2638b725ae77Skettenis     }
2639b725ae77Skettenis 
2640b725ae77Skettenis   if (yyn == YYFINAL)
2641b725ae77Skettenis     YYACCEPT;
2642b725ae77Skettenis 
2643b725ae77Skettenis   YYDPRINTF ((stderr, "Shifting error token, "));
2644b725ae77Skettenis 
2645b725ae77Skettenis   *++yyvsp = yylval;
2646*11efff7fSkettenis 
2647b725ae77Skettenis 
2648b725ae77Skettenis   yystate = yyn;
2649b725ae77Skettenis   goto yynewstate;
2650b725ae77Skettenis 
2651b725ae77Skettenis 
2652b725ae77Skettenis /*-------------------------------------.
2653b725ae77Skettenis | yyacceptlab -- YYACCEPT comes here.  |
2654b725ae77Skettenis `-------------------------------------*/
2655b725ae77Skettenis yyacceptlab:
2656b725ae77Skettenis   yyresult = 0;
2657b725ae77Skettenis   goto yyreturn;
2658b725ae77Skettenis 
2659b725ae77Skettenis /*-----------------------------------.
2660b725ae77Skettenis | yyabortlab -- YYABORT comes here.  |
2661b725ae77Skettenis `-----------------------------------*/
2662b725ae77Skettenis yyabortlab:
2663b725ae77Skettenis   yyresult = 1;
2664b725ae77Skettenis   goto yyreturn;
2665b725ae77Skettenis 
2666*11efff7fSkettenis #ifndef yyoverflow
2667*11efff7fSkettenis /*----------------------------------------------.
2668*11efff7fSkettenis | yyoverflowlab -- parser overflow comes here.  |
2669*11efff7fSkettenis `----------------------------------------------*/
2670b725ae77Skettenis yyoverflowlab:
2671b725ae77Skettenis   yyerror ("parser stack overflow");
2672b725ae77Skettenis   yyresult = 2;
2673b725ae77Skettenis   /* Fall through.  */
2674*11efff7fSkettenis #endif
2675b725ae77Skettenis 
2676b725ae77Skettenis yyreturn:
2677b725ae77Skettenis #ifndef yyoverflow
2678b725ae77Skettenis   if (yyss != yyssa)
2679b725ae77Skettenis     YYSTACK_FREE (yyss);
2680b725ae77Skettenis #endif
2681b725ae77Skettenis   return yyresult;
2682b725ae77Skettenis }
2683*11efff7fSkettenis 
2684*11efff7fSkettenis 
2685*11efff7fSkettenis #line 1034 "c-exp.y"
2686b725ae77Skettenis 
2687b725ae77Skettenis 
2688b725ae77Skettenis /* Take care of parsing a number (anything that starts with a digit).
2689b725ae77Skettenis    Set yylval and return the token type; update lexptr.
2690b725ae77Skettenis    LEN is the number of characters in it.  */
2691b725ae77Skettenis 
2692b725ae77Skettenis /*** Needs some error checking for the float case ***/
2693b725ae77Skettenis 
2694b725ae77Skettenis static int
parse_number(p,len,parsed_float,putithere)2695b725ae77Skettenis parse_number (p, len, parsed_float, putithere)
2696b725ae77Skettenis      char *p;
2697b725ae77Skettenis      int len;
2698b725ae77Skettenis      int parsed_float;
2699b725ae77Skettenis      YYSTYPE *putithere;
2700b725ae77Skettenis {
2701b725ae77Skettenis   /* FIXME: Shouldn't these be unsigned?  We don't deal with negative values
2702b725ae77Skettenis      here, and we do kind of silly things like cast to unsigned.  */
2703b725ae77Skettenis   LONGEST n = 0;
2704b725ae77Skettenis   LONGEST prevn = 0;
2705b725ae77Skettenis   ULONGEST un;
2706b725ae77Skettenis 
2707b725ae77Skettenis   int i = 0;
2708b725ae77Skettenis   int c;
2709b725ae77Skettenis   int base = input_radix;
2710b725ae77Skettenis   int unsigned_p = 0;
2711b725ae77Skettenis 
2712b725ae77Skettenis   /* Number of "L" suffixes encountered.  */
2713b725ae77Skettenis   int long_p = 0;
2714b725ae77Skettenis 
2715b725ae77Skettenis   /* We have found a "L" or "U" suffix.  */
2716b725ae77Skettenis   int found_suffix = 0;
2717b725ae77Skettenis 
2718b725ae77Skettenis   ULONGEST high_bit;
2719b725ae77Skettenis   struct type *signed_type;
2720b725ae77Skettenis   struct type *unsigned_type;
2721b725ae77Skettenis 
2722b725ae77Skettenis   if (parsed_float)
2723b725ae77Skettenis     {
2724b725ae77Skettenis       /* It's a float since it contains a point or an exponent.  */
2725b725ae77Skettenis       char c;
2726b725ae77Skettenis       int num = 0;	/* number of tokens scanned by scanf */
2727b725ae77Skettenis       char saved_char = p[len];
2728b725ae77Skettenis 
2729b725ae77Skettenis       p[len] = 0;	/* null-terminate the token */
2730b725ae77Skettenis       if (sizeof (putithere->typed_val_float.dval) <= sizeof (float))
2731b725ae77Skettenis 	num = sscanf (p, "%g%c", (float *) &putithere->typed_val_float.dval,&c);
2732b725ae77Skettenis       else if (sizeof (putithere->typed_val_float.dval) <= sizeof (double))
2733b725ae77Skettenis 	num = sscanf (p, "%lg%c", (double *) &putithere->typed_val_float.dval,&c);
2734b725ae77Skettenis       else
2735b725ae77Skettenis 	{
2736b725ae77Skettenis #ifdef SCANF_HAS_LONG_DOUBLE
2737b725ae77Skettenis 	  num = sscanf (p, "%Lg%c", &putithere->typed_val_float.dval,&c);
2738b725ae77Skettenis #else
2739b725ae77Skettenis 	  /* Scan it into a double, then assign it to the long double.
2740b725ae77Skettenis 	     This at least wins with values representable in the range
2741b725ae77Skettenis 	     of doubles. */
2742b725ae77Skettenis 	  double temp;
2743b725ae77Skettenis 	  num = sscanf (p, "%lg%c", &temp,&c);
2744b725ae77Skettenis 	  putithere->typed_val_float.dval = temp;
2745b725ae77Skettenis #endif
2746b725ae77Skettenis 	}
2747b725ae77Skettenis       p[len] = saved_char;	/* restore the input stream */
2748b725ae77Skettenis       if (num != 1) 		/* check scanf found ONLY a float ... */
2749b725ae77Skettenis 	return ERROR;
2750b725ae77Skettenis       /* See if it has `f' or `l' suffix (float or long double).  */
2751b725ae77Skettenis 
2752b725ae77Skettenis       c = tolower (p[len - 1]);
2753b725ae77Skettenis 
2754b725ae77Skettenis       if (c == 'f')
2755*11efff7fSkettenis 	putithere->typed_val_float.type = builtin_type (current_gdbarch)->builtin_float;
2756b725ae77Skettenis       else if (c == 'l')
2757*11efff7fSkettenis 	putithere->typed_val_float.type = builtin_type (current_gdbarch)->builtin_long_double;
2758b725ae77Skettenis       else if (isdigit (c) || c == '.')
2759*11efff7fSkettenis 	putithere->typed_val_float.type = builtin_type (current_gdbarch)->builtin_double;
2760b725ae77Skettenis       else
2761b725ae77Skettenis 	return ERROR;
2762b725ae77Skettenis 
2763b725ae77Skettenis       return FLOAT;
2764b725ae77Skettenis     }
2765b725ae77Skettenis 
2766b725ae77Skettenis   /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
2767b725ae77Skettenis   if (p[0] == '0')
2768b725ae77Skettenis     switch (p[1])
2769b725ae77Skettenis       {
2770b725ae77Skettenis       case 'x':
2771b725ae77Skettenis       case 'X':
2772b725ae77Skettenis 	if (len >= 3)
2773b725ae77Skettenis 	  {
2774b725ae77Skettenis 	    p += 2;
2775b725ae77Skettenis 	    base = 16;
2776b725ae77Skettenis 	    len -= 2;
2777b725ae77Skettenis 	  }
2778b725ae77Skettenis 	break;
2779b725ae77Skettenis 
2780b725ae77Skettenis       case 't':
2781b725ae77Skettenis       case 'T':
2782b725ae77Skettenis       case 'd':
2783b725ae77Skettenis       case 'D':
2784b725ae77Skettenis 	if (len >= 3)
2785b725ae77Skettenis 	  {
2786b725ae77Skettenis 	    p += 2;
2787b725ae77Skettenis 	    base = 10;
2788b725ae77Skettenis 	    len -= 2;
2789b725ae77Skettenis 	  }
2790b725ae77Skettenis 	break;
2791b725ae77Skettenis 
2792b725ae77Skettenis       default:
2793b725ae77Skettenis 	base = 8;
2794b725ae77Skettenis 	break;
2795b725ae77Skettenis       }
2796b725ae77Skettenis 
2797b725ae77Skettenis   while (len-- > 0)
2798b725ae77Skettenis     {
2799b725ae77Skettenis       c = *p++;
2800b725ae77Skettenis       if (c >= 'A' && c <= 'Z')
2801b725ae77Skettenis 	c += 'a' - 'A';
2802b725ae77Skettenis       if (c != 'l' && c != 'u')
2803b725ae77Skettenis 	n *= base;
2804b725ae77Skettenis       if (c >= '0' && c <= '9')
2805b725ae77Skettenis 	{
2806b725ae77Skettenis 	  if (found_suffix)
2807b725ae77Skettenis 	    return ERROR;
2808b725ae77Skettenis 	  n += i = c - '0';
2809b725ae77Skettenis 	}
2810b725ae77Skettenis       else
2811b725ae77Skettenis 	{
2812b725ae77Skettenis 	  if (base > 10 && c >= 'a' && c <= 'f')
2813b725ae77Skettenis 	    {
2814b725ae77Skettenis 	      if (found_suffix)
2815b725ae77Skettenis 		return ERROR;
2816b725ae77Skettenis 	      n += i = c - 'a' + 10;
2817b725ae77Skettenis 	    }
2818b725ae77Skettenis 	  else if (c == 'l')
2819b725ae77Skettenis 	    {
2820b725ae77Skettenis 	      ++long_p;
2821b725ae77Skettenis 	      found_suffix = 1;
2822b725ae77Skettenis 	    }
2823b725ae77Skettenis 	  else if (c == 'u')
2824b725ae77Skettenis 	    {
2825b725ae77Skettenis 	      unsigned_p = 1;
2826b725ae77Skettenis 	      found_suffix = 1;
2827b725ae77Skettenis 	    }
2828b725ae77Skettenis 	  else
2829b725ae77Skettenis 	    return ERROR;	/* Char not a digit */
2830b725ae77Skettenis 	}
2831b725ae77Skettenis       if (i >= base)
2832b725ae77Skettenis 	return ERROR;		/* Invalid digit in this base */
2833b725ae77Skettenis 
2834b725ae77Skettenis       /* Portably test for overflow (only works for nonzero values, so make
2835b725ae77Skettenis 	 a second check for zero).  FIXME: Can't we just make n and prevn
2836b725ae77Skettenis 	 unsigned and avoid this?  */
2837b725ae77Skettenis       if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
2838b725ae77Skettenis 	unsigned_p = 1;		/* Try something unsigned */
2839b725ae77Skettenis 
2840b725ae77Skettenis       /* Portably test for unsigned overflow.
2841b725ae77Skettenis 	 FIXME: This check is wrong; for example it doesn't find overflow
2842b725ae77Skettenis 	 on 0x123456789 when LONGEST is 32 bits.  */
2843b725ae77Skettenis       if (c != 'l' && c != 'u' && n != 0)
2844b725ae77Skettenis 	{
2845b725ae77Skettenis 	  if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
2846b725ae77Skettenis 	    error ("Numeric constant too large.");
2847b725ae77Skettenis 	}
2848b725ae77Skettenis       prevn = n;
2849b725ae77Skettenis     }
2850b725ae77Skettenis 
2851b725ae77Skettenis   /* An integer constant is an int, a long, or a long long.  An L
2852b725ae77Skettenis      suffix forces it to be long; an LL suffix forces it to be long
2853b725ae77Skettenis      long.  If not forced to a larger size, it gets the first type of
2854b725ae77Skettenis      the above that it fits in.  To figure out whether it fits, we
2855b725ae77Skettenis      shift it right and see whether anything remains.  Note that we
2856b725ae77Skettenis      can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
2857b725ae77Skettenis      operation, because many compilers will warn about such a shift
2858b725ae77Skettenis      (which always produces a zero result).  Sometimes TARGET_INT_BIT
2859b725ae77Skettenis      or TARGET_LONG_BIT will be that big, sometimes not.  To deal with
2860b725ae77Skettenis      the case where it is we just always shift the value more than
2861b725ae77Skettenis      once, with fewer bits each time.  */
2862b725ae77Skettenis 
2863b725ae77Skettenis   un = (ULONGEST)n >> 2;
2864b725ae77Skettenis   if (long_p == 0
2865b725ae77Skettenis       && (un >> (TARGET_INT_BIT - 2)) == 0)
2866b725ae77Skettenis     {
2867b725ae77Skettenis       high_bit = ((ULONGEST)1) << (TARGET_INT_BIT-1);
2868b725ae77Skettenis 
2869b725ae77Skettenis       /* A large decimal (not hex or octal) constant (between INT_MAX
2870b725ae77Skettenis 	 and UINT_MAX) is a long or unsigned long, according to ANSI,
2871b725ae77Skettenis 	 never an unsigned int, but this code treats it as unsigned
2872b725ae77Skettenis 	 int.  This probably should be fixed.  GCC gives a warning on
2873b725ae77Skettenis 	 such constants.  */
2874b725ae77Skettenis 
2875*11efff7fSkettenis       unsigned_type = builtin_type (current_gdbarch)->builtin_unsigned_int;
2876*11efff7fSkettenis       signed_type = builtin_type (current_gdbarch)->builtin_int;
2877b725ae77Skettenis     }
2878b725ae77Skettenis   else if (long_p <= 1
2879b725ae77Skettenis 	   && (un >> (TARGET_LONG_BIT - 2)) == 0)
2880b725ae77Skettenis     {
2881b725ae77Skettenis       high_bit = ((ULONGEST)1) << (TARGET_LONG_BIT-1);
2882*11efff7fSkettenis       unsigned_type = builtin_type (current_gdbarch)->builtin_unsigned_long;
2883*11efff7fSkettenis       signed_type = builtin_type (current_gdbarch)->builtin_long;
2884b725ae77Skettenis     }
2885b725ae77Skettenis   else
2886b725ae77Skettenis     {
2887b725ae77Skettenis       int shift;
2888b725ae77Skettenis       if (sizeof (ULONGEST) * HOST_CHAR_BIT < TARGET_LONG_LONG_BIT)
2889b725ae77Skettenis 	/* A long long does not fit in a LONGEST.  */
2890b725ae77Skettenis 	shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
2891b725ae77Skettenis       else
2892b725ae77Skettenis 	shift = (TARGET_LONG_LONG_BIT - 1);
2893b725ae77Skettenis       high_bit = (ULONGEST) 1 << shift;
2894*11efff7fSkettenis       unsigned_type = builtin_type (current_gdbarch)->builtin_unsigned_long_long;
2895*11efff7fSkettenis       signed_type = builtin_type (current_gdbarch)->builtin_long_long;
2896b725ae77Skettenis     }
2897b725ae77Skettenis 
2898b725ae77Skettenis    putithere->typed_val_int.val = n;
2899b725ae77Skettenis 
2900b725ae77Skettenis    /* If the high bit of the worked out type is set then this number
2901b725ae77Skettenis       has to be unsigned. */
2902b725ae77Skettenis 
2903b725ae77Skettenis    if (unsigned_p || (n & high_bit))
2904b725ae77Skettenis      {
2905b725ae77Skettenis        putithere->typed_val_int.type = unsigned_type;
2906b725ae77Skettenis      }
2907b725ae77Skettenis    else
2908b725ae77Skettenis      {
2909b725ae77Skettenis        putithere->typed_val_int.type = signed_type;
2910b725ae77Skettenis      }
2911b725ae77Skettenis 
2912b725ae77Skettenis    return INT;
2913b725ae77Skettenis }
2914b725ae77Skettenis 
2915b725ae77Skettenis struct token
2916b725ae77Skettenis {
2917b725ae77Skettenis   char *operator;
2918b725ae77Skettenis   int token;
2919b725ae77Skettenis   enum exp_opcode opcode;
2920b725ae77Skettenis };
2921b725ae77Skettenis 
2922b725ae77Skettenis static const struct token tokentab3[] =
2923b725ae77Skettenis   {
2924b725ae77Skettenis     {">>=", ASSIGN_MODIFY, BINOP_RSH},
2925b725ae77Skettenis     {"<<=", ASSIGN_MODIFY, BINOP_LSH}
2926b725ae77Skettenis   };
2927b725ae77Skettenis 
2928b725ae77Skettenis static const struct token tokentab2[] =
2929b725ae77Skettenis   {
2930b725ae77Skettenis     {"+=", ASSIGN_MODIFY, BINOP_ADD},
2931b725ae77Skettenis     {"-=", ASSIGN_MODIFY, BINOP_SUB},
2932b725ae77Skettenis     {"*=", ASSIGN_MODIFY, BINOP_MUL},
2933b725ae77Skettenis     {"/=", ASSIGN_MODIFY, BINOP_DIV},
2934b725ae77Skettenis     {"%=", ASSIGN_MODIFY, BINOP_REM},
2935b725ae77Skettenis     {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR},
2936b725ae77Skettenis     {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND},
2937b725ae77Skettenis     {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR},
2938b725ae77Skettenis     {"++", INCREMENT, BINOP_END},
2939b725ae77Skettenis     {"--", DECREMENT, BINOP_END},
2940b725ae77Skettenis     {"->", ARROW, BINOP_END},
2941b725ae77Skettenis     {"&&", ANDAND, BINOP_END},
2942b725ae77Skettenis     {"||", OROR, BINOP_END},
2943b725ae77Skettenis     {"::", COLONCOLON, BINOP_END},
2944b725ae77Skettenis     {"<<", LSH, BINOP_END},
2945b725ae77Skettenis     {">>", RSH, BINOP_END},
2946b725ae77Skettenis     {"==", EQUAL, BINOP_END},
2947b725ae77Skettenis     {"!=", NOTEQUAL, BINOP_END},
2948b725ae77Skettenis     {"<=", LEQ, BINOP_END},
2949b725ae77Skettenis     {">=", GEQ, BINOP_END}
2950b725ae77Skettenis   };
2951b725ae77Skettenis 
2952b725ae77Skettenis /* Read one token, getting characters through lexptr.  */
2953b725ae77Skettenis 
2954b725ae77Skettenis static int
yylex()2955b725ae77Skettenis yylex ()
2956b725ae77Skettenis {
2957b725ae77Skettenis   int c;
2958b725ae77Skettenis   int namelen;
2959b725ae77Skettenis   unsigned int i;
2960b725ae77Skettenis   char *tokstart;
2961b725ae77Skettenis   char *tokptr;
2962b725ae77Skettenis   int tempbufindex;
2963b725ae77Skettenis   static char *tempbuf;
2964b725ae77Skettenis   static int tempbufsize;
2965b725ae77Skettenis   struct symbol * sym_class = NULL;
2966b725ae77Skettenis   char * token_string = NULL;
2967b725ae77Skettenis   int class_prefix = 0;
2968b725ae77Skettenis   int unquoted_expr;
2969b725ae77Skettenis 
2970b725ae77Skettenis  retry:
2971b725ae77Skettenis 
2972b725ae77Skettenis   /* Check if this is a macro invocation that we need to expand.  */
2973b725ae77Skettenis   if (! scanning_macro_expansion ())
2974b725ae77Skettenis     {
2975b725ae77Skettenis       char *expanded = macro_expand_next (&lexptr,
2976b725ae77Skettenis                                           expression_macro_lookup_func,
2977b725ae77Skettenis                                           expression_macro_lookup_baton);
2978b725ae77Skettenis 
2979b725ae77Skettenis       if (expanded)
2980b725ae77Skettenis         scan_macro_expansion (expanded);
2981b725ae77Skettenis     }
2982b725ae77Skettenis 
2983b725ae77Skettenis   prev_lexptr = lexptr;
2984b725ae77Skettenis   unquoted_expr = 1;
2985b725ae77Skettenis 
2986b725ae77Skettenis   tokstart = lexptr;
2987b725ae77Skettenis   /* See if it is a special token of length 3.  */
2988b725ae77Skettenis   for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++)
2989b725ae77Skettenis     if (strncmp (tokstart, tokentab3[i].operator, 3) == 0)
2990b725ae77Skettenis       {
2991b725ae77Skettenis 	lexptr += 3;
2992b725ae77Skettenis 	yylval.opcode = tokentab3[i].opcode;
2993b725ae77Skettenis 	return tokentab3[i].token;
2994b725ae77Skettenis       }
2995b725ae77Skettenis 
2996b725ae77Skettenis   /* See if it is a special token of length 2.  */
2997b725ae77Skettenis   for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++)
2998b725ae77Skettenis     if (strncmp (tokstart, tokentab2[i].operator, 2) == 0)
2999b725ae77Skettenis       {
3000b725ae77Skettenis 	lexptr += 2;
3001b725ae77Skettenis 	yylval.opcode = tokentab2[i].opcode;
3002b725ae77Skettenis 	return tokentab2[i].token;
3003b725ae77Skettenis       }
3004b725ae77Skettenis 
3005b725ae77Skettenis   switch (c = *tokstart)
3006b725ae77Skettenis     {
3007b725ae77Skettenis     case 0:
3008b725ae77Skettenis       /* If we were just scanning the result of a macro expansion,
3009b725ae77Skettenis          then we need to resume scanning the original text.
3010b725ae77Skettenis          Otherwise, we were already scanning the original text, and
3011b725ae77Skettenis          we're really done.  */
3012b725ae77Skettenis       if (scanning_macro_expansion ())
3013b725ae77Skettenis         {
3014b725ae77Skettenis           finished_macro_expansion ();
3015b725ae77Skettenis           goto retry;
3016b725ae77Skettenis         }
3017b725ae77Skettenis       else
3018b725ae77Skettenis         return 0;
3019b725ae77Skettenis 
3020b725ae77Skettenis     case ' ':
3021b725ae77Skettenis     case '\t':
3022b725ae77Skettenis     case '\n':
3023b725ae77Skettenis       lexptr++;
3024b725ae77Skettenis       goto retry;
3025b725ae77Skettenis 
3026b725ae77Skettenis     case '\'':
3027b725ae77Skettenis       /* We either have a character constant ('0' or '\177' for example)
3028b725ae77Skettenis 	 or we have a quoted symbol reference ('foo(int,int)' in C++
3029b725ae77Skettenis 	 for example). */
3030b725ae77Skettenis       lexptr++;
3031b725ae77Skettenis       c = *lexptr++;
3032b725ae77Skettenis       if (c == '\\')
3033b725ae77Skettenis 	c = parse_escape (&lexptr);
3034b725ae77Skettenis       else if (c == '\'')
3035b725ae77Skettenis 	error ("Empty character constant.");
3036b725ae77Skettenis       else if (! host_char_to_target (c, &c))
3037b725ae77Skettenis         {
3038b725ae77Skettenis           int toklen = lexptr - tokstart + 1;
3039b725ae77Skettenis           char *tok = alloca (toklen + 1);
3040b725ae77Skettenis           memcpy (tok, tokstart, toklen);
3041b725ae77Skettenis           tok[toklen] = '\0';
3042b725ae77Skettenis           error ("There is no character corresponding to %s in the target "
3043b725ae77Skettenis                  "character set `%s'.", tok, target_charset ());
3044b725ae77Skettenis         }
3045b725ae77Skettenis 
3046b725ae77Skettenis       yylval.typed_val_int.val = c;
3047*11efff7fSkettenis       yylval.typed_val_int.type = builtin_type (current_gdbarch)->builtin_char;
3048b725ae77Skettenis 
3049b725ae77Skettenis       c = *lexptr++;
3050b725ae77Skettenis       if (c != '\'')
3051b725ae77Skettenis 	{
3052b725ae77Skettenis 	  namelen = skip_quoted (tokstart) - tokstart;
3053b725ae77Skettenis 	  if (namelen > 2)
3054b725ae77Skettenis 	    {
3055b725ae77Skettenis 	      lexptr = tokstart + namelen;
3056b725ae77Skettenis               unquoted_expr = 0;
3057b725ae77Skettenis 	      if (lexptr[-1] != '\'')
3058b725ae77Skettenis 		error ("Unmatched single quote.");
3059b725ae77Skettenis 	      namelen -= 2;
3060b725ae77Skettenis 	      tokstart++;
3061b725ae77Skettenis 	      goto tryname;
3062b725ae77Skettenis 	    }
3063b725ae77Skettenis 	  error ("Invalid character constant.");
3064b725ae77Skettenis 	}
3065b725ae77Skettenis       return INT;
3066b725ae77Skettenis 
3067b725ae77Skettenis     case '(':
3068b725ae77Skettenis       paren_depth++;
3069b725ae77Skettenis       lexptr++;
3070b725ae77Skettenis       return c;
3071b725ae77Skettenis 
3072b725ae77Skettenis     case ')':
3073b725ae77Skettenis       if (paren_depth == 0)
3074b725ae77Skettenis 	return 0;
3075b725ae77Skettenis       paren_depth--;
3076b725ae77Skettenis       lexptr++;
3077b725ae77Skettenis       return c;
3078b725ae77Skettenis 
3079b725ae77Skettenis     case ',':
3080b725ae77Skettenis       if (comma_terminates
3081b725ae77Skettenis           && paren_depth == 0
3082b725ae77Skettenis           && ! scanning_macro_expansion ())
3083b725ae77Skettenis 	return 0;
3084b725ae77Skettenis       lexptr++;
3085b725ae77Skettenis       return c;
3086b725ae77Skettenis 
3087b725ae77Skettenis     case '.':
3088b725ae77Skettenis       /* Might be a floating point number.  */
3089b725ae77Skettenis       if (lexptr[1] < '0' || lexptr[1] > '9')
3090b725ae77Skettenis 	goto symbol;		/* Nope, must be a symbol. */
3091b725ae77Skettenis       /* FALL THRU into number case.  */
3092b725ae77Skettenis 
3093b725ae77Skettenis     case '0':
3094b725ae77Skettenis     case '1':
3095b725ae77Skettenis     case '2':
3096b725ae77Skettenis     case '3':
3097b725ae77Skettenis     case '4':
3098b725ae77Skettenis     case '5':
3099b725ae77Skettenis     case '6':
3100b725ae77Skettenis     case '7':
3101b725ae77Skettenis     case '8':
3102b725ae77Skettenis     case '9':
3103b725ae77Skettenis       {
3104b725ae77Skettenis 	/* It's a number.  */
3105b725ae77Skettenis 	int got_dot = 0, got_e = 0, toktype;
3106b725ae77Skettenis 	char *p = tokstart;
3107b725ae77Skettenis 	int hex = input_radix > 10;
3108b725ae77Skettenis 
3109b725ae77Skettenis 	if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
3110b725ae77Skettenis 	  {
3111b725ae77Skettenis 	    p += 2;
3112b725ae77Skettenis 	    hex = 1;
3113b725ae77Skettenis 	  }
3114b725ae77Skettenis 	else if (c == '0' && (p[1]=='t' || p[1]=='T' || p[1]=='d' || p[1]=='D'))
3115b725ae77Skettenis 	  {
3116b725ae77Skettenis 	    p += 2;
3117b725ae77Skettenis 	    hex = 0;
3118b725ae77Skettenis 	  }
3119b725ae77Skettenis 
3120b725ae77Skettenis 	for (;; ++p)
3121b725ae77Skettenis 	  {
3122b725ae77Skettenis 	    /* This test includes !hex because 'e' is a valid hex digit
3123b725ae77Skettenis 	       and thus does not indicate a floating point number when
3124b725ae77Skettenis 	       the radix is hex.  */
3125b725ae77Skettenis 	    if (!hex && !got_e && (*p == 'e' || *p == 'E'))
3126b725ae77Skettenis 	      got_dot = got_e = 1;
3127b725ae77Skettenis 	    /* This test does not include !hex, because a '.' always indicates
3128b725ae77Skettenis 	       a decimal floating point number regardless of the radix.  */
3129b725ae77Skettenis 	    else if (!got_dot && *p == '.')
3130b725ae77Skettenis 	      got_dot = 1;
3131b725ae77Skettenis 	    else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
3132b725ae77Skettenis 		     && (*p == '-' || *p == '+'))
3133b725ae77Skettenis 	      /* This is the sign of the exponent, not the end of the
3134b725ae77Skettenis 		 number.  */
3135b725ae77Skettenis 	      continue;
3136b725ae77Skettenis 	    /* We will take any letters or digits.  parse_number will
3137b725ae77Skettenis 	       complain if past the radix, or if L or U are not final.  */
3138b725ae77Skettenis 	    else if ((*p < '0' || *p > '9')
3139b725ae77Skettenis 		     && ((*p < 'a' || *p > 'z')
3140b725ae77Skettenis 				  && (*p < 'A' || *p > 'Z')))
3141b725ae77Skettenis 	      break;
3142b725ae77Skettenis 	  }
3143b725ae77Skettenis 	toktype = parse_number (tokstart, p - tokstart, got_dot|got_e, &yylval);
3144b725ae77Skettenis         if (toktype == ERROR)
3145b725ae77Skettenis 	  {
3146b725ae77Skettenis 	    char *err_copy = (char *) alloca (p - tokstart + 1);
3147b725ae77Skettenis 
3148b725ae77Skettenis 	    memcpy (err_copy, tokstart, p - tokstart);
3149b725ae77Skettenis 	    err_copy[p - tokstart] = 0;
3150b725ae77Skettenis 	    error ("Invalid number \"%s\".", err_copy);
3151b725ae77Skettenis 	  }
3152b725ae77Skettenis 	lexptr = p;
3153b725ae77Skettenis 	return toktype;
3154b725ae77Skettenis       }
3155b725ae77Skettenis 
3156b725ae77Skettenis     case '+':
3157b725ae77Skettenis     case '-':
3158b725ae77Skettenis     case '*':
3159b725ae77Skettenis     case '/':
3160b725ae77Skettenis     case '%':
3161b725ae77Skettenis     case '|':
3162b725ae77Skettenis     case '&':
3163b725ae77Skettenis     case '^':
3164b725ae77Skettenis     case '~':
3165b725ae77Skettenis     case '!':
3166b725ae77Skettenis     case '@':
3167b725ae77Skettenis     case '<':
3168b725ae77Skettenis     case '>':
3169b725ae77Skettenis     case '[':
3170b725ae77Skettenis     case ']':
3171b725ae77Skettenis     case '?':
3172b725ae77Skettenis     case ':':
3173b725ae77Skettenis     case '=':
3174b725ae77Skettenis     case '{':
3175b725ae77Skettenis     case '}':
3176b725ae77Skettenis     symbol:
3177b725ae77Skettenis       lexptr++;
3178b725ae77Skettenis       return c;
3179b725ae77Skettenis 
3180b725ae77Skettenis     case '"':
3181b725ae77Skettenis 
3182b725ae77Skettenis       /* Build the gdb internal form of the input string in tempbuf,
3183b725ae77Skettenis 	 translating any standard C escape forms seen.  Note that the
3184b725ae77Skettenis 	 buffer is null byte terminated *only* for the convenience of
3185b725ae77Skettenis 	 debugging gdb itself and printing the buffer contents when
3186b725ae77Skettenis 	 the buffer contains no embedded nulls.  Gdb does not depend
3187b725ae77Skettenis 	 upon the buffer being null byte terminated, it uses the length
3188b725ae77Skettenis 	 string instead.  This allows gdb to handle C strings (as well
3189b725ae77Skettenis 	 as strings in other languages) with embedded null bytes */
3190b725ae77Skettenis 
3191b725ae77Skettenis       tokptr = ++tokstart;
3192b725ae77Skettenis       tempbufindex = 0;
3193b725ae77Skettenis 
3194b725ae77Skettenis       do {
3195b725ae77Skettenis         char *char_start_pos = tokptr;
3196b725ae77Skettenis 
3197b725ae77Skettenis 	/* Grow the static temp buffer if necessary, including allocating
3198b725ae77Skettenis 	   the first one on demand. */
3199b725ae77Skettenis 	if (tempbufindex + 1 >= tempbufsize)
3200b725ae77Skettenis 	  {
3201b725ae77Skettenis 	    tempbuf = (char *) xrealloc (tempbuf, tempbufsize += 64);
3202b725ae77Skettenis 	  }
3203b725ae77Skettenis 	switch (*tokptr)
3204b725ae77Skettenis 	  {
3205b725ae77Skettenis 	  case '\0':
3206b725ae77Skettenis 	  case '"':
3207b725ae77Skettenis 	    /* Do nothing, loop will terminate. */
3208b725ae77Skettenis 	    break;
3209b725ae77Skettenis 	  case '\\':
3210b725ae77Skettenis 	    tokptr++;
3211b725ae77Skettenis 	    c = parse_escape (&tokptr);
3212b725ae77Skettenis 	    if (c == -1)
3213b725ae77Skettenis 	      {
3214b725ae77Skettenis 		continue;
3215b725ae77Skettenis 	      }
3216b725ae77Skettenis 	    tempbuf[tempbufindex++] = c;
3217b725ae77Skettenis 	    break;
3218b725ae77Skettenis 	  default:
3219b725ae77Skettenis 	    c = *tokptr++;
3220b725ae77Skettenis             if (! host_char_to_target (c, &c))
3221b725ae77Skettenis               {
3222b725ae77Skettenis                 int len = tokptr - char_start_pos;
3223b725ae77Skettenis                 char *copy = alloca (len + 1);
3224b725ae77Skettenis                 memcpy (copy, char_start_pos, len);
3225b725ae77Skettenis                 copy[len] = '\0';
3226b725ae77Skettenis 
3227b725ae77Skettenis                 error ("There is no character corresponding to `%s' "
3228b725ae77Skettenis                        "in the target character set `%s'.",
3229b725ae77Skettenis                        copy, target_charset ());
3230b725ae77Skettenis               }
3231b725ae77Skettenis             tempbuf[tempbufindex++] = c;
3232b725ae77Skettenis 	    break;
3233b725ae77Skettenis 	  }
3234b725ae77Skettenis       } while ((*tokptr != '"') && (*tokptr != '\0'));
3235b725ae77Skettenis       if (*tokptr++ != '"')
3236b725ae77Skettenis 	{
3237b725ae77Skettenis 	  error ("Unterminated string in expression.");
3238b725ae77Skettenis 	}
3239b725ae77Skettenis       tempbuf[tempbufindex] = '\0';	/* See note above */
3240b725ae77Skettenis       yylval.sval.ptr = tempbuf;
3241b725ae77Skettenis       yylval.sval.length = tempbufindex;
3242b725ae77Skettenis       lexptr = tokptr;
3243b725ae77Skettenis       return (STRING);
3244b725ae77Skettenis     }
3245b725ae77Skettenis 
3246b725ae77Skettenis   if (!(c == '_' || c == '$'
3247b725ae77Skettenis 	|| (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
3248b725ae77Skettenis     /* We must have come across a bad character (e.g. ';').  */
3249b725ae77Skettenis     error ("Invalid character '%c' in expression.", c);
3250b725ae77Skettenis 
3251b725ae77Skettenis   /* It's a name.  See how long it is.  */
3252b725ae77Skettenis   namelen = 0;
3253b725ae77Skettenis   for (c = tokstart[namelen];
3254b725ae77Skettenis        (c == '_' || c == '$' || (c >= '0' && c <= '9')
3255b725ae77Skettenis 	|| (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');)
3256b725ae77Skettenis     {
3257b725ae77Skettenis       /* Template parameter lists are part of the name.
3258b725ae77Skettenis 	 FIXME: This mishandles `print $a<4&&$a>3'.  */
3259b725ae77Skettenis 
3260b725ae77Skettenis       if (c == '<')
3261b725ae77Skettenis 	{
3262b725ae77Skettenis                /* Scan ahead to get rest of the template specification.  Note
3263b725ae77Skettenis                   that we look ahead only when the '<' adjoins non-whitespace
3264b725ae77Skettenis                   characters; for comparison expressions, e.g. "a < b > c",
3265b725ae77Skettenis                   there must be spaces before the '<', etc. */
3266b725ae77Skettenis 
3267b725ae77Skettenis                char * p = find_template_name_end (tokstart + namelen);
3268b725ae77Skettenis                if (p)
3269b725ae77Skettenis                  namelen = p - tokstart;
3270b725ae77Skettenis                break;
3271b725ae77Skettenis 	}
3272b725ae77Skettenis       c = tokstart[++namelen];
3273b725ae77Skettenis     }
3274b725ae77Skettenis 
3275b725ae77Skettenis   /* The token "if" terminates the expression and is NOT removed from
3276b725ae77Skettenis      the input stream.  It doesn't count if it appears in the
3277b725ae77Skettenis      expansion of a macro.  */
3278b725ae77Skettenis   if (namelen == 2
3279b725ae77Skettenis       && tokstart[0] == 'i'
3280b725ae77Skettenis       && tokstart[1] == 'f'
3281b725ae77Skettenis       && ! scanning_macro_expansion ())
3282b725ae77Skettenis     {
3283b725ae77Skettenis       return 0;
3284b725ae77Skettenis     }
3285b725ae77Skettenis 
3286b725ae77Skettenis   lexptr += namelen;
3287b725ae77Skettenis 
3288b725ae77Skettenis   tryname:
3289b725ae77Skettenis 
3290b725ae77Skettenis   /* Catch specific keywords.  Should be done with a data structure.  */
3291b725ae77Skettenis   switch (namelen)
3292b725ae77Skettenis     {
3293b725ae77Skettenis     case 8:
3294b725ae77Skettenis       if (strncmp (tokstart, "unsigned", 8) == 0)
3295b725ae77Skettenis 	return UNSIGNED;
3296b725ae77Skettenis       if (current_language->la_language == language_cplus
3297b725ae77Skettenis 	  && strncmp (tokstart, "template", 8) == 0)
3298b725ae77Skettenis 	return TEMPLATE;
3299b725ae77Skettenis       if (strncmp (tokstart, "volatile", 8) == 0)
3300b725ae77Skettenis 	return VOLATILE_KEYWORD;
3301b725ae77Skettenis       break;
3302b725ae77Skettenis     case 6:
3303b725ae77Skettenis       if (strncmp (tokstart, "struct", 6) == 0)
3304b725ae77Skettenis 	return STRUCT;
3305b725ae77Skettenis       if (strncmp (tokstart, "signed", 6) == 0)
3306b725ae77Skettenis 	return SIGNED_KEYWORD;
3307b725ae77Skettenis       if (strncmp (tokstart, "sizeof", 6) == 0)
3308b725ae77Skettenis 	return SIZEOF;
3309b725ae77Skettenis       if (strncmp (tokstart, "double", 6) == 0)
3310b725ae77Skettenis 	return DOUBLE_KEYWORD;
3311b725ae77Skettenis       break;
3312b725ae77Skettenis     case 5:
3313b725ae77Skettenis       if (current_language->la_language == language_cplus)
3314b725ae77Skettenis         {
3315b725ae77Skettenis           if (strncmp (tokstart, "false", 5) == 0)
3316b725ae77Skettenis             return FALSEKEYWORD;
3317b725ae77Skettenis           if (strncmp (tokstart, "class", 5) == 0)
3318b725ae77Skettenis             return CLASS;
3319b725ae77Skettenis         }
3320b725ae77Skettenis       if (strncmp (tokstart, "union", 5) == 0)
3321b725ae77Skettenis 	return UNION;
3322b725ae77Skettenis       if (strncmp (tokstart, "short", 5) == 0)
3323b725ae77Skettenis 	return SHORT;
3324b725ae77Skettenis       if (strncmp (tokstart, "const", 5) == 0)
3325b725ae77Skettenis 	return CONST_KEYWORD;
3326b725ae77Skettenis       break;
3327b725ae77Skettenis     case 4:
3328b725ae77Skettenis       if (strncmp (tokstart, "enum", 4) == 0)
3329b725ae77Skettenis 	return ENUM;
3330b725ae77Skettenis       if (strncmp (tokstart, "long", 4) == 0)
3331b725ae77Skettenis 	return LONG;
3332b725ae77Skettenis       if (current_language->la_language == language_cplus)
3333b725ae77Skettenis           {
3334b725ae77Skettenis             if (strncmp (tokstart, "true", 4) == 0)
3335b725ae77Skettenis               return TRUEKEYWORD;
3336b725ae77Skettenis           }
3337b725ae77Skettenis       break;
3338b725ae77Skettenis     case 3:
3339b725ae77Skettenis       if (strncmp (tokstart, "int", 3) == 0)
3340b725ae77Skettenis 	return INT_KEYWORD;
3341b725ae77Skettenis       break;
3342b725ae77Skettenis     default:
3343b725ae77Skettenis       break;
3344b725ae77Skettenis     }
3345b725ae77Skettenis 
3346b725ae77Skettenis   yylval.sval.ptr = tokstart;
3347b725ae77Skettenis   yylval.sval.length = namelen;
3348b725ae77Skettenis 
3349b725ae77Skettenis   if (*tokstart == '$')
3350b725ae77Skettenis     {
3351b725ae77Skettenis       write_dollar_variable (yylval.sval);
3352b725ae77Skettenis       return VARIABLE;
3353b725ae77Skettenis     }
3354b725ae77Skettenis 
3355b725ae77Skettenis   /* Look ahead and see if we can consume more of the input
3356b725ae77Skettenis      string to get a reasonable class/namespace spec or a
3357b725ae77Skettenis      fully-qualified name.  This is a kludge to get around the
3358b725ae77Skettenis      HP aCC compiler's generation of symbol names with embedded
3359b725ae77Skettenis      colons for namespace and nested classes. */
3360b725ae77Skettenis 
3361b725ae77Skettenis   /* NOTE: carlton/2003-09-24: I don't entirely understand the
3362b725ae77Skettenis      HP-specific code, either here or in linespec.  Having said that,
3363b725ae77Skettenis      I suspect that we're actually moving towards their model: we want
3364b725ae77Skettenis      symbols whose names are fully qualified, which matches the
3365b725ae77Skettenis      description above.  */
3366b725ae77Skettenis   if (unquoted_expr)
3367b725ae77Skettenis     {
3368b725ae77Skettenis       /* Only do it if not inside single quotes */
3369b725ae77Skettenis       sym_class = parse_nested_classes_for_hpacc (yylval.sval.ptr, yylval.sval.length,
3370b725ae77Skettenis                                                   &token_string, &class_prefix, &lexptr);
3371b725ae77Skettenis       if (sym_class)
3372b725ae77Skettenis         {
3373b725ae77Skettenis           /* Replace the current token with the bigger one we found */
3374b725ae77Skettenis           yylval.sval.ptr = token_string;
3375b725ae77Skettenis           yylval.sval.length = strlen (token_string);
3376b725ae77Skettenis         }
3377b725ae77Skettenis     }
3378b725ae77Skettenis 
3379b725ae77Skettenis   /* Use token-type BLOCKNAME for symbols that happen to be defined as
3380b725ae77Skettenis      functions or symtabs.  If this is not so, then ...
3381b725ae77Skettenis      Use token-type TYPENAME for symbols that happen to be defined
3382b725ae77Skettenis      currently as names of types; NAME for other symbols.
3383b725ae77Skettenis      The caller is not constrained to care about the distinction.  */
3384b725ae77Skettenis   {
3385b725ae77Skettenis     char *tmp = copy_name (yylval.sval);
3386b725ae77Skettenis     struct symbol *sym;
3387b725ae77Skettenis     int is_a_field_of_this = 0;
3388b725ae77Skettenis     int hextype;
3389b725ae77Skettenis 
3390b725ae77Skettenis     sym = lookup_symbol (tmp, expression_context_block,
3391b725ae77Skettenis 			 VAR_DOMAIN,
3392b725ae77Skettenis 			 current_language->la_language == language_cplus
3393b725ae77Skettenis 			 ? &is_a_field_of_this : (int *) NULL,
3394b725ae77Skettenis 			 (struct symtab **) NULL);
3395b725ae77Skettenis     /* Call lookup_symtab, not lookup_partial_symtab, in case there are
3396b725ae77Skettenis        no psymtabs (coff, xcoff, or some future change to blow away the
3397b725ae77Skettenis        psymtabs once once symbols are read).  */
3398b725ae77Skettenis     if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
3399b725ae77Skettenis       {
3400b725ae77Skettenis 	yylval.ssym.sym = sym;
3401b725ae77Skettenis 	yylval.ssym.is_a_field_of_this = is_a_field_of_this;
3402b725ae77Skettenis 	return BLOCKNAME;
3403b725ae77Skettenis       }
3404b725ae77Skettenis     else if (!sym)
3405b725ae77Skettenis       {				/* See if it's a file name. */
3406b725ae77Skettenis 	struct symtab *symtab;
3407b725ae77Skettenis 
3408b725ae77Skettenis 	symtab = lookup_symtab (tmp);
3409b725ae77Skettenis 
3410b725ae77Skettenis 	if (symtab)
3411b725ae77Skettenis 	  {
3412b725ae77Skettenis 	    yylval.bval = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK);
3413b725ae77Skettenis 	    return FILENAME;
3414b725ae77Skettenis 	  }
3415b725ae77Skettenis       }
3416b725ae77Skettenis 
3417b725ae77Skettenis     if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
3418b725ae77Skettenis         {
3419b725ae77Skettenis 	  /* NOTE: carlton/2003-09-25: There used to be code here to
3420b725ae77Skettenis 	     handle nested types.  It didn't work very well.  See the
3421b725ae77Skettenis 	     comment before qualified_type for more info.  */
3422b725ae77Skettenis 	  yylval.tsym.type = SYMBOL_TYPE (sym);
3423b725ae77Skettenis 	  return TYPENAME;
3424b725ae77Skettenis         }
3425*11efff7fSkettenis     yylval.tsym.type
3426*11efff7fSkettenis       = language_lookup_primitive_type_by_name (current_language,
3427*11efff7fSkettenis 						current_gdbarch, tmp);
3428*11efff7fSkettenis     if (yylval.tsym.type != NULL)
3429b725ae77Skettenis       return TYPENAME;
3430b725ae77Skettenis 
3431b725ae77Skettenis     /* Input names that aren't symbols but ARE valid hex numbers,
3432b725ae77Skettenis        when the input radix permits them, can be names or numbers
3433b725ae77Skettenis        depending on the parse.  Note we support radixes > 16 here.  */
3434b725ae77Skettenis     if (!sym &&
3435b725ae77Skettenis         ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10) ||
3436b725ae77Skettenis          (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
3437b725ae77Skettenis       {
3438b725ae77Skettenis  	YYSTYPE newlval;	/* Its value is ignored.  */
3439b725ae77Skettenis 	hextype = parse_number (tokstart, namelen, 0, &newlval);
3440b725ae77Skettenis 	if (hextype == INT)
3441b725ae77Skettenis 	  {
3442b725ae77Skettenis 	    yylval.ssym.sym = sym;
3443b725ae77Skettenis 	    yylval.ssym.is_a_field_of_this = is_a_field_of_this;
3444b725ae77Skettenis 	    return NAME_OR_INT;
3445b725ae77Skettenis 	  }
3446b725ae77Skettenis       }
3447b725ae77Skettenis 
3448b725ae77Skettenis     /* Any other kind of symbol */
3449b725ae77Skettenis     yylval.ssym.sym = sym;
3450b725ae77Skettenis     yylval.ssym.is_a_field_of_this = is_a_field_of_this;
3451b725ae77Skettenis     return NAME;
3452b725ae77Skettenis   }
3453b725ae77Skettenis }
3454b725ae77Skettenis 
3455b725ae77Skettenis void
yyerror(msg)3456b725ae77Skettenis yyerror (msg)
3457b725ae77Skettenis      char *msg;
3458b725ae77Skettenis {
3459b725ae77Skettenis   if (prev_lexptr)
3460b725ae77Skettenis     lexptr = prev_lexptr;
3461b725ae77Skettenis 
3462b725ae77Skettenis   error ("A %s in expression, near `%s'.", (msg ? msg : "error"), lexptr);
3463b725ae77Skettenis }
3464*11efff7fSkettenis 
3465*11efff7fSkettenis 
3466