Ruby  2.4.2p198(2017-09-14revision59899)
ripper.c
Go to the documentation of this file.
1 /* A Bison parser, made by GNU Bison 2.5. */
2 
3 /* Bison implementation for Yacc-like parsers in C
4 
5  Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
6 
7  This program is free software: you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation, either version 3 of the License, or
10  (at your option) any later version.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 
20 /* As a special exception, you may create a larger work that contains
21  part or all of the Bison parser skeleton and distribute that work
22  under terms of your choice, so long as that work isn't itself a
23  parser generator using the skeleton or a modified version thereof
24  as a parser skeleton. Alternatively, if you modify or redistribute
25  the parser skeleton itself, you may (at your option) remove this
26  special exception, which will cause the skeleton and the resulting
27  Bison output files to be licensed under the GNU General Public
28  License without this special exception.
29 
30  This special exception was added by the Free Software Foundation in
31  version 2.2 of Bison. */
32 
33 /* C LALR(1) parser skeleton written by Richard Stallman, by
34  simplifying the original so-called "semantic" parser. */
35 
36 /* All symbols defined below should begin with yy or YY, to avoid
37  infringing on user name space. This should be done even for local
38  variables, as they might otherwise be expanded by user macros.
39  There are some unavoidable exceptions within include files to
40  define necessary library symbols; they are noted "INFRINGES ON
41  USER NAME SPACE" below. */
42 
43 /* Identify Bison output. */
44 #define YYBISON 1
45 
46 /* Bison version. */
47 #define YYBISON_VERSION "2.5"
48 
49 /* Skeleton name. */
50 #define YYSKELETON_NAME "yacc.c"
51 
52 /* Pure parsers. */
53 #define YYPURE 1
54 
55 /* Push parsers. */
56 #define YYPUSH 0
57 
58 /* Pull parsers. */
59 #define YYPULL 1
60 
61 /* Using locations. */
62 #define YYLSP_NEEDED 0
63 
64 
65 
66 /* Copy the first part of user declarations. */
67 
68 /* Line 268 of yacc.c */
69 #line 12 "ripper.y"
70 
71 
72 #if !YYPURE
73 # error needs pure parser
74 #endif
75 #ifndef PARSER_DEBUG
76 #define PARSER_DEBUG 0
77 #endif
78 #define YYDEBUG 1
79 #define YYERROR_VERBOSE 1
80 #define YYSTACK_USE_ALLOCA 0
81 
82 #include "ruby/ruby.h"
83 #include "ruby/st.h"
84 #include "ruby/encoding.h"
85 #include "internal.h"
86 #include "node.h"
87 #include "parse.h"
88 #include "symbol.h"
89 #include "regenc.h"
90 #include <stdio.h>
91 #include <errno.h>
92 #include <ctype.h>
93 #include "probes.h"
94 
95 #ifndef WARN_PAST_SCOPE
96 # define WARN_PAST_SCOPE 0
97 #endif
98 
99 #define TAB_WIDTH 8
100 
101 #define YYMALLOC(size) rb_parser_malloc(parser, (size))
102 #define YYREALLOC(ptr, size) rb_parser_realloc(parser, (ptr), (size))
103 #define YYCALLOC(nelem, size) rb_parser_calloc(parser, (nelem), (size))
104 #define YYFREE(ptr) rb_parser_free(parser, (ptr))
105 #define YYFPRINTF rb_parser_printf
106 #if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
107 # define YY_LOCATION_PRINT(File, Loc) \
108  rb_parser_printf(parser, "%d.%d-%d.%d", \
109  (Loc).first_line, (Loc).first_column, \
110  (Loc).last_line, (Loc).last_column)
111 #endif
112 #undef malloc
113 #undef realloc
114 #undef calloc
115 #undef free
116 #define malloc YYMALLOC
117 #define realloc YYREALLOC
118 #define calloc YYCALLOC
119 #define free YYFREE
120 
122  EXPR_BEG_bit, /* ignore newline, +/- is a sign. */
123  EXPR_END_bit, /* newline significant, +/- is an operator. */
124  EXPR_ENDARG_bit, /* ditto, and unbound braces. */
125  EXPR_ENDFN_bit, /* ditto, and unbound braces. */
126  EXPR_ARG_bit, /* newline significant, +/- is an operator. */
127  EXPR_CMDARG_bit, /* newline significant, +/- is an operator. */
128  EXPR_MID_bit, /* newline significant, +/- is an operator. */
129  EXPR_FNAME_bit, /* ignore newline, no reserved words. */
130  EXPR_DOT_bit, /* right after `.' or `::', no reserved words. */
131  EXPR_CLASS_bit, /* immediate after `class', no here document. */
132  EXPR_LABEL_bit, /* flag bit, label is allowed. */
133  EXPR_LABELED_bit, /* flag bit, just after a label. */
134  EXPR_FITEM_bit, /* symbol literal as FNAME. */
136 };
137 /* examine combinations */
139 #define DEF_EXPR(n) EXPR_##n = (1 << EXPR_##n##_bit)
141  DEF_EXPR(END),
142  DEF_EXPR(ENDARG),
143  DEF_EXPR(ENDFN),
144  DEF_EXPR(ARG),
145  DEF_EXPR(CMDARG),
146  DEF_EXPR(MID),
147  DEF_EXPR(FNAME),
148  DEF_EXPR(DOT),
149  DEF_EXPR(CLASS),
150  DEF_EXPR(LABEL),
151  DEF_EXPR(LABELED),
152  DEF_EXPR(FITEM),
153  EXPR_VALUE = EXPR_BEG,
154  EXPR_BEG_ANY = (EXPR_BEG | EXPR_MID | EXPR_CLASS),
155  EXPR_ARG_ANY = (EXPR_ARG | EXPR_CMDARG),
156  EXPR_END_ANY = (EXPR_END | EXPR_ENDARG | EXPR_ENDFN)
157 };
158 #define IS_lex_state_for(x, ls) ((x) & (ls))
159 #define IS_lex_state_all_for(x, ls) (((x) & (ls)) == (ls))
160 #define IS_lex_state(ls) IS_lex_state_for(lex_state, (ls))
161 #define IS_lex_state_all(ls) IS_lex_state_all_for(lex_state, (ls))
162 
163 # define SET_LEX_STATE(ls) \
164  (lex_state = (yydebug ? trace_lex_state(lex_state, (ls), __LINE__) : \
165  (enum lex_state_e)(ls)))
166 static enum lex_state_e trace_lex_state(enum lex_state_e from, enum lex_state_e to, int line);
167 
169 
170 static void show_bitstack(stack_type, const char *, int);
171 # define SHOW_BITSTACK(stack, name) (yydebug ? show_bitstack(stack, name, __LINE__) : (void)0)
172 # define BITSTACK_PUSH(stack, n) (((stack) = ((stack)<<1)|((n)&1)), SHOW_BITSTACK(stack, #stack"(push)"))
173 # define BITSTACK_POP(stack) (((stack) = (stack) >> 1), SHOW_BITSTACK(stack, #stack"(pop)"))
174 # define BITSTACK_LEXPOP(stack) (((stack) = ((stack) >> 1) | ((stack) & 1)), SHOW_BITSTACK(stack, #stack"(lexpop)"))
175 # define BITSTACK_SET_P(stack) (SHOW_BITSTACK(stack, #stack), (stack)&1)
176 # define BITSTACK_SET(stack, n) ((stack)=(n), SHOW_BITSTACK(stack, #stack"(set)"))
177 
178 #define COND_PUSH(n) BITSTACK_PUSH(cond_stack, (n))
179 #define COND_POP() BITSTACK_POP(cond_stack)
180 #define COND_LEXPOP() BITSTACK_LEXPOP(cond_stack)
181 #define COND_P() BITSTACK_SET_P(cond_stack)
182 #define COND_SET(n) BITSTACK_SET(cond_stack, (n))
183 
184 #define CMDARG_PUSH(n) BITSTACK_PUSH(cmdarg_stack, (n))
185 #define CMDARG_POP() BITSTACK_POP(cmdarg_stack)
186 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
187 #define CMDARG_P() BITSTACK_SET_P(cmdarg_stack)
188 #define CMDARG_SET(n) BITSTACK_SET(cmdarg_stack, (n))
189 
190 struct vtable {
191  ID *tbl;
192  int pos;
193  int capa;
194  struct vtable *prev;
195 };
196 
197 struct local_vars {
198  struct vtable *args;
199  struct vtable *vars;
200  struct vtable *used;
201 # if WARN_PAST_SCOPE
202  struct vtable *past;
203 # endif
204  struct local_vars *prev;
205  stack_type cmdargs;
206 };
207 
208 #define DVARS_INHERIT ((void*)1)
209 #define DVARS_TOPSCOPE NULL
210 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
211 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
212 
213 static int
214 vtable_size(const struct vtable *tbl)
215 {
216  if (POINTER_P(tbl)) {
217  return tbl->pos;
218  }
219  else {
220  return 0;
221  }
222 }
223 
224 #define VTBL_DEBUG 0
225 
226 static struct vtable *
228 {
229  struct vtable *tbl = ALLOC(struct vtable);
230  tbl->pos = 0;
231  tbl->capa = 8;
232  tbl->tbl = ALLOC_N(ID, tbl->capa);
233  tbl->prev = prev;
234  if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
235  return tbl;
236 }
237 
238 static void
240 {
241  if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
242  if (POINTER_P(tbl)) {
243  if (tbl->tbl) {
244  xfree(tbl->tbl);
245  }
246  xfree(tbl);
247  }
248 }
249 
250 static void
251 vtable_add(struct vtable *tbl, ID id)
252 {
253  if (!POINTER_P(tbl)) {
254  rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
255  }
256  if (VTBL_DEBUG) printf("vtable_add: %p, %"PRIsVALUE"\n", (void *)tbl, rb_id2str(id));
257 
258  if (tbl->pos == tbl->capa) {
259  tbl->capa = tbl->capa * 2;
260  REALLOC_N(tbl->tbl, ID, tbl->capa);
261  }
262  tbl->tbl[tbl->pos++] = id;
263 }
264 
265 #ifndef RIPPER
266 static void
267 vtable_pop(struct vtable *tbl, int n)
268 {
269  if (tbl->pos < n) rb_bug("vtable_pop: unreachable");
270  tbl->pos -= n;
271 }
272 #endif
273 
274 static int
275 vtable_included(const struct vtable * tbl, ID id)
276 {
277  int i;
278 
279  if (POINTER_P(tbl)) {
280  for (i = 0; i < tbl->pos; i++) {
281  if (tbl->tbl[i] == id) {
282  return i+1;
283  }
284  }
285  }
286  return 0;
287 }
288 
289 typedef struct token_info {
290  const char *token;
291  int linenum;
292  int column;
293  int nonspc;
294  struct token_info *next;
295 } token_info;
296 
297 /*
298  Structure of Lexer Buffer:
299 
300  lex_pbeg tokp lex_p lex_pend
301  | | | |
302  |-----------+--------------+------------|
303  |<------------>|
304  token
305 */
308 
310 
311  struct {
313  VALUE (*gets)(struct parser_params*,VALUE);
317  const char *pbeg;
318  const char *pcur;
319  const char *pend;
320  long gets_ptr;
323  int lpar_beg;
325  } lex;
326  stack_type cond_stack;
327  stack_type cmdarg_stack;
328  int tokidx;
329  int toksiz;
330  int tokline;
334  char *tokenbuf;
335  struct local_vars *lvtbl;
337  int ruby_sourceline; /* current line no. */
338  char *ruby_sourcefile; /* current source file */
343 
345 
347 
348  unsigned int command_start:1;
349  unsigned int eofp: 1;
350  unsigned int ruby__end__seen: 1;
351  unsigned int yydebug: 1;
352  unsigned int has_shebang: 1;
353  unsigned int in_defined: 1;
354  unsigned int in_main: 1;
355  unsigned int in_kwarg: 1;
356  unsigned int in_single: 1;
357  unsigned int in_def: 1;
358  unsigned int token_seen: 1;
359  unsigned int token_info_enabled: 1;
360 # if WARN_PAST_SCOPE
361  unsigned int past_scope_enabled: 1;
362 # endif
363  unsigned int error_p: 1;
364  unsigned int cr_seen: 1;
365 
366 #ifndef RIPPER
367  /* Ruby core only */
368 
374  const struct rb_block *base_block;
375 #else
376  /* Ripper only */
377 
378  const char *tokp;
379  VALUE delayed;
380  int delayed_line;
381  int delayed_col;
382 
383  VALUE value;
384  VALUE result;
385  VALUE parsing_thread;
386 #endif
387 };
388 
389 #ifdef RIPPER
390 #define intern_cstr(n,l,en) rb_intern3(n,l,en)
391 #else
392 #define intern_cstr(n,l,en) rb_intern3(n,l,en)
393 #endif
394 
395 #define STR_NEW(p,n) rb_enc_str_new((p),(n),current_enc)
396 #define STR_NEW0() rb_enc_str_new(0,0,current_enc)
397 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),current_enc)
398 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),current_enc)
399 #define TOK_INTERN() intern_cstr(tok(), toklen(), current_enc)
400 
401 static int parser_yyerror(struct parser_params*, const char*);
402 #define yyerror(msg) parser_yyerror(parser, (msg))
403 
404 #define lex_strterm (parser->lex.strterm)
405 #define lex_state (parser->lex.state)
406 #define cond_stack (parser->cond_stack)
407 #define cmdarg_stack (parser->cmdarg_stack)
408 #define paren_nest (parser->lex.paren_nest)
409 #define lpar_beg (parser->lex.lpar_beg)
410 #define brace_nest (parser->lex.brace_nest)
411 #define in_single (parser->in_single)
412 #define in_def (parser->in_def)
413 #define in_main (parser->in_main)
414 #define in_defined (parser->in_defined)
415 #define tokenbuf (parser->tokenbuf)
416 #define tokidx (parser->tokidx)
417 #define toksiz (parser->toksiz)
418 #define tokline (parser->tokline)
419 #define lex_input (parser->lex.input)
420 #define lex_lastline (parser->lex.lastline)
421 #define lex_nextline (parser->lex.nextline)
422 #define lex_pbeg (parser->lex.pbeg)
423 #define lex_p (parser->lex.pcur)
424 #define lex_pend (parser->lex.pend)
425 #define heredoc_end (parser->heredoc_end)
426 #define heredoc_indent (parser->heredoc_indent)
427 #define heredoc_line_indent (parser->heredoc_line_indent)
428 #define command_start (parser->command_start)
429 #define lex_gets_ptr (parser->lex.gets_ptr)
430 #define lex_gets (parser->lex.gets)
431 #define lvtbl (parser->lvtbl)
432 #define ruby__end__seen (parser->ruby__end__seen)
433 #define ruby_sourceline (parser->ruby_sourceline)
434 #define ruby_sourcefile (parser->ruby_sourcefile)
435 #define ruby_sourcefile_string (parser->ruby_sourcefile_string)
436 #define current_enc (parser->enc)
437 #define current_arg (parser->cur_arg)
438 #define yydebug (parser->yydebug)
439 #ifdef RIPPER
440 #define compile_for_eval (0)
441 #else
442 #define compile_for_eval (parser->base_block != 0 && !in_main)
443 #define ruby_eval_tree (parser->eval_tree)
444 #define ruby_eval_tree_begin (parser->eval_tree_begin)
445 #define ruby_debug_lines (parser->debug_lines)
446 #define ruby_coverage (parser->coverage)
447 #endif
448 
449 #define CALL_Q_P(q) ((q) == tANDDOT)
450 #define NODE_CALL_Q(q) (CALL_Q_P(q) ? NODE_QCALL : NODE_CALL)
451 #define NEW_QCALL(q,r,m,a) NEW_NODE(NODE_CALL_Q(q),r,m,a)
452 
453 #define lambda_beginning_p() (lpar_beg && lpar_beg == paren_nest)
454 
455 static int yylex(YYSTYPE*, struct parser_params*);
456 
457 #ifndef RIPPER
458 #define yyparse ruby_yyparse
459 
460 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
461 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, (type), (a1), (a2), (a3))
462 
463 static NODE *cond_gen(struct parser_params*,NODE*,int);
464 #define cond(node) cond_gen(parser, (node), FALSE)
465 #define method_cond(node) cond_gen(parser, (node), TRUE)
466 static NODE *new_if_gen(struct parser_params*,NODE*,NODE*,NODE*);
467 #define new_if(cc,left,right) new_if_gen(parser, (cc), (left), (right))
468 #define new_unless(cc,left,right) new_if_gen(parser, (cc), (right), (left))
469 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
470 #define logop(type,node1,node2) logop_gen(parser, (type), (node1), (node2))
471 
472 static NODE *newline_node(NODE*);
473 static void fixpos(NODE*,NODE*);
474 
475 static int value_expr_gen(struct parser_params*,NODE*);
476 static void void_expr_gen(struct parser_params*,NODE*);
477 static NODE *remove_begin(NODE*);
478 static NODE *remove_begin_all(NODE*);
479 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
480 #define void_expr0(node) void_expr_gen(parser, (node))
481 #define void_expr(node) void_expr0((node) = remove_begin(node))
482 static void void_stmts_gen(struct parser_params*,NODE*);
483 #define void_stmts(node) void_stmts_gen(parser, (node))
484 static void reduce_nodes_gen(struct parser_params*,NODE**);
485 #define reduce_nodes(n) reduce_nodes_gen(parser,(n))
486 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
487 #define block_dup_check(n1,n2) block_dup_check_gen(parser,(n1),(n2))
488 
489 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
490 #define block_append(h,t) block_append_gen(parser,(h),(t))
491 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
492 #define list_append(l,i) list_append_gen(parser,(l),(i))
493 static NODE *list_concat(NODE*,NODE*);
494 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
495 #define arg_append(h,t) arg_append_gen(parser,(h),(t))
496 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
497 #define arg_concat(h,t) arg_concat_gen(parser,(h),(t))
498 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
499 #define literal_concat(h,t) literal_concat_gen(parser,(h),(t))
500 static int literal_concat0(struct parser_params *, VALUE, VALUE);
501 static NODE *new_evstr_gen(struct parser_params*,NODE*);
502 #define new_evstr(n) new_evstr_gen(parser,(n))
503 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
504 #define evstr2dstr(n) evstr2dstr_gen(parser,(n))
505 static NODE *splat_array(NODE*);
506 
507 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
508 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, (recv),(id),(arg1))
509 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
510 #define call_uni_op(recv,id) call_uni_op_gen(parser, (recv),(id))
511 
512 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,NODE*);
513 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
514 static NODE *new_args_tail_gen(struct parser_params*,NODE*,ID,ID);
515 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
516 #define new_kw_arg(k) ((k) ? NEW_KW_ARG(0, (k)) : 0)
517 
518 static VALUE negate_lit(VALUE);
519 static NODE *ret_args_gen(struct parser_params*,NODE*);
520 #define ret_args(node) ret_args_gen(parser, (node))
521 static NODE *arg_blk_pass(NODE*,NODE*);
522 static NODE *new_yield_gen(struct parser_params*,NODE*);
523 #define new_yield(node) new_yield_gen(parser, (node))
524 static NODE *dsym_node_gen(struct parser_params*,NODE*);
525 #define dsym_node(node) dsym_node_gen(parser, (node))
526 
527 static NODE *gettable_gen(struct parser_params*,ID);
528 #define gettable(id) gettable_gen(parser,(id))
529 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
530 #define assignable(id,node) assignable_gen(parser, (id), (node))
531 
532 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
533 #define aryset(node1,node2) aryset_gen(parser, (node1), (node2))
534 static NODE *attrset_gen(struct parser_params*,NODE*,ID,ID);
535 #define attrset(node,q,id) attrset_gen(parser, (node), (q), (id))
536 
537 static void rb_backref_error_gen(struct parser_params*,NODE*);
538 #define rb_backref_error(n) rb_backref_error_gen(parser,(n))
539 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
540 #define node_assign(node1, node2) node_assign_gen(parser, (node1), (node2))
541 
542 static NODE *new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
543 static NODE *new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID atype, ID attr, ID op, NODE *rhs);
544 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (type), (attr), (op), (rhs))
545 static NODE *new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
546 #define new_const_op_assign(lhs, op, rhs) new_const_op_assign_gen(parser, (lhs), (op), (rhs))
547 
548 #define const_path_field(w, n) NEW_COLON2(w, n)
549 #define top_const_field(n) NEW_COLON3(n)
550 static NODE *const_decl_gen(struct parser_params *parser, NODE* path);
551 #define const_decl(path) const_decl_gen(parser, path)
552 
553 #define var_field(n) (n)
554 #define backref_assign_error(n, a) (rb_backref_error(n), NEW_BEGIN(0))
555 
556 static NODE *kwd_append(NODE*, NODE*);
557 
558 static NODE *new_hash_gen(struct parser_params *parser, NODE *hash);
559 #define new_hash(hash) new_hash_gen(parser, (hash))
560 
561 #define new_defined(expr) NEW_DEFINED(remove_begin_all(expr))
562 
563 static NODE *new_regexp_gen(struct parser_params *, NODE *, int);
564 #define new_regexp(node, opt) new_regexp_gen(parser, node, opt)
565 
566 static NODE *new_xstring_gen(struct parser_params *, NODE *);
567 #define new_xstring(node) new_xstring_gen(parser, node)
568 #define new_string1(str) (str)
569 
570 #define new_brace_body(param, stmt) NEW_ITER(param, stmt)
571 #define new_do_body(param, stmt) NEW_ITER(param, stmt)
572 
573 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
574 #define match_op(node1,node2) match_op_gen(parser, (node1), (node2))
575 
576 static ID *local_tbl_gen(struct parser_params*);
577 #define local_tbl() local_tbl_gen(parser)
578 
579 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
580 #define reg_compile(str,options) reg_compile_gen(parser, (str), (options))
581 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
582 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, (str), (options))
583 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
584 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, (str), (options))
585 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp);
586 #define reg_named_capture_assign(regexp) reg_named_capture_assign_gen(parser,(regexp))
587 
588 static NODE *parser_heredoc_dedent(struct parser_params*,NODE*);
589 # define heredoc_dedent(str) parser_heredoc_dedent(parser, (str))
590 
591 #define get_id(id) (id)
592 #define get_value(val) (val)
593 #else /* RIPPER */
594 #define NODE_RIPPER NODE_CDECL
595 
596 static inline VALUE
597 ripper_new_yylval(ID a, VALUE b, VALUE c)
598 {
599  return (VALUE)NEW_CDECL(a, b, c);
600 }
601 
602 static inline int
603 ripper_is_node_yylval(VALUE n)
604 {
605  return RB_TYPE_P(n, T_NODE) && nd_type(RNODE(n)) == NODE_RIPPER;
606 }
607 
608 #define value_expr(node) ((void)(node))
609 #define remove_begin(node) (node)
610 #define rb_dvar_defined(id, base) 0
611 #define rb_local_defined(id, base) 0
612 static ID ripper_get_id(VALUE);
613 #define get_id(id) ripper_get_id(id)
614 static VALUE ripper_get_value(VALUE);
615 #define get_value(val) ripper_get_value(val)
616 static VALUE assignable_gen(struct parser_params*,VALUE);
617 #define assignable(lhs,node) assignable_gen(parser, (lhs))
618 static int id_is_var_gen(struct parser_params *parser, ID id);
619 #define id_is_var(id) id_is_var_gen(parser, (id))
620 
621 #define node_assign(node1, node2) dispatch2(assign, (node1), (node2))
622 
623 static VALUE new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs);
624 static VALUE new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs);
625 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (type), (attr), (op), (rhs))
626 #define new_const_op_assign(lhs, op, rhs) new_op_assign(lhs, op, rhs)
627 
628 static VALUE new_regexp_gen(struct parser_params *, VALUE, VALUE);
629 #define new_regexp(node, opt) new_regexp_gen(parser, node, opt)
630 
631 static VALUE new_xstring_gen(struct parser_params *, VALUE);
632 #define new_xstring(str) new_xstring_gen(parser, str)
633 #define new_string1(str) dispatch1(string_literal, str)
634 
635 #define new_brace_body(param, stmt) dispatch2(brace_block, escape_Qundef(param), stmt)
636 #define new_do_body(param, stmt) dispatch2(do_block, escape_Qundef(param), stmt)
637 
638 #define const_path_field(w, n) dispatch2(const_path_field, (w), (n))
639 #define top_const_field(n) dispatch1(top_const_field, (n))
640 static VALUE const_decl_gen(struct parser_params *parser, VALUE path);
641 #define const_decl(path) const_decl_gen(parser, path)
642 
643 #define var_field(n) dispatch1(var_field, (n))
644 static VALUE assign_error_gen(struct parser_params *parser, VALUE a);
645 #define assign_error(a) assign_error_gen(parser, (a))
646 #define backref_assign_error(n, a) assign_error(a)
647 
648 static VALUE parser_reg_compile(struct parser_params*, VALUE, int, VALUE *);
649 
650 #endif /* !RIPPER */
651 
652 #define new_op_assign(lhs, op, rhs) new_op_assign_gen(parser, (lhs), (op), (rhs))
653 
656 
657 
658 static ID formal_argument_gen(struct parser_params*, ID);
659 #define formal_argument(id) formal_argument_gen(parser, (id))
660 static ID shadowing_lvar_gen(struct parser_params*,ID);
661 #define shadowing_lvar(name) shadowing_lvar_gen(parser, (name))
662 static void new_bv_gen(struct parser_params*,ID);
663 #define new_bv(id) new_bv_gen(parser, (id))
664 
665 static void local_push_gen(struct parser_params*,int);
666 #define local_push(top) local_push_gen(parser,(top))
667 static void local_pop_gen(struct parser_params*);
668 #define local_pop() local_pop_gen(parser)
669 static void local_var_gen(struct parser_params*, ID);
670 #define local_var(id) local_var_gen(parser, (id))
671 static void arg_var_gen(struct parser_params*, ID);
672 #define arg_var(id) arg_var_gen(parser, (id))
673 static int local_id_gen(struct parser_params*, ID);
674 #define local_id(id) local_id_gen(parser, (id))
675 static ID internal_id_gen(struct parser_params*);
676 #define internal_id() internal_id_gen(parser)
677 
678 static const struct vtable *dyna_push_gen(struct parser_params *);
679 #define dyna_push() dyna_push_gen(parser)
680 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
681 #define dyna_pop(node) dyna_pop_gen(parser, (node))
682 static int dyna_in_block_gen(struct parser_params*);
683 #define dyna_in_block() dyna_in_block_gen(parser)
684 #define dyna_var(id) local_var(id)
685 static int dvar_defined_gen(struct parser_params*,ID,int);
686 #define dvar_defined(id) dvar_defined_gen(parser, (id), 0)
687 #define dvar_defined_get(id) dvar_defined_gen(parser, (id), 1)
688 static int dvar_curr_gen(struct parser_params*,ID);
689 #define dvar_curr(id) dvar_curr_gen(parser, (id))
690 
691 static int lvar_defined_gen(struct parser_params*, ID);
692 #define lvar_defined(id) lvar_defined_gen(parser, (id))
693 
694 #define RE_OPTION_ONCE (1<<16)
695 #define RE_OPTION_ENCODING_SHIFT 8
696 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
697 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
698 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
699 #define RE_OPTION_MASK 0xff
700 #define RE_OPTION_ARG_ENCODING_NONE 32
701 
702 #define NODE_STRTERM NODE_ZARRAY /* nothing to gc */
703 #define NODE_HEREDOC NODE_ARRAY /* 1, 3 to gc */
704 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
705 #define nd_func u1.id
706 #if SIZEOF_SHORT == 2
707 #define nd_term(node) ((signed short)(node)->u2.id)
708 #else
709 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
710 #endif
711 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
712 #define nd_nest u3.cnt
713 
714 /****** Ripper *******/
715 
716 #ifdef RIPPER
717 #define RIPPER_VERSION "0.1.0"
718 
719 static inline VALUE intern_sym(const char *name);
720 
721 #include "eventids1.c"
722 #include "eventids2.c"
723 
724 static VALUE ripper_dispatch0(struct parser_params*,ID);
725 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
726 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
727 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
728 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
729 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
730 static VALUE ripper_dispatch7(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE);
731 static void ripper_error_gen(struct parser_params *parser);
732 #define ripper_error() ripper_error_gen(parser)
733 
734 #define dispatch0(n) ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
735 #define dispatch1(n,a) ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a))
736 #define dispatch2(n,a,b) ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), (a), (b))
737 #define dispatch3(n,a,b,c) ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c))
738 #define dispatch4(n,a,b,c,d) ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d))
739 #define dispatch5(n,a,b,c,d,e) ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e))
740 #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))
741 
742 #define yyparse ripper_yyparse
743 
744 #define ripper_intern(s) ID2SYM(rb_intern(s))
745 static VALUE ripper_id2sym(ID);
746 #ifdef __GNUC__
747 #define ripper_id2sym(id) (rb_ispunct((int)(id)) ? \
748  ID2SYM(id) : ripper_id2sym(id))
749 #endif
750 
751 #define arg_new() dispatch0(args_new)
752 #define arg_add(l,a) dispatch2(args_add, (l), (a))
753 #define arg_add_star(l,a) dispatch2(args_add_star, (l), (a))
754 #define arg_add_block(l,b) dispatch2(args_add_block, (l), (b))
755 #define arg_add_optblock(l,b) ((b)==Qundef? (l) : dispatch2(args_add_block, (l), (b)))
756 #define bare_assoc(v) dispatch1(bare_assoc_hash, (v))
757 #define arg_add_assocs(l,b) arg_add((l), bare_assoc(b))
758 
759 #define args2mrhs(a) dispatch1(mrhs_new_from_args, (a))
760 #define mrhs_new() dispatch0(mrhs_new)
761 #define mrhs_add(l,a) dispatch2(mrhs_add, (l), (a))
762 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, (l), (a))
763 
764 #define mlhs_new() dispatch0(mlhs_new)
765 #define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a))
766 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a))
767 
768 #define params_new(pars, opts, rest, pars2, kws, kwrest, blk) \
769  dispatch7(params, (pars), (opts), (rest), (pars2), (kws), (kwrest), (blk))
770 
771 #define blockvar_new(p,v) dispatch2(block_var, (p), (v))
772 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a))
773 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, (l), (a))
774 
775 #define method_optarg(m,a) ((a)==Qundef ? (m) : dispatch2(method_add_arg,(m),(a)))
776 #define method_arg(m,a) dispatch2(method_add_arg,(m),(a))
777 #define method_add_block(m,b) dispatch2(method_add_block, (m), (b))
778 
779 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
780 
781 static inline VALUE
782 new_args_gen(struct parser_params *parser, VALUE f, VALUE o, VALUE r, VALUE p, VALUE tail)
783 {
784  NODE *t = (NODE *)tail;
785  VALUE k = t->u1.value, kr = t->u2.value, b = t->u3.value;
786  return params_new(f, o, r, p, k, kr, escape_Qundef(b));
787 }
788 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
789 
790 static inline VALUE
791 new_args_tail_gen(struct parser_params *parser, VALUE k, VALUE kr, VALUE b)
792 {
793  return (VALUE)MEMO_NEW(k, kr, b);
794 }
795 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
796 
797 #define new_defined(expr) dispatch1(defined, (expr))
798 
800 # define heredoc_dedent(str) parser_heredoc_dedent(parser, (str))
801 
802 #define FIXME 0
803 
804 #else
805 #define ripper_id2sym(id) id
806 #endif /* RIPPER */
807 
808 #ifndef RIPPER
809 # define Qnone 0
810 # define ifndef_ripper(x) (x)
811 #else
812 # define Qnone Qnil
813 # define ifndef_ripper(x)
814 #endif
815 
816 # define rb_warn0(fmt) WARN_CALL(WARN_ARGS(fmt, 1))
817 # define rb_warn1(fmt,a) WARN_CALL(WARN_ARGS(fmt, 2), (a))
818 # define rb_warn2(fmt,a,b) WARN_CALL(WARN_ARGS(fmt, 3), (a), (b))
819 # define rb_warn3(fmt,a,b,c) WARN_CALL(WARN_ARGS(fmt, 4), (a), (b), (c))
820 # define rb_warn4(fmt,a,b,c,d) WARN_CALL(WARN_ARGS(fmt, 5), (a), (b), (c), (d))
821 # define rb_warning0(fmt) WARNING_CALL(WARNING_ARGS(fmt, 1))
822 # define rb_warning1(fmt,a) WARNING_CALL(WARNING_ARGS(fmt, 2), (a))
823 # define rb_warning2(fmt,a,b) WARNING_CALL(WARNING_ARGS(fmt, 3), (a), (b))
824 # define rb_warning3(fmt,a,b,c) WARNING_CALL(WARNING_ARGS(fmt, 4), (a), (b), (c))
825 # define rb_warning4(fmt,a,b,c,d) WARNING_CALL(WARNING_ARGS(fmt, 5), (a), (b), (c), (d))
826 # define rb_warn0L(l,fmt) WARN_CALL(WARN_ARGS_L(l, fmt, 1))
827 # define rb_warn1L(l,fmt,a) WARN_CALL(WARN_ARGS_L(l, fmt, 2), (a))
828 # define rb_warn2L(l,fmt,a,b) WARN_CALL(WARN_ARGS_L(l, fmt, 3), (a), (b))
829 # define rb_warn3L(l,fmt,a,b,c) WARN_CALL(WARN_ARGS_L(l, fmt, 4), (a), (b), (c))
830 # define rb_warn4L(l,fmt,a,b,c,d) WARN_CALL(WARN_ARGS_L(l, fmt, 5), (a), (b), (c), (d))
831 # define rb_warning0L(l,fmt) WARNING_CALL(WARNING_ARGS_L(l, fmt, 1))
832 # define rb_warning1L(l,fmt,a) WARNING_CALL(WARNING_ARGS_L(l, fmt, 2), (a))
833 # define rb_warning2L(l,fmt,a,b) WARNING_CALL(WARNING_ARGS_L(l, fmt, 3), (a), (b))
834 # define rb_warning3L(l,fmt,a,b,c) WARNING_CALL(WARNING_ARGS_L(l, fmt, 4), (a), (b), (c))
835 # define rb_warning4L(l,fmt,a,b,c,d) WARNING_CALL(WARNING_ARGS_L(l, fmt, 5), (a), (b), (c), (d))
836 #ifdef RIPPER
837 static ID id_warn, id_warning, id_gets;
838 # define WARN_S_L(s,l) STR_NEW(s,l)
839 # define WARN_S(s) STR_NEW2(s)
840 # define WARN_I(i) INT2NUM(i)
841 # define PRIsWARN "s"
842 # define WARN_ARGS(fmt,n) parser->value, id_warn, n, rb_usascii_str_new_lit(fmt)
843 # define WARN_ARGS_L(l,fmt,n) WARN_ARGS(fmt,n)
844 # define WARN_CALL rb_funcall
845 # define WARNING_ARGS(fmt,n) parser->value, id_warning, n, rb_usascii_str_new_lit(fmt)
846 # define WARNING_ARGS_L(l, fmt,n) WARNING_ARGS(fmt,n)
847 # define WARNING_CALL rb_funcall
848 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
849 # define compile_error ripper_compile_error
850 # define PARSER_ARG parser,
851 #else
852 # define WARN_S_L(s,l) s
853 # define WARN_S(s) s
854 # define WARN_I(i) i
855 # define PRIsWARN PRIsVALUE
856 # define WARN_ARGS(fmt,n) WARN_ARGS_L(ruby_sourceline,fmt,n)
857 # define WARN_ARGS_L(l,fmt,n) ruby_sourcefile, (l), (fmt)
858 # define WARN_CALL rb_compile_warn
859 # define WARNING_ARGS(fmt,n) WARN_ARGS(fmt,n)
860 # define WARNING_ARGS_L(l,fmt,n) WARN_ARGS_L(l,fmt,n)
861 # define WARNING_CALL rb_compile_warning
862 static void parser_compile_error(struct parser_params*, const char *fmt, ...);
863 # define compile_error parser_compile_error
864 # define PARSER_ARG parser,
865 #endif
866 
867 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150,
868  for instance). This is too low for Ruby to parse some files, such as
869  date/format.rb, therefore bump the value up to at least Bison's default. */
870 #ifdef OLD_YACC
871 #ifndef YYMAXDEPTH
872 #define YYMAXDEPTH 10000
873 #endif
874 #endif
875 
876 static void token_info_push_gen(struct parser_params*, const char *token, size_t len);
877 static void token_info_pop_gen(struct parser_params*, const char *token, size_t len);
878 #define token_info_push(token) token_info_push_gen(parser, (token), rb_strlen_lit(token))
879 #define token_info_pop(token) token_info_pop_gen(parser, (token), rb_strlen_lit(token))
880 
881 
882 /* Line 268 of yacc.c */
883 #line 884 "parse.c"
884 
885 /* Enabling traces. */
886 #ifndef YYDEBUG
887 # define YYDEBUG 1
888 #endif
889 
890 /* Enabling verbose error messages. */
891 #ifdef YYERROR_VERBOSE
892 # undef YYERROR_VERBOSE
893 # define YYERROR_VERBOSE 1
894 #else
895 # define YYERROR_VERBOSE 0
896 #endif
897 
898 /* Enabling the token table. */
899 #ifndef YYTOKEN_TABLE
900 # define YYTOKEN_TABLE 0
901 #endif
902 
903 
904 /* Tokens. */
905 #ifndef YYTOKENTYPE
906 # define YYTOKENTYPE
907  /* Put the tokens into the symbol table, so that GDB and other debuggers
908  know about them. */
909  enum yytokentype {
910  END_OF_INPUT = 0,
911  keyword_class = 258,
912  keyword_module = 259,
913  keyword_def = 260,
914  keyword_undef = 261,
915  keyword_begin = 262,
916  keyword_rescue = 263,
917  keyword_ensure = 264,
918  keyword_end = 265,
919  keyword_if = 266,
920  keyword_unless = 267,
921  keyword_then = 268,
922  keyword_elsif = 269,
923  keyword_else = 270,
924  keyword_case = 271,
925  keyword_when = 272,
926  keyword_while = 273,
927  keyword_until = 274,
928  keyword_for = 275,
929  keyword_break = 276,
930  keyword_next = 277,
931  keyword_redo = 278,
932  keyword_retry = 279,
933  keyword_in = 280,
934  keyword_do = 281,
935  keyword_do_cond = 282,
936  keyword_do_block = 283,
937  keyword_do_LAMBDA = 284,
938  keyword_return = 285,
939  keyword_yield = 286,
940  keyword_super = 287,
941  keyword_self = 288,
942  keyword_nil = 289,
943  keyword_true = 290,
944  keyword_false = 291,
945  keyword_and = 292,
946  keyword_or = 293,
947  keyword_not = 294,
948  modifier_if = 295,
949  modifier_unless = 296,
950  modifier_while = 297,
951  modifier_until = 298,
952  modifier_rescue = 299,
953  keyword_alias = 300,
954  keyword_defined = 301,
955  keyword_BEGIN = 302,
956  keyword_END = 303,
957  keyword__LINE__ = 304,
958  keyword__FILE__ = 305,
959  keyword__ENCODING__ = 306,
960  tIDENTIFIER = 307,
961  tFID = 308,
962  tGVAR = 309,
963  tIVAR = 310,
964  tCONSTANT = 311,
965  tCVAR = 312,
966  tLABEL = 313,
967  tINTEGER = 314,
968  tFLOAT = 315,
969  tRATIONAL = 316,
970  tIMAGINARY = 317,
971  tSTRING_CONTENT = 318,
972  tCHAR = 319,
973  tNTH_REF = 320,
974  tBACK_REF = 321,
975  tREGEXP_END = 322,
976  tUPLUS = 130,
977  tUMINUS = 131,
978  tPOW = 132,
979  tCMP = 134,
980  tEQ = 139,
981  tEQQ = 140,
982  tNEQ = 141,
983  tGEQ = 138,
984  tLEQ = 137,
985  tANDOP = 148,
986  tOROP = 149,
987  tMATCH = 142,
988  tNMATCH = 143,
989  tDOT2 = 128,
990  tDOT3 = 129,
991  tAREF = 144,
992  tASET = 145,
993  tLSHFT = 135,
994  tRSHFT = 136,
995  tANDDOT = 150,
996  tCOLON2 = 323,
997  tCOLON3 = 324,
998  tOP_ASGN = 325,
999  tASSOC = 326,
1000  tLPAREN = 327,
1001  tLPAREN_ARG = 328,
1002  tRPAREN = 329,
1003  tLBRACK = 330,
1004  tLBRACE = 331,
1005  tLBRACE_ARG = 332,
1006  tSTAR = 333,
1007  tDSTAR = 334,
1008  tAMPER = 335,
1009  tLAMBDA = 336,
1010  tSYMBEG = 337,
1011  tSTRING_BEG = 338,
1012  tXSTRING_BEG = 339,
1013  tREGEXP_BEG = 340,
1014  tWORDS_BEG = 341,
1015  tQWORDS_BEG = 342,
1016  tSYMBOLS_BEG = 343,
1017  tQSYMBOLS_BEG = 344,
1018  tSTRING_DBEG = 345,
1019  tSTRING_DEND = 346,
1020  tSTRING_DVAR = 347,
1021  tSTRING_END = 348,
1022  tLAMBEG = 349,
1023  tLABEL_END = 350,
1024  tLOWEST = 351,
1025  tUMINUS_NUM = 352,
1026  tLAST_TOKEN = 353
1027  };
1028 #endif
1029 
1030 
1031 
1032 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
1033 typedef union YYSTYPE
1034 {
1035 
1036 /* Line 293 of yacc.c */
1037 #line 828 "ripper.y"
1038 
1039  VALUE val;
1040  NODE *node;
1041  ID id;
1042  int num;
1043  const struct vtable *vars;
1044 
1045 
1046 
1047 /* Line 293 of yacc.c */
1048 #line 1049 "parse.c"
1049 } YYSTYPE;
1050 # define YYSTYPE_IS_TRIVIAL 1
1051 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
1052 # define YYSTYPE_IS_DECLARED 1
1053 #endif
1054 
1055 
1056 /* Copy the second part of user declarations. */
1057 
1058 
1059 /* Line 343 of yacc.c */
1060 #line 1061 "parse.c"
1061 
1062 #ifdef short
1063 # undef short
1064 #endif
1065 
1066 #ifdef YYTYPE_UINT8
1067 typedef YYTYPE_UINT8 yytype_uint8;
1068 #else
1069 typedef unsigned char yytype_uint8;
1070 #endif
1071 
1072 #ifdef YYTYPE_INT8
1073 typedef YYTYPE_INT8 yytype_int8;
1074 #elif (defined __STDC__ || defined __C99__FUNC__ \
1075  || defined __cplusplus || defined _MSC_VER)
1076 typedef signed char yytype_int8;
1077 #else
1078 typedef short int yytype_int8;
1079 #endif
1080 
1081 #ifdef YYTYPE_UINT16
1082 typedef YYTYPE_UINT16 yytype_uint16;
1083 #else
1084 typedef unsigned short int yytype_uint16;
1085 #endif
1086 
1087 #ifdef YYTYPE_INT16
1088 typedef YYTYPE_INT16 yytype_int16;
1089 #else
1090 typedef short int yytype_int16;
1091 #endif
1092 
1093 #ifndef YYSIZE_T
1094 # ifdef __SIZE_TYPE__
1095 # define YYSIZE_T __SIZE_TYPE__
1096 # elif defined size_t
1097 # define YYSIZE_T size_t
1098 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
1099  || defined __cplusplus || defined _MSC_VER)
1100 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1101 # define YYSIZE_T size_t
1102 # else
1103 # define YYSIZE_T unsigned int
1104 # endif
1105 #endif
1106 
1107 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
1108 
1109 #ifndef YY_
1110 # if defined YYENABLE_NLS && YYENABLE_NLS
1111 # if ENABLE_NLS
1112 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1113 # define YY_(msgid) dgettext ("bison-runtime", msgid)
1114 # endif
1115 # endif
1116 # ifndef YY_
1117 # define YY_(msgid) msgid
1118 # endif
1119 #endif
1120 
1121 /* Suppress unused-variable warnings by "using" E. */
1122 #if ! defined lint || defined __GNUC__
1123 # define YYUSE(e) ((void) (e))
1124 #else
1125 # define YYUSE(e) /* empty */
1126 #endif
1127 
1128 /* Identity function, used to suppress warnings about constant conditions. */
1129 #ifndef lint
1130 # define YYID(n) (n)
1131 #else
1132 #if (defined __STDC__ || defined __C99__FUNC__ \
1133  || defined __cplusplus || defined _MSC_VER)
1134 static int
1135 YYID (int yyi)
1136 #else
1137 static int
1138 YYID (yyi)
1139  int yyi;
1140 #endif
1141 {
1142  return yyi;
1143 }
1144 #endif
1145 
1146 #if ! defined yyoverflow || YYERROR_VERBOSE
1147 
1148 /* The parser invokes alloca or malloc; define the necessary symbols. */
1149 
1150 # ifdef YYSTACK_USE_ALLOCA
1151 # if YYSTACK_USE_ALLOCA
1152 # ifdef __GNUC__
1153 # define YYSTACK_ALLOC __builtin_alloca
1154 # elif defined __BUILTIN_VA_ARG_INCR
1155 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
1156 # elif defined _AIX
1157 # define YYSTACK_ALLOC __alloca
1158 # elif defined _MSC_VER
1159 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
1160 # define alloca _alloca
1161 # else
1162 # define YYSTACK_ALLOC alloca
1163 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
1164  || defined __cplusplus || defined _MSC_VER)
1165 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1166 # ifndef EXIT_SUCCESS
1167 # define EXIT_SUCCESS 0
1168 # endif
1169 # endif
1170 # endif
1171 # endif
1172 # endif
1173 
1174 # ifdef YYSTACK_ALLOC
1175  /* Pacify GCC's `empty if-body' warning. */
1176 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
1177 # ifndef YYSTACK_ALLOC_MAXIMUM
1178  /* The OS might guarantee only one guard page at the bottom of the stack,
1179  and a page size can be as small as 4096 bytes. So we cannot safely
1180  invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1181  to allow for a few compiler-allocated temporary stack slots. */
1182 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
1183 # endif
1184 # else
1185 # define YYSTACK_ALLOC YYMALLOC
1186 # define YYSTACK_FREE YYFREE
1187 # ifndef YYSTACK_ALLOC_MAXIMUM
1188 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
1189 # endif
1190 # if (defined __cplusplus && ! defined EXIT_SUCCESS \
1191  && ! ((defined YYMALLOC || defined malloc) \
1192  && (defined YYFREE || defined free)))
1193 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1194 # ifndef EXIT_SUCCESS
1195 # define EXIT_SUCCESS 0
1196 # endif
1197 # endif
1198 # ifndef YYMALLOC
1199 # define YYMALLOC malloc
1200 # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
1201  || defined __cplusplus || defined _MSC_VER)
1202 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1203 # endif
1204 # endif
1205 # ifndef YYFREE
1206 # define YYFREE free
1207 # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
1208  || defined __cplusplus || defined _MSC_VER)
1209 void free (void *); /* INFRINGES ON USER NAME SPACE */
1210 # endif
1211 # endif
1212 # endif
1213 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
1214 
1215 
1216 #if (! defined yyoverflow \
1217  && (! defined __cplusplus \
1218  || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
1219 
1220 /* A type that is properly aligned for any stack member. */
1221 union yyalloc
1222 {
1223  yytype_int16 yyss_alloc;
1225 };
1226 
1227 /* The size of the maximum gap between one aligned stack and the next. */
1228 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1229 
1230 /* The size of an array large to enough to hold all stacks, each with
1231  N elements. */
1232 # define YYSTACK_BYTES(N) \
1233  ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
1234  + YYSTACK_GAP_MAXIMUM)
1235 
1236 # define YYCOPY_NEEDED 1
1237 
1238 /* Relocate STACK from its old location to the new one. The
1239  local variables YYSIZE and YYSTACKSIZE give the old and new number of
1240  elements in the stack, and YYPTR gives the new location of the
1241  stack. Advance YYPTR to a properly aligned location for the next
1242  stack. */
1243 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
1244  do \
1245  { \
1246  YYSIZE_T yynewbytes; \
1247  YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
1248  Stack = &yyptr->Stack_alloc; \
1249  yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1250  yyptr += yynewbytes / sizeof (*yyptr); \
1251  } \
1252  while (YYID (0))
1253 
1254 #endif
1255 
1256 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
1257 /* Copy COUNT objects from FROM to TO. The source and destination do
1258  not overlap. */
1259 # ifndef YYCOPY
1260 # if defined __GNUC__ && 1 < __GNUC__
1261 # define YYCOPY(To, From, Count) \
1262  __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1263 # else
1264 # define YYCOPY(To, From, Count) \
1265  do \
1266  { \
1267  YYSIZE_T yyi; \
1268  for (yyi = 0; yyi < (Count); yyi++) \
1269  (To)[yyi] = (From)[yyi]; \
1270  } \
1271  while (YYID (0))
1272 # endif
1273 # endif
1274 #endif /* !YYCOPY_NEEDED */
1275 
1276 /* YYFINAL -- State number of the termination state. */
1277 #define YYFINAL 3
1278 /* YYLAST -- Last index in YYTABLE. */
1279 #define YYLAST 11794
1280 
1281 /* YYNTOKENS -- Number of terminals. */
1282 #define YYNTOKENS 146
1283 /* YYNNTS -- Number of nonterminals. */
1284 #define YYNNTS 217
1285 /* YYNRULES -- Number of rules. */
1286 #define YYNRULES 642
1287 /* YYNRULES -- Number of states. */
1288 #define YYNSTATES 1085
1289 
1290 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1291 #define YYUNDEFTOK 2
1292 #define YYMAXUTOK 353
1293 
1294 #define YYTRANSLATE(YYX) \
1295  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1296 
1297 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
1298 static const yytype_uint8 yytranslate[] =
1299 {
1300  0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1301  145, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1302  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1303  2, 2, 143, 131, 2, 2, 2, 129, 124, 2,
1304  139, 140, 127, 125, 137, 126, 144, 128, 2, 2,
1305  2, 2, 2, 2, 2, 2, 2, 2, 119, 142,
1306  121, 117, 120, 118, 2, 2, 2, 2, 2, 2,
1307  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1308  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1309  2, 136, 2, 141, 123, 2, 138, 2, 2, 2,
1310  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1311  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1312  2, 2, 2, 134, 122, 135, 132, 2, 81, 82,
1313  68, 69, 70, 2, 71, 85, 86, 76, 75, 72,
1314  73, 74, 79, 80, 83, 84, 2, 2, 77, 78,
1315  87, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1316  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1317  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1318  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1319  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1320  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1321  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1322  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1323  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1324  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1325  2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1326  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1327  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1328  25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1329  35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1330  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1331  55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1332  65, 66, 67, 88, 89, 90, 91, 92, 93, 94,
1333  95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1334  105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
1335  115, 116, 130, 133
1336 };
1337 
1338 #if YYDEBUG
1339 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1340  YYRHS. */
1341 static const yytype_uint16 yyprhs[] =
1342 {
1343  0, 0, 3, 4, 7, 10, 12, 14, 18, 21,
1344  23, 24, 30, 35, 38, 40, 42, 46, 49, 51,
1345  52, 58, 59, 64, 68, 72, 76, 79, 83, 87,
1346  91, 95, 99, 104, 106, 110, 114, 118, 120, 124,
1347  128, 135, 141, 147, 153, 159, 163, 165, 169, 171,
1348  173, 177, 181, 185, 188, 190, 192, 194, 196, 198,
1349  203, 204, 209, 211, 214, 218, 223, 229, 234, 240,
1350  243, 246, 249, 252, 255, 257, 261, 263, 267, 269,
1351  272, 276, 282, 285, 290, 293, 298, 300, 304, 306,
1352  310, 313, 317, 319, 323, 325, 327, 332, 336, 340,
1353  344, 348, 351, 353, 355, 357, 362, 366, 370, 374,
1354  378, 381, 383, 385, 387, 390, 392, 396, 398, 400,
1355  402, 404, 406, 408, 410, 412, 414, 416, 417, 422,
1356  424, 426, 428, 430, 432, 434, 436, 438, 440, 442,
1357  444, 446, 448, 450, 452, 454, 456, 458, 460, 462,
1358  464, 466, 468, 470, 472, 474, 476, 478, 480, 482,
1359  484, 486, 488, 490, 492, 494, 496, 498, 500, 502,
1360  504, 506, 508, 510, 512, 514, 516, 518, 520, 522,
1361  524, 526, 528, 530, 532, 534, 536, 538, 540, 542,
1362  544, 546, 548, 550, 552, 554, 556, 558, 560, 562,
1363  564, 568, 572, 579, 585, 591, 597, 603, 608, 612,
1364  616, 620, 624, 628, 632, 636, 640, 644, 649, 652,
1365  655, 659, 663, 667, 671, 675, 679, 683, 687, 691,
1366  695, 699, 703, 707, 710, 713, 717, 721, 725, 729,
1367  730, 735, 742, 744, 746, 748, 751, 756, 759, 761,
1368  765, 769, 771, 773, 775, 777, 780, 785, 788, 790,
1369  793, 796, 801, 803, 804, 807, 810, 813, 815, 817,
1370  820, 824, 829, 831, 833, 837, 842, 845, 847, 849,
1371  851, 853, 855, 857, 859, 861, 863, 865, 867, 868,
1372  873, 874, 878, 879, 880, 886, 890, 894, 897, 901,
1373  905, 907, 912, 916, 918, 919, 926, 931, 935, 938,
1374  940, 943, 946, 953, 960, 961, 962, 970, 971, 972,
1375  980, 986, 991, 992, 993, 1003, 1004, 1011, 1012, 1020,
1376  1021, 1027, 1028, 1029, 1037, 1038, 1039, 1049, 1051, 1053,
1377  1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073,
1378  1075, 1077, 1079, 1081, 1083, 1085, 1088, 1090, 1092, 1094,
1379  1100, 1102, 1105, 1107, 1109, 1111, 1115, 1117, 1121, 1123,
1380  1128, 1135, 1139, 1145, 1148, 1153, 1155, 1159, 1164, 1167,
1381  1170, 1172, 1175, 1176, 1183, 1192, 1197, 1204, 1209, 1212,
1382  1219, 1222, 1227, 1234, 1237, 1242, 1245, 1250, 1252, 1254,
1383  1256, 1260, 1262, 1267, 1269, 1274, 1276, 1280, 1282, 1284,
1384  1285, 1286, 1287, 1288, 1295, 1300, 1302, 1306, 1310, 1311,
1385  1316, 1319, 1324, 1330, 1336, 1339, 1340, 1346, 1347, 1353,
1386  1357, 1358, 1363, 1364, 1369, 1372, 1374, 1379, 1380, 1385,
1387  1386, 1391, 1392, 1393, 1398, 1399, 1400, 1405, 1411, 1413,
1388  1415, 1422, 1424, 1426, 1428, 1430, 1433, 1435, 1438, 1440,
1389  1442, 1444, 1446, 1448, 1450, 1452, 1455, 1459, 1463, 1467,
1390  1471, 1475, 1476, 1480, 1482, 1485, 1489, 1493, 1494, 1498,
1391  1502, 1506, 1510, 1514, 1515, 1519, 1520, 1524, 1525, 1528,
1392  1529, 1532, 1533, 1536, 1538, 1539, 1543, 1544, 1545, 1546,
1393  1547, 1548, 1557, 1559, 1561, 1563, 1565, 1568, 1570, 1572,
1394  1574, 1576, 1580, 1582, 1585, 1587, 1589, 1591, 1593, 1595,
1395  1597, 1599, 1601, 1603, 1605, 1607, 1609, 1611, 1613, 1615,
1396  1617, 1619, 1621, 1623, 1625, 1627, 1629, 1630, 1635, 1636,
1397  1640, 1641, 1645, 1650, 1653, 1656, 1658, 1661, 1662, 1669,
1398  1678, 1683, 1690, 1695, 1702, 1705, 1710, 1717, 1720, 1725,
1399  1728, 1733, 1735, 1736, 1738, 1740, 1742, 1744, 1746, 1748,
1400  1750, 1752, 1756, 1758, 1762, 1764, 1767, 1769, 1772, 1774,
1401  1776, 1780, 1782, 1786, 1788, 1790, 1793, 1795, 1799, 1803,
1402  1805, 1809, 1811, 1815, 1817, 1819, 1822, 1824, 1826, 1828,
1403  1831, 1834, 1836, 1838, 1839, 1844, 1846, 1849, 1851, 1855,
1404  1859, 1862, 1867, 1870, 1872, 1874, 1876, 1878, 1880, 1882,
1405  1884, 1886, 1888, 1890, 1892, 1894, 1896, 1898, 1900, 1902,
1406  1903, 1905, 1906, 1908, 1911, 1914, 1915, 1917, 1919, 1921,
1407  1923, 1925, 1928
1408 };
1409 
1410 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
1411 static const yytype_int16 yyrhs[] =
1412 {
1413  147, 0, -1, -1, 148, 149, -1, 150, 355, -1,
1414  362, -1, 151, -1, 150, 361, 151, -1, 1, 151,
1415  -1, 158, -1, -1, 47, 152, 134, 149, 135, -1,
1416  154, 276, 237, 279, -1, 155, 355, -1, 362, -1,
1417  156, -1, 155, 361, 156, -1, 1, 158, -1, 158,
1418  -1, -1, 47, 157, 134, 149, 135, -1, -1, 45,
1419  182, 159, 182, -1, 45, 54, 54, -1, 45, 54,
1420  66, -1, 45, 54, 65, -1, 6, 183, -1, 158,
1421  40, 163, -1, 158, 41, 163, -1, 158, 42, 163,
1422  -1, 158, 43, 163, -1, 158, 44, 158, -1, 48,
1423  134, 154, 135, -1, 160, -1, 170, 117, 164, -1,
1424  177, 117, 202, -1, 170, 117, 201, -1, 162, -1,
1425  177, 117, 161, -1, 314, 90, 161, -1, 222, 136,
1426  194, 358, 90, 161, -1, 222, 353, 52, 90, 161,
1427  -1, 222, 353, 56, 90, 161, -1, 222, 88, 56,
1428  90, 161, -1, 222, 88, 52, 90, 161, -1, 315,
1429  90, 161, -1, 164, -1, 164, 44, 158, -1, 160,
1430  -1, 164, -1, 162, 37, 162, -1, 162, 38, 162,
1431  -1, 39, 356, 162, -1, 131, 164, -1, 187, -1,
1432  162, -1, 169, -1, 165, -1, 259, -1, 259, 354,
1433  350, 196, -1, -1, 97, 167, 268, 135, -1, 349,
1434  -1, 168, 196, -1, 168, 196, 166, -1, 222, 353,
1435  350, 196, -1, 222, 353, 350, 196, 166, -1, 222,
1436  88, 350, 196, -1, 222, 88, 350, 196, 166, -1,
1437  32, 196, -1, 31, 196, -1, 30, 195, -1, 21,
1438  195, -1, 22, 195, -1, 172, -1, 92, 171, 357,
1439  -1, 172, -1, 92, 171, 357, -1, 174, -1, 174,
1440  173, -1, 174, 98, 176, -1, 174, 98, 176, 137,
1441  175, -1, 174, 98, -1, 174, 98, 137, 175, -1,
1442  98, 176, -1, 98, 176, 137, 175, -1, 98, -1,
1443  98, 137, 175, -1, 176, -1, 92, 171, 357, -1,
1444  173, 137, -1, 174, 173, 137, -1, 173, -1, 175,
1445  137, 173, -1, 311, -1, 312, -1, 222, 136, 194,
1446  358, -1, 222, 353, 52, -1, 222, 88, 52, -1,
1447  222, 353, 56, -1, 222, 88, 56, -1, 89, 56,
1448  -1, 315, -1, 311, -1, 312, -1, 222, 136, 194,
1449  358, -1, 222, 353, 52, -1, 222, 88, 52, -1,
1450  222, 353, 56, -1, 222, 88, 56, -1, 89, 56,
1451  -1, 315, -1, 52, -1, 56, -1, 89, 178, -1,
1452  178, -1, 222, 88, 178, -1, 52, -1, 56, -1,
1453  53, -1, 185, -1, 186, -1, 180, -1, 306, -1,
1454  181, -1, 308, -1, 182, -1, -1, 183, 137, 184,
1455  182, -1, 122, -1, 123, -1, 124, -1, 71, -1,
1456  72, -1, 73, -1, 79, -1, 80, -1, 120, -1,
1457  75, -1, 121, -1, 76, -1, 74, -1, 85, -1,
1458  86, -1, 125, -1, 126, -1, 127, -1, 98, -1,
1459  128, -1, 129, -1, 70, -1, 99, -1, 131, -1,
1460  132, -1, 68, -1, 69, -1, 83, -1, 84, -1,
1461  138, -1, 49, -1, 50, -1, 51, -1, 47, -1,
1462  48, -1, 45, -1, 37, -1, 7, -1, 21, -1,
1463  16, -1, 3, -1, 5, -1, 46, -1, 26, -1,
1464  15, -1, 14, -1, 10, -1, 9, -1, 36, -1,
1465  20, -1, 25, -1, 4, -1, 22, -1, 34, -1,
1466  39, -1, 38, -1, 23, -1, 8, -1, 24, -1,
1467  30, -1, 33, -1, 32, -1, 13, -1, 35, -1,
1468  6, -1, 17, -1, 31, -1, 11, -1, 12, -1,
1469  18, -1, 19, -1, 177, 117, 191, -1, 314, 90,
1470  191, -1, 222, 136, 194, 358, 90, 191, -1, 222,
1471  353, 52, 90, 191, -1, 222, 353, 56, 90, 191,
1472  -1, 222, 88, 52, 90, 191, -1, 222, 88, 56,
1473  90, 191, -1, 89, 56, 90, 191, -1, 315, 90,
1474  191, -1, 187, 81, 187, -1, 187, 82, 187, -1,
1475  187, 125, 187, -1, 187, 126, 187, -1, 187, 127,
1476  187, -1, 187, 128, 187, -1, 187, 129, 187, -1,
1477  187, 70, 187, -1, 130, 310, 70, 187, -1, 68,
1478  187, -1, 69, 187, -1, 187, 122, 187, -1, 187,
1479  123, 187, -1, 187, 124, 187, -1, 187, 71, 187,
1480  -1, 187, 120, 187, -1, 187, 75, 187, -1, 187,
1481  121, 187, -1, 187, 76, 187, -1, 187, 72, 187,
1482  -1, 187, 73, 187, -1, 187, 74, 187, -1, 187,
1483  79, 187, -1, 187, 80, 187, -1, 131, 187, -1,
1484  132, 187, -1, 187, 85, 187, -1, 187, 86, 187,
1485  -1, 187, 77, 187, -1, 187, 78, 187, -1, -1,
1486  46, 356, 188, 187, -1, 187, 118, 187, 356, 119,
1487  187, -1, 203, -1, 187, -1, 362, -1, 200, 359,
1488  -1, 200, 137, 347, 359, -1, 347, 359, -1, 187,
1489  -1, 187, 44, 187, -1, 139, 194, 357, -1, 362,
1490  -1, 192, -1, 362, -1, 195, -1, 200, 137, -1,
1491  200, 137, 347, 137, -1, 347, 137, -1, 169, -1,
1492  200, 199, -1, 347, 199, -1, 200, 137, 347, 199,
1493  -1, 198, -1, -1, 197, 195, -1, 100, 189, -1,
1494  137, 198, -1, 362, -1, 189, -1, 98, 189, -1,
1495  200, 137, 189, -1, 200, 137, 98, 189, -1, 202,
1496  -1, 189, -1, 200, 137, 189, -1, 200, 137, 98,
1497  189, -1, 98, 189, -1, 280, -1, 281, -1, 284,
1498  -1, 285, -1, 286, -1, 291, -1, 289, -1, 292,
1499  -1, 313, -1, 315, -1, 53, -1, -1, 223, 204,
1500  153, 233, -1, -1, 93, 205, 357, -1, -1, -1,
1501  93, 206, 158, 207, 357, -1, 92, 154, 140, -1,
1502  222, 88, 56, -1, 89, 56, -1, 95, 190, 141,
1503  -1, 96, 346, 135, -1, 30, -1, 31, 139, 195,
1504  357, -1, 31, 139, 357, -1, 31, -1, -1, 46,
1505  356, 139, 208, 162, 357, -1, 39, 139, 162, 357,
1506  -1, 39, 139, 357, -1, 168, 265, -1, 260, -1,
1507  260, 265, -1, 101, 250, -1, 224, 163, 234, 154,
1508  236, 233, -1, 225, 163, 234, 154, 237, 233, -1,
1509  -1, -1, 226, 209, 163, 235, 210, 154, 233, -1,
1510  -1, -1, 227, 211, 163, 235, 212, 154, 233, -1,
1511  228, 163, 355, 274, 233, -1, 228, 355, 274, 233,
1512  -1, -1, -1, 229, 238, 25, 213, 163, 235, 214,
1513  154, 233, -1, -1, 230, 179, 316, 215, 153, 233,
1514  -1, -1, 230, 85, 162, 216, 360, 153, 233, -1,
1515  -1, 231, 179, 217, 153, 233, -1, -1, -1, 232,
1516  180, 218, 219, 318, 153, 233, -1, -1, -1, 232,
1517  344, 352, 220, 180, 221, 318, 153, 233, -1, 21,
1518  -1, 22, -1, 23, -1, 24, -1, 203, -1, 7,
1519  -1, 11, -1, 12, -1, 18, -1, 19, -1, 16,
1520  -1, 20, -1, 3, -1, 4, -1, 5, -1, 10,
1521  -1, 360, -1, 13, -1, 360, 13, -1, 360, -1,
1522  27, -1, 237, -1, 14, 163, 234, 154, 236, -1,
1523  362, -1, 15, 154, -1, 177, -1, 170, -1, 324,
1524  -1, 92, 241, 357, -1, 239, -1, 240, 137, 239,
1525  -1, 240, -1, 240, 137, 98, 324, -1, 240, 137,
1526  98, 324, 137, 240, -1, 240, 137, 98, -1, 240,
1527  137, 98, 137, 240, -1, 98, 324, -1, 98, 324,
1528  137, 240, -1, 98, -1, 98, 137, 240, -1, 331,
1529  137, 334, 343, -1, 331, 343, -1, 334, 343, -1,
1530  342, -1, 137, 242, -1, -1, 327, 137, 337, 137,
1531  340, 243, -1, 327, 137, 337, 137, 340, 137, 327,
1532  243, -1, 327, 137, 337, 243, -1, 327, 137, 337,
1533  137, 327, 243, -1, 327, 137, 340, 243, -1, 327,
1534  137, -1, 327, 137, 340, 137, 327, 243, -1, 327,
1535  243, -1, 337, 137, 340, 243, -1, 337, 137, 340,
1536  137, 327, 243, -1, 337, 243, -1, 337, 137, 327,
1537  243, -1, 340, 243, -1, 340, 137, 327, 243, -1,
1538  242, -1, 362, -1, 246, -1, 122, 247, 122, -1,
1539  78, -1, 122, 244, 247, 122, -1, 356, -1, 356,
1540  142, 248, 356, -1, 249, -1, 248, 137, 249, -1,
1541  52, -1, 323, -1, -1, -1, -1, -1, 251, 252,
1542  255, 253, 254, 256, -1, 139, 322, 247, 140, -1,
1543  322, -1, 114, 154, 135, -1, 29, 154, 233, -1,
1544  -1, 28, 258, 271, 10, -1, 169, 257, -1, 259,
1545  354, 350, 193, -1, 259, 354, 350, 193, 265, -1,
1546  259, 354, 350, 196, 257, -1, 168, 192, -1, -1,
1547  222, 353, 350, 261, 193, -1, -1, 222, 88, 350,
1548  262, 192, -1, 222, 88, 351, -1, -1, 222, 353,
1549  263, 192, -1, -1, 222, 88, 264, 192, -1, 32,
1550  192, -1, 32, -1, 222, 136, 194, 358, -1, -1,
1551  134, 266, 268, 135, -1, -1, 26, 267, 271, 10,
1552  -1, -1, -1, 269, 270, 245, 154, -1, -1, -1,
1553  272, 273, 245, 154, -1, 17, 200, 234, 154, 275,
1554  -1, 237, -1, 274, -1, 8, 277, 278, 234, 154,
1555  276, -1, 362, -1, 189, -1, 202, -1, 362, -1,
1556  91, 177, -1, 362, -1, 9, 154, -1, 362, -1,
1557  309, -1, 306, -1, 308, -1, 282, -1, 64, -1,
1558  283, -1, 282, 283, -1, 103, 295, 113, -1, 104,
1559  296, 113, -1, 105, 297, 67, -1, 106, 143, 113,
1560  -1, 106, 287, 113, -1, -1, 287, 288, 143, -1,
1561  298, -1, 288, 298, -1, 108, 143, 113, -1, 108,
1562  290, 113, -1, -1, 290, 288, 143, -1, 107, 143,
1563  113, -1, 107, 293, 113, -1, 109, 143, 113, -1,
1564  109, 294, 113, -1, -1, 293, 63, 143, -1, -1,
1565  294, 63, 143, -1, -1, 295, 298, -1, -1, 296,
1566  298, -1, -1, 297, 298, -1, 63, -1, -1, 112,
1567  299, 305, -1, -1, -1, -1, -1, -1, 110, 300,
1568  301, 302, 303, 304, 154, 111, -1, 54, -1, 55,
1569  -1, 57, -1, 315, -1, 102, 307, -1, 180, -1,
1570  55, -1, 54, -1, 57, -1, 102, 296, 113, -1,
1571  310, -1, 130, 310, -1, 59, -1, 60, -1, 61,
1572  -1, 62, -1, 52, -1, 55, -1, 54, -1, 56,
1573  -1, 57, -1, 34, -1, 33, -1, 35, -1, 36,
1574  -1, 50, -1, 49, -1, 51, -1, 311, -1, 312,
1575  -1, 311, -1, 312, -1, 65, -1, 66, -1, -1,
1576  121, 317, 163, 360, -1, -1, 139, 322, 357, -1,
1577  -1, 319, 322, 360, -1, 332, 137, 334, 343, -1,
1578  332, 343, -1, 334, 343, -1, 342, -1, 137, 320,
1579  -1, -1, 327, 137, 338, 137, 340, 321, -1, 327,
1580  137, 338, 137, 340, 137, 327, 321, -1, 327, 137,
1581  338, 321, -1, 327, 137, 338, 137, 327, 321, -1,
1582  327, 137, 340, 321, -1, 327, 137, 340, 137, 327,
1583  321, -1, 327, 321, -1, 338, 137, 340, 321, -1,
1584  338, 137, 340, 137, 327, 321, -1, 338, 321, -1,
1585  338, 137, 327, 321, -1, 340, 321, -1, 340, 137,
1586  327, 321, -1, 320, -1, -1, 56, -1, 55, -1,
1587  54, -1, 57, -1, 323, -1, 52, -1, 324, -1,
1588  325, -1, 92, 241, 357, -1, 326, -1, 327, 137,
1589  326, -1, 58, -1, 328, 189, -1, 328, -1, 328,
1590  222, -1, 328, -1, 330, -1, 331, 137, 330, -1,
1591  329, -1, 332, 137, 329, -1, 70, -1, 99, -1,
1592  333, 52, -1, 333, -1, 325, 117, 189, -1, 325,
1593  117, 222, -1, 336, -1, 337, 137, 336, -1, 335,
1594  -1, 338, 137, 335, -1, 127, -1, 98, -1, 339,
1595  52, -1, 339, -1, 124, -1, 100, -1, 341, 52,
1596  -1, 137, 342, -1, 362, -1, 313, -1, -1, 139,
1597  345, 162, 357, -1, 362, -1, 347, 359, -1, 348,
1598  -1, 347, 137, 348, -1, 189, 91, 189, -1, 58,
1599  189, -1, 103, 295, 115, 189, -1, 99, 189, -1,
1600  52, -1, 56, -1, 53, -1, 52, -1, 56, -1,
1601  53, -1, 185, -1, 52, -1, 53, -1, 185, -1,
1602  144, -1, 88, -1, 144, -1, 87, -1, 353, -1,
1603  88, -1, -1, 361, -1, -1, 145, -1, 356, 140,
1604  -1, 356, 141, -1, -1, 145, -1, 137, -1, 142,
1605  -1, 145, -1, 360, -1, 361, 142, -1, -1
1606 };
1607 
1608 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
1609 static const yytype_uint16 yyrline[] =
1610 {
1611  0, 994, 994, 994, 1025, 1035, 1044, 1052, 1060, 1066,
1612  1068, 1067, 1088, 1121, 1131, 1140, 1148, 1156, 1162, 1167,
1613  1166, 1187, 1187, 1195, 1203, 1214, 1225, 1233, 1242, 1251,
1614  1264, 1277, 1286, 1298, 1299, 1309, 1314, 1323, 1326, 1331,
1615  1336, 1357, 1362, 1367, 1372, 1377, 1384, 1392, 1401, 1404,
1616  1405, 1413, 1421, 1429, 1437, 1440, 1452, 1453, 1456, 1457,
1617  1469, 1468, 1484, 1494, 1503, 1516, 1525, 1537, 1546, 1558,
1618  1567, 1576, 1584, 1592, 1602, 1603, 1613, 1614, 1624, 1632,
1619  1640, 1648, 1657, 1665, 1674, 1682, 1691, 1699, 1710, 1711,
1620  1721, 1729, 1739, 1747, 1757, 1761, 1765, 1773, 1781, 1789,
1621  1797, 1801, 1805, 1812, 1821, 1830, 1838, 1846, 1854, 1862,
1622  1866, 1870, 1877, 1886, 1889, 1897, 1905, 1915, 1916, 1917,
1623  1918, 1923, 1934, 1935, 1938, 1946, 1949, 1957, 1957, 1967,
1624  1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977,
1625  1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987,
1626  1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999,
1627  1999, 1999, 2000, 2000, 2001, 2001, 2001, 2002, 2002, 2002,
1628  2002, 2003, 2003, 2003, 2003, 2004, 2004, 2004, 2005, 2005,
1629  2005, 2005, 2006, 2006, 2006, 2006, 2007, 2007, 2007, 2007,
1630  2008, 2008, 2008, 2008, 2009, 2009, 2009, 2009, 2010, 2010,
1631  2013, 2017, 2021, 2047, 2052, 2057, 2062, 2067, 2072, 2077,
1632  2087, 2097, 2105, 2113, 2121, 2129, 2137, 2145, 2154, 2162,
1633  2170, 2178, 2186, 2194, 2202, 2210, 2218, 2226, 2234, 2242,
1634  2250, 2258, 2272, 2280, 2288, 2296, 2304, 2312, 2320, 2328,
1635  2328, 2337, 2347, 2353, 2365, 2366, 2370, 2378, 2388, 2396,
1636  2407, 2417, 2418, 2421, 2422, 2423, 2427, 2435, 2445, 2454,
1637  2462, 2472, 2481, 2490, 2490, 2502, 2512, 2516, 2522, 2530,
1638  2538, 2552, 2568, 2569, 2572, 2586, 2601, 2611, 2612, 2613,
1639  2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2630, 2629,
1640  2657, 2657, 2666, 2670, 2665, 2679, 2687, 2695, 2703, 2716,
1641  2724, 2732, 2740, 2748, 2756, 2756, 2765, 2773, 2781, 2791,
1642  2792, 2802, 2806, 2818, 2830, 2830, 2830, 2841, 2841, 2841,
1643  2852, 2863, 2872, 2874, 2871, 2920, 2919, 2941, 2940, 2962,
1644  2961, 2983, 2988, 2982, 3008, 3009, 3008, 3033, 3041, 3049,
1645  3057, 3067, 3079, 3085, 3091, 3097, 3103, 3109, 3115, 3121,
1646  3127, 3133, 3143, 3149, 3154, 3155, 3162, 3167, 3170, 3171,
1647  3184, 3185, 3195, 3196, 3199, 3207, 3217, 3225, 3235, 3243,
1648  3252, 3261, 3269, 3277, 3286, 3298, 3306, 3317, 3321, 3325,
1649  3329, 3335, 3340, 3345, 3349, 3353, 3357, 3361, 3365, 3373,
1650  3377, 3381, 3385, 3389, 3393, 3397, 3401, 3405, 3411, 3412,
1651  3418, 3428, 3437, 3449, 3453, 3463, 3470, 3479, 3487, 3493,
1652  3496, 3501, 3504, 3493, 3523, 3531, 3537, 3542, 3549, 3548,
1653  3563, 3579, 3588, 3600, 3614, 3624, 3623, 3640, 3639, 3655,
1654  3664, 3663, 3680, 3679, 3696, 3704, 3712, 3727, 3726, 3740,
1655  3739, 3754, 3755, 3754, 3764, 3765, 3764, 3774, 3786, 3787,
1656  3790, 3809, 3812, 3820, 3828, 3831, 3835, 3838, 3846, 3849,
1657  3850, 3858, 3861, 3878, 3879, 3880, 3890, 3896, 3902, 3908,
1658  3917, 3928, 3935, 3945, 3953, 3963, 3972, 3983, 3990, 4008,
1659  4017, 4027, 4036, 4047, 4054, 4065, 4072, 4087, 4094, 4105,
1660  4112, 4123, 4130, 4171, 4173, 4172, 4188, 4194, 4198, 4202,
1661  4206, 4187, 4228, 4236, 4244, 4252, 4255, 4266, 4267, 4268,
1662  4269, 4272, 4283, 4284, 4295, 4296, 4297, 4298, 4301, 4302,
1663  4303, 4304, 4305, 4308, 4309, 4310, 4311, 4312, 4313, 4314,
1664  4317, 4330, 4340, 4348, 4358, 4359, 4363, 4362, 4372, 4381,
1665  4391, 4391, 4405, 4409, 4413, 4417, 4423, 4428, 4433, 4437,
1666  4441, 4445, 4449, 4453, 4457, 4461, 4465, 4469, 4473, 4477,
1667  4481, 4485, 4490, 4496, 4506, 4516, 4526, 4538, 4539, 4546,
1668  4555, 4564, 4583, 4590, 4604, 4613, 4623, 4635, 4644, 4655,
1669  4663, 4674, 4682, 4692, 4693, 4696, 4701, 4708, 4720, 4732,
1670  4740, 4756, 4764, 4780, 4781, 4784, 4797, 4808, 4809, 4812,
1671  4829, 4833, 4843, 4853, 4853, 4882, 4883, 4893, 4900, 4924,
1672  4936, 4944, 4952, 4966, 4967, 4968, 4971, 4972, 4973, 4974,
1673  4977, 4978, 4979, 4982, 4987, 4994, 5002, 5012, 5013, 5023,
1674  5024, 5027, 5028, 5031, 5034, 5037, 5038, 5039, 5042, 5043,
1675  5046, 5047, 5051
1676 };
1677 #endif
1678 
1679 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1680 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1681  First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1682 static const char *const yytname[] =
1683 {
1684  "\"end-of-input\"", "error", "$undefined", "keyword_class",
1685  "keyword_module", "keyword_def", "keyword_undef", "keyword_begin",
1686  "keyword_rescue", "keyword_ensure", "keyword_end", "keyword_if",
1687  "keyword_unless", "keyword_then", "keyword_elsif", "keyword_else",
1688  "keyword_case", "keyword_when", "keyword_while", "keyword_until",
1689  "keyword_for", "keyword_break", "keyword_next", "keyword_redo",
1690  "keyword_retry", "keyword_in", "keyword_do", "keyword_do_cond",
1691  "keyword_do_block", "keyword_do_LAMBDA", "keyword_return",
1692  "keyword_yield", "keyword_super", "keyword_self", "keyword_nil",
1693  "keyword_true", "keyword_false", "keyword_and", "keyword_or",
1694  "keyword_not", "modifier_if", "modifier_unless", "modifier_while",
1695  "modifier_until", "modifier_rescue", "keyword_alias", "keyword_defined",
1696  "keyword_BEGIN", "keyword_END", "keyword__LINE__", "keyword__FILE__",
1697  "keyword__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR",
1698  "tCONSTANT", "tCVAR", "tLABEL", "tINTEGER", "tFLOAT", "tRATIONAL",
1699  "tIMAGINARY", "tSTRING_CONTENT", "tCHAR", "tNTH_REF", "tBACK_REF",
1700  "tREGEXP_END", "\"unary+\"", "\"unary-\"", "\"**\"", "\"<=>\"", "\"==\"",
1701  "\"===\"", "\"!=\"", "\">=\"", "\"<=\"", "\"&&\"", "\"||\"", "\"=~\"",
1702  "\"!~\"", "\"..\"", "\"...\"", "\"[]\"", "\"[]=\"", "\"<<\"", "\">>\"",
1703  "\"&.\"", "\"::\"", "\":: at EXPR_BEG\"", "tOP_ASGN", "\"=>\"", "\"(\"",
1704  "\"( arg\"", "\")\"", "\"[\"", "\"{\"", "\"{ arg\"", "\"*\"",
1705  "\"**arg\"", "\"&\"", "\"->\"", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG",
1706  "tREGEXP_BEG", "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG",
1707  "tQSYMBOLS_BEG", "tSTRING_DBEG", "tSTRING_DEND", "tSTRING_DVAR",
1708  "tSTRING_END", "tLAMBEG", "tLABEL_END", "tLOWEST", "'='", "'?'", "':'",
1709  "'>'", "'<'", "'|'", "'^'", "'&'", "'+'", "'-'", "'*'", "'/'", "'%'",
1710  "tUMINUS_NUM", "'!'", "'~'", "tLAST_TOKEN", "'{'", "'}'", "'['", "','",
1711  "'`'", "'('", "')'", "']'", "';'", "' '", "'.'", "'\\n'", "$accept",
1712  "program", "$@1", "top_compstmt", "top_stmts", "top_stmt", "$@2",
1713  "bodystmt", "compstmt", "stmts", "stmt_or_begin", "$@3", "stmt", "$@4",
1714  "command_asgn", "command_rhs", "expr", "expr_value", "command_call",
1715  "block_command", "cmd_brace_block", "@5", "fcall", "command", "mlhs",
1716  "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head", "mlhs_post",
1717  "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", "fitem",
1718  "undef_list", "$@6", "op", "reswords", "arg", "$@7", "arg_value",
1719  "aref_args", "arg_rhs", "paren_args", "opt_paren_args", "opt_call_args",
1720  "call_args", "command_args", "@8", "block_arg", "opt_block_arg", "args",
1721  "mrhs_arg", "mrhs", "primary", "@9", "$@10", "$@11", "$@12", "$@13",
1722  "$@14", "$@15", "$@16", "$@17", "$@18", "$@19", "@20", "@21", "@22",
1723  "@23", "@24", "@25", "@26", "primary_value", "k_begin", "k_if",
1724  "k_unless", "k_while", "k_until", "k_case", "k_for", "k_class",
1725  "k_module", "k_def", "k_end", "then", "do", "if_tail", "opt_else",
1726  "for_var", "f_marg", "f_marg_list", "f_margs", "block_args_tail",
1727  "opt_block_args_tail", "block_param", "opt_block_param",
1728  "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "lambda", "@27",
1729  "@28", "@29", "@30", "f_larglist", "lambda_body", "do_block", "@31",
1730  "block_call", "method_call", "@32", "@33", "@34", "@35", "brace_block",
1731  "@36", "@37", "brace_body", "@38", "@39", "do_body", "@40", "@41",
1732  "case_body", "cases", "opt_rescue", "exc_list", "exc_var", "opt_ensure",
1733  "literal", "strings", "string", "string1", "xstring", "regexp", "words",
1734  "word_list", "word", "symbols", "symbol_list", "qwords", "qsymbols",
1735  "qword_list", "qsym_list", "string_contents", "xstring_contents",
1736  "regexp_contents", "string_content", "@42", "@43", "@44", "@45", "@46",
1737  "@47", "string_dvar", "symbol", "sym", "dsym", "numeric",
1738  "simple_numeric", "user_variable", "keyword_variable", "var_ref",
1739  "var_lhs", "backref", "superclass", "$@48", "f_arglist", "@49",
1740  "args_tail", "opt_args_tail", "f_args", "f_bad_arg", "f_norm_arg",
1741  "f_arg_asgn", "f_arg_item", "f_arg", "f_label", "f_kw", "f_block_kw",
1742  "f_block_kwarg", "f_kwarg", "kwrest_mark", "f_kwrest", "f_opt",
1743  "f_block_opt", "f_block_optarg", "f_optarg", "restarg_mark",
1744  "f_rest_arg", "blkarg_mark", "f_block_arg", "opt_f_block_arg",
1745  "singleton", "$@50", "assoc_list", "assocs", "assoc", "operation",
1746  "operation2", "operation3", "dot_or_colon", "call_op", "call_op2",
1747  "opt_terms", "opt_nl", "rparen", "rbracket", "trailer", "term", "terms",
1748  "none", 0
1749 };
1750 #endif
1751 
1752 # ifdef YYPRINT
1753 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1754  token YYLEX-NUM. */
1755 static const yytype_uint16 yytoknum[] =
1756 {
1757  0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1758  265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1759  275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1760  285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1761  295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1762  305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1763  315, 316, 317, 318, 319, 320, 321, 322, 130, 131,
1764  132, 134, 139, 140, 141, 138, 137, 148, 149, 142,
1765  143, 128, 129, 144, 145, 135, 136, 150, 323, 324,
1766  325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1767  335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
1768  345, 346, 347, 348, 349, 350, 351, 61, 63, 58,
1769  62, 60, 124, 94, 38, 43, 45, 42, 47, 37,
1770  352, 33, 126, 353, 123, 125, 91, 44, 96, 40,
1771  41, 93, 59, 32, 46, 10
1772 };
1773 # endif
1774 
1775 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1776 static const yytype_uint16 yyr1[] =
1777 {
1778  0, 146, 148, 147, 149, 150, 150, 150, 150, 151,
1779  152, 151, 153, 154, 155, 155, 155, 155, 156, 157,
1780  156, 159, 158, 158, 158, 158, 158, 158, 158, 158,
1781  158, 158, 158, 158, 158, 158, 158, 158, 160, 160,
1782  160, 160, 160, 160, 160, 160, 161, 161, 161, 162,
1783  162, 162, 162, 162, 162, 163, 164, 164, 165, 165,
1784  167, 166, 168, 169, 169, 169, 169, 169, 169, 169,
1785  169, 169, 169, 169, 170, 170, 171, 171, 172, 172,
1786  172, 172, 172, 172, 172, 172, 172, 172, 173, 173,
1787  174, 174, 175, 175, 176, 176, 176, 176, 176, 176,
1788  176, 176, 176, 177, 177, 177, 177, 177, 177, 177,
1789  177, 177, 178, 178, 179, 179, 179, 180, 180, 180,
1790  180, 180, 181, 181, 182, 182, 183, 184, 183, 185,
1791  185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
1792  185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
1793  185, 185, 185, 185, 185, 185, 185, 185, 185, 186,
1794  186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
1795  186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
1796  186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
1797  186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
1798  187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
1799  187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
1800  187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
1801  187, 187, 187, 187, 187, 187, 187, 187, 187, 188,
1802  187, 187, 187, 189, 190, 190, 190, 190, 191, 191,
1803  192, 193, 193, 194, 194, 194, 194, 194, 195, 195,
1804  195, 195, 195, 197, 196, 198, 199, 199, 200, 200,
1805  200, 200, 201, 201, 202, 202, 202, 203, 203, 203,
1806  203, 203, 203, 203, 203, 203, 203, 203, 204, 203,
1807  205, 203, 206, 207, 203, 203, 203, 203, 203, 203,
1808  203, 203, 203, 203, 208, 203, 203, 203, 203, 203,
1809  203, 203, 203, 203, 209, 210, 203, 211, 212, 203,
1810  203, 203, 213, 214, 203, 215, 203, 216, 203, 217,
1811  203, 218, 219, 203, 220, 221, 203, 203, 203, 203,
1812  203, 222, 223, 224, 225, 226, 227, 228, 229, 230,
1813  231, 232, 233, 234, 234, 234, 235, 235, 236, 236,
1814  237, 237, 238, 238, 239, 239, 240, 240, 241, 241,
1815  241, 241, 241, 241, 241, 241, 241, 242, 242, 242,
1816  242, 243, 243, 244, 244, 244, 244, 244, 244, 244,
1817  244, 244, 244, 244, 244, 244, 244, 244, 245, 245,
1818  246, 246, 246, 247, 247, 248, 248, 249, 249, 251,
1819  252, 253, 254, 250, 255, 255, 256, 256, 258, 257,
1820  259, 259, 259, 259, 260, 261, 260, 262, 260, 260,
1821  263, 260, 264, 260, 260, 260, 260, 266, 265, 267,
1822  265, 269, 270, 268, 272, 273, 271, 274, 275, 275,
1823  276, 276, 277, 277, 277, 278, 278, 279, 279, 280,
1824  280, 280, 281, 282, 282, 282, 283, 284, 285, 286,
1825  286, 287, 287, 288, 288, 289, 289, 290, 290, 291,
1826  291, 292, 292, 293, 293, 294, 294, 295, 295, 296,
1827  296, 297, 297, 298, 299, 298, 300, 301, 302, 303,
1828  304, 298, 305, 305, 305, 305, 306, 307, 307, 307,
1829  307, 308, 309, 309, 310, 310, 310, 310, 311, 311,
1830  311, 311, 311, 312, 312, 312, 312, 312, 312, 312,
1831  313, 313, 314, 314, 315, 315, 317, 316, 316, 318,
1832  319, 318, 320, 320, 320, 320, 321, 321, 322, 322,
1833  322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
1834  322, 322, 322, 323, 323, 323, 323, 324, 324, 325,
1835  326, 326, 327, 327, 328, 329, 329, 330, 330, 331,
1836  331, 332, 332, 333, 333, 334, 334, 335, 336, 337,
1837  337, 338, 338, 339, 339, 340, 340, 341, 341, 342,
1838  343, 343, 344, 345, 344, 346, 346, 347, 347, 348,
1839  348, 348, 348, 349, 349, 349, 350, 350, 350, 350,
1840  351, 351, 351, 352, 352, 353, 353, 354, 354, 355,
1841  355, 356, 356, 357, 358, 359, 359, 359, 360, 360,
1842  361, 361, 362
1843 };
1844 
1845 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
1846 static const yytype_uint8 yyr2[] =
1847 {
1848  0, 2, 0, 2, 2, 1, 1, 3, 2, 1,
1849  0, 5, 4, 2, 1, 1, 3, 2, 1, 0,
1850  5, 0, 4, 3, 3, 3, 2, 3, 3, 3,
1851  3, 3, 4, 1, 3, 3, 3, 1, 3, 3,
1852  6, 5, 5, 5, 5, 3, 1, 3, 1, 1,
1853  3, 3, 3, 2, 1, 1, 1, 1, 1, 4,
1854  0, 4, 1, 2, 3, 4, 5, 4, 5, 2,
1855  2, 2, 2, 2, 1, 3, 1, 3, 1, 2,
1856  3, 5, 2, 4, 2, 4, 1, 3, 1, 3,
1857  2, 3, 1, 3, 1, 1, 4, 3, 3, 3,
1858  3, 2, 1, 1, 1, 4, 3, 3, 3, 3,
1859  2, 1, 1, 1, 2, 1, 3, 1, 1, 1,
1860  1, 1, 1, 1, 1, 1, 1, 0, 4, 1,
1861  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1862  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1863  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1864  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1865  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1866  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1867  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1868  3, 3, 6, 5, 5, 5, 5, 4, 3, 3,
1869  3, 3, 3, 3, 3, 3, 3, 4, 2, 2,
1870  3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
1871  3, 3, 3, 2, 2, 3, 3, 3, 3, 0,
1872  4, 6, 1, 1, 1, 2, 4, 2, 1, 3,
1873  3, 1, 1, 1, 1, 2, 4, 2, 1, 2,
1874  2, 4, 1, 0, 2, 2, 2, 1, 1, 2,
1875  3, 4, 1, 1, 3, 4, 2, 1, 1, 1,
1876  1, 1, 1, 1, 1, 1, 1, 1, 0, 4,
1877  0, 3, 0, 0, 5, 3, 3, 2, 3, 3,
1878  1, 4, 3, 1, 0, 6, 4, 3, 2, 1,
1879  2, 2, 6, 6, 0, 0, 7, 0, 0, 7,
1880  5, 4, 0, 0, 9, 0, 6, 0, 7, 0,
1881  5, 0, 0, 7, 0, 0, 9, 1, 1, 1,
1882  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1883  1, 1, 1, 1, 1, 2, 1, 1, 1, 5,
1884  1, 2, 1, 1, 1, 3, 1, 3, 1, 4,
1885  6, 3, 5, 2, 4, 1, 3, 4, 2, 2,
1886  1, 2, 0, 6, 8, 4, 6, 4, 2, 6,
1887  2, 4, 6, 2, 4, 2, 4, 1, 1, 1,
1888  3, 1, 4, 1, 4, 1, 3, 1, 1, 0,
1889  0, 0, 0, 6, 4, 1, 3, 3, 0, 4,
1890  2, 4, 5, 5, 2, 0, 5, 0, 5, 3,
1891  0, 4, 0, 4, 2, 1, 4, 0, 4, 0,
1892  4, 0, 0, 4, 0, 0, 4, 5, 1, 1,
1893  6, 1, 1, 1, 1, 2, 1, 2, 1, 1,
1894  1, 1, 1, 1, 1, 2, 3, 3, 3, 3,
1895  3, 0, 3, 1, 2, 3, 3, 0, 3, 3,
1896  3, 3, 3, 0, 3, 0, 3, 0, 2, 0,
1897  2, 0, 2, 1, 0, 3, 0, 0, 0, 0,
1898  0, 8, 1, 1, 1, 1, 2, 1, 1, 1,
1899  1, 3, 1, 2, 1, 1, 1, 1, 1, 1,
1900  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1901  1, 1, 1, 1, 1, 1, 0, 4, 0, 3,
1902  0, 3, 4, 2, 2, 1, 2, 0, 6, 8,
1903  4, 6, 4, 6, 2, 4, 6, 2, 4, 2,
1904  4, 1, 0, 1, 1, 1, 1, 1, 1, 1,
1905  1, 3, 1, 3, 1, 2, 1, 2, 1, 1,
1906  3, 1, 3, 1, 1, 2, 1, 3, 3, 1,
1907  3, 1, 3, 1, 1, 2, 1, 1, 1, 2,
1908  2, 1, 1, 0, 4, 1, 2, 1, 3, 3,
1909  2, 4, 2, 1, 1, 1, 1, 1, 1, 1,
1910  1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
1911  1, 0, 1, 2, 2, 0, 1, 1, 1, 1,
1912  1, 2, 0
1913 };
1914 
1915 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
1916  Performed when YYTABLE doesn't specify something else to do. Zero
1917  means the default is an error. */
1918 static const yytype_uint16 yydefact[] =
1919 {
1920  2, 0, 0, 1, 0, 349, 350, 351, 0, 342,
1921  343, 344, 347, 345, 346, 348, 337, 338, 339, 340,
1922  300, 263, 263, 524, 523, 525, 526, 631, 0, 631,
1923  10, 0, 528, 527, 529, 613, 615, 520, 519, 614,
1924  522, 514, 515, 516, 517, 463, 534, 535, 0, 0,
1925  0, 0, 292, 642, 642, 86, 409, 489, 487, 489,
1926  491, 471, 483, 477, 485, 0, 0, 0, 3, 629,
1927  6, 9, 33, 37, 49, 57, 263, 56, 0, 74,
1928  0, 78, 88, 0, 54, 242, 0, 288, 0, 0,
1929  314, 317, 629, 0, 0, 0, 0, 58, 309, 277,
1930  278, 462, 464, 279, 280, 281, 283, 282, 284, 460,
1931  461, 459, 512, 530, 531, 285, 0, 286, 62, 5,
1932  8, 169, 180, 170, 193, 166, 186, 176, 175, 196,
1933  197, 191, 174, 173, 168, 194, 198, 199, 178, 167,
1934  181, 185, 187, 179, 172, 188, 195, 190, 189, 182,
1935  192, 177, 165, 184, 183, 164, 171, 162, 163, 159,
1936  160, 161, 117, 119, 118, 154, 155, 150, 132, 133,
1937  134, 141, 138, 140, 135, 136, 156, 157, 142, 143,
1938  147, 151, 137, 139, 129, 130, 131, 144, 145, 146,
1939  148, 149, 152, 153, 158, 122, 124, 126, 26, 120,
1940  121, 123, 125, 0, 0, 0, 0, 0, 0, 0,
1941  487, 0, 258, 0, 243, 268, 72, 262, 642, 0,
1942  530, 531, 0, 286, 642, 607, 73, 71, 631, 70,
1943  0, 642, 434, 69, 631, 632, 0, 0, 21, 239,
1944  0, 0, 337, 338, 300, 303, 435, 0, 218, 0,
1945  219, 297, 0, 19, 0, 0, 629, 15, 18, 631,
1946  76, 14, 631, 0, 0, 635, 635, 244, 0, 0,
1947  635, 605, 631, 0, 0, 0, 84, 341, 0, 94,
1948  95, 102, 311, 410, 509, 508, 510, 507, 0, 506,
1949  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1950  0, 513, 53, 233, 234, 638, 639, 4, 640, 630,
1951  0, 0, 0, 0, 0, 0, 0, 439, 437, 424,
1952  63, 308, 418, 420, 0, 90, 0, 82, 79, 0,
1953  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1954  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1955  0, 0, 0, 0, 0, 0, 626, 432, 642, 625,
1956  430, 0, 55, 0, 0, 0, 0, 629, 0, 630,
1957  0, 363, 362, 0, 0, 530, 531, 286, 112, 113,
1958  0, 0, 115, 538, 0, 530, 531, 286, 329, 189,
1959  182, 192, 177, 159, 160, 161, 117, 118, 603, 331,
1960  602, 0, 628, 627, 0, 310, 465, 0, 0, 127,
1961  610, 297, 269, 612, 265, 0, 0, 0, 0, 259,
1962  267, 432, 642, 430, 0, 0, 0, 260, 631, 0,
1963  302, 264, 631, 254, 642, 642, 253, 631, 307, 52,
1964  23, 25, 24, 0, 304, 0, 0, 0, 432, 430,
1965  0, 17, 0, 631, 295, 13, 630, 75, 291, 293,
1966  298, 637, 636, 245, 637, 247, 299, 606, 0, 101,
1967  513, 92, 87, 0, 432, 642, 430, 562, 493, 496,
1968  494, 511, 490, 466, 488, 467, 468, 492, 469, 470,
1969  0, 473, 479, 0, 480, 475, 476, 0, 481, 0,
1970  482, 0, 641, 7, 27, 28, 29, 30, 31, 50,
1971  51, 444, 441, 60, 64, 444, 0, 34, 273, 0,
1972  36, 272, 631, 0, 80, 91, 48, 38, 46, 0,
1973  248, 268, 200, 35, 0, 286, 216, 223, 228, 229,
1974  230, 225, 227, 237, 238, 231, 232, 209, 210, 235,
1975  236, 631, 224, 226, 220, 221, 222, 211, 212, 213,
1976  214, 215, 616, 618, 617, 619, 0, 263, 429, 631,
1977  616, 618, 617, 619, 0, 263, 0, 642, 354, 0,
1978  353, 0, 0, 0, 0, 0, 0, 297, 432, 642,
1979  430, 322, 327, 112, 113, 114, 536, 325, 432, 642,
1980  430, 0, 0, 332, 624, 623, 334, 616, 617, 263,
1981  39, 248, 201, 45, 208, 0, 0, 609, 0, 270,
1982  266, 642, 616, 617, 631, 616, 617, 608, 301, 633,
1983  250, 255, 257, 306, 22, 0, 240, 0, 32, 427,
1984  425, 207, 0, 77, 16, 631, 635, 0, 85, 620,
1985  100, 631, 616, 617, 568, 565, 564, 563, 566, 574,
1986  583, 0, 594, 584, 598, 597, 593, 562, 411, 561,
1987  415, 567, 569, 570, 572, 547, 576, 581, 642, 586,
1988  642, 591, 547, 596, 547, 0, 545, 497, 0, 472,
1989  474, 484, 478, 486, 217, 0, 445, 0, 442, 441,
1990  0, 276, 0, 89, 83, 0, 0, 0, 0, 432,
1991  642, 430, 0, 0, 0, 433, 67, 0, 0, 436,
1992  0, 0, 431, 65, 642, 352, 289, 642, 642, 451,
1993  642, 355, 642, 357, 315, 356, 318, 0, 0, 321,
1994  620, 296, 631, 616, 617, 0, 0, 0, 0, 112,
1995  113, 116, 631, 0, 631, 540, 0, 252, 421, 59,
1996  251, 128, 611, 271, 261, 0, 0, 436, 0, 0,
1997  642, 631, 11, 0, 294, 246, 93, 436, 0, 375,
1998  366, 368, 631, 364, 631, 412, 0, 0, 554, 575,
1999  0, 543, 601, 585, 0, 544, 0, 557, 595, 0,
2000  559, 599, 498, 502, 503, 504, 495, 505, 440, 642,
2001  438, 642, 0, 419, 0, 274, 81, 47, 249, 616,
2002  617, 631, 616, 617, 0, 44, 205, 43, 206, 68,
2003  428, 634, 0, 41, 203, 42, 204, 66, 426, 452,
2004  453, 642, 454, 0, 642, 360, 0, 0, 358, 0,
2005  0, 0, 320, 0, 0, 436, 0, 0, 0, 0,
2006  436, 330, 604, 562, 0, 562, 335, 422, 423, 0,
2007  256, 305, 20, 631, 0, 373, 0, 571, 0, 403,
2008  0, 587, 546, 573, 547, 547, 582, 642, 600, 547,
2009  592, 547, 570, 547, 499, 401, 631, 0, 399, 398,
2010  0, 61, 275, 436, 241, 40, 202, 0, 0, 456,
2011  361, 0, 12, 458, 0, 312, 313, 0, 0, 270,
2012  642, 323, 0, 537, 326, 631, 0, 0, 540, 365,
2013  376, 0, 371, 367, 414, 0, 0, 0, 413, 0,
2014  550, 0, 552, 542, 0, 558, 0, 555, 560, 500,
2015  397, 631, 0, 570, 382, 578, 579, 642, 642, 589,
2016  382, 382, 380, 446, 443, 0, 455, 0, 530, 531,
2017  286, 0, 457, 0, 316, 319, 448, 449, 447, 0,
2018  328, 539, 333, 541, 0, 0, 374, 0, 369, 407,
2019  631, 405, 408, 0, 0, 547, 547, 547, 547, 0,
2020  0, 400, 0, 388, 390, 0, 577, 0, 378, 379,
2021  0, 393, 0, 395, 297, 432, 642, 430, 642, 642,
2022  0, 0, 372, 0, 0, 404, 417, 416, 551, 0,
2023  548, 553, 556, 0, 402, 588, 381, 382, 382, 297,
2024  432, 580, 642, 382, 590, 382, 382, 620, 296, 631,
2025  616, 617, 450, 359, 324, 336, 370, 406, 547, 501,
2026  0, 385, 0, 387, 620, 296, 377, 0, 394, 0,
2027  391, 396, 436, 549, 382, 382, 382, 382, 386, 0,
2028  383, 389, 392, 382, 384
2029 };
2030 
2031 /* YYDEFGOTO[NTERM-NUM]. */
2032 static const yytype_int16 yydefgoto[] =
2033 {
2034  -1, 1, 2, 68, 69, 70, 240, 576, 577, 256,
2035  257, 452, 258, 443, 72, 527, 73, 363, 74, 75,
2036  514, 699, 247, 77, 78, 259, 79, 80, 81, 472,
2037  82, 213, 382, 383, 195, 196, 197, 198, 615, 565,
2038  200, 84, 445, 215, 264, 532, 232, 758, 432, 433,
2039  229, 230, 217, 419, 434, 520, 521, 85, 361, 262,
2040  263, 645, 635, 365, 850, 366, 851, 745, 979, 748,
2041  746, 601, 603, 755, 756, 928, 249, 87, 88, 89,
2042  90, 91, 92, 93, 94, 95, 96, 726, 579, 734,
2043  847, 848, 374, 780, 781, 782, 1036, 1004, 951, 897,
2044  898, 878, 990, 991, 282, 283, 477, 785, 880, 668,
2045  938, 323, 515, 97, 98, 724, 717, 574, 566, 321,
2046  512, 511, 697, 698, 811, 695, 696, 809, 586, 978,
2047  728, 841, 908, 912, 99, 100, 101, 102, 103, 104,
2048  105, 294, 490, 106, 298, 107, 108, 296, 300, 290,
2049  288, 292, 482, 688, 687, 802, 894, 949, 999, 806,
2050  109, 289, 110, 111, 112, 220, 221, 115, 222, 223,
2051  597, 747, 864, 865, 882, 788, 670, 671, 672, 892,
2052  674, 675, 676, 677, 956, 957, 678, 679, 680, 681,
2053  959, 960, 682, 683, 684, 685, 686, 791, 401, 602,
2054  269, 435, 225, 118, 639, 568, 606, 600, 404, 307,
2055  429, 430, 719, 463, 580, 369, 261
2056 };
2057 
2058 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
2059  STATE-NUM. */
2060 #define YYPACT_NINF -876
2061 static const yytype_int16 yypact[] =
2062 {
2063  -876, 96, 3133, -876, 8152, -876, -876, -876, 7646, -876,
2064  -876, -876, -876, -876, -876, -876, 8269, 8269, -876, -876,
2065  8269, 4485, 4071, -876, -876, -876, -876, 235, 7510, -1,
2066  -876, 81, -876, -876, -876, 3381, 4209, -876, -876, 3519,
2067  -876, -876, -876, -876, -876, -876, -876, -876, 9673, 9673,
2068  172, 5845, -3, 8620, 8971, 7912, -876, 7374, -876, -876,
2069  -876, 234, 278, 284, 295, 1381, 9790, 9673, -876, 333,
2070  -876, 1276, -876, 125, -876, -876, 141, 406, 329, -876,
2071  318, 10024, -876, 363, 2119, 45, 338, -876, 9907, 9907,
2072  -876, -876, 6746, 10137, 10250, 10363, 7237, 12, 67, -876,
2073  -876, 380, -876, -876, -876, -876, -876, -876, -876, -876,
2074  -876, -876, -876, 225, 574, -876, 395, 598, -876, -876,
2075  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2076  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2077  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2078  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2079  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2080  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2081  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2082  -876, -876, -876, -876, -876, -876, -876, -876, 387, -876,
2083  -876, -876, -876, 388, 9673, 473, 5977, 9673, 9673, 9673,
2084  -876, 9673, -876, 454, 2119, 451, -876, -876, 442, 421,
2085  51, 210, 503, 268, 472, -876, -876, -876, 6629, -876,
2086  8269, 8269, -876, -876, 6863, -876, 9907, 523, -876, 488,
2087  507, 6109, -876, -876, -876, 524, 533, 141, -876, 606,
2088  572, 629, 8386, -876, 5845, 504, 333, -876, 1276, -1,
2089  550, -876, -1, 8386, 534, -11, 76, -876, 451, 548,
2090  76, -876, -1, 621, 1381, 10476, 549, -876, 702, 883,
2091  974, 976, -876, -876, -876, -876, -876, -876, 505, -876,
2092  674, 712, 492, 582, 1109, 590, 40, 593, 1152, 601,
2093  47, 626, -876, -876, -876, -876, -876, -876, -876, 6980,
2094  9907, 9907, 9907, 9907, 8386, 9907, 9907, -876, -876, -876,
2095  624, -876, -876, -876, 9088, -876, 5845, 8032, 581, 9088,
2096  9673, 9673, 9673, 9673, 9673, 9673, 9673, 9673, 9673, 9673,
2097  9673, 9673, 9673, 9673, 9673, 9673, 9673, 9673, 9673, 9673,
2098  9673, 9673, 9673, 9673, 9673, 9673, -876, 1985, 8269, -876,
2099  2365, 5182, 125, 116, 116, 9907, 9907, 333, 726, 587,
2100  698, -876, -876, 1000, 733, 66, 129, 136, 52, 730,
2101  9907, 583, -876, 634, 1012, -876, -876, -876, -876, 25,
2102  27, 29, 30, 39, 88, 90, 216, 291, -876, -876,
2103  -876, 299, -876, -876, 2639, -876, -876, 9790, 9790, -876,
2104  -876, 322, -876, -876, -876, 425, 9673, 9673, 8503, -876,
2105  -876, 10765, 8269, 10846, 9673, 9673, 8737, -876, -1, 625,
2106  -876, -876, -1, -876, 635, 637, -876, 49, -876, -876,
2107  -876, -876, -876, 7646, -876, 9673, 6252, 641, 10765, 10846,
2108  9673, 1276, 649, -1, -876, -876, 7097, 648, -876, 1276,
2109  -876, 8854, -876, -876, 8971, -876, -876, -876, 488, 1014,
2110  -876, -876, 654, 10476, 10927, 8269, 11008, 1156, -876, -876,
2111  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2112  287, -876, -876, 657, -876, -876, -876, 390, -876, 663,
2113  -876, 9673, -876, -876, -876, -876, -876, -876, -876, -876,
2114  -876, -876, -876, -876, -876, -876, 9673, -876, 660, 676,
2115  -876, -876, -1, 10476, 679, -876, -876, -876, 767, 719,
2116  1264, -876, -876, -876, 1017, 323, 572, 2443, 2443, 2443,
2117  2443, 969, 969, 3497, 3359, 2443, 2443, 3221, 3221, 818,
2118  818, 2710, 969, 969, 834, 834, 765, 542, 542, 572,
2119  572, 572, 4623, 3657, 4899, 3795, 533, 690, -876, -1,
2120  643, -876, 740, -876, 533, 4347, 830, 833, -876, 5325,
2121  831, 5611, 256, 256, 726, 9205, 830, 147, 11089, 8269,
2122  11170, -876, 125, -876, 1014, -876, -876, -876, 11251, 8269,
2123  2639, 5182, 9907, -876, -876, -876, -876, -876, -876, 1288,
2124  -876, 1391, -876, -876, -876, 7646, 9673, -876, 9673, 451,
2125  -876, 472, 3243, 3933, -1, 339, 382, -876, -876, -876,
2126  -876, 8503, 8737, -876, -876, 9907, 2119, 708, -876, -876,
2127  -876, -876, 6252, 274, -876, -1, 76, 10476, 654, 424,
2128  306, -1, 411, 461, -876, -876, -876, -876, -876, -876,
2129  -876, 1214, -876, -876, -876, -876, -876, 1584, -876, -876,
2130  -876, -876, -876, 731, -876, 710, 9673, -876, 717, 803,
2131  722, -876, 724, 810, 728, 815, -876, -876, 1224, -876,
2132  -876, -876, -876, -876, 572, 860, -876, 738, -876, -876,
2133  865, 739, 9322, -876, 654, 10476, 8386, 9790, 9673, 11332,
2134  8269, 11413, 763, 9790, 9790, -876, 624, 533, 754, 741,
2135  9790, 9790, -876, 624, 533, -876, -876, 9439, 882, -876,
2136  571, -876, 882, -876, -876, -876, -876, 830, 82, -876,
2137  72, 103, -1, 155, 162, 9907, 333, 9907, 5182, 898,
2138  306, -876, -1, 830, 49, 762, 7782, -876, 67, 406,
2139  -876, -876, -876, -876, -876, 9673, 9673, 404, 9673, 9673,
2140  773, 49, -876, 780, -876, -876, -876, 528, 1214, 576,
2141  -876, 779, -1, -876, -1, -876, 9673, 1584, -876, -876,
2142  699, -876, -876, -876, 377, -876, 1584, -876, -876, 1175,
2143  -876, -876, -876, -876, -876, -876, -876, -876, -876, 33,
2144  -876, 33, 782, -876, 9673, 785, 654, -876, 2119, 4761,
2145  5037, -1, 432, 563, 9673, -876, -876, -876, -876, -876,
2146  -876, -876, 9790, -876, -876, -876, -876, -876, -876, 660,
2147  -876, 837, -876, 5728, 921, -876, 9907, 830, -876, 830,
2148  6395, 6395, -876, 9556, 5468, 165, 256, 5182, 333, 830,
2149  -876, -876, -876, 1584, 5182, 1584, -876, -876, -876, 9673,
2150  8737, -876, -876, -1, 1230, 799, 1310, -876, 801, 806,
2151  65, -876, -876, -876, 812, 813, -876, 722, -876, 816,
2152  -876, 829, -876, 816, -876, -876, 1489, 6395, -876, -876,
2153  6109, -876, 832, 662, 2119, -876, -876, 10589, 116, -876,
2154  -876, 6395, -876, -876, 116, -876, -876, 830, 830, -876,
2155  344, -876, 830, -876, -876, -1, 830, 333, 762, -876,
2156  841, 1230, 595, -876, -876, 1382, 6395, 6109, -876, 1584,
2157  -876, 1175, -876, -876, 1175, -876, 1175, -876, -876, -876,
2158  -876, -1, 845, 835, 842, 10702, -876, 843, 722, -876,
2159  846, 847, -876, -876, -876, 931, -876, 1027, 152, 171,
2160  184, 5182, -876, 5325, -876, -876, -876, -876, -876, 6395,
2161  -876, -876, -876, -876, 5182, 1230, 841, 1230, 851, -876,
2162  185, -876, -876, 830, 854, 816, 868, 816, 816, 6512,
2163  869, -876, 10702, 1584, -876, 951, 1051, 699, -876, -876,
2164  1584, -876, 1175, -876, 199, 11494, 8269, 11575, 833, 571,
2165  830, 830, 841, 1230, 1382, -876, -876, -876, -876, 1175,
2166  -876, -876, -876, 902, -876, 1051, -876, 878, 884, -876,
2167  11656, -876, 722, 888, -876, 892, 888, 94, 106, -1,
2168  265, 321, -876, -876, -876, -876, 841, -876, 816, -876,
2169  1584, -876, 1175, -876, 881, 894, -876, 1175, -876, 1175,
2170  -876, -876, 342, -876, 888, 901, 888, 888, -876, 1175,
2171  -876, -876, -876, 888, -876
2172 };
2173 
2174 /* YYPGOTO[NTERM-NUM]. */
2175 static const yytype_int16 yypgoto[] =
2176 {
2177  -876, -876, -876, -382, -876, 15, -876, -543, 2, -876,
2178  575, -876, 43, -876, -209, -325, 180, -58, -59, -876,
2179  -592, -876, 817, -5, 950, -162, 20, -71, -876, -443,
2180  -9, 2093, -302, 949, -56, -876, -12, -876, -876, 5,
2181  -876, 1150, -876, 196, -876, 166, -27, 326, -332, 89,
2182  -13, -876, -401, -159, 7, -876, -308, -26, -876, -876,
2183  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2184  -876, -876, -876, -876, -876, -876, 57, -876, -876, -876,
2185  -876, -876, -876, -876, -876, -876, -876, 159, -356, -546,
2186  38, -656, -876, -792, -817, 282, 150, -336, -876, 241,
2187  -876, -749, -876, 41, -876, -876, -876, -876, -876, -876,
2188  -876, 308, -876, -876, -876, -876, -876, -876, -876, -92,
2189  -876, -876, 369, -876, -876, 555, -876, -876, -566, -876,
2190  54, -876, -876, -876, -876, -876, -876, 978, -876, -876,
2191  -876, -876, 777, -876, -876, -876, -876, -876, -876, 872,
2192  1024, -876, 53, -876, -876, -876, -876, -876, -876, -876,
2193  14, -876, 28, -876, -30, 1683, 1997, 988, 2151, 1319,
2194  -876, -876, 158, -876, -457, 111, -586, -847, -415, -329,
2195  -744, 178, -259, 300, 104, -876, -876, -876, 182, -757,
2196  -875, 86, 316, -876, -721, -876, -70, -582, -876, -876,
2197  -876, 105, -394, -876, -319, -876, -876, -83, -876, -42,
2198  -25, 78, -535, -222, -64, -15, -2
2199 };
2200 
2201 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
2202  positive, shift that token. If negative, reduce the rule which
2203  number is the opposite. If YYTABLE_NINF, syntax error. */
2204 #define YYTABLE_NINF -643
2205 static const yytype_int16 yytable[] =
2206 {
2207  119, 287, 236, 360, 239, 308, 405, 302, 581, 233,
2208  328, 212, 212, 199, 403, 212, 238, 620, 737, 120,
2209  669, 533, 201, 218, 218, 620, 569, 218, 308, 277,
2210  648, 364, 627, 199, 367, 301, 202, 736, 567, 890,
2211  399, 575, 201, 883, 465, 71, 276, 71, 467, 319,
2212  368, 267, 271, 255, 309, 277, 202, 930, 753, 86,
2213  265, 86, 199, 320, 637, 427, 885, 277, 277, 277,
2214  627, 260, 844, 219, 219, 891, 849, 219, -613, 595,
2215  704, 784, 610, 613, 933, 609, 315, 316, 992, 767,
2216  624, -103, 453, 317, 936, 578, 3, -107, 795, 356,
2217  402, 199, 567, 493, 575, 216, 226, -107, 86, 227,
2218  499, 895, 278, -524, 986, -523, 777, -525, -526, -109,
2219  526, 224, 224, 219, 829, 224, 461, -528, -109, 578,
2220  640, 837, -341, -341, 462, 1044, 423, -290, 278, -518,
2221  -518, -532, -290, 651, 235, 219, 219, 952, 673, 219,
2222  373, 384, 384, 494, -104, 896, 359, 640, 266, 270,
2223  500, -111, 315, 316, 522, -103, 449, 317, -103, -524,
2224  1022, -523, -110, -525, -526, 961, -527, 992, -529, 937,
2225  -106, -341, 890, -528, -104, 1044, -613, -108, -518, -341,
2226  -105, -613, 308, 933, 235, 476, -518, -111, 526, 526,
2227  883, 318, 1000, -94, 471, 859, 1056, 855, 255, -98,
2228  669, -616, -110, 464, 455, 241, 420, 860, 996, 853,
2229  319, 462, 420, 212, 305, 212, 212, 306, 251, 436,
2230  620, 620, -527, -616, -529, 218, -107, 218, 627, -107,
2231  -100, 456, -617, 447, 470, -617, 783, 468, -109, 277,
2232  268, -109, 504, 505, 506, 507, 255, 742, 305, 883,
2233  773, 306, 816, 86, 976, 517, -95, 752, 362, 362,
2234  528, 640, 362, -102, 260, 318, 427, 925, -106, 927,
2235  231, 640, 1038, 733, -101, 219, 903, 219, 219, 1045,
2236  590, 219, -97, 219, -103, 451, 751, -103, 86, -99,
2237  -533, 277, -96, 308, -518, 943, 459, 582, 583, 86,
2238  921, 86, 438, -104, 922, -532, -104, 428, 524, 431,
2239  86, 926, 1024, 883, 503, 584, -111, -104, 255, -111,
2240  235, 519, 278, 224, -108, 224, 519, 457, 673, 1075,
2241  458, -110, -103, 484, -110, 487, 260, 491, 528, 528,
2242  478, 491, 71, 212, 977, -105, 436, 508, 425, 843,
2243  -518, 585, -94, 783, 875, 573, 86, 219, 219, 219,
2244  219, 86, 219, 219, 234, 1008, 1009, 293, 821, -521,
2245  235, 219, 854, 86, 278, -111, 534, 604, 825, 827,
2246  567, -75, 575, -296, -296, 833, 835, 479, 305, 480,
2247  410, 306, 471, 412, 413, 414, 669, -106, 669, 573,
2248  -106, -89, 450, 408, 437, 219, 439, 212, 86, 840,
2249  436, 295, 219, 219, 775, 356, 357, 297, 573, 768,
2250  689, 634, 420, 420, 322, -521, -97, 219, 299, -110,
2251  -111, 1021, -296, 605, 119, -617, 324, 277, 199, -98,
2252  -296, 711, 471, 478, 573, 325, -106, 201, 673, 783,
2253  1066, 783, 764, -108, 534, 534, -108, 673, 484, 620,
2254  212, 202, 769, 436, 358, 305, 627, 664, 306, 219,
2255  329, 573, 359, 58, -105, 407, -99, -105, 478, 71,
2256  362, 362, 362, 362, 869, 509, 510, 277, 526, -108,
2257  479, 665, 480, 86, 526, 526, 628, 905, 356, 421,
2258  630, 526, 526, 86, 1072, 633, 783, 988, 735, 735,
2259  518, -105, 720, 621, 409, 531, 712, 234, -97, 411,
2260  278, 643, 219, 692, 673, 479, 673, 480, 483, 715,
2261  616, -98, 417, 690, 718, 362, 362, 722, -97, -106,
2262  690, -97, 971, -96, 716, 478, -97, 422, 973, 486,
2263  592, -98, 723, -616, -98, 359, 646, 953, 478, -98,
2264  783, 416, 783, 612, 614, 729, 776, 440, -99, 418,
2265  278, 730, 757, 732, 212, 846, 843, 436, 441, 442,
2266  612, 614, 738, 424, 212, 573, 759, 436, -99, 718,
2267  703, -99, 479, 761, 480, 573, -99, 760, 783, 426,
2268  673, 764, 330, 617, 619, 479, 641, 480, 481, 420,
2269  199, 277, 268, 526, 1011, 1013, 718, 444, 654, 201,
2270  655, 656, 657, 658, 471, 593, 86, 955, 86, 594,
2271  119, 446, 330, 202, 454, -96, 219, 654, 528, 655,
2272  656, 657, 658, 721, 528, 528, 219, 619, 86, 219,
2273  268, 528, 528, 228, -533, -96, 867, -74, -96, 353,
2274  354, 355, 231, -96, 953, 460, 792, 469, 792, 277,
2275  -108, 953, 857, 466, 1049, 71, 473, 856, 408, 858,
2276  830, -104, 219, 356, 448, 488, 501, 757, 640, 86,
2277  866, 1061, 1063, 492, 278, 212, 495, 1068, 436, 1070,
2278  1071, -95, 701, 874, 498, -111, 573, 718, 525, 450,
2279  888, 513, 760, 774, 888, 842, 845, 718, 845, 502,
2280  845, 953, 987, 720, 519, -102, 770, 478, 1078, 1080,
2281  1081, 1082, 422, 585, 955, 739, -110, 1084, 955, 817,
2282  359, 955, 832, 955, 587, 596, -614, 659, 591, 879,
2283  -106, 199, 278, 86, 534, 629, -101, 219, 420, 660,
2284  534, 534, 631, 528, 632, 478, 638, 534, 534, -105,
2285  -97, 531, 754, 642, 479, -89, 480, 483, 914, 356,
2286  474, 647, 735, 797, 923, 800, 718, -268, 663, 664,
2287  691, 955, 219, 955, 219, 86, 693, 899, 955, 899,
2288  955, 706, 762, 702, 763, 771, 705, -521, -521, 76,
2289  955, 76, 479, 665, 480, 485, 962, 619, 268, -427,
2290  721, 832, 862, 76, 76, 330, 707, 76, 475, 909,
2291  725, 727, 913, 772, 731, 910, 359, 787, 786, 871,
2292  343, 344, 917, 918, 790, 793, 920, -108, -105, 794,
2293  877, 796, 798, 983, -614, 799, -521, 801, 76, -614,
2294  808, 879, 789, 810, -521, 813, -269, -99, -96, 826,
2295  828, 277, 824, 76, 1017, 792, 834, 836, 330, 534,
2296  351, 352, 353, 354, 355, 831, 852, 843, 815, 963,
2297  86, 863, 964, 219, 330, 76, 76, 86, 86, 76,
2298  870, 86, 861, 972, 86, 872, 876, 901, 845, 343,
2299  344, 86, -270, 839, -620, 362, 879, 362, 907, 277,
2300  911, 826, 828, 962, 834, 836, 931, 888, 993, 994,
2301  962, 934, 962, 351, 352, 353, 354, 355, 935, 939,
2302  941, 929, 1002, 944, 86, 792, 792, 86, 350, 351,
2303  352, 353, 354, 355, 967, 1025, 946, 1001, 86, -271,
2304  -530, -530, 887, 1018, 889, 1019, 277, 893, 985, 1003,
2305  1007, 1020, 881, 1010, 1012, -620, -620, 1014, 1023, 1027,
2306  962, 1034, 962, 86, 86, 940, 942, 962, 906, 962,
2307  945, 1033, 947, 981, 948, 1029, 915, 1039, 916, 962,
2308  902, 212, 1006, 1059, 436, 1060, 729, 845, 924, -530,
2309  -616, 1062, 573, 76, 718, 1067, 362, -530, 86, 1069,
2310  86, 644, -620, -617, -620, 906, 86, -616, 1079, 330,
2311  792, 86, -620, 371, 388, 76, 950, 76, 76, 919,
2312  838, 76, 900, 76, 343, 344, 86, 1053, 76, 1035,
2313  873, -531, -531, -286, -286, 1057, 268, 868, 812, 76,
2314  700, 76, 1052, 219, 954, 497, 974, 975, 958, 406,
2315  76, 980, 415, 291, 400, 982, 984, 356, 588, 1037,
2316  886, 348, 349, 350, 351, 352, 353, 354, 355, 356,
2317  598, -297, -297, 884, 356, 709, 1028, 1030, 1031, 1032,
2318  -531, 1041, -286, 0, 356, 1015, 0, 995, -531, 997,
2319  -286, 0, 0, 0, 998, 0, 76, 76, 76, 76,
2320  76, 76, 76, 76, 0, 0, 589, 0, 356, 1040,
2321  0, 76, 0, 76, 359, 0, 76, 0, 599, 0,
2322  -297, 0, 1026, 710, 0, 0, 359, 0, -297, 0,
2323  0, 359, 0, 1016, 0, 0, 214, 214, 0, 1073,
2324  214, 359, 478, 0, 0, 76, 0, 0, 76, 1054,
2325  1055, 0, 76, 76, 0, 958, 0, 599, 1043, 1042,
2326  1046, 0, 958, 0, 958, 359, 0, 76, 248, 250,
2327  0, 0, 0, 214, 214, 0, 0, 1058, 654, 0,
2328  655, 656, 657, 658, 659, 478, 303, 304, 0, 479,
2329  0, 480, 489, 0, 76, 76, 660, 654, 0, 655,
2330  656, 657, 658, 659, 0, 0, 0, 0, 1074, 76,
2331  1076, 0, 958, 0, 958, 660, 0, 1077, 661, 958,
2332  0, 958, 0, 0, 662, 663, 664, 1083, 0, 0,
2333  0, 958, 479, 76, 480, 496, 654, 661, 655, 656,
2334  657, 658, 0, 76, 663, 664, 0, 0, 803, 804,
2335  665, 805, 654, 666, 655, 656, 657, 658, -642, 46,
2336  47, 0, 76, 0, 0, 667, -642, -642, -642, 665,
2337  0, -642, -642, -642, 0, -642, 778, 0, 708, 0,
2338  0, 0, 779, 0, -642, -642, 310, 311, 312, 313,
2339  314, 117, 778, 117, 0, -642, -642, 0, -642, -642,
2340  -642, -642, -642, 0, 330, 331, 332, 333, 334, 335,
2341  336, 337, 338, 339, 340, 341, 342, 0, 0, 343,
2342  344, 0, 0, 0, 214, 0, 0, 214, 214, 214,
2343  0, 303, 654, 0, 655, 656, 657, 658, 0, 0,
2344  117, 0, 0, 0, 281, -642, -642, 0, 214, 0,
2345  214, 214, 345, 0, 346, 347, 348, 349, 350, 351,
2346  352, 353, 354, 355, 0, 0, 76, 0, 76, -642,
2347  281, -243, 778, 0, 0, 0, 76, 0, 932, 0,
2348  0, 0, 377, 387, 387, 0, 76, 0, 76, 76,
2349  0, 0, -642, -642, 0, 0, 0, 231, -642, 0,
2350  -642, 0, -642, -642, 989, 708, 655, 656, 657, 658,
2351  41, 42, 43, 44, 0, 0, 0, 0, 0, 0,
2352  0, 0, 76, 0, 0, 0, 0, 0, 0, 76,
2353  0, 330, 331, 332, 333, 334, 335, 336, 337, 338,
2354  339, 340, 341, 342, 214, 0, 343, 344, 0, 530,
2355  536, 537, 538, 539, 540, 541, 542, 543, 544, 545,
2356  546, 547, 548, 549, 550, 551, 552, 553, 554, 555,
2357  556, 557, 558, 559, 560, 561, 0, 0, 214, 345,
2358  0, 346, 347, 348, 349, 350, 351, 352, 353, 354,
2359  355, 0, 0, 76, 76, 117, 0, 76, 0, 0,
2360  76, 76, 0, 0, 0, 0, 0, 76, 76, 0,
2361  0, 654, 0, 655, 656, 657, 658, 659, 0, 0,
2362  0, 0, 0, 0, 0, 0, 0, 611, 611, 660,
2363  117, 0, 76, 0, 76, 76, 611, 214, 214, 0,
2364  0, 117, 214, 117, 611, 611, 214, 0, 0, 0,
2365  0, 661, 117, 0, 0, 0, 0, 662, 663, 664,
2366  0, 0, 0, 0, 281, 636, 0, 0, 0, 0,
2367  611, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2368  0, 214, 0, 665, 214, 0, 666, 0, 0, 0,
2369  0, 0, 0, 0, 0, 214, 0, 0, 117, 0,
2370  0, 0, 0, 117, 235, 0, 654, 0, 655, 656,
2371  657, 658, 659, 0, 0, 117, 281, 0, 535, 76,
2372  0, 694, 0, 0, 660, 0, 0, 0, 0, 0,
2373  76, 0, 0, 76, 0, 0, 214, 76, 76, 0,
2374  0, 76, 0, 0, 76, 0, 661, 0, 0, 0,
2375  117, 76, 662, 663, 664, 113, 0, 113, 0, 0,
2376  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2377  0, 0, 0, 0, 0, 0, 0, 0, 665, 0,
2378  0, 666, 0, 0, 76, 0, 0, 76, 0, 0,
2379  0, 0, 0, 0, 0, 0, 535, 535, 76, 0,
2380  0, 0, 0, 0, 113, 214, 0, 0, 279, 214,
2381  0, 0, 0, 0, 0, 0, 0, 0, 0, 214,
2382  0, 0, 0, 76, 76, 0, 0, 0, 0, 0,
2383  0, 0, 0, 0, 279, 117, 214, 0, 214, 0,
2384  0, 0, 0, 0, 0, 117, 375, 385, 385, 385,
2385  0, 214, 214, 0, 0, 0, 0, 0, 76, 0,
2386  76, 0, 281, 0, 0, 0, 76, 0, 0, 0,
2387  0, 76, 0, 0, 0, 0, 0, 0, 0, 0,
2388  0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
2389  0, 0, 0, 0, 0, 0, 214, 0, 0, 0,
2390  0, 0, 0, 76, 0, 0, 0, 0, 0, 0,
2391  0, 0, 281, 0, 0, 0, 0, 0, 0, 0,
2392  0, 0, 214, 0, 0, 0, 0, 611, 818, 0,
2393  214, 0, 0, 611, 611, 0, 0, 0, 0, 0,
2394  611, 611, 0, 0, 0, 0, 0, 214, 0, 0,
2395  0, 0, 0, 0, 0, 0, 0, 0, 0, 113,
2396  0, 0, 0, 0, 0, 0, 0, 0, 117, 0,
2397  117, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2398  0, 0, 0, 0, 0, 611, 611, 0, 611, 611,
2399  117, 0, 0, 0, 113, 0, 0, 0, 0, 0,
2400  0, 0, 0, 0, 0, 113, 214, 113, 0, 0,
2401  0, 0, 0, 0, 0, 0, 113, 0, 0, 0,
2402  0, 0, 0, 0, 0, 0, 0, 0, 279, 0,
2403  0, 117, 0, 0, 214, 0, 281, 0, 0, 0,
2404  0, 0, 0, 0, 904, 0, 0, 0, 0, 0,
2405  0, 0, 611, 0, 0, 0, 0, 0, 0, 0,
2406  0, 0, 113, 0, 0, 0, 0, 113, 0, 114,
2407  0, 114, 0, 214, 0, 0, 0, 807, 0, 113,
2408  279, 0, 0, 0, 0, 0, 0, 0, 0, 611,
2409  214, 0, 0, 0, 281, 117, 535, 0, 0, 0,
2410  0, 0, 535, 535, 0, 0, 0, 562, 563, 535,
2411  535, 564, 0, 0, 113, 0, 0, 0, 114, 0,
2412  0, 0, 280, 165, 166, 167, 168, 169, 170, 171,
2413  172, 173, 0, 0, 174, 175, 0, 117, 176, 177,
2414  178, 179, 0, 0, 0, 0, 0, 0, 280, 0,
2415  0, 0, 0, 180, 181, 0, 0, 0, 0, 0,
2416  376, 386, 386, 386, 0, 83, 0, 83, 0, 0,
2417  0, 0, 0, 0, 0, 182, 183, 184, 185, 186,
2418  187, 188, 189, 190, 191, 0, 192, 193, 0, 0,
2419  0, 0, 0, 194, 0, 0, 0, 0, 0, 113,
2420  0, 0, 0, 0, 0, 0, 0, 0, 0, 113,
2421  0, 0, 0, 0, 83, 0, 0, 0, 0, 0,
2422  0, 535, 0, 116, 0, 116, 279, 0, 0, 0,
2423  0, 0, 117, 0, 0, 0, 214, 0, 0, 117,
2424  117, 0, 0, 117, 0, 0, 117, 0, 0, 0,
2425  0, 0, 0, 117, 0, 0, 372, 0, 0, 330,
2426  331, 332, 333, 334, 335, 336, 337, 338, 339, 340,
2427  341, 342, 116, 114, 343, 344, 279, 0, 0, 0,
2428  0, 0, 0, 0, 0, 0, 117, 0, 0, 117,
2429  0, 0, 0, 0, 0, 0, 970, 0, 0, 0,
2430  117, 0, 0, 0, 0, 0, 0, 345, 114, 346,
2431  347, 348, 349, 350, 351, 352, 353, 354, 355, 114,
2432  0, 114, 0, 0, 0, 117, 117, 0, 0, 0,
2433  114, 0, 113, 0, 113, 0, 0, 0, 0, 0,
2434  0, 0, 280, 0, 387, 0, 0, 0, 0, 0,
2435  0, 0, 0, 0, 113, 0, 0, 0, 0, 0,
2436  117, 0, 117, 0, 0, 0, 0, 0, 117, 83,
2437  0, 0, 0, 117, 0, 0, 114, 0, 0, 0,
2438  0, 114, 0, 0, 0, 0, 0, 0, 117, 0,
2439  0, 387, 0, 114, 280, 113, 0, 0, 0, 0,
2440  279, 0, 0, 0, 83, 0, 0, 0, 0, 0,
2441  0, 0, 0, 0, 0, 83, 0, 83, 0, 0,
2442  0, 0, 0, 0, 0, 0, 83, 116, 114, 0,
2443  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2444  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2445  0, 0, 0, 0, 0, 0, 0, 0, 279, 113,
2446  0, 0, 116, 0, 0, 0, 0, 0, 0, 0,
2447  0, 0, 83, 116, 0, 116, 0, 83, 0, 0,
2448  0, 0, 0, 0, 116, 0, 0, 570, 571, 83,
2449  0, 572, 529, 0, 0, 0, 0, 0, 0, 0,
2450  0, 113, 0, 165, 166, 167, 168, 169, 170, 171,
2451  172, 173, 0, 114, 174, 175, 0, 0, 176, 177,
2452  178, 179, 0, 114, 83, 0, 0, 0, 0, 0,
2453  116, 0, 0, 180, 181, 116, 0, 0, 0, 0,
2454  280, 0, 0, 0, 0, 0, 0, 116, 0, 0,
2455  116, 0, 0, 0, 0, 182, 183, 184, 185, 186,
2456  187, 188, 189, 190, 191, 0, 192, 193, 0, 0,
2457  529, 529, 0, 194, 0, 0, 0, 0, 0, 0,
2458  0, 0, 116, 330, -643, -643, -643, -643, 335, 336,
2459  280, 0, -643, -643, 0, 0, 113, 0, 343, 344,
2460  0, 0, 0, 113, 113, 0, 0, 113, 0, 83,
2461  113, 0, 0, 0, 0, 0, 0, 113, 0, 83,
2462  0, 0, 0, 0, 0, 0, 0, 0, 116, 116,
2463  0, 0, 0, 346, 347, 348, 349, 350, 351, 352,
2464  353, 354, 355, 0, 0, 0, 114, 0, 114, 0,
2465  113, 0, 0, 113, 0, 0, 0, 0, 0, 0,
2466  968, 0, 0, 0, 113, 0, 0, 116, 114, 0,
2467  0, 0, 0, 0, 0, 0, 0, 116, 0, 0,
2468  0, 0, 0, 0, 0, 0, 0, 0, 0, 113,
2469  113, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2470  0, 0, 0, 0, 0, 0, 0, 0, 385, 114,
2471  0, 0, 0, 0, 280, 0, 0, 0, 0, 0,
2472  0, 0, 0, 0, 113, 0, 113, 0, 0, 0,
2473  0, 0, 113, 0, 0, 0, 0, 113, 0, 0,
2474  0, 0, 83, 0, 83, 0, 0, 0, 0, 0,
2475  0, 0, 113, 0, 0, 385, 0, 0, 0, 0,
2476  0, 607, 571, 0, 83, 608, 0, 0, 0, 0,
2477  0, 0, 280, 114, 0, 0, 0, 165, 166, 167,
2478  168, 169, 170, 171, 172, 173, 0, 0, 174, 175,
2479  0, 0, 176, 177, 178, 179, 0, 0, 0, 0,
2480  116, 0, 116, 0, 0, 83, 0, 180, 181, 0,
2481  0, 0, 0, 0, 0, 114, 0, 0, 0, 0,
2482  0, 0, 116, 0, 0, 0, 0, 0, 0, 182,
2483  183, 184, 185, 186, 187, 188, 189, 190, 191, 0,
2484  192, 193, 0, 0, 0, 0, 0, 194, 0, 0,
2485  330, 331, 332, 333, 334, 335, 336, 337, 338, 339,
2486  340, 341, 342, 116, 0, 343, 344, 0, 0, 83,
2487  529, 0, 0, 0, 0, 0, 529, 529, 0, 0,
2488  0, 0, 0, 529, 529, 0, 0, 0, 0, 0,
2489  0, 0, 0, 0, 0, 0, 0, 0, 345, 0,
2490  346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
2491  114, 83, 0, 0, 0, 0, 0, 114, 114, 0,
2492  0, 114, 0, 0, 114, 235, 0, 116, 116, 0,
2493  0, 114, 0, 0, 116, 116, 0, 0, 0, 0,
2494  0, 116, 116, 0, 0, 0, 0, 0, 0, 0,
2495  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2496  0, 0, 0, 0, 114, 0, 0, 114, 0, 116,
2497  0, 0, 0, 0, 969, 0, 0, 0, 114, 0,
2498  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2499  0, 0, 0, 0, 0, 529, 0, 0, 0, 0,
2500  0, 0, 0, 114, 114, 0, 83, 0, 0, 0,
2501  0, 0, 0, 83, 83, 0, 0, 83, 0, 0,
2502  83, 0, 386, 0, 0, 0, 0, 83, 0, 0,
2503  0, 0, 0, 0, 0, 0, 0, 0, 114, 0,
2504  114, 0, 0, 0, 0, 0, 114, 0, 0, 0,
2505  0, 114, 0, 116, 0, 0, 0, 0, 0, 0,
2506  83, 0, 0, 83, 116, 0, 114, 0, 0, 386,
2507  966, 116, 116, 0, 83, 116, 0, 0, 116, 0,
2508  0, 0, 0, 0, 0, 116, 0, 0, 0, 0,
2509  0, 0, 0, 0, 0, 0, 0, 0, 0, 83,
2510  83, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2511  0, 0, 0, 0, 0, 0, 0, 0, 116, 0,
2512  0, 116, 0, 0, 0, 0, 0, 0, 0, 0,
2513  0, 0, 116, 0, 83, 0, 83, 0, 0, 0,
2514  0, 0, 83, 0, 0, 0, 0, 83, 0, 0,
2515  0, 0, 0, 0, 0, 0, 0, 116, 116, 0,
2516  0, 0, 83, 0, 0, 0, 0, 0, 0, 0,
2517  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2518  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2519  0, 0, 116, 0, 116, 0, 0, 0, 0, 0,
2520  116, 0, 0, -642, 4, 116, 5, 6, 7, 8,
2521  9, 0, 0, 0, 10, 11, 0, 0, 0, 12,
2522  116, 13, 14, 15, 16, 17, 18, 19, 0, 0,
2523  0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
2524  0, 0, 27, 0, 0, 0, 0, 0, 28, 29,
2525  30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
2526  40, 0, 41, 42, 43, 44, 0, 45, 46, 47,
2527  0, 48, 49, 0, 0, 0, 0, 0, 0, 0,
2528  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2529  0, 0, 50, 0, 0, 51, 52, 0, 53, 54,
2530  0, 55, 0, 0, 56, 57, 58, 59, 60, 61,
2531  62, 63, 64, -620, 0, 0, 0, 0, 0, 0,
2532  0, -620, -620, -620, 0, 0, -620, -620, -620, 0,
2533  -620, 0, 0, 65, 66, 67, 0, 0, 0, -620,
2534  -620, -620, -620, 0, 0, -642, 0, 0, -642, 0,
2535  -620, -620, 0, -620, -620, -620, -620, -620, 0, 0,
2536  0, 330, 331, 332, 333, 334, 335, 336, 337, 338,
2537  339, 340, -643, -643, 0, 0, 343, 344, 0, 0,
2538  0, 0, 0, -620, -620, -620, -620, -620, -620, -620,
2539  -620, -620, -620, -620, -620, -620, 0, 0, -620, -620,
2540  -620, -620, 0, 765, -620, 0, 0, 0, 0, 0,
2541  -620, 346, 347, 348, 349, 350, 351, 352, 353, 354,
2542  355, 0, 0, 0, -620, 0, 0, -620, 0, 0,
2543  -107, -620, -620, -620, -620, -620, -620, -620, -620, -620,
2544  -620, -620, -620, 0, 0, 0, 0, -620, -620, -620,
2545  -620, -518, 0, -620, -620, -620, 0, -620, -620, -518,
2546  -518, -518, 0, 0, -518, -518, -518, 0, -518, 0,
2547  0, 0, 0, 0, 0, 0, -518, 0, -518, -518,
2548  -518, 0, 0, 0, 0, 0, 0, 0, -518, -518,
2549  0, -518, -518, -518, -518, -518, 0, 0, 0, 330,
2550  331, 332, 333, 334, 335, 336, 337, 0, 339, 340,
2551  0, 0, 0, 0, 343, 344, 0, 0, 0, 0,
2552  0, -518, -518, -518, -518, -518, -518, -518, -518, -518,
2553  -518, -518, -518, -518, 0, 0, -518, -518, -518, -518,
2554  0, -518, -518, 0, 0, 0, 0, 0, -518, 346,
2555  347, 348, 349, 350, 351, 352, 353, 354, 355, 0,
2556  0, 0, -518, 0, 0, -518, 0, 0, -518, -518,
2557  -518, -518, -518, -518, -518, -518, -518, -518, -518, -518,
2558  -518, 0, 0, 0, 0, 0, -518, -518, -518, -521,
2559  0, -518, -518, -518, 0, -518, -518, -521, -521, -521,
2560  0, 0, -521, -521, -521, 0, -521, 0, 0, 0,
2561  0, 0, 0, 0, -521, 0, -521, -521, -521, 0,
2562  0, 0, 0, 0, 0, 0, -521, -521, 0, -521,
2563  -521, -521, -521, -521, 0, 0, 0, 330, 331, 332,
2564  333, 334, 335, 336, 0, 0, 339, 340, 0, 0,
2565  0, 0, 343, 344, 0, 0, 0, 0, 0, -521,
2566  -521, -521, -521, -521, -521, -521, -521, -521, -521, -521,
2567  -521, -521, 0, 0, -521, -521, -521, -521, 0, -521,
2568  -521, 0, 0, 0, 0, 0, -521, 346, 347, 348,
2569  349, 350, 351, 352, 353, 354, 355, 0, 0, 0,
2570  -521, 0, 0, -521, 0, 0, -521, -521, -521, -521,
2571  -521, -521, -521, -521, -521, -521, -521, -521, -521, 0,
2572  0, 0, 0, 0, -521, -521, -521, -621, 0, -521,
2573  -521, -521, 0, -521, -521, -621, -621, -621, 0, 0,
2574  -621, -621, -621, 0, -621, 0, 0, 0, 0, 0,
2575  0, 0, 0, -621, -621, -621, -621, 0, 0, 0,
2576  0, 0, 0, 0, -621, -621, 0, -621, -621, -621,
2577  -621, -621, 0, 0, 0, 0, 0, 0, 0, 0,
2578  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2579  0, 0, 0, 0, 0, 0, 0, -621, -621, -621,
2580  -621, -621, -621, -621, -621, -621, -621, -621, -621, -621,
2581  0, 0, -621, -621, -621, -621, 0, 0, -621, 0,
2582  0, 0, 0, 0, -621, 0, 0, 0, 0, 0,
2583  0, 0, 0, 0, 0, 0, 0, 0, -621, 0,
2584  0, -621, 0, 0, 0, -621, -621, -621, -621, -621,
2585  -621, -621, -621, -621, -621, -621, -621, 0, 0, 0,
2586  0, -621, -621, -621, -621, -622, 0, -621, -621, -621,
2587  0, -621, -621, -622, -622, -622, 0, 0, -622, -622,
2588  -622, 0, -622, 0, 0, 0, 0, 0, 0, 0,
2589  0, -622, -622, -622, -622, 0, 0, 0, 0, 0,
2590  0, 0, -622, -622, 0, -622, -622, -622, -622, -622,
2591  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2592  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2593  0, 0, 0, 0, 0, -622, -622, -622, -622, -622,
2594  -622, -622, -622, -622, -622, -622, -622, -622, 0, 0,
2595  -622, -622, -622, -622, 0, 0, -622, 0, 0, 0,
2596  0, 0, -622, 0, 0, 0, 0, 0, 0, 0,
2597  0, 0, 0, 0, 0, 0, -622, 0, 0, -622,
2598  0, 0, 0, -622, -622, -622, -622, -622, -622, -622,
2599  -622, -622, -622, -622, -622, 0, 0, 0, 0, -622,
2600  -622, -622, -622, -296, 0, -622, -622, -622, 0, -622,
2601  -622, -296, -296, -296, 0, 0, -296, -296, -296, 0,
2602  -296, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2603  -296, -296, -296, 0, 0, 0, 0, 0, 0, 0,
2604  -296, -296, 0, -296, -296, -296, -296, -296, 0, 0,
2605  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2606  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2607  0, 0, 0, -296, -296, -296, -296, -296, -296, -296,
2608  -296, -296, -296, -296, -296, -296, 0, 0, -296, -296,
2609  -296, -296, 0, 766, -296, 0, 0, 0, 0, 0,
2610  -296, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2611  0, 0, 0, 0, -296, 0, 0, -296, 0, 0,
2612  -109, -296, -296, -296, -296, -296, -296, -296, -296, -296,
2613  -296, -296, -296, 0, 0, 0, 0, 0, -296, -296,
2614  -296, -435, 0, -296, -296, -296, 0, -296, -296, -435,
2615  -435, -435, 0, 0, -435, -435, -435, 0, -435, 0,
2616  0, 0, 0, 0, 0, 0, 0, -435, -435, -435,
2617  0, 0, 0, 0, 0, 0, 0, 0, -435, -435,
2618  0, -435, -435, -435, -435, -435, 0, 0, 0, 0,
2619  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2620  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2621  0, -435, -435, -435, -435, -435, -435, -435, -435, -435,
2622  -435, -435, -435, -435, 0, 0, -435, -435, -435, -435,
2623  0, 0, -435, 0, 0, 0, 0, 0, -435, 0,
2624  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2625  0, 0, -435, 0, 0, 0, 0, 0, 0, -435,
2626  0, -435, -435, -435, -435, -435, -435, -435, -435, -435,
2627  -435, 0, 0, 0, 0, -435, -435, -435, -435, -287,
2628  231, -435, -435, -435, 0, -435, -435, -287, -287, -287,
2629  0, 0, -287, -287, -287, 0, -287, 0, 0, 0,
2630  0, 0, 0, 0, 0, 0, -287, -287, -287, 0,
2631  0, 0, 0, 0, 0, 0, -287, -287, 0, -287,
2632  -287, -287, -287, -287, 0, 0, 0, 0, 0, 0,
2633  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2634  0, 0, 0, 0, 0, 0, 0, 0, 0, -287,
2635  -287, -287, -287, -287, -287, -287, -287, -287, -287, -287,
2636  -287, -287, 0, 0, -287, -287, -287, -287, 0, 0,
2637  -287, 0, 0, 0, 0, 0, -287, 0, 0, 0,
2638  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2639  -287, 0, 0, -287, 0, 0, 0, -287, -287, -287,
2640  -287, -287, -287, -287, -287, -287, -287, -287, -287, 0,
2641  0, 0, 0, 0, -287, -287, -287, -425, 0, -287,
2642  -287, -287, 0, -287, -287, -425, -425, -425, 0, 0,
2643  -425, -425, -425, 0, -425, 0, 0, 0, 0, 0,
2644  0, 0, 0, -425, -425, -425, 0, 0, 0, 0,
2645  0, 0, 0, 0, -425, -425, 0, -425, -425, -425,
2646  -425, -425, 0, 0, 0, 0, 0, 0, 0, 0,
2647  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2648  0, 0, 0, 0, 0, 0, 0, -425, -425, -425,
2649  -425, -425, -425, -425, -425, -425, -425, -425, -425, -425,
2650  0, 0, -425, -425, -425, -425, 0, 0, -425, 0,
2651  0, 0, 0, 0, -425, 0, 0, 0, 0, 0,
2652  0, 0, 0, 0, 0, 0, 0, 0, -425, 0,
2653  0, 0, 0, 0, 0, -425, 0, -425, -425, -425,
2654  -425, -425, -425, -425, -425, -425, -425, 0, 0, 0,
2655  0, -425, -425, -425, -425, -303, -425, -425, -425, -425,
2656  0, -425, -425, -303, -303, -303, 0, 0, -303, -303,
2657  -303, 0, -303, 0, 0, 0, 0, 0, 0, 0,
2658  0, 0, -303, -303, 0, 0, 0, 0, 0, 0,
2659  0, 0, -303, -303, 0, -303, -303, -303, -303, -303,
2660  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2661  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2662  0, 0, 0, 0, 0, -303, -303, -303, -303, -303,
2663  -303, -303, -303, -303, -303, -303, -303, -303, 0, 0,
2664  -303, -303, -303, -303, 0, 0, -303, 0, 0, 0,
2665  0, 0, -303, 0, 0, 0, 0, 0, 0, 0,
2666  0, 0, 0, 0, 0, 0, -303, 0, 0, 0,
2667  0, 0, 0, -303, 0, -303, -303, -303, -303, -303,
2668  -303, -303, -303, -303, -303, 0, 0, 0, 0, 0,
2669  -303, -303, -303, -620, 228, -303, -303, -303, 0, -303,
2670  -303, -620, -620, -620, 0, 0, 0, -620, -620, 0,
2671  -620, 0, 0, 0, 0, 0, 0, 0, 0, -620,
2672  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2673  -620, -620, 0, -620, -620, -620, -620, -620, 0, 0,
2674  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2675  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2676  0, 0, 0, -620, -620, -620, -620, -620, -620, -620,
2677  -620, -620, -620, -620, -620, -620, 0, 0, -620, -620,
2678  -620, -620, 0, 713, 0, 0, 0, 0, 0, 0,
2679  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2680  0, 0, 0, 0, -620, 0, 0, 0, 0, 0,
2681  -107, -620, 0, -620, -620, -620, -620, -620, -620, -620,
2682  -620, -620, -620, 0, 0, 0, 0, -620, -620, -620,
2683  -98, -620, 0, -620, 0, -620, 0, -620, -620, -620,
2684  -620, -620, 0, 0, 0, -620, -620, 0, -620, 0,
2685  0, 0, 0, 0, 0, 0, 0, -620, 0, 0,
2686  0, 0, 0, 0, 0, 0, 0, 0, -620, -620,
2687  0, -620, -620, -620, -620, -620, 0, 0, 0, 0,
2688  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2689  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2690  0, -620, -620, -620, -620, -620, -620, -620, -620, -620,
2691  -620, -620, -620, -620, 0, 0, -620, -620, -620, -620,
2692  0, 713, 0, 0, 0, 0, 0, 0, 0, 0,
2693  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2694  0, 0, -620, 0, 0, 0, 0, 0, -107, -620,
2695  0, -620, -620, -620, -620, -620, -620, -620, -620, -620,
2696  -620, 0, 0, 0, 0, -620, -620, -620, -620, -296,
2697  0, -620, 0, -620, 0, -620, -620, -296, -296, -296,
2698  0, 0, 0, -296, -296, 0, -296, 0, 0, 0,
2699  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2700  0, 0, 0, 0, 0, 0, -296, -296, 0, -296,
2701  -296, -296, -296, -296, 0, 0, 0, 0, 0, 0,
2702  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2703  0, 0, 0, 0, 0, 0, 0, 0, 0, -296,
2704  -296, -296, -296, -296, -296, -296, -296, -296, -296, -296,
2705  -296, -296, 0, 0, -296, -296, -296, -296, 0, 714,
2706  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2707  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2708  -296, 0, 0, 0, 0, 0, -109, -296, 0, -296,
2709  -296, -296, -296, -296, -296, -296, -296, -296, -296, 0,
2710  0, 0, 0, 0, -296, -296, -100, -296, 0, -296,
2711  0, -296, 0, -296, -296, -296, -296, -296, 0, 0,
2712  0, -296, -296, 0, -296, 0, 0, 0, 0, 0,
2713  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2714  0, 0, 0, 0, -296, -296, 0, -296, -296, -296,
2715  -296, -296, 0, 0, 0, 0, 0, 0, 0, 0,
2716  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2717  0, 0, 0, 0, 0, 0, 0, -296, -296, -296,
2718  -296, -296, -296, -296, -296, -296, -296, -296, -296, -296,
2719  0, 0, -296, -296, -296, -296, 0, 714, 0, 0,
2720  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2721  0, 0, 0, 0, 0, 0, 0, 0, -296, 0,
2722  0, 0, 0, 0, -109, -296, 0, -296, -296, -296,
2723  -296, -296, -296, -296, -296, -296, -296, 0, 0, 0,
2724  0, 0, -296, -296, -296, 0, 0, -296, 0, -296,
2725  0, -296, -296, 252, 0, 5, 6, 7, 8, 9,
2726  -642, -642, -642, 10, 11, 0, 0, -642, 12, 0,
2727  13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
2728  0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
2729  0, 27, 0, 0, 0, 0, 0, 28, 29, 253,
2730  31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2731  0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
2732  48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
2733  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2734  0, 50, 0, 0, 51, 52, 0, 53, 54, 0,
2735  55, 0, 0, 56, 57, 58, 59, 60, 61, 62,
2736  63, 64, 0, 0, 0, 0, 0, 0, 0, 0,
2737  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2738  0, 0, 65, 66, 67, 0, 0, 0, 0, 0,
2739  0, 0, 0, 0, -642, 0, 252, -642, 5, 6,
2740  7, 8, 9, 0, 0, -642, 10, 11, 0, -642,
2741  -642, 12, 0, 13, 14, 15, 16, 17, 18, 19,
2742  0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
2743  25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
2744  28, 29, 253, 31, 32, 33, 34, 35, 36, 37,
2745  38, 39, 40, 0, 41, 42, 43, 44, 0, 45,
2746  46, 47, 0, 48, 49, 0, 0, 0, 0, 0,
2747  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2748  0, 0, 0, 0, 50, 0, 0, 51, 52, 0,
2749  53, 54, 0, 55, 0, 0, 56, 57, 58, 59,
2750  60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
2751  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2752  0, 0, 0, 0, 0, 65, 66, 67, 0, 0,
2753  0, 0, 0, 0, 0, 0, 0, -642, 0, 252,
2754  -642, 5, 6, 7, 8, 9, 0, 0, -642, 10,
2755  11, 0, 0, -642, 12, -642, 13, 14, 15, 16,
2756  17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
2757  22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
2758  0, 0, 0, 28, 29, 253, 31, 32, 33, 34,
2759  35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
2760  44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
2761  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2762  0, 0, 0, 0, 0, 0, 0, 50, 0, 0,
2763  51, 52, 0, 53, 54, 0, 55, 0, 0, 56,
2764  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
2765  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2766  0, 0, 0, 0, 0, 0, 0, 0, 65, 66,
2767  67, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2768  -642, 0, 252, -642, 5, 6, 7, 8, 9, 0,
2769  0, -642, 10, 11, 0, 0, -642, 12, 0, 13,
2770  14, 15, 16, 17, 18, 19, 0, 0, 0, 0,
2771  0, 20, 21, 22, 23, 24, 25, 26, 0, 0,
2772  27, 0, 0, 0, 0, 0, 28, 29, 253, 31,
2773  32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
2774  41, 42, 43, 44, 0, 45, 46, 47, 0, 48,
2775  49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2776  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2777  50, 0, 0, 51, 52, 0, 53, 54, 0, 55,
2778  0, 0, 56, 57, 58, 59, 60, 61, 62, 63,
2779  64, 0, 0, 0, 0, 0, 0, 0, 0, 252,
2780  0, 5, 6, 7, 8, 9, 0, -642, -642, 10,
2781  11, 65, 66, 67, 12, 0, 13, 14, 15, 16,
2782  17, 18, 19, -642, 0, 0, -642, 0, 20, 21,
2783  22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
2784  0, 0, 0, 28, 29, 253, 31, 32, 33, 34,
2785  35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
2786  44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
2787  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2788  0, 0, 0, 0, 0, 0, 0, 50, 0, 0,
2789  51, 52, 0, 53, 54, 0, 55, 0, 0, 56,
2790  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
2791  0, 0, 0, 0, 0, 0, 252, 0, 5, 6,
2792  7, 8, 9, 0, 0, 0, 10, 11, 65, 66,
2793  67, 12, 0, 13, 14, 15, 16, 17, 18, 19,
2794  -642, 0, 0, -642, 0, 20, 21, 22, 23, 24,
2795  25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
2796  28, 29, 253, 31, 32, 33, 34, 35, 36, 37,
2797  38, 39, 40, 0, 41, 42, 43, 44, 0, 45,
2798  46, 47, 0, 48, 49, 0, 0, 0, 0, 0,
2799  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2800  0, 0, 0, 0, 50, 0, 0, 254, 52, 0,
2801  53, 54, 0, 55, 0, 0, 56, 57, 58, 59,
2802  60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
2803  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2804  0, 0, 0, 0, 0, 65, 66, 67, 252, 0,
2805  5, 6, 7, 8, 9, -642, 0, -642, 10, 11,
2806  -642, 0, 0, 12, 0, 13, 14, 15, 16, 17,
2807  18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
2808  23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
2809  0, 0, 28, 29, 253, 31, 32, 33, 34, 35,
2810  36, 37, 38, 39, 40, 0, 41, 42, 43, 44,
2811  0, 45, 46, 47, 0, 48, 49, 0, 0, 0,
2812  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2813  0, 0, 0, 0, 0, 0, 50, 0, 0, 51,
2814  52, 0, 53, 54, 0, 55, 0, 0, 56, 57,
2815  58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
2816  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2817  0, 0, 0, 0, 0, 0, 0, 65, 66, 67,
2818  252, 0, 5, 6, 7, 8, 9, -642, 0, -642,
2819  10, 11, -642, 0, 0, 12, 0, 13, 14, 15,
2820  16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
2821  21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
2822  0, 0, 0, 0, 28, 29, 253, 31, 32, 33,
2823  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2824  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
2825  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2826  0, 0, 0, 0, 0, 0, 0, 0, 50, 0,
2827  0, 51, 52, 0, 53, 54, 0, 55, 0, 0,
2828  56, 57, 58, 59, 60, 61, 62, 63, 64, 0,
2829  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2830  0, 0, 0, 0, 0, 0, 0, 0, 0, 65,
2831  66, 67, 0, 0, -642, 0, 0, 0, 0, 0,
2832  0, -642, 0, 4, -642, 5, 6, 7, 8, 9,
2833  0, 0, 0, 10, 11, 0, 0, 0, 12, 0,
2834  13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
2835  0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
2836  0, 27, 0, 0, 0, 0, 0, 28, 29, 30,
2837  31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2838  0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
2839  48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
2840  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2841  0, 50, 0, 0, 51, 52, 0, 53, 54, 0,
2842  55, 0, 0, 56, 57, 58, 59, 60, 61, 62,
2843  63, 64, 0, 0, 0, 0, 0, 0, 0, 0,
2844  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2845  0, 0, 65, 66, 67, 0, 0, -642, 0, 0,
2846  0, 0, 0, 0, -642, 0, 252, -642, 5, 6,
2847  7, 8, 9, 0, 0, -642, 10, 11, 0, 0,
2848  0, 12, 0, 13, 14, 15, 16, 17, 18, 19,
2849  0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
2850  25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
2851  28, 29, 253, 31, 32, 33, 34, 35, 36, 37,
2852  38, 39, 40, 0, 41, 42, 43, 44, 0, 45,
2853  46, 47, 0, 48, 49, 0, 0, 0, 0, 0,
2854  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2855  0, 0, 0, 0, 50, 0, 0, 51, 52, 0,
2856  53, 54, 0, 55, 0, 0, 56, 57, 58, 59,
2857  60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
2858  0, 0, 0, 252, 0, 5, 6, 7, 8, 9,
2859  0, 0, 0, 10, 11, 65, 66, 67, 12, 0,
2860  13, 14, 15, 16, 17, 18, 19, -642, 0, 0,
2861  -642, 0, 20, 21, 22, 23, 24, 25, 26, 0,
2862  0, 27, 0, 0, 0, 0, 0, 28, 29, 253,
2863  31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2864  0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
2865  48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
2866  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2867  0, 50, 0, 0, 51, 52, 0, 53, 54, 0,
2868  55, 0, 0, 56, 57, 58, 59, 60, 61, 62,
2869  63, 64, 0, -642, 0, 0, 0, 0, 0, 0,
2870  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2871  10, 11, 65, 66, 67, 12, 0, 13, 14, 15,
2872  16, 17, 18, 19, -642, 0, 0, -642, 0, 20,
2873  21, 22, 23, 24, 25, 26, 0, 0, 203, 0,
2874  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
2875  34, 35, 36, 37, 38, 39, 40, 204, 41, 42,
2876  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
2877  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2878  0, 0, 0, 0, 0, 0, 0, 0, 205, 0,
2879  0, 206, 52, 0, 53, 54, 0, 207, 208, 209,
2880  56, 57, 210, 59, 60, 61, 62, 63, 64, 0,
2881  0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
2882  6, 7, 0, 9, 0, 0, 0, 10, 11, 65,
2883  211, 67, 12, 0, 13, 14, 15, 16, 17, 18,
2884  19, 0, 0, 0, 235, 0, 20, 21, 22, 23,
2885  24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
2886  0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
2887  37, 38, 39, 40, 0, 41, 42, 43, 44, 0,
2888  45, 46, 47, 0, 48, 49, 0, 0, 0, 0,
2889  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2890  0, 0, 0, 0, 0, 205, 0, 0, 206, 52,
2891  0, 53, 54, 0, 0, 0, 0, 56, 57, 58,
2892  59, 60, 61, 62, 63, 64, 0, 0, 0, 0,
2893  0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
2894  9, 0, 0, 0, 10, 11, 65, 66, 67, 12,
2895  0, 13, 14, 15, 16, 17, 18, 19, 305, 0,
2896  0, 306, 0, 20, 21, 22, 23, 24, 25, 26,
2897  0, 0, 27, 0, 0, 0, 0, 0, 0, 29,
2898  0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
2899  40, 0, 41, 42, 43, 44, 0, 45, 46, 47,
2900  0, 48, 49, 0, 0, 0, 0, 0, 0, 0,
2901  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2902  0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
2903  0, 0, 0, 0, 56, 57, 58, 59, 60, 61,
2904  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
2905  0, 0, 0, 5, 6, 7, 8, 9, 0, 0,
2906  0, 10, 11, 65, 66, 67, 12, 0, 13, 14,
2907  15, 16, 17, 18, 19, 0, 0, 0, 235, 0,
2908  20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
2909  0, 0, 0, 0, 0, 28, 29, 30, 31, 32,
2910  33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
2911  42, 43, 44, 0, 45, 46, 47, 0, 48, 49,
2912  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2913  0, 0, 0, 0, 0, 0, 0, 0, 0, 50,
2914  0, 0, 51, 52, 0, 53, 54, 0, 55, 0,
2915  0, 56, 57, 58, 59, 60, 61, 62, 63, 64,
2916  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2917  5, 6, 7, 8, 9, 0, 0, 0, 10, 11,
2918  65, 66, 67, 12, 0, 13, 14, 15, 16, 17,
2919  18, 19, 502, 0, 0, 0, 0, 20, 21, 22,
2920  23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
2921  0, 0, 28, 29, 253, 31, 32, 33, 34, 35,
2922  36, 37, 38, 39, 40, 0, 41, 42, 43, 44,
2923  0, 45, 46, 47, 0, 48, 49, 0, 0, 0,
2924  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2925  0, 0, 0, 0, 0, 0, 50, 0, 0, 51,
2926  52, 0, 53, 54, 0, 55, 0, 0, 56, 57,
2927  58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
2928  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2929  0, 0, 0, 0, 0, 0, 0, 65, 66, 67,
2930  0, 0, 0, 0, 0, 0, 0, 0, 0, 502,
2931  121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
2932  131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
2933  141, 142, 143, 144, 0, 0, 0, 145, 146, 147,
2934  389, 390, 391, 392, 152, 153, 154, 0, 0, 0,
2935  0, 0, 155, 156, 157, 158, 393, 394, 395, 396,
2936  163, 37, 38, 397, 40, 0, 0, 0, 0, 0,
2937  0, 0, 0, 0, 0, 165, 166, 167, 168, 169,
2938  170, 171, 172, 173, 0, 0, 174, 175, 0, 0,
2939  176, 177, 178, 179, 0, 0, 0, 0, 0, 0,
2940  0, 0, 0, 0, 0, 180, 181, 0, 0, 0,
2941  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2942  0, 0, 0, 0, 0, 0, 0, 182, 183, 184,
2943  185, 186, 187, 188, 189, 190, 191, 0, 192, 193,
2944  0, 0, 0, 0, 0, 194, 398, 121, 122, 123,
2945  124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
2946  134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
2947  144, 0, 0, 0, 145, 146, 147, 148, 149, 150,
2948  151, 152, 153, 154, 0, 0, 0, 0, 0, 155,
2949  156, 157, 158, 159, 160, 161, 162, 163, 284, 285,
2950  164, 286, 0, 0, 0, 0, 0, 0, 0, 0,
2951  0, 0, 165, 166, 167, 168, 169, 170, 171, 172,
2952  173, 0, 0, 174, 175, 0, 0, 176, 177, 178,
2953  179, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2954  0, 0, 180, 181, 0, 0, 0, 0, 0, 0,
2955  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2956  0, 0, 0, 0, 182, 183, 184, 185, 186, 187,
2957  188, 189, 190, 191, 0, 192, 193, 0, 0, 0,
2958  0, 0, 194, 121, 122, 123, 124, 125, 126, 127,
2959  128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
2960  138, 139, 140, 141, 142, 143, 144, 0, 0, 0,
2961  145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
2962  0, 0, 0, 0, 0, 155, 156, 157, 158, 159,
2963  160, 161, 162, 163, 237, 0, 164, 0, 0, 0,
2964  0, 0, 0, 0, 0, 0, 0, 0, 165, 166,
2965  167, 168, 169, 170, 171, 172, 173, 0, 0, 174,
2966  175, 0, 0, 176, 177, 178, 179, 0, 0, 0,
2967  0, 0, 0, 0, 0, 0, 0, 0, 180, 181,
2968  0, 0, 57, 0, 0, 0, 0, 0, 0, 0,
2969  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2970  182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
2971  0, 192, 193, 0, 0, 0, 0, 0, 194, 121,
2972  122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
2973  132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
2974  142, 143, 144, 0, 0, 0, 145, 146, 147, 148,
2975  149, 150, 151, 152, 153, 154, 0, 0, 0, 0,
2976  0, 155, 156, 157, 158, 159, 160, 161, 162, 163,
2977  0, 0, 164, 0, 0, 0, 0, 0, 0, 0,
2978  0, 0, 0, 0, 165, 166, 167, 168, 169, 170,
2979  171, 172, 173, 0, 0, 174, 175, 0, 0, 176,
2980  177, 178, 179, 0, 0, 0, 0, 0, 0, 0,
2981  0, 0, 0, 0, 180, 181, 0, 0, 57, 0,
2982  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2983  0, 0, 0, 0, 0, 0, 182, 183, 184, 185,
2984  186, 187, 188, 189, 190, 191, 0, 192, 193, 0,
2985  0, 0, 0, 0, 194, 121, 122, 123, 124, 125,
2986  126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
2987  136, 137, 138, 139, 140, 141, 142, 143, 144, 0,
2988  0, 0, 145, 146, 147, 148, 149, 150, 151, 152,
2989  153, 154, 0, 0, 0, 0, 0, 155, 156, 157,
2990  158, 159, 160, 161, 162, 163, 0, 0, 164, 0,
2991  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2992  165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
2993  0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
2994  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2995  180, 181, 0, 0, 0, 0, 0, 0, 0, 0,
2996  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2997  0, 0, 182, 183, 184, 185, 186, 187, 188, 189,
2998  190, 191, 0, 192, 193, 5, 6, 7, 0, 9,
2999  194, 0, 0, 10, 11, 0, 0, 0, 12, 0,
3000  13, 14, 15, 242, 243, 18, 19, 0, 0, 0,
3001  0, 0, 244, 245, 246, 23, 24, 25, 26, 0,
3002  0, 203, 0, 0, 0, 0, 0, 0, 272, 0,
3003  0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
3004  0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
3005  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3006  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3007  0, 273, 0, 0, 206, 52, 0, 53, 54, 0,
3008  0, 0, 0, 56, 57, 58, 59, 60, 61, 62,
3009  63, 64, 0, 0, 0, 0, 0, 0, 0, 0,
3010  0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
3011  0, 0, 274, 10, 11, 0, 0, 0, 12, 275,
3012  13, 14, 15, 242, 243, 18, 19, 0, 0, 0,
3013  0, 0, 244, 245, 246, 23, 24, 25, 26, 0,
3014  0, 203, 0, 0, 0, 0, 0, 0, 272, 0,
3015  0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
3016  0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
3017  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3018  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3019  0, 273, 0, 0, 206, 52, 0, 53, 54, 0,
3020  0, 0, 0, 56, 57, 58, 59, 60, 61, 62,
3021  63, 64, 0, 0, 0, 0, 0, 0, 0, 0,
3022  0, 0, 0, 0, 0, 5, 6, 7, 8, 9,
3023  0, 0, 274, 10, 11, 0, 0, 0, 12, 523,
3024  13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
3025  0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
3026  0, 27, 0, 0, 0, 0, 0, 28, 29, 30,
3027  31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
3028  0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
3029  48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
3030  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3031  0, 50, 0, 0, 51, 52, 0, 53, 54, 0,
3032  55, 0, 0, 56, 57, 58, 59, 60, 61, 62,
3033  63, 64, 0, 0, 0, 0, 0, 0, 0, 0,
3034  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
3035  10, 11, 65, 66, 67, 12, 0, 13, 14, 15,
3036  16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
3037  21, 22, 23, 24, 25, 26, 0, 0, 203, 0,
3038  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
3039  34, 35, 36, 37, 38, 39, 40, 204, 41, 42,
3040  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
3041  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3042  0, 0, 0, 0, 0, 0, 0, 0, 205, 0,
3043  0, 206, 52, 0, 53, 54, 0, 207, 208, 209,
3044  56, 57, 210, 59, 60, 61, 62, 63, 64, 0,
3045  0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
3046  6, 7, 8, 9, 0, 0, 0, 10, 11, 65,
3047  211, 67, 12, 0, 13, 14, 15, 16, 17, 18,
3048  19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
3049  24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
3050  0, 28, 29, 0, 31, 32, 33, 34, 35, 36,
3051  37, 38, 39, 40, 0, 41, 42, 43, 44, 0,
3052  45, 46, 47, 0, 48, 49, 0, 0, 0, 0,
3053  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3054  0, 0, 0, 0, 0, 50, 0, 0, 51, 52,
3055  0, 53, 54, 0, 55, 0, 0, 56, 57, 58,
3056  59, 60, 61, 62, 63, 64, 0, 0, 0, 0,
3057  0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
3058  9, 0, 0, 0, 10, 11, 65, 66, 67, 12,
3059  0, 13, 14, 15, 242, 243, 18, 19, 0, 0,
3060  0, 0, 0, 244, 245, 246, 23, 24, 25, 26,
3061  0, 0, 203, 0, 0, 0, 0, 0, 0, 29,
3062  0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
3063  40, 204, 41, 42, 43, 44, 0, 45, 46, 47,
3064  0, 48, 49, 0, 0, 0, 0, 0, 0, 0,
3065  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3066  0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
3067  0, 618, 208, 209, 56, 57, 210, 59, 60, 61,
3068  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
3069  0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
3070  0, 10, 11, 65, 211, 67, 12, 0, 13, 14,
3071  15, 242, 243, 18, 19, 0, 0, 0, 0, 0,
3072  244, 245, 246, 23, 24, 25, 26, 0, 0, 203,
3073  0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
3074  33, 34, 35, 36, 37, 38, 39, 40, 204, 41,
3075  42, 43, 44, 0, 45, 46, 47, 0, 48, 49,
3076  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3077  0, 0, 0, 0, 0, 0, 0, 0, 0, 205,
3078  0, 0, 206, 52, 0, 53, 54, 0, 207, 208,
3079  0, 56, 57, 210, 59, 60, 61, 62, 63, 64,
3080  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3081  5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
3082  65, 211, 67, 12, 0, 13, 14, 15, 242, 243,
3083  18, 19, 0, 0, 0, 0, 0, 244, 245, 246,
3084  23, 24, 25, 26, 0, 0, 203, 0, 0, 0,
3085  0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
3086  36, 37, 38, 39, 40, 204, 41, 42, 43, 44,
3087  0, 45, 46, 47, 0, 48, 49, 0, 0, 0,
3088  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3089  0, 0, 0, 0, 0, 0, 205, 0, 0, 206,
3090  52, 0, 53, 54, 0, 0, 208, 209, 56, 57,
3091  210, 59, 60, 61, 62, 63, 64, 0, 0, 0,
3092  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
3093  0, 9, 0, 0, 0, 10, 11, 65, 211, 67,
3094  12, 0, 13, 14, 15, 242, 243, 18, 19, 0,
3095  0, 0, 0, 0, 244, 245, 246, 23, 24, 25,
3096  26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
3097  29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
3098  39, 40, 204, 41, 42, 43, 44, 0, 45, 46,
3099  47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
3100  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3101  0, 0, 0, 205, 0, 0, 206, 52, 0, 53,
3102  54, 0, 618, 208, 0, 56, 57, 210, 59, 60,
3103  61, 62, 63, 64, 0, 0, 0, 0, 0, 0,
3104  0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
3105  0, 0, 10, 11, 65, 211, 67, 12, 0, 13,
3106  14, 15, 242, 243, 18, 19, 0, 0, 0, 0,
3107  0, 244, 245, 246, 23, 24, 25, 26, 0, 0,
3108  203, 0, 0, 0, 0, 0, 0, 29, 0, 0,
3109  32, 33, 34, 35, 36, 37, 38, 39, 40, 204,
3110  41, 42, 43, 44, 0, 45, 46, 47, 0, 48,
3111  49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3112  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3113  205, 0, 0, 206, 52, 0, 53, 54, 0, 0,
3114  208, 0, 56, 57, 210, 59, 60, 61, 62, 63,
3115  64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3116  0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
3117  11, 65, 211, 67, 12, 0, 13, 14, 15, 16,
3118  17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
3119  22, 23, 24, 25, 26, 0, 0, 203, 0, 0,
3120  0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
3121  35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
3122  44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
3123  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3124  0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
3125  206, 52, 0, 53, 54, 0, 516, 0, 0, 56,
3126  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
3127  0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
3128  7, 0, 9, 0, 0, 0, 10, 11, 65, 211,
3129  67, 12, 0, 13, 14, 15, 242, 243, 18, 19,
3130  0, 0, 0, 0, 0, 244, 245, 246, 23, 24,
3131  25, 26, 0, 0, 203, 0, 0, 0, 0, 0,
3132  0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
3133  38, 39, 40, 0, 41, 42, 43, 44, 0, 45,
3134  46, 47, 0, 48, 49, 0, 0, 0, 0, 0,
3135  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3136  0, 0, 0, 0, 205, 0, 0, 206, 52, 0,
3137  53, 54, 0, 207, 0, 0, 56, 57, 58, 59,
3138  60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
3139  0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
3140  0, 0, 0, 10, 11, 65, 211, 67, 12, 0,
3141  13, 14, 15, 242, 243, 18, 19, 0, 0, 0,
3142  0, 0, 244, 245, 246, 23, 24, 25, 26, 0,
3143  0, 203, 0, 0, 0, 0, 0, 0, 29, 0,
3144  0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
3145  0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
3146  48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
3147  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3148  0, 205, 0, 0, 206, 52, 0, 53, 54, 0,
3149  814, 0, 0, 56, 57, 58, 59, 60, 61, 62,
3150  63, 64, 0, 0, 0, 0, 0, 0, 0, 0,
3151  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
3152  10, 11, 65, 211, 67, 12, 0, 13, 14, 15,
3153  242, 243, 18, 19, 0, 0, 0, 0, 0, 244,
3154  245, 246, 23, 24, 25, 26, 0, 0, 203, 0,
3155  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
3156  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
3157  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
3158  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3159  0, 0, 0, 0, 0, 0, 0, 0, 205, 0,
3160  0, 206, 52, 0, 53, 54, 0, 516, 0, 0,
3161  56, 57, 58, 59, 60, 61, 62, 63, 64, 0,
3162  0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
3163  6, 7, 0, 9, 0, 0, 0, 10, 11, 65,
3164  211, 67, 12, 0, 13, 14, 15, 242, 243, 18,
3165  19, 0, 0, 0, 0, 0, 244, 245, 246, 23,
3166  24, 25, 26, 0, 0, 203, 0, 0, 0, 0,
3167  0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
3168  37, 38, 39, 40, 0, 41, 42, 43, 44, 0,
3169  45, 46, 47, 0, 48, 49, 0, 0, 0, 0,
3170  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3171  0, 0, 0, 0, 0, 205, 0, 0, 206, 52,
3172  0, 53, 54, 0, 618, 0, 0, 56, 57, 58,
3173  59, 60, 61, 62, 63, 64, 0, 0, 0, 0,
3174  0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
3175  9, 0, 0, 0, 10, 11, 65, 211, 67, 12,
3176  0, 13, 14, 15, 242, 243, 18, 19, 0, 0,
3177  0, 0, 0, 244, 245, 246, 23, 24, 25, 26,
3178  0, 0, 203, 0, 0, 0, 0, 0, 0, 29,
3179  0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
3180  40, 0, 41, 42, 43, 44, 0, 45, 46, 47,
3181  0, 48, 49, 0, 0, 0, 0, 0, 0, 0,
3182  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3183  0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
3184  0, 0, 0, 0, 56, 57, 58, 59, 60, 61,
3185  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
3186  0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
3187  0, 10, 11, 65, 211, 67, 12, 0, 13, 14,
3188  15, 16, 17, 18, 19, 0, 0, 0, 0, 0,
3189  20, 21, 22, 23, 24, 25, 26, 0, 0, 203,
3190  0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
3191  33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
3192  42, 43, 44, 0, 45, 46, 47, 0, 48, 49,
3193  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3194  0, 0, 0, 0, 0, 0, 0, 0, 0, 205,
3195  0, 0, 206, 52, 0, 53, 54, 0, 0, 0,
3196  0, 56, 57, 58, 59, 60, 61, 62, 63, 64,
3197  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3198  5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
3199  65, 211, 67, 12, 0, 13, 14, 15, 16, 17,
3200  18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
3201  23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
3202  0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
3203  36, 37, 38, 39, 40, 0, 41, 42, 43, 44,
3204  0, 45, 46, 47, 0, 48, 49, 0, 0, 0,
3205  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3206  0, 0, 0, 0, 0, 0, 205, 0, 0, 206,
3207  52, 0, 53, 54, 0, 0, 0, 0, 56, 57,
3208  58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
3209  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
3210  0, 9, 0, 0, 0, 10, 11, 65, 66, 67,
3211  12, 0, 13, 14, 15, 242, 243, 18, 19, 0,
3212  0, 0, 0, 0, 244, 245, 246, 23, 24, 25,
3213  26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
3214  272, 0, 0, 32, 33, 34, 35, 36, 37, 38,
3215  39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
3216  47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3217  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3218  0, 0, 0, 273, 0, 0, 326, 52, 0, 53,
3219  54, 0, 327, 0, 0, 56, 57, 58, 59, 60,
3220  61, 62, 63, 64, 0, 0, 0, 0, 0, 0,
3221  5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
3222  0, 0, 0, 12, 274, 13, 14, 15, 242, 243,
3223  18, 19, 0, 0, 0, 0, 0, 244, 245, 246,
3224  23, 24, 25, 26, 0, 0, 203, 0, 0, 0,
3225  0, 0, 0, 272, 0, 0, 32, 33, 34, 35,
3226  36, 37, 38, 39, 40, 0, 41, 42, 43, 44,
3227  0, 45, 46, 47, 0, 0, 0, 0, 0, 0,
3228  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3229  0, 0, 0, 0, 0, 0, 370, 0, 0, 51,
3230  52, 0, 53, 54, 0, 55, 0, 0, 56, 57,
3231  58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
3232  0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
3233  0, 10, 11, 0, 0, 0, 12, 274, 13, 14,
3234  15, 242, 243, 18, 19, 0, 0, 0, 0, 0,
3235  244, 245, 246, 23, 24, 25, 26, 0, 0, 203,
3236  0, 0, 0, 0, 0, 0, 272, 0, 0, 32,
3237  33, 34, 378, 36, 37, 38, 379, 40, 0, 41,
3238  42, 43, 44, 0, 45, 46, 47, 0, 0, 0,
3239  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3240  0, 0, 0, 0, 0, 380, 0, 0, 0, 381,
3241  0, 0, 206, 52, 0, 53, 54, 0, 0, 0,
3242  0, 56, 57, 58, 59, 60, 61, 62, 63, 64,
3243  0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
3244  9, 0, 0, 0, 10, 11, 0, 0, 0, 12,
3245  274, 13, 14, 15, 242, 243, 18, 19, 0, 0,
3246  0, 0, 0, 244, 245, 246, 23, 24, 25, 26,
3247  0, 0, 203, 0, 0, 0, 0, 0, 0, 272,
3248  0, 0, 32, 33, 34, 378, 36, 37, 38, 379,
3249  40, 0, 41, 42, 43, 44, 0, 45, 46, 47,
3250  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3251  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3252  0, 0, 381, 0, 0, 206, 52, 0, 53, 54,
3253  0, 0, 0, 0, 56, 57, 58, 59, 60, 61,
3254  62, 63, 64, 0, 0, 0, 0, 0, 0, 5,
3255  6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
3256  0, 0, 12, 274, 13, 14, 15, 242, 243, 18,
3257  19, 0, 0, 0, 0, 0, 244, 245, 246, 23,
3258  24, 25, 26, 0, 0, 203, 0, 0, 0, 0,
3259  0, 0, 272, 0, 0, 32, 33, 34, 35, 36,
3260  37, 38, 39, 40, 0, 41, 42, 43, 44, 0,
3261  45, 46, 47, 0, 0, 0, 0, 0, 0, 0,
3262  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3263  0, 0, 0, 0, 0, 273, 0, 0, 326, 52,
3264  0, 53, 54, 0, 0, 0, 0, 56, 57, 58,
3265  59, 60, 61, 62, 63, 64, 0, 0, 0, 0,
3266  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
3267  10, 11, 0, 0, 0, 12, 274, 13, 14, 15,
3268  242, 243, 18, 19, 0, 0, 0, 0, 0, 244,
3269  245, 246, 23, 24, 25, 26, 0, 0, 203, 0,
3270  0, 0, 0, 0, 0, 272, 0, 0, 32, 33,
3271  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
3272  43, 44, 0, 45, 46, 47, 0, 0, 0, 0,
3273  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3274  0, 0, 0, 0, 0, 0, 0, 0, 965, 0,
3275  0, 206, 52, 0, 53, 54, 0, 0, 0, 0,
3276  56, 57, 58, 59, 60, 61, 62, 63, 64, 0,
3277  0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
3278  0, 0, 0, 10, 11, 0, 0, 0, 12, 274,
3279  13, 14, 15, 242, 243, 18, 19, 0, 0, 0,
3280  0, 0, 244, 245, 246, 23, 24, 25, 26, 0,
3281  0, 203, 0, 0, 0, 0, 0, 0, 272, 0,
3282  0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
3283  0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
3284  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3285  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3286  0, 1005, 0, 0, 206, 52, 0, 53, 54, 0,
3287  0, 0, 0, 56, 57, 58, 59, 60, 61, 62,
3288  63, 64, 0, 0, 0, 0, 0, 622, 563, 0,
3289  0, 623, 0, 0, 0, 0, 0, 0, 0, 0,
3290  0, 0, 274, 165, 166, 167, 168, 169, 170, 171,
3291  172, 173, 0, 0, 174, 175, 0, 0, 176, 177,
3292  178, 179, 0, 0, 0, 0, 0, 0, 0, 0,
3293  0, 0, 0, 180, 181, 0, 0, 0, 0, 0,
3294  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3295  0, 0, 0, 0, 0, 182, 183, 184, 185, 186,
3296  187, 188, 189, 190, 191, 0, 192, 193, 625, 571,
3297  0, 0, 626, 194, 0, 0, 0, 0, 0, 0,
3298  0, 0, 0, 0, 165, 166, 167, 168, 169, 170,
3299  171, 172, 173, 0, 0, 174, 175, 0, 0, 176,
3300  177, 178, 179, 0, 0, 0, 0, 0, 0, 0,
3301  0, 0, 0, 0, 180, 181, 0, 0, 0, 0,
3302  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3303  0, 0, 0, 0, 0, 0, 182, 183, 184, 185,
3304  186, 187, 188, 189, 190, 191, 0, 192, 193, 649,
3305  563, 0, 0, 650, 194, 0, 0, 0, 0, 0,
3306  0, 0, 0, 0, 0, 165, 166, 167, 168, 169,
3307  170, 171, 172, 173, 0, 0, 174, 175, 0, 0,
3308  176, 177, 178, 179, 0, 0, 0, 0, 0, 0,
3309  0, 0, 0, 0, 0, 180, 181, 0, 0, 0,
3310  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3311  0, 0, 0, 0, 0, 0, 0, 182, 183, 184,
3312  185, 186, 187, 188, 189, 190, 191, 0, 192, 193,
3313  652, 571, 0, 0, 653, 194, 0, 0, 0, 0,
3314  0, 0, 0, 0, 0, 0, 165, 166, 167, 168,
3315  169, 170, 171, 172, 173, 0, 0, 174, 175, 0,
3316  0, 176, 177, 178, 179, 0, 0, 0, 0, 0,
3317  0, 0, 0, 0, 0, 0, 180, 181, 0, 0,
3318  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3319  0, 0, 0, 0, 0, 0, 0, 0, 182, 183,
3320  184, 185, 186, 187, 188, 189, 190, 191, 0, 192,
3321  193, 740, 563, 0, 0, 741, 194, 0, 0, 0,
3322  0, 0, 0, 0, 0, 0, 0, 165, 166, 167,
3323  168, 169, 170, 171, 172, 173, 0, 0, 174, 175,
3324  0, 0, 176, 177, 178, 179, 0, 0, 0, 0,
3325  0, 0, 0, 0, 0, 0, 0, 180, 181, 0,
3326  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3327  0, 0, 0, 0, 0, 0, 0, 0, 0, 182,
3328  183, 184, 185, 186, 187, 188, 189, 190, 191, 0,
3329  192, 193, 743, 571, 0, 0, 744, 194, 0, 0,
3330  0, 0, 0, 0, 0, 0, 0, 0, 165, 166,
3331  167, 168, 169, 170, 171, 172, 173, 0, 0, 174,
3332  175, 0, 0, 176, 177, 178, 179, 0, 0, 0,
3333  0, 0, 0, 0, 0, 0, 0, 0, 180, 181,
3334  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3335  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3336  182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
3337  0, 192, 193, 749, 563, 0, 0, 750, 194, 0,
3338  0, 0, 0, 0, 0, 0, 0, 0, 0, 165,
3339  166, 167, 168, 169, 170, 171, 172, 173, 0, 0,
3340  174, 175, 0, 0, 176, 177, 178, 179, 0, 0,
3341  0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
3342  181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3343  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3344  0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
3345  191, 0, 192, 193, 819, 563, 0, 0, 820, 194,
3346  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3347  165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
3348  0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
3349  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3350  180, 181, 0, 0, 0, 0, 0, 0, 0, 0,
3351  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3352  0, 0, 182, 183, 184, 185, 186, 187, 188, 189,
3353  190, 191, 0, 192, 193, 822, 571, 0, 0, 823,
3354  194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3355  0, 165, 166, 167, 168, 169, 170, 171, 172, 173,
3356  0, 0, 174, 175, 0, 0, 176, 177, 178, 179,
3357  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3358  0, 180, 181, 0, 0, 0, 0, 0, 0, 0,
3359  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3360  0, 0, 0, 182, 183, 184, 185, 186, 187, 188,
3361  189, 190, 191, 0, 192, 193, 1047, 563, 0, 0,
3362  1048, 194, 0, 0, 0, 0, 0, 0, 0, 0,
3363  0, 0, 165, 166, 167, 168, 169, 170, 171, 172,
3364  173, 0, 0, 174, 175, 0, 0, 176, 177, 178,
3365  179, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3366  0, 0, 180, 181, 0, 0, 0, 0, 0, 0,
3367  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3368  0, 0, 0, 0, 182, 183, 184, 185, 186, 187,
3369  188, 189, 190, 191, 0, 192, 193, 1050, 571, 0,
3370  0, 1051, 194, 0, 0, 0, 0, 0, 0, 0,
3371  0, 0, 0, 165, 166, 167, 168, 169, 170, 171,
3372  172, 173, 0, 0, 174, 175, 0, 0, 176, 177,
3373  178, 179, 0, 0, 0, 0, 0, 0, 0, 0,
3374  0, 0, 0, 180, 181, 0, 0, 0, 0, 0,
3375  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3376  0, 0, 0, 0, 0, 182, 183, 184, 185, 186,
3377  187, 188, 189, 190, 191, 0, 192, 193, 1064, 563,
3378  0, 0, 1065, 194, 0, 0, 0, 0, 0, 0,
3379  0, 0, 0, 0, 165, 166, 167, 168, 169, 170,
3380  171, 172, 173, 0, 0, 174, 175, 0, 0, 176,
3381  177, 178, 179, 0, 0, 0, 0, 0, 0, 0,
3382  0, 0, 0, 0, 180, 181, 0, 0, 0, 0,
3383  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3384  0, 0, 0, 0, 0, 0, 182, 183, 184, 185,
3385  186, 187, 188, 189, 190, 191, 0, 192, 193, 0,
3386  0, 0, 0, 0, 194
3387 };
3388 
3389 #define yypact_value_is_default(yystate) \
3390  ((yystate) == (-876))
3391 
3392 #define yytable_value_is_error(yytable_value) \
3393  ((yytable_value) == (-643))
3394 
3395 static const yytype_int16 yycheck[] =
3396 {
3397  2, 57, 27, 86, 29, 69, 98, 66, 364, 22,
3398  81, 16, 17, 8, 97, 20, 28, 418, 584, 4,
3399  477, 329, 8, 16, 17, 426, 358, 20, 92, 55,
3400  473, 89, 426, 28, 92, 65, 8, 583, 357, 796,
3401  96, 360, 28, 787, 266, 2, 55, 4, 270, 76,
3402  92, 53, 54, 51, 69, 81, 28, 874, 601, 2,
3403  53, 4, 57, 76, 446, 224, 787, 93, 94, 95,
3404  464, 51, 728, 16, 17, 796, 732, 20, 26, 381,
3405  523, 667, 407, 408, 876, 404, 37, 38, 935, 624,
3406  422, 25, 254, 26, 29, 13, 0, 25, 680, 87,
3407  88, 96, 421, 63, 423, 16, 17, 13, 51, 20,
3408  63, 78, 55, 88, 931, 88, 651, 88, 88, 13,
3409  329, 16, 17, 66, 716, 20, 137, 88, 25, 13,
3410  449, 723, 87, 88, 145, 1010, 219, 140, 81, 87,
3411  88, 90, 145, 475, 145, 88, 89, 896, 477, 92,
3412  93, 94, 95, 113, 25, 122, 144, 476, 53, 54,
3413  113, 25, 37, 38, 326, 13, 249, 26, 117, 144,
3414  987, 144, 25, 144, 144, 896, 88, 1024, 88, 114,
3415  25, 136, 939, 144, 13, 1060, 134, 25, 136, 144,
3416  25, 139, 256, 985, 145, 278, 144, 13, 407, 408,
3417  944, 134, 951, 137, 275, 748, 1023, 742, 206, 137,
3418  667, 139, 13, 137, 256, 134, 218, 752, 939, 137,
3419  247, 145, 224, 228, 142, 230, 231, 145, 56, 231,
3420  631, 632, 144, 139, 144, 228, 142, 230, 632, 145,
3421  137, 256, 139, 241, 274, 139, 661, 272, 142, 275,
3422  54, 145, 310, 311, 312, 313, 254, 589, 142, 1003,
3423  642, 145, 705, 206, 920, 324, 137, 599, 88, 89,
3424  329, 590, 92, 137, 254, 134, 435, 863, 13, 865,
3425  139, 600, 1003, 27, 137, 228, 821, 230, 231, 1010,
3426  373, 234, 137, 236, 142, 252, 598, 145, 241, 137,
3427  90, 327, 137, 367, 88, 887, 263, 365, 366, 252,
3428  856, 254, 234, 142, 857, 90, 145, 228, 327, 230,
3429  263, 864, 137, 1067, 309, 367, 142, 117, 326, 145,
3430  145, 324, 275, 228, 13, 230, 329, 259, 667, 1060,
3431  262, 142, 117, 290, 145, 292, 326, 294, 407, 408,
3432  63, 298, 309, 358, 920, 13, 358, 314, 90, 15,
3433  144, 17, 137, 778, 779, 360, 309, 310, 311, 312,
3434  313, 314, 315, 316, 139, 957, 958, 143, 710, 88,
3435  145, 324, 738, 326, 327, 117, 329, 88, 713, 714,
3436  709, 117, 711, 87, 88, 720, 721, 110, 142, 112,
3437  204, 145, 473, 207, 208, 209, 863, 142, 865, 404,
3438  145, 137, 90, 90, 234, 358, 236, 422, 361, 727,
3439  422, 143, 365, 366, 646, 87, 88, 143, 423, 90,
3440  143, 443, 434, 435, 28, 144, 25, 380, 143, 117,
3441  117, 984, 136, 144, 446, 139, 117, 473, 443, 25,
3442  144, 534, 523, 63, 449, 137, 117, 443, 787, 874,
3443  1042, 876, 621, 142, 407, 408, 145, 796, 415, 870,
3444  475, 443, 90, 475, 136, 142, 870, 100, 145, 422,
3445  117, 476, 144, 103, 142, 90, 25, 145, 63, 446,
3446  310, 311, 312, 313, 90, 315, 316, 523, 707, 117,
3447  110, 124, 112, 446, 713, 714, 428, 832, 87, 88,
3448  432, 720, 721, 456, 1049, 437, 931, 932, 582, 583,
3449  324, 117, 90, 418, 137, 329, 551, 139, 117, 56,
3450  473, 453, 475, 143, 863, 110, 865, 112, 113, 566,
3451  115, 117, 91, 490, 569, 365, 366, 574, 137, 117,
3452  497, 140, 908, 25, 567, 63, 145, 136, 914, 67,
3453  380, 137, 575, 139, 140, 144, 461, 896, 63, 145,
3454  985, 117, 987, 407, 408, 577, 647, 54, 117, 137,
3455  523, 579, 609, 581, 589, 14, 15, 589, 65, 66,
3456  424, 425, 585, 90, 599, 590, 609, 599, 137, 624,
3457  522, 140, 110, 615, 112, 600, 145, 609, 1023, 137,
3458  939, 770, 70, 417, 418, 110, 450, 112, 113, 621,
3459  615, 647, 426, 832, 960, 961, 651, 139, 52, 615,
3460  54, 55, 56, 57, 705, 52, 579, 896, 581, 56,
3461  642, 134, 70, 615, 140, 117, 589, 52, 707, 54,
3462  55, 56, 57, 90, 713, 714, 599, 461, 601, 602,
3463  464, 720, 721, 139, 90, 137, 758, 117, 140, 127,
3464  128, 129, 139, 145, 1003, 141, 678, 56, 680, 705,
3465  117, 1010, 746, 135, 1016, 642, 137, 745, 90, 747,
3466  717, 117, 635, 87, 88, 113, 70, 724, 1017, 642,
3467  756, 1037, 1038, 113, 647, 710, 113, 1043, 710, 1045,
3468  1046, 137, 516, 137, 113, 117, 711, 742, 137, 90,
3469  790, 97, 724, 645, 794, 727, 728, 752, 730, 142,
3470  732, 1060, 137, 90, 727, 137, 631, 63, 1074, 1075,
3471  1076, 1077, 136, 17, 1003, 586, 117, 1083, 1007, 706,
3472  144, 1010, 90, 1012, 56, 121, 26, 58, 25, 784,
3473  117, 756, 705, 706, 707, 140, 137, 710, 770, 70,
3474  713, 714, 137, 832, 137, 63, 135, 720, 721, 117,
3475  137, 585, 602, 134, 110, 137, 112, 113, 846, 87,
3476  88, 137, 856, 682, 858, 684, 821, 137, 99, 100,
3477  143, 1060, 745, 1062, 747, 748, 143, 809, 1067, 811,
3478  1069, 44, 616, 137, 618, 635, 137, 87, 88, 2,
3479  1079, 4, 110, 124, 112, 113, 896, 631, 632, 139,
3480  90, 90, 754, 16, 17, 70, 117, 20, 136, 841,
3481  10, 8, 844, 135, 13, 843, 144, 137, 117, 771,
3482  85, 86, 850, 851, 137, 52, 854, 117, 117, 137,
3483  782, 137, 52, 927, 134, 137, 136, 52, 51, 139,
3484  10, 896, 676, 135, 144, 10, 137, 137, 137, 713,
3485  714, 907, 119, 66, 967, 887, 720, 721, 70, 832,
3486  125, 126, 127, 128, 129, 141, 737, 15, 702, 897,
3487  843, 139, 900, 846, 70, 88, 89, 850, 851, 92,
3488  137, 854, 753, 911, 857, 135, 137, 135, 920, 85,
3489  86, 864, 137, 727, 26, 745, 951, 747, 91, 955,
3490  9, 765, 766, 1003, 768, 769, 137, 1007, 936, 937,
3491  1010, 140, 1012, 125, 126, 127, 128, 129, 142, 137,
3492  137, 873, 117, 137, 897, 957, 958, 900, 124, 125,
3493  126, 127, 128, 129, 907, 990, 137, 122, 911, 137,
3494  87, 88, 790, 971, 796, 973, 1002, 799, 137, 137,
3495  137, 979, 786, 137, 137, 87, 88, 56, 137, 135,
3496  1060, 122, 1062, 936, 937, 884, 885, 1067, 832, 1069,
3497  889, 999, 891, 925, 893, 137, 847, 56, 849, 1079,
3498  814, 1016, 955, 111, 1016, 137, 1018, 1019, 859, 136,
3499  139, 137, 1017, 206, 1049, 137, 846, 144, 971, 137,
3500  973, 456, 134, 139, 136, 869, 979, 139, 137, 70,
3501  1042, 984, 144, 93, 95, 228, 896, 230, 231, 853,
3502  724, 234, 811, 236, 85, 86, 999, 1019, 241, 1002,
3503  778, 87, 88, 87, 88, 1024, 870, 759, 699, 252,
3504  515, 254, 1018, 1016, 896, 298, 917, 918, 896, 101,
3505  263, 922, 210, 59, 96, 926, 928, 87, 88, 1003,
3506  790, 122, 123, 124, 125, 126, 127, 128, 129, 87,
3507  88, 87, 88, 787, 87, 88, 995, 996, 997, 998,
3508  136, 1007, 136, -1, 87, 88, -1, 939, 144, 941,
3509  144, -1, -1, -1, 946, -1, 309, 310, 311, 312,
3510  313, 314, 315, 316, -1, -1, 136, -1, 87, 88,
3511  -1, 324, -1, 326, 144, -1, 329, -1, 136, -1,
3512  136, -1, 993, 136, -1, -1, 144, -1, 144, -1,
3513  -1, 144, -1, 136, -1, -1, 16, 17, -1, 1058,
3514  20, 144, 63, -1, -1, 358, -1, -1, 361, 1020,
3515  1021, -1, 365, 366, -1, 1003, -1, 136, 1010, 1007,
3516  1012, -1, 1010, -1, 1012, 144, -1, 380, 48, 49,
3517  -1, -1, -1, 53, 54, -1, -1, 1029, 52, -1,
3518  54, 55, 56, 57, 58, 63, 66, 67, -1, 110,
3519  -1, 112, 113, -1, 407, 408, 70, 52, -1, 54,
3520  55, 56, 57, 58, -1, -1, -1, -1, 1060, 422,
3521  1062, -1, 1060, -1, 1062, 70, -1, 1069, 92, 1067,
3522  -1, 1069, -1, -1, 98, 99, 100, 1079, -1, -1,
3523  -1, 1079, 110, 446, 112, 113, 52, 92, 54, 55,
3524  56, 57, -1, 456, 99, 100, -1, -1, 54, 55,
3525  124, 57, 52, 127, 54, 55, 56, 57, 0, 65,
3526  66, -1, 475, -1, -1, 139, 8, 9, 10, 124,
3527  -1, 13, 14, 15, -1, 17, 92, -1, 44, -1,
3528  -1, -1, 98, -1, 26, 27, 40, 41, 42, 43,
3529  44, 2, 92, 4, -1, 37, 38, -1, 40, 41,
3530  42, 43, 44, -1, 70, 71, 72, 73, 74, 75,
3531  76, 77, 78, 79, 80, 81, 82, -1, -1, 85,
3532  86, -1, -1, -1, 204, -1, -1, 207, 208, 209,
3533  -1, 211, 52, -1, 54, 55, 56, 57, -1, -1,
3534  51, -1, -1, -1, 55, 87, 88, -1, 228, -1,
3535  230, 231, 118, -1, 120, 121, 122, 123, 124, 125,
3536  126, 127, 128, 129, -1, -1, 579, -1, 581, 111,
3537  81, 137, 92, -1, -1, -1, 589, -1, 98, -1,
3538  -1, -1, 93, 94, 95, -1, 599, -1, 601, 602,
3539  -1, -1, 134, 135, -1, -1, -1, 139, 140, -1,
3540  142, -1, 144, 145, 52, 44, 54, 55, 56, 57,
3541  59, 60, 61, 62, -1, -1, -1, -1, -1, -1,
3542  -1, -1, 635, -1, -1, -1, -1, -1, -1, 642,
3543  -1, 70, 71, 72, 73, 74, 75, 76, 77, 78,
3544  79, 80, 81, 82, 324, -1, 85, 86, -1, 329,
3545  330, 331, 332, 333, 334, 335, 336, 337, 338, 339,
3546  340, 341, 342, 343, 344, 345, 346, 347, 348, 349,
3547  350, 351, 352, 353, 354, 355, -1, -1, 358, 118,
3548  -1, 120, 121, 122, 123, 124, 125, 126, 127, 128,
3549  129, -1, -1, 706, 707, 206, -1, 710, -1, -1,
3550  713, 714, -1, -1, -1, -1, -1, 720, 721, -1,
3551  -1, 52, -1, 54, 55, 56, 57, 58, -1, -1,
3552  -1, -1, -1, -1, -1, -1, -1, 407, 408, 70,
3553  241, -1, 745, -1, 747, 748, 416, 417, 418, -1,
3554  -1, 252, 422, 254, 424, 425, 426, -1, -1, -1,
3555  -1, 92, 263, -1, -1, -1, -1, 98, 99, 100,
3556  -1, -1, -1, -1, 275, 445, -1, -1, -1, -1,
3557  450, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3558  -1, 461, -1, 124, 464, -1, 127, -1, -1, -1,
3559  -1, -1, -1, -1, -1, 475, -1, -1, 309, -1,
3560  -1, -1, -1, 314, 145, -1, 52, -1, 54, 55,
3561  56, 57, 58, -1, -1, 326, 327, -1, 329, 832,
3562  -1, 501, -1, -1, 70, -1, -1, -1, -1, -1,
3563  843, -1, -1, 846, -1, -1, 516, 850, 851, -1,
3564  -1, 854, -1, -1, 857, -1, 92, -1, -1, -1,
3565  361, 864, 98, 99, 100, 2, -1, 4, -1, -1,
3566  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3567  -1, -1, -1, -1, -1, -1, -1, -1, 124, -1,
3568  -1, 127, -1, -1, 897, -1, -1, 900, -1, -1,
3569  -1, -1, -1, -1, -1, -1, 407, 408, 911, -1,
3570  -1, -1, -1, -1, 51, 585, -1, -1, 55, 589,
3571  -1, -1, -1, -1, -1, -1, -1, -1, -1, 599,
3572  -1, -1, -1, 936, 937, -1, -1, -1, -1, -1,
3573  -1, -1, -1, -1, 81, 446, 616, -1, 618, -1,
3574  -1, -1, -1, -1, -1, 456, 93, 94, 95, 96,
3575  -1, 631, 632, -1, -1, -1, -1, -1, 971, -1,
3576  973, -1, 473, -1, -1, -1, 979, -1, -1, -1,
3577  -1, 984, -1, -1, -1, -1, -1, -1, -1, -1,
3578  -1, -1, -1, -1, -1, -1, 999, -1, -1, -1,
3579  -1, -1, -1, -1, -1, -1, 676, -1, -1, -1,
3580  -1, -1, -1, 1016, -1, -1, -1, -1, -1, -1,
3581  -1, -1, 523, -1, -1, -1, -1, -1, -1, -1,
3582  -1, -1, 702, -1, -1, -1, -1, 707, 708, -1,
3583  710, -1, -1, 713, 714, -1, -1, -1, -1, -1,
3584  720, 721, -1, -1, -1, -1, -1, 727, -1, -1,
3585  -1, -1, -1, -1, -1, -1, -1, -1, -1, 206,
3586  -1, -1, -1, -1, -1, -1, -1, -1, 579, -1,
3587  581, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3588  -1, -1, -1, -1, -1, 765, 766, -1, 768, 769,
3589  601, -1, -1, -1, 241, -1, -1, -1, -1, -1,
3590  -1, -1, -1, -1, -1, 252, 786, 254, -1, -1,
3591  -1, -1, -1, -1, -1, -1, 263, -1, -1, -1,
3592  -1, -1, -1, -1, -1, -1, -1, -1, 275, -1,
3593  -1, 642, -1, -1, 814, -1, 647, -1, -1, -1,
3594  -1, -1, -1, -1, 824, -1, -1, -1, -1, -1,
3595  -1, -1, 832, -1, -1, -1, -1, -1, -1, -1,
3596  -1, -1, 309, -1, -1, -1, -1, 314, -1, 2,
3597  -1, 4, -1, 853, -1, -1, -1, 688, -1, 326,
3598  327, -1, -1, -1, -1, -1, -1, -1, -1, 869,
3599  870, -1, -1, -1, 705, 706, 707, -1, -1, -1,
3600  -1, -1, 713, 714, -1, -1, -1, 52, 53, 720,
3601  721, 56, -1, -1, 361, -1, -1, -1, 51, -1,
3602  -1, -1, 55, 68, 69, 70, 71, 72, 73, 74,
3603  75, 76, -1, -1, 79, 80, -1, 748, 83, 84,
3604  85, 86, -1, -1, -1, -1, -1, -1, 81, -1,
3605  -1, -1, -1, 98, 99, -1, -1, -1, -1, -1,
3606  93, 94, 95, 96, -1, 2, -1, 4, -1, -1,
3607  -1, -1, -1, -1, -1, 120, 121, 122, 123, 124,
3608  125, 126, 127, 128, 129, -1, 131, 132, -1, -1,
3609  -1, -1, -1, 138, -1, -1, -1, -1, -1, 446,
3610  -1, -1, -1, -1, -1, -1, -1, -1, -1, 456,
3611  -1, -1, -1, -1, 51, -1, -1, -1, -1, -1,
3612  -1, 832, -1, 2, -1, 4, 473, -1, -1, -1,
3613  -1, -1, 843, -1, -1, -1, 1016, -1, -1, 850,
3614  851, -1, -1, 854, -1, -1, 857, -1, -1, -1,
3615  -1, -1, -1, 864, -1, -1, 93, -1, -1, 70,
3616  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
3617  81, 82, 51, 206, 85, 86, 523, -1, -1, -1,
3618  -1, -1, -1, -1, -1, -1, 897, -1, -1, 900,
3619  -1, -1, -1, -1, -1, -1, 907, -1, -1, -1,
3620  911, -1, -1, -1, -1, -1, -1, 118, 241, 120,
3621  121, 122, 123, 124, 125, 126, 127, 128, 129, 252,
3622  -1, 254, -1, -1, -1, 936, 937, -1, -1, -1,
3623  263, -1, 579, -1, 581, -1, -1, -1, -1, -1,
3624  -1, -1, 275, -1, 955, -1, -1, -1, -1, -1,
3625  -1, -1, -1, -1, 601, -1, -1, -1, -1, -1,
3626  971, -1, 973, -1, -1, -1, -1, -1, 979, 206,
3627  -1, -1, -1, 984, -1, -1, 309, -1, -1, -1,
3628  -1, 314, -1, -1, -1, -1, -1, -1, 999, -1,
3629  -1, 1002, -1, 326, 327, 642, -1, -1, -1, -1,
3630  647, -1, -1, -1, 241, -1, -1, -1, -1, -1,
3631  -1, -1, -1, -1, -1, 252, -1, 254, -1, -1,
3632  -1, -1, -1, -1, -1, -1, 263, 206, 361, -1,
3633  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3634  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3635  -1, -1, -1, -1, -1, -1, -1, -1, 705, 706,
3636  -1, -1, 241, -1, -1, -1, -1, -1, -1, -1,
3637  -1, -1, 309, 252, -1, 254, -1, 314, -1, -1,
3638  -1, -1, -1, -1, 263, -1, -1, 52, 53, 326,
3639  -1, 56, 329, -1, -1, -1, -1, -1, -1, -1,
3640  -1, 748, -1, 68, 69, 70, 71, 72, 73, 74,
3641  75, 76, -1, 446, 79, 80, -1, -1, 83, 84,
3642  85, 86, -1, 456, 361, -1, -1, -1, -1, -1,
3643  309, -1, -1, 98, 99, 314, -1, -1, -1, -1,
3644  473, -1, -1, -1, -1, -1, -1, 326, -1, -1,
3645  329, -1, -1, -1, -1, 120, 121, 122, 123, 124,
3646  125, 126, 127, 128, 129, -1, 131, 132, -1, -1,
3647  407, 408, -1, 138, -1, -1, -1, -1, -1, -1,
3648  -1, -1, 361, 70, 71, 72, 73, 74, 75, 76,
3649  523, -1, 79, 80, -1, -1, 843, -1, 85, 86,
3650  -1, -1, -1, 850, 851, -1, -1, 854, -1, 446,
3651  857, -1, -1, -1, -1, -1, -1, 864, -1, 456,
3652  -1, -1, -1, -1, -1, -1, -1, -1, 407, 408,
3653  -1, -1, -1, 120, 121, 122, 123, 124, 125, 126,
3654  127, 128, 129, -1, -1, -1, 579, -1, 581, -1,
3655  897, -1, -1, 900, -1, -1, -1, -1, -1, -1,
3656  907, -1, -1, -1, 911, -1, -1, 446, 601, -1,
3657  -1, -1, -1, -1, -1, -1, -1, 456, -1, -1,
3658  -1, -1, -1, -1, -1, -1, -1, -1, -1, 936,
3659  937, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3660  -1, -1, -1, -1, -1, -1, -1, -1, 955, 642,
3661  -1, -1, -1, -1, 647, -1, -1, -1, -1, -1,
3662  -1, -1, -1, -1, 971, -1, 973, -1, -1, -1,
3663  -1, -1, 979, -1, -1, -1, -1, 984, -1, -1,
3664  -1, -1, 579, -1, 581, -1, -1, -1, -1, -1,
3665  -1, -1, 999, -1, -1, 1002, -1, -1, -1, -1,
3666  -1, 52, 53, -1, 601, 56, -1, -1, -1, -1,
3667  -1, -1, 705, 706, -1, -1, -1, 68, 69, 70,
3668  71, 72, 73, 74, 75, 76, -1, -1, 79, 80,
3669  -1, -1, 83, 84, 85, 86, -1, -1, -1, -1,
3670  579, -1, 581, -1, -1, 642, -1, 98, 99, -1,
3671  -1, -1, -1, -1, -1, 748, -1, -1, -1, -1,
3672  -1, -1, 601, -1, -1, -1, -1, -1, -1, 120,
3673  121, 122, 123, 124, 125, 126, 127, 128, 129, -1,
3674  131, 132, -1, -1, -1, -1, -1, 138, -1, -1,
3675  70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
3676  80, 81, 82, 642, -1, 85, 86, -1, -1, 706,
3677  707, -1, -1, -1, -1, -1, 713, 714, -1, -1,
3678  -1, -1, -1, 720, 721, -1, -1, -1, -1, -1,
3679  -1, -1, -1, -1, -1, -1, -1, -1, 118, -1,
3680  120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
3681  843, 748, -1, -1, -1, -1, -1, 850, 851, -1,
3682  -1, 854, -1, -1, 857, 145, -1, 706, 707, -1,
3683  -1, 864, -1, -1, 713, 714, -1, -1, -1, -1,
3684  -1, 720, 721, -1, -1, -1, -1, -1, -1, -1,
3685  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3686  -1, -1, -1, -1, 897, -1, -1, 900, -1, 748,
3687  -1, -1, -1, -1, 907, -1, -1, -1, 911, -1,
3688  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3689  -1, -1, -1, -1, -1, 832, -1, -1, -1, -1,
3690  -1, -1, -1, 936, 937, -1, 843, -1, -1, -1,
3691  -1, -1, -1, 850, 851, -1, -1, 854, -1, -1,
3692  857, -1, 955, -1, -1, -1, -1, 864, -1, -1,
3693  -1, -1, -1, -1, -1, -1, -1, -1, 971, -1,
3694  973, -1, -1, -1, -1, -1, 979, -1, -1, -1,
3695  -1, 984, -1, 832, -1, -1, -1, -1, -1, -1,
3696  897, -1, -1, 900, 843, -1, 999, -1, -1, 1002,
3697  907, 850, 851, -1, 911, 854, -1, -1, 857, -1,
3698  -1, -1, -1, -1, -1, 864, -1, -1, -1, -1,
3699  -1, -1, -1, -1, -1, -1, -1, -1, -1, 936,
3700  937, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3701  -1, -1, -1, -1, -1, -1, -1, -1, 897, -1,
3702  -1, 900, -1, -1, -1, -1, -1, -1, -1, -1,
3703  -1, -1, 911, -1, 971, -1, 973, -1, -1, -1,
3704  -1, -1, 979, -1, -1, -1, -1, 984, -1, -1,
3705  -1, -1, -1, -1, -1, -1, -1, 936, 937, -1,
3706  -1, -1, 999, -1, -1, -1, -1, -1, -1, -1,
3707  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3708  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3709  -1, -1, 971, -1, 973, -1, -1, -1, -1, -1,
3710  979, -1, -1, 0, 1, 984, 3, 4, 5, 6,
3711  7, -1, -1, -1, 11, 12, -1, -1, -1, 16,
3712  999, 18, 19, 20, 21, 22, 23, 24, -1, -1,
3713  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
3714  -1, -1, 39, -1, -1, -1, -1, -1, 45, 46,
3715  47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
3716  57, -1, 59, 60, 61, 62, -1, 64, 65, 66,
3717  -1, 68, 69, -1, -1, -1, -1, -1, -1, -1,
3718  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3719  -1, -1, 89, -1, -1, 92, 93, -1, 95, 96,
3720  -1, 98, -1, -1, 101, 102, 103, 104, 105, 106,
3721  107, 108, 109, 0, -1, -1, -1, -1, -1, -1,
3722  -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
3723  17, -1, -1, 130, 131, 132, -1, -1, -1, 26,
3724  27, 28, 29, -1, -1, 142, -1, -1, 145, -1,
3725  37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
3726  -1, 70, 71, 72, 73, 74, 75, 76, 77, 78,
3727  79, 80, 81, 82, -1, -1, 85, 86, -1, -1,
3728  -1, -1, -1, 70, 71, 72, 73, 74, 75, 76,
3729  77, 78, 79, 80, 81, 82, -1, -1, 85, 86,
3730  87, 88, -1, 90, 91, -1, -1, -1, -1, -1,
3731  97, 120, 121, 122, 123, 124, 125, 126, 127, 128,
3732  129, -1, -1, -1, 111, -1, -1, 114, -1, -1,
3733  117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
3734  127, 128, 129, -1, -1, -1, -1, 134, 135, 136,
3735  137, 0, -1, 140, 141, 142, -1, 144, 145, 8,
3736  9, 10, -1, -1, 13, 14, 15, -1, 17, -1,
3737  -1, -1, -1, -1, -1, -1, 25, -1, 27, 28,
3738  29, -1, -1, -1, -1, -1, -1, -1, 37, 38,
3739  -1, 40, 41, 42, 43, 44, -1, -1, -1, 70,
3740  71, 72, 73, 74, 75, 76, 77, -1, 79, 80,
3741  -1, -1, -1, -1, 85, 86, -1, -1, -1, -1,
3742  -1, 70, 71, 72, 73, 74, 75, 76, 77, 78,
3743  79, 80, 81, 82, -1, -1, 85, 86, 87, 88,
3744  -1, 90, 91, -1, -1, -1, -1, -1, 97, 120,
3745  121, 122, 123, 124, 125, 126, 127, 128, 129, -1,
3746  -1, -1, 111, -1, -1, 114, -1, -1, 117, 118,
3747  119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
3748  129, -1, -1, -1, -1, -1, 135, 136, 137, 0,
3749  -1, 140, 141, 142, -1, 144, 145, 8, 9, 10,
3750  -1, -1, 13, 14, 15, -1, 17, -1, -1, -1,
3751  -1, -1, -1, -1, 25, -1, 27, 28, 29, -1,
3752  -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
3753  41, 42, 43, 44, -1, -1, -1, 70, 71, 72,
3754  73, 74, 75, 76, -1, -1, 79, 80, -1, -1,
3755  -1, -1, 85, 86, -1, -1, -1, -1, -1, 70,
3756  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
3757  81, 82, -1, -1, 85, 86, 87, 88, -1, 90,
3758  91, -1, -1, -1, -1, -1, 97, 120, 121, 122,
3759  123, 124, 125, 126, 127, 128, 129, -1, -1, -1,
3760  111, -1, -1, 114, -1, -1, 117, 118, 119, 120,
3761  121, 122, 123, 124, 125, 126, 127, 128, 129, -1,
3762  -1, -1, -1, -1, 135, 136, 137, 0, -1, 140,
3763  141, 142, -1, 144, 145, 8, 9, 10, -1, -1,
3764  13, 14, 15, -1, 17, -1, -1, -1, -1, -1,
3765  -1, -1, -1, 26, 27, 28, 29, -1, -1, -1,
3766  -1, -1, -1, -1, 37, 38, -1, 40, 41, 42,
3767  43, 44, -1, -1, -1, -1, -1, -1, -1, -1,
3768  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3769  -1, -1, -1, -1, -1, -1, -1, 70, 71, 72,
3770  73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
3771  -1, -1, 85, 86, 87, 88, -1, -1, 91, -1,
3772  -1, -1, -1, -1, 97, -1, -1, -1, -1, -1,
3773  -1, -1, -1, -1, -1, -1, -1, -1, 111, -1,
3774  -1, 114, -1, -1, -1, 118, 119, 120, 121, 122,
3775  123, 124, 125, 126, 127, 128, 129, -1, -1, -1,
3776  -1, 134, 135, 136, 137, 0, -1, 140, 141, 142,
3777  -1, 144, 145, 8, 9, 10, -1, -1, 13, 14,
3778  15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
3779  -1, 26, 27, 28, 29, -1, -1, -1, -1, -1,
3780  -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
3781  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3782  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3783  -1, -1, -1, -1, -1, 70, 71, 72, 73, 74,
3784  75, 76, 77, 78, 79, 80, 81, 82, -1, -1,
3785  85, 86, 87, 88, -1, -1, 91, -1, -1, -1,
3786  -1, -1, 97, -1, -1, -1, -1, -1, -1, -1,
3787  -1, -1, -1, -1, -1, -1, 111, -1, -1, 114,
3788  -1, -1, -1, 118, 119, 120, 121, 122, 123, 124,
3789  125, 126, 127, 128, 129, -1, -1, -1, -1, 134,
3790  135, 136, 137, 0, -1, 140, 141, 142, -1, 144,
3791  145, 8, 9, 10, -1, -1, 13, 14, 15, -1,
3792  17, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3793  27, 28, 29, -1, -1, -1, -1, -1, -1, -1,
3794  37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
3795  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3796  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3797  -1, -1, -1, 70, 71, 72, 73, 74, 75, 76,
3798  77, 78, 79, 80, 81, 82, -1, -1, 85, 86,
3799  87, 88, -1, 90, 91, -1, -1, -1, -1, -1,
3800  97, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3801  -1, -1, -1, -1, 111, -1, -1, 114, -1, -1,
3802  117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
3803  127, 128, 129, -1, -1, -1, -1, -1, 135, 136,
3804  137, 0, -1, 140, 141, 142, -1, 144, 145, 8,
3805  9, 10, -1, -1, 13, 14, 15, -1, 17, -1,
3806  -1, -1, -1, -1, -1, -1, -1, 26, 27, 28,
3807  -1, -1, -1, -1, -1, -1, -1, -1, 37, 38,
3808  -1, 40, 41, 42, 43, 44, -1, -1, -1, -1,
3809  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3810  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3811  -1, 70, 71, 72, 73, 74, 75, 76, 77, 78,
3812  79, 80, 81, 82, -1, -1, 85, 86, 87, 88,
3813  -1, -1, 91, -1, -1, -1, -1, -1, 97, -1,
3814  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3815  -1, -1, 111, -1, -1, -1, -1, -1, -1, 118,
3816  -1, 120, 121, 122, 123, 124, 125, 126, 127, 128,
3817  129, -1, -1, -1, -1, 134, 135, 136, 137, 0,
3818  139, 140, 141, 142, -1, 144, 145, 8, 9, 10,
3819  -1, -1, 13, 14, 15, -1, 17, -1, -1, -1,
3820  -1, -1, -1, -1, -1, -1, 27, 28, 29, -1,
3821  -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
3822  41, 42, 43, 44, -1, -1, -1, -1, -1, -1,
3823  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3824  -1, -1, -1, -1, -1, -1, -1, -1, -1, 70,
3825  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
3826  81, 82, -1, -1, 85, 86, 87, 88, -1, -1,
3827  91, -1, -1, -1, -1, -1, 97, -1, -1, -1,
3828  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3829  111, -1, -1, 114, -1, -1, -1, 118, 119, 120,
3830  121, 122, 123, 124, 125, 126, 127, 128, 129, -1,
3831  -1, -1, -1, -1, 135, 136, 137, 0, -1, 140,
3832  141, 142, -1, 144, 145, 8, 9, 10, -1, -1,
3833  13, 14, 15, -1, 17, -1, -1, -1, -1, -1,
3834  -1, -1, -1, 26, 27, 28, -1, -1, -1, -1,
3835  -1, -1, -1, -1, 37, 38, -1, 40, 41, 42,
3836  43, 44, -1, -1, -1, -1, -1, -1, -1, -1,
3837  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3838  -1, -1, -1, -1, -1, -1, -1, 70, 71, 72,
3839  73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
3840  -1, -1, 85, 86, 87, 88, -1, -1, 91, -1,
3841  -1, -1, -1, -1, 97, -1, -1, -1, -1, -1,
3842  -1, -1, -1, -1, -1, -1, -1, -1, 111, -1,
3843  -1, -1, -1, -1, -1, 118, -1, 120, 121, 122,
3844  123, 124, 125, 126, 127, 128, 129, -1, -1, -1,
3845  -1, 134, 135, 136, 137, 0, 139, 140, 141, 142,
3846  -1, 144, 145, 8, 9, 10, -1, -1, 13, 14,
3847  15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
3848  -1, -1, 27, 28, -1, -1, -1, -1, -1, -1,
3849  -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
3850  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3851  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3852  -1, -1, -1, -1, -1, 70, 71, 72, 73, 74,
3853  75, 76, 77, 78, 79, 80, 81, 82, -1, -1,
3854  85, 86, 87, 88, -1, -1, 91, -1, -1, -1,
3855  -1, -1, 97, -1, -1, -1, -1, -1, -1, -1,
3856  -1, -1, -1, -1, -1, -1, 111, -1, -1, -1,
3857  -1, -1, -1, 118, -1, 120, 121, 122, 123, 124,
3858  125, 126, 127, 128, 129, -1, -1, -1, -1, -1,
3859  135, 136, 137, 0, 139, 140, 141, 142, -1, 144,
3860  145, 8, 9, 10, -1, -1, -1, 14, 15, -1,
3861  17, -1, -1, -1, -1, -1, -1, -1, -1, 26,
3862  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3863  37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
3864  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3865  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3866  -1, -1, -1, 70, 71, 72, 73, 74, 75, 76,
3867  77, 78, 79, 80, 81, 82, -1, -1, 85, 86,
3868  87, 88, -1, 90, -1, -1, -1, -1, -1, -1,
3869  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3870  -1, -1, -1, -1, 111, -1, -1, -1, -1, -1,
3871  117, 118, -1, 120, 121, 122, 123, 124, 125, 126,
3872  127, 128, 129, -1, -1, -1, -1, 134, 135, 136,
3873  137, 0, -1, 140, -1, 142, -1, 144, 145, 8,
3874  9, 10, -1, -1, -1, 14, 15, -1, 17, -1,
3875  -1, -1, -1, -1, -1, -1, -1, 26, -1, -1,
3876  -1, -1, -1, -1, -1, -1, -1, -1, 37, 38,
3877  -1, 40, 41, 42, 43, 44, -1, -1, -1, -1,
3878  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3879  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3880  -1, 70, 71, 72, 73, 74, 75, 76, 77, 78,
3881  79, 80, 81, 82, -1, -1, 85, 86, 87, 88,
3882  -1, 90, -1, -1, -1, -1, -1, -1, -1, -1,
3883  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3884  -1, -1, 111, -1, -1, -1, -1, -1, 117, 118,
3885  -1, 120, 121, 122, 123, 124, 125, 126, 127, 128,
3886  129, -1, -1, -1, -1, 134, 135, 136, 137, 0,
3887  -1, 140, -1, 142, -1, 144, 145, 8, 9, 10,
3888  -1, -1, -1, 14, 15, -1, 17, -1, -1, -1,
3889  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3890  -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
3891  41, 42, 43, 44, -1, -1, -1, -1, -1, -1,
3892  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3893  -1, -1, -1, -1, -1, -1, -1, -1, -1, 70,
3894  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
3895  81, 82, -1, -1, 85, 86, 87, 88, -1, 90,
3896  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3897  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3898  111, -1, -1, -1, -1, -1, 117, 118, -1, 120,
3899  121, 122, 123, 124, 125, 126, 127, 128, 129, -1,
3900  -1, -1, -1, -1, 135, 136, 137, 0, -1, 140,
3901  -1, 142, -1, 144, 145, 8, 9, 10, -1, -1,
3902  -1, 14, 15, -1, 17, -1, -1, -1, -1, -1,
3903  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3904  -1, -1, -1, -1, 37, 38, -1, 40, 41, 42,
3905  43, 44, -1, -1, -1, -1, -1, -1, -1, -1,
3906  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3907  -1, -1, -1, -1, -1, -1, -1, 70, 71, 72,
3908  73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
3909  -1, -1, 85, 86, 87, 88, -1, 90, -1, -1,
3910  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3911  -1, -1, -1, -1, -1, -1, -1, -1, 111, -1,
3912  -1, -1, -1, -1, 117, 118, -1, 120, 121, 122,
3913  123, 124, 125, 126, 127, 128, 129, -1, -1, -1,
3914  -1, -1, 135, 136, 137, -1, -1, 140, -1, 142,
3915  -1, 144, 145, 1, -1, 3, 4, 5, 6, 7,
3916  8, 9, 10, 11, 12, -1, -1, 15, 16, -1,
3917  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
3918  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
3919  -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
3920  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
3921  -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
3922  68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
3923  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3924  -1, 89, -1, -1, 92, 93, -1, 95, 96, -1,
3925  98, -1, -1, 101, 102, 103, 104, 105, 106, 107,
3926  108, 109, -1, -1, -1, -1, -1, -1, -1, -1,
3927  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3928  -1, -1, 130, 131, 132, -1, -1, -1, -1, -1,
3929  -1, -1, -1, -1, 142, -1, 1, 145, 3, 4,
3930  5, 6, 7, -1, -1, 10, 11, 12, -1, 14,
3931  15, 16, -1, 18, 19, 20, 21, 22, 23, 24,
3932  -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
3933  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
3934  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
3935  55, 56, 57, -1, 59, 60, 61, 62, -1, 64,
3936  65, 66, -1, 68, 69, -1, -1, -1, -1, -1,
3937  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3938  -1, -1, -1, -1, 89, -1, -1, 92, 93, -1,
3939  95, 96, -1, 98, -1, -1, 101, 102, 103, 104,
3940  105, 106, 107, 108, 109, -1, -1, -1, -1, -1,
3941  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3942  -1, -1, -1, -1, -1, 130, 131, 132, -1, -1,
3943  -1, -1, -1, -1, -1, -1, -1, 142, -1, 1,
3944  145, 3, 4, 5, 6, 7, -1, -1, 10, 11,
3945  12, -1, -1, 15, 16, 17, 18, 19, 20, 21,
3946  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
3947  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
3948  -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
3949  52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
3950  62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
3951  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3952  -1, -1, -1, -1, -1, -1, -1, 89, -1, -1,
3953  92, 93, -1, 95, 96, -1, 98, -1, -1, 101,
3954  102, 103, 104, 105, 106, 107, 108, 109, -1, -1,
3955  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3956  -1, -1, -1, -1, -1, -1, -1, -1, 130, 131,
3957  132, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3958  142, -1, 1, 145, 3, 4, 5, 6, 7, -1,
3959  -1, 10, 11, 12, -1, -1, 15, 16, -1, 18,
3960  19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
3961  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
3962  39, -1, -1, -1, -1, -1, 45, 46, 47, 48,
3963  49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
3964  59, 60, 61, 62, -1, 64, 65, 66, -1, 68,
3965  69, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3966  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3967  89, -1, -1, 92, 93, -1, 95, 96, -1, 98,
3968  -1, -1, 101, 102, 103, 104, 105, 106, 107, 108,
3969  109, -1, -1, -1, -1, -1, -1, -1, -1, 1,
3970  -1, 3, 4, 5, 6, 7, -1, 9, 10, 11,
3971  12, 130, 131, 132, 16, -1, 18, 19, 20, 21,
3972  22, 23, 24, 142, -1, -1, 145, -1, 30, 31,
3973  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
3974  -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
3975  52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
3976  62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
3977  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3978  -1, -1, -1, -1, -1, -1, -1, 89, -1, -1,
3979  92, 93, -1, 95, 96, -1, 98, -1, -1, 101,
3980  102, 103, 104, 105, 106, 107, 108, 109, -1, -1,
3981  -1, -1, -1, -1, -1, -1, 1, -1, 3, 4,
3982  5, 6, 7, -1, -1, -1, 11, 12, 130, 131,
3983  132, 16, -1, 18, 19, 20, 21, 22, 23, 24,
3984  142, -1, -1, 145, -1, 30, 31, 32, 33, 34,
3985  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
3986  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
3987  55, 56, 57, -1, 59, 60, 61, 62, -1, 64,
3988  65, 66, -1, 68, 69, -1, -1, -1, -1, -1,
3989  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3990  -1, -1, -1, -1, 89, -1, -1, 92, 93, -1,
3991  95, 96, -1, 98, -1, -1, 101, 102, 103, 104,
3992  105, 106, 107, 108, 109, -1, -1, -1, -1, -1,
3993  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3994  -1, -1, -1, -1, -1, 130, 131, 132, 1, -1,
3995  3, 4, 5, 6, 7, 140, -1, 142, 11, 12,
3996  145, -1, -1, 16, -1, 18, 19, 20, 21, 22,
3997  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
3998  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
3999  -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
4000  53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
4001  -1, 64, 65, 66, -1, 68, 69, -1, -1, -1,
4002  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4003  -1, -1, -1, -1, -1, -1, 89, -1, -1, 92,
4004  93, -1, 95, 96, -1, 98, -1, -1, 101, 102,
4005  103, 104, 105, 106, 107, 108, 109, -1, -1, -1,
4006  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4007  -1, -1, -1, -1, -1, -1, -1, 130, 131, 132,
4008  1, -1, 3, 4, 5, 6, 7, 140, -1, 142,
4009  11, 12, 145, -1, -1, 16, -1, 18, 19, 20,
4010  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4011  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4012  -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
4013  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4014  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
4015  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4016  -1, -1, -1, -1, -1, -1, -1, -1, 89, -1,
4017  -1, 92, 93, -1, 95, 96, -1, 98, -1, -1,
4018  101, 102, 103, 104, 105, 106, 107, 108, 109, -1,
4019  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4020  -1, -1, -1, -1, -1, -1, -1, -1, -1, 130,
4021  131, 132, -1, -1, 135, -1, -1, -1, -1, -1,
4022  -1, 142, -1, 1, 145, 3, 4, 5, 6, 7,
4023  -1, -1, -1, 11, 12, -1, -1, -1, 16, -1,
4024  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
4025  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4026  -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
4027  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4028  -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
4029  68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
4030  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4031  -1, 89, -1, -1, 92, 93, -1, 95, 96, -1,
4032  98, -1, -1, 101, 102, 103, 104, 105, 106, 107,
4033  108, 109, -1, -1, -1, -1, -1, -1, -1, -1,
4034  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4035  -1, -1, 130, 131, 132, -1, -1, 135, -1, -1,
4036  -1, -1, -1, -1, 142, -1, 1, 145, 3, 4,
4037  5, 6, 7, -1, -1, 10, 11, 12, -1, -1,
4038  -1, 16, -1, 18, 19, 20, 21, 22, 23, 24,
4039  -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
4040  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
4041  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
4042  55, 56, 57, -1, 59, 60, 61, 62, -1, 64,
4043  65, 66, -1, 68, 69, -1, -1, -1, -1, -1,
4044  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4045  -1, -1, -1, -1, 89, -1, -1, 92, 93, -1,
4046  95, 96, -1, 98, -1, -1, 101, 102, 103, 104,
4047  105, 106, 107, 108, 109, -1, -1, -1, -1, -1,
4048  -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
4049  -1, -1, -1, 11, 12, 130, 131, 132, 16, -1,
4050  18, 19, 20, 21, 22, 23, 24, 142, -1, -1,
4051  145, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4052  -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
4053  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4054  -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
4055  68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
4056  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4057  -1, 89, -1, -1, 92, 93, -1, 95, 96, -1,
4058  98, -1, -1, 101, 102, 103, 104, 105, 106, 107,
4059  108, 109, -1, 111, -1, -1, -1, -1, -1, -1,
4060  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4061  11, 12, 130, 131, 132, 16, -1, 18, 19, 20,
4062  21, 22, 23, 24, 142, -1, -1, 145, -1, 30,
4063  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4064  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4065  51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
4066  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
4067  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4068  -1, -1, -1, -1, -1, -1, -1, -1, 89, -1,
4069  -1, 92, 93, -1, 95, 96, -1, 98, 99, 100,
4070  101, 102, 103, 104, 105, 106, 107, 108, 109, -1,
4071  -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
4072  4, 5, -1, 7, -1, -1, -1, 11, 12, 130,
4073  131, 132, 16, -1, 18, 19, 20, 21, 22, 23,
4074  24, -1, -1, -1, 145, -1, 30, 31, 32, 33,
4075  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
4076  -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
4077  54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
4078  64, 65, 66, -1, 68, 69, -1, -1, -1, -1,
4079  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4080  -1, -1, -1, -1, -1, 89, -1, -1, 92, 93,
4081  -1, 95, 96, -1, -1, -1, -1, 101, 102, 103,
4082  104, 105, 106, 107, 108, 109, -1, -1, -1, -1,
4083  -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
4084  7, -1, -1, -1, 11, 12, 130, 131, 132, 16,
4085  -1, 18, 19, 20, 21, 22, 23, 24, 142, -1,
4086  -1, 145, -1, 30, 31, 32, 33, 34, 35, 36,
4087  -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
4088  -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
4089  57, -1, 59, 60, 61, 62, -1, 64, 65, 66,
4090  -1, 68, 69, -1, -1, -1, -1, -1, -1, -1,
4091  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4092  -1, -1, 89, -1, -1, 92, 93, -1, 95, 96,
4093  -1, -1, -1, -1, 101, 102, 103, 104, 105, 106,
4094  107, 108, 109, -1, -1, -1, -1, -1, -1, -1,
4095  -1, -1, -1, 3, 4, 5, 6, 7, -1, -1,
4096  -1, 11, 12, 130, 131, 132, 16, -1, 18, 19,
4097  20, 21, 22, 23, 24, -1, -1, -1, 145, -1,
4098  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4099  -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
4100  50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
4101  60, 61, 62, -1, 64, 65, 66, -1, 68, 69,
4102  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4103  -1, -1, -1, -1, -1, -1, -1, -1, -1, 89,
4104  -1, -1, 92, 93, -1, 95, 96, -1, 98, -1,
4105  -1, 101, 102, 103, 104, 105, 106, 107, 108, 109,
4106  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4107  3, 4, 5, 6, 7, -1, -1, -1, 11, 12,
4108  130, 131, 132, 16, -1, 18, 19, 20, 21, 22,
4109  23, 24, 142, -1, -1, -1, -1, 30, 31, 32,
4110  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4111  -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
4112  53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
4113  -1, 64, 65, 66, -1, 68, 69, -1, -1, -1,
4114  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4115  -1, -1, -1, -1, -1, -1, 89, -1, -1, 92,
4116  93, -1, 95, 96, -1, 98, -1, -1, 101, 102,
4117  103, 104, 105, 106, 107, 108, 109, -1, -1, -1,
4118  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4119  -1, -1, -1, -1, -1, -1, -1, 130, 131, 132,
4120  -1, -1, -1, -1, -1, -1, -1, -1, -1, 142,
4121  3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
4122  13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
4123  23, 24, 25, 26, -1, -1, -1, 30, 31, 32,
4124  33, 34, 35, 36, 37, 38, 39, -1, -1, -1,
4125  -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
4126  53, 54, 55, 56, 57, -1, -1, -1, -1, -1,
4127  -1, -1, -1, -1, -1, 68, 69, 70, 71, 72,
4128  73, 74, 75, 76, -1, -1, 79, 80, -1, -1,
4129  83, 84, 85, 86, -1, -1, -1, -1, -1, -1,
4130  -1, -1, -1, -1, -1, 98, 99, -1, -1, -1,
4131  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4132  -1, -1, -1, -1, -1, -1, -1, 120, 121, 122,
4133  123, 124, 125, 126, 127, 128, 129, -1, 131, 132,
4134  -1, -1, -1, -1, -1, 138, 139, 3, 4, 5,
4135  6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
4136  16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
4137  26, -1, -1, -1, 30, 31, 32, 33, 34, 35,
4138  36, 37, 38, 39, -1, -1, -1, -1, -1, 45,
4139  46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
4140  56, 57, -1, -1, -1, -1, -1, -1, -1, -1,
4141  -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
4142  76, -1, -1, 79, 80, -1, -1, 83, 84, 85,
4143  86, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4144  -1, -1, 98, 99, -1, -1, -1, -1, -1, -1,
4145  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4146  -1, -1, -1, -1, 120, 121, 122, 123, 124, 125,
4147  126, 127, 128, 129, -1, 131, 132, -1, -1, -1,
4148  -1, -1, 138, 3, 4, 5, 6, 7, 8, 9,
4149  10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
4150  20, 21, 22, 23, 24, 25, 26, -1, -1, -1,
4151  30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
4152  -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
4153  50, 51, 52, 53, 54, -1, 56, -1, -1, -1,
4154  -1, -1, -1, -1, -1, -1, -1, -1, 68, 69,
4155  70, 71, 72, 73, 74, 75, 76, -1, -1, 79,
4156  80, -1, -1, 83, 84, 85, 86, -1, -1, -1,
4157  -1, -1, -1, -1, -1, -1, -1, -1, 98, 99,
4158  -1, -1, 102, -1, -1, -1, -1, -1, -1, -1,
4159  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4160  120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
4161  -1, 131, 132, -1, -1, -1, -1, -1, 138, 3,
4162  4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
4163  14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
4164  24, 25, 26, -1, -1, -1, 30, 31, 32, 33,
4165  34, 35, 36, 37, 38, 39, -1, -1, -1, -1,
4166  -1, 45, 46, 47, 48, 49, 50, 51, 52, 53,
4167  -1, -1, 56, -1, -1, -1, -1, -1, -1, -1,
4168  -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
4169  74, 75, 76, -1, -1, 79, 80, -1, -1, 83,
4170  84, 85, 86, -1, -1, -1, -1, -1, -1, -1,
4171  -1, -1, -1, -1, 98, 99, -1, -1, 102, -1,
4172  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4173  -1, -1, -1, -1, -1, -1, 120, 121, 122, 123,
4174  124, 125, 126, 127, 128, 129, -1, 131, 132, -1,
4175  -1, -1, -1, -1, 138, 3, 4, 5, 6, 7,
4176  8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
4177  18, 19, 20, 21, 22, 23, 24, 25, 26, -1,
4178  -1, -1, 30, 31, 32, 33, 34, 35, 36, 37,
4179  38, 39, -1, -1, -1, -1, -1, 45, 46, 47,
4180  48, 49, 50, 51, 52, 53, -1, -1, 56, -1,
4181  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4182  68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
4183  -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
4184  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4185  98, 99, -1, -1, -1, -1, -1, -1, -1, -1,
4186  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4187  -1, -1, 120, 121, 122, 123, 124, 125, 126, 127,
4188  128, 129, -1, 131, 132, 3, 4, 5, -1, 7,
4189  138, -1, -1, 11, 12, -1, -1, -1, 16, -1,
4190  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
4191  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4192  -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
4193  -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4194  -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
4195  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4196  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4197  -1, 89, -1, -1, 92, 93, -1, 95, 96, -1,
4198  -1, -1, -1, 101, 102, 103, 104, 105, 106, 107,
4199  108, 109, -1, -1, -1, -1, -1, -1, -1, -1,
4200  -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
4201  -1, -1, 130, 11, 12, -1, -1, -1, 16, 137,
4202  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
4203  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4204  -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
4205  -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4206  -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
4207  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4208  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4209  -1, 89, -1, -1, 92, 93, -1, 95, 96, -1,
4210  -1, -1, -1, 101, 102, 103, 104, 105, 106, 107,
4211  108, 109, -1, -1, -1, -1, -1, -1, -1, -1,
4212  -1, -1, -1, -1, -1, 3, 4, 5, 6, 7,
4213  -1, -1, 130, 11, 12, -1, -1, -1, 16, 137,
4214  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
4215  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4216  -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
4217  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4218  -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
4219  68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
4220  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4221  -1, 89, -1, -1, 92, 93, -1, 95, 96, -1,
4222  98, -1, -1, 101, 102, 103, 104, 105, 106, 107,
4223  108, 109, -1, -1, -1, -1, -1, -1, -1, -1,
4224  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4225  11, 12, 130, 131, 132, 16, -1, 18, 19, 20,
4226  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4227  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4228  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4229  51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
4230  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
4231  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4232  -1, -1, -1, -1, -1, -1, -1, -1, 89, -1,
4233  -1, 92, 93, -1, 95, 96, -1, 98, 99, 100,
4234  101, 102, 103, 104, 105, 106, 107, 108, 109, -1,
4235  -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
4236  4, 5, 6, 7, -1, -1, -1, 11, 12, 130,
4237  131, 132, 16, -1, 18, 19, 20, 21, 22, 23,
4238  24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
4239  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
4240  -1, 45, 46, -1, 48, 49, 50, 51, 52, 53,
4241  54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
4242  64, 65, 66, -1, 68, 69, -1, -1, -1, -1,
4243  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4244  -1, -1, -1, -1, -1, 89, -1, -1, 92, 93,
4245  -1, 95, 96, -1, 98, -1, -1, 101, 102, 103,
4246  104, 105, 106, 107, 108, 109, -1, -1, -1, -1,
4247  -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
4248  7, -1, -1, -1, 11, 12, 130, 131, 132, 16,
4249  -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
4250  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
4251  -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
4252  -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
4253  57, 58, 59, 60, 61, 62, -1, 64, 65, 66,
4254  -1, 68, 69, -1, -1, -1, -1, -1, -1, -1,
4255  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4256  -1, -1, 89, -1, -1, 92, 93, -1, 95, 96,
4257  -1, 98, 99, 100, 101, 102, 103, 104, 105, 106,
4258  107, 108, 109, -1, -1, -1, -1, -1, -1, -1,
4259  -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
4260  -1, 11, 12, 130, 131, 132, 16, -1, 18, 19,
4261  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
4262  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4263  -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
4264  50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
4265  60, 61, 62, -1, 64, 65, 66, -1, 68, 69,
4266  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4267  -1, -1, -1, -1, -1, -1, -1, -1, -1, 89,
4268  -1, -1, 92, 93, -1, 95, 96, -1, 98, 99,
4269  -1, 101, 102, 103, 104, 105, 106, 107, 108, 109,
4270  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4271  3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
4272  130, 131, 132, 16, -1, 18, 19, 20, 21, 22,
4273  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
4274  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4275  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
4276  53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
4277  -1, 64, 65, 66, -1, 68, 69, -1, -1, -1,
4278  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4279  -1, -1, -1, -1, -1, -1, 89, -1, -1, 92,
4280  93, -1, 95, 96, -1, -1, 99, 100, 101, 102,
4281  103, 104, 105, 106, 107, 108, 109, -1, -1, -1,
4282  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
4283  -1, 7, -1, -1, -1, 11, 12, 130, 131, 132,
4284  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
4285  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
4286  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
4287  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
4288  56, 57, 58, 59, 60, 61, 62, -1, 64, 65,
4289  66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
4290  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4291  -1, -1, -1, 89, -1, -1, 92, 93, -1, 95,
4292  96, -1, 98, 99, -1, 101, 102, 103, 104, 105,
4293  106, 107, 108, 109, -1, -1, -1, -1, -1, -1,
4294  -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
4295  -1, -1, 11, 12, 130, 131, 132, 16, -1, 18,
4296  19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
4297  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
4298  39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
4299  49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
4300  59, 60, 61, 62, -1, 64, 65, 66, -1, 68,
4301  69, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4302  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4303  89, -1, -1, 92, 93, -1, 95, 96, -1, -1,
4304  99, -1, 101, 102, 103, 104, 105, 106, 107, 108,
4305  109, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4306  -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
4307  12, 130, 131, 132, 16, -1, 18, 19, 20, 21,
4308  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
4309  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
4310  -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
4311  52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
4312  62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
4313  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4314  -1, -1, -1, -1, -1, -1, -1, 89, -1, -1,
4315  92, 93, -1, 95, 96, -1, 98, -1, -1, 101,
4316  102, 103, 104, 105, 106, 107, 108, 109, -1, -1,
4317  -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
4318  5, -1, 7, -1, -1, -1, 11, 12, 130, 131,
4319  132, 16, -1, 18, 19, 20, 21, 22, 23, 24,
4320  -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
4321  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
4322  -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
4323  55, 56, 57, -1, 59, 60, 61, 62, -1, 64,
4324  65, 66, -1, 68, 69, -1, -1, -1, -1, -1,
4325  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4326  -1, -1, -1, -1, 89, -1, -1, 92, 93, -1,
4327  95, 96, -1, 98, -1, -1, 101, 102, 103, 104,
4328  105, 106, 107, 108, 109, -1, -1, -1, -1, -1,
4329  -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
4330  -1, -1, -1, 11, 12, 130, 131, 132, 16, -1,
4331  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
4332  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4333  -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
4334  -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4335  -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
4336  68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
4337  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4338  -1, 89, -1, -1, 92, 93, -1, 95, 96, -1,
4339  98, -1, -1, 101, 102, 103, 104, 105, 106, 107,
4340  108, 109, -1, -1, -1, -1, -1, -1, -1, -1,
4341  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4342  11, 12, 130, 131, 132, 16, -1, 18, 19, 20,
4343  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4344  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4345  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4346  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4347  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
4348  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4349  -1, -1, -1, -1, -1, -1, -1, -1, 89, -1,
4350  -1, 92, 93, -1, 95, 96, -1, 98, -1, -1,
4351  101, 102, 103, 104, 105, 106, 107, 108, 109, -1,
4352  -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
4353  4, 5, -1, 7, -1, -1, -1, 11, 12, 130,
4354  131, 132, 16, -1, 18, 19, 20, 21, 22, 23,
4355  24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
4356  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
4357  -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
4358  54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
4359  64, 65, 66, -1, 68, 69, -1, -1, -1, -1,
4360  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4361  -1, -1, -1, -1, -1, 89, -1, -1, 92, 93,
4362  -1, 95, 96, -1, 98, -1, -1, 101, 102, 103,
4363  104, 105, 106, 107, 108, 109, -1, -1, -1, -1,
4364  -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
4365  7, -1, -1, -1, 11, 12, 130, 131, 132, 16,
4366  -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
4367  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
4368  -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
4369  -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
4370  57, -1, 59, 60, 61, 62, -1, 64, 65, 66,
4371  -1, 68, 69, -1, -1, -1, -1, -1, -1, -1,
4372  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4373  -1, -1, 89, -1, -1, 92, 93, -1, 95, 96,
4374  -1, -1, -1, -1, 101, 102, 103, 104, 105, 106,
4375  107, 108, 109, -1, -1, -1, -1, -1, -1, -1,
4376  -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
4377  -1, 11, 12, 130, 131, 132, 16, -1, 18, 19,
4378  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
4379  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4380  -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
4381  50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
4382  60, 61, 62, -1, 64, 65, 66, -1, 68, 69,
4383  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4384  -1, -1, -1, -1, -1, -1, -1, -1, -1, 89,
4385  -1, -1, 92, 93, -1, 95, 96, -1, -1, -1,
4386  -1, 101, 102, 103, 104, 105, 106, 107, 108, 109,
4387  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4388  3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
4389  130, 131, 132, 16, -1, 18, 19, 20, 21, 22,
4390  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
4391  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4392  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
4393  53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
4394  -1, 64, 65, 66, -1, 68, 69, -1, -1, -1,
4395  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4396  -1, -1, -1, -1, -1, -1, 89, -1, -1, 92,
4397  93, -1, 95, 96, -1, -1, -1, -1, 101, 102,
4398  103, 104, 105, 106, 107, 108, 109, -1, -1, -1,
4399  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
4400  -1, 7, -1, -1, -1, 11, 12, 130, 131, 132,
4401  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
4402  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
4403  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
4404  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
4405  56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
4406  66, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4407  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4408  -1, -1, -1, 89, -1, -1, 92, 93, -1, 95,
4409  96, -1, 98, -1, -1, 101, 102, 103, 104, 105,
4410  106, 107, 108, 109, -1, -1, -1, -1, -1, -1,
4411  3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
4412  -1, -1, -1, 16, 130, 18, 19, 20, 21, 22,
4413  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
4414  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4415  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
4416  53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
4417  -1, 64, 65, 66, -1, -1, -1, -1, -1, -1,
4418  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4419  -1, -1, -1, -1, -1, -1, 89, -1, -1, 92,
4420  93, -1, 95, 96, -1, 98, -1, -1, 101, 102,
4421  103, 104, 105, 106, 107, 108, 109, -1, -1, -1,
4422  -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
4423  -1, 11, 12, -1, -1, -1, 16, 130, 18, 19,
4424  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
4425  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4426  -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
4427  50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
4428  60, 61, 62, -1, 64, 65, 66, -1, -1, -1,
4429  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4430  -1, -1, -1, -1, -1, 85, -1, -1, -1, 89,
4431  -1, -1, 92, 93, -1, 95, 96, -1, -1, -1,
4432  -1, 101, 102, 103, 104, 105, 106, 107, 108, 109,
4433  -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
4434  7, -1, -1, -1, 11, 12, -1, -1, -1, 16,
4435  130, 18, 19, 20, 21, 22, 23, 24, -1, -1,
4436  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
4437  -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
4438  -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
4439  57, -1, 59, 60, 61, 62, -1, 64, 65, 66,
4440  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4441  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4442  -1, -1, 89, -1, -1, 92, 93, -1, 95, 96,
4443  -1, -1, -1, -1, 101, 102, 103, 104, 105, 106,
4444  107, 108, 109, -1, -1, -1, -1, -1, -1, 3,
4445  4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
4446  -1, -1, 16, 130, 18, 19, 20, 21, 22, 23,
4447  24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
4448  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
4449  -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
4450  54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
4451  64, 65, 66, -1, -1, -1, -1, -1, -1, -1,
4452  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4453  -1, -1, -1, -1, -1, 89, -1, -1, 92, 93,
4454  -1, 95, 96, -1, -1, -1, -1, 101, 102, 103,
4455  104, 105, 106, 107, 108, 109, -1, -1, -1, -1,
4456  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4457  11, 12, -1, -1, -1, 16, 130, 18, 19, 20,
4458  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4459  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4460  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4461  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4462  61, 62, -1, 64, 65, 66, -1, -1, -1, -1,
4463  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4464  -1, -1, -1, -1, -1, -1, -1, -1, 89, -1,
4465  -1, 92, 93, -1, 95, 96, -1, -1, -1, -1,
4466  101, 102, 103, 104, 105, 106, 107, 108, 109, -1,
4467  -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
4468  -1, -1, -1, 11, 12, -1, -1, -1, 16, 130,
4469  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
4470  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4471  -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
4472  -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4473  -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
4474  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4475  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4476  -1, 89, -1, -1, 92, 93, -1, 95, 96, -1,
4477  -1, -1, -1, 101, 102, 103, 104, 105, 106, 107,
4478  108, 109, -1, -1, -1, -1, -1, 52, 53, -1,
4479  -1, 56, -1, -1, -1, -1, -1, -1, -1, -1,
4480  -1, -1, 130, 68, 69, 70, 71, 72, 73, 74,
4481  75, 76, -1, -1, 79, 80, -1, -1, 83, 84,
4482  85, 86, -1, -1, -1, -1, -1, -1, -1, -1,
4483  -1, -1, -1, 98, 99, -1, -1, -1, -1, -1,
4484  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4485  -1, -1, -1, -1, -1, 120, 121, 122, 123, 124,
4486  125, 126, 127, 128, 129, -1, 131, 132, 52, 53,
4487  -1, -1, 56, 138, -1, -1, -1, -1, -1, -1,
4488  -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
4489  74, 75, 76, -1, -1, 79, 80, -1, -1, 83,
4490  84, 85, 86, -1, -1, -1, -1, -1, -1, -1,
4491  -1, -1, -1, -1, 98, 99, -1, -1, -1, -1,
4492  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4493  -1, -1, -1, -1, -1, -1, 120, 121, 122, 123,
4494  124, 125, 126, 127, 128, 129, -1, 131, 132, 52,
4495  53, -1, -1, 56, 138, -1, -1, -1, -1, -1,
4496  -1, -1, -1, -1, -1, 68, 69, 70, 71, 72,
4497  73, 74, 75, 76, -1, -1, 79, 80, -1, -1,
4498  83, 84, 85, 86, -1, -1, -1, -1, -1, -1,
4499  -1, -1, -1, -1, -1, 98, 99, -1, -1, -1,
4500  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4501  -1, -1, -1, -1, -1, -1, -1, 120, 121, 122,
4502  123, 124, 125, 126, 127, 128, 129, -1, 131, 132,
4503  52, 53, -1, -1, 56, 138, -1, -1, -1, -1,
4504  -1, -1, -1, -1, -1, -1, 68, 69, 70, 71,
4505  72, 73, 74, 75, 76, -1, -1, 79, 80, -1,
4506  -1, 83, 84, 85, 86, -1, -1, -1, -1, -1,
4507  -1, -1, -1, -1, -1, -1, 98, 99, -1, -1,
4508  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4509  -1, -1, -1, -1, -1, -1, -1, -1, 120, 121,
4510  122, 123, 124, 125, 126, 127, 128, 129, -1, 131,
4511  132, 52, 53, -1, -1, 56, 138, -1, -1, -1,
4512  -1, -1, -1, -1, -1, -1, -1, 68, 69, 70,
4513  71, 72, 73, 74, 75, 76, -1, -1, 79, 80,
4514  -1, -1, 83, 84, 85, 86, -1, -1, -1, -1,
4515  -1, -1, -1, -1, -1, -1, -1, 98, 99, -1,
4516  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4517  -1, -1, -1, -1, -1, -1, -1, -1, -1, 120,
4518  121, 122, 123, 124, 125, 126, 127, 128, 129, -1,
4519  131, 132, 52, 53, -1, -1, 56, 138, -1, -1,
4520  -1, -1, -1, -1, -1, -1, -1, -1, 68, 69,
4521  70, 71, 72, 73, 74, 75, 76, -1, -1, 79,
4522  80, -1, -1, 83, 84, 85, 86, -1, -1, -1,
4523  -1, -1, -1, -1, -1, -1, -1, -1, 98, 99,
4524  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4525  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4526  120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
4527  -1, 131, 132, 52, 53, -1, -1, 56, 138, -1,
4528  -1, -1, -1, -1, -1, -1, -1, -1, -1, 68,
4529  69, 70, 71, 72, 73, 74, 75, 76, -1, -1,
4530  79, 80, -1, -1, 83, 84, 85, 86, -1, -1,
4531  -1, -1, -1, -1, -1, -1, -1, -1, -1, 98,
4532  99, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4533  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4534  -1, 120, 121, 122, 123, 124, 125, 126, 127, 128,
4535  129, -1, 131, 132, 52, 53, -1, -1, 56, 138,
4536  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4537  68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
4538  -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
4539  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4540  98, 99, -1, -1, -1, -1, -1, -1, -1, -1,
4541  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4542  -1, -1, 120, 121, 122, 123, 124, 125, 126, 127,
4543  128, 129, -1, 131, 132, 52, 53, -1, -1, 56,
4544  138, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4545  -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
4546  -1, -1, 79, 80, -1, -1, 83, 84, 85, 86,
4547  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4548  -1, 98, 99, -1, -1, -1, -1, -1, -1, -1,
4549  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4550  -1, -1, -1, 120, 121, 122, 123, 124, 125, 126,
4551  127, 128, 129, -1, 131, 132, 52, 53, -1, -1,
4552  56, 138, -1, -1, -1, -1, -1, -1, -1, -1,
4553  -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
4554  76, -1, -1, 79, 80, -1, -1, 83, 84, 85,
4555  86, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4556  -1, -1, 98, 99, -1, -1, -1, -1, -1, -1,
4557  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4558  -1, -1, -1, -1, 120, 121, 122, 123, 124, 125,
4559  126, 127, 128, 129, -1, 131, 132, 52, 53, -1,
4560  -1, 56, 138, -1, -1, -1, -1, -1, -1, -1,
4561  -1, -1, -1, 68, 69, 70, 71, 72, 73, 74,
4562  75, 76, -1, -1, 79, 80, -1, -1, 83, 84,
4563  85, 86, -1, -1, -1, -1, -1, -1, -1, -1,
4564  -1, -1, -1, 98, 99, -1, -1, -1, -1, -1,
4565  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4566  -1, -1, -1, -1, -1, 120, 121, 122, 123, 124,
4567  125, 126, 127, 128, 129, -1, 131, 132, 52, 53,
4568  -1, -1, 56, 138, -1, -1, -1, -1, -1, -1,
4569  -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
4570  74, 75, 76, -1, -1, 79, 80, -1, -1, 83,
4571  84, 85, 86, -1, -1, -1, -1, -1, -1, -1,
4572  -1, -1, -1, -1, 98, 99, -1, -1, -1, -1,
4573  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4574  -1, -1, -1, -1, -1, -1, 120, 121, 122, 123,
4575  124, 125, 126, 127, 128, 129, -1, 131, 132, -1,
4576  -1, -1, -1, -1, 138
4577 };
4578 
4579 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
4580  symbol of state STATE-NUM. */
4581 static const yytype_uint16 yystos[] =
4582 {
4583  0, 147, 148, 0, 1, 3, 4, 5, 6, 7,
4584  11, 12, 16, 18, 19, 20, 21, 22, 23, 24,
4585  30, 31, 32, 33, 34, 35, 36, 39, 45, 46,
4586  47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
4587  57, 59, 60, 61, 62, 64, 65, 66, 68, 69,
4588  89, 92, 93, 95, 96, 98, 101, 102, 103, 104,
4589  105, 106, 107, 108, 109, 130, 131, 132, 149, 150,
4590  151, 158, 160, 162, 164, 165, 168, 169, 170, 172,
4591  173, 174, 176, 177, 187, 203, 222, 223, 224, 225,
4592  226, 227, 228, 229, 230, 231, 232, 259, 260, 280,
4593  281, 282, 283, 284, 285, 286, 289, 291, 292, 306,
4594  308, 309, 310, 311, 312, 313, 314, 315, 349, 362,
4595  151, 3, 4, 5, 6, 7, 8, 9, 10, 11,
4596  12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
4597  22, 23, 24, 25, 26, 30, 31, 32, 33, 34,
4598  35, 36, 37, 38, 39, 45, 46, 47, 48, 49,
4599  50, 51, 52, 53, 56, 68, 69, 70, 71, 72,
4600  73, 74, 75, 76, 79, 80, 83, 84, 85, 86,
4601  98, 99, 120, 121, 122, 123, 124, 125, 126, 127,
4602  128, 129, 131, 132, 138, 180, 181, 182, 183, 185,
4603  186, 306, 308, 39, 58, 89, 92, 98, 99, 100,
4604  103, 131, 169, 177, 187, 189, 195, 198, 200, 222,
4605  311, 312, 314, 315, 347, 348, 195, 195, 139, 196,
4606  197, 139, 192, 196, 139, 145, 356, 54, 182, 356,
4607  152, 134, 21, 22, 30, 31, 32, 168, 187, 222,
4608  187, 56, 1, 47, 92, 154, 155, 156, 158, 171,
4609  172, 362, 205, 206, 190, 200, 347, 362, 189, 346,
4610  347, 362, 46, 89, 130, 137, 176, 203, 222, 311,
4611  312, 315, 250, 251, 54, 55, 57, 180, 296, 307,
4612  295, 296, 297, 143, 287, 143, 293, 143, 290, 143,
4613  294, 310, 164, 187, 187, 142, 145, 355, 360, 361,
4614  40, 41, 42, 43, 44, 37, 38, 26, 134, 192,
4615  196, 265, 28, 257, 117, 137, 92, 98, 173, 117,
4616  70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
4617  80, 81, 82, 85, 86, 118, 120, 121, 122, 123,
4618  124, 125, 126, 127, 128, 129, 87, 88, 136, 144,
4619  353, 204, 162, 163, 163, 209, 211, 163, 355, 361,
4620  89, 170, 177, 222, 238, 311, 312, 315, 52, 56,
4621  85, 89, 178, 179, 222, 311, 312, 315, 179, 33,
4622  34, 35, 36, 49, 50, 51, 52, 56, 139, 180,
4623  313, 344, 88, 353, 354, 265, 283, 90, 90, 137,
4624  189, 56, 189, 189, 189, 295, 117, 91, 137, 199,
4625  362, 88, 136, 353, 90, 90, 137, 199, 195, 356,
4626  357, 195, 194, 195, 200, 347, 362, 162, 357, 162,
4627  54, 65, 66, 159, 139, 188, 134, 154, 88, 353,
4628  90, 158, 157, 171, 140, 355, 361, 357, 357, 158,
4629  141, 137, 145, 359, 137, 359, 135, 359, 356, 56,
4630  310, 173, 175, 137, 88, 136, 353, 252, 63, 110,
4631  112, 113, 298, 113, 298, 113, 67, 298, 113, 113,
4632  288, 298, 113, 63, 113, 113, 113, 288, 113, 63,
4633  113, 70, 142, 151, 163, 163, 163, 163, 158, 162,
4634  162, 267, 266, 97, 166, 258, 98, 164, 189, 200,
4635  201, 202, 171, 137, 176, 137, 160, 161, 164, 177,
4636  187, 189, 191, 202, 222, 315, 187, 187, 187, 187,
4637  187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
4638  187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
4639  187, 187, 52, 53, 56, 185, 264, 350, 351, 194,
4640  52, 53, 56, 185, 263, 350, 153, 154, 13, 234,
4641  360, 234, 163, 163, 355, 17, 274, 56, 88, 136,
4642  353, 25, 162, 52, 56, 178, 121, 316, 88, 136,
4643  353, 217, 345, 218, 88, 144, 352, 52, 56, 350,
4644  161, 187, 191, 161, 191, 184, 115, 189, 98, 189,
4645  198, 347, 52, 56, 194, 52, 56, 348, 357, 140,
4646  357, 137, 137, 357, 182, 208, 187, 149, 135, 350,
4647  350, 191, 134, 357, 156, 207, 347, 137, 175, 52,
4648  56, 194, 52, 56, 52, 54, 55, 56, 57, 58,
4649  70, 92, 98, 99, 100, 124, 127, 139, 255, 320,
4650  322, 323, 324, 325, 326, 327, 328, 329, 332, 333,
4651  334, 335, 338, 339, 340, 341, 342, 300, 299, 143,
4652  298, 143, 143, 143, 187, 271, 272, 268, 269, 167,
4653  271, 189, 137, 357, 175, 137, 44, 117, 44, 88,
4654  136, 353, 356, 90, 90, 192, 196, 262, 356, 358,
4655  90, 90, 192, 196, 261, 10, 233, 8, 276, 362,
4656  154, 13, 154, 27, 235, 360, 235, 274, 200, 233,
4657  52, 56, 194, 52, 56, 213, 216, 317, 215, 52,
4658  56, 178, 194, 153, 162, 219, 220, 192, 193, 196,
4659  362, 182, 189, 189, 199, 90, 90, 358, 90, 90,
4660  347, 162, 135, 149, 357, 359, 173, 358, 92, 98,
4661  239, 240, 241, 324, 322, 253, 117, 137, 321, 189,
4662  137, 343, 362, 52, 137, 343, 137, 321, 52, 137,
4663  321, 52, 301, 54, 55, 57, 305, 315, 10, 273,
4664  135, 270, 268, 10, 98, 189, 175, 158, 187, 52,
4665  56, 194, 52, 56, 119, 161, 191, 161, 191, 166,
4666  192, 141, 90, 161, 191, 161, 191, 166, 193, 189,
4667  202, 277, 362, 15, 237, 362, 14, 236, 237, 237,
4668  210, 212, 233, 137, 234, 358, 163, 360, 163, 153,
4669  358, 233, 357, 139, 318, 319, 180, 265, 257, 90,
4670  137, 357, 135, 241, 137, 324, 137, 357, 247, 356,
4671  254, 189, 320, 326, 338, 340, 329, 334, 342, 327,
4672  335, 340, 325, 327, 302, 78, 122, 245, 246, 362,
4673  245, 135, 189, 358, 187, 161, 191, 91, 278, 362,
4674  154, 9, 279, 362, 163, 233, 233, 154, 154, 189,
4675  154, 235, 153, 360, 233, 322, 153, 322, 221, 357,
4676  240, 137, 98, 239, 140, 142, 29, 114, 256, 137,
4677  321, 137, 321, 343, 137, 321, 137, 321, 321, 303,
4678  242, 244, 247, 325, 327, 328, 330, 331, 334, 336,
4679  337, 340, 342, 154, 154, 89, 177, 222, 311, 312,
4680  315, 234, 154, 234, 233, 233, 237, 274, 275, 214,
4681  233, 357, 233, 360, 318, 137, 240, 137, 324, 52,
4682  248, 249, 323, 154, 154, 327, 340, 327, 327, 304,
4683  247, 122, 117, 137, 243, 89, 222, 137, 343, 343,
4684  137, 243, 137, 243, 56, 88, 136, 353, 154, 154,
4685  154, 153, 240, 137, 137, 356, 233, 135, 321, 137,
4686  321, 321, 321, 154, 122, 222, 242, 337, 340, 56,
4687  88, 330, 334, 327, 336, 340, 327, 52, 56, 194,
4688  52, 56, 276, 236, 233, 233, 240, 249, 327, 111,
4689  137, 243, 137, 243, 52, 56, 343, 137, 243, 137,
4690  243, 243, 358, 321, 327, 340, 327, 327, 243, 137,
4691  243, 243, 243, 327, 243
4692 };
4693 
4694 #define yyerrok (yyerrstatus = 0)
4695 #define yyclearin (yychar = YYEMPTY)
4696 #define YYEMPTY (-2)
4697 #define YYEOF 0
4698 
4699 #define YYACCEPT goto yyacceptlab
4700 #define YYABORT goto yyabortlab
4701 #define YYERROR goto yyerrorlab
4702 
4703 
4704 /* Like YYERROR except do call yyerror. This remains here temporarily
4705  to ease the transition to the new meaning of YYERROR, for GCC.
4706  Once GCC version 2 has supplanted version 1, this can go. However,
4707  YYFAIL appears to be in use. Nevertheless, it is formally deprecated
4708  in Bison 2.4.2's NEWS entry, where a plan to phase it out is
4709  discussed. */
4710 
4711 #define YYFAIL goto yyerrlab
4712 #if defined YYFAIL
4713  /* This is here to suppress warnings from the GCC cpp's
4714  -Wunused-macros. Normally we don't worry about that warning, but
4715  some users do, and we want to make it easy for users to remove
4716  YYFAIL uses, which will produce warnings from Bison 2.5. */
4717 #endif
4718 
4719 #define YYRECOVERING() (!!yyerrstatus)
4720 
4721 #define YYBACKUP(Token, Value) \
4722 do \
4723  if (yychar == YYEMPTY && yylen == 1) \
4724  { \
4725  yychar = (Token); \
4726  yylval = (Value); \
4727  YYPOPSTACK (1); \
4728  goto yybackup; \
4729  } \
4730  else \
4731  { \
4732  parser_yyerror (parser, YY_("syntax error: cannot back up")); \
4733  YYERROR; \
4734  } \
4735 while (YYID (0))
4736 
4737 
4738 #define YYTERROR 1
4739 #define YYERRCODE 256
4740 
4741 
4742 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
4743  If N is 0, then set CURRENT to the empty location which ends
4744  the previous symbol: RHS[0] (always defined). */
4745 
4746 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
4747 #ifndef YYLLOC_DEFAULT
4748 # define YYLLOC_DEFAULT(Current, Rhs, N) \
4749  do \
4750  if (YYID (N)) \
4751  { \
4752  (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
4753  (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
4754  (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
4755  (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
4756  } \
4757  else \
4758  { \
4759  (Current).first_line = (Current).last_line = \
4760  YYRHSLOC (Rhs, 0).last_line; \
4761  (Current).first_column = (Current).last_column = \
4762  YYRHSLOC (Rhs, 0).last_column; \
4763  } \
4764  while (YYID (0))
4765 #endif
4766 
4767 
4768 /* This macro is provided for backward compatibility. */
4769 
4770 #ifndef YY_LOCATION_PRINT
4771 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
4772 #endif
4773 
4774 
4775 /* YYLEX -- calling `yylex' with the right arguments. */
4776 
4777 #ifdef YYLEX_PARAM
4778 # define YYLEX yylex (&yylval, YYLEX_PARAM)
4779 #else
4780 # define YYLEX yylex (&yylval, parser)
4781 #endif
4782 
4783 /* Enable debugging if requested. */
4784 #if YYDEBUG
4785 
4786 # ifndef YYFPRINTF
4787 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
4788 # define YYFPRINTF fprintf
4789 # endif
4790 
4791 # define YYDPRINTF(Args) \
4792 do { \
4793  if (yydebug) \
4794  YYFPRINTF Args; \
4795 } while (YYID (0))
4796 
4797 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
4798 do { \
4799  if (yydebug) \
4800  { \
4801  YYFPRINTF (parser, "%s ", Title); \
4802  yy_symbol_print (stderr, \
4803  Type, Value, parser); \
4804  YYFPRINTF (parser, "\n"); \
4805  } \
4806 } while (YYID (0))
4807 
4808 
4809 /*--------------------------------.
4810 | Print this symbol on YYOUTPUT. |
4811 `--------------------------------*/
4812 
4813 /*ARGSUSED*/
4814 #if (defined __STDC__ || defined __C99__FUNC__ \
4815  || defined __cplusplus || defined _MSC_VER)
4816 static void
4817 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
4818 #else
4819 static void
4820 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
4821  FILE *yyoutput;
4822  int yytype;
4823  YYSTYPE const * const yyvaluep;
4824  struct parser_params *parser;
4825 #endif
4826 {
4827  if (!yyvaluep)
4828  return;
4829  YYUSE (parser);
4830 # ifdef YYPRINT
4831  if (yytype < YYNTOKENS)
4832  YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
4833 # else
4834  YYUSE (yyoutput);
4835 # endif
4836  switch (yytype)
4837  {
4838  default:
4839  break;
4840  }
4841 }
4842 
4843 
4844 /*--------------------------------.
4845 | Print this symbol on YYOUTPUT. |
4846 `--------------------------------*/
4847 
4848 #if (defined __STDC__ || defined __C99__FUNC__ \
4849  || defined __cplusplus || defined _MSC_VER)
4850 static void
4851 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
4852 #else
4853 static void
4854 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
4855  FILE *yyoutput;
4856  int yytype;
4857  YYSTYPE const * const yyvaluep;
4858  struct parser_params *parser;
4859 #endif
4860 {
4861  if (yytype < YYNTOKENS)
4862  YYFPRINTF (parser, "token %s (", yytname[yytype]);
4863  else
4864  YYFPRINTF (parser, "nterm %s (", yytname[yytype]);
4865 
4866  yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
4867  YYFPRINTF (parser, ")");
4868 }
4869 
4870 /*------------------------------------------------------------------.
4871 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
4872 | TOP (included). |
4873 `------------------------------------------------------------------*/
4874 
4875 #if (defined __STDC__ || defined __C99__FUNC__ \
4876  || defined __cplusplus || defined _MSC_VER)
4877 static void
4878 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop, struct parser_params *parser)
4879 #else
4880 static void
4881 yy_stack_print (yybottom, yytop, parser)
4882  yytype_int16 *yybottom;
4883  yytype_int16 *yytop;
4884 #endif
4885 {
4886  YYFPRINTF (parser, "Stack now");
4887  for (; yybottom <= yytop; yybottom++)
4888  {
4889  int yybot = *yybottom;
4890  YYFPRINTF (parser, " %d", yybot);
4891  }
4892  YYFPRINTF (parser, "\n");
4893 }
4894 
4895 # define YY_STACK_PRINT(Bottom, Top) \
4896 do { \
4897  if (yydebug) \
4898  yy_stack_print ((Bottom), (Top), parser); \
4899 } while (YYID (0))
4900 
4901 
4902 /*------------------------------------------------.
4903 | Report that the YYRULE is going to be reduced. |
4904 `------------------------------------------------*/
4905 
4906 #if (defined __STDC__ || defined __C99__FUNC__ \
4907  || defined __cplusplus || defined _MSC_VER)
4908 static void
4909 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
4910 #else
4911 static void
4912 yy_reduce_print (yyvsp, yyrule, parser)
4913  YYSTYPE *yyvsp;
4914  int yyrule;
4915  struct parser_params *parser;
4916 #endif
4917 {
4918  int yynrhs = yyr2[yyrule];
4919  int yyi;
4920  unsigned long int yylno = yyrline[yyrule];
4921  YYFPRINTF (parser, "Reducing stack by rule %d (line %lu):\n",
4922  yyrule - 1, yylno);
4923  /* The symbols being reduced. */
4924  for (yyi = 0; yyi < yynrhs; yyi++)
4925  {
4926  YYFPRINTF (parser, " $%d = ", yyi + 1);
4927  yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
4928  &(yyvsp[(yyi + 1) - (yynrhs)])
4929  , parser);
4930  YYFPRINTF (parser, "\n");
4931  }
4932 }
4933 
4934 # define YY_REDUCE_PRINT(Rule) \
4935 do { \
4936  if (yydebug) \
4937  yy_reduce_print (yyvsp, Rule, parser); \
4938 } while (YYID (0))
4939 
4940 /* Nonzero means print parse trace. It is left uninitialized so that
4941  multiple parsers can coexist. */
4942 #ifndef yydebug
4943 int yydebug;
4944 #endif
4945 #else /* !YYDEBUG */
4946 # define YYDPRINTF(Args)
4947 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
4948 # define YY_STACK_PRINT(Bottom, Top)
4949 # define YY_REDUCE_PRINT(Rule)
4950 #endif /* !YYDEBUG */
4951 
4952 
4953 /* YYINITDEPTH -- initial size of the parser's stacks. */
4954 #ifndef YYINITDEPTH
4955 # define YYINITDEPTH 200
4956 #endif
4957 
4958 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
4959  if the built-in stack extension method is used).
4960 
4961  Do not make this value too large; the results are undefined if
4962  YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
4963  evaluated with infinite-precision integer arithmetic. */
4964 
4965 #ifndef YYMAXDEPTH
4966 # define YYMAXDEPTH 10000
4967 #endif
4968 
4969 
4970 #if YYERROR_VERBOSE
4971 
4972 # ifndef yystrlen
4973 # if defined __GLIBC__ && defined _STRING_H
4974 # define yystrlen strlen
4975 # else
4976 /* Return the length of YYSTR. */
4977 #if (defined __STDC__ || defined __C99__FUNC__ \
4978  || defined __cplusplus || defined _MSC_VER)
4979 static YYSIZE_T
4980 yystrlen (const char *yystr)
4981 #else
4982 static YYSIZE_T
4983 yystrlen (yystr)
4984  const char *yystr;
4985 #endif
4986 {
4987  YYSIZE_T yylen;
4988  for (yylen = 0; yystr[yylen]; yylen++)
4989  continue;
4990  return yylen;
4991 }
4992 # endif
4993 # endif
4994 
4995 # ifndef yystpcpy
4996 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
4997 # define yystpcpy stpcpy
4998 # else
4999 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
5000  YYDEST. */
5001 #if (defined __STDC__ || defined __C99__FUNC__ \
5002  || defined __cplusplus || defined _MSC_VER)
5003 static char *
5004 yystpcpy (char *yydest, const char *yysrc)
5005 #else
5006 static char *
5007 yystpcpy (yydest, yysrc)
5008  char *yydest;
5009  const char *yysrc;
5010 #endif
5011 {
5012  char *yyd = yydest;
5013  const char *yys = yysrc;
5014 
5015  while ((*yyd++ = *yys++) != '\0')
5016  continue;
5017 
5018  return yyd - 1;
5019 }
5020 # endif
5021 # endif
5022 
5023 # ifndef yytnamerr
5024 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
5025  quotes and backslashes, so that it's suitable for yyerror. The
5026  heuristic is that double-quoting is unnecessary unless the string
5027  contains an apostrophe, a comma, or backslash (other than
5028  backslash-backslash). YYSTR is taken from yytname. If YYRES is
5029  null, do not copy; instead, return the length of what the result
5030  would have been. */
5031 static YYSIZE_T
5032 yytnamerr (char *yyres, const char *yystr)
5033 {
5034  if (*yystr == '"')
5035  {
5036  YYSIZE_T yyn = 0;
5037  char const *yyp = yystr;
5038 
5039  for (;;)
5040  switch (*++yyp)
5041  {
5042  case '\'':
5043  case ',':
5044  goto do_not_strip_quotes;
5045 
5046  case '\\':
5047  if (*++yyp != '\\')
5048  goto do_not_strip_quotes;
5049  /* Fall through. */
5050  default:
5051  if (yyres)
5052  yyres[yyn] = *yyp;
5053  yyn++;
5054  break;
5055 
5056  case '"':
5057  if (yyres)
5058  yyres[yyn] = '\0';
5059  return yyn;
5060  }
5061  do_not_strip_quotes: ;
5062  }
5063 
5064  if (! yyres)
5065  return yystrlen (yystr);
5066 
5067  return yystpcpy (yyres, yystr) - yyres;
5068 }
5069 # endif
5070 
5071 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
5072  about the unexpected token YYTOKEN for the state stack whose top is
5073  YYSSP.
5074 
5075  Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
5076  not large enough to hold the message. In that case, also set
5077  *YYMSG_ALLOC to the required number of bytes. Return 2 if the
5078  required number of bytes is too large to store. */
5079 static int
5080 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
5081  yytype_int16 *yyssp, int yytoken)
5082 {
5083  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
5084  YYSIZE_T yysize = yysize0;
5085  YYSIZE_T yysize1;
5086  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
5087  /* Internationalized format string. */
5088  const char *yyformat = 0;
5089  /* Arguments of yyformat. */
5090  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
5091  /* Number of reported tokens (one for the "unexpected", one per
5092  "expected"). */
5093  int yycount = 0;
5094 
5095  /* There are many possibilities here to consider:
5096  - Assume YYFAIL is not used. It's too flawed to consider. See
5097  <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
5098  for details. YYERROR is fine as it does not invoke this
5099  function.
5100  - If this state is a consistent state with a default action, then
5101  the only way this function was invoked is if the default action
5102  is an error action. In that case, don't check for expected
5103  tokens because there are none.
5104  - The only way there can be no lookahead present (in yychar) is if
5105  this state is a consistent state with a default action. Thus,
5106  detecting the absence of a lookahead is sufficient to determine
5107  that there is no unexpected or expected token to report. In that
5108  case, just report a simple "syntax error".
5109  - Don't assume there isn't a lookahead just because this state is a
5110  consistent state with a default action. There might have been a
5111  previous inconsistent state, consistent state with a non-default
5112  action, or user semantic action that manipulated yychar.
5113  - Of course, the expected token list depends on states to have
5114  correct lookahead information, and it depends on the parser not
5115  to perform extra reductions after fetching a lookahead from the
5116  scanner and before detecting a syntax error. Thus, state merging
5117  (from LALR or IELR) and default reductions corrupt the expected
5118  token list. However, the list is correct for canonical LR with
5119  one exception: it will still contain any token that will not be
5120  accepted due to an error action in a later state.
5121  */
5122  if (yytoken != YYEMPTY)
5123  {
5124  int yyn = yypact[*yyssp];
5125  yyarg[yycount++] = yytname[yytoken];
5126  if (!yypact_value_is_default (yyn))
5127  {
5128  /* Start YYX at -YYN if negative to avoid negative indexes in
5129  YYCHECK. In other words, skip the first -YYN actions for
5130  this state because they are default actions. */
5131  int yyxbegin = yyn < 0 ? -yyn : 0;
5132  /* Stay within bounds of both yycheck and yytname. */
5133  int yychecklim = YYLAST - yyn + 1;
5134  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
5135  int yyx;
5136 
5137  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
5138  if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
5139  && !yytable_value_is_error (yytable[yyx + yyn]))
5140  {
5141  if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
5142  {
5143  yycount = 1;
5144  yysize = yysize0;
5145  break;
5146  }
5147  yyarg[yycount++] = yytname[yyx];
5148  yysize1 = yysize + yytnamerr (0, yytname[yyx]);
5149  if (! (yysize <= yysize1
5150  && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
5151  return 2;
5152  yysize = yysize1;
5153  }
5154  }
5155  }
5156 
5157  switch (yycount)
5158  {
5159 # define YYCASE_(N, S) \
5160  case N: \
5161  yyformat = S; \
5162  break
5163  YYCASE_(0, YY_("syntax error"));
5164  YYCASE_(1, YY_("syntax error, unexpected %s"));
5165  YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
5166  YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
5167  YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
5168  YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
5169 # undef YYCASE_
5170  }
5171 
5172  yysize1 = yysize + yystrlen (yyformat);
5173  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
5174  return 2;
5175  yysize = yysize1;
5176 
5177  if (*yymsg_alloc < yysize)
5178  {
5179  *yymsg_alloc = 2 * yysize;
5180  if (! (yysize <= *yymsg_alloc
5181  && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
5182  *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
5183  return 1;
5184  }
5185 
5186  /* Avoid sprintf, as that infringes on the user's name space.
5187  Don't have undefined behavior even if the translation
5188  produced a string with the wrong number of "%s"s. */
5189  {
5190  char *yyp = *yymsg;
5191  int yyi = 0;
5192  while ((*yyp = *yyformat) != '\0')
5193  if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
5194  {
5195  yyp += yytnamerr (yyp, yyarg[yyi++]);
5196  yyformat += 2;
5197  }
5198  else
5199  {
5200  yyp++;
5201  yyformat++;
5202  }
5203  }
5204  return 0;
5205 }
5206 #endif /* YYERROR_VERBOSE */
5207 
5208 /*-----------------------------------------------.
5209 | Release the memory associated to this symbol. |
5210 `-----------------------------------------------*/
5211 
5212 /*ARGSUSED*/
5213 #if (defined __STDC__ || defined __C99__FUNC__ \
5214  || defined __cplusplus || defined _MSC_VER)
5215 static void
5216 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
5217 #else
5218 static void
5219 yydestruct (yymsg, yytype, yyvaluep, parser)
5220  const char *yymsg;
5221  int yytype;
5222  YYSTYPE *yyvaluep;
5223  struct parser_params *parser;
5224 #endif
5225 {
5226  YYUSE (yyvaluep);
5227  YYUSE (parser);
5228 
5229  if (!yymsg)
5230  yymsg = "Deleting";
5231  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
5232 
5233  switch (yytype)
5234  {
5235 
5236  default:
5237  break;
5238  }
5239 }
5240 
5241 
5242 /* Prevent warnings from -Wmissing-prototypes. */
5243 #ifdef YYPARSE_PARAM
5244 #if defined __STDC__ || defined __cplusplus
5245 int yyparse (void *YYPARSE_PARAM);
5246 #else
5247 int yyparse ();
5248 #endif
5249 #else /* ! YYPARSE_PARAM */
5250 #if defined __STDC__ || defined __cplusplus
5251 int yyparse (struct parser_params *parser);
5252 #else
5253 int yyparse ();
5254 #endif
5255 #endif /* ! YYPARSE_PARAM */
5256 
5257 
5258 /*----------.
5259 | yyparse. |
5260 `----------*/
5261 
5262 #ifdef YYPARSE_PARAM
5263 #if (defined __STDC__ || defined __C99__FUNC__ \
5264  || defined __cplusplus || defined _MSC_VER)
5265 int
5266 yyparse (void *YYPARSE_PARAM)
5267 #else
5268 int
5269 yyparse (YYPARSE_PARAM)
5270  void *YYPARSE_PARAM;
5271 #endif
5272 #else /* ! YYPARSE_PARAM */
5273 #if (defined __STDC__ || defined __C99__FUNC__ \
5274  || defined __cplusplus || defined _MSC_VER)
5275 int
5276 yyparse (struct parser_params *parser)
5277 #else
5278 int
5279 yyparse (parser)
5280  struct parser_params *parser;
5281 #endif
5282 #endif
5283 {
5284 /* The lookahead symbol. */
5285 int yychar;
5286 
5287 /* The semantic value of the lookahead symbol. */
5288 YYSTYPE yylval;
5289 
5290  /* Number of syntax errors so far. */
5291  int yynerrs;
5292 
5293  int yystate;
5294  /* Number of tokens to shift before error messages enabled. */
5295  int yyerrstatus;
5296 
5297  /* The stacks and their tools:
5298  `yyss': related to states.
5299  `yyvs': related to semantic values.
5300 
5301  Refer to the stacks thru separate pointers, to allow yyoverflow
5302  to reallocate them elsewhere. */
5303 
5304  /* The state stack. */
5305  yytype_int16 yyssa[YYINITDEPTH];
5306  yytype_int16 *yyss;
5307  yytype_int16 *yyssp;
5308 
5309  /* The semantic value stack. */
5310  YYSTYPE yyvsa[YYINITDEPTH];
5311  YYSTYPE *yyvs;
5312  YYSTYPE *yyvsp;
5313 
5314  YYSIZE_T yystacksize;
5315 
5316  int yyn;
5317  int yyresult;
5318  /* Lookahead token as an internal (translated) token number. */
5319  int yytoken;
5320  /* The variables used to return semantic value and location from the
5321  action routines. */
5322  YYSTYPE yyval;
5323 
5324 #if YYERROR_VERBOSE
5325  /* Buffer for error messages, and its allocated size. */
5326  char yymsgbuf[128];
5327  char *yymsg = yymsgbuf;
5328  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
5329 #endif
5330 
5331 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
5332 
5333  /* The number of symbols on the RHS of the reduced rule.
5334  Keep to zero when no symbol should be popped. */
5335  int yylen = 0;
5336 
5337  yytoken = 0;
5338  yyss = yyssa;
5339  yyvs = yyvsa;
5340  yystacksize = YYINITDEPTH;
5341 
5342  YYDPRINTF ((parser, "Starting parse\n"));
5343 
5344  yystate = 0;
5345  yyerrstatus = 0;
5346  yynerrs = 0;
5347  yychar = YYEMPTY; /* Cause a token to be read. */
5348 
5349  /* Initialize stack pointers.
5350  Waste one element of value and location stack
5351  so that they stay on the same level as the state stack.
5352  The wasted elements are never initialized. */
5353  yyssp = yyss;
5354  yyvsp = yyvs;
5355 
5356  goto yysetstate;
5357 
5358 /*------------------------------------------------------------.
5359 | yynewstate -- Push a new state, which is found in yystate. |
5360 `------------------------------------------------------------*/
5361  yynewstate:
5362  /* In all cases, when you get here, the value and location stacks
5363  have just been pushed. So pushing a state here evens the stacks. */
5364  yyssp++;
5365 
5366  yysetstate:
5367  *yyssp = yystate;
5368 
5369  if (yyss + yystacksize - 1 <= yyssp)
5370  {
5371  /* Get the current used size of the three stacks, in elements. */
5372  YYSIZE_T yysize = yyssp - yyss + 1;
5373 
5374 #ifdef yyoverflow
5375  {
5376  /* Give user a chance to reallocate the stack. Use copies of
5377  these so that the &'s don't force the real ones into
5378  memory. */
5379  YYSTYPE *yyvs1 = yyvs;
5380  yytype_int16 *yyss1 = yyss;
5381 
5382  /* Each stack pointer address is followed by the size of the
5383  data in use in that stack, in bytes. This used to be a
5384  conditional around just the two extra args, but that might
5385  be undefined if yyoverflow is a macro. */
5386  yyoverflow (YY_("memory exhausted"),
5387  &yyss1, yysize * sizeof (*yyssp),
5388  &yyvs1, yysize * sizeof (*yyvsp),
5389  &yystacksize);
5390 
5391  yyss = yyss1;
5392  yyvs = yyvs1;
5393  }
5394 #else /* no yyoverflow */
5395 # ifndef YYSTACK_RELOCATE
5396  goto yyexhaustedlab;
5397 # else
5398  /* Extend the stack our own way. */
5399  if (YYMAXDEPTH <= yystacksize)
5400  goto yyexhaustedlab;
5401  yystacksize *= 2;
5402  if (YYMAXDEPTH < yystacksize)
5403  yystacksize = YYMAXDEPTH;
5404 
5405  {
5406  yytype_int16 *yyss1 = yyss;
5407  union yyalloc *yyptr =
5408  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
5409  if (! yyptr)
5410  goto yyexhaustedlab;
5411  YYSTACK_RELOCATE (yyss_alloc, yyss);
5412  YYSTACK_RELOCATE (yyvs_alloc, yyvs);
5413 # undef YYSTACK_RELOCATE
5414  if (yyss1 != yyssa)
5415  YYSTACK_FREE (yyss1);
5416  }
5417 # endif
5418 #endif /* no yyoverflow */
5419 
5420  yyssp = yyss + yysize - 1;
5421  yyvsp = yyvs + yysize - 1;
5422 
5423  YYDPRINTF ((parser, "Stack size increased to %lu\n",
5424  (unsigned long int) yystacksize));
5425 
5426  if (yyss + yystacksize - 1 <= yyssp)
5427  YYABORT;
5428  }
5429 
5430  YYDPRINTF ((parser, "Entering state %d\n", yystate));
5431 
5432  if (yystate == YYFINAL)
5433  YYACCEPT;
5434 
5435  goto yybackup;
5436 
5437 /*-----------.
5438 | yybackup. |
5439 `-----------*/
5440 yybackup:
5441 
5442  /* Do appropriate processing given the current state. Read a
5443  lookahead token if we need one and don't already have one. */
5444 
5445  /* First try to decide what to do without reference to lookahead token. */
5446  yyn = yypact[yystate];
5447  if (yypact_value_is_default (yyn))
5448  goto yydefault;
5449 
5450  /* Not known => get a lookahead token if don't already have one. */
5451 
5452  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
5453  if (yychar == YYEMPTY)
5454  {
5455  YYDPRINTF ((parser, "Reading a token: "));
5456  yychar = YYLEX;
5457  }
5458 
5459  if (yychar <= YYEOF)
5460  {
5461  yychar = yytoken = YYEOF;
5462  YYDPRINTF ((parser, "Now at end of input.\n"));
5463  }
5464  else
5465  {
5466  yytoken = YYTRANSLATE (yychar);
5467  YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
5468  }
5469 
5470  /* If the proper action on seeing token YYTOKEN is to reduce or to
5471  detect an error, take that action. */
5472  yyn += yytoken;
5473  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
5474  goto yydefault;
5475  yyn = yytable[yyn];
5476  if (yyn <= 0)
5477  {
5478  if (yytable_value_is_error (yyn))
5479  goto yyerrlab;
5480  yyn = -yyn;
5481  goto yyreduce;
5482  }
5483 
5484  /* Count tokens shifted since error; after three, turn off error
5485  status. */
5486  if (yyerrstatus)
5487  yyerrstatus--;
5488 
5489  /* Shift the lookahead token. */
5490  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
5491 
5492  /* Discard the shifted token. */
5493  yychar = YYEMPTY;
5494 
5495  yystate = yyn;
5496  *++yyvsp = yylval;
5497 
5498  goto yynewstate;
5499 
5500 
5501 /*-----------------------------------------------------------.
5502 | yydefault -- do the default action for the current state. |
5503 `-----------------------------------------------------------*/
5504 yydefault:
5505  yyn = yydefact[yystate];
5506  if (yyn == 0)
5507  goto yyerrlab;
5508  goto yyreduce;
5509 
5510 
5511 /*-----------------------------.
5512 | yyreduce -- Do a reduction. |
5513 `-----------------------------*/
5514 yyreduce:
5515  /* yyn is the number of a rule to reduce with. */
5516  yylen = yyr2[yyn];
5517 
5518  /* If YYLEN is nonzero, implement the default value of the action:
5519  `$$ = $1'.
5520 
5521  Otherwise, the following line sets YYVAL to garbage.
5522  This behavior is undocumented and Bison
5523  users should not rely upon it. Assigning to YYVAL
5524  unconditionally makes the parser a bit smaller, and it avoids a
5525  GCC warning that YYVAL may be used uninitialized. */
5526  yyval = yyvsp[1-yylen];
5527 
5528 
5529  YY_REDUCE_PRINT (yyn);
5530  switch (yyn)
5531  {
5532  case 2:
5533 
5534 /* Line 1806 of yacc.c */
5535 #line 994 "ripper.y"
5536  {
5537  SET_LEX_STATE(EXPR_BEG);
5538 #if 0
5540 #endif
5541  local_push(0);
5542 
5543  }
5544  break;
5545 
5546  case 3:
5547 
5548 /* Line 1806 of yacc.c */
5549 #line 1003 "ripper.y"
5550  {
5551 #if 0
5552  if ((yyvsp[(2) - (2)].val) && !compile_for_eval) {
5553  /* last expression should not be void */
5554  if (nd_type((yyvsp[(2) - (2)].val)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].val));
5555  else {
5556  NODE *node = (yyvsp[(2) - (2)].val);
5557  while (node->nd_next) {
5558  node = node->nd_next;
5559  }
5560  void_expr(node->nd_head);
5561  }
5562  }
5563  ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].val)));
5564 #endif
5565  (yyval.val) = (yyvsp[(2) - (2)].val);
5566  parser->result = dispatch1(program, (yyval.val));
5567 
5568  local_pop();
5569  }
5570  break;
5571 
5572  case 4:
5573 
5574 /* Line 1806 of yacc.c */
5575 #line 1026 "ripper.y"
5576  {
5577 #if 0
5578  void_stmts((yyvsp[(1) - (2)].val));
5579 #endif
5580 
5581  (yyval.val) = (yyvsp[(1) - (2)].val);
5582  }
5583  break;
5584 
5585  case 5:
5586 
5587 /* Line 1806 of yacc.c */
5588 #line 1036 "ripper.y"
5589  {
5590 #if 0
5591  (yyval.val) = NEW_BEGIN(0);
5592 #endif
5593  (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new),
5594  dispatch0(void_stmt));
5595 
5596  }
5597  break;
5598 
5599  case 6:
5600 
5601 /* Line 1806 of yacc.c */
5602 #line 1045 "ripper.y"
5603  {
5604 #if 0
5605  (yyval.val) = newline_node((yyvsp[(1) - (1)].val));
5606 #endif
5607  (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new), (yyvsp[(1) - (1)].val));
5608 
5609  }
5610  break;
5611 
5612  case 7:
5613 
5614 /* Line 1806 of yacc.c */
5615 #line 1053 "ripper.y"
5616  {
5617 #if 0
5618  (yyval.val) = block_append((yyvsp[(1) - (3)].val), newline_node((yyvsp[(3) - (3)].val)));
5619 #endif
5620  (yyval.val) = dispatch2(stmts_add, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5621 
5622  }
5623  break;
5624 
5625  case 8:
5626 
5627 /* Line 1806 of yacc.c */
5628 #line 1061 "ripper.y"
5629  {
5630  (yyval.val) = remove_begin((yyvsp[(2) - (2)].val));
5631  }
5632  break;
5633 
5634  case 10:
5635 
5636 /* Line 1806 of yacc.c */
5637 #line 1068 "ripper.y"
5638  {
5639 #if 0
5640  /* local_push(0); */
5641 #endif
5642 
5643  }
5644  break;
5645 
5646  case 11:
5647 
5648 /* Line 1806 of yacc.c */
5649 #line 1075 "ripper.y"
5650  {
5651 #if 0
5653  (yyvsp[(4) - (5)].val));
5654  /* NEW_PREEXE($4)); */
5655  /* local_pop(); */
5656  (yyval.val) = NEW_BEGIN(0);
5657 #endif
5658  (yyval.val) = dispatch1(BEGIN, (yyvsp[(4) - (5)].val));
5659 
5660  }
5661  break;
5662 
5663  case 12:
5664 
5665 /* Line 1806 of yacc.c */
5666 #line 1092 "ripper.y"
5667  {
5668 #if 0
5669  (yyval.val) = (yyvsp[(1) - (4)].val);
5670  if ((yyvsp[(2) - (4)].val)) {
5671  (yyval.val) = NEW_RESCUE((yyvsp[(1) - (4)].val), (yyvsp[(2) - (4)].val), (yyvsp[(3) - (4)].val));
5672  }
5673  else if ((yyvsp[(3) - (4)].val)) {
5674  rb_warn0("else without rescue is useless");
5675  (yyval.val) = block_append((yyval.val), (yyvsp[(3) - (4)].val));
5676  }
5677  if ((yyvsp[(4) - (4)].val)) {
5678  if ((yyval.val)) {
5679  (yyval.val) = NEW_ENSURE((yyval.val), (yyvsp[(4) - (4)].val));
5680  }
5681  else {
5682  (yyval.val) = block_append((yyvsp[(4) - (4)].val), NEW_NIL());
5683  }
5684  }
5685  fixpos((yyval.val), (yyvsp[(1) - (4)].val));
5686 #endif
5687  (yyval.val) = dispatch4(bodystmt,
5688  escape_Qundef((yyvsp[(1) - (4)].val)),
5689  escape_Qundef((yyvsp[(2) - (4)].val)),
5690  escape_Qundef((yyvsp[(3) - (4)].val)),
5691  escape_Qundef((yyvsp[(4) - (4)].val)));
5692 
5693  }
5694  break;
5695 
5696  case 13:
5697 
5698 /* Line 1806 of yacc.c */
5699 #line 1122 "ripper.y"
5700  {
5701 #if 0
5702  void_stmts((yyvsp[(1) - (2)].val));
5703 #endif
5704 
5705  (yyval.val) = (yyvsp[(1) - (2)].val);
5706  }
5707  break;
5708 
5709  case 14:
5710 
5711 /* Line 1806 of yacc.c */
5712 #line 1132 "ripper.y"
5713  {
5714 #if 0
5715  (yyval.val) = NEW_BEGIN(0);
5716 #endif
5717  (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new),
5718  dispatch0(void_stmt));
5719 
5720  }
5721  break;
5722 
5723  case 15:
5724 
5725 /* Line 1806 of yacc.c */
5726 #line 1141 "ripper.y"
5727  {
5728 #if 0
5729  (yyval.val) = newline_node((yyvsp[(1) - (1)].val));
5730 #endif
5731  (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new), (yyvsp[(1) - (1)].val));
5732 
5733  }
5734  break;
5735 
5736  case 16:
5737 
5738 /* Line 1806 of yacc.c */
5739 #line 1149 "ripper.y"
5740  {
5741 #if 0
5742  (yyval.val) = block_append((yyvsp[(1) - (3)].val), newline_node((yyvsp[(3) - (3)].val)));
5743 #endif
5744  (yyval.val) = dispatch2(stmts_add, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5745 
5746  }
5747  break;
5748 
5749  case 17:
5750 
5751 /* Line 1806 of yacc.c */
5752 #line 1157 "ripper.y"
5753  {
5754  (yyval.val) = remove_begin((yyvsp[(2) - (2)].val));
5755  }
5756  break;
5757 
5758  case 18:
5759 
5760 /* Line 1806 of yacc.c */
5761 #line 1163 "ripper.y"
5762  {
5763  (yyval.val) = (yyvsp[(1) - (1)].val);
5764  }
5765  break;
5766 
5767  case 19:
5768 
5769 /* Line 1806 of yacc.c */
5770 #line 1167 "ripper.y"
5771  {
5772  yyerror("BEGIN is permitted only at toplevel");
5773 #if 0
5774  /* local_push(0); */
5775 #endif
5776 
5777  }
5778  break;
5779 
5780  case 20:
5781 
5782 /* Line 1806 of yacc.c */
5783 #line 1175 "ripper.y"
5784  {
5785 #if 0
5787  (yyvsp[(4) - (5)].val));
5788  /* NEW_PREEXE($4)); */
5789  /* local_pop(); */
5790  (yyval.val) = NEW_BEGIN(0);
5791 #endif
5792  (yyval.val) = dispatch1(BEGIN, (yyvsp[(4) - (5)].val));
5793 
5794  }
5795  break;
5796 
5797  case 21:
5798 
5799 /* Line 1806 of yacc.c */
5800 #line 1187 "ripper.y"
5801  {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);}
5802  break;
5803 
5804  case 22:
5805 
5806 /* Line 1806 of yacc.c */
5807 #line 1188 "ripper.y"
5808  {
5809 #if 0
5810  (yyval.val) = NEW_ALIAS((yyvsp[(2) - (4)].val), (yyvsp[(4) - (4)].val));
5811 #endif
5812  (yyval.val) = dispatch2(alias, (yyvsp[(2) - (4)].val), (yyvsp[(4) - (4)].val));
5813 
5814  }
5815  break;
5816 
5817  case 23:
5818 
5819 /* Line 1806 of yacc.c */
5820 #line 1196 "ripper.y"
5821  {
5822 #if 0
5823  (yyval.val) = NEW_VALIAS((yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
5824 #endif
5825  (yyval.val) = dispatch2(var_alias, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
5826 
5827  }
5828  break;
5829 
5830  case 24:
5831 
5832 /* Line 1806 of yacc.c */
5833 #line 1204 "ripper.y"
5834  {
5835 #if 0
5836  char buf[2];
5837  buf[0] = '$';
5838  buf[1] = (char)(yyvsp[(3) - (3)].val)->nd_nth;
5839  (yyval.val) = NEW_VALIAS((yyvsp[(2) - (3)].val), rb_intern2(buf, 2));
5840 #endif
5841  (yyval.val) = dispatch2(var_alias, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
5842 
5843  }
5844  break;
5845 
5846  case 25:
5847 
5848 /* Line 1806 of yacc.c */
5849 #line 1215 "ripper.y"
5850  {
5851 #if 0
5852  yyerror("can't make alias for the number variables");
5853  (yyval.val) = NEW_BEGIN(0);
5854 #endif
5855  (yyval.val) = dispatch2(var_alias, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
5856  (yyval.val) = dispatch1(alias_error, (yyval.val));
5857  ripper_error();
5858 
5859  }
5860  break;
5861 
5862  case 26:
5863 
5864 /* Line 1806 of yacc.c */
5865 #line 1226 "ripper.y"
5866  {
5867 #if 0
5868  (yyval.val) = (yyvsp[(2) - (2)].val);
5869 #endif
5870  (yyval.val) = dispatch1(undef, (yyvsp[(2) - (2)].val));
5871 
5872  }
5873  break;
5874 
5875  case 27:
5876 
5877 /* Line 1806 of yacc.c */
5878 #line 1234 "ripper.y"
5879  {
5880 #if 0
5881  (yyval.val) = new_if((yyvsp[(3) - (3)].val), remove_begin((yyvsp[(1) - (3)].val)), 0);
5882  fixpos((yyval.val), (yyvsp[(3) - (3)].val));
5883 #endif
5884  (yyval.val) = dispatch2(if_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val));
5885 
5886  }
5887  break;
5888 
5889  case 28:
5890 
5891 /* Line 1806 of yacc.c */
5892 #line 1243 "ripper.y"
5893  {
5894 #if 0
5895  (yyval.val) = new_unless((yyvsp[(3) - (3)].val), remove_begin((yyvsp[(1) - (3)].val)), 0);
5896  fixpos((yyval.val), (yyvsp[(3) - (3)].val));
5897 #endif
5898  (yyval.val) = dispatch2(unless_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val));
5899 
5900  }
5901  break;
5902 
5903  case 29:
5904 
5905 /* Line 1806 of yacc.c */
5906 #line 1252 "ripper.y"
5907  {
5908 #if 0
5909  if ((yyvsp[(1) - (3)].val) && nd_type((yyvsp[(1) - (3)].val)) == NODE_BEGIN) {
5910  (yyval.val) = NEW_WHILE(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val)->nd_body, 0);
5911  }
5912  else {
5913  (yyval.val) = NEW_WHILE(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val), 1);
5914  }
5915 #endif
5916  (yyval.val) = dispatch2(while_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val));
5917 
5918  }
5919  break;
5920 
5921  case 30:
5922 
5923 /* Line 1806 of yacc.c */
5924 #line 1265 "ripper.y"
5925  {
5926 #if 0
5927  if ((yyvsp[(1) - (3)].val) && nd_type((yyvsp[(1) - (3)].val)) == NODE_BEGIN) {
5928  (yyval.val) = NEW_UNTIL(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val)->nd_body, 0);
5929  }
5930  else {
5931  (yyval.val) = NEW_UNTIL(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val), 1);
5932  }
5933 #endif
5934  (yyval.val) = dispatch2(until_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val));
5935 
5936  }
5937  break;
5938 
5939  case 31:
5940 
5941 /* Line 1806 of yacc.c */
5942 #line 1278 "ripper.y"
5943  {
5944 #if 0
5945  NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].val)), 0);
5946  (yyval.val) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].val)), resq, 0);
5947 #endif
5948  (yyval.val) = dispatch2(rescue_mod, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5949 
5950  }
5951  break;
5952 
5953  case 32:
5954 
5955 /* Line 1806 of yacc.c */
5956 #line 1287 "ripper.y"
5957  {
5958  if (in_def || in_single) {
5959  rb_warn0("END in method; use at_exit");
5960  }
5961 #if 0
5962  (yyval.val) = NEW_POSTEXE(NEW_NODE(
5963  NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].val) /* body */, 0 /* args */));
5964 #endif
5965  (yyval.val) = dispatch1(END, (yyvsp[(3) - (4)].val));
5966 
5967  }
5968  break;
5969 
5970  case 34:
5971 
5972 /* Line 1806 of yacc.c */
5973 #line 1300 "ripper.y"
5974  {
5975 #if 0
5976  value_expr((yyvsp[(3) - (3)].val));
5977  (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val);
5978  (yyval.val) = (yyvsp[(1) - (3)].val);
5979 #endif
5980  (yyval.val) = dispatch2(massign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5981 
5982  }
5983  break;
5984 
5985  case 35:
5986 
5987 /* Line 1806 of yacc.c */
5988 #line 1310 "ripper.y"
5989  {
5990  value_expr((yyvsp[(3) - (3)].val));
5991  (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
5992  }
5993  break;
5994 
5995  case 36:
5996 
5997 /* Line 1806 of yacc.c */
5998 #line 1315 "ripper.y"
5999  {
6000 #if 0
6001  (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val);
6002  (yyval.val) = (yyvsp[(1) - (3)].val);
6003 #endif
6004  (yyval.val) = dispatch2(massign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6005 
6006  }
6007  break;
6008 
6009  case 38:
6010 
6011 /* Line 1806 of yacc.c */
6012 #line 1327 "ripper.y"
6013  {
6014  value_expr((yyvsp[(3) - (3)].val));
6015  (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6016  }
6017  break;
6018 
6019  case 39:
6020 
6021 /* Line 1806 of yacc.c */
6022 #line 1332 "ripper.y"
6023  {
6024  value_expr((yyvsp[(3) - (3)].val));
6025  (yyval.val) = new_op_assign((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
6026  }
6027  break;
6028 
6029  case 40:
6030 
6031 /* Line 1806 of yacc.c */
6032 #line 1337 "ripper.y"
6033  {
6034 #if 0
6035  NODE *args;
6036 
6037  value_expr((yyvsp[(6) - (6)].val));
6038  if (!(yyvsp[(3) - (6)].val)) (yyvsp[(3) - (6)].val) = NEW_ZARRAY();
6039  args = arg_concat((yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val));
6040  if ((yyvsp[(5) - (6)].val) == tOROP) {
6041  (yyvsp[(5) - (6)].val) = 0;
6042  }
6043  else if ((yyvsp[(5) - (6)].val) == tANDOP) {
6044  (yyvsp[(5) - (6)].val) = 1;
6045  }
6046  (yyval.val) = NEW_OP_ASGN1((yyvsp[(1) - (6)].val), (yyvsp[(5) - (6)].val), args);
6047  fixpos((yyval.val), (yyvsp[(1) - (6)].val));
6048 #endif
6049  (yyval.val) = dispatch2(aref_field, (yyvsp[(1) - (6)].val), escape_Qundef((yyvsp[(3) - (6)].val)));
6050  (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
6051 
6052  }
6053  break;
6054 
6055  case 41:
6056 
6057 /* Line 1806 of yacc.c */
6058 #line 1358 "ripper.y"
6059  {
6060  value_expr((yyvsp[(5) - (5)].val));
6061  (yyval.val) = new_attr_op_assign((yyvsp[(1) - (5)].val), (yyvsp[(2) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
6062  }
6063  break;
6064 
6065  case 42:
6066 
6067 /* Line 1806 of yacc.c */
6068 #line 1363 "ripper.y"
6069  {
6070  value_expr((yyvsp[(5) - (5)].val));
6071  (yyval.val) = new_attr_op_assign((yyvsp[(1) - (5)].val), (yyvsp[(2) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
6072  }
6073  break;
6074 
6075  case 43:
6076 
6077 /* Line 1806 of yacc.c */
6078 #line 1368 "ripper.y"
6079  {
6080  (yyval.val) = const_path_field((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val));
6081  (yyval.val) = new_const_op_assign((yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
6082  }
6083  break;
6084 
6085  case 44:
6086 
6087 /* Line 1806 of yacc.c */
6088 #line 1373 "ripper.y"
6089  {
6090  value_expr((yyvsp[(5) - (5)].val));
6091  (yyval.val) = new_attr_op_assign((yyvsp[(1) - (5)].val), ripper_id2sym(idCOLON2), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
6092  }
6093  break;
6094 
6095  case 45:
6096 
6097 /* Line 1806 of yacc.c */
6098 #line 1378 "ripper.y"
6099  {
6100  (yyvsp[(1) - (3)].val) = var_field((yyvsp[(1) - (3)].val));
6101  (yyval.val) = backref_assign_error((yyvsp[(1) - (3)].val), node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)));
6102  }
6103  break;
6104 
6105  case 46:
6106 
6107 /* Line 1806 of yacc.c */
6108 #line 1385 "ripper.y"
6109  {
6110 #if 0
6111  value_expr((yyvsp[(1) - (1)].val));
6112  (yyval.val) = (yyvsp[(1) - (1)].val);
6113 #endif
6114 
6115  }
6116  break;
6117 
6118  case 47:
6119 
6120 /* Line 1806 of yacc.c */
6121 #line 1393 "ripper.y"
6122  {
6123 #if 0
6124  value_expr((yyvsp[(1) - (3)].val));
6125  (yyval.val) = NEW_RESCUE((yyvsp[(1) - (3)].val), NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].val)), 0), 0);
6126 #endif
6127  (yyval.val) = dispatch2(rescue_mod, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6128 
6129  }
6130  break;
6131 
6132  case 50:
6133 
6134 /* Line 1806 of yacc.c */
6135 #line 1406 "ripper.y"
6136  {
6137 #if 0
6138  (yyval.val) = logop(NODE_AND, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6139 #endif
6140  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("and"), (yyvsp[(3) - (3)].val));
6141 
6142  }
6143  break;
6144 
6145  case 51:
6146 
6147 /* Line 1806 of yacc.c */
6148 #line 1414 "ripper.y"
6149  {
6150 #if 0
6151  (yyval.val) = logop(NODE_OR, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6152 #endif
6153  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("or"), (yyvsp[(3) - (3)].val));
6154 
6155  }
6156  break;
6157 
6158  case 52:
6159 
6160 /* Line 1806 of yacc.c */
6161 #line 1422 "ripper.y"
6162  {
6163 #if 0
6164  (yyval.val) = call_uni_op(method_cond((yyvsp[(3) - (3)].val)), '!');
6165 #endif
6166  (yyval.val) = dispatch2(unary, ripper_intern("not"), (yyvsp[(3) - (3)].val));
6167 
6168  }
6169  break;
6170 
6171  case 53:
6172 
6173 /* Line 1806 of yacc.c */
6174 #line 1430 "ripper.y"
6175  {
6176 #if 0
6177  (yyval.val) = call_uni_op(method_cond((yyvsp[(2) - (2)].val)), '!');
6178 #endif
6179  (yyval.val) = dispatch2(unary, ripper_id2sym('!'), (yyvsp[(2) - (2)].val));
6180 
6181  }
6182  break;
6183 
6184  case 55:
6185 
6186 /* Line 1806 of yacc.c */
6187 #line 1441 "ripper.y"
6188  {
6189 #if 0
6190  value_expr((yyvsp[(1) - (1)].val));
6191  (yyval.val) = (yyvsp[(1) - (1)].val);
6192  if (!(yyval.val)) (yyval.val) = NEW_NIL();
6193 #endif
6194  (yyval.val) = (yyvsp[(1) - (1)].val);
6195 
6196  }
6197  break;
6198 
6199  case 59:
6200 
6201 /* Line 1806 of yacc.c */
6202 #line 1458 "ripper.y"
6203  {
6204 #if 0
6205  (yyval.val) = NEW_QCALL((yyvsp[(2) - (4)].val), (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
6206 #endif
6207  (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), (yyvsp[(2) - (4)].val), (yyvsp[(3) - (4)].val));
6208  (yyval.val) = method_arg((yyval.val), (yyvsp[(4) - (4)].val));
6209 
6210  }
6211  break;
6212 
6213  case 60:
6214 
6215 /* Line 1806 of yacc.c */
6216 #line 1469 "ripper.y"
6217  {
6218 #if 0
6219  (yyval.num) = ruby_sourceline;
6220 #endif
6221 
6222  }
6223  break;
6224 
6225  case 61:
6226 
6227 /* Line 1806 of yacc.c */
6228 #line 1476 "ripper.y"
6229  {
6230  (yyval.val) = (yyvsp[(3) - (4)].val);
6231 #if 0
6232  nd_set_line((yyval.val), (yyvsp[(2) - (4)].num));
6233 #endif
6234  }
6235  break;
6236 
6237  case 62:
6238 
6239 /* Line 1806 of yacc.c */
6240 #line 1485 "ripper.y"
6241  {
6242 #if 0
6243  (yyval.val) = NEW_FCALL((yyvsp[(1) - (1)].val), 0);
6244  nd_set_line((yyval.val), tokline);
6245 #endif
6246 
6247  }
6248  break;
6249 
6250  case 63:
6251 
6252 /* Line 1806 of yacc.c */
6253 #line 1495 "ripper.y"
6254  {
6255 #if 0
6256  (yyval.val) = (yyvsp[(1) - (2)].val);
6257  (yyval.val)->nd_args = (yyvsp[(2) - (2)].val);
6258 #endif
6259  (yyval.val) = dispatch2(command, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
6260 
6261  }
6262  break;
6263 
6264  case 64:
6265 
6266 /* Line 1806 of yacc.c */
6267 #line 1504 "ripper.y"
6268  {
6269 #if 0
6270  block_dup_check((yyvsp[(2) - (3)].val),(yyvsp[(3) - (3)].val));
6271  (yyvsp[(1) - (3)].val)->nd_args = (yyvsp[(2) - (3)].val);
6272  (yyvsp[(3) - (3)].val)->nd_iter = (yyvsp[(1) - (3)].val);
6273  (yyval.val) = (yyvsp[(3) - (3)].val);
6274  fixpos((yyval.val), (yyvsp[(1) - (3)].val));
6275 #endif
6276  (yyval.val) = dispatch2(command, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
6277  (yyval.val) = method_add_block((yyval.val), (yyvsp[(3) - (3)].val));
6278 
6279  }
6280  break;
6281 
6282  case 65:
6283 
6284 /* Line 1806 of yacc.c */
6285 #line 1517 "ripper.y"
6286  {
6287 #if 0
6288  (yyval.val) = NEW_QCALL((yyvsp[(2) - (4)].val), (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
6289  fixpos((yyval.val), (yyvsp[(1) - (4)].val));
6290 #endif
6291  (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (4)].val), (yyvsp[(2) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
6292 
6293  }
6294  break;
6295 
6296  case 66:
6297 
6298 /* Line 1806 of yacc.c */
6299 #line 1526 "ripper.y"
6300  {
6301 #if 0
6302  block_dup_check((yyvsp[(4) - (5)].val),(yyvsp[(5) - (5)].val));
6303  (yyvsp[(5) - (5)].val)->nd_iter = NEW_QCALL((yyvsp[(2) - (5)].val), (yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
6304  (yyval.val) = (yyvsp[(5) - (5)].val);
6305  fixpos((yyval.val), (yyvsp[(1) - (5)].val));
6306 #endif
6307  (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (5)].val), (yyvsp[(2) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
6308  (yyval.val) = method_add_block((yyval.val), (yyvsp[(5) - (5)].val));
6309 
6310  }
6311  break;
6312 
6313  case 67:
6314 
6315 /* Line 1806 of yacc.c */
6316 #line 1538 "ripper.y"
6317  {
6318 #if 0
6319  (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
6320  fixpos((yyval.val), (yyvsp[(1) - (4)].val));
6321 #endif
6322  (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (4)].val), ID2SYM(idCOLON2), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
6323 
6324  }
6325  break;
6326 
6327  case 68:
6328 
6329 /* Line 1806 of yacc.c */
6330 #line 1547 "ripper.y"
6331  {
6332 #if 0
6333  block_dup_check((yyvsp[(4) - (5)].val),(yyvsp[(5) - (5)].val));
6334  (yyvsp[(5) - (5)].val)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
6335  (yyval.val) = (yyvsp[(5) - (5)].val);
6336  fixpos((yyval.val), (yyvsp[(1) - (5)].val));
6337 #endif
6338  (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (5)].val), ID2SYM(idCOLON2), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
6339  (yyval.val) = method_add_block((yyval.val), (yyvsp[(5) - (5)].val));
6340 
6341  }
6342  break;
6343 
6344  case 69:
6345 
6346 /* Line 1806 of yacc.c */
6347 #line 1559 "ripper.y"
6348  {
6349 #if 0
6350  (yyval.val) = NEW_SUPER((yyvsp[(2) - (2)].val));
6351  fixpos((yyval.val), (yyvsp[(2) - (2)].val));
6352 #endif
6353  (yyval.val) = dispatch1(super, (yyvsp[(2) - (2)].val));
6354 
6355  }
6356  break;
6357 
6358  case 70:
6359 
6360 /* Line 1806 of yacc.c */
6361 #line 1568 "ripper.y"
6362  {
6363 #if 0
6364  (yyval.val) = new_yield((yyvsp[(2) - (2)].val));
6365  fixpos((yyval.val), (yyvsp[(2) - (2)].val));
6366 #endif
6367  (yyval.val) = dispatch1(yield, (yyvsp[(2) - (2)].val));
6368 
6369  }
6370  break;
6371 
6372  case 71:
6373 
6374 /* Line 1806 of yacc.c */
6375 #line 1577 "ripper.y"
6376  {
6377 #if 0
6378  (yyval.val) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].val)));
6379 #endif
6380  (yyval.val) = dispatch1(return, (yyvsp[(2) - (2)].val));
6381 
6382  }
6383  break;
6384 
6385  case 72:
6386 
6387 /* Line 1806 of yacc.c */
6388 #line 1585 "ripper.y"
6389  {
6390 #if 0
6391  (yyval.val) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].val)));
6392 #endif
6393  (yyval.val) = dispatch1(break, (yyvsp[(2) - (2)].val));
6394 
6395  }
6396  break;
6397 
6398  case 73:
6399 
6400 /* Line 1806 of yacc.c */
6401 #line 1593 "ripper.y"
6402  {
6403 #if 0
6404  (yyval.val) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].val)));
6405 #endif
6406  (yyval.val) = dispatch1(next, (yyvsp[(2) - (2)].val));
6407 
6408  }
6409  break;
6410 
6411  case 75:
6412 
6413 /* Line 1806 of yacc.c */
6414 #line 1604 "ripper.y"
6415  {
6416 #if 0
6417  (yyval.val) = (yyvsp[(2) - (3)].val);
6418 #endif
6419  (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val));
6420 
6421  }
6422  break;
6423 
6424  case 77:
6425 
6426 /* Line 1806 of yacc.c */
6427 #line 1615 "ripper.y"
6428  {
6429 #if 0
6430  (yyval.val) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].val)), 0);
6431 #endif
6432  (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val));
6433 
6434  }
6435  break;
6436 
6437  case 78:
6438 
6439 /* Line 1806 of yacc.c */
6440 #line 1625 "ripper.y"
6441  {
6442 #if 0
6443  (yyval.val) = NEW_MASGN((yyvsp[(1) - (1)].val), 0);
6444 #endif
6445  (yyval.val) = (yyvsp[(1) - (1)].val);
6446 
6447  }
6448  break;
6449 
6450  case 79:
6451 
6452 /* Line 1806 of yacc.c */
6453 #line 1633 "ripper.y"
6454  {
6455 #if 0
6456  (yyval.val) = NEW_MASGN(list_append((yyvsp[(1) - (2)].val),(yyvsp[(2) - (2)].val)), 0);
6457 #endif
6458  (yyval.val) = mlhs_add((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
6459 
6460  }
6461  break;
6462 
6463  case 80:
6464 
6465 /* Line 1806 of yacc.c */
6466 #line 1641 "ripper.y"
6467  {
6468 #if 0
6469  (yyval.val) = NEW_MASGN((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6470 #endif
6471  (yyval.val) = mlhs_add_star((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6472 
6473  }
6474  break;
6475 
6476  case 81:
6477 
6478 /* Line 1806 of yacc.c */
6479 #line 1649 "ripper.y"
6480  {
6481 #if 0
6482  (yyval.val) = NEW_MASGN((yyvsp[(1) - (5)].val), NEW_POSTARG((yyvsp[(3) - (5)].val),(yyvsp[(5) - (5)].val)));
6483 #endif
6484  (yyvsp[(1) - (5)].val) = mlhs_add_star((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val));
6485  (yyval.val) = mlhs_add((yyvsp[(1) - (5)].val), (yyvsp[(5) - (5)].val));
6486 
6487  }
6488  break;
6489 
6490  case 82:
6491 
6492 /* Line 1806 of yacc.c */
6493 #line 1658 "ripper.y"
6494  {
6495 #if 0
6496  (yyval.val) = NEW_MASGN((yyvsp[(1) - (2)].val), -1);
6497 #endif
6498  (yyval.val) = mlhs_add_star((yyvsp[(1) - (2)].val), Qnil);
6499 
6500  }
6501  break;
6502 
6503  case 83:
6504 
6505 /* Line 1806 of yacc.c */
6506 #line 1666 "ripper.y"
6507  {
6508 #if 0
6509  (yyval.val) = NEW_MASGN((yyvsp[(1) - (4)].val), NEW_POSTARG(-1, (yyvsp[(4) - (4)].val)));
6510 #endif
6511  (yyvsp[(1) - (4)].val) = mlhs_add_star((yyvsp[(1) - (4)].val), Qnil);
6512  (yyval.val) = mlhs_add((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val));
6513 
6514  }
6515  break;
6516 
6517  case 84:
6518 
6519 /* Line 1806 of yacc.c */
6520 #line 1675 "ripper.y"
6521  {
6522 #if 0
6523  (yyval.val) = NEW_MASGN(0, (yyvsp[(2) - (2)].val));
6524 #endif
6525  (yyval.val) = mlhs_add_star(mlhs_new(), (yyvsp[(2) - (2)].val));
6526 
6527  }
6528  break;
6529 
6530  case 85:
6531 
6532 /* Line 1806 of yacc.c */
6533 #line 1683 "ripper.y"
6534  {
6535 #if 0
6536  (yyval.val) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].val),(yyvsp[(4) - (4)].val)));
6537 #endif
6538  (yyvsp[(2) - (4)].val) = mlhs_add_star(mlhs_new(), (yyvsp[(2) - (4)].val));
6539  (yyval.val) = mlhs_add((yyvsp[(2) - (4)].val), (yyvsp[(4) - (4)].val));
6540 
6541  }
6542  break;
6543 
6544  case 86:
6545 
6546 /* Line 1806 of yacc.c */
6547 #line 1692 "ripper.y"
6548  {
6549 #if 0
6550  (yyval.val) = NEW_MASGN(0, -1);
6551 #endif
6552  (yyval.val) = mlhs_add_star(mlhs_new(), Qnil);
6553 
6554  }
6555  break;
6556 
6557  case 87:
6558 
6559 /* Line 1806 of yacc.c */
6560 #line 1700 "ripper.y"
6561  {
6562 #if 0
6563  (yyval.val) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].val)));
6564 #endif
6565  (yyval.val) = mlhs_add_star(mlhs_new(), Qnil);
6566  (yyval.val) = mlhs_add((yyval.val), (yyvsp[(3) - (3)].val));
6567 
6568  }
6569  break;
6570 
6571  case 89:
6572 
6573 /* Line 1806 of yacc.c */
6574 #line 1712 "ripper.y"
6575  {
6576 #if 0
6577  (yyval.val) = (yyvsp[(2) - (3)].val);
6578 #endif
6579  (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val));
6580 
6581  }
6582  break;
6583 
6584  case 90:
6585 
6586 /* Line 1806 of yacc.c */
6587 #line 1722 "ripper.y"
6588  {
6589 #if 0
6590  (yyval.val) = NEW_LIST((yyvsp[(1) - (2)].val));
6591 #endif
6592  (yyval.val) = mlhs_add(mlhs_new(), (yyvsp[(1) - (2)].val));
6593 
6594  }
6595  break;
6596 
6597  case 91:
6598 
6599 /* Line 1806 of yacc.c */
6600 #line 1730 "ripper.y"
6601  {
6602 #if 0
6603  (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
6604 #endif
6605  (yyval.val) = mlhs_add((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
6606 
6607  }
6608  break;
6609 
6610  case 92:
6611 
6612 /* Line 1806 of yacc.c */
6613 #line 1740 "ripper.y"
6614  {
6615 #if 0
6616  (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val));
6617 #endif
6618  (yyval.val) = mlhs_add(mlhs_new(), (yyvsp[(1) - (1)].val));
6619 
6620  }
6621  break;
6622 
6623  case 93:
6624 
6625 /* Line 1806 of yacc.c */
6626 #line 1748 "ripper.y"
6627  {
6628 #if 0
6629  (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6630 #endif
6631  (yyval.val) = mlhs_add((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6632 
6633  }
6634  break;
6635 
6636  case 94:
6637 
6638 /* Line 1806 of yacc.c */
6639 #line 1758 "ripper.y"
6640  {
6641  (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
6642  }
6643  break;
6644 
6645  case 95:
6646 
6647 /* Line 1806 of yacc.c */
6648 #line 1762 "ripper.y"
6649  {
6650  (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
6651  }
6652  break;
6653 
6654  case 96:
6655 
6656 /* Line 1806 of yacc.c */
6657 #line 1766 "ripper.y"
6658  {
6659 #if 0
6660  (yyval.val) = aryset((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val));
6661 #endif
6662  (yyval.val) = dispatch2(aref_field, (yyvsp[(1) - (4)].val), escape_Qundef((yyvsp[(3) - (4)].val)));
6663 
6664  }
6665  break;
6666 
6667  case 97:
6668 
6669 /* Line 1806 of yacc.c */
6670 #line 1774 "ripper.y"
6671  {
6672 #if 0
6673  (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
6674 #endif
6675  (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
6676 
6677  }
6678  break;
6679 
6680  case 98:
6681 
6682 /* Line 1806 of yacc.c */
6683 #line 1782 "ripper.y"
6684  {
6685 #if 0
6686  (yyval.val) = attrset((yyvsp[(1) - (3)].val), idCOLON2, (yyvsp[(3) - (3)].val));
6687 #endif
6688  (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6689 
6690  }
6691  break;
6692 
6693  case 99:
6694 
6695 /* Line 1806 of yacc.c */
6696 #line 1790 "ripper.y"
6697  {
6698 #if 0
6699  (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
6700 #endif
6701  (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
6702 
6703  }
6704  break;
6705 
6706  case 100:
6707 
6708 /* Line 1806 of yacc.c */
6709 #line 1798 "ripper.y"
6710  {
6711  (yyval.val) = const_decl(const_path_field((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)));
6712  }
6713  break;
6714 
6715  case 101:
6716 
6717 /* Line 1806 of yacc.c */
6718 #line 1802 "ripper.y"
6719  {
6720  (yyval.val) = const_decl(top_const_field((yyvsp[(2) - (2)].val)));
6721  }
6722  break;
6723 
6724  case 102:
6725 
6726 /* Line 1806 of yacc.c */
6727 #line 1806 "ripper.y"
6728  {
6729  (yyvsp[(1) - (1)].val) = var_field((yyvsp[(1) - (1)].val));
6730  (yyval.val) = backref_assign_error((yyvsp[(1) - (1)].val), (yyvsp[(1) - (1)].val));
6731  }
6732  break;
6733 
6734  case 103:
6735 
6736 /* Line 1806 of yacc.c */
6737 #line 1813 "ripper.y"
6738  {
6739  (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
6740 #if 0
6741  if (!(yyval.val)) (yyval.val) = NEW_BEGIN(0);
6742 #endif
6743  (yyval.val) = dispatch1(var_field, (yyval.val));
6744 
6745  }
6746  break;
6747 
6748  case 104:
6749 
6750 /* Line 1806 of yacc.c */
6751 #line 1822 "ripper.y"
6752  {
6753  (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
6754 #if 0
6755  if (!(yyval.val)) (yyval.val) = NEW_BEGIN(0);
6756 #endif
6757  (yyval.val) = dispatch1(var_field, (yyval.val));
6758 
6759  }
6760  break;
6761 
6762  case 105:
6763 
6764 /* Line 1806 of yacc.c */
6765 #line 1831 "ripper.y"
6766  {
6767 #if 0
6768  (yyval.val) = aryset((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val));
6769 #endif
6770  (yyval.val) = dispatch2(aref_field, (yyvsp[(1) - (4)].val), escape_Qundef((yyvsp[(3) - (4)].val)));
6771 
6772  }
6773  break;
6774 
6775  case 106:
6776 
6777 /* Line 1806 of yacc.c */
6778 #line 1839 "ripper.y"
6779  {
6780 #if 0
6781  (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
6782 #endif
6783  (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
6784 
6785  }
6786  break;
6787 
6788  case 107:
6789 
6790 /* Line 1806 of yacc.c */
6791 #line 1847 "ripper.y"
6792  {
6793 #if 0
6794  (yyval.val) = attrset((yyvsp[(1) - (3)].val), idCOLON2, (yyvsp[(3) - (3)].val));
6795 #endif
6796  (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ID2SYM(idCOLON2), (yyvsp[(3) - (3)].val));
6797 
6798  }
6799  break;
6800 
6801  case 108:
6802 
6803 /* Line 1806 of yacc.c */
6804 #line 1855 "ripper.y"
6805  {
6806 #if 0
6807  (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
6808 #endif
6809  (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
6810 
6811  }
6812  break;
6813 
6814  case 109:
6815 
6816 /* Line 1806 of yacc.c */
6817 #line 1863 "ripper.y"
6818  {
6819  (yyval.val) = const_decl(const_path_field((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)));
6820  }
6821  break;
6822 
6823  case 110:
6824 
6825 /* Line 1806 of yacc.c */
6826 #line 1867 "ripper.y"
6827  {
6828  (yyval.val) = const_decl(top_const_field((yyvsp[(2) - (2)].val)));
6829  }
6830  break;
6831 
6832  case 111:
6833 
6834 /* Line 1806 of yacc.c */
6835 #line 1871 "ripper.y"
6836  {
6837  (yyvsp[(1) - (1)].val) = var_field((yyvsp[(1) - (1)].val));
6838  (yyval.val) = backref_assign_error((yyvsp[(1) - (1)].val), (yyvsp[(1) - (1)].val));
6839  }
6840  break;
6841 
6842  case 112:
6843 
6844 /* Line 1806 of yacc.c */
6845 #line 1878 "ripper.y"
6846  {
6847 #if 0
6848  yyerror("class/module name must be CONSTANT");
6849 #endif
6850  (yyval.val) = dispatch1(class_name_error, (yyvsp[(1) - (1)].val));
6851  ripper_error();
6852 
6853  }
6854  break;
6855 
6856  case 114:
6857 
6858 /* Line 1806 of yacc.c */
6859 #line 1890 "ripper.y"
6860  {
6861 #if 0
6862  (yyval.val) = NEW_COLON3((yyvsp[(2) - (2)].val));
6863 #endif
6864  (yyval.val) = dispatch1(top_const_ref, (yyvsp[(2) - (2)].val));
6865 
6866  }
6867  break;
6868 
6869  case 115:
6870 
6871 /* Line 1806 of yacc.c */
6872 #line 1898 "ripper.y"
6873  {
6874 #if 0
6875  (yyval.val) = NEW_COLON2(0, (yyval.val));
6876 #endif
6877  (yyval.val) = dispatch1(const_ref, (yyvsp[(1) - (1)].val));
6878 
6879  }
6880  break;
6881 
6882  case 116:
6883 
6884 /* Line 1806 of yacc.c */
6885 #line 1906 "ripper.y"
6886  {
6887 #if 0
6888  (yyval.val) = NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6889 #endif
6890  (yyval.val) = dispatch2(const_path_ref, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
6891 
6892  }
6893  break;
6894 
6895  case 120:
6896 
6897 /* Line 1806 of yacc.c */
6898 #line 1919 "ripper.y"
6899  {
6900  SET_LEX_STATE(EXPR_ENDFN);
6901  (yyval.val) = (yyvsp[(1) - (1)].val);
6902  }
6903  break;
6904 
6905  case 121:
6906 
6907 /* Line 1806 of yacc.c */
6908 #line 1924 "ripper.y"
6909  {
6910  SET_LEX_STATE(EXPR_ENDFN);
6911 #if 0
6912  (yyval.val) = (yyvsp[(1) - (1)].id);
6913 #endif
6914  (yyval.val) = (yyvsp[(1) - (1)].val);
6915 
6916  }
6917  break;
6918 
6919  case 124:
6920 
6921 /* Line 1806 of yacc.c */
6922 #line 1939 "ripper.y"
6923  {
6924 #if 0
6925  (yyval.val) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].val)));
6926 #endif
6927  (yyval.val) = dispatch1(symbol_literal, (yyvsp[(1) - (1)].val));
6928 
6929  }
6930  break;
6931 
6932  case 126:
6933 
6934 /* Line 1806 of yacc.c */
6935 #line 1950 "ripper.y"
6936  {
6937 #if 0
6938  (yyval.val) = NEW_UNDEF((yyvsp[(1) - (1)].val));
6939 #endif
6940  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
6941 
6942  }
6943  break;
6944 
6945  case 127:
6946 
6947 /* Line 1806 of yacc.c */
6948 #line 1957 "ripper.y"
6949  {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);}
6950  break;
6951 
6952  case 128:
6953 
6954 /* Line 1806 of yacc.c */
6955 #line 1958 "ripper.y"
6956  {
6957 #if 0
6958  (yyval.val) = block_append((yyvsp[(1) - (4)].val), NEW_UNDEF((yyvsp[(4) - (4)].val)));
6959 #endif
6960  rb_ary_push((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val));
6961 
6962  }
6963  break;
6964 
6965  case 129:
6966 
6967 /* Line 1806 of yacc.c */
6968 #line 1967 "ripper.y"
6969  { ifndef_ripper((yyval.val) = '|'); }
6970  break;
6971 
6972  case 130:
6973 
6974 /* Line 1806 of yacc.c */
6975 #line 1968 "ripper.y"
6976  { ifndef_ripper((yyval.val) = '^'); }
6977  break;
6978 
6979  case 131:
6980 
6981 /* Line 1806 of yacc.c */
6982 #line 1969 "ripper.y"
6983  { ifndef_ripper((yyval.val) = '&'); }
6984  break;
6985 
6986  case 132:
6987 
6988 /* Line 1806 of yacc.c */
6989 #line 1970 "ripper.y"
6990  { ifndef_ripper((yyval.val) = tCMP); }
6991  break;
6992 
6993  case 133:
6994 
6995 /* Line 1806 of yacc.c */
6996 #line 1971 "ripper.y"
6997  { ifndef_ripper((yyval.val) = tEQ); }
6998  break;
6999 
7000  case 134:
7001 
7002 /* Line 1806 of yacc.c */
7003 #line 1972 "ripper.y"
7004  { ifndef_ripper((yyval.val) = tEQQ); }
7005  break;
7006 
7007  case 135:
7008 
7009 /* Line 1806 of yacc.c */
7010 #line 1973 "ripper.y"
7011  { ifndef_ripper((yyval.val) = tMATCH); }
7012  break;
7013 
7014  case 136:
7015 
7016 /* Line 1806 of yacc.c */
7017 #line 1974 "ripper.y"
7018  { ifndef_ripper((yyval.val) = tNMATCH); }
7019  break;
7020 
7021  case 137:
7022 
7023 /* Line 1806 of yacc.c */
7024 #line 1975 "ripper.y"
7025  { ifndef_ripper((yyval.val) = '>'); }
7026  break;
7027 
7028  case 138:
7029 
7030 /* Line 1806 of yacc.c */
7031 #line 1976 "ripper.y"
7032  { ifndef_ripper((yyval.val) = tGEQ); }
7033  break;
7034 
7035  case 139:
7036 
7037 /* Line 1806 of yacc.c */
7038 #line 1977 "ripper.y"
7039  { ifndef_ripper((yyval.val) = '<'); }
7040  break;
7041 
7042  case 140:
7043 
7044 /* Line 1806 of yacc.c */
7045 #line 1978 "ripper.y"
7046  { ifndef_ripper((yyval.val) = tLEQ); }
7047  break;
7048 
7049  case 141:
7050 
7051 /* Line 1806 of yacc.c */
7052 #line 1979 "ripper.y"
7053  { ifndef_ripper((yyval.val) = tNEQ); }
7054  break;
7055 
7056  case 142:
7057 
7058 /* Line 1806 of yacc.c */
7059 #line 1980 "ripper.y"
7060  { ifndef_ripper((yyval.val) = tLSHFT); }
7061  break;
7062 
7063  case 143:
7064 
7065 /* Line 1806 of yacc.c */
7066 #line 1981 "ripper.y"
7067  { ifndef_ripper((yyval.val) = tRSHFT); }
7068  break;
7069 
7070  case 144:
7071 
7072 /* Line 1806 of yacc.c */
7073 #line 1982 "ripper.y"
7074  { ifndef_ripper((yyval.val) = '+'); }
7075  break;
7076 
7077  case 145:
7078 
7079 /* Line 1806 of yacc.c */
7080 #line 1983 "ripper.y"
7081  { ifndef_ripper((yyval.val) = '-'); }
7082  break;
7083 
7084  case 146:
7085 
7086 /* Line 1806 of yacc.c */
7087 #line 1984 "ripper.y"
7088  { ifndef_ripper((yyval.val) = '*'); }
7089  break;
7090 
7091  case 147:
7092 
7093 /* Line 1806 of yacc.c */
7094 #line 1985 "ripper.y"
7095  { ifndef_ripper((yyval.val) = '*'); }
7096  break;
7097 
7098  case 148:
7099 
7100 /* Line 1806 of yacc.c */
7101 #line 1986 "ripper.y"
7102  { ifndef_ripper((yyval.val) = '/'); }
7103  break;
7104 
7105  case 149:
7106 
7107 /* Line 1806 of yacc.c */
7108 #line 1987 "ripper.y"
7109  { ifndef_ripper((yyval.val) = '%'); }
7110  break;
7111 
7112  case 150:
7113 
7114 /* Line 1806 of yacc.c */
7115 #line 1988 "ripper.y"
7116  { ifndef_ripper((yyval.val) = tPOW); }
7117  break;
7118 
7119  case 151:
7120 
7121 /* Line 1806 of yacc.c */
7122 #line 1989 "ripper.y"
7123  { ifndef_ripper((yyval.val) = tDSTAR); }
7124  break;
7125 
7126  case 152:
7127 
7128 /* Line 1806 of yacc.c */
7129 #line 1990 "ripper.y"
7130  { ifndef_ripper((yyval.val) = '!'); }
7131  break;
7132 
7133  case 153:
7134 
7135 /* Line 1806 of yacc.c */
7136 #line 1991 "ripper.y"
7137  { ifndef_ripper((yyval.val) = '~'); }
7138  break;
7139 
7140  case 154:
7141 
7142 /* Line 1806 of yacc.c */
7143 #line 1992 "ripper.y"
7144  { ifndef_ripper((yyval.val) = tUPLUS); }
7145  break;
7146 
7147  case 155:
7148 
7149 /* Line 1806 of yacc.c */
7150 #line 1993 "ripper.y"
7151  { ifndef_ripper((yyval.val) = tUMINUS); }
7152  break;
7153 
7154  case 156:
7155 
7156 /* Line 1806 of yacc.c */
7157 #line 1994 "ripper.y"
7158  { ifndef_ripper((yyval.val) = tAREF); }
7159  break;
7160 
7161  case 157:
7162 
7163 /* Line 1806 of yacc.c */
7164 #line 1995 "ripper.y"
7165  { ifndef_ripper((yyval.val) = tASET); }
7166  break;
7167 
7168  case 158:
7169 
7170 /* Line 1806 of yacc.c */
7171 #line 1996 "ripper.y"
7172  { ifndef_ripper((yyval.val) = '`'); }
7173  break;
7174 
7175  case 200:
7176 
7177 /* Line 1806 of yacc.c */
7178 #line 2014 "ripper.y"
7179  {
7180  (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
7181  }
7182  break;
7183 
7184  case 201:
7185 
7186 /* Line 1806 of yacc.c */
7187 #line 2018 "ripper.y"
7188  {
7189  (yyval.val) = new_op_assign((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
7190  }
7191  break;
7192 
7193  case 202:
7194 
7195 /* Line 1806 of yacc.c */
7196 #line 2022 "ripper.y"
7197  {
7198 #if 0
7199  NODE *args;
7200 
7201  value_expr((yyvsp[(6) - (6)].val));
7202  if (!(yyvsp[(3) - (6)].val)) (yyvsp[(3) - (6)].val) = NEW_ZARRAY();
7203  if (nd_type((yyvsp[(3) - (6)].val)) == NODE_BLOCK_PASS) {
7204  args = NEW_ARGSCAT((yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val));
7205  }
7206  else {
7207  args = arg_concat((yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val));
7208  }
7209  if ((yyvsp[(5) - (6)].val) == tOROP) {
7210  (yyvsp[(5) - (6)].val) = 0;
7211  }
7212  else if ((yyvsp[(5) - (6)].val) == tANDOP) {
7213  (yyvsp[(5) - (6)].val) = 1;
7214  }
7215  (yyval.val) = NEW_OP_ASGN1((yyvsp[(1) - (6)].val), (yyvsp[(5) - (6)].val), args);
7216  fixpos((yyval.val), (yyvsp[(1) - (6)].val));
7217 #endif
7218  (yyvsp[(1) - (6)].val) = dispatch2(aref_field, (yyvsp[(1) - (6)].val), escape_Qundef((yyvsp[(3) - (6)].val)));
7219  (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
7220 
7221  }
7222  break;
7223 
7224  case 203:
7225 
7226 /* Line 1806 of yacc.c */
7227 #line 2048 "ripper.y"
7228  {
7229  value_expr((yyvsp[(5) - (5)].val));
7230  (yyval.val) = new_attr_op_assign((yyvsp[(1) - (5)].val), (yyvsp[(2) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
7231  }
7232  break;
7233 
7234  case 204:
7235 
7236 /* Line 1806 of yacc.c */
7237 #line 2053 "ripper.y"
7238  {
7239  value_expr((yyvsp[(5) - (5)].val));
7240  (yyval.val) = new_attr_op_assign((yyvsp[(1) - (5)].val), (yyvsp[(2) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
7241  }
7242  break;
7243 
7244  case 205:
7245 
7246 /* Line 1806 of yacc.c */
7247 #line 2058 "ripper.y"
7248  {
7249  value_expr((yyvsp[(5) - (5)].val));
7250  (yyval.val) = new_attr_op_assign((yyvsp[(1) - (5)].val), ripper_id2sym(idCOLON2), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
7251  }
7252  break;
7253 
7254  case 206:
7255 
7256 /* Line 1806 of yacc.c */
7257 #line 2063 "ripper.y"
7258  {
7259  (yyval.val) = const_path_field((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val));
7260  (yyval.val) = new_const_op_assign((yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
7261  }
7262  break;
7263 
7264  case 207:
7265 
7266 /* Line 1806 of yacc.c */
7267 #line 2068 "ripper.y"
7268  {
7269  (yyval.val) = top_const_field((yyvsp[(2) - (4)].val));
7270  (yyval.val) = new_const_op_assign((yyval.val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
7271  }
7272  break;
7273 
7274  case 208:
7275 
7276 /* Line 1806 of yacc.c */
7277 #line 2073 "ripper.y"
7278  {
7279  (yyvsp[(1) - (3)].val) = var_field((yyvsp[(1) - (3)].val));
7280  (yyval.val) = backref_assign_error((yyvsp[(1) - (3)].val), new_op_assign((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val)));
7281  }
7282  break;
7283 
7284  case 209:
7285 
7286 /* Line 1806 of yacc.c */
7287 #line 2078 "ripper.y"
7288  {
7289 #if 0
7290  value_expr((yyvsp[(1) - (3)].val));
7291  value_expr((yyvsp[(3) - (3)].val));
7292  (yyval.val) = NEW_DOT2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
7293 #endif
7294  (yyval.val) = dispatch2(dot2, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
7295 
7296  }
7297  break;
7298 
7299  case 210:
7300 
7301 /* Line 1806 of yacc.c */
7302 #line 2088 "ripper.y"
7303  {
7304 #if 0
7305  value_expr((yyvsp[(1) - (3)].val));
7306  value_expr((yyvsp[(3) - (3)].val));
7307  (yyval.val) = NEW_DOT3((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
7308 #endif
7309  (yyval.val) = dispatch2(dot3, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
7310 
7311  }
7312  break;
7313 
7314  case 211:
7315 
7316 /* Line 1806 of yacc.c */
7317 #line 2098 "ripper.y"
7318  {
7319 #if 0
7320  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '+', (yyvsp[(3) - (3)].val));
7321 #endif
7322  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('+'), (yyvsp[(3) - (3)].val));
7323 
7324  }
7325  break;
7326 
7327  case 212:
7328 
7329 /* Line 1806 of yacc.c */
7330 #line 2106 "ripper.y"
7331  {
7332 #if 0
7333  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '-', (yyvsp[(3) - (3)].val));
7334 #endif
7335  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('-'), (yyvsp[(3) - (3)].val));
7336 
7337  }
7338  break;
7339 
7340  case 213:
7341 
7342 /* Line 1806 of yacc.c */
7343 #line 2114 "ripper.y"
7344  {
7345 #if 0
7346  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '*', (yyvsp[(3) - (3)].val));
7347 #endif
7348  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('*'), (yyvsp[(3) - (3)].val));
7349 
7350  }
7351  break;
7352 
7353  case 214:
7354 
7355 /* Line 1806 of yacc.c */
7356 #line 2122 "ripper.y"
7357  {
7358 #if 0
7359  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '/', (yyvsp[(3) - (3)].val));
7360 #endif
7361  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('/'), (yyvsp[(3) - (3)].val));
7362 
7363  }
7364  break;
7365 
7366  case 215:
7367 
7368 /* Line 1806 of yacc.c */
7369 #line 2130 "ripper.y"
7370  {
7371 #if 0
7372  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '%', (yyvsp[(3) - (3)].val));
7373 #endif
7374  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('%'), (yyvsp[(3) - (3)].val));
7375 
7376  }
7377  break;
7378 
7379  case 216:
7380 
7381 /* Line 1806 of yacc.c */
7382 #line 2138 "ripper.y"
7383  {
7384 #if 0
7385  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tPOW, (yyvsp[(3) - (3)].val));
7386 #endif
7387  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM(idPow), (yyvsp[(3) - (3)].val));
7388 
7389  }
7390  break;
7391 
7392  case 217:
7393 
7394 /* Line 1806 of yacc.c */
7395 #line 2146 "ripper.y"
7396  {
7397 #if 0
7398  (yyval.val) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].val), tPOW, (yyvsp[(4) - (4)].val)), tUMINUS, 0);
7399 #endif
7400  (yyval.val) = dispatch3(binary, (yyvsp[(2) - (4)].val), ID2SYM(idPow), (yyvsp[(4) - (4)].val));
7401  (yyval.val) = dispatch2(unary, ID2SYM(idUMinus), (yyval.val));
7402 
7403  }
7404  break;
7405 
7406  case 218:
7407 
7408 /* Line 1806 of yacc.c */
7409 #line 2155 "ripper.y"
7410  {
7411 #if 0
7412  (yyval.val) = call_uni_op((yyvsp[(2) - (2)].val), tUPLUS);
7413 #endif
7414  (yyval.val) = dispatch2(unary, ID2SYM(idUPlus), (yyvsp[(2) - (2)].val));
7415 
7416  }
7417  break;
7418 
7419  case 219:
7420 
7421 /* Line 1806 of yacc.c */
7422 #line 2163 "ripper.y"
7423  {
7424 #if 0
7425  (yyval.val) = call_uni_op((yyvsp[(2) - (2)].val), tUMINUS);
7426 #endif
7427  (yyval.val) = dispatch2(unary, ID2SYM(idUMinus), (yyvsp[(2) - (2)].val));
7428 
7429  }
7430  break;
7431 
7432  case 220:
7433 
7434 /* Line 1806 of yacc.c */
7435 #line 2171 "ripper.y"
7436  {
7437 #if 0
7438  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '|', (yyvsp[(3) - (3)].val));
7439 #endif
7440  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('|'), (yyvsp[(3) - (3)].val));
7441 
7442  }
7443  break;
7444 
7445  case 221:
7446 
7447 /* Line 1806 of yacc.c */
7448 #line 2179 "ripper.y"
7449  {
7450 #if 0
7451  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '^', (yyvsp[(3) - (3)].val));
7452 #endif
7453  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('^'), (yyvsp[(3) - (3)].val));
7454 
7455  }
7456  break;
7457 
7458  case 222:
7459 
7460 /* Line 1806 of yacc.c */
7461 #line 2187 "ripper.y"
7462  {
7463 #if 0
7464  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '&', (yyvsp[(3) - (3)].val));
7465 #endif
7466  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('&'), (yyvsp[(3) - (3)].val));
7467 
7468  }
7469  break;
7470 
7471  case 223:
7472 
7473 /* Line 1806 of yacc.c */
7474 #line 2195 "ripper.y"
7475  {
7476 #if 0
7477  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tCMP, (yyvsp[(3) - (3)].val));
7478 #endif
7479  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM(idCmp), (yyvsp[(3) - (3)].val));
7480 
7481  }
7482  break;
7483 
7484  case 224:
7485 
7486 /* Line 1806 of yacc.c */
7487 #line 2203 "ripper.y"
7488  {
7489 #if 0
7490  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '>', (yyvsp[(3) - (3)].val));
7491 #endif
7492  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('>'), (yyvsp[(3) - (3)].val));
7493 
7494  }
7495  break;
7496 
7497  case 225:
7498 
7499 /* Line 1806 of yacc.c */
7500 #line 2211 "ripper.y"
7501  {
7502 #if 0
7503  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tGEQ, (yyvsp[(3) - (3)].val));
7504 #endif
7505  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM(idGE), (yyvsp[(3) - (3)].val));
7506 
7507  }
7508  break;
7509 
7510  case 226:
7511 
7512 /* Line 1806 of yacc.c */
7513 #line 2219 "ripper.y"
7514  {
7515 #if 0
7516  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '<', (yyvsp[(3) - (3)].val));
7517 #endif
7518  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('<'), (yyvsp[(3) - (3)].val));
7519 
7520  }
7521  break;
7522 
7523  case 227:
7524 
7525 /* Line 1806 of yacc.c */
7526 #line 2227 "ripper.y"
7527  {
7528 #if 0
7529  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tLEQ, (yyvsp[(3) - (3)].val));
7530 #endif
7531  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM(idLE), (yyvsp[(3) - (3)].val));
7532 
7533  }
7534  break;
7535 
7536  case 228:
7537 
7538 /* Line 1806 of yacc.c */
7539 #line 2235 "ripper.y"
7540  {
7541 #if 0
7542  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tEQ, (yyvsp[(3) - (3)].val));
7543 #endif
7544  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM(idEq), (yyvsp[(3) - (3)].val));
7545 
7546  }
7547  break;
7548 
7549  case 229:
7550 
7551 /* Line 1806 of yacc.c */
7552 #line 2243 "ripper.y"
7553  {
7554 #if 0
7555  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tEQQ, (yyvsp[(3) - (3)].val));
7556 #endif
7557  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM(idEqq), (yyvsp[(3) - (3)].val));
7558 
7559  }
7560  break;
7561 
7562  case 230:
7563 
7564 /* Line 1806 of yacc.c */
7565 #line 2251 "ripper.y"
7566  {
7567 #if 0
7568  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tNEQ, (yyvsp[(3) - (3)].val));
7569 #endif
7570  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM(idNeq), (yyvsp[(3) - (3)].val));
7571 
7572  }
7573  break;
7574 
7575  case 231:
7576 
7577 /* Line 1806 of yacc.c */
7578 #line 2259 "ripper.y"
7579  {
7580 #if 0
7581  (yyval.val) = match_op((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
7582  if (nd_type((yyvsp[(1) - (3)].val)) == NODE_LIT) {
7583  VALUE lit = (yyvsp[(1) - (3)].val)->nd_lit;
7584  if (RB_TYPE_P(lit, T_REGEXP)) {
7585  (yyval.val)->nd_args = reg_named_capture_assign(lit);
7586  }
7587  }
7588 #endif
7589  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM(idEqTilde), (yyvsp[(3) - (3)].val));
7590 
7591  }
7592  break;
7593 
7594  case 232:
7595 
7596 /* Line 1806 of yacc.c */
7597 #line 2273 "ripper.y"
7598  {
7599 #if 0
7600  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tNMATCH, (yyvsp[(3) - (3)].val));
7601 #endif
7602  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM(idNeqTilde), (yyvsp[(3) - (3)].val));
7603 
7604  }
7605  break;
7606 
7607  case 233:
7608 
7609 /* Line 1806 of yacc.c */
7610 #line 2281 "ripper.y"
7611  {
7612 #if 0
7613  (yyval.val) = call_uni_op(method_cond((yyvsp[(2) - (2)].val)), '!');
7614 #endif
7615  (yyval.val) = dispatch2(unary, ID2SYM('!'), (yyvsp[(2) - (2)].val));
7616 
7617  }
7618  break;
7619 
7620  case 234:
7621 
7622 /* Line 1806 of yacc.c */
7623 #line 2289 "ripper.y"
7624  {
7625 #if 0
7626  (yyval.val) = call_uni_op((yyvsp[(2) - (2)].val), '~');
7627 #endif
7628  (yyval.val) = dispatch2(unary, ID2SYM('~'), (yyvsp[(2) - (2)].val));
7629 
7630  }
7631  break;
7632 
7633  case 235:
7634 
7635 /* Line 1806 of yacc.c */
7636 #line 2297 "ripper.y"
7637  {
7638 #if 0
7639  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tLSHFT, (yyvsp[(3) - (3)].val));
7640 #endif
7641  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM(idLTLT), (yyvsp[(3) - (3)].val));
7642 
7643  }
7644  break;
7645 
7646  case 236:
7647 
7648 /* Line 1806 of yacc.c */
7649 #line 2305 "ripper.y"
7650  {
7651 #if 0
7652  (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tRSHFT, (yyvsp[(3) - (3)].val));
7653 #endif
7654  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM(idGTGT), (yyvsp[(3) - (3)].val));
7655 
7656  }
7657  break;
7658 
7659  case 237:
7660 
7661 /* Line 1806 of yacc.c */
7662 #line 2313 "ripper.y"
7663  {
7664 #if 0
7665  (yyval.val) = logop(NODE_AND, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
7666 #endif
7667  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM(idANDOP), (yyvsp[(3) - (3)].val));
7668 
7669  }
7670  break;
7671 
7672  case 238:
7673 
7674 /* Line 1806 of yacc.c */
7675 #line 2321 "ripper.y"
7676  {
7677 #if 0
7678  (yyval.val) = logop(NODE_OR, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
7679 #endif
7680  (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM(idOROP), (yyvsp[(3) - (3)].val));
7681 
7682  }
7683  break;
7684 
7685  case 239:
7686 
7687 /* Line 1806 of yacc.c */
7688 #line 2328 "ripper.y"
7689  {in_defined = 1;}
7690  break;
7691 
7692  case 240:
7693 
7694 /* Line 1806 of yacc.c */
7695 #line 2329 "ripper.y"
7696  {
7697  in_defined = 0;
7698 #if 0
7699  (yyval.val) = new_defined((yyvsp[(4) - (4)].val));
7700 #endif
7701  (yyval.val) = dispatch1(defined, (yyvsp[(4) - (4)].val));
7702 
7703  }
7704  break;
7705 
7706  case 241:
7707 
7708 /* Line 1806 of yacc.c */
7709 #line 2338 "ripper.y"
7710  {
7711 #if 0
7712  value_expr((yyvsp[(1) - (6)].val));
7713  (yyval.val) = new_if((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val));
7714  fixpos((yyval.val), (yyvsp[(1) - (6)].val));
7715 #endif
7716  (yyval.val) = dispatch3(ifop, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val));
7717 
7718  }
7719  break;
7720 
7721  case 242:
7722 
7723 /* Line 1806 of yacc.c */
7724 #line 2348 "ripper.y"
7725  {
7726  (yyval.val) = (yyvsp[(1) - (1)].val);
7727  }
7728  break;
7729 
7730  case 243:
7731 
7732 /* Line 1806 of yacc.c */
7733 #line 2354 "ripper.y"
7734  {
7735 #if 0
7736  value_expr((yyvsp[(1) - (1)].val));
7737  (yyval.val) = (yyvsp[(1) - (1)].val);
7738  if (!(yyval.val)) (yyval.val) = NEW_NIL();
7739 #endif
7740  (yyval.val) = (yyvsp[(1) - (1)].val);
7741 
7742  }
7743  break;
7744 
7745  case 245:
7746 
7747 /* Line 1806 of yacc.c */
7748 #line 2367 "ripper.y"
7749  {
7750  (yyval.val) = (yyvsp[(1) - (2)].val);
7751  }
7752  break;
7753 
7754  case 246:
7755 
7756 /* Line 1806 of yacc.c */
7757 #line 2371 "ripper.y"
7758  {
7759 #if 0
7760  (yyval.val) = (yyvsp[(3) - (4)].val) ? arg_append((yyvsp[(1) - (4)].val), new_hash((yyvsp[(3) - (4)].val))) : (yyvsp[(1) - (4)].val);
7761 #endif
7762  (yyval.val) = arg_add_assocs((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val));
7763 
7764  }
7765  break;
7766 
7767  case 247:
7768 
7769 /* Line 1806 of yacc.c */
7770 #line 2379 "ripper.y"
7771  {
7772 #if 0
7773  (yyval.val) = (yyvsp[(1) - (2)].val) ? NEW_LIST(new_hash((yyvsp[(1) - (2)].val))) : 0;
7774 #endif
7775  (yyval.val) = arg_add_assocs(arg_new(), (yyvsp[(1) - (2)].val));
7776 
7777  }
7778  break;
7779 
7780  case 248:
7781 
7782 /* Line 1806 of yacc.c */
7783 #line 2389 "ripper.y"
7784  {
7785 #if 0
7786  value_expr((yyvsp[(1) - (1)].val));
7787  (yyval.val) = (yyvsp[(1) - (1)].val);
7788 #endif
7789 
7790  }
7791  break;
7792 
7793  case 249:
7794 
7795 /* Line 1806 of yacc.c */
7796 #line 2397 "ripper.y"
7797  {
7798 #if 0
7799  value_expr((yyvsp[(1) - (3)].val));
7800  (yyval.val) = NEW_RESCUE((yyvsp[(1) - (3)].val), NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].val)), 0), 0);
7801 #endif
7802  (yyval.val) = dispatch2(rescue_mod, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
7803 
7804  }
7805  break;
7806 
7807  case 250:
7808 
7809 /* Line 1806 of yacc.c */
7810 #line 2408 "ripper.y"
7811  {
7812 #if 0
7813  (yyval.val) = (yyvsp[(2) - (3)].val);
7814 #endif
7815  (yyval.val) = dispatch1(arg_paren, escape_Qundef((yyvsp[(2) - (3)].val)));
7816 
7817  }
7818  break;
7819 
7820  case 255:
7821 
7822 /* Line 1806 of yacc.c */
7823 #line 2424 "ripper.y"
7824  {
7825  (yyval.val) = (yyvsp[(1) - (2)].val);
7826  }
7827  break;
7828 
7829  case 256:
7830 
7831 /* Line 1806 of yacc.c */
7832 #line 2428 "ripper.y"
7833  {
7834 #if 0
7835  (yyval.val) = (yyvsp[(3) - (4)].val) ? arg_append((yyvsp[(1) - (4)].val), new_hash((yyvsp[(3) - (4)].val))) : (yyvsp[(1) - (4)].val);
7836 #endif
7837  (yyval.val) = arg_add_assocs((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val));
7838 
7839  }
7840  break;
7841 
7842  case 257:
7843 
7844 /* Line 1806 of yacc.c */
7845 #line 2436 "ripper.y"
7846  {
7847 #if 0
7848  (yyval.val) = (yyvsp[(1) - (2)].val) ? NEW_LIST(new_hash((yyvsp[(1) - (2)].val))) : 0;
7849 #endif
7850  (yyval.val) = arg_add_assocs(arg_new(), (yyvsp[(1) - (2)].val));
7851 
7852  }
7853  break;
7854 
7855  case 258:
7856 
7857 /* Line 1806 of yacc.c */
7858 #line 2446 "ripper.y"
7859  {
7860 #if 0
7861  value_expr((yyvsp[(1) - (1)].val));
7862  (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val));
7863 #endif
7864  (yyval.val) = arg_add(arg_new(), (yyvsp[(1) - (1)].val));
7865 
7866  }
7867  break;
7868 
7869  case 259:
7870 
7871 /* Line 1806 of yacc.c */
7872 #line 2455 "ripper.y"
7873  {
7874 #if 0
7875  (yyval.val) = arg_blk_pass((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
7876 #endif
7877  (yyval.val) = arg_add_optblock((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
7878 
7879  }
7880  break;
7881 
7882  case 260:
7883 
7884 /* Line 1806 of yacc.c */
7885 #line 2463 "ripper.y"
7886  {
7887 #if 0
7888  (yyval.val) = (yyvsp[(1) - (2)].val) ? NEW_LIST(new_hash((yyvsp[(1) - (2)].val))) : 0;
7889  (yyval.val) = arg_blk_pass((yyval.val), (yyvsp[(2) - (2)].val));
7890 #endif
7891  (yyval.val) = arg_add_assocs(arg_new(), (yyvsp[(1) - (2)].val));
7892  (yyval.val) = arg_add_optblock((yyval.val), (yyvsp[(2) - (2)].val));
7893 
7894  }
7895  break;
7896 
7897  case 261:
7898 
7899 /* Line 1806 of yacc.c */
7900 #line 2473 "ripper.y"
7901  {
7902 #if 0
7903  (yyval.val) = (yyvsp[(3) - (4)].val) ? arg_append((yyvsp[(1) - (4)].val), new_hash((yyvsp[(3) - (4)].val))) : (yyvsp[(1) - (4)].val);
7904  (yyval.val) = arg_blk_pass((yyval.val), (yyvsp[(4) - (4)].val));
7905 #endif
7906  (yyval.val) = arg_add_optblock(arg_add_assocs((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val)), (yyvsp[(4) - (4)].val));
7907 
7908  }
7909  break;
7910 
7911  case 262:
7912 
7913 /* Line 1806 of yacc.c */
7914 #line 2484 "ripper.y"
7915  {
7916  (yyval.val) = arg_add_block(arg_new(), (yyvsp[(1) - (1)].val));
7917  }
7918  break;
7919 
7920  case 263:
7921 
7922 /* Line 1806 of yacc.c */
7923 #line 2490 "ripper.y"
7924  {
7925  (yyval.val) = cmdarg_stack;
7926  CMDARG_PUSH(1);
7927  }
7928  break;
7929 
7930  case 264:
7931 
7932 /* Line 1806 of yacc.c */
7933 #line 2495 "ripper.y"
7934  {
7935  /* CMDARG_POP() */
7936  CMDARG_SET((yyvsp[(1) - (2)].val));
7937  (yyval.val) = (yyvsp[(2) - (2)].val);
7938  }
7939  break;
7940 
7941  case 265:
7942 
7943 /* Line 1806 of yacc.c */
7944 #line 2503 "ripper.y"
7945  {
7946 #if 0
7947  (yyval.val) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].val));
7948 #endif
7949  (yyval.val) = (yyvsp[(2) - (2)].val);
7950 
7951  }
7952  break;
7953 
7954  case 266:
7955 
7956 /* Line 1806 of yacc.c */
7957 #line 2513 "ripper.y"
7958  {
7959  (yyval.val) = (yyvsp[(2) - (2)].val);
7960  }
7961  break;
7962 
7963  case 267:
7964 
7965 /* Line 1806 of yacc.c */
7966 #line 2517 "ripper.y"
7967  {
7968  (yyval.val) = 0;
7969  }
7970  break;
7971 
7972  case 268:
7973 
7974 /* Line 1806 of yacc.c */
7975 #line 2523 "ripper.y"
7976  {
7977 #if 0
7978  (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val));
7979 #endif
7980  (yyval.val) = arg_add(arg_new(), (yyvsp[(1) - (1)].val));
7981 
7982  }
7983  break;
7984 
7985  case 269:
7986 
7987 /* Line 1806 of yacc.c */
7988 #line 2531 "ripper.y"
7989  {
7990 #if 0
7991  (yyval.val) = NEW_SPLAT((yyvsp[(2) - (2)].val));
7992 #endif
7993  (yyval.val) = arg_add_star(arg_new(), (yyvsp[(2) - (2)].val));
7994 
7995  }
7996  break;
7997 
7998  case 270:
7999 
8000 /* Line 1806 of yacc.c */
8001 #line 2539 "ripper.y"
8002  {
8003 #if 0
8004  NODE *n1;
8005  if ((n1 = splat_array((yyvsp[(1) - (3)].val))) != 0) {
8006  (yyval.val) = list_append(n1, (yyvsp[(3) - (3)].val));
8007  }
8008  else {
8009  (yyval.val) = arg_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
8010  }
8011 #endif
8012  (yyval.val) = arg_add((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
8013 
8014  }
8015  break;
8016 
8017  case 271:
8018 
8019 /* Line 1806 of yacc.c */
8020 #line 2553 "ripper.y"
8021  {
8022 #if 0
8023  NODE *n1;
8024  if ((nd_type((yyvsp[(4) - (4)].val)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].val))) != 0) {
8025  (yyval.val) = list_concat(n1, (yyvsp[(4) - (4)].val));
8026  }
8027  else {
8028  (yyval.val) = arg_concat((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val));
8029  }
8030 #endif
8031  (yyval.val) = arg_add_star((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val));
8032 
8033  }
8034  break;
8035 
8036  case 274:
8037 
8038 /* Line 1806 of yacc.c */
8039 #line 2573 "ripper.y"
8040  {
8041 #if 0
8042  NODE *n1;
8043  if ((n1 = splat_array((yyvsp[(1) - (3)].val))) != 0) {
8044  (yyval.val) = list_append(n1, (yyvsp[(3) - (3)].val));
8045  }
8046  else {
8047  (yyval.val) = arg_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
8048  }
8049 #endif
8050  (yyval.val) = mrhs_add(args2mrhs((yyvsp[(1) - (3)].val)), (yyvsp[(3) - (3)].val));
8051 
8052  }
8053  break;
8054 
8055  case 275:
8056 
8057 /* Line 1806 of yacc.c */
8058 #line 2587 "ripper.y"
8059  {
8060 #if 0
8061  NODE *n1;
8062  if (nd_type((yyvsp[(4) - (4)].val)) == NODE_ARRAY &&
8063  (n1 = splat_array((yyvsp[(1) - (4)].val))) != 0) {
8064  (yyval.val) = list_concat(n1, (yyvsp[(4) - (4)].val));
8065  }
8066  else {
8067  (yyval.val) = arg_concat((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val));
8068  }
8069 #endif
8070  (yyval.val) = mrhs_add_star(args2mrhs((yyvsp[(1) - (4)].val)), (yyvsp[(4) - (4)].val));
8071 
8072  }
8073  break;
8074 
8075  case 276:
8076 
8077 /* Line 1806 of yacc.c */
8078 #line 2602 "ripper.y"
8079  {
8080 #if 0
8081  (yyval.val) = NEW_SPLAT((yyvsp[(2) - (2)].val));
8082 #endif
8083  (yyval.val) = mrhs_add_star(mrhs_new(), (yyvsp[(2) - (2)].val));
8084 
8085  }
8086  break;
8087 
8088  case 287:
8089 
8090 /* Line 1806 of yacc.c */
8091 #line 2622 "ripper.y"
8092  {
8093 #if 0
8094  (yyval.val) = NEW_FCALL((yyvsp[(1) - (1)].val), 0);
8095 #endif
8096  (yyval.val) = method_arg(dispatch1(fcall, (yyvsp[(1) - (1)].val)), arg_new());
8097 
8098  }
8099  break;
8100 
8101  case 288:
8102 
8103 /* Line 1806 of yacc.c */
8104 #line 2630 "ripper.y"
8105  {
8106  (yyvsp[(1) - (1)].val) = cmdarg_stack;
8107  CMDARG_SET(0);
8108 #if 0
8109  (yyval.num) = ruby_sourceline;
8110 #endif
8111 
8112  }
8113  break;
8114 
8115  case 289:
8116 
8117 /* Line 1806 of yacc.c */
8118 #line 2640 "ripper.y"
8119  {
8120  CMDARG_SET((yyvsp[(1) - (4)].val));
8121 #if 0
8122  if ((yyvsp[(3) - (4)].val) == NULL) {
8123  (yyval.val) = NEW_NIL();
8124  }
8125  else {
8126  if (nd_type((yyvsp[(3) - (4)].val)) == NODE_RESCUE ||
8127  nd_type((yyvsp[(3) - (4)].val)) == NODE_ENSURE)
8128  nd_set_line((yyvsp[(3) - (4)].val), (yyvsp[(2) - (4)].num));
8129  (yyval.val) = NEW_BEGIN((yyvsp[(3) - (4)].val));
8130  }
8131  nd_set_line((yyval.val), (yyvsp[(2) - (4)].num));
8132 #endif
8133  (yyval.val) = dispatch1(begin, (yyvsp[(3) - (4)].val));
8134 
8135  }
8136  break;
8137 
8138  case 290:
8139 
8140 /* Line 1806 of yacc.c */
8141 #line 2657 "ripper.y"
8142  {SET_LEX_STATE(EXPR_ENDARG);}
8143  break;
8144 
8145  case 291:
8146 
8147 /* Line 1806 of yacc.c */
8148 #line 2658 "ripper.y"
8149  {
8150 #if 0
8151  (yyval.val) = NEW_BEGIN(0);
8152 #endif
8153  (yyval.val) = dispatch1(paren, 0);
8154 
8155  }
8156  break;
8157 
8158  case 292:
8159 
8160 /* Line 1806 of yacc.c */
8161 #line 2666 "ripper.y"
8162  {
8163  (yyvsp[(1) - (1)].val) = cmdarg_stack;
8164  CMDARG_SET(0);
8165  }
8166  break;
8167 
8168  case 293:
8169 
8170 /* Line 1806 of yacc.c */
8171 #line 2670 "ripper.y"
8172  {SET_LEX_STATE(EXPR_ENDARG);}
8173  break;
8174 
8175  case 294:
8176 
8177 /* Line 1806 of yacc.c */
8178 #line 2671 "ripper.y"
8179  {
8180  CMDARG_SET((yyvsp[(1) - (5)].val));
8181 #if 0
8182  (yyval.val) = (yyvsp[(3) - (5)].val);
8183 #endif
8184  (yyval.val) = dispatch1(paren, (yyvsp[(3) - (5)].val));
8185 
8186  }
8187  break;
8188 
8189  case 295:
8190 
8191 /* Line 1806 of yacc.c */
8192 #line 2680 "ripper.y"
8193  {
8194 #if 0
8195  (yyval.val) = (yyvsp[(2) - (3)].val);
8196 #endif
8197  (yyval.val) = dispatch1(paren, (yyvsp[(2) - (3)].val));
8198 
8199  }
8200  break;
8201 
8202  case 296:
8203 
8204 /* Line 1806 of yacc.c */
8205 #line 2688 "ripper.y"
8206  {
8207 #if 0
8208  (yyval.val) = NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
8209 #endif
8210  (yyval.val) = dispatch2(const_path_ref, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
8211 
8212  }
8213  break;
8214 
8215  case 297:
8216 
8217 /* Line 1806 of yacc.c */
8218 #line 2696 "ripper.y"
8219  {
8220 #if 0
8221  (yyval.val) = NEW_COLON3((yyvsp[(2) - (2)].val));
8222 #endif
8223  (yyval.val) = dispatch1(top_const_ref, (yyvsp[(2) - (2)].val));
8224 
8225  }
8226  break;
8227 
8228  case 298:
8229 
8230 /* Line 1806 of yacc.c */
8231 #line 2704 "ripper.y"
8232  {
8233 #if 0
8234  if ((yyvsp[(2) - (3)].val) == 0) {
8235  (yyval.val) = NEW_ZARRAY(); /* zero length array*/
8236  }
8237  else {
8238  (yyval.val) = (yyvsp[(2) - (3)].val);
8239  }
8240 #endif
8241  (yyval.val) = dispatch1(array, escape_Qundef((yyvsp[(2) - (3)].val)));
8242 
8243  }
8244  break;
8245 
8246  case 299:
8247 
8248 /* Line 1806 of yacc.c */
8249 #line 2717 "ripper.y"
8250  {
8251 #if 0
8252  (yyval.val) = new_hash((yyvsp[(2) - (3)].val));
8253 #endif
8254  (yyval.val) = dispatch1(hash, escape_Qundef((yyvsp[(2) - (3)].val)));
8255 
8256  }
8257  break;
8258 
8259  case 300:
8260 
8261 /* Line 1806 of yacc.c */
8262 #line 2725 "ripper.y"
8263  {
8264 #if 0
8265  (yyval.val) = NEW_RETURN(0);
8266 #endif
8267  (yyval.val) = dispatch0(return0);
8268 
8269  }
8270  break;
8271 
8272  case 301:
8273 
8274 /* Line 1806 of yacc.c */
8275 #line 2733 "ripper.y"
8276  {
8277 #if 0
8278  (yyval.val) = new_yield((yyvsp[(3) - (4)].val));
8279 #endif
8280  (yyval.val) = dispatch1(yield, dispatch1(paren, (yyvsp[(3) - (4)].val)));
8281 
8282  }
8283  break;
8284 
8285  case 302:
8286 
8287 /* Line 1806 of yacc.c */
8288 #line 2741 "ripper.y"
8289  {
8290 #if 0
8291  (yyval.val) = NEW_YIELD(0);
8292 #endif
8293  (yyval.val) = dispatch1(yield, dispatch1(paren, arg_new()));
8294 
8295  }
8296  break;
8297 
8298  case 303:
8299 
8300 /* Line 1806 of yacc.c */
8301 #line 2749 "ripper.y"
8302  {
8303 #if 0
8304  (yyval.val) = NEW_YIELD(0);
8305 #endif
8306  (yyval.val) = dispatch0(yield0);
8307 
8308  }
8309  break;
8310 
8311  case 304:
8312 
8313 /* Line 1806 of yacc.c */
8314 #line 2756 "ripper.y"
8315  {in_defined = 1;}
8316  break;
8317 
8318  case 305:
8319 
8320 /* Line 1806 of yacc.c */
8321 #line 2757 "ripper.y"
8322  {
8323  in_defined = 0;
8324 #if 0
8325  (yyval.val) = new_defined((yyvsp[(5) - (6)].val));
8326 #endif
8327  (yyval.val) = dispatch1(defined, (yyvsp[(5) - (6)].val));
8328 
8329  }
8330  break;
8331 
8332  case 306:
8333 
8334 /* Line 1806 of yacc.c */
8335 #line 2766 "ripper.y"
8336  {
8337 #if 0
8338  (yyval.val) = call_uni_op(method_cond((yyvsp[(3) - (4)].val)), '!');
8339 #endif
8340  (yyval.val) = dispatch2(unary, ripper_intern("not"), (yyvsp[(3) - (4)].val));
8341 
8342  }
8343  break;
8344 
8345  case 307:
8346 
8347 /* Line 1806 of yacc.c */
8348 #line 2774 "ripper.y"
8349  {
8350 #if 0
8351  (yyval.val) = call_uni_op(method_cond(NEW_NIL()), '!');
8352 #endif
8353  (yyval.val) = dispatch2(unary, ripper_intern("not"), Qnil);
8354 
8355  }
8356  break;
8357 
8358  case 308:
8359 
8360 /* Line 1806 of yacc.c */
8361 #line 2782 "ripper.y"
8362  {
8363 #if 0
8364  (yyvsp[(2) - (2)].val)->nd_iter = (yyvsp[(1) - (2)].val);
8365  (yyval.val) = (yyvsp[(2) - (2)].val);
8366 #endif
8367  (yyval.val) = method_arg(dispatch1(fcall, (yyvsp[(1) - (2)].val)), arg_new());
8368  (yyval.val) = method_add_block((yyval.val), (yyvsp[(2) - (2)].val));
8369 
8370  }
8371  break;
8372 
8373  case 310:
8374 
8375 /* Line 1806 of yacc.c */
8376 #line 2793 "ripper.y"
8377  {
8378 #if 0
8379  block_dup_check((yyvsp[(1) - (2)].val)->nd_args, (yyvsp[(2) - (2)].val));
8380  (yyvsp[(2) - (2)].val)->nd_iter = (yyvsp[(1) - (2)].val);
8381  (yyval.val) = (yyvsp[(2) - (2)].val);
8382 #endif
8383  (yyval.val) = method_add_block((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
8384 
8385  }
8386  break;
8387 
8388  case 311:
8389 
8390 /* Line 1806 of yacc.c */
8391 #line 2803 "ripper.y"
8392  {
8393  (yyval.val) = (yyvsp[(2) - (2)].val);
8394  }
8395  break;
8396 
8397  case 312:
8398 
8399 /* Line 1806 of yacc.c */
8400 #line 2810 "ripper.y"
8401  {
8402 #if 0
8403  (yyval.val) = new_if((yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), (yyvsp[(5) - (6)].val));
8404  fixpos((yyval.val), (yyvsp[(2) - (6)].val));
8405 #endif
8406  (yyval.val) = dispatch3(if, (yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), escape_Qundef((yyvsp[(5) - (6)].val)));
8407 
8408  }
8409  break;
8410 
8411  case 313:
8412 
8413 /* Line 1806 of yacc.c */
8414 #line 2822 "ripper.y"
8415  {
8416 #if 0
8417  (yyval.val) = new_unless((yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), (yyvsp[(5) - (6)].val));
8418  fixpos((yyval.val), (yyvsp[(2) - (6)].val));
8419 #endif
8420  (yyval.val) = dispatch3(unless, (yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), escape_Qundef((yyvsp[(5) - (6)].val)));
8421 
8422  }
8423  break;
8424 
8425  case 314:
8426 
8427 /* Line 1806 of yacc.c */
8428 #line 2830 "ripper.y"
8429  {COND_PUSH(1);}
8430  break;
8431 
8432  case 315:
8433 
8434 /* Line 1806 of yacc.c */
8435 #line 2830 "ripper.y"
8436  {COND_POP();}
8437  break;
8438 
8439  case 316:
8440 
8441 /* Line 1806 of yacc.c */
8442 #line 2833 "ripper.y"
8443  {
8444 #if 0
8445  (yyval.val) = NEW_WHILE(cond((yyvsp[(3) - (7)].val)), (yyvsp[(6) - (7)].val), 1);
8446  fixpos((yyval.val), (yyvsp[(3) - (7)].val));
8447 #endif
8448  (yyval.val) = dispatch2(while, (yyvsp[(3) - (7)].val), (yyvsp[(6) - (7)].val));
8449 
8450  }
8451  break;
8452 
8453  case 317:
8454 
8455 /* Line 1806 of yacc.c */
8456 #line 2841 "ripper.y"
8457  {COND_PUSH(1);}
8458  break;
8459 
8460  case 318:
8461 
8462 /* Line 1806 of yacc.c */
8463 #line 2841 "ripper.y"
8464  {COND_POP();}
8465  break;
8466 
8467  case 319:
8468 
8469 /* Line 1806 of yacc.c */
8470 #line 2844 "ripper.y"
8471  {
8472 #if 0
8473  (yyval.val) = NEW_UNTIL(cond((yyvsp[(3) - (7)].val)), (yyvsp[(6) - (7)].val), 1);
8474  fixpos((yyval.val), (yyvsp[(3) - (7)].val));
8475 #endif
8476  (yyval.val) = dispatch2(until, (yyvsp[(3) - (7)].val), (yyvsp[(6) - (7)].val));
8477 
8478  }
8479  break;
8480 
8481  case 320:
8482 
8483 /* Line 1806 of yacc.c */
8484 #line 2855 "ripper.y"
8485  {
8486 #if 0
8487  (yyval.val) = NEW_CASE((yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val));
8488  fixpos((yyval.val), (yyvsp[(2) - (5)].val));
8489 #endif
8490  (yyval.val) = dispatch2(case, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val));
8491 
8492  }
8493  break;
8494 
8495  case 321:
8496 
8497 /* Line 1806 of yacc.c */
8498 #line 2864 "ripper.y"
8499  {
8500 #if 0
8501  (yyval.val) = NEW_CASE(0, (yyvsp[(3) - (4)].val));
8502 #endif
8503  (yyval.val) = dispatch2(case, Qnil, (yyvsp[(3) - (4)].val));
8504 
8505  }
8506  break;
8507 
8508  case 322:
8509 
8510 /* Line 1806 of yacc.c */
8511 #line 2872 "ripper.y"
8512  {COND_PUSH(1);}
8513  break;
8514 
8515  case 323:
8516 
8517 /* Line 1806 of yacc.c */
8518 #line 2874 "ripper.y"
8519  {COND_POP();}
8520  break;
8521 
8522  case 324:
8523 
8524 /* Line 1806 of yacc.c */
8525 #line 2877 "ripper.y"
8526  {
8527 #if 0
8528  /*
8529  * for a, b, c in e
8530  * #=>
8531  * e.each{|*x| a, b, c = x}
8532  *
8533  * for a in e
8534  * #=>
8535  * e.each{|x| a, = x}
8536  */
8537  ID id = internal_id();
8538  ID *tbl = ALLOC_N(ID, 2);
8539  NODE *m = NEW_ARGS_AUX(0, 0);
8540  NODE *args, *scope;
8541 
8542  switch (nd_type((yyvsp[(2) - (9)].val))) {
8543  case NODE_MASGN:
8544  m->nd_next = node_assign((yyvsp[(2) - (9)].val), NEW_FOR(NEW_DVAR(id), 0, 0));
8545  args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
8546  break;
8547  case NODE_LASGN:
8548  case NODE_DASGN:
8549  case NODE_DASGN_CURR:
8550  (yyvsp[(2) - (9)].val)->nd_value = NEW_DVAR(id);
8551  m->nd_plen = 1;
8552  m->nd_next = (yyvsp[(2) - (9)].val);
8553  args = new_args(m, 0, 0, 0, new_args_tail(0, 0, 0));
8554  break;
8555  default:
8556  m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].val)), 0), NEW_DVAR(id));
8557  args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
8558  break;
8559  }
8560  scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].val), args);
8561  tbl[0] = 1; tbl[1] = id;
8562  (yyval.val) = NEW_FOR(0, (yyvsp[(5) - (9)].val), scope);
8563  fixpos((yyval.val), (yyvsp[(2) - (9)].val));
8564 #endif
8565  (yyval.val) = dispatch3(for, (yyvsp[(2) - (9)].val), (yyvsp[(5) - (9)].val), (yyvsp[(8) - (9)].val));
8566 
8567  }
8568  break;
8569 
8570  case 325:
8571 
8572 /* Line 1806 of yacc.c */
8573 #line 2920 "ripper.y"
8574  {
8575  if (in_def || in_single)
8576  yyerror("class definition in method body");
8577  local_push(0);
8578 #if 0
8579  (yyval.num) = ruby_sourceline;
8580 #endif
8581 
8582  }
8583  break;
8584 
8585  case 326:
8586 
8587 /* Line 1806 of yacc.c */
8588 #line 2931 "ripper.y"
8589  {
8590 #if 0
8591  (yyval.val) = NEW_CLASS((yyvsp[(2) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(3) - (6)].val));
8592  nd_set_line((yyval.val), (yyvsp[(4) - (6)].num));
8593 #endif
8594  (yyval.val) = dispatch3(class, (yyvsp[(2) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val));
8595 
8596  local_pop();
8597  }
8598  break;
8599 
8600  case 327:
8601 
8602 /* Line 1806 of yacc.c */
8603 #line 2941 "ripper.y"
8604  {
8605  (yyval.num) = (in_def << 1) | in_single;
8606  in_def = 0;
8607  in_single = 0;
8608  local_push(0);
8609  }
8610  break;
8611 
8612  case 328:
8613 
8614 /* Line 1806 of yacc.c */
8615 #line 2950 "ripper.y"
8616  {
8617 #if 0
8618  (yyval.val) = NEW_SCLASS((yyvsp[(3) - (7)].val), (yyvsp[(6) - (7)].val));
8619  fixpos((yyval.val), (yyvsp[(3) - (7)].val));
8620 #endif
8621  (yyval.val) = dispatch2(sclass, (yyvsp[(3) - (7)].val), (yyvsp[(6) - (7)].val));
8622 
8623  local_pop();
8624  in_def = ((yyvsp[(4) - (7)].num) >> 1) & 1;
8625  in_single = (yyvsp[(4) - (7)].num) & 1;
8626  }
8627  break;
8628 
8629  case 329:
8630 
8631 /* Line 1806 of yacc.c */
8632 #line 2962 "ripper.y"
8633  {
8634  if (in_def || in_single)
8635  yyerror("module definition in method body");
8636  local_push(0);
8637 #if 0
8638  (yyval.num) = ruby_sourceline;
8639 #endif
8640 
8641  }
8642  break;
8643 
8644  case 330:
8645 
8646 /* Line 1806 of yacc.c */
8647 #line 2973 "ripper.y"
8648  {
8649 #if 0
8650  (yyval.val) = NEW_MODULE((yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val));
8651  nd_set_line((yyval.val), (yyvsp[(3) - (5)].num));
8652 #endif
8653  (yyval.val) = dispatch2(module, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val));
8654 
8655  local_pop();
8656  }
8657  break;
8658 
8659  case 331:
8660 
8661 /* Line 1806 of yacc.c */
8662 #line 2983 "ripper.y"
8663  {
8664  local_push(0);
8665  (yyval.id) = current_arg;
8666  current_arg = 0;
8667  }
8668  break;
8669 
8670  case 332:
8671 
8672 /* Line 1806 of yacc.c */
8673 #line 2988 "ripper.y"
8674  {
8675  (yyval.num) = in_def;
8676  in_def = 1;
8677  }
8678  break;
8679 
8680  case 333:
8681 
8682 /* Line 1806 of yacc.c */
8683 #line 2995 "ripper.y"
8684  {
8685 #if 0
8686  NODE *body = remove_begin((yyvsp[(6) - (7)].val));
8687  reduce_nodes(&body);
8688  (yyval.val) = NEW_DEFN((yyvsp[(2) - (7)].val), (yyvsp[(5) - (7)].val), body, METHOD_VISI_PRIVATE);
8689  nd_set_line((yyval.val), (yyvsp[(1) - (7)].num));
8690 #endif
8691  (yyval.val) = dispatch3(def, (yyvsp[(2) - (7)].val), (yyvsp[(5) - (7)].val), (yyvsp[(6) - (7)].val));
8692 
8693  local_pop();
8694  in_def = (yyvsp[(4) - (7)].num) & 1;
8695  current_arg = (yyvsp[(3) - (7)].id);
8696  }
8697  break;
8698 
8699  case 334:
8700 
8701 /* Line 1806 of yacc.c */
8702 #line 3008 "ripper.y"
8703  {SET_LEX_STATE(EXPR_FNAME);}
8704  break;
8705 
8706  case 335:
8707 
8708 /* Line 1806 of yacc.c */
8709 #line 3009 "ripper.y"
8710  {
8711  (yyvsp[(4) - (5)].num) = in_single;
8712  in_single = 1;
8713  SET_LEX_STATE(EXPR_ENDFN|EXPR_LABEL); /* force for args */
8714  local_push(0);
8715  (yyval.id) = current_arg;
8716  current_arg = 0;
8717  }
8718  break;
8719 
8720  case 336:
8721 
8722 /* Line 1806 of yacc.c */
8723 #line 3020 "ripper.y"
8724  {
8725 #if 0
8726  NODE *body = remove_begin((yyvsp[(8) - (9)].val));
8727  reduce_nodes(&body);
8728  (yyval.val) = NEW_DEFS((yyvsp[(2) - (9)].val), (yyvsp[(5) - (9)].val), (yyvsp[(7) - (9)].val), body);
8729  nd_set_line((yyval.val), (yyvsp[(1) - (9)].num));
8730 #endif
8731  (yyval.val) = dispatch5(defs, (yyvsp[(2) - (9)].val), (yyvsp[(3) - (9)].val), (yyvsp[(5) - (9)].val), (yyvsp[(7) - (9)].val), (yyvsp[(8) - (9)].val));
8732 
8733  local_pop();
8734  in_single = (yyvsp[(4) - (9)].num) & 1;
8735  current_arg = (yyvsp[(6) - (9)].id);
8736  }
8737  break;
8738 
8739  case 337:
8740 
8741 /* Line 1806 of yacc.c */
8742 #line 3034 "ripper.y"
8743  {
8744 #if 0
8745  (yyval.val) = NEW_BREAK(0);
8746 #endif
8747  (yyval.val) = dispatch1(break, arg_new());
8748 
8749  }
8750  break;
8751 
8752  case 338:
8753 
8754 /* Line 1806 of yacc.c */
8755 #line 3042 "ripper.y"
8756  {
8757 #if 0
8758  (yyval.val) = NEW_NEXT(0);
8759 #endif
8760  (yyval.val) = dispatch1(next, arg_new());
8761 
8762  }
8763  break;
8764 
8765  case 339:
8766 
8767 /* Line 1806 of yacc.c */
8768 #line 3050 "ripper.y"
8769  {
8770 #if 0
8771  (yyval.val) = NEW_REDO();
8772 #endif
8773  (yyval.val) = dispatch0(redo);
8774 
8775  }
8776  break;
8777 
8778  case 340:
8779 
8780 /* Line 1806 of yacc.c */
8781 #line 3058 "ripper.y"
8782  {
8783 #if 0
8784  (yyval.val) = NEW_RETRY();
8785 #endif
8786  (yyval.val) = dispatch0(retry);
8787 
8788  }
8789  break;
8790 
8791  case 341:
8792 
8793 /* Line 1806 of yacc.c */
8794 #line 3068 "ripper.y"
8795  {
8796 #if 0
8797  value_expr((yyvsp[(1) - (1)].val));
8798  (yyval.val) = (yyvsp[(1) - (1)].val);
8799  if (!(yyval.val)) (yyval.val) = NEW_NIL();
8800 #endif
8801  (yyval.val) = (yyvsp[(1) - (1)].val);
8802 
8803  }
8804  break;
8805 
8806  case 342:
8807 
8808 /* Line 1806 of yacc.c */
8809 #line 3080 "ripper.y"
8810  {
8811  token_info_push("begin");
8812  }
8813  break;
8814 
8815  case 343:
8816 
8817 /* Line 1806 of yacc.c */
8818 #line 3086 "ripper.y"
8819  {
8820  token_info_push("if");
8821  }
8822  break;
8823 
8824  case 344:
8825 
8826 /* Line 1806 of yacc.c */
8827 #line 3092 "ripper.y"
8828  {
8829  token_info_push("unless");
8830  }
8831  break;
8832 
8833  case 345:
8834 
8835 /* Line 1806 of yacc.c */
8836 #line 3098 "ripper.y"
8837  {
8838  token_info_push("while");
8839  }
8840  break;
8841 
8842  case 346:
8843 
8844 /* Line 1806 of yacc.c */
8845 #line 3104 "ripper.y"
8846  {
8847  token_info_push("until");
8848  }
8849  break;
8850 
8851  case 347:
8852 
8853 /* Line 1806 of yacc.c */
8854 #line 3110 "ripper.y"
8855  {
8856  token_info_push("case");
8857  }
8858  break;
8859 
8860  case 348:
8861 
8862 /* Line 1806 of yacc.c */
8863 #line 3116 "ripper.y"
8864  {
8865  token_info_push("for");
8866  }
8867  break;
8868 
8869  case 349:
8870 
8871 /* Line 1806 of yacc.c */
8872 #line 3122 "ripper.y"
8873  {
8874  token_info_push("class");
8875  }
8876  break;
8877 
8878  case 350:
8879 
8880 /* Line 1806 of yacc.c */
8881 #line 3128 "ripper.y"
8882  {
8883  token_info_push("module");
8884  }
8885  break;
8886 
8887  case 351:
8888 
8889 /* Line 1806 of yacc.c */
8890 #line 3134 "ripper.y"
8891  {
8892  token_info_push("def");
8893 #if 0
8894  (yyval.num) = ruby_sourceline;
8895 #endif
8896 
8897  }
8898  break;
8899 
8900  case 352:
8901 
8902 /* Line 1806 of yacc.c */
8903 #line 3144 "ripper.y"
8904  {
8905  token_info_pop("end");
8906  }
8907  break;
8908 
8909  case 353:
8910 
8911 /* Line 1806 of yacc.c */
8912 #line 3152 "ripper.y"
8913  { (yyval.val) = Qnil; }
8914  break;
8915 
8916  case 355:
8917 
8918 /* Line 1806 of yacc.c */
8919 #line 3158 "ripper.y"
8920  { (yyval.val) = (yyvsp[(2) - (2)].val); }
8921  break;
8922 
8923  case 356:
8924 
8925 /* Line 1806 of yacc.c */
8926 #line 3165 "ripper.y"
8927  { (yyval.val) = Qnil; }
8928  break;
8929 
8930  case 359:
8931 
8932 /* Line 1806 of yacc.c */
8933 #line 3174 "ripper.y"
8934  {
8935 #if 0
8936  (yyval.val) = new_if((yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
8937  fixpos((yyval.val), (yyvsp[(2) - (5)].val));
8938 #endif
8939  (yyval.val) = dispatch3(elsif, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val), escape_Qundef((yyvsp[(5) - (5)].val)));
8940 
8941  }
8942  break;
8943 
8944  case 361:
8945 
8946 /* Line 1806 of yacc.c */
8947 #line 3186 "ripper.y"
8948  {
8949 #if 0
8950  (yyval.val) = (yyvsp[(2) - (2)].val);
8951 #endif
8952  (yyval.val) = dispatch1(else, (yyvsp[(2) - (2)].val));
8953 
8954  }
8955  break;
8956 
8957  case 364:
8958 
8959 /* Line 1806 of yacc.c */
8960 #line 3200 "ripper.y"
8961  {
8962  (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
8963 #if 0
8964 #endif
8965  (yyval.val) = dispatch1(mlhs_paren, (yyval.val));
8966 
8967  }
8968  break;
8969 
8970  case 365:
8971 
8972 /* Line 1806 of yacc.c */
8973 #line 3208 "ripper.y"
8974  {
8975 #if 0
8976  (yyval.val) = (yyvsp[(2) - (3)].val);
8977 #endif
8978  (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val));
8979 
8980  }
8981  break;
8982 
8983  case 366:
8984 
8985 /* Line 1806 of yacc.c */
8986 #line 3218 "ripper.y"
8987  {
8988 #if 0
8989  (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val));
8990 #endif
8991  (yyval.val) = mlhs_add(mlhs_new(), (yyvsp[(1) - (1)].val));
8992 
8993  }
8994  break;
8995 
8996  case 367:
8997 
8998 /* Line 1806 of yacc.c */
8999 #line 3226 "ripper.y"
9000  {
9001 #if 0
9002  (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
9003 #endif
9004  (yyval.val) = mlhs_add((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
9005 
9006  }
9007  break;
9008 
9009  case 368:
9010 
9011 /* Line 1806 of yacc.c */
9012 #line 3236 "ripper.y"
9013  {
9014 #if 0
9015  (yyval.val) = NEW_MASGN((yyvsp[(1) - (1)].val), 0);
9016 #endif
9017  (yyval.val) = (yyvsp[(1) - (1)].val);
9018 
9019  }
9020  break;
9021 
9022  case 369:
9023 
9024 /* Line 1806 of yacc.c */
9025 #line 3244 "ripper.y"
9026  {
9027  (yyval.val) = assignable((yyvsp[(4) - (4)].val), 0);
9028 #if 0
9029  (yyval.val) = NEW_MASGN((yyvsp[(1) - (4)].val), (yyval.val));
9030 #endif
9031  (yyval.val) = mlhs_add_star((yyvsp[(1) - (4)].val), (yyval.val));
9032 
9033  }
9034  break;
9035 
9036  case 370:
9037 
9038 /* Line 1806 of yacc.c */
9039 #line 3253 "ripper.y"
9040  {
9041  (yyval.val) = assignable((yyvsp[(4) - (6)].val), 0);
9042 #if 0
9043  (yyval.val) = NEW_MASGN((yyvsp[(1) - (6)].val), NEW_POSTARG((yyval.val), (yyvsp[(6) - (6)].val)));
9044 #endif
9045  (yyval.val) = mlhs_add_star((yyvsp[(1) - (6)].val), (yyval.val));
9046 
9047  }
9048  break;
9049 
9050  case 371:
9051 
9052 /* Line 1806 of yacc.c */
9053 #line 3262 "ripper.y"
9054  {
9055 #if 0
9056  (yyval.val) = NEW_MASGN((yyvsp[(1) - (3)].val), -1);
9057 #endif
9058  (yyval.val) = mlhs_add_star((yyvsp[(1) - (3)].val), Qnil);
9059 
9060  }
9061  break;
9062 
9063  case 372:
9064 
9065 /* Line 1806 of yacc.c */
9066 #line 3270 "ripper.y"
9067  {
9068 #if 0
9069  (yyval.val) = NEW_MASGN((yyvsp[(1) - (5)].val), NEW_POSTARG(-1, (yyvsp[(5) - (5)].val)));
9070 #endif
9071  (yyval.val) = mlhs_add_star((yyvsp[(1) - (5)].val), (yyvsp[(5) - (5)].val));
9072 
9073  }
9074  break;
9075 
9076  case 373:
9077 
9078 /* Line 1806 of yacc.c */
9079 #line 3278 "ripper.y"
9080  {
9081  (yyval.val) = assignable((yyvsp[(2) - (2)].val), 0);
9082 #if 0
9083  (yyval.val) = NEW_MASGN(0, (yyval.val));
9084 #endif
9085  (yyval.val) = mlhs_add_star(mlhs_new(), (yyval.val));
9086 
9087  }
9088  break;
9089 
9090  case 374:
9091 
9092 /* Line 1806 of yacc.c */
9093 #line 3287 "ripper.y"
9094  {
9095  (yyval.val) = assignable((yyvsp[(2) - (4)].val), 0);
9096 #if 0
9097  (yyval.val) = NEW_MASGN(0, NEW_POSTARG((yyval.val), (yyvsp[(4) - (4)].val)));
9098 #endif
9099  #if 0
9100  TODO: Check me
9101  #endif
9102  (yyval.val) = mlhs_add_star((yyval.val), (yyvsp[(4) - (4)].val));
9103 
9104  }
9105  break;
9106 
9107  case 375:
9108 
9109 /* Line 1806 of yacc.c */
9110 #line 3299 "ripper.y"
9111  {
9112 #if 0
9113  (yyval.val) = NEW_MASGN(0, -1);
9114 #endif
9115  (yyval.val) = mlhs_add_star(mlhs_new(), Qnil);
9116 
9117  }
9118  break;
9119 
9120  case 376:
9121 
9122 /* Line 1806 of yacc.c */
9123 #line 3307 "ripper.y"
9124  {
9125 #if 0
9126  (yyval.val) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].val)));
9127 #endif
9128  (yyval.val) = mlhs_add_star(mlhs_new(), Qnil);
9129 
9130  }
9131  break;
9132 
9133  case 377:
9134 
9135 /* Line 1806 of yacc.c */
9136 #line 3318 "ripper.y"
9137  {
9138  (yyval.val) = new_args_tail((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
9139  }
9140  break;
9141 
9142  case 378:
9143 
9144 /* Line 1806 of yacc.c */
9145 #line 3322 "ripper.y"
9146  {
9147  (yyval.val) = new_args_tail((yyvsp[(1) - (2)].val), Qnone, (yyvsp[(2) - (2)].val));
9148  }
9149  break;
9150 
9151  case 379:
9152 
9153 /* Line 1806 of yacc.c */
9154 #line 3326 "ripper.y"
9155  {
9156  (yyval.val) = new_args_tail(Qnone, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
9157  }
9158  break;
9159 
9160  case 380:
9161 
9162 /* Line 1806 of yacc.c */
9163 #line 3330 "ripper.y"
9164  {
9165  (yyval.val) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].val));
9166  }
9167  break;
9168 
9169  case 381:
9170 
9171 /* Line 1806 of yacc.c */
9172 #line 3336 "ripper.y"
9173  {
9174  (yyval.val) = (yyvsp[(2) - (2)].val);
9175  }
9176  break;
9177 
9178  case 382:
9179 
9180 /* Line 1806 of yacc.c */
9181 #line 3340 "ripper.y"
9182  {
9183  (yyval.val) = new_args_tail(Qnone, Qnone, Qnone);
9184  }
9185  break;
9186 
9187  case 383:
9188 
9189 /* Line 1806 of yacc.c */
9190 #line 3346 "ripper.y"
9191  {
9192  (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), Qnone, (yyvsp[(6) - (6)].val));
9193  }
9194  break;
9195 
9196  case 384:
9197 
9198 /* Line 1806 of yacc.c */
9199 #line 3350 "ripper.y"
9200  {
9201  (yyval.val) = new_args((yyvsp[(1) - (8)].val), (yyvsp[(3) - (8)].val), (yyvsp[(5) - (8)].val), (yyvsp[(7) - (8)].val), (yyvsp[(8) - (8)].val));
9202  }
9203  break;
9204 
9205  case 385:
9206 
9207 /* Line 1806 of yacc.c */
9208 #line 3354 "ripper.y"
9209  {
9210  (yyval.val) = new_args((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnone, Qnone, (yyvsp[(4) - (4)].val));
9211  }
9212  break;
9213 
9214  case 386:
9215 
9216 /* Line 1806 of yacc.c */
9217 #line 3358 "ripper.y"
9218  {
9219  (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), Qnone, (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
9220  }
9221  break;
9222 
9223  case 387:
9224 
9225 /* Line 1806 of yacc.c */
9226 #line 3362 "ripper.y"
9227  {
9228  (yyval.val) = new_args((yyvsp[(1) - (4)].val), Qnone, (yyvsp[(3) - (4)].val), Qnone, (yyvsp[(4) - (4)].val));
9229  }
9230  break;
9231 
9232  case 388:
9233 
9234 /* Line 1806 of yacc.c */
9235 #line 3366 "ripper.y"
9236  {
9237  (yyval.val) = new_args((yyvsp[(1) - (2)].val), Qnone, 1, Qnone, new_args_tail(Qnone, Qnone, Qnone));
9238 #if 0
9239 #endif
9240  dispatch1(excessed_comma, (yyval.val));
9241 
9242  }
9243  break;
9244 
9245  case 389:
9246 
9247 /* Line 1806 of yacc.c */
9248 #line 3374 "ripper.y"
9249  {
9250  (yyval.val) = new_args((yyvsp[(1) - (6)].val), Qnone, (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
9251  }
9252  break;
9253 
9254  case 390:
9255 
9256 /* Line 1806 of yacc.c */
9257 #line 3378 "ripper.y"
9258  {
9259  (yyval.val) = new_args((yyvsp[(1) - (2)].val), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].val));
9260  }
9261  break;
9262 
9263  case 391:
9264 
9265 /* Line 1806 of yacc.c */
9266 #line 3382 "ripper.y"
9267  {
9268  (yyval.val) = new_args(Qnone, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnone, (yyvsp[(4) - (4)].val));
9269  }
9270  break;
9271 
9272  case 392:
9273 
9274 /* Line 1806 of yacc.c */
9275 #line 3386 "ripper.y"
9276  {
9277  (yyval.val) = new_args(Qnone, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
9278  }
9279  break;
9280 
9281  case 393:
9282 
9283 /* Line 1806 of yacc.c */
9284 #line 3390 "ripper.y"
9285  {
9286  (yyval.val) = new_args(Qnone, (yyvsp[(1) - (2)].val), Qnone, Qnone, (yyvsp[(2) - (2)].val));
9287  }
9288  break;
9289 
9290  case 394:
9291 
9292 /* Line 1806 of yacc.c */
9293 #line 3394 "ripper.y"
9294  {
9295  (yyval.val) = new_args(Qnone, (yyvsp[(1) - (4)].val), Qnone, (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
9296  }
9297  break;
9298 
9299  case 395:
9300 
9301 /* Line 1806 of yacc.c */
9302 #line 3398 "ripper.y"
9303  {
9304  (yyval.val) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].val), Qnone, (yyvsp[(2) - (2)].val));
9305  }
9306  break;
9307 
9308  case 396:
9309 
9310 /* Line 1806 of yacc.c */
9311 #line 3402 "ripper.y"
9312  {
9313  (yyval.val) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
9314  }
9315  break;
9316 
9317  case 397:
9318 
9319 /* Line 1806 of yacc.c */
9320 #line 3406 "ripper.y"
9321  {
9322  (yyval.val) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].val));
9323  }
9324  break;
9325 
9326  case 399:
9327 
9328 /* Line 1806 of yacc.c */
9329 #line 3413 "ripper.y"
9330  {
9331  command_start = TRUE;
9332  }
9333  break;
9334 
9335  case 400:
9336 
9337 /* Line 1806 of yacc.c */
9338 #line 3419 "ripper.y"
9339  {
9340  current_arg = 0;
9341 #if 0
9342  (yyval.val) = 0;
9343 #endif
9344  (yyval.val) = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
9345  escape_Qundef((yyvsp[(2) - (3)].val)));
9346 
9347  }
9348  break;
9349 
9350  case 401:
9351 
9352 /* Line 1806 of yacc.c */
9353 #line 3429 "ripper.y"
9354  {
9355 #if 0
9356  (yyval.val) = 0;
9357 #endif
9358  (yyval.val) = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
9359  Qnil);
9360 
9361  }
9362  break;
9363 
9364  case 402:
9365 
9366 /* Line 1806 of yacc.c */
9367 #line 3438 "ripper.y"
9368  {
9369  current_arg = 0;
9370 #if 0
9371  (yyval.val) = (yyvsp[(2) - (4)].val);
9372 #endif
9373  (yyval.val) = blockvar_new(escape_Qundef((yyvsp[(2) - (4)].val)), escape_Qundef((yyvsp[(3) - (4)].val)));
9374 
9375  }
9376  break;
9377 
9378  case 403:
9379 
9380 /* Line 1806 of yacc.c */
9381 #line 3450 "ripper.y"
9382  {
9383  (yyval.val) = 0;
9384  }
9385  break;
9386 
9387  case 404:
9388 
9389 /* Line 1806 of yacc.c */
9390 #line 3454 "ripper.y"
9391  {
9392 #if 0
9393  (yyval.val) = 0;
9394 #endif
9395  (yyval.val) = (yyvsp[(3) - (4)].val);
9396 
9397  }
9398  break;
9399 
9400  case 405:
9401 
9402 /* Line 1806 of yacc.c */
9403 #line 3466 "ripper.y"
9404  {
9405  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
9406  }
9407  break;
9408 
9409  case 406:
9410 
9411 /* Line 1806 of yacc.c */
9412 #line 3473 "ripper.y"
9413  {
9414  rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
9415  }
9416  break;
9417 
9418  case 407:
9419 
9420 /* Line 1806 of yacc.c */
9421 #line 3480 "ripper.y"
9422  {
9423  new_bv(get_id((yyvsp[(1) - (1)].val)));
9424 #if 0
9425 #endif
9426  (yyval.val) = get_value((yyvsp[(1) - (1)].val));
9427 
9428  }
9429  break;
9430 
9431  case 408:
9432 
9433 /* Line 1806 of yacc.c */
9434 #line 3488 "ripper.y"
9435  {
9436  (yyval.val) = 0;
9437  }
9438  break;
9439 
9440  case 409:
9441 
9442 /* Line 1806 of yacc.c */
9443 #line 3493 "ripper.y"
9444  {
9445  (yyval.vars) = dyna_push();
9446  }
9447  break;
9448 
9449  case 410:
9450 
9451 /* Line 1806 of yacc.c */
9452 #line 3496 "ripper.y"
9453  {
9454  (yyval.num) = lpar_beg;
9455  lpar_beg = ++paren_nest;
9456  }
9457  break;
9458 
9459  case 411:
9460 
9461 /* Line 1806 of yacc.c */
9462 #line 3501 "ripper.y"
9463  {
9464  (yyval.num) = ruby_sourceline;
9465  }
9466  break;
9467 
9468  case 412:
9469 
9470 /* Line 1806 of yacc.c */
9471 #line 3504 "ripper.y"
9472  {
9473  (yyval.val) = cmdarg_stack;
9474  CMDARG_SET(0);
9475  }
9476  break;
9477 
9478  case 413:
9479 
9480 /* Line 1806 of yacc.c */
9481 #line 3509 "ripper.y"
9482  {
9483  lpar_beg = (yyvsp[(2) - (6)].num);
9484  CMDARG_SET((yyvsp[(5) - (6)].val));
9485  CMDARG_LEXPOP();
9486 #if 0
9487  (yyval.val) = NEW_LAMBDA((yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val));
9488  nd_set_line((yyval.val), (yyvsp[(4) - (6)].num));
9489 #endif
9490  (yyval.val) = dispatch2(lambda, (yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val));
9491 
9492  dyna_pop((yyvsp[(1) - (6)].vars));
9493  }
9494  break;
9495 
9496  case 414:
9497 
9498 /* Line 1806 of yacc.c */
9499 #line 3524 "ripper.y"
9500  {
9501 #if 0
9502  (yyval.val) = (yyvsp[(2) - (4)].val);
9503 #endif
9504  (yyval.val) = dispatch1(paren, (yyvsp[(2) - (4)].val));
9505 
9506  }
9507  break;
9508 
9509  case 415:
9510 
9511 /* Line 1806 of yacc.c */
9512 #line 3532 "ripper.y"
9513  {
9514  (yyval.val) = (yyvsp[(1) - (1)].val);
9515  }
9516  break;
9517 
9518  case 416:
9519 
9520 /* Line 1806 of yacc.c */
9521 #line 3538 "ripper.y"
9522  {
9523  token_info_pop("}");
9524  (yyval.val) = (yyvsp[(2) - (3)].val);
9525  }
9526  break;
9527 
9528  case 417:
9529 
9530 /* Line 1806 of yacc.c */
9531 #line 3543 "ripper.y"
9532  {
9533  (yyval.val) = (yyvsp[(2) - (3)].val);
9534  }
9535  break;
9536 
9537  case 418:
9538 
9539 /* Line 1806 of yacc.c */
9540 #line 3549 "ripper.y"
9541  {
9542 #if 0
9543  (yyval.num) = ruby_sourceline;
9544 #endif
9545  }
9546  break;
9547 
9548  case 419:
9549 
9550 /* Line 1806 of yacc.c */
9551 #line 3555 "ripper.y"
9552  {
9553  (yyval.val) = (yyvsp[(3) - (4)].val);
9554 #if 0
9555  nd_set_line((yyval.val), (yyvsp[(2) - (4)].num));
9556 #endif
9557  }
9558  break;
9559 
9560  case 420:
9561 
9562 /* Line 1806 of yacc.c */
9563 #line 3564 "ripper.y"
9564  {
9565 #if 0
9566  if (nd_type((yyvsp[(1) - (2)].val)) == NODE_YIELD) {
9567  compile_error(PARSER_ARG "block given to yield");
9568  }
9569  else {
9570  block_dup_check((yyvsp[(1) - (2)].val)->nd_args, (yyvsp[(2) - (2)].val));
9571  }
9572  (yyvsp[(2) - (2)].val)->nd_iter = (yyvsp[(1) - (2)].val);
9573  (yyval.val) = (yyvsp[(2) - (2)].val);
9574  fixpos((yyval.val), (yyvsp[(1) - (2)].val));
9575 #endif
9576  (yyval.val) = method_add_block((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
9577 
9578  }
9579  break;
9580 
9581  case 421:
9582 
9583 /* Line 1806 of yacc.c */
9584 #line 3580 "ripper.y"
9585  {
9586 #if 0
9587  (yyval.val) = NEW_QCALL((yyvsp[(2) - (4)].val), (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
9588 #endif
9589  (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), (yyvsp[(2) - (4)].val), (yyvsp[(3) - (4)].val));
9590  (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val));
9591 
9592  }
9593  break;
9594 
9595  case 422:
9596 
9597 /* Line 1806 of yacc.c */
9598 #line 3589 "ripper.y"
9599  {
9600 #if 0
9601  block_dup_check((yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
9602  (yyvsp[(5) - (5)].val)->nd_iter = NEW_QCALL((yyvsp[(2) - (5)].val), (yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
9603  (yyval.val) = (yyvsp[(5) - (5)].val);
9604  fixpos((yyval.val), (yyvsp[(1) - (5)].val));
9605 #endif
9606  (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (5)].val), (yyvsp[(2) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
9607  (yyval.val) = method_add_block((yyval.val), (yyvsp[(5) - (5)].val));
9608 
9609  }
9610  break;
9611 
9612  case 423:
9613 
9614 /* Line 1806 of yacc.c */
9615 #line 3601 "ripper.y"
9616  {
9617 #if 0
9618  block_dup_check((yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
9619  (yyvsp[(5) - (5)].val)->nd_iter = NEW_QCALL((yyvsp[(2) - (5)].val), (yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
9620  (yyval.val) = (yyvsp[(5) - (5)].val);
9621  fixpos((yyval.val), (yyvsp[(1) - (5)].val));
9622 #endif
9623  (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (5)].val), (yyvsp[(2) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
9624  (yyval.val) = method_add_block((yyval.val), (yyvsp[(5) - (5)].val));
9625 
9626  }
9627  break;
9628 
9629  case 424:
9630 
9631 /* Line 1806 of yacc.c */
9632 #line 3615 "ripper.y"
9633  {
9634 #if 0
9635  (yyval.val) = (yyvsp[(1) - (2)].val);
9636  (yyval.val)->nd_args = (yyvsp[(2) - (2)].val);
9637 #endif
9638  (yyval.val) = method_arg(dispatch1(fcall, (yyvsp[(1) - (2)].val)), (yyvsp[(2) - (2)].val));
9639 
9640  }
9641  break;
9642 
9643  case 425:
9644 
9645 /* Line 1806 of yacc.c */
9646 #line 3624 "ripper.y"
9647  {
9648 #if 0
9649  (yyval.num) = ruby_sourceline;
9650 #endif
9651  }
9652  break;
9653 
9654  case 426:
9655 
9656 /* Line 1806 of yacc.c */
9657 #line 3630 "ripper.y"
9658  {
9659 #if 0
9660  (yyval.val) = NEW_QCALL((yyvsp[(2) - (5)].val), (yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(5) - (5)].val));
9661  nd_set_line((yyval.val), (yyvsp[(4) - (5)].num));
9662 #endif
9663  (yyval.val) = dispatch3(call, (yyvsp[(1) - (5)].val), (yyvsp[(2) - (5)].val), (yyvsp[(3) - (5)].val));
9664  (yyval.val) = method_optarg((yyval.val), (yyvsp[(5) - (5)].val));
9665 
9666  }
9667  break;
9668 
9669  case 427:
9670 
9671 /* Line 1806 of yacc.c */
9672 #line 3640 "ripper.y"
9673  {
9674 #if 0
9675  (yyval.num) = ruby_sourceline;
9676 #endif
9677  }
9678  break;
9679 
9680  case 428:
9681 
9682 /* Line 1806 of yacc.c */
9683 #line 3646 "ripper.y"
9684  {
9685 #if 0
9686  (yyval.val) = NEW_CALL((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(5) - (5)].val));
9687  nd_set_line((yyval.val), (yyvsp[(4) - (5)].num));
9688 #endif
9689  (yyval.val) = dispatch3(call, (yyvsp[(1) - (5)].val), ripper_id2sym(idCOLON2), (yyvsp[(3) - (5)].val));
9690  (yyval.val) = method_optarg((yyval.val), (yyvsp[(5) - (5)].val));
9691 
9692  }
9693  break;
9694 
9695  case 429:
9696 
9697 /* Line 1806 of yacc.c */
9698 #line 3656 "ripper.y"
9699  {
9700 #if 0
9701  (yyval.val) = NEW_CALL((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val), 0);
9702 #endif
9703  (yyval.val) = dispatch3(call, (yyvsp[(1) - (3)].val), ID2SYM(idCOLON2), (yyvsp[(3) - (3)].val));
9704 
9705  }
9706  break;
9707 
9708  case 430:
9709 
9710 /* Line 1806 of yacc.c */
9711 #line 3664 "ripper.y"
9712  {
9713 #if 0
9714  (yyval.num) = ruby_sourceline;
9715 #endif
9716  }
9717  break;
9718 
9719  case 431:
9720 
9721 /* Line 1806 of yacc.c */
9722 #line 3670 "ripper.y"
9723  {
9724 #if 0
9725  (yyval.val) = NEW_QCALL((yyvsp[(2) - (4)].val), (yyvsp[(1) - (4)].val), idCall, (yyvsp[(4) - (4)].val));
9726  nd_set_line((yyval.val), (yyvsp[(3) - (4)].num));
9727 #endif
9728  (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), (yyvsp[(2) - (4)].val), ID2SYM(idCall));
9729  (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val));
9730 
9731  }
9732  break;
9733 
9734  case 432:
9735 
9736 /* Line 1806 of yacc.c */
9737 #line 3680 "ripper.y"
9738  {
9739 #if 0
9740  (yyval.num) = ruby_sourceline;
9741 #endif
9742  }
9743  break;
9744 
9745  case 433:
9746 
9747 /* Line 1806 of yacc.c */
9748 #line 3686 "ripper.y"
9749  {
9750 #if 0
9751  (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), idCall, (yyvsp[(4) - (4)].val));
9752  nd_set_line((yyval.val), (yyvsp[(3) - (4)].num));
9753 #endif
9754  (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ID2SYM(idCOLON2),
9755  ID2SYM(idCall));
9756  (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val));
9757 
9758  }
9759  break;
9760 
9761  case 434:
9762 
9763 /* Line 1806 of yacc.c */
9764 #line 3697 "ripper.y"
9765  {
9766 #if 0
9767  (yyval.val) = NEW_SUPER((yyvsp[(2) - (2)].val));
9768 #endif
9769  (yyval.val) = dispatch1(super, (yyvsp[(2) - (2)].val));
9770 
9771  }
9772  break;
9773 
9774  case 435:
9775 
9776 /* Line 1806 of yacc.c */
9777 #line 3705 "ripper.y"
9778  {
9779 #if 0
9780  (yyval.val) = NEW_ZSUPER();
9781 #endif
9782  (yyval.val) = dispatch0(zsuper);
9783 
9784  }
9785  break;
9786 
9787  case 436:
9788 
9789 /* Line 1806 of yacc.c */
9790 #line 3713 "ripper.y"
9791  {
9792 #if 0
9793  if ((yyvsp[(1) - (4)].val) && nd_type((yyvsp[(1) - (4)].val)) == NODE_SELF)
9794  (yyval.val) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].val));
9795  else
9796  (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), tAREF, (yyvsp[(3) - (4)].val));
9797  fixpos((yyval.val), (yyvsp[(1) - (4)].val));
9798 #endif
9799  (yyval.val) = dispatch2(aref, (yyvsp[(1) - (4)].val), escape_Qundef((yyvsp[(3) - (4)].val)));
9800 
9801  }
9802  break;
9803 
9804  case 437:
9805 
9806 /* Line 1806 of yacc.c */
9807 #line 3727 "ripper.y"
9808  {
9809 #if 0
9810  (yyval.num) = ruby_sourceline;
9811 #endif
9812  }
9813  break;
9814 
9815  case 438:
9816 
9817 /* Line 1806 of yacc.c */
9818 #line 3733 "ripper.y"
9819  {
9820  (yyval.val) = (yyvsp[(3) - (4)].val);
9821 #if 0
9822  nd_set_line((yyval.val), (yyvsp[(2) - (4)].num));
9823 #endif
9824  }
9825  break;
9826 
9827  case 439:
9828 
9829 /* Line 1806 of yacc.c */
9830 #line 3740 "ripper.y"
9831  {
9832 #if 0
9833  (yyval.num) = ruby_sourceline;
9834 #endif
9835  }
9836  break;
9837 
9838  case 440:
9839 
9840 /* Line 1806 of yacc.c */
9841 #line 3746 "ripper.y"
9842  {
9843  (yyval.val) = (yyvsp[(3) - (4)].val);
9844 #if 0
9845  nd_set_line((yyval.val), (yyvsp[(2) - (4)].num));
9846 #endif
9847  }
9848  break;
9849 
9850  case 441:
9851 
9852 /* Line 1806 of yacc.c */
9853 #line 3754 "ripper.y"
9854  {(yyval.vars) = dyna_push();}
9855  break;
9856 
9857  case 442:
9858 
9859 /* Line 1806 of yacc.c */
9860 #line 3755 "ripper.y"
9861  {(yyval.val) = cmdarg_stack >> 1; CMDARG_SET(0);}
9862  break;
9863 
9864  case 443:
9865 
9866 /* Line 1806 of yacc.c */
9867 #line 3757 "ripper.y"
9868  {
9869  (yyval.val) = new_brace_body((yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
9870  dyna_pop((yyvsp[(1) - (4)].vars));
9871  CMDARG_SET((yyvsp[(2) - (4)].val));
9872  }
9873  break;
9874 
9875  case 444:
9876 
9877 /* Line 1806 of yacc.c */
9878 #line 3764 "ripper.y"
9879  {(yyval.vars) = dyna_push();}
9880  break;
9881 
9882  case 445:
9883 
9884 /* Line 1806 of yacc.c */
9885 #line 3765 "ripper.y"
9886  {(yyval.val) = cmdarg_stack; CMDARG_SET(0);}
9887  break;
9888 
9889  case 446:
9890 
9891 /* Line 1806 of yacc.c */
9892 #line 3767 "ripper.y"
9893  {
9894  (yyval.val) = new_do_body((yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
9895  dyna_pop((yyvsp[(1) - (4)].vars));
9896  CMDARG_SET((yyvsp[(2) - (4)].val));
9897  }
9898  break;
9899 
9900  case 447:
9901 
9902 /* Line 1806 of yacc.c */
9903 #line 3777 "ripper.y"
9904  {
9905 #if 0
9906  (yyval.val) = NEW_WHEN((yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
9907 #endif
9908  (yyval.val) = dispatch3(when, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val), escape_Qundef((yyvsp[(5) - (5)].val)));
9909 
9910  }
9911  break;
9912 
9913  case 450:
9914 
9915 /* Line 1806 of yacc.c */
9916 #line 3793 "ripper.y"
9917  {
9918 #if 0
9919  if ((yyvsp[(3) - (6)].val)) {
9920  (yyvsp[(3) - (6)].val) = node_assign((yyvsp[(3) - (6)].val), NEW_ERRINFO());
9921  (yyvsp[(5) - (6)].val) = block_append((yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val));
9922  }
9923  (yyval.val) = NEW_RESBODY((yyvsp[(2) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
9924  fixpos((yyval.val), (yyvsp[(2) - (6)].val)?(yyvsp[(2) - (6)].val):(yyvsp[(5) - (6)].val));
9925 #endif
9926  (yyval.val) = dispatch4(rescue,
9927  escape_Qundef((yyvsp[(2) - (6)].val)),
9928  escape_Qundef((yyvsp[(3) - (6)].val)),
9929  escape_Qundef((yyvsp[(5) - (6)].val)),
9930  escape_Qundef((yyvsp[(6) - (6)].val)));
9931 
9932  }
9933  break;
9934 
9935  case 452:
9936 
9937 /* Line 1806 of yacc.c */
9938 #line 3813 "ripper.y"
9939  {
9940 #if 0
9941  (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val));
9942 #endif
9943  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
9944 
9945  }
9946  break;
9947 
9948  case 453:
9949 
9950 /* Line 1806 of yacc.c */
9951 #line 3821 "ripper.y"
9952  {
9953 #if 0
9954  if (!((yyval.val) = splat_array((yyvsp[(1) - (1)].val)))) (yyval.val) = (yyvsp[(1) - (1)].val);
9955 #endif
9956  (yyval.val) = (yyvsp[(1) - (1)].val);
9957 
9958  }
9959  break;
9960 
9961  case 455:
9962 
9963 /* Line 1806 of yacc.c */
9964 #line 3832 "ripper.y"
9965  {
9966  (yyval.val) = (yyvsp[(2) - (2)].val);
9967  }
9968  break;
9969 
9970  case 457:
9971 
9972 /* Line 1806 of yacc.c */
9973 #line 3839 "ripper.y"
9974  {
9975 #if 0
9976  (yyval.val) = (yyvsp[(2) - (2)].val);
9977 #endif
9978  (yyval.val) = dispatch1(ensure, (yyvsp[(2) - (2)].val));
9979 
9980  }
9981  break;
9982 
9983  case 460:
9984 
9985 /* Line 1806 of yacc.c */
9986 #line 3851 "ripper.y"
9987  {
9988 #if 0
9989  (yyval.val) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].val)));
9990 #endif
9991  (yyval.val) = dispatch1(symbol_literal, (yyvsp[(1) - (1)].val));
9992 
9993  }
9994  break;
9995 
9996  case 462:
9997 
9998 /* Line 1806 of yacc.c */
9999 #line 3862 "ripper.y"
10000  {
10001 #if 0
10002  NODE *node = (yyvsp[(1) - (1)].val);
10003  if (!node) {
10004  node = NEW_STR(STR_NEW0());
10005  }
10006  else {
10007  node = evstr2dstr(node);
10008  }
10009  (yyval.val) = node;
10010 #endif
10011  (yyval.val) = (yyvsp[(1) - (1)].val);
10012 
10013  }
10014  break;
10015 
10016  case 465:
10017 
10018 /* Line 1806 of yacc.c */
10019 #line 3881 "ripper.y"
10020  {
10021 #if 0
10022  (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
10023 #endif
10024  (yyval.val) = dispatch2(string_concat, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
10025 
10026  }
10027  break;
10028 
10029  case 466:
10030 
10031 /* Line 1806 of yacc.c */
10032 #line 3891 "ripper.y"
10033  {
10034  (yyval.val) = new_string1(heredoc_dedent((yyvsp[(2) - (3)].val)));
10035  }
10036  break;
10037 
10038  case 467:
10039 
10040 /* Line 1806 of yacc.c */
10041 #line 3897 "ripper.y"
10042  {
10043  (yyval.val) = new_xstring(heredoc_dedent((yyvsp[(2) - (3)].val)));
10044  }
10045  break;
10046 
10047  case 468:
10048 
10049 /* Line 1806 of yacc.c */
10050 #line 3903 "ripper.y"
10051  {
10052  (yyval.val) = new_regexp((yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
10053  }
10054  break;
10055 
10056  case 469:
10057 
10058 /* Line 1806 of yacc.c */
10059 #line 3909 "ripper.y"
10060  {
10061 #if 0
10062  (yyval.val) = NEW_ZARRAY();
10063 #endif
10064  (yyval.val) = dispatch0(words_new);
10065  (yyval.val) = dispatch1(array, (yyval.val));
10066 
10067  }
10068  break;
10069 
10070  case 470:
10071 
10072 /* Line 1806 of yacc.c */
10073 #line 3918 "ripper.y"
10074  {
10075 #if 0
10076  (yyval.val) = (yyvsp[(2) - (3)].val);
10077 #endif
10078  (yyval.val) = dispatch1(array, (yyvsp[(2) - (3)].val));
10079 
10080  }
10081  break;
10082 
10083  case 471:
10084 
10085 /* Line 1806 of yacc.c */
10086 #line 3928 "ripper.y"
10087  {
10088 #if 0
10089  (yyval.val) = 0;
10090 #endif
10091  (yyval.val) = dispatch0(words_new);
10092 
10093  }
10094  break;
10095 
10096  case 472:
10097 
10098 /* Line 1806 of yacc.c */
10099 #line 3936 "ripper.y"
10100  {
10101 #if 0
10102  (yyval.val) = list_append((yyvsp[(1) - (3)].val), evstr2dstr((yyvsp[(2) - (3)].val)));
10103 #endif
10104  (yyval.val) = dispatch2(words_add, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
10105 
10106  }
10107  break;
10108 
10109  case 473:
10110 
10111 /* Line 1806 of yacc.c */
10112 #line 3948 "ripper.y"
10113  {
10114  (yyval.val) = dispatch0(word_new);
10115  (yyval.val) = dispatch2(word_add, (yyval.val), (yyvsp[(1) - (1)].val));
10116  }
10117  break;
10118 
10119  case 474:
10120 
10121 /* Line 1806 of yacc.c */
10122 #line 3954 "ripper.y"
10123  {
10124 #if 0
10125  (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
10126 #endif
10127  (yyval.val) = dispatch2(word_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
10128 
10129  }
10130  break;
10131 
10132  case 475:
10133 
10134 /* Line 1806 of yacc.c */
10135 #line 3964 "ripper.y"
10136  {
10137 #if 0
10138  (yyval.val) = NEW_ZARRAY();
10139 #endif
10140  (yyval.val) = dispatch0(symbols_new);
10141  (yyval.val) = dispatch1(array, (yyval.val));
10142 
10143  }
10144  break;
10145 
10146  case 476:
10147 
10148 /* Line 1806 of yacc.c */
10149 #line 3973 "ripper.y"
10150  {
10151 #if 0
10152  (yyval.val) = (yyvsp[(2) - (3)].val);
10153 #endif
10154  (yyval.val) = dispatch1(array, (yyvsp[(2) - (3)].val));
10155 
10156  }
10157  break;
10158 
10159  case 477:
10160 
10161 /* Line 1806 of yacc.c */
10162 #line 3983 "ripper.y"
10163  {
10164 #if 0
10165  (yyval.val) = 0;
10166 #endif
10167  (yyval.val) = dispatch0(symbols_new);
10168 
10169  }
10170  break;
10171 
10172  case 478:
10173 
10174 /* Line 1806 of yacc.c */
10175 #line 3991 "ripper.y"
10176  {
10177 #if 0
10178  (yyvsp[(2) - (3)].val) = evstr2dstr((yyvsp[(2) - (3)].val));
10179  if (nd_type((yyvsp[(2) - (3)].val)) == NODE_DSTR) {
10180  nd_set_type((yyvsp[(2) - (3)].val), NODE_DSYM);
10181  }
10182  else {
10183  nd_set_type((yyvsp[(2) - (3)].val), NODE_LIT);
10184  (yyvsp[(2) - (3)].val)->nd_lit = rb_str_intern((yyvsp[(2) - (3)].val)->nd_lit);
10185  }
10186  (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
10187 #endif
10188  (yyval.val) = dispatch2(symbols_add, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
10189 
10190  }
10191  break;
10192 
10193  case 479:
10194 
10195 /* Line 1806 of yacc.c */
10196 #line 4009 "ripper.y"
10197  {
10198 #if 0
10199  (yyval.val) = NEW_ZARRAY();
10200 #endif
10201  (yyval.val) = dispatch0(qwords_new);
10202  (yyval.val) = dispatch1(array, (yyval.val));
10203 
10204  }
10205  break;
10206 
10207  case 480:
10208 
10209 /* Line 1806 of yacc.c */
10210 #line 4018 "ripper.y"
10211  {
10212 #if 0
10213  (yyval.val) = (yyvsp[(2) - (3)].val);
10214 #endif
10215  (yyval.val) = dispatch1(array, (yyvsp[(2) - (3)].val));
10216 
10217  }
10218  break;
10219 
10220  case 481:
10221 
10222 /* Line 1806 of yacc.c */
10223 #line 4028 "ripper.y"
10224  {
10225 #if 0
10226  (yyval.val) = NEW_ZARRAY();
10227 #endif
10228  (yyval.val) = dispatch0(qsymbols_new);
10229  (yyval.val) = dispatch1(array, (yyval.val));
10230 
10231  }
10232  break;
10233 
10234  case 482:
10235 
10236 /* Line 1806 of yacc.c */
10237 #line 4037 "ripper.y"
10238  {
10239 #if 0
10240  (yyval.val) = (yyvsp[(2) - (3)].val);
10241 #endif
10242  (yyval.val) = dispatch1(array, (yyvsp[(2) - (3)].val));
10243 
10244  }
10245  break;
10246 
10247  case 483:
10248 
10249 /* Line 1806 of yacc.c */
10250 #line 4047 "ripper.y"
10251  {
10252 #if 0
10253  (yyval.val) = 0;
10254 #endif
10255  (yyval.val) = dispatch0(qwords_new);
10256 
10257  }
10258  break;
10259 
10260  case 484:
10261 
10262 /* Line 1806 of yacc.c */
10263 #line 4055 "ripper.y"
10264  {
10265 #if 0
10266  (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
10267 #endif
10268  (yyval.val) = dispatch2(qwords_add, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
10269 
10270  }
10271  break;
10272 
10273  case 485:
10274 
10275 /* Line 1806 of yacc.c */
10276 #line 4065 "ripper.y"
10277  {
10278 #if 0
10279  (yyval.val) = 0;
10280 #endif
10281  (yyval.val) = dispatch0(qsymbols_new);
10282 
10283  }
10284  break;
10285 
10286  case 486:
10287 
10288 /* Line 1806 of yacc.c */
10289 #line 4073 "ripper.y"
10290  {
10291 #if 0
10292  VALUE lit;
10293  lit = (yyvsp[(2) - (3)].val)->nd_lit;
10294  (yyvsp[(2) - (3)].val)->nd_lit = ID2SYM(rb_intern_str(lit));
10295  nd_set_type((yyvsp[(2) - (3)].val), NODE_LIT);
10296  (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
10297 #endif
10298  (yyval.val) = dispatch2(qsymbols_add, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
10299 
10300  }
10301  break;
10302 
10303  case 487:
10304 
10305 /* Line 1806 of yacc.c */
10306 #line 4087 "ripper.y"
10307  {
10308 #if 0
10309  (yyval.val) = 0;
10310 #endif
10311  (yyval.val) = dispatch0(string_content);
10312 
10313  }
10314  break;
10315 
10316  case 488:
10317 
10318 /* Line 1806 of yacc.c */
10319 #line 4095 "ripper.y"
10320  {
10321 #if 0
10322  (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
10323 #endif
10324  (yyval.val) = dispatch2(string_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
10325 
10326  }
10327  break;
10328 
10329  case 489:
10330 
10331 /* Line 1806 of yacc.c */
10332 #line 4105 "ripper.y"
10333  {
10334 #if 0
10335  (yyval.val) = 0;
10336 #endif
10337  (yyval.val) = dispatch0(xstring_new);
10338 
10339  }
10340  break;
10341 
10342  case 490:
10343 
10344 /* Line 1806 of yacc.c */
10345 #line 4113 "ripper.y"
10346  {
10347 #if 0
10348  (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
10349 #endif
10350  (yyval.val) = dispatch2(xstring_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
10351 
10352  }
10353  break;
10354 
10355  case 491:
10356 
10357 /* Line 1806 of yacc.c */
10358 #line 4123 "ripper.y"
10359  {
10360 #if 0
10361  (yyval.val) = 0;
10362 #endif
10363  (yyval.val) = ripper_new_yylval(0, dispatch0(regexp_new), 0);
10364 
10365  }
10366  break;
10367 
10368  case 492:
10369 
10370 /* Line 1806 of yacc.c */
10371 #line 4131 "ripper.y"
10372  {
10373 #if 0
10374  NODE *head = (yyvsp[(1) - (2)].val), *tail = (yyvsp[(2) - (2)].val);
10375  if (!head) {
10376  (yyval.val) = tail;
10377  }
10378  else if (!tail) {
10379  (yyval.val) = head;
10380  }
10381  else {
10382  switch (nd_type(head)) {
10383  case NODE_STR:
10384  nd_set_type(head, NODE_DSTR);
10385  break;
10386  case NODE_DSTR:
10387  break;
10388  default:
10389  head = list_append(NEW_DSTR(Qnil), head);
10390  break;
10391  }
10392  (yyval.val) = list_append(head, tail);
10393  }
10394 #endif
10395  VALUE s1 = 1, s2 = 0, n1 = (yyvsp[(1) - (2)].val), n2 = (yyvsp[(2) - (2)].val);
10396  if (ripper_is_node_yylval(n1)) {
10397  s1 = RNODE(n1)->nd_cval;
10398  n1 = RNODE(n1)->nd_rval;
10399  }
10400  if (ripper_is_node_yylval(n2)) {
10401  s2 = RNODE(n2)->nd_cval;
10402  n2 = RNODE(n2)->nd_rval;
10403  }
10404  (yyval.val) = dispatch2(regexp_add, n1, n2);
10405  if (!s1 && s2) {
10406  (yyval.val) = ripper_new_yylval(0, (yyval.val), s2);
10407  }
10408 
10409  }
10410  break;
10411 
10412  case 494:
10413 
10414 /* Line 1806 of yacc.c */
10415 #line 4173 "ripper.y"
10416  {
10417  (yyval.node) = lex_strterm;
10418  lex_strterm = 0;
10419  SET_LEX_STATE(EXPR_BEG);
10420  }
10421  break;
10422 
10423  case 495:
10424 
10425 /* Line 1806 of yacc.c */
10426 #line 4179 "ripper.y"
10427  {
10428  lex_strterm = (yyvsp[(2) - (3)].node);
10429 #if 0
10430  (yyval.val) = NEW_EVSTR((yyvsp[(3) - (3)].val));
10431 #endif
10432  (yyval.val) = dispatch1(string_dvar, (yyvsp[(3) - (3)].val));
10433 
10434  }
10435  break;
10436 
10437  case 496:
10438 
10439 /* Line 1806 of yacc.c */
10440 #line 4188 "ripper.y"
10441  {
10442  (yyvsp[(1) - (1)].val) = cond_stack;
10443  (yyval.val) = cmdarg_stack;
10444  COND_SET(0);
10445  CMDARG_SET(0);
10446  }
10447  break;
10448 
10449  case 497:
10450 
10451 /* Line 1806 of yacc.c */
10452 #line 4194 "ripper.y"
10453  {
10454  (yyval.node) = lex_strterm;
10455  lex_strterm = 0;
10456  }
10457  break;
10458 
10459  case 498:
10460 
10461 /* Line 1806 of yacc.c */
10462 #line 4198 "ripper.y"
10463  {
10464  (yyval.num) = lex_state;
10465  SET_LEX_STATE(EXPR_BEG);
10466  }
10467  break;
10468 
10469  case 499:
10470 
10471 /* Line 1806 of yacc.c */
10472 #line 4202 "ripper.y"
10473  {
10474  (yyval.num) = brace_nest;
10475  brace_nest = 0;
10476  }
10477  break;
10478 
10479  case 500:
10480 
10481 /* Line 1806 of yacc.c */
10482 #line 4206 "ripper.y"
10483  {
10484  (yyval.num) = heredoc_indent;
10485  heredoc_indent = 0;
10486  }
10487  break;
10488 
10489  case 501:
10490 
10491 /* Line 1806 of yacc.c */
10492 #line 4211 "ripper.y"
10493  {
10494  COND_SET((yyvsp[(1) - (8)].val));
10495  CMDARG_SET((yyvsp[(2) - (8)].val));
10496  lex_strterm = (yyvsp[(3) - (8)].node);
10497  SET_LEX_STATE((yyvsp[(4) - (8)].num));
10498  brace_nest = (yyvsp[(5) - (8)].num);
10499  heredoc_indent = (yyvsp[(6) - (8)].num);
10500  heredoc_line_indent = -1;
10501 #if 0
10502  if ((yyvsp[(7) - (8)].val)) (yyvsp[(7) - (8)].val)->flags &= ~NODE_FL_NEWLINE;
10503  (yyval.val) = new_evstr((yyvsp[(7) - (8)].val));
10504 #endif
10505  (yyval.val) = dispatch1(string_embexpr, (yyvsp[(7) - (8)].val));
10506 
10507  }
10508  break;
10509 
10510  case 502:
10511 
10512 /* Line 1806 of yacc.c */
10513 #line 4229 "ripper.y"
10514  {
10515 #if 0
10516  (yyval.val) = NEW_GVAR((yyvsp[(1) - (1)].val));
10517 #endif
10518  (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val));
10519 
10520  }
10521  break;
10522 
10523  case 503:
10524 
10525 /* Line 1806 of yacc.c */
10526 #line 4237 "ripper.y"
10527  {
10528 #if 0
10529  (yyval.val) = NEW_IVAR((yyvsp[(1) - (1)].val));
10530 #endif
10531  (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val));
10532 
10533  }
10534  break;
10535 
10536  case 504:
10537 
10538 /* Line 1806 of yacc.c */
10539 #line 4245 "ripper.y"
10540  {
10541 #if 0
10542  (yyval.val) = NEW_CVAR((yyvsp[(1) - (1)].val));
10543 #endif
10544  (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val));
10545 
10546  }
10547  break;
10548 
10549  case 506:
10550 
10551 /* Line 1806 of yacc.c */
10552 #line 4256 "ripper.y"
10553  {
10554  SET_LEX_STATE(EXPR_END|EXPR_ENDARG);
10555 #if 0
10556  (yyval.val) = (yyvsp[(2) - (2)].val);
10557 #endif
10558  (yyval.val) = dispatch1(symbol, (yyvsp[(2) - (2)].val));
10559 
10560  }
10561  break;
10562 
10563  case 511:
10564 
10565 /* Line 1806 of yacc.c */
10566 #line 4273 "ripper.y"
10567  {
10568  SET_LEX_STATE(EXPR_END|EXPR_ENDARG);
10569 #if 0
10570  (yyval.val) = dsym_node((yyvsp[(2) - (3)].val));
10571 #endif
10572  (yyval.val) = dispatch1(dyna_symbol, (yyvsp[(2) - (3)].val));
10573 
10574  }
10575  break;
10576 
10577  case 513:
10578 
10579 /* Line 1806 of yacc.c */
10580 #line 4285 "ripper.y"
10581  {
10582 #if 0
10583  (yyval.val) = (yyvsp[(2) - (2)].val);
10584  (yyval.val)->nd_lit = negate_lit((yyval.val)->nd_lit);
10585 #endif
10586  (yyval.val) = dispatch2(unary, ID2SYM(idUMinus), (yyvsp[(2) - (2)].val));
10587 
10588  }
10589  break;
10590 
10591  case 523:
10592 
10593 /* Line 1806 of yacc.c */
10594 #line 4308 "ripper.y"
10595  {ifndef_ripper((yyval.val) = keyword_nil);}
10596  break;
10597 
10598  case 524:
10599 
10600 /* Line 1806 of yacc.c */
10601 #line 4309 "ripper.y"
10602  {ifndef_ripper((yyval.val) = keyword_self);}
10603  break;
10604 
10605  case 525:
10606 
10607 /* Line 1806 of yacc.c */
10608 #line 4310 "ripper.y"
10609  {ifndef_ripper((yyval.val) = keyword_true);}
10610  break;
10611 
10612  case 526:
10613 
10614 /* Line 1806 of yacc.c */
10615 #line 4311 "ripper.y"
10616  {ifndef_ripper((yyval.val) = keyword_false);}
10617  break;
10618 
10619  case 527:
10620 
10621 /* Line 1806 of yacc.c */
10622 #line 4312 "ripper.y"
10623  {ifndef_ripper((yyval.val) = keyword__FILE__);}
10624  break;
10625 
10626  case 528:
10627 
10628 /* Line 1806 of yacc.c */
10629 #line 4313 "ripper.y"
10630  {ifndef_ripper((yyval.val) = keyword__LINE__);}
10631  break;
10632 
10633  case 529:
10634 
10635 /* Line 1806 of yacc.c */
10636 #line 4314 "ripper.y"
10637  {ifndef_ripper((yyval.val) = keyword__ENCODING__);}
10638  break;
10639 
10640  case 530:
10641 
10642 /* Line 1806 of yacc.c */
10643 #line 4318 "ripper.y"
10644  {
10645 #if 0
10646  if (!((yyval.val) = gettable((yyvsp[(1) - (1)].val)))) (yyval.val) = NEW_BEGIN(0);
10647 #endif
10648  if (id_is_var(get_id((yyvsp[(1) - (1)].val)))) {
10649  (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val));
10650  }
10651  else {
10652  (yyval.val) = dispatch1(vcall, (yyvsp[(1) - (1)].val));
10653  }
10654 
10655  }
10656  break;
10657 
10658  case 531:
10659 
10660 /* Line 1806 of yacc.c */
10661 #line 4331 "ripper.y"
10662  {
10663 #if 0
10664  if (!((yyval.val) = gettable((yyvsp[(1) - (1)].val)))) (yyval.val) = NEW_BEGIN(0);
10665 #endif
10666  (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val));
10667 
10668  }
10669  break;
10670 
10671  case 532:
10672 
10673 /* Line 1806 of yacc.c */
10674 #line 4341 "ripper.y"
10675  {
10676  (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
10677 #if 0
10678 #endif
10679  (yyval.val) = dispatch1(var_field, (yyval.val));
10680 
10681  }
10682  break;
10683 
10684  case 533:
10685 
10686 /* Line 1806 of yacc.c */
10687 #line 4349 "ripper.y"
10688  {
10689  (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
10690 #if 0
10691 #endif
10692  (yyval.val) = dispatch1(var_field, (yyval.val));
10693 
10694  }
10695  break;
10696 
10697  case 536:
10698 
10699 /* Line 1806 of yacc.c */
10700 #line 4363 "ripper.y"
10701  {
10702  SET_LEX_STATE(EXPR_BEG);
10703  command_start = TRUE;
10704  }
10705  break;
10706 
10707  case 537:
10708 
10709 /* Line 1806 of yacc.c */
10710 #line 4368 "ripper.y"
10711  {
10712  (yyval.val) = (yyvsp[(3) - (4)].val);
10713  }
10714  break;
10715 
10716  case 538:
10717 
10718 /* Line 1806 of yacc.c */
10719 #line 4372 "ripper.y"
10720  {
10721 #if 0
10722  (yyval.val) = 0;
10723 #endif
10724  (yyval.val) = Qnil;
10725 
10726  }
10727  break;
10728 
10729  case 539:
10730 
10731 /* Line 1806 of yacc.c */
10732 #line 4382 "ripper.y"
10733  {
10734 #if 0
10735  (yyval.val) = (yyvsp[(2) - (3)].val);
10736 #endif
10737  (yyval.val) = dispatch1(paren, (yyvsp[(2) - (3)].val));
10738 
10739  SET_LEX_STATE(EXPR_BEG);
10740  command_start = TRUE;
10741  }
10742  break;
10743 
10744  case 540:
10745 
10746 /* Line 1806 of yacc.c */
10747 #line 4391 "ripper.y"
10748  {
10749  (yyval.num) = parser->in_kwarg;
10750  parser->in_kwarg = 1;
10751  lex_state |= EXPR_LABEL; /* force for args */
10752  }
10753  break;
10754 
10755  case 541:
10756 
10757 /* Line 1806 of yacc.c */
10758 #line 4397 "ripper.y"
10759  {
10760  parser->in_kwarg = !!(yyvsp[(1) - (3)].num);
10761  (yyval.val) = (yyvsp[(2) - (3)].val);
10762  SET_LEX_STATE(EXPR_BEG);
10763  command_start = TRUE;
10764  }
10765  break;
10766 
10767  case 542:
10768 
10769 /* Line 1806 of yacc.c */
10770 #line 4406 "ripper.y"
10771  {
10772  (yyval.val) = new_args_tail((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
10773  }
10774  break;
10775 
10776  case 543:
10777 
10778 /* Line 1806 of yacc.c */
10779 #line 4410 "ripper.y"
10780  {
10781  (yyval.val) = new_args_tail((yyvsp[(1) - (2)].val), Qnone, (yyvsp[(2) - (2)].val));
10782  }
10783  break;
10784 
10785  case 544:
10786 
10787 /* Line 1806 of yacc.c */
10788 #line 4414 "ripper.y"
10789  {
10790  (yyval.val) = new_args_tail(Qnone, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
10791  }
10792  break;
10793 
10794  case 545:
10795 
10796 /* Line 1806 of yacc.c */
10797 #line 4418 "ripper.y"
10798  {
10799  (yyval.val) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].val));
10800  }
10801  break;
10802 
10803  case 546:
10804 
10805 /* Line 1806 of yacc.c */
10806 #line 4424 "ripper.y"
10807  {
10808  (yyval.val) = (yyvsp[(2) - (2)].val);
10809  }
10810  break;
10811 
10812  case 547:
10813 
10814 /* Line 1806 of yacc.c */
10815 #line 4428 "ripper.y"
10816  {
10817  (yyval.val) = new_args_tail(Qnone, Qnone, Qnone);
10818  }
10819  break;
10820 
10821  case 548:
10822 
10823 /* Line 1806 of yacc.c */
10824 #line 4434 "ripper.y"
10825  {
10826  (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), Qnone, (yyvsp[(6) - (6)].val));
10827  }
10828  break;
10829 
10830  case 549:
10831 
10832 /* Line 1806 of yacc.c */
10833 #line 4438 "ripper.y"
10834  {
10835  (yyval.val) = new_args((yyvsp[(1) - (8)].val), (yyvsp[(3) - (8)].val), (yyvsp[(5) - (8)].val), (yyvsp[(7) - (8)].val), (yyvsp[(8) - (8)].val));
10836  }
10837  break;
10838 
10839  case 550:
10840 
10841 /* Line 1806 of yacc.c */
10842 #line 4442 "ripper.y"
10843  {
10844  (yyval.val) = new_args((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnone, Qnone, (yyvsp[(4) - (4)].val));
10845  }
10846  break;
10847 
10848  case 551:
10849 
10850 /* Line 1806 of yacc.c */
10851 #line 4446 "ripper.y"
10852  {
10853  (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), Qnone, (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
10854  }
10855  break;
10856 
10857  case 552:
10858 
10859 /* Line 1806 of yacc.c */
10860 #line 4450 "ripper.y"
10861  {
10862  (yyval.val) = new_args((yyvsp[(1) - (4)].val), Qnone, (yyvsp[(3) - (4)].val), Qnone, (yyvsp[(4) - (4)].val));
10863  }
10864  break;
10865 
10866  case 553:
10867 
10868 /* Line 1806 of yacc.c */
10869 #line 4454 "ripper.y"
10870  {
10871  (yyval.val) = new_args((yyvsp[(1) - (6)].val), Qnone, (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
10872  }
10873  break;
10874 
10875  case 554:
10876 
10877 /* Line 1806 of yacc.c */
10878 #line 4458 "ripper.y"
10879  {
10880  (yyval.val) = new_args((yyvsp[(1) - (2)].val), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].val));
10881  }
10882  break;
10883 
10884  case 555:
10885 
10886 /* Line 1806 of yacc.c */
10887 #line 4462 "ripper.y"
10888  {
10889  (yyval.val) = new_args(Qnone, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnone, (yyvsp[(4) - (4)].val));
10890  }
10891  break;
10892 
10893  case 556:
10894 
10895 /* Line 1806 of yacc.c */
10896 #line 4466 "ripper.y"
10897  {
10898  (yyval.val) = new_args(Qnone, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
10899  }
10900  break;
10901 
10902  case 557:
10903 
10904 /* Line 1806 of yacc.c */
10905 #line 4470 "ripper.y"
10906  {
10907  (yyval.val) = new_args(Qnone, (yyvsp[(1) - (2)].val), Qnone, Qnone, (yyvsp[(2) - (2)].val));
10908  }
10909  break;
10910 
10911  case 558:
10912 
10913 /* Line 1806 of yacc.c */
10914 #line 4474 "ripper.y"
10915  {
10916  (yyval.val) = new_args(Qnone, (yyvsp[(1) - (4)].val), Qnone, (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
10917  }
10918  break;
10919 
10920  case 559:
10921 
10922 /* Line 1806 of yacc.c */
10923 #line 4478 "ripper.y"
10924  {
10925  (yyval.val) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].val), Qnone, (yyvsp[(2) - (2)].val));
10926  }
10927  break;
10928 
10929  case 560:
10930 
10931 /* Line 1806 of yacc.c */
10932 #line 4482 "ripper.y"
10933  {
10934  (yyval.val) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
10935  }
10936  break;
10937 
10938  case 561:
10939 
10940 /* Line 1806 of yacc.c */
10941 #line 4486 "ripper.y"
10942  {
10943  (yyval.val) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].val));
10944  }
10945  break;
10946 
10947  case 562:
10948 
10949 /* Line 1806 of yacc.c */
10950 #line 4490 "ripper.y"
10951  {
10952  (yyval.val) = new_args_tail(Qnone, Qnone, Qnone);
10953  (yyval.val) = new_args(Qnone, Qnone, Qnone, Qnone, (yyval.val));
10954  }
10955  break;
10956 
10957  case 563:
10958 
10959 /* Line 1806 of yacc.c */
10960 #line 4497 "ripper.y"
10961  {
10962 #if 0
10963  yyerror("formal argument cannot be a constant");
10964  (yyval.val) = 0;
10965 #endif
10966  (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val));
10967  ripper_error();
10968 
10969  }
10970  break;
10971 
10972  case 564:
10973 
10974 /* Line 1806 of yacc.c */
10975 #line 4507 "ripper.y"
10976  {
10977 #if 0
10978  yyerror("formal argument cannot be an instance variable");
10979  (yyval.val) = 0;
10980 #endif
10981  (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val));
10982  ripper_error();
10983 
10984  }
10985  break;
10986 
10987  case 565:
10988 
10989 /* Line 1806 of yacc.c */
10990 #line 4517 "ripper.y"
10991  {
10992 #if 0
10993  yyerror("formal argument cannot be a global variable");
10994  (yyval.val) = 0;
10995 #endif
10996  (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val));
10997  ripper_error();
10998 
10999  }
11000  break;
11001 
11002  case 566:
11003 
11004 /* Line 1806 of yacc.c */
11005 #line 4527 "ripper.y"
11006  {
11007 #if 0
11008  yyerror("formal argument cannot be a class variable");
11009  (yyval.val) = 0;
11010 #endif
11011  (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val));
11012  ripper_error();
11013 
11014  }
11015  break;
11016 
11017  case 568:
11018 
11019 /* Line 1806 of yacc.c */
11020 #line 4540 "ripper.y"
11021  {
11022  formal_argument(get_id((yyvsp[(1) - (1)].val)));
11023  (yyval.val) = (yyvsp[(1) - (1)].val);
11024  }
11025  break;
11026 
11027  case 569:
11028 
11029 /* Line 1806 of yacc.c */
11030 #line 4547 "ripper.y"
11031  {
11032  ID id = get_id((yyvsp[(1) - (1)].val));
11033  arg_var(id);
11034  current_arg = id;
11035  (yyval.val) = (yyvsp[(1) - (1)].val);
11036  }
11037  break;
11038 
11039  case 570:
11040 
11041 /* Line 1806 of yacc.c */
11042 #line 4556 "ripper.y"
11043  {
11044  current_arg = 0;
11045 #if 0
11046  (yyval.val) = NEW_ARGS_AUX((yyvsp[(1) - (1)].val), 1);
11047 #endif
11048  (yyval.val) = get_value((yyvsp[(1) - (1)].val));
11049 
11050  }
11051  break;
11052 
11053  case 571:
11054 
11055 /* Line 1806 of yacc.c */
11056 #line 4565 "ripper.y"
11057  {
11058  ID tid = internal_id();
11059  arg_var(tid);
11060 #if 0
11061  if (dyna_in_block()) {
11062  (yyvsp[(2) - (3)].val)->nd_value = NEW_DVAR(tid);
11063  }
11064  else {
11065  (yyvsp[(2) - (3)].val)->nd_value = NEW_LVAR(tid);
11066  }
11067  (yyval.val) = NEW_ARGS_AUX(tid, 1);
11068  (yyval.val)->nd_next = (yyvsp[(2) - (3)].val);
11069 #endif
11070  (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val));
11071 
11072  }
11073  break;
11074 
11075  case 572:
11076 
11077 /* Line 1806 of yacc.c */
11078 #line 4586 "ripper.y"
11079  {
11080  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
11081  }
11082  break;
11083 
11084  case 573:
11085 
11086 /* Line 1806 of yacc.c */
11087 #line 4591 "ripper.y"
11088  {
11089 #if 0
11090  (yyval.val) = (yyvsp[(1) - (3)].val);
11091  (yyval.val)->nd_plen++;
11092  (yyval.val)->nd_next = block_append((yyval.val)->nd_next, (yyvsp[(3) - (3)].val)->nd_next);
11093  rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].val));
11094 #endif
11095  (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
11096 
11097  }
11098  break;
11099 
11100  case 574:
11101 
11102 /* Line 1806 of yacc.c */
11103 #line 4605 "ripper.y"
11104  {
11105  ID id = get_id((yyvsp[(1) - (1)].val));
11106  arg_var(formal_argument(id));
11107  current_arg = id;
11108  (yyval.val) = (yyvsp[(1) - (1)].val);
11109  }
11110  break;
11111 
11112  case 575:
11113 
11114 /* Line 1806 of yacc.c */
11115 #line 4614 "ripper.y"
11116  {
11117  current_arg = 0;
11118  (yyval.val) = assignable((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
11119 #if 0
11120  (yyval.val) = new_kw_arg((yyval.val));
11121 #endif
11122  (yyval.val) = rb_assoc_new((yyval.val), (yyvsp[(2) - (2)].val));
11123 
11124  }
11125  break;
11126 
11127  case 576:
11128 
11129 /* Line 1806 of yacc.c */
11130 #line 4624 "ripper.y"
11131  {
11132  current_arg = 0;
11133  (yyval.val) = assignable((yyvsp[(1) - (1)].val), (NODE *)-1);
11134 #if 0
11135  (yyval.val) = new_kw_arg((yyval.val));
11136 #endif
11137  (yyval.val) = rb_assoc_new((yyval.val), 0);
11138 
11139  }
11140  break;
11141 
11142  case 577:
11143 
11144 /* Line 1806 of yacc.c */
11145 #line 4636 "ripper.y"
11146  {
11147  (yyval.val) = assignable((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
11148 #if 0
11149  (yyval.val) = new_kw_arg((yyval.val));
11150 #endif
11151  (yyval.val) = rb_assoc_new((yyval.val), (yyvsp[(2) - (2)].val));
11152 
11153  }
11154  break;
11155 
11156  case 578:
11157 
11158 /* Line 1806 of yacc.c */
11159 #line 4645 "ripper.y"
11160  {
11161  (yyval.val) = assignable((yyvsp[(1) - (1)].val), (NODE *)-1);
11162 #if 0
11163  (yyval.val) = new_kw_arg((yyval.val));
11164 #endif
11165  (yyval.val) = rb_assoc_new((yyval.val), 0);
11166 
11167  }
11168  break;
11169 
11170  case 579:
11171 
11172 /* Line 1806 of yacc.c */
11173 #line 4656 "ripper.y"
11174  {
11175 #if 0
11176  (yyval.val) = (yyvsp[(1) - (1)].val);
11177 #endif
11178  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
11179 
11180  }
11181  break;
11182 
11183  case 580:
11184 
11185 /* Line 1806 of yacc.c */
11186 #line 4664 "ripper.y"
11187  {
11188 #if 0
11189  (yyval.val) = kwd_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
11190 #endif
11191  (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
11192 
11193  }
11194  break;
11195 
11196  case 581:
11197 
11198 /* Line 1806 of yacc.c */
11199 #line 4675 "ripper.y"
11200  {
11201 #if 0
11202  (yyval.val) = (yyvsp[(1) - (1)].val);
11203 #endif
11204  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
11205 
11206  }
11207  break;
11208 
11209  case 582:
11210 
11211 /* Line 1806 of yacc.c */
11212 #line 4683 "ripper.y"
11213  {
11214 #if 0
11215  (yyval.val) = kwd_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
11216 #endif
11217  (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
11218 
11219  }
11220  break;
11221 
11222  case 585:
11223 
11224 /* Line 1806 of yacc.c */
11225 #line 4697 "ripper.y"
11226  {
11227  shadowing_lvar(get_id((yyvsp[(2) - (2)].val)));
11228  (yyval.val) = (yyvsp[(2) - (2)].val);
11229  }
11230  break;
11231 
11232  case 586:
11233 
11234 /* Line 1806 of yacc.c */
11235 #line 4702 "ripper.y"
11236  {
11237  (yyval.val) = internal_id();
11238  arg_var((yyval.val));
11239  }
11240  break;
11241 
11242  case 587:
11243 
11244 /* Line 1806 of yacc.c */
11245 #line 4709 "ripper.y"
11246  {
11247  current_arg = 0;
11248  (yyval.val) = assignable((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
11249 #if 0
11250  (yyval.val) = NEW_OPT_ARG(0, (yyval.val));
11251 #endif
11252  (yyval.val) = rb_assoc_new((yyval.val), (yyvsp[(3) - (3)].val));
11253 
11254  }
11255  break;
11256 
11257  case 588:
11258 
11259 /* Line 1806 of yacc.c */
11260 #line 4721 "ripper.y"
11261  {
11262  current_arg = 0;
11263  (yyval.val) = assignable((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
11264 #if 0
11265  (yyval.val) = NEW_OPT_ARG(0, (yyval.val));
11266 #endif
11267  (yyval.val) = rb_assoc_new((yyval.val), (yyvsp[(3) - (3)].val));
11268 
11269  }
11270  break;
11271 
11272  case 589:
11273 
11274 /* Line 1806 of yacc.c */
11275 #line 4733 "ripper.y"
11276  {
11277 #if 0
11278  (yyval.val) = (yyvsp[(1) - (1)].val);
11279 #endif
11280  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
11281 
11282  }
11283  break;
11284 
11285  case 590:
11286 
11287 /* Line 1806 of yacc.c */
11288 #line 4741 "ripper.y"
11289  {
11290 #if 0
11291  NODE *opts = (yyvsp[(1) - (3)].val);
11292 
11293  while (opts->nd_next) {
11294  opts = opts->nd_next;
11295  }
11296  opts->nd_next = (yyvsp[(3) - (3)].val);
11297  (yyval.val) = (yyvsp[(1) - (3)].val);
11298 #endif
11299  (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
11300 
11301  }
11302  break;
11303 
11304  case 591:
11305 
11306 /* Line 1806 of yacc.c */
11307 #line 4757 "ripper.y"
11308  {
11309 #if 0
11310  (yyval.val) = (yyvsp[(1) - (1)].val);
11311 #endif
11312  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
11313 
11314  }
11315  break;
11316 
11317  case 592:
11318 
11319 /* Line 1806 of yacc.c */
11320 #line 4765 "ripper.y"
11321  {
11322 #if 0
11323  NODE *opts = (yyvsp[(1) - (3)].val);
11324 
11325  while (opts->nd_next) {
11326  opts = opts->nd_next;
11327  }
11328  opts->nd_next = (yyvsp[(3) - (3)].val);
11329  (yyval.val) = (yyvsp[(1) - (3)].val);
11330 #endif
11331  (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
11332 
11333  }
11334  break;
11335 
11336  case 595:
11337 
11338 /* Line 1806 of yacc.c */
11339 #line 4785 "ripper.y"
11340  {
11341 #if 0
11342  if (!is_local_id((yyvsp[(2) - (2)].val)))
11343  yyerror("rest argument must be local variable");
11344 #endif
11345  arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].val))));
11346 #if 0
11347  (yyval.val) = (yyvsp[(2) - (2)].val);
11348 #endif
11349  (yyval.val) = dispatch1(rest_param, (yyvsp[(2) - (2)].val));
11350 
11351  }
11352  break;
11353 
11354  case 596:
11355 
11356 /* Line 1806 of yacc.c */
11357 #line 4798 "ripper.y"
11358  {
11359 #if 0
11360  (yyval.val) = internal_id();
11361  arg_var((yyval.val));
11362 #endif
11363  (yyval.val) = dispatch1(rest_param, Qnil);
11364 
11365  }
11366  break;
11367 
11368  case 599:
11369 
11370 /* Line 1806 of yacc.c */
11371 #line 4813 "ripper.y"
11372  {
11373 #if 0
11374  if (!is_local_id((yyvsp[(2) - (2)].val)))
11375  yyerror("block argument must be local variable");
11376  else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].val)))
11377  yyerror("duplicated block argument name");
11378 #endif
11379  arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].val))));
11380 #if 0
11381  (yyval.val) = (yyvsp[(2) - (2)].val);
11382 #endif
11383  (yyval.val) = dispatch1(blockarg, (yyvsp[(2) - (2)].val));
11384 
11385  }
11386  break;
11387 
11388  case 600:
11389 
11390 /* Line 1806 of yacc.c */
11391 #line 4830 "ripper.y"
11392  {
11393  (yyval.val) = (yyvsp[(2) - (2)].val);
11394  }
11395  break;
11396 
11397  case 601:
11398 
11399 /* Line 1806 of yacc.c */
11400 #line 4834 "ripper.y"
11401  {
11402 #if 0
11403  (yyval.val) = 0;
11404 #endif
11405  (yyval.val) = Qundef;
11406 
11407  }
11408  break;
11409 
11410  case 602:
11411 
11412 /* Line 1806 of yacc.c */
11413 #line 4844 "ripper.y"
11414  {
11415 #if 0
11416  value_expr((yyvsp[(1) - (1)].val));
11417  (yyval.val) = (yyvsp[(1) - (1)].val);
11418  if (!(yyval.val)) (yyval.val) = NEW_NIL();
11419 #endif
11420  (yyval.val) = (yyvsp[(1) - (1)].val);
11421 
11422  }
11423  break;
11424 
11425  case 603:
11426 
11427 /* Line 1806 of yacc.c */
11428 #line 4853 "ripper.y"
11429  {SET_LEX_STATE(EXPR_BEG);}
11430  break;
11431 
11432  case 604:
11433 
11434 /* Line 1806 of yacc.c */
11435 #line 4854 "ripper.y"
11436  {
11437 #if 0
11438  if ((yyvsp[(3) - (4)].val) == 0) {
11439  yyerror("can't define singleton method for ().");
11440  }
11441  else {
11442  switch (nd_type((yyvsp[(3) - (4)].val))) {
11443  case NODE_STR:
11444  case NODE_DSTR:
11445  case NODE_XSTR:
11446  case NODE_DXSTR:
11447  case NODE_DREGX:
11448  case NODE_LIT:
11449  case NODE_ARRAY:
11450  case NODE_ZARRAY:
11451  yyerror("can't define singleton method for literals");
11452  default:
11453  value_expr((yyvsp[(3) - (4)].val));
11454  break;
11455  }
11456  }
11457  (yyval.val) = (yyvsp[(3) - (4)].val);
11458 #endif
11459  (yyval.val) = dispatch1(paren, (yyvsp[(3) - (4)].val));
11460 
11461  }
11462  break;
11463 
11464  case 606:
11465 
11466 /* Line 1806 of yacc.c */
11467 #line 4884 "ripper.y"
11468  {
11469 #if 0
11470  (yyval.val) = (yyvsp[(1) - (2)].val);
11471 #endif
11472  (yyval.val) = dispatch1(assoclist_from_args, (yyvsp[(1) - (2)].val));
11473 
11474  }
11475  break;
11476 
11477  case 607:
11478 
11479 /* Line 1806 of yacc.c */
11480 #line 4896 "ripper.y"
11481  {
11482  (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
11483  }
11484  break;
11485 
11486  case 608:
11487 
11488 /* Line 1806 of yacc.c */
11489 #line 4901 "ripper.y"
11490  {
11491 #if 0
11492  NODE *assocs = (yyvsp[(1) - (3)].val);
11493  NODE *tail = (yyvsp[(3) - (3)].val);
11494  if (!assocs) {
11495  assocs = tail;
11496  }
11497  else if (tail) {
11498  if (assocs->nd_head &&
11499  !tail->nd_head && nd_type(tail->nd_next) == NODE_ARRAY &&
11500  nd_type(tail->nd_next->nd_head) == NODE_HASH) {
11501  /* DSTAR */
11502  tail = tail->nd_next->nd_head->nd_head;
11503  }
11504  assocs = list_concat(assocs, tail);
11505  }
11506  (yyval.val) = assocs;
11507 #endif
11508  (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
11509 
11510  }
11511  break;
11512 
11513  case 609:
11514 
11515 /* Line 1806 of yacc.c */
11516 #line 4925 "ripper.y"
11517  {
11518 #if 0
11519  if (nd_type((yyvsp[(1) - (3)].val)) == NODE_STR) {
11520  nd_set_type((yyvsp[(1) - (3)].val), NODE_LIT);
11521  (yyvsp[(1) - (3)].val)->nd_lit = rb_fstring((yyvsp[(1) - (3)].val)->nd_lit);
11522  }
11523  (yyval.val) = list_append(NEW_LIST((yyvsp[(1) - (3)].val)), (yyvsp[(3) - (3)].val));
11524 #endif
11525  (yyval.val) = dispatch2(assoc_new, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
11526 
11527  }
11528  break;
11529 
11530  case 610:
11531 
11532 /* Line 1806 of yacc.c */
11533 #line 4937 "ripper.y"
11534  {
11535 #if 0
11536  (yyval.val) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].val)))), (yyvsp[(2) - (2)].val));
11537 #endif
11538  (yyval.val) = dispatch2(assoc_new, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
11539 
11540  }
11541  break;
11542 
11543  case 611:
11544 
11545 /* Line 1806 of yacc.c */
11546 #line 4945 "ripper.y"
11547  {
11548 #if 0
11549  (yyval.val) = list_append(NEW_LIST(dsym_node((yyvsp[(2) - (4)].val))), (yyvsp[(4) - (4)].val));
11550 #endif
11551  (yyval.val) = dispatch2(assoc_new, dispatch1(dyna_symbol, (yyvsp[(2) - (4)].val)), (yyvsp[(4) - (4)].val));
11552 
11553  }
11554  break;
11555 
11556  case 612:
11557 
11558 /* Line 1806 of yacc.c */
11559 #line 4953 "ripper.y"
11560  {
11561 #if 0
11562  if (nd_type((yyvsp[(2) - (2)].val)) == NODE_HASH &&
11563  !((yyvsp[(2) - (2)].val)->nd_head && (yyvsp[(2) - (2)].val)->nd_head->nd_alen))
11564  (yyval.val) = 0;
11565  else
11566  (yyval.val) = list_append(NEW_LIST(0), (yyvsp[(2) - (2)].val));
11567 #endif
11568  (yyval.val) = dispatch1(assoc_splat, (yyvsp[(2) - (2)].val));
11569 
11570  }
11571  break;
11572 
11573  case 623:
11574 
11575 /* Line 1806 of yacc.c */
11576 #line 4985 "ripper.y"
11577  { (yyval.val) = (yyvsp[(1) - (1)].val); }
11578  break;
11579 
11580  case 624:
11581 
11582 /* Line 1806 of yacc.c */
11583 #line 4990 "ripper.y"
11584  { (yyval.val) = (yyvsp[(1) - (1)].val); }
11585  break;
11586 
11587  case 625:
11588 
11589 /* Line 1806 of yacc.c */
11590 #line 4995 "ripper.y"
11591  {
11592 #if 0
11593  (yyval.val) = '.';
11594 #endif
11595  (yyval.val) = ripper_id2sym('.');
11596 
11597  }
11598  break;
11599 
11600  case 626:
11601 
11602 /* Line 1806 of yacc.c */
11603 #line 5003 "ripper.y"
11604  {
11605 #if 0
11606  (yyval.val) = tANDDOT;
11607 #endif
11608  (yyval.val) = ripper_id2sym(idANDDOT);
11609 
11610  }
11611  break;
11612 
11613  case 628:
11614 
11615 /* Line 1806 of yacc.c */
11616 #line 5014 "ripper.y"
11617  {
11618 #if 0
11619  (yyval.val) = tCOLON2;
11620 #endif
11621  (yyval.val) = ripper_id2sym(idCOLON2);
11622 
11623  }
11624  break;
11625 
11626  case 638:
11627 
11628 /* Line 1806 of yacc.c */
11629 #line 5042 "ripper.y"
11630  {yyerrok;}
11631  break;
11632 
11633  case 641:
11634 
11635 /* Line 1806 of yacc.c */
11636 #line 5047 "ripper.y"
11637  {yyerrok;}
11638  break;
11639 
11640  case 642:
11641 
11642 /* Line 1806 of yacc.c */
11643 #line 5051 "ripper.y"
11644  {
11645 #if 0
11646  (yyval.val) = 0;
11647 #endif
11648  (yyval.val) = Qundef;
11649 
11650  }
11651  break;
11652 
11653 
11654 
11655 /* Line 1806 of yacc.c */
11656 #line 11655 "parse.c"
11657  default: break;
11658  }
11659  /* User semantic actions sometimes alter yychar, and that requires
11660  that yytoken be updated with the new translation. We take the
11661  approach of translating immediately before every use of yytoken.
11662  One alternative is translating here after every semantic action,
11663  but that translation would be missed if the semantic action invokes
11664  YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
11665  if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
11666  incorrect destructor might then be invoked immediately. In the
11667  case of YYERROR or YYBACKUP, subsequent parser actions might lead
11668  to an incorrect destructor call or verbose syntax error message
11669  before the lookahead is translated. */
11670  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
11671 
11672  YYPOPSTACK (yylen);
11673  yylen = 0;
11674  YY_STACK_PRINT (yyss, yyssp);
11675 
11676  *++yyvsp = yyval;
11677 
11678  /* Now `shift' the result of the reduction. Determine what state
11679  that goes to, based on the state we popped back to and the rule
11680  number reduced by. */
11681 
11682  yyn = yyr1[yyn];
11683 
11684  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
11685  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
11686  yystate = yytable[yystate];
11687  else
11688  yystate = yydefgoto[yyn - YYNTOKENS];
11689 
11690  goto yynewstate;
11691 
11692 
11693 /*------------------------------------.
11694 | yyerrlab -- here on detecting error |
11695 `------------------------------------*/
11696 yyerrlab:
11697  /* Make sure we have latest lookahead translation. See comments at
11698  user semantic actions for why this is necessary. */
11699  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
11700 
11701  /* If not already recovering from an error, report this error. */
11702  if (!yyerrstatus)
11703  {
11704  ++yynerrs;
11705 #if ! YYERROR_VERBOSE
11706  parser_yyerror (parser, YY_("syntax error"));
11707 #else
11708 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
11709  yyssp, yytoken)
11710  {
11711  char const *yymsgp = YY_("syntax error");
11712  int yysyntax_error_status;
11713  yysyntax_error_status = YYSYNTAX_ERROR;
11714  if (yysyntax_error_status == 0)
11715  yymsgp = yymsg;
11716  else if (yysyntax_error_status == 1)
11717  {
11718  if (yymsg != yymsgbuf)
11719  YYSTACK_FREE (yymsg);
11720  yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
11721  if (!yymsg)
11722  {
11723  yymsg = yymsgbuf;
11724  yymsg_alloc = sizeof yymsgbuf;
11725  yysyntax_error_status = 2;
11726  }
11727  else
11728  {
11729  yysyntax_error_status = YYSYNTAX_ERROR;
11730  yymsgp = yymsg;
11731  }
11732  }
11733  parser_yyerror (parser, yymsgp);
11734  if (yysyntax_error_status == 2)
11735  goto yyexhaustedlab;
11736  }
11737 # undef YYSYNTAX_ERROR
11738 #endif
11739  }
11740 
11741 
11742 
11743  if (yyerrstatus == 3)
11744  {
11745  /* If just tried and failed to reuse lookahead token after an
11746  error, discard it. */
11747 
11748  if (yychar <= YYEOF)
11749  {
11750  /* Return failure if at end of input. */
11751  if (yychar == YYEOF)
11752  YYABORT;
11753  }
11754  else
11755  {
11756  yydestruct ("Error: discarding",
11757  yytoken, &yylval, parser);
11758  yychar = YYEMPTY;
11759  }
11760  }
11761 
11762  /* Else will try to reuse lookahead token after shifting the error
11763  token. */
11764  goto yyerrlab1;
11765 
11766 
11767 /*---------------------------------------------------.
11768 | yyerrorlab -- error raised explicitly by YYERROR. |
11769 `---------------------------------------------------*/
11770 yyerrorlab:
11771 
11772  /* Pacify compilers like GCC when the user code never invokes
11773  YYERROR and the label yyerrorlab therefore never appears in user
11774  code. */
11775  if (/*CONSTCOND*/ 0)
11776  goto yyerrorlab;
11777 
11778  /* Do not reclaim the symbols of the rule which action triggered
11779  this YYERROR. */
11780  YYPOPSTACK (yylen);
11781  yylen = 0;
11782  YY_STACK_PRINT (yyss, yyssp);
11783  yystate = *yyssp;
11784  goto yyerrlab1;
11785 
11786 
11787 /*-------------------------------------------------------------.
11788 | yyerrlab1 -- common code for both syntax error and YYERROR. |
11789 `-------------------------------------------------------------*/
11790 yyerrlab1:
11791  yyerrstatus = 3; /* Each real token shifted decrements this. */
11792 
11793  for (;;)
11794  {
11795  yyn = yypact[yystate];
11796  if (!yypact_value_is_default (yyn))
11797  {
11798  yyn += YYTERROR;
11799  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
11800  {
11801  yyn = yytable[yyn];
11802  if (0 < yyn)
11803  break;
11804  }
11805  }
11806 
11807  /* Pop the current state because it cannot handle the error token. */
11808  if (yyssp == yyss)
11809  YYABORT;
11810 
11811 
11812  yydestruct ("Error: popping",
11813  yystos[yystate], yyvsp, parser);
11814  YYPOPSTACK (1);
11815  yystate = *yyssp;
11816  YY_STACK_PRINT (yyss, yyssp);
11817  }
11818 
11819  *++yyvsp = yylval;
11820 
11821 
11822  /* Shift the error token. */
11823  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
11824 
11825  yystate = yyn;
11826  goto yynewstate;
11827 
11828 
11829 /*-------------------------------------.
11830 | yyacceptlab -- YYACCEPT comes here. |
11831 `-------------------------------------*/
11832 yyacceptlab:
11833  yyresult = 0;
11834  goto yyreturn;
11835 
11836 /*-----------------------------------.
11837 | yyabortlab -- YYABORT comes here. |
11838 `-----------------------------------*/
11839 yyabortlab:
11840  yyresult = 1;
11841  goto yyreturn;
11842 
11843 #if !defined(yyoverflow) || YYERROR_VERBOSE
11844 /*-------------------------------------------------.
11845 | yyexhaustedlab -- memory exhaustion comes here. |
11846 `-------------------------------------------------*/
11847 yyexhaustedlab:
11848  parser_yyerror (parser, YY_("memory exhausted"));
11849  yyresult = 2;
11850  /* Fall through. */
11851 #endif
11852 
11853 yyreturn:
11854  if (yychar != YYEMPTY)
11855  {
11856  /* Make sure we have latest lookahead translation. See comments at
11857  user semantic actions for why this is necessary. */
11858  yytoken = YYTRANSLATE (yychar);
11859  yydestruct ("Cleanup: discarding lookahead",
11860  yytoken, &yylval, parser);
11861  }
11862  /* Do not reclaim the symbols of the rule which action triggered
11863  this YYABORT or YYACCEPT. */
11864  YYPOPSTACK (yylen);
11865  YY_STACK_PRINT (yyss, yyssp);
11866  while (yyssp != yyss)
11867  {
11868  yydestruct ("Cleanup: popping",
11869  yystos[*yyssp], yyvsp, parser);
11870  YYPOPSTACK (1);
11871  }
11872 #ifndef yyoverflow
11873  if (yyss != yyssa)
11874  YYSTACK_FREE (yyss);
11875 #endif
11876 #if YYERROR_VERBOSE
11877  if (yymsg != yymsgbuf)
11878  YYSTACK_FREE (yymsg);
11879 #endif
11880  /* Make sure YYID is used. */
11881  return YYID (yyresult);
11882 }
11883 
11884 
11885 
11886 /* Line 2067 of yacc.c */
11887 #line 5059 "ripper.y"
11888 
11889 # undef parser
11890 # undef yylex
11891 # undef yylval
11892 # define yylval (*parser->lval)
11893 
11894 static int parser_regx_options(struct parser_params*);
11895 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
11896 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
11897 static int parser_parse_string(struct parser_params*,NODE*);
11898 static int parser_here_document(struct parser_params*,NODE*);
11899 
11900 
11901 # define nextc() parser_nextc(parser)
11902 # define pushback(c) parser_pushback(parser, (c))
11903 # define newtok() parser_newtok(parser)
11904 # define tokspace(n) parser_tokspace(parser, (n))
11905 # define tokadd(c) parser_tokadd(parser, (c))
11906 # define tok_hex(numlen) parser_tok_hex(parser, (numlen))
11907 # define read_escape(flags,e) parser_read_escape(parser, (flags), (e))
11908 # define tokadd_escape(e) parser_tokadd_escape(parser, (e))
11909 # define regx_options() parser_regx_options(parser)
11910 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,(f),(t),(p),(n),(e))
11911 # define parse_string(n) parser_parse_string(parser,(n))
11912 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, (c), (enc))
11913 # define here_document(n) parser_here_document(parser,(n))
11914 # define heredoc_identifier() parser_heredoc_identifier(parser)
11915 # define heredoc_restore(n) parser_heredoc_restore(parser,(n))
11916 # define whole_match_p(e,l,i) parser_whole_match_p(parser,(e),(l),(i))
11917 # define number_literal_suffix(f) parser_number_literal_suffix(parser, (f))
11918 # define set_number_literal(v, t, f) parser_set_number_literal(parser, (v), (t), (f))
11919 # define set_integer_literal(v, f) parser_set_integer_literal(parser, (v), (f))
11920 
11921 #ifndef RIPPER
11922 # define set_yylval_str(x) (yylval.node = NEW_STR(x))
11923 # define set_yylval_num(x) (yylval.num = (x))
11924 # define set_yylval_id(x) (yylval.id = (x))
11925 # define set_yylval_name(x) (yylval.id = (x))
11926 # define set_yylval_literal(x) (yylval.node = NEW_LIT(x))
11927 # define set_yylval_node(x) (yylval.node = (x))
11928 # define yylval_id() (yylval.id)
11929 #else
11930 static inline VALUE
11931 ripper_yylval_id(ID x)
11932 {
11933  return ripper_new_yylval(x, ID2SYM(x), 0);
11934 }
11935 # define set_yylval_str(x) (yylval.val = (x))
11936 # define set_yylval_num(x) (yylval.val = ripper_new_yylval((x), 0, 0))
11937 # define set_yylval_id(x) (void)(x)
11938 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
11939 # define set_yylval_literal(x) (void)(x)
11940 # define set_yylval_node(x) (void)(x)
11941 # define yylval_id() yylval.id
11942 #endif
11943 
11944 #ifndef RIPPER
11945 #define ripper_flush(p) (void)(p)
11946 #define dispatch_scan_event(t) ((void)0)
11947 #define dispatch_delayed_token(t) ((void)0)
11948 #define has_delayed_token() (0)
11949 #else
11950 #define ripper_flush(p) ((p)->tokp = (p)->lex.pcur)
11951 
11952 #define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
11953 
11954 static inline VALUE
11955 intern_sym(const char *name)
11956 {
11957  ID id = rb_intern_const(name);
11958  return ID2SYM(id);
11959 }
11960 
11961 static int
11962 ripper_has_scan_event(struct parser_params *parser)
11963 {
11964 
11965  if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
11966  return lex_p > parser->tokp;
11967 }
11968 
11969 static VALUE
11970 ripper_scan_event_val(struct parser_params *parser, int t)
11971 {
11972  VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
11973  VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
11974  ripper_flush(parser);
11975  return rval;
11976 }
11977 
11978 static void
11979 ripper_dispatch_scan_event(struct parser_params *parser, int t)
11980 {
11981  if (!ripper_has_scan_event(parser)) return;
11982  yylval_rval = ripper_scan_event_val(parser, t);
11983 }
11984 #define dispatch_scan_event(t) ripper_dispatch_scan_event(parser, t)
11985 
11986 static void
11987 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
11988 {
11989  int saved_line = ruby_sourceline;
11990  const char *saved_tokp = parser->tokp;
11991 
11992  ruby_sourceline = parser->delayed_line;
11993  parser->tokp = lex_pbeg + parser->delayed_col;
11994  yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
11995  parser->delayed = Qnil;
11996  ruby_sourceline = saved_line;
11997  parser->tokp = saved_tokp;
11998 }
11999 #define dispatch_delayed_token(t) ripper_dispatch_delayed_token(parser, t)
12000 #define has_delayed_token() (!NIL_P(parser->delayed))
12001 #endif /* RIPPER */
12002 
12003 #include "ruby/regex.h"
12004 #include "ruby/util.h"
12005 
12006 #define parser_encoding_name() (current_enc->name)
12007 #define parser_mbclen() mbclen((lex_p-1),lex_pend,current_enc)
12008 #define is_identchar(p,e,enc) (rb_enc_isalnum((unsigned char)(*(p)),(enc)) || (*(p)) == '_' || !ISASCII(*(p)))
12009 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,current_enc))
12010 
12011 #define parser_isascii() ISASCII(*(lex_p-1))
12012 
12013 static int
12014 token_info_get_column(struct parser_params *parser, const char *pend)
12015 {
12016  int column = 1;
12017  const char *p;
12018  for (p = lex_pbeg; p < pend; p++) {
12019  if (*p == '\t') {
12020  column = (((column - 1) / TAB_WIDTH) + 1) * TAB_WIDTH;
12021  }
12022  column++;
12023  }
12024  return column;
12025 }
12026 
12027 static int
12028 token_info_has_nonspaces(struct parser_params *parser, const char *pend)
12029 {
12030  const char *p;
12031  for (p = lex_pbeg; p < pend; p++) {
12032  if (*p != ' ' && *p != '\t') {
12033  return 1;
12034  }
12035  }
12036  return 0;
12037 }
12038 
12039 static void
12040 token_info_push_gen(struct parser_params *parser, const char *token, size_t len)
12041 {
12042  token_info *ptinfo;
12043  const char *t = lex_p - len;
12044 
12045  if (!parser->token_info_enabled) return;
12046  ptinfo = ALLOC(token_info);
12047  ptinfo->token = token;
12048  ptinfo->linenum = ruby_sourceline;
12049  ptinfo->column = token_info_get_column(parser, t);
12050  ptinfo->nonspc = token_info_has_nonspaces(parser, t);
12051  ptinfo->next = parser->token_info;
12052 
12053  parser->token_info = ptinfo;
12054 }
12055 
12056 static void
12057 token_info_pop_gen(struct parser_params *parser, const char *token, size_t len)
12058 {
12059  int linenum;
12060  token_info *ptinfo = parser->token_info;
12061  const char *t = lex_p - len;
12062 
12063  if (!ptinfo) return;
12064  parser->token_info = ptinfo->next;
12065  linenum = ruby_sourceline;
12066  if (parser->token_info_enabled &&
12067  linenum != ptinfo->linenum && !ptinfo->nonspc &&
12068  !token_info_has_nonspaces(parser, t) &&
12069  token_info_get_column(parser, t) != ptinfo->column) {
12070  rb_warn3L(linenum,
12071  "mismatched indentations at '%s' with '%s' at %d",
12072  WARN_S(token), WARN_S(ptinfo->token), WARN_I(ptinfo->linenum));
12073  }
12074 
12075  xfree(ptinfo);
12076 }
12077 
12078 static int
12079 parser_precise_mbclen(struct parser_params *parser, const char *p)
12080 {
12082  if (!MBCLEN_CHARFOUND_P(len)) {
12083  compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
12084  return -1;
12085  }
12086  return len;
12087 }
12088 
12089 static int
12090 parser_yyerror(struct parser_params *parser, const char *msg)
12091 {
12092 #ifndef RIPPER
12093  const int max_line_margin = 30;
12094  const char *p, *pe;
12095  const char *pre = "", *post = "";
12096  const char *code = "", *caret = "", *newline = "";
12097  const char *lim;
12098  char *buf;
12099  long len;
12100  int i;
12101 
12102  p = lex_p;
12103  lim = p - lex_pbeg > max_line_margin ? p - max_line_margin : lex_pbeg;
12104  while (lim < p) {
12105  if (*(p-1) == '\n') break;
12106  p--;
12107  }
12108 
12109  pe = lex_p;
12110  lim = lex_pend - pe > max_line_margin ? pe + max_line_margin : lex_pend;
12111  while (pe < lim) {
12112  if (*pe == '\n') break;
12113  pe++;
12114  }
12115 
12116  len = pe - p;
12117  if (len > 4) {
12118  char *p2;
12119 
12120  if (len > max_line_margin * 2 + 10) {
12121  if (lex_p - p > max_line_margin) {
12122  p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
12123  pre = "...";
12124  }
12125  if (pe - lex_p > max_line_margin) {
12126  pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
12127  post = "...";
12128  }
12129  len = pe - p;
12130  }
12131  i = (int)(lex_p - p);
12132  buf = ALLOCA_N(char, i+2);
12133  code = p;
12134  caret = p2 = buf;
12135  while (i-- > 0) {
12136  *p2++ = *p++ == '\t' ? '\t' : ' ';
12137  }
12138  *p2++ = '^';
12139  *p2 = '\0';
12140  newline = "\n";
12141  }
12142  else {
12143  len = 0;
12144  }
12145  compile_error(PARSER_ARG "%s%s""%s%.*s%s%s""%s%s",
12146  msg, newline,
12147  pre, (int)len, code, post, newline,
12148  pre, caret);
12149 #else
12150  dispatch1(parse_error, STR_NEW2(msg));
12151  ripper_error();
12152 #endif /* !RIPPER */
12153  return 0;
12154 }
12155 
12156 static void parser_prepare(struct parser_params *parser);
12157 
12158 #ifndef RIPPER
12159 static VALUE
12161 {
12162  ID script_lines;
12163  CONST_ID(script_lines, "SCRIPT_LINES__");
12164  if (rb_const_defined_at(rb_cObject, script_lines)) {
12165  VALUE hash = rb_const_get_at(rb_cObject, script_lines);
12166  if (RB_TYPE_P(hash, T_HASH)) {
12167  VALUE lines = rb_ary_new();
12168  rb_hash_aset(hash, fname, lines);
12169  return lines;
12170  }
12171  }
12172  return 0;
12173 }
12174 
12175 static VALUE
12176 coverage(VALUE fname, int n)
12177 {
12178  VALUE coverages = rb_get_coverages();
12179  if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
12180  VALUE lines = n > 0 ? rb_ary_tmp_new_fill(n) : rb_ary_tmp_new(0);
12181  rb_hash_aset(coverages, fname, lines);
12182  return lines;
12183  }
12184  return 0;
12185 }
12186 
12187 static int
12189 {
12190  return strcmp(ruby_sourcefile, "-e") == 0;
12191 }
12192 
12193 static VALUE
12195 {
12196  int n;
12197  NODE *tree;
12198  struct parser_params *parser = (struct parser_params *)arg;
12199  VALUE cov = Qfalse;
12200 
12201  if (!compile_for_eval && rb_safe_level() == 0) {
12203  if (ruby_debug_lines && ruby_sourceline > 0) {
12204  VALUE str = STR_NEW0();
12205  n = ruby_sourceline;
12206  do {
12208  } while (--n);
12209  }
12210 
12211  if (!e_option_supplied(parser)) {
12213  cov = Qtrue;
12214  }
12215  }
12216 
12217  parser_prepare(parser);
12218 #ifndef RIPPER
12219 #define RUBY_DTRACE_PARSE_HOOK(name) \
12220  if (RUBY_DTRACE_PARSE_##name##_ENABLED()) { \
12221  RUBY_DTRACE_PARSE_##name(ruby_sourcefile, ruby_sourceline); \
12222  }
12223  RUBY_DTRACE_PARSE_HOOK(BEGIN);
12224 #endif
12225  n = yyparse((void*)parser);
12226 #ifndef RIPPER
12228 #endif
12229  ruby_debug_lines = 0;
12230  ruby_coverage = 0;
12231 
12232  lex_strterm = 0;
12233  lex_p = lex_pbeg = lex_pend = 0;
12234  lex_lastline = lex_nextline = 0;
12235  if (parser->error_p) {
12236  VALUE mesg = parser->error_buffer;
12237  if (!mesg) {
12238  mesg = rb_class_new_instance(0, 0, rb_eSyntaxError);
12239  }
12240  rb_set_errinfo(mesg);
12241  return 0;
12242  }
12243  tree = ruby_eval_tree;
12244  if (!tree) {
12245  tree = NEW_NIL();
12246  }
12247  else {
12248  VALUE opt = parser->compile_option;
12249  if (!opt) opt = rb_obj_hide(rb_ident_hash_new());
12250  rb_hash_aset(opt, rb_sym_intern_ascii_cstr("coverage_enabled"), cov);
12251  tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body, opt);
12252  }
12253  return (VALUE)tree;
12254 }
12255 
12256 static NODE*
12257 yycompile(struct parser_params *parser, VALUE fname, int line)
12258 {
12260  ruby_sourcefile = RSTRING_PTR(fname);
12261  ruby_sourceline = line - 1;
12262  return (NODE *)rb_suppress_tracing(yycompile0, (VALUE)parser);
12263 }
12264 #endif /* !RIPPER */
12265 
12266 static rb_encoding *
12268 {
12269  rb_encoding *enc = rb_enc_get(s);
12270  if (!rb_enc_asciicompat(enc)) {
12271  rb_raise(rb_eArgError, "invalid source encoding");
12272  }
12273  return enc;
12274 }
12275 
12276 static VALUE
12277 lex_get_str(struct parser_params *parser, VALUE s)
12278 {
12279  char *beg, *end, *start;
12280  long len;
12281 
12282  beg = RSTRING_PTR(s);
12283  len = RSTRING_LEN(s);
12284  start = beg;
12285  if (lex_gets_ptr) {
12286  if (len == lex_gets_ptr) return Qnil;
12287  beg += lex_gets_ptr;
12288  len -= lex_gets_ptr;
12289  }
12290  end = memchr(beg, '\n', len);
12291  if (end) len = ++end - beg;
12292  lex_gets_ptr += len;
12293  return rb_str_subseq(s, beg - start, len);
12294 }
12295 
12296 static VALUE
12298 {
12299  VALUE line = (*lex_gets)(parser, lex_input);
12300  if (NIL_P(line)) return line;
12302 #ifndef RIPPER
12303  if (ruby_debug_lines) {
12306  }
12307  if (ruby_coverage) {
12309  }
12310 #endif
12311  return line;
12312 }
12313 
12315 
12316 #ifndef RIPPER
12317 static NODE*
12318 parser_compile_string(VALUE vparser, VALUE fname, VALUE s, int line)
12319 {
12320  struct parser_params *parser;
12321  NODE *node;
12322 
12323  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
12325  lex_gets_ptr = 0;
12327  lex_pbeg = lex_p = lex_pend = 0;
12328 
12329  node = yycompile(parser, fname, line);
12330  RB_GC_GUARD(vparser); /* prohibit tail call optimization */
12331 
12332  return node;
12333 }
12334 
12335 NODE*
12336 rb_compile_string(const char *f, VALUE s, int line)
12337 {
12340 }
12341 
12342 NODE*
12343 rb_parser_compile_string(VALUE vparser, const char *f, VALUE s, int line)
12344 {
12345  return rb_parser_compile_string_path(vparser, rb_filesystem_str_new_cstr(f), s, line);
12346 }
12347 
12348 NODE*
12350 {
12352  return parser_compile_string(vparser, f, s, line);
12353 }
12354 
12355 NODE*
12356 rb_compile_cstr(const char *f, const char *s, int len, int line)
12357 {
12358  VALUE str = rb_str_new(s, len);
12360 }
12361 
12362 NODE*
12363 rb_parser_compile_cstr(VALUE vparser, const char *f, const char *s, int len, int line)
12364 {
12365  VALUE str = rb_str_new(s, len);
12366  return parser_compile_string(vparser, rb_filesystem_str_new_cstr(f), str, line);
12367 }
12368 
12370 
12371 static VALUE
12372 lex_io_gets(struct parser_params *parser, VALUE io)
12373 {
12374  return rb_io_gets_internal(io);
12375 }
12376 
12377 NODE*
12378 rb_compile_file(const char *f, VALUE file, int start)
12379 {
12380  VALUE vparser = rb_parser_new();
12381 
12382  return rb_parser_compile_file(vparser, f, file, start);
12383 }
12384 
12385 NODE*
12386 rb_parser_compile_file(VALUE vparser, const char *f, VALUE file, int start)
12387 {
12388  return rb_parser_compile_file_path(vparser, rb_filesystem_str_new_cstr(f), file, start);
12389 }
12390 
12391 NODE*
12392 rb_parser_compile_file_path(VALUE vparser, VALUE fname, VALUE file, int start)
12393 {
12394  struct parser_params *parser;
12395  NODE *node;
12396 
12397  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
12399  lex_input = file;
12400  lex_pbeg = lex_p = lex_pend = 0;
12401 
12402  node = yycompile(parser, fname, start);
12403  RB_GC_GUARD(vparser); /* prohibit tail call optimization */
12404 
12405  return node;
12406 }
12407 #endif /* !RIPPER */
12408 
12409 #define STR_FUNC_ESCAPE 0x01
12410 #define STR_FUNC_EXPAND 0x02
12411 #define STR_FUNC_REGEXP 0x04
12412 #define STR_FUNC_QWORDS 0x08
12413 #define STR_FUNC_SYMBOL 0x10
12414 #define STR_FUNC_INDENT 0x20
12415 #define STR_FUNC_LABEL 0x40
12416 #define STR_TERM_END -1
12417 
12420  str_squote = (0),
12428 };
12429 
12430 static VALUE
12431 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
12432 {
12433  VALUE str;
12434 
12435  str = rb_enc_str_new(p, n, enc);
12436  if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
12438  }
12439  else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
12441  }
12442  }
12443 
12444  return str;
12445 }
12446 
12447 #define lex_goto_eol(parser) ((parser)->lex.pcur = (parser)->lex.pend)
12448 #define lex_eol_p() (lex_p >= lex_pend)
12449 #define peek(c) peek_n((c), 0)
12450 #define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n])
12451 #define peekc() peekc_n(0)
12452 #define peekc_n(n) (lex_p+(n) < lex_pend ? (unsigned char)lex_p[n] : -1)
12453 
12454 static int
12456 {
12457  VALUE v = lex_nextline;
12458  lex_nextline = 0;
12459  if (!v) {
12460  if (parser->eofp)
12461  return -1;
12462 
12463  if (!lex_input || NIL_P(v = lex_getline(parser))) {
12464  parser->eofp = 1;
12465  lex_goto_eol(parser);
12466  return -1;
12467  }
12468  parser->cr_seen = FALSE;
12469  }
12470 #ifdef RIPPER
12471  if (parser->tokp < lex_pend) {
12472  if (!has_delayed_token()) {
12473  parser->delayed = rb_str_buf_new(1024);
12474  rb_enc_associate(parser->delayed, current_enc);
12475  rb_str_buf_cat(parser->delayed,
12476  parser->tokp, lex_pend - parser->tokp);
12477  parser->delayed_line = ruby_sourceline;
12478  parser->delayed_col = (int)(parser->tokp - lex_pbeg);
12479  }
12480  else {
12481  rb_str_buf_cat(parser->delayed,
12482  parser->tokp, lex_pend - parser->tokp);
12483  }
12484  }
12485 #endif
12486  if (heredoc_end > 0) {
12488  heredoc_end = 0;
12489  }
12490  ruby_sourceline++;
12491  parser->line_count++;
12492  lex_pbeg = lex_p = RSTRING_PTR(v);
12493  lex_pend = lex_p + RSTRING_LEN(v);
12494  ripper_flush(parser);
12495  lex_lastline = v;
12496  return 0;
12497 }
12498 
12499 static int
12500 parser_cr(struct parser_params *parser, int c)
12501 {
12502  if (peek('\n')) {
12503  lex_p++;
12504  c = '\n';
12505  }
12506  else if (!parser->cr_seen) {
12507  parser->cr_seen = TRUE;
12508  /* carried over with lex_nextline for nextc() */
12509  rb_warn0("encountered \\r in middle of line, treated as a mere space");
12510  }
12511  return c;
12512 }
12513 
12514 static inline int
12516 {
12517  int c;
12518 
12519  if (UNLIKELY(lex_p == lex_pend)) {
12520  if (parser_nextline(parser)) return -1;
12521  }
12522  c = (unsigned char)*lex_p++;
12523  if (UNLIKELY(c == '\r')) {
12524  c = parser_cr(parser, c);
12525  }
12526 
12527  return c;
12528 }
12529 
12530 static void
12531 parser_pushback(struct parser_params *parser, int c)
12532 {
12533  if (c == -1) return;
12534  lex_p--;
12535  if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
12536  lex_p--;
12537  }
12538 }
12539 
12540 #define was_bol() (lex_p == lex_pbeg + 1)
12541 
12542 #define tokfix() (tokenbuf[tokidx]='\0')
12543 #define tok() tokenbuf
12544 #define toklen() tokidx
12545 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
12546 
12547 static char*
12549 {
12550  tokidx = 0;
12552  if (!tokenbuf) {
12553  toksiz = 60;
12554  tokenbuf = ALLOC_N(char, 60);
12555  }
12556  if (toksiz > 4096) {
12557  toksiz = 60;
12558  REALLOC_N(tokenbuf, char, 60);
12559  }
12560  return tokenbuf;
12561 }
12562 
12563 static char *
12564 parser_tokspace(struct parser_params *parser, int n)
12565 {
12566  tokidx += n;
12567 
12568  if (tokidx >= toksiz) {
12569  do {toksiz *= 2;} while (toksiz < tokidx);
12570  REALLOC_N(tokenbuf, char, toksiz);
12571  }
12572  return &tokenbuf[tokidx-n];
12573 }
12574 
12575 static void
12576 parser_tokadd(struct parser_params *parser, int c)
12577 {
12578  tokenbuf[tokidx++] = (char)c;
12579  if (tokidx >= toksiz) {
12580  toksiz *= 2;
12581  REALLOC_N(tokenbuf, char, toksiz);
12582  }
12583 }
12584 
12585 static int
12586 parser_tok_hex(struct parser_params *parser, size_t *numlen)
12587 {
12588  int c;
12589 
12590  c = scan_hex(lex_p, 2, numlen);
12591  if (!*numlen) {
12592  yyerror("invalid hex escape");
12593  return 0;
12594  }
12595  lex_p += *numlen;
12596  return c;
12597 }
12598 
12599 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
12600 
12601 static int
12603  int regexp_literal, int wide)
12604 {
12605  size_t numlen;
12606  int codepoint = scan_hex(lex_p, wide ? 6 : 4, &numlen);
12607  if (wide ? (numlen == 0) : (numlen < 4)) {
12608  yyerror("invalid Unicode escape");
12609  return FALSE;
12610  }
12611  if (codepoint > 0x10ffff) {
12612  yyerror("invalid Unicode codepoint (too large)");
12613  return FALSE;
12614  }
12615  if ((codepoint & 0xfffff800) == 0xd800) {
12616  yyerror("invalid Unicode codepoint");
12617  return FALSE;
12618  }
12619  lex_p += numlen;
12620  if (regexp_literal) {
12621  tokcopy((int)numlen);
12622  }
12623  else if (codepoint >= 0x80) {
12624  *encp = rb_utf8_encoding();
12625  tokaddmbc(codepoint, *encp);
12626  }
12627  else {
12628  tokadd(codepoint);
12629  }
12630  return TRUE;
12631 }
12632 
12633 /* return value is for ?\u3042 */
12634 static int
12636  int string_literal, int symbol_literal, int regexp_literal)
12637 {
12638  /*
12639  * If string_literal is true, then we allow multiple codepoints
12640  * in \u{}, and add the codepoints to the current token.
12641  * Otherwise we're parsing a character literal and return a single
12642  * codepoint without adding it
12643  */
12644 
12645  const int open_brace = '{', close_brace = '}';
12646 
12647  if (regexp_literal) { tokadd('\\'); tokadd('u'); }
12648 
12649  if (peek(open_brace)) { /* handle \u{...} form */
12650  int c, last = nextc();
12651  do c = nextc(); while (ISSPACE(c));
12652  pushback(c);
12653  while (!string_literal || c != close_brace) {
12654  if (regexp_literal) tokadd(last);
12655  if (!parser_tokadd_codepoint(parser, encp, regexp_literal, TRUE)) {
12656  return 0;
12657  }
12658  while (ISSPACE(c = nextc())) last = c;
12659  pushback(c);
12660  if (!string_literal) break;
12661  }
12662 
12663  if (c != close_brace) {
12664  yyerror("unterminated Unicode escape");
12665  return 0;
12666  }
12667 
12668  if (regexp_literal) tokadd(close_brace);
12669  nextc();
12670  }
12671  else { /* handle \uxxxx form */
12672  if (!parser_tokadd_codepoint(parser, encp, regexp_literal, FALSE)) {
12673  return 0;
12674  }
12675  }
12676 
12677  return TRUE;
12678 }
12679 
12680 #define ESCAPE_CONTROL 1
12681 #define ESCAPE_META 2
12682 
12683 static int
12684 parser_read_escape(struct parser_params *parser, int flags,
12685  rb_encoding **encp)
12686 {
12687  int c;
12688  size_t numlen;
12689 
12690  switch (c = nextc()) {
12691  case '\\': /* Backslash */
12692  return c;
12693 
12694  case 'n': /* newline */
12695  return '\n';
12696 
12697  case 't': /* horizontal tab */
12698  return '\t';
12699 
12700  case 'r': /* carriage-return */
12701  return '\r';
12702 
12703  case 'f': /* form-feed */
12704  return '\f';
12705 
12706  case 'v': /* vertical tab */
12707  return '\13';
12708 
12709  case 'a': /* alarm(bell) */
12710  return '\007';
12711 
12712  case 'e': /* escape */
12713  return 033;
12714 
12715  case '0': case '1': case '2': case '3': /* octal constant */
12716  case '4': case '5': case '6': case '7':
12717  pushback(c);
12718  c = scan_oct(lex_p, 3, &numlen);
12719  lex_p += numlen;
12720  return c;
12721 
12722  case 'x': /* hex constant */
12723  c = tok_hex(&numlen);
12724  if (numlen == 0) return 0;
12725  return c;
12726 
12727  case 'b': /* backspace */
12728  return '\010';
12729 
12730  case 's': /* space */
12731  return ' ';
12732 
12733  case 'M':
12734  if (flags & ESCAPE_META) goto eof;
12735  if ((c = nextc()) != '-') {
12736  pushback(c);
12737  goto eof;
12738  }
12739  if ((c = nextc()) == '\\') {
12740  if (peek('u')) goto eof;
12741  return read_escape(flags|ESCAPE_META, encp) | 0x80;
12742  }
12743  else if (c == -1 || !ISASCII(c)) goto eof;
12744  else {
12745  return ((c & 0xff) | 0x80);
12746  }
12747 
12748  case 'C':
12749  if ((c = nextc()) != '-') {
12750  pushback(c);
12751  goto eof;
12752  }
12753  case 'c':
12754  if (flags & ESCAPE_CONTROL) goto eof;
12755  if ((c = nextc())== '\\') {
12756  if (peek('u')) goto eof;
12757  c = read_escape(flags|ESCAPE_CONTROL, encp);
12758  }
12759  else if (c == '?')
12760  return 0177;
12761  else if (c == -1 || !ISASCII(c)) goto eof;
12762  return c & 0x9f;
12763 
12764  eof:
12765  case -1:
12766  yyerror("Invalid escape character syntax");
12767  return '\0';
12768 
12769  default:
12770  return c;
12771  }
12772 }
12773 
12774 static void
12776 {
12777  int len = rb_enc_codelen(c, enc);
12778  rb_enc_mbcput(c, tokspace(len), enc);
12779 }
12780 
12781 static int
12783 {
12784  int c;
12785  int flags = 0;
12786  size_t numlen;
12787 
12788  first:
12789  switch (c = nextc()) {
12790  case '\n':
12791  return 0; /* just ignore */
12792 
12793  case '0': case '1': case '2': case '3': /* octal constant */
12794  case '4': case '5': case '6': case '7':
12795  {
12796  ruby_scan_oct(--lex_p, 3, &numlen);
12797  if (numlen == 0) goto eof;
12798  lex_p += numlen;
12799  tokcopy((int)numlen + 1);
12800  }
12801  return 0;
12802 
12803  case 'x': /* hex constant */
12804  {
12805  tok_hex(&numlen);
12806  if (numlen == 0) return -1;
12807  tokcopy((int)numlen + 2);
12808  }
12809  return 0;
12810 
12811  case 'M':
12812  if (flags & ESCAPE_META) goto eof;
12813  if ((c = nextc()) != '-') {
12814  pushback(c);
12815  goto eof;
12816  }
12817  tokcopy(3);
12818  flags |= ESCAPE_META;
12819  goto escaped;
12820 
12821  case 'C':
12822  if (flags & ESCAPE_CONTROL) goto eof;
12823  if ((c = nextc()) != '-') {
12824  pushback(c);
12825  goto eof;
12826  }
12827  tokcopy(3);
12828  goto escaped;
12829 
12830  case 'c':
12831  if (flags & ESCAPE_CONTROL) goto eof;
12832  tokcopy(2);
12833  flags |= ESCAPE_CONTROL;
12834  escaped:
12835  if ((c = nextc()) == '\\') {
12836  goto first;
12837  }
12838  else if (c == -1) goto eof;
12839  tokadd(c);
12840  return 0;
12841 
12842  eof:
12843  case -1:
12844  yyerror("Invalid escape character syntax");
12845  return -1;
12846 
12847  default:
12848  tokadd('\\');
12849  tokadd(c);
12850  }
12851  return 0;
12852 }
12853 
12854 static int
12856 {
12857  int kcode = 0;
12858  int kopt = 0;
12859  int options = 0;
12860  int c, opt, kc;
12861 
12862  newtok();
12863  while (c = nextc(), ISALPHA(c)) {
12864  if (c == 'o') {
12865  options |= RE_OPTION_ONCE;
12866  }
12867  else if (rb_char_to_option_kcode(c, &opt, &kc)) {
12868  if (kc >= 0) {
12869  if (kc != rb_ascii8bit_encindex()) kcode = c;
12870  kopt = opt;
12871  }
12872  else {
12873  options |= opt;
12874  }
12875  }
12876  else {
12877  tokadd(c);
12878  }
12879  }
12880  options |= kopt;
12881  pushback(c);
12882  if (toklen()) {
12883  tokfix();
12884  compile_error(PARSER_ARG "unknown regexp option%s - %s",
12885  toklen() > 1 ? "s" : "", tok());
12886  }
12887  return options | RE_OPTION_ENCODING(kcode);
12888 }
12889 
12890 static void
12892 {
12893  rb_str_free(str);
12894  rb_gc_force_recycle(str);
12895 }
12896 
12897 static int
12898 parser_tokadd_mbchar(struct parser_params *parser, int c)
12899 {
12900  int len = parser_precise_mbclen(parser, lex_p-1);
12901  if (len < 0) return -1;
12902  tokadd(c);
12903  lex_p += --len;
12904  if (len > 0) tokcopy(len);
12905  return c;
12906 }
12907 
12908 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c))
12909 
12910 static inline int
12912 {
12913  switch (c) {
12914  case '$': case '*': case '+': case '.':
12915  case '?': case '^': case '|':
12916  case ')': case ']': case '}': case '>':
12917  return TRUE;
12918  default:
12919  return FALSE;
12920  }
12921 }
12922 
12923 static int
12925 {
12926  if (heredoc_line_indent == -1) {
12927  if (c == '\n') heredoc_line_indent = 0;
12928  }
12929  else {
12930  if (c == ' ') {
12932  return TRUE;
12933  }
12934  else if (c == '\t') {
12935  int w = (heredoc_line_indent / TAB_WIDTH) + 1;
12937  return TRUE;
12938  }
12939  else if (c != '\n') {
12942  }
12943  heredoc_line_indent = -1;
12944  }
12945  }
12946  return FALSE;
12947 }
12948 
12949 static int
12951  int func, int term, int paren, long *nest,
12952  rb_encoding **encp)
12953 {
12954  int c;
12955  int has_nonascii = 0;
12956  rb_encoding *enc = *encp;
12957  char *errbuf = 0;
12958  static const char mixed_msg[] = "%s mixed within %s source";
12959 
12960 #define mixed_error(enc1, enc2) if (!errbuf) { \
12961  size_t len = sizeof(mixed_msg) - 4; \
12962  len += strlen(rb_enc_name(enc1)); \
12963  len += strlen(rb_enc_name(enc2)); \
12964  errbuf = ALLOCA_N(char, len); \
12965  snprintf(errbuf, len, mixed_msg, \
12966  rb_enc_name(enc1), \
12967  rb_enc_name(enc2)); \
12968  yyerror(errbuf); \
12969  }
12970 #define mixed_escape(beg, enc1, enc2) do { \
12971  const char *pos = lex_p; \
12972  lex_p = (beg); \
12973  mixed_error((enc1), (enc2)); \
12974  lex_p = pos; \
12975  } while (0)
12976 
12977  while ((c = nextc()) != -1) {
12978  if (heredoc_indent > 0) {
12979  parser_update_heredoc_indent(parser, c);
12980  }
12981 
12982  if (paren && c == paren) {
12983  ++*nest;
12984  }
12985  else if (c == term) {
12986  if (!nest || !*nest) {
12987  pushback(c);
12988  break;
12989  }
12990  --*nest;
12991  }
12992  else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
12993  int c2 = *lex_p;
12994  if (c2 == '$' || c2 == '@' || c2 == '{') {
12995  pushback(c);
12996  break;
12997  }
12998  }
12999  else if (c == '\\') {
13000  const char *beg = lex_p - 1;
13001  c = nextc();
13002  switch (c) {
13003  case '\n':
13004  if (func & STR_FUNC_QWORDS) break;
13005  if (func & STR_FUNC_EXPAND) continue;
13006  tokadd('\\');
13007  break;
13008 
13009  case '\\':
13010  if (func & STR_FUNC_ESCAPE) tokadd(c);
13011  break;
13012 
13013  case 'u':
13014  if ((func & STR_FUNC_EXPAND) == 0) {
13015  tokadd('\\');
13016  break;
13017  }
13018  parser_tokadd_utf8(parser, &enc, 1,
13019  func & STR_FUNC_SYMBOL,
13020  func & STR_FUNC_REGEXP);
13021  if (has_nonascii && enc != *encp) {
13022  mixed_escape(beg, enc, *encp);
13023  }
13024  continue;
13025 
13026  default:
13027  if (c == -1) return -1;
13028  if (!ISASCII(c)) {
13029  if ((func & STR_FUNC_EXPAND) == 0) tokadd('\\');
13030  goto non_ascii;
13031  }
13032  if (func & STR_FUNC_REGEXP) {
13033  if (c == term && !simple_re_meta(c)) {
13034  tokadd(c);
13035  continue;
13036  }
13037  pushback(c);
13038  if ((c = tokadd_escape(&enc)) < 0)
13039  return -1;
13040  if (has_nonascii && enc != *encp) {
13041  mixed_escape(beg, enc, *encp);
13042  }
13043  continue;
13044  }
13045  else if (func & STR_FUNC_EXPAND) {
13046  pushback(c);
13047  if (func & STR_FUNC_ESCAPE) tokadd('\\');
13048  c = read_escape(0, &enc);
13049  }
13050  else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
13051  /* ignore backslashed spaces in %w */
13052  }
13053  else if (c != term && !(paren && c == paren)) {
13054  tokadd('\\');
13055  pushback(c);
13056  continue;
13057  }
13058  }
13059  }
13060  else if (!parser_isascii()) {
13061  non_ascii:
13062  has_nonascii = 1;
13063  if (enc != *encp) {
13064  mixed_error(enc, *encp);
13065  continue;
13066  }
13067  if (tokadd_mbchar(c) == -1) return -1;
13068  continue;
13069  }
13070  else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
13071  pushback(c);
13072  break;
13073  }
13074  if (c & 0x80) {
13075  has_nonascii = 1;
13076  if (enc != *encp) {
13077  mixed_error(enc, *encp);
13078  continue;
13079  }
13080  }
13081  tokadd(c);
13082  }
13083  *encp = enc;
13084  return c;
13085 }
13086 
13087 #define NEW_STRTERM(func, term, paren) \
13088  rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
13089 
13090 #ifdef RIPPER
13091 static void
13092 ripper_flush_string_content(struct parser_params *parser, rb_encoding *enc)
13093 {
13094  VALUE content = yylval.val;
13095  if (!ripper_is_node_yylval(content))
13096  content = ripper_new_yylval(0, 0, content);
13097  if (has_delayed_token()) {
13098  ptrdiff_t len = lex_p - parser->tokp;
13099  if (len > 0) {
13100  rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
13101  }
13103  parser->tokp = lex_p;
13104  RNODE(content)->nd_rval = yylval.val;
13105  }
13107  if (yylval.val != content)
13108  RNODE(content)->nd_rval = yylval.val;
13109  yylval.val = content;
13110 }
13111 
13112 #define flush_string_content(enc) ripper_flush_string_content(parser, (enc))
13113 #else
13114 #define flush_string_content(enc) ((void)(enc))
13115 #endif
13116 
13117 RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20 + 31) / 32];
13118 /* this can be shared with ripper, since it's independent from struct
13119  * parser_params. */
13120 #ifndef RIPPER
13121 #define BIT(c, idx) (((c) / 32 - 1 == idx) ? (1U << ((c) % 32)) : 0)
13122 #define SPECIAL_PUNCT(idx) ( \
13123  BIT('~', idx) | BIT('*', idx) | BIT('$', idx) | BIT('?', idx) | \
13124  BIT('!', idx) | BIT('@', idx) | BIT('/', idx) | BIT('\\', idx) | \
13125  BIT(';', idx) | BIT(',', idx) | BIT('.', idx) | BIT('=', idx) | \
13126  BIT(':', idx) | BIT('<', idx) | BIT('>', idx) | BIT('\"', idx) | \
13127  BIT('&', idx) | BIT('`', idx) | BIT('\'', idx) | BIT('+', idx) | \
13128  BIT('0', idx))
13129 const unsigned int ruby_global_name_punct_bits[] = {
13130  SPECIAL_PUNCT(0),
13131  SPECIAL_PUNCT(1),
13132  SPECIAL_PUNCT(2),
13133 };
13134 #undef BIT
13135 #undef SPECIAL_PUNCT
13136 #endif
13137 
13138 static int
13140 {
13141  int c;
13142  const char *p = lex_p;
13143 
13144  if (p + 1 >= lex_pend) return 0;
13145  c = *p++;
13146  switch (c) {
13147  case '$':
13148  if ((c = *p) == '-') {
13149  if (++p >= lex_pend) return 0;
13150  c = *p;
13151  }
13152  else if (is_global_name_punct(c) || ISDIGIT(c)) {
13153  return tSTRING_DVAR;
13154  }
13155  break;
13156  case '@':
13157  if ((c = *p) == '@') {
13158  if (++p >= lex_pend) return 0;
13159  c = *p;
13160  }
13161  break;
13162  case '{':
13163  lex_p = p;
13164  command_start = TRUE;
13165  return tSTRING_DBEG;
13166  default:
13167  return 0;
13168  }
13169  if (!ISASCII(c) || c == '_' || ISALPHA(c))
13170  return tSTRING_DVAR;
13171  return 0;
13172 }
13173 
13174 static inline int
13176 {
13177  if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
13180  return tREGEXP_END;
13181 }
13182 
13183 static int
13184 parser_parse_string(struct parser_params *parser, NODE *quote)
13185 {
13186  int func = (int)quote->nd_func;
13187  int term = nd_term(quote);
13188  int paren = nd_paren(quote);
13189  int c, space = 0;
13191 
13192  if (term == STR_TERM_END) return tSTRING_END;
13193  c = nextc();
13194  if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
13195  do {c = nextc();} while (ISSPACE(c));
13196  space = 1;
13197  }
13198  if (c == term && !quote->nd_nest) {
13199  if (func & STR_FUNC_QWORDS) {
13200  quote->u2.id = STR_TERM_END;
13201  return ' ';
13202  }
13203  return parser_string_term(parser, func);
13204  }
13205  if (space) {
13206  pushback(c);
13207  return ' ';
13208  }
13209  newtok();
13210  if ((func & STR_FUNC_EXPAND) && c == '#') {
13211  int t = parser_peek_variable_name(parser);
13212  if (t) return t;
13213  tokadd('#');
13214  c = nextc();
13215  }
13216  pushback(c);
13217  if (tokadd_string(func, term, paren, &quote->nd_nest,
13218  &enc) == -1) {
13219  ruby_sourceline = nd_line(quote);
13220  if (func & STR_FUNC_REGEXP) {
13221  if (parser->eofp)
13222  compile_error(PARSER_ARG "unterminated regexp meets end of file");
13223  return tREGEXP_END;
13224  }
13225  else {
13226  if (parser->eofp)
13227  compile_error(PARSER_ARG "unterminated string meets end of file");
13228  return tSTRING_END;
13229  }
13230  }
13231 
13232  tokfix();
13233  set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
13234  flush_string_content(enc);
13235 
13236  return tSTRING_CONTENT;
13237 }
13238 
13239 static int
13241 {
13242  int c = nextc(), term, func = 0;
13243  int token = tSTRING_BEG;
13244  long len;
13245  int newline = 0;
13246  int indent = 0;
13247 
13248  if (c == '-') {
13249  c = nextc();
13250  func = STR_FUNC_INDENT;
13251  }
13252  else if (c == '~') {
13253  c = nextc();
13254  func = STR_FUNC_INDENT;
13255  indent = INT_MAX;
13256  }
13257  switch (c) {
13258  case '\'':
13259  func |= str_squote; goto quoted;
13260  case '"':
13261  func |= str_dquote; goto quoted;
13262  case '`':
13263  token = tXSTRING_BEG;
13264  func |= str_xquote; goto quoted;
13265 
13266  quoted:
13267  newtok();
13268  tokadd(func);
13269  term = c;
13270  while ((c = nextc()) != -1 && c != term) {
13271  if (tokadd_mbchar(c) == -1) return 0;
13272  if (!newline && c == '\n') newline = 1;
13273  else if (newline) newline = 2;
13274  }
13275  if (c == -1) {
13276  compile_error(PARSER_ARG "unterminated here document identifier");
13277  return 0;
13278  }
13279  switch (newline) {
13280  case 1:
13281  rb_warn0("here document identifier ends with a newline");
13282  if (--tokidx > 0 && tokenbuf[tokidx] == '\r') --tokidx;
13283  break;
13284  case 2:
13285  compile_error(PARSER_ARG "here document identifier across newlines, never match");
13286  return -1;
13287  }
13288  break;
13289 
13290  default:
13291  if (!parser_is_identchar()) {
13292  pushback(c);
13293  if (func & STR_FUNC_INDENT) {
13294  pushback(indent > 0 ? '~' : '-');
13295  }
13296  return 0;
13297  }
13298  newtok();
13299  tokadd(func |= str_dquote);
13300  do {
13301  if (tokadd_mbchar(c) == -1) return 0;
13302  } while ((c = nextc()) != -1 && parser_is_identchar());
13303  pushback(c);
13304  break;
13305  }
13306 
13307  tokfix();
13309  len = lex_p - lex_pbeg;
13310  lex_goto_eol(parser);
13312  STR_NEW(tok(), toklen()), /* nd_lit */
13313  len, /* nd_nth */
13314  lex_lastline); /* nd_orig */
13316  ripper_flush(parser);
13317  heredoc_indent = indent;
13318  heredoc_line_indent = 0;
13319  return token;
13320 }
13321 
13322 static void
13324 {
13325  VALUE line;
13326 
13327  lex_strterm = 0;
13328  line = here->nd_orig;
13329  lex_lastline = line;
13330  lex_pbeg = RSTRING_PTR(line);
13331  lex_pend = lex_pbeg + RSTRING_LEN(line);
13332  lex_p = lex_pbeg + here->nd_nth;
13334  ruby_sourceline = nd_line(here);
13335  dispose_string(here->nd_lit);
13336  rb_gc_force_recycle((VALUE)here);
13337  ripper_flush(parser);
13338 }
13339 
13340 static int
13341 dedent_string(VALUE string, int width)
13342 {
13343  char *str;
13344  long len;
13345  int i, col = 0;
13346 
13347  RSTRING_GETMEM(string, str, len);
13348  for (i = 0; i < len && col < width; i++) {
13349  if (str[i] == ' ') {
13350  col++;
13351  }
13352  else if (str[i] == '\t') {
13353  int n = TAB_WIDTH * (col / TAB_WIDTH + 1);
13354  if (n > width) break;
13355  col = n;
13356  }
13357  else {
13358  break;
13359  }
13360  }
13361  if (!i) return 0;
13362  rb_str_modify(string);
13363  str = RSTRING_PTR(string);
13364  if (RSTRING_LEN(string) != len)
13365  rb_fatal("literal string changed: %+"PRIsVALUE, string);
13366  MEMMOVE(str, str + i, char, len - i);
13367  rb_str_set_len(string, len - i);
13368  return i;
13369 }
13370 
13371 #ifndef RIPPER
13372 static NODE *
13374 {
13375  NODE *node, *str_node;
13376  int bol = TRUE;
13377  int indent = heredoc_indent;
13378 
13379  if (indent <= 0) return root;
13380  heredoc_indent = 0;
13381  if (!root) return root;
13382 
13383  node = str_node = root;
13384  if (nd_type(root) == NODE_ARRAY) str_node = root->nd_head;
13385 
13386  while (str_node) {
13387  VALUE lit = str_node->nd_lit;
13388  if (bol) dedent_string(lit, indent);
13389  bol = TRUE;
13390 
13391  str_node = 0;
13392  while ((node = node->nd_next) != 0 && nd_type(node) == NODE_ARRAY) {
13393  if ((str_node = node->nd_head) != 0) {
13394  enum node_type type = nd_type(str_node);
13395  if (type == NODE_STR || type == NODE_DSTR) break;
13396  bol = FALSE;
13397  str_node = 0;
13398  }
13399  }
13400  }
13401  return root;
13402 }
13403 #else /* RIPPER */
13404 static VALUE
13405 parser_heredoc_dedent(struct parser_params *parser, VALUE array)
13406 {
13407  int indent = heredoc_indent;
13408 
13409  if (indent <= 0) return array;
13410  heredoc_indent = 0;
13411  dispatch2(heredoc_dedent, array, INT2NUM(indent));
13412  return array;
13413 }
13414 
13415 static VALUE
13416 parser_dedent_string(VALUE self, VALUE input, VALUE width)
13417 {
13418  int wid, col;
13419 
13420  StringValue(input);
13421  wid = NUM2UINT(width);
13422  col = dedent_string(input, wid);
13423  return INT2NUM(col);
13424 }
13425 #endif
13426 
13427 static int
13429  const char *eos, long len, int indent)
13430 {
13431  const char *p = lex_pbeg;
13432  long n;
13433 
13434  if (indent) {
13435  while (*p && ISSPACE(*p)) p++;
13436  }
13437  n = lex_pend - (p + len);
13438  if (n < 0) return FALSE;
13439  if (n > 0 && p[len] != '\n') {
13440  if (p[len] != '\r') return FALSE;
13441  if (n <= 1 || p[len+1] != '\n') return FALSE;
13442  }
13443  return strncmp(eos, p, len) == 0;
13444 }
13445 
13446 #define NUM_SUFFIX_R (1<<0)
13447 #define NUM_SUFFIX_I (1<<1)
13448 #define NUM_SUFFIX_ALL 3
13449 
13450 static int
13452 {
13453  int c, result = 0;
13454  const char *lastp = lex_p;
13455 
13456  while ((c = nextc()) != -1) {
13457  if ((mask & NUM_SUFFIX_I) && c == 'i') {
13458  result |= (mask & NUM_SUFFIX_I);
13459  mask &= ~NUM_SUFFIX_I;
13460  /* r after i, rational of complex is disallowed */
13461  mask &= ~NUM_SUFFIX_R;
13462  continue;
13463  }
13464  if ((mask & NUM_SUFFIX_R) && c == 'r') {
13465  result |= (mask & NUM_SUFFIX_R);
13466  mask &= ~NUM_SUFFIX_R;
13467  continue;
13468  }
13469  if (!ISASCII(c) || ISALPHA(c) || c == '_') {
13470  lex_p = lastp;
13471  return 0;
13472  }
13473  pushback(c);
13474  if (c == '.') {
13475  c = peekc_n(1);
13476  if (ISDIGIT(c)) {
13477  yyerror("unexpected fraction part after numeric literal");
13478  lex_p += 2;
13479  while (parser_is_identchar()) nextc();
13480  }
13481  }
13482  break;
13483  }
13484  return result;
13485 }
13486 
13487 static int
13488 parser_set_number_literal(struct parser_params *parser, VALUE v, int type, int suffix)
13489 {
13490  if (suffix & NUM_SUFFIX_I) {
13491  v = rb_complex_raw(INT2FIX(0), v);
13492  type = tIMAGINARY;
13493  }
13494  set_yylval_literal(v);
13495  SET_LEX_STATE(EXPR_END|EXPR_ENDARG);
13496  return type;
13497 }
13498 
13499 static int
13500 parser_set_integer_literal(struct parser_params *parser, VALUE v, int suffix)
13501 {
13502  int type = tINTEGER;
13503  if (suffix & NUM_SUFFIX_R) {
13504  v = rb_rational_raw1(v);
13505  type = tRATIONAL;
13506  }
13507  return set_number_literal(v, type, suffix);
13508 }
13509 
13510 #ifdef RIPPER
13511 static void
13512 ripper_dispatch_heredoc_end(struct parser_params *parser)
13513 {
13514  VALUE str;
13515  if (has_delayed_token())
13517  str = STR_NEW(parser->tokp, lex_pend - parser->tokp);
13518  ripper_dispatch1(parser, ripper_token2eventid(tHEREDOC_END), str);
13519  lex_goto_eol(parser);
13520  ripper_flush(parser);
13521 }
13522 
13523 #define dispatch_heredoc_end() ripper_dispatch_heredoc_end(parser)
13524 #else
13525 #define dispatch_heredoc_end() ((void)0)
13526 #endif
13527 
13528 static int
13530 {
13531  int c, func, indent = 0;
13532  const char *eos, *p, *pend;
13533  long len;
13534  VALUE str = 0;
13536 
13537  eos = RSTRING_PTR(here->nd_lit);
13538  len = RSTRING_LEN(here->nd_lit) - 1;
13539  indent = (func = *eos++) & STR_FUNC_INDENT;
13540 
13541  if ((c = nextc()) == -1) {
13542  error:
13543  compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
13544 #ifdef RIPPER
13545  if (!has_delayed_token()) {
13547  }
13548  else {
13549  if (str) {
13550  rb_str_append(parser->delayed, str);
13551  }
13552  else if ((len = lex_p - parser->tokp) > 0) {
13553  if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
13554  int cr = ENC_CODERANGE_UNKNOWN;
13555  rb_str_coderange_scan_restartable(parser->tokp, lex_p, enc, &cr);
13556  if (cr != ENC_CODERANGE_7BIT &&
13558  enc != rb_utf8_encoding()) {
13559  enc = rb_ascii8bit_encoding();
13560  }
13561  }
13562  rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
13563  }
13565  }
13566  lex_goto_eol(parser);
13567 #endif
13568  restore:
13570  return 0;
13571  }
13572  if (was_bol() && whole_match_p(eos, len, indent)) {
13575  return tSTRING_END;
13576  }
13577 
13578  if (!(func & STR_FUNC_EXPAND)) {
13579  do {
13581  pend = lex_pend;
13582  if (pend > p) {
13583  switch (pend[-1]) {
13584  case '\n':
13585  if (--pend == p || pend[-1] != '\r') {
13586  pend++;
13587  break;
13588  }
13589  case '\r':
13590  --pend;
13591  }
13592  }
13593 
13594  if (heredoc_indent > 0) {
13595  long i = 0;
13596  while (p + i < pend && parser_update_heredoc_indent(parser, p[i]))
13597  i++;
13598  heredoc_line_indent = 0;
13599  }
13600 
13601  if (str)
13602  rb_str_cat(str, p, pend - p);
13603  else
13604  str = STR_NEW(p, pend - p);
13605  if (pend < lex_pend) rb_str_cat(str, "\n", 1);
13606  lex_goto_eol(parser);
13607  if (heredoc_indent > 0) {
13608  set_yylval_str(str);
13609  flush_string_content(enc);
13610  return tSTRING_CONTENT;
13611  }
13612  if (nextc() == -1) {
13613  if (str) {
13614  dispose_string(str);
13615  str = 0;
13616  }
13617  goto error;
13618  }
13619  } while (!whole_match_p(eos, len, indent));
13620  }
13621  else {
13622  /* int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
13623  newtok();
13624  if (c == '#') {
13625  int t = parser_peek_variable_name(parser);
13626  if (t) return t;
13627  tokadd('#');
13628  c = nextc();
13629  }
13630  do {
13631  pushback(c);
13632  if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
13633  if (parser->eofp) goto error;
13634  goto restore;
13635  }
13636  if (c != '\n') {
13637  flush:
13638  set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
13639  flush_string_content(enc);
13640  return tSTRING_CONTENT;
13641  }
13642  tokadd(nextc());
13643  if (heredoc_indent > 0) {
13644  lex_goto_eol(parser);
13645  goto flush;
13646  }
13647  /* if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
13648  if ((c = nextc()) == -1) goto error;
13649  } while (!whole_match_p(eos, len, indent));
13650  str = STR_NEW3(tok(), toklen(), enc, func);
13651  }
13653 #ifdef RIPPER
13654  str = ripper_new_yylval(ripper_token2eventid(tSTRING_CONTENT),
13655  yylval.val, str);
13656 #endif
13658  lex_strterm = NEW_STRTERM(func, STR_TERM_END, 0);
13659  set_yylval_str(str);
13660  return tSTRING_CONTENT;
13661 }
13662 
13663 #include "lex.c"
13664 
13665 static void
13666 arg_ambiguous_gen(struct parser_params *parser, char c)
13667 {
13668 #ifndef RIPPER
13669  rb_warning1("ambiguous first argument; put parentheses or a space even after `%c' operator", WARN_I(c));
13670 #else
13671  dispatch1(arg_ambiguous, rb_usascii_str_new(&c, 1));
13672 #endif
13673 }
13674 #define arg_ambiguous(c) (arg_ambiguous_gen(parser, (c)), 1)
13675 
13676 static ID
13678 {
13679  switch (id_type(lhs)) {
13680  case ID_LOCAL:
13681  break;
13682 #ifndef RIPPER
13683  case ID_CONST:
13684  yyerror("formal argument cannot be a constant");
13685  return 0;
13686  case ID_INSTANCE:
13687  yyerror("formal argument cannot be an instance variable");
13688  return 0;
13689  case ID_GLOBAL:
13690  yyerror("formal argument cannot be a global variable");
13691  return 0;
13692  case ID_CLASS:
13693  yyerror("formal argument cannot be a class variable");
13694  return 0;
13695  default:
13696  yyerror("formal argument must be local variable");
13697  return 0;
13698 #else
13699  default:
13700  lhs = dispatch1(param_error, lhs);
13701  ripper_error();
13702  return 0;
13703 #endif
13704  }
13705  shadowing_lvar(lhs);
13706  return lhs;
13707 }
13708 
13709 static int
13710 lvar_defined_gen(struct parser_params *parser, ID id)
13711 {
13712  return (dyna_in_block() && dvar_defined_get(id)) || local_id(id);
13713 }
13714 
13715 /* emacsen -*- hack */
13716 static long
13717 parser_encode_length(struct parser_params *parser, const char *name, long len)
13718 {
13719  long nlen;
13720 
13721  if (len > 5 && name[nlen = len - 5] == '-') {
13722  if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
13723  return nlen;
13724  }
13725  if (len > 4 && name[nlen = len - 4] == '-') {
13726  if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
13727  return nlen;
13728  if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
13729  !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
13730  /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */
13731  return nlen;
13732  }
13733  return len;
13734 }
13735 
13736 static void
13737 parser_set_encode(struct parser_params *parser, const char *name)
13738 {
13739  int idx = rb_enc_find_index(name);
13740  rb_encoding *enc;
13741  VALUE excargs[3];
13742 
13743  if (idx < 0) {
13744  excargs[1] = rb_sprintf("unknown encoding name: %s", name);
13745  error:
13746  excargs[0] = rb_eArgError;
13747  excargs[2] = rb_make_backtrace();
13749  rb_exc_raise(rb_make_exception(3, excargs));
13750  }
13751  enc = rb_enc_from_index(idx);
13752  if (!rb_enc_asciicompat(enc)) {
13753  excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
13754  goto error;
13755  }
13756  parser->enc = enc;
13757 #ifndef RIPPER
13758  if (ruby_debug_lines) {
13759  VALUE lines = ruby_debug_lines;
13760  long i, n = RARRAY_LEN(lines);
13761  for (i = 0; i < n; ++i) {
13762  rb_enc_associate_index(RARRAY_AREF(lines, i), idx);
13763  }
13764  }
13765 #endif
13766 }
13767 
13768 static int
13770 {
13771  const char *p = lex_pbeg, *pend = lex_p - 1;
13772  if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
13773  while (p < pend) {
13774  if (!ISSPACE(*p)) return 0;
13775  p++;
13776  }
13777  return 1;
13778 }
13779 
13780 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
13781 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
13782 
13783 static void
13784 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
13785 {
13786  if (!comment_at_top(parser)) {
13787  return;
13788  }
13789  parser_set_encode(parser, val);
13790 }
13791 
13792 static int
13793 parser_get_bool(struct parser_params *parser, const char *name, const char *val)
13794 {
13795  switch (*val) {
13796  case 't': case 'T':
13797  if (strcasecmp(val, "true") == 0) {
13798  return TRUE;
13799  }
13800  break;
13801  case 'f': case 'F':
13802  if (strcasecmp(val, "false") == 0) {
13803  return FALSE;
13804  }
13805  break;
13806  }
13807  rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val);
13808  return -1;
13809 }
13810 
13811 static void
13812 parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
13813 {
13814  int b = parser_get_bool(parser, name, val);
13815  if (b >= 0) parser->token_info_enabled = b;
13816 }
13817 
13818 static void
13819 parser_set_compile_option_flag(struct parser_params *parser, const char *name, const char *val)
13820 {
13821  int b;
13822 
13823  if (parser->token_seen) {
13824  rb_warning1("`%s' is ignored after any tokens", WARN_S(name));
13825  return;
13826  }
13827 
13828  b = parser_get_bool(parser, name, val);
13829  if (b < 0) return;
13830 
13831  if (!parser->compile_option)
13833  rb_hash_aset(parser->compile_option, ID2SYM(rb_intern(name)),
13834  (b ? Qtrue : Qfalse));
13835 }
13836 
13837 # if WARN_PAST_SCOPE
13838 static void
13839 parser_set_past_scope(struct parser_params *parser, const char *name, const char *val)
13840 {
13841  int b = parser_get_bool(parser, name, val);
13842  if (b >= 0) parser->past_scope_enabled = b;
13843 }
13844 # endif
13845 
13847  const char *name;
13850 };
13851 
13852 static const struct magic_comment magic_comments[] = {
13854  {"encoding", magic_comment_encoding, parser_encode_length},
13855  {"frozen_string_literal", parser_set_compile_option_flag},
13856  {"warn_indent", parser_set_token_info},
13857 # if WARN_PAST_SCOPE
13858  {"warn_past_scope", parser_set_past_scope},
13859 # endif
13860 };
13861 
13862 static const char *
13863 magic_comment_marker(const char *str, long len)
13864 {
13865  long i = 2;
13866 
13867  while (i < len) {
13868  switch (str[i]) {
13869  case '-':
13870  if (str[i-1] == '*' && str[i-2] == '-') {
13871  return str + i + 1;
13872  }
13873  i += 2;
13874  break;
13875  case '*':
13876  if (i + 1 >= len) return 0;
13877  if (str[i+1] != '-') {
13878  i += 4;
13879  }
13880  else if (str[i-1] != '-') {
13881  i += 2;
13882  }
13883  else {
13884  return str + i + 2;
13885  }
13886  break;
13887  default:
13888  i += 3;
13889  break;
13890  }
13891  }
13892  return 0;
13893 }
13894 
13895 static int
13896 parser_magic_comment(struct parser_params *parser, const char *str, long len)
13897 {
13898  int indicator = 0;
13899  VALUE name = 0, val = 0;
13900  const char *beg, *end, *vbeg, *vend;
13901 #define str_copy(_s, _p, _n) ((_s) \
13902  ? (void)(rb_str_resize((_s), (_n)), \
13903  MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
13904  : (void)((_s) = STR_NEW((_p), (_n))))
13905 
13906  if (len <= 7) return FALSE;
13907  if (!!(beg = magic_comment_marker(str, len))) {
13908  if (!(end = magic_comment_marker(beg, str + len - beg)))
13909  return FALSE;
13910  indicator = TRUE;
13911  str = beg;
13912  len = end - beg - 3;
13913  }
13914 
13915  /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
13916  while (len > 0) {
13917  const struct magic_comment *p = magic_comments;
13918  char *s;
13919  int i;
13920  long n = 0;
13921 
13922  for (; len > 0 && *str; str++, --len) {
13923  switch (*str) {
13924  case '\'': case '"': case ':': case ';':
13925  continue;
13926  }
13927  if (!ISSPACE(*str)) break;
13928  }
13929  for (beg = str; len > 0; str++, --len) {
13930  switch (*str) {
13931  case '\'': case '"': case ':': case ';':
13932  break;
13933  default:
13934  if (ISSPACE(*str)) break;
13935  continue;
13936  }
13937  break;
13938  }
13939  for (end = str; len > 0 && ISSPACE(*str); str++, --len);
13940  if (!len) break;
13941  if (*str != ':') {
13942  if (!indicator) return FALSE;
13943  continue;
13944  }
13945 
13946  do str++; while (--len > 0 && ISSPACE(*str));
13947  if (!len) break;
13948  if (*str == '"') {
13949  for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
13950  if (*str == '\\') {
13951  --len;
13952  ++str;
13953  }
13954  }
13955  vend = str;
13956  if (len) {
13957  --len;
13958  ++str;
13959  }
13960  }
13961  else {
13962  for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
13963  vend = str;
13964  }
13965  if (indicator) {
13966  while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
13967  }
13968  else {
13969  while (len > 0 && (ISSPACE(*str))) --len, str++;
13970  if (len) return FALSE;
13971  }
13972 
13973  n = end - beg;
13974  str_copy(name, beg, n);
13975  s = RSTRING_PTR(name);
13976  for (i = 0; i < n; ++i) {
13977  if (s[i] == '-') s[i] = '_';
13978  }
13979  do {
13980  if (STRNCASECMP(p->name, s, n) == 0 && !p->name[n]) {
13981  n = vend - vbeg;
13982  if (p->length) {
13983  n = (*p->length)(parser, vbeg, n);
13984  }
13985  str_copy(val, vbeg, n);
13986  (*p->func)(parser, p->name, RSTRING_PTR(val));
13987  break;
13988  }
13989  } while (++p < magic_comments + numberof(magic_comments));
13990 #ifdef RIPPER
13991  str_copy(val, vbeg, vend - vbeg);
13992  dispatch2(magic_comment, name, val);
13993 #endif
13994  }
13995 
13996  return TRUE;
13997 }
13998 
13999 static void
14000 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
14001 {
14002  int sep = 0;
14003  const char *beg = str;
14004  VALUE s;
14005 
14006  for (;;) {
14007  if (send - str <= 6) return;
14008  switch (str[6]) {
14009  case 'C': case 'c': str += 6; continue;
14010  case 'O': case 'o': str += 5; continue;
14011  case 'D': case 'd': str += 4; continue;
14012  case 'I': case 'i': str += 3; continue;
14013  case 'N': case 'n': str += 2; continue;
14014  case 'G': case 'g': str += 1; continue;
14015  case '=': case ':':
14016  sep = 1;
14017  str += 6;
14018  break;
14019  default:
14020  str += 6;
14021  if (ISSPACE(*str)) break;
14022  continue;
14023  }
14024  if (STRNCASECMP(str-6, "coding", 6) == 0) break;
14025  }
14026  for (;;) {
14027  do {
14028  if (++str >= send) return;
14029  } while (ISSPACE(*str));
14030  if (sep) break;
14031  if (*str != '=' && *str != ':') return;
14032  sep = 1;
14033  str++;
14034  }
14035  beg = str;
14036  while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
14037  s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
14038  parser_set_encode(parser, RSTRING_PTR(s));
14039  rb_str_resize(s, 0);
14040 }
14041 
14042 static void
14044 {
14045  int c = nextc();
14046  switch (c) {
14047  case '#':
14048  if (peek('!')) parser->has_shebang = 1;
14049  break;
14050  case 0xef: /* UTF-8 BOM marker */
14051  if (lex_pend - lex_p >= 2 &&
14052  (unsigned char)lex_p[0] == 0xbb &&
14053  (unsigned char)lex_p[1] == 0xbf) {
14054  parser->enc = rb_utf8_encoding();
14055  lex_p += 2;
14056  lex_pbeg = lex_p;
14057  return;
14058  }
14059  break;
14060  case EOF:
14061  return;
14062  }
14063  pushback(c);
14064  parser->enc = rb_enc_get(lex_lastline);
14066 }
14067 
14068 #define IS_ARG() IS_lex_state(EXPR_ARG_ANY)
14069 #define IS_END() IS_lex_state(EXPR_END_ANY)
14070 #define IS_BEG() (IS_lex_state(EXPR_BEG_ANY) || IS_lex_state_all(EXPR_ARG|EXPR_LABELED))
14071 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
14072 #define IS_LABEL_POSSIBLE() (\
14073  (IS_lex_state(EXPR_LABEL|EXPR_ENDFN) && !cmd_state) || \
14074  IS_ARG())
14075 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1))
14076 #define IS_AFTER_OPERATOR() IS_lex_state(EXPR_FNAME | EXPR_DOT)
14077 
14078 #ifndef RIPPER
14079 #define ambiguous_operator(op, syn) ( \
14080  rb_warning0("`"op"' after local variable or literal is interpreted as binary operator"), \
14081  rb_warning0("even though it seems like "syn""))
14082 #else
14083 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
14084 #endif
14085 #define warn_balanced(op, syn) ((void) \
14086  (!IS_lex_state_for(last_state, EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN) && \
14087  space_seen && !ISSPACE(c) && \
14088  (ambiguous_operator(op, syn), 0)))
14089 
14090 static VALUE
14091 parse_rational(struct parser_params *parser, char *str, int len, int seen_point)
14092 {
14093  VALUE v;
14094  char *point = &str[seen_point];
14095  size_t fraclen = len-seen_point-1;
14096  memmove(point, point+1, fraclen+1);
14097  v = rb_cstr_to_inum(str, 10, FALSE);
14098  return rb_rational_new(v, rb_int_positive_pow(10, fraclen));
14099 }
14100 
14101 static int
14102 parse_numeric(struct parser_params *parser, int c)
14103 {
14104  int is_float, seen_point, seen_e, nondigit;
14105  int suffix;
14106 
14107  is_float = seen_point = seen_e = nondigit = 0;
14108  SET_LEX_STATE(EXPR_END);
14109  newtok();
14110  if (c == '-' || c == '+') {
14111  tokadd(c);
14112  c = nextc();
14113  }
14114  if (c == '0') {
14115 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
14116  int start = toklen();
14117  c = nextc();
14118  if (c == 'x' || c == 'X') {
14119  /* hexadecimal */
14120  c = nextc();
14121  if (c != -1 && ISXDIGIT(c)) {
14122  do {
14123  if (c == '_') {
14124  if (nondigit) break;
14125  nondigit = c;
14126  continue;
14127  }
14128  if (!ISXDIGIT(c)) break;
14129  nondigit = 0;
14130  tokadd(c);
14131  } while ((c = nextc()) != -1);
14132  }
14133  pushback(c);
14134  tokfix();
14135  if (toklen() == start) {
14136  no_digits();
14137  }
14138  else if (nondigit) goto trailing_uc;
14140  return set_integer_literal(rb_cstr_to_inum(tok(), 16, FALSE), suffix);
14141  }
14142  if (c == 'b' || c == 'B') {
14143  /* binary */
14144  c = nextc();
14145  if (c == '0' || c == '1') {
14146  do {
14147  if (c == '_') {
14148  if (nondigit) break;
14149  nondigit = c;
14150  continue;
14151  }
14152  if (c != '0' && c != '1') break;
14153  nondigit = 0;
14154  tokadd(c);
14155  } while ((c = nextc()) != -1);
14156  }
14157  pushback(c);
14158  tokfix();
14159  if (toklen() == start) {
14160  no_digits();
14161  }
14162  else if (nondigit) goto trailing_uc;
14164  return set_integer_literal(rb_cstr_to_inum(tok(), 2, FALSE), suffix);
14165  }
14166  if (c == 'd' || c == 'D') {
14167  /* decimal */
14168  c = nextc();
14169  if (c != -1 && ISDIGIT(c)) {
14170  do {
14171  if (c == '_') {
14172  if (nondigit) break;
14173  nondigit = c;
14174  continue;
14175  }
14176  if (!ISDIGIT(c)) break;
14177  nondigit = 0;
14178  tokadd(c);
14179  } while ((c = nextc()) != -1);
14180  }
14181  pushback(c);
14182  tokfix();
14183  if (toklen() == start) {
14184  no_digits();
14185  }
14186  else if (nondigit) goto trailing_uc;
14188  return set_integer_literal(rb_cstr_to_inum(tok(), 10, FALSE), suffix);
14189  }
14190  if (c == '_') {
14191  /* 0_0 */
14192  goto octal_number;
14193  }
14194  if (c == 'o' || c == 'O') {
14195  /* prefixed octal */
14196  c = nextc();
14197  if (c == -1 || c == '_' || !ISDIGIT(c)) {
14198  no_digits();
14199  }
14200  }
14201  if (c >= '0' && c <= '7') {
14202  /* octal */
14203  octal_number:
14204  do {
14205  if (c == '_') {
14206  if (nondigit) break;
14207  nondigit = c;
14208  continue;
14209  }
14210  if (c < '0' || c > '9') break;
14211  if (c > '7') goto invalid_octal;
14212  nondigit = 0;
14213  tokadd(c);
14214  } while ((c = nextc()) != -1);
14215  if (toklen() > start) {
14216  pushback(c);
14217  tokfix();
14218  if (nondigit) goto trailing_uc;
14220  return set_integer_literal(rb_cstr_to_inum(tok(), 8, FALSE), suffix);
14221  }
14222  if (nondigit) {
14223  pushback(c);
14224  goto trailing_uc;
14225  }
14226  }
14227  if (c > '7' && c <= '9') {
14228  invalid_octal:
14229  yyerror("Invalid octal digit");
14230  }
14231  else if (c == '.' || c == 'e' || c == 'E') {
14232  tokadd('0');
14233  }
14234  else {
14235  pushback(c);
14237  return set_integer_literal(INT2FIX(0), suffix);
14238  }
14239  }
14240 
14241  for (;;) {
14242  switch (c) {
14243  case '0': case '1': case '2': case '3': case '4':
14244  case '5': case '6': case '7': case '8': case '9':
14245  nondigit = 0;
14246  tokadd(c);
14247  break;
14248 
14249  case '.':
14250  if (nondigit) goto trailing_uc;
14251  if (seen_point || seen_e) {
14252  goto decode_num;
14253  }
14254  else {
14255  int c0 = nextc();
14256  if (c0 == -1 || !ISDIGIT(c0)) {
14257  pushback(c0);
14258  goto decode_num;
14259  }
14260  c = c0;
14261  }
14262  seen_point = toklen();
14263  tokadd('.');
14264  tokadd(c);
14265  is_float++;
14266  nondigit = 0;
14267  break;
14268 
14269  case 'e':
14270  case 'E':
14271  if (nondigit) {
14272  pushback(c);
14273  c = nondigit;
14274  goto decode_num;
14275  }
14276  if (seen_e) {
14277  goto decode_num;
14278  }
14279  nondigit = c;
14280  c = nextc();
14281  if (c != '-' && c != '+' && !ISDIGIT(c)) {
14282  pushback(c);
14283  nondigit = 0;
14284  goto decode_num;
14285  }
14286  tokadd(nondigit);
14287  seen_e++;
14288  is_float++;
14289  tokadd(c);
14290  nondigit = (c == '-' || c == '+') ? c : 0;
14291  break;
14292 
14293  case '_': /* `_' in number just ignored */
14294  if (nondigit) goto decode_num;
14295  nondigit = c;
14296  break;
14297 
14298  default:
14299  goto decode_num;
14300  }
14301  c = nextc();
14302  }
14303 
14304  decode_num:
14305  pushback(c);
14306  if (nondigit) {
14307  char tmp[30];
14308  trailing_uc:
14309  snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
14310  yyerror(tmp);
14311  }
14312  tokfix();
14313  if (is_float) {
14314  int type = tFLOAT;
14315  VALUE v;
14316 
14317  suffix = number_literal_suffix(seen_e ? NUM_SUFFIX_I : NUM_SUFFIX_ALL);
14318  if (suffix & NUM_SUFFIX_R) {
14319  type = tRATIONAL;
14320  v = parse_rational(parser, tok(), toklen(), seen_point);
14321  }
14322  else {
14323  double d = strtod(tok(), 0);
14324  if (errno == ERANGE) {
14325  rb_warning1("Float %s out of range", WARN_S(tok()));
14326  errno = 0;
14327  }
14328  v = DBL2NUM(d);
14329  }
14330  return set_number_literal(v, type, suffix);
14331  }
14333  return set_integer_literal(rb_cstr_to_inum(tok(), 10, FALSE), suffix);
14334 }
14335 
14336 static int
14337 parse_qmark(struct parser_params *parser, int space_seen)
14338 {
14339  rb_encoding *enc;
14340  register int c;
14341 
14342  if (IS_END()) {
14344  return '?';
14345  }
14346  c = nextc();
14347  if (c == -1) {
14348  compile_error(PARSER_ARG "incomplete character syntax");
14349  return 0;
14350  }
14351  if (rb_enc_isspace(c, current_enc)) {
14352  if (!IS_ARG()) {
14353  int c2 = 0;
14354  switch (c) {
14355  case ' ':
14356  c2 = 's';
14357  break;
14358  case '\n':
14359  c2 = 'n';
14360  break;
14361  case '\t':
14362  c2 = 't';
14363  break;
14364  case '\v':
14365  c2 = 'v';
14366  break;
14367  case '\r':
14368  c2 = 'r';
14369  break;
14370  case '\f':
14371  c2 = 'f';
14372  break;
14373  }
14374  if (c2) {
14375  rb_warn1("invalid character syntax; use ?\\%c", WARN_I(c2));
14376  }
14377  }
14378  ternary:
14379  pushback(c);
14381  return '?';
14382  }
14383  newtok();
14384  enc = current_enc;
14385  if (!parser_isascii()) {
14386  if (tokadd_mbchar(c) == -1) return 0;
14387  }
14388  else if ((rb_enc_isalnum(c, current_enc) || c == '_') &&
14390  if (space_seen) {
14391  const char *start = lex_p - 1, *p = start;
14392  do {
14393  int n = parser_precise_mbclen(parser, p);
14394  if (n < 0) return -1;
14395  p += n;
14396  } while (p < lex_pend && is_identchar(p, lex_pend, current_enc));
14397  rb_warn2("`?' just followed by `%.*s' is interpreted as" \
14398  " a conditional operator, put a space after `?'",
14399  WARN_I((int)(p - start)), WARN_S_L(start, (p - start)));
14400  }
14401  goto ternary;
14402  }
14403  else if (c == '\\') {
14404  if (peek('u')) {
14405  nextc();
14406  if (!parser_tokadd_utf8(parser, &enc, 0, 0, 0))
14407  return 0;
14408  }
14409  else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) {
14410  nextc();
14411  if (tokadd_mbchar(c) == -1) return 0;
14412  }
14413  else {
14414  c = read_escape(0, &enc);
14415  tokadd(c);
14416  }
14417  }
14418  else {
14419  tokadd(c);
14420  }
14421  tokfix();
14422  set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
14423  SET_LEX_STATE(EXPR_END);
14424  return tCHAR;
14425 }
14426 
14427 static int
14428 parse_percent(struct parser_params *parser, const int space_seen, const enum lex_state_e last_state)
14429 {
14430  register int c;
14431 
14432  if (IS_BEG()) {
14433  int term;
14434  int paren;
14435 
14436  c = nextc();
14437  quotation:
14438  if (c == -1 || !ISALNUM(c)) {
14439  term = c;
14440  c = 'Q';
14441  }
14442  else {
14443  term = nextc();
14444  if (rb_enc_isalnum(term, current_enc) || !parser_isascii()) {
14445  yyerror("unknown type of %string");
14446  return 0;
14447  }
14448  }
14449  if (c == -1 || term == -1) {
14450  compile_error(PARSER_ARG "unterminated quoted string meets end of file");
14451  return 0;
14452  }
14453  paren = term;
14454  if (term == '(') term = ')';
14455  else if (term == '[') term = ']';
14456  else if (term == '{') term = '}';
14457  else if (term == '<') term = '>';
14458  else paren = 0;
14459 
14460  switch (c) {
14461  case 'Q':
14462  lex_strterm = NEW_STRTERM(str_dquote, term, paren);
14463  return tSTRING_BEG;
14464 
14465  case 'q':
14466  lex_strterm = NEW_STRTERM(str_squote, term, paren);
14467  return tSTRING_BEG;
14468 
14469  case 'W':
14470  lex_strterm = NEW_STRTERM(str_dword, term, paren);
14471  do {c = nextc();} while (ISSPACE(c));
14472  pushback(c);
14473  return tWORDS_BEG;
14474 
14475  case 'w':
14476  lex_strterm = NEW_STRTERM(str_sword, term, paren);
14477  do {c = nextc();} while (ISSPACE(c));
14478  pushback(c);
14479  return tQWORDS_BEG;
14480 
14481  case 'I':
14482  lex_strterm = NEW_STRTERM(str_dword, term, paren);
14483  do {c = nextc();} while (ISSPACE(c));
14484  pushback(c);
14485  return tSYMBOLS_BEG;
14486 
14487  case 'i':
14488  lex_strterm = NEW_STRTERM(str_sword, term, paren);
14489  do {c = nextc();} while (ISSPACE(c));
14490  pushback(c);
14491  return tQSYMBOLS_BEG;
14492 
14493  case 'x':
14494  lex_strterm = NEW_STRTERM(str_xquote, term, paren);
14495  return tXSTRING_BEG;
14496 
14497  case 'r':
14498  lex_strterm = NEW_STRTERM(str_regexp, term, paren);
14499  return tREGEXP_BEG;
14500 
14501  case 's':
14502  lex_strterm = NEW_STRTERM(str_ssym, term, paren);
14503  SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);
14504  return tSYMBEG;
14505 
14506  default:
14507  yyerror("unknown type of %string");
14508  return 0;
14509  }
14510  }
14511  if ((c = nextc()) == '=') {
14512  set_yylval_id('%');
14513  SET_LEX_STATE(EXPR_BEG);
14514  return tOP_ASGN;
14515  }
14516  if (IS_SPCARG(c) || (IS_lex_state(EXPR_FITEM) && c == 's')) {
14517  goto quotation;
14518  }
14519  SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
14520  pushback(c);
14521  warn_balanced("%%", "string literal");
14522  return '%';
14523 }
14524 
14525 static int
14526 tokadd_ident(struct parser_params *parser, int c)
14527 {
14528  do {
14529  if (tokadd_mbchar(c) == -1) return -1;
14530  c = nextc();
14531  } while (parser_is_identchar());
14532  pushback(c);
14533  return 0;
14534 }
14535 
14536 static ID
14537 tokenize_ident(struct parser_params *parser, const enum lex_state_e last_state)
14538 {
14539  ID ident = TOK_INTERN();
14540 
14541  set_yylval_name(ident);
14542 
14543  return ident;
14544 }
14545 
14546 static int
14548 {
14549  size_t len;
14550  int overflow;
14551  unsigned long n = ruby_scan_digits(tok()+1, toklen()-1, 10, &len, &overflow);
14552  const unsigned long nth_ref_max =
14553  ((FIXNUM_MAX < INT_MAX) ? FIXNUM_MAX : INT_MAX) >> 1;
14554  /* NTH_REF is left-shifted to be ORed with back-ref flag and
14555  * turned into a Fixnum, in compile.c */
14556 
14557  if (overflow || n > nth_ref_max) {
14558  /* compile_error()? */
14559  rb_warn1("`%s' is too big for a number variable, always nil", WARN_S(tok()));
14560  return 0; /* $0 is $PROGRAM_NAME, not NTH_REF */
14561  }
14562  else {
14563  return (int)n;
14564  }
14565 }
14566 
14567 static int
14568 parse_gvar(struct parser_params *parser, const enum lex_state_e last_state)
14569 {
14570  register int c;
14571 
14572  SET_LEX_STATE(EXPR_END);
14573  newtok();
14574  c = nextc();
14575  switch (c) {
14576  case '_': /* $_: last read line string */
14577  c = nextc();
14578  if (parser_is_identchar()) {
14579  tokadd('$');
14580  tokadd('_');
14581  break;
14582  }
14583  pushback(c);
14584  c = '_';
14585  /* fall through */
14586  case '~': /* $~: match-data */
14587  case '*': /* $*: argv */
14588  case '$': /* $$: pid */
14589  case '?': /* $?: last status */
14590  case '!': /* $!: error string */
14591  case '@': /* $@: error position */
14592  case '/': /* $/: input record separator */
14593  case '\\': /* $\: output record separator */
14594  case ';': /* $;: field separator */
14595  case ',': /* $,: output field separator */
14596  case '.': /* $.: last read line number */
14597  case '=': /* $=: ignorecase */
14598  case ':': /* $:: load path */
14599  case '<': /* $<: reading filename */
14600  case '>': /* $>: default output handle */
14601  case '\"': /* $": already loaded files */
14602  tokadd('$');
14603  tokadd(c);
14604  goto gvar;
14605 
14606  case '-':
14607  tokadd('$');
14608  tokadd(c);
14609  c = nextc();
14610  if (parser_is_identchar()) {
14611  if (tokadd_mbchar(c) == -1) return 0;
14612  }
14613  else {
14614  pushback(c);
14615  pushback('-');
14616  return '$';
14617  }
14618  gvar:
14620  return tGVAR;
14621 
14622  case '&': /* $&: last match */
14623  case '`': /* $`: string before last match */
14624  case '\'': /* $': string after last match */
14625  case '+': /* $+: string matches last paren. */
14626  if (IS_lex_state_for(last_state, EXPR_FNAME)) {
14627  tokadd('$');
14628  tokadd(c);
14629  goto gvar;
14630  }
14632  return tBACK_REF;
14633 
14634  case '1': case '2': case '3':
14635  case '4': case '5': case '6':
14636  case '7': case '8': case '9':
14637  tokadd('$');
14638  do {
14639  tokadd(c);
14640  c = nextc();
14641  } while (c != -1 && ISDIGIT(c));
14642  pushback(c);
14643  if (IS_lex_state_for(last_state, EXPR_FNAME)) goto gvar;
14644  tokfix();
14646  return tNTH_REF;
14647 
14648  default:
14649  if (!parser_is_identchar()) {
14650  if (c == -1 || ISSPACE(c)) {
14651  compile_error(PARSER_ARG "`$' without identifiers is not allowed as a global variable name");
14652  }
14653  else {
14654  pushback(c);
14655  compile_error(PARSER_ARG "`$%c' is not allowed as a global variable name", c);
14656  }
14657  return 0;
14658  }
14659  case '0':
14660  tokadd('$');
14661  }
14662 
14663  if (tokadd_ident(parser, c)) return 0;
14664  SET_LEX_STATE(EXPR_END);
14665  tokenize_ident(parser, last_state);
14666  return tGVAR;
14667 }
14668 
14669 static int
14670 parse_atmark(struct parser_params *parser, const enum lex_state_e last_state)
14671 {
14672  int result = tIVAR;
14673  register int c = nextc();
14674 
14675  newtok();
14676  tokadd('@');
14677  if (c == '@') {
14678  result = tCVAR;
14679  tokadd('@');
14680  c = nextc();
14681  }
14682  if (c == -1 || ISSPACE(c)) {
14683  if (result == tIVAR) {
14684  compile_error(PARSER_ARG "`@' without identifiers is not allowed as an instance variable name");
14685  }
14686  else {
14687  compile_error(PARSER_ARG "`@@' without identifiers is not allowed as a class variable name");
14688  }
14689  return 0;
14690  }
14691  else if (ISDIGIT(c) || !parser_is_identchar()) {
14692  pushback(c);
14693  if (result == tIVAR) {
14694  compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
14695  }
14696  else {
14697  compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
14698  }
14699  return 0;
14700  }
14701 
14702  if (tokadd_ident(parser, c)) return 0;
14703  SET_LEX_STATE(EXPR_END);
14704  tokenize_ident(parser, last_state);
14705  return result;
14706 }
14707 
14708 static int
14709 parse_ident(struct parser_params *parser, int c, int cmd_state)
14710 {
14711  int result = 0;
14712  int mb = ENC_CODERANGE_7BIT;
14713  const enum lex_state_e last_state = lex_state;
14714  ID ident;
14715 
14716  do {
14717  if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
14718  if (tokadd_mbchar(c) == -1) return 0;
14719  c = nextc();
14720  } while (parser_is_identchar());
14721  if ((c == '!' || c == '?') && !peek('=')) {
14722  tokadd(c);
14723  }
14724  else {
14725  pushback(c);
14726  }
14727  tokfix();
14728 
14729  if (toklast() == '!' || toklast() == '?') {
14730  result = tFID;
14731  }
14732  else {
14733  if (IS_lex_state(EXPR_FNAME)) {
14734  register int c = nextc();
14735  if (c == '=' && !peek('~') && !peek('>') &&
14736  (!peek('=') || (peek_n('>', 1)))) {
14737  result = tIDENTIFIER;
14738  tokadd(c);
14739  tokfix();
14740  }
14741  else {
14742  pushback(c);
14743  }
14744  }
14745  if (result == 0 && ISUPPER(tok()[0])) {
14746  result = tCONSTANT;
14747  }
14748  else {
14749  result = tIDENTIFIER;
14750  }
14751  }
14752 
14753  if (IS_LABEL_POSSIBLE()) {
14754  if (IS_LABEL_SUFFIX(0)) {
14755  SET_LEX_STATE(EXPR_ARG|EXPR_LABELED);
14756  nextc();
14758  return tLABEL;
14759  }
14760  }
14761  if (mb == ENC_CODERANGE_7BIT && !IS_lex_state(EXPR_DOT)) {
14762  const struct kwtable *kw;
14763 
14764  /* See if it is a reserved word. */
14765  kw = rb_reserved_word(tok(), toklen());
14766  if (kw) {
14767  enum lex_state_e state = lex_state;
14768  SET_LEX_STATE(kw->state);
14769  if (IS_lex_state_for(state, EXPR_FNAME)) {
14771  return kw->id[0];
14772  }
14773  if (IS_lex_state(EXPR_BEG)) {
14774  command_start = TRUE;
14775  }
14776  if (kw->id[0] == keyword_do) {
14777  if (lambda_beginning_p()) {
14778  lpar_beg = 0;
14779  --paren_nest;
14780  return keyword_do_LAMBDA;
14781  }
14782  if (COND_P()) return keyword_do_cond;
14783  if (CMDARG_P() && !IS_lex_state_for(state, EXPR_CMDARG))
14784  return keyword_do_block;
14785  if (IS_lex_state_for(state, (EXPR_BEG | EXPR_ENDARG)))
14786  return keyword_do_block;
14787  return keyword_do;
14788  }
14789  if (IS_lex_state_for(state, (EXPR_BEG | EXPR_LABELED)))
14790  return kw->id[0];
14791  else {
14792  if (kw->id[0] != kw->id[1])
14793  SET_LEX_STATE(EXPR_BEG | EXPR_LABEL);
14794  return kw->id[1];
14795  }
14796  }
14797  }
14798 
14799  if (IS_lex_state(EXPR_BEG_ANY | EXPR_ARG_ANY | EXPR_DOT)) {
14800  if (cmd_state) {
14801  SET_LEX_STATE(EXPR_CMDARG);
14802  }
14803  else {
14804  SET_LEX_STATE(EXPR_ARG);
14805  }
14806  }
14807  else if (lex_state == EXPR_FNAME) {
14808  SET_LEX_STATE(EXPR_ENDFN);
14809  }
14810  else {
14811  SET_LEX_STATE(EXPR_END);
14812  }
14813 
14814  ident = tokenize_ident(parser, last_state);
14815  if (!IS_lex_state_for(last_state, EXPR_DOT|EXPR_FNAME) &&
14816  (result == tIDENTIFIER) && /* not EXPR_FNAME, not attrasgn */
14817  lvar_defined(ident)) {
14818  SET_LEX_STATE(EXPR_END|EXPR_LABEL);
14819  }
14820  return result;
14821 }
14822 
14823 static int
14825 {
14826  register int c;
14827  int space_seen = 0;
14828  int cmd_state;
14829  int label;
14830  enum lex_state_e last_state;
14831  int fallthru = FALSE;
14832  int token_seen = parser->token_seen;
14833 
14834  if (lex_strterm) {
14835  int token;
14836  if (nd_type(lex_strterm) == NODE_HEREDOC) {
14837  token = here_document(lex_strterm);
14838  if (token == tSTRING_END) {
14839  lex_strterm = 0;
14840  SET_LEX_STATE(EXPR_END);
14841  }
14842  }
14843  else {
14844  token = parse_string(lex_strterm);
14845  if ((token == tSTRING_END) && (lex_strterm->nd_func & STR_FUNC_LABEL)) {
14846  if (((IS_lex_state(EXPR_BEG | EXPR_ENDFN) && !COND_P()) || IS_ARG()) &&
14847  IS_LABEL_SUFFIX(0)) {
14848  nextc();
14849  token = tLABEL_END;
14850  }
14851  }
14852  if (token == tSTRING_END || token == tREGEXP_END || token == tLABEL_END) {
14853  const enum lex_state_e next_state =
14854  token == tLABEL_END ? EXPR_BEG|EXPR_LABEL : EXPR_END|EXPR_ENDARG;
14856  lex_strterm = 0;
14857  SET_LEX_STATE(next_state);
14858  }
14859  }
14860  return token;
14861  }
14862  cmd_state = command_start;
14863  command_start = FALSE;
14864  parser->token_seen = TRUE;
14865  retry:
14866  last_state = lex_state;
14867  switch (c = nextc()) {
14868  case '\0': /* NUL */
14869  case '\004': /* ^D */
14870  case '\032': /* ^Z */
14871  case -1: /* end of script. */
14872  return 0;
14873 
14874  /* white spaces */
14875  case ' ': case '\t': case '\f': case '\r':
14876  case '\13': /* '\v' */
14877  space_seen = 1;
14878 #ifdef RIPPER
14879  while ((c = nextc())) {
14880  switch (c) {
14881  case ' ': case '\t': case '\f': case '\r':
14882  case '\13': /* '\v' */
14883  break;
14884  default:
14885  goto outofloop;
14886  }
14887  }
14888  outofloop:
14889  pushback(c);
14891 #endif
14892  goto retry;
14893 
14894  case '#': /* it's a comment */
14895  parser->token_seen = token_seen;
14896  /* no magic_comment in shebang line */
14897  if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
14898  if (comment_at_top(parser)) {
14899  set_file_encoding(parser, lex_p, lex_pend);
14900  }
14901  }
14902  lex_p = lex_pend;
14904  fallthru = TRUE;
14905  /* fall through */
14906  case '\n':
14907  parser->token_seen = token_seen;
14908  c = (IS_lex_state(EXPR_BEG|EXPR_CLASS|EXPR_FNAME|EXPR_DOT) &&
14909  !IS_lex_state(EXPR_LABELED));
14910  if (c || IS_lex_state_all(EXPR_ARG|EXPR_LABELED)) {
14911  if (!fallthru) {
14913  }
14914  fallthru = FALSE;
14915  if (!c && parser->in_kwarg) {
14916  goto normal_newline;
14917  }
14918  goto retry;
14919  }
14920  while ((c = nextc())) {
14921  switch (c) {
14922  case ' ': case '\t': case '\f': case '\r':
14923  case '\13': /* '\v' */
14924  space_seen = 1;
14925  break;
14926  case '&':
14927  case '.': {
14929  if (peek('.') == (c == '&')) {
14930  pushback(c);
14932  goto retry;
14933  }
14934  }
14935  default:
14936  --ruby_sourceline;
14938  case -1: /* EOF no decrement*/
14939  lex_goto_eol(parser);
14940 #ifdef RIPPER
14941  if (c != -1) {
14942  parser->tokp = lex_p;
14943  }
14944 #endif
14945  goto normal_newline;
14946  }
14947  }
14948  normal_newline:
14949  command_start = TRUE;
14950  SET_LEX_STATE(EXPR_BEG);
14951  return '\n';
14952 
14953  case '*':
14954  if ((c = nextc()) == '*') {
14955  if ((c = nextc()) == '=') {
14957  SET_LEX_STATE(EXPR_BEG);
14958  return tOP_ASGN;
14959  }
14960  pushback(c);
14961  if (IS_SPCARG(c)) {
14962  rb_warning0("`**' interpreted as argument prefix");
14963  c = tDSTAR;
14964  }
14965  else if (IS_BEG()) {
14966  c = tDSTAR;
14967  }
14968  else {
14969  warn_balanced("**", "argument prefix");
14970  c = tPOW;
14971  }
14972  }
14973  else {
14974  if (c == '=') {
14975  set_yylval_id('*');
14976  SET_LEX_STATE(EXPR_BEG);
14977  return tOP_ASGN;
14978  }
14979  pushback(c);
14980  if (IS_SPCARG(c)) {
14981  rb_warning0("`*' interpreted as argument prefix");
14982  c = tSTAR;
14983  }
14984  else if (IS_BEG()) {
14985  c = tSTAR;
14986  }
14987  else {
14988  warn_balanced("*", "argument prefix");
14989  c = '*';
14990  }
14991  }
14992  SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
14993  return c;
14994 
14995  case '!':
14996  c = nextc();
14997  if (IS_AFTER_OPERATOR()) {
14998  SET_LEX_STATE(EXPR_ARG);
14999  if (c == '@') {
15000  return '!';
15001  }
15002  }
15003  else {
15004  SET_LEX_STATE(EXPR_BEG);
15005  }
15006  if (c == '=') {
15007  return tNEQ;
15008  }
15009  if (c == '~') {
15010  return tNMATCH;
15011  }
15012  pushback(c);
15013  return '!';
15014 
15015  case '=':
15016  if (was_bol()) {
15017  /* skip embedded rd document */
15018  if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
15019  int first_p = TRUE;
15020 
15021  lex_goto_eol(parser);
15023  for (;;) {
15024  lex_goto_eol(parser);
15025  if (!first_p) {
15027  }
15028  first_p = FALSE;
15029  c = nextc();
15030  if (c == -1) {
15031  compile_error(PARSER_ARG "embedded document meets end of file");
15032  return 0;
15033  }
15034  if (c != '=') continue;
15035  if (c == '=' && strncmp(lex_p, "end", 3) == 0 &&
15036  (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
15037  break;
15038  }
15039  }
15040  lex_goto_eol(parser);
15042  goto retry;
15043  }
15044  }
15045 
15046  SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
15047  if ((c = nextc()) == '=') {
15048  if ((c = nextc()) == '=') {
15049  return tEQQ;
15050  }
15051  pushback(c);
15052  return tEQ;
15053  }
15054  if (c == '~') {
15055  return tMATCH;
15056  }
15057  else if (c == '>') {
15058  return tASSOC;
15059  }
15060  pushback(c);
15061  return '=';
15062 
15063  case '<':
15064  last_state = lex_state;
15065  c = nextc();
15066  if (c == '<' &&
15067  !IS_lex_state(EXPR_DOT | EXPR_CLASS) &&
15068  !IS_END() &&
15069  (!IS_ARG() || IS_lex_state(EXPR_LABELED) || space_seen)) {
15070  int token = heredoc_identifier();
15071  if (token) return token;
15072  }
15073  if (IS_AFTER_OPERATOR()) {
15074  SET_LEX_STATE(EXPR_ARG);
15075  }
15076  else {
15077  if (IS_lex_state(EXPR_CLASS))
15078  command_start = TRUE;
15079  SET_LEX_STATE(EXPR_BEG);
15080  }
15081  if (c == '=') {
15082  if ((c = nextc()) == '>') {
15083  return tCMP;
15084  }
15085  pushback(c);
15086  return tLEQ;
15087  }
15088  if (c == '<') {
15089  if ((c = nextc()) == '=') {
15091  SET_LEX_STATE(EXPR_BEG);
15092  return tOP_ASGN;
15093  }
15094  pushback(c);
15095  warn_balanced("<<", "here document");
15096  return tLSHFT;
15097  }
15098  pushback(c);
15099  return '<';
15100 
15101  case '>':
15102  SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
15103  if ((c = nextc()) == '=') {
15104  return tGEQ;
15105  }
15106  if (c == '>') {
15107  if ((c = nextc()) == '=') {
15109  SET_LEX_STATE(EXPR_BEG);
15110  return tOP_ASGN;
15111  }
15112  pushback(c);
15113  return tRSHFT;
15114  }
15115  pushback(c);
15116  return '>';
15117 
15118  case '"':
15119  label = (IS_LABEL_POSSIBLE() ? str_label : 0);
15120  lex_strterm = NEW_STRTERM(str_dquote | label, '"', 0);
15121  return tSTRING_BEG;
15122 
15123  case '`':
15124  if (IS_lex_state(EXPR_FNAME)) {
15125  SET_LEX_STATE(EXPR_ENDFN);
15126  return c;
15127  }
15128  if (IS_lex_state(EXPR_DOT)) {
15129  if (cmd_state)
15130  SET_LEX_STATE(EXPR_CMDARG);
15131  else
15132  SET_LEX_STATE(EXPR_ARG);
15133  return c;
15134  }
15135  lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
15136  return tXSTRING_BEG;
15137 
15138  case '\'':
15139  label = (IS_LABEL_POSSIBLE() ? str_label : 0);
15140  lex_strterm = NEW_STRTERM(str_squote | label, '\'', 0);
15141  return tSTRING_BEG;
15142 
15143  case '?':
15144  return parse_qmark(parser, space_seen);
15145 
15146  case '&':
15147  if ((c = nextc()) == '&') {
15148  SET_LEX_STATE(EXPR_BEG);
15149  if ((c = nextc()) == '=') {
15151  SET_LEX_STATE(EXPR_BEG);
15152  return tOP_ASGN;
15153  }
15154  pushback(c);
15155  return tANDOP;
15156  }
15157  else if (c == '=') {
15158  set_yylval_id('&');
15159  SET_LEX_STATE(EXPR_BEG);
15160  return tOP_ASGN;
15161  }
15162  else if (c == '.') {
15163  SET_LEX_STATE(EXPR_DOT);
15164  return tANDDOT;
15165  }
15166  pushback(c);
15167  if (IS_SPCARG(c)) {
15168  rb_warning0("`&' interpreted as argument prefix");
15169  c = tAMPER;
15170  }
15171  else if (IS_BEG()) {
15172  c = tAMPER;
15173  }
15174  else {
15175  warn_balanced("&", "argument prefix");
15176  c = '&';
15177  }
15178  SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
15179  return c;
15180 
15181  case '|':
15182  if ((c = nextc()) == '|') {
15183  SET_LEX_STATE(EXPR_BEG);
15184  if ((c = nextc()) == '=') {
15186  SET_LEX_STATE(EXPR_BEG);
15187  return tOP_ASGN;
15188  }
15189  pushback(c);
15190  return tOROP;
15191  }
15192  if (c == '=') {
15193  set_yylval_id('|');
15194  SET_LEX_STATE(EXPR_BEG);
15195  return tOP_ASGN;
15196  }
15197  SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG|EXPR_LABEL);
15198  pushback(c);
15199  return '|';
15200 
15201  case '+':
15202  c = nextc();
15203  if (IS_AFTER_OPERATOR()) {
15204  SET_LEX_STATE(EXPR_ARG);
15205  if (c == '@') {
15206  return tUPLUS;
15207  }
15208  pushback(c);
15209  return '+';
15210  }
15211  if (c == '=') {
15212  set_yylval_id('+');
15213  SET_LEX_STATE(EXPR_BEG);
15214  return tOP_ASGN;
15215  }
15216  if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous('+'))) {
15217  SET_LEX_STATE(EXPR_BEG);
15218  pushback(c);
15219  if (c != -1 && ISDIGIT(c)) {
15220  return parse_numeric(parser, '+');
15221  }
15222  return tUPLUS;
15223  }
15224  SET_LEX_STATE(EXPR_BEG);
15225  pushback(c);
15226  warn_balanced("+", "unary operator");
15227  return '+';
15228 
15229  case '-':
15230  c = nextc();
15231  if (IS_AFTER_OPERATOR()) {
15232  SET_LEX_STATE(EXPR_ARG);
15233  if (c == '@') {
15234  return tUMINUS;
15235  }
15236  pushback(c);
15237  return '-';
15238  }
15239  if (c == '=') {
15240  set_yylval_id('-');
15241  SET_LEX_STATE(EXPR_BEG);
15242  return tOP_ASGN;
15243  }
15244  if (c == '>') {
15245  SET_LEX_STATE(EXPR_ENDFN);
15246  token_info_push("->");
15247  return tLAMBDA;
15248  }
15249  if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous('-'))) {
15250  SET_LEX_STATE(EXPR_BEG);
15251  pushback(c);
15252  if (c != -1 && ISDIGIT(c)) {
15253  return tUMINUS_NUM;
15254  }
15255  return tUMINUS;
15256  }
15257  SET_LEX_STATE(EXPR_BEG);
15258  pushback(c);
15259  warn_balanced("-", "unary operator");
15260  return '-';
15261 
15262  case '.':
15263  SET_LEX_STATE(EXPR_BEG);
15264  if ((c = nextc()) == '.') {
15265  if ((c = nextc()) == '.') {
15266  return tDOT3;
15267  }
15268  pushback(c);
15269  return tDOT2;
15270  }
15271  pushback(c);
15272  if (c != -1 && ISDIGIT(c)) {
15273  yyerror("no .<digit> floating literal anymore; put 0 before dot");
15274  }
15275  SET_LEX_STATE(EXPR_DOT);
15276  return '.';
15277 
15278  case '0': case '1': case '2': case '3': case '4':
15279  case '5': case '6': case '7': case '8': case '9':
15280  return parse_numeric(parser, c);
15281 
15282  case ')':
15283  case ']':
15284  paren_nest--;
15285  case '}':
15286  COND_LEXPOP();
15287  CMDARG_LEXPOP();
15288  if (c == ')')
15289  SET_LEX_STATE(EXPR_ENDFN);
15290  else
15291  SET_LEX_STATE(EXPR_ENDARG);
15292  if (c == '}') {
15293  if (!brace_nest--) c = tSTRING_DEND;
15294  }
15295  return c;
15296 
15297  case ':':
15298  c = nextc();
15299  if (c == ':') {
15300  if (IS_BEG() || IS_lex_state(EXPR_CLASS) || IS_SPCARG(-1)) {
15301  SET_LEX_STATE(EXPR_BEG);
15302  return tCOLON3;
15303  }
15304  SET_LEX_STATE(EXPR_DOT);
15305  return tCOLON2;
15306  }
15307  if (IS_END() || ISSPACE(c) || c == '#') {
15308  pushback(c);
15309  warn_balanced(":", "symbol literal");
15310  SET_LEX_STATE(EXPR_BEG);
15311  return ':';
15312  }
15313  switch (c) {
15314  case '\'':
15315  lex_strterm = NEW_STRTERM(str_ssym, c, 0);
15316  break;
15317  case '"':
15318  lex_strterm = NEW_STRTERM(str_dsym, c, 0);
15319  break;
15320  default:
15321  pushback(c);
15322  break;
15323  }
15324  SET_LEX_STATE(EXPR_FNAME);
15325  return tSYMBEG;
15326 
15327  case '/':
15328  if (IS_BEG()) {
15329  lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
15330  return tREGEXP_BEG;
15331  }
15332  if ((c = nextc()) == '=') {
15333  set_yylval_id('/');
15334  SET_LEX_STATE(EXPR_BEG);
15335  return tOP_ASGN;
15336  }
15337  pushback(c);
15338  if (IS_SPCARG(c)) {
15339  (void)arg_ambiguous('/');
15340  lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
15341  return tREGEXP_BEG;
15342  }
15343  SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
15344  warn_balanced("/", "regexp literal");
15345  return '/';
15346 
15347  case '^':
15348  if ((c = nextc()) == '=') {
15349  set_yylval_id('^');
15350  SET_LEX_STATE(EXPR_BEG);
15351  return tOP_ASGN;
15352  }
15353  SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
15354  pushback(c);
15355  return '^';
15356 
15357  case ';':
15358  SET_LEX_STATE(EXPR_BEG);
15359  command_start = TRUE;
15360  return ';';
15361 
15362  case ',':
15363  SET_LEX_STATE(EXPR_BEG|EXPR_LABEL);
15364  return ',';
15365 
15366  case '~':
15367  if (IS_AFTER_OPERATOR()) {
15368  if ((c = nextc()) != '@') {
15369  pushback(c);
15370  }
15371  SET_LEX_STATE(EXPR_ARG);
15372  }
15373  else {
15374  SET_LEX_STATE(EXPR_BEG);
15375  }
15376  return '~';
15377 
15378  case '(':
15379  if (IS_BEG()) {
15380  c = tLPAREN;
15381  }
15382  else if (IS_SPCARG(-1)) {
15383  c = tLPAREN_ARG;
15384  }
15385  else if (IS_lex_state(EXPR_ENDFN) && space_seen && !lambda_beginning_p()) {
15386  rb_warning0("parentheses after method name is interpreted as "
15387  "an argument list, not a decomposed argument");
15388  }
15389  paren_nest++;
15390  COND_PUSH(0);
15391  CMDARG_PUSH(0);
15392  SET_LEX_STATE(EXPR_BEG|EXPR_LABEL);
15393  return c;
15394 
15395  case '[':
15396  paren_nest++;
15397  if (IS_AFTER_OPERATOR()) {
15398  SET_LEX_STATE(EXPR_ARG);
15399  if ((c = nextc()) == ']') {
15400  if ((c = nextc()) == '=') {
15401  return tASET;
15402  }
15403  pushback(c);
15404  return tAREF;
15405  }
15406  pushback(c);
15407  lex_state |= EXPR_LABEL;
15408  return '[';
15409  }
15410  else if (IS_BEG()) {
15411  c = tLBRACK;
15412  }
15413  else if (IS_ARG() && (space_seen || IS_lex_state(EXPR_LABELED))) {
15414  c = tLBRACK;
15415  }
15416  SET_LEX_STATE(EXPR_BEG|EXPR_LABEL);
15417  COND_PUSH(0);
15418  CMDARG_PUSH(0);
15419  return c;
15420 
15421  case '{':
15422  ++brace_nest;
15423  if (lambda_beginning_p()) {
15424  SET_LEX_STATE(EXPR_BEG);
15425  lpar_beg = 0;
15426  --paren_nest;
15427  COND_PUSH(0);
15428  CMDARG_PUSH(0);
15429  return tLAMBEG;
15430  }
15431  if (IS_lex_state(EXPR_LABELED))
15432  c = tLBRACE; /* hash */
15433  else if (IS_lex_state(EXPR_ARG_ANY | EXPR_END | EXPR_ENDFN))
15434  c = '{'; /* block (primary) */
15435  else if (IS_lex_state(EXPR_ENDARG))
15436  c = tLBRACE_ARG; /* block (expr) */
15437  else
15438  c = tLBRACE; /* hash */
15439  COND_PUSH(0);
15440  CMDARG_PUSH(0);
15441  SET_LEX_STATE(EXPR_BEG);
15442  if (c != tLBRACE_ARG) lex_state |= EXPR_LABEL;
15443  if (c != tLBRACE) command_start = TRUE;
15444  return c;
15445 
15446  case '\\':
15447  c = nextc();
15448  if (c == '\n') {
15449  space_seen = 1;
15451  goto retry; /* skip \\n */
15452  }
15453  pushback(c);
15454  return '\\';
15455 
15456  case '%':
15457  return parse_percent(parser, space_seen, last_state);
15458 
15459  case '$':
15460  return parse_gvar(parser, last_state);
15461 
15462  case '@':
15463  return parse_atmark(parser, last_state);
15464 
15465  case '_':
15466  if (was_bol() && whole_match_p("__END__", 7, 0)) {
15467  ruby__end__seen = 1;
15468  parser->eofp = 1;
15469 #ifndef RIPPER
15470  return -1;
15471 #else
15472  lex_goto_eol(parser);
15474  return 0;
15475 #endif
15476  }
15477  newtok();
15478  break;
15479 
15480  default:
15481  if (!parser_is_identchar()) {
15482  compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c);
15483  goto retry;
15484  }
15485 
15486  newtok();
15487  break;
15488  }
15489 
15490  return parse_ident(parser, c, cmd_state);
15491 }
15492 
15493 static int
15494 yylex(YYSTYPE *lval, struct parser_params *parser)
15495 {
15496  int t;
15497 
15498  parser->lval = lval;
15499  lval->val = Qundef;
15500  t = parser_yylex(parser);
15501  if (has_delayed_token())
15503  else if (t != 0)
15505 
15506  return t;
15507 }
15508 
15509 #ifndef RIPPER
15510 static NODE*
15511 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
15512 {
15513  NODE *n = (rb_node_newnode)(type, a0, a1, a2);
15515  return n;
15516 }
15517 
15518 static enum node_type
15519 nodetype(NODE *node) /* for debug */
15520 {
15521  return (enum node_type)nd_type(node);
15522 }
15523 
15524 static int
15526 {
15527  return nd_line(node);
15528 }
15529 
15530 static NODE*
15532 {
15533  if (node) {
15534  node = remove_begin(node);
15535  node->flags |= NODE_FL_NEWLINE;
15536  }
15537  return node;
15538 }
15539 
15540 static void
15541 fixpos(NODE *node, NODE *orig)
15542 {
15543  if (!node) return;
15544  if (!orig) return;
15545  if (orig == (NODE*)1) return;
15546  nd_set_line(node, nd_line(orig));
15547 }
15548 
15549 static void
15550 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
15551 {
15552  rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
15553 }
15554 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg))
15555 
15556 static void
15557 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
15558 {
15559  rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
15560 }
15561 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg))
15562 
15563 static NODE*
15564 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
15565 {
15566  NODE *end, *h = head, *nd;
15567 
15568  if (tail == 0) return head;
15569 
15570  if (h == 0) return tail;
15571  switch (nd_type(h)) {
15572  case NODE_LIT:
15573  case NODE_STR:
15574  case NODE_SELF:
15575  case NODE_TRUE:
15576  case NODE_FALSE:
15577  case NODE_NIL:
15578  parser_warning(h, "unused literal ignored");
15579  return tail;
15580  default:
15581  h = end = NEW_BLOCK(head);
15582  end->nd_end = end;
15583  fixpos(end, head);
15584  head = end;
15585  break;
15586  case NODE_BLOCK:
15587  end = h->nd_end;
15588  break;
15589  }
15590 
15591  nd = end->nd_head;
15592  switch (nd_type(nd)) {
15593  case NODE_RETURN:
15594  case NODE_BREAK:
15595  case NODE_NEXT:
15596  case NODE_REDO:
15597  case NODE_RETRY:
15598  if (RTEST(ruby_verbose)) {
15599  parser_warning(tail, "statement not reached");
15600  }
15601  break;
15602 
15603  default:
15604  break;
15605  }
15606 
15607  if (nd_type(tail) != NODE_BLOCK) {
15608  tail = NEW_BLOCK(tail);
15609  tail->nd_end = tail;
15610  }
15611  end->nd_next = tail;
15612  h->nd_end = tail->nd_end;
15613  return head;
15614 }
15615 
15616 /* append item to the list */
15617 static NODE*
15618 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
15619 {
15620  NODE *last;
15621 
15622  if (list == 0) return NEW_LIST(item);
15623  if (list->nd_next) {
15624  last = list->nd_next->nd_end;
15625  }
15626  else {
15627  last = list;
15628  }
15629 
15630  list->nd_alen += 1;
15631  last->nd_next = NEW_LIST(item);
15632  list->nd_next->nd_end = last->nd_next;
15633  return list;
15634 }
15635 
15636 /* concat two lists */
15637 static NODE*
15638 list_concat(NODE *head, NODE *tail)
15639 {
15640  NODE *last;
15641 
15642  if (head->nd_next) {
15643  last = head->nd_next->nd_end;
15644  }
15645  else {
15646  last = head;
15647  }
15648 
15649  head->nd_alen += tail->nd_alen;
15650  last->nd_next = tail;
15651  if (tail->nd_next) {
15652  head->nd_next->nd_end = tail->nd_next->nd_end;
15653  }
15654  else {
15655  head->nd_next->nd_end = tail;
15656  }
15657 
15658  return head;
15659 }
15660 
15661 static int
15662 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
15663 {
15664  if (NIL_P(tail)) return 1;
15665  if (!rb_enc_compatible(head, tail)) {
15666  compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
15667  rb_enc_name(rb_enc_get(head)),
15668  rb_enc_name(rb_enc_get(tail)));
15669  rb_str_resize(head, 0);
15670  rb_str_resize(tail, 0);
15671  return 0;
15672  }
15673  rb_str_buf_append(head, tail);
15674  return 1;
15675 }
15676 
15677 /* concat two string literals */
15678 static NODE *
15679 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
15680 {
15681  enum node_type htype;
15682  NODE *headlast;
15683  VALUE lit;
15684 
15685  if (!head) return tail;
15686  if (!tail) return head;
15687 
15688  htype = nd_type(head);
15689  if (htype == NODE_EVSTR) {
15690  NODE *node = NEW_DSTR(STR_NEW0());
15691  head = list_append(node, head);
15692  htype = NODE_DSTR;
15693  }
15694  if (heredoc_indent > 0) {
15695  switch (htype) {
15696  case NODE_STR:
15697  nd_set_type(head, NODE_DSTR);
15698  case NODE_DSTR:
15699  return list_append(head, tail);
15700  default:
15701  break;
15702  }
15703  }
15704  switch (nd_type(tail)) {
15705  case NODE_STR:
15706  if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
15707  nd_type(headlast) == NODE_STR) {
15708  htype = NODE_STR;
15709  lit = headlast->nd_lit;
15710  }
15711  else {
15712  lit = head->nd_lit;
15713  }
15714  if (htype == NODE_STR) {
15715  if (!literal_concat0(parser, lit, tail->nd_lit)) {
15716  error:
15717  rb_gc_force_recycle((VALUE)head);
15718  rb_gc_force_recycle((VALUE)tail);
15719  return 0;
15720  }
15721  rb_gc_force_recycle((VALUE)tail);
15722  }
15723  else {
15724  list_append(head, tail);
15725  }
15726  break;
15727 
15728  case NODE_DSTR:
15729  if (htype == NODE_STR) {
15730  if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
15731  goto error;
15732  tail->nd_lit = head->nd_lit;
15733  rb_gc_force_recycle((VALUE)head);
15734  head = tail;
15735  }
15736  else if (NIL_P(tail->nd_lit)) {
15737  append:
15738  head->nd_alen += tail->nd_alen - 1;
15739  head->nd_next->nd_end->nd_next = tail->nd_next;
15740  head->nd_next->nd_end = tail->nd_next->nd_end;
15741  rb_gc_force_recycle((VALUE)tail);
15742  }
15743  else if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
15744  nd_type(headlast) == NODE_STR) {
15745  lit = headlast->nd_lit;
15746  if (!literal_concat0(parser, lit, tail->nd_lit))
15747  goto error;
15748  tail->nd_lit = Qnil;
15749  goto append;
15750  }
15751  else {
15752  nd_set_type(tail, NODE_ARRAY);
15753  tail->nd_head = NEW_STR(tail->nd_lit);
15754  list_concat(head, tail);
15755  }
15756  break;
15757 
15758  case NODE_EVSTR:
15759  if (htype == NODE_STR) {
15760  nd_set_type(head, NODE_DSTR);
15761  head->nd_alen = 1;
15762  }
15763  list_append(head, tail);
15764  break;
15765  }
15766  return head;
15767 }
15768 
15769 static NODE *
15770 evstr2dstr_gen(struct parser_params *parser, NODE *node)
15771 {
15772  if (nd_type(node) == NODE_EVSTR) {
15773  node = list_append(NEW_DSTR(STR_NEW0()), node);
15774  }
15775  return node;
15776 }
15777 
15778 static NODE *
15779 new_evstr_gen(struct parser_params *parser, NODE *node)
15780 {
15781  NODE *head = node;
15782 
15783  if (node) {
15784  switch (nd_type(node)) {
15785  case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
15786  return node;
15787  }
15788  }
15789  return NEW_EVSTR(head);
15790 }
15791 
15792 static NODE *
15793 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
15794 {
15795  value_expr(recv);
15796  value_expr(arg1);
15797  return NEW_CALL(recv, id, NEW_LIST(arg1));
15798 }
15799 
15800 static NODE *
15801 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
15802 {
15803  value_expr(recv);
15804  return NEW_CALL(recv, id, 0);
15805 }
15806 
15807 static NODE*
15808 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15809 {
15810  value_expr(node1);
15811  value_expr(node2);
15812  if (node1) {
15813  switch (nd_type(node1)) {
15814  case NODE_DREGX:
15815  case NODE_DREGX_ONCE:
15816  return NEW_MATCH2(node1, node2);
15817 
15818  case NODE_LIT:
15819  if (RB_TYPE_P(node1->nd_lit, T_REGEXP)) {
15820  return NEW_MATCH2(node1, node2);
15821  }
15822  }
15823  }
15824 
15825  if (node2) {
15826  switch (nd_type(node2)) {
15827  case NODE_DREGX:
15828  case NODE_DREGX_ONCE:
15829  return NEW_MATCH3(node2, node1);
15830 
15831  case NODE_LIT:
15832  if (RB_TYPE_P(node2->nd_lit, T_REGEXP)) {
15833  return NEW_MATCH3(node2, node1);
15834  }
15835  }
15836  }
15837 
15838  return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
15839 }
15840 
15841 # if WARN_PAST_SCOPE
15842 static int
15843 past_dvar_p(struct parser_params *parser, ID id)
15844 {
15845  struct vtable *past = lvtbl->past;
15846  while (past) {
15847  if (vtable_included(past, id)) return 1;
15848  past = past->prev;
15849  }
15850  return 0;
15851 }
15852 # endif
15853 
15854 static NODE*
15855 gettable_gen(struct parser_params *parser, ID id)
15856 {
15857  switch (id) {
15858  case keyword_self:
15859  return NEW_SELF();
15860  case keyword_nil:
15861  return NEW_NIL();
15862  case keyword_true:
15863  return NEW_TRUE();
15864  case keyword_false:
15865  return NEW_FALSE();
15866  case keyword__FILE__:
15868  case keyword__LINE__:
15869  return NEW_LIT(INT2FIX(tokline));
15870  case keyword__ENCODING__:
15872  }
15873  switch (id_type(id)) {
15874  case ID_LOCAL:
15875  if (dyna_in_block() && dvar_defined(id)) {
15876  if (id == current_arg) {
15877  rb_warn1("circular argument reference - %"PRIsWARN, rb_id2str(id));
15878  }
15879  return NEW_DVAR(id);
15880  }
15881  if (local_id(id)) {
15882  if (id == current_arg) {
15883  rb_warn1("circular argument reference - %"PRIsWARN, rb_id2str(id));
15884  }
15885  return NEW_LVAR(id);
15886  }
15887 # if WARN_PAST_SCOPE
15888  if (!in_defined && RTEST(ruby_verbose) && past_dvar_p(parser, id)) {
15889  rb_warning1("possible reference to past scope - %"PRIsWARN, rb_id2str(id));
15890  }
15891 # endif
15892  /* method call without arguments */
15893  return NEW_VCALL(id);
15894  case ID_GLOBAL:
15895  return NEW_GVAR(id);
15896  case ID_INSTANCE:
15897  return NEW_IVAR(id);
15898  case ID_CONST:
15899  return NEW_CONST(id);
15900  case ID_CLASS:
15901  return NEW_CVAR(id);
15902  }
15903  compile_error(PARSER_ARG "identifier %"PRIsVALUE" is not valid to get", rb_id2str(id));
15904  return 0;
15905 }
15906 
15907 static NODE *
15908 kwd_append(NODE *kwlist, NODE *kw)
15909 {
15910  if (kwlist) {
15911  NODE *kws = kwlist;
15912  while (kws->nd_next) {
15913  kws = kws->nd_next;
15914  }
15915  kws->nd_next = kw;
15916  }
15917  return kwlist;
15918 }
15919 
15920 static NODE *
15921 new_regexp_gen(struct parser_params *parser, NODE *node, int options)
15922 {
15923  NODE *list, *prev;
15924 
15925  if (!node) {
15926  return NEW_LIT(reg_compile(STR_NEW0(), options));
15927  }
15928  switch (nd_type(node)) {
15929  case NODE_STR:
15930  {
15931  VALUE src = node->nd_lit;
15932  nd_set_type(node, NODE_LIT);
15933  node->nd_lit = reg_compile(src, options);
15934  }
15935  break;
15936  default:
15937  node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
15938  case NODE_DSTR:
15939  if (options & RE_OPTION_ONCE) {
15941  }
15942  else {
15943  nd_set_type(node, NODE_DREGX);
15944  }
15945  node->nd_cflag = options & RE_OPTION_MASK;
15946  if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
15947  for (list = (prev = node)->nd_next; list; list = list->nd_next) {
15948  if (nd_type(list->nd_head) == NODE_STR) {
15949  VALUE tail = list->nd_head->nd_lit;
15950  if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
15951  VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
15952  if (!literal_concat0(parser, lit, tail)) {
15953  node = 0;
15954  break;
15955  }
15956  rb_str_resize(tail, 0);
15957  prev->nd_next = list->nd_next;
15958  rb_gc_force_recycle((VALUE)list->nd_head);
15959  rb_gc_force_recycle((VALUE)list);
15960  list = prev;
15961  }
15962  else {
15963  prev = list;
15964  }
15965  }
15966  else {
15967  prev = 0;
15968  }
15969  }
15970  if (!node->nd_next) {
15971  VALUE src = node->nd_lit;
15972  nd_set_type(node, NODE_LIT);
15973  node->nd_lit = reg_compile(src, options);
15974  }
15975  break;
15976  }
15977  return node;
15978 }
15979 
15980 static NODE *
15981 new_xstring_gen(struct parser_params *parser, NODE *node)
15982 {
15983  if (!node) {
15984  return NEW_XSTR(STR_NEW0());
15985  }
15986  switch (nd_type(node)) {
15987  case NODE_STR:
15988  nd_set_type(node, NODE_XSTR);
15989  break;
15990  case NODE_DSTR:
15991  nd_set_type(node, NODE_DXSTR);
15992  break;
15993  default:
15994  node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
15995  break;
15996  }
15997  return node;
15998 }
15999 #else /* !RIPPER */
16000 static int
16001 id_is_var_gen(struct parser_params *parser, ID id)
16002 {
16003  if (is_notop_id(id)) {
16004  switch (id & ID_SCOPE_MASK) {
16005  case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
16006  return 1;
16007  case ID_LOCAL:
16008  if (dyna_in_block() && dvar_defined(id)) return 1;
16009  if (local_id(id)) return 1;
16010  /* method call without arguments */
16011  return 0;
16012  }
16013  }
16014  compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2str(id));
16015  return 0;
16016 }
16017 
16018 static VALUE
16019 new_regexp_gen(struct parser_params *parser, VALUE re, VALUE opt)
16020 {
16021  VALUE src = 0, err;
16022  int options = 0;
16023  if (ripper_is_node_yylval(re)) {
16024  src = RNODE(re)->nd_cval;
16025  re = RNODE(re)->nd_rval;
16026  }
16027  if (ripper_is_node_yylval(opt)) {
16028  options = (int)RNODE(opt)->nd_tag;
16029  opt = RNODE(opt)->nd_rval;
16030  }
16031  if (src && NIL_P(parser_reg_compile(parser, src, options, &err))) {
16033  }
16034  return dispatch2(regexp_literal, re, opt);
16035 }
16036 
16037 static VALUE
16038 new_xstring_gen(struct parser_params *parser, VALUE str)
16039 {
16040  return dispatch1(xstring_literal, str);
16041 }
16042 #endif /* !RIPPER */
16043 
16044 static const char lex_state_names[][13] = {
16045  "EXPR_BEG", "EXPR_END", "EXPR_ENDARG", "EXPR_ENDFN", "EXPR_ARG",
16046  "EXPR_CMDARG", "EXPR_MID", "EXPR_FNAME", "EXPR_DOT", "EXPR_CLASS",
16047  "EXPR_LABEL", "EXPR_LABELED","EXPR_FITEM",
16048 };
16049 
16050 static VALUE
16052 {
16053  int i, sep = 0;
16054  unsigned int mask = 1;
16055  static const char none[] = "EXPR_NONE";
16056 
16057  for (i = 0; i < EXPR_MAX_STATE; ++i, mask <<= 1) {
16058  if ((unsigned)state & mask) {
16059  if (sep) {
16060  rb_str_cat(buf, "|", 1);
16061  }
16062  sep = 1;
16063  rb_str_cat_cstr(buf, lex_state_names[i]);
16064  }
16065  }
16066  if (!sep) {
16067  rb_str_cat(buf, none, sizeof(none)-1);
16068  }
16069  return buf;
16070 }
16071 
16072 static enum lex_state_e
16073 trace_lex_state(enum lex_state_e from, enum lex_state_e to, int line)
16074 {
16075  VALUE mesg;
16076  mesg = rb_str_new_cstr("lex_state: ");
16077  append_lex_state_name(from, mesg);
16078  rb_str_cat_cstr(mesg, " -> ");
16079  append_lex_state_name(to, mesg);
16080  rb_str_catf(mesg, " at line %d\n", line);
16081  rb_io_write(rb_stdout, mesg);
16082  return to;
16083 }
16084 
16085 static void
16086 show_bitstack(stack_type stack, const char *name, int line)
16087 {
16088  VALUE mesg = rb_sprintf("%s: ", name);
16089  if (stack == 0) {
16090  rb_str_cat_cstr(mesg, "0");
16091  }
16092  else {
16093  stack_type mask = (stack_type)1U << (CHAR_BIT * sizeof(stack_type) - 1);
16094  for (; mask && !(stack & mask); mask >>= 1) continue;
16095  for (; mask; mask >>= 1) rb_str_cat(mesg, stack & mask ? "1" : "0", 1);
16096  }
16097  rb_str_catf(mesg, " at line %d\n", line);
16098  rb_io_write(rb_stdout, mesg);
16099 }
16100 
16101 #ifdef RIPPER
16102 static VALUE
16103 assignable_gen(struct parser_params *parser, VALUE lhs)
16104 #else
16105 static NODE*
16106 assignable_gen(struct parser_params *parser, ID id, NODE *val)
16107 #endif
16108 {
16109 #ifdef RIPPER
16110  ID id = get_id(lhs);
16111 # define assignable_result(x) get_value(lhs)
16112 # define parser_yyerror(parser, x) assign_error_gen(parser, lhs)
16113 #else
16114 # define assignable_result(x) (x)
16115 #endif
16116  if (!id) return assignable_result(0);
16117  switch (id) {
16118  case keyword_self:
16119  yyerror("Can't change the value of self");
16120  goto error;
16121  case keyword_nil:
16122  yyerror("Can't assign to nil");
16123  goto error;
16124  case keyword_true:
16125  yyerror("Can't assign to true");
16126  goto error;
16127  case keyword_false:
16128  yyerror("Can't assign to false");
16129  goto error;
16130  case keyword__FILE__:
16131  yyerror("Can't assign to __FILE__");
16132  goto error;
16133  case keyword__LINE__:
16134  yyerror("Can't assign to __LINE__");
16135  goto error;
16136  case keyword__ENCODING__:
16137  yyerror("Can't assign to __ENCODING__");
16138  goto error;
16139  }
16140  switch (id_type(id)) {
16141  case ID_LOCAL:
16142  if (dyna_in_block()) {
16143  if (dvar_curr(id)) {
16144  return assignable_result(NEW_DASGN_CURR(id, val));
16145  }
16146  else if (dvar_defined(id)) {
16147  return assignable_result(NEW_DASGN(id, val));
16148  }
16149  else if (local_id(id)) {
16150  return assignable_result(NEW_LASGN(id, val));
16151  }
16152  else {
16153  dyna_var(id);
16154  return assignable_result(NEW_DASGN_CURR(id, val));
16155  }
16156  }
16157  else {
16158  if (!local_id(id)) {
16159  local_var(id);
16160  }
16161  return assignable_result(NEW_LASGN(id, val));
16162  }
16163  break;
16164  case ID_GLOBAL:
16165  return assignable_result(NEW_GASGN(id, val));
16166  case ID_INSTANCE:
16167  return assignable_result(NEW_IASGN(id, val));
16168  case ID_CONST:
16169  if (!in_def && !in_single)
16170  return assignable_result(NEW_CDECL(id, val, 0));
16171  yyerror("dynamic constant assignment");
16172  break;
16173  case ID_CLASS:
16174  return assignable_result(NEW_CVASGN(id, val));
16175  default:
16176  compile_error(PARSER_ARG "identifier %"PRIsVALUE" is not valid to set", rb_id2str(id));
16177  }
16178  error:
16179  return assignable_result(0);
16180 #undef assignable_result
16181 #undef parser_yyerror
16182 }
16183 
16184 static int
16186 {
16187  VALUE s;
16188  if (name == idUScore) return 1;
16189  if (!is_local_id(name)) return 0;
16190  s = rb_id2str(name);
16191  if (!s) return 0;
16192  return RSTRING_PTR(s)[0] == '_';
16193 }
16194 
16195 #define LVAR_USED ((ID)1 << (sizeof(ID) * CHAR_BIT - 1))
16196 
16197 static int
16198 shadowing_lvar_0(struct parser_params *parser, ID name)
16199 {
16200  if (is_private_local_id(name)) return 1;
16201  if (dyna_in_block()) {
16202  if (dvar_curr(name)) {
16203  yyerror("duplicated argument name");
16204  }
16205  else if (dvar_defined_get(name) || local_id(name)) {
16206  rb_warning1("shadowing outer local variable - %"PRIsWARN, rb_id2str(name));
16207  vtable_add(lvtbl->vars, name);
16208  if (lvtbl->used) {
16210  }
16211  return 0;
16212  }
16213  }
16214  else {
16215  if (local_id(name)) {
16216  yyerror("duplicated argument name");
16217  }
16218  }
16219  return 1;
16220 }
16221 
16222 static ID
16223 shadowing_lvar_gen(struct parser_params *parser, ID name)
16224 {
16225  shadowing_lvar_0(parser, name);
16226  return name;
16227 }
16228 
16229 static void
16230 new_bv_gen(struct parser_params *parser, ID name)
16231 {
16232  if (!name) return;
16233  if (!is_local_id(name)) {
16234  compile_error(PARSER_ARG "invalid local variable - %"PRIsVALUE,
16235  rb_id2str(name));
16236  return;
16237  }
16238  if (!shadowing_lvar_0(parser, name)) return;
16239  dyna_var(name);
16240 }
16241 
16242 #ifndef RIPPER
16243 static NODE *
16244 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
16245 {
16246  return NEW_ATTRASGN(recv, tASET, idx);
16247 }
16248 
16249 static void
16250 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
16251 {
16252  if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
16253  compile_error(PARSER_ARG "both block arg and actual block given");
16254  }
16255 }
16256 
16257 static NODE *
16258 attrset_gen(struct parser_params *parser, NODE *recv, ID atype, ID id)
16259 {
16260  if (!CALL_Q_P(atype)) id = rb_id_attrset(id);
16261  return NEW_ATTRASGN(recv, id, 0);
16262 }
16263 
16264 static void
16266 {
16267  switch (nd_type(node)) {
16268  case NODE_NTH_REF:
16269  compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
16270  break;
16271  case NODE_BACK_REF:
16272  compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
16273  break;
16274  }
16275 }
16276 
16277 static NODE *
16278 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
16279 {
16280  if (!node2) return node1;
16281  switch (nd_type(node1)) {
16282  case NODE_BLOCK_PASS:
16283  if (node1->nd_head)
16284  node1->nd_head = arg_concat(node1->nd_head, node2);
16285  else
16286  node1->nd_head = NEW_LIST(node2);
16287  return node1;
16288  case NODE_ARGSPUSH:
16289  if (nd_type(node2) != NODE_ARRAY) break;
16290  node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
16291  nd_set_type(node1, NODE_ARGSCAT);
16292  return node1;
16293  case NODE_ARGSCAT:
16294  if (nd_type(node2) != NODE_ARRAY ||
16295  nd_type(node1->nd_body) != NODE_ARRAY) break;
16296  node1->nd_body = list_concat(node1->nd_body, node2);
16297  return node1;
16298  }
16299  return NEW_ARGSCAT(node1, node2);
16300 }
16301 
16302 static NODE *
16303 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
16304 {
16305  if (!node1) return NEW_LIST(node2);
16306  switch (nd_type(node1)) {
16307  case NODE_ARRAY:
16308  return list_append(node1, node2);
16309  case NODE_BLOCK_PASS:
16310  node1->nd_head = arg_append(node1->nd_head, node2);
16311  return node1;
16312  case NODE_ARGSPUSH:
16313  node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
16314  nd_set_type(node1, NODE_ARGSCAT);
16315  return node1;
16316  }
16317  return NEW_ARGSPUSH(node1, node2);
16318 }
16319 
16320 static NODE *
16322 {
16323  if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
16324  if (nd_type(node) == NODE_ARRAY) return node;
16325  return 0;
16326 }
16327 
16328 static NODE *
16329 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
16330 {
16331  if (!lhs) return 0;
16332 
16333  switch (nd_type(lhs)) {
16334  case NODE_GASGN:
16335  case NODE_IASGN:
16336  case NODE_IASGN2:
16337  case NODE_LASGN:
16338  case NODE_DASGN:
16339  case NODE_DASGN_CURR:
16340  case NODE_MASGN:
16341  case NODE_CDECL:
16342  case NODE_CVASGN:
16343  lhs->nd_value = rhs;
16344  break;
16345 
16346  case NODE_ATTRASGN:
16347  case NODE_CALL:
16348  lhs->nd_args = arg_append(lhs->nd_args, rhs);
16349  break;
16350 
16351  default:
16352  /* should not happen */
16353  break;
16354  }
16355 
16356  return lhs;
16357 }
16358 
16359 static int
16360 value_expr_gen(struct parser_params *parser, NODE *node)
16361 {
16362  int cond = 0;
16363 
16364  if (!node) {
16365  rb_warning0("empty expression");
16366  }
16367  while (node) {
16368  switch (nd_type(node)) {
16369  case NODE_RETURN:
16370  case NODE_BREAK:
16371  case NODE_NEXT:
16372  case NODE_REDO:
16373  case NODE_RETRY:
16374  if (!cond) yyerror("void value expression");
16375  /* or "control never reach"? */
16376  return FALSE;
16377 
16378  case NODE_BLOCK:
16379  while (node->nd_next) {
16380  node = node->nd_next;
16381  }
16382  node = node->nd_head;
16383  break;
16384 
16385  case NODE_BEGIN:
16386  node = node->nd_body;
16387  break;
16388 
16389  case NODE_IF:
16390  if (!node->nd_body) {
16391  node = node->nd_else;
16392  break;
16393  }
16394  else if (!node->nd_else) {
16395  node = node->nd_body;
16396  break;
16397  }
16398  if (!value_expr(node->nd_body)) return FALSE;
16399  node = node->nd_else;
16400  break;
16401 
16402  case NODE_AND:
16403  case NODE_OR:
16404  cond = 1;
16405  node = node->nd_2nd;
16406  break;
16407 
16408  default:
16409  return TRUE;
16410  }
16411  }
16412 
16413  return TRUE;
16414 }
16415 
16416 static void
16417 void_expr_gen(struct parser_params *parser, NODE *node)
16418 {
16419  const char *useless = 0;
16420 
16421  if (!RTEST(ruby_verbose)) return;
16422 
16423  if (!node) return;
16424  switch (nd_type(node)) {
16425  case NODE_CALL:
16426  switch (node->nd_mid) {
16427  case '+':
16428  case '-':
16429  case '*':
16430  case '/':
16431  case '%':
16432  case tPOW:
16433  case tUPLUS:
16434  case tUMINUS:
16435  case '|':
16436  case '^':
16437  case '&':
16438  case tCMP:
16439  case '>':
16440  case tGEQ:
16441  case '<':
16442  case tLEQ:
16443  case tEQ:
16444  case tNEQ:
16445  useless = rb_id2name(node->nd_mid);
16446  break;
16447  }
16448  break;
16449 
16450  case NODE_LVAR:
16451  case NODE_DVAR:
16452  case NODE_GVAR:
16453  case NODE_IVAR:
16454  case NODE_CVAR:
16455  case NODE_NTH_REF:
16456  case NODE_BACK_REF:
16457  useless = "a variable";
16458  break;
16459  case NODE_CONST:
16460  useless = "a constant";
16461  break;
16462  case NODE_LIT:
16463  case NODE_STR:
16464  case NODE_DSTR:
16465  case NODE_DREGX:
16466  case NODE_DREGX_ONCE:
16467  useless = "a literal";
16468  break;
16469  case NODE_COLON2:
16470  case NODE_COLON3:
16471  useless = "::";
16472  break;
16473  case NODE_DOT2:
16474  useless = "..";
16475  break;
16476  case NODE_DOT3:
16477  useless = "...";
16478  break;
16479  case NODE_SELF:
16480  useless = "self";
16481  break;
16482  case NODE_NIL:
16483  useless = "nil";
16484  break;
16485  case NODE_TRUE:
16486  useless = "true";
16487  break;
16488  case NODE_FALSE:
16489  useless = "false";
16490  break;
16491  case NODE_DEFINED:
16492  useless = "defined?";
16493  break;
16494  }
16495 
16496  if (useless) {
16497  rb_warn1L(nd_line(node), "possibly useless use of %s in void context", WARN_S(useless));
16498  }
16499 }
16500 
16501 static void
16502 void_stmts_gen(struct parser_params *parser, NODE *node)
16503 {
16504  if (!RTEST(ruby_verbose)) return;
16505  if (!node) return;
16506  if (nd_type(node) != NODE_BLOCK) return;
16507 
16508  for (;;) {
16509  if (!node->nd_next) return;
16510  void_expr0(node->nd_head);
16511  node = node->nd_next;
16512  }
16513 }
16514 
16515 static NODE *
16517 {
16518  NODE **n = &node, *n1 = node;
16519  while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
16520  *n = n1 = n1->nd_body;
16521  }
16522  return node;
16523 }
16524 
16525 static NODE *
16527 {
16528  NODE **n = &node, *n1 = node;
16529  while (n1 && nd_type(n1) == NODE_BEGIN) {
16530  *n = n1 = n1->nd_body;
16531  }
16532  return node;
16533 }
16534 
16535 static void
16536 reduce_nodes_gen(struct parser_params *parser, NODE **body)
16537 {
16538  NODE *node = *body;
16539 
16540  if (!node) {
16541  *body = NEW_NIL();
16542  return;
16543  }
16544 #define subnodes(n1, n2) \
16545  ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
16546  (!node->n2) ? (body = &node->n1, 1) : \
16547  (reduce_nodes(&node->n1), body = &node->n2, 1))
16548 
16549  while (node) {
16550  int newline = (int)(node->flags & NODE_FL_NEWLINE);
16551  switch (nd_type(node)) {
16552  end:
16553  case NODE_NIL:
16554  *body = 0;
16555  return;
16556  case NODE_RETURN:
16557  *body = node = node->nd_stts;
16558  if (newline && node) node->flags |= NODE_FL_NEWLINE;
16559  continue;
16560  case NODE_BEGIN:
16561  *body = node = node->nd_body;
16562  if (newline && node) node->flags |= NODE_FL_NEWLINE;
16563  continue;
16564  case NODE_BLOCK:
16565  body = &node->nd_end->nd_head;
16566  break;
16567  case NODE_IF:
16568  if (subnodes(nd_body, nd_else)) break;
16569  return;
16570  case NODE_CASE:
16571  body = &node->nd_body;
16572  break;
16573  case NODE_WHEN:
16574  if (!subnodes(nd_body, nd_next)) goto end;
16575  break;
16576  case NODE_ENSURE:
16577  if (!subnodes(nd_head, nd_resq)) goto end;
16578  break;
16579  case NODE_RESCUE:
16580  if (node->nd_else) {
16581  body = &node->nd_resq;
16582  break;
16583  }
16584  if (!subnodes(nd_head, nd_resq)) goto end;
16585  break;
16586  default:
16587  return;
16588  }
16589  node = *body;
16590  if (newline && node) node->flags |= NODE_FL_NEWLINE;
16591  }
16592 
16593 #undef subnodes
16594 }
16595 
16596 static int
16598 {
16599  if (!node) return 1;
16600  switch (nd_type(node)) {
16601  case NODE_HASH:
16602  if (!(node = node->nd_head)) break;
16603  case NODE_ARRAY:
16604  do {
16605  if (!is_static_content(node->nd_head)) return 0;
16606  } while ((node = node->nd_next) != 0);
16607  case NODE_LIT:
16608  case NODE_STR:
16609  case NODE_NIL:
16610  case NODE_TRUE:
16611  case NODE_FALSE:
16612  case NODE_ZARRAY:
16613  break;
16614  default:
16615  return 0;
16616  }
16617  return 1;
16618 }
16619 
16620 static int
16621 assign_in_cond(struct parser_params *parser, NODE *node)
16622 {
16623  switch (nd_type(node)) {
16624  case NODE_MASGN:
16625  case NODE_LASGN:
16626  case NODE_DASGN:
16627  case NODE_DASGN_CURR:
16628  case NODE_GASGN:
16629  case NODE_IASGN:
16630  break;
16631 
16632  default:
16633  return 0;
16634  }
16635 
16636  if (!node->nd_value) return 1;
16637  if (is_static_content(node->nd_value)) {
16638  /* reports always */
16639  parser_warn(node->nd_value, "found = in conditional, should be ==");
16640  }
16641  return 1;
16642 }
16643 
16644 static void
16645 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
16646 {
16647  if (!e_option_supplied(parser)) parser_warn(node, str);
16648 }
16649 
16650 static void
16651 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
16652 {
16653  if (!e_option_supplied(parser)) parser_warning(node, str);
16654 }
16655 
16656 static NODE *cond0(struct parser_params*,NODE*,int);
16657 
16658 static NODE*
16659 range_op(struct parser_params *parser, NODE *node)
16660 {
16661  enum node_type type;
16662 
16663  if (node == 0) return 0;
16664 
16665  type = nd_type(node);
16666  value_expr(node);
16667  if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
16668  warn_unless_e_option(parser, node, "integer literal in conditional range");
16669  return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
16670  }
16671  return cond0(parser, node, FALSE);
16672 }
16673 
16674 static int
16676 {
16677  if (!node) return 1; /* same as NODE_NIL */
16678  switch (nd_type(node)) {
16679  case NODE_LIT:
16680  case NODE_STR:
16681  case NODE_DSTR:
16682  case NODE_EVSTR:
16683  case NODE_DREGX:
16684  case NODE_DREGX_ONCE:
16685  case NODE_DSYM:
16686  return 2;
16687  case NODE_TRUE:
16688  case NODE_FALSE:
16689  case NODE_NIL:
16690  return 1;
16691  }
16692  return 0;
16693 }
16694 
16695 static NODE*
16696 cond0(struct parser_params *parser, NODE *node, int method_op)
16697 {
16698  if (node == 0) return 0;
16699  assign_in_cond(parser, node);
16700 
16701  switch (nd_type(node)) {
16702  case NODE_DSTR:
16703  case NODE_EVSTR:
16704  case NODE_STR:
16705  if (!method_op) rb_warn0("string literal in condition");
16706  break;
16707 
16708  case NODE_DREGX:
16709  case NODE_DREGX_ONCE:
16710  if (!method_op)
16711  warning_unless_e_option(parser, node, "regex literal in condition");
16712  return NEW_MATCH2(node, NEW_GVAR(idLASTLINE));
16713 
16714  case NODE_AND:
16715  case NODE_OR:
16716  node->nd_1st = cond0(parser, node->nd_1st, FALSE);
16717  node->nd_2nd = cond0(parser, node->nd_2nd, FALSE);
16718  break;
16719 
16720  case NODE_DOT2:
16721  case NODE_DOT3:
16722  node->nd_beg = range_op(parser, node->nd_beg);
16723  node->nd_end = range_op(parser, node->nd_end);
16724  if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
16725  else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
16726  if (!method_op && !e_option_supplied(parser)) {
16727  int b = literal_node(node->nd_beg);
16728  int e = literal_node(node->nd_end);
16729  if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
16730  parser_warn(node, "range literal in condition");
16731  }
16732  }
16733  break;
16734 
16735  case NODE_DSYM:
16736  if (!method_op) parser_warning(node, "literal in condition");
16737  break;
16738 
16739  case NODE_LIT:
16740  if (RB_TYPE_P(node->nd_lit, T_REGEXP)) {
16741  if (!method_op)
16742  warn_unless_e_option(parser, node, "regex literal in condition");
16743  nd_set_type(node, NODE_MATCH);
16744  }
16745  else {
16746  if (!method_op)
16747  parser_warning(node, "literal in condition");
16748  }
16749  default:
16750  break;
16751  }
16752  return node;
16753 }
16754 
16755 static NODE*
16756 cond_gen(struct parser_params *parser, NODE *node, int method_op)
16757 {
16758  if (node == 0) return 0;
16759  return cond0(parser, node, method_op);
16760 }
16761 
16762 static NODE*
16763 new_if_gen(struct parser_params *parser, NODE *cc, NODE *left, NODE *right)
16764 {
16765  if (!cc) return right;
16766  cc = cond0(parser, cc, FALSE);
16767  return newline_node(NEW_IF(cc, left, right));
16768 }
16769 
16770 static NODE*
16771 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
16772 {
16773  value_expr(left);
16774  if (left && (enum node_type)nd_type(left) == type) {
16775  NODE *node = left, *second;
16776  while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
16777  node = second;
16778  }
16779  node->nd_2nd = NEW_NODE(type, second, right, 0);
16780  return left;
16781  }
16782  return NEW_NODE(type, left, right, 0);
16783 }
16784 
16785 static void
16786 no_blockarg(struct parser_params *parser, NODE *node)
16787 {
16788  if (node && nd_type(node) == NODE_BLOCK_PASS) {
16789  compile_error(PARSER_ARG "block argument should not be given");
16790  }
16791 }
16792 
16793 static NODE *
16794 ret_args_gen(struct parser_params *parser, NODE *node)
16795 {
16796  if (node) {
16797  no_blockarg(parser, node);
16798  if (nd_type(node) == NODE_ARRAY) {
16799  if (node->nd_next == 0) {
16800  node = node->nd_head;
16801  }
16802  else {
16803  nd_set_type(node, NODE_VALUES);
16804  }
16805  }
16806  }
16807  return node;
16808 }
16809 
16810 static NODE *
16811 new_yield_gen(struct parser_params *parser, NODE *node)
16812 {
16813  if (node) no_blockarg(parser, node);
16814 
16815  return NEW_YIELD(node);
16816 }
16817 
16818 static VALUE
16820 {
16821  int type = TYPE(lit);
16822  switch (type) {
16823  case T_FIXNUM:
16824  lit = LONG2FIX(-FIX2LONG(lit));
16825  break;
16826  case T_BIGNUM:
16827  BIGNUM_NEGATE(lit);
16828  lit = rb_big_norm(lit);
16829  break;
16830  case T_RATIONAL:
16831  RRATIONAL_SET_NUM(lit, negate_lit(RRATIONAL(lit)->num));
16832  break;
16833  case T_COMPLEX:
16834  RCOMPLEX_SET_REAL(lit, negate_lit(RCOMPLEX(lit)->real));
16835  RCOMPLEX_SET_IMAG(lit, negate_lit(RCOMPLEX(lit)->imag));
16836  break;
16837  case T_FLOAT:
16838 #if USE_FLONUM
16839  if (FLONUM_P(lit)) {
16840  lit = DBL2NUM(-RFLOAT_VALUE(lit));
16841  break;
16842  }
16843 #endif
16844  RFLOAT(lit)->float_value = -RFLOAT_VALUE(lit);
16845  break;
16846  default:
16847  rb_bug("unknown literal type (%d) passed to negate_lit", type);
16848  break;
16849  }
16850  return lit;
16851 }
16852 
16853 static NODE *
16854 arg_blk_pass(NODE *node1, NODE *node2)
16855 {
16856  if (node2) {
16857  node2->nd_head = node1;
16858  return node2;
16859  }
16860  return node1;
16861 }
16862 
16863 
16864 static NODE*
16865 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, NODE *tail)
16866 {
16867  int saved_line = ruby_sourceline;
16868  struct rb_args_info *args = tail->nd_ainfo;
16869 
16870  args->pre_args_num = m ? rb_long2int(m->nd_plen) : 0;
16871  args->pre_init = m ? m->nd_next : 0;
16872 
16873  args->post_args_num = p ? rb_long2int(p->nd_plen) : 0;
16874  args->post_init = p ? p->nd_next : 0;
16875  args->first_post_arg = p ? p->nd_pid : 0;
16876 
16877  args->rest_arg = r;
16878 
16879  args->opt_args = o;
16880 
16881  ruby_sourceline = saved_line;
16882 
16883  return tail;
16884 }
16885 
16886 static NODE*
16887 new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b)
16888 {
16889  int saved_line = ruby_sourceline;
16890  struct rb_args_info *args;
16891  NODE *node;
16892 
16893  args = ZALLOC(struct rb_args_info);
16894  node = NEW_NODE(NODE_ARGS, 0, 0, args);
16895 
16896  args->block_arg = b;
16897  args->kw_args = k;
16898 
16899  if (k) {
16900  /*
16901  * def foo(k1: 1, kr1:, k2: 2, **krest, &b)
16902  * variable order: k1, kr1, k2, &b, internal_id, krest
16903  * #=> <reorder>
16904  * variable order: kr1, k1, k2, internal_id, krest, &b
16905  */
16906  ID kw_bits;
16907  NODE *kwn = k;
16908  struct vtable *required_kw_vars = vtable_alloc(NULL);
16909  struct vtable *kw_vars = vtable_alloc(NULL);
16910  int i;
16911 
16912  while (kwn) {
16913  NODE *val_node = kwn->nd_body->nd_value;
16914  ID vid = kwn->nd_body->nd_vid;
16915 
16916  if (val_node == (NODE *)-1) {
16917  vtable_add(required_kw_vars, vid);
16918  }
16919  else {
16920  vtable_add(kw_vars, vid);
16921  }
16922 
16923  kwn = kwn->nd_next;
16924  }
16925 
16926  kw_bits = internal_id();
16927  if (kr && is_junk_id(kr)) vtable_pop(lvtbl->args, 1);
16928  vtable_pop(lvtbl->args, vtable_size(required_kw_vars) + vtable_size(kw_vars) + (b != 0));
16929 
16930  for (i=0; i<vtable_size(required_kw_vars); i++) arg_var(required_kw_vars->tbl[i]);
16931  for (i=0; i<vtable_size(kw_vars); i++) arg_var(kw_vars->tbl[i]);
16932  vtable_free(required_kw_vars);
16933  vtable_free(kw_vars);
16934 
16935  arg_var(kw_bits);
16936  if (kr) arg_var(kr);
16937  if (b) arg_var(b);
16938 
16939  args->kw_rest_arg = NEW_DVAR(kw_bits);
16940  args->kw_rest_arg->nd_cflag = kr;
16941  }
16942  else if (kr) {
16943  if (b) vtable_pop(lvtbl->args, 1); /* reorder */
16944  arg_var(kr);
16945  if (b) arg_var(b);
16946  args->kw_rest_arg = NEW_DVAR(kr);
16947  }
16948 
16949  ruby_sourceline = saved_line;
16950  return node;
16951 }
16952 
16953 static NODE*
16954 dsym_node_gen(struct parser_params *parser, NODE *node)
16955 {
16956  VALUE lit;
16957 
16958  if (!node) {
16959  return NEW_LIT(ID2SYM(idNULL));
16960  }
16961 
16962  switch (nd_type(node)) {
16963  case NODE_DSTR:
16964  nd_set_type(node, NODE_DSYM);
16965  break;
16966  case NODE_STR:
16967  lit = node->nd_lit;
16968  node->nd_lit = ID2SYM(rb_intern_str(lit));
16969  nd_set_type(node, NODE_LIT);
16970  break;
16971  default:
16972  node = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST(node));
16973  break;
16974  }
16975  return node;
16976 }
16977 
16978 static int
16980 {
16981  NODE *node = (NODE *)v;
16982  NODE **result = (NODE **)h;
16983  node->nd_alen = 2;
16984  node->nd_next->nd_end = node->nd_next;
16985  node->nd_next->nd_next = 0;
16986  if (*result)
16987  list_concat(*result, node);
16988  else
16989  *result = node;
16990  return ST_CONTINUE;
16991 }
16992 
16993 static NODE *
16995 {
16996  st_table *literal_keys = st_init_numtable_with_size(hash->nd_alen / 2);
16997  NODE *result = 0;
16998  while (hash && hash->nd_head && hash->nd_next) {
16999  NODE *head = hash->nd_head;
17000  NODE *value = hash->nd_next;
17001  NODE *next = value->nd_next;
17002  VALUE key = (VALUE)head;
17003  st_data_t data;
17004  if (nd_type(head) == NODE_LIT &&
17005  st_lookup(literal_keys, (key = head->nd_lit), &data)) {
17007  "key %+"PRIsVALUE" is duplicated and overwritten on line %d",
17008  head->nd_lit, nd_line(head));
17009  head = ((NODE *)data)->nd_next;
17010  head->nd_head = block_append(head->nd_head, value->nd_head);
17011  }
17012  else {
17013  st_insert(literal_keys, (st_data_t)key, (st_data_t)hash);
17014  }
17015  hash = next;
17016  }
17017  st_foreach(literal_keys, append_literal_keys, (st_data_t)&result);
17018  st_free_table(literal_keys);
17019  if (hash) {
17020  if (!result) result = hash;
17021  else list_concat(result, hash);
17022  }
17023  return result;
17024 }
17025 
17026 static NODE *
17028 {
17029  if (hash) hash = remove_duplicate_keys(parser, hash);
17030  return NEW_HASH(hash);
17031 }
17032 #endif /* !RIPPER */
17033 
17034 #ifndef RIPPER
17035 static NODE *
17036 new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
17037 {
17038  NODE *asgn;
17039 
17040  if (lhs) {
17041  ID vid = lhs->nd_vid;
17042  if (op == tOROP) {
17043  lhs->nd_value = rhs;
17044  asgn = NEW_OP_ASGN_OR(gettable(vid), lhs);
17045  if (is_notop_id(vid)) {
17046  switch (id_type(vid)) {
17047  case ID_GLOBAL:
17048  case ID_INSTANCE:
17049  case ID_CLASS:
17050  asgn->nd_aid = vid;
17051  }
17052  }
17053  }
17054  else if (op == tANDOP) {
17055  lhs->nd_value = rhs;
17056  asgn = NEW_OP_ASGN_AND(gettable(vid), lhs);
17057  }
17058  else {
17059  asgn = lhs;
17060  asgn->nd_value = NEW_CALL(gettable(vid), op, NEW_LIST(rhs));
17061  }
17062  }
17063  else {
17064  asgn = NEW_BEGIN(0);
17065  }
17066  return asgn;
17067 }
17068 
17069 static NODE *
17071  ID atype, ID attr, ID op, NODE *rhs)
17072 {
17073  NODE *asgn;
17074 
17075  if (op == tOROP) {
17076  op = 0;
17077  }
17078  else if (op == tANDOP) {
17079  op = 1;
17080  }
17081  asgn = NEW_OP_ASGN2(lhs, CALL_Q_P(atype), attr, op, rhs);
17082  fixpos(asgn, lhs);
17083  return asgn;
17084 }
17085 
17086 static NODE *
17087 new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
17088 {
17089  NODE *asgn;
17090 
17091  if (op == tOROP) {
17092  op = 0;
17093  }
17094  else if (op == tANDOP) {
17095  op = 1;
17096  }
17097  if (lhs) {
17098  asgn = NEW_OP_CDECL(lhs, op, rhs);
17099  }
17100  else {
17101  asgn = NEW_BEGIN(0);
17102  }
17103  fixpos(asgn, lhs);
17104  return asgn;
17105 }
17106 
17107 static NODE *
17108 const_decl_gen(struct parser_params *parser, NODE *path)
17109 {
17110  if (in_def || in_single) {
17111  yyerror("dynamic constant assignment");
17112  }
17113  return NEW_CDECL(0, 0, (path));
17114 }
17115 #else
17116 static VALUE
17117 new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs)
17118 {
17119  return dispatch3(opassign, lhs, op, rhs);
17120 }
17121 
17122 static VALUE
17123 new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs)
17124 {
17125  VALUE recv = dispatch3(field, lhs, type, attr);
17126  return dispatch3(opassign, recv, op, rhs);
17127 }
17128 
17129 static VALUE
17130 const_decl_gen(struct parser_params *parser, VALUE path)
17131 {
17132  if (in_def || in_single) {
17133  assign_error(path);
17134  }
17135  return path;
17136 }
17137 
17138 static VALUE
17139 assign_error_gen(struct parser_params *parser, VALUE a)
17140 {
17141  a = dispatch1(assign_error, a);
17142  ripper_error();
17143  return a;
17144 }
17145 #endif
17146 
17147 static void
17148 warn_unused_var(struct parser_params *parser, struct local_vars *local)
17149 {
17150  int i, cnt;
17151  ID *v, *u;
17152 
17153  if (!local->used) return;
17154  v = local->vars->tbl;
17155  u = local->used->tbl;
17156  cnt = local->used->pos;
17157  if (cnt != local->vars->pos) {
17158  rb_bug("local->used->pos != local->vars->pos");
17159  }
17160  for (i = 0; i < cnt; ++i) {
17161  if (!v[i] || (u[i] & LVAR_USED)) continue;
17162  if (is_private_local_id(v[i])) continue;
17163  rb_warn1L((int)u[i], "assigned but unused variable - %"PRIsWARN, rb_id2str(v[i]));
17164  }
17165 }
17166 
17167 static void
17168 local_push_gen(struct parser_params *parser, int inherit_dvars)
17169 {
17170  struct local_vars *local;
17171 
17172  local = ALLOC(struct local_vars);
17173  local->prev = lvtbl;
17174  local->args = vtable_alloc(0);
17175  local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
17176  local->used = !(inherit_dvars &&
17178  RTEST(ruby_verbose) ? vtable_alloc(0) : 0;
17179 # if WARN_PAST_SCOPE
17180  local->past = 0;
17181 # endif
17182  local->cmdargs = cmdarg_stack;
17183  CMDARG_SET(0);
17184  lvtbl = local;
17185 }
17186 
17187 static void
17189 {
17190  struct local_vars *local = lvtbl->prev;
17191  if (lvtbl->used) {
17192  warn_unused_var(parser, lvtbl);
17193  vtable_free(lvtbl->used);
17194  }
17195 # if WARN_PAST_SCOPE
17196  while (lvtbl->past) {
17197  struct vtable *past = lvtbl->past;
17198  lvtbl->past = past->prev;
17199  vtable_free(past);
17200  }
17201 # endif
17202  vtable_free(lvtbl->args);
17203  vtable_free(lvtbl->vars);
17204  CMDARG_SET(lvtbl->cmdargs);
17205  xfree(lvtbl);
17206  lvtbl = local;
17207 }
17208 
17209 #ifndef RIPPER
17210 static ID*
17212 {
17213  int cnt_args = vtable_size(lvtbl->args);
17214  int cnt_vars = vtable_size(lvtbl->vars);
17215  int cnt = cnt_args + cnt_vars;
17216  int i, j;
17217  ID *buf;
17218 
17219  if (cnt <= 0) return 0;
17220  buf = ALLOC_N(ID, cnt + 1);
17221  MEMCPY(buf+1, lvtbl->args->tbl, ID, cnt_args);
17222  /* remove IDs duplicated to warn shadowing */
17223  for (i = 0, j = cnt_args+1; i < cnt_vars; ++i) {
17224  ID id = lvtbl->vars->tbl[i];
17225  if (!vtable_included(lvtbl->args, id)) {
17226  buf[j++] = id;
17227  }
17228  }
17229  if (--j < cnt) REALLOC_N(buf, ID, (cnt = j) + 1);
17230  buf[0] = cnt;
17231  return buf;
17232 }
17233 #endif
17234 
17235 static void
17236 arg_var_gen(struct parser_params *parser, ID id)
17237 {
17238  vtable_add(lvtbl->args, id);
17239 }
17240 
17241 static void
17242 local_var_gen(struct parser_params *parser, ID id)
17243 {
17244  vtable_add(lvtbl->vars, id);
17245  if (lvtbl->used) {
17247  }
17248 }
17249 
17250 static int
17251 local_id_gen(struct parser_params *parser, ID id)
17252 {
17253  struct vtable *vars, *args, *used;
17254 
17255  vars = lvtbl->vars;
17256  args = lvtbl->args;
17257  used = lvtbl->used;
17258 
17259  while (vars && POINTER_P(vars->prev)) {
17260  vars = vars->prev;
17261  args = args->prev;
17262  if (used) used = used->prev;
17263  }
17264 
17265  if (vars && vars->prev == DVARS_INHERIT) {
17266  return rb_local_defined(id, parser->base_block);
17267  }
17268  else if (vtable_included(args, id)) {
17269  return 1;
17270  }
17271  else {
17272  int i = vtable_included(vars, id);
17273  if (i && used) used->tbl[i-1] |= LVAR_USED;
17274  return i != 0;
17275  }
17276 }
17277 
17278 static const struct vtable *
17280 {
17281  lvtbl->args = vtable_alloc(lvtbl->args);
17282  lvtbl->vars = vtable_alloc(lvtbl->vars);
17283  if (lvtbl->used) {
17284  lvtbl->used = vtable_alloc(lvtbl->used);
17285  }
17286  return lvtbl->args;
17287 }
17288 
17289 static void
17290 dyna_pop_vtable(struct parser_params *parser, struct vtable **vtblp)
17291 {
17292  struct vtable *tmp = *vtblp;
17293  *vtblp = tmp->prev;
17294 # if WARN_PAST_SCOPE
17295  if (parser->past_scope_enabled) {
17296  tmp->prev = lvtbl->past;
17297  lvtbl->past = tmp;
17298  return;
17299  }
17300 # endif
17301  vtable_free(tmp);
17302 }
17303 
17304 static void
17305 dyna_pop_1(struct parser_params *parser)
17306 {
17307  struct vtable *tmp;
17308 
17309  if ((tmp = lvtbl->used) != 0) {
17310  warn_unused_var(parser, lvtbl);
17311  lvtbl->used = lvtbl->used->prev;
17312  vtable_free(tmp);
17313  }
17314  dyna_pop_vtable(parser, &lvtbl->args);
17315  dyna_pop_vtable(parser, &lvtbl->vars);
17316 }
17317 
17318 static void
17319 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
17320 {
17321  while (lvtbl->args != lvargs) {
17322  dyna_pop_1(parser);
17323  if (!lvtbl->args) {
17324  struct local_vars *local = lvtbl->prev;
17325  xfree(lvtbl);
17326  lvtbl = local;
17327  }
17328  }
17329  dyna_pop_1(parser);
17330 }
17331 
17332 static int
17334 {
17335  return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
17336 }
17337 
17338 static int
17339 dvar_defined_gen(struct parser_params *parser, ID id, int get)
17340 {
17341  struct vtable *vars, *args, *used;
17342  int i;
17343 
17344  args = lvtbl->args;
17345  vars = lvtbl->vars;
17346  used = lvtbl->used;
17347 
17348  while (POINTER_P(vars)) {
17349  if (vtable_included(args, id)) {
17350  return 1;
17351  }
17352  if ((i = vtable_included(vars, id)) != 0) {
17353  if (used) used->tbl[i-1] |= LVAR_USED;
17354  return 1;
17355  }
17356  args = args->prev;
17357  vars = vars->prev;
17358  if (get) used = 0;
17359  if (used) used = used->prev;
17360  }
17361 
17362  if (vars == DVARS_INHERIT) {
17363  return rb_dvar_defined(id, parser->base_block);
17364  }
17365 
17366  return 0;
17367 }
17368 
17369 static int
17370 dvar_curr_gen(struct parser_params *parser, ID id)
17371 {
17372  return (vtable_included(lvtbl->args, id) ||
17373  vtable_included(lvtbl->vars, id));
17374 }
17375 
17376 static void
17377 reg_fragment_enc_error(struct parser_params* parser, VALUE str, int c)
17378 {
17380  "regexp encoding option '%c' differs from source encoding '%s'",
17381  c, rb_enc_name(rb_enc_get(str)));
17382 }
17383 
17384 #ifndef RIPPER
17385 int
17387 {
17388  int c = RE_OPTION_ENCODING_IDX(options);
17389 
17390  if (c) {
17391  int opt, idx;
17392  rb_char_to_option_kcode(c, &opt, &idx);
17393  if (idx != ENCODING_GET(str) &&
17395  goto error;
17396  }
17397  ENCODING_SET(str, idx);
17398  }
17399  else if (RE_OPTION_ENCODING_NONE(options)) {
17400  if (!ENCODING_IS_ASCII8BIT(str) &&
17402  c = 'n';
17403  goto error;
17404  }
17406  }
17407  else if (current_enc == rb_usascii_encoding()) {
17409  /* raise in re.c */
17411  }
17412  else {
17414  }
17415  }
17416  return 0;
17417 
17418  error:
17419  return c;
17420 }
17421 
17422 static void
17424 {
17425  int c = rb_reg_fragment_setenc(parser, str, options);
17426  if (c) reg_fragment_enc_error(parser, str, c);
17427 }
17428 
17429 static int
17431 {
17432  VALUE err;
17433  reg_fragment_setenc(str, options);
17434  err = rb_reg_check_preprocess(str);
17435  if (err != Qnil) {
17436  err = rb_obj_as_string(err);
17438  return 0;
17439  }
17440  return 1;
17441 }
17442 
17443 typedef struct {
17448 
17449 static int
17451  int back_num, int *back_refs, OnigRegex regex, void *arg0)
17452 {
17454  struct parser_params* parser = arg->parser;
17455  rb_encoding *enc = arg->enc;
17456  long len = name_end - name;
17457  const char *s = (const char *)name;
17458  ID var;
17459  NODE *node, *succ;
17460 
17461  if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
17462  (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
17463  !rb_enc_symname2_p(s, len, enc)) {
17464  return ST_CONTINUE;
17465  }
17466  var = intern_cstr(s, len, enc);
17467  node = node_assign(assignable(var, 0), NEW_LIT(ID2SYM(var)));
17468  succ = arg->succ_block;
17469  if (!succ) succ = NEW_BEGIN(0);
17470  succ = block_append(succ, node);
17471  arg->succ_block = succ;
17472  return ST_CONTINUE;
17473 }
17474 
17475 static NODE *
17477 {
17479 
17480  arg.parser = parser;
17481  arg.enc = rb_enc_get(regexp);
17482  arg.succ_block = 0;
17484 
17485  if (!arg.succ_block) return 0;
17486  return arg.succ_block->nd_next;
17487 }
17488 
17489 static VALUE
17491 {
17492  reg_fragment_setenc(str, options);
17493  return rb_parser_reg_compile(parser, str, options);
17494 }
17495 
17496 VALUE
17498 {
17500 }
17501 
17502 static VALUE
17503 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
17504 {
17505  VALUE re;
17506  VALUE err;
17507 
17508  err = rb_errinfo();
17509  re = parser_reg_compile(parser, str, options);
17510  if (NIL_P(re)) {
17511  VALUE m = rb_attr_get(rb_errinfo(), idMesg);
17512  rb_set_errinfo(err);
17514  return Qnil;
17515  }
17516  return re;
17517 }
17518 #else
17519 static VALUE
17520 parser_reg_compile(struct parser_params* parser, VALUE str, int options, VALUE *errmsg)
17521 {
17522  VALUE err = rb_errinfo();
17523  VALUE re;
17524  int c = rb_reg_fragment_setenc(parser, str, options);
17525  if (c) reg_fragment_enc_error(parser, str, c);
17526  re = rb_parser_reg_compile(parser, str, options);
17527  if (NIL_P(re)) {
17528  *errmsg = rb_attr_get(rb_errinfo(), idMesg);
17529  rb_set_errinfo(err);
17530  }
17531  return re;
17532 }
17533 #endif
17534 
17535 #ifndef RIPPER
17536 NODE*
17538 {
17539  NODE *prelude = 0;
17540  NODE *scope = node;
17541  struct parser_params *parser;
17542 
17543  if (!node) return node;
17544 
17545  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17546 
17547  node = node->nd_body;
17548 
17549  if (nd_type(node) == NODE_PRELUDE) {
17550  prelude = node;
17551  node = node->nd_body;
17552  }
17553 
17554  node = block_append(node,
17555  NEW_FCALL(rb_intern("print"),
17556  NEW_ARRAY(NEW_GVAR(idLASTLINE))));
17557  if (prelude) {
17558  prelude->nd_body = node;
17559  scope->nd_body = prelude;
17560  }
17561  else {
17562  scope->nd_body = node;
17563  }
17564 
17565  return scope;
17566 }
17567 
17568 NODE *
17569 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
17570 {
17571  NODE *prelude = 0;
17572  NODE *scope = node;
17573  struct parser_params *parser;
17574 
17575  if (!node) return node;
17576 
17577  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17578 
17579  node = node->nd_body;
17580 
17581  if (nd_type(node) == NODE_PRELUDE) {
17582  prelude = node;
17583  node = node->nd_body;
17584  }
17585  if (split) {
17586  node = block_append(NEW_GASGN(rb_intern("$F"),
17587  NEW_CALL(NEW_GVAR(idLASTLINE),
17588  rb_intern("split"), 0)),
17589  node);
17590  }
17591  if (chop) {
17592  node = block_append(NEW_CALL(NEW_GVAR(idLASTLINE),
17593  rb_intern("chop!"), 0), node);
17594  }
17595 
17596  node = NEW_OPT_N(node);
17597 
17598  if (prelude) {
17599  prelude->nd_body = node;
17600  scope->nd_body = prelude;
17601  }
17602  else {
17603  scope->nd_body = node;
17604  }
17605 
17606  return scope;
17607 }
17608 
17609 void
17611 {
17612  /* just to suppress unused-function warnings */
17613  (void)nodetype;
17614  (void)nodeline;
17615 }
17616 #endif /* !RIPPER */
17617 
17618 static ID
17620 {
17621  ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
17622  id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
17623  return ID_STATIC_SYM | ID_INTERNAL | (id << ID_SCOPE_SHIFT);
17624 }
17625 
17626 static void
17628 {
17629  /* note: we rely on TypedData_Make_Struct to set most fields to 0 */
17630  command_start = TRUE;
17632 #ifdef RIPPER
17633  parser->delayed = Qnil;
17634  parser->result = Qnil;
17635  parser->parsing_thread = Qnil;
17636 #else
17637  parser->error_buffer = Qfalse;
17638 #endif
17639  parser->debug_buffer = Qnil;
17640  parser->enc = rb_utf8_encoding();
17641 }
17642 
17643 #ifdef RIPPER
17644 #define parser_mark ripper_parser_mark
17645 #define parser_free ripper_parser_free
17646 #endif
17647 
17648 static void
17649 parser_mark(void *ptr)
17650 {
17651  struct parser_params *parser = (struct parser_params*)ptr;
17652 
17658 #ifndef RIPPER
17662  rb_gc_mark(parser->compile_option);
17663  rb_gc_mark(parser->error_buffer);
17664 #else
17665  rb_gc_mark(parser->delayed);
17666  rb_gc_mark(parser->value);
17667  rb_gc_mark(parser->result);
17668  rb_gc_mark(parser->parsing_thread);
17669 #endif
17670  rb_gc_mark(parser->debug_buffer);
17671 #ifdef YYMALLOC
17672  rb_gc_mark((VALUE)parser->heap);
17673 #endif
17674 }
17675 
17676 static void
17677 parser_free(void *ptr)
17678 {
17679  struct parser_params *parser = (struct parser_params*)ptr;
17680  struct local_vars *local, *prev;
17681 
17682  if (tokenbuf) {
17683  xfree(tokenbuf);
17684  }
17685  for (local = lvtbl; local; local = prev) {
17686  if (local->vars) xfree(local->vars);
17687  prev = local->prev;
17688  xfree(local);
17689  }
17690  {
17691  token_info *ptinfo;
17692  while ((ptinfo = parser->token_info) != 0) {
17693  parser->token_info = ptinfo->next;
17694  xfree(ptinfo);
17695  }
17696  }
17697  xfree(ptr);
17698 }
17699 
17700 static size_t
17701 parser_memsize(const void *ptr)
17702 {
17703  struct parser_params *parser = (struct parser_params*)ptr;
17704  struct local_vars *local;
17705  size_t size = sizeof(*parser);
17706 
17707  size += toksiz;
17708  for (local = lvtbl; local; local = local->prev) {
17709  size += sizeof(*local);
17710  if (local->vars) size += local->vars->capa * sizeof(ID);
17711  }
17712  return size;
17713 }
17714 
17715 static const rb_data_type_t parser_data_type = {
17716 #ifndef RIPPER
17717  "parser",
17718 #else
17719  "ripper",
17720 #endif
17721  {
17722  parser_mark,
17723  parser_free,
17725  },
17727 };
17728 
17729 #ifndef RIPPER
17730 #undef rb_reserved_word
17731 
17732 const struct kwtable *
17733 rb_reserved_word(const char *str, unsigned int len)
17734 {
17735  return reserved_word(str, len);
17736 }
17737 
17738 VALUE
17740 {
17741  struct parser_params *p;
17742  VALUE parser = TypedData_Make_Struct(0, struct parser_params,
17743  &parser_data_type, p);
17744  parser_initialize(p);
17745  return parser;
17746 }
17747 
17748 VALUE
17749 rb_parser_set_context(VALUE vparser, const struct rb_block *base, int main)
17750 {
17751  struct parser_params *parser;
17752 
17753  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17754  parser->error_buffer = main ? Qfalse : Qnil;
17755  parser->base_block = base;
17756  in_main = main;
17757  return vparser;
17758 }
17759 #endif
17760 
17761 #ifdef RIPPER
17762 #define rb_parser_end_seen_p ripper_parser_end_seen_p
17763 #define rb_parser_encoding ripper_parser_encoding
17764 #define rb_parser_get_yydebug ripper_parser_get_yydebug
17765 #define rb_parser_set_yydebug ripper_parser_set_yydebug
17766 static VALUE ripper_parser_end_seen_p(VALUE vparser);
17767 static VALUE ripper_parser_encoding(VALUE vparser);
17768 static VALUE ripper_parser_get_yydebug(VALUE self);
17769 static VALUE ripper_parser_set_yydebug(VALUE self, VALUE flag);
17770 
17771 /*
17772  * call-seq:
17773  * ripper#error? -> Boolean
17774  *
17775  * Return true if parsed source has errors.
17776  */
17777 static VALUE
17778 ripper_error_p(VALUE vparser)
17779 {
17780  struct parser_params *parser;
17781 
17782  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17783  return parser->error_p ? Qtrue : Qfalse;
17784 }
17785 #endif
17786 
17787 /*
17788  * call-seq:
17789  * ripper#end_seen? -> Boolean
17790  *
17791  * Return true if parsed source ended by +\_\_END\_\_+.
17792  */
17793 VALUE
17795 {
17796  struct parser_params *parser;
17797 
17798  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17799  return ruby__end__seen ? Qtrue : Qfalse;
17800 }
17801 
17802 /*
17803  * call-seq:
17804  * ripper#encoding -> encoding
17805  *
17806  * Return encoding of the source.
17807  */
17808 VALUE
17810 {
17811  struct parser_params *parser;
17812 
17813  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17815 }
17816 
17817 /*
17818  * call-seq:
17819  * ripper.yydebug -> true or false
17820  *
17821  * Get yydebug.
17822  */
17823 VALUE
17825 {
17826  struct parser_params *parser;
17827 
17828  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17829  return yydebug ? Qtrue : Qfalse;
17830 }
17831 
17832 /*
17833  * call-seq:
17834  * ripper.yydebug = flag
17835  *
17836  * Set yydebug.
17837  */
17838 VALUE
17840 {
17841  struct parser_params *parser;
17842 
17843  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17844  yydebug = RTEST(flag);
17845  return flag;
17846 }
17847 
17848 #ifndef RIPPER
17849 #ifdef YYMALLOC
17850 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
17851 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
17852 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
17853  (n)->u3.cnt = (c), (p))
17854 
17855 void *
17856 rb_parser_malloc(struct parser_params *parser, size_t size)
17857 {
17858  size_t cnt = HEAPCNT(1, size);
17859  NODE *n = NEWHEAP();
17860  void *ptr = xmalloc(size);
17861 
17862  return ADD2HEAP(n, cnt, ptr);
17863 }
17864 
17865 void *
17866 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
17867 {
17868  size_t cnt = HEAPCNT(nelem, size);
17869  NODE *n = NEWHEAP();
17870  void *ptr = xcalloc(nelem, size);
17871 
17872  return ADD2HEAP(n, cnt, ptr);
17873 }
17874 
17875 void *
17876 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
17877 {
17878  NODE *n;
17879  size_t cnt = HEAPCNT(1, size);
17880 
17881  if (ptr && (n = parser->heap) != NULL) {
17882  do {
17883  if (n->u1.node == ptr) {
17884  n->u1.node = ptr = xrealloc(ptr, size);
17885  if (n->u3.cnt) n->u3.cnt = cnt;
17886  return ptr;
17887  }
17888  } while ((n = n->u2.node) != NULL);
17889  }
17890  n = NEWHEAP();
17891  ptr = xrealloc(ptr, size);
17892  return ADD2HEAP(n, cnt, ptr);
17893 }
17894 
17895 void
17896 rb_parser_free(struct parser_params *parser, void *ptr)
17897 {
17898  NODE **prev = &parser->heap, *n;
17899 
17900  while ((n = *prev) != NULL) {
17901  if (n->u1.node == ptr) {
17902  *prev = n->u2.node;
17904  break;
17905  }
17906  prev = &n->u2.node;
17907  }
17908  xfree(ptr);
17909 }
17910 #endif
17911 
17912 void
17913 rb_parser_printf(struct parser_params *parser, const char *fmt, ...)
17914 {
17915  va_list ap;
17916  VALUE mesg = parser->debug_buffer;
17917 
17918  if (NIL_P(mesg)) parser->debug_buffer = mesg = rb_str_new(0, 0);
17919  va_start(ap, fmt);
17920  rb_str_vcatf(mesg, fmt, ap);
17921  va_end(ap);
17922  if (RSTRING_END(mesg)[-1] == '\n') {
17923  rb_io_write(rb_stdout, mesg);
17924  parser->debug_buffer = Qnil;
17925  }
17926 }
17927 
17928 static void
17929 parser_compile_error(struct parser_params *parser, const char *fmt, ...)
17930 {
17931  va_list ap;
17932 
17933  parser->error_p = 1;
17934  va_start(ap, fmt);
17935  parser->error_buffer =
17940  current_enc, fmt, ap);
17941  va_end(ap);
17942 }
17943 #endif
17944 
17945 #ifdef RIPPER
17946 #ifdef RIPPER_DEBUG
17947 extern int rb_is_pointer_to_heap(VALUE);
17948 
17949 /* :nodoc: */
17950 static VALUE
17951 ripper_validate_object(VALUE self, VALUE x)
17952 {
17953  if (x == Qfalse) return x;
17954  if (x == Qtrue) return x;
17955  if (x == Qnil) return x;
17956  if (x == Qundef)
17957  rb_raise(rb_eArgError, "Qundef given");
17958  if (FIXNUM_P(x)) return x;
17959  if (SYMBOL_P(x)) return x;
17960  if (!rb_is_pointer_to_heap(x))
17961  rb_raise(rb_eArgError, "invalid pointer: %p", x);
17962  switch (BUILTIN_TYPE(x)) {
17963  case T_STRING:
17964  case T_OBJECT:
17965  case T_ARRAY:
17966  case T_BIGNUM:
17967  case T_FLOAT:
17968  case T_COMPLEX:
17969  case T_RATIONAL:
17970  return x;
17971  case T_NODE:
17972  if (nd_type(x) != NODE_RIPPER) {
17973  rb_raise(rb_eArgError, "NODE given: %p", x);
17974  }
17975  return ((NODE *)x)->nd_rval;
17976  default:
17977  rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
17978  x, rb_obj_classname(x));
17979  }
17980  return x;
17981 }
17982 #endif
17983 
17984 #define validate(x) ((x) = get_value(x))
17985 
17986 static VALUE
17987 ripper_dispatch0(struct parser_params *parser, ID mid)
17988 {
17989  return rb_funcall(parser->value, mid, 0);
17990 }
17991 
17992 static VALUE
17993 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
17994 {
17995  validate(a);
17996  return rb_funcall(parser->value, mid, 1, a);
17997 }
17998 
17999 static VALUE
18000 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
18001 {
18002  validate(a);
18003  validate(b);
18004  return rb_funcall(parser->value, mid, 2, a, b);
18005 }
18006 
18007 static VALUE
18008 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
18009 {
18010  validate(a);
18011  validate(b);
18012  validate(c);
18013  return rb_funcall(parser->value, mid, 3, a, b, c);
18014 }
18015 
18016 static VALUE
18017 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
18018 {
18019  validate(a);
18020  validate(b);
18021  validate(c);
18022  validate(d);
18023  return rb_funcall(parser->value, mid, 4, a, b, c, d);
18024 }
18025 
18026 static VALUE
18027 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
18028 {
18029  validate(a);
18030  validate(b);
18031  validate(c);
18032  validate(d);
18033  validate(e);
18034  return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
18035 }
18036 
18037 static VALUE
18038 ripper_dispatch7(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e, VALUE f, VALUE g)
18039 {
18040  validate(a);
18041  validate(b);
18042  validate(c);
18043  validate(d);
18044  validate(e);
18045  validate(f);
18046  validate(g);
18047  return rb_funcall(parser->value, mid, 7, a, b, c, d, e, f, g);
18048 }
18049 
18050 static const struct kw_assoc {
18051  ID id;
18052  const char *name;
18053 } keyword_to_name[] = {
18054  {keyword_class, "class"},
18055  {keyword_module, "module"},
18056  {keyword_def, "def"},
18057  {keyword_undef, "undef"},
18058  {keyword_begin, "begin"},
18059  {keyword_rescue, "rescue"},
18060  {keyword_ensure, "ensure"},
18061  {keyword_end, "end"},
18062  {keyword_if, "if"},
18063  {keyword_unless, "unless"},
18064  {keyword_then, "then"},
18065  {keyword_elsif, "elsif"},
18066  {keyword_else, "else"},
18067  {keyword_case, "case"},
18068  {keyword_when, "when"},
18069  {keyword_while, "while"},
18070  {keyword_until, "until"},
18071  {keyword_for, "for"},
18072  {keyword_break, "break"},
18073  {keyword_next, "next"},
18074  {keyword_redo, "redo"},
18075  {keyword_retry, "retry"},
18076  {keyword_in, "in"},
18077  {keyword_do, "do"},
18078  {keyword_do_cond, "do"},
18079  {keyword_do_block, "do"},
18080  {keyword_return, "return"},
18081  {keyword_yield, "yield"},
18082  {keyword_super, "super"},
18083  {keyword_self, "self"},
18084  {keyword_nil, "nil"},
18085  {keyword_true, "true"},
18086  {keyword_false, "false"},
18087  {keyword_and, "and"},
18088  {keyword_or, "or"},
18089  {keyword_not, "not"},
18090  {modifier_if, "if"},
18091  {modifier_unless, "unless"},
18092  {modifier_while, "while"},
18093  {modifier_until, "until"},
18094  {modifier_rescue, "rescue"},
18095  {keyword_alias, "alias"},
18096  {keyword_defined, "defined?"},
18097  {keyword_BEGIN, "BEGIN"},
18098  {keyword_END, "END"},
18099  {keyword__LINE__, "__LINE__"},
18100  {keyword__FILE__, "__FILE__"},
18101  {keyword__ENCODING__, "__ENCODING__"},
18102  {0, NULL}
18103 };
18104 
18105 static const char*
18106 keyword_id_to_str(ID id)
18107 {
18108  const struct kw_assoc *a;
18109 
18110  for (a = keyword_to_name; a->id; a++) {
18111  if (a->id == id)
18112  return a->name;
18113  }
18114  return NULL;
18115 }
18116 
18117 #undef ripper_id2sym
18118 static VALUE
18119 ripper_id2sym(ID id)
18120 {
18121  const char *name;
18122  char buf[8];
18123 
18124  if (id == (ID)(signed char)id) {
18125  buf[0] = (char)id;
18126  buf[1] = '\0';
18127  return ID2SYM(rb_intern2(buf, 1));
18128  }
18129  if ((name = keyword_id_to_str(id))) {
18130  return ID2SYM(rb_intern(name));
18131  }
18132  if (!rb_id2str(id)) {
18133  rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
18134  }
18135  return ID2SYM(id);
18136 }
18137 
18138 static ID
18139 ripper_get_id(VALUE v)
18140 {
18141  NODE *nd;
18142  if (!RB_TYPE_P(v, T_NODE)) return 0;
18143  nd = (NODE *)v;
18144  if (nd_type(nd) != NODE_RIPPER) return 0;
18145  return nd->nd_vid;
18146 }
18147 
18148 static VALUE
18149 ripper_get_value(VALUE v)
18150 {
18151  NODE *nd;
18152  if (v == Qundef) return Qnil;
18153  if (!RB_TYPE_P(v, T_NODE)) return v;
18154  nd = (NODE *)v;
18155  if (nd_type(nd) != NODE_RIPPER) return Qnil;
18156  return nd->nd_rval;
18157 }
18158 
18159 static void
18160 ripper_error_gen(struct parser_params *parser)
18161 {
18162  parser->error_p = TRUE;
18163 }
18164 
18165 static void
18166 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
18167 {
18168  VALUE str;
18169  va_list args;
18170 
18171  va_start(args, fmt);
18172  str = rb_vsprintf(fmt, args);
18173  va_end(args);
18174  rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
18175  ripper_error_gen(parser);
18176 }
18177 
18178 static VALUE
18179 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
18180 {
18181  VALUE line = rb_funcallv_public(src, id_gets, 0, 0);
18182  if (!NIL_P(line) && !RB_TYPE_P(line, T_STRING)) {
18184  "gets returned %"PRIsVALUE" (expected String or nil)",
18185  rb_obj_class(line));
18186  }
18187  return line;
18188 }
18189 
18190 static VALUE
18191 ripper_lex_io_get(struct parser_params *parser, VALUE src)
18192 {
18193  return rb_io_gets(src);
18194 }
18195 
18196 static VALUE
18197 ripper_s_allocate(VALUE klass)
18198 {
18199  struct parser_params *p;
18200  VALUE self = TypedData_Make_Struct(klass, struct parser_params,
18201  &parser_data_type, p);
18202  p->value = self;
18203  return self;
18204 }
18205 
18206 #define ripper_initialized_p(r) ((r)->lex.input != 0)
18207 
18208 /*
18209  * call-seq:
18210  * Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
18211  *
18212  * Create a new Ripper object.
18213  * _src_ must be a String, an IO, or an Object which has #gets method.
18214  *
18215  * This method does not starts parsing.
18216  * See also Ripper#parse and Ripper.parse.
18217  */
18218 static VALUE
18219 ripper_initialize(int argc, VALUE *argv, VALUE self)
18220 {
18221  struct parser_params *parser;
18222  VALUE src, fname, lineno;
18223 
18224  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18225  rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
18226  if (RB_TYPE_P(src, T_FILE)) {
18227  lex_gets = ripper_lex_io_get;
18228  }
18229  else if (rb_respond_to(src, id_gets)) {
18230  lex_gets = ripper_lex_get_generic;
18231  }
18232  else {
18233  StringValue(src);
18235  }
18236  lex_input = src;
18237  parser->eofp = 0;
18238  if (NIL_P(fname)) {
18239  fname = STR_NEW2("(ripper)");
18240  OBJ_FREEZE(fname);
18241  }
18242  else {
18243  StringValue(fname);
18244  fname = rb_str_new_frozen(fname);
18245  }
18246  parser_initialize(parser);
18247 
18248  ruby_sourcefile_string = fname;
18249  ruby_sourcefile = RSTRING_PTR(fname);
18250  ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
18251 
18252  return Qnil;
18253 }
18254 
18255 struct ripper_args {
18256  struct parser_params *parser;
18257  int argc;
18258  VALUE *argv;
18259 };
18260 
18261 static VALUE
18262 ripper_parse0(VALUE parser_v)
18263 {
18264  struct parser_params *parser;
18265 
18266  TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
18267  parser_prepare(parser);
18268  ripper_yyparse((void*)parser);
18269  return parser->result;
18270 }
18271 
18272 static VALUE
18273 ripper_ensure(VALUE parser_v)
18274 {
18275  struct parser_params *parser;
18276 
18277  TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
18278  parser->parsing_thread = Qnil;
18279  return Qnil;
18280 }
18281 
18282 /*
18283  * call-seq:
18284  * ripper#parse
18285  *
18286  * Start parsing and returns the value of the root action.
18287  */
18288 static VALUE
18289 ripper_parse(VALUE self)
18290 {
18291  struct parser_params *parser;
18292 
18293  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18294  if (!ripper_initialized_p(parser)) {
18295  rb_raise(rb_eArgError, "method called for uninitialized object");
18296  }
18297  if (!NIL_P(parser->parsing_thread)) {
18298  if (parser->parsing_thread == rb_thread_current())
18299  rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
18300  else
18301  rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
18302  }
18303  parser->parsing_thread = rb_thread_current();
18304  rb_ensure(ripper_parse0, self, ripper_ensure, self);
18305 
18306  return parser->result;
18307 }
18308 
18309 /*
18310  * call-seq:
18311  * ripper#column -> Integer
18312  *
18313  * Return column number of current parsing line.
18314  * This number starts from 0.
18315  */
18316 static VALUE
18317 ripper_column(VALUE self)
18318 {
18319  struct parser_params *parser;
18320  long col;
18321 
18322  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18323  if (!ripper_initialized_p(parser)) {
18324  rb_raise(rb_eArgError, "method called for uninitialized object");
18325  }
18326  if (NIL_P(parser->parsing_thread)) return Qnil;
18327  col = parser->tokp - lex_pbeg;
18328  return LONG2NUM(col);
18329 }
18330 
18331 /*
18332  * call-seq:
18333  * ripper#filename -> String
18334  *
18335  * Return current parsing filename.
18336  */
18337 static VALUE
18338 ripper_filename(VALUE self)
18339 {
18340  struct parser_params *parser;
18341 
18342  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18343  if (!ripper_initialized_p(parser)) {
18344  rb_raise(rb_eArgError, "method called for uninitialized object");
18345  }
18346  return ruby_sourcefile_string;
18347 }
18348 
18349 /*
18350  * call-seq:
18351  * ripper#lineno -> Integer
18352  *
18353  * Return line number of current parsing line.
18354  * This number starts from 1.
18355  */
18356 static VALUE
18357 ripper_lineno(VALUE self)
18358 {
18359  struct parser_params *parser;
18360 
18361  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18362  if (!ripper_initialized_p(parser)) {
18363  rb_raise(rb_eArgError, "method called for uninitialized object");
18364  }
18365  if (NIL_P(parser->parsing_thread)) return Qnil;
18366  return INT2NUM(ruby_sourceline);
18367 }
18368 
18369 #ifdef RIPPER_DEBUG
18370 /* :nodoc: */
18371 static VALUE
18372 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
18373 {
18374  StringValue(msg);
18375  if (obj == Qundef) {
18376  rb_raise(rb_eArgError, "%"PRIsVALUE, msg);
18377  }
18378  return Qnil;
18379 }
18380 
18381 /* :nodoc: */
18382 static VALUE
18383 ripper_value(VALUE self, VALUE obj)
18384 {
18385  return ULONG2NUM(obj);
18386 }
18387 #endif
18388 
18389 
18390 void
18391 Init_ripper(void)
18392 {
18395  id_warn = rb_intern_const("warn");
18396  id_warning = rb_intern_const("warning");
18397  id_gets = rb_intern_const("gets");
18398 
18399  InitVM(ripper);
18400 }
18401 
18402 void
18403 InitVM_ripper(void)
18404 {
18405  VALUE Ripper;
18406 
18407  Ripper = rb_define_class("Ripper", rb_cObject);
18408  /* version of Ripper */
18409  rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
18410  rb_define_alloc_func(Ripper, ripper_s_allocate);
18411  rb_define_method(Ripper, "initialize", ripper_initialize, -1);
18412  rb_define_method(Ripper, "parse", ripper_parse, 0);
18413  rb_define_method(Ripper, "column", ripper_column, 0);
18414  rb_define_method(Ripper, "filename", ripper_filename, 0);
18415  rb_define_method(Ripper, "lineno", ripper_lineno, 0);
18416  rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
18417  rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
18418  rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
18419  rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
18420  rb_define_method(Ripper, "error?", ripper_error_p, 0);
18421 #ifdef RIPPER_DEBUG
18422  rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
18423  rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
18424  rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
18425 #endif
18426 
18427  rb_define_singleton_method(Ripper, "dedent_string", parser_dedent_string, 2);
18428  rb_define_private_method(Ripper, "dedent_string", parser_dedent_string, 2);
18429 
18432 
18433 # if 0
18434  /* Hack to let RDoc document SCRIPT_LINES__ */
18435 
18436  /*
18437  * When a Hash is assigned to +SCRIPT_LINES__+ the contents of files loaded
18438  * after the assignment will be added as an Array of lines with the file
18439  * name as the key.
18440  */
18441  rb_define_global_const("SCRIPT_LINES__", Qnil);
18442 #endif
18443 
18444 }
18445 #endif /* RIPPER */
18446 
#define STRNCASECMP(s1, s2, n)
Definition: ruby.h:2138
#define in_defined
Definition: ripper.c:414
void rb_define_global_const(const char *, VALUE)
Definition: variable.c:2745
VALUE val
Definition: parse.h:168
static int token_info_has_nonspaces(struct parser_params *parser, const char *pend)
Definition: ripper.c:12028
#define local_var(id)
Definition: ripper.c:670
#define cond(node)
Definition: ripper.c:464
#define arg_var(id)
Definition: ripper.c:672
static int parser_get_bool(struct parser_params *parser, const char *name, const char *val)
Definition: ripper.c:13793
#define ret_args(node)
Definition: ripper.c:520
#define yyparse
Definition: ripper.c:458
#define T_OBJECT
Definition: ruby.h:491
Definition: node.h:93
Definition: node.h:29
stack_type cmdargs
Definition: ripper.c:205
#define ISDIGIT(c)
Definition: ruby.h:2129
#define NEW_RETURN(s)
Definition: node.h:380
static YYSIZE_T yytnamerr(char *yyres, const char *yystr)
Definition: ripper.c:5032
ONIG_EXTERN int onig_foreach_name(OnigRegex reg, int(*func)(const OnigUChar *, const OnigUChar *, int, int *, OnigRegex, void *), void *arg)
int state
Definition: lex.c:33
VALUE rb_ary_unshift(VALUE ary, VALUE item)
Definition: array.c:1178
static ID ripper_token2eventid(int tok)
Definition: eventids2.c:291
Definition: lex.c:33
#define IS_LABEL_SUFFIX(n)
Definition: ripper.c:14075
#define new_args_tail(k, kr, b)
Definition: ripper.c:515
#define YYSTACK_ALLOC
Definition: ripper.c:1185
int rb_enc_codelen(int c, rb_encoding *enc)
Definition: encoding.c:1077
static NODE * list_concat(NODE *, NODE *)
Definition: ripper.c:15638
#define NEW_OP_ASGN_AND(i, val)
Definition: node.h:400
#define lex_input
Definition: ripper.c:419
#define lex_state
Definition: ripper.c:405
#define subnodes(n1, n2)
static NODE * remove_begin(NODE *)
Definition: ripper.c:16516
#define MBCLEN_CHARFOUND_P(ret)
Definition: encoding.h:185
#define NEW_STRTERM(func, term, paren)
Definition: ripper.c:13087
unsigned int in_kwarg
Definition: ripper.c:355
static const yytype_int16 yydefgoto[]
Definition: ripper.c:2032
#define RRATIONAL_SET_NUM(rat, n)
Definition: internal.h:530
#define NEW_OP_ASGN1(p, id, a)
Definition: node.h:396
static int parser_precise_mbclen(struct parser_params *parser, const char *p)
Definition: ripper.c:12079
union YYSTYPE YYSTYPE
#define NEW_SCLASS(r, b)
Definition: node.h:439
#define yydebug
Definition: ripper.c:438
static NODE * arg_blk_pass(NODE *, NODE *)
Definition: ripper.c:16854
static ID internal_id_gen(struct parser_params *)
Definition: ripper.c:17619
#define RARRAY_LEN(a)
Definition: ruby.h:1026
void rb_bug(const char *fmt,...)
Definition: error.c:482
int num
Definition: parse.h:171
#define IS_END()
Definition: ripper.c:14069
struct token_info * next
Definition: ripper.c:294
int brace_nest
Definition: ripper.c:324
#define FALSE
Definition: nkf.h:174
#define RUBY_TYPED_FREE_IMMEDIATELY
Definition: ruby.h:1145
static NODE * logop_gen(struct parser_params *, enum node_type, NODE *, NODE *)
Definition: ripper.c:16771
#define heredoc_indent
Definition: ripper.c:426
static const struct kwtable * reserved_word(const char *, unsigned int)
NODE * rb_parser_compile_string_path(VALUE vparser, VALUE f, VALUE s, int line)
Definition: ripper.c:12349
long rb_str_coderange_scan_restartable(const char *, const char *, rb_encoding *, int *)
Definition: string.c:530
static VALUE parser_reg_compile(struct parser_params *parser, VALUE str, int options)
Definition: ripper.c:17490
#define NEW_LIST(a)
Definition: node.h:382
struct vtable * used
Definition: ripper.c:200
#define tHEREDOC_BEG
Definition: eventids2.c:7
static int comment_at_top(struct parser_params *parser)
Definition: ripper.c:13769
#define RE_OPTION_ENCODING_IDX(o)
Definition: ripper.c:697
#define assignable(id, node)
Definition: ripper.c:530
#define INT2NUM(x)
Definition: ruby.h:1538
VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline)
Definition: re.c:2850
static size_t parser_memsize(const void *ptr)
Definition: ripper.c:17701
#define STR_FUNC_ESCAPE
Definition: ripper.c:12409
#define scan_oct(s, l, e)
Definition: util.h:53
#define nd_plen
Definition: node.h:325
#define T_FIXNUM
Definition: ruby.h:503
Definition: st.h:79
VALUE stack_type
Definition: ripper.c:168
VALUE rb_make_exception(int argc, const VALUE *argv)
Definition: eval.c:763
#define reg_compile(str, options)
Definition: ripper.c:580
#define STR_TERM_END
Definition: ripper.c:12416
static NODE * call_uni_op_gen(struct parser_params *, NODE *, ID)
Definition: ripper.c:15801
Definition: node.h:47
#define NEW_XSTR(s)
Definition: node.h:416
#define toksiz
Definition: ripper.c:417
#define YY_(msgid)
Definition: ripper.c:1117
static void fixpos(NODE *, NODE *)
Definition: ripper.c:15541
#define backref_assign_error(n, a)
Definition: ripper.c:554
#define tRSHFT
Definition: id.c:20
#define NUM2INT(x)
Definition: ruby.h:684
#define YYSTACK_FREE
Definition: ripper.c:1186
ID rb_intern2(const char *, long)
Definition: symbol.c:604
VALUE rb_errinfo(void)
Definition: eval.c:1623
#define NEW_DOT2(b, e)
Definition: node.h:443
#define NUM2UINT(x)
Definition: ruby.h:685
static unsigned int hash(str, len) register const char *str
static void reduce_nodes_gen(struct parser_params *, NODE **)
Definition: ripper.c:16536
#define value_expr(node)
Definition: ripper.c:479
int heredoc_end
Definition: ripper.c:331
#define nd_paren(node)
Definition: ripper.c:711
void rb_define_singleton_method(VALUE obj, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a singleton method for obj.
Definition: class.c:1716
NODE * strterm
Definition: ripper.c:312
static NODE * call_bin_op_gen(struct parser_params *, NODE *, ID, NODE *)
Definition: ripper.c:15793
static int parser_string_term(struct parser_params *parser, int func)
Definition: ripper.c:13175
#define ripper_id2sym(id)
Definition: ripper.c:805
#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:12635
#define get_id(id)
Definition: ripper.c:591
#define rb_usascii_str_new2
Definition: intern.h:863
int heredoc_indent
Definition: ripper.c:332
#define YYLEX
Definition: ripper.c:4780
#define InitVM(ext)
Definition: ruby.h:2143
static NODE * new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
Definition: ripper.c:17087
VALUE rb_str_cat(VALUE, const char *, long)
Definition: string.c:2664
#define YYABORT
Definition: ripper.c:4700
#define st_foreach
Definition: regint.h:186
Definition: id.h:102
#define nd_line(n)
Definition: node.h:280
static void parser_heredoc_restore(struct parser_params *parser, NODE *here)
Definition: ripper.c:13323
#define lex_eol_p()
Definition: ripper.c:12448
Definition: id.h:82
#define reg_named_capture_assign(regexp)
Definition: ripper.c:586
#define Qtrue
Definition: ruby.h:437
VALUE rb_reg_check_preprocess(VALUE)
Definition: re.c:2603
static int yysyntax_error(YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken)
Definition: ripper.c:5080
#define dyna_in_block()
Definition: ripper.c:683
#define CMDARG_LEXPOP()
Definition: ripper.c:186
static NODE * gettable_gen(struct parser_params *, ID)
Definition: ripper.c:15855
#define str_copy(_s, _p, _n)
#define was_bol()
Definition: ripper.c:12540
#define tANDOP
Definition: id.c:31
NODE * rb_parser_compile_file_path(VALUE vparser, VALUE fname, VALUE file, int start)
Definition: ripper.c:12392
#define IS_SPCARG(c)
Definition: ripper.c:14071
#define void_stmts(node)
Definition: ripper.c:483
#define rb_id2str(id)
Definition: vm_backtrace.c:29
static YYSIZE_T yystrlen(char *yystr) const
Definition: ripper.c:4983
Definition: id.h:85
Definition: id.h:73
#define rb_warn1(fmt, a)
Definition: ripper.c:817
VALUE rb_parser_end_seen_p(VALUE vparser)
Definition: ripper.c:17794
Definition: st.h:99
#define TypedData_Get_Struct(obj, type, data_type, sval)
Definition: ruby.h:1190
Definition: id.h:90
#define intern_cstr(n, l, en)
Definition: ripper.c:392
static ID id_warn
Definition: error.c:51
const int id
Definition: nkf.c:209
#define current_enc
Definition: ripper.c:436
int line_count
Definition: ripper.c:336
#define YYNTOKENS
Definition: ripper.c:1282
struct token_info token_info
#define new_op_assign(lhs, op, rhs)
Definition: ripper.c:652
node_type
Definition: node.h:22
#define new_args(f, o, r, p, t)
Definition: ripper.c:513
#define strcasecmp
Definition: win32.h:191
Definition: parse.c:1007
static int parser_nextline(struct parser_params *parser)
Definition: ripper.c:12455
#define ID_CONST
Definition: id.h:37
VALUE rb_suppress_tracing(VALUE(*func)(VALUE), VALUE arg)
Definition: vm_trace.c:387
void rb_define_private_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
Definition: class.c:1527
#define nextc()
Definition: ripper.c:11901
#define rb_warning0(fmt)
Definition: ripper.c:821
VALUE rb_enc_from_encoding(rb_encoding *encoding)
Definition: encoding.c:117
unsigned int eofp
Definition: ripper.c:349
#define token_info_push(token)
Definition: ripper.c:878
#define NUM_SUFFIX_R
Definition: ripper.c:13446
int rb_enc_symname2_p(const char *, long, rb_encoding *)
Definition: symbol.c:311
VALUE rb_eTypeError
Definition: error.c:762
static int parser_here_document(struct parser_params *, NODE *)
Definition: ripper.c:13529
NODE * node
Definition: parse.h:169
#define T_RATIONAL
Definition: ruby.h:509
#define dsym_node(node)
Definition: ripper.c:525
static NODE * parser_compile_string(VALUE vparser, VALUE fname, VALUE s, int line)
Definition: ripper.c:12318
#define ULONG2NUM(x)
Definition: ruby.h:1574
#define logop(type, node1, node2)
Definition: ripper.c:470
VALUE rb_ary_push(VALUE ary, VALUE item)
Definition: array.c:905
#define rb_long2int(n)
Definition: ruby.h:319
#define RREGEXP_PTR(r)
Definition: ruby.h:1056
static void yydestruct(char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser) const
Definition: ripper.c:5219
#define NEW_CLASS(n, b, s)
Definition: node.h:438
SSL_METHOD *(* func)(void)
Definition: ossl_ssl.c:54
#define MAX_WORD_LENGTH
Definition: lex.c:43
static NODE * evstr2dstr_gen(struct parser_params *, NODE *)
Definition: ripper.c:15770
#define attrset(node, q, id)
Definition: ripper.c:535
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:17450
struct local_vars * lvtbl
Definition: ripper.c:335
static void warn_unused_var(struct parser_params *parser, struct local_vars *local)
Definition: ripper.c:17148
unsigned short int yytype_uint16
Definition: ripper.c:1084
#define parse_string(n)
Definition: ripper.c:11911
rb_encoding * rb_enc_compatible(VALUE str1, VALUE str2)
Definition: encoding.c:962
unsigned int command_start
Definition: ripper.c:348
#define NEW_OPT_N(b)
Definition: node.h:366
VALUE rb_ary_tmp_new(long capa)
Definition: array.c:532
union RNode::@149 u3
const struct kwtable * rb_reserved_word(const char *str, unsigned int len)
Definition: ripper.c:17733
int rb_local_defined(ID id, const struct rb_block *base_block)
Definition: compile.c:7049
#define is_identchar(p, e, enc)
Definition: ripper.c:12008
#define COND_PUSH(n)
Definition: ripper.c:178
VALUE debug_lines
Definition: ripper.c:372
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
Definition: vm_eval.c:821
NODE * rb_parser_compile_file(VALUE vparser, const char *f, VALUE file, int start)
Definition: ripper.c:12386
#define warn_balanced(op, syn)
Definition: ripper.c:14085
YYSTYPE * lval
Definition: ripper.c:309
ID id
Definition: parse.h:170
#define match_op(node1, node2)
Definition: ripper.c:574
#define CMDARG_P()
Definition: ripper.c:187
#define new_string1(str)
Definition: ripper.c:568
#define dvar_defined(id)
Definition: ripper.c:686
void rb_str_set_len(VALUE, long)
Definition: string.c:2545
static NODE * attrset_gen(struct parser_params *, NODE *, ID, ID)
Definition: ripper.c:16258
VALUE rb_io_gets_internal(VALUE io)
Definition: io.c:3267
#define yyerrok
Definition: ripper.c:4694
#define YYEMPTY
Definition: ripper.c:4696
#define tok()
Definition: ripper.c:12543
#define tNEQ
Definition: id.c:25
unsigned int token_seen
Definition: ripper.c:358
int rb_enc_str_coderange(VALUE)
Definition: string.c:620
token_info * token_info
Definition: ripper.c:341
static void ripper_init_eventids1_table(VALUE self)
Definition: eventids1.c:408
#define reg_fragment_setenc(str, options)
Definition: ripper.c:582
static NODE * match_op_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:15808
void rb_raise(VALUE exc, const char *fmt,...)
Definition: error.c:2207
ID id
Definition: node.h:240
#define NEW_NIL()
Definition: node.h:446
static int parse_gvar(struct parser_params *parser, const enum lex_state_e last_state)
Definition: ripper.c:14568
#define RSTRING_GETMEM(str, ptrvar, lenvar)
Definition: ruby.h:991
static NODE * node_assign_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:16329
VALUE rb_enc_associate(VALUE obj, rb_encoding *enc)
Definition: encoding.c:854
static NODE * block_append_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:15564
#define YY_SYMBOL_PRINT(Title, Type, Value, Location)
Definition: ripper.c:4797
static NODE * newline_node(NODE *)
Definition: ripper.c:15531
ID * tbl
Definition: ripper.c:191
#define dispatch_scan_event(t)
Definition: ripper.c:11946
void rb_compile_warn(const char *file, int line, const char *fmt,...)
Definition: error.c:181
#define newtok()
Definition: ripper.c:11903
static NODE * range_op(struct parser_params *parser, NODE *node)
Definition: ripper.c:16659
#define reduce_nodes(n)
Definition: ripper.c:485
#define YYPOPSTACK(N)
#define NEW_OP_ASGN2(r, t, i, o, val)
Definition: node.h:397
static NODE * cond0(struct parser_params *, NODE *, int)
Definition: ripper.c:16696
#define dyna_var(id)
Definition: ripper.c:684
int pre_args_num
Definition: node.h:490
#define RB_GC_GUARD(v)
Definition: ruby.h:552
static void arg_ambiguous_gen(struct parser_params *parser, char c)
Definition: ripper.c:13666
void rb_define_alloc_func(VALUE, rb_alloc_func_t)
#define NODE_HEREDOC
Definition: ripper.c:703
#define T_HASH
Definition: ruby.h:499
#define peekc_n(n)
Definition: ripper.c:12452
#define POINTER_P(val)
Definition: ripper.c:211
static NODE * remove_begin_all(NODE *)
Definition: ripper.c:16526
#define SET_LEX_STATE(ls)
Definition: ripper.c:163
int main(void)
Definition: closure_fn0.c:49
#define STR_FUNC_INDENT
Definition: ripper.c:12414
#define in_main
Definition: ripper.c:413
#define ID_LOCAL
Definition: id.h:33
#define nd_args
Definition: node.h:329
unsigned short token
Definition: id.c:36
static void parser_pushback(struct parser_params *parser, int c)
Definition: ripper.c:12531
#define const_decl(path)
Definition: ripper.c:551
#define nd_set_type(n, t)
Definition: node.h:275
#define Qnone
Definition: ripper.c:809
static int lvar_defined_gen(struct parser_params *, ID)
Definition: ripper.c:13710
const char * alias
Definition: nkf.c:1151
void rb_gc_mark(VALUE ptr)
Definition: gc.c:4394
#define ruby__end__seen
Definition: ripper.c:432
#define tOROP
Definition: id.c:32
#define T_ARRAY
Definition: ruby.h:498
#define NEW_DOT3(b, e)
Definition: node.h:444
#define ruby_debug_lines
Definition: ripper.c:445
int heredoc_line_indent
Definition: ripper.c:333
#define st_lookup
Definition: regint.h:185
#define parser_is_identchar()
Definition: ripper.c:12009
#define rb_enc_islower(c, enc)
Definition: encoding.h:226
VALUE rb_io_write(VALUE, VALUE)
Definition: io.c:1508
#define local_pop()
Definition: ripper.c:668
#define new_brace_body(param, stmt)
Definition: ripper.c:570
Definition: id.h:74
static int parser_whole_match_p(struct parser_params *parser, const char *eos, long len, int indent)
Definition: ripper.c:13428
#define RE_OPTION_ENCODING(e)
Definition: ripper.c:696
#define RCOMPLEX(obj)
Definition: internal.h:546
NODE * pre_init
Definition: node.h:487
static void show_bitstack(stack_type, const char *, int)
Definition: ripper.c:16086
#define NEW_IVAR(v)
Definition: node.h:405
int tokidx
Definition: ripper.c:328
#define RCOMPLEX_SET_IMAG(cmp, i)
Definition: ruby.h:1076
unsigned int last
Definition: nkf.c:4311
static void parser_initialize(struct parser_params *parser)
Definition: ripper.c:17627
ID block_arg
Definition: node.h:496
static NODE * node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE)
Definition: ripper.c:15511
void rb_gc_force_recycle(VALUE obj)
Definition: gc.c:6102
#define MEMO_NEW(a, b, c)
Definition: internal.h:836
static const yytype_uint16 yyr1[]
Definition: ripper.c:1776
struct RNode * node
Definition: node.h:239
VALUE rb_eSyntaxError
Definition: error.c:777
#define NEW_IASGN(v, val)
Definition: node.h:391
#define FIXNUM_P(f)
Definition: ruby.h:365
#define lex_gets_ptr
Definition: ripper.c:429
rb_encoding * rb_utf8_encoding(void)
Definition: encoding.c:1320
#define here_document(n)
Definition: ripper.c:11913
static long parser_encode_length(struct parser_params *parser, const char *name, long len)
Definition: ripper.c:13717
#define nd_type(n)
Definition: node.h:274
#define tEQ
Definition: id.c:23
#define call_bin_op(recv, id, arg1)
Definition: ripper.c:508
Definition: parse.c:999
#define arg_concat(h, t)
Definition: ripper.c:497
static enum node_type nodetype(NODE *node)
Definition: ripper.c:15519
VALUE error_buffer
Definition: ripper.c:371
VALUE rb_str_buf_append(VALUE, VALUE)
Definition: string.c:2802
static VALUE lex_getline(struct parser_params *parser)
Definition: ripper.c:12297
static NODE * ret_args_gen(struct parser_params *, NODE *)
Definition: ripper.c:16794
static const yytype_int16 yytable[]
Definition: ripper.c:2205
VALUE rb_syntax_error_append(VALUE exc, VALUE file, int line, int column, rb_encoding *enc, const char *fmt, va_list args)
Definition: error.c:104
int pos
Definition: ripper.c:192
#define tASET
Definition: id.c:29
#define PRIsWARN
Definition: ripper.c:855
Definition: parse.c:962
#define YYLAST
Definition: ripper.c:1279
#define new_regexp(node, opt)
Definition: ripper.c:564
#define new_xstring(node)
Definition: ripper.c:567
#define YYID(n)
Definition: ripper.c:1130
int paren_nest
Definition: ripper.c:322
static NODE * yycompile(struct parser_params *parser, VALUE fname, int line)
Definition: ripper.c:12257
#define st_init_numtable_with_size
Definition: regint.h:179
VALUE rb_parser_set_yydebug(VALUE self, VALUE flag)
Definition: ripper.c:17839
#define ENC_CODERANGE_7BIT
Definition: encoding.h:100
const char * rb_obj_classname(VALUE)
Definition: variable.c:458
#define NEW_SCOPE(a, b)
Definition: node.h:360
#define ruby_sourcefile
Definition: ripper.c:434
const char term
Definition: id.c:37
RUBY_EXTERN void * memmove(void *, const void *, size_t)
Definition: memmove.c:7
#define gettable(id)
Definition: ripper.c:528
RUBY_FUNC_EXPORTED VALUE rb_parser_reg_compile(struct parser_params *parser, VALUE str, int options)
Definition: ripper.c:17497
Definition: node.h:27
#define IS_lex_state_all(ls)
Definition: ripper.c:161
RUBY_EXTERN unsigned long ruby_scan_digits(const char *str, ssize_t len, int base, size_t *retlen, int *overflow)
Definition: util.c:84
#define list_append(l, i)
Definition: ripper.c:492
static int simple_re_meta(int c)
Definition: ripper.c:12911
stack_type cond_stack
Definition: ripper.c:326
VALUE rb_str_buf_cat(VALUE, const char *, long)
RUBY_SYMBOL_EXPORT_BEGIN typedef unsigned long st_data_t
Definition: st.h:22
unsigned int error_p
Definition: ripper.c:363
#define STR_NEW0()
Definition: ripper.c:396
Definition: node.h:235
static int e_option_supplied(struct parser_params *parser)
Definition: ripper.c:12188
static void block_dup_check_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:16250
Definition: parse.h:163
#define NUM_SUFFIX_I
Definition: ripper.c:13447
#define NEWHEAP()
Definition: ripper.c:17851
#define SPECIAL_PUNCT(idx)
Definition: ripper.c:13122
long gets_ptr
Definition: ripper.c:320
static int vtable_size(const struct vtable *tbl)
Definition: ripper.c:214
#define STR_FUNC_LABEL
Definition: ripper.c:12415
static int assign_in_cond(struct parser_params *parser, NODE *node)
Definition: ripper.c:16621
#define ISALPHA(c)
Definition: ruby.h:2128
void rb_exc_raise(VALUE mesg)
Definition: eval.c:620
#define STR_FUNC_REGEXP
Definition: ripper.c:12411
char * tokenbuf
Definition: ripper.c:334
#define NEW_VCALL(m)
Definition: node.h:422
static void vtable_pop(struct vtable *tbl, int n)
Definition: ripper.c:267
static NODE * list_append_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:15618
static const char lex_state_names[][13]
Definition: ripper.c:16044
unsigned int ruby__end__seen
Definition: ripper.c:350
VALUE ruby_sourcefile_string
Definition: ripper.c:339
struct parser_params::@99 lex
#define strtod(s, e)
Definition: util.h:77
#define ID_STATIC_SYM
Definition: id.h:30
static rb_encoding * must_be_ascii_compatible(VALUE s)
Definition: ripper.c:12267
struct vtable * prev
Definition: ripper.c:194
#define NEW_VALIAS(n, o)
Definition: node.h:436
static int parser_number_literal_suffix(struct parser_params *parser, int mask)
Definition: ripper.c:13451
#define RB_TYPE_P(obj, type)
Definition: ruby.h:527
const char * pcur
Definition: ripper.c:318
#define END(name)
Definition: asm.h:115
static int parser_tokadd_string(struct parser_params *, int, int, int, long *, rb_encoding **)
Definition: ripper.c:12950
#define NEW_LVAR(v)
Definition: node.h:403
static void next_state(struct MT *mt)
Definition: random.c:164
#define VTBL_DEBUG
Definition: ripper.c:224
static NODE * reg_named_capture_assign_gen(struct parser_params *parser, VALUE regexp)
Definition: ripper.c:17476
#define arg_append(h, t)
Definition: ripper.c:495
Definition: id.h:98
#define assignable_result(x)
#define CMDARG_PUSH(n)
Definition: ripper.c:184
#define NEW_ATTRASGN(r, m, a)
Definition: node.h:454
static VALUE coverage(VALUE fname, int n)
Definition: ripper.c:12176
#define RE_OPTION_MASK
Definition: ripper.c:699
void rb_parser_printf(struct parser_params *parser, const char *fmt,...)
Definition: ripper.c:17913
#define ID_SCOPE_MASK
Definition: id.h:32
static NODE * arg_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:16278
rb_encoding * enc
Definition: ripper.c:340
#define parser_warning(node, mesg)
Definition: ripper.c:15554
static int parser_regx_options(struct parser_params *)
Definition: ripper.c:12855
static void yy_symbol_value_print(FILE *yyoutput, int yytype, YYSTYPE const *const yyvaluep, struct parser_params *parser)
Definition: ripper.c:4820
#define whole_match_p(e, l, i)
Definition: ripper.c:11916
#define NEW_POSTEXE(b)
Definition: node.h:452
#define heredoc_line_indent
Definition: ripper.c:427
int capa
Definition: ripper.c:193
#define lex_nextline
Definition: ripper.c:421
#define YYTERROR
Definition: ripper.c:4738
static NODE * new_if_gen(struct parser_params *, NODE *, NODE *, NODE *)
Definition: ripper.c:16763
#define set_yylval_literal(x)
Definition: ripper.c:11926
static int parser_yylex(struct parser_params *parser)
Definition: ripper.c:14824
static VALUE parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
Definition: ripper.c:12431
unsigned int input
Definition: nkf.c:4312
#define scan_hex(s, l, e)
Definition: util.h:55
unsigned int in_main
Definition: ripper.c:354
static int dyna_in_block_gen(struct parser_params *)
Definition: ripper.c:17333
#define rb_intern_str(string)
Definition: generator.h:16
#define NEW_IF(c, t, e)
Definition: node.h:362
static const yytype_uint16 yystos[]
Definition: ripper.c:4581
#define rb_rational_raw1(x)
Definition: intern.h:163
static char * parser_tokspace(struct parser_params *parser, int n)
Definition: ripper.c:12564
#define ALLOC_N(type, n)
Definition: ruby.h:1587
VALUE rb_hash_aset(VALUE hash, VALUE key, VALUE val)
Definition: hash.c:1576
#define TAB_WIDTH
Definition: ripper.c:99
#define evstr2dstr(n)
Definition: ripper.c:504
static void parser_free(void *ptr)
Definition: ripper.c:17677
#define IS_ARG()
Definition: ripper.c:14068
static int parse_numvar(struct parser_params *parser)
Definition: ripper.c:14547
#define PARSER_ARG
Definition: ripper.c:864
static void token_info_pop_gen(struct parser_params *, const char *token, size_t len)
Definition: ripper.c:12057
#define heredoc_dedent(str)
Definition: ripper.c:589
#define literal_concat(h, t)
Definition: ripper.c:499
#define val
Definition: parse.c:972
#define NEW_ARRAY(a)
Definition: node.h:383
RUBY_EXTERN VALUE rb_cObject
Definition: ruby.h:1872
VALUE rb_eRuntimeError
Definition: error.c:761
#define compile_error
Definition: ripper.c:863
#define ID_INSTANCE
Definition: id.h:34
#define yylval
Definition: ripper.c:11892
static int parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
Definition: ripper.c:12782
static int dvar_curr_gen(struct parser_params *, ID)
Definition: ripper.c:17370
VALUE rb_parser_encoding(VALUE vparser)
Definition: ripper.c:17809
#define tCOLON2
Definition: id.c:30
#define ifndef_ripper(x)
Definition: ripper.c:810
static const yytype_uint16 yyrline[]
Definition: ripper.c:1609
void rb_str_free(VALUE)
Definition: string.c:1281
struct parser_params * parser
Definition: ripper.c:17444
#define RSTRING_END(str)
Definition: ruby.h:986
#define yytable_value_is_error(yytable_value)
Definition: ripper.c:3392
enum lex_state_e state
Definition: ripper.c:321
#define NEW_HASH(a)
Definition: node.h:385
VALUE rb_get_coverages(void)
Definition: thread.c:5004
#define NEW_ZARRAY()
Definition: node.h:384
NODE * rb_compile_string(const char *f, VALUE s, int line)
Definition: ripper.c:12336
static const yytype_uint16 yyprhs[]
Definition: ripper.c:1341
#define NEW_FALSE()
Definition: node.h:448
const struct rb_block * base_block
Definition: ripper.c:374
#define new_if(cc, left, right)
Definition: ripper.c:467
VALUE rb_obj_as_string(VALUE)
Definition: string.c:1364
VALUE rb_ary_new(void)
Definition: array.c:493
#define tMATCH
Definition: id.c:26
long(* rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len)
Definition: ripper.c:13780
int rb_ascii8bit_encindex(void)
Definition: encoding.c:1314
#define NEW_ARGSPUSH(a, b)
Definition: node.h:430
#define set_yylval_name(x)
Definition: ripper.c:11925
static NODE * new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID atype, ID attr, ID op, NODE *rhs)
Definition: ripper.c:17070
#define NEW_REDO()
Definition: node.h:374
#define NEW_NTH_REF(n)
Definition: node.h:408
#define tokline
Definition: ripper.c:418
static char * parser_newtok(struct parser_params *parser)
Definition: ripper.c:12548
RUBY_EXTERN VALUE rb_mKernel
Definition: ruby.h:1860
#define rb_warning1(fmt, a)
Definition: ripper.c:822
#define snprintf
Definition: subst.h:6
VALUE rb_thread_current(void)
Definition: thread.c:2504
static int vtable_included(const struct vtable *tbl, ID id)
Definition: ripper.c:275
#define block_dup_check(n1, n2)
Definition: ripper.c:487
#define RRATIONAL(obj)
Definition: internal.h:529
#define tokadd(c)
Definition: ripper.c:11905
static NODE * arg_append_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:16303
NODE * eval_tree
Definition: ripper.c:370
Definition: id.h:83
static void local_push_gen(struct parser_params *, int)
Definition: ripper.c:17168
#define NIL_P(v)
Definition: ruby.h:451
#define ISASCII(c)
Definition: ruby.h:2121
#define tokenbuf
Definition: ripper.c:415
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
Definition: class.c:646
static char msg[50]
Definition: strerror.c:8
#define COND_POP()
Definition: ripper.c:179
#define NEW_GVAR(v)
Definition: node.h:402
#define heredoc_identifier()
Definition: ripper.c:11914
NODE * opt_args
Definition: node.h:501
static void parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
Definition: ripper.c:13812
#define NEW_YIELD(a)
Definition: node.h:381
#define YYSYNTAX_ERROR
#define TOK_INTERN()
Definition: ripper.c:399
#define new_const_op_assign(lhs, op, rhs)
Definition: ripper.c:546
void rb_define_const(VALUE, const char *, VALUE)
Definition: variable.c:2734
VALUE value
Definition: node.h:241
int lpar_beg
Definition: ripper.c:323
static void parser_tokadd(struct parser_params *parser, int c)
Definition: ripper.c:12576
#define ID_SCOPE_SHIFT
Definition: id.h:31
#define k__END__
Definition: eventids2.c:9
static void parser_mark(void *ptr)
Definition: ripper.c:17649
static void yy_reduce_print(YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
Definition: ripper.c:4912
#define ISALNUM(c)
Definition: ruby.h:2127
#define YYDPRINTF(Args)
Definition: ripper.c:4791
#define NEW_CASE(h, b)
Definition: node.h:364
rb_atomic_t cnt[RUBY_NSIG]
Definition: signal.c:525
#define new_unless(cc, left, right)
Definition: ripper.c:468
Definition: parse.c:968
#define lex_goto_eol(parser)
Definition: ripper.c:12447
Definition: parse.c:966
#define FLONUM_P(x)
Definition: ruby.h:399
int tokline
Definition: ripper.c:330
#define local_id(id)
Definition: ripper.c:674
unsigned int has_shebang
Definition: ripper.c:352
static void local_var_gen(struct parser_params *, ID)
Definition: ripper.c:17242
#define T_FLOAT
Definition: ruby.h:495
NODE * rb_parser_append_print(VALUE vparser, NODE *node)
Definition: ripper.c:17537
#define TYPE(x)
Definition: ruby.h:521
static void ripper_init_eventids1(void)
Definition: eventids1.c:270
int argc
Definition: ruby.c:183
Definition: node.h:59
yytype_int16 yyss_alloc
Definition: ripper.c:1223
static void vtable_add(struct vtable *tbl, ID id)
Definition: ripper.c:251
unsigned char OnigUChar
Definition: onigmo.h:79
#define top_const_field(n)
Definition: ripper.c:549
Definition: id.h:100
#define YYFINAL
Definition: ripper.c:1277
#define Qfalse
Definition: ruby.h:436
#define dvar_curr(id)
Definition: ripper.c:689
#define NEW_EVSTR(n)
Definition: node.h:419
VALUE rb_rational_new(VALUE, VALUE)
Definition: rational.c:1898
VALUE nextline
Definition: ripper.c:316
#define ALLOCA_N(type, n)
Definition: ruby.h:1593
#define flush_string_content(enc)
Definition: ripper.c:13114
#define NEW_OP_CDECL(v, op, val)
Definition: node.h:401
VALUE rb_parser_set_context(VALUE vparser, const struct rb_block *base, int main)
Definition: ripper.c:17749
#define WARN_I(i)
Definition: ripper.c:854
#define T_BIGNUM
Definition: ruby.h:501
#define ENC_CODERANGE_UNKNOWN
Definition: encoding.h:99
#define tokadd_string(f, t, p, n, e)
Definition: ripper.c:11910
static NODE * new_yield_gen(struct parser_params *, NODE *)
Definition: ripper.c:16811
#define ripper_flush(p)
Definition: ripper.c:11945
static VALUE lex_get_str(struct parser_params *parser, VALUE s)
Definition: ripper.c:12277
#define ISUPPER(c)
Definition: ruby.h:2125
#define RUBY_FUNC_EXPORTED
Definition: defines.h:263
#define MEMCPY(p1, p2, type, n)
Definition: ruby.h:1661
#define T_NODE
Definition: ruby.h:513
VALUE rb_enc_associate_index(VALUE obj, int idx)
Definition: encoding.c:826
static int parser_nextc(struct parser_params *parser)
Definition: ripper.c:12515
#define new_hash(hash)
Definition: ripper.c:559
#define RNODE(obj)
Definition: node.h:262
static void dyna_pop_vtable(struct parser_params *parser, struct vtable **vtblp)
Definition: ripper.c:17290
int err
Definition: win32.c:135
#define dyna_pop(node)
Definition: ripper.c:681
unsigned int in_def
Definition: ripper.c:357
#define OBJ_FREEZE(x)
Definition: ruby.h:1308
#define YYACCEPT
Definition: ripper.c:4699
static ID formal_argument_gen(struct parser_params *, ID)
Definition: ripper.c:13677
static void void_expr_gen(struct parser_params *, NODE *)
Definition: ripper.c:16417
#define T_COMPLEX
Definition: ruby.h:510
#define tANDDOT
Definition: id.c:33
#define YYEOF
Definition: ripper.c:4697
#define nd_else
Definition: node.h:292
static NODE * dsym_node_gen(struct parser_params *, NODE *)
Definition: ripper.c:16954
#define set_integer_literal(v, f)
Definition: ripper.c:11919
#define NUM_SUFFIX_ALL
Definition: ripper.c:13448
VALUE rb_class_new_instance(int, const VALUE *, VALUE)
Definition: object.c:1891
long cnt
Definition: node.h:257
#define YY_REDUCE_PRINT(Rule)
Definition: ripper.c:4934
NODE * rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
Definition: ripper.c:17569
VALUE lastline
Definition: ripper.c:315
Definition: util.c:833
NODE * rb_compile_cstr(const char *f, const char *s, int len, int line)
Definition: ripper.c:12356
static void magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
Definition: ripper.c:13784
RUBY_EXTERN VALUE rb_int_positive_pow(long x, unsigned long y)
Definition: numeric.c:3949
int column
Definition: ripper.c:292
static char * yystpcpy(char *yydest, const char *yysrc)
Definition: ripper.c:5007
#define numberof(array)
Definition: etc.c:616
#define IS_lex_state(ls)
Definition: ripper.c:160
VALUE rb_make_backtrace(void)
Definition: vm_backtrace.c:811
#define ALLOC(type)
Definition: ruby.h:1588
#define NEW_FOR(v, i, b)
Definition: node.h:369
#define EOF
Definition: vsnprintf.c:201
Definition: id.h:76
union RNode::@147 u1
void * rb_parser_malloc(struct parser_params *parser, size_t size)
Definition: ripper.c:17856
#define NEW_WHEN(c, t, e)
Definition: node.h:365
#define peek_n(c, n)
Definition: ripper.c:12450
VALUE rb_str_resize(VALUE, long)
Definition: string.c:2562
#define DEF_EXPR(n)
Definition: ripper.c:139
#define tHEREDOC_END
Definition: eventids2.c:8
#define STR_NEW(p, n)
Definition: ripper.c:395
#define NEW_DASGN(v, val)
Definition: node.h:389
YYSTYPE yyvs_alloc
Definition: ripper.c:1224
const char * pbeg
Definition: ripper.c:317
void(* rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val)
Definition: ripper.c:13781
static int parser_peek_variable_name(struct parser_params *parser)
Definition: ripper.c:13139
#define tokcopy(n)
Definition: ripper.c:12599
#define STR_FUNC_SYMBOL
Definition: ripper.c:12413
static VALUE yycompile0(VALUE arg)
Definition: ripper.c:12194
#define mixed_escape(beg, enc1, enc2)
#define set_yylval_num(x)
Definition: ripper.c:11923
#define NEW_ERRINFO()
Definition: node.h:449
#define NEW_BLOCK_PASS(b)
Definition: node.h:434
#define STR_FUNC_QWORDS
Definition: ripper.c:12412
VALUE rb_str_subseq(VALUE, long, long)
Definition: string.c:2324
#define dyna_push()
Definition: ripper.c:679
#define command_start
Definition: ripper.c:428
#define ZALLOC(type)
Definition: ruby.h:1590
string_type
Definition: ripper.c:12418
static void dispose_string(VALUE str)
Definition: ripper.c:12891
#define RSTRING_LEN(str)
Definition: ruby.h:978
static NODE * aryset_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:16244
lex_state_bits
Definition: ripper.c:121
VALUE rb_funcallv_public(VALUE, ID, int, const VALUE *)
Calls a method.
Definition: vm_eval.c:867
static ID shadowing_lvar_gen(struct parser_params *, ID)
Definition: ripper.c:16223
unsigned int cr_seen
Definition: ripper.c:364
#define set_number_literal(v, t, f)
Definition: ripper.c:11918
#define new_do_body(param, stmt)
Definition: ripper.c:571
ID rest_arg
Definition: node.h:495
#define REALLOC_N(var, type, n)
Definition: ruby.h:1591
#define local_push(top)
Definition: ripper.c:666
int errno
#define TRUE
Definition: nkf.h:175
#define nd_next
Definition: node.h:288
#define new_attr_op_assign(lhs, type, attr, op, rhs)
Definition: ripper.c:544
#define NEW_CONST(v)
Definition: node.h:406
static int shadowing_lvar_0(struct parser_params *parser, ID name)
Definition: ripper.c:16198
#define NEW_LIT(l)
Definition: node.h:413
VALUE rb_io_gets(VALUE)
Definition: io.c:3261
int rb_dvar_defined(ID id, const struct rb_block *base_block)
Definition: compile.c:7024
#define paren_nest
Definition: ripper.c:408
#define has_delayed_token()
Definition: ripper.c:11948
static int yylex(YYSTYPE *, struct parser_params *)
Definition: ripper.c:15494
#define token_info_pop(token)
Definition: ripper.c:879
static void dyna_pop_gen(struct parser_params *, const struct vtable *)
Definition: ripper.c:17319
static NODE * new_evstr_gen(struct parser_params *, NODE *)
Definition: ripper.c:15779
VALUE rb_sprintf(const char *format,...)
Definition: sprintf.c:1440
#define IS_lex_state_for(x, ls)
Definition: ripper.c:158
#define tokadd_mbchar(c)
Definition: ripper.c:12908
static void reg_fragment_setenc_gen(struct parser_params *, VALUE, int)
Definition: ripper.c:17423
#define NEW_OP_ASGN_OR(i, val)
Definition: node.h:399
#define rb_enc_isspace(c, enc)
Definition: encoding.h:231
#define rb_node_newnode(type, a1, a2, a3)
Definition: ripper.c:461
#define YYMAXDEPTH
Definition: ripper.c:4966
int rb_enc_precise_mbclen(const char *p, const char *e, rb_encoding *enc)
Definition: encoding.c:1020
#define NEW_NEXT(s)
Definition: node.h:373
static int parser_cr(struct parser_params *parser, int c)
Definition: ripper.c:12500
static void set_file_encoding(struct parser_params *parser, const char *str, const char *send)
Definition: ripper.c:14000
void rb_fatal(const char *fmt,...)
Definition: error.c:2261
#define rb_enc_name(enc)
Definition: encoding.h:171
#define var_field(n)
Definition: ripper.c:553
#define RE_OPTION_ONCE
Definition: ripper.c:694
#define tokidx
Definition: ripper.c:416
#define MEMMOVE(p1, p2, type, n)
Definition: ruby.h:1662
#define malloc
Definition: ripper.c:116
static const struct magic_comment magic_comments[]
Definition: ripper.c:13852
VALUE rb_str_vcatf(VALUE, const char *, va_list)
Definition: sprintf.c:1453
static int parser_parse_string(struct parser_params *, NODE *)
Definition: ripper.c:13184
#define nd_term(node)
Definition: ripper.c:709
#define arg_ambiguous(c)
Definition: ripper.c:13674
#define STR_FUNC_EXPAND
Definition: ripper.c:12410
static NODE * new_args_tail_gen(struct parser_params *, NODE *, ID, ID)
Definition: ripper.c:16887
#define NEW_RESCUE(b, res, e)
Definition: node.h:377
static int dvar_defined_gen(struct parser_params *, ID, int)
Definition: ripper.c:17339
static NODE * new_regexp_gen(struct parser_params *, NODE *, int)
Definition: ripper.c:15921
rb_magic_comment_length_t length
Definition: ripper.c:13849
void rb_init_parse(void)
Definition: ripper.c:17610
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
Definition: class.c:1919
static int local_id_gen(struct parser_params *, ID)
Definition: ripper.c:17251
#define YYSIZE_T
Definition: ripper.c:1103
#define ESCAPE_META
Definition: ripper.c:12681
unsigned char buf[MIME_BUF_SIZE]
Definition: nkf.c:4309
#define rb_warn3L(l, fmt, a, b, c)
Definition: ripper.c:829
short int yytype_int16
Definition: ripper.c:1090
Definition: parse.c:963
Definition: parse.c:1006
VALUE rb_assoc_new(VALUE car, VALUE cdr)
Definition: array.c:623
#define PRIsVALUE
Definition: ruby.h:135
#define rb_warn1L(l, fmt, a)
Definition: ripper.c:827
#define no_digits()
static void parser_set_compile_option_flag(struct parser_params *parser, const char *name, const char *val)
Definition: ripper.c:13819
unsigned long ID
Definition: ruby.h:86
rb_encoding * rb_usascii_encoding(void)
Definition: encoding.c:1335
#define rb_enc_isalnum(c, enc)
Definition: encoding.h:229
static void rb_backref_error_gen(struct parser_params *, NODE *)
Definition: ripper.c:16265
unsigned char yytype_uint8
Definition: ripper.c:1069
#define nd_resq
Definition: node.h:296
#define NEW_PRELUDE(p, b, o)
Definition: node.h:455
static const yytype_int16 yyrhs[]
Definition: ripper.c:1411
#define Qnil
Definition: ruby.h:438
#define heredoc_restore(n)
Definition: ripper.c:11915
#define NEW_BACK_REF(n)
Definition: node.h:409
static void parser_prepare(struct parser_params *parser)
Definition: ripper.c:14043
union RNode::@148 u2
Definition: parse.c:997
static NODE * const_decl_gen(struct parser_params *parser, NODE *path)
Definition: ripper.c:17108
#define lex_lastline
Definition: ripper.c:420
#define tAREF
Definition: id.c:28
int id[2]
Definition: lex.c:33
#define NODE_FL_NEWLINE
Definition: node.h:269
static int options(unsigned char *cp)
Definition: nkf.c:6358
#define NEW_MASGN(l, r)
Definition: node.h:386
static const char *const yytname[]
Definition: ripper.c:1682
#define YYSTACK_RELOCATE(Stack_alloc, Stack)
Definition: ripper.c:1243
#define tPOW
Definition: id.c:17
#define BUILTIN_TYPE(x)
Definition: ruby.h:518
#define NEW_COLON2(c, i)
Definition: node.h:441
unsigned long VALUE
Definition: ruby.h:85
#define RFLOAT(obj)
Definition: internal.h:538
static NODE * cond_gen(struct parser_params *, NODE *, int)
Definition: ripper.c:16756
static VALUE result
Definition: nkf.c:40
NODE * post_init
Definition: node.h:488
static int parse_percent(struct parser_params *parser, const int space_seen, const enum lex_state_e last_state)
Definition: ripper.c:14428
static void ripper_init_eventids2(void)
Definition: eventids2.c:71
#define RBASIC(obj)
Definition: ruby.h:1204
static void dyna_pop_1(struct parser_params *parser)
Definition: ripper.c:17305
static int parser_read_escape(struct parser_params *parser, int flags, rb_encoding **encp)
Definition: ripper.c:12684
static int parse_atmark(struct parser_params *parser, const enum lex_state_e last_state)
Definition: ripper.c:14670
#define ruby_sourceline
Definition: ripper.c:433
VALUE rb_obj_hide(VALUE obj)
Definition: object.c:51
static int parser_heredoc_identifier(struct parser_params *parser)
Definition: ripper.c:13240
static int value_expr_gen(struct parser_params *, NODE *)
Definition: ripper.c:16360
Definition: id.h:87
int post_args_num
Definition: node.h:491
static void arg_var_gen(struct parser_params *, ID)
Definition: ripper.c:17236
#define lex_pend
Definition: ripper.c:424
#define NEW_ENSURE(b, en)
Definition: node.h:379
yytokentype
Definition: parse.c:909
static int reg_fragment_check_gen(struct parser_params *, VALUE, int)
Definition: ripper.c:17430
#define rb_ary_new3
Definition: intern.h:91
static const yytype_int16 yycheck[]
Definition: ripper.c:3395
#define YYUSE(e)
Definition: ripper.c:1123
#define RUBY_DTRACE_PARSE_HOOK(name)
#define lvtbl
Definition: ripper.c:431
#define lex_strterm
Definition: ripper.c:404
#define NEW_ZSUPER()
Definition: node.h:424
const char * rb_id2name(ID)
Definition: symbol.c:759
static void parser_compile_error(struct parser_params *, const char *fmt,...)
Definition: ripper.c:17929
static VALUE negate_lit(VALUE)
Definition: ripper.c:16819
#define rb_enc_asciicompat(enc)
Definition: encoding.h:239
VALUE rb_ensure(VALUE(*b_proc)(ANYARGS), VALUE data1, VALUE(*e_proc)(ANYARGS), VALUE data2)
Definition: eval.c:923
#define free
Definition: ripper.c:119
VALUE rb_str_new_cstr(const char *)
Definition: string.c:770
RUBY_FUNC_EXPORTED int rb_reg_fragment_setenc(struct parser_params *, VALUE, int)
Definition: ripper.c:17386
#define WARN_S_L(s, l)
Definition: ripper.c:852
#define set_yylval_str(x)
Definition: ripper.c:11922
int rb_char_to_option_kcode(int c, int *option, int *kcode)
Definition: re.c:332
#define NEW_COLON3(i)
Definition: node.h:442
#define NEW_BLOCK(a)
Definition: node.h:361
#define cond_stack
Definition: ripper.c:406
short int yytype_int8
Definition: ripper.c:1078
#define nd_body
Definition: node.h:291
VALUE flags
Definition: node.h:236
const char * pend
Definition: ripper.c:319
VALUE rb_fstring(VALUE)
Definition: string.c:305
static int is_static_content(NODE *node)
Definition: ripper.c:16597
const char * token
Definition: ripper.c:290
#define ENCODING_IS_ASCII8BIT(obj)
Definition: encoding.h:59
VALUE rb_str_dup(VALUE)
Definition: string.c:1436
static const yytype_int16 yypgoto[]
Definition: ripper.c:2175
#define tLEQ
Definition: id.c:21
unsigned int token_info_enabled
Definition: ripper.c:359
#define CHAR_BIT
Definition: ruby.h:196
static enum lex_state_e trace_lex_state(enum lex_state_e from, enum lex_state_e to, int line)
Definition: ripper.c:16073
static int parse_qmark(struct parser_params *parser, int space_seen)
Definition: ripper.c:14337
VALUE rb_sym_intern_ascii_cstr(const char *ptr)
Definition: symbol.c:1050
static VALUE append_lex_state_name(enum lex_state_e state, VALUE buf)
Definition: ripper.c:16051
static int literal_concat0(struct parser_params *, VALUE, VALUE)
Definition: ripper.c:15662
static ID * local_tbl_gen(struct parser_params *)
Definition: ripper.c:17211
#define LONG2NUM(x)
Definition: ruby.h:1573
#define const_path_field(w, n)
Definition: ripper.c:548
char * ruby_sourcefile
Definition: ripper.c:338
#define brace_nest
Definition: ripper.c:410
int rb_respond_to(VALUE, ID)
Definition: vm_method.c:1995
register unsigned int len
Definition: zonetab.h:51
#define NEW_BEGIN(b)
Definition: node.h:376
static int parser_yyerror(struct parser_params *, const char *)
Definition: ripper.c:12090
#define HEAPCNT(n, size)
Definition: ripper.c:17850
static void warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
Definition: ripper.c:16651
static int append_literal_keys(st_data_t k, st_data_t v, st_data_t h)
Definition: ripper.c:16979
#define RSTRING_PTR(str)
Definition: ruby.h:982
static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
Definition: ripper.c:12775
int toksiz
Definition: ripper.c:329
static void yy_symbol_print(FILE *yyoutput, int yytype, YYSTYPE const *const yyvaluep, struct parser_params *parser)
Definition: ripper.c:4854
RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20+31)/32]
Definition: ripper.c:13117
#define NEW_SPLAT(a)
Definition: node.h:431
void rb_str_modify(VALUE)
Definition: string.c:1980
const struct vtable * vars
Definition: parse.h:172
int rb_const_defined_at(VALUE, ID)
Definition: variable.c:2586
static VALUE reg_compile_gen(struct parser_params *, VALUE, int)
Definition: ripper.c:17503
#define ENCODING_GET(obj)
Definition: encoding.h:58
#define ESCAPE_CONTROL
Definition: ripper.c:12680
rb_encoding * rb_enc_get(VALUE obj)
Definition: encoding.c:860
VALUE debug_buffer
Definition: ripper.c:344
#define parser_isascii()
Definition: ripper.c:12011
static const yytype_uint8 yytranslate[]
Definition: ripper.c:1298
#define RFLOAT_VALUE(v)
Definition: ruby.h:940
int nonspc
Definition: ripper.c:293
int size
Definition: encoding.c:57
VALUE rb_ident_hash_new(void)
Definition: hash.c:2808
#define NEW_DSTR(s)
Definition: node.h:415
#define ADD2HEAP(n, c, p)
Definition: ripper.c:17852
#define tokspace(n)
Definition: ripper.c:11904
#define f
#define in_def
Definition: ripper.c:412
#define INT2FIX(i)
Definition: ruby.h:232
static int is_private_local_id(ID name)
Definition: ripper.c:16185
static void yy_stack_print(yytype_int16 *yybottom, yytype_int16 *yytop, parser)
Definition: ripper.c:4881
#define is_local_id(id)
Definition: symbol.h:36
#define NEW_GASGN(v, val)
Definition: node.h:387
#define NEW_BREAK(s)
Definition: node.h:372
static void no_blockarg(struct parser_params *parser, NODE *node)
Definition: ripper.c:16786
static void local_pop_gen(struct parser_params *)
Definition: ripper.c:17188
#define WARN_S(s)
Definition: ripper.c:853
int rb_safe_level(void)
Definition: safe.c:35
void rb_parser_free(struct parser_params *parser, void *ptr)
Definition: ripper.c:17896
#define RARRAY_AREF(a, i)
Definition: ruby.h:1040
static ID tokenize_ident(struct parser_params *parser, const enum lex_state_e last_state)
Definition: ripper.c:14537
#define read_escape(flags, e)
Definition: ripper.c:11907
#define dispatch_delayed_token(t)
Definition: ripper.c:11947
Definition: node.h:45
#define tok_hex(numlen)
Definition: ripper.c:11906
static NODE * literal_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: ripper.c:15679
#define new_evstr(n)
Definition: ripper.c:502
#define xmalloc
Definition: defines.h:183
#define parser_warn(node, mesg)
Definition: ripper.c:15561
VALUE coverage
Definition: ripper.c:373
void rb_set_errinfo(VALUE err)
Definition: eval.c:1630
#define tokfix()
Definition: ripper.c:12542
#define NEW_TRUE()
Definition: node.h:447
#define internal_id()
Definition: ripper.c:676
const char * name
Definition: ripper.c:13847
#define COND_LEXPOP()
Definition: ripper.c:180
#define lex_p
Definition: ripper.c:423
#define tSP
Definition: eventids2.c:6
#define NEW_LAMBDA(a, b)
Definition: node.h:371
VALUE rb_complex_raw(VALUE x, VALUE y)
Definition: complex.c:1423
#define CALL_Q_P(q)
Definition: ripper.c:449
Definition: node.h:207
#define NEW_UNTIL(c, b, n)
Definition: node.h:368
#define node_assign(node1, node2)
Definition: ripper.c:540
static void void_stmts_gen(struct parser_params *, NODE *)
Definition: ripper.c:16502
#define void_expr(node)
Definition: ripper.c:481
static NODE * new_xstring_gen(struct parser_params *, NODE *)
Definition: ripper.c:15981
#define void_expr0(node)
Definition: ripper.c:480
#define lex_pbeg
Definition: ripper.c:422
#define regx_options()
Definition: ripper.c:11909
#define NEW_MODULE(n, b)
Definition: node.h:440
#define tDOT3
Definition: id.c:14
VALUE rb_str_catf(VALUE str, const char *format,...)
Definition: sprintf.c:1480
#define BIGNUM_NEGATE(b)
Definition: internal.h:504
#define YYSTACK_ALLOC_MAXIMUM
Definition: ripper.c:1188
#define NEW_QCALL(q, r, m, a)
Definition: ripper.c:451
#define new_defined(expr)
Definition: ripper.c:561
#define tCMP
Definition: id.c:18
static const rb_data_type_t parser_data_type
Definition: ripper.c:12314
rb_magic_comment_setter_t func
Definition: ripper.c:13848
#define is_junk_id(id)
Definition: symbol.h:42
unsigned int yydebug
Definition: ripper.c:351
void rb_compile_warning(const char *file, int line, const char *fmt,...)
Definition: error.c:196
VALUE rb_big_norm(VALUE x)
Definition: bignum.c:3136
#define nd_head
Definition: node.h:286
struct local_vars * prev
Definition: ripper.c:204
static const yytype_uint16 yydefact[]
Definition: ripper.c:1918
static NODE * remove_duplicate_keys(struct parser_params *parser, NODE *hash)
Definition: ripper.c:16994
static NODE * new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
Definition: ripper.c:17036
#define LONG2FIX(i)
Definition: ruby.h:234
#define parser_encoding_name()
Definition: ripper.c:12006
#define tokadd_escape(e)
Definition: ripper.c:11908
#define NEW_WHILE(c, b, n)
Definition: node.h:367
struct vtable * vars
Definition: ripper.c:199
#define RTEST(v)
Definition: ruby.h:450
Definition: node.h:141
#define T_STRING
Definition: ruby.h:496
static int parser_set_integer_literal(struct parser_params *parser, VALUE v, int suffix)
Definition: ripper.c:13500
static const yytype_int16 yypact[]
Definition: ripper.c:2061
int ruby_sourceline
Definition: ripper.c:337
static VALUE lex_io_gets(struct parser_params *parser, VALUE io)
Definition: ripper.c:12372
#define new_yield(node)
Definition: ripper.c:523
#define lvar_defined(id)
Definition: ripper.c:692
#define NEW_POSTARG(i, v)
Definition: node.h:428
#define tDOT2
Definition: id.c:13
#define NEW_UNDEF(i)
Definition: node.h:437
struct rb_encoding_entry * list
Definition: encoding.c:55
#define lpar_beg
Definition: ripper.c:409
#define YYTRANSLATE(YYX)
Definition: ripper.c:1294
void * rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
Definition: ripper.c:17866
Definition: id.h:97
VALUE rb_str_cat_cstr(VALUE, const char *)
Definition: string.c:2674
Definition: id.h:89
#define T_FILE
Definition: ruby.h:502
#define NEW_CVASGN(v, val)
Definition: node.h:394
#define yyerror(msg)
Definition: ripper.c:402
Definition: id.h:99
static void new_bv_gen(struct parser_params *, ID)
Definition: ripper.c:16230
static void reg_fragment_enc_error(struct parser_params *parser, VALUE str, int c)
Definition: ripper.c:17377
#define ruby_coverage
Definition: ripper.c:446
#define NEW_FCALL(m, a)
Definition: node.h:421
int linenum
Definition: ripper.c:291
VALUE compile_option
Definition: ripper.c:342
static int is_global_name_punct(const int c)
Definition: symbol.h:95
static NODE * new_hash_gen(struct parser_params *parser, NODE *hash)
Definition: ripper.c:17027
static int id_type(ID id)
Definition: symbol.h:45
#define TypedData_Make_Struct(klass, type, data_type, sval)
Definition: ruby.h:1182
#define tEMBDOC
Definition: eventids2.c:4
#define NEW_MATCH3(r, n2)
Definition: node.h:412
#define UNLIKELY(x)
Definition: ffi_common.h:126
#define number_literal_suffix(f)
Definition: ripper.c:11917
#define DVARS_INHERIT
Definition: ripper.c:208
#define STR_NEW3(p, n, e, func)
Definition: ripper.c:398
static const char * magic_comment_marker(const char *str, long len)
Definition: ripper.c:13863
static int parser_tokadd_codepoint(struct parser_params *parser, rb_encoding **encp, int regexp_literal, int wide)
Definition: ripper.c:12602
#define NEW_OPT_ARG(i, v)
Definition: node.h:426
unsigned int in_single
Definition: ripper.c:356
#define BEG(no)
Definition: re.c:24
#define CMDARG_SET(n)
Definition: ripper.c:188
static int parser_magic_comment(struct parser_params *parser, const char *str, long len)
Definition: ripper.c:13896
#define IS_LABEL_POSSIBLE()
Definition: ripper.c:14072
VALUE rb_ary_tmp_new_fill(long capa)
Definition: array.c:538
#define st_insert
Definition: regint.h:184
#define method_cond(node)
Definition: ripper.c:465
VALUE rb_filesystem_str_new_cstr(const char *)
Definition: string.c:1050
#define tUPLUS
Definition: id.c:15
Definition: id.h:75
Definition: id.h:94
#define DVARS_TOPSCOPE
Definition: ripper.c:209
VALUE rb_enc_str_new(const char *, long, rb_encoding *)
Definition: string.c:758
#define YYCASE_(N, S)
VALUE rb_parser_new(void)
Definition: ripper.c:17739
#define tLSHFT
Definition: id.c:19
Definition: ripper.c:190
VALUE rb_const_get_at(VALUE, ID)
Definition: variable.c:2341
static void parser_set_encode(struct parser_params *parser, const char *name)
Definition: ripper.c:13737
#define call_uni_op(recv, id)
Definition: ripper.c:510
static int literal_node(NODE *node)
Definition: ripper.c:16675
#define set_yylval_node(x)
Definition: ripper.c:11927
#define YYSTACK_BYTES(N)
Definition: ripper.c:1232
#define IS_BEG()
Definition: ripper.c:14070
const char * name
Definition: nkf.c:208
static int parser_tok_hex(struct parser_params *parser, size_t *numlen)
Definition: ripper.c:12586
#define xrealloc
Definition: defines.h:186
#define RE_OPTION_ENCODING_NONE(o)
Definition: ripper.c:698
lex_state_e
Definition: ripper.c:138
#define ID2SYM(x)
Definition: ruby.h:383
Definition: node.h:61
#define dvar_defined_get(id)
Definition: ripper.c:687
#define NEW_RETRY()
Definition: node.h:375
#define new_kw_arg(k)
Definition: ripper.c:516
#define ruby_eval_tree_begin
Definition: ripper.c:444
#define ruby_sourcefile_string
Definition: ripper.c:435
#define formal_argument(id)
Definition: ripper.c:659
#define nd_value
Definition: node.h:316
#define ID_INTERNAL
Definition: id.h:40
enum rb_block_type type
Definition: vm_core.h:628
static int nodeline(NODE *node)
Definition: ripper.c:15525
#define dispatch_heredoc_end()
Definition: ripper.c:13525
#define ruby_eval_tree
Definition: ripper.c:443
VALUE rb_str_new_frozen(VALUE)
Definition: string.c:1123
#define toklast()
Definition: ripper.c:12545
#define lex_gets
Definition: ripper.c:430
#define toklen()
Definition: ripper.c:12544
static const yytype_uint8 yyr2[]
Definition: ripper.c:1846
#define NEW_RESBODY(a, ex, n)
Definition: node.h:378
#define NEW_ARGSCAT(a, b)
Definition: node.h:429
#define st_free_table
Definition: regint.h:188
#define NEW_DASGN_CURR(v, val)
Definition: node.h:390
#define cmdarg_stack
Definition: ripper.c:407
#define in_single
Definition: ripper.c:411
#define YY_STACK_PRINT(Bottom, Top)
Definition: ripper.c:4895
Definition: id.h:93
#define YYFPRINTF
Definition: ripper.c:105
#define NEW_SUPER(a)
Definition: node.h:423
static int parse_ident(struct parser_params *parser, int c, int cmd_state)
Definition: ripper.c:14709
#define NEW_CALL(r, m, a)
Definition: node.h:420
rb_encoding * rb_ascii8bit_encoding(void)
Definition: encoding.c:1305
#define lambda_beginning_p()
Definition: ripper.c:453
#define peek(c)
Definition: ripper.c:12449
#define tGEQ
Definition: id.c:22
int rb_enc_find_index(const char *name)
Definition: encoding.c:704
static NODE * splat_array(NODE *)
Definition: ripper.c:16321
static struct vtable * vtable_alloc(struct vtable *prev)
Definition: ripper.c:227
Definition: node.h:31
#define RCOMPLEX_SET_REAL(cmp, r)
Definition: ruby.h:1075
static int parser_update_heredoc_indent(struct parser_params *parser, int c)
Definition: ripper.c:12924
#define CONST_ID(var, str)
Definition: ruby.h:1743
static int parse_numeric(struct parser_params *parser, int c)
Definition: ripper.c:14102
NODE * heap
Definition: ripper.c:307
RUBY_EXTERN VALUE rb_stdout
Definition: ruby.h:1950
static void token_info_push_gen(struct parser_params *, const char *token, size_t len)
Definition: ripper.c:12040
VALUE rb_str_intern(VALUE)
Definition: symbol.c:661
#define rb_intern_const(str)
Definition: ruby.h:1756
#define NEW_CVAR(v)
Definition: node.h:407
#define COND_P()
Definition: ripper.c:181
ID rb_id_attrset(ID)
Definition: symbol.c:100
#define mixed_error(enc1, enc2)
static VALUE parse_rational(struct parser_params *parser, char *str, int len, int seen_point)
Definition: ripper.c:14091
void void xfree(void *)
Definition: parse.c:1008
#define is_notop_id(id)
Definition: symbol.h:35
#define NEW_MATCH2(n1, n2)
Definition: node.h:411
static const struct vtable * dyna_push_gen(struct parser_params *)
Definition: ripper.c:17279
NODE * rb_parser_compile_cstr(VALUE vparser, const char *f, const char *s, int len, int line)
Definition: ripper.c:12363
ID first_post_arg
Definition: node.h:493
void * rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
Definition: ripper.c:17876
#define shadowing_lvar(name)
Definition: ripper.c:661
VALUE rb_cstr_to_inum(const char *str, int base, int badcheck)
Definition: bignum.c:3994
#define tNMATCH
Definition: id.c:27
#define current_arg
Definition: ripper.c:437
#define get_value(val)
Definition: ripper.c:592
static int parser_set_number_literal(struct parser_params *parser, VALUE v, int type, int suffix)
Definition: ripper.c:13488
Definition: id.h:88
static int tokadd_ident(struct parser_params *parser, int c)
Definition: ripper.c:14526
#define rb_enc_mbcput(c, buf, enc)
Definition: encoding.h:211
#define NEW_DVAR(v)
Definition: node.h:404
#define rb_intern(str)
#define NEW_DEFN(i, a, d, p)
Definition: node.h:358
#define tUMINUS
Definition: id.c:16
#define reg_fragment_check(str, options)
Definition: ripper.c:584
VALUE rb_str_buf_new(long)
Definition: string.c:1247
VALUE rb_usascii_str_new(const char *, long)
Definition: string.c:742
#define compile_for_eval
Definition: ripper.c:442
static NODE * parser_heredoc_dedent(struct parser_params *, NODE *)
Definition: ripper.c:13373
#define SYMBOL_P(x)
Definition: ruby.h:382
#define tCOMMENT
Definition: eventids2.c:2
NODE * kw_args
Definition: node.h:498
#define set_yylval_id(x)
Definition: ripper.c:11924
#define nd_iter
Definition: node.h:314
#define nd_set_line(n, l)
Definition: node.h:281
VALUE rb_vsprintf(const char *, va_list)
Definition: sprintf.c:1434
NODE * rb_compile_file(const char *f, VALUE file, int start)
Definition: ripper.c:12378
#define LVAR_USED
Definition: ripper.c:16195
static NODE * assignable_gen(struct parser_params *, ID, NODE *)
Definition: ripper.c:16106
VALUE rb_parser_get_yydebug(VALUE self)
Definition: ripper.c:17824
#define NULL
Definition: _sdbm.c:102
#define NEW_LASGN(v, val)
Definition: node.h:388
#define FIX2LONG(x)
Definition: ruby.h:363
static VALUE debug_lines(VALUE fname)
Definition: ripper.c:12160
#define Qundef
Definition: ruby.h:439
#define tIGNORED_NL
Definition: eventids2.c:1
#define NEW_STR(s)
Definition: node.h:414
#define yypact_value_is_default(yystate)
Definition: ripper.c:3389
NODE * kw_rest_arg
Definition: node.h:499
#define ID_GLOBAL
Definition: id.h:35
NODE * eval_tree_begin
Definition: ripper.c:369
#define ISXDIGIT(c)
Definition: ruby.h:2130
#define rb_warn0(fmt)
Definition: ripper.c:816
#define ENCODING_SET(obj, i)
Definition: encoding.h:56
static int dedent_string(VALUE string, int width)
Definition: ripper.c:13341
#define NEW_SELF()
Definition: node.h:445
Definition: parse.c:961
static NODE * kwd_append(NODE *, NODE *)
Definition: ripper.c:15908
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
Definition: class.c:1515
#define ruby_verbose
Definition: ruby.h:1792
VALUE rb_str_append(VALUE, VALUE)
Definition: string.c:2818
#define new_bv(id)
Definition: ripper.c:663
static void warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
Definition: ripper.c:16645
#define NEW_NODE(t, a0, a1, a2)
Definition: node.h:356
#define NEW_ARGS_AUX(r, b)
Definition: node.h:425
unsigned int in_defined
Definition: ripper.c:353
int rb_memcicmp(const void *, const void *, long)
Definition: re.c:79
#define block_append(h, t)
Definition: ripper.c:490
#define NEW_ALIAS(n, o)
Definition: node.h:435
NODE * rb_parser_compile_string(VALUE vparser, const char *f, VALUE s, int line)
Definition: ripper.c:12343
VALUE rb_eArgError
Definition: error.c:763
static void vtable_free(struct vtable *tbl)
Definition: ripper.c:239
#define COND_SET(n)
Definition: ripper.c:182
#define nd_lit
Definition: node.h:319
#define rb_enc_prev_char(s, p, e, enc)
Definition: encoding.h:214
#define T_REGEXP
Definition: ruby.h:497
VALUE input
Definition: ripper.c:314
static int token_info_get_column(struct parser_params *parser, const char *pend)
Definition: ripper.c:12014
Definition: node.h:139
stack_type cmdarg_stack
Definition: ripper.c:327
#define tEQQ
Definition: id.c:24
unsigned long ruby_scan_oct(const char *, size_t, size_t *)
Definition: util.c:34
#define heredoc_end
Definition: ripper.c:425
VALUE rb_attr_get(VALUE, ID)
Definition: variable.c:1273
struct vtable * args
Definition: ripper.c:198
#define tokaddmbc(c, enc)
Definition: ripper.c:11912
#define NEW_CDECL(v, val, path)
Definition: node.h:393
#define NEW_DEFS(r, i, a, d)
Definition: node.h:359
char ** argv
Definition: ruby.c:184
#define tEMBDOC_END
Definition: eventids2.c:5
#define DBL2NUM(dbl)
Definition: ruby.h:941
static void ripper_init_eventids2_table(VALUE self)
Definition: eventids2table.c:2
#define ISSPACE(c)
Definition: ruby.h:2124
#define StringValue(v)
Definition: ruby.h:569
VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc)
Definition: string.c:2771
#define pushback(c)
Definition: ripper.c:11902
#define STR_NEW2(p)
Definition: ripper.c:397
#define YYINITDEPTH
Definition: ripper.c:4955
rb_encoding * rb_enc_from_index(int index)
Definition: encoding.c:616
#define aryset(node1, node2)
Definition: ripper.c:533
#define IS_AFTER_OPERATOR()
Definition: ripper.c:14076
VALUE rb_obj_class(VALUE)
Definition: object.c:229
VALUE rb_str_new(const char *, long)
Definition: string.c:736
Definition: parse.c:965
#define xcalloc
Definition: defines.h:185
#define ID_CLASS
Definition: id.h:38
static NODE * new_args_gen(struct parser_params *, NODE *, NODE *, ID, NODE *, NODE *)
Definition: ripper.c:16865
#define rb_warn2(fmt, a, b)
Definition: ripper.c:818
static int parser_tokadd_mbchar(struct parser_params *parser, int c)
Definition: ripper.c:12898