Ruby  2.0.0p451(2014-02-24revision45167)
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 numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
93 
94 #define YYMALLOC(size) rb_parser_malloc(parser, (size))
95 #define YYREALLOC(ptr, size) rb_parser_realloc(parser, (ptr), (size))
96 #define YYCALLOC(nelem, size) rb_parser_calloc(parser, (nelem), (size))
97 #define YYFREE(ptr) rb_parser_free(parser, (ptr))
98 #define malloc YYMALLOC
99 #define realloc YYREALLOC
100 #define calloc YYCALLOC
101 #define free YYFREE
102 
103 #ifndef RIPPER
104 static ID register_symid(ID, const char *, long, rb_encoding *);
105 static ID register_symid_str(ID, VALUE);
106 #define REGISTER_SYMID(id, name) register_symid((id), (name), strlen(name), enc)
107 #include "id.c"
108 #endif
109 
110 #define is_notop_id(id) ((id)>tLAST_OP_ID)
111 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL)
112 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL)
113 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE)
114 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET)
115 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST)
116 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS)
117 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK)
118 #define id_type(id) (is_notop_id(id) ? (int)((id)&ID_SCOPE_MASK) : -1)
119 
120 #define is_asgn_or_id(id) ((is_notop_id(id)) && \
121  (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \
122  ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \
123  ((id)&ID_SCOPE_MASK) == ID_CLASS))
124 
126  EXPR_BEG_bit, /* ignore newline, +/- is a sign. */
127  EXPR_END_bit, /* newline significant, +/- is an operator. */
128  EXPR_ENDARG_bit, /* ditto, and unbound braces. */
129  EXPR_ENDFN_bit, /* ditto, and unbound braces. */
130  EXPR_ARG_bit, /* newline significant, +/- is an operator. */
131  EXPR_CMDARG_bit, /* newline significant, +/- is an operator. */
132  EXPR_MID_bit, /* newline significant, +/- is an operator. */
133  EXPR_FNAME_bit, /* ignore newline, no reserved words. */
134  EXPR_DOT_bit, /* right after `.' or `::', no reserved words. */
135  EXPR_CLASS_bit, /* immediate after `class', no here document. */
136  EXPR_VALUE_bit, /* alike EXPR_BEG but label is disallowed. */
138 };
139 /* examine combinations */
141 #define DEF_EXPR(n) EXPR_##n = (1 << EXPR_##n##_bit)
143  DEF_EXPR(END),
144  DEF_EXPR(ENDARG),
145  DEF_EXPR(ENDFN),
146  DEF_EXPR(ARG),
147  DEF_EXPR(CMDARG),
148  DEF_EXPR(MID),
149  DEF_EXPR(FNAME),
150  DEF_EXPR(DOT),
151  DEF_EXPR(CLASS),
152  DEF_EXPR(VALUE),
153  EXPR_BEG_ANY = (EXPR_BEG | EXPR_VALUE | EXPR_MID | EXPR_CLASS),
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_defined;
308  char *parser_tokenbuf;
309  int parser_tokidx;
310  int parser_toksiz;
311  int parser_tokline;
315  const char *parser_lex_pbeg;
316  const char *parser_lex_p;
317  const char *parser_lex_pend;
318  int parser_heredoc_end;
321  long parser_lex_gets_ptr;
323  struct local_vars *parser_lvtbl;
325  int line_count;
326  int has_shebang;
327  char *parser_ruby_sourcefile; /* current source file */
328  int parser_ruby_sourceline; /* current line no. */
329  rb_encoding *enc;
330 
331  int parser_yydebug;
332 
333 #ifndef RIPPER
334  /* Ruby core only */
338  VALUE coverage;
339  int nerr;
340 
343 #else
344  /* Ripper only */
345  VALUE parser_ruby_sourcefile_string;
346  const char *tokp;
347  VALUE delayed;
348  int delayed_line;
349  int delayed_col;
350 
351  VALUE value;
352  VALUE result;
353  VALUE parsing_thread;
354  int toplevel_p;
355 #endif
356 };
357 
358 #define STR_NEW(p,n) rb_enc_str_new((p),(n),current_enc)
359 #define STR_NEW0() rb_enc_str_new(0,0,current_enc)
360 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),current_enc)
361 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),current_enc)
362 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
363 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), current_enc)
364 
365 static int parser_yyerror(struct parser_params*, const char*);
366 #define yyerror(msg) parser_yyerror(parser, (msg))
367 
368 #define lex_strterm (parser->parser_lex_strterm)
369 #define lex_state (parser->parser_lex_state)
370 #define cond_stack (parser->parser_cond_stack)
371 #define cmdarg_stack (parser->parser_cmdarg_stack)
372 #define class_nest (parser->parser_class_nest)
373 #define paren_nest (parser->parser_paren_nest)
374 #define lpar_beg (parser->parser_lpar_beg)
375 #define brace_nest (parser->parser_brace_nest)
376 #define in_single (parser->parser_in_single)
377 #define in_def (parser->parser_in_def)
378 #define compile_for_eval (parser->parser_compile_for_eval)
379 #define cur_mid (parser->parser_cur_mid)
380 #define in_defined (parser->parser_in_defined)
381 #define tokenbuf (parser->parser_tokenbuf)
382 #define tokidx (parser->parser_tokidx)
383 #define toksiz (parser->parser_toksiz)
384 #define tokline (parser->parser_tokline)
385 #define lex_input (parser->parser_lex_input)
386 #define lex_lastline (parser->parser_lex_lastline)
387 #define lex_nextline (parser->parser_lex_nextline)
388 #define lex_pbeg (parser->parser_lex_pbeg)
389 #define lex_p (parser->parser_lex_p)
390 #define lex_pend (parser->parser_lex_pend)
391 #define heredoc_end (parser->parser_heredoc_end)
392 #define command_start (parser->parser_command_start)
393 #define deferred_nodes (parser->parser_deferred_nodes)
394 #define lex_gets_ptr (parser->parser_lex_gets_ptr)
395 #define lex_gets (parser->parser_lex_gets)
396 #define lvtbl (parser->parser_lvtbl)
397 #define ruby__end__seen (parser->parser_ruby__end__seen)
398 #define ruby_sourceline (parser->parser_ruby_sourceline)
399 #define ruby_sourcefile (parser->parser_ruby_sourcefile)
400 #define current_enc (parser->enc)
401 #define yydebug (parser->parser_yydebug)
402 #ifdef RIPPER
403 #else
404 #define ruby_eval_tree (parser->parser_eval_tree)
405 #define ruby_eval_tree_begin (parser->parser_eval_tree_begin)
406 #define ruby_debug_lines (parser->debug_lines)
407 #define ruby_coverage (parser->coverage)
408 #endif
409 
410 #if YYPURE
411 static int yylex(void*, void*);
412 #else
413 static int yylex(void*);
414 #endif
415 
416 #ifndef RIPPER
417 #define yyparse ruby_yyparse
418 
419 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
420 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, (type), (a1), (a2), (a3))
421 
422 static NODE *cond_gen(struct parser_params*,NODE*);
423 #define cond(node) cond_gen(parser, (node))
424 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
425 #define logop(type,node1,node2) logop_gen(parser, (type), (node1), (node2))
426 
427 static NODE *newline_node(NODE*);
428 static void fixpos(NODE*,NODE*);
429 
430 static int value_expr_gen(struct parser_params*,NODE*);
431 static void void_expr_gen(struct parser_params*,NODE*);
432 static NODE *remove_begin(NODE*);
433 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
434 #define void_expr0(node) void_expr_gen(parser, (node))
435 #define void_expr(node) void_expr0((node) = remove_begin(node))
436 static void void_stmts_gen(struct parser_params*,NODE*);
437 #define void_stmts(node) void_stmts_gen(parser, (node))
438 static void reduce_nodes_gen(struct parser_params*,NODE**);
439 #define reduce_nodes(n) reduce_nodes_gen(parser,(n))
440 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
441 #define block_dup_check(n1,n2) block_dup_check_gen(parser,(n1),(n2))
442 
443 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
444 #define block_append(h,t) block_append_gen(parser,(h),(t))
445 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
446 #define list_append(l,i) list_append_gen(parser,(l),(i))
447 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
448 #define list_concat(h,t) list_concat_gen(parser,(h),(t))
449 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
450 #define arg_append(h,t) arg_append_gen(parser,(h),(t))
451 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
452 #define arg_concat(h,t) arg_concat_gen(parser,(h),(t))
453 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
454 #define literal_concat(h,t) literal_concat_gen(parser,(h),(t))
455 static int literal_concat0(struct parser_params *, VALUE, VALUE);
456 static NODE *new_evstr_gen(struct parser_params*,NODE*);
457 #define new_evstr(n) new_evstr_gen(parser,(n))
458 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
459 #define evstr2dstr(n) evstr2dstr_gen(parser,(n))
460 static NODE *splat_array(NODE*);
461 
462 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
463 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, (recv),(id),(arg1))
464 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
465 #define call_uni_op(recv,id) call_uni_op_gen(parser, (recv),(id))
466 
467 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,NODE*);
468 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
469 static NODE *new_args_tail_gen(struct parser_params*,NODE*,ID,ID);
470 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
471 
472 static NODE *negate_lit(NODE*);
473 static NODE *ret_args_gen(struct parser_params*,NODE*);
474 #define ret_args(node) ret_args_gen(parser, (node))
475 static NODE *arg_blk_pass(NODE*,NODE*);
476 static NODE *new_yield_gen(struct parser_params*,NODE*);
477 #define new_yield(node) new_yield_gen(parser, (node))
478 static NODE *dsym_node_gen(struct parser_params*,NODE*);
479 #define dsym_node(node) dsym_node_gen(parser, (node))
480 
481 static NODE *gettable_gen(struct parser_params*,ID);
482 #define gettable(id) gettable_gen(parser,(id))
483 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
484 #define assignable(id,node) assignable_gen(parser, (id), (node))
485 
486 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
487 #define aryset(node1,node2) aryset_gen(parser, (node1), (node2))
488 static NODE *attrset_gen(struct parser_params*,NODE*,ID);
489 #define attrset(node,id) attrset_gen(parser, (node), (id))
490 
491 static void rb_backref_error_gen(struct parser_params*,NODE*);
492 #define rb_backref_error(n) rb_backref_error_gen(parser,(n))
493 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
494 #define node_assign(node1, node2) node_assign_gen(parser, (node1), (node2))
495 
496 static NODE *new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
497 static NODE *new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs);
498 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (attr), (op), (rhs))
499 static NODE *new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
500 #define new_const_op_assign(lhs, op, rhs) new_const_op_assign_gen(parser, (lhs), (op), (rhs))
501 
502 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
503 #define match_op(node1,node2) match_op_gen(parser, (node1), (node2))
504 
505 static ID *local_tbl_gen(struct parser_params*);
506 #define local_tbl() local_tbl_gen(parser)
507 
508 static void fixup_nodes(NODE **);
509 
510 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
511 #define reg_compile(str,options) reg_compile_gen(parser, (str), (options))
512 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
513 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, (str), (options))
514 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
515 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, (str), (options))
516 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
517 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,(regexp),(match))
518 
519 #define get_id(id) (id)
520 #define get_value(val) (val)
521 #else
522 #define value_expr(node) ((void)(node))
523 #define remove_begin(node) (node)
524 #define rb_dvar_defined(id) 0
525 #define rb_local_defined(id) 0
526 static ID ripper_get_id(VALUE);
527 #define get_id(id) ripper_get_id(id)
528 static VALUE ripper_get_value(VALUE);
529 #define get_value(val) ripper_get_value(val)
530 static VALUE assignable_gen(struct parser_params*,VALUE);
531 #define assignable(lhs,node) assignable_gen(parser, (lhs))
532 static int id_is_var_gen(struct parser_params *parser, ID id);
533 #define id_is_var(id) id_is_var_gen(parser, (id))
534 
535 #define node_assign(node1, node2) dispatch2(assign, (node1), (node2))
536 
537 static VALUE new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs);
538 static VALUE new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs);
539 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (type), (attr), (op), (rhs))
540 
541 #endif /* !RIPPER */
542 
543 #define new_op_assign(lhs, op, rhs) new_op_assign_gen(parser, (lhs), (op), (rhs))
544 
545 static ID formal_argument_gen(struct parser_params*, ID);
546 #define formal_argument(id) formal_argument_gen(parser, (id))
547 static ID shadowing_lvar_gen(struct parser_params*,ID);
548 #define shadowing_lvar(name) shadowing_lvar_gen(parser, (name))
549 static void new_bv_gen(struct parser_params*,ID);
550 #define new_bv(id) new_bv_gen(parser, (id))
551 
552 static void local_push_gen(struct parser_params*,int);
553 #define local_push(top) local_push_gen(parser,(top))
554 static void local_pop_gen(struct parser_params*);
555 #define local_pop() local_pop_gen(parser)
556 static int local_var_gen(struct parser_params*, ID);
557 #define local_var(id) local_var_gen(parser, (id))
558 static int arg_var_gen(struct parser_params*, ID);
559 #define arg_var(id) arg_var_gen(parser, (id))
560 static int local_id_gen(struct parser_params*, ID);
561 #define local_id(id) local_id_gen(parser, (id))
562 static ID internal_id_gen(struct parser_params*);
563 #define internal_id() internal_id_gen(parser)
564 
565 static const struct vtable *dyna_push_gen(struct parser_params *);
566 #define dyna_push() dyna_push_gen(parser)
567 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
568 #define dyna_pop(node) dyna_pop_gen(parser, (node))
569 static int dyna_in_block_gen(struct parser_params*);
570 #define dyna_in_block() dyna_in_block_gen(parser)
571 #define dyna_var(id) local_var(id)
572 static int dvar_defined_gen(struct parser_params*,ID,int);
573 #define dvar_defined(id) dvar_defined_gen(parser, (id), 0)
574 #define dvar_defined_get(id) dvar_defined_gen(parser, (id), 1)
575 static int dvar_curr_gen(struct parser_params*,ID);
576 #define dvar_curr(id) dvar_curr_gen(parser, (id))
577 
578 static int lvar_defined_gen(struct parser_params*, ID);
579 #define lvar_defined(id) lvar_defined_gen(parser, (id))
580 
581 #define RE_OPTION_ONCE (1<<16)
582 #define RE_OPTION_ENCODING_SHIFT 8
583 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
584 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
585 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
586 #define RE_OPTION_MASK 0xff
587 #define RE_OPTION_ARG_ENCODING_NONE 32
588 
589 #define NODE_STRTERM NODE_ZARRAY /* nothing to gc */
590 #define NODE_HEREDOC NODE_ARRAY /* 1, 3 to gc */
591 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
592 #define nd_func u1.id
593 #if SIZEOF_SHORT == 2
594 #define nd_term(node) ((signed short)(node)->u2.id)
595 #else
596 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
597 #endif
598 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
599 #define nd_nest u3.cnt
600 
601 /****** Ripper *******/
602 
603 #ifdef RIPPER
604 #define RIPPER_VERSION "0.1.0"
605 
606 #include "eventids1.c"
607 #include "eventids2.c"
608 
609 static VALUE ripper_dispatch0(struct parser_params*,ID);
610 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
611 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
612 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
613 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
614 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
615 static VALUE ripper_dispatch7(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE);
616 
617 #define dispatch0(n) ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
618 #define dispatch1(n,a) ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a))
619 #define dispatch2(n,a,b) ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), (a), (b))
620 #define dispatch3(n,a,b,c) ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c))
621 #define dispatch4(n,a,b,c,d) ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d))
622 #define dispatch5(n,a,b,c,d,e) ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e))
623 #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))
624 
625 #define yyparse ripper_yyparse
626 
627 #define ripper_intern(s) ID2SYM(rb_intern(s))
628 static VALUE ripper_id2sym(ID);
629 #ifdef __GNUC__
630 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
631  ID2SYM(id) : ripper_id2sym(id))
632 #endif
633 
634 #define arg_new() dispatch0(args_new)
635 #define arg_add(l,a) dispatch2(args_add, (l), (a))
636 #define arg_add_star(l,a) dispatch2(args_add_star, (l), (a))
637 #define arg_add_block(l,b) dispatch2(args_add_block, (l), (b))
638 #define arg_add_optblock(l,b) ((b)==Qundef? (l) : dispatch2(args_add_block, (l), (b)))
639 #define bare_assoc(v) dispatch1(bare_assoc_hash, (v))
640 #define arg_add_assocs(l,b) arg_add((l), bare_assoc(b))
641 
642 #define args2mrhs(a) dispatch1(mrhs_new_from_args, (a))
643 #define mrhs_new() dispatch0(mrhs_new)
644 #define mrhs_add(l,a) dispatch2(mrhs_add, (l), (a))
645 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, (l), (a))
646 
647 #define mlhs_new() dispatch0(mlhs_new)
648 #define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a))
649 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a))
650 
651 #define params_new(pars, opts, rest, pars2, kws, kwrest, blk) \
652  dispatch7(params, (pars), (opts), (rest), (pars2), (kws), (kwrest), (blk))
653 
654 #define blockvar_new(p,v) dispatch2(block_var, (p), (v))
655 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a))
656 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, (l), (a))
657 
658 #define method_optarg(m,a) ((a)==Qundef ? (m) : dispatch2(method_add_arg,(m),(a)))
659 #define method_arg(m,a) dispatch2(method_add_arg,(m),(a))
660 #define method_add_block(m,b) dispatch2(method_add_block, (m), (b))
661 
662 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
663 
664 static inline VALUE
665 new_args_gen(struct parser_params *parser, VALUE f, VALUE o, VALUE r, VALUE p, VALUE tail)
666 {
667  NODE *t = (NODE *)tail;
668  VALUE k = t->u1.value, kr = t->u2.value, b = t->u3.value;
669  return params_new(f, o, r, p, k, kr, escape_Qundef(b));
670 }
671 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
672 
673 static inline VALUE
674 new_args_tail_gen(struct parser_params *parser, VALUE k, VALUE kr, VALUE b)
675 {
676  return (VALUE)rb_node_newnode(NODE_MEMO, k, kr, b);
677 }
678 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
679 
680 #define FIXME 0
681 
682 #endif /* RIPPER */
683 
684 #ifndef RIPPER
685 # define Qnone 0
686 # define ifndef_ripper(x) (x)
687 #else
688 # define Qnone Qnil
689 # define ifndef_ripper(x)
690 #endif
691 
692 #ifndef RIPPER
693 # define rb_warn0(fmt) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt))
694 # define rb_warnI(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
695 # define rb_warnS(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
696 # define rb_warn4S(file,line,fmt,a) rb_compile_warn((file), (line), (fmt), (a))
697 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt))
698 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt), (a))
699 #else
700 # define rb_warn0(fmt) ripper_warn0(parser, (fmt))
701 # define rb_warnI(fmt,a) ripper_warnI(parser, (fmt), (a))
702 # define rb_warnS(fmt,a) ripper_warnS(parser, (fmt), (a))
703 # define rb_warn4S(file,line,fmt,a) ripper_warnS(parser, (fmt), (a))
704 # define rb_warning0(fmt) ripper_warning0(parser, (fmt))
705 # define rb_warningS(fmt,a) ripper_warningS(parser, (fmt), (a))
706 static void ripper_warn0(struct parser_params*, const char*);
707 static void ripper_warnI(struct parser_params*, const char*, int);
708 static void ripper_warnS(struct parser_params*, const char*, const char*);
709 static void ripper_warning0(struct parser_params*, const char*);
710 static void ripper_warningS(struct parser_params*, const char*, const char*);
711 #endif
712 
713 #ifdef RIPPER
714 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
715 # define rb_compile_error ripper_compile_error
716 # define compile_error ripper_compile_error
717 # define PARSER_ARG parser,
718 #else
719 # define rb_compile_error rb_compile_error_with_enc
720 # define compile_error parser->nerr++,rb_compile_error_with_enc
721 # define PARSER_ARG ruby_sourcefile, ruby_sourceline, current_enc,
722 #endif
723 
724 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150,
725  for instance). This is too low for Ruby to parse some files, such as
726  date/format.rb, therefore bump the value up to at least Bison's default. */
727 #ifdef OLD_YACC
728 #ifndef YYMAXDEPTH
729 #define YYMAXDEPTH 10000
730 #endif
731 #endif
732 
733 #ifndef RIPPER
734 static void token_info_push(struct parser_params*, const char *token);
735 static void token_info_pop(struct parser_params*, const char *token);
736 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, (token)) : (void)0)
737 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, (token)) : (void)0)
738 #else
739 #define token_info_push(token) /* nothing */
740 #define token_info_pop(token) /* nothing */
741 #endif
742 
743 
744 /* Line 268 of yacc.c */
745 #line 746 "parse.c"
746 
747 /* Enabling traces. */
748 #ifndef YYDEBUG
749 # define YYDEBUG 0
750 #endif
751 
752 /* Enabling verbose error messages. */
753 #ifdef YYERROR_VERBOSE
754 # undef YYERROR_VERBOSE
755 # define YYERROR_VERBOSE 1
756 #else
757 # define YYERROR_VERBOSE 0
758 #endif
759 
760 /* Enabling the token table. */
761 #ifndef YYTOKEN_TABLE
762 # define YYTOKEN_TABLE 0
763 #endif
764 
765 
766 /* Tokens. */
767 #ifndef YYTOKENTYPE
768 # define YYTOKENTYPE
769  /* Put the tokens into the symbol table, so that GDB and other debuggers
770  know about them. */
771  enum yytokentype {
772  END_OF_INPUT = 0,
773  keyword_class = 258,
774  keyword_module = 259,
775  keyword_def = 260,
776  keyword_undef = 261,
777  keyword_begin = 262,
778  keyword_rescue = 263,
779  keyword_ensure = 264,
780  keyword_end = 265,
781  keyword_if = 266,
782  keyword_unless = 267,
783  keyword_then = 268,
784  keyword_elsif = 269,
785  keyword_else = 270,
786  keyword_case = 271,
787  keyword_when = 272,
788  keyword_while = 273,
789  keyword_until = 274,
790  keyword_for = 275,
791  keyword_break = 276,
792  keyword_next = 277,
793  keyword_redo = 278,
794  keyword_retry = 279,
795  keyword_in = 280,
796  keyword_do = 281,
797  keyword_do_cond = 282,
798  keyword_do_block = 283,
799  keyword_do_LAMBDA = 284,
800  keyword_return = 285,
801  keyword_yield = 286,
802  keyword_super = 287,
803  keyword_self = 288,
804  keyword_nil = 289,
805  keyword_true = 290,
806  keyword_false = 291,
807  keyword_and = 292,
808  keyword_or = 293,
809  keyword_not = 294,
810  modifier_if = 295,
811  modifier_unless = 296,
812  modifier_while = 297,
813  modifier_until = 298,
814  modifier_rescue = 299,
815  keyword_alias = 300,
816  keyword_defined = 301,
817  keyword_BEGIN = 302,
818  keyword_END = 303,
819  keyword__LINE__ = 304,
820  keyword__FILE__ = 305,
821  keyword__ENCODING__ = 306,
822  tIDENTIFIER = 307,
823  tFID = 308,
824  tGVAR = 309,
825  tIVAR = 310,
826  tCONSTANT = 311,
827  tCVAR = 312,
828  tLABEL = 313,
829  tINTEGER = 314,
830  tFLOAT = 315,
831  tSTRING_CONTENT = 316,
832  tCHAR = 317,
833  tNTH_REF = 318,
834  tBACK_REF = 319,
835  tREGEXP_END = 320,
836  tUPLUS = 130,
837  tUMINUS = 131,
838  tPOW = 132,
839  tCMP = 134,
840  tEQ = 139,
841  tEQQ = 140,
842  tNEQ = 141,
843  tGEQ = 138,
844  tLEQ = 137,
845  tANDOP = 321,
846  tOROP = 322,
847  tMATCH = 142,
848  tNMATCH = 143,
849  tDOT2 = 128,
850  tDOT3 = 129,
851  tAREF = 144,
852  tASET = 145,
853  tLSHFT = 135,
854  tRSHFT = 136,
855  tCOLON2 = 323,
856  tCOLON3 = 324,
857  tOP_ASGN = 325,
858  tASSOC = 326,
859  tLPAREN = 327,
860  tLPAREN_ARG = 328,
861  tRPAREN = 329,
862  tLBRACK = 330,
863  tLBRACE = 331,
864  tLBRACE_ARG = 332,
865  tSTAR = 333,
866  tDSTAR = 334,
867  tAMPER = 335,
868  tLAMBDA = 336,
869  tSYMBEG = 337,
870  tSTRING_BEG = 338,
871  tXSTRING_BEG = 339,
872  tREGEXP_BEG = 340,
873  tWORDS_BEG = 341,
874  tQWORDS_BEG = 342,
875  tSYMBOLS_BEG = 343,
876  tQSYMBOLS_BEG = 344,
877  tSTRING_DBEG = 345,
878  tSTRING_DEND = 346,
879  tSTRING_DVAR = 347,
880  tSTRING_END = 348,
881  tLAMBEG = 349,
882  tLOWEST = 350,
883  tUMINUS_NUM = 351,
884  tLAST_TOKEN = 352
885  };
886 #endif
887 
888 
889 
890 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
891 typedef union YYSTYPE
892 {
893 
894 /* Line 293 of yacc.c */
895 #line 690 "parse.y"
896 
897  VALUE val;
898  NODE *node;
899  ID id;
900  int num;
901  const struct vtable *vars;
902 
903 
904 
905 /* Line 293 of yacc.c */
906 #line 907 "parse.c"
907 } YYSTYPE;
908 # define YYSTYPE_IS_TRIVIAL 1
909 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
910 # define YYSTYPE_IS_DECLARED 1
911 #endif
912 
913 
914 /* Copy the second part of user declarations. */
915 
916 
917 /* Line 343 of yacc.c */
918 #line 919 "parse.c"
919 
920 #ifdef short
921 # undef short
922 #endif
923 
924 #ifdef YYTYPE_UINT8
925 typedef YYTYPE_UINT8 yytype_uint8;
926 #else
927 typedef unsigned char yytype_uint8;
928 #endif
929 
930 #ifdef YYTYPE_INT8
931 typedef YYTYPE_INT8 yytype_int8;
932 #elif (defined __STDC__ || defined __C99__FUNC__ \
933  || defined __cplusplus || defined _MSC_VER)
934 typedef signed char yytype_int8;
935 #else
936 typedef short int yytype_int8;
937 #endif
938 
939 #ifdef YYTYPE_UINT16
940 typedef YYTYPE_UINT16 yytype_uint16;
941 #else
942 typedef unsigned short int yytype_uint16;
943 #endif
944 
945 #ifdef YYTYPE_INT16
946 typedef YYTYPE_INT16 yytype_int16;
947 #else
948 typedef short int yytype_int16;
949 #endif
950 
951 #ifndef YYSIZE_T
952 # ifdef __SIZE_TYPE__
953 # define YYSIZE_T __SIZE_TYPE__
954 # elif defined size_t
955 # define YYSIZE_T size_t
956 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
957  || defined __cplusplus || defined _MSC_VER)
958 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
959 # define YYSIZE_T size_t
960 # else
961 # define YYSIZE_T unsigned int
962 # endif
963 #endif
964 
965 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
966 
967 #ifndef YY_
968 # if defined YYENABLE_NLS && YYENABLE_NLS
969 # if ENABLE_NLS
970 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
971 # define YY_(msgid) dgettext ("bison-runtime", msgid)
972 # endif
973 # endif
974 # ifndef YY_
975 # define YY_(msgid) msgid
976 # endif
977 #endif
978 
979 /* Suppress unused-variable warnings by "using" E. */
980 #if ! defined lint || defined __GNUC__
981 # define YYUSE(e) ((void) (e))
982 #else
983 # define YYUSE(e) /* empty */
984 #endif
985 
986 /* Identity function, used to suppress warnings about constant conditions. */
987 #ifndef lint
988 # define YYID(n) (n)
989 #else
990 #if (defined __STDC__ || defined __C99__FUNC__ \
991  || defined __cplusplus || defined _MSC_VER)
992 static int
993 YYID (int yyi)
994 #else
995 static int
996 YYID (yyi)
997  int yyi;
998 #endif
999 {
1000  return yyi;
1001 }
1002 #endif
1003 
1004 #if ! defined yyoverflow || YYERROR_VERBOSE
1005 
1006 /* The parser invokes alloca or malloc; define the necessary symbols. */
1007 
1008 # ifdef YYSTACK_USE_ALLOCA
1009 # if YYSTACK_USE_ALLOCA
1010 # ifdef __GNUC__
1011 # define YYSTACK_ALLOC __builtin_alloca
1012 # elif defined __BUILTIN_VA_ARG_INCR
1013 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
1014 # elif defined _AIX
1015 # define YYSTACK_ALLOC __alloca
1016 # elif defined _MSC_VER
1017 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
1018 # define alloca _alloca
1019 # else
1020 # define YYSTACK_ALLOC alloca
1021 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
1022  || defined __cplusplus || defined _MSC_VER)
1023 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1024 # ifndef EXIT_SUCCESS
1025 # define EXIT_SUCCESS 0
1026 # endif
1027 # endif
1028 # endif
1029 # endif
1030 # endif
1031 
1032 # ifdef YYSTACK_ALLOC
1033  /* Pacify GCC's `empty if-body' warning. */
1034 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
1035 # ifndef YYSTACK_ALLOC_MAXIMUM
1036  /* The OS might guarantee only one guard page at the bottom of the stack,
1037  and a page size can be as small as 4096 bytes. So we cannot safely
1038  invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1039  to allow for a few compiler-allocated temporary stack slots. */
1040 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
1041 # endif
1042 # else
1043 # define YYSTACK_ALLOC YYMALLOC
1044 # define YYSTACK_FREE YYFREE
1045 # ifndef YYSTACK_ALLOC_MAXIMUM
1046 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
1047 # endif
1048 # if (defined __cplusplus && ! defined EXIT_SUCCESS \
1049  && ! ((defined YYMALLOC || defined malloc) \
1050  && (defined YYFREE || defined free)))
1051 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1052 # ifndef EXIT_SUCCESS
1053 # define EXIT_SUCCESS 0
1054 # endif
1055 # endif
1056 # ifndef YYMALLOC
1057 # define YYMALLOC malloc
1058 # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
1059  || defined __cplusplus || defined _MSC_VER)
1060 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1061 # endif
1062 # endif
1063 # ifndef YYFREE
1064 # define YYFREE free
1065 # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
1066  || defined __cplusplus || defined _MSC_VER)
1067 void free (void *); /* INFRINGES ON USER NAME SPACE */
1068 # endif
1069 # endif
1070 # endif
1071 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
1072 
1073 
1074 #if (! defined yyoverflow \
1075  && (! defined __cplusplus \
1076  || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
1077 
1078 /* A type that is properly aligned for any stack member. */
1079 union yyalloc
1080 {
1081  yytype_int16 yyss_alloc;
1083 };
1084 
1085 /* The size of the maximum gap between one aligned stack and the next. */
1086 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1087 
1088 /* The size of an array large to enough to hold all stacks, each with
1089  N elements. */
1090 # define YYSTACK_BYTES(N) \
1091  ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
1092  + YYSTACK_GAP_MAXIMUM)
1093 
1094 # define YYCOPY_NEEDED 1
1095 
1096 /* Relocate STACK from its old location to the new one. The
1097  local variables YYSIZE and YYSTACKSIZE give the old and new number of
1098  elements in the stack, and YYPTR gives the new location of the
1099  stack. Advance YYPTR to a properly aligned location for the next
1100  stack. */
1101 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
1102  do \
1103  { \
1104  YYSIZE_T yynewbytes; \
1105  YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
1106  Stack = &yyptr->Stack_alloc; \
1107  yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1108  yyptr += yynewbytes / sizeof (*yyptr); \
1109  } \
1110  while (YYID (0))
1111 
1112 #endif
1113 
1114 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
1115 /* Copy COUNT objects from FROM to TO. The source and destination do
1116  not overlap. */
1117 # ifndef YYCOPY
1118 # if defined __GNUC__ && 1 < __GNUC__
1119 # define YYCOPY(To, From, Count) \
1120  __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1121 # else
1122 # define YYCOPY(To, From, Count) \
1123  do \
1124  { \
1125  YYSIZE_T yyi; \
1126  for (yyi = 0; yyi < (Count); yyi++) \
1127  (To)[yyi] = (From)[yyi]; \
1128  } \
1129  while (YYID (0))
1130 # endif
1131 # endif
1132 #endif /* !YYCOPY_NEEDED */
1133 
1134 /* YYFINAL -- State number of the termination state. */
1135 #define YYFINAL 3
1136 /* YYLAST -- Last index in YYTABLE. */
1137 #define YYLAST 11084
1138 
1139 /* YYNTOKENS -- Number of terminals. */
1140 #define YYNTOKENS 142
1141 /* YYNNTS -- Number of nonterminals. */
1142 #define YYNNTS 198
1143 /* YYNRULES -- Number of rules. */
1144 #define YYNRULES 619
1145 /* YYNRULES -- Number of states. */
1146 #define YYNSTATES 1056
1147 
1148 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1149 #define YYUNDEFTOK 2
1150 #define YYMAXUTOK 352
1151 
1152 #define YYTRANSLATE(YYX) \
1153  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1154 
1155 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
1156 static const yytype_uint8 yytranslate[] =
1157 {
1158  0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1159  141, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1160  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1161  2, 2, 140, 127, 2, 2, 2, 125, 120, 2,
1162  136, 137, 123, 121, 134, 122, 133, 124, 2, 2,
1163  2, 2, 2, 2, 2, 2, 2, 2, 115, 139,
1164  117, 113, 116, 114, 2, 2, 2, 2, 2, 2,
1165  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1166  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1167  2, 132, 2, 138, 119, 2, 135, 2, 2, 2,
1168  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1169  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1170  2, 2, 2, 130, 118, 131, 128, 2, 79, 80,
1171  66, 67, 68, 2, 69, 83, 84, 74, 73, 70,
1172  71, 72, 77, 78, 81, 82, 2, 2, 2, 2,
1173  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1174  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1175  2, 2, 2, 2, 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, 2, 2, 2, 2, 2, 2, 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, 2, 2, 2, 2, 2, 2, 2,
1182  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1183  2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1184  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1185  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1186  25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1187  35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1188  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1189  55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1190  65, 75, 76, 85, 86, 87, 88, 89, 90, 91,
1191  92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
1192  102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
1193  112, 126, 129
1194 };
1195 
1196 #if YYDEBUG
1197 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1198  YYRHS. */
1199 static const yytype_uint16 yyprhs[] =
1200 {
1201  0, 0, 3, 4, 7, 10, 12, 14, 18, 21,
1202  23, 24, 30, 35, 38, 40, 42, 46, 49, 51,
1203  52, 58, 59, 64, 68, 72, 76, 79, 83, 87,
1204  91, 95, 99, 104, 106, 110, 114, 121, 127, 133,
1205  139, 145, 149, 153, 157, 161, 163, 167, 171, 173,
1206  177, 181, 185, 188, 190, 192, 194, 196, 198, 203,
1207  204, 210, 212, 215, 219, 224, 230, 235, 241, 244,
1208  247, 250, 253, 256, 258, 262, 264, 268, 270, 273,
1209  277, 283, 286, 291, 294, 299, 301, 305, 307, 311,
1210  314, 318, 320, 324, 326, 328, 333, 337, 341, 345,
1211  349, 352, 354, 356, 358, 363, 367, 371, 375, 379,
1212  382, 384, 386, 388, 391, 393, 397, 399, 401, 403,
1213  405, 407, 409, 411, 413, 415, 417, 418, 423, 425,
1214  427, 429, 431, 433, 435, 437, 439, 441, 443, 445,
1215  447, 449, 451, 453, 455, 457, 459, 461, 463, 465,
1216  467, 469, 471, 473, 475, 477, 479, 481, 483, 485,
1217  487, 489, 491, 493, 495, 497, 499, 501, 503, 505,
1218  507, 509, 511, 513, 515, 517, 519, 521, 523, 525,
1219  527, 529, 531, 533, 535, 537, 539, 541, 543, 545,
1220  547, 549, 551, 553, 555, 557, 559, 561, 563, 565,
1221  569, 575, 579, 585, 592, 598, 604, 610, 616, 621,
1222  625, 629, 633, 637, 641, 645, 649, 653, 657, 662,
1223  667, 670, 673, 677, 681, 685, 689, 693, 697, 701,
1224  705, 709, 713, 717, 721, 725, 728, 731, 735, 739,
1225  743, 747, 748, 753, 760, 762, 764, 766, 769, 774,
1226  777, 781, 783, 785, 787, 789, 792, 797, 800, 802,
1227  805, 808, 813, 815, 816, 819, 822, 825, 827, 829,
1228  832, 836, 841, 845, 850, 853, 855, 857, 859, 861,
1229  863, 865, 867, 869, 871, 873, 875, 876, 881, 882,
1230  886, 887, 892, 896, 900, 903, 907, 911, 913, 918,
1231  922, 924, 925, 932, 937, 941, 944, 946, 949, 952,
1232  959, 966, 967, 968, 976, 977, 978, 986, 992, 997,
1233  998, 999, 1009, 1010, 1017, 1018, 1019, 1028, 1029, 1035,
1234  1036, 1043, 1044, 1045, 1055, 1057, 1059, 1061, 1063, 1065,
1235  1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085,
1236  1087, 1089, 1091, 1094, 1096, 1098, 1100, 1106, 1108, 1111,
1237  1113, 1115, 1117, 1121, 1123, 1127, 1129, 1134, 1141, 1145,
1238  1151, 1154, 1159, 1161, 1165, 1170, 1173, 1176, 1178, 1181,
1239  1182, 1189, 1198, 1203, 1210, 1215, 1218, 1225, 1228, 1233,
1240  1240, 1243, 1248, 1251, 1256, 1258, 1260, 1262, 1266, 1268,
1241  1273, 1275, 1280, 1282, 1286, 1288, 1290, 1291, 1292, 1293,
1242  1299, 1304, 1306, 1310, 1314, 1315, 1321, 1324, 1329, 1335,
1243  1341, 1344, 1345, 1351, 1352, 1358, 1362, 1363, 1368, 1369,
1244  1374, 1377, 1379, 1384, 1385, 1391, 1392, 1398, 1404, 1406,
1245  1408, 1415, 1417, 1419, 1421, 1423, 1426, 1428, 1431, 1433,
1246  1435, 1437, 1439, 1441, 1443, 1445, 1448, 1452, 1456, 1460,
1247  1464, 1468, 1469, 1473, 1475, 1478, 1482, 1486, 1487, 1491,
1248  1495, 1499, 1503, 1507, 1508, 1512, 1513, 1517, 1518, 1521,
1249  1522, 1525, 1526, 1529, 1531, 1532, 1536, 1537, 1538, 1539,
1250  1546, 1548, 1550, 1552, 1554, 1557, 1559, 1561, 1563, 1565,
1251  1569, 1571, 1573, 1576, 1579, 1581, 1583, 1585, 1587, 1589,
1252  1591, 1593, 1595, 1597, 1599, 1601, 1603, 1605, 1607, 1609,
1253  1611, 1613, 1615, 1617, 1618, 1623, 1626, 1630, 1633, 1638,
1254  1641, 1644, 1646, 1649, 1650, 1657, 1666, 1671, 1678, 1683,
1255  1690, 1693, 1698, 1705, 1708, 1713, 1716, 1721, 1723, 1724,
1256  1726, 1728, 1730, 1732, 1734, 1736, 1738, 1742, 1744, 1748,
1257  1751, 1754, 1756, 1760, 1762, 1766, 1768, 1770, 1773, 1775,
1258  1779, 1783, 1785, 1789, 1791, 1795, 1797, 1799, 1802, 1804,
1259  1806, 1808, 1811, 1814, 1816, 1818, 1819, 1824, 1826, 1829,
1260  1831, 1835, 1839, 1842, 1845, 1847, 1849, 1851, 1853, 1855,
1261  1857, 1859, 1861, 1863, 1865, 1867, 1869, 1870, 1872, 1873,
1262  1875, 1878, 1881, 1882, 1884, 1886, 1888, 1890, 1892, 1895
1263 };
1264 
1265 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
1266 static const yytype_int16 yyrhs[] =
1267 {
1268  143, 0, -1, -1, 144, 145, -1, 146, 332, -1,
1269  339, -1, 147, -1, 146, 338, 147, -1, 1, 147,
1270  -1, 154, -1, -1, 47, 148, 130, 145, 131, -1,
1271  150, 261, 229, 264, -1, 151, 332, -1, 339, -1,
1272  152, -1, 151, 338, 152, -1, 1, 154, -1, 154,
1273  -1, -1, 47, 153, 130, 145, 131, -1, -1, 45,
1274  177, 155, 177, -1, 45, 54, 54, -1, 45, 54,
1275  64, -1, 45, 54, 63, -1, 6, 178, -1, 154,
1276  40, 158, -1, 154, 41, 158, -1, 154, 42, 158,
1277  -1, 154, 43, 158, -1, 154, 44, 154, -1, 48,
1278  130, 150, 131, -1, 156, -1, 165, 113, 159, -1,
1279  296, 87, 159, -1, 214, 132, 188, 335, 87, 159,
1280  -1, 214, 133, 52, 87, 159, -1, 214, 133, 56,
1281  87, 159, -1, 214, 85, 56, 87, 159, -1, 214,
1282  85, 52, 87, 159, -1, 297, 87, 159, -1, 172,
1283  113, 195, -1, 165, 113, 184, -1, 165, 113, 195,
1284  -1, 157, -1, 172, 113, 159, -1, 172, 113, 156,
1285  -1, 159, -1, 157, 37, 157, -1, 157, 38, 157,
1286  -1, 39, 333, 157, -1, 127, 159, -1, 182, -1,
1287  157, -1, 164, -1, 160, -1, 250, -1, 250, 331,
1288  329, 190, -1, -1, 94, 162, 237, 150, 131, -1,
1289  328, -1, 163, 190, -1, 163, 190, 161, -1, 214,
1290  133, 329, 190, -1, 214, 133, 329, 190, 161, -1,
1291  214, 85, 329, 190, -1, 214, 85, 329, 190, 161,
1292  -1, 32, 190, -1, 31, 190, -1, 30, 189, -1,
1293  21, 189, -1, 22, 189, -1, 167, -1, 89, 166,
1294  334, -1, 167, -1, 89, 166, 334, -1, 169, -1,
1295  169, 168, -1, 169, 95, 171, -1, 169, 95, 171,
1296  134, 170, -1, 169, 95, -1, 169, 95, 134, 170,
1297  -1, 95, 171, -1, 95, 171, 134, 170, -1, 95,
1298  -1, 95, 134, 170, -1, 171, -1, 89, 166, 334,
1299  -1, 168, 134, -1, 169, 168, 134, -1, 168, -1,
1300  170, 134, 168, -1, 293, -1, 294, -1, 214, 132,
1301  188, 335, -1, 214, 133, 52, -1, 214, 85, 52,
1302  -1, 214, 133, 56, -1, 214, 85, 56, -1, 86,
1303  56, -1, 297, -1, 293, -1, 294, -1, 214, 132,
1304  188, 335, -1, 214, 133, 52, -1, 214, 85, 52,
1305  -1, 214, 133, 56, -1, 214, 85, 56, -1, 86,
1306  56, -1, 297, -1, 52, -1, 56, -1, 86, 173,
1307  -1, 173, -1, 214, 85, 173, -1, 52, -1, 56,
1308  -1, 53, -1, 180, -1, 181, -1, 175, -1, 289,
1309  -1, 176, -1, 291, -1, 177, -1, -1, 178, 134,
1310  179, 177, -1, 118, -1, 119, -1, 120, -1, 69,
1311  -1, 70, -1, 71, -1, 77, -1, 78, -1, 116,
1312  -1, 73, -1, 117, -1, 74, -1, 72, -1, 83,
1313  -1, 84, -1, 121, -1, 122, -1, 123, -1, 95,
1314  -1, 124, -1, 125, -1, 68, -1, 96, -1, 127,
1315  -1, 128, -1, 66, -1, 67, -1, 81, -1, 82,
1316  -1, 135, -1, 49, -1, 50, -1, 51, -1, 47,
1317  -1, 48, -1, 45, -1, 37, -1, 7, -1, 21,
1318  -1, 16, -1, 3, -1, 5, -1, 46, -1, 26,
1319  -1, 15, -1, 14, -1, 10, -1, 9, -1, 36,
1320  -1, 20, -1, 25, -1, 4, -1, 22, -1, 34,
1321  -1, 39, -1, 38, -1, 23, -1, 8, -1, 24,
1322  -1, 30, -1, 33, -1, 32, -1, 13, -1, 35,
1323  -1, 6, -1, 17, -1, 31, -1, 11, -1, 12,
1324  -1, 18, -1, 19, -1, 172, 113, 182, -1, 172,
1325  113, 182, 44, 182, -1, 296, 87, 182, -1, 296,
1326  87, 182, 44, 182, -1, 214, 132, 188, 335, 87,
1327  182, -1, 214, 133, 52, 87, 182, -1, 214, 133,
1328  56, 87, 182, -1, 214, 85, 52, 87, 182, -1,
1329  214, 85, 56, 87, 182, -1, 86, 56, 87, 182,
1330  -1, 297, 87, 182, -1, 182, 79, 182, -1, 182,
1331  80, 182, -1, 182, 121, 182, -1, 182, 122, 182,
1332  -1, 182, 123, 182, -1, 182, 124, 182, -1, 182,
1333  125, 182, -1, 182, 68, 182, -1, 126, 59, 68,
1334  182, -1, 126, 60, 68, 182, -1, 66, 182, -1,
1335  67, 182, -1, 182, 118, 182, -1, 182, 119, 182,
1336  -1, 182, 120, 182, -1, 182, 69, 182, -1, 182,
1337  116, 182, -1, 182, 73, 182, -1, 182, 117, 182,
1338  -1, 182, 74, 182, -1, 182, 70, 182, -1, 182,
1339  71, 182, -1, 182, 72, 182, -1, 182, 77, 182,
1340  -1, 182, 78, 182, -1, 127, 182, -1, 128, 182,
1341  -1, 182, 83, 182, -1, 182, 84, 182, -1, 182,
1342  75, 182, -1, 182, 76, 182, -1, -1, 46, 333,
1343  183, 182, -1, 182, 114, 182, 333, 115, 182, -1,
1344  196, -1, 182, -1, 339, -1, 194, 336, -1, 194,
1345  134, 326, 336, -1, 326, 336, -1, 136, 188, 334,
1346  -1, 339, -1, 186, -1, 339, -1, 189, -1, 194,
1347  134, -1, 194, 134, 326, 134, -1, 326, 134, -1,
1348  164, -1, 194, 193, -1, 326, 193, -1, 194, 134,
1349  326, 193, -1, 192, -1, -1, 191, 189, -1, 97,
1350  184, -1, 134, 192, -1, 339, -1, 184, -1, 95,
1351  184, -1, 194, 134, 184, -1, 194, 134, 95, 184,
1352  -1, 194, 134, 184, -1, 194, 134, 95, 184, -1,
1353  95, 184, -1, 265, -1, 266, -1, 269, -1, 270,
1354  -1, 271, -1, 276, -1, 274, -1, 277, -1, 295,
1355  -1, 297, -1, 53, -1, -1, 215, 197, 149, 225,
1356  -1, -1, 90, 198, 334, -1, -1, 90, 157, 199,
1357  334, -1, 89, 150, 137, -1, 214, 85, 56, -1,
1358  86, 56, -1, 92, 185, 138, -1, 93, 325, 131,
1359  -1, 30, -1, 31, 136, 189, 334, -1, 31, 136,
1360  334, -1, 31, -1, -1, 46, 333, 136, 200, 157,
1361  334, -1, 39, 136, 157, 334, -1, 39, 136, 334,
1362  -1, 163, 256, -1, 251, -1, 251, 256, -1, 98,
1363  242, -1, 216, 158, 226, 150, 228, 225, -1, 217,
1364  158, 226, 150, 229, 225, -1, -1, -1, 218, 201,
1365  158, 227, 202, 150, 225, -1, -1, -1, 219, 203,
1366  158, 227, 204, 150, 225, -1, 220, 158, 332, 259,
1367  225, -1, 220, 332, 259, 225, -1, -1, -1, 221,
1368  230, 25, 205, 158, 227, 206, 150, 225, -1, -1,
1369  222, 174, 298, 207, 149, 225, -1, -1, -1, 222,
1370  83, 157, 208, 337, 209, 149, 225, -1, -1, 223,
1371  174, 210, 149, 225, -1, -1, 224, 175, 211, 300,
1372  149, 225, -1, -1, -1, 224, 323, 331, 212, 175,
1373  213, 300, 149, 225, -1, 21, -1, 22, -1, 23,
1374  -1, 24, -1, 196, -1, 7, -1, 11, -1, 12,
1375  -1, 18, -1, 19, -1, 16, -1, 20, -1, 3,
1376  -1, 4, -1, 5, -1, 10, -1, 337, -1, 13,
1377  -1, 337, 13, -1, 337, -1, 27, -1, 229, -1,
1378  14, 158, 226, 150, 228, -1, 339, -1, 15, 150,
1379  -1, 172, -1, 165, -1, 305, -1, 89, 233, 334,
1380  -1, 231, -1, 232, 134, 231, -1, 232, -1, 232,
1381  134, 95, 305, -1, 232, 134, 95, 305, 134, 232,
1382  -1, 232, 134, 95, -1, 232, 134, 95, 134, 232,
1383  -1, 95, 305, -1, 95, 305, 134, 232, -1, 95,
1384  -1, 95, 134, 232, -1, 310, 134, 313, 322, -1,
1385  310, 322, -1, 313, 322, -1, 321, -1, 134, 234,
1386  -1, -1, 307, 134, 316, 134, 319, 235, -1, 307,
1387  134, 316, 134, 319, 134, 307, 235, -1, 307, 134,
1388  316, 235, -1, 307, 134, 316, 134, 307, 235, -1,
1389  307, 134, 319, 235, -1, 307, 134, -1, 307, 134,
1390  319, 134, 307, 235, -1, 307, 235, -1, 316, 134,
1391  319, 235, -1, 316, 134, 319, 134, 307, 235, -1,
1392  316, 235, -1, 316, 134, 307, 235, -1, 319, 235,
1393  -1, 319, 134, 307, 235, -1, 234, -1, 339, -1,
1394  238, -1, 118, 239, 118, -1, 76, -1, 118, 236,
1395  239, 118, -1, 333, -1, 333, 139, 240, 333, -1,
1396  241, -1, 240, 134, 241, -1, 52, -1, 304, -1,
1397  -1, -1, -1, 243, 244, 246, 245, 247, -1, 136,
1398  303, 239, 137, -1, 303, -1, 111, 150, 131, -1,
1399  29, 150, 10, -1, -1, 28, 249, 237, 150, 10,
1400  -1, 164, 248, -1, 250, 331, 329, 187, -1, 250,
1401  331, 329, 187, 256, -1, 250, 331, 329, 190, 248,
1402  -1, 163, 186, -1, -1, 214, 133, 329, 252, 187,
1403  -1, -1, 214, 85, 329, 253, 186, -1, 214, 85,
1404  330, -1, -1, 214, 133, 254, 186, -1, -1, 214,
1405  85, 255, 186, -1, 32, 186, -1, 32, -1, 214,
1406  132, 188, 335, -1, -1, 130, 257, 237, 150, 131,
1407  -1, -1, 26, 258, 237, 150, 10, -1, 17, 194,
1408  226, 150, 260, -1, 229, -1, 259, -1, 8, 262,
1409  263, 226, 150, 261, -1, 339, -1, 184, -1, 195,
1410  -1, 339, -1, 88, 172, -1, 339, -1, 9, 150,
1411  -1, 339, -1, 292, -1, 289, -1, 291, -1, 267,
1412  -1, 62, -1, 268, -1, 267, 268, -1, 100, 280,
1413  110, -1, 101, 281, 110, -1, 102, 282, 65, -1,
1414  103, 140, 110, -1, 103, 272, 110, -1, -1, 272,
1415  273, 140, -1, 283, -1, 273, 283, -1, 105, 140,
1416  110, -1, 105, 275, 110, -1, -1, 275, 273, 140,
1417  -1, 104, 140, 110, -1, 104, 278, 110, -1, 106,
1418  140, 110, -1, 106, 279, 110, -1, -1, 278, 61,
1419  140, -1, -1, 279, 61, 140, -1, -1, 280, 283,
1420  -1, -1, 281, 283, -1, -1, 282, 283, -1, 61,
1421  -1, -1, 109, 284, 288, -1, -1, -1, -1, 107,
1422  285, 286, 287, 150, 108, -1, 54, -1, 55, -1,
1423  57, -1, 297, -1, 99, 290, -1, 175, -1, 55,
1424  -1, 54, -1, 57, -1, 99, 281, 110, -1, 59,
1425  -1, 60, -1, 126, 59, -1, 126, 60, -1, 52,
1426  -1, 55, -1, 54, -1, 56, -1, 57, -1, 34,
1427  -1, 33, -1, 35, -1, 36, -1, 50, -1, 49,
1428  -1, 51, -1, 293, -1, 294, -1, 293, -1, 294,
1429  -1, 63, -1, 64, -1, 337, -1, -1, 117, 299,
1430  158, 337, -1, 1, 337, -1, 136, 303, 334, -1,
1431  303, 337, -1, 311, 134, 313, 322, -1, 311, 322,
1432  -1, 313, 322, -1, 321, -1, 134, 301, -1, -1,
1433  307, 134, 317, 134, 319, 302, -1, 307, 134, 317,
1434  134, 319, 134, 307, 302, -1, 307, 134, 317, 302,
1435  -1, 307, 134, 317, 134, 307, 302, -1, 307, 134,
1436  319, 302, -1, 307, 134, 319, 134, 307, 302, -1,
1437  307, 302, -1, 317, 134, 319, 302, -1, 317, 134,
1438  319, 134, 307, 302, -1, 317, 302, -1, 317, 134,
1439  307, 302, -1, 319, 302, -1, 319, 134, 307, 302,
1440  -1, 301, -1, -1, 56, -1, 55, -1, 54, -1,
1441  57, -1, 304, -1, 52, -1, 305, -1, 89, 233,
1442  334, -1, 306, -1, 307, 134, 306, -1, 58, 184,
1443  -1, 58, 214, -1, 309, -1, 310, 134, 309, -1,
1444  308, -1, 311, 134, 308, -1, 68, -1, 96, -1,
1445  312, 52, -1, 312, -1, 52, 113, 184, -1, 52,
1446  113, 214, -1, 315, -1, 316, 134, 315, -1, 314,
1447  -1, 317, 134, 314, -1, 123, -1, 95, -1, 318,
1448  52, -1, 318, -1, 120, -1, 97, -1, 320, 52,
1449  -1, 134, 321, -1, 339, -1, 295, -1, -1, 136,
1450  324, 157, 334, -1, 339, -1, 326, 336, -1, 327,
1451  -1, 326, 134, 327, -1, 184, 88, 184, -1, 58,
1452  184, -1, 96, 184, -1, 52, -1, 56, -1, 53,
1453  -1, 52, -1, 56, -1, 53, -1, 180, -1, 52,
1454  -1, 53, -1, 180, -1, 133, -1, 85, -1, -1,
1455  338, -1, -1, 141, -1, 333, 137, -1, 333, 138,
1456  -1, -1, 141, -1, 134, -1, 139, -1, 141, -1,
1457  337, -1, 338, 139, -1, -1
1458 };
1459 
1460 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
1461 static const yytype_uint16 yyrline[] =
1462 {
1463  0, 854, 854, 854, 885, 896, 905, 913, 921, 927,
1464  929, 928, 949, 982, 993, 1002, 1010, 1018, 1024, 1029,
1465  1028, 1049, 1049, 1057, 1065, 1076, 1086, 1094, 1103, 1112,
1466  1125, 1138, 1147, 1159, 1160, 1170, 1175, 1196, 1201, 1206,
1467  1216, 1221, 1231, 1240, 1249, 1258, 1261, 1270, 1282, 1283,
1468  1291, 1299, 1307, 1315, 1318, 1330, 1331, 1334, 1335, 1347,
1469  1346, 1368, 1378, 1387, 1400, 1409, 1421, 1430, 1442, 1451,
1470  1460, 1468, 1476, 1486, 1487, 1497, 1498, 1508, 1516, 1524,
1471  1532, 1541, 1549, 1558, 1566, 1575, 1583, 1594, 1595, 1605,
1472  1613, 1623, 1631, 1641, 1645, 1649, 1657, 1665, 1673, 1681,
1473  1693, 1703, 1715, 1724, 1733, 1741, 1749, 1757, 1765, 1778,
1474  1791, 1802, 1810, 1813, 1821, 1829, 1839, 1840, 1841, 1842,
1475  1847, 1858, 1859, 1862, 1870, 1873, 1881, 1881, 1891, 1892,
1476  1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902,
1477  1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912,
1478  1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1923, 1923,
1479  1923, 1924, 1924, 1925, 1925, 1925, 1926, 1926, 1926, 1926,
1480  1927, 1927, 1927, 1927, 1928, 1928, 1928, 1929, 1929, 1929,
1481  1929, 1930, 1930, 1930, 1930, 1931, 1931, 1931, 1931, 1932,
1482  1932, 1932, 1932, 1933, 1933, 1933, 1933, 1934, 1934, 1937,
1483  1946, 1956, 1961, 1971, 1997, 2002, 2007, 2012, 2022, 2032,
1484  2043, 2057, 2071, 2079, 2087, 2095, 2103, 2111, 2119, 2128,
1485  2137, 2145, 2153, 2161, 2169, 2177, 2185, 2193, 2201, 2209,
1486  2217, 2225, 2233, 2241, 2252, 2260, 2268, 2276, 2284, 2292,
1487  2300, 2308, 2308, 2318, 2328, 2334, 2346, 2347, 2351, 2359,
1488  2369, 2379, 2380, 2383, 2384, 2385, 2389, 2397, 2407, 2416,
1489  2424, 2434, 2443, 2452, 2452, 2464, 2474, 2478, 2484, 2492,
1490  2500, 2514, 2530, 2544, 2559, 2569, 2570, 2571, 2572, 2573,
1491  2574, 2575, 2576, 2577, 2578, 2579, 2588, 2587, 2615, 2615,
1492  2623, 2623, 2631, 2639, 2647, 2655, 2668, 2676, 2684, 2692,
1493  2700, 2708, 2708, 2718, 2726, 2734, 2744, 2745, 2755, 2759,
1494  2771, 2783, 2783, 2783, 2794, 2794, 2794, 2805, 2816, 2825,
1495  2827, 2824, 2891, 2890, 2912, 2917, 2911, 2936, 2935, 2957,
1496  2956, 2979, 2980, 2979, 3000, 3008, 3016, 3024, 3034, 3046,
1497  3052, 3058, 3064, 3070, 3076, 3082, 3088, 3094, 3100, 3110,
1498  3116, 3121, 3122, 3129, 3134, 3137, 3138, 3151, 3152, 3162,
1499  3163, 3166, 3174, 3184, 3192, 3202, 3210, 3219, 3228, 3236,
1500  3244, 3253, 3265, 3273, 3284, 3288, 3292, 3296, 3302, 3307,
1501  3312, 3316, 3320, 3324, 3328, 3332, 3340, 3344, 3348, 3352,
1502  3356, 3360, 3364, 3368, 3372, 3378, 3379, 3385, 3394, 3403,
1503  3414, 3418, 3428, 3435, 3444, 3452, 3458, 3461, 3466, 3458,
1504  3482, 3490, 3500, 3504, 3511, 3510, 3531, 3547, 3556, 3568,
1505  3582, 3592, 3591, 3608, 3607, 3623, 3632, 3631, 3649, 3648,
1506  3665, 3673, 3681, 3696, 3695, 3715, 3714, 3735, 3747, 3748,
1507  3751, 3770, 3773, 3781, 3789, 3792, 3796, 3799, 3807, 3810,
1508  3811, 3819, 3822, 3839, 3840, 3841, 3851, 3861, 3888, 3953,
1509  3962, 3973, 3980, 3990, 3998, 4008, 4017, 4028, 4035, 4047,
1510  4056, 4066, 4075, 4086, 4093, 4104, 4111, 4126, 4133, 4144,
1511  4151, 4162, 4169, 4198, 4200, 4199, 4216, 4222, 4227, 4215,
1512  4246, 4254, 4262, 4270, 4273, 4284, 4285, 4286, 4287, 4290,
1513  4301, 4302, 4303, 4311, 4321, 4322, 4323, 4324, 4325, 4328,
1514  4329, 4330, 4331, 4332, 4333, 4334, 4337, 4350, 4360, 4368,
1515  4378, 4379, 4382, 4391, 4390, 4399, 4411, 4421, 4429, 4433,
1516  4437, 4441, 4447, 4452, 4457, 4461, 4465, 4469, 4473, 4477,
1517  4481, 4485, 4489, 4493, 4497, 4501, 4505, 4509, 4514, 4520,
1518  4529, 4538, 4547, 4558, 4559, 4566, 4575, 4594, 4601, 4614,
1519  4626, 4638, 4646, 4663, 4671, 4687, 4688, 4691, 4696, 4702,
1520  4714, 4726, 4734, 4750, 4758, 4774, 4775, 4778, 4791, 4802,
1521  4803, 4806, 4823, 4827, 4837, 4847, 4847, 4876, 4877, 4887,
1522  4894, 4904, 4912, 4920, 4932, 4933, 4934, 4937, 4938, 4939,
1523  4940, 4943, 4944, 4945, 4948, 4953, 4960, 4961, 4964, 4965,
1524  4968, 4971, 4974, 4975, 4976, 4979, 4980, 4983, 4984, 4988
1525 };
1526 #endif
1527 
1528 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1529 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1530  First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1531 static const char *const yytname[] =
1532 {
1533  "\"end-of-input\"", "error", "$undefined", "keyword_class",
1534  "keyword_module", "keyword_def", "keyword_undef", "keyword_begin",
1535  "keyword_rescue", "keyword_ensure", "keyword_end", "keyword_if",
1536  "keyword_unless", "keyword_then", "keyword_elsif", "keyword_else",
1537  "keyword_case", "keyword_when", "keyword_while", "keyword_until",
1538  "keyword_for", "keyword_break", "keyword_next", "keyword_redo",
1539  "keyword_retry", "keyword_in", "keyword_do", "keyword_do_cond",
1540  "keyword_do_block", "keyword_do_LAMBDA", "keyword_return",
1541  "keyword_yield", "keyword_super", "keyword_self", "keyword_nil",
1542  "keyword_true", "keyword_false", "keyword_and", "keyword_or",
1543  "keyword_not", "modifier_if", "modifier_unless", "modifier_while",
1544  "modifier_until", "modifier_rescue", "keyword_alias", "keyword_defined",
1545  "keyword_BEGIN", "keyword_END", "keyword__LINE__", "keyword__FILE__",
1546  "keyword__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR",
1547  "tCONSTANT", "tCVAR", "tLABEL", "tINTEGER", "tFLOAT", "tSTRING_CONTENT",
1548  "tCHAR", "tNTH_REF", "tBACK_REF", "tREGEXP_END", "\"unary+\"",
1549  "\"unary-\"", "\"**\"", "\"<=>\"", "\"==\"", "\"===\"", "\"!=\"",
1550  "\">=\"", "\"<=\"", "\"&&\"", "\"||\"", "\"=~\"", "\"!~\"", "\"..\"",
1551  "\"...\"", "\"[]\"", "\"[]=\"", "\"<<\"", "\">>\"", "\"::\"",
1552  "\":: at EXPR_BEG\"", "tOP_ASGN", "\"=>\"", "\"(\"", "\"( arg\"",
1553  "\")\"", "\"[\"", "\"{\"", "\"{ arg\"", "\"*\"", "\"**arg\"", "\"&\"",
1554  "\"->\"", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG",
1555  "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG", "tQSYMBOLS_BEG",
1556  "tSTRING_DBEG", "tSTRING_DEND", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG",
1557  "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'",
1558  "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "tLAST_TOKEN",
1559  "'{'", "'}'", "'['", "'.'", "','", "'`'", "'('", "')'", "']'", "';'",
1560  "' '", "'\\n'", "$accept", "program", "$@1", "top_compstmt", "top_stmts",
1561  "top_stmt", "$@2", "bodystmt", "compstmt", "stmts", "stmt_or_begin",
1562  "$@3", "stmt", "$@4", "command_asgn", "expr", "expr_value",
1563  "command_call", "block_command", "cmd_brace_block", "@5", "fcall",
1564  "command", "mlhs", "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head",
1565  "mlhs_post", "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym",
1566  "fitem", "undef_list", "$@6", "op", "reswords", "arg", "$@7",
1567  "arg_value", "aref_args", "paren_args", "opt_paren_args",
1568  "opt_call_args", "call_args", "command_args", "@8", "block_arg",
1569  "opt_block_arg", "args", "mrhs", "primary", "@9", "$@10", "$@11", "$@12",
1570  "$@13", "$@14", "$@15", "$@16", "$@17", "$@18", "@19", "@20", "@21",
1571  "@22", "@23", "$@24", "$@25", "primary_value", "k_begin", "k_if",
1572  "k_unless", "k_while", "k_until", "k_case", "k_for", "k_class",
1573  "k_module", "k_def", "k_end", "then", "do", "if_tail", "opt_else",
1574  "for_var", "f_marg", "f_marg_list", "f_margs", "block_args_tail",
1575  "opt_block_args_tail", "block_param", "opt_block_param",
1576  "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "lambda", "@26",
1577  "@27", "@28", "f_larglist", "lambda_body", "do_block", "@29",
1578  "block_call", "method_call", "@30", "@31", "@32", "@33", "brace_block",
1579  "@34", "@35", "case_body", "cases", "opt_rescue", "exc_list", "exc_var",
1580  "opt_ensure", "literal", "strings", "string", "string1", "xstring",
1581  "regexp", "words", "word_list", "word", "symbols", "symbol_list",
1582  "qwords", "qsymbols", "qword_list", "qsym_list", "string_contents",
1583  "xstring_contents", "regexp_contents", "string_content", "@36", "@37",
1584  "@38", "@39", "string_dvar", "symbol", "sym", "dsym", "numeric",
1585  "user_variable", "keyword_variable", "var_ref", "var_lhs", "backref",
1586  "superclass", "$@40", "f_arglist", "args_tail", "opt_args_tail",
1587  "f_args", "f_bad_arg", "f_norm_arg", "f_arg_item", "f_arg", "f_kw",
1588  "f_block_kw", "f_block_kwarg", "f_kwarg", "kwrest_mark", "f_kwrest",
1589  "f_opt", "f_block_opt", "f_block_optarg", "f_optarg", "restarg_mark",
1590  "f_rest_arg", "blkarg_mark", "f_block_arg", "opt_f_block_arg",
1591  "singleton", "$@41", "assoc_list", "assocs", "assoc", "operation",
1592  "operation2", "operation3", "dot_or_colon", "opt_terms", "opt_nl",
1593  "rparen", "rbracket", "trailer", "term", "terms", "none", 0
1594 };
1595 #endif
1596 
1597 # ifdef YYPRINT
1598 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1599  token YYLEX-NUM. */
1600 static const yytype_uint16 yytoknum[] =
1601 {
1602  0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1603  265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1604  275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1605  285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1606  295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1607  305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1608  315, 316, 317, 318, 319, 320, 130, 131, 132, 134,
1609  139, 140, 141, 138, 137, 321, 322, 142, 143, 128,
1610  129, 144, 145, 135, 136, 323, 324, 325, 326, 327,
1611  328, 329, 330, 331, 332, 333, 334, 335, 336, 337,
1612  338, 339, 340, 341, 342, 343, 344, 345, 346, 347,
1613  348, 349, 350, 61, 63, 58, 62, 60, 124, 94,
1614  38, 43, 45, 42, 47, 37, 351, 33, 126, 352,
1615  123, 125, 91, 46, 44, 96, 40, 41, 93, 59,
1616  32, 10
1617 };
1618 # endif
1619 
1620 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1621 static const yytype_uint16 yyr1[] =
1622 {
1623  0, 142, 144, 143, 145, 146, 146, 146, 146, 147,
1624  148, 147, 149, 150, 151, 151, 151, 151, 152, 153,
1625  152, 155, 154, 154, 154, 154, 154, 154, 154, 154,
1626  154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
1627  154, 154, 154, 154, 154, 154, 156, 156, 157, 157,
1628  157, 157, 157, 157, 158, 159, 159, 160, 160, 162,
1629  161, 163, 164, 164, 164, 164, 164, 164, 164, 164,
1630  164, 164, 164, 165, 165, 166, 166, 167, 167, 167,
1631  167, 167, 167, 167, 167, 167, 167, 168, 168, 169,
1632  169, 170, 170, 171, 171, 171, 171, 171, 171, 171,
1633  171, 171, 172, 172, 172, 172, 172, 172, 172, 172,
1634  172, 173, 173, 174, 174, 174, 175, 175, 175, 175,
1635  175, 176, 176, 177, 177, 178, 179, 178, 180, 180,
1636  180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
1637  180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
1638  180, 180, 180, 180, 180, 180, 180, 180, 181, 181,
1639  181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
1640  181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
1641  181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
1642  181, 181, 181, 181, 181, 181, 181, 181, 181, 182,
1643  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
1644  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
1645  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
1646  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
1647  182, 183, 182, 182, 182, 184, 185, 185, 185, 185,
1648  186, 187, 187, 188, 188, 188, 188, 188, 189, 189,
1649  189, 189, 189, 191, 190, 192, 193, 193, 194, 194,
1650  194, 194, 195, 195, 195, 196, 196, 196, 196, 196,
1651  196, 196, 196, 196, 196, 196, 197, 196, 198, 196,
1652  199, 196, 196, 196, 196, 196, 196, 196, 196, 196,
1653  196, 200, 196, 196, 196, 196, 196, 196, 196, 196,
1654  196, 201, 202, 196, 203, 204, 196, 196, 196, 205,
1655  206, 196, 207, 196, 208, 209, 196, 210, 196, 211,
1656  196, 212, 213, 196, 196, 196, 196, 196, 214, 215,
1657  216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
1658  226, 226, 226, 227, 227, 228, 228, 229, 229, 230,
1659  230, 231, 231, 232, 232, 233, 233, 233, 233, 233,
1660  233, 233, 233, 233, 234, 234, 234, 234, 235, 235,
1661  236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1662  236, 236, 236, 236, 236, 237, 237, 238, 238, 238,
1663  239, 239, 240, 240, 241, 241, 243, 244, 245, 242,
1664  246, 246, 247, 247, 249, 248, 250, 250, 250, 250,
1665  251, 252, 251, 253, 251, 251, 254, 251, 255, 251,
1666  251, 251, 251, 257, 256, 258, 256, 259, 260, 260,
1667  261, 261, 262, 262, 262, 263, 263, 264, 264, 265,
1668  265, 265, 266, 267, 267, 267, 268, 269, 270, 271,
1669  271, 272, 272, 273, 273, 274, 274, 275, 275, 276,
1670  276, 277, 277, 278, 278, 279, 279, 280, 280, 281,
1671  281, 282, 282, 283, 284, 283, 285, 286, 287, 283,
1672  288, 288, 288, 288, 289, 290, 290, 290, 290, 291,
1673  292, 292, 292, 292, 293, 293, 293, 293, 293, 294,
1674  294, 294, 294, 294, 294, 294, 295, 295, 296, 296,
1675  297, 297, 298, 299, 298, 298, 300, 300, 301, 301,
1676  301, 301, 302, 302, 303, 303, 303, 303, 303, 303,
1677  303, 303, 303, 303, 303, 303, 303, 303, 303, 304,
1678  304, 304, 304, 305, 305, 306, 306, 307, 307, 308,
1679  309, 310, 310, 311, 311, 312, 312, 313, 313, 314,
1680  315, 316, 316, 317, 317, 318, 318, 319, 319, 320,
1681  320, 321, 322, 322, 323, 324, 323, 325, 325, 326,
1682  326, 327, 327, 327, 328, 328, 328, 329, 329, 329,
1683  329, 330, 330, 330, 331, 331, 332, 332, 333, 333,
1684  334, 335, 336, 336, 336, 337, 337, 338, 338, 339
1685 };
1686 
1687 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
1688 static const yytype_uint8 yyr2[] =
1689 {
1690  0, 2, 0, 2, 2, 1, 1, 3, 2, 1,
1691  0, 5, 4, 2, 1, 1, 3, 2, 1, 0,
1692  5, 0, 4, 3, 3, 3, 2, 3, 3, 3,
1693  3, 3, 4, 1, 3, 3, 6, 5, 5, 5,
1694  5, 3, 3, 3, 3, 1, 3, 3, 1, 3,
1695  3, 3, 2, 1, 1, 1, 1, 1, 4, 0,
1696  5, 1, 2, 3, 4, 5, 4, 5, 2, 2,
1697  2, 2, 2, 1, 3, 1, 3, 1, 2, 3,
1698  5, 2, 4, 2, 4, 1, 3, 1, 3, 2,
1699  3, 1, 3, 1, 1, 4, 3, 3, 3, 3,
1700  2, 1, 1, 1, 4, 3, 3, 3, 3, 2,
1701  1, 1, 1, 2, 1, 3, 1, 1, 1, 1,
1702  1, 1, 1, 1, 1, 1, 0, 4, 1, 1,
1703  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1704  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1705  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1706  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1707  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1708  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1709  1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
1710  5, 3, 5, 6, 5, 5, 5, 5, 4, 3,
1711  3, 3, 3, 3, 3, 3, 3, 3, 4, 4,
1712  2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
1713  3, 3, 3, 3, 3, 2, 2, 3, 3, 3,
1714  3, 0, 4, 6, 1, 1, 1, 2, 4, 2,
1715  3, 1, 1, 1, 1, 2, 4, 2, 1, 2,
1716  2, 4, 1, 0, 2, 2, 2, 1, 1, 2,
1717  3, 4, 3, 4, 2, 1, 1, 1, 1, 1,
1718  1, 1, 1, 1, 1, 1, 0, 4, 0, 3,
1719  0, 4, 3, 3, 2, 3, 3, 1, 4, 3,
1720  1, 0, 6, 4, 3, 2, 1, 2, 2, 6,
1721  6, 0, 0, 7, 0, 0, 7, 5, 4, 0,
1722  0, 9, 0, 6, 0, 0, 8, 0, 5, 0,
1723  6, 0, 0, 9, 1, 1, 1, 1, 1, 1,
1724  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1725  1, 1, 2, 1, 1, 1, 5, 1, 2, 1,
1726  1, 1, 3, 1, 3, 1, 4, 6, 3, 5,
1727  2, 4, 1, 3, 4, 2, 2, 1, 2, 0,
1728  6, 8, 4, 6, 4, 2, 6, 2, 4, 6,
1729  2, 4, 2, 4, 1, 1, 1, 3, 1, 4,
1730  1, 4, 1, 3, 1, 1, 0, 0, 0, 5,
1731  4, 1, 3, 3, 0, 5, 2, 4, 5, 5,
1732  2, 0, 5, 0, 5, 3, 0, 4, 0, 4,
1733  2, 1, 4, 0, 5, 0, 5, 5, 1, 1,
1734  6, 1, 1, 1, 1, 2, 1, 2, 1, 1,
1735  1, 1, 1, 1, 1, 2, 3, 3, 3, 3,
1736  3, 0, 3, 1, 2, 3, 3, 0, 3, 3,
1737  3, 3, 3, 0, 3, 0, 3, 0, 2, 0,
1738  2, 0, 2, 1, 0, 3, 0, 0, 0, 6,
1739  1, 1, 1, 1, 2, 1, 1, 1, 1, 3,
1740  1, 1, 2, 2, 1, 1, 1, 1, 1, 1,
1741  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1742  1, 1, 1, 0, 4, 2, 3, 2, 4, 2,
1743  2, 1, 2, 0, 6, 8, 4, 6, 4, 6,
1744  2, 4, 6, 2, 4, 2, 4, 1, 0, 1,
1745  1, 1, 1, 1, 1, 1, 3, 1, 3, 2,
1746  2, 1, 3, 1, 3, 1, 1, 2, 1, 3,
1747  3, 1, 3, 1, 3, 1, 1, 2, 1, 1,
1748  1, 2, 2, 1, 1, 0, 4, 1, 2, 1,
1749  3, 3, 2, 2, 1, 1, 1, 1, 1, 1,
1750  1, 1, 1, 1, 1, 1, 0, 1, 0, 1,
1751  2, 2, 0, 1, 1, 1, 1, 1, 2, 0
1752 };
1753 
1754 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
1755  Performed when YYTABLE doesn't specify something else to do. Zero
1756  means the default is an error. */
1757 static const yytype_uint16 yydefact[] =
1758 {
1759  2, 0, 0, 1, 0, 346, 347, 348, 0, 339,
1760  340, 341, 344, 342, 343, 345, 334, 335, 336, 337,
1761  297, 263, 263, 510, 509, 511, 512, 608, 0, 608,
1762  10, 0, 514, 513, 515, 594, 596, 506, 505, 595,
1763  508, 500, 501, 453, 520, 521, 0, 0, 0, 0,
1764  288, 619, 619, 85, 406, 479, 477, 479, 481, 461,
1765  473, 467, 475, 0, 0, 0, 3, 606, 6, 9,
1766  33, 45, 48, 56, 263, 55, 0, 73, 0, 77,
1767  87, 0, 53, 244, 0, 286, 0, 0, 311, 314,
1768  606, 0, 0, 0, 0, 57, 306, 275, 276, 452,
1769  454, 277, 278, 279, 281, 280, 282, 450, 451, 449,
1770  516, 517, 283, 0, 284, 61, 5, 8, 168, 179,
1771  169, 192, 165, 185, 175, 174, 195, 196, 190, 173,
1772  172, 167, 193, 197, 198, 177, 166, 180, 184, 186,
1773  178, 171, 187, 194, 189, 188, 181, 191, 176, 164,
1774  183, 182, 163, 170, 161, 162, 158, 159, 160, 116,
1775  118, 117, 153, 154, 149, 131, 132, 133, 140, 137,
1776  139, 134, 135, 155, 156, 141, 142, 146, 150, 136,
1777  138, 128, 129, 130, 143, 144, 145, 147, 148, 151,
1778  152, 157, 121, 123, 125, 26, 119, 120, 122, 124,
1779  0, 0, 0, 0, 0, 0, 0, 0, 258, 0,
1780  245, 268, 71, 262, 619, 0, 516, 517, 0, 284,
1781  619, 589, 72, 70, 608, 69, 0, 619, 430, 68,
1782  608, 609, 0, 0, 21, 241, 0, 0, 334, 335,
1783  297, 300, 431, 0, 220, 0, 221, 294, 0, 19,
1784  0, 0, 606, 15, 18, 608, 75, 14, 290, 608,
1785  0, 612, 612, 246, 0, 0, 612, 587, 608, 0,
1786  0, 0, 83, 338, 0, 93, 94, 101, 308, 407,
1787  497, 496, 498, 495, 0, 494, 0, 0, 0, 0,
1788  0, 0, 0, 0, 0, 0, 0, 502, 503, 52,
1789  235, 236, 615, 616, 4, 617, 607, 0, 0, 0,
1790  0, 0, 0, 0, 435, 433, 420, 62, 305, 414,
1791  416, 0, 89, 0, 81, 78, 0, 0, 0, 0,
1792  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1793  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1794  0, 0, 0, 428, 619, 426, 0, 54, 0, 0,
1795  0, 0, 606, 0, 607, 0, 360, 359, 0, 0,
1796  516, 517, 284, 111, 112, 0, 0, 114, 0, 0,
1797  516, 517, 284, 327, 188, 181, 191, 176, 158, 159,
1798  160, 116, 117, 585, 329, 584, 0, 605, 604, 0,
1799  307, 455, 0, 0, 126, 592, 294, 269, 593, 265,
1800  0, 0, 0, 259, 267, 428, 619, 426, 0, 0,
1801  0, 260, 608, 0, 299, 264, 608, 254, 619, 619,
1802  253, 608, 304, 51, 23, 25, 24, 0, 301, 0,
1803  0, 0, 428, 426, 0, 17, 0, 608, 292, 13,
1804  607, 74, 608, 289, 295, 614, 613, 247, 614, 249,
1805  296, 588, 0, 100, 502, 503, 91, 86, 0, 428,
1806  619, 426, 548, 483, 486, 484, 499, 480, 456, 478,
1807  457, 458, 482, 459, 460, 0, 463, 469, 0, 470,
1808  465, 466, 0, 471, 0, 472, 0, 0, 618, 7,
1809  27, 28, 29, 30, 31, 49, 50, 619, 619, 59,
1810  63, 619, 0, 34, 43, 0, 44, 608, 0, 79,
1811  90, 47, 46, 0, 199, 268, 42, 217, 225, 230,
1812  231, 232, 227, 229, 239, 240, 233, 234, 210, 211,
1813  237, 238, 608, 226, 228, 222, 223, 224, 212, 213,
1814  214, 215, 216, 597, 599, 598, 600, 0, 263, 425,
1815  608, 597, 599, 598, 600, 0, 263, 0, 619, 351,
1816  0, 350, 0, 0, 0, 0, 0, 0, 294, 428,
1817  619, 426, 319, 324, 111, 112, 113, 0, 523, 322,
1818  522, 428, 619, 426, 0, 0, 548, 331, 597, 598,
1819  263, 35, 201, 41, 209, 0, 199, 591, 0, 270,
1820  266, 619, 597, 598, 608, 597, 598, 590, 298, 610,
1821  250, 255, 257, 303, 22, 0, 242, 0, 32, 423,
1822  421, 208, 0, 76, 16, 291, 612, 0, 84, 97,
1823  99, 608, 597, 598, 554, 551, 550, 549, 552, 0,
1824  565, 0, 576, 566, 580, 579, 575, 548, 408, 547,
1825  411, 553, 555, 557, 533, 563, 619, 568, 619, 573,
1826  533, 578, 533, 0, 531, 487, 0, 462, 464, 474,
1827  468, 476, 218, 219, 398, 608, 0, 396, 395, 0,
1828  619, 0, 274, 0, 88, 82, 0, 0, 0, 0,
1829  0, 0, 429, 66, 0, 0, 432, 0, 0, 427,
1830  64, 619, 349, 287, 619, 619, 441, 619, 352, 619,
1831  354, 312, 353, 315, 0, 0, 318, 601, 293, 608,
1832  597, 598, 0, 0, 525, 0, 0, 111, 112, 115,
1833  608, 0, 608, 548, 0, 0, 0, 252, 417, 58,
1834  251, 0, 127, 271, 261, 0, 0, 432, 0, 0,
1835  619, 608, 11, 0, 248, 92, 95, 0, 559, 554,
1836  0, 372, 363, 365, 608, 361, 608, 0, 0, 540,
1837  0, 529, 583, 567, 0, 530, 0, 543, 577, 0,
1838  545, 581, 488, 490, 491, 492, 485, 493, 554, 0,
1839  394, 608, 0, 379, 561, 619, 619, 571, 379, 379,
1840  377, 400, 0, 0, 0, 0, 0, 272, 80, 200,
1841  0, 40, 206, 39, 207, 67, 424, 611, 0, 37,
1842  204, 38, 205, 65, 422, 442, 443, 619, 444, 0,
1843  619, 357, 0, 0, 355, 0, 0, 0, 317, 0,
1844  0, 432, 0, 325, 0, 0, 432, 328, 586, 608,
1845  0, 527, 332, 418, 419, 202, 0, 256, 302, 20,
1846  569, 608, 0, 370, 0, 556, 0, 0, 0, 409,
1847  532, 558, 533, 533, 564, 619, 582, 533, 574, 533,
1848  533, 0, 0, 0, 560, 0, 397, 385, 387, 0,
1849  375, 376, 0, 390, 0, 392, 0, 436, 434, 0,
1850  415, 273, 243, 36, 203, 0, 0, 446, 358, 0,
1851  12, 448, 0, 309, 310, 0, 0, 270, 619, 320,
1852  0, 524, 323, 526, 330, 548, 362, 373, 0, 368,
1853  364, 410, 0, 0, 0, 536, 0, 538, 528, 0,
1854  544, 0, 541, 546, 0, 570, 294, 428, 399, 378,
1855  379, 379, 562, 619, 379, 572, 379, 379, 404, 608,
1856  402, 405, 60, 0, 445, 0, 102, 103, 110, 0,
1857  447, 0, 313, 316, 438, 439, 437, 0, 0, 0,
1858  0, 371, 0, 366, 413, 412, 533, 533, 533, 533,
1859  489, 601, 293, 0, 382, 0, 384, 374, 0, 391,
1860  0, 388, 393, 0, 401, 109, 428, 619, 426, 619,
1861  619, 0, 326, 0, 369, 0, 537, 0, 534, 539,
1862  542, 379, 379, 379, 379, 403, 601, 108, 608, 597,
1863  598, 440, 356, 321, 333, 367, 533, 383, 0, 380,
1864  386, 389, 432, 535, 379, 381
1865 };
1866 
1867 /* YYDEFGOTO[NTERM-NUM]. */
1868 static const yytype_int16 yydefgoto[] =
1869 {
1870  -1, 1, 2, 66, 67, 68, 236, 567, 568, 252,
1871  253, 446, 254, 437, 70, 71, 358, 72, 73, 510,
1872  690, 243, 75, 76, 255, 77, 78, 79, 467, 80,
1873  209, 377, 378, 192, 193, 194, 195, 605, 556, 197,
1874  82, 439, 211, 260, 228, 748, 426, 427, 225, 226,
1875  213, 413, 428, 516, 83, 356, 259, 452, 625, 360,
1876  846, 361, 847, 732, 987, 736, 733, 930, 594, 596,
1877  746, 935, 245, 85, 86, 87, 88, 89, 90, 91,
1878  92, 93, 94, 713, 570, 721, 843, 844, 369, 772,
1879  773, 774, 959, 898, 801, 686, 687, 802, 969, 970,
1880  278, 279, 472, 777, 658, 879, 320, 511, 95, 96,
1881  711, 704, 565, 557, 318, 508, 507, 577, 986, 715,
1882  837, 916, 920, 97, 98, 99, 100, 101, 102, 103,
1883  290, 485, 104, 294, 105, 106, 292, 296, 286, 284,
1884  288, 477, 676, 675, 792, 891, 796, 107, 285, 108,
1885  109, 216, 217, 112, 218, 219, 589, 735, 744, 880,
1886  779, 745, 661, 662, 663, 664, 665, 804, 805, 666,
1887  667, 668, 669, 807, 808, 670, 671, 672, 673, 674,
1888  781, 396, 595, 265, 429, 221, 115, 629, 559, 399,
1889  304, 423, 424, 706, 457, 571, 364, 257
1890 };
1891 
1892 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1893  STATE-NUM. */
1894 #define YYPACT_NINF -810
1895 static const yytype_int16 yypact[] =
1896 {
1897  -810, 102, 2888, -810, 7502, -810, -810, -810, 7025, -810,
1898  -810, -810, -810, -810, -810, -810, 7615, 7615, -810, -810,
1899  7615, 4210, 3805, -810, -810, -810, -810, 190, 6892, -21,
1900  -810, 10, -810, -810, -810, 3130, 3940, -810, -810, 3265,
1901  -810, -810, -810, -810, -810, -810, 8971, 8971, 130, 5262,
1902  9084, 7954, 8293, 7284, -810, 6759, -810, -810, -810, 54,
1903  70, 225, 228, 515, 9197, 8971, -810, 245, -810, 1021,
1904  -810, 269, -810, -810, 73, 120, 87, -810, 98, 9310,
1905  -810, 148, 3109, 44, 359, -810, 9084, 9084, -810, -810,
1906  6149, 9419, 9528, 9637, 6625, 30, 86, -810, -810, 230,
1907  -810, -810, -810, -810, -810, -810, -810, -810, -810, -810,
1908  3, 385, -810, 348, 490, -810, -810, -810, -810, -810,
1909  -810, -810, -810, -810, -810, -810, -810, -810, -810, -810,
1910  -810, -810, -810, -810, -810, -810, -810, -810, -810, -810,
1911  -810, -810, -810, -810, -810, -810, -810, -810, -810, -810,
1912  -810, -810, -810, -810, -810, -810, -810, -810, -810, -810,
1913  -810, -810, -810, -810, -810, -810, -810, -810, -810, -810,
1914  -810, -810, -810, -810, -810, -810, -810, -810, -810, -810,
1915  -810, -810, -810, -810, -810, -810, -810, -810, -810, -810,
1916  -810, -810, -810, -810, -810, 285, -810, -810, -810, -810,
1917  253, 8971, 374, 5401, 8971, 8971, 8971, 8971, -810, 328,
1918  3109, 364, -810, -810, 313, 369, 208, 224, 395, 247,
1919  354, -810, -810, -810, 6036, -810, 7615, 7615, -810, -810,
1920  6262, -810, 9084, 844, -810, 360, 388, 5540, -810, -810,
1921  -810, 379, 400, 73, -810, 464, 463, 501, 7728, -810,
1922  5262, 402, 245, -810, 1021, -21, 437, -810, 269, -21,
1923  415, 8, 317, -810, 364, 440, 317, -810, -21, 525,
1924  615, 9746, 470, -810, 488, 508, 575, 612, -810, -810,
1925  -810, -810, -810, -810, 438, -810, 447, 451, 284, 475,
1926  540, 496, 60, 502, 576, 516, 61, 550, 565, -810,
1927  -810, -810, -810, -810, -810, -810, 6375, 9084, 9084, 9084,
1928  9084, 7728, 9084, 9084, -810, -810, -810, 549, -810, -810,
1929  -810, 8406, -810, 5262, 7393, 527, 8406, 8971, 8971, 8971,
1930  8971, 8971, 8971, 8971, 8971, 8971, 8971, 8971, 8971, 8971,
1931  8971, 8971, 8971, 8971, 8971, 8971, 8971, 8971, 8971, 8971,
1932  8971, 8971, 8971, 10025, 7615, 10102, 4619, 269, 110, 110,
1933  9084, 9084, 245, 654, 538, 631, -810, -810, 645, 668,
1934  85, 93, 108, 405, 410, 9084, 377, -810, 123, 661,
1935  -810, -810, -810, -810, 40, 42, 56, 167, 180, 279,
1936  332, 336, 343, -810, -810, -810, 30, -810, -810, 10179,
1937  -810, -810, 9197, 9197, -810, -810, 394, -810, -810, -810,
1938  8971, 8971, 7841, -810, -810, 10256, 7615, 10333, 8971, 8971,
1939  8067, -810, -21, 558, -810, -810, -21, -810, 564, 566,
1940  -810, 66, -810, -810, -810, -810, -810, 7025, -810, 8971,
1941  5671, 574, 10256, 10333, 8971, 1021, 581, -21, -810, -810,
1942  6488, 572, -21, -810, -810, 8180, -810, -810, 8293, -810,
1943  -810, -810, 360, 678, -810, -810, -810, 588, 9746, 10410,
1944  7615, 10487, 1081, -810, -810, -810, -810, -810, -810, -810,
1945  -810, -810, -810, -810, -810, 302, -810, -810, 594, -810,
1946  -810, -810, 306, -810, 597, -810, 8971, 8971, -810, -810,
1947  -810, -810, -810, -810, -810, -810, -810, 63, 63, -810,
1948  -810, 63, 8971, -810, 605, 607, -810, -21, 9746, 617,
1949  -810, -810, -810, 636, 1231, -810, -810, 463, 2567, 2567,
1950  2567, 2567, 976, 976, 2722, 2633, 2567, 2567, 3244, 3244,
1951  339, 339, 1305, 976, 976, 986, 986, 1119, 255, 255,
1952  463, 463, 463, 4345, 3400, 4480, 3535, 400, 620, -810,
1953  -21, 591, -810, 742, -810, 400, 4075, 747, 754, -810,
1954  4758, 756, 5036, 52, 52, 654, 8519, 747, 121, 10564,
1955  7615, 10641, -810, 269, -810, 678, -810, 245, -810, -810,
1956  -810, 10718, 7615, 10179, 4619, 9084, 1274, -810, -810, -810,
1957  1148, -810, 2322, -810, 3109, 7025, 2974, -810, 8971, 364,
1958  -810, 354, 2995, 3670, -21, 398, 497, -810, -810, -810,
1959  -810, 7841, 8067, -810, -810, 9084, 3109, 644, -810, -810,
1960  -810, 3109, 5671, 212, -810, -810, 317, 9746, 588, 495,
1961  323, -21, 337, 376, 676, -810, -810, -810, -810, 8971,
1962  -810, 896, -810, -810, -810, -810, -810, 1142, -810, -810,
1963  -810, -810, -810, -810, 656, -810, 657, 743, 663, -810,
1964  667, 750, 671, 760, -810, -810, 763, -810, -810, -810,
1965  -810, -810, 463, 463, -810, 793, 5810, -810, -810, 5540,
1966  63, 5810, 679, 8632, -810, 588, 9746, 9197, 8971, 699,
1967  9197, 9197, -810, 549, 400, 681, 759, 9197, 9197, -810,
1968  549, 400, -810, -810, 8745, 810, -810, 718, -810, 810,
1969  -810, -810, -810, -810, 747, 92, -810, 81, 149, -21,
1970  144, 155, 9084, 245, -810, 9084, 4619, 495, 323, -810,
1971  -21, 747, 66, 1142, 4619, 245, 7158, -810, 86, 120,
1972  -810, 8971, -810, -810, -810, 8971, 8971, 504, 8971, 8971,
1973  694, 66, -810, 700, -810, -810, 390, 8971, -810, -810,
1974  896, 473, -810, 702, -21, -810, -21, 124, 1142, -810,
1975  571, -810, -810, -810, 38, -810, 1142, -810, -810, 881,
1976  -810, -810, -810, -810, -810, -810, -810, -810, 720, 9855,
1977  -810, -21, 716, 703, -810, 707, 663, -810, 723, 724,
1978  -810, 725, 856, 737, 5540, 859, 8971, 740, 588, 3109,
1979  8971, -810, 3109, -810, 3109, -810, -810, -810, 9197, -810,
1980  3109, -810, 3109, -810, -810, 605, -810, 797, -810, 5149,
1981  872, -810, 9084, 747, -810, 747, 5810, 5810, -810, 8858,
1982  4897, 159, 52, -810, 245, 747, -810, -810, -810, -21,
1983  747, -810, -810, -810, -810, 3109, 8971, 8067, -810, -810,
1984  -810, -21, 875, 752, 953, -810, 762, 5810, 5540, -810,
1985  -810, -810, 753, 757, -810, 663, -810, 767, -810, 768,
1986  767, 5923, 9855, 848, 689, 787, -810, 1386, -810, 622,
1987  -810, -810, 1386, -810, 1533, -810, 1028, -810, -810, 778,
1988  -810, 784, 3109, -810, 3109, 9964, 110, -810, -810, 5810,
1989  -810, -810, 110, -810, -810, 747, 747, -810, 383, -810,
1990  4619, -810, -810, -810, -810, 1274, -810, 785, 875, 672,
1991  -810, -810, 911, 792, 1142, -810, 881, -810, -810, 881,
1992  -810, 881, -810, -810, 820, 689, -810, 10795, -810, -810,
1993  806, 809, -810, 663, 811, -810, 812, 811, -810, 352,
1994  -810, -810, -810, 891, -810, 691, 508, 575, 612, 4619,
1995  -810, 4758, -810, -810, -810, -810, -810, 5810, 747, 4619,
1996  875, 785, 875, 823, -810, -810, 767, 824, 767, 767,
1997  -810, 818, 826, 1386, -810, 1533, -810, -810, 1533, -810,
1998  1533, -810, -810, 1028, -810, 678, 10872, 7615, 10949, 754,
1999  718, 747, -810, 747, 785, 875, -810, 881, -810, -810,
2000  -810, 811, 825, 811, 811, -810, 49, 323, -21, 179,
2001  215, -810, -810, -810, -810, 785, 767, -810, 1533, -810,
2002  -810, -810, 216, -810, 811, -810
2003 };
2004 
2005 /* YYPGOTO[NTERM-NUM]. */
2006 static const yytype_int16 yypgoto[] =
2007 {
2008  -810, -810, -810, -382, -810, 26, -810, -549, -7, -810,
2009  513, -810, 33, -810, -315, -33, -63, -55, -810, -216,
2010  -810, 766, -13, 874, -164, 20, -73, -810, -409, 29,
2011  1882, -309, 882, -54, -810, -5, -810, -810, 6, -810,
2012  1208, -810, 1366, -810, -41, 256, -344, 78, -14, -810,
2013  -384, -205, -4, -304, -15, -810, -810, -810, -810, -810,
2014  -810, -810, -810, -810, -810, -810, -810, -810, -810, -810,
2015  -810, -810, 64, -810, -810, -810, -810, -810, -810, -810,
2016  -810, -810, -810, -1, -333, -519, -44, -623, -810, -789,
2017  -771, 211, 297, 71, -810, -437, -810, -693, -810, -29,
2018  -810, -810, -810, -810, -810, -810, 237, -810, -810, -810,
2019  -810, -810, -810, -810, -94, -810, -810, -531, -810, -31,
2020  -810, -810, -810, -810, -810, -810, 890, -810, -810, -810,
2021  -810, 701, -810, -810, -810, -810, -810, -810, -810, 940,
2022  -810, -126, -810, -810, -810, -810, -810, -3, -810, 11,
2023  -810, 1400, 1673, 905, 1898, 1689, -810, -810, 65, -451,
2024  -102, -385, -809, -588, -689, -289, 222, 107, -810, -810,
2025  -810, 18, -721, -764, 115, 235, -810, -634, -810, -37,
2026  -627, -810, -810, -810, 114, -388, -810, -324, -810, 623,
2027  -47, -9, -123, -568, -214, 21, -11, -2
2028 };
2029 
2030 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
2031  positive, shift that token. If negative, reduce the rule which
2032  number is the opposite. If YYTABLE_NINF, syntax error. */
2033 #define YYTABLE_NINF -620
2034 static const yytype_int16 yytable[] =
2035 {
2036  116, 283, 400, 208, 208, 198, 325, 208, 229, 299,
2037  560, 521, 214, 214, 196, 421, 214, 258, 232, 199,
2038  235, 659, 526, 234, 359, 198, 572, 362, 610, 558,
2039  117, 566, 617, 316, 196, 69, 610, 69, 273, 199,
2040  394, 785, 251, 363, 724, 741, 757, 261, 459, 263,
2041  267, 809, 461, 357, 357, 723, 306, 357, 627, 638,
2042  317, 196, -106, 775, 273, 888, 84, 586, 84, 256,
2043  617, 689, 614, 766, 691, 600, 273, 273, 273, 720,
2044  215, 215, 272, 876, 215, 940, 447, 660, 305, 881,
2045  -518, 558, 840, 566, 212, 222, 845, 971, 223, 314,
2046  196, 937, 3, 312, 313, 569, -106, 432, 895, 695,
2047  -102, 305, 314, 84, 215, 397, -102, 274, -103, 630,
2048  231, 488, 494, 569, 587, -510, 641, -509, 215, -338,
2049  220, 220, 451, -110, 220, 654, 453, -93, 965, 684,
2050  237, -511, 455, 274, 883, 659, -109, 630, 319, 456,
2051  215, 215, 889, 877, 215, 368, 379, 379, 655, 517,
2052  479, 851, 482, 398, 486, 262, 266, 991, 486, -105,
2053  489, 495, 856, -510, -108, -509, -338, -338, 900, 901,
2054  -107, 685, 775, 873, -104, -597, 247, 855, -106, -511,
2055  -106, 302, -105, 303, 289, 860, 251, 431, 466, 433,
2056  321, 940, 316, 315, 971, 449, 659, 231, 881, 227,
2057  291, 208, 414, 208, 208, -97, 315, -597, 414, -93,
2058  214, 1024, 214, 888, 421, 430, 849, -94, -107, -104,
2059  441, 302, 322, 303, 617, 878, 729, 610, 610, 965,
2060  588, 450, -101, 251, 500, 501, 502, 503, 740, 302,
2061  763, 303, -512, 814, 1045, -100, 273, 630, 948, 462,
2062  881, 326, 302, 961, 303, -514, 513, 84, 966, 630,
2063  256, 522, 776, 305, 357, 357, 357, 357, -96, 505,
2064  506, 445, 739, -99, 775, -598, 775, 818, 215, -98,
2065  215, 215, 659, -95, 215, -518, 215, 573, 574, 618,
2066  -512, 84, 422, 620, 425, 984, 312, 313, 623, 273,
2067  997, -519, 84, -514, 84, 575, 251, 515, -105, 881,
2068  -105, -102, 515, 327, 633, -74, 230, 357, 357, 635,
2069  56, 231, 499, 929, 419, 274, 1007, -103, 220, 69,
2070  220, 208, 583, 256, 504, 473, -88, 601, 603, 481,
2071  775, 993, 430, 519, -107, -104, -107, -104, 859, 678,
2072  -110, 564, -96, 473, -513, 293, 678, 473, 295, 1032,
2073  84, 215, 215, 215, 215, 84, 215, 215, 350, 351,
2074  352, 988, 521, 305, 302, 215, 303, 84, 274, 230,
2075  215, 474, 850, 475, 694, 466, 803, 985, 839, 590,
2076  576, -98, 775, 208, 775, 564, 754, 327, -293, 474,
2077  836, 475, -513, 474, 430, 475, -432, -515, 215, 404,
2078  84, -504, 764, 564, 215, 215, 414, 414, -507, 584,
2079  406, -594, 624, 585, 198, 402, -595, 775, 116, 215,
2080  1023, 410, 677, 196, 353, 466, 680, 412, 199, 564,
2081  -96, 458, 411, 273, 415, -293, -293, 208, 456, -598,
2082  348, 349, 350, 351, 352, -515, 215, 215, 430, -504,
2083  1052, -96, -519, 69, -96, -432, -507, 564, -96, 617,
2084  215, 444, 418, 610, 659, 758, 1013, 825, 420, -98,
2085  -504, 354, 355, 231, 833, -507, 438, 887, -103, 473,
2086  890, 416, 417, 273, 84, 688, 688, -109, 473, 688,
2087  -98, -105, 473, -98, 84, 224, 702, -98, 440, -94,
2088  -432, -601, -432, -432, 709, 769, 611, 645, 646, 647,
2089  648, 327, 274, 699, 215, -594, 227, -504, -504, 448,
2090  -595, -594, -507, -507, 703, 474, -595, 475, 476, 442,
2091  -73, 705, 710, 454, 474, 754, 475, 478, 474, 747,
2092  475, 480, 742, 717, 765, 719, 716, 208, 787, 636,
2093  790, 460, 725, 469, 297, 298, 726, 403, 430, 208,
2094  -601, 463, 274, 979, 759, 483, 749, 564, 444, 981,
2095  430, 866, 761, -516, 722, 722, 416, 443, 750, 564,
2096  752, 473, 198, -110, 468, 705, 487, 872, 734, 414,
2097  -107, 196, 490, 964, -109, 967, 199, -104, 496, 858,
2098  470, 471, 273, 466, -101, -601, 493, -601, -601, 649,
2099  116, -597, 705, 497, 84, -100, 84, 473, 868, 650,
2100  -516, -516, 522, 509, 215, 821, 823, 474, 810, 475,
2101  484, 875, 829, 831, 863, 996, 215, 998, 84, 215,
2102  -517, 520, 999, 826, 782, 69, 782, 653, 654, 852,
2103  747, 576, 854, 1038, 464, 465, 811, 498, 707, 812,
2104  799, 273, 813, 474, 815, 475, 491, 578, 688, 215,
2105  650, 655, 862, 582, 630, 619, 84, -284, 621, 357,
2106  622, 274, 357, 806, -105, 628, -88, -517, -517, 750,
2107  515, 632, 838, 841, 1031, 841, 1033, 841, 653, 654,
2108  705, 1034, 637, 848, 769, -96, 645, 646, 647, 648,
2109  579, 705, 842, 839, 679, 760, 933, 681, 1046, -268,
2110  857, 693, 655, 886, -284, -284, 591, 886, 936, 697,
2111  84, 696, 196, 84, 853, 84, -423, 712, 414, 1054,
2112  274, 215, 714, -294, 215, 215, 861, 811, 74, 718,
2113  74, 215, 215, 913, 957, 762, 1016, 580, 581, 922,
2114  945, 947, 74, 74, 273, 950, 74, 952, 953, 767,
2115  778, 780, 811, 592, 593, 783, 215, 784, 885, 215,
2116  84, 786, 788, 782, 782, 789, 992, 909, 84, 357,
2117  -294, -294, 791, -269, 820, 74, 74, 793, 794, 827,
2118  795, 592, 593, 1017, 1018, 839, 44, 45, 867, 708,
2119  74, 869, 918, 892, 896, 917, 874, 897, 921, 925,
2120  926, 899, 923, 928, 924, 798, 828, 645, 646, 647,
2121  648, 799, 74, 74, 932, -107, 74, 902, 904, 934,
2122  810, 650, 886, 894, 906, 810, 907, 810, 908, 910,
2123  942, 943, -104, 722, -270, 931, -98, 273, 84, 903,
2124  905, 919, 651, 782, 954, 915, 938, 944, 652, 653,
2125  654, 946, 215, -95, 1026, 1028, 1029, 1030, 434, 941,
2126  273, 949, 951, 84, 956, 958, 215, 435, 436, 972,
2127  84, 84, 980, 655, 84, 806, 656, 963, -271, 990,
2128  806, 994, 806, 995, 982, 983, 841, 769, 1000, 645,
2129  646, 647, 648, 769, 231, 645, 646, 647, 648, 649,
2130  1003, 84, 84, 1005, 1053, 1008, 1010, 1015, 769, 650,
2131  645, 646, 647, 648, -597, 84, 955, 1025, 1027, 1048,
2132  1014, 782, -598, 634, 770, 366, 810, 834, 810, 74,
2133  651, 810, 1019, 810, 1020, 383, 1042, 653, 654, 975,
2134  1021, 871, 800, 84, 1035, 770, 864, 1022, 1041, 401,
2135  74, 771, 74, 74, 84, 492, 74, 287, 74, 395,
2136  989, 655, 884, 74, 208, 769, 962, 645, 646, 647,
2137  648, 810, 960, 882, 74, 430, 74, 716, 841, 597,
2138  1043, 806, 1044, 806, 564, 0, 806, 0, 806, 705,
2139  0, 1004, 1006, 0, 0, 1009, 0, 1011, 1012, 0,
2140  0, 0, 770, 84, 327, 84, 0, 0, 939, 0,
2141  0, 84, 0, 84, 327, 0, 0, 0, 0, 340,
2142  341, 307, 308, 309, 310, 311, 806, 0, 0, 340,
2143  341, 0, 74, 74, 74, 74, 74, 74, 74, 74,
2144  968, 215, 645, 646, 647, 648, 0, 74, 0, 74,
2145  0, 0, 74, 0, 345, 346, 347, 348, 349, 350,
2146  351, 352, 1047, 1049, 1050, 1051, 347, 348, 349, 350,
2147  351, 352, 0, 0, 0, 0, 0, 0, 0, 0,
2148  74, 0, 74, 0, 0, 1055, 74, 74, 0, 0,
2149  0, 0, 0, 644, 0, 645, 646, 647, 648, 649,
2150  0, 74, 0, 0, 0, 0, 0, 0, -619, 650,
2151  0, 0, 0, 0, 0, 0, -619, -619, -619, 0,
2152  0, -619, -619, -619, 0, -619, 0, 0, 74, 74,
2153  651, 0, 0, 0, -619, -619, 652, 653, 654, 0,
2154  0, 0, 74, 0, 0, -619, -619, 327, -619, -619,
2155  -619, -619, -619, 0, 644, 0, 645, 646, 647, 648,
2156  649, 655, 340, 341, 656, 0, 74, 0, 0, 0,
2157  650, 0, 0, 0, 0, 0, 74, 657, 0, 0,
2158  0, 0, 0, 0, 210, 210, 0, 0, 210, 0,
2159  0, 651, 0, -619, 0, 0, 74, 652, 653, 654,
2160  348, 349, 350, 351, 352, 0, 0, 0, 0, 0,
2161  0, 0, 0, 0, 244, 246, -619, 0, 0, 210,
2162  210, 0, 655, 0, 0, 656, 0, 0, 0, 0,
2163  0, 0, 300, 301, 0, 698, 0, 0, -619, -619,
2164  0, -619, 0, 0, 227, -619, 0, -619, 0, -619,
2165  0, 0, 0, 0, 0, 0, 0, 0, 0, 327,
2166  328, 329, 330, 331, 332, 333, 334, 335, 336, 337,
2167  338, 339, 0, 0, 340, 341, 0, 0, 0, 0,
2168  0, 0, 0, 0, 0, 0, 644, 0, 645, 646,
2169  647, 648, 649, 0, 0, 0, 74, 0, 74, 0,
2170  0, 0, 650, 0, 0, 342, 74, 343, 344, 345,
2171  346, 347, 348, 349, 350, 351, 352, 0, 74, 0,
2172  74, 74, 0, 651, 0, -245, 0, 0, 0, 652,
2173  653, 654, 0, 327, 328, 329, 330, 331, 332, 333,
2174  334, 335, 336, 337, 338, 339, 0, 0, 340, 341,
2175  0, 74, 0, 0, 655, 0, 0, 656, 74, 0,
2176  0, 0, 110, 0, 110, 0, 0, 0, 0, 210,
2177  743, 0, 210, 210, 210, 300, 0, 0, 264, 342,
2178  0, 343, 344, 345, 346, 347, 348, 349, 350, 351,
2179  352, 0, 210, 0, 210, 210, 0, 0, 798, 0,
2180  645, 646, 647, 648, 799, 0, 231, 0, 0, 110,
2181  0, 0, 74, 275, 650, 74, 0, 74, 0, 0,
2182  0, 0, 0, 74, 0, 0, 74, 74, 0, 0,
2183  0, 0, 0, 74, 74, 651, 0, 0, 0, 275,
2184  0, 652, 653, 654, 0, 0, 0, 0, 0, 0,
2185  0, 370, 380, 380, 380, 0, 0, 0, 74, 0,
2186  0, 74, 74, 0, 0, 0, 655, 0, 0, 656,
2187  74, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2188  0, 0, 0, 0, 0, 0, 0, 0, 0, 210,
2189  0, 0, 0, 0, 524, 527, 528, 529, 530, 531,
2190  532, 533, 534, 535, 536, 537, 538, 539, 540, 541,
2191  542, 543, 544, 545, 546, 547, 548, 549, 550, 551,
2192  552, 0, 210, 0, 0, 0, 0, 405, 0, 0,
2193  407, 408, 409, 0, 0, 0, 0, 0, 0, 0,
2194  74, 0, 0, 0, 0, 769, 0, 645, 646, 647,
2195  648, 799, 0, 0, 74, 0, 0, 0, 0, 0,
2196  0, 650, 0, 110, 0, 74, 0, 0, 74, 0,
2197  602, 604, 74, 74, 0, 0, 74, 0, 606, 210,
2198  210, 0, 651, 0, 210, 0, 602, 604, 210, 653,
2199  654, 0, 0, 0, 0, 0, 0, 110, 0, 0,
2200  0, 0, 0, 74, 74, 0, 0, 626, 110, 0,
2201  110, 0, 631, 655, 0, 0, 0, 74, 0, 0,
2202  0, 0, 0, 210, 0, 0, 210, 0, 0, 0,
2203  0, 275, 0, 0, 0, 111, 0, 111, 210, 0,
2204  0, 0, 0, 0, 0, 74, 0, 514, 0, 0,
2205  0, 114, 525, 114, 0, 0, 74, 0, 0, 0,
2206  0, 0, 0, 0, 682, 683, 110, 0, 0, 0,
2207  0, 110, 0, 0, 0, 0, 0, 0, 0, 0,
2208  210, 0, 111, 110, 275, 0, 276, 0, 0, 0,
2209  0, 0, 0, 0, 0, 0, 0, 0, 114, 0,
2210  0, 0, 277, 0, 0, 74, 0, 74, 0, 0,
2211  0, 0, 276, 74, 0, 74, 110, 0, 0, 0,
2212  0, 0, 0, 0, 371, 381, 381, 381, 277, 0,
2213  0, 0, 0, 0, 0, 0, 0, 607, 609, 0,
2214  372, 382, 382, 74, 210, 0, 264, 0, 210, 0,
2215  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2216  210, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2217  0, 0, 0, 0, 0, 0, 210, 0, 0, 0,
2218  0, 609, 0, 0, 264, 0, 0, 0, 0, 210,
2219  210, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2220  110, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2221  110, 0, 0, 0, 0, 0, 0, 210, 0, 0,
2222  0, 0, 0, 0, 0, 0, 0, 0, 275, 0,
2223  0, 0, 0, 0, 0, 0, 111, 0, 692, 0,
2224  0, 0, 0, 0, 81, 0, 81, 0, 0, 0,
2225  0, 0, 114, 0, 0, 0, 0, 0, 0, 0,
2226  113, 210, 113, 0, 0, 606, 819, 0, 822, 824,
2227  111, 0, 0, 0, 0, 830, 832, 0, 275, 0,
2228  0, 111, 210, 111, 0, 0, 114, 0, 0, 0,
2229  0, 81, 0, 0, 0, 0, 0, 114, 0, 114,
2230  0, 0, 525, 0, 276, 0, 0, 113, 0, 0,
2231  0, 0, 0, 0, 0, 0, 0, 0, 0, 865,
2232  277, 0, 0, 822, 824, 0, 830, 832, 0, 0,
2233  110, 0, 110, 367, 753, 210, 0, 0, 0, 111,
2234  0, 0, 0, 0, 111, 0, 0, 609, 264, 0,
2235  0, 0, 0, 0, 110, 114, 111, 276, 0, 0,
2236  114, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2237  0, 0, 114, 277, 0, 768, 0, 0, 0, 0,
2238  0, 0, 0, 0, 210, 0, 0, 0, 912, 111,
2239  0, 0, 110, 0, 0, 0, 914, 275, 0, 0,
2240  0, 0, 0, 0, 0, 114, 0, 0, 0, 0,
2241  0, 0, 0, 0, 0, 0, 0, 210, 0, 817,
2242  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2243  0, 0, 0, 0, 914, 210, 0, 0, 0, 0,
2244  835, 0, 0, 0, 0, 81, 110, 0, 0, 110,
2245  0, 110, 0, 0, 0, 0, 275, 0, 0, 0,
2246  0, 113, 0, 0, 0, 0, 0, 0, 0, 0,
2247  0, 0, 0, 111, 0, 0, 0, 0, 0, 81,
2248  0, 0, 0, 111, 0, 0, 0, 0, 0, 114,
2249  81, 0, 81, 870, 0, 113, 110, 0, 0, 114,
2250  0, 276, 0, 0, 110, 0, 113, 0, 113, 0,
2251  0, 0, 0, 0, 0, 0, 0, 277, 0, 0,
2252  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2253  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2254  0, 0, 911, 0, 0, 0, 0, 0, 81, 0,
2255  0, 276, 0, 81, 0, 0, 0, 0, 0, 380,
2256  0, 0, 0, 0, 113, 81, 0, 277, 523, 113,
2257  0, 0, 0, 0, 110, 927, 0, 0, 0, 0,
2258  0, 113, 0, 0, 0, 210, 0, 0, 0, 0,
2259  0, 0, 0, 264, 0, 0, 0, 0, 81, 110,
2260  0, 0, 0, 111, 0, 111, 110, 110, 0, 0,
2261  110, 0, 0, 0, 113, 0, 0, 0, 0, 114,
2262  0, 114, 0, 0, 0, 0, 0, 111, 0, 0,
2263  0, 0, 0, 0, 0, 0, 0, 110, 110, 0,
2264  0, 0, 0, 114, 0, 0, 0, 0, 0, 0,
2265  0, 110, 380, 0, 0, 0, 0, 0, 0, 0,
2266  0, 0, 0, 0, 0, 111, 0, 0, 0, 0,
2267  276, 0, 0, 0, 0, 976, 0, 0, 0, 110,
2268  0, 114, 81, 0, 0, 0, 277, 0, 0, 0,
2269  110, 0, 81, 0, 0, 0, 0, 0, 113, 0,
2270  0, 0, 0, 0, 0, 0, 0, 0, 113, 0,
2271  0, 0, 0, 0, 0, 0, 0, 0, 0, 111,
2272  0, 0, 111, 0, 111, 797, 751, 0, 0, 276,
2273  0, 0, 0, 0, 0, 114, 0, 0, 114, 110,
2274  114, 110, 0, 0, 0, 277, 0, 110, 0, 110,
2275  327, 328, 329, 330, 331, 332, 333, 334, 335, 336,
2276  337, 338, 339, 0, 0, 340, 341, 0, 0, 111,
2277  0, 0, 0, 0, 0, 0, 0, 111, 0, 0,
2278  0, 0, 0, 0, 0, 114, 0, 0, 0, 0,
2279  0, 0, 0, 114, 0, 0, 342, 0, 343, 344,
2280  345, 346, 347, 348, 349, 350, 351, 352, 0, 0,
2281  0, 0, 81, 0, 81, 0, 0, 0, 0, 0,
2282  0, 0, 0, 0, 0, 0, 0, 0, 113, 0,
2283  113, 0, 381, 0, 0, 0, 81, 0, 0, 0,
2284  0, 0, 0, 0, 0, 0, 0, 111, 382, 0,
2285  0, 0, 113, 0, 0, 0, 0, 0, 0, 0,
2286  0, 0, 0, 114, 0, 0, 0, 0, 0, 0,
2287  0, 0, 111, 0, 81, 0, 0, 0, 0, 111,
2288  111, 0, 0, 111, 0, 0, 0, 0, 114, 0,
2289  113, 0, 0, 0, 0, 114, 114, 0, 0, 114,
2290  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2291  111, 111, 0, 0, 0, 0, 0, 0, 0, 0,
2292  0, 0, 0, 0, 111, 381, 114, 114, 81, 0,
2293  0, 81, 0, 81, 0, 0, 0, 0, 0, 523,
2294  114, 382, 0, 0, 113, 0, 0, 113, 977, 113,
2295  0, 0, 111, 0, 0, 0, 0, 0, 0, 0,
2296  0, 0, 0, 111, 978, 0, 0, 0, 114, 0,
2297  0, 0, 0, 0, 0, 0, 0, 0, 81, 114,
2298  0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
2299  0, 0, 0, 0, 113, 327, -620, -620, -620, -620,
2300  332, 333, 113, 0, -620, -620, 0, 0, 0, 0,
2301  340, 341, 111, 0, 111, 0, 0, 0, 0, 0,
2302  111, 0, 111, 0, 0, 0, 0, 0, 114, 0,
2303  114, 0, 0, 0, 0, 0, 114, 0, 114, 0,
2304  0, 0, 0, 343, 344, 345, 346, 347, 348, 349,
2305  350, 351, 352, 0, 0, 0, 81, 0, 0, 0,
2306  0, 327, 328, 329, 330, 331, 332, 333, 334, 0,
2307  336, 337, 113, 0, 0, 0, 340, 341, 0, 0,
2308  0, 81, 0, 0, 0, 0, 0, 0, 81, 81,
2309  0, 0, 81, 0, 0, 0, 0, 113, 0, 0,
2310  0, 0, 0, 0, 113, 113, 0, 0, 113, 343,
2311  344, 345, 346, 347, 348, 349, 350, 351, 352, 81,
2312  81, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2313  0, 0, 0, 81, 0, 113, 113, 0, 0, 0,
2314  0, 0, 0, 0, 0, 0, 0, 0, 0, 113,
2315  327, 328, 329, 330, 331, 332, 333, 974, 0, 336,
2316  337, 81, 0, 0, 0, 340, 341, 0, 0, 0,
2317  0, 0, 81, 0, 0, 0, 0, 113, 0, 0,
2318  0, 0, 0, 0, 0, 0, 0, 0, 113, 0,
2319  0, 0, 0, 0, 0, 0, 0, 0, 343, 344,
2320  345, 346, 347, 348, 349, 350, 351, 352, 0, 0,
2321  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2322  0, 81, 0, 81, 0, 0, 0, 0, 0, 81,
2323  0, 81, 0, 0, 0, 0, 0, 113, 0, 113,
2324  0, 0, 0, 0, 0, 113, 0, 113, -619, 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, 0,
2331  43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
2332  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2333  0, 0, 0, 0, 48, 0, 0, 49, 50, 0,
2334  51, 52, 0, 53, 0, 0, 54, 55, 56, 57,
2335  58, 59, 60, 61, 62, -601, 0, 0, 0, 0,
2336  0, 0, 0, -601, -601, -601, 0, 0, -601, -601,
2337  -601, 0, -601, 0, 63, 64, 65, 0, 698, 0,
2338  0, -601, -601, -601, -601, 0, 0, -619, 0, -619,
2339  0, 0, -601, -601, 0, -601, -601, -601, -601, -601,
2340  0, 0, 327, 328, 329, 330, 331, 332, 333, 334,
2341  335, 336, 337, 338, 339, 0, 0, 340, 341, 0,
2342  0, 0, 0, -601, -601, -601, -601, -601, -601, -601,
2343  -601, -601, -601, -601, -601, -601, 0, 0, -601, -601,
2344  -601, 0, 755, -601, 0, 0, 0, 0, 342, -601,
2345  343, 344, 345, 346, 347, 348, 349, 350, 351, 352,
2346  0, 0, 0, -601, 0, 0, -601, 0, -106, -601,
2347  -601, -601, -601, -601, -601, -601, -601, -601, -601, -601,
2348  -601, 0, 0, 0, 0, -601, -601, -601, -601, -601,
2349  -504, 0, -601, -601, -601, 0, -601, 0, -504, -504,
2350  -504, 0, 0, -504, -504, -504, 0, -504, 0, 0,
2351  0, 0, 0, 0, 0, -504, 0, -504, -504, -504,
2352  0, 0, 0, 0, 0, 0, 0, -504, -504, 0,
2353  -504, -504, -504, -504, -504, 0, 0, 327, 328, 329,
2354  330, 331, 332, 333, 334, 335, 336, 337, 338, 339,
2355  0, 0, 340, 341, 0, 0, 0, 0, -504, -504,
2356  -504, -504, -504, -504, -504, -504, -504, -504, -504, -504,
2357  -504, 0, 0, -504, -504, -504, 0, -504, -504, 0,
2358  0, 0, 0, 342, -504, 343, 344, 345, 346, 347,
2359  348, 349, 350, 351, 352, 0, 0, 0, -504, 0,
2360  0, -504, 0, -504, -504, -504, -504, -504, -504, -504,
2361  -504, -504, -504, -504, -504, -504, 0, 0, 0, 0,
2362  0, -504, -504, -504, -504, -507, 0, -504, -504, -504,
2363  0, -504, 0, -507, -507, -507, 0, 0, -507, -507,
2364  -507, 0, -507, 0, 0, 0, 0, 0, 0, 0,
2365  -507, 0, -507, -507, -507, 0, 0, 0, 0, 0,
2366  0, 0, -507, -507, 0, -507, -507, -507, -507, -507,
2367  0, 0, 327, 328, 329, 330, 331, 332, 333, 334,
2368  335, 336, 337, -620, -620, 0, 0, 340, 341, 0,
2369  0, 0, 0, -507, -507, -507, -507, -507, -507, -507,
2370  -507, -507, -507, -507, -507, -507, 0, 0, -507, -507,
2371  -507, 0, -507, -507, 0, 0, 0, 0, 0, -507,
2372  343, 344, 345, 346, 347, 348, 349, 350, 351, 352,
2373  0, 0, 0, -507, 0, 0, -507, 0, -507, -507,
2374  -507, -507, -507, -507, -507, -507, -507, -507, -507, -507,
2375  -507, 0, 0, 0, 0, 0, -507, -507, -507, -507,
2376  -602, 0, -507, -507, -507, 0, -507, 0, -602, -602,
2377  -602, 0, 0, -602, -602, -602, 0, -602, 0, 0,
2378  0, 0, 0, 0, 0, 0, -602, -602, -602, -602,
2379  0, 0, 0, 0, 0, 0, 0, -602, -602, 0,
2380  -602, -602, -602, -602, -602, 0, 0, 0, 0, 0,
2381  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2382  0, 0, 0, 0, 0, 0, 0, 0, -602, -602,
2383  -602, -602, -602, -602, -602, -602, -602, -602, -602, -602,
2384  -602, 0, 0, -602, -602, -602, 0, 0, -602, 0,
2385  0, 0, 0, 0, -602, 0, 0, 0, 0, 0,
2386  0, 0, 0, 0, 0, 0, 0, 0, -602, 0,
2387  0, -602, 0, 0, -602, -602, -602, -602, -602, -602,
2388  -602, -602, -602, -602, -602, -602, 0, 0, 0, 0,
2389  -602, -602, -602, -602, -602, -603, 0, -602, -602, -602,
2390  0, -602, 0, -603, -603, -603, 0, 0, -603, -603,
2391  -603, 0, -603, 0, 0, 0, 0, 0, 0, 0,
2392  0, -603, -603, -603, -603, 0, 0, 0, 0, 0,
2393  0, 0, -603, -603, 0, -603, -603, -603, -603, -603,
2394  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2395  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2396  0, 0, 0, -603, -603, -603, -603, -603, -603, -603,
2397  -603, -603, -603, -603, -603, -603, 0, 0, -603, -603,
2398  -603, 0, 0, -603, 0, 0, 0, 0, 0, -603,
2399  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2400  0, 0, 0, -603, 0, 0, -603, 0, 0, -603,
2401  -603, -603, -603, -603, -603, -603, -603, -603, -603, -603,
2402  -603, 0, 0, 0, 0, -603, -603, -603, -603, -603,
2403  -293, 0, -603, -603, -603, 0, -603, 0, -293, -293,
2404  -293, 0, 0, -293, -293, -293, 0, -293, 0, 0,
2405  0, 0, 0, 0, 0, 0, 0, -293, -293, -293,
2406  0, 0, 0, 0, 0, 0, 0, -293, -293, 0,
2407  -293, -293, -293, -293, -293, 0, 0, 0, 0, 0,
2408  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2409  0, 0, 0, 0, 0, 0, 0, 0, -293, -293,
2410  -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
2411  -293, 0, 0, -293, -293, -293, 0, 756, -293, 0,
2412  0, 0, 0, 0, -293, 0, 0, 0, 0, 0,
2413  0, 0, 0, 0, 0, 0, 0, 0, -293, 0,
2414  0, -293, 0, -108, -293, -293, -293, -293, -293, -293,
2415  -293, -293, -293, -293, -293, -293, 0, 0, 0, 0,
2416  0, -293, -293, -293, -293, -431, 0, -293, -293, -293,
2417  0, -293, 0, -431, -431, -431, 0, 0, -431, -431,
2418  -431, 0, -431, 0, 0, 0, 0, 0, 0, 0,
2419  0, -431, -431, -431, 0, 0, 0, 0, 0, 0,
2420  0, 0, -431, -431, 0, -431, -431, -431, -431, -431,
2421  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2422  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2423  0, 0, 0, -431, -431, -431, -431, -431, -431, -431,
2424  -431, -431, -431, -431, -431, -431, 0, 0, -431, -431,
2425  -431, 0, 0, -431, 0, 0, 0, 0, 0, -431,
2426  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2427  0, 0, 0, -431, 0, 0, 0, 0, 0, -431,
2428  0, -431, -431, -431, -431, -431, -431, -431, -431, -431,
2429  -431, 0, 0, 0, 0, -431, -431, -431, -431, -431,
2430  -285, 227, -431, -431, -431, 0, -431, 0, -285, -285,
2431  -285, 0, 0, -285, -285, -285, 0, -285, 0, 0,
2432  0, 0, 0, 0, 0, 0, 0, -285, -285, -285,
2433  0, 0, 0, 0, 0, 0, 0, -285, -285, 0,
2434  -285, -285, -285, -285, -285, 0, 0, 0, 0, 0,
2435  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2436  0, 0, 0, 0, 0, 0, 0, 0, -285, -285,
2437  -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
2438  -285, 0, 0, -285, -285, -285, 0, 0, -285, 0,
2439  0, 0, 0, 0, -285, 0, 0, 0, 0, 0,
2440  0, 0, 0, 0, 0, 0, 0, 0, -285, 0,
2441  0, -285, 0, 0, -285, -285, -285, -285, -285, -285,
2442  -285, -285, -285, -285, -285, -285, 0, 0, 0, 0,
2443  0, -285, -285, -285, -285, -421, 0, -285, -285, -285,
2444  0, -285, 0, -421, -421, -421, 0, 0, -421, -421,
2445  -421, 0, -421, 0, 0, 0, 0, 0, 0, 0,
2446  0, -421, -421, -421, 0, 0, 0, 0, 0, 0,
2447  0, 0, -421, -421, 0, -421, -421, -421, -421, -421,
2448  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2449  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2450  0, 0, 0, -421, -421, -421, -421, -421, -421, -421,
2451  -421, -421, -421, -421, -421, -421, 0, 0, -421, -421,
2452  -421, 0, 0, -421, 0, 0, 0, 0, 0, -421,
2453  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2454  0, 0, 0, -421, 0, 0, 0, 0, 0, -421,
2455  0, -421, -421, -421, -421, -421, -421, -421, -421, -421,
2456  -421, 0, 0, 0, 0, -421, -421, -421, -421, -421,
2457  -300, -421, -421, -421, -421, 0, -421, 0, -300, -300,
2458  -300, 0, 0, -300, -300, -300, 0, -300, 0, 0,
2459  0, 0, 0, 0, 0, 0, 0, -300, -300, 0,
2460  0, 0, 0, 0, 0, 0, 0, -300, -300, 0,
2461  -300, -300, -300, -300, -300, 0, 0, 0, 0, 0,
2462  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2463  0, 0, 0, 0, 0, 0, 0, 0, -300, -300,
2464  -300, -300, -300, -300, -300, -300, -300, -300, -300, -300,
2465  -300, 0, 0, -300, -300, -300, 0, 0, -300, 0,
2466  0, 0, 0, 0, -300, 0, 0, 0, 0, 0,
2467  0, 0, 0, 0, 0, 0, 0, 0, -300, 0,
2468  0, 0, 0, 0, -300, 0, -300, -300, -300, -300,
2469  -300, -300, -300, -300, -300, -300, 0, 0, 0, 0,
2470  0, -300, -300, -300, -300, -601, 224, -300, -300, -300,
2471  0, -300, 0, -601, -601, -601, 0, 0, 0, -601,
2472  -601, 0, -601, 0, 0, 0, 0, 0, 0, 0,
2473  0, -601, 0, 0, 0, 0, 0, 0, 0, 0,
2474  0, 0, -601, -601, 0, -601, -601, -601, -601, -601,
2475  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2476  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2477  0, 0, 0, -601, -601, -601, -601, -601, -601, -601,
2478  -601, -601, -601, -601, -601, -601, 0, 0, -601, -601,
2479  -601, 0, 700, 0, 0, 0, 0, 0, 0, 0,
2480  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2481  0, 0, 0, -601, 0, 0, 0, 0, -106, -601,
2482  0, -601, -601, -601, -601, -601, -601, -601, -601, -601,
2483  -601, 0, 0, 0, 0, -601, -601, -601, -601, -97,
2484  -293, 0, -601, 0, -601, 0, -601, 0, -293, -293,
2485  -293, 0, 0, 0, -293, -293, 0, -293, 0, 0,
2486  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2487  0, 0, 0, 0, 0, 0, 0, -293, -293, 0,
2488  -293, -293, -293, -293, -293, 0, 0, 0, 0, 0,
2489  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2490  0, 0, 0, 0, 0, 0, 0, 0, -293, -293,
2491  -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
2492  -293, 0, 0, -293, -293, -293, 0, 701, 0, 0,
2493  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2494  0, 0, 0, 0, 0, 0, 0, 0, -293, 0,
2495  0, 0, 0, -108, -293, 0, -293, -293, -293, -293,
2496  -293, -293, -293, -293, -293, -293, 0, 0, 0, 0,
2497  0, -293, -293, -293, -99, 0, 0, -293, 0, -293,
2498  248, -293, 5, 6, 7, 8, 9, -619, -619, -619,
2499  10, 11, 0, 0, -619, 12, 0, 13, 14, 15,
2500  16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
2501  21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
2502  0, 0, 0, 0, 28, 29, 249, 31, 32, 33,
2503  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2504  0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
2505  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2506  0, 0, 0, 0, 0, 48, 0, 0, 49, 50,
2507  0, 51, 52, 0, 53, 0, 0, 54, 55, 56,
2508  57, 58, 59, 60, 61, 62, 0, 0, 0, 0,
2509  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2510  0, 0, 0, 0, 0, 63, 64, 65, 0, 0,
2511  0, 0, 0, 0, 0, 0, 0, 0, -619, 248,
2512  -619, 5, 6, 7, 8, 9, 0, 0, -619, 10,
2513  11, 0, -619, -619, 12, 0, 13, 14, 15, 16,
2514  17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
2515  22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
2516  0, 0, 0, 28, 29, 249, 31, 32, 33, 34,
2517  35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
2518  43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
2519  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2520  0, 0, 0, 0, 48, 0, 0, 49, 50, 0,
2521  51, 52, 0, 53, 0, 0, 54, 55, 56, 57,
2522  58, 59, 60, 61, 62, 0, 0, 0, 0, 0,
2523  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2524  0, 0, 0, 0, 63, 64, 65, 0, 0, 0,
2525  0, 0, 0, 0, 0, 0, 0, -619, 248, -619,
2526  5, 6, 7, 8, 9, 0, 0, -619, 10, 11,
2527  0, 0, -619, 12, -619, 13, 14, 15, 16, 17,
2528  18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
2529  23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
2530  0, 0, 28, 29, 249, 31, 32, 33, 34, 35,
2531  36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
2532  44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
2533  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2534  0, 0, 0, 48, 0, 0, 49, 50, 0, 51,
2535  52, 0, 53, 0, 0, 54, 55, 56, 57, 58,
2536  59, 60, 61, 62, 0, 0, 0, 0, 0, 0,
2537  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2538  0, 0, 0, 63, 64, 65, 0, 0, 0, 0,
2539  0, 0, 0, 0, 0, 0, -619, 248, -619, 5,
2540  6, 7, 8, 9, 0, 0, -619, 10, 11, 0,
2541  0, -619, 12, 0, 13, 14, 15, 16, 17, 18,
2542  19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
2543  24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
2544  0, 28, 29, 249, 31, 32, 33, 34, 35, 36,
2545  37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
2546  45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
2547  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2548  0, 0, 48, 0, 0, 49, 50, 0, 51, 52,
2549  0, 53, 0, 0, 54, 55, 56, 57, 58, 59,
2550  60, 61, 62, 0, 0, 0, 0, 0, 0, 0,
2551  248, 0, 5, 6, 7, 8, 9, 0, -619, -619,
2552  10, 11, 63, 64, 65, 12, 0, 13, 14, 15,
2553  16, 17, 18, 19, 0, -619, 0, -619, 0, 20,
2554  21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
2555  0, 0, 0, 0, 28, 29, 249, 31, 32, 33,
2556  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2557  0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
2558  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2559  0, 0, 0, 0, 0, 48, 0, 0, 49, 50,
2560  0, 51, 52, 0, 53, 0, 0, 54, 55, 56,
2561  57, 58, 59, 60, 61, 62, 0, 0, 0, 0,
2562  0, 0, 0, 248, 0, 5, 6, 7, 8, 9,
2563  0, 0, 0, 10, 11, 63, 64, 65, 12, 0,
2564  13, 14, 15, 16, 17, 18, 19, 0, -619, 0,
2565  -619, 0, 20, 21, 22, 23, 24, 25, 26, 0,
2566  0, 27, 0, 0, 0, 0, 0, 28, 29, 249,
2567  31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2568  0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
2569  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2570  0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
2571  0, 250, 50, 0, 51, 52, 0, 53, 0, 0,
2572  54, 55, 56, 57, 58, 59, 60, 61, 62, 0,
2573  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2574  0, 0, 0, 0, 0, 0, 0, 0, 63, 64,
2575  65, 0, 0, 0, 0, 0, 0, 0, 0, -619,
2576  0, -619, 248, -619, 5, 6, 7, 8, 9, 0,
2577  0, 0, 10, 11, 0, 0, 0, 12, 0, 13,
2578  14, 15, 16, 17, 18, 19, 0, 0, 0, 0,
2579  0, 20, 21, 22, 23, 24, 25, 26, 0, 0,
2580  27, 0, 0, 0, 0, 0, 28, 29, 249, 31,
2581  32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
2582  41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
2583  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2584  0, 0, 0, 0, 0, 0, 0, 48, 0, 0,
2585  49, 50, 0, 51, 52, 0, 53, 0, 0, 54,
2586  55, 56, 57, 58, 59, 60, 61, 62, 0, 0,
2587  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2588  0, 0, 0, 0, 0, 0, 0, 63, 64, 65,
2589  0, 0, 0, 0, 0, 0, 0, 0, -619, 0,
2590  -619, 248, -619, 5, 6, 7, 8, 9, 0, 0,
2591  0, 10, 11, 0, 0, 0, 12, 0, 13, 14,
2592  15, 16, 17, 18, 19, 0, 0, 0, 0, 0,
2593  20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
2594  0, 0, 0, 0, 0, 28, 29, 249, 31, 32,
2595  33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
2596  42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
2597  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2598  0, 0, 0, 0, 0, 0, 48, 0, 0, 49,
2599  50, 0, 51, 52, 0, 53, 0, 0, 54, 55,
2600  56, 57, 58, 59, 60, 61, 62, 0, 0, 0,
2601  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2602  0, 0, 0, 0, 0, 0, 63, 64, 65, 0,
2603  0, -619, 4, 0, 5, 6, 7, 8, 9, -619,
2604  0, -619, 10, 11, 0, 0, 0, 12, 0, 13,
2605  14, 15, 16, 17, 18, 19, 0, 0, 0, 0,
2606  0, 20, 21, 22, 23, 24, 25, 26, 0, 0,
2607  27, 0, 0, 0, 0, 0, 28, 29, 30, 31,
2608  32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
2609  41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
2610  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2611  0, 0, 0, 0, 0, 0, 0, 48, 0, 0,
2612  49, 50, 0, 51, 52, 0, 53, 0, 0, 54,
2613  55, 56, 57, 58, 59, 60, 61, 62, 0, 0,
2614  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2615  0, 0, 0, 0, 0, 0, 0, 63, 64, 65,
2616  0, 0, -619, 0, 0, 0, 0, 0, 0, 0,
2617  -619, 248, -619, 5, 6, 7, 8, 9, 0, 0,
2618  -619, 10, 11, 0, 0, 0, 12, 0, 13, 14,
2619  15, 16, 17, 18, 19, 0, 0, 0, 0, 0,
2620  20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
2621  0, 0, 0, 0, 0, 28, 29, 249, 31, 32,
2622  33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
2623  42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
2624  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2625  0, 0, 0, 0, 0, 0, 48, 0, 0, 49,
2626  50, 0, 51, 52, 0, 53, 0, 0, 54, 55,
2627  56, 57, 58, 59, 60, 61, 62, 0, 0, 0,
2628  0, 0, 0, 0, 248, 0, 5, 6, 7, 8,
2629  9, 0, 0, 0, 10, 11, 63, 64, 65, 12,
2630  0, 13, 14, 15, 16, 17, 18, 19, 0, -619,
2631  0, -619, 0, 20, 21, 22, 23, 24, 25, 26,
2632  0, 0, 27, 0, 0, 0, 0, 0, 28, 29,
2633  249, 31, 32, 33, 34, 35, 36, 37, 38, 39,
2634  40, 0, 41, 42, 0, 43, 44, 45, 0, 46,
2635  47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2636  0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
2637  0, 0, 49, 50, 0, 51, 52, 0, 53, 0,
2638  0, 54, 55, 56, 57, 58, 59, 60, 61, 62,
2639  0, -619, 0, 0, 0, 0, 0, 0, 0, 5,
2640  6, 7, 0, 9, 0, 0, 0, 10, 11, 63,
2641  64, 65, 12, 0, 13, 14, 15, 16, 17, 18,
2642  19, 0, -619, 0, -619, 0, 20, 21, 22, 23,
2643  24, 25, 26, 0, 0, 200, 0, 0, 0, 0,
2644  0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
2645  37, 38, 39, 40, 201, 41, 42, 0, 43, 44,
2646  45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
2647  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2648  0, 0, 202, 0, 0, 203, 50, 0, 51, 52,
2649  0, 204, 205, 206, 54, 55, 56, 57, 58, 59,
2650  60, 61, 62, 0, 0, 0, 0, 0, 0, 0,
2651  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2652  10, 11, 63, 207, 65, 12, 0, 13, 14, 15,
2653  16, 17, 18, 19, 0, 0, 0, 231, 0, 20,
2654  21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
2655  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
2656  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2657  0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
2658  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2659  0, 0, 0, 0, 0, 202, 0, 0, 203, 50,
2660  0, 51, 52, 0, 0, 0, 0, 54, 55, 56,
2661  57, 58, 59, 60, 61, 62, 0, 0, 0, 0,
2662  0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
2663  0, 0, 0, 10, 11, 63, 64, 65, 12, 0,
2664  13, 14, 15, 16, 17, 18, 19, 0, 302, 0,
2665  303, 0, 20, 21, 22, 23, 24, 25, 26, 0,
2666  0, 27, 0, 0, 0, 0, 0, 0, 29, 0,
2667  0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2668  0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
2669  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2670  0, 0, 0, 0, 0, 0, 0, 0, 202, 0,
2671  0, 203, 50, 0, 51, 52, 0, 0, 0, 0,
2672  54, 55, 56, 57, 58, 59, 60, 61, 62, 0,
2673  0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
2674  7, 8, 9, 0, 0, 0, 10, 11, 63, 64,
2675  65, 12, 0, 13, 14, 15, 16, 17, 18, 19,
2676  0, 0, 0, 231, 0, 20, 21, 22, 23, 24,
2677  25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
2678  28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
2679  38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
2680  0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
2681  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2682  0, 48, 0, 0, 49, 50, 0, 51, 52, 0,
2683  53, 0, 0, 54, 55, 56, 57, 58, 59, 60,
2684  61, 62, 0, 0, 0, 0, 0, 0, 0, 0,
2685  0, 5, 6, 7, 8, 9, 0, 0, 0, 10,
2686  11, 63, 64, 65, 12, 0, 13, 14, 15, 16,
2687  17, 18, 19, 0, 498, 0, 0, 0, 20, 21,
2688  22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
2689  0, 0, 0, 28, 29, 249, 31, 32, 33, 34,
2690  35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
2691  43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
2692  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2693  0, 0, 0, 0, 48, 0, 0, 49, 50, 0,
2694  51, 52, 0, 53, 0, 0, 54, 55, 56, 57,
2695  58, 59, 60, 61, 62, 0, 0, 0, 0, 0,
2696  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2697  0, 0, 0, 0, 63, 64, 65, 0, 0, 0,
2698  0, 0, 0, 0, 0, 0, 0, 498, 118, 119,
2699  120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
2700  130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
2701  140, 141, 0, 0, 0, 142, 143, 144, 384, 385,
2702  386, 387, 149, 150, 151, 0, 0, 0, 0, 0,
2703  152, 153, 154, 155, 388, 389, 390, 391, 160, 37,
2704  38, 392, 40, 0, 0, 0, 0, 0, 0, 0,
2705  0, 162, 163, 164, 165, 166, 167, 168, 169, 170,
2706  0, 0, 171, 172, 0, 0, 173, 174, 175, 176,
2707  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2708  177, 178, 0, 0, 0, 0, 0, 0, 0, 0,
2709  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2710  0, 179, 180, 181, 182, 183, 184, 185, 186, 187,
2711  188, 0, 189, 190, 0, 0, 0, 0, 0, 0,
2712  191, 393, 118, 119, 120, 121, 122, 123, 124, 125,
2713  126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
2714  136, 137, 138, 139, 140, 141, 0, 0, 0, 142,
2715  143, 144, 145, 146, 147, 148, 149, 150, 151, 0,
2716  0, 0, 0, 0, 152, 153, 154, 155, 156, 157,
2717  158, 159, 160, 280, 281, 161, 282, 0, 0, 0,
2718  0, 0, 0, 0, 0, 162, 163, 164, 165, 166,
2719  167, 168, 169, 170, 0, 0, 171, 172, 0, 0,
2720  173, 174, 175, 176, 0, 0, 0, 0, 0, 0,
2721  0, 0, 0, 0, 177, 178, 0, 0, 0, 0,
2722  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2723  0, 0, 0, 0, 0, 179, 180, 181, 182, 183,
2724  184, 185, 186, 187, 188, 0, 189, 190, 0, 0,
2725  0, 0, 0, 0, 191, 118, 119, 120, 121, 122,
2726  123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
2727  133, 134, 135, 136, 137, 138, 139, 140, 141, 0,
2728  0, 0, 142, 143, 144, 145, 146, 147, 148, 149,
2729  150, 151, 0, 0, 0, 0, 0, 152, 153, 154,
2730  155, 156, 157, 158, 159, 160, 233, 0, 161, 0,
2731  0, 0, 0, 0, 0, 0, 0, 0, 162, 163,
2732  164, 165, 166, 167, 168, 169, 170, 0, 0, 171,
2733  172, 0, 0, 173, 174, 175, 176, 0, 0, 0,
2734  0, 0, 0, 0, 0, 0, 0, 177, 178, 0,
2735  0, 55, 0, 0, 0, 0, 0, 0, 0, 0,
2736  0, 0, 0, 0, 0, 0, 0, 0, 179, 180,
2737  181, 182, 183, 184, 185, 186, 187, 188, 0, 189,
2738  190, 0, 0, 0, 0, 0, 0, 191, 118, 119,
2739  120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
2740  130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
2741  140, 141, 0, 0, 0, 142, 143, 144, 145, 146,
2742  147, 148, 149, 150, 151, 0, 0, 0, 0, 0,
2743  152, 153, 154, 155, 156, 157, 158, 159, 160, 0,
2744  0, 161, 0, 0, 0, 0, 0, 0, 0, 0,
2745  0, 162, 163, 164, 165, 166, 167, 168, 169, 170,
2746  0, 0, 171, 172, 0, 0, 173, 174, 175, 176,
2747  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2748  177, 178, 0, 0, 55, 0, 0, 0, 0, 0,
2749  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2750  0, 179, 180, 181, 182, 183, 184, 185, 186, 187,
2751  188, 0, 189, 190, 0, 0, 0, 0, 0, 0,
2752  191, 118, 119, 120, 121, 122, 123, 124, 125, 126,
2753  127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
2754  137, 138, 139, 140, 141, 0, 0, 0, 142, 143,
2755  144, 145, 146, 147, 148, 149, 150, 151, 0, 0,
2756  0, 0, 0, 152, 153, 154, 155, 156, 157, 158,
2757  159, 160, 0, 0, 161, 0, 0, 0, 0, 0,
2758  0, 0, 0, 0, 162, 163, 164, 165, 166, 167,
2759  168, 169, 170, 0, 0, 171, 172, 0, 0, 173,
2760  174, 175, 176, 0, 0, 0, 0, 0, 0, 0,
2761  0, 0, 0, 177, 178, 0, 0, 0, 0, 0,
2762  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2763  0, 0, 0, 0, 179, 180, 181, 182, 183, 184,
2764  185, 186, 187, 188, 0, 189, 190, 5, 6, 7,
2765  0, 9, 0, 191, 0, 10, 11, 0, 0, 0,
2766  12, 0, 13, 14, 15, 238, 239, 18, 19, 0,
2767  0, 0, 0, 0, 240, 241, 242, 23, 24, 25,
2768  26, 0, 0, 200, 0, 0, 0, 0, 0, 0,
2769  268, 0, 0, 32, 33, 34, 35, 36, 37, 38,
2770  39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
2771  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2772  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2773  269, 0, 0, 203, 50, 0, 51, 52, 0, 0,
2774  0, 0, 54, 55, 56, 57, 58, 59, 60, 61,
2775  62, 0, 0, 0, 0, 0, 5, 6, 7, 0,
2776  9, 0, 0, 0, 10, 11, 0, 0, 0, 12,
2777  270, 13, 14, 15, 238, 239, 18, 19, 271, 0,
2778  0, 0, 0, 240, 241, 242, 23, 24, 25, 26,
2779  0, 0, 200, 0, 0, 0, 0, 0, 0, 268,
2780  0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
2781  40, 0, 41, 42, 0, 43, 44, 45, 0, 0,
2782  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2783  0, 0, 0, 0, 0, 0, 0, 0, 0, 269,
2784  0, 0, 203, 50, 0, 51, 52, 0, 0, 0,
2785  0, 54, 55, 56, 57, 58, 59, 60, 61, 62,
2786  0, 0, 0, 0, 0, 5, 6, 7, 8, 9,
2787  0, 0, 0, 10, 11, 0, 0, 0, 12, 270,
2788  13, 14, 15, 16, 17, 18, 19, 518, 0, 0,
2789  0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
2790  0, 27, 0, 0, 0, 0, 0, 28, 29, 30,
2791  31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2792  0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
2793  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2794  0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
2795  0, 49, 50, 0, 51, 52, 0, 53, 0, 0,
2796  54, 55, 56, 57, 58, 59, 60, 61, 62, 0,
2797  0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
2798  7, 0, 9, 0, 0, 0, 10, 11, 63, 64,
2799  65, 12, 0, 13, 14, 15, 16, 17, 18, 19,
2800  0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
2801  25, 26, 0, 0, 200, 0, 0, 0, 0, 0,
2802  0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
2803  38, 39, 40, 201, 41, 42, 0, 43, 44, 45,
2804  0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
2805  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2806  0, 202, 0, 0, 203, 50, 0, 51, 52, 0,
2807  204, 205, 206, 54, 55, 56, 57, 58, 59, 60,
2808  61, 62, 0, 0, 0, 0, 0, 0, 0, 0,
2809  0, 5, 6, 7, 8, 9, 0, 0, 0, 10,
2810  11, 63, 207, 65, 12, 0, 13, 14, 15, 16,
2811  17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
2812  22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
2813  0, 0, 0, 28, 29, 0, 31, 32, 33, 34,
2814  35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
2815  43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
2816  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2817  0, 0, 0, 0, 48, 0, 0, 49, 50, 0,
2818  51, 52, 0, 53, 0, 0, 54, 55, 56, 57,
2819  58, 59, 60, 61, 62, 0, 0, 0, 0, 0,
2820  0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
2821  0, 0, 10, 11, 63, 64, 65, 12, 0, 13,
2822  14, 15, 238, 239, 18, 19, 0, 0, 0, 0,
2823  0, 240, 241, 242, 23, 24, 25, 26, 0, 0,
2824  200, 0, 0, 0, 0, 0, 0, 29, 0, 0,
2825  32, 33, 34, 35, 36, 37, 38, 39, 40, 201,
2826  41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
2827  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2828  0, 0, 0, 0, 0, 0, 0, 202, 0, 0,
2829  203, 50, 0, 51, 52, 0, 608, 205, 206, 54,
2830  55, 56, 57, 58, 59, 60, 61, 62, 0, 0,
2831  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
2832  0, 9, 0, 0, 0, 10, 11, 63, 207, 65,
2833  12, 0, 13, 14, 15, 238, 239, 18, 19, 0,
2834  0, 0, 0, 0, 240, 241, 242, 23, 24, 25,
2835  26, 0, 0, 200, 0, 0, 0, 0, 0, 0,
2836  29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
2837  39, 40, 201, 41, 42, 0, 43, 44, 45, 0,
2838  46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
2839  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2840  202, 0, 0, 203, 50, 0, 51, 52, 0, 204,
2841  205, 0, 54, 55, 56, 57, 58, 59, 60, 61,
2842  62, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2843  5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
2844  63, 207, 65, 12, 0, 13, 14, 15, 238, 239,
2845  18, 19, 0, 0, 0, 0, 0, 240, 241, 242,
2846  23, 24, 25, 26, 0, 0, 200, 0, 0, 0,
2847  0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
2848  36, 37, 38, 39, 40, 201, 41, 42, 0, 43,
2849  44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
2850  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2851  0, 0, 0, 202, 0, 0, 203, 50, 0, 51,
2852  52, 0, 0, 205, 206, 54, 55, 56, 57, 58,
2853  59, 60, 61, 62, 0, 0, 0, 0, 0, 0,
2854  0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
2855  0, 10, 11, 63, 207, 65, 12, 0, 13, 14,
2856  15, 238, 239, 18, 19, 0, 0, 0, 0, 0,
2857  240, 241, 242, 23, 24, 25, 26, 0, 0, 200,
2858  0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
2859  33, 34, 35, 36, 37, 38, 39, 40, 201, 41,
2860  42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
2861  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2862  0, 0, 0, 0, 0, 0, 202, 0, 0, 203,
2863  50, 0, 51, 52, 0, 608, 205, 0, 54, 55,
2864  56, 57, 58, 59, 60, 61, 62, 0, 0, 0,
2865  0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
2866  9, 0, 0, 0, 10, 11, 63, 207, 65, 12,
2867  0, 13, 14, 15, 238, 239, 18, 19, 0, 0,
2868  0, 0, 0, 240, 241, 242, 23, 24, 25, 26,
2869  0, 0, 200, 0, 0, 0, 0, 0, 0, 29,
2870  0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
2871  40, 201, 41, 42, 0, 43, 44, 45, 0, 46,
2872  47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2873  0, 0, 0, 0, 0, 0, 0, 0, 0, 202,
2874  0, 0, 203, 50, 0, 51, 52, 0, 0, 205,
2875  0, 54, 55, 56, 57, 58, 59, 60, 61, 62,
2876  0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
2877  6, 7, 0, 9, 0, 0, 0, 10, 11, 63,
2878  207, 65, 12, 0, 13, 14, 15, 16, 17, 18,
2879  19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
2880  24, 25, 26, 0, 0, 200, 0, 0, 0, 0,
2881  0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
2882  37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
2883  45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
2884  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2885  0, 0, 202, 0, 0, 203, 50, 0, 51, 52,
2886  0, 512, 0, 0, 54, 55, 56, 57, 58, 59,
2887  60, 61, 62, 0, 0, 0, 0, 0, 0, 0,
2888  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2889  10, 11, 63, 207, 65, 12, 0, 13, 14, 15,
2890  238, 239, 18, 19, 0, 0, 0, 0, 0, 240,
2891  241, 242, 23, 24, 25, 26, 0, 0, 200, 0,
2892  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
2893  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2894  0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
2895  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2896  0, 0, 0, 0, 0, 202, 0, 0, 203, 50,
2897  0, 51, 52, 0, 204, 0, 0, 54, 55, 56,
2898  57, 58, 59, 60, 61, 62, 0, 0, 0, 0,
2899  0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
2900  0, 0, 0, 10, 11, 63, 207, 65, 12, 0,
2901  13, 14, 15, 238, 239, 18, 19, 0, 0, 0,
2902  0, 0, 240, 241, 242, 23, 24, 25, 26, 0,
2903  0, 200, 0, 0, 0, 0, 0, 0, 29, 0,
2904  0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2905  0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
2906  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2907  0, 0, 0, 0, 0, 0, 0, 0, 202, 0,
2908  0, 203, 50, 0, 51, 52, 0, 816, 0, 0,
2909  54, 55, 56, 57, 58, 59, 60, 61, 62, 0,
2910  0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
2911  7, 0, 9, 0, 0, 0, 10, 11, 63, 207,
2912  65, 12, 0, 13, 14, 15, 238, 239, 18, 19,
2913  0, 0, 0, 0, 0, 240, 241, 242, 23, 24,
2914  25, 26, 0, 0, 200, 0, 0, 0, 0, 0,
2915  0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
2916  38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
2917  0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
2918  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2919  0, 202, 0, 0, 203, 50, 0, 51, 52, 0,
2920  512, 0, 0, 54, 55, 56, 57, 58, 59, 60,
2921  61, 62, 0, 0, 0, 0, 0, 0, 0, 0,
2922  0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
2923  11, 63, 207, 65, 12, 0, 13, 14, 15, 238,
2924  239, 18, 19, 0, 0, 0, 0, 0, 240, 241,
2925  242, 23, 24, 25, 26, 0, 0, 200, 0, 0,
2926  0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
2927  35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
2928  43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
2929  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2930  0, 0, 0, 0, 202, 0, 0, 203, 50, 0,
2931  51, 52, 0, 608, 0, 0, 54, 55, 56, 57,
2932  58, 59, 60, 61, 62, 0, 0, 0, 0, 0,
2933  0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
2934  0, 0, 10, 11, 63, 207, 65, 12, 0, 13,
2935  14, 15, 238, 239, 18, 19, 0, 0, 0, 0,
2936  0, 240, 241, 242, 23, 24, 25, 26, 0, 0,
2937  200, 0, 0, 0, 0, 0, 0, 29, 0, 0,
2938  32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
2939  41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
2940  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2941  0, 0, 0, 0, 0, 0, 0, 202, 0, 0,
2942  203, 50, 0, 51, 52, 0, 0, 0, 0, 54,
2943  55, 56, 57, 58, 59, 60, 61, 62, 0, 0,
2944  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
2945  0, 9, 0, 0, 0, 10, 11, 63, 207, 65,
2946  12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
2947  0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
2948  26, 0, 0, 27, 0, 0, 0, 0, 0, 0,
2949  29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
2950  39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
2951  46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
2952  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2953  202, 0, 0, 203, 50, 0, 51, 52, 0, 0,
2954  0, 0, 54, 55, 56, 57, 58, 59, 60, 61,
2955  62, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2956  5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
2957  63, 64, 65, 12, 0, 13, 14, 15, 16, 17,
2958  18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
2959  23, 24, 25, 26, 0, 0, 200, 0, 0, 0,
2960  0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
2961  36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
2962  44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
2963  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2964  0, 0, 0, 202, 0, 0, 203, 50, 0, 51,
2965  52, 0, 0, 0, 0, 54, 55, 56, 57, 58,
2966  59, 60, 61, 62, 0, 0, 0, 0, 0, 0,
2967  0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
2968  0, 10, 11, 63, 207, 65, 12, 0, 13, 14,
2969  15, 238, 239, 18, 19, 0, 0, 0, 0, 0,
2970  240, 241, 242, 23, 24, 25, 26, 0, 0, 200,
2971  0, 0, 0, 0, 0, 0, 268, 0, 0, 32,
2972  33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
2973  42, 0, 43, 44, 45, 0, 0, 0, 0, 0,
2974  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2975  0, 0, 0, 0, 0, 0, 269, 0, 0, 323,
2976  50, 0, 51, 52, 0, 324, 0, 0, 54, 55,
2977  56, 57, 58, 59, 60, 61, 62, 0, 0, 0,
2978  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2979  10, 11, 0, 0, 0, 12, 270, 13, 14, 15,
2980  238, 239, 18, 19, 0, 0, 0, 0, 0, 240,
2981  241, 242, 23, 24, 25, 26, 0, 0, 200, 0,
2982  0, 0, 0, 0, 0, 268, 0, 0, 32, 33,
2983  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2984  0, 43, 44, 45, 0, 0, 0, 0, 0, 0,
2985  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2986  0, 0, 0, 0, 0, 365, 0, 0, 49, 50,
2987  0, 51, 52, 0, 53, 0, 0, 54, 55, 56,
2988  57, 58, 59, 60, 61, 62, 0, 0, 0, 0,
2989  0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
2990  11, 0, 0, 0, 12, 270, 13, 14, 15, 238,
2991  239, 18, 19, 0, 0, 0, 0, 0, 240, 241,
2992  242, 23, 24, 25, 26, 0, 0, 200, 0, 0,
2993  0, 0, 0, 0, 268, 0, 0, 32, 33, 34,
2994  373, 36, 37, 38, 374, 40, 0, 41, 42, 0,
2995  43, 44, 45, 0, 0, 0, 0, 0, 0, 0,
2996  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2997  0, 375, 0, 0, 376, 0, 0, 203, 50, 0,
2998  51, 52, 0, 0, 0, 0, 54, 55, 56, 57,
2999  58, 59, 60, 61, 62, 0, 0, 0, 0, 0,
3000  5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
3001  0, 0, 0, 12, 270, 13, 14, 15, 238, 239,
3002  18, 19, 0, 0, 0, 0, 0, 240, 241, 242,
3003  23, 24, 25, 26, 0, 0, 200, 0, 0, 0,
3004  0, 0, 0, 268, 0, 0, 32, 33, 34, 373,
3005  36, 37, 38, 374, 40, 0, 41, 42, 0, 43,
3006  44, 45, 0, 0, 0, 0, 0, 0, 0, 0,
3007  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3008  0, 0, 0, 376, 0, 0, 203, 50, 0, 51,
3009  52, 0, 0, 0, 0, 54, 55, 56, 57, 58,
3010  59, 60, 61, 62, 0, 0, 0, 0, 0, 5,
3011  6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
3012  0, 0, 12, 270, 13, 14, 15, 238, 239, 18,
3013  19, 0, 0, 0, 0, 0, 240, 241, 242, 23,
3014  24, 25, 26, 0, 0, 200, 0, 0, 0, 0,
3015  0, 0, 268, 0, 0, 32, 33, 34, 35, 36,
3016  37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
3017  45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3018  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3019  0, 0, 269, 0, 0, 323, 50, 0, 51, 52,
3020  0, 0, 0, 0, 54, 55, 56, 57, 58, 59,
3021  60, 61, 62, 0, 0, 0, 0, 0, 5, 6,
3022  7, 0, 9, 0, 0, 0, 10, 11, 0, 0,
3023  0, 12, 270, 13, 14, 15, 238, 239, 18, 19,
3024  0, 0, 0, 0, 0, 240, 241, 242, 23, 24,
3025  25, 26, 0, 0, 200, 0, 0, 0, 0, 0,
3026  0, 268, 0, 0, 32, 33, 34, 35, 36, 37,
3027  38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
3028  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3029  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3030  0, 893, 0, 0, 203, 50, 0, 51, 52, 0,
3031  0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
3032  61, 62, 0, 0, 0, 0, 0, 5, 6, 7,
3033  0, 9, 0, 0, 0, 10, 11, 0, 0, 0,
3034  12, 270, 13, 14, 15, 238, 239, 18, 19, 0,
3035  0, 0, 0, 0, 240, 241, 242, 23, 24, 25,
3036  26, 0, 0, 200, 0, 0, 0, 0, 0, 0,
3037  268, 0, 0, 32, 33, 34, 35, 36, 37, 38,
3038  39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
3039  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3040  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3041  973, 0, 0, 203, 50, 0, 51, 52, 0, 0,
3042  0, 0, 54, 55, 56, 57, 58, 59, 60, 61,
3043  62, 0, 0, 0, 0, 0, 0, 553, 554, 0,
3044  0, 555, 0, 0, 0, 0, 0, 0, 0, 0,
3045  270, 162, 163, 164, 165, 166, 167, 168, 169, 170,
3046  0, 0, 171, 172, 0, 0, 173, 174, 175, 176,
3047  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3048  177, 178, 0, 0, 0, 0, 0, 0, 0, 0,
3049  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3050  0, 179, 180, 181, 182, 183, 184, 185, 186, 187,
3051  188, 0, 189, 190, 561, 562, 0, 0, 563, 0,
3052  191, 0, 0, 0, 0, 0, 0, 0, 162, 163,
3053  164, 165, 166, 167, 168, 169, 170, 0, 0, 171,
3054  172, 0, 0, 173, 174, 175, 176, 0, 0, 0,
3055  0, 0, 0, 0, 0, 0, 0, 177, 178, 0,
3056  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3057  0, 0, 0, 0, 0, 0, 0, 0, 179, 180,
3058  181, 182, 183, 184, 185, 186, 187, 188, 0, 189,
3059  190, 598, 562, 0, 0, 599, 0, 191, 0, 0,
3060  0, 0, 0, 0, 0, 162, 163, 164, 165, 166,
3061  167, 168, 169, 170, 0, 0, 171, 172, 0, 0,
3062  173, 174, 175, 176, 0, 0, 0, 0, 0, 0,
3063  0, 0, 0, 0, 177, 178, 0, 0, 0, 0,
3064  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3065  0, 0, 0, 0, 0, 179, 180, 181, 182, 183,
3066  184, 185, 186, 187, 188, 0, 189, 190, 612, 554,
3067  0, 0, 613, 0, 191, 0, 0, 0, 0, 0,
3068  0, 0, 162, 163, 164, 165, 166, 167, 168, 169,
3069  170, 0, 0, 171, 172, 0, 0, 173, 174, 175,
3070  176, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3071  0, 177, 178, 0, 0, 0, 0, 0, 0, 0,
3072  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3073  0, 0, 179, 180, 181, 182, 183, 184, 185, 186,
3074  187, 188, 0, 189, 190, 615, 562, 0, 0, 616,
3075  0, 191, 0, 0, 0, 0, 0, 0, 0, 162,
3076  163, 164, 165, 166, 167, 168, 169, 170, 0, 0,
3077  171, 172, 0, 0, 173, 174, 175, 176, 0, 0,
3078  0, 0, 0, 0, 0, 0, 0, 0, 177, 178,
3079  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3080  0, 0, 0, 0, 0, 0, 0, 0, 0, 179,
3081  180, 181, 182, 183, 184, 185, 186, 187, 188, 0,
3082  189, 190, 639, 554, 0, 0, 640, 0, 191, 0,
3083  0, 0, 0, 0, 0, 0, 162, 163, 164, 165,
3084  166, 167, 168, 169, 170, 0, 0, 171, 172, 0,
3085  0, 173, 174, 175, 176, 0, 0, 0, 0, 0,
3086  0, 0, 0, 0, 0, 177, 178, 0, 0, 0,
3087  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3088  0, 0, 0, 0, 0, 0, 179, 180, 181, 182,
3089  183, 184, 185, 186, 187, 188, 0, 189, 190, 642,
3090  562, 0, 0, 643, 0, 191, 0, 0, 0, 0,
3091  0, 0, 0, 162, 163, 164, 165, 166, 167, 168,
3092  169, 170, 0, 0, 171, 172, 0, 0, 173, 174,
3093  175, 176, 0, 0, 0, 0, 0, 0, 0, 0,
3094  0, 0, 177, 178, 0, 0, 0, 0, 0, 0,
3095  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3096  0, 0, 0, 179, 180, 181, 182, 183, 184, 185,
3097  186, 187, 188, 0, 189, 190, 727, 554, 0, 0,
3098  728, 0, 191, 0, 0, 0, 0, 0, 0, 0,
3099  162, 163, 164, 165, 166, 167, 168, 169, 170, 0,
3100  0, 171, 172, 0, 0, 173, 174, 175, 176, 0,
3101  0, 0, 0, 0, 0, 0, 0, 0, 0, 177,
3102  178, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3103  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3104  179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
3105  0, 189, 190, 730, 562, 0, 0, 731, 0, 191,
3106  0, 0, 0, 0, 0, 0, 0, 162, 163, 164,
3107  165, 166, 167, 168, 169, 170, 0, 0, 171, 172,
3108  0, 0, 173, 174, 175, 176, 0, 0, 0, 0,
3109  0, 0, 0, 0, 0, 0, 177, 178, 0, 0,
3110  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3111  0, 0, 0, 0, 0, 0, 0, 179, 180, 181,
3112  182, 183, 184, 185, 186, 187, 188, 0, 189, 190,
3113  737, 554, 0, 0, 738, 0, 191, 0, 0, 0,
3114  0, 0, 0, 0, 162, 163, 164, 165, 166, 167,
3115  168, 169, 170, 0, 0, 171, 172, 0, 0, 173,
3116  174, 175, 176, 0, 0, 0, 0, 0, 0, 0,
3117  0, 0, 0, 177, 178, 0, 0, 0, 0, 0,
3118  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3119  0, 0, 0, 0, 179, 180, 181, 182, 183, 184,
3120  185, 186, 187, 188, 0, 189, 190, 1001, 554, 0,
3121  0, 1002, 0, 191, 0, 0, 0, 0, 0, 0,
3122  0, 162, 163, 164, 165, 166, 167, 168, 169, 170,
3123  0, 0, 171, 172, 0, 0, 173, 174, 175, 176,
3124  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3125  177, 178, 0, 0, 0, 0, 0, 0, 0, 0,
3126  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3127  0, 179, 180, 181, 182, 183, 184, 185, 186, 187,
3128  188, 0, 189, 190, 1036, 554, 0, 0, 1037, 0,
3129  191, 0, 0, 0, 0, 0, 0, 0, 162, 163,
3130  164, 165, 166, 167, 168, 169, 170, 0, 0, 171,
3131  172, 0, 0, 173, 174, 175, 176, 0, 0, 0,
3132  0, 0, 0, 0, 0, 0, 0, 177, 178, 0,
3133  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3134  0, 0, 0, 0, 0, 0, 0, 0, 179, 180,
3135  181, 182, 183, 184, 185, 186, 187, 188, 0, 189,
3136  190, 1039, 562, 0, 0, 1040, 0, 191, 0, 0,
3137  0, 0, 0, 0, 0, 162, 163, 164, 165, 166,
3138  167, 168, 169, 170, 0, 0, 171, 172, 0, 0,
3139  173, 174, 175, 176, 0, 0, 0, 0, 0, 0,
3140  0, 0, 0, 0, 177, 178, 0, 0, 0, 0,
3141  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3142  0, 0, 0, 0, 0, 179, 180, 181, 182, 183,
3143  184, 185, 186, 187, 188, 0, 189, 190, 0, 0,
3144  0, 0, 0, 0, 191
3145 };
3146 
3147 #define yypact_value_is_default(yystate) \
3148  ((yystate) == (-810))
3149 
3150 #define yytable_value_is_error(yytable_value) \
3151  ((yytable_value) == (-620))
3152 
3153 static const yytype_int16 yycheck[] =
3154 {
3155  2, 55, 96, 16, 17, 8, 79, 20, 22, 64,
3156  354, 326, 16, 17, 8, 220, 20, 50, 27, 8,
3157  29, 472, 326, 28, 87, 28, 359, 90, 412, 353,
3158  4, 355, 420, 74, 28, 2, 420, 4, 53, 28,
3159  94, 668, 49, 90, 575, 594, 614, 51, 262, 51,
3160  52, 685, 266, 86, 87, 574, 67, 90, 440, 468,
3161  74, 55, 13, 651, 79, 786, 2, 376, 4, 49,
3162  458, 508, 416, 641, 511, 399, 91, 92, 93, 27,
3163  16, 17, 53, 776, 20, 874, 250, 472, 67, 778,
3164  87, 415, 715, 417, 16, 17, 719, 906, 20, 26,
3165  94, 872, 0, 37, 38, 13, 25, 230, 801, 518,
3166  25, 90, 26, 49, 50, 85, 113, 53, 25, 443,
3167  141, 61, 61, 13, 1, 85, 470, 85, 64, 85,
3168  16, 17, 255, 25, 20, 97, 259, 134, 902, 76,
3169  130, 85, 134, 79, 778, 596, 25, 471, 28, 141,
3170  86, 87, 786, 29, 90, 91, 92, 93, 120, 323,
3171  286, 729, 288, 133, 290, 51, 52, 938, 294, 25,
3172  110, 110, 740, 133, 25, 133, 132, 133, 805, 806,
3173  25, 118, 770, 771, 25, 136, 56, 736, 139, 133,
3174  141, 139, 13, 141, 140, 744, 203, 230, 271, 232,
3175  113, 990, 243, 130, 1013, 252, 657, 141, 897, 136,
3176  140, 224, 214, 226, 227, 134, 130, 136, 220, 134,
3177  224, 992, 226, 944, 429, 227, 134, 134, 13, 13,
3178  237, 139, 134, 141, 622, 111, 580, 621, 622, 1003,
3179  117, 252, 134, 250, 307, 308, 309, 310, 592, 139,
3180  632, 141, 85, 690, 1025, 134, 271, 581, 885, 268,
3181  949, 113, 139, 897, 141, 85, 321, 203, 902, 593,
3182  250, 326, 657, 252, 307, 308, 309, 310, 134, 312,
3183  313, 248, 591, 134, 872, 136, 874, 696, 224, 134,
3184  226, 227, 743, 134, 230, 87, 232, 360, 361, 422,
3185  133, 237, 224, 426, 226, 928, 37, 38, 431, 324,
3186  944, 87, 248, 133, 250, 362, 323, 321, 139, 1008,
3187  141, 113, 326, 68, 447, 113, 136, 360, 361, 452,
3188  100, 141, 306, 852, 87, 271, 963, 113, 224, 306,
3189  226, 354, 375, 323, 311, 61, 134, 402, 403, 65,
3190  938, 939, 354, 324, 139, 139, 141, 141, 743, 485,
3191  113, 355, 25, 61, 85, 140, 492, 61, 140, 1003,
3192  306, 307, 308, 309, 310, 311, 312, 313, 123, 124,
3193  125, 930, 697, 362, 139, 321, 141, 323, 324, 136,
3194  326, 107, 725, 109, 517, 468, 685, 928, 15, 378,
3195  17, 25, 990, 416, 992, 399, 611, 68, 85, 107,
3196  714, 109, 133, 107, 416, 109, 26, 85, 354, 134,
3197  356, 85, 636, 417, 360, 361, 428, 429, 85, 52,
3198  56, 26, 437, 56, 437, 87, 26, 1025, 440, 375,
3199  989, 113, 140, 437, 85, 518, 140, 134, 437, 443,
3200  113, 134, 88, 468, 85, 132, 133, 470, 141, 136,
3201  121, 122, 123, 124, 125, 133, 402, 403, 470, 133,
3202  1038, 134, 87, 440, 137, 85, 133, 471, 141, 867,
3203  416, 87, 87, 867, 935, 87, 134, 703, 134, 113,
3204  85, 132, 133, 141, 710, 85, 136, 786, 113, 61,
3205  789, 132, 133, 518, 440, 507, 508, 113, 61, 511,
3206  134, 113, 61, 137, 450, 136, 557, 141, 130, 134,
3207  130, 26, 132, 133, 565, 52, 412, 54, 55, 56,
3208  57, 68, 468, 542, 470, 130, 136, 132, 133, 137,
3209  130, 136, 132, 133, 558, 107, 136, 109, 110, 85,
3210  113, 560, 566, 138, 107, 760, 109, 110, 107, 600,
3211  109, 110, 595, 570, 637, 572, 568, 580, 670, 455,
3212  672, 131, 576, 85, 59, 60, 577, 87, 580, 592,
3213  85, 56, 518, 916, 87, 110, 600, 581, 87, 922,
3214  592, 87, 625, 85, 573, 574, 132, 133, 600, 593,
3215  605, 61, 605, 113, 134, 614, 110, 134, 587, 611,
3216  113, 605, 110, 902, 113, 904, 605, 113, 68, 742,
3217  132, 133, 637, 696, 134, 130, 110, 132, 133, 58,
3218  632, 136, 641, 68, 570, 134, 572, 61, 761, 68,
3219  132, 133, 697, 94, 580, 700, 701, 107, 685, 109,
3220  110, 774, 707, 708, 748, 944, 592, 946, 594, 595,
3221  85, 134, 951, 704, 666, 632, 668, 96, 97, 732,
3222  711, 17, 735, 1017, 59, 60, 685, 139, 87, 686,
3223  58, 696, 689, 107, 691, 109, 110, 56, 690, 625,
3224  68, 120, 746, 25, 1018, 137, 632, 85, 134, 732,
3225  134, 637, 735, 685, 113, 131, 134, 132, 133, 711,
3226  714, 130, 714, 715, 1003, 717, 1005, 719, 96, 97,
3227  729, 1010, 134, 724, 52, 134, 54, 55, 56, 57,
3228  85, 740, 14, 15, 140, 621, 859, 140, 1027, 134,
3229  741, 134, 120, 780, 132, 133, 85, 784, 871, 113,
3230  686, 134, 746, 689, 733, 691, 136, 10, 760, 1048,
3231  696, 697, 8, 85, 700, 701, 745, 776, 2, 13,
3232  4, 707, 708, 828, 85, 131, 85, 132, 133, 842,
3233  882, 883, 16, 17, 799, 887, 20, 889, 890, 113,
3234  134, 134, 801, 132, 133, 52, 732, 134, 780, 735,
3235  736, 134, 52, 805, 806, 134, 134, 814, 744, 842,
3236  132, 133, 52, 134, 115, 49, 50, 54, 55, 138,
3237  57, 132, 133, 132, 133, 15, 63, 64, 134, 87,
3238  64, 131, 839, 113, 118, 837, 134, 134, 840, 846,
3239  847, 134, 843, 850, 845, 52, 87, 54, 55, 56,
3240  57, 58, 86, 87, 855, 113, 90, 134, 134, 860,
3241  897, 68, 899, 799, 139, 902, 10, 904, 131, 10,
3242  877, 878, 113, 852, 134, 854, 134, 892, 814, 808,
3243  809, 9, 89, 885, 891, 88, 134, 134, 95, 96,
3244  97, 134, 828, 134, 996, 997, 998, 999, 54, 137,
3245  915, 134, 134, 839, 56, 118, 842, 63, 64, 131,
3246  846, 847, 919, 120, 850, 897, 123, 899, 134, 134,
3247  902, 10, 904, 131, 925, 926, 928, 52, 108, 54,
3248  55, 56, 57, 52, 141, 54, 55, 56, 57, 58,
3249  134, 877, 878, 134, 1046, 134, 134, 56, 52, 68,
3250  54, 55, 56, 57, 136, 891, 892, 134, 134, 134,
3251  969, 963, 136, 450, 89, 91, 1003, 711, 1005, 203,
3252  89, 1008, 979, 1010, 981, 93, 1020, 96, 97, 915,
3253  987, 770, 685, 919, 1013, 89, 749, 988, 1019, 99,
3254  224, 95, 226, 227, 930, 294, 230, 57, 232, 94,
3255  935, 120, 780, 237, 1017, 52, 899, 54, 55, 56,
3256  57, 1048, 897, 778, 248, 1017, 250, 1019, 1020, 396,
3257  1021, 1003, 1023, 1005, 1018, -1, 1008, -1, 1010, 1038,
3258  -1, 960, 961, -1, -1, 964, -1, 966, 967, -1,
3259  -1, -1, 89, 979, 68, 981, -1, -1, 95, -1,
3260  -1, 987, -1, 989, 68, -1, -1, -1, -1, 83,
3261  84, 40, 41, 42, 43, 44, 1048, -1, -1, 83,
3262  84, -1, 306, 307, 308, 309, 310, 311, 312, 313,
3263  52, 1017, 54, 55, 56, 57, -1, 321, -1, 323,
3264  -1, -1, 326, -1, 118, 119, 120, 121, 122, 123,
3265  124, 125, 1031, 1032, 1033, 1034, 120, 121, 122, 123,
3266  124, 125, -1, -1, -1, -1, -1, -1, -1, -1,
3267  354, -1, 356, -1, -1, 1054, 360, 361, -1, -1,
3268  -1, -1, -1, 52, -1, 54, 55, 56, 57, 58,
3269  -1, 375, -1, -1, -1, -1, -1, -1, 0, 68,
3270  -1, -1, -1, -1, -1, -1, 8, 9, 10, -1,
3271  -1, 13, 14, 15, -1, 17, -1, -1, 402, 403,
3272  89, -1, -1, -1, 26, 27, 95, 96, 97, -1,
3273  -1, -1, 416, -1, -1, 37, 38, 68, 40, 41,
3274  42, 43, 44, -1, 52, -1, 54, 55, 56, 57,
3275  58, 120, 83, 84, 123, -1, 440, -1, -1, -1,
3276  68, -1, -1, -1, -1, -1, 450, 136, -1, -1,
3277  -1, -1, -1, -1, 16, 17, -1, -1, 20, -1,
3278  -1, 89, -1, 85, -1, -1, 470, 95, 96, 97,
3279  121, 122, 123, 124, 125, -1, -1, -1, -1, -1,
3280  -1, -1, -1, -1, 46, 47, 108, -1, -1, 51,
3281  52, -1, 120, -1, -1, 123, -1, -1, -1, -1,
3282  -1, -1, 64, 65, -1, 44, -1, -1, 130, 131,
3283  -1, 133, -1, -1, 136, 137, -1, 139, -1, 141,
3284  -1, -1, -1, -1, -1, -1, -1, -1, -1, 68,
3285  69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
3286  79, 80, -1, -1, 83, 84, -1, -1, -1, -1,
3287  -1, -1, -1, -1, -1, -1, 52, -1, 54, 55,
3288  56, 57, 58, -1, -1, -1, 570, -1, 572, -1,
3289  -1, -1, 68, -1, -1, 114, 580, 116, 117, 118,
3290  119, 120, 121, 122, 123, 124, 125, -1, 592, -1,
3291  594, 595, -1, 89, -1, 134, -1, -1, -1, 95,
3292  96, 97, -1, 68, 69, 70, 71, 72, 73, 74,
3293  75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
3294  -1, 625, -1, -1, 120, -1, -1, 123, 632, -1,
3295  -1, -1, 2, -1, 4, -1, -1, -1, -1, 201,
3296  136, -1, 204, 205, 206, 207, -1, -1, 52, 114,
3297  -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
3298  125, -1, 224, -1, 226, 227, -1, -1, 52, -1,
3299  54, 55, 56, 57, 58, -1, 141, -1, -1, 49,
3300  -1, -1, 686, 53, 68, 689, -1, 691, -1, -1,
3301  -1, -1, -1, 697, -1, -1, 700, 701, -1, -1,
3302  -1, -1, -1, 707, 708, 89, -1, -1, -1, 79,
3303  -1, 95, 96, 97, -1, -1, -1, -1, -1, -1,
3304  -1, 91, 92, 93, 94, -1, -1, -1, 732, -1,
3305  -1, 735, 736, -1, -1, -1, 120, -1, -1, 123,
3306  744, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3307  -1, -1, -1, -1, -1, -1, -1, -1, -1, 321,
3308  -1, -1, -1, -1, 326, 327, 328, 329, 330, 331,
3309  332, 333, 334, 335, 336, 337, 338, 339, 340, 341,
3310  342, 343, 344, 345, 346, 347, 348, 349, 350, 351,
3311  352, -1, 354, -1, -1, -1, -1, 201, -1, -1,
3312  204, 205, 206, -1, -1, -1, -1, -1, -1, -1,
3313  814, -1, -1, -1, -1, 52, -1, 54, 55, 56,
3314  57, 58, -1, -1, 828, -1, -1, -1, -1, -1,
3315  -1, 68, -1, 203, -1, 839, -1, -1, 842, -1,
3316  402, 403, 846, 847, -1, -1, 850, -1, 410, 411,
3317  412, -1, 89, -1, 416, -1, 418, 419, 420, 96,
3318  97, -1, -1, -1, -1, -1, -1, 237, -1, -1,
3319  -1, -1, -1, 877, 878, -1, -1, 439, 248, -1,
3320  250, -1, 444, 120, -1, -1, -1, 891, -1, -1,
3321  -1, -1, -1, 455, -1, -1, 458, -1, -1, -1,
3322  -1, 271, -1, -1, -1, 2, -1, 4, 470, -1,
3323  -1, -1, -1, -1, -1, 919, -1, 321, -1, -1,
3324  -1, 2, 326, 4, -1, -1, 930, -1, -1, -1,
3325  -1, -1, -1, -1, 496, 497, 306, -1, -1, -1,
3326  -1, 311, -1, -1, -1, -1, -1, -1, -1, -1,
3327  512, -1, 49, 323, 324, -1, 53, -1, -1, -1,
3328  -1, -1, -1, -1, -1, -1, -1, -1, 49, -1,
3329  -1, -1, 53, -1, -1, 979, -1, 981, -1, -1,
3330  -1, -1, 79, 987, -1, 989, 356, -1, -1, -1,
3331  -1, -1, -1, -1, 91, 92, 93, 94, 79, -1,
3332  -1, -1, -1, -1, -1, -1, -1, 411, 412, -1,
3333  91, 92, 93, 1017, 576, -1, 420, -1, 580, -1,
3334  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3335  592, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3336  -1, -1, -1, -1, -1, -1, 608, -1, -1, -1,
3337  -1, 455, -1, -1, 458, -1, -1, -1, -1, 621,
3338  622, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3339  440, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3340  450, -1, -1, -1, -1, -1, -1, 649, -1, -1,
3341  -1, -1, -1, -1, -1, -1, -1, -1, 468, -1,
3342  -1, -1, -1, -1, -1, -1, 203, -1, 512, -1,
3343  -1, -1, -1, -1, 2, -1, 4, -1, -1, -1,
3344  -1, -1, 203, -1, -1, -1, -1, -1, -1, -1,
3345  2, 693, 4, -1, -1, 697, 698, -1, 700, 701,
3346  237, -1, -1, -1, -1, 707, 708, -1, 518, -1,
3347  -1, 248, 714, 250, -1, -1, 237, -1, -1, -1,
3348  -1, 49, -1, -1, -1, -1, -1, 248, -1, 250,
3349  -1, -1, 576, -1, 271, -1, -1, 49, -1, -1,
3350  -1, -1, -1, -1, -1, -1, -1, -1, -1, 751,
3351  271, -1, -1, 755, 756, -1, 758, 759, -1, -1,
3352  570, -1, 572, 91, 608, 767, -1, -1, -1, 306,
3353  -1, -1, -1, -1, 311, -1, -1, 621, 622, -1,
3354  -1, -1, -1, -1, 594, 306, 323, 324, -1, -1,
3355  311, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3356  -1, -1, 323, 324, -1, 649, -1, -1, -1, -1,
3357  -1, -1, -1, -1, 816, -1, -1, -1, 820, 356,
3358  -1, -1, 632, -1, -1, -1, 828, 637, -1, -1,
3359  -1, -1, -1, -1, -1, 356, -1, -1, -1, -1,
3360  -1, -1, -1, -1, -1, -1, -1, 849, -1, 693,
3361  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3362  -1, -1, -1, -1, 866, 867, -1, -1, -1, -1,
3363  714, -1, -1, -1, -1, 203, 686, -1, -1, 689,
3364  -1, 691, -1, -1, -1, -1, 696, -1, -1, -1,
3365  -1, 203, -1, -1, -1, -1, -1, -1, -1, -1,
3366  -1, -1, -1, 440, -1, -1, -1, -1, -1, 237,
3367  -1, -1, -1, 450, -1, -1, -1, -1, -1, 440,
3368  248, -1, 250, 767, -1, 237, 736, -1, -1, 450,
3369  -1, 468, -1, -1, 744, -1, 248, -1, 250, -1,
3370  -1, -1, -1, -1, -1, -1, -1, 468, -1, -1,
3371  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3372  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3373  -1, -1, 816, -1, -1, -1, -1, -1, 306, -1,
3374  -1, 518, -1, 311, -1, -1, -1, -1, -1, 799,
3375  -1, -1, -1, -1, 306, 323, -1, 518, 326, 311,
3376  -1, -1, -1, -1, 814, 849, -1, -1, -1, -1,
3377  -1, 323, -1, -1, -1, 1017, -1, -1, -1, -1,
3378  -1, -1, -1, 867, -1, -1, -1, -1, 356, 839,
3379  -1, -1, -1, 570, -1, 572, 846, 847, -1, -1,
3380  850, -1, -1, -1, 356, -1, -1, -1, -1, 570,
3381  -1, 572, -1, -1, -1, -1, -1, 594, -1, -1,
3382  -1, -1, -1, -1, -1, -1, -1, 877, 878, -1,
3383  -1, -1, -1, 594, -1, -1, -1, -1, -1, -1,
3384  -1, 891, 892, -1, -1, -1, -1, -1, -1, -1,
3385  -1, -1, -1, -1, -1, 632, -1, -1, -1, -1,
3386  637, -1, -1, -1, -1, 915, -1, -1, -1, 919,
3387  -1, 632, 440, -1, -1, -1, 637, -1, -1, -1,
3388  930, -1, 450, -1, -1, -1, -1, -1, 440, -1,
3389  -1, -1, -1, -1, -1, -1, -1, -1, 450, -1,
3390  -1, -1, -1, -1, -1, -1, -1, -1, -1, 686,
3391  -1, -1, 689, -1, 691, 676, 44, -1, -1, 696,
3392  -1, -1, -1, -1, -1, 686, -1, -1, 689, 979,
3393  691, 981, -1, -1, -1, 696, -1, 987, -1, 989,
3394  68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
3395  78, 79, 80, -1, -1, 83, 84, -1, -1, 736,
3396  -1, -1, -1, -1, -1, -1, -1, 744, -1, -1,
3397  -1, -1, -1, -1, -1, 736, -1, -1, -1, -1,
3398  -1, -1, -1, 744, -1, -1, 114, -1, 116, 117,
3399  118, 119, 120, 121, 122, 123, 124, 125, -1, -1,
3400  -1, -1, 570, -1, 572, -1, -1, -1, -1, -1,
3401  -1, -1, -1, -1, -1, -1, -1, -1, 570, -1,
3402  572, -1, 799, -1, -1, -1, 594, -1, -1, -1,
3403  -1, -1, -1, -1, -1, -1, -1, 814, 799, -1,
3404  -1, -1, 594, -1, -1, -1, -1, -1, -1, -1,
3405  -1, -1, -1, 814, -1, -1, -1, -1, -1, -1,
3406  -1, -1, 839, -1, 632, -1, -1, -1, -1, 846,
3407  847, -1, -1, 850, -1, -1, -1, -1, 839, -1,
3408  632, -1, -1, -1, -1, 846, 847, -1, -1, 850,
3409  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3410  877, 878, -1, -1, -1, -1, -1, -1, -1, -1,
3411  -1, -1, -1, -1, 891, 892, 877, 878, 686, -1,
3412  -1, 689, -1, 691, -1, -1, -1, -1, -1, 697,
3413  891, 892, -1, -1, 686, -1, -1, 689, 915, 691,
3414  -1, -1, 919, -1, -1, -1, -1, -1, -1, -1,
3415  -1, -1, -1, 930, 915, -1, -1, -1, 919, -1,
3416  -1, -1, -1, -1, -1, -1, -1, -1, 736, 930,
3417  -1, -1, -1, -1, -1, -1, 744, -1, -1, -1,
3418  -1, -1, -1, -1, 736, 68, 69, 70, 71, 72,
3419  73, 74, 744, -1, 77, 78, -1, -1, -1, -1,
3420  83, 84, 979, -1, 981, -1, -1, -1, -1, -1,
3421  987, -1, 989, -1, -1, -1, -1, -1, 979, -1,
3422  981, -1, -1, -1, -1, -1, 987, -1, 989, -1,
3423  -1, -1, -1, 116, 117, 118, 119, 120, 121, 122,
3424  123, 124, 125, -1, -1, -1, 814, -1, -1, -1,
3425  -1, 68, 69, 70, 71, 72, 73, 74, 75, -1,
3426  77, 78, 814, -1, -1, -1, 83, 84, -1, -1,
3427  -1, 839, -1, -1, -1, -1, -1, -1, 846, 847,
3428  -1, -1, 850, -1, -1, -1, -1, 839, -1, -1,
3429  -1, -1, -1, -1, 846, 847, -1, -1, 850, 116,
3430  117, 118, 119, 120, 121, 122, 123, 124, 125, 877,
3431  878, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3432  -1, -1, -1, 891, -1, 877, 878, -1, -1, -1,
3433  -1, -1, -1, -1, -1, -1, -1, -1, -1, 891,
3434  68, 69, 70, 71, 72, 73, 74, 915, -1, 77,
3435  78, 919, -1, -1, -1, 83, 84, -1, -1, -1,
3436  -1, -1, 930, -1, -1, -1, -1, 919, -1, -1,
3437  -1, -1, -1, -1, -1, -1, -1, -1, 930, -1,
3438  -1, -1, -1, -1, -1, -1, -1, -1, 116, 117,
3439  118, 119, 120, 121, 122, 123, 124, 125, -1, -1,
3440  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3441  -1, 979, -1, 981, -1, -1, -1, -1, -1, 987,
3442  -1, 989, -1, -1, -1, -1, -1, 979, -1, 981,
3443  -1, -1, -1, -1, -1, 987, -1, 989, 0, 1,
3444  -1, 3, 4, 5, 6, 7, -1, -1, -1, 11,
3445  12, -1, -1, -1, 16, -1, 18, 19, 20, 21,
3446  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
3447  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
3448  -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
3449  52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
3450  62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
3451  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3452  -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
3453  92, 93, -1, 95, -1, -1, 98, 99, 100, 101,
3454  102, 103, 104, 105, 106, 0, -1, -1, -1, -1,
3455  -1, -1, -1, 8, 9, 10, -1, -1, 13, 14,
3456  15, -1, 17, -1, 126, 127, 128, -1, 44, -1,
3457  -1, 26, 27, 28, 29, -1, -1, 139, -1, 141,
3458  -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
3459  -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
3460  76, 77, 78, 79, 80, -1, -1, 83, 84, -1,
3461  -1, -1, -1, 68, 69, 70, 71, 72, 73, 74,
3462  75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
3463  85, -1, 87, 88, -1, -1, -1, -1, 114, 94,
3464  116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
3465  -1, -1, -1, 108, -1, -1, 111, -1, 113, 114,
3466  115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
3467  125, -1, -1, -1, -1, 130, 131, 132, 133, 134,
3468  0, -1, 137, 138, 139, -1, 141, -1, 8, 9,
3469  10, -1, -1, 13, 14, 15, -1, 17, -1, -1,
3470  -1, -1, -1, -1, -1, 25, -1, 27, 28, 29,
3471  -1, -1, -1, -1, -1, -1, -1, 37, 38, -1,
3472  40, 41, 42, 43, 44, -1, -1, 68, 69, 70,
3473  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
3474  -1, -1, 83, 84, -1, -1, -1, -1, 68, 69,
3475  70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
3476  80, -1, -1, 83, 84, 85, -1, 87, 88, -1,
3477  -1, -1, -1, 114, 94, 116, 117, 118, 119, 120,
3478  121, 122, 123, 124, 125, -1, -1, -1, 108, -1,
3479  -1, 111, -1, 113, 114, 115, 116, 117, 118, 119,
3480  120, 121, 122, 123, 124, 125, -1, -1, -1, -1,
3481  -1, 131, 132, 133, 134, 0, -1, 137, 138, 139,
3482  -1, 141, -1, 8, 9, 10, -1, -1, 13, 14,
3483  15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
3484  25, -1, 27, 28, 29, -1, -1, -1, -1, -1,
3485  -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
3486  -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
3487  76, 77, 78, 79, 80, -1, -1, 83, 84, -1,
3488  -1, -1, -1, 68, 69, 70, 71, 72, 73, 74,
3489  75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
3490  85, -1, 87, 88, -1, -1, -1, -1, -1, 94,
3491  116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
3492  -1, -1, -1, 108, -1, -1, 111, -1, 113, 114,
3493  115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
3494  125, -1, -1, -1, -1, -1, 131, 132, 133, 134,
3495  0, -1, 137, 138, 139, -1, 141, -1, 8, 9,
3496  10, -1, -1, 13, 14, 15, -1, 17, -1, -1,
3497  -1, -1, -1, -1, -1, -1, 26, 27, 28, 29,
3498  -1, -1, -1, -1, -1, -1, -1, 37, 38, -1,
3499  40, 41, 42, 43, 44, -1, -1, -1, -1, -1,
3500  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3501  -1, -1, -1, -1, -1, -1, -1, -1, 68, 69,
3502  70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
3503  80, -1, -1, 83, 84, 85, -1, -1, 88, -1,
3504  -1, -1, -1, -1, 94, -1, -1, -1, -1, -1,
3505  -1, -1, -1, -1, -1, -1, -1, -1, 108, -1,
3506  -1, 111, -1, -1, 114, 115, 116, 117, 118, 119,
3507  120, 121, 122, 123, 124, 125, -1, -1, -1, -1,
3508  130, 131, 132, 133, 134, 0, -1, 137, 138, 139,
3509  -1, 141, -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, -1, -1, -1, -1, -1, -1,
3514  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3515  -1, -1, -1, 68, 69, 70, 71, 72, 73, 74,
3516  75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
3517  85, -1, -1, 88, -1, -1, -1, -1, -1, 94,
3518  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3519  -1, -1, -1, 108, -1, -1, 111, -1, -1, 114,
3520  115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
3521  125, -1, -1, -1, -1, 130, 131, 132, 133, 134,
3522  0, -1, 137, 138, 139, -1, 141, -1, 8, 9,
3523  10, -1, -1, 13, 14, 15, -1, 17, -1, -1,
3524  -1, -1, -1, -1, -1, -1, -1, 27, 28, 29,
3525  -1, -1, -1, -1, -1, -1, -1, 37, 38, -1,
3526  40, 41, 42, 43, 44, -1, -1, -1, -1, -1,
3527  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3528  -1, -1, -1, -1, -1, -1, -1, -1, 68, 69,
3529  70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
3530  80, -1, -1, 83, 84, 85, -1, 87, 88, -1,
3531  -1, -1, -1, -1, 94, -1, -1, -1, -1, -1,
3532  -1, -1, -1, -1, -1, -1, -1, -1, 108, -1,
3533  -1, 111, -1, 113, 114, 115, 116, 117, 118, 119,
3534  120, 121, 122, 123, 124, 125, -1, -1, -1, -1,
3535  -1, 131, 132, 133, 134, 0, -1, 137, 138, 139,
3536  -1, 141, -1, 8, 9, 10, -1, -1, 13, 14,
3537  15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
3538  -1, 26, 27, 28, -1, -1, -1, -1, -1, -1,
3539  -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
3540  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3541  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3542  -1, -1, -1, 68, 69, 70, 71, 72, 73, 74,
3543  75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
3544  85, -1, -1, 88, -1, -1, -1, -1, -1, 94,
3545  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3546  -1, -1, -1, 108, -1, -1, -1, -1, -1, 114,
3547  -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
3548  125, -1, -1, -1, -1, 130, 131, 132, 133, 134,
3549  0, 136, 137, 138, 139, -1, 141, -1, 8, 9,
3550  10, -1, -1, 13, 14, 15, -1, 17, -1, -1,
3551  -1, -1, -1, -1, -1, -1, -1, 27, 28, 29,
3552  -1, -1, -1, -1, -1, -1, -1, 37, 38, -1,
3553  40, 41, 42, 43, 44, -1, -1, -1, -1, -1,
3554  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3555  -1, -1, -1, -1, -1, -1, -1, -1, 68, 69,
3556  70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
3557  80, -1, -1, 83, 84, 85, -1, -1, 88, -1,
3558  -1, -1, -1, -1, 94, -1, -1, -1, -1, -1,
3559  -1, -1, -1, -1, -1, -1, -1, -1, 108, -1,
3560  -1, 111, -1, -1, 114, 115, 116, 117, 118, 119,
3561  120, 121, 122, 123, 124, 125, -1, -1, -1, -1,
3562  -1, 131, 132, 133, 134, 0, -1, 137, 138, 139,
3563  -1, 141, -1, 8, 9, 10, -1, -1, 13, 14,
3564  15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
3565  -1, 26, 27, 28, -1, -1, -1, -1, -1, -1,
3566  -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
3567  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3568  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3569  -1, -1, -1, 68, 69, 70, 71, 72, 73, 74,
3570  75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
3571  85, -1, -1, 88, -1, -1, -1, -1, -1, 94,
3572  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3573  -1, -1, -1, 108, -1, -1, -1, -1, -1, 114,
3574  -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
3575  125, -1, -1, -1, -1, 130, 131, 132, 133, 134,
3576  0, 136, 137, 138, 139, -1, 141, -1, 8, 9,
3577  10, -1, -1, 13, 14, 15, -1, 17, -1, -1,
3578  -1, -1, -1, -1, -1, -1, -1, 27, 28, -1,
3579  -1, -1, -1, -1, -1, -1, -1, 37, 38, -1,
3580  40, 41, 42, 43, 44, -1, -1, -1, -1, -1,
3581  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3582  -1, -1, -1, -1, -1, -1, -1, -1, 68, 69,
3583  70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
3584  80, -1, -1, 83, 84, 85, -1, -1, 88, -1,
3585  -1, -1, -1, -1, 94, -1, -1, -1, -1, -1,
3586  -1, -1, -1, -1, -1, -1, -1, -1, 108, -1,
3587  -1, -1, -1, -1, 114, -1, 116, 117, 118, 119,
3588  120, 121, 122, 123, 124, 125, -1, -1, -1, -1,
3589  -1, 131, 132, 133, 134, 0, 136, 137, 138, 139,
3590  -1, 141, -1, 8, 9, 10, -1, -1, -1, 14,
3591  15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
3592  -1, 26, -1, -1, -1, -1, -1, -1, -1, -1,
3593  -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
3594  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3595  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3596  -1, -1, -1, 68, 69, 70, 71, 72, 73, 74,
3597  75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
3598  85, -1, 87, -1, -1, -1, -1, -1, -1, -1,
3599  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3600  -1, -1, -1, 108, -1, -1, -1, -1, 113, 114,
3601  -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
3602  125, -1, -1, -1, -1, 130, 131, 132, 133, 134,
3603  0, -1, 137, -1, 139, -1, 141, -1, 8, 9,
3604  10, -1, -1, -1, 14, 15, -1, 17, -1, -1,
3605  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3606  -1, -1, -1, -1, -1, -1, -1, 37, 38, -1,
3607  40, 41, 42, 43, 44, -1, -1, -1, -1, -1,
3608  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3609  -1, -1, -1, -1, -1, -1, -1, -1, 68, 69,
3610  70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
3611  80, -1, -1, 83, 84, 85, -1, 87, -1, -1,
3612  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3613  -1, -1, -1, -1, -1, -1, -1, -1, 108, -1,
3614  -1, -1, -1, 113, 114, -1, 116, 117, 118, 119,
3615  120, 121, 122, 123, 124, 125, -1, -1, -1, -1,
3616  -1, 131, 132, 133, 134, -1, -1, 137, -1, 139,
3617  1, 141, 3, 4, 5, 6, 7, 8, 9, 10,
3618  11, 12, -1, -1, 15, 16, -1, 18, 19, 20,
3619  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
3620  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
3621  -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
3622  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
3623  -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
3624  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3625  -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
3626  -1, 92, 93, -1, 95, -1, -1, 98, 99, 100,
3627  101, 102, 103, 104, 105, 106, -1, -1, -1, -1,
3628  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3629  -1, -1, -1, -1, -1, 126, 127, 128, -1, -1,
3630  -1, -1, -1, -1, -1, -1, -1, -1, 139, 1,
3631  141, 3, 4, 5, 6, 7, -1, -1, 10, 11,
3632  12, -1, 14, 15, 16, -1, 18, 19, 20, 21,
3633  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
3634  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
3635  -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
3636  52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
3637  62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
3638  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3639  -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
3640  92, 93, -1, 95, -1, -1, 98, 99, 100, 101,
3641  102, 103, 104, 105, 106, -1, -1, -1, -1, -1,
3642  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3643  -1, -1, -1, -1, 126, 127, 128, -1, -1, -1,
3644  -1, -1, -1, -1, -1, -1, -1, 139, 1, 141,
3645  3, 4, 5, 6, 7, -1, -1, 10, 11, 12,
3646  -1, -1, 15, 16, 17, 18, 19, 20, 21, 22,
3647  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
3648  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
3649  -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
3650  53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
3651  63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
3652  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3653  -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
3654  93, -1, 95, -1, -1, 98, 99, 100, 101, 102,
3655  103, 104, 105, 106, -1, -1, -1, -1, -1, -1,
3656  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3657  -1, -1, -1, 126, 127, 128, -1, -1, -1, -1,
3658  -1, -1, -1, -1, -1, -1, 139, 1, 141, 3,
3659  4, 5, 6, 7, -1, -1, 10, 11, 12, -1,
3660  -1, 15, 16, -1, 18, 19, 20, 21, 22, 23,
3661  24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
3662  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
3663  -1, 45, 46, 47, 48, 49, 50, 51, 52, 53,
3664  54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
3665  64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
3666  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3667  -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
3668  -1, 95, -1, -1, 98, 99, 100, 101, 102, 103,
3669  104, 105, 106, -1, -1, -1, -1, -1, -1, -1,
3670  1, -1, 3, 4, 5, 6, 7, -1, 9, 10,
3671  11, 12, 126, 127, 128, 16, -1, 18, 19, 20,
3672  21, 22, 23, 24, -1, 139, -1, 141, -1, 30,
3673  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
3674  -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
3675  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
3676  -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
3677  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3678  -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
3679  -1, 92, 93, -1, 95, -1, -1, 98, 99, 100,
3680  101, 102, 103, 104, 105, 106, -1, -1, -1, -1,
3681  -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
3682  -1, -1, -1, 11, 12, 126, 127, 128, 16, -1,
3683  18, 19, 20, 21, 22, 23, 24, -1, 139, -1,
3684  141, -1, 30, 31, 32, 33, 34, 35, 36, -1,
3685  -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
3686  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
3687  -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
3688  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3689  -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
3690  -1, 89, 90, -1, 92, 93, -1, 95, -1, -1,
3691  98, 99, 100, 101, 102, 103, 104, 105, 106, -1,
3692  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3693  -1, -1, -1, -1, -1, -1, -1, -1, 126, 127,
3694  128, -1, -1, -1, -1, -1, -1, -1, -1, 137,
3695  -1, 139, 1, 141, 3, 4, 5, 6, 7, -1,
3696  -1, -1, 11, 12, -1, -1, -1, 16, -1, 18,
3697  19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
3698  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
3699  39, -1, -1, -1, -1, -1, 45, 46, 47, 48,
3700  49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
3701  59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
3702  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3703  -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
3704  89, 90, -1, 92, 93, -1, 95, -1, -1, 98,
3705  99, 100, 101, 102, 103, 104, 105, 106, -1, -1,
3706  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3707  -1, -1, -1, -1, -1, -1, -1, 126, 127, 128,
3708  -1, -1, -1, -1, -1, -1, -1, -1, 137, -1,
3709  139, 1, 141, 3, 4, 5, 6, 7, -1, -1,
3710  -1, 11, 12, -1, -1, -1, 16, -1, 18, 19,
3711  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
3712  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
3713  -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
3714  50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
3715  60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
3716  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3717  -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
3718  90, -1, 92, 93, -1, 95, -1, -1, 98, 99,
3719  100, 101, 102, 103, 104, 105, 106, -1, -1, -1,
3720  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3721  -1, -1, -1, -1, -1, -1, 126, 127, 128, -1,
3722  -1, 131, 1, -1, 3, 4, 5, 6, 7, 139,
3723  -1, 141, 11, 12, -1, -1, -1, 16, -1, 18,
3724  19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
3725  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
3726  39, -1, -1, -1, -1, -1, 45, 46, 47, 48,
3727  49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
3728  59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
3729  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3730  -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
3731  89, 90, -1, 92, 93, -1, 95, -1, -1, 98,
3732  99, 100, 101, 102, 103, 104, 105, 106, -1, -1,
3733  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3734  -1, -1, -1, -1, -1, -1, -1, 126, 127, 128,
3735  -1, -1, 131, -1, -1, -1, -1, -1, -1, -1,
3736  139, 1, 141, 3, 4, 5, 6, 7, -1, -1,
3737  10, 11, 12, -1, -1, -1, 16, -1, 18, 19,
3738  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
3739  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
3740  -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
3741  50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
3742  60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
3743  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3744  -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
3745  90, -1, 92, 93, -1, 95, -1, -1, 98, 99,
3746  100, 101, 102, 103, 104, 105, 106, -1, -1, -1,
3747  -1, -1, -1, -1, 1, -1, 3, 4, 5, 6,
3748  7, -1, -1, -1, 11, 12, 126, 127, 128, 16,
3749  -1, 18, 19, 20, 21, 22, 23, 24, -1, 139,
3750  -1, 141, -1, 30, 31, 32, 33, 34, 35, 36,
3751  -1, -1, 39, -1, -1, -1, -1, -1, 45, 46,
3752  47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
3753  57, -1, 59, 60, -1, 62, 63, 64, -1, 66,
3754  67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3755  -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
3756  -1, -1, 89, 90, -1, 92, 93, -1, 95, -1,
3757  -1, 98, 99, 100, 101, 102, 103, 104, 105, 106,
3758  -1, 108, -1, -1, -1, -1, -1, -1, -1, 3,
3759  4, 5, -1, 7, -1, -1, -1, 11, 12, 126,
3760  127, 128, 16, -1, 18, 19, 20, 21, 22, 23,
3761  24, -1, 139, -1, 141, -1, 30, 31, 32, 33,
3762  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
3763  -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
3764  54, 55, 56, 57, 58, 59, 60, -1, 62, 63,
3765  64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
3766  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3767  -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
3768  -1, 95, 96, 97, 98, 99, 100, 101, 102, 103,
3769  104, 105, 106, -1, -1, -1, -1, -1, -1, -1,
3770  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
3771  11, 12, 126, 127, 128, 16, -1, 18, 19, 20,
3772  21, 22, 23, 24, -1, -1, -1, 141, -1, 30,
3773  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
3774  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
3775  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
3776  -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
3777  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3778  -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
3779  -1, 92, 93, -1, -1, -1, -1, 98, 99, 100,
3780  101, 102, 103, 104, 105, 106, -1, -1, -1, -1,
3781  -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
3782  -1, -1, -1, 11, 12, 126, 127, 128, 16, -1,
3783  18, 19, 20, 21, 22, 23, 24, -1, 139, -1,
3784  141, -1, 30, 31, 32, 33, 34, 35, 36, -1,
3785  -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
3786  -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
3787  -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
3788  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3789  -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
3790  -1, 89, 90, -1, 92, 93, -1, -1, -1, -1,
3791  98, 99, 100, 101, 102, 103, 104, 105, 106, -1,
3792  -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
3793  5, 6, 7, -1, -1, -1, 11, 12, 126, 127,
3794  128, 16, -1, 18, 19, 20, 21, 22, 23, 24,
3795  -1, -1, -1, 141, -1, 30, 31, 32, 33, 34,
3796  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
3797  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
3798  55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
3799  -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
3800  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3801  -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
3802  95, -1, -1, 98, 99, 100, 101, 102, 103, 104,
3803  105, 106, -1, -1, -1, -1, -1, -1, -1, -1,
3804  -1, 3, 4, 5, 6, 7, -1, -1, -1, 11,
3805  12, 126, 127, 128, 16, -1, 18, 19, 20, 21,
3806  22, 23, 24, -1, 139, -1, -1, -1, 30, 31,
3807  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
3808  -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
3809  52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
3810  62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
3811  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3812  -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
3813  92, 93, -1, 95, -1, -1, 98, 99, 100, 101,
3814  102, 103, 104, 105, 106, -1, -1, -1, -1, -1,
3815  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3816  -1, -1, -1, -1, 126, 127, 128, -1, -1, -1,
3817  -1, -1, -1, -1, -1, -1, -1, 139, 3, 4,
3818  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
3819  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
3820  25, 26, -1, -1, -1, 30, 31, 32, 33, 34,
3821  35, 36, 37, 38, 39, -1, -1, -1, -1, -1,
3822  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
3823  55, 56, 57, -1, -1, -1, -1, -1, -1, -1,
3824  -1, 66, 67, 68, 69, 70, 71, 72, 73, 74,
3825  -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
3826  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3827  95, 96, -1, -1, -1, -1, -1, -1, -1, -1,
3828  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3829  -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
3830  125, -1, 127, 128, -1, -1, -1, -1, -1, -1,
3831  135, 136, 3, 4, 5, 6, 7, 8, 9, 10,
3832  11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
3833  21, 22, 23, 24, 25, 26, -1, -1, -1, 30,
3834  31, 32, 33, 34, 35, 36, 37, 38, 39, -1,
3835  -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
3836  51, 52, 53, 54, 55, 56, 57, -1, -1, -1,
3837  -1, -1, -1, -1, -1, 66, 67, 68, 69, 70,
3838  71, 72, 73, 74, -1, -1, 77, 78, -1, -1,
3839  81, 82, 83, 84, -1, -1, -1, -1, -1, -1,
3840  -1, -1, -1, -1, 95, 96, -1, -1, -1, -1,
3841  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3842  -1, -1, -1, -1, -1, 116, 117, 118, 119, 120,
3843  121, 122, 123, 124, 125, -1, 127, 128, -1, -1,
3844  -1, -1, -1, -1, 135, 3, 4, 5, 6, 7,
3845  8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
3846  18, 19, 20, 21, 22, 23, 24, 25, 26, -1,
3847  -1, -1, 30, 31, 32, 33, 34, 35, 36, 37,
3848  38, 39, -1, -1, -1, -1, -1, 45, 46, 47,
3849  48, 49, 50, 51, 52, 53, 54, -1, 56, -1,
3850  -1, -1, -1, -1, -1, -1, -1, -1, 66, 67,
3851  68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
3852  78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
3853  -1, -1, -1, -1, -1, -1, -1, 95, 96, -1,
3854  -1, 99, -1, -1, -1, -1, -1, -1, -1, -1,
3855  -1, -1, -1, -1, -1, -1, -1, -1, 116, 117,
3856  118, 119, 120, 121, 122, 123, 124, 125, -1, 127,
3857  128, -1, -1, -1, -1, -1, -1, 135, 3, 4,
3858  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
3859  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
3860  25, 26, -1, -1, -1, 30, 31, 32, 33, 34,
3861  35, 36, 37, 38, 39, -1, -1, -1, -1, -1,
3862  45, 46, 47, 48, 49, 50, 51, 52, 53, -1,
3863  -1, 56, -1, -1, -1, -1, -1, -1, -1, -1,
3864  -1, 66, 67, 68, 69, 70, 71, 72, 73, 74,
3865  -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
3866  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3867  95, 96, -1, -1, 99, -1, -1, -1, -1, -1,
3868  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3869  -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
3870  125, -1, 127, 128, -1, -1, -1, -1, -1, -1,
3871  135, 3, 4, 5, 6, 7, 8, 9, 10, 11,
3872  12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
3873  22, 23, 24, 25, 26, -1, -1, -1, 30, 31,
3874  32, 33, 34, 35, 36, 37, 38, 39, -1, -1,
3875  -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
3876  52, 53, -1, -1, 56, -1, -1, -1, -1, -1,
3877  -1, -1, -1, -1, 66, 67, 68, 69, 70, 71,
3878  72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
3879  82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
3880  -1, -1, -1, 95, 96, -1, -1, -1, -1, -1,
3881  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3882  -1, -1, -1, -1, 116, 117, 118, 119, 120, 121,
3883  122, 123, 124, 125, -1, 127, 128, 3, 4, 5,
3884  -1, 7, -1, 135, -1, 11, 12, -1, -1, -1,
3885  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
3886  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
3887  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
3888  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
3889  56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
3890  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3891  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3892  86, -1, -1, 89, 90, -1, 92, 93, -1, -1,
3893  -1, -1, 98, 99, 100, 101, 102, 103, 104, 105,
3894  106, -1, -1, -1, -1, -1, 3, 4, 5, -1,
3895  7, -1, -1, -1, 11, 12, -1, -1, -1, 16,
3896  126, 18, 19, 20, 21, 22, 23, 24, 134, -1,
3897  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
3898  -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
3899  -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
3900  57, -1, 59, 60, -1, 62, 63, 64, -1, -1,
3901  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3902  -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
3903  -1, -1, 89, 90, -1, 92, 93, -1, -1, -1,
3904  -1, 98, 99, 100, 101, 102, 103, 104, 105, 106,
3905  -1, -1, -1, -1, -1, 3, 4, 5, 6, 7,
3906  -1, -1, -1, 11, 12, -1, -1, -1, 16, 126,
3907  18, 19, 20, 21, 22, 23, 24, 134, -1, -1,
3908  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
3909  -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
3910  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
3911  -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
3912  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3913  -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
3914  -1, 89, 90, -1, 92, 93, -1, 95, -1, -1,
3915  98, 99, 100, 101, 102, 103, 104, 105, 106, -1,
3916  -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
3917  5, -1, 7, -1, -1, -1, 11, 12, 126, 127,
3918  128, 16, -1, 18, 19, 20, 21, 22, 23, 24,
3919  -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
3920  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
3921  -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
3922  55, 56, 57, 58, 59, 60, -1, 62, 63, 64,
3923  -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
3924  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3925  -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
3926  95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
3927  105, 106, -1, -1, -1, -1, -1, -1, -1, -1,
3928  -1, 3, 4, 5, 6, 7, -1, -1, -1, 11,
3929  12, 126, 127, 128, 16, -1, 18, 19, 20, 21,
3930  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
3931  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
3932  -1, -1, -1, 45, 46, -1, 48, 49, 50, 51,
3933  52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
3934  62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
3935  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3936  -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
3937  92, 93, -1, 95, -1, -1, 98, 99, 100, 101,
3938  102, 103, 104, 105, 106, -1, -1, -1, -1, -1,
3939  -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
3940  -1, -1, 11, 12, 126, 127, 128, 16, -1, 18,
3941  19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
3942  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
3943  39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
3944  49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
3945  59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
3946  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3947  -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
3948  89, 90, -1, 92, 93, -1, 95, 96, 97, 98,
3949  99, 100, 101, 102, 103, 104, 105, 106, -1, -1,
3950  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
3951  -1, 7, -1, -1, -1, 11, 12, 126, 127, 128,
3952  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
3953  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
3954  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
3955  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
3956  56, 57, 58, 59, 60, -1, 62, 63, 64, -1,
3957  66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
3958  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3959  86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
3960  96, -1, 98, 99, 100, 101, 102, 103, 104, 105,
3961  106, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3962  3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
3963  126, 127, 128, 16, -1, 18, 19, 20, 21, 22,
3964  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
3965  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
3966  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
3967  53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
3968  63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
3969  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3970  -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
3971  93, -1, -1, 96, 97, 98, 99, 100, 101, 102,
3972  103, 104, 105, 106, -1, -1, -1, -1, -1, -1,
3973  -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
3974  -1, 11, 12, 126, 127, 128, 16, -1, 18, 19,
3975  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
3976  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
3977  -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
3978  50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
3979  60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
3980  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3981  -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
3982  90, -1, 92, 93, -1, 95, 96, -1, 98, 99,
3983  100, 101, 102, 103, 104, 105, 106, -1, -1, -1,
3984  -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
3985  7, -1, -1, -1, 11, 12, 126, 127, 128, 16,
3986  -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
3987  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
3988  -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
3989  -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
3990  57, 58, 59, 60, -1, 62, 63, 64, -1, 66,
3991  67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3992  -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
3993  -1, -1, 89, 90, -1, 92, 93, -1, -1, 96,
3994  -1, 98, 99, 100, 101, 102, 103, 104, 105, 106,
3995  -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
3996  4, 5, -1, 7, -1, -1, -1, 11, 12, 126,
3997  127, 128, 16, -1, 18, 19, 20, 21, 22, 23,
3998  24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
3999  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
4000  -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
4001  54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
4002  64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
4003  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4004  -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
4005  -1, 95, -1, -1, 98, 99, 100, 101, 102, 103,
4006  104, 105, 106, -1, -1, -1, -1, -1, -1, -1,
4007  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4008  11, 12, 126, 127, 128, 16, -1, 18, 19, 20,
4009  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4010  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4011  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4012  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4013  -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
4014  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4015  -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
4016  -1, 92, 93, -1, 95, -1, -1, 98, 99, 100,
4017  101, 102, 103, 104, 105, 106, -1, -1, -1, -1,
4018  -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
4019  -1, -1, -1, 11, 12, 126, 127, 128, 16, -1,
4020  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
4021  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4022  -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
4023  -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4024  -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
4025  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4026  -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
4027  -1, 89, 90, -1, 92, 93, -1, 95, -1, -1,
4028  98, 99, 100, 101, 102, 103, 104, 105, 106, -1,
4029  -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
4030  5, -1, 7, -1, -1, -1, 11, 12, 126, 127,
4031  128, 16, -1, 18, 19, 20, 21, 22, 23, 24,
4032  -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
4033  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
4034  -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
4035  55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
4036  -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
4037  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4038  -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
4039  95, -1, -1, 98, 99, 100, 101, 102, 103, 104,
4040  105, 106, -1, -1, -1, -1, -1, -1, -1, -1,
4041  -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
4042  12, 126, 127, 128, 16, -1, 18, 19, 20, 21,
4043  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
4044  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
4045  -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
4046  52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
4047  62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
4048  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4049  -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
4050  92, 93, -1, 95, -1, -1, 98, 99, 100, 101,
4051  102, 103, 104, 105, 106, -1, -1, -1, -1, -1,
4052  -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
4053  -1, -1, 11, 12, 126, 127, 128, 16, -1, 18,
4054  19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
4055  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
4056  39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
4057  49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
4058  59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
4059  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4060  -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
4061  89, 90, -1, 92, 93, -1, -1, -1, -1, 98,
4062  99, 100, 101, 102, 103, 104, 105, 106, -1, -1,
4063  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
4064  -1, 7, -1, -1, -1, 11, 12, 126, 127, 128,
4065  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
4066  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
4067  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
4068  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
4069  56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
4070  66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
4071  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4072  86, -1, -1, 89, 90, -1, 92, 93, -1, -1,
4073  -1, -1, 98, 99, 100, 101, 102, 103, 104, 105,
4074  106, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4075  3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
4076  126, 127, 128, 16, -1, 18, 19, 20, 21, 22,
4077  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
4078  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4079  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
4080  53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
4081  63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
4082  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4083  -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
4084  93, -1, -1, -1, -1, 98, 99, 100, 101, 102,
4085  103, 104, 105, 106, -1, -1, -1, -1, -1, -1,
4086  -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
4087  -1, 11, 12, 126, 127, 128, 16, -1, 18, 19,
4088  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
4089  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4090  -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
4091  50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
4092  60, -1, 62, 63, 64, -1, -1, -1, -1, -1,
4093  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4094  -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
4095  90, -1, 92, 93, -1, 95, -1, -1, 98, 99,
4096  100, 101, 102, 103, 104, 105, 106, -1, -1, -1,
4097  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4098  11, 12, -1, -1, -1, 16, 126, 18, 19, 20,
4099  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4100  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4101  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4102  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4103  -1, 62, 63, 64, -1, -1, -1, -1, -1, -1,
4104  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4105  -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
4106  -1, 92, 93, -1, 95, -1, -1, 98, 99, 100,
4107  101, 102, 103, 104, 105, 106, -1, -1, -1, -1,
4108  -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
4109  12, -1, -1, -1, 16, 126, 18, 19, 20, 21,
4110  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
4111  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
4112  -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
4113  52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
4114  62, 63, 64, -1, -1, -1, -1, -1, -1, -1,
4115  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4116  -1, 83, -1, -1, 86, -1, -1, 89, 90, -1,
4117  92, 93, -1, -1, -1, -1, 98, 99, 100, 101,
4118  102, 103, 104, 105, 106, -1, -1, -1, -1, -1,
4119  3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
4120  -1, -1, -1, 16, 126, 18, 19, 20, 21, 22,
4121  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
4122  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4123  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
4124  53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
4125  63, 64, -1, -1, -1, -1, -1, -1, -1, -1,
4126  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4127  -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
4128  93, -1, -1, -1, -1, 98, 99, 100, 101, 102,
4129  103, 104, 105, 106, -1, -1, -1, -1, -1, 3,
4130  4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
4131  -1, -1, 16, 126, 18, 19, 20, 21, 22, 23,
4132  24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
4133  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
4134  -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
4135  54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
4136  64, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4137  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4138  -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
4139  -1, -1, -1, -1, 98, 99, 100, 101, 102, 103,
4140  104, 105, 106, -1, -1, -1, -1, -1, 3, 4,
4141  5, -1, 7, -1, -1, -1, 11, 12, -1, -1,
4142  -1, 16, 126, 18, 19, 20, 21, 22, 23, 24,
4143  -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
4144  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
4145  -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
4146  55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
4147  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4148  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4149  -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
4150  -1, -1, -1, 98, 99, 100, 101, 102, 103, 104,
4151  105, 106, -1, -1, -1, -1, -1, 3, 4, 5,
4152  -1, 7, -1, -1, -1, 11, 12, -1, -1, -1,
4153  16, 126, 18, 19, 20, 21, 22, 23, 24, -1,
4154  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
4155  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
4156  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
4157  56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
4158  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4159  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4160  86, -1, -1, 89, 90, -1, 92, 93, -1, -1,
4161  -1, -1, 98, 99, 100, 101, 102, 103, 104, 105,
4162  106, -1, -1, -1, -1, -1, -1, 52, 53, -1,
4163  -1, 56, -1, -1, -1, -1, -1, -1, -1, -1,
4164  126, 66, 67, 68, 69, 70, 71, 72, 73, 74,
4165  -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
4166  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4167  95, 96, -1, -1, -1, -1, -1, -1, -1, -1,
4168  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4169  -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
4170  125, -1, 127, 128, 52, 53, -1, -1, 56, -1,
4171  135, -1, -1, -1, -1, -1, -1, -1, 66, 67,
4172  68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
4173  78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
4174  -1, -1, -1, -1, -1, -1, -1, 95, 96, -1,
4175  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4176  -1, -1, -1, -1, -1, -1, -1, -1, 116, 117,
4177  118, 119, 120, 121, 122, 123, 124, 125, -1, 127,
4178  128, 52, 53, -1, -1, 56, -1, 135, -1, -1,
4179  -1, -1, -1, -1, -1, 66, 67, 68, 69, 70,
4180  71, 72, 73, 74, -1, -1, 77, 78, -1, -1,
4181  81, 82, 83, 84, -1, -1, -1, -1, -1, -1,
4182  -1, -1, -1, -1, 95, 96, -1, -1, -1, -1,
4183  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4184  -1, -1, -1, -1, -1, 116, 117, 118, 119, 120,
4185  121, 122, 123, 124, 125, -1, 127, 128, 52, 53,
4186  -1, -1, 56, -1, 135, -1, -1, -1, -1, -1,
4187  -1, -1, 66, 67, 68, 69, 70, 71, 72, 73,
4188  74, -1, -1, 77, 78, -1, -1, 81, 82, 83,
4189  84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4190  -1, 95, 96, -1, -1, -1, -1, -1, -1, -1,
4191  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4192  -1, -1, 116, 117, 118, 119, 120, 121, 122, 123,
4193  124, 125, -1, 127, 128, 52, 53, -1, -1, 56,
4194  -1, 135, -1, -1, -1, -1, -1, -1, -1, 66,
4195  67, 68, 69, 70, 71, 72, 73, 74, -1, -1,
4196  77, 78, -1, -1, 81, 82, 83, 84, -1, -1,
4197  -1, -1, -1, -1, -1, -1, -1, -1, 95, 96,
4198  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4199  -1, -1, -1, -1, -1, -1, -1, -1, -1, 116,
4200  117, 118, 119, 120, 121, 122, 123, 124, 125, -1,
4201  127, 128, 52, 53, -1, -1, 56, -1, 135, -1,
4202  -1, -1, -1, -1, -1, -1, 66, 67, 68, 69,
4203  70, 71, 72, 73, 74, -1, -1, 77, 78, -1,
4204  -1, 81, 82, 83, 84, -1, -1, -1, -1, -1,
4205  -1, -1, -1, -1, -1, 95, 96, -1, -1, -1,
4206  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4207  -1, -1, -1, -1, -1, -1, 116, 117, 118, 119,
4208  120, 121, 122, 123, 124, 125, -1, 127, 128, 52,
4209  53, -1, -1, 56, -1, 135, -1, -1, -1, -1,
4210  -1, -1, -1, 66, 67, 68, 69, 70, 71, 72,
4211  73, 74, -1, -1, 77, 78, -1, -1, 81, 82,
4212  83, 84, -1, -1, -1, -1, -1, -1, -1, -1,
4213  -1, -1, 95, 96, -1, -1, -1, -1, -1, -1,
4214  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4215  -1, -1, -1, 116, 117, 118, 119, 120, 121, 122,
4216  123, 124, 125, -1, 127, 128, 52, 53, -1, -1,
4217  56, -1, 135, -1, -1, -1, -1, -1, -1, -1,
4218  66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
4219  -1, 77, 78, -1, -1, 81, 82, 83, 84, -1,
4220  -1, -1, -1, -1, -1, -1, -1, -1, -1, 95,
4221  96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4222  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4223  116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
4224  -1, 127, 128, 52, 53, -1, -1, 56, -1, 135,
4225  -1, -1, -1, -1, -1, -1, -1, 66, 67, 68,
4226  69, 70, 71, 72, 73, 74, -1, -1, 77, 78,
4227  -1, -1, 81, 82, 83, 84, -1, -1, -1, -1,
4228  -1, -1, -1, -1, -1, -1, 95, 96, -1, -1,
4229  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4230  -1, -1, -1, -1, -1, -1, -1, 116, 117, 118,
4231  119, 120, 121, 122, 123, 124, 125, -1, 127, 128,
4232  52, 53, -1, -1, 56, -1, 135, -1, -1, -1,
4233  -1, -1, -1, -1, 66, 67, 68, 69, 70, 71,
4234  72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
4235  82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
4236  -1, -1, -1, 95, 96, -1, -1, -1, -1, -1,
4237  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4238  -1, -1, -1, -1, 116, 117, 118, 119, 120, 121,
4239  122, 123, 124, 125, -1, 127, 128, 52, 53, -1,
4240  -1, 56, -1, 135, -1, -1, -1, -1, -1, -1,
4241  -1, 66, 67, 68, 69, 70, 71, 72, 73, 74,
4242  -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
4243  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4244  95, 96, -1, -1, -1, -1, -1, -1, -1, -1,
4245  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4246  -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
4247  125, -1, 127, 128, 52, 53, -1, -1, 56, -1,
4248  135, -1, -1, -1, -1, -1, -1, -1, 66, 67,
4249  68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
4250  78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
4251  -1, -1, -1, -1, -1, -1, -1, 95, 96, -1,
4252  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4253  -1, -1, -1, -1, -1, -1, -1, -1, 116, 117,
4254  118, 119, 120, 121, 122, 123, 124, 125, -1, 127,
4255  128, 52, 53, -1, -1, 56, -1, 135, -1, -1,
4256  -1, -1, -1, -1, -1, 66, 67, 68, 69, 70,
4257  71, 72, 73, 74, -1, -1, 77, 78, -1, -1,
4258  81, 82, 83, 84, -1, -1, -1, -1, -1, -1,
4259  -1, -1, -1, -1, 95, 96, -1, -1, -1, -1,
4260  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4261  -1, -1, -1, -1, -1, 116, 117, 118, 119, 120,
4262  121, 122, 123, 124, 125, -1, 127, 128, -1, -1,
4263  -1, -1, -1, -1, 135
4264 };
4265 
4266 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
4267  symbol of state STATE-NUM. */
4268 static const yytype_uint16 yystos[] =
4269 {
4270  0, 143, 144, 0, 1, 3, 4, 5, 6, 7,
4271  11, 12, 16, 18, 19, 20, 21, 22, 23, 24,
4272  30, 31, 32, 33, 34, 35, 36, 39, 45, 46,
4273  47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
4274  57, 59, 60, 62, 63, 64, 66, 67, 86, 89,
4275  90, 92, 93, 95, 98, 99, 100, 101, 102, 103,
4276  104, 105, 106, 126, 127, 128, 145, 146, 147, 154,
4277  156, 157, 159, 160, 163, 164, 165, 167, 168, 169,
4278  171, 172, 182, 196, 214, 215, 216, 217, 218, 219,
4279  220, 221, 222, 223, 224, 250, 251, 265, 266, 267,
4280  268, 269, 270, 271, 274, 276, 277, 289, 291, 292,
4281  293, 294, 295, 296, 297, 328, 339, 147, 3, 4,
4282  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
4283  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
4284  25, 26, 30, 31, 32, 33, 34, 35, 36, 37,
4285  38, 39, 45, 46, 47, 48, 49, 50, 51, 52,
4286  53, 56, 66, 67, 68, 69, 70, 71, 72, 73,
4287  74, 77, 78, 81, 82, 83, 84, 95, 96, 116,
4288  117, 118, 119, 120, 121, 122, 123, 124, 125, 127,
4289  128, 135, 175, 176, 177, 178, 180, 181, 289, 291,
4290  39, 58, 86, 89, 95, 96, 97, 127, 164, 172,
4291  182, 184, 189, 192, 194, 214, 293, 294, 296, 297,
4292  326, 327, 189, 189, 136, 190, 191, 136, 186, 190,
4293  136, 141, 333, 54, 177, 333, 148, 130, 21, 22,
4294  30, 31, 32, 163, 182, 214, 182, 56, 1, 47,
4295  89, 150, 151, 152, 154, 166, 167, 339, 157, 198,
4296  185, 194, 326, 339, 184, 325, 326, 339, 46, 86,
4297  126, 134, 171, 196, 214, 293, 294, 297, 242, 243,
4298  54, 55, 57, 175, 281, 290, 280, 281, 282, 140,
4299  272, 140, 278, 140, 275, 140, 279, 59, 60, 159,
4300  182, 182, 139, 141, 332, 337, 338, 40, 41, 42,
4301  43, 44, 37, 38, 26, 130, 186, 190, 256, 28,
4302  248, 113, 134, 89, 95, 168, 113, 68, 69, 70,
4303  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
4304  83, 84, 114, 116, 117, 118, 119, 120, 121, 122,
4305  123, 124, 125, 85, 132, 133, 197, 157, 158, 158,
4306  201, 203, 158, 332, 338, 86, 165, 172, 214, 230,
4307  293, 294, 297, 52, 56, 83, 86, 173, 174, 214,
4308  293, 294, 297, 174, 33, 34, 35, 36, 49, 50,
4309  51, 52, 56, 136, 175, 295, 323, 85, 133, 331,
4310  256, 268, 87, 87, 134, 184, 56, 184, 184, 184,
4311  113, 88, 134, 193, 339, 85, 132, 133, 87, 87,
4312  134, 193, 189, 333, 334, 189, 188, 189, 194, 326,
4313  339, 157, 334, 157, 54, 63, 64, 155, 136, 183,
4314  130, 150, 85, 133, 87, 154, 153, 166, 137, 332,
4315  338, 334, 199, 334, 138, 134, 141, 336, 134, 336,
4316  131, 336, 333, 56, 59, 60, 168, 170, 134, 85,
4317  132, 133, 244, 61, 107, 109, 110, 283, 110, 283,
4318  110, 65, 283, 110, 110, 273, 283, 110, 61, 110,
4319  110, 110, 273, 110, 61, 110, 68, 68, 139, 147,
4320  158, 158, 158, 158, 154, 157, 157, 258, 257, 94,
4321  161, 249, 95, 159, 184, 194, 195, 166, 134, 171,
4322  134, 156, 159, 172, 182, 184, 195, 182, 182, 182,
4323  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
4324  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
4325  182, 182, 182, 52, 53, 56, 180, 255, 329, 330,
4326  188, 52, 53, 56, 180, 254, 329, 149, 150, 13,
4327  226, 337, 226, 158, 158, 332, 17, 259, 56, 85,
4328  132, 133, 25, 157, 52, 56, 173, 1, 117, 298,
4329  337, 85, 132, 133, 210, 324, 211, 331, 52, 56,
4330  329, 159, 182, 159, 182, 179, 182, 184, 95, 184,
4331  192, 326, 52, 56, 188, 52, 56, 327, 334, 137,
4332  334, 134, 134, 334, 177, 200, 182, 145, 131, 329,
4333  329, 182, 130, 334, 152, 334, 326, 134, 170, 52,
4334  56, 188, 52, 56, 52, 54, 55, 56, 57, 58,
4335  68, 89, 95, 96, 97, 120, 123, 136, 246, 301,
4336  303, 304, 305, 306, 307, 308, 311, 312, 313, 314,
4337  317, 318, 319, 320, 321, 285, 284, 140, 283, 140,
4338  140, 140, 182, 182, 76, 118, 237, 238, 339, 237,
4339  162, 237, 184, 134, 334, 170, 134, 113, 44, 333,
4340  87, 87, 186, 190, 253, 333, 335, 87, 87, 186,
4341  190, 252, 10, 225, 8, 261, 339, 150, 13, 150,
4342  27, 227, 337, 227, 259, 194, 225, 52, 56, 188,
4343  52, 56, 205, 208, 337, 299, 207, 52, 56, 173,
4344  188, 149, 157, 136, 300, 303, 212, 186, 187, 190,
4345  339, 44, 177, 184, 193, 87, 87, 335, 87, 87,
4346  326, 157, 131, 145, 336, 168, 335, 113, 184, 52,
4347  89, 95, 231, 232, 233, 305, 303, 245, 134, 302,
4348  134, 322, 339, 52, 134, 322, 134, 302, 52, 134,
4349  302, 52, 286, 54, 55, 57, 288, 297, 52, 58,
4350  234, 236, 239, 307, 309, 310, 313, 315, 316, 319,
4351  321, 333, 150, 150, 237, 150, 95, 184, 170, 182,
4352  115, 159, 182, 159, 182, 161, 186, 138, 87, 159,
4353  182, 159, 182, 161, 187, 184, 195, 262, 339, 15,
4354  229, 339, 14, 228, 229, 229, 202, 204, 225, 134,
4355  226, 335, 158, 337, 158, 149, 335, 225, 334, 303,
4356  149, 337, 175, 256, 248, 182, 87, 134, 334, 131,
4357  184, 233, 134, 305, 134, 334, 239, 29, 111, 247,
4358  301, 306, 317, 319, 308, 313, 321, 307, 314, 319,
4359  307, 287, 113, 86, 214, 239, 118, 134, 235, 134,
4360  322, 322, 134, 235, 134, 235, 139, 10, 131, 150,
4361  10, 184, 182, 159, 182, 88, 263, 339, 150, 9,
4362  264, 339, 158, 225, 225, 150, 150, 184, 150, 227,
4363  209, 337, 225, 334, 225, 213, 334, 232, 134, 95,
4364  231, 137, 150, 150, 134, 302, 134, 302, 322, 134,
4365  302, 134, 302, 302, 150, 214, 56, 85, 118, 234,
4366  316, 319, 309, 313, 307, 315, 319, 307, 52, 240,
4367  241, 304, 131, 86, 172, 214, 293, 294, 297, 226,
4368  150, 226, 225, 225, 229, 259, 260, 206, 149, 300,
4369  134, 232, 134, 305, 10, 131, 307, 319, 307, 307,
4370  108, 52, 56, 134, 235, 134, 235, 322, 134, 235,
4371  134, 235, 235, 134, 333, 56, 85, 132, 133, 150,
4372  150, 150, 225, 149, 232, 134, 302, 134, 302, 302,
4373  302, 307, 319, 307, 307, 241, 52, 56, 188, 52,
4374  56, 261, 228, 225, 225, 232, 307, 235, 134, 235,
4375  235, 235, 335, 302, 307, 235
4376 };
4377 
4378 #define yyerrok (yyerrstatus = 0)
4379 #define yyclearin (yychar = YYEMPTY)
4380 #define YYEMPTY (-2)
4381 #define YYEOF 0
4382 
4383 #define YYACCEPT goto yyacceptlab
4384 #define YYABORT goto yyabortlab
4385 #define YYERROR goto yyerrorlab
4386 
4387 
4388 /* Like YYERROR except do call yyerror. This remains here temporarily
4389  to ease the transition to the new meaning of YYERROR, for GCC.
4390  Once GCC version 2 has supplanted version 1, this can go. However,
4391  YYFAIL appears to be in use. Nevertheless, it is formally deprecated
4392  in Bison 2.4.2's NEWS entry, where a plan to phase it out is
4393  discussed. */
4394 
4395 #define YYFAIL goto yyerrlab
4396 #if defined YYFAIL
4397  /* This is here to suppress warnings from the GCC cpp's
4398  -Wunused-macros. Normally we don't worry about that warning, but
4399  some users do, and we want to make it easy for users to remove
4400  YYFAIL uses, which will produce warnings from Bison 2.5. */
4401 #endif
4402 
4403 #define YYRECOVERING() (!!yyerrstatus)
4404 
4405 #define YYBACKUP(Token, Value) \
4406 do \
4407  if (yychar == YYEMPTY && yylen == 1) \
4408  { \
4409  yychar = (Token); \
4410  yylval = (Value); \
4411  YYPOPSTACK (1); \
4412  goto yybackup; \
4413  } \
4414  else \
4415  { \
4416  parser_yyerror (parser, YY_("syntax error: cannot back up")); \
4417  YYERROR; \
4418  } \
4419 while (YYID (0))
4420 
4421 
4422 #define YYTERROR 1
4423 #define YYERRCODE 256
4424 
4425 
4426 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
4427  If N is 0, then set CURRENT to the empty location which ends
4428  the previous symbol: RHS[0] (always defined). */
4429 
4430 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
4431 #ifndef YYLLOC_DEFAULT
4432 # define YYLLOC_DEFAULT(Current, Rhs, N) \
4433  do \
4434  if (YYID (N)) \
4435  { \
4436  (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
4437  (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
4438  (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
4439  (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
4440  } \
4441  else \
4442  { \
4443  (Current).first_line = (Current).last_line = \
4444  YYRHSLOC (Rhs, 0).last_line; \
4445  (Current).first_column = (Current).last_column = \
4446  YYRHSLOC (Rhs, 0).last_column; \
4447  } \
4448  while (YYID (0))
4449 #endif
4450 
4451 
4452 /* This macro is provided for backward compatibility. */
4453 
4454 #ifndef YY_LOCATION_PRINT
4455 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
4456 #endif
4457 
4458 
4459 /* YYLEX -- calling `yylex' with the right arguments. */
4460 
4461 #ifdef YYLEX_PARAM
4462 # define YYLEX yylex (&yylval, YYLEX_PARAM)
4463 #else
4464 # define YYLEX yylex (&yylval, parser)
4465 #endif
4466 
4467 /* Enable debugging if requested. */
4468 #if YYDEBUG
4469 
4470 # ifndef YYFPRINTF
4471 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
4472 # define YYFPRINTF fprintf
4473 # endif
4474 
4475 # define YYDPRINTF(Args) \
4476 do { \
4477  if (yydebug) \
4478  YYFPRINTF Args; \
4479 } while (YYID (0))
4480 
4481 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
4482 do { \
4483  if (yydebug) \
4484  { \
4485  YYFPRINTF (stderr, "%s ", Title); \
4486  yy_symbol_print (stderr, \
4487  Type, Value, parser); \
4488  YYFPRINTF (stderr, "\n"); \
4489  } \
4490 } while (YYID (0))
4491 
4492 
4493 /*--------------------------------.
4494 | Print this symbol on YYOUTPUT. |
4495 `--------------------------------*/
4496 
4497 /*ARGSUSED*/
4498 #if (defined __STDC__ || defined __C99__FUNC__ \
4499  || defined __cplusplus || defined _MSC_VER)
4500 static void
4501 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
4502 #else
4503 static void
4504 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
4505  FILE *yyoutput;
4506  int yytype;
4507  YYSTYPE const * const yyvaluep;
4508  struct parser_params *parser;
4509 #endif
4510 {
4511  if (!yyvaluep)
4512  return;
4513  YYUSE (parser);
4514 # ifdef YYPRINT
4515  if (yytype < YYNTOKENS)
4516  YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
4517 # else
4518  YYUSE (yyoutput);
4519 # endif
4520  switch (yytype)
4521  {
4522  default:
4523  break;
4524  }
4525 }
4526 
4527 
4528 /*--------------------------------.
4529 | Print this symbol on YYOUTPUT. |
4530 `--------------------------------*/
4531 
4532 #if (defined __STDC__ || defined __C99__FUNC__ \
4533  || defined __cplusplus || defined _MSC_VER)
4534 static void
4535 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
4536 #else
4537 static void
4538 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
4539  FILE *yyoutput;
4540  int yytype;
4541  YYSTYPE const * const yyvaluep;
4542  struct parser_params *parser;
4543 #endif
4544 {
4545  if (yytype < YYNTOKENS)
4546  YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
4547  else
4548  YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
4549 
4550  yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
4551  YYFPRINTF (yyoutput, ")");
4552 }
4553 
4554 /*------------------------------------------------------------------.
4555 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
4556 | TOP (included). |
4557 `------------------------------------------------------------------*/
4558 
4559 #if (defined __STDC__ || defined __C99__FUNC__ \
4560  || defined __cplusplus || defined _MSC_VER)
4561 static void
4562 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
4563 #else
4564 static void
4565 yy_stack_print (yybottom, yytop)
4566  yytype_int16 *yybottom;
4567  yytype_int16 *yytop;
4568 #endif
4569 {
4570  YYFPRINTF (stderr, "Stack now");
4571  for (; yybottom <= yytop; yybottom++)
4572  {
4573  int yybot = *yybottom;
4574  YYFPRINTF (stderr, " %d", yybot);
4575  }
4576  YYFPRINTF (stderr, "\n");
4577 }
4578 
4579 # define YY_STACK_PRINT(Bottom, Top) \
4580 do { \
4581  if (yydebug) \
4582  yy_stack_print ((Bottom), (Top)); \
4583 } while (YYID (0))
4584 
4585 
4586 /*------------------------------------------------.
4587 | Report that the YYRULE is going to be reduced. |
4588 `------------------------------------------------*/
4589 
4590 #if (defined __STDC__ || defined __C99__FUNC__ \
4591  || defined __cplusplus || defined _MSC_VER)
4592 static void
4593 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
4594 #else
4595 static void
4596 yy_reduce_print (yyvsp, yyrule, parser)
4597  YYSTYPE *yyvsp;
4598  int yyrule;
4599  struct parser_params *parser;
4600 #endif
4601 {
4602  int yynrhs = yyr2[yyrule];
4603  int yyi;
4604  unsigned long int yylno = yyrline[yyrule];
4605  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
4606  yyrule - 1, yylno);
4607  /* The symbols being reduced. */
4608  for (yyi = 0; yyi < yynrhs; yyi++)
4609  {
4610  YYFPRINTF (stderr, " $%d = ", yyi + 1);
4611  yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
4612  &(yyvsp[(yyi + 1) - (yynrhs)])
4613  , parser);
4614  YYFPRINTF (stderr, "\n");
4615  }
4616 }
4617 
4618 # define YY_REDUCE_PRINT(Rule) \
4619 do { \
4620  if (yydebug) \
4621  yy_reduce_print (yyvsp, Rule, parser); \
4622 } while (YYID (0))
4623 
4624 /* Nonzero means print parse trace. It is left uninitialized so that
4625  multiple parsers can coexist. */
4626 #ifndef yydebug
4627 int yydebug;
4628 #endif
4629 #else /* !YYDEBUG */
4630 # define YYDPRINTF(Args)
4631 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
4632 # define YY_STACK_PRINT(Bottom, Top)
4633 # define YY_REDUCE_PRINT(Rule)
4634 #endif /* !YYDEBUG */
4635 
4636 
4637 /* YYINITDEPTH -- initial size of the parser's stacks. */
4638 #ifndef YYINITDEPTH
4639 # define YYINITDEPTH 200
4640 #endif
4641 
4642 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
4643  if the built-in stack extension method is used).
4644 
4645  Do not make this value too large; the results are undefined if
4646  YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
4647  evaluated with infinite-precision integer arithmetic. */
4648 
4649 #ifndef YYMAXDEPTH
4650 # define YYMAXDEPTH 10000
4651 #endif
4652 
4653 
4654 #if YYERROR_VERBOSE
4655 
4656 # ifndef yystrlen
4657 # if defined __GLIBC__ && defined _STRING_H
4658 # define yystrlen strlen
4659 # else
4660 /* Return the length of YYSTR. */
4661 #if (defined __STDC__ || defined __C99__FUNC__ \
4662  || defined __cplusplus || defined _MSC_VER)
4663 static YYSIZE_T
4664 yystrlen (const char *yystr)
4665 #else
4666 static YYSIZE_T
4667 yystrlen (yystr)
4668  const char *yystr;
4669 #endif
4670 {
4671  YYSIZE_T yylen;
4672  for (yylen = 0; yystr[yylen]; yylen++)
4673  continue;
4674  return yylen;
4675 }
4676 # endif
4677 # endif
4678 
4679 # ifndef yystpcpy
4680 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
4681 # define yystpcpy stpcpy
4682 # else
4683 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
4684  YYDEST. */
4685 #if (defined __STDC__ || defined __C99__FUNC__ \
4686  || defined __cplusplus || defined _MSC_VER)
4687 static char *
4688 yystpcpy (char *yydest, const char *yysrc)
4689 #else
4690 static char *
4691 yystpcpy (yydest, yysrc)
4692  char *yydest;
4693  const char *yysrc;
4694 #endif
4695 {
4696  char *yyd = yydest;
4697  const char *yys = yysrc;
4698 
4699  while ((*yyd++ = *yys++) != '\0')
4700  continue;
4701 
4702  return yyd - 1;
4703 }
4704 # endif
4705 # endif
4706 
4707 # ifndef yytnamerr
4708 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
4709  quotes and backslashes, so that it's suitable for yyerror. The
4710  heuristic is that double-quoting is unnecessary unless the string
4711  contains an apostrophe, a comma, or backslash (other than
4712  backslash-backslash). YYSTR is taken from yytname. If YYRES is
4713  null, do not copy; instead, return the length of what the result
4714  would have been. */
4715 static YYSIZE_T
4716 yytnamerr (char *yyres, const char *yystr)
4717 {
4718  if (*yystr == '"')
4719  {
4720  YYSIZE_T yyn = 0;
4721  char const *yyp = yystr;
4722 
4723  for (;;)
4724  switch (*++yyp)
4725  {
4726  case '\'':
4727  case ',':
4728  goto do_not_strip_quotes;
4729 
4730  case '\\':
4731  if (*++yyp != '\\')
4732  goto do_not_strip_quotes;
4733  /* Fall through. */
4734  default:
4735  if (yyres)
4736  yyres[yyn] = *yyp;
4737  yyn++;
4738  break;
4739 
4740  case '"':
4741  if (yyres)
4742  yyres[yyn] = '\0';
4743  return yyn;
4744  }
4745  do_not_strip_quotes: ;
4746  }
4747 
4748  if (! yyres)
4749  return yystrlen (yystr);
4750 
4751  return yystpcpy (yyres, yystr) - yyres;
4752 }
4753 # endif
4754 
4755 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
4756  about the unexpected token YYTOKEN for the state stack whose top is
4757  YYSSP.
4758 
4759  Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
4760  not large enough to hold the message. In that case, also set
4761  *YYMSG_ALLOC to the required number of bytes. Return 2 if the
4762  required number of bytes is too large to store. */
4763 static int
4764 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
4765  yytype_int16 *yyssp, int yytoken)
4766 {
4767  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
4768  YYSIZE_T yysize = yysize0;
4769  YYSIZE_T yysize1;
4770  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
4771  /* Internationalized format string. */
4772  const char *yyformat = 0;
4773  /* Arguments of yyformat. */
4774  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
4775  /* Number of reported tokens (one for the "unexpected", one per
4776  "expected"). */
4777  int yycount = 0;
4778 
4779  /* There are many possibilities here to consider:
4780  - Assume YYFAIL is not used. It's too flawed to consider. See
4781  <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
4782  for details. YYERROR is fine as it does not invoke this
4783  function.
4784  - If this state is a consistent state with a default action, then
4785  the only way this function was invoked is if the default action
4786  is an error action. In that case, don't check for expected
4787  tokens because there are none.
4788  - The only way there can be no lookahead present (in yychar) is if
4789  this state is a consistent state with a default action. Thus,
4790  detecting the absence of a lookahead is sufficient to determine
4791  that there is no unexpected or expected token to report. In that
4792  case, just report a simple "syntax error".
4793  - Don't assume there isn't a lookahead just because this state is a
4794  consistent state with a default action. There might have been a
4795  previous inconsistent state, consistent state with a non-default
4796  action, or user semantic action that manipulated yychar.
4797  - Of course, the expected token list depends on states to have
4798  correct lookahead information, and it depends on the parser not
4799  to perform extra reductions after fetching a lookahead from the
4800  scanner and before detecting a syntax error. Thus, state merging
4801  (from LALR or IELR) and default reductions corrupt the expected
4802  token list. However, the list is correct for canonical LR with
4803  one exception: it will still contain any token that will not be
4804  accepted due to an error action in a later state.
4805  */
4806  if (yytoken != YYEMPTY)
4807  {
4808  int yyn = yypact[*yyssp];
4809  yyarg[yycount++] = yytname[yytoken];
4810  if (!yypact_value_is_default (yyn))
4811  {
4812  /* Start YYX at -YYN if negative to avoid negative indexes in
4813  YYCHECK. In other words, skip the first -YYN actions for
4814  this state because they are default actions. */
4815  int yyxbegin = yyn < 0 ? -yyn : 0;
4816  /* Stay within bounds of both yycheck and yytname. */
4817  int yychecklim = YYLAST - yyn + 1;
4818  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
4819  int yyx;
4820 
4821  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
4822  if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
4823  && !yytable_value_is_error (yytable[yyx + yyn]))
4824  {
4825  if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
4826  {
4827  yycount = 1;
4828  yysize = yysize0;
4829  break;
4830  }
4831  yyarg[yycount++] = yytname[yyx];
4832  yysize1 = yysize + yytnamerr (0, yytname[yyx]);
4833  if (! (yysize <= yysize1
4834  && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
4835  return 2;
4836  yysize = yysize1;
4837  }
4838  }
4839  }
4840 
4841  switch (yycount)
4842  {
4843 # define YYCASE_(N, S) \
4844  case N: \
4845  yyformat = S; \
4846  break
4847  YYCASE_(0, YY_("syntax error"));
4848  YYCASE_(1, YY_("syntax error, unexpected %s"));
4849  YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
4850  YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
4851  YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
4852  YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
4853 # undef YYCASE_
4854  }
4855 
4856  yysize1 = yysize + yystrlen (yyformat);
4857  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
4858  return 2;
4859  yysize = yysize1;
4860 
4861  if (*yymsg_alloc < yysize)
4862  {
4863  *yymsg_alloc = 2 * yysize;
4864  if (! (yysize <= *yymsg_alloc
4865  && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
4866  *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
4867  return 1;
4868  }
4869 
4870  /* Avoid sprintf, as that infringes on the user's name space.
4871  Don't have undefined behavior even if the translation
4872  produced a string with the wrong number of "%s"s. */
4873  {
4874  char *yyp = *yymsg;
4875  int yyi = 0;
4876  while ((*yyp = *yyformat) != '\0')
4877  if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
4878  {
4879  yyp += yytnamerr (yyp, yyarg[yyi++]);
4880  yyformat += 2;
4881  }
4882  else
4883  {
4884  yyp++;
4885  yyformat++;
4886  }
4887  }
4888  return 0;
4889 }
4890 #endif /* YYERROR_VERBOSE */
4891 
4892 /*-----------------------------------------------.
4893 | Release the memory associated to this symbol. |
4894 `-----------------------------------------------*/
4895 
4896 /*ARGSUSED*/
4897 #if (defined __STDC__ || defined __C99__FUNC__ \
4898  || defined __cplusplus || defined _MSC_VER)
4899 static void
4900 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
4901 #else
4902 static void
4903 yydestruct (yymsg, yytype, yyvaluep, parser)
4904  const char *yymsg;
4905  int yytype;
4906  YYSTYPE *yyvaluep;
4907  struct parser_params *parser;
4908 #endif
4909 {
4910  YYUSE (yyvaluep);
4911  YYUSE (parser);
4912 
4913  if (!yymsg)
4914  yymsg = "Deleting";
4915  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
4916 
4917  switch (yytype)
4918  {
4919 
4920  default:
4921  break;
4922  }
4923 }
4924 
4925 
4926 /* Prevent warnings from -Wmissing-prototypes. */
4927 #ifdef YYPARSE_PARAM
4928 #if defined __STDC__ || defined __cplusplus
4929 int yyparse (void *YYPARSE_PARAM);
4930 #else
4931 int yyparse ();
4932 #endif
4933 #else /* ! YYPARSE_PARAM */
4934 #if defined __STDC__ || defined __cplusplus
4935 int yyparse (struct parser_params *parser);
4936 #else
4937 int yyparse ();
4938 #endif
4939 #endif /* ! YYPARSE_PARAM */
4940 
4941 
4942 /*----------.
4943 | yyparse. |
4944 `----------*/
4945 
4946 #ifdef YYPARSE_PARAM
4947 #if (defined __STDC__ || defined __C99__FUNC__ \
4948  || defined __cplusplus || defined _MSC_VER)
4949 int
4950 yyparse (void *YYPARSE_PARAM)
4951 #else
4952 int
4953 yyparse (YYPARSE_PARAM)
4954  void *YYPARSE_PARAM;
4955 #endif
4956 #else /* ! YYPARSE_PARAM */
4957 #if (defined __STDC__ || defined __C99__FUNC__ \
4958  || defined __cplusplus || defined _MSC_VER)
4959 int
4960 yyparse (struct parser_params *parser)
4961 #else
4962 int
4963 yyparse (parser)
4964  struct parser_params *parser;
4965 #endif
4966 #endif
4967 {
4968 /* The lookahead symbol. */
4969 int yychar;
4970 
4971 /* The semantic value of the lookahead symbol. */
4972 YYSTYPE yylval;
4973 
4974  /* Number of syntax errors so far. */
4975  int yynerrs;
4976 
4977  int yystate;
4978  /* Number of tokens to shift before error messages enabled. */
4979  int yyerrstatus;
4980 
4981  /* The stacks and their tools:
4982  `yyss': related to states.
4983  `yyvs': related to semantic values.
4984 
4985  Refer to the stacks thru separate pointers, to allow yyoverflow
4986  to reallocate them elsewhere. */
4987 
4988  /* The state stack. */
4989  yytype_int16 yyssa[YYINITDEPTH];
4990  yytype_int16 *yyss;
4991  yytype_int16 *yyssp;
4992 
4993  /* The semantic value stack. */
4994  YYSTYPE yyvsa[YYINITDEPTH];
4995  YYSTYPE *yyvs;
4996  YYSTYPE *yyvsp;
4997 
4998  YYSIZE_T yystacksize;
4999 
5000  int yyn;
5001  int yyresult;
5002  /* Lookahead token as an internal (translated) token number. */
5003  int yytoken;
5004  /* The variables used to return semantic value and location from the
5005  action routines. */
5006  YYSTYPE yyval;
5007 
5008 #if YYERROR_VERBOSE
5009  /* Buffer for error messages, and its allocated size. */
5010  char yymsgbuf[128];
5011  char *yymsg = yymsgbuf;
5012  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
5013 #endif
5014 
5015 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
5016 
5017  /* The number of symbols on the RHS of the reduced rule.
5018  Keep to zero when no symbol should be popped. */
5019  int yylen = 0;
5020 
5021  yytoken = 0;
5022  yyss = yyssa;
5023  yyvs = yyvsa;
5024  yystacksize = YYINITDEPTH;
5025 
5026  YYDPRINTF ((stderr, "Starting parse\n"));
5027 
5028  yystate = 0;
5029  yyerrstatus = 0;
5030  yynerrs = 0;
5031  yychar = YYEMPTY; /* Cause a token to be read. */
5032 
5033  /* Initialize stack pointers.
5034  Waste one element of value and location stack
5035  so that they stay on the same level as the state stack.
5036  The wasted elements are never initialized. */
5037  yyssp = yyss;
5038  yyvsp = yyvs;
5039 
5040  goto yysetstate;
5041 
5042 /*------------------------------------------------------------.
5043 | yynewstate -- Push a new state, which is found in yystate. |
5044 `------------------------------------------------------------*/
5045  yynewstate:
5046  /* In all cases, when you get here, the value and location stacks
5047  have just been pushed. So pushing a state here evens the stacks. */
5048  yyssp++;
5049 
5050  yysetstate:
5051  *yyssp = yystate;
5052 
5053  if (yyss + yystacksize - 1 <= yyssp)
5054  {
5055  /* Get the current used size of the three stacks, in elements. */
5056  YYSIZE_T yysize = yyssp - yyss + 1;
5057 
5058 #ifdef yyoverflow
5059  {
5060  /* Give user a chance to reallocate the stack. Use copies of
5061  these so that the &'s don't force the real ones into
5062  memory. */
5063  YYSTYPE *yyvs1 = yyvs;
5064  yytype_int16 *yyss1 = yyss;
5065 
5066  /* Each stack pointer address is followed by the size of the
5067  data in use in that stack, in bytes. This used to be a
5068  conditional around just the two extra args, but that might
5069  be undefined if yyoverflow is a macro. */
5070  yyoverflow (YY_("memory exhausted"),
5071  &yyss1, yysize * sizeof (*yyssp),
5072  &yyvs1, yysize * sizeof (*yyvsp),
5073  &yystacksize);
5074 
5075  yyss = yyss1;
5076  yyvs = yyvs1;
5077  }
5078 #else /* no yyoverflow */
5079 # ifndef YYSTACK_RELOCATE
5080  goto yyexhaustedlab;
5081 # else
5082  /* Extend the stack our own way. */
5083  if (YYMAXDEPTH <= yystacksize)
5084  goto yyexhaustedlab;
5085  yystacksize *= 2;
5086  if (YYMAXDEPTH < yystacksize)
5087  yystacksize = YYMAXDEPTH;
5088 
5089  {
5090  yytype_int16 *yyss1 = yyss;
5091  union yyalloc *yyptr =
5092  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
5093  if (! yyptr)
5094  goto yyexhaustedlab;
5095  YYSTACK_RELOCATE (yyss_alloc, yyss);
5096  YYSTACK_RELOCATE (yyvs_alloc, yyvs);
5097 # undef YYSTACK_RELOCATE
5098  if (yyss1 != yyssa)
5099  YYSTACK_FREE (yyss1);
5100  }
5101 # endif
5102 #endif /* no yyoverflow */
5103 
5104  yyssp = yyss + yysize - 1;
5105  yyvsp = yyvs + yysize - 1;
5106 
5107  YYDPRINTF ((stderr, "Stack size increased to %lu\n",
5108  (unsigned long int) yystacksize));
5109 
5110  if (yyss + yystacksize - 1 <= yyssp)
5111  YYABORT;
5112  }
5113 
5114  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
5115 
5116  if (yystate == YYFINAL)
5117  YYACCEPT;
5118 
5119  goto yybackup;
5120 
5121 /*-----------.
5122 | yybackup. |
5123 `-----------*/
5124 yybackup:
5125 
5126  /* Do appropriate processing given the current state. Read a
5127  lookahead token if we need one and don't already have one. */
5128 
5129  /* First try to decide what to do without reference to lookahead token. */
5130  yyn = yypact[yystate];
5131  if (yypact_value_is_default (yyn))
5132  goto yydefault;
5133 
5134  /* Not known => get a lookahead token if don't already have one. */
5135 
5136  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
5137  if (yychar == YYEMPTY)
5138  {
5139  YYDPRINTF ((stderr, "Reading a token: "));
5140  yychar = YYLEX;
5141  }
5142 
5143  if (yychar <= YYEOF)
5144  {
5145  yychar = yytoken = YYEOF;
5146  YYDPRINTF ((stderr, "Now at end of input.\n"));
5147  }
5148  else
5149  {
5150  yytoken = YYTRANSLATE (yychar);
5151  YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
5152  }
5153 
5154  /* If the proper action on seeing token YYTOKEN is to reduce or to
5155  detect an error, take that action. */
5156  yyn += yytoken;
5157  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
5158  goto yydefault;
5159  yyn = yytable[yyn];
5160  if (yyn <= 0)
5161  {
5162  if (yytable_value_is_error (yyn))
5163  goto yyerrlab;
5164  yyn = -yyn;
5165  goto yyreduce;
5166  }
5167 
5168  /* Count tokens shifted since error; after three, turn off error
5169  status. */
5170  if (yyerrstatus)
5171  yyerrstatus--;
5172 
5173  /* Shift the lookahead token. */
5174  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
5175 
5176  /* Discard the shifted token. */
5177  yychar = YYEMPTY;
5178 
5179  yystate = yyn;
5180  *++yyvsp = yylval;
5181 
5182  goto yynewstate;
5183 
5184 
5185 /*-----------------------------------------------------------.
5186 | yydefault -- do the default action for the current state. |
5187 `-----------------------------------------------------------*/
5188 yydefault:
5189  yyn = yydefact[yystate];
5190  if (yyn == 0)
5191  goto yyerrlab;
5192  goto yyreduce;
5193 
5194 
5195 /*-----------------------------.
5196 | yyreduce -- Do a reduction. |
5197 `-----------------------------*/
5198 yyreduce:
5199  /* yyn is the number of a rule to reduce with. */
5200  yylen = yyr2[yyn];
5201 
5202  /* If YYLEN is nonzero, implement the default value of the action:
5203  `$$ = $1'.
5204 
5205  Otherwise, the following line sets YYVAL to garbage.
5206  This behavior is undocumented and Bison
5207  users should not rely upon it. Assigning to YYVAL
5208  unconditionally makes the parser a bit smaller, and it avoids a
5209  GCC warning that YYVAL may be used uninitialized. */
5210  yyval = yyvsp[1-yylen];
5211 
5212 
5213  YY_REDUCE_PRINT (yyn);
5214  switch (yyn)
5215  {
5216  case 2:
5217 
5218 /* Line 1806 of yacc.c */
5219 #line 854 "parse.y"
5220  {
5221  lex_state = EXPR_BEG;
5222  /*%%%*/
5224  /*%
5225  local_push(0);
5226  %*/
5227  }
5228  break;
5229 
5230  case 3:
5231 
5232 /* Line 1806 of yacc.c */
5233 #line 863 "parse.y"
5234  {
5235  /*%%%*/
5236  if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
5237  /* last expression should not be void */
5238  if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
5239  else {
5240  NODE *node = (yyvsp[(2) - (2)].node);
5241  while (node->nd_next) {
5242  node = node->nd_next;
5243  }
5244  void_expr(node->nd_head);
5245  }
5246  }
5247  ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
5248  /*%
5249  $$ = $2;
5250  parser->result = dispatch1(program, $$);
5251  %*/
5252  local_pop();
5253  }
5254  break;
5255 
5256  case 4:
5257 
5258 /* Line 1806 of yacc.c */
5259 #line 886 "parse.y"
5260  {
5261  /*%%%*/
5262  void_stmts((yyvsp[(1) - (2)].node));
5264  /*%
5265  %*/
5266  (yyval.node) = (yyvsp[(1) - (2)].node);
5267  }
5268  break;
5269 
5270  case 5:
5271 
5272 /* Line 1806 of yacc.c */
5273 #line 897 "parse.y"
5274  {
5275  /*%%%*/
5276  (yyval.node) = NEW_BEGIN(0);
5277  /*%
5278  $$ = dispatch2(stmts_add, dispatch0(stmts_new),
5279  dispatch0(void_stmt));
5280  %*/
5281  }
5282  break;
5283 
5284  case 6:
5285 
5286 /* Line 1806 of yacc.c */
5287 #line 906 "parse.y"
5288  {
5289  /*%%%*/
5290  (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
5291  /*%
5292  $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
5293  %*/
5294  }
5295  break;
5296 
5297  case 7:
5298 
5299 /* Line 1806 of yacc.c */
5300 #line 914 "parse.y"
5301  {
5302  /*%%%*/
5303  (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
5304  /*%
5305  $$ = dispatch2(stmts_add, $1, $3);
5306  %*/
5307  }
5308  break;
5309 
5310  case 8:
5311 
5312 /* Line 1806 of yacc.c */
5313 #line 922 "parse.y"
5314  {
5315  (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
5316  }
5317  break;
5318 
5319  case 10:
5320 
5321 /* Line 1806 of yacc.c */
5322 #line 929 "parse.y"
5323  {
5324  /*%%%*/
5325  /* local_push(0); */
5326  /*%
5327  %*/
5328  }
5329  break;
5330 
5331  case 11:
5332 
5333 /* Line 1806 of yacc.c */
5334 #line 936 "parse.y"
5335  {
5336  /*%%%*/
5338  (yyvsp[(4) - (5)].node));
5339  /* NEW_PREEXE($4)); */
5340  /* local_pop(); */
5341  (yyval.node) = NEW_BEGIN(0);
5342  /*%
5343  $$ = dispatch1(BEGIN, $4);
5344  %*/
5345  }
5346  break;
5347 
5348  case 12:
5349 
5350 /* Line 1806 of yacc.c */
5351 #line 953 "parse.y"
5352  {
5353  /*%%%*/
5354  (yyval.node) = (yyvsp[(1) - (4)].node);
5355  if ((yyvsp[(2) - (4)].node)) {
5356  (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
5357  }
5358  else if ((yyvsp[(3) - (4)].node)) {
5359  rb_warn0("else without rescue is useless");
5360  (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
5361  }
5362  if ((yyvsp[(4) - (4)].node)) {
5363  if ((yyval.node)) {
5364  (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
5365  }
5366  else {
5367  (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
5368  }
5369  }
5370  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
5371  /*%
5372  $$ = dispatch4(bodystmt,
5373  escape_Qundef($1),
5374  escape_Qundef($2),
5375  escape_Qundef($3),
5376  escape_Qundef($4));
5377  %*/
5378  }
5379  break;
5380 
5381  case 13:
5382 
5383 /* Line 1806 of yacc.c */
5384 #line 983 "parse.y"
5385  {
5386  /*%%%*/
5387  void_stmts((yyvsp[(1) - (2)].node));
5389  /*%
5390  %*/
5391  (yyval.node) = (yyvsp[(1) - (2)].node);
5392  }
5393  break;
5394 
5395  case 14:
5396 
5397 /* Line 1806 of yacc.c */
5398 #line 994 "parse.y"
5399  {
5400  /*%%%*/
5401  (yyval.node) = NEW_BEGIN(0);
5402  /*%
5403  $$ = dispatch2(stmts_add, dispatch0(stmts_new),
5404  dispatch0(void_stmt));
5405  %*/
5406  }
5407  break;
5408 
5409  case 15:
5410 
5411 /* Line 1806 of yacc.c */
5412 #line 1003 "parse.y"
5413  {
5414  /*%%%*/
5415  (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
5416  /*%
5417  $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
5418  %*/
5419  }
5420  break;
5421 
5422  case 16:
5423 
5424 /* Line 1806 of yacc.c */
5425 #line 1011 "parse.y"
5426  {
5427  /*%%%*/
5428  (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
5429  /*%
5430  $$ = dispatch2(stmts_add, $1, $3);
5431  %*/
5432  }
5433  break;
5434 
5435  case 17:
5436 
5437 /* Line 1806 of yacc.c */
5438 #line 1019 "parse.y"
5439  {
5440  (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
5441  }
5442  break;
5443 
5444  case 18:
5445 
5446 /* Line 1806 of yacc.c */
5447 #line 1025 "parse.y"
5448  {
5449  (yyval.node) = (yyvsp[(1) - (1)].node);
5450  }
5451  break;
5452 
5453  case 19:
5454 
5455 /* Line 1806 of yacc.c */
5456 #line 1029 "parse.y"
5457  {
5458  yyerror("BEGIN is permitted only at toplevel");
5459  /*%%%*/
5460  /* local_push(0); */
5461  /*%
5462  %*/
5463  }
5464  break;
5465 
5466  case 20:
5467 
5468 /* Line 1806 of yacc.c */
5469 #line 1037 "parse.y"
5470  {
5471  /*%%%*/
5473  (yyvsp[(4) - (5)].node));
5474  /* NEW_PREEXE($4)); */
5475  /* local_pop(); */
5476  (yyval.node) = NEW_BEGIN(0);
5477  /*%
5478  $$ = dispatch1(BEGIN, $4);
5479  %*/
5480  }
5481  break;
5482 
5483  case 21:
5484 
5485 /* Line 1806 of yacc.c */
5486 #line 1049 "parse.y"
5487  {lex_state = EXPR_FNAME;}
5488  break;
5489 
5490  case 22:
5491 
5492 /* Line 1806 of yacc.c */
5493 #line 1050 "parse.y"
5494  {
5495  /*%%%*/
5496  (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
5497  /*%
5498  $$ = dispatch2(alias, $2, $4);
5499  %*/
5500  }
5501  break;
5502 
5503  case 23:
5504 
5505 /* Line 1806 of yacc.c */
5506 #line 1058 "parse.y"
5507  {
5508  /*%%%*/
5509  (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
5510  /*%
5511  $$ = dispatch2(var_alias, $2, $3);
5512  %*/
5513  }
5514  break;
5515 
5516  case 24:
5517 
5518 /* Line 1806 of yacc.c */
5519 #line 1066 "parse.y"
5520  {
5521  /*%%%*/
5522  char buf[2];
5523  buf[0] = '$';
5524  buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
5525  (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
5526  /*%
5527  $$ = dispatch2(var_alias, $2, $3);
5528  %*/
5529  }
5530  break;
5531 
5532  case 25:
5533 
5534 /* Line 1806 of yacc.c */
5535 #line 1077 "parse.y"
5536  {
5537  /*%%%*/
5538  yyerror("can't make alias for the number variables");
5539  (yyval.node) = NEW_BEGIN(0);
5540  /*%
5541  $$ = dispatch2(var_alias, $2, $3);
5542  $$ = dispatch1(alias_error, $$);
5543  %*/
5544  }
5545  break;
5546 
5547  case 26:
5548 
5549 /* Line 1806 of yacc.c */
5550 #line 1087 "parse.y"
5551  {
5552  /*%%%*/
5553  (yyval.node) = (yyvsp[(2) - (2)].node);
5554  /*%
5555  $$ = dispatch1(undef, $2);
5556  %*/
5557  }
5558  break;
5559 
5560  case 27:
5561 
5562 /* Line 1806 of yacc.c */
5563 #line 1095 "parse.y"
5564  {
5565  /*%%%*/
5566  (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
5567  fixpos((yyval.node), (yyvsp[(3) - (3)].node));
5568  /*%
5569  $$ = dispatch2(if_mod, $3, $1);
5570  %*/
5571  }
5572  break;
5573 
5574  case 28:
5575 
5576 /* Line 1806 of yacc.c */
5577 #line 1104 "parse.y"
5578  {
5579  /*%%%*/
5580  (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
5581  fixpos((yyval.node), (yyvsp[(3) - (3)].node));
5582  /*%
5583  $$ = dispatch2(unless_mod, $3, $1);
5584  %*/
5585  }
5586  break;
5587 
5588  case 29:
5589 
5590 /* Line 1806 of yacc.c */
5591 #line 1113 "parse.y"
5592  {
5593  /*%%%*/
5594  if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
5595  (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
5596  }
5597  else {
5598  (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
5599  }
5600  /*%
5601  $$ = dispatch2(while_mod, $3, $1);
5602  %*/
5603  }
5604  break;
5605 
5606  case 30:
5607 
5608 /* Line 1806 of yacc.c */
5609 #line 1126 "parse.y"
5610  {
5611  /*%%%*/
5612  if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
5613  (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
5614  }
5615  else {
5616  (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
5617  }
5618  /*%
5619  $$ = dispatch2(until_mod, $3, $1);
5620  %*/
5621  }
5622  break;
5623 
5624  case 31:
5625 
5626 /* Line 1806 of yacc.c */
5627 #line 1139 "parse.y"
5628  {
5629  /*%%%*/
5630  NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
5631  (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
5632  /*%
5633  $$ = dispatch2(rescue_mod, $1, $3);
5634  %*/
5635  }
5636  break;
5637 
5638  case 32:
5639 
5640 /* Line 1806 of yacc.c */
5641 #line 1148 "parse.y"
5642  {
5643  if (in_def || in_single) {
5644  rb_warn0("END in method; use at_exit");
5645  }
5646  /*%%%*/
5647  (yyval.node) = NEW_POSTEXE(NEW_NODE(
5648  NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].node) /* body */, 0 /* args */));
5649  /*%
5650  $$ = dispatch1(END, $3);
5651  %*/
5652  }
5653  break;
5654 
5655  case 34:
5656 
5657 /* Line 1806 of yacc.c */
5658 #line 1161 "parse.y"
5659  {
5660  /*%%%*/
5661  value_expr((yyvsp[(3) - (3)].node));
5662  (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
5663  (yyval.node) = (yyvsp[(1) - (3)].node);
5664  /*%
5665  $$ = dispatch2(massign, $1, $3);
5666  %*/
5667  }
5668  break;
5669 
5670  case 35:
5671 
5672 /* Line 1806 of yacc.c */
5673 #line 1171 "parse.y"
5674  {
5675  value_expr((yyvsp[(3) - (3)].node));
5676  (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
5677  }
5678  break;
5679 
5680  case 36:
5681 
5682 /* Line 1806 of yacc.c */
5683 #line 1176 "parse.y"
5684  {
5685  /*%%%*/
5686  NODE *args;
5687 
5688  value_expr((yyvsp[(6) - (6)].node));
5689  if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
5690  args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
5691  if ((yyvsp[(5) - (6)].id) == tOROP) {
5692  (yyvsp[(5) - (6)].id) = 0;
5693  }
5694  else if ((yyvsp[(5) - (6)].id) == tANDOP) {
5695  (yyvsp[(5) - (6)].id) = 1;
5696  }
5697  (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
5698  fixpos((yyval.node), (yyvsp[(1) - (6)].node));
5699  /*%
5700  $$ = dispatch2(aref_field, $1, escape_Qundef($3));
5701  $$ = dispatch3(opassign, $$, $5, $6);
5702  %*/
5703  }
5704  break;
5705 
5706  case 37:
5707 
5708 /* Line 1806 of yacc.c */
5709 #line 1197 "parse.y"
5710  {
5711  value_expr((yyvsp[(5) - (5)].node));
5712  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
5713  }
5714  break;
5715 
5716  case 38:
5717 
5718 /* Line 1806 of yacc.c */
5719 #line 1202 "parse.y"
5720  {
5721  value_expr((yyvsp[(5) - (5)].node));
5722  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
5723  }
5724  break;
5725 
5726  case 39:
5727 
5728 /* Line 1806 of yacc.c */
5729 #line 1207 "parse.y"
5730  {
5731  /*%%%*/
5732  (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
5733  (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
5734  /*%
5735  $$ = dispatch2(const_path_field, $1, $3);
5736  $$ = dispatch3(opassign, $$, $4, $5);
5737  %*/
5738  }
5739  break;
5740 
5741  case 40:
5742 
5743 /* Line 1806 of yacc.c */
5744 #line 1217 "parse.y"
5745  {
5746  value_expr((yyvsp[(5) - (5)].node));
5747  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_intern("::"), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
5748  }
5749  break;
5750 
5751  case 41:
5752 
5753 /* Line 1806 of yacc.c */
5754 #line 1222 "parse.y"
5755  {
5756  /*%%%*/
5757  rb_backref_error((yyvsp[(1) - (3)].node));
5758  (yyval.node) = NEW_BEGIN(0);
5759  /*%
5760  $$ = dispatch2(assign, dispatch1(var_field, $1), $3);
5761  $$ = dispatch1(assign_error, $$);
5762  %*/
5763  }
5764  break;
5765 
5766  case 42:
5767 
5768 /* Line 1806 of yacc.c */
5769 #line 1232 "parse.y"
5770  {
5771  /*%%%*/
5772  value_expr((yyvsp[(3) - (3)].node));
5773  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5774  /*%
5775  $$ = dispatch2(assign, $1, $3);
5776  %*/
5777  }
5778  break;
5779 
5780  case 43:
5781 
5782 /* Line 1806 of yacc.c */
5783 #line 1241 "parse.y"
5784  {
5785  /*%%%*/
5786  (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
5787  (yyval.node) = (yyvsp[(1) - (3)].node);
5788  /*%
5789  $$ = dispatch2(massign, $1, $3);
5790  %*/
5791  }
5792  break;
5793 
5794  case 44:
5795 
5796 /* Line 1806 of yacc.c */
5797 #line 1250 "parse.y"
5798  {
5799  /*%%%*/
5800  (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
5801  (yyval.node) = (yyvsp[(1) - (3)].node);
5802  /*%
5803  $$ = dispatch2(massign, $1, $3);
5804  %*/
5805  }
5806  break;
5807 
5808  case 46:
5809 
5810 /* Line 1806 of yacc.c */
5811 #line 1262 "parse.y"
5812  {
5813  /*%%%*/
5814  value_expr((yyvsp[(3) - (3)].node));
5815  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5816  /*%
5817  $$ = dispatch2(assign, $1, $3);
5818  %*/
5819  }
5820  break;
5821 
5822  case 47:
5823 
5824 /* Line 1806 of yacc.c */
5825 #line 1271 "parse.y"
5826  {
5827  /*%%%*/
5828  value_expr((yyvsp[(3) - (3)].node));
5829  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5830  /*%
5831  $$ = dispatch2(assign, $1, $3);
5832  %*/
5833  }
5834  break;
5835 
5836  case 49:
5837 
5838 /* Line 1806 of yacc.c */
5839 #line 1284 "parse.y"
5840  {
5841  /*%%%*/
5842  (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5843  /*%
5844  $$ = dispatch3(binary, $1, ripper_intern("and"), $3);
5845  %*/
5846  }
5847  break;
5848 
5849  case 50:
5850 
5851 /* Line 1806 of yacc.c */
5852 #line 1292 "parse.y"
5853  {
5854  /*%%%*/
5855  (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5856  /*%
5857  $$ = dispatch3(binary, $1, ripper_intern("or"), $3);
5858  %*/
5859  }
5860  break;
5861 
5862  case 51:
5863 
5864 /* Line 1806 of yacc.c */
5865 #line 1300 "parse.y"
5866  {
5867  /*%%%*/
5868  (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
5869  /*%
5870  $$ = dispatch2(unary, ripper_intern("not"), $3);
5871  %*/
5872  }
5873  break;
5874 
5875  case 52:
5876 
5877 /* Line 1806 of yacc.c */
5878 #line 1308 "parse.y"
5879  {
5880  /*%%%*/
5881  (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
5882  /*%
5883  $$ = dispatch2(unary, ripper_id2sym('!'), $2);
5884  %*/
5885  }
5886  break;
5887 
5888  case 54:
5889 
5890 /* Line 1806 of yacc.c */
5891 #line 1319 "parse.y"
5892  {
5893  /*%%%*/
5894  value_expr((yyvsp[(1) - (1)].node));
5895  (yyval.node) = (yyvsp[(1) - (1)].node);
5896  if (!(yyval.node)) (yyval.node) = NEW_NIL();
5897  /*%
5898  $$ = $1;
5899  %*/
5900  }
5901  break;
5902 
5903  case 58:
5904 
5905 /* Line 1806 of yacc.c */
5906 #line 1336 "parse.y"
5907  {
5908  /*%%%*/
5909  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
5910  /*%
5911  $$ = dispatch3(call, $1, $2, $3);
5912  $$ = method_arg($$, $4);
5913  %*/
5914  }
5915  break;
5916 
5917  case 59:
5918 
5919 /* Line 1806 of yacc.c */
5920 #line 1347 "parse.y"
5921  {
5922  (yyvsp[(1) - (1)].vars) = dyna_push();
5923  /*%%%*/
5924  (yyval.num) = ruby_sourceline;
5925  /*%
5926  %*/
5927  }
5928  break;
5929 
5930  case 60:
5931 
5932 /* Line 1806 of yacc.c */
5933 #line 1357 "parse.y"
5934  {
5935  /*%%%*/
5936  (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
5937  nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
5938  /*%
5939  $$ = dispatch2(brace_block, escape_Qundef($3), $4);
5940  %*/
5941  dyna_pop((yyvsp[(1) - (5)].vars));
5942  }
5943  break;
5944 
5945  case 61:
5946 
5947 /* Line 1806 of yacc.c */
5948 #line 1369 "parse.y"
5949  {
5950  /*%%%*/
5951  (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
5952  nd_set_line((yyval.node), tokline);
5953  /*%
5954  %*/
5955  }
5956  break;
5957 
5958  case 62:
5959 
5960 /* Line 1806 of yacc.c */
5961 #line 1379 "parse.y"
5962  {
5963  /*%%%*/
5964  (yyval.node) = (yyvsp[(1) - (2)].node);
5965  (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
5966  /*%
5967  $$ = dispatch2(command, $1, $2);
5968  %*/
5969  }
5970  break;
5971 
5972  case 63:
5973 
5974 /* Line 1806 of yacc.c */
5975 #line 1388 "parse.y"
5976  {
5977  /*%%%*/
5978  block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
5979  (yyvsp[(1) - (3)].node)->nd_args = (yyvsp[(2) - (3)].node);
5980  (yyvsp[(3) - (3)].node)->nd_iter = (yyvsp[(1) - (3)].node);
5981  (yyval.node) = (yyvsp[(3) - (3)].node);
5982  fixpos((yyval.node), (yyvsp[(1) - (3)].node));
5983  /*%
5984  $$ = dispatch2(command, $1, $2);
5985  $$ = method_add_block($$, $3);
5986  %*/
5987  }
5988  break;
5989 
5990  case 64:
5991 
5992 /* Line 1806 of yacc.c */
5993 #line 1401 "parse.y"
5994  {
5995  /*%%%*/
5996  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
5997  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
5998  /*%
5999  $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
6000  %*/
6001  }
6002  break;
6003 
6004  case 65:
6005 
6006 /* Line 1806 of yacc.c */
6007 #line 1410 "parse.y"
6008  {
6009  /*%%%*/
6010  block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
6011  (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
6012  (yyval.node) = (yyvsp[(5) - (5)].node);
6013  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
6014  /*%
6015  $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
6016  $$ = method_add_block($$, $5);
6017  %*/
6018  }
6019  break;
6020 
6021  case 66:
6022 
6023 /* Line 1806 of yacc.c */
6024 #line 1422 "parse.y"
6025  {
6026  /*%%%*/
6027  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
6028  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
6029  /*%
6030  $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
6031  %*/
6032  }
6033  break;
6034 
6035  case 67:
6036 
6037 /* Line 1806 of yacc.c */
6038 #line 1431 "parse.y"
6039  {
6040  /*%%%*/
6041  block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
6042  (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
6043  (yyval.node) = (yyvsp[(5) - (5)].node);
6044  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
6045  /*%
6046  $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
6047  $$ = method_add_block($$, $5);
6048  %*/
6049  }
6050  break;
6051 
6052  case 68:
6053 
6054 /* Line 1806 of yacc.c */
6055 #line 1443 "parse.y"
6056  {
6057  /*%%%*/
6058  (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
6059  fixpos((yyval.node), (yyvsp[(2) - (2)].node));
6060  /*%
6061  $$ = dispatch1(super, $2);
6062  %*/
6063  }
6064  break;
6065 
6066  case 69:
6067 
6068 /* Line 1806 of yacc.c */
6069 #line 1452 "parse.y"
6070  {
6071  /*%%%*/
6072  (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
6073  fixpos((yyval.node), (yyvsp[(2) - (2)].node));
6074  /*%
6075  $$ = dispatch1(yield, $2);
6076  %*/
6077  }
6078  break;
6079 
6080  case 70:
6081 
6082 /* Line 1806 of yacc.c */
6083 #line 1461 "parse.y"
6084  {
6085  /*%%%*/
6086  (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
6087  /*%
6088  $$ = dispatch1(return, $2);
6089  %*/
6090  }
6091  break;
6092 
6093  case 71:
6094 
6095 /* Line 1806 of yacc.c */
6096 #line 1469 "parse.y"
6097  {
6098  /*%%%*/
6099  (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
6100  /*%
6101  $$ = dispatch1(break, $2);
6102  %*/
6103  }
6104  break;
6105 
6106  case 72:
6107 
6108 /* Line 1806 of yacc.c */
6109 #line 1477 "parse.y"
6110  {
6111  /*%%%*/
6112  (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
6113  /*%
6114  $$ = dispatch1(next, $2);
6115  %*/
6116  }
6117  break;
6118 
6119  case 74:
6120 
6121 /* Line 1806 of yacc.c */
6122 #line 1488 "parse.y"
6123  {
6124  /*%%%*/
6125  (yyval.node) = (yyvsp[(2) - (3)].node);
6126  /*%
6127  $$ = dispatch1(mlhs_paren, $2);
6128  %*/
6129  }
6130  break;
6131 
6132  case 76:
6133 
6134 /* Line 1806 of yacc.c */
6135 #line 1499 "parse.y"
6136  {
6137  /*%%%*/
6138  (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
6139  /*%
6140  $$ = dispatch1(mlhs_paren, $2);
6141  %*/
6142  }
6143  break;
6144 
6145  case 77:
6146 
6147 /* Line 1806 of yacc.c */
6148 #line 1509 "parse.y"
6149  {
6150  /*%%%*/
6151  (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
6152  /*%
6153  $$ = $1;
6154  %*/
6155  }
6156  break;
6157 
6158  case 78:
6159 
6160 /* Line 1806 of yacc.c */
6161 #line 1517 "parse.y"
6162  {
6163  /*%%%*/
6164  (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
6165  /*%
6166  $$ = mlhs_add($1, $2);
6167  %*/
6168  }
6169  break;
6170 
6171  case 79:
6172 
6173 /* Line 1806 of yacc.c */
6174 #line 1525 "parse.y"
6175  {
6176  /*%%%*/
6177  (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6178  /*%
6179  $$ = mlhs_add_star($1, $3);
6180  %*/
6181  }
6182  break;
6183 
6184  case 80:
6185 
6186 /* Line 1806 of yacc.c */
6187 #line 1533 "parse.y"
6188  {
6189  /*%%%*/
6190  (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
6191  /*%
6192  $1 = mlhs_add_star($1, $3);
6193  $$ = mlhs_add($1, $5);
6194  %*/
6195  }
6196  break;
6197 
6198  case 81:
6199 
6200 /* Line 1806 of yacc.c */
6201 #line 1542 "parse.y"
6202  {
6203  /*%%%*/
6204  (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
6205  /*%
6206  $$ = mlhs_add_star($1, Qnil);
6207  %*/
6208  }
6209  break;
6210 
6211  case 82:
6212 
6213 /* Line 1806 of yacc.c */
6214 #line 1550 "parse.y"
6215  {
6216  /*%%%*/
6217  (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
6218  /*%
6219  $1 = mlhs_add_star($1, Qnil);
6220  $$ = mlhs_add($1, $4);
6221  %*/
6222  }
6223  break;
6224 
6225  case 83:
6226 
6227 /* Line 1806 of yacc.c */
6228 #line 1559 "parse.y"
6229  {
6230  /*%%%*/
6231  (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
6232  /*%
6233  $$ = mlhs_add_star(mlhs_new(), $2);
6234  %*/
6235  }
6236  break;
6237 
6238  case 84:
6239 
6240 /* Line 1806 of yacc.c */
6241 #line 1567 "parse.y"
6242  {
6243  /*%%%*/
6244  (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
6245  /*%
6246  $2 = mlhs_add_star(mlhs_new(), $2);
6247  $$ = mlhs_add($2, $4);
6248  %*/
6249  }
6250  break;
6251 
6252  case 85:
6253 
6254 /* Line 1806 of yacc.c */
6255 #line 1576 "parse.y"
6256  {
6257  /*%%%*/
6258  (yyval.node) = NEW_MASGN(0, -1);
6259  /*%
6260  $$ = mlhs_add_star(mlhs_new(), Qnil);
6261  %*/
6262  }
6263  break;
6264 
6265  case 86:
6266 
6267 /* Line 1806 of yacc.c */
6268 #line 1584 "parse.y"
6269  {
6270  /*%%%*/
6271  (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
6272  /*%
6273  $$ = mlhs_add_star(mlhs_new(), Qnil);
6274  $$ = mlhs_add($$, $3);
6275  %*/
6276  }
6277  break;
6278 
6279  case 88:
6280 
6281 /* Line 1806 of yacc.c */
6282 #line 1596 "parse.y"
6283  {
6284  /*%%%*/
6285  (yyval.node) = (yyvsp[(2) - (3)].node);
6286  /*%
6287  $$ = dispatch1(mlhs_paren, $2);
6288  %*/
6289  }
6290  break;
6291 
6292  case 89:
6293 
6294 /* Line 1806 of yacc.c */
6295 #line 1606 "parse.y"
6296  {
6297  /*%%%*/
6298  (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
6299  /*%
6300  $$ = mlhs_add(mlhs_new(), $1);
6301  %*/
6302  }
6303  break;
6304 
6305  case 90:
6306 
6307 /* Line 1806 of yacc.c */
6308 #line 1614 "parse.y"
6309  {
6310  /*%%%*/
6311  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
6312  /*%
6313  $$ = mlhs_add($1, $2);
6314  %*/
6315  }
6316  break;
6317 
6318  case 91:
6319 
6320 /* Line 1806 of yacc.c */
6321 #line 1624 "parse.y"
6322  {
6323  /*%%%*/
6324  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
6325  /*%
6326  $$ = mlhs_add(mlhs_new(), $1);
6327  %*/
6328  }
6329  break;
6330 
6331  case 92:
6332 
6333 /* Line 1806 of yacc.c */
6334 #line 1632 "parse.y"
6335  {
6336  /*%%%*/
6337  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6338  /*%
6339  $$ = mlhs_add($1, $3);
6340  %*/
6341  }
6342  break;
6343 
6344  case 93:
6345 
6346 /* Line 1806 of yacc.c */
6347 #line 1642 "parse.y"
6348  {
6349  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6350  }
6351  break;
6352 
6353  case 94:
6354 
6355 /* Line 1806 of yacc.c */
6356 #line 1646 "parse.y"
6357  {
6358  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6359  }
6360  break;
6361 
6362  case 95:
6363 
6364 /* Line 1806 of yacc.c */
6365 #line 1650 "parse.y"
6366  {
6367  /*%%%*/
6368  (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
6369  /*%
6370  $$ = dispatch2(aref_field, $1, escape_Qundef($3));
6371  %*/
6372  }
6373  break;
6374 
6375  case 96:
6376 
6377 /* Line 1806 of yacc.c */
6378 #line 1658 "parse.y"
6379  {
6380  /*%%%*/
6381  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6382  /*%
6383  $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
6384  %*/
6385  }
6386  break;
6387 
6388  case 97:
6389 
6390 /* Line 1806 of yacc.c */
6391 #line 1666 "parse.y"
6392  {
6393  /*%%%*/
6394  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6395  /*%
6396  $$ = dispatch2(const_path_field, $1, $3);
6397  %*/
6398  }
6399  break;
6400 
6401  case 98:
6402 
6403 /* Line 1806 of yacc.c */
6404 #line 1674 "parse.y"
6405  {
6406  /*%%%*/
6407  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6408  /*%
6409  $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
6410  %*/
6411  }
6412  break;
6413 
6414  case 99:
6415 
6416 /* Line 1806 of yacc.c */
6417 #line 1682 "parse.y"
6418  {
6419  /*%%%*/
6420  if (in_def || in_single)
6421  yyerror("dynamic constant assignment");
6422  (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
6423  /*%
6424  if (in_def || in_single)
6425  yyerror("dynamic constant assignment");
6426  $$ = dispatch2(const_path_field, $1, $3);
6427  %*/
6428  }
6429  break;
6430 
6431  case 100:
6432 
6433 /* Line 1806 of yacc.c */
6434 #line 1694 "parse.y"
6435  {
6436  /*%%%*/
6437  if (in_def || in_single)
6438  yyerror("dynamic constant assignment");
6439  (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
6440  /*%
6441  $$ = dispatch1(top_const_field, $2);
6442  %*/
6443  }
6444  break;
6445 
6446  case 101:
6447 
6448 /* Line 1806 of yacc.c */
6449 #line 1704 "parse.y"
6450  {
6451  /*%%%*/
6452  rb_backref_error((yyvsp[(1) - (1)].node));
6453  (yyval.node) = NEW_BEGIN(0);
6454  /*%
6455  $$ = dispatch1(var_field, $1);
6456  $$ = dispatch1(assign_error, $$);
6457  %*/
6458  }
6459  break;
6460 
6461  case 102:
6462 
6463 /* Line 1806 of yacc.c */
6464 #line 1716 "parse.y"
6465  {
6466  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6467  /*%%%*/
6468  if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
6469  /*%
6470  $$ = dispatch1(var_field, $$);
6471  %*/
6472  }
6473  break;
6474 
6475  case 103:
6476 
6477 /* Line 1806 of yacc.c */
6478 #line 1725 "parse.y"
6479  {
6480  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6481  /*%%%*/
6482  if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
6483  /*%
6484  $$ = dispatch1(var_field, $$);
6485  %*/
6486  }
6487  break;
6488 
6489  case 104:
6490 
6491 /* Line 1806 of yacc.c */
6492 #line 1734 "parse.y"
6493  {
6494  /*%%%*/
6495  (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
6496  /*%
6497  $$ = dispatch2(aref_field, $1, escape_Qundef($3));
6498  %*/
6499  }
6500  break;
6501 
6502  case 105:
6503 
6504 /* Line 1806 of yacc.c */
6505 #line 1742 "parse.y"
6506  {
6507  /*%%%*/
6508  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6509  /*%
6510  $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
6511  %*/
6512  }
6513  break;
6514 
6515  case 106:
6516 
6517 /* Line 1806 of yacc.c */
6518 #line 1750 "parse.y"
6519  {
6520  /*%%%*/
6521  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6522  /*%
6523  $$ = dispatch3(field, $1, ripper_intern("::"), $3);
6524  %*/
6525  }
6526  break;
6527 
6528  case 107:
6529 
6530 /* Line 1806 of yacc.c */
6531 #line 1758 "parse.y"
6532  {
6533  /*%%%*/
6534  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6535  /*%
6536  $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
6537  %*/
6538  }
6539  break;
6540 
6541  case 108:
6542 
6543 /* Line 1806 of yacc.c */
6544 #line 1766 "parse.y"
6545  {
6546  /*%%%*/
6547  if (in_def || in_single)
6548  yyerror("dynamic constant assignment");
6549  (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
6550  /*%
6551  $$ = dispatch2(const_path_field, $1, $3);
6552  if (in_def || in_single) {
6553  $$ = dispatch1(assign_error, $$);
6554  }
6555  %*/
6556  }
6557  break;
6558 
6559  case 109:
6560 
6561 /* Line 1806 of yacc.c */
6562 #line 1779 "parse.y"
6563  {
6564  /*%%%*/
6565  if (in_def || in_single)
6566  yyerror("dynamic constant assignment");
6567  (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
6568  /*%
6569  $$ = dispatch1(top_const_field, $2);
6570  if (in_def || in_single) {
6571  $$ = dispatch1(assign_error, $$);
6572  }
6573  %*/
6574  }
6575  break;
6576 
6577  case 110:
6578 
6579 /* Line 1806 of yacc.c */
6580 #line 1792 "parse.y"
6581  {
6582  /*%%%*/
6583  rb_backref_error((yyvsp[(1) - (1)].node));
6584  (yyval.node) = NEW_BEGIN(0);
6585  /*%
6586  $$ = dispatch1(assign_error, $1);
6587  %*/
6588  }
6589  break;
6590 
6591  case 111:
6592 
6593 /* Line 1806 of yacc.c */
6594 #line 1803 "parse.y"
6595  {
6596  /*%%%*/
6597  yyerror("class/module name must be CONSTANT");
6598  /*%
6599  $$ = dispatch1(class_name_error, $1);
6600  %*/
6601  }
6602  break;
6603 
6604  case 113:
6605 
6606 /* Line 1806 of yacc.c */
6607 #line 1814 "parse.y"
6608  {
6609  /*%%%*/
6610  (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
6611  /*%
6612  $$ = dispatch1(top_const_ref, $2);
6613  %*/
6614  }
6615  break;
6616 
6617  case 114:
6618 
6619 /* Line 1806 of yacc.c */
6620 #line 1822 "parse.y"
6621  {
6622  /*%%%*/
6623  (yyval.node) = NEW_COLON2(0, (yyval.node));
6624  /*%
6625  $$ = dispatch1(const_ref, $1);
6626  %*/
6627  }
6628  break;
6629 
6630  case 115:
6631 
6632 /* Line 1806 of yacc.c */
6633 #line 1830 "parse.y"
6634  {
6635  /*%%%*/
6636  (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6637  /*%
6638  $$ = dispatch2(const_path_ref, $1, $3);
6639  %*/
6640  }
6641  break;
6642 
6643  case 119:
6644 
6645 /* Line 1806 of yacc.c */
6646 #line 1843 "parse.y"
6647  {
6648  lex_state = EXPR_ENDFN;
6649  (yyval.id) = (yyvsp[(1) - (1)].id);
6650  }
6651  break;
6652 
6653  case 120:
6654 
6655 /* Line 1806 of yacc.c */
6656 #line 1848 "parse.y"
6657  {
6658  lex_state = EXPR_ENDFN;
6659  /*%%%*/
6660  (yyval.id) = (yyvsp[(1) - (1)].id);
6661  /*%
6662  $$ = $1;
6663  %*/
6664  }
6665  break;
6666 
6667  case 123:
6668 
6669 /* Line 1806 of yacc.c */
6670 #line 1863 "parse.y"
6671  {
6672  /*%%%*/
6673  (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
6674  /*%
6675  $$ = dispatch1(symbol_literal, $1);
6676  %*/
6677  }
6678  break;
6679 
6680  case 125:
6681 
6682 /* Line 1806 of yacc.c */
6683 #line 1874 "parse.y"
6684  {
6685  /*%%%*/
6686  (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
6687  /*%
6688  $$ = rb_ary_new3(1, $1);
6689  %*/
6690  }
6691  break;
6692 
6693  case 126:
6694 
6695 /* Line 1806 of yacc.c */
6696 #line 1881 "parse.y"
6697  {lex_state = EXPR_FNAME;}
6698  break;
6699 
6700  case 127:
6701 
6702 /* Line 1806 of yacc.c */
6703 #line 1882 "parse.y"
6704  {
6705  /*%%%*/
6706  (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
6707  /*%
6708  rb_ary_push($1, $4);
6709  %*/
6710  }
6711  break;
6712 
6713  case 128:
6714 
6715 /* Line 1806 of yacc.c */
6716 #line 1891 "parse.y"
6717  { ifndef_ripper((yyval.id) = '|'); }
6718  break;
6719 
6720  case 129:
6721 
6722 /* Line 1806 of yacc.c */
6723 #line 1892 "parse.y"
6724  { ifndef_ripper((yyval.id) = '^'); }
6725  break;
6726 
6727  case 130:
6728 
6729 /* Line 1806 of yacc.c */
6730 #line 1893 "parse.y"
6731  { ifndef_ripper((yyval.id) = '&'); }
6732  break;
6733 
6734  case 131:
6735 
6736 /* Line 1806 of yacc.c */
6737 #line 1894 "parse.y"
6738  { ifndef_ripper((yyval.id) = tCMP); }
6739  break;
6740 
6741  case 132:
6742 
6743 /* Line 1806 of yacc.c */
6744 #line 1895 "parse.y"
6745  { ifndef_ripper((yyval.id) = tEQ); }
6746  break;
6747 
6748  case 133:
6749 
6750 /* Line 1806 of yacc.c */
6751 #line 1896 "parse.y"
6752  { ifndef_ripper((yyval.id) = tEQQ); }
6753  break;
6754 
6755  case 134:
6756 
6757 /* Line 1806 of yacc.c */
6758 #line 1897 "parse.y"
6759  { ifndef_ripper((yyval.id) = tMATCH); }
6760  break;
6761 
6762  case 135:
6763 
6764 /* Line 1806 of yacc.c */
6765 #line 1898 "parse.y"
6766  { ifndef_ripper((yyval.id) = tNMATCH); }
6767  break;
6768 
6769  case 136:
6770 
6771 /* Line 1806 of yacc.c */
6772 #line 1899 "parse.y"
6773  { ifndef_ripper((yyval.id) = '>'); }
6774  break;
6775 
6776  case 137:
6777 
6778 /* Line 1806 of yacc.c */
6779 #line 1900 "parse.y"
6780  { ifndef_ripper((yyval.id) = tGEQ); }
6781  break;
6782 
6783  case 138:
6784 
6785 /* Line 1806 of yacc.c */
6786 #line 1901 "parse.y"
6787  { ifndef_ripper((yyval.id) = '<'); }
6788  break;
6789 
6790  case 139:
6791 
6792 /* Line 1806 of yacc.c */
6793 #line 1902 "parse.y"
6794  { ifndef_ripper((yyval.id) = tLEQ); }
6795  break;
6796 
6797  case 140:
6798 
6799 /* Line 1806 of yacc.c */
6800 #line 1903 "parse.y"
6801  { ifndef_ripper((yyval.id) = tNEQ); }
6802  break;
6803 
6804  case 141:
6805 
6806 /* Line 1806 of yacc.c */
6807 #line 1904 "parse.y"
6808  { ifndef_ripper((yyval.id) = tLSHFT); }
6809  break;
6810 
6811  case 142:
6812 
6813 /* Line 1806 of yacc.c */
6814 #line 1905 "parse.y"
6815  { ifndef_ripper((yyval.id) = tRSHFT); }
6816  break;
6817 
6818  case 143:
6819 
6820 /* Line 1806 of yacc.c */
6821 #line 1906 "parse.y"
6822  { ifndef_ripper((yyval.id) = '+'); }
6823  break;
6824 
6825  case 144:
6826 
6827 /* Line 1806 of yacc.c */
6828 #line 1907 "parse.y"
6829  { ifndef_ripper((yyval.id) = '-'); }
6830  break;
6831 
6832  case 145:
6833 
6834 /* Line 1806 of yacc.c */
6835 #line 1908 "parse.y"
6836  { ifndef_ripper((yyval.id) = '*'); }
6837  break;
6838 
6839  case 146:
6840 
6841 /* Line 1806 of yacc.c */
6842 #line 1909 "parse.y"
6843  { ifndef_ripper((yyval.id) = '*'); }
6844  break;
6845 
6846  case 147:
6847 
6848 /* Line 1806 of yacc.c */
6849 #line 1910 "parse.y"
6850  { ifndef_ripper((yyval.id) = '/'); }
6851  break;
6852 
6853  case 148:
6854 
6855 /* Line 1806 of yacc.c */
6856 #line 1911 "parse.y"
6857  { ifndef_ripper((yyval.id) = '%'); }
6858  break;
6859 
6860  case 149:
6861 
6862 /* Line 1806 of yacc.c */
6863 #line 1912 "parse.y"
6864  { ifndef_ripper((yyval.id) = tPOW); }
6865  break;
6866 
6867  case 150:
6868 
6869 /* Line 1806 of yacc.c */
6870 #line 1913 "parse.y"
6871  { ifndef_ripper((yyval.id) = tDSTAR); }
6872  break;
6873 
6874  case 151:
6875 
6876 /* Line 1806 of yacc.c */
6877 #line 1914 "parse.y"
6878  { ifndef_ripper((yyval.id) = '!'); }
6879  break;
6880 
6881  case 152:
6882 
6883 /* Line 1806 of yacc.c */
6884 #line 1915 "parse.y"
6885  { ifndef_ripper((yyval.id) = '~'); }
6886  break;
6887 
6888  case 153:
6889 
6890 /* Line 1806 of yacc.c */
6891 #line 1916 "parse.y"
6892  { ifndef_ripper((yyval.id) = tUPLUS); }
6893  break;
6894 
6895  case 154:
6896 
6897 /* Line 1806 of yacc.c */
6898 #line 1917 "parse.y"
6899  { ifndef_ripper((yyval.id) = tUMINUS); }
6900  break;
6901 
6902  case 155:
6903 
6904 /* Line 1806 of yacc.c */
6905 #line 1918 "parse.y"
6906  { ifndef_ripper((yyval.id) = tAREF); }
6907  break;
6908 
6909  case 156:
6910 
6911 /* Line 1806 of yacc.c */
6912 #line 1919 "parse.y"
6913  { ifndef_ripper((yyval.id) = tASET); }
6914  break;
6915 
6916  case 157:
6917 
6918 /* Line 1806 of yacc.c */
6919 #line 1920 "parse.y"
6920  { ifndef_ripper((yyval.id) = '`'); }
6921  break;
6922 
6923  case 199:
6924 
6925 /* Line 1806 of yacc.c */
6926 #line 1938 "parse.y"
6927  {
6928  /*%%%*/
6929  value_expr((yyvsp[(3) - (3)].node));
6930  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6931  /*%
6932  $$ = dispatch2(assign, $1, $3);
6933  %*/
6934  }
6935  break;
6936 
6937  case 200:
6938 
6939 /* Line 1806 of yacc.c */
6940 #line 1947 "parse.y"
6941  {
6942  /*%%%*/
6943  value_expr((yyvsp[(3) - (5)].node));
6944  (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
6945  (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
6946  /*%
6947  $$ = dispatch2(assign, $1, dispatch2(rescue_mod, $3, $5));
6948  %*/
6949  }
6950  break;
6951 
6952  case 201:
6953 
6954 /* Line 1806 of yacc.c */
6955 #line 1957 "parse.y"
6956  {
6957  value_expr((yyvsp[(3) - (3)].node));
6958  (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
6959  }
6960  break;
6961 
6962  case 202:
6963 
6964 /* Line 1806 of yacc.c */
6965 #line 1962 "parse.y"
6966  {
6967  /*%%%*/
6968  value_expr((yyvsp[(3) - (5)].node));
6969  (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
6970  /*%
6971  $3 = dispatch2(rescue_mod, $3, $5);
6972  %*/
6973  (yyval.node) = new_op_assign((yyvsp[(1) - (5)].node), (yyvsp[(2) - (5)].id), (yyvsp[(3) - (5)].node));
6974  }
6975  break;
6976 
6977  case 203:
6978 
6979 /* Line 1806 of yacc.c */
6980 #line 1972 "parse.y"
6981  {
6982  /*%%%*/
6983  NODE *args;
6984 
6985  value_expr((yyvsp[(6) - (6)].node));
6986  if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
6987  if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
6988  args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
6989  }
6990  else {
6991  args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
6992  }
6993  if ((yyvsp[(5) - (6)].id) == tOROP) {
6994  (yyvsp[(5) - (6)].id) = 0;
6995  }
6996  else if ((yyvsp[(5) - (6)].id) == tANDOP) {
6997  (yyvsp[(5) - (6)].id) = 1;
6998  }
6999  (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
7000  fixpos((yyval.node), (yyvsp[(1) - (6)].node));
7001  /*%
7002  $1 = dispatch2(aref_field, $1, escape_Qundef($3));
7003  $$ = dispatch3(opassign, $1, $5, $6);
7004  %*/
7005  }
7006  break;
7007 
7008  case 204:
7009 
7010 /* Line 1806 of yacc.c */
7011 #line 1998 "parse.y"
7012  {
7013  value_expr((yyvsp[(5) - (5)].node));
7014  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
7015  }
7016  break;
7017 
7018  case 205:
7019 
7020 /* Line 1806 of yacc.c */
7021 #line 2003 "parse.y"
7022  {
7023  value_expr((yyvsp[(5) - (5)].node));
7024  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
7025  }
7026  break;
7027 
7028  case 206:
7029 
7030 /* Line 1806 of yacc.c */
7031 #line 2008 "parse.y"
7032  {
7033  value_expr((yyvsp[(5) - (5)].node));
7034  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_intern("::"), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
7035  }
7036  break;
7037 
7038  case 207:
7039 
7040 /* Line 1806 of yacc.c */
7041 #line 2013 "parse.y"
7042  {
7043  /*%%%*/
7044  (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
7045  (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
7046  /*%
7047  $$ = dispatch2(const_path_field, $1, $3);
7048  $$ = dispatch3(opassign, $$, $4, $5);
7049  %*/
7050  }
7051  break;
7052 
7053  case 208:
7054 
7055 /* Line 1806 of yacc.c */
7056 #line 2023 "parse.y"
7057  {
7058  /*%%%*/
7059  (yyval.node) = NEW_COLON3((yyvsp[(2) - (4)].id));
7060  (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
7061  /*%
7062  $$ = dispatch1(top_const_field, $2);
7063  $$ = dispatch3(opassign, $$, $3, $4);
7064  %*/
7065  }
7066  break;
7067 
7068  case 209:
7069 
7070 /* Line 1806 of yacc.c */
7071 #line 2033 "parse.y"
7072  {
7073  /*%%%*/
7074  rb_backref_error((yyvsp[(1) - (3)].node));
7075  (yyval.node) = NEW_BEGIN(0);
7076  /*%
7077  $$ = dispatch1(var_field, $1);
7078  $$ = dispatch3(opassign, $$, $2, $3);
7079  $$ = dispatch1(assign_error, $$);
7080  %*/
7081  }
7082  break;
7083 
7084  case 210:
7085 
7086 /* Line 1806 of yacc.c */
7087 #line 2044 "parse.y"
7088  {
7089  /*%%%*/
7090  value_expr((yyvsp[(1) - (3)].node));
7091  value_expr((yyvsp[(3) - (3)].node));
7092  (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7093  if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
7094  nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
7096  }
7097  /*%
7098  $$ = dispatch2(dot2, $1, $3);
7099  %*/
7100  }
7101  break;
7102 
7103  case 211:
7104 
7105 /* Line 1806 of yacc.c */
7106 #line 2058 "parse.y"
7107  {
7108  /*%%%*/
7109  value_expr((yyvsp[(1) - (3)].node));
7110  value_expr((yyvsp[(3) - (3)].node));
7111  (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7112  if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
7113  nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
7115  }
7116  /*%
7117  $$ = dispatch2(dot3, $1, $3);
7118  %*/
7119  }
7120  break;
7121 
7122  case 212:
7123 
7124 /* Line 1806 of yacc.c */
7125 #line 2072 "parse.y"
7126  {
7127  /*%%%*/
7128  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
7129  /*%
7130  $$ = dispatch3(binary, $1, ID2SYM('+'), $3);
7131  %*/
7132  }
7133  break;
7134 
7135  case 213:
7136 
7137 /* Line 1806 of yacc.c */
7138 #line 2080 "parse.y"
7139  {
7140  /*%%%*/
7141  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
7142  /*%
7143  $$ = dispatch3(binary, $1, ID2SYM('-'), $3);
7144  %*/
7145  }
7146  break;
7147 
7148  case 214:
7149 
7150 /* Line 1806 of yacc.c */
7151 #line 2088 "parse.y"
7152  {
7153  /*%%%*/
7154  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
7155  /*%
7156  $$ = dispatch3(binary, $1, ID2SYM('*'), $3);
7157  %*/
7158  }
7159  break;
7160 
7161  case 215:
7162 
7163 /* Line 1806 of yacc.c */
7164 #line 2096 "parse.y"
7165  {
7166  /*%%%*/
7167  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
7168  /*%
7169  $$ = dispatch3(binary, $1, ID2SYM('/'), $3);
7170  %*/
7171  }
7172  break;
7173 
7174  case 216:
7175 
7176 /* Line 1806 of yacc.c */
7177 #line 2104 "parse.y"
7178  {
7179  /*%%%*/
7180  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
7181  /*%
7182  $$ = dispatch3(binary, $1, ID2SYM('%'), $3);
7183  %*/
7184  }
7185  break;
7186 
7187  case 217:
7188 
7189 /* Line 1806 of yacc.c */
7190 #line 2112 "parse.y"
7191  {
7192  /*%%%*/
7193  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
7194  /*%
7195  $$ = dispatch3(binary, $1, ripper_intern("**"), $3);
7196  %*/
7197  }
7198  break;
7199 
7200  case 218:
7201 
7202 /* Line 1806 of yacc.c */
7203 #line 2120 "parse.y"
7204  {
7205  /*%%%*/
7206  (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
7207  /*%
7208  $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
7209  $$ = dispatch2(unary, ripper_intern("-@"), $$);
7210  %*/
7211  }
7212  break;
7213 
7214  case 219:
7215 
7216 /* Line 1806 of yacc.c */
7217 #line 2129 "parse.y"
7218  {
7219  /*%%%*/
7220  (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
7221  /*%
7222  $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
7223  $$ = dispatch2(unary, ripper_intern("-@"), $$);
7224  %*/
7225  }
7226  break;
7227 
7228  case 220:
7229 
7230 /* Line 1806 of yacc.c */
7231 #line 2138 "parse.y"
7232  {
7233  /*%%%*/
7234  (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
7235  /*%
7236  $$ = dispatch2(unary, ripper_intern("+@"), $2);
7237  %*/
7238  }
7239  break;
7240 
7241  case 221:
7242 
7243 /* Line 1806 of yacc.c */
7244 #line 2146 "parse.y"
7245  {
7246  /*%%%*/
7247  (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
7248  /*%
7249  $$ = dispatch2(unary, ripper_intern("-@"), $2);
7250  %*/
7251  }
7252  break;
7253 
7254  case 222:
7255 
7256 /* Line 1806 of yacc.c */
7257 #line 2154 "parse.y"
7258  {
7259  /*%%%*/
7260  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
7261  /*%
7262  $$ = dispatch3(binary, $1, ID2SYM('|'), $3);
7263  %*/
7264  }
7265  break;
7266 
7267  case 223:
7268 
7269 /* Line 1806 of yacc.c */
7270 #line 2162 "parse.y"
7271  {
7272  /*%%%*/
7273  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
7274  /*%
7275  $$ = dispatch3(binary, $1, ID2SYM('^'), $3);
7276  %*/
7277  }
7278  break;
7279 
7280  case 224:
7281 
7282 /* Line 1806 of yacc.c */
7283 #line 2170 "parse.y"
7284  {
7285  /*%%%*/
7286  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
7287  /*%
7288  $$ = dispatch3(binary, $1, ID2SYM('&'), $3);
7289  %*/
7290  }
7291  break;
7292 
7293  case 225:
7294 
7295 /* Line 1806 of yacc.c */
7296 #line 2178 "parse.y"
7297  {
7298  /*%%%*/
7299  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
7300  /*%
7301  $$ = dispatch3(binary, $1, ripper_intern("<=>"), $3);
7302  %*/
7303  }
7304  break;
7305 
7306  case 226:
7307 
7308 /* Line 1806 of yacc.c */
7309 #line 2186 "parse.y"
7310  {
7311  /*%%%*/
7312  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
7313  /*%
7314  $$ = dispatch3(binary, $1, ID2SYM('>'), $3);
7315  %*/
7316  }
7317  break;
7318 
7319  case 227:
7320 
7321 /* Line 1806 of yacc.c */
7322 #line 2194 "parse.y"
7323  {
7324  /*%%%*/
7325  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
7326  /*%
7327  $$ = dispatch3(binary, $1, ripper_intern(">="), $3);
7328  %*/
7329  }
7330  break;
7331 
7332  case 228:
7333 
7334 /* Line 1806 of yacc.c */
7335 #line 2202 "parse.y"
7336  {
7337  /*%%%*/
7338  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
7339  /*%
7340  $$ = dispatch3(binary, $1, ID2SYM('<'), $3);
7341  %*/
7342  }
7343  break;
7344 
7345  case 229:
7346 
7347 /* Line 1806 of yacc.c */
7348 #line 2210 "parse.y"
7349  {
7350  /*%%%*/
7351  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
7352  /*%
7353  $$ = dispatch3(binary, $1, ripper_intern("<="), $3);
7354  %*/
7355  }
7356  break;
7357 
7358  case 230:
7359 
7360 /* Line 1806 of yacc.c */
7361 #line 2218 "parse.y"
7362  {
7363  /*%%%*/
7364  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
7365  /*%
7366  $$ = dispatch3(binary, $1, ripper_intern("=="), $3);
7367  %*/
7368  }
7369  break;
7370 
7371  case 231:
7372 
7373 /* Line 1806 of yacc.c */
7374 #line 2226 "parse.y"
7375  {
7376  /*%%%*/
7377  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
7378  /*%
7379  $$ = dispatch3(binary, $1, ripper_intern("==="), $3);
7380  %*/
7381  }
7382  break;
7383 
7384  case 232:
7385 
7386 /* Line 1806 of yacc.c */
7387 #line 2234 "parse.y"
7388  {
7389  /*%%%*/
7390  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
7391  /*%
7392  $$ = dispatch3(binary, $1, ripper_intern("!="), $3);
7393  %*/
7394  }
7395  break;
7396 
7397  case 233:
7398 
7399 /* Line 1806 of yacc.c */
7400 #line 2242 "parse.y"
7401  {
7402  /*%%%*/
7403  (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7404  if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && RB_TYPE_P((yyvsp[(1) - (3)].node)->nd_lit, T_REGEXP)) {
7405  (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
7406  }
7407  /*%
7408  $$ = dispatch3(binary, $1, ripper_intern("=~"), $3);
7409  %*/
7410  }
7411  break;
7412 
7413  case 234:
7414 
7415 /* Line 1806 of yacc.c */
7416 #line 2253 "parse.y"
7417  {
7418  /*%%%*/
7419  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
7420  /*%
7421  $$ = dispatch3(binary, $1, ripper_intern("!~"), $3);
7422  %*/
7423  }
7424  break;
7425 
7426  case 235:
7427 
7428 /* Line 1806 of yacc.c */
7429 #line 2261 "parse.y"
7430  {
7431  /*%%%*/
7432  (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
7433  /*%
7434  $$ = dispatch2(unary, ID2SYM('!'), $2);
7435  %*/
7436  }
7437  break;
7438 
7439  case 236:
7440 
7441 /* Line 1806 of yacc.c */
7442 #line 2269 "parse.y"
7443  {
7444  /*%%%*/
7445  (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
7446  /*%
7447  $$ = dispatch2(unary, ID2SYM('~'), $2);
7448  %*/
7449  }
7450  break;
7451 
7452  case 237:
7453 
7454 /* Line 1806 of yacc.c */
7455 #line 2277 "parse.y"
7456  {
7457  /*%%%*/
7458  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
7459  /*%
7460  $$ = dispatch3(binary, $1, ripper_intern("<<"), $3);
7461  %*/
7462  }
7463  break;
7464 
7465  case 238:
7466 
7467 /* Line 1806 of yacc.c */
7468 #line 2285 "parse.y"
7469  {
7470  /*%%%*/
7471  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
7472  /*%
7473  $$ = dispatch3(binary, $1, ripper_intern(">>"), $3);
7474  %*/
7475  }
7476  break;
7477 
7478  case 239:
7479 
7480 /* Line 1806 of yacc.c */
7481 #line 2293 "parse.y"
7482  {
7483  /*%%%*/
7484  (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7485  /*%
7486  $$ = dispatch3(binary, $1, ripper_intern("&&"), $3);
7487  %*/
7488  }
7489  break;
7490 
7491  case 240:
7492 
7493 /* Line 1806 of yacc.c */
7494 #line 2301 "parse.y"
7495  {
7496  /*%%%*/
7497  (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7498  /*%
7499  $$ = dispatch3(binary, $1, ripper_intern("||"), $3);
7500  %*/
7501  }
7502  break;
7503 
7504  case 241:
7505 
7506 /* Line 1806 of yacc.c */
7507 #line 2308 "parse.y"
7508  {in_defined = 1;}
7509  break;
7510 
7511  case 242:
7512 
7513 /* Line 1806 of yacc.c */
7514 #line 2309 "parse.y"
7515  {
7516  /*%%%*/
7517  in_defined = 0;
7518  (yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node));
7519  /*%
7520  in_defined = 0;
7521  $$ = dispatch1(defined, $4);
7522  %*/
7523  }
7524  break;
7525 
7526  case 243:
7527 
7528 /* Line 1806 of yacc.c */
7529 #line 2319 "parse.y"
7530  {
7531  /*%%%*/
7532  value_expr((yyvsp[(1) - (6)].node));
7533  (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
7534  fixpos((yyval.node), (yyvsp[(1) - (6)].node));
7535  /*%
7536  $$ = dispatch3(ifop, $1, $3, $6);
7537  %*/
7538  }
7539  break;
7540 
7541  case 244:
7542 
7543 /* Line 1806 of yacc.c */
7544 #line 2329 "parse.y"
7545  {
7546  (yyval.node) = (yyvsp[(1) - (1)].node);
7547  }
7548  break;
7549 
7550  case 245:
7551 
7552 /* Line 1806 of yacc.c */
7553 #line 2335 "parse.y"
7554  {
7555  /*%%%*/
7556  value_expr((yyvsp[(1) - (1)].node));
7557  (yyval.node) = (yyvsp[(1) - (1)].node);
7558  if (!(yyval.node)) (yyval.node) = NEW_NIL();
7559  /*%
7560  $$ = $1;
7561  %*/
7562  }
7563  break;
7564 
7565  case 247:
7566 
7567 /* Line 1806 of yacc.c */
7568 #line 2348 "parse.y"
7569  {
7570  (yyval.node) = (yyvsp[(1) - (2)].node);
7571  }
7572  break;
7573 
7574  case 248:
7575 
7576 /* Line 1806 of yacc.c */
7577 #line 2352 "parse.y"
7578  {
7579  /*%%%*/
7580  (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
7581  /*%
7582  $$ = arg_add_assocs($1, $3);
7583  %*/
7584  }
7585  break;
7586 
7587  case 249:
7588 
7589 /* Line 1806 of yacc.c */
7590 #line 2360 "parse.y"
7591  {
7592  /*%%%*/
7593  (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
7594  /*%
7595  $$ = arg_add_assocs(arg_new(), $1);
7596  %*/
7597  }
7598  break;
7599 
7600  case 250:
7601 
7602 /* Line 1806 of yacc.c */
7603 #line 2370 "parse.y"
7604  {
7605  /*%%%*/
7606  (yyval.node) = (yyvsp[(2) - (3)].node);
7607  /*%
7608  $$ = dispatch1(arg_paren, escape_Qundef($2));
7609  %*/
7610  }
7611  break;
7612 
7613  case 255:
7614 
7615 /* Line 1806 of yacc.c */
7616 #line 2386 "parse.y"
7617  {
7618  (yyval.node) = (yyvsp[(1) - (2)].node);
7619  }
7620  break;
7621 
7622  case 256:
7623 
7624 /* Line 1806 of yacc.c */
7625 #line 2390 "parse.y"
7626  {
7627  /*%%%*/
7628  (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
7629  /*%
7630  $$ = arg_add_assocs($1, $3);
7631  %*/
7632  }
7633  break;
7634 
7635  case 257:
7636 
7637 /* Line 1806 of yacc.c */
7638 #line 2398 "parse.y"
7639  {
7640  /*%%%*/
7641  (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
7642  /*%
7643  $$ = arg_add_assocs(arg_new(), $1);
7644  %*/
7645  }
7646  break;
7647 
7648  case 258:
7649 
7650 /* Line 1806 of yacc.c */
7651 #line 2408 "parse.y"
7652  {
7653  /*%%%*/
7654  value_expr((yyvsp[(1) - (1)].node));
7655  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
7656  /*%
7657  $$ = arg_add(arg_new(), $1);
7658  %*/
7659  }
7660  break;
7661 
7662  case 259:
7663 
7664 /* Line 1806 of yacc.c */
7665 #line 2417 "parse.y"
7666  {
7667  /*%%%*/
7668  (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
7669  /*%
7670  $$ = arg_add_optblock($1, $2);
7671  %*/
7672  }
7673  break;
7674 
7675  case 260:
7676 
7677 /* Line 1806 of yacc.c */
7678 #line 2425 "parse.y"
7679  {
7680  /*%%%*/
7681  (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
7682  (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
7683  /*%
7684  $$ = arg_add_assocs(arg_new(), $1);
7685  $$ = arg_add_optblock($$, $2);
7686  %*/
7687  }
7688  break;
7689 
7690  case 261:
7691 
7692 /* Line 1806 of yacc.c */
7693 #line 2435 "parse.y"
7694  {
7695  /*%%%*/
7696  (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
7697  (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
7698  /*%
7699  $$ = arg_add_optblock(arg_add_assocs($1, $3), $4);
7700  %*/
7701  }
7702  break;
7703 
7704  case 263:
7705 
7706 /* Line 1806 of yacc.c */
7707 #line 2452 "parse.y"
7708  {
7709  (yyval.val) = cmdarg_stack;
7710  CMDARG_PUSH(1);
7711  }
7712  break;
7713 
7714  case 264:
7715 
7716 /* Line 1806 of yacc.c */
7717 #line 2457 "parse.y"
7718  {
7719  /* CMDARG_POP() */
7720  cmdarg_stack = (yyvsp[(1) - (2)].val);
7721  (yyval.node) = (yyvsp[(2) - (2)].node);
7722  }
7723  break;
7724 
7725  case 265:
7726 
7727 /* Line 1806 of yacc.c */
7728 #line 2465 "parse.y"
7729  {
7730  /*%%%*/
7731  (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
7732  /*%
7733  $$ = $2;
7734  %*/
7735  }
7736  break;
7737 
7738  case 266:
7739 
7740 /* Line 1806 of yacc.c */
7741 #line 2475 "parse.y"
7742  {
7743  (yyval.node) = (yyvsp[(2) - (2)].node);
7744  }
7745  break;
7746 
7747  case 267:
7748 
7749 /* Line 1806 of yacc.c */
7750 #line 2479 "parse.y"
7751  {
7752  (yyval.node) = 0;
7753  }
7754  break;
7755 
7756  case 268:
7757 
7758 /* Line 1806 of yacc.c */
7759 #line 2485 "parse.y"
7760  {
7761  /*%%%*/
7762  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
7763  /*%
7764  $$ = arg_add(arg_new(), $1);
7765  %*/
7766  }
7767  break;
7768 
7769  case 269:
7770 
7771 /* Line 1806 of yacc.c */
7772 #line 2493 "parse.y"
7773  {
7774  /*%%%*/
7775  (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
7776  /*%
7777  $$ = arg_add_star(arg_new(), $2);
7778  %*/
7779  }
7780  break;
7781 
7782  case 270:
7783 
7784 /* Line 1806 of yacc.c */
7785 #line 2501 "parse.y"
7786  {
7787  /*%%%*/
7788  NODE *n1;
7789  if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
7790  (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
7791  }
7792  else {
7793  (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7794  }
7795  /*%
7796  $$ = arg_add($1, $3);
7797  %*/
7798  }
7799  break;
7800 
7801  case 271:
7802 
7803 /* Line 1806 of yacc.c */
7804 #line 2515 "parse.y"
7805  {
7806  /*%%%*/
7807  NODE *n1;
7808  if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
7809  (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
7810  }
7811  else {
7812  (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
7813  }
7814  /*%
7815  $$ = arg_add_star($1, $4);
7816  %*/
7817  }
7818  break;
7819 
7820  case 272:
7821 
7822 /* Line 1806 of yacc.c */
7823 #line 2531 "parse.y"
7824  {
7825  /*%%%*/
7826  NODE *n1;
7827  if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
7828  (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
7829  }
7830  else {
7831  (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7832  }
7833  /*%
7834  $$ = mrhs_add(args2mrhs($1), $3);
7835  %*/
7836  }
7837  break;
7838 
7839  case 273:
7840 
7841 /* Line 1806 of yacc.c */
7842 #line 2545 "parse.y"
7843  {
7844  /*%%%*/
7845  NODE *n1;
7846  if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
7847  (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
7848  (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
7849  }
7850  else {
7851  (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
7852  }
7853  /*%
7854  $$ = mrhs_add_star(args2mrhs($1), $4);
7855  %*/
7856  }
7857  break;
7858 
7859  case 274:
7860 
7861 /* Line 1806 of yacc.c */
7862 #line 2560 "parse.y"
7863  {
7864  /*%%%*/
7865  (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
7866  /*%
7867  $$ = mrhs_add_star(mrhs_new(), $2);
7868  %*/
7869  }
7870  break;
7871 
7872  case 285:
7873 
7874 /* Line 1806 of yacc.c */
7875 #line 2580 "parse.y"
7876  {
7877  /*%%%*/
7878  (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
7879  /*%
7880  $$ = method_arg(dispatch1(fcall, $1), arg_new());
7881  %*/
7882  }
7883  break;
7884 
7885  case 286:
7886 
7887 /* Line 1806 of yacc.c */
7888 #line 2588 "parse.y"
7889  {
7890  (yyvsp[(1) - (1)].val) = cmdarg_stack;
7891  cmdarg_stack = 0;
7892  /*%%%*/
7893  (yyval.num) = ruby_sourceline;
7894  /*%
7895  %*/
7896  }
7897  break;
7898 
7899  case 287:
7900 
7901 /* Line 1806 of yacc.c */
7902 #line 2598 "parse.y"
7903  {
7904  cmdarg_stack = (yyvsp[(1) - (4)].val);
7905  /*%%%*/
7906  if ((yyvsp[(3) - (4)].node) == NULL) {
7907  (yyval.node) = NEW_NIL();
7908  }
7909  else {
7910  if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
7911  nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
7912  nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
7913  (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
7914  }
7915  nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
7916  /*%
7917  $$ = dispatch1(begin, $3);
7918  %*/
7919  }
7920  break;
7921 
7922  case 288:
7923 
7924 /* Line 1806 of yacc.c */
7925 #line 2615 "parse.y"
7926  {lex_state = EXPR_ENDARG;}
7927  break;
7928 
7929  case 289:
7930 
7931 /* Line 1806 of yacc.c */
7932 #line 2616 "parse.y"
7933  {
7934  /*%%%*/
7935  (yyval.node) = 0;
7936  /*%
7937  $$ = dispatch1(paren, 0);
7938  %*/
7939  }
7940  break;
7941 
7942  case 290:
7943 
7944 /* Line 1806 of yacc.c */
7945 #line 2623 "parse.y"
7946  {lex_state = EXPR_ENDARG;}
7947  break;
7948 
7949  case 291:
7950 
7951 /* Line 1806 of yacc.c */
7952 #line 2624 "parse.y"
7953  {
7954  /*%%%*/
7955  (yyval.node) = (yyvsp[(2) - (4)].node);
7956  /*%
7957  $$ = dispatch1(paren, $2);
7958  %*/
7959  }
7960  break;
7961 
7962  case 292:
7963 
7964 /* Line 1806 of yacc.c */
7965 #line 2632 "parse.y"
7966  {
7967  /*%%%*/
7968  (yyval.node) = (yyvsp[(2) - (3)].node);
7969  /*%
7970  $$ = dispatch1(paren, $2);
7971  %*/
7972  }
7973  break;
7974 
7975  case 293:
7976 
7977 /* Line 1806 of yacc.c */
7978 #line 2640 "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 294:
7989 
7990 /* Line 1806 of yacc.c */
7991 #line 2648 "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 295:
8002 
8003 /* Line 1806 of yacc.c */
8004 #line 2656 "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 296:
8020 
8021 /* Line 1806 of yacc.c */
8022 #line 2669 "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 297:
8033 
8034 /* Line 1806 of yacc.c */
8035 #line 2677 "parse.y"
8036  {
8037  /*%%%*/
8038  (yyval.node) = NEW_RETURN(0);
8039  /*%
8040  $$ = dispatch0(return0);
8041  %*/
8042  }
8043  break;
8044 
8045  case 298:
8046 
8047 /* Line 1806 of yacc.c */
8048 #line 2685 "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 299:
8059 
8060 /* Line 1806 of yacc.c */
8061 #line 2693 "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 300:
8072 
8073 /* Line 1806 of yacc.c */
8074 #line 2701 "parse.y"
8075  {
8076  /*%%%*/
8077  (yyval.node) = NEW_YIELD(0);
8078  /*%
8079  $$ = dispatch0(yield0);
8080  %*/
8081  }
8082  break;
8083 
8084  case 301:
8085 
8086 /* Line 1806 of yacc.c */
8087 #line 2708 "parse.y"
8088  {in_defined = 1;}
8089  break;
8090 
8091  case 302:
8092 
8093 /* Line 1806 of yacc.c */
8094 #line 2709 "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 303:
8107 
8108 /* Line 1806 of yacc.c */
8109 #line 2719 "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 304:
8120 
8121 /* Line 1806 of yacc.c */
8122 #line 2727 "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 305:
8133 
8134 /* Line 1806 of yacc.c */
8135 #line 2735 "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 307:
8148 
8149 /* Line 1806 of yacc.c */
8150 #line 2746 "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 308:
8163 
8164 /* Line 1806 of yacc.c */
8165 #line 2756 "parse.y"
8166  {
8167  (yyval.node) = (yyvsp[(2) - (2)].node);
8168  }
8169  break;
8170 
8171  case 309:
8172 
8173 /* Line 1806 of yacc.c */
8174 #line 2763 "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 310:
8186 
8187 /* Line 1806 of yacc.c */
8188 #line 2775 "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 311:
8200 
8201 /* Line 1806 of yacc.c */
8202 #line 2783 "parse.y"
8203  {COND_PUSH(1);}
8204  break;
8205 
8206  case 312:
8207 
8208 /* Line 1806 of yacc.c */
8209 #line 2783 "parse.y"
8210  {COND_POP();}
8211  break;
8212 
8213  case 313:
8214 
8215 /* Line 1806 of yacc.c */
8216 #line 2786 "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 314:
8228 
8229 /* Line 1806 of yacc.c */
8230 #line 2794 "parse.y"
8231  {COND_PUSH(1);}
8232  break;
8233 
8234  case 315:
8235 
8236 /* Line 1806 of yacc.c */
8237 #line 2794 "parse.y"
8238  {COND_POP();}
8239  break;
8240 
8241  case 316:
8242 
8243 /* Line 1806 of yacc.c */
8244 #line 2797 "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 317:
8256 
8257 /* Line 1806 of yacc.c */
8258 #line 2808 "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 318:
8270 
8271 /* Line 1806 of yacc.c */
8272 #line 2817 "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 319:
8283 
8284 /* Line 1806 of yacc.c */
8285 #line 2825 "parse.y"
8286  {COND_PUSH(1);}
8287  break;
8288 
8289  case 320:
8290 
8291 /* Line 1806 of yacc.c */
8292 #line 2827 "parse.y"
8293  {COND_POP();}
8294  break;
8295 
8296  case 321:
8297 
8298 /* Line 1806 of yacc.c */
8299 #line 2830 "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 322:
8363 
8364 /* Line 1806 of yacc.c */
8365 #line 2891 "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 323:
8378 
8379 /* Line 1806 of yacc.c */
8380 #line 2902 "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 324:
8393 
8394 /* Line 1806 of yacc.c */
8395 #line 2912 "parse.y"
8396  {
8397  (yyval.num) = in_def;
8398  in_def = 0;
8399  }
8400  break;
8401 
8402  case 325:
8403 
8404 /* Line 1806 of yacc.c */
8405 #line 2917 "parse.y"
8406  {
8407  (yyval.num) = in_single;
8408  in_single = 0;
8409  local_push(0);
8410  }
8411  break;
8412 
8413  case 326:
8414 
8415 /* Line 1806 of yacc.c */
8416 #line 2924 "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 327:
8431 
8432 /* Line 1806 of yacc.c */
8433 #line 2936 "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 328:
8446 
8447 /* Line 1806 of yacc.c */
8448 #line 2947 "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 329:
8461 
8462 /* Line 1806 of yacc.c */
8463 #line 2957 "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 330:
8473 
8474 /* Line 1806 of yacc.c */
8475 #line 2966 "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 331:
8492 
8493 /* Line 1806 of yacc.c */
8494 #line 2979 "parse.y"
8495  {lex_state = EXPR_FNAME;}
8496  break;
8497 
8498  case 332:
8499 
8500 /* Line 1806 of yacc.c */
8501 #line 2980 "parse.y"
8502  {
8503  in_single++;
8504  lex_state = EXPR_ENDFN; /* force for args */
8505  local_push(0);
8506  }
8507  break;
8508 
8509  case 333:
8510 
8511 /* Line 1806 of yacc.c */
8512 #line 2988 "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 334:
8528 
8529 /* Line 1806 of yacc.c */
8530 #line 3001 "parse.y"
8531  {
8532  /*%%%*/
8533  (yyval.node) = NEW_BREAK(0);
8534  /*%
8535  $$ = dispatch1(break, arg_new());
8536  %*/
8537  }
8538  break;
8539 
8540  case 335:
8541 
8542 /* Line 1806 of yacc.c */
8543 #line 3009 "parse.y"
8544  {
8545  /*%%%*/
8546  (yyval.node) = NEW_NEXT(0);
8547  /*%
8548  $$ = dispatch1(next, arg_new());
8549  %*/
8550  }
8551  break;
8552 
8553  case 336:
8554 
8555 /* Line 1806 of yacc.c */
8556 #line 3017 "parse.y"
8557  {
8558  /*%%%*/
8559  (yyval.node) = NEW_REDO();
8560  /*%
8561  $$ = dispatch0(redo);
8562  %*/
8563  }
8564  break;
8565 
8566  case 337:
8567 
8568 /* Line 1806 of yacc.c */
8569 #line 3025 "parse.y"
8570  {
8571  /*%%%*/
8572  (yyval.node) = NEW_RETRY();
8573  /*%
8574  $$ = dispatch0(retry);
8575  %*/
8576  }
8577  break;
8578 
8579  case 338:
8580 
8581 /* Line 1806 of yacc.c */
8582 #line 3035 "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 339:
8595 
8596 /* Line 1806 of yacc.c */
8597 #line 3047 "parse.y"
8598  {
8599  token_info_push("begin");
8600  }
8601  break;
8602 
8603  case 340:
8604 
8605 /* Line 1806 of yacc.c */
8606 #line 3053 "parse.y"
8607  {
8608  token_info_push("if");
8609  }
8610  break;
8611 
8612  case 341:
8613 
8614 /* Line 1806 of yacc.c */
8615 #line 3059 "parse.y"
8616  {
8617  token_info_push("unless");
8618  }
8619  break;
8620 
8621  case 342:
8622 
8623 /* Line 1806 of yacc.c */
8624 #line 3065 "parse.y"
8625  {
8626  token_info_push("while");
8627  }
8628  break;
8629 
8630  case 343:
8631 
8632 /* Line 1806 of yacc.c */
8633 #line 3071 "parse.y"
8634  {
8635  token_info_push("until");
8636  }
8637  break;
8638 
8639  case 344:
8640 
8641 /* Line 1806 of yacc.c */
8642 #line 3077 "parse.y"
8643  {
8644  token_info_push("case");
8645  }
8646  break;
8647 
8648  case 345:
8649 
8650 /* Line 1806 of yacc.c */
8651 #line 3083 "parse.y"
8652  {
8653  token_info_push("for");
8654  }
8655  break;
8656 
8657  case 346:
8658 
8659 /* Line 1806 of yacc.c */
8660 #line 3089 "parse.y"
8661  {
8662  token_info_push("class");
8663  }
8664  break;
8665 
8666  case 347:
8667 
8668 /* Line 1806 of yacc.c */
8669 #line 3095 "parse.y"
8670  {
8671  token_info_push("module");
8672  }
8673  break;
8674 
8675  case 348:
8676 
8677 /* Line 1806 of yacc.c */
8678 #line 3101 "parse.y"
8679  {
8680  token_info_push("def");
8681  /*%%%*/
8682  (yyval.num) = ruby_sourceline;
8683  /*%
8684  %*/
8685  }
8686  break;
8687 
8688  case 349:
8689 
8690 /* Line 1806 of yacc.c */
8691 #line 3111 "parse.y"
8692  {
8693  token_info_pop("end");
8694  }
8695  break;
8696 
8697  case 356:
8698 
8699 /* Line 1806 of yacc.c */
8700 #line 3141 "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 358:
8712 
8713 /* Line 1806 of yacc.c */
8714 #line 3153 "parse.y"
8715  {
8716  /*%%%*/
8717  (yyval.node) = (yyvsp[(2) - (2)].node);
8718  /*%
8719  $$ = dispatch1(else, $2);
8720  %*/
8721  }
8722  break;
8723 
8724  case 361:
8725 
8726 /* Line 1806 of yacc.c */
8727 #line 3167 "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 362:
8738 
8739 /* Line 1806 of yacc.c */
8740 #line 3175 "parse.y"
8741  {
8742  /*%%%*/
8743  (yyval.node) = (yyvsp[(2) - (3)].node);
8744  /*%
8745  $$ = dispatch1(mlhs_paren, $2);
8746  %*/
8747  }
8748  break;
8749 
8750  case 363:
8751 
8752 /* Line 1806 of yacc.c */
8753 #line 3185 "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 364:
8764 
8765 /* Line 1806 of yacc.c */
8766 #line 3193 "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 365:
8777 
8778 /* Line 1806 of yacc.c */
8779 #line 3203 "parse.y"
8780  {
8781  /*%%%*/
8782  (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
8783  /*%
8784  $$ = $1;
8785  %*/
8786  }
8787  break;
8788 
8789  case 366:
8790 
8791 /* Line 1806 of yacc.c */
8792 #line 3211 "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 367:
8804 
8805 /* Line 1806 of yacc.c */
8806 #line 3220 "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 368:
8818 
8819 /* Line 1806 of yacc.c */
8820 #line 3229 "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 369:
8831 
8832 /* Line 1806 of yacc.c */
8833 #line 3237 "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 370:
8844 
8845 /* Line 1806 of yacc.c */
8846 #line 3245 "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 371:
8858 
8859 /* Line 1806 of yacc.c */
8860 #line 3254 "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 372:
8875 
8876 /* Line 1806 of yacc.c */
8877 #line 3266 "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 373:
8888 
8889 /* Line 1806 of yacc.c */
8890 #line 3274 "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 374:
8901 
8902 /* Line 1806 of yacc.c */
8903 #line 3285 "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 375:
8910 
8911 /* Line 1806 of yacc.c */
8912 #line 3289 "parse.y"
8913  {
8914  (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
8915  }
8916  break;
8917 
8918  case 376:
8919 
8920 /* Line 1806 of yacc.c */
8921 #line 3293 "parse.y"
8922  {
8923  (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
8924  }
8925  break;
8926 
8927  case 377:
8928 
8929 /* Line 1806 of yacc.c */
8930 #line 3297 "parse.y"
8931  {
8932  (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
8933  }
8934  break;
8935 
8936  case 378:
8937 
8938 /* Line 1806 of yacc.c */
8939 #line 3303 "parse.y"
8940  {
8941  (yyval.node) = (yyvsp[(2) - (2)].node);
8942  }
8943  break;
8944 
8945  case 379:
8946 
8947 /* Line 1806 of yacc.c */
8948 #line 3307 "parse.y"
8949  {
8950  (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
8951  }
8952  break;
8953 
8954  case 380:
8955 
8956 /* Line 1806 of yacc.c */
8957 #line 3313 "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 381:
8964 
8965 /* Line 1806 of yacc.c */
8966 #line 3317 "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 382:
8973 
8974 /* Line 1806 of yacc.c */
8975 #line 3321 "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 383:
8982 
8983 /* Line 1806 of yacc.c */
8984 #line 3325 "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 384:
8991 
8992 /* Line 1806 of yacc.c */
8993 #line 3329 "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 385:
9000 
9001 /* Line 1806 of yacc.c */
9002 #line 3333 "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 386:
9013 
9014 /* Line 1806 of yacc.c */
9015 #line 3341 "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 387:
9022 
9023 /* Line 1806 of yacc.c */
9024 #line 3345 "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 388:
9031 
9032 /* Line 1806 of yacc.c */
9033 #line 3349 "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 389:
9040 
9041 /* Line 1806 of yacc.c */
9042 #line 3353 "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 390:
9049 
9050 /* Line 1806 of yacc.c */
9051 #line 3357 "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 391:
9058 
9059 /* Line 1806 of yacc.c */
9060 #line 3361 "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 392:
9067 
9068 /* Line 1806 of yacc.c */
9069 #line 3365 "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 393:
9076 
9077 /* Line 1806 of yacc.c */
9078 #line 3369 "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 394:
9085 
9086 /* Line 1806 of yacc.c */
9087 #line 3373 "parse.y"
9088  {
9089  (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
9090  }
9091  break;
9092 
9093  case 396:
9094 
9095 /* Line 1806 of yacc.c */
9096 #line 3380 "parse.y"
9097  {
9098  command_start = TRUE;
9099  }
9100  break;
9101 
9102  case 397:
9103 
9104 /* Line 1806 of yacc.c */
9105 #line 3386 "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 398:
9117 
9118 /* Line 1806 of yacc.c */
9119 #line 3395 "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 399:
9131 
9132 /* Line 1806 of yacc.c */
9133 #line 3404 "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 400:
9144 
9145 /* Line 1806 of yacc.c */
9146 #line 3415 "parse.y"
9147  {
9148  (yyval.node) = 0;
9149  }
9150  break;
9151 
9152  case 401:
9153 
9154 /* Line 1806 of yacc.c */
9155 #line 3419 "parse.y"
9156  {
9157  /*%%%*/
9158  (yyval.node) = 0;
9159  /*%
9160  $$ = $3;
9161  %*/
9162  }
9163  break;
9164 
9165  case 404:
9166 
9167 /* Line 1806 of yacc.c */
9168 #line 3445 "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 405:
9179 
9180 /* Line 1806 of yacc.c */
9181 #line 3453 "parse.y"
9182  {
9183  (yyval.node) = 0;
9184  }
9185  break;
9186 
9187  case 406:
9188 
9189 /* Line 1806 of yacc.c */
9190 #line 3458 "parse.y"
9191  {
9192  (yyval.vars) = dyna_push();
9193  }
9194  break;
9195 
9196  case 407:
9197 
9198 /* Line 1806 of yacc.c */
9199 #line 3461 "parse.y"
9200  {
9201  (yyval.num) = lpar_beg;
9202  lpar_beg = ++paren_nest;
9203  }
9204  break;
9205 
9206  case 408:
9207 
9208 /* Line 1806 of yacc.c */
9209 #line 3466 "parse.y"
9210  {
9211  (yyval.num) = ruby_sourceline;
9212  }
9213  break;
9214 
9215  case 409:
9216 
9217 /* Line 1806 of yacc.c */
9218 #line 3470 "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 410:
9232 
9233 /* Line 1806 of yacc.c */
9234 #line 3483 "parse.y"
9235  {
9236  /*%%%*/
9237  (yyval.node) = (yyvsp[(2) - (4)].node);
9238  /*%
9239  $$ = dispatch1(paren, $2);
9240  %*/
9241  }
9242  break;
9243 
9244  case 411:
9245 
9246 /* Line 1806 of yacc.c */
9247 #line 3491 "parse.y"
9248  {
9249  /*%%%*/
9250  (yyval.node) = (yyvsp[(1) - (1)].node);
9251  /*%
9252  $$ = $1;
9253  %*/
9254  }
9255  break;
9256 
9257  case 412:
9258 
9259 /* Line 1806 of yacc.c */
9260 #line 3501 "parse.y"
9261  {
9262  (yyval.node) = (yyvsp[(2) - (3)].node);
9263  }
9264  break;
9265 
9266  case 413:
9267 
9268 /* Line 1806 of yacc.c */
9269 #line 3505 "parse.y"
9270  {
9271  (yyval.node) = (yyvsp[(2) - (3)].node);
9272  }
9273  break;
9274 
9275  case 414:
9276 
9277 /* Line 1806 of yacc.c */
9278 #line 3511 "parse.y"
9279  {
9280  (yyvsp[(1) - (1)].vars) = dyna_push();
9281  /*%%%*/
9282  (yyval.num) = ruby_sourceline;
9283  /*% %*/
9284  }
9285  break;
9286 
9287  case 415:
9288 
9289 /* Line 1806 of yacc.c */
9290 #line 3520 "parse.y"
9291  {
9292  /*%%%*/
9293  (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
9294  nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
9295  /*%
9296  $$ = dispatch2(do_block, escape_Qundef($3), $4);
9297  %*/
9298  dyna_pop((yyvsp[(1) - (5)].vars));
9299  }
9300  break;
9301 
9302  case 416:
9303 
9304 /* Line 1806 of yacc.c */
9305 #line 3532 "parse.y"
9306  {
9307  /*%%%*/
9308  if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
9309  compile_error(PARSER_ARG "block given to yield");
9310  }
9311  else {
9312  block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
9313  }
9314  (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
9315  (yyval.node) = (yyvsp[(2) - (2)].node);
9316  fixpos((yyval.node), (yyvsp[(1) - (2)].node));
9317  /*%
9318  $$ = method_add_block($1, $2);
9319  %*/
9320  }
9321  break;
9322 
9323  case 417:
9324 
9325 /* Line 1806 of yacc.c */
9326 #line 3548 "parse.y"
9327  {
9328  /*%%%*/
9329  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
9330  /*%
9331  $$ = dispatch3(call, $1, $2, $3);
9332  $$ = method_optarg($$, $4);
9333  %*/
9334  }
9335  break;
9336 
9337  case 418:
9338 
9339 /* Line 1806 of yacc.c */
9340 #line 3557 "parse.y"
9341  {
9342  /*%%%*/
9343  block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
9344  (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
9345  (yyval.node) = (yyvsp[(5) - (5)].node);
9346  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
9347  /*%
9348  $$ = dispatch4(command_call, $1, $2, $3, $4);
9349  $$ = method_add_block($$, $5);
9350  %*/
9351  }
9352  break;
9353 
9354  case 419:
9355 
9356 /* Line 1806 of yacc.c */
9357 #line 3569 "parse.y"
9358  {
9359  /*%%%*/
9360  block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
9361  (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
9362  (yyval.node) = (yyvsp[(5) - (5)].node);
9363  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
9364  /*%
9365  $$ = dispatch4(command_call, $1, $2, $3, $4);
9366  $$ = method_add_block($$, $5);
9367  %*/
9368  }
9369  break;
9370 
9371  case 420:
9372 
9373 /* Line 1806 of yacc.c */
9374 #line 3583 "parse.y"
9375  {
9376  /*%%%*/
9377  (yyval.node) = (yyvsp[(1) - (2)].node);
9378  (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
9379  /*%
9380  $$ = method_arg(dispatch1(fcall, $1), $2);
9381  %*/
9382  }
9383  break;
9384 
9385  case 421:
9386 
9387 /* Line 1806 of yacc.c */
9388 #line 3592 "parse.y"
9389  {
9390  /*%%%*/
9391  (yyval.num) = ruby_sourceline;
9392  /*% %*/
9393  }
9394  break;
9395 
9396  case 422:
9397 
9398 /* Line 1806 of yacc.c */
9399 #line 3598 "parse.y"
9400  {
9401  /*%%%*/
9402  (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
9403  nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
9404  /*%
9405  $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
9406  $$ = method_optarg($$, $5);
9407  %*/
9408  }
9409  break;
9410 
9411  case 423:
9412 
9413 /* Line 1806 of yacc.c */
9414 #line 3608 "parse.y"
9415  {
9416  /*%%%*/
9417  (yyval.num) = ruby_sourceline;
9418  /*% %*/
9419  }
9420  break;
9421 
9422  case 424:
9423 
9424 /* Line 1806 of yacc.c */
9425 #line 3614 "parse.y"
9426  {
9427  /*%%%*/
9428  (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
9429  nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
9430  /*%
9431  $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
9432  $$ = method_optarg($$, $5);
9433  %*/
9434  }
9435  break;
9436 
9437  case 425:
9438 
9439 /* Line 1806 of yacc.c */
9440 #line 3624 "parse.y"
9441  {
9442  /*%%%*/
9443  (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
9444  /*%
9445  $$ = dispatch3(call, $1, ripper_intern("::"), $3);
9446  %*/
9447  }
9448  break;
9449 
9450  case 426:
9451 
9452 /* Line 1806 of yacc.c */
9453 #line 3632 "parse.y"
9454  {
9455  /*%%%*/
9456  (yyval.num) = ruby_sourceline;
9457  /*% %*/
9458  }
9459  break;
9460 
9461  case 427:
9462 
9463 /* Line 1806 of yacc.c */
9464 #line 3638 "parse.y"
9465  {
9466  /*%%%*/
9467  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), rb_intern("call"), (yyvsp[(4) - (4)].node));
9468  nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
9469  /*%
9470  $$ = dispatch3(call, $1, ripper_id2sym('.'),
9471  ripper_intern("call"));
9472  $$ = method_optarg($$, $4);
9473  %*/
9474  }
9475  break;
9476 
9477  case 428:
9478 
9479 /* Line 1806 of yacc.c */
9480 #line 3649 "parse.y"
9481  {
9482  /*%%%*/
9483  (yyval.num) = ruby_sourceline;
9484  /*% %*/
9485  }
9486  break;
9487 
9488  case 429:
9489 
9490 /* Line 1806 of yacc.c */
9491 #line 3655 "parse.y"
9492  {
9493  /*%%%*/
9494  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), rb_intern("call"), (yyvsp[(4) - (4)].node));
9495  nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
9496  /*%
9497  $$ = dispatch3(call, $1, ripper_intern("::"),
9498  ripper_intern("call"));
9499  $$ = method_optarg($$, $4);
9500  %*/
9501  }
9502  break;
9503 
9504  case 430:
9505 
9506 /* Line 1806 of yacc.c */
9507 #line 3666 "parse.y"
9508  {
9509  /*%%%*/
9510  (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
9511  /*%
9512  $$ = dispatch1(super, $2);
9513  %*/
9514  }
9515  break;
9516 
9517  case 431:
9518 
9519 /* Line 1806 of yacc.c */
9520 #line 3674 "parse.y"
9521  {
9522  /*%%%*/
9523  (yyval.node) = NEW_ZSUPER();
9524  /*%
9525  $$ = dispatch0(zsuper);
9526  %*/
9527  }
9528  break;
9529 
9530  case 432:
9531 
9532 /* Line 1806 of yacc.c */
9533 #line 3682 "parse.y"
9534  {
9535  /*%%%*/
9536  if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
9537  (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
9538  else
9539  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
9540  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
9541  /*%
9542  $$ = dispatch2(aref, $1, escape_Qundef($3));
9543  %*/
9544  }
9545  break;
9546 
9547  case 433:
9548 
9549 /* Line 1806 of yacc.c */
9550 #line 3696 "parse.y"
9551  {
9552  (yyvsp[(1) - (1)].vars) = dyna_push();
9553  /*%%%*/
9554  (yyval.num) = ruby_sourceline;
9555  /*%
9556  %*/
9557  }
9558  break;
9559 
9560  case 434:
9561 
9562 /* Line 1806 of yacc.c */
9563 #line 3705 "parse.y"
9564  {
9565  /*%%%*/
9566  (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
9567  nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
9568  /*%
9569  $$ = dispatch2(brace_block, escape_Qundef($3), $4);
9570  %*/
9571  dyna_pop((yyvsp[(1) - (5)].vars));
9572  }
9573  break;
9574 
9575  case 435:
9576 
9577 /* Line 1806 of yacc.c */
9578 #line 3715 "parse.y"
9579  {
9580  (yyvsp[(1) - (1)].vars) = dyna_push();
9581  /*%%%*/
9582  (yyval.num) = ruby_sourceline;
9583  /*%
9584  %*/
9585  }
9586  break;
9587 
9588  case 436:
9589 
9590 /* Line 1806 of yacc.c */
9591 #line 3724 "parse.y"
9592  {
9593  /*%%%*/
9594  (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
9595  nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
9596  /*%
9597  $$ = dispatch2(do_block, escape_Qundef($3), $4);
9598  %*/
9599  dyna_pop((yyvsp[(1) - (5)].vars));
9600  }
9601  break;
9602 
9603  case 437:
9604 
9605 /* Line 1806 of yacc.c */
9606 #line 3738 "parse.y"
9607  {
9608  /*%%%*/
9609  (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
9610  /*%
9611  $$ = dispatch3(when, $2, $4, escape_Qundef($5));
9612  %*/
9613  }
9614  break;
9615 
9616  case 440:
9617 
9618 /* Line 1806 of yacc.c */
9619 #line 3754 "parse.y"
9620  {
9621  /*%%%*/
9622  if ((yyvsp[(3) - (6)].node)) {
9623  (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
9624  (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
9625  }
9626  (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
9627  fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
9628  /*%
9629  $$ = dispatch4(rescue,
9630  escape_Qundef($2),
9631  escape_Qundef($3),
9632  escape_Qundef($5),
9633  escape_Qundef($6));
9634  %*/
9635  }
9636  break;
9637 
9638  case 442:
9639 
9640 /* Line 1806 of yacc.c */
9641 #line 3774 "parse.y"
9642  {
9643  /*%%%*/
9644  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
9645  /*%
9646  $$ = rb_ary_new3(1, $1);
9647  %*/
9648  }
9649  break;
9650 
9651  case 443:
9652 
9653 /* Line 1806 of yacc.c */
9654 #line 3782 "parse.y"
9655  {
9656  /*%%%*/
9657  if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
9658  /*%
9659  $$ = $1;
9660  %*/
9661  }
9662  break;
9663 
9664  case 445:
9665 
9666 /* Line 1806 of yacc.c */
9667 #line 3793 "parse.y"
9668  {
9669  (yyval.node) = (yyvsp[(2) - (2)].node);
9670  }
9671  break;
9672 
9673  case 447:
9674 
9675 /* Line 1806 of yacc.c */
9676 #line 3800 "parse.y"
9677  {
9678  /*%%%*/
9679  (yyval.node) = (yyvsp[(2) - (2)].node);
9680  /*%
9681  $$ = dispatch1(ensure, $2);
9682  %*/
9683  }
9684  break;
9685 
9686  case 450:
9687 
9688 /* Line 1806 of yacc.c */
9689 #line 3812 "parse.y"
9690  {
9691  /*%%%*/
9692  (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
9693  /*%
9694  $$ = dispatch1(symbol_literal, $1);
9695  %*/
9696  }
9697  break;
9698 
9699  case 452:
9700 
9701 /* Line 1806 of yacc.c */
9702 #line 3823 "parse.y"
9703  {
9704  /*%%%*/
9705  NODE *node = (yyvsp[(1) - (1)].node);
9706  if (!node) {
9707  node = NEW_STR(STR_NEW0());
9708  }
9709  else {
9710  node = evstr2dstr(node);
9711  }
9712  (yyval.node) = node;
9713  /*%
9714  $$ = $1;
9715  %*/
9716  }
9717  break;
9718 
9719  case 455:
9720 
9721 /* Line 1806 of yacc.c */
9722 #line 3842 "parse.y"
9723  {
9724  /*%%%*/
9725  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
9726  /*%
9727  $$ = dispatch2(string_concat, $1, $2);
9728  %*/
9729  }
9730  break;
9731 
9732  case 456:
9733 
9734 /* Line 1806 of yacc.c */
9735 #line 3852 "parse.y"
9736  {
9737  /*%%%*/
9738  (yyval.node) = (yyvsp[(2) - (3)].node);
9739  /*%
9740  $$ = dispatch1(string_literal, $2);
9741  %*/
9742  }
9743  break;
9744 
9745  case 457:
9746 
9747 /* Line 1806 of yacc.c */
9748 #line 3862 "parse.y"
9749  {
9750  /*%%%*/
9751  NODE *node = (yyvsp[(2) - (3)].node);
9752  if (!node) {
9753  node = NEW_XSTR(STR_NEW0());
9754  }
9755  else {
9756  switch (nd_type(node)) {
9757  case NODE_STR:
9758  nd_set_type(node, NODE_XSTR);
9759  break;
9760  case NODE_DSTR:
9761  nd_set_type(node, NODE_DXSTR);
9762  break;
9763  default:
9764  node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
9765  break;
9766  }
9767  }
9768  (yyval.node) = node;
9769  /*%
9770  $$ = dispatch1(xstring_literal, $2);
9771  %*/
9772  }
9773  break;
9774 
9775  case 458:
9776 
9777 /* Line 1806 of yacc.c */
9778 #line 3889 "parse.y"
9779  {
9780  /*%%%*/
9781  int options = (yyvsp[(3) - (3)].num);
9782  NODE *node = (yyvsp[(2) - (3)].node);
9783  NODE *list, *prev;
9784  if (!node) {
9785  node = NEW_LIT(reg_compile(STR_NEW0(), options));
9786  }
9787  else switch (nd_type(node)) {
9788  case NODE_STR:
9789  {
9790  VALUE src = node->nd_lit;
9791  nd_set_type(node, NODE_LIT);
9792  node->nd_lit = reg_compile(src, options);
9793  }
9794  break;
9795  default:
9796  node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
9797  case NODE_DSTR:
9798  if (options & RE_OPTION_ONCE) {
9800  }
9801  else {
9802  nd_set_type(node, NODE_DREGX);
9803  }
9804  node->nd_cflag = options & RE_OPTION_MASK;
9805  if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
9806  for (list = (prev = node)->nd_next; list; list = list->nd_next) {
9807  if (nd_type(list->nd_head) == NODE_STR) {
9808  VALUE tail = list->nd_head->nd_lit;
9809  if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
9810  VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
9811  if (!literal_concat0(parser, lit, tail)) {
9812  node = 0;
9813  break;
9814  }
9815  rb_str_resize(tail, 0);
9816  prev->nd_next = list->nd_next;
9817  rb_gc_force_recycle((VALUE)list->nd_head);
9818  rb_gc_force_recycle((VALUE)list);
9819  list = prev;
9820  }
9821  else {
9822  prev = list;
9823  }
9824  }
9825  else {
9826  prev = 0;
9827  }
9828  }
9829  if (!node->nd_next) {
9830  VALUE src = node->nd_lit;
9831  nd_set_type(node, NODE_LIT);
9832  node->nd_lit = reg_compile(src, options);
9833  }
9834  break;
9835  }
9836  (yyval.node) = node;
9837  /*%
9838  $$ = dispatch2(regexp_literal, $2, $3);
9839  %*/
9840  }
9841  break;
9842 
9843  case 459:
9844 
9845 /* Line 1806 of yacc.c */
9846 #line 3954 "parse.y"
9847  {
9848  /*%%%*/
9849  (yyval.node) = NEW_ZARRAY();
9850  /*%
9851  $$ = dispatch0(words_new);
9852  $$ = dispatch1(array, $$);
9853  %*/
9854  }
9855  break;
9856 
9857  case 460:
9858 
9859 /* Line 1806 of yacc.c */
9860 #line 3963 "parse.y"
9861  {
9862  /*%%%*/
9863  (yyval.node) = (yyvsp[(2) - (3)].node);
9864  /*%
9865  $$ = dispatch1(array, $2);
9866  %*/
9867  }
9868  break;
9869 
9870  case 461:
9871 
9872 /* Line 1806 of yacc.c */
9873 #line 3973 "parse.y"
9874  {
9875  /*%%%*/
9876  (yyval.node) = 0;
9877  /*%
9878  $$ = dispatch0(words_new);
9879  %*/
9880  }
9881  break;
9882 
9883  case 462:
9884 
9885 /* Line 1806 of yacc.c */
9886 #line 3981 "parse.y"
9887  {
9888  /*%%%*/
9889  (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
9890  /*%
9891  $$ = dispatch2(words_add, $1, $2);
9892  %*/
9893  }
9894  break;
9895 
9896  case 464:
9897 
9898 /* Line 1806 of yacc.c */
9899 #line 3999 "parse.y"
9900  {
9901  /*%%%*/
9902  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
9903  /*%
9904  $$ = dispatch2(word_add, $1, $2);
9905  %*/
9906  }
9907  break;
9908 
9909  case 465:
9910 
9911 /* Line 1806 of yacc.c */
9912 #line 4009 "parse.y"
9913  {
9914  /*%%%*/
9915  (yyval.node) = NEW_ZARRAY();
9916  /*%
9917  $$ = dispatch0(symbols_new);
9918  $$ = dispatch1(array, $$);
9919  %*/
9920  }
9921  break;
9922 
9923  case 466:
9924 
9925 /* Line 1806 of yacc.c */
9926 #line 4018 "parse.y"
9927  {
9928  /*%%%*/
9929  (yyval.node) = (yyvsp[(2) - (3)].node);
9930  /*%
9931  $$ = dispatch1(array, $2);
9932  %*/
9933  }
9934  break;
9935 
9936  case 467:
9937 
9938 /* Line 1806 of yacc.c */
9939 #line 4028 "parse.y"
9940  {
9941  /*%%%*/
9942  (yyval.node) = 0;
9943  /*%
9944  $$ = dispatch0(symbols_new);
9945  %*/
9946  }
9947  break;
9948 
9949  case 468:
9950 
9951 /* Line 1806 of yacc.c */
9952 #line 4036 "parse.y"
9953  {
9954  /*%%%*/
9955  (yyvsp[(2) - (3)].node) = evstr2dstr((yyvsp[(2) - (3)].node));
9956  nd_set_type((yyvsp[(2) - (3)].node), NODE_DSYM);
9957  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
9958  /*%
9959  $$ = dispatch2(symbols_add, $1, $2);
9960  %*/
9961  }
9962  break;
9963 
9964  case 469:
9965 
9966 /* Line 1806 of yacc.c */
9967 #line 4048 "parse.y"
9968  {
9969  /*%%%*/
9970  (yyval.node) = NEW_ZARRAY();
9971  /*%
9972  $$ = dispatch0(qwords_new);
9973  $$ = dispatch1(array, $$);
9974  %*/
9975  }
9976  break;
9977 
9978  case 470:
9979 
9980 /* Line 1806 of yacc.c */
9981 #line 4057 "parse.y"
9982  {
9983  /*%%%*/
9984  (yyval.node) = (yyvsp[(2) - (3)].node);
9985  /*%
9986  $$ = dispatch1(array, $2);
9987  %*/
9988  }
9989  break;
9990 
9991  case 471:
9992 
9993 /* Line 1806 of yacc.c */
9994 #line 4067 "parse.y"
9995  {
9996  /*%%%*/
9997  (yyval.node) = NEW_ZARRAY();
9998  /*%
9999  $$ = dispatch0(qsymbols_new);
10000  $$ = dispatch1(array, $$);
10001  %*/
10002  }
10003  break;
10004 
10005  case 472:
10006 
10007 /* Line 1806 of yacc.c */
10008 #line 4076 "parse.y"
10009  {
10010  /*%%%*/
10011  (yyval.node) = (yyvsp[(2) - (3)].node);
10012  /*%
10013  $$ = dispatch1(array, $2);
10014  %*/
10015  }
10016  break;
10017 
10018  case 473:
10019 
10020 /* Line 1806 of yacc.c */
10021 #line 4086 "parse.y"
10022  {
10023  /*%%%*/
10024  (yyval.node) = 0;
10025  /*%
10026  $$ = dispatch0(qwords_new);
10027  %*/
10028  }
10029  break;
10030 
10031  case 474:
10032 
10033 /* Line 1806 of yacc.c */
10034 #line 4094 "parse.y"
10035  {
10036  /*%%%*/
10037  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
10038  /*%
10039  $$ = dispatch2(qwords_add, $1, $2);
10040  %*/
10041  }
10042  break;
10043 
10044  case 475:
10045 
10046 /* Line 1806 of yacc.c */
10047 #line 4104 "parse.y"
10048  {
10049  /*%%%*/
10050  (yyval.node) = 0;
10051  /*%
10052  $$ = dispatch0(qsymbols_new);
10053  %*/
10054  }
10055  break;
10056 
10057  case 476:
10058 
10059 /* Line 1806 of yacc.c */
10060 #line 4112 "parse.y"
10061  {
10062  /*%%%*/
10063  VALUE lit;
10064  lit = (yyvsp[(2) - (3)].node)->nd_lit;
10065  (yyvsp[(2) - (3)].node)->nd_lit = ID2SYM(rb_intern_str(lit));
10066  nd_set_type((yyvsp[(2) - (3)].node), NODE_LIT);
10067  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
10068  /*%
10069  $$ = dispatch2(qsymbols_add, $1, $2);
10070  %*/
10071  }
10072  break;
10073 
10074  case 477:
10075 
10076 /* Line 1806 of yacc.c */
10077 #line 4126 "parse.y"
10078  {
10079  /*%%%*/
10080  (yyval.node) = 0;
10081  /*%
10082  $$ = dispatch0(string_content);
10083  %*/
10084  }
10085  break;
10086 
10087  case 478:
10088 
10089 /* Line 1806 of yacc.c */
10090 #line 4134 "parse.y"
10091  {
10092  /*%%%*/
10093  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
10094  /*%
10095  $$ = dispatch2(string_add, $1, $2);
10096  %*/
10097  }
10098  break;
10099 
10100  case 479:
10101 
10102 /* Line 1806 of yacc.c */
10103 #line 4144 "parse.y"
10104  {
10105  /*%%%*/
10106  (yyval.node) = 0;
10107  /*%
10108  $$ = dispatch0(xstring_new);
10109  %*/
10110  }
10111  break;
10112 
10113  case 480:
10114 
10115 /* Line 1806 of yacc.c */
10116 #line 4152 "parse.y"
10117  {
10118  /*%%%*/
10119  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
10120  /*%
10121  $$ = dispatch2(xstring_add, $1, $2);
10122  %*/
10123  }
10124  break;
10125 
10126  case 481:
10127 
10128 /* Line 1806 of yacc.c */
10129 #line 4162 "parse.y"
10130  {
10131  /*%%%*/
10132  (yyval.node) = 0;
10133  /*%
10134  $$ = dispatch0(regexp_new);
10135  %*/
10136  }
10137  break;
10138 
10139  case 482:
10140 
10141 /* Line 1806 of yacc.c */
10142 #line 4170 "parse.y"
10143  {
10144  /*%%%*/
10145  NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
10146  if (!head) {
10147  (yyval.node) = tail;
10148  }
10149  else if (!tail) {
10150  (yyval.node) = head;
10151  }
10152  else {
10153  switch (nd_type(head)) {
10154  case NODE_STR:
10155  nd_set_type(head, NODE_DSTR);
10156  break;
10157  case NODE_DSTR:
10158  break;
10159  default:
10160  head = list_append(NEW_DSTR(Qnil), head);
10161  break;
10162  }
10163  (yyval.node) = list_append(head, tail);
10164  }
10165  /*%
10166  $$ = dispatch2(regexp_add, $1, $2);
10167  %*/
10168  }
10169  break;
10170 
10171  case 484:
10172 
10173 /* Line 1806 of yacc.c */
10174 #line 4200 "parse.y"
10175  {
10176  (yyval.node) = lex_strterm;
10177  lex_strterm = 0;
10178  lex_state = EXPR_BEG;
10179  }
10180  break;
10181 
10182  case 485:
10183 
10184 /* Line 1806 of yacc.c */
10185 #line 4206 "parse.y"
10186  {
10187  /*%%%*/
10188  lex_strterm = (yyvsp[(2) - (3)].node);
10189  (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
10190  /*%
10191  lex_strterm = $<node>2;
10192  $$ = dispatch1(string_dvar, $3);
10193  %*/
10194  }
10195  break;
10196 
10197  case 486:
10198 
10199 /* Line 1806 of yacc.c */
10200 #line 4216 "parse.y"
10201  {
10202  (yyvsp[(1) - (1)].val) = cond_stack;
10203  (yyval.val) = cmdarg_stack;
10204  cond_stack = 0;
10205  cmdarg_stack = 0;
10206  }
10207  break;
10208 
10209  case 487:
10210 
10211 /* Line 1806 of yacc.c */
10212 #line 4222 "parse.y"
10213  {
10214  (yyval.node) = lex_strterm;
10215  lex_strterm = 0;
10216  lex_state = EXPR_BEG;
10217  }
10218  break;
10219 
10220  case 488:
10221 
10222 /* Line 1806 of yacc.c */
10223 #line 4227 "parse.y"
10224  {
10225  (yyval.num) = brace_nest;
10226  brace_nest = 0;
10227  }
10228  break;
10229 
10230  case 489:
10231 
10232 /* Line 1806 of yacc.c */
10233 #line 4232 "parse.y"
10234  {
10235  cond_stack = (yyvsp[(1) - (6)].val);
10236  cmdarg_stack = (yyvsp[(2) - (6)].val);
10237  lex_strterm = (yyvsp[(3) - (6)].node);
10238  brace_nest = (yyvsp[(4) - (6)].num);
10239  /*%%%*/
10240  if ((yyvsp[(5) - (6)].node)) (yyvsp[(5) - (6)].node)->flags &= ~NODE_FL_NEWLINE;
10241  (yyval.node) = new_evstr((yyvsp[(5) - (6)].node));
10242  /*%
10243  $$ = dispatch1(string_embexpr, $5);
10244  %*/
10245  }
10246  break;
10247 
10248  case 490:
10249 
10250 /* Line 1806 of yacc.c */
10251 #line 4247 "parse.y"
10252  {
10253  /*%%%*/
10254  (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
10255  /*%
10256  $$ = dispatch1(var_ref, $1);
10257  %*/
10258  }
10259  break;
10260 
10261  case 491:
10262 
10263 /* Line 1806 of yacc.c */
10264 #line 4255 "parse.y"
10265  {
10266  /*%%%*/
10267  (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
10268  /*%
10269  $$ = dispatch1(var_ref, $1);
10270  %*/
10271  }
10272  break;
10273 
10274  case 492:
10275 
10276 /* Line 1806 of yacc.c */
10277 #line 4263 "parse.y"
10278  {
10279  /*%%%*/
10280  (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
10281  /*%
10282  $$ = dispatch1(var_ref, $1);
10283  %*/
10284  }
10285  break;
10286 
10287  case 494:
10288 
10289 /* Line 1806 of yacc.c */
10290 #line 4274 "parse.y"
10291  {
10292  lex_state = EXPR_END;
10293  /*%%%*/
10294  (yyval.id) = (yyvsp[(2) - (2)].id);
10295  /*%
10296  $$ = dispatch1(symbol, $2);
10297  %*/
10298  }
10299  break;
10300 
10301  case 499:
10302 
10303 /* Line 1806 of yacc.c */
10304 #line 4291 "parse.y"
10305  {
10306  lex_state = EXPR_END;
10307  /*%%%*/
10308  (yyval.node) = dsym_node((yyvsp[(2) - (3)].node));
10309  /*%
10310  $$ = dispatch1(dyna_symbol, $2);
10311  %*/
10312  }
10313  break;
10314 
10315  case 502:
10316 
10317 /* Line 1806 of yacc.c */
10318 #line 4304 "parse.y"
10319  {
10320  /*%%%*/
10321  (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
10322  /*%
10323  $$ = dispatch2(unary, ripper_intern("-@"), $2);
10324  %*/
10325  }
10326  break;
10327 
10328  case 503:
10329 
10330 /* Line 1806 of yacc.c */
10331 #line 4312 "parse.y"
10332  {
10333  /*%%%*/
10334  (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
10335  /*%
10336  $$ = dispatch2(unary, ripper_intern("-@"), $2);
10337  %*/
10338  }
10339  break;
10340 
10341  case 509:
10342 
10343 /* Line 1806 of yacc.c */
10344 #line 4328 "parse.y"
10345  {ifndef_ripper((yyval.id) = keyword_nil);}
10346  break;
10347 
10348  case 510:
10349 
10350 /* Line 1806 of yacc.c */
10351 #line 4329 "parse.y"
10352  {ifndef_ripper((yyval.id) = keyword_self);}
10353  break;
10354 
10355  case 511:
10356 
10357 /* Line 1806 of yacc.c */
10358 #line 4330 "parse.y"
10359  {ifndef_ripper((yyval.id) = keyword_true);}
10360  break;
10361 
10362  case 512:
10363 
10364 /* Line 1806 of yacc.c */
10365 #line 4331 "parse.y"
10366  {ifndef_ripper((yyval.id) = keyword_false);}
10367  break;
10368 
10369  case 513:
10370 
10371 /* Line 1806 of yacc.c */
10372 #line 4332 "parse.y"
10373  {ifndef_ripper((yyval.id) = keyword__FILE__);}
10374  break;
10375 
10376  case 514:
10377 
10378 /* Line 1806 of yacc.c */
10379 #line 4333 "parse.y"
10380  {ifndef_ripper((yyval.id) = keyword__LINE__);}
10381  break;
10382 
10383  case 515:
10384 
10385 /* Line 1806 of yacc.c */
10386 #line 4334 "parse.y"
10387  {ifndef_ripper((yyval.id) = keyword__ENCODING__);}
10388  break;
10389 
10390  case 516:
10391 
10392 /* Line 1806 of yacc.c */
10393 #line 4338 "parse.y"
10394  {
10395  /*%%%*/
10396  if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10397  /*%
10398  if (id_is_var(get_id($1))) {
10399  $$ = dispatch1(var_ref, $1);
10400  }
10401  else {
10402  $$ = dispatch1(vcall, $1);
10403  }
10404  %*/
10405  }
10406  break;
10407 
10408  case 517:
10409 
10410 /* Line 1806 of yacc.c */
10411 #line 4351 "parse.y"
10412  {
10413  /*%%%*/
10414  if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10415  /*%
10416  $$ = dispatch1(var_ref, $1);
10417  %*/
10418  }
10419  break;
10420 
10421  case 518:
10422 
10423 /* Line 1806 of yacc.c */
10424 #line 4361 "parse.y"
10425  {
10426  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10427  /*%%%*/
10428  /*%
10429  $$ = dispatch1(var_field, $$);
10430  %*/
10431  }
10432  break;
10433 
10434  case 519:
10435 
10436 /* Line 1806 of yacc.c */
10437 #line 4369 "parse.y"
10438  {
10439  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10440  /*%%%*/
10441  /*%
10442  $$ = dispatch1(var_field, $$);
10443  %*/
10444  }
10445  break;
10446 
10447  case 522:
10448 
10449 /* Line 1806 of yacc.c */
10450 #line 4383 "parse.y"
10451  {
10452  /*%%%*/
10453  (yyval.node) = 0;
10454  /*%
10455  $$ = Qnil;
10456  %*/
10457  }
10458  break;
10459 
10460  case 523:
10461 
10462 /* Line 1806 of yacc.c */
10463 #line 4391 "parse.y"
10464  {
10465  lex_state = EXPR_BEG;
10466  command_start = TRUE;
10467  }
10468  break;
10469 
10470  case 524:
10471 
10472 /* Line 1806 of yacc.c */
10473 #line 4396 "parse.y"
10474  {
10475  (yyval.node) = (yyvsp[(3) - (4)].node);
10476  }
10477  break;
10478 
10479  case 525:
10480 
10481 /* Line 1806 of yacc.c */
10482 #line 4400 "parse.y"
10483  {
10484  /*%%%*/
10485  yyerrok;
10486  (yyval.node) = 0;
10487  /*%
10488  yyerrok;
10489  $$ = Qnil;
10490  %*/
10491  }
10492  break;
10493 
10494  case 526:
10495 
10496 /* Line 1806 of yacc.c */
10497 #line 4412 "parse.y"
10498  {
10499  /*%%%*/
10500  (yyval.node) = (yyvsp[(2) - (3)].node);
10501  /*%
10502  $$ = dispatch1(paren, $2);
10503  %*/
10504  lex_state = EXPR_BEG;
10505  command_start = TRUE;
10506  }
10507  break;
10508 
10509  case 527:
10510 
10511 /* Line 1806 of yacc.c */
10512 #line 4422 "parse.y"
10513  {
10514  (yyval.node) = (yyvsp[(1) - (2)].node);
10515  lex_state = EXPR_BEG;
10516  command_start = TRUE;
10517  }
10518  break;
10519 
10520  case 528:
10521 
10522 /* Line 1806 of yacc.c */
10523 #line 4430 "parse.y"
10524  {
10525  (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id));
10526  }
10527  break;
10528 
10529  case 529:
10530 
10531 /* Line 1806 of yacc.c */
10532 #line 4434 "parse.y"
10533  {
10534  (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
10535  }
10536  break;
10537 
10538  case 530:
10539 
10540 /* Line 1806 of yacc.c */
10541 #line 4438 "parse.y"
10542  {
10543  (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
10544  }
10545  break;
10546 
10547  case 531:
10548 
10549 /* Line 1806 of yacc.c */
10550 #line 4442 "parse.y"
10551  {
10552  (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
10553  }
10554  break;
10555 
10556  case 532:
10557 
10558 /* Line 1806 of yacc.c */
10559 #line 4448 "parse.y"
10560  {
10561  (yyval.node) = (yyvsp[(2) - (2)].node);
10562  }
10563  break;
10564 
10565  case 533:
10566 
10567 /* Line 1806 of yacc.c */
10568 #line 4452 "parse.y"
10569  {
10570  (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
10571  }
10572  break;
10573 
10574  case 534:
10575 
10576 /* Line 1806 of yacc.c */
10577 #line 4458 "parse.y"
10578  {
10579  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node));
10580  }
10581  break;
10582 
10583  case 535:
10584 
10585 /* Line 1806 of yacc.c */
10586 #line 4462 "parse.y"
10587  {
10588  (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node));
10589  }
10590  break;
10591 
10592  case 536:
10593 
10594 /* Line 1806 of yacc.c */
10595 #line 4466 "parse.y"
10596  {
10597  (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node));
10598  }
10599  break;
10600 
10601  case 537:
10602 
10603 /* Line 1806 of yacc.c */
10604 #line 4470 "parse.y"
10605  {
10606  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10607  }
10608  break;
10609 
10610  case 538:
10611 
10612 /* Line 1806 of yacc.c */
10613 #line 4474 "parse.y"
10614  {
10615  (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
10616  }
10617  break;
10618 
10619  case 539:
10620 
10621 /* Line 1806 of yacc.c */
10622 #line 4478 "parse.y"
10623  {
10624  (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10625  }
10626  break;
10627 
10628  case 540:
10629 
10630 /* Line 1806 of yacc.c */
10631 #line 4482 "parse.y"
10632  {
10633  (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node));
10634  }
10635  break;
10636 
10637  case 541:
10638 
10639 /* Line 1806 of yacc.c */
10640 #line 4486 "parse.y"
10641  {
10642  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
10643  }
10644  break;
10645 
10646  case 542:
10647 
10648 /* Line 1806 of yacc.c */
10649 #line 4490 "parse.y"
10650  {
10651  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10652  }
10653  break;
10654 
10655  case 543:
10656 
10657 /* Line 1806 of yacc.c */
10658 #line 4494 "parse.y"
10659  {
10660  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node));
10661  }
10662  break;
10663 
10664  case 544:
10665 
10666 /* Line 1806 of yacc.c */
10667 #line 4498 "parse.y"
10668  {
10669  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
10670  }
10671  break;
10672 
10673  case 545:
10674 
10675 /* Line 1806 of yacc.c */
10676 #line 4502 "parse.y"
10677  {
10678  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node));
10679  }
10680  break;
10681 
10682  case 546:
10683 
10684 /* Line 1806 of yacc.c */
10685 #line 4506 "parse.y"
10686  {
10687  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
10688  }
10689  break;
10690 
10691  case 547:
10692 
10693 /* Line 1806 of yacc.c */
10694 #line 4510 "parse.y"
10695  {
10696  (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
10697  }
10698  break;
10699 
10700  case 548:
10701 
10702 /* Line 1806 of yacc.c */
10703 #line 4514 "parse.y"
10704  {
10705  (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
10706  (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyval.node));
10707  }
10708  break;
10709 
10710  case 549:
10711 
10712 /* Line 1806 of yacc.c */
10713 #line 4521 "parse.y"
10714  {
10715  /*%%%*/
10716  yyerror("formal argument cannot be a constant");
10717  (yyval.id) = 0;
10718  /*%
10719  $$ = dispatch1(param_error, $1);
10720  %*/
10721  }
10722  break;
10723 
10724  case 550:
10725 
10726 /* Line 1806 of yacc.c */
10727 #line 4530 "parse.y"
10728  {
10729  /*%%%*/
10730  yyerror("formal argument cannot be an instance variable");
10731  (yyval.id) = 0;
10732  /*%
10733  $$ = dispatch1(param_error, $1);
10734  %*/
10735  }
10736  break;
10737 
10738  case 551:
10739 
10740 /* Line 1806 of yacc.c */
10741 #line 4539 "parse.y"
10742  {
10743  /*%%%*/
10744  yyerror("formal argument cannot be a global variable");
10745  (yyval.id) = 0;
10746  /*%
10747  $$ = dispatch1(param_error, $1);
10748  %*/
10749  }
10750  break;
10751 
10752  case 552:
10753 
10754 /* Line 1806 of yacc.c */
10755 #line 4548 "parse.y"
10756  {
10757  /*%%%*/
10758  yyerror("formal argument cannot be a class variable");
10759  (yyval.id) = 0;
10760  /*%
10761  $$ = dispatch1(param_error, $1);
10762  %*/
10763  }
10764  break;
10765 
10766  case 554:
10767 
10768 /* Line 1806 of yacc.c */
10769 #line 4560 "parse.y"
10770  {
10771  formal_argument(get_id((yyvsp[(1) - (1)].id)));
10772  (yyval.id) = (yyvsp[(1) - (1)].id);
10773  }
10774  break;
10775 
10776  case 555:
10777 
10778 /* Line 1806 of yacc.c */
10779 #line 4567 "parse.y"
10780  {
10781  arg_var(get_id((yyvsp[(1) - (1)].id)));
10782  /*%%%*/
10783  (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
10784  /*%
10785  $$ = get_value($1);
10786  %*/
10787  }
10788  break;
10789 
10790  case 556:
10791 
10792 /* Line 1806 of yacc.c */
10793 #line 4576 "parse.y"
10794  {
10795  ID tid = internal_id();
10796  arg_var(tid);
10797  /*%%%*/
10798  if (dyna_in_block()) {
10799  (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
10800  }
10801  else {
10802  (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
10803  }
10804  (yyval.node) = NEW_ARGS_AUX(tid, 1);
10805  (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
10806  /*%
10807  $$ = dispatch1(mlhs_paren, $2);
10808  %*/
10809  }
10810  break;
10811 
10812  case 558:
10813 
10814 /* Line 1806 of yacc.c */
10815 #line 4602 "parse.y"
10816  {
10817  /*%%%*/
10818  (yyval.node) = (yyvsp[(1) - (3)].node);
10819  (yyval.node)->nd_plen++;
10820  (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
10821  rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
10822  /*%
10823  $$ = rb_ary_push($1, $3);
10824  %*/
10825  }
10826  break;
10827 
10828  case 559:
10829 
10830 /* Line 1806 of yacc.c */
10831 #line 4615 "parse.y"
10832  {
10833  arg_var(formal_argument(get_id((yyvsp[(1) - (2)].id))));
10834  (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
10835  /*%%%*/
10836  (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10837  /*%
10838  $$ = rb_assoc_new($$, $2);
10839  %*/
10840  }
10841  break;
10842 
10843  case 560:
10844 
10845 /* Line 1806 of yacc.c */
10846 #line 4627 "parse.y"
10847  {
10848  arg_var(formal_argument(get_id((yyvsp[(1) - (2)].id))));
10849  (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
10850  /*%%%*/
10851  (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10852  /*%
10853  $$ = rb_assoc_new($$, $2);
10854  %*/
10855  }
10856  break;
10857 
10858  case 561:
10859 
10860 /* Line 1806 of yacc.c */
10861 #line 4639 "parse.y"
10862  {
10863  /*%%%*/
10864  (yyval.node) = (yyvsp[(1) - (1)].node);
10865  /*%
10866  $$ = rb_ary_new3(1, $1);
10867  %*/
10868  }
10869  break;
10870 
10871  case 562:
10872 
10873 /* Line 1806 of yacc.c */
10874 #line 4647 "parse.y"
10875  {
10876  /*%%%*/
10877  NODE *kws = (yyvsp[(1) - (3)].node);
10878 
10879  while (kws->nd_next) {
10880  kws = kws->nd_next;
10881  }
10882  kws->nd_next = (yyvsp[(3) - (3)].node);
10883  (yyval.node) = (yyvsp[(1) - (3)].node);
10884  /*%
10885  $$ = rb_ary_push($1, $3);
10886  %*/
10887  }
10888  break;
10889 
10890  case 563:
10891 
10892 /* Line 1806 of yacc.c */
10893 #line 4664 "parse.y"
10894  {
10895  /*%%%*/
10896  (yyval.node) = (yyvsp[(1) - (1)].node);
10897  /*%
10898  $$ = rb_ary_new3(1, $1);
10899  %*/
10900  }
10901  break;
10902 
10903  case 564:
10904 
10905 /* Line 1806 of yacc.c */
10906 #line 4672 "parse.y"
10907  {
10908  /*%%%*/
10909  NODE *kws = (yyvsp[(1) - (3)].node);
10910 
10911  while (kws->nd_next) {
10912  kws = kws->nd_next;
10913  }
10914  kws->nd_next = (yyvsp[(3) - (3)].node);
10915  (yyval.node) = (yyvsp[(1) - (3)].node);
10916  /*%
10917  $$ = rb_ary_push($1, $3);
10918  %*/
10919  }
10920  break;
10921 
10922  case 567:
10923 
10924 /* Line 1806 of yacc.c */
10925 #line 4692 "parse.y"
10926  {
10927  shadowing_lvar(get_id((yyvsp[(2) - (2)].id)));
10928  (yyval.id) = (yyvsp[(2) - (2)].id);
10929  }
10930  break;
10931 
10932  case 568:
10933 
10934 /* Line 1806 of yacc.c */
10935 #line 4697 "parse.y"
10936  {
10937  (yyval.id) = internal_id();
10938  }
10939  break;
10940 
10941  case 569:
10942 
10943 /* Line 1806 of yacc.c */
10944 #line 4703 "parse.y"
10945  {
10946  arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10947  (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10948  /*%%%*/
10949  (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10950  /*%
10951  $$ = rb_assoc_new($$, $3);
10952  %*/
10953  }
10954  break;
10955 
10956  case 570:
10957 
10958 /* Line 1806 of yacc.c */
10959 #line 4715 "parse.y"
10960  {
10961  arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10962  (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10963  /*%%%*/
10964  (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10965  /*%
10966  $$ = rb_assoc_new($$, $3);
10967  %*/
10968  }
10969  break;
10970 
10971  case 571:
10972 
10973 /* Line 1806 of yacc.c */
10974 #line 4727 "parse.y"
10975  {
10976  /*%%%*/
10977  (yyval.node) = (yyvsp[(1) - (1)].node);
10978  /*%
10979  $$ = rb_ary_new3(1, $1);
10980  %*/
10981  }
10982  break;
10983 
10984  case 572:
10985 
10986 /* Line 1806 of yacc.c */
10987 #line 4735 "parse.y"
10988  {
10989  /*%%%*/
10990  NODE *opts = (yyvsp[(1) - (3)].node);
10991 
10992  while (opts->nd_next) {
10993  opts = opts->nd_next;
10994  }
10995  opts->nd_next = (yyvsp[(3) - (3)].node);
10996  (yyval.node) = (yyvsp[(1) - (3)].node);
10997  /*%
10998  $$ = rb_ary_push($1, $3);
10999  %*/
11000  }
11001  break;
11002 
11003  case 573:
11004 
11005 /* Line 1806 of yacc.c */
11006 #line 4751 "parse.y"
11007  {
11008  /*%%%*/
11009  (yyval.node) = (yyvsp[(1) - (1)].node);
11010  /*%
11011  $$ = rb_ary_new3(1, $1);
11012  %*/
11013  }
11014  break;
11015 
11016  case 574:
11017 
11018 /* Line 1806 of yacc.c */
11019 #line 4759 "parse.y"
11020  {
11021  /*%%%*/
11022  NODE *opts = (yyvsp[(1) - (3)].node);
11023 
11024  while (opts->nd_next) {
11025  opts = opts->nd_next;
11026  }
11027  opts->nd_next = (yyvsp[(3) - (3)].node);
11028  (yyval.node) = (yyvsp[(1) - (3)].node);
11029  /*%
11030  $$ = rb_ary_push($1, $3);
11031  %*/
11032  }
11033  break;
11034 
11035  case 577:
11036 
11037 /* Line 1806 of yacc.c */
11038 #line 4779 "parse.y"
11039  {
11040  /*%%%*/
11041  if (!is_local_id((yyvsp[(2) - (2)].id)))
11042  yyerror("rest argument must be local variable");
11043  /*% %*/
11044  arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
11045  /*%%%*/
11046  (yyval.id) = (yyvsp[(2) - (2)].id);
11047  /*%
11048  $$ = dispatch1(rest_param, $2);
11049  %*/
11050  }
11051  break;
11052 
11053  case 578:
11054 
11055 /* Line 1806 of yacc.c */
11056 #line 4792 "parse.y"
11057  {
11058  /*%%%*/
11059  (yyval.id) = internal_id();
11060  arg_var((yyval.id));
11061  /*%
11062  $$ = dispatch1(rest_param, Qnil);
11063  %*/
11064  }
11065  break;
11066 
11067  case 581:
11068 
11069 /* Line 1806 of yacc.c */
11070 #line 4807 "parse.y"
11071  {
11072  /*%%%*/
11073  if (!is_local_id((yyvsp[(2) - (2)].id)))
11074  yyerror("block argument must be local variable");
11075  else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
11076  yyerror("duplicated block argument name");
11077  /*% %*/
11078  arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
11079  /*%%%*/
11080  (yyval.id) = (yyvsp[(2) - (2)].id);
11081  /*%
11082  $$ = dispatch1(blockarg, $2);
11083  %*/
11084  }
11085  break;
11086 
11087  case 582:
11088 
11089 /* Line 1806 of yacc.c */
11090 #line 4824 "parse.y"
11091  {
11092  (yyval.id) = (yyvsp[(2) - (2)].id);
11093  }
11094  break;
11095 
11096  case 583:
11097 
11098 /* Line 1806 of yacc.c */
11099 #line 4828 "parse.y"
11100  {
11101  /*%%%*/
11102  (yyval.id) = 0;
11103  /*%
11104  $$ = Qundef;
11105  %*/
11106  }
11107  break;
11108 
11109  case 584:
11110 
11111 /* Line 1806 of yacc.c */
11112 #line 4838 "parse.y"
11113  {
11114  /*%%%*/
11115  value_expr((yyvsp[(1) - (1)].node));
11116  (yyval.node) = (yyvsp[(1) - (1)].node);
11117  if (!(yyval.node)) (yyval.node) = NEW_NIL();
11118  /*%
11119  $$ = $1;
11120  %*/
11121  }
11122  break;
11123 
11124  case 585:
11125 
11126 /* Line 1806 of yacc.c */
11127 #line 4847 "parse.y"
11128  {lex_state = EXPR_BEG;}
11129  break;
11130 
11131  case 586:
11132 
11133 /* Line 1806 of yacc.c */
11134 #line 4848 "parse.y"
11135  {
11136  /*%%%*/
11137  if ((yyvsp[(3) - (4)].node) == 0) {
11138  yyerror("can't define singleton method for ().");
11139  }
11140  else {
11141  switch (nd_type((yyvsp[(3) - (4)].node))) {
11142  case NODE_STR:
11143  case NODE_DSTR:
11144  case NODE_XSTR:
11145  case NODE_DXSTR:
11146  case NODE_DREGX:
11147  case NODE_LIT:
11148  case NODE_ARRAY:
11149  case NODE_ZARRAY:
11150  yyerror("can't define singleton method for literals");
11151  default:
11152  value_expr((yyvsp[(3) - (4)].node));
11153  break;
11154  }
11155  }
11156  (yyval.node) = (yyvsp[(3) - (4)].node);
11157  /*%
11158  $$ = dispatch1(paren, $3);
11159  %*/
11160  }
11161  break;
11162 
11163  case 588:
11164 
11165 /* Line 1806 of yacc.c */
11166 #line 4878 "parse.y"
11167  {
11168  /*%%%*/
11169  (yyval.node) = (yyvsp[(1) - (2)].node);
11170  /*%
11171  $$ = dispatch1(assoclist_from_args, $1);
11172  %*/
11173  }
11174  break;
11175 
11176  case 590:
11177 
11178 /* Line 1806 of yacc.c */
11179 #line 4895 "parse.y"
11180  {
11181  /*%%%*/
11182  (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
11183  /*%
11184  $$ = rb_ary_push($1, $3);
11185  %*/
11186  }
11187  break;
11188 
11189  case 591:
11190 
11191 /* Line 1806 of yacc.c */
11192 #line 4905 "parse.y"
11193  {
11194  /*%%%*/
11195  (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
11196  /*%
11197  $$ = dispatch2(assoc_new, $1, $3);
11198  %*/
11199  }
11200  break;
11201 
11202  case 592:
11203 
11204 /* Line 1806 of yacc.c */
11205 #line 4913 "parse.y"
11206  {
11207  /*%%%*/
11208  (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
11209  /*%
11210  $$ = dispatch2(assoc_new, $1, $2);
11211  %*/
11212  }
11213  break;
11214 
11215  case 593:
11216 
11217 /* Line 1806 of yacc.c */
11218 #line 4921 "parse.y"
11219  {
11220  /*%%%*/
11221  (yyval.node) = list_append(NEW_LIST(0), (yyvsp[(2) - (2)].node));
11222  /*%
11223  $$ = dispatch1(assoc_splat, $2);
11224  %*/
11225  }
11226  break;
11227 
11228  case 615:
11229 
11230 /* Line 1806 of yacc.c */
11231 #line 4979 "parse.y"
11232  {yyerrok;}
11233  break;
11234 
11235  case 618:
11236 
11237 /* Line 1806 of yacc.c */
11238 #line 4984 "parse.y"
11239  {yyerrok;}
11240  break;
11241 
11242  case 619:
11243 
11244 /* Line 1806 of yacc.c */
11245 #line 4988 "parse.y"
11246  {
11247  /*%%%*/
11248  (yyval.node) = 0;
11249  /*%
11250  $$ = Qundef;
11251  %*/
11252  }
11253  break;
11254 
11255 
11256 
11257 /* Line 1806 of yacc.c */
11258 #line 11257 "parse.c"
11259  default: break;
11260  }
11261  /* User semantic actions sometimes alter yychar, and that requires
11262  that yytoken be updated with the new translation. We take the
11263  approach of translating immediately before every use of yytoken.
11264  One alternative is translating here after every semantic action,
11265  but that translation would be missed if the semantic action invokes
11266  YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
11267  if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
11268  incorrect destructor might then be invoked immediately. In the
11269  case of YYERROR or YYBACKUP, subsequent parser actions might lead
11270  to an incorrect destructor call or verbose syntax error message
11271  before the lookahead is translated. */
11272  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
11273 
11274  YYPOPSTACK (yylen);
11275  yylen = 0;
11276  YY_STACK_PRINT (yyss, yyssp);
11277 
11278  *++yyvsp = yyval;
11279 
11280  /* Now `shift' the result of the reduction. Determine what state
11281  that goes to, based on the state we popped back to and the rule
11282  number reduced by. */
11283 
11284  yyn = yyr1[yyn];
11285 
11286  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
11287  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
11288  yystate = yytable[yystate];
11289  else
11290  yystate = yydefgoto[yyn - YYNTOKENS];
11291 
11292  goto yynewstate;
11293 
11294 
11295 /*------------------------------------.
11296 | yyerrlab -- here on detecting error |
11297 `------------------------------------*/
11298 yyerrlab:
11299  /* Make sure we have latest lookahead translation. See comments at
11300  user semantic actions for why this is necessary. */
11301  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
11302 
11303  /* If not already recovering from an error, report this error. */
11304  if (!yyerrstatus)
11305  {
11306  ++yynerrs;
11307 #if ! YYERROR_VERBOSE
11308  parser_yyerror (parser, YY_("syntax error"));
11309 #else
11310 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
11311  yyssp, yytoken)
11312  {
11313  char const *yymsgp = YY_("syntax error");
11314  int yysyntax_error_status;
11315  yysyntax_error_status = YYSYNTAX_ERROR;
11316  if (yysyntax_error_status == 0)
11317  yymsgp = yymsg;
11318  else if (yysyntax_error_status == 1)
11319  {
11320  if (yymsg != yymsgbuf)
11321  YYSTACK_FREE (yymsg);
11322  yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
11323  if (!yymsg)
11324  {
11325  yymsg = yymsgbuf;
11326  yymsg_alloc = sizeof yymsgbuf;
11327  yysyntax_error_status = 2;
11328  }
11329  else
11330  {
11331  yysyntax_error_status = YYSYNTAX_ERROR;
11332  yymsgp = yymsg;
11333  }
11334  }
11335  parser_yyerror (parser, yymsgp);
11336  if (yysyntax_error_status == 2)
11337  goto yyexhaustedlab;
11338  }
11339 # undef YYSYNTAX_ERROR
11340 #endif
11341  }
11342 
11343 
11344 
11345  if (yyerrstatus == 3)
11346  {
11347  /* If just tried and failed to reuse lookahead token after an
11348  error, discard it. */
11349 
11350  if (yychar <= YYEOF)
11351  {
11352  /* Return failure if at end of input. */
11353  if (yychar == YYEOF)
11354  YYABORT;
11355  }
11356  else
11357  {
11358  yydestruct ("Error: discarding",
11359  yytoken, &yylval, parser);
11360  yychar = YYEMPTY;
11361  }
11362  }
11363 
11364  /* Else will try to reuse lookahead token after shifting the error
11365  token. */
11366  goto yyerrlab1;
11367 
11368 
11369 /*---------------------------------------------------.
11370 | yyerrorlab -- error raised explicitly by YYERROR. |
11371 `---------------------------------------------------*/
11372 yyerrorlab:
11373 
11374  /* Pacify compilers like GCC when the user code never invokes
11375  YYERROR and the label yyerrorlab therefore never appears in user
11376  code. */
11377  if (/*CONSTCOND*/ 0)
11378  goto yyerrorlab;
11379 
11380  /* Do not reclaim the symbols of the rule which action triggered
11381  this YYERROR. */
11382  YYPOPSTACK (yylen);
11383  yylen = 0;
11384  YY_STACK_PRINT (yyss, yyssp);
11385  yystate = *yyssp;
11386  goto yyerrlab1;
11387 
11388 
11389 /*-------------------------------------------------------------.
11390 | yyerrlab1 -- common code for both syntax error and YYERROR. |
11391 `-------------------------------------------------------------*/
11392 yyerrlab1:
11393  yyerrstatus = 3; /* Each real token shifted decrements this. */
11394 
11395  for (;;)
11396  {
11397  yyn = yypact[yystate];
11398  if (!yypact_value_is_default (yyn))
11399  {
11400  yyn += YYTERROR;
11401  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
11402  {
11403  yyn = yytable[yyn];
11404  if (0 < yyn)
11405  break;
11406  }
11407  }
11408 
11409  /* Pop the current state because it cannot handle the error token. */
11410  if (yyssp == yyss)
11411  YYABORT;
11412 
11413 
11414  yydestruct ("Error: popping",
11415  yystos[yystate], yyvsp, parser);
11416  YYPOPSTACK (1);
11417  yystate = *yyssp;
11418  YY_STACK_PRINT (yyss, yyssp);
11419  }
11420 
11421  *++yyvsp = yylval;
11422 
11423 
11424  /* Shift the error token. */
11425  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
11426 
11427  yystate = yyn;
11428  goto yynewstate;
11429 
11430 
11431 /*-------------------------------------.
11432 | yyacceptlab -- YYACCEPT comes here. |
11433 `-------------------------------------*/
11434 yyacceptlab:
11435  yyresult = 0;
11436  goto yyreturn;
11437 
11438 /*-----------------------------------.
11439 | yyabortlab -- YYABORT comes here. |
11440 `-----------------------------------*/
11441 yyabortlab:
11442  yyresult = 1;
11443  goto yyreturn;
11444 
11445 #if !defined(yyoverflow) || YYERROR_VERBOSE
11446 /*-------------------------------------------------.
11447 | yyexhaustedlab -- memory exhaustion comes here. |
11448 `-------------------------------------------------*/
11449 yyexhaustedlab:
11450  parser_yyerror (parser, YY_("memory exhausted"));
11451  yyresult = 2;
11452  /* Fall through. */
11453 #endif
11454 
11455 yyreturn:
11456  if (yychar != YYEMPTY)
11457  {
11458  /* Make sure we have latest lookahead translation. See comments at
11459  user semantic actions for why this is necessary. */
11460  yytoken = YYTRANSLATE (yychar);
11461  yydestruct ("Cleanup: discarding lookahead",
11462  yytoken, &yylval, parser);
11463  }
11464  /* Do not reclaim the symbols of the rule which action triggered
11465  this YYABORT or YYACCEPT. */
11466  YYPOPSTACK (yylen);
11467  YY_STACK_PRINT (yyss, yyssp);
11468  while (yyssp != yyss)
11469  {
11470  yydestruct ("Cleanup: popping",
11471  yystos[*yyssp], yyvsp, parser);
11472  YYPOPSTACK (1);
11473  }
11474 #ifndef yyoverflow
11475  if (yyss != yyssa)
11476  YYSTACK_FREE (yyss);
11477 #endif
11478 #if YYERROR_VERBOSE
11479  if (yymsg != yymsgbuf)
11480  YYSTACK_FREE (yymsg);
11481 #endif
11482  /* Make sure YYID is used. */
11483  return YYID (yyresult);
11484 }
11485 
11486 
11487 
11488 /* Line 2067 of yacc.c */
11489 #line 4996 "parse.y"
11490 
11491 # undef parser
11492 # undef yylex
11493 # undef yylval
11494 # define yylval (*((YYSTYPE*)(parser->parser_yylval)))
11495 
11496 static int parser_regx_options(struct parser_params*);
11497 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
11498 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
11499 static int parser_parse_string(struct parser_params*,NODE*);
11500 static int parser_here_document(struct parser_params*,NODE*);
11501 
11502 
11503 # define nextc() parser_nextc(parser)
11504 # define pushback(c) parser_pushback(parser, (c))
11505 # define newtok() parser_newtok(parser)
11506 # define tokspace(n) parser_tokspace(parser, (n))
11507 # define tokadd(c) parser_tokadd(parser, (c))
11508 # define tok_hex(numlen) parser_tok_hex(parser, (numlen))
11509 # define read_escape(flags,e) parser_read_escape(parser, (flags), (e))
11510 # define tokadd_escape(e) parser_tokadd_escape(parser, (e))
11511 # define regx_options() parser_regx_options(parser)
11512 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,(f),(t),(p),(n),(e))
11513 # define parse_string(n) parser_parse_string(parser,(n))
11514 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, (c), (enc))
11515 # define here_document(n) parser_here_document(parser,(n))
11516 # define heredoc_identifier() parser_heredoc_identifier(parser)
11517 # define heredoc_restore(n) parser_heredoc_restore(parser,(n))
11518 # define whole_match_p(e,l,i) parser_whole_match_p(parser,(e),(l),(i))
11519 
11520 #ifndef RIPPER
11521 # define set_yylval_str(x) (yylval.node = NEW_STR(x))
11522 # define set_yylval_num(x) (yylval.num = (x))
11523 # define set_yylval_id(x) (yylval.id = (x))
11524 # define set_yylval_name(x) (yylval.id = (x))
11525 # define set_yylval_literal(x) (yylval.node = NEW_LIT(x))
11526 # define set_yylval_node(x) (yylval.node = (x))
11527 # define yylval_id() (yylval.id)
11528 #else
11529 static inline VALUE
11530 ripper_yylval_id(ID x)
11531 {
11532  return (VALUE)NEW_LASGN(x, ID2SYM(x));
11533 }
11534 # define set_yylval_str(x) (void)(x)
11535 # define set_yylval_num(x) (void)(x)
11536 # define set_yylval_id(x) (void)(x)
11537 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
11538 # define set_yylval_literal(x) (void)(x)
11539 # define set_yylval_node(x) (void)(x)
11540 # define yylval_id() yylval.id
11541 #endif
11542 
11543 #ifndef RIPPER
11544 #define ripper_flush(p) (void)(p)
11545 #else
11546 #define ripper_flush(p) ((p)->tokp = (p)->parser_lex_p)
11547 
11548 #define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
11549 
11550 static int
11551 ripper_has_scan_event(struct parser_params *parser)
11552 {
11553 
11554  if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
11555  return lex_p > parser->tokp;
11556 }
11557 
11558 static VALUE
11559 ripper_scan_event_val(struct parser_params *parser, int t)
11560 {
11561  VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
11562  VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
11563  ripper_flush(parser);
11564  return rval;
11565 }
11566 
11567 static void
11568 ripper_dispatch_scan_event(struct parser_params *parser, int t)
11569 {
11570  if (!ripper_has_scan_event(parser)) return;
11571  yylval_rval = ripper_scan_event_val(parser, t);
11572 }
11573 
11574 static void
11575 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
11576 {
11577  if (!ripper_has_scan_event(parser)) return;
11578  (void)ripper_scan_event_val(parser, t);
11579 }
11580 
11581 static void
11582 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
11583 {
11584  int saved_line = ruby_sourceline;
11585  const char *saved_tokp = parser->tokp;
11586 
11587  ruby_sourceline = parser->delayed_line;
11588  parser->tokp = lex_pbeg + parser->delayed_col;
11589  yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
11590  parser->delayed = Qnil;
11591  ruby_sourceline = saved_line;
11592  parser->tokp = saved_tokp;
11593 }
11594 #endif /* RIPPER */
11595 
11596 #include "ruby/regex.h"
11597 #include "ruby/util.h"
11598 
11599 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
11600  since ours (we hope) works properly with all combinations of
11601  machines, compilers, `char' and `unsigned char' argument types.
11602  (Per Bothner suggested the basic approach.) */
11603 #undef SIGN_EXTEND_CHAR
11604 #if __STDC__
11605 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
11606 #else /* not __STDC__ */
11607 /* As in Harbison and Steele. */
11608 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
11609 #endif
11610 
11611 #define parser_encoding_name() (current_enc->name)
11612 #define parser_mbclen() mbclen((lex_p-1),lex_pend,current_enc)
11613 #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,current_enc)
11614 #define is_identchar(p,e,enc) (rb_enc_isalnum(*(p),(enc)) || (*(p)) == '_' || !ISASCII(*(p)))
11615 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,current_enc))
11616 
11617 #define parser_isascii() ISASCII(*(lex_p-1))
11618 
11619 #ifndef RIPPER
11620 static int
11621 token_info_get_column(struct parser_params *parser, const char *token)
11622 {
11623  int column = 1;
11624  const char *p, *pend = lex_p - strlen(token);
11625  for (p = lex_pbeg; p < pend; p++) {
11626  if (*p == '\t') {
11627  column = (((column - 1) / 8) + 1) * 8;
11628  }
11629  column++;
11630  }
11631  return column;
11632 }
11633 
11634 static int
11635 token_info_has_nonspaces(struct parser_params *parser, const char *token)
11636 {
11637  const char *p, *pend = lex_p - strlen(token);
11638  for (p = lex_pbeg; p < pend; p++) {
11639  if (*p != ' ' && *p != '\t') {
11640  return 1;
11641  }
11642  }
11643  return 0;
11644 }
11645 
11646 #undef token_info_push
11647 static void
11648 token_info_push(struct parser_params *parser, const char *token)
11649 {
11650  token_info *ptinfo;
11651 
11652  if (!parser->parser_token_info_enabled) return;
11653  ptinfo = ALLOC(token_info);
11654  ptinfo->token = token;
11655  ptinfo->linenum = ruby_sourceline;
11656  ptinfo->column = token_info_get_column(parser, token);
11657  ptinfo->nonspc = token_info_has_nonspaces(parser, token);
11658  ptinfo->next = parser->parser_token_info;
11659 
11660  parser->parser_token_info = ptinfo;
11661 }
11662 
11663 #undef token_info_pop
11664 static void
11665 token_info_pop(struct parser_params *parser, const char *token)
11666 {
11667  int linenum;
11668  token_info *ptinfo = parser->parser_token_info;
11669 
11670  if (!ptinfo) return;
11671  parser->parser_token_info = ptinfo->next;
11672  if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */
11673  goto finish;
11674  }
11675  linenum = ruby_sourceline;
11676  if (linenum == ptinfo->linenum) { /* SKIP */
11677  goto finish;
11678  }
11679  if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */
11680  goto finish;
11681  }
11682  if (parser->parser_token_info_enabled) {
11684  "mismatched indentations at '%s' with '%s' at %d",
11685  token, ptinfo->token, ptinfo->linenum);
11686  }
11687 
11688  finish:
11689  xfree(ptinfo);
11690 }
11691 #endif /* RIPPER */
11692 
11693 static int
11694 parser_yyerror(struct parser_params *parser, const char *msg)
11695 {
11696 #ifndef RIPPER
11697  const int max_line_margin = 30;
11698  const char *p, *pe;
11699  char *buf;
11700  long len;
11701  int i;
11702 
11703  compile_error(PARSER_ARG "%s", msg);
11704  p = lex_p;
11705  while (lex_pbeg <= p) {
11706  if (*p == '\n') break;
11707  p--;
11708  }
11709  p++;
11710 
11711  pe = lex_p;
11712  while (pe < lex_pend) {
11713  if (*pe == '\n') break;
11714  pe++;
11715  }
11716 
11717  len = pe - p;
11718  if (len > 4) {
11719  char *p2;
11720  const char *pre = "", *post = "";
11721 
11722  if (len > max_line_margin * 2 + 10) {
11723  if (lex_p - p > max_line_margin) {
11724  p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
11725  pre = "...";
11726  }
11727  if (pe - lex_p > max_line_margin) {
11728  pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
11729  post = "...";
11730  }
11731  len = pe - p;
11732  }
11733  buf = ALLOCA_N(char, len+2);
11734  MEMCPY(buf, p, char, len);
11735  buf[len] = '\0';
11736  rb_compile_error_append("%s%s%s", pre, buf, post);
11737 
11738  i = (int)(lex_p - p);
11739  p2 = buf; pe = buf + len;
11740 
11741  while (p2 < pe) {
11742  if (*p2 != '\t') *p2 = ' ';
11743  p2++;
11744  }
11745  buf[i] = '^';
11746  buf[i+1] = '\0';
11747  rb_compile_error_append("%s%s", pre, buf);
11748  }
11749 #else
11750  dispatch1(parse_error, STR_NEW2(msg));
11751 #endif /* !RIPPER */
11752  return 0;
11753 }
11754 
11755 static void parser_prepare(struct parser_params *parser);
11756 
11757 #ifndef RIPPER
11758 static VALUE
11759 debug_lines(const char *f)
11760 {
11761  ID script_lines;
11762  CONST_ID(script_lines, "SCRIPT_LINES__");
11763  if (rb_const_defined_at(rb_cObject, script_lines)) {
11764  VALUE hash = rb_const_get_at(rb_cObject, script_lines);
11765  if (RB_TYPE_P(hash, T_HASH)) {
11767  VALUE lines = rb_ary_new();
11768  rb_hash_aset(hash, fname, lines);
11769  return lines;
11770  }
11771  }
11772  return 0;
11773 }
11774 
11775 static VALUE
11776 coverage(const char *f, int n)
11777 {
11778  VALUE coverages = rb_get_coverages();
11779  if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
11781  VALUE lines = rb_ary_new2(n);
11782  int i;
11783  RBASIC(lines)->klass = 0;
11784  for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil;
11785  RARRAY(lines)->as.heap.len = n;
11786  rb_hash_aset(coverages, fname, lines);
11787  return lines;
11788  }
11789  return 0;
11790 }
11791 
11792 static int
11794 {
11795  return strcmp(ruby_sourcefile, "-e") == 0;
11796 }
11797 
11798 static VALUE
11800 {
11801  int n;
11802  NODE *tree;
11803  struct parser_params *parser = (struct parser_params *)arg;
11804 
11805  if (!compile_for_eval && rb_safe_level() == 0) {
11807  if (ruby_debug_lines && ruby_sourceline > 0) {
11808  VALUE str = STR_NEW0();
11809  n = ruby_sourceline;
11810  do {
11812  } while (--n);
11813  }
11814 
11815  if (!e_option_supplied(parser)) {
11817  }
11818  }
11819 
11820  parser_prepare(parser);
11821  deferred_nodes = 0;
11822 #ifndef RIPPER
11824 #endif
11825 #ifndef RIPPER
11828  parser->parser_ruby_sourceline);
11829  }
11830 #endif
11831  n = yyparse((void*)parser);
11832 #ifndef RIPPER
11835  parser->parser_ruby_sourceline);
11836  }
11837 #endif
11838  ruby_debug_lines = 0;
11839  ruby_coverage = 0;
11840  compile_for_eval = 0;
11841 
11842  lex_strterm = 0;
11843  lex_p = lex_pbeg = lex_pend = 0;
11844  lex_lastline = lex_nextline = 0;
11845  if (parser->nerr) {
11846  return 0;
11847  }
11848  tree = ruby_eval_tree;
11849  if (!tree) {
11850  tree = NEW_NIL();
11851  }
11852  else if (ruby_eval_tree_begin) {
11853  tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
11854  }
11855  return (VALUE)tree;
11856 }
11857 
11858 static NODE*
11859 yycompile(struct parser_params *parser, const char *f, int line)
11860 {
11862  ruby_sourceline = line - 1;
11863  return (NODE *)rb_suppress_tracing(yycompile0, (VALUE)parser);
11864 }
11865 #endif /* !RIPPER */
11866 
11867 static rb_encoding *
11869 {
11870  rb_encoding *enc = rb_enc_get(s);
11871  if (!rb_enc_asciicompat(enc)) {
11872  rb_raise(rb_eArgError, "invalid source encoding");
11873  }
11874  return enc;
11875 }
11876 
11877 static VALUE
11878 lex_get_str(struct parser_params *parser, VALUE s)
11879 {
11880  char *beg, *end, *pend;
11882 
11883  beg = RSTRING_PTR(s);
11884  if (lex_gets_ptr) {
11885  if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
11886  beg += lex_gets_ptr;
11887  }
11888  pend = RSTRING_PTR(s) + RSTRING_LEN(s);
11889  end = beg;
11890  while (end < pend) {
11891  if (*end++ == '\n') break;
11892  }
11893  lex_gets_ptr = end - RSTRING_PTR(s);
11894  return rb_enc_str_new(beg, end - beg, enc);
11895 }
11896 
11897 static VALUE
11899 {
11900  VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
11901  if (NIL_P(line)) return line;
11903 #ifndef RIPPER
11904  if (ruby_debug_lines) {
11907  }
11908  if (ruby_coverage) {
11910  }
11911 #endif
11912  return line;
11913 }
11914 
11915 #ifdef RIPPER
11917 #else
11919 
11920 static NODE*
11921 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11922 {
11923  struct parser_params *parser;
11924  NODE *node;
11925 
11926  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11928  lex_gets_ptr = 0;
11929  lex_input = s;
11930  lex_pbeg = lex_p = lex_pend = 0;
11932 
11933  node = yycompile(parser, f, line);
11934  RB_GC_GUARD(vparser); /* prohibit tail call optimization */
11935 
11936  return node;
11937 }
11938 
11939 NODE*
11940 rb_compile_string(const char *f, VALUE s, int line)
11941 {
11943  return parser_compile_string(rb_parser_new(), f, s, line);
11944 }
11945 
11946 NODE*
11947 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11948 {
11950  return parser_compile_string(vparser, f, s, line);
11951 }
11952 
11953 NODE*
11954 rb_compile_cstr(const char *f, const char *s, int len, int line)
11955 {
11956  VALUE str = rb_str_new(s, len);
11957  return parser_compile_string(rb_parser_new(), f, str, line);
11958 }
11959 
11960 NODE*
11961 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
11962 {
11963  VALUE str = rb_str_new(s, len);
11964  return parser_compile_string(vparser, f, str, line);
11965 }
11966 
11967 static VALUE
11968 lex_io_gets(struct parser_params *parser, VALUE io)
11969 {
11970  return rb_io_gets(io);
11971 }
11972 
11973 NODE*
11974 rb_compile_file(const char *f, VALUE file, int start)
11975 {
11976  VALUE volatile vparser = rb_parser_new();
11977 
11978  return rb_parser_compile_file(vparser, f, file, start);
11979 }
11980 
11981 NODE*
11982 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
11983 {
11984  struct parser_params *parser;
11985  NODE *node;
11986 
11987  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11989  lex_input = file;
11990  lex_pbeg = lex_p = lex_pend = 0;
11992 
11993  node = yycompile(parser, f, start);
11994  RB_GC_GUARD(vparser); /* prohibit tail call optimization */
11995 
11996  return node;
11997 }
11998 #endif /* !RIPPER */
11999 
12000 #define STR_FUNC_ESCAPE 0x01
12001 #define STR_FUNC_EXPAND 0x02
12002 #define STR_FUNC_REGEXP 0x04
12003 #define STR_FUNC_QWORDS 0x08
12004 #define STR_FUNC_SYMBOL 0x10
12005 #define STR_FUNC_INDENT 0x20
12006 
12008  str_squote = (0),
12016 };
12017 
12018 static VALUE
12019 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
12020 {
12021  VALUE str;
12022 
12023  str = rb_enc_str_new(p, n, enc);
12024  if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
12026  }
12027  else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
12029  }
12030  }
12031 
12032  return str;
12033 }
12034 
12035 #define lex_goto_eol(parser) ((parser)->parser_lex_p = (parser)->parser_lex_pend)
12036 #define lex_eol_p() (lex_p >= lex_pend)
12037 #define peek(c) peek_n((c), 0)
12038 #define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n])
12039 
12040 static inline int
12042 {
12043  int c;
12044 
12045  if (lex_p == lex_pend) {
12046  VALUE v = lex_nextline;
12047  lex_nextline = 0;
12048  if (!v) {
12049  if (parser->eofp)
12050  return -1;
12051 
12052  if (!lex_input || NIL_P(v = lex_getline(parser))) {
12053  parser->eofp = Qtrue;
12054  lex_goto_eol(parser);
12055  return -1;
12056  }
12057  }
12058  {
12059 #ifdef RIPPER
12060  if (parser->tokp < lex_pend) {
12061  if (NIL_P(parser->delayed)) {
12062  parser->delayed = rb_str_buf_new(1024);
12063  rb_enc_associate(parser->delayed, current_enc);
12064  rb_str_buf_cat(parser->delayed,
12065  parser->tokp, lex_pend - parser->tokp);
12066  parser->delayed_line = ruby_sourceline;
12067  parser->delayed_col = (int)(parser->tokp - lex_pbeg);
12068  }
12069  else {
12070  rb_str_buf_cat(parser->delayed,
12071  parser->tokp, lex_pend - parser->tokp);
12072  }
12073  }
12074 #endif
12075  if (heredoc_end > 0) {
12077  heredoc_end = 0;
12078  }
12079  ruby_sourceline++;
12080  parser->line_count++;
12081  lex_pbeg = lex_p = RSTRING_PTR(v);
12082  lex_pend = lex_p + RSTRING_LEN(v);
12083  ripper_flush(parser);
12084  lex_lastline = v;
12085  }
12086  }
12087  c = (unsigned char)*lex_p++;
12088  if (c == '\r' && peek('\n')) {
12089  lex_p++;
12090  c = '\n';
12091  }
12092 
12093  return c;
12094 }
12095 
12096 static void
12097 parser_pushback(struct parser_params *parser, int c)
12098 {
12099  if (c == -1) return;
12100  lex_p--;
12101  if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
12102  lex_p--;
12103  }
12104 }
12105 
12106 #define was_bol() (lex_p == lex_pbeg + 1)
12107 
12108 #define tokfix() (tokenbuf[tokidx]='\0')
12109 #define tok() tokenbuf
12110 #define toklen() tokidx
12111 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
12112 
12113 static char*
12115 {
12116  tokidx = 0;
12118  if (!tokenbuf) {
12119  toksiz = 60;
12120  tokenbuf = ALLOC_N(char, 60);
12121  }
12122  if (toksiz > 4096) {
12123  toksiz = 60;
12124  REALLOC_N(tokenbuf, char, 60);
12125  }
12126  return tokenbuf;
12127 }
12128 
12129 static char *
12130 parser_tokspace(struct parser_params *parser, int n)
12131 {
12132  tokidx += n;
12133 
12134  if (tokidx >= toksiz) {
12135  do {toksiz *= 2;} while (toksiz < tokidx);
12136  REALLOC_N(tokenbuf, char, toksiz);
12137  }
12138  return &tokenbuf[tokidx-n];
12139 }
12140 
12141 static void
12142 parser_tokadd(struct parser_params *parser, int c)
12143 {
12144  tokenbuf[tokidx++] = (char)c;
12145  if (tokidx >= toksiz) {
12146  toksiz *= 2;
12147  REALLOC_N(tokenbuf, char, toksiz);
12148  }
12149 }
12150 
12151 static int
12152 parser_tok_hex(struct parser_params *parser, size_t *numlen)
12153 {
12154  int c;
12155 
12156  c = scan_hex(lex_p, 2, numlen);
12157  if (!*numlen) {
12158  yyerror("invalid hex escape");
12159  return 0;
12160  }
12161  lex_p += *numlen;
12162  return c;
12163 }
12164 
12165 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
12166 
12167 /* return value is for ?\u3042 */
12168 static int
12170  int string_literal, int symbol_literal, int regexp_literal)
12171 {
12172  /*
12173  * If string_literal is true, then we allow multiple codepoints
12174  * in \u{}, and add the codepoints to the current token.
12175  * Otherwise we're parsing a character literal and return a single
12176  * codepoint without adding it
12177  */
12178 
12179  int codepoint;
12180  size_t numlen;
12181 
12182  if (regexp_literal) { tokadd('\\'); tokadd('u'); }
12183 
12184  if (peek('{')) { /* handle \u{...} form */
12185  do {
12186  if (regexp_literal) { tokadd(*lex_p); }
12187  nextc();
12188  codepoint = scan_hex(lex_p, 6, &numlen);
12189  if (numlen == 0) {
12190  yyerror("invalid Unicode escape");
12191  return 0;
12192  }
12193  if (codepoint > 0x10ffff) {
12194  yyerror("invalid Unicode codepoint (too large)");
12195  return 0;
12196  }
12197  lex_p += numlen;
12198  if (regexp_literal) {
12199  tokcopy((int)numlen);
12200  }
12201  else if (codepoint >= 0x80) {
12202  *encp = rb_utf8_encoding();
12203  if (string_literal) tokaddmbc(codepoint, *encp);
12204  }
12205  else if (string_literal) {
12206  tokadd(codepoint);
12207  }
12208  } while (string_literal && (peek(' ') || peek('\t')));
12209 
12210  if (!peek('}')) {
12211  yyerror("unterminated Unicode escape");
12212  return 0;
12213  }
12214 
12215  if (regexp_literal) { tokadd('}'); }
12216  nextc();
12217  }
12218  else { /* handle \uxxxx form */
12219  codepoint = scan_hex(lex_p, 4, &numlen);
12220  if (numlen < 4) {
12221  yyerror("invalid Unicode escape");
12222  return 0;
12223  }
12224  lex_p += 4;
12225  if (regexp_literal) {
12226  tokcopy(4);
12227  }
12228  else if (codepoint >= 0x80) {
12229  *encp = rb_utf8_encoding();
12230  if (string_literal) tokaddmbc(codepoint, *encp);
12231  }
12232  else if (string_literal) {
12233  tokadd(codepoint);
12234  }
12235  }
12236 
12237  return codepoint;
12238 }
12239 
12240 #define ESCAPE_CONTROL 1
12241 #define ESCAPE_META 2
12242 
12243 static int
12244 parser_read_escape(struct parser_params *parser, int flags,
12245  rb_encoding **encp)
12246 {
12247  int c;
12248  size_t numlen;
12249 
12250  switch (c = nextc()) {
12251  case '\\': /* Backslash */
12252  return c;
12253 
12254  case 'n': /* newline */
12255  return '\n';
12256 
12257  case 't': /* horizontal tab */
12258  return '\t';
12259 
12260  case 'r': /* carriage-return */
12261  return '\r';
12262 
12263  case 'f': /* form-feed */
12264  return '\f';
12265 
12266  case 'v': /* vertical tab */
12267  return '\13';
12268 
12269  case 'a': /* alarm(bell) */
12270  return '\007';
12271 
12272  case 'e': /* escape */
12273  return 033;
12274 
12275  case '0': case '1': case '2': case '3': /* octal constant */
12276  case '4': case '5': case '6': case '7':
12277  pushback(c);
12278  c = scan_oct(lex_p, 3, &numlen);
12279  lex_p += numlen;
12280  return c;
12281 
12282  case 'x': /* hex constant */
12283  c = tok_hex(&numlen);
12284  if (numlen == 0) return 0;
12285  return c;
12286 
12287  case 'b': /* backspace */
12288  return '\010';
12289 
12290  case 's': /* space */
12291  return ' ';
12292 
12293  case 'M':
12294  if (flags & ESCAPE_META) goto eof;
12295  if ((c = nextc()) != '-') {
12296  pushback(c);
12297  goto eof;
12298  }
12299  if ((c = nextc()) == '\\') {
12300  if (peek('u')) goto eof;
12301  return read_escape(flags|ESCAPE_META, encp) | 0x80;
12302  }
12303  else if (c == -1 || !ISASCII(c)) goto eof;
12304  else {
12305  return ((c & 0xff) | 0x80);
12306  }
12307 
12308  case 'C':
12309  if ((c = nextc()) != '-') {
12310  pushback(c);
12311  goto eof;
12312  }
12313  case 'c':
12314  if (flags & ESCAPE_CONTROL) goto eof;
12315  if ((c = nextc())== '\\') {
12316  if (peek('u')) goto eof;
12317  c = read_escape(flags|ESCAPE_CONTROL, encp);
12318  }
12319  else if (c == '?')
12320  return 0177;
12321  else if (c == -1 || !ISASCII(c)) goto eof;
12322  return c & 0x9f;
12323 
12324  eof:
12325  case -1:
12326  yyerror("Invalid escape character syntax");
12327  return '\0';
12328 
12329  default:
12330  return c;
12331  }
12332 }
12333 
12334 static void
12336 {
12337  int len = rb_enc_codelen(c, enc);
12338  rb_enc_mbcput(c, tokspace(len), enc);
12339 }
12340 
12341 static int
12343 {
12344  int c;
12345  int flags = 0;
12346  size_t numlen;
12347 
12348  first:
12349  switch (c = nextc()) {
12350  case '\n':
12351  return 0; /* just ignore */
12352 
12353  case '0': case '1': case '2': case '3': /* octal constant */
12354  case '4': case '5': case '6': case '7':
12355  {
12356  ruby_scan_oct(--lex_p, 3, &numlen);
12357  if (numlen == 0) goto eof;
12358  lex_p += numlen;
12359  tokcopy((int)numlen + 1);
12360  }
12361  return 0;
12362 
12363  case 'x': /* hex constant */
12364  {
12365  tok_hex(&numlen);
12366  if (numlen == 0) return -1;
12367  tokcopy((int)numlen + 2);
12368  }
12369  return 0;
12370 
12371  case 'M':
12372  if (flags & ESCAPE_META) goto eof;
12373  if ((c = nextc()) != '-') {
12374  pushback(c);
12375  goto eof;
12376  }
12377  tokcopy(3);
12378  flags |= ESCAPE_META;
12379  goto escaped;
12380 
12381  case 'C':
12382  if (flags & ESCAPE_CONTROL) goto eof;
12383  if ((c = nextc()) != '-') {
12384  pushback(c);
12385  goto eof;
12386  }
12387  tokcopy(3);
12388  goto escaped;
12389 
12390  case 'c':
12391  if (flags & ESCAPE_CONTROL) goto eof;
12392  tokcopy(2);
12393  flags |= ESCAPE_CONTROL;
12394  escaped:
12395  if ((c = nextc()) == '\\') {
12396  goto first;
12397  }
12398  else if (c == -1) goto eof;
12399  tokadd(c);
12400  return 0;
12401 
12402  eof:
12403  case -1:
12404  yyerror("Invalid escape character syntax");
12405  return -1;
12406 
12407  default:
12408  tokadd('\\');
12409  tokadd(c);
12410  }
12411  return 0;
12412 }
12413 
12414 static int
12416 {
12417  int kcode = 0;
12418  int kopt = 0;
12419  int options = 0;
12420  int c, opt, kc;
12421 
12422  newtok();
12423  while (c = nextc(), ISALPHA(c)) {
12424  if (c == 'o') {
12425  options |= RE_OPTION_ONCE;
12426  }
12427  else if (rb_char_to_option_kcode(c, &opt, &kc)) {
12428  if (kc >= 0) {
12429  if (kc != rb_ascii8bit_encindex()) kcode = c;
12430  kopt = opt;
12431  }
12432  else {
12433  options |= opt;
12434  }
12435  }
12436  else {
12437  tokadd(c);
12438  }
12439  }
12440  options |= kopt;
12441  pushback(c);
12442  if (toklen()) {
12443  tokfix();
12444  compile_error(PARSER_ARG "unknown regexp option%s - %s",
12445  toklen() > 1 ? "s" : "", tok());
12446  }
12447  return options | RE_OPTION_ENCODING(kcode);
12448 }
12449 
12450 static void
12452 {
12453  rb_str_free(str);
12454  rb_gc_force_recycle(str);
12455 }
12456 
12457 static int
12459 {
12460  int len = parser_precise_mbclen();
12461  if (!MBCLEN_CHARFOUND_P(len)) {
12462  compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
12463  return -1;
12464  }
12465  tokadd(c);
12466  lex_p += --len;
12467  if (len > 0) tokcopy(len);
12468  return c;
12469 }
12470 
12471 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c))
12472 
12473 static inline int
12475 {
12476  switch (c) {
12477  case '$': case '*': case '+': case '.':
12478  case '?': case '^': case '|':
12479  case ')': case ']': case '}': case '>':
12480  return TRUE;
12481  default:
12482  return FALSE;
12483  }
12484 }
12485 
12486 static int
12488  int func, int term, int paren, long *nest,
12489  rb_encoding **encp)
12490 {
12491  int c;
12492  int has_nonascii = 0;
12493  rb_encoding *enc = *encp;
12494  char *errbuf = 0;
12495  static const char mixed_msg[] = "%s mixed within %s source";
12496 
12497 #define mixed_error(enc1, enc2) if (!errbuf) { \
12498  size_t len = sizeof(mixed_msg) - 4; \
12499  len += strlen(rb_enc_name(enc1)); \
12500  len += strlen(rb_enc_name(enc2)); \
12501  errbuf = ALLOCA_N(char, len); \
12502  snprintf(errbuf, len, mixed_msg, \
12503  rb_enc_name(enc1), \
12504  rb_enc_name(enc2)); \
12505  yyerror(errbuf); \
12506  }
12507 #define mixed_escape(beg, enc1, enc2) do { \
12508  const char *pos = lex_p; \
12509  lex_p = (beg); \
12510  mixed_error((enc1), (enc2)); \
12511  lex_p = pos; \
12512  } while (0)
12513 
12514  while ((c = nextc()) != -1) {
12515  if (paren && c == paren) {
12516  ++*nest;
12517  }
12518  else if (c == term) {
12519  if (!nest || !*nest) {
12520  pushback(c);
12521  break;
12522  }
12523  --*nest;
12524  }
12525  else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
12526  int c2 = *lex_p;
12527  if (c2 == '$' || c2 == '@' || c2 == '{') {
12528  pushback(c);
12529  break;
12530  }
12531  }
12532  else if (c == '\\') {
12533  const char *beg = lex_p - 1;
12534  c = nextc();
12535  switch (c) {
12536  case '\n':
12537  if (func & STR_FUNC_QWORDS) break;
12538  if (func & STR_FUNC_EXPAND) continue;
12539  tokadd('\\');
12540  break;
12541 
12542  case '\\':
12543  if (func & STR_FUNC_ESCAPE) tokadd(c);
12544  break;
12545 
12546  case 'u':
12547  if ((func & STR_FUNC_EXPAND) == 0) {
12548  tokadd('\\');
12549  break;
12550  }
12551  parser_tokadd_utf8(parser, &enc, 1,
12552  func & STR_FUNC_SYMBOL,
12553  func & STR_FUNC_REGEXP);
12554  if (has_nonascii && enc != *encp) {
12555  mixed_escape(beg, enc, *encp);
12556  }
12557  continue;
12558 
12559  default:
12560  if (c == -1) return -1;
12561  if (!ISASCII(c)) {
12562  if ((func & STR_FUNC_EXPAND) == 0) tokadd('\\');
12563  goto non_ascii;
12564  }
12565  if (func & STR_FUNC_REGEXP) {
12566  if (c == term && !simple_re_meta(c)) {
12567  tokadd(c);
12568  continue;
12569  }
12570  pushback(c);
12571  if ((c = tokadd_escape(&enc)) < 0)
12572  return -1;
12573  if (has_nonascii && enc != *encp) {
12574  mixed_escape(beg, enc, *encp);
12575  }
12576  continue;
12577  }
12578  else if (func & STR_FUNC_EXPAND) {
12579  pushback(c);
12580  if (func & STR_FUNC_ESCAPE) tokadd('\\');
12581  c = read_escape(0, &enc);
12582  }
12583  else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12584  /* ignore backslashed spaces in %w */
12585  }
12586  else if (c != term && !(paren && c == paren)) {
12587  tokadd('\\');
12588  pushback(c);
12589  continue;
12590  }
12591  }
12592  }
12593  else if (!parser_isascii()) {
12594  non_ascii:
12595  has_nonascii = 1;
12596  if (enc != *encp) {
12597  mixed_error(enc, *encp);
12598  continue;
12599  }
12600  if (tokadd_mbchar(c) == -1) return -1;
12601  continue;
12602  }
12603  else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12604  pushback(c);
12605  break;
12606  }
12607  if (c & 0x80) {
12608  has_nonascii = 1;
12609  if (enc != *encp) {
12610  mixed_error(enc, *encp);
12611  continue;
12612  }
12613  }
12614  tokadd(c);
12615  }
12616  *encp = enc;
12617  return c;
12618 }
12619 
12620 #define NEW_STRTERM(func, term, paren) \
12621  rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
12622 
12623 #ifdef RIPPER
12624 static void
12625 ripper_flush_string_content(struct parser_params *parser, rb_encoding *enc)
12626 {
12627  if (!NIL_P(parser->delayed)) {
12628  ptrdiff_t len = lex_p - parser->tokp;
12629  if (len > 0) {
12630  rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
12631  }
12632  ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12633  parser->tokp = lex_p;
12634  }
12635 }
12636 
12637 #define flush_string_content(enc) ripper_flush_string_content(parser, (enc))
12638 #else
12639 #define flush_string_content(enc) ((void)(enc))
12640 #endif
12641 
12642 RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20 + 31) / 32];
12643 /* this can be shared with ripper, since it's independent from struct
12644  * parser_params. */
12645 #ifndef RIPPER
12646 #define BIT(c, idx) (((c) / 32 - 1 == idx) ? (1U << ((c) % 32)) : 0)
12647 #define SPECIAL_PUNCT(idx) ( \
12648  BIT('~', idx) | BIT('*', idx) | BIT('$', idx) | BIT('?', idx) | \
12649  BIT('!', idx) | BIT('@', idx) | BIT('/', idx) | BIT('\\', idx) | \
12650  BIT(';', idx) | BIT(',', idx) | BIT('.', idx) | BIT('=', idx) | \
12651  BIT(':', idx) | BIT('<', idx) | BIT('>', idx) | BIT('\"', idx) | \
12652  BIT('&', idx) | BIT('`', idx) | BIT('\'', idx) | BIT('+', idx) | \
12653  BIT('0', idx))
12654 const unsigned int ruby_global_name_punct_bits[] = {
12655  SPECIAL_PUNCT(0),
12656  SPECIAL_PUNCT(1),
12657  SPECIAL_PUNCT(2),
12658 };
12659 #undef BIT
12660 #undef SPECIAL_PUNCT
12661 #endif
12662 
12663 static inline int
12665 {
12666  if (c <= 0x20 || 0x7e < c) return 0;
12667  return (ruby_global_name_punct_bits[(c - 0x20) / 32] >> (c % 32)) & 1;
12668 }
12669 
12670 static int
12672 {
12673  int c;
12674  const char *p = lex_p;
12675 
12676  if (p + 1 >= lex_pend) return 0;
12677  c = *p++;
12678  switch (c) {
12679  case '$':
12680  if ((c = *p) == '-') {
12681  if (++p >= lex_pend) return 0;
12682  c = *p;
12683  }
12684  else if (is_global_name_punct(c) || ISDIGIT(c)) {
12685  return tSTRING_DVAR;
12686  }
12687  break;
12688  case '@':
12689  if ((c = *p) == '@') {
12690  if (++p >= lex_pend) return 0;
12691  c = *p;
12692  }
12693  break;
12694  case '{':
12695  lex_p = p;
12696  command_start = TRUE;
12697  return tSTRING_DBEG;
12698  default:
12699  return 0;
12700  }
12701  if (!ISASCII(c) || c == '_' || ISALPHA(c))
12702  return tSTRING_DVAR;
12703  return 0;
12704 }
12705 
12706 static int
12707 parser_parse_string(struct parser_params *parser, NODE *quote)
12708 {
12709  int func = (int)quote->nd_func;
12710  int term = nd_term(quote);
12711  int paren = nd_paren(quote);
12712  int c, space = 0;
12714 
12715  if (func == -1) return tSTRING_END;
12716  c = nextc();
12717  if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12718  do {c = nextc();} while (ISSPACE(c));
12719  space = 1;
12720  }
12721  if (c == term && !quote->nd_nest) {
12722  if (func & STR_FUNC_QWORDS) {
12723  quote->nd_func = -1;
12724  return ' ';
12725  }
12726  if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
12728  return tREGEXP_END;
12729  }
12730  if (space) {
12731  pushback(c);
12732  return ' ';
12733  }
12734  newtok();
12735  if ((func & STR_FUNC_EXPAND) && c == '#') {
12736  int t = parser_peek_variable_name(parser);
12737  if (t) return t;
12738  tokadd('#');
12739  c = nextc();
12740  }
12741  pushback(c);
12742  if (tokadd_string(func, term, paren, &quote->nd_nest,
12743  &enc) == -1) {
12744  ruby_sourceline = nd_line(quote);
12745  if (func & STR_FUNC_REGEXP) {
12746  if (parser->eofp)
12747  compile_error(PARSER_ARG "unterminated regexp meets end of file");
12748  return tREGEXP_END;
12749  }
12750  else {
12751  if (parser->eofp)
12752  compile_error(PARSER_ARG "unterminated string meets end of file");
12753  return tSTRING_END;
12754  }
12755  }
12756 
12757  tokfix();
12758  set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12759  flush_string_content(enc);
12760 
12761  return tSTRING_CONTENT;
12762 }
12763 
12764 static int
12766 {
12767  int c = nextc(), term, func = 0;
12768  long len;
12769 
12770  if (c == '-') {
12771  c = nextc();
12772  func = STR_FUNC_INDENT;
12773  }
12774  switch (c) {
12775  case '\'':
12776  func |= str_squote; goto quoted;
12777  case '"':
12778  func |= str_dquote; goto quoted;
12779  case '`':
12780  func |= str_xquote;
12781  quoted:
12782  newtok();
12783  tokadd(func);
12784  term = c;
12785  while ((c = nextc()) != -1 && c != term) {
12786  if (tokadd_mbchar(c) == -1) return 0;
12787  }
12788  if (c == -1) {
12789  compile_error(PARSER_ARG "unterminated here document identifier");
12790  return 0;
12791  }
12792  break;
12793 
12794  default:
12795  if (!parser_is_identchar()) {
12796  pushback(c);
12797  if (func & STR_FUNC_INDENT) {
12798  pushback('-');
12799  }
12800  return 0;
12801  }
12802  newtok();
12803  term = '"';
12804  tokadd(func |= str_dquote);
12805  do {
12806  if (tokadd_mbchar(c) == -1) return 0;
12807  } while ((c = nextc()) != -1 && parser_is_identchar());
12808  pushback(c);
12809  break;
12810  }
12811 
12812  tokfix();
12813 #ifdef RIPPER
12814  ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
12815 #endif
12816  len = lex_p - lex_pbeg;
12817  lex_goto_eol(parser);
12819  STR_NEW(tok(), toklen()), /* nd_lit */
12820  len, /* nd_nth */
12821  lex_lastline); /* nd_orig */
12823  ripper_flush(parser);
12824  return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
12825 }
12826 
12827 static void
12829 {
12830  VALUE line;
12831 
12832  line = here->nd_orig;
12833  lex_lastline = line;
12834  lex_pbeg = RSTRING_PTR(line);
12835  lex_pend = lex_pbeg + RSTRING_LEN(line);
12836  lex_p = lex_pbeg + here->nd_nth;
12838  ruby_sourceline = nd_line(here);
12839  dispose_string(here->nd_lit);
12840  rb_gc_force_recycle((VALUE)here);
12841  ripper_flush(parser);
12842 }
12843 
12844 static int
12846  const char *eos, long len, int indent)
12847 {
12848  const char *p = lex_pbeg;
12849  long n;
12850 
12851  if (indent) {
12852  while (*p && ISSPACE(*p)) p++;
12853  }
12854  n = lex_pend - (p + len);
12855  if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE;
12856  return strncmp(eos, p, len) == 0;
12857 }
12858 
12859 #ifdef RIPPER
12860 static void
12861 ripper_dispatch_heredoc_end(struct parser_params *parser)
12862 {
12863  if (!NIL_P(parser->delayed))
12864  ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12865  lex_goto_eol(parser);
12866  ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
12867 }
12868 
12869 #define dispatch_heredoc_end() ripper_dispatch_heredoc_end(parser)
12870 #else
12871 #define dispatch_heredoc_end() ((void)0)
12872 #endif
12873 
12874 static int
12876 {
12877  int c, func, indent = 0;
12878  const char *eos, *p, *pend;
12879  long len;
12880  VALUE str = 0;
12882 
12883  eos = RSTRING_PTR(here->nd_lit);
12884  len = RSTRING_LEN(here->nd_lit) - 1;
12885  indent = (func = *eos++) & STR_FUNC_INDENT;
12886 
12887  if ((c = nextc()) == -1) {
12888  error:
12889  compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
12890 #ifdef RIPPER
12891  if (NIL_P(parser->delayed)) {
12892  ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
12893  }
12894  else {
12895  if (str ||
12896  ((len = lex_p - parser->tokp) > 0 &&
12897  (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
12898  rb_str_append(parser->delayed, str);
12899  }
12900  ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12901  }
12902  lex_goto_eol(parser);
12903 #endif
12904  restore:
12906  lex_strterm = 0;
12907  return 0;
12908  }
12909  if (was_bol() && whole_match_p(eos, len, indent)) {
12912  return tSTRING_END;
12913  }
12914 
12915  if (!(func & STR_FUNC_EXPAND)) {
12916  do {
12918  pend = lex_pend;
12919  if (pend > p) {
12920  switch (pend[-1]) {
12921  case '\n':
12922  if (--pend == p || pend[-1] != '\r') {
12923  pend++;
12924  break;
12925  }
12926  case '\r':
12927  --pend;
12928  }
12929  }
12930  if (str)
12931  rb_str_cat(str, p, pend - p);
12932  else
12933  str = STR_NEW(p, pend - p);
12934  if (pend < lex_pend) rb_str_cat(str, "\n", 1);
12935  lex_goto_eol(parser);
12936  if (nextc() == -1) {
12937  if (str) dispose_string(str);
12938  goto error;
12939  }
12940  } while (!whole_match_p(eos, len, indent));
12941  }
12942  else {
12943  /* int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
12944  newtok();
12945  if (c == '#') {
12946  int t = parser_peek_variable_name(parser);
12947  if (t) return t;
12948  tokadd('#');
12949  c = nextc();
12950  }
12951  do {
12952  pushback(c);
12953  if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
12954  if (parser->eofp) goto error;
12955  goto restore;
12956  }
12957  if (c != '\n') {
12958  set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12959  flush_string_content(enc);
12960  return tSTRING_CONTENT;
12961  }
12962  tokadd(nextc());
12963  /* if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
12964  if ((c = nextc()) == -1) goto error;
12965  } while (!whole_match_p(eos, len, indent));
12966  str = STR_NEW3(tok(), toklen(), enc, func);
12967  }
12970  lex_strterm = NEW_STRTERM(-1, 0, 0);
12971  set_yylval_str(str);
12972  return tSTRING_CONTENT;
12973 }
12974 
12975 #include "lex.c"
12976 
12977 static void
12979 {
12980 #ifndef RIPPER
12981  rb_warning0("ambiguous first argument; put parentheses or even spaces");
12982 #else
12984 #endif
12985 }
12986 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
12987 
12988 static ID
12990 {
12991 #ifndef RIPPER
12992  if (!is_local_id(lhs))
12993  yyerror("formal argument must be local variable");
12994 #endif
12995  shadowing_lvar(lhs);
12996  return lhs;
12997 }
12998 
12999 static int
13000 lvar_defined_gen(struct parser_params *parser, ID id)
13001 {
13002  return (dyna_in_block() && dvar_defined_get(id)) || local_id(id);
13003 }
13004 
13005 /* emacsen -*- hack */
13006 static long
13007 parser_encode_length(struct parser_params *parser, const char *name, long len)
13008 {
13009  long nlen;
13010 
13011  if (len > 5 && name[nlen = len - 5] == '-') {
13012  if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
13013  return nlen;
13014  }
13015  if (len > 4 && name[nlen = len - 4] == '-') {
13016  if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
13017  return nlen;
13018  if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
13019  !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
13020  /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */
13021  return nlen;
13022  }
13023  return len;
13024 }
13025 
13026 static void
13027 parser_set_encode(struct parser_params *parser, const char *name)
13028 {
13029  int idx = rb_enc_find_index(name);
13030  rb_encoding *enc;
13031  VALUE excargs[3];
13032 
13033  if (idx < 0) {
13034  excargs[1] = rb_sprintf("unknown encoding name: %s", name);
13035  error:
13036  excargs[0] = rb_eArgError;
13037  excargs[2] = rb_make_backtrace();
13038  rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
13039  rb_exc_raise(rb_make_exception(3, excargs));
13040  }
13041  enc = rb_enc_from_index(idx);
13042  if (!rb_enc_asciicompat(enc)) {
13043  excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
13044  goto error;
13045  }
13046  parser->enc = enc;
13047 #ifndef RIPPER
13048  if (ruby_debug_lines) {
13049  long i, n = RARRAY_LEN(ruby_debug_lines);
13050  const VALUE *p = RARRAY_PTR(ruby_debug_lines);
13051  for (i = 0; i < n; ++i) {
13052  rb_enc_associate_index(*p, idx);
13053  }
13054  }
13055 #endif
13056 }
13057 
13058 static int
13060 {
13061  const char *p = lex_pbeg, *pend = lex_p - 1;
13062  if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
13063  while (p < pend) {
13064  if (!ISSPACE(*p)) return 0;
13065  p++;
13066  }
13067  return 1;
13068 }
13069 
13070 #ifndef RIPPER
13071 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
13072 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
13073 
13074 static void
13075 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
13076 {
13077  if (!comment_at_top(parser)) {
13078  return;
13079  }
13080  parser_set_encode(parser, val);
13081 }
13082 
13083 static void
13084 parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
13085 {
13086  int *p = &parser->parser_token_info_enabled;
13087 
13088  switch (*val) {
13089  case 't': case 'T':
13090  if (strcasecmp(val, "true") == 0) {
13091  *p = TRUE;
13092  return;
13093  }
13094  break;
13095  case 'f': case 'F':
13096  if (strcasecmp(val, "false") == 0) {
13097  *p = FALSE;
13098  return;
13099  }
13100  break;
13101  }
13102  rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val);
13103 }
13104 
13105 struct magic_comment {
13106  const char *name;
13109 };
13110 
13111 static const struct magic_comment magic_comments[] = {
13114  {"warn_indent", parser_set_token_info},
13115 };
13116 #endif
13117 
13118 static const char *
13119 magic_comment_marker(const char *str, long len)
13120 {
13121  long i = 2;
13122 
13123  while (i < len) {
13124  switch (str[i]) {
13125  case '-':
13126  if (str[i-1] == '*' && str[i-2] == '-') {
13127  return str + i + 1;
13128  }
13129  i += 2;
13130  break;
13131  case '*':
13132  if (i + 1 >= len) return 0;
13133  if (str[i+1] != '-') {
13134  i += 4;
13135  }
13136  else if (str[i-1] != '-') {
13137  i += 2;
13138  }
13139  else {
13140  return str + i + 2;
13141  }
13142  break;
13143  default:
13144  i += 3;
13145  break;
13146  }
13147  }
13148  return 0;
13149 }
13150 
13151 static int
13152 parser_magic_comment(struct parser_params *parser, const char *str, long len)
13153 {
13154  VALUE name = 0, val = 0;
13155  const char *beg, *end, *vbeg, *vend;
13156 #define str_copy(_s, _p, _n) ((_s) \
13157  ? (void)(rb_str_resize((_s), (_n)), \
13158  MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
13159  : (void)((_s) = STR_NEW((_p), (_n))))
13160 
13161  if (len <= 7) return FALSE;
13162  if (!(beg = magic_comment_marker(str, len))) return FALSE;
13163  if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
13164  str = beg;
13165  len = end - beg - 3;
13166 
13167  /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
13168  while (len > 0) {
13169 #ifndef RIPPER
13170  const struct magic_comment *p = magic_comments;
13171 #endif
13172  char *s;
13173  int i;
13174  long n = 0;
13175 
13176  for (; len > 0 && *str; str++, --len) {
13177  switch (*str) {
13178  case '\'': case '"': case ':': case ';':
13179  continue;
13180  }
13181  if (!ISSPACE(*str)) break;
13182  }
13183  for (beg = str; len > 0; str++, --len) {
13184  switch (*str) {
13185  case '\'': case '"': case ':': case ';':
13186  break;
13187  default:
13188  if (ISSPACE(*str)) break;
13189  continue;
13190  }
13191  break;
13192  }
13193  for (end = str; len > 0 && ISSPACE(*str); str++, --len);
13194  if (!len) break;
13195  if (*str != ':') continue;
13196 
13197  do str++; while (--len > 0 && ISSPACE(*str));
13198  if (!len) break;
13199  if (*str == '"') {
13200  for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
13201  if (*str == '\\') {
13202  --len;
13203  ++str;
13204  }
13205  }
13206  vend = str;
13207  if (len) {
13208  --len;
13209  ++str;
13210  }
13211  }
13212  else {
13213  for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
13214  vend = str;
13215  }
13216  while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
13217 
13218  n = end - beg;
13219  str_copy(name, beg, n);
13220  s = RSTRING_PTR(name);
13221  for (i = 0; i < n; ++i) {
13222  if (s[i] == '-') s[i] = '_';
13223  }
13224 #ifndef RIPPER
13225  do {
13226  if (STRNCASECMP(p->name, s, n) == 0) {
13227  n = vend - vbeg;
13228  if (p->length) {
13229  n = (*p->length)(parser, vbeg, n);
13230  }
13231  str_copy(val, vbeg, n);
13232  (*p->func)(parser, s, RSTRING_PTR(val));
13233  break;
13234  }
13235  } while (++p < magic_comments + numberof(magic_comments));
13236 #else
13237  str_copy(val, vbeg, vend - vbeg);
13238  dispatch2(magic_comment, name, val);
13239 #endif
13240  }
13241 
13242  return TRUE;
13243 }
13244 
13245 static void
13246 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
13247 {
13248  int sep = 0;
13249  const char *beg = str;
13250  VALUE s;
13251 
13252  for (;;) {
13253  if (send - str <= 6) return;
13254  switch (str[6]) {
13255  case 'C': case 'c': str += 6; continue;
13256  case 'O': case 'o': str += 5; continue;
13257  case 'D': case 'd': str += 4; continue;
13258  case 'I': case 'i': str += 3; continue;
13259  case 'N': case 'n': str += 2; continue;
13260  case 'G': case 'g': str += 1; continue;
13261  case '=': case ':':
13262  sep = 1;
13263  str += 6;
13264  break;
13265  default:
13266  str += 6;
13267  if (ISSPACE(*str)) break;
13268  continue;
13269  }
13270  if (STRNCASECMP(str-6, "coding", 6) == 0) break;
13271  }
13272  for (;;) {
13273  do {
13274  if (++str >= send) return;
13275  } while (ISSPACE(*str));
13276  if (sep) break;
13277  if (*str != '=' && *str != ':') return;
13278  sep = 1;
13279  str++;
13280  }
13281  beg = str;
13282  while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
13283  s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
13284  parser_set_encode(parser, RSTRING_PTR(s));
13285  rb_str_resize(s, 0);
13286 }
13287 
13288 static void
13290 {
13291  int c = nextc();
13292  switch (c) {
13293  case '#':
13294  if (peek('!')) parser->has_shebang = 1;
13295  break;
13296  case 0xef: /* UTF-8 BOM marker */
13297  if (lex_pend - lex_p >= 2 &&
13298  (unsigned char)lex_p[0] == 0xbb &&
13299  (unsigned char)lex_p[1] == 0xbf) {
13300  parser->enc = rb_utf8_encoding();
13301  lex_p += 2;
13302  lex_pbeg = lex_p;
13303  return;
13304  }
13305  break;
13306  case EOF:
13307  return;
13308  }
13309  pushback(c);
13310  parser->enc = rb_enc_get(lex_lastline);
13311 }
13312 
13313 #define IS_ARG() IS_lex_state(EXPR_ARG_ANY)
13314 #define IS_END() IS_lex_state(EXPR_END_ANY)
13315 #define IS_BEG() IS_lex_state(EXPR_BEG_ANY)
13316 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
13317 #define IS_LABEL_POSSIBLE() ((IS_lex_state(EXPR_BEG | EXPR_ENDFN) && !cmd_state) || IS_ARG())
13318 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1))
13319 #define IS_AFTER_OPERATOR() IS_lex_state(EXPR_FNAME | EXPR_DOT)
13320 
13321 #ifndef RIPPER
13322 #define ambiguous_operator(op, syn) ( \
13323  rb_warning0("`"op"' after local variable is interpreted as binary operator"), \
13324  rb_warning0("even though it seems like "syn""))
13325 #else
13326 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
13327 #endif
13328 #define warn_balanced(op, syn) ((void) \
13329  (!IS_lex_state_for(last_state, EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN|EXPR_ENDARG) && \
13330  space_seen && !ISSPACE(c) && \
13331  (ambiguous_operator(op, syn), 0)))
13332 
13333 static int
13335 {
13336  register int c;
13337  int space_seen = 0;
13338  int cmd_state;
13339  enum lex_state_e last_state;
13340  rb_encoding *enc;
13341  int mb;
13342 #ifdef RIPPER
13343  int fallthru = FALSE;
13344 #endif
13345 
13346  if (lex_strterm) {
13347  int token;
13348  if (nd_type(lex_strterm) == NODE_HEREDOC) {
13349  token = here_document(lex_strterm);
13350  if (token == tSTRING_END) {
13351  lex_strterm = 0;
13352  lex_state = EXPR_END;
13353  }
13354  }
13355  else {
13356  token = parse_string(lex_strterm);
13357  if (token == tSTRING_END || token == tREGEXP_END) {
13359  lex_strterm = 0;
13360  lex_state = EXPR_END;
13361  }
13362  }
13363  return token;
13364  }
13365  cmd_state = command_start;
13366  command_start = FALSE;
13367  retry:
13368  last_state = lex_state;
13369  switch (c = nextc()) {
13370  case '\0': /* NUL */
13371  case '\004': /* ^D */
13372  case '\032': /* ^Z */
13373  case -1: /* end of script. */
13374  return 0;
13375 
13376  /* white spaces */
13377  case ' ': case '\t': case '\f': case '\r':
13378  case '\13': /* '\v' */
13379  space_seen = 1;
13380 #ifdef RIPPER
13381  while ((c = nextc())) {
13382  switch (c) {
13383  case ' ': case '\t': case '\f': case '\r':
13384  case '\13': /* '\v' */
13385  break;
13386  default:
13387  goto outofloop;
13388  }
13389  }
13390  outofloop:
13391  pushback(c);
13392  ripper_dispatch_scan_event(parser, tSP);
13393 #endif
13394  goto retry;
13395 
13396  case '#': /* it's a comment */
13397  /* no magic_comment in shebang line */
13398  if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
13399  if (comment_at_top(parser)) {
13400  set_file_encoding(parser, lex_p, lex_pend);
13401  }
13402  }
13403  lex_p = lex_pend;
13404 #ifdef RIPPER
13405  ripper_dispatch_scan_event(parser, tCOMMENT);
13406  fallthru = TRUE;
13407 #endif
13408  /* fall through */
13409  case '\n':
13410  if (IS_lex_state(EXPR_BEG | EXPR_VALUE | EXPR_CLASS | EXPR_FNAME | EXPR_DOT)) {
13411 #ifdef RIPPER
13412  if (!fallthru) {
13413  ripper_dispatch_scan_event(parser, tIGNORED_NL);
13414  }
13415  fallthru = FALSE;
13416 #endif
13417  goto retry;
13418  }
13419  while ((c = nextc())) {
13420  switch (c) {
13421  case ' ': case '\t': case '\f': case '\r':
13422  case '\13': /* '\v' */
13423  space_seen = 1;
13424  break;
13425  case '.': {
13426  if ((c = nextc()) != '.') {
13427  pushback(c);
13428  pushback('.');
13429  goto retry;
13430  }
13431  }
13432  default:
13433  --ruby_sourceline;
13435  case -1: /* EOF no decrement*/
13436  lex_goto_eol(parser);
13437 #ifdef RIPPER
13438  if (c != -1) {
13439  parser->tokp = lex_p;
13440  }
13441 #endif
13442  goto normal_newline;
13443  }
13444  }
13445  normal_newline:
13446  command_start = TRUE;
13447  lex_state = EXPR_BEG;
13448  return '\n';
13449 
13450  case '*':
13451  if ((c = nextc()) == '*') {
13452  if ((c = nextc()) == '=') {
13454  lex_state = EXPR_BEG;
13455  return tOP_ASGN;
13456  }
13457  pushback(c);
13458  if (IS_SPCARG(c)) {
13459  rb_warning0("`**' interpreted as argument prefix");
13460  c = tDSTAR;
13461  }
13462  else if (IS_BEG()) {
13463  c = tDSTAR;
13464  }
13465  else {
13466  warn_balanced("**", "argument prefix");
13467  c = tPOW;
13468  }
13469  }
13470  else {
13471  if (c == '=') {
13472  set_yylval_id('*');
13473  lex_state = EXPR_BEG;
13474  return tOP_ASGN;
13475  }
13476  pushback(c);
13477  if (IS_SPCARG(c)) {
13478  rb_warning0("`*' interpreted as argument prefix");
13479  c = tSTAR;
13480  }
13481  else if (IS_BEG()) {
13482  c = tSTAR;
13483  }
13484  else {
13485  warn_balanced("*", "argument prefix");
13486  c = '*';
13487  }
13488  }
13489  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13490  return c;
13491 
13492  case '!':
13493  c = nextc();
13494  if (IS_AFTER_OPERATOR()) {
13495  lex_state = EXPR_ARG;
13496  if (c == '@') {
13497  return '!';
13498  }
13499  }
13500  else {
13501  lex_state = EXPR_BEG;
13502  }
13503  if (c == '=') {
13504  return tNEQ;
13505  }
13506  if (c == '~') {
13507  return tNMATCH;
13508  }
13509  pushback(c);
13510  return '!';
13511 
13512  case '=':
13513  if (was_bol()) {
13514  /* skip embedded rd document */
13515  if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
13516 #ifdef RIPPER
13517  int first_p = TRUE;
13518 
13519  lex_goto_eol(parser);
13520  ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
13521 #endif
13522  for (;;) {
13523  lex_goto_eol(parser);
13524 #ifdef RIPPER
13525  if (!first_p) {
13526  ripper_dispatch_scan_event(parser, tEMBDOC);
13527  }
13528  first_p = FALSE;
13529 #endif
13530  c = nextc();
13531  if (c == -1) {
13532  compile_error(PARSER_ARG "embedded document meets end of file");
13533  return 0;
13534  }
13535  if (c != '=') continue;
13536  if (strncmp(lex_p, "end", 3) == 0 &&
13537  (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
13538  break;
13539  }
13540  }
13541  lex_goto_eol(parser);
13542 #ifdef RIPPER
13543  ripper_dispatch_scan_event(parser, tEMBDOC_END);
13544 #endif
13545  goto retry;
13546  }
13547  }
13548 
13549  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13550  if ((c = nextc()) == '=') {
13551  if ((c = nextc()) == '=') {
13552  return tEQQ;
13553  }
13554  pushback(c);
13555  return tEQ;
13556  }
13557  if (c == '~') {
13558  return tMATCH;
13559  }
13560  else if (c == '>') {
13561  return tASSOC;
13562  }
13563  pushback(c);
13564  return '=';
13565 
13566  case '<':
13567  last_state = lex_state;
13568  c = nextc();
13569  if (c == '<' &&
13570  !IS_lex_state(EXPR_DOT | EXPR_CLASS) &&
13571  !IS_END() &&
13572  (!IS_ARG() || space_seen)) {
13573  int token = heredoc_identifier();
13574  if (token) return token;
13575  }
13576  if (IS_AFTER_OPERATOR()) {
13577  lex_state = EXPR_ARG;
13578  }
13579  else {
13580  if (IS_lex_state(EXPR_CLASS))
13581  command_start = TRUE;
13582  lex_state = EXPR_BEG;
13583  }
13584  if (c == '=') {
13585  if ((c = nextc()) == '>') {
13586  return tCMP;
13587  }
13588  pushback(c);
13589  return tLEQ;
13590  }
13591  if (c == '<') {
13592  if ((c = nextc()) == '=') {
13594  lex_state = EXPR_BEG;
13595  return tOP_ASGN;
13596  }
13597  pushback(c);
13598  warn_balanced("<<", "here document");
13599  return tLSHFT;
13600  }
13601  pushback(c);
13602  return '<';
13603 
13604  case '>':
13605  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13606  if ((c = nextc()) == '=') {
13607  return tGEQ;
13608  }
13609  if (c == '>') {
13610  if ((c = nextc()) == '=') {
13612  lex_state = EXPR_BEG;
13613  return tOP_ASGN;
13614  }
13615  pushback(c);
13616  return tRSHFT;
13617  }
13618  pushback(c);
13619  return '>';
13620 
13621  case '"':
13622  lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
13623  return tSTRING_BEG;
13624 
13625  case '`':
13626  if (IS_lex_state(EXPR_FNAME)) {
13627  lex_state = EXPR_ENDFN;
13628  return c;
13629  }
13630  if (IS_lex_state(EXPR_DOT)) {
13631  if (cmd_state)
13632  lex_state = EXPR_CMDARG;
13633  else
13634  lex_state = EXPR_ARG;
13635  return c;
13636  }
13637  lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
13638  return tXSTRING_BEG;
13639 
13640  case '\'':
13641  lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
13642  return tSTRING_BEG;
13643 
13644  case '?':
13645  if (IS_END()) {
13646  lex_state = EXPR_VALUE;
13647  return '?';
13648  }
13649  c = nextc();
13650  if (c == -1) {
13651  compile_error(PARSER_ARG "incomplete character syntax");
13652  return 0;
13653  }
13654  if (rb_enc_isspace(c, current_enc)) {
13655  if (!IS_ARG()) {
13656  int c2 = 0;
13657  switch (c) {
13658  case ' ':
13659  c2 = 's';
13660  break;
13661  case '\n':
13662  c2 = 'n';
13663  break;
13664  case '\t':
13665  c2 = 't';
13666  break;
13667  case '\v':
13668  c2 = 'v';
13669  break;
13670  case '\r':
13671  c2 = 'r';
13672  break;
13673  case '\f':
13674  c2 = 'f';
13675  break;
13676  }
13677  if (c2) {
13678  rb_warnI("invalid character syntax; use ?\\%c", c2);
13679  }
13680  }
13681  ternary:
13682  pushback(c);
13683  lex_state = EXPR_VALUE;
13684  return '?';
13685  }
13686  newtok();
13687  enc = current_enc;
13688  if (!parser_isascii()) {
13689  if (tokadd_mbchar(c) == -1) return 0;
13690  }
13691  else if ((rb_enc_isalnum(c, current_enc) || c == '_') &&
13693  goto ternary;
13694  }
13695  else if (c == '\\') {
13696  if (peek('u')) {
13697  nextc();
13698  c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
13699  if (0x80 <= c) {
13700  tokaddmbc(c, enc);
13701  }
13702  else {
13703  tokadd(c);
13704  }
13705  }
13706  else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) {
13707  nextc();
13708  if (tokadd_mbchar(c) == -1) return 0;
13709  }
13710  else {
13711  c = read_escape(0, &enc);
13712  tokadd(c);
13713  }
13714  }
13715  else {
13716  tokadd(c);
13717  }
13718  tokfix();
13719  set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
13720  lex_state = EXPR_END;
13721  return tCHAR;
13722 
13723  case '&':
13724  if ((c = nextc()) == '&') {
13725  lex_state = EXPR_BEG;
13726  if ((c = nextc()) == '=') {
13728  lex_state = EXPR_BEG;
13729  return tOP_ASGN;
13730  }
13731  pushback(c);
13732  return tANDOP;
13733  }
13734  else if (c == '=') {
13735  set_yylval_id('&');
13736  lex_state = EXPR_BEG;
13737  return tOP_ASGN;
13738  }
13739  pushback(c);
13740  if (IS_SPCARG(c)) {
13741  rb_warning0("`&' interpreted as argument prefix");
13742  c = tAMPER;
13743  }
13744  else if (IS_BEG()) {
13745  c = tAMPER;
13746  }
13747  else {
13748  warn_balanced("&", "argument prefix");
13749  c = '&';
13750  }
13751  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13752  return c;
13753 
13754  case '|':
13755  if ((c = nextc()) == '|') {
13756  lex_state = EXPR_BEG;
13757  if ((c = nextc()) == '=') {
13759  lex_state = EXPR_BEG;
13760  return tOP_ASGN;
13761  }
13762  pushback(c);
13763  return tOROP;
13764  }
13765  if (c == '=') {
13766  set_yylval_id('|');
13767  lex_state = EXPR_BEG;
13768  return tOP_ASGN;
13769  }
13770  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13771  pushback(c);
13772  return '|';
13773 
13774  case '+':
13775  c = nextc();
13776  if (IS_AFTER_OPERATOR()) {
13777  lex_state = EXPR_ARG;
13778  if (c == '@') {
13779  return tUPLUS;
13780  }
13781  pushback(c);
13782  return '+';
13783  }
13784  if (c == '=') {
13785  set_yylval_id('+');
13786  lex_state = EXPR_BEG;
13787  return tOP_ASGN;
13788  }
13789  if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13790  lex_state = EXPR_BEG;
13791  pushback(c);
13792  if (c != -1 && ISDIGIT(c)) {
13793  c = '+';
13794  goto start_num;
13795  }
13796  return tUPLUS;
13797  }
13798  lex_state = EXPR_BEG;
13799  pushback(c);
13800  warn_balanced("+", "unary operator");
13801  return '+';
13802 
13803  case '-':
13804  c = nextc();
13805  if (IS_AFTER_OPERATOR()) {
13806  lex_state = EXPR_ARG;
13807  if (c == '@') {
13808  return tUMINUS;
13809  }
13810  pushback(c);
13811  return '-';
13812  }
13813  if (c == '=') {
13814  set_yylval_id('-');
13815  lex_state = EXPR_BEG;
13816  return tOP_ASGN;
13817  }
13818  if (c == '>') {
13819  lex_state = EXPR_ENDFN;
13820  return tLAMBDA;
13821  }
13822  if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13823  lex_state = EXPR_BEG;
13824  pushback(c);
13825  if (c != -1 && ISDIGIT(c)) {
13826  return tUMINUS_NUM;
13827  }
13828  return tUMINUS;
13829  }
13830  lex_state = EXPR_BEG;
13831  pushback(c);
13832  warn_balanced("-", "unary operator");
13833  return '-';
13834 
13835  case '.':
13836  lex_state = EXPR_BEG;
13837  if ((c = nextc()) == '.') {
13838  if ((c = nextc()) == '.') {
13839  return tDOT3;
13840  }
13841  pushback(c);
13842  return tDOT2;
13843  }
13844  pushback(c);
13845  if (c != -1 && ISDIGIT(c)) {
13846  yyerror("no .<digit> floating literal anymore; put 0 before dot");
13847  }
13848  lex_state = EXPR_DOT;
13849  return '.';
13850 
13851  start_num:
13852  case '0': case '1': case '2': case '3': case '4':
13853  case '5': case '6': case '7': case '8': case '9':
13854  {
13855  int is_float, seen_point, seen_e, nondigit;
13856 
13857  is_float = seen_point = seen_e = nondigit = 0;
13858  lex_state = EXPR_END;
13859  newtok();
13860  if (c == '-' || c == '+') {
13861  tokadd(c);
13862  c = nextc();
13863  }
13864  if (c == '0') {
13865 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13866  int start = toklen();
13867  c = nextc();
13868  if (c == 'x' || c == 'X') {
13869  /* hexadecimal */
13870  c = nextc();
13871  if (c != -1 && ISXDIGIT(c)) {
13872  do {
13873  if (c == '_') {
13874  if (nondigit) break;
13875  nondigit = c;
13876  continue;
13877  }
13878  if (!ISXDIGIT(c)) break;
13879  nondigit = 0;
13880  tokadd(c);
13881  } while ((c = nextc()) != -1);
13882  }
13883  pushback(c);
13884  tokfix();
13885  if (toklen() == start) {
13886  no_digits();
13887  }
13888  else if (nondigit) goto trailing_uc;
13890  return tINTEGER;
13891  }
13892  if (c == 'b' || c == 'B') {
13893  /* binary */
13894  c = nextc();
13895  if (c == '0' || c == '1') {
13896  do {
13897  if (c == '_') {
13898  if (nondigit) break;
13899  nondigit = c;
13900  continue;
13901  }
13902  if (c != '0' && c != '1') break;
13903  nondigit = 0;
13904  tokadd(c);
13905  } while ((c = nextc()) != -1);
13906  }
13907  pushback(c);
13908  tokfix();
13909  if (toklen() == start) {
13910  no_digits();
13911  }
13912  else if (nondigit) goto trailing_uc;
13914  return tINTEGER;
13915  }
13916  if (c == 'd' || c == 'D') {
13917  /* decimal */
13918  c = nextc();
13919  if (c != -1 && ISDIGIT(c)) {
13920  do {
13921  if (c == '_') {
13922  if (nondigit) break;
13923  nondigit = c;
13924  continue;
13925  }
13926  if (!ISDIGIT(c)) break;
13927  nondigit = 0;
13928  tokadd(c);
13929  } while ((c = nextc()) != -1);
13930  }
13931  pushback(c);
13932  tokfix();
13933  if (toklen() == start) {
13934  no_digits();
13935  }
13936  else if (nondigit) goto trailing_uc;
13938  return tINTEGER;
13939  }
13940  if (c == '_') {
13941  /* 0_0 */
13942  goto octal_number;
13943  }
13944  if (c == 'o' || c == 'O') {
13945  /* prefixed octal */
13946  c = nextc();
13947  if (c == -1 || c == '_' || !ISDIGIT(c)) {
13948  no_digits();
13949  }
13950  }
13951  if (c >= '0' && c <= '7') {
13952  /* octal */
13953  octal_number:
13954  do {
13955  if (c == '_') {
13956  if (nondigit) break;
13957  nondigit = c;
13958  continue;
13959  }
13960  if (c < '0' || c > '9') break;
13961  if (c > '7') goto invalid_octal;
13962  nondigit = 0;
13963  tokadd(c);
13964  } while ((c = nextc()) != -1);
13965  if (toklen() > start) {
13966  pushback(c);
13967  tokfix();
13968  if (nondigit) goto trailing_uc;
13970  return tINTEGER;
13971  }
13972  if (nondigit) {
13973  pushback(c);
13974  goto trailing_uc;
13975  }
13976  }
13977  if (c > '7' && c <= '9') {
13978  invalid_octal:
13979  yyerror("Invalid octal digit");
13980  }
13981  else if (c == '.' || c == 'e' || c == 'E') {
13982  tokadd('0');
13983  }
13984  else {
13985  pushback(c);
13987  return tINTEGER;
13988  }
13989  }
13990 
13991  for (;;) {
13992  switch (c) {
13993  case '0': case '1': case '2': case '3': case '4':
13994  case '5': case '6': case '7': case '8': case '9':
13995  nondigit = 0;
13996  tokadd(c);
13997  break;
13998 
13999  case '.':
14000  if (nondigit) goto trailing_uc;
14001  if (seen_point || seen_e) {
14002  goto decode_num;
14003  }
14004  else {
14005  int c0 = nextc();
14006  if (c0 == -1 || !ISDIGIT(c0)) {
14007  pushback(c0);
14008  goto decode_num;
14009  }
14010  c = c0;
14011  }
14012  tokadd('.');
14013  tokadd(c);
14014  is_float++;
14015  seen_point++;
14016  nondigit = 0;
14017  break;
14018 
14019  case 'e':
14020  case 'E':
14021  if (nondigit) {
14022  pushback(c);
14023  c = nondigit;
14024  goto decode_num;
14025  }
14026  if (seen_e) {
14027  goto decode_num;
14028  }
14029  tokadd(c);
14030  seen_e++;
14031  is_float++;
14032  nondigit = c;
14033  c = nextc();
14034  if (c != '-' && c != '+') continue;
14035  tokadd(c);
14036  nondigit = c;
14037  break;
14038 
14039  case '_': /* `_' in number just ignored */
14040  if (nondigit) goto decode_num;
14041  nondigit = c;
14042  break;
14043 
14044  default:
14045  goto decode_num;
14046  }
14047  c = nextc();
14048  }
14049 
14050  decode_num:
14051  pushback(c);
14052  if (nondigit) {
14053  char tmp[30];
14054  trailing_uc:
14055  snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
14056  yyerror(tmp);
14057  }
14058  tokfix();
14059  if (is_float) {
14060  double d = strtod(tok(), 0);
14061  if (errno == ERANGE) {
14062  rb_warningS("Float %s out of range", tok());
14063  errno = 0;
14064  }
14066  return tFLOAT;
14067  }
14069  return tINTEGER;
14070  }
14071 
14072  case ')':
14073  case ']':
14074  paren_nest--;
14075  case '}':
14076  COND_LEXPOP();
14077  CMDARG_LEXPOP();
14078  if (c == ')')
14079  lex_state = EXPR_ENDFN;
14080  else
14081  lex_state = EXPR_ENDARG;
14082  if (c == '}') {
14083  if (!brace_nest--) c = tSTRING_DEND;
14084  }
14085  return c;
14086 
14087  case ':':
14088  c = nextc();
14089  if (c == ':') {
14090  if (IS_BEG() || IS_lex_state(EXPR_CLASS) || IS_SPCARG(-1)) {
14091  lex_state = EXPR_BEG;
14092  return tCOLON3;
14093  }
14094  lex_state = EXPR_DOT;
14095  return tCOLON2;
14096  }
14097  if (IS_END() || ISSPACE(c)) {
14098  pushback(c);
14099  warn_balanced(":", "symbol literal");
14100  lex_state = EXPR_BEG;
14101  return ':';
14102  }
14103  switch (c) {
14104  case '\'':
14105  lex_strterm = NEW_STRTERM(str_ssym, c, 0);
14106  break;
14107  case '"':
14108  lex_strterm = NEW_STRTERM(str_dsym, c, 0);
14109  break;
14110  default:
14111  pushback(c);
14112  break;
14113  }
14114  lex_state = EXPR_FNAME;
14115  return tSYMBEG;
14116 
14117  case '/':
14118  if (IS_lex_state(EXPR_BEG_ANY)) {
14119  lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
14120  return tREGEXP_BEG;
14121  }
14122  if ((c = nextc()) == '=') {
14123  set_yylval_id('/');
14124  lex_state = EXPR_BEG;
14125  return tOP_ASGN;
14126  }
14127  pushback(c);
14128  if (IS_SPCARG(c)) {
14129  (void)arg_ambiguous();
14130  lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
14131  return tREGEXP_BEG;
14132  }
14133  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14134  warn_balanced("/", "regexp literal");
14135  return '/';
14136 
14137  case '^':
14138  if ((c = nextc()) == '=') {
14139  set_yylval_id('^');
14140  lex_state = EXPR_BEG;
14141  return tOP_ASGN;
14142  }
14143  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14144  pushback(c);
14145  return '^';
14146 
14147  case ';':
14148  lex_state = EXPR_BEG;
14149  command_start = TRUE;
14150  return ';';
14151 
14152  case ',':
14153  lex_state = EXPR_BEG;
14154  return ',';
14155 
14156  case '~':
14157  if (IS_AFTER_OPERATOR()) {
14158  if ((c = nextc()) != '@') {
14159  pushback(c);
14160  }
14161  lex_state = EXPR_ARG;
14162  }
14163  else {
14164  lex_state = EXPR_BEG;
14165  }
14166  return '~';
14167 
14168  case '(':
14169  if (IS_BEG()) {
14170  c = tLPAREN;
14171  }
14172  else if (IS_SPCARG(-1)) {
14173  c = tLPAREN_ARG;
14174  }
14175  paren_nest++;
14176  COND_PUSH(0);
14177  CMDARG_PUSH(0);
14178  lex_state = EXPR_BEG;
14179  return c;
14180 
14181  case '[':
14182  paren_nest++;
14183  if (IS_AFTER_OPERATOR()) {
14184  lex_state = EXPR_ARG;
14185  if ((c = nextc()) == ']') {
14186  if ((c = nextc()) == '=') {
14187  return tASET;
14188  }
14189  pushback(c);
14190  return tAREF;
14191  }
14192  pushback(c);
14193  return '[';
14194  }
14195  else if (IS_BEG()) {
14196  c = tLBRACK;
14197  }
14198  else if (IS_ARG() && space_seen) {
14199  c = tLBRACK;
14200  }
14201  lex_state = EXPR_BEG;
14202  COND_PUSH(0);
14203  CMDARG_PUSH(0);
14204  return c;
14205 
14206  case '{':
14207  ++brace_nest;
14208  if (lpar_beg && lpar_beg == paren_nest) {
14209  lex_state = EXPR_BEG;
14210  lpar_beg = 0;
14211  --paren_nest;
14212  COND_PUSH(0);
14213  CMDARG_PUSH(0);
14214  return tLAMBEG;
14215  }
14216  if (IS_ARG() || IS_lex_state(EXPR_END | EXPR_ENDFN))
14217  c = '{'; /* block (primary) */
14218  else if (IS_lex_state(EXPR_ENDARG))
14219  c = tLBRACE_ARG; /* block (expr) */
14220  else
14221  c = tLBRACE; /* hash */
14222  COND_PUSH(0);
14223  CMDARG_PUSH(0);
14224  lex_state = EXPR_BEG;
14225  if (c != tLBRACE) command_start = TRUE;
14226  return c;
14227 
14228  case '\\':
14229  c = nextc();
14230  if (c == '\n') {
14231  space_seen = 1;
14232 #ifdef RIPPER
14233  ripper_dispatch_scan_event(parser, tSP);
14234 #endif
14235  goto retry; /* skip \\n */
14236  }
14237  pushback(c);
14238  return '\\';
14239 
14240  case '%':
14241  if (IS_lex_state(EXPR_BEG_ANY)) {
14242  int term;
14243  int paren;
14244 
14245  c = nextc();
14246  quotation:
14247  if (c == -1 || !ISALNUM(c)) {
14248  term = c;
14249  c = 'Q';
14250  }
14251  else {
14252  term = nextc();
14253  if (rb_enc_isalnum(term, current_enc) || !parser_isascii()) {
14254  yyerror("unknown type of %string");
14255  return 0;
14256  }
14257  }
14258  if (c == -1 || term == -1) {
14259  compile_error(PARSER_ARG "unterminated quoted string meets end of file");
14260  return 0;
14261  }
14262  paren = term;
14263  if (term == '(') term = ')';
14264  else if (term == '[') term = ']';
14265  else if (term == '{') term = '}';
14266  else if (term == '<') term = '>';
14267  else paren = 0;
14268 
14269  switch (c) {
14270  case 'Q':
14271  lex_strterm = NEW_STRTERM(str_dquote, term, paren);
14272  return tSTRING_BEG;
14273 
14274  case 'q':
14275  lex_strterm = NEW_STRTERM(str_squote, term, paren);
14276  return tSTRING_BEG;
14277 
14278  case 'W':
14279  lex_strterm = NEW_STRTERM(str_dword, term, paren);
14280  do {c = nextc();} while (ISSPACE(c));
14281  pushback(c);
14282  return tWORDS_BEG;
14283 
14284  case 'w':
14285  lex_strterm = NEW_STRTERM(str_sword, term, paren);
14286  do {c = nextc();} while (ISSPACE(c));
14287  pushback(c);
14288  return tQWORDS_BEG;
14289 
14290  case 'I':
14291  lex_strterm = NEW_STRTERM(str_dword, term, paren);
14292  do {c = nextc();} while (ISSPACE(c));
14293  pushback(c);
14294  return tSYMBOLS_BEG;
14295 
14296  case 'i':
14297  lex_strterm = NEW_STRTERM(str_sword, term, paren);
14298  do {c = nextc();} while (ISSPACE(c));
14299  pushback(c);
14300  return tQSYMBOLS_BEG;
14301 
14302  case 'x':
14303  lex_strterm = NEW_STRTERM(str_xquote, term, paren);
14304  return tXSTRING_BEG;
14305 
14306  case 'r':
14307  lex_strterm = NEW_STRTERM(str_regexp, term, paren);
14308  return tREGEXP_BEG;
14309 
14310  case 's':
14311  lex_strterm = NEW_STRTERM(str_ssym, term, paren);
14312  lex_state = EXPR_FNAME;
14313  return tSYMBEG;
14314 
14315  default:
14316  yyerror("unknown type of %string");
14317  return 0;
14318  }
14319  }
14320  if ((c = nextc()) == '=') {
14321  set_yylval_id('%');
14322  lex_state = EXPR_BEG;
14323  return tOP_ASGN;
14324  }
14325  if (IS_SPCARG(c)) {
14326  goto quotation;
14327  }
14328  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14329  pushback(c);
14330  warn_balanced("%%", "string literal");
14331  return '%';
14332 
14333  case '$':
14334  lex_state = EXPR_END;
14335  newtok();
14336  c = nextc();
14337  switch (c) {
14338  case '_': /* $_: last read line string */
14339  c = nextc();
14340  if (parser_is_identchar()) {
14341  tokadd('$');
14342  tokadd('_');
14343  break;
14344  }
14345  pushback(c);
14346  c = '_';
14347  /* fall through */
14348  case '~': /* $~: match-data */
14349  case '*': /* $*: argv */
14350  case '$': /* $$: pid */
14351  case '?': /* $?: last status */
14352  case '!': /* $!: error string */
14353  case '@': /* $@: error position */
14354  case '/': /* $/: input record separator */
14355  case '\\': /* $\: output record separator */
14356  case ';': /* $;: field separator */
14357  case ',': /* $,: output field separator */
14358  case '.': /* $.: last read line number */
14359  case '=': /* $=: ignorecase */
14360  case ':': /* $:: load path */
14361  case '<': /* $<: reading filename */
14362  case '>': /* $>: default output handle */
14363  case '\"': /* $": already loaded files */
14364  tokadd('$');
14365  tokadd(c);
14366  tokfix();
14368  return tGVAR;
14369 
14370  case '-':
14371  tokadd('$');
14372  tokadd(c);
14373  c = nextc();
14374  if (parser_is_identchar()) {
14375  if (tokadd_mbchar(c) == -1) return 0;
14376  }
14377  else {
14378  pushback(c);
14379  }
14380  gvar:
14381  tokfix();
14383  return tGVAR;
14384 
14385  case '&': /* $&: last match */
14386  case '`': /* $`: string before last match */
14387  case '\'': /* $': string after last match */
14388  case '+': /* $+: string matches last paren. */
14389  if (IS_lex_state_for(last_state, EXPR_FNAME)) {
14390  tokadd('$');
14391  tokadd(c);
14392  goto gvar;
14393  }
14395  return tBACK_REF;
14396 
14397  case '1': case '2': case '3':
14398  case '4': case '5': case '6':
14399  case '7': case '8': case '9':
14400  tokadd('$');
14401  do {
14402  tokadd(c);
14403  c = nextc();
14404  } while (c != -1 && ISDIGIT(c));
14405  pushback(c);
14406  if (IS_lex_state_for(last_state, EXPR_FNAME)) goto gvar;
14407  tokfix();
14408  set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
14409  return tNTH_REF;
14410 
14411  default:
14412  if (!parser_is_identchar()) {
14413  pushback(c);
14414  compile_error(PARSER_ARG "`$%c' is not allowed as a global variable name", c);
14415  return 0;
14416  }
14417  case '0':
14418  tokadd('$');
14419  }
14420  break;
14421 
14422  case '@':
14423  c = nextc();
14424  newtok();
14425  tokadd('@');
14426  if (c == '@') {
14427  tokadd('@');
14428  c = nextc();
14429  }
14430  if (c != -1 && (ISDIGIT(c) || !parser_is_identchar())) {
14431  pushback(c);
14432  if (tokidx == 1) {
14433  compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
14434  }
14435  else {
14436  compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
14437  }
14438  return 0;
14439  }
14440  break;
14441 
14442  case '_':
14443  if (was_bol() && whole_match_p("__END__", 7, 0)) {
14444  ruby__end__seen = 1;
14445  parser->eofp = Qtrue;
14446 #ifndef RIPPER
14447  return -1;
14448 #else
14449  lex_goto_eol(parser);
14450  ripper_dispatch_scan_event(parser, k__END__);
14451  return 0;
14452 #endif
14453  }
14454  newtok();
14455  break;
14456 
14457  default:
14458  if (!parser_is_identchar()) {
14459  rb_compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c);
14460  goto retry;
14461  }
14462 
14463  newtok();
14464  break;
14465  }
14466 
14467  mb = ENC_CODERANGE_7BIT;
14468  do {
14469  if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
14470  if (tokadd_mbchar(c) == -1) return 0;
14471  c = nextc();
14472  } while (parser_is_identchar());
14473  switch (tok()[0]) {
14474  case '@': case '$':
14475  pushback(c);
14476  break;
14477  default:
14478  if ((c == '!' || c == '?') && !peek('=')) {
14479  tokadd(c);
14480  }
14481  else {
14482  pushback(c);
14483  }
14484  }
14485  tokfix();
14486 
14487  {
14488  int result = 0;
14489 
14490  last_state = lex_state;
14491  switch (tok()[0]) {
14492  case '$':
14493  lex_state = EXPR_END;
14494  result = tGVAR;
14495  break;
14496  case '@':
14497  lex_state = EXPR_END;
14498  if (tok()[1] == '@')
14499  result = tCVAR;
14500  else
14501  result = tIVAR;
14502  break;
14503 
14504  default:
14505  if (toklast() == '!' || toklast() == '?') {
14506  result = tFID;
14507  }
14508  else {
14509  if (IS_lex_state(EXPR_FNAME)) {
14510  if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
14511  (!peek('=') || (peek_n('>', 1)))) {
14512  result = tIDENTIFIER;
14513  tokadd(c);
14514  tokfix();
14515  }
14516  else {
14517  pushback(c);
14518  }
14519  }
14520  if (result == 0 && ISUPPER(tok()[0])) {
14521  result = tCONSTANT;
14522  }
14523  else {
14524  result = tIDENTIFIER;
14525  }
14526  }
14527 
14528  if (IS_LABEL_POSSIBLE()) {
14529  if (IS_LABEL_SUFFIX(0)) {
14530  lex_state = EXPR_BEG;
14531  nextc();
14533  return tLABEL;
14534  }
14535  }
14536  if (mb == ENC_CODERANGE_7BIT && !IS_lex_state(EXPR_DOT)) {
14537  const struct kwtable *kw;
14538 
14539  /* See if it is a reserved word. */
14540  kw = rb_reserved_word(tok(), toklen());
14541  if (kw) {
14542  enum lex_state_e state = lex_state;
14543  lex_state = kw->state;
14544  if (state == EXPR_FNAME) {
14546  return kw->id[0];
14547  }
14548  if (lex_state == EXPR_BEG) {
14549  command_start = TRUE;
14550  }
14551  if (kw->id[0] == keyword_do) {
14552  if (lpar_beg && lpar_beg == paren_nest) {
14553  lpar_beg = 0;
14554  --paren_nest;
14555  return keyword_do_LAMBDA;
14556  }
14557  if (COND_P()) return keyword_do_cond;
14558  if (CMDARG_P() && state != EXPR_CMDARG)
14559  return keyword_do_block;
14560  if (state & (EXPR_BEG | EXPR_ENDARG))
14561  return keyword_do_block;
14562  return keyword_do;
14563  }
14564  if (state & (EXPR_BEG | EXPR_VALUE))
14565  return kw->id[0];
14566  else {
14567  if (kw->id[0] != kw->id[1])
14568  lex_state = EXPR_BEG;
14569  return kw->id[1];
14570  }
14571  }
14572  }
14573 
14574  if (IS_lex_state(EXPR_BEG_ANY | EXPR_ARG_ANY | EXPR_DOT)) {
14575  if (cmd_state) {
14576  lex_state = EXPR_CMDARG;
14577  }
14578  else {
14579  lex_state = EXPR_ARG;
14580  }
14581  }
14582  else if (lex_state == EXPR_FNAME) {
14583  lex_state = EXPR_ENDFN;
14584  }
14585  else {
14586  lex_state = EXPR_END;
14587  }
14588  }
14589  {
14590  ID ident = TOK_INTERN(!ENC_SINGLE(mb));
14591 
14592  set_yylval_name(ident);
14593  if (!IS_lex_state_for(last_state, EXPR_DOT|EXPR_FNAME) &&
14594  is_local_id(ident) && lvar_defined(ident)) {
14595  lex_state = EXPR_END;
14596  }
14597  }
14598  return result;
14599  }
14600 }
14601 
14602 #if YYPURE
14603 static int
14604 yylex(void *lval, void *p)
14605 #else
14606 yylex(void *p)
14607 #endif
14608 {
14609  struct parser_params *parser = (struct parser_params*)p;
14610  int t;
14611 
14612 #if YYPURE
14613  parser->parser_yylval = lval;
14614  parser->parser_yylval->val = Qundef;
14615 #endif
14616  t = parser_yylex(parser);
14617 #ifdef RIPPER
14618  if (!NIL_P(parser->delayed)) {
14619  ripper_dispatch_delayed_token(parser, t);
14620  return t;
14621  }
14622  if (t != 0)
14623  ripper_dispatch_scan_event(parser, t);
14624 #endif
14625 
14626  return t;
14627 }
14628 
14629 #ifndef RIPPER
14630 static NODE*
14631 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
14632 {
14633  NODE *n = (rb_node_newnode)(type, a0, a1, a2);
14635  return n;
14636 }
14637 
14638 static enum node_type
14639 nodetype(NODE *node) /* for debug */
14640 {
14641  return (enum node_type)nd_type(node);
14642 }
14643 
14644 static int
14646 {
14647  return nd_line(node);
14648 }
14649 
14650 static NODE*
14652 {
14653  if (node) {
14654  node = remove_begin(node);
14655  node->flags |= NODE_FL_NEWLINE;
14656  }
14657  return node;
14658 }
14659 
14660 static void
14661 fixpos(NODE *node, NODE *orig)
14662 {
14663  if (!node) return;
14664  if (!orig) return;
14665  if (orig == (NODE*)1) return;
14666  nd_set_line(node, nd_line(orig));
14667 }
14668 
14669 static void
14670 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
14671 {
14672  rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
14673 }
14674 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg))
14675 
14676 static void
14677 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
14678 {
14679  rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
14680 }
14681 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg))
14682 
14683 static NODE*
14684 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
14685 {
14686  NODE *end, *h = head, *nd;
14687 
14688  if (tail == 0) return head;
14689 
14690  if (h == 0) return tail;
14691  switch (nd_type(h)) {
14692  case NODE_LIT:
14693  case NODE_STR:
14694  case NODE_SELF:
14695  case NODE_TRUE:
14696  case NODE_FALSE:
14697  case NODE_NIL:
14698  parser_warning(h, "unused literal ignored");
14699  return tail;
14700  default:
14701  h = end = NEW_BLOCK(head);
14702  end->nd_end = end;
14703  fixpos(end, head);
14704  head = end;
14705  break;
14706  case NODE_BLOCK:
14707  end = h->nd_end;
14708  break;
14709  }
14710 
14711  nd = end->nd_head;
14712  switch (nd_type(nd)) {
14713  case NODE_RETURN:
14714  case NODE_BREAK:
14715  case NODE_NEXT:
14716  case NODE_REDO:
14717  case NODE_RETRY:
14718  if (RTEST(ruby_verbose)) {
14719  parser_warning(tail, "statement not reached");
14720  }
14721  break;
14722 
14723  default:
14724  break;
14725  }
14726 
14727  if (nd_type(tail) != NODE_BLOCK) {
14728  tail = NEW_BLOCK(tail);
14729  tail->nd_end = tail;
14730  }
14731  end->nd_next = tail;
14732  h->nd_end = tail->nd_end;
14733  return head;
14734 }
14735 
14736 /* append item to the list */
14737 static NODE*
14738 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
14739 {
14740  NODE *last;
14741 
14742  if (list == 0) return NEW_LIST(item);
14743  if (list->nd_next) {
14744  last = list->nd_next->nd_end;
14745  }
14746  else {
14747  last = list;
14748  }
14749 
14750  list->nd_alen += 1;
14751  last->nd_next = NEW_LIST(item);
14752  list->nd_next->nd_end = last->nd_next;
14753  return list;
14754 }
14755 
14756 /* concat two lists */
14757 static NODE*
14758 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14759 {
14760  NODE *last;
14761 
14762  if (head->nd_next) {
14763  last = head->nd_next->nd_end;
14764  }
14765  else {
14766  last = head;
14767  }
14768 
14769  head->nd_alen += tail->nd_alen;
14770  last->nd_next = tail;
14771  if (tail->nd_next) {
14772  head->nd_next->nd_end = tail->nd_next->nd_end;
14773  }
14774  else {
14775  head->nd_next->nd_end = tail;
14776  }
14777 
14778  return head;
14779 }
14780 
14781 static int
14783 {
14784  if (NIL_P(tail)) return 1;
14785  if (!rb_enc_compatible(head, tail)) {
14786  compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
14787  rb_enc_name(rb_enc_get(head)),
14788  rb_enc_name(rb_enc_get(tail)));
14789  rb_str_resize(head, 0);
14790  rb_str_resize(tail, 0);
14791  return 0;
14792  }
14793  rb_str_buf_append(head, tail);
14794  return 1;
14795 }
14796 
14797 /* concat two string literals */
14798 static NODE *
14800 {
14801  enum node_type htype;
14802  NODE *headlast;
14803  VALUE lit;
14804 
14805  if (!head) return tail;
14806  if (!tail) return head;
14807 
14808  htype = nd_type(head);
14809  if (htype == NODE_EVSTR) {
14810  NODE *node = NEW_DSTR(Qnil);
14811  head = list_append(node, head);
14812  htype = NODE_DSTR;
14813  }
14814  switch (nd_type(tail)) {
14815  case NODE_STR:
14816  if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
14817  nd_type(headlast) == NODE_STR) {
14818  htype = NODE_STR;
14819  lit = headlast->nd_lit;
14820  }
14821  else {
14822  lit = head->nd_lit;
14823  }
14824  if (htype == NODE_STR) {
14825  if (!literal_concat0(parser, lit, tail->nd_lit)) {
14826  error:
14827  rb_gc_force_recycle((VALUE)head);
14828  rb_gc_force_recycle((VALUE)tail);
14829  return 0;
14830  }
14831  rb_gc_force_recycle((VALUE)tail);
14832  }
14833  else {
14834  list_append(head, tail);
14835  }
14836  break;
14837 
14838  case NODE_DSTR:
14839  if (htype == NODE_STR) {
14840  if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
14841  goto error;
14842  tail->nd_lit = head->nd_lit;
14843  rb_gc_force_recycle((VALUE)head);
14844  head = tail;
14845  }
14846  else if (NIL_P(tail->nd_lit)) {
14847  append:
14848  head->nd_alen += tail->nd_alen - 1;
14849  head->nd_next->nd_end->nd_next = tail->nd_next;
14850  head->nd_next->nd_end = tail->nd_next->nd_end;
14851  rb_gc_force_recycle((VALUE)tail);
14852  }
14853  else if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
14854  nd_type(headlast) == NODE_STR) {
14855  lit = headlast->nd_lit;
14856  if (!literal_concat0(parser, lit, tail->nd_lit))
14857  goto error;
14858  tail->nd_lit = Qnil;
14859  goto append;
14860  }
14861  else {
14862  nd_set_type(tail, NODE_ARRAY);
14863  tail->nd_head = NEW_STR(tail->nd_lit);
14864  list_concat(head, tail);
14865  }
14866  break;
14867 
14868  case NODE_EVSTR:
14869  if (htype == NODE_STR) {
14870  nd_set_type(head, NODE_DSTR);
14871  head->nd_alen = 1;
14872  }
14873  list_append(head, tail);
14874  break;
14875  }
14876  return head;
14877 }
14878 
14879 static NODE *
14880 evstr2dstr_gen(struct parser_params *parser, NODE *node)
14881 {
14882  if (nd_type(node) == NODE_EVSTR) {
14883  node = list_append(NEW_DSTR(Qnil), node);
14884  }
14885  return node;
14886 }
14887 
14888 static NODE *
14889 new_evstr_gen(struct parser_params *parser, NODE *node)
14890 {
14891  NODE *head = node;
14892 
14893  if (node) {
14894  switch (nd_type(node)) {
14895  case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
14896  return node;
14897  }
14898  }
14899  return NEW_EVSTR(head);
14900 }
14901 
14902 static NODE *
14903 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
14904 {
14905  value_expr(recv);
14906  value_expr(arg1);
14907  return NEW_CALL(recv, id, NEW_LIST(arg1));
14908 }
14909 
14910 static NODE *
14911 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
14912 {
14913  value_expr(recv);
14914  return NEW_CALL(recv, id, 0);
14915 }
14916 
14917 static NODE*
14918 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14919 {
14920  value_expr(node1);
14921  value_expr(node2);
14922  if (node1) {
14923  switch (nd_type(node1)) {
14924  case NODE_DREGX:
14925  case NODE_DREGX_ONCE:
14926  return NEW_MATCH2(node1, node2);
14927 
14928  case NODE_LIT:
14929  if (RB_TYPE_P(node1->nd_lit, T_REGEXP)) {
14930  return NEW_MATCH2(node1, node2);
14931  }
14932  }
14933  }
14934 
14935  if (node2) {
14936  switch (nd_type(node2)) {
14937  case NODE_DREGX:
14938  case NODE_DREGX_ONCE:
14939  return NEW_MATCH3(node2, node1);
14940 
14941  case NODE_LIT:
14942  if (RB_TYPE_P(node2->nd_lit, T_REGEXP)) {
14943  return NEW_MATCH3(node2, node1);
14944  }
14945  }
14946  }
14947 
14948  return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
14949 }
14950 
14951 static NODE*
14952 gettable_gen(struct parser_params *parser, ID id)
14953 {
14954  switch (id) {
14955  case keyword_self:
14956  return NEW_SELF();
14957  case keyword_nil:
14958  return NEW_NIL();
14959  case keyword_true:
14960  return NEW_TRUE();
14961  case keyword_false:
14962  return NEW_FALSE();
14963  case keyword__FILE__:
14966  case keyword__LINE__:
14967  return NEW_LIT(INT2FIX(tokline));
14968  case keyword__ENCODING__:
14970  }
14971  switch (id_type(id)) {
14972  case ID_LOCAL:
14973  if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
14974  if (local_id(id)) return NEW_LVAR(id);
14975  /* method call without arguments */
14976  return NEW_VCALL(id);
14977  case ID_GLOBAL:
14978  return NEW_GVAR(id);
14979  case ID_INSTANCE:
14980  return NEW_IVAR(id);
14981  case ID_CONST:
14982  return NEW_CONST(id);
14983  case ID_CLASS:
14984  return NEW_CVAR(id);
14985  }
14986  compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14987  return 0;
14988 }
14989 #else /* !RIPPER */
14990 static int
14991 id_is_var_gen(struct parser_params *parser, ID id)
14992 {
14993  if (is_notop_id(id)) {
14994  switch (id & ID_SCOPE_MASK) {
14995  case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
14996  return 1;
14997  case ID_LOCAL:
14998  if (dyna_in_block() && dvar_defined(id)) return 1;
14999  if (local_id(id)) return 1;
15000  /* method call without arguments */
15001  return 0;
15002  }
15003  }
15004  compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
15005  return 0;
15006 }
15007 #endif /* !RIPPER */
15008 
15009 #if PARSER_DEBUG
15010 static const char *
15011 lex_state_name(enum lex_state_e state)
15012 {
15013  static const char names[][12] = {
15014  "EXPR_BEG", "EXPR_END", "EXPR_ENDARG", "EXPR_ENDFN", "EXPR_ARG",
15015  "EXPR_CMDARG", "EXPR_MID", "EXPR_FNAME", "EXPR_DOT", "EXPR_CLASS",
15016  "EXPR_VALUE",
15017  };
15018 
15019  if ((unsigned)state & ~(~0u << EXPR_MAX_STATE))
15020  return names[ffs(state)];
15021  return NULL;
15022 }
15023 #endif
15024 
15025 #ifdef RIPPER
15026 static VALUE
15027 assignable_gen(struct parser_params *parser, VALUE lhs)
15028 #else
15029 static NODE*
15030 assignable_gen(struct parser_params *parser, ID id, NODE *val)
15031 #endif
15032 {
15033 #ifdef RIPPER
15034  ID id = get_id(lhs);
15035 # define assignable_result(x) get_value(lhs)
15036 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
15037 #else
15038 # define assignable_result(x) (x)
15039 #endif
15040  if (!id) return assignable_result(0);
15041  switch (id) {
15042  case keyword_self:
15043  yyerror("Can't change the value of self");
15044  goto error;
15045  case keyword_nil:
15046  yyerror("Can't assign to nil");
15047  goto error;
15048  case keyword_true:
15049  yyerror("Can't assign to true");
15050  goto error;
15051  case keyword_false:
15052  yyerror("Can't assign to false");
15053  goto error;
15054  case keyword__FILE__:
15055  yyerror("Can't assign to __FILE__");
15056  goto error;
15057  case keyword__LINE__:
15058  yyerror("Can't assign to __LINE__");
15059  goto error;
15060  case keyword__ENCODING__:
15061  yyerror("Can't assign to __ENCODING__");
15062  goto error;
15063  }
15064  switch (id_type(id)) {
15065  case ID_LOCAL:
15066  if (dyna_in_block()) {
15067  if (dvar_curr(id)) {
15068  return assignable_result(NEW_DASGN_CURR(id, val));
15069  }
15070  else if (dvar_defined(id)) {
15071  return assignable_result(NEW_DASGN(id, val));
15072  }
15073  else if (local_id(id)) {
15074  return assignable_result(NEW_LASGN(id, val));
15075  }
15076  else {
15077  dyna_var(id);
15078  return assignable_result(NEW_DASGN_CURR(id, val));
15079  }
15080  }
15081  else {
15082  if (!local_id(id)) {
15083  local_var(id);
15084  }
15085  return assignable_result(NEW_LASGN(id, val));
15086  }
15087  break;
15088  case ID_GLOBAL:
15089  return assignable_result(NEW_GASGN(id, val));
15090  case ID_INSTANCE:
15091  return assignable_result(NEW_IASGN(id, val));
15092  case ID_CONST:
15093  if (!in_def && !in_single)
15094  return assignable_result(NEW_CDECL(id, val, 0));
15095  yyerror("dynamic constant assignment");
15096  break;
15097  case ID_CLASS:
15098  return assignable_result(NEW_CVASGN(id, val));
15099  default:
15100  compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
15101  }
15102  error:
15103  return assignable_result(0);
15104 #undef assignable_result
15105 #undef parser_yyerror
15106 }
15107 
15108 static int
15110 {
15111  VALUE s;
15112  if (name == idUScore) return 1;
15113  if (!is_local_id(name)) return 0;
15114  s = rb_id2str(name);
15115  if (!s) return 0;
15116  return RSTRING_PTR(s)[0] == '_';
15117 }
15118 
15119 #define LVAR_USED ((ID)1 << (sizeof(ID) * CHAR_BIT - 1))
15120 
15121 static ID
15122 shadowing_lvar_gen(struct parser_params *parser, ID name)
15123 {
15124  if (is_private_local_id(name)) return name;
15125  if (dyna_in_block()) {
15126  if (dvar_curr(name)) {
15127  yyerror("duplicated argument name");
15128  }
15129  else if (dvar_defined_get(name) || local_id(name)) {
15130  rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
15131  vtable_add(lvtbl->vars, name);
15132  if (lvtbl->used) {
15134  }
15135  }
15136  }
15137  else {
15138  if (local_id(name)) {
15139  yyerror("duplicated argument name");
15140  }
15141  }
15142  return name;
15143 }
15144 
15145 static void
15146 new_bv_gen(struct parser_params *parser, ID name)
15147 {
15148  if (!name) return;
15149  if (!is_local_id(name)) {
15150  compile_error(PARSER_ARG "invalid local variable - %s",
15151  rb_id2name(name));
15152  return;
15153  }
15154  shadowing_lvar(name);
15155  dyna_var(name);
15156 }
15157 
15158 #ifndef RIPPER
15159 static NODE *
15160 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
15161 {
15162  if (recv && nd_type(recv) == NODE_SELF)
15163  recv = (NODE *)1;
15164  return NEW_ATTRASGN(recv, tASET, idx);
15165 }
15166 
15167 static void
15168 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15169 {
15170  if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
15171  compile_error(PARSER_ARG "both block arg and actual block given");
15172  }
15173 }
15174 
15175 static const char id_type_names[][9] = {
15176  "LOCAL",
15177  "INSTANCE",
15178  "", /* INSTANCE2 */
15179  "GLOBAL",
15180  "ATTRSET",
15181  "CONST",
15182  "CLASS",
15183  "JUNK",
15184 };
15185 
15186 ID
15188 {
15189  if (!is_notop_id(id)) {
15190  switch (id) {
15191  case tAREF: case tASET:
15192  return tASET; /* only exception */
15193  }
15194  rb_name_error(id, "cannot make operator ID :%s attrset", rb_id2name(id));
15195  }
15196  else {
15197  int scope = (int)(id & ID_SCOPE_MASK);
15198  switch (scope) {
15199  case ID_LOCAL: case ID_INSTANCE: case ID_GLOBAL:
15200  case ID_CONST: case ID_CLASS: case ID_JUNK:
15201  break;
15202  case ID_ATTRSET:
15203  return id;
15204  default:
15205  rb_name_error(id, "cannot make %s ID %+"PRIsVALUE" attrset",
15206  id_type_names[scope], ID2SYM(id));
15207 
15208  }
15209  }
15210  id &= ~ID_SCOPE_MASK;
15211  id |= ID_ATTRSET;
15212  return id;
15213 }
15214 
15215 static NODE *
15216 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
15217 {
15218  if (recv && nd_type(recv) == NODE_SELF)
15219  recv = (NODE *)1;
15220  return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
15221 }
15222 
15223 static void
15225 {
15226  switch (nd_type(node)) {
15227  case NODE_NTH_REF:
15228  compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
15229  break;
15230  case NODE_BACK_REF:
15231  compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
15232  break;
15233  }
15234 }
15235 
15236 static NODE *
15237 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15238 {
15239  if (!node2) return node1;
15240  switch (nd_type(node1)) {
15241  case NODE_BLOCK_PASS:
15242  if (node1->nd_head)
15243  node1->nd_head = arg_concat(node1->nd_head, node2);
15244  else
15245  node1->nd_head = NEW_LIST(node2);
15246  return node1;
15247  case NODE_ARGSPUSH:
15248  if (nd_type(node2) != NODE_ARRAY) break;
15249  node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
15250  nd_set_type(node1, NODE_ARGSCAT);
15251  return node1;
15252  case NODE_ARGSCAT:
15253  if (nd_type(node2) != NODE_ARRAY ||
15254  nd_type(node1->nd_body) != NODE_ARRAY) break;
15255  node1->nd_body = list_concat(node1->nd_body, node2);
15256  return node1;
15257  }
15258  return NEW_ARGSCAT(node1, node2);
15259 }
15260 
15261 static NODE *
15262 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15263 {
15264  if (!node1) return NEW_LIST(node2);
15265  switch (nd_type(node1)) {
15266  case NODE_ARRAY:
15267  return list_append(node1, node2);
15268  case NODE_BLOCK_PASS:
15269  node1->nd_head = arg_append(node1->nd_head, node2);
15270  return node1;
15271  case NODE_ARGSPUSH:
15272  node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
15273  nd_set_type(node1, NODE_ARGSCAT);
15274  return node1;
15275  }
15276  return NEW_ARGSPUSH(node1, node2);
15277 }
15278 
15279 static NODE *
15281 {
15282  if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
15283  if (nd_type(node) == NODE_ARRAY) return node;
15284  return 0;
15285 }
15286 
15287 static NODE *
15288 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
15289 {
15290  if (!lhs) return 0;
15291 
15292  switch (nd_type(lhs)) {
15293  case NODE_GASGN:
15294  case NODE_IASGN:
15295  case NODE_IASGN2:
15296  case NODE_LASGN:
15297  case NODE_DASGN:
15298  case NODE_DASGN_CURR:
15299  case NODE_MASGN:
15300  case NODE_CDECL:
15301  case NODE_CVASGN:
15302  lhs->nd_value = rhs;
15303  break;
15304 
15305  case NODE_ATTRASGN:
15306  case NODE_CALL:
15307  lhs->nd_args = arg_append(lhs->nd_args, rhs);
15308  break;
15309 
15310  default:
15311  /* should not happen */
15312  break;
15313  }
15314 
15315  return lhs;
15316 }
15317 
15318 static int
15319 value_expr_gen(struct parser_params *parser, NODE *node)
15320 {
15321  int cond = 0;
15322 
15323  if (!node) {
15324  rb_warning0("empty expression");
15325  }
15326  while (node) {
15327  switch (nd_type(node)) {
15328  case NODE_DEFN:
15329  case NODE_DEFS:
15330  parser_warning(node, "void value expression");
15331  return FALSE;
15332 
15333  case NODE_RETURN:
15334  case NODE_BREAK:
15335  case NODE_NEXT:
15336  case NODE_REDO:
15337  case NODE_RETRY:
15338  if (!cond) yyerror("void value expression");
15339  /* or "control never reach"? */
15340  return FALSE;
15341 
15342  case NODE_BLOCK:
15343  while (node->nd_next) {
15344  node = node->nd_next;
15345  }
15346  node = node->nd_head;
15347  break;
15348 
15349  case NODE_BEGIN:
15350  node = node->nd_body;
15351  break;
15352 
15353  case NODE_IF:
15354  if (!node->nd_body) {
15355  node = node->nd_else;
15356  break;
15357  }
15358  else if (!node->nd_else) {
15359  node = node->nd_body;
15360  break;
15361  }
15362  if (!value_expr(node->nd_body)) return FALSE;
15363  node = node->nd_else;
15364  break;
15365 
15366  case NODE_AND:
15367  case NODE_OR:
15368  cond = 1;
15369  node = node->nd_2nd;
15370  break;
15371 
15372  default:
15373  return TRUE;
15374  }
15375  }
15376 
15377  return TRUE;
15378 }
15379 
15380 static void
15381 void_expr_gen(struct parser_params *parser, NODE *node)
15382 {
15383  const char *useless = 0;
15384 
15385  if (!RTEST(ruby_verbose)) return;
15386 
15387  if (!node) return;
15388  switch (nd_type(node)) {
15389  case NODE_CALL:
15390  switch (node->nd_mid) {
15391  case '+':
15392  case '-':
15393  case '*':
15394  case '/':
15395  case '%':
15396  case tPOW:
15397  case tUPLUS:
15398  case tUMINUS:
15399  case '|':
15400  case '^':
15401  case '&':
15402  case tCMP:
15403  case '>':
15404  case tGEQ:
15405  case '<':
15406  case tLEQ:
15407  case tEQ:
15408  case tNEQ:
15409  useless = rb_id2name(node->nd_mid);
15410  break;
15411  }
15412  break;
15413 
15414  case NODE_LVAR:
15415  case NODE_DVAR:
15416  case NODE_GVAR:
15417  case NODE_IVAR:
15418  case NODE_CVAR:
15419  case NODE_NTH_REF:
15420  case NODE_BACK_REF:
15421  useless = "a variable";
15422  break;
15423  case NODE_CONST:
15424  useless = "a constant";
15425  break;
15426  case NODE_LIT:
15427  case NODE_STR:
15428  case NODE_DSTR:
15429  case NODE_DREGX:
15430  case NODE_DREGX_ONCE:
15431  useless = "a literal";
15432  break;
15433  case NODE_COLON2:
15434  case NODE_COLON3:
15435  useless = "::";
15436  break;
15437  case NODE_DOT2:
15438  useless = "..";
15439  break;
15440  case NODE_DOT3:
15441  useless = "...";
15442  break;
15443  case NODE_SELF:
15444  useless = "self";
15445  break;
15446  case NODE_NIL:
15447  useless = "nil";
15448  break;
15449  case NODE_TRUE:
15450  useless = "true";
15451  break;
15452  case NODE_FALSE:
15453  useless = "false";
15454  break;
15455  case NODE_DEFINED:
15456  useless = "defined?";
15457  break;
15458  }
15459 
15460  if (useless) {
15461  int line = ruby_sourceline;
15462 
15463  ruby_sourceline = nd_line(node);
15464  rb_warnS("possibly useless use of %s in void context", useless);
15465  ruby_sourceline = line;
15466  }
15467 }
15468 
15469 static void
15470 void_stmts_gen(struct parser_params *parser, NODE *node)
15471 {
15472  if (!RTEST(ruby_verbose)) return;
15473  if (!node) return;
15474  if (nd_type(node) != NODE_BLOCK) return;
15475 
15476  for (;;) {
15477  if (!node->nd_next) return;
15478  void_expr0(node->nd_head);
15479  node = node->nd_next;
15480  }
15481 }
15482 
15483 static NODE *
15485 {
15486  NODE **n = &node, *n1 = node;
15487  while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
15488  *n = n1 = n1->nd_body;
15489  }
15490  return node;
15491 }
15492 
15493 static void
15494 reduce_nodes_gen(struct parser_params *parser, NODE **body)
15495 {
15496  NODE *node = *body;
15497 
15498  if (!node) {
15499  *body = NEW_NIL();
15500  return;
15501  }
15502 #define subnodes(n1, n2) \
15503  ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
15504  (!node->n2) ? (body = &node->n1, 1) : \
15505  (reduce_nodes(&node->n1), body = &node->n2, 1))
15506 
15507  while (node) {
15508  int newline = (int)(node->flags & NODE_FL_NEWLINE);
15509  switch (nd_type(node)) {
15510  end:
15511  case NODE_NIL:
15512  *body = 0;
15513  return;
15514  case NODE_RETURN:
15515  *body = node = node->nd_stts;
15516  if (newline && node) node->flags |= NODE_FL_NEWLINE;
15517  continue;
15518  case NODE_BEGIN:
15519  *body = node = node->nd_body;
15520  if (newline && node) node->flags |= NODE_FL_NEWLINE;
15521  continue;
15522  case NODE_BLOCK:
15523  body = &node->nd_end->nd_head;
15524  break;
15525  case NODE_IF:
15526  if (subnodes(nd_body, nd_else)) break;
15527  return;
15528  case NODE_CASE:
15529  body = &node->nd_body;
15530  break;
15531  case NODE_WHEN:
15532  if (!subnodes(nd_body, nd_next)) goto end;
15533  break;
15534  case NODE_ENSURE:
15535  if (!subnodes(nd_head, nd_resq)) goto end;
15536  break;
15537  case NODE_RESCUE:
15538  if (node->nd_else) {
15539  body = &node->nd_resq;
15540  break;
15541  }
15542  if (!subnodes(nd_head, nd_resq)) goto end;
15543  break;
15544  default:
15545  return;
15546  }
15547  node = *body;
15548  if (newline && node) node->flags |= NODE_FL_NEWLINE;
15549  }
15550 
15551 #undef subnodes
15552 }
15553 
15554 static int
15556 {
15557  if (!node) return 1;
15558  switch (nd_type(node)) {
15559  case NODE_HASH:
15560  if (!(node = node->nd_head)) break;
15561  case NODE_ARRAY:
15562  do {
15563  if (!is_static_content(node->nd_head)) return 0;
15564  } while ((node = node->nd_next) != 0);
15565  case NODE_LIT:
15566  case NODE_STR:
15567  case NODE_NIL:
15568  case NODE_TRUE:
15569  case NODE_FALSE:
15570  case NODE_ZARRAY:
15571  break;
15572  default:
15573  return 0;
15574  }
15575  return 1;
15576 }
15577 
15578 static int
15579 assign_in_cond(struct parser_params *parser, NODE *node)
15580 {
15581  switch (nd_type(node)) {
15582  case NODE_MASGN:
15583  yyerror("multiple assignment in conditional");
15584  return 1;
15585 
15586  case NODE_LASGN:
15587  case NODE_DASGN:
15588  case NODE_DASGN_CURR:
15589  case NODE_GASGN:
15590  case NODE_IASGN:
15591  break;
15592 
15593  default:
15594  return 0;
15595  }
15596 
15597  if (!node->nd_value) return 1;
15598  if (is_static_content(node->nd_value)) {
15599  /* reports always */
15600  parser_warn(node->nd_value, "found = in conditional, should be ==");
15601  }
15602  return 1;
15603 }
15604 
15605 static void
15606 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15607 {
15608  if (!e_option_supplied(parser)) parser_warn(node, str);
15609 }
15610 
15611 static void
15612 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15613 {
15614  if (!e_option_supplied(parser)) parser_warning(node, str);
15615 }
15616 
15617 static void
15618 fixup_nodes(NODE **rootnode)
15619 {
15620  NODE *node, *next, *head;
15621 
15622  for (node = *rootnode; node; node = next) {
15623  enum node_type type;
15624  VALUE val;
15625 
15626  next = node->nd_next;
15627  head = node->nd_head;
15628  rb_gc_force_recycle((VALUE)node);
15629  *rootnode = next;
15630  switch (type = nd_type(head)) {
15631  case NODE_DOT2:
15632  case NODE_DOT3:
15633  val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
15634  type == NODE_DOT3);
15635  rb_gc_force_recycle((VALUE)head->nd_beg);
15636  rb_gc_force_recycle((VALUE)head->nd_end);
15637  nd_set_type(head, NODE_LIT);
15638  head->nd_lit = val;
15639  break;
15640  default:
15641  break;
15642  }
15643  }
15644 }
15645 
15646 static NODE *cond0(struct parser_params*,NODE*);
15647 
15648 static NODE*
15649 range_op(struct parser_params *parser, NODE *node)
15650 {
15651  enum node_type type;
15652 
15653  if (node == 0) return 0;
15654 
15655  type = nd_type(node);
15656  value_expr(node);
15657  if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
15658  warn_unless_e_option(parser, node, "integer literal in conditional range");
15659  return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
15660  }
15661  return cond0(parser, node);
15662 }
15663 
15664 static int
15666 {
15667  if (!node) return 1; /* same as NODE_NIL */
15668  switch (nd_type(node)) {
15669  case NODE_LIT:
15670  case NODE_STR:
15671  case NODE_DSTR:
15672  case NODE_EVSTR:
15673  case NODE_DREGX:
15674  case NODE_DREGX_ONCE:
15675  case NODE_DSYM:
15676  return 2;
15677  case NODE_TRUE:
15678  case NODE_FALSE:
15679  case NODE_NIL:
15680  return 1;
15681  }
15682  return 0;
15683 }
15684 
15685 static NODE*
15686 cond0(struct parser_params *parser, NODE *node)
15687 {
15688  if (node == 0) return 0;
15689  assign_in_cond(parser, node);
15690 
15691  switch (nd_type(node)) {
15692  case NODE_DSTR:
15693  case NODE_EVSTR:
15694  case NODE_STR:
15695  rb_warn0("string literal in condition");
15696  break;
15697 
15698  case NODE_DREGX:
15699  case NODE_DREGX_ONCE:
15700  warning_unless_e_option(parser, node, "regex literal in condition");
15701  return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
15702 
15703  case NODE_AND:
15704  case NODE_OR:
15705  node->nd_1st = cond0(parser, node->nd_1st);
15706  node->nd_2nd = cond0(parser, node->nd_2nd);
15707  break;
15708 
15709  case NODE_DOT2:
15710  case NODE_DOT3:
15711  node->nd_beg = range_op(parser, node->nd_beg);
15712  node->nd_end = range_op(parser, node->nd_end);
15713  if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
15714  else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
15715  if (!e_option_supplied(parser)) {
15716  int b = literal_node(node->nd_beg);
15717  int e = literal_node(node->nd_end);
15718  if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
15719  parser_warn(node, "range literal in condition");
15720  }
15721  }
15722  break;
15723 
15724  case NODE_DSYM:
15725  parser_warning(node, "literal in condition");
15726  break;
15727 
15728  case NODE_LIT:
15729  if (RB_TYPE_P(node->nd_lit, T_REGEXP)) {
15730  warn_unless_e_option(parser, node, "regex literal in condition");
15731  nd_set_type(node, NODE_MATCH);
15732  }
15733  else {
15734  parser_warning(node, "literal in condition");
15735  }
15736  default:
15737  break;
15738  }
15739  return node;
15740 }
15741 
15742 static NODE*
15743 cond_gen(struct parser_params *parser, NODE *node)
15744 {
15745  if (node == 0) return 0;
15746  return cond0(parser, node);
15747 }
15748 
15749 static NODE*
15750 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
15751 {
15752  value_expr(left);
15753  if (left && (enum node_type)nd_type(left) == type) {
15754  NODE *node = left, *second;
15755  while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
15756  node = second;
15757  }
15758  node->nd_2nd = NEW_NODE(type, second, right, 0);
15759  return left;
15760  }
15761  return NEW_NODE(type, left, right, 0);
15762 }
15763 
15764 static void
15765 no_blockarg(struct parser_params *parser, NODE *node)
15766 {
15767  if (node && nd_type(node) == NODE_BLOCK_PASS) {
15768  compile_error(PARSER_ARG "block argument should not be given");
15769  }
15770 }
15771 
15772 static NODE *
15773 ret_args_gen(struct parser_params *parser, NODE *node)
15774 {
15775  if (node) {
15776  no_blockarg(parser, node);
15777  if (nd_type(node) == NODE_ARRAY) {
15778  if (node->nd_next == 0) {
15779  node = node->nd_head;
15780  }
15781  else {
15782  nd_set_type(node, NODE_VALUES);
15783  }
15784  }
15785  }
15786  return node;
15787 }
15788 
15789 static NODE *
15790 new_yield_gen(struct parser_params *parser, NODE *node)
15791 {
15792  if (node) no_blockarg(parser, node);
15793 
15794  return NEW_YIELD(node);
15795 }
15796 
15797 static NODE*
15799 {
15800  switch (TYPE(node->nd_lit)) {
15801  case T_FIXNUM:
15802  node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
15803  break;
15804  case T_BIGNUM:
15805  node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
15806  break;
15807  case T_FLOAT:
15808 #if USE_FLONUM
15809  if (FLONUM_P(node->nd_lit)) {
15810  node->nd_lit = DBL2NUM(-RFLOAT_VALUE(node->nd_lit));
15811  }
15812  else {
15813  RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15814  }
15815 #else
15816  RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15817 #endif
15818  break;
15819  default:
15820  break;
15821  }
15822  return node;
15823 }
15824 
15825 static NODE *
15826 arg_blk_pass(NODE *node1, NODE *node2)
15827 {
15828  if (node2) {
15829  node2->nd_head = node1;
15830  return node2;
15831  }
15832  return node1;
15833 }
15834 
15835 
15836 static NODE*
15837 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, NODE *tail)
15838 {
15839  int saved_line = ruby_sourceline;
15840  struct rb_args_info *args = tail->nd_ainfo;
15841 
15842  args->pre_args_num = m ? rb_long2int(m->nd_plen) : 0;
15843  args->pre_init = m ? m->nd_next : 0;
15844 
15845  args->post_args_num = p ? rb_long2int(p->nd_plen) : 0;
15846  args->post_init = p ? p->nd_next : 0;
15847  args->first_post_arg = p ? p->nd_pid : 0;
15848 
15849  args->rest_arg = r;
15850 
15851  args->opt_args = o;
15852 
15853  ruby_sourceline = saved_line;
15854 
15855  return tail;
15856 }
15857 
15858 static NODE*
15859 new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b)
15860 {
15861  int saved_line = ruby_sourceline;
15862  struct rb_args_info *args;
15863  NODE *kw_rest_arg = 0;
15864  NODE *node;
15865 
15866  args = ALLOC(struct rb_args_info);
15867  MEMZERO(args, struct rb_args_info, 1);
15868  node = NEW_NODE(NODE_ARGS, 0, 0, args);
15869 
15870  args->block_arg = b;
15871  args->kw_args = k;
15872  if (k && !kr) kr = internal_id();
15873  if (kr) {
15874  arg_var(kr);
15875  kw_rest_arg = NEW_DVAR(kr);
15876  }
15877  args->kw_rest_arg = kw_rest_arg;
15878 
15879  ruby_sourceline = saved_line;
15880  return node;
15881 }
15882 
15883 static NODE*
15884 dsym_node_gen(struct parser_params *parser, NODE *node)
15885 {
15886  VALUE lit;
15887 
15888  if (!node) {
15889  return NEW_LIT(ID2SYM(idNULL));
15890  }
15891 
15892  switch (nd_type(node)) {
15893  case NODE_DSTR:
15894  nd_set_type(node, NODE_DSYM);
15895  break;
15896  case NODE_STR:
15897  lit = node->nd_lit;
15898  node->nd_lit = ID2SYM(rb_intern_str(lit));
15899  nd_set_type(node, NODE_LIT);
15900  break;
15901  default:
15902  node = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST(node));
15903  break;
15904  }
15905  return node;
15906 }
15907 #endif /* !RIPPER */
15908 
15909 #ifndef RIPPER
15910 static NODE *
15911 new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
15912 {
15913  NODE *asgn;
15914 
15915  if (lhs) {
15916  ID vid = lhs->nd_vid;
15917  if (op == tOROP) {
15918  lhs->nd_value = rhs;
15919  asgn = NEW_OP_ASGN_OR(gettable(vid), lhs);
15920  if (is_asgn_or_id(vid)) {
15921  asgn->nd_aid = vid;
15922  }
15923  }
15924  else if (op == tANDOP) {
15925  lhs->nd_value = rhs;
15926  asgn = NEW_OP_ASGN_AND(gettable(vid), lhs);
15927  }
15928  else {
15929  asgn = lhs;
15930  asgn->nd_value = NEW_CALL(gettable(vid), op, NEW_LIST(rhs));
15931  }
15932  }
15933  else {
15934  asgn = NEW_BEGIN(0);
15935  }
15936  return asgn;
15937 }
15938 
15939 static NODE *
15940 new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs)
15941 {
15942  NODE *asgn;
15943 
15944  if (op == tOROP) {
15945  op = 0;
15946  }
15947  else if (op == tANDOP) {
15948  op = 1;
15949  }
15950  asgn = NEW_OP_ASGN2(lhs, attr, op, rhs);
15951  fixpos(asgn, lhs);
15952  return asgn;
15953 }
15954 
15955 static NODE *
15956 new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
15957 {
15958  NODE *asgn;
15959 
15960  if (op == tOROP) {
15961  op = 0;
15962  }
15963  else if (op == tANDOP) {
15964  op = 1;
15965  }
15966  if (lhs) {
15967  asgn = NEW_OP_CDECL(lhs, op, rhs);
15968  }
15969  else {
15970  asgn = NEW_BEGIN(0);
15971  }
15972  fixpos(asgn, lhs);
15973  return asgn;
15974 }
15975 #else
15976 static VALUE
15977 new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs)
15978 {
15979  return dispatch3(opassign, lhs, op, rhs);
15980 }
15981 
15982 static VALUE
15983 new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs)
15984 {
15985  VALUE recv = dispatch3(field, lhs, type, attr);
15986  return dispatch3(opassign, recv, op, rhs);
15987 }
15988 #endif
15989 
15990 static void
15991 warn_unused_var(struct parser_params *parser, struct local_vars *local)
15992 {
15993  int i, cnt;
15994  ID *v, *u;
15995 
15996  if (!local->used) return;
15997  v = local->vars->tbl;
15998  u = local->used->tbl;
15999  cnt = local->used->pos;
16000  if (cnt != local->vars->pos) {
16001  rb_bug("local->used->pos != local->vars->pos");
16002  }
16003  for (i = 0; i < cnt; ++i) {
16004  if (!v[i] || (u[i] & LVAR_USED)) continue;
16005  if (is_private_local_id(v[i])) continue;
16006  rb_warn4S(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i]));
16007  }
16008 }
16009 
16010 static void
16011 local_push_gen(struct parser_params *parser, int inherit_dvars)
16012 {
16013  struct local_vars *local;
16014 
16015  local = ALLOC(struct local_vars);
16016  local->prev = lvtbl;
16017  local->args = vtable_alloc(0);
16018  local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
16019  local->used = !(inherit_dvars &&
16021  RTEST(ruby_verbose) ? vtable_alloc(0) : 0;
16022  local->cmdargs = cmdarg_stack;
16023  cmdarg_stack = 0;
16024  lvtbl = local;
16025 }
16026 
16027 static void
16029 {
16030  struct local_vars *local = lvtbl->prev;
16031  if (lvtbl->used) {
16032  warn_unused_var(parser, lvtbl);
16033  vtable_free(lvtbl->used);
16034  }
16035  vtable_free(lvtbl->args);
16036  vtable_free(lvtbl->vars);
16037  cmdarg_stack = lvtbl->cmdargs;
16038  xfree(lvtbl);
16039  lvtbl = local;
16040 }
16041 
16042 #ifndef RIPPER
16043 static ID*
16044 vtable_tblcpy(ID *buf, const struct vtable *src)
16045 {
16046  int i, cnt = vtable_size(src);
16047 
16048  if (cnt > 0) {
16049  buf[0] = cnt;
16050  for (i = 0; i < cnt; i++) {
16051  buf[i] = src->tbl[i];
16052  }
16053  return buf;
16054  }
16055  return 0;
16056 }
16057 
16058 static ID*
16060 {
16061  int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars);
16062  ID *buf;
16063 
16064  if (cnt <= 0) return 0;
16065  buf = ALLOC_N(ID, cnt + 1);
16066  vtable_tblcpy(buf+1, lvtbl->args);
16067  vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars);
16068  buf[0] = cnt;
16069  return buf;
16070 }
16071 #endif
16072 
16073 static int
16074 arg_var_gen(struct parser_params *parser, ID id)
16075 {
16076  vtable_add(lvtbl->args, id);
16077  return vtable_size(lvtbl->args) - 1;
16078 }
16079 
16080 static int
16081 local_var_gen(struct parser_params *parser, ID id)
16082 {
16083  vtable_add(lvtbl->vars, id);
16084  if (lvtbl->used) {
16086  }
16087  return vtable_size(lvtbl->vars) - 1;
16088 }
16089 
16090 static int
16091 local_id_gen(struct parser_params *parser, ID id)
16092 {
16093  struct vtable *vars, *args, *used;
16094 
16095  vars = lvtbl->vars;
16096  args = lvtbl->args;
16097  used = lvtbl->used;
16098 
16099  while (vars && POINTER_P(vars->prev)) {
16100  vars = vars->prev;
16101  args = args->prev;
16102  if (used) used = used->prev;
16103  }
16104 
16105  if (vars && vars->prev == DVARS_INHERIT) {
16106  return rb_local_defined(id);
16107  }
16108  else if (vtable_included(args, id)) {
16109  return 1;
16110  }
16111  else {
16112  int i = vtable_included(vars, id);
16113  if (i && used) used->tbl[i-1] |= LVAR_USED;
16114  return i != 0;
16115  }
16116 }
16117 
16118 static const struct vtable *
16120 {
16121  lvtbl->args = vtable_alloc(lvtbl->args);
16122  lvtbl->vars = vtable_alloc(lvtbl->vars);
16123  if (lvtbl->used) {
16124  lvtbl->used = vtable_alloc(lvtbl->used);
16125  }
16126  return lvtbl->args;
16127 }
16128 
16129 static void
16130 dyna_pop_1(struct parser_params *parser)
16131 {
16132  struct vtable *tmp;
16133 
16134  if ((tmp = lvtbl->used) != 0) {
16135  warn_unused_var(parser, lvtbl);
16136  lvtbl->used = lvtbl->used->prev;
16137  vtable_free(tmp);
16138  }
16139  tmp = lvtbl->args;
16140  lvtbl->args = lvtbl->args->prev;
16141  vtable_free(tmp);
16142  tmp = lvtbl->vars;
16143  lvtbl->vars = lvtbl->vars->prev;
16144  vtable_free(tmp);
16145 }
16146 
16147 static void
16148 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
16149 {
16150  while (lvtbl->args != lvargs) {
16151  dyna_pop_1(parser);
16152  if (!lvtbl->args) {
16153  struct local_vars *local = lvtbl->prev;
16154  xfree(lvtbl);
16155  lvtbl = local;
16156  }
16157  }
16158  dyna_pop_1(parser);
16159 }
16160 
16161 static int
16163 {
16164  return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
16165 }
16166 
16167 static int
16168 dvar_defined_gen(struct parser_params *parser, ID id, int get)
16169 {
16170  struct vtable *vars, *args, *used;
16171  int i;
16172 
16173  args = lvtbl->args;
16174  vars = lvtbl->vars;
16175  used = lvtbl->used;
16176 
16177  while (POINTER_P(vars)) {
16178  if (vtable_included(args, id)) {
16179  return 1;
16180  }
16181  if ((i = vtable_included(vars, id)) != 0) {
16182  if (used) used->tbl[i-1] |= LVAR_USED;
16183  return 1;
16184  }
16185  args = args->prev;
16186  vars = vars->prev;
16187  if (get) used = 0;
16188  if (used) used = used->prev;
16189  }
16190 
16191  if (vars == DVARS_INHERIT) {
16192  return rb_dvar_defined(id);
16193  }
16194 
16195  return 0;
16196 }
16197 
16198 static int
16199 dvar_curr_gen(struct parser_params *parser, ID id)
16200 {
16201  return (vtable_included(lvtbl->args, id) ||
16202  vtable_included(lvtbl->vars, id));
16203 }
16204 
16205 #ifndef RIPPER
16206 static void
16208 {
16209  int c = RE_OPTION_ENCODING_IDX(options);
16210 
16211  if (c) {
16212  int opt, idx;
16213  rb_char_to_option_kcode(c, &opt, &idx);
16214  if (idx != ENCODING_GET(str) &&
16216  goto error;
16217  }
16218  ENCODING_SET(str, idx);
16219  }
16220  else if (RE_OPTION_ENCODING_NONE(options)) {
16221  if (!ENCODING_IS_ASCII8BIT(str) &&
16223  c = 'n';
16224  goto error;
16225  }
16227  }
16228  else if (current_enc == rb_usascii_encoding()) {
16230  /* raise in re.c */
16232  }
16233  else {
16235  }
16236  }
16237  return;
16238 
16239  error:
16241  "regexp encoding option '%c' differs from source encoding '%s'",
16242  c, rb_enc_name(rb_enc_get(str)));
16243 }
16244 
16245 static int
16247 {
16248  VALUE err;
16249  reg_fragment_setenc(str, options);
16250  err = rb_reg_check_preprocess(str);
16251  if (err != Qnil) {
16252  err = rb_obj_as_string(err);
16253  compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
16254  RB_GC_GUARD(err);
16255  return 0;
16256  }
16257  return 1;
16258 }
16259 
16260 typedef struct {
16261  struct parser_params* parser;
16262  rb_encoding *enc;
16263  NODE *succ_block;
16264  NODE *fail_block;
16265  int num;
16267 
16268 static int
16270  int back_num, int *back_refs, OnigRegex regex, void *arg0)
16271 {
16273  struct parser_params* parser = arg->parser;
16274  rb_encoding *enc = arg->enc;
16275  long len = name_end - name;
16276  const char *s = (const char *)name;
16277  ID var;
16278 
16279  arg->num++;
16280 
16281  if (arg->succ_block == 0) {
16282  arg->succ_block = NEW_BEGIN(0);
16283  arg->fail_block = NEW_BEGIN(0);
16284  }
16285 
16286  if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
16287  (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
16288  !rb_enc_symname2_p(s, len, enc)) {
16289  return ST_CONTINUE;
16290  }
16291  var = rb_intern3(s, len, enc);
16292  if (dvar_defined(var) || local_id(var)) {
16293  rb_warningS("named capture conflicts a local variable - %s",
16294  rb_id2name(var));
16295  }
16296  arg->succ_block = block_append(arg->succ_block,
16298  NEW_CALL(
16299  gettable(rb_intern("$~")),
16300  idAREF,
16301  NEW_LIST(NEW_LIT(ID2SYM(var))))
16302  )));
16303  arg->fail_block = block_append(arg->fail_block,
16305  return ST_CONTINUE;
16306 }
16307 
16308 static NODE *
16310 {
16312 
16313  arg.parser = parser;
16314  arg.enc = rb_enc_get(regexp);
16315  arg.succ_block = 0;
16316  arg.fail_block = 0;
16317  arg.num = 0;
16318  onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
16319 
16320  if (arg.num == 0)
16321  return match;
16322 
16323  return
16324  block_append(
16325  newline_node(match),
16326  NEW_IF(gettable(rb_intern("$~")),
16327  block_append(
16328  newline_node(arg.succ_block),
16329  newline_node(
16330  NEW_CALL(
16331  gettable(rb_intern("$~")),
16332  rb_intern("begin"),
16333  NEW_LIST(NEW_LIT(INT2FIX(0)))))),
16334  block_append(
16335  newline_node(arg.fail_block),
16336  newline_node(
16337  NEW_LIT(Qnil)))));
16338 }
16339 
16340 static VALUE
16341 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
16342 {
16343  VALUE re;
16344  VALUE err;
16345 
16346  reg_fragment_setenc(str, options);
16347  err = rb_errinfo();
16349  if (NIL_P(re)) {
16350  ID mesg = rb_intern("mesg");
16351  VALUE m = rb_attr_get(rb_errinfo(), mesg);
16352  rb_set_errinfo(err);
16353  if (!NIL_P(err)) {
16354  rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
16355  }
16356  else {
16358  }
16359  return Qnil;
16360  }
16361  return re;
16362 }
16363 
16364 void
16366 {
16367 }
16368 
16369 NODE*
16371 {
16372  NODE *prelude = 0;
16373  NODE *scope = node;
16374  struct parser_params *parser;
16375 
16376  if (!node) return node;
16377 
16378  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16379 
16380  node = node->nd_body;
16381 
16382  if (nd_type(node) == NODE_PRELUDE) {
16383  prelude = node;
16384  node = node->nd_body;
16385  }
16386 
16387  node = block_append(node,
16388  NEW_FCALL(rb_intern("print"),
16389  NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
16390  if (prelude) {
16391  prelude->nd_body = node;
16392  scope->nd_body = prelude;
16393  }
16394  else {
16395  scope->nd_body = node;
16396  }
16397 
16398  return scope;
16399 }
16400 
16401 NODE *
16402 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
16403 {
16404  NODE *prelude = 0;
16405  NODE *scope = node;
16406  struct parser_params *parser;
16407 
16408  if (!node) return node;
16409 
16410  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16411 
16412  node = node->nd_body;
16413 
16414  if (nd_type(node) == NODE_PRELUDE) {
16415  prelude = node;
16416  node = node->nd_body;
16417  }
16418  if (split) {
16419  node = block_append(NEW_GASGN(rb_intern("$F"),
16420  NEW_CALL(NEW_GVAR(rb_intern("$_")),
16421  rb_intern("split"), 0)),
16422  node);
16423  }
16424  if (chop) {
16425  node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
16426  rb_intern("chop!"), 0), node);
16427  }
16428 
16429  node = NEW_OPT_N(node);
16430 
16431  if (prelude) {
16432  prelude->nd_body = node;
16433  scope->nd_body = prelude;
16434  }
16435  else {
16436  scope->nd_body = node;
16437  }
16438 
16439  return scope;
16440 }
16441 
16442 static const struct {
16444  const char *name;
16445 } op_tbl[] = {
16446  {tDOT2, ".."},
16447  {tDOT3, "..."},
16448  {tPOW, "**"},
16449  {tDSTAR, "**"},
16450  {tUPLUS, "+@"},
16451  {tUMINUS, "-@"},
16452  {tCMP, "<=>"},
16453  {tGEQ, ">="},
16454  {tLEQ, "<="},
16455  {tEQ, "=="},
16456  {tEQQ, "==="},
16457  {tNEQ, "!="},
16458  {tMATCH, "=~"},
16459  {tNMATCH, "!~"},
16460  {tAREF, "[]"},
16461  {tASET, "[]="},
16462  {tLSHFT, "<<"},
16463  {tRSHFT, ">>"},
16464  {tCOLON2, "::"},
16465 };
16466 
16467 #define op_tbl_count numberof(op_tbl)
16468 
16469 #ifndef ENABLE_SELECTOR_NAMESPACE
16470 #define ENABLE_SELECTOR_NAMESPACE 0
16471 #endif
16472 
16473 static struct symbols {
16474  ID last_id;
16475  st_table *sym_id;
16476  st_table *id_str;
16477 #if ENABLE_SELECTOR_NAMESPACE
16478  st_table *ivar2_id;
16479  st_table *id_ivar2;
16480 #endif
16483 
16484 static const struct st_hash_type symhash = {
16486  rb_str_hash,
16487 };
16488 
16489 #if ENABLE_SELECTOR_NAMESPACE
16490 struct ivar2_key {
16491  ID id;
16492  VALUE klass;
16493 };
16494 
16495 static int
16496 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
16497 {
16498  if (key1->id == key2->id && key1->klass == key2->klass) {
16499  return 0;
16500  }
16501  return 1;
16502 }
16503 
16504 static int
16505 ivar2_hash(struct ivar2_key *key)
16506 {
16507  return (key->id << 8) ^ (key->klass >> 2);
16508 }
16509 
16510 static const struct st_hash_type ivar2_hash_type = {
16511  ivar2_cmp,
16512  ivar2_hash,
16513 };
16514 #endif
16515 
16516 void
16518 {
16519  global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
16521 #if ENABLE_SELECTOR_NAMESPACE
16522  global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
16523  global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
16524 #endif
16525 
16526  (void)nodetype;
16527  (void)nodeline;
16528 #if PARSER_DEBUG
16529  (void)lex_state_name(-1);
16530 #endif
16531 
16532  Init_id();
16533 }
16534 
16535 void
16537 {
16541 }
16542 #endif /* !RIPPER */
16543 
16544 static ID
16546 {
16547  ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
16548  id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
16549  return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
16550 }
16551 
16552 #ifndef RIPPER
16553 static int
16554 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
16555 {
16556  int mb = 0;
16557 
16558  if (m >= e) return 0;
16559  if (is_global_name_punct(*m)) {
16560  ++m;
16561  }
16562  else if (*m == '-') {
16563  ++m;
16564  if (m < e && is_identchar(m, e, enc)) {
16565  if (!ISASCII(*m)) mb = 1;
16566  m += rb_enc_mbclen(m, e, enc);
16567  }
16568  }
16569  else {
16570  if (!rb_enc_isdigit(*m, enc)) return 0;
16571  do {
16572  if (!ISASCII(*m)) mb = 1;
16573  ++m;
16574  } while (m < e && rb_enc_isdigit(*m, enc));
16575  }
16576  return m == e ? mb + 1 : 0;
16577 }
16578 
16579 int
16580 rb_symname_p(const char *name)
16581 {
16582  return rb_enc_symname_p(name, rb_ascii8bit_encoding());
16583 }
16584 
16585 int
16586 rb_enc_symname_p(const char *name, rb_encoding *enc)
16587 {
16588  return rb_enc_symname2_p(name, strlen(name), enc);
16589 }
16590 
16591 #define IDSET_ATTRSET_FOR_SYNTAX ((1U<<ID_LOCAL)|(1U<<ID_CONST))
16592 #define IDSET_ATTRSET_FOR_INTERN (~(~0U<<(1<<ID_SCOPE_SHIFT)) & ~(1U<<ID_ATTRSET))
16593 
16594 static int
16595 rb_enc_symname_type(const char *name, long len, rb_encoding *enc, unsigned int allowed_atttset)
16596 {
16597  const char *m = name;
16598  const char *e = m + len;
16599  int type = ID_JUNK;
16600 
16601  if (!m || len <= 0) return -1;
16602  switch (*m) {
16603  case '\0':
16604  return -1;
16605 
16606  case '$':
16607  type = ID_GLOBAL;
16608  if (is_special_global_name(++m, e, enc)) return type;
16609  goto id;
16610 
16611  case '@':
16612  type = ID_INSTANCE;
16613  if (*++m == '@') {
16614  ++m;
16615  type = ID_CLASS;
16616  }
16617  goto id;
16618 
16619  case '<':
16620  switch (*++m) {
16621  case '<': ++m; break;
16622  case '=': if (*++m == '>') ++m; break;
16623  default: break;
16624  }
16625  break;
16626 
16627  case '>':
16628  switch (*++m) {
16629  case '>': case '=': ++m; break;
16630  }
16631  break;
16632 
16633  case '=':
16634  switch (*++m) {
16635  case '~': ++m; break;
16636  case '=': if (*++m == '=') ++m; break;
16637  default: return -1;
16638  }
16639  break;
16640 
16641  case '*':
16642  if (*++m == '*') ++m;
16643  break;
16644 
16645  case '+': case '-':
16646  if (*++m == '@') ++m;
16647  break;
16648 
16649  case '|': case '^': case '&': case '/': case '%': case '~': case '`':
16650  ++m;
16651  break;
16652 
16653  case '[':
16654  if (*++m != ']') return -1;
16655  if (*++m == '=') ++m;
16656  break;
16657 
16658  case '!':
16659  if (len == 1) return ID_JUNK;
16660  switch (*++m) {
16661  case '=': case '~': ++m; break;
16662  default: return -1;
16663  }
16664  break;
16665 
16666  default:
16667  type = rb_enc_isupper(*m, enc) ? ID_CONST : ID_LOCAL;
16668  id:
16669  if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
16670  return -1;
16671  while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
16672  if (m >= e) break;
16673  switch (*m) {
16674  case '!': case '?':
16675  if (type == ID_GLOBAL || type == ID_CLASS || type == ID_INSTANCE) return -1;
16676  type = ID_JUNK;
16677  ++m;
16678  if (m + 1 < e || *m != '=') break;
16679  /* fall through */
16680  case '=':
16681  if (!(allowed_atttset & (1U << type))) return -1;
16682  type = ID_ATTRSET;
16683  ++m;
16684  break;
16685  }
16686  break;
16687  }
16688  return m == e ? type : -1;
16689 }
16690 
16691 int
16692 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
16693 {
16694  return rb_enc_symname_type(name, len, enc, IDSET_ATTRSET_FOR_SYNTAX) != -1;
16695 }
16696 
16697 static int
16698 rb_str_symname_type(VALUE name, unsigned int allowed_atttset)
16699 {
16700  const char *ptr = StringValuePtr(name);
16701  long len = RSTRING_LEN(name);
16702  int type = rb_enc_symname_type(ptr, len, rb_enc_get(name), allowed_atttset);
16703  RB_GC_GUARD(name);
16704  return type;
16705 }
16706 
16707 static ID
16708 register_symid(ID id, const char *name, long len, rb_encoding *enc)
16709 {
16710  VALUE str = rb_enc_str_new(name, len, enc);
16711  return register_symid_str(id, str);
16712 }
16713 
16714 static ID
16716 {
16717  OBJ_FREEZE(str);
16720  return id;
16721 }
16722 
16723 static int
16725 {
16726  if (!rb_enc_asciicompat(rb_enc_get(str))) return FALSE;
16727  switch (rb_enc_str_coderange(str)) {
16728  case ENC_CODERANGE_BROKEN:
16729  rb_raise(rb_eEncodingError, "invalid encoding symbol");
16730  case ENC_CODERANGE_7BIT:
16731  return TRUE;
16732  }
16733  return FALSE;
16734 }
16735 
16736 /*
16737  * _str_ itself will be registered at the global symbol table. _str_
16738  * can be modified before the registration, since the encoding will be
16739  * set to ASCII-8BIT if it is a special global name.
16740  */
16741 static ID intern_str(VALUE str);
16742 
16743 ID
16744 rb_intern3(const char *name, long len, rb_encoding *enc)
16745 {
16746  VALUE str;
16747  st_data_t data;
16748  struct RString fake_str;
16749  fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
16750  fake_str.basic.klass = rb_cString;
16751  fake_str.as.heap.len = len;
16752  fake_str.as.heap.ptr = (char *)name;
16753  fake_str.as.heap.aux.capa = len;
16754  str = (VALUE)&fake_str;
16755  rb_enc_associate(str, enc);
16756  OBJ_FREEZE(str);
16757 
16758  if (st_lookup(global_symbols.sym_id, str, &data))
16759  return (ID)data;
16760 
16761  str = rb_enc_str_new(name, len, enc); /* make true string */
16762  return intern_str(str);
16763 }
16764 
16765 static ID
16767 {
16768  const char *name, *m, *e;
16769  long len, last;
16770  rb_encoding *enc, *symenc;
16771  unsigned char c;
16772  ID id;
16773  int mb;
16774 
16775  RSTRING_GETMEM(str, name, len);
16776  m = name;
16777  e = m + len;
16778  enc = rb_enc_get(str);
16779  symenc = enc;
16780 
16781  if (!len || (rb_cString && !rb_enc_asciicompat(enc))) {
16782  junk:
16783  id = ID_JUNK;
16784  goto new_id;
16785  }
16786  last = len-1;
16787  id = 0;
16788  switch (*m) {
16789  case '$':
16790  if (len < 2) goto junk;
16791  id |= ID_GLOBAL;
16792  if ((mb = is_special_global_name(++m, e, enc)) != 0) {
16793  if (!--mb) symenc = rb_usascii_encoding();
16794  goto new_id;
16795  }
16796  break;
16797  case '@':
16798  if (m[1] == '@') {
16799  if (len < 3) goto junk;
16800  m++;
16801  id |= ID_CLASS;
16802  }
16803  else {
16804  if (len < 2) goto junk;
16805  id |= ID_INSTANCE;
16806  }
16807  m++;
16808  break;
16809  default:
16810  c = m[0];
16811  if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
16812  /* operators */
16813  int i;
16814 
16815  if (len == 1) {
16816  id = c;
16817  goto id_register;
16818  }
16819  for (i = 0; i < op_tbl_count; i++) {
16820  if (*op_tbl[i].name == *m &&
16821  strcmp(op_tbl[i].name, m) == 0) {
16822  id = op_tbl[i].token;
16823  goto id_register;
16824  }
16825  }
16826  }
16827  break;
16828  }
16829  if (name[last] == '=') {
16830  /* attribute assignment */
16831  if (last > 1 && name[last-1] == '=')
16832  goto junk;
16833  id = rb_intern3(name, last, enc);
16834  if (id > tLAST_OP_ID && !is_attrset_id(id)) {
16835  enc = rb_enc_get(rb_id2str(id));
16836  id = rb_id_attrset(id);
16837  goto id_register;
16838  }
16839  id = ID_ATTRSET;
16840  }
16841  else if (id == 0) {
16842  if (rb_enc_isupper(m[0], enc)) {
16843  id = ID_CONST;
16844  }
16845  else {
16846  id = ID_LOCAL;
16847  }
16848  }
16849  if (!rb_enc_isdigit(*m, enc)) {
16850  while (m <= name + last && is_identchar(m, e, enc)) {
16851  if (ISASCII(*m)) {
16852  m++;
16853  }
16854  else {
16855  m += rb_enc_mbclen(m, e, enc);
16856  }
16857  }
16858  }
16859  if (id != ID_ATTRSET && m - name < len) id = ID_JUNK;
16860  if (sym_check_asciionly(str)) symenc = rb_usascii_encoding();
16861  new_id:
16862  if (symenc != enc) rb_enc_associate(str, symenc);
16864  if (len > 20) {
16865  rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
16866  name);
16867  }
16868  else {
16869  rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
16870  (int)len, name);
16871  }
16872  }
16874  id_register:
16875  return register_symid_str(id, str);
16876 }
16877 
16878 ID
16879 rb_intern2(const char *name, long len)
16880 {
16881  return rb_intern3(name, len, rb_usascii_encoding());
16882 }
16883 
16884 #undef rb_intern
16885 ID
16886 rb_intern(const char *name)
16887 {
16888  return rb_intern2(name, strlen(name));
16889 }
16890 
16891 ID
16893 {
16894  st_data_t id;
16895 
16896  if (st_lookup(global_symbols.sym_id, str, &id))
16897  return (ID)id;
16898  return intern_str(rb_str_dup(str));
16899 }
16900 
16901 VALUE
16903 {
16904  st_data_t data;
16905 
16906  if (id < tLAST_TOKEN) {
16907  int i = 0;
16908 
16909  if (id < INT_MAX && rb_ispunct((int)id)) {
16910  VALUE str = global_symbols.op_sym[i = (int)id];
16911  if (!str) {
16912  char name[2];
16913  name[0] = (char)id;
16914  name[1] = 0;
16915  str = rb_usascii_str_new(name, 1);
16916  OBJ_FREEZE(str);
16917  global_symbols.op_sym[i] = str;
16918  }
16919  return str;
16920  }
16921  for (i = 0; i < op_tbl_count; i++) {
16922  if (op_tbl[i].token == id) {
16923  VALUE str = global_symbols.op_sym[i];
16924  if (!str) {
16925  str = rb_usascii_str_new2(op_tbl[i].name);
16926  OBJ_FREEZE(str);
16927  global_symbols.op_sym[i] = str;
16928  }
16929  return str;
16930  }
16931  }
16932  }
16933 
16934  if (st_lookup(global_symbols.id_str, id, &data)) {
16935  VALUE str = (VALUE)data;
16936  if (RBASIC(str)->klass == 0)
16937  RBASIC(str)->klass = rb_cString;
16938  return str;
16939  }
16940 
16941  if (is_attrset_id(id)) {
16942  ID id_stem = (id & ~ID_SCOPE_MASK);
16943  VALUE str;
16944 
16945  do {
16946  if (!!(str = rb_id2str(id_stem | ID_LOCAL))) break;
16947  if (!!(str = rb_id2str(id_stem | ID_CONST))) break;
16948  if (!!(str = rb_id2str(id_stem | ID_INSTANCE))) break;
16949  if (!!(str = rb_id2str(id_stem | ID_GLOBAL))) break;
16950  if (!!(str = rb_id2str(id_stem | ID_CLASS))) break;
16951  if (!!(str = rb_id2str(id_stem | ID_JUNK))) break;
16952  return 0;
16953  } while (0);
16954  str = rb_str_dup(str);
16955  rb_str_cat(str, "=", 1);
16956  register_symid_str(id, str);
16957  if (st_lookup(global_symbols.id_str, id, &data)) {
16958  VALUE str = (VALUE)data;
16959  if (RBASIC(str)->klass == 0)
16960  RBASIC(str)->klass = rb_cString;
16961  return str;
16962  }
16963  }
16964  return 0;
16965 }
16966 
16967 const char *
16969 {
16970  VALUE str = rb_id2str(id);
16971 
16972  if (!str) return 0;
16973  return RSTRING_PTR(str);
16974 }
16975 
16976 static int
16978 {
16979  rb_ary_push(ary, ID2SYM(value));
16980  return ST_CONTINUE;
16981 }
16982 
16983 /*
16984  * call-seq:
16985  * Symbol.all_symbols => array
16986  *
16987  * Returns an array of all the symbols currently in Ruby's symbol
16988  * table.
16989  *
16990  * Symbol.all_symbols.size #=> 903
16991  * Symbol.all_symbols[1,20] #=> [:floor, :ARGV, :Binding, :symlink,
16992  * :chown, :EOFError, :$;, :String,
16993  * :LOCK_SH, :"setuid?", :$<,
16994  * :default_proc, :compact, :extend,
16995  * :Tms, :getwd, :$=, :ThreadGroup,
16996  * :wait2, :$>]
16997  */
16998 
16999 VALUE
17001 {
17003 
17005  return ary;
17006 }
17007 
17008 int
17010 {
17011  return is_const_id(id);
17012 }
17013 
17014 int
17016 {
17017  return is_class_id(id);
17018 }
17019 
17020 int
17022 {
17023  return is_global_id(id);
17024 }
17025 
17026 int
17028 {
17029  return is_instance_id(id);
17030 }
17031 
17032 int
17034 {
17035  return is_attrset_id(id);
17036 }
17037 
17038 int
17040 {
17041  return is_local_id(id);
17042 }
17043 
17044 int
17046 {
17047  return is_junk_id(id);
17048 }
17049 
17061 ID
17062 rb_check_id(volatile VALUE *namep)
17063 {
17064  st_data_t id;
17065  VALUE tmp;
17066  VALUE name = *namep;
17067 
17068  if (SYMBOL_P(name)) {
17069  return SYM2ID(name);
17070  }
17071  else if (!RB_TYPE_P(name, T_STRING)) {
17072  tmp = rb_check_string_type(name);
17073  if (NIL_P(tmp)) {
17074  tmp = rb_inspect(name);
17075  rb_raise(rb_eTypeError, "%s is not a symbol",
17076  RSTRING_PTR(tmp));
17077  }
17078  name = tmp;
17079  *namep = name;
17080  }
17081 
17082  sym_check_asciionly(name);
17083 
17084  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
17085  return (ID)id;
17086 
17087  if (rb_is_attrset_name(name)) {
17088  struct RString fake_str;
17089  const VALUE localname = (VALUE)&fake_str;
17090  /* make local name by chopping '=' */
17091  fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
17092  fake_str.basic.klass = rb_cString;
17093  fake_str.as.heap.len = RSTRING_LEN(name) - 1;
17094  fake_str.as.heap.ptr = RSTRING_PTR(name);
17095  fake_str.as.heap.aux.capa = fake_str.as.heap.len;
17096  rb_enc_copy(localname, name);
17097  OBJ_FREEZE(localname);
17098 
17099  if (st_lookup(global_symbols.sym_id, (st_data_t)localname, &id)) {
17100  return rb_id_attrset((ID)id);
17101  }
17102  RB_GC_GUARD(name);
17103  }
17104 
17105  return (ID)0;
17106 }
17107 
17108 ID
17109 rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc)
17110 {
17111  st_data_t id;
17112  struct RString fake_str;
17113  const VALUE name = (VALUE)&fake_str;
17114  fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
17115  fake_str.basic.klass = rb_cString;
17116  fake_str.as.heap.len = len;
17117  fake_str.as.heap.ptr = (char *)ptr;
17118  fake_str.as.heap.aux.capa = len;
17119  rb_enc_associate(name, enc);
17120 
17121  sym_check_asciionly(name);
17122 
17123  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
17124  return (ID)id;
17125 
17126  if (rb_is_attrset_name(name)) {
17127  fake_str.as.heap.len = len - 1;
17128  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id)) {
17129  return rb_id_attrset((ID)id);
17130  }
17131  }
17132 
17133  return (ID)0;
17134 }
17135 
17136 int
17138 {
17139  return rb_str_symname_type(name, 0) == ID_CONST;
17140 }
17141 
17142 int
17144 {
17145  return rb_str_symname_type(name, 0) == ID_CLASS;
17146 }
17147 
17148 int
17150 {
17151  return rb_str_symname_type(name, 0) == ID_GLOBAL;
17152 }
17153 
17154 int
17156 {
17157  return rb_str_symname_type(name, 0) == ID_INSTANCE;
17158 }
17159 
17160 int
17162 {
17164 }
17165 
17166 int
17168 {
17169  return rb_str_symname_type(name, 0) == ID_LOCAL;
17170 }
17171 
17172 int
17174 {
17175  switch (rb_str_symname_type(name, 0)) {
17176  case ID_LOCAL: case ID_ATTRSET: case ID_JUNK:
17177  return TRUE;
17178  }
17179  return FALSE;
17180 }
17181 
17182 int
17184 {
17185  return rb_str_symname_type(name, IDSET_ATTRSET_FOR_SYNTAX) == -1;
17186 }
17187 
17188 #endif /* !RIPPER */
17189 
17190 static void
17192 {
17193  parser->eofp = Qfalse;
17194 
17195  parser->parser_lex_strterm = 0;
17196  parser->parser_cond_stack = 0;
17197  parser->parser_cmdarg_stack = 0;
17198  parser->parser_class_nest = 0;
17199  parser->parser_paren_nest = 0;
17200  parser->parser_lpar_beg = 0;
17201  parser->parser_brace_nest = 0;
17202  parser->parser_in_single = 0;
17203  parser->parser_in_def = 0;
17204  parser->parser_in_defined = 0;
17205  parser->parser_compile_for_eval = 0;
17206  parser->parser_cur_mid = 0;
17207  parser->parser_tokenbuf = NULL;
17208  parser->parser_tokidx = 0;
17209  parser->parser_toksiz = 0;
17210  parser->parser_heredoc_end = 0;
17211  parser->parser_command_start = TRUE;
17212  parser->parser_deferred_nodes = 0;
17213  parser->parser_lex_pbeg = 0;
17214  parser->parser_lex_p = 0;
17215  parser->parser_lex_pend = 0;
17216  parser->parser_lvtbl = 0;
17217  parser->parser_ruby__end__seen = 0;
17218  parser->parser_ruby_sourcefile = 0;
17219 #ifndef RIPPER
17220  parser->is_ripper = 0;
17221  parser->parser_eval_tree_begin = 0;
17222  parser->parser_eval_tree = 0;
17223 #else
17224  parser->is_ripper = 1;
17225  parser->parser_ruby_sourcefile_string = Qnil;
17226  parser->delayed = Qnil;
17227 
17228  parser->result = Qnil;
17229  parser->parsing_thread = Qnil;
17230  parser->toplevel_p = TRUE;
17231 #endif
17232 #ifdef YYMALLOC
17233  parser->heap = NULL;
17234 #endif
17235  parser->enc = rb_utf8_encoding();
17236 }
17237 
17238 #ifdef RIPPER
17239 #define parser_mark ripper_parser_mark
17240 #define parser_free ripper_parser_free
17241 #endif
17242 
17243 static void
17245 {
17246  struct parser_params *p = (struct parser_params*)ptr;
17247 
17253 #ifndef RIPPER
17256  rb_gc_mark(p->debug_lines);
17257 #else
17258  rb_gc_mark(p->parser_ruby_sourcefile_string);
17259  rb_gc_mark(p->delayed);
17260  rb_gc_mark(p->value);
17261  rb_gc_mark(p->result);
17262  rb_gc_mark(p->parsing_thread);
17263 #endif
17264 #ifdef YYMALLOC
17265  rb_gc_mark((VALUE)p->heap);
17266 #endif
17267 }
17268 
17269 static void
17270 parser_free(void *ptr)
17271 {
17272  struct parser_params *p = (struct parser_params*)ptr;
17273  struct local_vars *local, *prev;
17274 
17275  if (p->parser_tokenbuf) {
17276  xfree(p->parser_tokenbuf);
17277  }
17278  for (local = p->parser_lvtbl; local; local = prev) {
17279  if (local->vars) xfree(local->vars);
17280  prev = local->prev;
17281  xfree(local);
17282  }
17283 #ifndef RIPPER
17285 #endif
17286  xfree(p);
17287 }
17288 
17289 static size_t
17290 parser_memsize(const void *ptr)
17291 {
17292  struct parser_params *p = (struct parser_params*)ptr;
17293  struct local_vars *local;
17294  size_t size = sizeof(*p);
17295 
17296  if (!ptr) return 0;
17297  size += p->parser_toksiz;
17298  for (local = p->parser_lvtbl; local; local = local->prev) {
17299  size += sizeof(*local);
17300  if (local->vars) size += local->vars->capa * sizeof(ID);
17301  }
17302 #ifndef RIPPER
17303  if (p->parser_ruby_sourcefile) {
17304  size += strlen(p->parser_ruby_sourcefile) + 1;
17305  }
17306 #endif
17307  return size;
17308 }
17309 
17310 static
17311 #ifndef RIPPER
17312 const
17313 #endif
17314 rb_data_type_t parser_data_type = {
17315  "parser",
17316  {
17317  parser_mark,
17318  parser_free,
17320  },
17321 };
17322 
17323 #ifndef RIPPER
17324 #undef rb_reserved_word
17325 
17326 const struct kwtable *
17327 rb_reserved_word(const char *str, unsigned int len)
17328 {
17329  return reserved_word(str, len);
17330 }
17331 
17332 static struct parser_params *
17334 {
17335  struct parser_params *p;
17336 
17337  p = ALLOC_N(struct parser_params, 1);
17338  MEMZERO(p, struct parser_params, 1);
17339  parser_initialize(p);
17340  return p;
17341 }
17342 
17343 VALUE
17345 {
17346  struct parser_params *p = parser_new();
17347 
17348  return TypedData_Wrap_Struct(0, &parser_data_type, p);
17349 }
17350 
17351 /*
17352  * call-seq:
17353  * ripper#end_seen? -> Boolean
17354  *
17355  * Return true if parsed source ended by +\_\_END\_\_+.
17356  */
17357 VALUE
17359 {
17360  struct parser_params *parser;
17361 
17362  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17363  return ruby__end__seen ? Qtrue : Qfalse;
17364 }
17365 
17366 /*
17367  * call-seq:
17368  * ripper#encoding -> encoding
17369  *
17370  * Return encoding of the source.
17371  */
17372 VALUE
17374 {
17375  struct parser_params *parser;
17376 
17377  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17379 }
17380 
17381 /*
17382  * call-seq:
17383  * ripper.yydebug -> true or false
17384  *
17385  * Get yydebug.
17386  */
17387 VALUE
17389 {
17390  struct parser_params *parser;
17391 
17392  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17393  return yydebug ? Qtrue : Qfalse;
17394 }
17395 
17396 /*
17397  * call-seq:
17398  * ripper.yydebug = flag
17399  *
17400  * Set yydebug.
17401  */
17402 VALUE
17404 {
17405  struct parser_params *parser;
17406 
17407  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17408  yydebug = RTEST(flag);
17409  return flag;
17410 }
17411 
17412 #ifdef YYMALLOC
17413 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
17414 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
17415 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
17416  (n)->u3.cnt = (c), (p))
17417 
17418 void *
17419 rb_parser_malloc(struct parser_params *parser, size_t size)
17420 {
17421  size_t cnt = HEAPCNT(1, size);
17422  NODE *n = NEWHEAP();
17423  void *ptr = xmalloc(size);
17424 
17425  return ADD2HEAP(n, cnt, ptr);
17426 }
17427 
17428 void *
17429 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
17430 {
17431  size_t cnt = HEAPCNT(nelem, size);
17432  NODE *n = NEWHEAP();
17433  void *ptr = xcalloc(nelem, size);
17434 
17435  return ADD2HEAP(n, cnt, ptr);
17436 }
17437 
17438 void *
17439 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
17440 {
17441  NODE *n;
17442  size_t cnt = HEAPCNT(1, size);
17443 
17444  if (ptr && (n = parser->heap) != NULL) {
17445  do {
17446  if (n->u1.node == ptr) {
17447  n->u1.node = ptr = xrealloc(ptr, size);
17448  if (n->u3.cnt) n->u3.cnt = cnt;
17449  return ptr;
17450  }
17451  } while ((n = n->u2.node) != NULL);
17452  }
17453  n = NEWHEAP();
17454  ptr = xrealloc(ptr, size);
17455  return ADD2HEAP(n, cnt, ptr);
17456 }
17457 
17458 void
17459 rb_parser_free(struct parser_params *parser, void *ptr)
17460 {
17461  NODE **prev = &parser->heap, *n;
17462 
17463  while ((n = *prev) != NULL) {
17464  if (n->u1.node == ptr) {
17465  *prev = n->u2.node;
17467  break;
17468  }
17469  prev = &n->u2.node;
17470  }
17471  xfree(ptr);
17472 }
17473 #endif
17474 #endif
17475 
17476 #ifdef RIPPER
17477 #ifdef RIPPER_DEBUG
17478 extern int rb_is_pointer_to_heap(VALUE);
17479 
17480 /* :nodoc: */
17481 static VALUE
17482 ripper_validate_object(VALUE self, VALUE x)
17483 {
17484  if (x == Qfalse) return x;
17485  if (x == Qtrue) return x;
17486  if (x == Qnil) return x;
17487  if (x == Qundef)
17488  rb_raise(rb_eArgError, "Qundef given");
17489  if (FIXNUM_P(x)) return x;
17490  if (SYMBOL_P(x)) return x;
17491  if (!rb_is_pointer_to_heap(x))
17492  rb_raise(rb_eArgError, "invalid pointer: %p", x);
17493  switch (TYPE(x)) {
17494  case T_STRING:
17495  case T_OBJECT:
17496  case T_ARRAY:
17497  case T_BIGNUM:
17498  case T_FLOAT:
17499  return x;
17500  case T_NODE:
17501  if (nd_type(x) != NODE_LASGN) {
17502  rb_raise(rb_eArgError, "NODE given: %p", x);
17503  }
17504  return ((NODE *)x)->nd_rval;
17505  default:
17506  rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
17507  x, rb_obj_classname(x));
17508  }
17509  return x;
17510 }
17511 #endif
17512 
17513 #define validate(x) ((x) = get_value(x))
17514 
17515 static VALUE
17516 ripper_dispatch0(struct parser_params *parser, ID mid)
17517 {
17518  return rb_funcall(parser->value, mid, 0);
17519 }
17520 
17521 static VALUE
17522 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
17523 {
17524  validate(a);
17525  return rb_funcall(parser->value, mid, 1, a);
17526 }
17527 
17528 static VALUE
17529 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
17530 {
17531  validate(a);
17532  validate(b);
17533  return rb_funcall(parser->value, mid, 2, a, b);
17534 }
17535 
17536 static VALUE
17537 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
17538 {
17539  validate(a);
17540  validate(b);
17541  validate(c);
17542  return rb_funcall(parser->value, mid, 3, a, b, c);
17543 }
17544 
17545 static VALUE
17546 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
17547 {
17548  validate(a);
17549  validate(b);
17550  validate(c);
17551  validate(d);
17552  return rb_funcall(parser->value, mid, 4, a, b, c, d);
17553 }
17554 
17555 static VALUE
17556 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
17557 {
17558  validate(a);
17559  validate(b);
17560  validate(c);
17561  validate(d);
17562  validate(e);
17563  return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
17564 }
17565 
17566 static VALUE
17567 ripper_dispatch7(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e, VALUE f, VALUE g)
17568 {
17569  validate(a);
17570  validate(b);
17571  validate(c);
17572  validate(d);
17573  validate(e);
17574  validate(f);
17575  validate(g);
17576  return rb_funcall(parser->value, mid, 7, a, b, c, d, e, f, g);
17577 }
17578 
17579 static const struct kw_assoc {
17580  ID id;
17581  const char *name;
17582 } keyword_to_name[] = {
17583  {keyword_class, "class"},
17584  {keyword_module, "module"},
17585  {keyword_def, "def"},
17586  {keyword_undef, "undef"},
17587  {keyword_begin, "begin"},
17588  {keyword_rescue, "rescue"},
17589  {keyword_ensure, "ensure"},
17590  {keyword_end, "end"},
17591  {keyword_if, "if"},
17592  {keyword_unless, "unless"},
17593  {keyword_then, "then"},
17594  {keyword_elsif, "elsif"},
17595  {keyword_else, "else"},
17596  {keyword_case, "case"},
17597  {keyword_when, "when"},
17598  {keyword_while, "while"},
17599  {keyword_until, "until"},
17600  {keyword_for, "for"},
17601  {keyword_break, "break"},
17602  {keyword_next, "next"},
17603  {keyword_redo, "redo"},
17604  {keyword_retry, "retry"},
17605  {keyword_in, "in"},
17606  {keyword_do, "do"},
17607  {keyword_do_cond, "do"},
17608  {keyword_do_block, "do"},
17609  {keyword_return, "return"},
17610  {keyword_yield, "yield"},
17611  {keyword_super, "super"},
17612  {keyword_self, "self"},
17613  {keyword_nil, "nil"},
17614  {keyword_true, "true"},
17615  {keyword_false, "false"},
17616  {keyword_and, "and"},
17617  {keyword_or, "or"},
17618  {keyword_not, "not"},
17619  {modifier_if, "if"},
17620  {modifier_unless, "unless"},
17621  {modifier_while, "while"},
17622  {modifier_until, "until"},
17623  {modifier_rescue, "rescue"},
17624  {keyword_alias, "alias"},
17625  {keyword_defined, "defined?"},
17626  {keyword_BEGIN, "BEGIN"},
17627  {keyword_END, "END"},
17628  {keyword__LINE__, "__LINE__"},
17629  {keyword__FILE__, "__FILE__"},
17630  {keyword__ENCODING__, "__ENCODING__"},
17631  {0, NULL}
17632 };
17633 
17634 static const char*
17635 keyword_id_to_str(ID id)
17636 {
17637  const struct kw_assoc *a;
17638 
17639  for (a = keyword_to_name; a->id; a++) {
17640  if (a->id == id)
17641  return a->name;
17642  }
17643  return NULL;
17644 }
17645 
17646 #undef ripper_id2sym
17647 static VALUE
17648 ripper_id2sym(ID id)
17649 {
17650  const char *name;
17651  char buf[8];
17652 
17653  if (id <= 256) {
17654  buf[0] = (char)id;
17655  buf[1] = '\0';
17656  return ID2SYM(rb_intern2(buf, 1));
17657  }
17658  if ((name = keyword_id_to_str(id))) {
17659  return ID2SYM(rb_intern(name));
17660  }
17661  switch (id) {
17662  case tOROP:
17663  name = "||";
17664  break;
17665  case tANDOP:
17666  name = "&&";
17667  break;
17668  default:
17669  name = rb_id2name(id);
17670  if (!name) {
17671  rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
17672  }
17673  return ID2SYM(id);
17674  }
17675  return ID2SYM(rb_intern(name));
17676 }
17677 
17678 static ID
17679 ripper_get_id(VALUE v)
17680 {
17681  NODE *nd;
17682  if (!RB_TYPE_P(v, T_NODE)) return 0;
17683  nd = (NODE *)v;
17684  if (nd_type(nd) != NODE_LASGN) return 0;
17685  return nd->nd_vid;
17686 }
17687 
17688 static VALUE
17689 ripper_get_value(VALUE v)
17690 {
17691  NODE *nd;
17692  if (v == Qundef) return Qnil;
17693  if (!RB_TYPE_P(v, T_NODE)) return v;
17694  nd = (NODE *)v;
17695  if (nd_type(nd) != NODE_LASGN) return Qnil;
17696  return nd->nd_rval;
17697 }
17698 
17699 static void
17700 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
17701 {
17702  VALUE str;
17703  va_list args;
17704 
17705  va_start(args, fmt);
17706  str = rb_vsprintf(fmt, args);
17707  va_end(args);
17708  rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
17709 }
17710 
17711 static void
17712 ripper_warn0(struct parser_params *parser, const char *fmt)
17713 {
17714  rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
17715 }
17716 
17717 static void
17718 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
17719 {
17720  rb_funcall(parser->value, rb_intern("warn"), 2,
17721  STR_NEW2(fmt), INT2NUM(a));
17722 }
17723 
17724 static void
17725 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
17726 {
17727  rb_funcall(parser->value, rb_intern("warn"), 2,
17728  STR_NEW2(fmt), STR_NEW2(str));
17729 }
17730 
17731 static void
17732 ripper_warning0(struct parser_params *parser, const char *fmt)
17733 {
17734  rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
17735 }
17736 
17737 static void
17738 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
17739 {
17740  rb_funcall(parser->value, rb_intern("warning"), 2,
17741  STR_NEW2(fmt), STR_NEW2(str));
17742 }
17743 
17744 static VALUE
17745 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
17746 {
17747  return rb_io_gets(src);
17748 }
17749 
17750 static VALUE
17751 ripper_s_allocate(VALUE klass)
17752 {
17753  struct parser_params *p;
17754  VALUE self;
17755 
17756  p = ALLOC_N(struct parser_params, 1);
17757  MEMZERO(p, struct parser_params, 1);
17758  self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
17759  p->value = self;
17760  return self;
17761 }
17762 
17763 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
17764 
17765 /*
17766  * call-seq:
17767  * Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
17768  *
17769  * Create a new Ripper object.
17770  * _src_ must be a String, an IO, or an Object which has #gets method.
17771  *
17772  * This method does not starts parsing.
17773  * See also Ripper#parse and Ripper.parse.
17774  */
17775 static VALUE
17776 ripper_initialize(int argc, VALUE *argv, VALUE self)
17777 {
17778  struct parser_params *parser;
17779  VALUE src, fname, lineno;
17780 
17781  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17782  rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
17783  if (RB_TYPE_P(src, T_FILE)) {
17784  parser->parser_lex_gets = ripper_lex_get_generic;
17785  }
17786  else {
17787  StringValue(src);
17788  parser->parser_lex_gets = lex_get_str;
17789  }
17790  parser->parser_lex_input = src;
17791  parser->eofp = Qfalse;
17792  if (NIL_P(fname)) {
17793  fname = STR_NEW2("(ripper)");
17794  }
17795  else {
17796  StringValue(fname);
17797  }
17798  parser_initialize(parser);
17799 
17800  parser->parser_ruby_sourcefile_string = fname;
17801  parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
17802  parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
17803 
17804  return Qnil;
17805 }
17806 
17807 struct ripper_args {
17808  struct parser_params *parser;
17809  int argc;
17810  VALUE *argv;
17811 };
17812 
17813 static VALUE
17814 ripper_parse0(VALUE parser_v)
17815 {
17816  struct parser_params *parser;
17817 
17818  TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
17819  parser_prepare(parser);
17820  ripper_yyparse((void*)parser);
17821  return parser->result;
17822 }
17823 
17824 static VALUE
17825 ripper_ensure(VALUE parser_v)
17826 {
17827  struct parser_params *parser;
17828 
17829  TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
17830  parser->parsing_thread = Qnil;
17831  return Qnil;
17832 }
17833 
17834 /*
17835  * call-seq:
17836  * ripper#parse
17837  *
17838  * Start parsing and returns the value of the root action.
17839  */
17840 static VALUE
17841 ripper_parse(VALUE self)
17842 {
17843  struct parser_params *parser;
17844 
17845  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17846  if (!ripper_initialized_p(parser)) {
17847  rb_raise(rb_eArgError, "method called for uninitialized object");
17848  }
17849  if (!NIL_P(parser->parsing_thread)) {
17850  if (parser->parsing_thread == rb_thread_current())
17851  rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
17852  else
17853  rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
17854  }
17855  parser->parsing_thread = rb_thread_current();
17856  rb_ensure(ripper_parse0, self, ripper_ensure, self);
17857 
17858  return parser->result;
17859 }
17860 
17861 /*
17862  * call-seq:
17863  * ripper#column -> Integer
17864  *
17865  * Return column number of current parsing line.
17866  * This number starts from 0.
17867  */
17868 static VALUE
17869 ripper_column(VALUE self)
17870 {
17871  struct parser_params *parser;
17872  long col;
17873 
17874  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17875  if (!ripper_initialized_p(parser)) {
17876  rb_raise(rb_eArgError, "method called for uninitialized object");
17877  }
17878  if (NIL_P(parser->parsing_thread)) return Qnil;
17879  col = parser->tokp - parser->parser_lex_pbeg;
17880  return LONG2NUM(col);
17881 }
17882 
17883 /*
17884  * call-seq:
17885  * ripper#filename -> String
17886  *
17887  * Return current parsing filename.
17888  */
17889 static VALUE
17890 ripper_filename(VALUE self)
17891 {
17892  struct parser_params *parser;
17893 
17894  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17895  if (!ripper_initialized_p(parser)) {
17896  rb_raise(rb_eArgError, "method called for uninitialized object");
17897  }
17898  return parser->parser_ruby_sourcefile_string;
17899 }
17900 
17901 /*
17902  * call-seq:
17903  * ripper#lineno -> Integer
17904  *
17905  * Return line number of current parsing line.
17906  * This number starts from 1.
17907  */
17908 static VALUE
17909 ripper_lineno(VALUE self)
17910 {
17911  struct parser_params *parser;
17912 
17913  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17914  if (!ripper_initialized_p(parser)) {
17915  rb_raise(rb_eArgError, "method called for uninitialized object");
17916  }
17917  if (NIL_P(parser->parsing_thread)) return Qnil;
17918  return INT2NUM(parser->parser_ruby_sourceline);
17919 }
17920 
17921 #ifdef RIPPER_DEBUG
17922 /* :nodoc: */
17923 static VALUE
17924 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
17925 {
17926  StringValue(msg);
17927  if (obj == Qundef) {
17928  rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg));
17929  }
17930  return Qnil;
17931 }
17932 
17933 /* :nodoc: */
17934 static VALUE
17935 ripper_value(VALUE self, VALUE obj)
17936 {
17937  return ULONG2NUM(obj);
17938 }
17939 #endif
17940 
17941 
17942 void
17943 Init_ripper(void)
17944 {
17945  parser_data_type.parent = RTYPEDDATA_TYPE(rb_parser_new());
17946 
17949  /* ensure existing in symbol table */
17950  (void)rb_intern("||");
17951  (void)rb_intern("&&");
17952 
17953  InitVM(ripper);
17954 }
17955 
17956 void
17957 InitVM_ripper(void)
17958 {
17959  VALUE Ripper;
17960 
17961  Ripper = rb_define_class("Ripper", rb_cObject);
17962  rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
17963  rb_define_alloc_func(Ripper, ripper_s_allocate);
17964  rb_define_method(Ripper, "initialize", ripper_initialize, -1);
17965  rb_define_method(Ripper, "parse", ripper_parse, 0);
17966  rb_define_method(Ripper, "column", ripper_column, 0);
17967  rb_define_method(Ripper, "filename", ripper_filename, 0);
17968  rb_define_method(Ripper, "lineno", ripper_lineno, 0);
17969  rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
17970  rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
17971  rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
17972  rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
17973 #ifdef RIPPER_DEBUG
17974  rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
17975  rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
17976  rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
17977 #endif
17978 
17981 
17982 # if 0
17983  /* Hack to let RDoc document SCRIPT_LINES__ */
17984 
17985  /*
17986  * When a Hash is assigned to +SCRIPT_LINES__+ the contents of files loaded
17987  * after the assignment will be added as an Array of lines with the file
17988  * name as the key.
17989  */
17990  rb_define_global_const("SCRIPT_LINES__", Qnil);
17991 #endif
17992 
17993 }
17994 #endif /* RIPPER */
17995 
#define toklast()
Definition: parse.c:12111
#define rb_enc_islower(c, enc)
#define tokadd_mbchar(c)
Definition: parse.c:12471
#define command_start
Definition: parse.c:392
char * parser_ruby_sourcefile
Definition: ripper.c:327
#define RB_TYPE_P(obj, type)
VALUE val
Definition: parse.h:164
#define YYFPRINTF
Definition: parse.c:4472
#define YYLAST
Definition: parse.c:1137
#define nd_next
#define nd_type(n)
#define NEW_ARGSCAT(a, b)
#define evstr2dstr(n)
Definition: parse.c:459
static const char id_type_names[][9]
Definition: parse.c:15175
#define NODE_DREGX_ONCE
VALUE rb_const_get_at(VALUE, ID)
Definition: variable.c:1882
static NODE * call_bin_op_gen(struct parser_params *, NODE *, ID, NODE *)
Definition: parse.c:14903
stack_type cmdargs
Definition: ripper.c:193
#define ALLOC(type)
#define NEW_FALSE()
enum lex_state_e state
Definition: lex.c:33
struct local_vars * parser_lvtbl
Definition: ripper.c:323
#define NODE_IF
static YYSIZE_T yytnamerr(char *yyres, const char *yystr)
Definition: parse.c:4716
VALUE rb_ary_unshift(VALUE ary, VALUE item)
Definition: array.c:1084
static ID ripper_token2eventid(int tok)
Definition: eventids2.c:273
static ID internal_id_gen(struct parser_params *)
Definition: parse.c:16545
#define NODE_RESCUE
Definition: lex.c:33
#define tokenbuf
Definition: parse.c:381
int rb_enc_codelen(int c, rb_encoding *enc)
Definition: encoding.c:954
#define NODE_RETRY
Definition: ripper.y:119
#define NODE_DEFN
static double zero(void)
Definition: isinf.c:51
#define YY_REDUCE_PRINT(Rule)
Definition: parse.c:4618
#define shadowing_lvar(name)
Definition: parse.c:548
static void arg_ambiguous_gen(struct parser_params *parser)
Definition: parse.c:12978
#define NODE_FALSE
#define NEW_DOT3(b, e)
case return tREGEXP_BEG
Definition: ripper.y:7625
#define nextc()
Definition: parse.c:11503
static long parser_encode_length(struct parser_params *parser, const char *name, long len)
Definition: parse.c:13007
#define FLONUM_P(x)
#define NODE_OR
#define RE_OPTION_ENCODING_IDX(o)
Definition: parse.c:584
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:17419
st_table * st_init_table_with_size(const struct st_hash_type *, st_index_t)
Definition: st.c:229
#define NEW_IASGN(v, val)
VALUE rb_get_coverages(void)
Definition: thread.c:5182
#define lex_strterm
Definition: parse.c:368
#define NEW_NTH_REF(n)
Definition: ripper.y:115
void rb_bug(const char *fmt,...)
Definition: error.c:290
#define NEW_DASGN_CURR(v, val)
int num
Definition: parse.h:167
#define mixed_escape(beg, enc1, enc2)
static const yytype_uint8 yyr2[]
Definition: parse.c:1688
struct token_info * next
Definition: ripper.c:275
int rb_is_local_name(VALUE name)
Definition: parse.c:17167
static NODE * attrset_gen(struct parser_params *, NODE *, ID)
Definition: parse.c:15216
void rb_enc_copy(VALUE obj1, VALUE obj2)
Definition: encoding.c:856
#define FALSE
Definition: nkf.h:174
static const struct kwtable * reserved_word(const char *, unsigned int)
#define CMDARG_P()
Definition: parse.c:179
#define tail
Definition: st.c:108
Definition: ripper.y:108
void rb_mark_tbl(struct st_table *)
Definition: gc.c:2543
#define heredoc_end
Definition: parse.c:391
int rb_is_class_name(VALUE name)
Definition: parse.c:17143
struct vtable * used
Definition: ripper.c:191
#define tHEREDOC_BEG
Definition: eventids2.c:7
#define pushback(c)
Definition: parse.c:11504
#define rb_gc_mark_locations(start, end)
Definition: gc.c:2348
size_t strlen(const char *)
int rb_is_attrset_name(VALUE name)
Definition: parse.c:17161
int i
Definition: win32ole.c:784
VALUE parser_lex_nextline
Definition: ripper.c:314
VALUE rb_make_exception(int argc, VALUE *argv)
Definition: eval.c:642
#define is_const_id(id)
Definition: parse.c:115
#define scan_oct(s, l, e)
Definition: util.h:52
#define compile_error
Definition: parse.c:720
unsigned long VALUE
Definition: ripper.y:104
static NODE * negate_lit(NODE *)
Definition: parse.c:15798
#define toklen()
Definition: parse.c:12110
#define new_yield(node)
Definition: parse.c:477
const char * rb_obj_classname(VALUE)
Definition: variable.c:396
#define dispatch_heredoc_end()
Definition: parse.c:12871
static NODE * node_assign_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15288
int parser_ruby__end__seen
Definition: ripper.c:324
static void local_push_gen(struct parser_params *, int)
Definition: parse.c:16011
static int vtable_size(const struct vtable *tbl)
Definition: parse.c:202
#define formal_argument(id)
Definition: parse.c:546
#define NODE_DSYM
int parser_command_start
Definition: ripper.c:319
const struct kwtable * rb_reserved_word(const char *str, unsigned int len)
Definition: parse.c:17327
#define YY_STACK_PRINT(Bottom, Top)
Definition: parse.c:4579
#define NODE_DEFS
static NODE * arg_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15237
#define is_notop_id(id)
Definition: parse.c:110
ID rb_check_id(volatile VALUE *namep)
Returns ID for the given name if it is interned already, or 0.
Definition: parse.c:17062
#define NEW_CALL(r, m, a)
int st_lookup(st_table *, st_data_t, st_data_t *)
void st_add_direct(st_table *, st_data_t, st_data_t)
Definition: st.c:624
#define tokfix()
Definition: parse.c:12108
static NODE * evstr2dstr_gen(struct parser_params *, NODE *)
Definition: parse.c:14880
#define nd_body
#define local_pop()
Definition: parse.c:555
static void yy_reduce_print(YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
Definition: parse.c:4596
VALUE rb_str_buf_append(VALUE, VALUE)
Definition: string.c:2106
static int nodeline(NODE *node)
Definition: parse.c:14645
#define NODE_HASH
static int token_info_has_nonspaces(struct parser_params *parser, const char *token)
Definition: parse.c:11635
#define malloc
Definition: parse.c:98
#define local_var(id)
Definition: parse.c:557
#define NODE_DOT3
static NODE * arg_blk_pass(NODE *, NODE *)
Definition: parse.c:15826
#define IS_LABEL_POSSIBLE()
Definition: parse.c:13317
#define is_asgn_or_id(id)
Definition: parse.c:120
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:16207
#define POINTER_P(val)
Definition: parse.c:199
Definition: ripper.y:118
int parser_compile_for_eval
Definition: ripper.c:305
int parser_token_info_enabled
Definition: ripper.c:341
#define parser_precise_mbclen()
Definition: parse.c:11613
#define NEW_ALIAS(n, o)
static ID formal_argument_gen(struct parser_params *, ID)
Definition: parse.c:12989
static int parser_read_escape(struct parser_params *parser, int flags, rb_encoding **encp)
Definition: parse.c:12244
#define NEW_OP_CDECL(v, op, val)
#define internal_id()
Definition: parse.c:563
int parser_brace_nest
Definition: ripper.c:304
static VALUE reg_compile_gen(struct parser_params *, VALUE, int)
Definition: parse.c:16341
static ID register_symid(ID, const char *, long, rb_encoding *)
Definition: parse.c:16708
unsigned short int yytype_uint16
Definition: parse.c:942
Definition: ripper.y:105
#define lex_nextline
Definition: parse.c:387
ID rb_intern_str(VALUE str)
Definition: parse.c:16892
#define rb_usascii_str_new2
#define NEW_TRUE()
#define RE_OPTION_ENCODING(e)
Definition: parse.c:583
NODE * rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
Definition: parse.c:16402
static ID * vtable_tblcpy(ID *buf, const struct vtable *src)
Definition: parse.c:16044
#define yyparse
Definition: parse.c:417
#define nd_resq
#define NODE_NTH_REF
void rb_define_global_const(const char *, VALUE)
Definition: variable.c:2216
#define DVARS_TOPSCOPE
Definition: parse.c:197
#define set_yylval_str(x)
Definition: parse.c:11521
void rb_gc_force_recycle(VALUE)
Definition: gc.c:2963
static const yytype_uint16 yyr1[]
Definition: parse.c:1621
#define NODE_TRUE
#define gettable(id)
Definition: parse.c:482
#define set_yylval_literal(x)
Definition: parse.c:11525
#define yytable_value_is_error(yytable_value)
Definition: parse.c:3150
#define IDSET_ATTRSET_FOR_SYNTAX
Definition: parse.c:16591
#define YYPOPSTACK(N)
#define T_NODE
#define ADD2HEAP(n, c, p)
Definition: parse.c:17415
VALUE rb_parser_encoding(VALUE vparser)
Definition: parse.c:17373
#define rb_enc_name(enc)
#define literal_concat(h, t)
Definition: parse.c:454
const int id
Definition: nkf.c:209
static void block_dup_check_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15168
int line_count
Definition: ripper.c:325
#define NEW_EVSTR(n)
#define NODE_ARGS
#define NEW_NEXT(s)
stack_type parser_cmdarg_stack
Definition: ripper.c:298
#define RFLOAT_VALUE(v)
#define strcasecmp
Definition: win32.h:200
#define STR_NEW2(p)
Definition: parse.c:360
static int lvar_defined_gen(struct parser_params *, ID)
Definition: parse.c:13000
#define tokspace(n)
Definition: parse.c:11506
VALUE rb_enc_from_encoding(rb_encoding *encoding)
Definition: encoding.c:103
#define NEW_NIL()
int rb_is_method_name(VALUE name)
Definition: parse.c:17173
static ID * local_tbl_gen(struct parser_params *)
Definition: parse.c:16059
#define NODE_ENSURE
VALUE rb_eTypeError
Definition: error.c:511
#define rb_enc_isalnum(c, enc)
#define rb_warnI(fmt, a)
Definition: parse.c:694
#define OBJ_FREEZE(x)
NODE * node
Definition: parse.h:165
Definition: ripper.y:120
void rb_define_alloc_func(VALUE, rb_alloc_func_t)
#define PARSER_ARG
Definition: parse.c:721
#define NEW_ZARRAY()
st_table * names
Definition: encoding.c:53
#define rb_enc_prev_char(s, p, e, enc)
#define lvar_defined(id)
Definition: parse.c:579
VALUE rb_ary_push(VALUE ary, VALUE item)
Definition: array.c:822
ID rb_intern3(const char *name, long len, rb_encoding *enc)
Definition: parse.c:16744
NODE * kw_args
Definition: ripper.y:517
#define current_enc
Definition: parse.c:400
#define lex_pbeg
Definition: parse.c:388
Definition: ripper.y:99
#define MAX_WORD_LENGTH
Definition: lex.c:43
VALUE rb_eEncodingError
Definition: error.c:517
NODE * rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
Definition: parse.c:11982
#define subnodes(n1, n2)
#define yydebug
Definition: parse.c:401
#define TYPE(x)
struct RBasic basic
Definition: ripper.y:843
#define YYSTACK_BYTES(N)
Definition: parse.c:1090
#define nd_term(node)
Definition: parse.c:596
static int parser_yylex(struct parser_params *parser)
Definition: parse.c:13334
#define nd_else
yytokentype
Definition: ripper.y:40
rb_encoding * rb_enc_compatible(VALUE str1, VALUE str2)
Definition: encoding.c:789
#define new_args_tail(k, kr, b)
Definition: parse.c:470
#define CMDARG_LEXPOP()
Definition: parse.c:178
#define NODE_PRELUDE
#define RSTRING_PTR(str)
static NODE * new_evstr_gen(struct parser_params *, NODE *)
Definition: parse.c:14889
#define NEW_MATCH2(n1, n2)
VALUE op_sym[tLAST_OP_ID]
Definition: ripper.c:16571
int rb_is_junk_name(VALUE name)
Definition: parse.c:17183
VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline)
Definition: re.c:2530
#define T_ARRAY
VALUE debug_lines
Definition: ripper.c:337
static int parser_regx_options(struct parser_params *)
Definition: parse.c:12415
VALUE rb_enc_str_new(const char *, long, rb_encoding *)
Definition: string.c:439
#define NEW_LAMBDA(a, b)
ID id
Definition: parse.h:166
#define nd_plen
#define NEW_POSTEXE(b)
#define NEW_STR(s)
#define NODE_EVSTR
#define xfree
static void set_file_encoding(struct parser_params *parser, const char *str, const char *send)
Definition: parse.c:13246
static NODE * newline_node(NODE *)
Definition: parse.c:14651
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
Definition: vm_eval.c:773
#define Qnil
#define NODE_DXSTR
static void ripper_init_eventids1_table(VALUE self)
Definition: eventids1.c:270
#define NODE_CASE
void rb_raise(VALUE exc, const char *fmt,...)
Definition: error.c:1780
#define YY_SYMBOL_PRINT(Title, Type, Value, Location)
Definition: parse.c:4481
#define RE_OPTION_ONCE
Definition: parse.c:581
#define T_HASH
Definition: ripper.y:109
static const yytype_uint16 yyprhs[]
Definition: parse.c:1199
#define block_dup_check(n1, n2)
Definition: parse.c:441
VALUE rb_enc_associate(VALUE obj, rb_encoding *enc)
Definition: encoding.c:766
static void warn_unused_var(struct parser_params *parser, struct local_vars *local)
Definition: parse.c:15991
ID * tbl
Definition: ripper.c:182
union RString::@63 as
void rb_compile_warn(const char *file, int line, const char *fmt,...)
Definition: error.c:172
#define attrset(node, id)
Definition: parse.c:489
#define T_FILE
int pre_args_num
Definition: ripper.y:509
primary_value operation2 command_args prec tLOWEST
Definition: ripper.y:1401
#define new_const_op_assign(lhs, op, rhs)
Definition: parse.c:500
#define NEW_CONST(v)
int parser_toksiz
Definition: ripper.c:310
static NODE * assignable_gen(struct parser_params *, ID, NODE *)
Definition: parse.c:15030
int rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc)
Definition: encoding.c:886
NODE * kw_rest_arg
Definition: ripper.y:518
#define NODE_STR
ID last_id
Definition: ripper.c:16564
static size_t parser_memsize(const void *ptr)
Definition: parse.c:17290
#define RFLOAT(obj)
#define NODE_REDO
#define NODE_NEXT
static NODE * new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
Definition: parse.c:15911
static void fixpos(NODE *, NODE *)
Definition: parse.c:14661
Definition: ripper.y:112
#define NEW_DVAR(v)
#define lex_pend
Definition: parse.c:390
static NODE * gettable_gen(struct parser_params *, ID)
Definition: parse.c:14952
#define nd_paren(node)
Definition: parse.c:598
#define cmdarg_stack
Definition: parse.c:371
static struct symbols global_symbols
#define is_class_id(id)
Definition: parse.c:116
#define ID_LOCAL
Definition: ripper.y:82
#define NODE_XSTR
static NODE * cond0(struct parser_params *, NODE *)
Definition: parse.c:15686
Definition: ripper.y:107
#define STR_NEW0()
Definition: parse.c:359
void rb_gc_mark_parser(void)
Definition: parse.c:16365
#define NEW_CVASGN(v, val)
#define NODE_BLOCK_PASS
#define numberof(array)
Definition: parse.c:92
#define reg_compile(str, options)
Definition: parse.c:511
#define ISDIGIT(c)
static int local_var_gen(struct parser_params *, ID)
Definition: parse.c:16081
#define str_copy(_s, _p, _n)
#define NEW_BREAK(s)
unsigned int last
Definition: nkf.c:4310
#define NEW_OP_ASGN_OR(i, val)
static NODE * match_op_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:14918
#define NEW_MASGN(l, r)
ID block_arg
Definition: ripper.y:515
#define ENCODING_IS_ASCII8BIT(obj)
static void yy_stack_print(yytype_int16 *yybottom, yytype_int16 *yytop)
Definition: parse.c:4565
#define InitVM(ext)
struct RNode * node
Definition: ripper.y:244
rb_encoding * rb_utf8_encoding(void)
Definition: encoding.c:1168
#define ID2SYM(x)
VALUE parser_lex_input
Definition: ripper.c:312
#define T_FLOAT
static int dvar_defined_gen(struct parser_params *, ID, int)
Definition: parse.c:16168
static NODE * new_yield_gen(struct parser_params *, NODE *)
Definition: parse.c:15790
#define RE_OPTION_ENCODING_NONE(o)
Definition: parse.c:585
#define NEW_LVAR(v)
#define YYNTOKENS
Definition: parse.c:1140
static char * parser_tokspace(struct parser_params *parser, int n)
Definition: parse.c:12130
VALUE klass
Definition: ripper.y:701
int rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
Definition: parse.c:16692
#define rb_enc_isdigit(c, enc)
#define tokadd_string(f, t, p, n, e)
Definition: parse.c:11512
#define T_OBJECT
#define paren_nest
Definition: parse.c:373
#define ENC_CODERANGE_BROKEN
#define is_identchar(p, e, enc)
Definition: parse.c:11614
Definition: ripper.y:114
#define ID_INTERNAL
#define LONG2NUM(x)
VALUE rb_str_append(VALUE, VALUE)
Definition: string.c:2122
#define RUBY_DTRACE_PARSE_BEGIN(arg0, arg1)
Definition: probes.h:68
Definition: ripper.y:96
int pos
Definition: ripper.c:183
#define NEW_FOR(v, i, b)
static void parser_heredoc_restore(struct parser_params *parser, NODE *here)
Definition: parse.c:12828
#define NEW_CLASS(n, b, s)
static NODE * remove_begin(NODE *)
Definition: parse.c:15484
static int is_global_name_punct(const char c)
Definition: parse.c:12664
#define NODE_GASGN
#define NEW_SPLAT(a)
NODE * rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
Definition: parse.c:11947
#define ID_SCOPE_SHIFT
#define NEW_PRELUDE(p, b)
#define lex_lastline
Definition: parse.c:386
#define NEW_ITER(a, b)
#define head
Definition: st.c:107
#define tok_hex(numlen)
Definition: parse.c:11508
#define ENCODING_GET(obj)
int parser_yydebug
Definition: ripper.c:331
st_table * id_str
Definition: ripper.c:16566
static const yytype_int16 yytable[]
Definition: parse.c:2034
NODE * parser_eval_tree
Definition: ripper.c:336
NODE * parser_deferred_nodes
Definition: ripper.c:320
#define sym(x)
Definition: date_core.c:3715
#define NEW_GVAR(v)
void rb_name_error(ID id, const char *fmt,...)
Definition: error.c:899
command_asgn lhs
Definition: ripper.y:1270
static int dyna_in_block_gen(struct parser_params *)
Definition: parse.c:16162
static const rb_data_type_t parser_data_type
Definition: parse.c:11918
Definition: ripper.y:240
#define YYSYNTAX_ERROR
#define YYABORT
Definition: parse.c:4384
Definition: parse.h:159
int has_shebang
Definition: ripper.c:326
nd_args
Definition: parse.y:1382
#define NEW_DSTR(s)
Win32OLEIDispatch * p
Definition: win32ole.c:786
#define nd_set_type(n, t)
#define logop(type, node1, node2)
Definition: parse.c:425
static rb_encoding * must_be_ascii_compatible(VALUE s)
Definition: parse.c:11868
#define ISALPHA(c)
Definition: ruby.h:1636
#define MEMZERO(p, type, n)
static void dyna_pop_1(struct parser_params *parser)
Definition: parse.c:16130
void rb_exc_raise(VALUE mesg)
Definition: eval.c:527
#define NEW_UNLESS(c, t, e)
#define in_single
Definition: parse.c:376
#define NEW_MODULE(n, b)
int args
Definition: win32ole.c:785
static NODE * new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
Definition: parse.c:15956
unsigned long st_data_t
Definition: ripper.y:35
#define strtod(s, e)
Definition: util.h:76
VALUE rb_usascii_str_new(const char *, long)
Definition: string.c:431
#define parser_warn(node, mesg)
Definition: parse.c:14681
struct vtable * prev
Definition: ripper.c:185
#define RUBY_DTRACE_PARSE_END(arg0, arg1)
Definition: probes.h:72
struct RString::@63::@64 heap
static void warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
Definition: parse.c:15606
Definition: ripper.y:110
#define toksiz
Definition: parse.c:383
int rb_is_instance_name(VALUE name)
Definition: parse.c:17155
Definition: ripper.y:97
#define NEW_OP_ASGN_AND(i, val)
static VALUE coverage(const char *f, int n)
Definition: parse.c:11776
rb_encoding * enc
Definition: ripper.c:329
static void parser_free(void *ptr)
Definition: parse.c:17270
#define free
Definition: parse.c:101
#define NODE_LVAR
enum lex_state_e parser_lex_state
Definition: ripper.c:296
int rb_is_local_id(ID id)
Definition: parse.c:17039
#define lex_gets
Definition: parse.c:395
#define NODE_LASGN
int capa
Definition: ripper.c:184
VALUE parser_lex_lastline
Definition: ripper.c:313
#define NEW_OPT_N(b)
Definition: ripper.y:113
void * rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
Definition: parse.c:17439
#define void_expr(node)
Definition: parse.c:435
#define NEW_KW_ARG(i, v)
static void parser_initialize(struct parser_params *parser)
Definition: parse.c:17191
#define scan_hex(s, l, e)
Definition: util.h:54
static void parser_set_encode(struct parser_params *parser, const char *name)
Definition: parse.c:13027
#define FIXNUM_P(f)
#define local_id(id)
Definition: parse.c:561
#define here_document(n)
Definition: parse.c:11515
#define lex_goto_eol(parser)
Definition: parse.c:12035
int rb_char_to_option_kcode(int c, int *option, int *kcode)
Definition: re.c:301
#define ruby_sourcefile
Definition: parse.c:399
#define TypedData_Get_Struct(obj, type, data_type, sval)
void rb_compile_error_append(const char *fmt,...)
Definition: error.c:150
#define RARRAY_LEN(a)
VALUE rb_parser_get_yydebug(VALUE self)
Definition: parse.c:17388
#define NODE_WHEN
#define StringValuePtr(v)
#define YYTRANSLATE(YYX)
Definition: parse.c:1152
#define val
int rb_ispunct(int c)
Definition: encoding.c:1892
#define tokidx
Definition: parse.c:382
VALUE rb_eRuntimeError
Definition: error.c:510
#define Qtrue
#define match_op(node1, node2)
Definition: parse.c:503
static enum node_type nodetype(NODE *node)
Definition: parse.c:14639
#define NEW_STRTERM(func, term, paren)
Definition: parse.c:12620
const rb_data_type_t * parent
Definition: ripper.y:969
#define NEW_RESCUE(b, res, e)
#define RARRAY(obj)
static const struct magic_comment magic_comments[]
Definition: parse.c:13111
#define CMDARG_PUSH(n)
Definition: parse.c:176
return c
Definition: ripper.y:7591
#define reg_named_capture_assign(regexp, match)
Definition: parse.c:517
union RNode::@81 u2
#define arg_concat(h, t)
Definition: parse.c:452
struct parser_params * parser
Definition: ripper.c:16351
static void magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
Definition: parse.c:13075
#define RE_OPTION_MASK
Definition: parse.c:586
#define NODE_YIELD
#define NEW_NODE(t, a0, a1, a2)
#define NEW_LIST(a)
#define NEW_ENSURE(b, en)
RUBY_EXTERN VALUE rb_mKernel
Definition: ripper.y:1414
void * rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
Definition: parse.c:17429
#define NODE_FLIP2
char * ruby_strdup(const char *)
Definition: util.c:456
#define NODE_BLOCK
#define DEF_EXPR(n)
Definition: parse.c:141
#define ID_INSTANCE
static int e_option_supplied(struct parser_params *parser)
Definition: parse.c:11793
#define NEW_BLOCK(a)
static struct vtable * vtable_alloc(struct vtable *prev)
Definition: parse.c:215
#define token_info_push(token)
Definition: parse.c:736
static int rb_str_symname_type(VALUE name, unsigned int allowed_atttset)
Definition: parse.c:16698
#define NODE_DASGN_CURR
int parser_paren_nest
Definition: ripper.c:300
VALUE rb_ary_new(void)
Definition: array.c:424
#define NODE_AND
#define YY_(msgid)
Definition: parse.c:975
#define NODE_HEREDOC
Definition: parse.c:590
int rb_ascii8bit_encindex(void)
Definition: encoding.c:1162
unsigned long ID
Definition: ripper.y:105
#define NEW_UNDEF(i)
#define VTBL_DEBUG
Definition: parse.c:212
#define ID_JUNK
#define cond_stack
Definition: parse.c:370
static int is_special_global_name(const char *m, const char *e, rb_encoding *enc)
Definition: parse.c:16554
static const yytype_uint16 yyrline[]
Definition: parse.c:1461
void rb_gc_mark(VALUE)
Definition: gc.c:2600
#define ID_GLOBAL
#define IS_SPCARG(c)
Definition: parse.c:13316
void rb_define_const(VALUE, const char *, VALUE)
Definition: variable.c:2202
#define set_yylval_id(x)
Definition: parse.c:11523
RUBY_EXTERN int ffs(int)
Definition: ffs.c:6
#define NEW_WHEN(c, t, e)
top_stmt escape_Qundef($1)
#define ISASCII(c)
Definition: ruby.h:1629
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
Definition: class.c:499
static char msg[50]
Definition: strerror.c:8
#define RSTRING_LEN(str)
int rb_is_attrset_id(ID id)
Definition: parse.c:17033
static int reg_fragment_check_gen(struct parser_params *, VALUE, int)
Definition: parse.c:16246
#define INT2FIX(i)
#define YYSTACK_ALLOC
Definition: parse.c:1043
long(* rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len)
Definition: parse.c:13071
#define Qfalse
static NODE * dsym_node_gen(struct parser_params *, NODE *)
Definition: parse.c:15884
#define STR_FUNC_REGEXP
Definition: parse.c:12002
NODE * rb_compile_string(const char *f, VALUE s, int line)
Definition: parse.c:11940
Definition: ripper.y:135
VALUE value
Definition: ripper.y:246
#define FIX2LONG(x)
static NODE * new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs)
Definition: parse.c:15940
#define k__END__
Definition: eventids2.c:9
#define ISALNUM(c)
Definition: ruby.h:1635
rb_atomic_t cnt[RUBY_NSIG]
Definition: signal.c:432
static void no_blockarg(struct parser_params *parser, NODE *node)
Definition: parse.c:15765
#define T_STRING
#define MBCLEN_CHARFOUND_P(ret)
static double one(void)
Definition: isinf.c:52
static NODE * splat_array(NODE *)
Definition: parse.c:15280
static void parser_mark(void *ptr)
Definition: parse.c:17244
unsigned char OnigUChar
Definition: ripper.y:114
#define NODE_ARGSCAT
#define NODE_COLON2
static void parser_tokadd(struct parser_params *parser, int c)
Definition: parse.c:12142
#define nd_set_line(n, l)
#define is_local_id(id)
Definition: parse.c:111
static YYSIZE_T yystrlen(char *yystr) const
Definition: parse.c:4667
#define LVAR_USED
Definition: parse.c:15119
#define xmalloc
#define xrealloc
static void ripper_init_eventids1(void)
Definition: eventids1.c:134
int argc
Definition: ruby.c:130
#define NIL_P(v)
static int sym_check_asciionly(VALUE str)
Definition: parse.c:16724
yytype_int16 yyss_alloc
Definition: ripper.c:1081
static ID intern_str(VALUE str)
Definition: parse.c:16766
#define STR_FUNC_INDENT
Definition: parse.c:12005
char ary[RSTRING_EMBED_LEN_MAX+1]
Definition: ripper.y:853
#define arg_append(h, t)
Definition: parse.c:450
static VALUE lex_get_str(struct parser_params *parser, VALUE s)
Definition: parse.c:11878
static int assign_in_cond(struct parser_params *parser, NODE *node)
Definition: parse.c:15579
#define op_tbl_count
Definition: parse.c:16467
#define warn_balanced(op, syn)
Definition: parse.c:13328
#define NEW_ARGS_AUX(r, b)
#define tokadd(c)
Definition: parse.c:11507
#define no_digits()
#define TypedData_Wrap_Struct(klass, data_type, sval)
#define peek_n(c, n)
Definition: parse.c:12038
#define RSTRING_NOEMBED
#define YYFINAL
Definition: parse.c:1135
#define ISUPPER(c)
Definition: ruby.h:1633
static void void_expr_gen(struct parser_params *, NODE *)
Definition: parse.c:15381
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:16269
#define RUBY_FUNC_EXPORTED
Definition: defines.h:184
VALUE rb_suppress_tracing(VALUE(*func)(VALUE), VALUE arg)
Definition: vm_trace.c:345
VALUE rb_enc_associate_index(VALUE obj, int idx)
Definition: encoding.c:748
int rb_parse_in_main(void)
Definition: compile.c:5882
#define YYCASE_(N, S)
int err
Definition: win32.c:87
#define IS_AFTER_OPERATOR()
Definition: parse.c:13319
arg
Definition: ripper.y:1316
const char * parser_lex_pend
Definition: ripper.c:317
#define NEW_DEFINED(e)
static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
Definition: parse.c:12335
#define DBL2NUM(dbl)
#define ALLOCA_N(type, n)
#define IDSET_ATTRSET_FOR_INTERN
Definition: parse.c:16592
#define ENC_CODERANGE_UNKNOWN
#define set_yylval_num(x)
Definition: parse.c:11522
long cnt
Definition: ripper.y:262
Definition: ripper.y:116
Definition: util.c:791
#define parser_encoding_name()
Definition: parse.c:11611
token_info * parser_token_info
Definition: ripper.c:342
Definition: ripper.y:123
#define new_op_assign(lhs, op, rhs)
Definition: parse.c:543
int column
Definition: ripper.c:273
#define YYSIZE_T
Definition: parse.c:961
#define END(no)
Definition: re.c:26
#define brace_nest
Definition: parse.c:375
#define EOF
Definition: vsnprintf.c:207
static NODE * list_append_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:14738
VALUE rb_str_buf_cat(VALUE, const char *, long)
Definition: string.c:1948
#define ruby_verbose
VALUE rb_str_dup(VALUE)
Definition: string.c:946
static const yytype_int16 yycheck[]
Definition: parse.c:3153
static int literal_node(NODE *node)
Definition: parse.c:15665
static int dvar_curr_gen(struct parser_params *, ID)
Definition: parse.c:16199
#define tHEREDOC_END
Definition: eventids2.c:8
#define rb_long2int(n)
YYSTYPE yyvs_alloc
Definition: ripper.c:1082
#define ID_CLASS
#define NEW_LASGN(v, val)
node_type
Definition: ripper.y:23
#define flush_string_content(enc)
Definition: parse.c:12639
VALUE rb_obj_as_string(VALUE)
Definition: string.c:895
#define NODE_MEMO
#define NEW_OPT_ARG(i, v)
VALUE rb_hash_aset(VALUE, VALUE, VALUE)
string_type
Definition: ripper.c:12097
int rb_dvar_defined(ID id)
Definition: compile.c:5832
VALUE rb_str_resize(VALUE, long)
Definition: string.c:1854
int parser_in_single
Definition: ripper.c:302
#define RTEST(v)
lex_state_bits
Definition: ripper.c:125
int st_foreach(st_table *, int(*)(ANYARGS), st_data_t)
Definition: st.c:1000
#define ret_args(node)
Definition: parse.c:474
#define NEW_SCLASS(r, b)
static int parser_yyerror(struct parser_params *, const char *)
Definition: parse.c:11694
#define RUBY_DTRACE_PARSE_END_ENABLED()
Definition: probes.h:71
#define COND_LEXPOP()
Definition: parse.c:173
ID rest_arg
Definition: ripper.y:514
static const yytype_int16 yypgoto[]
Definition: parse.c:2006
SSL_METHOD *(* func)(void)
Definition: ossl_ssl.c:108
int errno
#define TRUE
Definition: nkf.h:175
static int parser_tokadd_mbchar(struct parser_params *parser, int c)
Definition: parse.c:12458
void rb_gc_mark_symbols(void)
Definition: parse.c:16536
#define NODE_NIL
int rb_symname_p(const char *name)
Definition: parse.c:16580
VALUE rb_thread_current(void)
Definition: thread.c:2352
#define COND_POP()
Definition: parse.c:172
#define TOK_INTERN(mb)
Definition: parse.c:363
#define NODE_ATTRASGN
int rb_is_junk_id(ID id)
Definition: parse.c:17045
VALUE rb_range_new(VALUE, VALUE, int)
Definition: range.c:67
VALUE rb_sprintf(const char *format,...)
Definition: sprintf.c:1270
#define NODE_COLON3
#define StringValue(v)
#define COND_P()
Definition: parse.c:174
#define NODE_DEFINED
#define rb_enc_mbcput(c, buf, enc)
#define ruby_coverage
Definition: parse.c:407
static VALUE debug_lines(const char *f)
Definition: parse.c:11759
static void yydestruct(char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser) const
Definition: parse.c:4903
#define rb_warnS(fmt, a)
Definition: parse.c:695
#define parser_warning(node, mesg)
Definition: parse.c:14674
#define mixed_error(enc1, enc2)
#define NEW_DOT2(b, e)
#define NODE_MASGN
#define T_REGEXP
#define const
Definition: strftime.c:102
RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e-0x20+31)/32]
Definition: parse.c:12642
#define NEW_DASGN(v, val)
#define value_expr(node)
Definition: parse.c:433
#define NEW_VALIAS(n, o)
#define NEW_POSTARG(i, v)
#define rb_warning0(fmt)
Definition: parse.c:697
#define CONST_ID(var, str)
#define NEW_ERRINFO()
#define reg_fragment_setenc(str, options)
Definition: parse.c:513
static int value_expr_gen(struct parser_params *, NODE *)
Definition: parse.c:15319
static const yytype_int16 yyrhs[]
Definition: parse.c:1266
#define NODE_CONST
const char * rb_id2name(ID id)
Definition: parse.c:16968
static int parser_whole_match_p(struct parser_params *parser, const char *eos, long len, int indent)
Definition: parse.c:12845
#define YYDPRINTF(Args)
Definition: parse.c:4475
static const char * magic_comment_marker(const char *str, long len)
Definition: parse.c:13119
#define rb_warn0(fmt)
Definition: parse.c:693
rb_magic_comment_length_t length
Definition: ripper.c:13198
int parser_in_def
Definition: ripper.c:303
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
Definition: class.c:1570
#define NEW_SUPER(a)
static const yytype_uint8 yytranslate[]
Definition: parse.c:1156
#define new_bv(id)
Definition: parse.c:550
#define YYEMPTY
Definition: parse.c:4380
#define YYSTACK_FREE
Definition: parse.c:1044
#define NEW_COLON2(c, i)
#define YYID(n)
Definition: parse.c:988
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
VALUE rb_io_gets(VALUE)
Definition: io.c:3110
static void Init_id(void)
Definition: ripper.y:15
static char * parser_newtok(struct parser_params *parser)
Definition: parse.c:12114
long parser_lex_gets_ptr
Definition: ripper.c:321
#define NODE_GVAR
#define NODE_CDECL
static void fixup_nodes(NODE **)
Definition: parse.c:15618
rb_encoding * rb_usascii_encoding(void)
Definition: encoding.c:1183
#define NEW_HASH(a)
#define dyna_pop(node)
Definition: parse.c:568
Definition: ripper.y:94
#define RARRAY_PTR(a)
#define list_concat(h, t)
Definition: parse.c:448
union RNode::@82 u3
#define dyna_in_block()
Definition: parse.c:570
#define dyna_var(id)
Definition: parse.c:571
#define RB_GC_GUARD(v)
#define STR_FUNC_ESCAPE
Definition: parse.c:12000
#define NODE_LIT
int type
Definition: tcltklib.c:111
int id[2]
Definition: lex.c:33
static int options(unsigned char *cp)
Definition: nkf.c:6355
#define heredoc_restore(n)
Definition: parse.c:11517
#define NEW_UNTIL(c, b, n)
#define T_FIXNUM
#define NEW_MATCH3(r, n2)
#define yyerror(msg)
Definition: parse.c:366
VALUE rb_str_buf_new(long)
Definition: string.c:777
#define peek(c)
Definition: parse.c:12037
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: ripper.y:507
static NODE * arg_append_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15262
static void ripper_init_eventids2(void)
Definition: eventids2.c:64
int rb_const_defined_at(VALUE, ID)
Definition: variable.c:2109
#define heredoc_identifier()
Definition: parse.c:11516
int parser_heredoc_end
Definition: ripper.c:318
Definition: ripper.y:101
static VALUE parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
Definition: parse.c:12019
Definition: ripper.y:72
#define ripper_flush(p)
Definition: parse.c:11544
#define dsym_node(node)
Definition: parse.c:479
#define regx_options()
Definition: parse.c:11511
mlhs_head tSTAR
Definition: ripper.y:1542
int post_args_num
Definition: ripper.y:510
static int parser_magic_comment(struct parser_params *parser, const char *str, long len)
Definition: parse.c:13152
#define token_info_pop(token)
Definition: parse.c:737
static int arg_var_gen(struct parser_params *, ID)
Definition: parse.c:16074
#define NEW_SELF()
#define call_bin_op(recv, id, arg1)
Definition: parse.c:463
#define rb_warn4S(file, line, fmt, a)
Definition: parse.c:696
VALUE rb_attr_get(VALUE, ID)
Definition: variable.c:1122
#define rb_enc_ispunct(c, enc)
VALUE rb_ensure(VALUE(*b_proc)(ANYARGS), VALUE data1, VALUE(*e_proc)(ANYARGS), VALUE data2)
Definition: eval.c:804
VALUE flags
Definition: ripper.y:700
static VALUE yycompile0(VALUE arg)
Definition: parse.c:11799
#define NEW_RESBODY(a, ex, n)
#define NEW_RETURN(s)
#define NODE_ARGSPUSH
#define NODE_BACK_REF
#define NODE_MATCH
#define Qnone
Definition: parse.c:685
#define assignable_result(x)
static int parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
Definition: parse.c:12342
static int parser_tokadd_string(struct parser_params *, int, int, int, long *, rb_encoding **)
Definition: parse.c:12487
VALUE rb_reg_check_preprocess(VALUE)
Definition: re.c:2304
VALUE flags
Definition: ripper.y:241
expr ripper_intern("and")
const char * token
Definition: ripper.c:271
RUBY_EXTERN VALUE rb_cString
Definition: ripper.y:1456
#define NEW_COLON3(i)
#define dvar_defined_get(id)
Definition: parse.c:574
#define RUBY_DTRACE_PARSE_BEGIN_ENABLED()
Definition: probes.h:67
#define NEW_CASE(h, b)
static NODE * new_args_gen(struct parser_params *, NODE *, NODE *, ID, NODE *, NODE *)
Definition: parse.c:15837
#define ruby_sourceline
Definition: parse.c:398
#define is_global_id(id)
Definition: parse.c:112
#define lex_input
Definition: parse.c:385
#define STR_FUNC_QWORDS
Definition: parse.c:12003
static int vtable_included(const struct vtable *tbl, ID id)
Definition: parse.c:254
#define NODE_DASGN
ID rb_intern(const char *name)
Definition: parse.c:16886
int parser_in_defined
Definition: ripper.c:307
#define ruby_eval_tree
Definition: parse.c:404
#define NEW_BACK_REF(n)
VALUE rb_vsprintf(const char *, va_list)
Definition: sprintf.c:1264
int parser_class_nest
Definition: ripper.c:299
#define T_BIGNUM
ID token
Definition: parse.c:16443
static const struct @118 op_tbl[]
static VALUE lex_io_gets(struct parser_params *parser, VALUE io)
Definition: parse.c:11968
#define MEMCPY(p1, p2, type, n)
NODE * rb_compile_cstr(const char *f, const char *s, int len, int line)
Definition: parse.c:11954
#define parser_is_identchar()
Definition: parse.c:11615
Definition: ripper.y:122
#define NEW_IF(c, t, e)
#define ruby__end__seen
Definition: parse.c:397
#define dvar_curr(id)
Definition: parse.c:576
#define set_yylval_node(x)
Definition: parse.c:11526
static void yy_symbol_value_print(FILE *yyoutput, int yytype, YYSTYPE const *const yyvaluep, struct parser_params *parser)
Definition: parse.c:4504
nd_iter
Definition: parse.y:1392
static void vtable_free(struct vtable *tbl)
Definition: parse.c:227
#define NEW_GASGN(v, val)
#define NEW_ARGSPUSH(a, b)
#define rb_compile_error
Definition: parse.c:719
static int rb_enc_symname_type(const char *name, long len, rb_encoding *enc, unsigned int allowed_atttset)
Definition: parse.c:16595
#define reg_fragment_check(str, options)
Definition: parse.c:515
const struct vtable * vars
Definition: parse.h:168
VALUE rb_str_cat(VALUE, const char *, long)
Definition: string.c:1964
#define NEW_XSTR(s)
Definition: ripper.y:111
#define lex_state
Definition: parse.c:369
#define arg_ambiguous()
Definition: parse.c:12986
#define ENC_CODERANGE_7BIT
rb_encoding * rb_enc_get(VALUE obj)
Definition: encoding.c:772
#define NEW_WHILE(c, b, n)
static void reduce_nodes_gen(struct parser_params *, NODE **)
Definition: parse.c:15494
#define NEW_DEFS(r, i, a, d)
int nonspc
Definition: ripper.c:274
int size
Definition: encoding.c:52
#define YYSTACK_ALLOC_MAXIMUM
Definition: parse.c:1046
#define newtok()
Definition: parse.c:11505
#define f
#define yylval
Definition: parse.c:11494
#define set_yylval_name(x)
Definition: parse.c:11524
#define SYMBOL_P(x)
static NODE * reg_named_capture_assign_gen(struct parser_params *parser, VALUE regexp, NODE *match)
Definition: parse.c:16309
#define NODE_FLIP3
static void parser_pushback(struct parser_params *parser, int c)
Definition: parse.c:12097
int rb_enc_symname_p(const char *name, rb_encoding *enc)
Definition: parse.c:16586
#define Qundef
int parser_tokidx
Definition: ripper.c:309
static const yytype_uint16 yydefact[]
Definition: parse.c:1757
#define NODE_DVAR
#define lpar_beg
Definition: parse.c:374
static int parser_here_document(struct parser_params *, NODE *)
Definition: parse.c:12875
#define YYUSE(e)
Definition: parse.c:981
#define COND_PUSH(n)
Definition: parse.c:171
int rb_is_const_name(VALUE name)
Definition: parse.c:17137
static NODE * ret_args_gen(struct parser_params *, NODE *)
Definition: parse.c:15773
Definition: ripper.y:92
#define YYACCEPT
Definition: parse.c:4383
Definition: ripper.y:127
VALUE coverage
Definition: ripper.c:338
VALUE rb_external_str_new_with_enc(const char *ptr, long len, rb_encoding *)
Definition: string.c:569
void rb_set_errinfo(VALUE err)
Definition: eval.c:1436
#define lex_gets_ptr
Definition: parse.c:394
return tOP_ASGN
Definition: ripper.y:7647
#define rb_enc_isspace(c, enc)
static void dyna_pop_gen(struct parser_params *, const struct vtable *)
Definition: parse.c:16148
NODE * parser_lex_strterm
Definition: ripper.c:295
int rb_is_global_id(ID id)
Definition: parse.c:17021
const char * name
Definition: parse.c:16444
const char * name
Definition: ripper.c:13196
#define NEW_IVAR(v)
top_stmts dispatch0(stmts_new)
static void local_pop_gen(struct parser_params *)
Definition: parse.c:16028
#define tSP
Definition: eventids2.c:6
#define NEW_ATTRASGN(r, m, a)
#define IS_lex_state(ls)
Definition: parse.c:158
static int simple_re_meta(int c)
Definition: parse.c:12474
#define NODE_ZARRAY
#define lvtbl
Definition: parse.c:396
#define new_attr_op_assign(lhs, type, attr, op, rhs)
Definition: parse.c:498
#define aryset(node1, node2)
Definition: parse.c:487
#define NEW_BEGIN(b)
NODE * pre_init
Definition: ripper.y:506
#define NEW_FCALL(m, a)
#define NODE_CVAR
#define NEW_SCOPE(a, b)
static const struct st_hash_type symhash
Definition: parse.c:16484
#define list_append(l, i)
Definition: parse.c:446
st_index_t rb_str_hash(VALUE)
Definition: string.c:2245
#define NEW_OP_ASGN2(r, i, o, val)
#define tokaddmbc(c, enc)
Definition: parse.c:11514
#define NODE_BREAK
short int yytype_int16
Definition: parse.c:948
#define cur_mid
Definition: parse.c:379
#define STR_NEW3(p, n, e, func)
Definition: parse.c:361
#define IS_BEG()
Definition: parse.c:13315
rb_magic_comment_setter_t func
Definition: ripper.c:13197
static const yytype_int16 yypact[]
Definition: parse.c:1895
#define dvar_defined(id)
Definition: parse.c:573
int parser_lpar_beg
Definition: ripper.c:301
#define ESCAPE_CONTROL
Definition: parse.c:12240
void rb_compile_warning(const char *file, int line, const char *fmt,...)
Definition: error.c:185
st_table * sym_id
Definition: ripper.c:16565
RUBY_EXTERN VALUE rb_cObject
Definition: ripper.y:1426
static void warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
Definition: parse.c:15612
#define yypact_value_is_default(yystate)
Definition: parse.c:3147
#define ALLOC_N(type, n)
uint8_t key[16]
Definition: random.c:1370
#define LONG2FIX(i)
#define NODE_FL_NEWLINE
static int symbols_i(VALUE sym, ID value, VALUE ary)
Definition: parse.c:16977
#define RBASIC(obj)
struct local_vars * prev
Definition: ripper.c:192
#define NEW_VCALL(m)
#define IS_END()
Definition: parse.c:13314
static void parser_prepare(struct parser_params *parser)
Definition: parse.c:13289
ID rb_id_attrset(ID id)
Definition: parse.c:15187
static struct parser_params * parser_new(void)
Definition: parse.c:17333
struct vtable * vars
Definition: ripper.c:190
static void yy_symbol_print(FILE *yyoutput, int yytype, YYSTYPE const *const yyvaluep, struct parser_params *parser)
Definition: parse.c:4538
#define new_args(f, o, r, p, t)
Definition: parse.c:468
static void rb_backref_error_gen(struct parser_params *, NODE *)
Definition: parse.c:15224
VALUE rb_id2str(ID id)
Definition: parse.c:16902
#define INT2NUM(x)
#define YYINITDEPTH
Definition: parse.c:4639
static NODE * logop_gen(struct parser_params *, enum node_type, NODE *, NODE *)
Definition: parse.c:15750
#define NODE_DSTR
VALUE rb_parser_new(void)
Definition: parse.c:17344
static void void_stmts_gen(struct parser_params *, NODE *)
Definition: parse.c:15470
#define ENC_SINGLE(cr)
Definition: parse.c:362
struct rb_encoding_entry * list
Definition: encoding.c:50
keyword_BEGIN
Definition: ripper.y:1029
#define NEW_RETRY()
static const yytype_int16 yydefgoto[]
Definition: parse.c:1868
#define STRNCASECMP(s1, s2, n)
rb_encoding * rb_filesystem_encoding(void)
Definition: encoding.c:1248
VALUE rb_make_backtrace(void)
Definition: vm_backtrace.c:772
v
Definition: win32ole.c:798
#define parse_string(n)
Definition: parse.c:11513
#define NEWHEAP()
Definition: parse.c:17414
static int yylex(void *, void *)
Definition: parse.c:14604
int linenum
Definition: ripper.c:272
#define NEW_CVAR(v)
#define YYEOF
Definition: parse.c:4381
#define tEMBDOC
Definition: eventids2.c:4
Definition: ripper.y:121
#define NODE_BEGIN
int rb_is_global_name(VALUE name)
Definition: parse.c:17149
#define deferred_nodes
Definition: parse.c:393
char * parser_tokenbuf
Definition: ripper.c:308
#define node_assign(node1, node2)
Definition: parse.c:494
#define get_id(id)
Definition: parse.c:519
VALUE rb_cArray
Definition: array.c:29
#define BEG(no)
Definition: re.c:25
#define NEW_OP_ASGN1(p, id, a)
short int yytype_int8
Definition: parse.c:936
static unsigned int hash(const char *str, unsigned int len)
Definition: lex.c:56
#define id_type(id)
Definition: parse.c:118
int parser_tokline
Definition: ripper.c:311
Definition: ripper.y:79
#define YYTERROR
Definition: parse.c:4422
static int parser_parse_string(struct parser_params *, NODE *)
Definition: parse.c:12707
#define tok()
Definition: parse.c:12109
#define cond(node)
Definition: parse.c:423
VALUE rb_ary_new2(long capa)
Definition: array.c:417
#define ruby_eval_tree_begin
Definition: parse.c:405
#define is_instance_id(id)
Definition: parse.c:113
NODE * rb_parser_append_print(VALUE vparser, NODE *node)
Definition: parse.c:16370
ID rb_intern2(const char *name, long len)
Definition: parse.c:16879
VALUE rb_str_new(const char *, long)
Definition: string.c:425
union RNode::@80 u1
const char * parser_lex_pbeg
Definition: ripper.c:315
static NODE * cond_gen(struct parser_params *, NODE *)
Definition: parse.c:15743
NODE * rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
Definition: parse.c:11961
#define rb_safe_level()
Definition: tcltklib.c:94
static NODE * list_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:14758
#define NODE_CVASGN
Definition: ripper.c:181
#define NEW_CDECL(v, val, path)
static int is_private_local_id(ID name)
Definition: parse.c:15109
#define lex_p
Definition: parse.c:389
static int comment_at_top(struct parser_params *parser)
Definition: parse.c:13059
const char * parser_lex_p
Definition: ripper.c:316
#define nd_lit
static void dispose_string(VALUE str)
Definition: parse.c:12451
static int parser_nextc(struct parser_params *parser)
Definition: parse.c:12041
#define rb_enc_asciicompat(enc)
lex_state_e
Definition: ripper.c:140
#define read_escape(flags, e)
Definition: parse.c:11509
#define parser_isascii()
Definition: parse.c:11617
static const char *const yytname[]
Definition: parse.c:1531
#define NUM2INT(x)
#define nd_head
static char * yystpcpy(char *yydest, const char *yysrc)
Definition: parse.c:4691
int parser_ruby_sourceline
Definition: ripper.c:328
#define call_uni_op(recv, id)
Definition: parse.c:465
#define NODE_CALL
#define rb_errinfo()
Definition: tcltklib.c:89
static ID register_symid_str(ID, VALUE)
Definition: parse.c:16715
#define STR_FUNC_SYMBOL
Definition: parse.c:12004
#define rb_enc_isupper(c, enc)
#define DVARS_INHERIT
Definition: parse.c:196
static ID shadowing_lvar_gen(struct parser_params *, ID)
Definition: parse.c:15122
#define PRIsVALUE
YYSTYPE * parser_yylval
Definition: ripper.c:292
static int token_info_get_column(struct parser_params *parser, const char *token)
Definition: parse.c:11621
unsigned char yytype_uint8
Definition: parse.c:927
#define arg_var(id)
Definition: parse.c:559
#define xcalloc
#define is_junk_id(id)
Definition: parse.c:117
static NODE * yycompile(struct parser_params *parser, const char *f, int line)
Definition: parse.c:11859
#define NEW_LIT(l)
#define rb_enc_isascii(c, enc)
int rb_str_hash_cmp(VALUE, VALUE)
Definition: string.c:2255
static void vtable_add(struct vtable *tbl, ID id)
Definition: parse.c:239
int rb_is_class_id(ID id)
Definition: parse.c:17015
static const yytype_uint16 yystos[]
Definition: parse.c:4268
static int is_static_content(NODE *node)
Definition: parse.c:15555
int is_ripper
Definition: ripper.c:289
#define in_defined
Definition: parse.c:380
rb_encoding * rb_ascii8bit_encoding(void)
Definition: encoding.c:1153
#define NODE_IVAR
return tSYMBEG
Definition: ripper.y:7621
#define RREGEXP(obj)
int rb_enc_find_index(const char *name)
Definition: encoding.c:635
VALUE eofp
Definition: ripper.c:293
static NODE * aryset_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15160
VALUE rb_parser_end_seen_p(VALUE vparser)
Definition: parse.c:17358
static int parser_heredoc_identifier(struct parser_params *parser)
Definition: parse.c:12765
int rb_is_const_id(ID id)
Definition: parse.c:17009
static int parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp, int string_literal, int symbol_literal, int regexp_literal)
Definition: parse.c:12169
long len
Definition: ripper.y:846
static const struct vtable * dyna_push_gen(struct parser_params *)
Definition: parse.c:16119
NODE * heap
Definition: ripper.c:290
#define RSTRING_GETMEM(str, ptrvar, lenvar)
static NODE * block_append_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:14684
#define NODE_DOT2
#define ID_SCOPE_MASK
#define tokline
Definition: parse.c:384
#define ESCAPE_META
Definition: parse.c:12241
#define local_push(top)
Definition: parse.c:553
#define NODE_DREGX
#define NODE_IASGN
#define NEW_DEFN(i, a, d, p)
#define NODE_RETURN
VALUE rb_parser_set_yydebug(VALUE self, VALUE flag)
Definition: parse.c:17403
#define snprintf
static void new_bv_gen(struct parser_params *, ID)
Definition: parse.c:15146
#define assignable(id, node)
Definition: parse.c:484
ID first_post_arg
Definition: ripper.y:512
#define NEW_REDO()
st_table * st_init_numtable_with_size(st_index_t)
Definition: st.c:278
VALUE rb_cstr_to_inum(const char *str, int base, int badcheck)
Definition: bignum.c:579
static NODE * range_op(struct parser_params *parser, NODE *node)
Definition: parse.c:15649
#define ruby_debug_lines
Definition: parse.c:406
#define NODE_ARRAY
#define NODE_SPLAT
#define IS_ARG()
Definition: parse.c:13313
static int parser_tok_hex(struct parser_params *parser, size_t *numlen)
Definition: parse.c:12152
#define new_evstr(n)
Definition: parse.c:457
ID rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc)
Definition: parse.c:17109
int rb_parse_in_eval(void)
Definition: compile.c:5876
NODE * rb_compile_file(const char *f, VALUE file, int start)
Definition: parse.c:11974
#define ENCODING_SET(obj, i)
int rb_memcicmp(const void *, const void *, long)
Definition: re.c:80
#define lex_eol_p()
Definition: parse.c:12036
#define rb_node_newnode(type, a1, a2, a3)
Definition: parse.c:420
#define tCOMMENT
Definition: eventids2.c:2
#define NEW_ZSUPER()
#define void_stmts(node)
Definition: parse.c:437
#define block_append(h, t)
Definition: parse.c:444
#define nd_line(n)
VALUE(* parser_lex_gets)(struct parser_params *, VALUE)
Definition: ripper.c:322
#define NULL
Definition: _sdbm.c:103
#define compile_for_eval
Definition: parse.c:378
#define rb_enc_isalpha(c, enc)
struct token_info token_info
static NODE * literal_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:14799
#define tIGNORED_NL
Definition: eventids2.c:1
VALUE rb_check_string_type(VALUE)
Definition: string.c:1509
#define yyerrok
Definition: parse.c:4378
#define REALLOC_N(var, type, n)
#define NODE_SCOPE
static NODE * call_uni_op_gen(struct parser_params *, NODE *, ID)
Definition: parse.c:14911
#define YYMAXDEPTH
Definition: parse.c:4650
static int literal_concat0(struct parser_params *, VALUE, VALUE)
Definition: parse.c:14782
int rb_is_instance_id(ID id)
Definition: parse.c:17027
void rb_parser_free(struct parser_params *parser, void *ptr)
Definition: parse.c:17459
#define in_def
Definition: parse.c:377
int rb_enc_str_coderange(VALUE)
Definition: string.c:327
#define ISXDIGIT(c)
Definition: ruby.h:1638
int rb_local_defined(ID id)
Definition: compile.c:5857
st_index_t num_entries
Definition: ripper.y:93
#define IS_LABEL_SUFFIX(n)
Definition: parse.c:13318
NODE * parser_eval_tree_begin
Definition: ripper.c:335
static int match(VALUE str, VALUE pat, VALUE hash, int(*cb)(VALUE, VALUE))
Definition: date_parse.c:273
static NODE * parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
Definition: parse.c:11921
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
Definition: class.c:1344
static void parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
Definition: parse.c:13084
#define NODE_IASGN2
#define ULONG2NUM(x)
#define NODE_SELF
#define ifndef_ripper(x)
Definition: parse.c:686
void(* rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val)
Definition: parse.c:13072
#define SYM2ID(x)
#define YYLEX
Definition: parse.c:4464
static VALUE lex_getline(struct parser_params *parser)
Definition: parse.c:11898
VALUE rb_sym_all_symbols(void)
Definition: parse.c:17000
#define ID_CONST
VALUE rb_eArgError
Definition: error.c:512
#define NEW_ARRAY(a)
#define tokadd_escape(e)
Definition: parse.c:11510
Definition: ripper.y:93
static NODE * node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE)
Definition: parse.c:14631
void rb_str_free(VALUE)
Definition: string.c:830
#define dyna_push()
Definition: parse.c:566
#define RTYPEDDATA_TYPE(v)
#define whole_match_p(e, l, i)
Definition: parse.c:11518
#define was_bol()
Definition: parse.c:12106
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:4764
#define NODE_VALUES
#define HEAPCNT(n, size)
Definition: parse.c:17413
#define STR_FUNC_EXPAND
Definition: parse.c:12001
static int parser_peek_variable_name(struct parser_params *parser)
Definition: parse.c:12671
#define is_attrset_id(id)
Definition: parse.c:114
#define ID_ATTRSET
struct vtable * args
Definition: ripper.c:189
static int local_id_gen(struct parser_params *, ID)
Definition: parse.c:16091
#define SPECIAL_PUNCT(idx)
Definition: parse.c:12647
#define rb_backref_error(n)
Definition: parse.c:492
Definition: ripper.y:136
char ** argv
Definition: ruby.c:131
#define tEMBDOC_END
Definition: eventids2.c:5
char * ptr
Definition: ripper.y:847
static void ripper_init_eventids2_table(VALUE self)
Definition: eventids2table.c:2
#define nd_value
#define NEW_YIELD(a)
#define ISSPACE(c)
Definition: ruby.h:1632
#define STR_NEW(p, n)
Definition: parse.c:358
static NODE * new_args_tail_gen(struct parser_params *, NODE *, ID, ID)
Definition: parse.c:15859
#define rb_warningS(fmt, a)
Definition: parse.c:698
VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc)
Definition: string.c:2075
#define YYSTACK_RELOCATE(Stack_alloc, Stack)
Definition: parse.c:1101
VALUE rb_inspect(VALUE)
Definition: object.c:402
#define reduce_nodes(n)
Definition: parse.c:439
#define void_expr0(node)
Definition: parse.c:434
rb_encoding * rb_enc_from_index(int index)
Definition: encoding.c:548
#define tokcopy(n)
Definition: parse.c:12165
void Init_sym(void)
Definition: parse.c:16517
#define NEW_BLOCK_PASS(b)
NODE * opt_args
Definition: ripper.y:520