Ruby  2.0.0p247(2013-06-27revision41674)
ripper.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 "ripper.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 */
524 
527 
530  stack_type parser_cond_stack;
548  const char *parser_lex_pbeg;
549  const char *parser_lex_p;
550  const char *parser_lex_pend;
560  char *parser_ruby_sourcefile; /* current source file */
561  int parser_ruby_sourceline; /* current line no. */
563 
565 
566 #ifndef RIPPER
567  /* Ruby core only */
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 1
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 "ripper.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;
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 "ripper.y"
5268  {
5269  lex_state = EXPR_BEG;
5270 #if 0
5272 #endif
5273  local_push(0);
5274 
5275  ;}
5276  break;
5277 
5278  case 3:
5279 #line 859 "ripper.y"
5280  {
5281 #if 0
5282  if ((yyvsp[(2) - (2)].val) && !compile_for_eval) {
5283  /* last expression should not be void */
5284  if (nd_type((yyvsp[(2) - (2)].val)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].val));
5285  else {
5286  NODE *node = (yyvsp[(2) - (2)].val);
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)].val)));
5294 #endif
5295  (yyval.val) = (yyvsp[(2) - (2)].val);
5296  parser->result = dispatch1(program, (yyval.val));
5297 
5298  local_pop();
5299  ;}
5300  break;
5301 
5302  case 4:
5303 #line 882 "ripper.y"
5304  {
5305 #if 0
5306  void_stmts((yyvsp[(1) - (2)].val));
5308 #endif
5309 
5310  (yyval.val) = (yyvsp[(1) - (2)].val);
5311  ;}
5312  break;
5313 
5314  case 5:
5315 #line 893 "ripper.y"
5316  {
5317 #if 0
5318  (yyval.val) = NEW_BEGIN(0);
5319 #endif
5320  (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new),
5321  dispatch0(void_stmt));
5322 
5323  ;}
5324  break;
5325 
5326  case 6:
5327 #line 902 "ripper.y"
5328  {
5329 #if 0
5330  (yyval.val) = newline_node((yyvsp[(1) - (1)].val));
5331 #endif
5332  (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new), (yyvsp[(1) - (1)].val));
5333 
5334  ;}
5335  break;
5336 
5337  case 7:
5338 #line 910 "ripper.y"
5339  {
5340 #if 0
5341  (yyval.val) = block_append((yyvsp[(1) - (3)].val), newline_node((yyvsp[(3) - (3)].val)));
5342 #endif
5343  (yyval.val) = dispatch2(stmts_add, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5344 
5345  ;}
5346  break;
5347 
5348  case 8:
5349 #line 918 "ripper.y"
5350  {
5351  (yyval.val) = remove_begin((yyvsp[(2) - (2)].val));
5352  ;}
5353  break;
5354 
5355  case 10:
5356 #line 925 "ripper.y"
5357  {
5358 #if 0
5359  /* local_push(0); */
5360 #endif
5361 
5362  ;}
5363  break;
5364 
5365  case 11:
5366 #line 932 "ripper.y"
5367  {
5368 #if 0
5370  (yyvsp[(4) - (5)].val));
5371  /* NEW_PREEXE($4)); */
5372  /* local_pop(); */
5373  (yyval.val) = NEW_BEGIN(0);
5374 #endif
5375  (yyval.val) = dispatch1(BEGIN, (yyvsp[(4) - (5)].val));
5376 
5377  ;}
5378  break;
5379 
5380  case 12:
5381 #line 949 "ripper.y"
5382  {
5383 #if 0
5384  (yyval.val) = (yyvsp[(1) - (4)].val);
5385  if ((yyvsp[(2) - (4)].val)) {
5386  (yyval.val) = NEW_RESCUE((yyvsp[(1) - (4)].val), (yyvsp[(2) - (4)].val), (yyvsp[(3) - (4)].val));
5387  }
5388  else if ((yyvsp[(3) - (4)].val)) {
5389  rb_warn0("else without rescue is useless");
5390  (yyval.val) = block_append((yyval.val), (yyvsp[(3) - (4)].val));
5391  }
5392  if ((yyvsp[(4) - (4)].val)) {
5393  if ((yyval.val)) {
5394  (yyval.val) = NEW_ENSURE((yyval.val), (yyvsp[(4) - (4)].val));
5395  }
5396  else {
5397  (yyval.val) = block_append((yyvsp[(4) - (4)].val), NEW_NIL());
5398  }
5399  }
5400  fixpos((yyval.val), (yyvsp[(1) - (4)].val));
5401 #endif
5402  (yyval.val) = dispatch4(bodystmt,
5403  escape_Qundef((yyvsp[(1) - (4)].val)),
5404  escape_Qundef((yyvsp[(2) - (4)].val)),
5405  escape_Qundef((yyvsp[(3) - (4)].val)),
5406  escape_Qundef((yyvsp[(4) - (4)].val)));
5407 
5408  ;}
5409  break;
5410 
5411  case 13:
5412 #line 979 "ripper.y"
5413  {
5414 #if 0
5415  void_stmts((yyvsp[(1) - (2)].val));
5417 #endif
5418 
5419  (yyval.val) = (yyvsp[(1) - (2)].val);
5420  ;}
5421  break;
5422 
5423  case 14:
5424 #line 990 "ripper.y"
5425  {
5426 #if 0
5427  (yyval.val) = NEW_BEGIN(0);
5428 #endif
5429  (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new),
5430  dispatch0(void_stmt));
5431 
5432  ;}
5433  break;
5434 
5435  case 15:
5436 #line 999 "ripper.y"
5437  {
5438 #if 0
5439  (yyval.val) = newline_node((yyvsp[(1) - (1)].val));
5440 #endif
5441  (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new), (yyvsp[(1) - (1)].val));
5442 
5443  ;}
5444  break;
5445 
5446  case 16:
5447 #line 1007 "ripper.y"
5448  {
5449 #if 0
5450  (yyval.val) = block_append((yyvsp[(1) - (3)].val), newline_node((yyvsp[(3) - (3)].val)));
5451 #endif
5452  (yyval.val) = dispatch2(stmts_add, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5453 
5454  ;}
5455  break;
5456 
5457  case 17:
5458 #line 1015 "ripper.y"
5459  {
5460  (yyval.val) = remove_begin((yyvsp[(2) - (2)].val));
5461  ;}
5462  break;
5463 
5464  case 18:
5465 #line 1021 "ripper.y"
5466  {
5467  (yyval.val) = (yyvsp[(1) - (1)].val);
5468  ;}
5469  break;
5470 
5471  case 19:
5472 #line 1025 "ripper.y"
5473  {
5474  yyerror("BEGIN is permitted only at toplevel");
5475 #if 0
5476  /* local_push(0); */
5477 #endif
5478 
5479  ;}
5480  break;
5481 
5482  case 20:
5483 #line 1033 "ripper.y"
5484  {
5485 #if 0
5487  (yyvsp[(4) - (5)].val));
5488  /* NEW_PREEXE($4)); */
5489  /* local_pop(); */
5490  (yyval.val) = NEW_BEGIN(0);
5491 #endif
5492  (yyval.val) = dispatch1(BEGIN, (yyvsp[(4) - (5)].val));
5493 
5494  ;}
5495  break;
5496 
5497  case 21:
5498 #line 1045 "ripper.y"
5499  {lex_state = EXPR_FNAME;;}
5500  break;
5501 
5502  case 22:
5503 #line 1046 "ripper.y"
5504  {
5505 #if 0
5506  (yyval.val) = NEW_ALIAS((yyvsp[(2) - (4)].val), (yyvsp[(4) - (4)].val));
5507 #endif
5508  (yyval.val) = dispatch2(alias, (yyvsp[(2) - (4)].val), (yyvsp[(4) - (4)].val));
5509 
5510  ;}
5511  break;
5512 
5513  case 23:
5514 #line 1054 "ripper.y"
5515  {
5516 #if 0
5517  (yyval.val) = NEW_VALIAS((yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
5518 #endif
5519  (yyval.val) = dispatch2(var_alias, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
5520 
5521  ;}
5522  break;
5523 
5524  case 24:
5525 #line 1062 "ripper.y"
5526  {
5527 #if 0
5528  char buf[2];
5529  buf[0] = '$';
5530  buf[1] = (char)(yyvsp[(3) - (3)].val)->nd_nth;
5531  (yyval.val) = NEW_VALIAS((yyvsp[(2) - (3)].val), rb_intern2(buf, 2));
5532 #endif
5533  (yyval.val) = dispatch2(var_alias, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
5534 
5535  ;}
5536  break;
5537 
5538  case 25:
5539 #line 1073 "ripper.y"
5540  {
5541 #if 0
5542  yyerror("can't make alias for the number variables");
5543  (yyval.val) = NEW_BEGIN(0);
5544 #endif
5545  (yyval.val) = dispatch2(var_alias, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
5546  (yyval.val) = dispatch1(alias_error, (yyval.val));
5547 
5548  ;}
5549  break;
5550 
5551  case 26:
5552 #line 1083 "ripper.y"
5553  {
5554 #if 0
5555  (yyval.val) = (yyvsp[(2) - (2)].val);
5556 #endif
5557  (yyval.val) = dispatch1(undef, (yyvsp[(2) - (2)].val));
5558 
5559  ;}
5560  break;
5561 
5562  case 27:
5563 #line 1091 "ripper.y"
5564  {
5565 #if 0
5566  (yyval.val) = NEW_IF(cond((yyvsp[(3) - (3)].val)), remove_begin((yyvsp[(1) - (3)].val)), 0);
5567  fixpos((yyval.val), (yyvsp[(3) - (3)].val));
5568 #endif
5569  (yyval.val) = dispatch2(if_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val));
5570 
5571  ;}
5572  break;
5573 
5574  case 28:
5575 #line 1100 "ripper.y"
5576  {
5577 #if 0
5578  (yyval.val) = NEW_UNLESS(cond((yyvsp[(3) - (3)].val)), remove_begin((yyvsp[(1) - (3)].val)), 0);
5579  fixpos((yyval.val), (yyvsp[(3) - (3)].val));
5580 #endif
5581  (yyval.val) = dispatch2(unless_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val));
5582 
5583  ;}
5584  break;
5585 
5586  case 29:
5587 #line 1109 "ripper.y"
5588  {
5589 #if 0
5590  if ((yyvsp[(1) - (3)].val) && nd_type((yyvsp[(1) - (3)].val)) == NODE_BEGIN) {
5591  (yyval.val) = NEW_WHILE(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val)->nd_body, 0);
5592  }
5593  else {
5594  (yyval.val) = NEW_WHILE(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val), 1);
5595  }
5596 #endif
5597  (yyval.val) = dispatch2(while_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val));
5598 
5599  ;}
5600  break;
5601 
5602  case 30:
5603 #line 1122 "ripper.y"
5604  {
5605 #if 0
5606  if ((yyvsp[(1) - (3)].val) && nd_type((yyvsp[(1) - (3)].val)) == NODE_BEGIN) {
5607  (yyval.val) = NEW_UNTIL(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val)->nd_body, 0);
5608  }
5609  else {
5610  (yyval.val) = NEW_UNTIL(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val), 1);
5611  }
5612 #endif
5613  (yyval.val) = dispatch2(until_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val));
5614 
5615  ;}
5616  break;
5617 
5618  case 31:
5619 #line 1135 "ripper.y"
5620  {
5621 #if 0
5622  NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].val)), 0);
5623  (yyval.val) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].val)), resq, 0);
5624 #endif
5625  (yyval.val) = dispatch2(rescue_mod, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5626 
5627  ;}
5628  break;
5629 
5630  case 32:
5631 #line 1144 "ripper.y"
5632  {
5633  if (in_def || in_single) {
5634  rb_warn0("END in method; use at_exit");
5635  }
5636 #if 0
5637  (yyval.val) = NEW_POSTEXE(NEW_NODE(
5638  NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].val) /* body */, 0 /* args */));
5639 #endif
5640  (yyval.val) = dispatch1(END, (yyvsp[(3) - (4)].val));
5641 
5642  ;}
5643  break;
5644 
5645  case 34:
5646 #line 1157 "ripper.y"
5647  {
5648 #if 0
5649  value_expr((yyvsp[(3) - (3)].val));
5650  (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val);
5651  (yyval.val) = (yyvsp[(1) - (3)].val);
5652 #endif
5653  (yyval.val) = dispatch2(massign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5654 
5655  ;}
5656  break;
5657 
5658  case 35:
5659 #line 1167 "ripper.y"
5660  {
5661  value_expr((yyvsp[(3) - (3)].val));
5662  (yyval.val) = new_op_assign((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
5663  ;}
5664  break;
5665 
5666  case 36:
5667 #line 1172 "ripper.y"
5668  {
5669 #if 0
5670  NODE *args;
5671 
5672  value_expr((yyvsp[(6) - (6)].val));
5673  if (!(yyvsp[(3) - (6)].val)) (yyvsp[(3) - (6)].val) = NEW_ZARRAY();
5674  args = arg_concat((yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val));
5675  if ((yyvsp[(5) - (6)].val) == tOROP) {
5676  (yyvsp[(5) - (6)].val) = 0;
5677  }
5678  else if ((yyvsp[(5) - (6)].val) == tANDOP) {
5679  (yyvsp[(5) - (6)].val) = 1;
5680  }
5681  (yyval.val) = NEW_OP_ASGN1((yyvsp[(1) - (6)].val), (yyvsp[(5) - (6)].val), args);
5682  fixpos((yyval.val), (yyvsp[(1) - (6)].val));
5683 #endif
5684  (yyval.val) = dispatch2(aref_field, (yyvsp[(1) - (6)].val), escape_Qundef((yyvsp[(3) - (6)].val)));
5685  (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
5686 
5687  ;}
5688  break;
5689 
5690  case 37:
5691 #line 1193 "ripper.y"
5692  {
5693  value_expr((yyvsp[(5) - (5)].val));
5694  (yyval.val) = new_attr_op_assign((yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
5695  ;}
5696  break;
5697 
5698  case 38:
5699 #line 1198 "ripper.y"
5700  {
5701  value_expr((yyvsp[(5) - (5)].val));
5702  (yyval.val) = new_attr_op_assign((yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
5703  ;}
5704  break;
5705 
5706  case 39:
5707 #line 1203 "ripper.y"
5708  {
5709 #if 0
5710  (yyval.val) = NEW_COLON2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val));
5711  (yyval.val) = new_const_op_assign((yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
5712 #endif
5713  (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val));
5714  (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
5715 
5716  ;}
5717  break;
5718 
5719  case 40:
5720 #line 1213 "ripper.y"
5721  {
5722  value_expr((yyvsp[(5) - (5)].val));
5723  (yyval.val) = new_attr_op_assign((yyvsp[(1) - (5)].val), ripper_intern("::"), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
5724  ;}
5725  break;
5726 
5727  case 41:
5728 #line 1218 "ripper.y"
5729  {
5730 #if 0
5731  rb_backref_error((yyvsp[(1) - (3)].val));
5732  (yyval.val) = NEW_BEGIN(0);
5733 #endif
5734  (yyval.val) = dispatch2(assign, dispatch1(var_field, (yyvsp[(1) - (3)].val)), (yyvsp[(3) - (3)].val));
5735  (yyval.val) = dispatch1(assign_error, (yyval.val));
5736 
5737  ;}
5738  break;
5739 
5740  case 42:
5741 #line 1228 "ripper.y"
5742  {
5743 #if 0
5744  value_expr((yyvsp[(3) - (3)].val));
5745  (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5746 #endif
5747  (yyval.val) = dispatch2(assign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5748 
5749  ;}
5750  break;
5751 
5752  case 43:
5753 #line 1237 "ripper.y"
5754  {
5755 #if 0
5756  (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val);
5757  (yyval.val) = (yyvsp[(1) - (3)].val);
5758 #endif
5759  (yyval.val) = dispatch2(massign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5760 
5761  ;}
5762  break;
5763 
5764  case 44:
5765 #line 1246 "ripper.y"
5766  {
5767 #if 0
5768  (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val);
5769  (yyval.val) = (yyvsp[(1) - (3)].val);
5770 #endif
5771  (yyval.val) = dispatch2(massign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5772 
5773  ;}
5774  break;
5775 
5776  case 46:
5777 #line 1258 "ripper.y"
5778  {
5779 #if 0
5780  value_expr((yyvsp[(3) - (3)].val));
5781  (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5782 #endif
5783  (yyval.val) = dispatch2(assign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5784 
5785  ;}
5786  break;
5787 
5788  case 47:
5789 #line 1267 "ripper.y"
5790  {
5791 #if 0
5792  value_expr((yyvsp[(3) - (3)].val));
5793  (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5794 #endif
5795  (yyval.val) = dispatch2(assign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5796 
5797  ;}
5798  break;
5799 
5800  case 49:
5801 #line 1280 "ripper.y"
5802  {
5803 #if 0
5804  (yyval.val) = logop(NODE_AND, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5805 #endif
5806  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("and"), (yyvsp[(3) - (3)].val));
5807 
5808  ;}
5809  break;
5810 
5811  case 50:
5812 #line 1288 "ripper.y"
5813  {
5814 #if 0
5815  (yyval.val) = logop(NODE_OR, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5816 #endif
5817  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("or"), (yyvsp[(3) - (3)].val));
5818 
5819  ;}
5820  break;
5821 
5822  case 51:
5823 #line 1296 "ripper.y"
5824  {
5825 #if 0
5826  (yyval.val) = call_uni_op(cond((yyvsp[(3) - (3)].val)), '!');
5827 #endif
5828  (yyval.val) = dispatch2(unary, ripper_intern("not"), (yyvsp[(3) - (3)].val));
5829 
5830  ;}
5831  break;
5832 
5833  case 52:
5834 #line 1304 "ripper.y"
5835  {
5836 #if 0
5837  (yyval.val) = call_uni_op(cond((yyvsp[(2) - (2)].val)), '!');
5838 #endif
5839  (yyval.val) = dispatch2(unary, ripper_id2sym('!'), (yyvsp[(2) - (2)].val));
5840 
5841  ;}
5842  break;
5843 
5844  case 54:
5845 #line 1315 "ripper.y"
5846  {
5847 #if 0
5848  value_expr((yyvsp[(1) - (1)].val));
5849  (yyval.val) = (yyvsp[(1) - (1)].val);
5850  if (!(yyval.val)) (yyval.val) = NEW_NIL();
5851 #endif
5852  (yyval.val) = (yyvsp[(1) - (1)].val);
5853 
5854  ;}
5855  break;
5856 
5857  case 58:
5858 #line 1332 "ripper.y"
5859  {
5860 #if 0
5861  (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
5862 #endif
5863  (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), (yyvsp[(2) - (4)].val), (yyvsp[(3) - (4)].val));
5864  (yyval.val) = method_arg((yyval.val), (yyvsp[(4) - (4)].val));
5865 
5866  ;}
5867  break;
5868 
5869  case 59:
5870 #line 1343 "ripper.y"
5871  {
5872  (yyvsp[(1) - (1)].vars) = dyna_push();
5873 #if 0
5874  (yyval.num) = ruby_sourceline;
5875 #endif
5876 
5877  ;}
5878  break;
5879 
5880  case 60:
5881 #line 1353 "ripper.y"
5882  {
5883 #if 0
5884  (yyval.val) = NEW_ITER((yyvsp[(3) - (5)].val),(yyvsp[(4) - (5)].val));
5885  nd_set_line((yyval.val), (yyvsp[(2) - (5)].num));
5886 #endif
5887  (yyval.val) = dispatch2(brace_block, escape_Qundef((yyvsp[(3) - (5)].val)), (yyvsp[(4) - (5)].val));
5888 
5889  dyna_pop((yyvsp[(1) - (5)].vars));
5890  ;}
5891  break;
5892 
5893  case 61:
5894 #line 1365 "ripper.y"
5895  {
5896 #if 0
5897  (yyval.val) = NEW_FCALL((yyvsp[(1) - (1)].val), 0);
5898  nd_set_line((yyval.val), tokline);
5899 #endif
5900 
5901  ;}
5902  break;
5903 
5904  case 62:
5905 #line 1375 "ripper.y"
5906  {
5907 #if 0
5908  (yyval.val) = (yyvsp[(1) - (2)].val);
5909  (yyval.val)->nd_args = (yyvsp[(2) - (2)].val);
5910 #endif
5911  (yyval.val) = dispatch2(command, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
5912 
5913  ;}
5914  break;
5915 
5916  case 63:
5917 #line 1384 "ripper.y"
5918  {
5919 #if 0
5920  block_dup_check((yyvsp[(2) - (3)].val),(yyvsp[(3) - (3)].val));
5921  (yyvsp[(1) - (3)].val)->nd_args = (yyvsp[(2) - (3)].val);
5922  (yyvsp[(3) - (3)].val)->nd_iter = (yyvsp[(1) - (3)].val);
5923  (yyval.val) = (yyvsp[(3) - (3)].val);
5924  fixpos((yyval.val), (yyvsp[(1) - (3)].val));
5925 #endif
5926  (yyval.val) = dispatch2(command, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
5927  (yyval.val) = method_add_block((yyval.val), (yyvsp[(3) - (3)].val));
5928 
5929  ;}
5930  break;
5931 
5932  case 64:
5933 #line 1397 "ripper.y"
5934  {
5935 #if 0
5936  (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
5937  fixpos((yyval.val), (yyvsp[(1) - (4)].val));
5938 #endif
5939  (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (4)].val), ripper_id2sym('.'), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
5940 
5941  ;}
5942  break;
5943 
5944  case 65:
5945 #line 1406 "ripper.y"
5946  {
5947 #if 0
5948  block_dup_check((yyvsp[(4) - (5)].val),(yyvsp[(5) - (5)].val));
5949  (yyvsp[(5) - (5)].val)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
5950  (yyval.val) = (yyvsp[(5) - (5)].val);
5951  fixpos((yyval.val), (yyvsp[(1) - (5)].val));
5952 #endif
5953  (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
5954  (yyval.val) = method_add_block((yyval.val), (yyvsp[(5) - (5)].val));
5955 
5956  ;}
5957  break;
5958 
5959  case 66:
5960 #line 1418 "ripper.y"
5961  {
5962 #if 0
5963  (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
5964  fixpos((yyval.val), (yyvsp[(1) - (4)].val));
5965 #endif
5966  (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (4)].val), ripper_intern("::"), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
5967 
5968  ;}
5969  break;
5970 
5971  case 67:
5972 #line 1427 "ripper.y"
5973  {
5974 #if 0
5975  block_dup_check((yyvsp[(4) - (5)].val),(yyvsp[(5) - (5)].val));
5976  (yyvsp[(5) - (5)].val)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
5977  (yyval.val) = (yyvsp[(5) - (5)].val);
5978  fixpos((yyval.val), (yyvsp[(1) - (5)].val));
5979 #endif
5980  (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (5)].val), ripper_intern("::"), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
5981  (yyval.val) = method_add_block((yyval.val), (yyvsp[(5) - (5)].val));
5982 
5983  ;}
5984  break;
5985 
5986  case 68:
5987 #line 1439 "ripper.y"
5988  {
5989 #if 0
5990  (yyval.val) = NEW_SUPER((yyvsp[(2) - (2)].val));
5991  fixpos((yyval.val), (yyvsp[(2) - (2)].val));
5992 #endif
5993  (yyval.val) = dispatch1(super, (yyvsp[(2) - (2)].val));
5994 
5995  ;}
5996  break;
5997 
5998  case 69:
5999 #line 1448 "ripper.y"
6000  {
6001 #if 0
6002  (yyval.val) = new_yield((yyvsp[(2) - (2)].val));
6003  fixpos((yyval.val), (yyvsp[(2) - (2)].val));
6004 #endif
6005  (yyval.val) = dispatch1(yield, (yyvsp[(2) - (2)].val));
6006 
6007  ;}
6008  break;
6009 
6010  case 70:
6011 #line 1457 "ripper.y"
6012  {
6013 #if 0
6014  (yyval.val) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].val)));
6015 #endif
6016  (yyval.val) = dispatch1(return, (yyvsp[(2) - (2)].val));
6017 
6018  ;}
6019  break;
6020 
6021  case 71:
6022 #line 1465 "ripper.y"
6023  {
6024 #if 0
6025  (yyval.val) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].val)));
6026 #endif
6027  (yyval.val) = dispatch1(break, (yyvsp[(2) - (2)].val));
6028 
6029  ;}
6030  break;
6031 
6032  case 72:
6033 #line 1473 "ripper.y"
6034  {
6035 #if 0
6036  (yyval.val) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].val)));
6037 #endif
6038  (yyval.val) = dispatch1(next, (yyvsp[(2) - (2)].val));
6039 
6040  ;}
6041  break;
6042 
6043  case 74:
6044 #line 1484 "ripper.y"
6045  {
6046 #if 0
6047  (yyval.val) = (yyvsp[(2) - (3)].val);
6048 #endif
6049  (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val));
6050 
6051  ;}
6052  break;
6053 
6054  case 76:
6055 #line 1495 "ripper.y"
6056  {
6057 #if 0
6058  (yyval.val) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].val)), 0);
6059 #endif
6060  (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val));
6061 
6062  ;}
6063  break;
6064 
6065  case 77:
6066 #line 1505 "ripper.y"
6067  {
6068 #if 0
6069  (yyval.val) = NEW_MASGN((yyvsp[(1) - (1)].val), 0);
6070 #endif
6071  (yyval.val) = (yyvsp[(1) - (1)].val);
6072 
6073  ;}
6074  break;
6075 
6076  case 78:
6077 #line 1513 "ripper.y"
6078  {
6079 #if 0
6080  (yyval.val) = NEW_MASGN(list_append((yyvsp[(1) - (2)].val),(yyvsp[(2) - (2)].val)), 0);
6081 #endif
6082  (yyval.val) = mlhs_add((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
6083 
6084  ;}
6085  break;
6086 
6087  case 79:
6088 #line 1521 "ripper.y"
6089  {
6090 #if 0
6091  (yyval.val) = NEW_MASGN((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6092 #endif
6093  (yyval.val) = mlhs_add_star((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6094 
6095  ;}
6096  break;
6097 
6098  case 80:
6099 #line 1529 "ripper.y"
6100  {
6101 #if 0
6102  (yyval.val) = NEW_MASGN((yyvsp[(1) - (5)].val), NEW_POSTARG((yyvsp[(3) - (5)].val),(yyvsp[(5) - (5)].val)));
6103 #endif
6104  (yyvsp[(1) - (5)].val) = mlhs_add_star((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val));
6105  (yyval.val) = mlhs_add((yyvsp[(1) - (5)].val), (yyvsp[(5) - (5)].val));
6106 
6107  ;}
6108  break;
6109 
6110  case 81:
6111 #line 1538 "ripper.y"
6112  {
6113 #if 0
6114  (yyval.val) = NEW_MASGN((yyvsp[(1) - (2)].val), -1);
6115 #endif
6116  (yyval.val) = mlhs_add_star((yyvsp[(1) - (2)].val), Qnil);
6117 
6118  ;}
6119  break;
6120 
6121  case 82:
6122 #line 1546 "ripper.y"
6123  {
6124 #if 0
6125  (yyval.val) = NEW_MASGN((yyvsp[(1) - (4)].val), NEW_POSTARG(-1, (yyvsp[(4) - (4)].val)));
6126 #endif
6127  (yyvsp[(1) - (4)].val) = mlhs_add_star((yyvsp[(1) - (4)].val), Qnil);
6128  (yyval.val) = mlhs_add((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val));
6129 
6130  ;}
6131  break;
6132 
6133  case 83:
6134 #line 1555 "ripper.y"
6135  {
6136 #if 0
6137  (yyval.val) = NEW_MASGN(0, (yyvsp[(2) - (2)].val));
6138 #endif
6139  (yyval.val) = mlhs_add_star(mlhs_new(), (yyvsp[(2) - (2)].val));
6140 
6141  ;}
6142  break;
6143 
6144  case 84:
6145 #line 1563 "ripper.y"
6146  {
6147 #if 0
6148  (yyval.val) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].val),(yyvsp[(4) - (4)].val)));
6149 #endif
6150  (yyvsp[(2) - (4)].val) = mlhs_add_star(mlhs_new(), (yyvsp[(2) - (4)].val));
6151  (yyval.val) = mlhs_add((yyvsp[(2) - (4)].val), (yyvsp[(4) - (4)].val));
6152 
6153  ;}
6154  break;
6155 
6156  case 85:
6157 #line 1572 "ripper.y"
6158  {
6159 #if 0
6160  (yyval.val) = NEW_MASGN(0, -1);
6161 #endif
6162  (yyval.val) = mlhs_add_star(mlhs_new(), Qnil);
6163 
6164  ;}
6165  break;
6166 
6167  case 86:
6168 #line 1580 "ripper.y"
6169  {
6170 #if 0
6171  (yyval.val) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].val)));
6172 #endif
6173  (yyval.val) = mlhs_add_star(mlhs_new(), Qnil);
6174  (yyval.val) = mlhs_add((yyval.val), (yyvsp[(3) - (3)].val));
6175 
6176  ;}
6177  break;
6178 
6179  case 88:
6180 #line 1592 "ripper.y"
6181  {
6182 #if 0
6183  (yyval.val) = (yyvsp[(2) - (3)].val);
6184 #endif
6185  (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val));
6186 
6187  ;}
6188  break;
6189 
6190  case 89:
6191 #line 1602 "ripper.y"
6192  {
6193 #if 0
6194  (yyval.val) = NEW_LIST((yyvsp[(1) - (2)].val));
6195 #endif
6196  (yyval.val) = mlhs_add(mlhs_new(), (yyvsp[(1) - (2)].val));
6197 
6198  ;}
6199  break;
6200 
6201  case 90:
6202 #line 1610 "ripper.y"
6203  {
6204 #if 0
6205  (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
6206 #endif
6207  (yyval.val) = mlhs_add((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
6208 
6209  ;}
6210  break;
6211 
6212  case 91:
6213 #line 1620 "ripper.y"
6214  {
6215 #if 0
6216  (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val));
6217 #endif
6218  (yyval.val) = mlhs_add(mlhs_new(), (yyvsp[(1) - (1)].val));
6219 
6220  ;}
6221  break;
6222 
6223  case 92:
6224 #line 1628 "ripper.y"
6225  {
6226 #if 0
6227  (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6228 #endif
6229  (yyval.val) = mlhs_add((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6230 
6231  ;}
6232  break;
6233 
6234  case 93:
6235 #line 1638 "ripper.y"
6236  {
6237  (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
6238  ;}
6239  break;
6240 
6241  case 94:
6242 #line 1642 "ripper.y"
6243  {
6244  (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
6245  ;}
6246  break;
6247 
6248  case 95:
6249 #line 1646 "ripper.y"
6250  {
6251 #if 0
6252  (yyval.val) = aryset((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val));
6253 #endif
6254  (yyval.val) = dispatch2(aref_field, (yyvsp[(1) - (4)].val), escape_Qundef((yyvsp[(3) - (4)].val)));
6255 
6256  ;}
6257  break;
6258 
6259  case 96:
6260 #line 1654 "ripper.y"
6261  {
6262 #if 0
6263  (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6264 #endif
6265  (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), (yyvsp[(3) - (3)].val));
6266 
6267  ;}
6268  break;
6269 
6270  case 97:
6271 #line 1662 "ripper.y"
6272  {
6273 #if 0
6274  (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6275 #endif
6276  (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6277 
6278  ;}
6279  break;
6280 
6281  case 98:
6282 #line 1670 "ripper.y"
6283  {
6284 #if 0
6285  (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6286 #endif
6287  (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), (yyvsp[(3) - (3)].val));
6288 
6289  ;}
6290  break;
6291 
6292  case 99:
6293 #line 1678 "ripper.y"
6294  {
6295 #if 0
6296  if (in_def || in_single)
6297  yyerror("dynamic constant assignment");
6298  (yyval.val) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)));
6299 #endif
6300  if (in_def || in_single)
6301  yyerror("dynamic constant assignment");
6302  (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6303 
6304  ;}
6305  break;
6306 
6307  case 100:
6308 #line 1690 "ripper.y"
6309  {
6310 #if 0
6311  if (in_def || in_single)
6312  yyerror("dynamic constant assignment");
6313  (yyval.val) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].val)));
6314 #endif
6315  (yyval.val) = dispatch1(top_const_field, (yyvsp[(2) - (2)].val));
6316 
6317  ;}
6318  break;
6319 
6320  case 101:
6321 #line 1700 "ripper.y"
6322  {
6323 #if 0
6324  rb_backref_error((yyvsp[(1) - (1)].val));
6325  (yyval.val) = NEW_BEGIN(0);
6326 #endif
6327  (yyval.val) = dispatch1(var_field, (yyvsp[(1) - (1)].val));
6328  (yyval.val) = dispatch1(assign_error, (yyval.val));
6329 
6330  ;}
6331  break;
6332 
6333  case 102:
6334 #line 1712 "ripper.y"
6335  {
6336  (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
6337 #if 0
6338  if (!(yyval.val)) (yyval.val) = NEW_BEGIN(0);
6339 #endif
6340  (yyval.val) = dispatch1(var_field, (yyval.val));
6341 
6342  ;}
6343  break;
6344 
6345  case 103:
6346 #line 1721 "ripper.y"
6347  {
6348  (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
6349 #if 0
6350  if (!(yyval.val)) (yyval.val) = NEW_BEGIN(0);
6351 #endif
6352  (yyval.val) = dispatch1(var_field, (yyval.val));
6353 
6354  ;}
6355  break;
6356 
6357  case 104:
6358 #line 1730 "ripper.y"
6359  {
6360 #if 0
6361  (yyval.val) = aryset((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val));
6362 #endif
6363  (yyval.val) = dispatch2(aref_field, (yyvsp[(1) - (4)].val), escape_Qundef((yyvsp[(3) - (4)].val)));
6364 
6365  ;}
6366  break;
6367 
6368  case 105:
6369 #line 1738 "ripper.y"
6370  {
6371 #if 0
6372  (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6373 #endif
6374  (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), (yyvsp[(3) - (3)].val));
6375 
6376  ;}
6377  break;
6378 
6379  case 106:
6380 #line 1746 "ripper.y"
6381  {
6382 #if 0
6383  (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6384 #endif
6385  (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_intern("::"), (yyvsp[(3) - (3)].val));
6386 
6387  ;}
6388  break;
6389 
6390  case 107:
6391 #line 1754 "ripper.y"
6392  {
6393 #if 0
6394  (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6395 #endif
6396  (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), (yyvsp[(3) - (3)].val));
6397 
6398  ;}
6399  break;
6400 
6401  case 108:
6402 #line 1762 "ripper.y"
6403  {
6404 #if 0
6405  if (in_def || in_single)
6406  yyerror("dynamic constant assignment");
6407  (yyval.val) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)));
6408 #endif
6409  (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6410  if (in_def || in_single) {
6411  (yyval.val) = dispatch1(assign_error, (yyval.val));
6412  }
6413 
6414  ;}
6415  break;
6416 
6417  case 109:
6418 #line 1775 "ripper.y"
6419  {
6420 #if 0
6421  if (in_def || in_single)
6422  yyerror("dynamic constant assignment");
6423  (yyval.val) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].val)));
6424 #endif
6425  (yyval.val) = dispatch1(top_const_field, (yyvsp[(2) - (2)].val));
6426  if (in_def || in_single) {
6427  (yyval.val) = dispatch1(assign_error, (yyval.val));
6428  }
6429 
6430  ;}
6431  break;
6432 
6433  case 110:
6434 #line 1788 "ripper.y"
6435  {
6436 #if 0
6437  rb_backref_error((yyvsp[(1) - (1)].val));
6438  (yyval.val) = NEW_BEGIN(0);
6439 #endif
6440  (yyval.val) = dispatch1(assign_error, (yyvsp[(1) - (1)].val));
6441 
6442  ;}
6443  break;
6444 
6445  case 111:
6446 #line 1799 "ripper.y"
6447  {
6448 #if 0
6449  yyerror("class/module name must be CONSTANT");
6450 #endif
6451  (yyval.val) = dispatch1(class_name_error, (yyvsp[(1) - (1)].val));
6452 
6453  ;}
6454  break;
6455 
6456  case 113:
6457 #line 1810 "ripper.y"
6458  {
6459 #if 0
6460  (yyval.val) = NEW_COLON3((yyvsp[(2) - (2)].val));
6461 #endif
6462  (yyval.val) = dispatch1(top_const_ref, (yyvsp[(2) - (2)].val));
6463 
6464  ;}
6465  break;
6466 
6467  case 114:
6468 #line 1818 "ripper.y"
6469  {
6470 #if 0
6471  (yyval.val) = NEW_COLON2(0, (yyval.val));
6472 #endif
6473  (yyval.val) = dispatch1(const_ref, (yyvsp[(1) - (1)].val));
6474 
6475  ;}
6476  break;
6477 
6478  case 115:
6479 #line 1826 "ripper.y"
6480  {
6481 #if 0
6482  (yyval.val) = NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6483 #endif
6484  (yyval.val) = dispatch2(const_path_ref, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6485 
6486  ;}
6487  break;
6488 
6489  case 119:
6490 #line 1839 "ripper.y"
6491  {
6492  lex_state = EXPR_ENDFN;
6493  (yyval.val) = (yyvsp[(1) - (1)].val);
6494  ;}
6495  break;
6496 
6497  case 120:
6498 #line 1844 "ripper.y"
6499  {
6500  lex_state = EXPR_ENDFN;
6501 #if 0
6502  (yyval.val) = (yyvsp[(1) - (1)].id);
6503 #endif
6504  (yyval.val) = (yyvsp[(1) - (1)].val);
6505 
6506  ;}
6507  break;
6508 
6509  case 123:
6510 #line 1859 "ripper.y"
6511  {
6512 #if 0
6513  (yyval.val) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].val)));
6514 #endif
6515  (yyval.val) = dispatch1(symbol_literal, (yyvsp[(1) - (1)].val));
6516 
6517  ;}
6518  break;
6519 
6520  case 125:
6521 #line 1870 "ripper.y"
6522  {
6523 #if 0
6524  (yyval.val) = NEW_UNDEF((yyvsp[(1) - (1)].val));
6525 #endif
6526  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
6527 
6528  ;}
6529  break;
6530 
6531  case 126:
6532 #line 1877 "ripper.y"
6533  {lex_state = EXPR_FNAME;;}
6534  break;
6535 
6536  case 127:
6537 #line 1878 "ripper.y"
6538  {
6539 #if 0
6540  (yyval.val) = block_append((yyvsp[(1) - (4)].val), NEW_UNDEF((yyvsp[(4) - (4)].val)));
6541 #endif
6542  rb_ary_push((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val));
6543 
6544  ;}
6545  break;
6546 
6547  case 128:
6548 #line 1887 "ripper.y"
6549  { ifndef_ripper((yyval.val) = '|'); ;}
6550  break;
6551 
6552  case 129:
6553 #line 1888 "ripper.y"
6554  { ifndef_ripper((yyval.val) = '^'); ;}
6555  break;
6556 
6557  case 130:
6558 #line 1889 "ripper.y"
6559  { ifndef_ripper((yyval.val) = '&'); ;}
6560  break;
6561 
6562  case 131:
6563 #line 1890 "ripper.y"
6564  { ifndef_ripper((yyval.val) = tCMP); ;}
6565  break;
6566 
6567  case 132:
6568 #line 1891 "ripper.y"
6569  { ifndef_ripper((yyval.val) = tEQ); ;}
6570  break;
6571 
6572  case 133:
6573 #line 1892 "ripper.y"
6574  { ifndef_ripper((yyval.val) = tEQQ); ;}
6575  break;
6576 
6577  case 134:
6578 #line 1893 "ripper.y"
6579  { ifndef_ripper((yyval.val) = tMATCH); ;}
6580  break;
6581 
6582  case 135:
6583 #line 1894 "ripper.y"
6584  { ifndef_ripper((yyval.val) = tNMATCH); ;}
6585  break;
6586 
6587  case 136:
6588 #line 1895 "ripper.y"
6589  { ifndef_ripper((yyval.val) = '>'); ;}
6590  break;
6591 
6592  case 137:
6593 #line 1896 "ripper.y"
6594  { ifndef_ripper((yyval.val) = tGEQ); ;}
6595  break;
6596 
6597  case 138:
6598 #line 1897 "ripper.y"
6599  { ifndef_ripper((yyval.val) = '<'); ;}
6600  break;
6601 
6602  case 139:
6603 #line 1898 "ripper.y"
6604  { ifndef_ripper((yyval.val) = tLEQ); ;}
6605  break;
6606 
6607  case 140:
6608 #line 1899 "ripper.y"
6609  { ifndef_ripper((yyval.val) = tNEQ); ;}
6610  break;
6611 
6612  case 141:
6613 #line 1900 "ripper.y"
6614  { ifndef_ripper((yyval.val) = tLSHFT); ;}
6615  break;
6616 
6617  case 142:
6618 #line 1901 "ripper.y"
6619  { ifndef_ripper((yyval.val) = tRSHFT); ;}
6620  break;
6621 
6622  case 143:
6623 #line 1902 "ripper.y"
6624  { ifndef_ripper((yyval.val) = '+'); ;}
6625  break;
6626 
6627  case 144:
6628 #line 1903 "ripper.y"
6629  { ifndef_ripper((yyval.val) = '-'); ;}
6630  break;
6631 
6632  case 145:
6633 #line 1904 "ripper.y"
6634  { ifndef_ripper((yyval.val) = '*'); ;}
6635  break;
6636 
6637  case 146:
6638 #line 1905 "ripper.y"
6639  { ifndef_ripper((yyval.val) = '*'); ;}
6640  break;
6641 
6642  case 147:
6643 #line 1906 "ripper.y"
6644  { ifndef_ripper((yyval.val) = '/'); ;}
6645  break;
6646 
6647  case 148:
6648 #line 1907 "ripper.y"
6649  { ifndef_ripper((yyval.val) = '%'); ;}
6650  break;
6651 
6652  case 149:
6653 #line 1908 "ripper.y"
6654  { ifndef_ripper((yyval.val) = tPOW); ;}
6655  break;
6656 
6657  case 150:
6658 #line 1909 "ripper.y"
6659  { ifndef_ripper((yyval.val) = tDSTAR); ;}
6660  break;
6661 
6662  case 151:
6663 #line 1910 "ripper.y"
6664  { ifndef_ripper((yyval.val) = '!'); ;}
6665  break;
6666 
6667  case 152:
6668 #line 1911 "ripper.y"
6669  { ifndef_ripper((yyval.val) = '~'); ;}
6670  break;
6671 
6672  case 153:
6673 #line 1912 "ripper.y"
6674  { ifndef_ripper((yyval.val) = tUPLUS); ;}
6675  break;
6676 
6677  case 154:
6678 #line 1913 "ripper.y"
6679  { ifndef_ripper((yyval.val) = tUMINUS); ;}
6680  break;
6681 
6682  case 155:
6683 #line 1914 "ripper.y"
6684  { ifndef_ripper((yyval.val) = tAREF); ;}
6685  break;
6686 
6687  case 156:
6688 #line 1915 "ripper.y"
6689  { ifndef_ripper((yyval.val) = tASET); ;}
6690  break;
6691 
6692  case 157:
6693 #line 1916 "ripper.y"
6694  { ifndef_ripper((yyval.val) = '`'); ;}
6695  break;
6696 
6697  case 199:
6698 #line 1934 "ripper.y"
6699  {
6700 #if 0
6701  value_expr((yyvsp[(3) - (3)].val));
6702  (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6703 #endif
6704  (yyval.val) = dispatch2(assign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6705 
6706  ;}
6707  break;
6708 
6709  case 200:
6710 #line 1943 "ripper.y"
6711  {
6712 #if 0
6713  value_expr((yyvsp[(3) - (5)].val));
6714  (yyvsp[(3) - (5)].val) = NEW_RESCUE((yyvsp[(3) - (5)].val), NEW_RESBODY(0,(yyvsp[(5) - (5)].val),0), 0);
6715  (yyval.val) = node_assign((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val));
6716 #endif
6717  (yyval.val) = dispatch2(assign, (yyvsp[(1) - (5)].val), dispatch2(rescue_mod, (yyvsp[(3) - (5)].val), (yyvsp[(5) - (5)].val)));
6718 
6719  ;}
6720  break;
6721 
6722  case 201:
6723 #line 1953 "ripper.y"
6724  {
6725  value_expr((yyvsp[(3) - (3)].val));
6726  (yyval.val) = new_op_assign((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
6727  ;}
6728  break;
6729 
6730  case 202:
6731 #line 1958 "ripper.y"
6732  {
6733 #if 0
6734  value_expr((yyvsp[(3) - (5)].val));
6735  (yyvsp[(3) - (5)].val) = NEW_RESCUE((yyvsp[(3) - (5)].val), NEW_RESBODY(0,(yyvsp[(5) - (5)].val),0), 0);
6736 #endif
6737  (yyvsp[(3) - (5)].val) = dispatch2(rescue_mod, (yyvsp[(3) - (5)].val), (yyvsp[(5) - (5)].val));
6738 
6739  (yyval.val) = new_op_assign((yyvsp[(1) - (5)].val), (yyvsp[(2) - (5)].val), (yyvsp[(3) - (5)].val));
6740  ;}
6741  break;
6742 
6743  case 203:
6744 #line 1968 "ripper.y"
6745  {
6746 #if 0
6747  NODE *args;
6748 
6749  value_expr((yyvsp[(6) - (6)].val));
6750  if (!(yyvsp[(3) - (6)].val)) (yyvsp[(3) - (6)].val) = NEW_ZARRAY();
6751  if (nd_type((yyvsp[(3) - (6)].val)) == NODE_BLOCK_PASS) {
6752  args = NEW_ARGSCAT((yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val));
6753  }
6754  else {
6755  args = arg_concat((yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val));
6756  }
6757  if ((yyvsp[(5) - (6)].val) == tOROP) {
6758  (yyvsp[(5) - (6)].val) = 0;
6759  }
6760  else if ((yyvsp[(5) - (6)].val) == tANDOP) {
6761  (yyvsp[(5) - (6)].val) = 1;
6762  }
6763  (yyval.val) = NEW_OP_ASGN1((yyvsp[(1) - (6)].val), (yyvsp[(5) - (6)].val), args);
6764  fixpos((yyval.val), (yyvsp[(1) - (6)].val));
6765 #endif
6766  (yyvsp[(1) - (6)].val) = dispatch2(aref_field, (yyvsp[(1) - (6)].val), escape_Qundef((yyvsp[(3) - (6)].val)));
6767  (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
6768 
6769  ;}
6770  break;
6771 
6772  case 204:
6773 #line 1994 "ripper.y"
6774  {
6775  value_expr((yyvsp[(5) - (5)].val));
6776  (yyval.val) = new_attr_op_assign((yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
6777  ;}
6778  break;
6779 
6780  case 205:
6781 #line 1999 "ripper.y"
6782  {
6783  value_expr((yyvsp[(5) - (5)].val));
6784  (yyval.val) = new_attr_op_assign((yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
6785  ;}
6786  break;
6787 
6788  case 206:
6789 #line 2004 "ripper.y"
6790  {
6791  value_expr((yyvsp[(5) - (5)].val));
6792  (yyval.val) = new_attr_op_assign((yyvsp[(1) - (5)].val), ripper_intern("::"), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
6793  ;}
6794  break;
6795 
6796  case 207:
6797 #line 2009 "ripper.y"
6798  {
6799 #if 0
6800  (yyval.val) = NEW_COLON2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val));
6801  (yyval.val) = new_const_op_assign((yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
6802 #endif
6803  (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val));
6804  (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
6805 
6806  ;}
6807  break;
6808 
6809  case 208:
6810 #line 2019 "ripper.y"
6811  {
6812 #if 0
6813  (yyval.val) = NEW_COLON3((yyvsp[(2) - (4)].val));
6814  (yyval.val) = new_const_op_assign((yyval.val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
6815 #endif
6816  (yyval.val) = dispatch1(top_const_field, (yyvsp[(2) - (4)].val));
6817  (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
6818 
6819  ;}
6820  break;
6821 
6822  case 209:
6823 #line 2029 "ripper.y"
6824  {
6825 #if 0
6826  rb_backref_error((yyvsp[(1) - (3)].val));
6827  (yyval.val) = NEW_BEGIN(0);
6828 #endif
6829  (yyval.val) = dispatch1(var_field, (yyvsp[(1) - (3)].val));
6830  (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
6831  (yyval.val) = dispatch1(assign_error, (yyval.val));
6832 
6833  ;}
6834  break;
6835 
6836  case 210:
6837 #line 2040 "ripper.y"
6838  {
6839 #if 0
6840  value_expr((yyvsp[(1) - (3)].val));
6841  value_expr((yyvsp[(3) - (3)].val));
6842  (yyval.val) = NEW_DOT2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6843  if (nd_type((yyvsp[(1) - (3)].val)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].val)->nd_lit) &&
6844  nd_type((yyvsp[(3) - (3)].val)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].val)->nd_lit)) {
6846  }
6847 #endif
6848  (yyval.val) = dispatch2(dot2, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6849 
6850  ;}
6851  break;
6852 
6853  case 211:
6854 #line 2054 "ripper.y"
6855  {
6856 #if 0
6857  value_expr((yyvsp[(1) - (3)].val));
6858  value_expr((yyvsp[(3) - (3)].val));
6859  (yyval.val) = NEW_DOT3((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6860  if (nd_type((yyvsp[(1) - (3)].val)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].val)->nd_lit) &&
6861  nd_type((yyvsp[(3) - (3)].val)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].val)->nd_lit)) {
6863  }
6864 #endif
6865  (yyval.val) = dispatch2(dot3, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6866 
6867  ;}
6868  break;
6869 
6870  case 212:
6871 #line 2068 "ripper.y"
6872  {
6873 #if 0
6874  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '+', (yyvsp[(3) - (3)].val));
6875 #endif
6876  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('+'), (yyvsp[(3) - (3)].val));
6877 
6878  ;}
6879  break;
6880 
6881  case 213:
6882 #line 2076 "ripper.y"
6883  {
6884 #if 0
6885  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '-', (yyvsp[(3) - (3)].val));
6886 #endif
6887  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('-'), (yyvsp[(3) - (3)].val));
6888 
6889  ;}
6890  break;
6891 
6892  case 214:
6893 #line 2084 "ripper.y"
6894  {
6895 #if 0
6896  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '*', (yyvsp[(3) - (3)].val));
6897 #endif
6898  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('*'), (yyvsp[(3) - (3)].val));
6899 
6900  ;}
6901  break;
6902 
6903  case 215:
6904 #line 2092 "ripper.y"
6905  {
6906 #if 0
6907  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '/', (yyvsp[(3) - (3)].val));
6908 #endif
6909  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('/'), (yyvsp[(3) - (3)].val));
6910 
6911  ;}
6912  break;
6913 
6914  case 216:
6915 #line 2100 "ripper.y"
6916  {
6917 #if 0
6918  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '%', (yyvsp[(3) - (3)].val));
6919 #endif
6920  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('%'), (yyvsp[(3) - (3)].val));
6921 
6922  ;}
6923  break;
6924 
6925  case 217:
6926 #line 2108 "ripper.y"
6927  {
6928 #if 0
6929  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tPOW, (yyvsp[(3) - (3)].val));
6930 #endif
6931  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("**"), (yyvsp[(3) - (3)].val));
6932 
6933  ;}
6934  break;
6935 
6936  case 218:
6937 #line 2116 "ripper.y"
6938  {
6939 #if 0
6940  (yyval.val) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].val), tPOW, (yyvsp[(4) - (4)].val)), tUMINUS, 0);
6941 #endif
6942  (yyval.val) = dispatch3(binary, (yyvsp[(2) - (4)].val), ripper_intern("**"), (yyvsp[(4) - (4)].val));
6943  (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyval.val));
6944 
6945  ;}
6946  break;
6947 
6948  case 219:
6949 #line 2125 "ripper.y"
6950  {
6951 #if 0
6952  (yyval.val) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].val), tPOW, (yyvsp[(4) - (4)].val)), tUMINUS, 0);
6953 #endif
6954  (yyval.val) = dispatch3(binary, (yyvsp[(2) - (4)].val), ripper_intern("**"), (yyvsp[(4) - (4)].val));
6955  (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyval.val));
6956 
6957  ;}
6958  break;
6959 
6960  case 220:
6961 #line 2134 "ripper.y"
6962  {
6963 #if 0
6964  (yyval.val) = call_uni_op((yyvsp[(2) - (2)].val), tUPLUS);
6965 #endif
6966  (yyval.val) = dispatch2(unary, ripper_intern("+@"), (yyvsp[(2) - (2)].val));
6967 
6968  ;}
6969  break;
6970 
6971  case 221:
6972 #line 2142 "ripper.y"
6973  {
6974 #if 0
6975  (yyval.val) = call_uni_op((yyvsp[(2) - (2)].val), tUMINUS);
6976 #endif
6977  (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyvsp[(2) - (2)].val));
6978 
6979  ;}
6980  break;
6981 
6982  case 222:
6983 #line 2150 "ripper.y"
6984  {
6985 #if 0
6986  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '|', (yyvsp[(3) - (3)].val));
6987 #endif
6988  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('|'), (yyvsp[(3) - (3)].val));
6989 
6990  ;}
6991  break;
6992 
6993  case 223:
6994 #line 2158 "ripper.y"
6995  {
6996 #if 0
6997  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '^', (yyvsp[(3) - (3)].val));
6998 #endif
6999  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('^'), (yyvsp[(3) - (3)].val));
7000 
7001  ;}
7002  break;
7003 
7004  case 224:
7005 #line 2166 "ripper.y"
7006  {
7007 #if 0
7008  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '&', (yyvsp[(3) - (3)].val));
7009 #endif
7010  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('&'), (yyvsp[(3) - (3)].val));
7011 
7012  ;}
7013  break;
7014 
7015  case 225:
7016 #line 2174 "ripper.y"
7017  {
7018 #if 0
7019  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tCMP, (yyvsp[(3) - (3)].val));
7020 #endif
7021  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("<=>"), (yyvsp[(3) - (3)].val));
7022 
7023  ;}
7024  break;
7025 
7026  case 226:
7027 #line 2182 "ripper.y"
7028  {
7029 #if 0
7030  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '>', (yyvsp[(3) - (3)].val));
7031 #endif
7032  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('>'), (yyvsp[(3) - (3)].val));
7033 
7034  ;}
7035  break;
7036 
7037  case 227:
7038 #line 2190 "ripper.y"
7039  {
7040 #if 0
7041  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tGEQ, (yyvsp[(3) - (3)].val));
7042 #endif
7043  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern(">="), (yyvsp[(3) - (3)].val));
7044 
7045  ;}
7046  break;
7047 
7048  case 228:
7049 #line 2198 "ripper.y"
7050  {
7051 #if 0
7052  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '<', (yyvsp[(3) - (3)].val));
7053 #endif
7054  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('<'), (yyvsp[(3) - (3)].val));
7055 
7056  ;}
7057  break;
7058 
7059  case 229:
7060 #line 2206 "ripper.y"
7061  {
7062 #if 0
7063  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tLEQ, (yyvsp[(3) - (3)].val));
7064 #endif
7065  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("<="), (yyvsp[(3) - (3)].val));
7066 
7067  ;}
7068  break;
7069 
7070  case 230:
7071 #line 2214 "ripper.y"
7072  {
7073 #if 0
7074  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tEQ, (yyvsp[(3) - (3)].val));
7075 #endif
7076  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("=="), (yyvsp[(3) - (3)].val));
7077 
7078  ;}
7079  break;
7080 
7081  case 231:
7082 #line 2222 "ripper.y"
7083  {
7084 #if 0
7085  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tEQQ, (yyvsp[(3) - (3)].val));
7086 #endif
7087  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("==="), (yyvsp[(3) - (3)].val));
7088 
7089  ;}
7090  break;
7091 
7092  case 232:
7093 #line 2230 "ripper.y"
7094  {
7095 #if 0
7096  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tNEQ, (yyvsp[(3) - (3)].val));
7097 #endif
7098  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("!="), (yyvsp[(3) - (3)].val));
7099 
7100  ;}
7101  break;
7102 
7103  case 233:
7104 #line 2238 "ripper.y"
7105  {
7106 #if 0
7107  (yyval.val) = match_op((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
7108  if (nd_type((yyvsp[(1) - (3)].val)) == NODE_LIT && RB_TYPE_P((yyvsp[(1) - (3)].val)->nd_lit, T_REGEXP)) {
7109  (yyval.val) = reg_named_capture_assign((yyvsp[(1) - (3)].val)->nd_lit, (yyval.val));
7110  }
7111 #endif
7112  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("=~"), (yyvsp[(3) - (3)].val));
7113 
7114  ;}
7115  break;
7116 
7117  case 234:
7118 #line 2249 "ripper.y"
7119  {
7120 #if 0
7121  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tNMATCH, (yyvsp[(3) - (3)].val));
7122 #endif
7123  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("!~"), (yyvsp[(3) - (3)].val));
7124 
7125  ;}
7126  break;
7127 
7128  case 235:
7129 #line 2257 "ripper.y"
7130  {
7131 #if 0
7132  (yyval.val) = call_uni_op(cond((yyvsp[(2) - (2)].val)), '!');
7133 #endif
7134  (yyval.val) = dispatch2(unary, ID2SYM('!'), (yyvsp[(2) - (2)].val));
7135 
7136  ;}
7137  break;
7138 
7139  case 236:
7140 #line 2265 "ripper.y"
7141  {
7142 #if 0
7143  (yyval.val) = call_uni_op((yyvsp[(2) - (2)].val), '~');
7144 #endif
7145  (yyval.val) = dispatch2(unary, ID2SYM('~'), (yyvsp[(2) - (2)].val));
7146 
7147  ;}
7148  break;
7149 
7150  case 237:
7151 #line 2273 "ripper.y"
7152  {
7153 #if 0
7154  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tLSHFT, (yyvsp[(3) - (3)].val));
7155 #endif
7156  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("<<"), (yyvsp[(3) - (3)].val));
7157 
7158  ;}
7159  break;
7160 
7161  case 238:
7162 #line 2281 "ripper.y"
7163  {
7164 #if 0
7165  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tRSHFT, (yyvsp[(3) - (3)].val));
7166 #endif
7167  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern(">>"), (yyvsp[(3) - (3)].val));
7168 
7169  ;}
7170  break;
7171 
7172  case 239:
7173 #line 2289 "ripper.y"
7174  {
7175 #if 0
7176  (yyval.val) = logop(NODE_AND, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
7177 #endif
7178  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("&&"), (yyvsp[(3) - (3)].val));
7179 
7180  ;}
7181  break;
7182 
7183  case 240:
7184 #line 2297 "ripper.y"
7185  {
7186 #if 0
7187  (yyval.val) = logop(NODE_OR, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
7188 #endif
7189  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("||"), (yyvsp[(3) - (3)].val));
7190 
7191  ;}
7192  break;
7193 
7194  case 241:
7195 #line 2304 "ripper.y"
7196  {in_defined = 1;;}
7197  break;
7198 
7199  case 242:
7200 #line 2305 "ripper.y"
7201  {
7202 #if 0
7203  in_defined = 0;
7204  (yyval.val) = NEW_DEFINED((yyvsp[(4) - (4)].val));
7205 #endif
7206  in_defined = 0;
7207  (yyval.val) = dispatch1(defined, (yyvsp[(4) - (4)].val));
7208 
7209  ;}
7210  break;
7211 
7212  case 243:
7213 #line 2315 "ripper.y"
7214  {
7215 #if 0
7216  value_expr((yyvsp[(1) - (6)].val));
7217  (yyval.val) = NEW_IF(cond((yyvsp[(1) - (6)].val)), (yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val));
7218  fixpos((yyval.val), (yyvsp[(1) - (6)].val));
7219 #endif
7220  (yyval.val) = dispatch3(ifop, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val));
7221 
7222  ;}
7223  break;
7224 
7225  case 244:
7226 #line 2325 "ripper.y"
7227  {
7228  (yyval.val) = (yyvsp[(1) - (1)].val);
7229  ;}
7230  break;
7231 
7232  case 245:
7233 #line 2331 "ripper.y"
7234  {
7235 #if 0
7236  value_expr((yyvsp[(1) - (1)].val));
7237  (yyval.val) = (yyvsp[(1) - (1)].val);
7238  if (!(yyval.val)) (yyval.val) = NEW_NIL();
7239 #endif
7240  (yyval.val) = (yyvsp[(1) - (1)].val);
7241 
7242  ;}
7243  break;
7244 
7245  case 247:
7246 #line 2344 "ripper.y"
7247  {
7248  (yyval.val) = (yyvsp[(1) - (2)].val);
7249  ;}
7250  break;
7251 
7252  case 248:
7253 #line 2348 "ripper.y"
7254  {
7255 #if 0
7256  (yyval.val) = arg_append((yyvsp[(1) - (4)].val), NEW_HASH((yyvsp[(3) - (4)].val)));
7257 #endif
7258  (yyval.val) = arg_add_assocs((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val));
7259 
7260  ;}
7261  break;
7262 
7263  case 249:
7264 #line 2356 "ripper.y"
7265  {
7266 #if 0
7267  (yyval.val) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].val)));
7268 #endif
7269  (yyval.val) = arg_add_assocs(arg_new(), (yyvsp[(1) - (2)].val));
7270 
7271  ;}
7272  break;
7273 
7274  case 250:
7275 #line 2366 "ripper.y"
7276  {
7277 #if 0
7278  (yyval.val) = (yyvsp[(2) - (3)].val);
7279 #endif
7280  (yyval.val) = dispatch1(arg_paren, escape_Qundef((yyvsp[(2) - (3)].val)));
7281 
7282  ;}
7283  break;
7284 
7285  case 255:
7286 #line 2382 "ripper.y"
7287  {
7288  (yyval.val) = (yyvsp[(1) - (2)].val);
7289  ;}
7290  break;
7291 
7292  case 256:
7293 #line 2386 "ripper.y"
7294  {
7295 #if 0
7296  (yyval.val) = arg_append((yyvsp[(1) - (4)].val), NEW_HASH((yyvsp[(3) - (4)].val)));
7297 #endif
7298  (yyval.val) = arg_add_assocs((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val));
7299 
7300  ;}
7301  break;
7302 
7303  case 257:
7304 #line 2394 "ripper.y"
7305  {
7306 #if 0
7307  (yyval.val) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].val)));
7308 #endif
7309  (yyval.val) = arg_add_assocs(arg_new(), (yyvsp[(1) - (2)].val));
7310 
7311  ;}
7312  break;
7313 
7314  case 258:
7315 #line 2404 "ripper.y"
7316  {
7317 #if 0
7318  value_expr((yyvsp[(1) - (1)].val));
7319  (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val));
7320 #endif
7321  (yyval.val) = arg_add(arg_new(), (yyvsp[(1) - (1)].val));
7322 
7323  ;}
7324  break;
7325 
7326  case 259:
7327 #line 2413 "ripper.y"
7328  {
7329 #if 0
7330  (yyval.val) = arg_blk_pass((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
7331 #endif
7332  (yyval.val) = arg_add_optblock((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
7333 
7334  ;}
7335  break;
7336 
7337  case 260:
7338 #line 2421 "ripper.y"
7339  {
7340 #if 0
7341  (yyval.val) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].val)));
7342  (yyval.val) = arg_blk_pass((yyval.val), (yyvsp[(2) - (2)].val));
7343 #endif
7344  (yyval.val) = arg_add_assocs(arg_new(), (yyvsp[(1) - (2)].val));
7345  (yyval.val) = arg_add_optblock((yyval.val), (yyvsp[(2) - (2)].val));
7346 
7347  ;}
7348  break;
7349 
7350  case 261:
7351 #line 2431 "ripper.y"
7352  {
7353 #if 0
7354  (yyval.val) = arg_append((yyvsp[(1) - (4)].val), NEW_HASH((yyvsp[(3) - (4)].val)));
7355  (yyval.val) = arg_blk_pass((yyval.val), (yyvsp[(4) - (4)].val));
7356 #endif
7357  (yyval.val) = arg_add_optblock(arg_add_assocs((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val)), (yyvsp[(4) - (4)].val));
7358 
7359  ;}
7360  break;
7361 
7362  case 262:
7363 #line 2442 "ripper.y"
7364  {
7365  (yyval.val) = arg_add_block(arg_new(), (yyvsp[(1) - (1)].val));
7366  ;}
7367  break;
7368 
7369  case 263:
7370 #line 2448 "ripper.y"
7371  {
7372  (yyval.val) = cmdarg_stack;
7373  CMDARG_PUSH(1);
7374  ;}
7375  break;
7376 
7377  case 264:
7378 #line 2453 "ripper.y"
7379  {
7380  /* CMDARG_POP() */
7381  cmdarg_stack = (yyvsp[(1) - (2)].val);
7382  (yyval.val) = (yyvsp[(2) - (2)].val);
7383  ;}
7384  break;
7385 
7386  case 265:
7387 #line 2461 "ripper.y"
7388  {
7389 #if 0
7390  (yyval.val) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].val));
7391 #endif
7392  (yyval.val) = (yyvsp[(2) - (2)].val);
7393 
7394  ;}
7395  break;
7396 
7397  case 266:
7398 #line 2471 "ripper.y"
7399  {
7400  (yyval.val) = (yyvsp[(2) - (2)].val);
7401  ;}
7402  break;
7403 
7404  case 267:
7405 #line 2475 "ripper.y"
7406  {
7407  (yyval.val) = 0;
7408  ;}
7409  break;
7410 
7411  case 268:
7412 #line 2481 "ripper.y"
7413  {
7414 #if 0
7415  (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val));
7416 #endif
7417  (yyval.val) = arg_add(arg_new(), (yyvsp[(1) - (1)].val));
7418 
7419  ;}
7420  break;
7421 
7422  case 269:
7423 #line 2489 "ripper.y"
7424  {
7425 #if 0
7426  (yyval.val) = NEW_SPLAT((yyvsp[(2) - (2)].val));
7427 #endif
7428  (yyval.val) = arg_add_star(arg_new(), (yyvsp[(2) - (2)].val));
7429 
7430  ;}
7431  break;
7432 
7433  case 270:
7434 #line 2497 "ripper.y"
7435  {
7436 #if 0
7437  NODE *n1;
7438  if ((n1 = splat_array((yyvsp[(1) - (3)].val))) != 0) {
7439  (yyval.val) = list_append(n1, (yyvsp[(3) - (3)].val));
7440  }
7441  else {
7442  (yyval.val) = arg_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
7443  }
7444 #endif
7445  (yyval.val) = arg_add((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
7446 
7447  ;}
7448  break;
7449 
7450  case 271:
7451 #line 2511 "ripper.y"
7452  {
7453 #if 0
7454  NODE *n1;
7455  if ((nd_type((yyvsp[(4) - (4)].val)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].val))) != 0) {
7456  (yyval.val) = list_concat(n1, (yyvsp[(4) - (4)].val));
7457  }
7458  else {
7459  (yyval.val) = arg_concat((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val));
7460  }
7461 #endif
7462  (yyval.val) = arg_add_star((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val));
7463 
7464  ;}
7465  break;
7466 
7467  case 272:
7468 #line 2527 "ripper.y"
7469  {
7470 #if 0
7471  NODE *n1;
7472  if ((n1 = splat_array((yyvsp[(1) - (3)].val))) != 0) {
7473  (yyval.val) = list_append(n1, (yyvsp[(3) - (3)].val));
7474  }
7475  else {
7476  (yyval.val) = arg_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
7477  }
7478 #endif
7479  (yyval.val) = mrhs_add(args2mrhs((yyvsp[(1) - (3)].val)), (yyvsp[(3) - (3)].val));
7480 
7481  ;}
7482  break;
7483 
7484  case 273:
7485 #line 2541 "ripper.y"
7486  {
7487 #if 0
7488  NODE *n1;
7489  if (nd_type((yyvsp[(4) - (4)].val)) == NODE_ARRAY &&
7490  (n1 = splat_array((yyvsp[(1) - (4)].val))) != 0) {
7491  (yyval.val) = list_concat(n1, (yyvsp[(4) - (4)].val));
7492  }
7493  else {
7494  (yyval.val) = arg_concat((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val));
7495  }
7496 #endif
7497  (yyval.val) = mrhs_add_star(args2mrhs((yyvsp[(1) - (4)].val)), (yyvsp[(4) - (4)].val));
7498 
7499  ;}
7500  break;
7501 
7502  case 274:
7503 #line 2556 "ripper.y"
7504  {
7505 #if 0
7506  (yyval.val) = NEW_SPLAT((yyvsp[(2) - (2)].val));
7507 #endif
7508  (yyval.val) = mrhs_add_star(mrhs_new(), (yyvsp[(2) - (2)].val));
7509 
7510  ;}
7511  break;
7512 
7513  case 285:
7514 #line 2576 "ripper.y"
7515  {
7516 #if 0
7517  (yyval.val) = NEW_FCALL((yyvsp[(1) - (1)].val), 0);
7518 #endif
7519  (yyval.val) = method_arg(dispatch1(fcall, (yyvsp[(1) - (1)].val)), arg_new());
7520 
7521  ;}
7522  break;
7523 
7524  case 286:
7525 #line 2584 "ripper.y"
7526  {
7527  (yyvsp[(1) - (1)].val) = cmdarg_stack;
7528  cmdarg_stack = 0;
7529 #if 0
7530  (yyval.num) = ruby_sourceline;
7531 #endif
7532 
7533  ;}
7534  break;
7535 
7536  case 287:
7537 #line 2594 "ripper.y"
7538  {
7539  cmdarg_stack = (yyvsp[(1) - (4)].val);
7540 #if 0
7541  if ((yyvsp[(3) - (4)].val) == NULL) {
7542  (yyval.val) = NEW_NIL();
7543  }
7544  else {
7545  if (nd_type((yyvsp[(3) - (4)].val)) == NODE_RESCUE ||
7546  nd_type((yyvsp[(3) - (4)].val)) == NODE_ENSURE)
7547  nd_set_line((yyvsp[(3) - (4)].val), (yyvsp[(2) - (4)].num));
7548  (yyval.val) = NEW_BEGIN((yyvsp[(3) - (4)].val));
7549  }
7550  nd_set_line((yyval.val), (yyvsp[(2) - (4)].num));
7551 #endif
7552  (yyval.val) = dispatch1(begin, (yyvsp[(3) - (4)].val));
7553 
7554  ;}
7555  break;
7556 
7557  case 288:
7558 #line 2611 "ripper.y"
7559  {lex_state = EXPR_ENDARG;;}
7560  break;
7561 
7562  case 289:
7563 #line 2612 "ripper.y"
7564  {
7565 #if 0
7566  (yyval.val) = 0;
7567 #endif
7568  (yyval.val) = dispatch1(paren, 0);
7569 
7570  ;}
7571  break;
7572 
7573  case 290:
7574 #line 2619 "ripper.y"
7575  {lex_state = EXPR_ENDARG;;}
7576  break;
7577 
7578  case 291:
7579 #line 2620 "ripper.y"
7580  {
7581 #if 0
7582  (yyval.val) = (yyvsp[(2) - (4)].val);
7583 #endif
7584  (yyval.val) = dispatch1(paren, (yyvsp[(2) - (4)].val));
7585 
7586  ;}
7587  break;
7588 
7589  case 292:
7590 #line 2628 "ripper.y"
7591  {
7592 #if 0
7593  (yyval.val) = (yyvsp[(2) - (3)].val);
7594 #endif
7595  (yyval.val) = dispatch1(paren, (yyvsp[(2) - (3)].val));
7596 
7597  ;}
7598  break;
7599 
7600  case 293:
7601 #line 2636 "ripper.y"
7602  {
7603 #if 0
7604  (yyval.val) = NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
7605 #endif
7606  (yyval.val) = dispatch2(const_path_ref, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
7607 
7608  ;}
7609  break;
7610 
7611  case 294:
7612 #line 2644 "ripper.y"
7613  {
7614 #if 0
7615  (yyval.val) = NEW_COLON3((yyvsp[(2) - (2)].val));
7616 #endif
7617  (yyval.val) = dispatch1(top_const_ref, (yyvsp[(2) - (2)].val));
7618 
7619  ;}
7620  break;
7621 
7622  case 295:
7623 #line 2652 "ripper.y"
7624  {
7625 #if 0
7626  if ((yyvsp[(2) - (3)].val) == 0) {
7627  (yyval.val) = NEW_ZARRAY(); /* zero length array*/
7628  }
7629  else {
7630  (yyval.val) = (yyvsp[(2) - (3)].val);
7631  }
7632 #endif
7633  (yyval.val) = dispatch1(array, escape_Qundef((yyvsp[(2) - (3)].val)));
7634 
7635  ;}
7636  break;
7637 
7638  case 296:
7639 #line 2665 "ripper.y"
7640  {
7641 #if 0
7642  (yyval.val) = NEW_HASH((yyvsp[(2) - (3)].val));
7643 #endif
7644  (yyval.val) = dispatch1(hash, escape_Qundef((yyvsp[(2) - (3)].val)));
7645 
7646  ;}
7647  break;
7648 
7649  case 297:
7650 #line 2673 "ripper.y"
7651  {
7652 #if 0
7653  (yyval.val) = NEW_RETURN(0);
7654 #endif
7655  (yyval.val) = dispatch0(return0);
7656 
7657  ;}
7658  break;
7659 
7660  case 298:
7661 #line 2681 "ripper.y"
7662  {
7663 #if 0
7664  (yyval.val) = new_yield((yyvsp[(3) - (4)].val));
7665 #endif
7666  (yyval.val) = dispatch1(yield, dispatch1(paren, (yyvsp[(3) - (4)].val)));
7667 
7668  ;}
7669  break;
7670 
7671  case 299:
7672 #line 2689 "ripper.y"
7673  {
7674 #if 0
7675  (yyval.val) = NEW_YIELD(0);
7676 #endif
7677  (yyval.val) = dispatch1(yield, dispatch1(paren, arg_new()));
7678 
7679  ;}
7680  break;
7681 
7682  case 300:
7683 #line 2697 "ripper.y"
7684  {
7685 #if 0
7686  (yyval.val) = NEW_YIELD(0);
7687 #endif
7688  (yyval.val) = dispatch0(yield0);
7689 
7690  ;}
7691  break;
7692 
7693  case 301:
7694 #line 2704 "ripper.y"
7695  {in_defined = 1;;}
7696  break;
7697 
7698  case 302:
7699 #line 2705 "ripper.y"
7700  {
7701 #if 0
7702  in_defined = 0;
7703  (yyval.val) = NEW_DEFINED((yyvsp[(5) - (6)].val));
7704 #endif
7705  in_defined = 0;
7706  (yyval.val) = dispatch1(defined, (yyvsp[(5) - (6)].val));
7707 
7708  ;}
7709  break;
7710 
7711  case 303:
7712 #line 2715 "ripper.y"
7713  {
7714 #if 0
7715  (yyval.val) = call_uni_op(cond((yyvsp[(3) - (4)].val)), '!');
7716 #endif
7717  (yyval.val) = dispatch2(unary, ripper_intern("not"), (yyvsp[(3) - (4)].val));
7718 
7719  ;}
7720  break;
7721 
7722  case 304:
7723 #line 2723 "ripper.y"
7724  {
7725 #if 0
7726  (yyval.val) = call_uni_op(cond(NEW_NIL()), '!');
7727 #endif
7728  (yyval.val) = dispatch2(unary, ripper_intern("not"), Qnil);
7729 
7730  ;}
7731  break;
7732 
7733  case 305:
7734 #line 2731 "ripper.y"
7735  {
7736 #if 0
7737  (yyvsp[(2) - (2)].val)->nd_iter = (yyvsp[(1) - (2)].val);
7738  (yyval.val) = (yyvsp[(2) - (2)].val);
7739 #endif
7740  (yyval.val) = method_arg(dispatch1(fcall, (yyvsp[(1) - (2)].val)), arg_new());
7741  (yyval.val) = method_add_block((yyval.val), (yyvsp[(2) - (2)].val));
7742 
7743  ;}
7744  break;
7745 
7746  case 307:
7747 #line 2742 "ripper.y"
7748  {
7749 #if 0
7750  block_dup_check((yyvsp[(1) - (2)].val)->nd_args, (yyvsp[(2) - (2)].val));
7751  (yyvsp[(2) - (2)].val)->nd_iter = (yyvsp[(1) - (2)].val);
7752  (yyval.val) = (yyvsp[(2) - (2)].val);
7753 #endif
7754  (yyval.val) = method_add_block((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
7755 
7756  ;}
7757  break;
7758 
7759  case 308:
7760 #line 2752 "ripper.y"
7761  {
7762  (yyval.val) = (yyvsp[(2) - (2)].val);
7763  ;}
7764  break;
7765 
7766  case 309:
7767 #line 2759 "ripper.y"
7768  {
7769 #if 0
7770  (yyval.val) = NEW_IF(cond((yyvsp[(2) - (6)].val)), (yyvsp[(4) - (6)].val), (yyvsp[(5) - (6)].val));
7771  fixpos((yyval.val), (yyvsp[(2) - (6)].val));
7772 #endif
7773  (yyval.val) = dispatch3(if, (yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), escape_Qundef((yyvsp[(5) - (6)].val)));
7774 
7775  ;}
7776  break;
7777 
7778  case 310:
7779 #line 2771 "ripper.y"
7780  {
7781 #if 0
7782  (yyval.val) = NEW_UNLESS(cond((yyvsp[(2) - (6)].val)), (yyvsp[(4) - (6)].val), (yyvsp[(5) - (6)].val));
7783  fixpos((yyval.val), (yyvsp[(2) - (6)].val));
7784 #endif
7785  (yyval.val) = dispatch3(unless, (yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), escape_Qundef((yyvsp[(5) - (6)].val)));
7786 
7787  ;}
7788  break;
7789 
7790  case 311:
7791 #line 2779 "ripper.y"
7792  {COND_PUSH(1);;}
7793  break;
7794 
7795  case 312:
7796 #line 2779 "ripper.y"
7797  {COND_POP();;}
7798  break;
7799 
7800  case 313:
7801 #line 2782 "ripper.y"
7802  {
7803 #if 0
7804  (yyval.val) = NEW_WHILE(cond((yyvsp[(3) - (7)].val)), (yyvsp[(6) - (7)].val), 1);
7805  fixpos((yyval.val), (yyvsp[(3) - (7)].val));
7806 #endif
7807  (yyval.val) = dispatch2(while, (yyvsp[(3) - (7)].val), (yyvsp[(6) - (7)].val));
7808 
7809  ;}
7810  break;
7811 
7812  case 314:
7813 #line 2790 "ripper.y"
7814  {COND_PUSH(1);;}
7815  break;
7816 
7817  case 315:
7818 #line 2790 "ripper.y"
7819  {COND_POP();;}
7820  break;
7821 
7822  case 316:
7823 #line 2793 "ripper.y"
7824  {
7825 #if 0
7826  (yyval.val) = NEW_UNTIL(cond((yyvsp[(3) - (7)].val)), (yyvsp[(6) - (7)].val), 1);
7827  fixpos((yyval.val), (yyvsp[(3) - (7)].val));
7828 #endif
7829  (yyval.val) = dispatch2(until, (yyvsp[(3) - (7)].val), (yyvsp[(6) - (7)].val));
7830 
7831  ;}
7832  break;
7833 
7834  case 317:
7835 #line 2804 "ripper.y"
7836  {
7837 #if 0
7838  (yyval.val) = NEW_CASE((yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val));
7839  fixpos((yyval.val), (yyvsp[(2) - (5)].val));
7840 #endif
7841  (yyval.val) = dispatch2(case, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val));
7842 
7843  ;}
7844  break;
7845 
7846  case 318:
7847 #line 2813 "ripper.y"
7848  {
7849 #if 0
7850  (yyval.val) = NEW_CASE(0, (yyvsp[(3) - (4)].val));
7851 #endif
7852  (yyval.val) = dispatch2(case, Qnil, (yyvsp[(3) - (4)].val));
7853 
7854  ;}
7855  break;
7856 
7857  case 319:
7858 #line 2821 "ripper.y"
7859  {COND_PUSH(1);;}
7860  break;
7861 
7862  case 320:
7863 #line 2823 "ripper.y"
7864  {COND_POP();;}
7865  break;
7866 
7867  case 321:
7868 #line 2826 "ripper.y"
7869  {
7870 #if 0
7871  /*
7872  * for a, b, c in e
7873  * #=>
7874  * e.each{|*x| a, b, c = x
7875  *
7876  * for a in e
7877  * #=>
7878  * e.each{|x| a, = x}
7879  */
7880  ID id = internal_id();
7881  ID *tbl = ALLOC_N(ID, 2);
7882  NODE *m = NEW_ARGS_AUX(0, 0);
7883  NODE *args, *scope;
7884 
7885  if (nd_type((yyvsp[(2) - (9)].val)) == NODE_MASGN) {
7886  /* if args.length == 1 && args[0].kind_of?(Array)
7887  * args = args[0]
7888  * end
7889  */
7890  NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
7891  NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
7892  m->nd_next = block_append(
7893  NEW_IF(
7895  NEW_CALL(NEW_CALL(NEW_DVAR(id), idLength, 0),
7896  idEq, one),
7897  NEW_CALL(NEW_CALL(NEW_DVAR(id), idAREF, zero),
7898  rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
7899  0),
7900  NEW_DASGN_CURR(id,
7901  NEW_CALL(NEW_DVAR(id), idAREF, zero)),
7902  0),
7903  node_assign((yyvsp[(2) - (9)].val), NEW_DVAR(id)));
7904 
7905  args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
7906  }
7907  else {
7908  if (nd_type((yyvsp[(2) - (9)].val)) == NODE_LASGN ||
7909  nd_type((yyvsp[(2) - (9)].val)) == NODE_DASGN ||
7910  nd_type((yyvsp[(2) - (9)].val)) == NODE_DASGN_CURR) {
7911  (yyvsp[(2) - (9)].val)->nd_value = NEW_DVAR(id);
7912  m->nd_plen = 1;
7913  m->nd_next = (yyvsp[(2) - (9)].val);
7914  args = new_args(m, 0, 0, 0, new_args_tail(0, 0, 0));
7915  }
7916  else {
7917  m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].val)), 0), NEW_DVAR(id));
7918  args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
7919  }
7920  }
7921  scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].val), args);
7922  tbl[0] = 1; tbl[1] = id;
7923  (yyval.val) = NEW_FOR(0, (yyvsp[(5) - (9)].val), scope);
7924  fixpos((yyval.val), (yyvsp[(2) - (9)].val));
7925 #endif
7926  (yyval.val) = dispatch3(for, (yyvsp[(2) - (9)].val), (yyvsp[(5) - (9)].val), (yyvsp[(8) - (9)].val));
7927 
7928  ;}
7929  break;
7930 
7931  case 322:
7932 #line 2887 "ripper.y"
7933  {
7934  if (in_def || in_single)
7935  yyerror("class definition in method body");
7936  local_push(0);
7937 #if 0
7938  (yyval.num) = ruby_sourceline;
7939 #endif
7940 
7941  ;}
7942  break;
7943 
7944  case 323:
7945 #line 2898 "ripper.y"
7946  {
7947 #if 0
7948  (yyval.val) = NEW_CLASS((yyvsp[(2) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(3) - (6)].val));
7949  nd_set_line((yyval.val), (yyvsp[(4) - (6)].num));
7950 #endif
7951  (yyval.val) = dispatch3(class, (yyvsp[(2) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val));
7952 
7953  local_pop();
7954  ;}
7955  break;
7956 
7957  case 324:
7958 #line 2908 "ripper.y"
7959  {
7960  (yyval.num) = in_def;
7961  in_def = 0;
7962  ;}
7963  break;
7964 
7965  case 325:
7966 #line 2913 "ripper.y"
7967  {
7968  (yyval.num) = in_single;
7969  in_single = 0;
7970  local_push(0);
7971  ;}
7972  break;
7973 
7974  case 326:
7975 #line 2920 "ripper.y"
7976  {
7977 #if 0
7978  (yyval.val) = NEW_SCLASS((yyvsp[(3) - (8)].val), (yyvsp[(7) - (8)].val));
7979  fixpos((yyval.val), (yyvsp[(3) - (8)].val));
7980 #endif
7981  (yyval.val) = dispatch2(sclass, (yyvsp[(3) - (8)].val), (yyvsp[(7) - (8)].val));
7982 
7983  local_pop();
7984  in_def = (yyvsp[(4) - (8)].num);
7985  in_single = (yyvsp[(6) - (8)].num);
7986  ;}
7987  break;
7988 
7989  case 327:
7990 #line 2932 "ripper.y"
7991  {
7992  if (in_def || in_single)
7993  yyerror("module definition in method body");
7994  local_push(0);
7995 #if 0
7996  (yyval.num) = ruby_sourceline;
7997 #endif
7998 
7999  ;}
8000  break;
8001 
8002  case 328:
8003 #line 2943 "ripper.y"
8004  {
8005 #if 0
8006  (yyval.val) = NEW_MODULE((yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val));
8007  nd_set_line((yyval.val), (yyvsp[(3) - (5)].num));
8008 #endif
8009  (yyval.val) = dispatch2(module, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val));
8010 
8011  local_pop();
8012  ;}
8013  break;
8014 
8015  case 329:
8016 #line 2953 "ripper.y"
8017  {
8018  (yyval.id) = cur_mid;
8019  cur_mid = (yyvsp[(2) - (2)].val);
8020  in_def++;
8021  local_push(0);
8022  ;}
8023  break;
8024 
8025  case 330:
8026 #line 2962 "ripper.y"
8027  {
8028 #if 0
8029  NODE *body = remove_begin((yyvsp[(5) - (6)].val));
8030  reduce_nodes(&body);
8031  (yyval.val) = NEW_DEFN((yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), body, NOEX_PRIVATE);
8032  nd_set_line((yyval.val), (yyvsp[(1) - (6)].num));
8033 #endif
8034  (yyval.val) = dispatch3(def, (yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), (yyvsp[(5) - (6)].val));
8035 
8036  local_pop();
8037  in_def--;
8038  cur_mid = (yyvsp[(3) - (6)].id);
8039  ;}
8040  break;
8041 
8042  case 331:
8043 #line 2975 "ripper.y"
8044  {lex_state = EXPR_FNAME;;}
8045  break;
8046 
8047  case 332:
8048 #line 2976 "ripper.y"
8049  {
8050  in_single++;
8051  lex_state = EXPR_ENDFN; /* force for args */
8052  local_push(0);
8053  ;}
8054  break;
8055 
8056  case 333:
8057 #line 2984 "ripper.y"
8058  {
8059 #if 0
8060  NODE *body = remove_begin((yyvsp[(8) - (9)].val));
8061  reduce_nodes(&body);
8062  (yyval.val) = NEW_DEFS((yyvsp[(2) - (9)].val), (yyvsp[(5) - (9)].val), (yyvsp[(7) - (9)].val), body);
8063  nd_set_line((yyval.val), (yyvsp[(1) - (9)].num));
8064 #endif
8065  (yyval.val) = dispatch5(defs, (yyvsp[(2) - (9)].val), (yyvsp[(3) - (9)].val), (yyvsp[(5) - (9)].val), (yyvsp[(7) - (9)].val), (yyvsp[(8) - (9)].val));
8066 
8067  local_pop();
8068  in_single--;
8069  ;}
8070  break;
8071 
8072  case 334:
8073 #line 2997 "ripper.y"
8074  {
8075 #if 0
8076  (yyval.val) = NEW_BREAK(0);
8077 #endif
8078  (yyval.val) = dispatch1(break, arg_new());
8079 
8080  ;}
8081  break;
8082 
8083  case 335:
8084 #line 3005 "ripper.y"
8085  {
8086 #if 0
8087  (yyval.val) = NEW_NEXT(0);
8088 #endif
8089  (yyval.val) = dispatch1(next, arg_new());
8090 
8091  ;}
8092  break;
8093 
8094  case 336:
8095 #line 3013 "ripper.y"
8096  {
8097 #if 0
8098  (yyval.val) = NEW_REDO();
8099 #endif
8100  (yyval.val) = dispatch0(redo);
8101 
8102  ;}
8103  break;
8104 
8105  case 337:
8106 #line 3021 "ripper.y"
8107  {
8108 #if 0
8109  (yyval.val) = NEW_RETRY();
8110 #endif
8111  (yyval.val) = dispatch0(retry);
8112 
8113  ;}
8114  break;
8115 
8116  case 338:
8117 #line 3031 "ripper.y"
8118  {
8119 #if 0
8120  value_expr((yyvsp[(1) - (1)].val));
8121  (yyval.val) = (yyvsp[(1) - (1)].val);
8122  if (!(yyval.val)) (yyval.val) = NEW_NIL();
8123 #endif
8124  (yyval.val) = (yyvsp[(1) - (1)].val);
8125 
8126  ;}
8127  break;
8128 
8129  case 339:
8130 #line 3043 "ripper.y"
8131  {
8132  token_info_push("begin");
8133  ;}
8134  break;
8135 
8136  case 340:
8137 #line 3049 "ripper.y"
8138  {
8139  token_info_push("if");
8140  ;}
8141  break;
8142 
8143  case 341:
8144 #line 3055 "ripper.y"
8145  {
8146  token_info_push("unless");
8147  ;}
8148  break;
8149 
8150  case 342:
8151 #line 3061 "ripper.y"
8152  {
8153  token_info_push("while");
8154  ;}
8155  break;
8156 
8157  case 343:
8158 #line 3067 "ripper.y"
8159  {
8160  token_info_push("until");
8161  ;}
8162  break;
8163 
8164  case 344:
8165 #line 3073 "ripper.y"
8166  {
8167  token_info_push("case");
8168  ;}
8169  break;
8170 
8171  case 345:
8172 #line 3079 "ripper.y"
8173  {
8174  token_info_push("for");
8175  ;}
8176  break;
8177 
8178  case 346:
8179 #line 3085 "ripper.y"
8180  {
8181  token_info_push("class");
8182  ;}
8183  break;
8184 
8185  case 347:
8186 #line 3091 "ripper.y"
8187  {
8188  token_info_push("module");
8189  ;}
8190  break;
8191 
8192  case 348:
8193 #line 3097 "ripper.y"
8194  {
8195  token_info_push("def");
8196 #if 0
8197  (yyval.num) = ruby_sourceline;
8198 #endif
8199 
8200  ;}
8201  break;
8202 
8203  case 349:
8204 #line 3107 "ripper.y"
8205  {
8206  token_info_pop("end");
8207  ;}
8208  break;
8209 
8210  case 350:
8211 #line 3115 "ripper.y"
8212  { (yyval.val) = Qnil; ;}
8213  break;
8214 
8215  case 352:
8216 #line 3121 "ripper.y"
8217  { (yyval.val) = (yyvsp[(2) - (2)].val); ;}
8218  break;
8219 
8220  case 353:
8221 #line 3128 "ripper.y"
8222  { (yyval.val) = Qnil; ;}
8223  break;
8224 
8225  case 356:
8226 #line 3137 "ripper.y"
8227  {
8228 #if 0
8229  (yyval.val) = NEW_IF(cond((yyvsp[(2) - (5)].val)), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
8230  fixpos((yyval.val), (yyvsp[(2) - (5)].val));
8231 #endif
8232  (yyval.val) = dispatch3(elsif, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val), escape_Qundef((yyvsp[(5) - (5)].val)));
8233 
8234  ;}
8235  break;
8236 
8237  case 358:
8238 #line 3149 "ripper.y"
8239  {
8240 #if 0
8241  (yyval.val) = (yyvsp[(2) - (2)].val);
8242 #endif
8243  (yyval.val) = dispatch1(else, (yyvsp[(2) - (2)].val));
8244 
8245  ;}
8246  break;
8247 
8248  case 361:
8249 #line 3163 "ripper.y"
8250  {
8251  (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
8252 #if 0
8253 #endif
8254  (yyval.val) = dispatch1(mlhs_paren, (yyval.val));
8255 
8256  ;}
8257  break;
8258 
8259  case 362:
8260 #line 3171 "ripper.y"
8261  {
8262 #if 0
8263  (yyval.val) = (yyvsp[(2) - (3)].val);
8264 #endif
8265  (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val));
8266 
8267  ;}
8268  break;
8269 
8270  case 363:
8271 #line 3181 "ripper.y"
8272  {
8273 #if 0
8274  (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val));
8275 #endif
8276  (yyval.val) = mlhs_add(mlhs_new(), (yyvsp[(1) - (1)].val));
8277 
8278  ;}
8279  break;
8280 
8281  case 364:
8282 #line 3189 "ripper.y"
8283  {
8284 #if 0
8285  (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
8286 #endif
8287  (yyval.val) = mlhs_add((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
8288 
8289  ;}
8290  break;
8291 
8292  case 365:
8293 #line 3199 "ripper.y"
8294  {
8295 #if 0
8296  (yyval.val) = NEW_MASGN((yyvsp[(1) - (1)].val), 0);
8297 #endif
8298  (yyval.val) = (yyvsp[(1) - (1)].val);
8299 
8300  ;}
8301  break;
8302 
8303  case 366:
8304 #line 3207 "ripper.y"
8305  {
8306  (yyval.val) = assignable((yyvsp[(4) - (4)].val), 0);
8307 #if 0
8308  (yyval.val) = NEW_MASGN((yyvsp[(1) - (4)].val), (yyval.val));
8309 #endif
8310  (yyval.val) = mlhs_add_star((yyvsp[(1) - (4)].val), (yyval.val));
8311 
8312  ;}
8313  break;
8314 
8315  case 367:
8316 #line 3216 "ripper.y"
8317  {
8318  (yyval.val) = assignable((yyvsp[(4) - (6)].val), 0);
8319 #if 0
8320  (yyval.val) = NEW_MASGN((yyvsp[(1) - (6)].val), NEW_POSTARG((yyval.val), (yyvsp[(6) - (6)].val)));
8321 #endif
8322  (yyval.val) = mlhs_add_star((yyvsp[(1) - (6)].val), (yyval.val));
8323 
8324  ;}
8325  break;
8326 
8327  case 368:
8328 #line 3225 "ripper.y"
8329  {
8330 #if 0
8331  (yyval.val) = NEW_MASGN((yyvsp[(1) - (3)].val), -1);
8332 #endif
8333  (yyval.val) = mlhs_add_star((yyvsp[(1) - (3)].val), Qnil);
8334 
8335  ;}
8336  break;
8337 
8338  case 369:
8339 #line 3233 "ripper.y"
8340  {
8341 #if 0
8342  (yyval.val) = NEW_MASGN((yyvsp[(1) - (5)].val), NEW_POSTARG(-1, (yyvsp[(5) - (5)].val)));
8343 #endif
8344  (yyval.val) = mlhs_add_star((yyvsp[(1) - (5)].val), (yyvsp[(5) - (5)].val));
8345 
8346  ;}
8347  break;
8348 
8349  case 370:
8350 #line 3241 "ripper.y"
8351  {
8352  (yyval.val) = assignable((yyvsp[(2) - (2)].val), 0);
8353 #if 0
8354  (yyval.val) = NEW_MASGN(0, (yyval.val));
8355 #endif
8356  (yyval.val) = mlhs_add_star(mlhs_new(), (yyval.val));
8357 
8358  ;}
8359  break;
8360 
8361  case 371:
8362 #line 3250 "ripper.y"
8363  {
8364  (yyval.val) = assignable((yyvsp[(2) - (4)].val), 0);
8365 #if 0
8366  (yyval.val) = NEW_MASGN(0, NEW_POSTARG((yyval.val), (yyvsp[(4) - (4)].val)));
8367 #endif
8368  #if 0
8369  TODO: Check me
8370  #endif
8371  (yyval.val) = mlhs_add_star((yyval.val), (yyvsp[(4) - (4)].val));
8372 
8373  ;}
8374  break;
8375 
8376  case 372:
8377 #line 3262 "ripper.y"
8378  {
8379 #if 0
8380  (yyval.val) = NEW_MASGN(0, -1);
8381 #endif
8382  (yyval.val) = mlhs_add_star(mlhs_new(), Qnil);
8383 
8384  ;}
8385  break;
8386 
8387  case 373:
8388 #line 3270 "ripper.y"
8389  {
8390 #if 0
8391  (yyval.val) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].val)));
8392 #endif
8393  (yyval.val) = mlhs_add_star(mlhs_new(), Qnil);
8394 
8395  ;}
8396  break;
8397 
8398  case 374:
8399 #line 3281 "ripper.y"
8400  {
8401  (yyval.val) = new_args_tail((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
8402  ;}
8403  break;
8404 
8405  case 375:
8406 #line 3285 "ripper.y"
8407  {
8408  (yyval.val) = new_args_tail((yyvsp[(1) - (2)].val), Qnone, (yyvsp[(2) - (2)].val));
8409  ;}
8410  break;
8411 
8412  case 376:
8413 #line 3289 "ripper.y"
8414  {
8415  (yyval.val) = new_args_tail(Qnone, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
8416  ;}
8417  break;
8418 
8419  case 377:
8420 #line 3293 "ripper.y"
8421  {
8422  (yyval.val) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].val));
8423  ;}
8424  break;
8425 
8426  case 378:
8427 #line 3299 "ripper.y"
8428  {
8429  (yyval.val) = (yyvsp[(2) - (2)].val);
8430  ;}
8431  break;
8432 
8433  case 379:
8434 #line 3303 "ripper.y"
8435  {
8436  (yyval.val) = new_args_tail(Qnone, Qnone, Qnone);
8437  ;}
8438  break;
8439 
8440  case 380:
8441 #line 3309 "ripper.y"
8442  {
8443  (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), Qnone, (yyvsp[(6) - (6)].val));
8444  ;}
8445  break;
8446 
8447  case 381:
8448 #line 3313 "ripper.y"
8449  {
8450  (yyval.val) = new_args((yyvsp[(1) - (8)].val), (yyvsp[(3) - (8)].val), (yyvsp[(5) - (8)].val), (yyvsp[(7) - (8)].val), (yyvsp[(8) - (8)].val));
8451  ;}
8452  break;
8453 
8454  case 382:
8455 #line 3317 "ripper.y"
8456  {
8457  (yyval.val) = new_args((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnone, Qnone, (yyvsp[(4) - (4)].val));
8458  ;}
8459  break;
8460 
8461  case 383:
8462 #line 3321 "ripper.y"
8463  {
8464  (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), Qnone, (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
8465  ;}
8466  break;
8467 
8468  case 384:
8469 #line 3325 "ripper.y"
8470  {
8471  (yyval.val) = new_args((yyvsp[(1) - (4)].val), Qnone, (yyvsp[(3) - (4)].val), Qnone, (yyvsp[(4) - (4)].val));
8472  ;}
8473  break;
8474 
8475  case 385:
8476 #line 3329 "ripper.y"
8477  {
8478  (yyval.val) = new_args((yyvsp[(1) - (2)].val), Qnone, 1, Qnone, new_args_tail(Qnone, Qnone, Qnone));
8479 #if 0
8480 #endif
8481  dispatch1(excessed_comma, (yyval.val));
8482 
8483  ;}
8484  break;
8485 
8486  case 386:
8487 #line 3337 "ripper.y"
8488  {
8489  (yyval.val) = new_args((yyvsp[(1) - (6)].val), Qnone, (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
8490  ;}
8491  break;
8492 
8493  case 387:
8494 #line 3341 "ripper.y"
8495  {
8496  (yyval.val) = new_args((yyvsp[(1) - (2)].val), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].val));
8497  ;}
8498  break;
8499 
8500  case 388:
8501 #line 3345 "ripper.y"
8502  {
8503  (yyval.val) = new_args(Qnone, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnone, (yyvsp[(4) - (4)].val));
8504  ;}
8505  break;
8506 
8507  case 389:
8508 #line 3349 "ripper.y"
8509  {
8510  (yyval.val) = new_args(Qnone, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
8511  ;}
8512  break;
8513 
8514  case 390:
8515 #line 3353 "ripper.y"
8516  {
8517  (yyval.val) = new_args(Qnone, (yyvsp[(1) - (2)].val), Qnone, Qnone, (yyvsp[(2) - (2)].val));
8518  ;}
8519  break;
8520 
8521  case 391:
8522 #line 3357 "ripper.y"
8523  {
8524  (yyval.val) = new_args(Qnone, (yyvsp[(1) - (4)].val), Qnone, (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
8525  ;}
8526  break;
8527 
8528  case 392:
8529 #line 3361 "ripper.y"
8530  {
8531  (yyval.val) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].val), Qnone, (yyvsp[(2) - (2)].val));
8532  ;}
8533  break;
8534 
8535  case 393:
8536 #line 3365 "ripper.y"
8537  {
8538  (yyval.val) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
8539  ;}
8540  break;
8541 
8542  case 394:
8543 #line 3369 "ripper.y"
8544  {
8545  (yyval.val) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].val));
8546  ;}
8547  break;
8548 
8549  case 396:
8550 #line 3376 "ripper.y"
8551  {
8552  command_start = TRUE;
8553  ;}
8554  break;
8555 
8556  case 397:
8557 #line 3382 "ripper.y"
8558  {
8559 #if 0
8560  (yyval.val) = 0;
8561 #endif
8562  (yyval.val) = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
8563  escape_Qundef((yyvsp[(2) - (3)].val)));
8564 
8565  ;}
8566  break;
8567 
8568  case 398:
8569 #line 3391 "ripper.y"
8570  {
8571 #if 0
8572  (yyval.val) = 0;
8573 #endif
8574  (yyval.val) = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
8575  Qnil);
8576 
8577  ;}
8578  break;
8579 
8580  case 399:
8581 #line 3400 "ripper.y"
8582  {
8583 #if 0
8584  (yyval.val) = (yyvsp[(2) - (4)].val);
8585 #endif
8586  (yyval.val) = blockvar_new(escape_Qundef((yyvsp[(2) - (4)].val)), escape_Qundef((yyvsp[(3) - (4)].val)));
8587 
8588  ;}
8589  break;
8590 
8591  case 400:
8592 #line 3411 "ripper.y"
8593  {
8594  (yyval.val) = 0;
8595  ;}
8596  break;
8597 
8598  case 401:
8599 #line 3415 "ripper.y"
8600  {
8601 #if 0
8602  (yyval.val) = 0;
8603 #endif
8604  (yyval.val) = (yyvsp[(3) - (4)].val);
8605 
8606  ;}
8607  break;
8608 
8609  case 402:
8610 #line 3427 "ripper.y"
8611  {
8612  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
8613  ;}
8614  break;
8615 
8616  case 403:
8617 #line 3434 "ripper.y"
8618  {
8619  rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
8620  ;}
8621  break;
8622 
8623  case 404:
8624 #line 3441 "ripper.y"
8625  {
8626  new_bv(get_id((yyvsp[(1) - (1)].val)));
8627 #if 0
8628 #endif
8629  (yyval.val) = get_value((yyvsp[(1) - (1)].val));
8630 
8631  ;}
8632  break;
8633 
8634  case 405:
8635 #line 3449 "ripper.y"
8636  {
8637  (yyval.val) = 0;
8638  ;}
8639  break;
8640 
8641  case 406:
8642 #line 3454 "ripper.y"
8643  {
8644  (yyval.vars) = dyna_push();
8645  ;}
8646  break;
8647 
8648  case 407:
8649 #line 3457 "ripper.y"
8650  {
8651  (yyval.num) = lpar_beg;
8652  lpar_beg = ++paren_nest;
8653  ;}
8654  break;
8655 
8656  case 408:
8657 #line 3463 "ripper.y"
8658  {
8659  lpar_beg = (yyvsp[(2) - (4)].num);
8660 #if 0
8661  (yyval.val) = NEW_LAMBDA((yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
8662 #endif
8663  (yyval.val) = dispatch2(lambda, (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
8664 
8665  dyna_pop((yyvsp[(1) - (4)].vars));
8666  ;}
8667  break;
8668 
8669  case 409:
8670 #line 3475 "ripper.y"
8671  {
8672 #if 0
8673  (yyval.val) = (yyvsp[(2) - (4)].val);
8674 #endif
8675  (yyval.val) = dispatch1(paren, (yyvsp[(2) - (4)].val));
8676 
8677  ;}
8678  break;
8679 
8680  case 410:
8681 #line 3483 "ripper.y"
8682  {
8683 #if 0
8684  (yyval.val) = (yyvsp[(1) - (1)].val);
8685 #endif
8686  (yyval.val) = (yyvsp[(1) - (1)].val);
8687 
8688  ;}
8689  break;
8690 
8691  case 411:
8692 #line 3493 "ripper.y"
8693  {
8694  (yyval.val) = (yyvsp[(2) - (3)].val);
8695  ;}
8696  break;
8697 
8698  case 412:
8699 #line 3497 "ripper.y"
8700  {
8701  (yyval.val) = (yyvsp[(2) - (3)].val);
8702  ;}
8703  break;
8704 
8705  case 413:
8706 #line 3503 "ripper.y"
8707  {
8708  (yyvsp[(1) - (1)].vars) = dyna_push();
8709 #if 0
8710  (yyval.num) = ruby_sourceline;
8711 #endif
8712  ;}
8713  break;
8714 
8715  case 414:
8716 #line 3512 "ripper.y"
8717  {
8718 #if 0
8719  (yyval.val) = NEW_ITER((yyvsp[(3) - (5)].val),(yyvsp[(4) - (5)].val));
8720  nd_set_line((yyval.val), (yyvsp[(2) - (5)].num));
8721 #endif
8722  (yyval.val) = dispatch2(do_block, escape_Qundef((yyvsp[(3) - (5)].val)), (yyvsp[(4) - (5)].val));
8723 
8724  dyna_pop((yyvsp[(1) - (5)].vars));
8725  ;}
8726  break;
8727 
8728  case 415:
8729 #line 3524 "ripper.y"
8730  {
8731 #if 0
8732  if (nd_type((yyvsp[(1) - (2)].val)) == NODE_YIELD) {
8733  compile_error(PARSER_ARG "block given to yield");
8734  }
8735  else {
8736  block_dup_check((yyvsp[(1) - (2)].val)->nd_args, (yyvsp[(2) - (2)].val));
8737  }
8738  (yyvsp[(2) - (2)].val)->nd_iter = (yyvsp[(1) - (2)].val);
8739  (yyval.val) = (yyvsp[(2) - (2)].val);
8740  fixpos((yyval.val), (yyvsp[(1) - (2)].val));
8741 #endif
8742  (yyval.val) = method_add_block((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
8743 
8744  ;}
8745  break;
8746 
8747  case 416:
8748 #line 3540 "ripper.y"
8749  {
8750 #if 0
8751  (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
8752 #endif
8753  (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), (yyvsp[(2) - (4)].val), (yyvsp[(3) - (4)].val));
8754  (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val));
8755 
8756  ;}
8757  break;
8758 
8759  case 417:
8760 #line 3549 "ripper.y"
8761  {
8762 #if 0
8763  block_dup_check((yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
8764  (yyvsp[(5) - (5)].val)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
8765  (yyval.val) = (yyvsp[(5) - (5)].val);
8766  fixpos((yyval.val), (yyvsp[(1) - (5)].val));
8767 #endif
8768  (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (5)].val), (yyvsp[(2) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
8769  (yyval.val) = method_add_block((yyval.val), (yyvsp[(5) - (5)].val));
8770 
8771  ;}
8772  break;
8773 
8774  case 418:
8775 #line 3561 "ripper.y"
8776  {
8777 #if 0
8778  block_dup_check((yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
8779  (yyvsp[(5) - (5)].val)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
8780  (yyval.val) = (yyvsp[(5) - (5)].val);
8781  fixpos((yyval.val), (yyvsp[(1) - (5)].val));
8782 #endif
8783  (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (5)].val), (yyvsp[(2) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
8784  (yyval.val) = method_add_block((yyval.val), (yyvsp[(5) - (5)].val));
8785 
8786  ;}
8787  break;
8788 
8789  case 419:
8790 #line 3575 "ripper.y"
8791  {
8792 #if 0
8793  (yyval.val) = (yyvsp[(1) - (2)].val);
8794  (yyval.val)->nd_args = (yyvsp[(2) - (2)].val);
8795 #endif
8796  (yyval.val) = method_arg(dispatch1(fcall, (yyvsp[(1) - (2)].val)), (yyvsp[(2) - (2)].val));
8797 
8798  ;}
8799  break;
8800 
8801  case 420:
8802 #line 3584 "ripper.y"
8803  {
8804 #if 0
8805  (yyval.num) = ruby_sourceline;
8806 #endif
8807  ;}
8808  break;
8809 
8810  case 421:
8811 #line 3590 "ripper.y"
8812  {
8813 #if 0
8814  (yyval.val) = NEW_CALL((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(5) - (5)].val));
8815  nd_set_line((yyval.val), (yyvsp[(4) - (5)].num));
8816 #endif
8817  (yyval.val) = dispatch3(call, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val));
8818  (yyval.val) = method_optarg((yyval.val), (yyvsp[(5) - (5)].val));
8819 
8820  ;}
8821  break;
8822 
8823  case 422:
8824 #line 3600 "ripper.y"
8825  {
8826 #if 0
8827  (yyval.num) = ruby_sourceline;
8828 #endif
8829  ;}
8830  break;
8831 
8832  case 423:
8833 #line 3606 "ripper.y"
8834  {
8835 #if 0
8836  (yyval.val) = NEW_CALL((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(5) - (5)].val));
8837  nd_set_line((yyval.val), (yyvsp[(4) - (5)].num));
8838 #endif
8839  (yyval.val) = dispatch3(call, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val));
8840  (yyval.val) = method_optarg((yyval.val), (yyvsp[(5) - (5)].val));
8841 
8842  ;}
8843  break;
8844 
8845  case 424:
8846 #line 3616 "ripper.y"
8847  {
8848 #if 0
8849  (yyval.val) = NEW_CALL((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val), 0);
8850 #endif
8851  (yyval.val) = dispatch3(call, (yyvsp[(1) - (3)].val), ripper_intern("::"), (yyvsp[(3) - (3)].val));
8852 
8853  ;}
8854  break;
8855 
8856  case 425:
8857 #line 3624 "ripper.y"
8858  {
8859 #if 0
8860  (yyval.num) = ruby_sourceline;
8861 #endif
8862  ;}
8863  break;
8864 
8865  case 426:
8866 #line 3630 "ripper.y"
8867  {
8868 #if 0
8869  (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), rb_intern("call"), (yyvsp[(4) - (4)].val));
8870  nd_set_line((yyval.val), (yyvsp[(3) - (4)].num));
8871 #endif
8872  (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_id2sym('.'),
8873  ripper_intern("call"));
8874  (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val));
8875 
8876  ;}
8877  break;
8878 
8879  case 427:
8880 #line 3641 "ripper.y"
8881  {
8882 #if 0
8883  (yyval.num) = ruby_sourceline;
8884 #endif
8885  ;}
8886  break;
8887 
8888  case 428:
8889 #line 3647 "ripper.y"
8890  {
8891 #if 0
8892  (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), rb_intern("call"), (yyvsp[(4) - (4)].val));
8893  nd_set_line((yyval.val), (yyvsp[(3) - (4)].num));
8894 #endif
8895  (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_intern("::"),
8896  ripper_intern("call"));
8897  (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val));
8898 
8899  ;}
8900  break;
8901 
8902  case 429:
8903 #line 3658 "ripper.y"
8904  {
8905 #if 0
8906  (yyval.val) = NEW_SUPER((yyvsp[(2) - (2)].val));
8907 #endif
8908  (yyval.val) = dispatch1(super, (yyvsp[(2) - (2)].val));
8909 
8910  ;}
8911  break;
8912 
8913  case 430:
8914 #line 3666 "ripper.y"
8915  {
8916 #if 0
8917  (yyval.val) = NEW_ZSUPER();
8918 #endif
8919  (yyval.val) = dispatch0(zsuper);
8920 
8921  ;}
8922  break;
8923 
8924  case 431:
8925 #line 3674 "ripper.y"
8926  {
8927 #if 0
8928  if ((yyvsp[(1) - (4)].val) && nd_type((yyvsp[(1) - (4)].val)) == NODE_SELF)
8929  (yyval.val) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].val));
8930  else
8931  (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), tAREF, (yyvsp[(3) - (4)].val));
8932  fixpos((yyval.val), (yyvsp[(1) - (4)].val));
8933 #endif
8934  (yyval.val) = dispatch2(aref, (yyvsp[(1) - (4)].val), escape_Qundef((yyvsp[(3) - (4)].val)));
8935 
8936  ;}
8937  break;
8938 
8939  case 432:
8940 #line 3688 "ripper.y"
8941  {
8942  (yyvsp[(1) - (1)].vars) = dyna_push();
8943 #if 0
8944  (yyval.num) = ruby_sourceline;
8945 #endif
8946 
8947  ;}
8948  break;
8949 
8950  case 433:
8951 #line 3697 "ripper.y"
8952  {
8953 #if 0
8954  (yyval.val) = NEW_ITER((yyvsp[(3) - (5)].val),(yyvsp[(4) - (5)].val));
8955  nd_set_line((yyval.val), (yyvsp[(2) - (5)].num));
8956 #endif
8957  (yyval.val) = dispatch2(brace_block, escape_Qundef((yyvsp[(3) - (5)].val)), (yyvsp[(4) - (5)].val));
8958 
8959  dyna_pop((yyvsp[(1) - (5)].vars));
8960  ;}
8961  break;
8962 
8963  case 434:
8964 #line 3707 "ripper.y"
8965  {
8966  (yyvsp[(1) - (1)].vars) = dyna_push();
8967 #if 0
8968  (yyval.num) = ruby_sourceline;
8969 #endif
8970 
8971  ;}
8972  break;
8973 
8974  case 435:
8975 #line 3716 "ripper.y"
8976  {
8977 #if 0
8978  (yyval.val) = NEW_ITER((yyvsp[(3) - (5)].val),(yyvsp[(4) - (5)].val));
8979  nd_set_line((yyval.val), (yyvsp[(2) - (5)].num));
8980 #endif
8981  (yyval.val) = dispatch2(do_block, escape_Qundef((yyvsp[(3) - (5)].val)), (yyvsp[(4) - (5)].val));
8982 
8983  dyna_pop((yyvsp[(1) - (5)].vars));
8984  ;}
8985  break;
8986 
8987  case 436:
8988 #line 3730 "ripper.y"
8989  {
8990 #if 0
8991  (yyval.val) = NEW_WHEN((yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
8992 #endif
8993  (yyval.val) = dispatch3(when, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val), escape_Qundef((yyvsp[(5) - (5)].val)));
8994 
8995  ;}
8996  break;
8997 
8998  case 439:
8999 #line 3746 "ripper.y"
9000  {
9001 #if 0
9002  if ((yyvsp[(3) - (6)].val)) {
9003  (yyvsp[(3) - (6)].val) = node_assign((yyvsp[(3) - (6)].val), NEW_ERRINFO());
9004  (yyvsp[(5) - (6)].val) = block_append((yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val));
9005  }
9006  (yyval.val) = NEW_RESBODY((yyvsp[(2) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
9007  fixpos((yyval.val), (yyvsp[(2) - (6)].val)?(yyvsp[(2) - (6)].val):(yyvsp[(5) - (6)].val));
9008 #endif
9009  (yyval.val) = dispatch4(rescue,
9010  escape_Qundef((yyvsp[(2) - (6)].val)),
9011  escape_Qundef((yyvsp[(3) - (6)].val)),
9012  escape_Qundef((yyvsp[(5) - (6)].val)),
9013  escape_Qundef((yyvsp[(6) - (6)].val)));
9014 
9015  ;}
9016  break;
9017 
9018  case 441:
9019 #line 3766 "ripper.y"
9020  {
9021 #if 0
9022  (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val));
9023 #endif
9024  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
9025 
9026  ;}
9027  break;
9028 
9029  case 442:
9030 #line 3774 "ripper.y"
9031  {
9032 #if 0
9033  if (!((yyval.val) = splat_array((yyvsp[(1) - (1)].val)))) (yyval.val) = (yyvsp[(1) - (1)].val);
9034 #endif
9035  (yyval.val) = (yyvsp[(1) - (1)].val);
9036 
9037  ;}
9038  break;
9039 
9040  case 444:
9041 #line 3785 "ripper.y"
9042  {
9043  (yyval.val) = (yyvsp[(2) - (2)].val);
9044  ;}
9045  break;
9046 
9047  case 446:
9048 #line 3792 "ripper.y"
9049  {
9050 #if 0
9051  (yyval.val) = (yyvsp[(2) - (2)].val);
9052 #endif
9053  (yyval.val) = dispatch1(ensure, (yyvsp[(2) - (2)].val));
9054 
9055  ;}
9056  break;
9057 
9058  case 449:
9059 #line 3804 "ripper.y"
9060  {
9061 #if 0
9062  (yyval.val) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].val)));
9063 #endif
9064  (yyval.val) = dispatch1(symbol_literal, (yyvsp[(1) - (1)].val));
9065 
9066  ;}
9067  break;
9068 
9069  case 451:
9070 #line 3815 "ripper.y"
9071  {
9072 #if 0
9073  NODE *node = (yyvsp[(1) - (1)].val);
9074  if (!node) {
9075  node = NEW_STR(STR_NEW0());
9076  }
9077  else {
9078  node = evstr2dstr(node);
9079  }
9080  (yyval.val) = node;
9081 #endif
9082  (yyval.val) = (yyvsp[(1) - (1)].val);
9083 
9084  ;}
9085  break;
9086 
9087  case 454:
9088 #line 3834 "ripper.y"
9089  {
9090 #if 0
9091  (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
9092 #endif
9093  (yyval.val) = dispatch2(string_concat, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
9094 
9095  ;}
9096  break;
9097 
9098  case 455:
9099 #line 3844 "ripper.y"
9100  {
9101 #if 0
9102  (yyval.val) = (yyvsp[(2) - (3)].val);
9103 #endif
9104  (yyval.val) = dispatch1(string_literal, (yyvsp[(2) - (3)].val));
9105 
9106  ;}
9107  break;
9108 
9109  case 456:
9110 #line 3854 "ripper.y"
9111  {
9112 #if 0
9113  NODE *node = (yyvsp[(2) - (3)].val);
9114  if (!node) {
9115  node = NEW_XSTR(STR_NEW0());
9116  }
9117  else {
9118  switch (nd_type(node)) {
9119  case NODE_STR:
9120  nd_set_type(node, NODE_XSTR);
9121  break;
9122  case NODE_DSTR:
9123  nd_set_type(node, NODE_DXSTR);
9124  break;
9125  default:
9126  node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
9127  break;
9128  }
9129  }
9130  (yyval.val) = node;
9131 #endif
9132  (yyval.val) = dispatch1(xstring_literal, (yyvsp[(2) - (3)].val));
9133 
9134  ;}
9135  break;
9136 
9137  case 457:
9138 #line 3881 "ripper.y"
9139  {
9140 #if 0
9141  int options = (yyvsp[(3) - (3)].val);
9142  NODE *node = (yyvsp[(2) - (3)].val);
9143  NODE *list, *prev;
9144  if (!node) {
9145  node = NEW_LIT(reg_compile(STR_NEW0(), options));
9146  }
9147  else switch (nd_type(node)) {
9148  case NODE_STR:
9149  {
9150  VALUE src = node->nd_lit;
9151  nd_set_type(node, NODE_LIT);
9152  node->nd_lit = reg_compile(src, options);
9153  }
9154  break;
9155  default:
9156  node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
9157  case NODE_DSTR:
9158  if (options & RE_OPTION_ONCE) {
9160  }
9161  else {
9162  nd_set_type(node, NODE_DREGX);
9163  }
9164  node->nd_cflag = options & RE_OPTION_MASK;
9165  if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
9166  for (list = (prev = node)->nd_next; list; list = list->nd_next) {
9167  if (nd_type(list->nd_head) == NODE_STR) {
9168  VALUE tail = list->nd_head->nd_lit;
9169  if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
9170  VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
9171  if (!literal_concat0(parser, lit, tail)) {
9172  node = 0;
9173  break;
9174  }
9175  rb_str_resize(tail, 0);
9176  prev->nd_next = list->nd_next;
9177  rb_gc_force_recycle((VALUE)list->nd_head);
9178  rb_gc_force_recycle((VALUE)list);
9179  list = prev;
9180  }
9181  else {
9182  prev = list;
9183  }
9184  }
9185  else {
9186  prev = 0;
9187  }
9188  }
9189  if (!node->nd_next) {
9190  VALUE src = node->nd_lit;
9191  nd_set_type(node, NODE_LIT);
9192  node->nd_lit = reg_compile(src, options);
9193  }
9194  break;
9195  }
9196  (yyval.val) = node;
9197 #endif
9198  (yyval.val) = dispatch2(regexp_literal, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
9199 
9200  ;}
9201  break;
9202 
9203  case 458:
9204 #line 3946 "ripper.y"
9205  {
9206 #if 0
9207  (yyval.val) = NEW_ZARRAY();
9208 #endif
9209  (yyval.val) = dispatch0(words_new);
9210  (yyval.val) = dispatch1(array, (yyval.val));
9211 
9212  ;}
9213  break;
9214 
9215  case 459:
9216 #line 3955 "ripper.y"
9217  {
9218 #if 0
9219  (yyval.val) = (yyvsp[(2) - (3)].val);
9220 #endif
9221  (yyval.val) = dispatch1(array, (yyvsp[(2) - (3)].val));
9222 
9223  ;}
9224  break;
9225 
9226  case 460:
9227 #line 3965 "ripper.y"
9228  {
9229 #if 0
9230  (yyval.val) = 0;
9231 #endif
9232  (yyval.val) = dispatch0(words_new);
9233 
9234  ;}
9235  break;
9236 
9237  case 461:
9238 #line 3973 "ripper.y"
9239  {
9240 #if 0
9241  (yyval.val) = list_append((yyvsp[(1) - (3)].val), evstr2dstr((yyvsp[(2) - (3)].val)));
9242 #endif
9243  (yyval.val) = dispatch2(words_add, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
9244 
9245  ;}
9246  break;
9247 
9248  case 462:
9249 #line 3985 "ripper.y"
9250  {
9251  (yyval.val) = dispatch0(word_new);
9252  (yyval.val) = dispatch2(word_add, (yyval.val), (yyvsp[(1) - (1)].val));
9253  ;}
9254  break;
9255 
9256  case 463:
9257 #line 3991 "ripper.y"
9258  {
9259 #if 0
9260  (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
9261 #endif
9262  (yyval.val) = dispatch2(word_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
9263 
9264  ;}
9265  break;
9266 
9267  case 464:
9268 #line 4001 "ripper.y"
9269  {
9270 #if 0
9271  (yyval.val) = NEW_ZARRAY();
9272 #endif
9273  (yyval.val) = dispatch0(symbols_new);
9274  (yyval.val) = dispatch1(array, (yyval.val));
9275 
9276  ;}
9277  break;
9278 
9279  case 465:
9280 #line 4010 "ripper.y"
9281  {
9282 #if 0
9283  (yyval.val) = (yyvsp[(2) - (3)].val);
9284 #endif
9285  (yyval.val) = dispatch1(array, (yyvsp[(2) - (3)].val));
9286 
9287  ;}
9288  break;
9289 
9290  case 466:
9291 #line 4020 "ripper.y"
9292  {
9293 #if 0
9294  (yyval.val) = 0;
9295 #endif
9296  (yyval.val) = dispatch0(symbols_new);
9297 
9298  ;}
9299  break;
9300 
9301  case 467:
9302 #line 4028 "ripper.y"
9303  {
9304 #if 0
9305  (yyvsp[(2) - (3)].val) = evstr2dstr((yyvsp[(2) - (3)].val));
9306  nd_set_type((yyvsp[(2) - (3)].val), NODE_DSYM);
9307  (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
9308 #endif
9309  (yyval.val) = dispatch2(symbols_add, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
9310 
9311  ;}
9312  break;
9313 
9314  case 468:
9315 #line 4040 "ripper.y"
9316  {
9317 #if 0
9318  (yyval.val) = NEW_ZARRAY();
9319 #endif
9320  (yyval.val) = dispatch0(qwords_new);
9321  (yyval.val) = dispatch1(array, (yyval.val));
9322 
9323  ;}
9324  break;
9325 
9326  case 469:
9327 #line 4049 "ripper.y"
9328  {
9329 #if 0
9330  (yyval.val) = (yyvsp[(2) - (3)].val);
9331 #endif
9332  (yyval.val) = dispatch1(array, (yyvsp[(2) - (3)].val));
9333 
9334  ;}
9335  break;
9336 
9337  case 470:
9338 #line 4059 "ripper.y"
9339  {
9340 #if 0
9341  (yyval.val) = NEW_ZARRAY();
9342 #endif
9343  (yyval.val) = dispatch0(qsymbols_new);
9344  (yyval.val) = dispatch1(array, (yyval.val));
9345 
9346  ;}
9347  break;
9348 
9349  case 471:
9350 #line 4068 "ripper.y"
9351  {
9352 #if 0
9353  (yyval.val) = (yyvsp[(2) - (3)].val);
9354 #endif
9355  (yyval.val) = dispatch1(array, (yyvsp[(2) - (3)].val));
9356 
9357  ;}
9358  break;
9359 
9360  case 472:
9361 #line 4078 "ripper.y"
9362  {
9363 #if 0
9364  (yyval.val) = 0;
9365 #endif
9366  (yyval.val) = dispatch0(qwords_new);
9367 
9368  ;}
9369  break;
9370 
9371  case 473:
9372 #line 4086 "ripper.y"
9373  {
9374 #if 0
9375  (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
9376 #endif
9377  (yyval.val) = dispatch2(qwords_add, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
9378 
9379  ;}
9380  break;
9381 
9382  case 474:
9383 #line 4096 "ripper.y"
9384  {
9385 #if 0
9386  (yyval.val) = 0;
9387 #endif
9388  (yyval.val) = dispatch0(qsymbols_new);
9389 
9390  ;}
9391  break;
9392 
9393  case 475:
9394 #line 4104 "ripper.y"
9395  {
9396 #if 0
9397  VALUE lit;
9398  lit = (yyvsp[(2) - (3)].val)->nd_lit;
9399  (yyvsp[(2) - (3)].val)->nd_lit = ID2SYM(rb_intern_str(lit));
9400  nd_set_type((yyvsp[(2) - (3)].val), NODE_LIT);
9401  (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
9402 #endif
9403  (yyval.val) = dispatch2(qsymbols_add, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
9404 
9405  ;}
9406  break;
9407 
9408  case 476:
9409 #line 4118 "ripper.y"
9410  {
9411 #if 0
9412  (yyval.val) = 0;
9413 #endif
9414  (yyval.val) = dispatch0(string_content);
9415 
9416  ;}
9417  break;
9418 
9419  case 477:
9420 #line 4126 "ripper.y"
9421  {
9422 #if 0
9423  (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
9424 #endif
9425  (yyval.val) = dispatch2(string_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
9426 
9427  ;}
9428  break;
9429 
9430  case 478:
9431 #line 4136 "ripper.y"
9432  {
9433 #if 0
9434  (yyval.val) = 0;
9435 #endif
9436  (yyval.val) = dispatch0(xstring_new);
9437 
9438  ;}
9439  break;
9440 
9441  case 479:
9442 #line 4144 "ripper.y"
9443  {
9444 #if 0
9445  (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
9446 #endif
9447  (yyval.val) = dispatch2(xstring_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
9448 
9449  ;}
9450  break;
9451 
9452  case 480:
9453 #line 4154 "ripper.y"
9454  {
9455 #if 0
9456  (yyval.val) = 0;
9457 #endif
9458  (yyval.val) = dispatch0(regexp_new);
9459 
9460  ;}
9461  break;
9462 
9463  case 481:
9464 #line 4162 "ripper.y"
9465  {
9466 #if 0
9467  NODE *head = (yyvsp[(1) - (2)].val), *tail = (yyvsp[(2) - (2)].val);
9468  if (!head) {
9469  (yyval.val) = tail;
9470  }
9471  else if (!tail) {
9472  (yyval.val) = head;
9473  }
9474  else {
9475  switch (nd_type(head)) {
9476  case NODE_STR:
9477  nd_set_type(head, NODE_DSTR);
9478  break;
9479  case NODE_DSTR:
9480  break;
9481  default:
9482  head = list_append(NEW_DSTR(Qnil), head);
9483  break;
9484  }
9485  (yyval.val) = list_append(head, tail);
9486  }
9487 #endif
9488  (yyval.val) = dispatch2(regexp_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
9489 
9490  ;}
9491  break;
9492 
9493  case 483:
9494 #line 4192 "ripper.y"
9495  {
9496  (yyval.node) = lex_strterm;
9497  lex_strterm = 0;
9498  lex_state = EXPR_BEG;
9499  ;}
9500  break;
9501 
9502  case 484:
9503 #line 4198 "ripper.y"
9504  {
9505 #if 0
9506  lex_strterm = (yyvsp[(2) - (3)].node);
9507  (yyval.val) = NEW_EVSTR((yyvsp[(3) - (3)].val));
9508 #endif
9509  lex_strterm = (yyvsp[(2) - (3)].node);
9510  (yyval.val) = dispatch1(string_dvar, (yyvsp[(3) - (3)].val));
9511 
9512  ;}
9513  break;
9514 
9515  case 485:
9516 #line 4208 "ripper.y"
9517  {
9518  (yyvsp[(1) - (1)].val) = cond_stack;
9519  (yyval.val) = cmdarg_stack;
9520  cond_stack = 0;
9521  cmdarg_stack = 0;
9522  ;}
9523  break;
9524 
9525  case 486:
9526 #line 4214 "ripper.y"
9527  {
9528  (yyval.node) = lex_strterm;
9529  lex_strterm = 0;
9530  lex_state = EXPR_BEG;
9531  ;}
9532  break;
9533 
9534  case 487:
9535 #line 4219 "ripper.y"
9536  {
9537  (yyval.num) = brace_nest;
9538  brace_nest = 0;
9539  ;}
9540  break;
9541 
9542  case 488:
9543 #line 4224 "ripper.y"
9544  {
9545  cond_stack = (yyvsp[(1) - (6)].val);
9546  cmdarg_stack = (yyvsp[(2) - (6)].val);
9547  lex_strterm = (yyvsp[(3) - (6)].node);
9548  brace_nest = (yyvsp[(4) - (6)].num);
9549 #if 0
9550  if ((yyvsp[(5) - (6)].val)) (yyvsp[(5) - (6)].val)->flags &= ~NODE_FL_NEWLINE;
9551  (yyval.val) = new_evstr((yyvsp[(5) - (6)].val));
9552 #endif
9553  (yyval.val) = dispatch1(string_embexpr, (yyvsp[(5) - (6)].val));
9554 
9555  ;}
9556  break;
9557 
9558  case 489:
9559 #line 4239 "ripper.y"
9560  {
9561 #if 0
9562  (yyval.val) = NEW_GVAR((yyvsp[(1) - (1)].val));
9563 #endif
9564  (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val));
9565 
9566  ;}
9567  break;
9568 
9569  case 490:
9570 #line 4247 "ripper.y"
9571  {
9572 #if 0
9573  (yyval.val) = NEW_IVAR((yyvsp[(1) - (1)].val));
9574 #endif
9575  (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val));
9576 
9577  ;}
9578  break;
9579 
9580  case 491:
9581 #line 4255 "ripper.y"
9582  {
9583 #if 0
9584  (yyval.val) = NEW_CVAR((yyvsp[(1) - (1)].val));
9585 #endif
9586  (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val));
9587 
9588  ;}
9589  break;
9590 
9591  case 493:
9592 #line 4266 "ripper.y"
9593  {
9594  lex_state = EXPR_END;
9595 #if 0
9596  (yyval.val) = (yyvsp[(2) - (2)].val);
9597 #endif
9598  (yyval.val) = dispatch1(symbol, (yyvsp[(2) - (2)].val));
9599 
9600  ;}
9601  break;
9602 
9603  case 498:
9604 #line 4283 "ripper.y"
9605  {
9606  lex_state = EXPR_END;
9607 #if 0
9608  (yyval.val) = dsym_node((yyvsp[(2) - (3)].val));
9609 #endif
9610  (yyval.val) = dispatch1(dyna_symbol, (yyvsp[(2) - (3)].val));
9611 
9612  ;}
9613  break;
9614 
9615  case 501:
9616 #line 4296 "ripper.y"
9617  {
9618 #if 0
9619  (yyval.val) = negate_lit((yyvsp[(2) - (2)].val));
9620 #endif
9621  (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyvsp[(2) - (2)].val));
9622 
9623  ;}
9624  break;
9625 
9626  case 502:
9627 #line 4304 "ripper.y"
9628  {
9629 #if 0
9630  (yyval.val) = negate_lit((yyvsp[(2) - (2)].val));
9631 #endif
9632  (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyvsp[(2) - (2)].val));
9633 
9634  ;}
9635  break;
9636 
9637  case 508:
9638 #line 4320 "ripper.y"
9639  {ifndef_ripper((yyval.val) = keyword_nil);;}
9640  break;
9641 
9642  case 509:
9643 #line 4321 "ripper.y"
9644  {ifndef_ripper((yyval.val) = keyword_self);;}
9645  break;
9646 
9647  case 510:
9648 #line 4322 "ripper.y"
9649  {ifndef_ripper((yyval.val) = keyword_true);;}
9650  break;
9651 
9652  case 511:
9653 #line 4323 "ripper.y"
9654  {ifndef_ripper((yyval.val) = keyword_false);;}
9655  break;
9656 
9657  case 512:
9658 #line 4324 "ripper.y"
9659  {ifndef_ripper((yyval.val) = keyword__FILE__);;}
9660  break;
9661 
9662  case 513:
9663 #line 4325 "ripper.y"
9664  {ifndef_ripper((yyval.val) = keyword__LINE__);;}
9665  break;
9666 
9667  case 514:
9668 #line 4326 "ripper.y"
9669  {ifndef_ripper((yyval.val) = keyword__ENCODING__);;}
9670  break;
9671 
9672  case 515:
9673 #line 4330 "ripper.y"
9674  {
9675 #if 0
9676  if (!((yyval.val) = gettable((yyvsp[(1) - (1)].val)))) (yyval.val) = NEW_BEGIN(0);
9677 #endif
9678  if (id_is_var(get_id((yyvsp[(1) - (1)].val)))) {
9679  (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val));
9680  }
9681  else {
9682  (yyval.val) = dispatch1(vcall, (yyvsp[(1) - (1)].val));
9683  }
9684 
9685  ;}
9686  break;
9687 
9688  case 516:
9689 #line 4343 "ripper.y"
9690  {
9691 #if 0
9692  if (!((yyval.val) = gettable((yyvsp[(1) - (1)].val)))) (yyval.val) = NEW_BEGIN(0);
9693 #endif
9694  (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val));
9695 
9696  ;}
9697  break;
9698 
9699  case 517:
9700 #line 4353 "ripper.y"
9701  {
9702  (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
9703 #if 0
9704 #endif
9705  (yyval.val) = dispatch1(var_field, (yyval.val));
9706 
9707  ;}
9708  break;
9709 
9710  case 518:
9711 #line 4361 "ripper.y"
9712  {
9713  (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
9714 #if 0
9715 #endif
9716  (yyval.val) = dispatch1(var_field, (yyval.val));
9717 
9718  ;}
9719  break;
9720 
9721  case 521:
9722 #line 4375 "ripper.y"
9723  {
9724 #if 0
9725  (yyval.val) = 0;
9726 #endif
9727  (yyval.val) = Qnil;
9728 
9729  ;}
9730  break;
9731 
9732  case 522:
9733 #line 4383 "ripper.y"
9734  {
9735  lex_state = EXPR_BEG;
9736  command_start = TRUE;
9737  ;}
9738  break;
9739 
9740  case 523:
9741 #line 4388 "ripper.y"
9742  {
9743  (yyval.val) = (yyvsp[(3) - (4)].val);
9744  ;}
9745  break;
9746 
9747  case 524:
9748 #line 4392 "ripper.y"
9749  {
9750 #if 0
9751  yyerrok;
9752  (yyval.val) = 0;
9753 #endif
9754  yyerrok;
9755  (yyval.val) = Qnil;
9756 
9757  ;}
9758  break;
9759 
9760  case 525:
9761 #line 4404 "ripper.y"
9762  {
9763 #if 0
9764  (yyval.val) = (yyvsp[(2) - (3)].val);
9765 #endif
9766  (yyval.val) = dispatch1(paren, (yyvsp[(2) - (3)].val));
9767 
9768  lex_state = EXPR_BEG;
9769  command_start = TRUE;
9770  ;}
9771  break;
9772 
9773  case 526:
9774 #line 4414 "ripper.y"
9775  {
9776  (yyval.val) = (yyvsp[(1) - (2)].val);
9777  lex_state = EXPR_BEG;
9778  command_start = TRUE;
9779  ;}
9780  break;
9781 
9782  case 527:
9783 #line 4422 "ripper.y"
9784  {
9785  (yyval.val) = new_args_tail((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
9786  ;}
9787  break;
9788 
9789  case 528:
9790 #line 4426 "ripper.y"
9791  {
9792  (yyval.val) = new_args_tail((yyvsp[(1) - (2)].val), Qnone, (yyvsp[(2) - (2)].val));
9793  ;}
9794  break;
9795 
9796  case 529:
9797 #line 4430 "ripper.y"
9798  {
9799  (yyval.val) = new_args_tail(Qnone, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
9800  ;}
9801  break;
9802 
9803  case 530:
9804 #line 4434 "ripper.y"
9805  {
9806  (yyval.val) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].val));
9807  ;}
9808  break;
9809 
9810  case 531:
9811 #line 4440 "ripper.y"
9812  {
9813  (yyval.val) = (yyvsp[(2) - (2)].val);
9814  ;}
9815  break;
9816 
9817  case 532:
9818 #line 4444 "ripper.y"
9819  {
9820  (yyval.val) = new_args_tail(Qnone, Qnone, Qnone);
9821  ;}
9822  break;
9823 
9824  case 533:
9825 #line 4450 "ripper.y"
9826  {
9827  (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), Qnone, (yyvsp[(6) - (6)].val));
9828  ;}
9829  break;
9830 
9831  case 534:
9832 #line 4454 "ripper.y"
9833  {
9834  (yyval.val) = new_args((yyvsp[(1) - (8)].val), (yyvsp[(3) - (8)].val), (yyvsp[(5) - (8)].val), (yyvsp[(7) - (8)].val), (yyvsp[(8) - (8)].val));
9835  ;}
9836  break;
9837 
9838  case 535:
9839 #line 4458 "ripper.y"
9840  {
9841  (yyval.val) = new_args((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnone, Qnone, (yyvsp[(4) - (4)].val));
9842  ;}
9843  break;
9844 
9845  case 536:
9846 #line 4462 "ripper.y"
9847  {
9848  (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), Qnone, (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
9849  ;}
9850  break;
9851 
9852  case 537:
9853 #line 4466 "ripper.y"
9854  {
9855  (yyval.val) = new_args((yyvsp[(1) - (4)].val), Qnone, (yyvsp[(3) - (4)].val), Qnone, (yyvsp[(4) - (4)].val));
9856  ;}
9857  break;
9858 
9859  case 538:
9860 #line 4470 "ripper.y"
9861  {
9862  (yyval.val) = new_args((yyvsp[(1) - (6)].val), Qnone, (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
9863  ;}
9864  break;
9865 
9866  case 539:
9867 #line 4474 "ripper.y"
9868  {
9869  (yyval.val) = new_args((yyvsp[(1) - (2)].val), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].val));
9870  ;}
9871  break;
9872 
9873  case 540:
9874 #line 4478 "ripper.y"
9875  {
9876  (yyval.val) = new_args(Qnone, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnone, (yyvsp[(4) - (4)].val));
9877  ;}
9878  break;
9879 
9880  case 541:
9881 #line 4482 "ripper.y"
9882  {
9883  (yyval.val) = new_args(Qnone, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
9884  ;}
9885  break;
9886 
9887  case 542:
9888 #line 4486 "ripper.y"
9889  {
9890  (yyval.val) = new_args(Qnone, (yyvsp[(1) - (2)].val), Qnone, Qnone, (yyvsp[(2) - (2)].val));
9891  ;}
9892  break;
9893 
9894  case 543:
9895 #line 4490 "ripper.y"
9896  {
9897  (yyval.val) = new_args(Qnone, (yyvsp[(1) - (4)].val), Qnone, (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
9898  ;}
9899  break;
9900 
9901  case 544:
9902 #line 4494 "ripper.y"
9903  {
9904  (yyval.val) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].val), Qnone, (yyvsp[(2) - (2)].val));
9905  ;}
9906  break;
9907 
9908  case 545:
9909 #line 4498 "ripper.y"
9910  {
9911  (yyval.val) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
9912  ;}
9913  break;
9914 
9915  case 546:
9916 #line 4502 "ripper.y"
9917  {
9918  (yyval.val) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].val));
9919  ;}
9920  break;
9921 
9922  case 547:
9923 #line 4506 "ripper.y"
9924  {
9925  (yyval.val) = new_args_tail(Qnone, Qnone, Qnone);
9926  (yyval.val) = new_args(Qnone, Qnone, Qnone, Qnone, (yyval.val));
9927  ;}
9928  break;
9929 
9930  case 548:
9931 #line 4513 "ripper.y"
9932  {
9933 #if 0
9934  yyerror("formal argument cannot be a constant");
9935  (yyval.val) = 0;
9936 #endif
9937  (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val));
9938 
9939  ;}
9940  break;
9941 
9942  case 549:
9943 #line 4522 "ripper.y"
9944  {
9945 #if 0
9946  yyerror("formal argument cannot be an instance variable");
9947  (yyval.val) = 0;
9948 #endif
9949  (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val));
9950 
9951  ;}
9952  break;
9953 
9954  case 550:
9955 #line 4531 "ripper.y"
9956  {
9957 #if 0
9958  yyerror("formal argument cannot be a global variable");
9959  (yyval.val) = 0;
9960 #endif
9961  (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val));
9962 
9963  ;}
9964  break;
9965 
9966  case 551:
9967 #line 4540 "ripper.y"
9968  {
9969 #if 0
9970  yyerror("formal argument cannot be a class variable");
9971  (yyval.val) = 0;
9972 #endif
9973  (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val));
9974 
9975  ;}
9976  break;
9977 
9978  case 553:
9979 #line 4552 "ripper.y"
9980  {
9981  formal_argument(get_id((yyvsp[(1) - (1)].val)));
9982  (yyval.val) = (yyvsp[(1) - (1)].val);
9983  ;}
9984  break;
9985 
9986  case 554:
9987 #line 4559 "ripper.y"
9988  {
9989  arg_var(get_id((yyvsp[(1) - (1)].val)));
9990 #if 0
9991  (yyval.val) = NEW_ARGS_AUX((yyvsp[(1) - (1)].val), 1);
9992 #endif
9993  (yyval.val) = get_value((yyvsp[(1) - (1)].val));
9994 
9995  ;}
9996  break;
9997 
9998  case 555:
9999 #line 4568 "ripper.y"
10000  {
10001  ID tid = internal_id();
10002  arg_var(tid);
10003 #if 0
10004  if (dyna_in_block()) {
10005  (yyvsp[(2) - (3)].val)->nd_value = NEW_DVAR(tid);
10006  }
10007  else {
10008  (yyvsp[(2) - (3)].val)->nd_value = NEW_LVAR(tid);
10009  }
10010  (yyval.val) = NEW_ARGS_AUX(tid, 1);
10011  (yyval.val)->nd_next = (yyvsp[(2) - (3)].val);
10012 #endif
10013  (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val));
10014 
10015  ;}
10016  break;
10017 
10018  case 556:
10019 #line 4589 "ripper.y"
10020  {
10021  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
10022  ;}
10023  break;
10024 
10025  case 557:
10026 #line 4594 "ripper.y"
10027  {
10028 #if 0
10029  (yyval.val) = (yyvsp[(1) - (3)].val);
10030  (yyval.val)->nd_plen++;
10031  (yyval.val)->nd_next = block_append((yyval.val)->nd_next, (yyvsp[(3) - (3)].val)->nd_next);
10032  rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].val));
10033 #endif
10034  (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
10035 
10036  ;}
10037  break;
10038 
10039  case 558:
10040 #line 4607 "ripper.y"
10041  {
10042  arg_var(formal_argument(get_id((yyvsp[(1) - (2)].val))));
10043  (yyval.val) = assignable((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
10044 #if 0
10045  (yyval.val) = NEW_KW_ARG(0, (yyval.val));
10046 #endif
10047  (yyval.val) = rb_assoc_new((yyval.val), (yyvsp[(2) - (2)].val));
10048 
10049  ;}
10050  break;
10051 
10052  case 559:
10053 #line 4619 "ripper.y"
10054  {
10055  arg_var(formal_argument(get_id((yyvsp[(1) - (2)].val))));
10056  (yyval.val) = assignable((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
10057 #if 0
10058  (yyval.val) = NEW_KW_ARG(0, (yyval.val));
10059 #endif
10060  (yyval.val) = rb_assoc_new((yyval.val), (yyvsp[(2) - (2)].val));
10061 
10062  ;}
10063  break;
10064 
10065  case 560:
10066 #line 4631 "ripper.y"
10067  {
10068 #if 0
10069  (yyval.val) = (yyvsp[(1) - (1)].val);
10070 #endif
10071  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
10072 
10073  ;}
10074  break;
10075 
10076  case 561:
10077 #line 4639 "ripper.y"
10078  {
10079 #if 0
10080  NODE *kws = (yyvsp[(1) - (3)].val);
10081 
10082  while (kws->nd_next) {
10083  kws = kws->nd_next;
10084  }
10085  kws->nd_next = (yyvsp[(3) - (3)].val);
10086  (yyval.val) = (yyvsp[(1) - (3)].val);
10087 #endif
10088  (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
10089 
10090  ;}
10091  break;
10092 
10093  case 562:
10094 #line 4656 "ripper.y"
10095  {
10096 #if 0
10097  (yyval.val) = (yyvsp[(1) - (1)].val);
10098 #endif
10099  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
10100 
10101  ;}
10102  break;
10103 
10104  case 563:
10105 #line 4664 "ripper.y"
10106  {
10107 #if 0
10108  NODE *kws = (yyvsp[(1) - (3)].val);
10109 
10110  while (kws->nd_next) {
10111  kws = kws->nd_next;
10112  }
10113  kws->nd_next = (yyvsp[(3) - (3)].val);
10114  (yyval.val) = (yyvsp[(1) - (3)].val);
10115 #endif
10116  (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
10117 
10118  ;}
10119  break;
10120 
10121  case 566:
10122 #line 4684 "ripper.y"
10123  {
10124  shadowing_lvar(get_id((yyvsp[(2) - (2)].val)));
10125  (yyval.val) = (yyvsp[(2) - (2)].val);
10126  ;}
10127  break;
10128 
10129  case 567:
10130 #line 4689 "ripper.y"
10131  {
10132  (yyval.val) = internal_id();
10133  ;}
10134  break;
10135 
10136  case 568:
10137 #line 4695 "ripper.y"
10138  {
10139  arg_var(formal_argument(get_id((yyvsp[(1) - (3)].val))));
10140  (yyval.val) = assignable((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
10141 #if 0
10142  (yyval.val) = NEW_OPT_ARG(0, (yyval.val));
10143 #endif
10144  (yyval.val) = rb_assoc_new((yyval.val), (yyvsp[(3) - (3)].val));
10145 
10146  ;}
10147  break;
10148 
10149  case 569:
10150 #line 4707 "ripper.y"
10151  {
10152  arg_var(formal_argument(get_id((yyvsp[(1) - (3)].val))));
10153  (yyval.val) = assignable((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
10154 #if 0
10155  (yyval.val) = NEW_OPT_ARG(0, (yyval.val));
10156 #endif
10157  (yyval.val) = rb_assoc_new((yyval.val), (yyvsp[(3) - (3)].val));
10158 
10159  ;}
10160  break;
10161 
10162  case 570:
10163 #line 4719 "ripper.y"
10164  {
10165 #if 0
10166  (yyval.val) = (yyvsp[(1) - (1)].val);
10167 #endif
10168  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
10169 
10170  ;}
10171  break;
10172 
10173  case 571:
10174 #line 4727 "ripper.y"
10175  {
10176 #if 0
10177  NODE *opts = (yyvsp[(1) - (3)].val);
10178 
10179  while (opts->nd_next) {
10180  opts = opts->nd_next;
10181  }
10182  opts->nd_next = (yyvsp[(3) - (3)].val);
10183  (yyval.val) = (yyvsp[(1) - (3)].val);
10184 #endif
10185  (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
10186 
10187  ;}
10188  break;
10189 
10190  case 572:
10191 #line 4743 "ripper.y"
10192  {
10193 #if 0
10194  (yyval.val) = (yyvsp[(1) - (1)].val);
10195 #endif
10196  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
10197 
10198  ;}
10199  break;
10200 
10201  case 573:
10202 #line 4751 "ripper.y"
10203  {
10204 #if 0
10205  NODE *opts = (yyvsp[(1) - (3)].val);
10206 
10207  while (opts->nd_next) {
10208  opts = opts->nd_next;
10209  }
10210  opts->nd_next = (yyvsp[(3) - (3)].val);
10211  (yyval.val) = (yyvsp[(1) - (3)].val);
10212 #endif
10213  (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
10214 
10215  ;}
10216  break;
10217 
10218  case 576:
10219 #line 4771 "ripper.y"
10220  {
10221 #if 0
10222  if (!is_local_id((yyvsp[(2) - (2)].val)))
10223  yyerror("rest argument must be local variable");
10224 #endif
10225  arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].val))));
10226 #if 0
10227  (yyval.val) = (yyvsp[(2) - (2)].val);
10228 #endif
10229  (yyval.val) = dispatch1(rest_param, (yyvsp[(2) - (2)].val));
10230 
10231  ;}
10232  break;
10233 
10234  case 577:
10235 #line 4784 "ripper.y"
10236  {
10237 #if 0
10238  (yyval.val) = internal_id();
10239  arg_var((yyval.val));
10240 #endif
10241  (yyval.val) = dispatch1(rest_param, Qnil);
10242 
10243  ;}
10244  break;
10245 
10246  case 580:
10247 #line 4799 "ripper.y"
10248  {
10249 #if 0
10250  if (!is_local_id((yyvsp[(2) - (2)].val)))
10251  yyerror("block argument must be local variable");
10252  else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].val)))
10253  yyerror("duplicated block argument name");
10254 #endif
10255  arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].val))));
10256 #if 0
10257  (yyval.val) = (yyvsp[(2) - (2)].val);
10258 #endif
10259  (yyval.val) = dispatch1(blockarg, (yyvsp[(2) - (2)].val));
10260 
10261  ;}
10262  break;
10263 
10264  case 581:
10265 #line 4816 "ripper.y"
10266  {
10267  (yyval.val) = (yyvsp[(2) - (2)].val);
10268  ;}
10269  break;
10270 
10271  case 582:
10272 #line 4820 "ripper.y"
10273  {
10274 #if 0
10275  (yyval.val) = 0;
10276 #endif
10277  (yyval.val) = Qundef;
10278 
10279  ;}
10280  break;
10281 
10282  case 583:
10283 #line 4830 "ripper.y"
10284  {
10285 #if 0
10286  value_expr((yyvsp[(1) - (1)].val));
10287  (yyval.val) = (yyvsp[(1) - (1)].val);
10288  if (!(yyval.val)) (yyval.val) = NEW_NIL();
10289 #endif
10290  (yyval.val) = (yyvsp[(1) - (1)].val);
10291 
10292  ;}
10293  break;
10294 
10295  case 584:
10296 #line 4839 "ripper.y"
10297  {lex_state = EXPR_BEG;;}
10298  break;
10299 
10300  case 585:
10301 #line 4840 "ripper.y"
10302  {
10303 #if 0
10304  if ((yyvsp[(3) - (4)].val) == 0) {
10305  yyerror("can't define singleton method for ().");
10306  }
10307  else {
10308  switch (nd_type((yyvsp[(3) - (4)].val))) {
10309  case NODE_STR:
10310  case NODE_DSTR:
10311  case NODE_XSTR:
10312  case NODE_DXSTR:
10313  case NODE_DREGX:
10314  case NODE_LIT:
10315  case NODE_ARRAY:
10316  case NODE_ZARRAY:
10317  yyerror("can't define singleton method for literals");
10318  default:
10319  value_expr((yyvsp[(3) - (4)].val));
10320  break;
10321  }
10322  }
10323  (yyval.val) = (yyvsp[(3) - (4)].val);
10324 #endif
10325  (yyval.val) = dispatch1(paren, (yyvsp[(3) - (4)].val));
10326 
10327  ;}
10328  break;
10329 
10330  case 587:
10331 #line 4870 "ripper.y"
10332  {
10333 #if 0
10334  (yyval.val) = (yyvsp[(1) - (2)].val);
10335 #endif
10336  (yyval.val) = dispatch1(assoclist_from_args, (yyvsp[(1) - (2)].val));
10337 
10338  ;}
10339  break;
10340 
10341  case 588:
10342 #line 4882 "ripper.y"
10343  {
10344  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
10345  ;}
10346  break;
10347 
10348  case 589:
10349 #line 4887 "ripper.y"
10350  {
10351 #if 0
10352  (yyval.val) = list_concat((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
10353 #endif
10354  (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
10355 
10356  ;}
10357  break;
10358 
10359  case 590:
10360 #line 4897 "ripper.y"
10361  {
10362 #if 0
10363  (yyval.val) = list_append(NEW_LIST((yyvsp[(1) - (3)].val)), (yyvsp[(3) - (3)].val));
10364 #endif
10365  (yyval.val) = dispatch2(assoc_new, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
10366 
10367  ;}
10368  break;
10369 
10370  case 591:
10371 #line 4905 "ripper.y"
10372  {
10373 #if 0
10374  (yyval.val) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].val)))), (yyvsp[(2) - (2)].val));
10375 #endif
10376  (yyval.val) = dispatch2(assoc_new, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
10377 
10378  ;}
10379  break;
10380 
10381  case 592:
10382 #line 4913 "ripper.y"
10383  {
10384 #if 0
10385  (yyval.val) = list_append(NEW_LIST(0), (yyvsp[(2) - (2)].val));
10386 #endif
10387  (yyval.val) = dispatch1(assoc_splat, (yyvsp[(2) - (2)].val));
10388 
10389  ;}
10390  break;
10391 
10392  case 603:
10393 #line 4943 "ripper.y"
10394  { (yyval.val) = (yyvsp[(1) - (1)].val); ;}
10395  break;
10396 
10397  case 604:
10398 #line 4948 "ripper.y"
10399  { (yyval.val) = (yyvsp[(1) - (1)].val); ;}
10400  break;
10401 
10402  case 614:
10403 #line 4971 "ripper.y"
10404  {yyerrok;;}
10405  break;
10406 
10407  case 617:
10408 #line 4976 "ripper.y"
10409  {yyerrok;;}
10410  break;
10411 
10412  case 618:
10413 #line 4980 "ripper.y"
10414  {
10415 #if 0
10416  (yyval.val) = 0;
10417 #endif
10418  (yyval.val) = Qundef;
10419 
10420  ;}
10421  break;
10422 
10423 
10424 /* Line 1267 of yacc.c. */
10425 #line 10424 "parse.c"
10426  default: break;
10427  }
10428  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
10429 
10430  YYPOPSTACK (yylen);
10431  yylen = 0;
10432  YY_STACK_PRINT (yyss, yyssp);
10433 
10434  *++yyvsp = yyval;
10435 
10436 
10437  /* Now `shift' the result of the reduction. Determine what state
10438  that goes to, based on the state we popped back to and the rule
10439  number reduced by. */
10440 
10441  yyn = yyr1[yyn];
10442 
10443  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
10444  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
10445  yystate = yytable[yystate];
10446  else
10447  yystate = yydefgoto[yyn - YYNTOKENS];
10448 
10449  goto yynewstate;
10450 
10451 
10452 /*------------------------------------.
10453 | yyerrlab -- here on detecting error |
10454 `------------------------------------*/
10455 yyerrlab:
10456  /* If not already recovering from an error, report this error. */
10457  if (!yyerrstatus)
10458  {
10460 #if ! YYERROR_VERBOSE
10461  parser_yyerror (parser, YY_("syntax error"));
10462 #else
10463  {
10464  YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
10465  if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
10466  {
10467  YYSIZE_T yyalloc = 2 * yysize;
10468  if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
10469  yyalloc = YYSTACK_ALLOC_MAXIMUM;
10470  if (yymsg != yymsgbuf)
10471  YYSTACK_FREE (yymsg);
10472  yymsg = (char *) YYSTACK_ALLOC (yyalloc);
10473  if (yymsg)
10474  yymsg_alloc = yyalloc;
10475  else
10476  {
10477  yymsg = yymsgbuf;
10478  yymsg_alloc = sizeof yymsgbuf;
10479  }
10480  }
10481 
10482  if (0 < yysize && yysize <= yymsg_alloc)
10483  {
10484  (void) yysyntax_error (yymsg, yystate, yychar);
10485  parser_yyerror (parser, yymsg);
10486  }
10487  else
10488  {
10489  parser_yyerror (parser, YY_("syntax error"));
10490  if (yysize != 0)
10492  }
10493  }
10494 #endif
10495  }
10496 
10497 
10498 
10499  if (yyerrstatus == 3)
10500  {
10501  /* If just tried and failed to reuse look-ahead token after an
10502  error, discard it. */
10503 
10504  if (yychar <= YYEOF)
10505  {
10506  /* Return failure if at end of input. */
10507  if (yychar == YYEOF)
10508  YYABORT;
10509  }
10510  else
10511  {
10512  yydestruct ("Error: discarding",
10513  yytoken, &yylval, parser);
10514  yychar = YYEMPTY;
10515  }
10516  }
10517 
10518  /* Else will try to reuse look-ahead token after shifting the error
10519  token. */
10521 
10522 
10523 /*---------------------------------------------------.
10524 | yyerrorlab -- error raised explicitly by YYERROR. |
10525 `---------------------------------------------------*/
10526 yyerrorlab:
10527 
10528  /* Pacify compilers like GCC when the user code never invokes
10529  YYERROR and the label yyerrorlab therefore never appears in user
10530  code. */
10531  if (/*CONSTCOND*/ 0)
10532  goto yyerrorlab;
10533 
10534  /* Do not reclaim the symbols of the rule which action triggered
10535  this YYERROR. */
10536  YYPOPSTACK (yylen);
10537  yylen = 0;
10538  YY_STACK_PRINT (yyss, yyssp);
10539  yystate = *yyssp;
10540  goto yyerrlab1;
10541 
10542 
10543 /*-------------------------------------------------------------.
10544 | yyerrlab1 -- common code for both syntax error and YYERROR. |
10545 `-------------------------------------------------------------*/
10546 yyerrlab1:
10547  yyerrstatus = 3; /* Each real token shifted decrements this. */
10548 
10549  for (;;)
10550  {
10551  yyn = yypact[yystate];
10552  if (yyn != YYPACT_NINF)
10553  {
10554  yyn += YYTERROR;
10555  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
10556  {
10557  yyn = yytable[yyn];
10558  if (0 < yyn)
10559  break;
10560  }
10561  }
10562 
10563  /* Pop the current state because it cannot handle the error token. */
10564  if (yyssp == yyss)
10565  YYABORT;
10566 
10567 
10568  yydestruct ("Error: popping",
10569  yystos[yystate], yyvsp, parser);
10570  YYPOPSTACK (1);
10571  yystate = *yyssp;
10572  YY_STACK_PRINT (yyss, yyssp);
10573  }
10574 
10575  if (yyn == YYFINAL)
10576  YYACCEPT;
10577 
10578  *++yyvsp = yylval;
10579 
10580 
10581  /* Shift the error token. */
10582  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
10583 
10584  yystate = yyn;
10585  goto yynewstate;
10586 
10587 
10588 /*-------------------------------------.
10589 | yyacceptlab -- YYACCEPT comes here. |
10590 `-------------------------------------*/
10591 yyacceptlab:
10592  yyresult = 0;
10593  goto yyreturn;
10594 
10595 /*-----------------------------------.
10596 | yyabortlab -- YYABORT comes here. |
10597 `-----------------------------------*/
10598 yyabortlab:
10599  yyresult = 1;
10600  goto yyreturn;
10601 
10602 #ifndef yyoverflow
10603 /*-------------------------------------------------.
10604 | yyexhaustedlab -- memory exhaustion comes here. |
10605 `-------------------------------------------------*/
10607  parser_yyerror (parser, YY_("memory exhausted"));
10608  yyresult = 2;
10609  /* Fall through. */
10610 #endif
10611 
10612 yyreturn:
10613  if (yychar != YYEOF && yychar != YYEMPTY)
10614  yydestruct ("Cleanup: discarding lookahead",
10615  yytoken, &yylval, parser);
10616  /* Do not reclaim the symbols of the rule which action triggered
10617  this YYABORT or YYACCEPT. */
10618  YYPOPSTACK (yylen);
10619  YY_STACK_PRINT (yyss, yyssp);
10620  while (yyssp != yyss)
10621  {
10622  yydestruct ("Cleanup: popping",
10623  yystos[*yyssp], yyvsp, parser);
10624  YYPOPSTACK (1);
10625  }
10626 #ifndef yyoverflow
10627  if (yyss != yyssa)
10628  YYSTACK_FREE (yyss);
10629 #endif
10630 #if YYERROR_VERBOSE
10631  if (yymsg != yymsgbuf)
10632  YYSTACK_FREE (yymsg);
10633 #endif
10634  /* Make sure YYID is used. */
10635  return YYID (yyresult);
10636 }
10637 
10638 
10639 #line 4988 "ripper.y"
10640 
10641 # undef parser
10642 # undef yylex
10643 # undef yylval
10644 # define yylval (*((YYSTYPE*)(parser->parser_yylval)))
10645 
10646 static int parser_regx_options(struct parser_params*);
10647 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
10648 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
10649 static int parser_parse_string(struct parser_params*,NODE*);
10650 static int parser_here_document(struct parser_params*,NODE*);
10651 
10652 
10653 # define nextc() parser_nextc(parser)
10654 # define pushback(c) parser_pushback(parser, (c))
10655 # define newtok() parser_newtok(parser)
10656 # define tokspace(n) parser_tokspace(parser, (n))
10657 # define tokadd(c) parser_tokadd(parser, (c))
10658 # define tok_hex(numlen) parser_tok_hex(parser, (numlen))
10659 # define read_escape(flags,e) parser_read_escape(parser, (flags), (e))
10660 # define tokadd_escape(e) parser_tokadd_escape(parser, (e))
10661 # define regx_options() parser_regx_options(parser)
10662 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,(f),(t),(p),(n),(e))
10663 # define parse_string(n) parser_parse_string(parser,(n))
10664 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, (c), (enc))
10665 # define here_document(n) parser_here_document(parser,(n))
10666 # define heredoc_identifier() parser_heredoc_identifier(parser)
10667 # define heredoc_restore(n) parser_heredoc_restore(parser,(n))
10668 # define whole_match_p(e,l,i) parser_whole_match_p(parser,(e),(l),(i))
10669 
10670 #ifndef RIPPER
10671 # define set_yylval_str(x) (yylval.node = NEW_STR(x))
10672 # define set_yylval_num(x) (yylval.num = (x))
10673 # define set_yylval_id(x) (yylval.id = (x))
10674 # define set_yylval_name(x) (yylval.id = (x))
10675 # define set_yylval_literal(x) (yylval.node = NEW_LIT(x))
10676 # define set_yylval_node(x) (yylval.node = (x))
10677 # define yylval_id() (yylval.id)
10678 #else
10679 static inline VALUE
10680 ripper_yylval_id(ID x)
10681 {
10682  return (VALUE)NEW_LASGN(x, ID2SYM(x));
10683 }
10684 # define set_yylval_str(x) (void)(x)
10685 # define set_yylval_num(x) (void)(x)
10686 # define set_yylval_id(x) (void)(x)
10687 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
10688 # define set_yylval_literal(x) (void)(x)
10689 # define set_yylval_node(x) (void)(x)
10690 # define yylval_id() yylval.id
10691 #endif
10692 
10693 #ifndef RIPPER
10694 #define ripper_flush(p) (void)(p)
10695 #else
10696 #define ripper_flush(p) ((p)->tokp = (p)->parser_lex_p)
10697 
10698 #define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
10699 
10700 static int
10701 ripper_has_scan_event(struct parser_params *parser)
10702 {
10703 
10704  if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
10705  return lex_p > parser->tokp;
10706 }
10707 
10708 static VALUE
10709 ripper_scan_event_val(struct parser_params *parser, int t)
10710 {
10711  VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
10712  VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
10713  ripper_flush(parser);
10714  return rval;
10715 }
10716 
10717 static void
10718 ripper_dispatch_scan_event(struct parser_params *parser, int t)
10719 {
10720  if (!ripper_has_scan_event(parser)) return;
10721  yylval_rval = ripper_scan_event_val(parser, t);
10722 }
10723 
10724 static void
10725 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
10726 {
10727  if (!ripper_has_scan_event(parser)) return;
10728  (void)ripper_scan_event_val(parser, t);
10729 }
10730 
10731 static void
10732 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
10733 {
10734  int saved_line = ruby_sourceline;
10735  const char *saved_tokp = parser->tokp;
10736 
10737  ruby_sourceline = parser->delayed_line;
10738  parser->tokp = lex_pbeg + parser->delayed_col;
10739  yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
10740  parser->delayed = Qnil;
10741  ruby_sourceline = saved_line;
10742  parser->tokp = saved_tokp;
10743 }
10744 #endif /* RIPPER */
10745 
10746 #include "ruby/regex.h"
10747 #include "ruby/util.h"
10748 
10749 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
10750  since ours (we hope) works properly with all combinations of
10751  machines, compilers, `char' and `unsigned char' argument types.
10752  (Per Bothner suggested the basic approach.) */
10753 #undef SIGN_EXTEND_CHAR
10754 #if __STDC__
10755 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
10756 #else /* not __STDC__ */
10757 /* As in Harbison and Steele. */
10758 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
10759 #endif
10760 
10761 #define parser_encoding_name() (current_enc->name)
10762 #define parser_mbclen() mbclen((lex_p-1),lex_pend,current_enc)
10763 #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,current_enc)
10764 #define is_identchar(p,e,enc) (rb_enc_isalnum(*(p),(enc)) || (*(p)) == '_' || !ISASCII(*(p)))
10765 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,current_enc))
10766 
10767 #define parser_isascii() ISASCII(*(lex_p-1))
10768 
10769 #ifndef RIPPER
10770 static int
10771 token_info_get_column(struct parser_params *parser, const char *token)
10772 {
10773  int column = 1;
10774  const char *p, *pend = lex_p - strlen(token);
10775  for (p = lex_pbeg; p < pend; p++) {
10776  if (*p == '\t') {
10777  column = (((column - 1) / 8) + 1) * 8;
10778  }
10779  column++;
10780  }
10781  return column;
10782 }
10783 
10784 static int
10785 token_info_has_nonspaces(struct parser_params *parser, const char *token)
10786 {
10787  const char *p, *pend = lex_p - strlen(token);
10788  for (p = lex_pbeg; p < pend; p++) {
10789  if (*p != ' ' && *p != '\t') {
10790  return 1;
10791  }
10792  }
10793  return 0;
10794 }
10795 
10796 #undef token_info_push
10797 static void
10798 token_info_push(struct parser_params *parser, const char *token)
10799 {
10800  token_info *ptinfo;
10801 
10802  if (!parser->parser_token_info_enabled) return;
10803  ptinfo = ALLOC(token_info);
10804  ptinfo->token = token;
10805  ptinfo->linenum = ruby_sourceline;
10806  ptinfo->column = token_info_get_column(parser, token);
10807  ptinfo->nonspc = token_info_has_nonspaces(parser, token);
10808  ptinfo->next = parser->parser_token_info;
10809 
10810  parser->parser_token_info = ptinfo;
10811 }
10812 
10813 #undef token_info_pop
10814 static void
10815 token_info_pop(struct parser_params *parser, const char *token)
10816 {
10817  int linenum;
10818  token_info *ptinfo = parser->parser_token_info;
10819 
10820  if (!ptinfo) return;
10821  parser->parser_token_info = ptinfo->next;
10822  if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */
10823  goto finish;
10824  }
10825  linenum = ruby_sourceline;
10826  if (linenum == ptinfo->linenum) { /* SKIP */
10827  goto finish;
10828  }
10829  if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */
10830  goto finish;
10831  }
10832  if (parser->parser_token_info_enabled) {
10834  "mismatched indentations at '%s' with '%s' at %d",
10835  token, ptinfo->token, ptinfo->linenum);
10836  }
10837 
10838  finish:
10839  xfree(ptinfo);
10840 }
10841 #endif /* RIPPER */
10842 
10843 static int
10844 parser_yyerror(struct parser_params *parser, const char *msg)
10845 {
10846 #ifndef RIPPER
10847  const int max_line_margin = 30;
10848  const char *p, *pe;
10849  char *buf;
10850  long len;
10851  int i;
10852 
10853  compile_error(PARSER_ARG "%s", msg);
10854  p = lex_p;
10855  while (lex_pbeg <= p) {
10856  if (*p == '\n') break;
10857  p--;
10858  }
10859  p++;
10860 
10861  pe = lex_p;
10862  while (pe < lex_pend) {
10863  if (*pe == '\n') break;
10864  pe++;
10865  }
10866 
10867  len = pe - p;
10868  if (len > 4) {
10869  char *p2;
10870  const char *pre = "", *post = "";
10871 
10872  if (len > max_line_margin * 2 + 10) {
10873  if (lex_p - p > max_line_margin) {
10874  p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
10875  pre = "...";
10876  }
10877  if (pe - lex_p > max_line_margin) {
10878  pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
10879  post = "...";
10880  }
10881  len = pe - p;
10882  }
10883  buf = ALLOCA_N(char, len+2);
10884  MEMCPY(buf, p, char, len);
10885  buf[len] = '\0';
10886  rb_compile_error_append("%s%s%s", pre, buf, post);
10887 
10888  i = (int)(lex_p - p);
10889  p2 = buf; pe = buf + len;
10890 
10891  while (p2 < pe) {
10892  if (*p2 != '\t') *p2 = ' ';
10893  p2++;
10894  }
10895  buf[i] = '^';
10896  buf[i+1] = '\0';
10897  rb_compile_error_append("%s%s", pre, buf);
10898  }
10899 #else
10900  dispatch1(parse_error, STR_NEW2(msg));
10901 #endif /* !RIPPER */
10902  return 0;
10903 }
10904 
10905 static void parser_prepare(struct parser_params *parser);
10906 
10907 #ifndef RIPPER
10908 static VALUE
10909 debug_lines(const char *f)
10910 {
10911  ID script_lines;
10912  CONST_ID(script_lines, "SCRIPT_LINES__");
10913  if (rb_const_defined_at(rb_cObject, script_lines)) {
10914  VALUE hash = rb_const_get_at(rb_cObject, script_lines);
10915  if (RB_TYPE_P(hash, T_HASH)) {
10917  VALUE lines = rb_ary_new();
10918  rb_hash_aset(hash, fname, lines);
10919  return lines;
10920  }
10921  }
10922  return 0;
10923 }
10924 
10925 static VALUE
10926 coverage(const char *f, int n)
10927 {
10928  VALUE coverages = rb_get_coverages();
10929  if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
10931  VALUE lines = rb_ary_new2(n);
10932  int i;
10933  RBASIC(lines)->klass = 0;
10934  for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil;
10935  RARRAY(lines)->as.heap.len = n;
10936  rb_hash_aset(coverages, fname, lines);
10937  return lines;
10938  }
10939  return 0;
10940 }
10941 
10942 static int
10944 {
10945  return strcmp(ruby_sourcefile, "-e") == 0;
10946 }
10947 
10948 static VALUE
10950 {
10951  int n;
10952  NODE *tree;
10953  struct parser_params *parser = (struct parser_params *)arg;
10954 
10955  if (!compile_for_eval && rb_safe_level() == 0) {
10957  if (ruby_debug_lines && ruby_sourceline > 0) {
10958  VALUE str = STR_NEW0();
10959  n = ruby_sourceline;
10960  do {
10962  } while (--n);
10963  }
10964 
10965  if (!e_option_supplied(parser)) {
10967  }
10968  }
10969 
10970  parser_prepare(parser);
10971  deferred_nodes = 0;
10972 #ifndef RIPPER
10974 #endif
10975 #ifndef RIPPER
10978  parser->parser_ruby_sourceline);
10979  }
10980 #endif
10981  n = yyparse((void*)parser);
10982 #ifndef RIPPER
10985  parser->parser_ruby_sourceline);
10986  }
10987 #endif
10988  ruby_debug_lines = 0;
10989  ruby_coverage = 0;
10990  compile_for_eval = 0;
10991 
10992  lex_strterm = 0;
10993  lex_p = lex_pbeg = lex_pend = 0;
10994  lex_lastline = lex_nextline = 0;
10995  if (parser->nerr) {
10996  return 0;
10997  }
10998  tree = ruby_eval_tree;
10999  if (!tree) {
11000  tree = NEW_NIL();
11001  }
11002  else if (ruby_eval_tree_begin) {
11003  tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
11004  }
11005  return (VALUE)tree;
11006 }
11007 
11008 static NODE*
11009 yycompile(struct parser_params *parser, const char *f, int line)
11010 {
11012  ruby_sourceline = line - 1;
11013  return (NODE *)rb_suppress_tracing(yycompile0, (VALUE)parser);
11014 }
11015 #endif /* !RIPPER */
11016 
11017 static rb_encoding *
11019 {
11020  rb_encoding *enc = rb_enc_get(s);
11021  if (!rb_enc_asciicompat(enc)) {
11022  rb_raise(rb_eArgError, "invalid source encoding");
11023  }
11024  return enc;
11025 }
11026 
11027 static VALUE
11029 {
11030  char *beg, *end, *pend;
11032 
11033  beg = RSTRING_PTR(s);
11034  if (lex_gets_ptr) {
11035  if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
11036  beg += lex_gets_ptr;
11037  }
11038  pend = RSTRING_PTR(s) + RSTRING_LEN(s);
11039  end = beg;
11040  while (end < pend) {
11041  if (*end++ == '\n') break;
11042  }
11043  lex_gets_ptr = end - RSTRING_PTR(s);
11044  return rb_enc_str_new(beg, end - beg, enc);
11045 }
11046 
11047 static VALUE
11049 {
11050  VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
11051  if (NIL_P(line)) return line;
11053 #ifndef RIPPER
11054  if (ruby_debug_lines) {
11057  }
11058  if (ruby_coverage) {
11060  }
11061 #endif
11062  return line;
11063 }
11064 
11065 #ifdef RIPPER
11067 #else
11069 
11070 static NODE*
11071 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11072 {
11073  struct parser_params *parser;
11074  NODE *node;
11075 
11076  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11078  lex_gets_ptr = 0;
11079  lex_input = s;
11080  lex_pbeg = lex_p = lex_pend = 0;
11082 
11083  node = yycompile(parser, f, line);
11084  RB_GC_GUARD(vparser); /* prohibit tail call optimization */
11085 
11086  return node;
11087 }
11088 
11089 NODE*
11090 rb_compile_string(const char *f, VALUE s, int line)
11091 {
11093  return parser_compile_string(rb_parser_new(), f, s, line);
11094 }
11095 
11096 NODE*
11097 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11098 {
11100  return parser_compile_string(vparser, f, s, line);
11101 }
11102 
11103 NODE*
11104 rb_compile_cstr(const char *f, const char *s, int len, int line)
11105 {
11106  VALUE str = rb_str_new(s, len);
11107  return parser_compile_string(rb_parser_new(), f, str, line);
11108 }
11109 
11110 NODE*
11111 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
11112 {
11113  VALUE str = rb_str_new(s, len);
11114  return parser_compile_string(vparser, f, str, line);
11115 }
11116 
11117 static VALUE
11119 {
11120  return rb_io_gets(io);
11121 }
11122 
11123 NODE*
11124 rb_compile_file(const char *f, VALUE file, int start)
11125 {
11126  VALUE volatile vparser = rb_parser_new();
11127 
11128  return rb_parser_compile_file(vparser, f, file, start);
11129 }
11130 
11131 NODE*
11132 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
11133 {
11134  struct parser_params *parser;
11135  NODE *node;
11136 
11137  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11139  lex_input = file;
11140  lex_pbeg = lex_p = lex_pend = 0;
11142 
11143  node = yycompile(parser, f, start);
11144  RB_GC_GUARD(vparser); /* prohibit tail call optimization */
11145 
11146  return node;
11147 }
11148 #endif /* !RIPPER */
11149 
11150 #define STR_FUNC_ESCAPE 0x01
11151 #define STR_FUNC_EXPAND 0x02
11152 #define STR_FUNC_REGEXP 0x04
11153 #define STR_FUNC_QWORDS 0x08
11154 #define STR_FUNC_SYMBOL 0x10
11155 #define STR_FUNC_INDENT 0x20
11156 
11158  str_squote = (0),
11166 };
11167 
11168 static VALUE
11169 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
11170 {
11171  VALUE str;
11172 
11173  str = rb_enc_str_new(p, n, enc);
11174  if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
11176  }
11177  else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
11179  }
11180  }
11181 
11182  return str;
11183 }
11184 
11185 #define lex_goto_eol(parser) ((parser)->parser_lex_p = (parser)->parser_lex_pend)
11186 #define lex_eol_p() (lex_p >= lex_pend)
11187 #define peek(c) peek_n((c), 0)
11188 #define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n])
11189 
11190 static inline int
11192 {
11193  int c;
11194 
11195  if (lex_p == lex_pend) {
11196  VALUE v = lex_nextline;
11197  lex_nextline = 0;
11198  if (!v) {
11199  if (parser->eofp)
11200  return -1;
11201 
11202  if (!lex_input || NIL_P(v = lex_getline(parser))) {
11203  parser->eofp = Qtrue;
11204  lex_goto_eol(parser);
11205  return -1;
11206  }
11207  }
11208  {
11209 #ifdef RIPPER
11210  if (parser->tokp < lex_pend) {
11211  if (NIL_P(parser->delayed)) {
11212  parser->delayed = rb_str_buf_new(1024);
11213  rb_enc_associate(parser->delayed, current_enc);
11214  rb_str_buf_cat(parser->delayed,
11215  parser->tokp, lex_pend - parser->tokp);
11216  parser->delayed_line = ruby_sourceline;
11217  parser->delayed_col = (int)(parser->tokp - lex_pbeg);
11218  }
11219  else {
11220  rb_str_buf_cat(parser->delayed,
11221  parser->tokp, lex_pend - parser->tokp);
11222  }
11223  }
11224 #endif
11225  if (heredoc_end > 0) {
11227  heredoc_end = 0;
11228  }
11229  ruby_sourceline++;
11230  parser->line_count++;
11231  lex_pbeg = lex_p = RSTRING_PTR(v);
11232  lex_pend = lex_p + RSTRING_LEN(v);
11233  ripper_flush(parser);
11234  lex_lastline = v;
11235  }
11236  }
11237  c = (unsigned char)*lex_p++;
11238  if (c == '\r' && peek('\n')) {
11239  lex_p++;
11240  c = '\n';
11241  }
11242 
11243  return c;
11244 }
11245 
11246 static void
11247 parser_pushback(struct parser_params *parser, int c)
11248 {
11249  if (c == -1) return;
11250  lex_p--;
11251  if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
11252  lex_p--;
11253  }
11254 }
11255 
11256 #define was_bol() (lex_p == lex_pbeg + 1)
11257 
11258 #define tokfix() (tokenbuf[tokidx]='\0')
11259 #define tok() tokenbuf
11260 #define toklen() tokidx
11261 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
11262 
11263 static char*
11265 {
11266  tokidx = 0;
11268  if (!tokenbuf) {
11269  toksiz = 60;
11270  tokenbuf = ALLOC_N(char, 60);
11271  }
11272  if (toksiz > 4096) {
11273  toksiz = 60;
11274  REALLOC_N(tokenbuf, char, 60);
11275  }
11276  return tokenbuf;
11277 }
11278 
11279 static char *
11280 parser_tokspace(struct parser_params *parser, int n)
11281 {
11282  tokidx += n;
11283 
11284  if (tokidx >= toksiz) {
11285  do {toksiz *= 2;} while (toksiz < tokidx);
11286  REALLOC_N(tokenbuf, char, toksiz);
11287  }
11288  return &tokenbuf[tokidx-n];
11289 }
11290 
11291 static void
11292 parser_tokadd(struct parser_params *parser, int c)
11293 {
11294  tokenbuf[tokidx++] = (char)c;
11295  if (tokidx >= toksiz) {
11296  toksiz *= 2;
11297  REALLOC_N(tokenbuf, char, toksiz);
11298  }
11299 }
11300 
11301 static int
11302 parser_tok_hex(struct parser_params *parser, size_t *numlen)
11303 {
11304  int c;
11305 
11306  c = scan_hex(lex_p, 2, numlen);
11307  if (!*numlen) {
11308  yyerror("invalid hex escape");
11309  return 0;
11310  }
11311  lex_p += *numlen;
11312  return c;
11313 }
11314 
11315 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
11316 
11317 /* return value is for ?\u3042 */
11318 static int
11320  int string_literal, int symbol_literal, int regexp_literal)
11321 {
11322  /*
11323  * If string_literal is true, then we allow multiple codepoints
11324  * in \u{}, and add the codepoints to the current token.
11325  * Otherwise we're parsing a character literal and return a single
11326  * codepoint without adding it
11327  */
11328 
11329  int codepoint;
11330  size_t numlen;
11331 
11332  if (regexp_literal) { tokadd('\\'); tokadd('u'); }
11333 
11334  if (peek('{')) { /* handle \u{...} form */
11335  do {
11336  if (regexp_literal) { tokadd(*lex_p); }
11337  nextc();
11338  codepoint = scan_hex(lex_p, 6, &numlen);
11339  if (numlen == 0) {
11340  yyerror("invalid Unicode escape");
11341  return 0;
11342  }
11343  if (codepoint > 0x10ffff) {
11344  yyerror("invalid Unicode codepoint (too large)");
11345  return 0;
11346  }
11347  lex_p += numlen;
11348  if (regexp_literal) {
11349  tokcopy((int)numlen);
11350  }
11351  else if (codepoint >= 0x80) {
11352  *encp = rb_utf8_encoding();
11353  if (string_literal) tokaddmbc(codepoint, *encp);
11354  }
11355  else if (string_literal) {
11356  tokadd(codepoint);
11357  }
11358  } while (string_literal && (peek(' ') || peek('\t')));
11359 
11360  if (!peek('}')) {
11361  yyerror("unterminated Unicode escape");
11362  return 0;
11363  }
11364 
11365  if (regexp_literal) { tokadd('}'); }
11366  nextc();
11367  }
11368  else { /* handle \uxxxx form */
11369  codepoint = scan_hex(lex_p, 4, &numlen);
11370  if (numlen < 4) {
11371  yyerror("invalid Unicode escape");
11372  return 0;
11373  }
11374  lex_p += 4;
11375  if (regexp_literal) {
11376  tokcopy(4);
11377  }
11378  else if (codepoint >= 0x80) {
11379  *encp = rb_utf8_encoding();
11380  if (string_literal) tokaddmbc(codepoint, *encp);
11381  }
11382  else if (string_literal) {
11383  tokadd(codepoint);
11384  }
11385  }
11386 
11387  return codepoint;
11388 }
11389 
11390 #define ESCAPE_CONTROL 1
11391 #define ESCAPE_META 2
11392 
11393 static int
11395  rb_encoding **encp)
11396 {
11397  int c;
11398  size_t numlen;
11399 
11400  switch (c = nextc()) {
11401  case '\\': /* Backslash */
11402  return c;
11403 
11404  case 'n': /* newline */
11405  return '\n';
11406 
11407  case 't': /* horizontal tab */
11408  return '\t';
11409 
11410  case 'r': /* carriage-return */
11411  return '\r';
11412 
11413  case 'f': /* form-feed */
11414  return '\f';
11415 
11416  case 'v': /* vertical tab */
11417  return '\13';
11418 
11419  case 'a': /* alarm(bell) */
11420  return '\007';
11421 
11422  case 'e': /* escape */
11423  return 033;
11424 
11425  case '0': case '1': case '2': case '3': /* octal constant */
11426  case '4': case '5': case '6': case '7':
11427  pushback(c);
11428  c = scan_oct(lex_p, 3, &numlen);
11429  lex_p += numlen;
11430  return c;
11431 
11432  case 'x': /* hex constant */
11433  c = tok_hex(&numlen);
11434  if (numlen == 0) return 0;
11435  return c;
11436 
11437  case 'b': /* backspace */
11438  return '\010';
11439 
11440  case 's': /* space */
11441  return ' ';
11442 
11443  case 'M':
11444  if (flags & ESCAPE_META) goto eof;
11445  if ((c = nextc()) != '-') {
11446  pushback(c);
11447  goto eof;
11448  }
11449  if ((c = nextc()) == '\\') {
11450  if (peek('u')) goto eof;
11451  return read_escape(flags|ESCAPE_META, encp) | 0x80;
11452  }
11453  else if (c == -1 || !ISASCII(c)) goto eof;
11454  else {
11455  return ((c & 0xff) | 0x80);
11456  }
11457 
11458  case 'C':
11459  if ((c = nextc()) != '-') {
11460  pushback(c);
11461  goto eof;
11462  }
11463  case 'c':
11464  if (flags & ESCAPE_CONTROL) goto eof;
11465  if ((c = nextc())== '\\') {
11466  if (peek('u')) goto eof;
11467  c = read_escape(flags|ESCAPE_CONTROL, encp);
11468  }
11469  else if (c == '?')
11470  return 0177;
11471  else if (c == -1 || !ISASCII(c)) goto eof;
11472  return c & 0x9f;
11473 
11474  eof:
11475  case -1:
11476  yyerror("Invalid escape character syntax");
11477  return '\0';
11478 
11479  default:
11480  return c;
11481  }
11482 }
11483 
11484 static void
11486 {
11487  int len = rb_enc_codelen(c, enc);
11488  rb_enc_mbcput(c, tokspace(len), enc);
11489 }
11490 
11491 static int
11493 {
11494  int c;
11495  int flags = 0;
11496  size_t numlen;
11497 
11498  first:
11499  switch (c = nextc()) {
11500  case '\n':
11501  return 0; /* just ignore */
11502 
11503  case '0': case '1': case '2': case '3': /* octal constant */
11504  case '4': case '5': case '6': case '7':
11505  {
11506  ruby_scan_oct(--lex_p, 3, &numlen);
11507  if (numlen == 0) goto eof;
11508  lex_p += numlen;
11509  tokcopy((int)numlen + 1);
11510  }
11511  return 0;
11512 
11513  case 'x': /* hex constant */
11514  {
11515  tok_hex(&numlen);
11516  if (numlen == 0) return -1;
11517  tokcopy((int)numlen + 2);
11518  }
11519  return 0;
11520 
11521  case 'M':
11522  if (flags & ESCAPE_META) goto eof;
11523  if ((c = nextc()) != '-') {
11524  pushback(c);
11525  goto eof;
11526  }
11527  tokcopy(3);
11528  flags |= ESCAPE_META;
11529  goto escaped;
11530 
11531  case 'C':
11532  if (flags & ESCAPE_CONTROL) goto eof;
11533  if ((c = nextc()) != '-') {
11534  pushback(c);
11535  goto eof;
11536  }
11537  tokcopy(3);
11538  goto escaped;
11539 
11540  case 'c':
11541  if (flags & ESCAPE_CONTROL) goto eof;
11542  tokcopy(2);
11543  flags |= ESCAPE_CONTROL;
11544  escaped:
11545  if ((c = nextc()) == '\\') {
11546  goto first;
11547  }
11548  else if (c == -1) goto eof;
11549  tokadd(c);
11550  return 0;
11551 
11552  eof:
11553  case -1:
11554  yyerror("Invalid escape character syntax");
11555  return -1;
11556 
11557  default:
11558  tokadd('\\');
11559  tokadd(c);
11560  }
11561  return 0;
11562 }
11563 
11564 static int
11566 {
11567  int kcode = 0;
11568  int kopt = 0;
11569  int options = 0;
11570  int c, opt, kc;
11571 
11572  newtok();
11573  while (c = nextc(), ISALPHA(c)) {
11574  if (c == 'o') {
11575  options |= RE_OPTION_ONCE;
11576  }
11577  else if (rb_char_to_option_kcode(c, &opt, &kc)) {
11578  if (kc >= 0) {
11579  if (kc != rb_ascii8bit_encindex()) kcode = c;
11580  kopt = opt;
11581  }
11582  else {
11583  options |= opt;
11584  }
11585  }
11586  else {
11587  tokadd(c);
11588  }
11589  }
11590  options |= kopt;
11591  pushback(c);
11592  if (toklen()) {
11593  tokfix();
11594  compile_error(PARSER_ARG "unknown regexp option%s - %s",
11595  toklen() > 1 ? "s" : "", tok());
11596  }
11597  return options | RE_OPTION_ENCODING(kcode);
11598 }
11599 
11600 static void
11602 {
11603  rb_str_free(str);
11604  rb_gc_force_recycle(str);
11605 }
11606 
11607 static int
11609 {
11610  int len = parser_precise_mbclen();
11611  if (!MBCLEN_CHARFOUND_P(len)) {
11612  compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
11613  return -1;
11614  }
11615  tokadd(c);
11616  lex_p += --len;
11617  if (len > 0) tokcopy(len);
11618  return c;
11619 }
11620 
11621 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c))
11622 
11623 static inline int
11625 {
11626  switch (c) {
11627  case '$': case '*': case '+': case '.':
11628  case '?': case '^': case '|':
11629  case ')': case ']': case '}': case '>':
11630  return TRUE;
11631  default:
11632  return FALSE;
11633  }
11634 }
11635 
11636 static int
11638  int func, int term, int paren, long *nest,
11639  rb_encoding **encp)
11640 {
11641  int c;
11642  int has_nonascii = 0;
11643  rb_encoding *enc = *encp;
11644  char *errbuf = 0;
11645  static const char mixed_msg[] = "%s mixed within %s source";
11646 
11647 #define mixed_error(enc1, enc2) if (!errbuf) { \
11648  size_t len = sizeof(mixed_msg) - 4; \
11649  len += strlen(rb_enc_name(enc1)); \
11650  len += strlen(rb_enc_name(enc2)); \
11651  errbuf = ALLOCA_N(char, len); \
11652  snprintf(errbuf, len, mixed_msg, \
11653  rb_enc_name(enc1), \
11654  rb_enc_name(enc2)); \
11655  yyerror(errbuf); \
11656  }
11657 #define mixed_escape(beg, enc1, enc2) do { \
11658  const char *pos = lex_p; \
11659  lex_p = (beg); \
11660  mixed_error((enc1), (enc2)); \
11661  lex_p = pos; \
11662  } while (0)
11663 
11664  while ((c = nextc()) != -1) {
11665  if (paren && c == paren) {
11666  ++*nest;
11667  }
11668  else if (c == term) {
11669  if (!nest || !*nest) {
11670  pushback(c);
11671  break;
11672  }
11673  --*nest;
11674  }
11675  else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
11676  int c2 = *lex_p;
11677  if (c2 == '$' || c2 == '@' || c2 == '{') {
11678  pushback(c);
11679  break;
11680  }
11681  }
11682  else if (c == '\\') {
11683  const char *beg = lex_p - 1;
11684  c = nextc();
11685  switch (c) {
11686  case '\n':
11687  if (func & STR_FUNC_QWORDS) break;
11688  if (func & STR_FUNC_EXPAND) continue;
11689  tokadd('\\');
11690  break;
11691 
11692  case '\\':
11693  if (func & STR_FUNC_ESCAPE) tokadd(c);
11694  break;
11695 
11696  case 'u':
11697  if ((func & STR_FUNC_EXPAND) == 0) {
11698  tokadd('\\');
11699  break;
11700  }
11701  parser_tokadd_utf8(parser, &enc, 1,
11702  func & STR_FUNC_SYMBOL,
11703  func & STR_FUNC_REGEXP);
11704  if (has_nonascii && enc != *encp) {
11705  mixed_escape(beg, enc, *encp);
11706  }
11707  continue;
11708 
11709  default:
11710  if (c == -1) return -1;
11711  if (!ISASCII(c)) {
11712  if ((func & STR_FUNC_EXPAND) == 0) tokadd('\\');
11713  goto non_ascii;
11714  }
11715  if (func & STR_FUNC_REGEXP) {
11716  if (c == term && !simple_re_meta(c)) {
11717  tokadd(c);
11718  continue;
11719  }
11720  pushback(c);
11721  if ((c = tokadd_escape(&enc)) < 0)
11722  return -1;
11723  if (has_nonascii && enc != *encp) {
11724  mixed_escape(beg, enc, *encp);
11725  }
11726  continue;
11727  }
11728  else if (func & STR_FUNC_EXPAND) {
11729  pushback(c);
11730  if (func & STR_FUNC_ESCAPE) tokadd('\\');
11731  c = read_escape(0, &enc);
11732  }
11733  else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11734  /* ignore backslashed spaces in %w */
11735  }
11736  else if (c != term && !(paren && c == paren)) {
11737  tokadd('\\');
11738  pushback(c);
11739  continue;
11740  }
11741  }
11742  }
11743  else if (!parser_isascii()) {
11744  non_ascii:
11745  has_nonascii = 1;
11746  if (enc != *encp) {
11747  mixed_error(enc, *encp);
11748  continue;
11749  }
11750  if (tokadd_mbchar(c) == -1) return -1;
11751  continue;
11752  }
11753  else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11754  pushback(c);
11755  break;
11756  }
11757  if (c & 0x80) {
11758  has_nonascii = 1;
11759  if (enc != *encp) {
11760  mixed_error(enc, *encp);
11761  continue;
11762  }
11763  }
11764  tokadd(c);
11765  }
11766  *encp = enc;
11767  return c;
11768 }
11769 
11770 #define NEW_STRTERM(func, term, paren) \
11771  rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
11772 
11773 #ifdef RIPPER
11774 static void
11775 ripper_flush_string_content(struct parser_params *parser, rb_encoding *enc)
11776 {
11777  if (!NIL_P(parser->delayed)) {
11778  ptrdiff_t len = lex_p - parser->tokp;
11779  if (len > 0) {
11780  rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
11781  }
11782  ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
11783  parser->tokp = lex_p;
11784  }
11785 }
11786 
11787 #define flush_string_content(enc) ripper_flush_string_content(parser, (enc))
11788 #else
11789 #define flush_string_content(enc) ((void)(enc))
11790 #endif
11791 
11792 RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20 + 31) / 32];
11793 /* this can be shared with ripper, since it's independent from struct
11794  * parser_params. */
11795 #ifndef RIPPER
11796 #define BIT(c, idx) (((c) / 32 - 1 == idx) ? (1U << ((c) % 32)) : 0)
11797 #define SPECIAL_PUNCT(idx) ( \
11798  BIT('~', idx) | BIT('*', idx) | BIT('$', idx) | BIT('?', idx) | \
11799  BIT('!', idx) | BIT('@', idx) | BIT('/', idx) | BIT('\\', idx) | \
11800  BIT(';', idx) | BIT(',', idx) | BIT('.', idx) | BIT('=', idx) | \
11801  BIT(':', idx) | BIT('<', idx) | BIT('>', idx) | BIT('\"', idx) | \
11802  BIT('&', idx) | BIT('`', idx) | BIT('\'', idx) | BIT('+', idx) | \
11803  BIT('0', idx))
11804 const unsigned int ruby_global_name_punct_bits[] = {
11805  SPECIAL_PUNCT(0),
11806  SPECIAL_PUNCT(1),
11807  SPECIAL_PUNCT(2),
11808 };
11809 #undef BIT
11810 #undef SPECIAL_PUNCT
11811 #endif
11812 
11813 static inline int
11815 {
11816  if (c <= 0x20 || 0x7e < c) return 0;
11817  return (ruby_global_name_punct_bits[(c - 0x20) / 32] >> (c % 32)) & 1;
11818 }
11819 
11820 static int
11822 {
11823  int c;
11824  const char *p = lex_p;
11825 
11826  if (p + 1 >= lex_pend) return 0;
11827  c = *p++;
11828  switch (c) {
11829  case '$':
11830  if ((c = *p) == '-') {
11831  if (++p >= lex_pend) return 0;
11832  c = *p;
11833  }
11834  else if (is_global_name_punct(c) || ISDIGIT(c)) {
11835  return tSTRING_DVAR;
11836  }
11837  break;
11838  case '@':
11839  if ((c = *p) == '@') {
11840  if (++p >= lex_pend) return 0;
11841  c = *p;
11842  }
11843  break;
11844  case '{':
11845  lex_p = p;
11846  command_start = TRUE;
11847  return tSTRING_DBEG;
11848  default:
11849  return 0;
11850  }
11851  if (!ISASCII(c) || c == '_' || ISALPHA(c))
11852  return tSTRING_DVAR;
11853  return 0;
11854 }
11855 
11856 static int
11857 parser_parse_string(struct parser_params *parser, NODE *quote)
11858 {
11859  int func = (int)quote->nd_func;
11860  int term = nd_term(quote);
11861  int paren = nd_paren(quote);
11862  int c, space = 0;
11864 
11865  if (func == -1) return tSTRING_END;
11866  c = nextc();
11867  if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11868  do {c = nextc();} while (ISSPACE(c));
11869  space = 1;
11870  }
11871  if (c == term && !quote->nd_nest) {
11872  if (func & STR_FUNC_QWORDS) {
11873  quote->nd_func = -1;
11874  return ' ';
11875  }
11876  if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
11878  return tREGEXP_END;
11879  }
11880  if (space) {
11881  pushback(c);
11882  return ' ';
11883  }
11884  newtok();
11885  if ((func & STR_FUNC_EXPAND) && c == '#') {
11886  int t = parser_peek_variable_name(parser);
11887  if (t) return t;
11888  tokadd('#');
11889  c = nextc();
11890  }
11891  pushback(c);
11892  if (tokadd_string(func, term, paren, &quote->nd_nest,
11893  &enc) == -1) {
11894  ruby_sourceline = nd_line(quote);
11895  if (func & STR_FUNC_REGEXP) {
11896  if (parser->eofp)
11897  compile_error(PARSER_ARG "unterminated regexp meets end of file");
11898  return tREGEXP_END;
11899  }
11900  else {
11901  if (parser->eofp)
11902  compile_error(PARSER_ARG "unterminated string meets end of file");
11903  return tSTRING_END;
11904  }
11905  }
11906 
11907  tokfix();
11908  set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
11909  flush_string_content(enc);
11910 
11911  return tSTRING_CONTENT;
11912 }
11913 
11914 static int
11916 {
11917  int c = nextc(), term, func = 0;
11918  long len;
11919 
11920  if (c == '-') {
11921  c = nextc();
11922  func = STR_FUNC_INDENT;
11923  }
11924  switch (c) {
11925  case '\'':
11926  func |= str_squote; goto quoted;
11927  case '"':
11928  func |= str_dquote; goto quoted;
11929  case '`':
11930  func |= str_xquote;
11931  quoted:
11932  newtok();
11933  tokadd(func);
11934  term = c;
11935  while ((c = nextc()) != -1 && c != term) {
11936  if (tokadd_mbchar(c) == -1) return 0;
11937  }
11938  if (c == -1) {
11939  compile_error(PARSER_ARG "unterminated here document identifier");
11940  return 0;
11941  }
11942  break;
11943 
11944  default:
11945  if (!parser_is_identchar()) {
11946  pushback(c);
11947  if (func & STR_FUNC_INDENT) {
11948  pushback('-');
11949  }
11950  return 0;
11951  }
11952  newtok();
11953  term = '"';
11954  tokadd(func |= str_dquote);
11955  do {
11956  if (tokadd_mbchar(c) == -1) return 0;
11957  } while ((c = nextc()) != -1 && parser_is_identchar());
11958  pushback(c);
11959  break;
11960  }
11961 
11962  tokfix();
11963 #ifdef RIPPER
11964  ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
11965 #endif
11966  len = lex_p - lex_pbeg;
11967  lex_goto_eol(parser);
11969  STR_NEW(tok(), toklen()), /* nd_lit */
11970  len, /* nd_nth */
11971  lex_lastline); /* nd_orig */
11973  ripper_flush(parser);
11974  return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
11975 }
11976 
11977 static void
11979 {
11980  VALUE line;
11981 
11982  line = here->nd_orig;
11983  lex_lastline = line;
11984  lex_pbeg = RSTRING_PTR(line);
11985  lex_pend = lex_pbeg + RSTRING_LEN(line);
11986  lex_p = lex_pbeg + here->nd_nth;
11988  ruby_sourceline = nd_line(here);
11989  dispose_string(here->nd_lit);
11990  rb_gc_force_recycle((VALUE)here);
11991  ripper_flush(parser);
11992 }
11993 
11994 static int
11996  const char *eos, long len, int indent)
11997 {
11998  const char *p = lex_pbeg;
11999  long n;
12000 
12001  if (indent) {
12002  while (*p && ISSPACE(*p)) p++;
12003  }
12004  n = lex_pend - (p + len);
12005  if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE;
12006  return strncmp(eos, p, len) == 0;
12007 }
12008 
12009 #ifdef RIPPER
12010 static void
12011 ripper_dispatch_heredoc_end(struct parser_params *parser)
12012 {
12013  if (!NIL_P(parser->delayed))
12014  ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12015  lex_goto_eol(parser);
12016  ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
12017 }
12018 
12019 #define dispatch_heredoc_end() ripper_dispatch_heredoc_end(parser)
12020 #else
12021 #define dispatch_heredoc_end() ((void)0)
12022 #endif
12023 
12024 static int
12026 {
12027  int c, func, indent = 0;
12028  const char *eos, *p, *pend;
12029  long len;
12030  VALUE str = 0;
12032 
12033  eos = RSTRING_PTR(here->nd_lit);
12034  len = RSTRING_LEN(here->nd_lit) - 1;
12035  indent = (func = *eos++) & STR_FUNC_INDENT;
12036 
12037  if ((c = nextc()) == -1) {
12038  error:
12039  compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
12040 #ifdef RIPPER
12041  if (NIL_P(parser->delayed)) {
12042  ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
12043  }
12044  else {
12045  if (str ||
12046  ((len = lex_p - parser->tokp) > 0 &&
12047  (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
12048  rb_str_append(parser->delayed, str);
12049  }
12050  ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12051  }
12052  lex_goto_eol(parser);
12053 #endif
12054  restore:
12056  lex_strterm = 0;
12057  return 0;
12058  }
12059  if (was_bol() && whole_match_p(eos, len, indent)) {
12062  return tSTRING_END;
12063  }
12064 
12065  if (!(func & STR_FUNC_EXPAND)) {
12066  do {
12068  pend = lex_pend;
12069  if (pend > p) {
12070  switch (pend[-1]) {
12071  case '\n':
12072  if (--pend == p || pend[-1] != '\r') {
12073  pend++;
12074  break;
12075  }
12076  case '\r':
12077  --pend;
12078  }
12079  }
12080  if (str)
12081  rb_str_cat(str, p, pend - p);
12082  else
12083  str = STR_NEW(p, pend - p);
12084  if (pend < lex_pend) rb_str_cat(str, "\n", 1);
12085  lex_goto_eol(parser);
12086  if (nextc() == -1) {
12087  if (str) dispose_string(str);
12088  goto error;
12089  }
12090  } while (!whole_match_p(eos, len, indent));
12091  }
12092  else {
12093  /* int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
12094  newtok();
12095  if (c == '#') {
12096  int t = parser_peek_variable_name(parser);
12097  if (t) return t;
12098  tokadd('#');
12099  c = nextc();
12100  }
12101  do {
12102  pushback(c);
12103  if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
12104  if (parser->eofp) goto error;
12105  goto restore;
12106  }
12107  if (c != '\n') {
12108  set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12109  flush_string_content(enc);
12110  return tSTRING_CONTENT;
12111  }
12112  tokadd(nextc());
12113  /* if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
12114  if ((c = nextc()) == -1) goto error;
12115  } while (!whole_match_p(eos, len, indent));
12116  str = STR_NEW3(tok(), toklen(), enc, func);
12117  }
12120  lex_strterm = NEW_STRTERM(-1, 0, 0);
12121  set_yylval_str(str);
12122  return tSTRING_CONTENT;
12123 }
12124 
12125 #include "lex.c"
12126 
12127 static void
12129 {
12130 #ifndef RIPPER
12131  rb_warning0("ambiguous first argument; put parentheses or even spaces");
12132 #else
12134 #endif
12135 }
12136 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
12137 
12138 static ID
12140 {
12141 #ifndef RIPPER
12142  if (!is_local_id(lhs))
12143  yyerror("formal argument must be local variable");
12144 #endif
12145  shadowing_lvar(lhs);
12146  return lhs;
12147 }
12148 
12149 static int
12150 lvar_defined_gen(struct parser_params *parser, ID id)
12151 {
12152  return (dyna_in_block() && dvar_defined_get(id)) || local_id(id);
12153 }
12154 
12155 /* emacsen -*- hack */
12156 static long
12157 parser_encode_length(struct parser_params *parser, const char *name, long len)
12158 {
12159  long nlen;
12160 
12161  if (len > 5 && name[nlen = len - 5] == '-') {
12162  if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
12163  return nlen;
12164  }
12165  if (len > 4 && name[nlen = len - 4] == '-') {
12166  if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
12167  return nlen;
12168  if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
12169  !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
12170  /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */
12171  return nlen;
12172  }
12173  return len;
12174 }
12175 
12176 static void
12177 parser_set_encode(struct parser_params *parser, const char *name)
12178 {
12179  int idx = rb_enc_find_index(name);
12180  rb_encoding *enc;
12181  VALUE excargs[3];
12182 
12183  if (idx < 0) {
12184  excargs[1] = rb_sprintf("unknown encoding name: %s", name);
12185  error:
12186  excargs[0] = rb_eArgError;
12187  excargs[2] = rb_make_backtrace();
12188  rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
12189  rb_exc_raise(rb_make_exception(3, excargs));
12190  }
12191  enc = rb_enc_from_index(idx);
12192  if (!rb_enc_asciicompat(enc)) {
12193  excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
12194  goto error;
12195  }
12196  parser->enc = enc;
12197 #ifndef RIPPER
12198  if (ruby_debug_lines) {
12199  long i, n = RARRAY_LEN(ruby_debug_lines);
12200  const VALUE *p = RARRAY_PTR(ruby_debug_lines);
12201  for (i = 0; i < n; ++i) {
12202  rb_enc_associate_index(*p, idx);
12203  }
12204  }
12205 #endif
12206 }
12207 
12208 static int
12210 {
12211  const char *p = lex_pbeg, *pend = lex_p - 1;
12212  if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
12213  while (p < pend) {
12214  if (!ISSPACE(*p)) return 0;
12215  p++;
12216  }
12217  return 1;
12218 }
12219 
12220 #ifndef RIPPER
12221 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
12222 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
12223 
12224 static void
12225 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
12226 {
12227  if (!comment_at_top(parser)) {
12228  return;
12229  }
12230  parser_set_encode(parser, val);
12231 }
12232 
12233 static void
12234 parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
12235 {
12236  int *p = &parser->parser_token_info_enabled;
12237 
12238  switch (*val) {
12239  case 't': case 'T':
12240  if (strcasecmp(val, "true") == 0) {
12241  *p = TRUE;
12242  return;
12243  }
12244  break;
12245  case 'f': case 'F':
12246  if (strcasecmp(val, "false") == 0) {
12247  *p = FALSE;
12248  return;
12249  }
12250  break;
12251  }
12252  rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val);
12253 }
12254 
12256  const char *name;
12259 };
12260 
12261 static const struct magic_comment magic_comments[] = {
12264  {"warn_indent", parser_set_token_info},
12265 };
12266 #endif
12267 
12268 static const char *
12269 magic_comment_marker(const char *str, long len)
12270 {
12271  long i = 2;
12272 
12273  while (i < len) {
12274  switch (str[i]) {
12275  case '-':
12276  if (str[i-1] == '*' && str[i-2] == '-') {
12277  return str + i + 1;
12278  }
12279  i += 2;
12280  break;
12281  case '*':
12282  if (i + 1 >= len) return 0;
12283  if (str[i+1] != '-') {
12284  i += 4;
12285  }
12286  else if (str[i-1] != '-') {
12287  i += 2;
12288  }
12289  else {
12290  return str + i + 2;
12291  }
12292  break;
12293  default:
12294  i += 3;
12295  break;
12296  }
12297  }
12298  return 0;
12299 }
12300 
12301 static int
12302 parser_magic_comment(struct parser_params *parser, const char *str, long len)
12303 {
12304  VALUE name = 0, val = 0;
12305  const char *beg, *end, *vbeg, *vend;
12306 #define str_copy(_s, _p, _n) ((_s) \
12307  ? (void)(rb_str_resize((_s), (_n)), \
12308  MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
12309  : (void)((_s) = STR_NEW((_p), (_n))))
12310 
12311  if (len <= 7) return FALSE;
12312  if (!(beg = magic_comment_marker(str, len))) return FALSE;
12313  if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
12314  str = beg;
12315  len = end - beg - 3;
12316 
12317  /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
12318  while (len > 0) {
12319 #ifndef RIPPER
12320  const struct magic_comment *p = magic_comments;
12321 #endif
12322  char *s;
12323  int i;
12324  long n = 0;
12325 
12326  for (; len > 0 && *str; str++, --len) {
12327  switch (*str) {
12328  case '\'': case '"': case ':': case ';':
12329  continue;
12330  }
12331  if (!ISSPACE(*str)) break;
12332  }
12333  for (beg = str; len > 0; str++, --len) {
12334  switch (*str) {
12335  case '\'': case '"': case ':': case ';':
12336  break;
12337  default:
12338  if (ISSPACE(*str)) break;
12339  continue;
12340  }
12341  break;
12342  }
12343  for (end = str; len > 0 && ISSPACE(*str); str++, --len);
12344  if (!len) break;
12345  if (*str != ':') continue;
12346 
12347  do str++; while (--len > 0 && ISSPACE(*str));
12348  if (!len) break;
12349  if (*str == '"') {
12350  for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
12351  if (*str == '\\') {
12352  --len;
12353  ++str;
12354  }
12355  }
12356  vend = str;
12357  if (len) {
12358  --len;
12359  ++str;
12360  }
12361  }
12362  else {
12363  for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
12364  vend = str;
12365  }
12366  while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
12367 
12368  n = end - beg;
12369  str_copy(name, beg, n);
12370  s = RSTRING_PTR(name);
12371  for (i = 0; i < n; ++i) {
12372  if (s[i] == '-') s[i] = '_';
12373  }
12374 #ifndef RIPPER
12375  do {
12376  if (STRNCASECMP(p->name, s, n) == 0) {
12377  n = vend - vbeg;
12378  if (p->length) {
12379  n = (*p->length)(parser, vbeg, n);
12380  }
12381  str_copy(val, vbeg, n);
12382  (*p->func)(parser, s, RSTRING_PTR(val));
12383  break;
12384  }
12385  } while (++p < magic_comments + numberof(magic_comments));
12386 #else
12387  str_copy(val, vbeg, vend - vbeg);
12388  dispatch2(magic_comment, name, val);
12389 #endif
12390  }
12391 
12392  return TRUE;
12393 }
12394 
12395 static void
12396 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
12397 {
12398  int sep = 0;
12399  const char *beg = str;
12400  VALUE s;
12401 
12402  for (;;) {
12403  if (send - str <= 6) return;
12404  switch (str[6]) {
12405  case 'C': case 'c': str += 6; continue;
12406  case 'O': case 'o': str += 5; continue;
12407  case 'D': case 'd': str += 4; continue;
12408  case 'I': case 'i': str += 3; continue;
12409  case 'N': case 'n': str += 2; continue;
12410  case 'G': case 'g': str += 1; continue;
12411  case '=': case ':':
12412  sep = 1;
12413  str += 6;
12414  break;
12415  default:
12416  str += 6;
12417  if (ISSPACE(*str)) break;
12418  continue;
12419  }
12420  if (STRNCASECMP(str-6, "coding", 6) == 0) break;
12421  }
12422  for (;;) {
12423  do {
12424  if (++str >= send) return;
12425  } while (ISSPACE(*str));
12426  if (sep) break;
12427  if (*str != '=' && *str != ':') return;
12428  sep = 1;
12429  str++;
12430  }
12431  beg = str;
12432  while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
12433  s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
12434  parser_set_encode(parser, RSTRING_PTR(s));
12435  rb_str_resize(s, 0);
12436 }
12437 
12438 static void
12440 {
12441  int c = nextc();
12442  switch (c) {
12443  case '#':
12444  if (peek('!')) parser->has_shebang = 1;
12445  break;
12446  case 0xef: /* UTF-8 BOM marker */
12447  if (lex_pend - lex_p >= 2 &&
12448  (unsigned char)lex_p[0] == 0xbb &&
12449  (unsigned char)lex_p[1] == 0xbf) {
12450  parser->enc = rb_utf8_encoding();
12451  lex_p += 2;
12452  lex_pbeg = lex_p;
12453  return;
12454  }
12455  break;
12456  case EOF:
12457  return;
12458  }
12459  pushback(c);
12460  parser->enc = rb_enc_get(lex_lastline);
12461 }
12462 
12463 #define IS_ARG() IS_lex_state(EXPR_ARG_ANY)
12464 #define IS_END() IS_lex_state(EXPR_END_ANY)
12465 #define IS_BEG() IS_lex_state(EXPR_BEG_ANY)
12466 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
12467 #define IS_LABEL_POSSIBLE() ((IS_lex_state(EXPR_BEG | EXPR_ENDFN) && !cmd_state) || IS_ARG())
12468 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1))
12469 #define IS_AFTER_OPERATOR() IS_lex_state(EXPR_FNAME | EXPR_DOT)
12470 
12471 #ifndef RIPPER
12472 #define ambiguous_operator(op, syn) ( \
12473  rb_warning0("`"op"' after local variable is interpreted as binary operator"), \
12474  rb_warning0("even though it seems like "syn""))
12475 #else
12476 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
12477 #endif
12478 #define warn_balanced(op, syn) ((void) \
12479  (!IS_lex_state_for(last_state, EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN|EXPR_ENDARG) && \
12480  space_seen && !ISSPACE(c) && \
12481  (ambiguous_operator(op, syn), 0)))
12482 
12483 static int
12485 {
12486  register int c;
12487  int space_seen = 0;
12488  int cmd_state;
12489  enum lex_state_e last_state;
12490  rb_encoding *enc;
12491  int mb;
12492 #ifdef RIPPER
12493  int fallthru = FALSE;
12494 #endif
12495 
12496  if (lex_strterm) {
12497  int token;
12498  if (nd_type(lex_strterm) == NODE_HEREDOC) {
12499  token = here_document(lex_strterm);
12500  if (token == tSTRING_END) {
12501  lex_strterm = 0;
12502  lex_state = EXPR_END;
12503  }
12504  }
12505  else {
12506  token = parse_string(lex_strterm);
12507  if (token == tSTRING_END || token == tREGEXP_END) {
12509  lex_strterm = 0;
12510  lex_state = EXPR_END;
12511  }
12512  }
12513  return token;
12514  }
12515  cmd_state = command_start;
12516  command_start = FALSE;
12517  retry:
12518  last_state = lex_state;
12519  switch (c = nextc()) {
12520  case '\0': /* NUL */
12521  case '\004': /* ^D */
12522  case '\032': /* ^Z */
12523  case -1: /* end of script. */
12524  return 0;
12525 
12526  /* white spaces */
12527  case ' ': case '\t': case '\f': case '\r':
12528  case '\13': /* '\v' */
12529  space_seen = 1;
12530 #ifdef RIPPER
12531  while ((c = nextc())) {
12532  switch (c) {
12533  case ' ': case '\t': case '\f': case '\r':
12534  case '\13': /* '\v' */
12535  break;
12536  default:
12537  goto outofloop;
12538  }
12539  }
12540  outofloop:
12541  pushback(c);
12542  ripper_dispatch_scan_event(parser, tSP);
12543 #endif
12544  goto retry;
12545 
12546  case '#': /* it's a comment */
12547  /* no magic_comment in shebang line */
12548  if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
12549  if (comment_at_top(parser)) {
12550  set_file_encoding(parser, lex_p, lex_pend);
12551  }
12552  }
12553  lex_p = lex_pend;
12554 #ifdef RIPPER
12555  ripper_dispatch_scan_event(parser, tCOMMENT);
12556  fallthru = TRUE;
12557 #endif
12558  /* fall through */
12559  case '\n':
12560  if (IS_lex_state(EXPR_BEG | EXPR_VALUE | EXPR_CLASS | EXPR_FNAME | EXPR_DOT)) {
12561 #ifdef RIPPER
12562  if (!fallthru) {
12563  ripper_dispatch_scan_event(parser, tIGNORED_NL);
12564  }
12565  fallthru = FALSE;
12566 #endif
12567  goto retry;
12568  }
12569  while ((c = nextc())) {
12570  switch (c) {
12571  case ' ': case '\t': case '\f': case '\r':
12572  case '\13': /* '\v' */
12573  space_seen = 1;
12574  break;
12575  case '.': {
12576  if ((c = nextc()) != '.') {
12577  pushback(c);
12578  pushback('.');
12579  goto retry;
12580  }
12581  }
12582  default:
12583  --ruby_sourceline;
12585  case -1: /* EOF no decrement*/
12586  lex_goto_eol(parser);
12587 #ifdef RIPPER
12588  if (c != -1) {
12589  parser->tokp = lex_p;
12590  }
12591 #endif
12592  goto normal_newline;
12593  }
12594  }
12595  normal_newline:
12596  command_start = TRUE;
12597  lex_state = EXPR_BEG;
12598  return '\n';
12599 
12600  case '*':
12601  if ((c = nextc()) == '*') {
12602  if ((c = nextc()) == '=') {
12604  lex_state = EXPR_BEG;
12605  return tOP_ASGN;
12606  }
12607  pushback(c);
12608  if (IS_SPCARG(c)) {
12609  rb_warning0("`**' interpreted as argument prefix");
12610  c = tDSTAR;
12611  }
12612  else if (IS_BEG()) {
12613  c = tDSTAR;
12614  }
12615  else {
12616  warn_balanced("**", "argument prefix");
12617  c = tPOW;
12618  }
12619  }
12620  else {
12621  if (c == '=') {
12622  set_yylval_id('*');
12623  lex_state = EXPR_BEG;
12624  return tOP_ASGN;
12625  }
12626  pushback(c);
12627  if (IS_SPCARG(c)) {
12628  rb_warning0("`*' interpreted as argument prefix");
12629  c = tSTAR;
12630  }
12631  else if (IS_BEG()) {
12632  c = tSTAR;
12633  }
12634  else {
12635  warn_balanced("*", "argument prefix");
12636  c = '*';
12637  }
12638  }
12639  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
12640  return c;
12641 
12642  case '!':
12643  c = nextc();
12644  if (IS_AFTER_OPERATOR()) {
12645  lex_state = EXPR_ARG;
12646  if (c == '@') {
12647  return '!';
12648  }
12649  }
12650  else {
12651  lex_state = EXPR_BEG;
12652  }
12653  if (c == '=') {
12654  return tNEQ;
12655  }
12656  if (c == '~') {
12657  return tNMATCH;
12658  }
12659  pushback(c);
12660  return '!';
12661 
12662  case '=':
12663  if (was_bol()) {
12664  /* skip embedded rd document */
12665  if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
12666 #ifdef RIPPER
12667  int first_p = TRUE;
12668 
12669  lex_goto_eol(parser);
12670  ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
12671 #endif
12672  for (;;) {
12673  lex_goto_eol(parser);
12674 #ifdef RIPPER
12675  if (!first_p) {
12676  ripper_dispatch_scan_event(parser, tEMBDOC);
12677  }
12678  first_p = FALSE;
12679 #endif
12680  c = nextc();
12681  if (c == -1) {
12682  compile_error(PARSER_ARG "embedded document meets end of file");
12683  return 0;
12684  }
12685  if (c != '=') continue;
12686  if (strncmp(lex_p, "end", 3) == 0 &&
12687  (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
12688  break;
12689  }
12690  }
12691  lex_goto_eol(parser);
12692 #ifdef RIPPER
12693  ripper_dispatch_scan_event(parser, tEMBDOC_END);
12694 #endif
12695  goto retry;
12696  }
12697  }
12698 
12699  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
12700  if ((c = nextc()) == '=') {
12701  if ((c = nextc()) == '=') {
12702  return tEQQ;
12703  }
12704  pushback(c);
12705  return tEQ;
12706  }
12707  if (c == '~') {
12708  return tMATCH;
12709  }
12710  else if (c == '>') {
12711  return tASSOC;
12712  }
12713  pushback(c);
12714  return '=';
12715 
12716  case '<':
12717  last_state = lex_state;
12718  c = nextc();
12719  if (c == '<' &&
12720  !IS_lex_state(EXPR_DOT | EXPR_CLASS) &&
12721  !IS_END() &&
12722  (!IS_ARG() || space_seen)) {
12723  int token = heredoc_identifier();
12724  if (token) return token;
12725  }
12726  if (IS_AFTER_OPERATOR()) {
12727  lex_state = EXPR_ARG;
12728  }
12729  else {
12730  if (IS_lex_state(EXPR_CLASS))
12731  command_start = TRUE;
12732  lex_state = EXPR_BEG;
12733  }
12734  if (c == '=') {
12735  if ((c = nextc()) == '>') {
12736  return tCMP;
12737  }
12738  pushback(c);
12739  return tLEQ;
12740  }
12741  if (c == '<') {
12742  if ((c = nextc()) == '=') {
12744  lex_state = EXPR_BEG;
12745  return tOP_ASGN;
12746  }
12747  pushback(c);
12748  warn_balanced("<<", "here document");
12749  return tLSHFT;
12750  }
12751  pushback(c);
12752  return '<';
12753 
12754  case '>':
12755  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
12756  if ((c = nextc()) == '=') {
12757  return tGEQ;
12758  }
12759  if (c == '>') {
12760  if ((c = nextc()) == '=') {
12762  lex_state = EXPR_BEG;
12763  return tOP_ASGN;
12764  }
12765  pushback(c);
12766  return tRSHFT;
12767  }
12768  pushback(c);
12769  return '>';
12770 
12771  case '"':
12772  lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
12773  return tSTRING_BEG;
12774 
12775  case '`':
12776  if (IS_lex_state(EXPR_FNAME)) {
12777  lex_state = EXPR_ENDFN;
12778  return c;
12779  }
12780  if (IS_lex_state(EXPR_DOT)) {
12781  if (cmd_state)
12782  lex_state = EXPR_CMDARG;
12783  else
12784  lex_state = EXPR_ARG;
12785  return c;
12786  }
12787  lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
12788  return tXSTRING_BEG;
12789 
12790  case '\'':
12791  lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
12792  return tSTRING_BEG;
12793 
12794  case '?':
12795  if (IS_END()) {
12796  lex_state = EXPR_VALUE;
12797  return '?';
12798  }
12799  c = nextc();
12800  if (c == -1) {
12801  compile_error(PARSER_ARG "incomplete character syntax");
12802  return 0;
12803  }
12804  if (rb_enc_isspace(c, current_enc)) {
12805  if (!IS_ARG()) {
12806  int c2 = 0;
12807  switch (c) {
12808  case ' ':
12809  c2 = 's';
12810  break;
12811  case '\n':
12812  c2 = 'n';
12813  break;
12814  case '\t':
12815  c2 = 't';
12816  break;
12817  case '\v':
12818  c2 = 'v';
12819  break;
12820  case '\r':
12821  c2 = 'r';
12822  break;
12823  case '\f':
12824  c2 = 'f';
12825  break;
12826  }
12827  if (c2) {
12828  rb_warnI("invalid character syntax; use ?\\%c", c2);
12829  }
12830  }
12831  ternary:
12832  pushback(c);
12833  lex_state = EXPR_VALUE;
12834  return '?';
12835  }
12836  newtok();
12837  enc = current_enc;
12838  if (!parser_isascii()) {
12839  if (tokadd_mbchar(c) == -1) return 0;
12840  }
12841  else if ((rb_enc_isalnum(c, current_enc) || c == '_') &&
12843  goto ternary;
12844  }
12845  else if (c == '\\') {
12846  if (peek('u')) {
12847  nextc();
12848  c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
12849  if (0x80 <= c) {
12850  tokaddmbc(c, enc);
12851  }
12852  else {
12853  tokadd(c);
12854  }
12855  }
12856  else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) {
12857  nextc();
12858  if (tokadd_mbchar(c) == -1) return 0;
12859  }
12860  else {
12861  c = read_escape(0, &enc);
12862  tokadd(c);
12863  }
12864  }
12865  else {
12866  tokadd(c);
12867  }
12868  tokfix();
12869  set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
12870  lex_state = EXPR_END;
12871  return tCHAR;
12872 
12873  case '&':
12874  if ((c = nextc()) == '&') {
12875  lex_state = EXPR_BEG;
12876  if ((c = nextc()) == '=') {
12878  lex_state = EXPR_BEG;
12879  return tOP_ASGN;
12880  }
12881  pushback(c);
12882  return tANDOP;
12883  }
12884  else if (c == '=') {
12885  set_yylval_id('&');
12886  lex_state = EXPR_BEG;
12887  return tOP_ASGN;
12888  }
12889  pushback(c);
12890  if (IS_SPCARG(c)) {
12891  rb_warning0("`&' interpreted as argument prefix");
12892  c = tAMPER;
12893  }
12894  else if (IS_BEG()) {
12895  c = tAMPER;
12896  }
12897  else {
12898  warn_balanced("&", "argument prefix");
12899  c = '&';
12900  }
12901  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
12902  return c;
12903 
12904  case '|':
12905  if ((c = nextc()) == '|') {
12906  lex_state = EXPR_BEG;
12907  if ((c = nextc()) == '=') {
12909  lex_state = EXPR_BEG;
12910  return tOP_ASGN;
12911  }
12912  pushback(c);
12913  return tOROP;
12914  }
12915  if (c == '=') {
12916  set_yylval_id('|');
12917  lex_state = EXPR_BEG;
12918  return tOP_ASGN;
12919  }
12920  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
12921  pushback(c);
12922  return '|';
12923 
12924  case '+':
12925  c = nextc();
12926  if (IS_AFTER_OPERATOR()) {
12927  lex_state = EXPR_ARG;
12928  if (c == '@') {
12929  return tUPLUS;
12930  }
12931  pushback(c);
12932  return '+';
12933  }
12934  if (c == '=') {
12935  set_yylval_id('+');
12936  lex_state = EXPR_BEG;
12937  return tOP_ASGN;
12938  }
12939  if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
12940  lex_state = EXPR_BEG;
12941  pushback(c);
12942  if (c != -1 && ISDIGIT(c)) {
12943  c = '+';
12944  goto start_num;
12945  }
12946  return tUPLUS;
12947  }
12948  lex_state = EXPR_BEG;
12949  pushback(c);
12950  warn_balanced("+", "unary operator");
12951  return '+';
12952 
12953  case '-':
12954  c = nextc();
12955  if (IS_AFTER_OPERATOR()) {
12956  lex_state = EXPR_ARG;
12957  if (c == '@') {
12958  return tUMINUS;
12959  }
12960  pushback(c);
12961  return '-';
12962  }
12963  if (c == '=') {
12964  set_yylval_id('-');
12965  lex_state = EXPR_BEG;
12966  return tOP_ASGN;
12967  }
12968  if (c == '>') {
12969  lex_state = EXPR_ENDFN;
12970  return tLAMBDA;
12971  }
12972  if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
12973  lex_state = EXPR_BEG;
12974  pushback(c);
12975  if (c != -1 && ISDIGIT(c)) {
12976  return tUMINUS_NUM;
12977  }
12978  return tUMINUS;
12979  }
12980  lex_state = EXPR_BEG;
12981  pushback(c);
12982  warn_balanced("-", "unary operator");
12983  return '-';
12984 
12985  case '.':
12986  lex_state = EXPR_BEG;
12987  if ((c = nextc()) == '.') {
12988  if ((c = nextc()) == '.') {
12989  return tDOT3;
12990  }
12991  pushback(c);
12992  return tDOT2;
12993  }
12994  pushback(c);
12995  if (c != -1 && ISDIGIT(c)) {
12996  yyerror("no .<digit> floating literal anymore; put 0 before dot");
12997  }
12998  lex_state = EXPR_DOT;
12999  return '.';
13000 
13001  start_num:
13002  case '0': case '1': case '2': case '3': case '4':
13003  case '5': case '6': case '7': case '8': case '9':
13004  {
13005  int is_float, seen_point, seen_e, nondigit;
13006 
13007  is_float = seen_point = seen_e = nondigit = 0;
13008  lex_state = EXPR_END;
13009  newtok();
13010  if (c == '-' || c == '+') {
13011  tokadd(c);
13012  c = nextc();
13013  }
13014  if (c == '0') {
13015 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13016  int start = toklen();
13017  c = nextc();
13018  if (c == 'x' || c == 'X') {
13019  /* hexadecimal */
13020  c = nextc();
13021  if (c != -1 && ISXDIGIT(c)) {
13022  do {
13023  if (c == '_') {
13024  if (nondigit) break;
13025  nondigit = c;
13026  continue;
13027  }
13028  if (!ISXDIGIT(c)) break;
13029  nondigit = 0;
13030  tokadd(c);
13031  } while ((c = nextc()) != -1);
13032  }
13033  pushback(c);
13034  tokfix();
13035  if (toklen() == start) {
13036  no_digits();
13037  }
13038  else if (nondigit) goto trailing_uc;
13040  return tINTEGER;
13041  }
13042  if (c == 'b' || c == 'B') {
13043  /* binary */
13044  c = nextc();
13045  if (c == '0' || c == '1') {
13046  do {
13047  if (c == '_') {
13048  if (nondigit) break;
13049  nondigit = c;
13050  continue;
13051  }
13052  if (c != '0' && c != '1') break;
13053  nondigit = 0;
13054  tokadd(c);
13055  } while ((c = nextc()) != -1);
13056  }
13057  pushback(c);
13058  tokfix();
13059  if (toklen() == start) {
13060  no_digits();
13061  }
13062  else if (nondigit) goto trailing_uc;
13064  return tINTEGER;
13065  }
13066  if (c == 'd' || c == 'D') {
13067  /* decimal */
13068  c = nextc();
13069  if (c != -1 && ISDIGIT(c)) {
13070  do {
13071  if (c == '_') {
13072  if (nondigit) break;
13073  nondigit = c;
13074  continue;
13075  }
13076  if (!ISDIGIT(c)) break;
13077  nondigit = 0;
13078  tokadd(c);
13079  } while ((c = nextc()) != -1);
13080  }
13081  pushback(c);
13082  tokfix();
13083  if (toklen() == start) {
13084  no_digits();
13085  }
13086  else if (nondigit) goto trailing_uc;
13088  return tINTEGER;
13089  }
13090  if (c == '_') {
13091  /* 0_0 */
13092  goto octal_number;
13093  }
13094  if (c == 'o' || c == 'O') {
13095  /* prefixed octal */
13096  c = nextc();
13097  if (c == -1 || c == '_' || !ISDIGIT(c)) {
13098  no_digits();
13099  }
13100  }
13101  if (c >= '0' && c <= '7') {
13102  /* octal */
13103  octal_number:
13104  do {
13105  if (c == '_') {
13106  if (nondigit) break;
13107  nondigit = c;
13108  continue;
13109  }
13110  if (c < '0' || c > '9') break;
13111  if (c > '7') goto invalid_octal;
13112  nondigit = 0;
13113  tokadd(c);
13114  } while ((c = nextc()) != -1);
13115  if (toklen() > start) {
13116  pushback(c);
13117  tokfix();
13118  if (nondigit) goto trailing_uc;
13120  return tINTEGER;
13121  }
13122  if (nondigit) {
13123  pushback(c);
13124  goto trailing_uc;
13125  }
13126  }
13127  if (c > '7' && c <= '9') {
13128  invalid_octal:
13129  yyerror("Invalid octal digit");
13130  }
13131  else if (c == '.' || c == 'e' || c == 'E') {
13132  tokadd('0');
13133  }
13134  else {
13135  pushback(c);
13137  return tINTEGER;
13138  }
13139  }
13140 
13141  for (;;) {
13142  switch (c) {
13143  case '0': case '1': case '2': case '3': case '4':
13144  case '5': case '6': case '7': case '8': case '9':
13145  nondigit = 0;
13146  tokadd(c);
13147  break;
13148 
13149  case '.':
13150  if (nondigit) goto trailing_uc;
13151  if (seen_point || seen_e) {
13152  goto decode_num;
13153  }
13154  else {
13155  int c0 = nextc();
13156  if (c0 == -1 || !ISDIGIT(c0)) {
13157  pushback(c0);
13158  goto decode_num;
13159  }
13160  c = c0;
13161  }
13162  tokadd('.');
13163  tokadd(c);
13164  is_float++;
13165  seen_point++;
13166  nondigit = 0;
13167  break;
13168 
13169  case 'e':
13170  case 'E':
13171  if (nondigit) {
13172  pushback(c);
13173  c = nondigit;
13174  goto decode_num;
13175  }
13176  if (seen_e) {
13177  goto decode_num;
13178  }
13179  tokadd(c);
13180  seen_e++;
13181  is_float++;
13182  nondigit = c;
13183  c = nextc();
13184  if (c != '-' && c != '+') continue;
13185  tokadd(c);
13186  nondigit = c;
13187  break;
13188 
13189  case '_': /* `_' in number just ignored */
13190  if (nondigit) goto decode_num;
13191  nondigit = c;
13192  break;
13193 
13194  default:
13195  goto decode_num;
13196  }
13197  c = nextc();
13198  }
13199 
13200  decode_num:
13201  pushback(c);
13202  if (nondigit) {
13203  char tmp[30];
13204  trailing_uc:
13205  snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
13206  yyerror(tmp);
13207  }
13208  tokfix();
13209  if (is_float) {
13210  double d = strtod(tok(), 0);
13211  if (errno == ERANGE) {
13212  rb_warningS("Float %s out of range", tok());
13213  errno = 0;
13214  }
13216  return tFLOAT;
13217  }
13219  return tINTEGER;
13220  }
13221 
13222  case ')':
13223  case ']':
13224  paren_nest--;
13225  case '}':
13226  COND_LEXPOP();
13227  CMDARG_LEXPOP();
13228  if (c == ')')
13229  lex_state = EXPR_ENDFN;
13230  else
13231  lex_state = EXPR_ENDARG;
13232  if (c == '}') {
13233  if (!brace_nest--) c = tSTRING_DEND;
13234  }
13235  return c;
13236 
13237  case ':':
13238  c = nextc();
13239  if (c == ':') {
13240  if (IS_BEG() || IS_lex_state(EXPR_CLASS) || IS_SPCARG(-1)) {
13241  lex_state = EXPR_BEG;
13242  return tCOLON3;
13243  }
13244  lex_state = EXPR_DOT;
13245  return tCOLON2;
13246  }
13247  if (IS_END() || ISSPACE(c)) {
13248  pushback(c);
13249  warn_balanced(":", "symbol literal");
13250  lex_state = EXPR_BEG;
13251  return ':';
13252  }
13253  switch (c) {
13254  case '\'':
13255  lex_strterm = NEW_STRTERM(str_ssym, c, 0);
13256  break;
13257  case '"':
13258  lex_strterm = NEW_STRTERM(str_dsym, c, 0);
13259  break;
13260  default:
13261  pushback(c);
13262  break;
13263  }
13264  lex_state = EXPR_FNAME;
13265  return tSYMBEG;
13266 
13267  case '/':
13268  if (IS_lex_state(EXPR_BEG_ANY)) {
13269  lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13270  return tREGEXP_BEG;
13271  }
13272  if ((c = nextc()) == '=') {
13273  set_yylval_id('/');
13274  lex_state = EXPR_BEG;
13275  return tOP_ASGN;
13276  }
13277  pushback(c);
13278  if (IS_SPCARG(c)) {
13279  (void)arg_ambiguous();
13280  lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13281  return tREGEXP_BEG;
13282  }
13283  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13284  warn_balanced("/", "regexp literal");
13285  return '/';
13286 
13287  case '^':
13288  if ((c = nextc()) == '=') {
13289  set_yylval_id('^');
13290  lex_state = EXPR_BEG;
13291  return tOP_ASGN;
13292  }
13293  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13294  pushback(c);
13295  return '^';
13296 
13297  case ';':
13298  lex_state = EXPR_BEG;
13299  command_start = TRUE;
13300  return ';';
13301 
13302  case ',':
13303  lex_state = EXPR_BEG;
13304  return ',';
13305 
13306  case '~':
13307  if (IS_AFTER_OPERATOR()) {
13308  if ((c = nextc()) != '@') {
13309  pushback(c);
13310  }
13311  lex_state = EXPR_ARG;
13312  }
13313  else {
13314  lex_state = EXPR_BEG;
13315  }
13316  return '~';
13317 
13318  case '(':
13319  if (IS_BEG()) {
13320  c = tLPAREN;
13321  }
13322  else if (IS_SPCARG(-1)) {
13323  c = tLPAREN_ARG;
13324  }
13325  paren_nest++;
13326  COND_PUSH(0);
13327  CMDARG_PUSH(0);
13328  lex_state = EXPR_BEG;
13329  return c;
13330 
13331  case '[':
13332  paren_nest++;
13333  if (IS_AFTER_OPERATOR()) {
13334  lex_state = EXPR_ARG;
13335  if ((c = nextc()) == ']') {
13336  if ((c = nextc()) == '=') {
13337  return tASET;
13338  }
13339  pushback(c);
13340  return tAREF;
13341  }
13342  pushback(c);
13343  return '[';
13344  }
13345  else if (IS_BEG()) {
13346  c = tLBRACK;
13347  }
13348  else if (IS_ARG() && space_seen) {
13349  c = tLBRACK;
13350  }
13351  lex_state = EXPR_BEG;
13352  COND_PUSH(0);
13353  CMDARG_PUSH(0);
13354  return c;
13355 
13356  case '{':
13357  ++brace_nest;
13358  if (lpar_beg && lpar_beg == paren_nest) {
13359  lex_state = EXPR_BEG;
13360  lpar_beg = 0;
13361  --paren_nest;
13362  COND_PUSH(0);
13363  CMDARG_PUSH(0);
13364  return tLAMBEG;
13365  }
13366  if (IS_ARG() || IS_lex_state(EXPR_END | EXPR_ENDFN))
13367  c = '{'; /* block (primary) */
13368  else if (IS_lex_state(EXPR_ENDARG))
13369  c = tLBRACE_ARG; /* block (expr) */
13370  else
13371  c = tLBRACE; /* hash */
13372  COND_PUSH(0);
13373  CMDARG_PUSH(0);
13374  lex_state = EXPR_BEG;
13375  if (c != tLBRACE) command_start = TRUE;
13376  return c;
13377 
13378  case '\\':
13379  c = nextc();
13380  if (c == '\n') {
13381  space_seen = 1;
13382 #ifdef RIPPER
13383  ripper_dispatch_scan_event(parser, tSP);
13384 #endif
13385  goto retry; /* skip \\n */
13386  }
13387  pushback(c);
13388  return '\\';
13389 
13390  case '%':
13391  if (IS_lex_state(EXPR_BEG_ANY)) {
13392  int term;
13393  int paren;
13394 
13395  c = nextc();
13396  quotation:
13397  if (c == -1 || !ISALNUM(c)) {
13398  term = c;
13399  c = 'Q';
13400  }
13401  else {
13402  term = nextc();
13403  if (rb_enc_isalnum(term, current_enc) || !parser_isascii()) {
13404  yyerror("unknown type of %string");
13405  return 0;
13406  }
13407  }
13408  if (c == -1 || term == -1) {
13409  compile_error(PARSER_ARG "unterminated quoted string meets end of file");
13410  return 0;
13411  }
13412  paren = term;
13413  if (term == '(') term = ')';
13414  else if (term == '[') term = ']';
13415  else if (term == '{') term = '}';
13416  else if (term == '<') term = '>';
13417  else paren = 0;
13418 
13419  switch (c) {
13420  case 'Q':
13421  lex_strterm = NEW_STRTERM(str_dquote, term, paren);
13422  return tSTRING_BEG;
13423 
13424  case 'q':
13425  lex_strterm = NEW_STRTERM(str_squote, term, paren);
13426  return tSTRING_BEG;
13427 
13428  case 'W':
13429  lex_strterm = NEW_STRTERM(str_dword, term, paren);
13430  do {c = nextc();} while (ISSPACE(c));
13431  pushback(c);
13432  return tWORDS_BEG;
13433 
13434  case 'w':
13435  lex_strterm = NEW_STRTERM(str_sword, term, paren);
13436  do {c = nextc();} while (ISSPACE(c));
13437  pushback(c);
13438  return tQWORDS_BEG;
13439 
13440  case 'I':
13441  lex_strterm = NEW_STRTERM(str_dword, term, paren);
13442  do {c = nextc();} while (ISSPACE(c));
13443  pushback(c);
13444  return tSYMBOLS_BEG;
13445 
13446  case 'i':
13447  lex_strterm = NEW_STRTERM(str_sword, term, paren);
13448  do {c = nextc();} while (ISSPACE(c));
13449  pushback(c);
13450  return tQSYMBOLS_BEG;
13451 
13452  case 'x':
13453  lex_strterm = NEW_STRTERM(str_xquote, term, paren);
13454  return tXSTRING_BEG;
13455 
13456  case 'r':
13457  lex_strterm = NEW_STRTERM(str_regexp, term, paren);
13458  return tREGEXP_BEG;
13459 
13460  case 's':
13461  lex_strterm = NEW_STRTERM(str_ssym, term, paren);
13462  lex_state = EXPR_FNAME;
13463  return tSYMBEG;
13464 
13465  default:
13466  yyerror("unknown type of %string");
13467  return 0;
13468  }
13469  }
13470  if ((c = nextc()) == '=') {
13471  set_yylval_id('%');
13472  lex_state = EXPR_BEG;
13473  return tOP_ASGN;
13474  }
13475  if (IS_SPCARG(c)) {
13476  goto quotation;
13477  }
13478  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13479  pushback(c);
13480  warn_balanced("%%", "string literal");
13481  return '%';
13482 
13483  case '$':
13484  lex_state = EXPR_END;
13485  newtok();
13486  c = nextc();
13487  switch (c) {
13488  case '_': /* $_: last read line string */
13489  c = nextc();
13490  if (parser_is_identchar()) {
13491  tokadd('$');
13492  tokadd('_');
13493  break;
13494  }
13495  pushback(c);
13496  c = '_';
13497  /* fall through */
13498  case '~': /* $~: match-data */
13499  case '*': /* $*: argv */
13500  case '$': /* $$: pid */
13501  case '?': /* $?: last status */
13502  case '!': /* $!: error string */
13503  case '@': /* $@: error position */
13504  case '/': /* $/: input record separator */
13505  case '\\': /* $\: output record separator */
13506  case ';': /* $;: field separator */
13507  case ',': /* $,: output field separator */
13508  case '.': /* $.: last read line number */
13509  case '=': /* $=: ignorecase */
13510  case ':': /* $:: load path */
13511  case '<': /* $<: reading filename */
13512  case '>': /* $>: default output handle */
13513  case '\"': /* $": already loaded files */
13514  tokadd('$');
13515  tokadd(c);
13516  tokfix();
13518  return tGVAR;
13519 
13520  case '-':
13521  tokadd('$');
13522  tokadd(c);
13523  c = nextc();
13524  if (parser_is_identchar()) {
13525  if (tokadd_mbchar(c) == -1) return 0;
13526  }
13527  else {
13528  pushback(c);
13529  }
13530  gvar:
13531  tokfix();
13533  return tGVAR;
13534 
13535  case '&': /* $&: last match */
13536  case '`': /* $`: string before last match */
13537  case '\'': /* $': string after last match */
13538  case '+': /* $+: string matches last paren. */
13539  if (IS_lex_state_for(last_state, EXPR_FNAME)) {
13540  tokadd('$');
13541  tokadd(c);
13542  goto gvar;
13543  }
13545  return tBACK_REF;
13546 
13547  case '1': case '2': case '3':
13548  case '4': case '5': case '6':
13549  case '7': case '8': case '9':
13550  tokadd('$');
13551  do {
13552  tokadd(c);
13553  c = nextc();
13554  } while (c != -1 && ISDIGIT(c));
13555  pushback(c);
13556  if (IS_lex_state_for(last_state, EXPR_FNAME)) goto gvar;
13557  tokfix();
13558  set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
13559  return tNTH_REF;
13560 
13561  default:
13562  if (!parser_is_identchar()) {
13563  pushback(c);
13564  compile_error(PARSER_ARG "`$%c' is not allowed as a global variable name", c);
13565  return 0;
13566  }
13567  case '0':
13568  tokadd('$');
13569  }
13570  break;
13571 
13572  case '@':
13573  c = nextc();
13574  newtok();
13575  tokadd('@');
13576  if (c == '@') {
13577  tokadd('@');
13578  c = nextc();
13579  }
13580  if (c != -1 && (ISDIGIT(c) || !parser_is_identchar())) {
13581  pushback(c);
13582  if (tokidx == 1) {
13583  compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
13584  }
13585  else {
13586  compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
13587  }
13588  return 0;
13589  }
13590  break;
13591 
13592  case '_':
13593  if (was_bol() && whole_match_p("__END__", 7, 0)) {
13594  ruby__end__seen = 1;
13595  parser->eofp = Qtrue;
13596 #ifndef RIPPER
13597  return -1;
13598 #else
13599  lex_goto_eol(parser);
13600  ripper_dispatch_scan_event(parser, k__END__);
13601  return 0;
13602 #endif
13603  }
13604  newtok();
13605  break;
13606 
13607  default:
13608  if (!parser_is_identchar()) {
13609  rb_compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c);
13610  goto retry;
13611  }
13612 
13613  newtok();
13614  break;
13615  }
13616 
13617  mb = ENC_CODERANGE_7BIT;
13618  do {
13619  if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
13620  if (tokadd_mbchar(c) == -1) return 0;
13621  c = nextc();
13622  } while (parser_is_identchar());
13623  switch (tok()[0]) {
13624  case '@': case '$':
13625  pushback(c);
13626  break;
13627  default:
13628  if ((c == '!' || c == '?') && !peek('=')) {
13629  tokadd(c);
13630  }
13631  else {
13632  pushback(c);
13633  }
13634  }
13635  tokfix();
13636 
13637  {
13638  int result = 0;
13639 
13640  last_state = lex_state;
13641  switch (tok()[0]) {
13642  case '$':
13643  lex_state = EXPR_END;
13644  result = tGVAR;
13645  break;
13646  case '@':
13647  lex_state = EXPR_END;
13648  if (tok()[1] == '@')
13649  result = tCVAR;
13650  else
13651  result = tIVAR;
13652  break;
13653 
13654  default:
13655  if (toklast() == '!' || toklast() == '?') {
13656  result = tFID;
13657  }
13658  else {
13659  if (IS_lex_state(EXPR_FNAME)) {
13660  if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
13661  (!peek('=') || (peek_n('>', 1)))) {
13662  result = tIDENTIFIER;
13663  tokadd(c);
13664  tokfix();
13665  }
13666  else {
13667  pushback(c);
13668  }
13669  }
13670  if (result == 0 && ISUPPER(tok()[0])) {
13671  result = tCONSTANT;
13672  }
13673  else {
13674  result = tIDENTIFIER;
13675  }
13676  }
13677 
13678  if (IS_LABEL_POSSIBLE()) {
13679  if (IS_LABEL_SUFFIX(0)) {
13680  lex_state = EXPR_BEG;
13681  nextc();
13683  return tLABEL;
13684  }
13685  }
13686  if (mb == ENC_CODERANGE_7BIT && !IS_lex_state(EXPR_DOT)) {
13687  const struct kwtable *kw;
13688 
13689  /* See if it is a reserved word. */
13690  kw = rb_reserved_word(tok(), toklen());
13691  if (kw) {
13692  enum lex_state_e state = lex_state;
13693  lex_state = kw->state;
13694  if (state == EXPR_FNAME) {
13696  return kw->id[0];
13697  }
13698  if (lex_state == EXPR_BEG) {
13699  command_start = TRUE;
13700  }
13701  if (kw->id[0] == keyword_do) {
13702  if (lpar_beg && lpar_beg == paren_nest) {
13703  lpar_beg = 0;
13704  --paren_nest;
13705  return keyword_do_LAMBDA;
13706  }
13707  if (COND_P()) return keyword_do_cond;
13708  if (CMDARG_P() && state != EXPR_CMDARG)
13709  return keyword_do_block;
13710  if (state & (EXPR_BEG | EXPR_ENDARG))
13711  return keyword_do_block;
13712  return keyword_do;
13713  }
13714  if (state & (EXPR_BEG | EXPR_VALUE))
13715  return kw->id[0];
13716  else {
13717  if (kw->id[0] != kw->id[1])
13718  lex_state = EXPR_BEG;
13719  return kw->id[1];
13720  }
13721  }
13722  }
13723 
13724  if (IS_lex_state(EXPR_BEG_ANY | EXPR_ARG_ANY | EXPR_DOT)) {
13725  if (cmd_state) {
13726  lex_state = EXPR_CMDARG;
13727  }
13728  else {
13729  lex_state = EXPR_ARG;
13730  }
13731  }
13732  else if (lex_state == EXPR_FNAME) {
13733  lex_state = EXPR_ENDFN;
13734  }
13735  else {
13736  lex_state = EXPR_END;
13737  }
13738  }
13739  {
13740  ID ident = TOK_INTERN(!ENC_SINGLE(mb));
13741 
13742  set_yylval_name(ident);
13743  if (!IS_lex_state_for(last_state, EXPR_DOT|EXPR_FNAME) &&
13744  is_local_id(ident) && lvar_defined(ident)) {
13745  lex_state = EXPR_END;
13746  }
13747  }
13748  return result;
13749  }
13750 }
13751 
13752 #if YYPURE
13753 static int
13754 yylex(void *lval, void *p)
13755 #else
13756 yylex(void *p)
13757 #endif
13759  struct parser_params *parser = (struct parser_params*)p;
13760  int t;
13761 
13762 #if YYPURE
13763  parser->parser_yylval = lval;
13765 #endif
13766  t = parser_yylex(parser);
13767 #ifdef RIPPER
13768  if (!NIL_P(parser->delayed)) {
13769  ripper_dispatch_delayed_token(parser, t);
13770  return t;
13771  }
13772  if (t != 0)
13773  ripper_dispatch_scan_event(parser, t);
13774 #endif
13775 
13776  return t;
13777 }
13778 
13779 #ifndef RIPPER
13780 static NODE*
13781 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
13782 {
13783  NODE *n = (rb_node_newnode)(type, a0, a1, a2);
13785  return n;
13786 }
13787 
13788 static enum node_type
13789 nodetype(NODE *node) /* for debug */
13790 {
13791  return (enum node_type)nd_type(node);
13792 }
13793 
13794 static int
13796 {
13797  return nd_line(node);
13798 }
13799 
13800 static NODE*
13802 {
13803  if (node) {
13804  node = remove_begin(node);
13805  node->flags |= NODE_FL_NEWLINE;
13806  }
13807  return node;
13808 }
13809 
13810 static void
13811 fixpos(NODE *node, NODE *orig)
13812 {
13813  if (!node) return;
13814  if (!orig) return;
13815  if (orig == (NODE*)1) return;
13816  nd_set_line(node, nd_line(orig));
13817 }
13818 
13819 static void
13820 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
13821 {
13822  rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
13823 }
13824 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg))
13825 
13826 static void
13827 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
13828 {
13829  rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
13830 }
13831 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg))
13832 
13833 static NODE*
13834 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
13835 {
13836  NODE *end, *h = head, *nd;
13837 
13838  if (tail == 0) return head;
13839 
13840  if (h == 0) return tail;
13841  switch (nd_type(h)) {
13842  case NODE_LIT:
13843  case NODE_STR:
13844  case NODE_SELF:
13845  case NODE_TRUE:
13846  case NODE_FALSE:
13847  case NODE_NIL:
13848  parser_warning(h, "unused literal ignored");
13849  return tail;
13850  default:
13851  h = end = NEW_BLOCK(head);
13852  end->nd_end = end;
13853  fixpos(end, head);
13854  head = end;
13855  break;
13856  case NODE_BLOCK:
13857  end = h->nd_end;
13858  break;
13859  }
13860 
13861  nd = end->nd_head;
13862  switch (nd_type(nd)) {
13863  case NODE_RETURN:
13864  case NODE_BREAK:
13865  case NODE_NEXT:
13866  case NODE_REDO:
13867  case NODE_RETRY:
13868  if (RTEST(ruby_verbose)) {
13869  parser_warning(tail, "statement not reached");
13870  }
13871  break;
13872 
13873  default:
13874  break;
13875  }
13876 
13877  if (nd_type(tail) != NODE_BLOCK) {
13878  tail = NEW_BLOCK(tail);
13879  tail->nd_end = tail;
13880  }
13881  end->nd_next = tail;
13882  h->nd_end = tail->nd_end;
13883  return head;
13884 }
13885 
13886 /* append item to the list */
13887 static NODE*
13888 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
13889 {
13890  NODE *last;
13891 
13892  if (list == 0) return NEW_LIST(item);
13893  if (list->nd_next) {
13894  last = list->nd_next->nd_end;
13895  }
13896  else {
13897  last = list;
13898  }
13899 
13900  list->nd_alen += 1;
13901  last->nd_next = NEW_LIST(item);
13902  list->nd_next->nd_end = last->nd_next;
13903  return list;
13904 }
13905 
13906 /* concat two lists */
13907 static NODE*
13908 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
13909 {
13910  NODE *last;
13911 
13912  if (head->nd_next) {
13913  last = head->nd_next->nd_end;
13914  }
13915  else {
13916  last = head;
13917  }
13918 
13919  head->nd_alen += tail->nd_alen;
13920  last->nd_next = tail;
13921  if (tail->nd_next) {
13922  head->nd_next->nd_end = tail->nd_next->nd_end;
13923  }
13924  else {
13925  head->nd_next->nd_end = tail;
13926  }
13927 
13928  return head;
13929 }
13930 
13931 static int
13933 {
13934  if (NIL_P(tail)) return 1;
13935  if (!rb_enc_compatible(head, tail)) {
13936  compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
13937  rb_enc_name(rb_enc_get(head)),
13938  rb_enc_name(rb_enc_get(tail)));
13939  rb_str_resize(head, 0);
13940  rb_str_resize(tail, 0);
13941  return 0;
13942  }
13943  rb_str_buf_append(head, tail);
13944  return 1;
13945 }
13946 
13947 /* concat two string literals */
13948 static NODE *
13950 {
13951  enum node_type htype;
13952  NODE *headlast;
13953  VALUE lit;
13954 
13955  if (!head) return tail;
13956  if (!tail) return head;
13957 
13958  htype = nd_type(head);
13959  if (htype == NODE_EVSTR) {
13960  NODE *node = NEW_DSTR(Qnil);
13961  head = list_append(node, head);
13962  htype = NODE_DSTR;
13963  }
13964  switch (nd_type(tail)) {
13965  case NODE_STR:
13966  if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
13967  nd_type(headlast) == NODE_STR) {
13968  htype = NODE_STR;
13969  lit = headlast->nd_lit;
13970  }
13971  else {
13972  lit = head->nd_lit;
13973  }
13974  if (htype == NODE_STR) {
13975  if (!literal_concat0(parser, lit, tail->nd_lit)) {
13976  error:
13977  rb_gc_force_recycle((VALUE)head);
13978  rb_gc_force_recycle((VALUE)tail);
13979  return 0;
13980  }
13981  rb_gc_force_recycle((VALUE)tail);
13982  }
13983  else {
13984  list_append(head, tail);
13985  }
13986  break;
13987 
13988  case NODE_DSTR:
13989  if (htype == NODE_STR) {
13990  if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
13991  goto error;
13992  tail->nd_lit = head->nd_lit;
13993  rb_gc_force_recycle((VALUE)head);
13994  head = tail;
13995  }
13996  else if (NIL_P(tail->nd_lit)) {
13997  append:
13998  head->nd_alen += tail->nd_alen - 1;
13999  head->nd_next->nd_end->nd_next = tail->nd_next;
14000  head->nd_next->nd_end = tail->nd_next->nd_end;
14001  rb_gc_force_recycle((VALUE)tail);
14002  }
14003  else if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
14004  nd_type(headlast) == NODE_STR) {
14005  lit = headlast->nd_lit;
14006  if (!literal_concat0(parser, lit, tail->nd_lit))
14007  goto error;
14008  tail->nd_lit = Qnil;
14009  goto append;
14010  }
14011  else {
14012  nd_set_type(tail, NODE_ARRAY);
14013  tail->nd_head = NEW_STR(tail->nd_lit);
14014  list_concat(head, tail);
14015  }
14016  break;
14017 
14018  case NODE_EVSTR:
14019  if (htype == NODE_STR) {
14020  nd_set_type(head, NODE_DSTR);
14021  head->nd_alen = 1;
14022  }
14023  list_append(head, tail);
14024  break;
14025  }
14026  return head;
14027 }
14028 
14029 static NODE *
14030 evstr2dstr_gen(struct parser_params *parser, NODE *node)
14031 {
14032  if (nd_type(node) == NODE_EVSTR) {
14033  node = list_append(NEW_DSTR(Qnil), node);
14034  }
14035  return node;
14036 }
14037 
14038 static NODE *
14039 new_evstr_gen(struct parser_params *parser, NODE *node)
14040 {
14041  NODE *head = node;
14042 
14043  if (node) {
14044  switch (nd_type(node)) {
14045  case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
14046  return node;
14047  }
14048  }
14049  return NEW_EVSTR(head);
14050 }
14051 
14052 static NODE *
14053 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
14054 {
14055  value_expr(recv);
14056  value_expr(arg1);
14057  return NEW_CALL(recv, id, NEW_LIST(arg1));
14058 }
14059 
14060 static NODE *
14061 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
14062 {
14063  value_expr(recv);
14064  return NEW_CALL(recv, id, 0);
14065 }
14066 
14067 static NODE*
14068 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14069 {
14070  value_expr(node1);
14071  value_expr(node2);
14072  if (node1) {
14073  switch (nd_type(node1)) {
14074  case NODE_DREGX:
14075  case NODE_DREGX_ONCE:
14076  return NEW_MATCH2(node1, node2);
14077 
14078  case NODE_LIT:
14079  if (RB_TYPE_P(node1->nd_lit, T_REGEXP)) {
14080  return NEW_MATCH2(node1, node2);
14081  }
14082  }
14083  }
14084 
14085  if (node2) {
14086  switch (nd_type(node2)) {
14087  case NODE_DREGX:
14088  case NODE_DREGX_ONCE:
14089  return NEW_MATCH3(node2, node1);
14090 
14091  case NODE_LIT:
14092  if (RB_TYPE_P(node2->nd_lit, T_REGEXP)) {
14093  return NEW_MATCH3(node2, node1);
14094  }
14095  }
14096  }
14097 
14098  return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
14099 }
14100 
14101 static NODE*
14102 gettable_gen(struct parser_params *parser, ID id)
14103 {
14104  switch (id) {
14105  case keyword_self:
14106  return NEW_SELF();
14107  case keyword_nil:
14108  return NEW_NIL();
14109  case keyword_true:
14110  return NEW_TRUE();
14111  case keyword_false:
14112  return NEW_FALSE();
14113  case keyword__FILE__:
14116  case keyword__LINE__:
14117  return NEW_LIT(INT2FIX(tokline));
14118  case keyword__ENCODING__:
14120  }
14121  switch (id_type(id)) {
14122  case ID_LOCAL:
14123  if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
14124  if (local_id(id)) return NEW_LVAR(id);
14125  /* method call without arguments */
14126  return NEW_VCALL(id);
14127  case ID_GLOBAL:
14128  return NEW_GVAR(id);
14129  case ID_INSTANCE:
14130  return NEW_IVAR(id);
14131  case ID_CONST:
14132  return NEW_CONST(id);
14133  case ID_CLASS:
14134  return NEW_CVAR(id);
14135  }
14136  compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14137  return 0;
14138 }
14139 #else /* !RIPPER */
14140 static int
14141 id_is_var_gen(struct parser_params *parser, ID id)
14142 {
14143  if (is_notop_id(id)) {
14144  switch (id & ID_SCOPE_MASK) {
14145  case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
14146  return 1;
14147  case ID_LOCAL:
14148  if (dyna_in_block() && dvar_defined(id)) return 1;
14149  if (local_id(id)) return 1;
14150  /* method call without arguments */
14151  return 0;
14152  }
14153  }
14154  compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14155  return 0;
14156 }
14157 #endif /* !RIPPER */
14158 
14159 #if PARSER_DEBUG
14160 static const char *
14161 lex_state_name(enum lex_state_e state)
14162 {
14163  static const char names[][12] = {
14164  "EXPR_BEG", "EXPR_END", "EXPR_ENDARG", "EXPR_ENDFN", "EXPR_ARG",
14165  "EXPR_CMDARG", "EXPR_MID", "EXPR_FNAME", "EXPR_DOT", "EXPR_CLASS",
14166  "EXPR_VALUE",
14167  };
14168 
14169  if ((unsigned)state & ~(~0u << EXPR_MAX_STATE))
14170  return names[ffs(state)];
14171  return NULL;
14172 }
14173 #endif
14174 
14175 #ifdef RIPPER
14176 static VALUE
14177 assignable_gen(struct parser_params *parser, VALUE lhs)
14178 #else
14179 static NODE*
14180 assignable_gen(struct parser_params *parser, ID id, NODE *val)
14181 #endif
14182 {
14183 #ifdef RIPPER
14184  ID id = get_id(lhs);
14185 # define assignable_result(x) get_value(lhs)
14186 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
14187 #else
14188 # define assignable_result(x) (x)
14189 #endif
14190  if (!id) return assignable_result(0);
14191  switch (id) {
14192  case keyword_self:
14193  yyerror("Can't change the value of self");
14194  goto error;
14195  case keyword_nil:
14196  yyerror("Can't assign to nil");
14197  goto error;
14198  case keyword_true:
14199  yyerror("Can't assign to true");
14200  goto error;
14201  case keyword_false:
14202  yyerror("Can't assign to false");
14203  goto error;
14204  case keyword__FILE__:
14205  yyerror("Can't assign to __FILE__");
14206  goto error;
14207  case keyword__LINE__:
14208  yyerror("Can't assign to __LINE__");
14209  goto error;
14210  case keyword__ENCODING__:
14211  yyerror("Can't assign to __ENCODING__");
14212  goto error;
14213  }
14214  switch (id_type(id)) {
14215  case ID_LOCAL:
14216  if (dyna_in_block()) {
14217  if (dvar_curr(id)) {
14218  return assignable_result(NEW_DASGN_CURR(id, val));
14219  }
14220  else if (dvar_defined(id)) {
14221  return assignable_result(NEW_DASGN(id, val));
14222  }
14223  else if (local_id(id)) {
14224  return assignable_result(NEW_LASGN(id, val));
14225  }
14226  else {
14227  dyna_var(id);
14228  return assignable_result(NEW_DASGN_CURR(id, val));
14229  }
14230  }
14231  else {
14232  if (!local_id(id)) {
14233  local_var(id);
14234  }
14235  return assignable_result(NEW_LASGN(id, val));
14236  }
14237  break;
14238  case ID_GLOBAL:
14239  return assignable_result(NEW_GASGN(id, val));
14240  case ID_INSTANCE:
14241  return assignable_result(NEW_IASGN(id, val));
14242  case ID_CONST:
14243  if (!in_def && !in_single)
14244  return assignable_result(NEW_CDECL(id, val, 0));
14245  yyerror("dynamic constant assignment");
14246  break;
14247  case ID_CLASS:
14248  return assignable_result(NEW_CVASGN(id, val));
14249  default:
14250  compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
14251  }
14252  error:
14254 #undef assignable_result
14255 #undef parser_yyerror
14256 }
14257 
14258 static int
14260 {
14261  VALUE s;
14262  if (name == idUScore) return 1;
14263  if (!is_local_id(name)) return 0;
14264  s = rb_id2str(name);
14265  if (!s) return 0;
14266  return RSTRING_PTR(s)[0] == '_';
14267 }
14268 
14269 #define LVAR_USED ((ID)1 << (sizeof(ID) * CHAR_BIT - 1))
14270 
14271 static ID
14272 shadowing_lvar_gen(struct parser_params *parser, ID name)
14273 {
14274  if (is_private_local_id(name)) return name;
14275  if (dyna_in_block()) {
14276  if (dvar_curr(name)) {
14277  yyerror("duplicated argument name");
14278  }
14279  else if (dvar_defined_get(name) || local_id(name)) {
14280  rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
14281  vtable_add(lvtbl->vars, name);
14282  if (lvtbl->used) {
14284  }
14285  }
14286  }
14287  else {
14288  if (local_id(name)) {
14289  yyerror("duplicated argument name");
14290  }
14291  }
14292  return name;
14293 }
14294 
14295 static void
14296 new_bv_gen(struct parser_params *parser, ID name)
14297 {
14298  if (!name) return;
14299  if (!is_local_id(name)) {
14300  compile_error(PARSER_ARG "invalid local variable - %s",
14301  rb_id2name(name));
14302  return;
14303  }
14304  shadowing_lvar(name);
14305  dyna_var(name);
14306 }
14307 
14308 #ifndef RIPPER
14309 static NODE *
14310 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
14311 {
14312  if (recv && nd_type(recv) == NODE_SELF)
14313  recv = (NODE *)1;
14314  return NEW_ATTRASGN(recv, tASET, idx);
14315 }
14316 
14317 static void
14318 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14319 {
14320  if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
14321  compile_error(PARSER_ARG "both block arg and actual block given");
14322  }
14323 }
14324 
14325 ID
14327 {
14328  id &= ~ID_SCOPE_MASK;
14329  id |= ID_ATTRSET;
14330  return id;
14331 }
14332 
14333 static NODE *
14334 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
14335 {
14336  if (recv && nd_type(recv) == NODE_SELF)
14337  recv = (NODE *)1;
14338  return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
14339 }
14340 
14341 static void
14343 {
14344  switch (nd_type(node)) {
14345  case NODE_NTH_REF:
14346  compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
14347  break;
14348  case NODE_BACK_REF:
14349  compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
14350  break;
14351  }
14352 }
14353 
14354 static NODE *
14355 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14356 {
14357  if (!node2) return node1;
14358  switch (nd_type(node1)) {
14359  case NODE_BLOCK_PASS:
14360  if (node1->nd_head)
14361  node1->nd_head = arg_concat(node1->nd_head, node2);
14362  else
14363  node1->nd_head = NEW_LIST(node2);
14364  return node1;
14365  case NODE_ARGSPUSH:
14366  if (nd_type(node2) != NODE_ARRAY) break;
14367  node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
14368  nd_set_type(node1, NODE_ARGSCAT);
14369  return node1;
14370  case NODE_ARGSCAT:
14371  if (nd_type(node2) != NODE_ARRAY ||
14372  nd_type(node1->nd_body) != NODE_ARRAY) break;
14373  node1->nd_body = list_concat(node1->nd_body, node2);
14374  return node1;
14375  }
14376  return NEW_ARGSCAT(node1, node2);
14377 }
14378 
14379 static NODE *
14380 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14381 {
14382  if (!node1) return NEW_LIST(node2);
14383  switch (nd_type(node1)) {
14384  case NODE_ARRAY:
14385  return list_append(node1, node2);
14386  case NODE_BLOCK_PASS:
14387  node1->nd_head = arg_append(node1->nd_head, node2);
14388  return node1;
14389  case NODE_ARGSPUSH:
14390  node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
14391  nd_set_type(node1, NODE_ARGSCAT);
14392  return node1;
14393  }
14394  return NEW_ARGSPUSH(node1, node2);
14395 }
14396 
14397 static NODE *
14399 {
14400  if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
14401  if (nd_type(node) == NODE_ARRAY) return node;
14402  return 0;
14403 }
14404 
14405 static NODE *
14406 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
14407 {
14408  if (!lhs) return 0;
14409 
14410  switch (nd_type(lhs)) {
14411  case NODE_GASGN:
14412  case NODE_IASGN:
14413  case NODE_IASGN2:
14414  case NODE_LASGN:
14415  case NODE_DASGN:
14416  case NODE_DASGN_CURR:
14417  case NODE_MASGN:
14418  case NODE_CDECL:
14419  case NODE_CVASGN:
14420  lhs->nd_value = rhs;
14421  break;
14422 
14423  case NODE_ATTRASGN:
14424  case NODE_CALL:
14425  lhs->nd_args = arg_append(lhs->nd_args, rhs);
14426  break;
14427 
14428  default:
14429  /* should not happen */
14430  break;
14431  }
14432 
14433  return lhs;
14434 }
14435 
14436 static int
14437 value_expr_gen(struct parser_params *parser, NODE *node)
14438 {
14439  int cond = 0;
14440 
14441  if (!node) {
14442  rb_warning0("empty expression");
14443  }
14444  while (node) {
14445  switch (nd_type(node)) {
14446  case NODE_DEFN:
14447  case NODE_DEFS:
14448  parser_warning(node, "void value expression");
14449  return FALSE;
14450 
14451  case NODE_RETURN:
14452  case NODE_BREAK:
14453  case NODE_NEXT:
14454  case NODE_REDO:
14455  case NODE_RETRY:
14456  if (!cond) yyerror("void value expression");
14457  /* or "control never reach"? */
14458  return FALSE;
14459 
14460  case NODE_BLOCK:
14461  while (node->nd_next) {
14462  node = node->nd_next;
14463  }
14464  node = node->nd_head;
14465  break;
14466 
14467  case NODE_BEGIN:
14468  node = node->nd_body;
14469  break;
14470 
14471  case NODE_IF:
14472  if (!node->nd_body) {
14473  node = node->nd_else;
14474  break;
14475  }
14476  else if (!node->nd_else) {
14477  node = node->nd_body;
14478  break;
14479  }
14480  if (!value_expr(node->nd_body)) return FALSE;
14481  node = node->nd_else;
14482  break;
14483 
14484  case NODE_AND:
14485  case NODE_OR:
14486  cond = 1;
14487  node = node->nd_2nd;
14488  break;
14489 
14490  default:
14491  return TRUE;
14492  }
14493  }
14494 
14495  return TRUE;
14496 }
14497 
14498 static void
14499 void_expr_gen(struct parser_params *parser, NODE *node)
14500 {
14501  const char *useless = 0;
14502 
14503  if (!RTEST(ruby_verbose)) return;
14504 
14505  if (!node) return;
14506  switch (nd_type(node)) {
14507  case NODE_CALL:
14508  switch (node->nd_mid) {
14509  case '+':
14510  case '-':
14511  case '*':
14512  case '/':
14513  case '%':
14514  case tPOW:
14515  case tUPLUS:
14516  case tUMINUS:
14517  case '|':
14518  case '^':
14519  case '&':
14520  case tCMP:
14521  case '>':
14522  case tGEQ:
14523  case '<':
14524  case tLEQ:
14525  case tEQ:
14526  case tNEQ:
14527  useless = rb_id2name(node->nd_mid);
14528  break;
14529  }
14530  break;
14531 
14532  case NODE_LVAR:
14533  case NODE_DVAR:
14534  case NODE_GVAR:
14535  case NODE_IVAR:
14536  case NODE_CVAR:
14537  case NODE_NTH_REF:
14538  case NODE_BACK_REF:
14539  useless = "a variable";
14540  break;
14541  case NODE_CONST:
14542  useless = "a constant";
14543  break;
14544  case NODE_LIT:
14545  case NODE_STR:
14546  case NODE_DSTR:
14547  case NODE_DREGX:
14548  case NODE_DREGX_ONCE:
14549  useless = "a literal";
14550  break;
14551  case NODE_COLON2:
14552  case NODE_COLON3:
14553  useless = "::";
14554  break;
14555  case NODE_DOT2:
14556  useless = "..";
14557  break;
14558  case NODE_DOT3:
14559  useless = "...";
14560  break;
14561  case NODE_SELF:
14562  useless = "self";
14563  break;
14564  case NODE_NIL:
14565  useless = "nil";
14566  break;
14567  case NODE_TRUE:
14568  useless = "true";
14569  break;
14570  case NODE_FALSE:
14571  useless = "false";
14572  break;
14573  case NODE_DEFINED:
14574  useless = "defined?";
14575  break;
14576  }
14577 
14578  if (useless) {
14579  int line = ruby_sourceline;
14580 
14581  ruby_sourceline = nd_line(node);
14582  rb_warnS("possibly useless use of %s in void context", useless);
14583  ruby_sourceline = line;
14584  }
14585 }
14586 
14587 static void
14588 void_stmts_gen(struct parser_params *parser, NODE *node)
14589 {
14590  if (!RTEST(ruby_verbose)) return;
14591  if (!node) return;
14592  if (nd_type(node) != NODE_BLOCK) return;
14593 
14594  for (;;) {
14595  if (!node->nd_next) return;
14596  void_expr0(node->nd_head);
14597  node = node->nd_next;
14598  }
14599 }
14600 
14601 static NODE *
14603 {
14604  NODE **n = &node, *n1 = node;
14605  while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
14606  *n = n1 = n1->nd_body;
14607  }
14608  return node;
14609 }
14610 
14611 static void
14612 reduce_nodes_gen(struct parser_params *parser, NODE **body)
14613 {
14614  NODE *node = *body;
14615 
14616  if (!node) {
14617  *body = NEW_NIL();
14618  return;
14619  }
14620 #define subnodes(n1, n2) \
14621  ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
14622  (!node->n2) ? (body = &node->n1, 1) : \
14623  (reduce_nodes(&node->n1), body = &node->n2, 1))
14624 
14625  while (node) {
14626  int newline = (int)(node->flags & NODE_FL_NEWLINE);
14627  switch (nd_type(node)) {
14628  end:
14629  case NODE_NIL:
14630  *body = 0;
14631  return;
14632  case NODE_RETURN:
14633  *body = node = node->nd_stts;
14634  if (newline && node) node->flags |= NODE_FL_NEWLINE;
14635  continue;
14636  case NODE_BEGIN:
14637  *body = node = node->nd_body;
14638  if (newline && node) node->flags |= NODE_FL_NEWLINE;
14639  continue;
14640  case NODE_BLOCK:
14641  body = &node->nd_end->nd_head;
14642  break;
14643  case NODE_IF:
14644  if (subnodes(nd_body, nd_else)) break;
14645  return;
14646  case NODE_CASE:
14647  body = &node->nd_body;
14648  break;
14649  case NODE_WHEN:
14650  if (!subnodes(nd_body, nd_next)) goto end;
14651  break;
14652  case NODE_ENSURE:
14653  if (!subnodes(nd_head, nd_resq)) goto end;
14654  break;
14655  case NODE_RESCUE:
14656  if (node->nd_else) {
14657  body = &node->nd_resq;
14658  break;
14659  }
14660  if (!subnodes(nd_head, nd_resq)) goto end;
14661  break;
14662  default:
14663  return;
14664  }
14665  node = *body;
14666  if (newline && node) node->flags |= NODE_FL_NEWLINE;
14667  }
14668 
14669 #undef subnodes
14670 }
14671 
14672 static int
14674 {
14675  if (!node) return 1;
14676  switch (nd_type(node)) {
14677  case NODE_HASH:
14678  if (!(node = node->nd_head)) break;
14679  case NODE_ARRAY:
14680  do {
14681  if (!is_static_content(node->nd_head)) return 0;
14682  } while ((node = node->nd_next) != 0);
14683  case NODE_LIT:
14684  case NODE_STR:
14685  case NODE_NIL:
14686  case NODE_TRUE:
14687  case NODE_FALSE:
14688  case NODE_ZARRAY:
14689  break;
14690  default:
14691  return 0;
14692  }
14693  return 1;
14694 }
14695 
14696 static int
14697 assign_in_cond(struct parser_params *parser, NODE *node)
14698 {
14699  switch (nd_type(node)) {
14700  case NODE_MASGN:
14701  yyerror("multiple assignment in conditional");
14702  return 1;
14703 
14704  case NODE_LASGN:
14705  case NODE_DASGN:
14706  case NODE_DASGN_CURR:
14707  case NODE_GASGN:
14708  case NODE_IASGN:
14709  break;
14710 
14711  default:
14712  return 0;
14713  }
14714 
14715  if (!node->nd_value) return 1;
14716  if (is_static_content(node->nd_value)) {
14717  /* reports always */
14718  parser_warn(node->nd_value, "found = in conditional, should be ==");
14719  }
14720  return 1;
14721 }
14722 
14723 static void
14724 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14725 {
14726  if (!e_option_supplied(parser)) parser_warn(node, str);
14727 }
14728 
14729 static void
14730 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14731 {
14732  if (!e_option_supplied(parser)) parser_warning(node, str);
14733 }
14734 
14735 static void
14736 fixup_nodes(NODE **rootnode)
14737 {
14738  NODE *node, *next, *head;
14739 
14740  for (node = *rootnode; node; node = next) {
14741  enum node_type type;
14742  VALUE val;
14743 
14744  next = node->nd_next;
14745  head = node->nd_head;
14746  rb_gc_force_recycle((VALUE)node);
14747  *rootnode = next;
14748  switch (type = nd_type(head)) {
14749  case NODE_DOT2:
14750  case NODE_DOT3:
14751  val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
14752  type == NODE_DOT3);
14753  rb_gc_force_recycle((VALUE)head->nd_beg);
14754  rb_gc_force_recycle((VALUE)head->nd_end);
14755  nd_set_type(head, NODE_LIT);
14756  head->nd_lit = val;
14757  break;
14758  default:
14759  break;
14760  }
14761  }
14762 }
14763 
14764 static NODE *cond0(struct parser_params*,NODE*);
14765 
14766 static NODE*
14767 range_op(struct parser_params *parser, NODE *node)
14768 {
14769  enum node_type type;
14770 
14771  if (node == 0) return 0;
14772 
14773  type = nd_type(node);
14774  value_expr(node);
14775  if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
14776  warn_unless_e_option(parser, node, "integer literal in conditional range");
14777  return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
14778  }
14779  return cond0(parser, node);
14780 }
14781 
14782 static int
14784 {
14785  if (!node) return 1; /* same as NODE_NIL */
14786  switch (nd_type(node)) {
14787  case NODE_LIT:
14788  case NODE_STR:
14789  case NODE_DSTR:
14790  case NODE_EVSTR:
14791  case NODE_DREGX:
14792  case NODE_DREGX_ONCE:
14793  case NODE_DSYM:
14794  return 2;
14795  case NODE_TRUE:
14796  case NODE_FALSE:
14797  case NODE_NIL:
14798  return 1;
14799  }
14800  return 0;
14801 }
14802 
14803 static NODE*
14804 cond0(struct parser_params *parser, NODE *node)
14805 {
14806  if (node == 0) return 0;
14807  assign_in_cond(parser, node);
14808 
14809  switch (nd_type(node)) {
14810  case NODE_DSTR:
14811  case NODE_EVSTR:
14812  case NODE_STR:
14813  rb_warn0("string literal in condition");
14814  break;
14815 
14816  case NODE_DREGX:
14817  case NODE_DREGX_ONCE:
14818  warning_unless_e_option(parser, node, "regex literal in condition");
14819  return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
14820 
14821  case NODE_AND:
14822  case NODE_OR:
14823  node->nd_1st = cond0(parser, node->nd_1st);
14824  node->nd_2nd = cond0(parser, node->nd_2nd);
14825  break;
14826 
14827  case NODE_DOT2:
14828  case NODE_DOT3:
14829  node->nd_beg = range_op(parser, node->nd_beg);
14830  node->nd_end = range_op(parser, node->nd_end);
14831  if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
14832  else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
14833  if (!e_option_supplied(parser)) {
14834  int b = literal_node(node->nd_beg);
14835  int e = literal_node(node->nd_end);
14836  if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
14837  parser_warn(node, "range literal in condition");
14838  }
14839  }
14840  break;
14841 
14842  case NODE_DSYM:
14843  parser_warning(node, "literal in condition");
14844  break;
14845 
14846  case NODE_LIT:
14847  if (RB_TYPE_P(node->nd_lit, T_REGEXP)) {
14848  warn_unless_e_option(parser, node, "regex literal in condition");
14849  nd_set_type(node, NODE_MATCH);
14850  }
14851  else {
14852  parser_warning(node, "literal in condition");
14853  }
14854  default:
14855  break;
14856  }
14857  return node;
14858 }
14859 
14860 static NODE*
14861 cond_gen(struct parser_params *parser, NODE *node)
14862 {
14863  if (node == 0) return 0;
14864  return cond0(parser, node);
14865 }
14866 
14867 static NODE*
14868 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
14869 {
14870  value_expr(left);
14871  if (left && (enum node_type)nd_type(left) == type) {
14872  NODE *node = left, *second;
14873  while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
14874  node = second;
14875  }
14876  node->nd_2nd = NEW_NODE(type, second, right, 0);
14877  return left;
14878  }
14879  return NEW_NODE(type, left, right, 0);
14880 }
14881 
14882 static void
14883 no_blockarg(struct parser_params *parser, NODE *node)
14884 {
14885  if (node && nd_type(node) == NODE_BLOCK_PASS) {
14886  compile_error(PARSER_ARG "block argument should not be given");
14887  }
14888 }
14889 
14890 static NODE *
14891 ret_args_gen(struct parser_params *parser, NODE *node)
14892 {
14893  if (node) {
14894  no_blockarg(parser, node);
14895  if (nd_type(node) == NODE_ARRAY) {
14896  if (node->nd_next == 0) {
14897  node = node->nd_head;
14898  }
14899  else {
14900  nd_set_type(node, NODE_VALUES);
14901  }
14902  }
14903  }
14904  return node;
14905 }
14906 
14907 static NODE *
14908 new_yield_gen(struct parser_params *parser, NODE *node)
14909 {
14910  if (node) no_blockarg(parser, node);
14911 
14912  return NEW_YIELD(node);
14913 }
14914 
14915 static NODE*
14917 {
14918  switch (TYPE(node->nd_lit)) {
14919  case T_FIXNUM:
14920  node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
14921  break;
14922  case T_BIGNUM:
14923  node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
14924  break;
14925  case T_FLOAT:
14926 #if USE_FLONUM
14927  if (FLONUM_P(node->nd_lit)) {
14928  node->nd_lit = DBL2NUM(-RFLOAT_VALUE(node->nd_lit));
14929  }
14930  else {
14931  RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
14932  }
14933 #else
14934  RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
14935 #endif
14936  break;
14937  default:
14938  break;
14939  }
14940  return node;
14941 }
14942 
14943 static NODE *
14944 arg_blk_pass(NODE *node1, NODE *node2)
14945 {
14946  if (node2) {
14947  node2->nd_head = node1;
14948  return node2;
14949  }
14950  return node1;
14951 }
14952 
14953 
14954 static NODE*
14955 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, NODE *tail)
14956 {
14957  int saved_line = ruby_sourceline;
14958  struct rb_args_info *args = tail->nd_ainfo;
14959 
14960  args->pre_args_num = m ? rb_long2int(m->nd_plen) : 0;
14961  args->pre_init = m ? m->nd_next : 0;
14962 
14963  args->post_args_num = p ? rb_long2int(p->nd_plen) : 0;
14964  args->post_init = p ? p->nd_next : 0;
14965  args->first_post_arg = p ? p->nd_pid : 0;
14966 
14967  args->rest_arg = r;
14968 
14969  args->opt_args = o;
14970 
14971  ruby_sourceline = saved_line;
14972 
14973  return tail;
14974 }
14975 
14976 static NODE*
14977 new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b)
14978 {
14979  int saved_line = ruby_sourceline;
14980  struct rb_args_info *args;
14981  NODE *kw_rest_arg = 0;
14982  NODE *node;
14983 
14984  args = ALLOC(struct rb_args_info);
14985  MEMZERO(args, struct rb_args_info, 1);
14986  node = NEW_NODE(NODE_ARGS, 0, 0, args);
14987 
14988  args->block_arg = b;
14989  args->kw_args = k;
14990  if (k && !kr) kr = internal_id();
14991  if (kr) {
14992  arg_var(kr);
14993  kw_rest_arg = NEW_DVAR(kr);
14994  }
14995  args->kw_rest_arg = kw_rest_arg;
14996 
14997  ruby_sourceline = saved_line;
14998  return node;
14999 }
15000 
15001 static NODE*
15002 dsym_node_gen(struct parser_params *parser, NODE *node)
15003 {
15004  VALUE lit;
15005 
15006  if (!node) {
15007  return NEW_LIT(ID2SYM(idNULL));
15008  }
15009 
15010  switch (nd_type(node)) {
15011  case NODE_DSTR:
15012  nd_set_type(node, NODE_DSYM);
15013  break;
15014  case NODE_STR:
15015  lit = node->nd_lit;
15016  node->nd_lit = ID2SYM(rb_intern_str(lit));
15017  nd_set_type(node, NODE_LIT);
15018  break;
15019  default:
15020  node = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST(node));
15021  break;
15022  }
15023  return node;
15024 }
15025 #endif /* !RIPPER */
15026 
15027 #ifndef RIPPER
15028 static NODE *
15029 new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
15030 {
15031  NODE *asgn;
15032 
15033  if (lhs) {
15034  ID vid = lhs->nd_vid;
15035  if (op == tOROP) {
15036  lhs->nd_value = rhs;
15037  asgn = NEW_OP_ASGN_OR(gettable(vid), lhs);
15038  if (is_asgn_or_id(vid)) {
15039  asgn->nd_aid = vid;
15040  }
15041  }
15042  else if (op == tANDOP) {
15043  lhs->nd_value = rhs;
15044  asgn = NEW_OP_ASGN_AND(gettable(vid), lhs);
15045  }
15046  else {
15047  asgn = lhs;
15048  asgn->nd_value = NEW_CALL(gettable(vid), op, NEW_LIST(rhs));
15049  }
15050  }
15051  else {
15052  asgn = NEW_BEGIN(0);
15053  }
15054  return asgn;
15055 }
15056 
15057 static NODE *
15058 new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs)
15059 {
15060  NODE *asgn;
15061 
15062  if (op == tOROP) {
15063  op = 0;
15064  }
15065  else if (op == tANDOP) {
15066  op = 1;
15067  }
15068  asgn = NEW_OP_ASGN2(lhs, attr, op, rhs);
15069  fixpos(asgn, lhs);
15070  return asgn;
15071 }
15072 
15073 static NODE *
15074 new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
15075 {
15076  NODE *asgn;
15077 
15078  if (op == tOROP) {
15079  op = 0;
15080  }
15081  else if (op == tANDOP) {
15082  op = 1;
15083  }
15084  if (lhs) {
15085  asgn = NEW_OP_CDECL(lhs, op, rhs);
15086  }
15087  else {
15088  asgn = NEW_BEGIN(0);
15089  }
15090  fixpos(asgn, lhs);
15091  return asgn;
15092 }
15093 #else
15094 static VALUE
15095 new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs)
15096 {
15097  return dispatch3(opassign, lhs, op, rhs);
15098 }
15099 
15100 static VALUE
15101 new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs)
15102 {
15103  VALUE recv = dispatch3(field, lhs, type, attr);
15104  return dispatch3(opassign, recv, op, rhs);
15105 }
15106 #endif
15107 
15108 static void
15109 warn_unused_var(struct parser_params *parser, struct local_vars *local)
15110 {
15111  int i, cnt;
15112  ID *v, *u;
15113 
15114  if (!local->used) return;
15115  v = local->vars->tbl;
15116  u = local->used->tbl;
15117  cnt = local->used->pos;
15118  if (cnt != local->vars->pos) {
15119  rb_bug("local->used->pos != local->vars->pos");
15120  }
15121  for (i = 0; i < cnt; ++i) {
15122  if (!v[i] || (u[i] & LVAR_USED)) continue;
15123  if (is_private_local_id(v[i])) continue;
15124  rb_warn4S(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i]));
15125  }
15126 }
15127 
15128 static void
15129 local_push_gen(struct parser_params *parser, int inherit_dvars)
15130 {
15131  struct local_vars *local;
15132 
15133  local = ALLOC(struct local_vars);
15134  local->prev = lvtbl;
15135  local->args = vtable_alloc(0);
15136  local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
15137  local->used = !(inherit_dvars &&
15139  RTEST(ruby_verbose) ? vtable_alloc(0) : 0;
15140  lvtbl = local;
15141 }
15142 
15143 static void
15145 {
15146  struct local_vars *local = lvtbl->prev;
15147  if (lvtbl->used) {
15148  warn_unused_var(parser, lvtbl);
15149  vtable_free(lvtbl->used);
15150  }
15151  vtable_free(lvtbl->args);
15152  vtable_free(lvtbl->vars);
15153  xfree(lvtbl);
15154  lvtbl = local;
15155 }
15156 
15157 #ifndef RIPPER
15158 static ID*
15159 vtable_tblcpy(ID *buf, const struct vtable *src)
15160 {
15161  int i, cnt = vtable_size(src);
15162 
15163  if (cnt > 0) {
15164  buf[0] = cnt;
15165  for (i = 0; i < cnt; i++) {
15166  buf[i] = src->tbl[i];
15167  }
15168  return buf;
15169  }
15170  return 0;
15171 }
15172 
15173 static ID*
15175 {
15176  int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars);
15177  ID *buf;
15178 
15179  if (cnt <= 0) return 0;
15180  buf = ALLOC_N(ID, cnt + 1);
15181  vtable_tblcpy(buf+1, lvtbl->args);
15182  vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars);
15183  buf[0] = cnt;
15184  return buf;
15185 }
15186 #endif
15187 
15188 static int
15189 arg_var_gen(struct parser_params *parser, ID id)
15190 {
15191  vtable_add(lvtbl->args, id);
15192  return vtable_size(lvtbl->args) - 1;
15193 }
15194 
15195 static int
15196 local_var_gen(struct parser_params *parser, ID id)
15197 {
15198  vtable_add(lvtbl->vars, id);
15199  if (lvtbl->used) {
15201  }
15202  return vtable_size(lvtbl->vars) - 1;
15203 }
15204 
15205 static int
15206 local_id_gen(struct parser_params *parser, ID id)
15207 {
15208  struct vtable *vars, *args, *used;
15209 
15210  vars = lvtbl->vars;
15211  args = lvtbl->args;
15212  used = lvtbl->used;
15213 
15214  while (vars && POINTER_P(vars->prev)) {
15215  vars = vars->prev;
15216  args = args->prev;
15217  if (used) used = used->prev;
15218  }
15219 
15220  if (vars && vars->prev == DVARS_INHERIT) {
15221  return rb_local_defined(id);
15222  }
15223  else if (vtable_included(args, id)) {
15224  return 1;
15225  }
15226  else {
15227  int i = vtable_included(vars, id);
15228  if (i && used) used->tbl[i-1] |= LVAR_USED;
15229  return i != 0;
15230  }
15231 }
15232 
15233 static const struct vtable *
15235 {
15236  lvtbl->args = vtable_alloc(lvtbl->args);
15237  lvtbl->vars = vtable_alloc(lvtbl->vars);
15238  if (lvtbl->used) {
15239  lvtbl->used = vtable_alloc(lvtbl->used);
15240  }
15241  return lvtbl->args;
15242 }
15243 
15244 static void
15245 dyna_pop_1(struct parser_params *parser)
15246 {
15247  struct vtable *tmp;
15248 
15249  if ((tmp = lvtbl->used) != 0) {
15250  warn_unused_var(parser, lvtbl);
15251  lvtbl->used = lvtbl->used->prev;
15252  vtable_free(tmp);
15253  }
15254  tmp = lvtbl->args;
15255  lvtbl->args = lvtbl->args->prev;
15256  vtable_free(tmp);
15257  tmp = lvtbl->vars;
15258  lvtbl->vars = lvtbl->vars->prev;
15259  vtable_free(tmp);
15260 }
15261 
15262 static void
15263 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
15264 {
15265  while (lvtbl->args != lvargs) {
15266  dyna_pop_1(parser);
15267  if (!lvtbl->args) {
15268  struct local_vars *local = lvtbl->prev;
15269  xfree(lvtbl);
15270  lvtbl = local;
15271  }
15272  }
15273  dyna_pop_1(parser);
15274 }
15275 
15276 static int
15278 {
15279  return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
15280 }
15281 
15282 static int
15283 dvar_defined_gen(struct parser_params *parser, ID id, int get)
15284 {
15285  struct vtable *vars, *args, *used;
15286  int i;
15287 
15288  args = lvtbl->args;
15289  vars = lvtbl->vars;
15290  used = lvtbl->used;
15291 
15292  while (POINTER_P(vars)) {
15293  if (vtable_included(args, id)) {
15294  return 1;
15295  }
15296  if ((i = vtable_included(vars, id)) != 0) {
15297  if (used) used->tbl[i-1] |= LVAR_USED;
15298  return 1;
15299  }
15300  args = args->prev;
15301  vars = vars->prev;
15302  if (get) used = 0;
15303  if (used) used = used->prev;
15304  }
15305 
15306  if (vars == DVARS_INHERIT) {
15307  return rb_dvar_defined(id);
15308  }
15309 
15310  return 0;
15311 }
15312 
15313 static int
15314 dvar_curr_gen(struct parser_params *parser, ID id)
15315 {
15316  return (vtable_included(lvtbl->args, id) ||
15317  vtable_included(lvtbl->vars, id));
15318 }
15319 
15320 #ifndef RIPPER
15321 static void
15323 {
15324  int c = RE_OPTION_ENCODING_IDX(options);
15325 
15326  if (c) {
15327  int opt, idx;
15328  rb_char_to_option_kcode(c, &opt, &idx);
15329  if (idx != ENCODING_GET(str) &&
15331  goto error;
15332  }
15333  ENCODING_SET(str, idx);
15334  }
15335  else if (RE_OPTION_ENCODING_NONE(options)) {
15336  if (!ENCODING_IS_ASCII8BIT(str) &&
15338  c = 'n';
15339  goto error;
15340  }
15342  }
15343  else if (current_enc == rb_usascii_encoding()) {
15345  /* raise in re.c */
15347  }
15348  else {
15350  }
15351  }
15352  return;
15353 
15354  error:
15356  "regexp encoding option '%c' differs from source encoding '%s'",
15357  c, rb_enc_name(rb_enc_get(str)));
15358 }
15359 
15360 static int
15362 {
15363  VALUE err;
15364  reg_fragment_setenc(str, options);
15365  err = rb_reg_check_preprocess(str);
15366  if (err != Qnil) {
15367  err = rb_obj_as_string(err);
15368  compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
15369  RB_GC_GUARD(err);
15370  return 0;
15371  }
15372  return 1;
15373 }
15374 
15375 typedef struct {
15380  int num;
15382 
15383 static int
15385  int back_num, int *back_refs, OnigRegex regex, void *arg0)
15386 {
15388  struct parser_params* parser = arg->parser;
15389  rb_encoding *enc = arg->enc;
15390  long len = name_end - name;
15391  const char *s = (const char *)name;
15392  ID var;
15393 
15394  arg->num++;
15395 
15396  if (arg->succ_block == 0) {
15397  arg->succ_block = NEW_BEGIN(0);
15398  arg->fail_block = NEW_BEGIN(0);
15399  }
15400 
15401  if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
15402  (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
15403  !rb_enc_symname2_p(s, len, enc)) {
15404  return ST_CONTINUE;
15405  }
15406  var = rb_intern3(s, len, enc);
15407  if (dvar_defined(var) || local_id(var)) {
15408  rb_warningS("named capture conflicts a local variable - %s",
15409  rb_id2name(var));
15410  }
15411  arg->succ_block = block_append(arg->succ_block,
15413  NEW_CALL(
15414  gettable(rb_intern("$~")),
15415  idAREF,
15416  NEW_LIST(NEW_LIT(ID2SYM(var))))
15417  )));
15418  arg->fail_block = block_append(arg->fail_block,
15420  return ST_CONTINUE;
15421 }
15422 
15423 static NODE *
15425 {
15427 
15428  arg.parser = parser;
15429  arg.enc = rb_enc_get(regexp);
15430  arg.succ_block = 0;
15431  arg.fail_block = 0;
15432  arg.num = 0;
15434 
15435  if (arg.num == 0)
15436  return match;
15437 
15438  return
15439  block_append(
15440  newline_node(match),
15441  NEW_IF(gettable(rb_intern("$~")),
15442  block_append(
15443  newline_node(arg.succ_block),
15444  newline_node(
15445  NEW_CALL(
15446  gettable(rb_intern("$~")),
15447  rb_intern("begin"),
15448  NEW_LIST(NEW_LIT(INT2FIX(0)))))),
15449  block_append(
15450  newline_node(arg.fail_block),
15451  newline_node(
15452  NEW_LIT(Qnil)))));
15453 }
15454 
15455 static VALUE
15456 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
15457 {
15458  VALUE re;
15459  VALUE err;
15460 
15461  reg_fragment_setenc(str, options);
15462  err = rb_errinfo();
15464  if (NIL_P(re)) {
15465  ID mesg = rb_intern("mesg");
15466  VALUE m = rb_attr_get(rb_errinfo(), mesg);
15467  rb_set_errinfo(err);
15468  if (!NIL_P(err)) {
15469  rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
15470  }
15471  else {
15473  }
15474  return Qnil;
15475  }
15476  return re;
15477 }
15478 
15479 void
15481 {
15482 }
15483 
15484 NODE*
15486 {
15487  NODE *prelude = 0;
15488  NODE *scope = node;
15489  struct parser_params *parser;
15490 
15491  if (!node) return node;
15492 
15493  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15494 
15495  node = node->nd_body;
15496 
15497  if (nd_type(node) == NODE_PRELUDE) {
15498  prelude = node;
15499  node = node->nd_body;
15500  }
15501 
15502  node = block_append(node,
15503  NEW_FCALL(rb_intern("print"),
15504  NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
15505  if (prelude) {
15506  prelude->nd_body = node;
15507  scope->nd_body = prelude;
15508  }
15509  else {
15510  scope->nd_body = node;
15511  }
15512 
15513  return scope;
15514 }
15515 
15516 NODE *
15517 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
15518 {
15519  NODE *prelude = 0;
15520  NODE *scope = node;
15521  struct parser_params *parser;
15522 
15523  if (!node) return node;
15524 
15525  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15526 
15527  node = node->nd_body;
15528 
15529  if (nd_type(node) == NODE_PRELUDE) {
15530  prelude = node;
15531  node = node->nd_body;
15532  }
15533  if (split) {
15534  node = block_append(NEW_GASGN(rb_intern("$F"),
15535  NEW_CALL(NEW_GVAR(rb_intern("$_")),
15536  rb_intern("split"), 0)),
15537  node);
15538  }
15539  if (chop) {
15540  node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
15541  rb_intern("chop!"), 0), node);
15542  }
15543 
15544  node = NEW_OPT_N(node);
15545 
15546  if (prelude) {
15547  prelude->nd_body = node;
15548  scope->nd_body = prelude;
15549  }
15550  else {
15551  scope->nd_body = node;
15552  }
15553 
15554  return scope;
15555 }
15556 
15557 static const struct {
15559  const char *name;
15560 } op_tbl[] = {
15561  {tDOT2, ".."},
15562  {tDOT3, "..."},
15563  {'+', "+(binary)"},
15564  {'-', "-(binary)"},
15565  {tPOW, "**"},
15566  {tDSTAR, "**"},
15567  {tUPLUS, "+@"},
15568  {tUMINUS, "-@"},
15569  {tCMP, "<=>"},
15570  {tGEQ, ">="},
15571  {tLEQ, "<="},
15572  {tEQ, "=="},
15573  {tEQQ, "==="},
15574  {tNEQ, "!="},
15575  {tMATCH, "=~"},
15576  {tNMATCH, "!~"},
15577  {tAREF, "[]"},
15578  {tASET, "[]="},
15579  {tLSHFT, "<<"},
15580  {tRSHFT, ">>"},
15581  {tCOLON2, "::"},
15582 };
15583 
15584 #define op_tbl_count numberof(op_tbl)
15585 
15586 #ifndef ENABLE_SELECTOR_NAMESPACE
15587 #define ENABLE_SELECTOR_NAMESPACE 0
15588 #endif
15589 
15590 static struct symbols {
15594 #if ENABLE_SELECTOR_NAMESPACE
15595  st_table *ivar2_id;
15596  st_table *id_ivar2;
15597 #endif
15600 
15601 static const struct st_hash_type symhash = {
15603  rb_str_hash,
15604 };
15605 
15606 #if ENABLE_SELECTOR_NAMESPACE
15607 struct ivar2_key {
15608  ID id;
15609  VALUE klass;
15610 };
15611 
15612 static int
15613 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
15614 {
15615  if (key1->id == key2->id && key1->klass == key2->klass) {
15616  return 0;
15617  }
15618  return 1;
15619 }
15620 
15621 static int
15622 ivar2_hash(struct ivar2_key *key)
15623 {
15624  return (key->id << 8) ^ (key->klass >> 2);
15625 }
15626 
15627 static const struct st_hash_type ivar2_hash_type = {
15628  ivar2_cmp,
15629  ivar2_hash,
15630 };
15631 #endif
15632 
15633 void
15635 {
15636  global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
15638 #if ENABLE_SELECTOR_NAMESPACE
15639  global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
15640  global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
15641 #endif
15642 
15643  (void)nodetype;
15644  (void)nodeline;
15645 #if PARSER_DEBUG
15646  (void)lex_state_name(-1);
15647 #endif
15648 
15649  Init_id();
15650 }
15651 
15652 void
15654 {
15658 }
15659 #endif /* !RIPPER */
15660 
15661 static ID
15663 {
15664  ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
15665  id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
15666  return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
15667 }
15668 
15669 #ifndef RIPPER
15670 static int
15671 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
15672 {
15673  int mb = 0;
15674 
15675  if (m >= e) return 0;
15676  if (is_global_name_punct(*m)) {
15677  ++m;
15678  }
15679  else if (*m == '-') {
15680  ++m;
15681  if (m < e && is_identchar(m, e, enc)) {
15682  if (!ISASCII(*m)) mb = 1;
15683  m += rb_enc_mbclen(m, e, enc);
15684  }
15685  }
15686  else {
15687  if (!rb_enc_isdigit(*m, enc)) return 0;
15688  do {
15689  if (!ISASCII(*m)) mb = 1;
15690  ++m;
15691  } while (m < e && rb_enc_isdigit(*m, enc));
15692  }
15693  return m == e ? mb + 1 : 0;
15694 }
15695 
15696 int
15697 rb_symname_p(const char *name)
15698 {
15699  return rb_enc_symname_p(name, rb_ascii8bit_encoding());
15700 }
15701 
15702 int
15703 rb_enc_symname_p(const char *name, rb_encoding *enc)
15704 {
15705  return rb_enc_symname2_p(name, strlen(name), enc);
15706 }
15707 
15708 static int
15709 rb_enc_symname_type(const char *name, long len, rb_encoding *enc)
15710 {
15711  const char *m = name;
15712  const char *e = m + len;
15713  int type = ID_JUNK;
15714 
15715  if (!m || len <= 0) return -1;
15716  switch (*m) {
15717  case '\0':
15718  return -1;
15719 
15720  case '$':
15721  type = ID_GLOBAL;
15722  if (is_special_global_name(++m, e, enc)) return type;
15723  goto id;
15724 
15725  case '@':
15726  type = ID_INSTANCE;
15727  if (*++m == '@') {
15728  ++m;
15729  type = ID_CLASS;
15730  }
15731  goto id;
15732 
15733  case '<':
15734  switch (*++m) {
15735  case '<': ++m; break;
15736  case '=': if (*++m == '>') ++m; break;
15737  default: break;
15738  }
15739  break;
15740 
15741  case '>':
15742  switch (*++m) {
15743  case '>': case '=': ++m; break;
15744  }
15745  break;
15746 
15747  case '=':
15748  switch (*++m) {
15749  case '~': ++m; break;
15750  case '=': if (*++m == '=') ++m; break;
15751  default: return -1;
15752  }
15753  break;
15754 
15755  case '*':
15756  if (*++m == '*') ++m;
15757  break;
15758 
15759  case '+': case '-':
15760  if (*++m == '@') ++m;
15761  break;
15762 
15763  case '|': case '^': case '&': case '/': case '%': case '~': case '`':
15764  ++m;
15765  break;
15766 
15767  case '[':
15768  if (*++m != ']') return -1;
15769  if (*++m == '=') ++m;
15770  break;
15771 
15772  case '!':
15773  if (len == 1) return ID_JUNK;
15774  switch (*++m) {
15775  case '=': case '~': ++m; break;
15776  default: return -1;
15777  }
15778  break;
15779 
15780  default:
15781  type = rb_enc_isupper(*m, enc) ? ID_CONST : ID_LOCAL;
15782  id:
15783  if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
15784  return -1;
15785  while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
15786  switch (*m) {
15787  case '!': case '?':
15788  if (type == ID_GLOBAL || type == ID_CLASS || type == ID_INSTANCE) return -1;
15789  type = ID_JUNK;
15790  ++m;
15791  break;
15792  case '=':
15793  if (type != ID_CONST && type != ID_LOCAL) return -1;
15794  type = ID_ATTRSET;
15795  ++m;
15796  break;
15797  }
15798  break;
15799  }
15800  return m == e ? type : -1;
15801 }
15802 
15803 int
15804 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
15805 {
15806  return rb_enc_symname_type(name, len, enc) != -1;
15807 }
15808 
15809 static int
15811 {
15812  const char *ptr = StringValuePtr(name);
15813  long len = RSTRING_LEN(name);
15814  int type = rb_enc_symname_type(ptr, len, rb_enc_get(name));
15815  RB_GC_GUARD(name);
15816  return type;
15817 }
15818 
15819 static ID
15820 register_symid(ID id, const char *name, long len, rb_encoding *enc)
15821 {
15822  VALUE str = rb_enc_str_new(name, len, enc);
15823  return register_symid_str(id, str);
15824 }
15825 
15826 static ID
15828 {
15829  OBJ_FREEZE(str);
15832  return id;
15833 }
15834 
15835 static int
15837 {
15838  if (!rb_enc_asciicompat(rb_enc_get(str))) return FALSE;
15839  switch (rb_enc_str_coderange(str)) {
15840  case ENC_CODERANGE_BROKEN:
15841  rb_raise(rb_eEncodingError, "invalid encoding symbol");
15842  case ENC_CODERANGE_7BIT:
15843  return TRUE;
15844  }
15845  return FALSE;
15846 }
15847 
15848 /*
15849  * _str_ itself will be registered at the global symbol table. _str_
15850  * can be modified before the registration, since the encoding will be
15851  * set to ASCII-8BIT if it is a special global name.
15852  */
15853 static ID intern_str(VALUE str);
15854 
15855 ID
15856 rb_intern3(const char *name, long len, rb_encoding *enc)
15857 {
15858  VALUE str;
15859  st_data_t data;
15860  struct RString fake_str;
15861  fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
15862  fake_str.basic.klass = rb_cString;
15863  fake_str.as.heap.len = len;
15864  fake_str.as.heap.ptr = (char *)name;
15865  fake_str.as.heap.aux.capa = len;
15866  str = (VALUE)&fake_str;
15867  rb_enc_associate(str, enc);
15868  OBJ_FREEZE(str);
15869 
15870  if (st_lookup(global_symbols.sym_id, str, &data))
15871  return (ID)data;
15872 
15873  str = rb_enc_str_new(name, len, enc); /* make true string */
15874  return intern_str(str);
15875 }
15876 
15877 static ID
15879 {
15880  const char *name, *m, *e;
15881  long len, last;
15882  rb_encoding *enc, *symenc;
15883  unsigned char c;
15884  ID id;
15885  int mb;
15886 
15887  RSTRING_GETMEM(str, name, len);
15888  m = name;
15889  e = m + len;
15890  enc = rb_enc_get(str);
15891  symenc = enc;
15892 
15893  if (rb_cString && !rb_enc_asciicompat(enc)) {
15894  id = ID_JUNK;
15895  goto new_id;
15896  }
15897  last = len-1;
15898  id = 0;
15899  switch (*m) {
15900  case '$':
15901  id |= ID_GLOBAL;
15902  if ((mb = is_special_global_name(++m, e, enc)) != 0) {
15903  if (!--mb) symenc = rb_usascii_encoding();
15904  goto new_id;
15905  }
15906  break;
15907  case '@':
15908  if (m[1] == '@') {
15909  m++;
15910  id |= ID_CLASS;
15911  }
15912  else {
15913  id |= ID_INSTANCE;
15914  }
15915  m++;
15916  break;
15917  default:
15918  c = m[0];
15919  if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
15920  /* operators */
15921  int i;
15922 
15923  if (len == 1) {
15924  id = c;
15925  goto id_register;
15926  }
15927  for (i = 0; i < op_tbl_count; i++) {
15928  if (*op_tbl[i].name == *m &&
15929  strcmp(op_tbl[i].name, m) == 0) {
15930  id = op_tbl[i].token;
15931  goto id_register;
15932  }
15933  }
15934  }
15935 
15936  if (m[last] == '=') {
15937  /* attribute assignment */
15938  id = rb_intern3(name, last, enc);
15939  if (id > tLAST_OP_ID && !is_attrset_id(id)) {
15940  enc = rb_enc_get(rb_id2str(id));
15941  id = rb_id_attrset(id);
15942  goto id_register;
15943  }
15944  id = ID_ATTRSET;
15945  }
15946  else if (rb_enc_isupper(m[0], enc)) {
15947  id = ID_CONST;
15948  }
15949  else {
15950  id = ID_LOCAL;
15951  }
15952  break;
15953  }
15954  if (!rb_enc_isdigit(*m, enc)) {
15955  while (m <= name + last && is_identchar(m, e, enc)) {
15956  if (ISASCII(*m)) {
15957  m++;
15958  }
15959  else {
15960  m += rb_enc_mbclen(m, e, enc);
15961  }
15962  }
15963  }
15964  if (m - name < len) id = ID_JUNK;
15965  if (sym_check_asciionly(str)) symenc = rb_usascii_encoding();
15966  new_id:
15967  if (symenc != enc) rb_enc_associate(str, symenc);
15969  if (len > 20) {
15970  rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
15971  name);
15972  }
15973  else {
15974  rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
15975  (int)len, name);
15976  }
15977  }
15979  id_register:
15980  return register_symid_str(id, str);
15981 }
15982 
15983 ID
15984 rb_intern2(const char *name, long len)
15985 {
15986  return rb_intern3(name, len, rb_usascii_encoding());
15987 }
15988 
15989 #undef rb_intern
15990 ID
15991 rb_intern(const char *name)
15992 {
15993  return rb_intern2(name, strlen(name));
15994 }
15995 
15996 ID
15998 {
15999  st_data_t id;
16000 
16001  if (st_lookup(global_symbols.sym_id, str, &id))
16002  return (ID)id;
16003  return intern_str(rb_str_dup(str));
16004 }
16005 
16006 VALUE
16008 {
16009  st_data_t data;
16010 
16011  if (id < tLAST_TOKEN) {
16012  int i = 0;
16013 
16014  if (id < INT_MAX && rb_ispunct((int)id)) {
16015  VALUE str = global_symbols.op_sym[i = (int)id];
16016  if (!str) {
16017  char name[2];
16018  name[0] = (char)id;
16019  name[1] = 0;
16020  str = rb_usascii_str_new(name, 1);
16021  OBJ_FREEZE(str);
16023  }
16024  return str;
16025  }
16026  for (i = 0; i < op_tbl_count; i++) {
16027  if (op_tbl[i].token == id) {
16028  VALUE str = global_symbols.op_sym[i];
16029  if (!str) {
16030  str = rb_usascii_str_new2(op_tbl[i].name);
16031  OBJ_FREEZE(str);
16033  }
16034  return str;
16035  }
16036  }
16037  }
16038 
16039  if (st_lookup(global_symbols.id_str, id, &data)) {
16040  VALUE str = (VALUE)data;
16041  if (RBASIC(str)->klass == 0)
16042  RBASIC(str)->klass = rb_cString;
16043  return str;
16044  }
16045 
16046  if (is_attrset_id(id)) {
16047  ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL;
16048  VALUE str;
16049 
16050  while (!(str = rb_id2str(id2))) {
16051  if (!is_local_id(id2)) return 0;
16052  id2 = (id & ~ID_SCOPE_MASK) | ID_CONST;
16053  }
16054  str = rb_str_dup(str);
16055  rb_str_cat(str, "=", 1);
16056  rb_intern_str(str);
16057  if (st_lookup(global_symbols.id_str, id, &data)) {
16058  VALUE str = (VALUE)data;
16059  if (RBASIC(str)->klass == 0)
16060  RBASIC(str)->klass = rb_cString;
16061  return str;
16062  }
16063  }
16064  return 0;
16065 }
16066 
16067 const char *
16069 {
16070  VALUE str = rb_id2str(id);
16071 
16072  if (!str) return 0;
16073  return RSTRING_PTR(str);
16074 }
16075 
16076 static int
16078 {
16079  rb_ary_push(ary, ID2SYM(value));
16080  return ST_CONTINUE;
16081 }
16082 
16083 /*
16084  * call-seq:
16085  * Symbol.all_symbols => array
16086  *
16087  * Returns an array of all the symbols currently in Ruby's symbol
16088  * table.
16089  *
16090  * Symbol.all_symbols.size #=> 903
16091  * Symbol.all_symbols[1,20] #=> [:floor, :ARGV, :Binding, :symlink,
16092  * :chown, :EOFError, :$;, :String,
16093  * :LOCK_SH, :"setuid?", :$<,
16094  * :default_proc, :compact, :extend,
16095  * :Tms, :getwd, :$=, :ThreadGroup,
16096  * :wait2, :$>]
16097  */
16098 
16099 VALUE
16101 {
16103 
16105  return ary;
16106 }
16107 
16108 int
16110 {
16111  return is_const_id(id);
16112 }
16113 
16114 int
16116 {
16117  return is_class_id(id);
16118 }
16119 
16120 int
16122 {
16123  return is_global_id(id);
16124 }
16125 
16126 int
16128 {
16129  return is_instance_id(id);
16130 }
16131 
16132 int
16134 {
16135  return is_attrset_id(id);
16136 }
16137 
16138 int
16140 {
16141  return is_local_id(id);
16142 }
16143 
16144 int
16146 {
16147  return is_junk_id(id);
16148 }
16149 
16161 ID
16162 rb_check_id(volatile VALUE *namep)
16163 {
16164  st_data_t id;
16165  VALUE tmp;
16166  VALUE name = *namep;
16167 
16168  if (SYMBOL_P(name)) {
16169  return SYM2ID(name);
16170  }
16171  else if (!RB_TYPE_P(name, T_STRING)) {
16172  tmp = rb_check_string_type(name);
16173  if (NIL_P(tmp)) {
16174  tmp = rb_inspect(name);
16175  rb_raise(rb_eTypeError, "%s is not a symbol",
16176  RSTRING_PTR(tmp));
16177  }
16178  name = tmp;
16179  *namep = name;
16180  }
16181 
16182  sym_check_asciionly(name);
16183 
16184  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
16185  return (ID)id;
16186 
16187  if (rb_is_attrset_name(name)) {
16188  struct RString fake_str;
16189  const VALUE localname = (VALUE)&fake_str;
16190  /* make local name by chopping '=' */
16191  fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
16192  fake_str.basic.klass = rb_cString;
16193  fake_str.as.heap.len = RSTRING_LEN(name) - 1;
16194  fake_str.as.heap.ptr = RSTRING_PTR(name);
16195  fake_str.as.heap.aux.capa = fake_str.as.heap.len;
16196  rb_enc_copy(localname, name);
16197  OBJ_FREEZE(localname);
16198 
16199  if (st_lookup(global_symbols.sym_id, (st_data_t)localname, &id)) {
16200  return rb_id_attrset((ID)id);
16201  }
16202  RB_GC_GUARD(name);
16203  }
16204 
16205  return (ID)0;
16206 }
16207 
16208 ID
16210 {
16211  st_data_t id;
16212  struct RString fake_str;
16213  const VALUE name = (VALUE)&fake_str;
16214  fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
16215  fake_str.basic.klass = rb_cString;
16216  fake_str.as.heap.len = len;
16217  fake_str.as.heap.ptr = (char *)ptr;
16218  fake_str.as.heap.aux.capa = len;
16219  rb_enc_associate(name, enc);
16220 
16221  sym_check_asciionly(name);
16222 
16223  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
16224  return (ID)id;
16225 
16226  if (rb_is_attrset_name(name)) {
16227  fake_str.as.heap.len = len - 1;
16228  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id)) {
16229  return rb_id_attrset((ID)id);
16230  }
16231  }
16232 
16233  return (ID)0;
16234 }
16235 
16236 int
16238 {
16239  return rb_str_symname_type(name) == ID_CONST;
16240 }
16241 
16242 int
16244 {
16245  return rb_str_symname_type(name) == ID_CLASS;
16246 }
16247 
16248 int
16250 {
16251  return rb_str_symname_type(name) == ID_GLOBAL;
16252 }
16253 
16254 int
16256 {
16257  return rb_str_symname_type(name) == ID_INSTANCE;
16258 }
16259 
16260 int
16262 {
16263  return rb_str_symname_type(name) == ID_ATTRSET;
16264 }
16265 
16266 int
16268 {
16269  return rb_str_symname_type(name) == ID_LOCAL;
16270 }
16271 
16272 int
16274 {
16275  switch (rb_str_symname_type(name)) {
16276  case ID_LOCAL: case ID_ATTRSET: case ID_JUNK:
16277  return TRUE;
16278  }
16279  return FALSE;
16280 }
16281 
16282 int
16284 {
16285  return rb_str_symname_type(name) == -1;
16286 }
16287 
16288 #endif /* !RIPPER */
16289 
16290 static void
16292 {
16293  parser->eofp = Qfalse;
16294 
16295  parser->parser_lex_strterm = 0;
16296  parser->parser_cond_stack = 0;
16297  parser->parser_cmdarg_stack = 0;
16298  parser->parser_class_nest = 0;
16299  parser->parser_paren_nest = 0;
16300  parser->parser_lpar_beg = 0;
16301  parser->parser_brace_nest = 0;
16302  parser->parser_in_single = 0;
16303  parser->parser_in_def = 0;
16304  parser->parser_in_defined = 0;
16305  parser->parser_compile_for_eval = 0;
16306  parser->parser_cur_mid = 0;
16307  parser->parser_tokenbuf = NULL;
16308  parser->parser_tokidx = 0;
16309  parser->parser_toksiz = 0;
16310  parser->parser_heredoc_end = 0;
16311  parser->parser_command_start = TRUE;
16312  parser->parser_deferred_nodes = 0;
16313  parser->parser_lex_pbeg = 0;
16314  parser->parser_lex_p = 0;
16315  parser->parser_lex_pend = 0;
16316  parser->parser_lvtbl = 0;
16317  parser->parser_ruby__end__seen = 0;
16318  parser->parser_ruby_sourcefile = 0;
16319 #ifndef RIPPER
16320  parser->is_ripper = 0;
16321  parser->parser_eval_tree_begin = 0;
16322  parser->parser_eval_tree = 0;
16323 #else
16324  parser->is_ripper = 1;
16325  parser->parser_ruby_sourcefile_string = Qnil;
16326  parser->delayed = Qnil;
16327 
16328  parser->result = Qnil;
16329  parser->parsing_thread = Qnil;
16330  parser->toplevel_p = TRUE;
16331 #endif
16332 #ifdef YYMALLOC
16333  parser->heap = NULL;
16334 #endif
16335  parser->enc = rb_utf8_encoding();
16336 }
16337 
16338 #ifdef RIPPER
16339 #define parser_mark ripper_parser_mark
16340 #define parser_free ripper_parser_free
16341 #endif
16342 
16343 static void
16345 {
16346  struct parser_params *p = (struct parser_params*)ptr;
16347 
16353 #ifndef RIPPER
16356  rb_gc_mark(p->debug_lines);
16357 #else
16358  rb_gc_mark(p->parser_ruby_sourcefile_string);
16359  rb_gc_mark(p->delayed);
16360  rb_gc_mark(p->value);
16361  rb_gc_mark(p->result);
16362  rb_gc_mark(p->parsing_thread);
16363 #endif
16364 #ifdef YYMALLOC
16365  rb_gc_mark((VALUE)p->heap);
16366 #endif
16367 }
16368 
16369 static void
16371 {
16372  struct parser_params *p = (struct parser_params*)ptr;
16373  struct local_vars *local, *prev;
16374 
16375  if (p->parser_tokenbuf) {
16376  xfree(p->parser_tokenbuf);
16377  }
16378  for (local = p->parser_lvtbl; local; local = prev) {
16379  if (local->vars) xfree(local->vars);
16380  prev = local->prev;
16381  xfree(local);
16382  }
16383 #ifndef RIPPER
16385 #endif
16386  xfree(p);
16387 }
16388 
16389 static size_t
16390 parser_memsize(const void *ptr)
16391 {
16392  struct parser_params *p = (struct parser_params*)ptr;
16393  struct local_vars *local;
16394  size_t size = sizeof(*p);
16395 
16396  if (!ptr) return 0;
16397  size += p->parser_toksiz;
16398  for (local = p->parser_lvtbl; local; local = local->prev) {
16399  size += sizeof(*local);
16400  if (local->vars) size += local->vars->capa * sizeof(ID);
16401  }
16402 #ifndef RIPPER
16403  if (p->parser_ruby_sourcefile) {
16404  size += strlen(p->parser_ruby_sourcefile) + 1;
16405  }
16406 #endif
16407  return size;
16408 }
16409 
16410 static
16411 #ifndef RIPPER
16412 const
16413 #endif
16414 rb_data_type_t parser_data_type = {
16415  "parser",
16416  {
16417  parser_mark,
16418  parser_free,
16420  },
16421 };
16422 
16423 #ifndef RIPPER
16424 #undef rb_reserved_word
16425 
16426 const struct kwtable *
16427 rb_reserved_word(const char *str, unsigned int len)
16428 {
16429  return reserved_word(str, len);
16430 }
16431 
16432 static struct parser_params *
16434 {
16435  struct parser_params *p;
16436 
16437  p = ALLOC_N(struct parser_params, 1);
16438  MEMZERO(p, struct parser_params, 1);
16439  parser_initialize(p);
16440  return p;
16441 }
16442 
16443 VALUE
16445 {
16446  struct parser_params *p = parser_new();
16447 
16448  return TypedData_Wrap_Struct(0, &parser_data_type, p);
16449 }
16450 
16451 /*
16452  * call-seq:
16453  * ripper#end_seen? -> Boolean
16454  *
16455  * Return true if parsed source ended by +\_\_END\_\_+.
16456  */
16457 VALUE
16459 {
16460  struct parser_params *parser;
16461 
16462  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16463  return ruby__end__seen ? Qtrue : Qfalse;
16464 }
16465 
16466 /*
16467  * call-seq:
16468  * ripper#encoding -> encoding
16469  *
16470  * Return encoding of the source.
16471  */
16472 VALUE
16474 {
16475  struct parser_params *parser;
16476 
16477  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16479 }
16480 
16481 /*
16482  * call-seq:
16483  * ripper.yydebug -> true or false
16484  *
16485  * Get yydebug.
16486  */
16487 VALUE
16489 {
16490  struct parser_params *parser;
16491 
16492  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16493  return yydebug ? Qtrue : Qfalse;
16494 }
16495 
16496 /*
16497  * call-seq:
16498  * ripper.yydebug = flag
16499  *
16500  * Set yydebug.
16501  */
16502 VALUE
16504 {
16505  struct parser_params *parser;
16506 
16507  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16508  yydebug = RTEST(flag);
16509  return flag;
16510 }
16511 
16512 #ifdef YYMALLOC
16513 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
16514 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
16515 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
16516  (n)->u3.cnt = (c), (p))
16517 
16518 void *
16519 rb_parser_malloc(struct parser_params *parser, size_t size)
16520 {
16521  size_t cnt = HEAPCNT(1, size);
16522  NODE *n = NEWHEAP();
16523  void *ptr = xmalloc(size);
16524 
16525  return ADD2HEAP(n, cnt, ptr);
16526 }
16527 
16528 void *
16529 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
16530 {
16531  size_t cnt = HEAPCNT(nelem, size);
16532  NODE *n = NEWHEAP();
16533  void *ptr = xcalloc(nelem, size);
16534 
16535  return ADD2HEAP(n, cnt, ptr);
16536 }
16537 
16538 void *
16539 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
16540 {
16541  NODE *n;
16542  size_t cnt = HEAPCNT(1, size);
16543 
16544  if (ptr && (n = parser->heap) != NULL) {
16545  do {
16546  if (n->u1.node == ptr) {
16547  n->u1.node = ptr = xrealloc(ptr, size);
16548  if (n->u3.cnt) n->u3.cnt = cnt;
16549  return ptr;
16550  }
16551  } while ((n = n->u2.node) != NULL);
16552  }
16553  n = NEWHEAP();
16554  ptr = xrealloc(ptr, size);
16555  return ADD2HEAP(n, cnt, ptr);
16556 }
16557 
16558 void
16559 rb_parser_free(struct parser_params *parser, void *ptr)
16560 {
16561  NODE **prev = &parser->heap, *n;
16562 
16563  while ((n = *prev) != NULL) {
16564  if (n->u1.node == ptr) {
16565  *prev = n->u2.node;
16567  break;
16568  }
16569  prev = &n->u2.node;
16570  }
16571  xfree(ptr);
16572 }
16573 #endif
16574 #endif
16575 
16576 #ifdef RIPPER
16577 #ifdef RIPPER_DEBUG
16578 extern int rb_is_pointer_to_heap(VALUE);
16579 
16580 /* :nodoc: */
16581 static VALUE
16582 ripper_validate_object(VALUE self, VALUE x)
16583 {
16584  if (x == Qfalse) return x;
16585  if (x == Qtrue) return x;
16586  if (x == Qnil) return x;
16587  if (x == Qundef)
16588  rb_raise(rb_eArgError, "Qundef given");
16589  if (FIXNUM_P(x)) return x;
16590  if (SYMBOL_P(x)) return x;
16591  if (!rb_is_pointer_to_heap(x))
16592  rb_raise(rb_eArgError, "invalid pointer: %p", x);
16593  switch (TYPE(x)) {
16594  case T_STRING:
16595  case T_OBJECT:
16596  case T_ARRAY:
16597  case T_BIGNUM:
16598  case T_FLOAT:
16599  return x;
16600  case T_NODE:
16601  if (nd_type(x) != NODE_LASGN) {
16602  rb_raise(rb_eArgError, "NODE given: %p", x);
16603  }
16604  return ((NODE *)x)->nd_rval;
16605  default:
16606  rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
16607  x, rb_obj_classname(x));
16608  }
16609  return x;
16610 }
16611 #endif
16612 
16613 #define validate(x) ((x) = get_value(x))
16614 
16615 static VALUE
16616 ripper_dispatch0(struct parser_params *parser, ID mid)
16617 {
16618  return rb_funcall(parser->value, mid, 0);
16619 }
16620 
16621 static VALUE
16622 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
16623 {
16624  validate(a);
16625  return rb_funcall(parser->value, mid, 1, a);
16626 }
16627 
16628 static VALUE
16629 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
16630 {
16631  validate(a);
16632  validate(b);
16633  return rb_funcall(parser->value, mid, 2, a, b);
16634 }
16635 
16636 static VALUE
16637 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
16638 {
16639  validate(a);
16640  validate(b);
16641  validate(c);
16642  return rb_funcall(parser->value, mid, 3, a, b, c);
16643 }
16644 
16645 static VALUE
16646 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
16647 {
16648  validate(a);
16649  validate(b);
16650  validate(c);
16651  validate(d);
16652  return rb_funcall(parser->value, mid, 4, a, b, c, d);
16653 }
16654 
16655 static VALUE
16656 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
16657 {
16658  validate(a);
16659  validate(b);
16660  validate(c);
16661  validate(d);
16662  validate(e);
16663  return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
16664 }
16665 
16666 static VALUE
16667 ripper_dispatch7(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e, VALUE f, VALUE g)
16668 {
16669  validate(a);
16670  validate(b);
16671  validate(c);
16672  validate(d);
16673  validate(e);
16674  validate(f);
16675  validate(g);
16676  return rb_funcall(parser->value, mid, 7, a, b, c, d, e, f, g);
16677 }
16678 
16679 static const struct kw_assoc {
16680  ID id;
16681  const char *name;
16682 } keyword_to_name[] = {
16683  {keyword_class, "class"},
16684  {keyword_module, "module"},
16685  {keyword_def, "def"},
16686  {keyword_undef, "undef"},
16687  {keyword_begin, "begin"},
16688  {keyword_rescue, "rescue"},
16689  {keyword_ensure, "ensure"},
16690  {keyword_end, "end"},
16691  {keyword_if, "if"},
16692  {keyword_unless, "unless"},
16693  {keyword_then, "then"},
16694  {keyword_elsif, "elsif"},
16695  {keyword_else, "else"},
16696  {keyword_case, "case"},
16697  {keyword_when, "when"},
16698  {keyword_while, "while"},
16699  {keyword_until, "until"},
16700  {keyword_for, "for"},
16701  {keyword_break, "break"},
16702  {keyword_next, "next"},
16703  {keyword_redo, "redo"},
16704  {keyword_retry, "retry"},
16705  {keyword_in, "in"},
16706  {keyword_do, "do"},
16707  {keyword_do_cond, "do"},
16708  {keyword_do_block, "do"},
16709  {keyword_return, "return"},
16710  {keyword_yield, "yield"},
16711  {keyword_super, "super"},
16712  {keyword_self, "self"},
16713  {keyword_nil, "nil"},
16714  {keyword_true, "true"},
16715  {keyword_false, "false"},
16716  {keyword_and, "and"},
16717  {keyword_or, "or"},
16718  {keyword_not, "not"},
16719  {modifier_if, "if"},
16720  {modifier_unless, "unless"},
16721  {modifier_while, "while"},
16722  {modifier_until, "until"},
16723  {modifier_rescue, "rescue"},
16724  {keyword_alias, "alias"},
16725  {keyword_defined, "defined?"},
16726  {keyword_BEGIN, "BEGIN"},
16727  {keyword_END, "END"},
16728  {keyword__LINE__, "__LINE__"},
16729  {keyword__FILE__, "__FILE__"},
16730  {keyword__ENCODING__, "__ENCODING__"},
16731  {0, NULL}
16732 };
16733 
16734 static const char*
16735 keyword_id_to_str(ID id)
16736 {
16737  const struct kw_assoc *a;
16738 
16739  for (a = keyword_to_name; a->id; a++) {
16740  if (a->id == id)
16741  return a->name;
16742  }
16743  return NULL;
16744 }
16745 
16746 #undef ripper_id2sym
16747 static VALUE
16748 ripper_id2sym(ID id)
16749 {
16750  const char *name;
16751  char buf[8];
16752 
16753  if (id <= 256) {
16754  buf[0] = (char)id;
16755  buf[1] = '\0';
16756  return ID2SYM(rb_intern2(buf, 1));
16757  }
16758  if ((name = keyword_id_to_str(id))) {
16759  return ID2SYM(rb_intern(name));
16760  }
16761  switch (id) {
16762  case tOROP:
16763  name = "||";
16764  break;
16765  case tANDOP:
16766  name = "&&";
16767  break;
16768  default:
16769  name = rb_id2name(id);
16770  if (!name) {
16771  rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
16772  }
16773  return ID2SYM(id);
16774  }
16775  return ID2SYM(rb_intern(name));
16776 }
16777 
16778 static ID
16779 ripper_get_id(VALUE v)
16780 {
16781  NODE *nd;
16782  if (!RB_TYPE_P(v, T_NODE)) return 0;
16783  nd = (NODE *)v;
16784  if (nd_type(nd) != NODE_LASGN) return 0;
16785  return nd->nd_vid;
16786 }
16787 
16788 static VALUE
16789 ripper_get_value(VALUE v)
16790 {
16791  NODE *nd;
16792  if (v == Qundef) return Qnil;
16793  if (!RB_TYPE_P(v, T_NODE)) return v;
16794  nd = (NODE *)v;
16795  if (nd_type(nd) != NODE_LASGN) return Qnil;
16796  return nd->nd_rval;
16797 }
16798 
16799 static void
16800 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
16801 {
16802  VALUE str;
16803  va_list args;
16804 
16805  va_start(args, fmt);
16806  str = rb_vsprintf(fmt, args);
16807  va_end(args);
16808  rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
16809 }
16810 
16811 static void
16812 ripper_warn0(struct parser_params *parser, const char *fmt)
16813 {
16814  rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
16815 }
16816 
16817 static void
16818 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
16819 {
16820  rb_funcall(parser->value, rb_intern("warn"), 2,
16821  STR_NEW2(fmt), INT2NUM(a));
16822 }
16823 
16824 static void
16825 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
16826 {
16827  rb_funcall(parser->value, rb_intern("warn"), 2,
16828  STR_NEW2(fmt), STR_NEW2(str));
16829 }
16830 
16831 static void
16832 ripper_warning0(struct parser_params *parser, const char *fmt)
16833 {
16834  rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
16835 }
16836 
16837 static void
16838 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
16839 {
16840  rb_funcall(parser->value, rb_intern("warning"), 2,
16841  STR_NEW2(fmt), STR_NEW2(str));
16842 }
16843 
16844 static VALUE
16845 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
16846 {
16847  return rb_io_gets(src);
16848 }
16849 
16850 static VALUE
16851 ripper_s_allocate(VALUE klass)
16852 {
16853  struct parser_params *p;
16854  VALUE self;
16855 
16856  p = ALLOC_N(struct parser_params, 1);
16857  MEMZERO(p, struct parser_params, 1);
16858  self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
16859  p->value = self;
16860  return self;
16861 }
16862 
16863 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
16864 
16865 /*
16866  * call-seq:
16867  * Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
16868  *
16869  * Create a new Ripper object.
16870  * _src_ must be a String, an IO, or an Object which has #gets method.
16871  *
16872  * This method does not starts parsing.
16873  * See also Ripper#parse and Ripper.parse.
16874  */
16875 static VALUE
16876 ripper_initialize(int argc, VALUE *argv, VALUE self)
16877 {
16878  struct parser_params *parser;
16879  VALUE src, fname, lineno;
16880 
16881  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16882  rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
16883  if (RB_TYPE_P(src, T_FILE)) {
16884  parser->parser_lex_gets = ripper_lex_get_generic;
16885  }
16886  else {
16887  StringValue(src);
16888  parser->parser_lex_gets = lex_get_str;
16889  }
16890  parser->parser_lex_input = src;
16891  parser->eofp = Qfalse;
16892  if (NIL_P(fname)) {
16893  fname = STR_NEW2("(ripper)");
16894  }
16895  else {
16896  StringValue(fname);
16897  }
16898  parser_initialize(parser);
16899 
16900  parser->parser_ruby_sourcefile_string = fname;
16901  parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
16902  parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
16903 
16904  return Qnil;
16905 }
16906 
16907 struct ripper_args {
16908  struct parser_params *parser;
16909  int argc;
16910  VALUE *argv;
16911 };
16912 
16913 static VALUE
16914 ripper_parse0(VALUE parser_v)
16915 {
16916  struct parser_params *parser;
16917 
16918  TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16919  parser_prepare(parser);
16920  ripper_yyparse((void*)parser);
16921  return parser->result;
16922 }
16923 
16924 static VALUE
16925 ripper_ensure(VALUE parser_v)
16926 {
16927  struct parser_params *parser;
16928 
16929  TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16930  parser->parsing_thread = Qnil;
16931  return Qnil;
16932 }
16933 
16934 /*
16935  * call-seq:
16936  * ripper#parse
16937  *
16938  * Start parsing and returns the value of the root action.
16939  */
16940 static VALUE
16941 ripper_parse(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)) {
16950  if (parser->parsing_thread == rb_thread_current())
16951  rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
16952  else
16953  rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
16954  }
16955  parser->parsing_thread = rb_thread_current();
16956  rb_ensure(ripper_parse0, self, ripper_ensure, self);
16957 
16958  return parser->result;
16959 }
16960 
16961 /*
16962  * call-seq:
16963  * ripper#column -> Integer
16964  *
16965  * Return column number of current parsing line.
16966  * This number starts from 0.
16967  */
16968 static VALUE
16969 ripper_column(VALUE self)
16970 {
16971  struct parser_params *parser;
16972  long col;
16973 
16974  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16975  if (!ripper_initialized_p(parser)) {
16976  rb_raise(rb_eArgError, "method called for uninitialized object");
16977  }
16978  if (NIL_P(parser->parsing_thread)) return Qnil;
16979  col = parser->tokp - parser->parser_lex_pbeg;
16980  return LONG2NUM(col);
16981 }
16982 
16983 /*
16984  * call-seq:
16985  * ripper#filename -> String
16986  *
16987  * Return current parsing filename.
16988  */
16989 static VALUE
16990 ripper_filename(VALUE self)
16991 {
16992  struct parser_params *parser;
16993 
16994  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16995  if (!ripper_initialized_p(parser)) {
16996  rb_raise(rb_eArgError, "method called for uninitialized object");
16997  }
16998  return parser->parser_ruby_sourcefile_string;
16999 }
17000 
17001 /*
17002  * call-seq:
17003  * ripper#lineno -> Integer
17004  *
17005  * Return line number of current parsing line.
17006  * This number starts from 1.
17007  */
17008 static VALUE
17009 ripper_lineno(VALUE self)
17010 {
17011  struct parser_params *parser;
17012 
17013  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17014  if (!ripper_initialized_p(parser)) {
17015  rb_raise(rb_eArgError, "method called for uninitialized object");
17016  }
17017  if (NIL_P(parser->parsing_thread)) return Qnil;
17018  return INT2NUM(parser->parser_ruby_sourceline);
17019 }
17020 
17021 #ifdef RIPPER_DEBUG
17022 /* :nodoc: */
17023 static VALUE
17024 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
17025 {
17026  StringValue(msg);
17027  if (obj == Qundef) {
17028  rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg));
17029  }
17030  return Qnil;
17031 }
17032 
17033 /* :nodoc: */
17034 static VALUE
17035 ripper_value(VALUE self, VALUE obj)
17036 {
17037  return ULONG2NUM(obj);
17038 }
17039 #endif
17040 
17041 
17042 void
17043 Init_ripper(void)
17044 {
17045  parser_data_type.parent = RTYPEDDATA_TYPE(rb_parser_new());
17046 
17049  /* ensure existing in symbol table */
17050  (void)rb_intern("||");
17051  (void)rb_intern("&&");
17052 
17053  InitVM(ripper);
17054 }
17055 
17056 void
17057 InitVM_ripper(void)
17058 {
17059  VALUE Ripper;
17060 
17061  Ripper = rb_define_class("Ripper", rb_cObject);
17062  rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
17063  rb_define_alloc_func(Ripper, ripper_s_allocate);
17064  rb_define_method(Ripper, "initialize", ripper_initialize, -1);
17065  rb_define_method(Ripper, "parse", ripper_parse, 0);
17066  rb_define_method(Ripper, "column", ripper_column, 0);
17067  rb_define_method(Ripper, "filename", ripper_filename, 0);
17068  rb_define_method(Ripper, "lineno", ripper_lineno, 0);
17069  rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
17070  rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
17071  rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
17072  rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
17073 #ifdef RIPPER_DEBUG
17074  rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
17075  rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
17076  rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
17077 #endif
17078 
17081 
17082 # if 0
17083  /* Hack to let RDoc document SCRIPT_LINES__ */
17084 
17085  /*
17086  * When a Hash is assigned to +SCRIPT_LINES__+ the contents of files loaded
17087  * after the assignment will be added as an Array of lines with the file
17088  * name as the key.
17089  */
17090  rb_define_global_const("SCRIPT_LINES__", Qnil);
17091 #endif
17092 
17093 }
17094 #endif /* RIPPER */
17095 
VALUE data
Definition: tcltklib.c:3368
#define in_defined
Definition: ripper.c:615
#define rb_enc_islower(c, enc)
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 local_var(id)
Definition: ripper.c:788
#define cond(node)
Definition: ripper.c:654
#define deferred_nodes
Definition: ripper.c:628
#define nd_next
#define nd_type(n)
#define arg_var(id)
Definition: ripper.c:790
#define NEW_ARGSCAT(a, b)
RARRAY_PTR(q->result)[0]
#define NODE_DREGX_ONCE
#define ret_args(node)
Definition: ripper.c:705
VALUE rb_const_get_at(VALUE, ID)
Definition: variable.c:1877
#define yyparse
Definition: ripper.c:648
#define ALLOC(type)
volatile VALUE tmp
Definition: tcltklib.c:10209
#define NEW_FALSE()
static YYSIZE_T yytnamerr(char *yyres, const char *yystr)
Definition: ripper.c:4784
enum lex_state_e state
Definition: lex.c:33
struct local_vars * parser_lvtbl
Definition: ripper.c:556
#define NODE_IF
VALUE rb_ary_unshift(VALUE ary, VALUE item)
Definition: array.c:1084
static ID ripper_token2eventid(int tok)
Definition: eventids2.c:273
#define NODE_RESCUE
Definition: lex.c:33
#define IS_LABEL_SUFFIX(n)
Definition: ripper.c:12468
#define new_args_tail(k, kr, b)
Definition: ripper.c:701
#define YYSTACK_ALLOC
Definition: ripper.c:1142
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_input
Definition: ripper.c:620
#define lex_state
Definition: ripper.c:604
#define subnodes(n1, n2)
#define parser_precise_mbclen()
Definition: ripper.c:10763
static NODE * remove_begin(NODE *)
Definition: ripper.c:14602
ssize_t n
Definition: bigdecimal.c:5655
YYSTYPE yyvs
Definition: ripper.c:1181
#define NEW_STRTERM(func, term, paren)
Definition: ripper.c:11770
#define tLBRACE
Definition: ripper.c:276
VALUE sym
Definition: tkutil.c:1299
static const yytype_int16 yydefgoto[]
Definition: ripper.c:1962
volatile VALUE ary
Definition: tcltklib.c:9713
#define list_concat(h, t)
Definition: ripper.c:679
#define NODE_FALSE
#define NEW_DOT3(b, e)
static struct parser_params * parser_new(void)
Definition: ripper.c:16433
#define FLONUM_P(x)
VP_EXPORT int
Definition: bigdecimal.c:5050
#define NODE_OR
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 yydebug
Definition: ripper.c:636
static char *char * yydest
Definition: ripper.c:4760
static NODE * arg_blk_pass(NODE *, NODE *)
Definition: ripper.c:14944
#define NEW_NTH_REF(n)
static ID internal_id_gen(struct parser_params *)
Definition: ripper.c:15662
void rb_bug(const char *fmt,...)
Definition: error.c:290
#define NEW_DASGN_CURR(v, val)
int num
Definition: parse.h:281
static YYSIZE_T yysyntax_error(char *yyresult, int yystate, int yychar)
Definition: ripper.c:4831
#define IS_END()
Definition: ripper.c:12464
struct token_info * next
Definition: ripper.c:508
#define ENC_SINGLE(cr)
Definition: ripper.c:595
void rb_enc_copy(VALUE obj1, VALUE obj2)
Definition: encoding.c:854
#define FALSE
Definition: nkf.h:174
static NODE * logop_gen(struct parser_params *, enum node_type, NODE *, NODE *)
Definition: ripper.c:14868
#define modifier_if
Definition: ripper.c:223
#define tail
Definition: st.c:108
void rb_mark_tbl(struct st_table *)
Definition: gc.c:2541
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
static int comment_at_top(struct parser_params *parser)
Definition: ripper.c:12209
#define RE_OPTION_ENCODING_IDX(o)
Definition: ripper.c:815
#define keyword_unless
Definition: ripper.c:195
#define rb_gc_mark_locations(start, end)
Definition: gc.c:2346
size_t strlen(const char *)
#define assignable(id, node)
Definition: ripper.c:715
yytype_int16 yyssa[YYINITDEPTH]
Definition: ripper.c:5046
static size_t parser_memsize(const void *ptr)
Definition: ripper.c:16390
VALUE parser_lex_nextline
Definition: ripper.c:547
VALUE rb_make_exception(int argc, VALUE *argv)
Definition: eval.c:642
#define STR_FUNC_ESCAPE
Definition: ripper.c:11150
#define scan_oct(s, l, e)
Definition: util.h:52
VALUE stack_type
Definition: ripper.c:398
const char * rb_obj_classname(VALUE)
Definition: variable.c:391
#define reg_compile(str, options)
Definition: ripper.c:742
VALUE rb_id2str(ID id)
Definition: ripper.c:16007
Win32OLEIDispatch * p
Definition: win32ole.c:786
static NODE * call_uni_op_gen(struct parser_params *, NODE *, ID)
Definition: ripper.c:14061
#define toksiz
Definition: ripper.c:618
#define YY_(msgid)
Definition: ripper.c:1074
int parser_ruby__end__seen
Definition: ripper.c:557
#define NODE_DSYM
int parser_command_start
Definition: ripper.c:552
static void fixpos(NODE *, NODE *)
Definition: ripper.c:13811
#define NODE_DEFS
#define YYSTACK_FREE
Definition: ripper.c:1143
#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 nd_body
static void reduce_nodes_gen(struct parser_params *, NODE **)
Definition: ripper.c:14612
#define value_expr(node)
Definition: ripper.c:664
#define nd_paren(node)
Definition: ripper.c:829
VALUE rb_str_buf_append(VALUE, VALUE)
Definition: string.c:2098
#define NODE_HASH
#define keyword_do_LAMBDA
Definition: ripper.c:212
#define NODE_DOT3
static NODE * call_bin_op_gen(struct parser_params *, NODE *, ID, NODE *)
Definition: ripper.c:14053
const char * name
Definition: lex.c:33
#define tEMBDOC_BEG
Definition: eventids2.c:3
static int parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp, int string_literal, int symbol_literal, int regexp_literal)
Definition: ripper.c:11319
int parser_compile_for_eval
Definition: ripper.c:538
#define get_id(id)
Definition: ripper.c:750
int parser_token_info_enabled
Definition: ripper.c:574
#define NEW_ALIAS(n, o)
#define NEW_OP_CDECL(v, op, val)
int parser_brace_nest
Definition: ripper.c:537
#define keyword_yield
Definition: ripper.c:214
#define YYLEX
Definition: ripper.c:4532
static NODE * new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
Definition: ripper.c:15074
#define YYABORT
Definition: ripper.c:4453
SSL_METHOD *(* func)(void)
Definition: ossl_ssl.c:108
static void parser_heredoc_restore(struct parser_params *parser, NODE *here)
Definition: ripper.c:11978
#define lex_eol_p()
Definition: ripper.c:11186
#define rb_usascii_str_new2
#define NEW_TRUE()
#define dyna_in_block()
Definition: ripper.c:801
#define nd_resq
#define NODE_NTH_REF
void rb_define_global_const(const char *, VALUE)
Definition: variable.c:2211
static NODE * gettable_gen(struct parser_params *, ID)
Definition: ripper.c:14102
#define str_copy(_s, _p, _n)
void rb_gc_force_recycle(VALUE)
Definition: gc.c:2961
ssize_t i
Definition: bigdecimal.c:5655
#define tEQ
Definition: ripper.c:253
#define NODE_TRUE
#define was_bol()
Definition: ripper.c:11256
#define tLOWEST
Definition: ripper.c:295
#define IS_SPCARG(c)
Definition: ripper.c:12466
#define void_stmts(node)
Definition: ripper.c:668
#define T_NODE
static struct symbols global_symbols
#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 current_enc
Definition: ripper.c:635
int line_count
Definition: ripper.c:558
#define YYNTOKENS
Definition: ripper.c:1235
#define NEW_EVSTR(n)
#define NODE_ARGS
#define NEW_NEXT(s)
struct token_info token_info
#define tRPAREN
Definition: ripper.c:274
#define new_op_assign(lhs, op, rhs)
Definition: ripper.c:774
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
#define new_args(f, o, r, p, t)
Definition: ripper.c:699
yytype_int16 * yyssp
Definition: ripper.c:5048
#define strcasecmp
Definition: win32.h:200
#define nextc()
Definition: ripper.c:10653
#define rb_warning0(fmt)
Definition: ripper.c:928
VALUE rb_enc_from_encoding(rb_encoding *encoding)
Definition: encoding.c:103
static YYSIZE_T const char * yystr
Definition: ripper.c:4736
#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 VALUE debug_lines(const char *f)
Definition: ripper.c:10909
#define NODE_ENSURE
VALUE rb_eTypeError
Definition: error.c:511
#define rb_enc_isalnum(c, enc)
static int parser_here_document(struct parser_params *, NODE *)
Definition: ripper.c:12025
#define OBJ_FREEZE(x)
NODE * node
Definition: parse.h:279
#define rb_warnS(fmt, a)
Definition: ripper.c:926
#define dsym_node(node)
Definition: ripper.c:710
void rb_define_alloc_func(VALUE, rb_alloc_func_t)
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 logop(type, node1, node2)
Definition: ripper.c:656
#define rb_enc_prev_char(s, p, e, enc)
VALUE enc
Definition: tcltklib.c:10311
VALUE rb_ary_push(VALUE ary, VALUE item)
Definition: array.c:822
NODE * kw_args
Definition: ripper.y:517
unsigned long int yylno
Definition: ripper.c:4671
#define MAX_WORD_LENGTH
Definition: lex.c:43
static NODE * evstr2dstr_gen(struct parser_params *, NODE *)
Definition: ripper.c:14030
VALUE rb_eEncodingError
Definition: error.c:517
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: ripper.c:15384
static void warn_unused_var(struct parser_params *parser, struct local_vars *local)
Definition: ripper.c:15109
#define keyword_do_block
Definition: ripper.c:211
return yyd
Definition: ripper.c:4770
#define TYPE(x)
struct RBasic basic
Definition: ripper.y:843
unsigned short int yytype_uint16
Definition: ripper.c:1041
#define nd_else
#define parse_string(n)
Definition: ripper.c:10663
rb_encoding * rb_enc_compatible(VALUE str1, VALUE str2)
Definition: encoding.c:787
#define NODE_PRELUDE
#define is_identchar(p, e, enc)
Definition: ripper.c:10764
#define RSTRING_PTR(str)
#define NEW_MATCH2(n1, n2)
VALUE op_sym[tLAST_OP_ID]
Definition: ripper.c:15598
#define COND_PUSH(n)
Definition: ripper.c:405
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
#define tEQQ
Definition: ripper.c:254
#define YYTABLE_NINF
Definition: ripper.c:2128
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 match_op(node1, node2)
Definition: ripper.c:734
#define CMDARG_P()
Definition: ripper.c:413
#define dvar_defined(id)
Definition: ripper.c:804
#define NEW_POSTEXE(b)
#define NEW_STR(s)
VALUE var
Definition: tcltklib.c:5517
#define yyerrok
Definition: ripper.c:4447
#define NODE_EVSTR
#define YYEMPTY
Definition: ripper.c:4449
#define tok()
Definition: ripper.c:11259
#define xfree
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 reg_fragment_setenc(str, options)
Definition: ripper.c:744
static NODE * match_op_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:14068
#define NODE_CASE
void rb_raise(VALUE exc, const char *fmt,...)
Definition: error.c:1780
#define rb_warn4S(file, line, fmt, a)
Definition: ripper.c:927
#define rb_warnI(fmt, a)
Definition: ripper.c:925
#define T_HASH
return Qtrue
Definition: tcltklib.c:9610
static NODE * node_assign_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:14406
VALUE rb_enc_associate(VALUE obj, rb_encoding *enc)
Definition: encoding.c:764
static NODE * block_append_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:13834
#define YY_SYMBOL_PRINT(Title, Type, Value, Location)
Definition: ripper.c:4551
static NODE * newline_node(NODE *)
Definition: ripper.c:13801
#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 newtok()
Definition: ripper.c:10655
static NODE * range_op(struct parser_params *parser, NODE *node)
Definition: ripper.c:14767
#define reduce_nodes(n)
Definition: ripper.c:670
#define YYPOPSTACK(N)
Definition: ripper.c:5057
#define T_FILE
#define dyna_var(id)
Definition: ripper.c:802
int pre_args_num
Definition: ripper.y:509
#define NODE_HEREDOC
Definition: ripper.c:821
#define tASSOC
Definition: ripper.c:271
#define NEW_CONST(v)
int parser_toksiz
Definition: ripper.c:543
#define POINTER_P(val)
Definition: ripper.c:432
#define tSTRING_DVAR
Definition: ripper.c:292
#define STR_FUNC_INDENT
Definition: ripper.c:11155
int rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc)
Definition: encoding.c:884
#define tLAST_TOKEN
Definition: ripper.c:297
VALUE rb_ary_new3(long n,...)
Definition: array.c:432
#define keyword_nil
Definition: ripper.c:217
static void parser_pushback(struct parser_params *parser, int c)
Definition: ripper.c:11247
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
#define Qnone
Definition: ripper.c:916
#define RFLOAT(obj)
#define NODE_REDO
static int lvar_defined_gen(struct parser_params *, ID)
Definition: ripper.c:12150
#define NODE_NEXT
const char * alias
Definition: nkf.c:1151
#define keyword_class
Definition: ripper.c:186
#define ruby__end__seen
Definition: ripper.c:632
#define NEW_DVAR(v)
void(* rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val)
Definition: ripper.c:12222
#define keyword_next
Definition: ripper.c:205
r
Definition: bigdecimal.c:1196
#define ruby_debug_lines
Definition: ripper.c:641
#define parser_is_identchar()
Definition: ripper.c:10765
#define local_pop()
Definition: ripper.c:786
#define ID_LOCAL
#define ruby_sourcefile
Definition: compile.c:424
Definition: ripper.y:82
#define NODE_XSTR
#define tLPAREN_ARG
Definition: ripper.c:273
#define tMATCH
Definition: ripper.c:260
#define NEW_CVASGN(v, val)
static int parser_whole_match_p(struct parser_params *parser, const char *eos, long len, int indent)
Definition: ripper.c:11995
#define NODE_BLOCK_PASS
#define RE_OPTION_ENCODING(e)
Definition: ripper.c:814
#define rb_backref_error(n)
Definition: ripper.c:723
int state
Definition: tcltklib.c:1462
#define ISDIGIT(c)
#define NEW_BREAK(s)
unsigned int last
Definition: nkf.c:4310
#define NEW_OP_ASGN_OR(i, val)
static void parser_initialize(struct parser_params *parser)
Definition: ripper.c:16291
#define NEW_MASGN(l, r)
ID block_arg
Definition: ripper.y:515
#define ENCODING_IS_ASCII8BIT(obj)
static NODE * node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE)
Definition: ripper.c:13781
#define InitVM(ext)
static const yytype_uint16 yyr1[]
Definition: ripper.c:1715
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
static NODE * yycompile(struct parser_params *parser, const char *f, int line)
Definition: ripper.c:11009
struct RNode * node
Definition: ripper.y:244
static ID * vtable_tblcpy(ID *buf, const struct vtable *src)
Definition: ripper.c:15159
#define tLAMBEG
Definition: ripper.c:294
#define lex_gets_ptr
Definition: ripper.c:629
rb_encoding * rb_utf8_encoding(void)
Definition: encoding.c:1166
#define ID2SYM(x)
#define here_document(n)
Definition: ripper.c:10665
VALUE parser_lex_input
Definition: ripper.c:545
static long parser_encode_length(struct parser_params *parser, const char *name, long len)
Definition: ripper.c:12157
#define T_FLOAT
VALUE tbl
Definition: tkutil.c:1280
#define is_instance_id(id)
Definition: ripper.c:347
#define NEW_LVAR(v)
#define call_bin_op(recv, id, arg1)
Definition: ripper.c:694
VALUE VALUE args
Definition: tcltklib.c:2561
VALUE klass
Definition: ripper.y:701
#define arg_concat(h, t)
Definition: ripper.c:683
#define rb_enc_isdigit(c, enc)
#define T_OBJECT
static enum node_type nodetype(NODE *node)
Definition: ripper.c:13789
#define ENC_CODERANGE_BROKEN
VALUE rb_sym_all_symbols(void)
Definition: ripper.c:16100
#define tSTRING_CONTENT
Definition: ripper.c:244
static VALUE lex_getline(struct parser_params *parser)
Definition: ripper.c:11048
static NODE * ret_args_gen(struct parser_params *, NODE *)
Definition: ripper.c:14891
#define ID_INTERNAL
#define LONG2NUM(x)
VALUE rb_str_append(VALUE, VALUE)
Definition: string.c:2114
static const yytype_int16 yytable[]
Definition: ripper.c:2129
#define RUBY_DTRACE_PARSE_BEGIN(arg0, arg1)
Definition: probes.h:68
int pos
Definition: ripper.c:417
#define NEW_FOR(v, i, b)
#define tBACK_REF
Definition: ripper.c:247
#define YYLAST
Definition: ripper.c:1232
#define NEW_CLASS(n, b, s)
#define YYID(n)
Definition: ripper.c:1087
#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
static int yylex(void *, void *)
gz lineno
Definition: zlib.c:2268
#define NEW_ITER(a, b)
#define head
Definition: st.c:107
const char * fmt
Definition: tcltklib.c:841
#define ENCODING_GET(obj)
int parser_yydebug
Definition: ripper.c:564
#define gettable(id)
Definition: ripper.c:713
#define keyword_begin
Definition: ripper.c:190
st_table * id_str
Definition: ripper.c:15593
NODE * parser_eval_tree
Definition: ripper.c:569
#define list_append(l, i)
Definition: ripper.c:677
NODE * parser_deferred_nodes
Definition: ripper.c:553
static int simple_re_meta(int c)
Definition: ripper.c:11624
#define NEW_GVAR(v)
int yyi
Definition: ripper.c:4668
int yynerrs
Definition: ripper.c:5021
command_asgn lhs
Definition: ripper.y:1266
#define STR_NEW0()
Definition: ripper.c:592
Definition: ripper.y:240
static int e_option_supplied(struct parser_params *parser)
Definition: ripper.c:10943
static void block_dup_check_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:14318
Definition: parse.h:276
int has_shebang
Definition: ripper.c:559
nd_args
Definition: parse.y:1378
#define NEWHEAP()
Definition: ripper.c:16514
#define NEW_DSTR(s)
#define SPECIAL_PUNCT(idx)
Definition: ripper.c:11797
#define nd_set_type(n, t)
static int vtable_size(const struct vtable *tbl)
Definition: ripper.c:435
static int assign_in_cond(struct parser_params *parser, NODE *node)
Definition: ripper.c:14697
#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
void rb_exc_raise(VALUE mesg)
Definition: eval.c:527
#define NEW_UNLESS(c, t, e)
#define STR_FUNC_REGEXP
Definition: ripper.c:11152
#define NEW_MODULE(n, b)
static NODE * list_append_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:13888
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
static rb_encoding * must_be_ascii_compatible(VALUE s)
Definition: ripper.c:11018
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
static int parser_tokadd_string(struct parser_params *, int, int, int, long *, rb_encoding **)
Definition: ripper.c:11637
#define VTBL_DEBUG
Definition: ripper.c:445
VALUE hash
Definition: tkutil.c:267
int rb_is_method_name(VALUE name)
Definition: ripper.c:16273
#define arg_append(h, t)
Definition: ripper.c:681
#define assignable_result(x)
#define CMDARG_PUSH(n)
Definition: ripper.c:410
YYSTYPE yyval
Definition: ripper.c:5063
#define keyword_not
Definition: ripper.c:222
#define RE_OPTION_MASK
Definition: ripper.c:817
#define NEW_OP_ASGN_AND(i, val)
static NODE * arg_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:14355
rb_encoding * enc
Definition: ripper.c:562
#define parser_warning(node, mesg)
Definition: ripper.c:13824
#define tCMP
Definition: ripper.c:252
#define NODE_LVAR
static int parser_regx_options(struct parser_params *)
Definition: ripper.c:11565
enum lex_state_e parser_lex_state
Definition: ripper.c:529
#define whole_match_p(e, l, i)
Definition: ripper.c:10668
#define op_tbl_count
Definition: ripper.c:15584
#define NODE_LASGN
int capa
Definition: ripper.c:418
VALUE parser_lex_lastline
Definition: ripper.c:546
#define lex_nextline
Definition: ripper.c:622
#define YYTERROR
Definition: ripper.c:4483
#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 tRSHFT
Definition: ripper.c:267
#define set_yylval_literal(x)
Definition: ripper.c:10675
#define NEW_KW_ARG(i, v)
BDIGIT m
Definition: bigdecimal.c:5085
static int parser_yylex(struct parser_params *parser)
Definition: ripper.c:12484
static VALUE parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
Definition: ripper.c:11169
#define scan_hex(s, l, e)
Definition: util.h:54
static int dyna_in_block_gen(struct parser_params *)
Definition: ripper.c:15277
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
static const yytype_uint16 yystos[]
Definition: ripper.c:4337
#define tDOT2
Definition: ripper.c:262
int rb_char_to_option_kcode(int c, int *option, int *kcode)
Definition: re.c:301
static char * parser_tokspace(struct parser_params *parser, int n)
Definition: ripper.c:11280
#define arg_ambiguous()
Definition: ripper.c:12136
#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 evstr2dstr(n)
Definition: ripper.c:690
#define RARRAY_LEN(a)
static void parser_free(void *ptr)
Definition: ripper.c:16370
#define tCHAR
Definition: ripper.c:245
#define IS_ARG()
Definition: ripper.c:12463
#define PARSER_ARG
Definition: ripper.c:952
#define NODE_WHEN
#define Qnil
Definition: tcltklib.c:1896
#define StringValuePtr(v)
#define literal_concat(h, t)
Definition: ripper.c:685
#define val
Definition: tcltklib.c:1949
int rb_ispunct(int c)
Definition: encoding.c:1890
VALUE rb_eRuntimeError
Definition: error.c:510
#define compile_error
Definition: ripper.c:951
static int symbols_i(VALUE sym, ID value, VALUE ary)
Definition: ripper.c:16077
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
static int parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
Definition: ripper.c:11492
static int dvar_curr_gen(struct parser_params *, ID)
Definition: ripper.c:15314
VALUE rb_parser_encoding(VALUE vparser)
Definition: ripper.c:16473
union RNode::@81 u2
#define ifndef_ripper(x)
Definition: ripper.c:917
static const yytype_uint16 yyrline[]
Definition: ripper.c:1556
struct parser_params * parser
Definition: ripper.c:15376
#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 struct @60 op_tbl[]
#define cur_mid
Definition: ripper.c:614
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
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 const yytype_uint16 yyprhs[]
Definition: ripper.c:1294
int yyrule
Definition: ripper.c:4665
#define keyword_super
Definition: ripper.c:215
#define NODE_DASGN_CURR
static NODE * list_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:13908
int parser_paren_nest
Definition: ripper.c:533
VALUE rb_ary_new(void)
Definition: array.c:424
#define NODE_AND
int rb_ascii8bit_encindex(void)
Definition: encoding.c:1160
int flags
Definition: tcltklib.c:3023
unsigned long ID
Definition: ripper.y:105
static int is_global_name_punct(const char c)
Definition: ripper.c:11814
#define NEW_UNDEF(i)
#define ID_JUNK
#define keyword_if
Definition: ripper.c:194
#define is_attrset_id(id)
Definition: ripper.c:348
#define set_yylval_name(x)
Definition: ripper.c:10674
va_end(args)
void rb_gc_mark(VALUE)
Definition: gc.c:2598
#define ID_GLOBAL
#define tokline
Definition: ripper.c:619
static char * parser_newtok(struct parser_params *parser)
Definition: ripper.c:11264
YYSIZE_T yymsg_alloc
Definition: ripper.c:5034
static int vtable_included(const struct vtable *tbl, ID id)
Definition: ripper.c:487
#define block_dup_check(n1, n2)
Definition: ripper.c:672
#define tokadd(c)
Definition: ripper.c:10657
void rb_define_const(VALUE, const char *, VALUE)
Definition: variable.c:2197
static NODE * arg_append_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:14380
#define tLEQ
Definition: ripper.c:257
static void local_push_gen(struct parser_params *, int)
Definition: ripper.c:15129
RUBY_EXTERN int ffs(int)
Definition: ffs.c:6
#define NEW_WHEN(c, t, e)
top_stmt escape_Qundef($1)
static void const char * yymsg
Definition: ripper.c:4945
#define ISASCII(c)
Definition: ruby.h:1629
int yytoken
Definition: ripper.c:5029
#define tokenbuf
Definition: ripper.c:616
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
Definition: class.c:499
#define COND_POP()
Definition: ripper.c:406
#define heredoc_identifier()
Definition: ripper.c:10666
static VALUE VALUE obj
Definition: tcltklib.c:3158
#define RSTRING_LEN(str)
static void parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
Definition: ripper.c:12234
static struct st_hash_type symhash
Definition: ripper.c:15601
#define INT2FIX(i)
struct vtable * vars
Definition: parse.h:282
int idx
Definition: tcltklib.c:9716
#define new_const_op_assign(lhs, op, rhs)
Definition: ripper.c:731
VALUE value
Definition: ripper.y:246
#define tSYMBEG
Definition: ripper.c:282
static void parser_tokadd(struct parser_params *parser, int c)
Definition: ripper.c:11292
#define FIX2LONG(x)
#define k__END__
Definition: eventids2.c:9
static void parser_mark(void *ptr)
Definition: ripper.c:16344
#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
#define T_STRING
#define lex_goto_eol(parser)
Definition: ripper.c:11185
#define MBCLEN_CHARFOUND_P(ret)
#define keyword_defined
Definition: ripper.c:229
static double one(void)
Definition: isinf.c:52
int yyn
Definition: ripper.c:5024
unsigned char OnigUChar
Definition: ripper.y:114
#define NODE_ARGSCAT
#define local_id(id)
Definition: ripper.c:792
#define NODE_COLON2
NODE * rb_parser_append_print(VALUE vparser, NODE *node)
Definition: ripper.c:15485
#define nd_set_line(n, l)
YYSTYPE * yyvs
Definition: ripper.c:5052
#define xmalloc
#define xrealloc
static void ripper_init_eventids1(void)
Definition: eventids1.c:134
static void vtable_add(struct vtable *tbl, ID id)
Definition: ripper.c:472
#define tSTRING_DBEG
Definition: ripper.c:290
#define YYFINAL
Definition: ripper.c:1230
#define dvar_curr(id)
Definition: ripper.c:807
static NODE * parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
Definition: ripper.c:11071
#define keyword_undef
Definition: ripper.c:189
#define flush_string_content(enc)
Definition: ripper.c:11789
#define NEW_ARGS_AUX(r, b)
#define TypedData_Wrap_Struct(klass, data_type, sval)
#define RSTRING_NOEMBED
static VALUE coverage(const char *f, int n)
Definition: ripper.c:10926
#define tokadd_string(f, t, p, n, e)
Definition: ripper.c:10662
static NODE * new_yield_gen(struct parser_params *, NODE *)
Definition: ripper.c:14908
#define ripper_flush(p)
Definition: ripper.c:10694
static VALUE lex_get_str(struct parser_params *parser, VALUE s)
Definition: ripper.c:11028
#define ISUPPER(c)
Definition: ruby.h:1633
#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
static int rb_str_symname_type(VALUE name)
Definition: ripper.c:15810
VALUE rb_enc_associate_index(VALUE obj, int idx)
Definition: encoding.c:746
int rb_parse_in_main(void)
Definition: compile.c:5882
static int parser_nextc(struct parser_params *parser)
Definition: ripper.c:11191
int err
Definition: win32.c:87
#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 ID formal_argument_gen(struct parser_params *, ID)
Definition: ripper.c:12139
static void void_expr_gen(struct parser_params *, NODE *)
Definition: ripper.c:14499
#define DBL2NUM(dbl)
#define YYEOF
Definition: ripper.c:4450
#define ALLOCA_N(type, n)
static NODE * dsym_node_gen(struct parser_params *, NODE *)
Definition: ripper.c:15002
#define ENC_CODERANGE_UNKNOWN
void rb_gc_mark_symbols(void)
Definition: ripper.c:15653
long cnt
Definition: ripper.y:262
ID token
Definition: ripper.c:15558
static int VALUE key
Definition: tkutil.c:265
static ID intern_str(VALUE str)
Definition: ripper.c:15878
#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
token_info * parser_token_info
Definition: ripper.c:575
static void magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
Definition: ripper.c:12225
int column
Definition: ripper.c:506
#define IS_lex_state(ls)
Definition: ripper.c:392
#define tREGEXP_BEG
Definition: ripper.c:285
#define END(no)
Definition: re.c:26
#define EOF
Definition: vsnprintf.c:207
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
#define peek_n(c, n)
Definition: ripper.c:11188
#define DEF_EXPR(n)
Definition: ripper.c:375
#define tHEREDOC_END
Definition: eventids2.c:8
#define STR_NEW(p, n)
Definition: ripper.c:591
#define rb_long2int(n)
#define ID_CLASS
static int parser_peek_variable_name(struct parser_params *parser)
Definition: ripper.c:11821
#define tokcopy(n)
Definition: ripper.c:11315
#define STR_FUNC_SYMBOL
Definition: ripper.c:11154
#define NEW_LASGN(v, val)
node_type
Definition: ripper.y:23
static VALUE yycompile0(VALUE arg)
Definition: ripper.c:10949
#define mixed_escape(beg, enc1, enc2)
VALUE rb_obj_as_string(VALUE)
Definition: string.c:895
#define set_yylval_num(x)
Definition: ripper.c:10672
static ID register_symid_str(ID, VALUE)
Definition: ripper.c:15827
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)
#define STR_FUNC_QWORDS
Definition: ripper.c:11153
#define dyna_push()
Definition: ripper.c:797
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
static void dispose_string(VALUE str)
Definition: ripper.c:11601
VALUE rb_str_resize(VALUE, long)
Definition: string.c:1846
#define is_notop_id(id)
Definition: ripper.c:344
static NODE * aryset_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:14310
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 NEW_SCLASS(r, b)
#define tWORDS_BEG
Definition: ripper.c:286
#define RUBY_DTRACE_PARSE_END_ENABLED()
Definition: probes.h:71
#define tSTAR
Definition: ripper.c:278
static ID shadowing_lvar_gen(struct parser_params *, ID)
Definition: ripper.c:14272
#define CMDARG_LEXPOP()
Definition: ripper.c:412
ID rest_arg
Definition: ripper.y:514
#define local_push(top)
Definition: ripper.c:784
int errno
#define TRUE
Definition: nkf.h:175
int rb_symname_p(const char *name)
Definition: ripper.c:15697
#define new_attr_op_assign(lhs, type, attr, op, rhs)
Definition: ripper.c:729
q result
Definition: tcltklib.c:7070
#define NODE_NIL
VALUE rb_thread_current(void)
Definition: thread.c:2350
#define modifier_until
Definition: ripper.c:226
#define paren_nest
Definition: ripper.c:608
#define NODE_ATTRASGN
#define token_info_pop(token)
Definition: ripper.c:968
static void dyna_pop_gen(struct parser_params *, const struct vtable *)
Definition: ripper.c:15263
VALUE rb_range_new(VALUE, VALUE, int)
Definition: range.c:67
static NODE * new_evstr_gen(struct parser_params *, NODE *)
Definition: ripper.c:14039
VALUE rb_sprintf(const char *format,...)
Definition: sprintf.c:1270
volatile VALUE value
Definition: tcltklib.c:9442
#define NODE_COLON3
#define StringValue(v)
#define NODE_DEFINED
#define rb_enc_mbcput(c, buf, enc)
#define IS_lex_state_for(x, ls)
Definition: ripper.c:391
#define tokadd_mbchar(c)
Definition: ripper.c:11621
static void reg_fragment_setenc_gen(struct parser_params *, VALUE, int)
Definition: ripper.c:15322
static void yytype_int16 * bottom
Definition: ripper.c:4636
#define rb_node_newnode(type, a1, a2, a3)
Definition: ripper.c:651
#define YYMAXDEPTH
Definition: ripper.c:4717
goto yynewstate
Definition: ripper.c:5232
static void set_file_encoding(struct parser_params *parser, const char *str, const char *send)
Definition: ripper.c:12396
#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 NEW_VALIAS(n, o)
#define RE_OPTION_ONCE
Definition: ripper.c:812
int rb_enc_symname_p(const char *name, rb_encoding *enc)
Definition: ripper.c:15703
#define NEW_POSTARG(i, v)
#define CONST_ID(var, str)
#define tokidx
Definition: ripper.c:617
#define NEW_ERRINFO()
#define malloc
Definition: ripper.c:332
void Init_sym(void)
Definition: ripper.c:15634
#define NODE_CONST
static int parser_parse_string(struct parser_params *, NODE *)
Definition: ripper.c:11857
#define nd_term(node)
Definition: ripper.c:827
#define STR_FUNC_EXPAND
Definition: ripper.c:11151
VP_EXPORT void
Definition: bigdecimal.c:5083
#define rb_warningS(fmt, a)
Definition: ripper.c:929
static NODE * new_args_tail_gen(struct parser_params *, NODE *, ID, ID)
Definition: ripper.c:14977
static int dvar_defined_gen(struct parser_params *, ID, int)
Definition: ripper.c:15283
#define keyword_false
Definition: ripper.c:219
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
#define is_global_id(id)
Definition: ripper.c:346
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 int local_id_gen(struct parser_params *, ID)
Definition: ripper.c:15206
#define YYSIZE_T
Definition: ripper.c:1060
#define NEW_COLON2(c, i)
#define ESCAPE_META
Definition: ripper.c:11391
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
VALUE rb_assoc_new(VALUE car, VALUE cdr)
Definition: array.c:545
static void Init_id(void)
Definition: ripper.y:15
long parser_lex_gets_ptr
Definition: ripper.c:554
#define no_digits()
goto yyreturn
Definition: ripper.c:10593
#define NODE_GVAR
#define NODE_CDECL
rb_encoding * rb_usascii_encoding(void)
Definition: encoding.c:1181
#define NEW_HASH(a)
static void rb_backref_error_gen(struct parser_params *, NODE *)
Definition: ripper.c:14342
unsigned char yytype_uint8
Definition: ripper.c:1026
#define keyword_until
Definition: ripper.c:202
union RNode::@82 u3
static const yytype_int16 yyrhs[]
Definition: ripper.c:1361
static void arg_ambiguous_gen(struct parser_params *parser)
Definition: ripper.c:12128
#define heredoc_restore(n)
Definition: ripper.c:10667
static void parser_prepare(struct parser_params *parser)
Definition: ripper.c:12439
static NODE * cond_gen(struct parser_params *, NODE *)
Definition: ripper.c:14861
#define RB_GC_GUARD(v)
#define lex_lastline
Definition: ripper.c:621
#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 NEW_UNTIL(c, b, n)
static const char *const yytname[]
Definition: ripper.c:1626
#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
int argc
Definition: tcltklib.c:1970
VALUE rb_str_buf_new(long)
Definition: string.c:777
stack_type parser_cond_stack
Definition: ripper.c:530
NODE * post_init
Definition: ripper.y:507
static void FILE * yyoutput
Definition: ripper.c:4575
#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
static void dyna_pop_1(struct parser_params *parser)
Definition: ripper.c:15245
static int parser_read_escape(struct parser_params *parser, int flags, rb_encoding **encp)
Definition: ripper.c:11394
int parser_heredoc_end
Definition: ripper.c:551
#define ruby_sourceline
Definition: ripper.c:633
static int parser_heredoc_identifier(struct parser_params *parser)
Definition: ripper.c:11915
ID rb_id_attrset(ID id)
Definition: ripper.c:14326
static int value_expr_gen(struct parser_params *, NODE *)
Definition: ripper.c:14437
Definition: ripper.y:72
int post_args_num
Definition: ripper.y:510
#define lex_pend
Definition: ripper.c:625
int rb_is_global_id(ID id)
Definition: ripper.c:16121
static int reg_fragment_check_gen(struct parser_params *, VALUE, int)
Definition: ripper.c:15361
static const yytype_int16 yycheck[]
Definition: ripper.c:3232
#define NEW_SELF()
#define YYUSE(e)
Definition: ripper.c:1080
#define tQSYMBOLS_BEG
Definition: ripper.c:289
VALUE rb_attr_get(VALUE, ID)
Definition: variable.c:1117
#define lvtbl
Definition: ripper.c:631
#define lex_strterm
Definition: ripper.c:603
#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
#define NEW_RESBODY(a, ex, n)
static NODE * new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs)
Definition: ripper.c:15058
#define NEW_RETURN(s)
#define NODE_ARGSPUSH
#define NODE_BACK_REF
#define set_yylval_str(x)
Definition: ripper.c:10671
#define NODE_MATCH
#define cond_stack
Definition: ripper.c:605
short int yytype_int8
Definition: ripper.c:1035
VALUE rb_reg_check_preprocess(VALUE)
Definition: re.c:2304
static NODE * assignable_gen(struct parser_params *, ID, NODE *)
#define tOROP
Definition: ripper.c:259
VALUE flags
Definition: ripper.y:241
expr ripper_intern("and")
static int is_static_content(NODE *node)
Definition: ripper.c:14673
#define tIVAR
Definition: ripper.c:238
const char * token
Definition: ripper.c:504
ruby_verbose
Definition: tcltklib.c:5818
RUBY_EXTERN VALUE rb_cString
Definition: ripper.y:1456
Real * b
Definition: bigdecimal.c:1182
#define NEW_COLON3(i)
#define RUBY_DTRACE_PARSE_BEGIN_ENABLED()
Definition: probes.h:67
#define NEW_CASE(h, b)
static const yytype_int16 yypgoto[]
Definition: ripper.c:2100
static int arg_var_gen(struct parser_params *, ID)
Definition: ripper.c:15189
return ptr
Definition: tcltklib.c:784
#define free(x)
Definition: dln.c:50
VpDivd * c
Definition: bigdecimal.c:1205
goto yyerrlab1
Definition: ripper.c:10520
#define is_local_id(id)
Definition: ripper.c:345
#define NODE_DASGN
int parser_in_defined
Definition: ripper.c:540
volatile VALUE msg
Definition: tcltklib.c:3100
static int literal_concat0(struct parser_params *, VALUE, VALUE)
Definition: ripper.c:13932
static ID * local_tbl_gen(struct parser_params *)
Definition: ripper.c:15174
#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
#define brace_nest
Definition: ripper.c:610
#define reg_named_capture_assign(regexp, match)
Definition: ripper.c:748
#define MEMCPY(p1, p2, type, n)
#define tFID
Definition: ripper.c:236
static int parser_yyerror(struct parser_params *, const char *)
Definition: ripper.c:10844
gz end
Definition: zlib.c:2270
goto yydefault
Definition: ripper.c:5178
#define NEW_IF(c, t, e)
#define HEAPCNT(n, size)
Definition: ripper.c:16513
nd_iter
Definition: parse.y:1388
#define NEW_GASGN(v, val)
static void warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
Definition: ripper.c:14730
#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
#define is_asgn_or_id(id)
Definition: ripper.c:354
static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
Definition: ripper.c:11485
static NODE * attrset_gen(struct parser_params *, NODE *, ID)
Definition: ripper.c:14334
int rb_is_local_name(VALUE name)
Definition: ripper.c:16267
arg
Definition: ripper.y:1312
static struct vtable * dyna_push_gen(struct parser_params *)
Definition: ripper.c:15234
VALUE src
Definition: tcltklib.c:7953
yy_symbol_value_print(yyoutput, yytype, yyvaluep, parser)
static VALUE reg_compile_gen(struct parser_params *, VALUE, int)
Definition: ripper.c:15456
VALUE rb_str_cat(VALUE, const char *, long)
Definition: string.c:1956
#define NEW_XSTR(s)
#define ESCAPE_CONTROL
Definition: ripper.c:11390
#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)
#define NEW_DEFS(r, i, a, d)
#define parser_isascii()
Definition: ripper.c:10767
#define END_OF_INPUT
Definition: ripper.c:185
void rb_gc_mark_parser(void)
Definition: ripper.c:15480
static const yytype_uint8 yytranslate[]
Definition: ripper.c:1251
int nonspc
Definition: ripper.c:507
int size
Definition: encoding.c:52
#define ADD2HEAP(n, c, p)
Definition: ripper.c:16515
#define tokspace(n)
Definition: ripper.c:10656
#define f
#define in_def
Definition: ripper.c:612
static int is_private_local_id(ID name)
Definition: ripper.c:14259
#define SYMBOL_P(x)
#define tIDENTIFIER
Definition: ripper.c:235
#define is_const_id(id)
Definition: ripper.c:349
char yymsgbuf[128]
Definition: ripper.c:5032
#define keyword_then
Definition: ripper.c:196
static int rb_enc_symname_type(const char *name, long len, rb_encoding *enc)
Definition: ripper.c:15709
yytokentype
Definition: ripper.c:68
static void no_blockarg(struct parser_params *parser, NODE *node)
Definition: ripper.c:14883
static void local_pop_gen(struct parser_params *)
Definition: ripper.c:15144
#define NODE_FLIP3
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
#define read_escape(flags, e)
Definition: ripper.c:10659
#define NODE_DVAR
#define tok_hex(numlen)
Definition: ripper.c:10658
static NODE * literal_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:13949
static struct magic_comment magic_comments[]
Definition: ripper.c:12261
#define new_evstr(n)
Definition: ripper.c:688
#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
VALUE coverage
Definition: ripper.c:571
command_call
Definition: ripper.y:1304
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 tokfix()
Definition: ripper.c:11258
#define tAREF
Definition: ripper.c:264
#define rb_enc_isspace(c, enc)
#define internal_id()
Definition: ripper.c:794
NODE * parser_lex_strterm
Definition: ripper.c:528
const char * name
Definition: ripper.c:12256
top_stmt bodystmt
Definition: ripper.y:921
#define COND_LEXPOP()
Definition: ripper.c:407
#define lex_p
Definition: ripper.c:624
#define NEW_IVAR(v)
top_stmts dispatch0(stmts_new)
#define tSP
Definition: eventids2.c:6
#define NEW_ATTRASGN(r, m, a)
#define tGVAR
Definition: ripper.c:237
#define NODE_ZARRAY
static int token_info_get_column(struct parser_params *parser, const char *token)
Definition: ripper.c:10771
#define node_assign(node1, node2)
Definition: ripper.c:725
static void void_stmts_gen(struct parser_params *, NODE *)
Definition: ripper.c:14588
const char * yys
Definition: ripper.c:4765
#define void_expr(node)
Definition: ripper.c:666
static int local_var_gen(struct parser_params *, ID)
Definition: ripper.c:15196
#define pushback(c)
Definition: ripper.c:10654
#define tDOT3
Definition: ripper.c:263
#define void_expr0(node)
Definition: ripper.c:665
#define NEW_BEGIN(b)
NODE * pre_init
Definition: ripper.y:506
#define NEW_FCALL(m, a)
#define NODE_CVAR
#define lex_pbeg
Definition: ripper.c:623
#define regx_options()
Definition: ripper.c:10661
#define NEW_SCOPE(a, b)
#define numberof(array)
Definition: ripper.c:326
static int token_info_has_nonspaces(struct parser_params *parser, const char *token)
Definition: ripper.c:10785
st_index_t rb_str_hash(VALUE)
Definition: string.c:2237
#define NEW_OP_ASGN2(r, i, o, val)
#define YYSTACK_ALLOC_MAXIMUM
Definition: ripper.c:1145
#define tLABEL
Definition: ripper.c:241
#define NODE_BREAK
#define TOK_INTERN(mb)
Definition: ripper.c:596
static const rb_data_type_t parser_data_type
Definition: ripper.c:11068
rb_magic_comment_setter_t func
Definition: ripper.c:12257
int parser_lpar_beg
Definition: ripper.c:534
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
#define ALLOC_N(type, n)
#define yylval
Definition: ripper.c:10644
#define LONG2FIX(i)
#define NODE_FL_NEWLINE
#define RBASIC(obj)
struct local_vars * prev
Definition: ripper.c:426
static const yytype_uint16 yydefact[]
Definition: ripper.c:1851
#define NEW_VCALL(m)
#define keyword_while
Definition: ripper.c:201
static NODE * new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
Definition: ripper.c:15029
#define parser_encoding_name()
Definition: ripper.c:10761
#define tokadd_escape(e)
Definition: ripper.c:10660
struct vtable * vars
Definition: ripper.c:424
static const yytype_int16 yypact[]
Definition: ripper.c:1989
static VALUE lex_io_gets(struct parser_params *parser, VALUE io)
Definition: ripper.c:11118
#define new_yield(node)
Definition: ripper.c:708
#define lvar_defined(id)
Definition: ripper.c:810
klass
Definition: tcltklib.c:3504
#define INT2NUM(x)
goto yybackup
Definition: ripper.c:5165
#define NODE_DSTR
struct rb_encoding_entry * list
Definition: encoding.c:50
#define lpar_beg
Definition: ripper.c:609
#define YYTRANSLATE(YYX)
Definition: ripper.c:1247
#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
#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 keyword_BEGIN
Definition: ripper.c:230
#define yyerror(msg)
Definition: ripper.c:599
#define is_junk_id(id)
Definition: ripper.c:351
static void new_bv_gen(struct parser_params *, ID)
Definition: ripper.c:14296
#define ruby_coverage
Definition: ripper.c:642
int linenum
Definition: ripper.c:505
#define NEW_CVAR(v)
static NODE * negate_lit(NODE *)
Definition: ripper.c:14916
#define keyword_for
Definition: ripper.c:203
#define tEMBDOC
Definition: eventids2.c:4
#define NODE_BEGIN
gz io
Definition: zlib.c:2261
#define id_type(id)
Definition: ripper.c:352
static void fixup_nodes(NODE **)
Definition: ripper.c:14736
#define DVARS_INHERIT
Definition: ripper.c:429
#define STR_NEW3(p, n, e, func)
Definition: ripper.c:594
char * parser_tokenbuf
Definition: ripper.c:541
VALUE rb_cArray
Definition: array.c:29
static const char * magic_comment_marker(const char *str, long len)
Definition: ripper.c:12269
#define BEG(no)
Definition: re.c:25
#define keyword_do
Definition: ripper.c:209
#define NEW_OP_ASGN1(p, id, a)
static int parser_magic_comment(struct parser_params *parser, const char *str, long len)
Definition: ripper.c:12302
int parser_tokline
Definition: ripper.c:544
Definition: ripper.y:79
#define IS_LABEL_POSSIBLE()
Definition: ripper.c:12467
VALUE rb_ary_new2(long capa)
Definition: array.c:417
VALUE rb_str_new(const char *, long)
Definition: string.c:425
union RNode::@80 u1
const char * parser_lex_pbeg
Definition: ripper.c:548
int rb_is_class_id(ID id)
Definition: ripper.c:16115
#define DVARS_TOPSCOPE
Definition: ripper.c:430
#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
#define NODE_CVASGN
Definition: ripper.c:415
static void parser_set_encode(struct parser_params *parser, const char *name)
Definition: ripper.c:12177
#define call_uni_op(recv, id)
Definition: ripper.c:696
#define NEW_CDECL(v, val, path)
static int literal_node(NODE *node)
Definition: ripper.c:14783
#define set_yylval_node(x)
Definition: ripper.c:10676
static void YYSTYPE * yyvsp
Definition: ripper.c:4664
#define YYSTACK_BYTES(N)
Definition: ripper.c:1189
#define IS_BEG()
Definition: ripper.c:12465
const char * parser_lex_p
Definition: ripper.c:549
#define nd_lit
static int parser_tok_hex(struct parser_params *parser, size_t *numlen)
Definition: ripper.c:11302
#define keyword_else
Definition: ripper.c:198
#define RE_OPTION_ENCODING_NONE(o)
Definition: ripper.c:816
#define rb_enc_asciicompat(enc)
lex_state_e
Definition: ripper.c:374
#define NUM2INT(x)
#define tASET
Definition: ripper.c:265
#define dvar_defined_get(id)
Definition: ripper.c:805
#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 NODE_CALL
#define ruby_eval_tree_begin
Definition: ripper.c:640
#define rb_errinfo()
Definition: tcltklib.c:89
#define tNEQ
Definition: ripper.c:255
#define formal_argument(id)
Definition: ripper.c:777
#define tLPAREN
Definition: ripper.c:272
#define rb_enc_isupper(c, enc)
int cnt
Definition: tcltklib.c:6149
#define keyword__LINE__
Definition: ripper.c:232
#define modifier_unless
Definition: ripper.c:224
static int nodeline(NODE *node)
Definition: ripper.c:13795
#define dispatch_heredoc_end()
Definition: ripper.c:12021
YYSTYPE * parser_yylval
Definition: ripper.c:525
#define ruby_eval_tree
Definition: ripper.c:639
#define toklast()
Definition: ripper.c:11261
#define lex_gets
Definition: ripper.c:630
#define toklen()
Definition: ripper.c:11260
static const yytype_uint8 yyr2[]
Definition: ripper.c:1782
#define xcalloc
BDIGIT e
Definition: bigdecimal.c:5085
#define cmdarg_stack
Definition: ripper.c:606
yychar
Definition: ripper.c:5075
#define in_single
Definition: ripper.c:611
#define YY_STACK_PRINT(Bottom, Top)
Definition: ripper.c:4646
#define NEW_LIT(l)
#define rb_enc_isascii(c, enc)
int rb_str_hash_cmp(VALUE, VALUE)
Definition: string.c:2247
#define YYFPRINTF
Definition: ripper.c:4542
#define keyword_module
Definition: ripper.c:187
VALUE opts
Definition: tcltklib.c:6146
int is_ripper
Definition: ripper.c:522
unsigned long VALUE
Definition: ripper.y:104
#define YYSTACK_RELOCATE(Stack)
Definition: ripper.c:1216
static NODE * cond0(struct parser_params *, NODE *)
Definition: ripper.c:14804
options
Definition: tcltklib.c:4481
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 peek(c)
Definition: ripper.c:11187
#define RREGEXP(obj)
int rb_enc_find_index(const char *name)
Definition: encoding.c:633
static NODE * splat_array(NODE *)
Definition: ripper.c:14398
static struct vtable * vtable_alloc(struct vtable *prev)
Definition: ripper.c:448
VALUE eofp
Definition: ripper.c:526
RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e-0x20+31)/32]
Definition: ripper.c:11792
goto yyreduce
Definition: ripper.c:5242
#define YYSIZE_MAXIMUM
Definition: ripper.c:1064
NODE * heap
Definition: ripper.c:523
#define RSTRING_GETMEM(str, ptrvar, lenvar)
#define keyword_and
Definition: ripper.c:220
ID rb_intern3(const char *name, long len, rb_encoding *enc)
Definition: ripper.c:15856
#define attrset(node, id)
Definition: ripper.c:720
#define NODE_DOT2
encp
Definition: crypt.c:564
#define keyword_retry
Definition: ripper.c:207
#define COND_P()
Definition: ripper.c:408
#define ID_SCOPE_MASK
#define mixed_error(enc1, enc2)
static ID register_symid(ID, const char *, long, rb_encoding *)
Definition: ripper.c:15820
#define NODE_DREGX
#define NODE_IASGN
#define NEW_DEFN(i, a, d, p)
#define tCOLON2
Definition: ripper.c:268
#define NODE_RETURN
#define snprintf
ID first_post_arg
Definition: ripper.y:512
#define YYPACT_NINF
Definition: ripper.c:1988
void * rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
Definition: ripper.c:16539
#define NEW_REDO()
#define shadowing_lvar(name)
Definition: ripper.c:779
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
#define tLSHFT
Definition: ripper.c:266
#define NODE_ARRAY
#define NODE_SPLAT
#define get_value(val)
Definition: ripper.c:751
#define tUMINUS_NUM
Definition: ripper.c:296
#define tUMINUS
Definition: ripper.c:250
#define rb_intern(str)
#define reg_fragment_check(str, options)
Definition: ripper.c:746
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
#define compile_for_eval
Definition: ripper.c:613
int rb_memcicmp(const void *, const void *, long)
Definition: re.c:80
#define tCOMMENT
Definition: eventids2.c:2
#define NEW_ZSUPER()
#define set_yylval_id(x)
Definition: ripper.c:10673
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
static int is_special_global_name(const char *m, const char *e, rb_encoding *enc)
Definition: ripper.c:15671
#define is_class_id(id)
Definition: ripper.c:350
#define LVAR_USED
Definition: ripper.c:14269
#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 rb_enc_isalpha(c, enc)
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 REALLOC_N(var, type, n)
#define NODE_SCOPE
#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
#define rb_warn0(fmt)
Definition: ripper.c:924
int rb_local_defined(ID id)
Definition: compile.c:5857
st_index_t num_entries
Definition: ripper.y:93
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
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
#define new_bv(id)
Definition: ripper.c:781
static void warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
Definition: ripper.c:14724
#define NODE_IASGN2
#define ULONG2NUM(x)
#define NODE_SELF
goto yyerrlab
Definition: ripper.c:5241
#define block_append(h, t)
Definition: ripper.c:675
#define SYM2ID(x)
#define ID_CONST
VALUE rb_eArgError
Definition: error.c:512
static void vtable_free(struct vtable *tbl)
Definition: ripper.c:460
#define tSTRING_BEG
Definition: ripper.c:283
#define NEW_ARRAY(a)
void rb_str_free(VALUE)
Definition: string.c:830
#define RTYPEDDATA_TYPE(v)
#define keyword_case
Definition: ripper.c:199
unsigned long ruby_scan_oct(const char *, size_t, size_t *)
Definition: util.c:28
#define NODE_VALUES
#define heredoc_end
Definition: ripper.c:626
#define ID_ATTRSET
struct vtable * args
Definition: ripper.c:423
#define tokaddmbc(c, enc)
Definition: ripper.c:10664
#define tLAMBDA
Definition: ripper.c:281
#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_NEW2(p)
Definition: ripper.c:593
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 YYINITDEPTH
Definition: ripper.c:4706
static int sym_check_asciionly(VALUE str)
Definition: ripper.c:15836
rb_encoding * rb_enc_from_index(int index)
Definition: encoding.c:548
#define aryset(node1, node2)
Definition: ripper.c:718
static NODE * reg_named_capture_assign_gen(struct parser_params *parser, VALUE regexp, NODE *match)
Definition: ripper.c:15424
#define IS_AFTER_OPERATOR()
Definition: ripper.c:12469
#define NEW_BLOCK_PASS(b)
NODE * opt_args
Definition: ripper.y:520
static NODE * new_args_gen(struct parser_params *, NODE *, NODE *, ID, NODE *, NODE *)
Definition: ripper.c:14955
int rb_is_global_name(VALUE name)
Definition: ripper.c:16249
static int parser_tokadd_mbchar(struct parser_params *parser, int c)
Definition: ripper.c:11608
size_t len
Definition: tcltklib.c:3568