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