Ruby  2.0.0p247(2013-06-27revision41674)
parse.c
Go to the documentation of this file.
1 /* A Bison parser, made by GNU Bison 2.3. */
2 
3 /* Skeleton implementation for Bison's Yacc-like parsers in C
4 
5  Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
6  Free Software Foundation, Inc.
7 
8  This program is free software; you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation; either version 2, or (at your option)
11  any later version.
12 
13  This program is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program; if not, write to the Free Software
20  Foundation, Inc., 51 Franklin Street, Fifth Floor,
21  Boston, MA 02110-1301, USA. */
22 
23 /* As a special exception, you may create a larger work that contains
24  part or all of the Bison parser skeleton and distribute that work
25  under terms of your choice, so long as that work isn't itself a
26  parser generator using the skeleton or a modified version thereof
27  as a parser skeleton. Alternatively, if you modify or redistribute
28  the parser skeleton itself, you may (at your option) remove this
29  special exception, which will cause the skeleton and the resulting
30  Bison output files to be licensed under the GNU General Public
31  License without this special exception.
32 
33  This special exception was added by the Free Software Foundation in
34  version 2.2 of Bison. */
35 
36 /* C LALR(1) parser skeleton written by Richard Stallman, by
37  simplifying the original so-called "semantic" parser. */
38 
39 /* All symbols defined below should begin with yy or YY, to avoid
40  infringing on user name space. This should be done even for local
41  variables, as they might otherwise be expanded by user macros.
42  There are some unavoidable exceptions within include files to
43  define necessary library symbols; they are noted "INFRINGES ON
44  USER NAME SPACE" below. */
45 
46 /* Identify Bison output. */
47 #define YYBISON 1
48 
49 /* Bison version. */
50 #define YYBISON_VERSION "2.3"
51 
52 /* Skeleton name. */
53 #define YYSKELETON_NAME "yacc.c"
54 
55 /* Pure parsers. */
56 #define YYPURE 1
57 
58 /* Using locations. */
59 #define YYLSP_NEEDED 0
60 
61 
62 
63 /* Tokens. */
64 #ifndef YYTOKENTYPE
65 # define YYTOKENTYPE
66  /* Put the tokens into the symbol table, so that GDB and other debuggers
67  know about them. */
68  enum yytokentype {
72  keyword_def = 260,
77  keyword_end = 265,
78  keyword_if = 266,
80  keyword_then = 268,
82  keyword_else = 270,
83  keyword_case = 271,
84  keyword_when = 272,
87  keyword_for = 275,
89  keyword_next = 277,
90  keyword_redo = 278,
92  keyword_in = 280,
93  keyword_do = 281,
101  keyword_nil = 289,
104  keyword_and = 292,
105  keyword_or = 293,
106  keyword_not = 294,
107  modifier_if = 295,
115  keyword_END = 303,
119  tIDENTIFIER = 307,
120  tFID = 308,
121  tGVAR = 309,
122  tIVAR = 310,
123  tCONSTANT = 311,
124  tCVAR = 312,
125  tLABEL = 313,
126  tINTEGER = 314,
127  tFLOAT = 315,
129  tCHAR = 317,
130  tNTH_REF = 318,
131  tBACK_REF = 319,
132  tREGEXP_END = 320,
133  tUPLUS = 130,
134  tUMINUS = 131,
135  tPOW = 132,
136  tCMP = 134,
137  tEQ = 139,
138  tEQQ = 140,
139  tNEQ = 141,
140  tGEQ = 138,
141  tLEQ = 137,
142  tANDOP = 321,
143  tOROP = 322,
144  tMATCH = 142,
145  tNMATCH = 143,
146  tDOT2 = 128,
147  tDOT3 = 129,
148  tAREF = 144,
149  tASET = 145,
150  tLSHFT = 135,
151  tRSHFT = 136,
152  tCOLON2 = 323,
153  tCOLON3 = 324,
154  tOP_ASGN = 325,
155  tASSOC = 326,
156  tLPAREN = 327,
157  tLPAREN_ARG = 328,
158  tRPAREN = 329,
159  tLBRACK = 330,
160  tLBRACE = 331,
161  tLBRACE_ARG = 332,
162  tSTAR = 333,
163  tDSTAR = 334,
164  tAMPER = 335,
165  tLAMBDA = 336,
166  tSYMBEG = 337,
167  tSTRING_BEG = 338,
169  tREGEXP_BEG = 340,
170  tWORDS_BEG = 341,
171  tQWORDS_BEG = 342,
177  tSTRING_END = 348,
178  tLAMBEG = 349,
179  tLOWEST = 350,
180  tUMINUS_NUM = 351,
182  };
183 #endif
184 /* Tokens. */
185 #define END_OF_INPUT 0
186 #define keyword_class 258
187 #define keyword_module 259
188 #define keyword_def 260
189 #define keyword_undef 261
190 #define keyword_begin 262
191 #define keyword_rescue 263
192 #define keyword_ensure 264
193 #define keyword_end 265
194 #define keyword_if 266
195 #define keyword_unless 267
196 #define keyword_then 268
197 #define keyword_elsif 269
198 #define keyword_else 270
199 #define keyword_case 271
200 #define keyword_when 272
201 #define keyword_while 273
202 #define keyword_until 274
203 #define keyword_for 275
204 #define keyword_break 276
205 #define keyword_next 277
206 #define keyword_redo 278
207 #define keyword_retry 279
208 #define keyword_in 280
209 #define keyword_do 281
210 #define keyword_do_cond 282
211 #define keyword_do_block 283
212 #define keyword_do_LAMBDA 284
213 #define keyword_return 285
214 #define keyword_yield 286
215 #define keyword_super 287
216 #define keyword_self 288
217 #define keyword_nil 289
218 #define keyword_true 290
219 #define keyword_false 291
220 #define keyword_and 292
221 #define keyword_or 293
222 #define keyword_not 294
223 #define modifier_if 295
224 #define modifier_unless 296
225 #define modifier_while 297
226 #define modifier_until 298
227 #define modifier_rescue 299
228 #define keyword_alias 300
229 #define keyword_defined 301
230 #define keyword_BEGIN 302
231 #define keyword_END 303
232 #define keyword__LINE__ 304
233 #define keyword__FILE__ 305
234 #define keyword__ENCODING__ 306
235 #define tIDENTIFIER 307
236 #define tFID 308
237 #define tGVAR 309
238 #define tIVAR 310
239 #define tCONSTANT 311
240 #define tCVAR 312
241 #define tLABEL 313
242 #define tINTEGER 314
243 #define tFLOAT 315
244 #define tSTRING_CONTENT 316
245 #define tCHAR 317
246 #define tNTH_REF 318
247 #define tBACK_REF 319
248 #define tREGEXP_END 320
249 #define tUPLUS 130
250 #define tUMINUS 131
251 #define tPOW 132
252 #define tCMP 134
253 #define tEQ 139
254 #define tEQQ 140
255 #define tNEQ 141
256 #define tGEQ 138
257 #define tLEQ 137
258 #define tANDOP 321
259 #define tOROP 322
260 #define tMATCH 142
261 #define tNMATCH 143
262 #define tDOT2 128
263 #define tDOT3 129
264 #define tAREF 144
265 #define tASET 145
266 #define tLSHFT 135
267 #define tRSHFT 136
268 #define tCOLON2 323
269 #define tCOLON3 324
270 #define tOP_ASGN 325
271 #define tASSOC 326
272 #define tLPAREN 327
273 #define tLPAREN_ARG 328
274 #define tRPAREN 329
275 #define tLBRACK 330
276 #define tLBRACE 331
277 #define tLBRACE_ARG 332
278 #define tSTAR 333
279 #define tDSTAR 334
280 #define tAMPER 335
281 #define tLAMBDA 336
282 #define tSYMBEG 337
283 #define tSTRING_BEG 338
284 #define tXSTRING_BEG 339
285 #define tREGEXP_BEG 340
286 #define tWORDS_BEG 341
287 #define tQWORDS_BEG 342
288 #define tSYMBOLS_BEG 343
289 #define tQSYMBOLS_BEG 344
290 #define tSTRING_DBEG 345
291 #define tSTRING_DEND 346
292 #define tSTRING_DVAR 347
293 #define tSTRING_END 348
294 #define tLAMBEG 349
295 #define tLOWEST 350
296 #define tUMINUS_NUM 351
297 #define tLAST_TOKEN 352
298 
299 
300 
301 
302 /* Copy the first part of user declarations. */
303 #line 12 "parse.y"
304 
305 
306 #ifndef PARSER_DEBUG
307 #define PARSER_DEBUG 0
308 #endif
309 #define YYDEBUG 1
310 #define YYERROR_VERBOSE 1
311 #define YYSTACK_USE_ALLOCA 0
312 
313 #include "ruby/ruby.h"
314 #include "ruby/st.h"
315 #include "ruby/encoding.h"
316 #include "internal.h"
317 #include "node.h"
318 #include "parse.h"
319 #include "id.h"
320 #include "regenc.h"
321 #include <stdio.h>
322 #include <errno.h>
323 #include <ctype.h>
324 #include "probes.h"
325 
326 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
327 
328 #define YYMALLOC(size) rb_parser_malloc(parser, (size))
329 #define YYREALLOC(ptr, size) rb_parser_realloc(parser, (ptr), (size))
330 #define YYCALLOC(nelem, size) rb_parser_calloc(parser, (nelem), (size))
331 #define YYFREE(ptr) rb_parser_free(parser, (ptr))
332 #define malloc YYMALLOC
333 #define realloc YYREALLOC
334 #define calloc YYCALLOC
335 #define free YYFREE
336 
337 #ifndef RIPPER
338 static ID register_symid(ID, const char *, long, rb_encoding *);
339 static ID register_symid_str(ID, VALUE);
340 #define REGISTER_SYMID(id, name) register_symid((id), (name), strlen(name), enc)
341 #include "id.c"
342 #endif
343 
344 #define is_notop_id(id) ((id)>tLAST_OP_ID)
345 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL)
346 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL)
347 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE)
348 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET)
349 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST)
350 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS)
351 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK)
352 #define id_type(id) (is_notop_id(id) ? (int)((id)&ID_SCOPE_MASK) : -1)
353 
354 #define is_asgn_or_id(id) ((is_notop_id(id)) && \
355  (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \
356  ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \
357  ((id)&ID_SCOPE_MASK) == ID_CLASS))
358 
360  EXPR_BEG_bit, /* ignore newline, +/- is a sign. */
361  EXPR_END_bit, /* newline significant, +/- is an operator. */
362  EXPR_ENDARG_bit, /* ditto, and unbound braces. */
363  EXPR_ENDFN_bit, /* ditto, and unbound braces. */
364  EXPR_ARG_bit, /* newline significant, +/- is an operator. */
365  EXPR_CMDARG_bit, /* newline significant, +/- is an operator. */
366  EXPR_MID_bit, /* newline significant, +/- is an operator. */
367  EXPR_FNAME_bit, /* ignore newline, no reserved words. */
368  EXPR_DOT_bit, /* right after `.' or `::', no reserved words. */
369  EXPR_CLASS_bit, /* immediate after `class', no here document. */
370  EXPR_VALUE_bit, /* alike EXPR_BEG but label is disallowed. */
372 };
373 /* examine combinations */
375 #define DEF_EXPR(n) EXPR_##n = (1 << EXPR_##n##_bit)
377  DEF_EXPR(END),
378  DEF_EXPR(ENDARG),
379  DEF_EXPR(ENDFN),
380  DEF_EXPR(ARG),
381  DEF_EXPR(CMDARG),
382  DEF_EXPR(MID),
383  DEF_EXPR(FNAME),
384  DEF_EXPR(DOT),
385  DEF_EXPR(CLASS),
386  DEF_EXPR(VALUE),
387  EXPR_BEG_ANY = (EXPR_BEG | EXPR_VALUE | EXPR_MID | EXPR_CLASS),
388  EXPR_ARG_ANY = (EXPR_ARG | EXPR_CMDARG),
389  EXPR_END_ANY = (EXPR_END | EXPR_ENDARG | EXPR_ENDFN)
390 };
391 #define IS_lex_state_for(x, ls) ((x) & (ls))
392 #define IS_lex_state(ls) IS_lex_state_for(lex_state, (ls))
393 
394 #if PARSER_DEBUG
395 static const char *lex_state_name(enum lex_state_e state);
396 #endif
397 
399 
400 # define BITSTACK_PUSH(stack, n) ((stack) = ((stack)<<1)|((n)&1))
401 # define BITSTACK_POP(stack) ((stack) = (stack) >> 1)
402 # define BITSTACK_LEXPOP(stack) ((stack) = ((stack) >> 1) | ((stack) & 1))
403 # define BITSTACK_SET_P(stack) ((stack)&1)
404 
405 #define COND_PUSH(n) BITSTACK_PUSH(cond_stack, (n))
406 #define COND_POP() BITSTACK_POP(cond_stack)
407 #define COND_LEXPOP() BITSTACK_LEXPOP(cond_stack)
408 #define COND_P() BITSTACK_SET_P(cond_stack)
409 
410 #define CMDARG_PUSH(n) BITSTACK_PUSH(cmdarg_stack, (n))
411 #define CMDARG_POP() BITSTACK_POP(cmdarg_stack)
412 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
413 #define CMDARG_P() BITSTACK_SET_P(cmdarg_stack)
414 
415 struct vtable {
416  ID *tbl;
417  int pos;
418  int capa;
419  struct vtable *prev;
420 };
421 
422 struct local_vars {
423  struct vtable *args;
424  struct vtable *vars;
425  struct vtable *used;
426  struct local_vars *prev;
427 };
428 
429 #define DVARS_INHERIT ((void*)1)
430 #define DVARS_TOPSCOPE NULL
431 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
432 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
433 
434 static int
435 vtable_size(const struct vtable *tbl)
436 {
437  if (POINTER_P(tbl)) {
438  return tbl->pos;
439  }
440  else {
441  return 0;
442  }
443 }
444 
445 #define VTBL_DEBUG 0
446 
447 static struct vtable *
449 {
450  struct vtable *tbl = ALLOC(struct vtable);
451  tbl->pos = 0;
452  tbl->capa = 8;
453  tbl->tbl = ALLOC_N(ID, tbl->capa);
454  tbl->prev = prev;
455  if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
456  return tbl;
457 }
458 
459 static void
461 {
462  if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
463  if (POINTER_P(tbl)) {
464  if (tbl->tbl) {
465  xfree(tbl->tbl);
466  }
467  xfree(tbl);
468  }
469 }
470 
471 static void
472 vtable_add(struct vtable *tbl, ID id)
473 {
474  if (!POINTER_P(tbl)) {
475  rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
476  }
477  if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id));
478 
479  if (tbl->pos == tbl->capa) {
480  tbl->capa = tbl->capa * 2;
481  REALLOC_N(tbl->tbl, ID, tbl->capa);
482  }
483  tbl->tbl[tbl->pos++] = id;
484 }
485 
486 static int
487 vtable_included(const struct vtable * tbl, ID id)
488 {
489  int i;
490 
491  if (POINTER_P(tbl)) {
492  for (i = 0; i < tbl->pos; i++) {
493  if (tbl->tbl[i] == id) {
494  return i+1;
495  }
496  }
497  }
498  return 0;
499 }
500 
501 
502 #ifndef RIPPER
503 typedef struct token_info {
504  const char *token;
505  int linenum;
506  int column;
507  int nonspc;
508  struct token_info *next;
509 } token_info;
510 #endif
511 
512 /*
513  Structure of Lexer Buffer:
514 
515  lex_pbeg tokp lex_p lex_pend
516  | | | |
517  |-----------+--------------+------------|
518  |<------------>|
519  token
520 */
521 struct parser_params {
522  int is_ripper;
523  NODE *heap;
524 
526  VALUE eofp;
527 
530  stack_type parser_cond_stack;
531  stack_type parser_cmdarg_stack;
532  int parser_class_nest;
533  int parser_paren_nest;
534  int parser_lpar_beg;
535  int parser_in_single;
536  int parser_in_def;
537  int parser_brace_nest;
540  int parser_in_defined;
541  char *parser_tokenbuf;
542  int parser_tokidx;
543  int parser_toksiz;
544  int parser_tokline;
548  const char *parser_lex_pbeg;
549  const char *parser_lex_p;
550  const char *parser_lex_pend;
551  int parser_heredoc_end;
554  long parser_lex_gets_ptr;
556  struct local_vars *parser_lvtbl;
558  int line_count;
559  int has_shebang;
560  char *parser_ruby_sourcefile; /* current source file */
561  int parser_ruby_sourceline; /* current line no. */
562  rb_encoding *enc;
563 
564  int parser_yydebug;
565 
566 #ifndef RIPPER
567  /* Ruby core only */
571  VALUE coverage;
572  int nerr;
573 
576 #else
577  /* Ripper only */
578  VALUE parser_ruby_sourcefile_string;
579  const char *tokp;
580  VALUE delayed;
581  int delayed_line;
582  int delayed_col;
583 
584  VALUE value;
585  VALUE result;
586  VALUE parsing_thread;
587  int toplevel_p;
588 #endif
589 };
590 
591 #define STR_NEW(p,n) rb_enc_str_new((p),(n),current_enc)
592 #define STR_NEW0() rb_enc_str_new(0,0,current_enc)
593 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),current_enc)
594 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),current_enc)
595 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
596 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), current_enc)
597 
598 static int parser_yyerror(struct parser_params*, const char*);
599 #define yyerror(msg) parser_yyerror(parser, (msg))
600 
601 #define YYLEX_PARAM parser
602 
603 #define lex_strterm (parser->parser_lex_strterm)
604 #define lex_state (parser->parser_lex_state)
605 #define cond_stack (parser->parser_cond_stack)
606 #define cmdarg_stack (parser->parser_cmdarg_stack)
607 #define class_nest (parser->parser_class_nest)
608 #define paren_nest (parser->parser_paren_nest)
609 #define lpar_beg (parser->parser_lpar_beg)
610 #define brace_nest (parser->parser_brace_nest)
611 #define in_single (parser->parser_in_single)
612 #define in_def (parser->parser_in_def)
613 #define compile_for_eval (parser->parser_compile_for_eval)
614 #define cur_mid (parser->parser_cur_mid)
615 #define in_defined (parser->parser_in_defined)
616 #define tokenbuf (parser->parser_tokenbuf)
617 #define tokidx (parser->parser_tokidx)
618 #define toksiz (parser->parser_toksiz)
619 #define tokline (parser->parser_tokline)
620 #define lex_input (parser->parser_lex_input)
621 #define lex_lastline (parser->parser_lex_lastline)
622 #define lex_nextline (parser->parser_lex_nextline)
623 #define lex_pbeg (parser->parser_lex_pbeg)
624 #define lex_p (parser->parser_lex_p)
625 #define lex_pend (parser->parser_lex_pend)
626 #define heredoc_end (parser->parser_heredoc_end)
627 #define command_start (parser->parser_command_start)
628 #define deferred_nodes (parser->parser_deferred_nodes)
629 #define lex_gets_ptr (parser->parser_lex_gets_ptr)
630 #define lex_gets (parser->parser_lex_gets)
631 #define lvtbl (parser->parser_lvtbl)
632 #define ruby__end__seen (parser->parser_ruby__end__seen)
633 #define ruby_sourceline (parser->parser_ruby_sourceline)
634 #define ruby_sourcefile (parser->parser_ruby_sourcefile)
635 #define current_enc (parser->enc)
636 #define yydebug (parser->parser_yydebug)
637 #ifdef RIPPER
638 #else
639 #define ruby_eval_tree (parser->parser_eval_tree)
640 #define ruby_eval_tree_begin (parser->parser_eval_tree_begin)
641 #define ruby_debug_lines (parser->debug_lines)
642 #define ruby_coverage (parser->coverage)
643 #endif
644 
645 static int yylex(void*, void*);
646 
647 #ifndef RIPPER
648 #define yyparse ruby_yyparse
649 
650 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
651 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, (type), (a1), (a2), (a3))
652 
653 static NODE *cond_gen(struct parser_params*,NODE*);
654 #define cond(node) cond_gen(parser, (node))
655 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
656 #define logop(type,node1,node2) logop_gen(parser, (type), (node1), (node2))
657 
658 static NODE *newline_node(NODE*);
659 static void fixpos(NODE*,NODE*);
660 
661 static int value_expr_gen(struct parser_params*,NODE*);
662 static void void_expr_gen(struct parser_params*,NODE*);
663 static NODE *remove_begin(NODE*);
664 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
665 #define void_expr0(node) void_expr_gen(parser, (node))
666 #define void_expr(node) void_expr0((node) = remove_begin(node))
667 static void void_stmts_gen(struct parser_params*,NODE*);
668 #define void_stmts(node) void_stmts_gen(parser, (node))
669 static void reduce_nodes_gen(struct parser_params*,NODE**);
670 #define reduce_nodes(n) reduce_nodes_gen(parser,(n))
671 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
672 #define block_dup_check(n1,n2) block_dup_check_gen(parser,(n1),(n2))
673 
674 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
675 #define block_append(h,t) block_append_gen(parser,(h),(t))
676 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
677 #define list_append(l,i) list_append_gen(parser,(l),(i))
678 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
679 #define list_concat(h,t) list_concat_gen(parser,(h),(t))
680 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
681 #define arg_append(h,t) arg_append_gen(parser,(h),(t))
682 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
683 #define arg_concat(h,t) arg_concat_gen(parser,(h),(t))
684 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
685 #define literal_concat(h,t) literal_concat_gen(parser,(h),(t))
686 static int literal_concat0(struct parser_params *, VALUE, VALUE);
687 static NODE *new_evstr_gen(struct parser_params*,NODE*);
688 #define new_evstr(n) new_evstr_gen(parser,(n))
689 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
690 #define evstr2dstr(n) evstr2dstr_gen(parser,(n))
691 static NODE *splat_array(NODE*);
692 
693 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
694 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, (recv),(id),(arg1))
695 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
696 #define call_uni_op(recv,id) call_uni_op_gen(parser, (recv),(id))
697 
698 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,NODE*);
699 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
700 static NODE *new_args_tail_gen(struct parser_params*,NODE*,ID,ID);
701 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
702 
703 static NODE *negate_lit(NODE*);
704 static NODE *ret_args_gen(struct parser_params*,NODE*);
705 #define ret_args(node) ret_args_gen(parser, (node))
706 static NODE *arg_blk_pass(NODE*,NODE*);
707 static NODE *new_yield_gen(struct parser_params*,NODE*);
708 #define new_yield(node) new_yield_gen(parser, (node))
709 static NODE *dsym_node_gen(struct parser_params*,NODE*);
710 #define dsym_node(node) dsym_node_gen(parser, (node))
711 
712 static NODE *gettable_gen(struct parser_params*,ID);
713 #define gettable(id) gettable_gen(parser,(id))
714 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
715 #define assignable(id,node) assignable_gen(parser, (id), (node))
716 
717 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
718 #define aryset(node1,node2) aryset_gen(parser, (node1), (node2))
719 static NODE *attrset_gen(struct parser_params*,NODE*,ID);
720 #define attrset(node,id) attrset_gen(parser, (node), (id))
721 
722 static void rb_backref_error_gen(struct parser_params*,NODE*);
723 #define rb_backref_error(n) rb_backref_error_gen(parser,(n))
724 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
725 #define node_assign(node1, node2) node_assign_gen(parser, (node1), (node2))
726 
727 static NODE *new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
728 static NODE *new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs);
729 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (attr), (op), (rhs))
730 static NODE *new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
731 #define new_const_op_assign(lhs, op, rhs) new_const_op_assign_gen(parser, (lhs), (op), (rhs))
732 
733 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
734 #define match_op(node1,node2) match_op_gen(parser, (node1), (node2))
735 
736 static ID *local_tbl_gen(struct parser_params*);
737 #define local_tbl() local_tbl_gen(parser)
738 
739 static void fixup_nodes(NODE **);
740 
741 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
742 #define reg_compile(str,options) reg_compile_gen(parser, (str), (options))
743 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
744 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, (str), (options))
745 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
746 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, (str), (options))
748 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,(regexp),(match))
749 
750 #define get_id(id) (id)
751 #define get_value(val) (val)
752 #else
753 #define value_expr(node) ((void)(node))
754 #define remove_begin(node) (node)
755 #define rb_dvar_defined(id) 0
756 #define rb_local_defined(id) 0
757 static ID ripper_get_id(VALUE);
758 #define get_id(id) ripper_get_id(id)
759 static VALUE ripper_get_value(VALUE);
760 #define get_value(val) ripper_get_value(val)
761 static VALUE assignable_gen(struct parser_params*,VALUE);
762 #define assignable(lhs,node) assignable_gen(parser, (lhs))
763 static int id_is_var_gen(struct parser_params *parser, ID id);
764 #define id_is_var(id) id_is_var_gen(parser, (id))
765 
766 #define node_assign(node1, node2) dispatch2(assign, (node1), (node2))
767 
768 static VALUE new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs);
770 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (type), (attr), (op), (rhs))
771 
772 #endif /* !RIPPER */
773 
774 #define new_op_assign(lhs, op, rhs) new_op_assign_gen(parser, (lhs), (op), (rhs))
775 
776 static ID formal_argument_gen(struct parser_params*, ID);
777 #define formal_argument(id) formal_argument_gen(parser, (id))
778 static ID shadowing_lvar_gen(struct parser_params*,ID);
779 #define shadowing_lvar(name) shadowing_lvar_gen(parser, (name))
780 static void new_bv_gen(struct parser_params*,ID);
781 #define new_bv(id) new_bv_gen(parser, (id))
782 
783 static void local_push_gen(struct parser_params*,int);
784 #define local_push(top) local_push_gen(parser,(top))
785 static void local_pop_gen(struct parser_params*);
786 #define local_pop() local_pop_gen(parser)
787 static int local_var_gen(struct parser_params*, ID);
788 #define local_var(id) local_var_gen(parser, (id))
789 static int arg_var_gen(struct parser_params*, ID);
790 #define arg_var(id) arg_var_gen(parser, (id))
791 static int local_id_gen(struct parser_params*, ID);
792 #define local_id(id) local_id_gen(parser, (id))
793 static ID internal_id_gen(struct parser_params*);
794 #define internal_id() internal_id_gen(parser)
795 
796 static const struct vtable *dyna_push_gen(struct parser_params *);
797 #define dyna_push() dyna_push_gen(parser)
798 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
799 #define dyna_pop(node) dyna_pop_gen(parser, (node))
800 static int dyna_in_block_gen(struct parser_params*);
801 #define dyna_in_block() dyna_in_block_gen(parser)
802 #define dyna_var(id) local_var(id)
803 static int dvar_defined_gen(struct parser_params*,ID,int);
804 #define dvar_defined(id) dvar_defined_gen(parser, (id), 0)
805 #define dvar_defined_get(id) dvar_defined_gen(parser, (id), 1)
806 static int dvar_curr_gen(struct parser_params*,ID);
807 #define dvar_curr(id) dvar_curr_gen(parser, (id))
808 
809 static int lvar_defined_gen(struct parser_params*, ID);
810 #define lvar_defined(id) lvar_defined_gen(parser, (id))
811 
812 #define RE_OPTION_ONCE (1<<16)
813 #define RE_OPTION_ENCODING_SHIFT 8
814 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
815 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
816 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
817 #define RE_OPTION_MASK 0xff
818 #define RE_OPTION_ARG_ENCODING_NONE 32
819 
820 #define NODE_STRTERM NODE_ZARRAY /* nothing to gc */
821 #define NODE_HEREDOC NODE_ARRAY /* 1, 3 to gc */
822 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
823 #define nd_func u1.id
824 #if SIZEOF_SHORT == 2
825 #define nd_term(node) ((signed short)(node)->u2.id)
826 #else
827 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
828 #endif
829 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
830 #define nd_nest u3.cnt
831 
832 /****** Ripper *******/
833 
834 #ifdef RIPPER
835 #define RIPPER_VERSION "0.1.0"
836 
837 #include "eventids1.c"
838 #include "eventids2.c"
839 
840 static VALUE ripper_dispatch0(struct parser_params*,ID);
841 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
842 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
843 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
844 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
845 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
846 static VALUE ripper_dispatch7(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE);
847 
848 #define dispatch0(n) ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
849 #define dispatch1(n,a) ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a))
850 #define dispatch2(n,a,b) ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), (a), (b))
851 #define dispatch3(n,a,b,c) ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c))
852 #define dispatch4(n,a,b,c,d) ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d))
853 #define dispatch5(n,a,b,c,d,e) ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e))
854 #define dispatch7(n,a,b,c,d,e,f,g) ripper_dispatch7(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e), (f), (g))
855 
856 #define yyparse ripper_yyparse
857 
858 #define ripper_intern(s) ID2SYM(rb_intern(s))
859 static VALUE ripper_id2sym(ID);
860 #ifdef __GNUC__
861 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
862  ID2SYM(id) : ripper_id2sym(id))
863 #endif
864 
865 #define arg_new() dispatch0(args_new)
866 #define arg_add(l,a) dispatch2(args_add, (l), (a))
867 #define arg_add_star(l,a) dispatch2(args_add_star, (l), (a))
868 #define arg_add_block(l,b) dispatch2(args_add_block, (l), (b))
869 #define arg_add_optblock(l,b) ((b)==Qundef? (l) : dispatch2(args_add_block, (l), (b)))
870 #define bare_assoc(v) dispatch1(bare_assoc_hash, (v))
871 #define arg_add_assocs(l,b) arg_add((l), bare_assoc(b))
872 
873 #define args2mrhs(a) dispatch1(mrhs_new_from_args, (a))
874 #define mrhs_new() dispatch0(mrhs_new)
875 #define mrhs_add(l,a) dispatch2(mrhs_add, (l), (a))
876 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, (l), (a))
877 
878 #define mlhs_new() dispatch0(mlhs_new)
879 #define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a))
880 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a))
881 
882 #define params_new(pars, opts, rest, pars2, kws, kwrest, blk) \
883  dispatch7(params, (pars), (opts), (rest), (pars2), (kws), (kwrest), (blk))
884 
885 #define blockvar_new(p,v) dispatch2(block_var, (p), (v))
886 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a))
887 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, (l), (a))
888 
889 #define method_optarg(m,a) ((a)==Qundef ? (m) : dispatch2(method_add_arg,(m),(a)))
890 #define method_arg(m,a) dispatch2(method_add_arg,(m),(a))
891 #define method_add_block(m,b) dispatch2(method_add_block, (m), (b))
892 
893 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
894 
895 static inline VALUE
897 {
898  NODE *t = (NODE *)tail;
899  VALUE k = t->u1.value, kr = t->u2.value, b = t->u3.value;
900  return params_new(f, o, r, p, k, kr, escape_Qundef(b));
901 }
902 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
903 
904 static inline VALUE
905 new_args_tail_gen(struct parser_params *parser, VALUE k, VALUE kr, VALUE b)
906 {
907  return (VALUE)rb_node_newnode(NODE_MEMO, k, kr, b);
908 }
909 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
910 
911 #define FIXME 0
912 
913 #endif /* RIPPER */
914 
915 #ifndef RIPPER
916 # define Qnone 0
917 # define ifndef_ripper(x) (x)
918 #else
919 # define Qnone Qnil
920 # define ifndef_ripper(x)
921 #endif
922 
923 #ifndef RIPPER
924 # define rb_warn0(fmt) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt))
925 # define rb_warnI(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
926 # define rb_warnS(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
927 # define rb_warn4S(file,line,fmt,a) rb_compile_warn((file), (line), (fmt), (a))
928 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt))
929 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt), (a))
930 #else
931 # define rb_warn0(fmt) ripper_warn0(parser, (fmt))
932 # define rb_warnI(fmt,a) ripper_warnI(parser, (fmt), (a))
933 # define rb_warnS(fmt,a) ripper_warnS(parser, (fmt), (a))
934 # define rb_warn4S(file,line,fmt,a) ripper_warnS(parser, (fmt), (a))
935 # define rb_warning0(fmt) ripper_warning0(parser, (fmt))
936 # define rb_warningS(fmt,a) ripper_warningS(parser, (fmt), (a))
937 static void ripper_warn0(struct parser_params*, const char*);
938 static void ripper_warnI(struct parser_params*, const char*, int);
939 static void ripper_warnS(struct parser_params*, const char*, const char*);
940 static void ripper_warning0(struct parser_params*, const char*);
941 static void ripper_warningS(struct parser_params*, const char*, const char*);
942 #endif
943 
944 #ifdef RIPPER
945 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
946 # define rb_compile_error ripper_compile_error
947 # define compile_error ripper_compile_error
948 # define PARSER_ARG parser,
949 #else
950 # define rb_compile_error rb_compile_error_with_enc
951 # define compile_error parser->nerr++,rb_compile_error_with_enc
952 # define PARSER_ARG ruby_sourcefile, ruby_sourceline, current_enc,
953 #endif
954 
955 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150,
956  for instance). This is too low for Ruby to parse some files, such as
957  date/format.rb, therefore bump the value up to at least Bison's default. */
958 #ifdef OLD_YACC
959 #ifndef YYMAXDEPTH
960 #define YYMAXDEPTH 10000
961 #endif
962 #endif
963 
964 #ifndef RIPPER
965 static void token_info_push(struct parser_params*, const char *token);
966 static void token_info_pop(struct parser_params*, const char *token);
967 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, (token)) : (void)0)
968 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, (token)) : (void)0)
969 #else
970 #define token_info_push(token) /* nothing */
971 #define token_info_pop(token) /* nothing */
972 #endif
973 
974 
975 /* Enabling traces. */
976 #ifndef YYDEBUG
977 # define YYDEBUG 0
978 #endif
979 
980 /* Enabling verbose error messages. */
981 #ifdef YYERROR_VERBOSE
982 # undef YYERROR_VERBOSE
983 # define YYERROR_VERBOSE 1
984 #else
985 # define YYERROR_VERBOSE 0
986 #endif
987 
988 /* Enabling the token table. */
989 #ifndef YYTOKEN_TABLE
990 # define YYTOKEN_TABLE 0
991 #endif
992 
993 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
994 typedef union YYSTYPE
995 #line 686 "parse.y"
996 {
997  VALUE val;
998  NODE *node;
999  ID id;
1000  int num;
1001  const struct vtable *vars;
1002 }
1003 /* Line 187 of yacc.c. */
1004 #line 1005 "parse.c"
1005  YYSTYPE;
1006 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
1007 # define YYSTYPE_IS_DECLARED 1
1008 # define YYSTYPE_IS_TRIVIAL 1
1009 #endif
1010 
1011 
1012 
1013 /* Copy the second part of user declarations. */
1014 
1015 
1016 /* Line 216 of yacc.c. */
1017 #line 1018 "parse.c"
1018 
1019 #ifdef short
1020 # undef short
1021 #endif
1022 
1023 #ifdef YYTYPE_UINT8
1024 typedef YYTYPE_UINT8 yytype_uint8;
1025 #else
1026 typedef unsigned char yytype_uint8;
1027 #endif
1028 
1029 #ifdef YYTYPE_INT8
1030 typedef YYTYPE_INT8 yytype_int8;
1031 #elif (defined __STDC__ || defined __C99__FUNC__ \
1032  || defined __cplusplus || defined _MSC_VER)
1033 typedef signed char yytype_int8;
1034 #else
1035 typedef short int yytype_int8;
1036 #endif
1037 
1038 #ifdef YYTYPE_UINT16
1039 typedef YYTYPE_UINT16 yytype_uint16;
1040 #else
1041 typedef unsigned short int yytype_uint16;
1042 #endif
1043 
1044 #ifdef YYTYPE_INT16
1045 typedef YYTYPE_INT16 yytype_int16;
1046 #else
1047 typedef short int yytype_int16;
1048 #endif
1049 
1050 #ifndef YYSIZE_T
1051 # ifdef __SIZE_TYPE__
1052 # define YYSIZE_T __SIZE_TYPE__
1053 # elif defined size_t
1054 # define YYSIZE_T size_t
1055 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
1056  || defined __cplusplus || defined _MSC_VER)
1057 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1058 # define YYSIZE_T size_t
1059 # else
1060 # define YYSIZE_T unsigned int
1061 # endif
1062 #endif
1063 
1064 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
1065 
1066 #ifndef YY_
1067 # if YYENABLE_NLS
1068 # if ENABLE_NLS
1069 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1070 # define YY_(msgid) dgettext ("bison-runtime", msgid)
1071 # endif
1072 # endif
1073 # ifndef YY_
1074 # define YY_(msgid) msgid
1075 # endif
1076 #endif
1077 
1078 /* Suppress unused-variable warnings by "using" E. */
1079 #if ! defined lint || defined __GNUC__
1080 # define YYUSE(e) ((void) (e))
1081 #else
1082 # define YYUSE(e) /* empty */
1083 #endif
1084 
1085 /* Identity function, used to suppress warnings about constant conditions. */
1086 #ifndef lint
1087 # define YYID(n) (n)
1088 #else
1089 #if (defined __STDC__ || defined __C99__FUNC__ \
1090  || defined __cplusplus || defined _MSC_VER)
1091 static int
1092 YYID (int i)
1093 #else
1094 static int
1095 YYID (i)
1096  int i;
1097 #endif
1098 {
1099  return i;
1100 }
1101 #endif
1102 
1103 #if ! defined yyoverflow || YYERROR_VERBOSE
1104 
1105 /* The parser invokes alloca or malloc; define the necessary symbols. */
1106 
1107 # ifdef YYSTACK_USE_ALLOCA
1108 # if YYSTACK_USE_ALLOCA
1109 # ifdef __GNUC__
1110 # define YYSTACK_ALLOC __builtin_alloca
1111 # elif defined __BUILTIN_VA_ARG_INCR
1112 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
1113 # elif defined _AIX
1114 # define YYSTACK_ALLOC __alloca
1115 # elif defined _MSC_VER
1116 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
1117 # define alloca _alloca
1118 # else
1119 # define YYSTACK_ALLOC alloca
1120 # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
1121  || defined __cplusplus || defined _MSC_VER)
1122 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1123 # ifndef _STDLIB_H
1124 # define _STDLIB_H 1
1125 # endif
1126 # endif
1127 # endif
1128 # endif
1129 # endif
1130 
1131 # ifdef YYSTACK_ALLOC
1132  /* Pacify GCC's `empty if-body' warning. */
1133 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
1134 # ifndef YYSTACK_ALLOC_MAXIMUM
1135  /* The OS might guarantee only one guard page at the bottom of the stack,
1136  and a page size can be as small as 4096 bytes. So we cannot safely
1137  invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1138  to allow for a few compiler-allocated temporary stack slots. */
1139 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
1140 # endif
1141 # else
1142 # define YYSTACK_ALLOC YYMALLOC
1143 # define YYSTACK_FREE YYFREE
1144 # ifndef YYSTACK_ALLOC_MAXIMUM
1145 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
1146 # endif
1147 # if (defined __cplusplus && ! defined _STDLIB_H \
1148  && ! ((defined YYMALLOC || defined malloc) \
1149  && (defined YYFREE || defined free)))
1150 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1151 # ifndef _STDLIB_H
1152 # define _STDLIB_H 1
1153 # endif
1154 # endif
1155 # ifndef YYMALLOC
1156 # define YYMALLOC malloc
1157 # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
1158  || defined __cplusplus || defined _MSC_VER)
1159 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1160 # endif
1161 # endif
1162 # ifndef YYFREE
1163 # define YYFREE free
1164 # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
1165  || defined __cplusplus || defined _MSC_VER)
1166 void free (void *); /* INFRINGES ON USER NAME SPACE */
1167 # endif
1168 # endif
1169 # endif
1170 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
1171 
1172 
1173 #if (! defined yyoverflow \
1174  && (! defined __cplusplus \
1175  || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
1176 
1177 /* A type that is properly aligned for any stack member. */
1178 union yyalloc
1179 {
1180  yytype_int16 yyss;
1181  YYSTYPE yyvs;
1182  };
1183 
1184 /* The size of the maximum gap between one aligned stack and the next. */
1185 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1186 
1187 /* The size of an array large to enough to hold all stacks, each with
1188  N elements. */
1189 # define YYSTACK_BYTES(N) \
1190  ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
1191  + YYSTACK_GAP_MAXIMUM)
1192 
1193 /* Copy COUNT objects from FROM to TO. The source and destination do
1194  not overlap. */
1195 # ifndef YYCOPY
1196 # if defined __GNUC__ && 1 < __GNUC__
1197 # define YYCOPY(To, From, Count) \
1198  __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1199 # else
1200 # define YYCOPY(To, From, Count) \
1201  do \
1202  { \
1203  YYSIZE_T yyi; \
1204  for (yyi = 0; yyi < (Count); yyi++) \
1205  (To)[yyi] = (From)[yyi]; \
1206  } \
1207  while (YYID (0))
1208 # endif
1209 # endif
1210 
1211 /* Relocate STACK from its old location to the new one. The
1212  local variables YYSIZE and YYSTACKSIZE give the old and new number of
1213  elements in the stack, and YYPTR gives the new location of the
1214  stack. Advance YYPTR to a properly aligned location for the next
1215  stack. */
1216 # define YYSTACK_RELOCATE(Stack) \
1217  do \
1218  { \
1219  YYSIZE_T yynewbytes; \
1220  YYCOPY (&yyptr->Stack, Stack, yysize); \
1221  Stack = &yyptr->Stack; \
1222  yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1223  yyptr += yynewbytes / sizeof (*yyptr); \
1224  } \
1225  while (YYID (0))
1226 
1227 #endif
1228 
1229 /* YYFINAL -- State number of the termination state. */
1230 #define YYFINAL 3
1231 /* YYLAST -- Last index in YYTABLE. */
1232 #define YYLAST 10982
1233 
1234 /* YYNTOKENS -- Number of terminals. */
1235 #define YYNTOKENS 142
1236 /* YYNNTS -- Number of nonterminals. */
1237 #define YYNNTS 197
1238 /* YYNRULES -- Number of rules. */
1239 #define YYNRULES 618
1240 /* YYNRULES -- Number of states. */
1241 #define YYNSTATES 1055
1242 
1243 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1244 #define YYUNDEFTOK 2
1245 #define YYMAXUTOK 352
1246 
1247 #define YYTRANSLATE(YYX) \
1248  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1249 
1250 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
1251 static const yytype_uint8 yytranslate[] =
1252 {
1253  0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1254  141, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1255  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1256  2, 2, 140, 127, 2, 2, 2, 125, 120, 2,
1257  136, 137, 123, 121, 134, 122, 133, 124, 2, 2,
1258  2, 2, 2, 2, 2, 2, 2, 2, 115, 139,
1259  117, 113, 116, 114, 2, 2, 2, 2, 2, 2,
1260  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1261  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1262  2, 132, 2, 138, 119, 2, 135, 2, 2, 2,
1263  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1264  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1265  2, 2, 2, 130, 118, 131, 128, 2, 79, 80,
1266  66, 67, 68, 2, 69, 83, 84, 74, 73, 70,
1267  71, 72, 77, 78, 81, 82, 2, 2, 2, 2,
1268  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1269  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1270  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1271  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1272  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1273  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1274  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1275  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1276  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1277  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1278  2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1279  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1280  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1281  25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1282  35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1283  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1284  55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1285  65, 75, 76, 85, 86, 87, 88, 89, 90, 91,
1286  92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
1287  102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
1288  112, 126, 129
1289 };
1290 
1291 #if YYDEBUG
1292 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1293  YYRHS. */
1294 static const yytype_uint16 yyprhs[] =
1295 {
1296  0, 0, 3, 4, 7, 10, 12, 14, 18, 21,
1297  23, 24, 30, 35, 38, 40, 42, 46, 49, 51,
1298  52, 58, 59, 64, 68, 72, 76, 79, 83, 87,
1299  91, 95, 99, 104, 106, 110, 114, 121, 127, 133,
1300  139, 145, 149, 153, 157, 161, 163, 167, 171, 173,
1301  177, 181, 185, 188, 190, 192, 194, 196, 198, 203,
1302  204, 210, 212, 215, 219, 224, 230, 235, 241, 244,
1303  247, 250, 253, 256, 258, 262, 264, 268, 270, 273,
1304  277, 283, 286, 291, 294, 299, 301, 305, 307, 311,
1305  314, 318, 320, 324, 326, 328, 333, 337, 341, 345,
1306  349, 352, 354, 356, 358, 363, 367, 371, 375, 379,
1307  382, 384, 386, 388, 391, 393, 397, 399, 401, 403,
1308  405, 407, 409, 411, 413, 415, 417, 418, 423, 425,
1309  427, 429, 431, 433, 435, 437, 439, 441, 443, 445,
1310  447, 449, 451, 453, 455, 457, 459, 461, 463, 465,
1311  467, 469, 471, 473, 475, 477, 479, 481, 483, 485,
1312  487, 489, 491, 493, 495, 497, 499, 501, 503, 505,
1313  507, 509, 511, 513, 515, 517, 519, 521, 523, 525,
1314  527, 529, 531, 533, 535, 537, 539, 541, 543, 545,
1315  547, 549, 551, 553, 555, 557, 559, 561, 563, 565,
1316  569, 575, 579, 585, 592, 598, 604, 610, 616, 621,
1317  625, 629, 633, 637, 641, 645, 649, 653, 657, 662,
1318  667, 670, 673, 677, 681, 685, 689, 693, 697, 701,
1319  705, 709, 713, 717, 721, 725, 728, 731, 735, 739,
1320  743, 747, 748, 753, 760, 762, 764, 766, 769, 774,
1321  777, 781, 783, 785, 787, 789, 792, 797, 800, 802,
1322  805, 808, 813, 815, 816, 819, 822, 825, 827, 829,
1323  832, 836, 841, 845, 850, 853, 855, 857, 859, 861,
1324  863, 865, 867, 869, 871, 873, 875, 876, 881, 882,
1325  886, 887, 892, 896, 900, 903, 907, 911, 913, 918,
1326  922, 924, 925, 932, 937, 941, 944, 946, 949, 952,
1327  959, 966, 967, 968, 976, 977, 978, 986, 992, 997,
1328  998, 999, 1009, 1010, 1017, 1018, 1019, 1028, 1029, 1035,
1329  1036, 1043, 1044, 1045, 1055, 1057, 1059, 1061, 1063, 1065,
1330  1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085,
1331  1087, 1089, 1091, 1094, 1096, 1098, 1100, 1106, 1108, 1111,
1332  1113, 1115, 1117, 1121, 1123, 1127, 1129, 1134, 1141, 1145,
1333  1151, 1154, 1159, 1161, 1165, 1170, 1173, 1176, 1178, 1181,
1334  1182, 1189, 1198, 1203, 1210, 1215, 1218, 1225, 1228, 1233,
1335  1240, 1243, 1248, 1251, 1256, 1258, 1260, 1262, 1266, 1268,
1336  1273, 1275, 1280, 1282, 1286, 1288, 1290, 1291, 1292, 1297,
1337  1302, 1304, 1308, 1312, 1313, 1319, 1322, 1327, 1333, 1339,
1338  1342, 1343, 1349, 1350, 1356, 1360, 1361, 1366, 1367, 1372,
1339  1375, 1377, 1382, 1383, 1389, 1390, 1396, 1402, 1404, 1406,
1340  1413, 1415, 1417, 1419, 1421, 1424, 1426, 1429, 1431, 1433,
1341  1435, 1437, 1439, 1441, 1443, 1446, 1450, 1454, 1458, 1462,
1342  1466, 1467, 1471, 1473, 1476, 1480, 1484, 1485, 1489, 1493,
1343  1497, 1501, 1505, 1506, 1510, 1511, 1515, 1516, 1519, 1520,
1344  1523, 1524, 1527, 1529, 1530, 1534, 1535, 1536, 1537, 1544,
1345  1546, 1548, 1550, 1552, 1555, 1557, 1559, 1561, 1563, 1567,
1346  1569, 1571, 1574, 1577, 1579, 1581, 1583, 1585, 1587, 1589,
1347  1591, 1593, 1595, 1597, 1599, 1601, 1603, 1605, 1607, 1609,
1348  1611, 1613, 1615, 1616, 1621, 1624, 1628, 1631, 1636, 1639,
1349  1642, 1644, 1647, 1648, 1655, 1664, 1669, 1676, 1681, 1688,
1350  1691, 1696, 1703, 1706, 1711, 1714, 1719, 1721, 1722, 1724,
1351  1726, 1728, 1730, 1732, 1734, 1736, 1740, 1742, 1746, 1749,
1352  1752, 1754, 1758, 1760, 1764, 1766, 1768, 1771, 1773, 1777,
1353  1781, 1783, 1787, 1789, 1793, 1795, 1797, 1800, 1802, 1804,
1354  1806, 1809, 1812, 1814, 1816, 1817, 1822, 1824, 1827, 1829,
1355  1833, 1837, 1840, 1843, 1845, 1847, 1849, 1851, 1853, 1855,
1356  1857, 1859, 1861, 1863, 1865, 1867, 1868, 1870, 1871, 1873,
1357  1876, 1879, 1880, 1882, 1884, 1886, 1888, 1890, 1893
1358 };
1359 
1360 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
1361 static const yytype_int16 yyrhs[] =
1362 {
1363  143, 0, -1, -1, 144, 145, -1, 146, 331, -1,
1364  338, -1, 147, -1, 146, 337, 147, -1, 1, 147,
1365  -1, 154, -1, -1, 47, 148, 130, 145, 131, -1,
1366  150, 260, 229, 263, -1, 151, 331, -1, 338, -1,
1367  152, -1, 151, 337, 152, -1, 1, 154, -1, 154,
1368  -1, -1, 47, 153, 130, 145, 131, -1, -1, 45,
1369  177, 155, 177, -1, 45, 54, 54, -1, 45, 54,
1370  64, -1, 45, 54, 63, -1, 6, 178, -1, 154,
1371  40, 158, -1, 154, 41, 158, -1, 154, 42, 158,
1372  -1, 154, 43, 158, -1, 154, 44, 154, -1, 48,
1373  130, 150, 131, -1, 156, -1, 165, 113, 159, -1,
1374  295, 87, 159, -1, 214, 132, 188, 334, 87, 159,
1375  -1, 214, 133, 52, 87, 159, -1, 214, 133, 56,
1376  87, 159, -1, 214, 85, 56, 87, 159, -1, 214,
1377  85, 52, 87, 159, -1, 296, 87, 159, -1, 172,
1378  113, 195, -1, 165, 113, 184, -1, 165, 113, 195,
1379  -1, 157, -1, 172, 113, 159, -1, 172, 113, 156,
1380  -1, 159, -1, 157, 37, 157, -1, 157, 38, 157,
1381  -1, 39, 332, 157, -1, 127, 159, -1, 182, -1,
1382  157, -1, 164, -1, 160, -1, 249, -1, 249, 330,
1383  328, 190, -1, -1, 94, 162, 237, 150, 131, -1,
1384  327, -1, 163, 190, -1, 163, 190, 161, -1, 214,
1385  133, 328, 190, -1, 214, 133, 328, 190, 161, -1,
1386  214, 85, 328, 190, -1, 214, 85, 328, 190, 161,
1387  -1, 32, 190, -1, 31, 190, -1, 30, 189, -1,
1388  21, 189, -1, 22, 189, -1, 167, -1, 89, 166,
1389  333, -1, 167, -1, 89, 166, 333, -1, 169, -1,
1390  169, 168, -1, 169, 95, 171, -1, 169, 95, 171,
1391  134, 170, -1, 169, 95, -1, 169, 95, 134, 170,
1392  -1, 95, 171, -1, 95, 171, 134, 170, -1, 95,
1393  -1, 95, 134, 170, -1, 171, -1, 89, 166, 333,
1394  -1, 168, 134, -1, 169, 168, 134, -1, 168, -1,
1395  170, 134, 168, -1, 292, -1, 293, -1, 214, 132,
1396  188, 334, -1, 214, 133, 52, -1, 214, 85, 52,
1397  -1, 214, 133, 56, -1, 214, 85, 56, -1, 86,
1398  56, -1, 296, -1, 292, -1, 293, -1, 214, 132,
1399  188, 334, -1, 214, 133, 52, -1, 214, 85, 52,
1400  -1, 214, 133, 56, -1, 214, 85, 56, -1, 86,
1401  56, -1, 296, -1, 52, -1, 56, -1, 86, 173,
1402  -1, 173, -1, 214, 85, 173, -1, 52, -1, 56,
1403  -1, 53, -1, 180, -1, 181, -1, 175, -1, 288,
1404  -1, 176, -1, 290, -1, 177, -1, -1, 178, 134,
1405  179, 177, -1, 118, -1, 119, -1, 120, -1, 69,
1406  -1, 70, -1, 71, -1, 77, -1, 78, -1, 116,
1407  -1, 73, -1, 117, -1, 74, -1, 72, -1, 83,
1408  -1, 84, -1, 121, -1, 122, -1, 123, -1, 95,
1409  -1, 124, -1, 125, -1, 68, -1, 96, -1, 127,
1410  -1, 128, -1, 66, -1, 67, -1, 81, -1, 82,
1411  -1, 135, -1, 49, -1, 50, -1, 51, -1, 47,
1412  -1, 48, -1, 45, -1, 37, -1, 7, -1, 21,
1413  -1, 16, -1, 3, -1, 5, -1, 46, -1, 26,
1414  -1, 15, -1, 14, -1, 10, -1, 9, -1, 36,
1415  -1, 20, -1, 25, -1, 4, -1, 22, -1, 34,
1416  -1, 39, -1, 38, -1, 23, -1, 8, -1, 24,
1417  -1, 30, -1, 33, -1, 32, -1, 13, -1, 35,
1418  -1, 6, -1, 17, -1, 31, -1, 11, -1, 12,
1419  -1, 18, -1, 19, -1, 172, 113, 182, -1, 172,
1420  113, 182, 44, 182, -1, 295, 87, 182, -1, 295,
1421  87, 182, 44, 182, -1, 214, 132, 188, 334, 87,
1422  182, -1, 214, 133, 52, 87, 182, -1, 214, 133,
1423  56, 87, 182, -1, 214, 85, 52, 87, 182, -1,
1424  214, 85, 56, 87, 182, -1, 86, 56, 87, 182,
1425  -1, 296, 87, 182, -1, 182, 79, 182, -1, 182,
1426  80, 182, -1, 182, 121, 182, -1, 182, 122, 182,
1427  -1, 182, 123, 182, -1, 182, 124, 182, -1, 182,
1428  125, 182, -1, 182, 68, 182, -1, 126, 59, 68,
1429  182, -1, 126, 60, 68, 182, -1, 66, 182, -1,
1430  67, 182, -1, 182, 118, 182, -1, 182, 119, 182,
1431  -1, 182, 120, 182, -1, 182, 69, 182, -1, 182,
1432  116, 182, -1, 182, 73, 182, -1, 182, 117, 182,
1433  -1, 182, 74, 182, -1, 182, 70, 182, -1, 182,
1434  71, 182, -1, 182, 72, 182, -1, 182, 77, 182,
1435  -1, 182, 78, 182, -1, 127, 182, -1, 128, 182,
1436  -1, 182, 83, 182, -1, 182, 84, 182, -1, 182,
1437  75, 182, -1, 182, 76, 182, -1, -1, 46, 332,
1438  183, 182, -1, 182, 114, 182, 332, 115, 182, -1,
1439  196, -1, 182, -1, 338, -1, 194, 335, -1, 194,
1440  134, 325, 335, -1, 325, 335, -1, 136, 188, 333,
1441  -1, 338, -1, 186, -1, 338, -1, 189, -1, 194,
1442  134, -1, 194, 134, 325, 134, -1, 325, 134, -1,
1443  164, -1, 194, 193, -1, 325, 193, -1, 194, 134,
1444  325, 193, -1, 192, -1, -1, 191, 189, -1, 97,
1445  184, -1, 134, 192, -1, 338, -1, 184, -1, 95,
1446  184, -1, 194, 134, 184, -1, 194, 134, 95, 184,
1447  -1, 194, 134, 184, -1, 194, 134, 95, 184, -1,
1448  95, 184, -1, 264, -1, 265, -1, 268, -1, 269,
1449  -1, 270, -1, 275, -1, 273, -1, 276, -1, 294,
1450  -1, 296, -1, 53, -1, -1, 215, 197, 149, 225,
1451  -1, -1, 90, 198, 333, -1, -1, 90, 157, 199,
1452  333, -1, 89, 150, 137, -1, 214, 85, 56, -1,
1453  86, 56, -1, 92, 185, 138, -1, 93, 324, 131,
1454  -1, 30, -1, 31, 136, 189, 333, -1, 31, 136,
1455  333, -1, 31, -1, -1, 46, 332, 136, 200, 157,
1456  333, -1, 39, 136, 157, 333, -1, 39, 136, 333,
1457  -1, 163, 255, -1, 250, -1, 250, 255, -1, 98,
1458  242, -1, 216, 158, 226, 150, 228, 225, -1, 217,
1459  158, 226, 150, 229, 225, -1, -1, -1, 218, 201,
1460  158, 227, 202, 150, 225, -1, -1, -1, 219, 203,
1461  158, 227, 204, 150, 225, -1, 220, 158, 331, 258,
1462  225, -1, 220, 331, 258, 225, -1, -1, -1, 221,
1463  230, 25, 205, 158, 227, 206, 150, 225, -1, -1,
1464  222, 174, 297, 207, 149, 225, -1, -1, -1, 222,
1465  83, 157, 208, 336, 209, 149, 225, -1, -1, 223,
1466  174, 210, 149, 225, -1, -1, 224, 175, 211, 299,
1467  149, 225, -1, -1, -1, 224, 322, 330, 212, 175,
1468  213, 299, 149, 225, -1, 21, -1, 22, -1, 23,
1469  -1, 24, -1, 196, -1, 7, -1, 11, -1, 12,
1470  -1, 18, -1, 19, -1, 16, -1, 20, -1, 3,
1471  -1, 4, -1, 5, -1, 10, -1, 336, -1, 13,
1472  -1, 336, 13, -1, 336, -1, 27, -1, 229, -1,
1473  14, 158, 226, 150, 228, -1, 338, -1, 15, 150,
1474  -1, 172, -1, 165, -1, 304, -1, 89, 233, 333,
1475  -1, 231, -1, 232, 134, 231, -1, 232, -1, 232,
1476  134, 95, 304, -1, 232, 134, 95, 304, 134, 232,
1477  -1, 232, 134, 95, -1, 232, 134, 95, 134, 232,
1478  -1, 95, 304, -1, 95, 304, 134, 232, -1, 95,
1479  -1, 95, 134, 232, -1, 309, 134, 312, 321, -1,
1480  309, 321, -1, 312, 321, -1, 320, -1, 134, 234,
1481  -1, -1, 306, 134, 315, 134, 318, 235, -1, 306,
1482  134, 315, 134, 318, 134, 306, 235, -1, 306, 134,
1483  315, 235, -1, 306, 134, 315, 134, 306, 235, -1,
1484  306, 134, 318, 235, -1, 306, 134, -1, 306, 134,
1485  318, 134, 306, 235, -1, 306, 235, -1, 315, 134,
1486  318, 235, -1, 315, 134, 318, 134, 306, 235, -1,
1487  315, 235, -1, 315, 134, 306, 235, -1, 318, 235,
1488  -1, 318, 134, 306, 235, -1, 234, -1, 338, -1,
1489  238, -1, 118, 239, 118, -1, 76, -1, 118, 236,
1490  239, 118, -1, 332, -1, 332, 139, 240, 332, -1,
1491  241, -1, 240, 134, 241, -1, 52, -1, 303, -1,
1492  -1, -1, 243, 244, 245, 246, -1, 136, 302, 239,
1493  137, -1, 302, -1, 111, 150, 131, -1, 29, 150,
1494  10, -1, -1, 28, 248, 237, 150, 10, -1, 164,
1495  247, -1, 249, 330, 328, 187, -1, 249, 330, 328,
1496  187, 255, -1, 249, 330, 328, 190, 247, -1, 163,
1497  186, -1, -1, 214, 133, 328, 251, 187, -1, -1,
1498  214, 85, 328, 252, 186, -1, 214, 85, 329, -1,
1499  -1, 214, 133, 253, 186, -1, -1, 214, 85, 254,
1500  186, -1, 32, 186, -1, 32, -1, 214, 132, 188,
1501  334, -1, -1, 130, 256, 237, 150, 131, -1, -1,
1502  26, 257, 237, 150, 10, -1, 17, 194, 226, 150,
1503  259, -1, 229, -1, 258, -1, 8, 261, 262, 226,
1504  150, 260, -1, 338, -1, 184, -1, 195, -1, 338,
1505  -1, 88, 172, -1, 338, -1, 9, 150, -1, 338,
1506  -1, 291, -1, 288, -1, 290, -1, 266, -1, 62,
1507  -1, 267, -1, 266, 267, -1, 100, 279, 110, -1,
1508  101, 280, 110, -1, 102, 281, 65, -1, 103, 140,
1509  110, -1, 103, 271, 110, -1, -1, 271, 272, 140,
1510  -1, 282, -1, 272, 282, -1, 105, 140, 110, -1,
1511  105, 274, 110, -1, -1, 274, 272, 140, -1, 104,
1512  140, 110, -1, 104, 277, 110, -1, 106, 140, 110,
1513  -1, 106, 278, 110, -1, -1, 277, 61, 140, -1,
1514  -1, 278, 61, 140, -1, -1, 279, 282, -1, -1,
1515  280, 282, -1, -1, 281, 282, -1, 61, -1, -1,
1516  109, 283, 287, -1, -1, -1, -1, 107, 284, 285,
1517  286, 150, 108, -1, 54, -1, 55, -1, 57, -1,
1518  296, -1, 99, 289, -1, 175, -1, 55, -1, 54,
1519  -1, 57, -1, 99, 280, 110, -1, 59, -1, 60,
1520  -1, 126, 59, -1, 126, 60, -1, 52, -1, 55,
1521  -1, 54, -1, 56, -1, 57, -1, 34, -1, 33,
1522  -1, 35, -1, 36, -1, 50, -1, 49, -1, 51,
1523  -1, 292, -1, 293, -1, 292, -1, 293, -1, 63,
1524  -1, 64, -1, 336, -1, -1, 117, 298, 158, 336,
1525  -1, 1, 336, -1, 136, 302, 333, -1, 302, 336,
1526  -1, 310, 134, 312, 321, -1, 310, 321, -1, 312,
1527  321, -1, 320, -1, 134, 300, -1, -1, 306, 134,
1528  316, 134, 318, 301, -1, 306, 134, 316, 134, 318,
1529  134, 306, 301, -1, 306, 134, 316, 301, -1, 306,
1530  134, 316, 134, 306, 301, -1, 306, 134, 318, 301,
1531  -1, 306, 134, 318, 134, 306, 301, -1, 306, 301,
1532  -1, 316, 134, 318, 301, -1, 316, 134, 318, 134,
1533  306, 301, -1, 316, 301, -1, 316, 134, 306, 301,
1534  -1, 318, 301, -1, 318, 134, 306, 301, -1, 300,
1535  -1, -1, 56, -1, 55, -1, 54, -1, 57, -1,
1536  303, -1, 52, -1, 304, -1, 89, 233, 333, -1,
1537  305, -1, 306, 134, 305, -1, 58, 184, -1, 58,
1538  214, -1, 308, -1, 309, 134, 308, -1, 307, -1,
1539  310, 134, 307, -1, 68, -1, 96, -1, 311, 52,
1540  -1, 311, -1, 52, 113, 184, -1, 52, 113, 214,
1541  -1, 314, -1, 315, 134, 314, -1, 313, -1, 316,
1542  134, 313, -1, 123, -1, 95, -1, 317, 52, -1,
1543  317, -1, 120, -1, 97, -1, 319, 52, -1, 134,
1544  320, -1, 338, -1, 294, -1, -1, 136, 323, 157,
1545  333, -1, 338, -1, 325, 335, -1, 326, -1, 325,
1546  134, 326, -1, 184, 88, 184, -1, 58, 184, -1,
1547  96, 184, -1, 52, -1, 56, -1, 53, -1, 52,
1548  -1, 56, -1, 53, -1, 180, -1, 52, -1, 53,
1549  -1, 180, -1, 133, -1, 85, -1, -1, 337, -1,
1550  -1, 141, -1, 332, 137, -1, 332, 138, -1, -1,
1551  141, -1, 134, -1, 139, -1, 141, -1, 336, -1,
1552  337, 139, -1, -1
1553 };
1554 
1555 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
1556 static const yytype_uint16 yyrline[] =
1557 {
1558  0, 850, 850, 850, 881, 892, 901, 909, 917, 923,
1559  925, 924, 945, 978, 989, 998, 1006, 1014, 1020, 1025,
1560  1024, 1045, 1045, 1053, 1061, 1072, 1082, 1090, 1099, 1108,
1561  1121, 1134, 1143, 1155, 1156, 1166, 1171, 1192, 1197, 1202,
1562  1212, 1217, 1227, 1236, 1245, 1254, 1257, 1266, 1278, 1279,
1563  1287, 1295, 1303, 1311, 1314, 1326, 1327, 1330, 1331, 1343,
1564  1342, 1364, 1374, 1383, 1396, 1405, 1417, 1426, 1438, 1447,
1565  1456, 1464, 1472, 1482, 1483, 1493, 1494, 1504, 1512, 1520,
1566  1528, 1537, 1545, 1554, 1562, 1571, 1579, 1590, 1591, 1601,
1567  1609, 1619, 1627, 1637, 1641, 1645, 1653, 1661, 1669, 1677,
1568  1689, 1699, 1711, 1720, 1729, 1737, 1745, 1753, 1761, 1774,
1569  1787, 1798, 1806, 1809, 1817, 1825, 1835, 1836, 1837, 1838,
1570  1843, 1854, 1855, 1858, 1866, 1869, 1877, 1877, 1887, 1888,
1571  1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898,
1572  1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908,
1573  1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1919, 1919,
1574  1919, 1920, 1920, 1921, 1921, 1921, 1922, 1922, 1922, 1922,
1575  1923, 1923, 1923, 1923, 1924, 1924, 1924, 1925, 1925, 1925,
1576  1925, 1926, 1926, 1926, 1926, 1927, 1927, 1927, 1927, 1928,
1577  1928, 1928, 1928, 1929, 1929, 1929, 1929, 1930, 1930, 1933,
1578  1942, 1952, 1957, 1967, 1993, 1998, 2003, 2008, 2018, 2028,
1579  2039, 2053, 2067, 2075, 2083, 2091, 2099, 2107, 2115, 2124,
1580  2133, 2141, 2149, 2157, 2165, 2173, 2181, 2189, 2197, 2205,
1581  2213, 2221, 2229, 2237, 2248, 2256, 2264, 2272, 2280, 2288,
1582  2296, 2304, 2304, 2314, 2324, 2330, 2342, 2343, 2347, 2355,
1583  2365, 2375, 2376, 2379, 2380, 2381, 2385, 2393, 2403, 2412,
1584  2420, 2430, 2439, 2448, 2448, 2460, 2470, 2474, 2480, 2488,
1585  2496, 2510, 2526, 2540, 2555, 2565, 2566, 2567, 2568, 2569,
1586  2570, 2571, 2572, 2573, 2574, 2575, 2584, 2583, 2611, 2611,
1587  2619, 2619, 2627, 2635, 2643, 2651, 2664, 2672, 2680, 2688,
1588  2696, 2704, 2704, 2714, 2722, 2730, 2740, 2741, 2751, 2755,
1589  2767, 2779, 2779, 2779, 2790, 2790, 2790, 2801, 2812, 2821,
1590  2823, 2820, 2887, 2886, 2908, 2913, 2907, 2932, 2931, 2953,
1591  2952, 2975, 2976, 2975, 2996, 3004, 3012, 3020, 3030, 3042,
1592  3048, 3054, 3060, 3066, 3072, 3078, 3084, 3090, 3096, 3106,
1593  3112, 3117, 3118, 3125, 3130, 3133, 3134, 3147, 3148, 3158,
1594  3159, 3162, 3170, 3180, 3188, 3198, 3206, 3215, 3224, 3232,
1595  3240, 3249, 3261, 3269, 3280, 3284, 3288, 3292, 3298, 3303,
1596  3308, 3312, 3316, 3320, 3324, 3328, 3336, 3340, 3344, 3348,
1597  3352, 3356, 3360, 3364, 3368, 3374, 3375, 3381, 3390, 3399,
1598  3410, 3414, 3424, 3431, 3440, 3448, 3454, 3457, 3454, 3474,
1599  3482, 3492, 3496, 3503, 3502, 3523, 3539, 3548, 3560, 3574,
1600  3584, 3583, 3600, 3599, 3615, 3624, 3623, 3641, 3640, 3657,
1601  3665, 3673, 3688, 3687, 3707, 3706, 3727, 3739, 3740, 3743,
1602  3762, 3765, 3773, 3781, 3784, 3788, 3791, 3799, 3802, 3803,
1603  3811, 3814, 3831, 3832, 3833, 3843, 3853, 3880, 3945, 3954,
1604  3965, 3972, 3982, 3990, 4000, 4009, 4020, 4027, 4039, 4048,
1605  4058, 4067, 4078, 4085, 4096, 4103, 4118, 4125, 4136, 4143,
1606  4154, 4161, 4190, 4192, 4191, 4208, 4214, 4219, 4207, 4238,
1607  4246, 4254, 4262, 4265, 4276, 4277, 4278, 4279, 4282, 4293,
1608  4294, 4295, 4303, 4313, 4314, 4315, 4316, 4317, 4320, 4321,
1609  4322, 4323, 4324, 4325, 4326, 4329, 4342, 4352, 4360, 4370,
1610  4371, 4374, 4383, 4382, 4391, 4403, 4413, 4421, 4425, 4429,
1611  4433, 4439, 4444, 4449, 4453, 4457, 4461, 4465, 4469, 4473,
1612  4477, 4481, 4485, 4489, 4493, 4497, 4501, 4506, 4512, 4521,
1613  4530, 4539, 4550, 4551, 4558, 4567, 4586, 4593, 4606, 4618,
1614  4630, 4638, 4655, 4663, 4679, 4680, 4683, 4688, 4694, 4706,
1615  4718, 4726, 4742, 4750, 4766, 4767, 4770, 4783, 4794, 4795,
1616  4798, 4815, 4819, 4829, 4839, 4839, 4868, 4869, 4879, 4886,
1617  4896, 4904, 4912, 4924, 4925, 4926, 4929, 4930, 4931, 4932,
1618  4935, 4936, 4937, 4940, 4945, 4952, 4953, 4956, 4957, 4960,
1619  4963, 4966, 4967, 4968, 4971, 4972, 4975, 4976, 4980
1620 };
1621 #endif
1622 
1623 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1624 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1625  First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1626 static const char *const yytname[] =
1627 {
1628  "\"end-of-input\"", "error", "$undefined", "keyword_class",
1629  "keyword_module", "keyword_def", "keyword_undef", "keyword_begin",
1630  "keyword_rescue", "keyword_ensure", "keyword_end", "keyword_if",
1631  "keyword_unless", "keyword_then", "keyword_elsif", "keyword_else",
1632  "keyword_case", "keyword_when", "keyword_while", "keyword_until",
1633  "keyword_for", "keyword_break", "keyword_next", "keyword_redo",
1634  "keyword_retry", "keyword_in", "keyword_do", "keyword_do_cond",
1635  "keyword_do_block", "keyword_do_LAMBDA", "keyword_return",
1636  "keyword_yield", "keyword_super", "keyword_self", "keyword_nil",
1637  "keyword_true", "keyword_false", "keyword_and", "keyword_or",
1638  "keyword_not", "modifier_if", "modifier_unless", "modifier_while",
1639  "modifier_until", "modifier_rescue", "keyword_alias", "keyword_defined",
1640  "keyword_BEGIN", "keyword_END", "keyword__LINE__", "keyword__FILE__",
1641  "keyword__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR",
1642  "tCONSTANT", "tCVAR", "tLABEL", "tINTEGER", "tFLOAT", "tSTRING_CONTENT",
1643  "tCHAR", "tNTH_REF", "tBACK_REF", "tREGEXP_END", "\"unary+\"",
1644  "\"unary-\"", "\"**\"", "\"<=>\"", "\"==\"", "\"===\"", "\"!=\"",
1645  "\">=\"", "\"<=\"", "\"&&\"", "\"||\"", "\"=~\"", "\"!~\"", "\"..\"",
1646  "\"...\"", "\"[]\"", "\"[]=\"", "\"<<\"", "\">>\"", "\"::\"",
1647  "\":: at EXPR_BEG\"", "tOP_ASGN", "\"=>\"", "\"(\"", "\"( arg\"",
1648  "\")\"", "\"[\"", "\"{\"", "\"{ arg\"", "\"*\"", "\"**arg\"", "\"&\"",
1649  "\"->\"", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG",
1650  "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG", "tQSYMBOLS_BEG",
1651  "tSTRING_DBEG", "tSTRING_DEND", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG",
1652  "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'",
1653  "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "tLAST_TOKEN",
1654  "'{'", "'}'", "'['", "'.'", "','", "'`'", "'('", "')'", "']'", "';'",
1655  "' '", "'\\n'", "$accept", "program", "@1", "top_compstmt", "top_stmts",
1656  "top_stmt", "@2", "bodystmt", "compstmt", "stmts", "stmt_or_begin", "@3",
1657  "stmt", "@4", "command_asgn", "expr", "expr_value", "command_call",
1658  "block_command", "cmd_brace_block", "@5", "fcall", "command", "mlhs",
1659  "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head", "mlhs_post",
1660  "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", "fitem",
1661  "undef_list", "@6", "op", "reswords", "arg", "@7", "arg_value",
1662  "aref_args", "paren_args", "opt_paren_args", "opt_call_args",
1663  "call_args", "command_args", "@8", "block_arg", "opt_block_arg", "args",
1664  "mrhs", "primary", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16",
1665  "@17", "@18", "@19", "@20", "@21", "@22", "@23", "@24", "@25",
1666  "primary_value", "k_begin", "k_if", "k_unless", "k_while", "k_until",
1667  "k_case", "k_for", "k_class", "k_module", "k_def", "k_end", "then", "do",
1668  "if_tail", "opt_else", "for_var", "f_marg", "f_marg_list", "f_margs",
1669  "block_args_tail", "opt_block_args_tail", "block_param",
1670  "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", "bvar",
1671  "lambda", "@26", "@27", "f_larglist", "lambda_body", "do_block", "@28",
1672  "block_call", "method_call", "@29", "@30", "@31", "@32", "brace_block",
1673  "@33", "@34", "case_body", "cases", "opt_rescue", "exc_list", "exc_var",
1674  "opt_ensure", "literal", "strings", "string", "string1", "xstring",
1675  "regexp", "words", "word_list", "word", "symbols", "symbol_list",
1676  "qwords", "qsymbols", "qword_list", "qsym_list", "string_contents",
1677  "xstring_contents", "regexp_contents", "string_content", "@35", "@36",
1678  "@37", "@38", "string_dvar", "symbol", "sym", "dsym", "numeric",
1679  "user_variable", "keyword_variable", "var_ref", "var_lhs", "backref",
1680  "superclass", "@39", "f_arglist", "args_tail", "opt_args_tail", "f_args",
1681  "f_bad_arg", "f_norm_arg", "f_arg_item", "f_arg", "f_kw", "f_block_kw",
1682  "f_block_kwarg", "f_kwarg", "kwrest_mark", "f_kwrest", "f_opt",
1683  "f_block_opt", "f_block_optarg", "f_optarg", "restarg_mark",
1684  "f_rest_arg", "blkarg_mark", "f_block_arg", "opt_f_block_arg",
1685  "singleton", "@40", "assoc_list", "assocs", "assoc", "operation",
1686  "operation2", "operation3", "dot_or_colon", "opt_terms", "opt_nl",
1687  "rparen", "rbracket", "trailer", "term", "terms", "none", 0
1688 };
1689 #endif
1690 
1691 # ifdef YYPRINT
1692 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1693  token YYLEX-NUM. */
1694 static const yytype_uint16 yytoknum[] =
1695 {
1696  0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1697  265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1698  275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1699  285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1700  295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1701  305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1702  315, 316, 317, 318, 319, 320, 130, 131, 132, 134,
1703  139, 140, 141, 138, 137, 321, 322, 142, 143, 128,
1704  129, 144, 145, 135, 136, 323, 324, 325, 326, 327,
1705  328, 329, 330, 331, 332, 333, 334, 335, 336, 337,
1706  338, 339, 340, 341, 342, 343, 344, 345, 346, 347,
1707  348, 349, 350, 61, 63, 58, 62, 60, 124, 94,
1708  38, 43, 45, 42, 47, 37, 351, 33, 126, 352,
1709  123, 125, 91, 46, 44, 96, 40, 41, 93, 59,
1710  32, 10
1711 };
1712 # endif
1713 
1714 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1715 static const yytype_uint16 yyr1[] =
1716 {
1717  0, 142, 144, 143, 145, 146, 146, 146, 146, 147,
1718  148, 147, 149, 150, 151, 151, 151, 151, 152, 153,
1719  152, 155, 154, 154, 154, 154, 154, 154, 154, 154,
1720  154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
1721  154, 154, 154, 154, 154, 154, 156, 156, 157, 157,
1722  157, 157, 157, 157, 158, 159, 159, 160, 160, 162,
1723  161, 163, 164, 164, 164, 164, 164, 164, 164, 164,
1724  164, 164, 164, 165, 165, 166, 166, 167, 167, 167,
1725  167, 167, 167, 167, 167, 167, 167, 168, 168, 169,
1726  169, 170, 170, 171, 171, 171, 171, 171, 171, 171,
1727  171, 171, 172, 172, 172, 172, 172, 172, 172, 172,
1728  172, 173, 173, 174, 174, 174, 175, 175, 175, 175,
1729  175, 176, 176, 177, 177, 178, 179, 178, 180, 180,
1730  180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
1731  180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
1732  180, 180, 180, 180, 180, 180, 180, 180, 181, 181,
1733  181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
1734  181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
1735  181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
1736  181, 181, 181, 181, 181, 181, 181, 181, 181, 182,
1737  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
1738  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
1739  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
1740  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
1741  182, 183, 182, 182, 182, 184, 185, 185, 185, 185,
1742  186, 187, 187, 188, 188, 188, 188, 188, 189, 189,
1743  189, 189, 189, 191, 190, 192, 193, 193, 194, 194,
1744  194, 194, 195, 195, 195, 196, 196, 196, 196, 196,
1745  196, 196, 196, 196, 196, 196, 197, 196, 198, 196,
1746  199, 196, 196, 196, 196, 196, 196, 196, 196, 196,
1747  196, 200, 196, 196, 196, 196, 196, 196, 196, 196,
1748  196, 201, 202, 196, 203, 204, 196, 196, 196, 205,
1749  206, 196, 207, 196, 208, 209, 196, 210, 196, 211,
1750  196, 212, 213, 196, 196, 196, 196, 196, 214, 215,
1751  216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
1752  226, 226, 226, 227, 227, 228, 228, 229, 229, 230,
1753  230, 231, 231, 232, 232, 233, 233, 233, 233, 233,
1754  233, 233, 233, 233, 234, 234, 234, 234, 235, 235,
1755  236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1756  236, 236, 236, 236, 236, 237, 237, 238, 238, 238,
1757  239, 239, 240, 240, 241, 241, 243, 244, 242, 245,
1758  245, 246, 246, 248, 247, 249, 249, 249, 249, 250,
1759  251, 250, 252, 250, 250, 253, 250, 254, 250, 250,
1760  250, 250, 256, 255, 257, 255, 258, 259, 259, 260,
1761  260, 261, 261, 261, 262, 262, 263, 263, 264, 264,
1762  264, 265, 266, 266, 266, 267, 268, 269, 270, 270,
1763  271, 271, 272, 272, 273, 273, 274, 274, 275, 275,
1764  276, 276, 277, 277, 278, 278, 279, 279, 280, 280,
1765  281, 281, 282, 283, 282, 284, 285, 286, 282, 287,
1766  287, 287, 287, 288, 289, 289, 289, 289, 290, 291,
1767  291, 291, 291, 292, 292, 292, 292, 292, 293, 293,
1768  293, 293, 293, 293, 293, 294, 294, 295, 295, 296,
1769  296, 297, 298, 297, 297, 299, 299, 300, 300, 300,
1770  300, 301, 301, 302, 302, 302, 302, 302, 302, 302,
1771  302, 302, 302, 302, 302, 302, 302, 302, 303, 303,
1772  303, 303, 304, 304, 305, 305, 306, 306, 307, 308,
1773  309, 309, 310, 310, 311, 311, 312, 312, 313, 314,
1774  315, 315, 316, 316, 317, 317, 318, 318, 319, 319,
1775  320, 321, 321, 322, 323, 322, 324, 324, 325, 325,
1776  326, 326, 326, 327, 327, 327, 328, 328, 328, 328,
1777  329, 329, 329, 330, 330, 331, 331, 332, 332, 333,
1778  334, 335, 335, 335, 336, 336, 337, 337, 338
1779 };
1780 
1781 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
1782 static const yytype_uint8 yyr2[] =
1783 {
1784  0, 2, 0, 2, 2, 1, 1, 3, 2, 1,
1785  0, 5, 4, 2, 1, 1, 3, 2, 1, 0,
1786  5, 0, 4, 3, 3, 3, 2, 3, 3, 3,
1787  3, 3, 4, 1, 3, 3, 6, 5, 5, 5,
1788  5, 3, 3, 3, 3, 1, 3, 3, 1, 3,
1789  3, 3, 2, 1, 1, 1, 1, 1, 4, 0,
1790  5, 1, 2, 3, 4, 5, 4, 5, 2, 2,
1791  2, 2, 2, 1, 3, 1, 3, 1, 2, 3,
1792  5, 2, 4, 2, 4, 1, 3, 1, 3, 2,
1793  3, 1, 3, 1, 1, 4, 3, 3, 3, 3,
1794  2, 1, 1, 1, 4, 3, 3, 3, 3, 2,
1795  1, 1, 1, 2, 1, 3, 1, 1, 1, 1,
1796  1, 1, 1, 1, 1, 1, 0, 4, 1, 1,
1797  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1798  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1799  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1800  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1801  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1802  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1803  1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
1804  5, 3, 5, 6, 5, 5, 5, 5, 4, 3,
1805  3, 3, 3, 3, 3, 3, 3, 3, 4, 4,
1806  2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
1807  3, 3, 3, 3, 3, 2, 2, 3, 3, 3,
1808  3, 0, 4, 6, 1, 1, 1, 2, 4, 2,
1809  3, 1, 1, 1, 1, 2, 4, 2, 1, 2,
1810  2, 4, 1, 0, 2, 2, 2, 1, 1, 2,
1811  3, 4, 3, 4, 2, 1, 1, 1, 1, 1,
1812  1, 1, 1, 1, 1, 1, 0, 4, 0, 3,
1813  0, 4, 3, 3, 2, 3, 3, 1, 4, 3,
1814  1, 0, 6, 4, 3, 2, 1, 2, 2, 6,
1815  6, 0, 0, 7, 0, 0, 7, 5, 4, 0,
1816  0, 9, 0, 6, 0, 0, 8, 0, 5, 0,
1817  6, 0, 0, 9, 1, 1, 1, 1, 1, 1,
1818  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1819  1, 1, 2, 1, 1, 1, 5, 1, 2, 1,
1820  1, 1, 3, 1, 3, 1, 4, 6, 3, 5,
1821  2, 4, 1, 3, 4, 2, 2, 1, 2, 0,
1822  6, 8, 4, 6, 4, 2, 6, 2, 4, 6,
1823  2, 4, 2, 4, 1, 1, 1, 3, 1, 4,
1824  1, 4, 1, 3, 1, 1, 0, 0, 4, 4,
1825  1, 3, 3, 0, 5, 2, 4, 5, 5, 2,
1826  0, 5, 0, 5, 3, 0, 4, 0, 4, 2,
1827  1, 4, 0, 5, 0, 5, 5, 1, 1, 6,
1828  1, 1, 1, 1, 2, 1, 2, 1, 1, 1,
1829  1, 1, 1, 1, 2, 3, 3, 3, 3, 3,
1830  0, 3, 1, 2, 3, 3, 0, 3, 3, 3,
1831  3, 3, 0, 3, 0, 3, 0, 2, 0, 2,
1832  0, 2, 1, 0, 3, 0, 0, 0, 6, 1,
1833  1, 1, 1, 2, 1, 1, 1, 1, 3, 1,
1834  1, 2, 2, 1, 1, 1, 1, 1, 1, 1,
1835  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1836  1, 1, 0, 4, 2, 3, 2, 4, 2, 2,
1837  1, 2, 0, 6, 8, 4, 6, 4, 6, 2,
1838  4, 6, 2, 4, 2, 4, 1, 0, 1, 1,
1839  1, 1, 1, 1, 1, 3, 1, 3, 2, 2,
1840  1, 3, 1, 3, 1, 1, 2, 1, 3, 3,
1841  1, 3, 1, 3, 1, 1, 2, 1, 1, 1,
1842  2, 2, 1, 1, 0, 4, 1, 2, 1, 3,
1843  3, 2, 2, 1, 1, 1, 1, 1, 1, 1,
1844  1, 1, 1, 1, 1, 0, 1, 0, 1, 2,
1845  2, 0, 1, 1, 1, 1, 1, 2, 0
1846 };
1847 
1848 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
1849  STATE-NUM when YYTABLE doesn't specify something else to do. Zero
1850  means the default is an error. */
1851 static const yytype_uint16 yydefact[] =
1852 {
1853  2, 0, 0, 1, 0, 346, 347, 348, 0, 339,
1854  340, 341, 344, 342, 343, 345, 334, 335, 336, 337,
1855  297, 263, 263, 509, 508, 510, 511, 607, 0, 607,
1856  10, 0, 513, 512, 514, 593, 595, 505, 504, 594,
1857  507, 499, 500, 452, 519, 520, 0, 0, 0, 0,
1858  288, 618, 618, 85, 406, 478, 476, 478, 480, 460,
1859  472, 466, 474, 0, 0, 0, 3, 605, 6, 9,
1860  33, 45, 48, 56, 263, 55, 0, 73, 0, 77,
1861  87, 0, 53, 244, 0, 286, 0, 0, 311, 314,
1862  605, 0, 0, 0, 0, 57, 306, 275, 276, 451,
1863  453, 277, 278, 279, 281, 280, 282, 449, 450, 448,
1864  515, 516, 283, 0, 284, 61, 5, 8, 168, 179,
1865  169, 192, 165, 185, 175, 174, 195, 196, 190, 173,
1866  172, 167, 193, 197, 198, 177, 166, 180, 184, 186,
1867  178, 171, 187, 194, 189, 188, 181, 191, 176, 164,
1868  183, 182, 163, 170, 161, 162, 158, 159, 160, 116,
1869  118, 117, 153, 154, 149, 131, 132, 133, 140, 137,
1870  139, 134, 135, 155, 156, 141, 142, 146, 150, 136,
1871  138, 128, 129, 130, 143, 144, 145, 147, 148, 151,
1872  152, 157, 121, 123, 125, 26, 119, 120, 122, 124,
1873  0, 0, 0, 0, 0, 0, 0, 0, 258, 0,
1874  245, 268, 71, 262, 618, 0, 515, 516, 0, 284,
1875  618, 588, 72, 70, 607, 69, 0, 618, 429, 68,
1876  607, 608, 0, 0, 21, 241, 0, 0, 334, 335,
1877  297, 300, 430, 0, 220, 0, 221, 294, 0, 19,
1878  0, 0, 605, 15, 18, 607, 75, 14, 290, 607,
1879  0, 611, 611, 246, 0, 0, 611, 586, 607, 0,
1880  0, 0, 83, 338, 0, 93, 94, 101, 308, 407,
1881  496, 495, 497, 494, 0, 493, 0, 0, 0, 0,
1882  0, 0, 0, 0, 0, 0, 0, 501, 502, 52,
1883  235, 236, 614, 615, 4, 616, 606, 0, 0, 0,
1884  0, 0, 0, 0, 434, 432, 419, 62, 305, 413,
1885  415, 0, 89, 0, 81, 78, 0, 0, 0, 0,
1886  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1887  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1888  0, 0, 0, 427, 618, 425, 0, 54, 0, 0,
1889  0, 0, 605, 0, 606, 0, 360, 359, 0, 0,
1890  515, 516, 284, 111, 112, 0, 0, 114, 0, 0,
1891  515, 516, 284, 327, 188, 181, 191, 176, 158, 159,
1892  160, 116, 117, 584, 329, 583, 0, 604, 603, 0,
1893  307, 454, 0, 0, 126, 591, 294, 269, 592, 265,
1894  0, 0, 0, 259, 267, 427, 618, 425, 0, 0,
1895  0, 260, 607, 0, 299, 264, 607, 254, 618, 618,
1896  253, 607, 304, 51, 23, 25, 24, 0, 301, 0,
1897  0, 0, 427, 425, 0, 17, 0, 607, 292, 13,
1898  606, 74, 607, 289, 295, 613, 612, 247, 613, 249,
1899  296, 587, 0, 100, 501, 502, 91, 86, 0, 427,
1900  618, 425, 547, 482, 485, 483, 498, 479, 455, 477,
1901  456, 457, 481, 458, 459, 0, 462, 468, 0, 469,
1902  464, 465, 0, 470, 0, 471, 0, 0, 617, 7,
1903  27, 28, 29, 30, 31, 49, 50, 618, 618, 59,
1904  63, 618, 0, 34, 43, 0, 44, 607, 0, 79,
1905  90, 47, 46, 0, 199, 268, 42, 217, 225, 230,
1906  231, 232, 227, 229, 239, 240, 233, 234, 210, 211,
1907  237, 238, 607, 226, 228, 222, 223, 224, 212, 213,
1908  214, 215, 216, 596, 598, 597, 599, 0, 263, 424,
1909  607, 596, 598, 597, 599, 0, 263, 0, 618, 351,
1910  0, 350, 0, 0, 0, 0, 0, 0, 294, 427,
1911  618, 425, 319, 324, 111, 112, 113, 0, 522, 322,
1912  521, 427, 618, 425, 0, 0, 547, 331, 596, 597,
1913  263, 35, 201, 41, 209, 0, 199, 590, 0, 270,
1914  266, 618, 596, 597, 607, 596, 597, 589, 298, 609,
1915  250, 255, 257, 303, 22, 0, 242, 0, 32, 422,
1916  420, 208, 0, 76, 16, 291, 611, 0, 84, 97,
1917  99, 607, 596, 597, 553, 550, 549, 548, 551, 0,
1918  564, 0, 575, 565, 579, 578, 574, 547, 0, 546,
1919  410, 552, 554, 556, 532, 562, 618, 567, 618, 572,
1920  532, 577, 532, 0, 530, 486, 0, 461, 463, 473,
1921  467, 475, 218, 219, 398, 607, 0, 396, 395, 0,
1922  618, 0, 274, 0, 88, 82, 0, 0, 0, 0,
1923  0, 0, 428, 66, 0, 0, 431, 0, 0, 426,
1924  64, 618, 349, 287, 618, 618, 440, 618, 352, 618,
1925  354, 312, 353, 315, 0, 0, 318, 600, 293, 607,
1926  596, 597, 0, 0, 524, 0, 0, 111, 112, 115,
1927  607, 0, 607, 547, 0, 0, 0, 252, 416, 58,
1928  251, 0, 127, 271, 261, 0, 0, 431, 0, 0,
1929  618, 607, 11, 0, 248, 92, 95, 0, 558, 553,
1930  0, 372, 363, 365, 607, 361, 607, 0, 0, 408,
1931  0, 539, 0, 528, 582, 566, 0, 529, 0, 542,
1932  576, 0, 544, 580, 487, 489, 490, 491, 484, 492,
1933  553, 0, 394, 607, 0, 379, 560, 618, 618, 570,
1934  379, 379, 377, 400, 0, 0, 0, 0, 0, 272,
1935  80, 200, 0, 40, 206, 39, 207, 67, 423, 610,
1936  0, 37, 204, 38, 205, 65, 421, 441, 442, 618,
1937  443, 0, 618, 357, 0, 0, 355, 0, 0, 0,
1938  317, 0, 0, 431, 0, 325, 0, 0, 431, 328,
1939  585, 607, 0, 526, 332, 417, 418, 202, 0, 256,
1940  302, 20, 568, 607, 0, 370, 0, 555, 0, 0,
1941  0, 531, 557, 532, 532, 563, 618, 581, 532, 573,
1942  532, 532, 0, 0, 0, 559, 0, 397, 385, 387,
1943  0, 375, 376, 0, 390, 0, 392, 0, 435, 433,
1944  0, 414, 273, 243, 36, 203, 0, 0, 445, 358,
1945  0, 12, 447, 0, 309, 310, 0, 0, 270, 618,
1946  320, 0, 523, 323, 525, 330, 547, 362, 373, 0,
1947  368, 364, 409, 412, 411, 0, 535, 0, 537, 527,
1948  0, 543, 0, 540, 545, 0, 569, 294, 427, 399,
1949  378, 379, 379, 561, 618, 379, 571, 379, 379, 404,
1950  607, 402, 405, 60, 0, 444, 0, 102, 103, 110,
1951  0, 446, 0, 313, 316, 437, 438, 436, 0, 0,
1952  0, 0, 371, 0, 366, 532, 532, 532, 532, 488,
1953  600, 293, 0, 382, 0, 384, 374, 0, 391, 0,
1954  388, 393, 0, 401, 109, 427, 618, 425, 618, 618,
1955  0, 326, 0, 369, 0, 536, 0, 533, 538, 541,
1956  379, 379, 379, 379, 403, 600, 108, 607, 596, 597,
1957  439, 356, 321, 333, 367, 532, 383, 0, 380, 386,
1958  389, 431, 534, 379, 381
1959 };
1960 
1961 /* YYDEFGOTO[NTERM-NUM]. */
1962 static const yytype_int16 yydefgoto[] =
1963 {
1964  -1, 1, 2, 66, 67, 68, 236, 567, 568, 252,
1965  253, 446, 254, 437, 70, 71, 358, 72, 73, 510,
1966  690, 243, 75, 76, 255, 77, 78, 79, 467, 80,
1967  209, 377, 378, 192, 193, 194, 195, 605, 556, 197,
1968  82, 439, 211, 260, 228, 748, 426, 427, 225, 226,
1969  213, 413, 428, 516, 83, 356, 259, 452, 625, 360,
1970  848, 361, 849, 732, 988, 736, 733, 931, 594, 596,
1971  746, 936, 245, 85, 86, 87, 88, 89, 90, 91,
1972  92, 93, 94, 713, 570, 721, 845, 846, 369, 772,
1973  773, 774, 960, 899, 803, 686, 687, 804, 970, 971,
1974  278, 279, 472, 658, 779, 320, 511, 95, 96, 711,
1975  704, 565, 557, 318, 508, 507, 577, 987, 715, 839,
1976  917, 921, 97, 98, 99, 100, 101, 102, 103, 290,
1977  485, 104, 294, 105, 106, 292, 296, 286, 284, 288,
1978  477, 676, 675, 794, 892, 798, 107, 285, 108, 109,
1979  216, 217, 112, 218, 219, 589, 735, 744, 881, 781,
1980  745, 661, 662, 663, 664, 665, 806, 807, 666, 667,
1981  668, 669, 809, 810, 670, 671, 672, 673, 674, 783,
1982  396, 595, 265, 429, 221, 115, 629, 559, 399, 304,
1983  423, 424, 706, 457, 571, 364, 257
1984 };
1985 
1986 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1987  STATE-NUM. */
1988 #define YYPACT_NINF -804
1989 static const yytype_int16 yypact[] =
1990 {
1991  -804, 112, 2751, -804, 7365, -804, -804, -804, 6888, -804,
1992  -804, -804, -804, -804, -804, -804, 7478, 7478, -804, -804,
1993  7478, 4073, 3668, -804, -804, -804, -804, 335, 6755, -10,
1994  -804, 15, -804, -804, -804, 2993, 3803, -804, -804, 3128,
1995  -804, -804, -804, -804, -804, -804, 8834, 8834, 92, 5125,
1996  8947, 7817, 8156, 7147, -804, 6622, -804, -804, -804, 44,
1997  56, 182, 209, 544, 9060, 8834, -804, -9, -804, 845,
1998  -804, 130, -804, -804, 138, 266, 238, -804, 219, 9173,
1999  -804, 295, 2612, 398, 405, -804, 8947, 8947, -804, -804,
2000  6012, 9282, 9391, 9500, 6488, 30, 62, -804, -804, 316,
2001  -804, -804, -804, -804, -804, -804, -804, -804, -804, -804,
2002  564, 574, -804, 356, 634, -804, -804, -804, -804, -804,
2003  -804, -804, -804, -804, -804, -804, -804, -804, -804, -804,
2004  -804, -804, -804, -804, -804, -804, -804, -804, -804, -804,
2005  -804, -804, -804, -804, -804, -804, -804, -804, -804, -804,
2006  -804, -804, -804, -804, -804, -804, -804, -804, -804, -804,
2007  -804, -804, -804, -804, -804, -804, -804, -804, -804, -804,
2008  -804, -804, -804, -804, -804, -804, -804, -804, -804, -804,
2009  -804, -804, -804, -804, -804, -804, -804, -804, -804, -804,
2010  -804, -804, -804, -804, -804, 315, -804, -804, -804, -804,
2011  360, 8834, 402, 5264, 8834, 8834, 8834, 8834, -804, 388,
2012  2612, 430, -804, -804, 392, 422, 174, 185, 447, 291,
2013  408, -804, -804, -804, 5899, -804, 7478, 7478, -804, -804,
2014  6125, -804, 8947, 596, -804, 400, 420, 5403, -804, -804,
2015  -804, 423, 432, 138, -804, 546, 515, 720, 7591, -804,
2016  5125, 478, -9, -804, 845, -10, 487, -804, 130, -10,
2017  479, 180, 247, -804, 430, 491, 247, -804, -10, 582,
2018  577, 9609, 499, -804, 573, 578, 600, 654, -804, -804,
2019  -804, -804, -804, -804, 322, -804, 463, 486, 401, 532,
2020  504, 545, 55, 563, 518, 566, 63, 625, 650, -804,
2021  -804, -804, -804, -804, -804, -804, 6238, 8947, 8947, 8947,
2022  8947, 7591, 8947, 8947, -804, -804, -804, 608, -804, -804,
2023  -804, 8269, -804, 5125, 7256, 588, 8269, 8834, 8834, 8834,
2024  8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834,
2025  8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834,
2026  8834, 8834, 8834, 9888, 7478, 9965, 4482, 130, 116, 116,
2027  8947, 8947, -9, 707, 592, 678, -804, -804, 657, 711,
2028  65, 66, 69, 444, 571, 8947, 129, -804, 257, 670,
2029  -804, -804, -804, -804, 253, 334, 349, 370, 387, 458,
2030  477, 535, 539, -804, -804, -804, 30, -804, -804, 10042,
2031  -804, -804, 9060, 9060, -804, -804, 304, -804, -804, -804,
2032  8834, 8834, 7704, -804, -804, 10119, 7478, 10196, 8834, 8834,
2033  7930, -804, -10, 604, -804, -804, -10, -804, 603, 609,
2034  -804, 89, -804, -804, -804, -804, -804, 6888, -804, 8834,
2035  5534, 617, 10119, 10196, 8834, 845, 621, -10, -804, -804,
2036  6351, 618, -10, -804, -804, 8043, -804, -804, 8156, -804,
2037  -804, -804, 400, 692, -804, -804, -804, 619, 9609, 10273,
2038  7478, 10350, 1377, -804, -804, -804, -804, -804, -804, -804,
2039  -804, -804, -804, -804, -804, 283, -804, -804, 614, -804,
2040  -804, -804, 293, -804, 638, -804, 8834, 8834, -804, -804,
2041  -804, -804, -804, -804, -804, -804, -804, 29, 29, -804,
2042  -804, 29, 8834, -804, 649, 662, -804, -10, 9609, 674,
2043  -804, -804, -804, 691, 2023, -804, -804, 515, 2149, 2149,
2044  2149, 2149, 1118, 1118, 2550, 1796, 2149, 2149, 2837, 2837,
2045  524, 524, 10841, 1118, 1118, 1095, 1095, 1178, 52, 52,
2046  515, 515, 515, 4208, 3263, 4343, 3398, 432, 685, -804,
2047  -10, 722, -804, 732, -804, 432, 3938, 800, 804, -804,
2048  4621, 801, 4899, 70, 70, 707, 8382, 800, 85, 10427,
2049  7478, 10504, -804, 130, -804, 692, -804, -9, -804, -804,
2050  -804, 10581, 7478, 10042, 4482, 8947, 1481, -804, -804, -804,
2051  1147, -804, 2365, -804, 2612, 6888, 2484, -804, 8834, 430,
2052  -804, 408, 2858, 3533, -10, 328, 333, -804, -804, -804,
2053  -804, 7704, 7930, -804, -804, 8947, 2612, 700, -804, -804,
2054  -804, 2612, 5534, 364, -804, -804, 247, 9609, 619, 643,
2055  23, -10, 202, 323, 703, -804, -804, -804, -804, 8834,
2056  -804, 807, -804, -804, -804, -804, -804, 1551, 75, -804,
2057  -804, -804, -804, -804, 689, -804, 694, 780, 702, -804,
2058  717, 806, 733, 817, -804, -804, 789, -804, -804, -804,
2059  -804, -804, 515, 515, -804, 1086, 5673, -804, -804, 5403,
2060  29, 5673, 737, 8495, -804, 619, 9609, 9060, 8834, 726,
2061  9060, 9060, -804, 608, 432, 735, 747, 9060, 9060, -804,
2062  608, 432, -804, -804, 8608, 859, -804, 676, -804, 859,
2063  -804, -804, -804, -804, 800, 74, -804, 57, 61, -10,
2064  100, 108, 8947, -9, -804, 8947, 4482, 643, 23, -804,
2065  -10, 800, 89, 1551, 4482, -9, 7021, -804, 62, 266,
2066  -804, 8834, -804, -804, -804, 8834, 8834, 374, 8834, 8834,
2067  742, 89, -804, 749, -804, -804, 428, 8834, -804, -804,
2068  807, 708, -804, 744, -10, -804, -10, 5673, 5403, -804,
2069  1551, -804, 395, -804, -804, -804, 40, -804, 1551, -804,
2070  -804, 992, -804, -804, -804, -804, -804, -804, -804, -804,
2071  769, 9718, -804, -10, 773, 760, -804, 765, 702, -804,
2072  766, 771, -804, 764, 898, 778, 5403, 901, 8834, 781,
2073  619, 2612, 8834, -804, 2612, -804, 2612, -804, -804, -804,
2074  9060, -804, 2612, -804, 2612, -804, -804, 649, -804, 826,
2075  -804, 5012, 907, -804, 8947, 800, -804, 800, 5673, 5673,
2076  -804, 8721, 4760, 154, 70, -804, -9, 800, -804, -804,
2077  -804, -10, 800, -804, -804, -804, -804, 2612, 8834, 7930,
2078  -804, -804, -804, -10, 892, 784, 877, -804, 783, 912,
2079  792, -804, -804, 791, 802, -804, 702, -804, 809, -804,
2080  811, 809, 5786, 9718, 894, 697, 833, -804, 1627, -804,
2081  436, -804, -804, 1627, -804, 1699, -804, 883, -804, -804,
2082  821, -804, 819, 2612, -804, 2612, 9827, 116, -804, -804,
2083  5673, -804, -804, 116, -804, -804, 800, 800, -804, 289,
2084  -804, 4482, -804, -804, -804, -804, 1481, -804, 820, 892,
2085  743, -804, -804, -804, -804, 1551, -804, 992, -804, -804,
2086  992, -804, 992, -804, -804, 848, 697, -804, 10658, -804,
2087  -804, 823, 824, -804, 702, 825, -804, 829, 825, -804,
2088  277, -804, -804, -804, 904, -804, 706, 578, 600, 654,
2089  4482, -804, 4621, -804, -804, -804, -804, -804, 5673, 800,
2090  4482, 892, 820, 892, 834, 809, 836, 809, 809, -804,
2091  831, 837, 1627, -804, 1699, -804, -804, 1699, -804, 1699,
2092  -804, -804, 883, -804, 692, 10735, 7478, 10812, 804, 676,
2093  800, -804, 800, 820, 892, -804, 992, -804, -804, -804,
2094  825, 841, 825, 825, -804, 169, 23, -10, 139, 170,
2095  -804, -804, -804, -804, 820, 809, -804, 1699, -804, -804,
2096  -804, 241, -804, 825, -804
2097 };
2098 
2099 /* YYPGOTO[NTERM-NUM]. */
2100 static const yytype_int16 yypgoto[] =
2101 {
2102  -804, -804, -804, -386, -804, 41, -804, -542, 285, -804,
2103  527, -804, 35, -804, -310, -43, -70, 19, -804, -187,
2104  -804, 680, 9, 887, -154, 27, -73, -804, -404, 6,
2105  1733, -328, 886, -52, -804, -24, -804, -804, 13, -804,
2106  1007, -804, 909, -804, -72, 271, -336, 141, 5, -804,
2107  -320, -212, 58, -313, -21, -804, -804, -804, -804, -804,
2108  -804, -804, -804, -804, -804, -804, -804, -804, -804, -804,
2109  -804, -804, 49, -804, -804, -804, -804, -804, -804, -804,
2110  -804, -804, -804, -520, -348, -519, -36, -634, -804, -803,
2111  -773, 214, 300, 37, -804, -405, -804, -653, -804, -18,
2112  -804, -804, -804, -804, -804, 246, -804, -804, -804, -804,
2113  -804, -804, -804, -95, -804, -804, -535, -804, -22, -804,
2114  -804, -804, -804, -804, -804, 908, -804, -804, -804, -804,
2115  714, -804, -804, -804, -804, -804, -804, -804, 940, -804,
2116  -116, -804, -804, -804, -804, -804, 2, -804, 7, -804,
2117  1388, 1539, 906, 1901, 1724, -804, -804, 73, -450, -410,
2118  -412, -769, -627, -718, -134, 228, 111, -804, -804, -804,
2119  -83, -721, -786, 114, 233, -804, -574, -804, -463, -579,
2120  -804, -804, -804, 102, -374, -804, -322, -804, 622, -29,
2121  -15, -221, -578, -243, -62, -11, -2
2122 };
2123 
2124 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
2125  positive, shift that token. If negative, reduce the rule which
2126  number is the opposite. If zero, do what YYDEFACT says.
2127  If YYTABLE_NINF, syntax error. */
2128 #define YYTABLE_NINF -619
2129 static const yytype_int16 yytable[] =
2130 {
2131  116, 400, 316, 283, 234, 305, 325, 258, 421, 432,
2132  198, 572, 232, 526, 235, 199, 521, 359, 560, 459,
2133  362, 196, 659, 461, 775, 208, 208, 229, 305, 208,
2134  198, 558, 273, 566, 451, 199, 757, 69, 453, 69,
2135  724, 196, 394, 357, 357, 117, 617, 357, 586, 263,
2136  267, 84, 741, 84, 627, 723, 306, 726, 273, 272,
2137  660, 363, 882, 766, 638, 215, 215, 889, 196, 215,
2138  273, 273, 273, 941, 214, 214, 256, 600, 214, 317,
2139  614, 842, -106, 299, 617, 847, -108, 569, 314, 787,
2140  -102, -103, 610, 558, -110, 566, 447, 720, 84, 215,
2141  610, 938, 274, 689, 777, 684, 691, 196, -293, 261,
2142  -109, 811, 3, 215, 695, 397, 488, 966, 220, 220,
2143  327, 630, 220, 878, 494, -105, 312, 313, 274, 569,
2144  302, 231, 303, -107, 641, 215, 215, 654, 972, 215,
2145  368, 379, 379, 775, 875, 237, 659, 685, 247, 630,
2146  896, 853, -105, 262, 266, -293, -293, 212, 222, -597,
2147  655, 223, 858, 398, 314, 489, 992, 312, 313, 517,
2148  479, 316, 482, 495, 486, 350, 351, 352, 486, -104,
2149  882, 584, -106, -107, 289, 585, 778, 431, 941, 433,
2150  305, -97, 315, -596, 857, -99, 291, -597, 466, -93,
2151  -94, 618, 862, -101, 850, 620, 884, 659, 851, 302,
2152  623, 303, 414, 302, 890, 303, 966, 421, 414, -100,
2153  1023, 859, 812, 449, 889, 430, 633, -96, 901, 902,
2154  231, 635, 882, 208, -96, 208, 208, 500, 501, 502,
2155  503, 450, -98, 972, 729, 776, 763, 775, 617, 775,
2156  273, 1044, 84, 462, -104, 302, 740, 303, 587, 630,
2157  789, -517, 792, 739, 357, 357, 357, 357, 315, 505,
2158  506, 630, -518, 215, 227, 215, 215, 256, -105, 215,
2159  -105, 215, 214, 445, 214, 816, 84, -102, -95, 882,
2160  573, 574, 820, 659, 319, 985, 694, 84, -103, 84,
2161  305, 610, 610, 273, 841, -596, 576, 949, -106, -107,
2162  -106, -107, 775, 994, 455, -96, 590, 357, 357, 887,
2163  274, 456, 293, 887, 962, 924, 220, 925, 220, 967,
2164  519, 861, 583, 575, 251, 930, -96, 933, -509, -96,
2165  513, 69, 935, -96, 473, 522, 504, 499, -98, 295,
2166  256, 321, 430, 322, 473, 84, 215, 215, 215, 215,
2167  84, 215, 215, 208, 775, 422, 775, 425, 564, 678,
2168  215, 996, 84, 274, 588, 215, 678, 852, 419, 515,
2169  -104, 458, -104, 473, 515, 1006, -509, 521, 456, 989,
2170  474, 444, 475, 764, 986, 466, 302, 775, 303, 754,
2171  474, 838, 475, 215, -110, 84, 983, 984, 326, 215,
2172  215, 1012, 564, 624, 430, 758, 56, -109, 231, -508,
2173  759, 601, 603, 677, 215, 208, 414, 414, 1031, 474,
2174  564, 475, 476, 680, -510, 812, -98, 887, 116, 198,
2175  812, -105, 812, 402, 199, 466, -107, 273, 1022, 404,
2176  196, 215, 215, 649, -431, -511, 564, -98, 406, 1051,
2177  -98, 868, 473, 650, -98, 215, 481, -508, 430, 1021,
2178  -593, 230, -513, 946, 948, 69, 231, -74, 951, 208,
2179  953, 954, -510, -338, 564, 702, 659, -104, 251, 84,
2180  353, 653, 654, 709, 801, 617, 230, 273, -88, 84,
2181  1042, 410, 1043, -511, 650, 688, 688, 415, 474, 688,
2182  475, 722, 722, -431, 611, 655, 827, 274, 411, 215,
2183  -513, 860, 441, 835, 473, 734, 412, 699, 747, -503,
2184  -338, -338, 653, 654, 418, 251, 438, 354, 355, 812,
2185  870, 812, 420, -512, 812, 705, 812, 473, 754, 610,
2186  440, 805, 742, 877, 416, 417, 655, 636, -431, 224,
2187  -431, -431, -514, 703, 765, 473, 716, 274, 227, 980,
2188  474, 710, 475, 478, -593, 982, -503, -503, 430, 473,
2189  -593, 752, 761, 327, 812, 1025, 1027, 1028, 1029, 208,
2190  430, -512, 327, 474, 564, 475, 480, -594, 750, 705,
2191  -73, 208, 808, 297, 298, 749, 564, 198, 251, 414,
2192  -514, 474, 199, 475, 484, 448, 273, 454, 196, 84,
2193  -503, 84, 460, 466, -506, 474, 705, 475, 491, 215,
2194  116, 442, 828, 468, 725, 1052, 464, 465, 463, 747,
2195  934, 215, 483, 84, 215, 348, 349, 350, 351, 352,
2196  434, -517, 937, 865, 888, 487, -506, 891, 469, 435,
2197  436, -518, 854, -515, 784, 856, 784, 69, -503, -600,
2198  813, 855, -506, 490, 215, 273, 493, -102, 416, 443,
2199  1037, 84, 74, 863, 74, -516, 274, -103, 688, 357,
2200  844, 841, 357, 496, 864, 630, 74, 74, -93, 886,
2201  74, -594, 509, -506, -506, 470, 471, -594, -94, 750,
2202  -515, -515, 840, 843, 705, 843, 522, 843, 497, 823,
2203  825, 403, 520, 760, 576, 705, 831, 833, -600, 74,
2204  74, 498, -516, -516, 578, 84, 582, 621, 84, -284,
2205  84, 619, 579, 622, 74, 274, 215, -110, 628, 215,
2206  215, 632, -88, 637, 679, 591, 215, 215, 414, 196,
2207  769, 813, 645, 646, 647, 648, 74, 74, -101, 965,
2208  74, 968, 515, -600, 923, -600, -600, -294, 681, -596,
2209  273, 215, 958, -268, 215, 84, -284, -284, 813, 580,
2210  581, 1015, 722, 84, 932, 769, 693, 645, 646, 647,
2211  648, 357, 592, 593, 697, 784, 784, 444, 696, 707,
2212  712, 995, 714, 997, 718, 808, 767, 964, 998, 708,
2213  808, -422, 808, 780, -294, -294, 84, 84, 782, 592,
2214  593, 762, 785, -109, 830, -105, 786, 918, 1016, 1017,
2215  922, 822, 874, 795, 796, -107, 797, 904, 906, 914,
2216  895, 788, 44, 45, -100, 717, -96, 719, 790, 769,
2217  -104, 645, 646, 647, 648, 84, -98, 791, 1030, 793,
2218  1032, -269, 273, 829, 841, 1033, 869, 993, 876, 215,
2219  871, -95, 893, 74, 784, 307, 308, 309, 310, 311,
2220  84, 897, 1045, 215, 898, 273, 770, 84, 84, 900,
2221  903, 84, 771, 907, 74, 905, 74, 74, 908, 909,
2222  74, 911, 74, 1053, 916, -270, 920, 74, 939, 808,
2223  942, 808, 943, 944, 808, 945, 808, 843, 74, 769,
2224  74, 645, 646, 647, 648, 969, 947, 645, 646, 647,
2225  648, 84, 956, 950, 769, 952, 645, 646, 647, 648,
2226  957, 959, 973, -271, 991, 1013, 999, 1002, 1004, 1007,
2227  1014, 264, 784, 1009, 808, 976, 770, -596, 1024, 84,
2228  1026, 814, 940, -597, 815, 1047, 817, 634, 366, 383,
2229  84, 770, 836, 1041, 873, 802, 74, 74, 74, 74,
2230  74, 74, 74, 74, 1034, 866, 1040, 287, 1003, 1005,
2231  395, 74, 1008, 74, 1010, 1011, 74, 401, 492, 990,
2232  885, 963, 961, 883, 430, 0, 716, 843, 597, 0,
2233  0, 0, 705, 210, 210, 208, 0, 210, 0, 84,
2234  564, 84, 0, 0, 74, 0, 74, 84, 0, 84,
2235  74, 74, 0, 0, 769, 0, 645, 646, 647, 648,
2236  649, 0, 0, 244, 246, 74, 0, 0, 210, 210,
2237  650, 0, 879, 880, 0, 215, 0, 1046, 1048, 1049,
2238  1050, 300, 301, 0, 0, 0, 0, 0, 0, 0,
2239  0, 651, 74, 74, 0, 0, 0, 0, 653, 654,
2240  1054, 0, 0, 0, 0, 0, 74, 0, 0, 0,
2241  0, 910, 0, 0, 0, 0, 0, 0, 0, 0,
2242  405, 0, 655, 407, 408, 409, 0, 0, 0, 0,
2243  74, 0, 0, 0, 0, 0, 919, 0, 0, 0,
2244  74, 0, 0, 926, 927, 0, 0, 929, 800, 0,
2245  645, 646, 647, 648, 801, 0, 0, -618, 0, 0,
2246  74, 0, 0, 0, 650, -618, -618, -618, 0, 0,
2247  -618, -618, -618, 327, -618, 0, 0, 0, 0, 0,
2248  0, 0, 0, -618, -618, 651, 0, 955, 340, 341,
2249  0, 652, 653, 654, -618, -618, 327, -618, -618, -618,
2250  -618, -618, 0, 0, 0, 0, 0, 0, 0, 0,
2251  0, 340, 341, 0, 0, 981, 655, 0, 210, 656,
2252  0, 210, 210, 210, 300, 347, 348, 349, 350, 351,
2253  352, 0, 0, 0, 0, 0, 0, 231, 0, 0,
2254  514, 210, -618, 210, 210, 525, 345, 346, 347, 348,
2255  349, 350, 351, 352, 0, 0, 327, 0, 0, 0,
2256  74, 0, 74, 0, 0, -618, 0, 0, 0, 0,
2257  74, 340, 341, 0, 0, 1018, 0, 1019, 0, 0,
2258  0, 0, 74, 1020, 74, 74, 0, -618, -618, 0,
2259  -618, 0, 0, 227, -618, 0, -618, 0, -618, 0,
2260  0, 0, 0, 0, 0, 0, 0, 0, 0, 348,
2261  349, 350, 351, 352, 0, 74, 0, 0, 0, 0,
2262  0, 0, 74, 0, 0, 0, 0, 0, 0, 0,
2263  607, 609, 0, 0, 0, 0, 0, 0, 210, 264,
2264  0, 0, 0, 524, 527, 528, 529, 530, 531, 532,
2265  533, 534, 535, 536, 537, 538, 539, 540, 541, 542,
2266  543, 544, 545, 546, 547, 548, 549, 550, 551, 552,
2267  0, 210, 0, 0, 609, 0, 74, 264, 0, 74,
2268  0, 74, 0, 0, 0, 0, 0, 74, 0, 0,
2269  74, 74, 0, 0, 0, 0, 0, 74, 74, 0,
2270  110, 0, 110, 0, 0, 0, 0, 0, 0, 0,
2271  0, 0, 0, 0, 0, 0, 0, 0, 0, 602,
2272  604, 0, 74, 0, 0, 74, 74, 606, 210, 210,
2273  0, 692, 0, 210, 74, 602, 604, 210, 0, 644,
2274  0, 645, 646, 647, 648, 649, 0, 110, 0, 0,
2275  0, 275, 0, 0, 0, 650, 626, 0, 0, 0,
2276  0, 631, 0, 0, 0, 0, 0, 74, 74, 0,
2277  0, 0, 210, 0, 0, 210, 651, 275, 0, 0,
2278  0, 0, 652, 653, 654, 0, 0, 210, 0, 370,
2279  380, 380, 380, 0, 0, 525, 0, 0, 0, 0,
2280  0, 0, 0, 0, 0, 0, 74, 655, 0, 0,
2281  656, 0, 0, 682, 683, 0, 0, 0, 0, 0,
2282  74, 0, 0, 657, 0, 0, 0, 753, 0, 210,
2283  0, 74, 0, 0, 74, 0, 0, 0, 74, 74,
2284  609, 264, 74, 644, 0, 645, 646, 647, 648, 649,
2285  0, 111, 0, 111, 0, 0, 0, 0, 0, 650,
2286  0, 0, 0, 0, 0, 0, 0, 0, 768, 0,
2287  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2288  651, 0, 74, 0, 0, 0, 652, 653, 654, 0,
2289  0, 0, 0, 210, 0, 0, 0, 210, 111, 0,
2290  0, 110, 276, 0, 0, 0, 0, 0, 0, 210,
2291  74, 655, 819, 644, 656, 645, 646, 647, 648, 649,
2292  0, 74, 0, 0, 0, 210, 0, 743, 276, 650,
2293  0, 0, 0, 837, 0, 110, 0, 0, 210, 210,
2294  371, 381, 381, 381, 0, 0, 110, 0, 110, 0,
2295  651, 0, 0, 0, 0, 0, 652, 653, 654, 0,
2296  0, 0, 0, 0, 0, 0, 210, 0, 0, 275,
2297  74, 0, 74, 0, 0, 0, 0, 0, 74, 0,
2298  74, 655, 0, 0, 656, 0, 872, 0, 0, 800,
2299  0, 645, 646, 647, 648, 801, 0, 0, 0, 0,
2300  0, 0, 0, 0, 110, 650, 74, 0, 0, 110,
2301  210, 0, 0, 0, 606, 821, 0, 824, 826, 0,
2302  0, 110, 275, 0, 832, 834, 651, 0, 0, 0,
2303  0, 210, 652, 653, 654, 0, 114, 912, 114, 0,
2304  0, 0, 0, 0, 0, 81, 0, 81, 0, 0,
2305  0, 0, 111, 0, 110, 0, 0, 655, 0, 0,
2306  656, 769, 0, 645, 646, 647, 648, 801, 867, 0,
2307  928, 0, 824, 826, 0, 832, 834, 650, 0, 0,
2308  0, 0, 0, 114, 210, 0, 111, 277, 264, 0,
2309  0, 0, 81, 0, 0, 0, 0, 111, 651, 111,
2310  0, 0, 0, 0, 0, 653, 654, 0, 0, 0,
2311  0, 0, 0, 277, 0, 0, 0, 0, 0, 0,
2312  276, 0, 0, 0, 0, 372, 382, 382, 0, 655,
2313  0, 0, 0, 0, 367, 210, 0, 0, 110, 913,
2314  0, 0, 0, 0, 0, 0, 0, 915, 110, 0,
2315  0, 0, 0, 0, 0, 111, 0, 0, 0, 0,
2316  111, 0, 0, 0, 0, 0, 275, 0, 210, 0,
2317  0, 0, 111, 276, 327, 328, 329, 330, 331, 332,
2318  333, 334, 0, 336, 337, 915, 210, 0, 0, 340,
2319  341, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2320  0, 0, 0, 0, 0, 111, 0, 0, 0, 0,
2321  0, 0, 0, 113, 0, 113, 275, 0, 0, 0,
2322  0, 0, 343, 344, 345, 346, 347, 348, 349, 350,
2323  351, 352, 0, 0, 0, 0, 0, 114, 0, 0,
2324  0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
2325  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2326  113, 0, 0, 0, 0, 0, 0, 0, 110, 0,
2327  110, 114, 0, 0, 0, 0, 0, 0, 0, 0,
2328  81, 0, 114, 0, 114, 0, 0, 0, 0, 111,
2329  0, 81, 110, 81, 0, 0, 0, 0, 0, 111,
2330  0, 0, 0, 0, 0, 277, 0, 0, 0, 0,
2331  0, 0, 0, 0, 0, 0, 0, 276, 0, 0,
2332  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2333  110, 0, 0, 210, 0, 275, 0, 0, 0, 0,
2334  114, 0, 0, 0, 0, 114, 0, 0, 0, 81,
2335  0, 0, 0, 0, 81, 0, 0, 114, 277, 0,
2336  0, 0, 0, 0, 0, 0, 81, 276, 0, 523,
2337  0, 0, 0, 0, 0, 0, 0, 698, 0, 0,
2338  0, 0, 0, 0, 110, 0, 0, 110, 0, 110,
2339  114, 0, 0, 0, 275, 0, 0, 0, 0, 81,
2340  0, 327, 328, 329, 330, 331, 332, 333, 334, 335,
2341  336, 337, 338, 339, 113, 0, 340, 341, 0, 111,
2342  0, 111, 0, 0, 0, 0, 0, 0, 0, 0,
2343  0, 0, 0, 0, 110, 0, 0, 0, 0, 0,
2344  0, 0, 110, 111, 0, 0, 0, 342, 113, 343,
2345  344, 345, 346, 347, 348, 349, 350, 351, 352, 113,
2346  0, 113, 0, 0, 0, 0, 0, -245, 0, 0,
2347  0, 0, 0, 0, 114, 110, 110, 0, 0, 0,
2348  0, 111, 0, 81, 114, 0, 276, 0, 0, 0,
2349  0, 0, 0, 81, 0, 0, 0, 0, 0, 380,
2350  0, 0, 277, 0, 0, 0, 0, 0, 0, 0,
2351  0, 0, 0, 0, 110, 0, 0, 113, 0, 0,
2352  0, 0, 113, 0, 0, 0, 0, 327, -619, -619,
2353  -619, -619, 332, 333, 113, 111, -619, -619, 111, 110,
2354  111, 0, 340, 341, 0, 276, 110, 110, 0, 0,
2355  110, 0, 277, 0, 0, 0, 0, 0, 0, 0,
2356  0, 0, 0, 0, 0, 0, 0, 113, 0, 0,
2357  0, 0, 0, 0, 0, 343, 344, 345, 346, 347,
2358  348, 349, 350, 351, 352, 111, 0, 0, 0, 0,
2359  110, 380, 0, 111, 0, 0, 0, 0, 0, 0,
2360  0, 0, 0, 0, 114, 0, 114, 0, 0, 0,
2361  0, 0, 0, 81, 977, 81, 0, 0, 110, 0,
2362  0, 0, 0, 0, 0, 0, 111, 111, 114, 110,
2363  0, 0, 0, 0, 0, 0, 0, 81, 0, 0,
2364  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2365  381, 113, 0, 0, 0, 0, 0, 0, 0, 0,
2366  0, 113, 0, 0, 0, 111, 114, 0, 0, 0,
2367  0, 277, 0, 0, 0, 81, 0, 0, 110, 0,
2368  110, 0, 0, 0, 0, 0, 110, 0, 110, 0,
2369  111, 0, 0, 0, 0, 0, 0, 111, 111, 0,
2370  0, 111, 0, 0, 0, 0, 0, 0, 0, 0,
2371  799, 0, 0, 0, 0, 0, 0, 0, 0, 751,
2372  114, 0, 0, 114, 0, 114, 0, 0, 0, 81,
2373  277, 0, 81, 0, 81, 0, 0, 0, 0, 0,
2374  523, 111, 381, 327, 328, 329, 330, 331, 332, 333,
2375  334, 335, 336, 337, 338, 339, 0, 0, 340, 341,
2376  0, 0, 0, 0, 0, 978, 0, 0, 0, 111,
2377  114, 0, 0, 0, 0, 0, 0, 0, 114, 81,
2378  111, 113, 0, 113, 0, 0, 0, 81, 0, 342,
2379  0, 343, 344, 345, 346, 347, 348, 349, 350, 351,
2380  352, 0, 0, 0, 0, 113, 0, 0, 0, 0,
2381  0, 114, 114, 0, 0, 0, 0, 0, 0, 0,
2382  81, 81, 0, 0, 0, 0, 0, 0, 0, 111,
2383  0, 111, 0, 0, 0, 382, 0, 111, 698, 111,
2384  0, 0, 0, 113, 0, 0, 0, 0, 0, 0,
2385  114, 0, 0, 0, 0, 0, 0, 0, 0, 81,
2386  0, 0, 327, 328, 329, 330, 331, 332, 333, 334,
2387  335, 336, 337, 338, 339, 114, 0, 340, 341, 0,
2388  0, 0, 114, 114, 81, 0, 114, 0, 0, 0,
2389  0, 81, 81, 0, 0, 81, 0, 113, 0, 0,
2390  113, 0, 113, 0, 0, 0, 0, 0, 342, 0,
2391  343, 344, 345, 346, 347, 348, 349, 350, 351, 352,
2392  0, 0, 0, 0, 0, 0, 114, 382, 327, 328,
2393  329, 330, 331, 332, 333, 81, 0, 336, 337, 0,
2394  0, 0, 0, 340, 341, 0, 0, 113, 0, 0,
2395  979, 0, 0, 0, 114, 113, 0, 0, 0, 975,
2396  0, 0, 0, 81, 0, 114, 0, 0, 0, 0,
2397  0, 0, 0, 0, 81, 0, 343, 344, 345, 346,
2398  347, 348, 349, 350, 351, 352, 0, 0, 113, 113,
2399  327, 328, 329, 330, 331, 332, 333, 334, 335, 336,
2400  337, 338, 339, 0, 0, 340, 341, 0, 0, 0,
2401  0, 0, 0, 0, 114, 0, 114, 0, 0, 0,
2402  0, 0, 114, 81, 114, 81, 0, 113, 0, 0,
2403  0, 81, 0, 81, 0, 0, 342, 0, 343, 344,
2404  345, 346, 347, 348, 349, 350, 351, 352, 0, 0,
2405  0, 0, 113, 0, 0, 0, 0, 0, 0, 113,
2406  113, -618, 4, 113, 5, 6, 7, 8, 9, 0,
2407  0, 0, 10, 11, 0, 0, 0, 12, 0, 13,
2408  14, 15, 16, 17, 18, 19, 0, 0, 0, 0,
2409  0, 20, 21, 22, 23, 24, 25, 26, 0, 0,
2410  27, 0, 0, 113, 0, 0, 28, 29, 30, 31,
2411  32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
2412  41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
2413  0, 113, 0, 0, 0, 0, 0, 0, 0, 0,
2414  0, 0, 113, 0, 0, 0, 0, 48, 0, 0,
2415  49, 50, 0, 51, 52, 0, 53, 0, 0, 54,
2416  55, 56, 57, 58, 59, 60, 61, 62, -600, 0,
2417  0, 0, 0, 0, 0, 0, -600, -600, -600, 0,
2418  0, -600, -600, -600, 0, -600, 0, 63, 64, 65,
2419  0, 113, 0, 113, -600, -600, -600, -600, 0, 113,
2420  -618, 113, -618, 0, 0, -600, -600, 0, -600, -600,
2421  -600, -600, -600, 0, 0, 327, 328, 329, 330, 331,
2422  332, 333, 334, 335, 336, 337, -619, -619, 0, 0,
2423  340, 341, 0, 0, 0, 0, -600, -600, -600, -600,
2424  -600, -600, -600, -600, -600, -600, -600, -600, -600, 0,
2425  0, -600, -600, -600, 0, 755, -600, 0, 0, 0,
2426  0, 0, -600, 343, 344, 345, 346, 347, 348, 349,
2427  350, 351, 352, 0, 0, 0, -600, 0, 0, -600,
2428  0, -106, -600, -600, -600, -600, -600, -600, -600, -600,
2429  -600, -600, -600, -600, 0, 0, 0, 0, -600, -600,
2430  -600, -600, -600, -503, 0, -600, -600, -600, 0, -600,
2431  0, -503, -503, -503, 0, 0, -503, -503, -503, 0,
2432  -503, 0, 0, 0, 0, 0, 0, 0, -503, 0,
2433  -503, -503, -503, 0, 0, 0, 0, 0, 0, 0,
2434  -503, -503, 0, -503, -503, -503, -503, -503, 0, 0,
2435  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2436  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2437  0, -503, -503, -503, -503, -503, -503, -503, -503, -503,
2438  -503, -503, -503, -503, 0, 0, -503, -503, -503, 0,
2439  -503, -503, 0, 0, 0, 0, 0, -503, 0, 0,
2440  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2441  0, -503, 0, 0, -503, 0, -503, -503, -503, -503,
2442  -503, -503, -503, -503, -503, -503, -503, -503, -503, 0,
2443  0, 0, 0, 0, -503, -503, -503, -503, -506, 0,
2444  -503, -503, -503, 0, -503, 0, -506, -506, -506, 0,
2445  0, -506, -506, -506, 0, -506, 0, 0, 0, 0,
2446  0, 0, 0, -506, 0, -506, -506, -506, 0, 0,
2447  0, 0, 0, 0, 0, -506, -506, 0, -506, -506,
2448  -506, -506, -506, 0, 0, 0, 0, 0, 0, 0,
2449  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2450  0, 0, 0, 0, 0, 0, -506, -506, -506, -506,
2451  -506, -506, -506, -506, -506, -506, -506, -506, -506, 0,
2452  0, -506, -506, -506, 0, -506, -506, 0, 0, 0,
2453  0, 0, -506, 0, 0, 0, 0, 0, 0, 0,
2454  0, 0, 0, 0, 0, 0, -506, 0, 0, -506,
2455  0, -506, -506, -506, -506, -506, -506, -506, -506, -506,
2456  -506, -506, -506, -506, 0, 0, 0, 0, 0, -506,
2457  -506, -506, -506, -601, 0, -506, -506, -506, 0, -506,
2458  0, -601, -601, -601, 0, 0, -601, -601, -601, 0,
2459  -601, 0, 0, 0, 0, 0, 0, 0, 0, -601,
2460  -601, -601, -601, 0, 0, 0, 0, 0, 0, 0,
2461  -601, -601, 0, -601, -601, -601, -601, -601, 0, 0,
2462  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2463  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2464  0, -601, -601, -601, -601, -601, -601, -601, -601, -601,
2465  -601, -601, -601, -601, 0, 0, -601, -601, -601, 0,
2466  0, -601, 0, 0, 0, 0, 0, -601, 0, 0,
2467  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2468  0, -601, 0, 0, -601, 0, 0, -601, -601, -601,
2469  -601, -601, -601, -601, -601, -601, -601, -601, -601, 0,
2470  0, 0, 0, -601, -601, -601, -601, -601, -602, 0,
2471  -601, -601, -601, 0, -601, 0, -602, -602, -602, 0,
2472  0, -602, -602, -602, 0, -602, 0, 0, 0, 0,
2473  0, 0, 0, 0, -602, -602, -602, -602, 0, 0,
2474  0, 0, 0, 0, 0, -602, -602, 0, -602, -602,
2475  -602, -602, -602, 0, 0, 0, 0, 0, 0, 0,
2476  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2477  0, 0, 0, 0, 0, 0, -602, -602, -602, -602,
2478  -602, -602, -602, -602, -602, -602, -602, -602, -602, 0,
2479  0, -602, -602, -602, 0, 0, -602, 0, 0, 0,
2480  0, 0, -602, 0, 0, 0, 0, 0, 0, 0,
2481  0, 0, 0, 0, 0, 0, -602, 0, 0, -602,
2482  0, 0, -602, -602, -602, -602, -602, -602, -602, -602,
2483  -602, -602, -602, -602, 0, 0, 0, 0, -602, -602,
2484  -602, -602, -602, -293, 0, -602, -602, -602, 0, -602,
2485  0, -293, -293, -293, 0, 0, -293, -293, -293, 0,
2486  -293, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2487  -293, -293, -293, 0, 0, 0, 0, 0, 0, 0,
2488  -293, -293, 0, -293, -293, -293, -293, -293, 0, 0,
2489  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2490  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2491  0, -293, -293, -293, -293, -293, -293, -293, -293, -293,
2492  -293, -293, -293, -293, 0, 0, -293, -293, -293, 0,
2493  756, -293, 0, 0, 0, 0, 0, -293, 0, 0,
2494  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2495  0, -293, 0, 0, -293, 0, -108, -293, -293, -293,
2496  -293, -293, -293, -293, -293, -293, -293, -293, -293, 0,
2497  0, 0, 0, 0, -293, -293, -293, -293, -430, 0,
2498  -293, -293, -293, 0, -293, 0, -430, -430, -430, 0,
2499  0, -430, -430, -430, 0, -430, 0, 0, 0, 0,
2500  0, 0, 0, 0, -430, -430, -430, 0, 0, 0,
2501  0, 0, 0, 0, 0, -430, -430, 0, -430, -430,
2502  -430, -430, -430, 0, 0, 0, 0, 0, 0, 0,
2503  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2504  0, 0, 0, 0, 0, 0, -430, -430, -430, -430,
2505  -430, -430, -430, -430, -430, -430, -430, -430, -430, 0,
2506  0, -430, -430, -430, 0, 0, -430, 0, 0, 0,
2507  0, 0, -430, 0, 0, 0, 0, 0, 0, 0,
2508  0, 0, 0, 0, 0, 0, -430, 0, 0, 0,
2509  0, 0, -430, 0, -430, -430, -430, -430, -430, -430,
2510  -430, -430, -430, -430, 0, 0, 0, 0, -430, -430,
2511  -430, -430, -430, -285, 227, -430, -430, -430, 0, -430,
2512  0, -285, -285, -285, 0, 0, -285, -285, -285, 0,
2513  -285, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2514  -285, -285, -285, 0, 0, 0, 0, 0, 0, 0,
2515  -285, -285, 0, -285, -285, -285, -285, -285, 0, 0,
2516  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2517  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2518  0, -285, -285, -285, -285, -285, -285, -285, -285, -285,
2519  -285, -285, -285, -285, 0, 0, -285, -285, -285, 0,
2520  0, -285, 0, 0, 0, 0, 0, -285, 0, 0,
2521  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2522  0, -285, 0, 0, -285, 0, 0, -285, -285, -285,
2523  -285, -285, -285, -285, -285, -285, -285, -285, -285, 0,
2524  0, 0, 0, 0, -285, -285, -285, -285, -420, 0,
2525  -285, -285, -285, 0, -285, 0, -420, -420, -420, 0,
2526  0, -420, -420, -420, 0, -420, 0, 0, 0, 0,
2527  0, 0, 0, 0, -420, -420, -420, 0, 0, 0,
2528  0, 0, 0, 0, 0, -420, -420, 0, -420, -420,
2529  -420, -420, -420, 0, 0, 0, 0, 0, 0, 0,
2530  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2531  0, 0, 0, 0, 0, 0, -420, -420, -420, -420,
2532  -420, -420, -420, -420, -420, -420, -420, -420, -420, 0,
2533  0, -420, -420, -420, 0, 0, -420, 0, 0, 0,
2534  0, 0, -420, 0, 0, 0, 0, 0, 0, 0,
2535  0, 0, 0, 0, 0, 0, -420, 0, 0, 0,
2536  0, 0, -420, 0, -420, -420, -420, -420, -420, -420,
2537  -420, -420, -420, -420, 0, 0, 0, 0, -420, -420,
2538  -420, -420, -420, -300, -420, -420, -420, -420, 0, -420,
2539  0, -300, -300, -300, 0, 0, -300, -300, -300, 0,
2540  -300, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2541  -300, -300, 0, 0, 0, 0, 0, 0, 0, 0,
2542  -300, -300, 0, -300, -300, -300, -300, -300, 0, 0,
2543  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2544  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2545  0, -300, -300, -300, -300, -300, -300, -300, -300, -300,
2546  -300, -300, -300, -300, 0, 0, -300, -300, -300, 0,
2547  0, -300, 0, 0, 0, 0, 0, -300, 0, 0,
2548  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2549  0, -300, 0, 0, 0, 0, 0, -300, 0, -300,
2550  -300, -300, -300, -300, -300, -300, -300, -300, -300, 0,
2551  0, 0, 0, 0, -300, -300, -300, -300, -600, 224,
2552  -300, -300, -300, 0, -300, 0, -600, -600, -600, 0,
2553  0, 0, -600, -600, 0, -600, 0, 0, 0, 0,
2554  0, 0, 0, 0, -600, 0, 0, 0, 0, 0,
2555  0, 0, 0, 0, 0, -600, -600, 0, -600, -600,
2556  -600, -600, -600, 0, 0, 0, 0, 0, 0, 0,
2557  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2558  0, 0, 0, 0, 0, 0, -600, -600, -600, -600,
2559  -600, -600, -600, -600, -600, -600, -600, -600, -600, 0,
2560  0, -600, -600, -600, 0, 700, 0, 0, 0, 0,
2561  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2562  0, 0, 0, 0, 0, 0, -600, 0, 0, 0,
2563  0, -106, -600, 0, -600, -600, -600, -600, -600, -600,
2564  -600, -600, -600, -600, 0, 0, 0, 0, -600, -600,
2565  -600, -600, -97, -293, 0, -600, 0, -600, 0, -600,
2566  0, -293, -293, -293, 0, 0, 0, -293, -293, 0,
2567  -293, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2568  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2569  -293, -293, 0, -293, -293, -293, -293, -293, 0, 0,
2570  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2571  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2572  0, -293, -293, -293, -293, -293, -293, -293, -293, -293,
2573  -293, -293, -293, -293, 0, 0, -293, -293, -293, 0,
2574  701, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2575  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2576  0, -293, 0, 0, 0, 0, -108, -293, 0, -293,
2577  -293, -293, -293, -293, -293, -293, -293, -293, -293, 0,
2578  0, 0, 0, 0, -293, -293, -293, -99, 0, 0,
2579  -293, 0, -293, 248, -293, 5, 6, 7, 8, 9,
2580  -618, -618, -618, 10, 11, 0, 0, -618, 12, 0,
2581  13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
2582  0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
2583  0, 27, 0, 0, 0, 0, 0, 28, 29, 249,
2584  31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2585  0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
2586  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2587  0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
2588  0, 49, 50, 0, 51, 52, 0, 53, 0, 0,
2589  54, 55, 56, 57, 58, 59, 60, 61, 62, 0,
2590  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2591  0, 0, 0, 0, 0, 0, 0, 0, 63, 64,
2592  65, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2593  0, -618, 248, -618, 5, 6, 7, 8, 9, 0,
2594  0, -618, 10, 11, 0, -618, -618, 12, 0, 13,
2595  14, 15, 16, 17, 18, 19, 0, 0, 0, 0,
2596  0, 20, 21, 22, 23, 24, 25, 26, 0, 0,
2597  27, 0, 0, 0, 0, 0, 28, 29, 249, 31,
2598  32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
2599  41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
2600  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2601  0, 0, 0, 0, 0, 0, 0, 48, 0, 0,
2602  49, 50, 0, 51, 52, 0, 53, 0, 0, 54,
2603  55, 56, 57, 58, 59, 60, 61, 62, 0, 0,
2604  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2605  0, 0, 0, 0, 0, 0, 0, 63, 64, 65,
2606  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2607  -618, 248, -618, 5, 6, 7, 8, 9, 0, 0,
2608  -618, 10, 11, 0, 0, -618, 12, -618, 13, 14,
2609  15, 16, 17, 18, 19, 0, 0, 0, 0, 0,
2610  20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
2611  0, 0, 0, 0, 0, 28, 29, 249, 31, 32,
2612  33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
2613  42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
2614  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2615  0, 0, 0, 0, 0, 0, 48, 0, 0, 49,
2616  50, 0, 51, 52, 0, 53, 0, 0, 54, 55,
2617  56, 57, 58, 59, 60, 61, 62, 0, 0, 0,
2618  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2619  0, 0, 0, 0, 0, 0, 63, 64, 65, 0,
2620  0, 0, 0, 0, 0, 0, 0, 0, 0, -618,
2621  248, -618, 5, 6, 7, 8, 9, 0, 0, -618,
2622  10, 11, 0, 0, -618, 12, 0, 13, 14, 15,
2623  16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
2624  21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
2625  0, 0, 0, 0, 28, 29, 249, 31, 32, 33,
2626  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2627  0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
2628  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2629  0, 0, 0, 0, 0, 48, 0, 0, 49, 50,
2630  0, 51, 52, 0, 53, 0, 0, 54, 55, 56,
2631  57, 58, 59, 60, 61, 62, 0, 0, 0, 0,
2632  0, 0, 0, 248, 0, 5, 6, 7, 8, 9,
2633  0, -618, -618, 10, 11, 63, 64, 65, 12, 0,
2634  13, 14, 15, 16, 17, 18, 19, 0, -618, 0,
2635  -618, 0, 20, 21, 22, 23, 24, 25, 26, 0,
2636  0, 27, 0, 0, 0, 0, 0, 28, 29, 249,
2637  31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2638  0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
2639  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2640  0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
2641  0, 49, 50, 0, 51, 52, 0, 53, 0, 0,
2642  54, 55, 56, 57, 58, 59, 60, 61, 62, 0,
2643  0, 0, 0, 0, 0, 0, 248, 0, 5, 6,
2644  7, 8, 9, 0, 0, 0, 10, 11, 63, 64,
2645  65, 12, 0, 13, 14, 15, 16, 17, 18, 19,
2646  0, -618, 0, -618, 0, 20, 21, 22, 23, 24,
2647  25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
2648  28, 29, 249, 31, 32, 33, 34, 35, 36, 37,
2649  38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
2650  0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
2651  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2652  0, 48, 0, 0, 250, 50, 0, 51, 52, 0,
2653  53, 0, 0, 54, 55, 56, 57, 58, 59, 60,
2654  61, 62, 0, 0, 0, 0, 0, 0, 0, 0,
2655  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2656  0, 63, 64, 65, 0, 0, 0, 0, 0, 0,
2657  0, 0, -618, 0, -618, 248, -618, 5, 6, 7,
2658  8, 9, 0, 0, 0, 10, 11, 0, 0, 0,
2659  12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
2660  0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
2661  26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
2662  29, 249, 31, 32, 33, 34, 35, 36, 37, 38,
2663  39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
2664  46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
2665  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2666  48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
2667  0, 0, 54, 55, 56, 57, 58, 59, 60, 61,
2668  62, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2669  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2670  63, 64, 65, 0, 0, 0, 0, 0, 0, 0,
2671  0, -618, 0, -618, 248, -618, 5, 6, 7, 8,
2672  9, 0, 0, 0, 10, 11, 0, 0, 0, 12,
2673  0, 13, 14, 15, 16, 17, 18, 19, 0, 0,
2674  0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
2675  0, 0, 27, 0, 0, 0, 0, 0, 28, 29,
2676  249, 31, 32, 33, 34, 35, 36, 37, 38, 39,
2677  40, 0, 41, 42, 0, 43, 44, 45, 0, 46,
2678  47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2679  0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
2680  0, 0, 49, 50, 0, 51, 52, 0, 53, 0,
2681  0, 54, 55, 56, 57, 58, 59, 60, 61, 62,
2682  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2683  0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
2684  64, 65, 0, 0, -618, 4, 0, 5, 6, 7,
2685  8, 9, -618, 0, -618, 10, 11, 0, 0, 0,
2686  12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
2687  0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
2688  26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
2689  29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
2690  39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
2691  46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
2692  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2693  48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
2694  0, 0, 54, 55, 56, 57, 58, 59, 60, 61,
2695  62, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2696  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2697  63, 64, 65, 0, 0, -618, 0, 0, 0, 0,
2698  0, 0, 0, -618, 248, -618, 5, 6, 7, 8,
2699  9, 0, 0, -618, 10, 11, 0, 0, 0, 12,
2700  0, 13, 14, 15, 16, 17, 18, 19, 0, 0,
2701  0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
2702  0, 0, 27, 0, 0, 0, 0, 0, 28, 29,
2703  249, 31, 32, 33, 34, 35, 36, 37, 38, 39,
2704  40, 0, 41, 42, 0, 43, 44, 45, 0, 46,
2705  47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2706  0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
2707  0, 0, 49, 50, 0, 51, 52, 0, 53, 0,
2708  0, 54, 55, 56, 57, 58, 59, 60, 61, 62,
2709  0, 0, 0, 0, 0, 0, 0, 248, 0, 5,
2710  6, 7, 8, 9, 0, 0, 0, 10, 11, 63,
2711  64, 65, 12, 0, 13, 14, 15, 16, 17, 18,
2712  19, 0, -618, 0, -618, 0, 20, 21, 22, 23,
2713  24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
2714  0, 28, 29, 249, 31, 32, 33, 34, 35, 36,
2715  37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
2716  45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
2717  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2718  0, 0, 48, 0, 0, 49, 50, 0, 51, 52,
2719  0, 53, 0, 0, 54, 55, 56, 57, 58, 59,
2720  60, 61, 62, 0, -618, 0, 0, 0, 0, 0,
2721  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2722  10, 11, 63, 64, 65, 12, 0, 13, 14, 15,
2723  16, 17, 18, 19, 0, -618, 0, -618, 0, 20,
2724  21, 22, 23, 24, 25, 26, 0, 0, 200, 0,
2725  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
2726  34, 35, 36, 37, 38, 39, 40, 201, 41, 42,
2727  0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
2728  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2729  0, 0, 0, 0, 0, 202, 0, 0, 203, 50,
2730  0, 51, 52, 0, 204, 205, 206, 54, 55, 56,
2731  57, 58, 59, 60, 61, 62, 0, 0, 0, 0,
2732  0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
2733  0, 0, 0, 10, 11, 63, 207, 65, 12, 0,
2734  13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
2735  231, 0, 20, 21, 22, 23, 24, 25, 26, 0,
2736  0, 27, 0, 0, 0, 0, 0, 0, 29, 0,
2737  0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2738  0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
2739  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2740  0, 0, 0, 0, 0, 0, 0, 0, 202, 0,
2741  0, 203, 50, 0, 51, 52, 0, 0, 0, 0,
2742  54, 55, 56, 57, 58, 59, 60, 61, 62, 0,
2743  0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
2744  7, 0, 9, 0, 0, 0, 10, 11, 63, 64,
2745  65, 12, 0, 13, 14, 15, 16, 17, 18, 19,
2746  0, 302, 0, 303, 0, 20, 21, 22, 23, 24,
2747  25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
2748  0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
2749  38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
2750  0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
2751  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2752  0, 202, 0, 0, 203, 50, 0, 51, 52, 0,
2753  0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
2754  61, 62, 0, 0, 0, 0, 0, 0, 0, 0,
2755  0, 5, 6, 7, 8, 9, 0, 0, 0, 10,
2756  11, 63, 64, 65, 12, 0, 13, 14, 15, 16,
2757  17, 18, 19, 0, 0, 0, 231, 0, 20, 21,
2758  22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
2759  0, 0, 0, 28, 29, 30, 31, 32, 33, 34,
2760  35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
2761  43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
2762  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2763  0, 0, 0, 0, 48, 0, 0, 49, 50, 0,
2764  51, 52, 0, 53, 0, 0, 54, 55, 56, 57,
2765  58, 59, 60, 61, 62, 0, 0, 0, 0, 0,
2766  0, 0, 0, 0, 5, 6, 7, 8, 9, 0,
2767  0, 0, 10, 11, 63, 64, 65, 12, 0, 13,
2768  14, 15, 16, 17, 18, 19, 0, 498, 0, 0,
2769  0, 20, 21, 22, 23, 24, 25, 26, 0, 0,
2770  27, 0, 0, 0, 0, 0, 28, 29, 249, 31,
2771  32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
2772  41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
2773  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2774  0, 0, 0, 0, 0, 0, 0, 48, 0, 0,
2775  49, 50, 0, 51, 52, 0, 53, 0, 0, 54,
2776  55, 56, 57, 58, 59, 60, 61, 62, 0, 0,
2777  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2778  0, 0, 0, 0, 0, 0, 0, 63, 64, 65,
2779  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2780  498, 118, 119, 120, 121, 122, 123, 124, 125, 126,
2781  127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
2782  137, 138, 139, 140, 141, 0, 0, 0, 142, 143,
2783  144, 384, 385, 386, 387, 149, 150, 151, 0, 0,
2784  0, 0, 0, 152, 153, 154, 155, 388, 389, 390,
2785  391, 160, 37, 38, 392, 40, 0, 0, 0, 0,
2786  0, 0, 0, 0, 162, 163, 164, 165, 166, 167,
2787  168, 169, 170, 0, 0, 171, 172, 0, 0, 173,
2788  174, 175, 176, 0, 0, 0, 0, 0, 0, 0,
2789  0, 0, 0, 177, 178, 0, 0, 0, 0, 0,
2790  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2791  0, 0, 0, 0, 179, 180, 181, 182, 183, 184,
2792  185, 186, 187, 188, 0, 189, 190, 0, 0, 0,
2793  0, 0, 0, 191, 393, 118, 119, 120, 121, 122,
2794  123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
2795  133, 134, 135, 136, 137, 138, 139, 140, 141, 0,
2796  0, 0, 142, 143, 144, 145, 146, 147, 148, 149,
2797  150, 151, 0, 0, 0, 0, 0, 152, 153, 154,
2798  155, 156, 157, 158, 159, 160, 280, 281, 161, 282,
2799  0, 0, 0, 0, 0, 0, 0, 0, 162, 163,
2800  164, 165, 166, 167, 168, 169, 170, 0, 0, 171,
2801  172, 0, 0, 173, 174, 175, 176, 0, 0, 0,
2802  0, 0, 0, 0, 0, 0, 0, 177, 178, 0,
2803  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2804  0, 0, 0, 0, 0, 0, 0, 0, 179, 180,
2805  181, 182, 183, 184, 185, 186, 187, 188, 0, 189,
2806  190, 0, 0, 0, 0, 0, 0, 191, 118, 119,
2807  120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
2808  130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
2809  140, 141, 0, 0, 0, 142, 143, 144, 145, 146,
2810  147, 148, 149, 150, 151, 0, 0, 0, 0, 0,
2811  152, 153, 154, 155, 156, 157, 158, 159, 160, 233,
2812  0, 161, 0, 0, 0, 0, 0, 0, 0, 0,
2813  0, 162, 163, 164, 165, 166, 167, 168, 169, 170,
2814  0, 0, 171, 172, 0, 0, 173, 174, 175, 176,
2815  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2816  177, 178, 0, 0, 55, 0, 0, 0, 0, 0,
2817  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2818  0, 179, 180, 181, 182, 183, 184, 185, 186, 187,
2819  188, 0, 189, 190, 0, 0, 0, 0, 0, 0,
2820  191, 118, 119, 120, 121, 122, 123, 124, 125, 126,
2821  127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
2822  137, 138, 139, 140, 141, 0, 0, 0, 142, 143,
2823  144, 145, 146, 147, 148, 149, 150, 151, 0, 0,
2824  0, 0, 0, 152, 153, 154, 155, 156, 157, 158,
2825  159, 160, 0, 0, 161, 0, 0, 0, 0, 0,
2826  0, 0, 0, 0, 162, 163, 164, 165, 166, 167,
2827  168, 169, 170, 0, 0, 171, 172, 0, 0, 173,
2828  174, 175, 176, 0, 0, 0, 0, 0, 0, 0,
2829  0, 0, 0, 177, 178, 0, 0, 55, 0, 0,
2830  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2831  0, 0, 0, 0, 179, 180, 181, 182, 183, 184,
2832  185, 186, 187, 188, 0, 189, 190, 0, 0, 0,
2833  0, 0, 0, 191, 118, 119, 120, 121, 122, 123,
2834  124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
2835  134, 135, 136, 137, 138, 139, 140, 141, 0, 0,
2836  0, 142, 143, 144, 145, 146, 147, 148, 149, 150,
2837  151, 0, 0, 0, 0, 0, 152, 153, 154, 155,
2838  156, 157, 158, 159, 160, 0, 0, 161, 0, 0,
2839  0, 0, 0, 0, 0, 0, 0, 162, 163, 164,
2840  165, 166, 167, 168, 169, 170, 0, 0, 171, 172,
2841  0, 0, 173, 174, 175, 176, 0, 0, 0, 0,
2842  0, 0, 0, 0, 0, 0, 177, 178, 0, 0,
2843  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2844  0, 0, 0, 0, 0, 0, 0, 179, 180, 181,
2845  182, 183, 184, 185, 186, 187, 188, 0, 189, 190,
2846  5, 6, 7, 0, 9, 0, 191, 0, 10, 11,
2847  0, 0, 0, 12, 0, 13, 14, 15, 238, 239,
2848  18, 19, 0, 0, 0, 0, 0, 240, 241, 242,
2849  23, 24, 25, 26, 0, 0, 200, 0, 0, 0,
2850  0, 0, 0, 268, 0, 0, 32, 33, 34, 35,
2851  36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
2852  44, 45, 0, 0, 0, 0, 0, 0, 0, 0,
2853  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2854  0, 0, 0, 269, 0, 0, 203, 50, 0, 51,
2855  52, 0, 0, 0, 0, 54, 55, 56, 57, 58,
2856  59, 60, 61, 62, 0, 0, 0, 0, 0, 5,
2857  6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
2858  0, 0, 12, 270, 13, 14, 15, 238, 239, 18,
2859  19, 271, 0, 0, 0, 0, 240, 241, 242, 23,
2860  24, 25, 26, 0, 0, 200, 0, 0, 0, 0,
2861  0, 0, 268, 0, 0, 32, 33, 34, 35, 36,
2862  37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
2863  45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2864  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2865  0, 0, 269, 0, 0, 203, 50, 0, 51, 52,
2866  0, 0, 0, 0, 54, 55, 56, 57, 58, 59,
2867  60, 61, 62, 0, 0, 0, 0, 0, 5, 6,
2868  7, 8, 9, 0, 0, 0, 10, 11, 0, 0,
2869  0, 12, 270, 13, 14, 15, 16, 17, 18, 19,
2870  518, 0, 0, 0, 0, 20, 21, 22, 23, 24,
2871  25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
2872  28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
2873  38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
2874  0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
2875  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2876  0, 48, 0, 0, 49, 50, 0, 51, 52, 0,
2877  53, 0, 0, 54, 55, 56, 57, 58, 59, 60,
2878  61, 62, 0, 0, 0, 0, 0, 0, 0, 0,
2879  0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
2880  11, 63, 64, 65, 12, 0, 13, 14, 15, 16,
2881  17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
2882  22, 23, 24, 25, 26, 0, 0, 200, 0, 0,
2883  0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
2884  35, 36, 37, 38, 39, 40, 201, 41, 42, 0,
2885  43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
2886  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2887  0, 0, 0, 0, 202, 0, 0, 203, 50, 0,
2888  51, 52, 0, 204, 205, 206, 54, 55, 56, 57,
2889  58, 59, 60, 61, 62, 0, 0, 0, 0, 0,
2890  0, 0, 0, 0, 5, 6, 7, 8, 9, 0,
2891  0, 0, 10, 11, 63, 207, 65, 12, 0, 13,
2892  14, 15, 16, 17, 18, 19, 0, 0, 0, 0,
2893  0, 20, 21, 22, 23, 24, 25, 26, 0, 0,
2894  27, 0, 0, 0, 0, 0, 28, 29, 0, 31,
2895  32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
2896  41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
2897  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2898  0, 0, 0, 0, 0, 0, 0, 48, 0, 0,
2899  49, 50, 0, 51, 52, 0, 53, 0, 0, 54,
2900  55, 56, 57, 58, 59, 60, 61, 62, 0, 0,
2901  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
2902  0, 9, 0, 0, 0, 10, 11, 63, 64, 65,
2903  12, 0, 13, 14, 15, 238, 239, 18, 19, 0,
2904  0, 0, 0, 0, 240, 241, 242, 23, 24, 25,
2905  26, 0, 0, 200, 0, 0, 0, 0, 0, 0,
2906  29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
2907  39, 40, 201, 41, 42, 0, 43, 44, 45, 0,
2908  46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
2909  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2910  202, 0, 0, 203, 50, 0, 51, 52, 0, 608,
2911  205, 206, 54, 55, 56, 57, 58, 59, 60, 61,
2912  62, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2913  5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
2914  63, 207, 65, 12, 0, 13, 14, 15, 238, 239,
2915  18, 19, 0, 0, 0, 0, 0, 240, 241, 242,
2916  23, 24, 25, 26, 0, 0, 200, 0, 0, 0,
2917  0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
2918  36, 37, 38, 39, 40, 201, 41, 42, 0, 43,
2919  44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
2920  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2921  0, 0, 0, 202, 0, 0, 203, 50, 0, 51,
2922  52, 0, 204, 205, 0, 54, 55, 56, 57, 58,
2923  59, 60, 61, 62, 0, 0, 0, 0, 0, 0,
2924  0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
2925  0, 10, 11, 63, 207, 65, 12, 0, 13, 14,
2926  15, 238, 239, 18, 19, 0, 0, 0, 0, 0,
2927  240, 241, 242, 23, 24, 25, 26, 0, 0, 200,
2928  0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
2929  33, 34, 35, 36, 37, 38, 39, 40, 201, 41,
2930  42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
2931  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2932  0, 0, 0, 0, 0, 0, 202, 0, 0, 203,
2933  50, 0, 51, 52, 0, 0, 205, 206, 54, 55,
2934  56, 57, 58, 59, 60, 61, 62, 0, 0, 0,
2935  0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
2936  9, 0, 0, 0, 10, 11, 63, 207, 65, 12,
2937  0, 13, 14, 15, 238, 239, 18, 19, 0, 0,
2938  0, 0, 0, 240, 241, 242, 23, 24, 25, 26,
2939  0, 0, 200, 0, 0, 0, 0, 0, 0, 29,
2940  0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
2941  40, 201, 41, 42, 0, 43, 44, 45, 0, 46,
2942  47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2943  0, 0, 0, 0, 0, 0, 0, 0, 0, 202,
2944  0, 0, 203, 50, 0, 51, 52, 0, 608, 205,
2945  0, 54, 55, 56, 57, 58, 59, 60, 61, 62,
2946  0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
2947  6, 7, 0, 9, 0, 0, 0, 10, 11, 63,
2948  207, 65, 12, 0, 13, 14, 15, 238, 239, 18,
2949  19, 0, 0, 0, 0, 0, 240, 241, 242, 23,
2950  24, 25, 26, 0, 0, 200, 0, 0, 0, 0,
2951  0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
2952  37, 38, 39, 40, 201, 41, 42, 0, 43, 44,
2953  45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
2954  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2955  0, 0, 202, 0, 0, 203, 50, 0, 51, 52,
2956  0, 0, 205, 0, 54, 55, 56, 57, 58, 59,
2957  60, 61, 62, 0, 0, 0, 0, 0, 0, 0,
2958  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2959  10, 11, 63, 207, 65, 12, 0, 13, 14, 15,
2960  16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
2961  21, 22, 23, 24, 25, 26, 0, 0, 200, 0,
2962  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
2963  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2964  0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
2965  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2966  0, 0, 0, 0, 0, 202, 0, 0, 203, 50,
2967  0, 51, 52, 0, 512, 0, 0, 54, 55, 56,
2968  57, 58, 59, 60, 61, 62, 0, 0, 0, 0,
2969  0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
2970  0, 0, 0, 10, 11, 63, 207, 65, 12, 0,
2971  13, 14, 15, 238, 239, 18, 19, 0, 0, 0,
2972  0, 0, 240, 241, 242, 23, 24, 25, 26, 0,
2973  0, 200, 0, 0, 0, 0, 0, 0, 29, 0,
2974  0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2975  0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
2976  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2977  0, 0, 0, 0, 0, 0, 0, 0, 202, 0,
2978  0, 203, 50, 0, 51, 52, 0, 204, 0, 0,
2979  54, 55, 56, 57, 58, 59, 60, 61, 62, 0,
2980  0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
2981  7, 0, 9, 0, 0, 0, 10, 11, 63, 207,
2982  65, 12, 0, 13, 14, 15, 238, 239, 18, 19,
2983  0, 0, 0, 0, 0, 240, 241, 242, 23, 24,
2984  25, 26, 0, 0, 200, 0, 0, 0, 0, 0,
2985  0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
2986  38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
2987  0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
2988  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2989  0, 202, 0, 0, 203, 50, 0, 51, 52, 0,
2990  818, 0, 0, 54, 55, 56, 57, 58, 59, 60,
2991  61, 62, 0, 0, 0, 0, 0, 0, 0, 0,
2992  0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
2993  11, 63, 207, 65, 12, 0, 13, 14, 15, 238,
2994  239, 18, 19, 0, 0, 0, 0, 0, 240, 241,
2995  242, 23, 24, 25, 26, 0, 0, 200, 0, 0,
2996  0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
2997  35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
2998  43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
2999  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3000  0, 0, 0, 0, 202, 0, 0, 203, 50, 0,
3001  51, 52, 0, 512, 0, 0, 54, 55, 56, 57,
3002  58, 59, 60, 61, 62, 0, 0, 0, 0, 0,
3003  0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
3004  0, 0, 10, 11, 63, 207, 65, 12, 0, 13,
3005  14, 15, 238, 239, 18, 19, 0, 0, 0, 0,
3006  0, 240, 241, 242, 23, 24, 25, 26, 0, 0,
3007  200, 0, 0, 0, 0, 0, 0, 29, 0, 0,
3008  32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
3009  41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
3010  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3011  0, 0, 0, 0, 0, 0, 0, 202, 0, 0,
3012  203, 50, 0, 51, 52, 0, 608, 0, 0, 54,
3013  55, 56, 57, 58, 59, 60, 61, 62, 0, 0,
3014  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
3015  0, 9, 0, 0, 0, 10, 11, 63, 207, 65,
3016  12, 0, 13, 14, 15, 238, 239, 18, 19, 0,
3017  0, 0, 0, 0, 240, 241, 242, 23, 24, 25,
3018  26, 0, 0, 200, 0, 0, 0, 0, 0, 0,
3019  29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
3020  39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
3021  46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
3022  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3023  202, 0, 0, 203, 50, 0, 51, 52, 0, 0,
3024  0, 0, 54, 55, 56, 57, 58, 59, 60, 61,
3025  62, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3026  5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
3027  63, 207, 65, 12, 0, 13, 14, 15, 16, 17,
3028  18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
3029  23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
3030  0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
3031  36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
3032  44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
3033  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3034  0, 0, 0, 202, 0, 0, 203, 50, 0, 51,
3035  52, 0, 0, 0, 0, 54, 55, 56, 57, 58,
3036  59, 60, 61, 62, 0, 0, 0, 0, 0, 0,
3037  0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
3038  0, 10, 11, 63, 64, 65, 12, 0, 13, 14,
3039  15, 16, 17, 18, 19, 0, 0, 0, 0, 0,
3040  20, 21, 22, 23, 24, 25, 26, 0, 0, 200,
3041  0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
3042  33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
3043  42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
3044  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3045  0, 0, 0, 0, 0, 0, 202, 0, 0, 203,
3046  50, 0, 51, 52, 0, 0, 0, 0, 54, 55,
3047  56, 57, 58, 59, 60, 61, 62, 0, 0, 0,
3048  0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
3049  9, 0, 0, 0, 10, 11, 63, 207, 65, 12,
3050  0, 13, 14, 15, 238, 239, 18, 19, 0, 0,
3051  0, 0, 0, 240, 241, 242, 23, 24, 25, 26,
3052  0, 0, 200, 0, 0, 0, 0, 0, 0, 268,
3053  0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
3054  40, 0, 41, 42, 0, 43, 44, 45, 0, 0,
3055  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3056  0, 0, 0, 0, 0, 0, 0, 0, 0, 269,
3057  0, 0, 323, 50, 0, 51, 52, 0, 324, 0,
3058  0, 54, 55, 56, 57, 58, 59, 60, 61, 62,
3059  0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
3060  0, 0, 0, 10, 11, 0, 0, 0, 12, 270,
3061  13, 14, 15, 238, 239, 18, 19, 0, 0, 0,
3062  0, 0, 240, 241, 242, 23, 24, 25, 26, 0,
3063  0, 200, 0, 0, 0, 0, 0, 0, 268, 0,
3064  0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
3065  0, 41, 42, 0, 43, 44, 45, 0, 0, 0,
3066  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3067  0, 0, 0, 0, 0, 0, 0, 0, 365, 0,
3068  0, 49, 50, 0, 51, 52, 0, 53, 0, 0,
3069  54, 55, 56, 57, 58, 59, 60, 61, 62, 0,
3070  0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
3071  0, 0, 10, 11, 0, 0, 0, 12, 270, 13,
3072  14, 15, 238, 239, 18, 19, 0, 0, 0, 0,
3073  0, 240, 241, 242, 23, 24, 25, 26, 0, 0,
3074  200, 0, 0, 0, 0, 0, 0, 268, 0, 0,
3075  32, 33, 34, 373, 36, 37, 38, 374, 40, 0,
3076  41, 42, 0, 43, 44, 45, 0, 0, 0, 0,
3077  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3078  0, 0, 0, 0, 375, 0, 0, 376, 0, 0,
3079  203, 50, 0, 51, 52, 0, 0, 0, 0, 54,
3080  55, 56, 57, 58, 59, 60, 61, 62, 0, 0,
3081  0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
3082  0, 10, 11, 0, 0, 0, 12, 270, 13, 14,
3083  15, 238, 239, 18, 19, 0, 0, 0, 0, 0,
3084  240, 241, 242, 23, 24, 25, 26, 0, 0, 200,
3085  0, 0, 0, 0, 0, 0, 268, 0, 0, 32,
3086  33, 34, 373, 36, 37, 38, 374, 40, 0, 41,
3087  42, 0, 43, 44, 45, 0, 0, 0, 0, 0,
3088  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3089  0, 0, 0, 0, 0, 0, 376, 0, 0, 203,
3090  50, 0, 51, 52, 0, 0, 0, 0, 54, 55,
3091  56, 57, 58, 59, 60, 61, 62, 0, 0, 0,
3092  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
3093  10, 11, 0, 0, 0, 12, 270, 13, 14, 15,
3094  238, 239, 18, 19, 0, 0, 0, 0, 0, 240,
3095  241, 242, 23, 24, 25, 26, 0, 0, 200, 0,
3096  0, 0, 0, 0, 0, 268, 0, 0, 32, 33,
3097  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
3098  0, 43, 44, 45, 0, 0, 0, 0, 0, 0,
3099  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3100  0, 0, 0, 0, 0, 269, 0, 0, 323, 50,
3101  0, 51, 52, 0, 0, 0, 0, 54, 55, 56,
3102  57, 58, 59, 60, 61, 62, 0, 0, 0, 0,
3103  0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
3104  11, 0, 0, 0, 12, 270, 13, 14, 15, 238,
3105  239, 18, 19, 0, 0, 0, 0, 0, 240, 241,
3106  242, 23, 24, 25, 26, 0, 0, 200, 0, 0,
3107  0, 0, 0, 0, 268, 0, 0, 32, 33, 34,
3108  35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
3109  43, 44, 45, 0, 0, 0, 0, 0, 0, 0,
3110  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3111  0, 0, 0, 0, 894, 0, 0, 203, 50, 0,
3112  51, 52, 0, 0, 0, 0, 54, 55, 56, 57,
3113  58, 59, 60, 61, 62, 0, 0, 0, 0, 0,
3114  5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
3115  0, 0, 0, 12, 270, 13, 14, 15, 238, 239,
3116  18, 19, 0, 0, 0, 0, 0, 240, 241, 242,
3117  23, 24, 25, 26, 0, 0, 200, 0, 0, 0,
3118  0, 0, 0, 268, 0, 0, 32, 33, 34, 35,
3119  36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
3120  44, 45, 0, 0, 0, 0, 0, 0, 0, 0,
3121  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3122  0, 0, 0, 974, 0, 0, 203, 50, 0, 51,
3123  52, 0, 0, 0, 0, 54, 55, 56, 57, 58,
3124  59, 60, 61, 62, 0, 0, 0, 0, 0, 0,
3125  553, 554, 0, 0, 555, 0, 0, 0, 0, 0,
3126  0, 0, 0, 270, 162, 163, 164, 165, 166, 167,
3127  168, 169, 170, 0, 0, 171, 172, 0, 0, 173,
3128  174, 175, 176, 0, 0, 0, 0, 0, 0, 0,
3129  0, 0, 0, 177, 178, 0, 0, 0, 0, 0,
3130  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3131  0, 0, 0, 0, 179, 180, 181, 182, 183, 184,
3132  185, 186, 187, 188, 0, 189, 190, 561, 562, 0,
3133  0, 563, 0, 191, 0, 0, 0, 0, 0, 0,
3134  0, 162, 163, 164, 165, 166, 167, 168, 169, 170,
3135  0, 0, 171, 172, 0, 0, 173, 174, 175, 176,
3136  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3137  177, 178, 0, 0, 0, 0, 0, 0, 0, 0,
3138  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3139  0, 179, 180, 181, 182, 183, 184, 185, 186, 187,
3140  188, 0, 189, 190, 598, 562, 0, 0, 599, 0,
3141  191, 0, 0, 0, 0, 0, 0, 0, 162, 163,
3142  164, 165, 166, 167, 168, 169, 170, 0, 0, 171,
3143  172, 0, 0, 173, 174, 175, 176, 0, 0, 0,
3144  0, 0, 0, 0, 0, 0, 0, 177, 178, 0,
3145  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3146  0, 0, 0, 0, 0, 0, 0, 0, 179, 180,
3147  181, 182, 183, 184, 185, 186, 187, 188, 0, 189,
3148  190, 612, 554, 0, 0, 613, 0, 191, 0, 0,
3149  0, 0, 0, 0, 0, 162, 163, 164, 165, 166,
3150  167, 168, 169, 170, 0, 0, 171, 172, 0, 0,
3151  173, 174, 175, 176, 0, 0, 0, 0, 0, 0,
3152  0, 0, 0, 0, 177, 178, 0, 0, 0, 0,
3153  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3154  0, 0, 0, 0, 0, 179, 180, 181, 182, 183,
3155  184, 185, 186, 187, 188, 0, 189, 190, 615, 562,
3156  0, 0, 616, 0, 191, 0, 0, 0, 0, 0,
3157  0, 0, 162, 163, 164, 165, 166, 167, 168, 169,
3158  170, 0, 0, 171, 172, 0, 0, 173, 174, 175,
3159  176, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3160  0, 177, 178, 0, 0, 0, 0, 0, 0, 0,
3161  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3162  0, 0, 179, 180, 181, 182, 183, 184, 185, 186,
3163  187, 188, 0, 189, 190, 639, 554, 0, 0, 640,
3164  0, 191, 0, 0, 0, 0, 0, 0, 0, 162,
3165  163, 164, 165, 166, 167, 168, 169, 170, 0, 0,
3166  171, 172, 0, 0, 173, 174, 175, 176, 0, 0,
3167  0, 0, 0, 0, 0, 0, 0, 0, 177, 178,
3168  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3169  0, 0, 0, 0, 0, 0, 0, 0, 0, 179,
3170  180, 181, 182, 183, 184, 185, 186, 187, 188, 0,
3171  189, 190, 642, 562, 0, 0, 643, 0, 191, 0,
3172  0, 0, 0, 0, 0, 0, 162, 163, 164, 165,
3173  166, 167, 168, 169, 170, 0, 0, 171, 172, 0,
3174  0, 173, 174, 175, 176, 0, 0, 0, 0, 0,
3175  0, 0, 0, 0, 0, 177, 178, 0, 0, 0,
3176  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3177  0, 0, 0, 0, 0, 0, 179, 180, 181, 182,
3178  183, 184, 185, 186, 187, 188, 0, 189, 190, 727,
3179  554, 0, 0, 728, 0, 191, 0, 0, 0, 0,
3180  0, 0, 0, 162, 163, 164, 165, 166, 167, 168,
3181  169, 170, 0, 0, 171, 172, 0, 0, 173, 174,
3182  175, 176, 0, 0, 0, 0, 0, 0, 0, 0,
3183  0, 0, 177, 178, 0, 0, 0, 0, 0, 0,
3184  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3185  0, 0, 0, 179, 180, 181, 182, 183, 184, 185,
3186  186, 187, 188, 0, 189, 190, 730, 562, 0, 0,
3187  731, 0, 191, 0, 0, 0, 0, 0, 0, 0,
3188  162, 163, 164, 165, 166, 167, 168, 169, 170, 0,
3189  0, 171, 172, 0, 0, 173, 174, 175, 176, 0,
3190  0, 0, 0, 0, 0, 0, 0, 0, 0, 177,
3191  178, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3192  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3193  179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
3194  0, 189, 190, 737, 554, 0, 0, 738, 0, 191,
3195  0, 0, 0, 0, 0, 0, 0, 162, 163, 164,
3196  165, 166, 167, 168, 169, 170, 0, 0, 171, 172,
3197  0, 0, 173, 174, 175, 176, 0, 0, 0, 0,
3198  0, 0, 0, 0, 0, 0, 177, 178, 0, 0,
3199  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3200  0, 0, 0, 0, 0, 0, 0, 179, 180, 181,
3201  182, 183, 184, 185, 186, 187, 188, 0, 189, 190,
3202  1000, 554, 0, 0, 1001, 0, 191, 0, 0, 0,
3203  0, 0, 0, 0, 162, 163, 164, 165, 166, 167,
3204  168, 169, 170, 0, 0, 171, 172, 0, 0, 173,
3205  174, 175, 176, 0, 0, 0, 0, 0, 0, 0,
3206  0, 0, 0, 177, 178, 0, 0, 0, 0, 0,
3207  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3208  0, 0, 0, 0, 179, 180, 181, 182, 183, 184,
3209  185, 186, 187, 188, 0, 189, 190, 1035, 554, 0,
3210  0, 1036, 0, 191, 0, 0, 0, 0, 0, 0,
3211  0, 162, 163, 164, 165, 166, 167, 168, 169, 170,
3212  0, 0, 171, 172, 0, 0, 173, 174, 175, 176,
3213  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3214  177, 178, 0, 0, 0, 0, 0, 0, 0, 0,
3215  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3216  0, 179, 180, 181, 182, 183, 184, 185, 186, 187,
3217  188, 0, 189, 190, 1038, 562, 0, 0, 1039, 0,
3218  191, 0, 0, 0, 0, 0, 0, 0, 162, 163,
3219  164, 165, 166, 167, 168, 169, 170, 0, 0, 171,
3220  172, 0, 0, 173, 174, 175, 176, 0, 0, 0,
3221  0, 0, 0, 0, 0, 0, 0, 177, 178, 327,
3222  328, 329, 330, 331, 332, 333, 334, 335, 336, 337,
3223  338, 339, 0, 0, 340, 341, 0, 0, 179, 180,
3224  181, 182, 183, 184, 185, 186, 187, 188, 0, 189,
3225  190, 0, 0, 0, 0, 0, 0, 191, 0, 0,
3226  0, 0, 0, 0, 0, 342, 0, 343, 344, 345,
3227  346, 347, 348, 349, 350, 351, 352, 0, 0, 0,
3228  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3229  0, 0, 231
3230 };
3231 
3232 static const yytype_int16 yycheck[] =
3233 {
3234  2, 96, 74, 55, 28, 67, 79, 50, 220, 230,
3235  8, 359, 27, 326, 29, 8, 326, 87, 354, 262,
3236  90, 8, 472, 266, 651, 16, 17, 22, 90, 20,
3237  28, 353, 53, 355, 255, 28, 614, 2, 259, 4,
3238  575, 28, 94, 86, 87, 4, 420, 90, 376, 51,
3239  52, 2, 594, 4, 440, 574, 67, 577, 79, 53,
3240  472, 90, 780, 641, 468, 16, 17, 788, 55, 20,
3241  91, 92, 93, 876, 16, 17, 49, 399, 20, 74,
3242  416, 715, 25, 64, 458, 719, 25, 13, 26, 668,
3243  25, 25, 412, 415, 25, 417, 250, 27, 49, 50,
3244  420, 874, 53, 508, 29, 76, 511, 94, 85, 51,
3245  25, 685, 0, 64, 518, 85, 61, 903, 16, 17,
3246  68, 443, 20, 776, 61, 25, 37, 38, 79, 13,
3247  139, 141, 141, 25, 470, 86, 87, 97, 907, 90,
3248  91, 92, 93, 770, 771, 130, 596, 118, 56, 471,
3249  803, 729, 13, 51, 52, 132, 133, 16, 17, 136,
3250  120, 20, 740, 133, 26, 110, 939, 37, 38, 323,
3251  286, 243, 288, 110, 290, 123, 124, 125, 294, 25,
3252  898, 52, 13, 13, 140, 56, 111, 230, 991, 232,
3253  252, 134, 130, 136, 736, 134, 140, 136, 271, 134,
3254  134, 422, 744, 134, 724, 426, 780, 657, 134, 139,
3255  431, 141, 214, 139, 788, 141, 1002, 429, 220, 134,
3256  993, 741, 685, 252, 945, 227, 447, 25, 807, 808,
3257  141, 452, 950, 224, 134, 226, 227, 307, 308, 309,
3258  310, 252, 134, 1012, 580, 657, 632, 874, 622, 876,
3259  271, 1024, 203, 268, 13, 139, 592, 141, 1, 581,
3260  670, 87, 672, 591, 307, 308, 309, 310, 130, 312,
3261  313, 593, 87, 224, 136, 226, 227, 250, 139, 230,
3262  141, 232, 224, 248, 226, 690, 237, 113, 134, 1007,
3263  360, 361, 696, 743, 28, 929, 517, 248, 113, 250,
3264  362, 621, 622, 324, 15, 136, 17, 886, 139, 139,
3265  141, 141, 939, 940, 134, 113, 378, 360, 361, 782,
3266  271, 141, 140, 786, 898, 845, 224, 847, 226, 903,
3267  324, 743, 375, 362, 49, 854, 134, 857, 85, 137,
3268  321, 306, 862, 141, 61, 326, 311, 306, 25, 140,
3269  323, 113, 354, 134, 61, 306, 307, 308, 309, 310,
3270  311, 312, 313, 354, 991, 224, 993, 226, 355, 485,
3271  321, 945, 323, 324, 117, 326, 492, 725, 87, 321,
3272  139, 134, 141, 61, 326, 964, 133, 697, 141, 931,
3273  107, 87, 109, 636, 929, 468, 139, 1024, 141, 611,
3274  107, 714, 109, 354, 113, 356, 926, 927, 113, 360,
3275  361, 134, 399, 437, 416, 87, 100, 113, 141, 85,
3276  87, 402, 403, 140, 375, 416, 428, 429, 1002, 107,
3277  417, 109, 110, 140, 85, 898, 113, 900, 440, 437,
3278  903, 113, 905, 87, 437, 518, 113, 468, 990, 134,
3279  437, 402, 403, 58, 26, 85, 443, 134, 56, 1037,
3280  137, 87, 61, 68, 141, 416, 65, 133, 470, 989,
3281  26, 136, 85, 883, 884, 440, 141, 113, 888, 470,
3282  890, 891, 133, 85, 471, 557, 936, 113, 203, 440,
3283  85, 96, 97, 565, 58, 869, 136, 518, 134, 450,
3284  1020, 113, 1022, 133, 68, 507, 508, 85, 107, 511,
3285  109, 573, 574, 85, 412, 120, 703, 468, 88, 470,
3286  133, 742, 237, 710, 61, 587, 134, 542, 600, 85,
3287  132, 133, 96, 97, 87, 250, 136, 132, 133, 1002,
3288  761, 1004, 134, 85, 1007, 560, 1009, 61, 760, 869,
3289  130, 685, 595, 774, 132, 133, 120, 455, 130, 136,
3290  132, 133, 85, 558, 637, 61, 568, 518, 136, 917,
3291  107, 566, 109, 110, 130, 923, 132, 133, 580, 61,
3292  136, 605, 625, 68, 1047, 995, 996, 997, 998, 580,
3293  592, 133, 68, 107, 581, 109, 110, 26, 600, 614,
3294  113, 592, 685, 59, 60, 600, 593, 605, 323, 611,
3295  133, 107, 605, 109, 110, 137, 637, 138, 605, 570,
3296  85, 572, 131, 696, 85, 107, 641, 109, 110, 580,
3297  632, 85, 704, 134, 576, 1045, 59, 60, 56, 711,
3298  861, 592, 110, 594, 595, 121, 122, 123, 124, 125,
3299  54, 87, 873, 748, 788, 110, 85, 791, 85, 63,
3300  64, 87, 732, 85, 666, 735, 668, 632, 133, 26,
3301  685, 733, 133, 110, 625, 696, 110, 113, 132, 133,
3302  1016, 632, 2, 745, 4, 85, 637, 113, 690, 732,
3303  14, 15, 735, 68, 746, 1017, 16, 17, 134, 782,
3304  20, 130, 94, 132, 133, 132, 133, 136, 134, 711,
3305  132, 133, 714, 715, 729, 717, 697, 719, 68, 700,
3306  701, 87, 134, 621, 17, 740, 707, 708, 85, 49,
3307  50, 139, 132, 133, 56, 686, 25, 134, 689, 85,
3308  691, 137, 85, 134, 64, 696, 697, 113, 131, 700,
3309  701, 130, 134, 134, 140, 85, 707, 708, 760, 746,
3310  52, 776, 54, 55, 56, 57, 86, 87, 134, 903,
3311  90, 905, 714, 130, 844, 132, 133, 85, 140, 136,
3312  801, 732, 85, 134, 735, 736, 132, 133, 803, 132,
3313  133, 85, 854, 744, 856, 52, 134, 54, 55, 56,
3314  57, 844, 132, 133, 113, 807, 808, 87, 134, 87,
3315  10, 945, 8, 947, 13, 898, 113, 900, 952, 87,
3316  903, 136, 905, 134, 132, 133, 777, 778, 134, 132,
3317  133, 131, 52, 113, 87, 113, 134, 839, 132, 133,
3318  842, 115, 134, 54, 55, 113, 57, 810, 811, 830,
3319  801, 134, 63, 64, 134, 570, 134, 572, 52, 52,
3320  113, 54, 55, 56, 57, 816, 134, 134, 1002, 52,
3321  1004, 134, 893, 138, 15, 1009, 134, 134, 134, 830,
3322  131, 134, 113, 203, 886, 40, 41, 42, 43, 44,
3323  841, 118, 1026, 844, 134, 916, 89, 848, 849, 134,
3324  134, 852, 95, 139, 224, 134, 226, 227, 10, 131,
3325  230, 10, 232, 1047, 88, 134, 9, 237, 134, 1002,
3326  137, 1004, 10, 131, 1007, 134, 1009, 929, 248, 52,
3327  250, 54, 55, 56, 57, 52, 134, 54, 55, 56,
3328  57, 892, 893, 134, 52, 134, 54, 55, 56, 57,
3329  56, 118, 131, 134, 134, 970, 108, 134, 134, 134,
3330  56, 52, 964, 134, 1047, 916, 89, 136, 134, 920,
3331  134, 686, 95, 136, 689, 134, 691, 450, 91, 93,
3332  931, 89, 711, 1019, 770, 685, 306, 307, 308, 309,
3333  310, 311, 312, 313, 1012, 749, 1018, 57, 961, 962,
3334  94, 321, 965, 323, 967, 968, 326, 99, 294, 936,
3335  782, 900, 898, 780, 1016, -1, 1018, 1019, 396, -1,
3336  -1, -1, 1037, 16, 17, 1016, -1, 20, -1, 980,
3337  1017, 982, -1, -1, 354, -1, 356, 988, -1, 990,
3338  360, 361, -1, -1, 52, -1, 54, 55, 56, 57,
3339  58, -1, -1, 46, 47, 375, -1, -1, 51, 52,
3340  68, -1, 777, 778, -1, 1016, -1, 1030, 1031, 1032,
3341  1033, 64, 65, -1, -1, -1, -1, -1, -1, -1,
3342  -1, 89, 402, 403, -1, -1, -1, -1, 96, 97,
3343  1053, -1, -1, -1, -1, -1, 416, -1, -1, -1,
3344  -1, 816, -1, -1, -1, -1, -1, -1, -1, -1,
3345  201, -1, 120, 204, 205, 206, -1, -1, -1, -1,
3346  440, -1, -1, -1, -1, -1, 841, -1, -1, -1,
3347  450, -1, -1, 848, 849, -1, -1, 852, 52, -1,
3348  54, 55, 56, 57, 58, -1, -1, 0, -1, -1,
3349  470, -1, -1, -1, 68, 8, 9, 10, -1, -1,
3350  13, 14, 15, 68, 17, -1, -1, -1, -1, -1,
3351  -1, -1, -1, 26, 27, 89, -1, 892, 83, 84,
3352  -1, 95, 96, 97, 37, 38, 68, 40, 41, 42,
3353  43, 44, -1, -1, -1, -1, -1, -1, -1, -1,
3354  -1, 83, 84, -1, -1, 920, 120, -1, 201, 123,
3355  -1, 204, 205, 206, 207, 120, 121, 122, 123, 124,
3356  125, -1, -1, -1, -1, -1, -1, 141, -1, -1,
3357  321, 224, 85, 226, 227, 326, 118, 119, 120, 121,
3358  122, 123, 124, 125, -1, -1, 68, -1, -1, -1,
3359  570, -1, 572, -1, -1, 108, -1, -1, -1, -1,
3360  580, 83, 84, -1, -1, 980, -1, 982, -1, -1,
3361  -1, -1, 592, 988, 594, 595, -1, 130, 131, -1,
3362  133, -1, -1, 136, 137, -1, 139, -1, 141, -1,
3363  -1, -1, -1, -1, -1, -1, -1, -1, -1, 121,
3364  122, 123, 124, 125, -1, 625, -1, -1, -1, -1,
3365  -1, -1, 632, -1, -1, -1, -1, -1, -1, -1,
3366  411, 412, -1, -1, -1, -1, -1, -1, 321, 420,
3367  -1, -1, -1, 326, 327, 328, 329, 330, 331, 332,
3368  333, 334, 335, 336, 337, 338, 339, 340, 341, 342,
3369  343, 344, 345, 346, 347, 348, 349, 350, 351, 352,
3370  -1, 354, -1, -1, 455, -1, 686, 458, -1, 689,
3371  -1, 691, -1, -1, -1, -1, -1, 697, -1, -1,
3372  700, 701, -1, -1, -1, -1, -1, 707, 708, -1,
3373  2, -1, 4, -1, -1, -1, -1, -1, -1, -1,
3374  -1, -1, -1, -1, -1, -1, -1, -1, -1, 402,
3375  403, -1, 732, -1, -1, 735, 736, 410, 411, 412,
3376  -1, 512, -1, 416, 744, 418, 419, 420, -1, 52,
3377  -1, 54, 55, 56, 57, 58, -1, 49, -1, -1,
3378  -1, 53, -1, -1, -1, 68, 439, -1, -1, -1,
3379  -1, 444, -1, -1, -1, -1, -1, 777, 778, -1,
3380  -1, -1, 455, -1, -1, 458, 89, 79, -1, -1,
3381  -1, -1, 95, 96, 97, -1, -1, 470, -1, 91,
3382  92, 93, 94, -1, -1, 576, -1, -1, -1, -1,
3383  -1, -1, -1, -1, -1, -1, 816, 120, -1, -1,
3384  123, -1, -1, 496, 497, -1, -1, -1, -1, -1,
3385  830, -1, -1, 136, -1, -1, -1, 608, -1, 512,
3386  -1, 841, -1, -1, 844, -1, -1, -1, 848, 849,
3387  621, 622, 852, 52, -1, 54, 55, 56, 57, 58,
3388  -1, 2, -1, 4, -1, -1, -1, -1, -1, 68,
3389  -1, -1, -1, -1, -1, -1, -1, -1, 649, -1,
3390  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3391  89, -1, 892, -1, -1, -1, 95, 96, 97, -1,
3392  -1, -1, -1, 576, -1, -1, -1, 580, 49, -1,
3393  -1, 203, 53, -1, -1, -1, -1, -1, -1, 592,
3394  920, 120, 693, 52, 123, 54, 55, 56, 57, 58,
3395  -1, 931, -1, -1, -1, 608, -1, 136, 79, 68,
3396  -1, -1, -1, 714, -1, 237, -1, -1, 621, 622,
3397  91, 92, 93, 94, -1, -1, 248, -1, 250, -1,
3398  89, -1, -1, -1, -1, -1, 95, 96, 97, -1,
3399  -1, -1, -1, -1, -1, -1, 649, -1, -1, 271,
3400  980, -1, 982, -1, -1, -1, -1, -1, 988, -1,
3401  990, 120, -1, -1, 123, -1, 767, -1, -1, 52,
3402  -1, 54, 55, 56, 57, 58, -1, -1, -1, -1,
3403  -1, -1, -1, -1, 306, 68, 1016, -1, -1, 311,
3404  693, -1, -1, -1, 697, 698, -1, 700, 701, -1,
3405  -1, 323, 324, -1, 707, 708, 89, -1, -1, -1,
3406  -1, 714, 95, 96, 97, -1, 2, 818, 4, -1,
3407  -1, -1, -1, -1, -1, 2, -1, 4, -1, -1,
3408  -1, -1, 203, -1, 356, -1, -1, 120, -1, -1,
3409  123, 52, -1, 54, 55, 56, 57, 58, 751, -1,
3410  851, -1, 755, 756, -1, 758, 759, 68, -1, -1,
3411  -1, -1, -1, 49, 767, -1, 237, 53, 869, -1,
3412  -1, -1, 49, -1, -1, -1, -1, 248, 89, 250,
3413  -1, -1, -1, -1, -1, 96, 97, -1, -1, -1,
3414  -1, -1, -1, 79, -1, -1, -1, -1, -1, -1,
3415  271, -1, -1, -1, -1, 91, 92, 93, -1, 120,
3416  -1, -1, -1, -1, 91, 818, -1, -1, 440, 822,
3417  -1, -1, -1, -1, -1, -1, -1, 830, 450, -1,
3418  -1, -1, -1, -1, -1, 306, -1, -1, -1, -1,
3419  311, -1, -1, -1, -1, -1, 468, -1, 851, -1,
3420  -1, -1, 323, 324, 68, 69, 70, 71, 72, 73,
3421  74, 75, -1, 77, 78, 868, 869, -1, -1, 83,
3422  84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3423  -1, -1, -1, -1, -1, 356, -1, -1, -1, -1,
3424  -1, -1, -1, 2, -1, 4, 518, -1, -1, -1,
3425  -1, -1, 116, 117, 118, 119, 120, 121, 122, 123,
3426  124, 125, -1, -1, -1, -1, -1, 203, -1, -1,
3427  -1, -1, -1, -1, -1, -1, 203, -1, -1, -1,
3428  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3429  49, -1, -1, -1, -1, -1, -1, -1, 570, -1,
3430  572, 237, -1, -1, -1, -1, -1, -1, -1, -1,
3431  237, -1, 248, -1, 250, -1, -1, -1, -1, 440,
3432  -1, 248, 594, 250, -1, -1, -1, -1, -1, 450,
3433  -1, -1, -1, -1, -1, 271, -1, -1, -1, -1,
3434  -1, -1, -1, -1, -1, -1, -1, 468, -1, -1,
3435  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3436  632, -1, -1, 1016, -1, 637, -1, -1, -1, -1,
3437  306, -1, -1, -1, -1, 311, -1, -1, -1, 306,
3438  -1, -1, -1, -1, 311, -1, -1, 323, 324, -1,
3439  -1, -1, -1, -1, -1, -1, 323, 518, -1, 326,
3440  -1, -1, -1, -1, -1, -1, -1, 44, -1, -1,
3441  -1, -1, -1, -1, 686, -1, -1, 689, -1, 691,
3442  356, -1, -1, -1, 696, -1, -1, -1, -1, 356,
3443  -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
3444  77, 78, 79, 80, 203, -1, 83, 84, -1, 570,
3445  -1, 572, -1, -1, -1, -1, -1, -1, -1, -1,
3446  -1, -1, -1, -1, 736, -1, -1, -1, -1, -1,
3447  -1, -1, 744, 594, -1, -1, -1, 114, 237, 116,
3448  117, 118, 119, 120, 121, 122, 123, 124, 125, 248,
3449  -1, 250, -1, -1, -1, -1, -1, 134, -1, -1,
3450  -1, -1, -1, -1, 440, 777, 778, -1, -1, -1,
3451  -1, 632, -1, 440, 450, -1, 637, -1, -1, -1,
3452  -1, -1, -1, 450, -1, -1, -1, -1, -1, 801,
3453  -1, -1, 468, -1, -1, -1, -1, -1, -1, -1,
3454  -1, -1, -1, -1, 816, -1, -1, 306, -1, -1,
3455  -1, -1, 311, -1, -1, -1, -1, 68, 69, 70,
3456  71, 72, 73, 74, 323, 686, 77, 78, 689, 841,
3457  691, -1, 83, 84, -1, 696, 848, 849, -1, -1,
3458  852, -1, 518, -1, -1, -1, -1, -1, -1, -1,
3459  -1, -1, -1, -1, -1, -1, -1, 356, -1, -1,
3460  -1, -1, -1, -1, -1, 116, 117, 118, 119, 120,
3461  121, 122, 123, 124, 125, 736, -1, -1, -1, -1,
3462  892, 893, -1, 744, -1, -1, -1, -1, -1, -1,
3463  -1, -1, -1, -1, 570, -1, 572, -1, -1, -1,
3464  -1, -1, -1, 570, 916, 572, -1, -1, 920, -1,
3465  -1, -1, -1, -1, -1, -1, 777, 778, 594, 931,
3466  -1, -1, -1, -1, -1, -1, -1, 594, -1, -1,
3467  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3468  801, 440, -1, -1, -1, -1, -1, -1, -1, -1,
3469  -1, 450, -1, -1, -1, 816, 632, -1, -1, -1,
3470  -1, 637, -1, -1, -1, 632, -1, -1, 980, -1,
3471  982, -1, -1, -1, -1, -1, 988, -1, 990, -1,
3472  841, -1, -1, -1, -1, -1, -1, 848, 849, -1,
3473  -1, 852, -1, -1, -1, -1, -1, -1, -1, -1,
3474  676, -1, -1, -1, -1, -1, -1, -1, -1, 44,
3475  686, -1, -1, 689, -1, 691, -1, -1, -1, 686,
3476  696, -1, 689, -1, 691, -1, -1, -1, -1, -1,
3477  697, 892, 893, 68, 69, 70, 71, 72, 73, 74,
3478  75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
3479  -1, -1, -1, -1, -1, 916, -1, -1, -1, 920,
3480  736, -1, -1, -1, -1, -1, -1, -1, 744, 736,
3481  931, 570, -1, 572, -1, -1, -1, 744, -1, 114,
3482  -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
3483  125, -1, -1, -1, -1, 594, -1, -1, -1, -1,
3484  -1, 777, 778, -1, -1, -1, -1, -1, -1, -1,
3485  777, 778, -1, -1, -1, -1, -1, -1, -1, 980,
3486  -1, 982, -1, -1, -1, 801, -1, 988, 44, 990,
3487  -1, -1, -1, 632, -1, -1, -1, -1, -1, -1,
3488  816, -1, -1, -1, -1, -1, -1, -1, -1, 816,
3489  -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
3490  76, 77, 78, 79, 80, 841, -1, 83, 84, -1,
3491  -1, -1, 848, 849, 841, -1, 852, -1, -1, -1,
3492  -1, 848, 849, -1, -1, 852, -1, 686, -1, -1,
3493  689, -1, 691, -1, -1, -1, -1, -1, 114, -1,
3494  116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
3495  -1, -1, -1, -1, -1, -1, 892, 893, 68, 69,
3496  70, 71, 72, 73, 74, 892, -1, 77, 78, -1,
3497  -1, -1, -1, 83, 84, -1, -1, 736, -1, -1,
3498  916, -1, -1, -1, 920, 744, -1, -1, -1, 916,
3499  -1, -1, -1, 920, -1, 931, -1, -1, -1, -1,
3500  -1, -1, -1, -1, 931, -1, 116, 117, 118, 119,
3501  120, 121, 122, 123, 124, 125, -1, -1, 777, 778,
3502  68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
3503  78, 79, 80, -1, -1, 83, 84, -1, -1, -1,
3504  -1, -1, -1, -1, 980, -1, 982, -1, -1, -1,
3505  -1, -1, 988, 980, 990, 982, -1, 816, -1, -1,
3506  -1, 988, -1, 990, -1, -1, 114, -1, 116, 117,
3507  118, 119, 120, 121, 122, 123, 124, 125, -1, -1,
3508  -1, -1, 841, -1, -1, -1, -1, -1, -1, 848,
3509  849, 0, 1, 852, 3, 4, 5, 6, 7, -1,
3510  -1, -1, 11, 12, -1, -1, -1, 16, -1, 18,
3511  19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
3512  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
3513  39, -1, -1, 892, -1, -1, 45, 46, 47, 48,
3514  49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
3515  59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
3516  -1, 920, -1, -1, -1, -1, -1, -1, -1, -1,
3517  -1, -1, 931, -1, -1, -1, -1, 86, -1, -1,
3518  89, 90, -1, 92, 93, -1, 95, -1, -1, 98,
3519  99, 100, 101, 102, 103, 104, 105, 106, 0, -1,
3520  -1, -1, -1, -1, -1, -1, 8, 9, 10, -1,
3521  -1, 13, 14, 15, -1, 17, -1, 126, 127, 128,
3522  -1, 980, -1, 982, 26, 27, 28, 29, -1, 988,
3523  139, 990, 141, -1, -1, 37, 38, -1, 40, 41,
3524  42, 43, 44, -1, -1, 68, 69, 70, 71, 72,
3525  73, 74, 75, 76, 77, 78, 79, 80, -1, -1,
3526  83, 84, -1, -1, -1, -1, 68, 69, 70, 71,
3527  72, 73, 74, 75, 76, 77, 78, 79, 80, -1,
3528  -1, 83, 84, 85, -1, 87, 88, -1, -1, -1,
3529  -1, -1, 94, 116, 117, 118, 119, 120, 121, 122,
3530  123, 124, 125, -1, -1, -1, 108, -1, -1, 111,
3531  -1, 113, 114, 115, 116, 117, 118, 119, 120, 121,
3532  122, 123, 124, 125, -1, -1, -1, -1, 130, 131,
3533  132, 133, 134, 0, -1, 137, 138, 139, -1, 141,
3534  -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
3535  17, -1, -1, -1, -1, -1, -1, -1, 25, -1,
3536  27, 28, 29, -1, -1, -1, -1, -1, -1, -1,
3537  37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
3538  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3539  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3540  -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
3541  77, 78, 79, 80, -1, -1, 83, 84, 85, -1,
3542  87, 88, -1, -1, -1, -1, -1, 94, -1, -1,
3543  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3544  -1, 108, -1, -1, 111, -1, 113, 114, 115, 116,
3545  117, 118, 119, 120, 121, 122, 123, 124, 125, -1,
3546  -1, -1, -1, -1, 131, 132, 133, 134, 0, -1,
3547  137, 138, 139, -1, 141, -1, 8, 9, 10, -1,
3548  -1, 13, 14, 15, -1, 17, -1, -1, -1, -1,
3549  -1, -1, -1, 25, -1, 27, 28, 29, -1, -1,
3550  -1, -1, -1, -1, -1, 37, 38, -1, 40, 41,
3551  42, 43, 44, -1, -1, -1, -1, -1, -1, -1,
3552  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3553  -1, -1, -1, -1, -1, -1, 68, 69, 70, 71,
3554  72, 73, 74, 75, 76, 77, 78, 79, 80, -1,
3555  -1, 83, 84, 85, -1, 87, 88, -1, -1, -1,
3556  -1, -1, 94, -1, -1, -1, -1, -1, -1, -1,
3557  -1, -1, -1, -1, -1, -1, 108, -1, -1, 111,
3558  -1, 113, 114, 115, 116, 117, 118, 119, 120, 121,
3559  122, 123, 124, 125, -1, -1, -1, -1, -1, 131,
3560  132, 133, 134, 0, -1, 137, 138, 139, -1, 141,
3561  -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
3562  17, -1, -1, -1, -1, -1, -1, -1, -1, 26,
3563  27, 28, 29, -1, -1, -1, -1, -1, -1, -1,
3564  37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
3565  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3566  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3567  -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
3568  77, 78, 79, 80, -1, -1, 83, 84, 85, -1,
3569  -1, 88, -1, -1, -1, -1, -1, 94, -1, -1,
3570  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3571  -1, 108, -1, -1, 111, -1, -1, 114, 115, 116,
3572  117, 118, 119, 120, 121, 122, 123, 124, 125, -1,
3573  -1, -1, -1, 130, 131, 132, 133, 134, 0, -1,
3574  137, 138, 139, -1, 141, -1, 8, 9, 10, -1,
3575  -1, 13, 14, 15, -1, 17, -1, -1, -1, -1,
3576  -1, -1, -1, -1, 26, 27, 28, 29, -1, -1,
3577  -1, -1, -1, -1, -1, 37, 38, -1, 40, 41,
3578  42, 43, 44, -1, -1, -1, -1, -1, -1, -1,
3579  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3580  -1, -1, -1, -1, -1, -1, 68, 69, 70, 71,
3581  72, 73, 74, 75, 76, 77, 78, 79, 80, -1,
3582  -1, 83, 84, 85, -1, -1, 88, -1, -1, -1,
3583  -1, -1, 94, -1, -1, -1, -1, -1, -1, -1,
3584  -1, -1, -1, -1, -1, -1, 108, -1, -1, 111,
3585  -1, -1, 114, 115, 116, 117, 118, 119, 120, 121,
3586  122, 123, 124, 125, -1, -1, -1, -1, 130, 131,
3587  132, 133, 134, 0, -1, 137, 138, 139, -1, 141,
3588  -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
3589  17, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3590  27, 28, 29, -1, -1, -1, -1, -1, -1, -1,
3591  37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
3592  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3593  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3594  -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
3595  77, 78, 79, 80, -1, -1, 83, 84, 85, -1,
3596  87, 88, -1, -1, -1, -1, -1, 94, -1, -1,
3597  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3598  -1, 108, -1, -1, 111, -1, 113, 114, 115, 116,
3599  117, 118, 119, 120, 121, 122, 123, 124, 125, -1,
3600  -1, -1, -1, -1, 131, 132, 133, 134, 0, -1,
3601  137, 138, 139, -1, 141, -1, 8, 9, 10, -1,
3602  -1, 13, 14, 15, -1, 17, -1, -1, -1, -1,
3603  -1, -1, -1, -1, 26, 27, 28, -1, -1, -1,
3604  -1, -1, -1, -1, -1, 37, 38, -1, 40, 41,
3605  42, 43, 44, -1, -1, -1, -1, -1, -1, -1,
3606  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3607  -1, -1, -1, -1, -1, -1, 68, 69, 70, 71,
3608  72, 73, 74, 75, 76, 77, 78, 79, 80, -1,
3609  -1, 83, 84, 85, -1, -1, 88, -1, -1, -1,
3610  -1, -1, 94, -1, -1, -1, -1, -1, -1, -1,
3611  -1, -1, -1, -1, -1, -1, 108, -1, -1, -1,
3612  -1, -1, 114, -1, 116, 117, 118, 119, 120, 121,
3613  122, 123, 124, 125, -1, -1, -1, -1, 130, 131,
3614  132, 133, 134, 0, 136, 137, 138, 139, -1, 141,
3615  -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
3616  17, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3617  27, 28, 29, -1, -1, -1, -1, -1, -1, -1,
3618  37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
3619  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3620  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3621  -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
3622  77, 78, 79, 80, -1, -1, 83, 84, 85, -1,
3623  -1, 88, -1, -1, -1, -1, -1, 94, -1, -1,
3624  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3625  -1, 108, -1, -1, 111, -1, -1, 114, 115, 116,
3626  117, 118, 119, 120, 121, 122, 123, 124, 125, -1,
3627  -1, -1, -1, -1, 131, 132, 133, 134, 0, -1,
3628  137, 138, 139, -1, 141, -1, 8, 9, 10, -1,
3629  -1, 13, 14, 15, -1, 17, -1, -1, -1, -1,
3630  -1, -1, -1, -1, 26, 27, 28, -1, -1, -1,
3631  -1, -1, -1, -1, -1, 37, 38, -1, 40, 41,
3632  42, 43, 44, -1, -1, -1, -1, -1, -1, -1,
3633  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3634  -1, -1, -1, -1, -1, -1, 68, 69, 70, 71,
3635  72, 73, 74, 75, 76, 77, 78, 79, 80, -1,
3636  -1, 83, 84, 85, -1, -1, 88, -1, -1, -1,
3637  -1, -1, 94, -1, -1, -1, -1, -1, -1, -1,
3638  -1, -1, -1, -1, -1, -1, 108, -1, -1, -1,
3639  -1, -1, 114, -1, 116, 117, 118, 119, 120, 121,
3640  122, 123, 124, 125, -1, -1, -1, -1, 130, 131,
3641  132, 133, 134, 0, 136, 137, 138, 139, -1, 141,
3642  -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
3643  17, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3644  27, 28, -1, -1, -1, -1, -1, -1, -1, -1,
3645  37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
3646  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3647  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3648  -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
3649  77, 78, 79, 80, -1, -1, 83, 84, 85, -1,
3650  -1, 88, -1, -1, -1, -1, -1, 94, -1, -1,
3651  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3652  -1, 108, -1, -1, -1, -1, -1, 114, -1, 116,
3653  117, 118, 119, 120, 121, 122, 123, 124, 125, -1,
3654  -1, -1, -1, -1, 131, 132, 133, 134, 0, 136,
3655  137, 138, 139, -1, 141, -1, 8, 9, 10, -1,
3656  -1, -1, 14, 15, -1, 17, -1, -1, -1, -1,
3657  -1, -1, -1, -1, 26, -1, -1, -1, -1, -1,
3658  -1, -1, -1, -1, -1, 37, 38, -1, 40, 41,
3659  42, 43, 44, -1, -1, -1, -1, -1, -1, -1,
3660  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3661  -1, -1, -1, -1, -1, -1, 68, 69, 70, 71,
3662  72, 73, 74, 75, 76, 77, 78, 79, 80, -1,
3663  -1, 83, 84, 85, -1, 87, -1, -1, -1, -1,
3664  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3665  -1, -1, -1, -1, -1, -1, 108, -1, -1, -1,
3666  -1, 113, 114, -1, 116, 117, 118, 119, 120, 121,
3667  122, 123, 124, 125, -1, -1, -1, -1, 130, 131,
3668  132, 133, 134, 0, -1, 137, -1, 139, -1, 141,
3669  -1, 8, 9, 10, -1, -1, -1, 14, 15, -1,
3670  17, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3671  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3672  37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
3673  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3674  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3675  -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
3676  77, 78, 79, 80, -1, -1, 83, 84, 85, -1,
3677  87, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3678  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3679  -1, 108, -1, -1, -1, -1, 113, 114, -1, 116,
3680  117, 118, 119, 120, 121, 122, 123, 124, 125, -1,
3681  -1, -1, -1, -1, 131, 132, 133, 134, -1, -1,
3682  137, -1, 139, 1, 141, 3, 4, 5, 6, 7,
3683  8, 9, 10, 11, 12, -1, -1, 15, 16, -1,
3684  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
3685  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
3686  -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
3687  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
3688  -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
3689  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3690  -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
3691  -1, 89, 90, -1, 92, 93, -1, 95, -1, -1,
3692  98, 99, 100, 101, 102, 103, 104, 105, 106, -1,
3693  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3694  -1, -1, -1, -1, -1, -1, -1, -1, 126, 127,
3695  128, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3696  -1, 139, 1, 141, 3, 4, 5, 6, 7, -1,
3697  -1, 10, 11, 12, -1, 14, 15, 16, -1, 18,
3698  19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
3699  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
3700  39, -1, -1, -1, -1, -1, 45, 46, 47, 48,
3701  49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
3702  59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
3703  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3704  -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
3705  89, 90, -1, 92, 93, -1, 95, -1, -1, 98,
3706  99, 100, 101, 102, 103, 104, 105, 106, -1, -1,
3707  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3708  -1, -1, -1, -1, -1, -1, -1, 126, 127, 128,
3709  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3710  139, 1, 141, 3, 4, 5, 6, 7, -1, -1,
3711  10, 11, 12, -1, -1, 15, 16, 17, 18, 19,
3712  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
3713  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
3714  -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
3715  50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
3716  60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
3717  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3718  -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
3719  90, -1, 92, 93, -1, 95, -1, -1, 98, 99,
3720  100, 101, 102, 103, 104, 105, 106, -1, -1, -1,
3721  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3722  -1, -1, -1, -1, -1, -1, 126, 127, 128, -1,
3723  -1, -1, -1, -1, -1, -1, -1, -1, -1, 139,
3724  1, 141, 3, 4, 5, 6, 7, -1, -1, 10,
3725  11, 12, -1, -1, 15, 16, -1, 18, 19, 20,
3726  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
3727  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
3728  -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
3729  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
3730  -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
3731  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3732  -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
3733  -1, 92, 93, -1, 95, -1, -1, 98, 99, 100,
3734  101, 102, 103, 104, 105, 106, -1, -1, -1, -1,
3735  -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
3736  -1, 9, 10, 11, 12, 126, 127, 128, 16, -1,
3737  18, 19, 20, 21, 22, 23, 24, -1, 139, -1,
3738  141, -1, 30, 31, 32, 33, 34, 35, 36, -1,
3739  -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
3740  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
3741  -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
3742  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3743  -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
3744  -1, 89, 90, -1, 92, 93, -1, 95, -1, -1,
3745  98, 99, 100, 101, 102, 103, 104, 105, 106, -1,
3746  -1, -1, -1, -1, -1, -1, 1, -1, 3, 4,
3747  5, 6, 7, -1, -1, -1, 11, 12, 126, 127,
3748  128, 16, -1, 18, 19, 20, 21, 22, 23, 24,
3749  -1, 139, -1, 141, -1, 30, 31, 32, 33, 34,
3750  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
3751  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
3752  55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
3753  -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
3754  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3755  -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
3756  95, -1, -1, 98, 99, 100, 101, 102, 103, 104,
3757  105, 106, -1, -1, -1, -1, -1, -1, -1, -1,
3758  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3759  -1, 126, 127, 128, -1, -1, -1, -1, -1, -1,
3760  -1, -1, 137, -1, 139, 1, 141, 3, 4, 5,
3761  6, 7, -1, -1, -1, 11, 12, -1, -1, -1,
3762  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
3763  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
3764  36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
3765  46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
3766  56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
3767  66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
3768  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3769  86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
3770  -1, -1, 98, 99, 100, 101, 102, 103, 104, 105,
3771  106, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3772  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3773  126, 127, 128, -1, -1, -1, -1, -1, -1, -1,
3774  -1, 137, -1, 139, 1, 141, 3, 4, 5, 6,
3775  7, -1, -1, -1, 11, 12, -1, -1, -1, 16,
3776  -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
3777  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
3778  -1, -1, 39, -1, -1, -1, -1, -1, 45, 46,
3779  47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
3780  57, -1, 59, 60, -1, 62, 63, 64, -1, 66,
3781  67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3782  -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
3783  -1, -1, 89, 90, -1, 92, 93, -1, 95, -1,
3784  -1, 98, 99, 100, 101, 102, 103, 104, 105, 106,
3785  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3786  -1, -1, -1, -1, -1, -1, -1, -1, -1, 126,
3787  127, 128, -1, -1, 131, 1, -1, 3, 4, 5,
3788  6, 7, 139, -1, 141, 11, 12, -1, -1, -1,
3789  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
3790  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
3791  36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
3792  46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
3793  56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
3794  66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
3795  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3796  86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
3797  -1, -1, 98, 99, 100, 101, 102, 103, 104, 105,
3798  106, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3799  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3800  126, 127, 128, -1, -1, 131, -1, -1, -1, -1,
3801  -1, -1, -1, 139, 1, 141, 3, 4, 5, 6,
3802  7, -1, -1, 10, 11, 12, -1, -1, -1, 16,
3803  -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
3804  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
3805  -1, -1, 39, -1, -1, -1, -1, -1, 45, 46,
3806  47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
3807  57, -1, 59, 60, -1, 62, 63, 64, -1, 66,
3808  67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3809  -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
3810  -1, -1, 89, 90, -1, 92, 93, -1, 95, -1,
3811  -1, 98, 99, 100, 101, 102, 103, 104, 105, 106,
3812  -1, -1, -1, -1, -1, -1, -1, 1, -1, 3,
3813  4, 5, 6, 7, -1, -1, -1, 11, 12, 126,
3814  127, 128, 16, -1, 18, 19, 20, 21, 22, 23,
3815  24, -1, 139, -1, 141, -1, 30, 31, 32, 33,
3816  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
3817  -1, 45, 46, 47, 48, 49, 50, 51, 52, 53,
3818  54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
3819  64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
3820  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3821  -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
3822  -1, 95, -1, -1, 98, 99, 100, 101, 102, 103,
3823  104, 105, 106, -1, 108, -1, -1, -1, -1, -1,
3824  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
3825  11, 12, 126, 127, 128, 16, -1, 18, 19, 20,
3826  21, 22, 23, 24, -1, 139, -1, 141, -1, 30,
3827  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
3828  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
3829  51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
3830  -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
3831  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3832  -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
3833  -1, 92, 93, -1, 95, 96, 97, 98, 99, 100,
3834  101, 102, 103, 104, 105, 106, -1, -1, -1, -1,
3835  -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
3836  -1, -1, -1, 11, 12, 126, 127, 128, 16, -1,
3837  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
3838  141, -1, 30, 31, 32, 33, 34, 35, 36, -1,
3839  -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
3840  -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
3841  -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
3842  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3843  -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
3844  -1, 89, 90, -1, 92, 93, -1, -1, -1, -1,
3845  98, 99, 100, 101, 102, 103, 104, 105, 106, -1,
3846  -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
3847  5, -1, 7, -1, -1, -1, 11, 12, 126, 127,
3848  128, 16, -1, 18, 19, 20, 21, 22, 23, 24,
3849  -1, 139, -1, 141, -1, 30, 31, 32, 33, 34,
3850  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
3851  -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
3852  55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
3853  -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
3854  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3855  -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
3856  -1, -1, -1, 98, 99, 100, 101, 102, 103, 104,
3857  105, 106, -1, -1, -1, -1, -1, -1, -1, -1,
3858  -1, 3, 4, 5, 6, 7, -1, -1, -1, 11,
3859  12, 126, 127, 128, 16, -1, 18, 19, 20, 21,
3860  22, 23, 24, -1, -1, -1, 141, -1, 30, 31,
3861  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
3862  -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
3863  52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
3864  62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
3865  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3866  -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
3867  92, 93, -1, 95, -1, -1, 98, 99, 100, 101,
3868  102, 103, 104, 105, 106, -1, -1, -1, -1, -1,
3869  -1, -1, -1, -1, 3, 4, 5, 6, 7, -1,
3870  -1, -1, 11, 12, 126, 127, 128, 16, -1, 18,
3871  19, 20, 21, 22, 23, 24, -1, 139, -1, -1,
3872  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
3873  39, -1, -1, -1, -1, -1, 45, 46, 47, 48,
3874  49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
3875  59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
3876  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3877  -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
3878  89, 90, -1, 92, 93, -1, 95, -1, -1, 98,
3879  99, 100, 101, 102, 103, 104, 105, 106, -1, -1,
3880  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3881  -1, -1, -1, -1, -1, -1, -1, 126, 127, 128,
3882  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3883  139, 3, 4, 5, 6, 7, 8, 9, 10, 11,
3884  12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
3885  22, 23, 24, 25, 26, -1, -1, -1, 30, 31,
3886  32, 33, 34, 35, 36, 37, 38, 39, -1, -1,
3887  -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
3888  52, 53, 54, 55, 56, 57, -1, -1, -1, -1,
3889  -1, -1, -1, -1, 66, 67, 68, 69, 70, 71,
3890  72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
3891  82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
3892  -1, -1, -1, 95, 96, -1, -1, -1, -1, -1,
3893  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3894  -1, -1, -1, -1, 116, 117, 118, 119, 120, 121,
3895  122, 123, 124, 125, -1, 127, 128, -1, -1, -1,
3896  -1, -1, -1, 135, 136, 3, 4, 5, 6, 7,
3897  8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
3898  18, 19, 20, 21, 22, 23, 24, 25, 26, -1,
3899  -1, -1, 30, 31, 32, 33, 34, 35, 36, 37,
3900  38, 39, -1, -1, -1, -1, -1, 45, 46, 47,
3901  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
3902  -1, -1, -1, -1, -1, -1, -1, -1, 66, 67,
3903  68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
3904  78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
3905  -1, -1, -1, -1, -1, -1, -1, 95, 96, -1,
3906  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3907  -1, -1, -1, -1, -1, -1, -1, -1, 116, 117,
3908  118, 119, 120, 121, 122, 123, 124, 125, -1, 127,
3909  128, -1, -1, -1, -1, -1, -1, 135, 3, 4,
3910  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
3911  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
3912  25, 26, -1, -1, -1, 30, 31, 32, 33, 34,
3913  35, 36, 37, 38, 39, -1, -1, -1, -1, -1,
3914  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
3915  -1, 56, -1, -1, -1, -1, -1, -1, -1, -1,
3916  -1, 66, 67, 68, 69, 70, 71, 72, 73, 74,
3917  -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
3918  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3919  95, 96, -1, -1, 99, -1, -1, -1, -1, -1,
3920  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3921  -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
3922  125, -1, 127, 128, -1, -1, -1, -1, -1, -1,
3923  135, 3, 4, 5, 6, 7, 8, 9, 10, 11,
3924  12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
3925  22, 23, 24, 25, 26, -1, -1, -1, 30, 31,
3926  32, 33, 34, 35, 36, 37, 38, 39, -1, -1,
3927  -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
3928  52, 53, -1, -1, 56, -1, -1, -1, -1, -1,
3929  -1, -1, -1, -1, 66, 67, 68, 69, 70, 71,
3930  72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
3931  82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
3932  -1, -1, -1, 95, 96, -1, -1, 99, -1, -1,
3933  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3934  -1, -1, -1, -1, 116, 117, 118, 119, 120, 121,
3935  122, 123, 124, 125, -1, 127, 128, -1, -1, -1,
3936  -1, -1, -1, 135, 3, 4, 5, 6, 7, 8,
3937  9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
3938  19, 20, 21, 22, 23, 24, 25, 26, -1, -1,
3939  -1, 30, 31, 32, 33, 34, 35, 36, 37, 38,
3940  39, -1, -1, -1, -1, -1, 45, 46, 47, 48,
3941  49, 50, 51, 52, 53, -1, -1, 56, -1, -1,
3942  -1, -1, -1, -1, -1, -1, -1, 66, 67, 68,
3943  69, 70, 71, 72, 73, 74, -1, -1, 77, 78,
3944  -1, -1, 81, 82, 83, 84, -1, -1, -1, -1,
3945  -1, -1, -1, -1, -1, -1, 95, 96, -1, -1,
3946  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3947  -1, -1, -1, -1, -1, -1, -1, 116, 117, 118,
3948  119, 120, 121, 122, 123, 124, 125, -1, 127, 128,
3949  3, 4, 5, -1, 7, -1, 135, -1, 11, 12,
3950  -1, -1, -1, 16, -1, 18, 19, 20, 21, 22,
3951  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
3952  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
3953  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
3954  53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
3955  63, 64, -1, -1, -1, -1, -1, -1, -1, -1,
3956  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3957  -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
3958  93, -1, -1, -1, -1, 98, 99, 100, 101, 102,
3959  103, 104, 105, 106, -1, -1, -1, -1, -1, 3,
3960  4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
3961  -1, -1, 16, 126, 18, 19, 20, 21, 22, 23,
3962  24, 134, -1, -1, -1, -1, 30, 31, 32, 33,
3963  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
3964  -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
3965  54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
3966  64, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3967  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3968  -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
3969  -1, -1, -1, -1, 98, 99, 100, 101, 102, 103,
3970  104, 105, 106, -1, -1, -1, -1, -1, 3, 4,
3971  5, 6, 7, -1, -1, -1, 11, 12, -1, -1,
3972  -1, 16, 126, 18, 19, 20, 21, 22, 23, 24,
3973  134, -1, -1, -1, -1, 30, 31, 32, 33, 34,
3974  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
3975  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
3976  55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
3977  -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
3978  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3979  -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
3980  95, -1, -1, 98, 99, 100, 101, 102, 103, 104,
3981  105, 106, -1, -1, -1, -1, -1, -1, -1, -1,
3982  -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
3983  12, 126, 127, 128, 16, -1, 18, 19, 20, 21,
3984  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
3985  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
3986  -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
3987  52, 53, 54, 55, 56, 57, 58, 59, 60, -1,
3988  62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
3989  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3990  -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
3991  92, 93, -1, 95, 96, 97, 98, 99, 100, 101,
3992  102, 103, 104, 105, 106, -1, -1, -1, -1, -1,
3993  -1, -1, -1, -1, 3, 4, 5, 6, 7, -1,
3994  -1, -1, 11, 12, 126, 127, 128, 16, -1, 18,
3995  19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
3996  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
3997  39, -1, -1, -1, -1, -1, 45, 46, -1, 48,
3998  49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
3999  59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
4000  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4001  -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
4002  89, 90, -1, 92, 93, -1, 95, -1, -1, 98,
4003  99, 100, 101, 102, 103, 104, 105, 106, -1, -1,
4004  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
4005  -1, 7, -1, -1, -1, 11, 12, 126, 127, 128,
4006  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
4007  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
4008  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
4009  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
4010  56, 57, 58, 59, 60, -1, 62, 63, 64, -1,
4011  66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
4012  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4013  86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
4014  96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
4015  106, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4016  3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
4017  126, 127, 128, 16, -1, 18, 19, 20, 21, 22,
4018  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
4019  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4020  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
4021  53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
4022  63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
4023  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4024  -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
4025  93, -1, 95, 96, -1, 98, 99, 100, 101, 102,
4026  103, 104, 105, 106, -1, -1, -1, -1, -1, -1,
4027  -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
4028  -1, 11, 12, 126, 127, 128, 16, -1, 18, 19,
4029  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
4030  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4031  -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
4032  50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
4033  60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
4034  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4035  -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
4036  90, -1, 92, 93, -1, -1, 96, 97, 98, 99,
4037  100, 101, 102, 103, 104, 105, 106, -1, -1, -1,
4038  -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
4039  7, -1, -1, -1, 11, 12, 126, 127, 128, 16,
4040  -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
4041  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
4042  -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
4043  -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
4044  57, 58, 59, 60, -1, 62, 63, 64, -1, 66,
4045  67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4046  -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
4047  -1, -1, 89, 90, -1, 92, 93, -1, 95, 96,
4048  -1, 98, 99, 100, 101, 102, 103, 104, 105, 106,
4049  -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
4050  4, 5, -1, 7, -1, -1, -1, 11, 12, 126,
4051  127, 128, 16, -1, 18, 19, 20, 21, 22, 23,
4052  24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
4053  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
4054  -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
4055  54, 55, 56, 57, 58, 59, 60, -1, 62, 63,
4056  64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
4057  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4058  -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
4059  -1, -1, 96, -1, 98, 99, 100, 101, 102, 103,
4060  104, 105, 106, -1, -1, -1, -1, -1, -1, -1,
4061  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4062  11, 12, 126, 127, 128, 16, -1, 18, 19, 20,
4063  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4064  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4065  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4066  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4067  -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
4068  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4069  -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
4070  -1, 92, 93, -1, 95, -1, -1, 98, 99, 100,
4071  101, 102, 103, 104, 105, 106, -1, -1, -1, -1,
4072  -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
4073  -1, -1, -1, 11, 12, 126, 127, 128, 16, -1,
4074  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
4075  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4076  -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
4077  -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4078  -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
4079  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4080  -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
4081  -1, 89, 90, -1, 92, 93, -1, 95, -1, -1,
4082  98, 99, 100, 101, 102, 103, 104, 105, 106, -1,
4083  -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
4084  5, -1, 7, -1, -1, -1, 11, 12, 126, 127,
4085  128, 16, -1, 18, 19, 20, 21, 22, 23, 24,
4086  -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
4087  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
4088  -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
4089  55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
4090  -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
4091  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4092  -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
4093  95, -1, -1, 98, 99, 100, 101, 102, 103, 104,
4094  105, 106, -1, -1, -1, -1, -1, -1, -1, -1,
4095  -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
4096  12, 126, 127, 128, 16, -1, 18, 19, 20, 21,
4097  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
4098  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
4099  -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
4100  52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
4101  62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
4102  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4103  -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
4104  92, 93, -1, 95, -1, -1, 98, 99, 100, 101,
4105  102, 103, 104, 105, 106, -1, -1, -1, -1, -1,
4106  -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
4107  -1, -1, 11, 12, 126, 127, 128, 16, -1, 18,
4108  19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
4109  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
4110  39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
4111  49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
4112  59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
4113  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4114  -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
4115  89, 90, -1, 92, 93, -1, 95, -1, -1, 98,
4116  99, 100, 101, 102, 103, 104, 105, 106, -1, -1,
4117  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
4118  -1, 7, -1, -1, -1, 11, 12, 126, 127, 128,
4119  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
4120  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
4121  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
4122  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
4123  56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
4124  66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
4125  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4126  86, -1, -1, 89, 90, -1, 92, 93, -1, -1,
4127  -1, -1, 98, 99, 100, 101, 102, 103, 104, 105,
4128  106, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4129  3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
4130  126, 127, 128, 16, -1, 18, 19, 20, 21, 22,
4131  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
4132  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4133  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
4134  53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
4135  63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
4136  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4137  -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
4138  93, -1, -1, -1, -1, 98, 99, 100, 101, 102,
4139  103, 104, 105, 106, -1, -1, -1, -1, -1, -1,
4140  -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
4141  -1, 11, 12, 126, 127, 128, 16, -1, 18, 19,
4142  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
4143  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4144  -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
4145  50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
4146  60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
4147  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4148  -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
4149  90, -1, 92, 93, -1, -1, -1, -1, 98, 99,
4150  100, 101, 102, 103, 104, 105, 106, -1, -1, -1,
4151  -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
4152  7, -1, -1, -1, 11, 12, 126, 127, 128, 16,
4153  -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
4154  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
4155  -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
4156  -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
4157  57, -1, 59, 60, -1, 62, 63, 64, -1, -1,
4158  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4159  -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
4160  -1, -1, 89, 90, -1, 92, 93, -1, 95, -1,
4161  -1, 98, 99, 100, 101, 102, 103, 104, 105, 106,
4162  -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
4163  -1, -1, -1, 11, 12, -1, -1, -1, 16, 126,
4164  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
4165  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4166  -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
4167  -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4168  -1, 59, 60, -1, 62, 63, 64, -1, -1, -1,
4169  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4170  -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
4171  -1, 89, 90, -1, 92, 93, -1, 95, -1, -1,
4172  98, 99, 100, 101, 102, 103, 104, 105, 106, -1,
4173  -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
4174  -1, -1, 11, 12, -1, -1, -1, 16, 126, 18,
4175  19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
4176  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
4177  39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
4178  49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
4179  59, 60, -1, 62, 63, 64, -1, -1, -1, -1,
4180  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4181  -1, -1, -1, -1, 83, -1, -1, 86, -1, -1,
4182  89, 90, -1, 92, 93, -1, -1, -1, -1, 98,
4183  99, 100, 101, 102, 103, 104, 105, 106, -1, -1,
4184  -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
4185  -1, 11, 12, -1, -1, -1, 16, 126, 18, 19,
4186  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
4187  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4188  -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
4189  50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
4190  60, -1, 62, 63, 64, -1, -1, -1, -1, -1,
4191  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4192  -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
4193  90, -1, 92, 93, -1, -1, -1, -1, 98, 99,
4194  100, 101, 102, 103, 104, 105, 106, -1, -1, -1,
4195  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4196  11, 12, -1, -1, -1, 16, 126, 18, 19, 20,
4197  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4198  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4199  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4200  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4201  -1, 62, 63, 64, -1, -1, -1, -1, -1, -1,
4202  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4203  -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
4204  -1, 92, 93, -1, -1, -1, -1, 98, 99, 100,
4205  101, 102, 103, 104, 105, 106, -1, -1, -1, -1,
4206  -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
4207  12, -1, -1, -1, 16, 126, 18, 19, 20, 21,
4208  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
4209  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
4210  -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
4211  52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
4212  62, 63, 64, -1, -1, -1, -1, -1, -1, -1,
4213  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4214  -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
4215  92, 93, -1, -1, -1, -1, 98, 99, 100, 101,
4216  102, 103, 104, 105, 106, -1, -1, -1, -1, -1,
4217  3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
4218  -1, -1, -1, 16, 126, 18, 19, 20, 21, 22,
4219  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
4220  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4221  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
4222  53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
4223  63, 64, -1, -1, -1, -1, -1, -1, -1, -1,
4224  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4225  -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
4226  93, -1, -1, -1, -1, 98, 99, 100, 101, 102,
4227  103, 104, 105, 106, -1, -1, -1, -1, -1, -1,
4228  52, 53, -1, -1, 56, -1, -1, -1, -1, -1,
4229  -1, -1, -1, 126, 66, 67, 68, 69, 70, 71,
4230  72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
4231  82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
4232  -1, -1, -1, 95, 96, -1, -1, -1, -1, -1,
4233  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4234  -1, -1, -1, -1, 116, 117, 118, 119, 120, 121,
4235  122, 123, 124, 125, -1, 127, 128, 52, 53, -1,
4236  -1, 56, -1, 135, -1, -1, -1, -1, -1, -1,
4237  -1, 66, 67, 68, 69, 70, 71, 72, 73, 74,
4238  -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
4239  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4240  95, 96, -1, -1, -1, -1, -1, -1, -1, -1,
4241  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4242  -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
4243  125, -1, 127, 128, 52, 53, -1, -1, 56, -1,
4244  135, -1, -1, -1, -1, -1, -1, -1, 66, 67,
4245  68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
4246  78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
4247  -1, -1, -1, -1, -1, -1, -1, 95, 96, -1,
4248  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4249  -1, -1, -1, -1, -1, -1, -1, -1, 116, 117,
4250  118, 119, 120, 121, 122, 123, 124, 125, -1, 127,
4251  128, 52, 53, -1, -1, 56, -1, 135, -1, -1,
4252  -1, -1, -1, -1, -1, 66, 67, 68, 69, 70,
4253  71, 72, 73, 74, -1, -1, 77, 78, -1, -1,
4254  81, 82, 83, 84, -1, -1, -1, -1, -1, -1,
4255  -1, -1, -1, -1, 95, 96, -1, -1, -1, -1,
4256  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4257  -1, -1, -1, -1, -1, 116, 117, 118, 119, 120,
4258  121, 122, 123, 124, 125, -1, 127, 128, 52, 53,
4259  -1, -1, 56, -1, 135, -1, -1, -1, -1, -1,
4260  -1, -1, 66, 67, 68, 69, 70, 71, 72, 73,
4261  74, -1, -1, 77, 78, -1, -1, 81, 82, 83,
4262  84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4263  -1, 95, 96, -1, -1, -1, -1, -1, -1, -1,
4264  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4265  -1, -1, 116, 117, 118, 119, 120, 121, 122, 123,
4266  124, 125, -1, 127, 128, 52, 53, -1, -1, 56,
4267  -1, 135, -1, -1, -1, -1, -1, -1, -1, 66,
4268  67, 68, 69, 70, 71, 72, 73, 74, -1, -1,
4269  77, 78, -1, -1, 81, 82, 83, 84, -1, -1,
4270  -1, -1, -1, -1, -1, -1, -1, -1, 95, 96,
4271  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4272  -1, -1, -1, -1, -1, -1, -1, -1, -1, 116,
4273  117, 118, 119, 120, 121, 122, 123, 124, 125, -1,
4274  127, 128, 52, 53, -1, -1, 56, -1, 135, -1,
4275  -1, -1, -1, -1, -1, -1, 66, 67, 68, 69,
4276  70, 71, 72, 73, 74, -1, -1, 77, 78, -1,
4277  -1, 81, 82, 83, 84, -1, -1, -1, -1, -1,
4278  -1, -1, -1, -1, -1, 95, 96, -1, -1, -1,
4279  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4280  -1, -1, -1, -1, -1, -1, 116, 117, 118, 119,
4281  120, 121, 122, 123, 124, 125, -1, 127, 128, 52,
4282  53, -1, -1, 56, -1, 135, -1, -1, -1, -1,
4283  -1, -1, -1, 66, 67, 68, 69, 70, 71, 72,
4284  73, 74, -1, -1, 77, 78, -1, -1, 81, 82,
4285  83, 84, -1, -1, -1, -1, -1, -1, -1, -1,
4286  -1, -1, 95, 96, -1, -1, -1, -1, -1, -1,
4287  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4288  -1, -1, -1, 116, 117, 118, 119, 120, 121, 122,
4289  123, 124, 125, -1, 127, 128, 52, 53, -1, -1,
4290  56, -1, 135, -1, -1, -1, -1, -1, -1, -1,
4291  66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
4292  -1, 77, 78, -1, -1, 81, 82, 83, 84, -1,
4293  -1, -1, -1, -1, -1, -1, -1, -1, -1, 95,
4294  96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4295  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4296  116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
4297  -1, 127, 128, 52, 53, -1, -1, 56, -1, 135,
4298  -1, -1, -1, -1, -1, -1, -1, 66, 67, 68,
4299  69, 70, 71, 72, 73, 74, -1, -1, 77, 78,
4300  -1, -1, 81, 82, 83, 84, -1, -1, -1, -1,
4301  -1, -1, -1, -1, -1, -1, 95, 96, -1, -1,
4302  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4303  -1, -1, -1, -1, -1, -1, -1, 116, 117, 118,
4304  119, 120, 121, 122, 123, 124, 125, -1, 127, 128,
4305  52, 53, -1, -1, 56, -1, 135, -1, -1, -1,
4306  -1, -1, -1, -1, 66, 67, 68, 69, 70, 71,
4307  72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
4308  82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
4309  -1, -1, -1, 95, 96, -1, -1, -1, -1, -1,
4310  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4311  -1, -1, -1, -1, 116, 117, 118, 119, 120, 121,
4312  122, 123, 124, 125, -1, 127, 128, 52, 53, -1,
4313  -1, 56, -1, 135, -1, -1, -1, -1, -1, -1,
4314  -1, 66, 67, 68, 69, 70, 71, 72, 73, 74,
4315  -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
4316  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4317  95, 96, -1, -1, -1, -1, -1, -1, -1, -1,
4318  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4319  -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
4320  125, -1, 127, 128, 52, 53, -1, -1, 56, -1,
4321  135, -1, -1, -1, -1, -1, -1, -1, 66, 67,
4322  68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
4323  78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
4324  -1, -1, -1, -1, -1, -1, -1, 95, 96, 68,
4325  69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
4326  79, 80, -1, -1, 83, 84, -1, -1, 116, 117,
4327  118, 119, 120, 121, 122, 123, 124, 125, -1, 127,
4328  128, -1, -1, -1, -1, -1, -1, 135, -1, -1,
4329  -1, -1, -1, -1, -1, 114, -1, 116, 117, 118,
4330  119, 120, 121, 122, 123, 124, 125, -1, -1, -1,
4331  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4332  -1, -1, 141
4333 };
4334 
4335 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
4336  symbol of state STATE-NUM. */
4337 static const yytype_uint16 yystos[] =
4338 {
4339  0, 143, 144, 0, 1, 3, 4, 5, 6, 7,
4340  11, 12, 16, 18, 19, 20, 21, 22, 23, 24,
4341  30, 31, 32, 33, 34, 35, 36, 39, 45, 46,
4342  47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
4343  57, 59, 60, 62, 63, 64, 66, 67, 86, 89,
4344  90, 92, 93, 95, 98, 99, 100, 101, 102, 103,
4345  104, 105, 106, 126, 127, 128, 145, 146, 147, 154,
4346  156, 157, 159, 160, 163, 164, 165, 167, 168, 169,
4347  171, 172, 182, 196, 214, 215, 216, 217, 218, 219,
4348  220, 221, 222, 223, 224, 249, 250, 264, 265, 266,
4349  267, 268, 269, 270, 273, 275, 276, 288, 290, 291,
4350  292, 293, 294, 295, 296, 327, 338, 147, 3, 4,
4351  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
4352  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
4353  25, 26, 30, 31, 32, 33, 34, 35, 36, 37,
4354  38, 39, 45, 46, 47, 48, 49, 50, 51, 52,
4355  53, 56, 66, 67, 68, 69, 70, 71, 72, 73,
4356  74, 77, 78, 81, 82, 83, 84, 95, 96, 116,
4357  117, 118, 119, 120, 121, 122, 123, 124, 125, 127,
4358  128, 135, 175, 176, 177, 178, 180, 181, 288, 290,
4359  39, 58, 86, 89, 95, 96, 97, 127, 164, 172,
4360  182, 184, 189, 192, 194, 214, 292, 293, 295, 296,
4361  325, 326, 189, 189, 136, 190, 191, 136, 186, 190,
4362  136, 141, 332, 54, 177, 332, 148, 130, 21, 22,
4363  30, 31, 32, 163, 182, 214, 182, 56, 1, 47,
4364  89, 150, 151, 152, 154, 166, 167, 338, 157, 198,
4365  185, 194, 325, 338, 184, 324, 325, 338, 46, 86,
4366  126, 134, 171, 196, 214, 292, 293, 296, 242, 243,
4367  54, 55, 57, 175, 280, 289, 279, 280, 281, 140,
4368  271, 140, 277, 140, 274, 140, 278, 59, 60, 159,
4369  182, 182, 139, 141, 331, 336, 337, 40, 41, 42,
4370  43, 44, 37, 38, 26, 130, 186, 190, 255, 28,
4371  247, 113, 134, 89, 95, 168, 113, 68, 69, 70,
4372  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
4373  83, 84, 114, 116, 117, 118, 119, 120, 121, 122,
4374  123, 124, 125, 85, 132, 133, 197, 157, 158, 158,
4375  201, 203, 158, 331, 337, 86, 165, 172, 214, 230,
4376  292, 293, 296, 52, 56, 83, 86, 173, 174, 214,
4377  292, 293, 296, 174, 33, 34, 35, 36, 49, 50,
4378  51, 52, 56, 136, 175, 294, 322, 85, 133, 330,
4379  255, 267, 87, 87, 134, 184, 56, 184, 184, 184,
4380  113, 88, 134, 193, 338, 85, 132, 133, 87, 87,
4381  134, 193, 189, 332, 333, 189, 188, 189, 194, 325,
4382  338, 157, 333, 157, 54, 63, 64, 155, 136, 183,
4383  130, 150, 85, 133, 87, 154, 153, 166, 137, 331,
4384  337, 333, 199, 333, 138, 134, 141, 335, 134, 335,
4385  131, 335, 332, 56, 59, 60, 168, 170, 134, 85,
4386  132, 133, 244, 61, 107, 109, 110, 282, 110, 282,
4387  110, 65, 282, 110, 110, 272, 282, 110, 61, 110,
4388  110, 110, 272, 110, 61, 110, 68, 68, 139, 147,
4389  158, 158, 158, 158, 154, 157, 157, 257, 256, 94,
4390  161, 248, 95, 159, 184, 194, 195, 166, 134, 171,
4391  134, 156, 159, 172, 182, 184, 195, 182, 182, 182,
4392  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
4393  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
4394  182, 182, 182, 52, 53, 56, 180, 254, 328, 329,
4395  188, 52, 53, 56, 180, 253, 328, 149, 150, 13,
4396  226, 336, 226, 158, 158, 331, 17, 258, 56, 85,
4397  132, 133, 25, 157, 52, 56, 173, 1, 117, 297,
4398  336, 85, 132, 133, 210, 323, 211, 330, 52, 56,
4399  328, 159, 182, 159, 182, 179, 182, 184, 95, 184,
4400  192, 325, 52, 56, 188, 52, 56, 326, 333, 137,
4401  333, 134, 134, 333, 177, 200, 182, 145, 131, 328,
4402  328, 182, 130, 333, 152, 333, 325, 134, 170, 52,
4403  56, 188, 52, 56, 52, 54, 55, 56, 57, 58,
4404  68, 89, 95, 96, 97, 120, 123, 136, 245, 300,
4405  302, 303, 304, 305, 306, 307, 310, 311, 312, 313,
4406  316, 317, 318, 319, 320, 284, 283, 140, 282, 140,
4407  140, 140, 182, 182, 76, 118, 237, 238, 338, 237,
4408  162, 237, 184, 134, 333, 170, 134, 113, 44, 332,
4409  87, 87, 186, 190, 252, 332, 334, 87, 87, 186,
4410  190, 251, 10, 225, 8, 260, 338, 150, 13, 150,
4411  27, 227, 336, 227, 258, 194, 225, 52, 56, 188,
4412  52, 56, 205, 208, 336, 298, 207, 52, 56, 173,
4413  188, 149, 157, 136, 299, 302, 212, 186, 187, 190,
4414  338, 44, 177, 184, 193, 87, 87, 334, 87, 87,
4415  325, 157, 131, 145, 335, 168, 334, 113, 184, 52,
4416  89, 95, 231, 232, 233, 304, 302, 29, 111, 246,
4417  134, 301, 134, 321, 338, 52, 134, 321, 134, 301,
4418  52, 134, 301, 52, 285, 54, 55, 57, 287, 296,
4419  52, 58, 234, 236, 239, 306, 308, 309, 312, 314,
4420  315, 318, 320, 332, 150, 150, 237, 150, 95, 184,
4421  170, 182, 115, 159, 182, 159, 182, 161, 186, 138,
4422  87, 159, 182, 159, 182, 161, 187, 184, 195, 261,
4423  338, 15, 229, 338, 14, 228, 229, 229, 202, 204,
4424  225, 134, 226, 334, 158, 336, 158, 149, 334, 225,
4425  333, 302, 149, 336, 175, 255, 247, 182, 87, 134,
4426  333, 131, 184, 233, 134, 304, 134, 333, 239, 150,
4427  150, 300, 305, 316, 318, 307, 312, 320, 306, 313,
4428  318, 306, 286, 113, 86, 214, 239, 118, 134, 235,
4429  134, 321, 321, 134, 235, 134, 235, 139, 10, 131,
4430  150, 10, 184, 182, 159, 182, 88, 262, 338, 150,
4431  9, 263, 338, 158, 225, 225, 150, 150, 184, 150,
4432  227, 209, 336, 225, 333, 225, 213, 333, 232, 134,
4433  95, 231, 137, 10, 131, 134, 301, 134, 301, 321,
4434  134, 301, 134, 301, 301, 150, 214, 56, 85, 118,
4435  234, 315, 318, 308, 312, 306, 314, 318, 306, 52,
4436  240, 241, 303, 131, 86, 172, 214, 292, 293, 296,
4437  226, 150, 226, 225, 225, 229, 258, 259, 206, 149,
4438  299, 134, 232, 134, 304, 306, 318, 306, 306, 108,
4439  52, 56, 134, 235, 134, 235, 321, 134, 235, 134,
4440  235, 235, 134, 332, 56, 85, 132, 133, 150, 150,
4441  150, 225, 149, 232, 134, 301, 134, 301, 301, 301,
4442  306, 318, 306, 306, 241, 52, 56, 188, 52, 56,
4443  260, 228, 225, 225, 232, 306, 235, 134, 235, 235,
4444  235, 334, 301, 306, 235
4445 };
4446 
4447 #define yyerrok (yyerrstatus = 0)
4448 #define yyclearin (yychar = YYEMPTY)
4449 #define YYEMPTY (-2)
4450 #define YYEOF 0
4451 
4452 #define YYACCEPT goto yyacceptlab
4453 #define YYABORT goto yyabortlab
4454 #define YYERROR goto yyerrorlab
4455 
4456 
4457 /* Like YYERROR except do call yyerror. This remains here temporarily
4458  to ease the transition to the new meaning of YYERROR, for GCC.
4459  Once GCC version 2 has supplanted version 1, this can go. */
4460 
4461 #define YYFAIL goto yyerrlab
4462 
4463 #define YYRECOVERING() (!!yyerrstatus)
4464 
4465 #define YYBACKUP(Token, Value) \
4466 do \
4467  if (yychar == YYEMPTY && yylen == 1) \
4468  { \
4469  yychar = (Token); \
4470  yylval = (Value); \
4471  yytoken = YYTRANSLATE (yychar); \
4472  YYPOPSTACK (1); \
4473  goto yybackup; \
4474  } \
4475  else \
4476  { \
4477  parser_yyerror (parser, YY_("syntax error: cannot back up")); \
4478  YYERROR; \
4479  } \
4480 while (YYID (0))
4481 
4482 
4483 #define YYTERROR 1
4484 #define YYERRCODE 256
4485 
4486 
4487 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
4488  If N is 0, then set CURRENT to the empty location which ends
4489  the previous symbol: RHS[0] (always defined). */
4490 
4491 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
4492 #ifndef YYLLOC_DEFAULT
4493 # define YYLLOC_DEFAULT(Current, Rhs, N) \
4494  do \
4495  if (YYID (N)) \
4496  { \
4497  (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
4498  (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
4499  (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
4500  (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
4501  } \
4502  else \
4503  { \
4504  (Current).first_line = (Current).last_line = \
4505  YYRHSLOC (Rhs, 0).last_line; \
4506  (Current).first_column = (Current).last_column = \
4507  YYRHSLOC (Rhs, 0).last_column; \
4508  } \
4509  while (YYID (0))
4510 #endif
4511 
4512 
4513 /* YY_LOCATION_PRINT -- Print the location on the stream.
4514  This macro was not mandated originally: define only if we know
4515  we won't break user code: when these are the locations we know. */
4516 
4517 #ifndef YY_LOCATION_PRINT
4518 # if YYLTYPE_IS_TRIVIAL
4519 # define YY_LOCATION_PRINT(File, Loc) \
4520  fprintf (File, "%d.%d-%d.%d", \
4521  (Loc).first_line, (Loc).first_column, \
4522  (Loc).last_line, (Loc).last_column)
4523 # else
4524 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
4525 # endif
4526 #endif
4527 
4528 
4529 /* YYLEX -- calling `yylex' with the right arguments. */
4530 
4531 #ifdef YYLEX_PARAM
4532 # define YYLEX yylex (&yylval, YYLEX_PARAM)
4533 #else
4534 # define YYLEX yylex (&yylval)
4535 #endif
4536 
4537 /* Enable debugging if requested. */
4538 #if YYDEBUG
4539 
4540 # ifndef YYFPRINTF
4541 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
4542 # define YYFPRINTF fprintf
4543 # endif
4544 
4545 # define YYDPRINTF(Args) \
4546 do { \
4547  if (yydebug) \
4548  YYFPRINTF Args; \
4549 } while (YYID (0))
4550 
4551 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
4552 do { \
4553  if (yydebug) \
4554  { \
4555  YYFPRINTF (stderr, "%s ", Title); \
4556  yy_symbol_print (stderr, \
4557  Type, Value, parser); \
4558  YYFPRINTF (stderr, "\n"); \
4559  } \
4560 } while (YYID (0))
4561 
4562 
4563 /*--------------------------------.
4564 | Print this symbol on YYOUTPUT. |
4565 `--------------------------------*/
4566 
4567 /*ARGSUSED*/
4568 #if (defined __STDC__ || defined __C99__FUNC__ \
4569  || defined __cplusplus || defined _MSC_VER)
4570 static void
4571 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
4572 #else
4573 static void
4574 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
4575  FILE *yyoutput;
4576  int yytype;
4577  YYSTYPE const * const yyvaluep;
4578  struct parser_params *parser;
4579 #endif
4580 {
4581  if (!yyvaluep)
4582  return;
4583  YYUSE (parser);
4584 # ifdef YYPRINT
4585  if (yytype < YYNTOKENS)
4586  YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
4587 # else
4588  YYUSE (yyoutput);
4589 # endif
4590  switch (yytype)
4591  {
4592  default:
4593  break;
4594  }
4595 }
4596 
4597 
4598 /*--------------------------------.
4599 | Print this symbol on YYOUTPUT. |
4600 `--------------------------------*/
4601 
4602 #if (defined __STDC__ || defined __C99__FUNC__ \
4603  || defined __cplusplus || defined _MSC_VER)
4604 static void
4605 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
4606 #else
4607 static void
4608 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
4609  FILE *yyoutput;
4610  int yytype;
4611  YYSTYPE const * const yyvaluep;
4612  struct parser_params *parser;
4613 #endif
4614 {
4615  if (yytype < YYNTOKENS)
4616  YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
4617  else
4618  YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
4619 
4620  yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
4621  YYFPRINTF (yyoutput, ")");
4622 }
4623 
4624 /*------------------------------------------------------------------.
4625 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
4626 | TOP (included). |
4627 `------------------------------------------------------------------*/
4628 
4629 #if (defined __STDC__ || defined __C99__FUNC__ \
4630  || defined __cplusplus || defined _MSC_VER)
4631 static void
4632 yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
4633 #else
4634 static void
4635 yy_stack_print (bottom, top)
4636  yytype_int16 *bottom;
4637  yytype_int16 *top;
4638 #endif
4639 {
4640  YYFPRINTF (stderr, "Stack now");
4641  for (; bottom <= top; ++bottom)
4642  YYFPRINTF (stderr, " %d", *bottom);
4643  YYFPRINTF (stderr, "\n");
4644 }
4645 
4646 # define YY_STACK_PRINT(Bottom, Top) \
4647 do { \
4648  if (yydebug) \
4649  yy_stack_print ((Bottom), (Top)); \
4650 } while (YYID (0))
4651 
4652 
4653 /*------------------------------------------------.
4654 | Report that the YYRULE is going to be reduced. |
4655 `------------------------------------------------*/
4656 
4657 #if (defined __STDC__ || defined __C99__FUNC__ \
4658  || defined __cplusplus || defined _MSC_VER)
4659 static void
4660 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
4661 #else
4662 static void
4663 yy_reduce_print (yyvsp, yyrule, parser)
4664  YYSTYPE *yyvsp;
4665  int yyrule;
4666  struct parser_params *parser;
4667 #endif
4669  int yynrhs = yyr2[yyrule];
4670  int yyi;
4671  unsigned long int yylno = yyrline[yyrule];
4672  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
4673  yyrule - 1, yylno);
4674  /* The symbols being reduced. */
4675  for (yyi = 0; yyi < yynrhs; yyi++)
4676  {
4677  fprintf (stderr, " $%d = ", yyi + 1);
4678  yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
4679  &(yyvsp[(yyi + 1) - (yynrhs)])
4680  , parser);
4681  fprintf (stderr, "\n");
4682  }
4683 }
4684 
4685 # define YY_REDUCE_PRINT(Rule) \
4686 do { \
4687  if (yydebug) \
4688  yy_reduce_print (yyvsp, Rule, parser); \
4689 } while (YYID (0))
4690 
4691 /* Nonzero means print parse trace. It is left uninitialized so that
4692  multiple parsers can coexist. */
4693 #ifndef yydebug
4694 int yydebug;
4695 #endif
4696 #else /* !YYDEBUG */
4697 # define YYDPRINTF(Args)
4698 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
4699 # define YY_STACK_PRINT(Bottom, Top)
4700 # define YY_REDUCE_PRINT(Rule)
4701 #endif /* !YYDEBUG */
4702 
4703 
4704 /* YYINITDEPTH -- initial size of the parser's stacks. */
4705 #ifndef YYINITDEPTH
4706 # define YYINITDEPTH 200
4707 #endif
4708 
4709 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
4710  if the built-in stack extension method is used).
4711 
4712  Do not make this value too large; the results are undefined if
4713  YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
4714  evaluated with infinite-precision integer arithmetic. */
4715 
4716 #ifndef YYMAXDEPTH
4717 # define YYMAXDEPTH 10000
4718 #endif
4719 
4720 
4721 
4722 #if YYERROR_VERBOSE
4723 
4724 # ifndef yystrlen
4725 # if defined __GLIBC__ && defined _STRING_H
4726 # define yystrlen strlen
4727 # else
4728 /* Return the length of YYSTR. */
4729 #if (defined __STDC__ || defined __C99__FUNC__ \
4730  || defined __cplusplus || defined _MSC_VER)
4731 static YYSIZE_T
4732 yystrlen (const char *yystr)
4733 #else
4734 static YYSIZE_T
4735 yystrlen (yystr)
4736  const char *yystr;
4737 #endif
4739  YYSIZE_T yylen;
4740  for (yylen = 0; yystr[yylen]; yylen++)
4741  continue;
4742  return yylen;
4743 }
4744 # endif
4745 # endif
4746 
4747 # ifndef yystpcpy
4748 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
4749 # define yystpcpy stpcpy
4750 # else
4751 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
4752  YYDEST. */
4753 #if (defined __STDC__ || defined __C99__FUNC__ \
4754  || defined __cplusplus || defined _MSC_VER)
4755 static char *
4756 yystpcpy (char *yydest, const char *yysrc)
4757 #else
4758 static char *
4759 yystpcpy (yydest, yysrc)
4760  char *yydest;
4761  const char *yysrc;
4762 #endif
4763 {
4764  char *yyd = yydest;
4765  const char *yys = yysrc;
4766 
4767  while ((*yyd++ = *yys++) != '\0')
4768  continue;
4769 
4770  return yyd - 1;
4771 }
4772 # endif
4773 # endif
4774 
4775 # ifndef yytnamerr
4776 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
4777  quotes and backslashes, so that it's suitable for yyerror. The
4778  heuristic is that double-quoting is unnecessary unless the string
4779  contains an apostrophe, a comma, or backslash (other than
4780  backslash-backslash). YYSTR is taken from yytname. If YYRES is
4781  null, do not copy; instead, return the length of what the result
4782  would have been. */
4783 static YYSIZE_T
4784 yytnamerr (char *yyres, const char *yystr)
4785 {
4786  if (*yystr == '"')
4787  {
4788  YYSIZE_T yyn = 0;
4789  char const *yyp = yystr;
4790 
4791  for (;;)
4792  switch (*++yyp)
4793  {
4794  case '\'':
4795  case ',':
4796  goto do_not_strip_quotes;
4797 
4798  case '\\':
4799  if (*++yyp != '\\')
4800  goto do_not_strip_quotes;
4801  /* Fall through. */
4802  default:
4803  if (yyres)
4804  yyres[yyn] = *yyp;
4805  yyn++;
4806  break;
4807 
4808  case '"':
4809  if (yyres)
4810  yyres[yyn] = '\0';
4811  return yyn;
4812  }
4813  do_not_strip_quotes: ;
4814  }
4815 
4816  if (! yyres)
4817  return yystrlen (yystr);
4818 
4819  return yystpcpy (yyres, yystr) - yyres;
4820 }
4821 # endif
4822 
4823 /* Copy into YYRESULT an error message about the unexpected token
4824  YYCHAR while in state YYSTATE. Return the number of bytes copied,
4825  including the terminating null byte. If YYRESULT is null, do not
4826  copy anything; just return the number of bytes that would be
4827  copied. As a special case, return 0 if an ordinary "syntax error"
4828  message will do. Return YYSIZE_MAXIMUM if overflow occurs during
4829  size calculation. */
4830 static YYSIZE_T
4832 {
4833  int yyn = yypact[yystate];
4834 
4835  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
4836  return 0;
4837  else
4838  {
4839  int yytype = YYTRANSLATE (yychar);
4840  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
4841  YYSIZE_T yysize = yysize0;
4842  YYSIZE_T yysize1;
4843  int yysize_overflow = 0;
4844  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
4845  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
4846  int yyx;
4847 
4848 # if 0
4849  /* This is so xgettext sees the translatable formats that are
4850  constructed on the fly. */
4851  YY_("syntax error, unexpected %s");
4852  YY_("syntax error, unexpected %s, expecting %s");
4853  YY_("syntax error, unexpected %s, expecting %s or %s");
4854  YY_("syntax error, unexpected %s, expecting %s or %s or %s");
4855  YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
4856 # endif
4857  char *yyfmt;
4858  char const *yyf;
4859  static char const yyunexpected[] = "syntax error, unexpected %s";
4860  static char const yyexpecting[] = ", expecting %s";
4861  static char const yyor[] = " or %s";
4862  char yyformat[sizeof yyunexpected
4863  + sizeof yyexpecting - 1
4864  + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
4865  * (sizeof yyor - 1))];
4866  char const *yyprefix = yyexpecting;
4867 
4868  /* Start YYX at -YYN if negative to avoid negative indexes in
4869  YYCHECK. */
4870  int yyxbegin = yyn < 0 ? -yyn : 0;
4871 
4872  /* Stay within bounds of both yycheck and yytname. */
4873  int yychecklim = YYLAST - yyn + 1;
4874  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
4875  int yycount = 1;
4876 
4877  yyarg[0] = yytname[yytype];
4878  yyfmt = yystpcpy (yyformat, yyunexpected);
4879 
4880  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
4881  if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
4882  {
4883  if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
4884  {
4885  yycount = 1;
4886  yysize = yysize0;
4887  yyformat[sizeof yyunexpected - 1] = '\0';
4888  break;
4889  }
4890  yyarg[yycount++] = yytname[yyx];
4891  yysize1 = yysize + yytnamerr (0, yytname[yyx]);
4892  yysize_overflow |= (yysize1 < yysize);
4893  yysize = yysize1;
4894  yyfmt = yystpcpy (yyfmt, yyprefix);
4895  yyprefix = yyor;
4896  }
4897 
4898  yyf = YY_(yyformat);
4899  yysize1 = yysize + yystrlen (yyf);
4900  yysize_overflow |= (yysize1 < yysize);
4901  yysize = yysize1;
4902 
4903  if (yysize_overflow)
4904  return YYSIZE_MAXIMUM;
4905 
4906  if (yyresult)
4907  {
4908  /* Avoid sprintf, as that infringes on the user's name space.
4909  Don't have undefined behavior even if the translation
4910  produced a string with the wrong number of "%s"s. */
4911  char *yyp = yyresult;
4912  int yyi = 0;
4913  while ((*yyp = *yyf) != '\0')
4914  {
4915  if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
4916  {
4917  yyp += yytnamerr (yyp, yyarg[yyi++]);
4918  yyf += 2;
4919  }
4920  else
4921  {
4922  yyp++;
4923  yyf++;
4924  }
4925  }
4926  }
4927  return yysize;
4928  }
4929 }
4930 #endif /* YYERROR_VERBOSE */
4931 
4932 
4933 /*-----------------------------------------------.
4934 | Release the memory associated to this symbol. |
4935 `-----------------------------------------------*/
4936 
4937 /*ARGSUSED*/
4938 #if (defined __STDC__ || defined __C99__FUNC__ \
4939  || defined __cplusplus || defined _MSC_VER)
4940 static void
4941 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
4942 #else
4943 static void
4944 yydestruct (yymsg, yytype, yyvaluep, parser)
4945  const char *yymsg;
4946  int yytype;
4947  YYSTYPE *yyvaluep;
4948  struct parser_params *parser;
4949 #endif
4950 {
4951  YYUSE (yyvaluep);
4952  YYUSE (parser);
4953 
4954  if (!yymsg)
4955  yymsg = "Deleting";
4956  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
4957 
4958  switch (yytype)
4959  {
4960 
4961  default:
4962  break;
4963  }
4964 }
4965 
4966 
4967 /* Prevent warnings from -Wmissing-prototypes. */
4968 
4969 #ifdef YYPARSE_PARAM
4970 #if defined __STDC__ || defined __cplusplus
4971 int yyparse (void *YYPARSE_PARAM);
4972 #else
4973 int yyparse ();
4974 #endif
4975 #else /* ! YYPARSE_PARAM */
4976 #if defined __STDC__ || defined __cplusplus
4977 int yyparse (struct parser_params *parser);
4978 #else
4979 int yyparse ();
4980 #endif
4981 #endif /* ! YYPARSE_PARAM */
4982 
4983 
4984 
4985 
4986 
4987 
4988 /*----------.
4989 | yyparse. |
4990 `----------*/
4991 
4992 #ifdef YYPARSE_PARAM
4993 #if (defined __STDC__ || defined __C99__FUNC__ \
4994  || defined __cplusplus || defined _MSC_VER)
4995 int
4996 yyparse (void *YYPARSE_PARAM)
4997 #else
4998 int
4999 yyparse (YYPARSE_PARAM)
5000  void *YYPARSE_PARAM;
5001 #endif
5002 #else /* ! YYPARSE_PARAM */
5003 #if (defined __STDC__ || defined __C99__FUNC__ \
5004  || defined __cplusplus || defined _MSC_VER)
5005 int
5006 yyparse (struct parser_params *parser)
5007 #else
5008 int
5009 yyparse (parser)
5010  struct parser_params *parser;
5011 #endif
5012 #endif
5014  /* The look-ahead symbol. */
5015 int yychar;
5016 
5017 /* The semantic value of the look-ahead symbol. */
5018 YYSTYPE yylval;
5019 
5020 /* Number of syntax errors so far. */
5022 
5023  int yystate;
5024  int yyn;
5026  /* Number of tokens to shift before error messages enabled. */
5028  /* Look-ahead token as an internal (translated) token number. */
5029  int yytoken = 0;
5030 #if YYERROR_VERBOSE
5031  /* Buffer for error messages, and its allocated size. */
5032  char yymsgbuf[128];
5033  char *yymsg = yymsgbuf;
5035 #endif
5036 
5037  /* Three stacks and their tools:
5038  `yyss': related to states,
5039  `yyvs': related to semantic values,
5040  `yyls': related to locations.
5041 
5042  Refer to the stacks thru separate pointers, to allow yyoverflow
5043  to reallocate them elsewhere. */
5044 
5045  /* The state stack. */
5046  yytype_int16 yyssa[YYINITDEPTH];
5047  yytype_int16 *yyss = yyssa;
5048  yytype_int16 *yyssp;
5049 
5050  /* The semantic value stack. */
5053  YYSTYPE *yyvsp;
5054 
5055 
5056 
5057 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
5058 
5060 
5061  /* The variables used to return semantic value and location from the
5062  action routines. */
5064 
5065 
5066  /* The number of symbols on the RHS of the reduced rule.
5067  Keep to zero when no symbol should be popped. */
5068  int yylen = 0;
5069 
5070  YYDPRINTF ((stderr, "Starting parse\n"));
5071 
5072  yystate = 0;
5073  yyerrstatus = 0;
5074  yynerrs = 0;
5075  yychar = YYEMPTY; /* Cause a token to be read. */
5076 
5077  /* Initialize stack pointers.
5078  Waste one element of value and location stack
5079  so that they stay on the same level as the state stack.
5080  The wasted elements are never initialized. */
5081 
5082  yyssp = yyss;
5083  yyvsp = yyvs;
5084 
5086 
5087 /*------------------------------------------------------------.
5088 | yynewstate -- Push a new state, which is found in yystate. |
5089 `------------------------------------------------------------*/
5090  yynewstate:
5091  /* In all cases, when you get here, the value and location stacks
5092  have just been pushed. So pushing a state here evens the stacks. */
5093  yyssp++;
5094 
5095  yysetstate:
5096  *yyssp = yystate;
5097 
5098  if (yyss + yystacksize - 1 <= yyssp)
5099  {
5100  /* Get the current used size of the three stacks, in elements. */
5101  YYSIZE_T yysize = yyssp - yyss + 1;
5102 
5103 #ifdef yyoverflow
5104  {
5105  /* Give user a chance to reallocate the stack. Use copies of
5106  these so that the &'s don't force the real ones into
5107  memory. */
5108  YYSTYPE *yyvs1 = yyvs;
5109  yytype_int16 *yyss1 = yyss;
5110 
5111 
5112  /* Each stack pointer address is followed by the size of the
5113  data in use in that stack, in bytes. This used to be a
5114  conditional around just the two extra args, but that might
5115  be undefined if yyoverflow is a macro. */
5116  yyoverflow (YY_("memory exhausted"),
5117  &yyss1, yysize * sizeof (*yyssp),
5118  &yyvs1, yysize * sizeof (*yyvsp),
5119 
5120  &yystacksize);
5121 
5122  yyss = yyss1;
5123  yyvs = yyvs1;
5124  }
5125 #else /* no yyoverflow */
5126 # ifndef YYSTACK_RELOCATE
5127  goto yyexhaustedlab;
5128 # else
5129  /* Extend the stack our own way. */
5130  if (YYMAXDEPTH <= yystacksize)
5131  goto yyexhaustedlab;
5132  yystacksize *= 2;
5133  if (YYMAXDEPTH < yystacksize)
5134  yystacksize = YYMAXDEPTH;
5135 
5136  {
5137  yytype_int16 *yyss1 = yyss;
5138  union yyalloc *yyptr =
5139  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
5140  if (! yyptr)
5141  goto yyexhaustedlab;
5142  YYSTACK_RELOCATE (yyss);
5143  YYSTACK_RELOCATE (yyvs);
5144 
5145 # undef YYSTACK_RELOCATE
5146  if (yyss1 != yyssa)
5147  YYSTACK_FREE (yyss1);
5148  }
5149 # endif
5150 #endif /* no yyoverflow */
5151 
5152  yyssp = yyss + yysize - 1;
5153  yyvsp = yyvs + yysize - 1;
5154 
5155 
5156  YYDPRINTF ((stderr, "Stack size increased to %lu\n",
5157  (unsigned long int) yystacksize));
5158 
5159  if (yyss + yystacksize - 1 <= yyssp)
5160  YYABORT;
5161  }
5162 
5163  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
5164 
5165  goto yybackup;
5166 
5167 /*-----------.
5168 | yybackup. |
5169 `-----------*/
5170 yybackup:
5171 
5172  /* Do appropriate processing given the current state. Read a
5173  look-ahead token if we need one and don't already have one. */
5174 
5175  /* First try to decide what to do without reference to look-ahead token. */
5176  yyn = yypact[yystate];
5177  if (yyn == YYPACT_NINF)
5179 
5180  /* Not known => get a look-ahead token if don't already have one. */
5181 
5182  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
5183  if (yychar == YYEMPTY)
5184  {
5185  YYDPRINTF ((stderr, "Reading a token: "));
5186  yychar = YYLEX;
5187  }
5188 
5189  if (yychar <= YYEOF)
5190  {
5191  yychar = yytoken = YYEOF;
5192  YYDPRINTF ((stderr, "Now at end of input.\n"));
5193  }
5194  else
5195  {
5196  yytoken = YYTRANSLATE (yychar);
5197  YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
5198  }
5199 
5200  /* If the proper action on seeing token YYTOKEN is to reduce or to
5201  detect an error, take that action. */
5202  yyn += yytoken;
5203  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
5204  goto yydefault;
5205  yyn = yytable[yyn];
5206  if (yyn <= 0)
5207  {
5208  if (yyn == 0 || yyn == YYTABLE_NINF)
5209  goto yyerrlab;
5210  yyn = -yyn;
5211  goto yyreduce;
5212  }
5213 
5214  if (yyn == YYFINAL)
5216 
5217  /* Count tokens shifted since error; after three, turn off error
5218  status. */
5219  if (yyerrstatus)
5220  yyerrstatus--;
5221 
5222  /* Shift the look-ahead token. */
5223  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
5224 
5225  /* Discard the shifted token unless it is eof. */
5226  if (yychar != YYEOF)
5227  yychar = YYEMPTY;
5228 
5229  yystate = yyn;
5230  *++yyvsp = yylval;
5231 
5233 
5234 
5235 /*-----------------------------------------------------------.
5236 | yydefault -- do the default action for the current state. |
5237 `-----------------------------------------------------------*/
5238 yydefault:
5239  yyn = yydefact[yystate];
5240  if (yyn == 0)
5241  goto yyerrlab;
5242  goto yyreduce;
5243 
5244 
5245 /*-----------------------------.
5246 | yyreduce -- Do a reduction. |
5247 `-----------------------------*/
5248 yyreduce:
5249  /* yyn is the number of a rule to reduce with. */
5250  yylen = yyr2[yyn];
5251 
5252  /* If YYLEN is nonzero, implement the default value of the action:
5253  `$$ = $1'.
5254 
5255  Otherwise, the following line sets YYVAL to garbage.
5256  This behavior is undocumented and Bison
5257  users should not rely upon it. Assigning to YYVAL
5258  unconditionally makes the parser a bit smaller, and it avoids a
5259  GCC warning that YYVAL may be used uninitialized. */
5260  yyval = yyvsp[1-yylen];
5261 
5262 
5263  YY_REDUCE_PRINT (yyn);
5264  switch (yyn)
5265  {
5266  case 2:
5267 #line 850 "parse.y"
5268  {
5269  lex_state = EXPR_BEG;
5270  /*%%%*/
5272  /*%
5273  local_push(0);
5274  %*/
5275  ;}
5276  break;
5277 
5278  case 3:
5279 #line 859 "parse.y"
5280  {
5281  /*%%%*/
5282  if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
5283  /* last expression should not be void */
5284  if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
5285  else {
5286  NODE *node = (yyvsp[(2) - (2)].node);
5287  while (node->nd_next) {
5288  node = node->nd_next;
5289  }
5290  void_expr(node->nd_head);
5291  }
5292  }
5293  ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
5294  /*%
5295  $$ = $2;
5296  parser->result = dispatch1(program, $$);
5297  %*/
5298  local_pop();
5299  ;}
5300  break;
5301 
5302  case 4:
5303 #line 882 "parse.y"
5304  {
5305  /*%%%*/
5306  void_stmts((yyvsp[(1) - (2)].node));
5308  /*%
5309  %*/
5310  (yyval.node) = (yyvsp[(1) - (2)].node);
5311  ;}
5312  break;
5313 
5314  case 5:
5315 #line 893 "parse.y"
5316  {
5317  /*%%%*/
5318  (yyval.node) = NEW_BEGIN(0);
5319  /*%
5320  $$ = dispatch2(stmts_add, dispatch0(stmts_new),
5321  dispatch0(void_stmt));
5322  %*/
5323  ;}
5324  break;
5325 
5326  case 6:
5327 #line 902 "parse.y"
5328  {
5329  /*%%%*/
5330  (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
5331  /*%
5332  $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
5333  %*/
5334  ;}
5335  break;
5336 
5337  case 7:
5338 #line 910 "parse.y"
5339  {
5340  /*%%%*/
5341  (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
5342  /*%
5343  $$ = dispatch2(stmts_add, $1, $3);
5344  %*/
5345  ;}
5346  break;
5347 
5348  case 8:
5349 #line 918 "parse.y"
5350  {
5351  (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
5352  ;}
5353  break;
5354 
5355  case 10:
5356 #line 925 "parse.y"
5357  {
5358  /*%%%*/
5359  /* local_push(0); */
5360  /*%
5361  %*/
5362  ;}
5363  break;
5364 
5365  case 11:
5366 #line 932 "parse.y"
5367  {
5368  /*%%%*/
5370  (yyvsp[(4) - (5)].node));
5371  /* NEW_PREEXE($4)); */
5372  /* local_pop(); */
5373  (yyval.node) = NEW_BEGIN(0);
5374  /*%
5375  $$ = dispatch1(BEGIN, $4);
5376  %*/
5377  ;}
5378  break;
5379 
5380  case 12:
5381 #line 949 "parse.y"
5382  {
5383  /*%%%*/
5384  (yyval.node) = (yyvsp[(1) - (4)].node);
5385  if ((yyvsp[(2) - (4)].node)) {
5386  (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
5387  }
5388  else if ((yyvsp[(3) - (4)].node)) {
5389  rb_warn0("else without rescue is useless");
5390  (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
5391  }
5392  if ((yyvsp[(4) - (4)].node)) {
5393  if ((yyval.node)) {
5394  (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
5395  }
5396  else {
5397  (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
5398  }
5399  }
5400  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
5401  /*%
5402  $$ = dispatch4(bodystmt,
5403  escape_Qundef($1),
5404  escape_Qundef($2),
5405  escape_Qundef($3),
5406  escape_Qundef($4));
5407  %*/
5408  ;}
5409  break;
5410 
5411  case 13:
5412 #line 979 "parse.y"
5413  {
5414  /*%%%*/
5415  void_stmts((yyvsp[(1) - (2)].node));
5417  /*%
5418  %*/
5419  (yyval.node) = (yyvsp[(1) - (2)].node);
5420  ;}
5421  break;
5422 
5423  case 14:
5424 #line 990 "parse.y"
5425  {
5426  /*%%%*/
5427  (yyval.node) = NEW_BEGIN(0);
5428  /*%
5429  $$ = dispatch2(stmts_add, dispatch0(stmts_new),
5430  dispatch0(void_stmt));
5431  %*/
5432  ;}
5433  break;
5434 
5435  case 15:
5436 #line 999 "parse.y"
5437  {
5438  /*%%%*/
5439  (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
5440  /*%
5441  $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
5442  %*/
5443  ;}
5444  break;
5445 
5446  case 16:
5447 #line 1007 "parse.y"
5448  {
5449  /*%%%*/
5450  (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
5451  /*%
5452  $$ = dispatch2(stmts_add, $1, $3);
5453  %*/
5454  ;}
5455  break;
5456 
5457  case 17:
5458 #line 1015 "parse.y"
5459  {
5460  (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
5461  ;}
5462  break;
5463 
5464  case 18:
5465 #line 1021 "parse.y"
5466  {
5467  (yyval.node) = (yyvsp[(1) - (1)].node);
5468  ;}
5469  break;
5470 
5471  case 19:
5472 #line 1025 "parse.y"
5473  {
5474  yyerror("BEGIN is permitted only at toplevel");
5475  /*%%%*/
5476  /* local_push(0); */
5477  /*%
5478  %*/
5479  ;}
5480  break;
5481 
5482  case 20:
5483 #line 1033 "parse.y"
5484  {
5485  /*%%%*/
5487  (yyvsp[(4) - (5)].node));
5488  /* NEW_PREEXE($4)); */
5489  /* local_pop(); */
5490  (yyval.node) = NEW_BEGIN(0);
5491  /*%
5492  $$ = dispatch1(BEGIN, $4);
5493  %*/
5494  ;}
5495  break;
5496 
5497  case 21:
5498 #line 1045 "parse.y"
5499  {lex_state = EXPR_FNAME;;}
5500  break;
5501 
5502  case 22:
5503 #line 1046 "parse.y"
5504  {
5505  /*%%%*/
5506  (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
5507  /*%
5508  $$ = dispatch2(alias, $2, $4);
5509  %*/
5510  ;}
5511  break;
5512 
5513  case 23:
5514 #line 1054 "parse.y"
5515  {
5516  /*%%%*/
5517  (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
5518  /*%
5519  $$ = dispatch2(var_alias, $2, $3);
5520  %*/
5521  ;}
5522  break;
5523 
5524  case 24:
5525 #line 1062 "parse.y"
5526  {
5527  /*%%%*/
5528  char buf[2];
5529  buf[0] = '$';
5530  buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
5531  (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
5532  /*%
5533  $$ = dispatch2(var_alias, $2, $3);
5534  %*/
5535  ;}
5536  break;
5537 
5538  case 25:
5539 #line 1073 "parse.y"
5540  {
5541  /*%%%*/
5542  yyerror("can't make alias for the number variables");
5543  (yyval.node) = NEW_BEGIN(0);
5544  /*%
5545  $$ = dispatch2(var_alias, $2, $3);
5546  $$ = dispatch1(alias_error, $$);
5547  %*/
5548  ;}
5549  break;
5550 
5551  case 26:
5552 #line 1083 "parse.y"
5553  {
5554  /*%%%*/
5555  (yyval.node) = (yyvsp[(2) - (2)].node);
5556  /*%
5557  $$ = dispatch1(undef, $2);
5558  %*/
5559  ;}
5560  break;
5561 
5562  case 27:
5563 #line 1091 "parse.y"
5564  {
5565  /*%%%*/
5566  (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
5567  fixpos((yyval.node), (yyvsp[(3) - (3)].node));
5568  /*%
5569  $$ = dispatch2(if_mod, $3, $1);
5570  %*/
5571  ;}
5572  break;
5573 
5574  case 28:
5575 #line 1100 "parse.y"
5576  {
5577  /*%%%*/
5578  (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
5579  fixpos((yyval.node), (yyvsp[(3) - (3)].node));
5580  /*%
5581  $$ = dispatch2(unless_mod, $3, $1);
5582  %*/
5583  ;}
5584  break;
5585 
5586  case 29:
5587 #line 1109 "parse.y"
5588  {
5589  /*%%%*/
5590  if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
5591  (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
5592  }
5593  else {
5594  (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
5595  }
5596  /*%
5597  $$ = dispatch2(while_mod, $3, $1);
5598  %*/
5599  ;}
5600  break;
5601 
5602  case 30:
5603 #line 1122 "parse.y"
5604  {
5605  /*%%%*/
5606  if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
5607  (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
5608  }
5609  else {
5610  (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
5611  }
5612  /*%
5613  $$ = dispatch2(until_mod, $3, $1);
5614  %*/
5615  ;}
5616  break;
5617 
5618  case 31:
5619 #line 1135 "parse.y"
5620  {
5621  /*%%%*/
5622  NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
5623  (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
5624  /*%
5625  $$ = dispatch2(rescue_mod, $1, $3);
5626  %*/
5627  ;}
5628  break;
5629 
5630  case 32:
5631 #line 1144 "parse.y"
5632  {
5633  if (in_def || in_single) {
5634  rb_warn0("END in method; use at_exit");
5635  }
5636  /*%%%*/
5637  (yyval.node) = NEW_POSTEXE(NEW_NODE(
5638  NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].node) /* body */, 0 /* args */));
5639  /*%
5640  $$ = dispatch1(END, $3);
5641  %*/
5642  ;}
5643  break;
5644 
5645  case 34:
5646 #line 1157 "parse.y"
5647  {
5648  /*%%%*/
5649  value_expr((yyvsp[(3) - (3)].node));
5650  (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
5651  (yyval.node) = (yyvsp[(1) - (3)].node);
5652  /*%
5653  $$ = dispatch2(massign, $1, $3);
5654  %*/
5655  ;}
5656  break;
5657 
5658  case 35:
5659 #line 1167 "parse.y"
5660  {
5661  value_expr((yyvsp[(3) - (3)].node));
5662  (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
5663  ;}
5664  break;
5665 
5666  case 36:
5667 #line 1172 "parse.y"
5668  {
5669  /*%%%*/
5670  NODE *args;
5671 
5672  value_expr((yyvsp[(6) - (6)].node));
5673  if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
5674  args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
5675  if ((yyvsp[(5) - (6)].id) == tOROP) {
5676  (yyvsp[(5) - (6)].id) = 0;
5677  }
5678  else if ((yyvsp[(5) - (6)].id) == tANDOP) {
5679  (yyvsp[(5) - (6)].id) = 1;
5680  }
5681  (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
5682  fixpos((yyval.node), (yyvsp[(1) - (6)].node));
5683  /*%
5684  $$ = dispatch2(aref_field, $1, escape_Qundef($3));
5685  $$ = dispatch3(opassign, $$, $5, $6);
5686  %*/
5687  ;}
5688  break;
5689 
5690  case 37:
5691 #line 1193 "parse.y"
5692  {
5693  value_expr((yyvsp[(5) - (5)].node));
5694  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
5695  ;}
5696  break;
5697 
5698  case 38:
5699 #line 1198 "parse.y"
5700  {
5701  value_expr((yyvsp[(5) - (5)].node));
5702  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
5703  ;}
5704  break;
5705 
5706  case 39:
5707 #line 1203 "parse.y"
5708  {
5709  /*%%%*/
5710  (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
5711  (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
5712  /*%
5713  $$ = dispatch2(const_path_field, $1, $3);
5714  $$ = dispatch3(opassign, $$, $4, $5);
5715  %*/
5716  ;}
5717  break;
5718 
5719  case 40:
5720 #line 1213 "parse.y"
5721  {
5722  value_expr((yyvsp[(5) - (5)].node));
5723  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_intern("::"), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
5724  ;}
5725  break;
5726 
5727  case 41:
5728 #line 1218 "parse.y"
5729  {
5730  /*%%%*/
5731  rb_backref_error((yyvsp[(1) - (3)].node));
5732  (yyval.node) = NEW_BEGIN(0);
5733  /*%
5734  $$ = dispatch2(assign, dispatch1(var_field, $1), $3);
5735  $$ = dispatch1(assign_error, $$);
5736  %*/
5737  ;}
5738  break;
5739 
5740  case 42:
5741 #line 1228 "parse.y"
5742  {
5743  /*%%%*/
5744  value_expr((yyvsp[(3) - (3)].node));
5745  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5746  /*%
5747  $$ = dispatch2(assign, $1, $3);
5748  %*/
5749  ;}
5750  break;
5751 
5752  case 43:
5753 #line 1237 "parse.y"
5754  {
5755  /*%%%*/
5756  (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
5757  (yyval.node) = (yyvsp[(1) - (3)].node);
5758  /*%
5759  $$ = dispatch2(massign, $1, $3);
5760  %*/
5761  ;}
5762  break;
5763 
5764  case 44:
5765 #line 1246 "parse.y"
5766  {
5767  /*%%%*/
5768  (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
5769  (yyval.node) = (yyvsp[(1) - (3)].node);
5770  /*%
5771  $$ = dispatch2(massign, $1, $3);
5772  %*/
5773  ;}
5774  break;
5775 
5776  case 46:
5777 #line 1258 "parse.y"
5778  {
5779  /*%%%*/
5780  value_expr((yyvsp[(3) - (3)].node));
5781  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5782  /*%
5783  $$ = dispatch2(assign, $1, $3);
5784  %*/
5785  ;}
5786  break;
5787 
5788  case 47:
5789 #line 1267 "parse.y"
5790  {
5791  /*%%%*/
5792  value_expr((yyvsp[(3) - (3)].node));
5793  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5794  /*%
5795  $$ = dispatch2(assign, $1, $3);
5796  %*/
5797  ;}
5798  break;
5799 
5800  case 49:
5801 #line 1280 "parse.y"
5802  {
5803  /*%%%*/
5804  (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5805  /*%
5806  $$ = dispatch3(binary, $1, ripper_intern("and"), $3);
5807  %*/
5808  ;}
5809  break;
5810 
5811  case 50:
5812 #line 1288 "parse.y"
5813  {
5814  /*%%%*/
5815  (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5816  /*%
5817  $$ = dispatch3(binary, $1, ripper_intern("or"), $3);
5818  %*/
5819  ;}
5820  break;
5821 
5822  case 51:
5823 #line 1296 "parse.y"
5824  {
5825  /*%%%*/
5826  (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
5827  /*%
5828  $$ = dispatch2(unary, ripper_intern("not"), $3);
5829  %*/
5830  ;}
5831  break;
5832 
5833  case 52:
5834 #line 1304 "parse.y"
5835  {
5836  /*%%%*/
5837  (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
5838  /*%
5839  $$ = dispatch2(unary, ripper_id2sym('!'), $2);
5840  %*/
5841  ;}
5842  break;
5843 
5844  case 54:
5845 #line 1315 "parse.y"
5846  {
5847  /*%%%*/
5848  value_expr((yyvsp[(1) - (1)].node));
5849  (yyval.node) = (yyvsp[(1) - (1)].node);
5850  if (!(yyval.node)) (yyval.node) = NEW_NIL();
5851  /*%
5852  $$ = $1;
5853  %*/
5854  ;}
5855  break;
5856 
5857  case 58:
5858 #line 1332 "parse.y"
5859  {
5860  /*%%%*/
5861  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
5862  /*%
5863  $$ = dispatch3(call, $1, $2, $3);
5864  $$ = method_arg($$, $4);
5865  %*/
5866  ;}
5867  break;
5868 
5869  case 59:
5870 #line 1343 "parse.y"
5871  {
5872  (yyvsp[(1) - (1)].vars) = dyna_push();
5873  /*%%%*/
5874  (yyval.num) = ruby_sourceline;
5875  /*%
5876  %*/
5877  ;}
5878  break;
5879 
5880  case 60:
5881 #line 1353 "parse.y"
5882  {
5883  /*%%%*/
5884  (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
5885  nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
5886  /*%
5887  $$ = dispatch2(brace_block, escape_Qundef($3), $4);
5888  %*/
5889  dyna_pop((yyvsp[(1) - (5)].vars));
5890  ;}
5891  break;
5892 
5893  case 61:
5894 #line 1365 "parse.y"
5895  {
5896  /*%%%*/
5897  (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
5898  nd_set_line((yyval.node), tokline);
5899  /*%
5900  %*/
5901  ;}
5902  break;
5903 
5904  case 62:
5905 #line 1375 "parse.y"
5906  {
5907  /*%%%*/
5908  (yyval.node) = (yyvsp[(1) - (2)].node);
5909  (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
5910  /*%
5911  $$ = dispatch2(command, $1, $2);
5912  %*/
5913  ;}
5914  break;
5915 
5916  case 63:
5917 #line 1384 "parse.y"
5918  {
5919  /*%%%*/
5920  block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
5921  (yyvsp[(1) - (3)].node)->nd_args = (yyvsp[(2) - (3)].node);
5922  (yyvsp[(3) - (3)].node)->nd_iter = (yyvsp[(1) - (3)].node);
5923  (yyval.node) = (yyvsp[(3) - (3)].node);
5924  fixpos((yyval.node), (yyvsp[(1) - (3)].node));
5925  /*%
5926  $$ = dispatch2(command, $1, $2);
5927  $$ = method_add_block($$, $3);
5928  %*/
5929  ;}
5930  break;
5931 
5932  case 64:
5933 #line 1397 "parse.y"
5934  {
5935  /*%%%*/
5936  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
5937  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
5938  /*%
5939  $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
5940  %*/
5941  ;}
5942  break;
5943 
5944  case 65:
5945 #line 1406 "parse.y"
5946  {
5947  /*%%%*/
5948  block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
5949  (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
5950  (yyval.node) = (yyvsp[(5) - (5)].node);
5951  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
5952  /*%
5953  $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
5954  $$ = method_add_block($$, $5);
5955  %*/
5956  ;}
5957  break;
5958 
5959  case 66:
5960 #line 1418 "parse.y"
5961  {
5962  /*%%%*/
5963  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
5964  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
5965  /*%
5966  $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
5967  %*/
5968  ;}
5969  break;
5970 
5971  case 67:
5972 #line 1427 "parse.y"
5973  {
5974  /*%%%*/
5975  block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
5976  (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
5977  (yyval.node) = (yyvsp[(5) - (5)].node);
5978  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
5979  /*%
5980  $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
5981  $$ = method_add_block($$, $5);
5982  %*/
5983  ;}
5984  break;
5985 
5986  case 68:
5987 #line 1439 "parse.y"
5988  {
5989  /*%%%*/
5990  (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
5991  fixpos((yyval.node), (yyvsp[(2) - (2)].node));
5992  /*%
5993  $$ = dispatch1(super, $2);
5994  %*/
5995  ;}
5996  break;
5997 
5998  case 69:
5999 #line 1448 "parse.y"
6000  {
6001  /*%%%*/
6002  (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
6003  fixpos((yyval.node), (yyvsp[(2) - (2)].node));
6004  /*%
6005  $$ = dispatch1(yield, $2);
6006  %*/
6007  ;}
6008  break;
6009 
6010  case 70:
6011 #line 1457 "parse.y"
6012  {
6013  /*%%%*/
6014  (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
6015  /*%
6016  $$ = dispatch1(return, $2);
6017  %*/
6018  ;}
6019  break;
6020 
6021  case 71:
6022 #line 1465 "parse.y"
6023  {
6024  /*%%%*/
6025  (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
6026  /*%
6027  $$ = dispatch1(break, $2);
6028  %*/
6029  ;}
6030  break;
6031 
6032  case 72:
6033 #line 1473 "parse.y"
6034  {
6035  /*%%%*/
6036  (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
6037  /*%
6038  $$ = dispatch1(next, $2);
6039  %*/
6040  ;}
6041  break;
6042 
6043  case 74:
6044 #line 1484 "parse.y"
6045  {
6046  /*%%%*/
6047  (yyval.node) = (yyvsp[(2) - (3)].node);
6048  /*%
6049  $$ = dispatch1(mlhs_paren, $2);
6050  %*/
6051  ;}
6052  break;
6053 
6054  case 76:
6055 #line 1495 "parse.y"
6056  {
6057  /*%%%*/
6058  (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
6059  /*%
6060  $$ = dispatch1(mlhs_paren, $2);
6061  %*/
6062  ;}
6063  break;
6064 
6065  case 77:
6066 #line 1505 "parse.y"
6067  {
6068  /*%%%*/
6069  (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
6070  /*%
6071  $$ = $1;
6072  %*/
6073  ;}
6074  break;
6075 
6076  case 78:
6077 #line 1513 "parse.y"
6078  {
6079  /*%%%*/
6080  (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
6081  /*%
6082  $$ = mlhs_add($1, $2);
6083  %*/
6084  ;}
6085  break;
6086 
6087  case 79:
6088 #line 1521 "parse.y"
6089  {
6090  /*%%%*/
6091  (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6092  /*%
6093  $$ = mlhs_add_star($1, $3);
6094  %*/
6095  ;}
6096  break;
6097 
6098  case 80:
6099 #line 1529 "parse.y"
6100  {
6101  /*%%%*/
6102  (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
6103  /*%
6104  $1 = mlhs_add_star($1, $3);
6105  $$ = mlhs_add($1, $5);
6106  %*/
6107  ;}
6108  break;
6109 
6110  case 81:
6111 #line 1538 "parse.y"
6112  {
6113  /*%%%*/
6114  (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
6115  /*%
6116  $$ = mlhs_add_star($1, Qnil);
6117  %*/
6118  ;}
6119  break;
6120 
6121  case 82:
6122 #line 1546 "parse.y"
6123  {
6124  /*%%%*/
6125  (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
6126  /*%
6127  $1 = mlhs_add_star($1, Qnil);
6128  $$ = mlhs_add($1, $4);
6129  %*/
6130  ;}
6131  break;
6132 
6133  case 83:
6134 #line 1555 "parse.y"
6135  {
6136  /*%%%*/
6137  (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
6138  /*%
6139  $$ = mlhs_add_star(mlhs_new(), $2);
6140  %*/
6141  ;}
6142  break;
6143 
6144  case 84:
6145 #line 1563 "parse.y"
6146  {
6147  /*%%%*/
6148  (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
6149  /*%
6150  $2 = mlhs_add_star(mlhs_new(), $2);
6151  $$ = mlhs_add($2, $4);
6152  %*/
6153  ;}
6154  break;
6155 
6156  case 85:
6157 #line 1572 "parse.y"
6158  {
6159  /*%%%*/
6160  (yyval.node) = NEW_MASGN(0, -1);
6161  /*%
6162  $$ = mlhs_add_star(mlhs_new(), Qnil);
6163  %*/
6164  ;}
6165  break;
6166 
6167  case 86:
6168 #line 1580 "parse.y"
6169  {
6170  /*%%%*/
6171  (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
6172  /*%
6173  $$ = mlhs_add_star(mlhs_new(), Qnil);
6174  $$ = mlhs_add($$, $3);
6175  %*/
6176  ;}
6177  break;
6178 
6179  case 88:
6180 #line 1592 "parse.y"
6181  {
6182  /*%%%*/
6183  (yyval.node) = (yyvsp[(2) - (3)].node);
6184  /*%
6185  $$ = dispatch1(mlhs_paren, $2);
6186  %*/
6187  ;}
6188  break;
6189 
6190  case 89:
6191 #line 1602 "parse.y"
6192  {
6193  /*%%%*/
6194  (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
6195  /*%
6196  $$ = mlhs_add(mlhs_new(), $1);
6197  %*/
6198  ;}
6199  break;
6200 
6201  case 90:
6202 #line 1610 "parse.y"
6203  {
6204  /*%%%*/
6205  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
6206  /*%
6207  $$ = mlhs_add($1, $2);
6208  %*/
6209  ;}
6210  break;
6211 
6212  case 91:
6213 #line 1620 "parse.y"
6214  {
6215  /*%%%*/
6216  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
6217  /*%
6218  $$ = mlhs_add(mlhs_new(), $1);
6219  %*/
6220  ;}
6221  break;
6222 
6223  case 92:
6224 #line 1628 "parse.y"
6225  {
6226  /*%%%*/
6227  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6228  /*%
6229  $$ = mlhs_add($1, $3);
6230  %*/
6231  ;}
6232  break;
6233 
6234  case 93:
6235 #line 1638 "parse.y"
6236  {
6237  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6238  ;}
6239  break;
6240 
6241  case 94:
6242 #line 1642 "parse.y"
6243  {
6244  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6245  ;}
6246  break;
6247 
6248  case 95:
6249 #line 1646 "parse.y"
6250  {
6251  /*%%%*/
6252  (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
6253  /*%
6254  $$ = dispatch2(aref_field, $1, escape_Qundef($3));
6255  %*/
6256  ;}
6257  break;
6258 
6259  case 96:
6260 #line 1654 "parse.y"
6261  {
6262  /*%%%*/
6263  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6264  /*%
6265  $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
6266  %*/
6267  ;}
6268  break;
6269 
6270  case 97:
6271 #line 1662 "parse.y"
6272  {
6273  /*%%%*/
6274  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6275  /*%
6276  $$ = dispatch2(const_path_field, $1, $3);
6277  %*/
6278  ;}
6279  break;
6280 
6281  case 98:
6282 #line 1670 "parse.y"
6283  {
6284  /*%%%*/
6285  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6286  /*%
6287  $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
6288  %*/
6289  ;}
6290  break;
6291 
6292  case 99:
6293 #line 1678 "parse.y"
6294  {
6295  /*%%%*/
6296  if (in_def || in_single)
6297  yyerror("dynamic constant assignment");
6298  (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
6299  /*%
6300  if (in_def || in_single)
6301  yyerror("dynamic constant assignment");
6302  $$ = dispatch2(const_path_field, $1, $3);
6303  %*/
6304  ;}
6305  break;
6306 
6307  case 100:
6308 #line 1690 "parse.y"
6309  {
6310  /*%%%*/
6311  if (in_def || in_single)
6312  yyerror("dynamic constant assignment");
6313  (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
6314  /*%
6315  $$ = dispatch1(top_const_field, $2);
6316  %*/
6317  ;}
6318  break;
6319 
6320  case 101:
6321 #line 1700 "parse.y"
6322  {
6323  /*%%%*/
6324  rb_backref_error((yyvsp[(1) - (1)].node));
6325  (yyval.node) = NEW_BEGIN(0);
6326  /*%
6327  $$ = dispatch1(var_field, $1);
6328  $$ = dispatch1(assign_error, $$);
6329  %*/
6330  ;}
6331  break;
6332 
6333  case 102:
6334 #line 1712 "parse.y"
6335  {
6336  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6337  /*%%%*/
6338  if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
6339  /*%
6340  $$ = dispatch1(var_field, $$);
6341  %*/
6342  ;}
6343  break;
6344 
6345  case 103:
6346 #line 1721 "parse.y"
6347  {
6348  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6349  /*%%%*/
6350  if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
6351  /*%
6352  $$ = dispatch1(var_field, $$);
6353  %*/
6354  ;}
6355  break;
6356 
6357  case 104:
6358 #line 1730 "parse.y"
6359  {
6360  /*%%%*/
6361  (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
6362  /*%
6363  $$ = dispatch2(aref_field, $1, escape_Qundef($3));
6364  %*/
6365  ;}
6366  break;
6367 
6368  case 105:
6369 #line 1738 "parse.y"
6370  {
6371  /*%%%*/
6372  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6373  /*%
6374  $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
6375  %*/
6376  ;}
6377  break;
6378 
6379  case 106:
6380 #line 1746 "parse.y"
6381  {
6382  /*%%%*/
6383  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6384  /*%
6385  $$ = dispatch3(field, $1, ripper_intern("::"), $3);
6386  %*/
6387  ;}
6388  break;
6389 
6390  case 107:
6391 #line 1754 "parse.y"
6392  {
6393  /*%%%*/
6394  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6395  /*%
6396  $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
6397  %*/
6398  ;}
6399  break;
6400 
6401  case 108:
6402 #line 1762 "parse.y"
6403  {
6404  /*%%%*/
6405  if (in_def || in_single)
6406  yyerror("dynamic constant assignment");
6407  (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
6408  /*%
6409  $$ = dispatch2(const_path_field, $1, $3);
6410  if (in_def || in_single) {
6411  $$ = dispatch1(assign_error, $$);
6412  }
6413  %*/
6414  ;}
6415  break;
6416 
6417  case 109:
6418 #line 1775 "parse.y"
6419  {
6420  /*%%%*/
6421  if (in_def || in_single)
6422  yyerror("dynamic constant assignment");
6423  (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
6424  /*%
6425  $$ = dispatch1(top_const_field, $2);
6426  if (in_def || in_single) {
6427  $$ = dispatch1(assign_error, $$);
6428  }
6429  %*/
6430  ;}
6431  break;
6432 
6433  case 110:
6434 #line 1788 "parse.y"
6435  {
6436  /*%%%*/
6437  rb_backref_error((yyvsp[(1) - (1)].node));
6438  (yyval.node) = NEW_BEGIN(0);
6439  /*%
6440  $$ = dispatch1(assign_error, $1);
6441  %*/
6442  ;}
6443  break;
6444 
6445  case 111:
6446 #line 1799 "parse.y"
6447  {
6448  /*%%%*/
6449  yyerror("class/module name must be CONSTANT");
6450  /*%
6451  $$ = dispatch1(class_name_error, $1);
6452  %*/
6453  ;}
6454  break;
6455 
6456  case 113:
6457 #line 1810 "parse.y"
6458  {
6459  /*%%%*/
6460  (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
6461  /*%
6462  $$ = dispatch1(top_const_ref, $2);
6463  %*/
6464  ;}
6465  break;
6466 
6467  case 114:
6468 #line 1818 "parse.y"
6469  {
6470  /*%%%*/
6471  (yyval.node) = NEW_COLON2(0, (yyval.node));
6472  /*%
6473  $$ = dispatch1(const_ref, $1);
6474  %*/
6475  ;}
6476  break;
6477 
6478  case 115:
6479 #line 1826 "parse.y"
6480  {
6481  /*%%%*/
6482  (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6483  /*%
6484  $$ = dispatch2(const_path_ref, $1, $3);
6485  %*/
6486  ;}
6487  break;
6488 
6489  case 119:
6490 #line 1839 "parse.y"
6491  {
6492  lex_state = EXPR_ENDFN;
6493  (yyval.id) = (yyvsp[(1) - (1)].id);
6494  ;}
6495  break;
6496 
6497  case 120:
6498 #line 1844 "parse.y"
6499  {
6500  lex_state = EXPR_ENDFN;
6501  /*%%%*/
6502  (yyval.id) = (yyvsp[(1) - (1)].id);
6503  /*%
6504  $$ = $1;
6505  %*/
6506  ;}
6507  break;
6508 
6509  case 123:
6510 #line 1859 "parse.y"
6511  {
6512  /*%%%*/
6513  (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
6514  /*%
6515  $$ = dispatch1(symbol_literal, $1);
6516  %*/
6517  ;}
6518  break;
6519 
6520  case 125:
6521 #line 1870 "parse.y"
6522  {
6523  /*%%%*/
6524  (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
6525  /*%
6526  $$ = rb_ary_new3(1, $1);
6527  %*/
6528  ;}
6529  break;
6530 
6531  case 126:
6532 #line 1877 "parse.y"
6533  {lex_state = EXPR_FNAME;;}
6534  break;
6535 
6536  case 127:
6537 #line 1878 "parse.y"
6538  {
6539  /*%%%*/
6540  (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
6541  /*%
6542  rb_ary_push($1, $4);
6543  %*/
6544  ;}
6545  break;
6546 
6547  case 128:
6548 #line 1887 "parse.y"
6549  { ifndef_ripper((yyval.id) = '|'); ;}
6550  break;
6551 
6552  case 129:
6553 #line 1888 "parse.y"
6554  { ifndef_ripper((yyval.id) = '^'); ;}
6555  break;
6556 
6557  case 130:
6558 #line 1889 "parse.y"
6559  { ifndef_ripper((yyval.id) = '&'); ;}
6560  break;
6561 
6562  case 131:
6563 #line 1890 "parse.y"
6564  { ifndef_ripper((yyval.id) = tCMP); ;}
6565  break;
6566 
6567  case 132:
6568 #line 1891 "parse.y"
6569  { ifndef_ripper((yyval.id) = tEQ); ;}
6570  break;
6571 
6572  case 133:
6573 #line 1892 "parse.y"
6574  { ifndef_ripper((yyval.id) = tEQQ); ;}
6575  break;
6576 
6577  case 134:
6578 #line 1893 "parse.y"
6579  { ifndef_ripper((yyval.id) = tMATCH); ;}
6580  break;
6581 
6582  case 135:
6583 #line 1894 "parse.y"
6584  { ifndef_ripper((yyval.id) = tNMATCH); ;}
6585  break;
6586 
6587  case 136:
6588 #line 1895 "parse.y"
6589  { ifndef_ripper((yyval.id) = '>'); ;}
6590  break;
6591 
6592  case 137:
6593 #line 1896 "parse.y"
6594  { ifndef_ripper((yyval.id) = tGEQ); ;}
6595  break;
6596 
6597  case 138:
6598 #line 1897 "parse.y"
6599  { ifndef_ripper((yyval.id) = '<'); ;}
6600  break;
6601 
6602  case 139:
6603 #line 1898 "parse.y"
6604  { ifndef_ripper((yyval.id) = tLEQ); ;}
6605  break;
6606 
6607  case 140:
6608 #line 1899 "parse.y"
6609  { ifndef_ripper((yyval.id) = tNEQ); ;}
6610  break;
6611 
6612  case 141:
6613 #line 1900 "parse.y"
6614  { ifndef_ripper((yyval.id) = tLSHFT); ;}
6615  break;
6616 
6617  case 142:
6618 #line 1901 "parse.y"
6619  { ifndef_ripper((yyval.id) = tRSHFT); ;}
6620  break;
6621 
6622  case 143:
6623 #line 1902 "parse.y"
6624  { ifndef_ripper((yyval.id) = '+'); ;}
6625  break;
6626 
6627  case 144:
6628 #line 1903 "parse.y"
6629  { ifndef_ripper((yyval.id) = '-'); ;}
6630  break;
6631 
6632  case 145:
6633 #line 1904 "parse.y"
6634  { ifndef_ripper((yyval.id) = '*'); ;}
6635  break;
6636 
6637  case 146:
6638 #line 1905 "parse.y"
6639  { ifndef_ripper((yyval.id) = '*'); ;}
6640  break;
6641 
6642  case 147:
6643 #line 1906 "parse.y"
6644  { ifndef_ripper((yyval.id) = '/'); ;}
6645  break;
6646 
6647  case 148:
6648 #line 1907 "parse.y"
6649  { ifndef_ripper((yyval.id) = '%'); ;}
6650  break;
6651 
6652  case 149:
6653 #line 1908 "parse.y"
6654  { ifndef_ripper((yyval.id) = tPOW); ;}
6655  break;
6656 
6657  case 150:
6658 #line 1909 "parse.y"
6659  { ifndef_ripper((yyval.id) = tDSTAR); ;}
6660  break;
6661 
6662  case 151:
6663 #line 1910 "parse.y"
6664  { ifndef_ripper((yyval.id) = '!'); ;}
6665  break;
6666 
6667  case 152:
6668 #line 1911 "parse.y"
6669  { ifndef_ripper((yyval.id) = '~'); ;}
6670  break;
6671 
6672  case 153:
6673 #line 1912 "parse.y"
6674  { ifndef_ripper((yyval.id) = tUPLUS); ;}
6675  break;
6676 
6677  case 154:
6678 #line 1913 "parse.y"
6679  { ifndef_ripper((yyval.id) = tUMINUS); ;}
6680  break;
6681 
6682  case 155:
6683 #line 1914 "parse.y"
6684  { ifndef_ripper((yyval.id) = tAREF); ;}
6685  break;
6686 
6687  case 156:
6688 #line 1915 "parse.y"
6689  { ifndef_ripper((yyval.id) = tASET); ;}
6690  break;
6691 
6692  case 157:
6693 #line 1916 "parse.y"
6694  { ifndef_ripper((yyval.id) = '`'); ;}
6695  break;
6696 
6697  case 199:
6698 #line 1934 "parse.y"
6699  {
6700  /*%%%*/
6701  value_expr((yyvsp[(3) - (3)].node));
6702  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6703  /*%
6704  $$ = dispatch2(assign, $1, $3);
6705  %*/
6706  ;}
6707  break;
6708 
6709  case 200:
6710 #line 1943 "parse.y"
6711  {
6712  /*%%%*/
6713  value_expr((yyvsp[(3) - (5)].node));
6714  (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
6715  (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
6716  /*%
6717  $$ = dispatch2(assign, $1, dispatch2(rescue_mod, $3, $5));
6718  %*/
6719  ;}
6720  break;
6721 
6722  case 201:
6723 #line 1953 "parse.y"
6724  {
6725  value_expr((yyvsp[(3) - (3)].node));
6726  (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
6727  ;}
6728  break;
6729 
6730  case 202:
6731 #line 1958 "parse.y"
6732  {
6733  /*%%%*/
6734  value_expr((yyvsp[(3) - (5)].node));
6735  (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
6736  /*%
6737  $3 = dispatch2(rescue_mod, $3, $5);
6738  %*/
6739  (yyval.node) = new_op_assign((yyvsp[(1) - (5)].node), (yyvsp[(2) - (5)].id), (yyvsp[(3) - (5)].node));
6740  ;}
6741  break;
6742 
6743  case 203:
6744 #line 1968 "parse.y"
6745  {
6746  /*%%%*/
6747  NODE *args;
6748 
6749  value_expr((yyvsp[(6) - (6)].node));
6750  if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
6751  if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
6752  args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
6753  }
6754  else {
6755  args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
6756  }
6757  if ((yyvsp[(5) - (6)].id) == tOROP) {
6758  (yyvsp[(5) - (6)].id) = 0;
6759  }
6760  else if ((yyvsp[(5) - (6)].id) == tANDOP) {
6761  (yyvsp[(5) - (6)].id) = 1;
6762  }
6763  (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
6764  fixpos((yyval.node), (yyvsp[(1) - (6)].node));
6765  /*%
6766  $1 = dispatch2(aref_field, $1, escape_Qundef($3));
6767  $$ = dispatch3(opassign, $1, $5, $6);
6768  %*/
6769  ;}
6770  break;
6771 
6772  case 204:
6773 #line 1994 "parse.y"
6774  {
6775  value_expr((yyvsp[(5) - (5)].node));
6776  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
6777  ;}
6778  break;
6779 
6780  case 205:
6781 #line 1999 "parse.y"
6782  {
6783  value_expr((yyvsp[(5) - (5)].node));
6784  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
6785  ;}
6786  break;
6787 
6788  case 206:
6789 #line 2004 "parse.y"
6790  {
6791  value_expr((yyvsp[(5) - (5)].node));
6792  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_intern("::"), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
6793  ;}
6794  break;
6795 
6796  case 207:
6797 #line 2009 "parse.y"
6798  {
6799  /*%%%*/
6800  (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
6801  (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
6802  /*%
6803  $$ = dispatch2(const_path_field, $1, $3);
6804  $$ = dispatch3(opassign, $$, $4, $5);
6805  %*/
6806  ;}
6807  break;
6808 
6809  case 208:
6810 #line 2019 "parse.y"
6811  {
6812  /*%%%*/
6813  (yyval.node) = NEW_COLON3((yyvsp[(2) - (4)].id));
6814  (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
6815  /*%
6816  $$ = dispatch1(top_const_field, $2);
6817  $$ = dispatch3(opassign, $$, $3, $4);
6818  %*/
6819  ;}
6820  break;
6821 
6822  case 209:
6823 #line 2029 "parse.y"
6824  {
6825  /*%%%*/
6826  rb_backref_error((yyvsp[(1) - (3)].node));
6827  (yyval.node) = NEW_BEGIN(0);
6828  /*%
6829  $$ = dispatch1(var_field, $1);
6830  $$ = dispatch3(opassign, $$, $2, $3);
6831  $$ = dispatch1(assign_error, $$);
6832  %*/
6833  ;}
6834  break;
6835 
6836  case 210:
6837 #line 2040 "parse.y"
6838  {
6839  /*%%%*/
6840  value_expr((yyvsp[(1) - (3)].node));
6841  value_expr((yyvsp[(3) - (3)].node));
6842  (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6843  if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
6844  nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
6846  }
6847  /*%
6848  $$ = dispatch2(dot2, $1, $3);
6849  %*/
6850  ;}
6851  break;
6852 
6853  case 211:
6854 #line 2054 "parse.y"
6855  {
6856  /*%%%*/
6857  value_expr((yyvsp[(1) - (3)].node));
6858  value_expr((yyvsp[(3) - (3)].node));
6859  (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6860  if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
6861  nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
6863  }
6864  /*%
6865  $$ = dispatch2(dot3, $1, $3);
6866  %*/
6867  ;}
6868  break;
6869 
6870  case 212:
6871 #line 2068 "parse.y"
6872  {
6873  /*%%%*/
6874  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
6875  /*%
6876  $$ = dispatch3(binary, $1, ID2SYM('+'), $3);
6877  %*/
6878  ;}
6879  break;
6880 
6881  case 213:
6882 #line 2076 "parse.y"
6883  {
6884  /*%%%*/
6885  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
6886  /*%
6887  $$ = dispatch3(binary, $1, ID2SYM('-'), $3);
6888  %*/
6889  ;}
6890  break;
6891 
6892  case 214:
6893 #line 2084 "parse.y"
6894  {
6895  /*%%%*/
6896  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
6897  /*%
6898  $$ = dispatch3(binary, $1, ID2SYM('*'), $3);
6899  %*/
6900  ;}
6901  break;
6902 
6903  case 215:
6904 #line 2092 "parse.y"
6905  {
6906  /*%%%*/
6907  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
6908  /*%
6909  $$ = dispatch3(binary, $1, ID2SYM('/'), $3);
6910  %*/
6911  ;}
6912  break;
6913 
6914  case 216:
6915 #line 2100 "parse.y"
6916  {
6917  /*%%%*/
6918  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
6919  /*%
6920  $$ = dispatch3(binary, $1, ID2SYM('%'), $3);
6921  %*/
6922  ;}
6923  break;
6924 
6925  case 217:
6926 #line 2108 "parse.y"
6927  {
6928  /*%%%*/
6929  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
6930  /*%
6931  $$ = dispatch3(binary, $1, ripper_intern("**"), $3);
6932  %*/
6933  ;}
6934  break;
6935 
6936  case 218:
6937 #line 2116 "parse.y"
6938  {
6939  /*%%%*/
6940  (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
6941  /*%
6942  $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
6943  $$ = dispatch2(unary, ripper_intern("-@"), $$);
6944  %*/
6945  ;}
6946  break;
6947 
6948  case 219:
6949 #line 2125 "parse.y"
6950  {
6951  /*%%%*/
6952  (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
6953  /*%
6954  $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
6955  $$ = dispatch2(unary, ripper_intern("-@"), $$);
6956  %*/
6957  ;}
6958  break;
6959 
6960  case 220:
6961 #line 2134 "parse.y"
6962  {
6963  /*%%%*/
6964  (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
6965  /*%
6966  $$ = dispatch2(unary, ripper_intern("+@"), $2);
6967  %*/
6968  ;}
6969  break;
6970 
6971  case 221:
6972 #line 2142 "parse.y"
6973  {
6974  /*%%%*/
6975  (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
6976  /*%
6977  $$ = dispatch2(unary, ripper_intern("-@"), $2);
6978  %*/
6979  ;}
6980  break;
6981 
6982  case 222:
6983 #line 2150 "parse.y"
6984  {
6985  /*%%%*/
6986  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
6987  /*%
6988  $$ = dispatch3(binary, $1, ID2SYM('|'), $3);
6989  %*/
6990  ;}
6991  break;
6992 
6993  case 223:
6994 #line 2158 "parse.y"
6995  {
6996  /*%%%*/
6997  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
6998  /*%
6999  $$ = dispatch3(binary, $1, ID2SYM('^'), $3);
7000  %*/
7001  ;}
7002  break;
7003 
7004  case 224:
7005 #line 2166 "parse.y"
7006  {
7007  /*%%%*/
7008  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
7009  /*%
7010  $$ = dispatch3(binary, $1, ID2SYM('&'), $3);
7011  %*/
7012  ;}
7013  break;
7014 
7015  case 225:
7016 #line 2174 "parse.y"
7017  {
7018  /*%%%*/
7019  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
7020  /*%
7021  $$ = dispatch3(binary, $1, ripper_intern("<=>"), $3);
7022  %*/
7023  ;}
7024  break;
7025 
7026  case 226:
7027 #line 2182 "parse.y"
7028  {
7029  /*%%%*/
7030  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
7031  /*%
7032  $$ = dispatch3(binary, $1, ID2SYM('>'), $3);
7033  %*/
7034  ;}
7035  break;
7036 
7037  case 227:
7038 #line 2190 "parse.y"
7039  {
7040  /*%%%*/
7041  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
7042  /*%
7043  $$ = dispatch3(binary, $1, ripper_intern(">="), $3);
7044  %*/
7045  ;}
7046  break;
7047 
7048  case 228:
7049 #line 2198 "parse.y"
7050  {
7051  /*%%%*/
7052  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
7053  /*%
7054  $$ = dispatch3(binary, $1, ID2SYM('<'), $3);
7055  %*/
7056  ;}
7057  break;
7058 
7059  case 229:
7060 #line 2206 "parse.y"
7061  {
7062  /*%%%*/
7063  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
7064  /*%
7065  $$ = dispatch3(binary, $1, ripper_intern("<="), $3);
7066  %*/
7067  ;}
7068  break;
7069 
7070  case 230:
7071 #line 2214 "parse.y"
7072  {
7073  /*%%%*/
7074  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
7075  /*%
7076  $$ = dispatch3(binary, $1, ripper_intern("=="), $3);
7077  %*/
7078  ;}
7079  break;
7080 
7081  case 231:
7082 #line 2222 "parse.y"
7083  {
7084  /*%%%*/
7085  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
7086  /*%
7087  $$ = dispatch3(binary, $1, ripper_intern("==="), $3);
7088  %*/
7089  ;}
7090  break;
7091 
7092  case 232:
7093 #line 2230 "parse.y"
7094  {
7095  /*%%%*/
7096  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
7097  /*%
7098  $$ = dispatch3(binary, $1, ripper_intern("!="), $3);
7099  %*/
7100  ;}
7101  break;
7102 
7103  case 233:
7104 #line 2238 "parse.y"
7105  {
7106  /*%%%*/
7107  (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7108  if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && RB_TYPE_P((yyvsp[(1) - (3)].node)->nd_lit, T_REGEXP)) {
7109  (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
7110  }
7111  /*%
7112  $$ = dispatch3(binary, $1, ripper_intern("=~"), $3);
7113  %*/
7114  ;}
7115  break;
7116 
7117  case 234:
7118 #line 2249 "parse.y"
7119  {
7120  /*%%%*/
7121  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
7122  /*%
7123  $$ = dispatch3(binary, $1, ripper_intern("!~"), $3);
7124  %*/
7125  ;}
7126  break;
7127 
7128  case 235:
7129 #line 2257 "parse.y"
7130  {
7131  /*%%%*/
7132  (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
7133  /*%
7134  $$ = dispatch2(unary, ID2SYM('!'), $2);
7135  %*/
7136  ;}
7137  break;
7138 
7139  case 236:
7140 #line 2265 "parse.y"
7141  {
7142  /*%%%*/
7143  (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
7144  /*%
7145  $$ = dispatch2(unary, ID2SYM('~'), $2);
7146  %*/
7147  ;}
7148  break;
7149 
7150  case 237:
7151 #line 2273 "parse.y"
7152  {
7153  /*%%%*/
7154  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
7155  /*%
7156  $$ = dispatch3(binary, $1, ripper_intern("<<"), $3);
7157  %*/
7158  ;}
7159  break;
7160 
7161  case 238:
7162 #line 2281 "parse.y"
7163  {
7164  /*%%%*/
7165  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
7166  /*%
7167  $$ = dispatch3(binary, $1, ripper_intern(">>"), $3);
7168  %*/
7169  ;}
7170  break;
7171 
7172  case 239:
7173 #line 2289 "parse.y"
7174  {
7175  /*%%%*/
7176  (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7177  /*%
7178  $$ = dispatch3(binary, $1, ripper_intern("&&"), $3);
7179  %*/
7180  ;}
7181  break;
7182 
7183  case 240:
7184 #line 2297 "parse.y"
7185  {
7186  /*%%%*/
7187  (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7188  /*%
7189  $$ = dispatch3(binary, $1, ripper_intern("||"), $3);
7190  %*/
7191  ;}
7192  break;
7193 
7194  case 241:
7195 #line 2304 "parse.y"
7196  {in_defined = 1;;}
7197  break;
7198 
7199  case 242:
7200 #line 2305 "parse.y"
7201  {
7202  /*%%%*/
7203  in_defined = 0;
7204  (yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node));
7205  /*%
7206  in_defined = 0;
7207  $$ = dispatch1(defined, $4);
7208  %*/
7209  ;}
7210  break;
7211 
7212  case 243:
7213 #line 2315 "parse.y"
7214  {
7215  /*%%%*/
7216  value_expr((yyvsp[(1) - (6)].node));
7217  (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
7218  fixpos((yyval.node), (yyvsp[(1) - (6)].node));
7219  /*%
7220  $$ = dispatch3(ifop, $1, $3, $6);
7221  %*/
7222  ;}
7223  break;
7224 
7225  case 244:
7226 #line 2325 "parse.y"
7227  {
7228  (yyval.node) = (yyvsp[(1) - (1)].node);
7229  ;}
7230  break;
7231 
7232  case 245:
7233 #line 2331 "parse.y"
7234  {
7235  /*%%%*/
7236  value_expr((yyvsp[(1) - (1)].node));
7237  (yyval.node) = (yyvsp[(1) - (1)].node);
7238  if (!(yyval.node)) (yyval.node) = NEW_NIL();
7239  /*%
7240  $$ = $1;
7241  %*/
7242  ;}
7243  break;
7244 
7245  case 247:
7246 #line 2344 "parse.y"
7247  {
7248  (yyval.node) = (yyvsp[(1) - (2)].node);
7249  ;}
7250  break;
7251 
7252  case 248:
7253 #line 2348 "parse.y"
7254  {
7255  /*%%%*/
7256  (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
7257  /*%
7258  $$ = arg_add_assocs($1, $3);
7259  %*/
7260  ;}
7261  break;
7262 
7263  case 249:
7264 #line 2356 "parse.y"
7265  {
7266  /*%%%*/
7267  (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
7268  /*%
7269  $$ = arg_add_assocs(arg_new(), $1);
7270  %*/
7271  ;}
7272  break;
7273 
7274  case 250:
7275 #line 2366 "parse.y"
7276  {
7277  /*%%%*/
7278  (yyval.node) = (yyvsp[(2) - (3)].node);
7279  /*%
7280  $$ = dispatch1(arg_paren, escape_Qundef($2));
7281  %*/
7282  ;}
7283  break;
7284 
7285  case 255:
7286 #line 2382 "parse.y"
7287  {
7288  (yyval.node) = (yyvsp[(1) - (2)].node);
7289  ;}
7290  break;
7291 
7292  case 256:
7293 #line 2386 "parse.y"
7294  {
7295  /*%%%*/
7296  (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
7297  /*%
7298  $$ = arg_add_assocs($1, $3);
7299  %*/
7300  ;}
7301  break;
7302 
7303  case 257:
7304 #line 2394 "parse.y"
7305  {
7306  /*%%%*/
7307  (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
7308  /*%
7309  $$ = arg_add_assocs(arg_new(), $1);
7310  %*/
7311  ;}
7312  break;
7313 
7314  case 258:
7315 #line 2404 "parse.y"
7316  {
7317  /*%%%*/
7318  value_expr((yyvsp[(1) - (1)].node));
7319  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
7320  /*%
7321  $$ = arg_add(arg_new(), $1);
7322  %*/
7323  ;}
7324  break;
7325 
7326  case 259:
7327 #line 2413 "parse.y"
7328  {
7329  /*%%%*/
7330  (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
7331  /*%
7332  $$ = arg_add_optblock($1, $2);
7333  %*/
7334  ;}
7335  break;
7336 
7337  case 260:
7338 #line 2421 "parse.y"
7339  {
7340  /*%%%*/
7341  (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
7342  (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
7343  /*%
7344  $$ = arg_add_assocs(arg_new(), $1);
7345  $$ = arg_add_optblock($$, $2);
7346  %*/
7347  ;}
7348  break;
7349 
7350  case 261:
7351 #line 2431 "parse.y"
7352  {
7353  /*%%%*/
7354  (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
7355  (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
7356  /*%
7357  $$ = arg_add_optblock(arg_add_assocs($1, $3), $4);
7358  %*/
7359  ;}
7360  break;
7361 
7362  case 263:
7363 #line 2448 "parse.y"
7364  {
7365  (yyval.val) = cmdarg_stack;
7366  CMDARG_PUSH(1);
7367  ;}
7368  break;
7369 
7370  case 264:
7371 #line 2453 "parse.y"
7372  {
7373  /* CMDARG_POP() */
7374  cmdarg_stack = (yyvsp[(1) - (2)].val);
7375  (yyval.node) = (yyvsp[(2) - (2)].node);
7376  ;}
7377  break;
7378 
7379  case 265:
7380 #line 2461 "parse.y"
7381  {
7382  /*%%%*/
7383  (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
7384  /*%
7385  $$ = $2;
7386  %*/
7387  ;}
7388  break;
7389 
7390  case 266:
7391 #line 2471 "parse.y"
7392  {
7393  (yyval.node) = (yyvsp[(2) - (2)].node);
7394  ;}
7395  break;
7396 
7397  case 267:
7398 #line 2475 "parse.y"
7399  {
7400  (yyval.node) = 0;
7401  ;}
7402  break;
7403 
7404  case 268:
7405 #line 2481 "parse.y"
7406  {
7407  /*%%%*/
7408  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
7409  /*%
7410  $$ = arg_add(arg_new(), $1);
7411  %*/
7412  ;}
7413  break;
7414 
7415  case 269:
7416 #line 2489 "parse.y"
7417  {
7418  /*%%%*/
7419  (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
7420  /*%
7421  $$ = arg_add_star(arg_new(), $2);
7422  %*/
7423  ;}
7424  break;
7425 
7426  case 270:
7427 #line 2497 "parse.y"
7428  {
7429  /*%%%*/
7430  NODE *n1;
7431  if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
7432  (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
7433  }
7434  else {
7435  (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7436  }
7437  /*%
7438  $$ = arg_add($1, $3);
7439  %*/
7440  ;}
7441  break;
7442 
7443  case 271:
7444 #line 2511 "parse.y"
7445  {
7446  /*%%%*/
7447  NODE *n1;
7448  if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
7449  (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
7450  }
7451  else {
7452  (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
7453  }
7454  /*%
7455  $$ = arg_add_star($1, $4);
7456  %*/
7457  ;}
7458  break;
7459 
7460  case 272:
7461 #line 2527 "parse.y"
7462  {
7463  /*%%%*/
7464  NODE *n1;
7465  if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
7466  (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
7467  }
7468  else {
7469  (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7470  }
7471  /*%
7472  $$ = mrhs_add(args2mrhs($1), $3);
7473  %*/
7474  ;}
7475  break;
7476 
7477  case 273:
7478 #line 2541 "parse.y"
7479  {
7480  /*%%%*/
7481  NODE *n1;
7482  if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
7483  (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
7484  (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
7485  }
7486  else {
7487  (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
7488  }
7489  /*%
7490  $$ = mrhs_add_star(args2mrhs($1), $4);
7491  %*/
7492  ;}
7493  break;
7494 
7495  case 274:
7496 #line 2556 "parse.y"
7497  {
7498  /*%%%*/
7499  (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
7500  /*%
7501  $$ = mrhs_add_star(mrhs_new(), $2);
7502  %*/
7503  ;}
7504  break;
7505 
7506  case 285:
7507 #line 2576 "parse.y"
7508  {
7509  /*%%%*/
7510  (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
7511  /*%
7512  $$ = method_arg(dispatch1(fcall, $1), arg_new());
7513  %*/
7514  ;}
7515  break;
7516 
7517  case 286:
7518 #line 2584 "parse.y"
7519  {
7520  (yyvsp[(1) - (1)].val) = cmdarg_stack;
7521  cmdarg_stack = 0;
7522  /*%%%*/
7523  (yyval.num) = ruby_sourceline;
7524  /*%
7525  %*/
7526  ;}
7527  break;
7528 
7529  case 287:
7530 #line 2594 "parse.y"
7531  {
7532  cmdarg_stack = (yyvsp[(1) - (4)].val);
7533  /*%%%*/
7534  if ((yyvsp[(3) - (4)].node) == NULL) {
7535  (yyval.node) = NEW_NIL();
7536  }
7537  else {
7538  if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
7539  nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
7540  nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
7541  (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
7542  }
7543  nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
7544  /*%
7545  $$ = dispatch1(begin, $3);
7546  %*/
7547  ;}
7548  break;
7549 
7550  case 288:
7551 #line 2611 "parse.y"
7552  {lex_state = EXPR_ENDARG;;}
7553  break;
7554 
7555  case 289:
7556 #line 2612 "parse.y"
7557  {
7558  /*%%%*/
7559  (yyval.node) = 0;
7560  /*%
7561  $$ = dispatch1(paren, 0);
7562  %*/
7563  ;}
7564  break;
7565 
7566  case 290:
7567 #line 2619 "parse.y"
7568  {lex_state = EXPR_ENDARG;;}
7569  break;
7570 
7571  case 291:
7572 #line 2620 "parse.y"
7573  {
7574  /*%%%*/
7575  (yyval.node) = (yyvsp[(2) - (4)].node);
7576  /*%
7577  $$ = dispatch1(paren, $2);
7578  %*/
7579  ;}
7580  break;
7581 
7582  case 292:
7583 #line 2628 "parse.y"
7584  {
7585  /*%%%*/
7586  (yyval.node) = (yyvsp[(2) - (3)].node);
7587  /*%
7588  $$ = dispatch1(paren, $2);
7589  %*/
7590  ;}
7591  break;
7592 
7593  case 293:
7594 #line 2636 "parse.y"
7595  {
7596  /*%%%*/
7597  (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
7598  /*%
7599  $$ = dispatch2(const_path_ref, $1, $3);
7600  %*/
7601  ;}
7602  break;
7603 
7604  case 294:
7605 #line 2644 "parse.y"
7606  {
7607  /*%%%*/
7608  (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
7609  /*%
7610  $$ = dispatch1(top_const_ref, $2);
7611  %*/
7612  ;}
7613  break;
7614 
7615  case 295:
7616 #line 2652 "parse.y"
7617  {
7618  /*%%%*/
7619  if ((yyvsp[(2) - (3)].node) == 0) {
7620  (yyval.node) = NEW_ZARRAY(); /* zero length array*/
7621  }
7622  else {
7623  (yyval.node) = (yyvsp[(2) - (3)].node);
7624  }
7625  /*%
7626  $$ = dispatch1(array, escape_Qundef($2));
7627  %*/
7628  ;}
7629  break;
7630 
7631  case 296:
7632 #line 2665 "parse.y"
7633  {
7634  /*%%%*/
7635  (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node));
7636  /*%
7637  $$ = dispatch1(hash, escape_Qundef($2));
7638  %*/
7639  ;}
7640  break;
7641 
7642  case 297:
7643 #line 2673 "parse.y"
7644  {
7645  /*%%%*/
7646  (yyval.node) = NEW_RETURN(0);
7647  /*%
7648  $$ = dispatch0(return0);
7649  %*/
7650  ;}
7651  break;
7652 
7653  case 298:
7654 #line 2681 "parse.y"
7655  {
7656  /*%%%*/
7657  (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
7658  /*%
7659  $$ = dispatch1(yield, dispatch1(paren, $3));
7660  %*/
7661  ;}
7662  break;
7663 
7664  case 299:
7665 #line 2689 "parse.y"
7666  {
7667  /*%%%*/
7668  (yyval.node) = NEW_YIELD(0);
7669  /*%
7670  $$ = dispatch1(yield, dispatch1(paren, arg_new()));
7671  %*/
7672  ;}
7673  break;
7674 
7675  case 300:
7676 #line 2697 "parse.y"
7677  {
7678  /*%%%*/
7679  (yyval.node) = NEW_YIELD(0);
7680  /*%
7681  $$ = dispatch0(yield0);
7682  %*/
7683  ;}
7684  break;
7685 
7686  case 301:
7687 #line 2704 "parse.y"
7688  {in_defined = 1;;}
7689  break;
7690 
7691  case 302:
7692 #line 2705 "parse.y"
7693  {
7694  /*%%%*/
7695  in_defined = 0;
7696  (yyval.node) = NEW_DEFINED((yyvsp[(5) - (6)].node));
7697  /*%
7698  in_defined = 0;
7699  $$ = dispatch1(defined, $5);
7700  %*/
7701  ;}
7702  break;
7703 
7704  case 303:
7705 #line 2715 "parse.y"
7706  {
7707  /*%%%*/
7708  (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!');
7709  /*%
7710  $$ = dispatch2(unary, ripper_intern("not"), $3);
7711  %*/
7712  ;}
7713  break;
7714 
7715  case 304:
7716 #line 2723 "parse.y"
7717  {
7718  /*%%%*/
7719  (yyval.node) = call_uni_op(cond(NEW_NIL()), '!');
7720  /*%
7721  $$ = dispatch2(unary, ripper_intern("not"), Qnil);
7722  %*/
7723  ;}
7724  break;
7725 
7726  case 305:
7727 #line 2731 "parse.y"
7728  {
7729  /*%%%*/
7730  (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
7731  (yyval.node) = (yyvsp[(2) - (2)].node);
7732  /*%
7733  $$ = method_arg(dispatch1(fcall, $1), arg_new());
7734  $$ = method_add_block($$, $2);
7735  %*/
7736  ;}
7737  break;
7738 
7739  case 307:
7740 #line 2742 "parse.y"
7741  {
7742  /*%%%*/
7743  block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
7744  (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
7745  (yyval.node) = (yyvsp[(2) - (2)].node);
7746  /*%
7747  $$ = method_add_block($1, $2);
7748  %*/
7749  ;}
7750  break;
7751 
7752  case 308:
7753 #line 2752 "parse.y"
7754  {
7755  (yyval.node) = (yyvsp[(2) - (2)].node);
7756  ;}
7757  break;
7758 
7759  case 309:
7760 #line 2759 "parse.y"
7761  {
7762  /*%%%*/
7763  (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
7764  fixpos((yyval.node), (yyvsp[(2) - (6)].node));
7765  /*%
7766  $$ = dispatch3(if, $2, $4, escape_Qundef($5));
7767  %*/
7768  ;}
7769  break;
7770 
7771  case 310:
7772 #line 2771 "parse.y"
7773  {
7774  /*%%%*/
7775  (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
7776  fixpos((yyval.node), (yyvsp[(2) - (6)].node));
7777  /*%
7778  $$ = dispatch3(unless, $2, $4, escape_Qundef($5));
7779  %*/
7780  ;}
7781  break;
7782 
7783  case 311:
7784 #line 2779 "parse.y"
7785  {COND_PUSH(1);;}
7786  break;
7787 
7788  case 312:
7789 #line 2779 "parse.y"
7790  {COND_POP();;}
7791  break;
7792 
7793  case 313:
7794 #line 2782 "parse.y"
7795  {
7796  /*%%%*/
7797  (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
7798  fixpos((yyval.node), (yyvsp[(3) - (7)].node));
7799  /*%
7800  $$ = dispatch2(while, $3, $6);
7801  %*/
7802  ;}
7803  break;
7804 
7805  case 314:
7806 #line 2790 "parse.y"
7807  {COND_PUSH(1);;}
7808  break;
7809 
7810  case 315:
7811 #line 2790 "parse.y"
7812  {COND_POP();;}
7813  break;
7814 
7815  case 316:
7816 #line 2793 "parse.y"
7817  {
7818  /*%%%*/
7819  (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
7820  fixpos((yyval.node), (yyvsp[(3) - (7)].node));
7821  /*%
7822  $$ = dispatch2(until, $3, $6);
7823  %*/
7824  ;}
7825  break;
7826 
7827  case 317:
7828 #line 2804 "parse.y"
7829  {
7830  /*%%%*/
7831  (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
7832  fixpos((yyval.node), (yyvsp[(2) - (5)].node));
7833  /*%
7834  $$ = dispatch2(case, $2, $4);
7835  %*/
7836  ;}
7837  break;
7838 
7839  case 318:
7840 #line 2813 "parse.y"
7841  {
7842  /*%%%*/
7843  (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
7844  /*%
7845  $$ = dispatch2(case, Qnil, $3);
7846  %*/
7847  ;}
7848  break;
7849 
7850  case 319:
7851 #line 2821 "parse.y"
7852  {COND_PUSH(1);;}
7853  break;
7854 
7855  case 320:
7856 #line 2823 "parse.y"
7857  {COND_POP();;}
7858  break;
7859 
7860  case 321:
7861 #line 2826 "parse.y"
7862  {
7863  /*%%%*/
7864  /*
7865  * for a, b, c in e
7866  * #=>
7867  * e.each{|*x| a, b, c = x
7868  *
7869  * for a in e
7870  * #=>
7871  * e.each{|x| a, = x}
7872  */
7873  ID id = internal_id();
7874  ID *tbl = ALLOC_N(ID, 2);
7875  NODE *m = NEW_ARGS_AUX(0, 0);
7876  NODE *args, *scope;
7877 
7878  if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) {
7879  /* if args.length == 1 && args[0].kind_of?(Array)
7880  * args = args[0]
7881  * end
7882  */
7883  NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
7884  NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
7885  m->nd_next = block_append(
7886  NEW_IF(
7888  NEW_CALL(NEW_CALL(NEW_DVAR(id), idLength, 0),
7889  idEq, one),
7890  NEW_CALL(NEW_CALL(NEW_DVAR(id), idAREF, zero),
7891  rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
7892  0),
7893  NEW_DASGN_CURR(id,
7894  NEW_CALL(NEW_DVAR(id), idAREF, zero)),
7895  0),
7896  node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id)));
7897 
7898  args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
7899  }
7900  else {
7901  if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN ||
7902  nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN ||
7903  nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) {
7904  (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
7905  m->nd_plen = 1;
7906  m->nd_next = (yyvsp[(2) - (9)].node);
7907  args = new_args(m, 0, 0, 0, new_args_tail(0, 0, 0));
7908  }
7909  else {
7910  m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
7911  args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
7912  }
7913  }
7914  scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
7915  tbl[0] = 1; tbl[1] = id;
7916  (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
7917  fixpos((yyval.node), (yyvsp[(2) - (9)].node));
7918  /*%
7919  $$ = dispatch3(for, $2, $5, $8);
7920  %*/
7921  ;}
7922  break;
7923 
7924  case 322:
7925 #line 2887 "parse.y"
7926  {
7927  if (in_def || in_single)
7928  yyerror("class definition in method body");
7929  local_push(0);
7930  /*%%%*/
7931  (yyval.num) = ruby_sourceline;
7932  /*%
7933  %*/
7934  ;}
7935  break;
7936 
7937  case 323:
7938 #line 2898 "parse.y"
7939  {
7940  /*%%%*/
7941  (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
7942  nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
7943  /*%
7944  $$ = dispatch3(class, $2, $3, $5);
7945  %*/
7946  local_pop();
7947  ;}
7948  break;
7949 
7950  case 324:
7951 #line 2908 "parse.y"
7952  {
7953  (yyval.num) = in_def;
7954  in_def = 0;
7955  ;}
7956  break;
7957 
7958  case 325:
7959 #line 2913 "parse.y"
7960  {
7961  (yyval.num) = in_single;
7962  in_single = 0;
7963  local_push(0);
7964  ;}
7965  break;
7966 
7967  case 326:
7968 #line 2920 "parse.y"
7969  {
7970  /*%%%*/
7971  (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
7972  fixpos((yyval.node), (yyvsp[(3) - (8)].node));
7973  /*%
7974  $$ = dispatch2(sclass, $3, $7);
7975  %*/
7976  local_pop();
7977  in_def = (yyvsp[(4) - (8)].num);
7978  in_single = (yyvsp[(6) - (8)].num);
7979  ;}
7980  break;
7981 
7982  case 327:
7983 #line 2932 "parse.y"
7984  {
7985  if (in_def || in_single)
7986  yyerror("module definition in method body");
7987  local_push(0);
7988  /*%%%*/
7989  (yyval.num) = ruby_sourceline;
7990  /*%
7991  %*/
7992  ;}
7993  break;
7994 
7995  case 328:
7996 #line 2943 "parse.y"
7997  {
7998  /*%%%*/
7999  (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
8000  nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
8001  /*%
8002  $$ = dispatch2(module, $2, $4);
8003  %*/
8004  local_pop();
8005  ;}
8006  break;
8007 
8008  case 329:
8009 #line 2953 "parse.y"
8010  {
8011  (yyval.id) = cur_mid;
8012  cur_mid = (yyvsp[(2) - (2)].id);
8013  in_def++;
8014  local_push(0);
8015  ;}
8016  break;
8017 
8018  case 330:
8019 #line 2962 "parse.y"
8020  {
8021  /*%%%*/
8022  NODE *body = remove_begin((yyvsp[(5) - (6)].node));
8023  reduce_nodes(&body);
8024  (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
8025  nd_set_line((yyval.node), (yyvsp[(1) - (6)].num));
8026  /*%
8027  $$ = dispatch3(def, $2, $4, $5);
8028  %*/
8029  local_pop();
8030  in_def--;
8031  cur_mid = (yyvsp[(3) - (6)].id);
8032  ;}
8033  break;
8034 
8035  case 331:
8036 #line 2975 "parse.y"
8037  {lex_state = EXPR_FNAME;;}
8038  break;
8039 
8040  case 332:
8041 #line 2976 "parse.y"
8042  {
8043  in_single++;
8044  lex_state = EXPR_ENDFN; /* force for args */
8045  local_push(0);
8046  ;}
8047  break;
8048 
8049  case 333:
8050 #line 2984 "parse.y"
8051  {
8052  /*%%%*/
8053  NODE *body = remove_begin((yyvsp[(8) - (9)].node));
8054  reduce_nodes(&body);
8055  (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
8056  nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
8057  /*%
8058  $$ = dispatch5(defs, $2, $3, $5, $7, $8);
8059  %*/
8060  local_pop();
8061  in_single--;
8062  ;}
8063  break;
8064 
8065  case 334:
8066 #line 2997 "parse.y"
8067  {
8068  /*%%%*/
8069  (yyval.node) = NEW_BREAK(0);
8070  /*%
8071  $$ = dispatch1(break, arg_new());
8072  %*/
8073  ;}
8074  break;
8075 
8076  case 335:
8077 #line 3005 "parse.y"
8078  {
8079  /*%%%*/
8080  (yyval.node) = NEW_NEXT(0);
8081  /*%
8082  $$ = dispatch1(next, arg_new());
8083  %*/
8084  ;}
8085  break;
8086 
8087  case 336:
8088 #line 3013 "parse.y"
8089  {
8090  /*%%%*/
8091  (yyval.node) = NEW_REDO();
8092  /*%
8093  $$ = dispatch0(redo);
8094  %*/
8095  ;}
8096  break;
8097 
8098  case 337:
8099 #line 3021 "parse.y"
8100  {
8101  /*%%%*/
8102  (yyval.node) = NEW_RETRY();
8103  /*%
8104  $$ = dispatch0(retry);
8105  %*/
8106  ;}
8107  break;
8108 
8109  case 338:
8110 #line 3031 "parse.y"
8111  {
8112  /*%%%*/
8113  value_expr((yyvsp[(1) - (1)].node));
8114  (yyval.node) = (yyvsp[(1) - (1)].node);
8115  if (!(yyval.node)) (yyval.node) = NEW_NIL();
8116  /*%
8117  $$ = $1;
8118  %*/
8119  ;}
8120  break;
8121 
8122  case 339:
8123 #line 3043 "parse.y"
8124  {
8125  token_info_push("begin");
8126  ;}
8127  break;
8128 
8129  case 340:
8130 #line 3049 "parse.y"
8131  {
8132  token_info_push("if");
8133  ;}
8134  break;
8135 
8136  case 341:
8137 #line 3055 "parse.y"
8138  {
8139  token_info_push("unless");
8140  ;}
8141  break;
8142 
8143  case 342:
8144 #line 3061 "parse.y"
8145  {
8146  token_info_push("while");
8147  ;}
8148  break;
8149 
8150  case 343:
8151 #line 3067 "parse.y"
8152  {
8153  token_info_push("until");
8154  ;}
8155  break;
8156 
8157  case 344:
8158 #line 3073 "parse.y"
8159  {
8160  token_info_push("case");
8161  ;}
8162  break;
8163 
8164  case 345:
8165 #line 3079 "parse.y"
8166  {
8167  token_info_push("for");
8168  ;}
8169  break;
8170 
8171  case 346:
8172 #line 3085 "parse.y"
8173  {
8174  token_info_push("class");
8175  ;}
8176  break;
8177 
8178  case 347:
8179 #line 3091 "parse.y"
8180  {
8181  token_info_push("module");
8182  ;}
8183  break;
8184 
8185  case 348:
8186 #line 3097 "parse.y"
8187  {
8188  token_info_push("def");
8189  /*%%%*/
8190  (yyval.num) = ruby_sourceline;
8191  /*%
8192  %*/
8193  ;}
8194  break;
8195 
8196  case 349:
8197 #line 3107 "parse.y"
8198  {
8199  token_info_pop("end");
8200  ;}
8201  break;
8202 
8203  case 356:
8204 #line 3137 "parse.y"
8205  {
8206  /*%%%*/
8207  (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
8208  fixpos((yyval.node), (yyvsp[(2) - (5)].node));
8209  /*%
8210  $$ = dispatch3(elsif, $2, $4, escape_Qundef($5));
8211  %*/
8212  ;}
8213  break;
8214 
8215  case 358:
8216 #line 3149 "parse.y"
8217  {
8218  /*%%%*/
8219  (yyval.node) = (yyvsp[(2) - (2)].node);
8220  /*%
8221  $$ = dispatch1(else, $2);
8222  %*/
8223  ;}
8224  break;
8225 
8226  case 361:
8227 #line 3163 "parse.y"
8228  {
8229  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
8230  /*%%%*/
8231  /*%
8232  $$ = dispatch1(mlhs_paren, $$);
8233  %*/
8234  ;}
8235  break;
8236 
8237  case 362:
8238 #line 3171 "parse.y"
8239  {
8240  /*%%%*/
8241  (yyval.node) = (yyvsp[(2) - (3)].node);
8242  /*%
8243  $$ = dispatch1(mlhs_paren, $2);
8244  %*/
8245  ;}
8246  break;
8247 
8248  case 363:
8249 #line 3181 "parse.y"
8250  {
8251  /*%%%*/
8252  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
8253  /*%
8254  $$ = mlhs_add(mlhs_new(), $1);
8255  %*/
8256  ;}
8257  break;
8258 
8259  case 364:
8260 #line 3189 "parse.y"
8261  {
8262  /*%%%*/
8263  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
8264  /*%
8265  $$ = mlhs_add($1, $3);
8266  %*/
8267  ;}
8268  break;
8269 
8270  case 365:
8271 #line 3199 "parse.y"
8272  {
8273  /*%%%*/
8274  (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
8275  /*%
8276  $$ = $1;
8277  %*/
8278  ;}
8279  break;
8280 
8281  case 366:
8282 #line 3207 "parse.y"
8283  {
8284  (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
8285  /*%%%*/
8286  (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
8287  /*%
8288  $$ = mlhs_add_star($1, $$);
8289  %*/
8290  ;}
8291  break;
8292 
8293  case 367:
8294 #line 3216 "parse.y"
8295  {
8296  (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
8297  /*%%%*/
8298  (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
8299  /*%
8300  $$ = mlhs_add_star($1, $$);
8301  %*/
8302  ;}
8303  break;
8304 
8305  case 368:
8306 #line 3225 "parse.y"
8307  {
8308  /*%%%*/
8309  (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
8310  /*%
8311  $$ = mlhs_add_star($1, Qnil);
8312  %*/
8313  ;}
8314  break;
8315 
8316  case 369:
8317 #line 3233 "parse.y"
8318  {
8319  /*%%%*/
8320  (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
8321  /*%
8322  $$ = mlhs_add_star($1, $5);
8323  %*/
8324  ;}
8325  break;
8326 
8327  case 370:
8328 #line 3241 "parse.y"
8329  {
8330  (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
8331  /*%%%*/
8332  (yyval.node) = NEW_MASGN(0, (yyval.node));
8333  /*%
8334  $$ = mlhs_add_star(mlhs_new(), $$);
8335  %*/
8336  ;}
8337  break;
8338 
8339  case 371:
8340 #line 3250 "parse.y"
8341  {
8342  (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
8343  /*%%%*/
8344  (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
8345  /*%
8346  #if 0
8347  TODO: Check me
8348  #endif
8349  $$ = mlhs_add_star($$, $4);
8350  %*/
8351  ;}
8352  break;
8353 
8354  case 372:
8355 #line 3262 "parse.y"
8356  {
8357  /*%%%*/
8358  (yyval.node) = NEW_MASGN(0, -1);
8359  /*%
8360  $$ = mlhs_add_star(mlhs_new(), Qnil);
8361  %*/
8362  ;}
8363  break;
8364 
8365  case 373:
8366 #line 3270 "parse.y"
8367  {
8368  /*%%%*/
8369  (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
8370  /*%
8371  $$ = mlhs_add_star(mlhs_new(), Qnil);
8372  %*/
8373  ;}
8374  break;
8375 
8376  case 374:
8377 #line 3281 "parse.y"
8378  {
8379  (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id));
8380  ;}
8381  break;
8382 
8383  case 375:
8384 #line 3285 "parse.y"
8385  {
8386  (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
8387  ;}
8388  break;
8389 
8390  case 376:
8391 #line 3289 "parse.y"
8392  {
8393  (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
8394  ;}
8395  break;
8396 
8397  case 377:
8398 #line 3293 "parse.y"
8399  {
8400  (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
8401  ;}
8402  break;
8403 
8404  case 378:
8405 #line 3299 "parse.y"
8406  {
8407  (yyval.node) = (yyvsp[(2) - (2)].node);
8408  ;}
8409  break;
8410 
8411  case 379:
8412 #line 3303 "parse.y"
8413  {
8414  (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
8415  ;}
8416  break;
8417 
8418  case 380:
8419 #line 3309 "parse.y"
8420  {
8421  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node));
8422  ;}
8423  break;
8424 
8425  case 381:
8426 #line 3313 "parse.y"
8427  {
8428  (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node));
8429  ;}
8430  break;
8431 
8432  case 382:
8433 #line 3317 "parse.y"
8434  {
8435  (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node));
8436  ;}
8437  break;
8438 
8439  case 383:
8440 #line 3321 "parse.y"
8441  {
8442  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
8443  ;}
8444  break;
8445 
8446  case 384:
8447 #line 3325 "parse.y"
8448  {
8449  (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
8450  ;}
8451  break;
8452 
8453  case 385:
8454 #line 3329 "parse.y"
8455  {
8456  (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, 1, Qnone, new_args_tail(Qnone, Qnone, Qnone));
8457  /*%%%*/
8458  /*%
8459  dispatch1(excessed_comma, $$);
8460  %*/
8461  ;}
8462  break;
8463 
8464  case 386:
8465 #line 3337 "parse.y"
8466  {
8467  (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
8468  ;}
8469  break;
8470 
8471  case 387:
8472 #line 3341 "parse.y"
8473  {
8474  (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node));
8475  ;}
8476  break;
8477 
8478  case 388:
8479 #line 3345 "parse.y"
8480  {
8481  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
8482  ;}
8483  break;
8484 
8485  case 389:
8486 #line 3349 "parse.y"
8487  {
8488  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
8489  ;}
8490  break;
8491 
8492  case 390:
8493 #line 3353 "parse.y"
8494  {
8495  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node));
8496  ;}
8497  break;
8498 
8499  case 391:
8500 #line 3357 "parse.y"
8501  {
8502  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
8503  ;}
8504  break;
8505 
8506  case 392:
8507 #line 3361 "parse.y"
8508  {
8509  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node));
8510  ;}
8511  break;
8512 
8513  case 393:
8514 #line 3365 "parse.y"
8515  {
8516  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
8517  ;}
8518  break;
8519 
8520  case 394:
8521 #line 3369 "parse.y"
8522  {
8523  (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
8524  ;}
8525  break;
8526 
8527  case 396:
8528 #line 3376 "parse.y"
8529  {
8530  command_start = TRUE;
8531  ;}
8532  break;
8533 
8534  case 397:
8535 #line 3382 "parse.y"
8536  {
8537  /*%%%*/
8538  (yyval.node) = 0;
8539  /*%
8540  $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
8541  escape_Qundef($2));
8542  %*/
8543  ;}
8544  break;
8545 
8546  case 398:
8547 #line 3391 "parse.y"
8548  {
8549  /*%%%*/
8550  (yyval.node) = 0;
8551  /*%
8552  $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
8553  Qnil);
8554  %*/
8555  ;}
8556  break;
8557 
8558  case 399:
8559 #line 3400 "parse.y"
8560  {
8561  /*%%%*/
8562  (yyval.node) = (yyvsp[(2) - (4)].node);
8563  /*%
8564  $$ = blockvar_new(escape_Qundef($2), escape_Qundef($3));
8565  %*/
8566  ;}
8567  break;
8568 
8569  case 400:
8570 #line 3411 "parse.y"
8571  {
8572  (yyval.node) = 0;
8573  ;}
8574  break;
8575 
8576  case 401:
8577 #line 3415 "parse.y"
8578  {
8579  /*%%%*/
8580  (yyval.node) = 0;
8581  /*%
8582  $$ = $3;
8583  %*/
8584  ;}
8585  break;
8586 
8587  case 404:
8588 #line 3441 "parse.y"
8589  {
8590  new_bv(get_id((yyvsp[(1) - (1)].id)));
8591  /*%%%*/
8592  /*%
8593  $$ = get_value($1);
8594  %*/
8595  ;}
8596  break;
8597 
8598  case 405:
8599 #line 3449 "parse.y"
8600  {
8601  (yyval.node) = 0;
8602  ;}
8603  break;
8604 
8605  case 406:
8606 #line 3454 "parse.y"
8607  {
8608  (yyval.vars) = dyna_push();
8609  ;}
8610  break;
8611 
8612  case 407:
8613 #line 3457 "parse.y"
8614  {
8615  (yyval.num) = lpar_beg;
8616  lpar_beg = ++paren_nest;
8617  ;}
8618  break;
8619 
8620  case 408:
8621 #line 3463 "parse.y"
8622  {
8623  lpar_beg = (yyvsp[(2) - (4)].num);
8624  /*%%%*/
8625  (yyval.node) = NEW_LAMBDA((yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
8626  /*%
8627  $$ = dispatch2(lambda, $3, $4);
8628  %*/
8629  dyna_pop((yyvsp[(1) - (4)].vars));
8630  ;}
8631  break;
8632 
8633  case 409:
8634 #line 3475 "parse.y"
8635  {
8636  /*%%%*/
8637  (yyval.node) = (yyvsp[(2) - (4)].node);
8638  /*%
8639  $$ = dispatch1(paren, $2);
8640  %*/
8641  ;}
8642  break;
8643 
8644  case 410:
8645 #line 3483 "parse.y"
8646  {
8647  /*%%%*/
8648  (yyval.node) = (yyvsp[(1) - (1)].node);
8649  /*%
8650  $$ = $1;
8651  %*/
8652  ;}
8653  break;
8654 
8655  case 411:
8656 #line 3493 "parse.y"
8657  {
8658  (yyval.node) = (yyvsp[(2) - (3)].node);
8659  ;}
8660  break;
8661 
8662  case 412:
8663 #line 3497 "parse.y"
8664  {
8665  (yyval.node) = (yyvsp[(2) - (3)].node);
8666  ;}
8667  break;
8668 
8669  case 413:
8670 #line 3503 "parse.y"
8671  {
8672  (yyvsp[(1) - (1)].vars) = dyna_push();
8673  /*%%%*/
8674  (yyval.num) = ruby_sourceline;
8675  /*% %*/
8676  ;}
8677  break;
8678 
8679  case 414:
8680 #line 3512 "parse.y"
8681  {
8682  /*%%%*/
8683  (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
8684  nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
8685  /*%
8686  $$ = dispatch2(do_block, escape_Qundef($3), $4);
8687  %*/
8688  dyna_pop((yyvsp[(1) - (5)].vars));
8689  ;}
8690  break;
8691 
8692  case 415:
8693 #line 3524 "parse.y"
8694  {
8695  /*%%%*/
8696  if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
8697  compile_error(PARSER_ARG "block given to yield");
8698  }
8699  else {
8700  block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
8701  }
8702  (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
8703  (yyval.node) = (yyvsp[(2) - (2)].node);
8704  fixpos((yyval.node), (yyvsp[(1) - (2)].node));
8705  /*%
8706  $$ = method_add_block($1, $2);
8707  %*/
8708  ;}
8709  break;
8710 
8711  case 416:
8712 #line 3540 "parse.y"
8713  {
8714  /*%%%*/
8715  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
8716  /*%
8717  $$ = dispatch3(call, $1, $2, $3);
8718  $$ = method_optarg($$, $4);
8719  %*/
8720  ;}
8721  break;
8722 
8723  case 417:
8724 #line 3549 "parse.y"
8725  {
8726  /*%%%*/
8727  block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
8728  (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
8729  (yyval.node) = (yyvsp[(5) - (5)].node);
8730  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
8731  /*%
8732  $$ = dispatch4(command_call, $1, $2, $3, $4);
8733  $$ = method_add_block($$, $5);
8734  %*/
8735  ;}
8736  break;
8737 
8738  case 418:
8739 #line 3561 "parse.y"
8740  {
8741  /*%%%*/
8742  block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
8743  (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
8744  (yyval.node) = (yyvsp[(5) - (5)].node);
8745  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
8746  /*%
8747  $$ = dispatch4(command_call, $1, $2, $3, $4);
8748  $$ = method_add_block($$, $5);
8749  %*/
8750  ;}
8751  break;
8752 
8753  case 419:
8754 #line 3575 "parse.y"
8755  {
8756  /*%%%*/
8757  (yyval.node) = (yyvsp[(1) - (2)].node);
8758  (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
8759  /*%
8760  $$ = method_arg(dispatch1(fcall, $1), $2);
8761  %*/
8762  ;}
8763  break;
8764 
8765  case 420:
8766 #line 3584 "parse.y"
8767  {
8768  /*%%%*/
8769  (yyval.num) = ruby_sourceline;
8770  /*% %*/
8771  ;}
8772  break;
8773 
8774  case 421:
8775 #line 3590 "parse.y"
8776  {
8777  /*%%%*/
8778  (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
8779  nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
8780  /*%
8781  $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
8782  $$ = method_optarg($$, $5);
8783  %*/
8784  ;}
8785  break;
8786 
8787  case 422:
8788 #line 3600 "parse.y"
8789  {
8790  /*%%%*/
8791  (yyval.num) = ruby_sourceline;
8792  /*% %*/
8793  ;}
8794  break;
8795 
8796  case 423:
8797 #line 3606 "parse.y"
8798  {
8799  /*%%%*/
8800  (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
8801  nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
8802  /*%
8803  $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
8804  $$ = method_optarg($$, $5);
8805  %*/
8806  ;}
8807  break;
8808 
8809  case 424:
8810 #line 3616 "parse.y"
8811  {
8812  /*%%%*/
8813  (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
8814  /*%
8815  $$ = dispatch3(call, $1, ripper_intern("::"), $3);
8816  %*/
8817  ;}
8818  break;
8819 
8820  case 425:
8821 #line 3624 "parse.y"
8822  {
8823  /*%%%*/
8824  (yyval.num) = ruby_sourceline;
8825  /*% %*/
8826  ;}
8827  break;
8828 
8829  case 426:
8830 #line 3630 "parse.y"
8831  {
8832  /*%%%*/
8833  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), rb_intern("call"), (yyvsp[(4) - (4)].node));
8834  nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
8835  /*%
8836  $$ = dispatch3(call, $1, ripper_id2sym('.'),
8837  ripper_intern("call"));
8838  $$ = method_optarg($$, $4);
8839  %*/
8840  ;}
8841  break;
8842 
8843  case 427:
8844 #line 3641 "parse.y"
8845  {
8846  /*%%%*/
8847  (yyval.num) = ruby_sourceline;
8848  /*% %*/
8849  ;}
8850  break;
8851 
8852  case 428:
8853 #line 3647 "parse.y"
8854  {
8855  /*%%%*/
8856  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), rb_intern("call"), (yyvsp[(4) - (4)].node));
8857  nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
8858  /*%
8859  $$ = dispatch3(call, $1, ripper_intern("::"),
8860  ripper_intern("call"));
8861  $$ = method_optarg($$, $4);
8862  %*/
8863  ;}
8864  break;
8865 
8866  case 429:
8867 #line 3658 "parse.y"
8868  {
8869  /*%%%*/
8870  (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
8871  /*%
8872  $$ = dispatch1(super, $2);
8873  %*/
8874  ;}
8875  break;
8876 
8877  case 430:
8878 #line 3666 "parse.y"
8879  {
8880  /*%%%*/
8881  (yyval.node) = NEW_ZSUPER();
8882  /*%
8883  $$ = dispatch0(zsuper);
8884  %*/
8885  ;}
8886  break;
8887 
8888  case 431:
8889 #line 3674 "parse.y"
8890  {
8891  /*%%%*/
8892  if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
8893  (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
8894  else
8895  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
8896  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
8897  /*%
8898  $$ = dispatch2(aref, $1, escape_Qundef($3));
8899  %*/
8900  ;}
8901  break;
8902 
8903  case 432:
8904 #line 3688 "parse.y"
8905  {
8906  (yyvsp[(1) - (1)].vars) = dyna_push();
8907  /*%%%*/
8908  (yyval.num) = ruby_sourceline;
8909  /*%
8910  %*/
8911  ;}
8912  break;
8913 
8914  case 433:
8915 #line 3697 "parse.y"
8916  {
8917  /*%%%*/
8918  (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
8919  nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
8920  /*%
8921  $$ = dispatch2(brace_block, escape_Qundef($3), $4);
8922  %*/
8923  dyna_pop((yyvsp[(1) - (5)].vars));
8924  ;}
8925  break;
8926 
8927  case 434:
8928 #line 3707 "parse.y"
8929  {
8930  (yyvsp[(1) - (1)].vars) = dyna_push();
8931  /*%%%*/
8932  (yyval.num) = ruby_sourceline;
8933  /*%
8934  %*/
8935  ;}
8936  break;
8937 
8938  case 435:
8939 #line 3716 "parse.y"
8940  {
8941  /*%%%*/
8942  (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
8943  nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
8944  /*%
8945  $$ = dispatch2(do_block, escape_Qundef($3), $4);
8946  %*/
8947  dyna_pop((yyvsp[(1) - (5)].vars));
8948  ;}
8949  break;
8950 
8951  case 436:
8952 #line 3730 "parse.y"
8953  {
8954  /*%%%*/
8955  (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
8956  /*%
8957  $$ = dispatch3(when, $2, $4, escape_Qundef($5));
8958  %*/
8959  ;}
8960  break;
8961 
8962  case 439:
8963 #line 3746 "parse.y"
8964  {
8965  /*%%%*/
8966  if ((yyvsp[(3) - (6)].node)) {
8967  (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
8968  (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
8969  }
8970  (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
8971  fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
8972  /*%
8973  $$ = dispatch4(rescue,
8974  escape_Qundef($2),
8975  escape_Qundef($3),
8976  escape_Qundef($5),
8977  escape_Qundef($6));
8978  %*/
8979  ;}
8980  break;
8981 
8982  case 441:
8983 #line 3766 "parse.y"
8984  {
8985  /*%%%*/
8986  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
8987  /*%
8988  $$ = rb_ary_new3(1, $1);
8989  %*/
8990  ;}
8991  break;
8992 
8993  case 442:
8994 #line 3774 "parse.y"
8995  {
8996  /*%%%*/
8997  if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
8998  /*%
8999  $$ = $1;
9000  %*/
9001  ;}
9002  break;
9003 
9004  case 444:
9005 #line 3785 "parse.y"
9006  {
9007  (yyval.node) = (yyvsp[(2) - (2)].node);
9008  ;}
9009  break;
9010 
9011  case 446:
9012 #line 3792 "parse.y"
9013  {
9014  /*%%%*/
9015  (yyval.node) = (yyvsp[(2) - (2)].node);
9016  /*%
9017  $$ = dispatch1(ensure, $2);
9018  %*/
9019  ;}
9020  break;
9021 
9022  case 449:
9023 #line 3804 "parse.y"
9024  {
9025  /*%%%*/
9026  (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
9027  /*%
9028  $$ = dispatch1(symbol_literal, $1);
9029  %*/
9030  ;}
9031  break;
9032 
9033  case 451:
9034 #line 3815 "parse.y"
9035  {
9036  /*%%%*/
9037  NODE *node = (yyvsp[(1) - (1)].node);
9038  if (!node) {
9039  node = NEW_STR(STR_NEW0());
9040  }
9041  else {
9042  node = evstr2dstr(node);
9043  }
9044  (yyval.node) = node;
9045  /*%
9046  $$ = $1;
9047  %*/
9048  ;}
9049  break;
9050 
9051  case 454:
9052 #line 3834 "parse.y"
9053  {
9054  /*%%%*/
9055  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
9056  /*%
9057  $$ = dispatch2(string_concat, $1, $2);
9058  %*/
9059  ;}
9060  break;
9061 
9062  case 455:
9063 #line 3844 "parse.y"
9064  {
9065  /*%%%*/
9066  (yyval.node) = (yyvsp[(2) - (3)].node);
9067  /*%
9068  $$ = dispatch1(string_literal, $2);
9069  %*/
9070  ;}
9071  break;
9072 
9073  case 456:
9074 #line 3854 "parse.y"
9075  {
9076  /*%%%*/
9077  NODE *node = (yyvsp[(2) - (3)].node);
9078  if (!node) {
9079  node = NEW_XSTR(STR_NEW0());
9080  }
9081  else {
9082  switch (nd_type(node)) {
9083  case NODE_STR:
9084  nd_set_type(node, NODE_XSTR);
9085  break;
9086  case NODE_DSTR:
9087  nd_set_type(node, NODE_DXSTR);
9088  break;
9089  default:
9090  node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
9091  break;
9092  }
9093  }
9094  (yyval.node) = node;
9095  /*%
9096  $$ = dispatch1(xstring_literal, $2);
9097  %*/
9098  ;}
9099  break;
9100 
9101  case 457:
9102 #line 3881 "parse.y"
9103  {
9104  /*%%%*/
9105  int options = (yyvsp[(3) - (3)].num);
9106  NODE *node = (yyvsp[(2) - (3)].node);
9107  NODE *list, *prev;
9108  if (!node) {
9109  node = NEW_LIT(reg_compile(STR_NEW0(), options));
9110  }
9111  else switch (nd_type(node)) {
9112  case NODE_STR:
9113  {
9114  VALUE src = node->nd_lit;
9115  nd_set_type(node, NODE_LIT);
9116  node->nd_lit = reg_compile(src, options);
9117  }
9118  break;
9119  default:
9120  node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
9121  case NODE_DSTR:
9122  if (options & RE_OPTION_ONCE) {
9124  }
9125  else {
9126  nd_set_type(node, NODE_DREGX);
9127  }
9128  node->nd_cflag = options & RE_OPTION_MASK;
9129  if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
9130  for (list = (prev = node)->nd_next; list; list = list->nd_next) {
9131  if (nd_type(list->nd_head) == NODE_STR) {
9132  VALUE tail = list->nd_head->nd_lit;
9133  if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
9134  VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
9135  if (!literal_concat0(parser, lit, tail)) {
9136  node = 0;
9137  break;
9138  }
9139  rb_str_resize(tail, 0);
9140  prev->nd_next = list->nd_next;
9141  rb_gc_force_recycle((VALUE)list->nd_head);
9142  rb_gc_force_recycle((VALUE)list);
9143  list = prev;
9144  }
9145  else {
9146  prev = list;
9147  }
9148  }
9149  else {
9150  prev = 0;
9151  }
9152  }
9153  if (!node->nd_next) {
9154  VALUE src = node->nd_lit;
9155  nd_set_type(node, NODE_LIT);
9156  node->nd_lit = reg_compile(src, options);
9157  }
9158  break;
9159  }
9160  (yyval.node) = node;
9161  /*%
9162  $$ = dispatch2(regexp_literal, $2, $3);
9163  %*/
9164  ;}
9165  break;
9166 
9167  case 458:
9168 #line 3946 "parse.y"
9169  {
9170  /*%%%*/
9171  (yyval.node) = NEW_ZARRAY();
9172  /*%
9173  $$ = dispatch0(words_new);
9174  $$ = dispatch1(array, $$);
9175  %*/
9176  ;}
9177  break;
9178 
9179  case 459:
9180 #line 3955 "parse.y"
9181  {
9182  /*%%%*/
9183  (yyval.node) = (yyvsp[(2) - (3)].node);
9184  /*%
9185  $$ = dispatch1(array, $2);
9186  %*/
9187  ;}
9188  break;
9189 
9190  case 460:
9191 #line 3965 "parse.y"
9192  {
9193  /*%%%*/
9194  (yyval.node) = 0;
9195  /*%
9196  $$ = dispatch0(words_new);
9197  %*/
9198  ;}
9199  break;
9200 
9201  case 461:
9202 #line 3973 "parse.y"
9203  {
9204  /*%%%*/
9205  (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
9206  /*%
9207  $$ = dispatch2(words_add, $1, $2);
9208  %*/
9209  ;}
9210  break;
9211 
9212  case 463:
9213 #line 3991 "parse.y"
9214  {
9215  /*%%%*/
9216  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
9217  /*%
9218  $$ = dispatch2(word_add, $1, $2);
9219  %*/
9220  ;}
9221  break;
9222 
9223  case 464:
9224 #line 4001 "parse.y"
9225  {
9226  /*%%%*/
9227  (yyval.node) = NEW_ZARRAY();
9228  /*%
9229  $$ = dispatch0(symbols_new);
9230  $$ = dispatch1(array, $$);
9231  %*/
9232  ;}
9233  break;
9234 
9235  case 465:
9236 #line 4010 "parse.y"
9237  {
9238  /*%%%*/
9239  (yyval.node) = (yyvsp[(2) - (3)].node);
9240  /*%
9241  $$ = dispatch1(array, $2);
9242  %*/
9243  ;}
9244  break;
9245 
9246  case 466:
9247 #line 4020 "parse.y"
9248  {
9249  /*%%%*/
9250  (yyval.node) = 0;
9251  /*%
9252  $$ = dispatch0(symbols_new);
9253  %*/
9254  ;}
9255  break;
9256 
9257  case 467:
9258 #line 4028 "parse.y"
9259  {
9260  /*%%%*/
9261  (yyvsp[(2) - (3)].node) = evstr2dstr((yyvsp[(2) - (3)].node));
9262  nd_set_type((yyvsp[(2) - (3)].node), NODE_DSYM);
9263  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
9264  /*%
9265  $$ = dispatch2(symbols_add, $1, $2);
9266  %*/
9267  ;}
9268  break;
9269 
9270  case 468:
9271 #line 4040 "parse.y"
9272  {
9273  /*%%%*/
9274  (yyval.node) = NEW_ZARRAY();
9275  /*%
9276  $$ = dispatch0(qwords_new);
9277  $$ = dispatch1(array, $$);
9278  %*/
9279  ;}
9280  break;
9281 
9282  case 469:
9283 #line 4049 "parse.y"
9284  {
9285  /*%%%*/
9286  (yyval.node) = (yyvsp[(2) - (3)].node);
9287  /*%
9288  $$ = dispatch1(array, $2);
9289  %*/
9290  ;}
9291  break;
9292 
9293  case 470:
9294 #line 4059 "parse.y"
9295  {
9296  /*%%%*/
9297  (yyval.node) = NEW_ZARRAY();
9298  /*%
9299  $$ = dispatch0(qsymbols_new);
9300  $$ = dispatch1(array, $$);
9301  %*/
9302  ;}
9303  break;
9304 
9305  case 471:
9306 #line 4068 "parse.y"
9307  {
9308  /*%%%*/
9309  (yyval.node) = (yyvsp[(2) - (3)].node);
9310  /*%
9311  $$ = dispatch1(array, $2);
9312  %*/
9313  ;}
9314  break;
9315 
9316  case 472:
9317 #line 4078 "parse.y"
9318  {
9319  /*%%%*/
9320  (yyval.node) = 0;
9321  /*%
9322  $$ = dispatch0(qwords_new);
9323  %*/
9324  ;}
9325  break;
9326 
9327  case 473:
9328 #line 4086 "parse.y"
9329  {
9330  /*%%%*/
9331  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
9332  /*%
9333  $$ = dispatch2(qwords_add, $1, $2);
9334  %*/
9335  ;}
9336  break;
9337 
9338  case 474:
9339 #line 4096 "parse.y"
9340  {
9341  /*%%%*/
9342  (yyval.node) = 0;
9343  /*%
9344  $$ = dispatch0(qsymbols_new);
9345  %*/
9346  ;}
9347  break;
9348 
9349  case 475:
9350 #line 4104 "parse.y"
9351  {
9352  /*%%%*/
9353  VALUE lit;
9354  lit = (yyvsp[(2) - (3)].node)->nd_lit;
9355  (yyvsp[(2) - (3)].node)->nd_lit = ID2SYM(rb_intern_str(lit));
9356  nd_set_type((yyvsp[(2) - (3)].node), NODE_LIT);
9357  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
9358  /*%
9359  $$ = dispatch2(qsymbols_add, $1, $2);
9360  %*/
9361  ;}
9362  break;
9363 
9364  case 476:
9365 #line 4118 "parse.y"
9366  {
9367  /*%%%*/
9368  (yyval.node) = 0;
9369  /*%
9370  $$ = dispatch0(string_content);
9371  %*/
9372  ;}
9373  break;
9374 
9375  case 477:
9376 #line 4126 "parse.y"
9377  {
9378  /*%%%*/
9379  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
9380  /*%
9381  $$ = dispatch2(string_add, $1, $2);
9382  %*/
9383  ;}
9384  break;
9385 
9386  case 478:
9387 #line 4136 "parse.y"
9388  {
9389  /*%%%*/
9390  (yyval.node) = 0;
9391  /*%
9392  $$ = dispatch0(xstring_new);
9393  %*/
9394  ;}
9395  break;
9396 
9397  case 479:
9398 #line 4144 "parse.y"
9399  {
9400  /*%%%*/
9401  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
9402  /*%
9403  $$ = dispatch2(xstring_add, $1, $2);
9404  %*/
9405  ;}
9406  break;
9407 
9408  case 480:
9409 #line 4154 "parse.y"
9410  {
9411  /*%%%*/
9412  (yyval.node) = 0;
9413  /*%
9414  $$ = dispatch0(regexp_new);
9415  %*/
9416  ;}
9417  break;
9418 
9419  case 481:
9420 #line 4162 "parse.y"
9421  {
9422  /*%%%*/
9423  NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
9424  if (!head) {
9425  (yyval.node) = tail;
9426  }
9427  else if (!tail) {
9428  (yyval.node) = head;
9429  }
9430  else {
9431  switch (nd_type(head)) {
9432  case NODE_STR:
9433  nd_set_type(head, NODE_DSTR);
9434  break;
9435  case NODE_DSTR:
9436  break;
9437  default:
9438  head = list_append(NEW_DSTR(Qnil), head);
9439  break;
9440  }
9441  (yyval.node) = list_append(head, tail);
9442  }
9443  /*%
9444  $$ = dispatch2(regexp_add, $1, $2);
9445  %*/
9446  ;}
9447  break;
9448 
9449  case 483:
9450 #line 4192 "parse.y"
9451  {
9452  (yyval.node) = lex_strterm;
9453  lex_strterm = 0;
9454  lex_state = EXPR_BEG;
9455  ;}
9456  break;
9457 
9458  case 484:
9459 #line 4198 "parse.y"
9460  {
9461  /*%%%*/
9462  lex_strterm = (yyvsp[(2) - (3)].node);
9463  (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
9464  /*%
9465  lex_strterm = $<node>2;
9466  $$ = dispatch1(string_dvar, $3);
9467  %*/
9468  ;}
9469  break;
9470 
9471  case 485:
9472 #line 4208 "parse.y"
9473  {
9474  (yyvsp[(1) - (1)].val) = cond_stack;
9475  (yyval.val) = cmdarg_stack;
9476  cond_stack = 0;
9477  cmdarg_stack = 0;
9478  ;}
9479  break;
9480 
9481  case 486:
9482 #line 4214 "parse.y"
9483  {
9484  (yyval.node) = lex_strterm;
9485  lex_strterm = 0;
9486  lex_state = EXPR_BEG;
9487  ;}
9488  break;
9489 
9490  case 487:
9491 #line 4219 "parse.y"
9492  {
9493  (yyval.num) = brace_nest;
9494  brace_nest = 0;
9495  ;}
9496  break;
9497 
9498  case 488:
9499 #line 4224 "parse.y"
9500  {
9501  cond_stack = (yyvsp[(1) - (6)].val);
9502  cmdarg_stack = (yyvsp[(2) - (6)].val);
9503  lex_strterm = (yyvsp[(3) - (6)].node);
9504  brace_nest = (yyvsp[(4) - (6)].num);
9505  /*%%%*/
9506  if ((yyvsp[(5) - (6)].node)) (yyvsp[(5) - (6)].node)->flags &= ~NODE_FL_NEWLINE;
9507  (yyval.node) = new_evstr((yyvsp[(5) - (6)].node));
9508  /*%
9509  $$ = dispatch1(string_embexpr, $5);
9510  %*/
9511  ;}
9512  break;
9513 
9514  case 489:
9515 #line 4239 "parse.y"
9516  {
9517  /*%%%*/
9518  (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
9519  /*%
9520  $$ = dispatch1(var_ref, $1);
9521  %*/
9522  ;}
9523  break;
9524 
9525  case 490:
9526 #line 4247 "parse.y"
9527  {
9528  /*%%%*/
9529  (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
9530  /*%
9531  $$ = dispatch1(var_ref, $1);
9532  %*/
9533  ;}
9534  break;
9535 
9536  case 491:
9537 #line 4255 "parse.y"
9538  {
9539  /*%%%*/
9540  (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
9541  /*%
9542  $$ = dispatch1(var_ref, $1);
9543  %*/
9544  ;}
9545  break;
9546 
9547  case 493:
9548 #line 4266 "parse.y"
9549  {
9550  lex_state = EXPR_END;
9551  /*%%%*/
9552  (yyval.id) = (yyvsp[(2) - (2)].id);
9553  /*%
9554  $$ = dispatch1(symbol, $2);
9555  %*/
9556  ;}
9557  break;
9558 
9559  case 498:
9560 #line 4283 "parse.y"
9561  {
9562  lex_state = EXPR_END;
9563  /*%%%*/
9564  (yyval.node) = dsym_node((yyvsp[(2) - (3)].node));
9565  /*%
9566  $$ = dispatch1(dyna_symbol, $2);
9567  %*/
9568  ;}
9569  break;
9570 
9571  case 501:
9572 #line 4296 "parse.y"
9573  {
9574  /*%%%*/
9575  (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
9576  /*%
9577  $$ = dispatch2(unary, ripper_intern("-@"), $2);
9578  %*/
9579  ;}
9580  break;
9581 
9582  case 502:
9583 #line 4304 "parse.y"
9584  {
9585  /*%%%*/
9586  (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
9587  /*%
9588  $$ = dispatch2(unary, ripper_intern("-@"), $2);
9589  %*/
9590  ;}
9591  break;
9592 
9593  case 508:
9594 #line 4320 "parse.y"
9595  {ifndef_ripper((yyval.id) = keyword_nil);;}
9596  break;
9597 
9598  case 509:
9599 #line 4321 "parse.y"
9600  {ifndef_ripper((yyval.id) = keyword_self);;}
9601  break;
9602 
9603  case 510:
9604 #line 4322 "parse.y"
9605  {ifndef_ripper((yyval.id) = keyword_true);;}
9606  break;
9607 
9608  case 511:
9609 #line 4323 "parse.y"
9610  {ifndef_ripper((yyval.id) = keyword_false);;}
9611  break;
9612 
9613  case 512:
9614 #line 4324 "parse.y"
9615  {ifndef_ripper((yyval.id) = keyword__FILE__);;}
9616  break;
9617 
9618  case 513:
9619 #line 4325 "parse.y"
9620  {ifndef_ripper((yyval.id) = keyword__LINE__);;}
9621  break;
9622 
9623  case 514:
9624 #line 4326 "parse.y"
9625  {ifndef_ripper((yyval.id) = keyword__ENCODING__);;}
9626  break;
9627 
9628  case 515:
9629 #line 4330 "parse.y"
9630  {
9631  /*%%%*/
9632  if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
9633  /*%
9634  if (id_is_var(get_id($1))) {
9635  $$ = dispatch1(var_ref, $1);
9636  }
9637  else {
9638  $$ = dispatch1(vcall, $1);
9639  }
9640  %*/
9641  ;}
9642  break;
9643 
9644  case 516:
9645 #line 4343 "parse.y"
9646  {
9647  /*%%%*/
9648  if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
9649  /*%
9650  $$ = dispatch1(var_ref, $1);
9651  %*/
9652  ;}
9653  break;
9654 
9655  case 517:
9656 #line 4353 "parse.y"
9657  {
9658  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
9659  /*%%%*/
9660  /*%
9661  $$ = dispatch1(var_field, $$);
9662  %*/
9663  ;}
9664  break;
9665 
9666  case 518:
9667 #line 4361 "parse.y"
9668  {
9669  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
9670  /*%%%*/
9671  /*%
9672  $$ = dispatch1(var_field, $$);
9673  %*/
9674  ;}
9675  break;
9676 
9677  case 521:
9678 #line 4375 "parse.y"
9679  {
9680  /*%%%*/
9681  (yyval.node) = 0;
9682  /*%
9683  $$ = Qnil;
9684  %*/
9685  ;}
9686  break;
9687 
9688  case 522:
9689 #line 4383 "parse.y"
9690  {
9691  lex_state = EXPR_BEG;
9692  command_start = TRUE;
9693  ;}
9694  break;
9695 
9696  case 523:
9697 #line 4388 "parse.y"
9698  {
9699  (yyval.node) = (yyvsp[(3) - (4)].node);
9700  ;}
9701  break;
9702 
9703  case 524:
9704 #line 4392 "parse.y"
9705  {
9706  /*%%%*/
9707  yyerrok;
9708  (yyval.node) = 0;
9709  /*%
9710  yyerrok;
9711  $$ = Qnil;
9712  %*/
9713  ;}
9714  break;
9715 
9716  case 525:
9717 #line 4404 "parse.y"
9718  {
9719  /*%%%*/
9720  (yyval.node) = (yyvsp[(2) - (3)].node);
9721  /*%
9722  $$ = dispatch1(paren, $2);
9723  %*/
9724  lex_state = EXPR_BEG;
9725  command_start = TRUE;
9726  ;}
9727  break;
9728 
9729  case 526:
9730 #line 4414 "parse.y"
9731  {
9732  (yyval.node) = (yyvsp[(1) - (2)].node);
9733  lex_state = EXPR_BEG;
9734  command_start = TRUE;
9735  ;}
9736  break;
9737 
9738  case 527:
9739 #line 4422 "parse.y"
9740  {
9741  (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id));
9742  ;}
9743  break;
9744 
9745  case 528:
9746 #line 4426 "parse.y"
9747  {
9748  (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
9749  ;}
9750  break;
9751 
9752  case 529:
9753 #line 4430 "parse.y"
9754  {
9755  (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
9756  ;}
9757  break;
9758 
9759  case 530:
9760 #line 4434 "parse.y"
9761  {
9762  (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
9763  ;}
9764  break;
9765 
9766  case 531:
9767 #line 4440 "parse.y"
9768  {
9769  (yyval.node) = (yyvsp[(2) - (2)].node);
9770  ;}
9771  break;
9772 
9773  case 532:
9774 #line 4444 "parse.y"
9775  {
9776  (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
9777  ;}
9778  break;
9779 
9780  case 533:
9781 #line 4450 "parse.y"
9782  {
9783  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node));
9784  ;}
9785  break;
9786 
9787  case 534:
9788 #line 4454 "parse.y"
9789  {
9790  (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node));
9791  ;}
9792  break;
9793 
9794  case 535:
9795 #line 4458 "parse.y"
9796  {
9797  (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node));
9798  ;}
9799  break;
9800 
9801  case 536:
9802 #line 4462 "parse.y"
9803  {
9804  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
9805  ;}
9806  break;
9807 
9808  case 537:
9809 #line 4466 "parse.y"
9810  {
9811  (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
9812  ;}
9813  break;
9814 
9815  case 538:
9816 #line 4470 "parse.y"
9817  {
9818  (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
9819  ;}
9820  break;
9821 
9822  case 539:
9823 #line 4474 "parse.y"
9824  {
9825  (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node));
9826  ;}
9827  break;
9828 
9829  case 540:
9830 #line 4478 "parse.y"
9831  {
9832  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
9833  ;}
9834  break;
9835 
9836  case 541:
9837 #line 4482 "parse.y"
9838  {
9839  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
9840  ;}
9841  break;
9842 
9843  case 542:
9844 #line 4486 "parse.y"
9845  {
9846  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node));
9847  ;}
9848  break;
9849 
9850  case 543:
9851 #line 4490 "parse.y"
9852  {
9853  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
9854  ;}
9855  break;
9856 
9857  case 544:
9858 #line 4494 "parse.y"
9859  {
9860  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node));
9861  ;}
9862  break;
9863 
9864  case 545:
9865 #line 4498 "parse.y"
9866  {
9867  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
9868  ;}
9869  break;
9870 
9871  case 546:
9872 #line 4502 "parse.y"
9873  {
9874  (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
9875  ;}
9876  break;
9877 
9878  case 547:
9879 #line 4506 "parse.y"
9880  {
9881  (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
9882  (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyval.node));
9883  ;}
9884  break;
9885 
9886  case 548:
9887 #line 4513 "parse.y"
9888  {
9889  /*%%%*/
9890  yyerror("formal argument cannot be a constant");
9891  (yyval.id) = 0;
9892  /*%
9893  $$ = dispatch1(param_error, $1);
9894  %*/
9895  ;}
9896  break;
9897 
9898  case 549:
9899 #line 4522 "parse.y"
9900  {
9901  /*%%%*/
9902  yyerror("formal argument cannot be an instance variable");
9903  (yyval.id) = 0;
9904  /*%
9905  $$ = dispatch1(param_error, $1);
9906  %*/
9907  ;}
9908  break;
9909 
9910  case 550:
9911 #line 4531 "parse.y"
9912  {
9913  /*%%%*/
9914  yyerror("formal argument cannot be a global variable");
9915  (yyval.id) = 0;
9916  /*%
9917  $$ = dispatch1(param_error, $1);
9918  %*/
9919  ;}
9920  break;
9921 
9922  case 551:
9923 #line 4540 "parse.y"
9924  {
9925  /*%%%*/
9926  yyerror("formal argument cannot be a class variable");
9927  (yyval.id) = 0;
9928  /*%
9929  $$ = dispatch1(param_error, $1);
9930  %*/
9931  ;}
9932  break;
9933 
9934  case 553:
9935 #line 4552 "parse.y"
9936  {
9937  formal_argument(get_id((yyvsp[(1) - (1)].id)));
9938  (yyval.id) = (yyvsp[(1) - (1)].id);
9939  ;}
9940  break;
9941 
9942  case 554:
9943 #line 4559 "parse.y"
9944  {
9945  arg_var(get_id((yyvsp[(1) - (1)].id)));
9946  /*%%%*/
9947  (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
9948  /*%
9949  $$ = get_value($1);
9950  %*/
9951  ;}
9952  break;
9953 
9954  case 555:
9955 #line 4568 "parse.y"
9956  {
9957  ID tid = internal_id();
9958  arg_var(tid);
9959  /*%%%*/
9960  if (dyna_in_block()) {
9961  (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
9962  }
9963  else {
9964  (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
9965  }
9966  (yyval.node) = NEW_ARGS_AUX(tid, 1);
9967  (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
9968  /*%
9969  $$ = dispatch1(mlhs_paren, $2);
9970  %*/
9971  ;}
9972  break;
9973 
9974  case 557:
9975 #line 4594 "parse.y"
9976  {
9977  /*%%%*/
9978  (yyval.node) = (yyvsp[(1) - (3)].node);
9979  (yyval.node)->nd_plen++;
9980  (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
9981  rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
9982  /*%
9983  $$ = rb_ary_push($1, $3);
9984  %*/
9985  ;}
9986  break;
9987 
9988  case 558:
9989 #line 4607 "parse.y"
9990  {
9991  arg_var(formal_argument(get_id((yyvsp[(1) - (2)].id))));
9992  (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
9993  /*%%%*/
9994  (yyval.node) = NEW_KW_ARG(0, (yyval.node));
9995  /*%
9996  $$ = rb_assoc_new($$, $2);
9997  %*/
9998  ;}
9999  break;
10000 
10001  case 559:
10002 #line 4619 "parse.y"
10003  {
10004  arg_var(formal_argument(get_id((yyvsp[(1) - (2)].id))));
10005  (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
10006  /*%%%*/
10007  (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10008  /*%
10009  $$ = rb_assoc_new($$, $2);
10010  %*/
10011  ;}
10012  break;
10013 
10014  case 560:
10015 #line 4631 "parse.y"
10016  {
10017  /*%%%*/
10018  (yyval.node) = (yyvsp[(1) - (1)].node);
10019  /*%
10020  $$ = rb_ary_new3(1, $1);
10021  %*/
10022  ;}
10023  break;
10024 
10025  case 561:
10026 #line 4639 "parse.y"
10027  {
10028  /*%%%*/
10029  NODE *kws = (yyvsp[(1) - (3)].node);
10030 
10031  while (kws->nd_next) {
10032  kws = kws->nd_next;
10033  }
10034  kws->nd_next = (yyvsp[(3) - (3)].node);
10035  (yyval.node) = (yyvsp[(1) - (3)].node);
10036  /*%
10037  $$ = rb_ary_push($1, $3);
10038  %*/
10039  ;}
10040  break;
10041 
10042  case 562:
10043 #line 4656 "parse.y"
10044  {
10045  /*%%%*/
10046  (yyval.node) = (yyvsp[(1) - (1)].node);
10047  /*%
10048  $$ = rb_ary_new3(1, $1);
10049  %*/
10050  ;}
10051  break;
10052 
10053  case 563:
10054 #line 4664 "parse.y"
10055  {
10056  /*%%%*/
10057  NODE *kws = (yyvsp[(1) - (3)].node);
10058 
10059  while (kws->nd_next) {
10060  kws = kws->nd_next;
10061  }
10062  kws->nd_next = (yyvsp[(3) - (3)].node);
10063  (yyval.node) = (yyvsp[(1) - (3)].node);
10064  /*%
10065  $$ = rb_ary_push($1, $3);
10066  %*/
10067  ;}
10068  break;
10069 
10070  case 566:
10071 #line 4684 "parse.y"
10072  {
10073  shadowing_lvar(get_id((yyvsp[(2) - (2)].id)));
10074  (yyval.id) = (yyvsp[(2) - (2)].id);
10075  ;}
10076  break;
10077 
10078  case 567:
10079 #line 4689 "parse.y"
10080  {
10081  (yyval.id) = internal_id();
10082  ;}
10083  break;
10084 
10085  case 568:
10086 #line 4695 "parse.y"
10087  {
10088  arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10089  (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10090  /*%%%*/
10091  (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10092  /*%
10093  $$ = rb_assoc_new($$, $3);
10094  %*/
10095  ;}
10096  break;
10097 
10098  case 569:
10099 #line 4707 "parse.y"
10100  {
10101  arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10102  (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10103  /*%%%*/
10104  (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10105  /*%
10106  $$ = rb_assoc_new($$, $3);
10107  %*/
10108  ;}
10109  break;
10110 
10111  case 570:
10112 #line 4719 "parse.y"
10113  {
10114  /*%%%*/
10115  (yyval.node) = (yyvsp[(1) - (1)].node);
10116  /*%
10117  $$ = rb_ary_new3(1, $1);
10118  %*/
10119  ;}
10120  break;
10121 
10122  case 571:
10123 #line 4727 "parse.y"
10124  {
10125  /*%%%*/
10126  NODE *opts = (yyvsp[(1) - (3)].node);
10127 
10128  while (opts->nd_next) {
10129  opts = opts->nd_next;
10130  }
10131  opts->nd_next = (yyvsp[(3) - (3)].node);
10132  (yyval.node) = (yyvsp[(1) - (3)].node);
10133  /*%
10134  $$ = rb_ary_push($1, $3);
10135  %*/
10136  ;}
10137  break;
10138 
10139  case 572:
10140 #line 4743 "parse.y"
10141  {
10142  /*%%%*/
10143  (yyval.node) = (yyvsp[(1) - (1)].node);
10144  /*%
10145  $$ = rb_ary_new3(1, $1);
10146  %*/
10147  ;}
10148  break;
10149 
10150  case 573:
10151 #line 4751 "parse.y"
10152  {
10153  /*%%%*/
10154  NODE *opts = (yyvsp[(1) - (3)].node);
10155 
10156  while (opts->nd_next) {
10157  opts = opts->nd_next;
10158  }
10159  opts->nd_next = (yyvsp[(3) - (3)].node);
10160  (yyval.node) = (yyvsp[(1) - (3)].node);
10161  /*%
10162  $$ = rb_ary_push($1, $3);
10163  %*/
10164  ;}
10165  break;
10166 
10167  case 576:
10168 #line 4771 "parse.y"
10169  {
10170  /*%%%*/
10171  if (!is_local_id((yyvsp[(2) - (2)].id)))
10172  yyerror("rest argument must be local variable");
10173  /*% %*/
10174  arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10175  /*%%%*/
10176  (yyval.id) = (yyvsp[(2) - (2)].id);
10177  /*%
10178  $$ = dispatch1(rest_param, $2);
10179  %*/
10180  ;}
10181  break;
10182 
10183  case 577:
10184 #line 4784 "parse.y"
10185  {
10186  /*%%%*/
10187  (yyval.id) = internal_id();
10188  arg_var((yyval.id));
10189  /*%
10190  $$ = dispatch1(rest_param, Qnil);
10191  %*/
10192  ;}
10193  break;
10194 
10195  case 580:
10196 #line 4799 "parse.y"
10197  {
10198  /*%%%*/
10199  if (!is_local_id((yyvsp[(2) - (2)].id)))
10200  yyerror("block argument must be local variable");
10201  else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
10202  yyerror("duplicated block argument name");
10203  /*% %*/
10204  arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10205  /*%%%*/
10206  (yyval.id) = (yyvsp[(2) - (2)].id);
10207  /*%
10208  $$ = dispatch1(blockarg, $2);
10209  %*/
10210  ;}
10211  break;
10212 
10213  case 581:
10214 #line 4816 "parse.y"
10215  {
10216  (yyval.id) = (yyvsp[(2) - (2)].id);
10217  ;}
10218  break;
10219 
10220  case 582:
10221 #line 4820 "parse.y"
10222  {
10223  /*%%%*/
10224  (yyval.id) = 0;
10225  /*%
10226  $$ = Qundef;
10227  %*/
10228  ;}
10229  break;
10230 
10231  case 583:
10232 #line 4830 "parse.y"
10233  {
10234  /*%%%*/
10235  value_expr((yyvsp[(1) - (1)].node));
10236  (yyval.node) = (yyvsp[(1) - (1)].node);
10237  if (!(yyval.node)) (yyval.node) = NEW_NIL();
10238  /*%
10239  $$ = $1;
10240  %*/
10241  ;}
10242  break;
10243 
10244  case 584:
10245 #line 4839 "parse.y"
10246  {lex_state = EXPR_BEG;;}
10247  break;
10248 
10249  case 585:
10250 #line 4840 "parse.y"
10251  {
10252  /*%%%*/
10253  if ((yyvsp[(3) - (4)].node) == 0) {
10254  yyerror("can't define singleton method for ().");
10255  }
10256  else {
10257  switch (nd_type((yyvsp[(3) - (4)].node))) {
10258  case NODE_STR:
10259  case NODE_DSTR:
10260  case NODE_XSTR:
10261  case NODE_DXSTR:
10262  case NODE_DREGX:
10263  case NODE_LIT:
10264  case NODE_ARRAY:
10265  case NODE_ZARRAY:
10266  yyerror("can't define singleton method for literals");
10267  default:
10268  value_expr((yyvsp[(3) - (4)].node));
10269  break;
10270  }
10271  }
10272  (yyval.node) = (yyvsp[(3) - (4)].node);
10273  /*%
10274  $$ = dispatch1(paren, $3);
10275  %*/
10276  ;}
10277  break;
10278 
10279  case 587:
10280 #line 4870 "parse.y"
10281  {
10282  /*%%%*/
10283  (yyval.node) = (yyvsp[(1) - (2)].node);
10284  /*%
10285  $$ = dispatch1(assoclist_from_args, $1);
10286  %*/
10287  ;}
10288  break;
10289 
10290  case 589:
10291 #line 4887 "parse.y"
10292  {
10293  /*%%%*/
10294  (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
10295  /*%
10296  $$ = rb_ary_push($1, $3);
10297  %*/
10298  ;}
10299  break;
10300 
10301  case 590:
10302 #line 4897 "parse.y"
10303  {
10304  /*%%%*/
10305  (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
10306  /*%
10307  $$ = dispatch2(assoc_new, $1, $3);
10308  %*/
10309  ;}
10310  break;
10311 
10312  case 591:
10313 #line 4905 "parse.y"
10314  {
10315  /*%%%*/
10316  (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
10317  /*%
10318  $$ = dispatch2(assoc_new, $1, $2);
10319  %*/
10320  ;}
10321  break;
10322 
10323  case 592:
10324 #line 4913 "parse.y"
10325  {
10326  /*%%%*/
10327  (yyval.node) = list_append(NEW_LIST(0), (yyvsp[(2) - (2)].node));
10328  /*%
10329  $$ = dispatch1(assoc_splat, $2);
10330  %*/
10331  ;}
10332  break;
10333 
10334  case 614:
10335 #line 4971 "parse.y"
10336  {yyerrok;;}
10337  break;
10338 
10339  case 617:
10340 #line 4976 "parse.y"
10341  {yyerrok;;}
10342  break;
10343 
10344  case 618:
10345 #line 4980 "parse.y"
10346  {
10347  /*%%%*/
10348  (yyval.node) = 0;
10349  /*%
10350  $$ = Qundef;
10351  %*/
10352  ;}
10353  break;
10354 
10355 
10356 /* Line 1267 of yacc.c. */
10357 #line 10356 "parse.c"
10358  default: break;
10359  }
10360  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
10361 
10362  YYPOPSTACK (yylen);
10363  yylen = 0;
10364  YY_STACK_PRINT (yyss, yyssp);
10365 
10366  *++yyvsp = yyval;
10367 
10368 
10369  /* Now `shift' the result of the reduction. Determine what state
10370  that goes to, based on the state we popped back to and the rule
10371  number reduced by. */
10372 
10373  yyn = yyr1[yyn];
10374 
10375  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
10376  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
10377  yystate = yytable[yystate];
10378  else
10379  yystate = yydefgoto[yyn - YYNTOKENS];
10380 
10381  goto yynewstate;
10382 
10383 
10384 /*------------------------------------.
10385 | yyerrlab -- here on detecting error |
10386 `------------------------------------*/
10387 yyerrlab:
10388  /* If not already recovering from an error, report this error. */
10389  if (!yyerrstatus)
10390  {
10392 #if ! YYERROR_VERBOSE
10393  parser_yyerror (parser, YY_("syntax error"));
10394 #else
10395  {
10396  YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
10397  if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
10398  {
10399  YYSIZE_T yyalloc = 2 * yysize;
10400  if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
10401  yyalloc = YYSTACK_ALLOC_MAXIMUM;
10402  if (yymsg != yymsgbuf)
10403  YYSTACK_FREE (yymsg);
10404  yymsg = (char *) YYSTACK_ALLOC (yyalloc);
10405  if (yymsg)
10406  yymsg_alloc = yyalloc;
10407  else
10408  {
10409  yymsg = yymsgbuf;
10410  yymsg_alloc = sizeof yymsgbuf;
10411  }
10412  }
10413 
10414  if (0 < yysize && yysize <= yymsg_alloc)
10415  {
10416  (void) yysyntax_error (yymsg, yystate, yychar);
10417  parser_yyerror (parser, yymsg);
10418  }
10419  else
10420  {
10421  parser_yyerror (parser, YY_("syntax error"));
10422  if (yysize != 0)
10424  }
10425  }
10426 #endif
10427  }
10428 
10429 
10430 
10431  if (yyerrstatus == 3)
10432  {
10433  /* If just tried and failed to reuse look-ahead token after an
10434  error, discard it. */
10435 
10436  if (yychar <= YYEOF)
10437  {
10438  /* Return failure if at end of input. */
10439  if (yychar == YYEOF)
10440  YYABORT;
10441  }
10442  else
10443  {
10444  yydestruct ("Error: discarding",
10445  yytoken, &yylval, parser);
10446  yychar = YYEMPTY;
10447  }
10448  }
10449 
10450  /* Else will try to reuse look-ahead token after shifting the error
10451  token. */
10453 
10454 
10455 /*---------------------------------------------------.
10456 | yyerrorlab -- error raised explicitly by YYERROR. |
10457 `---------------------------------------------------*/
10458 yyerrorlab:
10459 
10460  /* Pacify compilers like GCC when the user code never invokes
10461  YYERROR and the label yyerrorlab therefore never appears in user
10462  code. */
10463  if (/*CONSTCOND*/ 0)
10464  goto yyerrorlab;
10465 
10466  /* Do not reclaim the symbols of the rule which action triggered
10467  this YYERROR. */
10468  YYPOPSTACK (yylen);
10469  yylen = 0;
10470  YY_STACK_PRINT (yyss, yyssp);
10471  yystate = *yyssp;
10472  goto yyerrlab1;
10473 
10474 
10475 /*-------------------------------------------------------------.
10476 | yyerrlab1 -- common code for both syntax error and YYERROR. |
10477 `-------------------------------------------------------------*/
10478 yyerrlab1:
10479  yyerrstatus = 3; /* Each real token shifted decrements this. */
10480 
10481  for (;;)
10482  {
10483  yyn = yypact[yystate];
10484  if (yyn != YYPACT_NINF)
10485  {
10486  yyn += YYTERROR;
10487  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
10488  {
10489  yyn = yytable[yyn];
10490  if (0 < yyn)
10491  break;
10492  }
10493  }
10494 
10495  /* Pop the current state because it cannot handle the error token. */
10496  if (yyssp == yyss)
10497  YYABORT;
10498 
10499 
10500  yydestruct ("Error: popping",
10501  yystos[yystate], yyvsp, parser);
10502  YYPOPSTACK (1);
10503  yystate = *yyssp;
10504  YY_STACK_PRINT (yyss, yyssp);
10505  }
10506 
10507  if (yyn == YYFINAL)
10508  YYACCEPT;
10509 
10510  *++yyvsp = yylval;
10511 
10512 
10513  /* Shift the error token. */
10514  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
10515 
10516  yystate = yyn;
10517  goto yynewstate;
10518 
10519 
10520 /*-------------------------------------.
10521 | yyacceptlab -- YYACCEPT comes here. |
10522 `-------------------------------------*/
10523 yyacceptlab:
10524  yyresult = 0;
10525  goto yyreturn;
10526 
10527 /*-----------------------------------.
10528 | yyabortlab -- YYABORT comes here. |
10529 `-----------------------------------*/
10530 yyabortlab:
10531  yyresult = 1;
10532  goto yyreturn;
10533 
10534 #ifndef yyoverflow
10535 /*-------------------------------------------------.
10536 | yyexhaustedlab -- memory exhaustion comes here. |
10537 `-------------------------------------------------*/
10539  parser_yyerror (parser, YY_("memory exhausted"));
10540  yyresult = 2;
10541  /* Fall through. */
10542 #endif
10543 
10544 yyreturn:
10545  if (yychar != YYEOF && yychar != YYEMPTY)
10546  yydestruct ("Cleanup: discarding lookahead",
10547  yytoken, &yylval, parser);
10548  /* Do not reclaim the symbols of the rule which action triggered
10549  this YYABORT or YYACCEPT. */
10550  YYPOPSTACK (yylen);
10551  YY_STACK_PRINT (yyss, yyssp);
10552  while (yyssp != yyss)
10553  {
10554  yydestruct ("Cleanup: popping",
10555  yystos[*yyssp], yyvsp, parser);
10556  YYPOPSTACK (1);
10557  }
10558 #ifndef yyoverflow
10559  if (yyss != yyssa)
10560  YYSTACK_FREE (yyss);
10561 #endif
10562 #if YYERROR_VERBOSE
10563  if (yymsg != yymsgbuf)
10564  YYSTACK_FREE (yymsg);
10565 #endif
10566  /* Make sure YYID is used. */
10567  return YYID (yyresult);
10568 }
10569 
10570 
10571 #line 4988 "parse.y"
10572 
10573 # undef parser
10574 # undef yylex
10575 # undef yylval
10576 # define yylval (*((YYSTYPE*)(parser->parser_yylval)))
10577 
10578 static int parser_regx_options(struct parser_params*);
10579 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
10580 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
10581 static int parser_parse_string(struct parser_params*,NODE*);
10582 static int parser_here_document(struct parser_params*,NODE*);
10583 
10584 
10585 # define nextc() parser_nextc(parser)
10586 # define pushback(c) parser_pushback(parser, (c))
10587 # define newtok() parser_newtok(parser)
10588 # define tokspace(n) parser_tokspace(parser, (n))
10589 # define tokadd(c) parser_tokadd(parser, (c))
10590 # define tok_hex(numlen) parser_tok_hex(parser, (numlen))
10591 # define read_escape(flags,e) parser_read_escape(parser, (flags), (e))
10592 # define tokadd_escape(e) parser_tokadd_escape(parser, (e))
10593 # define regx_options() parser_regx_options(parser)
10594 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,(f),(t),(p),(n),(e))
10595 # define parse_string(n) parser_parse_string(parser,(n))
10596 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, (c), (enc))
10597 # define here_document(n) parser_here_document(parser,(n))
10598 # define heredoc_identifier() parser_heredoc_identifier(parser)
10599 # define heredoc_restore(n) parser_heredoc_restore(parser,(n))
10600 # define whole_match_p(e,l,i) parser_whole_match_p(parser,(e),(l),(i))
10601 
10602 #ifndef RIPPER
10603 # define set_yylval_str(x) (yylval.node = NEW_STR(x))
10604 # define set_yylval_num(x) (yylval.num = (x))
10605 # define set_yylval_id(x) (yylval.id = (x))
10606 # define set_yylval_name(x) (yylval.id = (x))
10607 # define set_yylval_literal(x) (yylval.node = NEW_LIT(x))
10608 # define set_yylval_node(x) (yylval.node = (x))
10609 # define yylval_id() (yylval.id)
10610 #else
10611 static inline VALUE
10612 ripper_yylval_id(ID x)
10613 {
10614  return (VALUE)NEW_LASGN(x, ID2SYM(x));
10615 }
10616 # define set_yylval_str(x) (void)(x)
10617 # define set_yylval_num(x) (void)(x)
10618 # define set_yylval_id(x) (void)(x)
10619 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
10620 # define set_yylval_literal(x) (void)(x)
10621 # define set_yylval_node(x) (void)(x)
10622 # define yylval_id() yylval.id
10623 #endif
10624 
10625 #ifndef RIPPER
10626 #define ripper_flush(p) (void)(p)
10627 #else
10628 #define ripper_flush(p) ((p)->tokp = (p)->parser_lex_p)
10629 
10630 #define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
10631 
10632 static int
10633 ripper_has_scan_event(struct parser_params *parser)
10634 {
10635 
10636  if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
10637  return lex_p > parser->tokp;
10638 }
10639 
10640 static VALUE
10641 ripper_scan_event_val(struct parser_params *parser, int t)
10642 {
10643  VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
10644  VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
10645  ripper_flush(parser);
10646  return rval;
10647 }
10648 
10649 static void
10650 ripper_dispatch_scan_event(struct parser_params *parser, int t)
10651 {
10652  if (!ripper_has_scan_event(parser)) return;
10653  yylval_rval = ripper_scan_event_val(parser, t);
10654 }
10655 
10656 static void
10657 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
10658 {
10659  if (!ripper_has_scan_event(parser)) return;
10660  (void)ripper_scan_event_val(parser, t);
10661 }
10662 
10663 static void
10664 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
10665 {
10666  int saved_line = ruby_sourceline;
10667  const char *saved_tokp = parser->tokp;
10668 
10669  ruby_sourceline = parser->delayed_line;
10670  parser->tokp = lex_pbeg + parser->delayed_col;
10671  yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
10672  parser->delayed = Qnil;
10673  ruby_sourceline = saved_line;
10674  parser->tokp = saved_tokp;
10675 }
10676 #endif /* RIPPER */
10677 
10678 #include "ruby/regex.h"
10679 #include "ruby/util.h"
10680 
10681 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
10682  since ours (we hope) works properly with all combinations of
10683  machines, compilers, `char' and `unsigned char' argument types.
10684  (Per Bothner suggested the basic approach.) */
10685 #undef SIGN_EXTEND_CHAR
10686 #if __STDC__
10687 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
10688 #else /* not __STDC__ */
10689 /* As in Harbison and Steele. */
10690 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
10691 #endif
10692 
10693 #define parser_encoding_name() (current_enc->name)
10694 #define parser_mbclen() mbclen((lex_p-1),lex_pend,current_enc)
10695 #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,current_enc)
10696 #define is_identchar(p,e,enc) (rb_enc_isalnum(*(p),(enc)) || (*(p)) == '_' || !ISASCII(*(p)))
10697 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,current_enc))
10698 
10699 #define parser_isascii() ISASCII(*(lex_p-1))
10700 
10701 #ifndef RIPPER
10702 static int
10703 token_info_get_column(struct parser_params *parser, const char *token)
10704 {
10705  int column = 1;
10706  const char *p, *pend = lex_p - strlen(token);
10707  for (p = lex_pbeg; p < pend; p++) {
10708  if (*p == '\t') {
10709  column = (((column - 1) / 8) + 1) * 8;
10710  }
10711  column++;
10712  }
10713  return column;
10714 }
10715 
10716 static int
10717 token_info_has_nonspaces(struct parser_params *parser, const char *token)
10718 {
10719  const char *p, *pend = lex_p - strlen(token);
10720  for (p = lex_pbeg; p < pend; p++) {
10721  if (*p != ' ' && *p != '\t') {
10722  return 1;
10723  }
10724  }
10725  return 0;
10726 }
10727 
10728 #undef token_info_push
10729 static void
10730 token_info_push(struct parser_params *parser, const char *token)
10731 {
10732  token_info *ptinfo;
10733 
10734  if (!parser->parser_token_info_enabled) return;
10735  ptinfo = ALLOC(token_info);
10736  ptinfo->token = token;
10737  ptinfo->linenum = ruby_sourceline;
10738  ptinfo->column = token_info_get_column(parser, token);
10739  ptinfo->nonspc = token_info_has_nonspaces(parser, token);
10740  ptinfo->next = parser->parser_token_info;
10741 
10742  parser->parser_token_info = ptinfo;
10743 }
10744 
10745 #undef token_info_pop
10746 static void
10747 token_info_pop(struct parser_params *parser, const char *token)
10748 {
10749  int linenum;
10750  token_info *ptinfo = parser->parser_token_info;
10751 
10752  if (!ptinfo) return;
10753  parser->parser_token_info = ptinfo->next;
10754  if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */
10755  goto finish;
10756  }
10757  linenum = ruby_sourceline;
10758  if (linenum == ptinfo->linenum) { /* SKIP */
10759  goto finish;
10760  }
10761  if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */
10762  goto finish;
10763  }
10764  if (parser->parser_token_info_enabled) {
10766  "mismatched indentations at '%s' with '%s' at %d",
10767  token, ptinfo->token, ptinfo->linenum);
10768  }
10769 
10770  finish:
10771  xfree(ptinfo);
10772 }
10773 #endif /* RIPPER */
10774 
10775 static int
10776 parser_yyerror(struct parser_params *parser, const char *msg)
10777 {
10778 #ifndef RIPPER
10779  const int max_line_margin = 30;
10780  const char *p, *pe;
10781  char *buf;
10782  long len;
10783  int i;
10784 
10785  compile_error(PARSER_ARG "%s", msg);
10786  p = lex_p;
10787  while (lex_pbeg <= p) {
10788  if (*p == '\n') break;
10789  p--;
10790  }
10791  p++;
10792 
10793  pe = lex_p;
10794  while (pe < lex_pend) {
10795  if (*pe == '\n') break;
10796  pe++;
10797  }
10798 
10799  len = pe - p;
10800  if (len > 4) {
10801  char *p2;
10802  const char *pre = "", *post = "";
10803 
10804  if (len > max_line_margin * 2 + 10) {
10805  if (lex_p - p > max_line_margin) {
10806  p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
10807  pre = "...";
10808  }
10809  if (pe - lex_p > max_line_margin) {
10810  pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
10811  post = "...";
10812  }
10813  len = pe - p;
10814  }
10815  buf = ALLOCA_N(char, len+2);
10816  MEMCPY(buf, p, char, len);
10817  buf[len] = '\0';
10818  rb_compile_error_append("%s%s%s", pre, buf, post);
10819 
10820  i = (int)(lex_p - p);
10821  p2 = buf; pe = buf + len;
10822 
10823  while (p2 < pe) {
10824  if (*p2 != '\t') *p2 = ' ';
10825  p2++;
10826  }
10827  buf[i] = '^';
10828  buf[i+1] = '\0';
10829  rb_compile_error_append("%s%s", pre, buf);
10830  }
10831 #else
10832  dispatch1(parse_error, STR_NEW2(msg));
10833 #endif /* !RIPPER */
10834  return 0;
10835 }
10836 
10837 static void parser_prepare(struct parser_params *parser);
10838 
10839 #ifndef RIPPER
10840 static VALUE
10841 debug_lines(const char *f)
10842 {
10843  ID script_lines;
10844  CONST_ID(script_lines, "SCRIPT_LINES__");
10845  if (rb_const_defined_at(rb_cObject, script_lines)) {
10846  VALUE hash = rb_const_get_at(rb_cObject, script_lines);
10847  if (RB_TYPE_P(hash, T_HASH)) {
10849  VALUE lines = rb_ary_new();
10850  rb_hash_aset(hash, fname, lines);
10851  return lines;
10852  }
10853  }
10854  return 0;
10855 }
10856 
10857 static VALUE
10858 coverage(const char *f, int n)
10859 {
10860  VALUE coverages = rb_get_coverages();
10861  if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
10863  VALUE lines = rb_ary_new2(n);
10864  int i;
10865  RBASIC(lines)->klass = 0;
10866  for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil;
10867  RARRAY(lines)->as.heap.len = n;
10868  rb_hash_aset(coverages, fname, lines);
10869  return lines;
10870  }
10871  return 0;
10872 }
10873 
10874 static int
10876 {
10877  return strcmp(ruby_sourcefile, "-e") == 0;
10878 }
10879 
10880 static VALUE
10882 {
10883  int n;
10884  NODE *tree;
10885  struct parser_params *parser = (struct parser_params *)arg;
10886 
10887  if (!compile_for_eval && rb_safe_level() == 0) {
10889  if (ruby_debug_lines && ruby_sourceline > 0) {
10890  VALUE str = STR_NEW0();
10891  n = ruby_sourceline;
10892  do {
10894  } while (--n);
10895  }
10896 
10897  if (!e_option_supplied(parser)) {
10899  }
10900  }
10901 
10902  parser_prepare(parser);
10903  deferred_nodes = 0;
10904 #ifndef RIPPER
10906 #endif
10907 #ifndef RIPPER
10910  parser->parser_ruby_sourceline);
10911  }
10912 #endif
10913  n = yyparse((void*)parser);
10914 #ifndef RIPPER
10917  parser->parser_ruby_sourceline);
10918  }
10919 #endif
10920  ruby_debug_lines = 0;
10921  ruby_coverage = 0;
10922  compile_for_eval = 0;
10923 
10924  lex_strterm = 0;
10925  lex_p = lex_pbeg = lex_pend = 0;
10926  lex_lastline = lex_nextline = 0;
10927  if (parser->nerr) {
10928  return 0;
10929  }
10930  tree = ruby_eval_tree;
10931  if (!tree) {
10932  tree = NEW_NIL();
10933  }
10934  else if (ruby_eval_tree_begin) {
10935  tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
10936  }
10937  return (VALUE)tree;
10938 }
10939 
10940 static NODE*
10941 yycompile(struct parser_params *parser, const char *f, int line)
10942 {
10944  ruby_sourceline = line - 1;
10945  return (NODE *)rb_suppress_tracing(yycompile0, (VALUE)parser);
10946 }
10947 #endif /* !RIPPER */
10948 
10949 static rb_encoding *
10951 {
10952  rb_encoding *enc = rb_enc_get(s);
10953  if (!rb_enc_asciicompat(enc)) {
10954  rb_raise(rb_eArgError, "invalid source encoding");
10955  }
10956  return enc;
10957 }
10958 
10959 static VALUE
10961 {
10962  char *beg, *end, *pend;
10964 
10965  beg = RSTRING_PTR(s);
10966  if (lex_gets_ptr) {
10967  if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
10968  beg += lex_gets_ptr;
10969  }
10970  pend = RSTRING_PTR(s) + RSTRING_LEN(s);
10971  end = beg;
10972  while (end < pend) {
10973  if (*end++ == '\n') break;
10974  }
10975  lex_gets_ptr = end - RSTRING_PTR(s);
10976  return rb_enc_str_new(beg, end - beg, enc);
10977 }
10978 
10979 static VALUE
10981 {
10982  VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
10983  if (NIL_P(line)) return line;
10985 #ifndef RIPPER
10986  if (ruby_debug_lines) {
10989  }
10990  if (ruby_coverage) {
10992  }
10993 #endif
10994  return line;
10995 }
10996 
10997 #ifdef RIPPER
10999 #else
11001 
11002 static NODE*
11003 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11004 {
11005  struct parser_params *parser;
11006  NODE *node;
11007 
11008  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11010  lex_gets_ptr = 0;
11011  lex_input = s;
11012  lex_pbeg = lex_p = lex_pend = 0;
11014 
11015  node = yycompile(parser, f, line);
11016  RB_GC_GUARD(vparser); /* prohibit tail call optimization */
11017 
11018  return node;
11019 }
11020 
11021 NODE*
11022 rb_compile_string(const char *f, VALUE s, int line)
11023 {
11025  return parser_compile_string(rb_parser_new(), f, s, line);
11026 }
11027 
11028 NODE*
11029 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11030 {
11032  return parser_compile_string(vparser, f, s, line);
11033 }
11034 
11035 NODE*
11036 rb_compile_cstr(const char *f, const char *s, int len, int line)
11037 {
11038  VALUE str = rb_str_new(s, len);
11039  return parser_compile_string(rb_parser_new(), f, str, line);
11040 }
11041 
11042 NODE*
11043 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
11044 {
11045  VALUE str = rb_str_new(s, len);
11046  return parser_compile_string(vparser, f, str, line);
11047 }
11048 
11049 static VALUE
11051 {
11052  return rb_io_gets(io);
11053 }
11054 
11055 NODE*
11056 rb_compile_file(const char *f, VALUE file, int start)
11057 {
11058  VALUE volatile vparser = rb_parser_new();
11059 
11060  return rb_parser_compile_file(vparser, f, file, start);
11061 }
11062 
11063 NODE*
11064 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
11065 {
11066  struct parser_params *parser;
11067  NODE *node;
11068 
11069  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11071  lex_input = file;
11072  lex_pbeg = lex_p = lex_pend = 0;
11074 
11075  node = yycompile(parser, f, start);
11076  RB_GC_GUARD(vparser); /* prohibit tail call optimization */
11077 
11078  return node;
11079 }
11080 #endif /* !RIPPER */
11081 
11082 #define STR_FUNC_ESCAPE 0x01
11083 #define STR_FUNC_EXPAND 0x02
11084 #define STR_FUNC_REGEXP 0x04
11085 #define STR_FUNC_QWORDS 0x08
11086 #define STR_FUNC_SYMBOL 0x10
11087 #define STR_FUNC_INDENT 0x20
11088 
11090  str_squote = (0),
11098 };
11099 
11100 static VALUE
11101 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
11102 {
11103  VALUE str;
11104 
11105  str = rb_enc_str_new(p, n, enc);
11106  if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
11108  }
11109  else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
11111  }
11112  }
11113 
11114  return str;
11115 }
11116 
11117 #define lex_goto_eol(parser) ((parser)->parser_lex_p = (parser)->parser_lex_pend)
11118 #define lex_eol_p() (lex_p >= lex_pend)
11119 #define peek(c) peek_n((c), 0)
11120 #define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n])
11121 
11122 static inline int
11124 {
11125  int c;
11126 
11127  if (lex_p == lex_pend) {
11128  VALUE v = lex_nextline;
11129  lex_nextline = 0;
11130  if (!v) {
11131  if (parser->eofp)
11132  return -1;
11133 
11134  if (!lex_input || NIL_P(v = lex_getline(parser))) {
11135  parser->eofp = Qtrue;
11136  lex_goto_eol(parser);
11137  return -1;
11138  }
11139  }
11140  {
11141 #ifdef RIPPER
11142  if (parser->tokp < lex_pend) {
11143  if (NIL_P(parser->delayed)) {
11144  parser->delayed = rb_str_buf_new(1024);
11145  rb_enc_associate(parser->delayed, current_enc);
11146  rb_str_buf_cat(parser->delayed,
11147  parser->tokp, lex_pend - parser->tokp);
11148  parser->delayed_line = ruby_sourceline;
11149  parser->delayed_col = (int)(parser->tokp - lex_pbeg);
11150  }
11151  else {
11152  rb_str_buf_cat(parser->delayed,
11153  parser->tokp, lex_pend - parser->tokp);
11154  }
11155  }
11156 #endif
11157  if (heredoc_end > 0) {
11159  heredoc_end = 0;
11160  }
11161  ruby_sourceline++;
11162  parser->line_count++;
11163  lex_pbeg = lex_p = RSTRING_PTR(v);
11164  lex_pend = lex_p + RSTRING_LEN(v);
11165  ripper_flush(parser);
11166  lex_lastline = v;
11167  }
11168  }
11169  c = (unsigned char)*lex_p++;
11170  if (c == '\r' && peek('\n')) {
11171  lex_p++;
11172  c = '\n';
11173  }
11174 
11175  return c;
11176 }
11177 
11178 static void
11179 parser_pushback(struct parser_params *parser, int c)
11180 {
11181  if (c == -1) return;
11182  lex_p--;
11183  if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
11184  lex_p--;
11185  }
11186 }
11187 
11188 #define was_bol() (lex_p == lex_pbeg + 1)
11189 
11190 #define tokfix() (tokenbuf[tokidx]='\0')
11191 #define tok() tokenbuf
11192 #define toklen() tokidx
11193 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
11194 
11195 static char*
11197 {
11198  tokidx = 0;
11200  if (!tokenbuf) {
11201  toksiz = 60;
11202  tokenbuf = ALLOC_N(char, 60);
11203  }
11204  if (toksiz > 4096) {
11205  toksiz = 60;
11206  REALLOC_N(tokenbuf, char, 60);
11207  }
11208  return tokenbuf;
11209 }
11210 
11211 static char *
11212 parser_tokspace(struct parser_params *parser, int n)
11213 {
11214  tokidx += n;
11215 
11216  if (tokidx >= toksiz) {
11217  do {toksiz *= 2;} while (toksiz < tokidx);
11218  REALLOC_N(tokenbuf, char, toksiz);
11219  }
11220  return &tokenbuf[tokidx-n];
11221 }
11222 
11223 static void
11224 parser_tokadd(struct parser_params *parser, int c)
11225 {
11226  tokenbuf[tokidx++] = (char)c;
11227  if (tokidx >= toksiz) {
11228  toksiz *= 2;
11229  REALLOC_N(tokenbuf, char, toksiz);
11230  }
11231 }
11232 
11233 static int
11234 parser_tok_hex(struct parser_params *parser, size_t *numlen)
11235 {
11236  int c;
11237 
11238  c = scan_hex(lex_p, 2, numlen);
11239  if (!*numlen) {
11240  yyerror("invalid hex escape");
11241  return 0;
11242  }
11243  lex_p += *numlen;
11244  return c;
11245 }
11246 
11247 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
11248 
11249 /* return value is for ?\u3042 */
11250 static int
11252  int string_literal, int symbol_literal, int regexp_literal)
11253 {
11254  /*
11255  * If string_literal is true, then we allow multiple codepoints
11256  * in \u{}, and add the codepoints to the current token.
11257  * Otherwise we're parsing a character literal and return a single
11258  * codepoint without adding it
11259  */
11260 
11261  int codepoint;
11262  size_t numlen;
11263 
11264  if (regexp_literal) { tokadd('\\'); tokadd('u'); }
11265 
11266  if (peek('{')) { /* handle \u{...} form */
11267  do {
11268  if (regexp_literal) { tokadd(*lex_p); }
11269  nextc();
11270  codepoint = scan_hex(lex_p, 6, &numlen);
11271  if (numlen == 0) {
11272  yyerror("invalid Unicode escape");
11273  return 0;
11274  }
11275  if (codepoint > 0x10ffff) {
11276  yyerror("invalid Unicode codepoint (too large)");
11277  return 0;
11278  }
11279  lex_p += numlen;
11280  if (regexp_literal) {
11281  tokcopy((int)numlen);
11282  }
11283  else if (codepoint >= 0x80) {
11284  *encp = rb_utf8_encoding();
11285  if (string_literal) tokaddmbc(codepoint, *encp);
11286  }
11287  else if (string_literal) {
11288  tokadd(codepoint);
11289  }
11290  } while (string_literal && (peek(' ') || peek('\t')));
11291 
11292  if (!peek('}')) {
11293  yyerror("unterminated Unicode escape");
11294  return 0;
11295  }
11296 
11297  if (regexp_literal) { tokadd('}'); }
11298  nextc();
11299  }
11300  else { /* handle \uxxxx form */
11301  codepoint = scan_hex(lex_p, 4, &numlen);
11302  if (numlen < 4) {
11303  yyerror("invalid Unicode escape");
11304  return 0;
11305  }
11306  lex_p += 4;
11307  if (regexp_literal) {
11308  tokcopy(4);
11309  }
11310  else if (codepoint >= 0x80) {
11311  *encp = rb_utf8_encoding();
11312  if (string_literal) tokaddmbc(codepoint, *encp);
11313  }
11314  else if (string_literal) {
11315  tokadd(codepoint);
11316  }
11317  }
11318 
11319  return codepoint;
11320 }
11321 
11322 #define ESCAPE_CONTROL 1
11323 #define ESCAPE_META 2
11324 
11325 static int
11327  rb_encoding **encp)
11328 {
11329  int c;
11330  size_t numlen;
11331 
11332  switch (c = nextc()) {
11333  case '\\': /* Backslash */
11334  return c;
11335 
11336  case 'n': /* newline */
11337  return '\n';
11338 
11339  case 't': /* horizontal tab */
11340  return '\t';
11341 
11342  case 'r': /* carriage-return */
11343  return '\r';
11344 
11345  case 'f': /* form-feed */
11346  return '\f';
11347 
11348  case 'v': /* vertical tab */
11349  return '\13';
11350 
11351  case 'a': /* alarm(bell) */
11352  return '\007';
11353 
11354  case 'e': /* escape */
11355  return 033;
11356 
11357  case '0': case '1': case '2': case '3': /* octal constant */
11358  case '4': case '5': case '6': case '7':
11359  pushback(c);
11360  c = scan_oct(lex_p, 3, &numlen);
11361  lex_p += numlen;
11362  return c;
11363 
11364  case 'x': /* hex constant */
11365  c = tok_hex(&numlen);
11366  if (numlen == 0) return 0;
11367  return c;
11368 
11369  case 'b': /* backspace */
11370  return '\010';
11371 
11372  case 's': /* space */
11373  return ' ';
11374 
11375  case 'M':
11376  if (flags & ESCAPE_META) goto eof;
11377  if ((c = nextc()) != '-') {
11378  pushback(c);
11379  goto eof;
11380  }
11381  if ((c = nextc()) == '\\') {
11382  if (peek('u')) goto eof;
11383  return read_escape(flags|ESCAPE_META, encp) | 0x80;
11384  }
11385  else if (c == -1 || !ISASCII(c)) goto eof;
11386  else {
11387  return ((c & 0xff) | 0x80);
11388  }
11389 
11390  case 'C':
11391  if ((c = nextc()) != '-') {
11392  pushback(c);
11393  goto eof;
11394  }
11395  case 'c':
11396  if (flags & ESCAPE_CONTROL) goto eof;
11397  if ((c = nextc())== '\\') {
11398  if (peek('u')) goto eof;
11399  c = read_escape(flags|ESCAPE_CONTROL, encp);
11400  }
11401  else if (c == '?')
11402  return 0177;
11403  else if (c == -1 || !ISASCII(c)) goto eof;
11404  return c & 0x9f;
11405 
11406  eof:
11407  case -1:
11408  yyerror("Invalid escape character syntax");
11409  return '\0';
11410 
11411  default:
11412  return c;
11413  }
11414 }
11415 
11416 static void
11418 {
11419  int len = rb_enc_codelen(c, enc);
11420  rb_enc_mbcput(c, tokspace(len), enc);
11421 }
11422 
11423 static int
11425 {
11426  int c;
11427  int flags = 0;
11428  size_t numlen;
11429 
11430  first:
11431  switch (c = nextc()) {
11432  case '\n':
11433  return 0; /* just ignore */
11434 
11435  case '0': case '1': case '2': case '3': /* octal constant */
11436  case '4': case '5': case '6': case '7':
11437  {
11438  ruby_scan_oct(--lex_p, 3, &numlen);
11439  if (numlen == 0) goto eof;
11440  lex_p += numlen;
11441  tokcopy((int)numlen + 1);
11442  }
11443  return 0;
11444 
11445  case 'x': /* hex constant */
11446  {
11447  tok_hex(&numlen);
11448  if (numlen == 0) return -1;
11449  tokcopy((int)numlen + 2);
11450  }
11451  return 0;
11452 
11453  case 'M':
11454  if (flags & ESCAPE_META) goto eof;
11455  if ((c = nextc()) != '-') {
11456  pushback(c);
11457  goto eof;
11458  }
11459  tokcopy(3);
11460  flags |= ESCAPE_META;
11461  goto escaped;
11462 
11463  case 'C':
11464  if (flags & ESCAPE_CONTROL) goto eof;
11465  if ((c = nextc()) != '-') {
11466  pushback(c);
11467  goto eof;
11468  }
11469  tokcopy(3);
11470  goto escaped;
11471 
11472  case 'c':
11473  if (flags & ESCAPE_CONTROL) goto eof;
11474  tokcopy(2);
11475  flags |= ESCAPE_CONTROL;
11476  escaped:
11477  if ((c = nextc()) == '\\') {
11478  goto first;
11479  }
11480  else if (c == -1) goto eof;
11481  tokadd(c);
11482  return 0;
11483 
11484  eof:
11485  case -1:
11486  yyerror("Invalid escape character syntax");
11487  return -1;
11488 
11489  default:
11490  tokadd('\\');
11491  tokadd(c);
11492  }
11493  return 0;
11494 }
11495 
11496 static int
11498 {
11499  int kcode = 0;
11500  int kopt = 0;
11501  int options = 0;
11502  int c, opt, kc;
11503 
11504  newtok();
11505  while (c = nextc(), ISALPHA(c)) {
11506  if (c == 'o') {
11507  options |= RE_OPTION_ONCE;
11508  }
11509  else if (rb_char_to_option_kcode(c, &opt, &kc)) {
11510  if (kc >= 0) {
11511  if (kc != rb_ascii8bit_encindex()) kcode = c;
11512  kopt = opt;
11513  }
11514  else {
11515  options |= opt;
11516  }
11517  }
11518  else {
11519  tokadd(c);
11520  }
11521  }
11522  options |= kopt;
11523  pushback(c);
11524  if (toklen()) {
11525  tokfix();
11526  compile_error(PARSER_ARG "unknown regexp option%s - %s",
11527  toklen() > 1 ? "s" : "", tok());
11528  }
11529  return options | RE_OPTION_ENCODING(kcode);
11530 }
11531 
11532 static void
11534 {
11535  rb_str_free(str);
11536  rb_gc_force_recycle(str);
11537 }
11538 
11539 static int
11541 {
11542  int len = parser_precise_mbclen();
11543  if (!MBCLEN_CHARFOUND_P(len)) {
11544  compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
11545  return -1;
11546  }
11547  tokadd(c);
11548  lex_p += --len;
11549  if (len > 0) tokcopy(len);
11550  return c;
11551 }
11552 
11553 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c))
11554 
11555 static inline int
11557 {
11558  switch (c) {
11559  case '$': case '*': case '+': case '.':
11560  case '?': case '^': case '|':
11561  case ')': case ']': case '}': case '>':
11562  return TRUE;
11563  default:
11564  return FALSE;
11565  }
11566 }
11567 
11568 static int
11570  int func, int term, int paren, long *nest,
11571  rb_encoding **encp)
11572 {
11573  int c;
11574  int has_nonascii = 0;
11575  rb_encoding *enc = *encp;
11576  char *errbuf = 0;
11577  static const char mixed_msg[] = "%s mixed within %s source";
11578 
11579 #define mixed_error(enc1, enc2) if (!errbuf) { \
11580  size_t len = sizeof(mixed_msg) - 4; \
11581  len += strlen(rb_enc_name(enc1)); \
11582  len += strlen(rb_enc_name(enc2)); \
11583  errbuf = ALLOCA_N(char, len); \
11584  snprintf(errbuf, len, mixed_msg, \
11585  rb_enc_name(enc1), \
11586  rb_enc_name(enc2)); \
11587  yyerror(errbuf); \
11588  }
11589 #define mixed_escape(beg, enc1, enc2) do { \
11590  const char *pos = lex_p; \
11591  lex_p = (beg); \
11592  mixed_error((enc1), (enc2)); \
11593  lex_p = pos; \
11594  } while (0)
11595 
11596  while ((c = nextc()) != -1) {
11597  if (paren && c == paren) {
11598  ++*nest;
11599  }
11600  else if (c == term) {
11601  if (!nest || !*nest) {
11602  pushback(c);
11603  break;
11604  }
11605  --*nest;
11606  }
11607  else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
11608  int c2 = *lex_p;
11609  if (c2 == '$' || c2 == '@' || c2 == '{') {
11610  pushback(c);
11611  break;
11612  }
11613  }
11614  else if (c == '\\') {
11615  const char *beg = lex_p - 1;
11616  c = nextc();
11617  switch (c) {
11618  case '\n':
11619  if (func & STR_FUNC_QWORDS) break;
11620  if (func & STR_FUNC_EXPAND) continue;
11621  tokadd('\\');
11622  break;
11623 
11624  case '\\':
11625  if (func & STR_FUNC_ESCAPE) tokadd(c);
11626  break;
11627 
11628  case 'u':
11629  if ((func & STR_FUNC_EXPAND) == 0) {
11630  tokadd('\\');
11631  break;
11632  }
11633  parser_tokadd_utf8(parser, &enc, 1,
11634  func & STR_FUNC_SYMBOL,
11635  func & STR_FUNC_REGEXP);
11636  if (has_nonascii && enc != *encp) {
11637  mixed_escape(beg, enc, *encp);
11638  }
11639  continue;
11640 
11641  default:
11642  if (c == -1) return -1;
11643  if (!ISASCII(c)) {
11644  if ((func & STR_FUNC_EXPAND) == 0) tokadd('\\');
11645  goto non_ascii;
11646  }
11647  if (func & STR_FUNC_REGEXP) {
11648  if (c == term && !simple_re_meta(c)) {
11649  tokadd(c);
11650  continue;
11651  }
11652  pushback(c);
11653  if ((c = tokadd_escape(&enc)) < 0)
11654  return -1;
11655  if (has_nonascii && enc != *encp) {
11656  mixed_escape(beg, enc, *encp);
11657  }
11658  continue;
11659  }
11660  else if (func & STR_FUNC_EXPAND) {
11661  pushback(c);
11662  if (func & STR_FUNC_ESCAPE) tokadd('\\');
11663  c = read_escape(0, &enc);
11664  }
11665  else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11666  /* ignore backslashed spaces in %w */
11667  }
11668  else if (c != term && !(paren && c == paren)) {
11669  tokadd('\\');
11670  pushback(c);
11671  continue;
11672  }
11673  }
11674  }
11675  else if (!parser_isascii()) {
11676  non_ascii:
11677  has_nonascii = 1;
11678  if (enc != *encp) {
11679  mixed_error(enc, *encp);
11680  continue;
11681  }
11682  if (tokadd_mbchar(c) == -1) return -1;
11683  continue;
11684  }
11685  else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11686  pushback(c);
11687  break;
11688  }
11689  if (c & 0x80) {
11690  has_nonascii = 1;
11691  if (enc != *encp) {
11692  mixed_error(enc, *encp);
11693  continue;
11694  }
11695  }
11696  tokadd(c);
11697  }
11698  *encp = enc;
11699  return c;
11700 }
11701 
11702 #define NEW_STRTERM(func, term, paren) \
11703  rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
11704 
11705 #ifdef RIPPER
11706 static void
11707 ripper_flush_string_content(struct parser_params *parser, rb_encoding *enc)
11708 {
11709  if (!NIL_P(parser->delayed)) {
11710  ptrdiff_t len = lex_p - parser->tokp;
11711  if (len > 0) {
11712  rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
11713  }
11714  ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
11715  parser->tokp = lex_p;
11716  }
11717 }
11718 
11719 #define flush_string_content(enc) ripper_flush_string_content(parser, (enc))
11720 #else
11721 #define flush_string_content(enc) ((void)(enc))
11722 #endif
11723 
11724 RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20 + 31) / 32];
11725 /* this can be shared with ripper, since it's independent from struct
11726  * parser_params. */
11727 #ifndef RIPPER
11728 #define BIT(c, idx) (((c) / 32 - 1 == idx) ? (1U << ((c) % 32)) : 0)
11729 #define SPECIAL_PUNCT(idx) ( \
11730  BIT('~', idx) | BIT('*', idx) | BIT('$', idx) | BIT('?', idx) | \
11731  BIT('!', idx) | BIT('@', idx) | BIT('/', idx) | BIT('\\', idx) | \
11732  BIT(';', idx) | BIT(',', idx) | BIT('.', idx) | BIT('=', idx) | \
11733  BIT(':', idx) | BIT('<', idx) | BIT('>', idx) | BIT('\"', idx) | \
11734  BIT('&', idx) | BIT('`', idx) | BIT('\'', idx) | BIT('+', idx) | \
11735  BIT('0', idx))
11736 const unsigned int ruby_global_name_punct_bits[] = {
11737  SPECIAL_PUNCT(0),
11738  SPECIAL_PUNCT(1),
11739  SPECIAL_PUNCT(2),
11740 };
11741 #undef BIT
11742 #undef SPECIAL_PUNCT
11743 #endif
11744 
11745 static inline int
11747 {
11748  if (c <= 0x20 || 0x7e < c) return 0;
11749  return (ruby_global_name_punct_bits[(c - 0x20) / 32] >> (c % 32)) & 1;
11750 }
11751 
11752 static int
11754 {
11755  int c;
11756  const char *p = lex_p;
11757 
11758  if (p + 1 >= lex_pend) return 0;
11759  c = *p++;
11760  switch (c) {
11761  case '$':
11762  if ((c = *p) == '-') {
11763  if (++p >= lex_pend) return 0;
11764  c = *p;
11765  }
11766  else if (is_global_name_punct(c) || ISDIGIT(c)) {
11767  return tSTRING_DVAR;
11768  }
11769  break;
11770  case '@':
11771  if ((c = *p) == '@') {
11772  if (++p >= lex_pend) return 0;
11773  c = *p;
11774  }
11775  break;
11776  case '{':
11777  lex_p = p;
11778  command_start = TRUE;
11779  return tSTRING_DBEG;
11780  default:
11781  return 0;
11782  }
11783  if (!ISASCII(c) || c == '_' || ISALPHA(c))
11784  return tSTRING_DVAR;
11785  return 0;
11786 }
11787 
11788 static int
11789 parser_parse_string(struct parser_params *parser, NODE *quote)
11790 {
11791  int func = (int)quote->nd_func;
11792  int term = nd_term(quote);
11793  int paren = nd_paren(quote);
11794  int c, space = 0;
11796 
11797  if (func == -1) return tSTRING_END;
11798  c = nextc();
11799  if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11800  do {c = nextc();} while (ISSPACE(c));
11801  space = 1;
11802  }
11803  if (c == term && !quote->nd_nest) {
11804  if (func & STR_FUNC_QWORDS) {
11805  quote->nd_func = -1;
11806  return ' ';
11807  }
11808  if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
11810  return tREGEXP_END;
11811  }
11812  if (space) {
11813  pushback(c);
11814  return ' ';
11815  }
11816  newtok();
11817  if ((func & STR_FUNC_EXPAND) && c == '#') {
11818  int t = parser_peek_variable_name(parser);
11819  if (t) return t;
11820  tokadd('#');
11821  c = nextc();
11822  }
11823  pushback(c);
11824  if (tokadd_string(func, term, paren, &quote->nd_nest,
11825  &enc) == -1) {
11826  ruby_sourceline = nd_line(quote);
11827  if (func & STR_FUNC_REGEXP) {
11828  if (parser->eofp)
11829  compile_error(PARSER_ARG "unterminated regexp meets end of file");
11830  return tREGEXP_END;
11831  }
11832  else {
11833  if (parser->eofp)
11834  compile_error(PARSER_ARG "unterminated string meets end of file");
11835  return tSTRING_END;
11836  }
11837  }
11838 
11839  tokfix();
11840  set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
11841  flush_string_content(enc);
11842 
11843  return tSTRING_CONTENT;
11844 }
11845 
11846 static int
11848 {
11849  int c = nextc(), term, func = 0;
11850  long len;
11851 
11852  if (c == '-') {
11853  c = nextc();
11854  func = STR_FUNC_INDENT;
11855  }
11856  switch (c) {
11857  case '\'':
11858  func |= str_squote; goto quoted;
11859  case '"':
11860  func |= str_dquote; goto quoted;
11861  case '`':
11862  func |= str_xquote;
11863  quoted:
11864  newtok();
11865  tokadd(func);
11866  term = c;
11867  while ((c = nextc()) != -1 && c != term) {
11868  if (tokadd_mbchar(c) == -1) return 0;
11869  }
11870  if (c == -1) {
11871  compile_error(PARSER_ARG "unterminated here document identifier");
11872  return 0;
11873  }
11874  break;
11875 
11876  default:
11877  if (!parser_is_identchar()) {
11878  pushback(c);
11879  if (func & STR_FUNC_INDENT) {
11880  pushback('-');
11881  }
11882  return 0;
11883  }
11884  newtok();
11885  term = '"';
11886  tokadd(func |= str_dquote);
11887  do {
11888  if (tokadd_mbchar(c) == -1) return 0;
11889  } while ((c = nextc()) != -1 && parser_is_identchar());
11890  pushback(c);
11891  break;
11892  }
11893 
11894  tokfix();
11895 #ifdef RIPPER
11896  ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
11897 #endif
11898  len = lex_p - lex_pbeg;
11899  lex_goto_eol(parser);
11901  STR_NEW(tok(), toklen()), /* nd_lit */
11902  len, /* nd_nth */
11903  lex_lastline); /* nd_orig */
11905  ripper_flush(parser);
11906  return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
11907 }
11908 
11909 static void
11911 {
11912  VALUE line;
11913 
11914  line = here->nd_orig;
11915  lex_lastline = line;
11916  lex_pbeg = RSTRING_PTR(line);
11917  lex_pend = lex_pbeg + RSTRING_LEN(line);
11918  lex_p = lex_pbeg + here->nd_nth;
11920  ruby_sourceline = nd_line(here);
11921  dispose_string(here->nd_lit);
11922  rb_gc_force_recycle((VALUE)here);
11923  ripper_flush(parser);
11924 }
11925 
11926 static int
11928  const char *eos, long len, int indent)
11929 {
11930  const char *p = lex_pbeg;
11931  long n;
11932 
11933  if (indent) {
11934  while (*p && ISSPACE(*p)) p++;
11935  }
11936  n = lex_pend - (p + len);
11937  if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE;
11938  return strncmp(eos, p, len) == 0;
11939 }
11940 
11941 #ifdef RIPPER
11942 static void
11943 ripper_dispatch_heredoc_end(struct parser_params *parser)
11944 {
11945  if (!NIL_P(parser->delayed))
11946  ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
11947  lex_goto_eol(parser);
11948  ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
11949 }
11950 
11951 #define dispatch_heredoc_end() ripper_dispatch_heredoc_end(parser)
11952 #else
11953 #define dispatch_heredoc_end() ((void)0)
11954 #endif
11955 
11956 static int
11958 {
11959  int c, func, indent = 0;
11960  const char *eos, *p, *pend;
11961  long len;
11962  VALUE str = 0;
11964 
11965  eos = RSTRING_PTR(here->nd_lit);
11966  len = RSTRING_LEN(here->nd_lit) - 1;
11967  indent = (func = *eos++) & STR_FUNC_INDENT;
11968 
11969  if ((c = nextc()) == -1) {
11970  error:
11971  compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
11972 #ifdef RIPPER
11973  if (NIL_P(parser->delayed)) {
11974  ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
11975  }
11976  else {
11977  if (str ||
11978  ((len = lex_p - parser->tokp) > 0 &&
11979  (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
11980  rb_str_append(parser->delayed, str);
11981  }
11982  ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
11983  }
11984  lex_goto_eol(parser);
11985 #endif
11986  restore:
11988  lex_strterm = 0;
11989  return 0;
11990  }
11991  if (was_bol() && whole_match_p(eos, len, indent)) {
11994  return tSTRING_END;
11995  }
11996 
11997  if (!(func & STR_FUNC_EXPAND)) {
11998  do {
12000  pend = lex_pend;
12001  if (pend > p) {
12002  switch (pend[-1]) {
12003  case '\n':
12004  if (--pend == p || pend[-1] != '\r') {
12005  pend++;
12006  break;
12007  }
12008  case '\r':
12009  --pend;
12010  }
12011  }
12012  if (str)
12013  rb_str_cat(str, p, pend - p);
12014  else
12015  str = STR_NEW(p, pend - p);
12016  if (pend < lex_pend) rb_str_cat(str, "\n", 1);
12017  lex_goto_eol(parser);
12018  if (nextc() == -1) {
12019  if (str) dispose_string(str);
12020  goto error;
12021  }
12022  } while (!whole_match_p(eos, len, indent));
12023  }
12024  else {
12025  /* int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
12026  newtok();
12027  if (c == '#') {
12028  int t = parser_peek_variable_name(parser);
12029  if (t) return t;
12030  tokadd('#');
12031  c = nextc();
12032  }
12033  do {
12034  pushback(c);
12035  if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
12036  if (parser->eofp) goto error;
12037  goto restore;
12038  }
12039  if (c != '\n') {
12040  set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12041  flush_string_content(enc);
12042  return tSTRING_CONTENT;
12043  }
12044  tokadd(nextc());
12045  /* if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
12046  if ((c = nextc()) == -1) goto error;
12047  } while (!whole_match_p(eos, len, indent));
12048  str = STR_NEW3(tok(), toklen(), enc, func);
12049  }
12052  lex_strterm = NEW_STRTERM(-1, 0, 0);
12053  set_yylval_str(str);
12054  return tSTRING_CONTENT;
12055 }
12056 
12057 #include "lex.c"
12058 
12059 static void
12061 {
12062 #ifndef RIPPER
12063  rb_warning0("ambiguous first argument; put parentheses or even spaces");
12064 #else
12066 #endif
12067 }
12068 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
12069 
12070 static ID
12072 {
12073 #ifndef RIPPER
12074  if (!is_local_id(lhs))
12075  yyerror("formal argument must be local variable");
12076 #endif
12077  shadowing_lvar(lhs);
12078  return lhs;
12079 }
12080 
12081 static int
12082 lvar_defined_gen(struct parser_params *parser, ID id)
12083 {
12084  return (dyna_in_block() && dvar_defined_get(id)) || local_id(id);
12085 }
12086 
12087 /* emacsen -*- hack */
12088 static long
12089 parser_encode_length(struct parser_params *parser, const char *name, long len)
12090 {
12091  long nlen;
12092 
12093  if (len > 5 && name[nlen = len - 5] == '-') {
12094  if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
12095  return nlen;
12096  }
12097  if (len > 4 && name[nlen = len - 4] == '-') {
12098  if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
12099  return nlen;
12100  if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
12101  !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
12102  /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */
12103  return nlen;
12104  }
12105  return len;
12106 }
12107 
12108 static void
12109 parser_set_encode(struct parser_params *parser, const char *name)
12110 {
12111  int idx = rb_enc_find_index(name);
12112  rb_encoding *enc;
12113  VALUE excargs[3];
12114 
12115  if (idx < 0) {
12116  excargs[1] = rb_sprintf("unknown encoding name: %s", name);
12117  error:
12118  excargs[0] = rb_eArgError;
12119  excargs[2] = rb_make_backtrace();
12120  rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
12121  rb_exc_raise(rb_make_exception(3, excargs));
12122  }
12123  enc = rb_enc_from_index(idx);
12124  if (!rb_enc_asciicompat(enc)) {
12125  excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
12126  goto error;
12127  }
12128  parser->enc = enc;
12129 #ifndef RIPPER
12130  if (ruby_debug_lines) {
12131  long i, n = RARRAY_LEN(ruby_debug_lines);
12132  const VALUE *p = RARRAY_PTR(ruby_debug_lines);
12133  for (i = 0; i < n; ++i) {
12134  rb_enc_associate_index(*p, idx);
12135  }
12136  }
12137 #endif
12138 }
12139 
12140 static int
12142 {
12143  const char *p = lex_pbeg, *pend = lex_p - 1;
12144  if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
12145  while (p < pend) {
12146  if (!ISSPACE(*p)) return 0;
12147  p++;
12148  }
12149  return 1;
12150 }
12151 
12152 #ifndef RIPPER
12153 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
12154 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
12155 
12156 static void
12157 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
12158 {
12159  if (!comment_at_top(parser)) {
12160  return;
12161  }
12162  parser_set_encode(parser, val);
12163 }
12164 
12165 static void
12166 parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
12167 {
12168  int *p = &parser->parser_token_info_enabled;
12169 
12170  switch (*val) {
12171  case 't': case 'T':
12172  if (strcasecmp(val, "true") == 0) {
12173  *p = TRUE;
12174  return;
12175  }
12176  break;
12177  case 'f': case 'F':
12178  if (strcasecmp(val, "false") == 0) {
12179  *p = FALSE;
12180  return;
12181  }
12182  break;
12183  }
12184  rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val);
12185 }
12186 
12187 struct magic_comment {
12188  const char *name;
12191 };
12192 
12193 static const struct magic_comment magic_comments[] = {
12196  {"warn_indent", parser_set_token_info},
12197 };
12198 #endif
12199 
12200 static const char *
12201 magic_comment_marker(const char *str, long len)
12202 {
12203  long i = 2;
12204 
12205  while (i < len) {
12206  switch (str[i]) {
12207  case '-':
12208  if (str[i-1] == '*' && str[i-2] == '-') {
12209  return str + i + 1;
12210  }
12211  i += 2;
12212  break;
12213  case '*':
12214  if (i + 1 >= len) return 0;
12215  if (str[i+1] != '-') {
12216  i += 4;
12217  }
12218  else if (str[i-1] != '-') {
12219  i += 2;
12220  }
12221  else {
12222  return str + i + 2;
12223  }
12224  break;
12225  default:
12226  i += 3;
12227  break;
12228  }
12229  }
12230  return 0;
12231 }
12232 
12233 static int
12234 parser_magic_comment(struct parser_params *parser, const char *str, long len)
12235 {
12236  VALUE name = 0, val = 0;
12237  const char *beg, *end, *vbeg, *vend;
12238 #define str_copy(_s, _p, _n) ((_s) \
12239  ? (void)(rb_str_resize((_s), (_n)), \
12240  MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
12241  : (void)((_s) = STR_NEW((_p), (_n))))
12242 
12243  if (len <= 7) return FALSE;
12244  if (!(beg = magic_comment_marker(str, len))) return FALSE;
12245  if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
12246  str = beg;
12247  len = end - beg - 3;
12248 
12249  /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
12250  while (len > 0) {
12251 #ifndef RIPPER
12252  const struct magic_comment *p = magic_comments;
12253 #endif
12254  char *s;
12255  int i;
12256  long n = 0;
12257 
12258  for (; len > 0 && *str; str++, --len) {
12259  switch (*str) {
12260  case '\'': case '"': case ':': case ';':
12261  continue;
12262  }
12263  if (!ISSPACE(*str)) break;
12264  }
12265  for (beg = str; len > 0; str++, --len) {
12266  switch (*str) {
12267  case '\'': case '"': case ':': case ';':
12268  break;
12269  default:
12270  if (ISSPACE(*str)) break;
12271  continue;
12272  }
12273  break;
12274  }
12275  for (end = str; len > 0 && ISSPACE(*str); str++, --len);
12276  if (!len) break;
12277  if (*str != ':') continue;
12278 
12279  do str++; while (--len > 0 && ISSPACE(*str));
12280  if (!len) break;
12281  if (*str == '"') {
12282  for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
12283  if (*str == '\\') {
12284  --len;
12285  ++str;
12286  }
12287  }
12288  vend = str;
12289  if (len) {
12290  --len;
12291  ++str;
12292  }
12293  }
12294  else {
12295  for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
12296  vend = str;
12297  }
12298  while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
12299 
12300  n = end - beg;
12301  str_copy(name, beg, n);
12302  s = RSTRING_PTR(name);
12303  for (i = 0; i < n; ++i) {
12304  if (s[i] == '-') s[i] = '_';
12305  }
12306 #ifndef RIPPER
12307  do {
12308  if (STRNCASECMP(p->name, s, n) == 0) {
12309  n = vend - vbeg;
12310  if (p->length) {
12311  n = (*p->length)(parser, vbeg, n);
12312  }
12313  str_copy(val, vbeg, n);
12314  (*p->func)(parser, s, RSTRING_PTR(val));
12315  break;
12316  }
12317  } while (++p < magic_comments + numberof(magic_comments));
12318 #else
12319  str_copy(val, vbeg, vend - vbeg);
12320  dispatch2(magic_comment, name, val);
12321 #endif
12322  }
12323 
12324  return TRUE;
12325 }
12326 
12327 static void
12328 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
12329 {
12330  int sep = 0;
12331  const char *beg = str;
12332  VALUE s;
12333 
12334  for (;;) {
12335  if (send - str <= 6) return;
12336  switch (str[6]) {
12337  case 'C': case 'c': str += 6; continue;
12338  case 'O': case 'o': str += 5; continue;
12339  case 'D': case 'd': str += 4; continue;
12340  case 'I': case 'i': str += 3; continue;
12341  case 'N': case 'n': str += 2; continue;
12342  case 'G': case 'g': str += 1; continue;
12343  case '=': case ':':
12344  sep = 1;
12345  str += 6;
12346  break;
12347  default:
12348  str += 6;
12349  if (ISSPACE(*str)) break;
12350  continue;
12351  }
12352  if (STRNCASECMP(str-6, "coding", 6) == 0) break;
12353  }
12354  for (;;) {
12355  do {
12356  if (++str >= send) return;
12357  } while (ISSPACE(*str));
12358  if (sep) break;
12359  if (*str != '=' && *str != ':') return;
12360  sep = 1;
12361  str++;
12362  }
12363  beg = str;
12364  while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
12365  s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
12366  parser_set_encode(parser, RSTRING_PTR(s));
12367  rb_str_resize(s, 0);
12368 }
12369 
12370 static void
12372 {
12373  int c = nextc();
12374  switch (c) {
12375  case '#':
12376  if (peek('!')) parser->has_shebang = 1;
12377  break;
12378  case 0xef: /* UTF-8 BOM marker */
12379  if (lex_pend - lex_p >= 2 &&
12380  (unsigned char)lex_p[0] == 0xbb &&
12381  (unsigned char)lex_p[1] == 0xbf) {
12382  parser->enc = rb_utf8_encoding();
12383  lex_p += 2;
12384  lex_pbeg = lex_p;
12385  return;
12386  }
12387  break;
12388  case EOF:
12389  return;
12390  }
12391  pushback(c);
12392  parser->enc = rb_enc_get(lex_lastline);
12393 }
12394 
12395 #define IS_ARG() IS_lex_state(EXPR_ARG_ANY)
12396 #define IS_END() IS_lex_state(EXPR_END_ANY)
12397 #define IS_BEG() IS_lex_state(EXPR_BEG_ANY)
12398 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
12399 #define IS_LABEL_POSSIBLE() ((IS_lex_state(EXPR_BEG | EXPR_ENDFN) && !cmd_state) || IS_ARG())
12400 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1))
12401 #define IS_AFTER_OPERATOR() IS_lex_state(EXPR_FNAME | EXPR_DOT)
12402 
12403 #ifndef RIPPER
12404 #define ambiguous_operator(op, syn) ( \
12405  rb_warning0("`"op"' after local variable is interpreted as binary operator"), \
12406  rb_warning0("even though it seems like "syn""))
12407 #else
12408 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
12409 #endif
12410 #define warn_balanced(op, syn) ((void) \
12411  (!IS_lex_state_for(last_state, EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN|EXPR_ENDARG) && \
12412  space_seen && !ISSPACE(c) && \
12413  (ambiguous_operator(op, syn), 0)))
12414 
12415 static int
12417 {
12418  register int c;
12419  int space_seen = 0;
12420  int cmd_state;
12421  enum lex_state_e last_state;
12422  rb_encoding *enc;
12423  int mb;
12424 #ifdef RIPPER
12425  int fallthru = FALSE;
12426 #endif
12427 
12428  if (lex_strterm) {
12429  int token;
12430  if (nd_type(lex_strterm) == NODE_HEREDOC) {
12431  token = here_document(lex_strterm);
12432  if (token == tSTRING_END) {
12433  lex_strterm = 0;
12434  lex_state = EXPR_END;
12435  }
12436  }
12437  else {
12438  token = parse_string(lex_strterm);
12439  if (token == tSTRING_END || token == tREGEXP_END) {
12441  lex_strterm = 0;
12442  lex_state = EXPR_END;
12443  }
12444  }
12445  return token;
12446  }
12447  cmd_state = command_start;
12448  command_start = FALSE;
12449  retry:
12450  last_state = lex_state;
12451  switch (c = nextc()) {
12452  case '\0': /* NUL */
12453  case '\004': /* ^D */
12454  case '\032': /* ^Z */
12455  case -1: /* end of script. */
12456  return 0;
12457 
12458  /* white spaces */
12459  case ' ': case '\t': case '\f': case '\r':
12460  case '\13': /* '\v' */
12461  space_seen = 1;
12462 #ifdef RIPPER
12463  while ((c = nextc())) {
12464  switch (c) {
12465  case ' ': case '\t': case '\f': case '\r':
12466  case '\13': /* '\v' */
12467  break;
12468  default:
12469  goto outofloop;
12470  }
12471  }
12472  outofloop:
12473  pushback(c);
12474  ripper_dispatch_scan_event(parser, tSP);
12475 #endif
12476  goto retry;
12477 
12478  case '#': /* it's a comment */
12479  /* no magic_comment in shebang line */
12480  if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
12481  if (comment_at_top(parser)) {
12482  set_file_encoding(parser, lex_p, lex_pend);
12483  }
12484  }
12485  lex_p = lex_pend;
12486 #ifdef RIPPER
12487  ripper_dispatch_scan_event(parser, tCOMMENT);
12488  fallthru = TRUE;
12489 #endif
12490  /* fall through */
12491  case '\n':
12492  if (IS_lex_state(EXPR_BEG | EXPR_VALUE | EXPR_CLASS | EXPR_FNAME | EXPR_DOT)) {
12493 #ifdef RIPPER
12494  if (!fallthru) {
12495  ripper_dispatch_scan_event(parser, tIGNORED_NL);
12496  }
12497  fallthru = FALSE;
12498 #endif
12499  goto retry;
12500  }
12501  while ((c = nextc())) {
12502  switch (c) {
12503  case ' ': case '\t': case '\f': case '\r':
12504  case '\13': /* '\v' */
12505  space_seen = 1;
12506  break;
12507  case '.': {
12508  if ((c = nextc()) != '.') {
12509  pushback(c);
12510  pushback('.');
12511  goto retry;
12512  }
12513  }
12514  default:
12515  --ruby_sourceline;
12517  case -1: /* EOF no decrement*/
12518  lex_goto_eol(parser);
12519 #ifdef RIPPER
12520  if (c != -1) {
12521  parser->tokp = lex_p;
12522  }
12523 #endif
12524  goto normal_newline;
12525  }
12526  }
12527  normal_newline:
12528  command_start = TRUE;
12529  lex_state = EXPR_BEG;
12530  return '\n';
12531 
12532  case '*':
12533  if ((c = nextc()) == '*') {
12534  if ((c = nextc()) == '=') {
12536  lex_state = EXPR_BEG;
12537  return tOP_ASGN;
12538  }
12539  pushback(c);
12540  if (IS_SPCARG(c)) {
12541  rb_warning0("`**' interpreted as argument prefix");
12542  c = tDSTAR;
12543  }
12544  else if (IS_BEG()) {
12545  c = tDSTAR;
12546  }
12547  else {
12548  warn_balanced("**", "argument prefix");
12549  c = tPOW;
12550  }
12551  }
12552  else {
12553  if (c == '=') {
12554  set_yylval_id('*');
12555  lex_state = EXPR_BEG;
12556  return tOP_ASGN;
12557  }
12558  pushback(c);
12559  if (IS_SPCARG(c)) {
12560  rb_warning0("`*' interpreted as argument prefix");
12561  c = tSTAR;
12562  }
12563  else if (IS_BEG()) {
12564  c = tSTAR;
12565  }
12566  else {
12567  warn_balanced("*", "argument prefix");
12568  c = '*';
12569  }
12570  }
12571  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
12572  return c;
12573 
12574  case '!':
12575  c = nextc();
12576  if (IS_AFTER_OPERATOR()) {
12577  lex_state = EXPR_ARG;
12578  if (c == '@') {
12579  return '!';
12580  }
12581  }
12582  else {
12583  lex_state = EXPR_BEG;
12584  }
12585  if (c == '=') {
12586  return tNEQ;
12587  }
12588  if (c == '~') {
12589  return tNMATCH;
12590  }
12591  pushback(c);
12592  return '!';
12593 
12594  case '=':
12595  if (was_bol()) {
12596  /* skip embedded rd document */
12597  if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
12598 #ifdef RIPPER
12599  int first_p = TRUE;
12600 
12601  lex_goto_eol(parser);
12602  ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
12603 #endif
12604  for (;;) {
12605  lex_goto_eol(parser);
12606 #ifdef RIPPER
12607  if (!first_p) {
12608  ripper_dispatch_scan_event(parser, tEMBDOC);
12609  }
12610  first_p = FALSE;
12611 #endif
12612  c = nextc();
12613  if (c == -1) {
12614  compile_error(PARSER_ARG "embedded document meets end of file");
12615  return 0;
12616  }
12617  if (c != '=') continue;
12618  if (strncmp(lex_p, "end", 3) == 0 &&
12619  (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
12620  break;
12621  }
12622  }
12623  lex_goto_eol(parser);
12624 #ifdef RIPPER
12625  ripper_dispatch_scan_event(parser, tEMBDOC_END);
12626 #endif
12627  goto retry;
12628  }
12629  }
12630 
12631  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
12632  if ((c = nextc()) == '=') {
12633  if ((c = nextc()) == '=') {
12634  return tEQQ;
12635  }
12636  pushback(c);
12637  return tEQ;
12638  }
12639  if (c == '~') {
12640  return tMATCH;
12641  }
12642  else if (c == '>') {
12643  return tASSOC;
12644  }
12645  pushback(c);
12646  return '=';
12647 
12648  case '<':
12649  last_state = lex_state;
12650  c = nextc();
12651  if (c == '<' &&
12652  !IS_lex_state(EXPR_DOT | EXPR_CLASS) &&
12653  !IS_END() &&
12654  (!IS_ARG() || space_seen)) {
12655  int token = heredoc_identifier();
12656  if (token) return token;
12657  }
12658  if (IS_AFTER_OPERATOR()) {
12659  lex_state = EXPR_ARG;
12660  }
12661  else {
12662  if (IS_lex_state(EXPR_CLASS))
12663  command_start = TRUE;
12664  lex_state = EXPR_BEG;
12665  }
12666  if (c == '=') {
12667  if ((c = nextc()) == '>') {
12668  return tCMP;
12669  }
12670  pushback(c);
12671  return tLEQ;
12672  }
12673  if (c == '<') {
12674  if ((c = nextc()) == '=') {
12676  lex_state = EXPR_BEG;
12677  return tOP_ASGN;
12678  }
12679  pushback(c);
12680  warn_balanced("<<", "here document");
12681  return tLSHFT;
12682  }
12683  pushback(c);
12684  return '<';
12685 
12686  case '>':
12687  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
12688  if ((c = nextc()) == '=') {
12689  return tGEQ;
12690  }
12691  if (c == '>') {
12692  if ((c = nextc()) == '=') {
12694  lex_state = EXPR_BEG;
12695  return tOP_ASGN;
12696  }
12697  pushback(c);
12698  return tRSHFT;
12699  }
12700  pushback(c);
12701  return '>';
12702 
12703  case '"':
12704  lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
12705  return tSTRING_BEG;
12706 
12707  case '`':
12708  if (IS_lex_state(EXPR_FNAME)) {
12709  lex_state = EXPR_ENDFN;
12710  return c;
12711  }
12712  if (IS_lex_state(EXPR_DOT)) {
12713  if (cmd_state)
12714  lex_state = EXPR_CMDARG;
12715  else
12716  lex_state = EXPR_ARG;
12717  return c;
12718  }
12719  lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
12720  return tXSTRING_BEG;
12721 
12722  case '\'':
12723  lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
12724  return tSTRING_BEG;
12725 
12726  case '?':
12727  if (IS_END()) {
12728  lex_state = EXPR_VALUE;
12729  return '?';
12730  }
12731  c = nextc();
12732  if (c == -1) {
12733  compile_error(PARSER_ARG "incomplete character syntax");
12734  return 0;
12735  }
12736  if (rb_enc_isspace(c, current_enc)) {
12737  if (!IS_ARG()) {
12738  int c2 = 0;
12739  switch (c) {
12740  case ' ':
12741  c2 = 's';
12742  break;
12743  case '\n':
12744  c2 = 'n';
12745  break;
12746  case '\t':
12747  c2 = 't';
12748  break;
12749  case '\v':
12750  c2 = 'v';
12751  break;
12752  case '\r':
12753  c2 = 'r';
12754  break;
12755  case '\f':
12756  c2 = 'f';
12757  break;
12758  }
12759  if (c2) {
12760  rb_warnI("invalid character syntax; use ?\\%c", c2);
12761  }
12762  }
12763  ternary:
12764  pushback(c);
12765  lex_state = EXPR_VALUE;
12766  return '?';
12767  }
12768  newtok();
12769  enc = current_enc;
12770  if (!parser_isascii()) {
12771  if (tokadd_mbchar(c) == -1) return 0;
12772  }
12773  else if ((rb_enc_isalnum(c, current_enc) || c == '_') &&
12775  goto ternary;
12776  }
12777  else if (c == '\\') {
12778  if (peek('u')) {
12779  nextc();
12780  c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
12781  if (0x80 <= c) {
12782  tokaddmbc(c, enc);
12783  }
12784  else {
12785  tokadd(c);
12786  }
12787  }
12788  else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) {
12789  nextc();
12790  if (tokadd_mbchar(c) == -1) return 0;
12791  }
12792  else {
12793  c = read_escape(0, &enc);
12794  tokadd(c);
12795  }
12796  }
12797  else {
12798  tokadd(c);
12799  }
12800  tokfix();
12801  set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
12802  lex_state = EXPR_END;
12803  return tCHAR;
12804 
12805  case '&':
12806  if ((c = nextc()) == '&') {
12807  lex_state = EXPR_BEG;
12808  if ((c = nextc()) == '=') {
12810  lex_state = EXPR_BEG;
12811  return tOP_ASGN;
12812  }
12813  pushback(c);
12814  return tANDOP;
12815  }
12816  else if (c == '=') {
12817  set_yylval_id('&');
12818  lex_state = EXPR_BEG;
12819  return tOP_ASGN;
12820  }
12821  pushback(c);
12822  if (IS_SPCARG(c)) {
12823  rb_warning0("`&' interpreted as argument prefix");
12824  c = tAMPER;
12825  }
12826  else if (IS_BEG()) {
12827  c = tAMPER;
12828  }
12829  else {
12830  warn_balanced("&", "argument prefix");
12831  c = '&';
12832  }
12833  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
12834  return c;
12835 
12836  case '|':
12837  if ((c = nextc()) == '|') {
12838  lex_state = EXPR_BEG;
12839  if ((c = nextc()) == '=') {
12841  lex_state = EXPR_BEG;
12842  return tOP_ASGN;
12843  }
12844  pushback(c);
12845  return tOROP;
12846  }
12847  if (c == '=') {
12848  set_yylval_id('|');
12849  lex_state = EXPR_BEG;
12850  return tOP_ASGN;
12851  }
12852  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
12853  pushback(c);
12854  return '|';
12855 
12856  case '+':
12857  c = nextc();
12858  if (IS_AFTER_OPERATOR()) {
12859  lex_state = EXPR_ARG;
12860  if (c == '@') {
12861  return tUPLUS;
12862  }
12863  pushback(c);
12864  return '+';
12865  }
12866  if (c == '=') {
12867  set_yylval_id('+');
12868  lex_state = EXPR_BEG;
12869  return tOP_ASGN;
12870  }
12871  if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
12872  lex_state = EXPR_BEG;
12873  pushback(c);
12874  if (c != -1 && ISDIGIT(c)) {
12875  c = '+';
12876  goto start_num;
12877  }
12878  return tUPLUS;
12879  }
12880  lex_state = EXPR_BEG;
12881  pushback(c);
12882  warn_balanced("+", "unary operator");
12883  return '+';
12884 
12885  case '-':
12886  c = nextc();
12887  if (IS_AFTER_OPERATOR()) {
12888  lex_state = EXPR_ARG;
12889  if (c == '@') {
12890  return tUMINUS;
12891  }
12892  pushback(c);
12893  return '-';
12894  }
12895  if (c == '=') {
12896  set_yylval_id('-');
12897  lex_state = EXPR_BEG;
12898  return tOP_ASGN;
12899  }
12900  if (c == '>') {
12901  lex_state = EXPR_ENDFN;
12902  return tLAMBDA;
12903  }
12904  if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
12905  lex_state = EXPR_BEG;
12906  pushback(c);
12907  if (c != -1 && ISDIGIT(c)) {
12908  return tUMINUS_NUM;
12909  }
12910  return tUMINUS;
12911  }
12912  lex_state = EXPR_BEG;
12913  pushback(c);
12914  warn_balanced("-", "unary operator");
12915  return '-';
12916 
12917  case '.':
12918  lex_state = EXPR_BEG;
12919  if ((c = nextc()) == '.') {
12920  if ((c = nextc()) == '.') {
12921  return tDOT3;
12922  }
12923  pushback(c);
12924  return tDOT2;
12925  }
12926  pushback(c);
12927  if (c != -1 && ISDIGIT(c)) {
12928  yyerror("no .<digit> floating literal anymore; put 0 before dot");
12929  }
12930  lex_state = EXPR_DOT;
12931  return '.';
12932 
12933  start_num:
12934  case '0': case '1': case '2': case '3': case '4':
12935  case '5': case '6': case '7': case '8': case '9':
12936  {
12937  int is_float, seen_point, seen_e, nondigit;
12938 
12939  is_float = seen_point = seen_e = nondigit = 0;
12940  lex_state = EXPR_END;
12941  newtok();
12942  if (c == '-' || c == '+') {
12943  tokadd(c);
12944  c = nextc();
12945  }
12946  if (c == '0') {
12947 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
12948  int start = toklen();
12949  c = nextc();
12950  if (c == 'x' || c == 'X') {
12951  /* hexadecimal */
12952  c = nextc();
12953  if (c != -1 && ISXDIGIT(c)) {
12954  do {
12955  if (c == '_') {
12956  if (nondigit) break;
12957  nondigit = c;
12958  continue;
12959  }
12960  if (!ISXDIGIT(c)) break;
12961  nondigit = 0;
12962  tokadd(c);
12963  } while ((c = nextc()) != -1);
12964  }
12965  pushback(c);
12966  tokfix();
12967  if (toklen() == start) {
12968  no_digits();
12969  }
12970  else if (nondigit) goto trailing_uc;
12972  return tINTEGER;
12973  }
12974  if (c == 'b' || c == 'B') {
12975  /* binary */
12976  c = nextc();
12977  if (c == '0' || c == '1') {
12978  do {
12979  if (c == '_') {
12980  if (nondigit) break;
12981  nondigit = c;
12982  continue;
12983  }
12984  if (c != '0' && c != '1') break;
12985  nondigit = 0;
12986  tokadd(c);
12987  } while ((c = nextc()) != -1);
12988  }
12989  pushback(c);
12990  tokfix();
12991  if (toklen() == start) {
12992  no_digits();
12993  }
12994  else if (nondigit) goto trailing_uc;
12996  return tINTEGER;
12997  }
12998  if (c == 'd' || c == 'D') {
12999  /* decimal */
13000  c = nextc();
13001  if (c != -1 && ISDIGIT(c)) {
13002  do {
13003  if (c == '_') {
13004  if (nondigit) break;
13005  nondigit = c;
13006  continue;
13007  }
13008  if (!ISDIGIT(c)) break;
13009  nondigit = 0;
13010  tokadd(c);
13011  } while ((c = nextc()) != -1);
13012  }
13013  pushback(c);
13014  tokfix();
13015  if (toklen() == start) {
13016  no_digits();
13017  }
13018  else if (nondigit) goto trailing_uc;
13020  return tINTEGER;
13021  }
13022  if (c == '_') {
13023  /* 0_0 */
13024  goto octal_number;
13025  }
13026  if (c == 'o' || c == 'O') {
13027  /* prefixed octal */
13028  c = nextc();
13029  if (c == -1 || c == '_' || !ISDIGIT(c)) {
13030  no_digits();
13031  }
13032  }
13033  if (c >= '0' && c <= '7') {
13034  /* octal */
13035  octal_number:
13036  do {
13037  if (c == '_') {
13038  if (nondigit) break;
13039  nondigit = c;
13040  continue;
13041  }
13042  if (c < '0' || c > '9') break;
13043  if (c > '7') goto invalid_octal;
13044  nondigit = 0;
13045  tokadd(c);
13046  } while ((c = nextc()) != -1);
13047  if (toklen() > start) {
13048  pushback(c);
13049  tokfix();
13050  if (nondigit) goto trailing_uc;
13052  return tINTEGER;
13053  }
13054  if (nondigit) {
13055  pushback(c);
13056  goto trailing_uc;
13057  }
13058  }
13059  if (c > '7' && c <= '9') {
13060  invalid_octal:
13061  yyerror("Invalid octal digit");
13062  }
13063  else if (c == '.' || c == 'e' || c == 'E') {
13064  tokadd('0');
13065  }
13066  else {
13067  pushback(c);
13069  return tINTEGER;
13070  }
13071  }
13072 
13073  for (;;) {
13074  switch (c) {
13075  case '0': case '1': case '2': case '3': case '4':
13076  case '5': case '6': case '7': case '8': case '9':
13077  nondigit = 0;
13078  tokadd(c);
13079  break;
13080 
13081  case '.':
13082  if (nondigit) goto trailing_uc;
13083  if (seen_point || seen_e) {
13084  goto decode_num;
13085  }
13086  else {
13087  int c0 = nextc();
13088  if (c0 == -1 || !ISDIGIT(c0)) {
13089  pushback(c0);
13090  goto decode_num;
13091  }
13092  c = c0;
13093  }
13094  tokadd('.');
13095  tokadd(c);
13096  is_float++;
13097  seen_point++;
13098  nondigit = 0;
13099  break;
13100 
13101  case 'e':
13102  case 'E':
13103  if (nondigit) {
13104  pushback(c);
13105  c = nondigit;
13106  goto decode_num;
13107  }
13108  if (seen_e) {
13109  goto decode_num;
13110  }
13111  tokadd(c);
13112  seen_e++;
13113  is_float++;
13114  nondigit = c;
13115  c = nextc();
13116  if (c != '-' && c != '+') continue;
13117  tokadd(c);
13118  nondigit = c;
13119  break;
13120 
13121  case '_': /* `_' in number just ignored */
13122  if (nondigit) goto decode_num;
13123  nondigit = c;
13124  break;
13125 
13126  default:
13127  goto decode_num;
13128  }
13129  c = nextc();
13130  }
13131 
13132  decode_num:
13133  pushback(c);
13134  if (nondigit) {
13135  char tmp[30];
13136  trailing_uc:
13137  snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
13138  yyerror(tmp);
13139  }
13140  tokfix();
13141  if (is_float) {
13142  double d = strtod(tok(), 0);
13143  if (errno == ERANGE) {
13144  rb_warningS("Float %s out of range", tok());
13145  errno = 0;
13146  }
13148  return tFLOAT;
13149  }
13151  return tINTEGER;
13152  }
13153 
13154  case ')':
13155  case ']':
13156  paren_nest--;
13157  case '}':
13158  COND_LEXPOP();
13159  CMDARG_LEXPOP();
13160  if (c == ')')
13161  lex_state = EXPR_ENDFN;
13162  else
13163  lex_state = EXPR_ENDARG;
13164  if (c == '}') {
13165  if (!brace_nest--) c = tSTRING_DEND;
13166  }
13167  return c;
13168 
13169  case ':':
13170  c = nextc();
13171  if (c == ':') {
13172  if (IS_BEG() || IS_lex_state(EXPR_CLASS) || IS_SPCARG(-1)) {
13173  lex_state = EXPR_BEG;
13174  return tCOLON3;
13175  }
13176  lex_state = EXPR_DOT;
13177  return tCOLON2;
13178  }
13179  if (IS_END() || ISSPACE(c)) {
13180  pushback(c);
13181  warn_balanced(":", "symbol literal");
13182  lex_state = EXPR_BEG;
13183  return ':';
13184  }
13185  switch (c) {
13186  case '\'':
13187  lex_strterm = NEW_STRTERM(str_ssym, c, 0);
13188  break;
13189  case '"':
13190  lex_strterm = NEW_STRTERM(str_dsym, c, 0);
13191  break;
13192  default:
13193  pushback(c);
13194  break;
13195  }
13196  lex_state = EXPR_FNAME;
13197  return tSYMBEG;
13198 
13199  case '/':
13200  if (IS_lex_state(EXPR_BEG_ANY)) {
13201  lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13202  return tREGEXP_BEG;
13203  }
13204  if ((c = nextc()) == '=') {
13205  set_yylval_id('/');
13206  lex_state = EXPR_BEG;
13207  return tOP_ASGN;
13208  }
13209  pushback(c);
13210  if (IS_SPCARG(c)) {
13211  (void)arg_ambiguous();
13212  lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13213  return tREGEXP_BEG;
13214  }
13215  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13216  warn_balanced("/", "regexp literal");
13217  return '/';
13218 
13219  case '^':
13220  if ((c = nextc()) == '=') {
13221  set_yylval_id('^');
13222  lex_state = EXPR_BEG;
13223  return tOP_ASGN;
13224  }
13225  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13226  pushback(c);
13227  return '^';
13228 
13229  case ';':
13230  lex_state = EXPR_BEG;
13231  command_start = TRUE;
13232  return ';';
13233 
13234  case ',':
13235  lex_state = EXPR_BEG;
13236  return ',';
13237 
13238  case '~':
13239  if (IS_AFTER_OPERATOR()) {
13240  if ((c = nextc()) != '@') {
13241  pushback(c);
13242  }
13243  lex_state = EXPR_ARG;
13244  }
13245  else {
13246  lex_state = EXPR_BEG;
13247  }
13248  return '~';
13249 
13250  case '(':
13251  if (IS_BEG()) {
13252  c = tLPAREN;
13253  }
13254  else if (IS_SPCARG(-1)) {
13255  c = tLPAREN_ARG;
13256  }
13257  paren_nest++;
13258  COND_PUSH(0);
13259  CMDARG_PUSH(0);
13260  lex_state = EXPR_BEG;
13261  return c;
13262 
13263  case '[':
13264  paren_nest++;
13265  if (IS_AFTER_OPERATOR()) {
13266  lex_state = EXPR_ARG;
13267  if ((c = nextc()) == ']') {
13268  if ((c = nextc()) == '=') {
13269  return tASET;
13270  }
13271  pushback(c);
13272  return tAREF;
13273  }
13274  pushback(c);
13275  return '[';
13276  }
13277  else if (IS_BEG()) {
13278  c = tLBRACK;
13279  }
13280  else if (IS_ARG() && space_seen) {
13281  c = tLBRACK;
13282  }
13283  lex_state = EXPR_BEG;
13284  COND_PUSH(0);
13285  CMDARG_PUSH(0);
13286  return c;
13287 
13288  case '{':
13289  ++brace_nest;
13290  if (lpar_beg && lpar_beg == paren_nest) {
13291  lex_state = EXPR_BEG;
13292  lpar_beg = 0;
13293  --paren_nest;
13294  COND_PUSH(0);
13295  CMDARG_PUSH(0);
13296  return tLAMBEG;
13297  }
13298  if (IS_ARG() || IS_lex_state(EXPR_END | EXPR_ENDFN))
13299  c = '{'; /* block (primary) */
13300  else if (IS_lex_state(EXPR_ENDARG))
13301  c = tLBRACE_ARG; /* block (expr) */
13302  else
13303  c = tLBRACE; /* hash */
13304  COND_PUSH(0);
13305  CMDARG_PUSH(0);
13306  lex_state = EXPR_BEG;
13307  if (c != tLBRACE) command_start = TRUE;
13308  return c;
13309 
13310  case '\\':
13311  c = nextc();
13312  if (c == '\n') {
13313  space_seen = 1;
13314 #ifdef RIPPER
13315  ripper_dispatch_scan_event(parser, tSP);
13316 #endif
13317  goto retry; /* skip \\n */
13318  }
13319  pushback(c);
13320  return '\\';
13321 
13322  case '%':
13323  if (IS_lex_state(EXPR_BEG_ANY)) {
13324  int term;
13325  int paren;
13326 
13327  c = nextc();
13328  quotation:
13329  if (c == -1 || !ISALNUM(c)) {
13330  term = c;
13331  c = 'Q';
13332  }
13333  else {
13334  term = nextc();
13335  if (rb_enc_isalnum(term, current_enc) || !parser_isascii()) {
13336  yyerror("unknown type of %string");
13337  return 0;
13338  }
13339  }
13340  if (c == -1 || term == -1) {
13341  compile_error(PARSER_ARG "unterminated quoted string meets end of file");
13342  return 0;
13343  }
13344  paren = term;
13345  if (term == '(') term = ')';
13346  else if (term == '[') term = ']';
13347  else if (term == '{') term = '}';
13348  else if (term == '<') term = '>';
13349  else paren = 0;
13350 
13351  switch (c) {
13352  case 'Q':
13353  lex_strterm = NEW_STRTERM(str_dquote, term, paren);
13354  return tSTRING_BEG;
13355 
13356  case 'q':
13357  lex_strterm = NEW_STRTERM(str_squote, term, paren);
13358  return tSTRING_BEG;
13359 
13360  case 'W':
13361  lex_strterm = NEW_STRTERM(str_dword, term, paren);
13362  do {c = nextc();} while (ISSPACE(c));
13363  pushback(c);
13364  return tWORDS_BEG;
13365 
13366  case 'w':
13367  lex_strterm = NEW_STRTERM(str_sword, term, paren);
13368  do {c = nextc();} while (ISSPACE(c));
13369  pushback(c);
13370  return tQWORDS_BEG;
13371 
13372  case 'I':
13373  lex_strterm = NEW_STRTERM(str_dword, term, paren);
13374  do {c = nextc();} while (ISSPACE(c));
13375  pushback(c);
13376  return tSYMBOLS_BEG;
13377 
13378  case 'i':
13379  lex_strterm = NEW_STRTERM(str_sword, term, paren);
13380  do {c = nextc();} while (ISSPACE(c));
13381  pushback(c);
13382  return tQSYMBOLS_BEG;
13383 
13384  case 'x':
13385  lex_strterm = NEW_STRTERM(str_xquote, term, paren);
13386  return tXSTRING_BEG;
13387 
13388  case 'r':
13389  lex_strterm = NEW_STRTERM(str_regexp, term, paren);
13390  return tREGEXP_BEG;
13391 
13392  case 's':
13393  lex_strterm = NEW_STRTERM(str_ssym, term, paren);
13394  lex_state = EXPR_FNAME;
13395  return tSYMBEG;
13396 
13397  default:
13398  yyerror("unknown type of %string");
13399  return 0;
13400  }
13401  }
13402  if ((c = nextc()) == '=') {
13403  set_yylval_id('%');
13404  lex_state = EXPR_BEG;
13405  return tOP_ASGN;
13406  }
13407  if (IS_SPCARG(c)) {
13408  goto quotation;
13409  }
13410  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13411  pushback(c);
13412  warn_balanced("%%", "string literal");
13413  return '%';
13414 
13415  case '$':
13416  lex_state = EXPR_END;
13417  newtok();
13418  c = nextc();
13419  switch (c) {
13420  case '_': /* $_: last read line string */
13421  c = nextc();
13422  if (parser_is_identchar()) {
13423  tokadd('$');
13424  tokadd('_');
13425  break;
13426  }
13427  pushback(c);
13428  c = '_';
13429  /* fall through */
13430  case '~': /* $~: match-data */
13431  case '*': /* $*: argv */
13432  case '$': /* $$: pid */
13433  case '?': /* $?: last status */
13434  case '!': /* $!: error string */
13435  case '@': /* $@: error position */
13436  case '/': /* $/: input record separator */
13437  case '\\': /* $\: output record separator */
13438  case ';': /* $;: field separator */
13439  case ',': /* $,: output field separator */
13440  case '.': /* $.: last read line number */
13441  case '=': /* $=: ignorecase */
13442  case ':': /* $:: load path */
13443  case '<': /* $<: reading filename */
13444  case '>': /* $>: default output handle */
13445  case '\"': /* $": already loaded files */
13446  tokadd('$');
13447  tokadd(c);
13448  tokfix();
13450  return tGVAR;
13451 
13452  case '-':
13453  tokadd('$');
13454  tokadd(c);
13455  c = nextc();
13456  if (parser_is_identchar()) {
13457  if (tokadd_mbchar(c) == -1) return 0;
13458  }
13459  else {
13460  pushback(c);
13461  }
13462  gvar:
13463  tokfix();
13465  return tGVAR;
13466 
13467  case '&': /* $&: last match */
13468  case '`': /* $`: string before last match */
13469  case '\'': /* $': string after last match */
13470  case '+': /* $+: string matches last paren. */
13471  if (IS_lex_state_for(last_state, EXPR_FNAME)) {
13472  tokadd('$');
13473  tokadd(c);
13474  goto gvar;
13475  }
13477  return tBACK_REF;
13478 
13479  case '1': case '2': case '3':
13480  case '4': case '5': case '6':
13481  case '7': case '8': case '9':
13482  tokadd('$');
13483  do {
13484  tokadd(c);
13485  c = nextc();
13486  } while (c != -1 && ISDIGIT(c));
13487  pushback(c);
13488  if (IS_lex_state_for(last_state, EXPR_FNAME)) goto gvar;
13489  tokfix();
13490  set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
13491  return tNTH_REF;
13492 
13493  default:
13494  if (!parser_is_identchar()) {
13495  pushback(c);
13496  compile_error(PARSER_ARG "`$%c' is not allowed as a global variable name", c);
13497  return 0;
13498  }
13499  case '0':
13500  tokadd('$');
13501  }
13502  break;
13503 
13504  case '@':
13505  c = nextc();
13506  newtok();
13507  tokadd('@');
13508  if (c == '@') {
13509  tokadd('@');
13510  c = nextc();
13511  }
13512  if (c != -1 && (ISDIGIT(c) || !parser_is_identchar())) {
13513  pushback(c);
13514  if (tokidx == 1) {
13515  compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
13516  }
13517  else {
13518  compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
13519  }
13520  return 0;
13521  }
13522  break;
13523 
13524  case '_':
13525  if (was_bol() && whole_match_p("__END__", 7, 0)) {
13526  ruby__end__seen = 1;
13527  parser->eofp = Qtrue;
13528 #ifndef RIPPER
13529  return -1;
13530 #else
13531  lex_goto_eol(parser);
13532  ripper_dispatch_scan_event(parser, k__END__);
13533  return 0;
13534 #endif
13535  }
13536  newtok();
13537  break;
13538 
13539  default:
13540  if (!parser_is_identchar()) {
13541  rb_compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c);
13542  goto retry;
13543  }
13544 
13545  newtok();
13546  break;
13547  }
13548 
13549  mb = ENC_CODERANGE_7BIT;
13550  do {
13551  if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
13552  if (tokadd_mbchar(c) == -1) return 0;
13553  c = nextc();
13554  } while (parser_is_identchar());
13555  switch (tok()[0]) {
13556  case '@': case '$':
13557  pushback(c);
13558  break;
13559  default:
13560  if ((c == '!' || c == '?') && !peek('=')) {
13561  tokadd(c);
13562  }
13563  else {
13564  pushback(c);
13565  }
13566  }
13567  tokfix();
13568 
13569  {
13570  int result = 0;
13571 
13572  last_state = lex_state;
13573  switch (tok()[0]) {
13574  case '$':
13575  lex_state = EXPR_END;
13576  result = tGVAR;
13577  break;
13578  case '@':
13579  lex_state = EXPR_END;
13580  if (tok()[1] == '@')
13581  result = tCVAR;
13582  else
13583  result = tIVAR;
13584  break;
13585 
13586  default:
13587  if (toklast() == '!' || toklast() == '?') {
13588  result = tFID;
13589  }
13590  else {
13591  if (IS_lex_state(EXPR_FNAME)) {
13592  if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
13593  (!peek('=') || (peek_n('>', 1)))) {
13594  result = tIDENTIFIER;
13595  tokadd(c);
13596  tokfix();
13597  }
13598  else {
13599  pushback(c);
13600  }
13601  }
13602  if (result == 0 && ISUPPER(tok()[0])) {
13603  result = tCONSTANT;
13604  }
13605  else {
13606  result = tIDENTIFIER;
13607  }
13608  }
13609 
13610  if (IS_LABEL_POSSIBLE()) {
13611  if (IS_LABEL_SUFFIX(0)) {
13612  lex_state = EXPR_BEG;
13613  nextc();
13615  return tLABEL;
13616  }
13617  }
13618  if (mb == ENC_CODERANGE_7BIT && !IS_lex_state(EXPR_DOT)) {
13619  const struct kwtable *kw;
13620 
13621  /* See if it is a reserved word. */
13622  kw = rb_reserved_word(tok(), toklen());
13623  if (kw) {
13624  enum lex_state_e state = lex_state;
13625  lex_state = kw->state;
13626  if (state == EXPR_FNAME) {
13628  return kw->id[0];
13629  }
13630  if (lex_state == EXPR_BEG) {
13631  command_start = TRUE;
13632  }
13633  if (kw->id[0] == keyword_do) {
13634  if (lpar_beg && lpar_beg == paren_nest) {
13635  lpar_beg = 0;
13636  --paren_nest;
13637  return keyword_do_LAMBDA;
13638  }
13639  if (COND_P()) return keyword_do_cond;
13640  if (CMDARG_P() && state != EXPR_CMDARG)
13641  return keyword_do_block;
13642  if (state & (EXPR_BEG | EXPR_ENDARG))
13643  return keyword_do_block;
13644  return keyword_do;
13645  }
13646  if (state & (EXPR_BEG | EXPR_VALUE))
13647  return kw->id[0];
13648  else {
13649  if (kw->id[0] != kw->id[1])
13650  lex_state = EXPR_BEG;
13651  return kw->id[1];
13652  }
13653  }
13654  }
13655 
13656  if (IS_lex_state(EXPR_BEG_ANY | EXPR_ARG_ANY | EXPR_DOT)) {
13657  if (cmd_state) {
13658  lex_state = EXPR_CMDARG;
13659  }
13660  else {
13661  lex_state = EXPR_ARG;
13662  }
13663  }
13664  else if (lex_state == EXPR_FNAME) {
13665  lex_state = EXPR_ENDFN;
13666  }
13667  else {
13668  lex_state = EXPR_END;
13669  }
13670  }
13671  {
13672  ID ident = TOK_INTERN(!ENC_SINGLE(mb));
13673 
13674  set_yylval_name(ident);
13675  if (!IS_lex_state_for(last_state, EXPR_DOT|EXPR_FNAME) &&
13676  is_local_id(ident) && lvar_defined(ident)) {
13677  lex_state = EXPR_END;
13678  }
13679  }
13680  return result;
13681  }
13682 }
13683 
13684 #if YYPURE
13685 static int
13686 yylex(void *lval, void *p)
13687 #else
13688 yylex(void *p)
13689 #endif
13691  struct parser_params *parser = (struct parser_params*)p;
13692  int t;
13693 
13694 #if YYPURE
13695  parser->parser_yylval = lval;
13697 #endif
13698  t = parser_yylex(parser);
13699 #ifdef RIPPER
13700  if (!NIL_P(parser->delayed)) {
13701  ripper_dispatch_delayed_token(parser, t);
13702  return t;
13703  }
13704  if (t != 0)
13705  ripper_dispatch_scan_event(parser, t);
13706 #endif
13707 
13708  return t;
13709 }
13710 
13711 #ifndef RIPPER
13712 static NODE*
13713 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
13714 {
13715  NODE *n = (rb_node_newnode)(type, a0, a1, a2);
13717  return n;
13718 }
13719 
13720 static enum node_type
13721 nodetype(NODE *node) /* for debug */
13722 {
13723  return (enum node_type)nd_type(node);
13724 }
13725 
13726 static int
13728 {
13729  return nd_line(node);
13730 }
13731 
13732 static NODE*
13734 {
13735  if (node) {
13736  node = remove_begin(node);
13737  node->flags |= NODE_FL_NEWLINE;
13738  }
13739  return node;
13740 }
13741 
13742 static void
13743 fixpos(NODE *node, NODE *orig)
13744 {
13745  if (!node) return;
13746  if (!orig) return;
13747  if (orig == (NODE*)1) return;
13748  nd_set_line(node, nd_line(orig));
13749 }
13750 
13751 static void
13752 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
13753 {
13754  rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
13755 }
13756 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg))
13757 
13758 static void
13759 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
13760 {
13761  rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
13762 }
13763 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg))
13764 
13765 static NODE*
13766 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
13767 {
13768  NODE *end, *h = head, *nd;
13769 
13770  if (tail == 0) return head;
13771 
13772  if (h == 0) return tail;
13773  switch (nd_type(h)) {
13774  case NODE_LIT:
13775  case NODE_STR:
13776  case NODE_SELF:
13777  case NODE_TRUE:
13778  case NODE_FALSE:
13779  case NODE_NIL:
13780  parser_warning(h, "unused literal ignored");
13781  return tail;
13782  default:
13783  h = end = NEW_BLOCK(head);
13784  end->nd_end = end;
13785  fixpos(end, head);
13786  head = end;
13787  break;
13788  case NODE_BLOCK:
13789  end = h->nd_end;
13790  break;
13791  }
13792 
13793  nd = end->nd_head;
13794  switch (nd_type(nd)) {
13795  case NODE_RETURN:
13796  case NODE_BREAK:
13797  case NODE_NEXT:
13798  case NODE_REDO:
13799  case NODE_RETRY:
13800  if (RTEST(ruby_verbose)) {
13801  parser_warning(tail, "statement not reached");
13802  }
13803  break;
13804 
13805  default:
13806  break;
13807  }
13808 
13809  if (nd_type(tail) != NODE_BLOCK) {
13810  tail = NEW_BLOCK(tail);
13811  tail->nd_end = tail;
13812  }
13813  end->nd_next = tail;
13814  h->nd_end = tail->nd_end;
13815  return head;
13816 }
13817 
13818 /* append item to the list */
13819 static NODE*
13820 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
13821 {
13822  NODE *last;
13823 
13824  if (list == 0) return NEW_LIST(item);
13825  if (list->nd_next) {
13826  last = list->nd_next->nd_end;
13827  }
13828  else {
13829  last = list;
13830  }
13831 
13832  list->nd_alen += 1;
13833  last->nd_next = NEW_LIST(item);
13834  list->nd_next->nd_end = last->nd_next;
13835  return list;
13836 }
13837 
13838 /* concat two lists */
13839 static NODE*
13840 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
13841 {
13842  NODE *last;
13843 
13844  if (head->nd_next) {
13845  last = head->nd_next->nd_end;
13846  }
13847  else {
13848  last = head;
13849  }
13850 
13851  head->nd_alen += tail->nd_alen;
13852  last->nd_next = tail;
13853  if (tail->nd_next) {
13854  head->nd_next->nd_end = tail->nd_next->nd_end;
13855  }
13856  else {
13857  head->nd_next->nd_end = tail;
13858  }
13859 
13860  return head;
13861 }
13862 
13863 static int
13865 {
13866  if (NIL_P(tail)) return 1;
13867  if (!rb_enc_compatible(head, tail)) {
13868  compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
13869  rb_enc_name(rb_enc_get(head)),
13870  rb_enc_name(rb_enc_get(tail)));
13871  rb_str_resize(head, 0);
13872  rb_str_resize(tail, 0);
13873  return 0;
13874  }
13875  rb_str_buf_append(head, tail);
13876  return 1;
13877 }
13878 
13879 /* concat two string literals */
13880 static NODE *
13882 {
13883  enum node_type htype;
13884  NODE *headlast;
13885  VALUE lit;
13886 
13887  if (!head) return tail;
13888  if (!tail) return head;
13889 
13890  htype = nd_type(head);
13891  if (htype == NODE_EVSTR) {
13892  NODE *node = NEW_DSTR(Qnil);
13893  head = list_append(node, head);
13894  htype = NODE_DSTR;
13895  }
13896  switch (nd_type(tail)) {
13897  case NODE_STR:
13898  if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
13899  nd_type(headlast) == NODE_STR) {
13900  htype = NODE_STR;
13901  lit = headlast->nd_lit;
13902  }
13903  else {
13904  lit = head->nd_lit;
13905  }
13906  if (htype == NODE_STR) {
13907  if (!literal_concat0(parser, lit, tail->nd_lit)) {
13908  error:
13909  rb_gc_force_recycle((VALUE)head);
13910  rb_gc_force_recycle((VALUE)tail);
13911  return 0;
13912  }
13913  rb_gc_force_recycle((VALUE)tail);
13914  }
13915  else {
13916  list_append(head, tail);
13917  }
13918  break;
13919 
13920  case NODE_DSTR:
13921  if (htype == NODE_STR) {
13922  if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
13923  goto error;
13924  tail->nd_lit = head->nd_lit;
13925  rb_gc_force_recycle((VALUE)head);
13926  head = tail;
13927  }
13928  else if (NIL_P(tail->nd_lit)) {
13929  append:
13930  head->nd_alen += tail->nd_alen - 1;
13931  head->nd_next->nd_end->nd_next = tail->nd_next;
13932  head->nd_next->nd_end = tail->nd_next->nd_end;
13933  rb_gc_force_recycle((VALUE)tail);
13934  }
13935  else if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
13936  nd_type(headlast) == NODE_STR) {
13937  lit = headlast->nd_lit;
13938  if (!literal_concat0(parser, lit, tail->nd_lit))
13939  goto error;
13940  tail->nd_lit = Qnil;
13941  goto append;
13942  }
13943  else {
13944  nd_set_type(tail, NODE_ARRAY);
13945  tail->nd_head = NEW_STR(tail->nd_lit);
13946  list_concat(head, tail);
13947  }
13948  break;
13949 
13950  case NODE_EVSTR:
13951  if (htype == NODE_STR) {
13952  nd_set_type(head, NODE_DSTR);
13953  head->nd_alen = 1;
13954  }
13955  list_append(head, tail);
13956  break;
13957  }
13958  return head;
13959 }
13960 
13961 static NODE *
13962 evstr2dstr_gen(struct parser_params *parser, NODE *node)
13963 {
13964  if (nd_type(node) == NODE_EVSTR) {
13965  node = list_append(NEW_DSTR(Qnil), node);
13966  }
13967  return node;
13968 }
13969 
13970 static NODE *
13971 new_evstr_gen(struct parser_params *parser, NODE *node)
13972 {
13973  NODE *head = node;
13974 
13975  if (node) {
13976  switch (nd_type(node)) {
13977  case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
13978  return node;
13979  }
13980  }
13981  return NEW_EVSTR(head);
13982 }
13983 
13984 static NODE *
13985 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
13986 {
13987  value_expr(recv);
13988  value_expr(arg1);
13989  return NEW_CALL(recv, id, NEW_LIST(arg1));
13990 }
13991 
13992 static NODE *
13993 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
13994 {
13995  value_expr(recv);
13996  return NEW_CALL(recv, id, 0);
13997 }
13998 
13999 static NODE*
14000 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14001 {
14002  value_expr(node1);
14003  value_expr(node2);
14004  if (node1) {
14005  switch (nd_type(node1)) {
14006  case NODE_DREGX:
14007  case NODE_DREGX_ONCE:
14008  return NEW_MATCH2(node1, node2);
14009 
14010  case NODE_LIT:
14011  if (RB_TYPE_P(node1->nd_lit, T_REGEXP)) {
14012  return NEW_MATCH2(node1, node2);
14013  }
14014  }
14015  }
14016 
14017  if (node2) {
14018  switch (nd_type(node2)) {
14019  case NODE_DREGX:
14020  case NODE_DREGX_ONCE:
14021  return NEW_MATCH3(node2, node1);
14022 
14023  case NODE_LIT:
14024  if (RB_TYPE_P(node2->nd_lit, T_REGEXP)) {
14025  return NEW_MATCH3(node2, node1);
14026  }
14027  }
14028  }
14029 
14030  return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
14031 }
14032 
14033 static NODE*
14034 gettable_gen(struct parser_params *parser, ID id)
14035 {
14036  switch (id) {
14037  case keyword_self:
14038  return NEW_SELF();
14039  case keyword_nil:
14040  return NEW_NIL();
14041  case keyword_true:
14042  return NEW_TRUE();
14043  case keyword_false:
14044  return NEW_FALSE();
14045  case keyword__FILE__:
14048  case keyword__LINE__:
14049  return NEW_LIT(INT2FIX(tokline));
14050  case keyword__ENCODING__:
14052  }
14053  switch (id_type(id)) {
14054  case ID_LOCAL:
14055  if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
14056  if (local_id(id)) return NEW_LVAR(id);
14057  /* method call without arguments */
14058  return NEW_VCALL(id);
14059  case ID_GLOBAL:
14060  return NEW_GVAR(id);
14061  case ID_INSTANCE:
14062  return NEW_IVAR(id);
14063  case ID_CONST:
14064  return NEW_CONST(id);
14065  case ID_CLASS:
14066  return NEW_CVAR(id);
14067  }
14068  compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14069  return 0;
14070 }
14071 #else /* !RIPPER */
14072 static int
14073 id_is_var_gen(struct parser_params *parser, ID id)
14074 {
14075  if (is_notop_id(id)) {
14076  switch (id & ID_SCOPE_MASK) {
14077  case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
14078  return 1;
14079  case ID_LOCAL:
14080  if (dyna_in_block() && dvar_defined(id)) return 1;
14081  if (local_id(id)) return 1;
14082  /* method call without arguments */
14083  return 0;
14084  }
14085  }
14086  compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14087  return 0;
14088 }
14089 #endif /* !RIPPER */
14090 
14091 #if PARSER_DEBUG
14092 static const char *
14093 lex_state_name(enum lex_state_e state)
14094 {
14095  static const char names[][12] = {
14096  "EXPR_BEG", "EXPR_END", "EXPR_ENDARG", "EXPR_ENDFN", "EXPR_ARG",
14097  "EXPR_CMDARG", "EXPR_MID", "EXPR_FNAME", "EXPR_DOT", "EXPR_CLASS",
14098  "EXPR_VALUE",
14099  };
14100 
14101  if ((unsigned)state & ~(~0u << EXPR_MAX_STATE))
14102  return names[ffs(state)];
14103  return NULL;
14104 }
14105 #endif
14106 
14107 #ifdef RIPPER
14108 static VALUE
14109 assignable_gen(struct parser_params *parser, VALUE lhs)
14110 #else
14111 static NODE*
14112 assignable_gen(struct parser_params *parser, ID id, NODE *val)
14113 #endif
14114 {
14115 #ifdef RIPPER
14116  ID id = get_id(lhs);
14117 # define assignable_result(x) get_value(lhs)
14118 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
14119 #else
14120 # define assignable_result(x) (x)
14121 #endif
14122  if (!id) return assignable_result(0);
14123  switch (id) {
14124  case keyword_self:
14125  yyerror("Can't change the value of self");
14126  goto error;
14127  case keyword_nil:
14128  yyerror("Can't assign to nil");
14129  goto error;
14130  case keyword_true:
14131  yyerror("Can't assign to true");
14132  goto error;
14133  case keyword_false:
14134  yyerror("Can't assign to false");
14135  goto error;
14136  case keyword__FILE__:
14137  yyerror("Can't assign to __FILE__");
14138  goto error;
14139  case keyword__LINE__:
14140  yyerror("Can't assign to __LINE__");
14141  goto error;
14142  case keyword__ENCODING__:
14143  yyerror("Can't assign to __ENCODING__");
14144  goto error;
14145  }
14146  switch (id_type(id)) {
14147  case ID_LOCAL:
14148  if (dyna_in_block()) {
14149  if (dvar_curr(id)) {
14150  return assignable_result(NEW_DASGN_CURR(id, val));
14151  }
14152  else if (dvar_defined(id)) {
14153  return assignable_result(NEW_DASGN(id, val));
14154  }
14155  else if (local_id(id)) {
14156  return assignable_result(NEW_LASGN(id, val));
14157  }
14158  else {
14159  dyna_var(id);
14160  return assignable_result(NEW_DASGN_CURR(id, val));
14161  }
14162  }
14163  else {
14164  if (!local_id(id)) {
14165  local_var(id);
14166  }
14167  return assignable_result(NEW_LASGN(id, val));
14168  }
14169  break;
14170  case ID_GLOBAL:
14171  return assignable_result(NEW_GASGN(id, val));
14172  case ID_INSTANCE:
14173  return assignable_result(NEW_IASGN(id, val));
14174  case ID_CONST:
14175  if (!in_def && !in_single)
14176  return assignable_result(NEW_CDECL(id, val, 0));
14177  yyerror("dynamic constant assignment");
14178  break;
14179  case ID_CLASS:
14180  return assignable_result(NEW_CVASGN(id, val));
14181  default:
14182  compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
14183  }
14184  error:
14186 #undef assignable_result
14187 #undef parser_yyerror
14188 }
14189 
14190 static int
14192 {
14193  VALUE s;
14194  if (name == idUScore) return 1;
14195  if (!is_local_id(name)) return 0;
14196  s = rb_id2str(name);
14197  if (!s) return 0;
14198  return RSTRING_PTR(s)[0] == '_';
14199 }
14200 
14201 #define LVAR_USED ((ID)1 << (sizeof(ID) * CHAR_BIT - 1))
14202 
14203 static ID
14204 shadowing_lvar_gen(struct parser_params *parser, ID name)
14205 {
14206  if (is_private_local_id(name)) return name;
14207  if (dyna_in_block()) {
14208  if (dvar_curr(name)) {
14209  yyerror("duplicated argument name");
14210  }
14211  else if (dvar_defined_get(name) || local_id(name)) {
14212  rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
14213  vtable_add(lvtbl->vars, name);
14214  if (lvtbl->used) {
14216  }
14217  }
14218  }
14219  else {
14220  if (local_id(name)) {
14221  yyerror("duplicated argument name");
14222  }
14223  }
14224  return name;
14225 }
14226 
14227 static void
14228 new_bv_gen(struct parser_params *parser, ID name)
14229 {
14230  if (!name) return;
14231  if (!is_local_id(name)) {
14232  compile_error(PARSER_ARG "invalid local variable - %s",
14233  rb_id2name(name));
14234  return;
14235  }
14236  shadowing_lvar(name);
14237  dyna_var(name);
14238 }
14239 
14240 #ifndef RIPPER
14241 static NODE *
14242 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
14243 {
14244  if (recv && nd_type(recv) == NODE_SELF)
14245  recv = (NODE *)1;
14246  return NEW_ATTRASGN(recv, tASET, idx);
14247 }
14248 
14249 static void
14250 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14251 {
14252  if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
14253  compile_error(PARSER_ARG "both block arg and actual block given");
14254  }
14255 }
14256 
14257 ID
14259 {
14260  id &= ~ID_SCOPE_MASK;
14261  id |= ID_ATTRSET;
14262  return id;
14263 }
14264 
14265 static NODE *
14266 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
14267 {
14268  if (recv && nd_type(recv) == NODE_SELF)
14269  recv = (NODE *)1;
14270  return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
14271 }
14272 
14273 static void
14275 {
14276  switch (nd_type(node)) {
14277  case NODE_NTH_REF:
14278  compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
14279  break;
14280  case NODE_BACK_REF:
14281  compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
14282  break;
14283  }
14284 }
14285 
14286 static NODE *
14287 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14288 {
14289  if (!node2) return node1;
14290  switch (nd_type(node1)) {
14291  case NODE_BLOCK_PASS:
14292  if (node1->nd_head)
14293  node1->nd_head = arg_concat(node1->nd_head, node2);
14294  else
14295  node1->nd_head = NEW_LIST(node2);
14296  return node1;
14297  case NODE_ARGSPUSH:
14298  if (nd_type(node2) != NODE_ARRAY) break;
14299  node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
14300  nd_set_type(node1, NODE_ARGSCAT);
14301  return node1;
14302  case NODE_ARGSCAT:
14303  if (nd_type(node2) != NODE_ARRAY ||
14304  nd_type(node1->nd_body) != NODE_ARRAY) break;
14305  node1->nd_body = list_concat(node1->nd_body, node2);
14306  return node1;
14307  }
14308  return NEW_ARGSCAT(node1, node2);
14309 }
14310 
14311 static NODE *
14312 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14313 {
14314  if (!node1) return NEW_LIST(node2);
14315  switch (nd_type(node1)) {
14316  case NODE_ARRAY:
14317  return list_append(node1, node2);
14318  case NODE_BLOCK_PASS:
14319  node1->nd_head = arg_append(node1->nd_head, node2);
14320  return node1;
14321  case NODE_ARGSPUSH:
14322  node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
14323  nd_set_type(node1, NODE_ARGSCAT);
14324  return node1;
14325  }
14326  return NEW_ARGSPUSH(node1, node2);
14327 }
14328 
14329 static NODE *
14331 {
14332  if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
14333  if (nd_type(node) == NODE_ARRAY) return node;
14334  return 0;
14335 }
14336 
14337 static NODE *
14338 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
14339 {
14340  if (!lhs) return 0;
14341 
14342  switch (nd_type(lhs)) {
14343  case NODE_GASGN:
14344  case NODE_IASGN:
14345  case NODE_IASGN2:
14346  case NODE_LASGN:
14347  case NODE_DASGN:
14348  case NODE_DASGN_CURR:
14349  case NODE_MASGN:
14350  case NODE_CDECL:
14351  case NODE_CVASGN:
14352  lhs->nd_value = rhs;
14353  break;
14354 
14355  case NODE_ATTRASGN:
14356  case NODE_CALL:
14357  lhs->nd_args = arg_append(lhs->nd_args, rhs);
14358  break;
14359 
14360  default:
14361  /* should not happen */
14362  break;
14363  }
14364 
14365  return lhs;
14366 }
14367 
14368 static int
14369 value_expr_gen(struct parser_params *parser, NODE *node)
14370 {
14371  int cond = 0;
14372 
14373  if (!node) {
14374  rb_warning0("empty expression");
14375  }
14376  while (node) {
14377  switch (nd_type(node)) {
14378  case NODE_DEFN:
14379  case NODE_DEFS:
14380  parser_warning(node, "void value expression");
14381  return FALSE;
14382 
14383  case NODE_RETURN:
14384  case NODE_BREAK:
14385  case NODE_NEXT:
14386  case NODE_REDO:
14387  case NODE_RETRY:
14388  if (!cond) yyerror("void value expression");
14389  /* or "control never reach"? */
14390  return FALSE;
14391 
14392  case NODE_BLOCK:
14393  while (node->nd_next) {
14394  node = node->nd_next;
14395  }
14396  node = node->nd_head;
14397  break;
14398 
14399  case NODE_BEGIN:
14400  node = node->nd_body;
14401  break;
14402 
14403  case NODE_IF:
14404  if (!node->nd_body) {
14405  node = node->nd_else;
14406  break;
14407  }
14408  else if (!node->nd_else) {
14409  node = node->nd_body;
14410  break;
14411  }
14412  if (!value_expr(node->nd_body)) return FALSE;
14413  node = node->nd_else;
14414  break;
14415 
14416  case NODE_AND:
14417  case NODE_OR:
14418  cond = 1;
14419  node = node->nd_2nd;
14420  break;
14421 
14422  default:
14423  return TRUE;
14424  }
14425  }
14426 
14427  return TRUE;
14428 }
14429 
14430 static void
14431 void_expr_gen(struct parser_params *parser, NODE *node)
14432 {
14433  const char *useless = 0;
14434 
14435  if (!RTEST(ruby_verbose)) return;
14436 
14437  if (!node) return;
14438  switch (nd_type(node)) {
14439  case NODE_CALL:
14440  switch (node->nd_mid) {
14441  case '+':
14442  case '-':
14443  case '*':
14444  case '/':
14445  case '%':
14446  case tPOW:
14447  case tUPLUS:
14448  case tUMINUS:
14449  case '|':
14450  case '^':
14451  case '&':
14452  case tCMP:
14453  case '>':
14454  case tGEQ:
14455  case '<':
14456  case tLEQ:
14457  case tEQ:
14458  case tNEQ:
14459  useless = rb_id2name(node->nd_mid);
14460  break;
14461  }
14462  break;
14463 
14464  case NODE_LVAR:
14465  case NODE_DVAR:
14466  case NODE_GVAR:
14467  case NODE_IVAR:
14468  case NODE_CVAR:
14469  case NODE_NTH_REF:
14470  case NODE_BACK_REF:
14471  useless = "a variable";
14472  break;
14473  case NODE_CONST:
14474  useless = "a constant";
14475  break;
14476  case NODE_LIT:
14477  case NODE_STR:
14478  case NODE_DSTR:
14479  case NODE_DREGX:
14480  case NODE_DREGX_ONCE:
14481  useless = "a literal";
14482  break;
14483  case NODE_COLON2:
14484  case NODE_COLON3:
14485  useless = "::";
14486  break;
14487  case NODE_DOT2:
14488  useless = "..";
14489  break;
14490  case NODE_DOT3:
14491  useless = "...";
14492  break;
14493  case NODE_SELF:
14494  useless = "self";
14495  break;
14496  case NODE_NIL:
14497  useless = "nil";
14498  break;
14499  case NODE_TRUE:
14500  useless = "true";
14501  break;
14502  case NODE_FALSE:
14503  useless = "false";
14504  break;
14505  case NODE_DEFINED:
14506  useless = "defined?";
14507  break;
14508  }
14509 
14510  if (useless) {
14511  int line = ruby_sourceline;
14512 
14513  ruby_sourceline = nd_line(node);
14514  rb_warnS("possibly useless use of %s in void context", useless);
14515  ruby_sourceline = line;
14516  }
14517 }
14518 
14519 static void
14520 void_stmts_gen(struct parser_params *parser, NODE *node)
14521 {
14522  if (!RTEST(ruby_verbose)) return;
14523  if (!node) return;
14524  if (nd_type(node) != NODE_BLOCK) return;
14525 
14526  for (;;) {
14527  if (!node->nd_next) return;
14528  void_expr0(node->nd_head);
14529  node = node->nd_next;
14530  }
14531 }
14532 
14533 static NODE *
14535 {
14536  NODE **n = &node, *n1 = node;
14537  while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
14538  *n = n1 = n1->nd_body;
14539  }
14540  return node;
14541 }
14542 
14543 static void
14544 reduce_nodes_gen(struct parser_params *parser, NODE **body)
14545 {
14546  NODE *node = *body;
14547 
14548  if (!node) {
14549  *body = NEW_NIL();
14550  return;
14551  }
14552 #define subnodes(n1, n2) \
14553  ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
14554  (!node->n2) ? (body = &node->n1, 1) : \
14555  (reduce_nodes(&node->n1), body = &node->n2, 1))
14556 
14557  while (node) {
14558  int newline = (int)(node->flags & NODE_FL_NEWLINE);
14559  switch (nd_type(node)) {
14560  end:
14561  case NODE_NIL:
14562  *body = 0;
14563  return;
14564  case NODE_RETURN:
14565  *body = node = node->nd_stts;
14566  if (newline && node) node->flags |= NODE_FL_NEWLINE;
14567  continue;
14568  case NODE_BEGIN:
14569  *body = node = node->nd_body;
14570  if (newline && node) node->flags |= NODE_FL_NEWLINE;
14571  continue;
14572  case NODE_BLOCK:
14573  body = &node->nd_end->nd_head;
14574  break;
14575  case NODE_IF:
14576  if (subnodes(nd_body, nd_else)) break;
14577  return;
14578  case NODE_CASE:
14579  body = &node->nd_body;
14580  break;
14581  case NODE_WHEN:
14582  if (!subnodes(nd_body, nd_next)) goto end;
14583  break;
14584  case NODE_ENSURE:
14585  if (!subnodes(nd_head, nd_resq)) goto end;
14586  break;
14587  case NODE_RESCUE:
14588  if (node->nd_else) {
14589  body = &node->nd_resq;
14590  break;
14591  }
14592  if (!subnodes(nd_head, nd_resq)) goto end;
14593  break;
14594  default:
14595  return;
14596  }
14597  node = *body;
14598  if (newline && node) node->flags |= NODE_FL_NEWLINE;
14599  }
14600 
14601 #undef subnodes
14602 }
14603 
14604 static int
14606 {
14607  if (!node) return 1;
14608  switch (nd_type(node)) {
14609  case NODE_HASH:
14610  if (!(node = node->nd_head)) break;
14611  case NODE_ARRAY:
14612  do {
14613  if (!is_static_content(node->nd_head)) return 0;
14614  } while ((node = node->nd_next) != 0);
14615  case NODE_LIT:
14616  case NODE_STR:
14617  case NODE_NIL:
14618  case NODE_TRUE:
14619  case NODE_FALSE:
14620  case NODE_ZARRAY:
14621  break;
14622  default:
14623  return 0;
14624  }
14625  return 1;
14626 }
14627 
14628 static int
14629 assign_in_cond(struct parser_params *parser, NODE *node)
14630 {
14631  switch (nd_type(node)) {
14632  case NODE_MASGN:
14633  yyerror("multiple assignment in conditional");
14634  return 1;
14635 
14636  case NODE_LASGN:
14637  case NODE_DASGN:
14638  case NODE_DASGN_CURR:
14639  case NODE_GASGN:
14640  case NODE_IASGN:
14641  break;
14642 
14643  default:
14644  return 0;
14645  }
14646 
14647  if (!node->nd_value) return 1;
14648  if (is_static_content(node->nd_value)) {
14649  /* reports always */
14650  parser_warn(node->nd_value, "found = in conditional, should be ==");
14651  }
14652  return 1;
14653 }
14654 
14655 static void
14656 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14657 {
14658  if (!e_option_supplied(parser)) parser_warn(node, str);
14659 }
14660 
14661 static void
14662 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14663 {
14664  if (!e_option_supplied(parser)) parser_warning(node, str);
14665 }
14666 
14667 static void
14668 fixup_nodes(NODE **rootnode)
14669 {
14670  NODE *node, *next, *head;
14671 
14672  for (node = *rootnode; node; node = next) {
14673  enum node_type type;
14674  VALUE val;
14675 
14676  next = node->nd_next;
14677  head = node->nd_head;
14678  rb_gc_force_recycle((VALUE)node);
14679  *rootnode = next;
14680  switch (type = nd_type(head)) {
14681  case NODE_DOT2:
14682  case NODE_DOT3:
14683  val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
14684  type == NODE_DOT3);
14685  rb_gc_force_recycle((VALUE)head->nd_beg);
14686  rb_gc_force_recycle((VALUE)head->nd_end);
14687  nd_set_type(head, NODE_LIT);
14688  head->nd_lit = val;
14689  break;
14690  default:
14691  break;
14692  }
14693  }
14694 }
14695 
14696 static NODE *cond0(struct parser_params*,NODE*);
14697 
14698 static NODE*
14699 range_op(struct parser_params *parser, NODE *node)
14700 {
14701  enum node_type type;
14702 
14703  if (node == 0) return 0;
14704 
14705  type = nd_type(node);
14706  value_expr(node);
14707  if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
14708  warn_unless_e_option(parser, node, "integer literal in conditional range");
14709  return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
14710  }
14711  return cond0(parser, node);
14712 }
14713 
14714 static int
14716 {
14717  if (!node) return 1; /* same as NODE_NIL */
14718  switch (nd_type(node)) {
14719  case NODE_LIT:
14720  case NODE_STR:
14721  case NODE_DSTR:
14722  case NODE_EVSTR:
14723  case NODE_DREGX:
14724  case NODE_DREGX_ONCE:
14725  case NODE_DSYM:
14726  return 2;
14727  case NODE_TRUE:
14728  case NODE_FALSE:
14729  case NODE_NIL:
14730  return 1;
14731  }
14732  return 0;
14733 }
14734 
14735 static NODE*
14736 cond0(struct parser_params *parser, NODE *node)
14737 {
14738  if (node == 0) return 0;
14739  assign_in_cond(parser, node);
14740 
14741  switch (nd_type(node)) {
14742  case NODE_DSTR:
14743  case NODE_EVSTR:
14744  case NODE_STR:
14745  rb_warn0("string literal in condition");
14746  break;
14747 
14748  case NODE_DREGX:
14749  case NODE_DREGX_ONCE:
14750  warning_unless_e_option(parser, node, "regex literal in condition");
14751  return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
14752 
14753  case NODE_AND:
14754  case NODE_OR:
14755  node->nd_1st = cond0(parser, node->nd_1st);
14756  node->nd_2nd = cond0(parser, node->nd_2nd);
14757  break;
14758 
14759  case NODE_DOT2:
14760  case NODE_DOT3:
14761  node->nd_beg = range_op(parser, node->nd_beg);
14762  node->nd_end = range_op(parser, node->nd_end);
14763  if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
14764  else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
14765  if (!e_option_supplied(parser)) {
14766  int b = literal_node(node->nd_beg);
14767  int e = literal_node(node->nd_end);
14768  if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
14769  parser_warn(node, "range literal in condition");
14770  }
14771  }
14772  break;
14773 
14774  case NODE_DSYM:
14775  parser_warning(node, "literal in condition");
14776  break;
14777 
14778  case NODE_LIT:
14779  if (RB_TYPE_P(node->nd_lit, T_REGEXP)) {
14780  warn_unless_e_option(parser, node, "regex literal in condition");
14781  nd_set_type(node, NODE_MATCH);
14782  }
14783  else {
14784  parser_warning(node, "literal in condition");
14785  }
14786  default:
14787  break;
14788  }
14789  return node;
14790 }
14791 
14792 static NODE*
14793 cond_gen(struct parser_params *parser, NODE *node)
14794 {
14795  if (node == 0) return 0;
14796  return cond0(parser, node);
14797 }
14798 
14799 static NODE*
14800 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
14801 {
14802  value_expr(left);
14803  if (left && (enum node_type)nd_type(left) == type) {
14804  NODE *node = left, *second;
14805  while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
14806  node = second;
14807  }
14808  node->nd_2nd = NEW_NODE(type, second, right, 0);
14809  return left;
14810  }
14811  return NEW_NODE(type, left, right, 0);
14812 }
14813 
14814 static void
14815 no_blockarg(struct parser_params *parser, NODE *node)
14816 {
14817  if (node && nd_type(node) == NODE_BLOCK_PASS) {
14818  compile_error(PARSER_ARG "block argument should not be given");
14819  }
14820 }
14821 
14822 static NODE *
14823 ret_args_gen(struct parser_params *parser, NODE *node)
14824 {
14825  if (node) {
14826  no_blockarg(parser, node);
14827  if (nd_type(node) == NODE_ARRAY) {
14828  if (node->nd_next == 0) {
14829  node = node->nd_head;
14830  }
14831  else {
14832  nd_set_type(node, NODE_VALUES);
14833  }
14834  }
14835  }
14836  return node;
14837 }
14838 
14839 static NODE *
14840 new_yield_gen(struct parser_params *parser, NODE *node)
14841 {
14842  if (node) no_blockarg(parser, node);
14843 
14844  return NEW_YIELD(node);
14845 }
14846 
14847 static NODE*
14849 {
14850  switch (TYPE(node->nd_lit)) {
14851  case T_FIXNUM:
14852  node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
14853  break;
14854  case T_BIGNUM:
14855  node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
14856  break;
14857  case T_FLOAT:
14858 #if USE_FLONUM
14859  if (FLONUM_P(node->nd_lit)) {
14860  node->nd_lit = DBL2NUM(-RFLOAT_VALUE(node->nd_lit));
14861  }
14862  else {
14863  RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
14864  }
14865 #else
14866  RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
14867 #endif
14868  break;
14869  default:
14870  break;
14871  }
14872  return node;
14873 }
14874 
14875 static NODE *
14876 arg_blk_pass(NODE *node1, NODE *node2)
14877 {
14878  if (node2) {
14879  node2->nd_head = node1;
14880  return node2;
14881  }
14882  return node1;
14883 }
14884 
14885 
14886 static NODE*
14887 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, NODE *tail)
14888 {
14889  int saved_line = ruby_sourceline;
14890  struct rb_args_info *args = tail->nd_ainfo;
14891 
14892  args->pre_args_num = m ? rb_long2int(m->nd_plen) : 0;
14893  args->pre_init = m ? m->nd_next : 0;
14894 
14895  args->post_args_num = p ? rb_long2int(p->nd_plen) : 0;
14896  args->post_init = p ? p->nd_next : 0;
14897  args->first_post_arg = p ? p->nd_pid : 0;
14898 
14899  args->rest_arg = r;
14900 
14901  args->opt_args = o;
14902 
14903  ruby_sourceline = saved_line;
14904 
14905  return tail;
14906 }
14907 
14908 static NODE*
14909 new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b)
14910 {
14911  int saved_line = ruby_sourceline;
14912  struct rb_args_info *args;
14913  NODE *kw_rest_arg = 0;
14914  NODE *node;
14915 
14916  args = ALLOC(struct rb_args_info);
14917  MEMZERO(args, struct rb_args_info, 1);
14918  node = NEW_NODE(NODE_ARGS, 0, 0, args);
14919 
14920  args->block_arg = b;
14921  args->kw_args = k;
14922  if (k && !kr) kr = internal_id();
14923  if (kr) {
14924  arg_var(kr);
14925  kw_rest_arg = NEW_DVAR(kr);
14926  }
14927  args->kw_rest_arg = kw_rest_arg;
14928 
14929  ruby_sourceline = saved_line;
14930  return node;
14931 }
14932 
14933 static NODE*
14934 dsym_node_gen(struct parser_params *parser, NODE *node)
14935 {
14936  VALUE lit;
14937 
14938  if (!node) {
14939  return NEW_LIT(ID2SYM(idNULL));
14940  }
14941 
14942  switch (nd_type(node)) {
14943  case NODE_DSTR:
14944  nd_set_type(node, NODE_DSYM);
14945  break;
14946  case NODE_STR:
14947  lit = node->nd_lit;
14948  node->nd_lit = ID2SYM(rb_intern_str(lit));
14949  nd_set_type(node, NODE_LIT);
14950  break;
14951  default:
14952  node = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST(node));
14953  break;
14954  }
14955  return node;
14956 }
14957 #endif /* !RIPPER */
14958 
14959 #ifndef RIPPER
14960 static NODE *
14961 new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
14962 {
14963  NODE *asgn;
14964 
14965  if (lhs) {
14966  ID vid = lhs->nd_vid;
14967  if (op == tOROP) {
14968  lhs->nd_value = rhs;
14969  asgn = NEW_OP_ASGN_OR(gettable(vid), lhs);
14970  if (is_asgn_or_id(vid)) {
14971  asgn->nd_aid = vid;
14972  }
14973  }
14974  else if (op == tANDOP) {
14975  lhs->nd_value = rhs;
14976  asgn = NEW_OP_ASGN_AND(gettable(vid), lhs);
14977  }
14978  else {
14979  asgn = lhs;
14980  asgn->nd_value = NEW_CALL(gettable(vid), op, NEW_LIST(rhs));
14981  }
14982  }
14983  else {
14984  asgn = NEW_BEGIN(0);
14985  }
14986  return asgn;
14987 }
14988 
14989 static NODE *
14990 new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs)
14991 {
14992  NODE *asgn;
14993 
14994  if (op == tOROP) {
14995  op = 0;
14996  }
14997  else if (op == tANDOP) {
14998  op = 1;
14999  }
15000  asgn = NEW_OP_ASGN2(lhs, attr, op, rhs);
15001  fixpos(asgn, lhs);
15002  return asgn;
15003 }
15004 
15005 static NODE *
15006 new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
15007 {
15008  NODE *asgn;
15009 
15010  if (op == tOROP) {
15011  op = 0;
15012  }
15013  else if (op == tANDOP) {
15014  op = 1;
15015  }
15016  if (lhs) {
15017  asgn = NEW_OP_CDECL(lhs, op, rhs);
15018  }
15019  else {
15020  asgn = NEW_BEGIN(0);
15021  }
15022  fixpos(asgn, lhs);
15023  return asgn;
15024 }
15025 #else
15026 static VALUE
15027 new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs)
15028 {
15029  return dispatch3(opassign, lhs, op, rhs);
15030 }
15031 
15032 static VALUE
15033 new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs)
15034 {
15035  VALUE recv = dispatch3(field, lhs, type, attr);
15036  return dispatch3(opassign, recv, op, rhs);
15037 }
15038 #endif
15039 
15040 static void
15041 warn_unused_var(struct parser_params *parser, struct local_vars *local)
15042 {
15043  int i, cnt;
15044  ID *v, *u;
15045 
15046  if (!local->used) return;
15047  v = local->vars->tbl;
15048  u = local->used->tbl;
15049  cnt = local->used->pos;
15050  if (cnt != local->vars->pos) {
15051  rb_bug("local->used->pos != local->vars->pos");
15052  }
15053  for (i = 0; i < cnt; ++i) {
15054  if (!v[i] || (u[i] & LVAR_USED)) continue;
15055  if (is_private_local_id(v[i])) continue;
15056  rb_warn4S(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i]));
15057  }
15058 }
15059 
15060 static void
15061 local_push_gen(struct parser_params *parser, int inherit_dvars)
15062 {
15063  struct local_vars *local;
15064 
15065  local = ALLOC(struct local_vars);
15066  local->prev = lvtbl;
15067  local->args = vtable_alloc(0);
15068  local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
15069  local->used = !(inherit_dvars &&
15071  RTEST(ruby_verbose) ? vtable_alloc(0) : 0;
15072  lvtbl = local;
15073 }
15074 
15075 static void
15077 {
15078  struct local_vars *local = lvtbl->prev;
15079  if (lvtbl->used) {
15080  warn_unused_var(parser, lvtbl);
15081  vtable_free(lvtbl->used);
15082  }
15083  vtable_free(lvtbl->args);
15084  vtable_free(lvtbl->vars);
15085  xfree(lvtbl);
15086  lvtbl = local;
15087 }
15088 
15089 #ifndef RIPPER
15090 static ID*
15091 vtable_tblcpy(ID *buf, const struct vtable *src)
15092 {
15093  int i, cnt = vtable_size(src);
15094 
15095  if (cnt > 0) {
15096  buf[0] = cnt;
15097  for (i = 0; i < cnt; i++) {
15098  buf[i] = src->tbl[i];
15099  }
15100  return buf;
15101  }
15102  return 0;
15103 }
15104 
15105 static ID*
15107 {
15108  int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars);
15109  ID *buf;
15110 
15111  if (cnt <= 0) return 0;
15112  buf = ALLOC_N(ID, cnt + 1);
15113  vtable_tblcpy(buf+1, lvtbl->args);
15114  vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars);
15115  buf[0] = cnt;
15116  return buf;
15117 }
15118 #endif
15119 
15120 static int
15121 arg_var_gen(struct parser_params *parser, ID id)
15122 {
15123  vtable_add(lvtbl->args, id);
15124  return vtable_size(lvtbl->args) - 1;
15125 }
15126 
15127 static int
15128 local_var_gen(struct parser_params *parser, ID id)
15129 {
15130  vtable_add(lvtbl->vars, id);
15131  if (lvtbl->used) {
15133  }
15134  return vtable_size(lvtbl->vars) - 1;
15135 }
15136 
15137 static int
15138 local_id_gen(struct parser_params *parser, ID id)
15139 {
15140  struct vtable *vars, *args, *used;
15141 
15142  vars = lvtbl->vars;
15143  args = lvtbl->args;
15144  used = lvtbl->used;
15145 
15146  while (vars && POINTER_P(vars->prev)) {
15147  vars = vars->prev;
15148  args = args->prev;
15149  if (used) used = used->prev;
15150  }
15151 
15152  if (vars && vars->prev == DVARS_INHERIT) {
15153  return rb_local_defined(id);
15154  }
15155  else if (vtable_included(args, id)) {
15156  return 1;
15157  }
15158  else {
15159  int i = vtable_included(vars, id);
15160  if (i && used) used->tbl[i-1] |= LVAR_USED;
15161  return i != 0;
15162  }
15163 }
15164 
15165 static const struct vtable *
15167 {
15168  lvtbl->args = vtable_alloc(lvtbl->args);
15169  lvtbl->vars = vtable_alloc(lvtbl->vars);
15170  if (lvtbl->used) {
15171  lvtbl->used = vtable_alloc(lvtbl->used);
15172  }
15173  return lvtbl->args;
15174 }
15175 
15176 static void
15177 dyna_pop_1(struct parser_params *parser)
15178 {
15179  struct vtable *tmp;
15180 
15181  if ((tmp = lvtbl->used) != 0) {
15182  warn_unused_var(parser, lvtbl);
15183  lvtbl->used = lvtbl->used->prev;
15184  vtable_free(tmp);
15185  }
15186  tmp = lvtbl->args;
15187  lvtbl->args = lvtbl->args->prev;
15188  vtable_free(tmp);
15189  tmp = lvtbl->vars;
15190  lvtbl->vars = lvtbl->vars->prev;
15191  vtable_free(tmp);
15192 }
15193 
15194 static void
15195 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
15196 {
15197  while (lvtbl->args != lvargs) {
15198  dyna_pop_1(parser);
15199  if (!lvtbl->args) {
15200  struct local_vars *local = lvtbl->prev;
15201  xfree(lvtbl);
15202  lvtbl = local;
15203  }
15204  }
15205  dyna_pop_1(parser);
15206 }
15207 
15208 static int
15210 {
15211  return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
15212 }
15213 
15214 static int
15215 dvar_defined_gen(struct parser_params *parser, ID id, int get)
15216 {
15217  struct vtable *vars, *args, *used;
15218  int i;
15219 
15220  args = lvtbl->args;
15221  vars = lvtbl->vars;
15222  used = lvtbl->used;
15223 
15224  while (POINTER_P(vars)) {
15225  if (vtable_included(args, id)) {
15226  return 1;
15227  }
15228  if ((i = vtable_included(vars, id)) != 0) {
15229  if (used) used->tbl[i-1] |= LVAR_USED;
15230  return 1;
15231  }
15232  args = args->prev;
15233  vars = vars->prev;
15234  if (get) used = 0;
15235  if (used) used = used->prev;
15236  }
15237 
15238  if (vars == DVARS_INHERIT) {
15239  return rb_dvar_defined(id);
15240  }
15241 
15242  return 0;
15243 }
15244 
15245 static int
15246 dvar_curr_gen(struct parser_params *parser, ID id)
15247 {
15248  return (vtable_included(lvtbl->args, id) ||
15249  vtable_included(lvtbl->vars, id));
15250 }
15251 
15252 #ifndef RIPPER
15253 static void
15255 {
15256  int c = RE_OPTION_ENCODING_IDX(options);
15257 
15258  if (c) {
15259  int opt, idx;
15260  rb_char_to_option_kcode(c, &opt, &idx);
15261  if (idx != ENCODING_GET(str) &&
15263  goto error;
15264  }
15265  ENCODING_SET(str, idx);
15266  }
15267  else if (RE_OPTION_ENCODING_NONE(options)) {
15268  if (!ENCODING_IS_ASCII8BIT(str) &&
15270  c = 'n';
15271  goto error;
15272  }
15274  }
15275  else if (current_enc == rb_usascii_encoding()) {
15277  /* raise in re.c */
15279  }
15280  else {
15282  }
15283  }
15284  return;
15285 
15286  error:
15288  "regexp encoding option '%c' differs from source encoding '%s'",
15289  c, rb_enc_name(rb_enc_get(str)));
15290 }
15291 
15292 static int
15294 {
15295  VALUE err;
15296  reg_fragment_setenc(str, options);
15297  err = rb_reg_check_preprocess(str);
15298  if (err != Qnil) {
15299  err = rb_obj_as_string(err);
15300  compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
15301  RB_GC_GUARD(err);
15302  return 0;
15303  }
15304  return 1;
15305 }
15306 
15307 typedef struct {
15308  struct parser_params* parser;
15309  rb_encoding *enc;
15310  NODE *succ_block;
15311  NODE *fail_block;
15312  int num;
15314 
15315 static int
15317  int back_num, int *back_refs, OnigRegex regex, void *arg0)
15318 {
15320  struct parser_params* parser = arg->parser;
15321  rb_encoding *enc = arg->enc;
15322  long len = name_end - name;
15323  const char *s = (const char *)name;
15324  ID var;
15325 
15326  arg->num++;
15327 
15328  if (arg->succ_block == 0) {
15329  arg->succ_block = NEW_BEGIN(0);
15330  arg->fail_block = NEW_BEGIN(0);
15331  }
15332 
15333  if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
15334  (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
15335  !rb_enc_symname2_p(s, len, enc)) {
15336  return ST_CONTINUE;
15337  }
15338  var = rb_intern3(s, len, enc);
15339  if (dvar_defined(var) || local_id(var)) {
15340  rb_warningS("named capture conflicts a local variable - %s",
15341  rb_id2name(var));
15342  }
15343  arg->succ_block = block_append(arg->succ_block,
15345  NEW_CALL(
15346  gettable(rb_intern("$~")),
15347  idAREF,
15348  NEW_LIST(NEW_LIT(ID2SYM(var))))
15349  )));
15350  arg->fail_block = block_append(arg->fail_block,
15352  return ST_CONTINUE;
15353 }
15354 
15355 static NODE *
15357 {
15359 
15360  arg.parser = parser;
15361  arg.enc = rb_enc_get(regexp);
15362  arg.succ_block = 0;
15363  arg.fail_block = 0;
15364  arg.num = 0;
15366 
15367  if (arg.num == 0)
15368  return match;
15369 
15370  return
15371  block_append(
15372  newline_node(match),
15373  NEW_IF(gettable(rb_intern("$~")),
15374  block_append(
15375  newline_node(arg.succ_block),
15376  newline_node(
15377  NEW_CALL(
15378  gettable(rb_intern("$~")),
15379  rb_intern("begin"),
15380  NEW_LIST(NEW_LIT(INT2FIX(0)))))),
15381  block_append(
15382  newline_node(arg.fail_block),
15383  newline_node(
15384  NEW_LIT(Qnil)))));
15385 }
15386 
15387 static VALUE
15388 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
15389 {
15390  VALUE re;
15391  VALUE err;
15392 
15393  reg_fragment_setenc(str, options);
15394  err = rb_errinfo();
15396  if (NIL_P(re)) {
15397  ID mesg = rb_intern("mesg");
15398  VALUE m = rb_attr_get(rb_errinfo(), mesg);
15399  rb_set_errinfo(err);
15400  if (!NIL_P(err)) {
15401  rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
15402  }
15403  else {
15405  }
15406  return Qnil;
15407  }
15408  return re;
15409 }
15410 
15411 void
15413 {
15414 }
15415 
15416 NODE*
15418 {
15419  NODE *prelude = 0;
15420  NODE *scope = node;
15421  struct parser_params *parser;
15422 
15423  if (!node) return node;
15424 
15425  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15426 
15427  node = node->nd_body;
15428 
15429  if (nd_type(node) == NODE_PRELUDE) {
15430  prelude = node;
15431  node = node->nd_body;
15432  }
15433 
15434  node = block_append(node,
15435  NEW_FCALL(rb_intern("print"),
15436  NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
15437  if (prelude) {
15438  prelude->nd_body = node;
15439  scope->nd_body = prelude;
15440  }
15441  else {
15442  scope->nd_body = node;
15443  }
15444 
15445  return scope;
15446 }
15447 
15448 NODE *
15449 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
15450 {
15451  NODE *prelude = 0;
15452  NODE *scope = node;
15453  struct parser_params *parser;
15454 
15455  if (!node) return node;
15456 
15457  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15458 
15459  node = node->nd_body;
15460 
15461  if (nd_type(node) == NODE_PRELUDE) {
15462  prelude = node;
15463  node = node->nd_body;
15464  }
15465  if (split) {
15466  node = block_append(NEW_GASGN(rb_intern("$F"),
15467  NEW_CALL(NEW_GVAR(rb_intern("$_")),
15468  rb_intern("split"), 0)),
15469  node);
15470  }
15471  if (chop) {
15472  node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
15473  rb_intern("chop!"), 0), node);
15474  }
15475 
15476  node = NEW_OPT_N(node);
15477 
15478  if (prelude) {
15479  prelude->nd_body = node;
15480  scope->nd_body = prelude;
15481  }
15482  else {
15483  scope->nd_body = node;
15484  }
15485 
15486  return scope;
15487 }
15488 
15489 static const struct {
15491  const char *name;
15492 } op_tbl[] = {
15493  {tDOT2, ".."},
15494  {tDOT3, "..."},
15495  {'+', "+(binary)"},
15496  {'-', "-(binary)"},
15497  {tPOW, "**"},
15498  {tDSTAR, "**"},
15499  {tUPLUS, "+@"},
15500  {tUMINUS, "-@"},
15501  {tCMP, "<=>"},
15502  {tGEQ, ">="},
15503  {tLEQ, "<="},
15504  {tEQ, "=="},
15505  {tEQQ, "==="},
15506  {tNEQ, "!="},
15507  {tMATCH, "=~"},
15508  {tNMATCH, "!~"},
15509  {tAREF, "[]"},
15510  {tASET, "[]="},
15511  {tLSHFT, "<<"},
15512  {tRSHFT, ">>"},
15513  {tCOLON2, "::"},
15514 };
15515 
15516 #define op_tbl_count numberof(op_tbl)
15517 
15518 #ifndef ENABLE_SELECTOR_NAMESPACE
15519 #define ENABLE_SELECTOR_NAMESPACE 0
15520 #endif
15521 
15522 static struct symbols {
15523  ID last_id;
15524  st_table *sym_id;
15525  st_table *id_str;
15526 #if ENABLE_SELECTOR_NAMESPACE
15527  st_table *ivar2_id;
15528  st_table *id_ivar2;
15529 #endif
15532 
15533 static const struct st_hash_type symhash = {
15535  rb_str_hash,
15536 };
15537 
15538 #if ENABLE_SELECTOR_NAMESPACE
15539 struct ivar2_key {
15540  ID id;
15541  VALUE klass;
15542 };
15543 
15544 static int
15545 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
15546 {
15547  if (key1->id == key2->id && key1->klass == key2->klass) {
15548  return 0;
15549  }
15550  return 1;
15551 }
15552 
15553 static int
15554 ivar2_hash(struct ivar2_key *key)
15555 {
15556  return (key->id << 8) ^ (key->klass >> 2);
15557 }
15558 
15559 static const struct st_hash_type ivar2_hash_type = {
15560  ivar2_cmp,
15561  ivar2_hash,
15562 };
15563 #endif
15564 
15565 void
15567 {
15568  global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
15570 #if ENABLE_SELECTOR_NAMESPACE
15571  global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
15572  global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
15573 #endif
15574 
15575  (void)nodetype;
15576  (void)nodeline;
15577 #if PARSER_DEBUG
15578  (void)lex_state_name(-1);
15579 #endif
15580 
15581  Init_id();
15582 }
15583 
15584 void
15586 {
15590 }
15591 #endif /* !RIPPER */
15592 
15593 static ID
15595 {
15596  ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
15597  id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
15598  return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
15599 }
15600 
15601 #ifndef RIPPER
15602 static int
15603 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
15604 {
15605  int mb = 0;
15606 
15607  if (m >= e) return 0;
15608  if (is_global_name_punct(*m)) {
15609  ++m;
15610  }
15611  else if (*m == '-') {
15612  ++m;
15613  if (m < e && is_identchar(m, e, enc)) {
15614  if (!ISASCII(*m)) mb = 1;
15615  m += rb_enc_mbclen(m, e, enc);
15616  }
15617  }
15618  else {
15619  if (!rb_enc_isdigit(*m, enc)) return 0;
15620  do {
15621  if (!ISASCII(*m)) mb = 1;
15622  ++m;
15623  } while (m < e && rb_enc_isdigit(*m, enc));
15624  }
15625  return m == e ? mb + 1 : 0;
15626 }
15627 
15628 int
15629 rb_symname_p(const char *name)
15630 {
15631  return rb_enc_symname_p(name, rb_ascii8bit_encoding());
15632 }
15633 
15634 int
15635 rb_enc_symname_p(const char *name, rb_encoding *enc)
15636 {
15637  return rb_enc_symname2_p(name, strlen(name), enc);
15638 }
15639 
15640 static int
15641 rb_enc_symname_type(const char *name, long len, rb_encoding *enc)
15642 {
15643  const char *m = name;
15644  const char *e = m + len;
15645  int type = ID_JUNK;
15646 
15647  if (!m || len <= 0) return -1;
15648  switch (*m) {
15649  case '\0':
15650  return -1;
15651 
15652  case '$':
15653  type = ID_GLOBAL;
15654  if (is_special_global_name(++m, e, enc)) return type;
15655  goto id;
15656 
15657  case '@':
15658  type = ID_INSTANCE;
15659  if (*++m == '@') {
15660  ++m;
15661  type = ID_CLASS;
15662  }
15663  goto id;
15664 
15665  case '<':
15666  switch (*++m) {
15667  case '<': ++m; break;
15668  case '=': if (*++m == '>') ++m; break;
15669  default: break;
15670  }
15671  break;
15672 
15673  case '>':
15674  switch (*++m) {
15675  case '>': case '=': ++m; break;
15676  }
15677  break;
15678 
15679  case '=':
15680  switch (*++m) {
15681  case '~': ++m; break;
15682  case '=': if (*++m == '=') ++m; break;
15683  default: return -1;
15684  }
15685  break;
15686 
15687  case '*':
15688  if (*++m == '*') ++m;
15689  break;
15690 
15691  case '+': case '-':
15692  if (*++m == '@') ++m;
15693  break;
15694 
15695  case '|': case '^': case '&': case '/': case '%': case '~': case '`':
15696  ++m;
15697  break;
15698 
15699  case '[':
15700  if (*++m != ']') return -1;
15701  if (*++m == '=') ++m;
15702  break;
15703 
15704  case '!':
15705  if (len == 1) return ID_JUNK;
15706  switch (*++m) {
15707  case '=': case '~': ++m; break;
15708  default: return -1;
15709  }
15710  break;
15711 
15712  default:
15713  type = rb_enc_isupper(*m, enc) ? ID_CONST : ID_LOCAL;
15714  id:
15715  if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
15716  return -1;
15717  while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
15718  switch (*m) {
15719  case '!': case '?':
15720  if (type == ID_GLOBAL || type == ID_CLASS || type == ID_INSTANCE) return -1;
15721  type = ID_JUNK;
15722  ++m;
15723  break;
15724  case '=':
15725  if (type != ID_CONST && type != ID_LOCAL) return -1;
15726  type = ID_ATTRSET;
15727  ++m;
15728  break;
15729  }
15730  break;
15731  }
15732  return m == e ? type : -1;
15733 }
15734 
15735 int
15736 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
15737 {
15738  return rb_enc_symname_type(name, len, enc) != -1;
15739 }
15740 
15741 static int
15743 {
15744  const char *ptr = StringValuePtr(name);
15745  long len = RSTRING_LEN(name);
15746  int type = rb_enc_symname_type(ptr, len, rb_enc_get(name));
15747  RB_GC_GUARD(name);
15748  return type;
15749 }
15750 
15751 static ID
15752 register_symid(ID id, const char *name, long len, rb_encoding *enc)
15753 {
15754  VALUE str = rb_enc_str_new(name, len, enc);
15755  return register_symid_str(id, str);
15756 }
15757 
15758 static ID
15760 {
15761  OBJ_FREEZE(str);
15764  return id;
15765 }
15766 
15767 static int
15769 {
15770  if (!rb_enc_asciicompat(rb_enc_get(str))) return FALSE;
15771  switch (rb_enc_str_coderange(str)) {
15772  case ENC_CODERANGE_BROKEN:
15773  rb_raise(rb_eEncodingError, "invalid encoding symbol");
15774  case ENC_CODERANGE_7BIT:
15775  return TRUE;
15776  }
15777  return FALSE;
15778 }
15779 
15780 /*
15781  * _str_ itself will be registered at the global symbol table. _str_
15782  * can be modified before the registration, since the encoding will be
15783  * set to ASCII-8BIT if it is a special global name.
15784  */
15785 static ID intern_str(VALUE str);
15786 
15787 ID
15788 rb_intern3(const char *name, long len, rb_encoding *enc)
15789 {
15790  VALUE str;
15791  st_data_t data;
15792  struct RString fake_str;
15793  fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
15794  fake_str.basic.klass = rb_cString;
15795  fake_str.as.heap.len = len;
15796  fake_str.as.heap.ptr = (char *)name;
15797  fake_str.as.heap.aux.capa = len;
15798  str = (VALUE)&fake_str;
15799  rb_enc_associate(str, enc);
15800  OBJ_FREEZE(str);
15801 
15802  if (st_lookup(global_symbols.sym_id, str, &data))
15803  return (ID)data;
15804 
15805  str = rb_enc_str_new(name, len, enc); /* make true string */
15806  return intern_str(str);
15807 }
15808 
15809 static ID
15811 {
15812  const char *name, *m, *e;
15813  long len, last;
15814  rb_encoding *enc, *symenc;
15815  unsigned char c;
15816  ID id;
15817  int mb;
15818 
15819  RSTRING_GETMEM(str, name, len);
15820  m = name;
15821  e = m + len;
15822  enc = rb_enc_get(str);
15823  symenc = enc;
15824 
15825  if (rb_cString && !rb_enc_asciicompat(enc)) {
15826  id = ID_JUNK;
15827  goto new_id;
15828  }
15829  last = len-1;
15830  id = 0;
15831  switch (*m) {
15832  case '$':
15833  id |= ID_GLOBAL;
15834  if ((mb = is_special_global_name(++m, e, enc)) != 0) {
15835  if (!--mb) symenc = rb_usascii_encoding();
15836  goto new_id;
15837  }
15838  break;
15839  case '@':
15840  if (m[1] == '@') {
15841  m++;
15842  id |= ID_CLASS;
15843  }
15844  else {
15845  id |= ID_INSTANCE;
15846  }
15847  m++;
15848  break;
15849  default:
15850  c = m[0];
15851  if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
15852  /* operators */
15853  int i;
15854 
15855  if (len == 1) {
15856  id = c;
15857  goto id_register;
15858  }
15859  for (i = 0; i < op_tbl_count; i++) {
15860  if (*op_tbl[i].name == *m &&
15861  strcmp(op_tbl[i].name, m) == 0) {
15862  id = op_tbl[i].token;
15863  goto id_register;
15864  }
15865  }
15866  }
15867 
15868  if (m[last] == '=') {
15869  /* attribute assignment */
15870  id = rb_intern3(name, last, enc);
15871  if (id > tLAST_OP_ID && !is_attrset_id(id)) {
15872  enc = rb_enc_get(rb_id2str(id));
15873  id = rb_id_attrset(id);
15874  goto id_register;
15875  }
15876  id = ID_ATTRSET;
15877  }
15878  else if (rb_enc_isupper(m[0], enc)) {
15879  id = ID_CONST;
15880  }
15881  else {
15882  id = ID_LOCAL;
15883  }
15884  break;
15885  }
15886  if (!rb_enc_isdigit(*m, enc)) {
15887  while (m <= name + last && is_identchar(m, e, enc)) {
15888  if (ISASCII(*m)) {
15889  m++;
15890  }
15891  else {
15892  m += rb_enc_mbclen(m, e, enc);
15893  }
15894  }
15895  }
15896  if (m - name < len) id = ID_JUNK;
15897  if (sym_check_asciionly(str)) symenc = rb_usascii_encoding();
15898  new_id:
15899  if (symenc != enc) rb_enc_associate(str, symenc);
15901  if (len > 20) {
15902  rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
15903  name);
15904  }
15905  else {
15906  rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
15907  (int)len, name);
15908  }
15909  }
15911  id_register:
15912  return register_symid_str(id, str);
15913 }
15914 
15915 ID
15916 rb_intern2(const char *name, long len)
15917 {
15918  return rb_intern3(name, len, rb_usascii_encoding());
15919 }
15920 
15921 #undef rb_intern
15922 ID
15923 rb_intern(const char *name)
15924 {
15925  return rb_intern2(name, strlen(name));
15926 }
15927 
15928 ID
15930 {
15931  st_data_t id;
15932 
15933  if (st_lookup(global_symbols.sym_id, str, &id))
15934  return (ID)id;
15935  return intern_str(rb_str_dup(str));
15936 }
15937 
15938 VALUE
15940 {
15941  st_data_t data;
15942 
15943  if (id < tLAST_TOKEN) {
15944  int i = 0;
15945 
15946  if (id < INT_MAX && rb_ispunct((int)id)) {
15947  VALUE str = global_symbols.op_sym[i = (int)id];
15948  if (!str) {
15949  char name[2];
15950  name[0] = (char)id;
15951  name[1] = 0;
15952  str = rb_usascii_str_new(name, 1);
15953  OBJ_FREEZE(str);
15955  }
15956  return str;
15957  }
15958  for (i = 0; i < op_tbl_count; i++) {
15959  if (op_tbl[i].token == id) {
15960  VALUE str = global_symbols.op_sym[i];
15961  if (!str) {
15962  str = rb_usascii_str_new2(op_tbl[i].name);
15963  OBJ_FREEZE(str);
15965  }
15966  return str;
15967  }
15968  }
15969  }
15970 
15971  if (st_lookup(global_symbols.id_str, id, &data)) {
15972  VALUE str = (VALUE)data;
15973  if (RBASIC(str)->klass == 0)
15974  RBASIC(str)->klass = rb_cString;
15975  return str;
15976  }
15977 
15978  if (is_attrset_id(id)) {
15979  ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL;
15980  VALUE str;
15981 
15982  while (!(str = rb_id2str(id2))) {
15983  if (!is_local_id(id2)) return 0;
15984  id2 = (id & ~ID_SCOPE_MASK) | ID_CONST;
15985  }
15986  str = rb_str_dup(str);
15987  rb_str_cat(str, "=", 1);
15988  rb_intern_str(str);
15989  if (st_lookup(global_symbols.id_str, id, &data)) {
15990  VALUE str = (VALUE)data;
15991  if (RBASIC(str)->klass == 0)
15992  RBASIC(str)->klass = rb_cString;
15993  return str;
15994  }
15995  }
15996  return 0;
15997 }
15998 
15999 const char *
16001 {
16002  VALUE str = rb_id2str(id);
16003 
16004  if (!str) return 0;
16005  return RSTRING_PTR(str);
16006 }
16007 
16008 static int
16010 {
16011  rb_ary_push(ary, ID2SYM(value));
16012  return ST_CONTINUE;
16013 }
16014 
16015 /*
16016  * call-seq:
16017  * Symbol.all_symbols => array
16018  *
16019  * Returns an array of all the symbols currently in Ruby's symbol
16020  * table.
16021  *
16022  * Symbol.all_symbols.size #=> 903
16023  * Symbol.all_symbols[1,20] #=> [:floor, :ARGV, :Binding, :symlink,
16024  * :chown, :EOFError, :$;, :String,
16025  * :LOCK_SH, :"setuid?", :$<,
16026  * :default_proc, :compact, :extend,
16027  * :Tms, :getwd, :$=, :ThreadGroup,
16028  * :wait2, :$>]
16029  */
16030 
16031 VALUE
16033 {
16035 
16037  return ary;
16038 }
16039 
16040 int
16042 {
16043  return is_const_id(id);
16044 }
16045 
16046 int
16048 {
16049  return is_class_id(id);
16050 }
16051 
16052 int
16054 {
16055  return is_global_id(id);
16056 }
16057 
16058 int
16060 {
16061  return is_instance_id(id);
16062 }
16063 
16064 int
16066 {
16067  return is_attrset_id(id);
16068 }
16069 
16070 int
16072 {
16073  return is_local_id(id);
16074 }
16075 
16076 int
16078 {
16079  return is_junk_id(id);
16080 }
16081 
16093 ID
16094 rb_check_id(volatile VALUE *namep)
16095 {
16096  st_data_t id;
16097  VALUE tmp;
16098  VALUE name = *namep;
16099 
16100  if (SYMBOL_P(name)) {
16101  return SYM2ID(name);
16102  }
16103  else if (!RB_TYPE_P(name, T_STRING)) {
16104  tmp = rb_check_string_type(name);
16105  if (NIL_P(tmp)) {
16106  tmp = rb_inspect(name);
16107  rb_raise(rb_eTypeError, "%s is not a symbol",
16108  RSTRING_PTR(tmp));
16109  }
16110  name = tmp;
16111  *namep = name;
16112  }
16113 
16114  sym_check_asciionly(name);
16115 
16116  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
16117  return (ID)id;
16118 
16119  if (rb_is_attrset_name(name)) {
16120  struct RString fake_str;
16121  const VALUE localname = (VALUE)&fake_str;
16122  /* make local name by chopping '=' */
16123  fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
16124  fake_str.basic.klass = rb_cString;
16125  fake_str.as.heap.len = RSTRING_LEN(name) - 1;
16126  fake_str.as.heap.ptr = RSTRING_PTR(name);
16127  fake_str.as.heap.aux.capa = fake_str.as.heap.len;
16128  rb_enc_copy(localname, name);
16129  OBJ_FREEZE(localname);
16130 
16131  if (st_lookup(global_symbols.sym_id, (st_data_t)localname, &id)) {
16132  return rb_id_attrset((ID)id);
16133  }
16134  RB_GC_GUARD(name);
16135  }
16136 
16137  return (ID)0;
16138 }
16139 
16140 ID
16142 {
16143  st_data_t id;
16144  struct RString fake_str;
16145  const VALUE name = (VALUE)&fake_str;
16146  fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
16147  fake_str.basic.klass = rb_cString;
16148  fake_str.as.heap.len = len;
16149  fake_str.as.heap.ptr = (char *)ptr;
16150  fake_str.as.heap.aux.capa = len;
16151  rb_enc_associate(name, enc);
16152 
16153  sym_check_asciionly(name);
16154 
16155  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
16156  return (ID)id;
16157 
16158  if (rb_is_attrset_name(name)) {
16159  fake_str.as.heap.len = len - 1;
16160  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id)) {
16161  return rb_id_attrset((ID)id);
16162  }
16163  }
16164 
16165  return (ID)0;
16166 }
16167 
16168 int
16170 {
16171  return rb_str_symname_type(name) == ID_CONST;
16172 }
16173 
16174 int
16176 {
16177  return rb_str_symname_type(name) == ID_CLASS;
16178 }
16179 
16180 int
16182 {
16183  return rb_str_symname_type(name) == ID_GLOBAL;
16184 }
16185 
16186 int
16188 {
16189  return rb_str_symname_type(name) == ID_INSTANCE;
16190 }
16191 
16192 int
16194 {
16195  return rb_str_symname_type(name) == ID_ATTRSET;
16196 }
16197 
16198 int
16200 {
16201  return rb_str_symname_type(name) == ID_LOCAL;
16202 }
16203 
16204 int
16206 {
16207  switch (rb_str_symname_type(name)) {
16208  case ID_LOCAL: case ID_ATTRSET: case ID_JUNK:
16209  return TRUE;
16210  }
16211  return FALSE;
16212 }
16213 
16214 int
16216 {
16217  return rb_str_symname_type(name) == -1;
16218 }
16219 
16220 #endif /* !RIPPER */
16221 
16222 static void
16224 {
16225  parser->eofp = Qfalse;
16226 
16227  parser->parser_lex_strterm = 0;
16228  parser->parser_cond_stack = 0;
16229  parser->parser_cmdarg_stack = 0;
16230  parser->parser_class_nest = 0;
16231  parser->parser_paren_nest = 0;
16232  parser->parser_lpar_beg = 0;
16233  parser->parser_brace_nest = 0;
16234  parser->parser_in_single = 0;
16235  parser->parser_in_def = 0;
16236  parser->parser_in_defined = 0;
16237  parser->parser_compile_for_eval = 0;
16238  parser->parser_cur_mid = 0;
16239  parser->parser_tokenbuf = NULL;
16240  parser->parser_tokidx = 0;
16241  parser->parser_toksiz = 0;
16242  parser->parser_heredoc_end = 0;
16243  parser->parser_command_start = TRUE;
16244  parser->parser_deferred_nodes = 0;
16245  parser->parser_lex_pbeg = 0;
16246  parser->parser_lex_p = 0;
16247  parser->parser_lex_pend = 0;
16248  parser->parser_lvtbl = 0;
16249  parser->parser_ruby__end__seen = 0;
16250  parser->parser_ruby_sourcefile = 0;
16251 #ifndef RIPPER
16252  parser->is_ripper = 0;
16253  parser->parser_eval_tree_begin = 0;
16254  parser->parser_eval_tree = 0;
16255 #else
16256  parser->is_ripper = 1;
16257  parser->parser_ruby_sourcefile_string = Qnil;
16258  parser->delayed = Qnil;
16259 
16260  parser->result = Qnil;
16261  parser->parsing_thread = Qnil;
16262  parser->toplevel_p = TRUE;
16263 #endif
16264 #ifdef YYMALLOC
16265  parser->heap = NULL;
16266 #endif
16267  parser->enc = rb_utf8_encoding();
16268 }
16269 
16270 #ifdef RIPPER
16271 #define parser_mark ripper_parser_mark
16272 #define parser_free ripper_parser_free
16273 #endif
16274 
16275 static void
16277 {
16278  struct parser_params *p = (struct parser_params*)ptr;
16279 
16285 #ifndef RIPPER
16288  rb_gc_mark(p->debug_lines);
16289 #else
16290  rb_gc_mark(p->parser_ruby_sourcefile_string);
16291  rb_gc_mark(p->delayed);
16292  rb_gc_mark(p->value);
16293  rb_gc_mark(p->result);
16294  rb_gc_mark(p->parsing_thread);
16295 #endif
16296 #ifdef YYMALLOC
16297  rb_gc_mark((VALUE)p->heap);
16298 #endif
16299 }
16300 
16301 static void
16303 {
16304  struct parser_params *p = (struct parser_params*)ptr;
16305  struct local_vars *local, *prev;
16306 
16307  if (p->parser_tokenbuf) {
16308  xfree(p->parser_tokenbuf);
16309  }
16310  for (local = p->parser_lvtbl; local; local = prev) {
16311  if (local->vars) xfree(local->vars);
16312  prev = local->prev;
16313  xfree(local);
16314  }
16315 #ifndef RIPPER
16317 #endif
16318  xfree(p);
16319 }
16320 
16321 static size_t
16322 parser_memsize(const void *ptr)
16323 {
16324  struct parser_params *p = (struct parser_params*)ptr;
16325  struct local_vars *local;
16326  size_t size = sizeof(*p);
16327 
16328  if (!ptr) return 0;
16329  size += p->parser_toksiz;
16330  for (local = p->parser_lvtbl; local; local = local->prev) {
16331  size += sizeof(*local);
16332  if (local->vars) size += local->vars->capa * sizeof(ID);
16333  }
16334 #ifndef RIPPER
16335  if (p->parser_ruby_sourcefile) {
16336  size += strlen(p->parser_ruby_sourcefile) + 1;
16337  }
16338 #endif
16339  return size;
16340 }
16341 
16342 static
16343 #ifndef RIPPER
16344 const
16345 #endif
16346 rb_data_type_t parser_data_type = {
16347  "parser",
16348  {
16349  parser_mark,
16350  parser_free,
16352  },
16353 };
16354 
16355 #ifndef RIPPER
16356 #undef rb_reserved_word
16357 
16358 const struct kwtable *
16359 rb_reserved_word(const char *str, unsigned int len)
16360 {
16361  return reserved_word(str, len);
16362 }
16363 
16364 static struct parser_params *
16366 {
16367  struct parser_params *p;
16368 
16369  p = ALLOC_N(struct parser_params, 1);
16370  MEMZERO(p, struct parser_params, 1);
16371  parser_initialize(p);
16372  return p;
16373 }
16374 
16375 VALUE
16377 {
16378  struct parser_params *p = parser_new();
16379 
16380  return TypedData_Wrap_Struct(0, &parser_data_type, p);
16381 }
16382 
16383 /*
16384  * call-seq:
16385  * ripper#end_seen? -> Boolean
16386  *
16387  * Return true if parsed source ended by +\_\_END\_\_+.
16388  */
16389 VALUE
16391 {
16392  struct parser_params *parser;
16393 
16394  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16395  return ruby__end__seen ? Qtrue : Qfalse;
16396 }
16397 
16398 /*
16399  * call-seq:
16400  * ripper#encoding -> encoding
16401  *
16402  * Return encoding of the source.
16403  */
16404 VALUE
16406 {
16407  struct parser_params *parser;
16408 
16409  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16411 }
16412 
16413 /*
16414  * call-seq:
16415  * ripper.yydebug -> true or false
16416  *
16417  * Get yydebug.
16418  */
16419 VALUE
16421 {
16422  struct parser_params *parser;
16423 
16424  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16425  return yydebug ? Qtrue : Qfalse;
16426 }
16427 
16428 /*
16429  * call-seq:
16430  * ripper.yydebug = flag
16431  *
16432  * Set yydebug.
16433  */
16434 VALUE
16436 {
16437  struct parser_params *parser;
16438 
16439  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16440  yydebug = RTEST(flag);
16441  return flag;
16442 }
16443 
16444 #ifdef YYMALLOC
16445 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
16446 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
16447 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
16448  (n)->u3.cnt = (c), (p))
16449 
16450 void *
16451 rb_parser_malloc(struct parser_params *parser, size_t size)
16452 {
16453  size_t cnt = HEAPCNT(1, size);
16454  NODE *n = NEWHEAP();
16455  void *ptr = xmalloc(size);
16456 
16457  return ADD2HEAP(n, cnt, ptr);
16458 }
16459 
16460 void *
16461 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
16462 {
16463  size_t cnt = HEAPCNT(nelem, size);
16464  NODE *n = NEWHEAP();
16465  void *ptr = xcalloc(nelem, size);
16466 
16467  return ADD2HEAP(n, cnt, ptr);
16468 }
16469 
16470 void *
16471 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
16472 {
16473  NODE *n;
16474  size_t cnt = HEAPCNT(1, size);
16475 
16476  if (ptr && (n = parser->heap) != NULL) {
16477  do {
16478  if (n->u1.node == ptr) {
16479  n->u1.node = ptr = xrealloc(ptr, size);
16480  if (n->u3.cnt) n->u3.cnt = cnt;
16481  return ptr;
16482  }
16483  } while ((n = n->u2.node) != NULL);
16484  }
16485  n = NEWHEAP();
16486  ptr = xrealloc(ptr, size);
16487  return ADD2HEAP(n, cnt, ptr);
16488 }
16489 
16490 void
16491 rb_parser_free(struct parser_params *parser, void *ptr)
16492 {
16493  NODE **prev = &parser->heap, *n;
16494 
16495  while ((n = *prev) != NULL) {
16496  if (n->u1.node == ptr) {
16497  *prev = n->u2.node;
16499  break;
16500  }
16501  prev = &n->u2.node;
16502  }
16503  xfree(ptr);
16504 }
16505 #endif
16506 #endif
16507 
16508 #ifdef RIPPER
16509 #ifdef RIPPER_DEBUG
16510 extern int rb_is_pointer_to_heap(VALUE);
16511 
16512 /* :nodoc: */
16513 static VALUE
16514 ripper_validate_object(VALUE self, VALUE x)
16515 {
16516  if (x == Qfalse) return x;
16517  if (x == Qtrue) return x;
16518  if (x == Qnil) return x;
16519  if (x == Qundef)
16520  rb_raise(rb_eArgError, "Qundef given");
16521  if (FIXNUM_P(x)) return x;
16522  if (SYMBOL_P(x)) return x;
16523  if (!rb_is_pointer_to_heap(x))
16524  rb_raise(rb_eArgError, "invalid pointer: %p", x);
16525  switch (TYPE(x)) {
16526  case T_STRING:
16527  case T_OBJECT:
16528  case T_ARRAY:
16529  case T_BIGNUM:
16530  case T_FLOAT:
16531  return x;
16532  case T_NODE:
16533  if (nd_type(x) != NODE_LASGN) {
16534  rb_raise(rb_eArgError, "NODE given: %p", x);
16535  }
16536  return ((NODE *)x)->nd_rval;
16537  default:
16538  rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
16539  x, rb_obj_classname(x));
16540  }
16541  return x;
16542 }
16543 #endif
16544 
16545 #define validate(x) ((x) = get_value(x))
16546 
16547 static VALUE
16548 ripper_dispatch0(struct parser_params *parser, ID mid)
16549 {
16550  return rb_funcall(parser->value, mid, 0);
16551 }
16552 
16553 static VALUE
16554 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
16555 {
16556  validate(a);
16557  return rb_funcall(parser->value, mid, 1, a);
16558 }
16559 
16560 static VALUE
16561 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
16562 {
16563  validate(a);
16564  validate(b);
16565  return rb_funcall(parser->value, mid, 2, a, b);
16566 }
16567 
16568 static VALUE
16569 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
16570 {
16571  validate(a);
16572  validate(b);
16573  validate(c);
16574  return rb_funcall(parser->value, mid, 3, a, b, c);
16575 }
16576 
16577 static VALUE
16578 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
16579 {
16580  validate(a);
16581  validate(b);
16582  validate(c);
16583  validate(d);
16584  return rb_funcall(parser->value, mid, 4, a, b, c, d);
16585 }
16586 
16587 static VALUE
16588 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
16589 {
16590  validate(a);
16591  validate(b);
16592  validate(c);
16593  validate(d);
16594  validate(e);
16595  return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
16596 }
16597 
16598 static VALUE
16599 ripper_dispatch7(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e, VALUE f, VALUE g)
16600 {
16601  validate(a);
16602  validate(b);
16603  validate(c);
16604  validate(d);
16605  validate(e);
16606  validate(f);
16607  validate(g);
16608  return rb_funcall(parser->value, mid, 7, a, b, c, d, e, f, g);
16609 }
16610 
16611 static const struct kw_assoc {
16612  ID id;
16613  const char *name;
16614 } keyword_to_name[] = {
16615  {keyword_class, "class"},
16616  {keyword_module, "module"},
16617  {keyword_def, "def"},
16618  {keyword_undef, "undef"},
16619  {keyword_begin, "begin"},
16620  {keyword_rescue, "rescue"},
16621  {keyword_ensure, "ensure"},
16622  {keyword_end, "end"},
16623  {keyword_if, "if"},
16624  {keyword_unless, "unless"},
16625  {keyword_then, "then"},
16626  {keyword_elsif, "elsif"},
16627  {keyword_else, "else"},
16628  {keyword_case, "case"},
16629  {keyword_when, "when"},
16630  {keyword_while, "while"},
16631  {keyword_until, "until"},
16632  {keyword_for, "for"},
16633  {keyword_break, "break"},
16634  {keyword_next, "next"},
16635  {keyword_redo, "redo"},
16636  {keyword_retry, "retry"},
16637  {keyword_in, "in"},
16638  {keyword_do, "do"},
16639  {keyword_do_cond, "do"},
16640  {keyword_do_block, "do"},
16641  {keyword_return, "return"},
16642  {keyword_yield, "yield"},
16643  {keyword_super, "super"},
16644  {keyword_self, "self"},
16645  {keyword_nil, "nil"},
16646  {keyword_true, "true"},
16647  {keyword_false, "false"},
16648  {keyword_and, "and"},
16649  {keyword_or, "or"},
16650  {keyword_not, "not"},
16651  {modifier_if, "if"},
16652  {modifier_unless, "unless"},
16653  {modifier_while, "while"},
16654  {modifier_until, "until"},
16655  {modifier_rescue, "rescue"},
16656  {keyword_alias, "alias"},
16657  {keyword_defined, "defined?"},
16658  {keyword_BEGIN, "BEGIN"},
16659  {keyword_END, "END"},
16660  {keyword__LINE__, "__LINE__"},
16661  {keyword__FILE__, "__FILE__"},
16662  {keyword__ENCODING__, "__ENCODING__"},
16663  {0, NULL}
16664 };
16665 
16666 static const char*
16667 keyword_id_to_str(ID id)
16668 {
16669  const struct kw_assoc *a;
16670 
16671  for (a = keyword_to_name; a->id; a++) {
16672  if (a->id == id)
16673  return a->name;
16674  }
16675  return NULL;
16676 }
16677 
16678 #undef ripper_id2sym
16679 static VALUE
16680 ripper_id2sym(ID id)
16681 {
16682  const char *name;
16683  char buf[8];
16684 
16685  if (id <= 256) {
16686  buf[0] = (char)id;
16687  buf[1] = '\0';
16688  return ID2SYM(rb_intern2(buf, 1));
16689  }
16690  if ((name = keyword_id_to_str(id))) {
16691  return ID2SYM(rb_intern(name));
16692  }
16693  switch (id) {
16694  case tOROP:
16695  name = "||";
16696  break;
16697  case tANDOP:
16698  name = "&&";
16699  break;
16700  default:
16701  name = rb_id2name(id);
16702  if (!name) {
16703  rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
16704  }
16705  return ID2SYM(id);
16706  }
16707  return ID2SYM(rb_intern(name));
16708 }
16709 
16710 static ID
16711 ripper_get_id(VALUE v)
16712 {
16713  NODE *nd;
16714  if (!RB_TYPE_P(v, T_NODE)) return 0;
16715  nd = (NODE *)v;
16716  if (nd_type(nd) != NODE_LASGN) return 0;
16717  return nd->nd_vid;
16718 }
16719 
16720 static VALUE
16721 ripper_get_value(VALUE v)
16722 {
16723  NODE *nd;
16724  if (v == Qundef) return Qnil;
16725  if (!RB_TYPE_P(v, T_NODE)) return v;
16726  nd = (NODE *)v;
16727  if (nd_type(nd) != NODE_LASGN) return Qnil;
16728  return nd->nd_rval;
16729 }
16730 
16731 static void
16732 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
16733 {
16734  VALUE str;
16735  va_list args;
16736 
16737  va_start(args, fmt);
16738  str = rb_vsprintf(fmt, args);
16739  va_end(args);
16740  rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
16741 }
16742 
16743 static void
16744 ripper_warn0(struct parser_params *parser, const char *fmt)
16745 {
16746  rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
16747 }
16748 
16749 static void
16750 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
16751 {
16752  rb_funcall(parser->value, rb_intern("warn"), 2,
16753  STR_NEW2(fmt), INT2NUM(a));
16754 }
16755 
16756 static void
16757 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
16758 {
16759  rb_funcall(parser->value, rb_intern("warn"), 2,
16760  STR_NEW2(fmt), STR_NEW2(str));
16761 }
16762 
16763 static void
16764 ripper_warning0(struct parser_params *parser, const char *fmt)
16765 {
16766  rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
16767 }
16768 
16769 static void
16770 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
16771 {
16772  rb_funcall(parser->value, rb_intern("warning"), 2,
16773  STR_NEW2(fmt), STR_NEW2(str));
16774 }
16775 
16776 static VALUE
16777 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
16778 {
16779  return rb_io_gets(src);
16780 }
16781 
16782 static VALUE
16783 ripper_s_allocate(VALUE klass)
16784 {
16785  struct parser_params *p;
16786  VALUE self;
16787 
16788  p = ALLOC_N(struct parser_params, 1);
16789  MEMZERO(p, struct parser_params, 1);
16790  self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
16791  p->value = self;
16792  return self;
16793 }
16794 
16795 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
16796 
16797 /*
16798  * call-seq:
16799  * Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
16800  *
16801  * Create a new Ripper object.
16802  * _src_ must be a String, an IO, or an Object which has #gets method.
16803  *
16804  * This method does not starts parsing.
16805  * See also Ripper#parse and Ripper.parse.
16806  */
16807 static VALUE
16808 ripper_initialize(int argc, VALUE *argv, VALUE self)
16809 {
16810  struct parser_params *parser;
16811  VALUE src, fname, lineno;
16812 
16813  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16814  rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
16815  if (RB_TYPE_P(src, T_FILE)) {
16816  parser->parser_lex_gets = ripper_lex_get_generic;
16817  }
16818  else {
16819  StringValue(src);
16820  parser->parser_lex_gets = lex_get_str;
16821  }
16822  parser->parser_lex_input = src;
16823  parser->eofp = Qfalse;
16824  if (NIL_P(fname)) {
16825  fname = STR_NEW2("(ripper)");
16826  }
16827  else {
16828  StringValue(fname);
16829  }
16830  parser_initialize(parser);
16831 
16832  parser->parser_ruby_sourcefile_string = fname;
16833  parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
16834  parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
16835 
16836  return Qnil;
16837 }
16838 
16839 struct ripper_args {
16840  struct parser_params *parser;
16841  int argc;
16842  VALUE *argv;
16843 };
16844 
16845 static VALUE
16846 ripper_parse0(VALUE parser_v)
16847 {
16848  struct parser_params *parser;
16849 
16850  TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16851  parser_prepare(parser);
16852  ripper_yyparse((void*)parser);
16853  return parser->result;
16854 }
16855 
16856 static VALUE
16857 ripper_ensure(VALUE parser_v)
16858 {
16859  struct parser_params *parser;
16860 
16861  TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16862  parser->parsing_thread = Qnil;
16863  return Qnil;
16864 }
16865 
16866 /*
16867  * call-seq:
16868  * ripper#parse
16869  *
16870  * Start parsing and returns the value of the root action.
16871  */
16872 static VALUE
16873 ripper_parse(VALUE self)
16874 {
16875  struct parser_params *parser;
16876 
16877  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16878  if (!ripper_initialized_p(parser)) {
16879  rb_raise(rb_eArgError, "method called for uninitialized object");
16880  }
16881  if (!NIL_P(parser->parsing_thread)) {
16882  if (parser->parsing_thread == rb_thread_current())
16883  rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
16884  else
16885  rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
16886  }
16887  parser->parsing_thread = rb_thread_current();
16888  rb_ensure(ripper_parse0, self, ripper_ensure, self);
16889 
16890  return parser->result;
16891 }
16892 
16893 /*
16894  * call-seq:
16895  * ripper#column -> Integer
16896  *
16897  * Return column number of current parsing line.
16898  * This number starts from 0.
16899  */
16900 static VALUE
16901 ripper_column(VALUE self)
16902 {
16903  struct parser_params *parser;
16904  long col;
16905 
16906  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16907  if (!ripper_initialized_p(parser)) {
16908  rb_raise(rb_eArgError, "method called for uninitialized object");
16909  }
16910  if (NIL_P(parser->parsing_thread)) return Qnil;
16911  col = parser->tokp - parser->parser_lex_pbeg;
16912  return LONG2NUM(col);
16913 }
16914 
16915 /*
16916  * call-seq:
16917  * ripper#filename -> String
16918  *
16919  * Return current parsing filename.
16920  */
16921 static VALUE
16922 ripper_filename(VALUE self)
16923 {
16924  struct parser_params *parser;
16925 
16926  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16927  if (!ripper_initialized_p(parser)) {
16928  rb_raise(rb_eArgError, "method called for uninitialized object");
16929  }
16930  return parser->parser_ruby_sourcefile_string;
16931 }
16932 
16933 /*
16934  * call-seq:
16935  * ripper#lineno -> Integer
16936  *
16937  * Return line number of current parsing line.
16938  * This number starts from 1.
16939  */
16940 static VALUE
16941 ripper_lineno(VALUE self)
16942 {
16943  struct parser_params *parser;
16944 
16945  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16946  if (!ripper_initialized_p(parser)) {
16947  rb_raise(rb_eArgError, "method called for uninitialized object");
16948  }
16949  if (NIL_P(parser->parsing_thread)) return Qnil;
16950  return INT2NUM(parser->parser_ruby_sourceline);
16951 }
16952 
16953 #ifdef RIPPER_DEBUG
16954 /* :nodoc: */
16955 static VALUE
16956 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
16957 {
16958  StringValue(msg);
16959  if (obj == Qundef) {
16960  rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg));
16961  }
16962  return Qnil;
16963 }
16964 
16965 /* :nodoc: */
16966 static VALUE
16967 ripper_value(VALUE self, VALUE obj)
16968 {
16969  return ULONG2NUM(obj);
16970 }
16971 #endif
16972 
16973 
16974 void
16975 Init_ripper(void)
16976 {
16977  parser_data_type.parent = RTYPEDDATA_TYPE(rb_parser_new());
16978 
16981  /* ensure existing in symbol table */
16982  (void)rb_intern("||");
16983  (void)rb_intern("&&");
16984 
16985  InitVM(ripper);
16986 }
16987 
16988 void
16989 InitVM_ripper(void)
16990 {
16991  VALUE Ripper;
16992 
16993  Ripper = rb_define_class("Ripper", rb_cObject);
16994  rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
16995  rb_define_alloc_func(Ripper, ripper_s_allocate);
16996  rb_define_method(Ripper, "initialize", ripper_initialize, -1);
16997  rb_define_method(Ripper, "parse", ripper_parse, 0);
16998  rb_define_method(Ripper, "column", ripper_column, 0);
16999  rb_define_method(Ripper, "filename", ripper_filename, 0);
17000  rb_define_method(Ripper, "lineno", ripper_lineno, 0);
17001  rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
17002  rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
17003  rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
17004  rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
17005 #ifdef RIPPER_DEBUG
17006  rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
17007  rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
17008  rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
17009 #endif
17010 
17013 
17014 # if 0
17015  /* Hack to let RDoc document SCRIPT_LINES__ */
17016 
17017  /*
17018  * When a Hash is assigned to +SCRIPT_LINES__+ the contents of files loaded
17019  * after the assignment will be added as an Array of lines with the file
17020  * name as the key.
17021  */
17022  rb_define_global_const("SCRIPT_LINES__", Qnil);
17023 #endif
17024 
17025 }
17026 #endif /* RIPPER */
17027 
VALUE data
Definition: tcltklib.c:3368
#define toklast()
Definition: parse.c:11193
#define rb_enc_islower(c, enc)
#define tokadd_mbchar(c)
Definition: parse.c:11553
char * parser_ruby_sourcefile
Definition: ripper.c:560
#define RB_TYPE_P(obj, type)
#define keyword_when
Definition: ripper.c:200
VALUE val
Definition: parse.h:278
#define YYLAST
Definition: parse.c:1232
#define deferred_nodes
Definition: ripper.c:628
#define nd_next
#define nd_type(n)
#define NEW_ARGSCAT(a, b)
#define evstr2dstr(n)
Definition: parse.c:690
RARRAY_PTR(q->result)[0]
#define NODE_DREGX_ONCE
VALUE rb_const_get_at(VALUE, ID)
Definition: variable.c:1877
#define yyparse
Definition: ripper.c:648
static NODE * call_bin_op_gen(struct parser_params *, NODE *, ID, NODE *)
Definition: parse.c:13985
#define ALLOC(type)
volatile VALUE tmp
Definition: tcltklib.c:10209
#define NEW_FALSE()
enum lex_state_e state
Definition: lex.c:33
struct local_vars * parser_lvtbl
Definition: ripper.c:556
#define NODE_IF
static YYSIZE_T yytnamerr(char *yyres, const char *yystr)
Definition: parse.c:4784
VALUE rb_ary_unshift(VALUE ary, VALUE item)
Definition: array.c:1084
static ID ripper_token2eventid(int tok)
Definition: eventids2.c:273
static ID internal_id_gen(struct parser_params *)
Definition: parse.c:15594
#define NODE_RESCUE
Definition: lex.c:33
#define tokenbuf
Definition: parse.c:616
int rb_is_attrset_id(ID id)
Definition: ripper.c:16133
int rb_enc_codelen(int c, rb_encoding *enc)
Definition: encoding.c:952
#define NODE_RETRY
#define NODE_DEFN
static double zero(void)
Definition: isinf.c:51
#define lex_state
Definition: ripper.c:604
ssize_t n
Definition: bigdecimal.c:5655
#define shadowing_lvar(name)
Definition: parse.c:779
YYSTYPE yyvs
Definition: ripper.c:1181
#define tLBRACE
Definition: ripper.c:276
VALUE sym
Definition: tkutil.c:1299
static void arg_ambiguous_gen(struct parser_params *parser)
Definition: parse.c:12060
volatile VALUE ary
Definition: tcltklib.c:9713
#define NODE_FALSE
#define NEW_DOT3(b, e)
#define nextc()
Definition: parse.c:10585
static long parser_encode_length(struct parser_params *parser, const char *name, long len)
Definition: parse.c:12089
#define FLONUM_P(x)
VP_EXPORT int
Definition: bigdecimal.c:5050
#define NODE_OR
#define RE_OPTION_ENCODING_IDX(o)
Definition: parse.c:815
int onig_foreach_name(regex_t *reg, int(*func)(const UChar *, const UChar *, int, int *, regex_t *, void *), void *arg)
Definition: regparse.c:537
st_table * st_init_table_with_size(const struct st_hash_type *, st_index_t)
Definition: st.c:229
#define NEW_IASGN(v, val)
VALUE rb_get_coverages(void)
Definition: thread.c:5155
#define lex_strterm
Definition: parse.c:603
#define NEW_NTH_REF(n)
void rb_bug(const char *fmt,...)
Definition: error.c:290
#define NEW_DASGN_CURR(v, val)
int num
Definition: parse.h:281
#define mixed_escape(beg, enc1, enc2)
static const yytype_uint8 yyr2[]
Definition: parse.c:1782
struct token_info * next
Definition: ripper.c:508
static NODE * attrset_gen(struct parser_params *, NODE *, ID)
Definition: parse.c:14266
void rb_enc_copy(VALUE obj1, VALUE obj2)
Definition: encoding.c:854
#define FALSE
Definition: nkf.h:174
#define modifier_if
Definition: ripper.c:223
#define CMDARG_P()
Definition: parse.c:413
#define tail
Definition: st.c:108
void rb_mark_tbl(struct st_table *)
Definition: gc.c:2541
#define heredoc_end
Definition: parse.c:626
int rb_is_class_name(VALUE name)
Definition: ripper.c:16243
struct vtable * used
Definition: ripper.c:425
#define tHEREDOC_BEG
Definition: eventids2.c:7
NODE * rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
Definition: ripper.c:11132
#define pushback(c)
Definition: parse.c:10586
#define keyword_unless
Definition: ripper.c:195
#define rb_gc_mark_locations(start, end)
Definition: gc.c:2346
size_t strlen(const char *)
yytype_int16 yyssa[YYINITDEPTH]
Definition: ripper.c:5046
VALUE parser_lex_nextline
Definition: ripper.c:547
VALUE rb_make_exception(int argc, VALUE *argv)
Definition: eval.c:642
#define is_const_id(id)
Definition: parse.c:349
#define scan_oct(s, l, e)
Definition: util.h:52
#define compile_error
Definition: parse.c:951
static NODE * negate_lit(NODE *)
Definition: parse.c:14848
VALUE stack_type
Definition: ripper.c:398
#define toklen()
Definition: parse.c:11192
#define new_yield(node)
Definition: parse.c:708
const char * rb_obj_classname(VALUE)
Definition: variable.c:391
#define dispatch_heredoc_end()
Definition: parse.c:11953
static NODE * node_assign_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:14338
VALUE rb_id2str(ID id)
Definition: ripper.c:16007
Win32OLEIDispatch * p
Definition: win32ole.c:786
#define YY_(msgid)
Definition: ripper.c:1074
int parser_ruby__end__seen
Definition: ripper.c:557
static void local_push_gen(struct parser_params *, int)
Definition: parse.c:15061
static int vtable_size(const struct vtable *tbl)
Definition: parse.c:435
#define formal_argument(id)
Definition: parse.c:777
#define NODE_DSYM
int parser_command_start
Definition: ripper.c:552
static void fixpos(NODE *, NODE *)
Definition: ripper.c:13811
#define NODE_DEFS
static NODE * arg_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:14287
#define YYSTACK_FREE
Definition: ripper.c:1143
#define is_notop_id(id)
Definition: parse.c:344
#define NEW_CALL(r, m, a)
YYSIZE_T yystacksize
Definition: ripper.c:5059
int st_lookup(st_table *, st_data_t, st_data_t *)
void st_add_direct(st_table *, st_data_t, st_data_t)
Definition: st.c:624
#define tokfix()
Definition: parse.c:11190
static NODE * evstr2dstr_gen(struct parser_params *, NODE *)
Definition: parse.c:13962
#define nd_body
#define local_pop()
Definition: parse.c:786
VALUE rb_str_buf_append(VALUE, VALUE)
Definition: string.c:2098
static int nodeline(NODE *node)
Definition: parse.c:13727
#define NODE_HASH
static int token_info_has_nonspaces(struct parser_params *parser, const char *token)
Definition: parse.c:10717
#define keyword_do_LAMBDA
Definition: ripper.c:212
#define local_var(id)
Definition: parse.c:788
#define NODE_DOT3
static NODE * arg_blk_pass(NODE *, NODE *)
Definition: parse.c:14876
#define IS_LABEL_POSSIBLE()
Definition: parse.c:12399
#define is_asgn_or_id(id)
Definition: parse.c:354
const char * name
Definition: lex.c:33
#define tEMBDOC_BEG
Definition: eventids2.c:3
static void reg_fragment_setenc_gen(struct parser_params *, VALUE, int)
Definition: parse.c:15254
#define POINTER_P(val)
Definition: parse.c:432
int parser_compile_for_eval
Definition: ripper.c:538
int parser_token_info_enabled
Definition: ripper.c:574
#define parser_precise_mbclen()
Definition: parse.c:10695
#define NEW_ALIAS(n, o)
static ID formal_argument_gen(struct parser_params *, ID)
Definition: parse.c:12071
static int parser_read_escape(struct parser_params *parser, int flags, rb_encoding **encp)
Definition: parse.c:11326
#define NEW_OP_CDECL(v, op, val)
static YYSIZE_T yysyntax_error(char *yyresult, int yystate, int yychar)
Definition: parse.c:4831
#define internal_id()
Definition: parse.c:794
int parser_brace_nest
Definition: ripper.c:537
static VALUE reg_compile_gen(struct parser_params *, VALUE, int)
Definition: parse.c:15388
#define keyword_yield
Definition: ripper.c:214
static ID register_symid(ID, const char *, long, rb_encoding *)
Definition: parse.c:15752
#define lex_nextline
Definition: parse.c:622
static void FILE * yyoutput
Definition: parse.c:4575
SSL_METHOD *(* func)(void)
Definition: ossl_ssl.c:108
#define rb_usascii_str_new2
#define NEW_TRUE()
#define RE_OPTION_ENCODING(e)
Definition: parse.c:814
static ID * vtable_tblcpy(ID *buf, const struct vtable *src)
Definition: parse.c:15091
#define nd_resq
#define NODE_NTH_REF
void rb_define_global_const(const char *, VALUE)
Definition: variable.c:2211
#define DVARS_TOPSCOPE
Definition: parse.c:430
#define set_yylval_str(x)
Definition: parse.c:10603
void rb_gc_force_recycle(VALUE)
Definition: gc.c:2961
ssize_t i
Definition: bigdecimal.c:5655
static const yytype_uint16 yyr1[]
Definition: parse.c:1715
#define tEQ
Definition: ripper.c:253
#define NODE_TRUE
#define gettable(id)
Definition: parse.c:713
#define set_yylval_literal(x)
Definition: parse.c:10607
#define tLOWEST
Definition: ripper.c:295
#define T_NODE
#define ADD2HEAP(n, c, p)
Definition: parse.c:16447
#define keyword__ENCODING__
Definition: ripper.c:234
#define rb_enc_name(enc)
VALUE rb_parser_end_seen_p(VALUE vparser)
Definition: ripper.c:16458
#define literal_concat(h, t)
Definition: parse.c:685
static void block_dup_check_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:14250
int line_count
Definition: ripper.c:558
#define NEW_EVSTR(n)
#define NODE_ARGS
#define NEW_NEXT(s)
struct token_info token_info
#define tRPAREN
Definition: ripper.c:274
stack_type parser_cmdarg_stack
Definition: ripper.c:531
#define keyword_return
Definition: ripper.c:213
#define RFLOAT_VALUE(v)
int yyresult
Definition: ripper.c:5025
yytype_int16 * yyssp
Definition: ripper.c:5048
#define strcasecmp
Definition: win32.h:200
#define STR_NEW2(p)
Definition: parse.c:593
static int lvar_defined_gen(struct parser_params *, ID)
Definition: parse.c:12082
#define tokspace(n)
Definition: parse.c:10588
VALUE rb_enc_from_encoding(rb_encoding *encoding)
Definition: encoding.c:103
#define NEW_NIL()
#define token_info_push(token)
Definition: ripper.c:967
#define tAMPER
Definition: ripper.c:280
Real * a
Definition: bigdecimal.c:1182
union YYSTYPE YYSTYPE
static ID * local_tbl_gen(struct parser_params *)
Definition: parse.c:15106
#define NODE_ENSURE
VALUE rb_eTypeError
Definition: error.c:511
#define rb_enc_isalnum(c, enc)
#define rb_warnI(fmt, a)
Definition: parse.c:925
#define OBJ_FREEZE(x)
NODE * node
Definition: parse.h:279
void rb_define_alloc_func(VALUE, rb_alloc_func_t)
#define PARSER_ARG
Definition: parse.c:952
long(* rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len)
Definition: ripper.c:12221
#define NEW_ZARRAY()
st_table * names
Definition: encoding.c:53
#define rb_enc_prev_char(s, p, e, enc)
VALUE enc
Definition: tcltklib.c:10311
#define lvar_defined(id)
Definition: parse.c:810
VALUE rb_ary_push(VALUE ary, VALUE item)
Definition: array.c:822
NODE * kw_args
Definition: ripper.y:517
#define current_enc
Definition: parse.c:635
#define lex_pbeg
Definition: parse.c:623
unsigned long int yylno
Definition: ripper.c:4671
#define MAX_WORD_LENGTH
Definition: lex.c:43
VALUE rb_eEncodingError
Definition: error.c:517
#define keyword_do_block
Definition: ripper.c:211
#define subnodes(n1, n2)
return yyd
Definition: ripper.c:4770
#define yydebug
Definition: parse.c:636
#define TYPE(x)
struct RBasic basic
Definition: ripper.y:843
#define YYSTACK_BYTES(N)
Definition: parse.c:1189
#define nd_term(node)
Definition: parse.c:827
unsigned short int yytype_uint16
Definition: ripper.c:1041
static int parser_yylex(struct parser_params *parser)
Definition: parse.c:12416
#define nd_else
rb_encoding * rb_enc_compatible(VALUE str1, VALUE str2)
Definition: encoding.c:787
#define new_args_tail(k, kr, b)
Definition: parse.c:701
#define CMDARG_LEXPOP()
Definition: parse.c:412
#define NODE_PRELUDE
#define RSTRING_PTR(str)
static NODE * new_evstr_gen(struct parser_params *, NODE *)
Definition: parse.c:13971
#define NEW_MATCH2(n1, n2)
VALUE op_sym[tLAST_OP_ID]
Definition: ripper.c:15598
VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline)
Definition: re.c:2530
NIL_P(eventloop_thread)
Definition: tcltklib.c:4068
#define T_ARRAY
VALUE debug_lines
Definition: ripper.c:570
static int parser_regx_options(struct parser_params *)
Definition: parse.c:11497
#define tEQQ
Definition: ripper.c:254
VALUE rb_enc_str_new(const char *, long, rb_encoding *)
Definition: string.c:439
#define warn_balanced(op, syn)
Definition: ripper.c:12478
#define NEW_LAMBDA(a, b)
ID id
Definition: parse.h:280
#define nd_plen
#define NEW_POSTEXE(b)
#define NEW_STR(s)
VALUE var
Definition: tcltklib.c:5517
#define NODE_EVSTR
#define xfree
static void set_file_encoding(struct parser_params *parser, const char *str, const char *send)
Definition: parse.c:12328
static NODE * newline_node(NODE *)
Definition: parse.c:13733
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
Definition: vm_eval.c:774
#define tSYMBOLS_BEG
Definition: ripper.c:288
#define NODE_DXSTR
static void ripper_init_eventids1_table(VALUE self)
Definition: eventids1.c:270
#define NODE_CASE
void rb_raise(VALUE exc, const char *fmt,...)
Definition: error.c:1780
#define RE_OPTION_ONCE
Definition: parse.c:812
#define T_HASH
static const yytype_uint16 yyprhs[]
Definition: parse.c:1294
return Qtrue
Definition: tcltklib.c:9610
#define block_dup_check(n1, n2)
Definition: parse.c:672
VALUE rb_enc_associate(VALUE obj, rb_encoding *enc)
Definition: encoding.c:764
static void warn_unused_var(struct parser_params *parser, struct local_vars *local)
Definition: parse.c:15041
#define YY_SYMBOL_PRINT(Title, Type, Value, Location)
Definition: ripper.c:4551
#define keyword__FILE__
Definition: ripper.c:233
ID * tbl
Definition: ripper.c:416
union RString::@63 as
void rb_compile_warn(const char *file, int line, const char *fmt,...)
Definition: error.c:172
#define attrset(node, id)
Definition: parse.c:720
#define YYPOPSTACK(N)
Definition: ripper.c:5057
#define T_FILE
int pre_args_num
Definition: ripper.y:509
#define new_const_op_assign(lhs, op, rhs)
Definition: parse.c:731
#define tASSOC
Definition: ripper.c:271
#define NEW_CONST(v)
int parser_toksiz
Definition: ripper.c:543
#define tSTRING_DVAR
Definition: ripper.c:292
int rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc)
Definition: encoding.c:884
#define tLAST_TOKEN
Definition: ripper.c:297
#define keyword_nil
Definition: ripper.c:217
NODE * kw_rest_arg
Definition: ripper.y:518
#define keyword_END
Definition: ripper.c:231
#define NODE_STR
ID last_id
Definition: ripper.c:15591
static size_t parser_memsize(const void *ptr)
Definition: parse.c:16322
#define RFLOAT(obj)
#define NODE_REDO
#define NODE_NEXT
static NODE * new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
Definition: parse.c:14961
#define keyword_class
Definition: ripper.c:186
#define NEW_DVAR(v)
void(* rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val)
Definition: ripper.c:12222
static struct @118 op_tbl[]
#define keyword_next
Definition: ripper.c:205
#define lex_pend
Definition: parse.c:625
static NODE * gettable_gen(struct parser_params *, ID)
Definition: parse.c:14034
r
Definition: bigdecimal.c:1196
#define nd_paren(node)
Definition: parse.c:829
#define cmdarg_stack
Definition: parse.c:606
static struct symbols global_symbols
#define is_class_id(id)
Definition: parse.c:350
#define ID_LOCAL
#define ruby_sourcefile
Definition: compile.c:424
Definition: ripper.y:82
#define NODE_XSTR
static NODE * cond0(struct parser_params *, NODE *)
Definition: parse.c:14736
#define tLPAREN_ARG
Definition: ripper.c:273
#define tMATCH
Definition: ripper.c:260
#define STR_NEW0()
Definition: parse.c:592
#define NEW_CVASGN(v, val)
#define NODE_BLOCK_PASS
#define numberof(array)
Definition: parse.c:326
#define reg_compile(str, options)
Definition: parse.c:742
int state
Definition: tcltklib.c:1462
#define ISDIGIT(c)
static int local_var_gen(struct parser_params *, ID)
Definition: parse.c:15128
#define str_copy(_s, _p, _n)
#define NEW_BREAK(s)
unsigned int last
Definition: nkf.c:4310
#define NEW_OP_ASGN_OR(i, val)
static NODE * match_op_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:14000
#define NEW_MASGN(l, r)
ID block_arg
Definition: ripper.y:515
#define ENCODING_IS_ASCII8BIT(obj)
static VALUE parse(int argc, VALUE *argv, VALUE self)
Definition: psych_parser.c:229
#define InitVM(ext)
ID rb_check_id(volatile VALUE *namep)
Returns ID for the given name if it is interned already, or 0.
Definition: ripper.c:16162
int yystate
Definition: ripper.c:5023
ID rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc)
Definition: ripper.c:16209
struct RNode * node
Definition: ripper.y:244
#define tLAMBEG
Definition: ripper.c:294
rb_encoding * rb_utf8_encoding(void)
Definition: encoding.c:1166
#define ID2SYM(x)
VALUE parser_lex_input
Definition: ripper.c:545
#define T_FLOAT
static int dvar_defined_gen(struct parser_params *, ID, int)
Definition: parse.c:15215
VALUE tbl
Definition: tkutil.c:1280
static NODE * new_yield_gen(struct parser_params *, NODE *)
Definition: parse.c:14840
#define RE_OPTION_ENCODING_NONE(o)
Definition: parse.c:816
#define NEW_LVAR(v)
static void yytype_int16 * bottom
Definition: parse.c:4636
#define YYNTOKENS
Definition: parse.c:1235
VALUE VALUE args
Definition: tcltklib.c:2561
static char * parser_tokspace(struct parser_params *parser, int n)
Definition: parse.c:11212
VALUE klass
Definition: ripper.y:701
#define rb_enc_isdigit(c, enc)
#define tokadd_string(f, t, p, n, e)
Definition: parse.c:10594
#define T_OBJECT
#define paren_nest
Definition: parse.c:608
#define ENC_CODERANGE_BROKEN
VALUE rb_sym_all_symbols(void)
Definition: ripper.c:16100
#define tSTRING_CONTENT
Definition: ripper.c:244
#define is_identchar(p, e, enc)
Definition: parse.c:10696
#define ID_INTERNAL
#define LONG2NUM(x)
VALUE rb_str_append(VALUE, VALUE)
Definition: string.c:2114
#define RUBY_DTRACE_PARSE_BEGIN(arg0, arg1)
Definition: probes.h:68
int pos
Definition: ripper.c:417
#define NEW_FOR(v, i, b)
static void parser_heredoc_restore(struct parser_params *parser, NODE *here)
Definition: parse.c:11910
#define tBACK_REF
Definition: ripper.c:247
#define NEW_CLASS(n, b, s)
static NODE * remove_begin(NODE *)
Definition: parse.c:14534
static int is_global_name_punct(const char c)
Definition: parse.c:11746
#define YYID(n)
Definition: ripper.c:1087
static struct st_hash_type symhash
Definition: parse.c:15533
#define NODE_GASGN
int rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
Definition: ripper.c:15804
#define NEW_SPLAT(a)
#define ID_SCOPE_SHIFT
flag
Definition: tcltklib.c:2048
VALUE rb_parser_set_yydebug(VALUE self, VALUE flag)
Definition: ripper.c:16503
#define NEW_PRELUDE(p, b)
d
Definition: strlcat.c:58
#define lex_lastline
Definition: parse.c:621
gz lineno
Definition: zlib.c:2268
#define NEW_ITER(a, b)
#define head
Definition: st.c:107
#define tok_hex(numlen)
Definition: parse.c:10590
const char * fmt
Definition: tcltklib.c:841
#define ENCODING_GET(obj)
int parser_yydebug
Definition: ripper.c:564
#define keyword_begin
Definition: ripper.c:190
st_table * id_str
Definition: ripper.c:15593
static const yytype_int16 yytable[]
Definition: parse.c:2129
NODE * parser_eval_tree
Definition: ripper.c:569
NODE * parser_deferred_nodes
Definition: ripper.c:553
#define NEW_GVAR(v)
int yyi
Definition: ripper.c:4668
int yynerrs
Definition: ripper.c:5021
command_asgn lhs
Definition: ripper.y:1266
static int dyna_in_block_gen(struct parser_params *)
Definition: parse.c:15209
static const rb_data_type_t parser_data_type
Definition: parse.c:11000
Definition: ripper.y:240
#define YYABORT
Definition: parse.c:4453
Definition: parse.h:276
int has_shebang
Definition: ripper.c:559
nd_args
Definition: parse.y:1378
#define NEW_DSTR(s)
#define nd_set_type(n, t)
#define logop(type, node1, node2)
Definition: parse.c:656
static rb_encoding * must_be_ascii_compatible(VALUE s)
Definition: parse.c:10950
#define ISALPHA(c)
Definition: ruby.h:1636
yytype_int16 yyss
Definition: ripper.c:1180
#define MEMZERO(p, type, n)
#define modifier_rescue
Definition: ripper.c:227
static void dyna_pop_1(struct parser_params *parser)
Definition: parse.c:15177
void rb_exc_raise(VALUE mesg)
Definition: eval.c:527
#define NEW_UNLESS(c, t, e)
#define in_single
Definition: parse.c:611
#define NEW_MODULE(n, b)
static NODE * new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
Definition: parse.c:15006
unsigned long st_data_t
Definition: ripper.y:35
#define strtod(s, e)
Definition: util.h:76
VALUE rb_usascii_str_new(const char *, long)
Definition: string.c:431
struct vtable * prev
Definition: ripper.c:419
int rb_is_const_id(ID id)
Definition: ripper.c:16109
int rb_is_instance_id(ID id)
Definition: ripper.c:16127
#define RUBY_DTRACE_PARSE_END(arg0, arg1)
Definition: probes.h:72
struct RString::@63::@64 heap
VALUE hash
Definition: tkutil.c:267
int rb_is_method_name(VALUE name)
Definition: ripper.c:16273
static void warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
Definition: parse.c:14656
YYSTYPE yyval
Definition: ripper.c:5063
#define toksiz
Definition: parse.c:618
#define keyword_not
Definition: ripper.c:222
#define NEW_OP_ASGN_AND(i, val)
static VALUE coverage(const char *f, int n)
Definition: parse.c:10858
rb_encoding * enc
Definition: ripper.c:562
#define parser_warning(node, mesg)
Definition: ripper.c:13824
static void parser_free(void *ptr)
Definition: parse.c:16302
#define tCMP
Definition: ripper.c:252
static YYSIZE_T const char * yystr
Definition: parse.c:4736
#define NODE_LVAR
enum lex_state_e parser_lex_state
Definition: ripper.c:529
#define lex_gets
Definition: parse.c:630
#define NODE_LASGN
int capa
Definition: ripper.c:418
VALUE parser_lex_lastline
Definition: ripper.c:546
#define NEW_OPT_N(b)
#define tLBRACK
Definition: ripper.c:275
#define tGEQ
Definition: ripper.c:256
NODE * rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
Definition: ripper.c:11097
#define void_expr(node)
Definition: parse.c:666
#define tRSHFT
Definition: ripper.c:267
#define NEW_KW_ARG(i, v)
BDIGIT m
Definition: bigdecimal.c:5085
static void parser_initialize(struct parser_params *parser)
Definition: parse.c:16223
#define scan_hex(s, l, e)
Definition: util.h:54
static struct vtable * dyna_push_gen(struct parser_params *)
Definition: parse.c:15166
static void parser_set_encode(struct parser_params *parser, const char *name)
Definition: parse.c:12109
return Qfalse
Definition: tcltklib.c:6779
#define FIXNUM_P(f)
#define rb_intern_str(string)
Definition: generator.h:17
#define tNMATCH
Definition: ripper.c:261
#define local_id(id)
Definition: parse.c:792
#define here_document(n)
Definition: parse.c:10597
#define lex_goto_eol(parser)
Definition: parse.c:11117
#define tDOT2
Definition: ripper.c:262
int rb_char_to_option_kcode(int c, int *option, int *kcode)
Definition: re.c:301
#define TypedData_Get_Struct(obj, type, data_type, sval)
#define keyword_def
Definition: ripper.c:188
void rb_compile_error_append(const char *fmt,...)
Definition: error.c:150
#define RARRAY_LEN(a)
#define tCHAR
Definition: ripper.c:245
#define NODE_WHEN
#define Qnil
Definition: tcltklib.c:1896
#define StringValuePtr(v)
#define YYTRANSLATE(YYX)
Definition: parse.c:1247
#define val
Definition: tcltklib.c:1949
int rb_ispunct(int c)
Definition: encoding.c:1890
#define tokidx
Definition: parse.c:617
VALUE rb_eRuntimeError
Definition: error.c:510
#define match_op(node1, node2)
Definition: parse.c:734
static enum node_type nodetype(NODE *node)
Definition: parse.c:13721
#define NEW_STRTERM(func, term, paren)
Definition: parse.c:11702
const rb_data_type_t * parent
Definition: ripper.y:969
#define NEW_RESCUE(b, res, e)
#define RARRAY(obj)
#define tFLOAT
Definition: ripper.c:243
VALUE rb_parser_encoding(VALUE vparser)
Definition: ripper.c:16473
#define CMDARG_PUSH(n)
Definition: parse.c:410
#define reg_named_capture_assign(regexp, match)
Definition: parse.c:748
union RNode::@81 u2
#define arg_concat(h, t)
Definition: parse.c:683
struct parser_params * parser
Definition: ripper.c:15376
static void magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
Definition: parse.c:12157
#define RE_OPTION_MASK
Definition: parse.c:817
#define NODE_YIELD
#define NEW_NODE(t, a0, a1, a2)
#define NEW_LIST(a)
#define NEW_ENSURE(b, en)
RUBY_EXTERN VALUE rb_mKernel
Definition: ripper.y:1414
static VALUE char * str
Definition: tcltklib.c:3547
#define NODE_FLIP2
#define tCVAR
Definition: ripper.c:240
char * ruby_strdup(const char *)
Definition: util.c:454
#define NODE_BLOCK
#define ID_INSTANCE
#define keyword_rescue
Definition: ripper.c:191
static int e_option_supplied(struct parser_params *parser)
Definition: parse.c:10875
NODE * rb_compile_string(const char *f, VALUE s, int line)
Definition: ripper.c:11090
#define keyword_end
Definition: ripper.c:193
#define NEW_BLOCK(a)
static struct vtable * vtable_alloc(struct vtable *prev)
Definition: parse.c:448
int yyrule
Definition: ripper.c:4665
#define keyword_super
Definition: ripper.c:215
#define NODE_DASGN_CURR
int parser_paren_nest
Definition: ripper.c:533
VALUE rb_ary_new(void)
Definition: array.c:424
#define NODE_AND
#define NODE_HEREDOC
Definition: parse.c:821
int rb_ascii8bit_encindex(void)
Definition: encoding.c:1160
int flags
Definition: tcltklib.c:3023
unsigned long ID
Definition: ripper.y:105
#define NEW_UNDEF(i)
#define VTBL_DEBUG
Definition: parse.c:445
#define ID_JUNK
#define keyword_if
Definition: ripper.c:194
#define cond_stack
Definition: parse.c:605
va_end(args)
static int is_special_global_name(const char *m, const char *e, rb_encoding *enc)
Definition: parse.c:15603
static const yytype_uint16 yyrline[]
Definition: parse.c:1556
void rb_gc_mark(VALUE)
Definition: gc.c:2598
#define ID_GLOBAL
YYSIZE_T yymsg_alloc
Definition: ripper.c:5034
#define IS_SPCARG(c)
Definition: parse.c:12398
void rb_define_const(VALUE, const char *, VALUE)
Definition: variable.c:2197
#define tLEQ
Definition: ripper.c:257
#define set_yylval_id(x)
Definition: parse.c:10605
RUBY_EXTERN int ffs(int)
Definition: ffs.c:6
#define NEW_WHEN(c, t, e)
top_stmt escape_Qundef($1)
#define ISASCII(c)
Definition: ruby.h:1629
int yytoken
Definition: ripper.c:5029
static char *char * yydest
Definition: parse.c:4760
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
Definition: class.c:499
#define YYSIZE_MAXIMUM
Definition: parse.c:1064
static VALUE VALUE obj
Definition: tcltklib.c:3158
#define RSTRING_LEN(str)
static int reg_fragment_check_gen(struct parser_params *, VALUE, int)
Definition: parse.c:15293
#define INT2FIX(i)
#define YYSTACK_ALLOC
Definition: parse.c:1142
struct vtable * vars
Definition: parse.h:282
int idx
Definition: tcltklib.c:9716
static NODE * dsym_node_gen(struct parser_params *, NODE *)
Definition: parse.c:14934
#define STR_FUNC_REGEXP
Definition: parse.c:11084
VALUE value
Definition: ripper.y:246
#define tSYMBEG
Definition: ripper.c:282
#define FIX2LONG(x)
static NODE * new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs)
Definition: parse.c:14990
#define k__END__
Definition: eventids2.c:9
#define ISALNUM(c)
Definition: ruby.h:1635
#define YYDPRINTF(Args)
Definition: ripper.c:4545
return yylen
Definition: ripper.c:4742
goto yyexhaustedlab
Definition: ripper.c:10491
static void no_blockarg(struct parser_params *parser, NODE *node)
Definition: parse.c:14815
#define T_STRING
static struct magic_comment magic_comments[]
Definition: parse.c:12193
#define MBCLEN_CHARFOUND_P(ret)
#define keyword_defined
Definition: ripper.c:229
static double one(void)
Definition: isinf.c:52
static NODE * splat_array(NODE *)
Definition: parse.c:14330
int yyn
Definition: ripper.c:5024
static void parser_mark(void *ptr)
Definition: parse.c:16276
unsigned char OnigUChar
Definition: ripper.y:114
#define NODE_ARGSCAT
#define NODE_COLON2
NODE * rb_parser_append_print(VALUE vparser, NODE *node)
Definition: ripper.c:15485
static void parser_tokadd(struct parser_params *parser, int c)
Definition: parse.c:11224
#define nd_set_line(n, l)
#define is_local_id(id)
Definition: parse.c:345
YYSTYPE * yyvs
Definition: ripper.c:5052
#define LVAR_USED
Definition: parse.c:14201
#define xmalloc
#define xrealloc
static void ripper_init_eventids1(void)
Definition: eventids1.c:134
static int sym_check_asciionly(VALUE str)
Definition: parse.c:15768
static ID intern_str(VALUE str)
Definition: parse.c:15810
#define STR_FUNC_INDENT
Definition: parse.c:11087
#define tSTRING_DBEG
Definition: ripper.c:290
#define keyword_undef
Definition: ripper.c:189
#define arg_append(h, t)
Definition: parse.c:681
static VALUE lex_get_str(struct parser_params *parser, VALUE s)
Definition: parse.c:10960
static int assign_in_cond(struct parser_params *parser, NODE *node)
Definition: parse.c:14629
#define op_tbl_count
Definition: parse.c:15516
#define NEW_ARGS_AUX(r, b)
#define tokadd(c)
Definition: parse.c:10589
#define no_digits()
#define TypedData_Wrap_Struct(klass, data_type, sval)
#define peek_n(c, n)
Definition: parse.c:11120
#define RSTRING_NOEMBED
#define YYFINAL
Definition: parse.c:1230
#define ISUPPER(c)
Definition: ruby.h:1633
static void void_expr_gen(struct parser_params *, NODE *)
Definition: parse.c:14431
static int reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end, int back_num, int *back_refs, OnigRegex regex, void *arg0)
Definition: parse.c:15316
#define RUBY_FUNC_EXPORTED
Definition: defines.h:184
unsigned char buf[MIME_BUF_SIZE]
Definition: nkf.c:4308
VALUE rb_suppress_tracing(VALUE(*func)(VALUE), VALUE arg)
Definition: vm_trace.c:344
VALUE rb_enc_associate_index(VALUE obj, int idx)
Definition: encoding.c:746
int rb_parse_in_main(void)
Definition: compile.c:5882
int err
Definition: win32.c:87
#define IS_AFTER_OPERATOR()
Definition: parse.c:12401
#define dyna_pop(node)
Definition: ripper.c:799
#define tCONSTANT
Definition: ripper.c:239
#define tXSTRING_BEG
Definition: ripper.c:284
#define YYACCEPT
Definition: ripper.c:4452
#define tSTRING_DEND
Definition: ripper.c:291
const char * parser_lex_pend
Definition: ripper.c:550
#define NEW_DEFINED(e)
static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
Definition: parse.c:11417
#define DBL2NUM(dbl)
#define ALLOCA_N(type, n)
#define ENC_CODERANGE_UNKNOWN
void rb_gc_mark_symbols(void)
Definition: ripper.c:15653
#define set_yylval_num(x)
Definition: parse.c:10604
long cnt
Definition: ripper.y:262
ID token
Definition: ripper.c:15558
static int VALUE key
Definition: tkutil.c:265
#define YY_REDUCE_PRINT(Rule)
Definition: ripper.c:4685
YYSTYPE yyvsa[YYINITDEPTH]
Definition: ripper.c:5051
NODE * rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
Definition: ripper.c:15517
NODE * rb_compile_cstr(const char *f, const char *s, int len, int line)
Definition: ripper.c:11104
#define parser_encoding_name()
Definition: parse.c:10693
token_info * parser_token_info
Definition: ripper.c:575
#define new_op_assign(lhs, op, rhs)
Definition: parse.c:774
int column
Definition: ripper.c:506
#define YYSIZE_T
Definition: parse.c:1060
#define tREGEXP_BEG
Definition: ripper.c:285
#define END(no)
Definition: re.c:26
#define brace_nest
Definition: parse.c:610
#define EOF
Definition: vsnprintf.c:207
static NODE * list_append_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:13820
int yyerrstatus
Definition: ripper.c:5027
#define keyword_self
Definition: ripper.c:216
VALUE rb_str_buf_cat(VALUE, const char *, long)
Definition: string.c:1940
void * rb_parser_malloc(struct parser_params *parser, size_t size)
Definition: ripper.c:16519
VALUE rb_str_dup(VALUE)
Definition: string.c:946
static const yytype_int16 yycheck[]
Definition: parse.c:3232
static int literal_node(NODE *node)
Definition: parse.c:14715
#define DEF_EXPR(n)
Definition: ripper.c:375
static int dvar_curr_gen(struct parser_params *, ID)
Definition: parse.c:15246
#define tHEREDOC_END
Definition: eventids2.c:8
static int rb_str_symname_type(VALUE name)
Definition: parse.c:15742
#define rb_long2int(n)
static int rb_enc_symname_type(const char *name, long len, rb_encoding *enc)
Definition: parse.c:15641
#define ID_CLASS
#define NEW_LASGN(v, val)
node_type
Definition: ripper.y:23
#define flush_string_content(enc)
Definition: parse.c:11721
VALUE rb_obj_as_string(VALUE)
Definition: string.c:895
VALUE * argv
Definition: tcltklib.c:1971
goto yysetstate
Definition: ripper.c:5085
#define NODE_MEMO
#define NEW_OPT_ARG(i, v)
VALUE rb_hash_aset(VALUE, VALUE, VALUE)
yytype_int16 * yyss
Definition: ripper.c:5047
#define command_start
Definition: ripper.c:627
string_type
Definition: ripper.c:11157
int rb_dvar_defined(ID id)
Definition: compile.c:5832
VALUE rb_str_resize(VALUE, long)
Definition: string.c:1846
int parser_in_single
Definition: ripper.c:535
#define RTEST(v)
#define tCOLON3
Definition: ripper.c:269
lex_state_bits
Definition: ripper.c:359
const int id
Definition: nkf.c:209
int st_foreach(st_table *, int(*)(ANYARGS), st_data_t)
Definition: st.c:1000
#define ret_args(node)
Definition: parse.c:705
#define NEW_SCLASS(r, b)
static int parser_yyerror(struct parser_params *, const char *)
Definition: parse.c:10776
#define tWORDS_BEG
Definition: ripper.c:286
#define RUBY_DTRACE_PARSE_END_ENABLED()
Definition: probes.h:71
#define tSTAR
Definition: ripper.c:278
#define COND_LEXPOP()
Definition: parse.c:407
ID rest_arg
Definition: ripper.y:514
static const yytype_int16 yypgoto[]
Definition: parse.c:2100
int errno
#define TRUE
Definition: nkf.h:175
int rb_symname_p(const char *name)
Definition: ripper.c:15697
static int parser_tokadd_mbchar(struct parser_params *parser, int c)
Definition: parse.c:11540
q result
Definition: tcltklib.c:7070
#define NODE_NIL
VALUE rb_thread_current(void)
Definition: thread.c:2350
#define COND_POP()
Definition: parse.c:406
#define TOK_INTERN(mb)
Definition: parse.c:596
#define modifier_until
Definition: ripper.c:226
#define NODE_ATTRASGN
#define token_info_pop(token)
Definition: ripper.c:968
VALUE rb_range_new(VALUE, VALUE, int)
Definition: range.c:67
VALUE rb_sprintf(const char *format,...)
Definition: sprintf.c:1270
volatile VALUE value
Definition: tcltklib.c:9442
#define NODE_COLON3
#define StringValue(v)
#define COND_P()
Definition: parse.c:408
#define NODE_DEFINED
#define rb_enc_mbcput(c, buf, enc)
#define ruby_coverage
Definition: parse.c:642
static VALUE debug_lines(const char *f)
Definition: parse.c:10841
#define rb_node_newnode(type, a1, a2, a3)
Definition: ripper.c:651
#define rb_warnS(fmt, a)
Definition: parse.c:926
goto yynewstate
Definition: ripper.c:5232
#define mixed_error(enc1, enc2)
#define NEW_DOT2(b, e)
#define NODE_MASGN
#define T_REGEXP
#define const
Definition: strftime.c:102
int rb_is_attrset_name(VALUE name)
Definition: ripper.c:16261
#define tOP_ASGN
Definition: ripper.c:270
#define NEW_DASGN(v, val)
register char * s
Definition: os2.c:56
#define value_expr(node)
Definition: parse.c:664
#define NEW_VALIAS(n, o)
int rb_enc_symname_p(const char *name, rb_encoding *enc)
Definition: ripper.c:15703
#define NEW_POSTARG(i, v)
#define rb_warning0(fmt)
Definition: parse.c:928
#define CONST_ID(var, str)
#define NEW_ERRINFO()
#define reg_fragment_setenc(str, options)
Definition: parse.c:744
#define malloc
Definition: ripper.c:332
static int value_expr_gen(struct parser_params *, NODE *)
Definition: parse.c:14369
static const yytype_int16 yyrhs[]
Definition: parse.c:1361
void Init_sym(void)
Definition: ripper.c:15634
#define NODE_CONST
VP_EXPORT void
Definition: bigdecimal.c:5083
static int parser_whole_match_p(struct parser_params *parser, const char *eos, long len, int indent)
Definition: parse.c:11927
static const char * magic_comment_marker(const char *str, long len)
Definition: parse.c:12201
#define keyword_false
Definition: ripper.c:219
#define rb_warn0(fmt)
Definition: parse.c:924
int rb_is_local_id(ID id)
Definition: ripper.c:16139
rb_magic_comment_length_t length
Definition: ripper.c:12258
int parser_in_def
Definition: ripper.c:536
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
Definition: class.c:1566
#define NEW_SUPER(a)
#define keyword_or
Definition: ripper.c:221
static const yytype_uint8 yytranslate[]
Definition: parse.c:1251
#define new_bv(id)
Definition: parse.c:781
#define YYEMPTY
Definition: parse.c:4449
#define NEW_COLON2(c, i)
VALUE parser_cur_mid
Definition: ripper.c:539
short int yytype_int16
Definition: ripper.c:1047
VALUE rb_io_gets(VALUE)
Definition: io.c:3076
static void Init_id(void)
Definition: ripper.y:15
static char * parser_newtok(struct parser_params *parser)
Definition: parse.c:11196
long parser_lex_gets_ptr
Definition: ripper.c:554
goto yyreturn
Definition: ripper.c:10593
#define NODE_GVAR
#define NODE_CDECL
static void fixup_nodes(NODE **)
Definition: parse.c:14668
rb_encoding * rb_usascii_encoding(void)
Definition: encoding.c:1181
#define NEW_HASH(a)
unsigned char yytype_uint8
Definition: ripper.c:1026
#define list_concat(h, t)
Definition: parse.c:679
#define keyword_until
Definition: ripper.c:202
union RNode::@82 u3
#define dyna_in_block()
Definition: parse.c:801
#define dyna_var(id)
Definition: parse.c:802
#define RB_GC_GUARD(v)
#define STR_FUNC_ESCAPE
Definition: parse.c:11082
#define NODE_LIT
#define rb_reserved_word(str, len)
Definition: lex.c:37
int type
Definition: tcltklib.c:111
int id[2]
Definition: lex.c:33
#define heredoc_restore(n)
Definition: parse.c:10599
#define NEW_UNTIL(c, b, n)
#define T_FIXNUM
#define tANDOP
Definition: ripper.c:258
#define tPOW
Definition: ripper.c:251
#define NEW_MATCH3(r, n2)
struct parser_params * parser
Definition: ripper.c:4578
#define yyerror(msg)
Definition: parse.c:599
int argc
Definition: tcltklib.c:1970
VALUE rb_str_buf_new(long)
Definition: string.c:777
#define peek(c)
Definition: parse.c:11119
stack_type parser_cond_stack
Definition: ripper.c:530
#define IS_lex_state_for(x, ls)
Definition: parse.c:391
NODE * post_init
Definition: ripper.y:507
static NODE * arg_append_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:14312
#define modifier_while
Definition: ripper.c:225
static void ripper_init_eventids2(void)
Definition: eventids2.c:64
int rb_const_defined_at(VALUE, ID)
Definition: variable.c:2104
int rb_is_junk_id(ID id)
Definition: ripper.c:16145
#define heredoc_identifier()
Definition: parse.c:10598
int parser_heredoc_end
Definition: ripper.c:551
#define ruby_sourceline
Definition: ripper.c:633
ID rb_id_attrset(ID id)
Definition: ripper.c:14326
static VALUE parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
Definition: parse.c:11101
Definition: ripper.y:72
#define ripper_flush(p)
Definition: parse.c:10626
#define dsym_node(node)
Definition: parse.c:710
#define regx_options()
Definition: parse.c:10593
int post_args_num
Definition: ripper.y:510
static int parser_magic_comment(struct parser_params *parser, const char *str, long len)
Definition: parse.c:12234
int rb_is_global_id(ID id)
Definition: ripper.c:16121
static int arg_var_gen(struct parser_params *, ID)
Definition: parse.c:15121
#define NEW_SELF()
#define YYUSE(e)
Definition: ripper.c:1080
#define call_bin_op(recv, id, arg1)
Definition: parse.c:694
#define rb_warn4S(file, line, fmt, a)
Definition: parse.c:927
#define tQSYMBOLS_BEG
Definition: ripper.c:289
VALUE rb_attr_get(VALUE, ID)
Definition: variable.c:1117
#define rb_enc_ispunct(c, enc)
VALUE rb_ensure(VALUE(*b_proc)(ANYARGS), VALUE data1, VALUE(*e_proc)(ANYARGS), VALUE data2)
Definition: eval.c:804
VALUE flags
Definition: ripper.y:700
static VALUE yycompile0(VALUE arg)
Definition: parse.c:10881
#define NEW_RESBODY(a, ex, n)
#define NEW_RETURN(s)
#define NODE_ARGSPUSH
#define NODE_BACK_REF
#define NODE_MATCH
#define Qnone
Definition: parse.c:916
#define assignable_result(x)
short int yytype_int8
Definition: ripper.c:1035
static int parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
Definition: parse.c:11424
static int parser_tokadd_string(struct parser_params *, int, int, int, long *, rb_encoding **)
Definition: parse.c:11569
VALUE rb_reg_check_preprocess(VALUE)
Definition: re.c:2304
#define tOROP
Definition: ripper.c:259
VALUE flags
Definition: ripper.y:241
expr ripper_intern("and")
#define tIVAR
Definition: ripper.c:238
const char * token
Definition: ripper.c:504
ruby_verbose
Definition: tcltklib.c:5818
static NODE * assignable_gen(struct parser_params *, ID, NODE *)
RUBY_EXTERN VALUE rb_cString
Definition: ripper.y:1456
Real * b
Definition: bigdecimal.c:1182
#define NEW_COLON3(i)
#define dvar_defined_get(id)
Definition: parse.c:805
#define RUBY_DTRACE_PARSE_BEGIN_ENABLED()
Definition: probes.h:67
#define NEW_CASE(h, b)
return ptr
Definition: tcltklib.c:784
#define free(x)
Definition: dln.c:50
static NODE * new_args_gen(struct parser_params *, NODE *, NODE *, ID, NODE *, NODE *)
Definition: parse.c:14887
VpDivd * c
Definition: bigdecimal.c:1205
#define is_global_id(id)
Definition: parse.c:346
goto yyerrlab1
Definition: ripper.c:10520
#define lex_input
Definition: parse.c:620
#define STR_FUNC_QWORDS
Definition: parse.c:11085
static int vtable_included(const struct vtable *tbl, ID id)
Definition: parse.c:487
#define NODE_DASGN
int parser_in_defined
Definition: ripper.c:540
volatile VALUE msg
Definition: tcltklib.c:3100
#define ruby_eval_tree
Definition: parse.c:639
#define NEW_BACK_REF(n)
VALUE rb_vsprintf(const char *, va_list)
Definition: sprintf.c:1264
int parser_class_nest
Definition: ripper.c:532
#define T_BIGNUM
static VALUE lex_io_gets(struct parser_params *parser, VALUE io)
Definition: parse.c:11050
#define MEMCPY(p1, p2, type, n)
#define YYPACT_NINF
Definition: parse.c:1988
#define parser_is_identchar()
Definition: parse.c:10697
#define tFID
Definition: ripper.c:236
gz end
Definition: zlib.c:2270
goto yydefault
Definition: ripper.c:5178
#define NEW_IF(c, t, e)
#define ruby__end__seen
Definition: parse.c:632
#define dvar_curr(id)
Definition: parse.c:807
#define set_yylval_node(x)
Definition: parse.c:10608
static void const char * yymsg
Definition: parse.c:4945
nd_iter
Definition: parse.y:1388
static void vtable_free(struct vtable *tbl)
Definition: parse.c:460
#define NEW_GASGN(v, val)
#define keyword_in
Definition: ripper.c:208
#define NEW_ARGSPUSH(a, b)
int rb_is_const_name(VALUE name)
Definition: ripper.c:16237
unsigned int top
Definition: nkf.c:4309
int rb_is_local_name(VALUE name)
Definition: ripper.c:16267
arg
Definition: ripper.y:1312
#define reg_fragment_check(str, options)
Definition: parse.c:746
VALUE src
Definition: tcltklib.c:7953
yy_symbol_value_print(yyoutput, yytype, yyvaluep, parser)
VALUE rb_str_cat(VALUE, const char *, long)
Definition: string.c:1956
#define NEW_XSTR(s)
#define arg_ambiguous()
Definition: parse.c:12068
#define tNTH_REF
Definition: ripper.c:246
#define ENC_CODERANGE_7BIT
rb_encoding * rb_enc_get(VALUE obj)
Definition: encoding.c:770
#define NEW_WHILE(c, b, n)
static void reduce_nodes_gen(struct parser_params *, NODE **)
Definition: parse.c:14544
#define NEW_DEFS(r, i, a, d)
#define END_OF_INPUT
Definition: ripper.c:185
void rb_gc_mark_parser(void)
Definition: ripper.c:15480
int nonspc
Definition: ripper.c:507
int size
Definition: encoding.c:52
#define YYSTACK_ALLOC_MAXIMUM
Definition: parse.c:1145
#define newtok()
Definition: parse.c:10587
#define f
#define set_yylval_name(x)
Definition: parse.c:10606
#define SYMBOL_P(x)
#define tIDENTIFIER
Definition: ripper.c:235
char yymsgbuf[128]
Definition: ripper.c:5032
#define keyword_then
Definition: ripper.c:196
yytokentype
Definition: ripper.c:68
static NODE * reg_named_capture_assign_gen(struct parser_params *parser, VALUE regexp, NODE *match)
Definition: parse.c:15356
#define NODE_FLIP3
static void parser_pushback(struct parser_params *parser, int c)
Definition: parse.c:11179
void rb_parser_free(struct parser_params *parser, void *ptr)
Definition: ripper.c:16559
#define keyword_break
Definition: ripper.c:204
#define Qundef
int parser_tokidx
Definition: ripper.c:542
static const yytype_uint16 yydefact[]
Definition: parse.c:1851
#define NODE_DVAR
#define lpar_beg
Definition: parse.c:609
static int parser_here_document(struct parser_params *, NODE *)
Definition: parse.c:11957
#define COND_PUSH(n)
Definition: parse.c:405
#define keyword_do_cond
Definition: ripper.c:210
#define parser_warn(node, mesg)
Definition: ripper.c:13831
#define rb_compile_error
Definition: ripper.c:950
static NODE * ret_args_gen(struct parser_params *, NODE *)
Definition: parse.c:14823
VALUE coverage
Definition: ripper.c:571
VALUE rb_external_str_new_with_enc(const char *ptr, long len, rb_encoding *)
Definition: string.c:569
int t
Definition: ripper.c:13760
void rb_set_errinfo(VALUE err)
Definition: eval.c:1436
#define tLBRACE_ARG
Definition: ripper.c:277
#define lex_gets_ptr
Definition: parse.c:629
#define tAREF
Definition: ripper.c:264
#define rb_enc_isspace(c, enc)
static void dyna_pop_gen(struct parser_params *, const struct vtable *)
Definition: parse.c:15195
NODE * parser_lex_strterm
Definition: ripper.c:528
const char * name
Definition: ripper.c:12256
#define NEW_IVAR(v)
top_stmts dispatch0(stmts_new)
static void local_pop_gen(struct parser_params *)
Definition: parse.c:15076
#define tSP
Definition: eventids2.c:6
#define NEW_ATTRASGN(r, m, a)
#define tGVAR
Definition: ripper.c:237
#define IS_lex_state(ls)
Definition: parse.c:392
static int simple_re_meta(int c)
Definition: parse.c:11556
#define NODE_ZARRAY
#define lvtbl
Definition: parse.c:631
#define new_attr_op_assign(lhs, type, attr, op, rhs)
Definition: parse.c:729
const char * yys
Definition: ripper.c:4765
#define aryset(node1, node2)
Definition: parse.c:718
#define tDOT3
Definition: ripper.c:263
#define NEW_BEGIN(b)
NODE * pre_init
Definition: ripper.y:506
#define NEW_FCALL(m, a)
#define NODE_CVAR
#define NEW_SCOPE(a, b)
#define list_append(l, i)
Definition: parse.c:677
st_index_t rb_str_hash(VALUE)
Definition: string.c:2237
#define NEW_OP_ASGN2(r, i, o, val)
#define tokaddmbc(c, enc)
Definition: parse.c:10596
#define tLABEL
Definition: ripper.c:241
#define NODE_BREAK
#define cur_mid
Definition: parse.c:614
#define STR_NEW3(p, n, e, func)
Definition: parse.c:594
#define IS_BEG()
Definition: parse.c:12397
rb_magic_comment_setter_t func
Definition: ripper.c:12257
static const yytype_int16 yypact[]
Definition: parse.c:1989
#define dvar_defined(id)
Definition: parse.c:804
int parser_lpar_beg
Definition: ripper.c:534
#define ESCAPE_CONTROL
Definition: parse.c:11322
void rb_compile_warning(const char *file, int line, const char *fmt,...)
Definition: error.c:185
st_table * sym_id
Definition: ripper.c:15592
RUBY_EXTERN VALUE rb_cObject
Definition: ripper.y:1426
static void warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
Definition: parse.c:14662
#define ALLOC_N(type, n)
#define yylval
Definition: ripper.c:10644
#define LONG2FIX(i)
#define NODE_FL_NEWLINE
static int symbols_i(VALUE sym, ID value, VALUE ary)
Definition: parse.c:16009
#define RBASIC(obj)
struct local_vars * prev
Definition: ripper.c:426
#define NEW_VCALL(m)
#define IS_END()
Definition: parse.c:12396
static void parser_prepare(struct parser_params *parser)
Definition: parse.c:12371
#define keyword_while
Definition: ripper.c:201
static struct parser_params * parser_new(void)
Definition: parse.c:16365
struct vtable * vars
Definition: ripper.c:424
#define new_args(f, o, r, p, t)
Definition: parse.c:699
static void rb_backref_error_gen(struct parser_params *, NODE *)
Definition: parse.c:14274
klass
Definition: tcltklib.c:3504
#define INT2NUM(x)
#define YYINITDEPTH
Definition: parse.c:4706
static NODE * logop_gen(struct parser_params *, enum node_type, NODE *, NODE *)
Definition: parse.c:14800
goto yybackup
Definition: ripper.c:5165
#define NODE_DSTR
static void void_stmts_gen(struct parser_params *, NODE *)
Definition: parse.c:14520
#define ENC_SINGLE(cr)
Definition: parse.c:595
struct rb_encoding_entry * list
Definition: encoding.c:50
#define tSTRING_END
Definition: ripper.c:293
#define NEW_RETRY()
void * rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
Definition: ripper.c:16529
static const yytype_int16 yydefgoto[]
Definition: parse.c:1962
#define STRNCASECMP(s1, s2, n)
rb_encoding * rb_filesystem_encoding(void)
Definition: encoding.c:1246
VALUE rb_make_backtrace(void)
Definition: vm_backtrace.c:772
#define parse_string(n)
Definition: parse.c:10595
#define keyword_BEGIN
Definition: ripper.c:230
#define NEWHEAP()
Definition: parse.c:16446
static int yylex(void *, void *)
int linenum
Definition: ripper.c:505
#define NEW_CVAR(v)
#define keyword_for
Definition: ripper.c:203
#define YYEOF
Definition: parse.c:4450
#define tEMBDOC
Definition: eventids2.c:4
#define NODE_BEGIN
gz io
Definition: zlib.c:2261
char * parser_tokenbuf
Definition: ripper.c:541
#define node_assign(node1, node2)
Definition: parse.c:725
#define get_id(id)
Definition: parse.c:750
VALUE rb_cArray
Definition: array.c:29
#define BEG(no)
Definition: re.c:25
#define keyword_do
Definition: ripper.c:209
#define NEW_OP_ASGN1(p, id, a)
#define id_type(id)
Definition: parse.c:352
int parser_tokline
Definition: ripper.c:544
Definition: ripper.y:79
#define YYTERROR
Definition: parse.c:4483
static int parser_parse_string(struct parser_params *, NODE *)
Definition: parse.c:11789
#define tok()
Definition: parse.c:11191
#define cond(node)
Definition: parse.c:654
VALUE rb_ary_new2(long capa)
Definition: array.c:417
#define YYSTACK_RELOCATE(Stack)
Definition: parse.c:1216
#define ruby_eval_tree_begin
Definition: parse.c:640
#define is_instance_id(id)
Definition: parse.c:347
VALUE rb_str_new(const char *, long)
Definition: string.c:425
union RNode::@80 u1
const char * parser_lex_pbeg
Definition: ripper.c:548
static NODE * cond_gen(struct parser_params *, NODE *)
Definition: parse.c:14793
int rb_is_class_id(ID id)
Definition: ripper.c:16115
#define keyword_true
Definition: ripper.c:218
#define tUPLUS
Definition: ripper.c:249
#define rb_safe_level()
Definition: tcltklib.c:94
VALUE rb_parser_new(void)
Definition: ripper.c:16444
static NODE * list_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:13840
#define NODE_CVASGN
Definition: ripper.c:415
#define NEW_CDECL(v, val, path)
static int is_private_local_id(ID name)
Definition: parse.c:14191
#define lex_p
Definition: parse.c:624
static int comment_at_top(struct parser_params *parser)
Definition: parse.c:12141
const char * parser_lex_p
Definition: ripper.c:549
#define nd_lit
#define keyword_else
Definition: ripper.c:198
static void dispose_string(VALUE str)
Definition: parse.c:11533
static int parser_nextc(struct parser_params *parser)
Definition: parse.c:11123
#define rb_enc_asciicompat(enc)
lex_state_e
Definition: ripper.c:374
#define read_escape(flags, e)
Definition: parse.c:10591
#define parser_isascii()
Definition: parse.c:10699
static const char *const yytname[]
Definition: parse.c:1626
#define NUM2INT(x)
#define tASET
Definition: ripper.c:265
#define nd_head
int rb_is_instance_name(VALUE name)
Definition: ripper.c:16255
int parser_ruby_sourceline
Definition: ripper.c:561
const char * rb_id2name(ID id)
Definition: ripper.c:16068
#define call_uni_op(recv, id)
Definition: parse.c:696
#define NODE_CALL
#define rb_errinfo()
Definition: tcltklib.c:89
#define tNEQ
Definition: ripper.c:255
static ID register_symid_str(ID, VALUE)
Definition: parse.c:15759
#define STR_FUNC_SYMBOL
Definition: parse.c:11086
#define tLPAREN
Definition: ripper.c:272
#define rb_enc_isupper(c, enc)
#define DVARS_INHERIT
Definition: parse.c:429
int cnt
Definition: tcltklib.c:6149
static ID shadowing_lvar_gen(struct parser_params *, ID)
Definition: parse.c:14204
#define keyword__LINE__
Definition: ripper.c:232
#define modifier_unless
Definition: ripper.c:224
YYSTYPE * parser_yylval
Definition: ripper.c:525
static int token_info_get_column(struct parser_params *parser, const char *token)
Definition: parse.c:10703
#define arg_var(id)
Definition: parse.c:790
#define xcalloc
BDIGIT e
Definition: bigdecimal.c:5085
yychar
Definition: ripper.c:5075
#define is_junk_id(id)
Definition: parse.c:351
#define YY_STACK_PRINT(Bottom, Top)
Definition: ripper.c:4646
static NODE * yycompile(struct parser_params *parser, const char *f, int line)
Definition: parse.c:10941
#define NEW_LIT(l)
#define rb_enc_isascii(c, enc)
int rb_str_hash_cmp(VALUE, VALUE)
Definition: string.c:2247
static void vtable_add(struct vtable *tbl, ID id)
Definition: parse.c:472
#define YYFPRINTF
Definition: ripper.c:4542
#define keyword_module
Definition: ripper.c:187
VALUE opts
Definition: tcltklib.c:6146
static const yytype_uint16 yystos[]
Definition: parse.c:4337
static int is_static_content(NODE *node)
Definition: parse.c:14605
int is_ripper
Definition: ripper.c:522
unsigned long VALUE
Definition: ripper.y:104
options
Definition: tcltklib.c:4481
#define in_defined
Definition: parse.c:615
rb_encoding * rb_ascii8bit_encoding(void)
Definition: encoding.c:1151
int rb_is_junk_name(VALUE name)
Definition: ripper.c:16283
#define NODE_IVAR
#define RREGEXP(obj)
int rb_enc_find_index(const char *name)
Definition: encoding.c:633
VALUE eofp
Definition: ripper.c:526
static NODE * aryset_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:14242
static int parser_heredoc_identifier(struct parser_params *parser)
Definition: parse.c:11847
RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e-0x20+31)/32]
Definition: ripper.c:11792
static int parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp, int string_literal, int symbol_literal, int regexp_literal)
Definition: parse.c:11251
goto yyreduce
Definition: ripper.c:5242
NODE * heap
Definition: ripper.c:523
#define RSTRING_GETMEM(str, ptrvar, lenvar)
#define keyword_and
Definition: ripper.c:220
static NODE * block_append_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:13766
ID rb_intern3(const char *name, long len, rb_encoding *enc)
Definition: ripper.c:15856
#define NODE_DOT2
encp
Definition: crypt.c:564
#define keyword_retry
Definition: ripper.c:207
#define ID_SCOPE_MASK
#define tokline
Definition: parse.c:619
#define ESCAPE_META
Definition: parse.c:11323
#define local_push(top)
Definition: parse.c:784
#define NODE_DREGX
#define NODE_IASGN
#define NEW_DEFN(i, a, d, p)
#define tCOLON2
Definition: ripper.c:268
#define NODE_RETURN
#define snprintf
static void new_bv_gen(struct parser_params *, ID)
Definition: parse.c:14228
#define assignable(id, node)
Definition: parse.c:715
ID first_post_arg
Definition: ripper.y:512
void * rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
Definition: ripper.c:16539
#define NEW_REDO()
st_table * st_init_numtable_with_size(st_index_t)
Definition: st.c:278
VALUE rb_cstr_to_inum(const char *str, int base, int badcheck)
Definition: bignum.c:579
static NODE * range_op(struct parser_params *parser, NODE *node)
Definition: parse.c:14699
#define tLSHFT
Definition: ripper.c:266
#define ruby_debug_lines
Definition: parse.c:641
#define NODE_ARRAY
#define NODE_SPLAT
#define tUMINUS_NUM
Definition: ripper.c:296
#define tUMINUS
Definition: ripper.c:250
#define IS_ARG()
Definition: parse.c:12395
#define rb_intern(str)
static int parser_tok_hex(struct parser_params *parser, size_t *numlen)
Definition: parse.c:11234
#define new_evstr(n)
Definition: parse.c:688
int rb_parse_in_eval(void)
Definition: compile.c:5876
YYSTYPE const *const yyvaluep
Definition: ripper.c:4577
BDIGIT v
Definition: bigdecimal.c:5656
#define ENCODING_SET(obj, i)
#define keyword_ensure
Definition: ripper.c:192
int rb_memcicmp(const void *, const void *, long)
Definition: re.c:80
#define lex_eol_p()
Definition: parse.c:11118
#define tCOMMENT
Definition: eventids2.c:2
#define NEW_ZSUPER()
ID rb_intern2(const char *name, long len)
Definition: ripper.c:15984
#define tREGEXP_END
Definition: ripper.c:248
#define keyword_redo
Definition: ripper.c:206
NODE * rb_compile_file(const char *f, VALUE file, int start)
Definition: ripper.c:11124
#define void_stmts(node)
Definition: parse.c:668
#define block_append(h, t)
Definition: parse.c:675
#define tQWORDS_BEG
Definition: ripper.c:287
#define nd_line(n)
VALUE rb_parser_get_yydebug(VALUE self)
Definition: ripper.c:16488
VALUE(* parser_lex_gets)(struct parser_params *, VALUE)
Definition: ripper.c:555
#define NULL
Definition: _sdbm.c:103
#define compile_for_eval
Definition: parse.c:613
#define rb_enc_isalpha(c, enc)
static NODE * literal_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:13881
const char * name
Definition: nkf.c:208
#define tIGNORED_NL
Definition: eventids2.c:1
NODE * rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
Definition: ripper.c:11111
#define keyword_alias
Definition: ripper.c:228
VALUE rb_check_string_type(VALUE)
Definition: string.c:1508
#define yyerrok
Definition: parse.c:4447
#define REALLOC_N(var, type, n)
#define NODE_SCOPE
static NODE * call_uni_op_gen(struct parser_params *, NODE *, ID)
Definition: parse.c:13993
#define YYMAXDEPTH
Definition: parse.c:4717
static int literal_concat0(struct parser_params *, VALUE, VALUE)
Definition: parse.c:13864
#define in_def
Definition: parse.c:612
#define tINTEGER
Definition: ripper.c:242
static struct kwtable * reserved_word(const char *, unsigned int)
int rb_enc_str_coderange(VALUE)
Definition: string.c:327
#define ISXDIGIT(c)
Definition: ruby.h:1638
int rb_local_defined(ID id)
Definition: compile.c:5857
st_index_t num_entries
Definition: ripper.y:93
#define IS_LABEL_SUFFIX(n)
Definition: parse.c:12400
NODE * parser_eval_tree_begin
Definition: ripper.c:568
static int match(VALUE str, VALUE pat, VALUE hash, int(*cb)(VALUE, VALUE))
Definition: date_parse.c:273
static NODE * parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
Definition: parse.c:11003
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
Definition: class.c:1340
#define tDSTAR
Definition: ripper.c:279
int retry
Definition: tcltklib.c:10151
static void parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
Definition: parse.c:12166
#define YYTABLE_NINF
Definition: parse.c:2128
#define NODE_IASGN2
#define ULONG2NUM(x)
#define NODE_SELF
goto yyerrlab
Definition: ripper.c:5241
#define ifndef_ripper(x)
Definition: parse.c:917
#define SYM2ID(x)
#define YYLEX
Definition: parse.c:4532
static VALUE lex_getline(struct parser_params *parser)
Definition: parse.c:10980
#define ID_CONST
VALUE rb_eArgError
Definition: error.c:512
#define tSTRING_BEG
Definition: ripper.c:283
#define NEW_ARRAY(a)
#define tokadd_escape(e)
Definition: parse.c:10592
static NODE * node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE)
Definition: parse.c:13713
void rb_str_free(VALUE)
Definition: string.c:830
#define dyna_push()
Definition: parse.c:797
#define RTYPEDDATA_TYPE(v)
#define keyword_case
Definition: ripper.c:199
#define whole_match_p(e, l, i)
Definition: parse.c:10600
#define was_bol()
Definition: parse.c:11188
unsigned long ruby_scan_oct(const char *, size_t, size_t *)
Definition: util.c:28
#define NODE_VALUES
#define HEAPCNT(n, size)
Definition: parse.c:16445
#define STR_FUNC_EXPAND
Definition: parse.c:11083
static int parser_peek_variable_name(struct parser_params *parser)
Definition: parse.c:11753
#define is_attrset_id(id)
Definition: parse.c:348
#define ID_ATTRSET
static void YYSTYPE * yyvsp
Definition: parse.c:4664
struct vtable * args
Definition: ripper.c:423
static int local_id_gen(struct parser_params *, ID)
Definition: parse.c:15138
#define SPECIAL_PUNCT(idx)
Definition: parse.c:11729
#define tLAMBDA
Definition: ripper.c:281
#define rb_backref_error(n)
Definition: parse.c:723
#define keyword_elsif
Definition: ripper.c:197
#define tEMBDOC_END
Definition: eventids2.c:5
int yytype
Definition: ripper.c:4576
static void ripper_init_eventids2_table(VALUE self)
Definition: eventids2table.c:2
#define nd_value
#define NEW_YIELD(a)
#define ISSPACE(c)
Definition: ruby.h:1632
#define STR_NEW(p, n)
Definition: parse.c:591
static NODE * new_args_tail_gen(struct parser_params *, NODE *, ID, ID)
Definition: parse.c:14909
#define rb_warningS(fmt, a)
Definition: parse.c:929
const char * yysrc
Definition: ripper.c:4761
VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc)
Definition: string.c:2067
VALUE rb_inspect(VALUE)
Definition: object.c:402
#define reduce_nodes(n)
Definition: parse.c:670
#define void_expr0(node)
Definition: parse.c:665
rb_encoding * rb_enc_from_index(int index)
Definition: encoding.c:548
#define tokcopy(n)
Definition: parse.c:11247
#define NEW_BLOCK_PASS(b)
NODE * opt_args
Definition: ripper.y:520
int rb_is_global_name(VALUE name)
Definition: ripper.c:16249
size_t len
Definition: tcltklib.c:3568