Ruby  2.1.3p242(2014-09-19revision47630)
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) dispose_string(str);
13052  goto error;
13053  }
13054  } while (!whole_match_p(eos, len, indent));
13055  }
13056  else {
13057  /* int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
13058  newtok();
13059  if (c == '#') {
13060  int t = parser_peek_variable_name(parser);
13061  if (t) return t;
13062  tokadd('#');
13063  c = nextc();
13064  }
13065  do {
13066  pushback(c);
13067  if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
13068  if (parser->eofp) goto error;
13069  goto restore;
13070  }
13071  if (c != '\n') {
13072  set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
13073  flush_string_content(enc);
13074  return tSTRING_CONTENT;
13075  }
13076  tokadd(nextc());
13077  /* if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
13078  if ((c = nextc()) == -1) goto error;
13079  } while (!whole_match_p(eos, len, indent));
13080  str = STR_NEW3(tok(), toklen(), enc, func);
13081  }
13084  lex_strterm = NEW_STRTERM(-1, 0, 0);
13085  set_yylval_str(str);
13086  return tSTRING_CONTENT;
13087 }
13088 
13089 #include "lex.c"
13090 
13091 static void
13093 {
13094 #ifndef RIPPER
13095  rb_warning0("ambiguous first argument; put parentheses or even spaces");
13096 #else
13097  dispatch0(arg_ambiguous);
13098 #endif
13099 }
13100 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
13101 
13102 static ID
13104 {
13105 #ifndef RIPPER
13106  if (!is_local_id(lhs))
13107  yyerror("formal argument must be local variable");
13108 #endif
13109  shadowing_lvar(lhs);
13110  return lhs;
13111 }
13112 
13113 static int
13114 lvar_defined_gen(struct parser_params *parser, ID id)
13115 {
13116  return (dyna_in_block() && dvar_defined_get(id)) || local_id(id);
13117 }
13118 
13119 /* emacsen -*- hack */
13120 static long
13121 parser_encode_length(struct parser_params *parser, const char *name, long len)
13122 {
13123  long nlen;
13124 
13125  if (len > 5 && name[nlen = len - 5] == '-') {
13126  if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
13127  return nlen;
13128  }
13129  if (len > 4 && name[nlen = len - 4] == '-') {
13130  if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
13131  return nlen;
13132  if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
13133  !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
13134  /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */
13135  return nlen;
13136  }
13137  return len;
13138 }
13139 
13140 static void
13141 parser_set_encode(struct parser_params *parser, const char *name)
13142 {
13143  int idx = rb_enc_find_index(name);
13144  rb_encoding *enc;
13145  VALUE excargs[3];
13146 
13147  if (idx < 0) {
13148  excargs[1] = rb_sprintf("unknown encoding name: %s", name);
13149  error:
13150  excargs[0] = rb_eArgError;
13151  excargs[2] = rb_make_backtrace();
13152  rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
13153  rb_exc_raise(rb_make_exception(3, excargs));
13154  }
13155  enc = rb_enc_from_index(idx);
13156  if (!rb_enc_asciicompat(enc)) {
13157  excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
13158  goto error;
13159  }
13160  parser->enc = enc;
13161 #ifndef RIPPER
13162  if (ruby_debug_lines) {
13163  VALUE lines = ruby_debug_lines;
13164  long i, n = RARRAY_LEN(lines);
13165  for (i = 0; i < n; ++i) {
13166  rb_enc_associate_index(RARRAY_AREF(lines, i), idx);
13167  }
13168  }
13169 #endif
13170 }
13171 
13172 static int
13174 {
13175  const char *p = lex_pbeg, *pend = lex_p - 1;
13176  if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
13177  while (p < pend) {
13178  if (!ISSPACE(*p)) return 0;
13179  p++;
13180  }
13181  return 1;
13182 }
13183 
13184 #ifndef RIPPER
13185 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
13186 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
13187 
13188 static void
13189 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
13190 {
13191  if (!comment_at_top(parser)) {
13192  return;
13193  }
13194  parser_set_encode(parser, val);
13195 }
13196 
13197 static void
13198 parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
13199 {
13200  int *p = &parser->parser_token_info_enabled;
13201 
13202  switch (*val) {
13203  case 't': case 'T':
13204  if (strcasecmp(val, "true") == 0) {
13205  *p = TRUE;
13206  return;
13207  }
13208  break;
13209  case 'f': case 'F':
13210  if (strcasecmp(val, "false") == 0) {
13211  *p = FALSE;
13212  return;
13213  }
13214  break;
13215  }
13216  rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val);
13217 }
13218 
13219 struct magic_comment {
13220  const char *name;
13223 };
13224 
13225 static const struct magic_comment magic_comments[] = {
13228  {"warn_indent", parser_set_token_info},
13229 };
13230 #endif
13231 
13232 static const char *
13233 magic_comment_marker(const char *str, long len)
13234 {
13235  long i = 2;
13236 
13237  while (i < len) {
13238  switch (str[i]) {
13239  case '-':
13240  if (str[i-1] == '*' && str[i-2] == '-') {
13241  return str + i + 1;
13242  }
13243  i += 2;
13244  break;
13245  case '*':
13246  if (i + 1 >= len) return 0;
13247  if (str[i+1] != '-') {
13248  i += 4;
13249  }
13250  else if (str[i-1] != '-') {
13251  i += 2;
13252  }
13253  else {
13254  return str + i + 2;
13255  }
13256  break;
13257  default:
13258  i += 3;
13259  break;
13260  }
13261  }
13262  return 0;
13263 }
13264 
13265 static int
13266 parser_magic_comment(struct parser_params *parser, const char *str, long len)
13267 {
13268  VALUE name = 0, val = 0;
13269  const char *beg, *end, *vbeg, *vend;
13270 #define str_copy(_s, _p, _n) ((_s) \
13271  ? (void)(rb_str_resize((_s), (_n)), \
13272  MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
13273  : (void)((_s) = STR_NEW((_p), (_n))))
13274 
13275  if (len <= 7) return FALSE;
13276  if (!(beg = magic_comment_marker(str, len))) return FALSE;
13277  if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
13278  str = beg;
13279  len = end - beg - 3;
13280 
13281  /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
13282  while (len > 0) {
13283 #ifndef RIPPER
13284  const struct magic_comment *p = magic_comments;
13285 #endif
13286  char *s;
13287  int i;
13288  long n = 0;
13289 
13290  for (; len > 0 && *str; str++, --len) {
13291  switch (*str) {
13292  case '\'': case '"': case ':': case ';':
13293  continue;
13294  }
13295  if (!ISSPACE(*str)) break;
13296  }
13297  for (beg = str; len > 0; str++, --len) {
13298  switch (*str) {
13299  case '\'': case '"': case ':': case ';':
13300  break;
13301  default:
13302  if (ISSPACE(*str)) break;
13303  continue;
13304  }
13305  break;
13306  }
13307  for (end = str; len > 0 && ISSPACE(*str); str++, --len);
13308  if (!len) break;
13309  if (*str != ':') continue;
13310 
13311  do str++; while (--len > 0 && ISSPACE(*str));
13312  if (!len) break;
13313  if (*str == '"') {
13314  for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
13315  if (*str == '\\') {
13316  --len;
13317  ++str;
13318  }
13319  }
13320  vend = str;
13321  if (len) {
13322  --len;
13323  ++str;
13324  }
13325  }
13326  else {
13327  for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
13328  vend = str;
13329  }
13330  while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
13331 
13332  n = end - beg;
13333  str_copy(name, beg, n);
13334  s = RSTRING_PTR(name);
13335  for (i = 0; i < n; ++i) {
13336  if (s[i] == '-') s[i] = '_';
13337  }
13338 #ifndef RIPPER
13339  do {
13340  if (STRNCASECMP(p->name, s, n) == 0) {
13341  n = vend - vbeg;
13342  if (p->length) {
13343  n = (*p->length)(parser, vbeg, n);
13344  }
13345  str_copy(val, vbeg, n);
13346  (*p->func)(parser, s, RSTRING_PTR(val));
13347  break;
13348  }
13349  } while (++p < magic_comments + numberof(magic_comments));
13350 #else
13351  str_copy(val, vbeg, vend - vbeg);
13352  dispatch2(magic_comment, name, val);
13353 #endif
13354  }
13355 
13356  return TRUE;
13357 }
13358 
13359 static void
13360 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
13361 {
13362  int sep = 0;
13363  const char *beg = str;
13364  VALUE s;
13365 
13366  for (;;) {
13367  if (send - str <= 6) return;
13368  switch (str[6]) {
13369  case 'C': case 'c': str += 6; continue;
13370  case 'O': case 'o': str += 5; continue;
13371  case 'D': case 'd': str += 4; continue;
13372  case 'I': case 'i': str += 3; continue;
13373  case 'N': case 'n': str += 2; continue;
13374  case 'G': case 'g': str += 1; continue;
13375  case '=': case ':':
13376  sep = 1;
13377  str += 6;
13378  break;
13379  default:
13380  str += 6;
13381  if (ISSPACE(*str)) break;
13382  continue;
13383  }
13384  if (STRNCASECMP(str-6, "coding", 6) == 0) break;
13385  }
13386  for (;;) {
13387  do {
13388  if (++str >= send) return;
13389  } while (ISSPACE(*str));
13390  if (sep) break;
13391  if (*str != '=' && *str != ':') return;
13392  sep = 1;
13393  str++;
13394  }
13395  beg = str;
13396  while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
13397  s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
13398  parser_set_encode(parser, RSTRING_PTR(s));
13399  rb_str_resize(s, 0);
13400 }
13401 
13402 static void
13404 {
13405  int c = nextc();
13406  switch (c) {
13407  case '#':
13408  if (peek('!')) parser->has_shebang = 1;
13409  break;
13410  case 0xef: /* UTF-8 BOM marker */
13411  if (lex_pend - lex_p >= 2 &&
13412  (unsigned char)lex_p[0] == 0xbb &&
13413  (unsigned char)lex_p[1] == 0xbf) {
13414  parser->enc = rb_utf8_encoding();
13415  lex_p += 2;
13416  lex_pbeg = lex_p;
13417  return;
13418  }
13419  break;
13420  case EOF:
13421  return;
13422  }
13423  pushback(c);
13424  parser->enc = rb_enc_get(lex_lastline);
13425 }
13426 
13427 #define IS_ARG() IS_lex_state(EXPR_ARG_ANY)
13428 #define IS_END() IS_lex_state(EXPR_END_ANY)
13429 #define IS_BEG() IS_lex_state(EXPR_BEG_ANY)
13430 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
13431 #define IS_LABEL_POSSIBLE() ((IS_lex_state(EXPR_BEG | EXPR_ENDFN) && !cmd_state) || IS_ARG())
13432 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1))
13433 #define IS_AFTER_OPERATOR() IS_lex_state(EXPR_FNAME | EXPR_DOT)
13434 
13435 #ifndef RIPPER
13436 #define ambiguous_operator(op, syn) ( \
13437  rb_warning0("`"op"' after local variable or literal is interpreted as binary operator"), \
13438  rb_warning0("even though it seems like "syn""))
13439 #else
13440 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
13441 #endif
13442 #define warn_balanced(op, syn) ((void) \
13443  (!IS_lex_state_for(last_state, EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN|EXPR_ENDARG) && \
13444  space_seen && !ISSPACE(c) && \
13445  (ambiguous_operator(op, syn), 0)))
13446 
13447 static int
13449 {
13450  register int c;
13451  int space_seen = 0;
13452  int cmd_state;
13453  enum lex_state_e last_state;
13454  rb_encoding *enc;
13455  int mb;
13456 #ifdef RIPPER
13457  int fallthru = FALSE;
13458 #endif
13459 
13460  if (lex_strterm) {
13461  int token;
13462  if (nd_type(lex_strterm) == NODE_HEREDOC) {
13463  token = here_document(lex_strterm);
13464  if (token == tSTRING_END) {
13465  lex_strterm = 0;
13466  lex_state = EXPR_END;
13467  }
13468  }
13469  else {
13470  token = parse_string(lex_strterm);
13471  if (token == tSTRING_END || token == tREGEXP_END) {
13473  lex_strterm = 0;
13474  lex_state = EXPR_END;
13475  }
13476  }
13477  return token;
13478  }
13479  cmd_state = command_start;
13480  command_start = FALSE;
13481  retry:
13482  last_state = lex_state;
13483  switch (c = nextc()) {
13484  case '\0': /* NUL */
13485  case '\004': /* ^D */
13486  case '\032': /* ^Z */
13487  case -1: /* end of script. */
13488  return 0;
13489 
13490  /* white spaces */
13491  case ' ': case '\t': case '\f': case '\r':
13492  case '\13': /* '\v' */
13493  space_seen = 1;
13494 #ifdef RIPPER
13495  while ((c = nextc())) {
13496  switch (c) {
13497  case ' ': case '\t': case '\f': case '\r':
13498  case '\13': /* '\v' */
13499  break;
13500  default:
13501  goto outofloop;
13502  }
13503  }
13504  outofloop:
13505  pushback(c);
13506  ripper_dispatch_scan_event(parser, tSP);
13507 #endif
13508  goto retry;
13509 
13510  case '#': /* it's a comment */
13511  /* no magic_comment in shebang line */
13512  if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
13513  if (comment_at_top(parser)) {
13514  set_file_encoding(parser, lex_p, lex_pend);
13515  }
13516  }
13517  lex_p = lex_pend;
13518 #ifdef RIPPER
13519  ripper_dispatch_scan_event(parser, tCOMMENT);
13520  fallthru = TRUE;
13521 #endif
13522  /* fall through */
13523  case '\n':
13524  if (IS_lex_state(EXPR_BEG | EXPR_VALUE | EXPR_CLASS | EXPR_FNAME | EXPR_DOT | EXPR_LABELARG)) {
13525 #ifdef RIPPER
13526  if (!fallthru) {
13527  ripper_dispatch_scan_event(parser, tIGNORED_NL);
13528  }
13529  fallthru = FALSE;
13530 #endif
13531  if (IS_lex_state(EXPR_LABELARG) && parser->parser_in_kwarg) {
13532  goto normal_newline;
13533  }
13534  goto retry;
13535  }
13536  while ((c = nextc())) {
13537  switch (c) {
13538  case ' ': case '\t': case '\f': case '\r':
13539  case '\13': /* '\v' */
13540  space_seen = 1;
13541  break;
13542  case '.': {
13543  if ((c = nextc()) != '.') {
13544  pushback(c);
13545  pushback('.');
13546  goto retry;
13547  }
13548  }
13549  default:
13550  --ruby_sourceline;
13552  case -1: /* EOF no decrement*/
13553  lex_goto_eol(parser);
13554 #ifdef RIPPER
13555  if (c != -1) {
13556  parser->tokp = lex_p;
13557  }
13558 #endif
13559  goto normal_newline;
13560  }
13561  }
13562  normal_newline:
13563  command_start = TRUE;
13564  lex_state = EXPR_BEG;
13565  return '\n';
13566 
13567  case '*':
13568  if ((c = nextc()) == '*') {
13569  if ((c = nextc()) == '=') {
13571  lex_state = EXPR_BEG;
13572  return tOP_ASGN;
13573  }
13574  pushback(c);
13575  if (IS_SPCARG(c)) {
13576  rb_warning0("`**' interpreted as argument prefix");
13577  c = tDSTAR;
13578  }
13579  else if (IS_BEG()) {
13580  c = tDSTAR;
13581  }
13582  else {
13583  warn_balanced("**", "argument prefix");
13584  c = tPOW;
13585  }
13586  }
13587  else {
13588  if (c == '=') {
13589  set_yylval_id('*');
13590  lex_state = EXPR_BEG;
13591  return tOP_ASGN;
13592  }
13593  pushback(c);
13594  if (IS_SPCARG(c)) {
13595  rb_warning0("`*' interpreted as argument prefix");
13596  c = tSTAR;
13597  }
13598  else if (IS_BEG()) {
13599  c = tSTAR;
13600  }
13601  else {
13602  warn_balanced("*", "argument prefix");
13603  c = '*';
13604  }
13605  }
13606  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13607  return c;
13608 
13609  case '!':
13610  c = nextc();
13611  if (IS_AFTER_OPERATOR()) {
13612  lex_state = EXPR_ARG;
13613  if (c == '@') {
13614  return '!';
13615  }
13616  }
13617  else {
13618  lex_state = EXPR_BEG;
13619  }
13620  if (c == '=') {
13621  return tNEQ;
13622  }
13623  if (c == '~') {
13624  return tNMATCH;
13625  }
13626  pushback(c);
13627  return '!';
13628 
13629  case '=':
13630  if (was_bol()) {
13631  /* skip embedded rd document */
13632  if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
13633 #ifdef RIPPER
13634  int first_p = TRUE;
13635 
13636  lex_goto_eol(parser);
13637  ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
13638 #endif
13639  for (;;) {
13640  lex_goto_eol(parser);
13641 #ifdef RIPPER
13642  if (!first_p) {
13643  ripper_dispatch_scan_event(parser, tEMBDOC);
13644  }
13645  first_p = FALSE;
13646 #endif
13647  c = nextc();
13648  if (c == -1) {
13649  compile_error(PARSER_ARG "embedded document meets end of file");
13650  return 0;
13651  }
13652  if (c != '=') continue;
13653  if (strncmp(lex_p, "end", 3) == 0 &&
13654  (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
13655  break;
13656  }
13657  }
13658  lex_goto_eol(parser);
13659 #ifdef RIPPER
13660  ripper_dispatch_scan_event(parser, tEMBDOC_END);
13661 #endif
13662  goto retry;
13663  }
13664  }
13665 
13666  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13667  if ((c = nextc()) == '=') {
13668  if ((c = nextc()) == '=') {
13669  return tEQQ;
13670  }
13671  pushback(c);
13672  return tEQ;
13673  }
13674  if (c == '~') {
13675  return tMATCH;
13676  }
13677  else if (c == '>') {
13678  return tASSOC;
13679  }
13680  pushback(c);
13681  return '=';
13682 
13683  case '<':
13684  last_state = lex_state;
13685  c = nextc();
13686  if (c == '<' &&
13687  !IS_lex_state(EXPR_DOT | EXPR_CLASS) &&
13688  !IS_END() &&
13689  (!IS_ARG() || space_seen)) {
13690  int token = heredoc_identifier();
13691  if (token) return token;
13692  }
13693  if (IS_AFTER_OPERATOR()) {
13694  lex_state = EXPR_ARG;
13695  }
13696  else {
13697  if (IS_lex_state(EXPR_CLASS))
13698  command_start = TRUE;
13699  lex_state = EXPR_BEG;
13700  }
13701  if (c == '=') {
13702  if ((c = nextc()) == '>') {
13703  return tCMP;
13704  }
13705  pushback(c);
13706  return tLEQ;
13707  }
13708  if (c == '<') {
13709  if ((c = nextc()) == '=') {
13711  lex_state = EXPR_BEG;
13712  return tOP_ASGN;
13713  }
13714  pushback(c);
13715  warn_balanced("<<", "here document");
13716  return tLSHFT;
13717  }
13718  pushback(c);
13719  return '<';
13720 
13721  case '>':
13722  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13723  if ((c = nextc()) == '=') {
13724  return tGEQ;
13725  }
13726  if (c == '>') {
13727  if ((c = nextc()) == '=') {
13729  lex_state = EXPR_BEG;
13730  return tOP_ASGN;
13731  }
13732  pushback(c);
13733  return tRSHFT;
13734  }
13735  pushback(c);
13736  return '>';
13737 
13738  case '"':
13739  lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
13740  return tSTRING_BEG;
13741 
13742  case '`':
13743  if (IS_lex_state(EXPR_FNAME)) {
13744  lex_state = EXPR_ENDFN;
13745  return c;
13746  }
13747  if (IS_lex_state(EXPR_DOT)) {
13748  if (cmd_state)
13749  lex_state = EXPR_CMDARG;
13750  else
13751  lex_state = EXPR_ARG;
13752  return c;
13753  }
13754  lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
13755  return tXSTRING_BEG;
13756 
13757  case '\'':
13758  lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
13759  return tSTRING_BEG;
13760 
13761  case '?':
13762  if (IS_END()) {
13763  lex_state = EXPR_VALUE;
13764  return '?';
13765  }
13766  c = nextc();
13767  if (c == -1) {
13768  compile_error(PARSER_ARG "incomplete character syntax");
13769  return 0;
13770  }
13771  if (rb_enc_isspace(c, current_enc)) {
13772  if (!IS_ARG()) {
13773  int c2 = 0;
13774  switch (c) {
13775  case ' ':
13776  c2 = 's';
13777  break;
13778  case '\n':
13779  c2 = 'n';
13780  break;
13781  case '\t':
13782  c2 = 't';
13783  break;
13784  case '\v':
13785  c2 = 'v';
13786  break;
13787  case '\r':
13788  c2 = 'r';
13789  break;
13790  case '\f':
13791  c2 = 'f';
13792  break;
13793  }
13794  if (c2) {
13795  rb_warnI("invalid character syntax; use ?\\%c", c2);
13796  }
13797  }
13798  ternary:
13799  pushback(c);
13800  lex_state = EXPR_VALUE;
13801  return '?';
13802  }
13803  newtok();
13804  enc = current_enc;
13805  if (!parser_isascii()) {
13806  if (tokadd_mbchar(c) == -1) return 0;
13807  }
13808  else if ((rb_enc_isalnum(c, current_enc) || c == '_') &&
13810  goto ternary;
13811  }
13812  else if (c == '\\') {
13813  if (peek('u')) {
13814  nextc();
13815  c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
13816  if (0x80 <= c) {
13817  tokaddmbc(c, enc);
13818  }
13819  else {
13820  tokadd(c);
13821  }
13822  }
13823  else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) {
13824  nextc();
13825  if (tokadd_mbchar(c) == -1) return 0;
13826  }
13827  else {
13828  c = read_escape(0, &enc);
13829  tokadd(c);
13830  }
13831  }
13832  else {
13833  tokadd(c);
13834  }
13835  tokfix();
13836  set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
13837  lex_state = EXPR_END;
13838  return tCHAR;
13839 
13840  case '&':
13841  if ((c = nextc()) == '&') {
13842  lex_state = EXPR_BEG;
13843  if ((c = nextc()) == '=') {
13845  lex_state = EXPR_BEG;
13846  return tOP_ASGN;
13847  }
13848  pushback(c);
13849  return tANDOP;
13850  }
13851  else if (c == '=') {
13852  set_yylval_id('&');
13853  lex_state = EXPR_BEG;
13854  return tOP_ASGN;
13855  }
13856  pushback(c);
13857  if (IS_SPCARG(c)) {
13858  rb_warning0("`&' interpreted as argument prefix");
13859  c = tAMPER;
13860  }
13861  else if (IS_BEG()) {
13862  c = tAMPER;
13863  }
13864  else {
13865  warn_balanced("&", "argument prefix");
13866  c = '&';
13867  }
13868  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13869  return c;
13870 
13871  case '|':
13872  if ((c = nextc()) == '|') {
13873  lex_state = EXPR_BEG;
13874  if ((c = nextc()) == '=') {
13876  lex_state = EXPR_BEG;
13877  return tOP_ASGN;
13878  }
13879  pushback(c);
13880  return tOROP;
13881  }
13882  if (c == '=') {
13883  set_yylval_id('|');
13884  lex_state = EXPR_BEG;
13885  return tOP_ASGN;
13886  }
13887  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13888  pushback(c);
13889  return '|';
13890 
13891  case '+':
13892  c = nextc();
13893  if (IS_AFTER_OPERATOR()) {
13894  lex_state = EXPR_ARG;
13895  if (c == '@') {
13896  return tUPLUS;
13897  }
13898  pushback(c);
13899  return '+';
13900  }
13901  if (c == '=') {
13902  set_yylval_id('+');
13903  lex_state = EXPR_BEG;
13904  return tOP_ASGN;
13905  }
13906  if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13907  lex_state = EXPR_BEG;
13908  pushback(c);
13909  if (c != -1 && ISDIGIT(c)) {
13910  c = '+';
13911  goto start_num;
13912  }
13913  return tUPLUS;
13914  }
13915  lex_state = EXPR_BEG;
13916  pushback(c);
13917  warn_balanced("+", "unary operator");
13918  return '+';
13919 
13920  case '-':
13921  c = nextc();
13922  if (IS_AFTER_OPERATOR()) {
13923  lex_state = EXPR_ARG;
13924  if (c == '@') {
13925  return tUMINUS;
13926  }
13927  pushback(c);
13928  return '-';
13929  }
13930  if (c == '=') {
13931  set_yylval_id('-');
13932  lex_state = EXPR_BEG;
13933  return tOP_ASGN;
13934  }
13935  if (c == '>') {
13936  lex_state = EXPR_ENDFN;
13937  return tLAMBDA;
13938  }
13939  if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13940  lex_state = EXPR_BEG;
13941  pushback(c);
13942  if (c != -1 && ISDIGIT(c)) {
13943  return tUMINUS_NUM;
13944  }
13945  return tUMINUS;
13946  }
13947  lex_state = EXPR_BEG;
13948  pushback(c);
13949  warn_balanced("-", "unary operator");
13950  return '-';
13951 
13952  case '.':
13953  lex_state = EXPR_BEG;
13954  if ((c = nextc()) == '.') {
13955  if ((c = nextc()) == '.') {
13956  return tDOT3;
13957  }
13958  pushback(c);
13959  return tDOT2;
13960  }
13961  pushback(c);
13962  if (c != -1 && ISDIGIT(c)) {
13963  yyerror("no .<digit> floating literal anymore; put 0 before dot");
13964  }
13965  lex_state = EXPR_DOT;
13966  return '.';
13967 
13968  start_num:
13969  case '0': case '1': case '2': case '3': case '4':
13970  case '5': case '6': case '7': case '8': case '9':
13971  {
13972  int is_float, seen_point, seen_e, nondigit;
13973  int suffix;
13974 
13975  is_float = seen_point = seen_e = nondigit = 0;
13976  lex_state = EXPR_END;
13977  newtok();
13978  if (c == '-' || c == '+') {
13979  tokadd(c);
13980  c = nextc();
13981  }
13982  if (c == '0') {
13983 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13984  int start = toklen();
13985  c = nextc();
13986  if (c == 'x' || c == 'X') {
13987  /* hexadecimal */
13988  c = nextc();
13989  if (c != -1 && ISXDIGIT(c)) {
13990  do {
13991  if (c == '_') {
13992  if (nondigit) break;
13993  nondigit = c;
13994  continue;
13995  }
13996  if (!ISXDIGIT(c)) break;
13997  nondigit = 0;
13998  tokadd(c);
13999  } while ((c = nextc()) != -1);
14000  }
14001  pushback(c);
14002  tokfix();
14003  if (toklen() == start) {
14004  no_digits();
14005  }
14006  else if (nondigit) goto trailing_uc;
14008  return set_integer_literal(rb_cstr_to_inum(tok(), 16, FALSE), suffix);
14009  }
14010  if (c == 'b' || c == 'B') {
14011  /* binary */
14012  c = nextc();
14013  if (c == '0' || c == '1') {
14014  do {
14015  if (c == '_') {
14016  if (nondigit) break;
14017  nondigit = c;
14018  continue;
14019  }
14020  if (c != '0' && c != '1') break;
14021  nondigit = 0;
14022  tokadd(c);
14023  } while ((c = nextc()) != -1);
14024  }
14025  pushback(c);
14026  tokfix();
14027  if (toklen() == start) {
14028  no_digits();
14029  }
14030  else if (nondigit) goto trailing_uc;
14032  return set_integer_literal(rb_cstr_to_inum(tok(), 2, FALSE), suffix);
14033  }
14034  if (c == 'd' || c == 'D') {
14035  /* decimal */
14036  c = nextc();
14037  if (c != -1 && ISDIGIT(c)) {
14038  do {
14039  if (c == '_') {
14040  if (nondigit) break;
14041  nondigit = c;
14042  continue;
14043  }
14044  if (!ISDIGIT(c)) break;
14045  nondigit = 0;
14046  tokadd(c);
14047  } while ((c = nextc()) != -1);
14048  }
14049  pushback(c);
14050  tokfix();
14051  if (toklen() == start) {
14052  no_digits();
14053  }
14054  else if (nondigit) goto trailing_uc;
14056  return set_integer_literal(rb_cstr_to_inum(tok(), 10, FALSE), suffix);
14057  }
14058  if (c == '_') {
14059  /* 0_0 */
14060  goto octal_number;
14061  }
14062  if (c == 'o' || c == 'O') {
14063  /* prefixed octal */
14064  c = nextc();
14065  if (c == -1 || c == '_' || !ISDIGIT(c)) {
14066  no_digits();
14067  }
14068  }
14069  if (c >= '0' && c <= '7') {
14070  /* octal */
14071  octal_number:
14072  do {
14073  if (c == '_') {
14074  if (nondigit) break;
14075  nondigit = c;
14076  continue;
14077  }
14078  if (c < '0' || c > '9') break;
14079  if (c > '7') goto invalid_octal;
14080  nondigit = 0;
14081  tokadd(c);
14082  } while ((c = nextc()) != -1);
14083  if (toklen() > start) {
14084  pushback(c);
14085  tokfix();
14086  if (nondigit) goto trailing_uc;
14088  return set_integer_literal(rb_cstr_to_inum(tok(), 8, FALSE), suffix);
14089  }
14090  if (nondigit) {
14091  pushback(c);
14092  goto trailing_uc;
14093  }
14094  }
14095  if (c > '7' && c <= '9') {
14096  invalid_octal:
14097  yyerror("Invalid octal digit");
14098  }
14099  else if (c == '.' || c == 'e' || c == 'E') {
14100  tokadd('0');
14101  }
14102  else {
14103  pushback(c);
14105  return set_integer_literal(INT2FIX(0), suffix);
14106  }
14107  }
14108 
14109  for (;;) {
14110  switch (c) {
14111  case '0': case '1': case '2': case '3': case '4':
14112  case '5': case '6': case '7': case '8': case '9':
14113  nondigit = 0;
14114  tokadd(c);
14115  break;
14116 
14117  case '.':
14118  if (nondigit) goto trailing_uc;
14119  if (seen_point || seen_e) {
14120  goto decode_num;
14121  }
14122  else {
14123  int c0 = nextc();
14124  if (c0 == -1 || !ISDIGIT(c0)) {
14125  pushback(c0);
14126  goto decode_num;
14127  }
14128  c = c0;
14129  }
14130  seen_point = toklen();
14131  tokadd('.');
14132  tokadd(c);
14133  is_float++;
14134  nondigit = 0;
14135  break;
14136 
14137  case 'e':
14138  case 'E':
14139  if (nondigit) {
14140  pushback(c);
14141  c = nondigit;
14142  goto decode_num;
14143  }
14144  if (seen_e) {
14145  goto decode_num;
14146  }
14147  nondigit = c;
14148  c = nextc();
14149  if (c != '-' && c != '+' && !ISDIGIT(c)) {
14150  pushback(c);
14151  nondigit = 0;
14152  goto decode_num;
14153  }
14154  tokadd(nondigit);
14155  seen_e++;
14156  is_float++;
14157  tokadd(c);
14158  nondigit = (c == '-' || c == '+') ? c : 0;
14159  break;
14160 
14161  case '_': /* `_' in number just ignored */
14162  if (nondigit) goto decode_num;
14163  nondigit = c;
14164  break;
14165 
14166  default:
14167  goto decode_num;
14168  }
14169  c = nextc();
14170  }
14171 
14172  decode_num:
14173  pushback(c);
14174  if (nondigit) {
14175  char tmp[30];
14176  trailing_uc:
14177  snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
14178  yyerror(tmp);
14179  }
14180  tokfix();
14181  if (is_float) {
14182  int type = tFLOAT;
14183  VALUE v;
14184 
14185  suffix = number_literal_suffix(seen_e ? NUM_SUFFIX_I : NUM_SUFFIX_ALL);
14186  if (suffix & NUM_SUFFIX_R) {
14187  char *point = &tok()[seen_point];
14188  size_t fraclen = toklen()-seen_point-1;
14189  type = tRATIONAL;
14190  memmove(point, point+1, fraclen+1);
14191  v = rb_cstr_to_inum(tok(), 10, FALSE);
14192  v = rb_rational_new(v, rb_int_positive_pow(10, fraclen));
14193  }
14194  else {
14195  double d = strtod(tok(), 0);
14196  if (errno == ERANGE) {
14197  rb_warningS("Float %s out of range", tok());
14198  errno = 0;
14199  }
14200  v = DBL2NUM(d);
14201  }
14202  return set_number_literal(v, type, suffix);
14203  }
14205  return set_integer_literal(rb_cstr_to_inum(tok(), 10, FALSE), suffix);
14206  }
14207 
14208  case ')':
14209  case ']':
14210  paren_nest--;
14211  case '}':
14212  COND_LEXPOP();
14213  CMDARG_LEXPOP();
14214  if (c == ')')
14215  lex_state = EXPR_ENDFN;
14216  else
14217  lex_state = EXPR_ENDARG;
14218  if (c == '}') {
14219  if (!brace_nest--) c = tSTRING_DEND;
14220  }
14221  return c;
14222 
14223  case ':':
14224  c = nextc();
14225  if (c == ':') {
14226  if (IS_BEG() || IS_lex_state(EXPR_CLASS) || IS_SPCARG(-1)) {
14227  lex_state = EXPR_BEG;
14228  return tCOLON3;
14229  }
14230  lex_state = EXPR_DOT;
14231  return tCOLON2;
14232  }
14233  if (IS_END() || ISSPACE(c)) {
14234  pushback(c);
14235  warn_balanced(":", "symbol literal");
14236  lex_state = EXPR_BEG;
14237  return ':';
14238  }
14239  switch (c) {
14240  case '\'':
14241  lex_strterm = NEW_STRTERM(str_ssym, c, 0);
14242  break;
14243  case '"':
14244  lex_strterm = NEW_STRTERM(str_dsym, c, 0);
14245  break;
14246  default:
14247  pushback(c);
14248  break;
14249  }
14250  lex_state = EXPR_FNAME;
14251  return tSYMBEG;
14252 
14253  case '/':
14254  if (IS_lex_state(EXPR_BEG_ANY)) {
14255  lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
14256  return tREGEXP_BEG;
14257  }
14258  if ((c = nextc()) == '=') {
14259  set_yylval_id('/');
14260  lex_state = EXPR_BEG;
14261  return tOP_ASGN;
14262  }
14263  pushback(c);
14264  if (IS_SPCARG(c)) {
14265  (void)arg_ambiguous();
14266  lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
14267  return tREGEXP_BEG;
14268  }
14269  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14270  warn_balanced("/", "regexp literal");
14271  return '/';
14272 
14273  case '^':
14274  if ((c = nextc()) == '=') {
14275  set_yylval_id('^');
14276  lex_state = EXPR_BEG;
14277  return tOP_ASGN;
14278  }
14279  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14280  pushback(c);
14281  return '^';
14282 
14283  case ';':
14284  lex_state = EXPR_BEG;
14285  command_start = TRUE;
14286  return ';';
14287 
14288  case ',':
14289  lex_state = EXPR_BEG;
14290  return ',';
14291 
14292  case '~':
14293  if (IS_AFTER_OPERATOR()) {
14294  if ((c = nextc()) != '@') {
14295  pushback(c);
14296  }
14297  lex_state = EXPR_ARG;
14298  }
14299  else {
14300  lex_state = EXPR_BEG;
14301  }
14302  return '~';
14303 
14304  case '(':
14305  if (IS_BEG()) {
14306  c = tLPAREN;
14307  }
14308  else if (IS_SPCARG(-1)) {
14309  c = tLPAREN_ARG;
14310  }
14311  paren_nest++;
14312  COND_PUSH(0);
14313  CMDARG_PUSH(0);
14314  lex_state = EXPR_BEG;
14315  return c;
14316 
14317  case '[':
14318  paren_nest++;
14319  if (IS_AFTER_OPERATOR()) {
14320  lex_state = EXPR_ARG;
14321  if ((c = nextc()) == ']') {
14322  if ((c = nextc()) == '=') {
14323  return tASET;
14324  }
14325  pushback(c);
14326  return tAREF;
14327  }
14328  pushback(c);
14329  return '[';
14330  }
14331  else if (IS_BEG()) {
14332  c = tLBRACK;
14333  }
14334  else if (IS_ARG() && space_seen) {
14335  c = tLBRACK;
14336  }
14337  lex_state = EXPR_BEG;
14338  COND_PUSH(0);
14339  CMDARG_PUSH(0);
14340  return c;
14341 
14342  case '{':
14343  ++brace_nest;
14344  if (lpar_beg && lpar_beg == paren_nest) {
14345  lex_state = EXPR_BEG;
14346  lpar_beg = 0;
14347  --paren_nest;
14348  COND_PUSH(0);
14349  CMDARG_PUSH(0);
14350  return tLAMBEG;
14351  }
14352  if (IS_ARG() || IS_lex_state(EXPR_END | EXPR_ENDFN))
14353  c = '{'; /* block (primary) */
14354  else if (IS_lex_state(EXPR_ENDARG))
14355  c = tLBRACE_ARG; /* block (expr) */
14356  else
14357  c = tLBRACE; /* hash */
14358  COND_PUSH(0);
14359  CMDARG_PUSH(0);
14360  lex_state = EXPR_BEG;
14361  if (c != tLBRACE) command_start = TRUE;
14362  return c;
14363 
14364  case '\\':
14365  c = nextc();
14366  if (c == '\n') {
14367  space_seen = 1;
14368 #ifdef RIPPER
14369  ripper_dispatch_scan_event(parser, tSP);
14370 #endif
14371  goto retry; /* skip \\n */
14372  }
14373  pushback(c);
14374  return '\\';
14375 
14376  case '%':
14377  if (IS_lex_state(EXPR_BEG_ANY)) {
14378  int term;
14379  int paren;
14380 
14381  c = nextc();
14382  quotation:
14383  if (c == -1 || !ISALNUM(c)) {
14384  term = c;
14385  c = 'Q';
14386  }
14387  else {
14388  term = nextc();
14389  if (rb_enc_isalnum(term, current_enc) || !parser_isascii()) {
14390  yyerror("unknown type of %string");
14391  return 0;
14392  }
14393  }
14394  if (c == -1 || term == -1) {
14395  compile_error(PARSER_ARG "unterminated quoted string meets end of file");
14396  return 0;
14397  }
14398  paren = term;
14399  if (term == '(') term = ')';
14400  else if (term == '[') term = ']';
14401  else if (term == '{') term = '}';
14402  else if (term == '<') term = '>';
14403  else paren = 0;
14404 
14405  switch (c) {
14406  case 'Q':
14407  lex_strterm = NEW_STRTERM(str_dquote, term, paren);
14408  return tSTRING_BEG;
14409 
14410  case 'q':
14411  lex_strterm = NEW_STRTERM(str_squote, term, paren);
14412  return tSTRING_BEG;
14413 
14414  case 'W':
14415  lex_strterm = NEW_STRTERM(str_dword, term, paren);
14416  do {c = nextc();} while (ISSPACE(c));
14417  pushback(c);
14418  return tWORDS_BEG;
14419 
14420  case 'w':
14421  lex_strterm = NEW_STRTERM(str_sword, term, paren);
14422  do {c = nextc();} while (ISSPACE(c));
14423  pushback(c);
14424  return tQWORDS_BEG;
14425 
14426  case 'I':
14427  lex_strterm = NEW_STRTERM(str_dword, term, paren);
14428  do {c = nextc();} while (ISSPACE(c));
14429  pushback(c);
14430  return tSYMBOLS_BEG;
14431 
14432  case 'i':
14433  lex_strterm = NEW_STRTERM(str_sword, term, paren);
14434  do {c = nextc();} while (ISSPACE(c));
14435  pushback(c);
14436  return tQSYMBOLS_BEG;
14437 
14438  case 'x':
14439  lex_strterm = NEW_STRTERM(str_xquote, term, paren);
14440  return tXSTRING_BEG;
14441 
14442  case 'r':
14443  lex_strterm = NEW_STRTERM(str_regexp, term, paren);
14444  return tREGEXP_BEG;
14445 
14446  case 's':
14447  lex_strterm = NEW_STRTERM(str_ssym, term, paren);
14448  lex_state = EXPR_FNAME;
14449  return tSYMBEG;
14450 
14451  default:
14452  yyerror("unknown type of %string");
14453  return 0;
14454  }
14455  }
14456  if ((c = nextc()) == '=') {
14457  set_yylval_id('%');
14458  lex_state = EXPR_BEG;
14459  return tOP_ASGN;
14460  }
14461  if (IS_SPCARG(c)) {
14462  goto quotation;
14463  }
14464  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14465  pushback(c);
14466  warn_balanced("%%", "string literal");
14467  return '%';
14468 
14469  case '$':
14470  lex_state = EXPR_END;
14471  newtok();
14472  c = nextc();
14473  switch (c) {
14474  case '_': /* $_: last read line string */
14475  c = nextc();
14476  if (parser_is_identchar()) {
14477  tokadd('$');
14478  tokadd('_');
14479  break;
14480  }
14481  pushback(c);
14482  c = '_';
14483  /* fall through */
14484  case '~': /* $~: match-data */
14485  case '*': /* $*: argv */
14486  case '$': /* $$: pid */
14487  case '?': /* $?: last status */
14488  case '!': /* $!: error string */
14489  case '@': /* $@: error position */
14490  case '/': /* $/: input record separator */
14491  case '\\': /* $\: output record separator */
14492  case ';': /* $;: field separator */
14493  case ',': /* $,: output field separator */
14494  case '.': /* $.: last read line number */
14495  case '=': /* $=: ignorecase */
14496  case ':': /* $:: load path */
14497  case '<': /* $<: reading filename */
14498  case '>': /* $>: default output handle */
14499  case '\"': /* $": already loaded files */
14500  tokadd('$');
14501  tokadd(c);
14502  goto gvar;
14503 
14504  case '-':
14505  tokadd('$');
14506  tokadd(c);
14507  c = nextc();
14508  if (parser_is_identchar()) {
14509  if (tokadd_mbchar(c) == -1) return 0;
14510  }
14511  else {
14512  pushback(c);
14513  pushback('-');
14514  return '$';
14515  }
14516  gvar:
14518  return tGVAR;
14519 
14520  case '&': /* $&: last match */
14521  case '`': /* $`: string before last match */
14522  case '\'': /* $': string after last match */
14523  case '+': /* $+: string matches last paren. */
14524  if (IS_lex_state_for(last_state, EXPR_FNAME)) {
14525  tokadd('$');
14526  tokadd(c);
14527  goto gvar;
14528  }
14530  return tBACK_REF;
14531 
14532  case '1': case '2': case '3':
14533  case '4': case '5': case '6':
14534  case '7': case '8': case '9':
14535  tokadd('$');
14536  do {
14537  tokadd(c);
14538  c = nextc();
14539  } while (c != -1 && ISDIGIT(c));
14540  pushback(c);
14541  if (IS_lex_state_for(last_state, EXPR_FNAME)) goto gvar;
14542  tokfix();
14543  set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
14544  return tNTH_REF;
14545 
14546  default:
14547  if (!parser_is_identchar()) {
14548  pushback(c);
14549  compile_error(PARSER_ARG "`$%c' is not allowed as a global variable name", c);
14550  return 0;
14551  }
14552  case '0':
14553  tokadd('$');
14554  }
14555  break;
14556 
14557  case '@':
14558  c = nextc();
14559  newtok();
14560  tokadd('@');
14561  if (c == '@') {
14562  tokadd('@');
14563  c = nextc();
14564  }
14565  if (c != -1 && (ISDIGIT(c) || !parser_is_identchar())) {
14566  pushback(c);
14567  if (tokidx == 1) {
14568  compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
14569  }
14570  else {
14571  compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
14572  }
14573  return 0;
14574  }
14575  break;
14576 
14577  case '_':
14578  if (was_bol() && whole_match_p("__END__", 7, 0)) {
14579  ruby__end__seen = 1;
14580  parser->eofp = Qtrue;
14581 #ifndef RIPPER
14582  return -1;
14583 #else
14584  lex_goto_eol(parser);
14585  ripper_dispatch_scan_event(parser, k__END__);
14586  return 0;
14587 #endif
14588  }
14589  newtok();
14590  break;
14591 
14592  default:
14593  if (!parser_is_identchar()) {
14594  compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c);
14595  goto retry;
14596  }
14597 
14598  newtok();
14599  break;
14600  }
14601 
14602  mb = ENC_CODERANGE_7BIT;
14603  do {
14604  if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
14605  if (tokadd_mbchar(c) == -1) return 0;
14606  c = nextc();
14607  } while (parser_is_identchar());
14608  switch (tok()[0]) {
14609  case '@': case '$':
14610  pushback(c);
14611  break;
14612  default:
14613  if ((c == '!' || c == '?') && !peek('=')) {
14614  tokadd(c);
14615  }
14616  else {
14617  pushback(c);
14618  }
14619  }
14620  tokfix();
14621 
14622  {
14623  int result = 0;
14624 
14625  last_state = lex_state;
14626  switch (tok()[0]) {
14627  case '$':
14628  lex_state = EXPR_END;
14629  result = tGVAR;
14630  break;
14631  case '@':
14632  lex_state = EXPR_END;
14633  if (tok()[1] == '@')
14634  result = tCVAR;
14635  else
14636  result = tIVAR;
14637  break;
14638 
14639  default:
14640  if (toklast() == '!' || toklast() == '?') {
14641  result = tFID;
14642  }
14643  else {
14644  if (IS_lex_state(EXPR_FNAME)) {
14645  if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
14646  (!peek('=') || (peek_n('>', 1)))) {
14647  result = tIDENTIFIER;
14648  tokadd(c);
14649  tokfix();
14650  }
14651  else {
14652  pushback(c);
14653  }
14654  }
14655  if (result == 0 && ISUPPER(tok()[0])) {
14656  result = tCONSTANT;
14657  }
14658  else {
14659  result = tIDENTIFIER;
14660  }
14661  }
14662 
14663  if (IS_LABEL_POSSIBLE()) {
14664  if (IS_LABEL_SUFFIX(0)) {
14665  lex_state = EXPR_LABELARG;
14666  nextc();
14668  return tLABEL;
14669  }
14670  }
14671  if (mb == ENC_CODERANGE_7BIT && !IS_lex_state(EXPR_DOT)) {
14672  const struct kwtable *kw;
14673 
14674  /* See if it is a reserved word. */
14675  kw = rb_reserved_word(tok(), toklen());
14676  if (kw) {
14677  enum lex_state_e state = lex_state;
14678  lex_state = kw->state;
14679  if (IS_lex_state_for(state, EXPR_FNAME)) {
14681  return kw->id[0];
14682  }
14683  if (IS_lex_state(EXPR_BEG)) {
14684  command_start = TRUE;
14685  }
14686  if (kw->id[0] == keyword_do) {
14687  if (lpar_beg && lpar_beg == paren_nest) {
14688  lpar_beg = 0;
14689  --paren_nest;
14690  return keyword_do_LAMBDA;
14691  }
14692  if (COND_P()) return keyword_do_cond;
14693  if (CMDARG_P() && !IS_lex_state_for(state, EXPR_CMDARG))
14694  return keyword_do_block;
14695  if (IS_lex_state_for(state, (EXPR_BEG | EXPR_ENDARG)))
14696  return keyword_do_block;
14697  return keyword_do;
14698  }
14699  if (IS_lex_state_for(state, (EXPR_BEG | EXPR_VALUE)))
14700  return kw->id[0];
14701  else {
14702  if (kw->id[0] != kw->id[1])
14703  lex_state = EXPR_BEG;
14704  return kw->id[1];
14705  }
14706  }
14707  }
14708 
14709  if (IS_lex_state(EXPR_BEG_ANY | EXPR_ARG_ANY | EXPR_DOT)) {
14710  if (cmd_state) {
14711  lex_state = EXPR_CMDARG;
14712  }
14713  else {
14714  lex_state = EXPR_ARG;
14715  }
14716  }
14717  else if (lex_state == EXPR_FNAME) {
14718  lex_state = EXPR_ENDFN;
14719  }
14720  else {
14721  lex_state = EXPR_END;
14722  }
14723  }
14724  {
14725  ID ident = TOK_INTERN(!ENC_SINGLE(mb));
14726 
14727  set_yylval_name(ident);
14728  if (!IS_lex_state_for(last_state, EXPR_DOT|EXPR_FNAME) &&
14729  is_local_id(ident) && lvar_defined(ident)) {
14730  lex_state = EXPR_END;
14731  }
14732  }
14733  return result;
14734  }
14735 }
14736 
14737 #if YYPURE
14738 static int
14739 yylex(void *lval, void *p)
14740 #else
14741 yylex(void *p)
14742 #endif
14743 {
14744  struct parser_params *parser = (struct parser_params*)p;
14745  int t;
14746 
14747 #if YYPURE
14748  parser->parser_yylval = lval;
14749  parser->parser_yylval->val = Qundef;
14750 #endif
14751  t = parser_yylex(parser);
14752 #ifdef RIPPER
14753  if (!NIL_P(parser->delayed)) {
14754  ripper_dispatch_delayed_token(parser, t);
14755  return t;
14756  }
14757  if (t != 0)
14758  ripper_dispatch_scan_event(parser, t);
14759 #endif
14760 
14761  return t;
14762 }
14763 
14764 #ifndef RIPPER
14765 static NODE*
14766 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
14767 {
14768  NODE *n = (rb_node_newnode)(type, a0, a1, a2);
14770  return n;
14771 }
14772 
14773 static enum node_type
14774 nodetype(NODE *node) /* for debug */
14775 {
14776  return (enum node_type)nd_type(node);
14777 }
14778 
14779 static int
14781 {
14782  return nd_line(node);
14783 }
14784 
14785 static NODE*
14787 {
14788  if (node) {
14789  node = remove_begin(node);
14790  node->flags |= NODE_FL_NEWLINE;
14791  }
14792  return node;
14793 }
14794 
14795 static void
14796 fixpos(NODE *node, NODE *orig)
14797 {
14798  if (!node) return;
14799  if (!orig) return;
14800  if (orig == (NODE*)1) return;
14801  nd_set_line(node, nd_line(orig));
14802 }
14803 
14804 static void
14805 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
14806 {
14807  rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
14808 }
14809 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg))
14810 
14811 static void
14812 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
14813 {
14814  rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
14815 }
14816 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg))
14817 
14818 static NODE*
14819 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
14820 {
14821  NODE *end, *h = head, *nd;
14822 
14823  if (tail == 0) return head;
14824 
14825  if (h == 0) return tail;
14826  switch (nd_type(h)) {
14827  case NODE_LIT:
14828  case NODE_STR:
14829  case NODE_SELF:
14830  case NODE_TRUE:
14831  case NODE_FALSE:
14832  case NODE_NIL:
14833  parser_warning(h, "unused literal ignored");
14834  return tail;
14835  default:
14836  h = end = NEW_BLOCK(head);
14837  end->nd_end = end;
14838  fixpos(end, head);
14839  head = end;
14840  break;
14841  case NODE_BLOCK:
14842  end = h->nd_end;
14843  break;
14844  }
14845 
14846  nd = end->nd_head;
14847  switch (nd_type(nd)) {
14848  case NODE_RETURN:
14849  case NODE_BREAK:
14850  case NODE_NEXT:
14851  case NODE_REDO:
14852  case NODE_RETRY:
14853  if (RTEST(ruby_verbose)) {
14854  parser_warning(tail, "statement not reached");
14855  }
14856  break;
14857 
14858  default:
14859  break;
14860  }
14861 
14862  if (nd_type(tail) != NODE_BLOCK) {
14863  tail = NEW_BLOCK(tail);
14864  tail->nd_end = tail;
14865  }
14866  end->nd_next = tail;
14867  h->nd_end = tail->nd_end;
14868  return head;
14869 }
14870 
14871 /* append item to the list */
14872 static NODE*
14873 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
14874 {
14875  NODE *last;
14876 
14877  if (list == 0) return NEW_LIST(item);
14878  if (list->nd_next) {
14879  last = list->nd_next->nd_end;
14880  }
14881  else {
14882  last = list;
14883  }
14884 
14885  list->nd_alen += 1;
14886  last->nd_next = NEW_LIST(item);
14887  list->nd_next->nd_end = last->nd_next;
14888  return list;
14889 }
14890 
14891 /* concat two lists */
14892 static NODE*
14893 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14894 {
14895  NODE *last;
14896 
14897  if (head->nd_next) {
14898  last = head->nd_next->nd_end;
14899  }
14900  else {
14901  last = head;
14902  }
14903 
14904  head->nd_alen += tail->nd_alen;
14905  last->nd_next = tail;
14906  if (tail->nd_next) {
14907  head->nd_next->nd_end = tail->nd_next->nd_end;
14908  }
14909  else {
14910  head->nd_next->nd_end = tail;
14911  }
14912 
14913  return head;
14914 }
14915 
14916 static int
14918 {
14919  if (NIL_P(tail)) return 1;
14920  if (!rb_enc_compatible(head, tail)) {
14921  compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
14922  rb_enc_name(rb_enc_get(head)),
14923  rb_enc_name(rb_enc_get(tail)));
14924  rb_str_resize(head, 0);
14925  rb_str_resize(tail, 0);
14926  return 0;
14927  }
14928  rb_str_buf_append(head, tail);
14929  return 1;
14930 }
14931 
14932 /* concat two string literals */
14933 static NODE *
14935 {
14936  enum node_type htype;
14937  NODE *headlast;
14938  VALUE lit;
14939 
14940  if (!head) return tail;
14941  if (!tail) return head;
14942 
14943  htype = nd_type(head);
14944  if (htype == NODE_EVSTR) {
14945  NODE *node = NEW_DSTR(Qnil);
14946  head = list_append(node, head);
14947  htype = NODE_DSTR;
14948  }
14949  switch (nd_type(tail)) {
14950  case NODE_STR:
14951  if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
14952  nd_type(headlast) == NODE_STR) {
14953  htype = NODE_STR;
14954  lit = headlast->nd_lit;
14955  }
14956  else {
14957  lit = head->nd_lit;
14958  }
14959  if (htype == NODE_STR) {
14960  if (!literal_concat0(parser, lit, tail->nd_lit)) {
14961  error:
14962  rb_gc_force_recycle((VALUE)head);
14963  rb_gc_force_recycle((VALUE)tail);
14964  return 0;
14965  }
14966  rb_gc_force_recycle((VALUE)tail);
14967  }
14968  else {
14969  list_append(head, tail);
14970  }
14971  break;
14972 
14973  case NODE_DSTR:
14974  if (htype == NODE_STR) {
14975  if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
14976  goto error;
14977  tail->nd_lit = head->nd_lit;
14978  rb_gc_force_recycle((VALUE)head);
14979  head = tail;
14980  }
14981  else if (NIL_P(tail->nd_lit)) {
14982  append:
14983  head->nd_alen += tail->nd_alen - 1;
14984  head->nd_next->nd_end->nd_next = tail->nd_next;
14985  head->nd_next->nd_end = tail->nd_next->nd_end;
14986  rb_gc_force_recycle((VALUE)tail);
14987  }
14988  else if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
14989  nd_type(headlast) == NODE_STR) {
14990  lit = headlast->nd_lit;
14991  if (!literal_concat0(parser, lit, tail->nd_lit))
14992  goto error;
14993  tail->nd_lit = Qnil;
14994  goto append;
14995  }
14996  else {
14997  nd_set_type(tail, NODE_ARRAY);
14998  tail->nd_head = NEW_STR(tail->nd_lit);
14999  list_concat(head, tail);
15000  }
15001  break;
15002 
15003  case NODE_EVSTR:
15004  if (htype == NODE_STR) {
15005  nd_set_type(head, NODE_DSTR);
15006  head->nd_alen = 1;
15007  }
15008  list_append(head, tail);
15009  break;
15010  }
15011  return head;
15012 }
15013 
15014 static NODE *
15015 evstr2dstr_gen(struct parser_params *parser, NODE *node)
15016 {
15017  if (nd_type(node) == NODE_EVSTR) {
15018  node = list_append(NEW_DSTR(Qnil), node);
15019  }
15020  return node;
15021 }
15022 
15023 static NODE *
15024 new_evstr_gen(struct parser_params *parser, NODE *node)
15025 {
15026  NODE *head = node;
15027 
15028  if (node) {
15029  switch (nd_type(node)) {
15030  case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
15031  return node;
15032  }
15033  }
15034  return NEW_EVSTR(head);
15035 }
15036 
15037 static NODE *
15038 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
15039 {
15040  value_expr(recv);
15041  value_expr(arg1);
15042  return NEW_CALL(recv, id, NEW_LIST(arg1));
15043 }
15044 
15045 static NODE *
15046 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
15047 {
15048  value_expr(recv);
15049  return NEW_CALL(recv, id, 0);
15050 }
15051 
15052 static NODE*
15053 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15054 {
15055  value_expr(node1);
15056  value_expr(node2);
15057  if (node1) {
15058  switch (nd_type(node1)) {
15059  case NODE_DREGX:
15060  case NODE_DREGX_ONCE:
15061  return NEW_MATCH2(node1, node2);
15062 
15063  case NODE_LIT:
15064  if (RB_TYPE_P(node1->nd_lit, T_REGEXP)) {
15065  return NEW_MATCH2(node1, node2);
15066  }
15067  }
15068  }
15069 
15070  if (node2) {
15071  switch (nd_type(node2)) {
15072  case NODE_DREGX:
15073  case NODE_DREGX_ONCE:
15074  return NEW_MATCH3(node2, node1);
15075 
15076  case NODE_LIT:
15077  if (RB_TYPE_P(node2->nd_lit, T_REGEXP)) {
15078  return NEW_MATCH3(node2, node1);
15079  }
15080  }
15081  }
15082 
15083  return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
15084 }
15085 
15086 static NODE*
15087 gettable_gen(struct parser_params *parser, ID id)
15088 {
15089  switch (id) {
15090  case keyword_self:
15091  return NEW_SELF();
15092  case keyword_nil:
15093  return NEW_NIL();
15094  case keyword_true:
15095  return NEW_TRUE();
15096  case keyword_false:
15097  return NEW_FALSE();
15098  case keyword__FILE__:
15100  case keyword__LINE__:
15101  return NEW_LIT(INT2FIX(tokline));
15102  case keyword__ENCODING__:
15104  }
15105  switch (id_type(id)) {
15106  case ID_LOCAL:
15107  if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
15108  if (local_id(id)) return NEW_LVAR(id);
15109  /* method call without arguments */
15110  return NEW_VCALL(id);
15111  case ID_GLOBAL:
15112  return NEW_GVAR(id);
15113  case ID_INSTANCE:
15114  return NEW_IVAR(id);
15115  case ID_CONST:
15116  return NEW_CONST(id);
15117  case ID_CLASS:
15118  return NEW_CVAR(id);
15119  }
15120  compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
15121  return 0;
15122 }
15123 #else /* !RIPPER */
15124 static int
15125 id_is_var_gen(struct parser_params *parser, ID id)
15126 {
15127  if (is_notop_id(id)) {
15128  switch (id & ID_SCOPE_MASK) {
15129  case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
15130  return 1;
15131  case ID_LOCAL:
15132  if (dyna_in_block() && dvar_defined(id)) return 1;
15133  if (local_id(id)) return 1;
15134  /* method call without arguments */
15135  return 0;
15136  }
15137  }
15138  compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
15139  return 0;
15140 }
15141 #endif /* !RIPPER */
15142 
15143 #if PARSER_DEBUG
15144 static const char *
15145 lex_state_name(enum lex_state_e state)
15146 {
15147  static const char names[][12] = {
15148  "EXPR_BEG", "EXPR_END", "EXPR_ENDARG", "EXPR_ENDFN", "EXPR_ARG",
15149  "EXPR_CMDARG", "EXPR_MID", "EXPR_FNAME", "EXPR_DOT", "EXPR_CLASS",
15150  "EXPR_VALUE",
15151  };
15152 
15153  if ((unsigned)state & ~(~0u << EXPR_MAX_STATE))
15154  return names[ffs(state)];
15155  return NULL;
15156 }
15157 #endif
15158 
15159 #ifdef RIPPER
15160 static VALUE
15161 assignable_gen(struct parser_params *parser, VALUE lhs)
15162 #else
15163 static NODE*
15164 assignable_gen(struct parser_params *parser, ID id, NODE *val)
15165 #endif
15166 {
15167 #ifdef RIPPER
15168  ID id = get_id(lhs);
15169 # define assignable_result(x) get_value(lhs)
15170 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
15171 #else
15172 # define assignable_result(x) (x)
15173 #endif
15174  if (!id) return assignable_result(0);
15175  switch (id) {
15176  case keyword_self:
15177  yyerror("Can't change the value of self");
15178  goto error;
15179  case keyword_nil:
15180  yyerror("Can't assign to nil");
15181  goto error;
15182  case keyword_true:
15183  yyerror("Can't assign to true");
15184  goto error;
15185  case keyword_false:
15186  yyerror("Can't assign to false");
15187  goto error;
15188  case keyword__FILE__:
15189  yyerror("Can't assign to __FILE__");
15190  goto error;
15191  case keyword__LINE__:
15192  yyerror("Can't assign to __LINE__");
15193  goto error;
15194  case keyword__ENCODING__:
15195  yyerror("Can't assign to __ENCODING__");
15196  goto error;
15197  }
15198  switch (id_type(id)) {
15199  case ID_LOCAL:
15200  if (dyna_in_block()) {
15201  if (dvar_curr(id)) {
15202  return assignable_result(NEW_DASGN_CURR(id, val));
15203  }
15204  else if (dvar_defined(id)) {
15205  return assignable_result(NEW_DASGN(id, val));
15206  }
15207  else if (local_id(id)) {
15208  return assignable_result(NEW_LASGN(id, val));
15209  }
15210  else {
15211  dyna_var(id);
15212  return assignable_result(NEW_DASGN_CURR(id, val));
15213  }
15214  }
15215  else {
15216  if (!local_id(id)) {
15217  local_var(id);
15218  }
15219  return assignable_result(NEW_LASGN(id, val));
15220  }
15221  break;
15222  case ID_GLOBAL:
15223  return assignable_result(NEW_GASGN(id, val));
15224  case ID_INSTANCE:
15225  return assignable_result(NEW_IASGN(id, val));
15226  case ID_CONST:
15227  if (!in_def && !in_single)
15228  return assignable_result(NEW_CDECL(id, val, 0));
15229  yyerror("dynamic constant assignment");
15230  break;
15231  case ID_CLASS:
15232  return assignable_result(NEW_CVASGN(id, val));
15233  default:
15234  compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
15235  }
15236  error:
15237  return assignable_result(0);
15238 #undef assignable_result
15239 #undef parser_yyerror
15240 }
15241 
15242 static int
15244 {
15245  VALUE s;
15246  if (name == idUScore) return 1;
15247  if (!is_local_id(name)) return 0;
15248  s = rb_id2str(name);
15249  if (!s) return 0;
15250  return RSTRING_PTR(s)[0] == '_';
15251 }
15252 
15253 #define LVAR_USED ((ID)1 << (sizeof(ID) * CHAR_BIT - 1))
15254 
15255 static int
15256 shadowing_lvar_0(struct parser_params *parser, ID name)
15257 {
15258  if (is_private_local_id(name)) return 1;
15259  if (dyna_in_block()) {
15260  if (dvar_curr(name)) {
15261  yyerror("duplicated argument name");
15262  }
15263  else if (dvar_defined_get(name) || local_id(name)) {
15264  rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
15265  vtable_add(lvtbl->vars, name);
15266  if (lvtbl->used) {
15268  }
15269  return 0;
15270  }
15271  }
15272  else {
15273  if (local_id(name)) {
15274  yyerror("duplicated argument name");
15275  }
15276  }
15277  return 1;
15278 }
15279 
15280 static ID
15281 shadowing_lvar_gen(struct parser_params *parser, ID name)
15282 {
15283  shadowing_lvar_0(parser, name);
15284  return name;
15285 }
15286 
15287 static void
15288 new_bv_gen(struct parser_params *parser, ID name)
15289 {
15290  if (!name) return;
15291  if (!is_local_id(name)) {
15292  compile_error(PARSER_ARG "invalid local variable - %s",
15293  rb_id2name(name));
15294  return;
15295  }
15296  if (!shadowing_lvar_0(parser, name)) return;
15297  dyna_var(name);
15298 }
15299 
15300 #ifndef RIPPER
15301 static NODE *
15302 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
15303 {
15304  if (recv && nd_type(recv) == NODE_SELF)
15305  recv = (NODE *)1;
15306  return NEW_ATTRASGN(recv, tASET, idx);
15307 }
15308 
15309 static void
15310 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15311 {
15312  if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
15313  compile_error(PARSER_ARG "both block arg and actual block given");
15314  }
15315 }
15316 
15317 static const char id_type_names[][9] = {
15318  "LOCAL",
15319  "INSTANCE",
15320  "", /* INSTANCE2 */
15321  "GLOBAL",
15322  "ATTRSET",
15323  "CONST",
15324  "CLASS",
15325  "JUNK",
15326 };
15327 
15328 ID
15330 {
15331  if (!is_notop_id(id)) {
15332  switch (id) {
15333  case tAREF: case tASET:
15334  return tASET; /* only exception */
15335  }
15336  rb_name_error(id, "cannot make operator ID :%s attrset", rb_id2name(id));
15337  }
15338  else {
15339  int scope = (int)(id & ID_SCOPE_MASK);
15340  switch (scope) {
15341  case ID_LOCAL: case ID_INSTANCE: case ID_GLOBAL:
15342  case ID_CONST: case ID_CLASS: case ID_JUNK:
15343  break;
15344  case ID_ATTRSET:
15345  return id;
15346  default:
15347  rb_name_error(id, "cannot make %s ID %+"PRIsVALUE" attrset",
15348  id_type_names[scope], ID2SYM(id));
15349 
15350  }
15351  }
15352  id &= ~ID_SCOPE_MASK;
15353  id |= ID_ATTRSET;
15354  return id;
15355 }
15356 
15357 static NODE *
15358 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
15359 {
15360  if (recv && nd_type(recv) == NODE_SELF)
15361  recv = (NODE *)1;
15362  return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
15363 }
15364 
15365 static void
15367 {
15368  switch (nd_type(node)) {
15369  case NODE_NTH_REF:
15370  compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
15371  break;
15372  case NODE_BACK_REF:
15373  compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
15374  break;
15375  }
15376 }
15377 
15378 static NODE *
15379 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15380 {
15381  if (!node2) return node1;
15382  switch (nd_type(node1)) {
15383  case NODE_BLOCK_PASS:
15384  if (node1->nd_head)
15385  node1->nd_head = arg_concat(node1->nd_head, node2);
15386  else
15387  node1->nd_head = NEW_LIST(node2);
15388  return node1;
15389  case NODE_ARGSPUSH:
15390  if (nd_type(node2) != NODE_ARRAY) break;
15391  node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
15392  nd_set_type(node1, NODE_ARGSCAT);
15393  return node1;
15394  case NODE_ARGSCAT:
15395  if (nd_type(node2) != NODE_ARRAY ||
15396  nd_type(node1->nd_body) != NODE_ARRAY) break;
15397  node1->nd_body = list_concat(node1->nd_body, node2);
15398  return node1;
15399  }
15400  return NEW_ARGSCAT(node1, node2);
15401 }
15402 
15403 static NODE *
15404 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15405 {
15406  if (!node1) return NEW_LIST(node2);
15407  switch (nd_type(node1)) {
15408  case NODE_ARRAY:
15409  return list_append(node1, node2);
15410  case NODE_BLOCK_PASS:
15411  node1->nd_head = arg_append(node1->nd_head, node2);
15412  return node1;
15413  case NODE_ARGSPUSH:
15414  node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
15415  nd_set_type(node1, NODE_ARGSCAT);
15416  return node1;
15417  }
15418  return NEW_ARGSPUSH(node1, node2);
15419 }
15420 
15421 static NODE *
15423 {
15424  if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
15425  if (nd_type(node) == NODE_ARRAY) return node;
15426  return 0;
15427 }
15428 
15429 static NODE *
15430 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
15431 {
15432  if (!lhs) return 0;
15433 
15434  switch (nd_type(lhs)) {
15435  case NODE_GASGN:
15436  case NODE_IASGN:
15437  case NODE_IASGN2:
15438  case NODE_LASGN:
15439  case NODE_DASGN:
15440  case NODE_DASGN_CURR:
15441  case NODE_MASGN:
15442  case NODE_CDECL:
15443  case NODE_CVASGN:
15444  lhs->nd_value = rhs;
15445  break;
15446 
15447  case NODE_ATTRASGN:
15448  case NODE_CALL:
15449  lhs->nd_args = arg_append(lhs->nd_args, rhs);
15450  break;
15451 
15452  default:
15453  /* should not happen */
15454  break;
15455  }
15456 
15457  return lhs;
15458 }
15459 
15460 static int
15461 value_expr_gen(struct parser_params *parser, NODE *node)
15462 {
15463  int cond = 0;
15464 
15465  if (!node) {
15466  rb_warning0("empty expression");
15467  }
15468  while (node) {
15469  switch (nd_type(node)) {
15470  case NODE_RETURN:
15471  case NODE_BREAK:
15472  case NODE_NEXT:
15473  case NODE_REDO:
15474  case NODE_RETRY:
15475  if (!cond) yyerror("void value expression");
15476  /* or "control never reach"? */
15477  return FALSE;
15478 
15479  case NODE_BLOCK:
15480  while (node->nd_next) {
15481  node = node->nd_next;
15482  }
15483  node = node->nd_head;
15484  break;
15485 
15486  case NODE_BEGIN:
15487  node = node->nd_body;
15488  break;
15489 
15490  case NODE_IF:
15491  if (!node->nd_body) {
15492  node = node->nd_else;
15493  break;
15494  }
15495  else if (!node->nd_else) {
15496  node = node->nd_body;
15497  break;
15498  }
15499  if (!value_expr(node->nd_body)) return FALSE;
15500  node = node->nd_else;
15501  break;
15502 
15503  case NODE_AND:
15504  case NODE_OR:
15505  cond = 1;
15506  node = node->nd_2nd;
15507  break;
15508 
15509  default:
15510  return TRUE;
15511  }
15512  }
15513 
15514  return TRUE;
15515 }
15516 
15517 static void
15518 void_expr_gen(struct parser_params *parser, NODE *node)
15519 {
15520  const char *useless = 0;
15521 
15522  if (!RTEST(ruby_verbose)) return;
15523 
15524  if (!node) return;
15525  switch (nd_type(node)) {
15526  case NODE_CALL:
15527  switch (node->nd_mid) {
15528  case '+':
15529  case '-':
15530  case '*':
15531  case '/':
15532  case '%':
15533  case tPOW:
15534  case tUPLUS:
15535  case tUMINUS:
15536  case '|':
15537  case '^':
15538  case '&':
15539  case tCMP:
15540  case '>':
15541  case tGEQ:
15542  case '<':
15543  case tLEQ:
15544  case tEQ:
15545  case tNEQ:
15546  useless = rb_id2name(node->nd_mid);
15547  break;
15548  }
15549  break;
15550 
15551  case NODE_LVAR:
15552  case NODE_DVAR:
15553  case NODE_GVAR:
15554  case NODE_IVAR:
15555  case NODE_CVAR:
15556  case NODE_NTH_REF:
15557  case NODE_BACK_REF:
15558  useless = "a variable";
15559  break;
15560  case NODE_CONST:
15561  useless = "a constant";
15562  break;
15563  case NODE_LIT:
15564  case NODE_STR:
15565  case NODE_DSTR:
15566  case NODE_DREGX:
15567  case NODE_DREGX_ONCE:
15568  useless = "a literal";
15569  break;
15570  case NODE_COLON2:
15571  case NODE_COLON3:
15572  useless = "::";
15573  break;
15574  case NODE_DOT2:
15575  useless = "..";
15576  break;
15577  case NODE_DOT3:
15578  useless = "...";
15579  break;
15580  case NODE_SELF:
15581  useless = "self";
15582  break;
15583  case NODE_NIL:
15584  useless = "nil";
15585  break;
15586  case NODE_TRUE:
15587  useless = "true";
15588  break;
15589  case NODE_FALSE:
15590  useless = "false";
15591  break;
15592  case NODE_DEFINED:
15593  useless = "defined?";
15594  break;
15595  }
15596 
15597  if (useless) {
15598  int line = ruby_sourceline;
15599 
15600  ruby_sourceline = nd_line(node);
15601  rb_warnS("possibly useless use of %s in void context", useless);
15602  ruby_sourceline = line;
15603  }
15604 }
15605 
15606 static void
15607 void_stmts_gen(struct parser_params *parser, NODE *node)
15608 {
15609  if (!RTEST(ruby_verbose)) return;
15610  if (!node) return;
15611  if (nd_type(node) != NODE_BLOCK) return;
15612 
15613  for (;;) {
15614  if (!node->nd_next) return;
15615  void_expr0(node->nd_head);
15616  node = node->nd_next;
15617  }
15618 }
15619 
15620 static NODE *
15622 {
15623  NODE **n = &node, *n1 = node;
15624  while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
15625  *n = n1 = n1->nd_body;
15626  }
15627  return node;
15628 }
15629 
15630 static NODE *
15632 {
15633  NODE **n = &node, *n1 = node;
15634  while (n1 && nd_type(n1) == NODE_BEGIN) {
15635  *n = n1 = n1->nd_body;
15636  }
15637  return node;
15638 }
15639 
15640 static void
15641 reduce_nodes_gen(struct parser_params *parser, NODE **body)
15642 {
15643  NODE *node = *body;
15644 
15645  if (!node) {
15646  *body = NEW_NIL();
15647  return;
15648  }
15649 #define subnodes(n1, n2) \
15650  ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
15651  (!node->n2) ? (body = &node->n1, 1) : \
15652  (reduce_nodes(&node->n1), body = &node->n2, 1))
15653 
15654  while (node) {
15655  int newline = (int)(node->flags & NODE_FL_NEWLINE);
15656  switch (nd_type(node)) {
15657  end:
15658  case NODE_NIL:
15659  *body = 0;
15660  return;
15661  case NODE_RETURN:
15662  *body = node = node->nd_stts;
15663  if (newline && node) node->flags |= NODE_FL_NEWLINE;
15664  continue;
15665  case NODE_BEGIN:
15666  *body = node = node->nd_body;
15667  if (newline && node) node->flags |= NODE_FL_NEWLINE;
15668  continue;
15669  case NODE_BLOCK:
15670  body = &node->nd_end->nd_head;
15671  break;
15672  case NODE_IF:
15673  if (subnodes(nd_body, nd_else)) break;
15674  return;
15675  case NODE_CASE:
15676  body = &node->nd_body;
15677  break;
15678  case NODE_WHEN:
15679  if (!subnodes(nd_body, nd_next)) goto end;
15680  break;
15681  case NODE_ENSURE:
15682  if (!subnodes(nd_head, nd_resq)) goto end;
15683  break;
15684  case NODE_RESCUE:
15685  if (node->nd_else) {
15686  body = &node->nd_resq;
15687  break;
15688  }
15689  if (!subnodes(nd_head, nd_resq)) goto end;
15690  break;
15691  default:
15692  return;
15693  }
15694  node = *body;
15695  if (newline && node) node->flags |= NODE_FL_NEWLINE;
15696  }
15697 
15698 #undef subnodes
15699 }
15700 
15701 static int
15703 {
15704  if (!node) return 1;
15705  switch (nd_type(node)) {
15706  case NODE_HASH:
15707  if (!(node = node->nd_head)) break;
15708  case NODE_ARRAY:
15709  do {
15710  if (!is_static_content(node->nd_head)) return 0;
15711  } while ((node = node->nd_next) != 0);
15712  case NODE_LIT:
15713  case NODE_STR:
15714  case NODE_NIL:
15715  case NODE_TRUE:
15716  case NODE_FALSE:
15717  case NODE_ZARRAY:
15718  break;
15719  default:
15720  return 0;
15721  }
15722  return 1;
15723 }
15724 
15725 static int
15726 assign_in_cond(struct parser_params *parser, NODE *node)
15727 {
15728  switch (nd_type(node)) {
15729  case NODE_MASGN:
15730  yyerror("multiple assignment in conditional");
15731  return 1;
15732 
15733  case NODE_LASGN:
15734  case NODE_DASGN:
15735  case NODE_DASGN_CURR:
15736  case NODE_GASGN:
15737  case NODE_IASGN:
15738  break;
15739 
15740  default:
15741  return 0;
15742  }
15743 
15744  if (!node->nd_value) return 1;
15745  if (is_static_content(node->nd_value)) {
15746  /* reports always */
15747  parser_warn(node->nd_value, "found = in conditional, should be ==");
15748  }
15749  return 1;
15750 }
15751 
15752 static void
15753 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15754 {
15755  if (!e_option_supplied(parser)) parser_warn(node, str);
15756 }
15757 
15758 static void
15759 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15760 {
15761  if (!e_option_supplied(parser)) parser_warning(node, str);
15762 }
15763 
15764 static void
15765 fixup_nodes(NODE **rootnode)
15766 {
15767  NODE *node, *next, *head;
15768 
15769  for (node = *rootnode; node; node = next) {
15770  enum node_type type;
15771  VALUE val;
15772 
15773  next = node->nd_next;
15774  head = node->nd_head;
15775  rb_gc_force_recycle((VALUE)node);
15776  *rootnode = next;
15777  switch (type = nd_type(head)) {
15778  case NODE_DOT2:
15779  case NODE_DOT3:
15780  val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
15781  type == NODE_DOT3);
15782  rb_gc_force_recycle((VALUE)head->nd_beg);
15783  rb_gc_force_recycle((VALUE)head->nd_end);
15784  nd_set_type(head, NODE_LIT);
15785  head->nd_lit = val;
15786  break;
15787  default:
15788  break;
15789  }
15790  }
15791 }
15792 
15793 static NODE *cond0(struct parser_params*,NODE*);
15794 
15795 static NODE*
15796 range_op(struct parser_params *parser, NODE *node)
15797 {
15798  enum node_type type;
15799 
15800  if (node == 0) return 0;
15801 
15802  type = nd_type(node);
15803  value_expr(node);
15804  if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
15805  warn_unless_e_option(parser, node, "integer literal in conditional range");
15806  return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
15807  }
15808  return cond0(parser, node);
15809 }
15810 
15811 static int
15813 {
15814  if (!node) return 1; /* same as NODE_NIL */
15815  switch (nd_type(node)) {
15816  case NODE_LIT:
15817  case NODE_STR:
15818  case NODE_DSTR:
15819  case NODE_EVSTR:
15820  case NODE_DREGX:
15821  case NODE_DREGX_ONCE:
15822  case NODE_DSYM:
15823  return 2;
15824  case NODE_TRUE:
15825  case NODE_FALSE:
15826  case NODE_NIL:
15827  return 1;
15828  }
15829  return 0;
15830 }
15831 
15832 static NODE*
15833 cond0(struct parser_params *parser, NODE *node)
15834 {
15835  if (node == 0) return 0;
15836  assign_in_cond(parser, node);
15837 
15838  switch (nd_type(node)) {
15839  case NODE_DSTR:
15840  case NODE_EVSTR:
15841  case NODE_STR:
15842  rb_warn0("string literal in condition");
15843  break;
15844 
15845  case NODE_DREGX:
15846  case NODE_DREGX_ONCE:
15847  warning_unless_e_option(parser, node, "regex literal in condition");
15848  return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
15849 
15850  case NODE_AND:
15851  case NODE_OR:
15852  node->nd_1st = cond0(parser, node->nd_1st);
15853  node->nd_2nd = cond0(parser, node->nd_2nd);
15854  break;
15855 
15856  case NODE_DOT2:
15857  case NODE_DOT3:
15858  node->nd_beg = range_op(parser, node->nd_beg);
15859  node->nd_end = range_op(parser, node->nd_end);
15860  if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
15861  else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
15862  if (!e_option_supplied(parser)) {
15863  int b = literal_node(node->nd_beg);
15864  int e = literal_node(node->nd_end);
15865  if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
15866  parser_warn(node, "range literal in condition");
15867  }
15868  }
15869  break;
15870 
15871  case NODE_DSYM:
15872  parser_warning(node, "literal in condition");
15873  break;
15874 
15875  case NODE_LIT:
15876  if (RB_TYPE_P(node->nd_lit, T_REGEXP)) {
15877  warn_unless_e_option(parser, node, "regex literal in condition");
15878  nd_set_type(node, NODE_MATCH);
15879  }
15880  else {
15881  parser_warning(node, "literal in condition");
15882  }
15883  default:
15884  break;
15885  }
15886  return node;
15887 }
15888 
15889 static NODE*
15890 cond_gen(struct parser_params *parser, NODE *node)
15891 {
15892  if (node == 0) return 0;
15893  return cond0(parser, node);
15894 }
15895 
15896 static NODE*
15897 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
15898 {
15899  value_expr(left);
15900  if (left && (enum node_type)nd_type(left) == type) {
15901  NODE *node = left, *second;
15902  while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
15903  node = second;
15904  }
15905  node->nd_2nd = NEW_NODE(type, second, right, 0);
15906  return left;
15907  }
15908  return NEW_NODE(type, left, right, 0);
15909 }
15910 
15911 static void
15912 no_blockarg(struct parser_params *parser, NODE *node)
15913 {
15914  if (node && nd_type(node) == NODE_BLOCK_PASS) {
15915  compile_error(PARSER_ARG "block argument should not be given");
15916  }
15917 }
15918 
15919 static NODE *
15920 ret_args_gen(struct parser_params *parser, NODE *node)
15921 {
15922  if (node) {
15923  no_blockarg(parser, node);
15924  if (nd_type(node) == NODE_ARRAY) {
15925  if (node->nd_next == 0) {
15926  node = node->nd_head;
15927  }
15928  else {
15929  nd_set_type(node, NODE_VALUES);
15930  }
15931  }
15932  }
15933  return node;
15934 }
15935 
15936 static NODE *
15937 new_yield_gen(struct parser_params *parser, NODE *node)
15938 {
15939  if (node) no_blockarg(parser, node);
15940 
15941  return NEW_YIELD(node);
15942 }
15943 
15944 static NODE*
15946 {
15947  switch (TYPE(node->nd_lit)) {
15948  case T_FIXNUM:
15949  node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
15950  break;
15951  case T_BIGNUM:
15952  case T_RATIONAL:
15953  case T_COMPLEX:
15954  node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
15955  break;
15956  case T_FLOAT:
15957 #if USE_FLONUM
15958  if (FLONUM_P(node->nd_lit)) {
15959  node->nd_lit = DBL2NUM(-RFLOAT_VALUE(node->nd_lit));
15960  }
15961  else {
15962  RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15963  }
15964 #else
15965  RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15966 #endif
15967  break;
15968  default:
15969  rb_bug("unknown literal type passed to negate_lit");
15970  break;
15971  }
15972  return node;
15973 }
15974 
15975 static NODE *
15976 arg_blk_pass(NODE *node1, NODE *node2)
15977 {
15978  if (node2) {
15979  node2->nd_head = node1;
15980  return node2;
15981  }
15982  return node1;
15983 }
15984 
15985 
15986 static NODE*
15987 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, NODE *tail)
15988 {
15989  int saved_line = ruby_sourceline;
15990  struct rb_args_info *args = tail->nd_ainfo;
15991 
15992  args->pre_args_num = m ? rb_long2int(m->nd_plen) : 0;
15993  args->pre_init = m ? m->nd_next : 0;
15994 
15995  args->post_args_num = p ? rb_long2int(p->nd_plen) : 0;
15996  args->post_init = p ? p->nd_next : 0;
15997  args->first_post_arg = p ? p->nd_pid : 0;
15998 
15999  args->rest_arg = r;
16000 
16001  args->opt_args = o;
16002 
16003  ruby_sourceline = saved_line;
16004 
16005  return tail;
16006 }
16007 
16008 static NODE*
16009 new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b)
16010 {
16011  int saved_line = ruby_sourceline;
16012  struct rb_args_info *args;
16013  NODE *kw_rest_arg = 0;
16014  NODE *node;
16015  int check = 0;
16016 
16017  args = ALLOC(struct rb_args_info);
16018  MEMZERO(args, struct rb_args_info, 1);
16019  node = NEW_NODE(NODE_ARGS, 0, 0, args);
16020 
16021  args->block_arg = b;
16022  args->kw_args = k;
16023  if (k && !kr) {
16024  check = 1;
16025  kr = internal_id();
16026  }
16027  if (kr) {
16028  arg_var(kr);
16029  kw_rest_arg = NEW_DVAR(kr);
16030  kw_rest_arg->nd_cflag = check;
16031  }
16032  args->kw_rest_arg = kw_rest_arg;
16033 
16034  ruby_sourceline = saved_line;
16035  return node;
16036 }
16037 
16038 static NODE*
16039 dsym_node_gen(struct parser_params *parser, NODE *node)
16040 {
16041  VALUE lit;
16042 
16043  if (!node) {
16044  return NEW_LIT(ID2SYM(idNULL));
16045  }
16046 
16047  switch (nd_type(node)) {
16048  case NODE_DSTR:
16049  nd_set_type(node, NODE_DSYM);
16050  break;
16051  case NODE_STR:
16052  lit = node->nd_lit;
16053  node->nd_lit = ID2SYM(rb_intern_str(lit));
16054  nd_set_type(node, NODE_LIT);
16055  break;
16056  default:
16057  node = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST(node));
16058  break;
16059  }
16060  return node;
16061 }
16062 #endif /* !RIPPER */
16063 
16064 #ifndef RIPPER
16065 static NODE *
16066 new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
16067 {
16068  NODE *asgn;
16069 
16070  if (lhs) {
16071  ID vid = lhs->nd_vid;
16072  if (op == tOROP) {
16073  lhs->nd_value = rhs;
16074  asgn = NEW_OP_ASGN_OR(gettable(vid), lhs);
16075  if (is_asgn_or_id(vid)) {
16076  asgn->nd_aid = vid;
16077  }
16078  }
16079  else if (op == tANDOP) {
16080  lhs->nd_value = rhs;
16081  asgn = NEW_OP_ASGN_AND(gettable(vid), lhs);
16082  }
16083  else {
16084  asgn = lhs;
16085  asgn->nd_value = NEW_CALL(gettable(vid), op, NEW_LIST(rhs));
16086  }
16087  }
16088  else {
16089  asgn = NEW_BEGIN(0);
16090  }
16091  return asgn;
16092 }
16093 
16094 static NODE *
16095 new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs)
16096 {
16097  NODE *asgn;
16098 
16099  if (op == tOROP) {
16100  op = 0;
16101  }
16102  else if (op == tANDOP) {
16103  op = 1;
16104  }
16105  asgn = NEW_OP_ASGN2(lhs, attr, op, rhs);
16106  fixpos(asgn, lhs);
16107  return asgn;
16108 }
16109 
16110 static NODE *
16111 new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
16112 {
16113  NODE *asgn;
16114 
16115  if (op == tOROP) {
16116  op = 0;
16117  }
16118  else if (op == tANDOP) {
16119  op = 1;
16120  }
16121  if (lhs) {
16122  asgn = NEW_OP_CDECL(lhs, op, rhs);
16123  }
16124  else {
16125  asgn = NEW_BEGIN(0);
16126  }
16127  fixpos(asgn, lhs);
16128  return asgn;
16129 }
16130 #else
16131 static VALUE
16132 new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs)
16133 {
16134  return dispatch3(opassign, lhs, op, rhs);
16135 }
16136 
16137 static VALUE
16138 new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs)
16139 {
16140  VALUE recv = dispatch3(field, lhs, type, attr);
16141  return dispatch3(opassign, recv, op, rhs);
16142 }
16143 #endif
16144 
16145 static void
16146 warn_unused_var(struct parser_params *parser, struct local_vars *local)
16147 {
16148  int i, cnt;
16149  ID *v, *u;
16150 
16151  if (!local->used) return;
16152  v = local->vars->tbl;
16153  u = local->used->tbl;
16154  cnt = local->used->pos;
16155  if (cnt != local->vars->pos) {
16156  rb_bug("local->used->pos != local->vars->pos");
16157  }
16158  for (i = 0; i < cnt; ++i) {
16159  if (!v[i] || (u[i] & LVAR_USED)) continue;
16160  if (is_private_local_id(v[i])) continue;
16161  rb_warn4S(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i]));
16162  }
16163 }
16164 
16165 static void
16166 local_push_gen(struct parser_params *parser, int inherit_dvars)
16167 {
16168  struct local_vars *local;
16169 
16170  local = ALLOC(struct local_vars);
16171  local->prev = lvtbl;
16172  local->args = vtable_alloc(0);
16173  local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
16174  local->used = !(inherit_dvars &&
16176  RTEST(ruby_verbose) ? vtable_alloc(0) : 0;
16177  local->cmdargs = cmdarg_stack;
16178  cmdarg_stack = 0;
16179  lvtbl = local;
16180 }
16181 
16182 static void
16184 {
16185  struct local_vars *local = lvtbl->prev;
16186  if (lvtbl->used) {
16187  warn_unused_var(parser, lvtbl);
16188  vtable_free(lvtbl->used);
16189  }
16190  vtable_free(lvtbl->args);
16191  vtable_free(lvtbl->vars);
16192  cmdarg_stack = lvtbl->cmdargs;
16193  xfree(lvtbl);
16194  lvtbl = local;
16195 }
16196 
16197 #ifndef RIPPER
16198 static ID*
16200 {
16201  int cnt_args = vtable_size(lvtbl->args);
16202  int cnt_vars = vtable_size(lvtbl->vars);
16203  int cnt = cnt_args + cnt_vars;
16204  int i, j;
16205  ID *buf;
16206 
16207  if (cnt <= 0) return 0;
16208  buf = ALLOC_N(ID, cnt + 1);
16209  MEMCPY(buf+1, lvtbl->args->tbl, ID, cnt_args);
16210  /* remove IDs duplicated to warn shadowing */
16211  for (i = 0, j = cnt_args+1; i < cnt_vars; ++i) {
16212  ID id = lvtbl->vars->tbl[i];
16213  if (!vtable_included(lvtbl->args, id)) {
16214  buf[j++] = id;
16215  }
16216  }
16217  if (--j < cnt) REALLOC_N(buf, ID, (cnt = j) + 1);
16218  buf[0] = cnt;
16219  return buf;
16220 }
16221 #endif
16222 
16223 static int
16224 arg_var_gen(struct parser_params *parser, ID id)
16225 {
16226  vtable_add(lvtbl->args, id);
16227  return vtable_size(lvtbl->args) - 1;
16228 }
16229 
16230 static int
16231 local_var_gen(struct parser_params *parser, ID id)
16232 {
16233  vtable_add(lvtbl->vars, id);
16234  if (lvtbl->used) {
16236  }
16237  return vtable_size(lvtbl->vars) - 1;
16238 }
16239 
16240 static int
16241 local_id_gen(struct parser_params *parser, ID id)
16242 {
16243  struct vtable *vars, *args, *used;
16244 
16245  vars = lvtbl->vars;
16246  args = lvtbl->args;
16247  used = lvtbl->used;
16248 
16249  while (vars && POINTER_P(vars->prev)) {
16250  vars = vars->prev;
16251  args = args->prev;
16252  if (used) used = used->prev;
16253  }
16254 
16255  if (vars && vars->prev == DVARS_INHERIT) {
16256  return rb_local_defined(id);
16257  }
16258  else if (vtable_included(args, id)) {
16259  return 1;
16260  }
16261  else {
16262  int i = vtable_included(vars, id);
16263  if (i && used) used->tbl[i-1] |= LVAR_USED;
16264  return i != 0;
16265  }
16266 }
16267 
16268 static const struct vtable *
16270 {
16271  lvtbl->args = vtable_alloc(lvtbl->args);
16272  lvtbl->vars = vtable_alloc(lvtbl->vars);
16273  if (lvtbl->used) {
16274  lvtbl->used = vtable_alloc(lvtbl->used);
16275  }
16276  return lvtbl->args;
16277 }
16278 
16279 static void
16280 dyna_pop_1(struct parser_params *parser)
16281 {
16282  struct vtable *tmp;
16283 
16284  if ((tmp = lvtbl->used) != 0) {
16285  warn_unused_var(parser, lvtbl);
16286  lvtbl->used = lvtbl->used->prev;
16287  vtable_free(tmp);
16288  }
16289  tmp = lvtbl->args;
16290  lvtbl->args = lvtbl->args->prev;
16291  vtable_free(tmp);
16292  tmp = lvtbl->vars;
16293  lvtbl->vars = lvtbl->vars->prev;
16294  vtable_free(tmp);
16295 }
16296 
16297 static void
16298 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
16299 {
16300  while (lvtbl->args != lvargs) {
16301  dyna_pop_1(parser);
16302  if (!lvtbl->args) {
16303  struct local_vars *local = lvtbl->prev;
16304  xfree(lvtbl);
16305  lvtbl = local;
16306  }
16307  }
16308  dyna_pop_1(parser);
16309 }
16310 
16311 static int
16313 {
16314  return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
16315 }
16316 
16317 static int
16318 dvar_defined_gen(struct parser_params *parser, ID id, int get)
16319 {
16320  struct vtable *vars, *args, *used;
16321  int i;
16322 
16323  args = lvtbl->args;
16324  vars = lvtbl->vars;
16325  used = lvtbl->used;
16326 
16327  while (POINTER_P(vars)) {
16328  if (vtable_included(args, id)) {
16329  return 1;
16330  }
16331  if ((i = vtable_included(vars, id)) != 0) {
16332  if (used) used->tbl[i-1] |= LVAR_USED;
16333  return 1;
16334  }
16335  args = args->prev;
16336  vars = vars->prev;
16337  if (get) used = 0;
16338  if (used) used = used->prev;
16339  }
16340 
16341  if (vars == DVARS_INHERIT) {
16342  return rb_dvar_defined(id);
16343  }
16344 
16345  return 0;
16346 }
16347 
16348 static int
16349 dvar_curr_gen(struct parser_params *parser, ID id)
16350 {
16351  return (vtable_included(lvtbl->args, id) ||
16352  vtable_included(lvtbl->vars, id));
16353 }
16354 
16355 #ifndef RIPPER
16356 static void
16358 {
16359  int c = RE_OPTION_ENCODING_IDX(options);
16360 
16361  if (c) {
16362  int opt, idx;
16363  rb_char_to_option_kcode(c, &opt, &idx);
16364  if (idx != ENCODING_GET(str) &&
16366  goto error;
16367  }
16368  ENCODING_SET(str, idx);
16369  }
16370  else if (RE_OPTION_ENCODING_NONE(options)) {
16371  if (!ENCODING_IS_ASCII8BIT(str) &&
16373  c = 'n';
16374  goto error;
16375  }
16377  }
16378  else if (current_enc == rb_usascii_encoding()) {
16380  /* raise in re.c */
16382  }
16383  else {
16385  }
16386  }
16387  return;
16388 
16389  error:
16391  "regexp encoding option '%c' differs from source encoding '%s'",
16392  c, rb_enc_name(rb_enc_get(str)));
16393 }
16394 
16395 static int
16397 {
16398  VALUE err;
16399  reg_fragment_setenc(str, options);
16400  err = rb_reg_check_preprocess(str);
16401  if (err != Qnil) {
16402  err = rb_obj_as_string(err);
16404  return 0;
16405  }
16406  return 1;
16407 }
16408 
16409 typedef struct {
16410  struct parser_params* parser;
16411  rb_encoding *enc;
16412  NODE *succ_block;
16413  NODE *fail_block;
16414  int num;
16416 
16417 static int
16419  int back_num, int *back_refs, OnigRegex regex, void *arg0)
16420 {
16422  struct parser_params* parser = arg->parser;
16423  rb_encoding *enc = arg->enc;
16424  long len = name_end - name;
16425  const char *s = (const char *)name;
16426  ID var;
16427 
16428  arg->num++;
16429 
16430  if (arg->succ_block == 0) {
16431  arg->succ_block = NEW_BEGIN(0);
16432  arg->fail_block = NEW_BEGIN(0);
16433  }
16434 
16435  if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
16436  (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
16437  !rb_enc_symname2_p(s, len, enc)) {
16438  return ST_CONTINUE;
16439  }
16440  var = rb_intern3(s, len, enc);
16441  if (dvar_defined(var) || local_id(var)) {
16442  rb_warningS("named capture conflicts a local variable - %s",
16443  rb_id2name(var));
16444  }
16445  arg->succ_block = block_append(arg->succ_block,
16447  NEW_CALL(
16448  gettable(rb_intern("$~")),
16449  idAREF,
16450  NEW_LIST(NEW_LIT(ID2SYM(var))))
16451  )));
16452  arg->fail_block = block_append(arg->fail_block,
16454  return ST_CONTINUE;
16455 }
16456 
16457 static NODE *
16459 {
16461 
16462  arg.parser = parser;
16463  arg.enc = rb_enc_get(regexp);
16464  arg.succ_block = 0;
16465  arg.fail_block = 0;
16466  arg.num = 0;
16467  onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
16468 
16469  if (arg.num == 0)
16470  return match;
16471 
16472  return
16473  block_append(
16474  newline_node(match),
16475  NEW_IF(gettable(rb_intern("$~")),
16476  block_append(
16477  newline_node(arg.succ_block),
16478  newline_node(
16479  NEW_CALL(
16480  gettable(rb_intern("$~")),
16481  rb_intern("begin"),
16482  NEW_LIST(NEW_LIT(INT2FIX(0)))))),
16483  block_append(
16484  newline_node(arg.fail_block),
16485  newline_node(
16486  NEW_LIT(Qnil)))));
16487 }
16488 
16489 static VALUE
16490 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
16491 {
16492  VALUE re;
16493  VALUE err;
16494 
16495  reg_fragment_setenc(str, options);
16496  err = rb_errinfo();
16498  if (NIL_P(re)) {
16499  ID mesg = rb_intern("mesg");
16500  VALUE m = rb_attr_get(rb_errinfo(), mesg);
16501  rb_set_errinfo(err);
16502  if (!NIL_P(err)) {
16503  rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
16504  }
16505  else {
16507  }
16508  return Qnil;
16509  }
16510  return re;
16511 }
16512 
16513 void
16515 {
16516 }
16517 
16518 NODE*
16520 {
16521  NODE *prelude = 0;
16522  NODE *scope = node;
16523  struct parser_params *parser;
16524 
16525  if (!node) return node;
16526 
16527  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16528 
16529  node = node->nd_body;
16530 
16531  if (nd_type(node) == NODE_PRELUDE) {
16532  prelude = node;
16533  node = node->nd_body;
16534  }
16535 
16536  node = block_append(node,
16537  NEW_FCALL(rb_intern("print"),
16538  NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
16539  if (prelude) {
16540  prelude->nd_body = node;
16541  scope->nd_body = prelude;
16542  }
16543  else {
16544  scope->nd_body = node;
16545  }
16546 
16547  return scope;
16548 }
16549 
16550 NODE *
16551 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
16552 {
16553  NODE *prelude = 0;
16554  NODE *scope = node;
16555  struct parser_params *parser;
16556 
16557  if (!node) return node;
16558 
16559  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16560 
16561  node = node->nd_body;
16562 
16563  if (nd_type(node) == NODE_PRELUDE) {
16564  prelude = node;
16565  node = node->nd_body;
16566  }
16567  if (split) {
16568  node = block_append(NEW_GASGN(rb_intern("$F"),
16569  NEW_CALL(NEW_GVAR(rb_intern("$_")),
16570  rb_intern("split"), 0)),
16571  node);
16572  }
16573  if (chop) {
16574  node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
16575  rb_intern("chop!"), 0), node);
16576  }
16577 
16578  node = NEW_OPT_N(node);
16579 
16580  if (prelude) {
16581  prelude->nd_body = node;
16582  scope->nd_body = prelude;
16583  }
16584  else {
16585  scope->nd_body = node;
16586  }
16587 
16588  return scope;
16589 }
16590 
16591 static const struct {
16593  const char *name;
16594 } op_tbl[] = {
16595  {tDOT2, ".."},
16596  {tDOT3, "..."},
16597  {tPOW, "**"},
16598  {tDSTAR, "**"},
16599  {tUPLUS, "+@"},
16600  {tUMINUS, "-@"},
16601  {tCMP, "<=>"},
16602  {tGEQ, ">="},
16603  {tLEQ, "<="},
16604  {tEQ, "=="},
16605  {tEQQ, "==="},
16606  {tNEQ, "!="},
16607  {tMATCH, "=~"},
16608  {tNMATCH, "!~"},
16609  {tAREF, "[]"},
16610  {tASET, "[]="},
16611  {tLSHFT, "<<"},
16612  {tRSHFT, ">>"},
16613  {tCOLON2, "::"},
16614 };
16615 
16616 #define op_tbl_count numberof(op_tbl)
16617 
16618 #ifndef ENABLE_SELECTOR_NAMESPACE
16619 #define ENABLE_SELECTOR_NAMESPACE 0
16620 #endif
16621 
16622 static struct symbols {
16623  ID last_id;
16624  st_table *sym_id;
16625  st_table *id_str;
16626 #if ENABLE_SELECTOR_NAMESPACE
16627  st_table *ivar2_id;
16628  st_table *id_ivar2;
16629 #endif
16631  int minor_marked;
16633 
16634 static const struct st_hash_type symhash = {
16636  rb_str_hash,
16637 };
16638 
16639 #if ENABLE_SELECTOR_NAMESPACE
16640 struct ivar2_key {
16641  ID id;
16642  VALUE klass;
16643 };
16644 
16645 static int
16646 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
16647 {
16648  if (key1->id == key2->id && key1->klass == key2->klass) {
16649  return 0;
16650  }
16651  return 1;
16652 }
16653 
16654 static int
16655 ivar2_hash(struct ivar2_key *key)
16656 {
16657  return (key->id << 8) ^ (key->klass >> 2);
16658 }
16659 
16660 static const struct st_hash_type ivar2_hash_type = {
16661  ivar2_cmp,
16662  ivar2_hash,
16663 };
16664 #endif
16665 
16666 void
16668 {
16669  global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
16671 #if ENABLE_SELECTOR_NAMESPACE
16672  global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
16673  global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
16674 #endif
16675 
16676  (void)nodetype;
16677  (void)nodeline;
16678 #if PARSER_DEBUG
16679  (void)lex_state_name(-1);
16680 #endif
16681 
16682  Init_id();
16683 }
16684 
16685 void
16686 rb_gc_mark_symbols(int full_mark)
16687 {
16688  if (full_mark || global_symbols.minor_marked == 0) {
16692 
16693  if (!full_mark) global_symbols.minor_marked = 1;
16694  }
16695 }
16696 #endif /* !RIPPER */
16697 
16698 static ID
16700 {
16701  ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
16702  id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
16703  return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
16704 }
16705 
16706 #ifndef RIPPER
16707 static int
16708 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
16709 {
16710  int mb = 0;
16711 
16712  if (m >= e) return 0;
16713  if (is_global_name_punct(*m)) {
16714  ++m;
16715  }
16716  else if (*m == '-') {
16717  if (++m >= e) return 0;
16718  if (is_identchar(m, e, enc)) {
16719  if (!ISASCII(*m)) mb = 1;
16720  m += rb_enc_mbclen(m, e, enc);
16721  }
16722  }
16723  else {
16724  if (!rb_enc_isdigit(*m, enc)) return 0;
16725  do {
16726  if (!ISASCII(*m)) mb = 1;
16727  ++m;
16728  } while (m < e && rb_enc_isdigit(*m, enc));
16729  }
16730  return m == e ? mb + 1 : 0;
16731 }
16732 
16733 int
16734 rb_symname_p(const char *name)
16735 {
16736  return rb_enc_symname_p(name, rb_ascii8bit_encoding());
16737 }
16738 
16739 int
16740 rb_enc_symname_p(const char *name, rb_encoding *enc)
16741 {
16742  return rb_enc_symname2_p(name, strlen(name), enc);
16743 }
16744 
16745 #define IDSET_ATTRSET_FOR_SYNTAX ((1U<<ID_LOCAL)|(1U<<ID_CONST))
16746 #define IDSET_ATTRSET_FOR_INTERN (~(~0U<<ID_SCOPE_MASK) & ~(1U<<ID_ATTRSET))
16747 
16748 static int
16749 rb_enc_symname_type(const char *name, long len, rb_encoding *enc, unsigned int allowed_attrset)
16750 {
16751  const char *m = name;
16752  const char *e = m + len;
16753  int type = ID_JUNK;
16754 
16755  if (!m || len <= 0) return -1;
16756  switch (*m) {
16757  case '\0':
16758  return -1;
16759 
16760  case '$':
16761  type = ID_GLOBAL;
16762  if (is_special_global_name(++m, e, enc)) return type;
16763  goto id;
16764 
16765  case '@':
16766  type = ID_INSTANCE;
16767  if (*++m == '@') {
16768  ++m;
16769  type = ID_CLASS;
16770  }
16771  goto id;
16772 
16773  case '<':
16774  switch (*++m) {
16775  case '<': ++m; break;
16776  case '=': if (*++m == '>') ++m; break;
16777  default: break;
16778  }
16779  break;
16780 
16781  case '>':
16782  switch (*++m) {
16783  case '>': case '=': ++m; break;
16784  }
16785  break;
16786 
16787  case '=':
16788  switch (*++m) {
16789  case '~': ++m; break;
16790  case '=': if (*++m == '=') ++m; break;
16791  default: return -1;
16792  }
16793  break;
16794 
16795  case '*':
16796  if (*++m == '*') ++m;
16797  break;
16798 
16799  case '+': case '-':
16800  if (*++m == '@') ++m;
16801  break;
16802 
16803  case '|': case '^': case '&': case '/': case '%': case '~': case '`':
16804  ++m;
16805  break;
16806 
16807  case '[':
16808  if (*++m != ']') return -1;
16809  if (*++m == '=') ++m;
16810  break;
16811 
16812  case '!':
16813  if (len == 1) return ID_JUNK;
16814  switch (*++m) {
16815  case '=': case '~': ++m; break;
16816  default: return -1;
16817  }
16818  break;
16819 
16820  default:
16821  type = rb_enc_isupper(*m, enc) ? ID_CONST : ID_LOCAL;
16822  id:
16823  if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
16824  return -1;
16825  while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
16826  if (m >= e) break;
16827  switch (*m) {
16828  case '!': case '?':
16829  if (type == ID_GLOBAL || type == ID_CLASS || type == ID_INSTANCE) return -1;
16830  type = ID_JUNK;
16831  ++m;
16832  break;
16833  case '=':
16834  if (!(allowed_attrset & (1U << type))) return -1;
16835  type = ID_ATTRSET;
16836  ++m;
16837  break;
16838  }
16839  break;
16840  }
16841  return m == e ? type : -1;
16842 }
16843 
16844 int
16845 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
16846 {
16847  return rb_enc_symname_type(name, len, enc, IDSET_ATTRSET_FOR_SYNTAX) != -1;
16848 }
16849 
16850 static int
16851 rb_str_symname_type(VALUE name, unsigned int allowed_attrset)
16852 {
16853  const char *ptr = StringValuePtr(name);
16854  long len = RSTRING_LEN(name);
16855  int type = rb_enc_symname_type(ptr, len, rb_enc_get(name), allowed_attrset);
16856  RB_GC_GUARD(name);
16857  return type;
16858 }
16859 
16860 static ID
16861 register_symid(ID id, const char *name, long len, rb_encoding *enc)
16862 {
16863  VALUE str = rb_enc_str_new(name, len, enc);
16864  return register_symid_str(id, str);
16865 }
16866 
16867 static ID
16869 {
16870  OBJ_FREEZE(str);
16871  str = rb_fstring(str);
16872 
16875  }
16876 
16880  return id;
16881 }
16882 
16883 static int
16885 {
16886  if (!rb_enc_asciicompat(rb_enc_get(str))) return FALSE;
16887  switch (rb_enc_str_coderange(str)) {
16888  case ENC_CODERANGE_BROKEN:
16889  rb_raise(rb_eEncodingError, "invalid encoding symbol");
16890  case ENC_CODERANGE_7BIT:
16891  return TRUE;
16892  }
16893  return FALSE;
16894 }
16895 
16896 /*
16897  * _str_ itself will be registered at the global symbol table. _str_
16898  * can be modified before the registration, since the encoding will be
16899  * set to ASCII-8BIT if it is a special global name.
16900  */
16901 static ID intern_str(VALUE str);
16902 
16903 static VALUE
16904 setup_fake_str(struct RString *fake_str, const char *name, long len)
16905 {
16906  fake_str->basic.flags = T_STRING|RSTRING_NOEMBED;
16908  fake_str->as.heap.len = len;
16909  fake_str->as.heap.ptr = (char *)name;
16910  fake_str->as.heap.aux.capa = len;
16911  return (VALUE)fake_str;
16912 }
16913 
16914 ID
16915 rb_intern3(const char *name, long len, rb_encoding *enc)
16916 {
16917  st_data_t data;
16918  struct RString fake_str;
16919  VALUE str = setup_fake_str(&fake_str, name, len);
16920  rb_enc_associate(str, enc);
16921  OBJ_FREEZE(str);
16922 
16923  if (st_lookup(global_symbols.sym_id, str, &data))
16924  return (ID)data;
16925 
16926  str = rb_enc_str_new(name, len, enc); /* make true string */
16927  return intern_str(str);
16928 }
16929 
16930 static ID
16932 {
16933  const char *name, *m, *e;
16934  long len, last;
16935  rb_encoding *enc, *symenc;
16936  unsigned char c;
16937  ID id;
16938  int mb;
16939 
16940  RSTRING_GETMEM(str, name, len);
16941  m = name;
16942  e = m + len;
16943  enc = rb_enc_get(str);
16944  symenc = enc;
16945 
16946  if (!len || (rb_cString && !rb_enc_asciicompat(enc))) {
16947  junk:
16948  id = ID_JUNK;
16949  goto new_id;
16950  }
16951  last = len-1;
16952  id = 0;
16953  switch (*m) {
16954  case '$':
16955  if (len < 2) goto junk;
16956  id |= ID_GLOBAL;
16957  if ((mb = is_special_global_name(++m, e, enc)) != 0) {
16958  if (!--mb) symenc = rb_usascii_encoding();
16959  goto new_id;
16960  }
16961  break;
16962  case '@':
16963  if (m[1] == '@') {
16964  if (len < 3) goto junk;
16965  m++;
16966  id |= ID_CLASS;
16967  }
16968  else {
16969  if (len < 2) goto junk;
16970  id |= ID_INSTANCE;
16971  }
16972  m++;
16973  break;
16974  default:
16975  c = m[0];
16976  if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
16977  /* operators */
16978  int i;
16979 
16980  if (len == 1) {
16981  id = c;
16982  goto id_register;
16983  }
16984  for (i = 0; i < op_tbl_count; i++) {
16985  if (*op_tbl[i].name == *m &&
16986  strcmp(op_tbl[i].name, m) == 0) {
16987  id = op_tbl[i].token;
16988  goto id_register;
16989  }
16990  }
16991  }
16992  break;
16993  }
16994  if (name[last] == '=') {
16995  /* attribute assignment */
16996  if (last > 1 && name[last-1] == '=')
16997  goto junk;
16998  id = rb_intern3(name, last, enc);
16999  if (id > tLAST_OP_ID && !is_attrset_id(id)) {
17000  enc = rb_enc_get(rb_id2str(id));
17001  id = rb_id_attrset(id);
17002  goto id_register;
17003  }
17004  id = ID_ATTRSET;
17005  }
17006  else if (id == 0) {
17007  if (rb_enc_isupper(m[0], enc)) {
17008  id = ID_CONST;
17009  }
17010  else {
17011  id = ID_LOCAL;
17012  }
17013  }
17014  if (!rb_enc_isdigit(*m, enc)) {
17015  while (m <= name + last && is_identchar(m, e, enc)) {
17016  if (ISASCII(*m)) {
17017  m++;
17018  }
17019  else {
17020  m += rb_enc_mbclen(m, e, enc);
17021  }
17022  }
17023  }
17024  if (id != ID_ATTRSET && m - name < len) id = ID_JUNK;
17025  if (sym_check_asciionly(str)) symenc = rb_usascii_encoding();
17026  new_id:
17027  if (symenc != enc) rb_enc_associate(str, symenc);
17029  if (len > 20) {
17030  rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
17031  name);
17032  }
17033  else {
17034  rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
17035  (int)len, name);
17036  }
17037  }
17039  id_register:
17040  return register_symid_str(id, str);
17041 }
17042 
17043 ID
17044 rb_intern2(const char *name, long len)
17045 {
17046  return rb_intern3(name, len, rb_usascii_encoding());
17047 }
17048 
17049 #undef rb_intern
17050 ID
17051 rb_intern(const char *name)
17052 {
17053  return rb_intern2(name, strlen(name));
17054 }
17055 
17056 ID
17058 {
17059  st_data_t id;
17060 
17061  if (st_lookup(global_symbols.sym_id, str, &id))
17062  return (ID)id;
17063  return intern_str(rb_str_dup(str));
17064 }
17065 
17066 VALUE
17068 {
17069  st_data_t data;
17070 
17071  if (id < tLAST_TOKEN) {
17072  int i = 0;
17073 
17074  if (id < INT_MAX && rb_ispunct((int)id)) {
17075  VALUE str = global_symbols.op_sym[i = (int)id];
17076  if (!str) {
17077  char name[2];
17078  name[0] = (char)id;
17079  name[1] = 0;
17080  str = rb_usascii_str_new(name, 1);
17081  OBJ_FREEZE(str);
17082  str = rb_fstring(str);
17083  global_symbols.op_sym[i] = str;
17085  }
17086  return str;
17087  }
17088  for (i = 0; i < op_tbl_count; i++) {
17089  if (op_tbl[i].token == id) {
17090  VALUE str = global_symbols.op_sym[i];
17091  if (!str) {
17092  str = rb_usascii_str_new2(op_tbl[i].name);
17093  OBJ_FREEZE(str);
17094  str = rb_fstring(str);
17095  global_symbols.op_sym[i] = str;
17097  }
17098  return str;
17099  }
17100  }
17101  }
17102 
17103  if (st_lookup(global_symbols.id_str, id, &data)) {
17104  VALUE str = (VALUE)data;
17105  if (RBASIC(str)->klass == 0)
17107  return str;
17108  }
17109 
17110  if (is_attrset_id(id)) {
17111  ID id_stem = (id & ~ID_SCOPE_MASK);
17112  VALUE str;
17113 
17114  do {
17115  if (!!(str = rb_id2str(id_stem | ID_LOCAL))) break;
17116  if (!!(str = rb_id2str(id_stem | ID_CONST))) break;
17117  if (!!(str = rb_id2str(id_stem | ID_INSTANCE))) break;
17118  if (!!(str = rb_id2str(id_stem | ID_GLOBAL))) break;
17119  if (!!(str = rb_id2str(id_stem | ID_CLASS))) break;
17120  if (!!(str = rb_id2str(id_stem | ID_JUNK))) break;
17121  return 0;
17122  } while (0);
17123  str = rb_str_dup(str);
17124  rb_str_cat(str, "=", 1);
17125  register_symid_str(id, str);
17126  if (st_lookup(global_symbols.id_str, id, &data)) {
17127  VALUE str = (VALUE)data;
17128  if (RBASIC(str)->klass == 0)
17130  return str;
17131  }
17132  }
17133  return 0;
17134 }
17135 
17136 const char *
17138 {
17139  VALUE str = rb_id2str(id);
17140 
17141  if (!str) return 0;
17142  return RSTRING_PTR(str);
17143 }
17144 
17145 static int
17147 {
17148  rb_ary_push(ary, ID2SYM(value));
17149  return ST_CONTINUE;
17150 }
17151 
17152 /*
17153  * call-seq:
17154  * Symbol.all_symbols => array
17155  *
17156  * Returns an array of all the symbols currently in Ruby's symbol
17157  * table.
17158  *
17159  * Symbol.all_symbols.size #=> 903
17160  * Symbol.all_symbols[1,20] #=> [:floor, :ARGV, :Binding, :symlink,
17161  * :chown, :EOFError, :$;, :String,
17162  * :LOCK_SH, :"setuid?", :$<,
17163  * :default_proc, :compact, :extend,
17164  * :Tms, :getwd, :$=, :ThreadGroup,
17165  * :wait2, :$>]
17166  */
17167 
17168 VALUE
17170 {
17172 
17174  return ary;
17175 }
17176 
17177 int
17179 {
17180  return is_const_id(id);
17181 }
17182 
17183 int
17185 {
17186  return is_class_id(id);
17187 }
17188 
17189 int
17191 {
17192  return is_global_id(id);
17193 }
17194 
17195 int
17197 {
17198  return is_instance_id(id);
17199 }
17200 
17201 int
17203 {
17204  return is_attrset_id(id);
17205 }
17206 
17207 int
17209 {
17210  return is_local_id(id);
17211 }
17212 
17213 int
17215 {
17216  return is_junk_id(id);
17217 }
17218 
17230 ID
17231 rb_check_id(volatile VALUE *namep)
17232 {
17233  st_data_t id;
17234  VALUE tmp;
17235  VALUE name = *namep;
17236 
17237  if (SYMBOL_P(name)) {
17238  return SYM2ID(name);
17239  }
17240  else if (!RB_TYPE_P(name, T_STRING)) {
17241  tmp = rb_check_string_type(name);
17242  if (NIL_P(tmp)) {
17243  tmp = rb_inspect(name);
17244  rb_raise(rb_eTypeError, "%s is not a symbol",
17245  RSTRING_PTR(tmp));
17246  }
17247  name = tmp;
17248  *namep = name;
17249  }
17250 
17251  sym_check_asciionly(name);
17252 
17253  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
17254  return (ID)id;
17255 
17256  if (rb_is_attrset_name(name)) {
17257  struct RString fake_str;
17258  /* make local name by chopping '=' */
17259  const VALUE localname = setup_fake_str(&fake_str, RSTRING_PTR(name), RSTRING_LEN(name) - 1);
17260  rb_enc_copy(localname, name);
17261  OBJ_FREEZE(localname);
17262 
17263  if (st_lookup(global_symbols.sym_id, (st_data_t)localname, &id)) {
17264  return rb_id_attrset((ID)id);
17265  }
17266  RB_GC_GUARD(name);
17267  }
17268 
17269  return (ID)0;
17270 }
17271 
17272 ID
17273 rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc)
17274 {
17275  st_data_t id;
17276  struct RString fake_str;
17277  const VALUE name = setup_fake_str(&fake_str, ptr, len);
17278  rb_enc_associate(name, enc);
17279 
17280  sym_check_asciionly(name);
17281 
17282  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
17283  return (ID)id;
17284 
17285  if (rb_is_attrset_name(name)) {
17286  fake_str.as.heap.len = len - 1;
17287  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id)) {
17288  return rb_id_attrset((ID)id);
17289  }
17290  }
17291 
17292  return (ID)0;
17293 }
17294 
17295 int
17297 {
17298  return rb_str_symname_type(name, 0) == ID_CONST;
17299 }
17300 
17301 int
17303 {
17304  return rb_str_symname_type(name, 0) == ID_CLASS;
17305 }
17306 
17307 int
17309 {
17310  return rb_str_symname_type(name, 0) == ID_GLOBAL;
17311 }
17312 
17313 int
17315 {
17316  return rb_str_symname_type(name, 0) == ID_INSTANCE;
17317 }
17318 
17319 int
17321 {
17323 }
17324 
17325 int
17327 {
17328  return rb_str_symname_type(name, 0) == ID_LOCAL;
17329 }
17330 
17331 int
17333 {
17334  switch (rb_str_symname_type(name, 0)) {
17335  case ID_LOCAL: case ID_ATTRSET: case ID_JUNK:
17336  return TRUE;
17337  }
17338  return FALSE;
17339 }
17340 
17341 int
17343 {
17344  return rb_str_symname_type(name, IDSET_ATTRSET_FOR_SYNTAX) == -1;
17345 }
17346 
17347 #endif /* !RIPPER */
17348 
17349 static void
17351 {
17352  parser->eofp = Qfalse;
17353 
17354  parser->parser_lex_strterm = 0;
17355  parser->parser_cond_stack = 0;
17356  parser->parser_cmdarg_stack = 0;
17357  parser->parser_class_nest = 0;
17358  parser->parser_paren_nest = 0;
17359  parser->parser_lpar_beg = 0;
17360  parser->parser_brace_nest = 0;
17361  parser->parser_in_single = 0;
17362  parser->parser_in_def = 0;
17363  parser->parser_in_defined = 0;
17364  parser->parser_in_kwarg = 0;
17365  parser->parser_compile_for_eval = 0;
17366  parser->parser_cur_mid = 0;
17367  parser->parser_tokenbuf = NULL;
17368  parser->parser_tokidx = 0;
17369  parser->parser_toksiz = 0;
17370  parser->parser_heredoc_end = 0;
17371  parser->parser_command_start = TRUE;
17372  parser->parser_deferred_nodes = 0;
17373  parser->parser_lex_pbeg = 0;
17374  parser->parser_lex_p = 0;
17375  parser->parser_lex_pend = 0;
17376  parser->parser_lvtbl = 0;
17377  parser->parser_ruby__end__seen = 0;
17378  parser->parser_ruby_sourcefile = 0;
17380 #ifndef RIPPER
17381  parser->is_ripper = 0;
17382  parser->parser_eval_tree_begin = 0;
17383  parser->parser_eval_tree = 0;
17384 #else
17385  parser->is_ripper = 1;
17386  parser->delayed = Qnil;
17387 
17388  parser->result = Qnil;
17389  parser->parsing_thread = Qnil;
17390  parser->toplevel_p = TRUE;
17391 #endif
17392 #ifdef YYMALLOC
17393  parser->heap = NULL;
17394 #endif
17395  parser->enc = rb_utf8_encoding();
17396 }
17397 
17398 #ifdef RIPPER
17399 #define parser_mark ripper_parser_mark
17400 #define parser_free ripper_parser_free
17401 #endif
17402 
17403 static void
17405 {
17406  struct parser_params *p = (struct parser_params*)ptr;
17407 
17414 #ifndef RIPPER
17417  rb_gc_mark(p->debug_lines);
17418 #else
17419  rb_gc_mark(p->delayed);
17420  rb_gc_mark(p->value);
17421  rb_gc_mark(p->result);
17422  rb_gc_mark(p->parsing_thread);
17423 #endif
17424 #ifdef YYMALLOC
17425  rb_gc_mark((VALUE)p->heap);
17426 #endif
17427 }
17428 
17429 static void
17430 parser_free(void *ptr)
17431 {
17432  struct parser_params *p = (struct parser_params*)ptr;
17433  struct local_vars *local, *prev;
17434 
17435  if (p->parser_tokenbuf) {
17436  xfree(p->parser_tokenbuf);
17437  }
17438  for (local = p->parser_lvtbl; local; local = prev) {
17439  if (local->vars) xfree(local->vars);
17440  prev = local->prev;
17441  xfree(local);
17442  }
17443  xfree(p);
17444 }
17445 
17446 static size_t
17447 parser_memsize(const void *ptr)
17448 {
17449  struct parser_params *p = (struct parser_params*)ptr;
17450  struct local_vars *local;
17451  size_t size = sizeof(*p);
17452 
17453  if (!ptr) return 0;
17454  size += p->parser_toksiz;
17455  for (local = p->parser_lvtbl; local; local = local->prev) {
17456  size += sizeof(*local);
17457  if (local->vars) size += local->vars->capa * sizeof(ID);
17458  }
17459  return size;
17460 }
17461 
17462 static
17463 #ifndef RIPPER
17464 const
17465 #endif
17466 rb_data_type_t parser_data_type = {
17467  "parser",
17468  {
17469  parser_mark,
17470  parser_free,
17472  },
17474 };
17475 
17476 #ifndef RIPPER
17477 #undef rb_reserved_word
17478 
17479 const struct kwtable *
17480 rb_reserved_word(const char *str, unsigned int len)
17481 {
17482  return reserved_word(str, len);
17483 }
17484 
17485 static struct parser_params *
17487 {
17488  struct parser_params *p;
17489 
17490  p = ALLOC_N(struct parser_params, 1);
17491  MEMZERO(p, struct parser_params, 1);
17492  parser_initialize(p);
17493  return p;
17494 }
17495 
17496 VALUE
17498 {
17499  struct parser_params *p = parser_new();
17500 
17501  return TypedData_Wrap_Struct(0, &parser_data_type, p);
17502 }
17503 
17504 /*
17505  * call-seq:
17506  * ripper#end_seen? -> Boolean
17507  *
17508  * Return true if parsed source ended by +\_\_END\_\_+.
17509  */
17510 VALUE
17512 {
17513  struct parser_params *parser;
17514 
17515  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17516  return ruby__end__seen ? Qtrue : Qfalse;
17517 }
17518 
17519 /*
17520  * call-seq:
17521  * ripper#encoding -> encoding
17522  *
17523  * Return encoding of the source.
17524  */
17525 VALUE
17527 {
17528  struct parser_params *parser;
17529 
17530  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17532 }
17533 
17534 /*
17535  * call-seq:
17536  * ripper.yydebug -> true or false
17537  *
17538  * Get yydebug.
17539  */
17540 VALUE
17542 {
17543  struct parser_params *parser;
17544 
17545  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17546  return yydebug ? Qtrue : Qfalse;
17547 }
17548 
17549 /*
17550  * call-seq:
17551  * ripper.yydebug = flag
17552  *
17553  * Set yydebug.
17554  */
17555 VALUE
17557 {
17558  struct parser_params *parser;
17559 
17560  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17561  yydebug = RTEST(flag);
17562  return flag;
17563 }
17564 
17565 #ifdef YYMALLOC
17566 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
17567 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
17568 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
17569  (n)->u3.cnt = (c), (p))
17570 
17571 void *
17572 rb_parser_malloc(struct parser_params *parser, size_t size)
17573 {
17574  size_t cnt = HEAPCNT(1, size);
17575  NODE *n = NEWHEAP();
17576  void *ptr = xmalloc(size);
17577 
17578  return ADD2HEAP(n, cnt, ptr);
17579 }
17580 
17581 void *
17582 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
17583 {
17584  size_t cnt = HEAPCNT(nelem, size);
17585  NODE *n = NEWHEAP();
17586  void *ptr = xcalloc(nelem, size);
17587 
17588  return ADD2HEAP(n, cnt, ptr);
17589 }
17590 
17591 void *
17592 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
17593 {
17594  NODE *n;
17595  size_t cnt = HEAPCNT(1, size);
17596 
17597  if (ptr && (n = parser->heap) != NULL) {
17598  do {
17599  if (n->u1.node == ptr) {
17600  n->u1.node = ptr = xrealloc(ptr, size);
17601  if (n->u3.cnt) n->u3.cnt = cnt;
17602  return ptr;
17603  }
17604  } while ((n = n->u2.node) != NULL);
17605  }
17606  n = NEWHEAP();
17607  ptr = xrealloc(ptr, size);
17608  return ADD2HEAP(n, cnt, ptr);
17609 }
17610 
17611 void
17612 rb_parser_free(struct parser_params *parser, void *ptr)
17613 {
17614  NODE **prev = &parser->heap, *n;
17615 
17616  while ((n = *prev) != NULL) {
17617  if (n->u1.node == ptr) {
17618  *prev = n->u2.node;
17620  break;
17621  }
17622  prev = &n->u2.node;
17623  }
17624  xfree(ptr);
17625 }
17626 #endif
17627 #endif
17628 
17629 #ifdef RIPPER
17630 #ifdef RIPPER_DEBUG
17631 extern int rb_is_pointer_to_heap(VALUE);
17632 
17633 /* :nodoc: */
17634 static VALUE
17635 ripper_validate_object(VALUE self, VALUE x)
17636 {
17637  if (x == Qfalse) return x;
17638  if (x == Qtrue) return x;
17639  if (x == Qnil) return x;
17640  if (x == Qundef)
17641  rb_raise(rb_eArgError, "Qundef given");
17642  if (FIXNUM_P(x)) return x;
17643  if (SYMBOL_P(x)) return x;
17644  if (!rb_is_pointer_to_heap(x))
17645  rb_raise(rb_eArgError, "invalid pointer: %p", x);
17646  switch (BUILTIN_TYPE(x)) {
17647  case T_STRING:
17648  case T_OBJECT:
17649  case T_ARRAY:
17650  case T_BIGNUM:
17651  case T_FLOAT:
17652  case T_COMPLEX:
17653  case T_RATIONAL:
17654  return x;
17655  case T_NODE:
17656  if (nd_type(x) != NODE_LASGN) {
17657  rb_raise(rb_eArgError, "NODE given: %p", x);
17658  }
17659  return ((NODE *)x)->nd_rval;
17660  default:
17661  rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
17662  x, rb_obj_classname(x));
17663  }
17664  return x;
17665 }
17666 #endif
17667 
17668 #define validate(x) ((x) = get_value(x))
17669 
17670 static VALUE
17671 ripper_dispatch0(struct parser_params *parser, ID mid)
17672 {
17673  return rb_funcall(parser->value, mid, 0);
17674 }
17675 
17676 static VALUE
17677 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
17678 {
17679  validate(a);
17680  return rb_funcall(parser->value, mid, 1, a);
17681 }
17682 
17683 static VALUE
17684 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
17685 {
17686  validate(a);
17687  validate(b);
17688  return rb_funcall(parser->value, mid, 2, a, b);
17689 }
17690 
17691 static VALUE
17692 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
17693 {
17694  validate(a);
17695  validate(b);
17696  validate(c);
17697  return rb_funcall(parser->value, mid, 3, a, b, c);
17698 }
17699 
17700 static VALUE
17701 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
17702 {
17703  validate(a);
17704  validate(b);
17705  validate(c);
17706  validate(d);
17707  return rb_funcall(parser->value, mid, 4, a, b, c, d);
17708 }
17709 
17710 static VALUE
17711 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
17712 {
17713  validate(a);
17714  validate(b);
17715  validate(c);
17716  validate(d);
17717  validate(e);
17718  return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
17719 }
17720 
17721 static VALUE
17722 ripper_dispatch7(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e, VALUE f, VALUE g)
17723 {
17724  validate(a);
17725  validate(b);
17726  validate(c);
17727  validate(d);
17728  validate(e);
17729  validate(f);
17730  validate(g);
17731  return rb_funcall(parser->value, mid, 7, a, b, c, d, e, f, g);
17732 }
17733 
17734 static const struct kw_assoc {
17735  ID id;
17736  const char *name;
17737 } keyword_to_name[] = {
17738  {keyword_class, "class"},
17739  {keyword_module, "module"},
17740  {keyword_def, "def"},
17741  {keyword_undef, "undef"},
17742  {keyword_begin, "begin"},
17743  {keyword_rescue, "rescue"},
17744  {keyword_ensure, "ensure"},
17745  {keyword_end, "end"},
17746  {keyword_if, "if"},
17747  {keyword_unless, "unless"},
17748  {keyword_then, "then"},
17749  {keyword_elsif, "elsif"},
17750  {keyword_else, "else"},
17751  {keyword_case, "case"},
17752  {keyword_when, "when"},
17753  {keyword_while, "while"},
17754  {keyword_until, "until"},
17755  {keyword_for, "for"},
17756  {keyword_break, "break"},
17757  {keyword_next, "next"},
17758  {keyword_redo, "redo"},
17759  {keyword_retry, "retry"},
17760  {keyword_in, "in"},
17761  {keyword_do, "do"},
17762  {keyword_do_cond, "do"},
17763  {keyword_do_block, "do"},
17764  {keyword_return, "return"},
17765  {keyword_yield, "yield"},
17766  {keyword_super, "super"},
17767  {keyword_self, "self"},
17768  {keyword_nil, "nil"},
17769  {keyword_true, "true"},
17770  {keyword_false, "false"},
17771  {keyword_and, "and"},
17772  {keyword_or, "or"},
17773  {keyword_not, "not"},
17774  {modifier_if, "if"},
17775  {modifier_unless, "unless"},
17776  {modifier_while, "while"},
17777  {modifier_until, "until"},
17778  {modifier_rescue, "rescue"},
17779  {keyword_alias, "alias"},
17780  {keyword_defined, "defined?"},
17781  {keyword_BEGIN, "BEGIN"},
17782  {keyword_END, "END"},
17783  {keyword__LINE__, "__LINE__"},
17784  {keyword__FILE__, "__FILE__"},
17785  {keyword__ENCODING__, "__ENCODING__"},
17786  {0, NULL}
17787 };
17788 
17789 static const char*
17790 keyword_id_to_str(ID id)
17791 {
17792  const struct kw_assoc *a;
17793 
17794  for (a = keyword_to_name; a->id; a++) {
17795  if (a->id == id)
17796  return a->name;
17797  }
17798  return NULL;
17799 }
17800 
17801 #undef ripper_id2sym
17802 static VALUE
17803 ripper_id2sym(ID id)
17804 {
17805  const char *name;
17806  char buf[8];
17807 
17808  if (id <= 256) {
17809  buf[0] = (char)id;
17810  buf[1] = '\0';
17811  return ID2SYM(rb_intern2(buf, 1));
17812  }
17813  if ((name = keyword_id_to_str(id))) {
17814  return ID2SYM(rb_intern(name));
17815  }
17816  switch (id) {
17817  case tOROP:
17818  name = "||";
17819  break;
17820  case tANDOP:
17821  name = "&&";
17822  break;
17823  default:
17824  name = rb_id2name(id);
17825  if (!name) {
17826  rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
17827  }
17828  return ID2SYM(id);
17829  }
17830  return ID2SYM(rb_intern(name));
17831 }
17832 
17833 static ID
17834 ripper_get_id(VALUE v)
17835 {
17836  NODE *nd;
17837  if (!RB_TYPE_P(v, T_NODE)) return 0;
17838  nd = (NODE *)v;
17839  if (nd_type(nd) != NODE_LASGN) return 0;
17840  return nd->nd_vid;
17841 }
17842 
17843 static VALUE
17844 ripper_get_value(VALUE v)
17845 {
17846  NODE *nd;
17847  if (v == Qundef) return Qnil;
17848  if (!RB_TYPE_P(v, T_NODE)) return v;
17849  nd = (NODE *)v;
17850  if (nd_type(nd) != NODE_LASGN) return Qnil;
17851  return nd->nd_rval;
17852 }
17853 
17854 static void
17855 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
17856 {
17857  VALUE str;
17858  va_list args;
17859 
17860  va_start(args, fmt);
17861  str = rb_vsprintf(fmt, args);
17862  va_end(args);
17863  rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
17864 }
17865 
17866 static void
17867 ripper_warn0(struct parser_params *parser, const char *fmt)
17868 {
17869  rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
17870 }
17871 
17872 static void
17873 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
17874 {
17875  rb_funcall(parser->value, rb_intern("warn"), 2,
17876  STR_NEW2(fmt), INT2NUM(a));
17877 }
17878 
17879 static void
17880 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
17881 {
17882  rb_funcall(parser->value, rb_intern("warn"), 2,
17883  STR_NEW2(fmt), STR_NEW2(str));
17884 }
17885 
17886 static void
17887 ripper_warning0(struct parser_params *parser, const char *fmt)
17888 {
17889  rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
17890 }
17891 
17892 static void
17893 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
17894 {
17895  rb_funcall(parser->value, rb_intern("warning"), 2,
17896  STR_NEW2(fmt), STR_NEW2(str));
17897 }
17898 
17899 static VALUE
17900 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
17901 {
17902  return rb_io_gets(src);
17903 }
17904 
17905 static VALUE
17906 ripper_s_allocate(VALUE klass)
17907 {
17908  struct parser_params *p;
17909  VALUE self;
17910 
17911  p = ALLOC_N(struct parser_params, 1);
17912  MEMZERO(p, struct parser_params, 1);
17913  self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
17914  p->value = self;
17915  return self;
17916 }
17917 
17918 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
17919 
17920 /*
17921  * call-seq:
17922  * Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
17923  *
17924  * Create a new Ripper object.
17925  * _src_ must be a String, an IO, or an Object which has #gets method.
17926  *
17927  * This method does not starts parsing.
17928  * See also Ripper#parse and Ripper.parse.
17929  */
17930 static VALUE
17931 ripper_initialize(int argc, VALUE *argv, VALUE self)
17932 {
17933  struct parser_params *parser;
17934  VALUE src, fname, lineno;
17935 
17936  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17937  rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
17938  if (RB_TYPE_P(src, T_FILE)) {
17939  parser->parser_lex_gets = ripper_lex_get_generic;
17940  }
17941  else {
17942  StringValue(src);
17943  parser->parser_lex_gets = lex_get_str;
17944  }
17945  parser->parser_lex_input = src;
17946  parser->eofp = Qfalse;
17947  if (NIL_P(fname)) {
17948  fname = STR_NEW2("(ripper)");
17949  }
17950  else {
17951  StringValue(fname);
17952  }
17953  parser_initialize(parser);
17954 
17955  parser->parser_ruby_sourcefile_string = fname;
17956  parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
17957  parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
17958 
17959  return Qnil;
17960 }
17961 
17962 struct ripper_args {
17963  struct parser_params *parser;
17964  int argc;
17965  VALUE *argv;
17966 };
17967 
17968 static VALUE
17969 ripper_parse0(VALUE parser_v)
17970 {
17971  struct parser_params *parser;
17972 
17973  TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
17974  parser_prepare(parser);
17975  ripper_yyparse((void*)parser);
17976  return parser->result;
17977 }
17978 
17979 static VALUE
17980 ripper_ensure(VALUE parser_v)
17981 {
17982  struct parser_params *parser;
17983 
17984  TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
17985  parser->parsing_thread = Qnil;
17986  return Qnil;
17987 }
17988 
17989 /*
17990  * call-seq:
17991  * ripper#parse
17992  *
17993  * Start parsing and returns the value of the root action.
17994  */
17995 static VALUE
17996 ripper_parse(VALUE self)
17997 {
17998  struct parser_params *parser;
17999 
18000  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18001  if (!ripper_initialized_p(parser)) {
18002  rb_raise(rb_eArgError, "method called for uninitialized object");
18003  }
18004  if (!NIL_P(parser->parsing_thread)) {
18005  if (parser->parsing_thread == rb_thread_current())
18006  rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
18007  else
18008  rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
18009  }
18010  parser->parsing_thread = rb_thread_current();
18011  rb_ensure(ripper_parse0, self, ripper_ensure, self);
18012 
18013  return parser->result;
18014 }
18015 
18016 /*
18017  * call-seq:
18018  * ripper#column -> Integer
18019  *
18020  * Return column number of current parsing line.
18021  * This number starts from 0.
18022  */
18023 static VALUE
18024 ripper_column(VALUE self)
18025 {
18026  struct parser_params *parser;
18027  long col;
18028 
18029  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18030  if (!ripper_initialized_p(parser)) {
18031  rb_raise(rb_eArgError, "method called for uninitialized object");
18032  }
18033  if (NIL_P(parser->parsing_thread)) return Qnil;
18034  col = parser->tokp - parser->parser_lex_pbeg;
18035  return LONG2NUM(col);
18036 }
18037 
18038 /*
18039  * call-seq:
18040  * ripper#filename -> String
18041  *
18042  * Return current parsing filename.
18043  */
18044 static VALUE
18045 ripper_filename(VALUE self)
18046 {
18047  struct parser_params *parser;
18048 
18049  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18050  if (!ripper_initialized_p(parser)) {
18051  rb_raise(rb_eArgError, "method called for uninitialized object");
18052  }
18053  return parser->parser_ruby_sourcefile_string;
18054 }
18055 
18056 /*
18057  * call-seq:
18058  * ripper#lineno -> Integer
18059  *
18060  * Return line number of current parsing line.
18061  * This number starts from 1.
18062  */
18063 static VALUE
18064 ripper_lineno(VALUE self)
18065 {
18066  struct parser_params *parser;
18067 
18068  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18069  if (!ripper_initialized_p(parser)) {
18070  rb_raise(rb_eArgError, "method called for uninitialized object");
18071  }
18072  if (NIL_P(parser->parsing_thread)) return Qnil;
18073  return INT2NUM(parser->parser_ruby_sourceline);
18074 }
18075 
18076 #ifdef RIPPER_DEBUG
18077 /* :nodoc: */
18078 static VALUE
18079 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
18080 {
18081  StringValue(msg);
18082  if (obj == Qundef) {
18083  rb_raise(rb_eArgError, "%"PRIsVALUE, msg);
18084  }
18085  return Qnil;
18086 }
18087 
18088 /* :nodoc: */
18089 static VALUE
18090 ripper_value(VALUE self, VALUE obj)
18091 {
18092  return ULONG2NUM(obj);
18093 }
18094 #endif
18095 
18096 
18097 void
18098 Init_ripper(void)
18099 {
18100  parser_data_type.parent = RTYPEDDATA_TYPE(rb_parser_new());
18101 
18104  /* ensure existing in symbol table */
18105  (void)rb_intern("||");
18106  (void)rb_intern("&&");
18107 
18108  InitVM(ripper);
18109 }
18110 
18111 void
18112 InitVM_ripper(void)
18113 {
18114  VALUE Ripper;
18115 
18116  Ripper = rb_define_class("Ripper", rb_cObject);
18117  /* version of Ripper */
18118  rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
18119  rb_define_alloc_func(Ripper, ripper_s_allocate);
18120  rb_define_method(Ripper, "initialize", ripper_initialize, -1);
18121  rb_define_method(Ripper, "parse", ripper_parse, 0);
18122  rb_define_method(Ripper, "column", ripper_column, 0);
18123  rb_define_method(Ripper, "filename", ripper_filename, 0);
18124  rb_define_method(Ripper, "lineno", ripper_lineno, 0);
18125  rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
18126  rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
18127  rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
18128  rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
18129 #ifdef RIPPER_DEBUG
18130  rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
18131  rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
18132  rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
18133 #endif
18134 
18137 
18138 # if 0
18139  /* Hack to let RDoc document SCRIPT_LINES__ */
18140 
18141  /*
18142  * When a Hash is assigned to +SCRIPT_LINES__+ the contents of files loaded
18143  * after the assignment will be added as an Array of lines with the file
18144  * name as the key.
18145  */
18146  rb_define_global_const("SCRIPT_LINES__", Qnil);
18147 #endif
18148 
18149 }
18150 #endif /* RIPPER */
18151 
#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:15317
#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:15038
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:16699
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:13092
#define nextc()
Definition: parse.c:11537
static long parser_encode_length(struct parser_params *parser, const char *name, long len)
Definition: parse.c:13121
#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:17572
#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:17326
static NODE * attrset_gen(struct parser_params *, NODE *, ID)
Definition: parse.c:15358
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:16721
#define heredoc_end
Definition: parse.c:394
static VALUE setup_fake_str(struct RString *fake_str, const char *name, long len)
Definition: parse.c:16904
#define NEW_LIST(a)
Definition: node.h:391
int rb_is_class_name(VALUE name)
Definition: parse.c:17302
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:17320
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:15945
#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:15430
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:16166
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:17480
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:15379
#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:17231
#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:15015
#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:14780
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:15976
#define IS_LABEL_POSSIBLE()
Definition: parse.c:13431
#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:16357
#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:13103
#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:16490
#define InitVM(ext)
Definition: ruby.h:1789
static ID register_symid(ID, const char *, long, rb_encoding *)
Definition: parse.c:16861
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:17057
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:16551
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:16745
#define YYPOPSTACK(N)
Definition: parse.c:864
#define ADD2HEAP(n, c, p)
Definition: parse.c:17568
VALUE rb_parser_encoding(VALUE vparser)
Definition: parse.c:17526
#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:15310
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:13114
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:17332
static ID * local_tbl_gen(struct parser_params *)
Definition: parse.c:16199
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:16915
#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:13448
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:15631
static NODE * new_evstr_gen(struct parser_params *, NODE *)
Definition: parse.c:15024
VALUE op_sym[tLAST_OP_ID]
Definition: ripper.c:16720
int rb_is_junk_name(VALUE name)
Definition: parse.c:17342
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:16749
static void set_file_encoding(struct parser_params *parser, const char *str, const char *send)
Definition: parse.c:13360
static NODE * newline_node(NODE *)
Definition: parse.c:14786
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:1854
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:16146
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:15164
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:16713
static size_t parser_memsize(const void *ptr)
Definition: parse.c:17447
static NODE * new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
Definition: parse.c:16066
static void fixpos(NODE *, NODE *)
Definition: parse.c:14796
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:15087
#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:15833
#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:16514
#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:16231
#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:15053
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:16851
VALUE parser_lex_input
Definition: ripper.c:313
static int dvar_defined_gen(struct parser_params *, ID, int)
Definition: parse.c:16318
#define nd_type(n)
Definition: node.h:282
static NODE * new_yield_gen(struct parser_params *, NODE *)
Definition: parse.c:15937
#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:16845
#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:15621
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:16715
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:16312
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:16280
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:16111
#define strtod(s, e)
Definition: util.h:74
#define parser_warn(node, mesg)
Definition: parse.c:14816
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:15753
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:17314
#define ID_SCOPE_MASK
Definition: id.h:30
rb_encoding * enc
Definition: ripper.c:331
static void parser_free(void *ptr)
Definition: parse.c:17430
#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:17208
#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:17592
#define void_expr(node)
Definition: parse.c:440
static void parser_initialize(struct parser_params *parser)
Definition: parse.c:17350
#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:13141
#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:17541
#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:14774
#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:13225
#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:16500
static void magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
Definition: parse.c:13189
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:17582
#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:16708
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:13430
#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:17202
static int reg_fragment_check_gen(struct parser_params *, VALUE, int)
Definition: parse.c:16396
#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:13185
static NODE * dsym_node_gen(struct parser_params *, NODE *)
Definition: parse.c:16039
#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:16095
#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:489
#define RFLOAT(obj)
Definition: ruby.h:1120
static void no_blockarg(struct parser_params *parser, NODE *node)
Definition: parse.c:15912
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:15422
Definition: parse.c:874
#define FLONUM_P(x)
Definition: ruby.h:367
static void parser_mark(void *ptr)
Definition: parse.c:17404
#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:15253
#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:16884
yytype_int16 yyss_alloc
Definition: ripper.c:1092
static ID intern_str(VALUE str)
Definition: parse.c:16931
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:15726
#define op_tbl_count
Definition: parse.c:16616
#define warn_balanced(op, syn)
Definition: parse.c:13442
#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:15518
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:16418
#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:13433
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:16746
#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:14873
#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:15812
static int dvar_curr_gen(struct parser_params *, ID)
Definition: parse.c:16349
#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:16734
#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:17214
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:14809
#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:15461
static const yytype_int16 yyrhs[]
Definition: parse.c:1278
const char * rb_id2name(ID id)
Definition: parse.c:17137
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:13233
#define rb_warn0(fmt)
Definition: parse.c:702
rb_magic_comment_length_t length
Definition: ripper.c:13312
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:15765
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:15404
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:13266
#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:16224
#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:15987
#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:17051
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:16592
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:13100
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:15641
#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:966
Definition: parse.c:852
static NODE * reg_named_capture_assign_gen(struct parser_params *parser, VALUE regexp, NODE *match)
Definition: parse.c:16458
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:16740
#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:17296
static NODE * ret_args_gen(struct parser_params *, NODE *)
Definition: parse.c:15920
#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:16298
NODE * parser_lex_strterm
Definition: ripper.c:295
int rb_is_global_id(ID id)
Definition: parse.c:17190
const char * name
Definition: parse.c:16593
const char * name
Definition: ripper.c:13310
static void local_pop_gen(struct parser_params *)
Definition: parse.c:16183
#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:16634
#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:13429
rb_magic_comment_setter_t func
Definition: ripper.c:13311
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:16714
static void warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
Definition: parse.c:15759
#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:17146
#define nd_head
Definition: node.h:294
struct local_vars * prev
Definition: ripper.c:192
#define IS_END()
Definition: parse.c:13428
static void parser_prepare(struct parser_params *parser)
Definition: parse.c:13403
#define LONG2FIX(i)
Definition: ruby.h:232
ID rb_id_attrset(ID id)
Definition: parse.c:15329
static struct parser_params * parser_new(void)
Definition: parse.c:17486
#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:15366
VALUE rb_id2str(ID id)
Definition: parse.c:17067
#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:15897
VALUE rb_parser_new(void)
Definition: parse.c:17497
static void void_stmts_gen(struct parser_params *, NODE *)
Definition: parse.c:15607
#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:17567
#define NEW_CVASGN(v, val)
Definition: node.h:403
static int yylex(void *, void *)
Definition: parse.c:14739
#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:17308
#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:16519
ID rb_intern2(const char *name, long len)
Definition: parse.c:17044
const char * parser_lex_pbeg
Definition: ripper.c:316
static NODE * cond_gen(struct parser_params *, NODE *)
Definition: parse.c:15890
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:15256
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:14893
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:15243
#define lex_p
Definition: parse.c:392
static int comment_at_top(struct parser_params *parser)
Definition: parse.c:13173
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:16868
#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:15281
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:471
#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:17184
#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:15702
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:15302
VALUE rb_parser_end_seen_p(VALUE vparser)
Definition: parse.c:17511
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:17178
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:16269
#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:14819
#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:17556
static void new_bv_gen(struct parser_params *, ID)
Definition: parse.c:15288
#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:15796
#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:13427
#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:17273
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:14934
#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:15046
#define YYMAXDEPTH
Definition: parse.c:4667
static int literal_concat0(struct parser_params *, VALUE, VALUE)
Definition: parse.c:14917
int rb_is_instance_id(ID id)
Definition: parse.c:17196
void rb_parser_free(struct parser_params *parser, void *ptr)
Definition: parse.c:17612
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:13432
#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:13198
#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:13186
#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:17169
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:14766
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:17566
#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:16241
#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:16686
#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:16009
#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:16667
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