xref: /openbsd-src/gnu/usr.bin/binutils/gdb/m2-exp.c (revision 11efff7f3ac2b3cfeff0c0cddc14294d9b3aca4f)
1*11efff7fSkettenis /* A Bison parser, made by GNU Bison 1.875c.  */
2b725ae77Skettenis 
3*11efff7fSkettenis /* Skeleton parser for Yacc-like parsing with Bison,
4*11efff7fSkettenis    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
5b725ae77Skettenis 
6*11efff7fSkettenis    This program is free software; you can redistribute it and/or modify
7*11efff7fSkettenis    it under the terms of the GNU General Public License as published by
8*11efff7fSkettenis    the Free Software Foundation; either version 2, or (at your option)
9*11efff7fSkettenis    any later version.
10*11efff7fSkettenis 
11*11efff7fSkettenis    This program is distributed in the hope that it will be useful,
12*11efff7fSkettenis    but WITHOUT ANY WARRANTY; without even the implied warranty of
13*11efff7fSkettenis    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*11efff7fSkettenis    GNU General Public License for more details.
15*11efff7fSkettenis 
16*11efff7fSkettenis    You should have received a copy of the GNU General Public License
17*11efff7fSkettenis    along with this program; if not, write to the Free Software
18*11efff7fSkettenis    Foundation, Inc., 59 Temple Place - Suite 330,
19*11efff7fSkettenis    Boston, MA 02111-1307, USA.  */
20*11efff7fSkettenis 
21*11efff7fSkettenis /* As a special exception, when this file is copied by Bison into a
22*11efff7fSkettenis    Bison output file, you may use that output file without restriction.
23*11efff7fSkettenis    This special exception was added by the Free Software Foundation
24*11efff7fSkettenis    in version 1.24 of Bison.  */
25*11efff7fSkettenis 
26*11efff7fSkettenis /* Written by Richard Stallman by simplifying the original so called
27*11efff7fSkettenis    ``semantic'' parser.  */
28*11efff7fSkettenis 
29*11efff7fSkettenis /* All symbols defined below should begin with yy or YY, to avoid
30*11efff7fSkettenis    infringing on user name space.  This should be done even for local
31*11efff7fSkettenis    variables, as they might otherwise be expanded by user macros.
32*11efff7fSkettenis    There are some unavoidable exceptions within include files to
33*11efff7fSkettenis    define necessary library symbols; they are noted "INFRINGES ON
34*11efff7fSkettenis    USER NAME SPACE" below.  */
35*11efff7fSkettenis 
36*11efff7fSkettenis /* Identify Bison output.  */
37*11efff7fSkettenis #define YYBISON 1
38*11efff7fSkettenis 
39*11efff7fSkettenis /* Skeleton name.  */
40*11efff7fSkettenis #define YYSKELETON_NAME "yacc.c"
41*11efff7fSkettenis 
42*11efff7fSkettenis /* Pure parsers.  */
43*11efff7fSkettenis #define YYPURE 0
44*11efff7fSkettenis 
45*11efff7fSkettenis /* Using locations.  */
46*11efff7fSkettenis #define YYLSP_NEEDED 0
47*11efff7fSkettenis 
48*11efff7fSkettenis 
49*11efff7fSkettenis 
50*11efff7fSkettenis /* Tokens.  */
51*11efff7fSkettenis #ifndef YYTOKENTYPE
52*11efff7fSkettenis # define YYTOKENTYPE
53*11efff7fSkettenis    /* Put the tokens into the symbol table, so that GDB and other debuggers
54*11efff7fSkettenis       know about them.  */
55*11efff7fSkettenis    enum yytokentype {
56*11efff7fSkettenis      INT = 258,
57*11efff7fSkettenis      HEX = 259,
58*11efff7fSkettenis      ERROR = 260,
59*11efff7fSkettenis      UINT = 261,
60*11efff7fSkettenis      M2_TRUE = 262,
61*11efff7fSkettenis      M2_FALSE = 263,
62*11efff7fSkettenis      CHAR = 264,
63*11efff7fSkettenis      FLOAT = 265,
64*11efff7fSkettenis      STRING = 266,
65*11efff7fSkettenis      NAME = 267,
66*11efff7fSkettenis      BLOCKNAME = 268,
67*11efff7fSkettenis      IDENT = 269,
68*11efff7fSkettenis      VARNAME = 270,
69*11efff7fSkettenis      TYPENAME = 271,
70*11efff7fSkettenis      SIZE = 272,
71*11efff7fSkettenis      CAP = 273,
72*11efff7fSkettenis      ORD = 274,
73*11efff7fSkettenis      HIGH = 275,
74*11efff7fSkettenis      ABS = 276,
75*11efff7fSkettenis      MIN_FUNC = 277,
76*11efff7fSkettenis      MAX_FUNC = 278,
77*11efff7fSkettenis      FLOAT_FUNC = 279,
78*11efff7fSkettenis      VAL = 280,
79*11efff7fSkettenis      CHR = 281,
80*11efff7fSkettenis      ODD = 282,
81*11efff7fSkettenis      TRUNC = 283,
82*11efff7fSkettenis      INC = 284,
83*11efff7fSkettenis      DEC = 285,
84*11efff7fSkettenis      INCL = 286,
85*11efff7fSkettenis      EXCL = 287,
86*11efff7fSkettenis      COLONCOLON = 288,
87*11efff7fSkettenis      INTERNAL_VAR = 289,
88*11efff7fSkettenis      ABOVE_COMMA = 290,
89*11efff7fSkettenis      ASSIGN = 291,
90*11efff7fSkettenis      IN = 292,
91*11efff7fSkettenis      NOTEQUAL = 293,
92*11efff7fSkettenis      GEQ = 294,
93*11efff7fSkettenis      LEQ = 295,
94*11efff7fSkettenis      OROR = 296,
95*11efff7fSkettenis      LOGICAL_AND = 297,
96*11efff7fSkettenis      MOD = 298,
97*11efff7fSkettenis      DIV = 299,
98*11efff7fSkettenis      UNARY = 300,
99*11efff7fSkettenis      DOT = 301,
100*11efff7fSkettenis      NOT = 302,
101*11efff7fSkettenis      QID = 303
102*11efff7fSkettenis    };
103*11efff7fSkettenis #endif
104*11efff7fSkettenis #define INT 258
105*11efff7fSkettenis #define HEX 259
106*11efff7fSkettenis #define ERROR 260
107*11efff7fSkettenis #define UINT 261
108*11efff7fSkettenis #define M2_TRUE 262
109*11efff7fSkettenis #define M2_FALSE 263
110*11efff7fSkettenis #define CHAR 264
111*11efff7fSkettenis #define FLOAT 265
112*11efff7fSkettenis #define STRING 266
113*11efff7fSkettenis #define NAME 267
114*11efff7fSkettenis #define BLOCKNAME 268
115*11efff7fSkettenis #define IDENT 269
116*11efff7fSkettenis #define VARNAME 270
117*11efff7fSkettenis #define TYPENAME 271
118*11efff7fSkettenis #define SIZE 272
119*11efff7fSkettenis #define CAP 273
120*11efff7fSkettenis #define ORD 274
121*11efff7fSkettenis #define HIGH 275
122*11efff7fSkettenis #define ABS 276
123*11efff7fSkettenis #define MIN_FUNC 277
124*11efff7fSkettenis #define MAX_FUNC 278
125*11efff7fSkettenis #define FLOAT_FUNC 279
126*11efff7fSkettenis #define VAL 280
127*11efff7fSkettenis #define CHR 281
128*11efff7fSkettenis #define ODD 282
129*11efff7fSkettenis #define TRUNC 283
130*11efff7fSkettenis #define INC 284
131*11efff7fSkettenis #define DEC 285
132*11efff7fSkettenis #define INCL 286
133*11efff7fSkettenis #define EXCL 287
134*11efff7fSkettenis #define COLONCOLON 288
135*11efff7fSkettenis #define INTERNAL_VAR 289
136*11efff7fSkettenis #define ABOVE_COMMA 290
137*11efff7fSkettenis #define ASSIGN 291
138*11efff7fSkettenis #define IN 292
139b725ae77Skettenis #define NOTEQUAL 293
140*11efff7fSkettenis #define GEQ 294
141*11efff7fSkettenis #define LEQ 295
142*11efff7fSkettenis #define OROR 296
143*11efff7fSkettenis #define LOGICAL_AND 297
144b725ae77Skettenis #define MOD 298
145*11efff7fSkettenis #define DIV 299
146*11efff7fSkettenis #define UNARY 300
147*11efff7fSkettenis #define DOT 301
148*11efff7fSkettenis #define NOT 302
149*11efff7fSkettenis #define QID 303
150b725ae77Skettenis 
151*11efff7fSkettenis 
152*11efff7fSkettenis 
153*11efff7fSkettenis 
154*11efff7fSkettenis /* Copy the first part of user declarations.  */
155b725ae77Skettenis #line 41 "m2-exp.y"
156b725ae77Skettenis 
157b725ae77Skettenis 
158b725ae77Skettenis #include "defs.h"
159b725ae77Skettenis #include "gdb_string.h"
160b725ae77Skettenis #include "expression.h"
161b725ae77Skettenis #include "language.h"
162b725ae77Skettenis #include "value.h"
163b725ae77Skettenis #include "parser-defs.h"
164b725ae77Skettenis #include "m2-lang.h"
165b725ae77Skettenis #include "bfd.h" /* Required by objfiles.h.  */
166b725ae77Skettenis #include "symfile.h" /* Required by objfiles.h.  */
167b725ae77Skettenis #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
168b725ae77Skettenis #include "block.h"
169b725ae77Skettenis 
170b725ae77Skettenis /* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
171b725ae77Skettenis    as well as gratuitiously global symbol names, so we can have multiple
172b725ae77Skettenis    yacc generated parsers in gdb.  Note that these are only the variables
173b725ae77Skettenis    produced by yacc.  If other parser generators (bison, byacc, etc) produce
174b725ae77Skettenis    additional global names that conflict at link time, then those parser
175b725ae77Skettenis    generators need to be fixed instead of adding those names to this list. */
176b725ae77Skettenis 
177b725ae77Skettenis #define	yymaxdepth m2_maxdepth
178b725ae77Skettenis #define	yyparse	m2_parse
179b725ae77Skettenis #define	yylex	m2_lex
180b725ae77Skettenis #define	yyerror	m2_error
181b725ae77Skettenis #define	yylval	m2_lval
182b725ae77Skettenis #define	yychar	m2_char
183b725ae77Skettenis #define	yydebug	m2_debug
184b725ae77Skettenis #define	yypact	m2_pact
185b725ae77Skettenis #define	yyr1	m2_r1
186b725ae77Skettenis #define	yyr2	m2_r2
187b725ae77Skettenis #define	yydef	m2_def
188b725ae77Skettenis #define	yychk	m2_chk
189b725ae77Skettenis #define	yypgo	m2_pgo
190b725ae77Skettenis #define	yyact	m2_act
191b725ae77Skettenis #define	yyexca	m2_exca
192b725ae77Skettenis #define	yyerrflag m2_errflag
193b725ae77Skettenis #define	yynerrs	m2_nerrs
194b725ae77Skettenis #define	yyps	m2_ps
195b725ae77Skettenis #define	yypv	m2_pv
196b725ae77Skettenis #define	yys	m2_s
197b725ae77Skettenis #define	yy_yys	m2_yys
198b725ae77Skettenis #define	yystate	m2_state
199b725ae77Skettenis #define	yytmp	m2_tmp
200b725ae77Skettenis #define	yyv	m2_v
201b725ae77Skettenis #define	yy_yyv	m2_yyv
202b725ae77Skettenis #define	yyval	m2_val
203b725ae77Skettenis #define	yylloc	m2_lloc
204b725ae77Skettenis #define	yyreds	m2_reds		/* With YYDEBUG defined */
205b725ae77Skettenis #define	yytoks	m2_toks		/* With YYDEBUG defined */
206b725ae77Skettenis #define yyname	m2_name		/* With YYDEBUG defined */
207b725ae77Skettenis #define yyrule	m2_rule		/* With YYDEBUG defined */
208b725ae77Skettenis #define yylhs	m2_yylhs
209b725ae77Skettenis #define yylen	m2_yylen
210b725ae77Skettenis #define yydefred m2_yydefred
211b725ae77Skettenis #define yydgoto	m2_yydgoto
212b725ae77Skettenis #define yysindex m2_yysindex
213b725ae77Skettenis #define yyrindex m2_yyrindex
214b725ae77Skettenis #define yygindex m2_yygindex
215b725ae77Skettenis #define yytable	 m2_yytable
216b725ae77Skettenis #define yycheck	 m2_yycheck
217b725ae77Skettenis 
218b725ae77Skettenis #ifndef YYDEBUG
219b725ae77Skettenis #define	YYDEBUG 1		/* Default to yydebug support */
220b725ae77Skettenis #endif
221b725ae77Skettenis 
222b725ae77Skettenis #define YYFPRINTF parser_fprintf
223b725ae77Skettenis 
224b725ae77Skettenis int yyparse (void);
225b725ae77Skettenis 
226b725ae77Skettenis static int yylex (void);
227b725ae77Skettenis 
228b725ae77Skettenis void yyerror (char *);
229b725ae77Skettenis 
230b725ae77Skettenis #if 0
231b725ae77Skettenis static char *make_qualname (char *, char *);
232b725ae77Skettenis #endif
233b725ae77Skettenis 
234b725ae77Skettenis static int parse_number (int);
235b725ae77Skettenis 
236b725ae77Skettenis /* The sign of the number being parsed. */
237b725ae77Skettenis static int number_sign = 1;
238b725ae77Skettenis 
239b725ae77Skettenis /* The block that the module specified by the qualifer on an identifer is
240b725ae77Skettenis    contained in, */
241b725ae77Skettenis #if 0
242b725ae77Skettenis static struct block *modblock=0;
243b725ae77Skettenis #endif
244b725ae77Skettenis 
245b725ae77Skettenis 
246*11efff7fSkettenis 
247*11efff7fSkettenis /* Enabling traces.  */
248*11efff7fSkettenis #ifndef YYDEBUG
249*11efff7fSkettenis # define YYDEBUG 0
250*11efff7fSkettenis #endif
251*11efff7fSkettenis 
252*11efff7fSkettenis /* Enabling verbose error messages.  */
253*11efff7fSkettenis #ifdef YYERROR_VERBOSE
254*11efff7fSkettenis # undef YYERROR_VERBOSE
255*11efff7fSkettenis # define YYERROR_VERBOSE 1
256*11efff7fSkettenis #else
257*11efff7fSkettenis # define YYERROR_VERBOSE 0
258*11efff7fSkettenis #endif
259*11efff7fSkettenis 
260*11efff7fSkettenis #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
261*11efff7fSkettenis #line 137 "m2-exp.y"
262*11efff7fSkettenis typedef union YYSTYPE {
263b725ae77Skettenis     LONGEST lval;
264b725ae77Skettenis     ULONGEST ulval;
265b725ae77Skettenis     DOUBLEST dval;
266b725ae77Skettenis     struct symbol *sym;
267b725ae77Skettenis     struct type *tval;
268b725ae77Skettenis     struct stoken sval;
269b725ae77Skettenis     int voidval;
270b725ae77Skettenis     struct block *bval;
271b725ae77Skettenis     enum exp_opcode opcode;
272b725ae77Skettenis     struct internalvar *ivar;
273b725ae77Skettenis 
274b725ae77Skettenis     struct type **tvec;
275b725ae77Skettenis     int *ivec;
276*11efff7fSkettenis   } YYSTYPE;
277*11efff7fSkettenis /* Line 191 of yacc.c.  */
278*11efff7fSkettenis # define yystype YYSTYPE /* obsolescent; will be withdrawn */
279*11efff7fSkettenis # define YYSTYPE_IS_DECLARED 1
280b725ae77Skettenis # define YYSTYPE_IS_TRIVIAL 1
281b725ae77Skettenis #endif
282*11efff7fSkettenis 
283*11efff7fSkettenis 
284*11efff7fSkettenis 
285*11efff7fSkettenis /* Copy the second part of user declarations.  */
286*11efff7fSkettenis 
287*11efff7fSkettenis 
288*11efff7fSkettenis /* Line 214 of yacc.c.  */
289*11efff7fSkettenis 
290*11efff7fSkettenis #if ! defined (yyoverflow) || YYERROR_VERBOSE
291*11efff7fSkettenis 
292*11efff7fSkettenis # ifndef YYFREE
293*11efff7fSkettenis #  define YYFREE free
294b725ae77Skettenis # endif
295*11efff7fSkettenis # ifndef YYMALLOC
296*11efff7fSkettenis #  define YYMALLOC xmalloc
297b725ae77Skettenis # endif
298b725ae77Skettenis 
299b725ae77Skettenis /* The parser invokes alloca or xmalloc; define the necessary symbols.  */
300b725ae77Skettenis 
301*11efff7fSkettenis # ifdef YYSTACK_USE_ALLOCA
302b725ae77Skettenis #  if YYSTACK_USE_ALLOCA
303b725ae77Skettenis #   define YYSTACK_ALLOC alloca
304*11efff7fSkettenis #  endif
305b725ae77Skettenis # else
306b725ae77Skettenis #  if defined (alloca) || defined (_ALLOCA_H)
307b725ae77Skettenis #   define YYSTACK_ALLOC alloca
308b725ae77Skettenis #  else
309b725ae77Skettenis #   ifdef __GNUC__
310b725ae77Skettenis #    define YYSTACK_ALLOC __builtin_alloca
311b725ae77Skettenis #   endif
312b725ae77Skettenis #  endif
313b725ae77Skettenis # endif
314b725ae77Skettenis 
315b725ae77Skettenis # ifdef YYSTACK_ALLOC
316b725ae77Skettenis    /* Pacify GCC's `empty if-body' warning. */
317b725ae77Skettenis #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
318b725ae77Skettenis # else
319b725ae77Skettenis #  if defined (__STDC__) || defined (__cplusplus)
320b725ae77Skettenis #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
321b725ae77Skettenis #   define YYSIZE_T size_t
322b725ae77Skettenis #  endif
323*11efff7fSkettenis #  define YYSTACK_ALLOC YYMALLOC
324*11efff7fSkettenis #  define YYSTACK_FREE YYFREE
325b725ae77Skettenis # endif
326*11efff7fSkettenis #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
327b725ae77Skettenis 
328b725ae77Skettenis 
329b725ae77Skettenis #if (! defined (yyoverflow) \
330b725ae77Skettenis      && (! defined (__cplusplus) \
331*11efff7fSkettenis 	 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
332b725ae77Skettenis 
333b725ae77Skettenis /* A type that is properly aligned for any stack member.  */
334b725ae77Skettenis union yyalloc
335b725ae77Skettenis {
336b725ae77Skettenis   short yyss;
337b725ae77Skettenis   YYSTYPE yyvs;
338b725ae77Skettenis   };
339b725ae77Skettenis 
340b725ae77Skettenis /* The size of the maximum gap between one aligned stack and the next.  */
341*11efff7fSkettenis # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
342b725ae77Skettenis 
343b725ae77Skettenis /* The size of an array large to enough to hold all stacks, each with
344b725ae77Skettenis    N elements.  */
345b725ae77Skettenis # define YYSTACK_BYTES(N) \
346b725ae77Skettenis      ((N) * (sizeof (short) + sizeof (YYSTYPE))				\
347*11efff7fSkettenis       + YYSTACK_GAP_MAXIMUM)
348b725ae77Skettenis 
349b725ae77Skettenis /* Copy COUNT objects from FROM to TO.  The source and destination do
350b725ae77Skettenis    not overlap.  */
351b725ae77Skettenis # ifndef YYCOPY
352*11efff7fSkettenis #  if defined (__GNUC__) && 1 < __GNUC__
353b725ae77Skettenis #   define YYCOPY(To, From, Count) \
354b725ae77Skettenis       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
355b725ae77Skettenis #  else
356b725ae77Skettenis #   define YYCOPY(To, From, Count)		\
357b725ae77Skettenis       do					\
358b725ae77Skettenis 	{					\
359b725ae77Skettenis 	  register YYSIZE_T yyi;		\
360b725ae77Skettenis 	  for (yyi = 0; yyi < (Count); yyi++)	\
361b725ae77Skettenis 	    (To)[yyi] = (From)[yyi];		\
362b725ae77Skettenis 	}					\
363b725ae77Skettenis       while (0)
364b725ae77Skettenis #  endif
365b725ae77Skettenis # endif
366b725ae77Skettenis 
367b725ae77Skettenis /* Relocate STACK from its old location to the new one.  The
368b725ae77Skettenis    local variables YYSIZE and YYSTACKSIZE give the old and new number of
369b725ae77Skettenis    elements in the stack, and YYPTR gives the new location of the
370b725ae77Skettenis    stack.  Advance YYPTR to a properly aligned location for the next
371b725ae77Skettenis    stack.  */
372b725ae77Skettenis # define YYSTACK_RELOCATE(Stack)					\
373b725ae77Skettenis     do									\
374b725ae77Skettenis       {									\
375b725ae77Skettenis 	YYSIZE_T yynewbytes;						\
376b725ae77Skettenis 	YYCOPY (&yyptr->Stack, Stack, yysize);				\
377b725ae77Skettenis 	Stack = &yyptr->Stack;						\
378*11efff7fSkettenis 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
379b725ae77Skettenis 	yyptr += yynewbytes / sizeof (*yyptr);				\
380b725ae77Skettenis       }									\
381b725ae77Skettenis     while (0)
382b725ae77Skettenis 
383b725ae77Skettenis #endif
384b725ae77Skettenis 
385*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
386*11efff7fSkettenis    typedef signed char yysigned_char;
387*11efff7fSkettenis #else
388*11efff7fSkettenis    typedef short yysigned_char;
389*11efff7fSkettenis #endif
390*11efff7fSkettenis 
391*11efff7fSkettenis /* YYFINAL -- State number of the termination state. */
392*11efff7fSkettenis #define YYFINAL  67
393*11efff7fSkettenis /* YYLAST -- Last index in YYTABLE.  */
394*11efff7fSkettenis #define YYLAST   848
395*11efff7fSkettenis 
396*11efff7fSkettenis /* YYNTOKENS -- Number of terminals. */
397*11efff7fSkettenis #define YYNTOKENS  68
398*11efff7fSkettenis /* YYNNTS -- Number of nonterminals. */
399*11efff7fSkettenis #define YYNNTS  15
400*11efff7fSkettenis /* YYNRULES -- Number of rules. */
401*11efff7fSkettenis #define YYNRULES  80
402*11efff7fSkettenis /* YYNRULES -- Number of states. */
403*11efff7fSkettenis #define YYNSTATES  181
404*11efff7fSkettenis 
405*11efff7fSkettenis /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
406*11efff7fSkettenis #define YYUNDEFTOK  2
407*11efff7fSkettenis #define YYMAXUTOK   303
408*11efff7fSkettenis 
409*11efff7fSkettenis #define YYTRANSLATE(YYX) 						\
410*11efff7fSkettenis   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
411*11efff7fSkettenis 
412*11efff7fSkettenis /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
413*11efff7fSkettenis static const unsigned char yytranslate[] =
414*11efff7fSkettenis {
415*11efff7fSkettenis        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
416*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
417*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
418*11efff7fSkettenis        2,     2,     2,     2,     2,    41,     2,     2,    47,     2,
419*11efff7fSkettenis       59,    64,    52,    50,    35,    51,     2,    53,     2,     2,
420*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
421*11efff7fSkettenis       38,    40,    39,     2,    49,     2,     2,     2,     2,     2,
422*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
423*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
424*11efff7fSkettenis        2,    58,     2,    67,    57,     2,     2,     2,     2,     2,
425*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
426*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
427*11efff7fSkettenis        2,     2,     2,    65,     2,    66,    61,     2,     2,     2,
428*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
429*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
430*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
431*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
432*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
433*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
434*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
435*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
436*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
437*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
438*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
439*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
440*11efff7fSkettenis        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
441*11efff7fSkettenis        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
442*11efff7fSkettenis       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
443*11efff7fSkettenis       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
444*11efff7fSkettenis       36,    37,    42,    43,    44,    45,    46,    48,    54,    55,
445*11efff7fSkettenis       56,    60,    62,    63
446*11efff7fSkettenis };
447*11efff7fSkettenis 
448*11efff7fSkettenis #if YYDEBUG
449*11efff7fSkettenis /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
450*11efff7fSkettenis    YYRHS.  */
451*11efff7fSkettenis static const unsigned short yyprhs[] =
452*11efff7fSkettenis {
453*11efff7fSkettenis        0,     0,     3,     5,     7,     9,    12,    13,    17,    20,
454*11efff7fSkettenis       23,    25,    27,    32,    37,    42,    47,    52,    57,    62,
455*11efff7fSkettenis       69,    74,    79,    84,    87,    92,    99,   104,   111,   115,
456*11efff7fSkettenis      117,   121,   128,   135,   139,   144,   145,   151,   152,   158,
457*11efff7fSkettenis      159,   161,   165,   167,   171,   176,   181,   185,   189,   193,
458*11efff7fSkettenis      197,   201,   205,   209,   213,   217,   221,   225,   229,   233,
459*11efff7fSkettenis      237,   241,   245,   249,   253,   255,   257,   259,   261,   263,
460*11efff7fSkettenis      265,   267,   272,   274,   276,   278,   282,   284,   286,   290,
461*11efff7fSkettenis      292
462*11efff7fSkettenis };
463*11efff7fSkettenis 
464*11efff7fSkettenis /* YYRHS -- A `-1'-separated list of the rules' RHS. */
465*11efff7fSkettenis static const yysigned_char yyrhs[] =
466*11efff7fSkettenis {
467*11efff7fSkettenis       69,     0,    -1,    71,    -1,    70,    -1,    82,    -1,    71,
468*11efff7fSkettenis       57,    -1,    -1,    51,    72,    71,    -1,    50,    71,    -1,
469*11efff7fSkettenis       73,    71,    -1,    62,    -1,    61,    -1,    18,    59,    71,
470*11efff7fSkettenis       64,    -1,    19,    59,    71,    64,    -1,    21,    59,    71,
471*11efff7fSkettenis       64,    -1,    20,    59,    71,    64,    -1,    22,    59,    82,
472*11efff7fSkettenis       64,    -1,    23,    59,    82,    64,    -1,    24,    59,    71,
473*11efff7fSkettenis       64,    -1,    25,    59,    82,    35,    71,    64,    -1,    26,
474*11efff7fSkettenis       59,    71,    64,    -1,    27,    59,    71,    64,    -1,    28,
475*11efff7fSkettenis       59,    71,    64,    -1,    17,    71,    -1,    29,    59,    71,
476*11efff7fSkettenis       64,    -1,    29,    59,    71,    35,    71,    64,    -1,    30,
477*11efff7fSkettenis       59,    71,    64,    -1,    30,    59,    71,    35,    71,    64,
478*11efff7fSkettenis       -1,    71,    60,    12,    -1,    74,    -1,    71,    42,    74,
479*11efff7fSkettenis       -1,    31,    59,    71,    35,    71,    64,    -1,    32,    59,
480*11efff7fSkettenis       71,    35,    71,    64,    -1,    65,    77,    66,    -1,    82,
481*11efff7fSkettenis       65,    77,    66,    -1,    -1,    71,    58,    75,    78,    67,
482*11efff7fSkettenis       -1,    -1,    71,    59,    76,    77,    64,    -1,    -1,    71,
483*11efff7fSkettenis       -1,    77,    35,    71,    -1,    71,    -1,    78,    35,    71,
484*11efff7fSkettenis       -1,    65,    82,    66,    71,    -1,    82,    59,    71,    64,
485*11efff7fSkettenis       -1,    59,    71,    64,    -1,    71,    49,    71,    -1,    71,
486*11efff7fSkettenis       52,    71,    -1,    71,    53,    71,    -1,    71,    55,    71,
487*11efff7fSkettenis       -1,    71,    54,    71,    -1,    71,    50,    71,    -1,    71,
488*11efff7fSkettenis       51,    71,    -1,    71,    40,    71,    -1,    71,    43,    71,
489*11efff7fSkettenis       -1,    71,    41,    71,    -1,    71,    45,    71,    -1,    71,
490*11efff7fSkettenis       44,    71,    -1,    71,    38,    71,    -1,    71,    39,    71,
491*11efff7fSkettenis       -1,    71,    48,    71,    -1,    71,    46,    71,    -1,    71,
492*11efff7fSkettenis       37,    71,    -1,     7,    -1,     8,    -1,     3,    -1,     6,
493*11efff7fSkettenis       -1,     9,    -1,    10,    -1,    81,    -1,    17,    59,    82,
494*11efff7fSkettenis       64,    -1,    11,    -1,    80,    -1,    13,    -1,    79,    33,
495*11efff7fSkettenis       13,    -1,    80,    -1,    34,    -1,    79,    33,    12,    -1,
496*11efff7fSkettenis       12,    -1,    16,    -1
497*11efff7fSkettenis };
498*11efff7fSkettenis 
499*11efff7fSkettenis /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
500*11efff7fSkettenis static const unsigned short yyrline[] =
501*11efff7fSkettenis {
502*11efff7fSkettenis        0,   205,   205,   206,   209,   218,   223,   222,   229,   233,
503*11efff7fSkettenis      237,   238,   241,   245,   249,   253,   257,   263,   269,   273,
504*11efff7fSkettenis      279,   283,   287,   291,   296,   300,   306,   310,   316,   322,
505*11efff7fSkettenis      325,   329,   333,   337,   339,   349,   345,   359,   356,   366,
506*11efff7fSkettenis      369,   373,   378,   383,   388,   394,   400,   408,   412,   416,
507*11efff7fSkettenis      420,   424,   428,   432,   436,   440,   442,   446,   450,   454,
508*11efff7fSkettenis      458,   462,   466,   470,   477,   483,   489,   496,   505,   513,
509*11efff7fSkettenis      520,   523,   530,   537,   541,   550,   562,   570,   574,   590,
510*11efff7fSkettenis      641
511*11efff7fSkettenis };
512*11efff7fSkettenis #endif
513*11efff7fSkettenis 
514*11efff7fSkettenis #if YYDEBUG || YYERROR_VERBOSE
515*11efff7fSkettenis /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
516*11efff7fSkettenis    First, the terminals, then, starting at YYNTOKENS, nonterminals. */
517*11efff7fSkettenis static const char *const yytname[] =
518*11efff7fSkettenis {
519*11efff7fSkettenis   "$end", "error", "$undefined", "INT", "HEX", "ERROR", "UINT", "M2_TRUE",
520*11efff7fSkettenis   "M2_FALSE", "CHAR", "FLOAT", "STRING", "NAME", "BLOCKNAME", "IDENT",
521*11efff7fSkettenis   "VARNAME", "TYPENAME", "SIZE", "CAP", "ORD", "HIGH", "ABS", "MIN_FUNC",
522*11efff7fSkettenis   "MAX_FUNC", "FLOAT_FUNC", "VAL", "CHR", "ODD", "TRUNC", "INC", "DEC",
523*11efff7fSkettenis   "INCL", "EXCL", "COLONCOLON", "INTERNAL_VAR", "','", "ABOVE_COMMA",
524*11efff7fSkettenis   "ASSIGN", "'<'", "'>'", "'='", "'#'", "IN", "NOTEQUAL", "GEQ", "LEQ",
525*11efff7fSkettenis   "OROR", "'&'", "LOGICAL_AND", "'@'", "'+'", "'-'", "'*'", "'/'", "MOD",
526*11efff7fSkettenis   "DIV", "UNARY", "'^'", "'['", "'('", "DOT", "'~'", "NOT", "QID", "')'",
527*11efff7fSkettenis   "'{'", "'}'", "']'", "$accept", "start", "type_exp", "exp", "@1",
528*11efff7fSkettenis   "not_exp", "set", "@2", "@3", "arglist", "non_empty_arglist", "block",
529*11efff7fSkettenis   "fblock", "variable", "type", 0
530*11efff7fSkettenis };
531*11efff7fSkettenis #endif
532*11efff7fSkettenis 
533*11efff7fSkettenis # ifdef YYPRINT
534*11efff7fSkettenis /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
535*11efff7fSkettenis    token YYLEX-NUM.  */
536*11efff7fSkettenis static const unsigned short yytoknum[] =
537*11efff7fSkettenis {
538*11efff7fSkettenis        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
539*11efff7fSkettenis      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
540*11efff7fSkettenis      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
541*11efff7fSkettenis      285,   286,   287,   288,   289,    44,   290,   291,    60,    62,
542*11efff7fSkettenis       61,    35,   292,   293,   294,   295,   296,    38,   297,    64,
543*11efff7fSkettenis       43,    45,    42,    47,   298,   299,   300,    94,    91,    40,
544*11efff7fSkettenis      301,   126,   302,   303,    41,   123,   125,    93
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,    68,    69,    69,    70,    71,    72,    71,    71,    71,
552*11efff7fSkettenis       73,    73,    71,    71,    71,    71,    71,    71,    71,    71,
553*11efff7fSkettenis       71,    71,    71,    71,    71,    71,    71,    71,    71,    71,
554*11efff7fSkettenis       71,    71,    71,    74,    74,    75,    71,    76,    71,    77,
555*11efff7fSkettenis       77,    77,    78,    78,    71,    71,    71,    71,    71,    71,
556*11efff7fSkettenis       71,    71,    71,    71,    71,    71,    71,    71,    71,    71,
557*11efff7fSkettenis       71,    71,    71,    71,    71,    71,    71,    71,    71,    71,
558*11efff7fSkettenis       71,    71,    71,    79,    80,    80,    81,    81,    81,    81,
559*11efff7fSkettenis       82
560*11efff7fSkettenis };
561*11efff7fSkettenis 
562*11efff7fSkettenis /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
563*11efff7fSkettenis static const unsigned char yyr2[] =
564*11efff7fSkettenis {
565*11efff7fSkettenis        0,     2,     1,     1,     1,     2,     0,     3,     2,     2,
566*11efff7fSkettenis        1,     1,     4,     4,     4,     4,     4,     4,     4,     6,
567*11efff7fSkettenis        4,     4,     4,     2,     4,     6,     4,     6,     3,     1,
568*11efff7fSkettenis        3,     6,     6,     3,     4,     0,     5,     0,     5,     0,
569*11efff7fSkettenis        1,     3,     1,     3,     4,     4,     3,     3,     3,     3,
570*11efff7fSkettenis        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
571*11efff7fSkettenis        3,     3,     3,     3,     1,     1,     1,     1,     1,     1,
572*11efff7fSkettenis        1,     4,     1,     1,     1,     3,     1,     1,     3,     1,
573*11efff7fSkettenis        1
574*11efff7fSkettenis };
575*11efff7fSkettenis 
576*11efff7fSkettenis /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
577*11efff7fSkettenis    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
578*11efff7fSkettenis    means the default is an error.  */
579*11efff7fSkettenis static const unsigned char yydefact[] =
580*11efff7fSkettenis {
581*11efff7fSkettenis        0,    66,    67,    64,    65,    68,    69,    72,    79,    74,
582*11efff7fSkettenis       80,     0,     0,     0,     0,     0,     0,     0,     0,     0,
583*11efff7fSkettenis        0,     0,     0,     0,     0,     0,     0,    77,     0,     6,
584*11efff7fSkettenis        0,    11,    10,    39,     0,     3,     2,     0,    29,     0,
585*11efff7fSkettenis       76,    70,     4,     0,    23,     0,     0,     0,     0,     0,
586*11efff7fSkettenis        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
587*11efff7fSkettenis        0,     8,     0,     0,    40,     0,     0,     1,     0,     0,
588*11efff7fSkettenis        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
589*11efff7fSkettenis        0,     0,     0,     0,     0,     0,     5,    35,    37,     0,
590*11efff7fSkettenis        9,     0,     0,    39,     0,     0,     0,     0,     0,     0,
591*11efff7fSkettenis        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
592*11efff7fSkettenis        7,    46,     0,    33,     0,    63,    59,    60,    54,    56,
593*11efff7fSkettenis       39,    30,     0,    55,    58,    57,    62,    61,    47,    52,
594*11efff7fSkettenis       53,    48,    49,    51,    50,     0,    39,    28,    78,    75,
595*11efff7fSkettenis        0,     0,    71,    12,    13,    15,    14,    16,    17,    18,
596*11efff7fSkettenis        0,    20,    21,    22,     0,    24,     0,    26,     0,     0,
597*11efff7fSkettenis       41,    44,    42,     0,     0,    45,    34,     0,     0,     0,
598*11efff7fSkettenis        0,     0,     0,    36,    38,    19,    25,    27,    31,    32,
599*11efff7fSkettenis       43
600*11efff7fSkettenis };
601*11efff7fSkettenis 
602*11efff7fSkettenis /* YYDEFGOTO[NTERM-NUM]. */
603*11efff7fSkettenis static const short yydefgoto[] =
604*11efff7fSkettenis {
605*11efff7fSkettenis       -1,    34,    35,    64,    62,    37,    38,   135,   136,    65,
606*11efff7fSkettenis      163,    39,    40,    41,    45
607*11efff7fSkettenis };
608*11efff7fSkettenis 
609*11efff7fSkettenis /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
610*11efff7fSkettenis    STATE-NUM.  */
611*11efff7fSkettenis #define YYPACT_NINF -92
612*11efff7fSkettenis static const short yypact[] =
613*11efff7fSkettenis {
614*11efff7fSkettenis      157,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
615*11efff7fSkettenis      -92,   217,   -53,   -27,   -18,   -17,    -8,     2,     8,    14,
616*11efff7fSkettenis       28,    29,    30,    31,    32,    34,    35,   -92,   157,   -92,
617*11efff7fSkettenis      157,   -92,   -92,   157,    44,   -92,   744,   157,   -92,    62,
618*11efff7fSkettenis       64,   -92,   -34,   157,     6,   -34,   157,   157,   157,   157,
619*11efff7fSkettenis       13,    13,   157,    13,   157,   157,   157,   157,   157,   157,
620*11efff7fSkettenis      157,     6,   157,    79,   744,   -30,   -39,   -92,   157,   157,
621*11efff7fSkettenis      157,   157,   157,   -15,   157,   157,   157,   157,   157,   157,
622*11efff7fSkettenis      157,   157,   157,   157,   157,   157,   -92,   -92,   -92,    86,
623*11efff7fSkettenis        6,    -4,   157,   157,   -25,   302,   330,   358,   386,    36,
624*11efff7fSkettenis       37,   414,    67,   442,   470,   498,   246,   274,   694,   720,
625*11efff7fSkettenis        6,   -92,   157,   -92,   157,   768,   -36,   -36,   -36,   -36,
626*11efff7fSkettenis      157,   -92,    40,   -36,   -36,   -36,   144,   203,   779,   788,
627*11efff7fSkettenis      788,     6,     6,     6,     6,   157,   157,   -92,   -92,   -92,
628*11efff7fSkettenis      526,   -28,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
629*11efff7fSkettenis      157,   -92,   -92,   -92,   157,   -92,   157,   -92,   157,   157,
630*11efff7fSkettenis      744,     6,   744,   -32,   -31,   -92,   -92,   554,   582,   610,
631*11efff7fSkettenis      638,   666,   157,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
632*11efff7fSkettenis      744
633*11efff7fSkettenis };
634*11efff7fSkettenis 
635*11efff7fSkettenis /* YYPGOTO[NTERM-NUM].  */
636*11efff7fSkettenis static const yysigned_char yypgoto[] =
637*11efff7fSkettenis {
638*11efff7fSkettenis      -92,   -92,   -92,     0,   -92,   -92,    26,   -92,   -92,   -91,
639*11efff7fSkettenis      -92,   -92,   -92,   -92,    53
640*11efff7fSkettenis };
641*11efff7fSkettenis 
642*11efff7fSkettenis /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
643*11efff7fSkettenis    positive, shift that token.  If negative, reduce the rule which
644*11efff7fSkettenis    number is the opposite.  If zero, do what YYDEFACT says.
645*11efff7fSkettenis    If YYTABLE_NINF, syntax error.  */
646*11efff7fSkettenis #define YYTABLE_NINF -74
647*11efff7fSkettenis static const short yytable[] =
648*11efff7fSkettenis {
649*11efff7fSkettenis       36,    10,   141,   172,   112,   112,    46,   112,   138,   139,
650*11efff7fSkettenis       77,    44,    78,    79,    80,    81,    82,    83,    84,    85,
651*11efff7fSkettenis       92,    86,    87,    88,    89,    92,    93,   114,    61,    10,
652*11efff7fSkettenis       63,    93,    47,   174,    92,   173,   113,    90,   166,   142,
653*11efff7fSkettenis       93,    48,    49,    63,    67,   164,    95,    96,    97,    98,
654*11efff7fSkettenis      120,    50,   101,    42,   103,   104,   105,   106,   107,   108,
655*11efff7fSkettenis      109,    51,   110,    86,    87,    88,    89,    52,   115,   116,
656*11efff7fSkettenis      117,   118,   119,    53,   123,   124,   125,   126,   127,   128,
657*11efff7fSkettenis      129,   130,   131,   132,   133,   134,    66,    54,    55,    56,
658*11efff7fSkettenis       57,    58,   140,    59,    60,    91,    94,   -73,   137,   121,
659*11efff7fSkettenis      147,   148,   150,    99,   100,    93,   102,     0,     0,     0,
660*11efff7fSkettenis        0,     0,   160,     0,   161,     0,    68,    69,    70,    71,
661*11efff7fSkettenis       72,    73,    74,    75,    76,    77,   122,    78,    79,    80,
662*11efff7fSkettenis       81,    82,    83,    84,    85,   162,    86,    87,    88,    89,
663*11efff7fSkettenis        0,     0,     0,   111,     0,     0,     0,     0,     0,     0,
664*11efff7fSkettenis      167,     0,     0,     0,   168,     0,   169,     0,   170,   171,
665*11efff7fSkettenis        1,     0,     0,     2,     3,     4,     5,     6,     7,     8,
666*11efff7fSkettenis        9,     0,   180,    10,    11,    12,    13,    14,    15,    16,
667*11efff7fSkettenis       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
668*11efff7fSkettenis        0,    27,    78,    79,    80,    81,    82,    83,    84,    85,
669*11efff7fSkettenis        0,    86,    87,    88,    89,     0,     0,    28,    29,     0,
670*11efff7fSkettenis        0,     0,     0,     0,     0,     0,    30,     0,    31,    32,
671*11efff7fSkettenis        1,     0,    33,     2,     3,     4,     5,     6,     7,     8,
672*11efff7fSkettenis        9,     0,     0,    10,    11,    12,    13,    14,    15,    16,
673*11efff7fSkettenis       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
674*11efff7fSkettenis        0,    27,    79,    80,    81,    82,    83,    84,    85,     0,
675*11efff7fSkettenis       86,    87,    88,    89,     0,     0,     0,    28,    29,     0,
676*11efff7fSkettenis        0,     0,     0,     0,     0,     0,    43,     0,    31,    32,
677*11efff7fSkettenis        0,   154,    33,    68,    69,    70,    71,    72,    73,    74,
678*11efff7fSkettenis       75,    76,    77,     0,    78,    79,    80,    81,    82,    83,
679*11efff7fSkettenis       84,    85,     0,    86,    87,    88,    89,     0,     0,   156,
680*11efff7fSkettenis      155,    68,    69,    70,    71,    72,    73,    74,    75,    76,
681*11efff7fSkettenis       77,     0,    78,    79,    80,    81,    82,    83,    84,    85,
682*11efff7fSkettenis        0,    86,    87,    88,    89,     0,     0,     0,   157,    68,
683*11efff7fSkettenis       69,    70,    71,    72,    73,    74,    75,    76,    77,     0,
684*11efff7fSkettenis       78,    79,    80,    81,    82,    83,    84,    85,     0,    86,
685*11efff7fSkettenis       87,    88,    89,     0,     0,     0,   143,    68,    69,    70,
686*11efff7fSkettenis       71,    72,    73,    74,    75,    76,    77,     0,    78,    79,
687*11efff7fSkettenis       80,    81,    82,    83,    84,    85,     0,    86,    87,    88,
688*11efff7fSkettenis       89,     0,     0,     0,   144,    68,    69,    70,    71,    72,
689*11efff7fSkettenis       73,    74,    75,    76,    77,     0,    78,    79,    80,    81,
690*11efff7fSkettenis       82,    83,    84,    85,     0,    86,    87,    88,    89,     0,
691*11efff7fSkettenis        0,     0,   145,    68,    69,    70,    71,    72,    73,    74,
692*11efff7fSkettenis       75,    76,    77,     0,    78,    79,    80,    81,    82,    83,
693*11efff7fSkettenis       84,    85,     0,    86,    87,    88,    89,     0,     0,     0,
694*11efff7fSkettenis      146,    68,    69,    70,    71,    72,    73,    74,    75,    76,
695*11efff7fSkettenis       77,     0,    78,    79,    80,    81,    82,    83,    84,    85,
696*11efff7fSkettenis        0,    86,    87,    88,    89,     0,     0,     0,   149,    68,
697*11efff7fSkettenis       69,    70,    71,    72,    73,    74,    75,    76,    77,     0,
698*11efff7fSkettenis       78,    79,    80,    81,    82,    83,    84,    85,     0,    86,
699*11efff7fSkettenis       87,    88,    89,     0,     0,     0,   151,    68,    69,    70,
700*11efff7fSkettenis       71,    72,    73,    74,    75,    76,    77,     0,    78,    79,
701*11efff7fSkettenis       80,    81,    82,    83,    84,    85,     0,    86,    87,    88,
702*11efff7fSkettenis       89,     0,     0,     0,   152,    68,    69,    70,    71,    72,
703*11efff7fSkettenis       73,    74,    75,    76,    77,     0,    78,    79,    80,    81,
704*11efff7fSkettenis       82,    83,    84,    85,     0,    86,    87,    88,    89,     0,
705*11efff7fSkettenis        0,     0,   153,    68,    69,    70,    71,    72,    73,    74,
706*11efff7fSkettenis       75,    76,    77,     0,    78,    79,    80,    81,    82,    83,
707*11efff7fSkettenis       84,    85,     0,    86,    87,    88,    89,     0,     0,     0,
708*11efff7fSkettenis      165,    68,    69,    70,    71,    72,    73,    74,    75,    76,
709*11efff7fSkettenis       77,     0,    78,    79,    80,    81,    82,    83,    84,    85,
710*11efff7fSkettenis        0,    86,    87,    88,    89,     0,     0,     0,   175,    68,
711*11efff7fSkettenis       69,    70,    71,    72,    73,    74,    75,    76,    77,     0,
712*11efff7fSkettenis       78,    79,    80,    81,    82,    83,    84,    85,     0,    86,
713*11efff7fSkettenis       87,    88,    89,     0,     0,     0,   176,    68,    69,    70,
714*11efff7fSkettenis       71,    72,    73,    74,    75,    76,    77,     0,    78,    79,
715*11efff7fSkettenis       80,    81,    82,    83,    84,    85,     0,    86,    87,    88,
716*11efff7fSkettenis       89,     0,     0,     0,   177,    68,    69,    70,    71,    72,
717*11efff7fSkettenis       73,    74,    75,    76,    77,     0,    78,    79,    80,    81,
718*11efff7fSkettenis       82,    83,    84,    85,     0,    86,    87,    88,    89,     0,
719*11efff7fSkettenis        0,     0,   178,    68,    69,    70,    71,    72,    73,    74,
720*11efff7fSkettenis       75,    76,    77,     0,    78,    79,    80,    81,    82,    83,
721*11efff7fSkettenis       84,    85,     0,    86,    87,    88,    89,     0,     0,   158,
722*11efff7fSkettenis      179,    68,    69,    70,    71,    72,    73,    74,    75,    76,
723*11efff7fSkettenis       77,     0,    78,    79,    80,    81,    82,    83,    84,    85,
724*11efff7fSkettenis        0,    86,    87,    88,    89,   159,     0,    68,    69,    70,
725*11efff7fSkettenis       71,    72,    73,    74,    75,    76,    77,     0,    78,    79,
726*11efff7fSkettenis       80,    81,    82,    83,    84,    85,     0,    86,    87,    88,
727*11efff7fSkettenis       89,    68,    69,    70,    71,    72,    73,    74,    75,    76,
728*11efff7fSkettenis       77,     0,    78,    79,    80,    81,    82,    83,    84,    85,
729*11efff7fSkettenis        0,    86,    87,    88,    89,   -74,    69,    70,    71,    72,
730*11efff7fSkettenis       73,    74,    75,    76,    77,     0,    78,    79,    80,    81,
731*11efff7fSkettenis       82,    83,    84,    85,     0,    86,    87,    88,    89,    80,
732*11efff7fSkettenis       81,    82,    83,    84,    85,     0,    86,    87,    88,    89,
733*11efff7fSkettenis       82,    83,    84,    85,     0,    86,    87,    88,    89
734*11efff7fSkettenis };
735*11efff7fSkettenis 
736*11efff7fSkettenis static const short yycheck[] =
737*11efff7fSkettenis {
738*11efff7fSkettenis        0,    16,    93,    35,    35,    35,    59,    35,    12,    13,
739*11efff7fSkettenis       46,    11,    48,    49,    50,    51,    52,    53,    54,    55,
740*11efff7fSkettenis       59,    57,    58,    59,    60,    59,    65,    66,    28,    16,
741*11efff7fSkettenis       30,    65,    59,    64,    59,    67,    66,    37,    66,    64,
742*11efff7fSkettenis       65,    59,    59,    43,     0,   136,    46,    47,    48,    49,
743*11efff7fSkettenis       65,    59,    52,     0,    54,    55,    56,    57,    58,    59,
744*11efff7fSkettenis       60,    59,    62,    57,    58,    59,    60,    59,    68,    69,
745*11efff7fSkettenis       70,    71,    72,    59,    74,    75,    76,    77,    78,    79,
746*11efff7fSkettenis       80,    81,    82,    83,    84,    85,    33,    59,    59,    59,
747*11efff7fSkettenis       59,    59,    92,    59,    59,    33,    43,    33,    12,    73,
748*11efff7fSkettenis       64,    64,    35,    50,    51,    65,    53,    -1,    -1,    -1,
749*11efff7fSkettenis       -1,    -1,   112,    -1,   114,    -1,    37,    38,    39,    40,
750*11efff7fSkettenis       41,    42,    43,    44,    45,    46,    73,    48,    49,    50,
751*11efff7fSkettenis       51,    52,    53,    54,    55,   135,    57,    58,    59,    60,
752*11efff7fSkettenis       -1,    -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,    -1,
753*11efff7fSkettenis      150,    -1,    -1,    -1,   154,    -1,   156,    -1,   158,   159,
754*11efff7fSkettenis        3,    -1,    -1,     6,     7,     8,     9,    10,    11,    12,
755*11efff7fSkettenis       13,    -1,   172,    16,    17,    18,    19,    20,    21,    22,
756*11efff7fSkettenis       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
757*11efff7fSkettenis       -1,    34,    48,    49,    50,    51,    52,    53,    54,    55,
758*11efff7fSkettenis       -1,    57,    58,    59,    60,    -1,    -1,    50,    51,    -1,
759*11efff7fSkettenis       -1,    -1,    -1,    -1,    -1,    -1,    59,    -1,    61,    62,
760*11efff7fSkettenis        3,    -1,    65,     6,     7,     8,     9,    10,    11,    12,
761*11efff7fSkettenis       13,    -1,    -1,    16,    17,    18,    19,    20,    21,    22,
762*11efff7fSkettenis       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
763*11efff7fSkettenis       -1,    34,    49,    50,    51,    52,    53,    54,    55,    -1,
764*11efff7fSkettenis       57,    58,    59,    60,    -1,    -1,    -1,    50,    51,    -1,
765*11efff7fSkettenis       -1,    -1,    -1,    -1,    -1,    -1,    59,    -1,    61,    62,
766*11efff7fSkettenis       -1,    35,    65,    37,    38,    39,    40,    41,    42,    43,
767*11efff7fSkettenis       44,    45,    46,    -1,    48,    49,    50,    51,    52,    53,
768*11efff7fSkettenis       54,    55,    -1,    57,    58,    59,    60,    -1,    -1,    35,
769*11efff7fSkettenis       64,    37,    38,    39,    40,    41,    42,    43,    44,    45,
770*11efff7fSkettenis       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
771*11efff7fSkettenis       -1,    57,    58,    59,    60,    -1,    -1,    -1,    64,    37,
772*11efff7fSkettenis       38,    39,    40,    41,    42,    43,    44,    45,    46,    -1,
773*11efff7fSkettenis       48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
774*11efff7fSkettenis       58,    59,    60,    -1,    -1,    -1,    64,    37,    38,    39,
775*11efff7fSkettenis       40,    41,    42,    43,    44,    45,    46,    -1,    48,    49,
776*11efff7fSkettenis       50,    51,    52,    53,    54,    55,    -1,    57,    58,    59,
777*11efff7fSkettenis       60,    -1,    -1,    -1,    64,    37,    38,    39,    40,    41,
778*11efff7fSkettenis       42,    43,    44,    45,    46,    -1,    48,    49,    50,    51,
779*11efff7fSkettenis       52,    53,    54,    55,    -1,    57,    58,    59,    60,    -1,
780*11efff7fSkettenis       -1,    -1,    64,    37,    38,    39,    40,    41,    42,    43,
781*11efff7fSkettenis       44,    45,    46,    -1,    48,    49,    50,    51,    52,    53,
782*11efff7fSkettenis       54,    55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,
783*11efff7fSkettenis       64,    37,    38,    39,    40,    41,    42,    43,    44,    45,
784*11efff7fSkettenis       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
785*11efff7fSkettenis       -1,    57,    58,    59,    60,    -1,    -1,    -1,    64,    37,
786*11efff7fSkettenis       38,    39,    40,    41,    42,    43,    44,    45,    46,    -1,
787*11efff7fSkettenis       48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
788*11efff7fSkettenis       58,    59,    60,    -1,    -1,    -1,    64,    37,    38,    39,
789*11efff7fSkettenis       40,    41,    42,    43,    44,    45,    46,    -1,    48,    49,
790*11efff7fSkettenis       50,    51,    52,    53,    54,    55,    -1,    57,    58,    59,
791*11efff7fSkettenis       60,    -1,    -1,    -1,    64,    37,    38,    39,    40,    41,
792*11efff7fSkettenis       42,    43,    44,    45,    46,    -1,    48,    49,    50,    51,
793*11efff7fSkettenis       52,    53,    54,    55,    -1,    57,    58,    59,    60,    -1,
794*11efff7fSkettenis       -1,    -1,    64,    37,    38,    39,    40,    41,    42,    43,
795*11efff7fSkettenis       44,    45,    46,    -1,    48,    49,    50,    51,    52,    53,
796*11efff7fSkettenis       54,    55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,
797*11efff7fSkettenis       64,    37,    38,    39,    40,    41,    42,    43,    44,    45,
798*11efff7fSkettenis       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
799*11efff7fSkettenis       -1,    57,    58,    59,    60,    -1,    -1,    -1,    64,    37,
800*11efff7fSkettenis       38,    39,    40,    41,    42,    43,    44,    45,    46,    -1,
801*11efff7fSkettenis       48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
802*11efff7fSkettenis       58,    59,    60,    -1,    -1,    -1,    64,    37,    38,    39,
803*11efff7fSkettenis       40,    41,    42,    43,    44,    45,    46,    -1,    48,    49,
804*11efff7fSkettenis       50,    51,    52,    53,    54,    55,    -1,    57,    58,    59,
805*11efff7fSkettenis       60,    -1,    -1,    -1,    64,    37,    38,    39,    40,    41,
806*11efff7fSkettenis       42,    43,    44,    45,    46,    -1,    48,    49,    50,    51,
807*11efff7fSkettenis       52,    53,    54,    55,    -1,    57,    58,    59,    60,    -1,
808*11efff7fSkettenis       -1,    -1,    64,    37,    38,    39,    40,    41,    42,    43,
809*11efff7fSkettenis       44,    45,    46,    -1,    48,    49,    50,    51,    52,    53,
810*11efff7fSkettenis       54,    55,    -1,    57,    58,    59,    60,    -1,    -1,    35,
811*11efff7fSkettenis       64,    37,    38,    39,    40,    41,    42,    43,    44,    45,
812*11efff7fSkettenis       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
813*11efff7fSkettenis       -1,    57,    58,    59,    60,    35,    -1,    37,    38,    39,
814*11efff7fSkettenis       40,    41,    42,    43,    44,    45,    46,    -1,    48,    49,
815*11efff7fSkettenis       50,    51,    52,    53,    54,    55,    -1,    57,    58,    59,
816*11efff7fSkettenis       60,    37,    38,    39,    40,    41,    42,    43,    44,    45,
817*11efff7fSkettenis       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
818*11efff7fSkettenis       -1,    57,    58,    59,    60,    37,    38,    39,    40,    41,
819*11efff7fSkettenis       42,    43,    44,    45,    46,    -1,    48,    49,    50,    51,
820*11efff7fSkettenis       52,    53,    54,    55,    -1,    57,    58,    59,    60,    50,
821*11efff7fSkettenis       51,    52,    53,    54,    55,    -1,    57,    58,    59,    60,
822*11efff7fSkettenis       52,    53,    54,    55,    -1,    57,    58,    59,    60
823*11efff7fSkettenis };
824*11efff7fSkettenis 
825*11efff7fSkettenis /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
826*11efff7fSkettenis    symbol of state STATE-NUM.  */
827*11efff7fSkettenis static const unsigned char yystos[] =
828*11efff7fSkettenis {
829*11efff7fSkettenis        0,     3,     6,     7,     8,     9,    10,    11,    12,    13,
830*11efff7fSkettenis       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
831*11efff7fSkettenis       26,    27,    28,    29,    30,    31,    32,    34,    50,    51,
832*11efff7fSkettenis       59,    61,    62,    65,    69,    70,    71,    73,    74,    79,
833*11efff7fSkettenis       80,    81,    82,    59,    71,    82,    59,    59,    59,    59,
834*11efff7fSkettenis       59,    59,    59,    59,    59,    59,    59,    59,    59,    59,
835*11efff7fSkettenis       59,    71,    72,    71,    71,    77,    82,     0,    37,    38,
836*11efff7fSkettenis       39,    40,    41,    42,    43,    44,    45,    46,    48,    49,
837*11efff7fSkettenis       50,    51,    52,    53,    54,    55,    57,    58,    59,    60,
838*11efff7fSkettenis       71,    33,    59,    65,    82,    71,    71,    71,    71,    82,
839*11efff7fSkettenis       82,    71,    82,    71,    71,    71,    71,    71,    71,    71,
840*11efff7fSkettenis       71,    64,    35,    66,    66,    71,    71,    71,    71,    71,
841*11efff7fSkettenis       65,    74,    82,    71,    71,    71,    71,    71,    71,    71,
842*11efff7fSkettenis       71,    71,    71,    71,    71,    75,    76,    12,    12,    13,
843*11efff7fSkettenis       71,    77,    64,    64,    64,    64,    64,    64,    64,    64,
844*11efff7fSkettenis       35,    64,    64,    64,    35,    64,    35,    64,    35,    35,
845*11efff7fSkettenis       71,    71,    71,    78,    77,    64,    66,    71,    71,    71,
846*11efff7fSkettenis       71,    71,    35,    67,    64,    64,    64,    64,    64,    64,
847*11efff7fSkettenis       71
848*11efff7fSkettenis };
849b725ae77Skettenis 
850b725ae77Skettenis #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
851b725ae77Skettenis # define YYSIZE_T __SIZE_TYPE__
852b725ae77Skettenis #endif
853b725ae77Skettenis #if ! defined (YYSIZE_T) && defined (size_t)
854b725ae77Skettenis # define YYSIZE_T size_t
855b725ae77Skettenis #endif
856b725ae77Skettenis #if ! defined (YYSIZE_T)
857b725ae77Skettenis # if defined (__STDC__) || defined (__cplusplus)
858b725ae77Skettenis #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
859b725ae77Skettenis #  define YYSIZE_T size_t
860b725ae77Skettenis # endif
861b725ae77Skettenis #endif
862b725ae77Skettenis #if ! defined (YYSIZE_T)
863b725ae77Skettenis # define YYSIZE_T unsigned int
864b725ae77Skettenis #endif
865b725ae77Skettenis 
866b725ae77Skettenis #define yyerrok		(yyerrstatus = 0)
867b725ae77Skettenis #define yyclearin	(yychar = YYEMPTY)
868*11efff7fSkettenis #define YYEMPTY		(-2)
869b725ae77Skettenis #define YYEOF		0
870*11efff7fSkettenis 
871b725ae77Skettenis #define YYACCEPT	goto yyacceptlab
872b725ae77Skettenis #define YYABORT		goto yyabortlab
873*11efff7fSkettenis #define YYERROR		goto yyerrorlab
874*11efff7fSkettenis 
875*11efff7fSkettenis 
876b725ae77Skettenis /* Like YYERROR except do call yyerror.  This remains here temporarily
877b725ae77Skettenis    to ease the transition to the new meaning of YYERROR, for GCC.
878b725ae77Skettenis    Once GCC version 2 has supplanted version 1, this can go.  */
879*11efff7fSkettenis 
880b725ae77Skettenis #define YYFAIL		goto yyerrlab
881*11efff7fSkettenis 
882b725ae77Skettenis #define YYRECOVERING()  (!!yyerrstatus)
883*11efff7fSkettenis 
884b725ae77Skettenis #define YYBACKUP(Token, Value)					\
885b725ae77Skettenis do								\
886b725ae77Skettenis   if (yychar == YYEMPTY && yylen == 1)				\
887b725ae77Skettenis     {								\
888b725ae77Skettenis       yychar = (Token);						\
889b725ae77Skettenis       yylval = (Value);						\
890*11efff7fSkettenis       yytoken = YYTRANSLATE (yychar);				\
891b725ae77Skettenis       YYPOPSTACK;						\
892b725ae77Skettenis       goto yybackup;						\
893b725ae77Skettenis     }								\
894b725ae77Skettenis   else								\
895b725ae77Skettenis     { 								\
896b725ae77Skettenis       yyerror ("syntax error: cannot back up");\
897b725ae77Skettenis       YYERROR;							\
898b725ae77Skettenis     }								\
899b725ae77Skettenis while (0)
900b725ae77Skettenis 
901b725ae77Skettenis #define YYTERROR	1
902b725ae77Skettenis #define YYERRCODE	256
903b725ae77Skettenis 
904b725ae77Skettenis /* YYLLOC_DEFAULT -- Compute the default location (before the actions
905*11efff7fSkettenis    are run).  */
906b725ae77Skettenis 
907b725ae77Skettenis #ifndef YYLLOC_DEFAULT
908b725ae77Skettenis # define YYLLOC_DEFAULT(Current, Rhs, N)		\
909*11efff7fSkettenis    ((Current).first_line   = (Rhs)[1].first_line,	\
910*11efff7fSkettenis     (Current).first_column = (Rhs)[1].first_column,	\
911*11efff7fSkettenis     (Current).last_line    = (Rhs)[N].last_line,	\
912*11efff7fSkettenis     (Current).last_column  = (Rhs)[N].last_column)
913b725ae77Skettenis #endif
914b725ae77Skettenis 
915b725ae77Skettenis /* YYLEX -- calling `yylex' with the right arguments.  */
916b725ae77Skettenis 
917b725ae77Skettenis #ifdef YYLEX_PARAM
918*11efff7fSkettenis # define YYLEX yylex (YYLEX_PARAM)
919b725ae77Skettenis #else
920b725ae77Skettenis # define YYLEX yylex ()
921*11efff7fSkettenis #endif
922b725ae77Skettenis 
923b725ae77Skettenis /* Enable debugging if requested.  */
924b725ae77Skettenis #if YYDEBUG
925b725ae77Skettenis 
926b725ae77Skettenis # ifndef YYFPRINTF
927b725ae77Skettenis #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
928b725ae77Skettenis #  define YYFPRINTF fprintf
929b725ae77Skettenis # endif
930b725ae77Skettenis 
931b725ae77Skettenis # define YYDPRINTF(Args)			\
932b725ae77Skettenis do {						\
933b725ae77Skettenis   if (yydebug)					\
934b725ae77Skettenis     YYFPRINTF Args;				\
935b725ae77Skettenis } while (0)
936*11efff7fSkettenis 
937*11efff7fSkettenis # define YYDSYMPRINT(Args)			\
938*11efff7fSkettenis do {						\
939*11efff7fSkettenis   if (yydebug)					\
940*11efff7fSkettenis     yysymprint Args;				\
941*11efff7fSkettenis } while (0)
942*11efff7fSkettenis 
943*11efff7fSkettenis # define YYDSYMPRINTF(Title, Token, Value, Location)		\
944*11efff7fSkettenis do {								\
945*11efff7fSkettenis   if (yydebug)							\
946*11efff7fSkettenis     {								\
947*11efff7fSkettenis       YYFPRINTF (stderr, "%s ", Title);				\
948*11efff7fSkettenis       yysymprint (stderr, 					\
949*11efff7fSkettenis                   Token, Value);	\
950*11efff7fSkettenis       YYFPRINTF (stderr, "\n");					\
951*11efff7fSkettenis     }								\
952*11efff7fSkettenis } while (0)
953*11efff7fSkettenis 
954*11efff7fSkettenis /*------------------------------------------------------------------.
955*11efff7fSkettenis | yy_stack_print -- Print the state stack from its BOTTOM up to its |
956*11efff7fSkettenis | TOP (included).                                                   |
957*11efff7fSkettenis `------------------------------------------------------------------*/
958*11efff7fSkettenis 
959*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
960*11efff7fSkettenis static void
yy_stack_print(short * bottom,short * top)961*11efff7fSkettenis yy_stack_print (short *bottom, short *top)
962*11efff7fSkettenis #else
963*11efff7fSkettenis static void
964*11efff7fSkettenis yy_stack_print (bottom, top)
965*11efff7fSkettenis     short *bottom;
966*11efff7fSkettenis     short *top;
967*11efff7fSkettenis #endif
968*11efff7fSkettenis {
969*11efff7fSkettenis   YYFPRINTF (stderr, "Stack now");
970*11efff7fSkettenis   for (/* Nothing. */; bottom <= top; ++bottom)
971*11efff7fSkettenis     YYFPRINTF (stderr, " %d", *bottom);
972*11efff7fSkettenis   YYFPRINTF (stderr, "\n");
973*11efff7fSkettenis }
974*11efff7fSkettenis 
975*11efff7fSkettenis # define YY_STACK_PRINT(Bottom, Top)				\
976*11efff7fSkettenis do {								\
977*11efff7fSkettenis   if (yydebug)							\
978*11efff7fSkettenis     yy_stack_print ((Bottom), (Top));				\
979*11efff7fSkettenis } while (0)
980*11efff7fSkettenis 
981*11efff7fSkettenis 
982*11efff7fSkettenis /*------------------------------------------------.
983*11efff7fSkettenis | Report that the YYRULE is going to be reduced.  |
984*11efff7fSkettenis `------------------------------------------------*/
985*11efff7fSkettenis 
986*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
987*11efff7fSkettenis static void
yy_reduce_print(int yyrule)988*11efff7fSkettenis yy_reduce_print (int yyrule)
989*11efff7fSkettenis #else
990*11efff7fSkettenis static void
991*11efff7fSkettenis yy_reduce_print (yyrule)
992*11efff7fSkettenis     int yyrule;
993*11efff7fSkettenis #endif
994*11efff7fSkettenis {
995*11efff7fSkettenis   int yyi;
996*11efff7fSkettenis   unsigned int yylno = yyrline[yyrule];
997*11efff7fSkettenis   YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
998*11efff7fSkettenis              yyrule - 1, yylno);
999*11efff7fSkettenis   /* Print the symbols being reduced, and their result.  */
1000*11efff7fSkettenis   for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
1001*11efff7fSkettenis     YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
1002*11efff7fSkettenis   YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
1003*11efff7fSkettenis }
1004*11efff7fSkettenis 
1005*11efff7fSkettenis # define YY_REDUCE_PRINT(Rule)		\
1006*11efff7fSkettenis do {					\
1007*11efff7fSkettenis   if (yydebug)				\
1008*11efff7fSkettenis     yy_reduce_print (Rule);		\
1009*11efff7fSkettenis } while (0)
1010*11efff7fSkettenis 
1011b725ae77Skettenis /* Nonzero means print parse trace.  It is left uninitialized so that
1012b725ae77Skettenis    multiple parsers can coexist.  */
1013b725ae77Skettenis int yydebug;
1014b725ae77Skettenis #else /* !YYDEBUG */
1015b725ae77Skettenis # define YYDPRINTF(Args)
1016*11efff7fSkettenis # define YYDSYMPRINT(Args)
1017*11efff7fSkettenis # define YYDSYMPRINTF(Title, Token, Value, Location)
1018*11efff7fSkettenis # define YY_STACK_PRINT(Bottom, Top)
1019*11efff7fSkettenis # define YY_REDUCE_PRINT(Rule)
1020b725ae77Skettenis #endif /* !YYDEBUG */
1021b725ae77Skettenis 
1022*11efff7fSkettenis 
1023b725ae77Skettenis /* YYINITDEPTH -- initial size of the parser's stacks.  */
1024b725ae77Skettenis #ifndef	YYINITDEPTH
1025b725ae77Skettenis # define YYINITDEPTH 200
1026b725ae77Skettenis #endif
1027b725ae77Skettenis 
1028b725ae77Skettenis /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1029b725ae77Skettenis    if the built-in stack extension method is used).
1030b725ae77Skettenis 
1031b725ae77Skettenis    Do not make this value too large; the results are undefined if
1032b725ae77Skettenis    SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
1033b725ae77Skettenis    evaluated with infinite-precision integer arithmetic.  */
1034b725ae77Skettenis 
1035*11efff7fSkettenis #if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
1036b725ae77Skettenis # undef YYMAXDEPTH
1037b725ae77Skettenis #endif
1038b725ae77Skettenis 
1039b725ae77Skettenis #ifndef YYMAXDEPTH
1040b725ae77Skettenis # define YYMAXDEPTH 10000
1041b725ae77Skettenis #endif
1042*11efff7fSkettenis 
1043b725ae77Skettenis 
1044*11efff7fSkettenis 
1045*11efff7fSkettenis #if YYERROR_VERBOSE
1046b725ae77Skettenis 
1047b725ae77Skettenis # ifndef yystrlen
1048b725ae77Skettenis #  if defined (__GLIBC__) && defined (_STRING_H)
1049b725ae77Skettenis #   define yystrlen strlen
1050b725ae77Skettenis #  else
1051b725ae77Skettenis /* Return the length of YYSTR.  */
1052b725ae77Skettenis static YYSIZE_T
1053b725ae77Skettenis #   if defined (__STDC__) || defined (__cplusplus)
yystrlen(const char * yystr)1054b725ae77Skettenis yystrlen (const char *yystr)
1055b725ae77Skettenis #   else
1056b725ae77Skettenis yystrlen (yystr)
1057b725ae77Skettenis      const char *yystr;
1058b725ae77Skettenis #   endif
1059b725ae77Skettenis {
1060b725ae77Skettenis   register const char *yys = yystr;
1061b725ae77Skettenis 
1062b725ae77Skettenis   while (*yys++ != '\0')
1063b725ae77Skettenis     continue;
1064b725ae77Skettenis 
1065b725ae77Skettenis   return yys - yystr - 1;
1066b725ae77Skettenis }
1067b725ae77Skettenis #  endif
1068b725ae77Skettenis # endif
1069b725ae77Skettenis 
1070b725ae77Skettenis # ifndef yystpcpy
1071b725ae77Skettenis #  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
1072b725ae77Skettenis #   define yystpcpy stpcpy
1073b725ae77Skettenis #  else
1074b725ae77Skettenis /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1075b725ae77Skettenis    YYDEST.  */
1076b725ae77Skettenis static char *
1077b725ae77Skettenis #   if defined (__STDC__) || defined (__cplusplus)
yystpcpy(char * yydest,const char * yysrc)1078b725ae77Skettenis yystpcpy (char *yydest, const char *yysrc)
1079b725ae77Skettenis #   else
1080b725ae77Skettenis yystpcpy (yydest, yysrc)
1081b725ae77Skettenis      char *yydest;
1082b725ae77Skettenis      const char *yysrc;
1083b725ae77Skettenis #   endif
1084b725ae77Skettenis {
1085b725ae77Skettenis   register char *yyd = yydest;
1086b725ae77Skettenis   register const char *yys = yysrc;
1087b725ae77Skettenis 
1088b725ae77Skettenis   while ((*yyd++ = *yys++) != '\0')
1089b725ae77Skettenis     continue;
1090b725ae77Skettenis 
1091b725ae77Skettenis   return yyd - 1;
1092b725ae77Skettenis }
1093b725ae77Skettenis #  endif
1094b725ae77Skettenis # endif
1095*11efff7fSkettenis 
1096*11efff7fSkettenis #endif /* !YYERROR_VERBOSE */
1097*11efff7fSkettenis 
1098b725ae77Skettenis 
1099b725ae77Skettenis 
1100*11efff7fSkettenis #if YYDEBUG
1101*11efff7fSkettenis /*--------------------------------.
1102*11efff7fSkettenis | Print this symbol on YYOUTPUT.  |
1103*11efff7fSkettenis `--------------------------------*/
1104b725ae77Skettenis 
1105*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
1106*11efff7fSkettenis static void
yysymprint(FILE * yyoutput,int yytype,YYSTYPE * yyvaluep)1107*11efff7fSkettenis yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
1108*11efff7fSkettenis #else
1109*11efff7fSkettenis static void
1110*11efff7fSkettenis yysymprint (yyoutput, yytype, yyvaluep)
1111*11efff7fSkettenis     FILE *yyoutput;
1112*11efff7fSkettenis     int yytype;
1113*11efff7fSkettenis     YYSTYPE *yyvaluep;
1114*11efff7fSkettenis #endif
1115*11efff7fSkettenis {
1116*11efff7fSkettenis   /* Pacify ``unused variable'' warnings.  */
1117*11efff7fSkettenis   (void) yyvaluep;
1118*11efff7fSkettenis 
1119*11efff7fSkettenis   if (yytype < YYNTOKENS)
1120*11efff7fSkettenis     {
1121*11efff7fSkettenis       YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
1122*11efff7fSkettenis # ifdef YYPRINT
1123*11efff7fSkettenis       YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
1124*11efff7fSkettenis # endif
1125*11efff7fSkettenis     }
1126*11efff7fSkettenis   else
1127*11efff7fSkettenis     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
1128*11efff7fSkettenis 
1129*11efff7fSkettenis   switch (yytype)
1130*11efff7fSkettenis     {
1131*11efff7fSkettenis       default:
1132*11efff7fSkettenis         break;
1133*11efff7fSkettenis     }
1134*11efff7fSkettenis   YYFPRINTF (yyoutput, ")");
1135*11efff7fSkettenis }
1136*11efff7fSkettenis 
1137*11efff7fSkettenis #endif /* ! YYDEBUG */
1138*11efff7fSkettenis /*-----------------------------------------------.
1139*11efff7fSkettenis | Release the memory associated to this symbol.  |
1140*11efff7fSkettenis `-----------------------------------------------*/
1141*11efff7fSkettenis 
1142*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
1143*11efff7fSkettenis static void
yydestruct(int yytype,YYSTYPE * yyvaluep)1144*11efff7fSkettenis yydestruct (int yytype, YYSTYPE *yyvaluep)
1145*11efff7fSkettenis #else
1146*11efff7fSkettenis static void
1147*11efff7fSkettenis yydestruct (yytype, yyvaluep)
1148*11efff7fSkettenis     int yytype;
1149*11efff7fSkettenis     YYSTYPE *yyvaluep;
1150*11efff7fSkettenis #endif
1151*11efff7fSkettenis {
1152*11efff7fSkettenis   /* Pacify ``unused variable'' warnings.  */
1153*11efff7fSkettenis   (void) yyvaluep;
1154*11efff7fSkettenis 
1155*11efff7fSkettenis   switch (yytype)
1156*11efff7fSkettenis     {
1157*11efff7fSkettenis 
1158*11efff7fSkettenis       default:
1159*11efff7fSkettenis         break;
1160*11efff7fSkettenis     }
1161*11efff7fSkettenis }
1162*11efff7fSkettenis 
1163*11efff7fSkettenis 
1164*11efff7fSkettenis /* Prevent warnings from -Wmissing-prototypes.  */
1165b725ae77Skettenis 
1166b725ae77Skettenis #ifdef YYPARSE_PARAM
1167b725ae77Skettenis # if defined (__STDC__) || defined (__cplusplus)
1168*11efff7fSkettenis int yyparse (void *YYPARSE_PARAM);
1169b725ae77Skettenis # else
1170*11efff7fSkettenis int yyparse ();
1171b725ae77Skettenis # endif
1172b725ae77Skettenis #else /* ! YYPARSE_PARAM */
1173*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
1174*11efff7fSkettenis int yyparse (void);
1175*11efff7fSkettenis #else
1176*11efff7fSkettenis int yyparse ();
1177*11efff7fSkettenis #endif
1178b725ae77Skettenis #endif /* ! YYPARSE_PARAM */
1179b725ae77Skettenis 
1180b725ae77Skettenis 
1181b725ae77Skettenis 
1182*11efff7fSkettenis /* The lookahead symbol.  */
1183*11efff7fSkettenis int yychar;
1184*11efff7fSkettenis 
1185*11efff7fSkettenis /* The semantic value of the lookahead symbol.  */
1186*11efff7fSkettenis YYSTYPE yylval;
1187*11efff7fSkettenis 
1188*11efff7fSkettenis /* Number of syntax errors so far.  */
1189b725ae77Skettenis int yynerrs;
1190b725ae77Skettenis 
1191*11efff7fSkettenis 
1192*11efff7fSkettenis 
1193*11efff7fSkettenis /*----------.
1194*11efff7fSkettenis | yyparse.  |
1195*11efff7fSkettenis `----------*/
1196*11efff7fSkettenis 
1197*11efff7fSkettenis #ifdef YYPARSE_PARAM
1198*11efff7fSkettenis # if defined (__STDC__) || defined (__cplusplus)
yyparse(void * YYPARSE_PARAM)1199*11efff7fSkettenis int yyparse (void *YYPARSE_PARAM)
1200b725ae77Skettenis # else
1201*11efff7fSkettenis int yyparse (YYPARSE_PARAM)
1202*11efff7fSkettenis   void *YYPARSE_PARAM;
1203b725ae77Skettenis # endif
1204*11efff7fSkettenis #else /* ! YYPARSE_PARAM */
1205*11efff7fSkettenis #if defined (__STDC__) || defined (__cplusplus)
1206b725ae77Skettenis int
1207*11efff7fSkettenis yyparse (void)
1208*11efff7fSkettenis #else
1209*11efff7fSkettenis int
1210*11efff7fSkettenis yyparse ()
1211*11efff7fSkettenis 
1212*11efff7fSkettenis #endif
1213*11efff7fSkettenis #endif
1214b725ae77Skettenis {
1215b725ae77Skettenis 
1216b725ae77Skettenis   register int yystate;
1217b725ae77Skettenis   register int yyn;
1218b725ae77Skettenis   int yyresult;
1219b725ae77Skettenis   /* Number of tokens to shift before error messages enabled.  */
1220b725ae77Skettenis   int yyerrstatus;
1221b725ae77Skettenis   /* Lookahead token as an internal (translated) token number.  */
1222*11efff7fSkettenis   int yytoken = 0;
1223b725ae77Skettenis 
1224b725ae77Skettenis   /* Three stacks and their tools:
1225b725ae77Skettenis      `yyss': related to states,
1226b725ae77Skettenis      `yyvs': related to semantic values,
1227b725ae77Skettenis      `yyls': related to locations.
1228b725ae77Skettenis 
1229b725ae77Skettenis      Refer to the stacks thru separate pointers, to allow yyoverflow
1230b725ae77Skettenis      to xreallocate them elsewhere.  */
1231b725ae77Skettenis 
1232b725ae77Skettenis   /* The state stack.  */
1233b725ae77Skettenis   short	yyssa[YYINITDEPTH];
1234b725ae77Skettenis   short *yyss = yyssa;
1235b725ae77Skettenis   register short *yyssp;
1236b725ae77Skettenis 
1237b725ae77Skettenis   /* The semantic value stack.  */
1238b725ae77Skettenis   YYSTYPE yyvsa[YYINITDEPTH];
1239b725ae77Skettenis   YYSTYPE *yyvs = yyvsa;
1240b725ae77Skettenis   register YYSTYPE *yyvsp;
1241b725ae77Skettenis 
1242b725ae77Skettenis 
1243*11efff7fSkettenis 
1244b725ae77Skettenis #define YYPOPSTACK   (yyvsp--, yyssp--)
1245b725ae77Skettenis 
1246b725ae77Skettenis   YYSIZE_T yystacksize = YYINITDEPTH;
1247b725ae77Skettenis 
1248b725ae77Skettenis   /* The variables used to return semantic value and location from the
1249b725ae77Skettenis      action routines.  */
1250b725ae77Skettenis   YYSTYPE yyval;
1251*11efff7fSkettenis 
1252b725ae77Skettenis 
1253b725ae77Skettenis   /* When reducing, the number of symbols on the RHS of the reduced
1254b725ae77Skettenis      rule.  */
1255b725ae77Skettenis   int yylen;
1256b725ae77Skettenis 
1257b725ae77Skettenis   YYDPRINTF ((stderr, "Starting parse\n"));
1258b725ae77Skettenis 
1259b725ae77Skettenis   yystate = 0;
1260b725ae77Skettenis   yyerrstatus = 0;
1261b725ae77Skettenis   yynerrs = 0;
1262b725ae77Skettenis   yychar = YYEMPTY;		/* Cause a token to be read.  */
1263b725ae77Skettenis 
1264b725ae77Skettenis   /* Initialize stack pointers.
1265b725ae77Skettenis      Waste one element of value and location stack
1266b725ae77Skettenis      so that they stay on the same level as the state stack.
1267b725ae77Skettenis      The wasted elements are never initialized.  */
1268b725ae77Skettenis 
1269b725ae77Skettenis   yyssp = yyss;
1270b725ae77Skettenis   yyvsp = yyvs;
1271*11efff7fSkettenis 
1272b725ae77Skettenis   goto yysetstate;
1273b725ae77Skettenis 
1274b725ae77Skettenis /*------------------------------------------------------------.
1275b725ae77Skettenis | yynewstate -- Push a new state, which is found in yystate.  |
1276b725ae77Skettenis `------------------------------------------------------------*/
1277b725ae77Skettenis  yynewstate:
1278b725ae77Skettenis   /* In all cases, when you get here, the value and location stacks
1279b725ae77Skettenis      have just been pushed. so pushing a state here evens the stacks.
1280b725ae77Skettenis      */
1281b725ae77Skettenis   yyssp++;
1282b725ae77Skettenis 
1283b725ae77Skettenis  yysetstate:
1284b725ae77Skettenis   *yyssp = yystate;
1285b725ae77Skettenis 
1286*11efff7fSkettenis   if (yyss + yystacksize - 1 <= yyssp)
1287b725ae77Skettenis     {
1288b725ae77Skettenis       /* Get the current used size of the three stacks, in elements.  */
1289b725ae77Skettenis       YYSIZE_T yysize = yyssp - yyss + 1;
1290b725ae77Skettenis 
1291b725ae77Skettenis #ifdef yyoverflow
1292b725ae77Skettenis       {
1293b725ae77Skettenis 	/* Give user a chance to xreallocate the stack. Use copies of
1294b725ae77Skettenis 	   these so that the &'s don't force the real ones into
1295b725ae77Skettenis 	   memory.  */
1296b725ae77Skettenis 	YYSTYPE *yyvs1 = yyvs;
1297b725ae77Skettenis 	short *yyss1 = yyss;
1298b725ae77Skettenis 
1299*11efff7fSkettenis 
1300b725ae77Skettenis 	/* Each stack pointer address is followed by the size of the
1301*11efff7fSkettenis 	   data in use in that stack, in bytes.  This used to be a
1302*11efff7fSkettenis 	   conditional around just the two extra args, but that might
1303*11efff7fSkettenis 	   be undefined if yyoverflow is a macro.  */
1304b725ae77Skettenis 	yyoverflow ("parser stack overflow",
1305b725ae77Skettenis 		    &yyss1, yysize * sizeof (*yyssp),
1306b725ae77Skettenis 		    &yyvs1, yysize * sizeof (*yyvsp),
1307*11efff7fSkettenis 
1308b725ae77Skettenis 		    &yystacksize);
1309*11efff7fSkettenis 
1310b725ae77Skettenis 	yyss = yyss1;
1311b725ae77Skettenis 	yyvs = yyvs1;
1312b725ae77Skettenis       }
1313b725ae77Skettenis #else /* no yyoverflow */
1314b725ae77Skettenis # ifndef YYSTACK_RELOCATE
1315b725ae77Skettenis       goto yyoverflowlab;
1316b725ae77Skettenis # else
1317b725ae77Skettenis       /* Extend the stack our own way.  */
1318*11efff7fSkettenis       if (YYMAXDEPTH <= yystacksize)
1319b725ae77Skettenis 	goto yyoverflowlab;
1320b725ae77Skettenis       yystacksize *= 2;
1321*11efff7fSkettenis       if (YYMAXDEPTH < yystacksize)
1322b725ae77Skettenis 	yystacksize = YYMAXDEPTH;
1323b725ae77Skettenis 
1324b725ae77Skettenis       {
1325b725ae77Skettenis 	short *yyss1 = yyss;
1326b725ae77Skettenis 	union yyalloc *yyptr =
1327b725ae77Skettenis 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1328b725ae77Skettenis 	if (! yyptr)
1329b725ae77Skettenis 	  goto yyoverflowlab;
1330b725ae77Skettenis 	YYSTACK_RELOCATE (yyss);
1331b725ae77Skettenis 	YYSTACK_RELOCATE (yyvs);
1332*11efff7fSkettenis 
1333b725ae77Skettenis #  undef YYSTACK_RELOCATE
1334b725ae77Skettenis 	if (yyss1 != yyssa)
1335b725ae77Skettenis 	  YYSTACK_FREE (yyss1);
1336b725ae77Skettenis       }
1337b725ae77Skettenis # endif
1338b725ae77Skettenis #endif /* no yyoverflow */
1339b725ae77Skettenis 
1340b725ae77Skettenis       yyssp = yyss + yysize - 1;
1341b725ae77Skettenis       yyvsp = yyvs + yysize - 1;
1342*11efff7fSkettenis 
1343b725ae77Skettenis 
1344b725ae77Skettenis       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1345b725ae77Skettenis 		  (unsigned long int) yystacksize));
1346b725ae77Skettenis 
1347*11efff7fSkettenis       if (yyss + yystacksize - 1 <= yyssp)
1348b725ae77Skettenis 	YYABORT;
1349b725ae77Skettenis     }
1350b725ae77Skettenis 
1351b725ae77Skettenis   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1352b725ae77Skettenis 
1353b725ae77Skettenis   goto yybackup;
1354b725ae77Skettenis 
1355b725ae77Skettenis /*-----------.
1356b725ae77Skettenis | yybackup.  |
1357b725ae77Skettenis `-----------*/
1358b725ae77Skettenis yybackup:
1359b725ae77Skettenis 
1360b725ae77Skettenis /* Do appropriate processing given the current state.  */
1361b725ae77Skettenis /* Read a lookahead token if we need one and don't already have one.  */
1362b725ae77Skettenis /* yyresume: */
1363b725ae77Skettenis 
1364b725ae77Skettenis   /* First try to decide what to do without reference to lookahead token.  */
1365b725ae77Skettenis 
1366b725ae77Skettenis   yyn = yypact[yystate];
1367*11efff7fSkettenis   if (yyn == YYPACT_NINF)
1368b725ae77Skettenis     goto yydefault;
1369b725ae77Skettenis 
1370b725ae77Skettenis   /* Not known => get a lookahead token if don't already have one.  */
1371b725ae77Skettenis 
1372*11efff7fSkettenis   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
1373b725ae77Skettenis   if (yychar == YYEMPTY)
1374b725ae77Skettenis     {
1375b725ae77Skettenis       YYDPRINTF ((stderr, "Reading a token: "));
1376b725ae77Skettenis       yychar = YYLEX;
1377b725ae77Skettenis     }
1378b725ae77Skettenis 
1379*11efff7fSkettenis   if (yychar <= YYEOF)
1380b725ae77Skettenis     {
1381*11efff7fSkettenis       yychar = yytoken = YYEOF;
1382b725ae77Skettenis       YYDPRINTF ((stderr, "Now at end of input.\n"));
1383b725ae77Skettenis     }
1384b725ae77Skettenis   else
1385b725ae77Skettenis     {
1386*11efff7fSkettenis       yytoken = YYTRANSLATE (yychar);
1387*11efff7fSkettenis       YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
1388b725ae77Skettenis     }
1389b725ae77Skettenis 
1390*11efff7fSkettenis   /* If the proper action on seeing token YYTOKEN is to reduce or to
1391*11efff7fSkettenis      detect an error, take that action.  */
1392*11efff7fSkettenis   yyn += yytoken;
1393*11efff7fSkettenis   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1394b725ae77Skettenis     goto yydefault;
1395b725ae77Skettenis   yyn = yytable[yyn];
1396*11efff7fSkettenis   if (yyn <= 0)
1397b725ae77Skettenis     {
1398*11efff7fSkettenis       if (yyn == 0 || yyn == YYTABLE_NINF)
1399b725ae77Skettenis 	goto yyerrlab;
1400b725ae77Skettenis       yyn = -yyn;
1401b725ae77Skettenis       goto yyreduce;
1402b725ae77Skettenis     }
1403b725ae77Skettenis 
1404b725ae77Skettenis   if (yyn == YYFINAL)
1405b725ae77Skettenis     YYACCEPT;
1406b725ae77Skettenis 
1407b725ae77Skettenis   /* Shift the lookahead token.  */
1408*11efff7fSkettenis   YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
1409b725ae77Skettenis 
1410b725ae77Skettenis   /* Discard the token being shifted unless it is eof.  */
1411b725ae77Skettenis   if (yychar != YYEOF)
1412b725ae77Skettenis     yychar = YYEMPTY;
1413b725ae77Skettenis 
1414b725ae77Skettenis   *++yyvsp = yylval;
1415*11efff7fSkettenis 
1416b725ae77Skettenis 
1417b725ae77Skettenis   /* Count tokens shifted since error; after three, turn off error
1418b725ae77Skettenis      status.  */
1419b725ae77Skettenis   if (yyerrstatus)
1420b725ae77Skettenis     yyerrstatus--;
1421b725ae77Skettenis 
1422b725ae77Skettenis   yystate = yyn;
1423b725ae77Skettenis   goto yynewstate;
1424b725ae77Skettenis 
1425b725ae77Skettenis 
1426b725ae77Skettenis /*-----------------------------------------------------------.
1427b725ae77Skettenis | yydefault -- do the default action for the current state.  |
1428b725ae77Skettenis `-----------------------------------------------------------*/
1429b725ae77Skettenis yydefault:
1430b725ae77Skettenis   yyn = yydefact[yystate];
1431b725ae77Skettenis   if (yyn == 0)
1432b725ae77Skettenis     goto yyerrlab;
1433b725ae77Skettenis   goto yyreduce;
1434b725ae77Skettenis 
1435b725ae77Skettenis 
1436b725ae77Skettenis /*-----------------------------.
1437b725ae77Skettenis | yyreduce -- Do a reduction.  |
1438b725ae77Skettenis `-----------------------------*/
1439b725ae77Skettenis yyreduce:
1440b725ae77Skettenis   /* yyn is the number of a rule to reduce with.  */
1441b725ae77Skettenis   yylen = yyr2[yyn];
1442b725ae77Skettenis 
1443b725ae77Skettenis   /* If YYLEN is nonzero, implement the default value of the action:
1444b725ae77Skettenis      `$$ = $1'.
1445b725ae77Skettenis 
1446*11efff7fSkettenis      Otherwise, the following line sets YYVAL to garbage.
1447*11efff7fSkettenis      This behavior is undocumented and Bison
1448b725ae77Skettenis      users should not rely upon it.  Assigning to YYVAL
1449b725ae77Skettenis      unconditionally makes the parser a bit smaller, and it avoids a
1450b725ae77Skettenis      GCC warning that YYVAL may be used uninitialized.  */
1451b725ae77Skettenis   yyval = yyvsp[1-yylen];
1452b725ae77Skettenis 
1453b725ae77Skettenis 
1454*11efff7fSkettenis   YY_REDUCE_PRINT (yyn);
1455*11efff7fSkettenis   switch (yyn)
1456b725ae77Skettenis     {
1457*11efff7fSkettenis         case 4:
1458b725ae77Skettenis #line 210 "m2-exp.y"
1459b725ae77Skettenis     { write_exp_elt_opcode(OP_TYPE);
1460b725ae77Skettenis 		  write_exp_elt_type(yyvsp[0].tval);
1461b725ae77Skettenis 		  write_exp_elt_opcode(OP_TYPE);
1462b725ae77Skettenis 		}
1463b725ae77Skettenis     break;
1464*11efff7fSkettenis 
1465*11efff7fSkettenis   case 5:
1466b725ae77Skettenis #line 219 "m2-exp.y"
1467b725ae77Skettenis     { write_exp_elt_opcode (UNOP_IND); }
1468b725ae77Skettenis     break;
1469*11efff7fSkettenis 
1470*11efff7fSkettenis   case 6:
1471b725ae77Skettenis #line 223 "m2-exp.y"
1472b725ae77Skettenis     { number_sign = -1; }
1473b725ae77Skettenis     break;
1474*11efff7fSkettenis 
1475*11efff7fSkettenis   case 7:
1476b725ae77Skettenis #line 225 "m2-exp.y"
1477b725ae77Skettenis     { number_sign = 1;
1478b725ae77Skettenis 			  write_exp_elt_opcode (UNOP_NEG); }
1479b725ae77Skettenis     break;
1480*11efff7fSkettenis 
1481*11efff7fSkettenis   case 8:
1482b725ae77Skettenis #line 230 "m2-exp.y"
1483b725ae77Skettenis     { write_exp_elt_opcode(UNOP_PLUS); }
1484b725ae77Skettenis     break;
1485*11efff7fSkettenis 
1486*11efff7fSkettenis   case 9:
1487b725ae77Skettenis #line 234 "m2-exp.y"
1488b725ae77Skettenis     { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
1489b725ae77Skettenis     break;
1490*11efff7fSkettenis 
1491*11efff7fSkettenis   case 12:
1492b725ae77Skettenis #line 242 "m2-exp.y"
1493b725ae77Skettenis     { write_exp_elt_opcode (UNOP_CAP); }
1494b725ae77Skettenis     break;
1495*11efff7fSkettenis 
1496*11efff7fSkettenis   case 13:
1497b725ae77Skettenis #line 246 "m2-exp.y"
1498b725ae77Skettenis     { write_exp_elt_opcode (UNOP_ORD); }
1499b725ae77Skettenis     break;
1500*11efff7fSkettenis 
1501*11efff7fSkettenis   case 14:
1502b725ae77Skettenis #line 250 "m2-exp.y"
1503b725ae77Skettenis     { write_exp_elt_opcode (UNOP_ABS); }
1504b725ae77Skettenis     break;
1505*11efff7fSkettenis 
1506*11efff7fSkettenis   case 15:
1507b725ae77Skettenis #line 254 "m2-exp.y"
1508b725ae77Skettenis     { write_exp_elt_opcode (UNOP_HIGH); }
1509b725ae77Skettenis     break;
1510*11efff7fSkettenis 
1511*11efff7fSkettenis   case 16:
1512b725ae77Skettenis #line 258 "m2-exp.y"
1513b725ae77Skettenis     { write_exp_elt_opcode (UNOP_MIN);
1514b725ae77Skettenis 			  write_exp_elt_type (yyvsp[-1].tval);
1515b725ae77Skettenis 			  write_exp_elt_opcode (UNOP_MIN); }
1516b725ae77Skettenis     break;
1517*11efff7fSkettenis 
1518*11efff7fSkettenis   case 17:
1519b725ae77Skettenis #line 264 "m2-exp.y"
1520b725ae77Skettenis     { write_exp_elt_opcode (UNOP_MAX);
1521b725ae77Skettenis 			  write_exp_elt_type (yyvsp[-1].tval);
1522b725ae77Skettenis 			  write_exp_elt_opcode (UNOP_MIN); }
1523b725ae77Skettenis     break;
1524*11efff7fSkettenis 
1525*11efff7fSkettenis   case 18:
1526b725ae77Skettenis #line 270 "m2-exp.y"
1527b725ae77Skettenis     { write_exp_elt_opcode (UNOP_FLOAT); }
1528b725ae77Skettenis     break;
1529*11efff7fSkettenis 
1530*11efff7fSkettenis   case 19:
1531b725ae77Skettenis #line 274 "m2-exp.y"
1532b725ae77Skettenis     { write_exp_elt_opcode (BINOP_VAL);
1533b725ae77Skettenis 			  write_exp_elt_type (yyvsp[-3].tval);
1534b725ae77Skettenis 			  write_exp_elt_opcode (BINOP_VAL); }
1535b725ae77Skettenis     break;
1536*11efff7fSkettenis 
1537*11efff7fSkettenis   case 20:
1538b725ae77Skettenis #line 280 "m2-exp.y"
1539b725ae77Skettenis     { write_exp_elt_opcode (UNOP_CHR); }
1540b725ae77Skettenis     break;
1541*11efff7fSkettenis 
1542*11efff7fSkettenis   case 21:
1543b725ae77Skettenis #line 284 "m2-exp.y"
1544b725ae77Skettenis     { write_exp_elt_opcode (UNOP_ODD); }
1545b725ae77Skettenis     break;
1546*11efff7fSkettenis 
1547*11efff7fSkettenis   case 22:
1548b725ae77Skettenis #line 288 "m2-exp.y"
1549b725ae77Skettenis     { write_exp_elt_opcode (UNOP_TRUNC); }
1550b725ae77Skettenis     break;
1551*11efff7fSkettenis 
1552*11efff7fSkettenis   case 23:
1553b725ae77Skettenis #line 292 "m2-exp.y"
1554b725ae77Skettenis     { write_exp_elt_opcode (UNOP_SIZEOF); }
1555b725ae77Skettenis     break;
1556*11efff7fSkettenis 
1557*11efff7fSkettenis   case 24:
1558b725ae77Skettenis #line 297 "m2-exp.y"
1559b725ae77Skettenis     { write_exp_elt_opcode(UNOP_PREINCREMENT); }
1560b725ae77Skettenis     break;
1561*11efff7fSkettenis 
1562*11efff7fSkettenis   case 25:
1563b725ae77Skettenis #line 301 "m2-exp.y"
1564b725ae77Skettenis     { write_exp_elt_opcode(BINOP_ASSIGN_MODIFY);
1565b725ae77Skettenis 			  write_exp_elt_opcode(BINOP_ADD);
1566b725ae77Skettenis 			  write_exp_elt_opcode(BINOP_ASSIGN_MODIFY); }
1567b725ae77Skettenis     break;
1568*11efff7fSkettenis 
1569*11efff7fSkettenis   case 26:
1570b725ae77Skettenis #line 307 "m2-exp.y"
1571b725ae77Skettenis     { write_exp_elt_opcode(UNOP_PREDECREMENT);}
1572b725ae77Skettenis     break;
1573*11efff7fSkettenis 
1574*11efff7fSkettenis   case 27:
1575b725ae77Skettenis #line 311 "m2-exp.y"
1576b725ae77Skettenis     { write_exp_elt_opcode(BINOP_ASSIGN_MODIFY);
1577b725ae77Skettenis 			  write_exp_elt_opcode(BINOP_SUB);
1578b725ae77Skettenis 			  write_exp_elt_opcode(BINOP_ASSIGN_MODIFY); }
1579b725ae77Skettenis     break;
1580*11efff7fSkettenis 
1581*11efff7fSkettenis   case 28:
1582b725ae77Skettenis #line 317 "m2-exp.y"
1583b725ae77Skettenis     { write_exp_elt_opcode (STRUCTOP_STRUCT);
1584b725ae77Skettenis 			  write_exp_string (yyvsp[0].sval);
1585b725ae77Skettenis 			  write_exp_elt_opcode (STRUCTOP_STRUCT); }
1586b725ae77Skettenis     break;
1587*11efff7fSkettenis 
1588*11efff7fSkettenis   case 30:
1589b725ae77Skettenis #line 326 "m2-exp.y"
1590b725ae77Skettenis     { error("Sets are not implemented.");}
1591b725ae77Skettenis     break;
1592*11efff7fSkettenis 
1593*11efff7fSkettenis   case 31:
1594b725ae77Skettenis #line 330 "m2-exp.y"
1595b725ae77Skettenis     { error("Sets are not implemented.");}
1596b725ae77Skettenis     break;
1597*11efff7fSkettenis 
1598*11efff7fSkettenis   case 32:
1599b725ae77Skettenis #line 334 "m2-exp.y"
1600b725ae77Skettenis     { error("Sets are not implemented.");}
1601b725ae77Skettenis     break;
1602*11efff7fSkettenis 
1603*11efff7fSkettenis   case 33:
1604b725ae77Skettenis #line 338 "m2-exp.y"
1605b725ae77Skettenis     { error("Sets are not implemented.");}
1606b725ae77Skettenis     break;
1607*11efff7fSkettenis 
1608*11efff7fSkettenis   case 34:
1609b725ae77Skettenis #line 340 "m2-exp.y"
1610b725ae77Skettenis     { error("Sets are not implemented.");}
1611b725ae77Skettenis     break;
1612*11efff7fSkettenis 
1613*11efff7fSkettenis   case 35:
1614b725ae77Skettenis #line 349 "m2-exp.y"
1615b725ae77Skettenis     { start_arglist(); }
1616b725ae77Skettenis     break;
1617*11efff7fSkettenis 
1618*11efff7fSkettenis   case 36:
1619b725ae77Skettenis #line 351 "m2-exp.y"
1620b725ae77Skettenis     { write_exp_elt_opcode (MULTI_SUBSCRIPT);
1621b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST) end_arglist());
1622b725ae77Skettenis 			  write_exp_elt_opcode (MULTI_SUBSCRIPT); }
1623b725ae77Skettenis     break;
1624*11efff7fSkettenis 
1625*11efff7fSkettenis   case 37:
1626b725ae77Skettenis #line 359 "m2-exp.y"
1627b725ae77Skettenis     { start_arglist (); }
1628b725ae77Skettenis     break;
1629*11efff7fSkettenis 
1630*11efff7fSkettenis   case 38:
1631b725ae77Skettenis #line 361 "m2-exp.y"
1632b725ae77Skettenis     { write_exp_elt_opcode (OP_FUNCALL);
1633b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST) end_arglist ());
1634b725ae77Skettenis 			  write_exp_elt_opcode (OP_FUNCALL); }
1635b725ae77Skettenis     break;
1636*11efff7fSkettenis 
1637*11efff7fSkettenis   case 40:
1638b725ae77Skettenis #line 370 "m2-exp.y"
1639b725ae77Skettenis     { arglist_len = 1; }
1640b725ae77Skettenis     break;
1641*11efff7fSkettenis 
1642*11efff7fSkettenis   case 41:
1643b725ae77Skettenis #line 374 "m2-exp.y"
1644b725ae77Skettenis     { arglist_len++; }
1645b725ae77Skettenis     break;
1646*11efff7fSkettenis 
1647*11efff7fSkettenis   case 42:
1648b725ae77Skettenis #line 379 "m2-exp.y"
1649b725ae77Skettenis     { arglist_len = 1; }
1650b725ae77Skettenis     break;
1651*11efff7fSkettenis 
1652*11efff7fSkettenis   case 43:
1653b725ae77Skettenis #line 384 "m2-exp.y"
1654b725ae77Skettenis     { arglist_len++; }
1655b725ae77Skettenis     break;
1656*11efff7fSkettenis 
1657*11efff7fSkettenis   case 44:
1658b725ae77Skettenis #line 389 "m2-exp.y"
1659b725ae77Skettenis     { write_exp_elt_opcode (UNOP_MEMVAL);
1660b725ae77Skettenis 			  write_exp_elt_type (yyvsp[-2].tval);
1661b725ae77Skettenis 			  write_exp_elt_opcode (UNOP_MEMVAL); }
1662b725ae77Skettenis     break;
1663*11efff7fSkettenis 
1664*11efff7fSkettenis   case 45:
1665b725ae77Skettenis #line 395 "m2-exp.y"
1666b725ae77Skettenis     { write_exp_elt_opcode (UNOP_CAST);
1667b725ae77Skettenis 			  write_exp_elt_type (yyvsp[-3].tval);
1668b725ae77Skettenis 			  write_exp_elt_opcode (UNOP_CAST); }
1669b725ae77Skettenis     break;
1670*11efff7fSkettenis 
1671*11efff7fSkettenis   case 46:
1672b725ae77Skettenis #line 401 "m2-exp.y"
1673b725ae77Skettenis     { }
1674b725ae77Skettenis     break;
1675*11efff7fSkettenis 
1676*11efff7fSkettenis   case 47:
1677b725ae77Skettenis #line 409 "m2-exp.y"
1678b725ae77Skettenis     { write_exp_elt_opcode (BINOP_REPEAT); }
1679b725ae77Skettenis     break;
1680*11efff7fSkettenis 
1681*11efff7fSkettenis   case 48:
1682b725ae77Skettenis #line 413 "m2-exp.y"
1683b725ae77Skettenis     { write_exp_elt_opcode (BINOP_MUL); }
1684b725ae77Skettenis     break;
1685*11efff7fSkettenis 
1686*11efff7fSkettenis   case 49:
1687b725ae77Skettenis #line 417 "m2-exp.y"
1688b725ae77Skettenis     { write_exp_elt_opcode (BINOP_DIV); }
1689b725ae77Skettenis     break;
1690*11efff7fSkettenis 
1691*11efff7fSkettenis   case 50:
1692b725ae77Skettenis #line 421 "m2-exp.y"
1693b725ae77Skettenis     { write_exp_elt_opcode (BINOP_INTDIV); }
1694b725ae77Skettenis     break;
1695*11efff7fSkettenis 
1696*11efff7fSkettenis   case 51:
1697b725ae77Skettenis #line 425 "m2-exp.y"
1698b725ae77Skettenis     { write_exp_elt_opcode (BINOP_REM); }
1699b725ae77Skettenis     break;
1700*11efff7fSkettenis 
1701*11efff7fSkettenis   case 52:
1702b725ae77Skettenis #line 429 "m2-exp.y"
1703b725ae77Skettenis     { write_exp_elt_opcode (BINOP_ADD); }
1704b725ae77Skettenis     break;
1705*11efff7fSkettenis 
1706*11efff7fSkettenis   case 53:
1707b725ae77Skettenis #line 433 "m2-exp.y"
1708b725ae77Skettenis     { write_exp_elt_opcode (BINOP_SUB); }
1709b725ae77Skettenis     break;
1710*11efff7fSkettenis 
1711*11efff7fSkettenis   case 54:
1712b725ae77Skettenis #line 437 "m2-exp.y"
1713b725ae77Skettenis     { write_exp_elt_opcode (BINOP_EQUAL); }
1714b725ae77Skettenis     break;
1715*11efff7fSkettenis 
1716*11efff7fSkettenis   case 55:
1717b725ae77Skettenis #line 441 "m2-exp.y"
1718b725ae77Skettenis     { write_exp_elt_opcode (BINOP_NOTEQUAL); }
1719b725ae77Skettenis     break;
1720*11efff7fSkettenis 
1721*11efff7fSkettenis   case 56:
1722b725ae77Skettenis #line 443 "m2-exp.y"
1723b725ae77Skettenis     { write_exp_elt_opcode (BINOP_NOTEQUAL); }
1724b725ae77Skettenis     break;
1725*11efff7fSkettenis 
1726*11efff7fSkettenis   case 57:
1727b725ae77Skettenis #line 447 "m2-exp.y"
1728b725ae77Skettenis     { write_exp_elt_opcode (BINOP_LEQ); }
1729b725ae77Skettenis     break;
1730*11efff7fSkettenis 
1731*11efff7fSkettenis   case 58:
1732b725ae77Skettenis #line 451 "m2-exp.y"
1733b725ae77Skettenis     { write_exp_elt_opcode (BINOP_GEQ); }
1734b725ae77Skettenis     break;
1735*11efff7fSkettenis 
1736*11efff7fSkettenis   case 59:
1737b725ae77Skettenis #line 455 "m2-exp.y"
1738b725ae77Skettenis     { write_exp_elt_opcode (BINOP_LESS); }
1739b725ae77Skettenis     break;
1740*11efff7fSkettenis 
1741*11efff7fSkettenis   case 60:
1742b725ae77Skettenis #line 459 "m2-exp.y"
1743b725ae77Skettenis     { write_exp_elt_opcode (BINOP_GTR); }
1744b725ae77Skettenis     break;
1745*11efff7fSkettenis 
1746*11efff7fSkettenis   case 61:
1747b725ae77Skettenis #line 463 "m2-exp.y"
1748b725ae77Skettenis     { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
1749b725ae77Skettenis     break;
1750*11efff7fSkettenis 
1751*11efff7fSkettenis   case 62:
1752b725ae77Skettenis #line 467 "m2-exp.y"
1753b725ae77Skettenis     { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
1754b725ae77Skettenis     break;
1755*11efff7fSkettenis 
1756*11efff7fSkettenis   case 63:
1757b725ae77Skettenis #line 471 "m2-exp.y"
1758b725ae77Skettenis     { write_exp_elt_opcode (BINOP_ASSIGN); }
1759b725ae77Skettenis     break;
1760*11efff7fSkettenis 
1761*11efff7fSkettenis   case 64:
1762b725ae77Skettenis #line 478 "m2-exp.y"
1763b725ae77Skettenis     { write_exp_elt_opcode (OP_BOOL);
1764b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].ulval);
1765b725ae77Skettenis 			  write_exp_elt_opcode (OP_BOOL); }
1766b725ae77Skettenis     break;
1767*11efff7fSkettenis 
1768*11efff7fSkettenis   case 65:
1769b725ae77Skettenis #line 484 "m2-exp.y"
1770b725ae77Skettenis     { write_exp_elt_opcode (OP_BOOL);
1771b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].ulval);
1772b725ae77Skettenis 			  write_exp_elt_opcode (OP_BOOL); }
1773b725ae77Skettenis     break;
1774*11efff7fSkettenis 
1775*11efff7fSkettenis   case 66:
1776b725ae77Skettenis #line 490 "m2-exp.y"
1777b725ae77Skettenis     { write_exp_elt_opcode (OP_LONG);
1778b725ae77Skettenis 			  write_exp_elt_type (builtin_type_m2_int);
1779b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
1780b725ae77Skettenis 			  write_exp_elt_opcode (OP_LONG); }
1781b725ae77Skettenis     break;
1782*11efff7fSkettenis 
1783*11efff7fSkettenis   case 67:
1784b725ae77Skettenis #line 497 "m2-exp.y"
1785b725ae77Skettenis     {
1786b725ae77Skettenis 			  write_exp_elt_opcode (OP_LONG);
1787b725ae77Skettenis 			  write_exp_elt_type (builtin_type_m2_card);
1788b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].ulval);
1789b725ae77Skettenis 			  write_exp_elt_opcode (OP_LONG);
1790b725ae77Skettenis 			}
1791b725ae77Skettenis     break;
1792*11efff7fSkettenis 
1793*11efff7fSkettenis   case 68:
1794b725ae77Skettenis #line 506 "m2-exp.y"
1795b725ae77Skettenis     { write_exp_elt_opcode (OP_LONG);
1796b725ae77Skettenis 			  write_exp_elt_type (builtin_type_m2_char);
1797b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].ulval);
1798b725ae77Skettenis 			  write_exp_elt_opcode (OP_LONG); }
1799b725ae77Skettenis     break;
1800*11efff7fSkettenis 
1801*11efff7fSkettenis   case 69:
1802b725ae77Skettenis #line 514 "m2-exp.y"
1803b725ae77Skettenis     { write_exp_elt_opcode (OP_DOUBLE);
1804b725ae77Skettenis 			  write_exp_elt_type (builtin_type_m2_real);
1805b725ae77Skettenis 			  write_exp_elt_dblcst (yyvsp[0].dval);
1806b725ae77Skettenis 			  write_exp_elt_opcode (OP_DOUBLE); }
1807b725ae77Skettenis     break;
1808*11efff7fSkettenis 
1809*11efff7fSkettenis   case 71:
1810b725ae77Skettenis #line 524 "m2-exp.y"
1811b725ae77Skettenis     { write_exp_elt_opcode (OP_LONG);
1812b725ae77Skettenis 			  write_exp_elt_type (builtin_type_int);
1813b725ae77Skettenis 			  write_exp_elt_longcst ((LONGEST) TYPE_LENGTH (yyvsp[-1].tval));
1814b725ae77Skettenis 			  write_exp_elt_opcode (OP_LONG); }
1815b725ae77Skettenis     break;
1816*11efff7fSkettenis 
1817*11efff7fSkettenis   case 72:
1818b725ae77Skettenis #line 531 "m2-exp.y"
1819b725ae77Skettenis     { write_exp_elt_opcode (OP_M2_STRING);
1820b725ae77Skettenis 			  write_exp_string (yyvsp[0].sval);
1821b725ae77Skettenis 			  write_exp_elt_opcode (OP_M2_STRING); }
1822b725ae77Skettenis     break;
1823*11efff7fSkettenis 
1824*11efff7fSkettenis   case 73:
1825b725ae77Skettenis #line 538 "m2-exp.y"
1826b725ae77Skettenis     { yyval.bval = SYMBOL_BLOCK_VALUE(yyvsp[0].sym); }
1827b725ae77Skettenis     break;
1828*11efff7fSkettenis 
1829*11efff7fSkettenis   case 74:
1830b725ae77Skettenis #line 542 "m2-exp.y"
1831b725ae77Skettenis     { struct symbol *sym
1832b725ae77Skettenis 			    = lookup_symbol (copy_name (yyvsp[0].sval), expression_context_block,
1833b725ae77Skettenis 					     VAR_DOMAIN, 0, NULL);
1834b725ae77Skettenis 			  yyval.sym = sym;}
1835b725ae77Skettenis     break;
1836*11efff7fSkettenis 
1837*11efff7fSkettenis   case 75:
1838b725ae77Skettenis #line 551 "m2-exp.y"
1839b725ae77Skettenis     { struct symbol *tem
1840b725ae77Skettenis 			    = lookup_symbol (copy_name (yyvsp[0].sval), yyvsp[-2].bval,
1841b725ae77Skettenis 					     VAR_DOMAIN, 0, NULL);
1842b725ae77Skettenis 			  if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
1843b725ae77Skettenis 			    error ("No function \"%s\" in specified context.",
1844b725ae77Skettenis 				   copy_name (yyvsp[0].sval));
1845b725ae77Skettenis 			  yyval.sym = tem;
1846b725ae77Skettenis 			}
1847b725ae77Skettenis     break;
1848*11efff7fSkettenis 
1849*11efff7fSkettenis   case 76:
1850b725ae77Skettenis #line 563 "m2-exp.y"
1851b725ae77Skettenis     { write_exp_elt_opcode(OP_VAR_VALUE);
1852b725ae77Skettenis 			  write_exp_elt_block (NULL);
1853b725ae77Skettenis 			  write_exp_elt_sym (yyvsp[0].sym);
1854b725ae77Skettenis 			  write_exp_elt_opcode (OP_VAR_VALUE); }
1855b725ae77Skettenis     break;
1856*11efff7fSkettenis 
1857*11efff7fSkettenis   case 78:
1858b725ae77Skettenis #line 575 "m2-exp.y"
1859b725ae77Skettenis     { struct symbol *sym;
1860b725ae77Skettenis 			  sym = lookup_symbol (copy_name (yyvsp[0].sval), yyvsp[-2].bval,
1861b725ae77Skettenis 					       VAR_DOMAIN, 0, NULL);
1862b725ae77Skettenis 			  if (sym == 0)
1863b725ae77Skettenis 			    error ("No symbol \"%s\" in specified context.",
1864b725ae77Skettenis 				   copy_name (yyvsp[0].sval));
1865b725ae77Skettenis 
1866b725ae77Skettenis 			  write_exp_elt_opcode (OP_VAR_VALUE);
1867b725ae77Skettenis 			  /* block_found is set by lookup_symbol.  */
1868b725ae77Skettenis 			  write_exp_elt_block (block_found);
1869b725ae77Skettenis 			  write_exp_elt_sym (sym);
1870b725ae77Skettenis 			  write_exp_elt_opcode (OP_VAR_VALUE); }
1871b725ae77Skettenis     break;
1872*11efff7fSkettenis 
1873*11efff7fSkettenis   case 79:
1874b725ae77Skettenis #line 591 "m2-exp.y"
1875b725ae77Skettenis     { struct symbol *sym;
1876b725ae77Skettenis 			  int is_a_field_of_this;
1877b725ae77Skettenis 
1878b725ae77Skettenis  			  sym = lookup_symbol (copy_name (yyvsp[0].sval),
1879b725ae77Skettenis 					       expression_context_block,
1880b725ae77Skettenis 					       VAR_DOMAIN,
1881b725ae77Skettenis 					       &is_a_field_of_this,
1882b725ae77Skettenis 					       NULL);
1883b725ae77Skettenis 			  if (sym)
1884b725ae77Skettenis 			    {
1885b725ae77Skettenis 			      if (symbol_read_needs_frame (sym))
1886b725ae77Skettenis 				{
1887b725ae77Skettenis 				  if (innermost_block == 0 ||
1888b725ae77Skettenis 				      contained_in (block_found,
1889b725ae77Skettenis 						    innermost_block))
1890b725ae77Skettenis 				    innermost_block = block_found;
1891b725ae77Skettenis 				}
1892b725ae77Skettenis 
1893b725ae77Skettenis 			      write_exp_elt_opcode (OP_VAR_VALUE);
1894b725ae77Skettenis 			      /* We want to use the selected frame, not
1895b725ae77Skettenis 				 another more inner frame which happens to
1896b725ae77Skettenis 				 be in the same block.  */
1897b725ae77Skettenis 			      write_exp_elt_block (NULL);
1898b725ae77Skettenis 			      write_exp_elt_sym (sym);
1899b725ae77Skettenis 			      write_exp_elt_opcode (OP_VAR_VALUE);
1900b725ae77Skettenis 			    }
1901b725ae77Skettenis 			  else
1902b725ae77Skettenis 			    {
1903b725ae77Skettenis 			      struct minimal_symbol *msymbol;
1904b725ae77Skettenis 			      char *arg = copy_name (yyvsp[0].sval);
1905b725ae77Skettenis 
1906b725ae77Skettenis 			      msymbol =
1907b725ae77Skettenis 				lookup_minimal_symbol (arg, NULL, NULL);
1908b725ae77Skettenis 			      if (msymbol != NULL)
1909b725ae77Skettenis 				{
1910b725ae77Skettenis 				  write_exp_msymbol
1911b725ae77Skettenis 				    (msymbol,
1912b725ae77Skettenis 				     lookup_function_type (builtin_type_int),
1913b725ae77Skettenis 				     builtin_type_int);
1914b725ae77Skettenis 				}
1915b725ae77Skettenis 			      else if (!have_full_symbols () && !have_partial_symbols ())
1916b725ae77Skettenis 				error ("No symbol table is loaded.  Use the \"symbol-file\" command.");
1917b725ae77Skettenis 			      else
1918b725ae77Skettenis 				error ("No symbol \"%s\" in current context.",
1919b725ae77Skettenis 				       copy_name (yyvsp[0].sval));
1920b725ae77Skettenis 			    }
1921b725ae77Skettenis 			}
1922b725ae77Skettenis     break;
1923*11efff7fSkettenis 
1924*11efff7fSkettenis   case 80:
1925b725ae77Skettenis #line 642 "m2-exp.y"
1926b725ae77Skettenis     { yyval.tval = lookup_typename (copy_name (yyvsp[0].sval),
1927b725ae77Skettenis 						expression_context_block, 0); }
1928b725ae77Skettenis     break;
1929*11efff7fSkettenis 
1930*11efff7fSkettenis 
1931b725ae77Skettenis     }
1932b725ae77Skettenis 
1933*11efff7fSkettenis /* Line 1000 of yacc.c.  */
1934b725ae77Skettenis 
1935b725ae77Skettenis   yyvsp -= yylen;
1936b725ae77Skettenis   yyssp -= yylen;
1937b725ae77Skettenis 
1938*11efff7fSkettenis 
1939*11efff7fSkettenis   YY_STACK_PRINT (yyss, yyssp);
1940b725ae77Skettenis 
1941b725ae77Skettenis   *++yyvsp = yyval;
1942*11efff7fSkettenis 
1943b725ae77Skettenis 
1944b725ae77Skettenis   /* Now `shift' the result of the reduction.  Determine what state
1945b725ae77Skettenis      that goes to, based on the state we popped back to and the rule
1946b725ae77Skettenis      number reduced by.  */
1947b725ae77Skettenis 
1948b725ae77Skettenis   yyn = yyr1[yyn];
1949b725ae77Skettenis 
1950*11efff7fSkettenis   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
1951*11efff7fSkettenis   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
1952b725ae77Skettenis     yystate = yytable[yystate];
1953b725ae77Skettenis   else
1954*11efff7fSkettenis     yystate = yydefgoto[yyn - YYNTOKENS];
1955b725ae77Skettenis 
1956b725ae77Skettenis   goto yynewstate;
1957b725ae77Skettenis 
1958b725ae77Skettenis 
1959b725ae77Skettenis /*------------------------------------.
1960b725ae77Skettenis | yyerrlab -- here on detecting error |
1961b725ae77Skettenis `------------------------------------*/
1962b725ae77Skettenis yyerrlab:
1963b725ae77Skettenis   /* If not already recovering from an error, report this error.  */
1964b725ae77Skettenis   if (!yyerrstatus)
1965b725ae77Skettenis     {
1966b725ae77Skettenis       ++yynerrs;
1967*11efff7fSkettenis #if YYERROR_VERBOSE
1968b725ae77Skettenis       yyn = yypact[yystate];
1969b725ae77Skettenis 
1970*11efff7fSkettenis       if (YYPACT_NINF < yyn && yyn < YYLAST)
1971b725ae77Skettenis 	{
1972b725ae77Skettenis 	  YYSIZE_T yysize = 0;
1973*11efff7fSkettenis 	  int yytype = YYTRANSLATE (yychar);
1974*11efff7fSkettenis 	  const char* yyprefix;
1975b725ae77Skettenis 	  char *yymsg;
1976*11efff7fSkettenis 	  int yyx;
1977b725ae77Skettenis 
1978b725ae77Skettenis 	  /* Start YYX at -YYN if negative to avoid negative indexes in
1979b725ae77Skettenis 	     YYCHECK.  */
1980*11efff7fSkettenis 	  int yyxbegin = yyn < 0 ? -yyn : 0;
1981*11efff7fSkettenis 
1982*11efff7fSkettenis 	  /* Stay within bounds of both yycheck and yytname.  */
1983*11efff7fSkettenis 	  int yychecklim = YYLAST - yyn;
1984*11efff7fSkettenis 	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1985*11efff7fSkettenis 	  int yycount = 0;
1986*11efff7fSkettenis 
1987*11efff7fSkettenis 	  yyprefix = ", expecting ";
1988*11efff7fSkettenis 	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1989*11efff7fSkettenis 	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1990*11efff7fSkettenis 	      {
1991*11efff7fSkettenis 		yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
1992*11efff7fSkettenis 		yycount += 1;
1993*11efff7fSkettenis 		if (yycount == 5)
1994*11efff7fSkettenis 		  {
1995*11efff7fSkettenis 		    yysize = 0;
1996*11efff7fSkettenis 		    break;
1997*11efff7fSkettenis 		  }
1998*11efff7fSkettenis 	      }
1999*11efff7fSkettenis 	  yysize += (sizeof ("syntax error, unexpected ")
2000*11efff7fSkettenis 		     + yystrlen (yytname[yytype]));
2001b725ae77Skettenis 	  yymsg = (char *) YYSTACK_ALLOC (yysize);
2002b725ae77Skettenis 	  if (yymsg != 0)
2003b725ae77Skettenis 	    {
2004*11efff7fSkettenis 	      char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
2005*11efff7fSkettenis 	      yyp = yystpcpy (yyp, yytname[yytype]);
2006b725ae77Skettenis 
2007b725ae77Skettenis 	      if (yycount < 5)
2008b725ae77Skettenis 		{
2009*11efff7fSkettenis 		  yyprefix = ", expecting ";
2010*11efff7fSkettenis 		  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
2011*11efff7fSkettenis 		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
2012b725ae77Skettenis 		      {
2013*11efff7fSkettenis 			yyp = yystpcpy (yyp, yyprefix);
2014b725ae77Skettenis 			yyp = yystpcpy (yyp, yytname[yyx]);
2015*11efff7fSkettenis 			yyprefix = " or ";
2016b725ae77Skettenis 		      }
2017b725ae77Skettenis 		}
2018b725ae77Skettenis 	      yyerror (yymsg);
2019b725ae77Skettenis 	      YYSTACK_FREE (yymsg);
2020b725ae77Skettenis 	    }
2021b725ae77Skettenis 	  else
2022*11efff7fSkettenis 	    yyerror ("syntax error; also virtual memory exhausted");
2023b725ae77Skettenis 	}
2024b725ae77Skettenis       else
2025*11efff7fSkettenis #endif /* YYERROR_VERBOSE */
2026*11efff7fSkettenis 	yyerror ("syntax error");
2027b725ae77Skettenis     }
2028b725ae77Skettenis 
2029b725ae77Skettenis 
2030*11efff7fSkettenis 
2031b725ae77Skettenis   if (yyerrstatus == 3)
2032b725ae77Skettenis     {
2033b725ae77Skettenis       /* If just tried and failed to reuse lookahead token after an
2034b725ae77Skettenis 	 error, discard it.  */
2035b725ae77Skettenis 
2036*11efff7fSkettenis       if (yychar <= YYEOF)
2037*11efff7fSkettenis         {
2038*11efff7fSkettenis           /* If at end of input, pop the error token,
2039*11efff7fSkettenis 	     then the rest of the stack, then return failure.  */
2040b725ae77Skettenis 	  if (yychar == YYEOF)
2041*11efff7fSkettenis 	     for (;;)
2042*11efff7fSkettenis 	       {
2043*11efff7fSkettenis 		 YYPOPSTACK;
2044*11efff7fSkettenis 		 if (yyssp == yyss)
2045b725ae77Skettenis 		   YYABORT;
2046*11efff7fSkettenis 		 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
2047*11efff7fSkettenis 		 yydestruct (yystos[*yyssp], yyvsp);
2048*11efff7fSkettenis 	       }
2049*11efff7fSkettenis         }
2050*11efff7fSkettenis       else
2051*11efff7fSkettenis 	{
2052*11efff7fSkettenis 	  YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
2053*11efff7fSkettenis 	  yydestruct (yytoken, &yylval);
2054b725ae77Skettenis 	  yychar = YYEMPTY;
2055*11efff7fSkettenis 
2056*11efff7fSkettenis 	}
2057b725ae77Skettenis     }
2058b725ae77Skettenis 
2059b725ae77Skettenis   /* Else will try to reuse lookahead token after shifting the error
2060b725ae77Skettenis      token.  */
2061*11efff7fSkettenis   goto yyerrlab1;
2062b725ae77Skettenis 
2063b725ae77Skettenis 
2064*11efff7fSkettenis /*---------------------------------------------------.
2065*11efff7fSkettenis | yyerrorlab -- error raised explicitly by YYERROR.  |
2066*11efff7fSkettenis `---------------------------------------------------*/
2067*11efff7fSkettenis yyerrorlab:
2068b725ae77Skettenis 
2069*11efff7fSkettenis #ifdef __GNUC__
2070*11efff7fSkettenis   /* Pacify GCC when the user code never invokes YYERROR and the label
2071*11efff7fSkettenis      yyerrorlab therefore never appears in user code.  */
2072*11efff7fSkettenis   if (0)
2073*11efff7fSkettenis      goto yyerrorlab;
2074b725ae77Skettenis #endif
2075b725ae77Skettenis 
2076*11efff7fSkettenis   yyvsp -= yylen;
2077*11efff7fSkettenis   yyssp -= yylen;
2078*11efff7fSkettenis   yystate = *yyssp;
2079*11efff7fSkettenis   goto yyerrlab1;
2080b725ae77Skettenis 
2081*11efff7fSkettenis 
2082*11efff7fSkettenis /*-------------------------------------------------------------.
2083*11efff7fSkettenis | yyerrlab1 -- common code for both syntax error and YYERROR.  |
2084*11efff7fSkettenis `-------------------------------------------------------------*/
2085*11efff7fSkettenis yyerrlab1:
2086*11efff7fSkettenis   yyerrstatus = 3;	/* Each real token shifted decrements this.  */
2087*11efff7fSkettenis 
2088*11efff7fSkettenis   for (;;)
2089*11efff7fSkettenis     {
2090*11efff7fSkettenis       yyn = yypact[yystate];
2091*11efff7fSkettenis       if (yyn != YYPACT_NINF)
2092*11efff7fSkettenis 	{
2093*11efff7fSkettenis 	  yyn += YYTERROR;
2094*11efff7fSkettenis 	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
2095*11efff7fSkettenis 	    {
2096*11efff7fSkettenis 	      yyn = yytable[yyn];
2097*11efff7fSkettenis 	      if (0 < yyn)
2098*11efff7fSkettenis 		break;
2099*11efff7fSkettenis 	    }
2100*11efff7fSkettenis 	}
2101*11efff7fSkettenis 
2102*11efff7fSkettenis       /* Pop the current state because it cannot handle the error token.  */
2103b725ae77Skettenis       if (yyssp == yyss)
2104b725ae77Skettenis 	YYABORT;
2105b725ae77Skettenis 
2106*11efff7fSkettenis       YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
2107*11efff7fSkettenis       yydestruct (yystos[yystate], yyvsp);
2108*11efff7fSkettenis       YYPOPSTACK;
2109*11efff7fSkettenis       yystate = *yyssp;
2110*11efff7fSkettenis       YY_STACK_PRINT (yyss, yyssp);
2111b725ae77Skettenis     }
2112b725ae77Skettenis 
2113b725ae77Skettenis   if (yyn == YYFINAL)
2114b725ae77Skettenis     YYACCEPT;
2115b725ae77Skettenis 
2116b725ae77Skettenis   YYDPRINTF ((stderr, "Shifting error token, "));
2117b725ae77Skettenis 
2118b725ae77Skettenis   *++yyvsp = yylval;
2119*11efff7fSkettenis 
2120b725ae77Skettenis 
2121b725ae77Skettenis   yystate = yyn;
2122b725ae77Skettenis   goto yynewstate;
2123b725ae77Skettenis 
2124b725ae77Skettenis 
2125b725ae77Skettenis /*-------------------------------------.
2126b725ae77Skettenis | yyacceptlab -- YYACCEPT comes here.  |
2127b725ae77Skettenis `-------------------------------------*/
2128b725ae77Skettenis yyacceptlab:
2129b725ae77Skettenis   yyresult = 0;
2130b725ae77Skettenis   goto yyreturn;
2131b725ae77Skettenis 
2132b725ae77Skettenis /*-----------------------------------.
2133b725ae77Skettenis | yyabortlab -- YYABORT comes here.  |
2134b725ae77Skettenis `-----------------------------------*/
2135b725ae77Skettenis yyabortlab:
2136b725ae77Skettenis   yyresult = 1;
2137b725ae77Skettenis   goto yyreturn;
2138b725ae77Skettenis 
2139*11efff7fSkettenis #ifndef yyoverflow
2140*11efff7fSkettenis /*----------------------------------------------.
2141*11efff7fSkettenis | yyoverflowlab -- parser overflow comes here.  |
2142*11efff7fSkettenis `----------------------------------------------*/
2143b725ae77Skettenis yyoverflowlab:
2144b725ae77Skettenis   yyerror ("parser stack overflow");
2145b725ae77Skettenis   yyresult = 2;
2146b725ae77Skettenis   /* Fall through.  */
2147*11efff7fSkettenis #endif
2148b725ae77Skettenis 
2149b725ae77Skettenis yyreturn:
2150b725ae77Skettenis #ifndef yyoverflow
2151b725ae77Skettenis   if (yyss != yyssa)
2152b725ae77Skettenis     YYSTACK_FREE (yyss);
2153b725ae77Skettenis #endif
2154b725ae77Skettenis   return yyresult;
2155b725ae77Skettenis }
2156*11efff7fSkettenis 
2157*11efff7fSkettenis 
2158b725ae77Skettenis #line 647 "m2-exp.y"
2159b725ae77Skettenis 
2160b725ae77Skettenis 
2161b725ae77Skettenis #if 0  /* FIXME! */
2162b725ae77Skettenis int
2163b725ae77Skettenis overflow(a,b)
2164b725ae77Skettenis    long a,b;
2165b725ae77Skettenis {
2166b725ae77Skettenis    return (MAX_OF_TYPE(builtin_type_m2_int) - b) < a;
2167b725ae77Skettenis }
2168b725ae77Skettenis 
2169b725ae77Skettenis int
2170b725ae77Skettenis uoverflow(a,b)
2171b725ae77Skettenis    unsigned long a,b;
2172b725ae77Skettenis {
2173b725ae77Skettenis    return (MAX_OF_TYPE(builtin_type_m2_card) - b) < a;
2174b725ae77Skettenis }
2175b725ae77Skettenis #endif /* FIXME */
2176b725ae77Skettenis 
2177b725ae77Skettenis /* Take care of parsing a number (anything that starts with a digit).
2178b725ae77Skettenis    Set yylval and return the token type; update lexptr.
2179b725ae77Skettenis    LEN is the number of characters in it.  */
2180b725ae77Skettenis 
2181b725ae77Skettenis /*** Needs some error checking for the float case ***/
2182b725ae77Skettenis 
2183b725ae77Skettenis static int
parse_number(olen)2184b725ae77Skettenis parse_number (olen)
2185b725ae77Skettenis      int olen;
2186b725ae77Skettenis {
2187b725ae77Skettenis   char *p = lexptr;
2188b725ae77Skettenis   LONGEST n = 0;
2189b725ae77Skettenis   LONGEST prevn = 0;
2190b725ae77Skettenis   int c,i,ischar=0;
2191b725ae77Skettenis   int base = input_radix;
2192b725ae77Skettenis   int len = olen;
2193b725ae77Skettenis   int unsigned_p = number_sign == 1 ? 1 : 0;
2194b725ae77Skettenis 
2195b725ae77Skettenis   if(p[len-1] == 'H')
2196b725ae77Skettenis   {
2197b725ae77Skettenis      base = 16;
2198b725ae77Skettenis      len--;
2199b725ae77Skettenis   }
2200b725ae77Skettenis   else if(p[len-1] == 'C' || p[len-1] == 'B')
2201b725ae77Skettenis   {
2202b725ae77Skettenis      base = 8;
2203b725ae77Skettenis      ischar = p[len-1] == 'C';
2204b725ae77Skettenis      len--;
2205b725ae77Skettenis   }
2206b725ae77Skettenis 
2207b725ae77Skettenis   /* Scan the number */
2208b725ae77Skettenis   for (c = 0; c < len; c++)
2209b725ae77Skettenis   {
2210b725ae77Skettenis     if (p[c] == '.' && base == 10)
2211b725ae77Skettenis       {
2212b725ae77Skettenis 	/* It's a float since it contains a point.  */
2213b725ae77Skettenis 	yylval.dval = atof (p);
2214b725ae77Skettenis 	lexptr += len;
2215b725ae77Skettenis 	return FLOAT;
2216b725ae77Skettenis       }
2217b725ae77Skettenis     if (p[c] == '.' && base != 10)
2218b725ae77Skettenis        error("Floating point numbers must be base 10.");
2219b725ae77Skettenis     if (base == 10 && (p[c] < '0' || p[c] > '9'))
2220b725ae77Skettenis        error("Invalid digit \'%c\' in number.",p[c]);
2221b725ae77Skettenis  }
2222b725ae77Skettenis 
2223b725ae77Skettenis   while (len-- > 0)
2224b725ae77Skettenis     {
2225b725ae77Skettenis       c = *p++;
2226b725ae77Skettenis       n *= base;
2227b725ae77Skettenis       if( base == 8 && (c == '8' || c == '9'))
2228b725ae77Skettenis 	 error("Invalid digit \'%c\' in octal number.",c);
2229b725ae77Skettenis       if (c >= '0' && c <= '9')
2230b725ae77Skettenis 	i = c - '0';
2231b725ae77Skettenis       else
2232b725ae77Skettenis 	{
2233b725ae77Skettenis 	  if (base == 16 && c >= 'A' && c <= 'F')
2234b725ae77Skettenis 	    i = c - 'A' + 10;
2235b725ae77Skettenis 	  else
2236b725ae77Skettenis 	     return ERROR;
2237b725ae77Skettenis 	}
2238b725ae77Skettenis       n+=i;
2239b725ae77Skettenis       if(i >= base)
2240b725ae77Skettenis 	 return ERROR;
2241b725ae77Skettenis       if(!unsigned_p && number_sign == 1 && (prevn >= n))
2242b725ae77Skettenis 	 unsigned_p=1;		/* Try something unsigned */
2243b725ae77Skettenis       /* Don't do the range check if n==i and i==0, since that special
2244b725ae77Skettenis 	 case will give an overflow error. */
2245b725ae77Skettenis       if(RANGE_CHECK && n!=i && i)
2246b725ae77Skettenis       {
2247b725ae77Skettenis 	 if((unsigned_p && (unsigned)prevn >= (unsigned)n) ||
2248b725ae77Skettenis 	    ((!unsigned_p && number_sign==-1) && -prevn <= -n))
2249b725ae77Skettenis 	    range_error("Overflow on numeric constant.");
2250b725ae77Skettenis       }
2251b725ae77Skettenis 	 prevn=n;
2252b725ae77Skettenis     }
2253b725ae77Skettenis 
2254b725ae77Skettenis   lexptr = p;
2255b725ae77Skettenis   if(*p == 'B' || *p == 'C' || *p == 'H')
2256b725ae77Skettenis      lexptr++;			/* Advance past B,C or H */
2257b725ae77Skettenis 
2258b725ae77Skettenis   if (ischar)
2259b725ae77Skettenis   {
2260b725ae77Skettenis      yylval.ulval = n;
2261b725ae77Skettenis      return CHAR;
2262b725ae77Skettenis   }
2263b725ae77Skettenis   else if ( unsigned_p && number_sign == 1)
2264b725ae77Skettenis   {
2265b725ae77Skettenis      yylval.ulval = n;
2266b725ae77Skettenis      return UINT;
2267b725ae77Skettenis   }
2268b725ae77Skettenis   else if((unsigned_p && (n<0))) {
2269b725ae77Skettenis      range_error("Overflow on numeric constant -- number too large.");
2270b725ae77Skettenis      /* But, this can return if range_check == range_warn.  */
2271b725ae77Skettenis   }
2272b725ae77Skettenis   yylval.lval = n;
2273b725ae77Skettenis   return INT;
2274b725ae77Skettenis }
2275b725ae77Skettenis 
2276b725ae77Skettenis 
2277b725ae77Skettenis /* Some tokens */
2278b725ae77Skettenis 
2279b725ae77Skettenis static struct
2280b725ae77Skettenis {
2281b725ae77Skettenis    char name[2];
2282b725ae77Skettenis    int token;
2283b725ae77Skettenis } tokentab2[] =
2284b725ae77Skettenis {
2285b725ae77Skettenis     { {'<', '>'},    NOTEQUAL 	},
2286b725ae77Skettenis     { {':', '='},    ASSIGN	},
2287b725ae77Skettenis     { {'<', '='},    LEQ	},
2288b725ae77Skettenis     { {'>', '='},    GEQ	},
2289b725ae77Skettenis     { {':', ':'},    COLONCOLON },
2290b725ae77Skettenis 
2291b725ae77Skettenis };
2292b725ae77Skettenis 
2293b725ae77Skettenis /* Some specific keywords */
2294b725ae77Skettenis 
2295b725ae77Skettenis struct keyword {
2296b725ae77Skettenis    char keyw[10];
2297b725ae77Skettenis    int token;
2298b725ae77Skettenis };
2299b725ae77Skettenis 
2300b725ae77Skettenis static struct keyword keytab[] =
2301b725ae77Skettenis {
2302b725ae77Skettenis     {"OR" ,   OROR	 },
2303b725ae77Skettenis     {"IN",    IN         },/* Note space after IN */
2304b725ae77Skettenis     {"AND",   LOGICAL_AND},
2305b725ae77Skettenis     {"ABS",   ABS	 },
2306b725ae77Skettenis     {"CHR",   CHR	 },
2307b725ae77Skettenis     {"DEC",   DEC	 },
2308b725ae77Skettenis     {"NOT",   NOT	 },
2309b725ae77Skettenis     {"DIV",   DIV    	 },
2310b725ae77Skettenis     {"INC",   INC	 },
2311b725ae77Skettenis     {"MAX",   MAX_FUNC	 },
2312b725ae77Skettenis     {"MIN",   MIN_FUNC	 },
2313b725ae77Skettenis     {"MOD",   MOD	 },
2314b725ae77Skettenis     {"ODD",   ODD	 },
2315b725ae77Skettenis     {"CAP",   CAP	 },
2316b725ae77Skettenis     {"ORD",   ORD	 },
2317b725ae77Skettenis     {"VAL",   VAL	 },
2318b725ae77Skettenis     {"EXCL",  EXCL	 },
2319b725ae77Skettenis     {"HIGH",  HIGH       },
2320b725ae77Skettenis     {"INCL",  INCL	 },
2321b725ae77Skettenis     {"SIZE",  SIZE       },
2322b725ae77Skettenis     {"FLOAT", FLOAT_FUNC },
2323b725ae77Skettenis     {"TRUNC", TRUNC	 },
2324b725ae77Skettenis };
2325b725ae77Skettenis 
2326b725ae77Skettenis 
2327b725ae77Skettenis /* Read one token, getting characters through lexptr.  */
2328b725ae77Skettenis 
2329b725ae77Skettenis /* This is where we will check to make sure that the language and the operators used are
2330b725ae77Skettenis    compatible  */
2331b725ae77Skettenis 
2332b725ae77Skettenis static int
yylex()2333b725ae77Skettenis yylex ()
2334b725ae77Skettenis {
2335b725ae77Skettenis   int c;
2336b725ae77Skettenis   int namelen;
2337b725ae77Skettenis   int i;
2338b725ae77Skettenis   char *tokstart;
2339b725ae77Skettenis   char quote;
2340b725ae77Skettenis 
2341b725ae77Skettenis  retry:
2342b725ae77Skettenis 
2343b725ae77Skettenis   prev_lexptr = lexptr;
2344b725ae77Skettenis 
2345b725ae77Skettenis   tokstart = lexptr;
2346b725ae77Skettenis 
2347b725ae77Skettenis 
2348b725ae77Skettenis   /* See if it is a special token of length 2 */
2349b725ae77Skettenis   for( i = 0 ; i < (int) (sizeof tokentab2 / sizeof tokentab2[0]) ; i++)
2350b725ae77Skettenis      if(DEPRECATED_STREQN(tokentab2[i].name, tokstart, 2))
2351b725ae77Skettenis      {
2352b725ae77Skettenis 	lexptr += 2;
2353b725ae77Skettenis 	return tokentab2[i].token;
2354b725ae77Skettenis      }
2355b725ae77Skettenis 
2356b725ae77Skettenis   switch (c = *tokstart)
2357b725ae77Skettenis     {
2358b725ae77Skettenis     case 0:
2359b725ae77Skettenis       return 0;
2360b725ae77Skettenis 
2361b725ae77Skettenis     case ' ':
2362b725ae77Skettenis     case '\t':
2363b725ae77Skettenis     case '\n':
2364b725ae77Skettenis       lexptr++;
2365b725ae77Skettenis       goto retry;
2366b725ae77Skettenis 
2367b725ae77Skettenis     case '(':
2368b725ae77Skettenis       paren_depth++;
2369b725ae77Skettenis       lexptr++;
2370b725ae77Skettenis       return c;
2371b725ae77Skettenis 
2372b725ae77Skettenis     case ')':
2373b725ae77Skettenis       if (paren_depth == 0)
2374b725ae77Skettenis 	return 0;
2375b725ae77Skettenis       paren_depth--;
2376b725ae77Skettenis       lexptr++;
2377b725ae77Skettenis       return c;
2378b725ae77Skettenis 
2379b725ae77Skettenis     case ',':
2380b725ae77Skettenis       if (comma_terminates && paren_depth == 0)
2381b725ae77Skettenis 	return 0;
2382b725ae77Skettenis       lexptr++;
2383b725ae77Skettenis       return c;
2384b725ae77Skettenis 
2385b725ae77Skettenis     case '.':
2386b725ae77Skettenis       /* Might be a floating point number.  */
2387b725ae77Skettenis       if (lexptr[1] >= '0' && lexptr[1] <= '9')
2388b725ae77Skettenis 	break;			/* Falls into number code.  */
2389b725ae77Skettenis       else
2390b725ae77Skettenis       {
2391b725ae77Skettenis 	 lexptr++;
2392b725ae77Skettenis 	 return DOT;
2393b725ae77Skettenis       }
2394b725ae77Skettenis 
2395b725ae77Skettenis /* These are character tokens that appear as-is in the YACC grammar */
2396b725ae77Skettenis     case '+':
2397b725ae77Skettenis     case '-':
2398b725ae77Skettenis     case '*':
2399b725ae77Skettenis     case '/':
2400b725ae77Skettenis     case '^':
2401b725ae77Skettenis     case '<':
2402b725ae77Skettenis     case '>':
2403b725ae77Skettenis     case '[':
2404b725ae77Skettenis     case ']':
2405b725ae77Skettenis     case '=':
2406b725ae77Skettenis     case '{':
2407b725ae77Skettenis     case '}':
2408b725ae77Skettenis     case '#':
2409b725ae77Skettenis     case '@':
2410b725ae77Skettenis     case '~':
2411b725ae77Skettenis     case '&':
2412b725ae77Skettenis       lexptr++;
2413b725ae77Skettenis       return c;
2414b725ae77Skettenis 
2415b725ae77Skettenis     case '\'' :
2416b725ae77Skettenis     case '"':
2417b725ae77Skettenis       quote = c;
2418b725ae77Skettenis       for (namelen = 1; (c = tokstart[namelen]) != quote && c != '\0'; namelen++)
2419b725ae77Skettenis 	if (c == '\\')
2420b725ae77Skettenis 	  {
2421b725ae77Skettenis 	    c = tokstart[++namelen];
2422b725ae77Skettenis 	    if (c >= '0' && c <= '9')
2423b725ae77Skettenis 	      {
2424b725ae77Skettenis 		c = tokstart[++namelen];
2425b725ae77Skettenis 		if (c >= '0' && c <= '9')
2426b725ae77Skettenis 		  c = tokstart[++namelen];
2427b725ae77Skettenis 	      }
2428b725ae77Skettenis 	  }
2429b725ae77Skettenis       if(c != quote)
2430b725ae77Skettenis 	 error("Unterminated string or character constant.");
2431b725ae77Skettenis       yylval.sval.ptr = tokstart + 1;
2432b725ae77Skettenis       yylval.sval.length = namelen - 1;
2433b725ae77Skettenis       lexptr += namelen + 1;
2434b725ae77Skettenis 
2435b725ae77Skettenis       if(namelen == 2)  	/* Single character */
2436b725ae77Skettenis       {
2437b725ae77Skettenis 	   yylval.ulval = tokstart[1];
2438b725ae77Skettenis 	   return CHAR;
2439b725ae77Skettenis       }
2440b725ae77Skettenis       else
2441b725ae77Skettenis 	 return STRING;
2442b725ae77Skettenis     }
2443b725ae77Skettenis 
2444b725ae77Skettenis   /* Is it a number?  */
2445b725ae77Skettenis   /* Note:  We have already dealt with the case of the token '.'.
2446b725ae77Skettenis      See case '.' above.  */
2447b725ae77Skettenis   if ((c >= '0' && c <= '9'))
2448b725ae77Skettenis     {
2449b725ae77Skettenis       /* It's a number.  */
2450b725ae77Skettenis       int got_dot = 0, got_e = 0;
2451b725ae77Skettenis       char *p = tokstart;
2452b725ae77Skettenis       int toktype;
2453b725ae77Skettenis 
2454b725ae77Skettenis       for (++p ;; ++p)
2455b725ae77Skettenis 	{
2456b725ae77Skettenis 	  if (!got_e && (*p == 'e' || *p == 'E'))
2457b725ae77Skettenis 	    got_dot = got_e = 1;
2458b725ae77Skettenis 	  else if (!got_dot && *p == '.')
2459b725ae77Skettenis 	    got_dot = 1;
2460b725ae77Skettenis 	  else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
2461b725ae77Skettenis 		   && (*p == '-' || *p == '+'))
2462b725ae77Skettenis 	    /* This is the sign of the exponent, not the end of the
2463b725ae77Skettenis 	       number.  */
2464b725ae77Skettenis 	    continue;
2465b725ae77Skettenis 	  else if ((*p < '0' || *p > '9') &&
2466b725ae77Skettenis 		   (*p < 'A' || *p > 'F') &&
2467b725ae77Skettenis 		   (*p != 'H'))  /* Modula-2 hexadecimal number */
2468b725ae77Skettenis 	    break;
2469b725ae77Skettenis 	}
2470b725ae77Skettenis 	toktype = parse_number (p - tokstart);
2471b725ae77Skettenis         if (toktype == ERROR)
2472b725ae77Skettenis 	  {
2473b725ae77Skettenis 	    char *err_copy = (char *) alloca (p - tokstart + 1);
2474b725ae77Skettenis 
2475b725ae77Skettenis 	    memcpy (err_copy, tokstart, p - tokstart);
2476b725ae77Skettenis 	    err_copy[p - tokstart] = 0;
2477b725ae77Skettenis 	    error ("Invalid number \"%s\".", err_copy);
2478b725ae77Skettenis 	  }
2479b725ae77Skettenis 	lexptr = p;
2480b725ae77Skettenis 	return toktype;
2481b725ae77Skettenis     }
2482b725ae77Skettenis 
2483b725ae77Skettenis   if (!(c == '_' || c == '$'
2484b725ae77Skettenis 	|| (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
2485b725ae77Skettenis     /* We must have come across a bad character (e.g. ';').  */
2486b725ae77Skettenis     error ("Invalid character '%c' in expression.", c);
2487b725ae77Skettenis 
2488b725ae77Skettenis   /* It's a name.  See how long it is.  */
2489b725ae77Skettenis   namelen = 0;
2490b725ae77Skettenis   for (c = tokstart[namelen];
2491b725ae77Skettenis        (c == '_' || c == '$' || (c >= '0' && c <= '9')
2492b725ae77Skettenis 	|| (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'));
2493b725ae77Skettenis        c = tokstart[++namelen])
2494b725ae77Skettenis     ;
2495b725ae77Skettenis 
2496b725ae77Skettenis   /* The token "if" terminates the expression and is NOT
2497b725ae77Skettenis      removed from the input stream.  */
2498b725ae77Skettenis   if (namelen == 2 && tokstart[0] == 'i' && tokstart[1] == 'f')
2499b725ae77Skettenis     {
2500b725ae77Skettenis       return 0;
2501b725ae77Skettenis     }
2502b725ae77Skettenis 
2503b725ae77Skettenis   lexptr += namelen;
2504b725ae77Skettenis 
2505b725ae77Skettenis   /*  Lookup special keywords */
2506b725ae77Skettenis   for(i = 0 ; i < (int) (sizeof(keytab) / sizeof(keytab[0])) ; i++)
2507b725ae77Skettenis      if(namelen == strlen(keytab[i].keyw) && DEPRECATED_STREQN(tokstart,keytab[i].keyw,namelen))
2508b725ae77Skettenis 	   return keytab[i].token;
2509b725ae77Skettenis 
2510b725ae77Skettenis   yylval.sval.ptr = tokstart;
2511b725ae77Skettenis   yylval.sval.length = namelen;
2512b725ae77Skettenis 
2513b725ae77Skettenis   if (*tokstart == '$')
2514b725ae77Skettenis     {
2515b725ae77Skettenis       write_dollar_variable (yylval.sval);
2516b725ae77Skettenis       return INTERNAL_VAR;
2517b725ae77Skettenis     }
2518b725ae77Skettenis 
2519b725ae77Skettenis   /* Use token-type BLOCKNAME for symbols that happen to be defined as
2520b725ae77Skettenis      functions.  If this is not so, then ...
2521b725ae77Skettenis      Use token-type TYPENAME for symbols that happen to be defined
2522b725ae77Skettenis      currently as names of types; NAME for other symbols.
2523b725ae77Skettenis      The caller is not constrained to care about the distinction.  */
2524b725ae77Skettenis  {
2525b725ae77Skettenis 
2526b725ae77Skettenis 
2527b725ae77Skettenis     char *tmp = copy_name (yylval.sval);
2528b725ae77Skettenis     struct symbol *sym;
2529b725ae77Skettenis 
2530b725ae77Skettenis     if (lookup_partial_symtab (tmp))
2531b725ae77Skettenis       return BLOCKNAME;
2532b725ae77Skettenis     sym = lookup_symbol (tmp, expression_context_block,
2533b725ae77Skettenis 			 VAR_DOMAIN, 0, NULL);
2534b725ae77Skettenis     if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
2535b725ae77Skettenis       return BLOCKNAME;
2536b725ae77Skettenis     if (lookup_typename (copy_name (yylval.sval), expression_context_block, 1))
2537b725ae77Skettenis       return TYPENAME;
2538b725ae77Skettenis 
2539b725ae77Skettenis     if(sym)
2540b725ae77Skettenis     {
2541b725ae77Skettenis        switch(sym->aclass)
2542b725ae77Skettenis        {
2543b725ae77Skettenis        case LOC_STATIC:
2544b725ae77Skettenis        case LOC_REGISTER:
2545b725ae77Skettenis        case LOC_ARG:
2546b725ae77Skettenis        case LOC_REF_ARG:
2547b725ae77Skettenis        case LOC_REGPARM:
2548b725ae77Skettenis        case LOC_REGPARM_ADDR:
2549b725ae77Skettenis        case LOC_LOCAL:
2550b725ae77Skettenis        case LOC_LOCAL_ARG:
2551b725ae77Skettenis        case LOC_BASEREG:
2552b725ae77Skettenis        case LOC_BASEREG_ARG:
2553b725ae77Skettenis        case LOC_CONST:
2554b725ae77Skettenis        case LOC_CONST_BYTES:
2555b725ae77Skettenis        case LOC_OPTIMIZED_OUT:
2556b725ae77Skettenis        case LOC_COMPUTED:
2557b725ae77Skettenis        case LOC_COMPUTED_ARG:
2558b725ae77Skettenis 	  return NAME;
2559b725ae77Skettenis 
2560b725ae77Skettenis        case LOC_TYPEDEF:
2561b725ae77Skettenis 	  return TYPENAME;
2562b725ae77Skettenis 
2563b725ae77Skettenis        case LOC_BLOCK:
2564b725ae77Skettenis 	  return BLOCKNAME;
2565b725ae77Skettenis 
2566b725ae77Skettenis        case LOC_UNDEF:
2567b725ae77Skettenis 	  error("internal:  Undefined class in m2lex()");
2568b725ae77Skettenis 
2569b725ae77Skettenis        case LOC_LABEL:
2570b725ae77Skettenis        case LOC_UNRESOLVED:
2571b725ae77Skettenis 	  error("internal:  Unforseen case in m2lex()");
2572b725ae77Skettenis 
2573b725ae77Skettenis        default:
2574b725ae77Skettenis 	  error ("unhandled token in m2lex()");
2575b725ae77Skettenis 	  break;
2576b725ae77Skettenis        }
2577b725ae77Skettenis     }
2578b725ae77Skettenis     else
2579b725ae77Skettenis     {
2580b725ae77Skettenis        /* Built-in BOOLEAN type.  This is sort of a hack. */
2581b725ae77Skettenis        if(DEPRECATED_STREQN(tokstart,"TRUE",4))
2582b725ae77Skettenis        {
2583b725ae77Skettenis 	  yylval.ulval = 1;
2584b725ae77Skettenis 	  return M2_TRUE;
2585b725ae77Skettenis        }
2586b725ae77Skettenis        else if(DEPRECATED_STREQN(tokstart,"FALSE",5))
2587b725ae77Skettenis        {
2588b725ae77Skettenis 	  yylval.ulval = 0;
2589b725ae77Skettenis 	  return M2_FALSE;
2590b725ae77Skettenis        }
2591b725ae77Skettenis     }
2592b725ae77Skettenis 
2593b725ae77Skettenis     /* Must be another type of name... */
2594b725ae77Skettenis     return NAME;
2595b725ae77Skettenis  }
2596b725ae77Skettenis }
2597b725ae77Skettenis 
2598b725ae77Skettenis #if 0		/* Unused */
2599b725ae77Skettenis static char *
2600b725ae77Skettenis make_qualname(mod,ident)
2601b725ae77Skettenis    char *mod, *ident;
2602b725ae77Skettenis {
2603b725ae77Skettenis    char *new = xmalloc(strlen(mod)+strlen(ident)+2);
2604b725ae77Skettenis 
2605b725ae77Skettenis    strcpy(new,mod);
2606b725ae77Skettenis    strcat(new,".");
2607b725ae77Skettenis    strcat(new,ident);
2608b725ae77Skettenis    return new;
2609b725ae77Skettenis }
2610b725ae77Skettenis #endif  /* 0 */
2611b725ae77Skettenis 
2612b725ae77Skettenis void
yyerror(msg)2613b725ae77Skettenis yyerror (msg)
2614b725ae77Skettenis      char *msg;
2615b725ae77Skettenis {
2616b725ae77Skettenis   if (prev_lexptr)
2617b725ae77Skettenis     lexptr = prev_lexptr;
2618b725ae77Skettenis 
2619b725ae77Skettenis   error ("A %s in expression, near `%s'.", (msg ? msg : "error"), lexptr);
2620b725ae77Skettenis }
2621*11efff7fSkettenis 
2622*11efff7fSkettenis 
2623