xref: /openbsd-src/gnu/usr.bin/binutils/gdb/jv-exp.c (revision 11efff7f3ac2b3cfeff0c0cddc14294d9b3aca4f)
1*11efff7fSkettenis /* A Bison parser, made by GNU Bison 1.875c.  */
2b725ae77Skettenis 
3*11efff7fSkettenis /* Skeleton parser for Yacc-like parsing with Bison,
4*11efff7fSkettenis    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
5b725ae77Skettenis 
6*11efff7fSkettenis    This program is free software; you can redistribute it and/or modify
7*11efff7fSkettenis    it under the terms of the GNU General Public License as published by
8*11efff7fSkettenis    the Free Software Foundation; either version 2, or (at your option)
9*11efff7fSkettenis    any later version.
10*11efff7fSkettenis 
11*11efff7fSkettenis    This program is distributed in the hope that it will be useful,
12*11efff7fSkettenis    but WITHOUT ANY WARRANTY; without even the implied warranty of
13*11efff7fSkettenis    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*11efff7fSkettenis    GNU General Public License for more details.
15*11efff7fSkettenis 
16*11efff7fSkettenis    You should have received a copy of the GNU General Public License
17*11efff7fSkettenis    along with this program; if not, write to the Free Software
18*11efff7fSkettenis    Foundation, Inc., 59 Temple Place - Suite 330,
19*11efff7fSkettenis    Boston, MA 02111-1307, USA.  */
20*11efff7fSkettenis 
21*11efff7fSkettenis /* As a special exception, when this file is copied by Bison into a
22*11efff7fSkettenis    Bison output file, you may use that output file without restriction.
23*11efff7fSkettenis    This special exception was added by the Free Software Foundation
24*11efff7fSkettenis    in version 1.24 of Bison.  */
25*11efff7fSkettenis 
26*11efff7fSkettenis /* Written by Richard Stallman by simplifying the original so called
27*11efff7fSkettenis    ``semantic'' parser.  */
28*11efff7fSkettenis 
29*11efff7fSkettenis /* All symbols defined below should begin with yy or YY, to avoid
30*11efff7fSkettenis    infringing on user name space.  This should be done even for local
31*11efff7fSkettenis    variables, as they might otherwise be expanded by user macros.
32*11efff7fSkettenis    There are some unavoidable exceptions within include files to
33*11efff7fSkettenis    define necessary library symbols; they are noted "INFRINGES ON
34*11efff7fSkettenis    USER NAME SPACE" below.  */
35*11efff7fSkettenis 
36*11efff7fSkettenis /* Identify Bison output.  */
37*11efff7fSkettenis #define YYBISON 1
38*11efff7fSkettenis 
39*11efff7fSkettenis /* Skeleton name.  */
40*11efff7fSkettenis #define YYSKELETON_NAME "yacc.c"
41*11efff7fSkettenis 
42*11efff7fSkettenis /* Pure parsers.  */
43*11efff7fSkettenis #define YYPURE 0
44*11efff7fSkettenis 
45*11efff7fSkettenis /* Using locations.  */
46*11efff7fSkettenis #define YYLSP_NEEDED 0
47*11efff7fSkettenis 
48*11efff7fSkettenis 
49*11efff7fSkettenis 
50*11efff7fSkettenis /* Tokens.  */
51*11efff7fSkettenis #ifndef YYTOKENTYPE
52*11efff7fSkettenis # define YYTOKENTYPE
53*11efff7fSkettenis    /* Put the tokens into the symbol table, so that GDB and other debuggers
54*11efff7fSkettenis       know about them.  */
55*11efff7fSkettenis    enum yytokentype {
56*11efff7fSkettenis      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