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 INTEGER_LITERAL = 258,
57*11efff7fSkettenis FLOATING_POINT_LITERAL = 259,
58*11efff7fSkettenis IDENTIFIER = 260,
59*11efff7fSkettenis STRING_LITERAL = 261,
60*11efff7fSkettenis BOOLEAN_LITERAL = 262,
61*11efff7fSkettenis TYPENAME = 263,
62*11efff7fSkettenis NAME_OR_INT = 264,
63*11efff7fSkettenis ERROR = 265,
64*11efff7fSkettenis LONG = 266,
65*11efff7fSkettenis SHORT = 267,
66*11efff7fSkettenis BYTE = 268,
67*11efff7fSkettenis INT = 269,
68*11efff7fSkettenis CHAR = 270,
69*11efff7fSkettenis BOOLEAN = 271,
70*11efff7fSkettenis DOUBLE = 272,
71*11efff7fSkettenis FLOAT = 273,
72*11efff7fSkettenis VARIABLE = 274,
73*11efff7fSkettenis ASSIGN_MODIFY = 275,
74*11efff7fSkettenis SUPER = 276,
75*11efff7fSkettenis NEW = 277,
76*11efff7fSkettenis OROR = 278,
77*11efff7fSkettenis ANDAND = 279,
78*11efff7fSkettenis NOTEQUAL = 280,
79*11efff7fSkettenis EQUAL = 281,
80*11efff7fSkettenis GEQ = 282,
81*11efff7fSkettenis LEQ = 283,
82*11efff7fSkettenis RSH = 284,
83*11efff7fSkettenis LSH = 285,
84*11efff7fSkettenis DECREMENT = 286,
85*11efff7fSkettenis INCREMENT = 287
86*11efff7fSkettenis };
87*11efff7fSkettenis #endif
88*11efff7fSkettenis #define INTEGER_LITERAL 258
89*11efff7fSkettenis #define FLOATING_POINT_LITERAL 259
90*11efff7fSkettenis #define IDENTIFIER 260
91*11efff7fSkettenis #define STRING_LITERAL 261
92*11efff7fSkettenis #define BOOLEAN_LITERAL 262
93*11efff7fSkettenis #define TYPENAME 263
94*11efff7fSkettenis #define NAME_OR_INT 264
95*11efff7fSkettenis #define ERROR 265
96*11efff7fSkettenis #define LONG 266
97*11efff7fSkettenis #define SHORT 267
98*11efff7fSkettenis #define BYTE 268
99*11efff7fSkettenis #define INT 269
100*11efff7fSkettenis #define CHAR 270
101*11efff7fSkettenis #define BOOLEAN 271
102*11efff7fSkettenis #define DOUBLE 272
103*11efff7fSkettenis #define FLOAT 273
104*11efff7fSkettenis #define VARIABLE 274
105*11efff7fSkettenis #define ASSIGN_MODIFY 275
106*11efff7fSkettenis #define SUPER 276
107*11efff7fSkettenis #define NEW 277
108*11efff7fSkettenis #define OROR 278
109*11efff7fSkettenis #define ANDAND 279
110b725ae77Skettenis #define NOTEQUAL 280
111*11efff7fSkettenis #define EQUAL 281
112b725ae77Skettenis #define GEQ 282
113*11efff7fSkettenis #define LEQ 283
114b725ae77Skettenis #define RSH 284
115*11efff7fSkettenis #define LSH 285
116b725ae77Skettenis #define DECREMENT 286
117*11efff7fSkettenis #define INCREMENT 287
118b725ae77Skettenis
119*11efff7fSkettenis
120*11efff7fSkettenis
121*11efff7fSkettenis
122*11efff7fSkettenis /* Copy the first part of user declarations. */
123b725ae77Skettenis #line 38 "jv-exp.y"
124b725ae77Skettenis
125b725ae77Skettenis
126b725ae77Skettenis #include "defs.h"
127b725ae77Skettenis #include "gdb_string.h"
128b725ae77Skettenis #include <ctype.h>
129b725ae77Skettenis #include "expression.h"
130b725ae77Skettenis #include "value.h"
131b725ae77Skettenis #include "parser-defs.h"
132b725ae77Skettenis #include "language.h"
133b725ae77Skettenis #include "jv-lang.h"
134b725ae77Skettenis #include "bfd.h" /* Required by objfiles.h. */
135b725ae77Skettenis #include "symfile.h" /* Required by objfiles.h. */
136b725ae77Skettenis #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
137b725ae77Skettenis #include "block.h"
138b725ae77Skettenis
139b725ae77Skettenis /* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
140b725ae77Skettenis as well as gratuitiously global symbol names, so we can have multiple
141b725ae77Skettenis yacc generated parsers in gdb. Note that these are only the variables
142b725ae77Skettenis produced by yacc. If other parser generators (bison, byacc, etc) produce
143b725ae77Skettenis additional global names that conflict at link time, then those parser
144b725ae77Skettenis generators need to be fixed instead of adding those names to this list. */
145b725ae77Skettenis
146b725ae77Skettenis #define yymaxdepth java_maxdepth
147b725ae77Skettenis #define yyparse java_parse
148b725ae77Skettenis #define yylex java_lex
149b725ae77Skettenis #define yyerror java_error
150b725ae77Skettenis #define yylval java_lval
151b725ae77Skettenis #define yychar java_char
152b725ae77Skettenis #define yydebug java_debug
153b725ae77Skettenis #define yypact java_pact
154b725ae77Skettenis #define yyr1 java_r1
155b725ae77Skettenis #define yyr2 java_r2
156b725ae77Skettenis #define yydef java_def
157b725ae77Skettenis #define yychk java_chk
158b725ae77Skettenis #define yypgo java_pgo
159b725ae77Skettenis #define yyact java_act
160b725ae77Skettenis #define yyexca java_exca
161b725ae77Skettenis #define yyerrflag java_errflag
162b725ae77Skettenis #define yynerrs java_nerrs
163b725ae77Skettenis #define yyps java_ps
164b725ae77Skettenis #define yypv java_pv
165b725ae77Skettenis #define yys java_s
166b725ae77Skettenis #define yy_yys java_yys
167b725ae77Skettenis #define yystate java_state
168b725ae77Skettenis #define yytmp java_tmp
169b725ae77Skettenis #define yyv java_v
170b725ae77Skettenis #define yy_yyv java_yyv
171b725ae77Skettenis #define yyval java_val
172b725ae77Skettenis #define yylloc java_lloc
173b725ae77Skettenis #define yyreds java_reds /* With YYDEBUG defined */
174b725ae77Skettenis #define yytoks java_toks /* With YYDEBUG defined */
175b725ae77Skettenis #define yyname java_name /* With YYDEBUG defined */
176b725ae77Skettenis #define yyrule java_rule /* With YYDEBUG defined */
177b725ae77Skettenis #define yylhs java_yylhs
178b725ae77Skettenis #define yylen java_yylen
179b725ae77Skettenis #define yydefred java_yydefred
180b725ae77Skettenis #define yydgoto java_yydgoto
181b725ae77Skettenis #define yysindex java_yysindex
182b725ae77Skettenis #define yyrindex java_yyrindex
183b725ae77Skettenis #define yygindex java_yygindex
184b725ae77Skettenis #define yytable java_yytable
185b725ae77Skettenis #define yycheck java_yycheck
186b725ae77Skettenis
187b725ae77Skettenis #ifndef YYDEBUG
188b725ae77Skettenis #define YYDEBUG 1 /* Default to yydebug support */
189b725ae77Skettenis #endif
190b725ae77Skettenis
191b725ae77Skettenis #define YYFPRINTF parser_fprintf
192b725ae77Skettenis
193b725ae77Skettenis int yyparse (void);
194b725ae77Skettenis
195b725ae77Skettenis static int yylex (void);
196b725ae77Skettenis
197b725ae77Skettenis void yyerror (char *);
198b725ae77Skettenis
199b725ae77Skettenis static struct type *java_type_from_name (struct stoken);
200b725ae77Skettenis static void push_expression_name (struct stoken);
201b725ae77Skettenis static void push_fieldnames (struct stoken);
202b725ae77Skettenis
203b725ae77Skettenis static struct expression *copy_exp (struct expression *, int);
204b725ae77Skettenis static void insert_exp (int, struct expression *);
205b725ae77Skettenis
206b725ae77Skettenis
207*11efff7fSkettenis
208*11efff7fSkettenis /* Enabling traces. */
209*11efff7fSkettenis #ifndef YYDEBUG
210*11efff7fSkettenis # define YYDEBUG 0
211*11efff7fSkettenis #endif
212*11efff7fSkettenis
213*11efff7fSkettenis /* Enabling verbose error messages. */
214*11efff7fSkettenis #ifdef YYERROR_VERBOSE
215*11efff7fSkettenis # undef YYERROR_VERBOSE
216*11efff7fSkettenis # define YYERROR_VERBOSE 1
217*11efff7fSkettenis #else
218*11efff7fSkettenis # define YYERROR_VERBOSE 0
219*11efff7fSkettenis #endif
220*11efff7fSkettenis
221*11efff7fSkettenis #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
222*11efff7fSkettenis #line 127 "jv-exp.y"
223*11efff7fSkettenis typedef union YYSTYPE {
224b725ae77Skettenis LONGEST lval;
225b725ae77Skettenis struct {
226b725ae77Skettenis LONGEST val;
227b725ae77Skettenis struct type *type;
228b725ae77Skettenis } typed_val_int;
229b725ae77Skettenis struct {
230b725ae77Skettenis DOUBLEST dval;
231b725ae77Skettenis struct type *type;
232b725ae77Skettenis } typed_val_float;
233b725ae77Skettenis struct symbol *sym;
234b725ae77Skettenis struct type *tval;
235b725ae77Skettenis struct stoken sval;
236b725ae77Skettenis struct ttype tsym;
237b725ae77Skettenis struct symtoken ssym;
238b725ae77Skettenis struct block *bval;
239b725ae77Skettenis enum exp_opcode opcode;
240b725ae77Skettenis struct internalvar *ivar;
241b725ae77Skettenis int *ivec;
242*11efff7fSkettenis } YYSTYPE;
243*11efff7fSkettenis /* Line 191 of yacc.c. */
244*11efff7fSkettenis # define yystype YYSTYPE /* obsolescent; will be withdrawn */
245*11efff7fSkettenis # define YYSTYPE_IS_DECLARED 1
246b725ae77Skettenis # define YYSTYPE_IS_TRIVIAL 1
247b725ae77Skettenis #endif
248*11efff7fSkettenis
249*11efff7fSkettenis
250*11efff7fSkettenis
251*11efff7fSkettenis /* Copy the second part of user declarations. */
252b725ae77Skettenis #line 148 "jv-exp.y"
253b725ae77Skettenis
254b725ae77Skettenis /* YYSTYPE gets defined by %union */
255b725ae77Skettenis static int parse_number (char *, int, int, YYSTYPE *);
256*11efff7fSkettenis
257*11efff7fSkettenis
258*11efff7fSkettenis /* Line 214 of yacc.c. */
259*11efff7fSkettenis
260*11efff7fSkettenis #if ! defined (yyoverflow) || YYERROR_VERBOSE
261*11efff7fSkettenis
262*11efff7fSkettenis # ifndef YYFREE
263*11efff7fSkettenis # define YYFREE free
264*11efff7fSkettenis # endif
265*11efff7fSkettenis # ifndef YYMALLOC
266*11efff7fSkettenis # define YYMALLOC xmalloc
267b725ae77Skettenis # endif
268b725ae77Skettenis
269*11efff7fSkettenis /* The parser invokes alloca or xmalloc; define the necessary symbols. */
270*11efff7fSkettenis
271*11efff7fSkettenis # ifdef YYSTACK_USE_ALLOCA
272*11efff7fSkettenis # if YYSTACK_USE_ALLOCA
273*11efff7fSkettenis # define YYSTACK_ALLOC alloca
274*11efff7fSkettenis # endif
275*11efff7fSkettenis # else
276*11efff7fSkettenis # if defined (alloca) || defined (_ALLOCA_H)
277*11efff7fSkettenis # define YYSTACK_ALLOC alloca
278*11efff7fSkettenis # else
279*11efff7fSkettenis # ifdef __GNUC__
280*11efff7fSkettenis # define YYSTACK_ALLOC __builtin_alloca
281*11efff7fSkettenis # endif
282*11efff7fSkettenis # endif
283*11efff7fSkettenis # endif
284*11efff7fSkettenis
285*11efff7fSkettenis # ifdef YYSTACK_ALLOC
286*11efff7fSkettenis /* Pacify GCC's `empty if-body' warning. */
287*11efff7fSkettenis # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
288*11efff7fSkettenis # else
289*11efff7fSkettenis # if defined (__STDC__) || defined (__cplusplus)
290*11efff7fSkettenis # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
291*11efff7fSkettenis # define YYSIZE_T size_t
292*11efff7fSkettenis # endif
293*11efff7fSkettenis # define YYSTACK_ALLOC YYMALLOC
294*11efff7fSkettenis # define YYSTACK_FREE YYFREE
295*11efff7fSkettenis # endif
296*11efff7fSkettenis #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
297b725ae77Skettenis
298b725ae77Skettenis
299*11efff7fSkettenis #if (! defined (yyoverflow) \
300*11efff7fSkettenis && (! defined (__cplusplus) \
301*11efff7fSkettenis || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
302b725ae77Skettenis
303*11efff7fSkettenis /* A type that is properly aligned for any stack member. */
304*11efff7fSkettenis union yyalloc
305*11efff7fSkettenis {
306*11efff7fSkettenis short yyss;
307*11efff7fSkettenis YYSTYPE yyvs;
308*11efff7fSkettenis };
309b725ae77Skettenis
310*11efff7fSkettenis /* The size of the maximum gap between one aligned stack and the next. */
311*11efff7fSkettenis # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
312*11efff7fSkettenis
313*11efff7fSkettenis /* The size of an array large to enough to hold all stacks, each with
314*11efff7fSkettenis N elements. */
315*11efff7fSkettenis # define YYSTACK_BYTES(N) \
316*11efff7fSkettenis ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
317*11efff7fSkettenis + YYSTACK_GAP_MAXIMUM)
318*11efff7fSkettenis
319*11efff7fSkettenis /* Copy COUNT objects from FROM to TO. The source and destination do
320*11efff7fSkettenis not overlap. */
321*11efff7fSkettenis # ifndef YYCOPY
322*11efff7fSkettenis # if defined (__GNUC__) && 1 < __GNUC__
323*11efff7fSkettenis # define YYCOPY(To, From, Count) \
324*11efff7fSkettenis __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
325*11efff7fSkettenis # else
326*11efff7fSkettenis # define YYCOPY(To, From, Count) \
327*11efff7fSkettenis do \
328*11efff7fSkettenis { \
329*11efff7fSkettenis register YYSIZE_T yyi; \
330*11efff7fSkettenis for (yyi = 0; yyi < (Count); yyi++) \
331*11efff7fSkettenis (To)[yyi] = (From)[yyi]; \
332*11efff7fSkettenis } \
333*11efff7fSkettenis while (0)
334*11efff7fSkettenis # endif
335*11efff7fSkettenis # endif
336*11efff7fSkettenis
337*11efff7fSkettenis /* Relocate STACK from its old location to the new one. The
338*11efff7fSkettenis local variables YYSIZE and YYSTACKSIZE give the old and new number of
339*11efff7fSkettenis elements in the stack, and YYPTR gives the new location of the
340*11efff7fSkettenis stack. Advance YYPTR to a properly aligned location for the next
341*11efff7fSkettenis stack. */
342*11efff7fSkettenis # define YYSTACK_RELOCATE(Stack) \
343*11efff7fSkettenis do \
344*11efff7fSkettenis { \
345*11efff7fSkettenis YYSIZE_T yynewbytes; \
346*11efff7fSkettenis YYCOPY (&yyptr->Stack, Stack, yysize); \
347*11efff7fSkettenis Stack = &yyptr->Stack; \
348*11efff7fSkettenis yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
349*11efff7fSkettenis yyptr += yynewbytes / sizeof (*yyptr); \
350*11efff7fSkettenis } \
351*11efff7fSkettenis while (0)
352*11efff7fSkettenis
353*11efff7fSkettenis #endif
354*11efff7fSkettenis
355*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
356*11efff7fSkettenis typedef signed char yysigned_char;
357*11efff7fSkettenis #else
358*11efff7fSkettenis typedef short yysigned_char;
359*11efff7fSkettenis #endif
360*11efff7fSkettenis
361*11efff7fSkettenis /* YYFINAL -- State number of the termination state. */
362*11efff7fSkettenis #define YYFINAL 98
363*11efff7fSkettenis /* YYLAST -- Last index in YYTABLE. */
364*11efff7fSkettenis #define YYLAST 373
365*11efff7fSkettenis
366*11efff7fSkettenis /* YYNTOKENS -- Number of terminals. */
367*11efff7fSkettenis #define YYNTOKENS 56
368*11efff7fSkettenis /* YYNNTS -- Number of nonterminals. */
369*11efff7fSkettenis #define YYNNTS 58
370*11efff7fSkettenis /* YYNRULES -- Number of rules. */
371*11efff7fSkettenis #define YYNRULES 132
372*11efff7fSkettenis /* YYNRULES -- Number of states. */
373*11efff7fSkettenis #define YYNSTATES 209
374*11efff7fSkettenis
375*11efff7fSkettenis /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
376*11efff7fSkettenis #define YYUNDEFTOK 2
377*11efff7fSkettenis #define YYMAXUTOK 287
378*11efff7fSkettenis
379*11efff7fSkettenis #define YYTRANSLATE(YYX) \
380*11efff7fSkettenis ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
381*11efff7fSkettenis
382*11efff7fSkettenis /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
383*11efff7fSkettenis static const unsigned char yytranslate[] =
384b725ae77Skettenis {
385b725ae77Skettenis 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
386b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
387b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
388b725ae77Skettenis 2, 2, 2, 54, 2, 2, 2, 43, 30, 2,
389b725ae77Skettenis 48, 49, 41, 39, 23, 40, 46, 42, 2, 2,
390b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 55, 2,
391b725ae77Skettenis 33, 24, 34, 25, 2, 2, 2, 2, 2, 2,
392b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
393b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
394b725ae77Skettenis 2, 47, 2, 52, 29, 2, 2, 2, 2, 2,
395b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
396b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
397b725ae77Skettenis 2, 2, 2, 50, 28, 51, 53, 2, 2, 2,
398b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
399b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
400b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
401b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
402b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
403b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
404b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
405b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
406b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
407b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
408b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
409b725ae77Skettenis 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
410*11efff7fSkettenis 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
411*11efff7fSkettenis 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
412*11efff7fSkettenis 15, 16, 17, 18, 19, 20, 21, 22, 26, 27,
413*11efff7fSkettenis 31, 32, 35, 36, 37, 38, 44, 45
414b725ae77Skettenis };
415b725ae77Skettenis
416b725ae77Skettenis #if YYDEBUG
417*11efff7fSkettenis /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
418*11efff7fSkettenis YYRHS. */
419*11efff7fSkettenis static const unsigned short yyprhs[] =
420b725ae77Skettenis {
421*11efff7fSkettenis 0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
422*11efff7fSkettenis 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
423*11efff7fSkettenis 39, 41, 43, 45, 47, 49, 51, 54, 57, 59,
424*11efff7fSkettenis 61, 63, 65, 67, 69, 73, 75, 79, 81, 83,
425*11efff7fSkettenis 85, 89, 91, 93, 95, 97, 101, 103, 105, 111,
426*11efff7fSkettenis 113, 117, 118, 120, 125, 130, 132, 135, 139, 142,
427*11efff7fSkettenis 146, 148, 149, 153, 157, 160, 161, 166, 173, 180,
428*11efff7fSkettenis 185, 190, 195, 197, 199, 201, 203, 205, 208, 211,
429*11efff7fSkettenis 213, 215, 218, 221, 224, 226, 229, 232, 234, 237,
430*11efff7fSkettenis 240, 242, 248, 253, 259, 261, 265, 269, 273, 275,
431*11efff7fSkettenis 279, 283, 285, 289, 293, 295, 299, 303, 307, 311,
432*11efff7fSkettenis 313, 317, 321, 323, 327, 329, 333, 335, 339, 341,
433*11efff7fSkettenis 345, 347, 351, 353, 359, 361, 363, 367, 371, 373,
434*11efff7fSkettenis 375, 377, 379
435b725ae77Skettenis };
436b725ae77Skettenis
437*11efff7fSkettenis /* YYRHS -- A `-1'-separated list of the rules' RHS. */
438*11efff7fSkettenis static const yysigned_char yyrhs[] =
439*11efff7fSkettenis {
440*11efff7fSkettenis 57, 0, -1, 73, -1, 58, -1, 59, -1, 62,
441*11efff7fSkettenis -1, 68, -1, 6, -1, 3, -1, 9, -1, 4,
442*11efff7fSkettenis -1, 7, -1, 60, -1, 63, -1, 16, -1, 64,
443*11efff7fSkettenis -1, 65, -1, 13, -1, 12, -1, 14, -1, 11,
444*11efff7fSkettenis -1, 15, -1, 18, -1, 17, -1, 69, -1, 66,
445*11efff7fSkettenis -1, 62, 84, -1, 69, 84, -1, 5, -1, 72,
446*11efff7fSkettenis -1, 71, -1, 72, -1, 5, -1, 9, -1, 69,
447*11efff7fSkettenis 46, 71, -1, 113, -1, 73, 23, 113, -1, 75,
448*11efff7fSkettenis -1, 81, -1, 61, -1, 48, 113, 49, -1, 78,
449*11efff7fSkettenis -1, 86, -1, 88, -1, 90, -1, 76, 79, 77,
450*11efff7fSkettenis -1, 50, -1, 51, -1, 22, 67, 48, 80, 49,
451*11efff7fSkettenis -1, 113, -1, 79, 23, 113, -1, -1, 79, -1,
452*11efff7fSkettenis 22, 62, 82, 85, -1, 22, 66, 82, 85, -1,
453*11efff7fSkettenis 83, -1, 82, 83, -1, 47, 113, 52, -1, 47,
454*11efff7fSkettenis 52, -1, 84, 47, 52, -1, 84, -1, -1, 74,
455*11efff7fSkettenis 46, 71, -1, 19, 46, 71, -1, 69, 48, -1,
456*11efff7fSkettenis -1, 87, 89, 80, 49, -1, 74, 46, 71, 48,
457*11efff7fSkettenis 80, 49, -1, 21, 46, 71, 48, 80, 49, -1,
458*11efff7fSkettenis 69, 47, 113, 52, -1, 19, 47, 113, 52, -1,
459*11efff7fSkettenis 75, 47, 113, 52, -1, 74, -1, 69, -1, 19,
460*11efff7fSkettenis -1, 92, -1, 93, -1, 91, 45, -1, 91, 44,
461*11efff7fSkettenis -1, 95, -1, 96, -1, 39, 94, -1, 40, 94,
462*11efff7fSkettenis -1, 41, 94, -1, 97, -1, 45, 94, -1, 44,
463*11efff7fSkettenis 94, -1, 91, -1, 53, 94, -1, 54, 94, -1,
464*11efff7fSkettenis 98, -1, 48, 62, 85, 49, 94, -1, 48, 113,
465*11efff7fSkettenis 49, 97, -1, 48, 69, 84, 49, 97, -1, 94,
466*11efff7fSkettenis -1, 99, 41, 94, -1, 99, 42, 94, -1, 99,
467*11efff7fSkettenis 43, 94, -1, 99, -1, 100, 39, 99, -1, 100,
468*11efff7fSkettenis 40, 99, -1, 100, -1, 101, 38, 100, -1, 101,
469*11efff7fSkettenis 37, 100, -1, 101, -1, 102, 33, 101, -1, 102,
470*11efff7fSkettenis 34, 101, -1, 102, 36, 101, -1, 102, 35, 101,
471*11efff7fSkettenis -1, 102, -1, 103, 32, 102, -1, 103, 31, 102,
472*11efff7fSkettenis -1, 103, -1, 104, 30, 103, -1, 104, -1, 105,
473*11efff7fSkettenis 29, 104, -1, 105, -1, 106, 28, 105, -1, 106,
474*11efff7fSkettenis -1, 107, 27, 106, -1, 107, -1, 108, 26, 107,
475*11efff7fSkettenis -1, 108, -1, 108, 25, 113, 55, 109, -1, 109,
476*11efff7fSkettenis -1, 111, -1, 112, 24, 109, -1, 112, 20, 109,
477*11efff7fSkettenis -1, 70, -1, 19, -1, 86, -1, 90, -1, 110,
478*11efff7fSkettenis -1
479*11efff7fSkettenis };
480b725ae77Skettenis
481b725ae77Skettenis /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
482*11efff7fSkettenis static const unsigned short yyrline[] =
483b725ae77Skettenis {
484*11efff7fSkettenis 0, 204, 204, 205, 208, 217, 218, 222, 231, 236,
485*11efff7fSkettenis 244, 249, 254, 265, 266, 271, 272, 276, 278, 280,
486*11efff7fSkettenis 282, 284, 289, 291, 303, 308, 312, 314, 319, 320,
487*11efff7fSkettenis 324, 325, 329, 330, 334, 357, 358, 363, 364, 368,
488*11efff7fSkettenis 369, 370, 371, 372, 373, 374, 382, 387, 392, 398,
489*11efff7fSkettenis 400, 406, 407, 411, 414, 420, 421, 425, 429, 431,
490*11efff7fSkettenis 436, 438, 442, 444, 450, 456, 455, 461, 463, 468,
491*11efff7fSkettenis 485, 487, 492, 493, 495, 497, 498, 502, 507, 512,
492*11efff7fSkettenis 513, 514, 515, 517, 519, 523, 528, 533, 534, 536,
493*11efff7fSkettenis 538, 542, 546, 567, 575, 576, 578, 580, 585, 586,
494*11efff7fSkettenis 588, 593, 594, 596, 602, 603, 605, 607, 609, 615,
495*11efff7fSkettenis 616, 618, 623, 624, 629, 630, 634, 635, 640, 641,
496*11efff7fSkettenis 646, 647, 652, 653, 658, 659, 663, 665, 672, 674,
497*11efff7fSkettenis 676, 677, 682
498b725ae77Skettenis };
499b725ae77Skettenis #endif
500b725ae77Skettenis
501*11efff7fSkettenis #if YYDEBUG || YYERROR_VERBOSE
502*11efff7fSkettenis /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
503*11efff7fSkettenis First, the terminals, then, starting at YYNTOKENS, nonterminals. */
504b725ae77Skettenis static const char *const yytname[] =
505b725ae77Skettenis {
506*11efff7fSkettenis "$end", "error", "$undefined", "INTEGER_LITERAL",
507*11efff7fSkettenis "FLOATING_POINT_LITERAL", "IDENTIFIER", "STRING_LITERAL",
508*11efff7fSkettenis "BOOLEAN_LITERAL", "TYPENAME", "NAME_OR_INT", "ERROR", "LONG", "SHORT",
509*11efff7fSkettenis "BYTE", "INT", "CHAR", "BOOLEAN", "DOUBLE", "FLOAT", "VARIABLE",
510*11efff7fSkettenis "ASSIGN_MODIFY", "SUPER", "NEW", "','", "'='", "'?'", "OROR", "ANDAND",
511*11efff7fSkettenis "'|'", "'^'", "'&'", "NOTEQUAL", "EQUAL", "'<'", "'>'", "GEQ", "LEQ",
512*11efff7fSkettenis "RSH", "LSH", "'+'", "'-'", "'*'", "'/'", "'%'", "DECREMENT",
513*11efff7fSkettenis "INCREMENT", "'.'", "'['", "'('", "')'", "'{'", "'}'", "']'", "'~'",
514*11efff7fSkettenis "'!'", "':'", "$accept", "start", "type_exp", "PrimitiveOrArrayType",
515*11efff7fSkettenis "StringLiteral", "Literal", "PrimitiveType", "NumericType",
516*11efff7fSkettenis "IntegralType", "FloatingPointType", "ClassOrInterfaceType", "ClassType",
517*11efff7fSkettenis "ArrayType", "Name", "ForcedName", "SimpleName", "QualifiedName", "exp1",
518*11efff7fSkettenis "Primary", "PrimaryNoNewArray", "lcurly", "rcurly",
519*11efff7fSkettenis "ClassInstanceCreationExpression", "ArgumentList", "ArgumentList_opt",
520*11efff7fSkettenis "ArrayCreationExpression", "DimExprs", "DimExpr", "Dims", "Dims_opt",
521*11efff7fSkettenis "FieldAccess", "FuncStart", "MethodInvocation", "@1", "ArrayAccess",
522b725ae77Skettenis "PostfixExpression", "PostIncrementExpression",
523b725ae77Skettenis "PostDecrementExpression", "UnaryExpression", "PreIncrementExpression",
524b725ae77Skettenis "PreDecrementExpression", "UnaryExpressionNotPlusMinus",
525b725ae77Skettenis "CastExpression", "MultiplicativeExpression", "AdditiveExpression",
526b725ae77Skettenis "ShiftExpression", "RelationalExpression", "EqualityExpression",
527b725ae77Skettenis "AndExpression", "ExclusiveOrExpression", "InclusiveOrExpression",
528b725ae77Skettenis "ConditionalAndExpression", "ConditionalOrExpression",
529b725ae77Skettenis "ConditionalExpression", "AssignmentExpression", "Assignment",
530b725ae77Skettenis "LeftHandSide", "Expression", 0
531b725ae77Skettenis };
532b725ae77Skettenis #endif
533b725ae77Skettenis
534*11efff7fSkettenis # ifdef YYPRINT
535*11efff7fSkettenis /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
536*11efff7fSkettenis token YYLEX-NUM. */
537*11efff7fSkettenis static const unsigned short yytoknum[] =
538b725ae77Skettenis {
539*11efff7fSkettenis 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
540*11efff7fSkettenis 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
541*11efff7fSkettenis 275, 276, 277, 44, 61, 63, 278, 279, 124, 94,
542*11efff7fSkettenis 38, 280, 281, 60, 62, 282, 283, 284, 285, 43,
543*11efff7fSkettenis 45, 42, 47, 37, 286, 287, 46, 91, 40, 41,
544*11efff7fSkettenis 123, 125, 93, 126, 33, 58
545*11efff7fSkettenis };
546*11efff7fSkettenis # endif
547*11efff7fSkettenis
548*11efff7fSkettenis /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
549*11efff7fSkettenis static const unsigned char yyr1[] =
550*11efff7fSkettenis {
551*11efff7fSkettenis 0, 56, 57, 57, 58, 59, 59, 60, 61, 61,
552*11efff7fSkettenis 61, 61, 61, 62, 62, 63, 63, 64, 64, 64,
553*11efff7fSkettenis 64, 64, 65, 65, 66, 67, 68, 68, 69, 69,
554*11efff7fSkettenis 70, 70, 71, 71, 72, 73, 73, 74, 74, 75,
555*11efff7fSkettenis 75, 75, 75, 75, 75, 75, 76, 77, 78, 79,
556*11efff7fSkettenis 79, 80, 80, 81, 81, 82, 82, 83, 84, 84,
557*11efff7fSkettenis 85, 85, 86, 86, 87, 89, 88, 88, 88, 90,
558*11efff7fSkettenis 90, 90, 91, 91, 91, 91, 91, 92, 93, 94,
559*11efff7fSkettenis 94, 94, 94, 94, 94, 95, 96, 97, 97, 97,
560*11efff7fSkettenis 97, 98, 98, 98, 99, 99, 99, 99, 100, 100,
561*11efff7fSkettenis 100, 101, 101, 101, 102, 102, 102, 102, 102, 103,
562*11efff7fSkettenis 103, 103, 104, 104, 105, 105, 106, 106, 107, 107,
563*11efff7fSkettenis 108, 108, 109, 109, 110, 110, 111, 111, 112, 112,
564*11efff7fSkettenis 112, 112, 113
565b725ae77Skettenis };
566b725ae77Skettenis
567b725ae77Skettenis /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
568*11efff7fSkettenis static const unsigned char yyr2[] =
569b725ae77Skettenis {
570*11efff7fSkettenis 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
571b725ae77Skettenis 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
572*11efff7fSkettenis 1, 1, 1, 1, 1, 1, 2, 2, 1, 1,
573*11efff7fSkettenis 1, 1, 1, 1, 3, 1, 3, 1, 1, 1,
574*11efff7fSkettenis 3, 1, 1, 1, 1, 3, 1, 1, 5, 1,
575*11efff7fSkettenis 3, 0, 1, 4, 4, 1, 2, 3, 2, 3,
576*11efff7fSkettenis 1, 0, 3, 3, 2, 0, 4, 6, 6, 4,
577*11efff7fSkettenis 4, 4, 1, 1, 1, 1, 1, 2, 2, 1,
578*11efff7fSkettenis 1, 2, 2, 2, 1, 2, 2, 1, 2, 2,
579*11efff7fSkettenis 1, 5, 4, 5, 1, 3, 3, 3, 1, 3,
580*11efff7fSkettenis 3, 1, 3, 3, 1, 3, 3, 3, 3, 1,
581*11efff7fSkettenis 3, 3, 1, 3, 1, 3, 1, 3, 1, 3,
582*11efff7fSkettenis 1, 3, 1, 5, 1, 1, 3, 3, 1, 1,
583*11efff7fSkettenis 1, 1, 1
584b725ae77Skettenis };
585b725ae77Skettenis
586*11efff7fSkettenis /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
587*11efff7fSkettenis STATE-NUM when YYTABLE doesn't specify something else to do. Zero
588*11efff7fSkettenis means the default is an error. */
589*11efff7fSkettenis static const unsigned char yydefact[] =
590b725ae77Skettenis {
591*11efff7fSkettenis 0, 8, 10, 28, 7, 11, 9, 20, 18, 17,
592*11efff7fSkettenis 19, 21, 14, 23, 22, 74, 0, 0, 0, 0,
593*11efff7fSkettenis 0, 0, 0, 0, 46, 0, 0, 0, 3, 4,
594*11efff7fSkettenis 12, 39, 5, 13, 15, 16, 6, 73, 128, 30,
595*11efff7fSkettenis 29, 2, 72, 37, 0, 41, 38, 42, 65, 43,
596*11efff7fSkettenis 44, 87, 75, 76, 94, 79, 80, 84, 90, 98,
597*11efff7fSkettenis 101, 104, 109, 112, 114, 116, 118, 120, 122, 124,
598*11efff7fSkettenis 132, 125, 0, 35, 0, 0, 0, 28, 0, 25,
599*11efff7fSkettenis 0, 24, 29, 9, 74, 73, 42, 44, 81, 82,
600*11efff7fSkettenis 83, 86, 85, 61, 73, 0, 88, 89, 1, 0,
601*11efff7fSkettenis 26, 0, 0, 64, 27, 0, 0, 0, 0, 49,
602*11efff7fSkettenis 51, 78, 77, 0, 0, 0, 0, 0, 0, 0,
603b725ae77Skettenis 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
604*11efff7fSkettenis 0, 0, 0, 0, 32, 33, 63, 0, 0, 0,
605*11efff7fSkettenis 61, 55, 61, 51, 0, 60, 0, 0, 40, 58,
606*11efff7fSkettenis 0, 34, 0, 36, 62, 0, 0, 47, 45, 52,
607*11efff7fSkettenis 0, 95, 96, 97, 99, 100, 103, 102, 105, 106,
608*11efff7fSkettenis 108, 107, 111, 110, 113, 115, 117, 119, 0, 121,
609*11efff7fSkettenis 127, 126, 70, 51, 0, 0, 56, 53, 54, 0,
610*11efff7fSkettenis 0, 0, 92, 59, 69, 51, 71, 50, 66, 0,
611*11efff7fSkettenis 0, 57, 48, 91, 93, 0, 123, 68, 67
612b725ae77Skettenis };
613b725ae77Skettenis
614*11efff7fSkettenis /* YYDEFGOTO[NTERM-NUM]. */
615b725ae77Skettenis static const short yydefgoto[] =
616b725ae77Skettenis {
617*11efff7fSkettenis -1, 27, 28, 29, 30, 31, 32, 33, 34, 35,
618*11efff7fSkettenis 79, 80, 36, 85, 38, 39, 82, 41, 42, 43,
619*11efff7fSkettenis 44, 158, 45, 159, 160, 46, 140, 141, 145, 146,
620*11efff7fSkettenis 86, 48, 49, 110, 87, 51, 52, 53, 54, 55,
621*11efff7fSkettenis 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
622*11efff7fSkettenis 66, 67, 68, 69, 70, 71, 72, 109
623b725ae77Skettenis };
624b725ae77Skettenis
625*11efff7fSkettenis /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
626*11efff7fSkettenis STATE-NUM. */
627*11efff7fSkettenis #define YYPACT_NINF -145
628b725ae77Skettenis static const short yypact[] =
629b725ae77Skettenis {
630*11efff7fSkettenis 215, -145, -145, -5, -145, -145, 1, -145, -145, -145,
631*11efff7fSkettenis -145, -145, -145, -145, -145, -7, -19, 279, 50, 50,
632*11efff7fSkettenis 50, 50, 50, 215, -145, 50, 50, 46, -145, -145,
633*11efff7fSkettenis -145, -145, -9, -145, -145, -145, -145, 87, -145, -145,
634*11efff7fSkettenis 12, 44, 5, 16, 319, -145, -145, 28, -145, -145,
635*11efff7fSkettenis 38, 29, -145, -145, -145, -145, -145, -145, -145, 99,
636*11efff7fSkettenis 53, 85, 52, 94, 66, 41, 71, 74, 122, -145,
637*11efff7fSkettenis -145, -145, 40, -145, 26, 319, 26, -145, 59, 59,
638*11efff7fSkettenis 67, 82, -145, -145, 111, 107, -145, -145, -145, -145,
639*11efff7fSkettenis -145, -145, -145, -9, 87, 68, -145, -145, -145, 79,
640*11efff7fSkettenis 91, 26, 267, -145, 91, 319, 26, 319, -18, -145,
641*11efff7fSkettenis 319, -145, -145, 50, 50, 50, 50, 50, 50, 50,
642*11efff7fSkettenis 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
643*11efff7fSkettenis 319, 50, 50, 50, -145, -145, -145, 112, 126, 319,
644*11efff7fSkettenis 128, -145, 128, 319, 319, 91, 127, -31, 193, -145,
645*11efff7fSkettenis 125, -145, 129, -145, 131, 130, 319, -145, -145, 157,
646*11efff7fSkettenis 135, -145, -145, -145, 99, 99, 53, 53, 85, 85,
647*11efff7fSkettenis 85, 85, 52, 52, 94, 66, 41, 71, 132, 74,
648*11efff7fSkettenis -145, -145, -145, 319, 134, 267, -145, -145, -145, 139,
649*11efff7fSkettenis 50, 193, -145, -145, -145, 319, -145, -145, -145, 50,
650*11efff7fSkettenis 141, -145, -145, -145, -145, 144, -145, -145, -145
651b725ae77Skettenis };
652b725ae77Skettenis
653*11efff7fSkettenis /* YYPGOTO[NTERM-NUM]. */
654b725ae77Skettenis static const short yypgoto[] =
655b725ae77Skettenis {
656*11efff7fSkettenis -145, -145, -145, -145, -145, -145, -3, -145, -145, -145,
657*11efff7fSkettenis -145, -145, -145, 11, -145, -64, 0, -145, -145, -145,
658*11efff7fSkettenis -145, -145, -145, 150, -134, -145, 124, -116, -29, -99,
659*11efff7fSkettenis 6, -145, -145, -145, 22, -145, -145, -145, 58, -145,
660*11efff7fSkettenis -145, -144, -145, 43, 49, -2, 45, 78, 81, 83,
661*11efff7fSkettenis 77, 92, -145, -131, -145, -145, -145, 7
662b725ae77Skettenis };
663b725ae77Skettenis
664*11efff7fSkettenis /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
665*11efff7fSkettenis positive, shift that token. If negative, reduce the rule which
666*11efff7fSkettenis number is the opposite. If zero, do what YYDEFACT says.
667*11efff7fSkettenis If YYTABLE_NINF, syntax error. */
668*11efff7fSkettenis #define YYTABLE_NINF -132
669b725ae77Skettenis static const short yytable[] =
670b725ae77Skettenis {
671*11efff7fSkettenis 40, 180, 181, 100, 192, 156, 47, 73, 104, 189,
672*11efff7fSkettenis 136, 37, 138, -129, 78, -32, 150, -129, 191, -32,
673*11efff7fSkettenis 93, -33, 50, 40, 186, -33, 186, 76, 81, 47,
674*11efff7fSkettenis 95, 134, -31, 157, 94, 135, -31, 151, 99, 74,
675*11efff7fSkettenis 75, 187, 154, 188, 40, 50, 98, 204, -130, 200,
676*11efff7fSkettenis 47, 106, -130, 1, 2, 77, 4, 5, -131, 83,
677*11efff7fSkettenis 132, 205, -131, 107, 133, 147, 50, 105, 206, 84,
678*11efff7fSkettenis 127, 16, 17, 111, 112, 40, 88, 89, 90, 91,
679*11efff7fSkettenis 92, 47, 137, 96, 97, 120, 121, 122, 123, 18,
680*11efff7fSkettenis 19, 20, 116, 117, 21, 22, 126, 50, 23, 128,
681*11efff7fSkettenis 24, 129, 40, 25, 26, 40, 139, 40, 47, 152,
682*11efff7fSkettenis 40, 47, 153, 47, 155, 143, 47, 148, 168, 169,
683*11efff7fSkettenis 170, 171, 118, 119, 50, 124, 125, 50, 101, 50,
684*11efff7fSkettenis 40, 149, 50, 101, 102, 103, 47, 178, 150, 40,
685*11efff7fSkettenis 113, 114, 115, 40, 40, 47, 184, 130, 131, 47,
686*11efff7fSkettenis 47, 152, 50, 101, 144, 103, 40, 74, 75, 164,
687*11efff7fSkettenis 165, 50, 47, 197, 182, 50, 50, 166, 167, 172,
688*11efff7fSkettenis 173, 161, 162, 163, 183, 185, 190, 193, 50, 195,
689*11efff7fSkettenis 156, 194, 196, 40, 198, 40, 201, 199, 202, 47,
690*11efff7fSkettenis 207, 47, 184, 208, 108, 40, 1, 2, 77, 4,
691*11efff7fSkettenis 5, 47, 83, 142, 174, 50, 177, 50, 175, 0,
692*11efff7fSkettenis 0, 176, 84, 0, 16, 17, 0, 50, 1, 2,
693*11efff7fSkettenis 3, 4, 5, 179, 6, 0, 7, 8, 9, 10,
694*11efff7fSkettenis 11, 12, 13, 14, 15, 0, 16, 17, 0, 0,
695*11efff7fSkettenis 0, 23, 0, 24, 0, 0, 25, 26, 203, 0,
696*11efff7fSkettenis 0, 0, 0, 0, 18, 19, 20, 0, 0, 21,
697*11efff7fSkettenis 22, 0, 0, 23, 0, 24, 0, 0, 25, 26,
698*11efff7fSkettenis 1, 2, 3, 4, 5, 0, 6, 0, 0, 0,
699*11efff7fSkettenis 0, 0, 0, 0, 77, 0, 15, 0, 16, 17,
700*11efff7fSkettenis 7, 8, 9, 10, 11, 12, 13, 14, 0, 0,
701*11efff7fSkettenis 0, 0, 0, 0, 0, 0, 18, 19, 20, 0,
702*11efff7fSkettenis 0, 21, 22, 0, 0, 23, 0, 24, 0, 149,
703*11efff7fSkettenis 25, 26, 1, 2, 3, 4, 5, 0, 6, 0,
704*11efff7fSkettenis 0, 0, 0, 0, 0, 0, 0, 0, 15, 0,
705*11efff7fSkettenis 16, 17, 0, 0, 0, 0, 0, 0, 0, 0,
706*11efff7fSkettenis 0, 0, 0, 0, 0, 0, 0, 0, 18, 19,
707*11efff7fSkettenis 20, 0, 0, 21, 22, 0, 0, 23, 0, 24,
708*11efff7fSkettenis 0, 0, 25, 26
709b725ae77Skettenis };
710b725ae77Skettenis
711b725ae77Skettenis static const short yycheck[] =
712b725ae77Skettenis {
713*11efff7fSkettenis 0, 132, 133, 32, 148, 23, 0, 0, 37, 143,
714*11efff7fSkettenis 74, 0, 76, 20, 17, 20, 47, 24, 49, 24,
715*11efff7fSkettenis 23, 20, 0, 23, 140, 24, 142, 46, 17, 23,
716*11efff7fSkettenis 23, 5, 20, 51, 23, 9, 24, 101, 47, 46,
717*11efff7fSkettenis 47, 140, 106, 142, 44, 23, 0, 191, 20, 183,
718*11efff7fSkettenis 44, 46, 24, 3, 4, 5, 6, 7, 20, 9,
719*11efff7fSkettenis 20, 195, 24, 47, 24, 94, 44, 23, 199, 19,
720*11efff7fSkettenis 29, 21, 22, 44, 45, 75, 18, 19, 20, 21,
721*11efff7fSkettenis 22, 75, 75, 25, 26, 33, 34, 35, 36, 39,
722*11efff7fSkettenis 40, 41, 39, 40, 44, 45, 30, 75, 48, 28,
723*11efff7fSkettenis 50, 27, 102, 53, 54, 105, 47, 107, 102, 102,
724*11efff7fSkettenis 110, 105, 105, 107, 107, 48, 110, 49, 120, 121,
725*11efff7fSkettenis 122, 123, 37, 38, 102, 31, 32, 105, 46, 107,
726*11efff7fSkettenis 130, 52, 110, 46, 47, 48, 130, 130, 47, 139,
727*11efff7fSkettenis 41, 42, 43, 143, 144, 139, 139, 25, 26, 143,
728*11efff7fSkettenis 144, 144, 130, 46, 47, 48, 156, 46, 47, 116,
729*11efff7fSkettenis 117, 139, 156, 156, 52, 143, 144, 118, 119, 124,
730*11efff7fSkettenis 125, 113, 114, 115, 48, 47, 49, 52, 156, 48,
731*11efff7fSkettenis 23, 52, 52, 183, 49, 185, 52, 55, 49, 183,
732*11efff7fSkettenis 49, 185, 185, 49, 44, 195, 3, 4, 5, 6,
733*11efff7fSkettenis 7, 195, 9, 79, 126, 183, 129, 185, 127, -1,
734*11efff7fSkettenis -1, 128, 19, -1, 21, 22, -1, 195, 3, 4,
735*11efff7fSkettenis 5, 6, 7, 131, 9, -1, 11, 12, 13, 14,
736*11efff7fSkettenis 15, 16, 17, 18, 19, -1, 21, 22, -1, -1,
737*11efff7fSkettenis -1, 48, -1, 50, -1, -1, 53, 54, 190, -1,
738*11efff7fSkettenis -1, -1, -1, -1, 39, 40, 41, -1, -1, 44,
739*11efff7fSkettenis 45, -1, -1, 48, -1, 50, -1, -1, 53, 54,
740*11efff7fSkettenis 3, 4, 5, 6, 7, -1, 9, -1, -1, -1,
741*11efff7fSkettenis -1, -1, -1, -1, 5, -1, 19, -1, 21, 22,
742*11efff7fSkettenis 11, 12, 13, 14, 15, 16, 17, 18, -1, -1,
743*11efff7fSkettenis -1, -1, -1, -1, -1, -1, 39, 40, 41, -1,
744*11efff7fSkettenis -1, 44, 45, -1, -1, 48, -1, 50, -1, 52,
745*11efff7fSkettenis 53, 54, 3, 4, 5, 6, 7, -1, 9, -1,
746*11efff7fSkettenis -1, -1, -1, -1, -1, -1, -1, -1, 19, -1,
747*11efff7fSkettenis 21, 22, -1, -1, -1, -1, -1, -1, -1, -1,
748*11efff7fSkettenis -1, -1, -1, -1, -1, -1, -1, -1, 39, 40,
749*11efff7fSkettenis 41, -1, -1, 44, 45, -1, -1, 48, -1, 50,
750*11efff7fSkettenis -1, -1, 53, 54
751b725ae77Skettenis };
752b725ae77Skettenis
753*11efff7fSkettenis /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
754*11efff7fSkettenis symbol of state STATE-NUM. */
755*11efff7fSkettenis static const unsigned char yystos[] =
756b725ae77Skettenis {
757*11efff7fSkettenis 0, 3, 4, 5, 6, 7, 9, 11, 12, 13,
758*11efff7fSkettenis 14, 15, 16, 17, 18, 19, 21, 22, 39, 40,
759*11efff7fSkettenis 41, 44, 45, 48, 50, 53, 54, 57, 58, 59,
760*11efff7fSkettenis 60, 61, 62, 63, 64, 65, 68, 69, 70, 71,
761*11efff7fSkettenis 72, 73, 74, 75, 76, 78, 81, 86, 87, 88,
762*11efff7fSkettenis 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
763*11efff7fSkettenis 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
764*11efff7fSkettenis 110, 111, 112, 113, 46, 47, 46, 5, 62, 66,
765*11efff7fSkettenis 67, 69, 72, 9, 19, 69, 86, 90, 94, 94,
766*11efff7fSkettenis 94, 94, 94, 62, 69, 113, 94, 94, 0, 47,
767*11efff7fSkettenis 84, 46, 47, 48, 84, 23, 46, 47, 79, 113,
768*11efff7fSkettenis 89, 44, 45, 41, 42, 43, 39, 40, 37, 38,
769*11efff7fSkettenis 33, 34, 35, 36, 31, 32, 30, 29, 28, 27,
770*11efff7fSkettenis 25, 26, 20, 24, 5, 9, 71, 113, 71, 47,
771*11efff7fSkettenis 82, 83, 82, 48, 47, 84, 85, 84, 49, 52,
772*11efff7fSkettenis 47, 71, 113, 113, 71, 113, 23, 51, 77, 79,
773*11efff7fSkettenis 80, 94, 94, 94, 99, 99, 100, 100, 101, 101,
774*11efff7fSkettenis 101, 101, 102, 102, 103, 104, 105, 106, 113, 107,
775*11efff7fSkettenis 109, 109, 52, 48, 113, 47, 83, 85, 85, 80,
776*11efff7fSkettenis 49, 49, 97, 52, 52, 48, 52, 113, 49, 55,
777*11efff7fSkettenis 80, 52, 49, 94, 97, 80, 109, 49, 49
778b725ae77Skettenis };
779b725ae77Skettenis
780b725ae77Skettenis #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
781b725ae77Skettenis # define YYSIZE_T __SIZE_TYPE__
782b725ae77Skettenis #endif
783b725ae77Skettenis #if ! defined (YYSIZE_T) && defined (size_t)
784b725ae77Skettenis # define YYSIZE_T size_t
785b725ae77Skettenis #endif
786b725ae77Skettenis #if ! defined (YYSIZE_T)
787b725ae77Skettenis # if defined (__STDC__) || defined (__cplusplus)
788b725ae77Skettenis # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
789b725ae77Skettenis # define YYSIZE_T size_t
790b725ae77Skettenis # endif
791b725ae77Skettenis #endif
792b725ae77Skettenis #if ! defined (YYSIZE_T)
793b725ae77Skettenis # define YYSIZE_T unsigned int
794b725ae77Skettenis #endif
795b725ae77Skettenis
796b725ae77Skettenis #define yyerrok (yyerrstatus = 0)
797b725ae77Skettenis #define yyclearin (yychar = YYEMPTY)
798*11efff7fSkettenis #define YYEMPTY (-2)
799b725ae77Skettenis #define YYEOF 0
800*11efff7fSkettenis
801b725ae77Skettenis #define YYACCEPT goto yyacceptlab
802b725ae77Skettenis #define YYABORT goto yyabortlab
803*11efff7fSkettenis #define YYERROR goto yyerrorlab
804*11efff7fSkettenis
805*11efff7fSkettenis
806b725ae77Skettenis /* Like YYERROR except do call yyerror. This remains here temporarily
807b725ae77Skettenis to ease the transition to the new meaning of YYERROR, for GCC.
808b725ae77Skettenis Once GCC version 2 has supplanted version 1, this can go. */
809*11efff7fSkettenis
810b725ae77Skettenis #define YYFAIL goto yyerrlab
811*11efff7fSkettenis
812b725ae77Skettenis #define YYRECOVERING() (!!yyerrstatus)
813*11efff7fSkettenis
814b725ae77Skettenis #define YYBACKUP(Token, Value) \
815b725ae77Skettenis do \
816b725ae77Skettenis if (yychar == YYEMPTY && yylen == 1) \
817b725ae77Skettenis { \
818b725ae77Skettenis yychar = (Token); \
819b725ae77Skettenis yylval = (Value); \
820*11efff7fSkettenis yytoken = YYTRANSLATE (yychar); \
821b725ae77Skettenis YYPOPSTACK; \
822b725ae77Skettenis goto yybackup; \
823b725ae77Skettenis } \
824b725ae77Skettenis else \
825b725ae77Skettenis { \
826b725ae77Skettenis yyerror ("syntax error: cannot back up");\
827b725ae77Skettenis YYERROR; \
828b725ae77Skettenis } \
829b725ae77Skettenis while (0)
830b725ae77Skettenis
831b725ae77Skettenis #define YYTERROR 1
832b725ae77Skettenis #define YYERRCODE 256
833b725ae77Skettenis
834b725ae77Skettenis /* YYLLOC_DEFAULT -- Compute the default location (before the actions
835*11efff7fSkettenis are run). */
836b725ae77Skettenis
837b725ae77Skettenis #ifndef YYLLOC_DEFAULT
838b725ae77Skettenis # define YYLLOC_DEFAULT(Current, Rhs, N) \
839*11efff7fSkettenis ((Current).first_line = (Rhs)[1].first_line, \
840*11efff7fSkettenis (Current).first_column = (Rhs)[1].first_column, \
841*11efff7fSkettenis (Current).last_line = (Rhs)[N].last_line, \
842*11efff7fSkettenis (Current).last_column = (Rhs)[N].last_column)
843b725ae77Skettenis #endif
844b725ae77Skettenis
845b725ae77Skettenis /* YYLEX -- calling `yylex' with the right arguments. */
846b725ae77Skettenis
847b725ae77Skettenis #ifdef YYLEX_PARAM
848*11efff7fSkettenis # define YYLEX yylex (YYLEX_PARAM)
849b725ae77Skettenis #else
850b725ae77Skettenis # define YYLEX yylex ()
851*11efff7fSkettenis #endif
852b725ae77Skettenis
853b725ae77Skettenis /* Enable debugging if requested. */
854b725ae77Skettenis #if YYDEBUG
855b725ae77Skettenis
856b725ae77Skettenis # ifndef YYFPRINTF
857b725ae77Skettenis # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
858b725ae77Skettenis # define YYFPRINTF fprintf
859b725ae77Skettenis # endif
860b725ae77Skettenis
861b725ae77Skettenis # define YYDPRINTF(Args) \
862b725ae77Skettenis do { \
863b725ae77Skettenis if (yydebug) \
864b725ae77Skettenis YYFPRINTF Args; \
865b725ae77Skettenis } while (0)
866*11efff7fSkettenis
867*11efff7fSkettenis # define YYDSYMPRINT(Args) \
868*11efff7fSkettenis do { \
869*11efff7fSkettenis if (yydebug) \
870*11efff7fSkettenis yysymprint Args; \
871*11efff7fSkettenis } while (0)
872*11efff7fSkettenis
873*11efff7fSkettenis # define YYDSYMPRINTF(Title, Token, Value, Location) \
874*11efff7fSkettenis do { \
875*11efff7fSkettenis if (yydebug) \
876*11efff7fSkettenis { \
877*11efff7fSkettenis YYFPRINTF (stderr, "%s ", Title); \
878*11efff7fSkettenis yysymprint (stderr, \
879*11efff7fSkettenis Token, Value); \
880*11efff7fSkettenis YYFPRINTF (stderr, "\n"); \
881*11efff7fSkettenis } \
882*11efff7fSkettenis } while (0)
883*11efff7fSkettenis
884*11efff7fSkettenis /*------------------------------------------------------------------.
885*11efff7fSkettenis | yy_stack_print -- Print the state stack from its BOTTOM up to its |
886*11efff7fSkettenis | TOP (included). |
887*11efff7fSkettenis `------------------------------------------------------------------*/
888*11efff7fSkettenis
889*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
890*11efff7fSkettenis static void
yy_stack_print(short * bottom,short * top)891*11efff7fSkettenis yy_stack_print (short *bottom, short *top)
892*11efff7fSkettenis #else
893*11efff7fSkettenis static void
894*11efff7fSkettenis yy_stack_print (bottom, top)
895*11efff7fSkettenis short *bottom;
896*11efff7fSkettenis short *top;
897*11efff7fSkettenis #endif
898*11efff7fSkettenis {
899*11efff7fSkettenis YYFPRINTF (stderr, "Stack now");
900*11efff7fSkettenis for (/* Nothing. */; bottom <= top; ++bottom)
901*11efff7fSkettenis YYFPRINTF (stderr, " %d", *bottom);
902*11efff7fSkettenis YYFPRINTF (stderr, "\n");
903*11efff7fSkettenis }
904*11efff7fSkettenis
905*11efff7fSkettenis # define YY_STACK_PRINT(Bottom, Top) \
906*11efff7fSkettenis do { \
907*11efff7fSkettenis if (yydebug) \
908*11efff7fSkettenis yy_stack_print ((Bottom), (Top)); \
909*11efff7fSkettenis } while (0)
910*11efff7fSkettenis
911*11efff7fSkettenis
912*11efff7fSkettenis /*------------------------------------------------.
913*11efff7fSkettenis | Report that the YYRULE is going to be reduced. |
914*11efff7fSkettenis `------------------------------------------------*/
915*11efff7fSkettenis
916*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
917*11efff7fSkettenis static void
yy_reduce_print(int yyrule)918*11efff7fSkettenis yy_reduce_print (int yyrule)
919*11efff7fSkettenis #else
920*11efff7fSkettenis static void
921*11efff7fSkettenis yy_reduce_print (yyrule)
922*11efff7fSkettenis int yyrule;
923*11efff7fSkettenis #endif
924*11efff7fSkettenis {
925*11efff7fSkettenis int yyi;
926*11efff7fSkettenis unsigned int yylno = yyrline[yyrule];
927*11efff7fSkettenis YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
928*11efff7fSkettenis yyrule - 1, yylno);
929*11efff7fSkettenis /* Print the symbols being reduced, and their result. */
930*11efff7fSkettenis for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
931*11efff7fSkettenis YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
932*11efff7fSkettenis YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
933*11efff7fSkettenis }
934*11efff7fSkettenis
935*11efff7fSkettenis # define YY_REDUCE_PRINT(Rule) \
936*11efff7fSkettenis do { \
937*11efff7fSkettenis if (yydebug) \
938*11efff7fSkettenis yy_reduce_print (Rule); \
939*11efff7fSkettenis } while (0)
940*11efff7fSkettenis
941b725ae77Skettenis /* Nonzero means print parse trace. It is left uninitialized so that
942b725ae77Skettenis multiple parsers can coexist. */
943b725ae77Skettenis int yydebug;
944b725ae77Skettenis #else /* !YYDEBUG */
945b725ae77Skettenis # define YYDPRINTF(Args)
946*11efff7fSkettenis # define YYDSYMPRINT(Args)
947*11efff7fSkettenis # define YYDSYMPRINTF(Title, Token, Value, Location)
948*11efff7fSkettenis # define YY_STACK_PRINT(Bottom, Top)
949*11efff7fSkettenis # define YY_REDUCE_PRINT(Rule)
950b725ae77Skettenis #endif /* !YYDEBUG */
951b725ae77Skettenis
952*11efff7fSkettenis
953b725ae77Skettenis /* YYINITDEPTH -- initial size of the parser's stacks. */
954b725ae77Skettenis #ifndef YYINITDEPTH
955b725ae77Skettenis # define YYINITDEPTH 200
956b725ae77Skettenis #endif
957b725ae77Skettenis
958b725ae77Skettenis /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
959b725ae77Skettenis if the built-in stack extension method is used).
960b725ae77Skettenis
961b725ae77Skettenis Do not make this value too large; the results are undefined if
962b725ae77Skettenis SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
963b725ae77Skettenis evaluated with infinite-precision integer arithmetic. */
964b725ae77Skettenis
965*11efff7fSkettenis #if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
966b725ae77Skettenis # undef YYMAXDEPTH
967b725ae77Skettenis #endif
968b725ae77Skettenis
969b725ae77Skettenis #ifndef YYMAXDEPTH
970b725ae77Skettenis # define YYMAXDEPTH 10000
971b725ae77Skettenis #endif
972*11efff7fSkettenis
973b725ae77Skettenis
974*11efff7fSkettenis
975*11efff7fSkettenis #if YYERROR_VERBOSE
976b725ae77Skettenis
977b725ae77Skettenis # ifndef yystrlen
978b725ae77Skettenis # if defined (__GLIBC__) && defined (_STRING_H)
979b725ae77Skettenis # define yystrlen strlen
980b725ae77Skettenis # else
981b725ae77Skettenis /* Return the length of YYSTR. */
982b725ae77Skettenis static YYSIZE_T
983b725ae77Skettenis # if defined (__STDC__) || defined (__cplusplus)
yystrlen(const char * yystr)984b725ae77Skettenis yystrlen (const char *yystr)
985b725ae77Skettenis # else
986b725ae77Skettenis yystrlen (yystr)
987b725ae77Skettenis const char *yystr;
988b725ae77Skettenis # endif
989b725ae77Skettenis {
990b725ae77Skettenis register const char *yys = yystr;
991b725ae77Skettenis
992b725ae77Skettenis while (*yys++ != '\0')
993b725ae77Skettenis continue;
994b725ae77Skettenis
995b725ae77Skettenis return yys - yystr - 1;
996b725ae77Skettenis }
997b725ae77Skettenis # endif
998b725ae77Skettenis # endif
999b725ae77Skettenis
1000b725ae77Skettenis # ifndef yystpcpy
1001b725ae77Skettenis # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
1002b725ae77Skettenis # define yystpcpy stpcpy
1003b725ae77Skettenis # else
1004b725ae77Skettenis /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1005b725ae77Skettenis YYDEST. */
1006b725ae77Skettenis static char *
1007b725ae77Skettenis # if defined (__STDC__) || defined (__cplusplus)
yystpcpy(char * yydest,const char * yysrc)1008b725ae77Skettenis yystpcpy (char *yydest, const char *yysrc)
1009b725ae77Skettenis # else
1010b725ae77Skettenis yystpcpy (yydest, yysrc)
1011b725ae77Skettenis char *yydest;
1012b725ae77Skettenis const char *yysrc;
1013b725ae77Skettenis # endif
1014b725ae77Skettenis {
1015b725ae77Skettenis register char *yyd = yydest;
1016b725ae77Skettenis register const char *yys = yysrc;
1017b725ae77Skettenis
1018b725ae77Skettenis while ((*yyd++ = *yys++) != '\0')
1019b725ae77Skettenis continue;
1020b725ae77Skettenis
1021b725ae77Skettenis return yyd - 1;
1022b725ae77Skettenis }
1023b725ae77Skettenis # endif
1024b725ae77Skettenis # endif
1025*11efff7fSkettenis
1026*11efff7fSkettenis #endif /* !YYERROR_VERBOSE */
1027*11efff7fSkettenis
1028b725ae77Skettenis
1029b725ae77Skettenis
1030*11efff7fSkettenis #if YYDEBUG
1031*11efff7fSkettenis /*--------------------------------.
1032*11efff7fSkettenis | Print this symbol on YYOUTPUT. |
1033*11efff7fSkettenis `--------------------------------*/
1034b725ae77Skettenis
1035*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
1036*11efff7fSkettenis static void
yysymprint(FILE * yyoutput,int yytype,YYSTYPE * yyvaluep)1037*11efff7fSkettenis yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
1038*11efff7fSkettenis #else
1039*11efff7fSkettenis static void
1040*11efff7fSkettenis yysymprint (yyoutput, yytype, yyvaluep)
1041*11efff7fSkettenis FILE *yyoutput;
1042*11efff7fSkettenis int yytype;
1043*11efff7fSkettenis YYSTYPE *yyvaluep;
1044*11efff7fSkettenis #endif
1045*11efff7fSkettenis {
1046*11efff7fSkettenis /* Pacify ``unused variable'' warnings. */
1047*11efff7fSkettenis (void) yyvaluep;
1048*11efff7fSkettenis
1049*11efff7fSkettenis if (yytype < YYNTOKENS)
1050*11efff7fSkettenis {
1051*11efff7fSkettenis YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
1052*11efff7fSkettenis # ifdef YYPRINT
1053*11efff7fSkettenis YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
1054*11efff7fSkettenis # endif
1055*11efff7fSkettenis }
1056*11efff7fSkettenis else
1057*11efff7fSkettenis YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
1058*11efff7fSkettenis
1059*11efff7fSkettenis switch (yytype)
1060*11efff7fSkettenis {
1061*11efff7fSkettenis default:
1062*11efff7fSkettenis break;
1063*11efff7fSkettenis }
1064*11efff7fSkettenis YYFPRINTF (yyoutput, ")");
1065*11efff7fSkettenis }
1066*11efff7fSkettenis
1067*11efff7fSkettenis #endif /* ! YYDEBUG */
1068*11efff7fSkettenis /*-----------------------------------------------.
1069*11efff7fSkettenis | Release the memory associated to this symbol. |
1070*11efff7fSkettenis `-----------------------------------------------*/
1071*11efff7fSkettenis
1072*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
1073*11efff7fSkettenis static void
yydestruct(int yytype,YYSTYPE * yyvaluep)1074*11efff7fSkettenis yydestruct (int yytype, YYSTYPE *yyvaluep)
1075*11efff7fSkettenis #else
1076*11efff7fSkettenis static void
1077*11efff7fSkettenis yydestruct (yytype, yyvaluep)
1078*11efff7fSkettenis int yytype;
1079*11efff7fSkettenis YYSTYPE *yyvaluep;
1080*11efff7fSkettenis #endif
1081*11efff7fSkettenis {
1082*11efff7fSkettenis /* Pacify ``unused variable'' warnings. */
1083*11efff7fSkettenis (void) yyvaluep;
1084*11efff7fSkettenis
1085*11efff7fSkettenis switch (yytype)
1086*11efff7fSkettenis {
1087*11efff7fSkettenis
1088*11efff7fSkettenis default:
1089*11efff7fSkettenis break;
1090*11efff7fSkettenis }
1091*11efff7fSkettenis }
1092*11efff7fSkettenis
1093*11efff7fSkettenis
1094*11efff7fSkettenis /* Prevent warnings from -Wmissing-prototypes. */
1095b725ae77Skettenis
1096b725ae77Skettenis #ifdef YYPARSE_PARAM
1097b725ae77Skettenis # if defined (__STDC__) || defined (__cplusplus)
1098*11efff7fSkettenis int yyparse (void *YYPARSE_PARAM);
1099b725ae77Skettenis # else
1100*11efff7fSkettenis int yyparse ();
1101b725ae77Skettenis # endif
1102b725ae77Skettenis #else /* ! YYPARSE_PARAM */
1103*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
1104*11efff7fSkettenis int yyparse (void);
1105*11efff7fSkettenis #else
1106*11efff7fSkettenis int yyparse ();
1107*11efff7fSkettenis #endif
1108b725ae77Skettenis #endif /* ! YYPARSE_PARAM */
1109b725ae77Skettenis
1110b725ae77Skettenis
1111b725ae77Skettenis
1112*11efff7fSkettenis /* The lookahead symbol. */
1113*11efff7fSkettenis int yychar;
1114*11efff7fSkettenis
1115*11efff7fSkettenis /* The semantic value of the lookahead symbol. */
1116*11efff7fSkettenis YYSTYPE yylval;
1117*11efff7fSkettenis
1118*11efff7fSkettenis /* Number of syntax errors so far. */
1119b725ae77Skettenis int yynerrs;
1120b725ae77Skettenis
1121*11efff7fSkettenis
1122*11efff7fSkettenis
1123*11efff7fSkettenis /*----------.
1124*11efff7fSkettenis | yyparse. |
1125*11efff7fSkettenis `----------*/
1126*11efff7fSkettenis
1127*11efff7fSkettenis #ifdef YYPARSE_PARAM
1128*11efff7fSkettenis # if defined (__STDC__) || defined (__cplusplus)
yyparse(void * YYPARSE_PARAM)1129*11efff7fSkettenis int yyparse (void *YYPARSE_PARAM)
1130b725ae77Skettenis # else
1131*11efff7fSkettenis int yyparse (YYPARSE_PARAM)
1132*11efff7fSkettenis void *YYPARSE_PARAM;
1133b725ae77Skettenis # endif
1134*11efff7fSkettenis #else /* ! YYPARSE_PARAM */
1135*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
1136b725ae77Skettenis int
1137*11efff7fSkettenis yyparse (void)
1138*11efff7fSkettenis #else
1139*11efff7fSkettenis int
1140*11efff7fSkettenis yyparse ()
1141*11efff7fSkettenis
1142*11efff7fSkettenis #endif
1143*11efff7fSkettenis #endif
1144b725ae77Skettenis {
1145b725ae77Skettenis
1146b725ae77Skettenis register int yystate;
1147b725ae77Skettenis register int yyn;
1148b725ae77Skettenis int yyresult;
1149b725ae77Skettenis /* Number of tokens to shift before error messages enabled. */
1150b725ae77Skettenis int yyerrstatus;
1151b725ae77Skettenis /* Lookahead token as an internal (translated) token number. */
1152*11efff7fSkettenis int yytoken = 0;
1153b725ae77Skettenis
1154b725ae77Skettenis /* Three stacks and their tools:
1155b725ae77Skettenis `yyss': related to states,
1156b725ae77Skettenis `yyvs': related to semantic values,
1157b725ae77Skettenis `yyls': related to locations.
1158b725ae77Skettenis
1159b725ae77Skettenis Refer to the stacks thru separate pointers, to allow yyoverflow
1160b725ae77Skettenis to xreallocate them elsewhere. */
1161b725ae77Skettenis
1162b725ae77Skettenis /* The state stack. */
1163b725ae77Skettenis short yyssa[YYINITDEPTH];
1164b725ae77Skettenis short *yyss = yyssa;
1165b725ae77Skettenis register short *yyssp;
1166b725ae77Skettenis
1167b725ae77Skettenis /* The semantic value stack. */
1168b725ae77Skettenis YYSTYPE yyvsa[YYINITDEPTH];
1169b725ae77Skettenis YYSTYPE *yyvs = yyvsa;
1170b725ae77Skettenis register YYSTYPE *yyvsp;
1171b725ae77Skettenis
1172b725ae77Skettenis
1173*11efff7fSkettenis
1174b725ae77Skettenis #define YYPOPSTACK (yyvsp--, yyssp--)
1175b725ae77Skettenis
1176b725ae77Skettenis YYSIZE_T yystacksize = YYINITDEPTH;
1177b725ae77Skettenis
1178b725ae77Skettenis /* The variables used to return semantic value and location from the
1179b725ae77Skettenis action routines. */
1180b725ae77Skettenis YYSTYPE yyval;
1181*11efff7fSkettenis
1182b725ae77Skettenis
1183b725ae77Skettenis /* When reducing, the number of symbols on the RHS of the reduced
1184b725ae77Skettenis rule. */
1185b725ae77Skettenis int yylen;
1186b725ae77Skettenis
1187b725ae77Skettenis YYDPRINTF ((stderr, "Starting parse\n"));
1188b725ae77Skettenis
1189b725ae77Skettenis yystate = 0;
1190b725ae77Skettenis yyerrstatus = 0;
1191b725ae77Skettenis yynerrs = 0;
1192b725ae77Skettenis yychar = YYEMPTY; /* Cause a token to be read. */
1193b725ae77Skettenis
1194b725ae77Skettenis /* Initialize stack pointers.
1195b725ae77Skettenis Waste one element of value and location stack
1196b725ae77Skettenis so that they stay on the same level as the state stack.
1197b725ae77Skettenis The wasted elements are never initialized. */
1198b725ae77Skettenis
1199b725ae77Skettenis yyssp = yyss;
1200b725ae77Skettenis yyvsp = yyvs;
1201*11efff7fSkettenis
1202b725ae77Skettenis goto yysetstate;
1203b725ae77Skettenis
1204b725ae77Skettenis /*------------------------------------------------------------.
1205b725ae77Skettenis | yynewstate -- Push a new state, which is found in yystate. |
1206b725ae77Skettenis `------------------------------------------------------------*/
1207b725ae77Skettenis yynewstate:
1208b725ae77Skettenis /* In all cases, when you get here, the value and location stacks
1209b725ae77Skettenis have just been pushed. so pushing a state here evens the stacks.
1210b725ae77Skettenis */
1211b725ae77Skettenis yyssp++;
1212b725ae77Skettenis
1213b725ae77Skettenis yysetstate:
1214b725ae77Skettenis *yyssp = yystate;
1215b725ae77Skettenis
1216*11efff7fSkettenis if (yyss + yystacksize - 1 <= yyssp)
1217b725ae77Skettenis {
1218b725ae77Skettenis /* Get the current used size of the three stacks, in elements. */
1219b725ae77Skettenis YYSIZE_T yysize = yyssp - yyss + 1;
1220b725ae77Skettenis
1221b725ae77Skettenis #ifdef yyoverflow
1222b725ae77Skettenis {
1223b725ae77Skettenis /* Give user a chance to xreallocate the stack. Use copies of
1224b725ae77Skettenis these so that the &'s don't force the real ones into
1225b725ae77Skettenis memory. */
1226b725ae77Skettenis YYSTYPE *yyvs1 = yyvs;
1227b725ae77Skettenis short *yyss1 = yyss;
1228b725ae77Skettenis
1229*11efff7fSkettenis
1230b725ae77Skettenis /* Each stack pointer address is followed by the size of the
1231*11efff7fSkettenis data in use in that stack, in bytes. This used to be a
1232*11efff7fSkettenis conditional around just the two extra args, but that might
1233*11efff7fSkettenis be undefined if yyoverflow is a macro. */
1234b725ae77Skettenis yyoverflow ("parser stack overflow",
1235b725ae77Skettenis &yyss1, yysize * sizeof (*yyssp),
1236b725ae77Skettenis &yyvs1, yysize * sizeof (*yyvsp),
1237*11efff7fSkettenis
1238b725ae77Skettenis &yystacksize);
1239*11efff7fSkettenis
1240b725ae77Skettenis yyss = yyss1;
1241b725ae77Skettenis yyvs = yyvs1;
1242b725ae77Skettenis }
1243b725ae77Skettenis #else /* no yyoverflow */
1244b725ae77Skettenis # ifndef YYSTACK_RELOCATE
1245b725ae77Skettenis goto yyoverflowlab;
1246b725ae77Skettenis # else
1247b725ae77Skettenis /* Extend the stack our own way. */
1248*11efff7fSkettenis if (YYMAXDEPTH <= yystacksize)
1249b725ae77Skettenis goto yyoverflowlab;
1250b725ae77Skettenis yystacksize *= 2;
1251*11efff7fSkettenis if (YYMAXDEPTH < yystacksize)
1252b725ae77Skettenis yystacksize = YYMAXDEPTH;
1253b725ae77Skettenis
1254b725ae77Skettenis {
1255b725ae77Skettenis short *yyss1 = yyss;
1256b725ae77Skettenis union yyalloc *yyptr =
1257b725ae77Skettenis (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1258b725ae77Skettenis if (! yyptr)
1259b725ae77Skettenis goto yyoverflowlab;
1260b725ae77Skettenis YYSTACK_RELOCATE (yyss);
1261b725ae77Skettenis YYSTACK_RELOCATE (yyvs);
1262*11efff7fSkettenis
1263b725ae77Skettenis # undef YYSTACK_RELOCATE
1264b725ae77Skettenis if (yyss1 != yyssa)
1265b725ae77Skettenis YYSTACK_FREE (yyss1);
1266b725ae77Skettenis }
1267b725ae77Skettenis # endif
1268b725ae77Skettenis #endif /* no yyoverflow */
1269b725ae77Skettenis
1270b725ae77Skettenis yyssp = yyss + yysize - 1;
1271b725ae77Skettenis yyvsp = yyvs + yysize - 1;
1272*11efff7fSkettenis
1273b725ae77Skettenis
1274b725ae77Skettenis YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1275b725ae77Skettenis (unsigned long int) yystacksize));
1276b725ae77Skettenis
1277*11efff7fSkettenis if (yyss + yystacksize - 1 <= yyssp)
1278b725ae77Skettenis YYABORT;
1279b725ae77Skettenis }
1280b725ae77Skettenis
1281b725ae77Skettenis YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1282b725ae77Skettenis
1283b725ae77Skettenis goto yybackup;
1284b725ae77Skettenis
1285b725ae77Skettenis /*-----------.
1286b725ae77Skettenis | yybackup. |
1287b725ae77Skettenis `-----------*/
1288b725ae77Skettenis yybackup:
1289b725ae77Skettenis
1290b725ae77Skettenis /* Do appropriate processing given the current state. */
1291b725ae77Skettenis /* Read a lookahead token if we need one and don't already have one. */
1292b725ae77Skettenis /* yyresume: */
1293b725ae77Skettenis
1294b725ae77Skettenis /* First try to decide what to do without reference to lookahead token. */
1295b725ae77Skettenis
1296b725ae77Skettenis yyn = yypact[yystate];
1297*11efff7fSkettenis if (yyn == YYPACT_NINF)
1298b725ae77Skettenis goto yydefault;
1299b725ae77Skettenis
1300b725ae77Skettenis /* Not known => get a lookahead token if don't already have one. */
1301b725ae77Skettenis
1302*11efff7fSkettenis /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
1303b725ae77Skettenis if (yychar == YYEMPTY)
1304b725ae77Skettenis {
1305b725ae77Skettenis YYDPRINTF ((stderr, "Reading a token: "));
1306b725ae77Skettenis yychar = YYLEX;
1307b725ae77Skettenis }
1308b725ae77Skettenis
1309*11efff7fSkettenis if (yychar <= YYEOF)
1310b725ae77Skettenis {
1311*11efff7fSkettenis yychar = yytoken = YYEOF;
1312b725ae77Skettenis YYDPRINTF ((stderr, "Now at end of input.\n"));
1313b725ae77Skettenis }
1314b725ae77Skettenis else
1315b725ae77Skettenis {
1316*11efff7fSkettenis yytoken = YYTRANSLATE (yychar);
1317*11efff7fSkettenis YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
1318b725ae77Skettenis }
1319b725ae77Skettenis
1320*11efff7fSkettenis /* If the proper action on seeing token YYTOKEN is to reduce or to
1321*11efff7fSkettenis detect an error, take that action. */
1322*11efff7fSkettenis yyn += yytoken;
1323*11efff7fSkettenis if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1324b725ae77Skettenis goto yydefault;
1325b725ae77Skettenis yyn = yytable[yyn];
1326*11efff7fSkettenis if (yyn <= 0)
1327b725ae77Skettenis {
1328*11efff7fSkettenis if (yyn == 0 || yyn == YYTABLE_NINF)
1329b725ae77Skettenis goto yyerrlab;
1330b725ae77Skettenis yyn = -yyn;
1331b725ae77Skettenis goto yyreduce;
1332b725ae77Skettenis }
1333b725ae77Skettenis
1334b725ae77Skettenis if (yyn == YYFINAL)
1335b725ae77Skettenis YYACCEPT;
1336b725ae77Skettenis
1337b725ae77Skettenis /* Shift the lookahead token. */
1338*11efff7fSkettenis YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
1339b725ae77Skettenis
1340b725ae77Skettenis /* Discard the token being shifted unless it is eof. */
1341b725ae77Skettenis if (yychar != YYEOF)
1342b725ae77Skettenis yychar = YYEMPTY;
1343b725ae77Skettenis
1344b725ae77Skettenis *++yyvsp = yylval;
1345*11efff7fSkettenis
1346b725ae77Skettenis
1347b725ae77Skettenis /* Count tokens shifted since error; after three, turn off error
1348b725ae77Skettenis status. */
1349b725ae77Skettenis if (yyerrstatus)
1350b725ae77Skettenis yyerrstatus--;
1351b725ae77Skettenis
1352b725ae77Skettenis yystate = yyn;
1353b725ae77Skettenis goto yynewstate;
1354b725ae77Skettenis
1355b725ae77Skettenis
1356b725ae77Skettenis /*-----------------------------------------------------------.
1357b725ae77Skettenis | yydefault -- do the default action for the current state. |
1358b725ae77Skettenis `-----------------------------------------------------------*/
1359b725ae77Skettenis yydefault:
1360b725ae77Skettenis yyn = yydefact[yystate];
1361b725ae77Skettenis if (yyn == 0)
1362b725ae77Skettenis goto yyerrlab;
1363b725ae77Skettenis goto yyreduce;
1364b725ae77Skettenis
1365b725ae77Skettenis
1366b725ae77Skettenis /*-----------------------------.
1367b725ae77Skettenis | yyreduce -- Do a reduction. |
1368b725ae77Skettenis `-----------------------------*/
1369b725ae77Skettenis yyreduce:
1370b725ae77Skettenis /* yyn is the number of a rule to reduce with. */
1371b725ae77Skettenis yylen = yyr2[yyn];
1372b725ae77Skettenis
1373b725ae77Skettenis /* If YYLEN is nonzero, implement the default value of the action:
1374b725ae77Skettenis `$$ = $1'.
1375b725ae77Skettenis
1376*11efff7fSkettenis Otherwise, the following line sets YYVAL to garbage.
1377*11efff7fSkettenis This behavior is undocumented and Bison
1378b725ae77Skettenis users should not rely upon it. Assigning to YYVAL
1379b725ae77Skettenis unconditionally makes the parser a bit smaller, and it avoids a
1380b725ae77Skettenis GCC warning that YYVAL may be used uninitialized. */
1381b725ae77Skettenis yyval = yyvsp[1-yylen];
1382b725ae77Skettenis
1383b725ae77Skettenis
1384*11efff7fSkettenis YY_REDUCE_PRINT (yyn);
1385*11efff7fSkettenis switch (yyn)
1386b725ae77Skettenis {
1387*11efff7fSkettenis case 4:
1388b725ae77Skettenis #line 209 "jv-exp.y"
1389b725ae77Skettenis {
1390b725ae77Skettenis write_exp_elt_opcode(OP_TYPE);
1391b725ae77Skettenis write_exp_elt_type(yyvsp[0].tval);
1392b725ae77Skettenis write_exp_elt_opcode(OP_TYPE);
1393b725ae77Skettenis }
1394b725ae77Skettenis break;
1395*11efff7fSkettenis
1396*11efff7fSkettenis case 7:
1397b725ae77Skettenis #line 223 "jv-exp.y"
1398b725ae77Skettenis {
1399b725ae77Skettenis write_exp_elt_opcode (OP_STRING);
1400b725ae77Skettenis write_exp_string (yyvsp[0].sval);
1401b725ae77Skettenis write_exp_elt_opcode (OP_STRING);
1402b725ae77Skettenis }
1403b725ae77Skettenis break;
1404*11efff7fSkettenis
1405*11efff7fSkettenis case 8:
1406b725ae77Skettenis #line 232 "jv-exp.y"
1407b725ae77Skettenis { write_exp_elt_opcode (OP_LONG);
1408b725ae77Skettenis write_exp_elt_type (yyvsp[0].typed_val_int.type);
1409b725ae77Skettenis write_exp_elt_longcst ((LONGEST)(yyvsp[0].typed_val_int.val));
1410b725ae77Skettenis write_exp_elt_opcode (OP_LONG); }
1411b725ae77Skettenis break;
1412*11efff7fSkettenis
1413*11efff7fSkettenis case 9:
1414b725ae77Skettenis #line 237 "jv-exp.y"
1415b725ae77Skettenis { YYSTYPE val;
1416b725ae77Skettenis parse_number (yyvsp[0].sval.ptr, yyvsp[0].sval.length, 0, &val);
1417b725ae77Skettenis write_exp_elt_opcode (OP_LONG);
1418b725ae77Skettenis write_exp_elt_type (val.typed_val_int.type);
1419b725ae77Skettenis write_exp_elt_longcst ((LONGEST)val.typed_val_int.val);
1420b725ae77Skettenis write_exp_elt_opcode (OP_LONG);
1421b725ae77Skettenis }
1422b725ae77Skettenis break;
1423*11efff7fSkettenis
1424*11efff7fSkettenis case 10:
1425b725ae77Skettenis #line 245 "jv-exp.y"
1426b725ae77Skettenis { write_exp_elt_opcode (OP_DOUBLE);
1427b725ae77Skettenis write_exp_elt_type (yyvsp[0].typed_val_float.type);
1428b725ae77Skettenis write_exp_elt_dblcst (yyvsp[0].typed_val_float.dval);
1429b725ae77Skettenis write_exp_elt_opcode (OP_DOUBLE); }
1430b725ae77Skettenis break;
1431*11efff7fSkettenis
1432*11efff7fSkettenis case 11:
1433b725ae77Skettenis #line 250 "jv-exp.y"
1434b725ae77Skettenis { write_exp_elt_opcode (OP_LONG);
1435b725ae77Skettenis write_exp_elt_type (java_boolean_type);
1436b725ae77Skettenis write_exp_elt_longcst ((LONGEST)yyvsp[0].lval);
1437b725ae77Skettenis write_exp_elt_opcode (OP_LONG); }
1438b725ae77Skettenis break;
1439*11efff7fSkettenis
1440*11efff7fSkettenis case 14:
1441b725ae77Skettenis #line 267 "jv-exp.y"
1442b725ae77Skettenis { yyval.tval = java_boolean_type; }
1443b725ae77Skettenis break;
1444*11efff7fSkettenis
1445*11efff7fSkettenis case 17:
1446b725ae77Skettenis #line 277 "jv-exp.y"
1447b725ae77Skettenis { yyval.tval = java_byte_type; }
1448b725ae77Skettenis break;
1449*11efff7fSkettenis
1450*11efff7fSkettenis case 18:
1451b725ae77Skettenis #line 279 "jv-exp.y"
1452b725ae77Skettenis { yyval.tval = java_short_type; }
1453b725ae77Skettenis break;
1454*11efff7fSkettenis
1455*11efff7fSkettenis case 19:
1456b725ae77Skettenis #line 281 "jv-exp.y"
1457b725ae77Skettenis { yyval.tval = java_int_type; }
1458b725ae77Skettenis break;
1459*11efff7fSkettenis
1460*11efff7fSkettenis case 20:
1461b725ae77Skettenis #line 283 "jv-exp.y"
1462b725ae77Skettenis { yyval.tval = java_long_type; }
1463b725ae77Skettenis break;
1464*11efff7fSkettenis
1465*11efff7fSkettenis case 21:
1466b725ae77Skettenis #line 285 "jv-exp.y"
1467b725ae77Skettenis { yyval.tval = java_char_type; }
1468b725ae77Skettenis break;
1469*11efff7fSkettenis
1470*11efff7fSkettenis case 22:
1471b725ae77Skettenis #line 290 "jv-exp.y"
1472b725ae77Skettenis { yyval.tval = java_float_type; }
1473b725ae77Skettenis break;
1474*11efff7fSkettenis
1475*11efff7fSkettenis case 23:
1476b725ae77Skettenis #line 292 "jv-exp.y"
1477b725ae77Skettenis { yyval.tval = java_double_type; }
1478b725ae77Skettenis break;
1479*11efff7fSkettenis
1480*11efff7fSkettenis case 24:
1481b725ae77Skettenis #line 304 "jv-exp.y"
1482b725ae77Skettenis { yyval.tval = java_type_from_name (yyvsp[0].sval); }
1483b725ae77Skettenis break;
1484*11efff7fSkettenis
1485*11efff7fSkettenis case 26:
1486b725ae77Skettenis #line 313 "jv-exp.y"
1487b725ae77Skettenis { yyval.tval = java_array_type (yyvsp[-1].tval, yyvsp[0].lval); }
1488b725ae77Skettenis break;
1489*11efff7fSkettenis
1490*11efff7fSkettenis case 27:
1491b725ae77Skettenis #line 315 "jv-exp.y"
1492b725ae77Skettenis { yyval.tval = java_array_type (java_type_from_name (yyvsp[-1].sval), yyvsp[0].lval); }
1493b725ae77Skettenis break;
1494*11efff7fSkettenis
1495*11efff7fSkettenis case 34:
1496b725ae77Skettenis #line 335 "jv-exp.y"
1497b725ae77Skettenis { yyval.sval.length = yyvsp[-2].sval.length + yyvsp[0].sval.length + 1;
1498b725ae77Skettenis if (yyvsp[-2].sval.ptr + yyvsp[-2].sval.length + 1 == yyvsp[0].sval.ptr
1499b725ae77Skettenis && yyvsp[-2].sval.ptr[yyvsp[-2].sval.length] == '.')
1500b725ae77Skettenis yyval.sval.ptr = yyvsp[-2].sval.ptr; /* Optimization. */
1501b725ae77Skettenis else
1502b725ae77Skettenis {
1503b725ae77Skettenis yyval.sval.ptr = (char *) xmalloc (yyval.sval.length + 1);
1504b725ae77Skettenis make_cleanup (free, yyval.sval.ptr);
1505b725ae77Skettenis sprintf (yyval.sval.ptr, "%.*s.%.*s",
1506b725ae77Skettenis yyvsp[-2].sval.length, yyvsp[-2].sval.ptr, yyvsp[0].sval.length, yyvsp[0].sval.ptr);
1507b725ae77Skettenis } }
1508b725ae77Skettenis break;
1509*11efff7fSkettenis
1510*11efff7fSkettenis case 36:
1511b725ae77Skettenis #line 359 "jv-exp.y"
1512b725ae77Skettenis { write_exp_elt_opcode (BINOP_COMMA); }
1513b725ae77Skettenis break;
1514*11efff7fSkettenis
1515*11efff7fSkettenis case 45:
1516b725ae77Skettenis #line 375 "jv-exp.y"
1517b725ae77Skettenis { write_exp_elt_opcode (OP_ARRAY);
1518b725ae77Skettenis write_exp_elt_longcst ((LONGEST) 0);
1519b725ae77Skettenis write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
1520b725ae77Skettenis write_exp_elt_opcode (OP_ARRAY); }
1521b725ae77Skettenis break;
1522*11efff7fSkettenis
1523*11efff7fSkettenis case 46:
1524b725ae77Skettenis #line 383 "jv-exp.y"
1525b725ae77Skettenis { start_arglist (); }
1526b725ae77Skettenis break;
1527*11efff7fSkettenis
1528*11efff7fSkettenis case 47:
1529b725ae77Skettenis #line 388 "jv-exp.y"
1530b725ae77Skettenis { yyval.lval = end_arglist () - 1; }
1531b725ae77Skettenis break;
1532*11efff7fSkettenis
1533*11efff7fSkettenis case 48:
1534b725ae77Skettenis #line 393 "jv-exp.y"
1535b725ae77Skettenis { internal_error (__FILE__, __LINE__,
1536b725ae77Skettenis _("FIXME - ClassInstanceCreationExpression")); }
1537b725ae77Skettenis break;
1538*11efff7fSkettenis
1539*11efff7fSkettenis case 49:
1540b725ae77Skettenis #line 399 "jv-exp.y"
1541b725ae77Skettenis { arglist_len = 1; }
1542b725ae77Skettenis break;
1543*11efff7fSkettenis
1544*11efff7fSkettenis case 50:
1545b725ae77Skettenis #line 401 "jv-exp.y"
1546b725ae77Skettenis { arglist_len++; }
1547b725ae77Skettenis break;
1548*11efff7fSkettenis
1549*11efff7fSkettenis case 51:
1550b725ae77Skettenis #line 406 "jv-exp.y"
1551b725ae77Skettenis { arglist_len = 0; }
1552b725ae77Skettenis break;
1553*11efff7fSkettenis
1554*11efff7fSkettenis case 53:
1555b725ae77Skettenis #line 412 "jv-exp.y"
1556b725ae77Skettenis { internal_error (__FILE__, __LINE__,
1557b725ae77Skettenis _("FIXME - ArrayCreationExpression")); }
1558b725ae77Skettenis break;
1559*11efff7fSkettenis
1560*11efff7fSkettenis case 54:
1561b725ae77Skettenis #line 415 "jv-exp.y"
1562b725ae77Skettenis { internal_error (__FILE__, __LINE__,
1563b725ae77Skettenis _("FIXME - ArrayCreationExpression")); }
1564b725ae77Skettenis break;
1565*11efff7fSkettenis
1566*11efff7fSkettenis case 58:
1567b725ae77Skettenis #line 430 "jv-exp.y"
1568b725ae77Skettenis { yyval.lval = 1; }
1569b725ae77Skettenis break;
1570*11efff7fSkettenis
1571*11efff7fSkettenis case 59:
1572b725ae77Skettenis #line 432 "jv-exp.y"
1573b725ae77Skettenis { yyval.lval = yyvsp[-2].lval + 1; }
1574b725ae77Skettenis break;
1575*11efff7fSkettenis
1576*11efff7fSkettenis case 61:
1577b725ae77Skettenis #line 438 "jv-exp.y"
1578b725ae77Skettenis { yyval.lval = 0; }
1579b725ae77Skettenis break;
1580*11efff7fSkettenis
1581*11efff7fSkettenis case 62:
1582b725ae77Skettenis #line 443 "jv-exp.y"
1583b725ae77Skettenis { push_fieldnames (yyvsp[0].sval); }
1584b725ae77Skettenis break;
1585*11efff7fSkettenis
1586*11efff7fSkettenis case 63:
1587b725ae77Skettenis #line 445 "jv-exp.y"
1588b725ae77Skettenis { push_fieldnames (yyvsp[0].sval); }
1589b725ae77Skettenis break;
1590*11efff7fSkettenis
1591b725ae77Skettenis case 64:
1592*11efff7fSkettenis #line 451 "jv-exp.y"
1593*11efff7fSkettenis { push_expression_name (yyvsp[-1].sval); }
1594b725ae77Skettenis break;
1595*11efff7fSkettenis
1596b725ae77Skettenis case 65:
1597*11efff7fSkettenis #line 456 "jv-exp.y"
1598*11efff7fSkettenis { start_arglist(); }
1599b725ae77Skettenis break;
1600*11efff7fSkettenis
1601b725ae77Skettenis case 66:
1602*11efff7fSkettenis #line 458 "jv-exp.y"
1603*11efff7fSkettenis { write_exp_elt_opcode (OP_FUNCALL);
1604*11efff7fSkettenis write_exp_elt_longcst ((LONGEST) end_arglist ());
1605*11efff7fSkettenis write_exp_elt_opcode (OP_FUNCALL); }
1606*11efff7fSkettenis break;
1607*11efff7fSkettenis
1608*11efff7fSkettenis case 67:
1609*11efff7fSkettenis #line 462 "jv-exp.y"
1610*11efff7fSkettenis { error (_("Form of method invocation not implemented")); }
1611*11efff7fSkettenis break;
1612*11efff7fSkettenis
1613*11efff7fSkettenis case 68:
1614*11efff7fSkettenis #line 464 "jv-exp.y"
1615*11efff7fSkettenis { error (_("Form of method invocation not implemented")); }
1616*11efff7fSkettenis break;
1617*11efff7fSkettenis
1618*11efff7fSkettenis case 69:
1619*11efff7fSkettenis #line 469 "jv-exp.y"
1620b725ae77Skettenis {
1621b725ae77Skettenis /* Emit code for the Name now, then exchange it in the
1622b725ae77Skettenis expout array with the Expression's code. We could
1623b725ae77Skettenis introduce a OP_SWAP code or a reversed version of
1624b725ae77Skettenis BINOP_SUBSCRIPT, but that makes the rest of GDB pay
1625b725ae77Skettenis for our parsing kludges. */
1626b725ae77Skettenis struct expression *name_expr;
1627b725ae77Skettenis
1628b725ae77Skettenis push_expression_name (yyvsp[-3].sval);
1629b725ae77Skettenis name_expr = copy_exp (expout, expout_ptr);
1630b725ae77Skettenis expout_ptr -= name_expr->nelts;
1631b725ae77Skettenis insert_exp (expout_ptr-length_of_subexp (expout, expout_ptr),
1632b725ae77Skettenis name_expr);
1633b725ae77Skettenis free (name_expr);
1634b725ae77Skettenis write_exp_elt_opcode (BINOP_SUBSCRIPT);
1635b725ae77Skettenis }
1636b725ae77Skettenis break;
1637*11efff7fSkettenis
1638b725ae77Skettenis case 70:
1639*11efff7fSkettenis #line 486 "jv-exp.y"
1640*11efff7fSkettenis { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
1641*11efff7fSkettenis break;
1642*11efff7fSkettenis
1643*11efff7fSkettenis case 71:
1644*11efff7fSkettenis #line 488 "jv-exp.y"
1645*11efff7fSkettenis { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
1646*11efff7fSkettenis break;
1647*11efff7fSkettenis
1648*11efff7fSkettenis case 73:
1649*11efff7fSkettenis #line 494 "jv-exp.y"
1650b725ae77Skettenis { push_expression_name (yyvsp[0].sval); }
1651b725ae77Skettenis break;
1652*11efff7fSkettenis
1653*11efff7fSkettenis case 77:
1654*11efff7fSkettenis #line 503 "jv-exp.y"
1655b725ae77Skettenis { write_exp_elt_opcode (UNOP_POSTINCREMENT); }
1656b725ae77Skettenis break;
1657*11efff7fSkettenis
1658*11efff7fSkettenis case 78:
1659*11efff7fSkettenis #line 508 "jv-exp.y"
1660b725ae77Skettenis { write_exp_elt_opcode (UNOP_POSTDECREMENT); }
1661b725ae77Skettenis break;
1662*11efff7fSkettenis
1663*11efff7fSkettenis case 82:
1664*11efff7fSkettenis #line 516 "jv-exp.y"
1665b725ae77Skettenis { write_exp_elt_opcode (UNOP_NEG); }
1666b725ae77Skettenis break;
1667*11efff7fSkettenis
1668*11efff7fSkettenis case 83:
1669*11efff7fSkettenis #line 518 "jv-exp.y"
1670b725ae77Skettenis { write_exp_elt_opcode (UNOP_IND); }
1671b725ae77Skettenis break;
1672*11efff7fSkettenis
1673*11efff7fSkettenis case 85:
1674*11efff7fSkettenis #line 524 "jv-exp.y"
1675b725ae77Skettenis { write_exp_elt_opcode (UNOP_PREINCREMENT); }
1676b725ae77Skettenis break;
1677*11efff7fSkettenis
1678*11efff7fSkettenis case 86:
1679*11efff7fSkettenis #line 529 "jv-exp.y"
1680b725ae77Skettenis { write_exp_elt_opcode (UNOP_PREDECREMENT); }
1681b725ae77Skettenis break;
1682*11efff7fSkettenis
1683*11efff7fSkettenis case 88:
1684*11efff7fSkettenis #line 535 "jv-exp.y"
1685b725ae77Skettenis { write_exp_elt_opcode (UNOP_COMPLEMENT); }
1686b725ae77Skettenis break;
1687*11efff7fSkettenis
1688*11efff7fSkettenis case 89:
1689*11efff7fSkettenis #line 537 "jv-exp.y"
1690b725ae77Skettenis { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
1691b725ae77Skettenis break;
1692*11efff7fSkettenis
1693*11efff7fSkettenis case 91:
1694*11efff7fSkettenis #line 543 "jv-exp.y"
1695b725ae77Skettenis { write_exp_elt_opcode (UNOP_CAST);
1696b725ae77Skettenis write_exp_elt_type (java_array_type (yyvsp[-3].tval, yyvsp[-2].lval));
1697b725ae77Skettenis write_exp_elt_opcode (UNOP_CAST); }
1698b725ae77Skettenis break;
1699*11efff7fSkettenis
1700*11efff7fSkettenis case 92:
1701*11efff7fSkettenis #line 547 "jv-exp.y"
1702b725ae77Skettenis {
1703b725ae77Skettenis int exp_size = expout_ptr;
1704b725ae77Skettenis int last_exp_size = length_of_subexp(expout, expout_ptr);
1705b725ae77Skettenis struct type *type;
1706b725ae77Skettenis int i;
1707b725ae77Skettenis int base = expout_ptr - last_exp_size - 3;
1708b725ae77Skettenis if (base < 0 || expout->elts[base+2].opcode != OP_TYPE)
1709b725ae77Skettenis error (_("Invalid cast expression"));
1710b725ae77Skettenis type = expout->elts[base+1].type;
1711b725ae77Skettenis /* Remove the 'Expression' and slide the
1712b725ae77Skettenis UnaryExpressionNotPlusMinus down to replace it. */
1713b725ae77Skettenis for (i = 0; i < last_exp_size; i++)
1714b725ae77Skettenis expout->elts[base + i] = expout->elts[base + i + 3];
1715b725ae77Skettenis expout_ptr -= 3;
1716b725ae77Skettenis if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1717b725ae77Skettenis type = lookup_pointer_type (type);
1718b725ae77Skettenis write_exp_elt_opcode (UNOP_CAST);
1719b725ae77Skettenis write_exp_elt_type (type);
1720b725ae77Skettenis write_exp_elt_opcode (UNOP_CAST);
1721b725ae77Skettenis }
1722b725ae77Skettenis break;
1723*11efff7fSkettenis
1724*11efff7fSkettenis case 93:
1725*11efff7fSkettenis #line 568 "jv-exp.y"
1726b725ae77Skettenis { write_exp_elt_opcode (UNOP_CAST);
1727b725ae77Skettenis write_exp_elt_type (java_array_type (java_type_from_name (yyvsp[-3].sval), yyvsp[-2].lval));
1728b725ae77Skettenis write_exp_elt_opcode (UNOP_CAST); }
1729b725ae77Skettenis break;
1730*11efff7fSkettenis
1731*11efff7fSkettenis case 95:
1732*11efff7fSkettenis #line 577 "jv-exp.y"
1733b725ae77Skettenis { write_exp_elt_opcode (BINOP_MUL); }
1734b725ae77Skettenis break;
1735*11efff7fSkettenis
1736*11efff7fSkettenis case 96:
1737*11efff7fSkettenis #line 579 "jv-exp.y"
1738b725ae77Skettenis { write_exp_elt_opcode (BINOP_DIV); }
1739b725ae77Skettenis break;
1740*11efff7fSkettenis
1741*11efff7fSkettenis case 97:
1742*11efff7fSkettenis #line 581 "jv-exp.y"
1743b725ae77Skettenis { write_exp_elt_opcode (BINOP_REM); }
1744b725ae77Skettenis break;
1745*11efff7fSkettenis
1746*11efff7fSkettenis case 99:
1747*11efff7fSkettenis #line 587 "jv-exp.y"
1748b725ae77Skettenis { write_exp_elt_opcode (BINOP_ADD); }
1749b725ae77Skettenis break;
1750*11efff7fSkettenis
1751*11efff7fSkettenis case 100:
1752*11efff7fSkettenis #line 589 "jv-exp.y"
1753b725ae77Skettenis { write_exp_elt_opcode (BINOP_SUB); }
1754b725ae77Skettenis break;
1755*11efff7fSkettenis
1756b725ae77Skettenis case 102:
1757b725ae77Skettenis #line 595 "jv-exp.y"
1758*11efff7fSkettenis { write_exp_elt_opcode (BINOP_LSH); }
1759b725ae77Skettenis break;
1760*11efff7fSkettenis
1761b725ae77Skettenis case 103:
1762b725ae77Skettenis #line 597 "jv-exp.y"
1763*11efff7fSkettenis { write_exp_elt_opcode (BINOP_RSH); }
1764*11efff7fSkettenis break;
1765*11efff7fSkettenis
1766*11efff7fSkettenis case 105:
1767*11efff7fSkettenis #line 604 "jv-exp.y"
1768*11efff7fSkettenis { write_exp_elt_opcode (BINOP_LESS); }
1769*11efff7fSkettenis break;
1770*11efff7fSkettenis
1771*11efff7fSkettenis case 106:
1772*11efff7fSkettenis #line 606 "jv-exp.y"
1773b725ae77Skettenis { write_exp_elt_opcode (BINOP_GTR); }
1774b725ae77Skettenis break;
1775*11efff7fSkettenis
1776b725ae77Skettenis case 107:
1777b725ae77Skettenis #line 608 "jv-exp.y"
1778*11efff7fSkettenis { write_exp_elt_opcode (BINOP_LEQ); }
1779b725ae77Skettenis break;
1780*11efff7fSkettenis
1781b725ae77Skettenis case 108:
1782b725ae77Skettenis #line 610 "jv-exp.y"
1783*11efff7fSkettenis { write_exp_elt_opcode (BINOP_GEQ); }
1784*11efff7fSkettenis break;
1785*11efff7fSkettenis
1786*11efff7fSkettenis case 110:
1787*11efff7fSkettenis #line 617 "jv-exp.y"
1788*11efff7fSkettenis { write_exp_elt_opcode (BINOP_EQUAL); }
1789*11efff7fSkettenis break;
1790*11efff7fSkettenis
1791*11efff7fSkettenis case 111:
1792*11efff7fSkettenis #line 619 "jv-exp.y"
1793b725ae77Skettenis { write_exp_elt_opcode (BINOP_NOTEQUAL); }
1794b725ae77Skettenis break;
1795*11efff7fSkettenis
1796*11efff7fSkettenis case 113:
1797*11efff7fSkettenis #line 625 "jv-exp.y"
1798b725ae77Skettenis { write_exp_elt_opcode (BINOP_BITWISE_AND); }
1799b725ae77Skettenis break;
1800*11efff7fSkettenis
1801*11efff7fSkettenis case 115:
1802*11efff7fSkettenis #line 631 "jv-exp.y"
1803b725ae77Skettenis { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
1804b725ae77Skettenis break;
1805*11efff7fSkettenis
1806*11efff7fSkettenis case 117:
1807*11efff7fSkettenis #line 636 "jv-exp.y"
1808b725ae77Skettenis { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
1809b725ae77Skettenis break;
1810*11efff7fSkettenis
1811*11efff7fSkettenis case 119:
1812*11efff7fSkettenis #line 642 "jv-exp.y"
1813b725ae77Skettenis { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
1814b725ae77Skettenis break;
1815*11efff7fSkettenis
1816*11efff7fSkettenis case 121:
1817*11efff7fSkettenis #line 648 "jv-exp.y"
1818b725ae77Skettenis { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
1819b725ae77Skettenis break;
1820*11efff7fSkettenis
1821*11efff7fSkettenis case 123:
1822*11efff7fSkettenis #line 654 "jv-exp.y"
1823b725ae77Skettenis { write_exp_elt_opcode (TERNOP_COND); }
1824b725ae77Skettenis break;
1825*11efff7fSkettenis
1826*11efff7fSkettenis case 126:
1827*11efff7fSkettenis #line 664 "jv-exp.y"
1828b725ae77Skettenis { write_exp_elt_opcode (BINOP_ASSIGN); }
1829b725ae77Skettenis break;
1830*11efff7fSkettenis
1831*11efff7fSkettenis case 127:
1832*11efff7fSkettenis #line 666 "jv-exp.y"
1833b725ae77Skettenis { write_exp_elt_opcode (BINOP_ASSIGN_MODIFY);
1834b725ae77Skettenis write_exp_elt_opcode (yyvsp[-1].opcode);
1835b725ae77Skettenis write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); }
1836b725ae77Skettenis break;
1837*11efff7fSkettenis
1838*11efff7fSkettenis case 128:
1839*11efff7fSkettenis #line 673 "jv-exp.y"
1840b725ae77Skettenis { push_expression_name (yyvsp[0].sval); }
1841b725ae77Skettenis break;
1842*11efff7fSkettenis
1843*11efff7fSkettenis
1844b725ae77Skettenis }
1845b725ae77Skettenis
1846*11efff7fSkettenis /* Line 1000 of yacc.c. */
1847b725ae77Skettenis
1848b725ae77Skettenis yyvsp -= yylen;
1849b725ae77Skettenis yyssp -= yylen;
1850b725ae77Skettenis
1851*11efff7fSkettenis
1852*11efff7fSkettenis YY_STACK_PRINT (yyss, yyssp);
1853b725ae77Skettenis
1854b725ae77Skettenis *++yyvsp = yyval;
1855*11efff7fSkettenis
1856b725ae77Skettenis
1857b725ae77Skettenis /* Now `shift' the result of the reduction. Determine what state
1858b725ae77Skettenis that goes to, based on the state we popped back to and the rule
1859b725ae77Skettenis number reduced by. */
1860b725ae77Skettenis
1861b725ae77Skettenis yyn = yyr1[yyn];
1862b725ae77Skettenis
1863*11efff7fSkettenis yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
1864*11efff7fSkettenis if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
1865b725ae77Skettenis yystate = yytable[yystate];
1866b725ae77Skettenis else
1867*11efff7fSkettenis yystate = yydefgoto[yyn - YYNTOKENS];
1868b725ae77Skettenis
1869b725ae77Skettenis goto yynewstate;
1870b725ae77Skettenis
1871b725ae77Skettenis
1872b725ae77Skettenis /*------------------------------------.
1873b725ae77Skettenis | yyerrlab -- here on detecting error |
1874b725ae77Skettenis `------------------------------------*/
1875b725ae77Skettenis yyerrlab:
1876b725ae77Skettenis /* If not already recovering from an error, report this error. */
1877b725ae77Skettenis if (!yyerrstatus)
1878b725ae77Skettenis {
1879b725ae77Skettenis ++yynerrs;
1880*11efff7fSkettenis #if YYERROR_VERBOSE
1881b725ae77Skettenis yyn = yypact[yystate];
1882b725ae77Skettenis
1883*11efff7fSkettenis if (YYPACT_NINF < yyn && yyn < YYLAST)
1884b725ae77Skettenis {
1885b725ae77Skettenis YYSIZE_T yysize = 0;
1886*11efff7fSkettenis int yytype = YYTRANSLATE (yychar);
1887*11efff7fSkettenis const char* yyprefix;
1888b725ae77Skettenis char *yymsg;
1889*11efff7fSkettenis int yyx;
1890b725ae77Skettenis
1891b725ae77Skettenis /* Start YYX at -YYN if negative to avoid negative indexes in
1892b725ae77Skettenis YYCHECK. */
1893*11efff7fSkettenis int yyxbegin = yyn < 0 ? -yyn : 0;
1894*11efff7fSkettenis
1895*11efff7fSkettenis /* Stay within bounds of both yycheck and yytname. */
1896*11efff7fSkettenis int yychecklim = YYLAST - yyn;
1897*11efff7fSkettenis int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1898*11efff7fSkettenis int yycount = 0;
1899*11efff7fSkettenis
1900*11efff7fSkettenis yyprefix = ", expecting ";
1901*11efff7fSkettenis for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1902*11efff7fSkettenis if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1903*11efff7fSkettenis {
1904*11efff7fSkettenis yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
1905*11efff7fSkettenis yycount += 1;
1906*11efff7fSkettenis if (yycount == 5)
1907*11efff7fSkettenis {
1908*11efff7fSkettenis yysize = 0;
1909*11efff7fSkettenis break;
1910*11efff7fSkettenis }
1911*11efff7fSkettenis }
1912*11efff7fSkettenis yysize += (sizeof ("syntax error, unexpected ")
1913*11efff7fSkettenis + yystrlen (yytname[yytype]));
1914b725ae77Skettenis yymsg = (char *) YYSTACK_ALLOC (yysize);
1915b725ae77Skettenis if (yymsg != 0)
1916b725ae77Skettenis {
1917*11efff7fSkettenis char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
1918*11efff7fSkettenis yyp = yystpcpy (yyp, yytname[yytype]);
1919b725ae77Skettenis
1920b725ae77Skettenis if (yycount < 5)
1921b725ae77Skettenis {
1922*11efff7fSkettenis yyprefix = ", expecting ";
1923*11efff7fSkettenis for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1924*11efff7fSkettenis if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1925b725ae77Skettenis {
1926*11efff7fSkettenis yyp = yystpcpy (yyp, yyprefix);
1927b725ae77Skettenis yyp = yystpcpy (yyp, yytname[yyx]);
1928*11efff7fSkettenis yyprefix = " or ";
1929b725ae77Skettenis }
1930b725ae77Skettenis }
1931b725ae77Skettenis yyerror (yymsg);
1932b725ae77Skettenis YYSTACK_FREE (yymsg);
1933b725ae77Skettenis }
1934b725ae77Skettenis else
1935*11efff7fSkettenis yyerror ("syntax error; also virtual memory exhausted");
1936b725ae77Skettenis }
1937b725ae77Skettenis else
1938*11efff7fSkettenis #endif /* YYERROR_VERBOSE */
1939*11efff7fSkettenis yyerror ("syntax error");
1940b725ae77Skettenis }
1941b725ae77Skettenis
1942b725ae77Skettenis
1943*11efff7fSkettenis
1944b725ae77Skettenis if (yyerrstatus == 3)
1945b725ae77Skettenis {
1946b725ae77Skettenis /* If just tried and failed to reuse lookahead token after an
1947b725ae77Skettenis error, discard it. */
1948b725ae77Skettenis
1949*11efff7fSkettenis if (yychar <= YYEOF)
1950*11efff7fSkettenis {
1951*11efff7fSkettenis /* If at end of input, pop the error token,
1952*11efff7fSkettenis then the rest of the stack, then return failure. */
1953b725ae77Skettenis if (yychar == YYEOF)
1954*11efff7fSkettenis for (;;)
1955*11efff7fSkettenis {
1956*11efff7fSkettenis YYPOPSTACK;
1957*11efff7fSkettenis if (yyssp == yyss)
1958b725ae77Skettenis YYABORT;
1959*11efff7fSkettenis YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
1960*11efff7fSkettenis yydestruct (yystos[*yyssp], yyvsp);
1961*11efff7fSkettenis }
1962*11efff7fSkettenis }
1963*11efff7fSkettenis else
1964*11efff7fSkettenis {
1965*11efff7fSkettenis YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
1966*11efff7fSkettenis yydestruct (yytoken, &yylval);
1967b725ae77Skettenis yychar = YYEMPTY;
1968*11efff7fSkettenis
1969*11efff7fSkettenis }
1970b725ae77Skettenis }
1971b725ae77Skettenis
1972b725ae77Skettenis /* Else will try to reuse lookahead token after shifting the error
1973b725ae77Skettenis token. */
1974*11efff7fSkettenis goto yyerrlab1;
1975b725ae77Skettenis
1976b725ae77Skettenis
1977*11efff7fSkettenis /*---------------------------------------------------.
1978*11efff7fSkettenis | yyerrorlab -- error raised explicitly by YYERROR. |
1979*11efff7fSkettenis `---------------------------------------------------*/
1980*11efff7fSkettenis yyerrorlab:
1981b725ae77Skettenis
1982*11efff7fSkettenis #ifdef __GNUC__
1983*11efff7fSkettenis /* Pacify GCC when the user code never invokes YYERROR and the label
1984*11efff7fSkettenis yyerrorlab therefore never appears in user code. */
1985*11efff7fSkettenis if (0)
1986*11efff7fSkettenis goto yyerrorlab;
1987b725ae77Skettenis #endif
1988b725ae77Skettenis
1989*11efff7fSkettenis yyvsp -= yylen;
1990*11efff7fSkettenis yyssp -= yylen;
1991*11efff7fSkettenis yystate = *yyssp;
1992*11efff7fSkettenis goto yyerrlab1;
1993b725ae77Skettenis
1994*11efff7fSkettenis
1995*11efff7fSkettenis /*-------------------------------------------------------------.
1996*11efff7fSkettenis | yyerrlab1 -- common code for both syntax error and YYERROR. |
1997*11efff7fSkettenis `-------------------------------------------------------------*/
1998*11efff7fSkettenis yyerrlab1:
1999*11efff7fSkettenis yyerrstatus = 3; /* Each real token shifted decrements this. */
2000*11efff7fSkettenis
2001*11efff7fSkettenis for (;;)
2002*11efff7fSkettenis {
2003*11efff7fSkettenis yyn = yypact[yystate];
2004*11efff7fSkettenis if (yyn != YYPACT_NINF)
2005*11efff7fSkettenis {
2006*11efff7fSkettenis yyn += YYTERROR;
2007*11efff7fSkettenis if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
2008*11efff7fSkettenis {
2009*11efff7fSkettenis yyn = yytable[yyn];
2010*11efff7fSkettenis if (0 < yyn)
2011*11efff7fSkettenis break;
2012*11efff7fSkettenis }
2013*11efff7fSkettenis }
2014*11efff7fSkettenis
2015*11efff7fSkettenis /* Pop the current state because it cannot handle the error token. */
2016b725ae77Skettenis if (yyssp == yyss)
2017b725ae77Skettenis YYABORT;
2018b725ae77Skettenis
2019*11efff7fSkettenis YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
2020*11efff7fSkettenis yydestruct (yystos[yystate], yyvsp);
2021*11efff7fSkettenis YYPOPSTACK;
2022*11efff7fSkettenis yystate = *yyssp;
2023*11efff7fSkettenis YY_STACK_PRINT (yyss, yyssp);
2024b725ae77Skettenis }
2025b725ae77Skettenis
2026b725ae77Skettenis if (yyn == YYFINAL)
2027b725ae77Skettenis YYACCEPT;
2028b725ae77Skettenis
2029b725ae77Skettenis YYDPRINTF ((stderr, "Shifting error token, "));
2030b725ae77Skettenis
2031b725ae77Skettenis *++yyvsp = yylval;
2032*11efff7fSkettenis
2033b725ae77Skettenis
2034b725ae77Skettenis yystate = yyn;
2035b725ae77Skettenis goto yynewstate;
2036b725ae77Skettenis
2037b725ae77Skettenis
2038b725ae77Skettenis /*-------------------------------------.
2039b725ae77Skettenis | yyacceptlab -- YYACCEPT comes here. |
2040b725ae77Skettenis `-------------------------------------*/
2041b725ae77Skettenis yyacceptlab:
2042b725ae77Skettenis yyresult = 0;
2043b725ae77Skettenis goto yyreturn;
2044b725ae77Skettenis
2045b725ae77Skettenis /*-----------------------------------.
2046b725ae77Skettenis | yyabortlab -- YYABORT comes here. |
2047b725ae77Skettenis `-----------------------------------*/
2048b725ae77Skettenis yyabortlab:
2049b725ae77Skettenis yyresult = 1;
2050b725ae77Skettenis goto yyreturn;
2051b725ae77Skettenis
2052*11efff7fSkettenis #ifndef yyoverflow
2053*11efff7fSkettenis /*----------------------------------------------.
2054*11efff7fSkettenis | yyoverflowlab -- parser overflow comes here. |
2055*11efff7fSkettenis `----------------------------------------------*/
2056b725ae77Skettenis yyoverflowlab:
2057b725ae77Skettenis yyerror ("parser stack overflow");
2058b725ae77Skettenis yyresult = 2;
2059b725ae77Skettenis /* Fall through. */
2060*11efff7fSkettenis #endif
2061b725ae77Skettenis
2062b725ae77Skettenis yyreturn:
2063b725ae77Skettenis #ifndef yyoverflow
2064b725ae77Skettenis if (yyss != yyssa)
2065b725ae77Skettenis YYSTACK_FREE (yyss);
2066b725ae77Skettenis #endif
2067b725ae77Skettenis return yyresult;
2068b725ae77Skettenis }
2069*11efff7fSkettenis
2070*11efff7fSkettenis
2071*11efff7fSkettenis #line 685 "jv-exp.y"
2072b725ae77Skettenis
2073b725ae77Skettenis /* Take care of parsing a number (anything that starts with a digit).
2074b725ae77Skettenis Set yylval and return the token type; update lexptr.
2075b725ae77Skettenis LEN is the number of characters in it. */
2076b725ae77Skettenis
2077b725ae77Skettenis /*** Needs some error checking for the float case ***/
2078b725ae77Skettenis
2079b725ae77Skettenis static int
parse_number(p,len,parsed_float,putithere)2080b725ae77Skettenis parse_number (p, len, parsed_float, putithere)
2081b725ae77Skettenis char *p;
2082b725ae77Skettenis int len;
2083b725ae77Skettenis int parsed_float;
2084b725ae77Skettenis YYSTYPE *putithere;
2085b725ae77Skettenis {
2086b725ae77Skettenis ULONGEST n = 0;
2087b725ae77Skettenis ULONGEST limit, limit_div_base;
2088b725ae77Skettenis
2089b725ae77Skettenis int c;
2090b725ae77Skettenis int base = input_radix;
2091b725ae77Skettenis
2092b725ae77Skettenis struct type *type;
2093b725ae77Skettenis
2094b725ae77Skettenis if (parsed_float)
2095b725ae77Skettenis {
2096b725ae77Skettenis /* It's a float since it contains a point or an exponent. */
2097b725ae77Skettenis char c;
2098b725ae77Skettenis int num = 0; /* number of tokens scanned by scanf */
2099b725ae77Skettenis char saved_char = p[len];
2100b725ae77Skettenis
2101b725ae77Skettenis p[len] = 0; /* null-terminate the token */
2102b725ae77Skettenis if (sizeof (putithere->typed_val_float.dval) <= sizeof (float))
2103b725ae77Skettenis num = sscanf (p, "%g%c", (float *) &putithere->typed_val_float.dval, &c);
2104b725ae77Skettenis else if (sizeof (putithere->typed_val_float.dval) <= sizeof (double))
2105b725ae77Skettenis num = sscanf (p, "%lg%c", (double *) &putithere->typed_val_float.dval, &c);
2106b725ae77Skettenis else
2107b725ae77Skettenis {
2108b725ae77Skettenis #ifdef SCANF_HAS_LONG_DOUBLE
2109b725ae77Skettenis num = sscanf (p, "%Lg%c", &putithere->typed_val_float.dval, &c);
2110b725ae77Skettenis #else
2111b725ae77Skettenis /* Scan it into a double, then assign it to the long double.
2112b725ae77Skettenis This at least wins with values representable in the range
2113b725ae77Skettenis of doubles. */
2114b725ae77Skettenis double temp;
2115b725ae77Skettenis num = sscanf (p, "%lg%c", &temp, &c);
2116b725ae77Skettenis putithere->typed_val_float.dval = temp;
2117b725ae77Skettenis #endif
2118b725ae77Skettenis }
2119b725ae77Skettenis p[len] = saved_char; /* restore the input stream */
2120b725ae77Skettenis if (num != 1) /* check scanf found ONLY a float ... */
2121b725ae77Skettenis return ERROR;
2122b725ae77Skettenis /* See if it has `f' or `d' suffix (float or double). */
2123b725ae77Skettenis
2124b725ae77Skettenis c = tolower (p[len - 1]);
2125b725ae77Skettenis
2126b725ae77Skettenis if (c == 'f' || c == 'F')
2127b725ae77Skettenis putithere->typed_val_float.type = builtin_type_float;
2128b725ae77Skettenis else if (isdigit (c) || c == '.' || c == 'd' || c == 'D')
2129b725ae77Skettenis putithere->typed_val_float.type = builtin_type_double;
2130b725ae77Skettenis else
2131b725ae77Skettenis return ERROR;
2132b725ae77Skettenis
2133b725ae77Skettenis return FLOATING_POINT_LITERAL;
2134b725ae77Skettenis }
2135b725ae77Skettenis
2136b725ae77Skettenis /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
2137b725ae77Skettenis if (p[0] == '0')
2138b725ae77Skettenis switch (p[1])
2139b725ae77Skettenis {
2140b725ae77Skettenis case 'x':
2141b725ae77Skettenis case 'X':
2142b725ae77Skettenis if (len >= 3)
2143b725ae77Skettenis {
2144b725ae77Skettenis p += 2;
2145b725ae77Skettenis base = 16;
2146b725ae77Skettenis len -= 2;
2147b725ae77Skettenis }
2148b725ae77Skettenis break;
2149b725ae77Skettenis
2150b725ae77Skettenis case 't':
2151b725ae77Skettenis case 'T':
2152b725ae77Skettenis case 'd':
2153b725ae77Skettenis case 'D':
2154b725ae77Skettenis if (len >= 3)
2155b725ae77Skettenis {
2156b725ae77Skettenis p += 2;
2157b725ae77Skettenis base = 10;
2158b725ae77Skettenis len -= 2;
2159b725ae77Skettenis }
2160b725ae77Skettenis break;
2161b725ae77Skettenis
2162b725ae77Skettenis default:
2163b725ae77Skettenis base = 8;
2164b725ae77Skettenis break;
2165b725ae77Skettenis }
2166b725ae77Skettenis
2167b725ae77Skettenis c = p[len-1];
2168b725ae77Skettenis /* A paranoid calculation of (1<<64)-1. */
2169b725ae77Skettenis limit = (ULONGEST)0xffffffff;
2170b725ae77Skettenis limit = ((limit << 16) << 16) | limit;
2171b725ae77Skettenis if (c == 'l' || c == 'L')
2172b725ae77Skettenis {
2173b725ae77Skettenis type = java_long_type;
2174b725ae77Skettenis len--;
2175b725ae77Skettenis }
2176b725ae77Skettenis else
2177b725ae77Skettenis {
2178b725ae77Skettenis type = java_int_type;
2179b725ae77Skettenis }
2180b725ae77Skettenis limit_div_base = limit / (ULONGEST) base;
2181b725ae77Skettenis
2182b725ae77Skettenis while (--len >= 0)
2183b725ae77Skettenis {
2184b725ae77Skettenis c = *p++;
2185b725ae77Skettenis if (c >= '0' && c <= '9')
2186b725ae77Skettenis c -= '0';
2187b725ae77Skettenis else if (c >= 'A' && c <= 'Z')
2188b725ae77Skettenis c -= 'A' - 10;
2189b725ae77Skettenis else if (c >= 'a' && c <= 'z')
2190b725ae77Skettenis c -= 'a' - 10;
2191b725ae77Skettenis else
2192b725ae77Skettenis return ERROR; /* Char not a digit */
2193b725ae77Skettenis if (c >= base)
2194b725ae77Skettenis return ERROR;
2195b725ae77Skettenis if (n > limit_div_base
2196b725ae77Skettenis || (n *= base) > limit - c)
2197b725ae77Skettenis error (_("Numeric constant too large"));
2198b725ae77Skettenis n += c;
2199b725ae77Skettenis }
2200b725ae77Skettenis
2201b725ae77Skettenis /* If the type is bigger than a 32-bit signed integer can be, implicitly
2202b725ae77Skettenis promote to long. Java does not do this, so mark it as builtin_type_uint64
2203b725ae77Skettenis rather than java_long_type. 0x80000000 will become -0x80000000 instead
2204b725ae77Skettenis of 0x80000000L, because we don't know the sign at this point.
2205b725ae77Skettenis */
2206b725ae77Skettenis if (type == java_int_type && n > (ULONGEST)0x80000000)
2207b725ae77Skettenis type = builtin_type_uint64;
2208b725ae77Skettenis
2209b725ae77Skettenis putithere->typed_val_int.val = n;
2210b725ae77Skettenis putithere->typed_val_int.type = type;
2211b725ae77Skettenis
2212b725ae77Skettenis return INTEGER_LITERAL;
2213b725ae77Skettenis }
2214b725ae77Skettenis
2215b725ae77Skettenis struct token
2216b725ae77Skettenis {
2217b725ae77Skettenis char *operator;
2218b725ae77Skettenis int token;
2219b725ae77Skettenis enum exp_opcode opcode;
2220b725ae77Skettenis };
2221b725ae77Skettenis
2222b725ae77Skettenis static const struct token tokentab3[] =
2223b725ae77Skettenis {
2224b725ae77Skettenis {">>=", ASSIGN_MODIFY, BINOP_RSH},
2225b725ae77Skettenis {"<<=", ASSIGN_MODIFY, BINOP_LSH}
2226b725ae77Skettenis };
2227b725ae77Skettenis
2228b725ae77Skettenis static const struct token tokentab2[] =
2229b725ae77Skettenis {
2230b725ae77Skettenis {"+=", ASSIGN_MODIFY, BINOP_ADD},
2231b725ae77Skettenis {"-=", ASSIGN_MODIFY, BINOP_SUB},
2232b725ae77Skettenis {"*=", ASSIGN_MODIFY, BINOP_MUL},
2233b725ae77Skettenis {"/=", ASSIGN_MODIFY, BINOP_DIV},
2234b725ae77Skettenis {"%=", ASSIGN_MODIFY, BINOP_REM},
2235b725ae77Skettenis {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR},
2236b725ae77Skettenis {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND},
2237b725ae77Skettenis {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR},
2238b725ae77Skettenis {"++", INCREMENT, BINOP_END},
2239b725ae77Skettenis {"--", DECREMENT, BINOP_END},
2240b725ae77Skettenis {"&&", ANDAND, BINOP_END},
2241b725ae77Skettenis {"||", OROR, BINOP_END},
2242b725ae77Skettenis {"<<", LSH, BINOP_END},
2243b725ae77Skettenis {">>", RSH, BINOP_END},
2244b725ae77Skettenis {"==", EQUAL, BINOP_END},
2245b725ae77Skettenis {"!=", NOTEQUAL, BINOP_END},
2246b725ae77Skettenis {"<=", LEQ, BINOP_END},
2247b725ae77Skettenis {">=", GEQ, BINOP_END}
2248b725ae77Skettenis };
2249b725ae77Skettenis
2250b725ae77Skettenis /* Read one token, getting characters through lexptr. */
2251b725ae77Skettenis
2252b725ae77Skettenis static int
yylex()2253b725ae77Skettenis yylex ()
2254b725ae77Skettenis {
2255b725ae77Skettenis int c;
2256b725ae77Skettenis int namelen;
2257b725ae77Skettenis unsigned int i;
2258b725ae77Skettenis char *tokstart;
2259b725ae77Skettenis char *tokptr;
2260b725ae77Skettenis int tempbufindex;
2261b725ae77Skettenis static char *tempbuf;
2262b725ae77Skettenis static int tempbufsize;
2263b725ae77Skettenis
2264b725ae77Skettenis retry:
2265b725ae77Skettenis
2266b725ae77Skettenis prev_lexptr = lexptr;
2267b725ae77Skettenis
2268b725ae77Skettenis tokstart = lexptr;
2269b725ae77Skettenis /* See if it is a special token of length 3. */
2270b725ae77Skettenis for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++)
2271b725ae77Skettenis if (strncmp (tokstart, tokentab3[i].operator, 3) == 0)
2272b725ae77Skettenis {
2273b725ae77Skettenis lexptr += 3;
2274b725ae77Skettenis yylval.opcode = tokentab3[i].opcode;
2275b725ae77Skettenis return tokentab3[i].token;
2276b725ae77Skettenis }
2277b725ae77Skettenis
2278b725ae77Skettenis /* See if it is a special token of length 2. */
2279b725ae77Skettenis for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++)
2280b725ae77Skettenis if (strncmp (tokstart, tokentab2[i].operator, 2) == 0)
2281b725ae77Skettenis {
2282b725ae77Skettenis lexptr += 2;
2283b725ae77Skettenis yylval.opcode = tokentab2[i].opcode;
2284b725ae77Skettenis return tokentab2[i].token;
2285b725ae77Skettenis }
2286b725ae77Skettenis
2287b725ae77Skettenis switch (c = *tokstart)
2288b725ae77Skettenis {
2289b725ae77Skettenis case 0:
2290b725ae77Skettenis return 0;
2291b725ae77Skettenis
2292b725ae77Skettenis case ' ':
2293b725ae77Skettenis case '\t':
2294b725ae77Skettenis case '\n':
2295b725ae77Skettenis lexptr++;
2296b725ae77Skettenis goto retry;
2297b725ae77Skettenis
2298b725ae77Skettenis case '\'':
2299b725ae77Skettenis /* We either have a character constant ('0' or '\177' for example)
2300b725ae77Skettenis or we have a quoted symbol reference ('foo(int,int)' in C++
2301b725ae77Skettenis for example). */
2302b725ae77Skettenis lexptr++;
2303b725ae77Skettenis c = *lexptr++;
2304b725ae77Skettenis if (c == '\\')
2305b725ae77Skettenis c = parse_escape (&lexptr);
2306b725ae77Skettenis else if (c == '\'')
2307b725ae77Skettenis error (_("Empty character constant"));
2308b725ae77Skettenis
2309b725ae77Skettenis yylval.typed_val_int.val = c;
2310b725ae77Skettenis yylval.typed_val_int.type = java_char_type;
2311b725ae77Skettenis
2312b725ae77Skettenis c = *lexptr++;
2313b725ae77Skettenis if (c != '\'')
2314b725ae77Skettenis {
2315b725ae77Skettenis namelen = skip_quoted (tokstart) - tokstart;
2316b725ae77Skettenis if (namelen > 2)
2317b725ae77Skettenis {
2318b725ae77Skettenis lexptr = tokstart + namelen;
2319b725ae77Skettenis if (lexptr[-1] != '\'')
2320b725ae77Skettenis error (_("Unmatched single quote"));
2321b725ae77Skettenis namelen -= 2;
2322b725ae77Skettenis tokstart++;
2323b725ae77Skettenis goto tryname;
2324b725ae77Skettenis }
2325b725ae77Skettenis error (_("Invalid character constant"));
2326b725ae77Skettenis }
2327b725ae77Skettenis return INTEGER_LITERAL;
2328b725ae77Skettenis
2329b725ae77Skettenis case '(':
2330b725ae77Skettenis paren_depth++;
2331b725ae77Skettenis lexptr++;
2332b725ae77Skettenis return c;
2333b725ae77Skettenis
2334b725ae77Skettenis case ')':
2335b725ae77Skettenis if (paren_depth == 0)
2336b725ae77Skettenis return 0;
2337b725ae77Skettenis paren_depth--;
2338b725ae77Skettenis lexptr++;
2339b725ae77Skettenis return c;
2340b725ae77Skettenis
2341b725ae77Skettenis case ',':
2342b725ae77Skettenis if (comma_terminates && paren_depth == 0)
2343b725ae77Skettenis return 0;
2344b725ae77Skettenis lexptr++;
2345b725ae77Skettenis return c;
2346b725ae77Skettenis
2347b725ae77Skettenis case '.':
2348b725ae77Skettenis /* Might be a floating point number. */
2349b725ae77Skettenis if (lexptr[1] < '0' || lexptr[1] > '9')
2350b725ae77Skettenis goto symbol; /* Nope, must be a symbol. */
2351b725ae77Skettenis /* FALL THRU into number case. */
2352b725ae77Skettenis
2353b725ae77Skettenis case '0':
2354b725ae77Skettenis case '1':
2355b725ae77Skettenis case '2':
2356b725ae77Skettenis case '3':
2357b725ae77Skettenis case '4':
2358b725ae77Skettenis case '5':
2359b725ae77Skettenis case '6':
2360b725ae77Skettenis case '7':
2361b725ae77Skettenis case '8':
2362b725ae77Skettenis case '9':
2363b725ae77Skettenis {
2364b725ae77Skettenis /* It's a number. */
2365b725ae77Skettenis int got_dot = 0, got_e = 0, toktype;
2366b725ae77Skettenis char *p = tokstart;
2367b725ae77Skettenis int hex = input_radix > 10;
2368b725ae77Skettenis
2369b725ae77Skettenis if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
2370b725ae77Skettenis {
2371b725ae77Skettenis p += 2;
2372b725ae77Skettenis hex = 1;
2373b725ae77Skettenis }
2374b725ae77Skettenis else if (c == '0' && (p[1]=='t' || p[1]=='T' || p[1]=='d' || p[1]=='D'))
2375b725ae77Skettenis {
2376b725ae77Skettenis p += 2;
2377b725ae77Skettenis hex = 0;
2378b725ae77Skettenis }
2379b725ae77Skettenis
2380b725ae77Skettenis for (;; ++p)
2381b725ae77Skettenis {
2382b725ae77Skettenis /* This test includes !hex because 'e' is a valid hex digit
2383b725ae77Skettenis and thus does not indicate a floating point number when
2384b725ae77Skettenis the radix is hex. */
2385b725ae77Skettenis if (!hex && !got_e && (*p == 'e' || *p == 'E'))
2386b725ae77Skettenis got_dot = got_e = 1;
2387b725ae77Skettenis /* This test does not include !hex, because a '.' always indicates
2388b725ae77Skettenis a decimal floating point number regardless of the radix. */
2389b725ae77Skettenis else if (!got_dot && *p == '.')
2390b725ae77Skettenis got_dot = 1;
2391b725ae77Skettenis else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
2392b725ae77Skettenis && (*p == '-' || *p == '+'))
2393b725ae77Skettenis /* This is the sign of the exponent, not the end of the
2394b725ae77Skettenis number. */
2395b725ae77Skettenis continue;
2396b725ae77Skettenis /* We will take any letters or digits. parse_number will
2397b725ae77Skettenis complain if past the radix, or if L or U are not final. */
2398b725ae77Skettenis else if ((*p < '0' || *p > '9')
2399b725ae77Skettenis && ((*p < 'a' || *p > 'z')
2400b725ae77Skettenis && (*p < 'A' || *p > 'Z')))
2401b725ae77Skettenis break;
2402b725ae77Skettenis }
2403b725ae77Skettenis toktype = parse_number (tokstart, p - tokstart, got_dot|got_e, &yylval);
2404b725ae77Skettenis if (toktype == ERROR)
2405b725ae77Skettenis {
2406b725ae77Skettenis char *err_copy = (char *) alloca (p - tokstart + 1);
2407b725ae77Skettenis
2408b725ae77Skettenis memcpy (err_copy, tokstart, p - tokstart);
2409b725ae77Skettenis err_copy[p - tokstart] = 0;
2410b725ae77Skettenis error (_("Invalid number \"%s\""), err_copy);
2411b725ae77Skettenis }
2412b725ae77Skettenis lexptr = p;
2413b725ae77Skettenis return toktype;
2414b725ae77Skettenis }
2415b725ae77Skettenis
2416b725ae77Skettenis case '+':
2417b725ae77Skettenis case '-':
2418b725ae77Skettenis case '*':
2419b725ae77Skettenis case '/':
2420b725ae77Skettenis case '%':
2421b725ae77Skettenis case '|':
2422b725ae77Skettenis case '&':
2423b725ae77Skettenis case '^':
2424b725ae77Skettenis case '~':
2425b725ae77Skettenis case '!':
2426b725ae77Skettenis case '<':
2427b725ae77Skettenis case '>':
2428b725ae77Skettenis case '[':
2429b725ae77Skettenis case ']':
2430b725ae77Skettenis case '?':
2431b725ae77Skettenis case ':':
2432b725ae77Skettenis case '=':
2433b725ae77Skettenis case '{':
2434b725ae77Skettenis case '}':
2435b725ae77Skettenis symbol:
2436b725ae77Skettenis lexptr++;
2437b725ae77Skettenis return c;
2438b725ae77Skettenis
2439b725ae77Skettenis case '"':
2440b725ae77Skettenis
2441b725ae77Skettenis /* Build the gdb internal form of the input string in tempbuf,
2442b725ae77Skettenis translating any standard C escape forms seen. Note that the
2443b725ae77Skettenis buffer is null byte terminated *only* for the convenience of
2444b725ae77Skettenis debugging gdb itself and printing the buffer contents when
2445b725ae77Skettenis the buffer contains no embedded nulls. Gdb does not depend
2446b725ae77Skettenis upon the buffer being null byte terminated, it uses the length
2447b725ae77Skettenis string instead. This allows gdb to handle C strings (as well
2448b725ae77Skettenis as strings in other languages) with embedded null bytes */
2449b725ae77Skettenis
2450b725ae77Skettenis tokptr = ++tokstart;
2451b725ae77Skettenis tempbufindex = 0;
2452b725ae77Skettenis
2453b725ae77Skettenis do {
2454b725ae77Skettenis /* Grow the static temp buffer if necessary, including allocating
2455b725ae77Skettenis the first one on demand. */
2456b725ae77Skettenis if (tempbufindex + 1 >= tempbufsize)
2457b725ae77Skettenis {
2458b725ae77Skettenis tempbuf = (char *) xrealloc (tempbuf, tempbufsize += 64);
2459b725ae77Skettenis }
2460b725ae77Skettenis switch (*tokptr)
2461b725ae77Skettenis {
2462b725ae77Skettenis case '\0':
2463b725ae77Skettenis case '"':
2464b725ae77Skettenis /* Do nothing, loop will terminate. */
2465b725ae77Skettenis break;
2466b725ae77Skettenis case '\\':
2467b725ae77Skettenis tokptr++;
2468b725ae77Skettenis c = parse_escape (&tokptr);
2469b725ae77Skettenis if (c == -1)
2470b725ae77Skettenis {
2471b725ae77Skettenis continue;
2472b725ae77Skettenis }
2473b725ae77Skettenis tempbuf[tempbufindex++] = c;
2474b725ae77Skettenis break;
2475b725ae77Skettenis default:
2476b725ae77Skettenis tempbuf[tempbufindex++] = *tokptr++;
2477b725ae77Skettenis break;
2478b725ae77Skettenis }
2479b725ae77Skettenis } while ((*tokptr != '"') && (*tokptr != '\0'));
2480b725ae77Skettenis if (*tokptr++ != '"')
2481b725ae77Skettenis {
2482b725ae77Skettenis error (_("Unterminated string in expression"));
2483b725ae77Skettenis }
2484b725ae77Skettenis tempbuf[tempbufindex] = '\0'; /* See note above */
2485b725ae77Skettenis yylval.sval.ptr = tempbuf;
2486b725ae77Skettenis yylval.sval.length = tempbufindex;
2487b725ae77Skettenis lexptr = tokptr;
2488b725ae77Skettenis return (STRING_LITERAL);
2489b725ae77Skettenis }
2490b725ae77Skettenis
2491b725ae77Skettenis if (!(c == '_' || c == '$'
2492b725ae77Skettenis || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
2493b725ae77Skettenis /* We must have come across a bad character (e.g. ';'). */
2494b725ae77Skettenis error (_("Invalid character '%c' in expression"), c);
2495b725ae77Skettenis
2496b725ae77Skettenis /* It's a name. See how long it is. */
2497b725ae77Skettenis namelen = 0;
2498b725ae77Skettenis for (c = tokstart[namelen];
2499b725ae77Skettenis (c == '_'
2500b725ae77Skettenis || c == '$'
2501b725ae77Skettenis || (c >= '0' && c <= '9')
2502b725ae77Skettenis || (c >= 'a' && c <= 'z')
2503b725ae77Skettenis || (c >= 'A' && c <= 'Z')
2504b725ae77Skettenis || c == '<');
2505b725ae77Skettenis )
2506b725ae77Skettenis {
2507b725ae77Skettenis if (c == '<')
2508b725ae77Skettenis {
2509b725ae77Skettenis int i = namelen;
2510b725ae77Skettenis while (tokstart[++i] && tokstart[i] != '>');
2511b725ae77Skettenis if (tokstart[i] == '>')
2512b725ae77Skettenis namelen = i;
2513b725ae77Skettenis }
2514b725ae77Skettenis c = tokstart[++namelen];
2515b725ae77Skettenis }
2516b725ae77Skettenis
2517b725ae77Skettenis /* The token "if" terminates the expression and is NOT
2518b725ae77Skettenis removed from the input stream. */
2519b725ae77Skettenis if (namelen == 2 && tokstart[0] == 'i' && tokstart[1] == 'f')
2520b725ae77Skettenis {
2521b725ae77Skettenis return 0;
2522b725ae77Skettenis }
2523b725ae77Skettenis
2524b725ae77Skettenis lexptr += namelen;
2525b725ae77Skettenis
2526b725ae77Skettenis tryname:
2527b725ae77Skettenis
2528b725ae77Skettenis /* Catch specific keywords. Should be done with a data structure. */
2529b725ae77Skettenis switch (namelen)
2530b725ae77Skettenis {
2531b725ae77Skettenis case 7:
2532b725ae77Skettenis if (DEPRECATED_STREQN (tokstart, "boolean", 7))
2533b725ae77Skettenis return BOOLEAN;
2534b725ae77Skettenis break;
2535b725ae77Skettenis case 6:
2536b725ae77Skettenis if (DEPRECATED_STREQN (tokstart, "double", 6))
2537b725ae77Skettenis return DOUBLE;
2538b725ae77Skettenis break;
2539b725ae77Skettenis case 5:
2540b725ae77Skettenis if (DEPRECATED_STREQN (tokstart, "short", 5))
2541b725ae77Skettenis return SHORT;
2542b725ae77Skettenis if (DEPRECATED_STREQN (tokstart, "false", 5))
2543b725ae77Skettenis {
2544b725ae77Skettenis yylval.lval = 0;
2545b725ae77Skettenis return BOOLEAN_LITERAL;
2546b725ae77Skettenis }
2547b725ae77Skettenis if (DEPRECATED_STREQN (tokstart, "super", 5))
2548b725ae77Skettenis return SUPER;
2549b725ae77Skettenis if (DEPRECATED_STREQN (tokstart, "float", 5))
2550b725ae77Skettenis return FLOAT;
2551b725ae77Skettenis break;
2552b725ae77Skettenis case 4:
2553b725ae77Skettenis if (DEPRECATED_STREQN (tokstart, "long", 4))
2554b725ae77Skettenis return LONG;
2555b725ae77Skettenis if (DEPRECATED_STREQN (tokstart, "byte", 4))
2556b725ae77Skettenis return BYTE;
2557b725ae77Skettenis if (DEPRECATED_STREQN (tokstart, "char", 4))
2558b725ae77Skettenis return CHAR;
2559b725ae77Skettenis if (DEPRECATED_STREQN (tokstart, "true", 4))
2560b725ae77Skettenis {
2561b725ae77Skettenis yylval.lval = 1;
2562b725ae77Skettenis return BOOLEAN_LITERAL;
2563b725ae77Skettenis }
2564b725ae77Skettenis break;
2565b725ae77Skettenis case 3:
2566b725ae77Skettenis if (strncmp (tokstart, "int", 3) == 0)
2567b725ae77Skettenis return INT;
2568b725ae77Skettenis if (strncmp (tokstart, "new", 3) == 0)
2569b725ae77Skettenis return NEW;
2570b725ae77Skettenis break;
2571b725ae77Skettenis default:
2572b725ae77Skettenis break;
2573b725ae77Skettenis }
2574b725ae77Skettenis
2575b725ae77Skettenis yylval.sval.ptr = tokstart;
2576b725ae77Skettenis yylval.sval.length = namelen;
2577b725ae77Skettenis
2578b725ae77Skettenis if (*tokstart == '$')
2579b725ae77Skettenis {
2580b725ae77Skettenis write_dollar_variable (yylval.sval);
2581b725ae77Skettenis return VARIABLE;
2582b725ae77Skettenis }
2583b725ae77Skettenis
2584b725ae77Skettenis /* Input names that aren't symbols but ARE valid hex numbers,
2585b725ae77Skettenis when the input radix permits them, can be names or numbers
2586b725ae77Skettenis depending on the parse. Note we support radixes > 16 here. */
2587b725ae77Skettenis if (((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10) ||
2588b725ae77Skettenis (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
2589b725ae77Skettenis {
2590b725ae77Skettenis YYSTYPE newlval; /* Its value is ignored. */
2591b725ae77Skettenis int hextype = parse_number (tokstart, namelen, 0, &newlval);
2592b725ae77Skettenis if (hextype == INTEGER_LITERAL)
2593b725ae77Skettenis return NAME_OR_INT;
2594b725ae77Skettenis }
2595b725ae77Skettenis return IDENTIFIER;
2596b725ae77Skettenis }
2597b725ae77Skettenis
2598b725ae77Skettenis void
yyerror(msg)2599b725ae77Skettenis yyerror (msg)
2600b725ae77Skettenis char *msg;
2601b725ae77Skettenis {
2602b725ae77Skettenis if (prev_lexptr)
2603b725ae77Skettenis lexptr = prev_lexptr;
2604b725ae77Skettenis
2605b725ae77Skettenis if (msg)
2606b725ae77Skettenis error (_("%s: near `%s'"), msg, lexptr);
2607b725ae77Skettenis else
2608b725ae77Skettenis error (_("error in expression, near `%s'"), lexptr);
2609b725ae77Skettenis }
2610b725ae77Skettenis
2611b725ae77Skettenis static struct type *
java_type_from_name(name)2612b725ae77Skettenis java_type_from_name (name)
2613b725ae77Skettenis struct stoken name;
2614b725ae77Skettenis
2615b725ae77Skettenis {
2616b725ae77Skettenis char *tmp = copy_name (name);
2617b725ae77Skettenis struct type *typ = java_lookup_class (tmp);
2618b725ae77Skettenis if (typ == NULL || TYPE_CODE (typ) != TYPE_CODE_STRUCT)
2619b725ae77Skettenis error (_("No class named `%s'"), tmp);
2620b725ae77Skettenis return typ;
2621b725ae77Skettenis }
2622b725ae77Skettenis
2623b725ae77Skettenis /* If NAME is a valid variable name in this scope, push it and return 1.
2624b725ae77Skettenis Otherwise, return 0. */
2625b725ae77Skettenis
2626b725ae77Skettenis static int
push_variable(struct stoken name)2627b725ae77Skettenis push_variable (struct stoken name)
2628b725ae77Skettenis {
2629b725ae77Skettenis char *tmp = copy_name (name);
2630b725ae77Skettenis int is_a_field_of_this = 0;
2631b725ae77Skettenis struct symbol *sym;
2632b725ae77Skettenis sym = lookup_symbol (tmp, expression_context_block, VAR_DOMAIN,
2633b725ae77Skettenis &is_a_field_of_this, (struct symtab **) NULL);
2634b725ae77Skettenis if (sym && SYMBOL_CLASS (sym) != LOC_TYPEDEF)
2635b725ae77Skettenis {
2636b725ae77Skettenis if (symbol_read_needs_frame (sym))
2637b725ae77Skettenis {
2638b725ae77Skettenis if (innermost_block == 0 ||
2639b725ae77Skettenis contained_in (block_found, innermost_block))
2640b725ae77Skettenis innermost_block = block_found;
2641b725ae77Skettenis }
2642b725ae77Skettenis
2643b725ae77Skettenis write_exp_elt_opcode (OP_VAR_VALUE);
2644b725ae77Skettenis /* We want to use the selected frame, not another more inner frame
2645b725ae77Skettenis which happens to be in the same block. */
2646b725ae77Skettenis write_exp_elt_block (NULL);
2647b725ae77Skettenis write_exp_elt_sym (sym);
2648b725ae77Skettenis write_exp_elt_opcode (OP_VAR_VALUE);
2649b725ae77Skettenis return 1;
2650b725ae77Skettenis }
2651b725ae77Skettenis if (is_a_field_of_this)
2652b725ae77Skettenis {
2653b725ae77Skettenis /* it hangs off of `this'. Must not inadvertently convert from a
2654b725ae77Skettenis method call to data ref. */
2655b725ae77Skettenis if (innermost_block == 0 ||
2656b725ae77Skettenis contained_in (block_found, innermost_block))
2657b725ae77Skettenis innermost_block = block_found;
2658b725ae77Skettenis write_exp_elt_opcode (OP_THIS);
2659b725ae77Skettenis write_exp_elt_opcode (OP_THIS);
2660b725ae77Skettenis write_exp_elt_opcode (STRUCTOP_PTR);
2661b725ae77Skettenis write_exp_string (name);
2662b725ae77Skettenis write_exp_elt_opcode (STRUCTOP_PTR);
2663b725ae77Skettenis return 1;
2664b725ae77Skettenis }
2665b725ae77Skettenis return 0;
2666b725ae77Skettenis }
2667b725ae77Skettenis
2668b725ae77Skettenis /* Assuming a reference expression has been pushed, emit the
2669b725ae77Skettenis STRUCTOP_STRUCT ops to access the field named NAME. If NAME is a
2670b725ae77Skettenis qualified name (has '.'), generate a field access for each part. */
2671b725ae77Skettenis
2672b725ae77Skettenis static void
push_fieldnames(name)2673b725ae77Skettenis push_fieldnames (name)
2674b725ae77Skettenis struct stoken name;
2675b725ae77Skettenis {
2676b725ae77Skettenis int i;
2677b725ae77Skettenis struct stoken token;
2678b725ae77Skettenis token.ptr = name.ptr;
2679b725ae77Skettenis for (i = 0; ; i++)
2680b725ae77Skettenis {
2681b725ae77Skettenis if (i == name.length || name.ptr[i] == '.')
2682b725ae77Skettenis {
2683b725ae77Skettenis /* token.ptr is start of current field name. */
2684b725ae77Skettenis token.length = &name.ptr[i] - token.ptr;
2685b725ae77Skettenis write_exp_elt_opcode (STRUCTOP_STRUCT);
2686b725ae77Skettenis write_exp_string (token);
2687b725ae77Skettenis write_exp_elt_opcode (STRUCTOP_STRUCT);
2688b725ae77Skettenis token.ptr += token.length + 1;
2689b725ae77Skettenis }
2690b725ae77Skettenis if (i >= name.length)
2691b725ae77Skettenis break;
2692b725ae77Skettenis }
2693b725ae77Skettenis }
2694b725ae77Skettenis
2695b725ae77Skettenis /* Helper routine for push_expression_name.
2696b725ae77Skettenis Handle a qualified name, where DOT_INDEX is the index of the first '.' */
2697b725ae77Skettenis
2698b725ae77Skettenis static void
push_qualified_expression_name(struct stoken name,int dot_index)2699b725ae77Skettenis push_qualified_expression_name (struct stoken name, int dot_index)
2700b725ae77Skettenis {
2701b725ae77Skettenis struct stoken token;
2702b725ae77Skettenis char *tmp;
2703b725ae77Skettenis struct type *typ;
2704b725ae77Skettenis
2705b725ae77Skettenis token.ptr = name.ptr;
2706b725ae77Skettenis token.length = dot_index;
2707b725ae77Skettenis
2708b725ae77Skettenis if (push_variable (token))
2709b725ae77Skettenis {
2710b725ae77Skettenis token.ptr = name.ptr + dot_index + 1;
2711b725ae77Skettenis token.length = name.length - dot_index - 1;
2712b725ae77Skettenis push_fieldnames (token);
2713b725ae77Skettenis return;
2714b725ae77Skettenis }
2715b725ae77Skettenis
2716b725ae77Skettenis token.ptr = name.ptr;
2717b725ae77Skettenis for (;;)
2718b725ae77Skettenis {
2719b725ae77Skettenis token.length = dot_index;
2720b725ae77Skettenis tmp = copy_name (token);
2721b725ae77Skettenis typ = java_lookup_class (tmp);
2722b725ae77Skettenis if (typ != NULL)
2723b725ae77Skettenis {
2724b725ae77Skettenis if (dot_index == name.length)
2725b725ae77Skettenis {
2726b725ae77Skettenis write_exp_elt_opcode(OP_TYPE);
2727b725ae77Skettenis write_exp_elt_type(typ);
2728b725ae77Skettenis write_exp_elt_opcode(OP_TYPE);
2729b725ae77Skettenis return;
2730b725ae77Skettenis }
2731b725ae77Skettenis dot_index++; /* Skip '.' */
2732b725ae77Skettenis name.ptr += dot_index;
2733b725ae77Skettenis name.length -= dot_index;
2734b725ae77Skettenis dot_index = 0;
2735b725ae77Skettenis while (dot_index < name.length && name.ptr[dot_index] != '.')
2736b725ae77Skettenis dot_index++;
2737b725ae77Skettenis token.ptr = name.ptr;
2738b725ae77Skettenis token.length = dot_index;
2739b725ae77Skettenis write_exp_elt_opcode (OP_SCOPE);
2740b725ae77Skettenis write_exp_elt_type (typ);
2741b725ae77Skettenis write_exp_string (token);
2742b725ae77Skettenis write_exp_elt_opcode (OP_SCOPE);
2743b725ae77Skettenis if (dot_index < name.length)
2744b725ae77Skettenis {
2745b725ae77Skettenis dot_index++;
2746b725ae77Skettenis name.ptr += dot_index;
2747b725ae77Skettenis name.length -= dot_index;
2748b725ae77Skettenis push_fieldnames (name);
2749b725ae77Skettenis }
2750b725ae77Skettenis return;
2751b725ae77Skettenis }
2752b725ae77Skettenis else if (dot_index >= name.length)
2753b725ae77Skettenis break;
2754b725ae77Skettenis dot_index++; /* Skip '.' */
2755b725ae77Skettenis while (dot_index < name.length && name.ptr[dot_index] != '.')
2756b725ae77Skettenis dot_index++;
2757b725ae77Skettenis }
2758b725ae77Skettenis error (_("unknown type `%.*s'"), name.length, name.ptr);
2759b725ae77Skettenis }
2760b725ae77Skettenis
2761b725ae77Skettenis /* Handle Name in an expression (or LHS).
2762b725ae77Skettenis Handle VAR, TYPE, TYPE.FIELD1....FIELDN and VAR.FIELD1....FIELDN. */
2763b725ae77Skettenis
2764b725ae77Skettenis static void
push_expression_name(name)2765b725ae77Skettenis push_expression_name (name)
2766b725ae77Skettenis struct stoken name;
2767b725ae77Skettenis {
2768b725ae77Skettenis char *tmp;
2769b725ae77Skettenis struct type *typ;
2770b725ae77Skettenis char *ptr;
2771b725ae77Skettenis int i;
2772b725ae77Skettenis
2773b725ae77Skettenis for (i = 0; i < name.length; i++)
2774b725ae77Skettenis {
2775b725ae77Skettenis if (name.ptr[i] == '.')
2776b725ae77Skettenis {
2777b725ae77Skettenis /* It's a Qualified Expression Name. */
2778b725ae77Skettenis push_qualified_expression_name (name, i);
2779b725ae77Skettenis return;
2780b725ae77Skettenis }
2781b725ae77Skettenis }
2782b725ae77Skettenis
2783b725ae77Skettenis /* It's a Simple Expression Name. */
2784b725ae77Skettenis
2785b725ae77Skettenis if (push_variable (name))
2786b725ae77Skettenis return;
2787b725ae77Skettenis tmp = copy_name (name);
2788b725ae77Skettenis typ = java_lookup_class (tmp);
2789b725ae77Skettenis if (typ != NULL)
2790b725ae77Skettenis {
2791b725ae77Skettenis write_exp_elt_opcode(OP_TYPE);
2792b725ae77Skettenis write_exp_elt_type(typ);
2793b725ae77Skettenis write_exp_elt_opcode(OP_TYPE);
2794b725ae77Skettenis }
2795b725ae77Skettenis else
2796b725ae77Skettenis {
2797b725ae77Skettenis struct minimal_symbol *msymbol;
2798b725ae77Skettenis
2799b725ae77Skettenis msymbol = lookup_minimal_symbol (tmp, NULL, NULL);
2800b725ae77Skettenis if (msymbol != NULL)
2801b725ae77Skettenis {
2802b725ae77Skettenis write_exp_msymbol (msymbol,
2803b725ae77Skettenis lookup_function_type (builtin_type_int),
2804b725ae77Skettenis builtin_type_int);
2805b725ae77Skettenis }
2806b725ae77Skettenis else if (!have_full_symbols () && !have_partial_symbols ())
2807b725ae77Skettenis error (_("No symbol table is loaded. Use the \"file\" command"));
2808b725ae77Skettenis else
2809b725ae77Skettenis error (_("No symbol \"%s\" in current context"), tmp);
2810b725ae77Skettenis }
2811b725ae77Skettenis
2812b725ae77Skettenis }
2813b725ae77Skettenis
2814b725ae77Skettenis
2815b725ae77Skettenis /* The following two routines, copy_exp and insert_exp, aren't specific to
2816b725ae77Skettenis Java, so they could go in parse.c, but their only purpose is to support
2817b725ae77Skettenis the parsing kludges we use in this file, so maybe it's best to isolate
2818b725ae77Skettenis them here. */
2819b725ae77Skettenis
2820b725ae77Skettenis /* Copy the expression whose last element is at index ENDPOS - 1 in EXPR
2821b725ae77Skettenis into a freshly xmalloc'ed struct expression. Its language_defn is set
2822b725ae77Skettenis to null. */
2823b725ae77Skettenis static struct expression *
copy_exp(expr,endpos)2824b725ae77Skettenis copy_exp (expr, endpos)
2825b725ae77Skettenis struct expression *expr;
2826b725ae77Skettenis int endpos;
2827b725ae77Skettenis {
2828b725ae77Skettenis int len = length_of_subexp (expr, endpos);
2829b725ae77Skettenis struct expression *new
2830b725ae77Skettenis = (struct expression *) xmalloc (sizeof (*new) + EXP_ELEM_TO_BYTES (len));
2831b725ae77Skettenis new->nelts = len;
2832b725ae77Skettenis memcpy (new->elts, expr->elts + endpos - len, EXP_ELEM_TO_BYTES (len));
2833b725ae77Skettenis new->language_defn = 0;
2834b725ae77Skettenis
2835b725ae77Skettenis return new;
2836b725ae77Skettenis }
2837b725ae77Skettenis
2838b725ae77Skettenis /* Insert the expression NEW into the current expression (expout) at POS. */
2839b725ae77Skettenis static void
insert_exp(pos,new)2840b725ae77Skettenis insert_exp (pos, new)
2841b725ae77Skettenis int pos;
2842b725ae77Skettenis struct expression *new;
2843b725ae77Skettenis {
2844b725ae77Skettenis int newlen = new->nelts;
2845b725ae77Skettenis
2846b725ae77Skettenis /* Grow expout if necessary. In this function's only use at present,
2847b725ae77Skettenis this should never be necessary. */
2848b725ae77Skettenis if (expout_ptr + newlen > expout_size)
2849b725ae77Skettenis {
2850b725ae77Skettenis expout_size = max (expout_size * 2, expout_ptr + newlen + 10);
2851b725ae77Skettenis expout = (struct expression *)
2852b725ae77Skettenis xrealloc ((char *) expout, (sizeof (struct expression)
2853b725ae77Skettenis + EXP_ELEM_TO_BYTES (expout_size)));
2854b725ae77Skettenis }
2855b725ae77Skettenis
2856b725ae77Skettenis {
2857b725ae77Skettenis int i;
2858b725ae77Skettenis
2859b725ae77Skettenis for (i = expout_ptr - 1; i >= pos; i--)
2860b725ae77Skettenis expout->elts[i + newlen] = expout->elts[i];
2861b725ae77Skettenis }
2862b725ae77Skettenis
2863b725ae77Skettenis memcpy (expout->elts + pos, new->elts, EXP_ELEM_TO_BYTES (newlen));
2864b725ae77Skettenis expout_ptr += newlen;
2865b725ae77Skettenis }
2866*11efff7fSkettenis
2867*11efff7fSkettenis
2868