Ruby  2.1.4p265(2014-10-27revision48166)
parse.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 "parse.y"
70 
71 
72 #ifndef PARSER_DEBUG
73 #define PARSER_DEBUG 0
74 #endif
75 #define YYDEBUG 1
76 #define YYERROR_VERBOSE 1
77 #define YYSTACK_USE_ALLOCA 0
78 
79 #include "ruby/ruby.h"
80 #include "ruby/st.h"
81 #include "ruby/encoding.h"
82 #include "internal.h"
83 #include "node.h"
84 #include "parse.h"
85 #include "id.h"
86 #include "regenc.h"
87 #include <stdio.h>
88 #include <errno.h>
89 #include <ctype.h>
90 #include "probes.h"
91 
92 #define YYMALLOC(size) rb_parser_malloc(parser, (size))
93 #define YYREALLOC(ptr, size) rb_parser_realloc(parser, (ptr), (size))
94 #define YYCALLOC(nelem, size) rb_parser_calloc(parser, (nelem), (size))
95 #define YYFREE(ptr) rb_parser_free(parser, (ptr))
96 #define malloc YYMALLOC
97 #define realloc YYREALLOC
98 #define calloc YYCALLOC
99 #define free YYFREE
100 
101 #ifndef RIPPER
102 static ID register_symid(ID, const char *, long, rb_encoding *);
103 static ID register_symid_str(ID, VALUE);
104 #define REGISTER_SYMID(id, name) register_symid((id), (name), strlen(name), enc)
105 #include "id.c"
106 #endif
107 
108 #define is_notop_id(id) ((id)>tLAST_OP_ID)
109 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL)
110 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL)
111 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE)
112 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET)
113 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST)
114 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS)
115 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK)
116 #define id_type(id) (is_notop_id(id) ? (int)((id)&ID_SCOPE_MASK) : -1)
117 
118 #define is_asgn_or_id(id) ((is_notop_id(id)) && \
119  (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \
120  ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \
121  ((id)&ID_SCOPE_MASK) == ID_CLASS))
122 
124  EXPR_BEG_bit, /* ignore newline, +/- is a sign. */
125  EXPR_END_bit, /* newline significant, +/- is an operator. */
126  EXPR_ENDARG_bit, /* ditto, and unbound braces. */
127  EXPR_ENDFN_bit, /* ditto, and unbound braces. */
128  EXPR_ARG_bit, /* newline significant, +/- is an operator. */
129  EXPR_CMDARG_bit, /* newline significant, +/- is an operator. */
130  EXPR_MID_bit, /* newline significant, +/- is an operator. */
131  EXPR_FNAME_bit, /* ignore newline, no reserved words. */
132  EXPR_DOT_bit, /* right after `.' or `::', no reserved words. */
133  EXPR_CLASS_bit, /* immediate after `class', no here document. */
134  EXPR_VALUE_bit, /* alike EXPR_BEG but label is disallowed. */
135  EXPR_LABELARG_bit, /* ignore significant, +/- is a sign. */
137 };
138 /* examine combinations */
140 #define DEF_EXPR(n) EXPR_##n = (1 << EXPR_##n##_bit)
142  DEF_EXPR(END),
143  DEF_EXPR(ENDARG),
144  DEF_EXPR(ENDFN),
145  DEF_EXPR(ARG),
146  DEF_EXPR(CMDARG),
147  DEF_EXPR(MID),
148  DEF_EXPR(FNAME),
149  DEF_EXPR(DOT),
150  DEF_EXPR(CLASS),
151  DEF_EXPR(VALUE),
152  DEF_EXPR(LABELARG),
153  EXPR_BEG_ANY = (EXPR_BEG | EXPR_VALUE | EXPR_MID | EXPR_CLASS | EXPR_LABELARG),
154  EXPR_ARG_ANY = (EXPR_ARG | EXPR_CMDARG),
155  EXPR_END_ANY = (EXPR_END | EXPR_ENDARG | EXPR_ENDFN)
156 };
157 #define IS_lex_state_for(x, ls) ((x) & (ls))
158 #define IS_lex_state(ls) IS_lex_state_for(lex_state, (ls))
159 
160 #if PARSER_DEBUG
161 static const char *lex_state_name(enum lex_state_e state);
162 #endif
163 
165 
166 # define BITSTACK_PUSH(stack, n) ((stack) = ((stack)<<1)|((n)&1))
167 # define BITSTACK_POP(stack) ((stack) = (stack) >> 1)
168 # define BITSTACK_LEXPOP(stack) ((stack) = ((stack) >> 1) | ((stack) & 1))
169 # define BITSTACK_SET_P(stack) ((stack)&1)
170 
171 #define COND_PUSH(n) BITSTACK_PUSH(cond_stack, (n))
172 #define COND_POP() BITSTACK_POP(cond_stack)
173 #define COND_LEXPOP() BITSTACK_LEXPOP(cond_stack)
174 #define COND_P() BITSTACK_SET_P(cond_stack)
175 
176 #define CMDARG_PUSH(n) BITSTACK_PUSH(cmdarg_stack, (n))
177 #define CMDARG_POP() BITSTACK_POP(cmdarg_stack)
178 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
179 #define CMDARG_P() BITSTACK_SET_P(cmdarg_stack)
180 
181 struct vtable {
182  ID *tbl;
183  int pos;
184  int capa;
185  struct vtable *prev;
186 };
187 
188 struct local_vars {
189  struct vtable *args;
190  struct vtable *vars;
191  struct vtable *used;
192  struct local_vars *prev;
193  stack_type cmdargs;
194 };
195 
196 #define DVARS_INHERIT ((void*)1)
197 #define DVARS_TOPSCOPE NULL
198 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
199 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
200 
201 static int
202 vtable_size(const struct vtable *tbl)
203 {
204  if (POINTER_P(tbl)) {
205  return tbl->pos;
206  }
207  else {
208  return 0;
209  }
210 }
211 
212 #define VTBL_DEBUG 0
213 
214 static struct vtable *
216 {
217  struct vtable *tbl = ALLOC(struct vtable);
218  tbl->pos = 0;
219  tbl->capa = 8;
220  tbl->tbl = ALLOC_N(ID, tbl->capa);
221  tbl->prev = prev;
222  if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
223  return tbl;
224 }
225 
226 static void
228 {
229  if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
230  if (POINTER_P(tbl)) {
231  if (tbl->tbl) {
232  xfree(tbl->tbl);
233  }
234  xfree(tbl);
235  }
236 }
237 
238 static void
239 vtable_add(struct vtable *tbl, ID id)
240 {
241  if (!POINTER_P(tbl)) {
242  rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
243  }
244  if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id));
245 
246  if (tbl->pos == tbl->capa) {
247  tbl->capa = tbl->capa * 2;
248  REALLOC_N(tbl->tbl, ID, tbl->capa);
249  }
250  tbl->tbl[tbl->pos++] = id;
251 }
252 
253 static int
254 vtable_included(const struct vtable * tbl, ID id)
255 {
256  int i;
257 
258  if (POINTER_P(tbl)) {
259  for (i = 0; i < tbl->pos; i++) {
260  if (tbl->tbl[i] == id) {
261  return i+1;
262  }
263  }
264  }
265  return 0;
266 }
267 
268 
269 #ifndef RIPPER
270 typedef struct token_info {
271  const char *token;
272  int linenum;
273  int column;
274  int nonspc;
275  struct token_info *next;
276 } token_info;
277 #endif
278 
279 /*
280  Structure of Lexer Buffer:
281 
282  lex_pbeg tokp lex_p lex_pend
283  | | | |
284  |-----------+--------------+------------|
285  |<------------>|
286  token
287 */
288 struct parser_params {
289  int is_ripper;
290  NODE *heap;
291 
293  VALUE eofp;
294 
297  stack_type parser_cond_stack;
298  stack_type parser_cmdarg_stack;
299  int parser_class_nest;
300  int parser_paren_nest;
301  int parser_lpar_beg;
302  int parser_in_single;
303  int parser_in_def;
304  int parser_brace_nest;
307  int parser_in_kwarg;
308  int parser_in_defined;
309  char *parser_tokenbuf;
310  int parser_tokidx;
311  int parser_toksiz;
312  int parser_tokline;
316  const char *parser_lex_pbeg;
317  const char *parser_lex_p;
318  const char *parser_lex_pend;
319  int parser_heredoc_end;
322  long parser_lex_gets_ptr;
324  struct local_vars *parser_lvtbl;
326  int line_count;
327  int has_shebang;
328  char *parser_ruby_sourcefile; /* current source file */
329  int parser_ruby_sourceline; /* current line no. */
331  rb_encoding *enc;
332 
333  int parser_yydebug;
334 
335  int last_cr_line;
336 
337 #ifndef RIPPER
338  /* Ruby core only */
342  VALUE coverage;
343  int nerr;
344 
347 #else
348  /* Ripper only */
349  const char *tokp;
350  VALUE delayed;
351  int delayed_line;
352  int delayed_col;
353 
354  VALUE value;
355  VALUE result;
356  VALUE parsing_thread;
357  int toplevel_p;
358 #endif
359 };
360 
361 #define STR_NEW(p,n) rb_enc_str_new((p),(n),current_enc)
362 #define STR_NEW0() rb_enc_str_new(0,0,current_enc)
363 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),current_enc)
364 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),current_enc)
365 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
366 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), current_enc)
367 
368 static int parser_yyerror(struct parser_params*, const char*);
369 #define yyerror(msg) parser_yyerror(parser, (msg))
370 
371 #define lex_strterm (parser->parser_lex_strterm)
372 #define lex_state (parser->parser_lex_state)
373 #define cond_stack (parser->parser_cond_stack)
374 #define cmdarg_stack (parser->parser_cmdarg_stack)
375 #define class_nest (parser->parser_class_nest)
376 #define paren_nest (parser->parser_paren_nest)
377 #define lpar_beg (parser->parser_lpar_beg)
378 #define brace_nest (parser->parser_brace_nest)
379 #define in_single (parser->parser_in_single)
380 #define in_def (parser->parser_in_def)
381 #define compile_for_eval (parser->parser_compile_for_eval)
382 #define cur_mid (parser->parser_cur_mid)
383 #define in_defined (parser->parser_in_defined)
384 #define tokenbuf (parser->parser_tokenbuf)
385 #define tokidx (parser->parser_tokidx)
386 #define toksiz (parser->parser_toksiz)
387 #define tokline (parser->parser_tokline)
388 #define lex_input (parser->parser_lex_input)
389 #define lex_lastline (parser->parser_lex_lastline)
390 #define lex_nextline (parser->parser_lex_nextline)
391 #define lex_pbeg (parser->parser_lex_pbeg)
392 #define lex_p (parser->parser_lex_p)
393 #define lex_pend (parser->parser_lex_pend)
394 #define heredoc_end (parser->parser_heredoc_end)
395 #define command_start (parser->parser_command_start)
396 #define deferred_nodes (parser->parser_deferred_nodes)
397 #define lex_gets_ptr (parser->parser_lex_gets_ptr)
398 #define lex_gets (parser->parser_lex_gets)
399 #define lvtbl (parser->parser_lvtbl)
400 #define ruby__end__seen (parser->parser_ruby__end__seen)
401 #define ruby_sourceline (parser->parser_ruby_sourceline)
402 #define ruby_sourcefile (parser->parser_ruby_sourcefile)
403 #define ruby_sourcefile_string (parser->parser_ruby_sourcefile_string)
404 #define current_enc (parser->enc)
405 #define yydebug (parser->parser_yydebug)
406 #ifdef RIPPER
407 #else
408 #define ruby_eval_tree (parser->parser_eval_tree)
409 #define ruby_eval_tree_begin (parser->parser_eval_tree_begin)
410 #define ruby_debug_lines (parser->debug_lines)
411 #define ruby_coverage (parser->coverage)
412 #endif
413 
414 #if YYPURE
415 static int yylex(void*, void*);
416 #else
417 static int yylex(void*);
418 #endif
419 
420 #ifndef RIPPER
421 #define yyparse ruby_yyparse
422 
423 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
424 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, (type), (a1), (a2), (a3))
425 
426 static NODE *cond_gen(struct parser_params*,NODE*);
427 #define cond(node) cond_gen(parser, (node))
428 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
429 #define logop(type,node1,node2) logop_gen(parser, (type), (node1), (node2))
430 
431 static NODE *newline_node(NODE*);
432 static void fixpos(NODE*,NODE*);
433 
434 static int value_expr_gen(struct parser_params*,NODE*);
435 static void void_expr_gen(struct parser_params*,NODE*);
436 static NODE *remove_begin(NODE*);
437 static NODE *remove_begin_all(NODE*);
438 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
439 #define void_expr0(node) void_expr_gen(parser, (node))
440 #define void_expr(node) void_expr0((node) = remove_begin(node))
441 static void void_stmts_gen(struct parser_params*,NODE*);
442 #define void_stmts(node) void_stmts_gen(parser, (node))
443 static void reduce_nodes_gen(struct parser_params*,NODE**);
444 #define reduce_nodes(n) reduce_nodes_gen(parser,(n))
445 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
446 #define block_dup_check(n1,n2) block_dup_check_gen(parser,(n1),(n2))
447 
448 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
449 #define block_append(h,t) block_append_gen(parser,(h),(t))
450 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
451 #define list_append(l,i) list_append_gen(parser,(l),(i))
452 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
453 #define list_concat(h,t) list_concat_gen(parser,(h),(t))
454 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
455 #define arg_append(h,t) arg_append_gen(parser,(h),(t))
456 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
457 #define arg_concat(h,t) arg_concat_gen(parser,(h),(t))
458 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
459 #define literal_concat(h,t) literal_concat_gen(parser,(h),(t))
460 static int literal_concat0(struct parser_params *, VALUE, VALUE);
461 static NODE *new_evstr_gen(struct parser_params*,NODE*);
462 #define new_evstr(n) new_evstr_gen(parser,(n))
463 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
464 #define evstr2dstr(n) evstr2dstr_gen(parser,(n))
465 static NODE *splat_array(NODE*);
466 
467 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
468 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, (recv),(id),(arg1))
469 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
470 #define call_uni_op(recv,id) call_uni_op_gen(parser, (recv),(id))
471 
472 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,NODE*);
473 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
474 static NODE *new_args_tail_gen(struct parser_params*,NODE*,ID,ID);
475 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
476 
477 static NODE *negate_lit(NODE*);
478 static NODE *ret_args_gen(struct parser_params*,NODE*);
479 #define ret_args(node) ret_args_gen(parser, (node))
480 static NODE *arg_blk_pass(NODE*,NODE*);
481 static NODE *new_yield_gen(struct parser_params*,NODE*);
482 #define new_yield(node) new_yield_gen(parser, (node))
483 static NODE *dsym_node_gen(struct parser_params*,NODE*);
484 #define dsym_node(node) dsym_node_gen(parser, (node))
485 
486 static NODE *gettable_gen(struct parser_params*,ID);
487 #define gettable(id) gettable_gen(parser,(id))
488 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
489 #define assignable(id,node) assignable_gen(parser, (id), (node))
490 
491 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
492 #define aryset(node1,node2) aryset_gen(parser, (node1), (node2))
493 static NODE *attrset_gen(struct parser_params*,NODE*,ID);
494 #define attrset(node,id) attrset_gen(parser, (node), (id))
495 
496 static void rb_backref_error_gen(struct parser_params*,NODE*);
497 #define rb_backref_error(n) rb_backref_error_gen(parser,(n))
498 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
499 #define node_assign(node1, node2) node_assign_gen(parser, (node1), (node2))
500 
501 static NODE *new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
502 static NODE *new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs);
503 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (attr), (op), (rhs))
504 static NODE *new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
505 #define new_const_op_assign(lhs, op, rhs) new_const_op_assign_gen(parser, (lhs), (op), (rhs))
506 
507 #define new_defined(expr) NEW_DEFINED(remove_begin_all(expr))
508 
509 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
510 #define match_op(node1,node2) match_op_gen(parser, (node1), (node2))
511 
512 static ID *local_tbl_gen(struct parser_params*);
513 #define local_tbl() local_tbl_gen(parser)
514 
515 static void fixup_nodes(NODE **);
516 
517 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
518 #define reg_compile(str,options) reg_compile_gen(parser, (str), (options))
519 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
520 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, (str), (options))
521 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
522 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, (str), (options))
523 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
524 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,(regexp),(match))
525 
526 #define get_id(id) (id)
527 #define get_value(val) (val)
528 #else
529 #define value_expr(node) ((void)(node))
530 #define remove_begin(node) (node)
531 #define rb_dvar_defined(id) 0
532 #define rb_local_defined(id) 0
533 static ID ripper_get_id(VALUE);
534 #define get_id(id) ripper_get_id(id)
535 static VALUE ripper_get_value(VALUE);
536 #define get_value(val) ripper_get_value(val)
537 static VALUE assignable_gen(struct parser_params*,VALUE);
538 #define assignable(lhs,node) assignable_gen(parser, (lhs))
539 static int id_is_var_gen(struct parser_params *parser, ID id);
540 #define id_is_var(id) id_is_var_gen(parser, (id))
541 
542 #define node_assign(node1, node2) dispatch2(assign, (node1), (node2))
543 
544 static VALUE new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs);
545 static VALUE new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs);
546 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (type), (attr), (op), (rhs))
547 
548 #endif /* !RIPPER */
549 
550 #define new_op_assign(lhs, op, rhs) new_op_assign_gen(parser, (lhs), (op), (rhs))
551 
552 static ID formal_argument_gen(struct parser_params*, ID);
553 #define formal_argument(id) formal_argument_gen(parser, (id))
554 static ID shadowing_lvar_gen(struct parser_params*,ID);
555 #define shadowing_lvar(name) shadowing_lvar_gen(parser, (name))
556 static void new_bv_gen(struct parser_params*,ID);
557 #define new_bv(id) new_bv_gen(parser, (id))
558 
559 static void local_push_gen(struct parser_params*,int);
560 #define local_push(top) local_push_gen(parser,(top))
561 static void local_pop_gen(struct parser_params*);
562 #define local_pop() local_pop_gen(parser)
563 static int local_var_gen(struct parser_params*, ID);
564 #define local_var(id) local_var_gen(parser, (id))
565 static int arg_var_gen(struct parser_params*, ID);
566 #define arg_var(id) arg_var_gen(parser, (id))
567 static int local_id_gen(struct parser_params*, ID);
568 #define local_id(id) local_id_gen(parser, (id))
569 static ID internal_id_gen(struct parser_params*);
570 #define internal_id() internal_id_gen(parser)
571 
572 static const struct vtable *dyna_push_gen(struct parser_params *);
573 #define dyna_push() dyna_push_gen(parser)
574 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
575 #define dyna_pop(node) dyna_pop_gen(parser, (node))
576 static int dyna_in_block_gen(struct parser_params*);
577 #define dyna_in_block() dyna_in_block_gen(parser)
578 #define dyna_var(id) local_var(id)
579 static int dvar_defined_gen(struct parser_params*,ID,int);
580 #define dvar_defined(id) dvar_defined_gen(parser, (id), 0)
581 #define dvar_defined_get(id) dvar_defined_gen(parser, (id), 1)
582 static int dvar_curr_gen(struct parser_params*,ID);
583 #define dvar_curr(id) dvar_curr_gen(parser, (id))
584 
585 static int lvar_defined_gen(struct parser_params*, ID);
586 #define lvar_defined(id) lvar_defined_gen(parser, (id))
587 
588 #define RE_OPTION_ONCE (1<<16)
589 #define RE_OPTION_ENCODING_SHIFT 8
590 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
591 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
592 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
593 #define RE_OPTION_MASK 0xff
594 #define RE_OPTION_ARG_ENCODING_NONE 32
595 
596 #define NODE_STRTERM NODE_ZARRAY /* nothing to gc */
597 #define NODE_HEREDOC NODE_ARRAY /* 1, 3 to gc */
598 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
599 #define nd_func u1.id
600 #if SIZEOF_SHORT == 2
601 #define nd_term(node) ((signed short)(node)->u2.id)
602 #else
603 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
604 #endif
605 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
606 #define nd_nest u3.cnt
607 
608 /****** Ripper *******/
609 
610 #ifdef RIPPER
611 #define RIPPER_VERSION "0.1.0"
612 
613 #include "eventids1.c"
614 #include "eventids2.c"
615 
616 static VALUE ripper_dispatch0(struct parser_params*,ID);
617 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
618 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
619 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
620 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
621 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
622 static VALUE ripper_dispatch7(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE);
623 
624 #define dispatch0(n) ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
625 #define dispatch1(n,a) ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a))
626 #define dispatch2(n,a,b) ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), (a), (b))
627 #define dispatch3(n,a,b,c) ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c))
628 #define dispatch4(n,a,b,c,d) ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d))
629 #define dispatch5(n,a,b,c,d,e) ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e))
630 #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))
631 
632 #define yyparse ripper_yyparse
633 
634 #define ripper_intern(s) ID2SYM(rb_intern(s))
635 static VALUE ripper_id2sym(ID);
636 #ifdef __GNUC__
637 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
638  ID2SYM(id) : ripper_id2sym(id))
639 #endif
640 
641 #define arg_new() dispatch0(args_new)
642 #define arg_add(l,a) dispatch2(args_add, (l), (a))
643 #define arg_add_star(l,a) dispatch2(args_add_star, (l), (a))
644 #define arg_add_block(l,b) dispatch2(args_add_block, (l), (b))
645 #define arg_add_optblock(l,b) ((b)==Qundef? (l) : dispatch2(args_add_block, (l), (b)))
646 #define bare_assoc(v) dispatch1(bare_assoc_hash, (v))
647 #define arg_add_assocs(l,b) arg_add((l), bare_assoc(b))
648 
649 #define args2mrhs(a) dispatch1(mrhs_new_from_args, (a))
650 #define mrhs_new() dispatch0(mrhs_new)
651 #define mrhs_add(l,a) dispatch2(mrhs_add, (l), (a))
652 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, (l), (a))
653 
654 #define mlhs_new() dispatch0(mlhs_new)
655 #define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a))
656 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a))
657 
658 #define params_new(pars, opts, rest, pars2, kws, kwrest, blk) \
659  dispatch7(params, (pars), (opts), (rest), (pars2), (kws), (kwrest), (blk))
660 
661 #define blockvar_new(p,v) dispatch2(block_var, (p), (v))
662 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a))
663 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, (l), (a))
664 
665 #define method_optarg(m,a) ((a)==Qundef ? (m) : dispatch2(method_add_arg,(m),(a)))
666 #define method_arg(m,a) dispatch2(method_add_arg,(m),(a))
667 #define method_add_block(m,b) dispatch2(method_add_block, (m), (b))
668 
669 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
670 
671 static inline VALUE
672 new_args_gen(struct parser_params *parser, VALUE f, VALUE o, VALUE r, VALUE p, VALUE tail)
673 {
674  NODE *t = (NODE *)tail;
675  VALUE k = t->u1.value, kr = t->u2.value, b = t->u3.value;
676  return params_new(f, o, r, p, k, kr, escape_Qundef(b));
677 }
678 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
679 
680 static inline VALUE
681 new_args_tail_gen(struct parser_params *parser, VALUE k, VALUE kr, VALUE b)
682 {
683  return (VALUE)rb_node_newnode(NODE_MEMO, k, kr, b);
684 }
685 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
686 
687 #define new_defined(expr) dispatch1(defined, (expr))
688 
689 #define FIXME 0
690 
691 #endif /* RIPPER */
692 
693 #ifndef RIPPER
694 # define Qnone 0
695 # define ifndef_ripper(x) (x)
696 #else
697 # define Qnone Qnil
698 # define ifndef_ripper(x)
699 #endif
700 
701 #ifndef RIPPER
702 # define rb_warn0(fmt) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt))
703 # define rb_warnI(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
704 # define rb_warnS(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
705 # define rb_warn4S(file,line,fmt,a) rb_compile_warn((file), (line), (fmt), (a))
706 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt))
707 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt), (a))
708 #else
709 # define rb_warn0(fmt) ripper_warn0(parser, (fmt))
710 # define rb_warnI(fmt,a) ripper_warnI(parser, (fmt), (a))
711 # define rb_warnS(fmt,a) ripper_warnS(parser, (fmt), (a))
712 # define rb_warn4S(file,line,fmt,a) ripper_warnS(parser, (fmt), (a))
713 # define rb_warning0(fmt) ripper_warning0(parser, (fmt))
714 # define rb_warningS(fmt,a) ripper_warningS(parser, (fmt), (a))
715 static void ripper_warn0(struct parser_params*, const char*);
716 static void ripper_warnI(struct parser_params*, const char*, int);
717 static void ripper_warnS(struct parser_params*, const char*, const char*);
718 static void ripper_warning0(struct parser_params*, const char*);
719 static void ripper_warningS(struct parser_params*, const char*, const char*);
720 #endif
721 
722 #ifdef RIPPER
723 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
724 # define rb_compile_error ripper_compile_error
725 # define compile_error ripper_compile_error
726 # define PARSER_ARG parser,
727 #else
728 # define rb_compile_error rb_compile_error_with_enc
729 # define compile_error parser->nerr++,rb_compile_error_with_enc
730 # define PARSER_ARG ruby_sourcefile, ruby_sourceline, current_enc,
731 #endif
732 
733 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150,
734  for instance). This is too low for Ruby to parse some files, such as
735  date/format.rb, therefore bump the value up to at least Bison's default. */
736 #ifdef OLD_YACC
737 #ifndef YYMAXDEPTH
738 #define YYMAXDEPTH 10000
739 #endif
740 #endif
741 
742 #ifndef RIPPER
743 static void token_info_push(struct parser_params*, const char *token);
744 static void token_info_pop(struct parser_params*, const char *token);
745 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, (token)) : (void)0)
746 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, (token)) : (void)0)
747 #else
748 #define token_info_push(token) /* nothing */
749 #define token_info_pop(token) /* nothing */
750 #endif
751 
752 
753 /* Line 268 of yacc.c */
754 #line 755 "parse.c"
755 
756 /* Enabling traces. */
757 #ifndef YYDEBUG
758 # define YYDEBUG 0
759 #endif
760 
761 /* Enabling verbose error messages. */
762 #ifdef YYERROR_VERBOSE
763 # undef YYERROR_VERBOSE
764 # define YYERROR_VERBOSE 1
765 #else
766 # define YYERROR_VERBOSE 0
767 #endif
768 
769 /* Enabling the token table. */
770 #ifndef YYTOKEN_TABLE
771 # define YYTOKEN_TABLE 0
772 #endif
773 
774 
775 /* Tokens. */
776 #ifndef YYTOKENTYPE
777 # define YYTOKENTYPE
778  /* Put the tokens into the symbol table, so that GDB and other debuggers
779  know about them. */
780  enum yytokentype {
784  keyword_def = 260,
789  keyword_end = 265,
790  keyword_if = 266,
799  keyword_for = 275,
804  keyword_in = 280,
805  keyword_do = 281,
813  keyword_nil = 289,
816  keyword_and = 292,
817  keyword_or = 293,
818  keyword_not = 294,
819  modifier_if = 295,
827  keyword_END = 303,
831  tIDENTIFIER = 307,
832  tFID = 308,
833  tGVAR = 309,
834  tIVAR = 310,
835  tCONSTANT = 311,
836  tCVAR = 312,
837  tLABEL = 313,
838  tINTEGER = 314,
839  tFLOAT = 315,
840  tRATIONAL = 316,
841  tIMAGINARY = 317,
843  tCHAR = 319,
844  tNTH_REF = 320,
845  tBACK_REF = 321,
846  tREGEXP_END = 322,
847  tUPLUS = 130,
848  tUMINUS = 131,
849  tPOW = 132,
850  tCMP = 134,
851  tEQ = 139,
852  tEQQ = 140,
853  tNEQ = 141,
854  tGEQ = 138,
855  tLEQ = 137,
856  tANDOP = 323,
857  tOROP = 324,
858  tMATCH = 142,
859  tNMATCH = 143,
860  tDOT2 = 128,
861  tDOT3 = 129,
862  tAREF = 144,
863  tASET = 145,
864  tLSHFT = 135,
865  tRSHFT = 136,
866  tCOLON2 = 325,
867  tCOLON3 = 326,
868  tOP_ASGN = 327,
869  tASSOC = 328,
870  tLPAREN = 329,
871  tLPAREN_ARG = 330,
872  tRPAREN = 331,
873  tLBRACK = 332,
874  tLBRACE = 333,
875  tLBRACE_ARG = 334,
876  tSTAR = 335,
877  tDSTAR = 336,
878  tAMPER = 337,
879  tLAMBDA = 338,
880  tSYMBEG = 339,
881  tSTRING_BEG = 340,
883  tREGEXP_BEG = 342,
884  tWORDS_BEG = 343,
885  tQWORDS_BEG = 344,
891  tSTRING_END = 350,
892  tLAMBEG = 351,
893  tLOWEST = 352,
894  tUMINUS_NUM = 353,
896  };
897 #endif
898 
899 
900 
901 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
902 typedef union YYSTYPE
903 {
904 
905 /* Line 293 of yacc.c */
906 #line 699 "parse.y"
907 
908  VALUE val;
909  NODE *node;
910  ID id;
911  int num;
912  const struct vtable *vars;
913 
914 
915 
916 /* Line 293 of yacc.c */
917 #line 918 "parse.c"
918 } YYSTYPE;
919 # define YYSTYPE_IS_TRIVIAL 1
920 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
921 # define YYSTYPE_IS_DECLARED 1
922 #endif
923 
924 
925 /* Copy the second part of user declarations. */
926 
927 
928 /* Line 343 of yacc.c */
929 #line 930 "parse.c"
930 
931 #ifdef short
932 # undef short
933 #endif
934 
935 #ifdef YYTYPE_UINT8
936 typedef YYTYPE_UINT8 yytype_uint8;
937 #else
938 typedef unsigned char yytype_uint8;
939 #endif
940 
941 #ifdef YYTYPE_INT8
942 typedef YYTYPE_INT8 yytype_int8;
943 #elif (defined __STDC__ || defined __C99__FUNC__ \
944  || defined __cplusplus || defined _MSC_VER)
945 typedef signed char yytype_int8;
946 #else
947 typedef short int yytype_int8;
948 #endif
949 
950 #ifdef YYTYPE_UINT16
951 typedef YYTYPE_UINT16 yytype_uint16;
952 #else
953 typedef unsigned short int yytype_uint16;
954 #endif
955 
956 #ifdef YYTYPE_INT16
957 typedef YYTYPE_INT16 yytype_int16;
958 #else
959 typedef short int yytype_int16;
960 #endif
961 
962 #ifndef YYSIZE_T
963 # ifdef __SIZE_TYPE__
964 # define YYSIZE_T __SIZE_TYPE__
965 # elif defined size_t
966 # define YYSIZE_T size_t
967 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
968  || defined __cplusplus || defined _MSC_VER)
969 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
970 # define YYSIZE_T size_t
971 # else
972 # define YYSIZE_T unsigned int
973 # endif
974 #endif
975 
976 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
977 
978 #ifndef YY_
979 # if defined YYENABLE_NLS && YYENABLE_NLS
980 # if ENABLE_NLS
981 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
982 # define YY_(msgid) dgettext ("bison-runtime", msgid)
983 # endif
984 # endif
985 # ifndef YY_
986 # define YY_(msgid) msgid
987 # endif
988 #endif
989 
990 /* Suppress unused-variable warnings by "using" E. */
991 #if ! defined lint || defined __GNUC__
992 # define YYUSE(e) ((void) (e))
993 #else
994 # define YYUSE(e) /* empty */
995 #endif
996 
997 /* Identity function, used to suppress warnings about constant conditions. */
998 #ifndef lint
999 # define YYID(n) (n)
1000 #else
1001 #if (defined __STDC__ || defined __C99__FUNC__ \
1002  || defined __cplusplus || defined _MSC_VER)
1003 static int
1004 YYID (int yyi)
1005 #else
1006 static int
1007 YYID (yyi)
1008  int yyi;
1009 #endif
1010 {
1011  return yyi;
1012 }
1013 #endif
1014 
1015 #if ! defined yyoverflow || YYERROR_VERBOSE
1016 
1017 /* The parser invokes alloca or malloc; define the necessary symbols. */
1018 
1019 # ifdef YYSTACK_USE_ALLOCA
1020 # if YYSTACK_USE_ALLOCA
1021 # ifdef __GNUC__
1022 # define YYSTACK_ALLOC __builtin_alloca
1023 # elif defined __BUILTIN_VA_ARG_INCR
1024 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
1025 # elif defined _AIX
1026 # define YYSTACK_ALLOC __alloca
1027 # elif defined _MSC_VER
1028 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
1029 # define alloca _alloca
1030 # else
1031 # define YYSTACK_ALLOC alloca
1032 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
1033  || defined __cplusplus || defined _MSC_VER)
1034 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1035 # ifndef EXIT_SUCCESS
1036 # define EXIT_SUCCESS 0
1037 # endif
1038 # endif
1039 # endif
1040 # endif
1041 # endif
1042 
1043 # ifdef YYSTACK_ALLOC
1044  /* Pacify GCC's `empty if-body' warning. */
1045 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
1046 # ifndef YYSTACK_ALLOC_MAXIMUM
1047  /* The OS might guarantee only one guard page at the bottom of the stack,
1048  and a page size can be as small as 4096 bytes. So we cannot safely
1049  invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1050  to allow for a few compiler-allocated temporary stack slots. */
1051 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
1052 # endif
1053 # else
1054 # define YYSTACK_ALLOC YYMALLOC
1055 # define YYSTACK_FREE YYFREE
1056 # ifndef YYSTACK_ALLOC_MAXIMUM
1057 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
1058 # endif
1059 # if (defined __cplusplus && ! defined EXIT_SUCCESS \
1060  && ! ((defined YYMALLOC || defined malloc) \
1061  && (defined YYFREE || defined free)))
1062 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1063 # ifndef EXIT_SUCCESS
1064 # define EXIT_SUCCESS 0
1065 # endif
1066 # endif
1067 # ifndef YYMALLOC
1068 # define YYMALLOC malloc
1069 # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
1070  || defined __cplusplus || defined _MSC_VER)
1071 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1072 # endif
1073 # endif
1074 # ifndef YYFREE
1075 # define YYFREE free
1076 # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
1077  || defined __cplusplus || defined _MSC_VER)
1078 void free (void *); /* INFRINGES ON USER NAME SPACE */
1079 # endif
1080 # endif
1081 # endif
1082 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
1083 
1084 
1085 #if (! defined yyoverflow \
1086  && (! defined __cplusplus \
1087  || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
1088 
1089 /* A type that is properly aligned for any stack member. */
1090 union yyalloc
1091 {
1092  yytype_int16 yyss_alloc;
1094 };
1095 
1096 /* The size of the maximum gap between one aligned stack and the next. */
1097 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1098 
1099 /* The size of an array large to enough to hold all stacks, each with
1100  N elements. */
1101 # define YYSTACK_BYTES(N) \
1102  ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
1103  + YYSTACK_GAP_MAXIMUM)
1104 
1105 # define YYCOPY_NEEDED 1
1106 
1107 /* Relocate STACK from its old location to the new one. The
1108  local variables YYSIZE and YYSTACKSIZE give the old and new number of
1109  elements in the stack, and YYPTR gives the new location of the
1110  stack. Advance YYPTR to a properly aligned location for the next
1111  stack. */
1112 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
1113  do \
1114  { \
1115  YYSIZE_T yynewbytes; \
1116  YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
1117  Stack = &yyptr->Stack_alloc; \
1118  yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1119  yyptr += yynewbytes / sizeof (*yyptr); \
1120  } \
1121  while (YYID (0))
1122 
1123 #endif
1124 
1125 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
1126 /* Copy COUNT objects from FROM to TO. The source and destination do
1127  not overlap. */
1128 # ifndef YYCOPY
1129 # if defined __GNUC__ && 1 < __GNUC__
1130 # define YYCOPY(To, From, Count) \
1131  __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1132 # else
1133 # define YYCOPY(To, From, Count) \
1134  do \
1135  { \
1136  YYSIZE_T yyi; \
1137  for (yyi = 0; yyi < (Count); yyi++) \
1138  (To)[yyi] = (From)[yyi]; \
1139  } \
1140  while (YYID (0))
1141 # endif
1142 # endif
1143 #endif /* !YYCOPY_NEEDED */
1144 
1145 /* YYFINAL -- State number of the termination state. */
1146 #define YYFINAL 3
1147 /* YYLAST -- Last index in YYTABLE. */
1148 #define YYLAST 11071
1149 
1150 /* YYNTOKENS -- Number of terminals. */
1151 #define YYNTOKENS 144
1152 /* YYNNTS -- Number of nonterminals. */
1153 #define YYNNTS 203
1154 /* YYNRULES -- Number of rules. */
1155 #define YYNRULES 626
1156 /* YYNRULES -- Number of states. */
1157 #define YYNSTATES 1059
1158 
1159 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1160 #define YYUNDEFTOK 2
1161 #define YYMAXUTOK 354
1162 
1163 #define YYTRANSLATE(YYX) \
1164  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1165 
1166 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
1167 static const yytype_uint8 yytranslate[] =
1168 {
1169  0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1170  143, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1171  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1172  2, 2, 142, 129, 2, 2, 2, 127, 122, 2,
1173  138, 139, 125, 123, 136, 124, 135, 126, 2, 2,
1174  2, 2, 2, 2, 2, 2, 2, 2, 117, 141,
1175  119, 115, 118, 116, 2, 2, 2, 2, 2, 2,
1176  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1177  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1178  2, 134, 2, 140, 121, 2, 137, 2, 2, 2,
1179  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1180  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1181  2, 2, 2, 132, 120, 133, 130, 2, 81, 82,
1182  68, 69, 70, 2, 71, 85, 86, 76, 75, 72,
1183  73, 74, 79, 80, 83, 84, 2, 2, 2, 2,
1184  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1185  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1186  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1187  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1188  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1189  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1190  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1191  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1192  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1193  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1194  2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1195  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1196  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1197  25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1198  35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1199  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1200  55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1201  65, 66, 67, 77, 78, 87, 88, 89, 90, 91,
1202  92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
1203  102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
1204  112, 113, 114, 128, 131
1205 };
1206 
1207 #if YYDEBUG
1208 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1209  YYRHS. */
1210 static const yytype_uint16 yyprhs[] =
1211 {
1212  0, 0, 3, 4, 7, 10, 12, 14, 18, 21,
1213  23, 24, 30, 35, 38, 40, 42, 46, 49, 51,
1214  52, 58, 59, 64, 68, 72, 76, 79, 83, 87,
1215  91, 95, 99, 104, 106, 110, 114, 121, 127, 133,
1216  139, 145, 149, 153, 157, 159, 163, 167, 169, 173,
1217  177, 181, 184, 186, 188, 190, 192, 194, 199, 200,
1218  206, 208, 211, 215, 220, 226, 231, 237, 240, 243,
1219  246, 249, 252, 254, 258, 260, 264, 266, 269, 273,
1220  279, 282, 287, 290, 295, 297, 301, 303, 307, 310,
1221  314, 316, 320, 322, 324, 329, 333, 337, 341, 345,
1222  348, 350, 352, 354, 359, 363, 367, 371, 375, 378,
1223  380, 382, 384, 387, 389, 393, 395, 397, 399, 401,
1224  403, 405, 407, 409, 411, 413, 414, 419, 421, 423,
1225  425, 427, 429, 431, 433, 435, 437, 439, 441, 443,
1226  445, 447, 449, 451, 453, 455, 457, 459, 461, 463,
1227  465, 467, 469, 471, 473, 475, 477, 479, 481, 483,
1228  485, 487, 489, 491, 493, 495, 497, 499, 501, 503,
1229  505, 507, 509, 511, 513, 515, 517, 519, 521, 523,
1230  525, 527, 529, 531, 533, 535, 537, 539, 541, 543,
1231  545, 547, 549, 551, 553, 555, 557, 559, 561, 565,
1232  571, 575, 581, 588, 594, 600, 606, 612, 617, 621,
1233  625, 629, 633, 637, 641, 645, 649, 653, 658, 661,
1234  664, 668, 672, 676, 680, 684, 688, 692, 696, 700,
1235  704, 708, 712, 716, 719, 722, 726, 730, 734, 738,
1236  739, 744, 751, 753, 755, 757, 760, 765, 768, 772,
1237  774, 776, 778, 780, 783, 788, 791, 793, 796, 799,
1238  804, 806, 807, 810, 813, 816, 818, 820, 823, 827,
1239  832, 834, 836, 840, 845, 848, 850, 852, 854, 856,
1240  858, 860, 862, 864, 866, 868, 870, 871, 876, 877,
1241  881, 882, 883, 889, 893, 897, 900, 904, 908, 910,
1242  915, 919, 921, 922, 929, 934, 938, 941, 943, 946,
1243  949, 956, 963, 964, 965, 973, 974, 975, 983, 989,
1244  994, 995, 996, 1006, 1007, 1014, 1015, 1016, 1025, 1026,
1245  1032, 1033, 1040, 1041, 1042, 1052, 1054, 1056, 1058, 1060,
1246  1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080,
1247  1082, 1084, 1086, 1088, 1091, 1093, 1095, 1097, 1103, 1105,
1248  1108, 1110, 1112, 1114, 1118, 1120, 1124, 1126, 1131, 1138,
1249  1142, 1148, 1151, 1156, 1158, 1162, 1167, 1170, 1173, 1175,
1250  1178, 1179, 1186, 1195, 1200, 1207, 1212, 1215, 1222, 1225,
1251  1230, 1237, 1240, 1245, 1248, 1253, 1255, 1257, 1259, 1263,
1252  1265, 1270, 1272, 1277, 1279, 1283, 1285, 1287, 1288, 1289,
1253  1290, 1296, 1301, 1303, 1307, 1311, 1312, 1318, 1321, 1326,
1254  1332, 1338, 1341, 1342, 1348, 1349, 1355, 1359, 1360, 1365,
1255  1366, 1371, 1374, 1376, 1381, 1382, 1388, 1389, 1395, 1401,
1256  1403, 1405, 1412, 1414, 1416, 1418, 1420, 1423, 1425, 1428,
1257  1430, 1432, 1434, 1436, 1438, 1440, 1442, 1445, 1449, 1453,
1258  1457, 1461, 1465, 1466, 1470, 1472, 1475, 1479, 1483, 1484,
1259  1488, 1492, 1496, 1500, 1504, 1505, 1509, 1510, 1514, 1515,
1260  1518, 1519, 1522, 1523, 1526, 1528, 1529, 1533, 1534, 1535,
1261  1536, 1543, 1545, 1547, 1549, 1551, 1554, 1556, 1558, 1560,
1262  1562, 1566, 1568, 1571, 1573, 1575, 1577, 1579, 1581, 1583,
1263  1585, 1587, 1589, 1591, 1593, 1595, 1597, 1599, 1601, 1603,
1264  1605, 1607, 1609, 1611, 1613, 1615, 1617, 1618, 1623, 1626,
1265  1630, 1631, 1635, 1640, 1643, 1646, 1648, 1651, 1652, 1659,
1266  1668, 1673, 1680, 1685, 1692, 1695, 1700, 1707, 1710, 1715,
1267  1718, 1723, 1725, 1726, 1728, 1730, 1732, 1734, 1736, 1738,
1268  1740, 1744, 1746, 1750, 1752, 1755, 1757, 1760, 1762, 1764,
1269  1768, 1770, 1774, 1776, 1778, 1781, 1783, 1787, 1791, 1793,
1270  1797, 1799, 1803, 1805, 1807, 1810, 1812, 1814, 1816, 1819,
1271  1822, 1824, 1826, 1827, 1832, 1834, 1837, 1839, 1843, 1847,
1272  1850, 1853, 1855, 1857, 1859, 1861, 1863, 1865, 1867, 1869,
1273  1871, 1873, 1875, 1877, 1878, 1880, 1881, 1883, 1886, 1889,
1274  1890, 1892, 1894, 1896, 1898, 1900, 1903
1275 };
1276 
1277 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
1278 static const yytype_int16 yyrhs[] =
1279 {
1280  145, 0, -1, -1, 146, 147, -1, 148, 339, -1,
1281  346, -1, 149, -1, 148, 345, 149, -1, 1, 149,
1282  -1, 156, -1, -1, 47, 150, 132, 147, 133, -1,
1283  152, 265, 233, 268, -1, 153, 339, -1, 346, -1,
1284  154, -1, 153, 345, 154, -1, 1, 156, -1, 156,
1285  -1, -1, 47, 155, 132, 147, 133, -1, -1, 45,
1286  179, 157, 179, -1, 45, 54, 54, -1, 45, 54,
1287  66, -1, 45, 54, 65, -1, 6, 180, -1, 156,
1288  40, 160, -1, 156, 41, 160, -1, 156, 42, 160,
1289  -1, 156, 43, 160, -1, 156, 44, 156, -1, 48,
1290  132, 152, 133, -1, 158, -1, 167, 115, 161, -1,
1291  301, 89, 161, -1, 218, 134, 190, 342, 89, 161,
1292  -1, 218, 135, 52, 89, 161, -1, 218, 135, 56,
1293  89, 161, -1, 218, 87, 56, 89, 161, -1, 218,
1294  87, 52, 89, 161, -1, 302, 89, 161, -1, 174,
1295  115, 198, -1, 167, 115, 197, -1, 159, -1, 174,
1296  115, 161, -1, 174, 115, 158, -1, 161, -1, 159,
1297  37, 159, -1, 159, 38, 159, -1, 39, 340, 159,
1298  -1, 129, 161, -1, 184, -1, 159, -1, 166, -1,
1299  162, -1, 254, -1, 254, 338, 336, 192, -1, -1,
1300  96, 164, 241, 152, 133, -1, 335, -1, 165, 192,
1301  -1, 165, 192, 163, -1, 218, 135, 336, 192, -1,
1302  218, 135, 336, 192, 163, -1, 218, 87, 336, 192,
1303  -1, 218, 87, 336, 192, 163, -1, 32, 192, -1,
1304  31, 192, -1, 30, 191, -1, 21, 191, -1, 22,
1305  191, -1, 169, -1, 91, 168, 341, -1, 169, -1,
1306  91, 168, 341, -1, 171, -1, 171, 170, -1, 171,
1307  97, 173, -1, 171, 97, 173, 136, 172, -1, 171,
1308  97, -1, 171, 97, 136, 172, -1, 97, 173, -1,
1309  97, 173, 136, 172, -1, 97, -1, 97, 136, 172,
1310  -1, 173, -1, 91, 168, 341, -1, 170, 136, -1,
1311  171, 170, 136, -1, 170, -1, 172, 136, 170, -1,
1312  298, -1, 299, -1, 218, 134, 190, 342, -1, 218,
1313  135, 52, -1, 218, 87, 52, -1, 218, 135, 56,
1314  -1, 218, 87, 56, -1, 88, 56, -1, 302, -1,
1315  298, -1, 299, -1, 218, 134, 190, 342, -1, 218,
1316  135, 52, -1, 218, 87, 52, -1, 218, 135, 56,
1317  -1, 218, 87, 56, -1, 88, 56, -1, 302, -1,
1318  52, -1, 56, -1, 88, 175, -1, 175, -1, 218,
1319  87, 175, -1, 52, -1, 56, -1, 53, -1, 182,
1320  -1, 183, -1, 177, -1, 293, -1, 178, -1, 295,
1321  -1, 179, -1, -1, 180, 136, 181, 179, -1, 120,
1322  -1, 121, -1, 122, -1, 71, -1, 72, -1, 73,
1323  -1, 79, -1, 80, -1, 118, -1, 75, -1, 119,
1324  -1, 76, -1, 74, -1, 85, -1, 86, -1, 123,
1325  -1, 124, -1, 125, -1, 97, -1, 126, -1, 127,
1326  -1, 70, -1, 98, -1, 129, -1, 130, -1, 68,
1327  -1, 69, -1, 83, -1, 84, -1, 137, -1, 49,
1328  -1, 50, -1, 51, -1, 47, -1, 48, -1, 45,
1329  -1, 37, -1, 7, -1, 21, -1, 16, -1, 3,
1330  -1, 5, -1, 46, -1, 26, -1, 15, -1, 14,
1331  -1, 10, -1, 9, -1, 36, -1, 20, -1, 25,
1332  -1, 4, -1, 22, -1, 34, -1, 39, -1, 38,
1333  -1, 23, -1, 8, -1, 24, -1, 30, -1, 33,
1334  -1, 32, -1, 13, -1, 35, -1, 6, -1, 17,
1335  -1, 31, -1, 11, -1, 12, -1, 18, -1, 19,
1336  -1, 174, 115, 184, -1, 174, 115, 184, 44, 184,
1337  -1, 301, 89, 184, -1, 301, 89, 184, 44, 184,
1338  -1, 218, 134, 190, 342, 89, 184, -1, 218, 135,
1339  52, 89, 184, -1, 218, 135, 56, 89, 184, -1,
1340  218, 87, 52, 89, 184, -1, 218, 87, 56, 89,
1341  184, -1, 88, 56, 89, 184, -1, 302, 89, 184,
1342  -1, 184, 81, 184, -1, 184, 82, 184, -1, 184,
1343  123, 184, -1, 184, 124, 184, -1, 184, 125, 184,
1344  -1, 184, 126, 184, -1, 184, 127, 184, -1, 184,
1345  70, 184, -1, 128, 297, 70, 184, -1, 68, 184,
1346  -1, 69, 184, -1, 184, 120, 184, -1, 184, 121,
1347  184, -1, 184, 122, 184, -1, 184, 71, 184, -1,
1348  184, 118, 184, -1, 184, 75, 184, -1, 184, 119,
1349  184, -1, 184, 76, 184, -1, 184, 72, 184, -1,
1350  184, 73, 184, -1, 184, 74, 184, -1, 184, 79,
1351  184, -1, 184, 80, 184, -1, 129, 184, -1, 130,
1352  184, -1, 184, 85, 184, -1, 184, 86, 184, -1,
1353  184, 77, 184, -1, 184, 78, 184, -1, -1, 46,
1354  340, 185, 184, -1, 184, 116, 184, 340, 117, 184,
1355  -1, 199, -1, 184, -1, 346, -1, 196, 343, -1,
1356  196, 136, 333, 343, -1, 333, 343, -1, 138, 190,
1357  341, -1, 346, -1, 188, -1, 346, -1, 191, -1,
1358  196, 136, -1, 196, 136, 333, 136, -1, 333, 136,
1359  -1, 166, -1, 196, 195, -1, 333, 195, -1, 196,
1360  136, 333, 195, -1, 194, -1, -1, 193, 191, -1,
1361  99, 186, -1, 136, 194, -1, 346, -1, 186, -1,
1362  97, 186, -1, 196, 136, 186, -1, 196, 136, 97,
1363  186, -1, 198, -1, 186, -1, 196, 136, 186, -1,
1364  196, 136, 97, 186, -1, 97, 186, -1, 269, -1,
1365  270, -1, 273, -1, 274, -1, 275, -1, 280, -1,
1366  278, -1, 281, -1, 300, -1, 302, -1, 53, -1,
1367  -1, 219, 200, 151, 229, -1, -1, 92, 201, 341,
1368  -1, -1, -1, 92, 202, 159, 203, 341, -1, 91,
1369  152, 139, -1, 218, 87, 56, -1, 88, 56, -1,
1370  94, 187, 140, -1, 95, 332, 133, -1, 30, -1,
1371  31, 138, 191, 341, -1, 31, 138, 341, -1, 31,
1372  -1, -1, 46, 340, 138, 204, 159, 341, -1, 39,
1373  138, 159, 341, -1, 39, 138, 341, -1, 165, 260,
1374  -1, 255, -1, 255, 260, -1, 100, 246, -1, 220,
1375  160, 230, 152, 232, 229, -1, 221, 160, 230, 152,
1376  233, 229, -1, -1, -1, 222, 205, 160, 231, 206,
1377  152, 229, -1, -1, -1, 223, 207, 160, 231, 208,
1378  152, 229, -1, 224, 160, 339, 263, 229, -1, 224,
1379  339, 263, 229, -1, -1, -1, 225, 234, 25, 209,
1380  160, 231, 210, 152, 229, -1, -1, 226, 176, 303,
1381  211, 151, 229, -1, -1, -1, 226, 85, 159, 212,
1382  344, 213, 151, 229, -1, -1, 227, 176, 214, 151,
1383  229, -1, -1, 228, 177, 215, 305, 151, 229, -1,
1384  -1, -1, 228, 330, 338, 216, 177, 217, 305, 151,
1385  229, -1, 21, -1, 22, -1, 23, -1, 24, -1,
1386  199, -1, 7, -1, 11, -1, 12, -1, 18, -1,
1387  19, -1, 16, -1, 20, -1, 3, -1, 4, -1,
1388  5, -1, 10, -1, 344, -1, 13, -1, 344, 13,
1389  -1, 344, -1, 27, -1, 233, -1, 14, 160, 230,
1390  152, 232, -1, 346, -1, 15, 152, -1, 174, -1,
1391  167, -1, 311, -1, 91, 237, 341, -1, 235, -1,
1392  236, 136, 235, -1, 236, -1, 236, 136, 97, 311,
1393  -1, 236, 136, 97, 311, 136, 236, -1, 236, 136,
1394  97, -1, 236, 136, 97, 136, 236, -1, 97, 311,
1395  -1, 97, 311, 136, 236, -1, 97, -1, 97, 136,
1396  236, -1, 317, 136, 320, 329, -1, 317, 329, -1,
1397  320, 329, -1, 328, -1, 136, 238, -1, -1, 313,
1398  136, 323, 136, 326, 239, -1, 313, 136, 323, 136,
1399  326, 136, 313, 239, -1, 313, 136, 323, 239, -1,
1400  313, 136, 323, 136, 313, 239, -1, 313, 136, 326,
1401  239, -1, 313, 136, -1, 313, 136, 326, 136, 313,
1402  239, -1, 313, 239, -1, 323, 136, 326, 239, -1,
1403  323, 136, 326, 136, 313, 239, -1, 323, 239, -1,
1404  323, 136, 313, 239, -1, 326, 239, -1, 326, 136,
1405  313, 239, -1, 238, -1, 346, -1, 242, -1, 120,
1406  243, 120, -1, 78, -1, 120, 240, 243, 120, -1,
1407  340, -1, 340, 141, 244, 340, -1, 245, -1, 244,
1408  136, 245, -1, 52, -1, 310, -1, -1, -1, -1,
1409  247, 248, 250, 249, 251, -1, 138, 309, 243, 139,
1410  -1, 309, -1, 113, 152, 133, -1, 29, 152, 10,
1411  -1, -1, 28, 253, 241, 152, 10, -1, 166, 252,
1412  -1, 254, 338, 336, 189, -1, 254, 338, 336, 189,
1413  260, -1, 254, 338, 336, 192, 252, -1, 165, 188,
1414  -1, -1, 218, 135, 336, 256, 189, -1, -1, 218,
1415  87, 336, 257, 188, -1, 218, 87, 337, -1, -1,
1416  218, 135, 258, 188, -1, -1, 218, 87, 259, 188,
1417  -1, 32, 188, -1, 32, -1, 218, 134, 190, 342,
1418  -1, -1, 132, 261, 241, 152, 133, -1, -1, 26,
1419  262, 241, 152, 10, -1, 17, 196, 230, 152, 264,
1420  -1, 233, -1, 263, -1, 8, 266, 267, 230, 152,
1421  265, -1, 346, -1, 186, -1, 198, -1, 346, -1,
1422  90, 174, -1, 346, -1, 9, 152, -1, 346, -1,
1423  296, -1, 293, -1, 295, -1, 271, -1, 64, -1,
1424  272, -1, 271, 272, -1, 102, 284, 112, -1, 103,
1425  285, 112, -1, 104, 286, 67, -1, 105, 142, 112,
1426  -1, 105, 276, 112, -1, -1, 276, 277, 142, -1,
1427  287, -1, 277, 287, -1, 107, 142, 112, -1, 107,
1428  279, 112, -1, -1, 279, 277, 142, -1, 106, 142,
1429  112, -1, 106, 282, 112, -1, 108, 142, 112, -1,
1430  108, 283, 112, -1, -1, 282, 63, 142, -1, -1,
1431  283, 63, 142, -1, -1, 284, 287, -1, -1, 285,
1432  287, -1, -1, 286, 287, -1, 63, -1, -1, 111,
1433  288, 292, -1, -1, -1, -1, 109, 289, 290, 291,
1434  152, 110, -1, 54, -1, 55, -1, 57, -1, 302,
1435  -1, 101, 294, -1, 177, -1, 55, -1, 54, -1,
1436  57, -1, 101, 285, 112, -1, 297, -1, 128, 297,
1437  -1, 59, -1, 60, -1, 61, -1, 62, -1, 52,
1438  -1, 55, -1, 54, -1, 56, -1, 57, -1, 34,
1439  -1, 33, -1, 35, -1, 36, -1, 50, -1, 49,
1440  -1, 51, -1, 298, -1, 299, -1, 298, -1, 299,
1441  -1, 65, -1, 66, -1, 344, -1, -1, 119, 304,
1442  160, 344, -1, 1, 344, -1, 138, 309, 341, -1,
1443  -1, 306, 309, 344, -1, 318, 136, 320, 329, -1,
1444  318, 329, -1, 320, 329, -1, 328, -1, 136, 307,
1445  -1, -1, 313, 136, 324, 136, 326, 308, -1, 313,
1446  136, 324, 136, 326, 136, 313, 308, -1, 313, 136,
1447  324, 308, -1, 313, 136, 324, 136, 313, 308, -1,
1448  313, 136, 326, 308, -1, 313, 136, 326, 136, 313,
1449  308, -1, 313, 308, -1, 324, 136, 326, 308, -1,
1450  324, 136, 326, 136, 313, 308, -1, 324, 308, -1,
1451  324, 136, 313, 308, -1, 326, 308, -1, 326, 136,
1452  313, 308, -1, 307, -1, -1, 56, -1, 55, -1,
1453  54, -1, 57, -1, 310, -1, 52, -1, 311, -1,
1454  91, 237, 341, -1, 312, -1, 313, 136, 312, -1,
1455  58, -1, 314, 186, -1, 314, -1, 314, 218, -1,
1456  314, -1, 316, -1, 317, 136, 316, -1, 315, -1,
1457  318, 136, 315, -1, 70, -1, 98, -1, 319, 52,
1458  -1, 319, -1, 311, 115, 186, -1, 311, 115, 218,
1459  -1, 322, -1, 323, 136, 322, -1, 321, -1, 324,
1460  136, 321, -1, 125, -1, 97, -1, 325, 52, -1,
1461  325, -1, 122, -1, 99, -1, 327, 52, -1, 136,
1462  328, -1, 346, -1, 300, -1, -1, 138, 331, 159,
1463  341, -1, 346, -1, 333, 343, -1, 334, -1, 333,
1464  136, 334, -1, 186, 90, 186, -1, 58, 186, -1,
1465  98, 186, -1, 52, -1, 56, -1, 53, -1, 52,
1466  -1, 56, -1, 53, -1, 182, -1, 52, -1, 53,
1467  -1, 182, -1, 135, -1, 87, -1, -1, 345, -1,
1468  -1, 143, -1, 340, 139, -1, 340, 140, -1, -1,
1469  143, -1, 136, -1, 141, -1, 143, -1, 344, -1,
1470  345, 141, -1, -1
1471 };
1472 
1473 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
1474 static const yytype_uint16 yyrline[] =
1475 {
1476  0, 863, 863, 863, 894, 905, 914, 922, 930, 936,
1477  938, 937, 958, 991, 1002, 1011, 1019, 1027, 1033, 1038,
1478  1037, 1058, 1058, 1066, 1074, 1085, 1095, 1103, 1112, 1121,
1479  1134, 1147, 1156, 1168, 1169, 1179, 1184, 1205, 1210, 1215,
1480  1225, 1230, 1240, 1249, 1258, 1261, 1270, 1282, 1283, 1291,
1481  1299, 1307, 1315, 1318, 1330, 1331, 1334, 1335, 1347, 1346,
1482  1368, 1378, 1387, 1400, 1409, 1421, 1430, 1442, 1451, 1460,
1483  1468, 1476, 1486, 1487, 1497, 1498, 1508, 1516, 1524, 1532,
1484  1541, 1549, 1558, 1566, 1575, 1583, 1594, 1595, 1605, 1613,
1485  1623, 1631, 1641, 1645, 1649, 1657, 1665, 1673, 1681, 1693,
1486  1703, 1715, 1724, 1733, 1741, 1749, 1757, 1765, 1778, 1791,
1487  1802, 1810, 1813, 1821, 1829, 1839, 1840, 1841, 1842, 1847,
1488  1858, 1859, 1862, 1870, 1873, 1881, 1881, 1891, 1892, 1893,
1489  1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903,
1490  1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913,
1491  1914, 1915, 1916, 1917, 1918, 1919, 1920, 1923, 1923, 1923,
1492  1924, 1924, 1925, 1925, 1925, 1926, 1926, 1926, 1926, 1927,
1493  1927, 1927, 1927, 1928, 1928, 1928, 1929, 1929, 1929, 1929,
1494  1930, 1930, 1930, 1930, 1931, 1931, 1931, 1931, 1932, 1932,
1495  1932, 1932, 1933, 1933, 1933, 1933, 1934, 1934, 1937, 1946,
1496  1956, 1961, 1971, 1997, 2002, 2007, 2012, 2022, 2032, 2043,
1497  2057, 2071, 2079, 2087, 2095, 2103, 2111, 2119, 2128, 2136,
1498  2144, 2152, 2160, 2168, 2176, 2184, 2192, 2200, 2208, 2216,
1499  2224, 2232, 2243, 2251, 2259, 2267, 2275, 2283, 2291, 2299,
1500  2299, 2309, 2319, 2325, 2337, 2338, 2342, 2350, 2360, 2370,
1501  2371, 2374, 2375, 2376, 2380, 2388, 2398, 2407, 2415, 2425,
1502  2434, 2443, 2443, 2455, 2465, 2469, 2475, 2483, 2491, 2505,
1503  2521, 2522, 2525, 2539, 2554, 2564, 2565, 2566, 2567, 2568,
1504  2569, 2570, 2571, 2572, 2573, 2574, 2583, 2582, 2610, 2610,
1505  2619, 2623, 2618, 2632, 2640, 2648, 2656, 2669, 2677, 2685,
1506  2693, 2701, 2709, 2709, 2719, 2727, 2735, 2745, 2746, 2756,
1507  2760, 2772, 2784, 2784, 2784, 2795, 2795, 2795, 2806, 2817,
1508  2826, 2828, 2825, 2892, 2891, 2913, 2918, 2912, 2937, 2936,
1509  2958, 2957, 2980, 2981, 2980, 3001, 3009, 3017, 3025, 3035,
1510  3047, 3053, 3059, 3065, 3071, 3077, 3083, 3089, 3095, 3101,
1511  3111, 3117, 3122, 3123, 3130, 3135, 3138, 3139, 3152, 3153,
1512  3163, 3164, 3167, 3175, 3185, 3193, 3203, 3211, 3220, 3229,
1513  3237, 3245, 3254, 3266, 3274, 3285, 3289, 3293, 3297, 3303,
1514  3308, 3313, 3317, 3321, 3325, 3329, 3333, 3341, 3345, 3349,
1515  3353, 3357, 3361, 3365, 3369, 3373, 3379, 3380, 3386, 3395,
1516  3404, 3415, 3419, 3429, 3436, 3445, 3453, 3459, 3462, 3467,
1517  3459, 3483, 3491, 3497, 3501, 3508, 3507, 3528, 3544, 3553,
1518  3565, 3579, 3589, 3588, 3605, 3604, 3620, 3629, 3628, 3646,
1519  3645, 3662, 3670, 3678, 3693, 3692, 3712, 3711, 3732, 3744,
1520  3745, 3748, 3767, 3770, 3778, 3786, 3789, 3793, 3796, 3804,
1521  3807, 3808, 3816, 3819, 3836, 3837, 3838, 3848, 3858, 3885,
1522  3950, 3959, 3970, 3977, 3987, 3995, 4005, 4014, 4025, 4032,
1523  4044, 4053, 4063, 4072, 4083, 4090, 4101, 4108, 4123, 4130,
1524  4141, 4148, 4159, 4166, 4195, 4197, 4196, 4213, 4219, 4224,
1525  4212, 4243, 4251, 4259, 4267, 4270, 4281, 4282, 4283, 4284,
1526  4287, 4298, 4299, 4309, 4310, 4311, 4312, 4315, 4316, 4317,
1527  4318, 4319, 4322, 4323, 4324, 4325, 4326, 4327, 4328, 4331,
1528  4344, 4354, 4362, 4372, 4373, 4376, 4385, 4384, 4393, 4405,
1529  4415, 4415, 4428, 4432, 4436, 4440, 4446, 4451, 4456, 4460,
1530  4464, 4468, 4472, 4476, 4480, 4484, 4488, 4492, 4496, 4500,
1531  4504, 4508, 4513, 4519, 4528, 4537, 4546, 4557, 4558, 4565,
1532  4574, 4593, 4600, 4614, 4621, 4630, 4641, 4650, 4661, 4669,
1533  4686, 4694, 4710, 4711, 4714, 4719, 4725, 4737, 4749, 4757,
1534  4773, 4781, 4797, 4798, 4801, 4814, 4825, 4826, 4829, 4846,
1535  4850, 4860, 4870, 4870, 4899, 4900, 4910, 4917, 4927, 4939,
1536  4947, 4959, 4960, 4961, 4964, 4965, 4966, 4967, 4970, 4971,
1537  4972, 4975, 4980, 4987, 4988, 4991, 4992, 4995, 4998, 5001,
1538  5002, 5003, 5006, 5007, 5010, 5011, 5015
1539 };
1540 #endif
1541 
1542 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1543 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1544  First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1545 static const char *const yytname[] =
1546 {
1547  "\"end-of-input\"", "error", "$undefined", "keyword_class",
1548  "keyword_module", "keyword_def", "keyword_undef", "keyword_begin",
1549  "keyword_rescue", "keyword_ensure", "keyword_end", "keyword_if",
1550  "keyword_unless", "keyword_then", "keyword_elsif", "keyword_else",
1551  "keyword_case", "keyword_when", "keyword_while", "keyword_until",
1552  "keyword_for", "keyword_break", "keyword_next", "keyword_redo",
1553  "keyword_retry", "keyword_in", "keyword_do", "keyword_do_cond",
1554  "keyword_do_block", "keyword_do_LAMBDA", "keyword_return",
1555  "keyword_yield", "keyword_super", "keyword_self", "keyword_nil",
1556  "keyword_true", "keyword_false", "keyword_and", "keyword_or",
1557  "keyword_not", "modifier_if", "modifier_unless", "modifier_while",
1558  "modifier_until", "modifier_rescue", "keyword_alias", "keyword_defined",
1559  "keyword_BEGIN", "keyword_END", "keyword__LINE__", "keyword__FILE__",
1560  "keyword__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR",
1561  "tCONSTANT", "tCVAR", "tLABEL", "tINTEGER", "tFLOAT", "tRATIONAL",
1562  "tIMAGINARY", "tSTRING_CONTENT", "tCHAR", "tNTH_REF", "tBACK_REF",
1563  "tREGEXP_END", "\"unary+\"", "\"unary-\"", "\"**\"", "\"<=>\"", "\"==\"",
1564  "\"===\"", "\"!=\"", "\">=\"", "\"<=\"", "\"&&\"", "\"||\"", "\"=~\"",
1565  "\"!~\"", "\"..\"", "\"...\"", "\"[]\"", "\"[]=\"", "\"<<\"", "\">>\"",
1566  "\"::\"", "\":: at EXPR_BEG\"", "tOP_ASGN", "\"=>\"", "\"(\"",
1567  "\"( arg\"", "\")\"", "\"[\"", "\"{\"", "\"{ arg\"", "\"*\"",
1568  "\"**arg\"", "\"&\"", "\"->\"", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG",
1569  "tREGEXP_BEG", "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG",
1570  "tQSYMBOLS_BEG", "tSTRING_DBEG", "tSTRING_DEND", "tSTRING_DVAR",
1571  "tSTRING_END", "tLAMBEG", "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'",
1572  "'|'", "'^'", "'&'", "'+'", "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM",
1573  "'!'", "'~'", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'", "','", "'`'",
1574  "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program", "$@1",
1575  "top_compstmt", "top_stmts", "top_stmt", "$@2", "bodystmt", "compstmt",
1576  "stmts", "stmt_or_begin", "$@3", "stmt", "$@4", "command_asgn", "expr",
1577  "expr_value", "command_call", "block_command", "cmd_brace_block", "@5",
1578  "fcall", "command", "mlhs", "mlhs_inner", "mlhs_basic", "mlhs_item",
1579  "mlhs_head", "mlhs_post", "mlhs_node", "lhs", "cname", "cpath", "fname",
1580  "fsym", "fitem", "undef_list", "$@6", "op", "reswords", "arg", "$@7",
1581  "arg_value", "aref_args", "paren_args", "opt_paren_args",
1582  "opt_call_args", "call_args", "command_args", "@8", "block_arg",
1583  "opt_block_arg", "args", "mrhs_arg", "mrhs", "primary", "@9", "$@10",
1584  "$@11", "$@12", "$@13", "$@14", "$@15", "$@16", "$@17", "$@18", "$@19",
1585  "@20", "@21", "@22", "@23", "@24", "$@25", "$@26", "primary_value",
1586  "k_begin", "k_if", "k_unless", "k_while", "k_until", "k_case", "k_for",
1587  "k_class", "k_module", "k_def", "k_end", "then", "do", "if_tail",
1588  "opt_else", "for_var", "f_marg", "f_marg_list", "f_margs",
1589  "block_args_tail", "opt_block_args_tail", "block_param",
1590  "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", "bvar",
1591  "lambda", "@27", "@28", "@29", "f_larglist", "lambda_body", "do_block",
1592  "@30", "block_call", "method_call", "@31", "@32", "@33", "@34",
1593  "brace_block", "@35", "@36", "case_body", "cases", "opt_rescue",
1594  "exc_list", "exc_var", "opt_ensure", "literal", "strings", "string",
1595  "string1", "xstring", "regexp", "words", "word_list", "word", "symbols",
1596  "symbol_list", "qwords", "qsymbols", "qword_list", "qsym_list",
1597  "string_contents", "xstring_contents", "regexp_contents",
1598  "string_content", "@37", "@38", "@39", "@40", "string_dvar", "symbol",
1599  "sym", "dsym", "numeric", "simple_numeric", "user_variable",
1600  "keyword_variable", "var_ref", "var_lhs", "backref", "superclass",
1601  "$@41", "f_arglist", "@42", "args_tail", "opt_args_tail", "f_args",
1602  "f_bad_arg", "f_norm_arg", "f_arg_item", "f_arg", "f_label", "f_kw",
1603  "f_block_kw", "f_block_kwarg", "f_kwarg", "kwrest_mark", "f_kwrest",
1604  "f_opt", "f_block_opt", "f_block_optarg", "f_optarg", "restarg_mark",
1605  "f_rest_arg", "blkarg_mark", "f_block_arg", "opt_f_block_arg",
1606  "singleton", "$@43", "assoc_list", "assocs", "assoc", "operation",
1607  "operation2", "operation3", "dot_or_colon", "opt_terms", "opt_nl",
1608  "rparen", "rbracket", "trailer", "term", "terms", "none", 0
1609 };
1610 #endif
1611 
1612 # ifdef YYPRINT
1613 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1614  token YYLEX-NUM. */
1615 static const yytype_uint16 yytoknum[] =
1616 {
1617  0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1618  265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1619  275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1620  285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1621  295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1622  305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1623  315, 316, 317, 318, 319, 320, 321, 322, 130, 131,
1624  132, 134, 139, 140, 141, 138, 137, 323, 324, 142,
1625  143, 128, 129, 144, 145, 135, 136, 325, 326, 327,
1626  328, 329, 330, 331, 332, 333, 334, 335, 336, 337,
1627  338, 339, 340, 341, 342, 343, 344, 345, 346, 347,
1628  348, 349, 350, 351, 352, 61, 63, 58, 62, 60,
1629  124, 94, 38, 43, 45, 42, 47, 37, 353, 33,
1630  126, 354, 123, 125, 91, 46, 44, 96, 40, 41,
1631  93, 59, 32, 10
1632 };
1633 # endif
1634 
1635 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1636 static const yytype_uint16 yyr1[] =
1637 {
1638  0, 144, 146, 145, 147, 148, 148, 148, 148, 149,
1639  150, 149, 151, 152, 153, 153, 153, 153, 154, 155,
1640  154, 157, 156, 156, 156, 156, 156, 156, 156, 156,
1641  156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1642  156, 156, 156, 156, 156, 158, 158, 159, 159, 159,
1643  159, 159, 159, 160, 161, 161, 162, 162, 164, 163,
1644  165, 166, 166, 166, 166, 166, 166, 166, 166, 166,
1645  166, 166, 167, 167, 168, 168, 169, 169, 169, 169,
1646  169, 169, 169, 169, 169, 169, 170, 170, 171, 171,
1647  172, 172, 173, 173, 173, 173, 173, 173, 173, 173,
1648  173, 174, 174, 174, 174, 174, 174, 174, 174, 174,
1649  175, 175, 176, 176, 176, 177, 177, 177, 177, 177,
1650  178, 178, 179, 179, 180, 181, 180, 182, 182, 182,
1651  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
1652  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
1653  182, 182, 182, 182, 182, 182, 182, 183, 183, 183,
1654  183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
1655  183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
1656  183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
1657  183, 183, 183, 183, 183, 183, 183, 183, 184, 184,
1658  184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
1659  184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
1660  184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
1661  184, 184, 184, 184, 184, 184, 184, 184, 184, 185,
1662  184, 184, 184, 186, 187, 187, 187, 187, 188, 189,
1663  189, 190, 190, 190, 190, 190, 191, 191, 191, 191,
1664  191, 193, 192, 194, 195, 195, 196, 196, 196, 196,
1665  197, 197, 198, 198, 198, 199, 199, 199, 199, 199,
1666  199, 199, 199, 199, 199, 199, 200, 199, 201, 199,
1667  202, 203, 199, 199, 199, 199, 199, 199, 199, 199,
1668  199, 199, 204, 199, 199, 199, 199, 199, 199, 199,
1669  199, 199, 205, 206, 199, 207, 208, 199, 199, 199,
1670  209, 210, 199, 211, 199, 212, 213, 199, 214, 199,
1671  215, 199, 216, 217, 199, 199, 199, 199, 199, 218,
1672  219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
1673  229, 230, 230, 230, 231, 231, 232, 232, 233, 233,
1674  234, 234, 235, 235, 236, 236, 237, 237, 237, 237,
1675  237, 237, 237, 237, 237, 238, 238, 238, 238, 239,
1676  239, 240, 240, 240, 240, 240, 240, 240, 240, 240,
1677  240, 240, 240, 240, 240, 240, 241, 241, 242, 242,
1678  242, 243, 243, 244, 244, 245, 245, 247, 248, 249,
1679  246, 250, 250, 251, 251, 253, 252, 254, 254, 254,
1680  254, 255, 256, 255, 257, 255, 255, 258, 255, 259,
1681  255, 255, 255, 255, 261, 260, 262, 260, 263, 264,
1682  264, 265, 265, 266, 266, 266, 267, 267, 268, 268,
1683  269, 269, 269, 270, 271, 271, 271, 272, 273, 274,
1684  275, 275, 276, 276, 277, 277, 278, 278, 279, 279,
1685  280, 280, 281, 281, 282, 282, 283, 283, 284, 284,
1686  285, 285, 286, 286, 287, 288, 287, 289, 290, 291,
1687  287, 292, 292, 292, 292, 293, 294, 294, 294, 294,
1688  295, 296, 296, 297, 297, 297, 297, 298, 298, 298,
1689  298, 298, 299, 299, 299, 299, 299, 299, 299, 300,
1690  300, 301, 301, 302, 302, 303, 304, 303, 303, 305,
1691  306, 305, 307, 307, 307, 307, 308, 308, 309, 309,
1692  309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1693  309, 309, 309, 310, 310, 310, 310, 311, 311, 312,
1694  312, 313, 313, 314, 315, 315, 316, 316, 317, 317,
1695  318, 318, 319, 319, 320, 320, 321, 322, 323, 323,
1696  324, 324, 325, 325, 326, 326, 327, 327, 328, 329,
1697  329, 330, 331, 330, 332, 332, 333, 333, 334, 334,
1698  334, 335, 335, 335, 336, 336, 336, 336, 337, 337,
1699  337, 338, 338, 339, 339, 340, 340, 341, 342, 343,
1700  343, 343, 344, 344, 345, 345, 346
1701 };
1702 
1703 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
1704 static const yytype_uint8 yyr2[] =
1705 {
1706  0, 2, 0, 2, 2, 1, 1, 3, 2, 1,
1707  0, 5, 4, 2, 1, 1, 3, 2, 1, 0,
1708  5, 0, 4, 3, 3, 3, 2, 3, 3, 3,
1709  3, 3, 4, 1, 3, 3, 6, 5, 5, 5,
1710  5, 3, 3, 3, 1, 3, 3, 1, 3, 3,
1711  3, 2, 1, 1, 1, 1, 1, 4, 0, 5,
1712  1, 2, 3, 4, 5, 4, 5, 2, 2, 2,
1713  2, 2, 1, 3, 1, 3, 1, 2, 3, 5,
1714  2, 4, 2, 4, 1, 3, 1, 3, 2, 3,
1715  1, 3, 1, 1, 4, 3, 3, 3, 3, 2,
1716  1, 1, 1, 4, 3, 3, 3, 3, 2, 1,
1717  1, 1, 2, 1, 3, 1, 1, 1, 1, 1,
1718  1, 1, 1, 1, 1, 0, 4, 1, 1, 1,
1719  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1720  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1721  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1722  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1723  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1724  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1725  1, 1, 1, 1, 1, 1, 1, 1, 3, 5,
1726  3, 5, 6, 5, 5, 5, 5, 4, 3, 3,
1727  3, 3, 3, 3, 3, 3, 3, 4, 2, 2,
1728  3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
1729  3, 3, 3, 2, 2, 3, 3, 3, 3, 0,
1730  4, 6, 1, 1, 1, 2, 4, 2, 3, 1,
1731  1, 1, 1, 2, 4, 2, 1, 2, 2, 4,
1732  1, 0, 2, 2, 2, 1, 1, 2, 3, 4,
1733  1, 1, 3, 4, 2, 1, 1, 1, 1, 1,
1734  1, 1, 1, 1, 1, 1, 0, 4, 0, 3,
1735  0, 0, 5, 3, 3, 2, 3, 3, 1, 4,
1736  3, 1, 0, 6, 4, 3, 2, 1, 2, 2,
1737  6, 6, 0, 0, 7, 0, 0, 7, 5, 4,
1738  0, 0, 9, 0, 6, 0, 0, 8, 0, 5,
1739  0, 6, 0, 0, 9, 1, 1, 1, 1, 1,
1740  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1741  1, 1, 1, 2, 1, 1, 1, 5, 1, 2,
1742  1, 1, 1, 3, 1, 3, 1, 4, 6, 3,
1743  5, 2, 4, 1, 3, 4, 2, 2, 1, 2,
1744  0, 6, 8, 4, 6, 4, 2, 6, 2, 4,
1745  6, 2, 4, 2, 4, 1, 1, 1, 3, 1,
1746  4, 1, 4, 1, 3, 1, 1, 0, 0, 0,
1747  5, 4, 1, 3, 3, 0, 5, 2, 4, 5,
1748  5, 2, 0, 5, 0, 5, 3, 0, 4, 0,
1749  4, 2, 1, 4, 0, 5, 0, 5, 5, 1,
1750  1, 6, 1, 1, 1, 1, 2, 1, 2, 1,
1751  1, 1, 1, 1, 1, 1, 2, 3, 3, 3,
1752  3, 3, 0, 3, 1, 2, 3, 3, 0, 3,
1753  3, 3, 3, 3, 0, 3, 0, 3, 0, 2,
1754  0, 2, 0, 2, 1, 0, 3, 0, 0, 0,
1755  6, 1, 1, 1, 1, 2, 1, 1, 1, 1,
1756  3, 1, 2, 1, 1, 1, 1, 1, 1, 1,
1757  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1758  1, 1, 1, 1, 1, 1, 0, 4, 2, 3,
1759  0, 3, 4, 2, 2, 1, 2, 0, 6, 8,
1760  4, 6, 4, 6, 2, 4, 6, 2, 4, 2,
1761  4, 1, 0, 1, 1, 1, 1, 1, 1, 1,
1762  3, 1, 3, 1, 2, 1, 2, 1, 1, 3,
1763  1, 3, 1, 1, 2, 1, 3, 3, 1, 3,
1764  1, 3, 1, 1, 2, 1, 1, 1, 2, 2,
1765  1, 1, 0, 4, 1, 2, 1, 3, 3, 2,
1766  2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1767  1, 1, 1, 0, 1, 0, 1, 2, 2, 0,
1768  1, 1, 1, 1, 1, 2, 0
1769 };
1770 
1771 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
1772  Performed when YYTABLE doesn't specify something else to do. Zero
1773  means the default is an error. */
1774 static const yytype_uint16 yydefact[] =
1775 {
1776  2, 0, 0, 1, 0, 347, 348, 349, 0, 340,
1777  341, 342, 345, 343, 344, 346, 335, 336, 337, 338,
1778  298, 261, 261, 513, 512, 514, 515, 615, 0, 615,
1779  10, 0, 517, 516, 518, 601, 603, 509, 508, 602,
1780  511, 503, 504, 505, 506, 454, 523, 524, 0, 0,
1781  0, 0, 290, 626, 626, 84, 407, 480, 478, 480,
1782  482, 462, 474, 468, 476, 0, 0, 0, 3, 613,
1783  6, 9, 33, 44, 47, 55, 261, 54, 0, 72,
1784  0, 76, 86, 0, 52, 242, 0, 286, 0, 0,
1785  312, 315, 613, 0, 0, 0, 0, 56, 307, 275,
1786  276, 453, 455, 277, 278, 279, 281, 280, 282, 451,
1787  452, 450, 501, 519, 520, 283, 0, 284, 60, 5,
1788  8, 167, 178, 168, 191, 164, 184, 174, 173, 194,
1789  195, 189, 172, 171, 166, 192, 196, 197, 176, 165,
1790  179, 183, 185, 177, 170, 186, 193, 188, 187, 180,
1791  190, 175, 163, 182, 181, 162, 169, 160, 161, 157,
1792  158, 159, 115, 117, 116, 152, 153, 148, 130, 131,
1793  132, 139, 136, 138, 133, 134, 154, 155, 140, 141,
1794  145, 149, 135, 137, 127, 128, 129, 142, 143, 144,
1795  146, 147, 150, 151, 156, 120, 122, 124, 26, 118,
1796  119, 121, 123, 0, 0, 0, 0, 0, 0, 0,
1797  0, 256, 0, 243, 266, 70, 260, 626, 0, 519,
1798  520, 0, 284, 626, 596, 71, 69, 615, 68, 0,
1799  626, 431, 67, 615, 616, 0, 0, 21, 239, 0,
1800  0, 335, 336, 298, 301, 432, 0, 218, 0, 219,
1801  295, 0, 19, 0, 0, 613, 15, 18, 615, 74,
1802  14, 615, 0, 0, 619, 619, 244, 0, 0, 619,
1803  594, 615, 0, 0, 0, 82, 339, 0, 92, 93,
1804  100, 309, 408, 498, 497, 499, 496, 0, 495, 0,
1805  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1806  502, 51, 233, 234, 622, 623, 4, 624, 614, 0,
1807  0, 0, 0, 0, 0, 0, 436, 434, 421, 61,
1808  306, 415, 417, 0, 88, 0, 80, 77, 0, 0,
1809  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1810  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1811  0, 0, 0, 0, 0, 429, 626, 427, 0, 53,
1812  0, 0, 0, 0, 613, 0, 614, 0, 361, 360,
1813  0, 0, 519, 520, 284, 110, 111, 0, 0, 113,
1814  0, 0, 519, 520, 284, 328, 187, 180, 190, 175,
1815  157, 158, 159, 115, 116, 592, 330, 591, 0, 612,
1816  611, 0, 308, 456, 0, 0, 125, 599, 295, 267,
1817  600, 263, 0, 0, 0, 257, 265, 429, 626, 427,
1818  0, 0, 0, 258, 615, 0, 300, 262, 615, 252,
1819  626, 626, 251, 615, 305, 50, 23, 25, 24, 0,
1820  302, 0, 0, 0, 429, 427, 0, 17, 0, 615,
1821  293, 13, 614, 73, 289, 291, 296, 621, 620, 245,
1822  621, 247, 297, 595, 0, 99, 502, 90, 85, 0,
1823  429, 626, 427, 552, 484, 487, 485, 500, 481, 457,
1824  479, 458, 459, 483, 460, 461, 0, 464, 470, 0,
1825  471, 466, 467, 0, 472, 0, 473, 0, 625, 7,
1826  27, 28, 29, 30, 31, 48, 49, 626, 626, 58,
1827  62, 626, 0, 34, 271, 0, 43, 270, 615, 0,
1828  78, 89, 46, 45, 0, 198, 266, 42, 216, 223,
1829  228, 229, 230, 225, 227, 237, 238, 231, 232, 209,
1830  210, 235, 236, 615, 224, 226, 220, 221, 222, 211,
1831  212, 213, 214, 215, 604, 606, 605, 607, 0, 261,
1832  426, 615, 604, 606, 605, 607, 0, 261, 0, 626,
1833  352, 0, 351, 0, 0, 0, 0, 0, 0, 295,
1834  429, 626, 427, 320, 325, 110, 111, 112, 0, 526,
1835  323, 525, 429, 626, 427, 0, 0, 530, 332, 604,
1836  605, 261, 35, 200, 41, 208, 0, 198, 598, 0,
1837  268, 264, 626, 604, 605, 615, 604, 605, 597, 299,
1838  617, 248, 253, 255, 304, 22, 0, 240, 0, 32,
1839  424, 422, 207, 0, 75, 16, 615, 619, 0, 83,
1840  96, 98, 615, 604, 605, 558, 555, 554, 553, 556,
1841  563, 572, 0, 583, 573, 587, 586, 582, 552, 409,
1842  551, 412, 557, 559, 561, 537, 565, 570, 626, 575,
1843  626, 580, 537, 585, 537, 0, 535, 488, 0, 463,
1844  465, 475, 469, 477, 217, 399, 615, 0, 397, 396,
1845  0, 626, 0, 274, 0, 87, 81, 0, 0, 0,
1846  0, 0, 0, 430, 65, 0, 0, 433, 0, 0,
1847  428, 63, 626, 350, 287, 626, 626, 442, 626, 353,
1848  626, 355, 313, 354, 316, 0, 0, 319, 608, 294,
1849  615, 604, 605, 0, 0, 528, 0, 0, 110, 111,
1850  114, 615, 0, 615, 552, 0, 552, 0, 250, 418,
1851  57, 249, 0, 126, 269, 259, 0, 0, 433, 0,
1852  0, 626, 615, 11, 0, 292, 246, 91, 94, 0,
1853  373, 364, 366, 615, 362, 615, 0, 0, 0, 544,
1854  564, 0, 533, 590, 574, 0, 534, 0, 547, 584,
1855  0, 549, 588, 489, 491, 492, 493, 486, 494, 395,
1856  615, 0, 559, 380, 567, 568, 626, 626, 578, 380,
1857  380, 378, 401, 0, 0, 0, 0, 0, 272, 79,
1858  199, 0, 40, 205, 39, 206, 66, 425, 618, 0,
1859  37, 203, 38, 204, 64, 423, 443, 444, 626, 445,
1860  0, 626, 358, 0, 0, 356, 0, 0, 0, 318,
1861  0, 0, 433, 0, 326, 0, 0, 433, 329, 593,
1862  615, 0, 0, 333, 419, 420, 201, 0, 254, 303,
1863  20, 615, 0, 371, 0, 560, 0, 0, 0, 410,
1864  576, 536, 562, 537, 537, 571, 626, 589, 537, 581,
1865  537, 559, 537, 0, 0, 398, 0, 386, 388, 0,
1866  566, 0, 376, 377, 0, 391, 0, 393, 0, 437,
1867  435, 0, 416, 273, 241, 36, 202, 0, 0, 447,
1868  359, 0, 12, 449, 0, 310, 311, 0, 0, 268,
1869  626, 321, 0, 527, 324, 529, 331, 531, 530, 363,
1870  374, 0, 369, 365, 411, 0, 0, 0, 540, 0,
1871  542, 532, 0, 548, 0, 545, 550, 0, 400, 577,
1872  379, 380, 380, 295, 429, 569, 626, 380, 579, 380,
1873  380, 405, 615, 403, 406, 59, 0, 446, 0, 101,
1874  102, 109, 0, 448, 0, 314, 317, 439, 440, 438,
1875  0, 0, 0, 0, 372, 0, 367, 414, 413, 537,
1876  537, 537, 537, 490, 0, 383, 0, 385, 608, 294,
1877  375, 0, 392, 0, 389, 394, 0, 402, 108, 429,
1878  626, 427, 626, 626, 0, 327, 0, 370, 0, 541,
1879  0, 538, 543, 546, 380, 380, 380, 380, 404, 608,
1880  107, 615, 604, 605, 441, 357, 322, 334, 368, 537,
1881  384, 0, 381, 387, 390, 433, 539, 380, 382
1882 };
1883 
1884 /* YYDEFGOTO[NTERM-NUM]. */
1885 static const yytype_int16 yydefgoto[] =
1886 {
1887  -1, 1, 2, 68, 69, 70, 239, 568, 569, 255,
1888  256, 448, 257, 439, 72, 73, 360, 74, 75, 510,
1889  691, 246, 77, 78, 258, 79, 80, 81, 468, 82,
1890  212, 379, 380, 195, 196, 197, 198, 606, 557, 200,
1891  84, 441, 214, 263, 231, 749, 428, 429, 228, 229,
1892  216, 415, 430, 516, 517, 85, 358, 261, 262, 636,
1893  626, 362, 847, 363, 848, 733, 990, 737, 734, 932,
1894  595, 597, 747, 938, 248, 87, 88, 89, 90, 91,
1895  92, 93, 94, 95, 96, 714, 571, 722, 844, 845,
1896  371, 771, 772, 773, 960, 898, 800, 687, 688, 801,
1897  972, 973, 281, 282, 473, 776, 659, 879, 322, 511,
1898  97, 98, 712, 705, 566, 558, 320, 508, 507, 578,
1899  989, 716, 838, 918, 922, 99, 100, 101, 102, 103,
1900  104, 105, 293, 486, 106, 297, 107, 108, 295, 299,
1901  289, 287, 291, 478, 678, 677, 793, 893, 797, 109,
1902  288, 110, 111, 112, 219, 220, 115, 221, 222, 590,
1903  736, 745, 746, 881, 779, 661, 662, 891, 664, 665,
1904  666, 667, 805, 806, 668, 669, 670, 671, 808, 809,
1905  672, 673, 674, 675, 676, 782, 398, 596, 268, 431,
1906  224, 118, 630, 560, 401, 306, 425, 426, 707, 459,
1907  572, 366, 260
1908 };
1909 
1910 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1911  STATE-NUM. */
1912 #define YYPACT_NINF -816
1913 static const yytype_int16 yypact[] =
1914 {
1915  -816, 132, 2698, -816, 7384, -816, -816, -816, 6899, -816,
1916  -816, -816, -816, -816, -816, -816, 7499, 7499, -816, -816,
1917  7499, 4040, 3629, -816, -816, -816, -816, 140, 6764, 0,
1918  -816, 27, -816, -816, -816, 2944, 3766, -816, -816, 3081,
1919  -816, -816, -816, -816, -816, -816, -816, -816, 8879, 8879,
1920  166, 5108, 288, 7844, 8189, 7162, -816, 6629, -816, -816,
1921  -816, 105, 123, 177, 196, 941, 8994, 8879, -816, 17,
1922  -816, 867, -816, 484, -816, -816, 76, 294, 226, -816,
1923  210, 9224, -816, 237, 3060, 285, 311, -816, 9109, 9109,
1924  -816, -816, 6009, 9335, 9446, 9557, 6493, 30, 62, -816,
1925  -816, 256, -816, -816, -816, -816, -816, -816, -816, -816,
1926  -816, -816, -816, 491, 593, -816, 303, 616, -816, -816,
1927  -816, -816, -816, -816, -816, -816, -816, -816, -816, -816,
1928  -816, -816, -816, -816, -816, -816, -816, -816, -816, -816,
1929  -816, -816, -816, -816, -816, -816, -816, -816, -816, -816,
1930  -816, -816, -816, -816, -816, -816, -816, -816, -816, -816,
1931  -816, -816, -816, -816, -816, -816, -816, -816, -816, -816,
1932  -816, -816, -816, -816, -816, -816, -816, -816, -816, -816,
1933  -816, -816, -816, -816, -816, -816, -816, -816, -816, -816,
1934  -816, -816, -816, -816, -816, -816, -816, -816, 229, -816,
1935  -816, -816, -816, 270, 8879, 359, 5249, 8879, 8879, 8879,
1936  8879, -816, 310, 3060, 349, -816, -816, 322, 393, 34,
1937  38, 365, 63, 325, -816, -816, -816, 5894, -816, 7499,
1938  7499, -816, -816, 6124, -816, 9109, 679, -816, 309, 332,
1939  5390, -816, -816, -816, 328, 361, 76, -816, 421, 402,
1940  736, 7614, -816, 5108, 362, 17, -816, 867, 0, 408,
1941  -816, 0, 9109, 398, -15, 180, -816, 349, 429, 180,
1942  -816, 0, 502, 941, 9668, 440, -816, 466, 563, 601,
1943  645, -816, -816, -816, -816, -816, -816, 425, -816, 506,
1944  540, 545, 453, 575, 469, 101, 474, 658, 476, 222,
1945  522, -816, -816, -816, -816, -816, -816, -816, 6239, 9109,
1946  9109, 9109, 9109, 7614, 9109, 9109, -816, -816, -816, 498,
1947  -816, -816, -816, 8304, -816, 5108, 7273, 460, 8304, 8879,
1948  8879, 8879, 8879, 8879, 8879, 8879, 8879, 8879, 8879, 8879,
1949  8879, 8879, 8879, 8879, 8879, 8879, 8879, 8879, 8879, 8879,
1950  8879, 8879, 8879, 8879, 8879, 9951, 7499, 10030, 4455, 484,
1951  113, 113, 9109, 9109, 17, 585, 472, 551, -816, -816,
1952  651, 595, 67, 88, 93, 487, 542, 9109, 78, -816,
1953  114, 686, -816, -816, -816, -816, 48, 50, 60, 266,
1954  276, 289, 347, 380, 416, -816, -816, -816, 30, -816,
1955  -816, 10109, -816, -816, 8994, 8994, -816, -816, 240, -816,
1956  -816, -816, 8879, 8879, 7729, -816, -816, 10188, 7499, 10267,
1957  8879, 8879, 7959, -816, 0, 494, -816, -816, 0, -816,
1958  490, 500, -816, 136, -816, -816, -816, -816, -816, 6899,
1959  -816, 8879, 5523, 497, 10188, 10267, 8879, 867, 512, 0,
1960  -816, -816, 6354, 528, -816, 484, -816, 8074, -816, -816,
1961  8189, -816, -816, -816, 309, 703, -816, -816, 529, 9668,
1962  10346, 7499, 10425, 1091, -816, -816, -816, -816, -816, -816,
1963  -816, -816, -816, -816, -816, -816, 35, -816, -816, 481,
1964  -816, -816, -816, 45, -816, 521, -816, 8879, -816, -816,
1965  -816, -816, -816, -816, -816, -816, -816, 70, 70, -816,
1966  -816, 70, 8879, -816, 536, 537, -816, -816, 0, 9668,
1967  557, -816, -816, -816, 566, 3197, -816, -816, 402, 2451,
1968  2451, 2451, 2451, 1100, 1100, 2544, 2079, 2451, 2451, 3334,
1969  3334, 708, 708, 10928, 1100, 1100, 849, 849, 944, 385,
1970  385, 402, 402, 402, 4177, 3218, 4314, 3355, 361, 558,
1971  -816, 0, 760, -816, 768, -816, 361, 3903, 685, 693,
1972  -816, 4596, 689, 4878, 59, 59, 585, 8419, 685, 106,
1973  10504, 7499, 10583, -816, 484, -816, 703, -816, 17, -816,
1974  -816, -816, 10662, 7499, 10109, 4455, 9109, 565, -816, -816,
1975  -816, 1231, -816, 2786, -816, 3060, 6899, 2923, -816, 8879,
1976  349, -816, 325, 2807, 3492, 0, 241, 306, -816, -816,
1977  -816, -816, 7729, 7959, -816, -816, 9109, 3060, 576, -816,
1978  -816, -816, 3060, 5523, 278, -816, 0, 180, 9668, 529,
1979  588, 351, 0, 334, 348, -816, -816, -816, -816, -816,
1980  -816, -816, 893, -816, -816, -816, -816, -816, 1256, -816,
1981  -816, -816, -816, 596, -816, 581, 8879, -816, 583, 672,
1982  589, -816, 591, 682, 603, 702, -816, -816, 858, -816,
1983  -816, -816, -816, -816, 402, -816, 1059, 5664, -816, -816,
1984  5390, 70, 5664, 620, 8534, -816, 529, 9668, 8994, 8879,
1985  646, 8994, 8994, -816, 498, 361, 625, 770, 8994, 8994,
1986  -816, 498, 361, -816, -816, 8649, 766, -816, 527, -816,
1987  766, -816, -816, -816, -816, 685, 228, -816, 71, 89,
1988  0, 116, 125, 9109, 17, -816, 9109, 4455, 588, 351,
1989  -816, 0, 685, 136, 1256, 4455, 1256, 7034, -816, 62,
1990  294, -816, 8879, -816, -816, -816, 8879, 8879, 415, 8879,
1991  8879, 653, 136, -816, 654, -816, -816, -816, 318, 893,
1992  441, -816, 659, 0, -816, 0, 297, 8879, 1256, -816,
1993  -816, 742, -816, -816, -816, 58, -816, 1256, -816, -816,
1994  772, -816, -816, -816, -816, -816, -816, -816, -816, -816,
1995  0, 674, 683, 666, 9779, -816, 667, 589, -816, 673,
1996  677, -816, 675, 807, 690, 5390, 812, 8879, 710, 529,
1997  3060, 8879, -816, 3060, -816, 3060, -816, -816, -816, 8994,
1998  -816, 3060, -816, 3060, -816, -816, 536, -816, 757, -816,
1999  4993, 845, -816, 9109, 685, -816, 685, 5664, 5664, -816,
2000  8764, 4737, 126, 59, -816, 17, 685, -816, -816, -816,
2001  0, 685, 17, -816, -816, -816, 3060, 8879, 7959, -816,
2002  -816, 0, 942, 725, 1005, -816, 723, 5664, 5390, -816,
2003  -816, -816, -816, 733, 738, -816, 589, -816, 740, -816,
2004  743, -816, 740, 5779, 761, -816, 9779, 1256, -816, 830,
2005  709, 742, -816, -816, 1256, -816, 772, -816, 1080, -816,
2006  -816, 754, -816, 752, 3060, -816, 3060, 9890, 113, -816,
2007  -816, 5664, -816, -816, 113, -816, -816, 685, 685, -816,
2008  171, -816, 4455, -816, -816, -816, -816, -816, 565, -816,
2009  756, 942, 492, -816, -816, 880, 762, 1256, -816, 772,
2010  -816, -816, 772, -816, 772, -816, -816, 789, -816, 709,
2011  -816, 780, 782, -816, 10741, -816, 589, 784, -816, 790,
2012  784, -816, 225, -816, -816, -816, 874, -816, 721, 563,
2013  601, 645, 4455, -816, 4596, -816, -816, -816, -816, -816,
2014  5664, 685, 4455, 942, 756, 942, 797, -816, -816, 740,
2015  800, 740, 740, -816, 1256, -816, 772, -816, 764, 799,
2016  -816, 772, -816, 772, -816, -816, 1080, -816, 703, 10820,
2017  7499, 10899, 693, 527, 685, -816, 685, 756, 942, -816,
2018  772, -816, -816, -816, 784, 808, 784, 784, -816, 253,
2019  351, 0, 148, 159, -816, -816, -816, -816, 756, 740,
2020  -816, 772, -816, -816, -816, 169, -816, 784, -816
2021 };
2022 
2023 /* YYPGOTO[NTERM-NUM]. */
2024 static const yytype_int16 yypgoto[] =
2025 {
2026  -816, -816, -816, -380, -816, 23, -816, -566, 358, -816,
2027  505, -816, 20, -816, -308, -42, -75, 39, -816, -330,
2028  -816, 726, -11, 850, -141, 7, -63, -816, -416, 16,
2029  1705, -294, 859, -55, -816, -16, -816, -816, 3, -816,
2030  1056, -816, 1763, -816, -6, 246, -349, 122, 4, -816,
2031  -374, -200, 47, -816, -312, -51, -816, -816, -816, -816,
2032  -816, -816, -816, -816, -816, -816, -816, -816, -816, -816,
2033  -816, -816, -816, -816, 74, -816, -816, -816, -816, -816,
2034  -816, -816, -816, -816, -816, -550, -346, -536, -61, -648,
2035  -816, -787, -765, 191, 277, 43, -816, -392, -816, -655,
2036  -816, -48, -816, -816, -816, -816, -816, -816, 215, -816,
2037  -816, -816, -816, -816, -816, -816, -90, -816, -816, -551,
2038  -816, -53, -816, -816, -816, -816, -816, -816, 877, -816,
2039  -816, -816, -816, 684, -816, -816, -816, -816, -816, -816,
2040  -816, 924, -816, -196, -816, -816, -816, -816, -816, 26,
2041  -816, 51, -816, -9, 846, 1250, 889, 1597, 1618, -816,
2042  -816, 54, -816, -407, -359, -311, -804, 957, -693, -447,
2043  -113, 205, 92, -816, -816, -816, -24, -730, -815, 110,
2044  230, -816, -654, -816, -146, -609, -816, -816, -816, 57,
2045  -385, -816, -336, -816, 613, -59, -26, -223, -560, -220,
2046  -56, 37, -2
2047 };
2048 
2049 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
2050  positive, shift that token. If negative, reduce the rule which
2051  number is the opposite. If YYTABLE_NINF, syntax error. */
2052 #define YYTABLE_NINF -627
2053 static const yytype_int16 yytable[] =
2054 {
2055  119, 235, 286, 238, 276, 211, 211, 561, 402, 211,
2056  434, 199, 237, 307, 361, 573, 527, 364, 327, 559,
2057  522, 567, 71, 423, 71, 725, 232, 120, 727, 742,
2058  276, 199, 810, 365, 201, 453, 307, 618, 454, 724,
2059  611, 396, 276, 276, 276, 461, 359, 359, 611, 463,
2060  359, 266, 270, 639, 201, 758, 300, 889, 259, 202,
2061  199, 786, 628, 217, 217, 601, 660, 217, 841, 615,
2062  318, 275, 846, 223, 223, 618, 86, 223, 86, 202,
2063  319, 559, 768, 567, 587, 882, 721, 943, 316, 968,
2064  218, 218, -101, 480, 218, 483, -105, 487, 474, 199,
2065  264, 487, 316, 696, 974, 301, 308, 940, 474, 631,
2066  265, 269, 449, -102, -107, 588, 690, 399, -109, 692,
2067  876, 457, 642, -521, 884, 86, 570, -522, 458, 277,
2068  585, -108, 3, 890, 586, -513, 631, -512, 215, 225,
2069  218, -104, 226, 234, 475, 894, 476, -514, 685, -101,
2070  -106, -103, 421, -102, 475, 277, 476, 655, 304, 240,
2071  305, -104, 218, 218, 489, 400, 218, 370, 381, 381,
2072  852, 856, -106, 314, 315, 849, 994, 679, -109, 861,
2073  656, 857, -103, -513, 518, -512, 840, 682, 577, 968,
2074  686, 433, 858, 435, 317, -514, 451, 902, 903, 307,
2075  304, 619, 305, -92, 882, 621, 943, -96, 317, -604,
2076  624, 467, 974, 490, 230, 416, 211, 889, 211, 211,
2077  455, 416, 250, 276, -93, -98, 634, -605, 432, -100,
2078  1027, 423, 730, 589, 500, 501, 502, 503, 618, 803,
2079  318, 570, -99, 962, 741, 464, 631, 292, 611, 611,
2080  969, 660, -95, 764, 304, 304, 305, 305, 631, 882,
2081  259, -97, -94, 1048, 466, 294, -105, 359, 359, 359,
2082  359, 447, 505, 506, 217, 276, 217, 951, 233, 234,
2083  86, 819, 987, 234, 223, 495, 223, 574, 575, -104,
2084  680, -104, 452, 1000, 925, 695, 926, 680, 740, 815,
2085  -106, 218, -106, 218, 218, 576, 934, 218, 307, 218,
2086  -103, 936, -103, 788, 86, 791, 460, 931, 882, 296,
2087  359, 359, 321, 458, 591, 86, 877, 86, 71, 446,
2088  759, 499, 259, 504, 496, 584, 218, 660, 298, 660,
2089  888, 323, 520, 892, -433, 211, 324, 775, 277, 424,
2090  1035, 427, 328, -515, 432, -108, -104, 1010, 58, -95,
2091  565, 1016, 513, -517, 850, 406, 991, 523, 234, 304,
2092  515, 305, -339, -97, 826, 515, -516, 985, 986, 988,
2093  851, 834, 86, 218, 218, 218, 218, 86, 218, 218,
2094  522, -604, 404, -73, -105, 760, -105, 218, 355, 86,
2095  277, -515, 218, 837, 565, -433, 467, 211, 233, 254,
2096  878, -517, 755, 765, -87, 408, 432, 766, 276, -339,
2097  -339, -106, 565, 625, -516, 412, 1026, -288, 416, 416,
2098  218, -288, 86, 860, -518, 862, 218, 218, -294, 413,
2099  119, 1025, 199, 602, 604, 356, 357, 440, 565, -95,
2100  -433, 218, -433, -433, 420, 329, 467, 967, 414, 970,
2101  211, 422, 71, -97, 442, 201, 227, -507, 276, 432,
2102  -95, 612, 329, -95, 1046, 565, 1047, -95, 218, 218,
2103  417, 1055, -518, 618, -97, -294, -294, -97, 474, -605,
2104  202, -97, 218, 645, 611, 646, 647, 648, 649, 230,
2105  999, 450, 1001, -510, 867, 689, 689, 1002, 444, 689,
2106  352, 353, 354, -601, 637, -507, 86, 700, 723, 723,
2107  859, 314, 315, -72, 948, 950, 86, 418, 419, 953,
2108  -103, 955, 735, 956, 475, 706, 476, 477, 456, 869,
2109  811, 843, 840, 277, 645, 218, 646, 647, 648, 649,
2110  875, -510, 703, 470, 743, 418, 445, 1034, 465, 1036,
2111  710, 755, 462, 704, 254, 484, 1037, 717, -602, 474,
2112  211, 711, 982, 804, -507, 767, 469, 872, 984, 432,
2113  -521, 488, 211, 1049, 762, 565, 491, 276, 494, 706,
2114  753, 432, 497, 277, 509, 748, 521, 565, 443, 751,
2115  471, 472, 577, 474, 1057, 750, -101, 579, 474, 199,
2116  416, 254, 482, 498, -608, 475, 706, 476, 479, -601,
2117  583, -507, -507, 681, 726, -601, 622, -92, 995, -510,
2118  629, 119, 201, 620, 467, 887, 623, 935, 474, 887,
2119  1029, 1031, 1032, 1033, 633, 86, 276, 86, 939, 475,
2120  -519, 476, 481, 71, 475, 218, 476, 202, 853, 864,
2121  812, 855, 807, 683, -87, 638, 783, 218, 783, 86,
2122  218, 1041, -266, 694, -602, -608, -510, -510, 854, 761,
2123  -602, 698, -522, 254, 475, 631, 476, 485, -520, 689,
2124  1056, 359, 863, 697, 359, 713, -424, -519, -519, 827,
2125  218, 715, 719, 744, 706, 405, 748, 86, -102, 763,
2126  751, 777, 277, 839, 842, 706, 842, 778, 842, 781,
2127  -608, 474, -608, -608, 784, 785, -604, 787, 76, -93,
2128  76, -109, -284, 436, 789, -520, -520, 523, 580, 790,
2129  822, 824, 76, 76, 437, 438, 76, 830, 832, 812,
2130  199, 811, -100, 276, 792, 887, -267, 886, 811, 416,
2131  811, 86, 515, 821, 86, 828, 86, 475, 924, 476,
2132  492, 277, 218, 592, 812, 218, 218, 76, 329, -284,
2133  -284, 840, 218, 218, 804, 581, 582, 870, 804, 868,
2134  -295, 804, 76, 804, 895, 874, 964, 723, 896, 933,
2135  650, 359, 897, 901, 783, 783, 937, 218, 1019, 904,
2136  218, 86, 651, 906, 76, 76, 908, 909, 76, 86,
2137  593, 594, 912, 910, 645, 446, 646, 647, 648, 649,
2138  650, 350, 351, 352, 353, 354, 919, -295, -295, 923,
2139  654, 655, 651, 593, 594, 276, -268, 917, 113, 708,
2140  113, -108, 905, 907, 921, 1020, 1021, 709, 811, 829,
2141  811, 941, 944, 652, 656, 811, 276, 811, 915, 947,
2142  654, 655, -99, 807, 949, -104, 952, 966, 900, 954,
2143  807, 958, 807, -106, 783, -103, 963, 975, -269, 86,
2144  997, 804, 993, 804, 656, 998, -95, 113, 804, 1003,
2145  804, 278, -604, 218, -97, 811, -94, 309, 310, 311,
2146  312, 313, 794, 795, 86, 796, 1004, 218, 1006, 329,
2147  1011, 86, 86, 46, 47, 86, 1013, 278, 842, 718,
2148  1018, 720, 76, 1028, 342, 343, 1030, -605, 804, 372,
2149  382, 382, 382, 368, 1051, 645, 1017, 646, 647, 648,
2150  649, 86, 86, 76, 385, 76, 76, 635, 835, 76,
2151  871, 76, 1045, 799, 783, 865, 76, 86, 1038, 1044,
2152  959, 349, 350, 351, 352, 353, 354, 76, 403, 76,
2153  807, 493, 807, 290, 769, 397, 885, 807, 76, 807,
2154  770, 978, 992, 965, 645, 86, 646, 647, 648, 649,
2155  41, 42, 43, 44, 1005, 1007, 86, 961, 883, 211,
2156  1012, 598, 1014, 1015, 329, 706, 0, 0, 432, 0,
2157  717, 842, 0, 0, 565, 0, 0, 807, 0, 342,
2158  343, 0, 0, 769, 76, 76, 76, 76, 76, 76,
2159  76, 76, 0, 0, 0, 813, 0, 0, 814, 76,
2160  816, 76, 113, 0, 76, 0, 86, 645, 86, 646,
2161  647, 648, 649, 0, 86, 0, 86, 350, 351, 352,
2162  353, 354, 213, 213, 0, 0, 213, 1050, 1052, 1053,
2163  1054, 0, 76, 0, 76, 0, 113, 0, 76, 76,
2164  0, 0, 0, 0, 218, 0, 769, 113, 0, 113,
2165  1058, 0, 942, 76, 247, 249, 0, 0, 0, 213,
2166  213, 645, 0, 646, 647, 648, 649, 650, 0, 0,
2167  278, 0, 302, 303, 0, 0, 0, 0, 0, 651,
2168  76, 76, 971, 0, 646, 647, 648, 649, 0, 0,
2169  0, 0, 0, 645, 76, 646, 647, 648, 649, 650,
2170  652, 0, 0, 0, 113, 0, 653, 654, 655, 113,
2171  0, 651, 0, 0, 0, 0, 0, 0, 76, 0,
2172  329, 113, 278, 911, 0, 0, 0, 0, 76, 0,
2173  0, 656, 652, 0, 657, 342, 343, 0, 653, 654,
2174  655, 0, 0, 0, 0, 0, 0, 76, 920, 0,
2175  0, 0, 234, 0, 113, 927, 928, 0, 0, 930,
2176  0, 0, 0, 656, 0, 0, 657, 0, 0, 0,
2177  347, 348, 349, 350, 351, 352, 353, 354, 0, 658,
2178  0, -626, 0, 0, 0, 945, 946, 0, 0, -626,
2179  -626, -626, 0, 0, -626, -626, -626, 0, -626, 0,
2180  0, 957, 114, 0, 114, 0, 0, -626, -626, 0,
2181  213, 0, 0, 213, 213, 213, 302, 0, -626, -626,
2182  0, -626, -626, -626, -626, -626, 0, 0, 0, 983,
2183  0, 0, 0, 213, 0, 213, 213, 0, 113, 0,
2184  0, 0, 0, 0, 0, 0, 0, 76, 113, 76,
2185  0, 114, 0, 0, 0, 279, 0, 76, 645, 0,
2186  646, 647, 648, 649, 650, 278, 0, 0, -626, 76,
2187  0, 76, 76, 0, 0, 0, 651, 0, 0, 0,
2188  0, 279, 0, 0, 0, 0, 0, 0, 0, 0,
2189  1022, -626, 1023, 373, 383, 383, 383, 652, 1024, 0,
2190  0, 0, 76, 653, 654, 655, 0, 0, 0, 76,
2191  0, 0, 0, -626, -626, 278, -626, 0, 0, 230,
2192  -626, 0, -626, 0, -626, 0, 0, 0, 656, 213,
2193  0, 657, 0, 0, 525, 528, 529, 530, 531, 532,
2194  533, 534, 535, 536, 537, 538, 539, 540, 541, 542,
2195  543, 544, 545, 546, 547, 548, 549, 550, 551, 552,
2196  553, 0, 213, 76, 0, 0, 76, 113, 76, 113,
2197  0, 0, 0, 0, 76, 0, 0, 76, 76, 0,
2198  663, 0, 0, 0, 76, 76, 0, 0, 0, 0,
2199  0, 113, 0, 0, 0, 0, 0, 0, 0, 0,
2200  0, 0, 0, 0, 0, 0, 114, 0, 0, 76,
2201  603, 605, 76, 76, 0, 0, 0, 0, 607, 213,
2202  213, 76, 0, 0, 213, 0, 603, 605, 213, 113,
2203  0, 0, 0, 0, 278, 0, 0, 0, 0, 0,
2204  114, 0, 0, 0, 0, 0, 0, 627, 0, 0,
2205  0, 114, 632, 114, 0, 0, 0, 0, 0, 0,
2206  0, 0, 0, 213, 0, 0, 213, 0, 0, 0,
2207  0, 0, 0, 0, 279, 0, 0, 213, 0, 0,
2208  0, 0, 0, 113, 0, 0, 113, 0, 113, 0,
2209  0, 76, 0, 278, 0, 0, 0, 0, 0, 0,
2210  0, 0, 0, 684, 0, 76, 0, 0, 114, 0,
2211  0, 0, 0, 114, 0, 0, 76, 0, 213, 76,
2212  0, 0, 0, 76, 76, 114, 279, 76, 0, 0,
2213  0, 0, 0, 113, 0, 0, 0, 0, 0, 0,
2214  0, 113, 0, 0, 0, 0, 0, 0, 0, 116,
2215  0, 116, 0, 76, 76, 0, 0, 0, 114, 774,
2216  0, 0, 0, 0, 0, 663, 0, 0, 0, 76,
2217  117, 0, 117, 0, 0, 0, 0, 0, 0, 0,
2218  0, 0, 0, 213, 0, 0, 0, 213, 0, 0,
2219  0, 0, 0, 802, 0, 0, 0, 76, 116, 213,
2220  382, 0, 0, 0, 0, 0, 0, 0, 76, 0,
2221  0, 113, 0, 0, 0, 213, 0, 0, 0, 117,
2222  0, 0, 0, 280, 0, 0, 0, 0, 213, 213,
2223  0, 0, 0, 0, 0, 0, 113, 0, 0, 0,
2224  0, 0, 114, 113, 113, 0, 0, 113, 0, 280,
2225  0, 663, 114, 663, 0, 0, 0, 83, 76, 83,
2226  76, 374, 384, 384, 0, 0, 76, 0, 76, 279,
2227  0, 0, 213, 113, 113, 0, 774, 873, 0, 0,
2228  0, 0, 0, 0, 0, 663, 0, 0, 0, 113,
2229  0, 0, 382, 0, 663, 0, 76, 0, 0, 0,
2230  213, 0, 0, 0, 607, 820, 83, 823, 825, 0,
2231  0, 0, 0, 979, 831, 833, 0, 113, 0, 279,
2232  0, 213, 0, 0, 0, 0, 0, 0, 113, 0,
2233  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2234  0, 0, 0, 0, 0, 0, 0, 0, 369, 0,
2235  0, 0, 0, 116, 0, 0, 0, 0, 866, 0,
2236  0, 0, 823, 825, 0, 831, 833, 267, 0, 0,
2237  0, 114, 0, 114, 117, 0, 0, 0, 113, 774,
2238  113, 774, 0, 213, 0, 0, 113, 116, 113, 0,
2239  0, 0, 0, 0, 0, 114, 0, 0, 116, 0,
2240  116, 0, 0, 0, 802, 0, 0, 0, 117, 0,
2241  0, 802, 0, 0, 0, 0, 0, 0, 0, 117,
2242  0, 117, 0, 213, 0, 0, 0, 914, 0, 0,
2243  0, 0, 0, 114, 0, 916, 0, 0, 279, 0,
2244  0, 0, 280, 0, 0, 0, 0, 0, 774, 996,
2245  0, 0, 0, 0, 663, 116, 213, 0, 0, 0,
2246  116, 83, 0, 0, 0, 0, 0, 0, 0, 0,
2247  0, 0, 116, 916, 213, 0, 117, 0, 0, 0,
2248  0, 117, 0, 0, 0, 0, 0, 114, 0, 0,
2249  114, 0, 114, 117, 280, 83, 0, 279, 0, 0,
2250  774, 0, 774, 0, 0, 116, 83, 0, 83, 0,
2251  0, 802, 0, 0, 0, 0, 0, 407, 0, 0,
2252  409, 410, 411, 0, 0, 0, 117, 0, 0, 0,
2253  0, 0, 0, 0, 0, 774, 0, 114, 0, 0,
2254  0, 0, 0, 0, 0, 114, 0, 0, 0, 0,
2255  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2256  0, 0, 0, 83, 0, 0, 0, 0, 83, 0,
2257  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2258  83, 0, 0, 524, 0, 0, 0, 0, 0, 116,
2259  0, 0, 0, 0, 0, 0, 0, 0, 0, 116,
2260  0, 0, 0, 0, 383, 0, 0, 0, 0, 0,
2261  117, 0, 0, 83, 0, 114, 0, 0, 0, 0,
2262  117, 0, 0, 0, 0, 0, 213, 0, 0, 0,
2263  0, 0, 0, 0, 0, 0, 514, 280, 0, 0,
2264  114, 526, 0, 0, 0, 0, 0, 114, 114, 0,
2265  0, 114, 0, 0, 0, 0, 0, 0, 0, 0,
2266  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2267  0, 0, 0, 0, 0, 0, 0, 114, 114, 0,
2268  0, 0, 0, 0, 0, 0, 0, 280, 0, 0,
2269  0, 0, 0, 114, 0, 0, 383, 83, 0, 329,
2270  330, 331, 332, 333, 334, 335, 336, 83, 338, 339,
2271  0, 0, 0, 0, 342, 343, 0, 980, 116, 0,
2272  116, 114, 0, 0, 0, 0, 608, 610, 0, 0,
2273  0, 0, 114, 0, 0, 267, 0, 0, 0, 117,
2274  0, 117, 116, 0, 0, 0, 0, 345, 346, 347,
2275  348, 349, 350, 351, 352, 353, 354, 0, 0, 0,
2276  0, 0, 0, 117, 0, 0, 0, 0, 0, 0,
2277  610, 0, 0, 267, 0, 0, 0, 0, 0, 0,
2278  116, 0, 114, 0, 114, 0, 0, 0, 0, 0,
2279  114, 0, 114, 0, 0, 0, 0, 0, 0, 0,
2280  0, 117, 0, 0, 0, 0, 280, 0, 0, 0,
2281  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2282  0, 0, 0, 0, 0, 693, 83, 0, 83, 0,
2283  0, 0, 0, 0, 116, 0, 0, 116, 0, 116,
2284  0, 0, 0, 0, 0, 0, 798, 0, 0, 0,
2285  83, 0, 0, 0, 0, 117, 0, 0, 117, 0,
2286  117, 0, 0, 0, 0, 280, 0, 0, 0, 0,
2287  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2288  0, 0, 0, 0, 116, 0, 0, 0, 83, 0,
2289  526, 0, 116, 0, 0, 0, 0, 0, 0, 0,
2290  0, 0, 0, 0, 0, 117, 0, 0, 0, 0,
2291  0, 0, 0, 117, 0, 0, 0, 0, 0, 0,
2292  0, 0, 754, 0, 0, 0, 0, 0, 0, 0,
2293  0, 0, 0, 0, 0, 610, 267, 0, 0, 0,
2294  0, 0, 83, 0, 0, 83, 0, 83, 0, 0,
2295  0, 0, 0, 524, 0, 0, 0, 0, 0, 0,
2296  0, 0, 116, 0, 0, 0, 0, 0, 0, 0,
2297  0, 0, 384, 0, 0, 0, 0, 0, 0, 780,
2298  0, 0, 0, 117, 0, 0, 0, 116, 0, 0,
2299  0, 0, 83, 0, 116, 116, 0, 0, 116, 0,
2300  83, 0, 0, 0, 0, 0, 0, 818, 117, 0,
2301  0, 0, 0, 0, 0, 117, 117, 0, 0, 117,
2302  0, 0, 0, 0, 116, 116, 0, 0, 836, 0,
2303  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2304  116, 0, 0, 0, 0, 117, 117, 0, 0, 0,
2305  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2306  0, 117, 0, 0, 384, 0, 0, 0, 116, 0,
2307  83, 329, -627, -627, -627, -627, 334, 335, 0, 116,
2308  -627, -627, 0, 0, 0, 981, 342, 343, 0, 117,
2309  880, 0, 0, 0, 0, 83, 0, 0, 0, 0,
2310  117, 0, 83, 83, 0, 0, 83, 0, 0, 0,
2311  0, 0, 0, 0, 0, 0, 0, 0, 0, 345,
2312  346, 347, 348, 349, 350, 351, 352, 353, 354, 116,
2313  913, 116, 83, 83, 0, 0, 0, 116, 0, 116,
2314  0, 0, 0, 0, 0, 0, 0, 0, 83, 0,
2315  117, 0, 117, 0, 0, 0, 0, 0, 117, 0,
2316  117, 0, 0, 929, 329, 330, 331, 332, 333, 334,
2317  335, 0, 977, 338, 339, 0, 83, 0, 0, 342,
2318  343, 267, 0, 0, 0, 0, 0, 83, 0, 0,
2319  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2320  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2321  0, 0, 345, 346, 347, 348, 349, 350, 351, 352,
2322  353, 354, 0, 0, 0, 0, 0, 0, 0, 0,
2323  0, 0, 0, 0, 0, 0, 0, 83, 0, 83,
2324  0, 0, 0, 0, 0, 83, 0, 83, -626, 4,
2325  0, 5, 6, 7, 8, 9, 0, 0, 0, 10,
2326  11, 0, 0, 0, 12, 0, 13, 14, 15, 16,
2327  17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
2328  22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
2329  0, 0, 0, 28, 29, 30, 31, 32, 33, 34,
2330  35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
2331  44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
2332  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2333  0, 0, 0, 0, 0, 0, 50, 0, 0, 51,
2334  52, 0, 53, 54, 0, 55, 0, 0, 56, 57,
2335  58, 59, 60, 61, 62, 63, 64, -608, 0, 0,
2336  0, 0, 0, 0, 0, -608, -608, -608, 0, 0,
2337  -608, -608, -608, 0, -608, 0, 65, 66, 67, 0,
2338  752, 0, 0, -608, -608, -608, -608, 0, 0, -626,
2339  0, -626, 0, 0, -608, -608, 0, -608, -608, -608,
2340  -608, -608, 0, 0, 0, 0, 329, 330, 331, 332,
2341  333, 334, 335, 336, 337, 338, 339, 340, 341, 0,
2342  0, 342, 343, 0, 0, 0, 0, -608, -608, -608,
2343  -608, -608, -608, -608, -608, -608, -608, -608, -608, -608,
2344  0, 0, -608, -608, -608, 0, 756, -608, 0, 0,
2345  0, 0, 344, -608, 345, 346, 347, 348, 349, 350,
2346  351, 352, 353, 354, 0, 0, 0, -608, 0, 0,
2347  -608, 0, -105, -608, -608, -608, -608, -608, -608, -608,
2348  -608, -608, -608, -608, -608, 0, 0, 0, 0, -608,
2349  -608, -608, -608, -608, -507, 0, -608, -608, -608, 0,
2350  -608, 0, -507, -507, -507, 0, 0, -507, -507, -507,
2351  0, -507, 0, 0, 0, 0, 0, 699, 0, -507,
2352  0, -507, -507, -507, 0, 0, 0, 0, 0, 0,
2353  0, -507, -507, 0, -507, -507, -507, -507, -507, 0,
2354  0, 0, 0, 329, 330, 331, 332, 333, 334, 335,
2355  336, 337, 338, 339, 340, 341, 0, 0, 342, 343,
2356  0, 0, 0, 0, -507, -507, -507, -507, -507, -507,
2357  -507, -507, -507, -507, -507, -507, -507, 0, 0, -507,
2358  -507, -507, 0, -507, -507, 0, 0, 0, 0, 344,
2359  -507, 345, 346, 347, 348, 349, 350, 351, 352, 353,
2360  354, 0, 0, 0, -507, 0, 0, -507, 0, -507,
2361  -507, -507, -507, -507, -507, -507, -507, -507, -507, -507,
2362  -507, -507, 0, 0, 0, 0, 0, -507, -507, -507,
2363  -507, -510, 0, -507, -507, -507, 0, -507, 0, -510,
2364  -510, -510, 0, 0, -510, -510, -510, 0, -510, 0,
2365  0, 0, 0, 0, 0, 0, -510, 0, -510, -510,
2366  -510, 0, 0, 0, 0, 0, 0, 0, -510, -510,
2367  0, -510, -510, -510, -510, -510, 0, 0, 0, 0,
2368  329, 330, 331, 332, 333, 334, 335, 336, 337, 338,
2369  339, 340, 341, 0, 0, 342, 343, 0, 0, 0,
2370  0, -510, -510, -510, -510, -510, -510, -510, -510, -510,
2371  -510, -510, -510, -510, 0, 0, -510, -510, -510, 0,
2372  -510, -510, 0, 0, 0, 0, 344, -510, 345, 346,
2373  347, 348, 349, 350, 351, 352, 353, 354, 0, 0,
2374  0, -510, 0, 0, -510, 0, -510, -510, -510, -510,
2375  -510, -510, -510, -510, -510, -510, -510, -510, -510, 0,
2376  0, 0, 0, 0, -510, -510, -510, -510, -609, 0,
2377  -510, -510, -510, 0, -510, 0, -609, -609, -609, 0,
2378  0, -609, -609, -609, 0, -609, 0, 0, 0, 0,
2379  0, 699, 0, 0, -609, -609, -609, -609, 0, 0,
2380  0, 0, 0, 0, 0, -609, -609, 0, -609, -609,
2381  -609, -609, -609, 0, 0, 0, 0, 329, 330, 331,
2382  332, 333, 334, 335, 336, 337, 338, 339, 340, 341,
2383  0, 0, 342, 343, 0, 0, 0, 0, -609, -609,
2384  -609, -609, -609, -609, -609, -609, -609, -609, -609, -609,
2385  -609, 0, 0, -609, -609, -609, 0, 0, -609, 0,
2386  0, 0, 0, 344, -609, 345, 346, 347, 348, 349,
2387  350, 351, 352, 353, 354, 0, 0, 0, -609, 0,
2388  0, -609, 0, -243, -609, -609, -609, -609, -609, -609,
2389  -609, -609, -609, -609, -609, -609, 0, 0, 0, 0,
2390  -609, -609, -609, -609, -609, -610, 0, -609, -609, -609,
2391  0, -609, 0, -610, -610, -610, 0, 0, -610, -610,
2392  -610, 0, -610, 0, 0, 0, 0, 0, 0, 0,
2393  0, -610, -610, -610, -610, 0, 0, 0, 0, 0,
2394  0, 0, -610, -610, 0, -610, -610, -610, -610, -610,
2395  0, 0, 0, 0, 329, 330, 331, 332, 333, 334,
2396  335, 336, 337, 338, 339, -627, -627, 0, 0, 342,
2397  343, 0, 0, 0, 0, -610, -610, -610, -610, -610,
2398  -610, -610, -610, -610, -610, -610, -610, -610, 0, 0,
2399  -610, -610, -610, 0, 0, -610, 0, 0, 0, 0,
2400  0, -610, 345, 346, 347, 348, 349, 350, 351, 352,
2401  353, 354, 0, 0, 0, -610, 0, 0, -610, 0,
2402  0, -610, -610, -610, -610, -610, -610, -610, -610, -610,
2403  -610, -610, -610, 0, 0, 0, 0, -610, -610, -610,
2404  -610, -610, -294, 0, -610, -610, -610, 0, -610, 0,
2405  -294, -294, -294, 0, 0, -294, -294, -294, 0, -294,
2406  0, 0, 0, 0, 0, 0, 0, 0, 0, -294,
2407  -294, -294, 0, 0, 0, 0, 0, 0, 0, -294,
2408  -294, 0, -294, -294, -294, -294, -294, 0, 0, 0,
2409  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2410  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2411  0, 0, -294, -294, -294, -294, -294, -294, -294, -294,
2412  -294, -294, -294, -294, -294, 0, 0, -294, -294, -294,
2413  0, 757, -294, 0, 0, 0, 0, 0, -294, 0,
2414  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2415  0, 0, -294, 0, 0, -294, 0, -107, -294, -294,
2416  -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
2417  0, 0, 0, 0, 0, -294, -294, -294, -294, -432,
2418  0, -294, -294, -294, 0, -294, 0, -432, -432, -432,
2419  0, 0, -432, -432, -432, 0, -432, 0, 0, 0,
2420  0, 0, 0, 0, 0, -432, -432, -432, 0, 0,
2421  0, 0, 0, 0, 0, 0, -432, -432, 0, -432,
2422  -432, -432, -432, -432, 0, 0, 0, 0, 0, 0,
2423  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2424  0, 0, 0, 0, 0, 0, 0, 0, 0, -432,
2425  -432, -432, -432, -432, -432, -432, -432, -432, -432, -432,
2426  -432, -432, 0, 0, -432, -432, -432, 0, 0, -432,
2427  0, 0, 0, 0, 0, -432, 0, 0, 0, 0,
2428  0, 0, 0, 0, 0, 0, 0, 0, 0, -432,
2429  0, 0, 0, 0, 0, -432, 0, -432, -432, -432,
2430  -432, -432, -432, -432, -432, -432, -432, 0, 0, 0,
2431  0, -432, -432, -432, -432, -432, -285, 230, -432, -432,
2432  -432, 0, -432, 0, -285, -285, -285, 0, 0, -285,
2433  -285, -285, 0, -285, 0, 0, 0, 0, 0, 0,
2434  0, 0, 0, -285, -285, -285, 0, 0, 0, 0,
2435  0, 0, 0, -285, -285, 0, -285, -285, -285, -285,
2436  -285, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2437  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2438  0, 0, 0, 0, 0, 0, -285, -285, -285, -285,
2439  -285, -285, -285, -285, -285, -285, -285, -285, -285, 0,
2440  0, -285, -285, -285, 0, 0, -285, 0, 0, 0,
2441  0, 0, -285, 0, 0, 0, 0, 0, 0, 0,
2442  0, 0, 0, 0, 0, 0, -285, 0, 0, -285,
2443  0, 0, -285, -285, -285, -285, -285, -285, -285, -285,
2444  -285, -285, -285, -285, 0, 0, 0, 0, 0, -285,
2445  -285, -285, -285, -422, 0, -285, -285, -285, 0, -285,
2446  0, -422, -422, -422, 0, 0, -422, -422, -422, 0,
2447  -422, 0, 0, 0, 0, 0, 0, 0, 0, -422,
2448  -422, -422, 0, 0, 0, 0, 0, 0, 0, 0,
2449  -422, -422, 0, -422, -422, -422, -422, -422, 0, 0,
2450  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2451  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2452  0, 0, 0, -422, -422, -422, -422, -422, -422, -422,
2453  -422, -422, -422, -422, -422, -422, 0, 0, -422, -422,
2454  -422, 0, 0, -422, 0, 0, 0, 0, 0, -422,
2455  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2456  0, 0, 0, -422, 0, 0, 0, 0, 0, -422,
2457  0, -422, -422, -422, -422, -422, -422, -422, -422, -422,
2458  -422, 0, 0, 0, 0, -422, -422, -422, -422, -422,
2459  -301, -422, -422, -422, -422, 0, -422, 0, -301, -301,
2460  -301, 0, 0, -301, -301, -301, 0, -301, 0, 0,
2461  0, 0, 0, 0, 0, 0, 0, -301, -301, 0,
2462  0, 0, 0, 0, 0, 0, 0, -301, -301, 0,
2463  -301, -301, -301, -301, -301, 0, 0, 0, 0, 0,
2464  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2465  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2466  -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
2467  -301, -301, -301, 0, 0, -301, -301, -301, 0, 0,
2468  -301, 0, 0, 0, 0, 0, -301, 0, 0, 0,
2469  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2470  -301, 0, 0, 0, 0, 0, -301, 0, -301, -301,
2471  -301, -301, -301, -301, -301, -301, -301, -301, 0, 0,
2472  0, 0, 0, -301, -301, -301, -301, -608, 227, -301,
2473  -301, -301, 0, -301, 0, -608, -608, -608, 0, 0,
2474  0, -608, -608, 0, -608, 0, 0, 0, 0, 0,
2475  0, 0, 0, -608, 0, 0, 0, 0, 0, 0,
2476  0, 0, 0, 0, -608, -608, 0, -608, -608, -608,
2477  -608, -608, 0, 0, 0, 0, 0, 0, 0, 0,
2478  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2479  0, 0, 0, 0, 0, 0, 0, -608, -608, -608,
2480  -608, -608, -608, -608, -608, -608, -608, -608, -608, -608,
2481  0, 0, -608, -608, -608, 0, 701, 0, 0, 0,
2482  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2483  0, 0, 0, 0, 0, 0, 0, -608, 0, 0,
2484  0, 0, -105, -608, 0, -608, -608, -608, -608, -608,
2485  -608, -608, -608, -608, -608, 0, 0, 0, 0, -608,
2486  -608, -608, -608, -96, -294, 0, -608, 0, -608, 0,
2487  -608, 0, -294, -294, -294, 0, 0, 0, -294, -294,
2488  0, -294, 0, 0, 0, 0, 0, 0, 0, 0,
2489  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2490  0, -294, -294, 0, -294, -294, -294, -294, -294, 0,
2491  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2492  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2493  0, 0, 0, 0, -294, -294, -294, -294, -294, -294,
2494  -294, -294, -294, -294, -294, -294, -294, 0, 0, -294,
2495  -294, -294, 0, 702, 0, 0, 0, 0, 0, 0,
2496  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2497  0, 0, 0, 0, -294, 0, 0, 0, 0, -107,
2498  -294, 0, -294, -294, -294, -294, -294, -294, -294, -294,
2499  -294, -294, 0, 0, 0, 0, 0, -294, -294, -294,
2500  -98, 0, 0, -294, 0, -294, 251, -294, 5, 6,
2501  7, 8, 9, -626, -626, -626, 10, 11, 0, 0,
2502  -626, 12, 0, 13, 14, 15, 16, 17, 18, 19,
2503  0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
2504  25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
2505  28, 29, 252, 31, 32, 33, 34, 35, 36, 37,
2506  38, 39, 40, 0, 41, 42, 43, 44, 0, 45,
2507  46, 47, 0, 48, 49, 0, 0, 0, 0, 0,
2508  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2509  0, 0, 0, 50, 0, 0, 51, 52, 0, 53,
2510  54, 0, 55, 0, 0, 56, 57, 58, 59, 60,
2511  61, 62, 63, 64, 0, 0, 0, 0, 0, 0,
2512  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2513  0, 0, 0, 65, 66, 67, 0, 0, 0, 0,
2514  0, 0, 0, 0, 0, 0, -626, 251, -626, 5,
2515  6, 7, 8, 9, 0, 0, -626, 10, 11, 0,
2516  -626, -626, 12, 0, 13, 14, 15, 16, 17, 18,
2517  19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
2518  24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
2519  0, 28, 29, 252, 31, 32, 33, 34, 35, 36,
2520  37, 38, 39, 40, 0, 41, 42, 43, 44, 0,
2521  45, 46, 47, 0, 48, 49, 0, 0, 0, 0,
2522  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2523  0, 0, 0, 0, 50, 0, 0, 51, 52, 0,
2524  53, 54, 0, 55, 0, 0, 56, 57, 58, 59,
2525  60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
2526  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2527  0, 0, 0, 0, 65, 66, 67, 0, 0, 0,
2528  0, 0, 0, 0, 0, 0, 0, -626, 251, -626,
2529  5, 6, 7, 8, 9, 0, 0, -626, 10, 11,
2530  0, 0, -626, 12, -626, 13, 14, 15, 16, 17,
2531  18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
2532  23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
2533  0, 0, 28, 29, 252, 31, 32, 33, 34, 35,
2534  36, 37, 38, 39, 40, 0, 41, 42, 43, 44,
2535  0, 45, 46, 47, 0, 48, 49, 0, 0, 0,
2536  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2537  0, 0, 0, 0, 0, 50, 0, 0, 51, 52,
2538  0, 53, 54, 0, 55, 0, 0, 56, 57, 58,
2539  59, 60, 61, 62, 63, 64, 0, 0, 0, 0,
2540  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2541  0, 0, 0, 0, 0, 65, 66, 67, 0, 0,
2542  0, 0, 0, 0, 0, 0, 0, 0, -626, 251,
2543  -626, 5, 6, 7, 8, 9, 0, 0, -626, 10,
2544  11, 0, 0, -626, 12, 0, 13, 14, 15, 16,
2545  17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
2546  22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
2547  0, 0, 0, 28, 29, 252, 31, 32, 33, 34,
2548  35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
2549  44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
2550  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2551  0, 0, 0, 0, 0, 0, 50, 0, 0, 51,
2552  52, 0, 53, 54, 0, 55, 0, 0, 56, 57,
2553  58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
2554  0, 0, 0, 0, 251, 0, 5, 6, 7, 8,
2555  9, 0, -626, -626, 10, 11, 65, 66, 67, 12,
2556  0, 13, 14, 15, 16, 17, 18, 19, 0, -626,
2557  0, -626, 0, 20, 21, 22, 23, 24, 25, 26,
2558  0, 0, 27, 0, 0, 0, 0, 0, 28, 29,
2559  252, 31, 32, 33, 34, 35, 36, 37, 38, 39,
2560  40, 0, 41, 42, 43, 44, 0, 45, 46, 47,
2561  0, 48, 49, 0, 0, 0, 0, 0, 0, 0,
2562  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2563  0, 50, 0, 0, 51, 52, 0, 53, 54, 0,
2564  55, 0, 0, 56, 57, 58, 59, 60, 61, 62,
2565  63, 64, 0, 0, 0, 0, 0, 0, 0, 251,
2566  0, 5, 6, 7, 8, 9, 0, 0, 0, 10,
2567  11, 65, 66, 67, 12, 0, 13, 14, 15, 16,
2568  17, 18, 19, 0, -626, 0, -626, 0, 20, 21,
2569  22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
2570  0, 0, 0, 28, 29, 252, 31, 32, 33, 34,
2571  35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
2572  44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
2573  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2574  0, 0, 0, 0, 0, 0, 50, 0, 0, 253,
2575  52, 0, 53, 54, 0, 55, 0, 0, 56, 57,
2576  58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
2577  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2578  0, 0, 0, 0, 0, 0, 65, 66, 67, 0,
2579  0, 0, 0, 0, 0, 0, 0, -626, 0, -626,
2580  251, -626, 5, 6, 7, 8, 9, 0, 0, 0,
2581  10, 11, 0, 0, 0, 12, 0, 13, 14, 15,
2582  16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
2583  21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
2584  0, 0, 0, 0, 28, 29, 252, 31, 32, 33,
2585  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2586  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
2587  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2588  0, 0, 0, 0, 0, 0, 0, 50, 0, 0,
2589  51, 52, 0, 53, 54, 0, 55, 0, 0, 56,
2590  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
2591  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2592  0, 0, 0, 0, 0, 0, 0, 65, 66, 67,
2593  0, 0, 0, 0, 0, 0, 0, 0, -626, 0,
2594  -626, 251, -626, 5, 6, 7, 8, 9, 0, 0,
2595  0, 10, 11, 0, 0, 0, 12, 0, 13, 14,
2596  15, 16, 17, 18, 19, 0, 0, 0, 0, 0,
2597  20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
2598  0, 0, 0, 0, 0, 28, 29, 252, 31, 32,
2599  33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
2600  42, 43, 44, 0, 45, 46, 47, 0, 48, 49,
2601  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2602  0, 0, 0, 0, 0, 0, 0, 0, 50, 0,
2603  0, 51, 52, 0, 53, 54, 0, 55, 0, 0,
2604  56, 57, 58, 59, 60, 61, 62, 63, 64, 0,
2605  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2606  0, 0, 0, 0, 0, 0, 0, 0, 65, 66,
2607  67, 0, 0, -626, 4, 0, 5, 6, 7, 8,
2608  9, -626, 0, -626, 10, 11, 0, 0, 0, 12,
2609  0, 13, 14, 15, 16, 17, 18, 19, 0, 0,
2610  0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
2611  0, 0, 27, 0, 0, 0, 0, 0, 28, 29,
2612  30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
2613  40, 0, 41, 42, 43, 44, 0, 45, 46, 47,
2614  0, 48, 49, 0, 0, 0, 0, 0, 0, 0,
2615  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2616  0, 50, 0, 0, 51, 52, 0, 53, 54, 0,
2617  55, 0, 0, 56, 57, 58, 59, 60, 61, 62,
2618  63, 64, 0, 0, 0, 0, 0, 0, 0, 0,
2619  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2620  0, 65, 66, 67, 0, 0, -626, 0, 0, 0,
2621  0, 0, 0, 0, -626, 251, -626, 5, 6, 7,
2622  8, 9, 0, 0, -626, 10, 11, 0, 0, 0,
2623  12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
2624  0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
2625  26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
2626  29, 252, 31, 32, 33, 34, 35, 36, 37, 38,
2627  39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
2628  47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
2629  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2630  0, 0, 50, 0, 0, 51, 52, 0, 53, 54,
2631  0, 55, 0, 0, 56, 57, 58, 59, 60, 61,
2632  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
2633  251, 0, 5, 6, 7, 8, 9, 0, 0, 0,
2634  10, 11, 65, 66, 67, 12, 0, 13, 14, 15,
2635  16, 17, 18, 19, 0, -626, 0, -626, 0, 20,
2636  21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
2637  0, 0, 0, 0, 28, 29, 252, 31, 32, 33,
2638  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2639  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
2640  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2641  0, 0, 0, 0, 0, 0, 0, 50, 0, 0,
2642  51, 52, 0, 53, 54, 0, 55, 0, 0, 56,
2643  57, 58, 59, 60, 61, 62, 63, 64, 0, -626,
2644  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
2645  0, 9, 0, 0, 0, 10, 11, 65, 66, 67,
2646  12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
2647  -626, 0, -626, 0, 20, 21, 22, 23, 24, 25,
2648  26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
2649  29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
2650  39, 40, 204, 41, 42, 43, 44, 0, 45, 46,
2651  47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
2652  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2653  0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
2654  0, 207, 208, 209, 56, 57, 58, 59, 60, 61,
2655  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
2656  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2657  10, 11, 65, 210, 67, 12, 0, 13, 14, 15,
2658  16, 17, 18, 19, 0, 0, 0, 234, 0, 20,
2659  21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
2660  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
2661  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2662  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
2663  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2664  0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
2665  206, 52, 0, 53, 54, 0, 0, 0, 0, 56,
2666  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
2667  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
2668  0, 9, 0, 0, 0, 10, 11, 65, 66, 67,
2669  12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
2670  304, 0, 305, 0, 20, 21, 22, 23, 24, 25,
2671  26, 0, 0, 27, 0, 0, 0, 0, 0, 0,
2672  29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
2673  39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
2674  47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
2675  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2676  0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
2677  0, 0, 0, 0, 56, 57, 58, 59, 60, 61,
2678  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
2679  0, 0, 5, 6, 7, 8, 9, 0, 0, 0,
2680  10, 11, 65, 66, 67, 12, 0, 13, 14, 15,
2681  16, 17, 18, 19, 0, 0, 0, 234, 0, 20,
2682  21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
2683  0, 0, 0, 0, 28, 29, 30, 31, 32, 33,
2684  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2685  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
2686  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2687  0, 0, 0, 0, 0, 0, 0, 50, 0, 0,
2688  51, 52, 0, 53, 54, 0, 55, 0, 0, 56,
2689  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
2690  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
2691  8, 9, 0, 0, 0, 10, 11, 65, 66, 67,
2692  12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
2693  498, 0, 0, 0, 20, 21, 22, 23, 24, 25,
2694  26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
2695  29, 252, 31, 32, 33, 34, 35, 36, 37, 38,
2696  39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
2697  47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
2698  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2699  0, 0, 50, 0, 0, 51, 52, 0, 53, 54,
2700  0, 55, 0, 0, 56, 57, 58, 59, 60, 61,
2701  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
2702  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2703  0, 0, 65, 66, 67, 0, 0, 0, 0, 0,
2704  0, 0, 0, 0, 0, 498, 121, 122, 123, 124,
2705  125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
2706  135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
2707  0, 0, 0, 145, 146, 147, 386, 387, 388, 389,
2708  152, 153, 154, 0, 0, 0, 0, 0, 155, 156,
2709  157, 158, 390, 391, 392, 393, 163, 37, 38, 394,
2710  40, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2711  0, 165, 166, 167, 168, 169, 170, 171, 172, 173,
2712  0, 0, 174, 175, 0, 0, 176, 177, 178, 179,
2713  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2714  180, 181, 0, 0, 0, 0, 0, 0, 0, 0,
2715  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2716  0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
2717  191, 0, 192, 193, 0, 0, 0, 0, 0, 0,
2718  194, 395, 121, 122, 123, 124, 125, 126, 127, 128,
2719  129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
2720  139, 140, 141, 142, 143, 144, 0, 0, 0, 145,
2721  146, 147, 148, 149, 150, 151, 152, 153, 154, 0,
2722  0, 0, 0, 0, 155, 156, 157, 158, 159, 160,
2723  161, 162, 163, 283, 284, 164, 285, 0, 0, 0,
2724  0, 0, 0, 0, 0, 0, 0, 165, 166, 167,
2725  168, 169, 170, 171, 172, 173, 0, 0, 174, 175,
2726  0, 0, 176, 177, 178, 179, 0, 0, 0, 0,
2727  0, 0, 0, 0, 0, 0, 180, 181, 0, 0,
2728  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2729  0, 0, 0, 0, 0, 0, 0, 182, 183, 184,
2730  185, 186, 187, 188, 189, 190, 191, 0, 192, 193,
2731  0, 0, 0, 0, 0, 0, 194, 121, 122, 123,
2732  124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
2733  134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
2734  144, 0, 0, 0, 145, 146, 147, 148, 149, 150,
2735  151, 152, 153, 154, 0, 0, 0, 0, 0, 155,
2736  156, 157, 158, 159, 160, 161, 162, 163, 236, 0,
2737  164, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2738  0, 0, 165, 166, 167, 168, 169, 170, 171, 172,
2739  173, 0, 0, 174, 175, 0, 0, 176, 177, 178,
2740  179, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2741  0, 180, 181, 0, 0, 57, 0, 0, 0, 0,
2742  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2743  0, 0, 182, 183, 184, 185, 186, 187, 188, 189,
2744  190, 191, 0, 192, 193, 0, 0, 0, 0, 0,
2745  0, 194, 121, 122, 123, 124, 125, 126, 127, 128,
2746  129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
2747  139, 140, 141, 142, 143, 144, 0, 0, 0, 145,
2748  146, 147, 148, 149, 150, 151, 152, 153, 154, 0,
2749  0, 0, 0, 0, 155, 156, 157, 158, 159, 160,
2750  161, 162, 163, 0, 0, 164, 0, 0, 0, 0,
2751  0, 0, 0, 0, 0, 0, 0, 165, 166, 167,
2752  168, 169, 170, 171, 172, 173, 0, 0, 174, 175,
2753  0, 0, 176, 177, 178, 179, 0, 0, 0, 0,
2754  0, 0, 0, 0, 0, 0, 180, 181, 0, 0,
2755  57, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2756  0, 0, 0, 0, 0, 0, 0, 182, 183, 184,
2757  185, 186, 187, 188, 189, 190, 191, 0, 192, 193,
2758  0, 0, 0, 0, 0, 0, 194, 121, 122, 123,
2759  124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
2760  134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
2761  144, 0, 0, 0, 145, 146, 147, 148, 149, 150,
2762  151, 152, 153, 154, 0, 0, 0, 0, 0, 155,
2763  156, 157, 158, 159, 160, 161, 162, 163, 0, 0,
2764  164, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2765  0, 0, 165, 166, 167, 168, 169, 170, 171, 172,
2766  173, 0, 0, 174, 175, 0, 0, 176, 177, 178,
2767  179, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2768  0, 180, 181, 0, 0, 0, 0, 0, 0, 0,
2769  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2770  0, 0, 182, 183, 184, 185, 186, 187, 188, 189,
2771  190, 191, 0, 192, 193, 5, 6, 7, 0, 9,
2772  0, 194, 0, 10, 11, 0, 0, 0, 12, 0,
2773  13, 14, 15, 241, 242, 18, 19, 0, 0, 0,
2774  0, 0, 243, 244, 245, 23, 24, 25, 26, 0,
2775  0, 203, 0, 0, 0, 0, 0, 0, 271, 0,
2776  0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2777  0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
2778  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2779  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2780  272, 0, 0, 206, 52, 0, 53, 54, 0, 0,
2781  0, 0, 56, 57, 58, 59, 60, 61, 62, 63,
2782  64, 0, 0, 0, 0, 0, 5, 6, 7, 0,
2783  9, 0, 0, 0, 10, 11, 0, 0, 0, 12,
2784  273, 13, 14, 15, 241, 242, 18, 19, 274, 0,
2785  0, 0, 0, 243, 244, 245, 23, 24, 25, 26,
2786  0, 0, 203, 0, 0, 0, 0, 0, 0, 271,
2787  0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
2788  40, 0, 41, 42, 43, 44, 0, 45, 46, 47,
2789  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2790  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2791  0, 272, 0, 0, 206, 52, 0, 53, 54, 0,
2792  0, 0, 0, 56, 57, 58, 59, 60, 61, 62,
2793  63, 64, 0, 0, 0, 0, 0, 5, 6, 7,
2794  8, 9, 0, 0, 0, 10, 11, 0, 0, 0,
2795  12, 273, 13, 14, 15, 16, 17, 18, 19, 519,
2796  0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
2797  26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
2798  29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
2799  39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
2800  47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
2801  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2802  0, 0, 50, 0, 0, 51, 52, 0, 53, 54,
2803  0, 55, 0, 0, 56, 57, 58, 59, 60, 61,
2804  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
2805  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2806  10, 11, 65, 66, 67, 12, 0, 13, 14, 15,
2807  16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
2808  21, 22, 23, 24, 25, 26, 0, 0, 203, 0,
2809  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
2810  34, 35, 36, 37, 38, 39, 40, 204, 41, 42,
2811  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
2812  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2813  0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
2814  206, 52, 0, 53, 54, 0, 207, 208, 209, 56,
2815  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
2816  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
2817  8, 9, 0, 0, 0, 10, 11, 65, 210, 67,
2818  12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
2819  0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
2820  26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
2821  29, 0, 31, 32, 33, 34, 35, 36, 37, 38,
2822  39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
2823  47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
2824  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2825  0, 0, 50, 0, 0, 51, 52, 0, 53, 54,
2826  0, 55, 0, 0, 56, 57, 58, 59, 60, 61,
2827  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
2828  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2829  10, 11, 65, 66, 67, 12, 0, 13, 14, 15,
2830  241, 242, 18, 19, 0, 0, 0, 0, 0, 243,
2831  244, 245, 23, 24, 25, 26, 0, 0, 203, 0,
2832  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
2833  34, 35, 36, 37, 38, 39, 40, 204, 41, 42,
2834  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
2835  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2836  0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
2837  206, 52, 0, 53, 54, 0, 609, 208, 209, 56,
2838  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
2839  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
2840  0, 9, 0, 0, 0, 10, 11, 65, 210, 67,
2841  12, 0, 13, 14, 15, 241, 242, 18, 19, 0,
2842  0, 0, 0, 0, 243, 244, 245, 23, 24, 25,
2843  26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
2844  29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
2845  39, 40, 204, 41, 42, 43, 44, 0, 45, 46,
2846  47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
2847  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2848  0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
2849  0, 207, 208, 0, 56, 57, 58, 59, 60, 61,
2850  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
2851  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2852  10, 11, 65, 210, 67, 12, 0, 13, 14, 15,
2853  241, 242, 18, 19, 0, 0, 0, 0, 0, 243,
2854  244, 245, 23, 24, 25, 26, 0, 0, 203, 0,
2855  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
2856  34, 35, 36, 37, 38, 39, 40, 204, 41, 42,
2857  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
2858  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2859  0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
2860  206, 52, 0, 53, 54, 0, 0, 208, 209, 56,
2861  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
2862  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
2863  0, 9, 0, 0, 0, 10, 11, 65, 210, 67,
2864  12, 0, 13, 14, 15, 241, 242, 18, 19, 0,
2865  0, 0, 0, 0, 243, 244, 245, 23, 24, 25,
2866  26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
2867  29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
2868  39, 40, 204, 41, 42, 43, 44, 0, 45, 46,
2869  47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
2870  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2871  0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
2872  0, 609, 208, 0, 56, 57, 58, 59, 60, 61,
2873  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
2874  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2875  10, 11, 65, 210, 67, 12, 0, 13, 14, 15,
2876  241, 242, 18, 19, 0, 0, 0, 0, 0, 243,
2877  244, 245, 23, 24, 25, 26, 0, 0, 203, 0,
2878  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
2879  34, 35, 36, 37, 38, 39, 40, 204, 41, 42,
2880  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
2881  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2882  0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
2883  206, 52, 0, 53, 54, 0, 0, 208, 0, 56,
2884  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
2885  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
2886  0, 9, 0, 0, 0, 10, 11, 65, 210, 67,
2887  12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
2888  0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
2889  26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
2890  29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
2891  39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
2892  47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
2893  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2894  0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
2895  0, 512, 0, 0, 56, 57, 58, 59, 60, 61,
2896  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
2897  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2898  10, 11, 65, 210, 67, 12, 0, 13, 14, 15,
2899  241, 242, 18, 19, 0, 0, 0, 0, 0, 243,
2900  244, 245, 23, 24, 25, 26, 0, 0, 203, 0,
2901  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
2902  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2903  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
2904  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2905  0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
2906  206, 52, 0, 53, 54, 0, 207, 0, 0, 56,
2907  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
2908  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
2909  0, 9, 0, 0, 0, 10, 11, 65, 210, 67,
2910  12, 0, 13, 14, 15, 241, 242, 18, 19, 0,
2911  0, 0, 0, 0, 243, 244, 245, 23, 24, 25,
2912  26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
2913  29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
2914  39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
2915  47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
2916  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2917  0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
2918  0, 817, 0, 0, 56, 57, 58, 59, 60, 61,
2919  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
2920  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2921  10, 11, 65, 210, 67, 12, 0, 13, 14, 15,
2922  241, 242, 18, 19, 0, 0, 0, 0, 0, 243,
2923  244, 245, 23, 24, 25, 26, 0, 0, 203, 0,
2924  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
2925  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2926  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
2927  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2928  0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
2929  206, 52, 0, 53, 54, 0, 512, 0, 0, 56,
2930  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
2931  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
2932  0, 9, 0, 0, 0, 10, 11, 65, 210, 67,
2933  12, 0, 13, 14, 15, 241, 242, 18, 19, 0,
2934  0, 0, 0, 0, 243, 244, 245, 23, 24, 25,
2935  26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
2936  29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
2937  39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
2938  47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
2939  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2940  0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
2941  0, 609, 0, 0, 56, 57, 58, 59, 60, 61,
2942  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
2943  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2944  10, 11, 65, 210, 67, 12, 0, 13, 14, 15,
2945  241, 242, 18, 19, 0, 0, 0, 0, 0, 243,
2946  244, 245, 23, 24, 25, 26, 0, 0, 203, 0,
2947  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
2948  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2949  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
2950  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2951  0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
2952  206, 52, 0, 53, 54, 0, 0, 0, 0, 56,
2953  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
2954  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
2955  0, 9, 0, 0, 0, 10, 11, 65, 210, 67,
2956  12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
2957  0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
2958  26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
2959  29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
2960  39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
2961  47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
2962  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2963  0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
2964  0, 0, 0, 0, 56, 57, 58, 59, 60, 61,
2965  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
2966  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2967  10, 11, 65, 210, 67, 12, 0, 13, 14, 15,
2968  16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
2969  21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
2970  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
2971  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2972  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
2973  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2974  0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
2975  206, 52, 0, 53, 54, 0, 0, 0, 0, 56,
2976  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
2977  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
2978  0, 9, 0, 0, 0, 10, 11, 65, 66, 67,
2979  12, 0, 13, 14, 15, 241, 242, 18, 19, 0,
2980  0, 0, 0, 0, 243, 244, 245, 23, 24, 25,
2981  26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
2982  271, 0, 0, 32, 33, 34, 35, 36, 37, 38,
2983  39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
2984  47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2985  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2986  0, 0, 272, 0, 0, 325, 52, 0, 53, 54,
2987  0, 326, 0, 0, 56, 57, 58, 59, 60, 61,
2988  62, 63, 64, 0, 0, 0, 0, 0, 5, 6,
2989  7, 0, 9, 0, 0, 0, 10, 11, 0, 0,
2990  0, 12, 273, 13, 14, 15, 241, 242, 18, 19,
2991  0, 0, 0, 0, 0, 243, 244, 245, 23, 24,
2992  25, 26, 0, 0, 203, 0, 0, 0, 0, 0,
2993  0, 271, 0, 0, 32, 33, 34, 35, 36, 37,
2994  38, 39, 40, 0, 41, 42, 43, 44, 0, 45,
2995  46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
2996  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2997  0, 0, 0, 367, 0, 0, 51, 52, 0, 53,
2998  54, 0, 55, 0, 0, 56, 57, 58, 59, 60,
2999  61, 62, 63, 64, 0, 0, 0, 0, 0, 5,
3000  6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
3001  0, 0, 12, 273, 13, 14, 15, 241, 242, 18,
3002  19, 0, 0, 0, 0, 0, 243, 244, 245, 23,
3003  24, 25, 26, 0, 0, 203, 0, 0, 0, 0,
3004  0, 0, 271, 0, 0, 32, 33, 34, 375, 36,
3005  37, 38, 376, 40, 0, 41, 42, 43, 44, 0,
3006  45, 46, 47, 0, 0, 0, 0, 0, 0, 0,
3007  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3008  0, 377, 0, 0, 378, 0, 0, 206, 52, 0,
3009  53, 54, 0, 0, 0, 0, 56, 57, 58, 59,
3010  60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
3011  5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
3012  0, 0, 0, 12, 273, 13, 14, 15, 241, 242,
3013  18, 19, 0, 0, 0, 0, 0, 243, 244, 245,
3014  23, 24, 25, 26, 0, 0, 203, 0, 0, 0,
3015  0, 0, 0, 271, 0, 0, 32, 33, 34, 375,
3016  36, 37, 38, 376, 40, 0, 41, 42, 43, 44,
3017  0, 45, 46, 47, 0, 0, 0, 0, 0, 0,
3018  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3019  0, 0, 0, 0, 0, 378, 0, 0, 206, 52,
3020  0, 53, 54, 0, 0, 0, 0, 56, 57, 58,
3021  59, 60, 61, 62, 63, 64, 0, 0, 0, 0,
3022  0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
3023  11, 0, 0, 0, 12, 273, 13, 14, 15, 241,
3024  242, 18, 19, 0, 0, 0, 0, 0, 243, 244,
3025  245, 23, 24, 25, 26, 0, 0, 203, 0, 0,
3026  0, 0, 0, 0, 271, 0, 0, 32, 33, 34,
3027  35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
3028  44, 0, 45, 46, 47, 0, 0, 0, 0, 0,
3029  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3030  0, 0, 0, 0, 0, 0, 272, 0, 0, 325,
3031  52, 0, 53, 54, 0, 0, 0, 0, 56, 57,
3032  58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
3033  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
3034  10, 11, 0, 0, 0, 12, 273, 13, 14, 15,
3035  241, 242, 18, 19, 0, 0, 0, 0, 0, 243,
3036  244, 245, 23, 24, 25, 26, 0, 0, 203, 0,
3037  0, 0, 0, 0, 0, 271, 0, 0, 32, 33,
3038  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
3039  43, 44, 0, 45, 46, 47, 0, 0, 0, 0,
3040  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3041  0, 0, 0, 0, 0, 0, 0, 899, 0, 0,
3042  206, 52, 0, 53, 54, 0, 0, 0, 0, 56,
3043  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
3044  0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
3045  0, 10, 11, 0, 0, 0, 12, 273, 13, 14,
3046  15, 241, 242, 18, 19, 0, 0, 0, 0, 0,
3047  243, 244, 245, 23, 24, 25, 26, 0, 0, 203,
3048  0, 0, 0, 0, 0, 0, 271, 0, 0, 32,
3049  33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
3050  42, 43, 44, 0, 45, 46, 47, 0, 0, 0,
3051  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3052  0, 0, 0, 0, 0, 0, 0, 0, 976, 0,
3053  0, 206, 52, 0, 53, 54, 0, 0, 0, 0,
3054  56, 57, 58, 59, 60, 61, 62, 63, 64, 0,
3055  0, 0, 0, 554, 555, 0, 0, 556, 0, 0,
3056  0, 0, 0, 0, 0, 0, 0, 0, 273, 165,
3057  166, 167, 168, 169, 170, 171, 172, 173, 0, 0,
3058  174, 175, 0, 0, 176, 177, 178, 179, 0, 0,
3059  0, 0, 0, 0, 0, 0, 0, 0, 180, 181,
3060  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3061  0, 0, 0, 0, 0, 0, 0, 0, 0, 182,
3062  183, 184, 185, 186, 187, 188, 189, 190, 191, 0,
3063  192, 193, 562, 563, 0, 0, 564, 0, 194, 0,
3064  0, 0, 0, 0, 0, 0, 0, 0, 165, 166,
3065  167, 168, 169, 170, 171, 172, 173, 0, 0, 174,
3066  175, 0, 0, 176, 177, 178, 179, 0, 0, 0,
3067  0, 0, 0, 0, 0, 0, 0, 180, 181, 0,
3068  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3069  0, 0, 0, 0, 0, 0, 0, 0, 182, 183,
3070  184, 185, 186, 187, 188, 189, 190, 191, 0, 192,
3071  193, 599, 563, 0, 0, 600, 0, 194, 0, 0,
3072  0, 0, 0, 0, 0, 0, 0, 165, 166, 167,
3073  168, 169, 170, 171, 172, 173, 0, 0, 174, 175,
3074  0, 0, 176, 177, 178, 179, 0, 0, 0, 0,
3075  0, 0, 0, 0, 0, 0, 180, 181, 0, 0,
3076  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3077  0, 0, 0, 0, 0, 0, 0, 182, 183, 184,
3078  185, 186, 187, 188, 189, 190, 191, 0, 192, 193,
3079  613, 555, 0, 0, 614, 0, 194, 0, 0, 0,
3080  0, 0, 0, 0, 0, 0, 165, 166, 167, 168,
3081  169, 170, 171, 172, 173, 0, 0, 174, 175, 0,
3082  0, 176, 177, 178, 179, 0, 0, 0, 0, 0,
3083  0, 0, 0, 0, 0, 180, 181, 0, 0, 0,
3084  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3085  0, 0, 0, 0, 0, 0, 182, 183, 184, 185,
3086  186, 187, 188, 189, 190, 191, 0, 192, 193, 616,
3087  563, 0, 0, 617, 0, 194, 0, 0, 0, 0,
3088  0, 0, 0, 0, 0, 165, 166, 167, 168, 169,
3089  170, 171, 172, 173, 0, 0, 174, 175, 0, 0,
3090  176, 177, 178, 179, 0, 0, 0, 0, 0, 0,
3091  0, 0, 0, 0, 180, 181, 0, 0, 0, 0,
3092  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3093  0, 0, 0, 0, 0, 182, 183, 184, 185, 186,
3094  187, 188, 189, 190, 191, 0, 192, 193, 640, 555,
3095  0, 0, 641, 0, 194, 0, 0, 0, 0, 0,
3096  0, 0, 0, 0, 165, 166, 167, 168, 169, 170,
3097  171, 172, 173, 0, 0, 174, 175, 0, 0, 176,
3098  177, 178, 179, 0, 0, 0, 0, 0, 0, 0,
3099  0, 0, 0, 180, 181, 0, 0, 0, 0, 0,
3100  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3101  0, 0, 0, 0, 182, 183, 184, 185, 186, 187,
3102  188, 189, 190, 191, 0, 192, 193, 643, 563, 0,
3103  0, 644, 0, 194, 0, 0, 0, 0, 0, 0,
3104  0, 0, 0, 165, 166, 167, 168, 169, 170, 171,
3105  172, 173, 0, 0, 174, 175, 0, 0, 176, 177,
3106  178, 179, 0, 0, 0, 0, 0, 0, 0, 0,
3107  0, 0, 180, 181, 0, 0, 0, 0, 0, 0,
3108  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3109  0, 0, 0, 182, 183, 184, 185, 186, 187, 188,
3110  189, 190, 191, 0, 192, 193, 728, 555, 0, 0,
3111  729, 0, 194, 0, 0, 0, 0, 0, 0, 0,
3112  0, 0, 165, 166, 167, 168, 169, 170, 171, 172,
3113  173, 0, 0, 174, 175, 0, 0, 176, 177, 178,
3114  179, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3115  0, 180, 181, 0, 0, 0, 0, 0, 0, 0,
3116  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3117  0, 0, 182, 183, 184, 185, 186, 187, 188, 189,
3118  190, 191, 0, 192, 193, 731, 563, 0, 0, 732,
3119  0, 194, 0, 0, 0, 0, 0, 0, 0, 0,
3120  0, 165, 166, 167, 168, 169, 170, 171, 172, 173,
3121  0, 0, 174, 175, 0, 0, 176, 177, 178, 179,
3122  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3123  180, 181, 0, 0, 0, 0, 0, 0, 0, 0,
3124  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3125  0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
3126  191, 0, 192, 193, 738, 555, 0, 0, 739, 0,
3127  194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3128  165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
3129  0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
3130  0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
3131  181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3132  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3133  182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
3134  0, 192, 193, 1008, 555, 0, 0, 1009, 0, 194,
3135  0, 0, 0, 0, 0, 0, 0, 0, 0, 165,
3136  166, 167, 168, 169, 170, 171, 172, 173, 0, 0,
3137  174, 175, 0, 0, 176, 177, 178, 179, 0, 0,
3138  0, 0, 0, 0, 0, 0, 0, 0, 180, 181,
3139  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3140  0, 0, 0, 0, 0, 0, 0, 0, 0, 182,
3141  183, 184, 185, 186, 187, 188, 189, 190, 191, 0,
3142  192, 193, 1039, 555, 0, 0, 1040, 0, 194, 0,
3143  0, 0, 0, 0, 0, 0, 0, 0, 165, 166,
3144  167, 168, 169, 170, 171, 172, 173, 0, 0, 174,
3145  175, 0, 0, 176, 177, 178, 179, 0, 0, 0,
3146  0, 0, 0, 0, 0, 0, 0, 180, 181, 0,
3147  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3148  0, 0, 0, 0, 0, 0, 0, 0, 182, 183,
3149  184, 185, 186, 187, 188, 189, 190, 191, 0, 192,
3150  193, 1042, 563, 0, 0, 1043, 0, 194, 0, 0,
3151  0, 0, 0, 0, 0, 0, 0, 165, 166, 167,
3152  168, 169, 170, 171, 172, 173, 0, 0, 174, 175,
3153  0, 0, 176, 177, 178, 179, 0, 0, 0, 0,
3154  0, 0, 0, 0, 0, 0, 180, 181, 329, 330,
3155  331, 332, 333, 334, 335, 336, 337, 338, 339, 340,
3156  341, 0, 0, 342, 343, 0, 0, 182, 183, 184,
3157  185, 186, 187, 188, 189, 190, 191, 0, 192, 193,
3158  0, 0, 0, 0, 0, 0, 194, 0, 0, 0,
3159  0, 0, 0, 0, 344, 0, 345, 346, 347, 348,
3160  349, 350, 351, 352, 353, 354, 0, 0, 0, 0,
3161  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3162  0, 234
3163 };
3164 
3165 #define yypact_value_is_default(yystate) \
3166  ((yystate) == (-816))
3167 
3168 #define yytable_value_is_error(yytable_value) \
3169  ((yytable_value) == (-627))
3170 
3171 static const yytype_int16 yycheck[] =
3172 {
3173  2, 27, 57, 29, 55, 16, 17, 356, 98, 20,
3174  233, 8, 28, 69, 89, 361, 328, 92, 81, 355,
3175  328, 357, 2, 223, 4, 576, 22, 4, 578, 595,
3176  81, 28, 686, 92, 8, 258, 92, 422, 261, 575,
3177  414, 96, 93, 94, 95, 265, 88, 89, 422, 269,
3178  92, 53, 54, 469, 28, 615, 65, 787, 51, 8,
3179  57, 670, 442, 16, 17, 401, 473, 20, 716, 418,
3180  76, 55, 720, 16, 17, 460, 2, 20, 4, 28,
3181  76, 417, 642, 419, 378, 778, 27, 874, 26, 904,
3182  16, 17, 25, 289, 20, 291, 25, 293, 63, 96,
3183  53, 297, 26, 519, 908, 66, 69, 872, 63, 445,
3184  53, 54, 253, 25, 25, 1, 508, 87, 25, 511,
3185  775, 136, 471, 89, 778, 51, 13, 89, 143, 55,
3186  52, 25, 0, 787, 56, 87, 472, 87, 16, 17,
3187  66, 25, 20, 143, 109, 800, 111, 87, 78, 115,
3188  25, 25, 89, 115, 109, 81, 111, 99, 141, 132,
3189  143, 13, 88, 89, 63, 135, 92, 93, 94, 95,
3190  730, 737, 13, 37, 38, 725, 941, 142, 115, 745,
3191  122, 741, 13, 135, 325, 135, 15, 142, 17, 1004,
3192  120, 233, 742, 235, 132, 135, 255, 806, 807, 255,
3193  141, 424, 143, 136, 897, 428, 993, 136, 132, 138,
3194  433, 274, 1016, 112, 138, 217, 227, 947, 229, 230,
3195  262, 223, 56, 274, 136, 136, 449, 138, 230, 136,
3196  995, 431, 581, 119, 309, 310, 311, 312, 623, 686,
3197  246, 13, 136, 897, 593, 271, 582, 142, 622, 623,
3198  904, 658, 136, 633, 141, 141, 143, 143, 594, 952,
3199  253, 136, 136, 1028, 273, 142, 13, 309, 310, 311,
3200  312, 251, 314, 315, 227, 326, 229, 886, 138, 143,
3201  206, 697, 930, 143, 227, 63, 229, 362, 363, 141,
3202  486, 143, 255, 947, 844, 518, 846, 493, 592, 691,
3203  141, 227, 143, 229, 230, 364, 856, 233, 364, 235,
3204  141, 861, 143, 672, 240, 674, 136, 853, 1011, 142,
3205  362, 363, 28, 143, 380, 251, 29, 253, 308, 89,
3206  89, 308, 325, 313, 112, 377, 262, 744, 142, 746,
3207  787, 115, 326, 790, 26, 356, 136, 658, 274, 227,
3208  1004, 229, 115, 87, 356, 115, 115, 966, 102, 25,
3209  357, 136, 323, 87, 136, 136, 932, 328, 143, 141,
3210  323, 143, 87, 25, 704, 328, 87, 927, 928, 930,
3211  726, 711, 308, 309, 310, 311, 312, 313, 314, 315,
3212  698, 138, 89, 115, 141, 89, 143, 323, 87, 325,
3213  326, 135, 328, 715, 401, 87, 469, 418, 138, 51,
3214  113, 135, 612, 636, 136, 56, 418, 637, 469, 134,
3215  135, 115, 419, 439, 135, 115, 992, 139, 430, 431,
3216  356, 143, 358, 744, 87, 746, 362, 363, 87, 90,
3217  442, 991, 439, 404, 405, 134, 135, 138, 445, 115,
3218  132, 377, 134, 135, 89, 70, 519, 904, 136, 906,
3219  471, 136, 442, 115, 132, 439, 138, 87, 519, 471,
3220  136, 414, 70, 139, 1024, 472, 1026, 143, 404, 405,
3221  87, 1041, 135, 868, 136, 134, 135, 139, 63, 138,
3222  439, 143, 418, 52, 868, 54, 55, 56, 57, 138,
3223  947, 139, 949, 87, 89, 507, 508, 954, 87, 511,
3224  125, 126, 127, 26, 457, 135, 442, 543, 574, 575,
3225  743, 37, 38, 115, 883, 884, 452, 134, 135, 888,
3226  115, 890, 588, 892, 109, 561, 111, 112, 140, 762,
3227  686, 14, 15, 469, 52, 471, 54, 55, 56, 57,
3228  773, 135, 558, 87, 596, 134, 135, 1004, 56, 1006,
3229  566, 761, 133, 559, 206, 112, 1013, 569, 26, 63,
3230  581, 567, 918, 686, 87, 638, 136, 136, 924, 581,
3231  89, 112, 593, 1030, 626, 582, 112, 638, 112, 615,
3232  606, 593, 70, 519, 96, 601, 136, 594, 240, 601,
3233  134, 135, 17, 63, 1051, 601, 115, 56, 63, 606,
3234  612, 253, 67, 141, 26, 109, 642, 111, 112, 132,
3235  25, 134, 135, 142, 577, 138, 136, 136, 136, 87,
3236  133, 633, 606, 139, 697, 781, 136, 860, 63, 785,
3237  999, 1000, 1001, 1002, 132, 571, 697, 573, 871, 109,
3238  87, 111, 112, 633, 109, 581, 111, 606, 733, 749,
3239  686, 736, 686, 142, 136, 136, 668, 593, 670, 595,
3240  596, 1020, 136, 136, 132, 87, 134, 135, 734, 622,
3241  138, 115, 89, 325, 109, 1021, 111, 112, 87, 691,
3242  1049, 733, 747, 136, 736, 10, 138, 134, 135, 705,
3243  626, 8, 13, 138, 730, 89, 712, 633, 115, 133,
3244  712, 115, 638, 715, 716, 741, 718, 136, 720, 136,
3245  132, 63, 134, 135, 52, 136, 138, 136, 2, 136,
3246  4, 115, 87, 54, 52, 134, 135, 698, 87, 136,
3247  701, 702, 16, 17, 65, 66, 20, 708, 709, 775,
3248  747, 897, 136, 804, 52, 901, 136, 781, 904, 761,
3249  906, 687, 715, 117, 690, 140, 692, 109, 843, 111,
3250  112, 697, 698, 87, 800, 701, 702, 51, 70, 134,
3251  135, 15, 708, 709, 897, 134, 135, 133, 901, 136,
3252  87, 904, 66, 906, 120, 136, 87, 853, 115, 855,
3253  58, 843, 136, 136, 806, 807, 862, 733, 87, 136,
3254  736, 737, 70, 136, 88, 89, 141, 10, 92, 745,
3255  134, 135, 10, 133, 52, 89, 54, 55, 56, 57,
3256  58, 123, 124, 125, 126, 127, 838, 134, 135, 841,
3257  98, 99, 70, 134, 135, 896, 136, 90, 2, 89,
3258  4, 115, 809, 810, 9, 134, 135, 89, 1004, 89,
3259  1006, 136, 139, 91, 122, 1011, 917, 1013, 829, 136,
3260  98, 99, 136, 897, 136, 115, 136, 901, 804, 136,
3261  904, 120, 906, 115, 886, 115, 56, 133, 136, 815,
3262  10, 1004, 136, 1006, 122, 133, 136, 51, 1011, 110,
3263  1013, 55, 138, 829, 136, 1051, 136, 40, 41, 42,
3264  43, 44, 54, 55, 840, 57, 136, 843, 136, 70,
3265  136, 847, 848, 65, 66, 851, 136, 81, 930, 571,
3266  56, 573, 206, 136, 85, 86, 136, 138, 1051, 93,
3267  94, 95, 96, 93, 136, 52, 972, 54, 55, 56,
3268  57, 877, 878, 227, 95, 229, 230, 452, 712, 233,
3269  769, 235, 1023, 686, 966, 750, 240, 893, 1016, 1022,
3270  896, 122, 123, 124, 125, 126, 127, 251, 101, 253,
3271  1004, 297, 1006, 59, 91, 96, 781, 1011, 262, 1013,
3272  97, 917, 938, 901, 52, 921, 54, 55, 56, 57,
3273  59, 60, 61, 62, 961, 962, 932, 897, 778, 1020,
3274  967, 398, 969, 970, 70, 1041, -1, -1, 1020, -1,
3275  1022, 1023, -1, -1, 1021, -1, -1, 1051, -1, 85,
3276  86, -1, -1, 91, 308, 309, 310, 311, 312, 313,
3277  314, 315, -1, -1, -1, 687, -1, -1, 690, 323,
3278  692, 325, 206, -1, 328, -1, 982, 52, 984, 54,
3279  55, 56, 57, -1, 990, -1, 992, 123, 124, 125,
3280  126, 127, 16, 17, -1, -1, 20, 1034, 1035, 1036,
3281  1037, -1, 356, -1, 358, -1, 240, -1, 362, 363,
3282  -1, -1, -1, -1, 1020, -1, 91, 251, -1, 253,
3283  1057, -1, 97, 377, 48, 49, -1, -1, -1, 53,
3284  54, 52, -1, 54, 55, 56, 57, 58, -1, -1,
3285  274, -1, 66, 67, -1, -1, -1, -1, -1, 70,
3286  404, 405, 52, -1, 54, 55, 56, 57, -1, -1,
3287  -1, -1, -1, 52, 418, 54, 55, 56, 57, 58,
3288  91, -1, -1, -1, 308, -1, 97, 98, 99, 313,
3289  -1, 70, -1, -1, -1, -1, -1, -1, 442, -1,
3290  70, 325, 326, 815, -1, -1, -1, -1, 452, -1,
3291  -1, 122, 91, -1, 125, 85, 86, -1, 97, 98,
3292  99, -1, -1, -1, -1, -1, -1, 471, 840, -1,
3293  -1, -1, 143, -1, 358, 847, 848, -1, -1, 851,
3294  -1, -1, -1, 122, -1, -1, 125, -1, -1, -1,
3295  120, 121, 122, 123, 124, 125, 126, 127, -1, 138,
3296  -1, 0, -1, -1, -1, 877, 878, -1, -1, 8,
3297  9, 10, -1, -1, 13, 14, 15, -1, 17, -1,
3298  -1, 893, 2, -1, 4, -1, -1, 26, 27, -1,
3299  204, -1, -1, 207, 208, 209, 210, -1, 37, 38,
3300  -1, 40, 41, 42, 43, 44, -1, -1, -1, 921,
3301  -1, -1, -1, 227, -1, 229, 230, -1, 442, -1,
3302  -1, -1, -1, -1, -1, -1, -1, 571, 452, 573,
3303  -1, 51, -1, -1, -1, 55, -1, 581, 52, -1,
3304  54, 55, 56, 57, 58, 469, -1, -1, 87, 593,
3305  -1, 595, 596, -1, -1, -1, 70, -1, -1, -1,
3306  -1, 81, -1, -1, -1, -1, -1, -1, -1, -1,
3307  982, 110, 984, 93, 94, 95, 96, 91, 990, -1,
3308  -1, -1, 626, 97, 98, 99, -1, -1, -1, 633,
3309  -1, -1, -1, 132, 133, 519, 135, -1, -1, 138,
3310  139, -1, 141, -1, 143, -1, -1, -1, 122, 323,
3311  -1, 125, -1, -1, 328, 329, 330, 331, 332, 333,
3312  334, 335, 336, 337, 338, 339, 340, 341, 342, 343,
3313  344, 345, 346, 347, 348, 349, 350, 351, 352, 353,
3314  354, -1, 356, 687, -1, -1, 690, 571, 692, 573,
3315  -1, -1, -1, -1, 698, -1, -1, 701, 702, -1,
3316  473, -1, -1, -1, 708, 709, -1, -1, -1, -1,
3317  -1, 595, -1, -1, -1, -1, -1, -1, -1, -1,
3318  -1, -1, -1, -1, -1, -1, 206, -1, -1, 733,
3319  404, 405, 736, 737, -1, -1, -1, -1, 412, 413,
3320  414, 745, -1, -1, 418, -1, 420, 421, 422, 633,
3321  -1, -1, -1, -1, 638, -1, -1, -1, -1, -1,
3322  240, -1, -1, -1, -1, -1, -1, 441, -1, -1,
3323  -1, 251, 446, 253, -1, -1, -1, -1, -1, -1,
3324  -1, -1, -1, 457, -1, -1, 460, -1, -1, -1,
3325  -1, -1, -1, -1, 274, -1, -1, 471, -1, -1,
3326  -1, -1, -1, 687, -1, -1, 690, -1, 692, -1,
3327  -1, 815, -1, 697, -1, -1, -1, -1, -1, -1,
3328  -1, -1, -1, 497, -1, 829, -1, -1, 308, -1,
3329  -1, -1, -1, 313, -1, -1, 840, -1, 512, 843,
3330  -1, -1, -1, 847, 848, 325, 326, 851, -1, -1,
3331  -1, -1, -1, 737, -1, -1, -1, -1, -1, -1,
3332  -1, 745, -1, -1, -1, -1, -1, -1, -1, 2,
3333  -1, 4, -1, 877, 878, -1, -1, -1, 358, 652,
3334  -1, -1, -1, -1, -1, 658, -1, -1, -1, 893,
3335  2, -1, 4, -1, -1, -1, -1, -1, -1, -1,
3336  -1, -1, -1, 577, -1, -1, -1, 581, -1, -1,
3337  -1, -1, -1, 686, -1, -1, -1, 921, 51, 593,
3338  804, -1, -1, -1, -1, -1, -1, -1, 932, -1,
3339  -1, 815, -1, -1, -1, 609, -1, -1, -1, 51,
3340  -1, -1, -1, 55, -1, -1, -1, -1, 622, 623,
3341  -1, -1, -1, -1, -1, -1, 840, -1, -1, -1,
3342  -1, -1, 442, 847, 848, -1, -1, 851, -1, 81,
3343  -1, 744, 452, 746, -1, -1, -1, 2, 982, 4,
3344  984, 93, 94, 95, -1, -1, 990, -1, 992, 469,
3345  -1, -1, 666, 877, 878, -1, 769, 770, -1, -1,
3346  -1, -1, -1, -1, -1, 778, -1, -1, -1, 893,
3347  -1, -1, 896, -1, 787, -1, 1020, -1, -1, -1,
3348  694, -1, -1, -1, 698, 699, 51, 701, 702, -1,
3349  -1, -1, -1, 917, 708, 709, -1, 921, -1, 519,
3350  -1, 715, -1, -1, -1, -1, -1, -1, 932, -1,
3351  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3352  -1, -1, -1, -1, -1, -1, -1, -1, 93, -1,
3353  -1, -1, -1, 206, -1, -1, -1, -1, 752, -1,
3354  -1, -1, 756, 757, -1, 759, 760, 54, -1, -1,
3355  -1, 571, -1, 573, 206, -1, -1, -1, 982, 872,
3356  984, 874, -1, 777, -1, -1, 990, 240, 992, -1,
3357  -1, -1, -1, -1, -1, 595, -1, -1, 251, -1,
3358  253, -1, -1, -1, 897, -1, -1, -1, 240, -1,
3359  -1, 904, -1, -1, -1, -1, -1, -1, -1, 251,
3360  -1, 253, -1, 817, -1, -1, -1, 821, -1, -1,
3361  -1, -1, -1, 633, -1, 829, -1, -1, 638, -1,
3362  -1, -1, 274, -1, -1, -1, -1, -1, 941, 942,
3363  -1, -1, -1, -1, 947, 308, 850, -1, -1, -1,
3364  313, 206, -1, -1, -1, -1, -1, -1, -1, -1,
3365  -1, -1, 325, 867, 868, -1, 308, -1, -1, -1,
3366  -1, 313, -1, -1, -1, -1, -1, 687, -1, -1,
3367  690, -1, 692, 325, 326, 240, -1, 697, -1, -1,
3368  993, -1, 995, -1, -1, 358, 251, -1, 253, -1,
3369  -1, 1004, -1, -1, -1, -1, -1, 204, -1, -1,
3370  207, 208, 209, -1, -1, -1, 358, -1, -1, -1,
3371  -1, -1, -1, -1, -1, 1028, -1, 737, -1, -1,
3372  -1, -1, -1, -1, -1, 745, -1, -1, -1, -1,
3373  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3374  -1, -1, -1, 308, -1, -1, -1, -1, 313, -1,
3375  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3376  325, -1, -1, 328, -1, -1, -1, -1, -1, 442,
3377  -1, -1, -1, -1, -1, -1, -1, -1, -1, 452,
3378  -1, -1, -1, -1, 804, -1, -1, -1, -1, -1,
3379  442, -1, -1, 358, -1, 815, -1, -1, -1, -1,
3380  452, -1, -1, -1, -1, -1, 1020, -1, -1, -1,
3381  -1, -1, -1, -1, -1, -1, 323, 469, -1, -1,
3382  840, 328, -1, -1, -1, -1, -1, 847, 848, -1,
3383  -1, 851, -1, -1, -1, -1, -1, -1, -1, -1,
3384  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3385  -1, -1, -1, -1, -1, -1, -1, 877, 878, -1,
3386  -1, -1, -1, -1, -1, -1, -1, 519, -1, -1,
3387  -1, -1, -1, 893, -1, -1, 896, 442, -1, 70,
3388  71, 72, 73, 74, 75, 76, 77, 452, 79, 80,
3389  -1, -1, -1, -1, 85, 86, -1, 917, 571, -1,
3390  573, 921, -1, -1, -1, -1, 413, 414, -1, -1,
3391  -1, -1, 932, -1, -1, 422, -1, -1, -1, 571,
3392  -1, 573, 595, -1, -1, -1, -1, 118, 119, 120,
3393  121, 122, 123, 124, 125, 126, 127, -1, -1, -1,
3394  -1, -1, -1, 595, -1, -1, -1, -1, -1, -1,
3395  457, -1, -1, 460, -1, -1, -1, -1, -1, -1,
3396  633, -1, 982, -1, 984, -1, -1, -1, -1, -1,
3397  990, -1, 992, -1, -1, -1, -1, -1, -1, -1,
3398  -1, 633, -1, -1, -1, -1, 638, -1, -1, -1,
3399  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3400  -1, -1, -1, -1, -1, 512, 571, -1, 573, -1,
3401  -1, -1, -1, -1, 687, -1, -1, 690, -1, 692,
3402  -1, -1, -1, -1, -1, -1, 678, -1, -1, -1,
3403  595, -1, -1, -1, -1, 687, -1, -1, 690, -1,
3404  692, -1, -1, -1, -1, 697, -1, -1, -1, -1,
3405  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3406  -1, -1, -1, -1, 737, -1, -1, -1, 633, -1,
3407  577, -1, 745, -1, -1, -1, -1, -1, -1, -1,
3408  -1, -1, -1, -1, -1, 737, -1, -1, -1, -1,
3409  -1, -1, -1, 745, -1, -1, -1, -1, -1, -1,
3410  -1, -1, 609, -1, -1, -1, -1, -1, -1, -1,
3411  -1, -1, -1, -1, -1, 622, 623, -1, -1, -1,
3412  -1, -1, 687, -1, -1, 690, -1, 692, -1, -1,
3413  -1, -1, -1, 698, -1, -1, -1, -1, -1, -1,
3414  -1, -1, 815, -1, -1, -1, -1, -1, -1, -1,
3415  -1, -1, 804, -1, -1, -1, -1, -1, -1, 666,
3416  -1, -1, -1, 815, -1, -1, -1, 840, -1, -1,
3417  -1, -1, 737, -1, 847, 848, -1, -1, 851, -1,
3418  745, -1, -1, -1, -1, -1, -1, 694, 840, -1,
3419  -1, -1, -1, -1, -1, 847, 848, -1, -1, 851,
3420  -1, -1, -1, -1, 877, 878, -1, -1, 715, -1,
3421  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3422  893, -1, -1, -1, -1, 877, 878, -1, -1, -1,
3423  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3424  -1, 893, -1, -1, 896, -1, -1, -1, 921, -1,
3425  815, 70, 71, 72, 73, 74, 75, 76, -1, 932,
3426  79, 80, -1, -1, -1, 917, 85, 86, -1, 921,
3427  777, -1, -1, -1, -1, 840, -1, -1, -1, -1,
3428  932, -1, 847, 848, -1, -1, 851, -1, -1, -1,
3429  -1, -1, -1, -1, -1, -1, -1, -1, -1, 118,
3430  119, 120, 121, 122, 123, 124, 125, 126, 127, 982,
3431  817, 984, 877, 878, -1, -1, -1, 990, -1, 992,
3432  -1, -1, -1, -1, -1, -1, -1, -1, 893, -1,
3433  982, -1, 984, -1, -1, -1, -1, -1, 990, -1,
3434  992, -1, -1, 850, 70, 71, 72, 73, 74, 75,
3435  76, -1, 917, 79, 80, -1, 921, -1, -1, 85,
3436  86, 868, -1, -1, -1, -1, -1, 932, -1, -1,
3437  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3438  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3439  -1, -1, 118, 119, 120, 121, 122, 123, 124, 125,
3440  126, 127, -1, -1, -1, -1, -1, -1, -1, -1,
3441  -1, -1, -1, -1, -1, -1, -1, 982, -1, 984,
3442  -1, -1, -1, -1, -1, 990, -1, 992, 0, 1,
3443  -1, 3, 4, 5, 6, 7, -1, -1, -1, 11,
3444  12, -1, -1, -1, 16, -1, 18, 19, 20, 21,
3445  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
3446  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
3447  -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
3448  52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
3449  62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
3450  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3451  -1, -1, -1, -1, -1, -1, 88, -1, -1, 91,
3452  92, -1, 94, 95, -1, 97, -1, -1, 100, 101,
3453  102, 103, 104, 105, 106, 107, 108, 0, -1, -1,
3454  -1, -1, -1, -1, -1, 8, 9, 10, -1, -1,
3455  13, 14, 15, -1, 17, -1, 128, 129, 130, -1,
3456  44, -1, -1, 26, 27, 28, 29, -1, -1, 141,
3457  -1, 143, -1, -1, 37, 38, -1, 40, 41, 42,
3458  43, 44, -1, -1, -1, -1, 70, 71, 72, 73,
3459  74, 75, 76, 77, 78, 79, 80, 81, 82, -1,
3460  -1, 85, 86, -1, -1, -1, -1, 70, 71, 72,
3461  73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
3462  -1, -1, 85, 86, 87, -1, 89, 90, -1, -1,
3463  -1, -1, 116, 96, 118, 119, 120, 121, 122, 123,
3464  124, 125, 126, 127, -1, -1, -1, 110, -1, -1,
3465  113, -1, 115, 116, 117, 118, 119, 120, 121, 122,
3466  123, 124, 125, 126, 127, -1, -1, -1, -1, 132,
3467  133, 134, 135, 136, 0, -1, 139, 140, 141, -1,
3468  143, -1, 8, 9, 10, -1, -1, 13, 14, 15,
3469  -1, 17, -1, -1, -1, -1, -1, 44, -1, 25,
3470  -1, 27, 28, 29, -1, -1, -1, -1, -1, -1,
3471  -1, 37, 38, -1, 40, 41, 42, 43, 44, -1,
3472  -1, -1, -1, 70, 71, 72, 73, 74, 75, 76,
3473  77, 78, 79, 80, 81, 82, -1, -1, 85, 86,
3474  -1, -1, -1, -1, 70, 71, 72, 73, 74, 75,
3475  76, 77, 78, 79, 80, 81, 82, -1, -1, 85,
3476  86, 87, -1, 89, 90, -1, -1, -1, -1, 116,
3477  96, 118, 119, 120, 121, 122, 123, 124, 125, 126,
3478  127, -1, -1, -1, 110, -1, -1, 113, -1, 115,
3479  116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
3480  126, 127, -1, -1, -1, -1, -1, 133, 134, 135,
3481  136, 0, -1, 139, 140, 141, -1, 143, -1, 8,
3482  9, 10, -1, -1, 13, 14, 15, -1, 17, -1,
3483  -1, -1, -1, -1, -1, -1, 25, -1, 27, 28,
3484  29, -1, -1, -1, -1, -1, -1, -1, 37, 38,
3485  -1, 40, 41, 42, 43, 44, -1, -1, -1, -1,
3486  70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
3487  80, 81, 82, -1, -1, 85, 86, -1, -1, -1,
3488  -1, 70, 71, 72, 73, 74, 75, 76, 77, 78,
3489  79, 80, 81, 82, -1, -1, 85, 86, 87, -1,
3490  89, 90, -1, -1, -1, -1, 116, 96, 118, 119,
3491  120, 121, 122, 123, 124, 125, 126, 127, -1, -1,
3492  -1, 110, -1, -1, 113, -1, 115, 116, 117, 118,
3493  119, 120, 121, 122, 123, 124, 125, 126, 127, -1,
3494  -1, -1, -1, -1, 133, 134, 135, 136, 0, -1,
3495  139, 140, 141, -1, 143, -1, 8, 9, 10, -1,
3496  -1, 13, 14, 15, -1, 17, -1, -1, -1, -1,
3497  -1, 44, -1, -1, 26, 27, 28, 29, -1, -1,
3498  -1, -1, -1, -1, -1, 37, 38, -1, 40, 41,
3499  42, 43, 44, -1, -1, -1, -1, 70, 71, 72,
3500  73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
3501  -1, -1, 85, 86, -1, -1, -1, -1, 70, 71,
3502  72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
3503  82, -1, -1, 85, 86, 87, -1, -1, 90, -1,
3504  -1, -1, -1, 116, 96, 118, 119, 120, 121, 122,
3505  123, 124, 125, 126, 127, -1, -1, -1, 110, -1,
3506  -1, 113, -1, 136, 116, 117, 118, 119, 120, 121,
3507  122, 123, 124, 125, 126, 127, -1, -1, -1, -1,
3508  132, 133, 134, 135, 136, 0, -1, 139, 140, 141,
3509  -1, 143, -1, 8, 9, 10, -1, -1, 13, 14,
3510  15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
3511  -1, 26, 27, 28, 29, -1, -1, -1, -1, -1,
3512  -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
3513  -1, -1, -1, -1, 70, 71, 72, 73, 74, 75,
3514  76, 77, 78, 79, 80, 81, 82, -1, -1, 85,
3515  86, -1, -1, -1, -1, 70, 71, 72, 73, 74,
3516  75, 76, 77, 78, 79, 80, 81, 82, -1, -1,
3517  85, 86, 87, -1, -1, 90, -1, -1, -1, -1,
3518  -1, 96, 118, 119, 120, 121, 122, 123, 124, 125,
3519  126, 127, -1, -1, -1, 110, -1, -1, 113, -1,
3520  -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
3521  125, 126, 127, -1, -1, -1, -1, 132, 133, 134,
3522  135, 136, 0, -1, 139, 140, 141, -1, 143, -1,
3523  8, 9, 10, -1, -1, 13, 14, 15, -1, 17,
3524  -1, -1, -1, -1, -1, -1, -1, -1, -1, 27,
3525  28, 29, -1, -1, -1, -1, -1, -1, -1, 37,
3526  38, -1, 40, 41, 42, 43, 44, -1, -1, -1,
3527  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3528  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3529  -1, -1, 70, 71, 72, 73, 74, 75, 76, 77,
3530  78, 79, 80, 81, 82, -1, -1, 85, 86, 87,
3531  -1, 89, 90, -1, -1, -1, -1, -1, 96, -1,
3532  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3533  -1, -1, 110, -1, -1, 113, -1, 115, 116, 117,
3534  118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
3535  -1, -1, -1, -1, -1, 133, 134, 135, 136, 0,
3536  -1, 139, 140, 141, -1, 143, -1, 8, 9, 10,
3537  -1, -1, 13, 14, 15, -1, 17, -1, -1, -1,
3538  -1, -1, -1, -1, -1, 26, 27, 28, -1, -1,
3539  -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
3540  41, 42, 43, 44, -1, -1, -1, -1, -1, -1,
3541  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3542  -1, -1, -1, -1, -1, -1, -1, -1, -1, 70,
3543  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
3544  81, 82, -1, -1, 85, 86, 87, -1, -1, 90,
3545  -1, -1, -1, -1, -1, 96, -1, -1, -1, -1,
3546  -1, -1, -1, -1, -1, -1, -1, -1, -1, 110,
3547  -1, -1, -1, -1, -1, 116, -1, 118, 119, 120,
3548  121, 122, 123, 124, 125, 126, 127, -1, -1, -1,
3549  -1, 132, 133, 134, 135, 136, 0, 138, 139, 140,
3550  141, -1, 143, -1, 8, 9, 10, -1, -1, 13,
3551  14, 15, -1, 17, -1, -1, -1, -1, -1, -1,
3552  -1, -1, -1, 27, 28, 29, -1, -1, -1, -1,
3553  -1, -1, -1, 37, 38, -1, 40, 41, 42, 43,
3554  44, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3555  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3556  -1, -1, -1, -1, -1, -1, 70, 71, 72, 73,
3557  74, 75, 76, 77, 78, 79, 80, 81, 82, -1,
3558  -1, 85, 86, 87, -1, -1, 90, -1, -1, -1,
3559  -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
3560  -1, -1, -1, -1, -1, -1, 110, -1, -1, 113,
3561  -1, -1, 116, 117, 118, 119, 120, 121, 122, 123,
3562  124, 125, 126, 127, -1, -1, -1, -1, -1, 133,
3563  134, 135, 136, 0, -1, 139, 140, 141, -1, 143,
3564  -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
3565  17, -1, -1, -1, -1, -1, -1, -1, -1, 26,
3566  27, 28, -1, -1, -1, -1, -1, -1, -1, -1,
3567  37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
3568  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3569  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3570  -1, -1, -1, 70, 71, 72, 73, 74, 75, 76,
3571  77, 78, 79, 80, 81, 82, -1, -1, 85, 86,
3572  87, -1, -1, 90, -1, -1, -1, -1, -1, 96,
3573  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3574  -1, -1, -1, 110, -1, -1, -1, -1, -1, 116,
3575  -1, 118, 119, 120, 121, 122, 123, 124, 125, 126,
3576  127, -1, -1, -1, -1, 132, 133, 134, 135, 136,
3577  0, 138, 139, 140, 141, -1, 143, -1, 8, 9,
3578  10, -1, -1, 13, 14, 15, -1, 17, -1, -1,
3579  -1, -1, -1, -1, -1, -1, -1, 27, 28, -1,
3580  -1, -1, -1, -1, -1, -1, -1, 37, 38, -1,
3581  40, 41, 42, 43, 44, -1, -1, -1, -1, -1,
3582  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3583  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3584  70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
3585  80, 81, 82, -1, -1, 85, 86, 87, -1, -1,
3586  90, -1, -1, -1, -1, -1, 96, -1, -1, -1,
3587  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3588  110, -1, -1, -1, -1, -1, 116, -1, 118, 119,
3589  120, 121, 122, 123, 124, 125, 126, 127, -1, -1,
3590  -1, -1, -1, 133, 134, 135, 136, 0, 138, 139,
3591  140, 141, -1, 143, -1, 8, 9, 10, -1, -1,
3592  -1, 14, 15, -1, 17, -1, -1, -1, -1, -1,
3593  -1, -1, -1, 26, -1, -1, -1, -1, -1, -1,
3594  -1, -1, -1, -1, 37, 38, -1, 40, 41, 42,
3595  43, 44, -1, -1, -1, -1, -1, -1, -1, -1,
3596  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3597  -1, -1, -1, -1, -1, -1, -1, 70, 71, 72,
3598  73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
3599  -1, -1, 85, 86, 87, -1, 89, -1, -1, -1,
3600  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3601  -1, -1, -1, -1, -1, -1, -1, 110, -1, -1,
3602  -1, -1, 115, 116, -1, 118, 119, 120, 121, 122,
3603  123, 124, 125, 126, 127, -1, -1, -1, -1, 132,
3604  133, 134, 135, 136, 0, -1, 139, -1, 141, -1,
3605  143, -1, 8, 9, 10, -1, -1, -1, 14, 15,
3606  -1, 17, -1, -1, -1, -1, -1, -1, -1, -1,
3607  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3608  -1, 37, 38, -1, 40, 41, 42, 43, 44, -1,
3609  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3610  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3611  -1, -1, -1, -1, 70, 71, 72, 73, 74, 75,
3612  76, 77, 78, 79, 80, 81, 82, -1, -1, 85,
3613  86, 87, -1, 89, -1, -1, -1, -1, -1, -1,
3614  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3615  -1, -1, -1, -1, 110, -1, -1, -1, -1, 115,
3616  116, -1, 118, 119, 120, 121, 122, 123, 124, 125,
3617  126, 127, -1, -1, -1, -1, -1, 133, 134, 135,
3618  136, -1, -1, 139, -1, 141, 1, 143, 3, 4,
3619  5, 6, 7, 8, 9, 10, 11, 12, -1, -1,
3620  15, 16, -1, 18, 19, 20, 21, 22, 23, 24,
3621  -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
3622  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
3623  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
3624  55, 56, 57, -1, 59, 60, 61, 62, -1, 64,
3625  65, 66, -1, 68, 69, -1, -1, -1, -1, -1,
3626  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3627  -1, -1, -1, 88, -1, -1, 91, 92, -1, 94,
3628  95, -1, 97, -1, -1, 100, 101, 102, 103, 104,
3629  105, 106, 107, 108, -1, -1, -1, -1, -1, -1,
3630  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3631  -1, -1, -1, 128, 129, 130, -1, -1, -1, -1,
3632  -1, -1, -1, -1, -1, -1, 141, 1, 143, 3,
3633  4, 5, 6, 7, -1, -1, 10, 11, 12, -1,
3634  14, 15, 16, -1, 18, 19, 20, 21, 22, 23,
3635  24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
3636  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
3637  -1, 45, 46, 47, 48, 49, 50, 51, 52, 53,
3638  54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
3639  64, 65, 66, -1, 68, 69, -1, -1, -1, -1,
3640  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3641  -1, -1, -1, -1, 88, -1, -1, 91, 92, -1,
3642  94, 95, -1, 97, -1, -1, 100, 101, 102, 103,
3643  104, 105, 106, 107, 108, -1, -1, -1, -1, -1,
3644  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3645  -1, -1, -1, -1, 128, 129, 130, -1, -1, -1,
3646  -1, -1, -1, -1, -1, -1, -1, 141, 1, 143,
3647  3, 4, 5, 6, 7, -1, -1, 10, 11, 12,
3648  -1, -1, 15, 16, 17, 18, 19, 20, 21, 22,
3649  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
3650  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
3651  -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
3652  53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
3653  -1, 64, 65, 66, -1, 68, 69, -1, -1, -1,
3654  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3655  -1, -1, -1, -1, -1, 88, -1, -1, 91, 92,
3656  -1, 94, 95, -1, 97, -1, -1, 100, 101, 102,
3657  103, 104, 105, 106, 107, 108, -1, -1, -1, -1,
3658  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3659  -1, -1, -1, -1, -1, 128, 129, 130, -1, -1,
3660  -1, -1, -1, -1, -1, -1, -1, -1, 141, 1,
3661  143, 3, 4, 5, 6, 7, -1, -1, 10, 11,
3662  12, -1, -1, 15, 16, -1, 18, 19, 20, 21,
3663  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
3664  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
3665  -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
3666  52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
3667  62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
3668  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3669  -1, -1, -1, -1, -1, -1, 88, -1, -1, 91,
3670  92, -1, 94, 95, -1, 97, -1, -1, 100, 101,
3671  102, 103, 104, 105, 106, 107, 108, -1, -1, -1,
3672  -1, -1, -1, -1, 1, -1, 3, 4, 5, 6,
3673  7, -1, 9, 10, 11, 12, 128, 129, 130, 16,
3674  -1, 18, 19, 20, 21, 22, 23, 24, -1, 141,
3675  -1, 143, -1, 30, 31, 32, 33, 34, 35, 36,
3676  -1, -1, 39, -1, -1, -1, -1, -1, 45, 46,
3677  47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
3678  57, -1, 59, 60, 61, 62, -1, 64, 65, 66,
3679  -1, 68, 69, -1, -1, -1, -1, -1, -1, -1,
3680  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3681  -1, 88, -1, -1, 91, 92, -1, 94, 95, -1,
3682  97, -1, -1, 100, 101, 102, 103, 104, 105, 106,
3683  107, 108, -1, -1, -1, -1, -1, -1, -1, 1,
3684  -1, 3, 4, 5, 6, 7, -1, -1, -1, 11,
3685  12, 128, 129, 130, 16, -1, 18, 19, 20, 21,
3686  22, 23, 24, -1, 141, -1, 143, -1, 30, 31,
3687  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
3688  -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
3689  52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
3690  62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
3691  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3692  -1, -1, -1, -1, -1, -1, 88, -1, -1, 91,
3693  92, -1, 94, 95, -1, 97, -1, -1, 100, 101,
3694  102, 103, 104, 105, 106, 107, 108, -1, -1, -1,
3695  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3696  -1, -1, -1, -1, -1, -1, 128, 129, 130, -1,
3697  -1, -1, -1, -1, -1, -1, -1, 139, -1, 141,
3698  1, 143, 3, 4, 5, 6, 7, -1, -1, -1,
3699  11, 12, -1, -1, -1, 16, -1, 18, 19, 20,
3700  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
3701  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
3702  -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
3703  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
3704  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
3705  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3706  -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
3707  91, 92, -1, 94, 95, -1, 97, -1, -1, 100,
3708  101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
3709  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3710  -1, -1, -1, -1, -1, -1, -1, 128, 129, 130,
3711  -1, -1, -1, -1, -1, -1, -1, -1, 139, -1,
3712  141, 1, 143, 3, 4, 5, 6, 7, -1, -1,
3713  -1, 11, 12, -1, -1, -1, 16, -1, 18, 19,
3714  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
3715  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
3716  -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
3717  50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
3718  60, 61, 62, -1, 64, 65, 66, -1, 68, 69,
3719  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3720  -1, -1, -1, -1, -1, -1, -1, -1, 88, -1,
3721  -1, 91, 92, -1, 94, 95, -1, 97, -1, -1,
3722  100, 101, 102, 103, 104, 105, 106, 107, 108, -1,
3723  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3724  -1, -1, -1, -1, -1, -1, -1, -1, 128, 129,
3725  130, -1, -1, 133, 1, -1, 3, 4, 5, 6,
3726  7, 141, -1, 143, 11, 12, -1, -1, -1, 16,
3727  -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
3728  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
3729  -1, -1, 39, -1, -1, -1, -1, -1, 45, 46,
3730  47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
3731  57, -1, 59, 60, 61, 62, -1, 64, 65, 66,
3732  -1, 68, 69, -1, -1, -1, -1, -1, -1, -1,
3733  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3734  -1, 88, -1, -1, 91, 92, -1, 94, 95, -1,
3735  97, -1, -1, 100, 101, 102, 103, 104, 105, 106,
3736  107, 108, -1, -1, -1, -1, -1, -1, -1, -1,
3737  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3738  -1, 128, 129, 130, -1, -1, 133, -1, -1, -1,
3739  -1, -1, -1, -1, 141, 1, 143, 3, 4, 5,
3740  6, 7, -1, -1, 10, 11, 12, -1, -1, -1,
3741  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
3742  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
3743  36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
3744  46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
3745  56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
3746  66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
3747  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3748  -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
3749  -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
3750  106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
3751  1, -1, 3, 4, 5, 6, 7, -1, -1, -1,
3752  11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
3753  21, 22, 23, 24, -1, 141, -1, 143, -1, 30,
3754  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
3755  -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
3756  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
3757  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
3758  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3759  -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
3760  91, 92, -1, 94, 95, -1, 97, -1, -1, 100,
3761  101, 102, 103, 104, 105, 106, 107, 108, -1, 110,
3762  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
3763  -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
3764  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
3765  141, -1, 143, -1, 30, 31, 32, 33, 34, 35,
3766  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
3767  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
3768  56, 57, 58, 59, 60, 61, 62, -1, 64, 65,
3769  66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
3770  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3771  -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
3772  -1, 97, 98, 99, 100, 101, 102, 103, 104, 105,
3773  106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
3774  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
3775  11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
3776  21, 22, 23, 24, -1, -1, -1, 143, -1, 30,
3777  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
3778  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
3779  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
3780  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
3781  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3782  -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
3783  91, 92, -1, 94, 95, -1, -1, -1, -1, 100,
3784  101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
3785  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
3786  -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
3787  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
3788  141, -1, 143, -1, 30, 31, 32, 33, 34, 35,
3789  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
3790  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
3791  56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
3792  66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
3793  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3794  -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
3795  -1, -1, -1, -1, 100, 101, 102, 103, 104, 105,
3796  106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
3797  -1, -1, 3, 4, 5, 6, 7, -1, -1, -1,
3798  11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
3799  21, 22, 23, 24, -1, -1, -1, 143, -1, 30,
3800  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
3801  -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
3802  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
3803  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
3804  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3805  -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
3806  91, 92, -1, 94, 95, -1, 97, -1, -1, 100,
3807  101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
3808  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
3809  6, 7, -1, -1, -1, 11, 12, 128, 129, 130,
3810  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
3811  141, -1, -1, -1, 30, 31, 32, 33, 34, 35,
3812  36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
3813  46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
3814  56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
3815  66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
3816  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3817  -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
3818  -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
3819  106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
3820  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3821  -1, -1, 128, 129, 130, -1, -1, -1, -1, -1,
3822  -1, -1, -1, -1, -1, 141, 3, 4, 5, 6,
3823  7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
3824  17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
3825  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
3826  37, 38, 39, -1, -1, -1, -1, -1, 45, 46,
3827  47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
3828  57, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3829  -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
3830  -1, -1, 79, 80, -1, -1, 83, 84, 85, 86,
3831  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3832  97, 98, -1, -1, -1, -1, -1, -1, -1, -1,
3833  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3834  -1, 118, 119, 120, 121, 122, 123, 124, 125, 126,
3835  127, -1, 129, 130, -1, -1, -1, -1, -1, -1,
3836  137, 138, 3, 4, 5, 6, 7, 8, 9, 10,
3837  11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
3838  21, 22, 23, 24, 25, 26, -1, -1, -1, 30,
3839  31, 32, 33, 34, 35, 36, 37, 38, 39, -1,
3840  -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
3841  51, 52, 53, 54, 55, 56, 57, -1, -1, -1,
3842  -1, -1, -1, -1, -1, -1, -1, 68, 69, 70,
3843  71, 72, 73, 74, 75, 76, -1, -1, 79, 80,
3844  -1, -1, 83, 84, 85, 86, -1, -1, -1, -1,
3845  -1, -1, -1, -1, -1, -1, 97, 98, -1, -1,
3846  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3847  -1, -1, -1, -1, -1, -1, -1, 118, 119, 120,
3848  121, 122, 123, 124, 125, 126, 127, -1, 129, 130,
3849  -1, -1, -1, -1, -1, -1, 137, 3, 4, 5,
3850  6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
3851  16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
3852  26, -1, -1, -1, 30, 31, 32, 33, 34, 35,
3853  36, 37, 38, 39, -1, -1, -1, -1, -1, 45,
3854  46, 47, 48, 49, 50, 51, 52, 53, 54, -1,
3855  56, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3856  -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
3857  76, -1, -1, 79, 80, -1, -1, 83, 84, 85,
3858  86, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3859  -1, 97, 98, -1, -1, 101, -1, -1, -1, -1,
3860  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3861  -1, -1, 118, 119, 120, 121, 122, 123, 124, 125,
3862  126, 127, -1, 129, 130, -1, -1, -1, -1, -1,
3863  -1, 137, 3, 4, 5, 6, 7, 8, 9, 10,
3864  11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
3865  21, 22, 23, 24, 25, 26, -1, -1, -1, 30,
3866  31, 32, 33, 34, 35, 36, 37, 38, 39, -1,
3867  -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
3868  51, 52, 53, -1, -1, 56, -1, -1, -1, -1,
3869  -1, -1, -1, -1, -1, -1, -1, 68, 69, 70,
3870  71, 72, 73, 74, 75, 76, -1, -1, 79, 80,
3871  -1, -1, 83, 84, 85, 86, -1, -1, -1, -1,
3872  -1, -1, -1, -1, -1, -1, 97, 98, -1, -1,
3873  101, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3874  -1, -1, -1, -1, -1, -1, -1, 118, 119, 120,
3875  121, 122, 123, 124, 125, 126, 127, -1, 129, 130,
3876  -1, -1, -1, -1, -1, -1, 137, 3, 4, 5,
3877  6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
3878  16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
3879  26, -1, -1, -1, 30, 31, 32, 33, 34, 35,
3880  36, 37, 38, 39, -1, -1, -1, -1, -1, 45,
3881  46, 47, 48, 49, 50, 51, 52, 53, -1, -1,
3882  56, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3883  -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
3884  76, -1, -1, 79, 80, -1, -1, 83, 84, 85,
3885  86, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3886  -1, 97, 98, -1, -1, -1, -1, -1, -1, -1,
3887  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3888  -1, -1, 118, 119, 120, 121, 122, 123, 124, 125,
3889  126, 127, -1, 129, 130, 3, 4, 5, -1, 7,
3890  -1, 137, -1, 11, 12, -1, -1, -1, 16, -1,
3891  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
3892  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
3893  -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
3894  -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
3895  -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
3896  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3897  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3898  88, -1, -1, 91, 92, -1, 94, 95, -1, -1,
3899  -1, -1, 100, 101, 102, 103, 104, 105, 106, 107,
3900  108, -1, -1, -1, -1, -1, 3, 4, 5, -1,
3901  7, -1, -1, -1, 11, 12, -1, -1, -1, 16,
3902  128, 18, 19, 20, 21, 22, 23, 24, 136, -1,
3903  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
3904  -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
3905  -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
3906  57, -1, 59, 60, 61, 62, -1, 64, 65, 66,
3907  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3908  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3909  -1, 88, -1, -1, 91, 92, -1, 94, 95, -1,
3910  -1, -1, -1, 100, 101, 102, 103, 104, 105, 106,
3911  107, 108, -1, -1, -1, -1, -1, 3, 4, 5,
3912  6, 7, -1, -1, -1, 11, 12, -1, -1, -1,
3913  16, 128, 18, 19, 20, 21, 22, 23, 24, 136,
3914  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
3915  36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
3916  46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
3917  56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
3918  66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
3919  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3920  -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
3921  -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
3922  106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
3923  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
3924  11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
3925  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
3926  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
3927  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
3928  51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
3929  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
3930  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3931  -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
3932  91, 92, -1, 94, 95, -1, 97, 98, 99, 100,
3933  101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
3934  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
3935  6, 7, -1, -1, -1, 11, 12, 128, 129, 130,
3936  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
3937  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
3938  36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
3939  46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
3940  56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
3941  66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
3942  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3943  -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
3944  -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
3945  106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
3946  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
3947  11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
3948  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
3949  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
3950  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
3951  51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
3952  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
3953  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3954  -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
3955  91, 92, -1, 94, 95, -1, 97, 98, 99, 100,
3956  101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
3957  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
3958  -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
3959  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
3960  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
3961  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
3962  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
3963  56, 57, 58, 59, 60, 61, 62, -1, 64, 65,
3964  66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
3965  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3966  -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
3967  -1, 97, 98, -1, 100, 101, 102, 103, 104, 105,
3968  106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
3969  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
3970  11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
3971  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
3972  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
3973  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
3974  51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
3975  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
3976  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3977  -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
3978  91, 92, -1, 94, 95, -1, -1, 98, 99, 100,
3979  101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
3980  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
3981  -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
3982  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
3983  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
3984  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
3985  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
3986  56, 57, 58, 59, 60, 61, 62, -1, 64, 65,
3987  66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
3988  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3989  -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
3990  -1, 97, 98, -1, 100, 101, 102, 103, 104, 105,
3991  106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
3992  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
3993  11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
3994  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
3995  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
3996  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
3997  51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
3998  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
3999  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4000  -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
4001  91, 92, -1, 94, 95, -1, -1, 98, -1, 100,
4002  101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
4003  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
4004  -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
4005  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
4006  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
4007  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
4008  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
4009  56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
4010  66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
4011  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4012  -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
4013  -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
4014  106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
4015  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4016  11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
4017  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4018  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4019  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4020  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4021  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
4022  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4023  -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
4024  91, 92, -1, 94, 95, -1, 97, -1, -1, 100,
4025  101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
4026  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
4027  -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
4028  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
4029  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
4030  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
4031  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
4032  56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
4033  66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
4034  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4035  -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
4036  -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
4037  106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
4038  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4039  11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
4040  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4041  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4042  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4043  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4044  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
4045  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4046  -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
4047  91, 92, -1, 94, 95, -1, 97, -1, -1, 100,
4048  101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
4049  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
4050  -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
4051  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
4052  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
4053  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
4054  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
4055  56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
4056  66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
4057  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4058  -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
4059  -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
4060  106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
4061  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4062  11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
4063  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4064  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4065  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4066  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4067  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
4068  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4069  -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
4070  91, 92, -1, 94, 95, -1, -1, -1, -1, 100,
4071  101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
4072  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
4073  -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
4074  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
4075  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
4076  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
4077  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
4078  56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
4079  66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
4080  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4081  -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
4082  -1, -1, -1, -1, 100, 101, 102, 103, 104, 105,
4083  106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
4084  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4085  11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
4086  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4087  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4088  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4089  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4090  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
4091  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4092  -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
4093  91, 92, -1, 94, 95, -1, -1, -1, -1, 100,
4094  101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
4095  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
4096  -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
4097  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
4098  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
4099  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
4100  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
4101  56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
4102  66, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4103  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4104  -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
4105  -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
4106  106, 107, 108, -1, -1, -1, -1, -1, 3, 4,
4107  5, -1, 7, -1, -1, -1, 11, 12, -1, -1,
4108  -1, 16, 128, 18, 19, 20, 21, 22, 23, 24,
4109  -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
4110  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
4111  -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
4112  55, 56, 57, -1, 59, 60, 61, 62, -1, 64,
4113  65, 66, -1, -1, -1, -1, -1, -1, -1, -1,
4114  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4115  -1, -1, -1, 88, -1, -1, 91, 92, -1, 94,
4116  95, -1, 97, -1, -1, 100, 101, 102, 103, 104,
4117  105, 106, 107, 108, -1, -1, -1, -1, -1, 3,
4118  4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
4119  -1, -1, 16, 128, 18, 19, 20, 21, 22, 23,
4120  24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
4121  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
4122  -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
4123  54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
4124  64, 65, 66, -1, -1, -1, -1, -1, -1, -1,
4125  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4126  -1, 85, -1, -1, 88, -1, -1, 91, 92, -1,
4127  94, 95, -1, -1, -1, -1, 100, 101, 102, 103,
4128  104, 105, 106, 107, 108, -1, -1, -1, -1, -1,
4129  3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
4130  -1, -1, -1, 16, 128, 18, 19, 20, 21, 22,
4131  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
4132  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4133  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
4134  53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
4135  -1, 64, 65, 66, -1, -1, -1, -1, -1, -1,
4136  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4137  -1, -1, -1, -1, -1, 88, -1, -1, 91, 92,
4138  -1, 94, 95, -1, -1, -1, -1, 100, 101, 102,
4139  103, 104, 105, 106, 107, 108, -1, -1, -1, -1,
4140  -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
4141  12, -1, -1, -1, 16, 128, 18, 19, 20, 21,
4142  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
4143  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
4144  -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
4145  52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
4146  62, -1, 64, 65, 66, -1, -1, -1, -1, -1,
4147  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4148  -1, -1, -1, -1, -1, -1, 88, -1, -1, 91,
4149  92, -1, 94, 95, -1, -1, -1, -1, 100, 101,
4150  102, 103, 104, 105, 106, 107, 108, -1, -1, -1,
4151  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4152  11, 12, -1, -1, -1, 16, 128, 18, 19, 20,
4153  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4154  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4155  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4156  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4157  61, 62, -1, 64, 65, 66, -1, -1, -1, -1,
4158  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4159  -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
4160  91, 92, -1, 94, 95, -1, -1, -1, -1, 100,
4161  101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
4162  -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
4163  -1, 11, 12, -1, -1, -1, 16, 128, 18, 19,
4164  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
4165  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4166  -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
4167  50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
4168  60, 61, 62, -1, 64, 65, 66, -1, -1, -1,
4169  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4170  -1, -1, -1, -1, -1, -1, -1, -1, 88, -1,
4171  -1, 91, 92, -1, 94, 95, -1, -1, -1, -1,
4172  100, 101, 102, 103, 104, 105, 106, 107, 108, -1,
4173  -1, -1, -1, 52, 53, -1, -1, 56, -1, -1,
4174  -1, -1, -1, -1, -1, -1, -1, -1, 128, 68,
4175  69, 70, 71, 72, 73, 74, 75, 76, -1, -1,
4176  79, 80, -1, -1, 83, 84, 85, 86, -1, -1,
4177  -1, -1, -1, -1, -1, -1, -1, -1, 97, 98,
4178  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4179  -1, -1, -1, -1, -1, -1, -1, -1, -1, 118,
4180  119, 120, 121, 122, 123, 124, 125, 126, 127, -1,
4181  129, 130, 52, 53, -1, -1, 56, -1, 137, -1,
4182  -1, -1, -1, -1, -1, -1, -1, -1, 68, 69,
4183  70, 71, 72, 73, 74, 75, 76, -1, -1, 79,
4184  80, -1, -1, 83, 84, 85, 86, -1, -1, -1,
4185  -1, -1, -1, -1, -1, -1, -1, 97, 98, -1,
4186  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4187  -1, -1, -1, -1, -1, -1, -1, -1, 118, 119,
4188  120, 121, 122, 123, 124, 125, 126, 127, -1, 129,
4189  130, 52, 53, -1, -1, 56, -1, 137, -1, -1,
4190  -1, -1, -1, -1, -1, -1, -1, 68, 69, 70,
4191  71, 72, 73, 74, 75, 76, -1, -1, 79, 80,
4192  -1, -1, 83, 84, 85, 86, -1, -1, -1, -1,
4193  -1, -1, -1, -1, -1, -1, 97, 98, -1, -1,
4194  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4195  -1, -1, -1, -1, -1, -1, -1, 118, 119, 120,
4196  121, 122, 123, 124, 125, 126, 127, -1, 129, 130,
4197  52, 53, -1, -1, 56, -1, 137, -1, -1, -1,
4198  -1, -1, -1, -1, -1, -1, 68, 69, 70, 71,
4199  72, 73, 74, 75, 76, -1, -1, 79, 80, -1,
4200  -1, 83, 84, 85, 86, -1, -1, -1, -1, -1,
4201  -1, -1, -1, -1, -1, 97, 98, -1, -1, -1,
4202  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4203  -1, -1, -1, -1, -1, -1, 118, 119, 120, 121,
4204  122, 123, 124, 125, 126, 127, -1, 129, 130, 52,
4205  53, -1, -1, 56, -1, 137, -1, -1, -1, -1,
4206  -1, -1, -1, -1, -1, 68, 69, 70, 71, 72,
4207  73, 74, 75, 76, -1, -1, 79, 80, -1, -1,
4208  83, 84, 85, 86, -1, -1, -1, -1, -1, -1,
4209  -1, -1, -1, -1, 97, 98, -1, -1, -1, -1,
4210  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4211  -1, -1, -1, -1, -1, 118, 119, 120, 121, 122,
4212  123, 124, 125, 126, 127, -1, 129, 130, 52, 53,
4213  -1, -1, 56, -1, 137, -1, -1, -1, -1, -1,
4214  -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
4215  74, 75, 76, -1, -1, 79, 80, -1, -1, 83,
4216  84, 85, 86, -1, -1, -1, -1, -1, -1, -1,
4217  -1, -1, -1, 97, 98, -1, -1, -1, -1, -1,
4218  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4219  -1, -1, -1, -1, 118, 119, 120, 121, 122, 123,
4220  124, 125, 126, 127, -1, 129, 130, 52, 53, -1,
4221  -1, 56, -1, 137, -1, -1, -1, -1, -1, -1,
4222  -1, -1, -1, 68, 69, 70, 71, 72, 73, 74,
4223  75, 76, -1, -1, 79, 80, -1, -1, 83, 84,
4224  85, 86, -1, -1, -1, -1, -1, -1, -1, -1,
4225  -1, -1, 97, 98, -1, -1, -1, -1, -1, -1,
4226  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4227  -1, -1, -1, 118, 119, 120, 121, 122, 123, 124,
4228  125, 126, 127, -1, 129, 130, 52, 53, -1, -1,
4229  56, -1, 137, -1, -1, -1, -1, -1, -1, -1,
4230  -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
4231  76, -1, -1, 79, 80, -1, -1, 83, 84, 85,
4232  86, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4233  -1, 97, 98, -1, -1, -1, -1, -1, -1, -1,
4234  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4235  -1, -1, 118, 119, 120, 121, 122, 123, 124, 125,
4236  126, 127, -1, 129, 130, 52, 53, -1, -1, 56,
4237  -1, 137, -1, -1, -1, -1, -1, -1, -1, -1,
4238  -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
4239  -1, -1, 79, 80, -1, -1, 83, 84, 85, 86,
4240  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4241  97, 98, -1, -1, -1, -1, -1, -1, -1, -1,
4242  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4243  -1, 118, 119, 120, 121, 122, 123, 124, 125, 126,
4244  127, -1, 129, 130, 52, 53, -1, -1, 56, -1,
4245  137, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4246  68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
4247  -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
4248  -1, -1, -1, -1, -1, -1, -1, -1, -1, 97,
4249  98, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4250  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4251  118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
4252  -1, 129, 130, 52, 53, -1, -1, 56, -1, 137,
4253  -1, -1, -1, -1, -1, -1, -1, -1, -1, 68,
4254  69, 70, 71, 72, 73, 74, 75, 76, -1, -1,
4255  79, 80, -1, -1, 83, 84, 85, 86, -1, -1,
4256  -1, -1, -1, -1, -1, -1, -1, -1, 97, 98,
4257  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4258  -1, -1, -1, -1, -1, -1, -1, -1, -1, 118,
4259  119, 120, 121, 122, 123, 124, 125, 126, 127, -1,
4260  129, 130, 52, 53, -1, -1, 56, -1, 137, -1,
4261  -1, -1, -1, -1, -1, -1, -1, -1, 68, 69,
4262  70, 71, 72, 73, 74, 75, 76, -1, -1, 79,
4263  80, -1, -1, 83, 84, 85, 86, -1, -1, -1,
4264  -1, -1, -1, -1, -1, -1, -1, 97, 98, -1,
4265  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4266  -1, -1, -1, -1, -1, -1, -1, -1, 118, 119,
4267  120, 121, 122, 123, 124, 125, 126, 127, -1, 129,
4268  130, 52, 53, -1, -1, 56, -1, 137, -1, -1,
4269  -1, -1, -1, -1, -1, -1, -1, 68, 69, 70,
4270  71, 72, 73, 74, 75, 76, -1, -1, 79, 80,
4271  -1, -1, 83, 84, 85, 86, -1, -1, -1, -1,
4272  -1, -1, -1, -1, -1, -1, 97, 98, 70, 71,
4273  72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
4274  82, -1, -1, 85, 86, -1, -1, 118, 119, 120,
4275  121, 122, 123, 124, 125, 126, 127, -1, 129, 130,
4276  -1, -1, -1, -1, -1, -1, 137, -1, -1, -1,
4277  -1, -1, -1, -1, 116, -1, 118, 119, 120, 121,
4278  122, 123, 124, 125, 126, 127, -1, -1, -1, -1,
4279  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4280  -1, 143
4281 };
4282 
4283 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
4284  symbol of state STATE-NUM. */
4285 static const yytype_uint16 yystos[] =
4286 {
4287  0, 145, 146, 0, 1, 3, 4, 5, 6, 7,
4288  11, 12, 16, 18, 19, 20, 21, 22, 23, 24,
4289  30, 31, 32, 33, 34, 35, 36, 39, 45, 46,
4290  47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
4291  57, 59, 60, 61, 62, 64, 65, 66, 68, 69,
4292  88, 91, 92, 94, 95, 97, 100, 101, 102, 103,
4293  104, 105, 106, 107, 108, 128, 129, 130, 147, 148,
4294  149, 156, 158, 159, 161, 162, 165, 166, 167, 169,
4295  170, 171, 173, 174, 184, 199, 218, 219, 220, 221,
4296  222, 223, 224, 225, 226, 227, 228, 254, 255, 269,
4297  270, 271, 272, 273, 274, 275, 278, 280, 281, 293,
4298  295, 296, 297, 298, 299, 300, 301, 302, 335, 346,
4299  149, 3, 4, 5, 6, 7, 8, 9, 10, 11,
4300  12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
4301  22, 23, 24, 25, 26, 30, 31, 32, 33, 34,
4302  35, 36, 37, 38, 39, 45, 46, 47, 48, 49,
4303  50, 51, 52, 53, 56, 68, 69, 70, 71, 72,
4304  73, 74, 75, 76, 79, 80, 83, 84, 85, 86,
4305  97, 98, 118, 119, 120, 121, 122, 123, 124, 125,
4306  126, 127, 129, 130, 137, 177, 178, 179, 180, 182,
4307  183, 293, 295, 39, 58, 88, 91, 97, 98, 99,
4308  129, 166, 174, 184, 186, 191, 194, 196, 218, 298,
4309  299, 301, 302, 333, 334, 191, 191, 138, 192, 193,
4310  138, 188, 192, 138, 143, 340, 54, 179, 340, 150,
4311  132, 21, 22, 30, 31, 32, 165, 184, 218, 184,
4312  56, 1, 47, 91, 152, 153, 154, 156, 168, 169,
4313  346, 201, 202, 187, 196, 333, 346, 186, 332, 333,
4314  346, 46, 88, 128, 136, 173, 199, 218, 298, 299,
4315  302, 246, 247, 54, 55, 57, 177, 285, 294, 284,
4316  285, 286, 142, 276, 142, 282, 142, 279, 142, 283,
4317  297, 161, 184, 184, 141, 143, 339, 344, 345, 40,
4318  41, 42, 43, 44, 37, 38, 26, 132, 188, 192,
4319  260, 28, 252, 115, 136, 91, 97, 170, 115, 70,
4320  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
4321  81, 82, 85, 86, 116, 118, 119, 120, 121, 122,
4322  123, 124, 125, 126, 127, 87, 134, 135, 200, 159,
4323  160, 160, 205, 207, 160, 339, 345, 88, 167, 174,
4324  218, 234, 298, 299, 302, 52, 56, 85, 88, 175,
4325  176, 218, 298, 299, 302, 176, 33, 34, 35, 36,
4326  49, 50, 51, 52, 56, 138, 177, 300, 330, 87,
4327  135, 338, 260, 272, 89, 89, 136, 186, 56, 186,
4328  186, 186, 115, 90, 136, 195, 346, 87, 134, 135,
4329  89, 89, 136, 195, 191, 340, 341, 191, 190, 191,
4330  196, 333, 346, 159, 341, 159, 54, 65, 66, 157,
4331  138, 185, 132, 152, 87, 135, 89, 156, 155, 168,
4332  139, 339, 345, 341, 341, 159, 140, 136, 143, 343,
4333  136, 343, 133, 343, 340, 56, 297, 170, 172, 136,
4334  87, 134, 135, 248, 63, 109, 111, 112, 287, 112,
4335  287, 112, 67, 287, 112, 112, 277, 287, 112, 63,
4336  112, 112, 112, 277, 112, 63, 112, 70, 141, 149,
4337  160, 160, 160, 160, 156, 159, 159, 262, 261, 96,
4338  163, 253, 97, 161, 186, 196, 197, 198, 168, 136,
4339  173, 136, 158, 161, 174, 184, 186, 198, 184, 184,
4340  184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
4341  184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
4342  184, 184, 184, 184, 52, 53, 56, 182, 259, 336,
4343  337, 190, 52, 53, 56, 182, 258, 336, 151, 152,
4344  13, 230, 344, 230, 160, 160, 339, 17, 263, 56,
4345  87, 134, 135, 25, 159, 52, 56, 175, 1, 119,
4346  303, 344, 87, 134, 135, 214, 331, 215, 338, 52,
4347  56, 336, 161, 184, 161, 184, 181, 184, 186, 97,
4348  186, 194, 333, 52, 56, 190, 52, 56, 334, 341,
4349  139, 341, 136, 136, 341, 179, 204, 184, 147, 133,
4350  336, 336, 184, 132, 341, 154, 203, 333, 136, 172,
4351  52, 56, 190, 52, 56, 52, 54, 55, 56, 57,
4352  58, 70, 91, 97, 98, 99, 122, 125, 138, 250,
4353  307, 309, 310, 311, 312, 313, 314, 315, 318, 319,
4354  320, 321, 324, 325, 326, 327, 328, 289, 288, 142,
4355  287, 142, 142, 142, 184, 78, 120, 241, 242, 346,
4356  241, 164, 241, 186, 136, 341, 172, 136, 115, 44,
4357  340, 89, 89, 188, 192, 257, 340, 342, 89, 89,
4358  188, 192, 256, 10, 229, 8, 265, 346, 152, 13,
4359  152, 27, 231, 344, 231, 263, 196, 229, 52, 56,
4360  190, 52, 56, 209, 212, 344, 304, 211, 52, 56,
4361  175, 190, 151, 159, 138, 305, 306, 216, 188, 189,
4362  192, 346, 44, 179, 186, 195, 89, 89, 342, 89,
4363  89, 333, 159, 133, 147, 341, 343, 170, 342, 91,
4364  97, 235, 236, 237, 311, 309, 249, 115, 136, 308,
4365  186, 136, 329, 346, 52, 136, 329, 136, 308, 52,
4366  136, 308, 52, 290, 54, 55, 57, 292, 302, 238,
4367  240, 243, 311, 313, 314, 316, 317, 320, 322, 323,
4368  326, 328, 340, 152, 152, 241, 152, 97, 186, 172,
4369  184, 117, 161, 184, 161, 184, 163, 188, 140, 89,
4370  161, 184, 161, 184, 163, 189, 186, 198, 266, 346,
4371  15, 233, 346, 14, 232, 233, 233, 206, 208, 229,
4372  136, 230, 342, 160, 344, 160, 151, 342, 229, 341,
4373  309, 151, 309, 177, 260, 252, 184, 89, 136, 341,
4374  133, 237, 136, 311, 136, 341, 243, 29, 113, 251,
4375  186, 307, 312, 324, 326, 315, 320, 328, 313, 321,
4376  326, 311, 313, 291, 243, 120, 115, 136, 239, 88,
4377  218, 136, 329, 329, 136, 239, 136, 239, 141, 10,
4378  133, 152, 10, 186, 184, 161, 184, 90, 267, 346,
4379  152, 9, 268, 346, 160, 229, 229, 152, 152, 186,
4380  152, 231, 213, 344, 229, 341, 229, 344, 217, 341,
4381  236, 136, 97, 235, 139, 152, 152, 136, 308, 136,
4382  308, 329, 136, 308, 136, 308, 308, 152, 120, 218,
4383  238, 323, 326, 56, 87, 316, 320, 313, 322, 326,
4384  313, 52, 244, 245, 310, 133, 88, 174, 218, 298,
4385  299, 302, 230, 152, 230, 229, 229, 233, 263, 264,
4386  210, 151, 305, 136, 236, 136, 311, 10, 133, 313,
4387  326, 313, 313, 110, 136, 239, 136, 239, 52, 56,
4388  329, 136, 239, 136, 239, 239, 136, 340, 56, 87,
4389  134, 135, 152, 152, 152, 229, 151, 236, 136, 308,
4390  136, 308, 308, 308, 313, 326, 313, 313, 245, 52,
4391  56, 190, 52, 56, 265, 232, 229, 229, 236, 313,
4392  239, 136, 239, 239, 239, 342, 308, 313, 239
4393 };
4394 
4395 #define yyerrok (yyerrstatus = 0)
4396 #define yyclearin (yychar = YYEMPTY)
4397 #define YYEMPTY (-2)
4398 #define YYEOF 0
4399 
4400 #define YYACCEPT goto yyacceptlab
4401 #define YYABORT goto yyabortlab
4402 #define YYERROR goto yyerrorlab
4403 
4404 
4405 /* Like YYERROR except do call yyerror. This remains here temporarily
4406  to ease the transition to the new meaning of YYERROR, for GCC.
4407  Once GCC version 2 has supplanted version 1, this can go. However,
4408  YYFAIL appears to be in use. Nevertheless, it is formally deprecated
4409  in Bison 2.4.2's NEWS entry, where a plan to phase it out is
4410  discussed. */
4411 
4412 #define YYFAIL goto yyerrlab
4413 #if defined YYFAIL
4414  /* This is here to suppress warnings from the GCC cpp's
4415  -Wunused-macros. Normally we don't worry about that warning, but
4416  some users do, and we want to make it easy for users to remove
4417  YYFAIL uses, which will produce warnings from Bison 2.5. */
4418 #endif
4419 
4420 #define YYRECOVERING() (!!yyerrstatus)
4421 
4422 #define YYBACKUP(Token, Value) \
4423 do \
4424  if (yychar == YYEMPTY && yylen == 1) \
4425  { \
4426  yychar = (Token); \
4427  yylval = (Value); \
4428  YYPOPSTACK (1); \
4429  goto yybackup; \
4430  } \
4431  else \
4432  { \
4433  parser_yyerror (parser, YY_("syntax error: cannot back up")); \
4434  YYERROR; \
4435  } \
4436 while (YYID (0))
4437 
4438 
4439 #define YYTERROR 1
4440 #define YYERRCODE 256
4441 
4442 
4443 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
4444  If N is 0, then set CURRENT to the empty location which ends
4445  the previous symbol: RHS[0] (always defined). */
4446 
4447 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
4448 #ifndef YYLLOC_DEFAULT
4449 # define YYLLOC_DEFAULT(Current, Rhs, N) \
4450  do \
4451  if (YYID (N)) \
4452  { \
4453  (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
4454  (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
4455  (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
4456  (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
4457  } \
4458  else \
4459  { \
4460  (Current).first_line = (Current).last_line = \
4461  YYRHSLOC (Rhs, 0).last_line; \
4462  (Current).first_column = (Current).last_column = \
4463  YYRHSLOC (Rhs, 0).last_column; \
4464  } \
4465  while (YYID (0))
4466 #endif
4467 
4468 
4469 /* This macro is provided for backward compatibility. */
4470 
4471 #ifndef YY_LOCATION_PRINT
4472 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
4473 #endif
4474 
4475 
4476 /* YYLEX -- calling `yylex' with the right arguments. */
4477 
4478 #ifdef YYLEX_PARAM
4479 # define YYLEX yylex (&yylval, YYLEX_PARAM)
4480 #else
4481 # define YYLEX yylex (&yylval, parser)
4482 #endif
4483 
4484 /* Enable debugging if requested. */
4485 #if YYDEBUG
4486 
4487 # ifndef YYFPRINTF
4488 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
4489 # define YYFPRINTF fprintf
4490 # endif
4491 
4492 # define YYDPRINTF(Args) \
4493 do { \
4494  if (yydebug) \
4495  YYFPRINTF Args; \
4496 } while (YYID (0))
4497 
4498 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
4499 do { \
4500  if (yydebug) \
4501  { \
4502  YYFPRINTF (stderr, "%s ", Title); \
4503  yy_symbol_print (stderr, \
4504  Type, Value, parser); \
4505  YYFPRINTF (stderr, "\n"); \
4506  } \
4507 } while (YYID (0))
4508 
4509 
4510 /*--------------------------------.
4511 | Print this symbol on YYOUTPUT. |
4512 `--------------------------------*/
4513 
4514 /*ARGSUSED*/
4515 #if (defined __STDC__ || defined __C99__FUNC__ \
4516  || defined __cplusplus || defined _MSC_VER)
4517 static void
4518 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
4519 #else
4520 static void
4521 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
4522  FILE *yyoutput;
4523  int yytype;
4524  YYSTYPE const * const yyvaluep;
4525  struct parser_params *parser;
4526 #endif
4527 {
4528  if (!yyvaluep)
4529  return;
4530  YYUSE (parser);
4531 # ifdef YYPRINT
4532  if (yytype < YYNTOKENS)
4533  YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
4534 # else
4535  YYUSE (yyoutput);
4536 # endif
4537  switch (yytype)
4538  {
4539  default:
4540  break;
4541  }
4542 }
4543 
4544 
4545 /*--------------------------------.
4546 | Print this symbol on YYOUTPUT. |
4547 `--------------------------------*/
4548 
4549 #if (defined __STDC__ || defined __C99__FUNC__ \
4550  || defined __cplusplus || defined _MSC_VER)
4551 static void
4552 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
4553 #else
4554 static void
4555 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
4556  FILE *yyoutput;
4557  int yytype;
4558  YYSTYPE const * const yyvaluep;
4559  struct parser_params *parser;
4560 #endif
4561 {
4562  if (yytype < YYNTOKENS)
4563  YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
4564  else
4565  YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
4566 
4567  yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
4568  YYFPRINTF (yyoutput, ")");
4569 }
4570 
4571 /*------------------------------------------------------------------.
4572 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
4573 | TOP (included). |
4574 `------------------------------------------------------------------*/
4575 
4576 #if (defined __STDC__ || defined __C99__FUNC__ \
4577  || defined __cplusplus || defined _MSC_VER)
4578 static void
4579 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
4580 #else
4581 static void
4582 yy_stack_print (yybottom, yytop)
4583  yytype_int16 *yybottom;
4584  yytype_int16 *yytop;
4585 #endif
4586 {
4587  YYFPRINTF (stderr, "Stack now");
4588  for (; yybottom <= yytop; yybottom++)
4589  {
4590  int yybot = *yybottom;
4591  YYFPRINTF (stderr, " %d", yybot);
4592  }
4593  YYFPRINTF (stderr, "\n");
4594 }
4595 
4596 # define YY_STACK_PRINT(Bottom, Top) \
4597 do { \
4598  if (yydebug) \
4599  yy_stack_print ((Bottom), (Top)); \
4600 } while (YYID (0))
4601 
4602 
4603 /*------------------------------------------------.
4604 | Report that the YYRULE is going to be reduced. |
4605 `------------------------------------------------*/
4606 
4607 #if (defined __STDC__ || defined __C99__FUNC__ \
4608  || defined __cplusplus || defined _MSC_VER)
4609 static void
4610 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
4611 #else
4612 static void
4613 yy_reduce_print (yyvsp, yyrule, parser)
4614  YYSTYPE *yyvsp;
4615  int yyrule;
4616  struct parser_params *parser;
4617 #endif
4618 {
4619  int yynrhs = yyr2[yyrule];
4620  int yyi;
4621  unsigned long int yylno = yyrline[yyrule];
4622  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
4623  yyrule - 1, yylno);
4624  /* The symbols being reduced. */
4625  for (yyi = 0; yyi < yynrhs; yyi++)
4626  {
4627  YYFPRINTF (stderr, " $%d = ", yyi + 1);
4628  yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
4629  &(yyvsp[(yyi + 1) - (yynrhs)])
4630  , parser);
4631  YYFPRINTF (stderr, "\n");
4632  }
4633 }
4634 
4635 # define YY_REDUCE_PRINT(Rule) \
4636 do { \
4637  if (yydebug) \
4638  yy_reduce_print (yyvsp, Rule, parser); \
4639 } while (YYID (0))
4640 
4641 /* Nonzero means print parse trace. It is left uninitialized so that
4642  multiple parsers can coexist. */
4643 #ifndef yydebug
4644 int yydebug;
4645 #endif
4646 #else /* !YYDEBUG */
4647 # define YYDPRINTF(Args)
4648 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
4649 # define YY_STACK_PRINT(Bottom, Top)
4650 # define YY_REDUCE_PRINT(Rule)
4651 #endif /* !YYDEBUG */
4652 
4653 
4654 /* YYINITDEPTH -- initial size of the parser's stacks. */
4655 #ifndef YYINITDEPTH
4656 # define YYINITDEPTH 200
4657 #endif
4658 
4659 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
4660  if the built-in stack extension method is used).
4661 
4662  Do not make this value too large; the results are undefined if
4663  YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
4664  evaluated with infinite-precision integer arithmetic. */
4665 
4666 #ifndef YYMAXDEPTH
4667 # define YYMAXDEPTH 10000
4668 #endif
4669 
4670 
4671 #if YYERROR_VERBOSE
4672 
4673 # ifndef yystrlen
4674 # if defined __GLIBC__ && defined _STRING_H
4675 # define yystrlen strlen
4676 # else
4677 /* Return the length of YYSTR. */
4678 #if (defined __STDC__ || defined __C99__FUNC__ \
4679  || defined __cplusplus || defined _MSC_VER)
4680 static YYSIZE_T
4681 yystrlen (const char *yystr)
4682 #else
4683 static YYSIZE_T
4684 yystrlen (yystr)
4685  const char *yystr;
4686 #endif
4687 {
4688  YYSIZE_T yylen;
4689  for (yylen = 0; yystr[yylen]; yylen++)
4690  continue;
4691  return yylen;
4692 }
4693 # endif
4694 # endif
4695 
4696 # ifndef yystpcpy
4697 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
4698 # define yystpcpy stpcpy
4699 # else
4700 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
4701  YYDEST. */
4702 #if (defined __STDC__ || defined __C99__FUNC__ \
4703  || defined __cplusplus || defined _MSC_VER)
4704 static char *
4705 yystpcpy (char *yydest, const char *yysrc)
4706 #else
4707 static char *
4708 yystpcpy (yydest, yysrc)
4709  char *yydest;
4710  const char *yysrc;
4711 #endif
4712 {
4713  char *yyd = yydest;
4714  const char *yys = yysrc;
4715 
4716  while ((*yyd++ = *yys++) != '\0')
4717  continue;
4718 
4719  return yyd - 1;
4720 }
4721 # endif
4722 # endif
4723 
4724 # ifndef yytnamerr
4725 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
4726  quotes and backslashes, so that it's suitable for yyerror. The
4727  heuristic is that double-quoting is unnecessary unless the string
4728  contains an apostrophe, a comma, or backslash (other than
4729  backslash-backslash). YYSTR is taken from yytname. If YYRES is
4730  null, do not copy; instead, return the length of what the result
4731  would have been. */
4732 static YYSIZE_T
4733 yytnamerr (char *yyres, const char *yystr)
4734 {
4735  if (*yystr == '"')
4736  {
4737  YYSIZE_T yyn = 0;
4738  char const *yyp = yystr;
4739 
4740  for (;;)
4741  switch (*++yyp)
4742  {
4743  case '\'':
4744  case ',':
4745  goto do_not_strip_quotes;
4746 
4747  case '\\':
4748  if (*++yyp != '\\')
4749  goto do_not_strip_quotes;
4750  /* Fall through. */
4751  default:
4752  if (yyres)
4753  yyres[yyn] = *yyp;
4754  yyn++;
4755  break;
4756 
4757  case '"':
4758  if (yyres)
4759  yyres[yyn] = '\0';
4760  return yyn;
4761  }
4762  do_not_strip_quotes: ;
4763  }
4764 
4765  if (! yyres)
4766  return yystrlen (yystr);
4767 
4768  return yystpcpy (yyres, yystr) - yyres;
4769 }
4770 # endif
4771 
4772 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
4773  about the unexpected token YYTOKEN for the state stack whose top is
4774  YYSSP.
4775 
4776  Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
4777  not large enough to hold the message. In that case, also set
4778  *YYMSG_ALLOC to the required number of bytes. Return 2 if the
4779  required number of bytes is too large to store. */
4780 static int
4781 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
4782  yytype_int16 *yyssp, int yytoken)
4783 {
4784  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
4785  YYSIZE_T yysize = yysize0;
4786  YYSIZE_T yysize1;
4787  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
4788  /* Internationalized format string. */
4789  const char *yyformat = 0;
4790  /* Arguments of yyformat. */
4791  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
4792  /* Number of reported tokens (one for the "unexpected", one per
4793  "expected"). */
4794  int yycount = 0;
4795 
4796  /* There are many possibilities here to consider:
4797  - Assume YYFAIL is not used. It's too flawed to consider. See
4798  <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
4799  for details. YYERROR is fine as it does not invoke this
4800  function.
4801  - If this state is a consistent state with a default action, then
4802  the only way this function was invoked is if the default action
4803  is an error action. In that case, don't check for expected
4804  tokens because there are none.
4805  - The only way there can be no lookahead present (in yychar) is if
4806  this state is a consistent state with a default action. Thus,
4807  detecting the absence of a lookahead is sufficient to determine
4808  that there is no unexpected or expected token to report. In that
4809  case, just report a simple "syntax error".
4810  - Don't assume there isn't a lookahead just because this state is a
4811  consistent state with a default action. There might have been a
4812  previous inconsistent state, consistent state with a non-default
4813  action, or user semantic action that manipulated yychar.
4814  - Of course, the expected token list depends on states to have
4815  correct lookahead information, and it depends on the parser not
4816  to perform extra reductions after fetching a lookahead from the
4817  scanner and before detecting a syntax error. Thus, state merging
4818  (from LALR or IELR) and default reductions corrupt the expected
4819  token list. However, the list is correct for canonical LR with
4820  one exception: it will still contain any token that will not be
4821  accepted due to an error action in a later state.
4822  */
4823  if (yytoken != YYEMPTY)
4824  {
4825  int yyn = yypact[*yyssp];
4826  yyarg[yycount++] = yytname[yytoken];
4827  if (!yypact_value_is_default (yyn))
4828  {
4829  /* Start YYX at -YYN if negative to avoid negative indexes in
4830  YYCHECK. In other words, skip the first -YYN actions for
4831  this state because they are default actions. */
4832  int yyxbegin = yyn < 0 ? -yyn : 0;
4833  /* Stay within bounds of both yycheck and yytname. */
4834  int yychecklim = YYLAST - yyn + 1;
4835  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
4836  int yyx;
4837 
4838  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
4839  if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
4840  && !yytable_value_is_error (yytable[yyx + yyn]))
4841  {
4842  if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
4843  {
4844  yycount = 1;
4845  yysize = yysize0;
4846  break;
4847  }
4848  yyarg[yycount++] = yytname[yyx];
4849  yysize1 = yysize + yytnamerr (0, yytname[yyx]);
4850  if (! (yysize <= yysize1
4851  && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
4852  return 2;
4853  yysize = yysize1;
4854  }
4855  }
4856  }
4857 
4858  switch (yycount)
4859  {
4860 # define YYCASE_(N, S) \
4861  case N: \
4862  yyformat = S; \
4863  break
4864  YYCASE_(0, YY_("syntax error"));
4865  YYCASE_(1, YY_("syntax error, unexpected %s"));
4866  YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
4867  YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
4868  YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
4869  YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
4870 # undef YYCASE_
4871  }
4872 
4873  yysize1 = yysize + yystrlen (yyformat);
4874  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
4875  return 2;
4876  yysize = yysize1;
4877 
4878  if (*yymsg_alloc < yysize)
4879  {
4880  *yymsg_alloc = 2 * yysize;
4881  if (! (yysize <= *yymsg_alloc
4882  && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
4883  *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
4884  return 1;
4885  }
4886 
4887  /* Avoid sprintf, as that infringes on the user's name space.
4888  Don't have undefined behavior even if the translation
4889  produced a string with the wrong number of "%s"s. */
4890  {
4891  char *yyp = *yymsg;
4892  int yyi = 0;
4893  while ((*yyp = *yyformat) != '\0')
4894  if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
4895  {
4896  yyp += yytnamerr (yyp, yyarg[yyi++]);
4897  yyformat += 2;
4898  }
4899  else
4900  {
4901  yyp++;
4902  yyformat++;
4903  }
4904  }
4905  return 0;
4906 }
4907 #endif /* YYERROR_VERBOSE */
4908 
4909 /*-----------------------------------------------.
4910 | Release the memory associated to this symbol. |
4911 `-----------------------------------------------*/
4912 
4913 /*ARGSUSED*/
4914 #if (defined __STDC__ || defined __C99__FUNC__ \
4915  || defined __cplusplus || defined _MSC_VER)
4916 static void
4917 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
4918 #else
4919 static void
4920 yydestruct (yymsg, yytype, yyvaluep, parser)
4921  const char *yymsg;
4922  int yytype;
4923  YYSTYPE *yyvaluep;
4924  struct parser_params *parser;
4925 #endif
4926 {
4927  YYUSE (yyvaluep);
4928  YYUSE (parser);
4929 
4930  if (!yymsg)
4931  yymsg = "Deleting";
4932  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
4933 
4934  switch (yytype)
4935  {
4936 
4937  default:
4938  break;
4939  }
4940 }
4941 
4942 
4943 /* Prevent warnings from -Wmissing-prototypes. */
4944 #ifdef YYPARSE_PARAM
4945 #if defined __STDC__ || defined __cplusplus
4946 int yyparse (void *YYPARSE_PARAM);
4947 #else
4948 int yyparse ();
4949 #endif
4950 #else /* ! YYPARSE_PARAM */
4951 #if defined __STDC__ || defined __cplusplus
4952 int yyparse (struct parser_params *parser);
4953 #else
4954 int yyparse ();
4955 #endif
4956 #endif /* ! YYPARSE_PARAM */
4957 
4958 
4959 /*----------.
4960 | yyparse. |
4961 `----------*/
4962 
4963 #ifdef YYPARSE_PARAM
4964 #if (defined __STDC__ || defined __C99__FUNC__ \
4965  || defined __cplusplus || defined _MSC_VER)
4966 int
4967 yyparse (void *YYPARSE_PARAM)
4968 #else
4969 int
4970 yyparse (YYPARSE_PARAM)
4971  void *YYPARSE_PARAM;
4972 #endif
4973 #else /* ! YYPARSE_PARAM */
4974 #if (defined __STDC__ || defined __C99__FUNC__ \
4975  || defined __cplusplus || defined _MSC_VER)
4976 int
4977 yyparse (struct parser_params *parser)
4978 #else
4979 int
4980 yyparse (parser)
4981  struct parser_params *parser;
4982 #endif
4983 #endif
4984 {
4985 /* The lookahead symbol. */
4986 int yychar;
4987 
4988 /* The semantic value of the lookahead symbol. */
4989 YYSTYPE yylval;
4990 
4991  /* Number of syntax errors so far. */
4992  int yynerrs;
4993 
4994  int yystate;
4995  /* Number of tokens to shift before error messages enabled. */
4996  int yyerrstatus;
4997 
4998  /* The stacks and their tools:
4999  `yyss': related to states.
5000  `yyvs': related to semantic values.
5001 
5002  Refer to the stacks thru separate pointers, to allow yyoverflow
5003  to reallocate them elsewhere. */
5004 
5005  /* The state stack. */
5006  yytype_int16 yyssa[YYINITDEPTH];
5007  yytype_int16 *yyss;
5008  yytype_int16 *yyssp;
5009 
5010  /* The semantic value stack. */
5011  YYSTYPE yyvsa[YYINITDEPTH];
5012  YYSTYPE *yyvs;
5013  YYSTYPE *yyvsp;
5014 
5015  YYSIZE_T yystacksize;
5016 
5017  int yyn;
5018  int yyresult;
5019  /* Lookahead token as an internal (translated) token number. */
5020  int yytoken;
5021  /* The variables used to return semantic value and location from the
5022  action routines. */
5023  YYSTYPE yyval;
5024 
5025 #if YYERROR_VERBOSE
5026  /* Buffer for error messages, and its allocated size. */
5027  char yymsgbuf[128];
5028  char *yymsg = yymsgbuf;
5029  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
5030 #endif
5031 
5032 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
5033 
5034  /* The number of symbols on the RHS of the reduced rule.
5035  Keep to zero when no symbol should be popped. */
5036  int yylen = 0;
5037 
5038  yytoken = 0;
5039  yyss = yyssa;
5040  yyvs = yyvsa;
5041  yystacksize = YYINITDEPTH;
5042 
5043  YYDPRINTF ((stderr, "Starting parse\n"));
5044 
5045  yystate = 0;
5046  yyerrstatus = 0;
5047  yynerrs = 0;
5048  yychar = YYEMPTY; /* Cause a token to be read. */
5049 
5050  /* Initialize stack pointers.
5051  Waste one element of value and location stack
5052  so that they stay on the same level as the state stack.
5053  The wasted elements are never initialized. */
5054  yyssp = yyss;
5055  yyvsp = yyvs;
5056 
5057  goto yysetstate;
5058 
5059 /*------------------------------------------------------------.
5060 | yynewstate -- Push a new state, which is found in yystate. |
5061 `------------------------------------------------------------*/
5062  yynewstate:
5063  /* In all cases, when you get here, the value and location stacks
5064  have just been pushed. So pushing a state here evens the stacks. */
5065  yyssp++;
5066 
5067  yysetstate:
5068  *yyssp = yystate;
5069 
5070  if (yyss + yystacksize - 1 <= yyssp)
5071  {
5072  /* Get the current used size of the three stacks, in elements. */
5073  YYSIZE_T yysize = yyssp - yyss + 1;
5074 
5075 #ifdef yyoverflow
5076  {
5077  /* Give user a chance to reallocate the stack. Use copies of
5078  these so that the &'s don't force the real ones into
5079  memory. */
5080  YYSTYPE *yyvs1 = yyvs;
5081  yytype_int16 *yyss1 = yyss;
5082 
5083  /* Each stack pointer address is followed by the size of the
5084  data in use in that stack, in bytes. This used to be a
5085  conditional around just the two extra args, but that might
5086  be undefined if yyoverflow is a macro. */
5087  yyoverflow (YY_("memory exhausted"),
5088  &yyss1, yysize * sizeof (*yyssp),
5089  &yyvs1, yysize * sizeof (*yyvsp),
5090  &yystacksize);
5091 
5092  yyss = yyss1;
5093  yyvs = yyvs1;
5094  }
5095 #else /* no yyoverflow */
5096 # ifndef YYSTACK_RELOCATE
5097  goto yyexhaustedlab;
5098 # else
5099  /* Extend the stack our own way. */
5100  if (YYMAXDEPTH <= yystacksize)
5101  goto yyexhaustedlab;
5102  yystacksize *= 2;
5103  if (YYMAXDEPTH < yystacksize)
5104  yystacksize = YYMAXDEPTH;
5105 
5106  {
5107  yytype_int16 *yyss1 = yyss;
5108  union yyalloc *yyptr =
5109  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
5110  if (! yyptr)
5111  goto yyexhaustedlab;
5112  YYSTACK_RELOCATE (yyss_alloc, yyss);
5113  YYSTACK_RELOCATE (yyvs_alloc, yyvs);
5114 # undef YYSTACK_RELOCATE
5115  if (yyss1 != yyssa)
5116  YYSTACK_FREE (yyss1);
5117  }
5118 # endif
5119 #endif /* no yyoverflow */
5120 
5121  yyssp = yyss + yysize - 1;
5122  yyvsp = yyvs + yysize - 1;
5123 
5124  YYDPRINTF ((stderr, "Stack size increased to %lu\n",
5125  (unsigned long int) yystacksize));
5126 
5127  if (yyss + yystacksize - 1 <= yyssp)
5128  YYABORT;
5129  }
5130 
5131  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
5132 
5133  if (yystate == YYFINAL)
5134  YYACCEPT;
5135 
5136  goto yybackup;
5137 
5138 /*-----------.
5139 | yybackup. |
5140 `-----------*/
5141 yybackup:
5142 
5143  /* Do appropriate processing given the current state. Read a
5144  lookahead token if we need one and don't already have one. */
5145 
5146  /* First try to decide what to do without reference to lookahead token. */
5147  yyn = yypact[yystate];
5148  if (yypact_value_is_default (yyn))
5149  goto yydefault;
5150 
5151  /* Not known => get a lookahead token if don't already have one. */
5152 
5153  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
5154  if (yychar == YYEMPTY)
5155  {
5156  YYDPRINTF ((stderr, "Reading a token: "));
5157  yychar = YYLEX;
5158  }
5159 
5160  if (yychar <= YYEOF)
5161  {
5162  yychar = yytoken = YYEOF;
5163  YYDPRINTF ((stderr, "Now at end of input.\n"));
5164  }
5165  else
5166  {
5167  yytoken = YYTRANSLATE (yychar);
5168  YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
5169  }
5170 
5171  /* If the proper action on seeing token YYTOKEN is to reduce or to
5172  detect an error, take that action. */
5173  yyn += yytoken;
5174  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
5175  goto yydefault;
5176  yyn = yytable[yyn];
5177  if (yyn <= 0)
5178  {
5179  if (yytable_value_is_error (yyn))
5180  goto yyerrlab;
5181  yyn = -yyn;
5182  goto yyreduce;
5183  }
5184 
5185  /* Count tokens shifted since error; after three, turn off error
5186  status. */
5187  if (yyerrstatus)
5188  yyerrstatus--;
5189 
5190  /* Shift the lookahead token. */
5191  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
5192 
5193  /* Discard the shifted token. */
5194  yychar = YYEMPTY;
5195 
5196  yystate = yyn;
5197  *++yyvsp = yylval;
5198 
5199  goto yynewstate;
5200 
5201 
5202 /*-----------------------------------------------------------.
5203 | yydefault -- do the default action for the current state. |
5204 `-----------------------------------------------------------*/
5205 yydefault:
5206  yyn = yydefact[yystate];
5207  if (yyn == 0)
5208  goto yyerrlab;
5209  goto yyreduce;
5210 
5211 
5212 /*-----------------------------.
5213 | yyreduce -- Do a reduction. |
5214 `-----------------------------*/
5215 yyreduce:
5216  /* yyn is the number of a rule to reduce with. */
5217  yylen = yyr2[yyn];
5218 
5219  /* If YYLEN is nonzero, implement the default value of the action:
5220  `$$ = $1'.
5221 
5222  Otherwise, the following line sets YYVAL to garbage.
5223  This behavior is undocumented and Bison
5224  users should not rely upon it. Assigning to YYVAL
5225  unconditionally makes the parser a bit smaller, and it avoids a
5226  GCC warning that YYVAL may be used uninitialized. */
5227  yyval = yyvsp[1-yylen];
5228 
5229 
5230  YY_REDUCE_PRINT (yyn);
5231  switch (yyn)
5232  {
5233  case 2:
5234 
5235 /* Line 1806 of yacc.c */
5236 #line 863 "parse.y"
5237  {
5238  lex_state = EXPR_BEG;
5239  /*%%%*/
5241  /*%
5242  local_push(0);
5243  %*/
5244  }
5245  break;
5246 
5247  case 3:
5248 
5249 /* Line 1806 of yacc.c */
5250 #line 872 "parse.y"
5251  {
5252  /*%%%*/
5253  if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
5254  /* last expression should not be void */
5255  if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
5256  else {
5257  NODE *node = (yyvsp[(2) - (2)].node);
5258  while (node->nd_next) {
5259  node = node->nd_next;
5260  }
5261  void_expr(node->nd_head);
5262  }
5263  }
5264  ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
5265  /*%
5266  $$ = $2;
5267  parser->result = dispatch1(program, $$);
5268  %*/
5269  local_pop();
5270  }
5271  break;
5272 
5273  case 4:
5274 
5275 /* Line 1806 of yacc.c */
5276 #line 895 "parse.y"
5277  {
5278  /*%%%*/
5279  void_stmts((yyvsp[(1) - (2)].node));
5281  /*%
5282  %*/
5283  (yyval.node) = (yyvsp[(1) - (2)].node);
5284  }
5285  break;
5286 
5287  case 5:
5288 
5289 /* Line 1806 of yacc.c */
5290 #line 906 "parse.y"
5291  {
5292  /*%%%*/
5293  (yyval.node) = NEW_BEGIN(0);
5294  /*%
5295  $$ = dispatch2(stmts_add, dispatch0(stmts_new),
5296  dispatch0(void_stmt));
5297  %*/
5298  }
5299  break;
5300 
5301  case 6:
5302 
5303 /* Line 1806 of yacc.c */
5304 #line 915 "parse.y"
5305  {
5306  /*%%%*/
5307  (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
5308  /*%
5309  $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
5310  %*/
5311  }
5312  break;
5313 
5314  case 7:
5315 
5316 /* Line 1806 of yacc.c */
5317 #line 923 "parse.y"
5318  {
5319  /*%%%*/
5320  (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
5321  /*%
5322  $$ = dispatch2(stmts_add, $1, $3);
5323  %*/
5324  }
5325  break;
5326 
5327  case 8:
5328 
5329 /* Line 1806 of yacc.c */
5330 #line 931 "parse.y"
5331  {
5332  (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
5333  }
5334  break;
5335 
5336  case 10:
5337 
5338 /* Line 1806 of yacc.c */
5339 #line 938 "parse.y"
5340  {
5341  /*%%%*/
5342  /* local_push(0); */
5343  /*%
5344  %*/
5345  }
5346  break;
5347 
5348  case 11:
5349 
5350 /* Line 1806 of yacc.c */
5351 #line 945 "parse.y"
5352  {
5353  /*%%%*/
5355  (yyvsp[(4) - (5)].node));
5356  /* NEW_PREEXE($4)); */
5357  /* local_pop(); */
5358  (yyval.node) = NEW_BEGIN(0);
5359  /*%
5360  $$ = dispatch1(BEGIN, $4);
5361  %*/
5362  }
5363  break;
5364 
5365  case 12:
5366 
5367 /* Line 1806 of yacc.c */
5368 #line 962 "parse.y"
5369  {
5370  /*%%%*/
5371  (yyval.node) = (yyvsp[(1) - (4)].node);
5372  if ((yyvsp[(2) - (4)].node)) {
5373  (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
5374  }
5375  else if ((yyvsp[(3) - (4)].node)) {
5376  rb_warn0("else without rescue is useless");
5377  (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
5378  }
5379  if ((yyvsp[(4) - (4)].node)) {
5380  if ((yyval.node)) {
5381  (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
5382  }
5383  else {
5384  (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
5385  }
5386  }
5387  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
5388  /*%
5389  $$ = dispatch4(bodystmt,
5390  escape_Qundef($1),
5391  escape_Qundef($2),
5392  escape_Qundef($3),
5393  escape_Qundef($4));
5394  %*/
5395  }
5396  break;
5397 
5398  case 13:
5399 
5400 /* Line 1806 of yacc.c */
5401 #line 992 "parse.y"
5402  {
5403  /*%%%*/
5404  void_stmts((yyvsp[(1) - (2)].node));
5406  /*%
5407  %*/
5408  (yyval.node) = (yyvsp[(1) - (2)].node);
5409  }
5410  break;
5411 
5412  case 14:
5413 
5414 /* Line 1806 of yacc.c */
5415 #line 1003 "parse.y"
5416  {
5417  /*%%%*/
5418  (yyval.node) = NEW_BEGIN(0);
5419  /*%
5420  $$ = dispatch2(stmts_add, dispatch0(stmts_new),
5421  dispatch0(void_stmt));
5422  %*/
5423  }
5424  break;
5425 
5426  case 15:
5427 
5428 /* Line 1806 of yacc.c */
5429 #line 1012 "parse.y"
5430  {
5431  /*%%%*/
5432  (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
5433  /*%
5434  $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
5435  %*/
5436  }
5437  break;
5438 
5439  case 16:
5440 
5441 /* Line 1806 of yacc.c */
5442 #line 1020 "parse.y"
5443  {
5444  /*%%%*/
5445  (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
5446  /*%
5447  $$ = dispatch2(stmts_add, $1, $3);
5448  %*/
5449  }
5450  break;
5451 
5452  case 17:
5453 
5454 /* Line 1806 of yacc.c */
5455 #line 1028 "parse.y"
5456  {
5457  (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
5458  }
5459  break;
5460 
5461  case 18:
5462 
5463 /* Line 1806 of yacc.c */
5464 #line 1034 "parse.y"
5465  {
5466  (yyval.node) = (yyvsp[(1) - (1)].node);
5467  }
5468  break;
5469 
5470  case 19:
5471 
5472 /* Line 1806 of yacc.c */
5473 #line 1038 "parse.y"
5474  {
5475  yyerror("BEGIN is permitted only at toplevel");
5476  /*%%%*/
5477  /* local_push(0); */
5478  /*%
5479  %*/
5480  }
5481  break;
5482 
5483  case 20:
5484 
5485 /* Line 1806 of yacc.c */
5486 #line 1046 "parse.y"
5487  {
5488  /*%%%*/
5490  (yyvsp[(4) - (5)].node));
5491  /* NEW_PREEXE($4)); */
5492  /* local_pop(); */
5493  (yyval.node) = NEW_BEGIN(0);
5494  /*%
5495  $$ = dispatch1(BEGIN, $4);
5496  %*/
5497  }
5498  break;
5499 
5500  case 21:
5501 
5502 /* Line 1806 of yacc.c */
5503 #line 1058 "parse.y"
5504  {lex_state = EXPR_FNAME;}
5505  break;
5506 
5507  case 22:
5508 
5509 /* Line 1806 of yacc.c */
5510 #line 1059 "parse.y"
5511  {
5512  /*%%%*/
5513  (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
5514  /*%
5515  $$ = dispatch2(alias, $2, $4);
5516  %*/
5517  }
5518  break;
5519 
5520  case 23:
5521 
5522 /* Line 1806 of yacc.c */
5523 #line 1067 "parse.y"
5524  {
5525  /*%%%*/
5526  (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
5527  /*%
5528  $$ = dispatch2(var_alias, $2, $3);
5529  %*/
5530  }
5531  break;
5532 
5533  case 24:
5534 
5535 /* Line 1806 of yacc.c */
5536 #line 1075 "parse.y"
5537  {
5538  /*%%%*/
5539  char buf[2];
5540  buf[0] = '$';
5541  buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
5542  (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
5543  /*%
5544  $$ = dispatch2(var_alias, $2, $3);
5545  %*/
5546  }
5547  break;
5548 
5549  case 25:
5550 
5551 /* Line 1806 of yacc.c */
5552 #line 1086 "parse.y"
5553  {
5554  /*%%%*/
5555  yyerror("can't make alias for the number variables");
5556  (yyval.node) = NEW_BEGIN(0);
5557  /*%
5558  $$ = dispatch2(var_alias, $2, $3);
5559  $$ = dispatch1(alias_error, $$);
5560  %*/
5561  }
5562  break;
5563 
5564  case 26:
5565 
5566 /* Line 1806 of yacc.c */
5567 #line 1096 "parse.y"
5568  {
5569  /*%%%*/
5570  (yyval.node) = (yyvsp[(2) - (2)].node);
5571  /*%
5572  $$ = dispatch1(undef, $2);
5573  %*/
5574  }
5575  break;
5576 
5577  case 27:
5578 
5579 /* Line 1806 of yacc.c */
5580 #line 1104 "parse.y"
5581  {
5582  /*%%%*/
5583  (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
5584  fixpos((yyval.node), (yyvsp[(3) - (3)].node));
5585  /*%
5586  $$ = dispatch2(if_mod, $3, $1);
5587  %*/
5588  }
5589  break;
5590 
5591  case 28:
5592 
5593 /* Line 1806 of yacc.c */
5594 #line 1113 "parse.y"
5595  {
5596  /*%%%*/
5597  (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
5598  fixpos((yyval.node), (yyvsp[(3) - (3)].node));
5599  /*%
5600  $$ = dispatch2(unless_mod, $3, $1);
5601  %*/
5602  }
5603  break;
5604 
5605  case 29:
5606 
5607 /* Line 1806 of yacc.c */
5608 #line 1122 "parse.y"
5609  {
5610  /*%%%*/
5611  if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
5612  (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
5613  }
5614  else {
5615  (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
5616  }
5617  /*%
5618  $$ = dispatch2(while_mod, $3, $1);
5619  %*/
5620  }
5621  break;
5622 
5623  case 30:
5624 
5625 /* Line 1806 of yacc.c */
5626 #line 1135 "parse.y"
5627  {
5628  /*%%%*/
5629  if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
5630  (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
5631  }
5632  else {
5633  (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
5634  }
5635  /*%
5636  $$ = dispatch2(until_mod, $3, $1);
5637  %*/
5638  }
5639  break;
5640 
5641  case 31:
5642 
5643 /* Line 1806 of yacc.c */
5644 #line 1148 "parse.y"
5645  {
5646  /*%%%*/
5647  NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
5648  (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
5649  /*%
5650  $$ = dispatch2(rescue_mod, $1, $3);
5651  %*/
5652  }
5653  break;
5654 
5655  case 32:
5656 
5657 /* Line 1806 of yacc.c */
5658 #line 1157 "parse.y"
5659  {
5660  if (in_def || in_single) {
5661  rb_warn0("END in method; use at_exit");
5662  }
5663  /*%%%*/
5664  (yyval.node) = NEW_POSTEXE(NEW_NODE(
5665  NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].node) /* body */, 0 /* args */));
5666  /*%
5667  $$ = dispatch1(END, $3);
5668  %*/
5669  }
5670  break;
5671 
5672  case 34:
5673 
5674 /* Line 1806 of yacc.c */
5675 #line 1170 "parse.y"
5676  {
5677  /*%%%*/
5678  value_expr((yyvsp[(3) - (3)].node));
5679  (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
5680  (yyval.node) = (yyvsp[(1) - (3)].node);
5681  /*%
5682  $$ = dispatch2(massign, $1, $3);
5683  %*/
5684  }
5685  break;
5686 
5687  case 35:
5688 
5689 /* Line 1806 of yacc.c */
5690 #line 1180 "parse.y"
5691  {
5692  value_expr((yyvsp[(3) - (3)].node));
5693  (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
5694  }
5695  break;
5696 
5697  case 36:
5698 
5699 /* Line 1806 of yacc.c */
5700 #line 1185 "parse.y"
5701  {
5702  /*%%%*/
5703  NODE *args;
5704 
5705  value_expr((yyvsp[(6) - (6)].node));
5706  if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
5707  args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
5708  if ((yyvsp[(5) - (6)].id) == tOROP) {
5709  (yyvsp[(5) - (6)].id) = 0;
5710  }
5711  else if ((yyvsp[(5) - (6)].id) == tANDOP) {
5712  (yyvsp[(5) - (6)].id) = 1;
5713  }
5714  (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
5715  fixpos((yyval.node), (yyvsp[(1) - (6)].node));
5716  /*%
5717  $$ = dispatch2(aref_field, $1, escape_Qundef($3));
5718  $$ = dispatch3(opassign, $$, $5, $6);
5719  %*/
5720  }
5721  break;
5722 
5723  case 37:
5724 
5725 /* Line 1806 of yacc.c */
5726 #line 1206 "parse.y"
5727  {
5728  value_expr((yyvsp[(5) - (5)].node));
5729  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
5730  }
5731  break;
5732 
5733  case 38:
5734 
5735 /* Line 1806 of yacc.c */
5736 #line 1211 "parse.y"
5737  {
5738  value_expr((yyvsp[(5) - (5)].node));
5739  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
5740  }
5741  break;
5742 
5743  case 39:
5744 
5745 /* Line 1806 of yacc.c */
5746 #line 1216 "parse.y"
5747  {
5748  /*%%%*/
5749  (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
5750  (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
5751  /*%
5752  $$ = dispatch2(const_path_field, $1, $3);
5753  $$ = dispatch3(opassign, $$, $4, $5);
5754  %*/
5755  }
5756  break;
5757 
5758  case 40:
5759 
5760 /* Line 1806 of yacc.c */
5761 #line 1226 "parse.y"
5762  {
5763  value_expr((yyvsp[(5) - (5)].node));
5764  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_intern("::"), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
5765  }
5766  break;
5767 
5768  case 41:
5769 
5770 /* Line 1806 of yacc.c */
5771 #line 1231 "parse.y"
5772  {
5773  /*%%%*/
5774  rb_backref_error((yyvsp[(1) - (3)].node));
5775  (yyval.node) = NEW_BEGIN(0);
5776  /*%
5777  $$ = dispatch2(assign, dispatch1(var_field, $1), $3);
5778  $$ = dispatch1(assign_error, $$);
5779  %*/
5780  }
5781  break;
5782 
5783  case 42:
5784 
5785 /* Line 1806 of yacc.c */
5786 #line 1241 "parse.y"
5787  {
5788  /*%%%*/
5789  value_expr((yyvsp[(3) - (3)].node));
5790  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5791  /*%
5792  $$ = dispatch2(assign, $1, $3);
5793  %*/
5794  }
5795  break;
5796 
5797  case 43:
5798 
5799 /* Line 1806 of yacc.c */
5800 #line 1250 "parse.y"
5801  {
5802  /*%%%*/
5803  (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
5804  (yyval.node) = (yyvsp[(1) - (3)].node);
5805  /*%
5806  $$ = dispatch2(massign, $1, $3);
5807  %*/
5808  }
5809  break;
5810 
5811  case 45:
5812 
5813 /* Line 1806 of yacc.c */
5814 #line 1262 "parse.y"
5815  {
5816  /*%%%*/
5817  value_expr((yyvsp[(3) - (3)].node));
5818  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5819  /*%
5820  $$ = dispatch2(assign, $1, $3);
5821  %*/
5822  }
5823  break;
5824 
5825  case 46:
5826 
5827 /* Line 1806 of yacc.c */
5828 #line 1271 "parse.y"
5829  {
5830  /*%%%*/
5831  value_expr((yyvsp[(3) - (3)].node));
5832  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5833  /*%
5834  $$ = dispatch2(assign, $1, $3);
5835  %*/
5836  }
5837  break;
5838 
5839  case 48:
5840 
5841 /* Line 1806 of yacc.c */
5842 #line 1284 "parse.y"
5843  {
5844  /*%%%*/
5845  (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5846  /*%
5847  $$ = dispatch3(binary, $1, ripper_intern("and"), $3);
5848  %*/
5849  }
5850  break;
5851 
5852  case 49:
5853 
5854 /* Line 1806 of yacc.c */
5855 #line 1292 "parse.y"
5856  {
5857  /*%%%*/
5858  (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5859  /*%
5860  $$ = dispatch3(binary, $1, ripper_intern("or"), $3);
5861  %*/
5862  }
5863  break;
5864 
5865  case 50:
5866 
5867 /* Line 1806 of yacc.c */
5868 #line 1300 "parse.y"
5869  {
5870  /*%%%*/
5871  (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
5872  /*%
5873  $$ = dispatch2(unary, ripper_intern("not"), $3);
5874  %*/
5875  }
5876  break;
5877 
5878  case 51:
5879 
5880 /* Line 1806 of yacc.c */
5881 #line 1308 "parse.y"
5882  {
5883  /*%%%*/
5884  (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
5885  /*%
5886  $$ = dispatch2(unary, ripper_id2sym('!'), $2);
5887  %*/
5888  }
5889  break;
5890 
5891  case 53:
5892 
5893 /* Line 1806 of yacc.c */
5894 #line 1319 "parse.y"
5895  {
5896  /*%%%*/
5897  value_expr((yyvsp[(1) - (1)].node));
5898  (yyval.node) = (yyvsp[(1) - (1)].node);
5899  if (!(yyval.node)) (yyval.node) = NEW_NIL();
5900  /*%
5901  $$ = $1;
5902  %*/
5903  }
5904  break;
5905 
5906  case 57:
5907 
5908 /* Line 1806 of yacc.c */
5909 #line 1336 "parse.y"
5910  {
5911  /*%%%*/
5912  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
5913  /*%
5914  $$ = dispatch3(call, $1, $2, $3);
5915  $$ = method_arg($$, $4);
5916  %*/
5917  }
5918  break;
5919 
5920  case 58:
5921 
5922 /* Line 1806 of yacc.c */
5923 #line 1347 "parse.y"
5924  {
5925  (yyvsp[(1) - (1)].vars) = dyna_push();
5926  /*%%%*/
5927  (yyval.num) = ruby_sourceline;
5928  /*%
5929  %*/
5930  }
5931  break;
5932 
5933  case 59:
5934 
5935 /* Line 1806 of yacc.c */
5936 #line 1357 "parse.y"
5937  {
5938  /*%%%*/
5939  (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
5940  nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
5941  /*%
5942  $$ = dispatch2(brace_block, escape_Qundef($3), $4);
5943  %*/
5944  dyna_pop((yyvsp[(1) - (5)].vars));
5945  }
5946  break;
5947 
5948  case 60:
5949 
5950 /* Line 1806 of yacc.c */
5951 #line 1369 "parse.y"
5952  {
5953  /*%%%*/
5954  (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
5955  nd_set_line((yyval.node), tokline);
5956  /*%
5957  %*/
5958  }
5959  break;
5960 
5961  case 61:
5962 
5963 /* Line 1806 of yacc.c */
5964 #line 1379 "parse.y"
5965  {
5966  /*%%%*/
5967  (yyval.node) = (yyvsp[(1) - (2)].node);
5968  (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
5969  /*%
5970  $$ = dispatch2(command, $1, $2);
5971  %*/
5972  }
5973  break;
5974 
5975  case 62:
5976 
5977 /* Line 1806 of yacc.c */
5978 #line 1388 "parse.y"
5979  {
5980  /*%%%*/
5981  block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
5982  (yyvsp[(1) - (3)].node)->nd_args = (yyvsp[(2) - (3)].node);
5983  (yyvsp[(3) - (3)].node)->nd_iter = (yyvsp[(1) - (3)].node);
5984  (yyval.node) = (yyvsp[(3) - (3)].node);
5985  fixpos((yyval.node), (yyvsp[(1) - (3)].node));
5986  /*%
5987  $$ = dispatch2(command, $1, $2);
5988  $$ = method_add_block($$, $3);
5989  %*/
5990  }
5991  break;
5992 
5993  case 63:
5994 
5995 /* Line 1806 of yacc.c */
5996 #line 1401 "parse.y"
5997  {
5998  /*%%%*/
5999  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
6000  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
6001  /*%
6002  $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
6003  %*/
6004  }
6005  break;
6006 
6007  case 64:
6008 
6009 /* Line 1806 of yacc.c */
6010 #line 1410 "parse.y"
6011  {
6012  /*%%%*/
6013  block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
6014  (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
6015  (yyval.node) = (yyvsp[(5) - (5)].node);
6016  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
6017  /*%
6018  $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
6019  $$ = method_add_block($$, $5);
6020  %*/
6021  }
6022  break;
6023 
6024  case 65:
6025 
6026 /* Line 1806 of yacc.c */
6027 #line 1422 "parse.y"
6028  {
6029  /*%%%*/
6030  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
6031  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
6032  /*%
6033  $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
6034  %*/
6035  }
6036  break;
6037 
6038  case 66:
6039 
6040 /* Line 1806 of yacc.c */
6041 #line 1431 "parse.y"
6042  {
6043  /*%%%*/
6044  block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
6045  (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
6046  (yyval.node) = (yyvsp[(5) - (5)].node);
6047  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
6048  /*%
6049  $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
6050  $$ = method_add_block($$, $5);
6051  %*/
6052  }
6053  break;
6054 
6055  case 67:
6056 
6057 /* Line 1806 of yacc.c */
6058 #line 1443 "parse.y"
6059  {
6060  /*%%%*/
6061  (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
6062  fixpos((yyval.node), (yyvsp[(2) - (2)].node));
6063  /*%
6064  $$ = dispatch1(super, $2);
6065  %*/
6066  }
6067  break;
6068 
6069  case 68:
6070 
6071 /* Line 1806 of yacc.c */
6072 #line 1452 "parse.y"
6073  {
6074  /*%%%*/
6075  (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
6076  fixpos((yyval.node), (yyvsp[(2) - (2)].node));
6077  /*%
6078  $$ = dispatch1(yield, $2);
6079  %*/
6080  }
6081  break;
6082 
6083  case 69:
6084 
6085 /* Line 1806 of yacc.c */
6086 #line 1461 "parse.y"
6087  {
6088  /*%%%*/
6089  (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
6090  /*%
6091  $$ = dispatch1(return, $2);
6092  %*/
6093  }
6094  break;
6095 
6096  case 70:
6097 
6098 /* Line 1806 of yacc.c */
6099 #line 1469 "parse.y"
6100  {
6101  /*%%%*/
6102  (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
6103  /*%
6104  $$ = dispatch1(break, $2);
6105  %*/
6106  }
6107  break;
6108 
6109  case 71:
6110 
6111 /* Line 1806 of yacc.c */
6112 #line 1477 "parse.y"
6113  {
6114  /*%%%*/
6115  (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
6116  /*%
6117  $$ = dispatch1(next, $2);
6118  %*/
6119  }
6120  break;
6121 
6122  case 73:
6123 
6124 /* Line 1806 of yacc.c */
6125 #line 1488 "parse.y"
6126  {
6127  /*%%%*/
6128  (yyval.node) = (yyvsp[(2) - (3)].node);
6129  /*%
6130  $$ = dispatch1(mlhs_paren, $2);
6131  %*/
6132  }
6133  break;
6134 
6135  case 75:
6136 
6137 /* Line 1806 of yacc.c */
6138 #line 1499 "parse.y"
6139  {
6140  /*%%%*/
6141  (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
6142  /*%
6143  $$ = dispatch1(mlhs_paren, $2);
6144  %*/
6145  }
6146  break;
6147 
6148  case 76:
6149 
6150 /* Line 1806 of yacc.c */
6151 #line 1509 "parse.y"
6152  {
6153  /*%%%*/
6154  (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
6155  /*%
6156  $$ = $1;
6157  %*/
6158  }
6159  break;
6160 
6161  case 77:
6162 
6163 /* Line 1806 of yacc.c */
6164 #line 1517 "parse.y"
6165  {
6166  /*%%%*/
6167  (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
6168  /*%
6169  $$ = mlhs_add($1, $2);
6170  %*/
6171  }
6172  break;
6173 
6174  case 78:
6175 
6176 /* Line 1806 of yacc.c */
6177 #line 1525 "parse.y"
6178  {
6179  /*%%%*/
6180  (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6181  /*%
6182  $$ = mlhs_add_star($1, $3);
6183  %*/
6184  }
6185  break;
6186 
6187  case 79:
6188 
6189 /* Line 1806 of yacc.c */
6190 #line 1533 "parse.y"
6191  {
6192  /*%%%*/
6193  (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
6194  /*%
6195  $1 = mlhs_add_star($1, $3);
6196  $$ = mlhs_add($1, $5);
6197  %*/
6198  }
6199  break;
6200 
6201  case 80:
6202 
6203 /* Line 1806 of yacc.c */
6204 #line 1542 "parse.y"
6205  {
6206  /*%%%*/
6207  (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
6208  /*%
6209  $$ = mlhs_add_star($1, Qnil);
6210  %*/
6211  }
6212  break;
6213 
6214  case 81:
6215 
6216 /* Line 1806 of yacc.c */
6217 #line 1550 "parse.y"
6218  {
6219  /*%%%*/
6220  (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
6221  /*%
6222  $1 = mlhs_add_star($1, Qnil);
6223  $$ = mlhs_add($1, $4);
6224  %*/
6225  }
6226  break;
6227 
6228  case 82:
6229 
6230 /* Line 1806 of yacc.c */
6231 #line 1559 "parse.y"
6232  {
6233  /*%%%*/
6234  (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
6235  /*%
6236  $$ = mlhs_add_star(mlhs_new(), $2);
6237  %*/
6238  }
6239  break;
6240 
6241  case 83:
6242 
6243 /* Line 1806 of yacc.c */
6244 #line 1567 "parse.y"
6245  {
6246  /*%%%*/
6247  (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
6248  /*%
6249  $2 = mlhs_add_star(mlhs_new(), $2);
6250  $$ = mlhs_add($2, $4);
6251  %*/
6252  }
6253  break;
6254 
6255  case 84:
6256 
6257 /* Line 1806 of yacc.c */
6258 #line 1576 "parse.y"
6259  {
6260  /*%%%*/
6261  (yyval.node) = NEW_MASGN(0, -1);
6262  /*%
6263  $$ = mlhs_add_star(mlhs_new(), Qnil);
6264  %*/
6265  }
6266  break;
6267 
6268  case 85:
6269 
6270 /* Line 1806 of yacc.c */
6271 #line 1584 "parse.y"
6272  {
6273  /*%%%*/
6274  (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
6275  /*%
6276  $$ = mlhs_add_star(mlhs_new(), Qnil);
6277  $$ = mlhs_add($$, $3);
6278  %*/
6279  }
6280  break;
6281 
6282  case 87:
6283 
6284 /* Line 1806 of yacc.c */
6285 #line 1596 "parse.y"
6286  {
6287  /*%%%*/
6288  (yyval.node) = (yyvsp[(2) - (3)].node);
6289  /*%
6290  $$ = dispatch1(mlhs_paren, $2);
6291  %*/
6292  }
6293  break;
6294 
6295  case 88:
6296 
6297 /* Line 1806 of yacc.c */
6298 #line 1606 "parse.y"
6299  {
6300  /*%%%*/
6301  (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
6302  /*%
6303  $$ = mlhs_add(mlhs_new(), $1);
6304  %*/
6305  }
6306  break;
6307 
6308  case 89:
6309 
6310 /* Line 1806 of yacc.c */
6311 #line 1614 "parse.y"
6312  {
6313  /*%%%*/
6314  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
6315  /*%
6316  $$ = mlhs_add($1, $2);
6317  %*/
6318  }
6319  break;
6320 
6321  case 90:
6322 
6323 /* Line 1806 of yacc.c */
6324 #line 1624 "parse.y"
6325  {
6326  /*%%%*/
6327  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
6328  /*%
6329  $$ = mlhs_add(mlhs_new(), $1);
6330  %*/
6331  }
6332  break;
6333 
6334  case 91:
6335 
6336 /* Line 1806 of yacc.c */
6337 #line 1632 "parse.y"
6338  {
6339  /*%%%*/
6340  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6341  /*%
6342  $$ = mlhs_add($1, $3);
6343  %*/
6344  }
6345  break;
6346 
6347  case 92:
6348 
6349 /* Line 1806 of yacc.c */
6350 #line 1642 "parse.y"
6351  {
6352  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6353  }
6354  break;
6355 
6356  case 93:
6357 
6358 /* Line 1806 of yacc.c */
6359 #line 1646 "parse.y"
6360  {
6361  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6362  }
6363  break;
6364 
6365  case 94:
6366 
6367 /* Line 1806 of yacc.c */
6368 #line 1650 "parse.y"
6369  {
6370  /*%%%*/
6371  (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
6372  /*%
6373  $$ = dispatch2(aref_field, $1, escape_Qundef($3));
6374  %*/
6375  }
6376  break;
6377 
6378  case 95:
6379 
6380 /* Line 1806 of yacc.c */
6381 #line 1658 "parse.y"
6382  {
6383  /*%%%*/
6384  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6385  /*%
6386  $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
6387  %*/
6388  }
6389  break;
6390 
6391  case 96:
6392 
6393 /* Line 1806 of yacc.c */
6394 #line 1666 "parse.y"
6395  {
6396  /*%%%*/
6397  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6398  /*%
6399  $$ = dispatch2(const_path_field, $1, $3);
6400  %*/
6401  }
6402  break;
6403 
6404  case 97:
6405 
6406 /* Line 1806 of yacc.c */
6407 #line 1674 "parse.y"
6408  {
6409  /*%%%*/
6410  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6411  /*%
6412  $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
6413  %*/
6414  }
6415  break;
6416 
6417  case 98:
6418 
6419 /* Line 1806 of yacc.c */
6420 #line 1682 "parse.y"
6421  {
6422  /*%%%*/
6423  if (in_def || in_single)
6424  yyerror("dynamic constant assignment");
6425  (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
6426  /*%
6427  if (in_def || in_single)
6428  yyerror("dynamic constant assignment");
6429  $$ = dispatch2(const_path_field, $1, $3);
6430  %*/
6431  }
6432  break;
6433 
6434  case 99:
6435 
6436 /* Line 1806 of yacc.c */
6437 #line 1694 "parse.y"
6438  {
6439  /*%%%*/
6440  if (in_def || in_single)
6441  yyerror("dynamic constant assignment");
6442  (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
6443  /*%
6444  $$ = dispatch1(top_const_field, $2);
6445  %*/
6446  }
6447  break;
6448 
6449  case 100:
6450 
6451 /* Line 1806 of yacc.c */
6452 #line 1704 "parse.y"
6453  {
6454  /*%%%*/
6455  rb_backref_error((yyvsp[(1) - (1)].node));
6456  (yyval.node) = NEW_BEGIN(0);
6457  /*%
6458  $$ = dispatch1(var_field, $1);
6459  $$ = dispatch1(assign_error, $$);
6460  %*/
6461  }
6462  break;
6463 
6464  case 101:
6465 
6466 /* Line 1806 of yacc.c */
6467 #line 1716 "parse.y"
6468  {
6469  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6470  /*%%%*/
6471  if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
6472  /*%
6473  $$ = dispatch1(var_field, $$);
6474  %*/
6475  }
6476  break;
6477 
6478  case 102:
6479 
6480 /* Line 1806 of yacc.c */
6481 #line 1725 "parse.y"
6482  {
6483  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6484  /*%%%*/
6485  if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
6486  /*%
6487  $$ = dispatch1(var_field, $$);
6488  %*/
6489  }
6490  break;
6491 
6492  case 103:
6493 
6494 /* Line 1806 of yacc.c */
6495 #line 1734 "parse.y"
6496  {
6497  /*%%%*/
6498  (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
6499  /*%
6500  $$ = dispatch2(aref_field, $1, escape_Qundef($3));
6501  %*/
6502  }
6503  break;
6504 
6505  case 104:
6506 
6507 /* Line 1806 of yacc.c */
6508 #line 1742 "parse.y"
6509  {
6510  /*%%%*/
6511  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6512  /*%
6513  $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
6514  %*/
6515  }
6516  break;
6517 
6518  case 105:
6519 
6520 /* Line 1806 of yacc.c */
6521 #line 1750 "parse.y"
6522  {
6523  /*%%%*/
6524  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6525  /*%
6526  $$ = dispatch3(field, $1, ripper_intern("::"), $3);
6527  %*/
6528  }
6529  break;
6530 
6531  case 106:
6532 
6533 /* Line 1806 of yacc.c */
6534 #line 1758 "parse.y"
6535  {
6536  /*%%%*/
6537  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6538  /*%
6539  $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
6540  %*/
6541  }
6542  break;
6543 
6544  case 107:
6545 
6546 /* Line 1806 of yacc.c */
6547 #line 1766 "parse.y"
6548  {
6549  /*%%%*/
6550  if (in_def || in_single)
6551  yyerror("dynamic constant assignment");
6552  (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
6553  /*%
6554  $$ = dispatch2(const_path_field, $1, $3);
6555  if (in_def || in_single) {
6556  $$ = dispatch1(assign_error, $$);
6557  }
6558  %*/
6559  }
6560  break;
6561 
6562  case 108:
6563 
6564 /* Line 1806 of yacc.c */
6565 #line 1779 "parse.y"
6566  {
6567  /*%%%*/
6568  if (in_def || in_single)
6569  yyerror("dynamic constant assignment");
6570  (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
6571  /*%
6572  $$ = dispatch1(top_const_field, $2);
6573  if (in_def || in_single) {
6574  $$ = dispatch1(assign_error, $$);
6575  }
6576  %*/
6577  }
6578  break;
6579 
6580  case 109:
6581 
6582 /* Line 1806 of yacc.c */
6583 #line 1792 "parse.y"
6584  {
6585  /*%%%*/
6586  rb_backref_error((yyvsp[(1) - (1)].node));
6587  (yyval.node) = NEW_BEGIN(0);
6588  /*%
6589  $$ = dispatch1(assign_error, $1);
6590  %*/
6591  }
6592  break;
6593 
6594  case 110:
6595 
6596 /* Line 1806 of yacc.c */
6597 #line 1803 "parse.y"
6598  {
6599  /*%%%*/
6600  yyerror("class/module name must be CONSTANT");
6601  /*%
6602  $$ = dispatch1(class_name_error, $1);
6603  %*/
6604  }
6605  break;
6606 
6607  case 112:
6608 
6609 /* Line 1806 of yacc.c */
6610 #line 1814 "parse.y"
6611  {
6612  /*%%%*/
6613  (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
6614  /*%
6615  $$ = dispatch1(top_const_ref, $2);
6616  %*/
6617  }
6618  break;
6619 
6620  case 113:
6621 
6622 /* Line 1806 of yacc.c */
6623 #line 1822 "parse.y"
6624  {
6625  /*%%%*/
6626  (yyval.node) = NEW_COLON2(0, (yyval.node));
6627  /*%
6628  $$ = dispatch1(const_ref, $1);
6629  %*/
6630  }
6631  break;
6632 
6633  case 114:
6634 
6635 /* Line 1806 of yacc.c */
6636 #line 1830 "parse.y"
6637  {
6638  /*%%%*/
6639  (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6640  /*%
6641  $$ = dispatch2(const_path_ref, $1, $3);
6642  %*/
6643  }
6644  break;
6645 
6646  case 118:
6647 
6648 /* Line 1806 of yacc.c */
6649 #line 1843 "parse.y"
6650  {
6651  lex_state = EXPR_ENDFN;
6652  (yyval.id) = (yyvsp[(1) - (1)].id);
6653  }
6654  break;
6655 
6656  case 119:
6657 
6658 /* Line 1806 of yacc.c */
6659 #line 1848 "parse.y"
6660  {
6661  lex_state = EXPR_ENDFN;
6662  /*%%%*/
6663  (yyval.id) = (yyvsp[(1) - (1)].id);
6664  /*%
6665  $$ = $1;
6666  %*/
6667  }
6668  break;
6669 
6670  case 122:
6671 
6672 /* Line 1806 of yacc.c */
6673 #line 1863 "parse.y"
6674  {
6675  /*%%%*/
6676  (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
6677  /*%
6678  $$ = dispatch1(symbol_literal, $1);
6679  %*/
6680  }
6681  break;
6682 
6683  case 124:
6684 
6685 /* Line 1806 of yacc.c */
6686 #line 1874 "parse.y"
6687  {
6688  /*%%%*/
6689  (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
6690  /*%
6691  $$ = rb_ary_new3(1, $1);
6692  %*/
6693  }
6694  break;
6695 
6696  case 125:
6697 
6698 /* Line 1806 of yacc.c */
6699 #line 1881 "parse.y"
6700  {lex_state = EXPR_FNAME;}
6701  break;
6702 
6703  case 126:
6704 
6705 /* Line 1806 of yacc.c */
6706 #line 1882 "parse.y"
6707  {
6708  /*%%%*/
6709  (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
6710  /*%
6711  rb_ary_push($1, $4);
6712  %*/
6713  }
6714  break;
6715 
6716  case 127:
6717 
6718 /* Line 1806 of yacc.c */
6719 #line 1891 "parse.y"
6720  { ifndef_ripper((yyval.id) = '|'); }
6721  break;
6722 
6723  case 128:
6724 
6725 /* Line 1806 of yacc.c */
6726 #line 1892 "parse.y"
6727  { ifndef_ripper((yyval.id) = '^'); }
6728  break;
6729 
6730  case 129:
6731 
6732 /* Line 1806 of yacc.c */
6733 #line 1893 "parse.y"
6734  { ifndef_ripper((yyval.id) = '&'); }
6735  break;
6736 
6737  case 130:
6738 
6739 /* Line 1806 of yacc.c */
6740 #line 1894 "parse.y"
6741  { ifndef_ripper((yyval.id) = tCMP); }
6742  break;
6743 
6744  case 131:
6745 
6746 /* Line 1806 of yacc.c */
6747 #line 1895 "parse.y"
6748  { ifndef_ripper((yyval.id) = tEQ); }
6749  break;
6750 
6751  case 132:
6752 
6753 /* Line 1806 of yacc.c */
6754 #line 1896 "parse.y"
6755  { ifndef_ripper((yyval.id) = tEQQ); }
6756  break;
6757 
6758  case 133:
6759 
6760 /* Line 1806 of yacc.c */
6761 #line 1897 "parse.y"
6762  { ifndef_ripper((yyval.id) = tMATCH); }
6763  break;
6764 
6765  case 134:
6766 
6767 /* Line 1806 of yacc.c */
6768 #line 1898 "parse.y"
6769  { ifndef_ripper((yyval.id) = tNMATCH); }
6770  break;
6771 
6772  case 135:
6773 
6774 /* Line 1806 of yacc.c */
6775 #line 1899 "parse.y"
6776  { ifndef_ripper((yyval.id) = '>'); }
6777  break;
6778 
6779  case 136:
6780 
6781 /* Line 1806 of yacc.c */
6782 #line 1900 "parse.y"
6783  { ifndef_ripper((yyval.id) = tGEQ); }
6784  break;
6785 
6786  case 137:
6787 
6788 /* Line 1806 of yacc.c */
6789 #line 1901 "parse.y"
6790  { ifndef_ripper((yyval.id) = '<'); }
6791  break;
6792 
6793  case 138:
6794 
6795 /* Line 1806 of yacc.c */
6796 #line 1902 "parse.y"
6797  { ifndef_ripper((yyval.id) = tLEQ); }
6798  break;
6799 
6800  case 139:
6801 
6802 /* Line 1806 of yacc.c */
6803 #line 1903 "parse.y"
6804  { ifndef_ripper((yyval.id) = tNEQ); }
6805  break;
6806 
6807  case 140:
6808 
6809 /* Line 1806 of yacc.c */
6810 #line 1904 "parse.y"
6811  { ifndef_ripper((yyval.id) = tLSHFT); }
6812  break;
6813 
6814  case 141:
6815 
6816 /* Line 1806 of yacc.c */
6817 #line 1905 "parse.y"
6818  { ifndef_ripper((yyval.id) = tRSHFT); }
6819  break;
6820 
6821  case 142:
6822 
6823 /* Line 1806 of yacc.c */
6824 #line 1906 "parse.y"
6825  { ifndef_ripper((yyval.id) = '+'); }
6826  break;
6827 
6828  case 143:
6829 
6830 /* Line 1806 of yacc.c */
6831 #line 1907 "parse.y"
6832  { ifndef_ripper((yyval.id) = '-'); }
6833  break;
6834 
6835  case 144:
6836 
6837 /* Line 1806 of yacc.c */
6838 #line 1908 "parse.y"
6839  { ifndef_ripper((yyval.id) = '*'); }
6840  break;
6841 
6842  case 145:
6843 
6844 /* Line 1806 of yacc.c */
6845 #line 1909 "parse.y"
6846  { ifndef_ripper((yyval.id) = '*'); }
6847  break;
6848 
6849  case 146:
6850 
6851 /* Line 1806 of yacc.c */
6852 #line 1910 "parse.y"
6853  { ifndef_ripper((yyval.id) = '/'); }
6854  break;
6855 
6856  case 147:
6857 
6858 /* Line 1806 of yacc.c */
6859 #line 1911 "parse.y"
6860  { ifndef_ripper((yyval.id) = '%'); }
6861  break;
6862 
6863  case 148:
6864 
6865 /* Line 1806 of yacc.c */
6866 #line 1912 "parse.y"
6867  { ifndef_ripper((yyval.id) = tPOW); }
6868  break;
6869 
6870  case 149:
6871 
6872 /* Line 1806 of yacc.c */
6873 #line 1913 "parse.y"
6874  { ifndef_ripper((yyval.id) = tDSTAR); }
6875  break;
6876 
6877  case 150:
6878 
6879 /* Line 1806 of yacc.c */
6880 #line 1914 "parse.y"
6881  { ifndef_ripper((yyval.id) = '!'); }
6882  break;
6883 
6884  case 151:
6885 
6886 /* Line 1806 of yacc.c */
6887 #line 1915 "parse.y"
6888  { ifndef_ripper((yyval.id) = '~'); }
6889  break;
6890 
6891  case 152:
6892 
6893 /* Line 1806 of yacc.c */
6894 #line 1916 "parse.y"
6895  { ifndef_ripper((yyval.id) = tUPLUS); }
6896  break;
6897 
6898  case 153:
6899 
6900 /* Line 1806 of yacc.c */
6901 #line 1917 "parse.y"
6902  { ifndef_ripper((yyval.id) = tUMINUS); }
6903  break;
6904 
6905  case 154:
6906 
6907 /* Line 1806 of yacc.c */
6908 #line 1918 "parse.y"
6909  { ifndef_ripper((yyval.id) = tAREF); }
6910  break;
6911 
6912  case 155:
6913 
6914 /* Line 1806 of yacc.c */
6915 #line 1919 "parse.y"
6916  { ifndef_ripper((yyval.id) = tASET); }
6917  break;
6918 
6919  case 156:
6920 
6921 /* Line 1806 of yacc.c */
6922 #line 1920 "parse.y"
6923  { ifndef_ripper((yyval.id) = '`'); }
6924  break;
6925 
6926  case 198:
6927 
6928 /* Line 1806 of yacc.c */
6929 #line 1938 "parse.y"
6930  {
6931  /*%%%*/
6932  value_expr((yyvsp[(3) - (3)].node));
6933  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6934  /*%
6935  $$ = dispatch2(assign, $1, $3);
6936  %*/
6937  }
6938  break;
6939 
6940  case 199:
6941 
6942 /* Line 1806 of yacc.c */
6943 #line 1947 "parse.y"
6944  {
6945  /*%%%*/
6946  value_expr((yyvsp[(3) - (5)].node));
6947  (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
6948  (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
6949  /*%
6950  $$ = dispatch2(assign, $1, dispatch2(rescue_mod, $3, $5));
6951  %*/
6952  }
6953  break;
6954 
6955  case 200:
6956 
6957 /* Line 1806 of yacc.c */
6958 #line 1957 "parse.y"
6959  {
6960  value_expr((yyvsp[(3) - (3)].node));
6961  (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
6962  }
6963  break;
6964 
6965  case 201:
6966 
6967 /* Line 1806 of yacc.c */
6968 #line 1962 "parse.y"
6969  {
6970  /*%%%*/
6971  value_expr((yyvsp[(3) - (5)].node));
6972  (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
6973  /*%
6974  $3 = dispatch2(rescue_mod, $3, $5);
6975  %*/
6976  (yyval.node) = new_op_assign((yyvsp[(1) - (5)].node), (yyvsp[(2) - (5)].id), (yyvsp[(3) - (5)].node));
6977  }
6978  break;
6979 
6980  case 202:
6981 
6982 /* Line 1806 of yacc.c */
6983 #line 1972 "parse.y"
6984  {
6985  /*%%%*/
6986  NODE *args;
6987 
6988  value_expr((yyvsp[(6) - (6)].node));
6989  if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
6990  if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
6991  args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
6992  }
6993  else {
6994  args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
6995  }
6996  if ((yyvsp[(5) - (6)].id) == tOROP) {
6997  (yyvsp[(5) - (6)].id) = 0;
6998  }
6999  else if ((yyvsp[(5) - (6)].id) == tANDOP) {
7000  (yyvsp[(5) - (6)].id) = 1;
7001  }
7002  (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
7003  fixpos((yyval.node), (yyvsp[(1) - (6)].node));
7004  /*%
7005  $1 = dispatch2(aref_field, $1, escape_Qundef($3));
7006  $$ = dispatch3(opassign, $1, $5, $6);
7007  %*/
7008  }
7009  break;
7010 
7011  case 203:
7012 
7013 /* Line 1806 of yacc.c */
7014 #line 1998 "parse.y"
7015  {
7016  value_expr((yyvsp[(5) - (5)].node));
7017  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
7018  }
7019  break;
7020 
7021  case 204:
7022 
7023 /* Line 1806 of yacc.c */
7024 #line 2003 "parse.y"
7025  {
7026  value_expr((yyvsp[(5) - (5)].node));
7027  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
7028  }
7029  break;
7030 
7031  case 205:
7032 
7033 /* Line 1806 of yacc.c */
7034 #line 2008 "parse.y"
7035  {
7036  value_expr((yyvsp[(5) - (5)].node));
7037  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_intern("::"), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
7038  }
7039  break;
7040 
7041  case 206:
7042 
7043 /* Line 1806 of yacc.c */
7044 #line 2013 "parse.y"
7045  {
7046  /*%%%*/
7047  (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
7048  (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
7049  /*%
7050  $$ = dispatch2(const_path_field, $1, $3);
7051  $$ = dispatch3(opassign, $$, $4, $5);
7052  %*/
7053  }
7054  break;
7055 
7056  case 207:
7057 
7058 /* Line 1806 of yacc.c */
7059 #line 2023 "parse.y"
7060  {
7061  /*%%%*/
7062  (yyval.node) = NEW_COLON3((yyvsp[(2) - (4)].id));
7063  (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
7064  /*%
7065  $$ = dispatch1(top_const_field, $2);
7066  $$ = dispatch3(opassign, $$, $3, $4);
7067  %*/
7068  }
7069  break;
7070 
7071  case 208:
7072 
7073 /* Line 1806 of yacc.c */
7074 #line 2033 "parse.y"
7075  {
7076  /*%%%*/
7077  rb_backref_error((yyvsp[(1) - (3)].node));
7078  (yyval.node) = NEW_BEGIN(0);
7079  /*%
7080  $$ = dispatch1(var_field, $1);
7081  $$ = dispatch3(opassign, $$, $2, $3);
7082  $$ = dispatch1(assign_error, $$);
7083  %*/
7084  }
7085  break;
7086 
7087  case 209:
7088 
7089 /* Line 1806 of yacc.c */
7090 #line 2044 "parse.y"
7091  {
7092  /*%%%*/
7093  value_expr((yyvsp[(1) - (3)].node));
7094  value_expr((yyvsp[(3) - (3)].node));
7095  (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7096  if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
7097  nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
7099  }
7100  /*%
7101  $$ = dispatch2(dot2, $1, $3);
7102  %*/
7103  }
7104  break;
7105 
7106  case 210:
7107 
7108 /* Line 1806 of yacc.c */
7109 #line 2058 "parse.y"
7110  {
7111  /*%%%*/
7112  value_expr((yyvsp[(1) - (3)].node));
7113  value_expr((yyvsp[(3) - (3)].node));
7114  (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7115  if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
7116  nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
7118  }
7119  /*%
7120  $$ = dispatch2(dot3, $1, $3);
7121  %*/
7122  }
7123  break;
7124 
7125  case 211:
7126 
7127 /* Line 1806 of yacc.c */
7128 #line 2072 "parse.y"
7129  {
7130  /*%%%*/
7131  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
7132  /*%
7133  $$ = dispatch3(binary, $1, ID2SYM('+'), $3);
7134  %*/
7135  }
7136  break;
7137 
7138  case 212:
7139 
7140 /* Line 1806 of yacc.c */
7141 #line 2080 "parse.y"
7142  {
7143  /*%%%*/
7144  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
7145  /*%
7146  $$ = dispatch3(binary, $1, ID2SYM('-'), $3);
7147  %*/
7148  }
7149  break;
7150 
7151  case 213:
7152 
7153 /* Line 1806 of yacc.c */
7154 #line 2088 "parse.y"
7155  {
7156  /*%%%*/
7157  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
7158  /*%
7159  $$ = dispatch3(binary, $1, ID2SYM('*'), $3);
7160  %*/
7161  }
7162  break;
7163 
7164  case 214:
7165 
7166 /* Line 1806 of yacc.c */
7167 #line 2096 "parse.y"
7168  {
7169  /*%%%*/
7170  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
7171  /*%
7172  $$ = dispatch3(binary, $1, ID2SYM('/'), $3);
7173  %*/
7174  }
7175  break;
7176 
7177  case 215:
7178 
7179 /* Line 1806 of yacc.c */
7180 #line 2104 "parse.y"
7181  {
7182  /*%%%*/
7183  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
7184  /*%
7185  $$ = dispatch3(binary, $1, ID2SYM('%'), $3);
7186  %*/
7187  }
7188  break;
7189 
7190  case 216:
7191 
7192 /* Line 1806 of yacc.c */
7193 #line 2112 "parse.y"
7194  {
7195  /*%%%*/
7196  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
7197  /*%
7198  $$ = dispatch3(binary, $1, ripper_intern("**"), $3);
7199  %*/
7200  }
7201  break;
7202 
7203  case 217:
7204 
7205 /* Line 1806 of yacc.c */
7206 #line 2120 "parse.y"
7207  {
7208  /*%%%*/
7209  (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
7210  /*%
7211  $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
7212  $$ = dispatch2(unary, ripper_intern("-@"), $$);
7213  %*/
7214  }
7215  break;
7216 
7217  case 218:
7218 
7219 /* Line 1806 of yacc.c */
7220 #line 2129 "parse.y"
7221  {
7222  /*%%%*/
7223  (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
7224  /*%
7225  $$ = dispatch2(unary, ripper_intern("+@"), $2);
7226  %*/
7227  }
7228  break;
7229 
7230  case 219:
7231 
7232 /* Line 1806 of yacc.c */
7233 #line 2137 "parse.y"
7234  {
7235  /*%%%*/
7236  (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
7237  /*%
7238  $$ = dispatch2(unary, ripper_intern("-@"), $2);
7239  %*/
7240  }
7241  break;
7242 
7243  case 220:
7244 
7245 /* Line 1806 of yacc.c */
7246 #line 2145 "parse.y"
7247  {
7248  /*%%%*/
7249  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
7250  /*%
7251  $$ = dispatch3(binary, $1, ID2SYM('|'), $3);
7252  %*/
7253  }
7254  break;
7255 
7256  case 221:
7257 
7258 /* Line 1806 of yacc.c */
7259 #line 2153 "parse.y"
7260  {
7261  /*%%%*/
7262  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
7263  /*%
7264  $$ = dispatch3(binary, $1, ID2SYM('^'), $3);
7265  %*/
7266  }
7267  break;
7268 
7269  case 222:
7270 
7271 /* Line 1806 of yacc.c */
7272 #line 2161 "parse.y"
7273  {
7274  /*%%%*/
7275  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
7276  /*%
7277  $$ = dispatch3(binary, $1, ID2SYM('&'), $3);
7278  %*/
7279  }
7280  break;
7281 
7282  case 223:
7283 
7284 /* Line 1806 of yacc.c */
7285 #line 2169 "parse.y"
7286  {
7287  /*%%%*/
7288  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
7289  /*%
7290  $$ = dispatch3(binary, $1, ripper_intern("<=>"), $3);
7291  %*/
7292  }
7293  break;
7294 
7295  case 224:
7296 
7297 /* Line 1806 of yacc.c */
7298 #line 2177 "parse.y"
7299  {
7300  /*%%%*/
7301  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
7302  /*%
7303  $$ = dispatch3(binary, $1, ID2SYM('>'), $3);
7304  %*/
7305  }
7306  break;
7307 
7308  case 225:
7309 
7310 /* Line 1806 of yacc.c */
7311 #line 2185 "parse.y"
7312  {
7313  /*%%%*/
7314  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
7315  /*%
7316  $$ = dispatch3(binary, $1, ripper_intern(">="), $3);
7317  %*/
7318  }
7319  break;
7320 
7321  case 226:
7322 
7323 /* Line 1806 of yacc.c */
7324 #line 2193 "parse.y"
7325  {
7326  /*%%%*/
7327  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
7328  /*%
7329  $$ = dispatch3(binary, $1, ID2SYM('<'), $3);
7330  %*/
7331  }
7332  break;
7333 
7334  case 227:
7335 
7336 /* Line 1806 of yacc.c */
7337 #line 2201 "parse.y"
7338  {
7339  /*%%%*/
7340  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
7341  /*%
7342  $$ = dispatch3(binary, $1, ripper_intern("<="), $3);
7343  %*/
7344  }
7345  break;
7346 
7347  case 228:
7348 
7349 /* Line 1806 of yacc.c */
7350 #line 2209 "parse.y"
7351  {
7352  /*%%%*/
7353  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
7354  /*%
7355  $$ = dispatch3(binary, $1, ripper_intern("=="), $3);
7356  %*/
7357  }
7358  break;
7359 
7360  case 229:
7361 
7362 /* Line 1806 of yacc.c */
7363 #line 2217 "parse.y"
7364  {
7365  /*%%%*/
7366  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
7367  /*%
7368  $$ = dispatch3(binary, $1, ripper_intern("==="), $3);
7369  %*/
7370  }
7371  break;
7372 
7373  case 230:
7374 
7375 /* Line 1806 of yacc.c */
7376 #line 2225 "parse.y"
7377  {
7378  /*%%%*/
7379  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
7380  /*%
7381  $$ = dispatch3(binary, $1, ripper_intern("!="), $3);
7382  %*/
7383  }
7384  break;
7385 
7386  case 231:
7387 
7388 /* Line 1806 of yacc.c */
7389 #line 2233 "parse.y"
7390  {
7391  /*%%%*/
7392  (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7393  if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && RB_TYPE_P((yyvsp[(1) - (3)].node)->nd_lit, T_REGEXP)) {
7394  (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
7395  }
7396  /*%
7397  $$ = dispatch3(binary, $1, ripper_intern("=~"), $3);
7398  %*/
7399  }
7400  break;
7401 
7402  case 232:
7403 
7404 /* Line 1806 of yacc.c */
7405 #line 2244 "parse.y"
7406  {
7407  /*%%%*/
7408  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
7409  /*%
7410  $$ = dispatch3(binary, $1, ripper_intern("!~"), $3);
7411  %*/
7412  }
7413  break;
7414 
7415  case 233:
7416 
7417 /* Line 1806 of yacc.c */
7418 #line 2252 "parse.y"
7419  {
7420  /*%%%*/
7421  (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
7422  /*%
7423  $$ = dispatch2(unary, ID2SYM('!'), $2);
7424  %*/
7425  }
7426  break;
7427 
7428  case 234:
7429 
7430 /* Line 1806 of yacc.c */
7431 #line 2260 "parse.y"
7432  {
7433  /*%%%*/
7434  (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
7435  /*%
7436  $$ = dispatch2(unary, ID2SYM('~'), $2);
7437  %*/
7438  }
7439  break;
7440 
7441  case 235:
7442 
7443 /* Line 1806 of yacc.c */
7444 #line 2268 "parse.y"
7445  {
7446  /*%%%*/
7447  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
7448  /*%
7449  $$ = dispatch3(binary, $1, ripper_intern("<<"), $3);
7450  %*/
7451  }
7452  break;
7453 
7454  case 236:
7455 
7456 /* Line 1806 of yacc.c */
7457 #line 2276 "parse.y"
7458  {
7459  /*%%%*/
7460  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
7461  /*%
7462  $$ = dispatch3(binary, $1, ripper_intern(">>"), $3);
7463  %*/
7464  }
7465  break;
7466 
7467  case 237:
7468 
7469 /* Line 1806 of yacc.c */
7470 #line 2284 "parse.y"
7471  {
7472  /*%%%*/
7473  (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7474  /*%
7475  $$ = dispatch3(binary, $1, ripper_intern("&&"), $3);
7476  %*/
7477  }
7478  break;
7479 
7480  case 238:
7481 
7482 /* Line 1806 of yacc.c */
7483 #line 2292 "parse.y"
7484  {
7485  /*%%%*/
7486  (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7487  /*%
7488  $$ = dispatch3(binary, $1, ripper_intern("||"), $3);
7489  %*/
7490  }
7491  break;
7492 
7493  case 239:
7494 
7495 /* Line 1806 of yacc.c */
7496 #line 2299 "parse.y"
7497  {in_defined = 1;}
7498  break;
7499 
7500  case 240:
7501 
7502 /* Line 1806 of yacc.c */
7503 #line 2300 "parse.y"
7504  {
7505  /*%%%*/
7506  in_defined = 0;
7507  (yyval.node) = new_defined((yyvsp[(4) - (4)].node));
7508  /*%
7509  in_defined = 0;
7510  $$ = dispatch1(defined, $4);
7511  %*/
7512  }
7513  break;
7514 
7515  case 241:
7516 
7517 /* Line 1806 of yacc.c */
7518 #line 2310 "parse.y"
7519  {
7520  /*%%%*/
7521  value_expr((yyvsp[(1) - (6)].node));
7522  (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
7523  fixpos((yyval.node), (yyvsp[(1) - (6)].node));
7524  /*%
7525  $$ = dispatch3(ifop, $1, $3, $6);
7526  %*/
7527  }
7528  break;
7529 
7530  case 242:
7531 
7532 /* Line 1806 of yacc.c */
7533 #line 2320 "parse.y"
7534  {
7535  (yyval.node) = (yyvsp[(1) - (1)].node);
7536  }
7537  break;
7538 
7539  case 243:
7540 
7541 /* Line 1806 of yacc.c */
7542 #line 2326 "parse.y"
7543  {
7544  /*%%%*/
7545  value_expr((yyvsp[(1) - (1)].node));
7546  (yyval.node) = (yyvsp[(1) - (1)].node);
7547  if (!(yyval.node)) (yyval.node) = NEW_NIL();
7548  /*%
7549  $$ = $1;
7550  %*/
7551  }
7552  break;
7553 
7554  case 245:
7555 
7556 /* Line 1806 of yacc.c */
7557 #line 2339 "parse.y"
7558  {
7559  (yyval.node) = (yyvsp[(1) - (2)].node);
7560  }
7561  break;
7562 
7563  case 246:
7564 
7565 /* Line 1806 of yacc.c */
7566 #line 2343 "parse.y"
7567  {
7568  /*%%%*/
7569  (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
7570  /*%
7571  $$ = arg_add_assocs($1, $3);
7572  %*/
7573  }
7574  break;
7575 
7576  case 247:
7577 
7578 /* Line 1806 of yacc.c */
7579 #line 2351 "parse.y"
7580  {
7581  /*%%%*/
7582  (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
7583  /*%
7584  $$ = arg_add_assocs(arg_new(), $1);
7585  %*/
7586  }
7587  break;
7588 
7589  case 248:
7590 
7591 /* Line 1806 of yacc.c */
7592 #line 2361 "parse.y"
7593  {
7594  /*%%%*/
7595  (yyval.node) = (yyvsp[(2) - (3)].node);
7596  /*%
7597  $$ = dispatch1(arg_paren, escape_Qundef($2));
7598  %*/
7599  }
7600  break;
7601 
7602  case 253:
7603 
7604 /* Line 1806 of yacc.c */
7605 #line 2377 "parse.y"
7606  {
7607  (yyval.node) = (yyvsp[(1) - (2)].node);
7608  }
7609  break;
7610 
7611  case 254:
7612 
7613 /* Line 1806 of yacc.c */
7614 #line 2381 "parse.y"
7615  {
7616  /*%%%*/
7617  (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
7618  /*%
7619  $$ = arg_add_assocs($1, $3);
7620  %*/
7621  }
7622  break;
7623 
7624  case 255:
7625 
7626 /* Line 1806 of yacc.c */
7627 #line 2389 "parse.y"
7628  {
7629  /*%%%*/
7630  (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
7631  /*%
7632  $$ = arg_add_assocs(arg_new(), $1);
7633  %*/
7634  }
7635  break;
7636 
7637  case 256:
7638 
7639 /* Line 1806 of yacc.c */
7640 #line 2399 "parse.y"
7641  {
7642  /*%%%*/
7643  value_expr((yyvsp[(1) - (1)].node));
7644  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
7645  /*%
7646  $$ = arg_add(arg_new(), $1);
7647  %*/
7648  }
7649  break;
7650 
7651  case 257:
7652 
7653 /* Line 1806 of yacc.c */
7654 #line 2408 "parse.y"
7655  {
7656  /*%%%*/
7657  (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
7658  /*%
7659  $$ = arg_add_optblock($1, $2);
7660  %*/
7661  }
7662  break;
7663 
7664  case 258:
7665 
7666 /* Line 1806 of yacc.c */
7667 #line 2416 "parse.y"
7668  {
7669  /*%%%*/
7670  (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
7671  (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
7672  /*%
7673  $$ = arg_add_assocs(arg_new(), $1);
7674  $$ = arg_add_optblock($$, $2);
7675  %*/
7676  }
7677  break;
7678 
7679  case 259:
7680 
7681 /* Line 1806 of yacc.c */
7682 #line 2426 "parse.y"
7683  {
7684  /*%%%*/
7685  (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
7686  (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
7687  /*%
7688  $$ = arg_add_optblock(arg_add_assocs($1, $3), $4);
7689  %*/
7690  }
7691  break;
7692 
7693  case 261:
7694 
7695 /* Line 1806 of yacc.c */
7696 #line 2443 "parse.y"
7697  {
7698  (yyval.val) = cmdarg_stack;
7699  CMDARG_PUSH(1);
7700  }
7701  break;
7702 
7703  case 262:
7704 
7705 /* Line 1806 of yacc.c */
7706 #line 2448 "parse.y"
7707  {
7708  /* CMDARG_POP() */
7709  cmdarg_stack = (yyvsp[(1) - (2)].val);
7710  (yyval.node) = (yyvsp[(2) - (2)].node);
7711  }
7712  break;
7713 
7714  case 263:
7715 
7716 /* Line 1806 of yacc.c */
7717 #line 2456 "parse.y"
7718  {
7719  /*%%%*/
7720  (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
7721  /*%
7722  $$ = $2;
7723  %*/
7724  }
7725  break;
7726 
7727  case 264:
7728 
7729 /* Line 1806 of yacc.c */
7730 #line 2466 "parse.y"
7731  {
7732  (yyval.node) = (yyvsp[(2) - (2)].node);
7733  }
7734  break;
7735 
7736  case 265:
7737 
7738 /* Line 1806 of yacc.c */
7739 #line 2470 "parse.y"
7740  {
7741  (yyval.node) = 0;
7742  }
7743  break;
7744 
7745  case 266:
7746 
7747 /* Line 1806 of yacc.c */
7748 #line 2476 "parse.y"
7749  {
7750  /*%%%*/
7751  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
7752  /*%
7753  $$ = arg_add(arg_new(), $1);
7754  %*/
7755  }
7756  break;
7757 
7758  case 267:
7759 
7760 /* Line 1806 of yacc.c */
7761 #line 2484 "parse.y"
7762  {
7763  /*%%%*/
7764  (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
7765  /*%
7766  $$ = arg_add_star(arg_new(), $2);
7767  %*/
7768  }
7769  break;
7770 
7771  case 268:
7772 
7773 /* Line 1806 of yacc.c */
7774 #line 2492 "parse.y"
7775  {
7776  /*%%%*/
7777  NODE *n1;
7778  if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
7779  (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
7780  }
7781  else {
7782  (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7783  }
7784  /*%
7785  $$ = arg_add($1, $3);
7786  %*/
7787  }
7788  break;
7789 
7790  case 269:
7791 
7792 /* Line 1806 of yacc.c */
7793 #line 2506 "parse.y"
7794  {
7795  /*%%%*/
7796  NODE *n1;
7797  if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
7798  (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
7799  }
7800  else {
7801  (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
7802  }
7803  /*%
7804  $$ = arg_add_star($1, $4);
7805  %*/
7806  }
7807  break;
7808 
7809  case 272:
7810 
7811 /* Line 1806 of yacc.c */
7812 #line 2526 "parse.y"
7813  {
7814  /*%%%*/
7815  NODE *n1;
7816  if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
7817  (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
7818  }
7819  else {
7820  (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7821  }
7822  /*%
7823  $$ = mrhs_add(args2mrhs($1), $3);
7824  %*/
7825  }
7826  break;
7827 
7828  case 273:
7829 
7830 /* Line 1806 of yacc.c */
7831 #line 2540 "parse.y"
7832  {
7833  /*%%%*/
7834  NODE *n1;
7835  if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
7836  (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
7837  (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
7838  }
7839  else {
7840  (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
7841  }
7842  /*%
7843  $$ = mrhs_add_star(args2mrhs($1), $4);
7844  %*/
7845  }
7846  break;
7847 
7848  case 274:
7849 
7850 /* Line 1806 of yacc.c */
7851 #line 2555 "parse.y"
7852  {
7853  /*%%%*/
7854  (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
7855  /*%
7856  $$ = mrhs_add_star(mrhs_new(), $2);
7857  %*/
7858  }
7859  break;
7860 
7861  case 285:
7862 
7863 /* Line 1806 of yacc.c */
7864 #line 2575 "parse.y"
7865  {
7866  /*%%%*/
7867  (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
7868  /*%
7869  $$ = method_arg(dispatch1(fcall, $1), arg_new());
7870  %*/
7871  }
7872  break;
7873 
7874  case 286:
7875 
7876 /* Line 1806 of yacc.c */
7877 #line 2583 "parse.y"
7878  {
7879  (yyvsp[(1) - (1)].val) = cmdarg_stack;
7880  cmdarg_stack = 0;
7881  /*%%%*/
7882  (yyval.num) = ruby_sourceline;
7883  /*%
7884  %*/
7885  }
7886  break;
7887 
7888  case 287:
7889 
7890 /* Line 1806 of yacc.c */
7891 #line 2593 "parse.y"
7892  {
7893  cmdarg_stack = (yyvsp[(1) - (4)].val);
7894  /*%%%*/
7895  if ((yyvsp[(3) - (4)].node) == NULL) {
7896  (yyval.node) = NEW_NIL();
7897  }
7898  else {
7899  if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
7900  nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
7901  nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
7902  (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
7903  }
7904  nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
7905  /*%
7906  $$ = dispatch1(begin, $3);
7907  %*/
7908  }
7909  break;
7910 
7911  case 288:
7912 
7913 /* Line 1806 of yacc.c */
7914 #line 2610 "parse.y"
7915  {lex_state = EXPR_ENDARG;}
7916  break;
7917 
7918  case 289:
7919 
7920 /* Line 1806 of yacc.c */
7921 #line 2611 "parse.y"
7922  {
7923  /*%%%*/
7924  (yyval.node) = 0;
7925  /*%
7926  $$ = dispatch1(paren, 0);
7927  %*/
7928  }
7929  break;
7930 
7931  case 290:
7932 
7933 /* Line 1806 of yacc.c */
7934 #line 2619 "parse.y"
7935  {
7936  (yyvsp[(1) - (1)].val) = cmdarg_stack;
7937  cmdarg_stack = 0;
7938  }
7939  break;
7940 
7941  case 291:
7942 
7943 /* Line 1806 of yacc.c */
7944 #line 2623 "parse.y"
7945  {lex_state = EXPR_ENDARG;}
7946  break;
7947 
7948  case 292:
7949 
7950 /* Line 1806 of yacc.c */
7951 #line 2624 "parse.y"
7952  {
7953  cmdarg_stack = (yyvsp[(1) - (5)].val);
7954  /*%%%*/
7955  (yyval.node) = (yyvsp[(3) - (5)].node);
7956  /*%
7957  $$ = dispatch1(paren, $3);
7958  %*/
7959  }
7960  break;
7961 
7962  case 293:
7963 
7964 /* Line 1806 of yacc.c */
7965 #line 2633 "parse.y"
7966  {
7967  /*%%%*/
7968  (yyval.node) = (yyvsp[(2) - (3)].node);
7969  /*%
7970  $$ = dispatch1(paren, $2);
7971  %*/
7972  }
7973  break;
7974 
7975  case 294:
7976 
7977 /* Line 1806 of yacc.c */
7978 #line 2641 "parse.y"
7979  {
7980  /*%%%*/
7981  (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
7982  /*%
7983  $$ = dispatch2(const_path_ref, $1, $3);
7984  %*/
7985  }
7986  break;
7987 
7988  case 295:
7989 
7990 /* Line 1806 of yacc.c */
7991 #line 2649 "parse.y"
7992  {
7993  /*%%%*/
7994  (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
7995  /*%
7996  $$ = dispatch1(top_const_ref, $2);
7997  %*/
7998  }
7999  break;
8000 
8001  case 296:
8002 
8003 /* Line 1806 of yacc.c */
8004 #line 2657 "parse.y"
8005  {
8006  /*%%%*/
8007  if ((yyvsp[(2) - (3)].node) == 0) {
8008  (yyval.node) = NEW_ZARRAY(); /* zero length array*/
8009  }
8010  else {
8011  (yyval.node) = (yyvsp[(2) - (3)].node);
8012  }
8013  /*%
8014  $$ = dispatch1(array, escape_Qundef($2));
8015  %*/
8016  }
8017  break;
8018 
8019  case 297:
8020 
8021 /* Line 1806 of yacc.c */
8022 #line 2670 "parse.y"
8023  {
8024  /*%%%*/
8025  (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node));
8026  /*%
8027  $$ = dispatch1(hash, escape_Qundef($2));
8028  %*/
8029  }
8030  break;
8031 
8032  case 298:
8033 
8034 /* Line 1806 of yacc.c */
8035 #line 2678 "parse.y"
8036  {
8037  /*%%%*/
8038  (yyval.node) = NEW_RETURN(0);
8039  /*%
8040  $$ = dispatch0(return0);
8041  %*/
8042  }
8043  break;
8044 
8045  case 299:
8046 
8047 /* Line 1806 of yacc.c */
8048 #line 2686 "parse.y"
8049  {
8050  /*%%%*/
8051  (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
8052  /*%
8053  $$ = dispatch1(yield, dispatch1(paren, $3));
8054  %*/
8055  }
8056  break;
8057 
8058  case 300:
8059 
8060 /* Line 1806 of yacc.c */
8061 #line 2694 "parse.y"
8062  {
8063  /*%%%*/
8064  (yyval.node) = NEW_YIELD(0);
8065  /*%
8066  $$ = dispatch1(yield, dispatch1(paren, arg_new()));
8067  %*/
8068  }
8069  break;
8070 
8071  case 301:
8072 
8073 /* Line 1806 of yacc.c */
8074 #line 2702 "parse.y"
8075  {
8076  /*%%%*/
8077  (yyval.node) = NEW_YIELD(0);
8078  /*%
8079  $$ = dispatch0(yield0);
8080  %*/
8081  }
8082  break;
8083 
8084  case 302:
8085 
8086 /* Line 1806 of yacc.c */
8087 #line 2709 "parse.y"
8088  {in_defined = 1;}
8089  break;
8090 
8091  case 303:
8092 
8093 /* Line 1806 of yacc.c */
8094 #line 2710 "parse.y"
8095  {
8096  /*%%%*/
8097  in_defined = 0;
8098  (yyval.node) = new_defined((yyvsp[(5) - (6)].node));
8099  /*%
8100  in_defined = 0;
8101  $$ = dispatch1(defined, $5);
8102  %*/
8103  }
8104  break;
8105 
8106  case 304:
8107 
8108 /* Line 1806 of yacc.c */
8109 #line 2720 "parse.y"
8110  {
8111  /*%%%*/
8112  (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!');
8113  /*%
8114  $$ = dispatch2(unary, ripper_intern("not"), $3);
8115  %*/
8116  }
8117  break;
8118 
8119  case 305:
8120 
8121 /* Line 1806 of yacc.c */
8122 #line 2728 "parse.y"
8123  {
8124  /*%%%*/
8125  (yyval.node) = call_uni_op(cond(NEW_NIL()), '!');
8126  /*%
8127  $$ = dispatch2(unary, ripper_intern("not"), Qnil);
8128  %*/
8129  }
8130  break;
8131 
8132  case 306:
8133 
8134 /* Line 1806 of yacc.c */
8135 #line 2736 "parse.y"
8136  {
8137  /*%%%*/
8138  (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
8139  (yyval.node) = (yyvsp[(2) - (2)].node);
8140  /*%
8141  $$ = method_arg(dispatch1(fcall, $1), arg_new());
8142  $$ = method_add_block($$, $2);
8143  %*/
8144  }
8145  break;
8146 
8147  case 308:
8148 
8149 /* Line 1806 of yacc.c */
8150 #line 2747 "parse.y"
8151  {
8152  /*%%%*/
8153  block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
8154  (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
8155  (yyval.node) = (yyvsp[(2) - (2)].node);
8156  /*%
8157  $$ = method_add_block($1, $2);
8158  %*/
8159  }
8160  break;
8161 
8162  case 309:
8163 
8164 /* Line 1806 of yacc.c */
8165 #line 2757 "parse.y"
8166  {
8167  (yyval.node) = (yyvsp[(2) - (2)].node);
8168  }
8169  break;
8170 
8171  case 310:
8172 
8173 /* Line 1806 of yacc.c */
8174 #line 2764 "parse.y"
8175  {
8176  /*%%%*/
8177  (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
8178  fixpos((yyval.node), (yyvsp[(2) - (6)].node));
8179  /*%
8180  $$ = dispatch3(if, $2, $4, escape_Qundef($5));
8181  %*/
8182  }
8183  break;
8184 
8185  case 311:
8186 
8187 /* Line 1806 of yacc.c */
8188 #line 2776 "parse.y"
8189  {
8190  /*%%%*/
8191  (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
8192  fixpos((yyval.node), (yyvsp[(2) - (6)].node));
8193  /*%
8194  $$ = dispatch3(unless, $2, $4, escape_Qundef($5));
8195  %*/
8196  }
8197  break;
8198 
8199  case 312:
8200 
8201 /* Line 1806 of yacc.c */
8202 #line 2784 "parse.y"
8203  {COND_PUSH(1);}
8204  break;
8205 
8206  case 313:
8207 
8208 /* Line 1806 of yacc.c */
8209 #line 2784 "parse.y"
8210  {COND_POP();}
8211  break;
8212 
8213  case 314:
8214 
8215 /* Line 1806 of yacc.c */
8216 #line 2787 "parse.y"
8217  {
8218  /*%%%*/
8219  (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
8220  fixpos((yyval.node), (yyvsp[(3) - (7)].node));
8221  /*%
8222  $$ = dispatch2(while, $3, $6);
8223  %*/
8224  }
8225  break;
8226 
8227  case 315:
8228 
8229 /* Line 1806 of yacc.c */
8230 #line 2795 "parse.y"
8231  {COND_PUSH(1);}
8232  break;
8233 
8234  case 316:
8235 
8236 /* Line 1806 of yacc.c */
8237 #line 2795 "parse.y"
8238  {COND_POP();}
8239  break;
8240 
8241  case 317:
8242 
8243 /* Line 1806 of yacc.c */
8244 #line 2798 "parse.y"
8245  {
8246  /*%%%*/
8247  (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
8248  fixpos((yyval.node), (yyvsp[(3) - (7)].node));
8249  /*%
8250  $$ = dispatch2(until, $3, $6);
8251  %*/
8252  }
8253  break;
8254 
8255  case 318:
8256 
8257 /* Line 1806 of yacc.c */
8258 #line 2809 "parse.y"
8259  {
8260  /*%%%*/
8261  (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
8262  fixpos((yyval.node), (yyvsp[(2) - (5)].node));
8263  /*%
8264  $$ = dispatch2(case, $2, $4);
8265  %*/
8266  }
8267  break;
8268 
8269  case 319:
8270 
8271 /* Line 1806 of yacc.c */
8272 #line 2818 "parse.y"
8273  {
8274  /*%%%*/
8275  (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
8276  /*%
8277  $$ = dispatch2(case, Qnil, $3);
8278  %*/
8279  }
8280  break;
8281 
8282  case 320:
8283 
8284 /* Line 1806 of yacc.c */
8285 #line 2826 "parse.y"
8286  {COND_PUSH(1);}
8287  break;
8288 
8289  case 321:
8290 
8291 /* Line 1806 of yacc.c */
8292 #line 2828 "parse.y"
8293  {COND_POP();}
8294  break;
8295 
8296  case 322:
8297 
8298 /* Line 1806 of yacc.c */
8299 #line 2831 "parse.y"
8300  {
8301  /*%%%*/
8302  /*
8303  * for a, b, c in e
8304  * #=>
8305  * e.each{|*x| a, b, c = x
8306  *
8307  * for a in e
8308  * #=>
8309  * e.each{|x| a, = x}
8310  */
8311  ID id = internal_id();
8312  ID *tbl = ALLOC_N(ID, 2);
8313  NODE *m = NEW_ARGS_AUX(0, 0);
8314  NODE *args, *scope;
8315 
8316  if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) {
8317  /* if args.length == 1 && args[0].kind_of?(Array)
8318  * args = args[0]
8319  * end
8320  */
8321  NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
8322  NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
8323  m->nd_next = block_append(
8324  NEW_IF(
8326  NEW_CALL(NEW_CALL(NEW_DVAR(id), idLength, 0),
8327  idEq, one),
8328  NEW_CALL(NEW_CALL(NEW_DVAR(id), idAREF, zero),
8329  rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
8330  0),
8331  NEW_DASGN_CURR(id,
8332  NEW_CALL(NEW_DVAR(id), idAREF, zero)),
8333  0),
8334  node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id)));
8335 
8336  args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
8337  }
8338  else {
8339  if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN ||
8340  nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN ||
8341  nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) {
8342  (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
8343  m->nd_plen = 1;
8344  m->nd_next = (yyvsp[(2) - (9)].node);
8345  args = new_args(m, 0, 0, 0, new_args_tail(0, 0, 0));
8346  }
8347  else {
8348  m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
8349  args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
8350  }
8351  }
8352  scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
8353  tbl[0] = 1; tbl[1] = id;
8354  (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
8355  fixpos((yyval.node), (yyvsp[(2) - (9)].node));
8356  /*%
8357  $$ = dispatch3(for, $2, $5, $8);
8358  %*/
8359  }
8360  break;
8361 
8362  case 323:
8363 
8364 /* Line 1806 of yacc.c */
8365 #line 2892 "parse.y"
8366  {
8367  if (in_def || in_single)
8368  yyerror("class definition in method body");
8369  local_push(0);
8370  /*%%%*/
8371  (yyval.num) = ruby_sourceline;
8372  /*%
8373  %*/
8374  }
8375  break;
8376 
8377  case 324:
8378 
8379 /* Line 1806 of yacc.c */
8380 #line 2903 "parse.y"
8381  {
8382  /*%%%*/
8383  (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
8384  nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
8385  /*%
8386  $$ = dispatch3(class, $2, $3, $5);
8387  %*/
8388  local_pop();
8389  }
8390  break;
8391 
8392  case 325:
8393 
8394 /* Line 1806 of yacc.c */
8395 #line 2913 "parse.y"
8396  {
8397  (yyval.num) = in_def;
8398  in_def = 0;
8399  }
8400  break;
8401 
8402  case 326:
8403 
8404 /* Line 1806 of yacc.c */
8405 #line 2918 "parse.y"
8406  {
8407  (yyval.num) = in_single;
8408  in_single = 0;
8409  local_push(0);
8410  }
8411  break;
8412 
8413  case 327:
8414 
8415 /* Line 1806 of yacc.c */
8416 #line 2925 "parse.y"
8417  {
8418  /*%%%*/
8419  (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
8420  fixpos((yyval.node), (yyvsp[(3) - (8)].node));
8421  /*%
8422  $$ = dispatch2(sclass, $3, $7);
8423  %*/
8424  local_pop();
8425  in_def = (yyvsp[(4) - (8)].num);
8426  in_single = (yyvsp[(6) - (8)].num);
8427  }
8428  break;
8429 
8430  case 328:
8431 
8432 /* Line 1806 of yacc.c */
8433 #line 2937 "parse.y"
8434  {
8435  if (in_def || in_single)
8436  yyerror("module definition in method body");
8437  local_push(0);
8438  /*%%%*/
8439  (yyval.num) = ruby_sourceline;
8440  /*%
8441  %*/
8442  }
8443  break;
8444 
8445  case 329:
8446 
8447 /* Line 1806 of yacc.c */
8448 #line 2948 "parse.y"
8449  {
8450  /*%%%*/
8451  (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
8452  nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
8453  /*%
8454  $$ = dispatch2(module, $2, $4);
8455  %*/
8456  local_pop();
8457  }
8458  break;
8459 
8460  case 330:
8461 
8462 /* Line 1806 of yacc.c */
8463 #line 2958 "parse.y"
8464  {
8465  (yyval.id) = cur_mid;
8466  cur_mid = (yyvsp[(2) - (2)].id);
8467  in_def++;
8468  local_push(0);
8469  }
8470  break;
8471 
8472  case 331:
8473 
8474 /* Line 1806 of yacc.c */
8475 #line 2967 "parse.y"
8476  {
8477  /*%%%*/
8478  NODE *body = remove_begin((yyvsp[(5) - (6)].node));
8479  reduce_nodes(&body);
8480  (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
8481  nd_set_line((yyval.node), (yyvsp[(1) - (6)].num));
8482  /*%
8483  $$ = dispatch3(def, $2, $4, $5);
8484  %*/
8485  local_pop();
8486  in_def--;
8487  cur_mid = (yyvsp[(3) - (6)].id);
8488  }
8489  break;
8490 
8491  case 332:
8492 
8493 /* Line 1806 of yacc.c */
8494 #line 2980 "parse.y"
8495  {lex_state = EXPR_FNAME;}
8496  break;
8497 
8498  case 333:
8499 
8500 /* Line 1806 of yacc.c */
8501 #line 2981 "parse.y"
8502  {
8503  in_single++;
8504  lex_state = EXPR_ENDFN; /* force for args */
8505  local_push(0);
8506  }
8507  break;
8508 
8509  case 334:
8510 
8511 /* Line 1806 of yacc.c */
8512 #line 2989 "parse.y"
8513  {
8514  /*%%%*/
8515  NODE *body = remove_begin((yyvsp[(8) - (9)].node));
8516  reduce_nodes(&body);
8517  (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
8518  nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
8519  /*%
8520  $$ = dispatch5(defs, $2, $3, $5, $7, $8);
8521  %*/
8522  local_pop();
8523  in_single--;
8524  }
8525  break;
8526 
8527  case 335:
8528 
8529 /* Line 1806 of yacc.c */
8530 #line 3002 "parse.y"
8531  {
8532  /*%%%*/
8533  (yyval.node) = NEW_BREAK(0);
8534  /*%
8535  $$ = dispatch1(break, arg_new());
8536  %*/
8537  }
8538  break;
8539 
8540  case 336:
8541 
8542 /* Line 1806 of yacc.c */
8543 #line 3010 "parse.y"
8544  {
8545  /*%%%*/
8546  (yyval.node) = NEW_NEXT(0);
8547  /*%
8548  $$ = dispatch1(next, arg_new());
8549  %*/
8550  }
8551  break;
8552 
8553  case 337:
8554 
8555 /* Line 1806 of yacc.c */
8556 #line 3018 "parse.y"
8557  {
8558  /*%%%*/
8559  (yyval.node) = NEW_REDO();
8560  /*%
8561  $$ = dispatch0(redo);
8562  %*/
8563  }
8564  break;
8565 
8566  case 338:
8567 
8568 /* Line 1806 of yacc.c */
8569 #line 3026 "parse.y"
8570  {
8571  /*%%%*/
8572  (yyval.node) = NEW_RETRY();
8573  /*%
8574  $$ = dispatch0(retry);
8575  %*/
8576  }
8577  break;
8578 
8579  case 339:
8580 
8581 /* Line 1806 of yacc.c */
8582 #line 3036 "parse.y"
8583  {
8584  /*%%%*/
8585  value_expr((yyvsp[(1) - (1)].node));
8586  (yyval.node) = (yyvsp[(1) - (1)].node);
8587  if (!(yyval.node)) (yyval.node) = NEW_NIL();
8588  /*%
8589  $$ = $1;
8590  %*/
8591  }
8592  break;
8593 
8594  case 340:
8595 
8596 /* Line 1806 of yacc.c */
8597 #line 3048 "parse.y"
8598  {
8599  token_info_push("begin");
8600  }
8601  break;
8602 
8603  case 341:
8604 
8605 /* Line 1806 of yacc.c */
8606 #line 3054 "parse.y"
8607  {
8608  token_info_push("if");
8609  }
8610  break;
8611 
8612  case 342:
8613 
8614 /* Line 1806 of yacc.c */
8615 #line 3060 "parse.y"
8616  {
8617  token_info_push("unless");
8618  }
8619  break;
8620 
8621  case 343:
8622 
8623 /* Line 1806 of yacc.c */
8624 #line 3066 "parse.y"
8625  {
8626  token_info_push("while");
8627  }
8628  break;
8629 
8630  case 344:
8631 
8632 /* Line 1806 of yacc.c */
8633 #line 3072 "parse.y"
8634  {
8635  token_info_push("until");
8636  }
8637  break;
8638 
8639  case 345:
8640 
8641 /* Line 1806 of yacc.c */
8642 #line 3078 "parse.y"
8643  {
8644  token_info_push("case");
8645  }
8646  break;
8647 
8648  case 346:
8649 
8650 /* Line 1806 of yacc.c */
8651 #line 3084 "parse.y"
8652  {
8653  token_info_push("for");
8654  }
8655  break;
8656 
8657  case 347:
8658 
8659 /* Line 1806 of yacc.c */
8660 #line 3090 "parse.y"
8661  {
8662  token_info_push("class");
8663  }
8664  break;
8665 
8666  case 348:
8667 
8668 /* Line 1806 of yacc.c */
8669 #line 3096 "parse.y"
8670  {
8671  token_info_push("module");
8672  }
8673  break;
8674 
8675  case 349:
8676 
8677 /* Line 1806 of yacc.c */
8678 #line 3102 "parse.y"
8679  {
8680  token_info_push("def");
8681  /*%%%*/
8682  (yyval.num) = ruby_sourceline;
8683  /*%
8684  %*/
8685  }
8686  break;
8687 
8688  case 350:
8689 
8690 /* Line 1806 of yacc.c */
8691 #line 3112 "parse.y"
8692  {
8693  token_info_pop("end");
8694  }
8695  break;
8696 
8697  case 357:
8698 
8699 /* Line 1806 of yacc.c */
8700 #line 3142 "parse.y"
8701  {
8702  /*%%%*/
8703  (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
8704  fixpos((yyval.node), (yyvsp[(2) - (5)].node));
8705  /*%
8706  $$ = dispatch3(elsif, $2, $4, escape_Qundef($5));
8707  %*/
8708  }
8709  break;
8710 
8711  case 359:
8712 
8713 /* Line 1806 of yacc.c */
8714 #line 3154 "parse.y"
8715  {
8716  /*%%%*/
8717  (yyval.node) = (yyvsp[(2) - (2)].node);
8718  /*%
8719  $$ = dispatch1(else, $2);
8720  %*/
8721  }
8722  break;
8723 
8724  case 362:
8725 
8726 /* Line 1806 of yacc.c */
8727 #line 3168 "parse.y"
8728  {
8729  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
8730  /*%%%*/
8731  /*%
8732  $$ = dispatch1(mlhs_paren, $$);
8733  %*/
8734  }
8735  break;
8736 
8737  case 363:
8738 
8739 /* Line 1806 of yacc.c */
8740 #line 3176 "parse.y"
8741  {
8742  /*%%%*/
8743  (yyval.node) = (yyvsp[(2) - (3)].node);
8744  /*%
8745  $$ = dispatch1(mlhs_paren, $2);
8746  %*/
8747  }
8748  break;
8749 
8750  case 364:
8751 
8752 /* Line 1806 of yacc.c */
8753 #line 3186 "parse.y"
8754  {
8755  /*%%%*/
8756  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
8757  /*%
8758  $$ = mlhs_add(mlhs_new(), $1);
8759  %*/
8760  }
8761  break;
8762 
8763  case 365:
8764 
8765 /* Line 1806 of yacc.c */
8766 #line 3194 "parse.y"
8767  {
8768  /*%%%*/
8769  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
8770  /*%
8771  $$ = mlhs_add($1, $3);
8772  %*/
8773  }
8774  break;
8775 
8776  case 366:
8777 
8778 /* Line 1806 of yacc.c */
8779 #line 3204 "parse.y"
8780  {
8781  /*%%%*/
8782  (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
8783  /*%
8784  $$ = $1;
8785  %*/
8786  }
8787  break;
8788 
8789  case 367:
8790 
8791 /* Line 1806 of yacc.c */
8792 #line 3212 "parse.y"
8793  {
8794  (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
8795  /*%%%*/
8796  (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
8797  /*%
8798  $$ = mlhs_add_star($1, $$);
8799  %*/
8800  }
8801  break;
8802 
8803  case 368:
8804 
8805 /* Line 1806 of yacc.c */
8806 #line 3221 "parse.y"
8807  {
8808  (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
8809  /*%%%*/
8810  (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
8811  /*%
8812  $$ = mlhs_add_star($1, $$);
8813  %*/
8814  }
8815  break;
8816 
8817  case 369:
8818 
8819 /* Line 1806 of yacc.c */
8820 #line 3230 "parse.y"
8821  {
8822  /*%%%*/
8823  (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
8824  /*%
8825  $$ = mlhs_add_star($1, Qnil);
8826  %*/
8827  }
8828  break;
8829 
8830  case 370:
8831 
8832 /* Line 1806 of yacc.c */
8833 #line 3238 "parse.y"
8834  {
8835  /*%%%*/
8836  (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
8837  /*%
8838  $$ = mlhs_add_star($1, $5);
8839  %*/
8840  }
8841  break;
8842 
8843  case 371:
8844 
8845 /* Line 1806 of yacc.c */
8846 #line 3246 "parse.y"
8847  {
8848  (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
8849  /*%%%*/
8850  (yyval.node) = NEW_MASGN(0, (yyval.node));
8851  /*%
8852  $$ = mlhs_add_star(mlhs_new(), $$);
8853  %*/
8854  }
8855  break;
8856 
8857  case 372:
8858 
8859 /* Line 1806 of yacc.c */
8860 #line 3255 "parse.y"
8861  {
8862  (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
8863  /*%%%*/
8864  (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
8865  /*%
8866  #if 0
8867  TODO: Check me
8868  #endif
8869  $$ = mlhs_add_star($$, $4);
8870  %*/
8871  }
8872  break;
8873 
8874  case 373:
8875 
8876 /* Line 1806 of yacc.c */
8877 #line 3267 "parse.y"
8878  {
8879  /*%%%*/
8880  (yyval.node) = NEW_MASGN(0, -1);
8881  /*%
8882  $$ = mlhs_add_star(mlhs_new(), Qnil);
8883  %*/
8884  }
8885  break;
8886 
8887  case 374:
8888 
8889 /* Line 1806 of yacc.c */
8890 #line 3275 "parse.y"
8891  {
8892  /*%%%*/
8893  (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
8894  /*%
8895  $$ = mlhs_add_star(mlhs_new(), Qnil);
8896  %*/
8897  }
8898  break;
8899 
8900  case 375:
8901 
8902 /* Line 1806 of yacc.c */
8903 #line 3286 "parse.y"
8904  {
8905  (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id));
8906  }
8907  break;
8908 
8909  case 376:
8910 
8911 /* Line 1806 of yacc.c */
8912 #line 3290 "parse.y"
8913  {
8914  (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
8915  }
8916  break;
8917 
8918  case 377:
8919 
8920 /* Line 1806 of yacc.c */
8921 #line 3294 "parse.y"
8922  {
8923  (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
8924  }
8925  break;
8926 
8927  case 378:
8928 
8929 /* Line 1806 of yacc.c */
8930 #line 3298 "parse.y"
8931  {
8932  (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
8933  }
8934  break;
8935 
8936  case 379:
8937 
8938 /* Line 1806 of yacc.c */
8939 #line 3304 "parse.y"
8940  {
8941  (yyval.node) = (yyvsp[(2) - (2)].node);
8942  }
8943  break;
8944 
8945  case 380:
8946 
8947 /* Line 1806 of yacc.c */
8948 #line 3308 "parse.y"
8949  {
8950  (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
8951  }
8952  break;
8953 
8954  case 381:
8955 
8956 /* Line 1806 of yacc.c */
8957 #line 3314 "parse.y"
8958  {
8959  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node));
8960  }
8961  break;
8962 
8963  case 382:
8964 
8965 /* Line 1806 of yacc.c */
8966 #line 3318 "parse.y"
8967  {
8968  (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node));
8969  }
8970  break;
8971 
8972  case 383:
8973 
8974 /* Line 1806 of yacc.c */
8975 #line 3322 "parse.y"
8976  {
8977  (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node));
8978  }
8979  break;
8980 
8981  case 384:
8982 
8983 /* Line 1806 of yacc.c */
8984 #line 3326 "parse.y"
8985  {
8986  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
8987  }
8988  break;
8989 
8990  case 385:
8991 
8992 /* Line 1806 of yacc.c */
8993 #line 3330 "parse.y"
8994  {
8995  (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
8996  }
8997  break;
8998 
8999  case 386:
9000 
9001 /* Line 1806 of yacc.c */
9002 #line 3334 "parse.y"
9003  {
9004  (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, 1, Qnone, new_args_tail(Qnone, Qnone, Qnone));
9005  /*%%%*/
9006  /*%
9007  dispatch1(excessed_comma, $$);
9008  %*/
9009  }
9010  break;
9011 
9012  case 387:
9013 
9014 /* Line 1806 of yacc.c */
9015 #line 3342 "parse.y"
9016  {
9017  (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
9018  }
9019  break;
9020 
9021  case 388:
9022 
9023 /* Line 1806 of yacc.c */
9024 #line 3346 "parse.y"
9025  {
9026  (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node));
9027  }
9028  break;
9029 
9030  case 389:
9031 
9032 /* Line 1806 of yacc.c */
9033 #line 3350 "parse.y"
9034  {
9035  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
9036  }
9037  break;
9038 
9039  case 390:
9040 
9041 /* Line 1806 of yacc.c */
9042 #line 3354 "parse.y"
9043  {
9044  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
9045  }
9046  break;
9047 
9048  case 391:
9049 
9050 /* Line 1806 of yacc.c */
9051 #line 3358 "parse.y"
9052  {
9053  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node));
9054  }
9055  break;
9056 
9057  case 392:
9058 
9059 /* Line 1806 of yacc.c */
9060 #line 3362 "parse.y"
9061  {
9062  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
9063  }
9064  break;
9065 
9066  case 393:
9067 
9068 /* Line 1806 of yacc.c */
9069 #line 3366 "parse.y"
9070  {
9071  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node));
9072  }
9073  break;
9074 
9075  case 394:
9076 
9077 /* Line 1806 of yacc.c */
9078 #line 3370 "parse.y"
9079  {
9080  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
9081  }
9082  break;
9083 
9084  case 395:
9085 
9086 /* Line 1806 of yacc.c */
9087 #line 3374 "parse.y"
9088  {
9089  (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
9090  }
9091  break;
9092 
9093  case 397:
9094 
9095 /* Line 1806 of yacc.c */
9096 #line 3381 "parse.y"
9097  {
9098  command_start = TRUE;
9099  }
9100  break;
9101 
9102  case 398:
9103 
9104 /* Line 1806 of yacc.c */
9105 #line 3387 "parse.y"
9106  {
9107  /*%%%*/
9108  (yyval.node) = 0;
9109  /*%
9110  $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
9111  escape_Qundef($2));
9112  %*/
9113  }
9114  break;
9115 
9116  case 399:
9117 
9118 /* Line 1806 of yacc.c */
9119 #line 3396 "parse.y"
9120  {
9121  /*%%%*/
9122  (yyval.node) = 0;
9123  /*%
9124  $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
9125  Qnil);
9126  %*/
9127  }
9128  break;
9129 
9130  case 400:
9131 
9132 /* Line 1806 of yacc.c */
9133 #line 3405 "parse.y"
9134  {
9135  /*%%%*/
9136  (yyval.node) = (yyvsp[(2) - (4)].node);
9137  /*%
9138  $$ = blockvar_new(escape_Qundef($2), escape_Qundef($3));
9139  %*/
9140  }
9141  break;
9142 
9143  case 401:
9144 
9145 /* Line 1806 of yacc.c */
9146 #line 3416 "parse.y"
9147  {
9148  (yyval.node) = 0;
9149  }
9150  break;
9151 
9152  case 402:
9153 
9154 /* Line 1806 of yacc.c */
9155 #line 3420 "parse.y"
9156  {
9157  /*%%%*/
9158  (yyval.node) = 0;
9159  /*%
9160  $$ = $3;
9161  %*/
9162  }
9163  break;
9164 
9165  case 405:
9166 
9167 /* Line 1806 of yacc.c */
9168 #line 3446 "parse.y"
9169  {
9170  new_bv(get_id((yyvsp[(1) - (1)].id)));
9171  /*%%%*/
9172  /*%
9173  $$ = get_value($1);
9174  %*/
9175  }
9176  break;
9177 
9178  case 406:
9179 
9180 /* Line 1806 of yacc.c */
9181 #line 3454 "parse.y"
9182  {
9183  (yyval.node) = 0;
9184  }
9185  break;
9186 
9187  case 407:
9188 
9189 /* Line 1806 of yacc.c */
9190 #line 3459 "parse.y"
9191  {
9192  (yyval.vars) = dyna_push();
9193  }
9194  break;
9195 
9196  case 408:
9197 
9198 /* Line 1806 of yacc.c */
9199 #line 3462 "parse.y"
9200  {
9201  (yyval.num) = lpar_beg;
9202  lpar_beg = ++paren_nest;
9203  }
9204  break;
9205 
9206  case 409:
9207 
9208 /* Line 1806 of yacc.c */
9209 #line 3467 "parse.y"
9210  {
9211  (yyval.num) = ruby_sourceline;
9212  }
9213  break;
9214 
9215  case 410:
9216 
9217 /* Line 1806 of yacc.c */
9218 #line 3471 "parse.y"
9219  {
9220  lpar_beg = (yyvsp[(2) - (5)].num);
9221  /*%%%*/
9222  (yyval.node) = NEW_LAMBDA((yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node));
9223  nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
9224  /*%
9225  $$ = dispatch2(lambda, $3, $5);
9226  %*/
9227  dyna_pop((yyvsp[(1) - (5)].vars));
9228  }
9229  break;
9230 
9231  case 411:
9232 
9233 /* Line 1806 of yacc.c */
9234 #line 3484 "parse.y"
9235  {
9236  /*%%%*/
9237  (yyval.node) = (yyvsp[(2) - (4)].node);
9238  /*%
9239  $$ = dispatch1(paren, $2);
9240  %*/
9241  }
9242  break;
9243 
9244  case 412:
9245 
9246 /* Line 1806 of yacc.c */
9247 #line 3492 "parse.y"
9248  {
9249  (yyval.node) = (yyvsp[(1) - (1)].node);
9250  }
9251  break;
9252 
9253  case 413:
9254 
9255 /* Line 1806 of yacc.c */
9256 #line 3498 "parse.y"
9257  {
9258  (yyval.node) = (yyvsp[(2) - (3)].node);
9259  }
9260  break;
9261 
9262  case 414:
9263 
9264 /* Line 1806 of yacc.c */
9265 #line 3502 "parse.y"
9266  {
9267  (yyval.node) = (yyvsp[(2) - (3)].node);
9268  }
9269  break;
9270 
9271  case 415:
9272 
9273 /* Line 1806 of yacc.c */
9274 #line 3508 "parse.y"
9275  {
9276  (yyvsp[(1) - (1)].vars) = dyna_push();
9277  /*%%%*/
9278  (yyval.num) = ruby_sourceline;
9279  /*% %*/
9280  }
9281  break;
9282 
9283  case 416:
9284 
9285 /* Line 1806 of yacc.c */
9286 #line 3517 "parse.y"
9287  {
9288  /*%%%*/
9289  (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
9290  nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
9291  /*%
9292  $$ = dispatch2(do_block, escape_Qundef($3), $4);
9293  %*/
9294  dyna_pop((yyvsp[(1) - (5)].vars));
9295  }
9296  break;
9297 
9298  case 417:
9299 
9300 /* Line 1806 of yacc.c */
9301 #line 3529 "parse.y"
9302  {
9303  /*%%%*/
9304  if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
9305  compile_error(PARSER_ARG "block given to yield");
9306  }
9307  else {
9308  block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
9309  }
9310  (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
9311  (yyval.node) = (yyvsp[(2) - (2)].node);
9312  fixpos((yyval.node), (yyvsp[(1) - (2)].node));
9313  /*%
9314  $$ = method_add_block($1, $2);
9315  %*/
9316  }
9317  break;
9318 
9319  case 418:
9320 
9321 /* Line 1806 of yacc.c */
9322 #line 3545 "parse.y"
9323  {
9324  /*%%%*/
9325  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
9326  /*%
9327  $$ = dispatch3(call, $1, $2, $3);
9328  $$ = method_optarg($$, $4);
9329  %*/
9330  }
9331  break;
9332 
9333  case 419:
9334 
9335 /* Line 1806 of yacc.c */
9336 #line 3554 "parse.y"
9337  {
9338  /*%%%*/
9339  block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
9340  (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
9341  (yyval.node) = (yyvsp[(5) - (5)].node);
9342  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
9343  /*%
9344  $$ = dispatch4(command_call, $1, $2, $3, $4);
9345  $$ = method_add_block($$, $5);
9346  %*/
9347  }
9348  break;
9349 
9350  case 420:
9351 
9352 /* Line 1806 of yacc.c */
9353 #line 3566 "parse.y"
9354  {
9355  /*%%%*/
9356  block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
9357  (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
9358  (yyval.node) = (yyvsp[(5) - (5)].node);
9359  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
9360  /*%
9361  $$ = dispatch4(command_call, $1, $2, $3, $4);
9362  $$ = method_add_block($$, $5);
9363  %*/
9364  }
9365  break;
9366 
9367  case 421:
9368 
9369 /* Line 1806 of yacc.c */
9370 #line 3580 "parse.y"
9371  {
9372  /*%%%*/
9373  (yyval.node) = (yyvsp[(1) - (2)].node);
9374  (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
9375  /*%
9376  $$ = method_arg(dispatch1(fcall, $1), $2);
9377  %*/
9378  }
9379  break;
9380 
9381  case 422:
9382 
9383 /* Line 1806 of yacc.c */
9384 #line 3589 "parse.y"
9385  {
9386  /*%%%*/
9387  (yyval.num) = ruby_sourceline;
9388  /*% %*/
9389  }
9390  break;
9391 
9392  case 423:
9393 
9394 /* Line 1806 of yacc.c */
9395 #line 3595 "parse.y"
9396  {
9397  /*%%%*/
9398  (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
9399  nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
9400  /*%
9401  $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
9402  $$ = method_optarg($$, $5);
9403  %*/
9404  }
9405  break;
9406 
9407  case 424:
9408 
9409 /* Line 1806 of yacc.c */
9410 #line 3605 "parse.y"
9411  {
9412  /*%%%*/
9413  (yyval.num) = ruby_sourceline;
9414  /*% %*/
9415  }
9416  break;
9417 
9418  case 425:
9419 
9420 /* Line 1806 of yacc.c */
9421 #line 3611 "parse.y"
9422  {
9423  /*%%%*/
9424  (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
9425  nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
9426  /*%
9427  $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
9428  $$ = method_optarg($$, $5);
9429  %*/
9430  }
9431  break;
9432 
9433  case 426:
9434 
9435 /* Line 1806 of yacc.c */
9436 #line 3621 "parse.y"
9437  {
9438  /*%%%*/
9439  (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
9440  /*%
9441  $$ = dispatch3(call, $1, ripper_intern("::"), $3);
9442  %*/
9443  }
9444  break;
9445 
9446  case 427:
9447 
9448 /* Line 1806 of yacc.c */
9449 #line 3629 "parse.y"
9450  {
9451  /*%%%*/
9452  (yyval.num) = ruby_sourceline;
9453  /*% %*/
9454  }
9455  break;
9456 
9457  case 428:
9458 
9459 /* Line 1806 of yacc.c */
9460 #line 3635 "parse.y"
9461  {
9462  /*%%%*/
9463  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), rb_intern("call"), (yyvsp[(4) - (4)].node));
9464  nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
9465  /*%
9466  $$ = dispatch3(call, $1, ripper_id2sym('.'),
9467  ripper_intern("call"));
9468  $$ = method_optarg($$, $4);
9469  %*/
9470  }
9471  break;
9472 
9473  case 429:
9474 
9475 /* Line 1806 of yacc.c */
9476 #line 3646 "parse.y"
9477  {
9478  /*%%%*/
9479  (yyval.num) = ruby_sourceline;
9480  /*% %*/
9481  }
9482  break;
9483 
9484  case 430:
9485 
9486 /* Line 1806 of yacc.c */
9487 #line 3652 "parse.y"
9488  {
9489  /*%%%*/
9490  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), rb_intern("call"), (yyvsp[(4) - (4)].node));
9491  nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
9492  /*%
9493  $$ = dispatch3(call, $1, ripper_intern("::"),
9494  ripper_intern("call"));
9495  $$ = method_optarg($$, $4);
9496  %*/
9497  }
9498  break;
9499 
9500  case 431:
9501 
9502 /* Line 1806 of yacc.c */
9503 #line 3663 "parse.y"
9504  {
9505  /*%%%*/
9506  (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
9507  /*%
9508  $$ = dispatch1(super, $2);
9509  %*/
9510  }
9511  break;
9512 
9513  case 432:
9514 
9515 /* Line 1806 of yacc.c */
9516 #line 3671 "parse.y"
9517  {
9518  /*%%%*/
9519  (yyval.node) = NEW_ZSUPER();
9520  /*%
9521  $$ = dispatch0(zsuper);
9522  %*/
9523  }
9524  break;
9525 
9526  case 433:
9527 
9528 /* Line 1806 of yacc.c */
9529 #line 3679 "parse.y"
9530  {
9531  /*%%%*/
9532  if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
9533  (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
9534  else
9535  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
9536  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
9537  /*%
9538  $$ = dispatch2(aref, $1, escape_Qundef($3));
9539  %*/
9540  }
9541  break;
9542 
9543  case 434:
9544 
9545 /* Line 1806 of yacc.c */
9546 #line 3693 "parse.y"
9547  {
9548  (yyvsp[(1) - (1)].vars) = dyna_push();
9549  /*%%%*/
9550  (yyval.num) = ruby_sourceline;
9551  /*%
9552  %*/
9553  }
9554  break;
9555 
9556  case 435:
9557 
9558 /* Line 1806 of yacc.c */
9559 #line 3702 "parse.y"
9560  {
9561  /*%%%*/
9562  (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
9563  nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
9564  /*%
9565  $$ = dispatch2(brace_block, escape_Qundef($3), $4);
9566  %*/
9567  dyna_pop((yyvsp[(1) - (5)].vars));
9568  }
9569  break;
9570 
9571  case 436:
9572 
9573 /* Line 1806 of yacc.c */
9574 #line 3712 "parse.y"
9575  {
9576  (yyvsp[(1) - (1)].vars) = dyna_push();
9577  /*%%%*/
9578  (yyval.num) = ruby_sourceline;
9579  /*%
9580  %*/
9581  }
9582  break;
9583 
9584  case 437:
9585 
9586 /* Line 1806 of yacc.c */
9587 #line 3721 "parse.y"
9588  {
9589  /*%%%*/
9590  (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
9591  nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
9592  /*%
9593  $$ = dispatch2(do_block, escape_Qundef($3), $4);
9594  %*/
9595  dyna_pop((yyvsp[(1) - (5)].vars));
9596  }
9597  break;
9598 
9599  case 438:
9600 
9601 /* Line 1806 of yacc.c */
9602 #line 3735 "parse.y"
9603  {
9604  /*%%%*/
9605  (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
9606  /*%
9607  $$ = dispatch3(when, $2, $4, escape_Qundef($5));
9608  %*/
9609  }
9610  break;
9611 
9612  case 441:
9613 
9614 /* Line 1806 of yacc.c */
9615 #line 3751 "parse.y"
9616  {
9617  /*%%%*/
9618  if ((yyvsp[(3) - (6)].node)) {
9619  (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
9620  (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
9621  }
9622  (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
9623  fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
9624  /*%
9625  $$ = dispatch4(rescue,
9626  escape_Qundef($2),
9627  escape_Qundef($3),
9628  escape_Qundef($5),
9629  escape_Qundef($6));
9630  %*/
9631  }
9632  break;
9633 
9634  case 443:
9635 
9636 /* Line 1806 of yacc.c */
9637 #line 3771 "parse.y"
9638  {
9639  /*%%%*/
9640  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
9641  /*%
9642  $$ = rb_ary_new3(1, $1);
9643  %*/
9644  }
9645  break;
9646 
9647  case 444:
9648 
9649 /* Line 1806 of yacc.c */
9650 #line 3779 "parse.y"
9651  {
9652  /*%%%*/
9653  if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
9654  /*%
9655  $$ = $1;
9656  %*/
9657  }
9658  break;
9659 
9660  case 446:
9661 
9662 /* Line 1806 of yacc.c */
9663 #line 3790 "parse.y"
9664  {
9665  (yyval.node) = (yyvsp[(2) - (2)].node);
9666  }
9667  break;
9668 
9669  case 448:
9670 
9671 /* Line 1806 of yacc.c */
9672 #line 3797 "parse.y"
9673  {
9674  /*%%%*/
9675  (yyval.node) = (yyvsp[(2) - (2)].node);
9676  /*%
9677  $$ = dispatch1(ensure, $2);
9678  %*/
9679  }
9680  break;
9681 
9682  case 451:
9683 
9684 /* Line 1806 of yacc.c */
9685 #line 3809 "parse.y"
9686  {
9687  /*%%%*/
9688  (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
9689  /*%
9690  $$ = dispatch1(symbol_literal, $1);
9691  %*/
9692  }
9693  break;
9694 
9695  case 453:
9696 
9697 /* Line 1806 of yacc.c */
9698 #line 3820 "parse.y"
9699  {
9700  /*%%%*/
9701  NODE *node = (yyvsp[(1) - (1)].node);
9702  if (!node) {
9703  node = NEW_STR(STR_NEW0());
9704  }
9705  else {
9706  node = evstr2dstr(node);
9707  }
9708  (yyval.node) = node;
9709  /*%
9710  $$ = $1;
9711  %*/
9712  }
9713  break;
9714 
9715  case 456:
9716 
9717 /* Line 1806 of yacc.c */
9718 #line 3839 "parse.y"
9719  {
9720  /*%%%*/
9721  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
9722  /*%
9723  $$ = dispatch2(string_concat, $1, $2);
9724  %*/
9725  }
9726  break;
9727 
9728  case 457:
9729 
9730 /* Line 1806 of yacc.c */
9731 #line 3849 "parse.y"
9732  {
9733  /*%%%*/
9734  (yyval.node) = (yyvsp[(2) - (3)].node);
9735  /*%
9736  $$ = dispatch1(string_literal, $2);
9737  %*/
9738  }
9739  break;
9740 
9741  case 458:
9742 
9743 /* Line 1806 of yacc.c */
9744 #line 3859 "parse.y"
9745  {
9746  /*%%%*/
9747  NODE *node = (yyvsp[(2) - (3)].node);
9748  if (!node) {
9749  node = NEW_XSTR(STR_NEW0());
9750  }
9751  else {
9752  switch (nd_type(node)) {
9753  case NODE_STR:
9754  nd_set_type(node, NODE_XSTR);
9755  break;
9756  case NODE_DSTR:
9757  nd_set_type(node, NODE_DXSTR);
9758  break;
9759  default:
9760  node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
9761  break;
9762  }
9763  }
9764  (yyval.node) = node;
9765  /*%
9766  $$ = dispatch1(xstring_literal, $2);
9767  %*/
9768  }
9769  break;
9770 
9771  case 459:
9772 
9773 /* Line 1806 of yacc.c */
9774 #line 3886 "parse.y"
9775  {
9776  /*%%%*/
9777  int options = (yyvsp[(3) - (3)].num);
9778  NODE *node = (yyvsp[(2) - (3)].node);
9779  NODE *list, *prev;
9780  if (!node) {
9781  node = NEW_LIT(reg_compile(STR_NEW0(), options));
9782  }
9783  else switch (nd_type(node)) {
9784  case NODE_STR:
9785  {
9786  VALUE src = node->nd_lit;
9787  nd_set_type(node, NODE_LIT);
9788  node->nd_lit = reg_compile(src, options);
9789  }
9790  break;
9791  default:
9792  node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
9793  case NODE_DSTR:
9794  if (options & RE_OPTION_ONCE) {
9796  }
9797  else {
9798  nd_set_type(node, NODE_DREGX);
9799  }
9800  node->nd_cflag = options & RE_OPTION_MASK;
9801  if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
9802  for (list = (prev = node)->nd_next; list; list = list->nd_next) {
9803  if (nd_type(list->nd_head) == NODE_STR) {
9804  VALUE tail = list->nd_head->nd_lit;
9805  if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
9806  VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
9807  if (!literal_concat0(parser, lit, tail)) {
9808  node = 0;
9809  break;
9810  }
9811  rb_str_resize(tail, 0);
9812  prev->nd_next = list->nd_next;
9813  rb_gc_force_recycle((VALUE)list->nd_head);
9814  rb_gc_force_recycle((VALUE)list);
9815  list = prev;
9816  }
9817  else {
9818  prev = list;
9819  }
9820  }
9821  else {
9822  prev = 0;
9823  }
9824  }
9825  if (!node->nd_next) {
9826  VALUE src = node->nd_lit;
9827  nd_set_type(node, NODE_LIT);
9828  node->nd_lit = reg_compile(src, options);
9829  }
9830  break;
9831  }
9832  (yyval.node) = node;
9833  /*%
9834  $$ = dispatch2(regexp_literal, $2, $3);
9835  %*/
9836  }
9837  break;
9838 
9839  case 460:
9840 
9841 /* Line 1806 of yacc.c */
9842 #line 3951 "parse.y"
9843  {
9844  /*%%%*/
9845  (yyval.node) = NEW_ZARRAY();
9846  /*%
9847  $$ = dispatch0(words_new);
9848  $$ = dispatch1(array, $$);
9849  %*/
9850  }
9851  break;
9852 
9853  case 461:
9854 
9855 /* Line 1806 of yacc.c */
9856 #line 3960 "parse.y"
9857  {
9858  /*%%%*/
9859  (yyval.node) = (yyvsp[(2) - (3)].node);
9860  /*%
9861  $$ = dispatch1(array, $2);
9862  %*/
9863  }
9864  break;
9865 
9866  case 462:
9867 
9868 /* Line 1806 of yacc.c */
9869 #line 3970 "parse.y"
9870  {
9871  /*%%%*/
9872  (yyval.node) = 0;
9873  /*%
9874  $$ = dispatch0(words_new);
9875  %*/
9876  }
9877  break;
9878 
9879  case 463:
9880 
9881 /* Line 1806 of yacc.c */
9882 #line 3978 "parse.y"
9883  {
9884  /*%%%*/
9885  (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
9886  /*%
9887  $$ = dispatch2(words_add, $1, $2);
9888  %*/
9889  }
9890  break;
9891 
9892  case 465:
9893 
9894 /* Line 1806 of yacc.c */
9895 #line 3996 "parse.y"
9896  {
9897  /*%%%*/
9898  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
9899  /*%
9900  $$ = dispatch2(word_add, $1, $2);
9901  %*/
9902  }
9903  break;
9904 
9905  case 466:
9906 
9907 /* Line 1806 of yacc.c */
9908 #line 4006 "parse.y"
9909  {
9910  /*%%%*/
9911  (yyval.node) = NEW_ZARRAY();
9912  /*%
9913  $$ = dispatch0(symbols_new);
9914  $$ = dispatch1(array, $$);
9915  %*/
9916  }
9917  break;
9918 
9919  case 467:
9920 
9921 /* Line 1806 of yacc.c */
9922 #line 4015 "parse.y"
9923  {
9924  /*%%%*/
9925  (yyval.node) = (yyvsp[(2) - (3)].node);
9926  /*%
9927  $$ = dispatch1(array, $2);
9928  %*/
9929  }
9930  break;
9931 
9932  case 468:
9933 
9934 /* Line 1806 of yacc.c */
9935 #line 4025 "parse.y"
9936  {
9937  /*%%%*/
9938  (yyval.node) = 0;
9939  /*%
9940  $$ = dispatch0(symbols_new);
9941  %*/
9942  }
9943  break;
9944 
9945  case 469:
9946 
9947 /* Line 1806 of yacc.c */
9948 #line 4033 "parse.y"
9949  {
9950  /*%%%*/
9951  (yyvsp[(2) - (3)].node) = evstr2dstr((yyvsp[(2) - (3)].node));
9952  nd_set_type((yyvsp[(2) - (3)].node), NODE_DSYM);
9953  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
9954  /*%
9955  $$ = dispatch2(symbols_add, $1, $2);
9956  %*/
9957  }
9958  break;
9959 
9960  case 470:
9961 
9962 /* Line 1806 of yacc.c */
9963 #line 4045 "parse.y"
9964  {
9965  /*%%%*/
9966  (yyval.node) = NEW_ZARRAY();
9967  /*%
9968  $$ = dispatch0(qwords_new);
9969  $$ = dispatch1(array, $$);
9970  %*/
9971  }
9972  break;
9973 
9974  case 471:
9975 
9976 /* Line 1806 of yacc.c */
9977 #line 4054 "parse.y"
9978  {
9979  /*%%%*/
9980  (yyval.node) = (yyvsp[(2) - (3)].node);
9981  /*%
9982  $$ = dispatch1(array, $2);
9983  %*/
9984  }
9985  break;
9986 
9987  case 472:
9988 
9989 /* Line 1806 of yacc.c */
9990 #line 4064 "parse.y"
9991  {
9992  /*%%%*/
9993  (yyval.node) = NEW_ZARRAY();
9994  /*%
9995  $$ = dispatch0(qsymbols_new);
9996  $$ = dispatch1(array, $$);
9997  %*/
9998  }
9999  break;
10000 
10001  case 473:
10002 
10003 /* Line 1806 of yacc.c */
10004 #line 4073 "parse.y"
10005  {
10006  /*%%%*/
10007  (yyval.node) = (yyvsp[(2) - (3)].node);
10008  /*%
10009  $$ = dispatch1(array, $2);
10010  %*/
10011  }
10012  break;
10013 
10014  case 474:
10015 
10016 /* Line 1806 of yacc.c */
10017 #line 4083 "parse.y"
10018  {
10019  /*%%%*/
10020  (yyval.node) = 0;
10021  /*%
10022  $$ = dispatch0(qwords_new);
10023  %*/
10024  }
10025  break;
10026 
10027  case 475:
10028 
10029 /* Line 1806 of yacc.c */
10030 #line 4091 "parse.y"
10031  {
10032  /*%%%*/
10033  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
10034  /*%
10035  $$ = dispatch2(qwords_add, $1, $2);
10036  %*/
10037  }
10038  break;
10039 
10040  case 476:
10041 
10042 /* Line 1806 of yacc.c */
10043 #line 4101 "parse.y"
10044  {
10045  /*%%%*/
10046  (yyval.node) = 0;
10047  /*%
10048  $$ = dispatch0(qsymbols_new);
10049  %*/
10050  }
10051  break;
10052 
10053  case 477:
10054 
10055 /* Line 1806 of yacc.c */
10056 #line 4109 "parse.y"
10057  {
10058  /*%%%*/
10059  VALUE lit;
10060  lit = (yyvsp[(2) - (3)].node)->nd_lit;
10061  (yyvsp[(2) - (3)].node)->nd_lit = ID2SYM(rb_intern_str(lit));
10062  nd_set_type((yyvsp[(2) - (3)].node), NODE_LIT);
10063  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
10064  /*%
10065  $$ = dispatch2(qsymbols_add, $1, $2);
10066  %*/
10067  }
10068  break;
10069 
10070  case 478:
10071 
10072 /* Line 1806 of yacc.c */
10073 #line 4123 "parse.y"
10074  {
10075  /*%%%*/
10076  (yyval.node) = 0;
10077  /*%
10078  $$ = dispatch0(string_content);
10079  %*/
10080  }
10081  break;
10082 
10083  case 479:
10084 
10085 /* Line 1806 of yacc.c */
10086 #line 4131 "parse.y"
10087  {
10088  /*%%%*/
10089  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
10090  /*%
10091  $$ = dispatch2(string_add, $1, $2);
10092  %*/
10093  }
10094  break;
10095 
10096  case 480:
10097 
10098 /* Line 1806 of yacc.c */
10099 #line 4141 "parse.y"
10100  {
10101  /*%%%*/
10102  (yyval.node) = 0;
10103  /*%
10104  $$ = dispatch0(xstring_new);
10105  %*/
10106  }
10107  break;
10108 
10109  case 481:
10110 
10111 /* Line 1806 of yacc.c */
10112 #line 4149 "parse.y"
10113  {
10114  /*%%%*/
10115  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
10116  /*%
10117  $$ = dispatch2(xstring_add, $1, $2);
10118  %*/
10119  }
10120  break;
10121 
10122  case 482:
10123 
10124 /* Line 1806 of yacc.c */
10125 #line 4159 "parse.y"
10126  {
10127  /*%%%*/
10128  (yyval.node) = 0;
10129  /*%
10130  $$ = dispatch0(regexp_new);
10131  %*/
10132  }
10133  break;
10134 
10135  case 483:
10136 
10137 /* Line 1806 of yacc.c */
10138 #line 4167 "parse.y"
10139  {
10140  /*%%%*/
10141  NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
10142  if (!head) {
10143  (yyval.node) = tail;
10144  }
10145  else if (!tail) {
10146  (yyval.node) = head;
10147  }
10148  else {
10149  switch (nd_type(head)) {
10150  case NODE_STR:
10151  nd_set_type(head, NODE_DSTR);
10152  break;
10153  case NODE_DSTR:
10154  break;
10155  default:
10156  head = list_append(NEW_DSTR(Qnil), head);
10157  break;
10158  }
10159  (yyval.node) = list_append(head, tail);
10160  }
10161  /*%
10162  $$ = dispatch2(regexp_add, $1, $2);
10163  %*/
10164  }
10165  break;
10166 
10167  case 485:
10168 
10169 /* Line 1806 of yacc.c */
10170 #line 4197 "parse.y"
10171  {
10172  (yyval.node) = lex_strterm;
10173  lex_strterm = 0;
10174  lex_state = EXPR_BEG;
10175  }
10176  break;
10177 
10178  case 486:
10179 
10180 /* Line 1806 of yacc.c */
10181 #line 4203 "parse.y"
10182  {
10183  /*%%%*/
10184  lex_strterm = (yyvsp[(2) - (3)].node);
10185  (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
10186  /*%
10187  lex_strterm = $<node>2;
10188  $$ = dispatch1(string_dvar, $3);
10189  %*/
10190  }
10191  break;
10192 
10193  case 487:
10194 
10195 /* Line 1806 of yacc.c */
10196 #line 4213 "parse.y"
10197  {
10198  (yyvsp[(1) - (1)].val) = cond_stack;
10199  (yyval.val) = cmdarg_stack;
10200  cond_stack = 0;
10201  cmdarg_stack = 0;
10202  }
10203  break;
10204 
10205  case 488:
10206 
10207 /* Line 1806 of yacc.c */
10208 #line 4219 "parse.y"
10209  {
10210  (yyval.node) = lex_strterm;
10211  lex_strterm = 0;
10212  lex_state = EXPR_BEG;
10213  }
10214  break;
10215 
10216  case 489:
10217 
10218 /* Line 1806 of yacc.c */
10219 #line 4224 "parse.y"
10220  {
10221  (yyval.num) = brace_nest;
10222  brace_nest = 0;
10223  }
10224  break;
10225 
10226  case 490:
10227 
10228 /* Line 1806 of yacc.c */
10229 #line 4229 "parse.y"
10230  {
10231  cond_stack = (yyvsp[(1) - (6)].val);
10232  cmdarg_stack = (yyvsp[(2) - (6)].val);
10233  lex_strterm = (yyvsp[(3) - (6)].node);
10234  brace_nest = (yyvsp[(4) - (6)].num);
10235  /*%%%*/
10236  if ((yyvsp[(5) - (6)].node)) (yyvsp[(5) - (6)].node)->flags &= ~NODE_FL_NEWLINE;
10237  (yyval.node) = new_evstr((yyvsp[(5) - (6)].node));
10238  /*%
10239  $$ = dispatch1(string_embexpr, $5);
10240  %*/
10241  }
10242  break;
10243 
10244  case 491:
10245 
10246 /* Line 1806 of yacc.c */
10247 #line 4244 "parse.y"
10248  {
10249  /*%%%*/
10250  (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
10251  /*%
10252  $$ = dispatch1(var_ref, $1);
10253  %*/
10254  }
10255  break;
10256 
10257  case 492:
10258 
10259 /* Line 1806 of yacc.c */
10260 #line 4252 "parse.y"
10261  {
10262  /*%%%*/
10263  (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
10264  /*%
10265  $$ = dispatch1(var_ref, $1);
10266  %*/
10267  }
10268  break;
10269 
10270  case 493:
10271 
10272 /* Line 1806 of yacc.c */
10273 #line 4260 "parse.y"
10274  {
10275  /*%%%*/
10276  (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
10277  /*%
10278  $$ = dispatch1(var_ref, $1);
10279  %*/
10280  }
10281  break;
10282 
10283  case 495:
10284 
10285 /* Line 1806 of yacc.c */
10286 #line 4271 "parse.y"
10287  {
10288  lex_state = EXPR_END;
10289  /*%%%*/
10290  (yyval.id) = (yyvsp[(2) - (2)].id);
10291  /*%
10292  $$ = dispatch1(symbol, $2);
10293  %*/
10294  }
10295  break;
10296 
10297  case 500:
10298 
10299 /* Line 1806 of yacc.c */
10300 #line 4288 "parse.y"
10301  {
10302  lex_state = EXPR_END;
10303  /*%%%*/
10304  (yyval.node) = dsym_node((yyvsp[(2) - (3)].node));
10305  /*%
10306  $$ = dispatch1(dyna_symbol, $2);
10307  %*/
10308  }
10309  break;
10310 
10311  case 502:
10312 
10313 /* Line 1806 of yacc.c */
10314 #line 4300 "parse.y"
10315  {
10316  /*%%%*/
10317  (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
10318  /*%
10319  $$ = dispatch2(unary, ripper_intern("-@"), $2);
10320  %*/
10321  }
10322  break;
10323 
10324  case 512:
10325 
10326 /* Line 1806 of yacc.c */
10327 #line 4322 "parse.y"
10328  {ifndef_ripper((yyval.id) = keyword_nil);}
10329  break;
10330 
10331  case 513:
10332 
10333 /* Line 1806 of yacc.c */
10334 #line 4323 "parse.y"
10335  {ifndef_ripper((yyval.id) = keyword_self);}
10336  break;
10337 
10338  case 514:
10339 
10340 /* Line 1806 of yacc.c */
10341 #line 4324 "parse.y"
10342  {ifndef_ripper((yyval.id) = keyword_true);}
10343  break;
10344 
10345  case 515:
10346 
10347 /* Line 1806 of yacc.c */
10348 #line 4325 "parse.y"
10349  {ifndef_ripper((yyval.id) = keyword_false);}
10350  break;
10351 
10352  case 516:
10353 
10354 /* Line 1806 of yacc.c */
10355 #line 4326 "parse.y"
10356  {ifndef_ripper((yyval.id) = keyword__FILE__);}
10357  break;
10358 
10359  case 517:
10360 
10361 /* Line 1806 of yacc.c */
10362 #line 4327 "parse.y"
10363  {ifndef_ripper((yyval.id) = keyword__LINE__);}
10364  break;
10365 
10366  case 518:
10367 
10368 /* Line 1806 of yacc.c */
10369 #line 4328 "parse.y"
10370  {ifndef_ripper((yyval.id) = keyword__ENCODING__);}
10371  break;
10372 
10373  case 519:
10374 
10375 /* Line 1806 of yacc.c */
10376 #line 4332 "parse.y"
10377  {
10378  /*%%%*/
10379  if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10380  /*%
10381  if (id_is_var(get_id($1))) {
10382  $$ = dispatch1(var_ref, $1);
10383  }
10384  else {
10385  $$ = dispatch1(vcall, $1);
10386  }
10387  %*/
10388  }
10389  break;
10390 
10391  case 520:
10392 
10393 /* Line 1806 of yacc.c */
10394 #line 4345 "parse.y"
10395  {
10396  /*%%%*/
10397  if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10398  /*%
10399  $$ = dispatch1(var_ref, $1);
10400  %*/
10401  }
10402  break;
10403 
10404  case 521:
10405 
10406 /* Line 1806 of yacc.c */
10407 #line 4355 "parse.y"
10408  {
10409  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10410  /*%%%*/
10411  /*%
10412  $$ = dispatch1(var_field, $$);
10413  %*/
10414  }
10415  break;
10416 
10417  case 522:
10418 
10419 /* Line 1806 of yacc.c */
10420 #line 4363 "parse.y"
10421  {
10422  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10423  /*%%%*/
10424  /*%
10425  $$ = dispatch1(var_field, $$);
10426  %*/
10427  }
10428  break;
10429 
10430  case 525:
10431 
10432 /* Line 1806 of yacc.c */
10433 #line 4377 "parse.y"
10434  {
10435  /*%%%*/
10436  (yyval.node) = 0;
10437  /*%
10438  $$ = Qnil;
10439  %*/
10440  }
10441  break;
10442 
10443  case 526:
10444 
10445 /* Line 1806 of yacc.c */
10446 #line 4385 "parse.y"
10447  {
10448  lex_state = EXPR_BEG;
10449  command_start = TRUE;
10450  }
10451  break;
10452 
10453  case 527:
10454 
10455 /* Line 1806 of yacc.c */
10456 #line 4390 "parse.y"
10457  {
10458  (yyval.node) = (yyvsp[(3) - (4)].node);
10459  }
10460  break;
10461 
10462  case 528:
10463 
10464 /* Line 1806 of yacc.c */
10465 #line 4394 "parse.y"
10466  {
10467  /*%%%*/
10468  yyerrok;
10469  (yyval.node) = 0;
10470  /*%
10471  yyerrok;
10472  $$ = Qnil;
10473  %*/
10474  }
10475  break;
10476 
10477  case 529:
10478 
10479 /* Line 1806 of yacc.c */
10480 #line 4406 "parse.y"
10481  {
10482  /*%%%*/
10483  (yyval.node) = (yyvsp[(2) - (3)].node);
10484  /*%
10485  $$ = dispatch1(paren, $2);
10486  %*/
10487  lex_state = EXPR_BEG;
10488  command_start = TRUE;
10489  }
10490  break;
10491 
10492  case 530:
10493 
10494 /* Line 1806 of yacc.c */
10495 #line 4415 "parse.y"
10496  {
10497  (yyval.num) = parser->parser_in_kwarg;
10498  parser->parser_in_kwarg = 1;
10499  }
10500  break;
10501 
10502  case 531:
10503 
10504 /* Line 1806 of yacc.c */
10505 #line 4420 "parse.y"
10506  {
10507  parser->parser_in_kwarg = (yyvsp[(1) - (3)].num);
10508  (yyval.node) = (yyvsp[(2) - (3)].node);
10509  lex_state = EXPR_BEG;
10510  command_start = TRUE;
10511  }
10512  break;
10513 
10514  case 532:
10515 
10516 /* Line 1806 of yacc.c */
10517 #line 4429 "parse.y"
10518  {
10519  (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id));
10520  }
10521  break;
10522 
10523  case 533:
10524 
10525 /* Line 1806 of yacc.c */
10526 #line 4433 "parse.y"
10527  {
10528  (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
10529  }
10530  break;
10531 
10532  case 534:
10533 
10534 /* Line 1806 of yacc.c */
10535 #line 4437 "parse.y"
10536  {
10537  (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
10538  }
10539  break;
10540 
10541  case 535:
10542 
10543 /* Line 1806 of yacc.c */
10544 #line 4441 "parse.y"
10545  {
10546  (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
10547  }
10548  break;
10549 
10550  case 536:
10551 
10552 /* Line 1806 of yacc.c */
10553 #line 4447 "parse.y"
10554  {
10555  (yyval.node) = (yyvsp[(2) - (2)].node);
10556  }
10557  break;
10558 
10559  case 537:
10560 
10561 /* Line 1806 of yacc.c */
10562 #line 4451 "parse.y"
10563  {
10564  (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
10565  }
10566  break;
10567 
10568  case 538:
10569 
10570 /* Line 1806 of yacc.c */
10571 #line 4457 "parse.y"
10572  {
10573  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node));
10574  }
10575  break;
10576 
10577  case 539:
10578 
10579 /* Line 1806 of yacc.c */
10580 #line 4461 "parse.y"
10581  {
10582  (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node));
10583  }
10584  break;
10585 
10586  case 540:
10587 
10588 /* Line 1806 of yacc.c */
10589 #line 4465 "parse.y"
10590  {
10591  (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node));
10592  }
10593  break;
10594 
10595  case 541:
10596 
10597 /* Line 1806 of yacc.c */
10598 #line 4469 "parse.y"
10599  {
10600  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10601  }
10602  break;
10603 
10604  case 542:
10605 
10606 /* Line 1806 of yacc.c */
10607 #line 4473 "parse.y"
10608  {
10609  (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
10610  }
10611  break;
10612 
10613  case 543:
10614 
10615 /* Line 1806 of yacc.c */
10616 #line 4477 "parse.y"
10617  {
10618  (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10619  }
10620  break;
10621 
10622  case 544:
10623 
10624 /* Line 1806 of yacc.c */
10625 #line 4481 "parse.y"
10626  {
10627  (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node));
10628  }
10629  break;
10630 
10631  case 545:
10632 
10633 /* Line 1806 of yacc.c */
10634 #line 4485 "parse.y"
10635  {
10636  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
10637  }
10638  break;
10639 
10640  case 546:
10641 
10642 /* Line 1806 of yacc.c */
10643 #line 4489 "parse.y"
10644  {
10645  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10646  }
10647  break;
10648 
10649  case 547:
10650 
10651 /* Line 1806 of yacc.c */
10652 #line 4493 "parse.y"
10653  {
10654  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node));
10655  }
10656  break;
10657 
10658  case 548:
10659 
10660 /* Line 1806 of yacc.c */
10661 #line 4497 "parse.y"
10662  {
10663  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
10664  }
10665  break;
10666 
10667  case 549:
10668 
10669 /* Line 1806 of yacc.c */
10670 #line 4501 "parse.y"
10671  {
10672  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node));
10673  }
10674  break;
10675 
10676  case 550:
10677 
10678 /* Line 1806 of yacc.c */
10679 #line 4505 "parse.y"
10680  {
10681  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
10682  }
10683  break;
10684 
10685  case 551:
10686 
10687 /* Line 1806 of yacc.c */
10688 #line 4509 "parse.y"
10689  {
10690  (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
10691  }
10692  break;
10693 
10694  case 552:
10695 
10696 /* Line 1806 of yacc.c */
10697 #line 4513 "parse.y"
10698  {
10699  (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
10700  (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyval.node));
10701  }
10702  break;
10703 
10704  case 553:
10705 
10706 /* Line 1806 of yacc.c */
10707 #line 4520 "parse.y"
10708  {
10709  /*%%%*/
10710  yyerror("formal argument cannot be a constant");
10711  (yyval.id) = 0;
10712  /*%
10713  $$ = dispatch1(param_error, $1);
10714  %*/
10715  }
10716  break;
10717 
10718  case 554:
10719 
10720 /* Line 1806 of yacc.c */
10721 #line 4529 "parse.y"
10722  {
10723  /*%%%*/
10724  yyerror("formal argument cannot be an instance variable");
10725  (yyval.id) = 0;
10726  /*%
10727  $$ = dispatch1(param_error, $1);
10728  %*/
10729  }
10730  break;
10731 
10732  case 555:
10733 
10734 /* Line 1806 of yacc.c */
10735 #line 4538 "parse.y"
10736  {
10737  /*%%%*/
10738  yyerror("formal argument cannot be a global variable");
10739  (yyval.id) = 0;
10740  /*%
10741  $$ = dispatch1(param_error, $1);
10742  %*/
10743  }
10744  break;
10745 
10746  case 556:
10747 
10748 /* Line 1806 of yacc.c */
10749 #line 4547 "parse.y"
10750  {
10751  /*%%%*/
10752  yyerror("formal argument cannot be a class variable");
10753  (yyval.id) = 0;
10754  /*%
10755  $$ = dispatch1(param_error, $1);
10756  %*/
10757  }
10758  break;
10759 
10760  case 558:
10761 
10762 /* Line 1806 of yacc.c */
10763 #line 4559 "parse.y"
10764  {
10765  formal_argument(get_id((yyvsp[(1) - (1)].id)));
10766  (yyval.id) = (yyvsp[(1) - (1)].id);
10767  }
10768  break;
10769 
10770  case 559:
10771 
10772 /* Line 1806 of yacc.c */
10773 #line 4566 "parse.y"
10774  {
10775  arg_var(get_id((yyvsp[(1) - (1)].id)));
10776  /*%%%*/
10777  (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
10778  /*%
10779  $$ = get_value($1);
10780  %*/
10781  }
10782  break;
10783 
10784  case 560:
10785 
10786 /* Line 1806 of yacc.c */
10787 #line 4575 "parse.y"
10788  {
10789  ID tid = internal_id();
10790  arg_var(tid);
10791  /*%%%*/
10792  if (dyna_in_block()) {
10793  (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
10794  }
10795  else {
10796  (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
10797  }
10798  (yyval.node) = NEW_ARGS_AUX(tid, 1);
10799  (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
10800  /*%
10801  $$ = dispatch1(mlhs_paren, $2);
10802  %*/
10803  }
10804  break;
10805 
10806  case 562:
10807 
10808 /* Line 1806 of yacc.c */
10809 #line 4601 "parse.y"
10810  {
10811  /*%%%*/
10812  (yyval.node) = (yyvsp[(1) - (3)].node);
10813  (yyval.node)->nd_plen++;
10814  (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
10815  rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
10816  /*%
10817  $$ = rb_ary_push($1, $3);
10818  %*/
10819  }
10820  break;
10821 
10822  case 563:
10823 
10824 /* Line 1806 of yacc.c */
10825 #line 4615 "parse.y"
10826  {
10827  arg_var(formal_argument(get_id((yyvsp[(1) - (1)].id))));
10828  (yyval.id) = (yyvsp[(1) - (1)].id);
10829  }
10830  break;
10831 
10832  case 564:
10833 
10834 /* Line 1806 of yacc.c */
10835 #line 4622 "parse.y"
10836  {
10837  (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
10838  /*%%%*/
10839  (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10840  /*%
10841  $$ = rb_assoc_new($$, $2);
10842  %*/
10843  }
10844  break;
10845 
10846  case 565:
10847 
10848 /* Line 1806 of yacc.c */
10849 #line 4631 "parse.y"
10850  {
10851  (yyval.node) = assignable((yyvsp[(1) - (1)].id), (NODE *)-1);
10852  /*%%%*/
10853  (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10854  /*%
10855  $$ = rb_assoc_new($$, 0);
10856  %*/
10857  }
10858  break;
10859 
10860  case 566:
10861 
10862 /* Line 1806 of yacc.c */
10863 #line 4642 "parse.y"
10864  {
10865  (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
10866  /*%%%*/
10867  (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10868  /*%
10869  $$ = rb_assoc_new($$, $2);
10870  %*/
10871  }
10872  break;
10873 
10874  case 567:
10875 
10876 /* Line 1806 of yacc.c */
10877 #line 4651 "parse.y"
10878  {
10879  (yyval.node) = assignable((yyvsp[(1) - (1)].id), (NODE *)-1);
10880  /*%%%*/
10881  (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10882  /*%
10883  $$ = rb_assoc_new($$, 0);
10884  %*/
10885  }
10886  break;
10887 
10888  case 568:
10889 
10890 /* Line 1806 of yacc.c */
10891 #line 4662 "parse.y"
10892  {
10893  /*%%%*/
10894  (yyval.node) = (yyvsp[(1) - (1)].node);
10895  /*%
10896  $$ = rb_ary_new3(1, $1);
10897  %*/
10898  }
10899  break;
10900 
10901  case 569:
10902 
10903 /* Line 1806 of yacc.c */
10904 #line 4670 "parse.y"
10905  {
10906  /*%%%*/
10907  NODE *kws = (yyvsp[(1) - (3)].node);
10908 
10909  while (kws->nd_next) {
10910  kws = kws->nd_next;
10911  }
10912  kws->nd_next = (yyvsp[(3) - (3)].node);
10913  (yyval.node) = (yyvsp[(1) - (3)].node);
10914  /*%
10915  $$ = rb_ary_push($1, $3);
10916  %*/
10917  }
10918  break;
10919 
10920  case 570:
10921 
10922 /* Line 1806 of yacc.c */
10923 #line 4687 "parse.y"
10924  {
10925  /*%%%*/
10926  (yyval.node) = (yyvsp[(1) - (1)].node);
10927  /*%
10928  $$ = rb_ary_new3(1, $1);
10929  %*/
10930  }
10931  break;
10932 
10933  case 571:
10934 
10935 /* Line 1806 of yacc.c */
10936 #line 4695 "parse.y"
10937  {
10938  /*%%%*/
10939  NODE *kws = (yyvsp[(1) - (3)].node);
10940 
10941  while (kws->nd_next) {
10942  kws = kws->nd_next;
10943  }
10944  kws->nd_next = (yyvsp[(3) - (3)].node);
10945  (yyval.node) = (yyvsp[(1) - (3)].node);
10946  /*%
10947  $$ = rb_ary_push($1, $3);
10948  %*/
10949  }
10950  break;
10951 
10952  case 574:
10953 
10954 /* Line 1806 of yacc.c */
10955 #line 4715 "parse.y"
10956  {
10957  shadowing_lvar(get_id((yyvsp[(2) - (2)].id)));
10958  (yyval.id) = (yyvsp[(2) - (2)].id);
10959  }
10960  break;
10961 
10962  case 575:
10963 
10964 /* Line 1806 of yacc.c */
10965 #line 4720 "parse.y"
10966  {
10967  (yyval.id) = internal_id();
10968  }
10969  break;
10970 
10971  case 576:
10972 
10973 /* Line 1806 of yacc.c */
10974 #line 4726 "parse.y"
10975  {
10976  arg_var(get_id((yyvsp[(1) - (3)].id)));
10977  (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10978  /*%%%*/
10979  (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10980  /*%
10981  $$ = rb_assoc_new($$, $3);
10982  %*/
10983  }
10984  break;
10985 
10986  case 577:
10987 
10988 /* Line 1806 of yacc.c */
10989 #line 4738 "parse.y"
10990  {
10991  arg_var(get_id((yyvsp[(1) - (3)].id)));
10992  (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10993  /*%%%*/
10994  (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10995  /*%
10996  $$ = rb_assoc_new($$, $3);
10997  %*/
10998  }
10999  break;
11000 
11001  case 578:
11002 
11003 /* Line 1806 of yacc.c */
11004 #line 4750 "parse.y"
11005  {
11006  /*%%%*/
11007  (yyval.node) = (yyvsp[(1) - (1)].node);
11008  /*%
11009  $$ = rb_ary_new3(1, $1);
11010  %*/
11011  }
11012  break;
11013 
11014  case 579:
11015 
11016 /* Line 1806 of yacc.c */
11017 #line 4758 "parse.y"
11018  {
11019  /*%%%*/
11020  NODE *opts = (yyvsp[(1) - (3)].node);
11021 
11022  while (opts->nd_next) {
11023  opts = opts->nd_next;
11024  }
11025  opts->nd_next = (yyvsp[(3) - (3)].node);
11026  (yyval.node) = (yyvsp[(1) - (3)].node);
11027  /*%
11028  $$ = rb_ary_push($1, $3);
11029  %*/
11030  }
11031  break;
11032 
11033  case 580:
11034 
11035 /* Line 1806 of yacc.c */
11036 #line 4774 "parse.y"
11037  {
11038  /*%%%*/
11039  (yyval.node) = (yyvsp[(1) - (1)].node);
11040  /*%
11041  $$ = rb_ary_new3(1, $1);
11042  %*/
11043  }
11044  break;
11045 
11046  case 581:
11047 
11048 /* Line 1806 of yacc.c */
11049 #line 4782 "parse.y"
11050  {
11051  /*%%%*/
11052  NODE *opts = (yyvsp[(1) - (3)].node);
11053 
11054  while (opts->nd_next) {
11055  opts = opts->nd_next;
11056  }
11057  opts->nd_next = (yyvsp[(3) - (3)].node);
11058  (yyval.node) = (yyvsp[(1) - (3)].node);
11059  /*%
11060  $$ = rb_ary_push($1, $3);
11061  %*/
11062  }
11063  break;
11064 
11065  case 584:
11066 
11067 /* Line 1806 of yacc.c */
11068 #line 4802 "parse.y"
11069  {
11070  /*%%%*/
11071  if (!is_local_id((yyvsp[(2) - (2)].id)))
11072  yyerror("rest argument must be local variable");
11073  /*% %*/
11074  arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
11075  /*%%%*/
11076  (yyval.id) = (yyvsp[(2) - (2)].id);
11077  /*%
11078  $$ = dispatch1(rest_param, $2);
11079  %*/
11080  }
11081  break;
11082 
11083  case 585:
11084 
11085 /* Line 1806 of yacc.c */
11086 #line 4815 "parse.y"
11087  {
11088  /*%%%*/
11089  (yyval.id) = internal_id();
11090  arg_var((yyval.id));
11091  /*%
11092  $$ = dispatch1(rest_param, Qnil);
11093  %*/
11094  }
11095  break;
11096 
11097  case 588:
11098 
11099 /* Line 1806 of yacc.c */
11100 #line 4830 "parse.y"
11101  {
11102  /*%%%*/
11103  if (!is_local_id((yyvsp[(2) - (2)].id)))
11104  yyerror("block argument must be local variable");
11105  else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
11106  yyerror("duplicated block argument name");
11107  /*% %*/
11108  arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
11109  /*%%%*/
11110  (yyval.id) = (yyvsp[(2) - (2)].id);
11111  /*%
11112  $$ = dispatch1(blockarg, $2);
11113  %*/
11114  }
11115  break;
11116 
11117  case 589:
11118 
11119 /* Line 1806 of yacc.c */
11120 #line 4847 "parse.y"
11121  {
11122  (yyval.id) = (yyvsp[(2) - (2)].id);
11123  }
11124  break;
11125 
11126  case 590:
11127 
11128 /* Line 1806 of yacc.c */
11129 #line 4851 "parse.y"
11130  {
11131  /*%%%*/
11132  (yyval.id) = 0;
11133  /*%
11134  $$ = Qundef;
11135  %*/
11136  }
11137  break;
11138 
11139  case 591:
11140 
11141 /* Line 1806 of yacc.c */
11142 #line 4861 "parse.y"
11143  {
11144  /*%%%*/
11145  value_expr((yyvsp[(1) - (1)].node));
11146  (yyval.node) = (yyvsp[(1) - (1)].node);
11147  if (!(yyval.node)) (yyval.node) = NEW_NIL();
11148  /*%
11149  $$ = $1;
11150  %*/
11151  }
11152  break;
11153 
11154  case 592:
11155 
11156 /* Line 1806 of yacc.c */
11157 #line 4870 "parse.y"
11158  {lex_state = EXPR_BEG;}
11159  break;
11160 
11161  case 593:
11162 
11163 /* Line 1806 of yacc.c */
11164 #line 4871 "parse.y"
11165  {
11166  /*%%%*/
11167  if ((yyvsp[(3) - (4)].node) == 0) {
11168  yyerror("can't define singleton method for ().");
11169  }
11170  else {
11171  switch (nd_type((yyvsp[(3) - (4)].node))) {
11172  case NODE_STR:
11173  case NODE_DSTR:
11174  case NODE_XSTR:
11175  case NODE_DXSTR:
11176  case NODE_DREGX:
11177  case NODE_LIT:
11178  case NODE_ARRAY:
11179  case NODE_ZARRAY:
11180  yyerror("can't define singleton method for literals");
11181  default:
11182  value_expr((yyvsp[(3) - (4)].node));
11183  break;
11184  }
11185  }
11186  (yyval.node) = (yyvsp[(3) - (4)].node);
11187  /*%
11188  $$ = dispatch1(paren, $3);
11189  %*/
11190  }
11191  break;
11192 
11193  case 595:
11194 
11195 /* Line 1806 of yacc.c */
11196 #line 4901 "parse.y"
11197  {
11198  /*%%%*/
11199  (yyval.node) = (yyvsp[(1) - (2)].node);
11200  /*%
11201  $$ = dispatch1(assoclist_from_args, $1);
11202  %*/
11203  }
11204  break;
11205 
11206  case 597:
11207 
11208 /* Line 1806 of yacc.c */
11209 #line 4918 "parse.y"
11210  {
11211  /*%%%*/
11212  (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
11213  /*%
11214  $$ = rb_ary_push($1, $3);
11215  %*/
11216  }
11217  break;
11218 
11219  case 598:
11220 
11221 /* Line 1806 of yacc.c */
11222 #line 4928 "parse.y"
11223  {
11224  /*%%%*/
11225  if (nd_type((yyvsp[(1) - (3)].node)) == NODE_STR) {
11226  nd_set_type((yyvsp[(1) - (3)].node), NODE_LIT);
11227  (yyvsp[(1) - (3)].node)->nd_lit = rb_fstring((yyvsp[(1) - (3)].node)->nd_lit);
11228  }
11229  (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
11230  /*%
11231  $$ = dispatch2(assoc_new, $1, $3);
11232  %*/
11233  }
11234  break;
11235 
11236  case 599:
11237 
11238 /* Line 1806 of yacc.c */
11239 #line 4940 "parse.y"
11240  {
11241  /*%%%*/
11242  (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
11243  /*%
11244  $$ = dispatch2(assoc_new, $1, $2);
11245  %*/
11246  }
11247  break;
11248 
11249  case 600:
11250 
11251 /* Line 1806 of yacc.c */
11252 #line 4948 "parse.y"
11253  {
11254  /*%%%*/
11255  (yyval.node) = list_append(NEW_LIST(0), (yyvsp[(2) - (2)].node));
11256  /*%
11257  $$ = dispatch1(assoc_splat, $2);
11258  %*/
11259  }
11260  break;
11261 
11262  case 622:
11263 
11264 /* Line 1806 of yacc.c */
11265 #line 5006 "parse.y"
11266  {yyerrok;}
11267  break;
11268 
11269  case 625:
11270 
11271 /* Line 1806 of yacc.c */
11272 #line 5011 "parse.y"
11273  {yyerrok;}
11274  break;
11275 
11276  case 626:
11277 
11278 /* Line 1806 of yacc.c */
11279 #line 5015 "parse.y"
11280  {
11281  /*%%%*/
11282  (yyval.node) = 0;
11283  /*%
11284  $$ = Qundef;
11285  %*/
11286  }
11287  break;
11288 
11289 
11290 
11291 /* Line 1806 of yacc.c */
11292 #line 11291 "parse.c"
11293  default: break;
11294  }
11295  /* User semantic actions sometimes alter yychar, and that requires
11296  that yytoken be updated with the new translation. We take the
11297  approach of translating immediately before every use of yytoken.
11298  One alternative is translating here after every semantic action,
11299  but that translation would be missed if the semantic action invokes
11300  YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
11301  if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
11302  incorrect destructor might then be invoked immediately. In the
11303  case of YYERROR or YYBACKUP, subsequent parser actions might lead
11304  to an incorrect destructor call or verbose syntax error message
11305  before the lookahead is translated. */
11306  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
11307 
11308  YYPOPSTACK (yylen);
11309  yylen = 0;
11310  YY_STACK_PRINT (yyss, yyssp);
11311 
11312  *++yyvsp = yyval;
11313 
11314  /* Now `shift' the result of the reduction. Determine what state
11315  that goes to, based on the state we popped back to and the rule
11316  number reduced by. */
11317 
11318  yyn = yyr1[yyn];
11319 
11320  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
11321  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
11322  yystate = yytable[yystate];
11323  else
11324  yystate = yydefgoto[yyn - YYNTOKENS];
11325 
11326  goto yynewstate;
11327 
11328 
11329 /*------------------------------------.
11330 | yyerrlab -- here on detecting error |
11331 `------------------------------------*/
11332 yyerrlab:
11333  /* Make sure we have latest lookahead translation. See comments at
11334  user semantic actions for why this is necessary. */
11335  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
11336 
11337  /* If not already recovering from an error, report this error. */
11338  if (!yyerrstatus)
11339  {
11340  ++yynerrs;
11341 #if ! YYERROR_VERBOSE
11342  parser_yyerror (parser, YY_("syntax error"));
11343 #else
11344 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
11345  yyssp, yytoken)
11346  {
11347  char const *yymsgp = YY_("syntax error");
11348  int yysyntax_error_status;
11349  yysyntax_error_status = YYSYNTAX_ERROR;
11350  if (yysyntax_error_status == 0)
11351  yymsgp = yymsg;
11352  else if (yysyntax_error_status == 1)
11353  {
11354  if (yymsg != yymsgbuf)
11355  YYSTACK_FREE (yymsg);
11356  yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
11357  if (!yymsg)
11358  {
11359  yymsg = yymsgbuf;
11360  yymsg_alloc = sizeof yymsgbuf;
11361  yysyntax_error_status = 2;
11362  }
11363  else
11364  {
11365  yysyntax_error_status = YYSYNTAX_ERROR;
11366  yymsgp = yymsg;
11367  }
11368  }
11369  parser_yyerror (parser, yymsgp);
11370  if (yysyntax_error_status == 2)
11371  goto yyexhaustedlab;
11372  }
11373 # undef YYSYNTAX_ERROR
11374 #endif
11375  }
11376 
11377 
11378 
11379  if (yyerrstatus == 3)
11380  {
11381  /* If just tried and failed to reuse lookahead token after an
11382  error, discard it. */
11383 
11384  if (yychar <= YYEOF)
11385  {
11386  /* Return failure if at end of input. */
11387  if (yychar == YYEOF)
11388  YYABORT;
11389  }
11390  else
11391  {
11392  yydestruct ("Error: discarding",
11393  yytoken, &yylval, parser);
11394  yychar = YYEMPTY;
11395  }
11396  }
11397 
11398  /* Else will try to reuse lookahead token after shifting the error
11399  token. */
11400  goto yyerrlab1;
11401 
11402 
11403 /*---------------------------------------------------.
11404 | yyerrorlab -- error raised explicitly by YYERROR. |
11405 `---------------------------------------------------*/
11406 yyerrorlab:
11407 
11408  /* Pacify compilers like GCC when the user code never invokes
11409  YYERROR and the label yyerrorlab therefore never appears in user
11410  code. */
11411  if (/*CONSTCOND*/ 0)
11412  goto yyerrorlab;
11413 
11414  /* Do not reclaim the symbols of the rule which action triggered
11415  this YYERROR. */
11416  YYPOPSTACK (yylen);
11417  yylen = 0;
11418  YY_STACK_PRINT (yyss, yyssp);
11419  yystate = *yyssp;
11420  goto yyerrlab1;
11421 
11422 
11423 /*-------------------------------------------------------------.
11424 | yyerrlab1 -- common code for both syntax error and YYERROR. |
11425 `-------------------------------------------------------------*/
11426 yyerrlab1:
11427  yyerrstatus = 3; /* Each real token shifted decrements this. */
11428 
11429  for (;;)
11430  {
11431  yyn = yypact[yystate];
11432  if (!yypact_value_is_default (yyn))
11433  {
11434  yyn += YYTERROR;
11435  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
11436  {
11437  yyn = yytable[yyn];
11438  if (0 < yyn)
11439  break;
11440  }
11441  }
11442 
11443  /* Pop the current state because it cannot handle the error token. */
11444  if (yyssp == yyss)
11445  YYABORT;
11446 
11447 
11448  yydestruct ("Error: popping",
11449  yystos[yystate], yyvsp, parser);
11450  YYPOPSTACK (1);
11451  yystate = *yyssp;
11452  YY_STACK_PRINT (yyss, yyssp);
11453  }
11454 
11455  *++yyvsp = yylval;
11456 
11457 
11458  /* Shift the error token. */
11459  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
11460 
11461  yystate = yyn;
11462  goto yynewstate;
11463 
11464 
11465 /*-------------------------------------.
11466 | yyacceptlab -- YYACCEPT comes here. |
11467 `-------------------------------------*/
11468 yyacceptlab:
11469  yyresult = 0;
11470  goto yyreturn;
11471 
11472 /*-----------------------------------.
11473 | yyabortlab -- YYABORT comes here. |
11474 `-----------------------------------*/
11475 yyabortlab:
11476  yyresult = 1;
11477  goto yyreturn;
11478 
11479 #if !defined(yyoverflow) || YYERROR_VERBOSE
11480 /*-------------------------------------------------.
11481 | yyexhaustedlab -- memory exhaustion comes here. |
11482 `-------------------------------------------------*/
11483 yyexhaustedlab:
11484  parser_yyerror (parser, YY_("memory exhausted"));
11485  yyresult = 2;
11486  /* Fall through. */
11487 #endif
11488 
11489 yyreturn:
11490  if (yychar != YYEMPTY)
11491  {
11492  /* Make sure we have latest lookahead translation. See comments at
11493  user semantic actions for why this is necessary. */
11494  yytoken = YYTRANSLATE (yychar);
11495  yydestruct ("Cleanup: discarding lookahead",
11496  yytoken, &yylval, parser);
11497  }
11498  /* Do not reclaim the symbols of the rule which action triggered
11499  this YYABORT or YYACCEPT. */
11500  YYPOPSTACK (yylen);
11501  YY_STACK_PRINT (yyss, yyssp);
11502  while (yyssp != yyss)
11503  {
11504  yydestruct ("Cleanup: popping",
11505  yystos[*yyssp], yyvsp, parser);
11506  YYPOPSTACK (1);
11507  }
11508 #ifndef yyoverflow
11509  if (yyss != yyssa)
11510  YYSTACK_FREE (yyss);
11511 #endif
11512 #if YYERROR_VERBOSE
11513  if (yymsg != yymsgbuf)
11514  YYSTACK_FREE (yymsg);
11515 #endif
11516  /* Make sure YYID is used. */
11517  return YYID (yyresult);
11518 }
11519 
11520 
11521 
11522 /* Line 2067 of yacc.c */
11523 #line 5023 "parse.y"
11524 
11525 # undef parser
11526 # undef yylex
11527 # undef yylval
11528 # define yylval (*((YYSTYPE*)(parser->parser_yylval)))
11529 
11530 static int parser_regx_options(struct parser_params*);
11531 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
11532 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
11533 static int parser_parse_string(struct parser_params*,NODE*);
11534 static int parser_here_document(struct parser_params*,NODE*);
11535 
11536 
11537 # define nextc() parser_nextc(parser)
11538 # define pushback(c) parser_pushback(parser, (c))
11539 # define newtok() parser_newtok(parser)
11540 # define tokspace(n) parser_tokspace(parser, (n))
11541 # define tokadd(c) parser_tokadd(parser, (c))
11542 # define tok_hex(numlen) parser_tok_hex(parser, (numlen))
11543 # define read_escape(flags,e) parser_read_escape(parser, (flags), (e))
11544 # define tokadd_escape(e) parser_tokadd_escape(parser, (e))
11545 # define regx_options() parser_regx_options(parser)
11546 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,(f),(t),(p),(n),(e))
11547 # define parse_string(n) parser_parse_string(parser,(n))
11548 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, (c), (enc))
11549 # define here_document(n) parser_here_document(parser,(n))
11550 # define heredoc_identifier() parser_heredoc_identifier(parser)
11551 # define heredoc_restore(n) parser_heredoc_restore(parser,(n))
11552 # define whole_match_p(e,l,i) parser_whole_match_p(parser,(e),(l),(i))
11553 # define number_literal_suffix(f) parser_number_literal_suffix(parser, (f))
11554 # define set_number_literal(v, t, f) parser_set_number_literal(parser, (v), (t), (f))
11555 # define set_integer_literal(v, f) parser_set_integer_literal(parser, (v), (f))
11556 
11557 #ifndef RIPPER
11558 # define set_yylval_str(x) (yylval.node = NEW_STR(x))
11559 # define set_yylval_num(x) (yylval.num = (x))
11560 # define set_yylval_id(x) (yylval.id = (x))
11561 # define set_yylval_name(x) (yylval.id = (x))
11562 # define set_yylval_literal(x) (yylval.node = NEW_LIT(x))
11563 # define set_yylval_node(x) (yylval.node = (x))
11564 # define yylval_id() (yylval.id)
11565 #else
11566 static inline VALUE
11567 ripper_yylval_id(ID x)
11568 {
11569  return (VALUE)NEW_LASGN(x, ID2SYM(x));
11570 }
11571 # define set_yylval_str(x) (void)(x)
11572 # define set_yylval_num(x) (void)(x)
11573 # define set_yylval_id(x) (void)(x)
11574 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
11575 # define set_yylval_literal(x) (void)(x)
11576 # define set_yylval_node(x) (void)(x)
11577 # define yylval_id() yylval.id
11578 #endif
11579 
11580 #ifndef RIPPER
11581 #define ripper_flush(p) (void)(p)
11582 #else
11583 #define ripper_flush(p) ((p)->tokp = (p)->parser_lex_p)
11584 
11585 #define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
11586 
11587 static int
11588 ripper_has_scan_event(struct parser_params *parser)
11589 {
11590 
11591  if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
11592  return lex_p > parser->tokp;
11593 }
11594 
11595 static VALUE
11596 ripper_scan_event_val(struct parser_params *parser, int t)
11597 {
11598  VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
11599  VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
11600  ripper_flush(parser);
11601  return rval;
11602 }
11603 
11604 static void
11605 ripper_dispatch_scan_event(struct parser_params *parser, int t)
11606 {
11607  if (!ripper_has_scan_event(parser)) return;
11608  yylval_rval = ripper_scan_event_val(parser, t);
11609 }
11610 
11611 static void
11612 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
11613 {
11614  if (!ripper_has_scan_event(parser)) return;
11615  (void)ripper_scan_event_val(parser, t);
11616 }
11617 
11618 static void
11619 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
11620 {
11621  int saved_line = ruby_sourceline;
11622  const char *saved_tokp = parser->tokp;
11623 
11624  ruby_sourceline = parser->delayed_line;
11625  parser->tokp = lex_pbeg + parser->delayed_col;
11626  yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
11627  parser->delayed = Qnil;
11628  ruby_sourceline = saved_line;
11629  parser->tokp = saved_tokp;
11630 }
11631 #endif /* RIPPER */
11632 
11633 #include "ruby/regex.h"
11634 #include "ruby/util.h"
11635 
11636 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
11637  since ours (we hope) works properly with all combinations of
11638  machines, compilers, `char' and `unsigned char' argument types.
11639  (Per Bothner suggested the basic approach.) */
11640 #undef SIGN_EXTEND_CHAR
11641 #if __STDC__
11642 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
11643 #else /* not __STDC__ */
11644 /* As in Harbison and Steele. */
11645 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
11646 #endif
11647 
11648 #define parser_encoding_name() (current_enc->name)
11649 #define parser_mbclen() mbclen((lex_p-1),lex_pend,current_enc)
11650 #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,current_enc)
11651 #define is_identchar(p,e,enc) (rb_enc_isalnum((unsigned char)(*(p)),(enc)) || (*(p)) == '_' || !ISASCII(*(p)))
11652 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,current_enc))
11653 
11654 #define parser_isascii() ISASCII(*(lex_p-1))
11655 
11656 #ifndef RIPPER
11657 static int
11658 token_info_get_column(struct parser_params *parser, const char *token)
11659 {
11660  int column = 1;
11661  const char *p, *pend = lex_p - strlen(token);
11662  for (p = lex_pbeg; p < pend; p++) {
11663  if (*p == '\t') {
11664  column = (((column - 1) / 8) + 1) * 8;
11665  }
11666  column++;
11667  }
11668  return column;
11669 }
11670 
11671 static int
11672 token_info_has_nonspaces(struct parser_params *parser, const char *token)
11673 {
11674  const char *p, *pend = lex_p - strlen(token);
11675  for (p = lex_pbeg; p < pend; p++) {
11676  if (*p != ' ' && *p != '\t') {
11677  return 1;
11678  }
11679  }
11680  return 0;
11681 }
11682 
11683 #undef token_info_push
11684 static void
11685 token_info_push(struct parser_params *parser, const char *token)
11686 {
11687  token_info *ptinfo;
11688 
11689  if (!parser->parser_token_info_enabled) return;
11690  ptinfo = ALLOC(token_info);
11691  ptinfo->token = token;
11692  ptinfo->linenum = ruby_sourceline;
11693  ptinfo->column = token_info_get_column(parser, token);
11694  ptinfo->nonspc = token_info_has_nonspaces(parser, token);
11695  ptinfo->next = parser->parser_token_info;
11696 
11697  parser->parser_token_info = ptinfo;
11698 }
11699 
11700 #undef token_info_pop
11701 static void
11702 token_info_pop(struct parser_params *parser, const char *token)
11703 {
11704  int linenum;
11705  token_info *ptinfo = parser->parser_token_info;
11706 
11707  if (!ptinfo) return;
11708  parser->parser_token_info = ptinfo->next;
11709  if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */
11710  goto finish;
11711  }
11712  linenum = ruby_sourceline;
11713  if (linenum == ptinfo->linenum) { /* SKIP */
11714  goto finish;
11715  }
11716  if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */
11717  goto finish;
11718  }
11719  if (parser->parser_token_info_enabled) {
11721  "mismatched indentations at '%s' with '%s' at %d",
11722  token, ptinfo->token, ptinfo->linenum);
11723  }
11724 
11725  finish:
11726  xfree(ptinfo);
11727 }
11728 #endif /* RIPPER */
11729 
11730 static int
11731 parser_yyerror(struct parser_params *parser, const char *msg)
11732 {
11733 #ifndef RIPPER
11734  const int max_line_margin = 30;
11735  const char *p, *pe;
11736  char *buf;
11737  long len;
11738  int i;
11739 
11740  compile_error(PARSER_ARG "%s", msg);
11741  p = lex_p;
11742  while (lex_pbeg <= p) {
11743  if (*p == '\n') break;
11744  p--;
11745  }
11746  p++;
11747 
11748  pe = lex_p;
11749  while (pe < lex_pend) {
11750  if (*pe == '\n') break;
11751  pe++;
11752  }
11753 
11754  len = pe - p;
11755  if (len > 4) {
11756  char *p2;
11757  const char *pre = "", *post = "";
11758 
11759  if (len > max_line_margin * 2 + 10) {
11760  if (lex_p - p > max_line_margin) {
11761  p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
11762  pre = "...";
11763  }
11764  if (pe - lex_p > max_line_margin) {
11765  pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
11766  post = "...";
11767  }
11768  len = pe - p;
11769  }
11770  buf = ALLOCA_N(char, len+2);
11771  MEMCPY(buf, p, char, len);
11772  buf[len] = '\0';
11773  rb_compile_error_with_enc(NULL, 0, (void *)current_enc, "%s%s%s", pre, buf, post);
11774 
11775  i = (int)(lex_p - p);
11776  p2 = buf; pe = buf + len;
11777 
11778  while (p2 < pe) {
11779  if (*p2 != '\t') *p2 = ' ';
11780  p2++;
11781  }
11782  buf[i] = '^';
11783  buf[i+1] = '\0';
11784  rb_compile_error_append("%s%s", pre, buf);
11785  }
11786 #else
11787  dispatch1(parse_error, STR_NEW2(msg));
11788 #endif /* !RIPPER */
11789  return 0;
11790 }
11791 
11792 static void parser_prepare(struct parser_params *parser);
11793 
11794 #ifndef RIPPER
11795 static VALUE
11797 {
11798  ID script_lines;
11799  CONST_ID(script_lines, "SCRIPT_LINES__");
11800  if (rb_const_defined_at(rb_cObject, script_lines)) {
11801  VALUE hash = rb_const_get_at(rb_cObject, script_lines);
11802  if (RB_TYPE_P(hash, T_HASH)) {
11803  VALUE lines = rb_ary_new();
11804  rb_hash_aset(hash, fname, lines);
11805  return lines;
11806  }
11807  }
11808  return 0;
11809 }
11810 
11811 static VALUE
11812 coverage(VALUE fname, int n)
11813 {
11814  VALUE coverages = rb_get_coverages();
11815  if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
11816  VALUE lines = rb_ary_new2(n);
11817  int i;
11818  RBASIC_CLEAR_CLASS(lines);
11819  for (i = 0; i < n; i++) RARRAY_ASET(lines, i, Qnil);
11820  RARRAY(lines)->as.heap.len = n;
11821  rb_hash_aset(coverages, fname, lines);
11822  return lines;
11823  }
11824  return 0;
11825 }
11826 
11827 static int
11829 {
11830  return strcmp(ruby_sourcefile, "-e") == 0;
11831 }
11832 
11833 static VALUE
11835 {
11836  int n;
11837  NODE *tree;
11838  struct parser_params *parser = (struct parser_params *)arg;
11839 
11840  if (!compile_for_eval && rb_safe_level() == 0) {
11842  if (ruby_debug_lines && ruby_sourceline > 0) {
11843  VALUE str = STR_NEW0();
11844  n = ruby_sourceline;
11845  do {
11847  } while (--n);
11848  }
11849 
11850  if (!e_option_supplied(parser)) {
11852  }
11853  }
11854  parser->last_cr_line = ruby_sourceline - 1;
11855 
11856  parser_prepare(parser);
11857  deferred_nodes = 0;
11858 #ifndef RIPPER
11860 #endif
11861 #ifndef RIPPER
11864  parser->parser_ruby_sourceline);
11865  }
11866 #endif
11867  n = yyparse((void*)parser);
11868 #ifndef RIPPER
11871  parser->parser_ruby_sourceline);
11872  }
11873 #endif
11874  ruby_debug_lines = 0;
11875  ruby_coverage = 0;
11876  compile_for_eval = 0;
11877 
11878  lex_strterm = 0;
11879  lex_p = lex_pbeg = lex_pend = 0;
11880  lex_lastline = lex_nextline = 0;
11881  if (parser->nerr) {
11882  return 0;
11883  }
11884  tree = ruby_eval_tree;
11885  if (!tree) {
11886  tree = NEW_NIL();
11887  }
11888  else if (ruby_eval_tree_begin) {
11889  tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
11890  }
11891  return (VALUE)tree;
11892 }
11893 
11894 static NODE*
11895 yycompile(struct parser_params *parser, VALUE fname, int line)
11896 {
11898  ruby_sourcefile = RSTRING_PTR(fname);
11899  ruby_sourceline = line - 1;
11900  return (NODE *)rb_suppress_tracing(yycompile0, (VALUE)parser);
11901 }
11902 #endif /* !RIPPER */
11903 
11904 static rb_encoding *
11906 {
11907  rb_encoding *enc = rb_enc_get(s);
11908  if (!rb_enc_asciicompat(enc)) {
11909  rb_raise(rb_eArgError, "invalid source encoding");
11910  }
11911  return enc;
11912 }
11913 
11914 static VALUE
11915 lex_get_str(struct parser_params *parser, VALUE s)
11916 {
11917  char *beg, *end, *pend;
11919 
11920  beg = RSTRING_PTR(s);
11921  if (lex_gets_ptr) {
11922  if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
11923  beg += lex_gets_ptr;
11924  }
11925  pend = RSTRING_PTR(s) + RSTRING_LEN(s);
11926  end = beg;
11927  while (end < pend) {
11928  if (*end++ == '\n') break;
11929  }
11930  lex_gets_ptr = end - RSTRING_PTR(s);
11931  return rb_enc_str_new(beg, end - beg, enc);
11932 }
11933 
11934 static VALUE
11936 {
11937  VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
11938  if (NIL_P(line)) return line;
11940 #ifndef RIPPER
11941  if (ruby_debug_lines) {
11944  }
11945  if (ruby_coverage) {
11947  }
11948 #endif
11949  return line;
11950 }
11951 
11952 #ifdef RIPPER
11954 #else
11956 
11957 static NODE*
11958 parser_compile_string(volatile VALUE vparser, VALUE fname, VALUE s, int line)
11959 {
11960  struct parser_params *parser;
11961  NODE *node;
11962 
11963  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11965  lex_gets_ptr = 0;
11966  lex_input = s;
11967  lex_pbeg = lex_p = lex_pend = 0;
11969 
11970  node = yycompile(parser, fname, line);
11971  RB_GC_GUARD(vparser); /* prohibit tail call optimization */
11972 
11973  return node;
11974 }
11975 
11976 NODE*
11977 rb_compile_string(const char *f, VALUE s, int line)
11978 {
11981 }
11982 
11983 NODE*
11984 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11985 {
11986  return rb_parser_compile_string_path(vparser, rb_filesystem_str_new_cstr(f), s, line);
11987 }
11988 
11989 NODE*
11990 rb_parser_compile_string_path(volatile VALUE vparser, VALUE f, VALUE s, int line)
11991 {
11993  return parser_compile_string(vparser, f, s, line);
11994 }
11995 
11996 NODE*
11997 rb_compile_cstr(const char *f, const char *s, int len, int line)
11998 {
11999  VALUE str = rb_str_new(s, len);
12001 }
12002 
12003 NODE*
12004 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
12005 {
12006  VALUE str = rb_str_new(s, len);
12007  return parser_compile_string(vparser, rb_filesystem_str_new_cstr(f), str, line);
12008 }
12009 
12010 static VALUE
12011 lex_io_gets(struct parser_params *parser, VALUE io)
12012 {
12013  return rb_io_gets(io);
12014 }
12015 
12016 NODE*
12017 rb_compile_file(const char *f, VALUE file, int start)
12018 {
12019  VALUE volatile vparser = rb_parser_new();
12020 
12021  return rb_parser_compile_file(vparser, f, file, start);
12022 }
12023 
12024 NODE*
12025 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
12026 {
12027  return rb_parser_compile_file_path(vparser, rb_filesystem_str_new_cstr(f), file, start);
12028 }
12029 
12030 NODE*
12031 rb_parser_compile_file_path(volatile VALUE vparser, VALUE fname, VALUE file, int start)
12032 {
12033  struct parser_params *parser;
12034  NODE *node;
12035 
12036  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
12038  lex_input = file;
12039  lex_pbeg = lex_p = lex_pend = 0;
12041 
12042  node = yycompile(parser, fname, start);
12043  RB_GC_GUARD(vparser); /* prohibit tail call optimization */
12044 
12045  return node;
12046 }
12047 #endif /* !RIPPER */
12048 
12049 #define STR_FUNC_ESCAPE 0x01
12050 #define STR_FUNC_EXPAND 0x02
12051 #define STR_FUNC_REGEXP 0x04
12052 #define STR_FUNC_QWORDS 0x08
12053 #define STR_FUNC_SYMBOL 0x10
12054 #define STR_FUNC_INDENT 0x20
12055 
12057  str_squote = (0),
12065 };
12066 
12067 static VALUE
12068 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
12069 {
12070  VALUE str;
12071 
12072  str = rb_enc_str_new(p, n, enc);
12073  if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
12075  }
12076  else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
12078  }
12079  }
12080 
12081  return str;
12082 }
12083 
12084 #define lex_goto_eol(parser) ((parser)->parser_lex_p = (parser)->parser_lex_pend)
12085 #define lex_eol_p() (lex_p >= lex_pend)
12086 #define peek(c) peek_n((c), 0)
12087 #define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n])
12088 
12089 static inline int
12091 {
12092  int c;
12093 
12094  if (lex_p == lex_pend) {
12095  VALUE v = lex_nextline;
12096  lex_nextline = 0;
12097  if (!v) {
12098  if (parser->eofp)
12099  return -1;
12100 
12101  if (!lex_input || NIL_P(v = lex_getline(parser))) {
12102  parser->eofp = Qtrue;
12103  lex_goto_eol(parser);
12104  return -1;
12105  }
12106  }
12107  {
12108 #ifdef RIPPER
12109  if (parser->tokp < lex_pend) {
12110  if (NIL_P(parser->delayed)) {
12111  parser->delayed = rb_str_buf_new(1024);
12112  rb_enc_associate(parser->delayed, current_enc);
12113  rb_str_buf_cat(parser->delayed,
12114  parser->tokp, lex_pend - parser->tokp);
12115  parser->delayed_line = ruby_sourceline;
12116  parser->delayed_col = (int)(parser->tokp - lex_pbeg);
12117  }
12118  else {
12119  rb_str_buf_cat(parser->delayed,
12120  parser->tokp, lex_pend - parser->tokp);
12121  }
12122  }
12123 #endif
12124  if (heredoc_end > 0) {
12126  heredoc_end = 0;
12127  }
12128  ruby_sourceline++;
12129  parser->line_count++;
12130  lex_pbeg = lex_p = RSTRING_PTR(v);
12131  lex_pend = lex_p + RSTRING_LEN(v);
12132  ripper_flush(parser);
12133  lex_lastline = v;
12134  }
12135  }
12136  c = (unsigned char)*lex_p++;
12137  if (c == '\r') {
12138  if (peek('\n')) {
12139  lex_p++;
12140  c = '\n';
12141  }
12142  else if (ruby_sourceline > parser->last_cr_line) {
12143  parser->last_cr_line = ruby_sourceline;
12144  rb_compile_warn(ruby_sourcefile, ruby_sourceline, "encountered \\r in middle of line, treated as a mere space");
12145  }
12146  }
12147 
12148  return c;
12149 }
12150 
12151 static void
12152 parser_pushback(struct parser_params *parser, int c)
12153 {
12154  if (c == -1) return;
12155  lex_p--;
12156  if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
12157  lex_p--;
12158  }
12159 }
12160 
12161 #define was_bol() (lex_p == lex_pbeg + 1)
12162 
12163 #define tokfix() (tokenbuf[tokidx]='\0')
12164 #define tok() tokenbuf
12165 #define toklen() tokidx
12166 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
12167 
12168 static char*
12170 {
12171  tokidx = 0;
12173  if (!tokenbuf) {
12174  toksiz = 60;
12175  tokenbuf = ALLOC_N(char, 60);
12176  }
12177  if (toksiz > 4096) {
12178  toksiz = 60;
12179  REALLOC_N(tokenbuf, char, 60);
12180  }
12181  return tokenbuf;
12182 }
12183 
12184 static char *
12185 parser_tokspace(struct parser_params *parser, int n)
12186 {
12187  tokidx += n;
12188 
12189  if (tokidx >= toksiz) {
12190  do {toksiz *= 2;} while (toksiz < tokidx);
12191  REALLOC_N(tokenbuf, char, toksiz);
12192  }
12193  return &tokenbuf[tokidx-n];
12194 }
12195 
12196 static void
12197 parser_tokadd(struct parser_params *parser, int c)
12198 {
12199  tokenbuf[tokidx++] = (char)c;
12200  if (tokidx >= toksiz) {
12201  toksiz *= 2;
12202  REALLOC_N(tokenbuf, char, toksiz);
12203  }
12204 }
12205 
12206 static int
12207 parser_tok_hex(struct parser_params *parser, size_t *numlen)
12208 {
12209  int c;
12210 
12211  c = scan_hex(lex_p, 2, numlen);
12212  if (!*numlen) {
12213  yyerror("invalid hex escape");
12214  return 0;
12215  }
12216  lex_p += *numlen;
12217  return c;
12218 }
12219 
12220 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
12221 
12222 /* return value is for ?\u3042 */
12223 static int
12225  int string_literal, int symbol_literal, int regexp_literal)
12226 {
12227  /*
12228  * If string_literal is true, then we allow multiple codepoints
12229  * in \u{}, and add the codepoints to the current token.
12230  * Otherwise we're parsing a character literal and return a single
12231  * codepoint without adding it
12232  */
12233 
12234  int codepoint;
12235  size_t numlen;
12236 
12237  if (regexp_literal) { tokadd('\\'); tokadd('u'); }
12238 
12239  if (peek('{')) { /* handle \u{...} form */
12240  do {
12241  if (regexp_literal) { tokadd(*lex_p); }
12242  nextc();
12243  codepoint = scan_hex(lex_p, 6, &numlen);
12244  if (numlen == 0) {
12245  yyerror("invalid Unicode escape");
12246  return 0;
12247  }
12248  if (codepoint > 0x10ffff) {
12249  yyerror("invalid Unicode codepoint (too large)");
12250  return 0;
12251  }
12252  lex_p += numlen;
12253  if (regexp_literal) {
12254  tokcopy((int)numlen);
12255  }
12256  else if (codepoint >= 0x80) {
12257  *encp = rb_utf8_encoding();
12258  if (string_literal) tokaddmbc(codepoint, *encp);
12259  }
12260  else if (string_literal) {
12261  tokadd(codepoint);
12262  }
12263  } while (string_literal && (peek(' ') || peek('\t')));
12264 
12265  if (!peek('}')) {
12266  yyerror("unterminated Unicode escape");
12267  return 0;
12268  }
12269 
12270  if (regexp_literal) { tokadd('}'); }
12271  nextc();
12272  }
12273  else { /* handle \uxxxx form */
12274  codepoint = scan_hex(lex_p, 4, &numlen);
12275  if (numlen < 4) {
12276  yyerror("invalid Unicode escape");
12277  return 0;
12278  }
12279  lex_p += 4;
12280  if (regexp_literal) {
12281  tokcopy(4);
12282  }
12283  else if (codepoint >= 0x80) {
12284  *encp = rb_utf8_encoding();
12285  if (string_literal) tokaddmbc(codepoint, *encp);
12286  }
12287  else if (string_literal) {
12288  tokadd(codepoint);
12289  }
12290  }
12291 
12292  return codepoint;
12293 }
12294 
12295 #define ESCAPE_CONTROL 1
12296 #define ESCAPE_META 2
12297 
12298 static int
12299 parser_read_escape(struct parser_params *parser, int flags,
12300  rb_encoding **encp)
12301 {
12302  int c;
12303  size_t numlen;
12304 
12305  switch (c = nextc()) {
12306  case '\\': /* Backslash */
12307  return c;
12308 
12309  case 'n': /* newline */
12310  return '\n';
12311 
12312  case 't': /* horizontal tab */
12313  return '\t';
12314 
12315  case 'r': /* carriage-return */
12316  return '\r';
12317 
12318  case 'f': /* form-feed */
12319  return '\f';
12320 
12321  case 'v': /* vertical tab */
12322  return '\13';
12323 
12324  case 'a': /* alarm(bell) */
12325  return '\007';
12326 
12327  case 'e': /* escape */
12328  return 033;
12329 
12330  case '0': case '1': case '2': case '3': /* octal constant */
12331  case '4': case '5': case '6': case '7':
12332  pushback(c);
12333  c = scan_oct(lex_p, 3, &numlen);
12334  lex_p += numlen;
12335  return c;
12336 
12337  case 'x': /* hex constant */
12338  c = tok_hex(&numlen);
12339  if (numlen == 0) return 0;
12340  return c;
12341 
12342  case 'b': /* backspace */
12343  return '\010';
12344 
12345  case 's': /* space */
12346  return ' ';
12347 
12348  case 'M':
12349  if (flags & ESCAPE_META) goto eof;
12350  if ((c = nextc()) != '-') {
12351  pushback(c);
12352  goto eof;
12353  }
12354  if ((c = nextc()) == '\\') {
12355  if (peek('u')) goto eof;
12356  return read_escape(flags|ESCAPE_META, encp) | 0x80;
12357  }
12358  else if (c == -1 || !ISASCII(c)) goto eof;
12359  else {
12360  return ((c & 0xff) | 0x80);
12361  }
12362 
12363  case 'C':
12364  if ((c = nextc()) != '-') {
12365  pushback(c);
12366  goto eof;
12367  }
12368  case 'c':
12369  if (flags & ESCAPE_CONTROL) goto eof;
12370  if ((c = nextc())== '\\') {
12371  if (peek('u')) goto eof;
12372  c = read_escape(flags|ESCAPE_CONTROL, encp);
12373  }
12374  else if (c == '?')
12375  return 0177;
12376  else if (c == -1 || !ISASCII(c)) goto eof;
12377  return c & 0x9f;
12378 
12379  eof:
12380  case -1:
12381  yyerror("Invalid escape character syntax");
12382  return '\0';
12383 
12384  default:
12385  return c;
12386  }
12387 }
12388 
12389 static void
12391 {
12392  int len = rb_enc_codelen(c, enc);
12393  rb_enc_mbcput(c, tokspace(len), enc);
12394 }
12395 
12396 static int
12398 {
12399  int c;
12400  int flags = 0;
12401  size_t numlen;
12402 
12403  first:
12404  switch (c = nextc()) {
12405  case '\n':
12406  return 0; /* just ignore */
12407 
12408  case '0': case '1': case '2': case '3': /* octal constant */
12409  case '4': case '5': case '6': case '7':
12410  {
12411  ruby_scan_oct(--lex_p, 3, &numlen);
12412  if (numlen == 0) goto eof;
12413  lex_p += numlen;
12414  tokcopy((int)numlen + 1);
12415  }
12416  return 0;
12417 
12418  case 'x': /* hex constant */
12419  {
12420  tok_hex(&numlen);
12421  if (numlen == 0) return -1;
12422  tokcopy((int)numlen + 2);
12423  }
12424  return 0;
12425 
12426  case 'M':
12427  if (flags & ESCAPE_META) goto eof;
12428  if ((c = nextc()) != '-') {
12429  pushback(c);
12430  goto eof;
12431  }
12432  tokcopy(3);
12433  flags |= ESCAPE_META;
12434  goto escaped;
12435 
12436  case 'C':
12437  if (flags & ESCAPE_CONTROL) goto eof;
12438  if ((c = nextc()) != '-') {
12439  pushback(c);
12440  goto eof;
12441  }
12442  tokcopy(3);
12443  goto escaped;
12444 
12445  case 'c':
12446  if (flags & ESCAPE_CONTROL) goto eof;
12447  tokcopy(2);
12448  flags |= ESCAPE_CONTROL;
12449  escaped:
12450  if ((c = nextc()) == '\\') {
12451  goto first;
12452  }
12453  else if (c == -1) goto eof;
12454  tokadd(c);
12455  return 0;
12456 
12457  eof:
12458  case -1:
12459  yyerror("Invalid escape character syntax");
12460  return -1;
12461 
12462  default:
12463  tokadd('\\');
12464  tokadd(c);
12465  }
12466  return 0;
12467 }
12468 
12469 static int
12471 {
12472  int kcode = 0;
12473  int kopt = 0;
12474  int options = 0;
12475  int c, opt, kc;
12476 
12477  newtok();
12478  while (c = nextc(), ISALPHA(c)) {
12479  if (c == 'o') {
12480  options |= RE_OPTION_ONCE;
12481  }
12482  else if (rb_char_to_option_kcode(c, &opt, &kc)) {
12483  if (kc >= 0) {
12484  if (kc != rb_ascii8bit_encindex()) kcode = c;
12485  kopt = opt;
12486  }
12487  else {
12488  options |= opt;
12489  }
12490  }
12491  else {
12492  tokadd(c);
12493  }
12494  }
12495  options |= kopt;
12496  pushback(c);
12497  if (toklen()) {
12498  tokfix();
12499  compile_error(PARSER_ARG "unknown regexp option%s - %s",
12500  toklen() > 1 ? "s" : "", tok());
12501  }
12502  return options | RE_OPTION_ENCODING(kcode);
12503 }
12504 
12505 static void
12507 {
12508  rb_str_free(str);
12509  rb_gc_force_recycle(str);
12510 }
12511 
12512 static int
12513 parser_tokadd_mbchar(struct parser_params *parser, int c)
12514 {
12515  int len = parser_precise_mbclen();
12516  if (!MBCLEN_CHARFOUND_P(len)) {
12517  compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
12518  return -1;
12519  }
12520  tokadd(c);
12521  lex_p += --len;
12522  if (len > 0) tokcopy(len);
12523  return c;
12524 }
12525 
12526 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c))
12527 
12528 static inline int
12530 {
12531  switch (c) {
12532  case '$': case '*': case '+': case '.':
12533  case '?': case '^': case '|':
12534  case ')': case ']': case '}': case '>':
12535  return TRUE;
12536  default:
12537  return FALSE;
12538  }
12539 }
12540 
12541 static int
12543  int func, int term, int paren, long *nest,
12544  rb_encoding **encp)
12545 {
12546  int c;
12547  int has_nonascii = 0;
12548  rb_encoding *enc = *encp;
12549  char *errbuf = 0;
12550  static const char mixed_msg[] = "%s mixed within %s source";
12551 
12552 #define mixed_error(enc1, enc2) if (!errbuf) { \
12553  size_t len = sizeof(mixed_msg) - 4; \
12554  len += strlen(rb_enc_name(enc1)); \
12555  len += strlen(rb_enc_name(enc2)); \
12556  errbuf = ALLOCA_N(char, len); \
12557  snprintf(errbuf, len, mixed_msg, \
12558  rb_enc_name(enc1), \
12559  rb_enc_name(enc2)); \
12560  yyerror(errbuf); \
12561  }
12562 #define mixed_escape(beg, enc1, enc2) do { \
12563  const char *pos = lex_p; \
12564  lex_p = (beg); \
12565  mixed_error((enc1), (enc2)); \
12566  lex_p = pos; \
12567  } while (0)
12568 
12569  while ((c = nextc()) != -1) {
12570  if (paren && c == paren) {
12571  ++*nest;
12572  }
12573  else if (c == term) {
12574  if (!nest || !*nest) {
12575  pushback(c);
12576  break;
12577  }
12578  --*nest;
12579  }
12580  else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
12581  int c2 = *lex_p;
12582  if (c2 == '$' || c2 == '@' || c2 == '{') {
12583  pushback(c);
12584  break;
12585  }
12586  }
12587  else if (c == '\\') {
12588  const char *beg = lex_p - 1;
12589  c = nextc();
12590  switch (c) {
12591  case '\n':
12592  if (func & STR_FUNC_QWORDS) break;
12593  if (func & STR_FUNC_EXPAND) continue;
12594  tokadd('\\');
12595  break;
12596 
12597  case '\\':
12598  if (func & STR_FUNC_ESCAPE) tokadd(c);
12599  break;
12600 
12601  case 'u':
12602  if ((func & STR_FUNC_EXPAND) == 0) {
12603  tokadd('\\');
12604  break;
12605  }
12606  parser_tokadd_utf8(parser, &enc, 1,
12607  func & STR_FUNC_SYMBOL,
12608  func & STR_FUNC_REGEXP);
12609  if (has_nonascii && enc != *encp) {
12610  mixed_escape(beg, enc, *encp);
12611  }
12612  continue;
12613 
12614  default:
12615  if (c == -1) return -1;
12616  if (!ISASCII(c)) {
12617  if ((func & STR_FUNC_EXPAND) == 0) tokadd('\\');
12618  goto non_ascii;
12619  }
12620  if (func & STR_FUNC_REGEXP) {
12621  if (c == term && !simple_re_meta(c)) {
12622  tokadd(c);
12623  continue;
12624  }
12625  pushback(c);
12626  if ((c = tokadd_escape(&enc)) < 0)
12627  return -1;
12628  if (has_nonascii && enc != *encp) {
12629  mixed_escape(beg, enc, *encp);
12630  }
12631  continue;
12632  }
12633  else if (func & STR_FUNC_EXPAND) {
12634  pushback(c);
12635  if (func & STR_FUNC_ESCAPE) tokadd('\\');
12636  c = read_escape(0, &enc);
12637  }
12638  else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12639  /* ignore backslashed spaces in %w */
12640  }
12641  else if (c != term && !(paren && c == paren)) {
12642  tokadd('\\');
12643  pushback(c);
12644  continue;
12645  }
12646  }
12647  }
12648  else if (!parser_isascii()) {
12649  non_ascii:
12650  has_nonascii = 1;
12651  if (enc != *encp) {
12652  mixed_error(enc, *encp);
12653  continue;
12654  }
12655  if (tokadd_mbchar(c) == -1) return -1;
12656  continue;
12657  }
12658  else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12659  pushback(c);
12660  break;
12661  }
12662  if (c & 0x80) {
12663  has_nonascii = 1;
12664  if (enc != *encp) {
12665  mixed_error(enc, *encp);
12666  continue;
12667  }
12668  }
12669  tokadd(c);
12670  }
12671  *encp = enc;
12672  return c;
12673 }
12674 
12675 #define NEW_STRTERM(func, term, paren) \
12676  rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
12677 
12678 #ifdef RIPPER
12679 static void
12680 ripper_flush_string_content(struct parser_params *parser, rb_encoding *enc)
12681 {
12682  if (!NIL_P(parser->delayed)) {
12683  ptrdiff_t len = lex_p - parser->tokp;
12684  if (len > 0) {
12685  rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
12686  }
12687  ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12688  parser->tokp = lex_p;
12689  }
12690 }
12691 
12692 #define flush_string_content(enc) ripper_flush_string_content(parser, (enc))
12693 #else
12694 #define flush_string_content(enc) ((void)(enc))
12695 #endif
12696 
12697 RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20 + 31) / 32];
12698 /* this can be shared with ripper, since it's independent from struct
12699  * parser_params. */
12700 #ifndef RIPPER
12701 #define BIT(c, idx) (((c) / 32 - 1 == idx) ? (1U << ((c) % 32)) : 0)
12702 #define SPECIAL_PUNCT(idx) ( \
12703  BIT('~', idx) | BIT('*', idx) | BIT('$', idx) | BIT('?', idx) | \
12704  BIT('!', idx) | BIT('@', idx) | BIT('/', idx) | BIT('\\', idx) | \
12705  BIT(';', idx) | BIT(',', idx) | BIT('.', idx) | BIT('=', idx) | \
12706  BIT(':', idx) | BIT('<', idx) | BIT('>', idx) | BIT('\"', idx) | \
12707  BIT('&', idx) | BIT('`', idx) | BIT('\'', idx) | BIT('+', idx) | \
12708  BIT('0', idx))
12709 const unsigned int ruby_global_name_punct_bits[] = {
12710  SPECIAL_PUNCT(0),
12711  SPECIAL_PUNCT(1),
12712  SPECIAL_PUNCT(2),
12713 };
12714 #undef BIT
12715 #undef SPECIAL_PUNCT
12716 #endif
12717 
12718 static inline int
12720 {
12721  if (c <= 0x20 || 0x7e < c) return 0;
12722  return (ruby_global_name_punct_bits[(c - 0x20) / 32] >> (c % 32)) & 1;
12723 }
12724 
12725 static int
12727 {
12728  int c;
12729  const char *p = lex_p;
12730 
12731  if (p + 1 >= lex_pend) return 0;
12732  c = *p++;
12733  switch (c) {
12734  case '$':
12735  if ((c = *p) == '-') {
12736  if (++p >= lex_pend) return 0;
12737  c = *p;
12738  }
12739  else if (is_global_name_punct(c) || ISDIGIT(c)) {
12740  return tSTRING_DVAR;
12741  }
12742  break;
12743  case '@':
12744  if ((c = *p) == '@') {
12745  if (++p >= lex_pend) return 0;
12746  c = *p;
12747  }
12748  break;
12749  case '{':
12750  lex_p = p;
12751  command_start = TRUE;
12752  return tSTRING_DBEG;
12753  default:
12754  return 0;
12755  }
12756  if (!ISASCII(c) || c == '_' || ISALPHA(c))
12757  return tSTRING_DVAR;
12758  return 0;
12759 }
12760 
12761 static int
12762 parser_parse_string(struct parser_params *parser, NODE *quote)
12763 {
12764  int func = (int)quote->nd_func;
12765  int term = nd_term(quote);
12766  int paren = nd_paren(quote);
12767  int c, space = 0;
12769 
12770  if (func == -1) return tSTRING_END;
12771  c = nextc();
12772  if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12773  do {c = nextc();} while (ISSPACE(c));
12774  space = 1;
12775  }
12776  if (c == term && !quote->nd_nest) {
12777  if (func & STR_FUNC_QWORDS) {
12778  quote->nd_func = -1;
12779  return ' ';
12780  }
12781  if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
12783  return tREGEXP_END;
12784  }
12785  if (space) {
12786  pushback(c);
12787  return ' ';
12788  }
12789  newtok();
12790  if ((func & STR_FUNC_EXPAND) && c == '#') {
12791  int t = parser_peek_variable_name(parser);
12792  if (t) return t;
12793  tokadd('#');
12794  c = nextc();
12795  }
12796  pushback(c);
12797  if (tokadd_string(func, term, paren, &quote->nd_nest,
12798  &enc) == -1) {
12799  ruby_sourceline = nd_line(quote);
12800  if (func & STR_FUNC_REGEXP) {
12801  if (parser->eofp)
12802  compile_error(PARSER_ARG "unterminated regexp meets end of file");
12803  return tREGEXP_END;
12804  }
12805  else {
12806  if (parser->eofp)
12807  compile_error(PARSER_ARG "unterminated string meets end of file");
12808  return tSTRING_END;
12809  }
12810  }
12811 
12812  tokfix();
12813  set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12814  flush_string_content(enc);
12815 
12816  return tSTRING_CONTENT;
12817 }
12818 
12819 static int
12821 {
12822  int c = nextc(), term, func = 0;
12823  long len;
12824 
12825  if (c == '-') {
12826  c = nextc();
12827  func = STR_FUNC_INDENT;
12828  }
12829  switch (c) {
12830  case '\'':
12831  func |= str_squote; goto quoted;
12832  case '"':
12833  func |= str_dquote; goto quoted;
12834  case '`':
12835  func |= str_xquote;
12836  quoted:
12837  newtok();
12838  tokadd(func);
12839  term = c;
12840  while ((c = nextc()) != -1 && c != term) {
12841  if (tokadd_mbchar(c) == -1) return 0;
12842  }
12843  if (c == -1) {
12844  compile_error(PARSER_ARG "unterminated here document identifier");
12845  return 0;
12846  }
12847  break;
12848 
12849  default:
12850  if (!parser_is_identchar()) {
12851  pushback(c);
12852  if (func & STR_FUNC_INDENT) {
12853  pushback('-');
12854  }
12855  return 0;
12856  }
12857  newtok();
12858  term = '"';
12859  tokadd(func |= str_dquote);
12860  do {
12861  if (tokadd_mbchar(c) == -1) return 0;
12862  } while ((c = nextc()) != -1 && parser_is_identchar());
12863  pushback(c);
12864  break;
12865  }
12866 
12867  tokfix();
12868 #ifdef RIPPER
12869  ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
12870 #endif
12871  len = lex_p - lex_pbeg;
12872  lex_goto_eol(parser);
12874  STR_NEW(tok(), toklen()), /* nd_lit */
12875  len, /* nd_nth */
12876  lex_lastline); /* nd_orig */
12878  ripper_flush(parser);
12879  return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
12880 }
12881 
12882 static void
12884 {
12885  VALUE line;
12886 
12887  lex_strterm = 0;
12888  line = here->nd_orig;
12889  lex_lastline = line;
12890  lex_pbeg = RSTRING_PTR(line);
12891  lex_pend = lex_pbeg + RSTRING_LEN(line);
12892  lex_p = lex_pbeg + here->nd_nth;
12894  ruby_sourceline = nd_line(here);
12895  dispose_string(here->nd_lit);
12896  rb_gc_force_recycle((VALUE)here);
12897  ripper_flush(parser);
12898 }
12899 
12900 static int
12902  const char *eos, long len, int indent)
12903 {
12904  const char *p = lex_pbeg;
12905  long n;
12906 
12907  if (indent) {
12908  while (*p && ISSPACE(*p)) p++;
12909  }
12910  n = lex_pend - (p + len);
12911  if (n < 0) return FALSE;
12912  if (n > 0 && p[len] != '\n') {
12913  if (p[len] != '\r') return FALSE;
12914  if (n <= 1 || p[len+1] != '\n') return FALSE;
12915  }
12916  return strncmp(eos, p, len) == 0;
12917 }
12918 
12919 #define NUM_SUFFIX_R (1<<0)
12920 #define NUM_SUFFIX_I (1<<1)
12921 #define NUM_SUFFIX_ALL 3
12922 
12923 static int
12925 {
12926  int c, result = 0;
12927  const char *lastp = lex_p;
12928 
12929  while ((c = nextc()) != -1) {
12930  if ((mask & NUM_SUFFIX_I) && c == 'i') {
12931  result |= (mask & NUM_SUFFIX_I);
12932  mask &= ~NUM_SUFFIX_I;
12933  /* r after i, rational of complex is disallowed */
12934  mask &= ~NUM_SUFFIX_R;
12935  continue;
12936  }
12937  if ((mask & NUM_SUFFIX_R) && c == 'r') {
12938  result |= (mask & NUM_SUFFIX_R);
12939  mask &= ~NUM_SUFFIX_R;
12940  continue;
12941  }
12942  if (!ISASCII(c) || ISALPHA(c) || c == '_') {
12943  lex_p = lastp;
12944  return 0;
12945  }
12946  pushback(c);
12947  break;
12948  }
12949  return result;
12950 }
12951 
12952 static int
12953 parser_set_number_literal(struct parser_params *parser, VALUE v, int type, int suffix)
12954 {
12955  if (suffix & NUM_SUFFIX_I) {
12956  v = rb_complex_raw(INT2FIX(0), v);
12957  type = tIMAGINARY;
12958  }
12959  set_yylval_literal(v);
12960  return type;
12961 }
12962 
12963 static int
12964 parser_set_integer_literal(struct parser_params *parser, VALUE v, int suffix)
12965 {
12966  int type = tINTEGER;
12967  if (suffix & NUM_SUFFIX_R) {
12968  v = rb_rational_raw1(v);
12969  type = tRATIONAL;
12970  }
12971  return set_number_literal(v, type, suffix);
12972 }
12973 
12974 #ifdef RIPPER
12975 static void
12976 ripper_dispatch_heredoc_end(struct parser_params *parser)
12977 {
12978  if (!NIL_P(parser->delayed))
12979  ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12980  lex_goto_eol(parser);
12981  ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
12982 }
12983 
12984 #define dispatch_heredoc_end() ripper_dispatch_heredoc_end(parser)
12985 #else
12986 #define dispatch_heredoc_end() ((void)0)
12987 #endif
12988 
12989 static int
12991 {
12992  int c, func, indent = 0;
12993  const char *eos, *p, *pend;
12994  long len;
12995  VALUE str = 0;
12997 
12998  eos = RSTRING_PTR(here->nd_lit);
12999  len = RSTRING_LEN(here->nd_lit) - 1;
13000  indent = (func = *eos++) & STR_FUNC_INDENT;
13001 
13002  if ((c = nextc()) == -1) {
13003  error:
13004  compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
13005 #ifdef RIPPER
13006  if (NIL_P(parser->delayed)) {
13007  ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
13008  }
13009  else {
13010  if (str ||
13011  ((len = lex_p - parser->tokp) > 0 &&
13012  (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
13013  rb_str_append(parser->delayed, str);
13014  }
13015  ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
13016  }
13017  lex_goto_eol(parser);
13018 #endif
13019  restore:
13021  return 0;
13022  }
13023  if (was_bol() && whole_match_p(eos, len, indent)) {
13026  return tSTRING_END;
13027  }
13028 
13029  if (!(func & STR_FUNC_EXPAND)) {
13030  do {
13032  pend = lex_pend;
13033  if (pend > p) {
13034  switch (pend[-1]) {
13035  case '\n':
13036  if (--pend == p || pend[-1] != '\r') {
13037  pend++;
13038  break;
13039  }
13040  case '\r':
13041  --pend;
13042  }
13043  }
13044  if (str)
13045  rb_str_cat(str, p, pend - p);
13046  else
13047  str = STR_NEW(p, pend - p);
13048  if (pend < lex_pend) rb_str_cat(str, "\n", 1);
13049  lex_goto_eol(parser);
13050  if (nextc() == -1) {
13051  if (str) {
13052  dispose_string(str);
13053  str = 0;
13054  }
13055  goto error;
13056  }
13057  } while (!whole_match_p(eos, len, indent));
13058  }
13059  else {
13060  /* int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
13061  newtok();
13062  if (c == '#') {
13063  int t = parser_peek_variable_name(parser);
13064  if (t) return t;
13065  tokadd('#');
13066  c = nextc();
13067  }
13068  do {
13069  pushback(c);
13070  if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
13071  if (parser->eofp) goto error;
13072  goto restore;
13073  }
13074  if (c != '\n') {
13075  set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
13076  flush_string_content(enc);
13077  return tSTRING_CONTENT;
13078  }
13079  tokadd(nextc());
13080  /* if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
13081  if ((c = nextc()) == -1) goto error;
13082  } while (!whole_match_p(eos, len, indent));
13083  str = STR_NEW3(tok(), toklen(), enc, func);
13084  }
13087  lex_strterm = NEW_STRTERM(-1, 0, 0);
13088  set_yylval_str(str);
13089  return tSTRING_CONTENT;
13090 }
13091 
13092 #include "lex.c"
13093 
13094 static void
13096 {
13097 #ifndef RIPPER
13098  rb_warning0("ambiguous first argument; put parentheses or even spaces");
13099 #else
13100  dispatch0(arg_ambiguous);
13101 #endif
13102 }
13103 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
13104 
13105 static ID
13107 {
13108 #ifndef RIPPER
13109  if (!is_local_id(lhs))
13110  yyerror("formal argument must be local variable");
13111 #endif
13112  shadowing_lvar(lhs);
13113  return lhs;
13114 }
13115 
13116 static int
13117 lvar_defined_gen(struct parser_params *parser, ID id)
13118 {
13119  return (dyna_in_block() && dvar_defined_get(id)) || local_id(id);
13120 }
13121 
13122 /* emacsen -*- hack */
13123 static long
13124 parser_encode_length(struct parser_params *parser, const char *name, long len)
13125 {
13126  long nlen;
13127 
13128  if (len > 5 && name[nlen = len - 5] == '-') {
13129  if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
13130  return nlen;
13131  }
13132  if (len > 4 && name[nlen = len - 4] == '-') {
13133  if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
13134  return nlen;
13135  if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
13136  !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
13137  /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */
13138  return nlen;
13139  }
13140  return len;
13141 }
13142 
13143 static void
13144 parser_set_encode(struct parser_params *parser, const char *name)
13145 {
13146  int idx = rb_enc_find_index(name);
13147  rb_encoding *enc;
13148  VALUE excargs[3];
13149 
13150  if (idx < 0) {
13151  excargs[1] = rb_sprintf("unknown encoding name: %s", name);
13152  error:
13153  excargs[0] = rb_eArgError;
13154  excargs[2] = rb_make_backtrace();
13155  rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
13156  rb_exc_raise(rb_make_exception(3, excargs));
13157  }
13158  enc = rb_enc_from_index(idx);
13159  if (!rb_enc_asciicompat(enc)) {
13160  excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
13161  goto error;
13162  }
13163  parser->enc = enc;
13164 #ifndef RIPPER
13165  if (ruby_debug_lines) {
13166  VALUE lines = ruby_debug_lines;
13167  long i, n = RARRAY_LEN(lines);
13168  for (i = 0; i < n; ++i) {
13169  rb_enc_associate_index(RARRAY_AREF(lines, i), idx);
13170  }
13171  }
13172 #endif
13173 }
13174 
13175 static int
13177 {
13178  const char *p = lex_pbeg, *pend = lex_p - 1;
13179  if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
13180  while (p < pend) {
13181  if (!ISSPACE(*p)) return 0;
13182  p++;
13183  }
13184  return 1;
13185 }
13186 
13187 #ifndef RIPPER
13188 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
13189 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
13190 
13191 static void
13192 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
13193 {
13194  if (!comment_at_top(parser)) {
13195  return;
13196  }
13197  parser_set_encode(parser, val);
13198 }
13199 
13200 static void
13201 parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
13202 {
13203  int *p = &parser->parser_token_info_enabled;
13204 
13205  switch (*val) {
13206  case 't': case 'T':
13207  if (strcasecmp(val, "true") == 0) {
13208  *p = TRUE;
13209  return;
13210  }
13211  break;
13212  case 'f': case 'F':
13213  if (strcasecmp(val, "false") == 0) {
13214  *p = FALSE;
13215  return;
13216  }
13217  break;
13218  }
13219  rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val);
13220 }
13221 
13222 struct magic_comment {
13223  const char *name;
13226 };
13227 
13228 static const struct magic_comment magic_comments[] = {
13231  {"warn_indent", parser_set_token_info},
13232 };
13233 #endif
13234 
13235 static const char *
13236 magic_comment_marker(const char *str, long len)
13237 {
13238  long i = 2;
13239 
13240  while (i < len) {
13241  switch (str[i]) {
13242  case '-':
13243  if (str[i-1] == '*' && str[i-2] == '-') {
13244  return str + i + 1;
13245  }
13246  i += 2;
13247  break;
13248  case '*':
13249  if (i + 1 >= len) return 0;
13250  if (str[i+1] != '-') {
13251  i += 4;
13252  }
13253  else if (str[i-1] != '-') {
13254  i += 2;
13255  }
13256  else {
13257  return str + i + 2;
13258  }
13259  break;
13260  default:
13261  i += 3;
13262  break;
13263  }
13264  }
13265  return 0;
13266 }
13267 
13268 static int
13269 parser_magic_comment(struct parser_params *parser, const char *str, long len)
13270 {
13271  VALUE name = 0, val = 0;
13272  const char *beg, *end, *vbeg, *vend;
13273 #define str_copy(_s, _p, _n) ((_s) \
13274  ? (void)(rb_str_resize((_s), (_n)), \
13275  MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
13276  : (void)((_s) = STR_NEW((_p), (_n))))
13277 
13278  if (len <= 7) return FALSE;
13279  if (!(beg = magic_comment_marker(str, len))) return FALSE;
13280  if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
13281  str = beg;
13282  len = end - beg - 3;
13283 
13284  /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
13285  while (len > 0) {
13286 #ifndef RIPPER
13287  const struct magic_comment *p = magic_comments;
13288 #endif
13289  char *s;
13290  int i;
13291  long n = 0;
13292 
13293  for (; len > 0 && *str; str++, --len) {
13294  switch (*str) {
13295  case '\'': case '"': case ':': case ';':
13296  continue;
13297  }
13298  if (!ISSPACE(*str)) break;
13299  }
13300  for (beg = str; len > 0; str++, --len) {
13301  switch (*str) {
13302  case '\'': case '"': case ':': case ';':
13303  break;
13304  default:
13305  if (ISSPACE(*str)) break;
13306  continue;
13307  }
13308  break;
13309  }
13310  for (end = str; len > 0 && ISSPACE(*str); str++, --len);
13311  if (!len) break;
13312  if (*str != ':') continue;
13313 
13314  do str++; while (--len > 0 && ISSPACE(*str));
13315  if (!len) break;
13316  if (*str == '"') {
13317  for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
13318  if (*str == '\\') {
13319  --len;
13320  ++str;
13321  }
13322  }
13323  vend = str;
13324  if (len) {
13325  --len;
13326  ++str;
13327  }
13328  }
13329  else {
13330  for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
13331  vend = str;
13332  }
13333  while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
13334 
13335  n = end - beg;
13336  str_copy(name, beg, n);
13337  s = RSTRING_PTR(name);
13338  for (i = 0; i < n; ++i) {
13339  if (s[i] == '-') s[i] = '_';
13340  }
13341 #ifndef RIPPER
13342  do {
13343  if (STRNCASECMP(p->name, s, n) == 0) {
13344  n = vend - vbeg;
13345  if (p->length) {
13346  n = (*p->length)(parser, vbeg, n);
13347  }
13348  str_copy(val, vbeg, n);
13349  (*p->func)(parser, s, RSTRING_PTR(val));
13350  break;
13351  }
13352  } while (++p < magic_comments + numberof(magic_comments));
13353 #else
13354  str_copy(val, vbeg, vend - vbeg);
13355  dispatch2(magic_comment, name, val);
13356 #endif
13357  }
13358 
13359  return TRUE;
13360 }
13361 
13362 static void
13363 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
13364 {
13365  int sep = 0;
13366  const char *beg = str;
13367  VALUE s;
13368 
13369  for (;;) {
13370  if (send - str <= 6) return;
13371  switch (str[6]) {
13372  case 'C': case 'c': str += 6; continue;
13373  case 'O': case 'o': str += 5; continue;
13374  case 'D': case 'd': str += 4; continue;
13375  case 'I': case 'i': str += 3; continue;
13376  case 'N': case 'n': str += 2; continue;
13377  case 'G': case 'g': str += 1; continue;
13378  case '=': case ':':
13379  sep = 1;
13380  str += 6;
13381  break;
13382  default:
13383  str += 6;
13384  if (ISSPACE(*str)) break;
13385  continue;
13386  }
13387  if (STRNCASECMP(str-6, "coding", 6) == 0) break;
13388  }
13389  for (;;) {
13390  do {
13391  if (++str >= send) return;
13392  } while (ISSPACE(*str));
13393  if (sep) break;
13394  if (*str != '=' && *str != ':') return;
13395  sep = 1;
13396  str++;
13397  }
13398  beg = str;
13399  while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
13400  s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
13401  parser_set_encode(parser, RSTRING_PTR(s));
13402  rb_str_resize(s, 0);
13403 }
13404 
13405 static void
13407 {
13408  int c = nextc();
13409  switch (c) {
13410  case '#':
13411  if (peek('!')) parser->has_shebang = 1;
13412  break;
13413  case 0xef: /* UTF-8 BOM marker */
13414  if (lex_pend - lex_p >= 2 &&
13415  (unsigned char)lex_p[0] == 0xbb &&
13416  (unsigned char)lex_p[1] == 0xbf) {
13417  parser->enc = rb_utf8_encoding();
13418  lex_p += 2;
13419  lex_pbeg = lex_p;
13420  return;
13421  }
13422  break;
13423  case EOF:
13424  return;
13425  }
13426  pushback(c);
13427  parser->enc = rb_enc_get(lex_lastline);
13428 }
13429 
13430 #define IS_ARG() IS_lex_state(EXPR_ARG_ANY)
13431 #define IS_END() IS_lex_state(EXPR_END_ANY)
13432 #define IS_BEG() IS_lex_state(EXPR_BEG_ANY)
13433 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
13434 #define IS_LABEL_POSSIBLE() ((IS_lex_state(EXPR_BEG | EXPR_ENDFN) && !cmd_state) || IS_ARG())
13435 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1))
13436 #define IS_AFTER_OPERATOR() IS_lex_state(EXPR_FNAME | EXPR_DOT)
13437 
13438 #ifndef RIPPER
13439 #define ambiguous_operator(op, syn) ( \
13440  rb_warning0("`"op"' after local variable or literal is interpreted as binary operator"), \
13441  rb_warning0("even though it seems like "syn""))
13442 #else
13443 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
13444 #endif
13445 #define warn_balanced(op, syn) ((void) \
13446  (!IS_lex_state_for(last_state, EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN|EXPR_ENDARG) && \
13447  space_seen && !ISSPACE(c) && \
13448  (ambiguous_operator(op, syn), 0)))
13449 
13450 static int
13452 {
13453  register int c;
13454  int space_seen = 0;
13455  int cmd_state;
13456  enum lex_state_e last_state;
13457  rb_encoding *enc;
13458  int mb;
13459 #ifdef RIPPER
13460  int fallthru = FALSE;
13461 #endif
13462 
13463  if (lex_strterm) {
13464  int token;
13465  if (nd_type(lex_strterm) == NODE_HEREDOC) {
13466  token = here_document(lex_strterm);
13467  if (token == tSTRING_END) {
13468  lex_strterm = 0;
13469  lex_state = EXPR_END;
13470  }
13471  }
13472  else {
13473  token = parse_string(lex_strterm);
13474  if (token == tSTRING_END || token == tREGEXP_END) {
13476  lex_strterm = 0;
13477  lex_state = EXPR_END;
13478  }
13479  }
13480  return token;
13481  }
13482  cmd_state = command_start;
13483  command_start = FALSE;
13484  retry:
13485  last_state = lex_state;
13486  switch (c = nextc()) {
13487  case '\0': /* NUL */
13488  case '\004': /* ^D */
13489  case '\032': /* ^Z */
13490  case -1: /* end of script. */
13491  return 0;
13492 
13493  /* white spaces */
13494  case ' ': case '\t': case '\f': case '\r':
13495  case '\13': /* '\v' */
13496  space_seen = 1;
13497 #ifdef RIPPER
13498  while ((c = nextc())) {
13499  switch (c) {
13500  case ' ': case '\t': case '\f': case '\r':
13501  case '\13': /* '\v' */
13502  break;
13503  default:
13504  goto outofloop;
13505  }
13506  }
13507  outofloop:
13508  pushback(c);
13509  ripper_dispatch_scan_event(parser, tSP);
13510 #endif
13511  goto retry;
13512 
13513  case '#': /* it's a comment */
13514  /* no magic_comment in shebang line */
13515  if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
13516  if (comment_at_top(parser)) {
13517  set_file_encoding(parser, lex_p, lex_pend);
13518  }
13519  }
13520  lex_p = lex_pend;
13521 #ifdef RIPPER
13522  ripper_dispatch_scan_event(parser, tCOMMENT);
13523  fallthru = TRUE;
13524 #endif
13525  /* fall through */
13526  case '\n':
13527  if (IS_lex_state(EXPR_BEG | EXPR_VALUE | EXPR_CLASS | EXPR_FNAME | EXPR_DOT | EXPR_LABELARG)) {
13528 #ifdef RIPPER
13529  if (!fallthru) {
13530  ripper_dispatch_scan_event(parser, tIGNORED_NL);
13531  }
13532  fallthru = FALSE;
13533 #endif
13534  if (IS_lex_state(EXPR_LABELARG) && parser->parser_in_kwarg) {
13535  goto normal_newline;
13536  }
13537  goto retry;
13538  }
13539  while ((c = nextc())) {
13540  switch (c) {
13541  case ' ': case '\t': case '\f': case '\r':
13542  case '\13': /* '\v' */
13543  space_seen = 1;
13544  break;
13545  case '.': {
13546  if ((c = nextc()) != '.') {
13547  pushback(c);
13548  pushback('.');
13549  goto retry;
13550  }
13551  }
13552  default:
13553  --ruby_sourceline;
13555  case -1: /* EOF no decrement*/
13556  lex_goto_eol(parser);
13557 #ifdef RIPPER
13558  if (c != -1) {
13559  parser->tokp = lex_p;
13560  }
13561 #endif
13562  goto normal_newline;
13563  }
13564  }
13565  normal_newline:
13566  command_start = TRUE;
13567  lex_state = EXPR_BEG;
13568  return '\n';
13569 
13570  case '*':
13571  if ((c = nextc()) == '*') {
13572  if ((c = nextc()) == '=') {
13574  lex_state = EXPR_BEG;
13575  return tOP_ASGN;
13576  }
13577  pushback(c);
13578  if (IS_SPCARG(c)) {
13579  rb_warning0("`**' interpreted as argument prefix");
13580  c = tDSTAR;
13581  }
13582  else if (IS_BEG()) {
13583  c = tDSTAR;
13584  }
13585  else {
13586  warn_balanced("**", "argument prefix");
13587  c = tPOW;
13588  }
13589  }
13590  else {
13591  if (c == '=') {
13592  set_yylval_id('*');
13593  lex_state = EXPR_BEG;
13594  return tOP_ASGN;
13595  }
13596  pushback(c);
13597  if (IS_SPCARG(c)) {
13598  rb_warning0("`*' interpreted as argument prefix");
13599  c = tSTAR;
13600  }
13601  else if (IS_BEG()) {
13602  c = tSTAR;
13603  }
13604  else {
13605  warn_balanced("*", "argument prefix");
13606  c = '*';
13607  }
13608  }
13609  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13610  return c;
13611 
13612  case '!':
13613  c = nextc();
13614  if (IS_AFTER_OPERATOR()) {
13615  lex_state = EXPR_ARG;
13616  if (c == '@') {
13617  return '!';
13618  }
13619  }
13620  else {
13621  lex_state = EXPR_BEG;
13622  }
13623  if (c == '=') {
13624  return tNEQ;
13625  }
13626  if (c == '~') {
13627  return tNMATCH;
13628  }
13629  pushback(c);
13630  return '!';
13631 
13632  case '=':
13633  if (was_bol()) {
13634  /* skip embedded rd document */
13635  if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
13636 #ifdef RIPPER
13637  int first_p = TRUE;
13638 
13639  lex_goto_eol(parser);
13640  ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
13641 #endif
13642  for (;;) {
13643  lex_goto_eol(parser);
13644 #ifdef RIPPER
13645  if (!first_p) {
13646  ripper_dispatch_scan_event(parser, tEMBDOC);
13647  }
13648  first_p = FALSE;
13649 #endif
13650  c = nextc();
13651  if (c == -1) {
13652  compile_error(PARSER_ARG "embedded document meets end of file");
13653  return 0;
13654  }
13655  if (c != '=') continue;
13656  if (strncmp(lex_p, "end", 3) == 0 &&
13657  (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
13658  break;
13659  }
13660  }
13661  lex_goto_eol(parser);
13662 #ifdef RIPPER
13663  ripper_dispatch_scan_event(parser, tEMBDOC_END);
13664 #endif
13665  goto retry;
13666  }
13667  }
13668 
13669  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13670  if ((c = nextc()) == '=') {
13671  if ((c = nextc()) == '=') {
13672  return tEQQ;
13673  }
13674  pushback(c);
13675  return tEQ;
13676  }
13677  if (c == '~') {
13678  return tMATCH;
13679  }
13680  else if (c == '>') {
13681  return tASSOC;
13682  }
13683  pushback(c);
13684  return '=';
13685 
13686  case '<':
13687  last_state = lex_state;
13688  c = nextc();
13689  if (c == '<' &&
13690  !IS_lex_state(EXPR_DOT | EXPR_CLASS) &&
13691  !IS_END() &&
13692  (!IS_ARG() || space_seen)) {
13693  int token = heredoc_identifier();
13694  if (token) return token;
13695  }
13696  if (IS_AFTER_OPERATOR()) {
13697  lex_state = EXPR_ARG;
13698  }
13699  else {
13700  if (IS_lex_state(EXPR_CLASS))
13701  command_start = TRUE;
13702  lex_state = EXPR_BEG;
13703  }
13704  if (c == '=') {
13705  if ((c = nextc()) == '>') {
13706  return tCMP;
13707  }
13708  pushback(c);
13709  return tLEQ;
13710  }
13711  if (c == '<') {
13712  if ((c = nextc()) == '=') {
13714  lex_state = EXPR_BEG;
13715  return tOP_ASGN;
13716  }
13717  pushback(c);
13718  warn_balanced("<<", "here document");
13719  return tLSHFT;
13720  }
13721  pushback(c);
13722  return '<';
13723 
13724  case '>':
13725  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13726  if ((c = nextc()) == '=') {
13727  return tGEQ;
13728  }
13729  if (c == '>') {
13730  if ((c = nextc()) == '=') {
13732  lex_state = EXPR_BEG;
13733  return tOP_ASGN;
13734  }
13735  pushback(c);
13736  return tRSHFT;
13737  }
13738  pushback(c);
13739  return '>';
13740 
13741  case '"':
13742  lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
13743  return tSTRING_BEG;
13744 
13745  case '`':
13746  if (IS_lex_state(EXPR_FNAME)) {
13747  lex_state = EXPR_ENDFN;
13748  return c;
13749  }
13750  if (IS_lex_state(EXPR_DOT)) {
13751  if (cmd_state)
13752  lex_state = EXPR_CMDARG;
13753  else
13754  lex_state = EXPR_ARG;
13755  return c;
13756  }
13757  lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
13758  return tXSTRING_BEG;
13759 
13760  case '\'':
13761  lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
13762  return tSTRING_BEG;
13763 
13764  case '?':
13765  if (IS_END()) {
13766  lex_state = EXPR_VALUE;
13767  return '?';
13768  }
13769  c = nextc();
13770  if (c == -1) {
13771  compile_error(PARSER_ARG "incomplete character syntax");
13772  return 0;
13773  }
13774  if (rb_enc_isspace(c, current_enc)) {
13775  if (!IS_ARG()) {
13776  int c2 = 0;
13777  switch (c) {
13778  case ' ':
13779  c2 = 's';
13780  break;
13781  case '\n':
13782  c2 = 'n';
13783  break;
13784  case '\t':
13785  c2 = 't';
13786  break;
13787  case '\v':
13788  c2 = 'v';
13789  break;
13790  case '\r':
13791  c2 = 'r';
13792  break;
13793  case '\f':
13794  c2 = 'f';
13795  break;
13796  }
13797  if (c2) {
13798  rb_warnI("invalid character syntax; use ?\\%c", c2);
13799  }
13800  }
13801  ternary:
13802  pushback(c);
13803  lex_state = EXPR_VALUE;
13804  return '?';
13805  }
13806  newtok();
13807  enc = current_enc;
13808  if (!parser_isascii()) {
13809  if (tokadd_mbchar(c) == -1) return 0;
13810  }
13811  else if ((rb_enc_isalnum(c, current_enc) || c == '_') &&
13813  goto ternary;
13814  }
13815  else if (c == '\\') {
13816  if (peek('u')) {
13817  nextc();
13818  c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
13819  if (0x80 <= c) {
13820  tokaddmbc(c, enc);
13821  }
13822  else {
13823  tokadd(c);
13824  }
13825  }
13826  else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) {
13827  nextc();
13828  if (tokadd_mbchar(c) == -1) return 0;
13829  }
13830  else {
13831  c = read_escape(0, &enc);
13832  tokadd(c);
13833  }
13834  }
13835  else {
13836  tokadd(c);
13837  }
13838  tokfix();
13839  set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
13840  lex_state = EXPR_END;
13841  return tCHAR;
13842 
13843  case '&':
13844  if ((c = nextc()) == '&') {
13845  lex_state = EXPR_BEG;
13846  if ((c = nextc()) == '=') {
13848  lex_state = EXPR_BEG;
13849  return tOP_ASGN;
13850  }
13851  pushback(c);
13852  return tANDOP;
13853  }
13854  else if (c == '=') {
13855  set_yylval_id('&');
13856  lex_state = EXPR_BEG;
13857  return tOP_ASGN;
13858  }
13859  pushback(c);
13860  if (IS_SPCARG(c)) {
13861  rb_warning0("`&' interpreted as argument prefix");
13862  c = tAMPER;
13863  }
13864  else if (IS_BEG()) {
13865  c = tAMPER;
13866  }
13867  else {
13868  warn_balanced("&", "argument prefix");
13869  c = '&';
13870  }
13871  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13872  return c;
13873 
13874  case '|':
13875  if ((c = nextc()) == '|') {
13876  lex_state = EXPR_BEG;
13877  if ((c = nextc()) == '=') {
13879  lex_state = EXPR_BEG;
13880  return tOP_ASGN;
13881  }
13882  pushback(c);
13883  return tOROP;
13884  }
13885  if (c == '=') {
13886  set_yylval_id('|');
13887  lex_state = EXPR_BEG;
13888  return tOP_ASGN;
13889  }
13890  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13891  pushback(c);
13892  return '|';
13893 
13894  case '+':
13895  c = nextc();
13896  if (IS_AFTER_OPERATOR()) {
13897  lex_state = EXPR_ARG;
13898  if (c == '@') {
13899  return tUPLUS;
13900  }
13901  pushback(c);
13902  return '+';
13903  }
13904  if (c == '=') {
13905  set_yylval_id('+');
13906  lex_state = EXPR_BEG;
13907  return tOP_ASGN;
13908  }
13909  if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13910  lex_state = EXPR_BEG;
13911  pushback(c);
13912  if (c != -1 && ISDIGIT(c)) {
13913  c = '+';
13914  goto start_num;
13915  }
13916  return tUPLUS;
13917  }
13918  lex_state = EXPR_BEG;
13919  pushback(c);
13920  warn_balanced("+", "unary operator");
13921  return '+';
13922 
13923  case '-':
13924  c = nextc();
13925  if (IS_AFTER_OPERATOR()) {
13926  lex_state = EXPR_ARG;
13927  if (c == '@') {
13928  return tUMINUS;
13929  }
13930  pushback(c);
13931  return '-';
13932  }
13933  if (c == '=') {
13934  set_yylval_id('-');
13935  lex_state = EXPR_BEG;
13936  return tOP_ASGN;
13937  }
13938  if (c == '>') {
13939  lex_state = EXPR_ENDFN;
13940  return tLAMBDA;
13941  }
13942  if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13943  lex_state = EXPR_BEG;
13944  pushback(c);
13945  if (c != -1 && ISDIGIT(c)) {
13946  return tUMINUS_NUM;
13947  }
13948  return tUMINUS;
13949  }
13950  lex_state = EXPR_BEG;
13951  pushback(c);
13952  warn_balanced("-", "unary operator");
13953  return '-';
13954 
13955  case '.':
13956  lex_state = EXPR_BEG;
13957  if ((c = nextc()) == '.') {
13958  if ((c = nextc()) == '.') {
13959  return tDOT3;
13960  }
13961  pushback(c);
13962  return tDOT2;
13963  }
13964  pushback(c);
13965  if (c != -1 && ISDIGIT(c)) {
13966  yyerror("no .<digit> floating literal anymore; put 0 before dot");
13967  }
13968  lex_state = EXPR_DOT;
13969  return '.';
13970 
13971  start_num:
13972  case '0': case '1': case '2': case '3': case '4':
13973  case '5': case '6': case '7': case '8': case '9':
13974  {
13975  int is_float, seen_point, seen_e, nondigit;
13976  int suffix;
13977 
13978  is_float = seen_point = seen_e = nondigit = 0;
13979  lex_state = EXPR_END;
13980  newtok();
13981  if (c == '-' || c == '+') {
13982  tokadd(c);
13983  c = nextc();
13984  }
13985  if (c == '0') {
13986 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13987  int start = toklen();
13988  c = nextc();
13989  if (c == 'x' || c == 'X') {
13990  /* hexadecimal */
13991  c = nextc();
13992  if (c != -1 && ISXDIGIT(c)) {
13993  do {
13994  if (c == '_') {
13995  if (nondigit) break;
13996  nondigit = c;
13997  continue;
13998  }
13999  if (!ISXDIGIT(c)) break;
14000  nondigit = 0;
14001  tokadd(c);
14002  } while ((c = nextc()) != -1);
14003  }
14004  pushback(c);
14005  tokfix();
14006  if (toklen() == start) {
14007  no_digits();
14008  }
14009  else if (nondigit) goto trailing_uc;
14011  return set_integer_literal(rb_cstr_to_inum(tok(), 16, FALSE), suffix);
14012  }
14013  if (c == 'b' || c == 'B') {
14014  /* binary */
14015  c = nextc();
14016  if (c == '0' || c == '1') {
14017  do {
14018  if (c == '_') {
14019  if (nondigit) break;
14020  nondigit = c;
14021  continue;
14022  }
14023  if (c != '0' && c != '1') break;
14024  nondigit = 0;
14025  tokadd(c);
14026  } while ((c = nextc()) != -1);
14027  }
14028  pushback(c);
14029  tokfix();
14030  if (toklen() == start) {
14031  no_digits();
14032  }
14033  else if (nondigit) goto trailing_uc;
14035  return set_integer_literal(rb_cstr_to_inum(tok(), 2, FALSE), suffix);
14036  }
14037  if (c == 'd' || c == 'D') {
14038  /* decimal */
14039  c = nextc();
14040  if (c != -1 && ISDIGIT(c)) {
14041  do {
14042  if (c == '_') {
14043  if (nondigit) break;
14044  nondigit = c;
14045  continue;
14046  }
14047  if (!ISDIGIT(c)) break;
14048  nondigit = 0;
14049  tokadd(c);
14050  } while ((c = nextc()) != -1);
14051  }
14052  pushback(c);
14053  tokfix();
14054  if (toklen() == start) {
14055  no_digits();
14056  }
14057  else if (nondigit) goto trailing_uc;
14059  return set_integer_literal(rb_cstr_to_inum(tok(), 10, FALSE), suffix);
14060  }
14061  if (c == '_') {
14062  /* 0_0 */
14063  goto octal_number;
14064  }
14065  if (c == 'o' || c == 'O') {
14066  /* prefixed octal */
14067  c = nextc();
14068  if (c == -1 || c == '_' || !ISDIGIT(c)) {
14069  no_digits();
14070  }
14071  }
14072  if (c >= '0' && c <= '7') {
14073  /* octal */
14074  octal_number:
14075  do {
14076  if (c == '_') {
14077  if (nondigit) break;
14078  nondigit = c;
14079  continue;
14080  }
14081  if (c < '0' || c > '9') break;
14082  if (c > '7') goto invalid_octal;
14083  nondigit = 0;
14084  tokadd(c);
14085  } while ((c = nextc()) != -1);
14086  if (toklen() > start) {
14087  pushback(c);
14088  tokfix();
14089  if (nondigit) goto trailing_uc;
14091  return set_integer_literal(rb_cstr_to_inum(tok(), 8, FALSE), suffix);
14092  }
14093  if (nondigit) {
14094  pushback(c);
14095  goto trailing_uc;
14096  }
14097  }
14098  if (c > '7' && c <= '9') {
14099  invalid_octal:
14100  yyerror("Invalid octal digit");
14101  }
14102  else if (c == '.' || c == 'e' || c == 'E') {
14103  tokadd('0');
14104  }
14105  else {
14106  pushback(c);
14108  return set_integer_literal(INT2FIX(0), suffix);
14109  }
14110  }
14111 
14112  for (;;) {
14113  switch (c) {
14114  case '0': case '1': case '2': case '3': case '4':
14115  case '5': case '6': case '7': case '8': case '9':
14116  nondigit = 0;
14117  tokadd(c);
14118  break;
14119 
14120  case '.':
14121  if (nondigit) goto trailing_uc;
14122  if (seen_point || seen_e) {
14123  goto decode_num;
14124  }
14125  else {
14126  int c0 = nextc();
14127  if (c0 == -1 || !ISDIGIT(c0)) {
14128  pushback(c0);
14129  goto decode_num;
14130  }
14131  c = c0;
14132  }
14133  seen_point = toklen();
14134  tokadd('.');
14135  tokadd(c);
14136  is_float++;
14137  nondigit = 0;
14138  break;
14139 
14140  case 'e':
14141  case 'E':
14142  if (nondigit) {
14143  pushback(c);
14144  c = nondigit;
14145  goto decode_num;
14146  }
14147  if (seen_e) {
14148  goto decode_num;
14149  }
14150  nondigit = c;
14151  c = nextc();
14152  if (c != '-' && c != '+' && !ISDIGIT(c)) {
14153  pushback(c);
14154  nondigit = 0;
14155  goto decode_num;
14156  }
14157  tokadd(nondigit);
14158  seen_e++;
14159  is_float++;
14160  tokadd(c);
14161  nondigit = (c == '-' || c == '+') ? c : 0;
14162  break;
14163 
14164  case '_': /* `_' in number just ignored */
14165  if (nondigit) goto decode_num;
14166  nondigit = c;
14167  break;
14168 
14169  default:
14170  goto decode_num;
14171  }
14172  c = nextc();
14173  }
14174 
14175  decode_num:
14176  pushback(c);
14177  if (nondigit) {
14178  char tmp[30];
14179  trailing_uc:
14180  snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
14181  yyerror(tmp);
14182  }
14183  tokfix();
14184  if (is_float) {
14185  int type = tFLOAT;
14186  VALUE v;
14187 
14188  suffix = number_literal_suffix(seen_e ? NUM_SUFFIX_I : NUM_SUFFIX_ALL);
14189  if (suffix & NUM_SUFFIX_R) {
14190  char *point = &tok()[seen_point];
14191  size_t fraclen = toklen()-seen_point-1;
14192  type = tRATIONAL;
14193  memmove(point, point+1, fraclen+1);
14194  v = rb_cstr_to_inum(tok(), 10, FALSE);
14195  v = rb_rational_new(v, rb_int_positive_pow(10, fraclen));
14196  }
14197  else {
14198  double d = strtod(tok(), 0);
14199  if (errno == ERANGE) {
14200  rb_warningS("Float %s out of range", tok());
14201  errno = 0;
14202  }
14203  v = DBL2NUM(d);
14204  }
14205  return set_number_literal(v, type, suffix);
14206  }
14208  return set_integer_literal(rb_cstr_to_inum(tok(), 10, FALSE), suffix);
14209  }
14210 
14211  case ')':
14212  case ']':
14213  paren_nest--;
14214  case '}':
14215  COND_LEXPOP();
14216  CMDARG_LEXPOP();
14217  if (c == ')')
14218  lex_state = EXPR_ENDFN;
14219  else
14220  lex_state = EXPR_ENDARG;
14221  if (c == '}') {
14222  if (!brace_nest--) c = tSTRING_DEND;
14223  }
14224  return c;
14225 
14226  case ':':
14227  c = nextc();
14228  if (c == ':') {
14229  if (IS_BEG() || IS_lex_state(EXPR_CLASS) || IS_SPCARG(-1)) {
14230  lex_state = EXPR_BEG;
14231  return tCOLON3;
14232  }
14233  lex_state = EXPR_DOT;
14234  return tCOLON2;
14235  }
14236  if (IS_END() || ISSPACE(c)) {
14237  pushback(c);
14238  warn_balanced(":", "symbol literal");
14239  lex_state = EXPR_BEG;
14240  return ':';
14241  }
14242  switch (c) {
14243  case '\'':
14244  lex_strterm = NEW_STRTERM(str_ssym, c, 0);
14245  break;
14246  case '"':
14247  lex_strterm = NEW_STRTERM(str_dsym, c, 0);
14248  break;
14249  default:
14250  pushback(c);
14251  break;
14252  }
14253  lex_state = EXPR_FNAME;
14254  return tSYMBEG;
14255 
14256  case '/':
14257  if (IS_lex_state(EXPR_BEG_ANY)) {
14258  lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
14259  return tREGEXP_BEG;
14260  }
14261  if ((c = nextc()) == '=') {
14262  set_yylval_id('/');
14263  lex_state = EXPR_BEG;
14264  return tOP_ASGN;
14265  }
14266  pushback(c);
14267  if (IS_SPCARG(c)) {
14268  (void)arg_ambiguous();
14269  lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
14270  return tREGEXP_BEG;
14271  }
14272  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14273  warn_balanced("/", "regexp literal");
14274  return '/';
14275 
14276  case '^':
14277  if ((c = nextc()) == '=') {
14278  set_yylval_id('^');
14279  lex_state = EXPR_BEG;
14280  return tOP_ASGN;
14281  }
14282  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14283  pushback(c);
14284  return '^';
14285 
14286  case ';':
14287  lex_state = EXPR_BEG;
14288  command_start = TRUE;
14289  return ';';
14290 
14291  case ',':
14292  lex_state = EXPR_BEG;
14293  return ',';
14294 
14295  case '~':
14296  if (IS_AFTER_OPERATOR()) {
14297  if ((c = nextc()) != '@') {
14298  pushback(c);
14299  }
14300  lex_state = EXPR_ARG;
14301  }
14302  else {
14303  lex_state = EXPR_BEG;
14304  }
14305  return '~';
14306 
14307  case '(':
14308  if (IS_BEG()) {
14309  c = tLPAREN;
14310  }
14311  else if (IS_SPCARG(-1)) {
14312  c = tLPAREN_ARG;
14313  }
14314  paren_nest++;
14315  COND_PUSH(0);
14316  CMDARG_PUSH(0);
14317  lex_state = EXPR_BEG;
14318  return c;
14319 
14320  case '[':
14321  paren_nest++;
14322  if (IS_AFTER_OPERATOR()) {
14323  lex_state = EXPR_ARG;
14324  if ((c = nextc()) == ']') {
14325  if ((c = nextc()) == '=') {
14326  return tASET;
14327  }
14328  pushback(c);
14329  return tAREF;
14330  }
14331  pushback(c);
14332  return '[';
14333  }
14334  else if (IS_BEG()) {
14335  c = tLBRACK;
14336  }
14337  else if (IS_ARG() && space_seen) {
14338  c = tLBRACK;
14339  }
14340  lex_state = EXPR_BEG;
14341  COND_PUSH(0);
14342  CMDARG_PUSH(0);
14343  return c;
14344 
14345  case '{':
14346  ++brace_nest;
14347  if (lpar_beg && lpar_beg == paren_nest) {
14348  lex_state = EXPR_BEG;
14349  lpar_beg = 0;
14350  --paren_nest;
14351  COND_PUSH(0);
14352  CMDARG_PUSH(0);
14353  return tLAMBEG;
14354  }
14355  if (IS_ARG() || IS_lex_state(EXPR_END | EXPR_ENDFN))
14356  c = '{'; /* block (primary) */
14357  else if (IS_lex_state(EXPR_ENDARG))
14358  c = tLBRACE_ARG; /* block (expr) */
14359  else
14360  c = tLBRACE; /* hash */
14361  COND_PUSH(0);
14362  CMDARG_PUSH(0);
14363  lex_state = EXPR_BEG;
14364  if (c != tLBRACE) command_start = TRUE;
14365  return c;
14366 
14367  case '\\':
14368  c = nextc();
14369  if (c == '\n') {
14370  space_seen = 1;
14371 #ifdef RIPPER
14372  ripper_dispatch_scan_event(parser, tSP);
14373 #endif
14374  goto retry; /* skip \\n */
14375  }
14376  pushback(c);
14377  return '\\';
14378 
14379  case '%':
14380  if (IS_lex_state(EXPR_BEG_ANY)) {
14381  int term;
14382  int paren;
14383 
14384  c = nextc();
14385  quotation:
14386  if (c == -1 || !ISALNUM(c)) {
14387  term = c;
14388  c = 'Q';
14389  }
14390  else {
14391  term = nextc();
14392  if (rb_enc_isalnum(term, current_enc) || !parser_isascii()) {
14393  yyerror("unknown type of %string");
14394  return 0;
14395  }
14396  }
14397  if (c == -1 || term == -1) {
14398  compile_error(PARSER_ARG "unterminated quoted string meets end of file");
14399  return 0;
14400  }
14401  paren = term;
14402  if (term == '(') term = ')';
14403  else if (term == '[') term = ']';
14404  else if (term == '{') term = '}';
14405  else if (term == '<') term = '>';
14406  else paren = 0;
14407 
14408  switch (c) {
14409  case 'Q':
14410  lex_strterm = NEW_STRTERM(str_dquote, term, paren);
14411  return tSTRING_BEG;
14412 
14413  case 'q':
14414  lex_strterm = NEW_STRTERM(str_squote, term, paren);
14415  return tSTRING_BEG;
14416 
14417  case 'W':
14418  lex_strterm = NEW_STRTERM(str_dword, term, paren);
14419  do {c = nextc();} while (ISSPACE(c));
14420  pushback(c);
14421  return tWORDS_BEG;
14422 
14423  case 'w':
14424  lex_strterm = NEW_STRTERM(str_sword, term, paren);
14425  do {c = nextc();} while (ISSPACE(c));
14426  pushback(c);
14427  return tQWORDS_BEG;
14428 
14429  case 'I':
14430  lex_strterm = NEW_STRTERM(str_dword, term, paren);
14431  do {c = nextc();} while (ISSPACE(c));
14432  pushback(c);
14433  return tSYMBOLS_BEG;
14434 
14435  case 'i':
14436  lex_strterm = NEW_STRTERM(str_sword, term, paren);
14437  do {c = nextc();} while (ISSPACE(c));
14438  pushback(c);
14439  return tQSYMBOLS_BEG;
14440 
14441  case 'x':
14442  lex_strterm = NEW_STRTERM(str_xquote, term, paren);
14443  return tXSTRING_BEG;
14444 
14445  case 'r':
14446  lex_strterm = NEW_STRTERM(str_regexp, term, paren);
14447  return tREGEXP_BEG;
14448 
14449  case 's':
14450  lex_strterm = NEW_STRTERM(str_ssym, term, paren);
14451  lex_state = EXPR_FNAME;
14452  return tSYMBEG;
14453 
14454  default:
14455  yyerror("unknown type of %string");
14456  return 0;
14457  }
14458  }
14459  if ((c = nextc()) == '=') {
14460  set_yylval_id('%');
14461  lex_state = EXPR_BEG;
14462  return tOP_ASGN;
14463  }
14464  if (IS_SPCARG(c)) {
14465  goto quotation;
14466  }
14467  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14468  pushback(c);
14469  warn_balanced("%%", "string literal");
14470  return '%';
14471 
14472  case '$':
14473  lex_state = EXPR_END;
14474  newtok();
14475  c = nextc();
14476  switch (c) {
14477  case '_': /* $_: last read line string */
14478  c = nextc();
14479  if (parser_is_identchar()) {
14480  tokadd('$');
14481  tokadd('_');
14482  break;
14483  }
14484  pushback(c);
14485  c = '_';
14486  /* fall through */
14487  case '~': /* $~: match-data */
14488  case '*': /* $*: argv */
14489  case '$': /* $$: pid */
14490  case '?': /* $?: last status */
14491  case '!': /* $!: error string */
14492  case '@': /* $@: error position */
14493  case '/': /* $/: input record separator */
14494  case '\\': /* $\: output record separator */
14495  case ';': /* $;: field separator */
14496  case ',': /* $,: output field separator */
14497  case '.': /* $.: last read line number */
14498  case '=': /* $=: ignorecase */
14499  case ':': /* $:: load path */
14500  case '<': /* $<: reading filename */
14501  case '>': /* $>: default output handle */
14502  case '\"': /* $": already loaded files */
14503  tokadd('$');
14504  tokadd(c);
14505  goto gvar;
14506 
14507  case '-':
14508  tokadd('$');
14509  tokadd(c);
14510  c = nextc();
14511  if (parser_is_identchar()) {
14512  if (tokadd_mbchar(c) == -1) return 0;
14513  }
14514  else {
14515  pushback(c);
14516  pushback('-');
14517  return '$';
14518  }
14519  gvar:
14521  return tGVAR;
14522 
14523  case '&': /* $&: last match */
14524  case '`': /* $`: string before last match */
14525  case '\'': /* $': string after last match */
14526  case '+': /* $+: string matches last paren. */
14527  if (IS_lex_state_for(last_state, EXPR_FNAME)) {
14528  tokadd('$');
14529  tokadd(c);
14530  goto gvar;
14531  }
14533  return tBACK_REF;
14534 
14535  case '1': case '2': case '3':
14536  case '4': case '5': case '6':
14537  case '7': case '8': case '9':
14538  tokadd('$');
14539  do {
14540  tokadd(c);
14541  c = nextc();
14542  } while (c != -1 && ISDIGIT(c));
14543  pushback(c);
14544  if (IS_lex_state_for(last_state, EXPR_FNAME)) goto gvar;
14545  tokfix();
14546  set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
14547  return tNTH_REF;
14548 
14549  default:
14550  if (!parser_is_identchar()) {
14551  pushback(c);
14552  compile_error(PARSER_ARG "`$%c' is not allowed as a global variable name", c);
14553  return 0;
14554  }
14555  case '0':
14556  tokadd('$');
14557  }
14558  break;
14559 
14560  case '@':
14561  c = nextc();
14562  newtok();
14563  tokadd('@');
14564  if (c == '@') {
14565  tokadd('@');
14566  c = nextc();
14567  }
14568  if (c != -1 && (ISDIGIT(c) || !parser_is_identchar())) {
14569  pushback(c);
14570  if (tokidx == 1) {
14571  compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
14572  }
14573  else {
14574  compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
14575  }
14576  return 0;
14577  }
14578  break;
14579 
14580  case '_':
14581  if (was_bol() && whole_match_p("__END__", 7, 0)) {
14582  ruby__end__seen = 1;
14583  parser->eofp = Qtrue;
14584 #ifndef RIPPER
14585  return -1;
14586 #else
14587  lex_goto_eol(parser);
14588  ripper_dispatch_scan_event(parser, k__END__);
14589  return 0;
14590 #endif
14591  }
14592  newtok();
14593  break;
14594 
14595  default:
14596  if (!parser_is_identchar()) {
14597  compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c);
14598  goto retry;
14599  }
14600 
14601  newtok();
14602  break;
14603  }
14604 
14605  mb = ENC_CODERANGE_7BIT;
14606  do {
14607  if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
14608  if (tokadd_mbchar(c) == -1) return 0;
14609  c = nextc();
14610  } while (parser_is_identchar());
14611  switch (tok()[0]) {
14612  case '@': case '$':
14613  pushback(c);
14614  break;
14615  default:
14616  if ((c == '!' || c == '?') && !peek('=')) {
14617  tokadd(c);
14618  }
14619  else {
14620  pushback(c);
14621  }
14622  }
14623  tokfix();
14624 
14625  {
14626  int result = 0;
14627 
14628  last_state = lex_state;
14629  switch (tok()[0]) {
14630  case '$':
14631  lex_state = EXPR_END;
14632  result = tGVAR;
14633  break;
14634  case '@':
14635  lex_state = EXPR_END;
14636  if (tok()[1] == '@')
14637  result = tCVAR;
14638  else
14639  result = tIVAR;
14640  break;
14641 
14642  default:
14643  if (toklast() == '!' || toklast() == '?') {
14644  result = tFID;
14645  }
14646  else {
14647  if (IS_lex_state(EXPR_FNAME)) {
14648  if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
14649  (!peek('=') || (peek_n('>', 1)))) {
14650  result = tIDENTIFIER;
14651  tokadd(c);
14652  tokfix();
14653  }
14654  else {
14655  pushback(c);
14656  }
14657  }
14658  if (result == 0 && ISUPPER(tok()[0])) {
14659  result = tCONSTANT;
14660  }
14661  else {
14662  result = tIDENTIFIER;
14663  }
14664  }
14665 
14666  if (IS_LABEL_POSSIBLE()) {
14667  if (IS_LABEL_SUFFIX(0)) {
14668  lex_state = EXPR_LABELARG;
14669  nextc();
14671  return tLABEL;
14672  }
14673  }
14674  if (mb == ENC_CODERANGE_7BIT && !IS_lex_state(EXPR_DOT)) {
14675  const struct kwtable *kw;
14676 
14677  /* See if it is a reserved word. */
14678  kw = rb_reserved_word(tok(), toklen());
14679  if (kw) {
14680  enum lex_state_e state = lex_state;
14681  lex_state = kw->state;
14682  if (IS_lex_state_for(state, EXPR_FNAME)) {
14684  return kw->id[0];
14685  }
14686  if (IS_lex_state(EXPR_BEG)) {
14687  command_start = TRUE;
14688  }
14689  if (kw->id[0] == keyword_do) {
14690  if (lpar_beg && lpar_beg == paren_nest) {
14691  lpar_beg = 0;
14692  --paren_nest;
14693  return keyword_do_LAMBDA;
14694  }
14695  if (COND_P()) return keyword_do_cond;
14696  if (CMDARG_P() && !IS_lex_state_for(state, EXPR_CMDARG))
14697  return keyword_do_block;
14698  if (IS_lex_state_for(state, (EXPR_BEG | EXPR_ENDARG)))
14699  return keyword_do_block;
14700  return keyword_do;
14701  }
14702  if (IS_lex_state_for(state, (EXPR_BEG | EXPR_VALUE | EXPR_LABELARG)))
14703  return kw->id[0];
14704  else {
14705  if (kw->id[0] != kw->id[1])
14706  lex_state = EXPR_BEG;
14707  return kw->id[1];
14708  }
14709  }
14710  }
14711 
14712  if (IS_lex_state(EXPR_BEG_ANY | EXPR_ARG_ANY | EXPR_DOT)) {
14713  if (cmd_state) {
14714  lex_state = EXPR_CMDARG;
14715  }
14716  else {
14717  lex_state = EXPR_ARG;
14718  }
14719  }
14720  else if (lex_state == EXPR_FNAME) {
14721  lex_state = EXPR_ENDFN;
14722  }
14723  else {
14724  lex_state = EXPR_END;
14725  }
14726  }
14727  {
14728  ID ident = TOK_INTERN(!ENC_SINGLE(mb));
14729 
14730  set_yylval_name(ident);
14731  if (!IS_lex_state_for(last_state, EXPR_DOT|EXPR_FNAME) &&
14732  is_local_id(ident) && lvar_defined(ident)) {
14733  lex_state = EXPR_END;
14734  }
14735  }
14736  return result;
14737  }
14738 }
14739 
14740 #if YYPURE
14741 static int
14742 yylex(void *lval, void *p)
14743 #else
14744 yylex(void *p)
14745 #endif
14746 {
14747  struct parser_params *parser = (struct parser_params*)p;
14748  int t;
14749 
14750 #if YYPURE
14751  parser->parser_yylval = lval;
14752  parser->parser_yylval->val = Qundef;
14753 #endif
14754  t = parser_yylex(parser);
14755 #ifdef RIPPER
14756  if (!NIL_P(parser->delayed)) {
14757  ripper_dispatch_delayed_token(parser, t);
14758  return t;
14759  }
14760  if (t != 0)
14761  ripper_dispatch_scan_event(parser, t);
14762 #endif
14763 
14764  return t;
14765 }
14766 
14767 #ifndef RIPPER
14768 static NODE*
14769 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
14770 {
14771  NODE *n = (rb_node_newnode)(type, a0, a1, a2);
14773  return n;
14774 }
14775 
14776 static enum node_type
14777 nodetype(NODE *node) /* for debug */
14778 {
14779  return (enum node_type)nd_type(node);
14780 }
14781 
14782 static int
14784 {
14785  return nd_line(node);
14786 }
14787 
14788 static NODE*
14790 {
14791  if (node) {
14792  node = remove_begin(node);
14793  node->flags |= NODE_FL_NEWLINE;
14794  }
14795  return node;
14796 }
14797 
14798 static void
14799 fixpos(NODE *node, NODE *orig)
14800 {
14801  if (!node) return;
14802  if (!orig) return;
14803  if (orig == (NODE*)1) return;
14804  nd_set_line(node, nd_line(orig));
14805 }
14806 
14807 static void
14808 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
14809 {
14810  rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
14811 }
14812 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg))
14813 
14814 static void
14815 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
14816 {
14817  rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
14818 }
14819 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg))
14820 
14821 static NODE*
14822 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
14823 {
14824  NODE *end, *h = head, *nd;
14825 
14826  if (tail == 0) return head;
14827 
14828  if (h == 0) return tail;
14829  switch (nd_type(h)) {
14830  case NODE_LIT:
14831  case NODE_STR:
14832  case NODE_SELF:
14833  case NODE_TRUE:
14834  case NODE_FALSE:
14835  case NODE_NIL:
14836  parser_warning(h, "unused literal ignored");
14837  return tail;
14838  default:
14839  h = end = NEW_BLOCK(head);
14840  end->nd_end = end;
14841  fixpos(end, head);
14842  head = end;
14843  break;
14844  case NODE_BLOCK:
14845  end = h->nd_end;
14846  break;
14847  }
14848 
14849  nd = end->nd_head;
14850  switch (nd_type(nd)) {
14851  case NODE_RETURN:
14852  case NODE_BREAK:
14853  case NODE_NEXT:
14854  case NODE_REDO:
14855  case NODE_RETRY:
14856  if (RTEST(ruby_verbose)) {
14857  parser_warning(tail, "statement not reached");
14858  }
14859  break;
14860 
14861  default:
14862  break;
14863  }
14864 
14865  if (nd_type(tail) != NODE_BLOCK) {
14866  tail = NEW_BLOCK(tail);
14867  tail->nd_end = tail;
14868  }
14869  end->nd_next = tail;
14870  h->nd_end = tail->nd_end;
14871  return head;
14872 }
14873 
14874 /* append item to the list */
14875 static NODE*
14876 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
14877 {
14878  NODE *last;
14879 
14880  if (list == 0) return NEW_LIST(item);
14881  if (list->nd_next) {
14882  last = list->nd_next->nd_end;
14883  }
14884  else {
14885  last = list;
14886  }
14887 
14888  list->nd_alen += 1;
14889  last->nd_next = NEW_LIST(item);
14890  list->nd_next->nd_end = last->nd_next;
14891  return list;
14892 }
14893 
14894 /* concat two lists */
14895 static NODE*
14896 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14897 {
14898  NODE *last;
14899 
14900  if (head->nd_next) {
14901  last = head->nd_next->nd_end;
14902  }
14903  else {
14904  last = head;
14905  }
14906 
14907  head->nd_alen += tail->nd_alen;
14908  last->nd_next = tail;
14909  if (tail->nd_next) {
14910  head->nd_next->nd_end = tail->nd_next->nd_end;
14911  }
14912  else {
14913  head->nd_next->nd_end = tail;
14914  }
14915 
14916  return head;
14917 }
14918 
14919 static int
14921 {
14922  if (NIL_P(tail)) return 1;
14923  if (!rb_enc_compatible(head, tail)) {
14924  compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
14925  rb_enc_name(rb_enc_get(head)),
14926  rb_enc_name(rb_enc_get(tail)));
14927  rb_str_resize(head, 0);
14928  rb_str_resize(tail, 0);
14929  return 0;
14930  }
14931  rb_str_buf_append(head, tail);
14932  return 1;
14933 }
14934 
14935 /* concat two string literals */
14936 static NODE *
14938 {
14939  enum node_type htype;
14940  NODE *headlast;
14941  VALUE lit;
14942 
14943  if (!head) return tail;
14944  if (!tail) return head;
14945 
14946  htype = nd_type(head);
14947  if (htype == NODE_EVSTR) {
14948  NODE *node = NEW_DSTR(Qnil);
14949  head = list_append(node, head);
14950  htype = NODE_DSTR;
14951  }
14952  switch (nd_type(tail)) {
14953  case NODE_STR:
14954  if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
14955  nd_type(headlast) == NODE_STR) {
14956  htype = NODE_STR;
14957  lit = headlast->nd_lit;
14958  }
14959  else {
14960  lit = head->nd_lit;
14961  }
14962  if (htype == NODE_STR) {
14963  if (!literal_concat0(parser, lit, tail->nd_lit)) {
14964  error:
14965  rb_gc_force_recycle((VALUE)head);
14966  rb_gc_force_recycle((VALUE)tail);
14967  return 0;
14968  }
14969  rb_gc_force_recycle((VALUE)tail);
14970  }
14971  else {
14972  list_append(head, tail);
14973  }
14974  break;
14975 
14976  case NODE_DSTR:
14977  if (htype == NODE_STR) {
14978  if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
14979  goto error;
14980  tail->nd_lit = head->nd_lit;
14981  rb_gc_force_recycle((VALUE)head);
14982  head = tail;
14983  }
14984  else if (NIL_P(tail->nd_lit)) {
14985  append:
14986  head->nd_alen += tail->nd_alen - 1;
14987  head->nd_next->nd_end->nd_next = tail->nd_next;
14988  head->nd_next->nd_end = tail->nd_next->nd_end;
14989  rb_gc_force_recycle((VALUE)tail);
14990  }
14991  else if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
14992  nd_type(headlast) == NODE_STR) {
14993  lit = headlast->nd_lit;
14994  if (!literal_concat0(parser, lit, tail->nd_lit))
14995  goto error;
14996  tail->nd_lit = Qnil;
14997  goto append;
14998  }
14999  else {
15000  nd_set_type(tail, NODE_ARRAY);
15001  tail->nd_head = NEW_STR(tail->nd_lit);
15002  list_concat(head, tail);
15003  }
15004  break;
15005 
15006  case NODE_EVSTR:
15007  if (htype == NODE_STR) {
15008  nd_set_type(head, NODE_DSTR);
15009  head->nd_alen = 1;
15010  }
15011  list_append(head, tail);
15012  break;
15013  }
15014  return head;
15015 }
15016 
15017 static NODE *
15018 evstr2dstr_gen(struct parser_params *parser, NODE *node)
15019 {
15020  if (nd_type(node) == NODE_EVSTR) {
15021  node = list_append(NEW_DSTR(Qnil), node);
15022  }
15023  return node;
15024 }
15025 
15026 static NODE *
15027 new_evstr_gen(struct parser_params *parser, NODE *node)
15028 {
15029  NODE *head = node;
15030 
15031  if (node) {
15032  switch (nd_type(node)) {
15033  case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
15034  return node;
15035  }
15036  }
15037  return NEW_EVSTR(head);
15038 }
15039 
15040 static NODE *
15041 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
15042 {
15043  value_expr(recv);
15044  value_expr(arg1);
15045  return NEW_CALL(recv, id, NEW_LIST(arg1));
15046 }
15047 
15048 static NODE *
15049 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
15050 {
15051  value_expr(recv);
15052  return NEW_CALL(recv, id, 0);
15053 }
15054 
15055 static NODE*
15056 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15057 {
15058  value_expr(node1);
15059  value_expr(node2);
15060  if (node1) {
15061  switch (nd_type(node1)) {
15062  case NODE_DREGX:
15063  case NODE_DREGX_ONCE:
15064  return NEW_MATCH2(node1, node2);
15065 
15066  case NODE_LIT:
15067  if (RB_TYPE_P(node1->nd_lit, T_REGEXP)) {
15068  return NEW_MATCH2(node1, node2);
15069  }
15070  }
15071  }
15072 
15073  if (node2) {
15074  switch (nd_type(node2)) {
15075  case NODE_DREGX:
15076  case NODE_DREGX_ONCE:
15077  return NEW_MATCH3(node2, node1);
15078 
15079  case NODE_LIT:
15080  if (RB_TYPE_P(node2->nd_lit, T_REGEXP)) {
15081  return NEW_MATCH3(node2, node1);
15082  }
15083  }
15084  }
15085 
15086  return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
15087 }
15088 
15089 static NODE*
15090 gettable_gen(struct parser_params *parser, ID id)
15091 {
15092  switch (id) {
15093  case keyword_self:
15094  return NEW_SELF();
15095  case keyword_nil:
15096  return NEW_NIL();
15097  case keyword_true:
15098  return NEW_TRUE();
15099  case keyword_false:
15100  return NEW_FALSE();
15101  case keyword__FILE__:
15103  case keyword__LINE__:
15104  return NEW_LIT(INT2FIX(tokline));
15105  case keyword__ENCODING__:
15107  }
15108  switch (id_type(id)) {
15109  case ID_LOCAL:
15110  if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
15111  if (local_id(id)) return NEW_LVAR(id);
15112  /* method call without arguments */
15113  return NEW_VCALL(id);
15114  case ID_GLOBAL:
15115  return NEW_GVAR(id);
15116  case ID_INSTANCE:
15117  return NEW_IVAR(id);
15118  case ID_CONST:
15119  return NEW_CONST(id);
15120  case ID_CLASS:
15121  return NEW_CVAR(id);
15122  }
15123  compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
15124  return 0;
15125 }
15126 #else /* !RIPPER */
15127 static int
15128 id_is_var_gen(struct parser_params *parser, ID id)
15129 {
15130  if (is_notop_id(id)) {
15131  switch (id & ID_SCOPE_MASK) {
15132  case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
15133  return 1;
15134  case ID_LOCAL:
15135  if (dyna_in_block() && dvar_defined(id)) return 1;
15136  if (local_id(id)) return 1;
15137  /* method call without arguments */
15138  return 0;
15139  }
15140  }
15141  compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
15142  return 0;
15143 }
15144 #endif /* !RIPPER */
15145 
15146 #if PARSER_DEBUG
15147 static const char *
15148 lex_state_name(enum lex_state_e state)
15149 {
15150  static const char names[][12] = {
15151  "EXPR_BEG", "EXPR_END", "EXPR_ENDARG", "EXPR_ENDFN", "EXPR_ARG",
15152  "EXPR_CMDARG", "EXPR_MID", "EXPR_FNAME", "EXPR_DOT", "EXPR_CLASS",
15153  "EXPR_VALUE",
15154  };
15155 
15156  if ((unsigned)state & ~(~0u << EXPR_MAX_STATE))
15157  return names[ffs(state)];
15158  return NULL;
15159 }
15160 #endif
15161 
15162 #ifdef RIPPER
15163 static VALUE
15164 assignable_gen(struct parser_params *parser, VALUE lhs)
15165 #else
15166 static NODE*
15167 assignable_gen(struct parser_params *parser, ID id, NODE *val)
15168 #endif
15169 {
15170 #ifdef RIPPER
15171  ID id = get_id(lhs);
15172 # define assignable_result(x) get_value(lhs)
15173 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
15174 #else
15175 # define assignable_result(x) (x)
15176 #endif
15177  if (!id) return assignable_result(0);
15178  switch (id) {
15179  case keyword_self:
15180  yyerror("Can't change the value of self");
15181  goto error;
15182  case keyword_nil:
15183  yyerror("Can't assign to nil");
15184  goto error;
15185  case keyword_true:
15186  yyerror("Can't assign to true");
15187  goto error;
15188  case keyword_false:
15189  yyerror("Can't assign to false");
15190  goto error;
15191  case keyword__FILE__:
15192  yyerror("Can't assign to __FILE__");
15193  goto error;
15194  case keyword__LINE__:
15195  yyerror("Can't assign to __LINE__");
15196  goto error;
15197  case keyword__ENCODING__:
15198  yyerror("Can't assign to __ENCODING__");
15199  goto error;
15200  }
15201  switch (id_type(id)) {
15202  case ID_LOCAL:
15203  if (dyna_in_block()) {
15204  if (dvar_curr(id)) {
15205  return assignable_result(NEW_DASGN_CURR(id, val));
15206  }
15207  else if (dvar_defined(id)) {
15208  return assignable_result(NEW_DASGN(id, val));
15209  }
15210  else if (local_id(id)) {
15211  return assignable_result(NEW_LASGN(id, val));
15212  }
15213  else {
15214  dyna_var(id);
15215  return assignable_result(NEW_DASGN_CURR(id, val));
15216  }
15217  }
15218  else {
15219  if (!local_id(id)) {
15220  local_var(id);
15221  }
15222  return assignable_result(NEW_LASGN(id, val));
15223  }
15224  break;
15225  case ID_GLOBAL:
15226  return assignable_result(NEW_GASGN(id, val));
15227  case ID_INSTANCE:
15228  return assignable_result(NEW_IASGN(id, val));
15229  case ID_CONST:
15230  if (!in_def && !in_single)
15231  return assignable_result(NEW_CDECL(id, val, 0));
15232  yyerror("dynamic constant assignment");
15233  break;
15234  case ID_CLASS:
15235  return assignable_result(NEW_CVASGN(id, val));
15236  default:
15237  compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
15238  }
15239  error:
15240  return assignable_result(0);
15241 #undef assignable_result
15242 #undef parser_yyerror
15243 }
15244 
15245 static int
15247 {
15248  VALUE s;
15249  if (name == idUScore) return 1;
15250  if (!is_local_id(name)) return 0;
15251  s = rb_id2str(name);
15252  if (!s) return 0;
15253  return RSTRING_PTR(s)[0] == '_';
15254 }
15255 
15256 #define LVAR_USED ((ID)1 << (sizeof(ID) * CHAR_BIT - 1))
15257 
15258 static int
15259 shadowing_lvar_0(struct parser_params *parser, ID name)
15260 {
15261  if (is_private_local_id(name)) return 1;
15262  if (dyna_in_block()) {
15263  if (dvar_curr(name)) {
15264  yyerror("duplicated argument name");
15265  }
15266  else if (dvar_defined_get(name) || local_id(name)) {
15267  rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
15268  vtable_add(lvtbl->vars, name);
15269  if (lvtbl->used) {
15271  }
15272  return 0;
15273  }
15274  }
15275  else {
15276  if (local_id(name)) {
15277  yyerror("duplicated argument name");
15278  }
15279  }
15280  return 1;
15281 }
15282 
15283 static ID
15284 shadowing_lvar_gen(struct parser_params *parser, ID name)
15285 {
15286  shadowing_lvar_0(parser, name);
15287  return name;
15288 }
15289 
15290 static void
15291 new_bv_gen(struct parser_params *parser, ID name)
15292 {
15293  if (!name) return;
15294  if (!is_local_id(name)) {
15295  compile_error(PARSER_ARG "invalid local variable - %s",
15296  rb_id2name(name));
15297  return;
15298  }
15299  if (!shadowing_lvar_0(parser, name)) return;
15300  dyna_var(name);
15301 }
15302 
15303 #ifndef RIPPER
15304 static NODE *
15305 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
15306 {
15307  if (recv && nd_type(recv) == NODE_SELF)
15308  recv = (NODE *)1;
15309  return NEW_ATTRASGN(recv, tASET, idx);
15310 }
15311 
15312 static void
15313 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15314 {
15315  if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
15316  compile_error(PARSER_ARG "both block arg and actual block given");
15317  }
15318 }
15319 
15320 static const char id_type_names[][9] = {
15321  "LOCAL",
15322  "INSTANCE",
15323  "", /* INSTANCE2 */
15324  "GLOBAL",
15325  "ATTRSET",
15326  "CONST",
15327  "CLASS",
15328  "JUNK",
15329 };
15330 
15331 ID
15333 {
15334  if (!is_notop_id(id)) {
15335  switch (id) {
15336  case tAREF: case tASET:
15337  return tASET; /* only exception */
15338  }
15339  rb_name_error(id, "cannot make operator ID :%s attrset", rb_id2name(id));
15340  }
15341  else {
15342  int scope = (int)(id & ID_SCOPE_MASK);
15343  switch (scope) {
15344  case ID_LOCAL: case ID_INSTANCE: case ID_GLOBAL:
15345  case ID_CONST: case ID_CLASS: case ID_JUNK:
15346  break;
15347  case ID_ATTRSET:
15348  return id;
15349  default:
15350  rb_name_error(id, "cannot make %s ID %+"PRIsVALUE" attrset",
15351  id_type_names[scope], ID2SYM(id));
15352 
15353  }
15354  }
15355  id &= ~ID_SCOPE_MASK;
15356  id |= ID_ATTRSET;
15357  return id;
15358 }
15359 
15360 static NODE *
15361 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
15362 {
15363  if (recv && nd_type(recv) == NODE_SELF)
15364  recv = (NODE *)1;
15365  return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
15366 }
15367 
15368 static void
15370 {
15371  switch (nd_type(node)) {
15372  case NODE_NTH_REF:
15373  compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
15374  break;
15375  case NODE_BACK_REF:
15376  compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
15377  break;
15378  }
15379 }
15380 
15381 static NODE *
15382 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15383 {
15384  if (!node2) return node1;
15385  switch (nd_type(node1)) {
15386  case NODE_BLOCK_PASS:
15387  if (node1->nd_head)
15388  node1->nd_head = arg_concat(node1->nd_head, node2);
15389  else
15390  node1->nd_head = NEW_LIST(node2);
15391  return node1;
15392  case NODE_ARGSPUSH:
15393  if (nd_type(node2) != NODE_ARRAY) break;
15394  node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
15395  nd_set_type(node1, NODE_ARGSCAT);
15396  return node1;
15397  case NODE_ARGSCAT:
15398  if (nd_type(node2) != NODE_ARRAY ||
15399  nd_type(node1->nd_body) != NODE_ARRAY) break;
15400  node1->nd_body = list_concat(node1->nd_body, node2);
15401  return node1;
15402  }
15403  return NEW_ARGSCAT(node1, node2);
15404 }
15405 
15406 static NODE *
15407 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15408 {
15409  if (!node1) return NEW_LIST(node2);
15410  switch (nd_type(node1)) {
15411  case NODE_ARRAY:
15412  return list_append(node1, node2);
15413  case NODE_BLOCK_PASS:
15414  node1->nd_head = arg_append(node1->nd_head, node2);
15415  return node1;
15416  case NODE_ARGSPUSH:
15417  node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
15418  nd_set_type(node1, NODE_ARGSCAT);
15419  return node1;
15420  }
15421  return NEW_ARGSPUSH(node1, node2);
15422 }
15423 
15424 static NODE *
15426 {
15427  if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
15428  if (nd_type(node) == NODE_ARRAY) return node;
15429  return 0;
15430 }
15431 
15432 static NODE *
15433 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
15434 {
15435  if (!lhs) return 0;
15436 
15437  switch (nd_type(lhs)) {
15438  case NODE_GASGN:
15439  case NODE_IASGN:
15440  case NODE_IASGN2:
15441  case NODE_LASGN:
15442  case NODE_DASGN:
15443  case NODE_DASGN_CURR:
15444  case NODE_MASGN:
15445  case NODE_CDECL:
15446  case NODE_CVASGN:
15447  lhs->nd_value = rhs;
15448  break;
15449 
15450  case NODE_ATTRASGN:
15451  case NODE_CALL:
15452  lhs->nd_args = arg_append(lhs->nd_args, rhs);
15453  break;
15454 
15455  default:
15456  /* should not happen */
15457  break;
15458  }
15459 
15460  return lhs;
15461 }
15462 
15463 static int
15464 value_expr_gen(struct parser_params *parser, NODE *node)
15465 {
15466  int cond = 0;
15467 
15468  if (!node) {
15469  rb_warning0("empty expression");
15470  }
15471  while (node) {
15472  switch (nd_type(node)) {
15473  case NODE_RETURN:
15474  case NODE_BREAK:
15475  case NODE_NEXT:
15476  case NODE_REDO:
15477  case NODE_RETRY:
15478  if (!cond) yyerror("void value expression");
15479  /* or "control never reach"? */
15480  return FALSE;
15481 
15482  case NODE_BLOCK:
15483  while (node->nd_next) {
15484  node = node->nd_next;
15485  }
15486  node = node->nd_head;
15487  break;
15488 
15489  case NODE_BEGIN:
15490  node = node->nd_body;
15491  break;
15492 
15493  case NODE_IF:
15494  if (!node->nd_body) {
15495  node = node->nd_else;
15496  break;
15497  }
15498  else if (!node->nd_else) {
15499  node = node->nd_body;
15500  break;
15501  }
15502  if (!value_expr(node->nd_body)) return FALSE;
15503  node = node->nd_else;
15504  break;
15505 
15506  case NODE_AND:
15507  case NODE_OR:
15508  cond = 1;
15509  node = node->nd_2nd;
15510  break;
15511 
15512  default:
15513  return TRUE;
15514  }
15515  }
15516 
15517  return TRUE;
15518 }
15519 
15520 static void
15521 void_expr_gen(struct parser_params *parser, NODE *node)
15522 {
15523  const char *useless = 0;
15524 
15525  if (!RTEST(ruby_verbose)) return;
15526 
15527  if (!node) return;
15528  switch (nd_type(node)) {
15529  case NODE_CALL:
15530  switch (node->nd_mid) {
15531  case '+':
15532  case '-':
15533  case '*':
15534  case '/':
15535  case '%':
15536  case tPOW:
15537  case tUPLUS:
15538  case tUMINUS:
15539  case '|':
15540  case '^':
15541  case '&':
15542  case tCMP:
15543  case '>':
15544  case tGEQ:
15545  case '<':
15546  case tLEQ:
15547  case tEQ:
15548  case tNEQ:
15549  useless = rb_id2name(node->nd_mid);
15550  break;
15551  }
15552  break;
15553 
15554  case NODE_LVAR:
15555  case NODE_DVAR:
15556  case NODE_GVAR:
15557  case NODE_IVAR:
15558  case NODE_CVAR:
15559  case NODE_NTH_REF:
15560  case NODE_BACK_REF:
15561  useless = "a variable";
15562  break;
15563  case NODE_CONST:
15564  useless = "a constant";
15565  break;
15566  case NODE_LIT:
15567  case NODE_STR:
15568  case NODE_DSTR:
15569  case NODE_DREGX:
15570  case NODE_DREGX_ONCE:
15571  useless = "a literal";
15572  break;
15573  case NODE_COLON2:
15574  case NODE_COLON3:
15575  useless = "::";
15576  break;
15577  case NODE_DOT2:
15578  useless = "..";
15579  break;
15580  case NODE_DOT3:
15581  useless = "...";
15582  break;
15583  case NODE_SELF:
15584  useless = "self";
15585  break;
15586  case NODE_NIL:
15587  useless = "nil";
15588  break;
15589  case NODE_TRUE:
15590  useless = "true";
15591  break;
15592  case NODE_FALSE:
15593  useless = "false";
15594  break;
15595  case NODE_DEFINED:
15596  useless = "defined?";
15597  break;
15598  }
15599 
15600  if (useless) {
15601  int line = ruby_sourceline;
15602 
15603  ruby_sourceline = nd_line(node);
15604  rb_warnS("possibly useless use of %s in void context", useless);
15605  ruby_sourceline = line;
15606  }
15607 }
15608 
15609 static void
15610 void_stmts_gen(struct parser_params *parser, NODE *node)
15611 {
15612  if (!RTEST(ruby_verbose)) return;
15613  if (!node) return;
15614  if (nd_type(node) != NODE_BLOCK) return;
15615 
15616  for (;;) {
15617  if (!node->nd_next) return;
15618  void_expr0(node->nd_head);
15619  node = node->nd_next;
15620  }
15621 }
15622 
15623 static NODE *
15625 {
15626  NODE **n = &node, *n1 = node;
15627  while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
15628  *n = n1 = n1->nd_body;
15629  }
15630  return node;
15631 }
15632 
15633 static NODE *
15635 {
15636  NODE **n = &node, *n1 = node;
15637  while (n1 && nd_type(n1) == NODE_BEGIN) {
15638  *n = n1 = n1->nd_body;
15639  }
15640  return node;
15641 }
15642 
15643 static void
15644 reduce_nodes_gen(struct parser_params *parser, NODE **body)
15645 {
15646  NODE *node = *body;
15647 
15648  if (!node) {
15649  *body = NEW_NIL();
15650  return;
15651  }
15652 #define subnodes(n1, n2) \
15653  ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
15654  (!node->n2) ? (body = &node->n1, 1) : \
15655  (reduce_nodes(&node->n1), body = &node->n2, 1))
15656 
15657  while (node) {
15658  int newline = (int)(node->flags & NODE_FL_NEWLINE);
15659  switch (nd_type(node)) {
15660  end:
15661  case NODE_NIL:
15662  *body = 0;
15663  return;
15664  case NODE_RETURN:
15665  *body = node = node->nd_stts;
15666  if (newline && node) node->flags |= NODE_FL_NEWLINE;
15667  continue;
15668  case NODE_BEGIN:
15669  *body = node = node->nd_body;
15670  if (newline && node) node->flags |= NODE_FL_NEWLINE;
15671  continue;
15672  case NODE_BLOCK:
15673  body = &node->nd_end->nd_head;
15674  break;
15675  case NODE_IF:
15676  if (subnodes(nd_body, nd_else)) break;
15677  return;
15678  case NODE_CASE:
15679  body = &node->nd_body;
15680  break;
15681  case NODE_WHEN:
15682  if (!subnodes(nd_body, nd_next)) goto end;
15683  break;
15684  case NODE_ENSURE:
15685  if (!subnodes(nd_head, nd_resq)) goto end;
15686  break;
15687  case NODE_RESCUE:
15688  if (node->nd_else) {
15689  body = &node->nd_resq;
15690  break;
15691  }
15692  if (!subnodes(nd_head, nd_resq)) goto end;
15693  break;
15694  default:
15695  return;
15696  }
15697  node = *body;
15698  if (newline && node) node->flags |= NODE_FL_NEWLINE;
15699  }
15700 
15701 #undef subnodes
15702 }
15703 
15704 static int
15706 {
15707  if (!node) return 1;
15708  switch (nd_type(node)) {
15709  case NODE_HASH:
15710  if (!(node = node->nd_head)) break;
15711  case NODE_ARRAY:
15712  do {
15713  if (!is_static_content(node->nd_head)) return 0;
15714  } while ((node = node->nd_next) != 0);
15715  case NODE_LIT:
15716  case NODE_STR:
15717  case NODE_NIL:
15718  case NODE_TRUE:
15719  case NODE_FALSE:
15720  case NODE_ZARRAY:
15721  break;
15722  default:
15723  return 0;
15724  }
15725  return 1;
15726 }
15727 
15728 static int
15729 assign_in_cond(struct parser_params *parser, NODE *node)
15730 {
15731  switch (nd_type(node)) {
15732  case NODE_MASGN:
15733  yyerror("multiple assignment in conditional");
15734  return 1;
15735 
15736  case NODE_LASGN:
15737  case NODE_DASGN:
15738  case NODE_DASGN_CURR:
15739  case NODE_GASGN:
15740  case NODE_IASGN:
15741  break;
15742 
15743  default:
15744  return 0;
15745  }
15746 
15747  if (!node->nd_value) return 1;
15748  if (is_static_content(node->nd_value)) {
15749  /* reports always */
15750  parser_warn(node->nd_value, "found = in conditional, should be ==");
15751  }
15752  return 1;
15753 }
15754 
15755 static void
15756 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15757 {
15758  if (!e_option_supplied(parser)) parser_warn(node, str);
15759 }
15760 
15761 static void
15762 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15763 {
15764  if (!e_option_supplied(parser)) parser_warning(node, str);
15765 }
15766 
15767 static void
15768 fixup_nodes(NODE **rootnode)
15769 {
15770  NODE *node, *next, *head;
15771 
15772  for (node = *rootnode; node; node = next) {
15773  enum node_type type;
15774  VALUE val;
15775 
15776  next = node->nd_next;
15777  head = node->nd_head;
15778  rb_gc_force_recycle((VALUE)node);
15779  *rootnode = next;
15780  switch (type = nd_type(head)) {
15781  case NODE_DOT2:
15782  case NODE_DOT3:
15783  val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
15784  type == NODE_DOT3);
15785  rb_gc_force_recycle((VALUE)head->nd_beg);
15786  rb_gc_force_recycle((VALUE)head->nd_end);
15787  nd_set_type(head, NODE_LIT);
15788  head->nd_lit = val;
15789  break;
15790  default:
15791  break;
15792  }
15793  }
15794 }
15795 
15796 static NODE *cond0(struct parser_params*,NODE*);
15797 
15798 static NODE*
15799 range_op(struct parser_params *parser, NODE *node)
15800 {
15801  enum node_type type;
15802 
15803  if (node == 0) return 0;
15804 
15805  type = nd_type(node);
15806  value_expr(node);
15807  if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
15808  warn_unless_e_option(parser, node, "integer literal in conditional range");
15809  return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
15810  }
15811  return cond0(parser, node);
15812 }
15813 
15814 static int
15816 {
15817  if (!node) return 1; /* same as NODE_NIL */
15818  switch (nd_type(node)) {
15819  case NODE_LIT:
15820  case NODE_STR:
15821  case NODE_DSTR:
15822  case NODE_EVSTR:
15823  case NODE_DREGX:
15824  case NODE_DREGX_ONCE:
15825  case NODE_DSYM:
15826  return 2;
15827  case NODE_TRUE:
15828  case NODE_FALSE:
15829  case NODE_NIL:
15830  return 1;
15831  }
15832  return 0;
15833 }
15834 
15835 static NODE*
15836 cond0(struct parser_params *parser, NODE *node)
15837 {
15838  if (node == 0) return 0;
15839  assign_in_cond(parser, node);
15840 
15841  switch (nd_type(node)) {
15842  case NODE_DSTR:
15843  case NODE_EVSTR:
15844  case NODE_STR:
15845  rb_warn0("string literal in condition");
15846  break;
15847 
15848  case NODE_DREGX:
15849  case NODE_DREGX_ONCE:
15850  warning_unless_e_option(parser, node, "regex literal in condition");
15851  return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
15852 
15853  case NODE_AND:
15854  case NODE_OR:
15855  node->nd_1st = cond0(parser, node->nd_1st);
15856  node->nd_2nd = cond0(parser, node->nd_2nd);
15857  break;
15858 
15859  case NODE_DOT2:
15860  case NODE_DOT3:
15861  node->nd_beg = range_op(parser, node->nd_beg);
15862  node->nd_end = range_op(parser, node->nd_end);
15863  if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
15864  else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
15865  if (!e_option_supplied(parser)) {
15866  int b = literal_node(node->nd_beg);
15867  int e = literal_node(node->nd_end);
15868  if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
15869  parser_warn(node, "range literal in condition");
15870  }
15871  }
15872  break;
15873 
15874  case NODE_DSYM:
15875  parser_warning(node, "literal in condition");
15876  break;
15877 
15878  case NODE_LIT:
15879  if (RB_TYPE_P(node->nd_lit, T_REGEXP)) {
15880  warn_unless_e_option(parser, node, "regex literal in condition");
15881  nd_set_type(node, NODE_MATCH);
15882  }
15883  else {
15884  parser_warning(node, "literal in condition");
15885  }
15886  default:
15887  break;
15888  }
15889  return node;
15890 }
15891 
15892 static NODE*
15893 cond_gen(struct parser_params *parser, NODE *node)
15894 {
15895  if (node == 0) return 0;
15896  return cond0(parser, node);
15897 }
15898 
15899 static NODE*
15900 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
15901 {
15902  value_expr(left);
15903  if (left && (enum node_type)nd_type(left) == type) {
15904  NODE *node = left, *second;
15905  while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
15906  node = second;
15907  }
15908  node->nd_2nd = NEW_NODE(type, second, right, 0);
15909  return left;
15910  }
15911  return NEW_NODE(type, left, right, 0);
15912 }
15913 
15914 static void
15915 no_blockarg(struct parser_params *parser, NODE *node)
15916 {
15917  if (node && nd_type(node) == NODE_BLOCK_PASS) {
15918  compile_error(PARSER_ARG "block argument should not be given");
15919  }
15920 }
15921 
15922 static NODE *
15923 ret_args_gen(struct parser_params *parser, NODE *node)
15924 {
15925  if (node) {
15926  no_blockarg(parser, node);
15927  if (nd_type(node) == NODE_ARRAY) {
15928  if (node->nd_next == 0) {
15929  node = node->nd_head;
15930  }
15931  else {
15932  nd_set_type(node, NODE_VALUES);
15933  }
15934  }
15935  }
15936  return node;
15937 }
15938 
15939 static NODE *
15940 new_yield_gen(struct parser_params *parser, NODE *node)
15941 {
15942  if (node) no_blockarg(parser, node);
15943 
15944  return NEW_YIELD(node);
15945 }
15946 
15947 static NODE*
15949 {
15950  switch (TYPE(node->nd_lit)) {
15951  case T_FIXNUM:
15952  node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
15953  break;
15954  case T_BIGNUM:
15955  case T_RATIONAL:
15956  case T_COMPLEX:
15957  node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
15958  break;
15959  case T_FLOAT:
15960 #if USE_FLONUM
15961  if (FLONUM_P(node->nd_lit)) {
15962  node->nd_lit = DBL2NUM(-RFLOAT_VALUE(node->nd_lit));
15963  }
15964  else {
15965  RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15966  }
15967 #else
15968  RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15969 #endif
15970  break;
15971  default:
15972  rb_bug("unknown literal type passed to negate_lit");
15973  break;
15974  }
15975  return node;
15976 }
15977 
15978 static NODE *
15979 arg_blk_pass(NODE *node1, NODE *node2)
15980 {
15981  if (node2) {
15982  node2->nd_head = node1;
15983  return node2;
15984  }
15985  return node1;
15986 }
15987 
15988 
15989 static NODE*
15990 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, NODE *tail)
15991 {
15992  int saved_line = ruby_sourceline;
15993  struct rb_args_info *args = tail->nd_ainfo;
15994 
15995  args->pre_args_num = m ? rb_long2int(m->nd_plen) : 0;
15996  args->pre_init = m ? m->nd_next : 0;
15997 
15998  args->post_args_num = p ? rb_long2int(p->nd_plen) : 0;
15999  args->post_init = p ? p->nd_next : 0;
16000  args->first_post_arg = p ? p->nd_pid : 0;
16001 
16002  args->rest_arg = r;
16003 
16004  args->opt_args = o;
16005 
16006  ruby_sourceline = saved_line;
16007 
16008  return tail;
16009 }
16010 
16011 static NODE*
16012 new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b)
16013 {
16014  int saved_line = ruby_sourceline;
16015  struct rb_args_info *args;
16016  NODE *kw_rest_arg = 0;
16017  NODE *node;
16018  int check = 0;
16019 
16020  args = ALLOC(struct rb_args_info);
16021  MEMZERO(args, struct rb_args_info, 1);
16022  node = NEW_NODE(NODE_ARGS, 0, 0, args);
16023 
16024  args->block_arg = b;
16025  args->kw_args = k;
16026  if (k && !kr) {
16027  check = 1;
16028  kr = internal_id();
16029  }
16030  if (kr) {
16031  arg_var(kr);
16032  kw_rest_arg = NEW_DVAR(kr);
16033  kw_rest_arg->nd_cflag = check;
16034  }
16035  args->kw_rest_arg = kw_rest_arg;
16036 
16037  ruby_sourceline = saved_line;
16038  return node;
16039 }
16040 
16041 static NODE*
16042 dsym_node_gen(struct parser_params *parser, NODE *node)
16043 {
16044  VALUE lit;
16045 
16046  if (!node) {
16047  return NEW_LIT(ID2SYM(idNULL));
16048  }
16049 
16050  switch (nd_type(node)) {
16051  case NODE_DSTR:
16052  nd_set_type(node, NODE_DSYM);
16053  break;
16054  case NODE_STR:
16055  lit = node->nd_lit;
16056  node->nd_lit = ID2SYM(rb_intern_str(lit));
16057  nd_set_type(node, NODE_LIT);
16058  break;
16059  default:
16060  node = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST(node));
16061  break;
16062  }
16063  return node;
16064 }
16065 #endif /* !RIPPER */
16066 
16067 #ifndef RIPPER
16068 static NODE *
16069 new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
16070 {
16071  NODE *asgn;
16072 
16073  if (lhs) {
16074  ID vid = lhs->nd_vid;
16075  if (op == tOROP) {
16076  lhs->nd_value = rhs;
16077  asgn = NEW_OP_ASGN_OR(gettable(vid), lhs);
16078  if (is_asgn_or_id(vid)) {
16079  asgn->nd_aid = vid;
16080  }
16081  }
16082  else if (op == tANDOP) {
16083  lhs->nd_value = rhs;
16084  asgn = NEW_OP_ASGN_AND(gettable(vid), lhs);
16085  }
16086  else {
16087  asgn = lhs;
16088  asgn->nd_value = NEW_CALL(gettable(vid), op, NEW_LIST(rhs));
16089  }
16090  }
16091  else {
16092  asgn = NEW_BEGIN(0);
16093  }
16094  return asgn;
16095 }
16096 
16097 static NODE *
16098 new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs)
16099 {
16100  NODE *asgn;
16101 
16102  if (op == tOROP) {
16103  op = 0;
16104  }
16105  else if (op == tANDOP) {
16106  op = 1;
16107  }
16108  asgn = NEW_OP_ASGN2(lhs, attr, op, rhs);
16109  fixpos(asgn, lhs);
16110  return asgn;
16111 }
16112 
16113 static NODE *
16114 new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
16115 {
16116  NODE *asgn;
16117 
16118  if (op == tOROP) {
16119  op = 0;
16120  }
16121  else if (op == tANDOP) {
16122  op = 1;
16123  }
16124  if (lhs) {
16125  asgn = NEW_OP_CDECL(lhs, op, rhs);
16126  }
16127  else {
16128  asgn = NEW_BEGIN(0);
16129  }
16130  fixpos(asgn, lhs);
16131  return asgn;
16132 }
16133 #else
16134 static VALUE
16135 new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs)
16136 {
16137  return dispatch3(opassign, lhs, op, rhs);
16138 }
16139 
16140 static VALUE
16141 new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs)
16142 {
16143  VALUE recv = dispatch3(field, lhs, type, attr);
16144  return dispatch3(opassign, recv, op, rhs);
16145 }
16146 #endif
16147 
16148 static void
16149 warn_unused_var(struct parser_params *parser, struct local_vars *local)
16150 {
16151  int i, cnt;
16152  ID *v, *u;
16153 
16154  if (!local->used) return;
16155  v = local->vars->tbl;
16156  u = local->used->tbl;
16157  cnt = local->used->pos;
16158  if (cnt != local->vars->pos) {
16159  rb_bug("local->used->pos != local->vars->pos");
16160  }
16161  for (i = 0; i < cnt; ++i) {
16162  if (!v[i] || (u[i] & LVAR_USED)) continue;
16163  if (is_private_local_id(v[i])) continue;
16164  rb_warn4S(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i]));
16165  }
16166 }
16167 
16168 static void
16169 local_push_gen(struct parser_params *parser, int inherit_dvars)
16170 {
16171  struct local_vars *local;
16172 
16173  local = ALLOC(struct local_vars);
16174  local->prev = lvtbl;
16175  local->args = vtable_alloc(0);
16176  local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
16177  local->used = !(inherit_dvars &&
16179  RTEST(ruby_verbose) ? vtable_alloc(0) : 0;
16180  local->cmdargs = cmdarg_stack;
16181  cmdarg_stack = 0;
16182  lvtbl = local;
16183 }
16184 
16185 static void
16187 {
16188  struct local_vars *local = lvtbl->prev;
16189  if (lvtbl->used) {
16190  warn_unused_var(parser, lvtbl);
16191  vtable_free(lvtbl->used);
16192  }
16193  vtable_free(lvtbl->args);
16194  vtable_free(lvtbl->vars);
16195  cmdarg_stack = lvtbl->cmdargs;
16196  xfree(lvtbl);
16197  lvtbl = local;
16198 }
16199 
16200 #ifndef RIPPER
16201 static ID*
16203 {
16204  int cnt_args = vtable_size(lvtbl->args);
16205  int cnt_vars = vtable_size(lvtbl->vars);
16206  int cnt = cnt_args + cnt_vars;
16207  int i, j;
16208  ID *buf;
16209 
16210  if (cnt <= 0) return 0;
16211  buf = ALLOC_N(ID, cnt + 1);
16212  MEMCPY(buf+1, lvtbl->args->tbl, ID, cnt_args);
16213  /* remove IDs duplicated to warn shadowing */
16214  for (i = 0, j = cnt_args+1; i < cnt_vars; ++i) {
16215  ID id = lvtbl->vars->tbl[i];
16216  if (!vtable_included(lvtbl->args, id)) {
16217  buf[j++] = id;
16218  }
16219  }
16220  if (--j < cnt) REALLOC_N(buf, ID, (cnt = j) + 1);
16221  buf[0] = cnt;
16222  return buf;
16223 }
16224 #endif
16225 
16226 static int
16227 arg_var_gen(struct parser_params *parser, ID id)
16228 {
16229  vtable_add(lvtbl->args, id);
16230  return vtable_size(lvtbl->args) - 1;
16231 }
16232 
16233 static int
16234 local_var_gen(struct parser_params *parser, ID id)
16235 {
16236  vtable_add(lvtbl->vars, id);
16237  if (lvtbl->used) {
16239  }
16240  return vtable_size(lvtbl->vars) - 1;
16241 }
16242 
16243 static int
16244 local_id_gen(struct parser_params *parser, ID id)
16245 {
16246  struct vtable *vars, *args, *used;
16247 
16248  vars = lvtbl->vars;
16249  args = lvtbl->args;
16250  used = lvtbl->used;
16251 
16252  while (vars && POINTER_P(vars->prev)) {
16253  vars = vars->prev;
16254  args = args->prev;
16255  if (used) used = used->prev;
16256  }
16257 
16258  if (vars && vars->prev == DVARS_INHERIT) {
16259  return rb_local_defined(id);
16260  }
16261  else if (vtable_included(args, id)) {
16262  return 1;
16263  }
16264  else {
16265  int i = vtable_included(vars, id);
16266  if (i && used) used->tbl[i-1] |= LVAR_USED;
16267  return i != 0;
16268  }
16269 }
16270 
16271 static const struct vtable *
16273 {
16274  lvtbl->args = vtable_alloc(lvtbl->args);
16275  lvtbl->vars = vtable_alloc(lvtbl->vars);
16276  if (lvtbl->used) {
16277  lvtbl->used = vtable_alloc(lvtbl->used);
16278  }
16279  return lvtbl->args;
16280 }
16281 
16282 static void
16283 dyna_pop_1(struct parser_params *parser)
16284 {
16285  struct vtable *tmp;
16286 
16287  if ((tmp = lvtbl->used) != 0) {
16288  warn_unused_var(parser, lvtbl);
16289  lvtbl->used = lvtbl->used->prev;
16290  vtable_free(tmp);
16291  }
16292  tmp = lvtbl->args;
16293  lvtbl->args = lvtbl->args->prev;
16294  vtable_free(tmp);
16295  tmp = lvtbl->vars;
16296  lvtbl->vars = lvtbl->vars->prev;
16297  vtable_free(tmp);
16298 }
16299 
16300 static void
16301 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
16302 {
16303  while (lvtbl->args != lvargs) {
16304  dyna_pop_1(parser);
16305  if (!lvtbl->args) {
16306  struct local_vars *local = lvtbl->prev;
16307  xfree(lvtbl);
16308  lvtbl = local;
16309  }
16310  }
16311  dyna_pop_1(parser);
16312 }
16313 
16314 static int
16316 {
16317  return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
16318 }
16319 
16320 static int
16321 dvar_defined_gen(struct parser_params *parser, ID id, int get)
16322 {
16323  struct vtable *vars, *args, *used;
16324  int i;
16325 
16326  args = lvtbl->args;
16327  vars = lvtbl->vars;
16328  used = lvtbl->used;
16329 
16330  while (POINTER_P(vars)) {
16331  if (vtable_included(args, id)) {
16332  return 1;
16333  }
16334  if ((i = vtable_included(vars, id)) != 0) {
16335  if (used) used->tbl[i-1] |= LVAR_USED;
16336  return 1;
16337  }
16338  args = args->prev;
16339  vars = vars->prev;
16340  if (get) used = 0;
16341  if (used) used = used->prev;
16342  }
16343 
16344  if (vars == DVARS_INHERIT) {
16345  return rb_dvar_defined(id);
16346  }
16347 
16348  return 0;
16349 }
16350 
16351 static int
16352 dvar_curr_gen(struct parser_params *parser, ID id)
16353 {
16354  return (vtable_included(lvtbl->args, id) ||
16355  vtable_included(lvtbl->vars, id));
16356 }
16357 
16358 #ifndef RIPPER
16359 static void
16361 {
16362  int c = RE_OPTION_ENCODING_IDX(options);
16363 
16364  if (c) {
16365  int opt, idx;
16366  rb_char_to_option_kcode(c, &opt, &idx);
16367  if (idx != ENCODING_GET(str) &&
16369  goto error;
16370  }
16371  ENCODING_SET(str, idx);
16372  }
16373  else if (RE_OPTION_ENCODING_NONE(options)) {
16374  if (!ENCODING_IS_ASCII8BIT(str) &&
16376  c = 'n';
16377  goto error;
16378  }
16380  }
16381  else if (current_enc == rb_usascii_encoding()) {
16383  /* raise in re.c */
16385  }
16386  else {
16388  }
16389  }
16390  return;
16391 
16392  error:
16394  "regexp encoding option '%c' differs from source encoding '%s'",
16395  c, rb_enc_name(rb_enc_get(str)));
16396 }
16397 
16398 static int
16400 {
16401  VALUE err;
16402  reg_fragment_setenc(str, options);
16403  err = rb_reg_check_preprocess(str);
16404  if (err != Qnil) {
16405  err = rb_obj_as_string(err);
16407  return 0;
16408  }
16409  return 1;
16410 }
16411 
16412 typedef struct {
16413  struct parser_params* parser;
16414  rb_encoding *enc;
16415  NODE *succ_block;
16416  NODE *fail_block;
16417  int num;
16419 
16420 static int
16422  int back_num, int *back_refs, OnigRegex regex, void *arg0)
16423 {
16425  struct parser_params* parser = arg->parser;
16426  rb_encoding *enc = arg->enc;
16427  long len = name_end - name;
16428  const char *s = (const char *)name;
16429  ID var;
16430 
16431  arg->num++;
16432 
16433  if (arg->succ_block == 0) {
16434  arg->succ_block = NEW_BEGIN(0);
16435  arg->fail_block = NEW_BEGIN(0);
16436  }
16437 
16438  if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
16439  (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
16440  !rb_enc_symname2_p(s, len, enc)) {
16441  return ST_CONTINUE;
16442  }
16443  var = rb_intern3(s, len, enc);
16444  if (dvar_defined(var) || local_id(var)) {
16445  rb_warningS("named capture conflicts a local variable - %s",
16446  rb_id2name(var));
16447  }
16448  arg->succ_block = block_append(arg->succ_block,
16450  NEW_CALL(
16451  gettable(rb_intern("$~")),
16452  idAREF,
16453  NEW_LIST(NEW_LIT(ID2SYM(var))))
16454  )));
16455  arg->fail_block = block_append(arg->fail_block,
16457  return ST_CONTINUE;
16458 }
16459 
16460 static NODE *
16462 {
16464 
16465  arg.parser = parser;
16466  arg.enc = rb_enc_get(regexp);
16467  arg.succ_block = 0;
16468  arg.fail_block = 0;
16469  arg.num = 0;
16470  onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
16471 
16472  if (arg.num == 0)
16473  return match;
16474 
16475  return
16476  block_append(
16477  newline_node(match),
16478  NEW_IF(gettable(rb_intern("$~")),
16479  block_append(
16480  newline_node(arg.succ_block),
16481  newline_node(
16482  NEW_CALL(
16483  gettable(rb_intern("$~")),
16484  rb_intern("begin"),
16485  NEW_LIST(NEW_LIT(INT2FIX(0)))))),
16486  block_append(
16487  newline_node(arg.fail_block),
16488  newline_node(
16489  NEW_LIT(Qnil)))));
16490 }
16491 
16492 static VALUE
16493 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
16494 {
16495  VALUE re;
16496  VALUE err;
16497 
16498  reg_fragment_setenc(str, options);
16499  err = rb_errinfo();
16501  if (NIL_P(re)) {
16502  ID mesg = rb_intern("mesg");
16503  VALUE m = rb_attr_get(rb_errinfo(), mesg);
16504  rb_set_errinfo(err);
16505  if (!NIL_P(err)) {
16506  rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
16507  }
16508  else {
16510  }
16511  return Qnil;
16512  }
16513  return re;
16514 }
16515 
16516 void
16518 {
16519 }
16520 
16521 NODE*
16523 {
16524  NODE *prelude = 0;
16525  NODE *scope = node;
16526  struct parser_params *parser;
16527 
16528  if (!node) return node;
16529 
16530  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16531 
16532  node = node->nd_body;
16533 
16534  if (nd_type(node) == NODE_PRELUDE) {
16535  prelude = node;
16536  node = node->nd_body;
16537  }
16538 
16539  node = block_append(node,
16540  NEW_FCALL(rb_intern("print"),
16541  NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
16542  if (prelude) {
16543  prelude->nd_body = node;
16544  scope->nd_body = prelude;
16545  }
16546  else {
16547  scope->nd_body = node;
16548  }
16549 
16550  return scope;
16551 }
16552 
16553 NODE *
16554 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
16555 {
16556  NODE *prelude = 0;
16557  NODE *scope = node;
16558  struct parser_params *parser;
16559 
16560  if (!node) return node;
16561 
16562  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16563 
16564  node = node->nd_body;
16565 
16566  if (nd_type(node) == NODE_PRELUDE) {
16567  prelude = node;
16568  node = node->nd_body;
16569  }
16570  if (split) {
16571  node = block_append(NEW_GASGN(rb_intern("$F"),
16572  NEW_CALL(NEW_GVAR(rb_intern("$_")),
16573  rb_intern("split"), 0)),
16574  node);
16575  }
16576  if (chop) {
16577  node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
16578  rb_intern("chop!"), 0), node);
16579  }
16580 
16581  node = NEW_OPT_N(node);
16582 
16583  if (prelude) {
16584  prelude->nd_body = node;
16585  scope->nd_body = prelude;
16586  }
16587  else {
16588  scope->nd_body = node;
16589  }
16590 
16591  return scope;
16592 }
16593 
16594 static const struct {
16596  const char *name;
16597 } op_tbl[] = {
16598  {tDOT2, ".."},
16599  {tDOT3, "..."},
16600  {tPOW, "**"},
16601  {tDSTAR, "**"},
16602  {tUPLUS, "+@"},
16603  {tUMINUS, "-@"},
16604  {tCMP, "<=>"},
16605  {tGEQ, ">="},
16606  {tLEQ, "<="},
16607  {tEQ, "=="},
16608  {tEQQ, "==="},
16609  {tNEQ, "!="},
16610  {tMATCH, "=~"},
16611  {tNMATCH, "!~"},
16612  {tAREF, "[]"},
16613  {tASET, "[]="},
16614  {tLSHFT, "<<"},
16615  {tRSHFT, ">>"},
16616  {tCOLON2, "::"},
16617 };
16618 
16619 #define op_tbl_count numberof(op_tbl)
16620 
16621 #ifndef ENABLE_SELECTOR_NAMESPACE
16622 #define ENABLE_SELECTOR_NAMESPACE 0
16623 #endif
16624 
16625 static struct symbols {
16626  ID last_id;
16627  st_table *sym_id;
16628  st_table *id_str;
16629 #if ENABLE_SELECTOR_NAMESPACE
16630  st_table *ivar2_id;
16631  st_table *id_ivar2;
16632 #endif
16634  int minor_marked;
16636 
16637 static const struct st_hash_type symhash = {
16639  rb_str_hash,
16640 };
16641 
16642 #if ENABLE_SELECTOR_NAMESPACE
16643 struct ivar2_key {
16644  ID id;
16645  VALUE klass;
16646 };
16647 
16648 static int
16649 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
16650 {
16651  if (key1->id == key2->id && key1->klass == key2->klass) {
16652  return 0;
16653  }
16654  return 1;
16655 }
16656 
16657 static int
16658 ivar2_hash(struct ivar2_key *key)
16659 {
16660  return (key->id << 8) ^ (key->klass >> 2);
16661 }
16662 
16663 static const struct st_hash_type ivar2_hash_type = {
16664  ivar2_cmp,
16665  ivar2_hash,
16666 };
16667 #endif
16668 
16669 void
16671 {
16672  global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
16674 #if ENABLE_SELECTOR_NAMESPACE
16675  global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
16676  global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
16677 #endif
16678 
16679  (void)nodetype;
16680  (void)nodeline;
16681 #if PARSER_DEBUG
16682  (void)lex_state_name(-1);
16683 #endif
16684 
16685  Init_id();
16686 }
16687 
16688 void
16689 rb_gc_mark_symbols(int full_mark)
16690 {
16691  if (full_mark || global_symbols.minor_marked == 0) {
16695 
16696  if (!full_mark) global_symbols.minor_marked = 1;
16697  }
16698 }
16699 #endif /* !RIPPER */
16700 
16701 static ID
16703 {
16704  ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
16705  id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
16706  return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
16707 }
16708 
16709 #ifndef RIPPER
16710 static int
16711 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
16712 {
16713  int mb = 0;
16714 
16715  if (m >= e) return 0;
16716  if (is_global_name_punct(*m)) {
16717  ++m;
16718  }
16719  else if (*m == '-') {
16720  if (++m >= e) return 0;
16721  if (is_identchar(m, e, enc)) {
16722  if (!ISASCII(*m)) mb = 1;
16723  m += rb_enc_mbclen(m, e, enc);
16724  }
16725  }
16726  else {
16727  if (!rb_enc_isdigit(*m, enc)) return 0;
16728  do {
16729  if (!ISASCII(*m)) mb = 1;
16730  ++m;
16731  } while (m < e && rb_enc_isdigit(*m, enc));
16732  }
16733  return m == e ? mb + 1 : 0;
16734 }
16735 
16736 int
16737 rb_symname_p(const char *name)
16738 {
16739  return rb_enc_symname_p(name, rb_ascii8bit_encoding());
16740 }
16741 
16742 int
16743 rb_enc_symname_p(const char *name, rb_encoding *enc)
16744 {
16745  return rb_enc_symname2_p(name, strlen(name), enc);
16746 }
16747 
16748 #define IDSET_ATTRSET_FOR_SYNTAX ((1U<<ID_LOCAL)|(1U<<ID_CONST))
16749 #define IDSET_ATTRSET_FOR_INTERN (~(~0U<<ID_SCOPE_MASK) & ~(1U<<ID_ATTRSET))
16750 
16751 static int
16752 rb_enc_symname_type(const char *name, long len, rb_encoding *enc, unsigned int allowed_attrset)
16753 {
16754  const char *m = name;
16755  const char *e = m + len;
16756  int type = ID_JUNK;
16757 
16758  if (!m || len <= 0) return -1;
16759  switch (*m) {
16760  case '\0':
16761  return -1;
16762 
16763  case '$':
16764  type = ID_GLOBAL;
16765  if (is_special_global_name(++m, e, enc)) return type;
16766  goto id;
16767 
16768  case '@':
16769  type = ID_INSTANCE;
16770  if (*++m == '@') {
16771  ++m;
16772  type = ID_CLASS;
16773  }
16774  goto id;
16775 
16776  case '<':
16777  switch (*++m) {
16778  case '<': ++m; break;
16779  case '=': if (*++m == '>') ++m; break;
16780  default: break;
16781  }
16782  break;
16783 
16784  case '>':
16785  switch (*++m) {
16786  case '>': case '=': ++m; break;
16787  }
16788  break;
16789 
16790  case '=':
16791  switch (*++m) {
16792  case '~': ++m; break;
16793  case '=': if (*++m == '=') ++m; break;
16794  default: return -1;
16795  }
16796  break;
16797 
16798  case '*':
16799  if (*++m == '*') ++m;
16800  break;
16801 
16802  case '+': case '-':
16803  if (*++m == '@') ++m;
16804  break;
16805 
16806  case '|': case '^': case '&': case '/': case '%': case '~': case '`':
16807  ++m;
16808  break;
16809 
16810  case '[':
16811  if (*++m != ']') return -1;
16812  if (*++m == '=') ++m;
16813  break;
16814 
16815  case '!':
16816  if (len == 1) return ID_JUNK;
16817  switch (*++m) {
16818  case '=': case '~': ++m; break;
16819  default: return -1;
16820  }
16821  break;
16822 
16823  default:
16824  type = rb_enc_isupper(*m, enc) ? ID_CONST : ID_LOCAL;
16825  id:
16826  if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
16827  return -1;
16828  while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
16829  if (m >= e) break;
16830  switch (*m) {
16831  case '!': case '?':
16832  if (type == ID_GLOBAL || type == ID_CLASS || type == ID_INSTANCE) return -1;
16833  type = ID_JUNK;
16834  ++m;
16835  break;
16836  case '=':
16837  if (!(allowed_attrset & (1U << type))) return -1;
16838  type = ID_ATTRSET;
16839  ++m;
16840  break;
16841  }
16842  break;
16843  }
16844  return m == e ? type : -1;
16845 }
16846 
16847 int
16848 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
16849 {
16850  return rb_enc_symname_type(name, len, enc, IDSET_ATTRSET_FOR_SYNTAX) != -1;
16851 }
16852 
16853 static int
16854 rb_str_symname_type(VALUE name, unsigned int allowed_attrset)
16855 {
16856  const char *ptr = StringValuePtr(name);
16857  long len = RSTRING_LEN(name);
16858  int type = rb_enc_symname_type(ptr, len, rb_enc_get(name), allowed_attrset);
16859  RB_GC_GUARD(name);
16860  return type;
16861 }
16862 
16863 static ID
16864 register_symid(ID id, const char *name, long len, rb_encoding *enc)
16865 {
16866  VALUE str = rb_enc_str_new(name, len, enc);
16867  return register_symid_str(id, str);
16868 }
16869 
16870 static ID
16872 {
16873  OBJ_FREEZE(str);
16874  str = rb_fstring(str);
16875 
16878  }
16879 
16883  return id;
16884 }
16885 
16886 static int
16888 {
16889  if (!rb_enc_asciicompat(rb_enc_get(str))) return FALSE;
16890  switch (rb_enc_str_coderange(str)) {
16891  case ENC_CODERANGE_BROKEN:
16892  rb_raise(rb_eEncodingError, "invalid encoding symbol");
16893  case ENC_CODERANGE_7BIT:
16894  return TRUE;
16895  }
16896  return FALSE;
16897 }
16898 
16899 /*
16900  * _str_ itself will be registered at the global symbol table. _str_
16901  * can be modified before the registration, since the encoding will be
16902  * set to ASCII-8BIT if it is a special global name.
16903  */
16904 static ID intern_str(VALUE str);
16905 
16906 static VALUE
16907 setup_fake_str(struct RString *fake_str, const char *name, long len)
16908 {
16909  fake_str->basic.flags = T_STRING|RSTRING_NOEMBED;
16911  fake_str->as.heap.len = len;
16912  fake_str->as.heap.ptr = (char *)name;
16913  fake_str->as.heap.aux.capa = len;
16914  return (VALUE)fake_str;
16915 }
16916 
16917 ID
16918 rb_intern3(const char *name, long len, rb_encoding *enc)
16919 {
16920  st_data_t data;
16921  struct RString fake_str;
16922  VALUE str = setup_fake_str(&fake_str, name, len);
16923  rb_enc_associate(str, enc);
16924  OBJ_FREEZE(str);
16925 
16926  if (st_lookup(global_symbols.sym_id, str, &data))
16927  return (ID)data;
16928 
16929  str = rb_enc_str_new(name, len, enc); /* make true string */
16930  return intern_str(str);
16931 }
16932 
16933 static ID
16935 {
16936  const char *name, *m, *e;
16937  long len, last;
16938  rb_encoding *enc, *symenc;
16939  unsigned char c;
16940  ID id;
16941  int mb;
16942 
16943  RSTRING_GETMEM(str, name, len);
16944  m = name;
16945  e = m + len;
16946  enc = rb_enc_get(str);
16947  symenc = enc;
16948 
16949  if (!len || (rb_cString && !rb_enc_asciicompat(enc))) {
16950  junk:
16951  id = ID_JUNK;
16952  goto new_id;
16953  }
16954  last = len-1;
16955  id = 0;
16956  switch (*m) {
16957  case '$':
16958  if (len < 2) goto junk;
16959  id |= ID_GLOBAL;
16960  if ((mb = is_special_global_name(++m, e, enc)) != 0) {
16961  if (!--mb) symenc = rb_usascii_encoding();
16962  goto new_id;
16963  }
16964  break;
16965  case '@':
16966  if (m[1] == '@') {
16967  if (len < 3) goto junk;
16968  m++;
16969  id |= ID_CLASS;
16970  }
16971  else {
16972  if (len < 2) goto junk;
16973  id |= ID_INSTANCE;
16974  }
16975  m++;
16976  break;
16977  default:
16978  c = m[0];
16979  if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
16980  /* operators */
16981  int i;
16982 
16983  if (len == 1) {
16984  id = c;
16985  goto id_register;
16986  }
16987  for (i = 0; i < op_tbl_count; i++) {
16988  if (*op_tbl[i].name == *m &&
16989  strcmp(op_tbl[i].name, m) == 0) {
16990  id = op_tbl[i].token;
16991  goto id_register;
16992  }
16993  }
16994  }
16995  break;
16996  }
16997  if (name[last] == '=') {
16998  /* attribute assignment */
16999  if (last > 1 && name[last-1] == '=')
17000  goto junk;
17001  id = rb_intern3(name, last, enc);
17002  if (id > tLAST_OP_ID && !is_attrset_id(id)) {
17003  enc = rb_enc_get(rb_id2str(id));
17004  id = rb_id_attrset(id);
17005  goto id_register;
17006  }
17007  id = ID_ATTRSET;
17008  }
17009  else if (id == 0) {
17010  if (rb_enc_isupper(m[0], enc)) {
17011  id = ID_CONST;
17012  }
17013  else {
17014  id = ID_LOCAL;
17015  }
17016  }
17017  if (!rb_enc_isdigit(*m, enc)) {
17018  while (m <= name + last && is_identchar(m, e, enc)) {
17019  if (ISASCII(*m)) {
17020  m++;
17021  }
17022  else {
17023  m += rb_enc_mbclen(m, e, enc);
17024  }
17025  }
17026  }
17027  if (id != ID_ATTRSET && m - name < len) id = ID_JUNK;
17028  if (sym_check_asciionly(str)) symenc = rb_usascii_encoding();
17029  new_id:
17030  if (symenc != enc) rb_enc_associate(str, symenc);
17032  if (len > 20) {
17033  rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
17034  name);
17035  }
17036  else {
17037  rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
17038  (int)len, name);
17039  }
17040  }
17042  id_register:
17043  return register_symid_str(id, str);
17044 }
17045 
17046 ID
17047 rb_intern2(const char *name, long len)
17048 {
17049  return rb_intern3(name, len, rb_usascii_encoding());
17050 }
17051 
17052 #undef rb_intern
17053 ID
17054 rb_intern(const char *name)
17055 {
17056  return rb_intern2(name, strlen(name));
17057 }
17058 
17059 ID
17061 {
17062  st_data_t id;
17063 
17064  if (st_lookup(global_symbols.sym_id, str, &id))
17065  return (ID)id;
17066  return intern_str(rb_str_dup(str));
17067 }
17068 
17069 VALUE
17071 {
17072  st_data_t data;
17073 
17074  if (id < tLAST_TOKEN) {
17075  int i = 0;
17076 
17077  if (id < INT_MAX && rb_ispunct((int)id)) {
17078  VALUE str = global_symbols.op_sym[i = (int)id];
17079  if (!str) {
17080  char name[2];
17081  name[0] = (char)id;
17082  name[1] = 0;
17083  str = rb_usascii_str_new(name, 1);
17084  OBJ_FREEZE(str);
17085  str = rb_fstring(str);
17086  global_symbols.op_sym[i] = str;
17088  }
17089  return str;
17090  }
17091  for (i = 0; i < op_tbl_count; i++) {
17092  if (op_tbl[i].token == id) {
17093  VALUE str = global_symbols.op_sym[i];
17094  if (!str) {
17095  str = rb_usascii_str_new2(op_tbl[i].name);
17096  OBJ_FREEZE(str);
17097  str = rb_fstring(str);
17098  global_symbols.op_sym[i] = str;
17100  }
17101  return str;
17102  }
17103  }
17104  }
17105 
17106  if (st_lookup(global_symbols.id_str, id, &data)) {
17107  VALUE str = (VALUE)data;
17108  if (RBASIC(str)->klass == 0)
17110  return str;
17111  }
17112 
17113  if (is_attrset_id(id)) {
17114  ID id_stem = (id & ~ID_SCOPE_MASK);
17115  VALUE str;
17116 
17117  do {
17118  if (!!(str = rb_id2str(id_stem | ID_LOCAL))) break;
17119  if (!!(str = rb_id2str(id_stem | ID_CONST))) break;
17120  if (!!(str = rb_id2str(id_stem | ID_INSTANCE))) break;
17121  if (!!(str = rb_id2str(id_stem | ID_GLOBAL))) break;
17122  if (!!(str = rb_id2str(id_stem | ID_CLASS))) break;
17123  if (!!(str = rb_id2str(id_stem | ID_JUNK))) break;
17124  return 0;
17125  } while (0);
17126  str = rb_str_dup(str);
17127  rb_str_cat(str, "=", 1);
17128  register_symid_str(id, str);
17129  if (st_lookup(global_symbols.id_str, id, &data)) {
17130  VALUE str = (VALUE)data;
17131  if (RBASIC(str)->klass == 0)
17133  return str;
17134  }
17135  }
17136  return 0;
17137 }
17138 
17139 const char *
17141 {
17142  VALUE str = rb_id2str(id);
17143 
17144  if (!str) return 0;
17145  return RSTRING_PTR(str);
17146 }
17147 
17148 static int
17150 {
17151  rb_ary_push(ary, ID2SYM(value));
17152  return ST_CONTINUE;
17153 }
17154 
17155 /*
17156  * call-seq:
17157  * Symbol.all_symbols => array
17158  *
17159  * Returns an array of all the symbols currently in Ruby's symbol
17160  * table.
17161  *
17162  * Symbol.all_symbols.size #=> 903
17163  * Symbol.all_symbols[1,20] #=> [:floor, :ARGV, :Binding, :symlink,
17164  * :chown, :EOFError, :$;, :String,
17165  * :LOCK_SH, :"setuid?", :$<,
17166  * :default_proc, :compact, :extend,
17167  * :Tms, :getwd, :$=, :ThreadGroup,
17168  * :wait2, :$>]
17169  */
17170 
17171 VALUE
17173 {
17175 
17177  return ary;
17178 }
17179 
17180 int
17182 {
17183  return is_const_id(id);
17184 }
17185 
17186 int
17188 {
17189  return is_class_id(id);
17190 }
17191 
17192 int
17194 {
17195  return is_global_id(id);
17196 }
17197 
17198 int
17200 {
17201  return is_instance_id(id);
17202 }
17203 
17204 int
17206 {
17207  return is_attrset_id(id);
17208 }
17209 
17210 int
17212 {
17213  return is_local_id(id);
17214 }
17215 
17216 int
17218 {
17219  return is_junk_id(id);
17220 }
17221 
17233 ID
17234 rb_check_id(volatile VALUE *namep)
17235 {
17236  st_data_t id;
17237  VALUE tmp;
17238  VALUE name = *namep;
17239 
17240  if (SYMBOL_P(name)) {
17241  return SYM2ID(name);
17242  }
17243  else if (!RB_TYPE_P(name, T_STRING)) {
17244  tmp = rb_check_string_type(name);
17245  if (NIL_P(tmp)) {
17246  tmp = rb_inspect(name);
17247  rb_raise(rb_eTypeError, "%s is not a symbol",
17248  RSTRING_PTR(tmp));
17249  }
17250  name = tmp;
17251  *namep = name;
17252  }
17253 
17254  sym_check_asciionly(name);
17255 
17256  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
17257  return (ID)id;
17258 
17259  if (rb_is_attrset_name(name)) {
17260  struct RString fake_str;
17261  /* make local name by chopping '=' */
17262  const VALUE localname = setup_fake_str(&fake_str, RSTRING_PTR(name), RSTRING_LEN(name) - 1);
17263  rb_enc_copy(localname, name);
17264  OBJ_FREEZE(localname);
17265 
17266  if (st_lookup(global_symbols.sym_id, (st_data_t)localname, &id)) {
17267  return rb_id_attrset((ID)id);
17268  }
17269  RB_GC_GUARD(name);
17270  }
17271 
17272  return (ID)0;
17273 }
17274 
17275 ID
17276 rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc)
17277 {
17278  st_data_t id;
17279  struct RString fake_str;
17280  const VALUE name = setup_fake_str(&fake_str, ptr, len);
17281  rb_enc_associate(name, enc);
17282 
17283  sym_check_asciionly(name);
17284 
17285  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
17286  return (ID)id;
17287 
17288  if (rb_is_attrset_name(name)) {
17289  fake_str.as.heap.len = len - 1;
17290  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id)) {
17291  return rb_id_attrset((ID)id);
17292  }
17293  }
17294 
17295  return (ID)0;
17296 }
17297 
17298 int
17300 {
17301  return rb_str_symname_type(name, 0) == ID_CONST;
17302 }
17303 
17304 int
17306 {
17307  return rb_str_symname_type(name, 0) == ID_CLASS;
17308 }
17309 
17310 int
17312 {
17313  return rb_str_symname_type(name, 0) == ID_GLOBAL;
17314 }
17315 
17316 int
17318 {
17319  return rb_str_symname_type(name, 0) == ID_INSTANCE;
17320 }
17321 
17322 int
17324 {
17326 }
17327 
17328 int
17330 {
17331  return rb_str_symname_type(name, 0) == ID_LOCAL;
17332 }
17333 
17334 int
17336 {
17337  switch (rb_str_symname_type(name, 0)) {
17338  case ID_LOCAL: case ID_ATTRSET: case ID_JUNK:
17339  return TRUE;
17340  }
17341  return FALSE;
17342 }
17343 
17344 int
17346 {
17347  return rb_str_symname_type(name, IDSET_ATTRSET_FOR_SYNTAX) == -1;
17348 }
17349 
17350 #endif /* !RIPPER */
17351 
17352 static void
17354 {
17355  parser->eofp = Qfalse;
17356 
17357  parser->parser_lex_strterm = 0;
17358  parser->parser_cond_stack = 0;
17359  parser->parser_cmdarg_stack = 0;
17360  parser->parser_class_nest = 0;
17361  parser->parser_paren_nest = 0;
17362  parser->parser_lpar_beg = 0;
17363  parser->parser_brace_nest = 0;
17364  parser->parser_in_single = 0;
17365  parser->parser_in_def = 0;
17366  parser->parser_in_defined = 0;
17367  parser->parser_in_kwarg = 0;
17368  parser->parser_compile_for_eval = 0;
17369  parser->parser_cur_mid = 0;
17370  parser->parser_tokenbuf = NULL;
17371  parser->parser_tokidx = 0;
17372  parser->parser_toksiz = 0;
17373  parser->parser_heredoc_end = 0;
17374  parser->parser_command_start = TRUE;
17375  parser->parser_deferred_nodes = 0;
17376  parser->parser_lex_pbeg = 0;
17377  parser->parser_lex_p = 0;
17378  parser->parser_lex_pend = 0;
17379  parser->parser_lvtbl = 0;
17380  parser->parser_ruby__end__seen = 0;
17381  parser->parser_ruby_sourcefile = 0;
17383 #ifndef RIPPER
17384  parser->is_ripper = 0;
17385  parser->parser_eval_tree_begin = 0;
17386  parser->parser_eval_tree = 0;
17387 #else
17388  parser->is_ripper = 1;
17389  parser->delayed = Qnil;
17390 
17391  parser->result = Qnil;
17392  parser->parsing_thread = Qnil;
17393  parser->toplevel_p = TRUE;
17394 #endif
17395 #ifdef YYMALLOC
17396  parser->heap = NULL;
17397 #endif
17398  parser->enc = rb_utf8_encoding();
17399 }
17400 
17401 #ifdef RIPPER
17402 #define parser_mark ripper_parser_mark
17403 #define parser_free ripper_parser_free
17404 #endif
17405 
17406 static void
17408 {
17409  struct parser_params *p = (struct parser_params*)ptr;
17410 
17417 #ifndef RIPPER
17420  rb_gc_mark(p->debug_lines);
17421 #else
17422  rb_gc_mark(p->delayed);
17423  rb_gc_mark(p->value);
17424  rb_gc_mark(p->result);
17425  rb_gc_mark(p->parsing_thread);
17426 #endif
17427 #ifdef YYMALLOC
17428  rb_gc_mark((VALUE)p->heap);
17429 #endif
17430 }
17431 
17432 static void
17433 parser_free(void *ptr)
17434 {
17435  struct parser_params *p = (struct parser_params*)ptr;
17436  struct local_vars *local, *prev;
17437 
17438  if (p->parser_tokenbuf) {
17439  xfree(p->parser_tokenbuf);
17440  }
17441  for (local = p->parser_lvtbl; local; local = prev) {
17442  if (local->vars) xfree(local->vars);
17443  prev = local->prev;
17444  xfree(local);
17445  }
17446  xfree(p);
17447 }
17448 
17449 static size_t
17450 parser_memsize(const void *ptr)
17451 {
17452  struct parser_params *p = (struct parser_params*)ptr;
17453  struct local_vars *local;
17454  size_t size = sizeof(*p);
17455 
17456  if (!ptr) return 0;
17457  size += p->parser_toksiz;
17458  for (local = p->parser_lvtbl; local; local = local->prev) {
17459  size += sizeof(*local);
17460  if (local->vars) size += local->vars->capa * sizeof(ID);
17461  }
17462  return size;
17463 }
17464 
17465 static
17466 #ifndef RIPPER
17467 const
17468 #endif
17469 rb_data_type_t parser_data_type = {
17470  "parser",
17471  {
17472  parser_mark,
17473  parser_free,
17475  },
17477 };
17478 
17479 #ifndef RIPPER
17480 #undef rb_reserved_word
17481 
17482 const struct kwtable *
17483 rb_reserved_word(const char *str, unsigned int len)
17484 {
17485  return reserved_word(str, len);
17486 }
17487 
17488 static struct parser_params *
17490 {
17491  struct parser_params *p;
17492 
17493  p = ALLOC_N(struct parser_params, 1);
17494  MEMZERO(p, struct parser_params, 1);
17495  parser_initialize(p);
17496  return p;
17497 }
17498 
17499 VALUE
17501 {
17502  struct parser_params *p = parser_new();
17503 
17504  return TypedData_Wrap_Struct(0, &parser_data_type, p);
17505 }
17506 
17507 /*
17508  * call-seq:
17509  * ripper#end_seen? -> Boolean
17510  *
17511  * Return true if parsed source ended by +\_\_END\_\_+.
17512  */
17513 VALUE
17515 {
17516  struct parser_params *parser;
17517 
17518  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17519  return ruby__end__seen ? Qtrue : Qfalse;
17520 }
17521 
17522 /*
17523  * call-seq:
17524  * ripper#encoding -> encoding
17525  *
17526  * Return encoding of the source.
17527  */
17528 VALUE
17530 {
17531  struct parser_params *parser;
17532 
17533  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17535 }
17536 
17537 /*
17538  * call-seq:
17539  * ripper.yydebug -> true or false
17540  *
17541  * Get yydebug.
17542  */
17543 VALUE
17545 {
17546  struct parser_params *parser;
17547 
17548  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17549  return yydebug ? Qtrue : Qfalse;
17550 }
17551 
17552 /*
17553  * call-seq:
17554  * ripper.yydebug = flag
17555  *
17556  * Set yydebug.
17557  */
17558 VALUE
17560 {
17561  struct parser_params *parser;
17562 
17563  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17564  yydebug = RTEST(flag);
17565  return flag;
17566 }
17567 
17568 #ifdef YYMALLOC
17569 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
17570 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
17571 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
17572  (n)->u3.cnt = (c), (p))
17573 
17574 void *
17575 rb_parser_malloc(struct parser_params *parser, size_t size)
17576 {
17577  size_t cnt = HEAPCNT(1, size);
17578  NODE *n = NEWHEAP();
17579  void *ptr = xmalloc(size);
17580 
17581  return ADD2HEAP(n, cnt, ptr);
17582 }
17583 
17584 void *
17585 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
17586 {
17587  size_t cnt = HEAPCNT(nelem, size);
17588  NODE *n = NEWHEAP();
17589  void *ptr = xcalloc(nelem, size);
17590 
17591  return ADD2HEAP(n, cnt, ptr);
17592 }
17593 
17594 void *
17595 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
17596 {
17597  NODE *n;
17598  size_t cnt = HEAPCNT(1, size);
17599 
17600  if (ptr && (n = parser->heap) != NULL) {
17601  do {
17602  if (n->u1.node == ptr) {
17603  n->u1.node = ptr = xrealloc(ptr, size);
17604  if (n->u3.cnt) n->u3.cnt = cnt;
17605  return ptr;
17606  }
17607  } while ((n = n->u2.node) != NULL);
17608  }
17609  n = NEWHEAP();
17610  ptr = xrealloc(ptr, size);
17611  return ADD2HEAP(n, cnt, ptr);
17612 }
17613 
17614 void
17615 rb_parser_free(struct parser_params *parser, void *ptr)
17616 {
17617  NODE **prev = &parser->heap, *n;
17618 
17619  while ((n = *prev) != NULL) {
17620  if (n->u1.node == ptr) {
17621  *prev = n->u2.node;
17623  break;
17624  }
17625  prev = &n->u2.node;
17626  }
17627  xfree(ptr);
17628 }
17629 #endif
17630 #endif
17631 
17632 #ifdef RIPPER
17633 #ifdef RIPPER_DEBUG
17634 extern int rb_is_pointer_to_heap(VALUE);
17635 
17636 /* :nodoc: */
17637 static VALUE
17638 ripper_validate_object(VALUE self, VALUE x)
17639 {
17640  if (x == Qfalse) return x;
17641  if (x == Qtrue) return x;
17642  if (x == Qnil) return x;
17643  if (x == Qundef)
17644  rb_raise(rb_eArgError, "Qundef given");
17645  if (FIXNUM_P(x)) return x;
17646  if (SYMBOL_P(x)) return x;
17647  if (!rb_is_pointer_to_heap(x))
17648  rb_raise(rb_eArgError, "invalid pointer: %p", x);
17649  switch (BUILTIN_TYPE(x)) {
17650  case T_STRING:
17651  case T_OBJECT:
17652  case T_ARRAY:
17653  case T_BIGNUM:
17654  case T_FLOAT:
17655  case T_COMPLEX:
17656  case T_RATIONAL:
17657  return x;
17658  case T_NODE:
17659  if (nd_type(x) != NODE_LASGN) {
17660  rb_raise(rb_eArgError, "NODE given: %p", x);
17661  }
17662  return ((NODE *)x)->nd_rval;
17663  default:
17664  rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
17665  x, rb_obj_classname(x));
17666  }
17667  return x;
17668 }
17669 #endif
17670 
17671 #define validate(x) ((x) = get_value(x))
17672 
17673 static VALUE
17674 ripper_dispatch0(struct parser_params *parser, ID mid)
17675 {
17676  return rb_funcall(parser->value, mid, 0);
17677 }
17678 
17679 static VALUE
17680 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
17681 {
17682  validate(a);
17683  return rb_funcall(parser->value, mid, 1, a);
17684 }
17685 
17686 static VALUE
17687 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
17688 {
17689  validate(a);
17690  validate(b);
17691  return rb_funcall(parser->value, mid, 2, a, b);
17692 }
17693 
17694 static VALUE
17695 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
17696 {
17697  validate(a);
17698  validate(b);
17699  validate(c);
17700  return rb_funcall(parser->value, mid, 3, a, b, c);
17701 }
17702 
17703 static VALUE
17704 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
17705 {
17706  validate(a);
17707  validate(b);
17708  validate(c);
17709  validate(d);
17710  return rb_funcall(parser->value, mid, 4, a, b, c, d);
17711 }
17712 
17713 static VALUE
17714 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
17715 {
17716  validate(a);
17717  validate(b);
17718  validate(c);
17719  validate(d);
17720  validate(e);
17721  return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
17722 }
17723 
17724 static VALUE
17725 ripper_dispatch7(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e, VALUE f, VALUE g)
17726 {
17727  validate(a);
17728  validate(b);
17729  validate(c);
17730  validate(d);
17731  validate(e);
17732  validate(f);
17733  validate(g);
17734  return rb_funcall(parser->value, mid, 7, a, b, c, d, e, f, g);
17735 }
17736 
17737 static const struct kw_assoc {
17738  ID id;
17739  const char *name;
17740 } keyword_to_name[] = {
17741  {keyword_class, "class"},
17742  {keyword_module, "module"},
17743  {keyword_def, "def"},
17744  {keyword_undef, "undef"},
17745  {keyword_begin, "begin"},
17746  {keyword_rescue, "rescue"},
17747  {keyword_ensure, "ensure"},
17748  {keyword_end, "end"},
17749  {keyword_if, "if"},
17750  {keyword_unless, "unless"},
17751  {keyword_then, "then"},
17752  {keyword_elsif, "elsif"},
17753  {keyword_else, "else"},
17754  {keyword_case, "case"},
17755  {keyword_when, "when"},
17756  {keyword_while, "while"},
17757  {keyword_until, "until"},
17758  {keyword_for, "for"},
17759  {keyword_break, "break"},
17760  {keyword_next, "next"},
17761  {keyword_redo, "redo"},
17762  {keyword_retry, "retry"},
17763  {keyword_in, "in"},
17764  {keyword_do, "do"},
17765  {keyword_do_cond, "do"},
17766  {keyword_do_block, "do"},
17767  {keyword_return, "return"},
17768  {keyword_yield, "yield"},
17769  {keyword_super, "super"},
17770  {keyword_self, "self"},
17771  {keyword_nil, "nil"},
17772  {keyword_true, "true"},
17773  {keyword_false, "false"},
17774  {keyword_and, "and"},
17775  {keyword_or, "or"},
17776  {keyword_not, "not"},
17777  {modifier_if, "if"},
17778  {modifier_unless, "unless"},
17779  {modifier_while, "while"},
17780  {modifier_until, "until"},
17781  {modifier_rescue, "rescue"},
17782  {keyword_alias, "alias"},
17783  {keyword_defined, "defined?"},
17784  {keyword_BEGIN, "BEGIN"},
17785  {keyword_END, "END"},
17786  {keyword__LINE__, "__LINE__"},
17787  {keyword__FILE__, "__FILE__"},
17788  {keyword__ENCODING__, "__ENCODING__"},
17789  {0, NULL}
17790 };
17791 
17792 static const char*
17793 keyword_id_to_str(ID id)
17794 {
17795  const struct kw_assoc *a;
17796 
17797  for (a = keyword_to_name; a->id; a++) {
17798  if (a->id == id)
17799  return a->name;
17800  }
17801  return NULL;
17802 }
17803 
17804 #undef ripper_id2sym
17805 static VALUE
17806 ripper_id2sym(ID id)
17807 {
17808  const char *name;
17809  char buf[8];
17810 
17811  if (id <= 256) {
17812  buf[0] = (char)id;
17813  buf[1] = '\0';
17814  return ID2SYM(rb_intern2(buf, 1));
17815  }
17816  if ((name = keyword_id_to_str(id))) {
17817  return ID2SYM(rb_intern(name));
17818  }
17819  switch (id) {
17820  case tOROP:
17821  name = "||";
17822  break;
17823  case tANDOP:
17824  name = "&&";
17825  break;
17826  default:
17827  name = rb_id2name(id);
17828  if (!name) {
17829  rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
17830  }
17831  return ID2SYM(id);
17832  }
17833  return ID2SYM(rb_intern(name));
17834 }
17835 
17836 static ID
17837 ripper_get_id(VALUE v)
17838 {
17839  NODE *nd;
17840  if (!RB_TYPE_P(v, T_NODE)) return 0;
17841  nd = (NODE *)v;
17842  if (nd_type(nd) != NODE_LASGN) return 0;
17843  return nd->nd_vid;
17844 }
17845 
17846 static VALUE
17847 ripper_get_value(VALUE v)
17848 {
17849  NODE *nd;
17850  if (v == Qundef) return Qnil;
17851  if (!RB_TYPE_P(v, T_NODE)) return v;
17852  nd = (NODE *)v;
17853  if (nd_type(nd) != NODE_LASGN) return Qnil;
17854  return nd->nd_rval;
17855 }
17856 
17857 static void
17858 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
17859 {
17860  VALUE str;
17861  va_list args;
17862 
17863  va_start(args, fmt);
17864  str = rb_vsprintf(fmt, args);
17865  va_end(args);
17866  rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
17867 }
17868 
17869 static void
17870 ripper_warn0(struct parser_params *parser, const char *fmt)
17871 {
17872  rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
17873 }
17874 
17875 static void
17876 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
17877 {
17878  rb_funcall(parser->value, rb_intern("warn"), 2,
17879  STR_NEW2(fmt), INT2NUM(a));
17880 }
17881 
17882 static void
17883 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
17884 {
17885  rb_funcall(parser->value, rb_intern("warn"), 2,
17886  STR_NEW2(fmt), STR_NEW2(str));
17887 }
17888 
17889 static void
17890 ripper_warning0(struct parser_params *parser, const char *fmt)
17891 {
17892  rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
17893 }
17894 
17895 static void
17896 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
17897 {
17898  rb_funcall(parser->value, rb_intern("warning"), 2,
17899  STR_NEW2(fmt), STR_NEW2(str));
17900 }
17901 
17902 static VALUE
17903 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
17904 {
17905  return rb_io_gets(src);
17906 }
17907 
17908 static VALUE
17909 ripper_s_allocate(VALUE klass)
17910 {
17911  struct parser_params *p;
17912  VALUE self;
17913 
17914  p = ALLOC_N(struct parser_params, 1);
17915  MEMZERO(p, struct parser_params, 1);
17916  self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
17917  p->value = self;
17918  return self;
17919 }
17920 
17921 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
17922 
17923 /*
17924  * call-seq:
17925  * Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
17926  *
17927  * Create a new Ripper object.
17928  * _src_ must be a String, an IO, or an Object which has #gets method.
17929  *
17930  * This method does not starts parsing.
17931  * See also Ripper#parse and Ripper.parse.
17932  */
17933 static VALUE
17934 ripper_initialize(int argc, VALUE *argv, VALUE self)
17935 {
17936  struct parser_params *parser;
17937  VALUE src, fname, lineno;
17938 
17939  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17940  rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
17941  if (RB_TYPE_P(src, T_FILE)) {
17942  parser->parser_lex_gets = ripper_lex_get_generic;
17943  }
17944  else {
17945  StringValue(src);
17946  parser->parser_lex_gets = lex_get_str;
17947  }
17948  parser->parser_lex_input = src;
17949  parser->eofp = Qfalse;
17950  if (NIL_P(fname)) {
17951  fname = STR_NEW2("(ripper)");
17952  }
17953  else {
17954  StringValue(fname);
17955  }
17956  parser_initialize(parser);
17957 
17958  parser->parser_ruby_sourcefile_string = fname;
17959  parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
17960  parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
17961 
17962  return Qnil;
17963 }
17964 
17965 struct ripper_args {
17966  struct parser_params *parser;
17967  int argc;
17968  VALUE *argv;
17969 };
17970 
17971 static VALUE
17972 ripper_parse0(VALUE parser_v)
17973 {
17974  struct parser_params *parser;
17975 
17976  TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
17977  parser_prepare(parser);
17978  ripper_yyparse((void*)parser);
17979  return parser->result;
17980 }
17981 
17982 static VALUE
17983 ripper_ensure(VALUE parser_v)
17984 {
17985  struct parser_params *parser;
17986 
17987  TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
17988  parser->parsing_thread = Qnil;
17989  return Qnil;
17990 }
17991 
17992 /*
17993  * call-seq:
17994  * ripper#parse
17995  *
17996  * Start parsing and returns the value of the root action.
17997  */
17998 static VALUE
17999 ripper_parse(VALUE self)
18000 {
18001  struct parser_params *parser;
18002 
18003  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18004  if (!ripper_initialized_p(parser)) {
18005  rb_raise(rb_eArgError, "method called for uninitialized object");
18006  }
18007  if (!NIL_P(parser->parsing_thread)) {
18008  if (parser->parsing_thread == rb_thread_current())
18009  rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
18010  else
18011  rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
18012  }
18013  parser->parsing_thread = rb_thread_current();
18014  rb_ensure(ripper_parse0, self, ripper_ensure, self);
18015 
18016  return parser->result;
18017 }
18018 
18019 /*
18020  * call-seq:
18021  * ripper#column -> Integer
18022  *
18023  * Return column number of current parsing line.
18024  * This number starts from 0.
18025  */
18026 static VALUE
18027 ripper_column(VALUE self)
18028 {
18029  struct parser_params *parser;
18030  long col;
18031 
18032  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18033  if (!ripper_initialized_p(parser)) {
18034  rb_raise(rb_eArgError, "method called for uninitialized object");
18035  }
18036  if (NIL_P(parser->parsing_thread)) return Qnil;
18037  col = parser->tokp - parser->parser_lex_pbeg;
18038  return LONG2NUM(col);
18039 }
18040 
18041 /*
18042  * call-seq:
18043  * ripper#filename -> String
18044  *
18045  * Return current parsing filename.
18046  */
18047 static VALUE
18048 ripper_filename(VALUE self)
18049 {
18050  struct parser_params *parser;
18051 
18052  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18053  if (!ripper_initialized_p(parser)) {
18054  rb_raise(rb_eArgError, "method called for uninitialized object");
18055  }
18056  return parser->parser_ruby_sourcefile_string;
18057 }
18058 
18059 /*
18060  * call-seq:
18061  * ripper#lineno -> Integer
18062  *
18063  * Return line number of current parsing line.
18064  * This number starts from 1.
18065  */
18066 static VALUE
18067 ripper_lineno(VALUE self)
18068 {
18069  struct parser_params *parser;
18070 
18071  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18072  if (!ripper_initialized_p(parser)) {
18073  rb_raise(rb_eArgError, "method called for uninitialized object");
18074  }
18075  if (NIL_P(parser->parsing_thread)) return Qnil;
18076  return INT2NUM(parser->parser_ruby_sourceline);
18077 }
18078 
18079 #ifdef RIPPER_DEBUG
18080 /* :nodoc: */
18081 static VALUE
18082 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
18083 {
18084  StringValue(msg);
18085  if (obj == Qundef) {
18086  rb_raise(rb_eArgError, "%"PRIsVALUE, msg);
18087  }
18088  return Qnil;
18089 }
18090 
18091 /* :nodoc: */
18092 static VALUE
18093 ripper_value(VALUE self, VALUE obj)
18094 {
18095  return ULONG2NUM(obj);
18096 }
18097 #endif
18098 
18099 
18100 void
18101 Init_ripper(void)
18102 {
18103  parser_data_type.parent = RTYPEDDATA_TYPE(rb_parser_new());
18104 
18107  /* ensure existing in symbol table */
18108  (void)rb_intern("||");
18109  (void)rb_intern("&&");
18110 
18111  InitVM(ripper);
18112 }
18113 
18114 void
18115 InitVM_ripper(void)
18116 {
18117  VALUE Ripper;
18118 
18119  Ripper = rb_define_class("Ripper", rb_cObject);
18120  /* version of Ripper */
18121  rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
18122  rb_define_alloc_func(Ripper, ripper_s_allocate);
18123  rb_define_method(Ripper, "initialize", ripper_initialize, -1);
18124  rb_define_method(Ripper, "parse", ripper_parse, 0);
18125  rb_define_method(Ripper, "column", ripper_column, 0);
18126  rb_define_method(Ripper, "filename", ripper_filename, 0);
18127  rb_define_method(Ripper, "lineno", ripper_lineno, 0);
18128  rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
18129  rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
18130  rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
18131  rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
18132 #ifdef RIPPER_DEBUG
18133  rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
18134  rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
18135  rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
18136 #endif
18137 
18140 
18141 # if 0
18142  /* Hack to let RDoc document SCRIPT_LINES__ */
18143 
18144  /*
18145  * When a Hash is assigned to +SCRIPT_LINES__+ the contents of files loaded
18146  * after the assignment will be added as an Array of lines with the file
18147  * name as the key.
18148  */
18149  rb_define_global_const("SCRIPT_LINES__", Qnil);
18150 #endif
18151 
18152 }
18153 #endif /* RIPPER */
18154 
#define STRNCASECMP(s1, s2, n)
Definition: ruby.h:1784
#define toklast()
Definition: parse.c:12166
RUBY_EXTERN VALUE rb_cString
Definition: ruby.h:1583
#define tokadd_mbchar(c)
Definition: parse.c:12526
void rb_define_global_const(const char *, VALUE)
Definition: variable.c:2236
#define command_start
Definition: parse.c:395
char * parser_ruby_sourcefile
Definition: ripper.c:328
#define RBASIC_CLEAR_CLASS(obj)
Definition: internal.h:607
VALUE val
Definition: parse.h:166
#define YYFPRINTF
Definition: parse.c:4489
#define YYLAST
Definition: parse.c:1148
#define evstr2dstr(n)
Definition: parse.c:464
static const char id_type_names[][9]
Definition: parse.c:15320
#define T_OBJECT
Definition: ruby.h:477
Definition: node.h:93
Definition: node.h:29
static NODE * call_bin_op_gen(struct parser_params *, NODE *, ID, NODE *)
Definition: parse.c:15041
stack_type cmdargs
Definition: ripper.c:193
#define ISDIGIT(c)
Definition: ruby.h:1775
#define NEW_RETURN(s)
Definition: node.h:389
enum lex_state_e state
Definition: lex.c:33
struct local_vars * parser_lvtbl
Definition: ripper.c:324
static YYSIZE_T yytnamerr(char *yyres, const char *yystr)
Definition: parse.c:4733
VALUE rb_ary_unshift(VALUE ary, VALUE item)
Definition: array.c:1153
static ID ripper_token2eventid(int tok)
Definition: eventids2.c:279
static ID internal_id_gen(struct parser_params *)
Definition: parse.c:16702
Definition: lex.c:33
#define tokenbuf
Definition: parse.c:384
int rb_enc_codelen(int c, rb_encoding *enc)
Definition: encoding.c:1014
#define NEW_OP_ASGN_AND(i, val)
Definition: node.h:409
static double zero(void)
Definition: isinf.c:51
#define YY_REDUCE_PRINT(Rule)
Definition: parse.c:4635
#define shadowing_lvar(name)
Definition: parse.c:555
#define MBCLEN_CHARFOUND_P(ret)
Definition: encoding.h:139
static void arg_ambiguous_gen(struct parser_params *parser)
Definition: parse.c:13095
#define nextc()
Definition: parse.c:11537
static long parser_encode_length(struct parser_params *parser, const char *name, long len)
Definition: parse.c:13124
#define RE_OPTION_ENCODING_IDX(o)
Definition: parse.c:591
Definition: parse.c:872
#define NEW_OP_ASGN1(p, id, a)
Definition: node.h:405
int onig_foreach_name(regex_t *reg, int(*func)(const UChar *, const UChar *, int, int *, regex_t *, void *), void *arg)
Definition: regparse.c:537
union YYSTYPE YYSTYPE
void * rb_parser_malloc(struct parser_params *parser, size_t size)
Definition: parse.c:17575
#define NEW_SCLASS(r, b)
Definition: node.h:448
#define lex_strterm
Definition: parse.c:371
static void Init_id(void)
Definition: id.c:14
#define RARRAY_LEN(a)
Definition: ruby.h:878
Definition: parse.c:880
void rb_bug(const char *fmt,...)
Definition: error.c:327
int num
Definition: parse.h:169
#define mixed_escape(beg, enc1, enc2)
static const yytype_uint8 yyr2[]
Definition: parse.c:1704
struct token_info * next
Definition: ripper.c:275
int rb_is_local_name(VALUE name)
Definition: parse.c:17329
static NODE * attrset_gen(struct parser_params *, NODE *, ID)
Definition: parse.c:15361
void rb_enc_copy(VALUE obj1, VALUE obj2)
Definition: encoding.c:916
#define FALSE
Definition: nkf.h:174
#define RUBY_TYPED_FREE_IMMEDIATELY
Definition: ruby.h:1015
static const struct kwtable * reserved_word(const char *, unsigned int)
#define NUM_SUFFIX_R
Definition: parse.c:12919
#define CMDARG_P()
Definition: parse.c:179
#define tail
Definition: st.c:108
int minor_marked
Definition: ripper.c:16724
#define heredoc_end
Definition: parse.c:394
static VALUE setup_fake_str(struct RString *fake_str, const char *name, long len)
Definition: parse.c:16907
#define NEW_LIST(a)
Definition: node.h:391
int rb_is_class_name(VALUE name)
Definition: parse.c:17305
struct vtable * used
Definition: ripper.c:191
#define tHEREDOC_BEG
Definition: eventids2.c:7
#define pushback(c)
Definition: parse.c:11538
#define rb_gc_mark_locations(start, end)
Definition: gc.c:3316
size_t strlen(const char *)
#define INT2NUM(x)
Definition: ruby.h:1288
VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline)
Definition: re.c:2548
int rb_is_attrset_name(VALUE name)
Definition: parse.c:17323
VALUE parser_lex_nextline
Definition: ripper.c:315
VALUE rb_make_exception(int argc, VALUE *argv)
Definition: eval.c:682
#define is_const_id(id)
Definition: parse.c:113
#define scan_oct(s, l, e)
Definition: util.h:50
#define nd_plen
Definition: node.h:333
#define compile_error
Definition: parse.c:729
#define T_FIXNUM
Definition: ruby.h:489
Definition: st.h:69
static NODE * negate_lit(NODE *)
Definition: parse.c:15948
#define toklen()
Definition: parse.c:12165
#define new_yield(node)
Definition: parse.c:482
#define dispatch_heredoc_end()
Definition: parse.c:12986
static NODE * node_assign_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15433
Definition: node.h:47
#define NEW_XSTR(s)
Definition: node.h:425
int parser_ruby__end__seen
Definition: ripper.c:325
static void local_push_gen(struct parser_params *, int)
Definition: parse.c:16169
static int vtable_size(const struct vtable *tbl)
Definition: parse.c:202
#define formal_argument(id)
Definition: parse.c:553
int parser_command_start
Definition: ripper.c:320
#define set_number_literal(v, t, f)
Definition: parse.c:11554
const struct kwtable * rb_reserved_word(const char *str, unsigned int len)
Definition: parse.c:17483
VALUE rb_range_new(VALUE, VALUE, int)
Definition: range.c:70
#define YY_STACK_PRINT(Bottom, Top)
Definition: parse.c:4596
static NODE * arg_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15382
#define NUM2INT(x)
Definition: ruby.h:630
static const struct @132 op_tbl[]
#define is_notop_id(id)
Definition: parse.c:108
ID rb_check_id(volatile VALUE *namep)
Returns ID for the given name if it is interned already, or 0.
Definition: parse.c:17234
#define NEW_DOT2(b, e)
Definition: node.h:453
#define tokfix()
Definition: parse.c:12163
static NODE * evstr2dstr_gen(struct parser_params *, NODE *)
Definition: parse.c:15018
#define local_pop()
Definition: parse.c:562
static void yy_reduce_print(YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
Definition: parse.c:4613
static int nodeline(NODE *node)
Definition: parse.c:14783
static int token_info_has_nonspaces(struct parser_params *parser, const char *token)
Definition: parse.c:11672
#define malloc
Definition: parse.c:96
#define local_var(id)
Definition: parse.c:564
static NODE * arg_blk_pass(NODE *, NODE *)
Definition: parse.c:15979
#define IS_LABEL_POSSIBLE()
Definition: parse.c:13434
#define is_asgn_or_id(id)
Definition: parse.c:118
const char * name
Definition: lex.c:33
#define tEMBDOC_BEG
Definition: eventids2.c:3
static void reg_fragment_setenc_gen(struct parser_params *, VALUE, int)
Definition: parse.c:16360
#define POINTER_P(val)
Definition: parse.c:199
int parser_compile_for_eval
Definition: ripper.c:305
int parser_token_info_enabled
Definition: ripper.c:345
#define parser_precise_mbclen()
Definition: parse.c:11650
static ID formal_argument_gen(struct parser_params *, ID)
Definition: parse.c:13106
#define rb_usascii_str_new2
Definition: intern.h:846
static int parser_read_escape(struct parser_params *parser, int flags, rb_encoding **encp)
Definition: parse.c:12299
#define internal_id()
Definition: parse.c:570
int parser_brace_nest
Definition: ripper.c:304
static VALUE reg_compile_gen(struct parser_params *, VALUE, int)
Definition: parse.c:16493
#define InitVM(ext)
Definition: ruby.h:1789
static ID register_symid(ID, const char *, long, rb_encoding *)
Definition: parse.c:16864
unsigned short int yytype_uint16
Definition: parse.c:953
VALUE rb_str_cat(VALUE, const char *, long)
Definition: string.c:2140
#define lex_nextline
Definition: parse.c:390
ID rb_intern_str(VALUE str)
Definition: parse.c:17060
Definition: id.h:94
#define nd_line(n)
Definition: node.h:288
#define Qtrue
Definition: ruby.h:426
VALUE rb_reg_check_preprocess(VALUE)
Definition: re.c:2325
#define RE_OPTION_ENCODING(e)
Definition: parse.c:590
NODE * rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
Definition: parse.c:16554
Definition: id.h:91
#define yyparse
Definition: parse.c:421
#define DVARS_TOPSCOPE
Definition: parse.c:197
#define set_yylval_str(x)
Definition: parse.c:11558
static const yytype_uint16 yyr1[]
Definition: parse.c:1636
#define gettable(id)
Definition: parse.c:487
#define set_yylval_literal(x)
Definition: parse.c:11562
#define TypedData_Wrap_Struct(klass, data_type, sval)
Definition: ruby.h:1027
#define yytable_value_is_error(yytable_value)
Definition: parse.c:3168
#define IDSET_ATTRSET_FOR_SYNTAX
Definition: parse.c:16748
#define YYPOPSTACK(N)
Definition: parse.c:864
#define ADD2HEAP(n, c, p)
Definition: parse.c:17571
VALUE rb_parser_encoding(VALUE vparser)
Definition: parse.c:17529
#define TypedData_Get_Struct(obj, type, data_type, sval)
Definition: ruby.h:1041
#define literal_concat(h, t)
Definition: parse.c:459
int parser_in_kwarg
Definition: ripper.c:307
const int id
Definition: nkf.c:209
static void block_dup_check_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15313
int line_count
Definition: ripper.c:326
union RString::@109 as
stack_type parser_cmdarg_stack
Definition: ripper.c:298
node_type
Definition: node.h:22
#define strcasecmp
Definition: win32.h:220
#define STR_NEW2(p)
Definition: parse.c:363
Definition: parse.c:849
static int lvar_defined_gen(struct parser_params *, ID)
Definition: parse.c:13117
Definition: parse.c:877
#define ID_CONST
Definition: id.h:35
VALUE rb_suppress_tracing(VALUE(*func)(VALUE), VALUE arg)
Definition: vm_trace.c:388
#define tokspace(n)
Definition: parse.c:11540
VALUE rb_enc_from_encoding(rb_encoding *encoding)
Definition: encoding.c:102
int rb_is_method_name(VALUE name)
Definition: parse.c:17335
static ID * local_tbl_gen(struct parser_params *)
Definition: parse.c:16202
VALUE rb_eTypeError
Definition: error.c:548
#define rb_warnI(fmt, a)
Definition: parse.c:703
NODE * node
Definition: parse.h:167
#define T_RATIONAL
Definition: ruby.h:495
#define PARSER_ARG
Definition: parse.c:730
st_table * names
Definition: encoding.c:50
#define new_defined(expr)
Definition: parse.c:507
#define ID_JUNK
Definition: id.h:37
#define ULONG2NUM(x)
Definition: ruby.h:1319
#define lvar_defined(id)
Definition: parse.c:586
VALUE rb_ary_push(VALUE ary, VALUE item)
Definition: array.c:896
#define rb_long2int(n)
Definition: ruby.h:317
ID rb_intern3(const char *name, long len, rb_encoding *enc)
Definition: parse.c:16918
#define NEW_CLASS(n, b, s)
Definition: node.h:447
#define current_enc
Definition: parse.c:404
#define lex_pbeg
Definition: parse.c:391
#define MAX_WORD_LENGTH
Definition: lex.c:43
VALUE rb_eEncodingError
Definition: error.c:554
NODE * rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
Definition: parse.c:12025
#define SYM2ID(x)
Definition: ruby.h:356
#define subnodes(n1, n2)
#define yydebug
Definition: parse.c:405
struct RBasic basic
Definition: ruby.h:821
#define YYSTACK_BYTES(N)
Definition: parse.c:1101
#define nd_term(node)
Definition: parse.c:603
static int parser_yylex(struct parser_params *parser)
Definition: parse.c:13451
rb_encoding * rb_enc_compatible(VALUE str1, VALUE str2)
Definition: encoding.c:849
#define new_args_tail(k, kr, b)
Definition: parse.c:475
Definition: parse.c:870
#define NEW_OPT_N(b)
Definition: node.h:375
#define CMDARG_LEXPOP()
Definition: parse.c:178
static NODE * remove_begin_all(NODE *)
Definition: parse.c:15634
static NODE * new_evstr_gen(struct parser_params *, NODE *)
Definition: parse.c:15027
VALUE op_sym[tLAST_OP_ID]
Definition: ripper.c:16723
int rb_is_junk_name(VALUE name)
Definition: parse.c:17345
VALUE debug_lines
Definition: ripper.c:341
static int parser_regx_options(struct parser_params *)
Definition: parse.c:12470
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
Definition: vm_eval.c:775
ID id
Definition: parse.h:168
static VALUE coverage(VALUE fname, int n)
Definition: parse.c:11812
static int rb_enc_symname_type(const char *name, long len, rb_encoding *enc, unsigned int allowed_attrset)
Definition: parse.c:16752
static void set_file_encoding(struct parser_params *parser, const char *str, const char *send)
Definition: parse.c:13363
static NODE * newline_node(NODE *)
Definition: parse.c:14789
int rb_enc_str_coderange(VALUE)
Definition: string.c:435
static void ripper_init_eventids1_table(VALUE self)
Definition: eventids1.c:270
void rb_raise(VALUE exc, const char *fmt,...)
Definition: error.c:1857
Definition: parse.c:850
#define YY_SYMBOL_PRINT(Title, Type, Value, Location)
Definition: parse.c:4498
#define RE_OPTION_ONCE
Definition: parse.c:588
#define NEW_NIL()
Definition: node.h:456
static const yytype_uint16 yyprhs[]
Definition: parse.c:1210
#define RSTRING_GETMEM(str, ptrvar, lenvar)
Definition: ruby.h:854
#define block_dup_check(n1, n2)
Definition: parse.c:446
VALUE rb_enc_associate(VALUE obj, rb_encoding *enc)
Definition: encoding.c:826
static void warn_unused_var(struct parser_params *parser, struct local_vars *local)
Definition: parse.c:16149
ID * tbl
Definition: ripper.c:182
const rb_data_type_t * parent
Definition: ruby.h:975
void rb_compile_warn(const char *file, int line, const char *fmt,...)
Definition: error.c:179
#define attrset(node, id)
Definition: parse.c:494
int pre_args_num
Definition: node.h:514
#define RB_GC_GUARD(v)
Definition: ruby.h:523
void rb_define_alloc_func(VALUE, rb_alloc_func_t)
#define T_HASH
Definition: ruby.h:485
#define new_const_op_assign(lhs, op, rhs)
Definition: parse.c:505
int parser_toksiz
Definition: ripper.c:311
static NODE * assignable_gen(struct parser_params *, ID, NODE *)
Definition: parse.c:15167
int rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc)
Definition: encoding.c:946
#define ID_LOCAL
Definition: id.h:31
st_index_t rb_str_hash(VALUE)
Definition: string.c:2422
#define nd_args
Definition: node.h:337
Definition: parse.c:892
#define nd_set_type(n, t)
Definition: node.h:283
ID last_id
Definition: ripper.c:16716
static size_t parser_memsize(const void *ptr)
Definition: parse.c:17450
static NODE * new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
Definition: parse.c:16069
static void fixpos(NODE *, NODE *)
Definition: parse.c:14799
void rb_gc_mark(VALUE ptr)
Definition: gc.c:3604
#define lex_pend
Definition: parse.c:393
static NODE * gettable_gen(struct parser_params *, ID)
Definition: parse.c:15090
#define T_ARRAY
Definition: ruby.h:484
#define NEW_DOT3(b, e)
Definition: node.h:454
#define nd_paren(node)
Definition: parse.c:605
#define cmdarg_stack
Definition: parse.c:374
#define rb_enc_islower(c, enc)
Definition: encoding.h:180
static struct symbols global_symbols
#define is_class_id(id)
Definition: parse.c:114
static NODE * cond0(struct parser_params *, NODE *)
Definition: parse.c:15836
#define NEW_ITER(a, b)
Definition: node.h:379
#define STR_NEW0()
Definition: parse.c:362
void rb_gc_mark_parser(void)
Definition: parse.c:16517
#define reg_compile(str, options)
Definition: parse.c:518
NODE * pre_init
Definition: node.h:511
static int local_var_gen(struct parser_params *, ID)
Definition: parse.c:16234
#define str_copy(_s, _p, _n)
#define NEW_IVAR(v)
Definition: node.h:414
unsigned int last
Definition: nkf.c:4310
static NODE * match_op_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15056
ID block_arg
Definition: node.h:520
static void yy_stack_print(yytype_int16 *yybottom, yytype_int16 *yytop)
Definition: parse.c:4582
struct RNode * node
Definition: node.h:243
#define NEW_IASGN(v, val)
Definition: node.h:400
#define FIXNUM_P(f)
Definition: ruby.h:347
rb_encoding * rb_utf8_encoding(void)
Definition: encoding.c:1242
static int rb_str_symname_type(VALUE name, unsigned int allowed_attrset)
Definition: parse.c:16854
VALUE parser_lex_input
Definition: ripper.c:313
static int dvar_defined_gen(struct parser_params *, ID, int)
Definition: parse.c:16321
#define nd_type(n)
Definition: node.h:282
static NODE * new_yield_gen(struct parser_params *, NODE *)
Definition: parse.c:15940
#define RE_OPTION_ENCODING_NONE(o)
Definition: parse.c:592
#define YYNTOKENS
Definition: parse.c:1151
static char * parser_tokspace(struct parser_params *parser, int n)
Definition: parse.c:12185
Definition: parse.c:869
int rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
Definition: parse.c:16848
#define tokadd_string(f, t, p, n, e)
Definition: parse.c:11546
#define paren_nest
Definition: parse.c:376
VALUE rb_str_buf_append(VALUE, VALUE)
Definition: string.c:2282
#define number_literal_suffix(f)
Definition: parse.c:11553
#define is_identchar(p, e, enc)
Definition: parse.c:11651
#define RUBY_DTRACE_PARSE_BEGIN(arg0, arg1)
Definition: probes.h:55
int pos
Definition: ripper.c:183
VALUE parser_ruby_sourcefile_string
Definition: ripper.c:330
union RNode::@131 u3
Definition: parse.c:833
Definition: parse.c:893
static void parser_heredoc_restore(struct parser_params *parser, NODE *here)
Definition: parse.c:12883
static NODE * remove_begin(NODE *)
Definition: parse.c:15624
NODE * rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
Definition: parse.c:11984
#define ENC_CODERANGE_7BIT
Definition: encoding.h:49
const char * rb_obj_classname(VALUE)
Definition: variable.c:406
static int parser_set_integer_literal(struct parser_params *parser, VALUE v, int suffix)
Definition: parse.c:12964
void rb_gc_force_recycle(VALUE p)
Definition: gc.c:4897
#define lex_lastline
Definition: parse.c:389
#define rb_ary_new2
Definition: intern.h:90
#define NEW_SCOPE(a, b)
Definition: node.h:369
#define head
Definition: st.c:107
#define tok_hex(numlen)
Definition: parse.c:11542
RUBY_EXTERN void * memmove(void *, const void *, size_t)
Definition: memmove.c:7
unsigned char OnigUChar
Definition: oniguruma.h:111
int parser_yydebug
Definition: ripper.c:333
#define NUM_SUFFIX_I
Definition: parse.c:12920
Definition: node.h:27
st_table * id_str
Definition: ripper.c:16718
static const yytype_int16 yytable[]
Definition: parse.c:2053
NODE * parser_eval_tree
Definition: ripper.c:340
NODE * parser_deferred_nodes
Definition: ripper.c:321
#define sym(x)
Definition: date_core.c:3695
VALUE rb_str_buf_cat(VALUE, const char *, long)
Definition: string.c:2124
RUBY_SYMBOL_EXPORT_BEGIN typedef unsigned long st_data_t
Definition: st.h:20
void rb_name_error(ID id, const char *fmt,...)
Definition: error.c:967
static int dyna_in_block_gen(struct parser_params *)
Definition: parse.c:16315
static const rb_data_type_t parser_data_type
Definition: parse.c:11955
Definition: node.h:239
#define YYSYNTAX_ERROR
#define YYABORT
Definition: parse.c:4401
Definition: parse.h:161
int has_shebang
Definition: ripper.c:327
#define logop(type, node1, node2)
Definition: parse.c:429
static rb_encoding * must_be_ascii_compatible(VALUE s)
Definition: parse.c:11905
#define ISALPHA(c)
Definition: ruby.h:1774
static void dyna_pop_1(struct parser_params *parser)
Definition: parse.c:16283
void rb_exc_raise(VALUE mesg)
Definition: eval.c:567
#define in_single
Definition: parse.c:379
#define NEW_VCALL(m)
Definition: node.h:431
static NODE * new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
Definition: parse.c:16114
#define strtod(s, e)
Definition: util.h:74
#define parser_warn(node, mesg)
Definition: parse.c:14819
struct vtable * prev
Definition: ripper.c:185
#define RBASIC_SET_CLASS_RAW(obj, cls)
Definition: internal.h:608
#define NEW_VALIAS(n, o)
Definition: node.h:445
#define RUBY_DTRACE_PARSE_END(arg0, arg1)
Definition: probes.h:58
#define RB_TYPE_P(obj, type)
Definition: ruby.h:1664
#define NEW_LVAR(v)
Definition: node.h:412
static void warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
Definition: parse.c:15756
int st_lookup(st_table *, st_data_t, st_data_t *)
#define NEW_ATTRASGN(r, m, a)
Definition: node.h:464
#define MEMZERO(p, type, n)
Definition: ruby.h:1351
#define toksiz
Definition: parse.c:386
Definition: ruby.h:820
int rb_is_instance_name(VALUE name)
Definition: parse.c:17317
#define ID_SCOPE_MASK
Definition: id.h:30
rb_encoding * enc
Definition: ripper.c:331
static void parser_free(void *ptr)
Definition: parse.c:17433
#define free
Definition: parse.c:99
enum lex_state_e parser_lex_state
Definition: ripper.c:296
int rb_is_local_id(ID id)
Definition: parse.c:17211
#define lex_gets
Definition: parse.c:398
#define NEW_POSTEXE(b)
Definition: node.h:462
int capa
Definition: ripper.c:184
VALUE parser_lex_lastline
Definition: ripper.c:314
void * rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
Definition: parse.c:17595
#define void_expr(node)
Definition: parse.c:440
static void parser_initialize(struct parser_params *parser)
Definition: parse.c:17353
#define scan_hex(s, l, e)
Definition: util.h:52
static void parser_set_encode(struct parser_params *parser, const char *name)
Definition: parse.c:13144
#define NEW_IF(c, t, e)
Definition: node.h:371
#define local_id(id)
Definition: parse.c:568
#define here_document(n)
Definition: parse.c:11549
#define lex_goto_eol(parser)
Definition: parse.c:12084
#define rb_rational_raw1(x)
Definition: intern.h:167
#define RARRAY(obj)
Definition: ruby.h:1123
#define ruby_sourcefile
Definition: parse.c:402
#define ALLOC_N(type, n)
Definition: ruby.h:1333
VALUE rb_hash_aset(VALUE hash, VALUE key, VALUE val)
Definition: hash.c:1393
void rb_compile_error_append(const char *fmt,...)
Definition: error.c:157
void rb_compile_error_with_enc(const char *file, int line, void *enc, const char *fmt,...)
Definition: error.c:133
VALUE rb_parser_get_yydebug(VALUE self)
Definition: parse.c:17544
#define YYTRANSLATE(YYX)
Definition: parse.c:1163
#define NEW_PRELUDE(p, b)
Definition: node.h:465
#define val
int rb_ispunct(int c)
Definition: encoding.c:1929
Definition: parse.c:843
#define NEW_ARRAY(a)
Definition: node.h:392
#define tokidx
Definition: parse.c:385
RUBY_EXTERN VALUE rb_cObject
Definition: ruby.h:1553
VALUE rb_eRuntimeError
Definition: error.c:547
#define match_op(node1, node2)
Definition: parse.c:510
static enum node_type nodetype(NODE *node)
Definition: parse.c:14777
#define NEW_STRTERM(func, term, paren)
Definition: parse.c:12675
#define ID_INSTANCE
Definition: id.h:32
static const struct magic_comment magic_comments[]
Definition: parse.c:13228
#define rb_enc_isascii(c, enc)
Definition: encoding.h:178
#define CMDARG_PUSH(n)
Definition: parse.c:176
#define reg_named_capture_assign(regexp, match)
Definition: parse.c:524
#define arg_concat(h, t)
Definition: parse.c:457
void rb_str_free(VALUE)
Definition: string.c:941
struct parser_params * parser
Definition: ripper.c:16503
static void magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
Definition: parse.c:13192
static int parser_number_literal_suffix(struct parser_params *parser, int mask)
Definition: parse.c:12924
#define RE_OPTION_MASK
Definition: parse.c:593
void * rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
Definition: parse.c:17585
#define NEW_HASH(a)
Definition: node.h:394
#define DEF_EXPR(n)
Definition: parse.c:140
VALUE rb_get_coverages(void)
Definition: thread.c:5287
static int e_option_supplied(struct parser_params *parser)
Definition: parse.c:11828
union RNode::@130 u2
#define NEW_ZARRAY()
Definition: node.h:393
static struct vtable * vtable_alloc(struct vtable *prev)
Definition: parse.c:215
#define NEW_FALSE()
Definition: node.h:458
#define token_info_push(token)
Definition: parse.c:745
VALUE rb_obj_as_string(VALUE)
Definition: string.c:1011
int parser_paren_nest
Definition: ripper.c:300
VALUE rb_ary_new(void)
Definition: array.c:495
#define YY_(msgid)
Definition: parse.c:986
#define NODE_HEREDOC
Definition: parse.c:597
#define NEW_ARGSPUSH(a, b)
Definition: node.h:439
#define VTBL_DEBUG
Definition: parse.c:212
#define cond_stack
Definition: parse.c:373
static int is_special_global_name(const char *m, const char *e, rb_encoding *enc)
Definition: parse.c:16711
static const yytype_uint16 yyrline[]
Definition: parse.c:1474
#define NEW_REDO()
Definition: node.h:383
#define NEW_NTH_REF(n)
Definition: node.h:417
#define NEW_UNLESS(c, t, e)
Definition: node.h:372
RUBY_EXTERN VALUE rb_mKernel
Definition: ruby.h:1541
#define snprintf
Definition: subst.h:6
VALUE rb_thread_current(void)
Definition: thread.c:2401
#define IS_SPCARG(c)
Definition: parse.c:13433
#define set_yylval_id(x)
Definition: parse.c:11560
NODE * rb_parser_compile_file_path(volatile VALUE vparser, VALUE fname, VALUE file, int start)
Definition: parse.c:12031
#define NIL_P(v)
Definition: ruby.h:438
#define ISASCII(c)
Definition: ruby.h:1766
void st_add_direct(st_table *, st_data_t, st_data_t)
Definition: st.c:629
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
Definition: class.c:630
static char msg[50]
Definition: strerror.c:8
#define NEW_GVAR(v)
Definition: node.h:411
NODE * opt_args
Definition: node.h:525
int rb_is_attrset_id(ID id)
Definition: parse.c:17205
static int reg_fragment_check_gen(struct parser_params *, VALUE, int)
Definition: parse.c:16399
#define NEW_YIELD(a)
Definition: node.h:390
#define YYSTACK_ALLOC
Definition: parse.c:1054
long(* rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len)
Definition: parse.c:13188
static NODE * dsym_node_gen(struct parser_params *, NODE *)
Definition: parse.c:16042
#define STR_FUNC_REGEXP
Definition: parse.c:12051
NODE * rb_compile_string(const char *f, VALUE s, int line)
Definition: parse.c:11977
void rb_define_const(VALUE, const char *, VALUE)
Definition: variable.c:2225
VALUE value
Definition: node.h:245
#define ID_SCOPE_SHIFT
Definition: id.h:29
static NODE * new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs)
Definition: parse.c:16098
#define k__END__
Definition: eventids2.c:9
#define ISALNUM(c)
Definition: ruby.h:1773
#define NEW_CASE(h, b)
Definition: node.h:373
rb_atomic_t cnt[RUBY_NSIG]
Definition: signal.c:496
#define RFLOAT(obj)
Definition: ruby.h:1120
static void no_blockarg(struct parser_params *parser, NODE *node)
Definition: parse.c:15915
Definition: parse.c:839
static double one(void)
Definition: isinf.c:52
union RNode::@129 u1
Definition: parse.c:837
static NODE * splat_array(NODE *)
Definition: parse.c:15425
Definition: parse.c:874
#define FLONUM_P(x)
Definition: ruby.h:367
static void parser_mark(void *ptr)
Definition: parse.c:17407
#define T_FLOAT
Definition: ruby.h:481
static void parser_tokadd(struct parser_params *parser, int c)
Definition: parse.c:12197
#define is_local_id(id)
Definition: parse.c:109
static YYSIZE_T yystrlen(char *yystr) const
Definition: parse.c:4684
#define LVAR_USED
Definition: parse.c:15256
#define TYPE(x)
Definition: ruby.h:505
static void ripper_init_eventids1(void)
Definition: eventids1.c:134
int argc
Definition: ruby.c:131
Definition: node.h:59
static int sym_check_asciionly(VALUE str)
Definition: parse.c:16887
yytype_int16 yyss_alloc
Definition: ripper.c:1092
static ID intern_str(VALUE str)
Definition: parse.c:16934
Definition: parse.c:862
#define STR_FUNC_INDENT
Definition: parse.c:12054
char ary[RSTRING_EMBED_LEN_MAX+1]
Definition: ruby.h:831
#define Qfalse
Definition: ruby.h:425
#define rb_sourcefile()
Definition: tcltklib.c:98
#define NEW_EVSTR(n)
Definition: node.h:428
#define arg_append(h, t)
Definition: parse.c:455
VALUE rb_rational_new(VALUE, VALUE)
Definition: rational.c:1760
static VALUE lex_get_str(struct parser_params *parser, VALUE s)
Definition: parse.c:11915
#define ALLOCA_N(type, n)
Definition: ruby.h:1337
static int assign_in_cond(struct parser_params *parser, NODE *node)
Definition: parse.c:15729
#define op_tbl_count
Definition: parse.c:16619
#define warn_balanced(op, syn)
Definition: parse.c:13445
#define tokadd(c)
Definition: parse.c:11541
#define NEW_OP_CDECL(v, op, val)
Definition: node.h:410
#define no_digits()
#define peek_n(c, n)
Definition: parse.c:12087
#define T_BIGNUM
Definition: ruby.h:487
#define ENC_CODERANGE_UNKNOWN
Definition: encoding.h:48
#define YYFINAL
Definition: parse.c:1146
#define ISUPPER(c)
Definition: ruby.h:1771
static void void_expr_gen(struct parser_params *, NODE *)
Definition: parse.c:15521
static int reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end, int back_num, int *back_refs, OnigRegex regex, void *arg0)
Definition: parse.c:16421
#define RUBY_FUNC_EXPORTED
Definition: defines.h:246
#define MEMCPY(p1, p2, type, n)
Definition: ruby.h:1352
#define T_NODE
Definition: ruby.h:498
#define ENC_CODERANGE_BROKEN
Definition: encoding.h:51
Definition: parse.c:879
#define rb_enc_isupper(c, enc)
Definition: encoding.h:181
VALUE rb_enc_associate_index(VALUE obj, int idx)
Definition: encoding.c:798
int rb_parse_in_main(void)
Definition: compile.c:5948
static VALUE debug_lines(VALUE fname)
Definition: parse.c:11796
#define YYCASE_(N, S)
int err
Definition: win32.c:114
#define IS_AFTER_OPERATOR()
Definition: parse.c:13436
Definition: parse.c:855
#define OBJ_FREEZE(x)
Definition: ruby.h:1186
const char * parser_lex_pend
Definition: ripper.c:318
static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
Definition: parse.c:12390
#define T_COMPLEX
Definition: ruby.h:496
#define nd_else
Definition: node.h:300
#define IDSET_ATTRSET_FOR_INTERN
Definition: parse.c:16749
#define set_yylval_num(x)
Definition: parse.c:11559
long cnt
Definition: node.h:261
Definition: util.c:792
#define parser_encoding_name()
Definition: parse.c:11648
token_info * parser_token_info
Definition: ripper.c:346
#define new_op_assign(lhs, op, rhs)
Definition: parse.c:550
int column
Definition: ripper.c:273
#define YYSIZE_T
Definition: parse.c:972
#define numberof(array)
Definition: etc.c:595
VALUE rb_make_backtrace(void)
Definition: vm_backtrace.c:817
#define ALLOC(type)
Definition: ruby.h:1334
#define END(no)
Definition: re.c:26
#define NEW_FOR(v, i, b)
Definition: node.h:378
#define brace_nest
Definition: parse.c:378
#define EOF
Definition: vsnprintf.c:207
static NODE * list_append_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:14876
#define NEW_WHEN(c, t, e)
Definition: node.h:374
static const yytype_int16 yycheck[]
Definition: parse.c:3171
VALUE rb_str_resize(VALUE, long)
Definition: string.c:2025
static int literal_node(NODE *node)
Definition: parse.c:15815
static int dvar_curr_gen(struct parser_params *, ID)
Definition: parse.c:16352
#define tHEREDOC_END
Definition: eventids2.c:8
#define NEW_DASGN(v, val)
Definition: node.h:398
YYSTYPE yyvs_alloc
Definition: ripper.c:1093
#define flush_string_content(enc)
Definition: parse.c:12694
int rb_str_hash_cmp(VALUE, VALUE)
Definition: string.c:2432
#define NEW_ERRINFO()
Definition: node.h:459
#define NEW_BLOCK_PASS(b)
Definition: node.h:443
Definition: parse.c:856
string_type
Definition: ripper.c:12146
int rb_dvar_defined(ID id)
Definition: compile.c:5898
#define RSTRING_LEN(str)
Definition: ruby.h:841
int parser_in_single
Definition: ripper.c:302
lex_state_bits
Definition: ripper.c:123
#define ret_args(node)
Definition: parse.c:479
static int parser_yyerror(struct parser_params *, const char *)
Definition: parse.c:11731
#define RUBY_DTRACE_PARSE_END_ENABLED()
Definition: probes.h:57
#define COND_LEXPOP()
Definition: parse.c:173
ID rest_arg
Definition: node.h:519
#define REALLOC_N(var, type, n)
Definition: ruby.h:1335
static const yytype_int16 yypgoto[]
Definition: parse.c:2024
SSL_METHOD *(* func)(void)
Definition: ossl_ssl.c:113
int errno
#define TRUE
Definition: nkf.h:175
static int parser_tokadd_mbchar(struct parser_params *parser, int c)
Definition: parse.c:12513
#define nd_next
Definition: node.h:296
#define NEW_CONST(v)
Definition: node.h:415
int rb_symname_p(const char *name)
Definition: parse.c:16737
#define COND_POP()
Definition: parse.c:172
#define TOK_INTERN(mb)
Definition: parse.c:366
#define NEW_LIT(l)
Definition: node.h:422
VALUE rb_io_gets(VALUE)
Definition: io.c:3187
int rb_is_junk_id(ID id)
Definition: parse.c:17217
VALUE rb_sprintf(const char *format,...)
Definition: sprintf.c:1250
#define set_integer_literal(v, f)
Definition: parse.c:11555
#define COND_P()
Definition: parse.c:174
#define ruby_coverage
Definition: parse.c:411
#define NEW_OP_ASGN_OR(i, val)
Definition: node.h:408
static void yydestruct(char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser) const
Definition: parse.c:4920
#define rb_enc_isspace(c, enc)
Definition: encoding.h:185
#define ruby_sourcefile_string
Definition: parse.c:403
#define NEW_NEXT(s)
Definition: node.h:382
#define rb_warnS(fmt, a)
Definition: parse.c:704
#define parser_warning(node, mesg)
Definition: parse.c:14812
#define mixed_error(enc1, enc2)
#define const
Definition: strftime.c:102
#define rb_enc_name(enc)
Definition: encoding.h:125
RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e-0x20+31)/32]
Definition: parse.c:12697
#define value_expr(node)
Definition: parse.c:438
#define rb_warning0(fmt)
Definition: parse.c:706
#define reg_fragment_setenc(str, options)
Definition: parse.c:520
static int value_expr_gen(struct parser_params *, NODE *)
Definition: parse.c:15464
static const yytype_int16 yyrhs[]
Definition: parse.c:1278
const char * rb_id2name(ID id)
Definition: parse.c:17140
static int parser_whole_match_p(struct parser_params *parser, const char *eos, long len, int indent)
Definition: parse.c:12901
#define NEW_RESCUE(b, res, e)
Definition: node.h:386
#define YYDPRINTF(Args)
Definition: parse.c:4492
static const char * magic_comment_marker(const char *str, long len)
Definition: parse.c:13236
#define rb_warn0(fmt)
Definition: parse.c:702
rb_magic_comment_length_t length
Definition: ripper.c:13315
int parser_in_def
Definition: ripper.c:303
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
Definition: class.c:1728
static const yytype_uint8 yytranslate[]
Definition: parse.c:1167
#define new_bv(id)
Definition: parse.c:557
#define YYEMPTY
Definition: parse.c:4397
#define YYSTACK_FREE
Definition: parse.c:1055
#define YYID(n)
Definition: parse.c:999
VALUE parser_cur_mid
Definition: ripper.c:306
VALUE stack_type
Definition: parse.c:164
unsigned char buf[MIME_BUF_SIZE]
Definition: nkf.c:4308
Definition: parse.c:834
Definition: parse.c:876
#define PRIsVALUE
Definition: ruby.h:137
static char * parser_newtok(struct parser_params *parser)
Definition: parse.c:12169
long parser_lex_gets_ptr
Definition: ripper.c:322
unsigned long ID
Definition: ruby.h:89
static void fixup_nodes(NODE **)
Definition: parse.c:15768
rb_encoding * rb_usascii_encoding(void)
Definition: encoding.c:1257
#define rb_enc_isalnum(c, enc)
Definition: encoding.h:183
#define dyna_pop(node)
Definition: parse.c:575
#define rb_enc_isdigit(c, enc)
Definition: encoding.h:186
#define nd_resq
Definition: node.h:304
#define list_concat(h, t)
Definition: parse.c:453
#define dyna_in_block()
Definition: parse.c:577
#define Qnil
Definition: ruby.h:427
#define dyna_var(id)
Definition: parse.c:578
#define NEW_BACK_REF(n)
Definition: node.h:418
Definition: parse.c:867
#define STR_FUNC_ESCAPE
Definition: parse.c:12049
int type
Definition: tcltklib.c:112
int id[2]
Definition: lex.c:33
#define NODE_FL_NEWLINE
Definition: node.h:275
static int options(unsigned char *cp)
Definition: nkf.c:6357
#define NEW_MASGN(l, r)
Definition: node.h:395
#define heredoc_restore(n)
Definition: parse.c:11551
#define BUILTIN_TYPE(x)
Definition: ruby.h:502
#define NEW_COLON2(c, i)
Definition: node.h:450
unsigned long VALUE
Definition: ruby.h:88
#define yyerror(msg)
Definition: parse.c:369
#define peek(c)
Definition: parse.c:12086
stack_type parser_cond_stack
Definition: ripper.c:297
#define IS_lex_state_for(x, ls)
Definition: parse.c:157
static VALUE result
Definition: nkf.c:40
NODE * post_init
Definition: node.h:512
static NODE * arg_append_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15407
static void ripper_init_eventids2(void)
Definition: eventids2.c:66
#define RBASIC(obj)
Definition: ruby.h:1116
#define heredoc_identifier()
Definition: parse.c:11550
int parser_heredoc_end
Definition: ripper.c:319
#define rb_enc_ispunct(c, enc)
Definition: encoding.h:182
#define NEW_KW_ARG(i, v)
Definition: node.h:436
static VALUE parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
Definition: parse.c:12068
#define ripper_flush(p)
Definition: parse.c:11581
void rb_mark_tbl(st_table *tbl)
Definition: gc.c:3519
#define dsym_node(node)
Definition: parse.c:484
#define regx_options()
Definition: parse.c:11545
int post_args_num
Definition: node.h:515
static int parser_magic_comment(struct parser_params *parser, const char *str, long len)
Definition: parse.c:13269
#define NEW_ENSURE(b, en)
Definition: node.h:388
yytokentype
Definition: parse.c:780
#define token_info_pop(token)
Definition: parse.c:746
static int arg_var_gen(struct parser_params *, ID)
Definition: parse.c:16227
#define call_bin_op(recv, id, arg1)
Definition: parse.c:468
#define rb_warn4S(file, line, fmt, a)
Definition: parse.c:705
#define NEW_ZSUPER()
Definition: node.h:433
#define rb_enc_asciicompat(enc)
Definition: encoding.h:188
VALUE rb_ensure(VALUE(*b_proc)(ANYARGS), VALUE data1, VALUE(*e_proc)(ANYARGS), VALUE data2)
Definition: eval.c:839
VALUE flags
Definition: ruby.h:748
static VALUE yycompile0(VALUE arg)
Definition: parse.c:11834
int rb_char_to_option_kcode(int c, int *option, int *kcode)
Definition: re.c:301
#define NEW_COLON3(i)
Definition: node.h:451
#define NEW_BLOCK(a)
Definition: node.h:370
#define Qnone
Definition: parse.c:694
#define assignable_result(x)
static int parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
Definition: parse.c:12397
static int parser_tokadd_string(struct parser_params *, int, int, int, long *, rb_encoding **)
Definition: parse.c:12542
#define nd_body
Definition: node.h:299
VALUE flags
Definition: node.h:240
VALUE rb_fstring(VALUE)
Definition: string.c:201
const char * token
Definition: ripper.c:271
#define ENCODING_IS_ASCII8BIT(obj)
Definition: encoding.h:43
VALUE rb_str_dup(VALUE)
Definition: string.c:1062
#define dvar_defined_get(id)
Definition: parse.c:581
#define RUBY_DTRACE_PARSE_BEGIN_ENABLED()
Definition: probes.h:54
#define rb_enc_isalpha(c, enc)
Definition: encoding.h:179
static NODE * new_args_gen(struct parser_params *, NODE *, NODE *, ID, NODE *, NODE *)
Definition: parse.c:15990
#define ruby_sourceline
Definition: parse.c:401
#define is_global_id(id)
Definition: parse.c:110
#define lex_input
Definition: parse.c:388
Definition: parse.c:857
#define STR_FUNC_QWORDS
Definition: parse.c:12052
static int vtable_included(const struct vtable *tbl, ID id)
Definition: parse.c:254
ID rb_intern(const char *name)
Definition: parse.c:17054
int parser_in_defined
Definition: ripper.c:308
static int parser_set_number_literal(struct parser_params *parser, VALUE v, int type, int suffix)
Definition: parse.c:12953
#define ruby_eval_tree
Definition: parse.c:408
#define LONG2NUM(x)
Definition: ruby.h:1309
int parser_class_nest
Definition: ripper.c:299
ID token
Definition: parse.c:16595
static VALUE lex_io_gets(struct parser_params *parser, VALUE io)
Definition: parse.c:12011
NODE * rb_compile_cstr(const char *f, const char *s, int len, int line)
Definition: parse.c:11997
#define parser_is_identchar()
Definition: parse.c:11652
#define NEW_BEGIN(b)
Definition: node.h:385
#define ruby__end__seen
Definition: parse.c:400
#define dvar_curr(id)
Definition: parse.c:583
#define set_yylval_node(x)
Definition: parse.c:11563
static void yy_symbol_value_print(FILE *yyoutput, int yytype, YYSTYPE const *const yyvaluep, struct parser_params *parser)
Definition: parse.c:4521
static void vtable_free(struct vtable *tbl)
Definition: parse.c:227
#define RSTRING_PTR(str)
Definition: ruby.h:845
#define NEW_SPLAT(a)
Definition: node.h:440
#define reg_fragment_check(str, options)
Definition: parse.c:522
#define RARRAY_ASET(a, i, v)
Definition: ruby.h:902
const struct vtable * vars
Definition: parse.h:170
int rb_const_defined_at(VALUE, ID)
Definition: variable.c:2130
st_table * st_init_table_with_size(const struct st_hash_type *, st_index_t)
Definition: st.c:229
#define ENCODING_GET(obj)
Definition: encoding.h:38
#define lex_state
Definition: parse.c:372
#define arg_ambiguous()
Definition: parse.c:13103
rb_encoding * rb_enc_get(VALUE obj)
Definition: encoding.c:832
RUBY_EXTERN int ffs(int)
Definition: ffs.c:6
static void reduce_nodes_gen(struct parser_params *, NODE **)
Definition: parse.c:15644
#define RFLOAT_VALUE(v)
Definition: ruby.h:814
int nonspc
Definition: ripper.c:274
int size
Definition: encoding.c:49
#define YYSTACK_ALLOC_MAXIMUM
Definition: parse.c:1057
#define NEW_DSTR(s)
Definition: node.h:424
#define newtok()
Definition: parse.c:11539
#define f
#define yylval
Definition: parse.c:11528
#define INT2FIX(i)
Definition: ruby.h:231
#define set_yylval_name(x)
Definition: parse.c:11561
#define NEW_GASGN(v, val)
Definition: node.h:396
#define NEW_BREAK(s)
Definition: node.h:381
int rb_sourceline(void)
Definition: vm.c:1001
Definition: parse.c:852
static NODE * reg_named_capture_assign_gen(struct parser_params *parser, VALUE regexp, NODE *match)
Definition: parse.c:16461
static void parser_pushback(struct parser_params *parser, int c)
Definition: parse.c:12152
int rb_enc_symname_p(const char *name, rb_encoding *enc)
Definition: parse.c:16743
#define RARRAY_AREF(a, i)
Definition: ruby.h:901
int parser_tokidx
Definition: ripper.c:310
static const yytype_uint16 yydefact[]
Definition: parse.c:1774
Definition: node.h:45
#define lpar_beg
Definition: parse.c:377
static int parser_here_document(struct parser_params *, NODE *)
Definition: parse.c:12990
VALUE rb_int_positive_pow(long x, unsigned long y)
Definition: numeric.c:3047
#define YYUSE(e)
Definition: parse.c:992
#define COND_PUSH(n)
Definition: parse.c:171
#define xmalloc
Definition: defines.h:108
int rb_is_const_name(VALUE name)
Definition: parse.c:17299
static NODE * ret_args_gen(struct parser_params *, NODE *)
Definition: parse.c:15923
#define YYACCEPT
Definition: parse.c:4400
VALUE coverage
Definition: ripper.c:342
void rb_set_errinfo(VALUE err)
Definition: eval.c:1504
#define lex_gets_ptr
Definition: parse.c:397
#define NEW_TRUE()
Definition: node.h:457
static void dyna_pop_gen(struct parser_params *, const struct vtable *)
Definition: parse.c:16301
NODE * parser_lex_strterm
Definition: ripper.c:295
int rb_is_global_id(ID id)
Definition: parse.c:17193
const char * name
Definition: parse.c:16596
const char * name
Definition: ripper.c:13313
static void local_pop_gen(struct parser_params *)
Definition: parse.c:16186
#define RUBY_DTRACE_SYMBOL_CREATE_ENABLED()
Definition: probes.h:51
#define tSP
Definition: eventids2.c:6
#define NEW_LAMBDA(a, b)
Definition: node.h:380
VALUE rb_complex_raw(VALUE x, VALUE y)
Definition: complex.c:1317
#define IS_lex_state(ls)
Definition: parse.c:158
static int simple_re_meta(int c)
Definition: parse.c:12529
Definition: node.h:207
#define NEW_UNTIL(c, b, n)
Definition: node.h:377
#define lvtbl
Definition: parse.c:399
#define new_attr_op_assign(lhs, type, attr, op, rhs)
Definition: parse.c:503
#define aryset(node1, node2)
Definition: parse.c:492
#define NEW_MODULE(n, b)
Definition: node.h:449
static const struct st_hash_type symhash
Definition: parse.c:16637
#define list_append(l, i)
Definition: parse.c:451
#define tokaddmbc(c, enc)
Definition: parse.c:11548
short int yytype_int16
Definition: parse.c:959
#define cur_mid
Definition: parse.c:382
#define STR_NEW3(p, n, e, func)
Definition: parse.c:364
#define IS_BEG()
Definition: parse.c:13432
rb_magic_comment_setter_t func
Definition: ripper.c:13314
static const yytype_int16 yypact[]
Definition: parse.c:1913
#define dvar_defined(id)
Definition: parse.c:580
int parser_lpar_beg
Definition: ripper.c:301
#define ESCAPE_CONTROL
Definition: parse.c:12295
void rb_compile_warning(const char *file, int line, const char *fmt,...)
Definition: error.c:192
VALUE rb_check_string_type(VALUE)
Definition: string.c:1679
st_table * sym_id
Definition: ripper.c:16717
static void warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
Definition: parse.c:15762
#define yypact_value_is_default(yystate)
Definition: parse.c:3165
Definition: parse.c:860
uint8_t key[16]
Definition: random.c:1250
static int symbols_i(VALUE sym, ID value, VALUE ary)
Definition: parse.c:17149
#define nd_head
Definition: node.h:294
struct local_vars * prev
Definition: ripper.c:192
#define IS_END()
Definition: parse.c:13431
static void parser_prepare(struct parser_params *parser)
Definition: parse.c:13406
#define LONG2FIX(i)
Definition: ruby.h:232
ID rb_id_attrset(ID id)
Definition: parse.c:15332
static struct parser_params * parser_new(void)
Definition: parse.c:17489
#define NEW_WHILE(c, b, n)
Definition: node.h:376
struct vtable * vars
Definition: ripper.c:190
#define RTEST(v)
Definition: ruby.h:437
static void yy_symbol_print(FILE *yyoutput, int yytype, YYSTYPE const *const yyvaluep, struct parser_params *parser)
Definition: parse.c:4555
Definition: node.h:139
#define new_args(f, o, r, p, t)
Definition: parse.c:473
#define T_STRING
Definition: ruby.h:482
static void rb_backref_error_gen(struct parser_params *, NODE *)
Definition: parse.c:15369
VALUE rb_id2str(ID id)
Definition: parse.c:17070
#define NEW_POSTARG(i, v)
Definition: node.h:437
#define YYINITDEPTH
Definition: parse.c:4656
#define RREGEXP(obj)
Definition: ruby.h:1122
static NODE * logop_gen(struct parser_params *, enum node_type, NODE *, NODE *)
Definition: parse.c:15900
VALUE rb_parser_new(void)
Definition: parse.c:17500
static void void_stmts_gen(struct parser_params *, NODE *)
Definition: parse.c:15610
#define ENC_SINGLE(cr)
Definition: parse.c:365
#define NEW_UNDEF(i)
Definition: node.h:446
struct rb_encoding_entry * list
Definition: encoding.c:47
static const yytype_int16 yydefgoto[]
Definition: parse.c:1885
static NODE * parser_compile_string(volatile VALUE vparser, VALUE fname, VALUE s, int line)
Definition: parse.c:11958
#define parse_string(n)
Definition: parse.c:11547
#define ID_ATTRSET
Definition: id.h:34
#define T_FILE
Definition: ruby.h:488
#define NEWHEAP()
Definition: parse.c:17570
#define NEW_CVASGN(v, val)
Definition: node.h:403
static int yylex(void *, void *)
Definition: parse.c:14742
#define NEW_FCALL(m, a)
Definition: node.h:430
Definition: parse.c:854
int linenum
Definition: ripper.c:272
#define YYEOF
Definition: parse.c:4398
#define tEMBDOC
Definition: eventids2.c:4
int rb_is_global_name(VALUE name)
Definition: parse.c:17311
#define NEW_OP_ASGN2(r, i, o, val)
Definition: node.h:406
#define NEW_MATCH3(r, n2)
Definition: node.h:421
#define deferred_nodes
Definition: parse.c:396
Definition: parse.c:873
char * parser_tokenbuf
Definition: ripper.c:309
#define node_assign(node1, node2)
Definition: parse.c:499
#define get_id(id)
Definition: parse.c:526
VALUE rb_cArray
Definition: array.c:27
#define NEW_OPT_ARG(i, v)
Definition: node.h:435
#define BEG(no)
Definition: re.c:25
short int yytype_int8
Definition: parse.c:947
static unsigned int hash(const char *str, unsigned int len)
Definition: lex.c:56
#define id_type(id)
Definition: parse.c:116
int parser_tokline
Definition: ripper.c:312
#define RUBY_DTRACE_SYMBOL_CREATE(arg0, arg1, arg2)
Definition: probes.h:52
#define YYTERROR
Definition: parse.c:4439
static int parser_parse_string(struct parser_params *, NODE *)
Definition: parse.c:12762
#define tok()
Definition: parse.c:12164
#define cond(node)
Definition: parse.c:427
VALUE rb_filesystem_str_new_cstr(const char *)
Definition: string.c:737
#define ruby_eval_tree_begin
Definition: parse.c:409
#define is_instance_id(id)
Definition: parse.c:111
NODE * rb_parser_append_print(VALUE vparser, NODE *node)
Definition: parse.c:16522
ID rb_intern2(const char *name, long len)
Definition: parse.c:17047
const char * parser_lex_pbeg
Definition: ripper.c:316
static NODE * cond_gen(struct parser_params *, NODE *)
Definition: parse.c:15893
NODE * rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
Definition: parse.c:12004
static int shadowing_lvar_0(struct parser_params *parser, ID name)
Definition: parse.c:15259
VALUE rb_enc_str_new(const char *, long, rb_encoding *)
Definition: string.c:548
#define rb_safe_level()
Definition: tcltklib.c:95
static NODE * list_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:14896
Definition: ripper.c:181
VALUE rb_const_get_at(VALUE, ID)
Definition: variable.c:1886
static int is_global_name_punct(const int c)
Definition: parse.c:12719
#define NUM_SUFFIX_ALL
Definition: parse.c:12921
static int is_private_local_id(ID name)
Definition: parse.c:15246
#define lex_p
Definition: parse.c:392
static int comment_at_top(struct parser_params *parser)
Definition: parse.c:13176
const char * parser_lex_p
Definition: ripper.c:317
static void dispose_string(VALUE str)
Definition: parse.c:12506
Definition: parse.c:851
#define xrealloc
Definition: defines.h:111
static int parser_nextc(struct parser_params *parser)
Definition: parse.c:12090
lex_state_e
Definition: ripper.c:139
#define read_escape(flags, e)
Definition: parse.c:11543
#define parser_isascii()
Definition: parse.c:11654
#define ID2SYM(x)
Definition: ruby.h:355
static const char *const yytname[]
Definition: parse.c:1545
Definition: node.h:61
static char * yystpcpy(char *yydest, const char *yysrc)
Definition: parse.c:4708
int parser_ruby_sourceline
Definition: ripper.c:329
#define NEW_RETRY()
Definition: node.h:384
#define call_uni_op(recv, id)
Definition: parse.c:470
#define rb_errinfo()
Definition: tcltklib.c:90
static ID register_symid_str(ID, VALUE)
Definition: parse.c:16871
#define StringValuePtr(v)
Definition: ruby.h:540
struct RString::@109::@110 heap
#define STR_FUNC_SYMBOL
Definition: parse.c:12053
#define nd_value
Definition: node.h:324
#define DVARS_INHERIT
Definition: parse.c:196
#define ID_INTERNAL
Definition: id.h:38
Definition: parse.c:861
static ID shadowing_lvar_gen(struct parser_params *, ID)
Definition: parse.c:15284
YYSTYPE * parser_yylval
Definition: ripper.c:292
VALUE rb_str_new_frozen(VALUE)
Definition: string.c:833
static int token_info_get_column(struct parser_params *parser, const char *token)
Definition: parse.c:11658
unsigned char yytype_uint8
Definition: parse.c:938
static NODE * yycompile(struct parser_params *parser, VALUE fname, int line)
Definition: parse.c:11895
#define NEW_RESBODY(a, ex, n)
Definition: node.h:387
Definition: parse.c:863
#define NEW_ARGSCAT(a, b)
Definition: node.h:438
#define arg_var(id)
Definition: parse.c:566
#define NEW_DASGN_CURR(v, val)
Definition: node.h:399
VALUE rb_inspect(VALUE)
Definition: object.c:470
#define is_junk_id(id)
Definition: parse.c:115
static void vtable_add(struct vtable *tbl, ID id)
Definition: parse.c:239
int rb_is_class_id(ID id)
Definition: parse.c:17187
#define NEW_SUPER(a)
Definition: node.h:432
#define NEW_CALL(r, m, a)
Definition: node.h:429
static const yytype_uint16 yystos[]
Definition: parse.c:4285
static int is_static_content(NODE *node)
Definition: parse.c:15705
int is_ripper
Definition: ripper.c:289
#define in_defined
Definition: parse.c:383
rb_encoding * rb_ascii8bit_encoding(void)
Definition: encoding.c:1227
int rb_enc_find_index(const char *name)
Definition: encoding.c:684
VALUE eofp
Definition: ripper.c:293
static NODE * aryset_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15305
VALUE rb_parser_end_seen_p(VALUE vparser)
Definition: parse.c:17514
static int parser_heredoc_identifier(struct parser_params *parser)
Definition: parse.c:12820
Definition: node.h:31
int rb_is_const_id(ID id)
Definition: parse.c:17181
static int parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp, int string_literal, int symbol_literal, int regexp_literal)
Definition: parse.c:12224
long len
Definition: ruby.h:824
static const struct vtable * dyna_push_gen(struct parser_params *)
Definition: parse.c:16272
#define CONST_ID(var, str)
Definition: ruby.h:1428
NODE * heap
Definition: ripper.c:290
static NODE * block_append_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:14822
#define NEW_CVAR(v)
Definition: node.h:416
#define tokline
Definition: parse.c:387
#define ESCAPE_META
Definition: parse.c:12296
#define local_push(top)
Definition: parse.c:560
void void xfree(void *)
Definition: parse.c:878
#define NEW_MATCH2(n1, n2)
Definition: node.h:420
VALUE rb_parser_set_yydebug(VALUE self, VALUE flag)
Definition: parse.c:17559
static void new_bv_gen(struct parser_params *, ID)
Definition: parse.c:15291
#define assignable(id, node)
Definition: parse.c:489
ID first_post_arg
Definition: node.h:517
st_table * st_init_numtable_with_size(st_index_t)
Definition: st.c:278
Definition: parse.c:866
VALUE rb_cstr_to_inum(const char *str, int base, int badcheck)
Definition: bignum.c:3961
static NODE * range_op(struct parser_params *parser, NODE *node)
Definition: parse.c:15799
#define ruby_debug_lines
Definition: parse.c:410
Definition: id.h:84
#define rb_enc_mbcput(c, buf, enc)
Definition: encoding.h:165
#define IS_ARG()
Definition: parse.c:13430
#define NEW_DVAR(v)
Definition: node.h:413
#define NEW_DEFN(i, a, d, p)
Definition: node.h:366
static int parser_tok_hex(struct parser_params *parser, size_t *numlen)
Definition: parse.c:12207
#define new_evstr(n)
Definition: parse.c:462
ID rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc)
Definition: parse.c:17276
int rb_parse_in_eval(void)
Definition: compile.c:5942
NODE * rb_compile_file(const char *f, VALUE file, int start)
Definition: parse.c:12017
VALUE rb_str_buf_new(long)
Definition: string.c:891
VALUE rb_usascii_str_new(const char *, long)
Definition: string.c:540
#define lex_eol_p()
Definition: parse.c:12085
#define rb_node_newnode(type, a1, a2, a3)
Definition: parse.c:424
#define SYMBOL_P(x)
Definition: ruby.h:354
#define tCOMMENT
Definition: eventids2.c:2
int last_cr_line
Definition: ripper.c:335
NODE * kw_args
Definition: node.h:522
#define nd_iter
Definition: node.h:322
#define nd_set_line(n, l)
Definition: node.h:289
VALUE rb_vsprintf(const char *, va_list)
Definition: sprintf.c:1244
Definition: parse.c:848
#define void_stmts(node)
Definition: parse.c:442
#define block_append(h, t)
Definition: parse.c:449
VALUE(* parser_lex_gets)(struct parser_params *, VALUE)
Definition: ripper.c:323
#define NULL
Definition: _sdbm.c:103
#define compile_for_eval
Definition: parse.c:381
#define RTYPEDDATA_TYPE(v)
Definition: ruby.h:995
#define NEW_LASGN(v, val)
Definition: node.h:397
struct token_info token_info
#define FIX2LONG(x)
Definition: ruby.h:345
#define Qundef
Definition: ruby.h:428
static NODE * literal_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:14937
#define tIGNORED_NL
Definition: eventids2.c:1
#define yyerrok
Definition: parse.c:4395
#define NEW_STR(s)
Definition: node.h:423
static NODE * call_uni_op_gen(struct parser_params *, NODE *, ID)
Definition: parse.c:15049
#define YYMAXDEPTH
Definition: parse.c:4667
static int literal_concat0(struct parser_params *, VALUE, VALUE)
Definition: parse.c:14920
int rb_is_instance_id(ID id)
Definition: parse.c:17199
void rb_parser_free(struct parser_params *parser, void *ptr)
Definition: parse.c:17615
Definition: parse.c:847
NODE * kw_rest_arg
Definition: node.h:523
#define ID_GLOBAL
Definition: id.h:33
#define in_def
Definition: parse.c:380
#define ISXDIGIT(c)
Definition: ruby.h:1776
#define ENCODING_SET(obj, i)
Definition: encoding.h:35
int rb_local_defined(ID id)
Definition: compile.c:5923
st_index_t num_entries
Definition: st.h:85
Definition: parse.c:858
#define IS_LABEL_SUFFIX(n)
Definition: parse.c:13435
#define NEW_SELF()
Definition: node.h:455
Definition: parse.c:832
NODE * parser_eval_tree_begin
Definition: ripper.c:339
static int match(VALUE str, VALUE pat, VALUE hash, int(*cb)(VALUE, VALUE))
Definition: date_parse.c:273
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
Definition: class.c:1488
Definition: parse.c:865
#define ruby_verbose
Definition: ruby.h:1475
VALUE rb_str_append(VALUE, VALUE)
Definition: string.c:2298
#define rb_ascii8bit_encindex()
Definition: internal.h:402
int st_foreach(st_table *, int(*)(ANYARGS), st_data_t)
Definition: st.c:1034
static void parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
Definition: parse.c:13201
#define NEW_NODE(t, a0, a1, a2)
Definition: node.h:364
#define NEW_ARGS_AUX(r, b)
Definition: node.h:434
#define RSTRING_NOEMBED
Definition: ruby.h:834
int rb_memcicmp(const void *, const void *, long)
Definition: re.c:80
#define NEW_ALIAS(n, o)
Definition: node.h:444
NODE * rb_parser_compile_string_path(volatile VALUE vparser, VALUE f, VALUE s, int line)
Definition: parse.c:11990
#define ifndef_ripper(x)
Definition: parse.c:695
void(* rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val)
Definition: parse.c:13189
#define YYLEX
Definition: parse.c:4481
static VALUE lex_getline(struct parser_params *parser)
Definition: parse.c:11935
VALUE rb_sym_all_symbols(void)
Definition: parse.c:17172
VALUE rb_eArgError
Definition: error.c:549
#define nd_lit
Definition: node.h:327
#define rb_enc_prev_char(s, p, e, enc)
Definition: encoding.h:168
#define T_REGEXP
Definition: ruby.h:483
#define tokadd_escape(e)
Definition: parse.c:11544
static NODE * node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE)
Definition: parse.c:14769
Definition: node.h:137
#define dyna_push()
Definition: parse.c:573
#define whole_match_p(e, l, i)
Definition: parse.c:11552
#define was_bol()
Definition: parse.c:12161
unsigned long ruby_scan_oct(const char *, size_t, size_t *)
Definition: util.c:28
static int yysyntax_error(YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken)
Definition: parse.c:4781
#define HEAPCNT(n, size)
Definition: parse.c:17569
#define STR_FUNC_EXPAND
Definition: parse.c:12050
static int parser_peek_variable_name(struct parser_params *parser)
Definition: parse.c:12726
VALUE rb_attr_get(VALUE, ID)
Definition: variable.c:1127
#define is_attrset_id(id)
Definition: parse.c:112
struct vtable * args
Definition: ripper.c:189
static int local_id_gen(struct parser_params *, ID)
Definition: parse.c:16244
#define SPECIAL_PUNCT(idx)
Definition: parse.c:12702
#define NEW_CDECL(v, val, path)
Definition: node.h:402
void rb_gc_mark_symbols(int full_mark)
Definition: parse.c:16689
#define rb_backref_error(n)
Definition: parse.c:497
#define NEW_DEFS(r, i, a, d)
Definition: node.h:367
char ** argv
Definition: ruby.c:132
#define tEMBDOC_END
Definition: eventids2.c:5
char * ptr
Definition: ruby.h:825
#define DBL2NUM(dbl)
Definition: ruby.h:815
static void ripper_init_eventids2_table(VALUE self)
Definition: eventids2table.c:2
Definition: parse.c:859
#define ISSPACE(c)
Definition: ruby.h:1770
#define StringValue(v)
Definition: ruby.h:539
VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc)
Definition: string.c:2251
#define STR_NEW(p, n)
Definition: parse.c:361
static NODE * new_args_tail_gen(struct parser_params *, NODE *, ID, ID)
Definition: parse.c:16012
#define rb_warningS(fmt, a)
Definition: parse.c:707
#define YYSTACK_RELOCATE(Stack_alloc, Stack)
Definition: parse.c:1112
#define reduce_nodes(n)
Definition: parse.c:444
#define void_expr0(node)
Definition: parse.c:439
rb_encoding * rb_enc_from_index(int index)
Definition: encoding.c:590
#define tokcopy(n)
Definition: parse.c:12220
void Init_sym(void)
Definition: parse.c:16670
VALUE rb_str_new(const char *, long)
Definition: string.c:534
Definition: parse.c:836
#define xcalloc
Definition: defines.h:110
#define ID_CLASS
Definition: id.h:36
Definition: parse.c:853