Ruby  2.0.0p594(2014-10-27revision48167)
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. */
330  rb_encoding *enc;
331 
332  int parser_yydebug;
333 
334 #ifndef RIPPER
335  /* Ruby core only */
339  VALUE coverage;
340  int nerr;
341 
344 #else
345  /* Ripper only */
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 ruby_sourcefile_string (parser->parser_ruby_sourcefile_string)
401 #define current_enc (parser->enc)
402 #define yydebug (parser->parser_yydebug)
403 #ifdef RIPPER
404 #else
405 #define ruby_eval_tree (parser->parser_eval_tree)
406 #define ruby_eval_tree_begin (parser->parser_eval_tree_begin)
407 #define ruby_debug_lines (parser->debug_lines)
408 #define ruby_coverage (parser->coverage)
409 #endif
410 
411 #if YYPURE
412 static int yylex(void*, void*);
413 #else
414 static int yylex(void*);
415 #endif
416 
417 #ifndef RIPPER
418 #define yyparse ruby_yyparse
419 
420 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
421 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, (type), (a1), (a2), (a3))
422 
423 static NODE *cond_gen(struct parser_params*,NODE*);
424 #define cond(node) cond_gen(parser, (node))
425 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
426 #define logop(type,node1,node2) logop_gen(parser, (type), (node1), (node2))
427 
428 static NODE *newline_node(NODE*);
429 static void fixpos(NODE*,NODE*);
430 
431 static int value_expr_gen(struct parser_params*,NODE*);
432 static void void_expr_gen(struct parser_params*,NODE*);
433 static NODE *remove_begin(NODE*);
434 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
435 #define void_expr0(node) void_expr_gen(parser, (node))
436 #define void_expr(node) void_expr0((node) = remove_begin(node))
437 static void void_stmts_gen(struct parser_params*,NODE*);
438 #define void_stmts(node) void_stmts_gen(parser, (node))
439 static void reduce_nodes_gen(struct parser_params*,NODE**);
440 #define reduce_nodes(n) reduce_nodes_gen(parser,(n))
441 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
442 #define block_dup_check(n1,n2) block_dup_check_gen(parser,(n1),(n2))
443 
444 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
445 #define block_append(h,t) block_append_gen(parser,(h),(t))
446 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
447 #define list_append(l,i) list_append_gen(parser,(l),(i))
448 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
449 #define list_concat(h,t) list_concat_gen(parser,(h),(t))
450 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
451 #define arg_append(h,t) arg_append_gen(parser,(h),(t))
452 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
453 #define arg_concat(h,t) arg_concat_gen(parser,(h),(t))
454 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
455 #define literal_concat(h,t) literal_concat_gen(parser,(h),(t))
456 static int literal_concat0(struct parser_params *, VALUE, VALUE);
457 static NODE *new_evstr_gen(struct parser_params*,NODE*);
458 #define new_evstr(n) new_evstr_gen(parser,(n))
459 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
460 #define evstr2dstr(n) evstr2dstr_gen(parser,(n))
461 static NODE *splat_array(NODE*);
462 
463 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
464 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, (recv),(id),(arg1))
465 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
466 #define call_uni_op(recv,id) call_uni_op_gen(parser, (recv),(id))
467 
468 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,NODE*);
469 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
470 static NODE *new_args_tail_gen(struct parser_params*,NODE*,ID,ID);
471 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
472 
473 static NODE *negate_lit(NODE*);
474 static NODE *ret_args_gen(struct parser_params*,NODE*);
475 #define ret_args(node) ret_args_gen(parser, (node))
476 static NODE *arg_blk_pass(NODE*,NODE*);
477 static NODE *new_yield_gen(struct parser_params*,NODE*);
478 #define new_yield(node) new_yield_gen(parser, (node))
479 static NODE *dsym_node_gen(struct parser_params*,NODE*);
480 #define dsym_node(node) dsym_node_gen(parser, (node))
481 
482 static NODE *gettable_gen(struct parser_params*,ID);
483 #define gettable(id) gettable_gen(parser,(id))
484 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
485 #define assignable(id,node) assignable_gen(parser, (id), (node))
486 
487 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
488 #define aryset(node1,node2) aryset_gen(parser, (node1), (node2))
489 static NODE *attrset_gen(struct parser_params*,NODE*,ID);
490 #define attrset(node,id) attrset_gen(parser, (node), (id))
491 
492 static void rb_backref_error_gen(struct parser_params*,NODE*);
493 #define rb_backref_error(n) rb_backref_error_gen(parser,(n))
494 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
495 #define node_assign(node1, node2) node_assign_gen(parser, (node1), (node2))
496 
497 static NODE *new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
498 static NODE *new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs);
499 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (attr), (op), (rhs))
500 static NODE *new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
501 #define new_const_op_assign(lhs, op, rhs) new_const_op_assign_gen(parser, (lhs), (op), (rhs))
502 
503 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
504 #define match_op(node1,node2) match_op_gen(parser, (node1), (node2))
505 
506 static ID *local_tbl_gen(struct parser_params*);
507 #define local_tbl() local_tbl_gen(parser)
508 
509 static void fixup_nodes(NODE **);
510 
511 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
512 #define reg_compile(str,options) reg_compile_gen(parser, (str), (options))
513 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
514 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, (str), (options))
515 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
516 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, (str), (options))
518 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,(regexp),(match))
519 
520 #define get_id(id) (id)
521 #define get_value(val) (val)
522 #else
523 #define value_expr(node) ((void)(node))
524 #define remove_begin(node) (node)
525 #define rb_dvar_defined(id) 0
526 #define rb_local_defined(id) 0
527 static ID ripper_get_id(VALUE);
528 #define get_id(id) ripper_get_id(id)
529 static VALUE ripper_get_value(VALUE);
530 #define get_value(val) ripper_get_value(val)
531 static VALUE assignable_gen(struct parser_params*,VALUE);
532 #define assignable(lhs,node) assignable_gen(parser, (lhs))
533 static int id_is_var_gen(struct parser_params *parser, ID id);
534 #define id_is_var(id) id_is_var_gen(parser, (id))
535 
536 #define node_assign(node1, node2) dispatch2(assign, (node1), (node2))
537 
538 static VALUE new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs);
540 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (type), (attr), (op), (rhs))
541 
542 #endif /* !RIPPER */
543 
544 #define new_op_assign(lhs, op, rhs) new_op_assign_gen(parser, (lhs), (op), (rhs))
545 
546 static ID formal_argument_gen(struct parser_params*, ID);
547 #define formal_argument(id) formal_argument_gen(parser, (id))
548 static ID shadowing_lvar_gen(struct parser_params*,ID);
549 #define shadowing_lvar(name) shadowing_lvar_gen(parser, (name))
550 static void new_bv_gen(struct parser_params*,ID);
551 #define new_bv(id) new_bv_gen(parser, (id))
552 
553 static void local_push_gen(struct parser_params*,int);
554 #define local_push(top) local_push_gen(parser,(top))
555 static void local_pop_gen(struct parser_params*);
556 #define local_pop() local_pop_gen(parser)
557 static int local_var_gen(struct parser_params*, ID);
558 #define local_var(id) local_var_gen(parser, (id))
559 static int arg_var_gen(struct parser_params*, ID);
560 #define arg_var(id) arg_var_gen(parser, (id))
561 static int local_id_gen(struct parser_params*, ID);
562 #define local_id(id) local_id_gen(parser, (id))
563 static ID internal_id_gen(struct parser_params*);
564 #define internal_id() internal_id_gen(parser)
565 
566 static const struct vtable *dyna_push_gen(struct parser_params *);
567 #define dyna_push() dyna_push_gen(parser)
568 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
569 #define dyna_pop(node) dyna_pop_gen(parser, (node))
570 static int dyna_in_block_gen(struct parser_params*);
571 #define dyna_in_block() dyna_in_block_gen(parser)
572 #define dyna_var(id) local_var(id)
573 static int dvar_defined_gen(struct parser_params*,ID,int);
574 #define dvar_defined(id) dvar_defined_gen(parser, (id), 0)
575 #define dvar_defined_get(id) dvar_defined_gen(parser, (id), 1)
576 static int dvar_curr_gen(struct parser_params*,ID);
577 #define dvar_curr(id) dvar_curr_gen(parser, (id))
578 
579 static int lvar_defined_gen(struct parser_params*, ID);
580 #define lvar_defined(id) lvar_defined_gen(parser, (id))
581 
582 #define RE_OPTION_ONCE (1<<16)
583 #define RE_OPTION_ENCODING_SHIFT 8
584 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
585 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
586 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
587 #define RE_OPTION_MASK 0xff
588 #define RE_OPTION_ARG_ENCODING_NONE 32
589 
590 #define NODE_STRTERM NODE_ZARRAY /* nothing to gc */
591 #define NODE_HEREDOC NODE_ARRAY /* 1, 3 to gc */
592 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
593 #define nd_func u1.id
594 #if SIZEOF_SHORT == 2
595 #define nd_term(node) ((signed short)(node)->u2.id)
596 #else
597 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
598 #endif
599 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
600 #define nd_nest u3.cnt
601 
602 /****** Ripper *******/
603 
604 #ifdef RIPPER
605 #define RIPPER_VERSION "0.1.0"
606 
607 #include "eventids1.c"
608 #include "eventids2.c"
609 
610 static VALUE ripper_dispatch0(struct parser_params*,ID);
611 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
612 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
613 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
614 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
615 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
616 static VALUE ripper_dispatch7(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE);
617 
618 #define dispatch0(n) ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
619 #define dispatch1(n,a) ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a))
620 #define dispatch2(n,a,b) ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), (a), (b))
621 #define dispatch3(n,a,b,c) ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c))
622 #define dispatch4(n,a,b,c,d) ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d))
623 #define dispatch5(n,a,b,c,d,e) ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e))
624 #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))
625 
626 #define yyparse ripper_yyparse
627 
628 #define ripper_intern(s) ID2SYM(rb_intern(s))
629 static VALUE ripper_id2sym(ID);
630 #ifdef __GNUC__
631 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
632  ID2SYM(id) : ripper_id2sym(id))
633 #endif
634 
635 #define arg_new() dispatch0(args_new)
636 #define arg_add(l,a) dispatch2(args_add, (l), (a))
637 #define arg_add_star(l,a) dispatch2(args_add_star, (l), (a))
638 #define arg_add_block(l,b) dispatch2(args_add_block, (l), (b))
639 #define arg_add_optblock(l,b) ((b)==Qundef? (l) : dispatch2(args_add_block, (l), (b)))
640 #define bare_assoc(v) dispatch1(bare_assoc_hash, (v))
641 #define arg_add_assocs(l,b) arg_add((l), bare_assoc(b))
642 
643 #define args2mrhs(a) dispatch1(mrhs_new_from_args, (a))
644 #define mrhs_new() dispatch0(mrhs_new)
645 #define mrhs_add(l,a) dispatch2(mrhs_add, (l), (a))
646 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, (l), (a))
647 
648 #define mlhs_new() dispatch0(mlhs_new)
649 #define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a))
650 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a))
651 
652 #define params_new(pars, opts, rest, pars2, kws, kwrest, blk) \
653  dispatch7(params, (pars), (opts), (rest), (pars2), (kws), (kwrest), (blk))
654 
655 #define blockvar_new(p,v) dispatch2(block_var, (p), (v))
656 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a))
657 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, (l), (a))
658 
659 #define method_optarg(m,a) ((a)==Qundef ? (m) : dispatch2(method_add_arg,(m),(a)))
660 #define method_arg(m,a) dispatch2(method_add_arg,(m),(a))
661 #define method_add_block(m,b) dispatch2(method_add_block, (m), (b))
662 
663 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
664 
665 static inline VALUE
667 {
668  NODE *t = (NODE *)tail;
669  VALUE k = t->u1.value, kr = t->u2.value, b = t->u3.value;
670  return params_new(f, o, r, p, k, kr, escape_Qundef(b));
671 }
672 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
673 
674 static inline VALUE
675 new_args_tail_gen(struct parser_params *parser, VALUE k, VALUE kr, VALUE b)
676 {
677  return (VALUE)rb_node_newnode(NODE_MEMO, k, kr, b);
678 }
679 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
680 
681 #define FIXME 0
682 
683 #endif /* RIPPER */
684 
685 #ifndef RIPPER
686 # define Qnone 0
687 # define ifndef_ripper(x) (x)
688 #else
689 # define Qnone Qnil
690 # define ifndef_ripper(x)
691 #endif
692 
693 #ifndef RIPPER
694 # define rb_warn0(fmt) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt))
695 # define rb_warnI(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
696 # define rb_warnS(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
697 # define rb_warn4S(file,line,fmt,a) rb_compile_warn((file), (line), (fmt), (a))
698 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt))
699 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt), (a))
700 #else
701 # define rb_warn0(fmt) ripper_warn0(parser, (fmt))
702 # define rb_warnI(fmt,a) ripper_warnI(parser, (fmt), (a))
703 # define rb_warnS(fmt,a) ripper_warnS(parser, (fmt), (a))
704 # define rb_warn4S(file,line,fmt,a) ripper_warnS(parser, (fmt), (a))
705 # define rb_warning0(fmt) ripper_warning0(parser, (fmt))
706 # define rb_warningS(fmt,a) ripper_warningS(parser, (fmt), (a))
707 static void ripper_warn0(struct parser_params*, const char*);
708 static void ripper_warnI(struct parser_params*, const char*, int);
709 static void ripper_warnS(struct parser_params*, const char*, const char*);
710 static void ripper_warning0(struct parser_params*, const char*);
711 static void ripper_warningS(struct parser_params*, const char*, const char*);
712 #endif
713 
714 #ifdef RIPPER
715 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
716 # define rb_compile_error ripper_compile_error
717 # define compile_error ripper_compile_error
718 # define PARSER_ARG parser,
719 #else
720 # define rb_compile_error rb_compile_error_with_enc
721 # define compile_error parser->nerr++,rb_compile_error_with_enc
722 # define PARSER_ARG ruby_sourcefile, ruby_sourceline, current_enc,
723 #endif
724 
725 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150,
726  for instance). This is too low for Ruby to parse some files, such as
727  date/format.rb, therefore bump the value up to at least Bison's default. */
728 #ifdef OLD_YACC
729 #ifndef YYMAXDEPTH
730 #define YYMAXDEPTH 10000
731 #endif
732 #endif
733 
734 #ifndef RIPPER
735 static void token_info_push(struct parser_params*, const char *token);
736 static void token_info_pop(struct parser_params*, const char *token);
737 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, (token)) : (void)0)
738 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, (token)) : (void)0)
739 #else
740 #define token_info_push(token) /* nothing */
741 #define token_info_pop(token) /* nothing */
742 #endif
743 
744 
745 /* Line 268 of yacc.c */
746 #line 747 "parse.c"
747 
748 /* Enabling traces. */
749 #ifndef YYDEBUG
750 # define YYDEBUG 0
751 #endif
752 
753 /* Enabling verbose error messages. */
754 #ifdef YYERROR_VERBOSE
755 # undef YYERROR_VERBOSE
756 # define YYERROR_VERBOSE 1
757 #else
758 # define YYERROR_VERBOSE 0
759 #endif
760 
761 /* Enabling the token table. */
762 #ifndef YYTOKEN_TABLE
763 # define YYTOKEN_TABLE 0
764 #endif
765 
766 
767 /* Tokens. */
768 #ifndef YYTOKENTYPE
769 # define YYTOKENTYPE
770  /* Put the tokens into the symbol table, so that GDB and other debuggers
771  know about them. */
772  enum yytokentype {
773  END_OF_INPUT = 0,
774  keyword_class = 258,
775  keyword_module = 259,
776  keyword_def = 260,
777  keyword_undef = 261,
778  keyword_begin = 262,
779  keyword_rescue = 263,
780  keyword_ensure = 264,
781  keyword_end = 265,
782  keyword_if = 266,
783  keyword_unless = 267,
784  keyword_then = 268,
785  keyword_elsif = 269,
786  keyword_else = 270,
787  keyword_case = 271,
788  keyword_when = 272,
789  keyword_while = 273,
790  keyword_until = 274,
791  keyword_for = 275,
792  keyword_break = 276,
793  keyword_next = 277,
794  keyword_redo = 278,
795  keyword_retry = 279,
796  keyword_in = 280,
797  keyword_do = 281,
798  keyword_do_cond = 282,
799  keyword_do_block = 283,
800  keyword_do_LAMBDA = 284,
801  keyword_return = 285,
802  keyword_yield = 286,
803  keyword_super = 287,
804  keyword_self = 288,
805  keyword_nil = 289,
806  keyword_true = 290,
807  keyword_false = 291,
808  keyword_and = 292,
809  keyword_or = 293,
810  keyword_not = 294,
811  modifier_if = 295,
812  modifier_unless = 296,
813  modifier_while = 297,
814  modifier_until = 298,
815  modifier_rescue = 299,
816  keyword_alias = 300,
817  keyword_defined = 301,
818  keyword_BEGIN = 302,
819  keyword_END = 303,
820  keyword__LINE__ = 304,
821  keyword__FILE__ = 305,
822  keyword__ENCODING__ = 306,
823  tIDENTIFIER = 307,
824  tFID = 308,
825  tGVAR = 309,
826  tIVAR = 310,
827  tCONSTANT = 311,
828  tCVAR = 312,
829  tLABEL = 313,
830  tINTEGER = 314,
831  tFLOAT = 315,
832  tSTRING_CONTENT = 316,
833  tCHAR = 317,
834  tNTH_REF = 318,
835  tBACK_REF = 319,
836  tREGEXP_END = 320,
837  tUPLUS = 130,
838  tUMINUS = 131,
839  tPOW = 132,
840  tCMP = 134,
841  tEQ = 139,
842  tEQQ = 140,
843  tNEQ = 141,
844  tGEQ = 138,
845  tLEQ = 137,
846  tANDOP = 321,
847  tOROP = 322,
848  tMATCH = 142,
849  tNMATCH = 143,
850  tDOT2 = 128,
851  tDOT3 = 129,
852  tAREF = 144,
853  tASET = 145,
854  tLSHFT = 135,
855  tRSHFT = 136,
856  tCOLON2 = 323,
857  tCOLON3 = 324,
858  tOP_ASGN = 325,
859  tASSOC = 326,
860  tLPAREN = 327,
861  tLPAREN_ARG = 328,
862  tRPAREN = 329,
863  tLBRACK = 330,
864  tLBRACE = 331,
865  tLBRACE_ARG = 332,
866  tSTAR = 333,
867  tDSTAR = 334,
868  tAMPER = 335,
869  tLAMBDA = 336,
870  tSYMBEG = 337,
871  tSTRING_BEG = 338,
872  tXSTRING_BEG = 339,
873  tREGEXP_BEG = 340,
874  tWORDS_BEG = 341,
875  tQWORDS_BEG = 342,
876  tSYMBOLS_BEG = 343,
877  tQSYMBOLS_BEG = 344,
878  tSTRING_DBEG = 345,
879  tSTRING_DEND = 346,
880  tSTRING_DVAR = 347,
881  tSTRING_END = 348,
882  tLAMBEG = 349,
883  tLOWEST = 350,
884  tUMINUS_NUM = 351,
885  tLAST_TOKEN = 352
886  };
887 #endif
888 
889 
890 
891 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
892 typedef union YYSTYPE
893 {
894 
895 /* Line 293 of yacc.c */
896 #line 691 "parse.y"
897 
898  VALUE val;
899  NODE *node;
900  ID id;
901  int num;
902  const struct vtable *vars;
903 
904 
905 
906 /* Line 293 of yacc.c */
907 #line 908 "parse.c"
908 } YYSTYPE;
909 # define YYSTYPE_IS_TRIVIAL 1
910 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
911 # define YYSTYPE_IS_DECLARED 1
912 #endif
913 
914 
915 /* Copy the second part of user declarations. */
916 
917 
918 /* Line 343 of yacc.c */
919 #line 920 "parse.c"
920 
921 #ifdef short
922 # undef short
923 #endif
924 
925 #ifdef YYTYPE_UINT8
926 typedef YYTYPE_UINT8 yytype_uint8;
927 #else
928 typedef unsigned char yytype_uint8;
929 #endif
930 
931 #ifdef YYTYPE_INT8
932 typedef YYTYPE_INT8 yytype_int8;
933 #elif (defined __STDC__ || defined __C99__FUNC__ \
934  || defined __cplusplus || defined _MSC_VER)
935 typedef signed char yytype_int8;
936 #else
937 typedef short int yytype_int8;
938 #endif
939 
940 #ifdef YYTYPE_UINT16
941 typedef YYTYPE_UINT16 yytype_uint16;
942 #else
943 typedef unsigned short int yytype_uint16;
944 #endif
945 
946 #ifdef YYTYPE_INT16
947 typedef YYTYPE_INT16 yytype_int16;
948 #else
949 typedef short int yytype_int16;
950 #endif
951 
952 #ifndef YYSIZE_T
953 # ifdef __SIZE_TYPE__
954 # define YYSIZE_T __SIZE_TYPE__
955 # elif defined size_t
956 # define YYSIZE_T size_t
957 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
958  || defined __cplusplus || defined _MSC_VER)
959 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
960 # define YYSIZE_T size_t
961 # else
962 # define YYSIZE_T unsigned int
963 # endif
964 #endif
965 
966 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
967 
968 #ifndef YY_
969 # if defined YYENABLE_NLS && YYENABLE_NLS
970 # if ENABLE_NLS
971 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
972 # define YY_(msgid) dgettext ("bison-runtime", msgid)
973 # endif
974 # endif
975 # ifndef YY_
976 # define YY_(msgid) msgid
977 # endif
978 #endif
979 
980 /* Suppress unused-variable warnings by "using" E. */
981 #if ! defined lint || defined __GNUC__
982 # define YYUSE(e) ((void) (e))
983 #else
984 # define YYUSE(e) /* empty */
985 #endif
986 
987 /* Identity function, used to suppress warnings about constant conditions. */
988 #ifndef lint
989 # define YYID(n) (n)
990 #else
991 #if (defined __STDC__ || defined __C99__FUNC__ \
992  || defined __cplusplus || defined _MSC_VER)
993 static int
994 YYID (int yyi)
995 #else
996 static int
997 YYID (yyi)
998  int yyi;
999 #endif
1000 {
1001  return yyi;
1002 }
1003 #endif
1004 
1005 #if ! defined yyoverflow || YYERROR_VERBOSE
1006 
1007 /* The parser invokes alloca or malloc; define the necessary symbols. */
1008 
1009 # ifdef YYSTACK_USE_ALLOCA
1010 # if YYSTACK_USE_ALLOCA
1011 # ifdef __GNUC__
1012 # define YYSTACK_ALLOC __builtin_alloca
1013 # elif defined __BUILTIN_VA_ARG_INCR
1014 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
1015 # elif defined _AIX
1016 # define YYSTACK_ALLOC __alloca
1017 # elif defined _MSC_VER
1018 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
1019 # define alloca _alloca
1020 # else
1021 # define YYSTACK_ALLOC alloca
1022 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
1023  || defined __cplusplus || defined _MSC_VER)
1024 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1025 # ifndef EXIT_SUCCESS
1026 # define EXIT_SUCCESS 0
1027 # endif
1028 # endif
1029 # endif
1030 # endif
1031 # endif
1032 
1033 # ifdef YYSTACK_ALLOC
1034  /* Pacify GCC's `empty if-body' warning. */
1035 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
1036 # ifndef YYSTACK_ALLOC_MAXIMUM
1037  /* The OS might guarantee only one guard page at the bottom of the stack,
1038  and a page size can be as small as 4096 bytes. So we cannot safely
1039  invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1040  to allow for a few compiler-allocated temporary stack slots. */
1041 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
1042 # endif
1043 # else
1044 # define YYSTACK_ALLOC YYMALLOC
1045 # define YYSTACK_FREE YYFREE
1046 # ifndef YYSTACK_ALLOC_MAXIMUM
1047 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
1048 # endif
1049 # if (defined __cplusplus && ! defined EXIT_SUCCESS \
1050  && ! ((defined YYMALLOC || defined malloc) \
1051  && (defined YYFREE || defined free)))
1052 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1053 # ifndef EXIT_SUCCESS
1054 # define EXIT_SUCCESS 0
1055 # endif
1056 # endif
1057 # ifndef YYMALLOC
1058 # define YYMALLOC malloc
1059 # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
1060  || defined __cplusplus || defined _MSC_VER)
1061 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1062 # endif
1063 # endif
1064 # ifndef YYFREE
1065 # define YYFREE free
1066 # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
1067  || defined __cplusplus || defined _MSC_VER)
1068 void free (void *); /* INFRINGES ON USER NAME SPACE */
1069 # endif
1070 # endif
1071 # endif
1072 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
1073 
1074 
1075 #if (! defined yyoverflow \
1076  && (! defined __cplusplus \
1077  || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
1078 
1079 /* A type that is properly aligned for any stack member. */
1080 union yyalloc
1081 {
1082  yytype_int16 yyss_alloc;
1084 };
1085 
1086 /* The size of the maximum gap between one aligned stack and the next. */
1087 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1088 
1089 /* The size of an array large to enough to hold all stacks, each with
1090  N elements. */
1091 # define YYSTACK_BYTES(N) \
1092  ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
1093  + YYSTACK_GAP_MAXIMUM)
1094 
1095 # define YYCOPY_NEEDED 1
1096 
1097 /* Relocate STACK from its old location to the new one. The
1098  local variables YYSIZE and YYSTACKSIZE give the old and new number of
1099  elements in the stack, and YYPTR gives the new location of the
1100  stack. Advance YYPTR to a properly aligned location for the next
1101  stack. */
1102 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
1103  do \
1104  { \
1105  YYSIZE_T yynewbytes; \
1106  YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
1107  Stack = &yyptr->Stack_alloc; \
1108  yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1109  yyptr += yynewbytes / sizeof (*yyptr); \
1110  } \
1111  while (YYID (0))
1112 
1113 #endif
1114 
1115 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
1116 /* Copy COUNT objects from FROM to TO. The source and destination do
1117  not overlap. */
1118 # ifndef YYCOPY
1119 # if defined __GNUC__ && 1 < __GNUC__
1120 # define YYCOPY(To, From, Count) \
1121  __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1122 # else
1123 # define YYCOPY(To, From, Count) \
1124  do \
1125  { \
1126  YYSIZE_T yyi; \
1127  for (yyi = 0; yyi < (Count); yyi++) \
1128  (To)[yyi] = (From)[yyi]; \
1129  } \
1130  while (YYID (0))
1131 # endif
1132 # endif
1133 #endif /* !YYCOPY_NEEDED */
1134 
1135 /* YYFINAL -- State number of the termination state. */
1136 #define YYFINAL 3
1137 /* YYLAST -- Last index in YYTABLE. */
1138 #define YYLAST 10700
1139 
1140 /* YYNTOKENS -- Number of terminals. */
1141 #define YYNTOKENS 142
1142 /* YYNNTS -- Number of nonterminals. */
1143 #define YYNNTS 199
1144 /* YYNRULES -- Number of rules. */
1145 #define YYNRULES 620
1146 /* YYNRULES -- Number of states. */
1147 #define YYNSTATES 1057
1148 
1149 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1150 #define YYUNDEFTOK 2
1151 #define YYMAXUTOK 352
1152 
1153 #define YYTRANSLATE(YYX) \
1154  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1155 
1156 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
1157 static const yytype_uint8 yytranslate[] =
1158 {
1159  0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1160  141, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1161  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1162  2, 2, 140, 127, 2, 2, 2, 125, 120, 2,
1163  136, 137, 123, 121, 134, 122, 133, 124, 2, 2,
1164  2, 2, 2, 2, 2, 2, 2, 2, 115, 139,
1165  117, 113, 116, 114, 2, 2, 2, 2, 2, 2,
1166  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1167  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1168  2, 132, 2, 138, 119, 2, 135, 2, 2, 2,
1169  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1170  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1171  2, 2, 2, 130, 118, 131, 128, 2, 79, 80,
1172  66, 67, 68, 2, 69, 83, 84, 74, 73, 70,
1173  71, 72, 77, 78, 81, 82, 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, 2, 2, 2, 2,
1184  2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1185  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1186  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1187  25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1188  35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1189  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1190  55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1191  65, 75, 76, 85, 86, 87, 88, 89, 90, 91,
1192  92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
1193  102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
1194  112, 126, 129
1195 };
1196 
1197 #if YYDEBUG
1198 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1199  YYRHS. */
1200 static const yytype_uint16 yyprhs[] =
1201 {
1202  0, 0, 3, 4, 7, 10, 12, 14, 18, 21,
1203  23, 24, 30, 35, 38, 40, 42, 46, 49, 51,
1204  52, 58, 59, 64, 68, 72, 76, 79, 83, 87,
1205  91, 95, 99, 104, 106, 110, 114, 121, 127, 133,
1206  139, 145, 149, 153, 157, 161, 163, 167, 171, 173,
1207  177, 181, 185, 188, 190, 192, 194, 196, 198, 203,
1208  204, 210, 212, 215, 219, 224, 230, 235, 241, 244,
1209  247, 250, 253, 256, 258, 262, 264, 268, 270, 273,
1210  277, 283, 286, 291, 294, 299, 301, 305, 307, 311,
1211  314, 318, 320, 324, 326, 328, 333, 337, 341, 345,
1212  349, 352, 354, 356, 358, 363, 367, 371, 375, 379,
1213  382, 384, 386, 388, 391, 393, 397, 399, 401, 403,
1214  405, 407, 409, 411, 413, 415, 417, 418, 423, 425,
1215  427, 429, 431, 433, 435, 437, 439, 441, 443, 445,
1216  447, 449, 451, 453, 455, 457, 459, 461, 463, 465,
1217  467, 469, 471, 473, 475, 477, 479, 481, 483, 485,
1218  487, 489, 491, 493, 495, 497, 499, 501, 503, 505,
1219  507, 509, 511, 513, 515, 517, 519, 521, 523, 525,
1220  527, 529, 531, 533, 535, 537, 539, 541, 543, 545,
1221  547, 549, 551, 553, 555, 557, 559, 561, 563, 565,
1222  569, 575, 579, 585, 592, 598, 604, 610, 616, 621,
1223  625, 629, 633, 637, 641, 645, 649, 653, 657, 662,
1224  667, 670, 673, 677, 681, 685, 689, 693, 697, 701,
1225  705, 709, 713, 717, 721, 725, 728, 731, 735, 739,
1226  743, 747, 748, 753, 760, 762, 764, 766, 769, 774,
1227  777, 781, 783, 785, 787, 789, 792, 797, 800, 802,
1228  805, 808, 813, 815, 816, 819, 822, 825, 827, 829,
1229  832, 836, 841, 845, 850, 853, 855, 857, 859, 861,
1230  863, 865, 867, 869, 871, 873, 875, 876, 881, 882,
1231  886, 887, 888, 894, 898, 902, 905, 909, 913, 915,
1232  920, 924, 926, 927, 934, 939, 943, 946, 948, 951,
1233  954, 961, 968, 969, 970, 978, 979, 980, 988, 994,
1234  999, 1000, 1001, 1011, 1012, 1019, 1020, 1021, 1030, 1031,
1235  1037, 1038, 1045, 1046, 1047, 1057, 1059, 1061, 1063, 1065,
1236  1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085,
1237  1087, 1089, 1091, 1093, 1096, 1098, 1100, 1102, 1108, 1110,
1238  1113, 1115, 1117, 1119, 1123, 1125, 1129, 1131, 1136, 1143,
1239  1147, 1153, 1156, 1161, 1163, 1167, 1172, 1175, 1178, 1180,
1240  1183, 1184, 1191, 1200, 1205, 1212, 1217, 1220, 1227, 1230,
1241  1235, 1242, 1245, 1250, 1253, 1258, 1260, 1262, 1264, 1268,
1242  1270, 1275, 1277, 1282, 1284, 1288, 1290, 1292, 1293, 1294,
1243  1295, 1301, 1306, 1308, 1312, 1316, 1317, 1323, 1326, 1331,
1244  1337, 1343, 1346, 1347, 1353, 1354, 1360, 1364, 1365, 1370,
1245  1371, 1376, 1379, 1381, 1386, 1387, 1393, 1394, 1400, 1406,
1246  1408, 1410, 1417, 1419, 1421, 1423, 1425, 1428, 1430, 1433,
1247  1435, 1437, 1439, 1441, 1443, 1445, 1447, 1450, 1454, 1458,
1248  1462, 1466, 1470, 1471, 1475, 1477, 1480, 1484, 1488, 1489,
1249  1493, 1497, 1501, 1505, 1509, 1510, 1514, 1515, 1519, 1520,
1250  1523, 1524, 1527, 1528, 1531, 1533, 1534, 1538, 1539, 1540,
1251  1541, 1548, 1550, 1552, 1554, 1556, 1559, 1561, 1563, 1565,
1252  1567, 1571, 1573, 1575, 1578, 1581, 1583, 1585, 1587, 1589,
1253  1591, 1593, 1595, 1597, 1599, 1601, 1603, 1605, 1607, 1609,
1254  1611, 1613, 1615, 1617, 1619, 1620, 1625, 1628, 1632, 1635,
1255  1640, 1643, 1646, 1648, 1651, 1652, 1659, 1668, 1673, 1680,
1256  1685, 1692, 1695, 1700, 1707, 1710, 1715, 1718, 1723, 1725,
1257  1726, 1728, 1730, 1732, 1734, 1736, 1738, 1740, 1744, 1746,
1258  1750, 1753, 1756, 1758, 1762, 1764, 1768, 1770, 1772, 1775,
1259  1777, 1781, 1785, 1787, 1791, 1793, 1797, 1799, 1801, 1804,
1260  1806, 1808, 1810, 1813, 1816, 1818, 1820, 1821, 1826, 1828,
1261  1831, 1833, 1837, 1841, 1844, 1847, 1849, 1851, 1853, 1855,
1262  1857, 1859, 1861, 1863, 1865, 1867, 1869, 1871, 1872, 1874,
1263  1875, 1877, 1880, 1883, 1884, 1886, 1888, 1890, 1892, 1894,
1264  1897
1265 };
1266 
1267 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
1268 static const yytype_int16 yyrhs[] =
1269 {
1270  143, 0, -1, -1, 144, 145, -1, 146, 333, -1,
1271  340, -1, 147, -1, 146, 339, 147, -1, 1, 147,
1272  -1, 154, -1, -1, 47, 148, 130, 145, 131, -1,
1273  150, 262, 230, 265, -1, 151, 333, -1, 340, -1,
1274  152, -1, 151, 339, 152, -1, 1, 154, -1, 154,
1275  -1, -1, 47, 153, 130, 145, 131, -1, -1, 45,
1276  177, 155, 177, -1, 45, 54, 54, -1, 45, 54,
1277  64, -1, 45, 54, 63, -1, 6, 178, -1, 154,
1278  40, 158, -1, 154, 41, 158, -1, 154, 42, 158,
1279  -1, 154, 43, 158, -1, 154, 44, 154, -1, 48,
1280  130, 150, 131, -1, 156, -1, 165, 113, 159, -1,
1281  297, 87, 159, -1, 215, 132, 188, 336, 87, 159,
1282  -1, 215, 133, 52, 87, 159, -1, 215, 133, 56,
1283  87, 159, -1, 215, 85, 56, 87, 159, -1, 215,
1284  85, 52, 87, 159, -1, 298, 87, 159, -1, 172,
1285  113, 195, -1, 165, 113, 184, -1, 165, 113, 195,
1286  -1, 157, -1, 172, 113, 159, -1, 172, 113, 156,
1287  -1, 159, -1, 157, 37, 157, -1, 157, 38, 157,
1288  -1, 39, 334, 157, -1, 127, 159, -1, 182, -1,
1289  157, -1, 164, -1, 160, -1, 251, -1, 251, 332,
1290  330, 190, -1, -1, 94, 162, 238, 150, 131, -1,
1291  329, -1, 163, 190, -1, 163, 190, 161, -1, 215,
1292  133, 330, 190, -1, 215, 133, 330, 190, 161, -1,
1293  215, 85, 330, 190, -1, 215, 85, 330, 190, 161,
1294  -1, 32, 190, -1, 31, 190, -1, 30, 189, -1,
1295  21, 189, -1, 22, 189, -1, 167, -1, 89, 166,
1296  335, -1, 167, -1, 89, 166, 335, -1, 169, -1,
1297  169, 168, -1, 169, 95, 171, -1, 169, 95, 171,
1298  134, 170, -1, 169, 95, -1, 169, 95, 134, 170,
1299  -1, 95, 171, -1, 95, 171, 134, 170, -1, 95,
1300  -1, 95, 134, 170, -1, 171, -1, 89, 166, 335,
1301  -1, 168, 134, -1, 169, 168, 134, -1, 168, -1,
1302  170, 134, 168, -1, 294, -1, 295, -1, 215, 132,
1303  188, 336, -1, 215, 133, 52, -1, 215, 85, 52,
1304  -1, 215, 133, 56, -1, 215, 85, 56, -1, 86,
1305  56, -1, 298, -1, 294, -1, 295, -1, 215, 132,
1306  188, 336, -1, 215, 133, 52, -1, 215, 85, 52,
1307  -1, 215, 133, 56, -1, 215, 85, 56, -1, 86,
1308  56, -1, 298, -1, 52, -1, 56, -1, 86, 173,
1309  -1, 173, -1, 215, 85, 173, -1, 52, -1, 56,
1310  -1, 53, -1, 180, -1, 181, -1, 175, -1, 290,
1311  -1, 176, -1, 292, -1, 177, -1, -1, 178, 134,
1312  179, 177, -1, 118, -1, 119, -1, 120, -1, 69,
1313  -1, 70, -1, 71, -1, 77, -1, 78, -1, 116,
1314  -1, 73, -1, 117, -1, 74, -1, 72, -1, 83,
1315  -1, 84, -1, 121, -1, 122, -1, 123, -1, 95,
1316  -1, 124, -1, 125, -1, 68, -1, 96, -1, 127,
1317  -1, 128, -1, 66, -1, 67, -1, 81, -1, 82,
1318  -1, 135, -1, 49, -1, 50, -1, 51, -1, 47,
1319  -1, 48, -1, 45, -1, 37, -1, 7, -1, 21,
1320  -1, 16, -1, 3, -1, 5, -1, 46, -1, 26,
1321  -1, 15, -1, 14, -1, 10, -1, 9, -1, 36,
1322  -1, 20, -1, 25, -1, 4, -1, 22, -1, 34,
1323  -1, 39, -1, 38, -1, 23, -1, 8, -1, 24,
1324  -1, 30, -1, 33, -1, 32, -1, 13, -1, 35,
1325  -1, 6, -1, 17, -1, 31, -1, 11, -1, 12,
1326  -1, 18, -1, 19, -1, 172, 113, 182, -1, 172,
1327  113, 182, 44, 182, -1, 297, 87, 182, -1, 297,
1328  87, 182, 44, 182, -1, 215, 132, 188, 336, 87,
1329  182, -1, 215, 133, 52, 87, 182, -1, 215, 133,
1330  56, 87, 182, -1, 215, 85, 52, 87, 182, -1,
1331  215, 85, 56, 87, 182, -1, 86, 56, 87, 182,
1332  -1, 298, 87, 182, -1, 182, 79, 182, -1, 182,
1333  80, 182, -1, 182, 121, 182, -1, 182, 122, 182,
1334  -1, 182, 123, 182, -1, 182, 124, 182, -1, 182,
1335  125, 182, -1, 182, 68, 182, -1, 126, 59, 68,
1336  182, -1, 126, 60, 68, 182, -1, 66, 182, -1,
1337  67, 182, -1, 182, 118, 182, -1, 182, 119, 182,
1338  -1, 182, 120, 182, -1, 182, 69, 182, -1, 182,
1339  116, 182, -1, 182, 73, 182, -1, 182, 117, 182,
1340  -1, 182, 74, 182, -1, 182, 70, 182, -1, 182,
1341  71, 182, -1, 182, 72, 182, -1, 182, 77, 182,
1342  -1, 182, 78, 182, -1, 127, 182, -1, 128, 182,
1343  -1, 182, 83, 182, -1, 182, 84, 182, -1, 182,
1344  75, 182, -1, 182, 76, 182, -1, -1, 46, 334,
1345  183, 182, -1, 182, 114, 182, 334, 115, 182, -1,
1346  196, -1, 182, -1, 340, -1, 194, 337, -1, 194,
1347  134, 327, 337, -1, 327, 337, -1, 136, 188, 335,
1348  -1, 340, -1, 186, -1, 340, -1, 189, -1, 194,
1349  134, -1, 194, 134, 327, 134, -1, 327, 134, -1,
1350  164, -1, 194, 193, -1, 327, 193, -1, 194, 134,
1351  327, 193, -1, 192, -1, -1, 191, 189, -1, 97,
1352  184, -1, 134, 192, -1, 340, -1, 184, -1, 95,
1353  184, -1, 194, 134, 184, -1, 194, 134, 95, 184,
1354  -1, 194, 134, 184, -1, 194, 134, 95, 184, -1,
1355  95, 184, -1, 266, -1, 267, -1, 270, -1, 271,
1356  -1, 272, -1, 277, -1, 275, -1, 278, -1, 296,
1357  -1, 298, -1, 53, -1, -1, 216, 197, 149, 226,
1358  -1, -1, 90, 198, 335, -1, -1, -1, 90, 199,
1359  157, 200, 335, -1, 89, 150, 137, -1, 215, 85,
1360  56, -1, 86, 56, -1, 92, 185, 138, -1, 93,
1361  326, 131, -1, 30, -1, 31, 136, 189, 335, -1,
1362  31, 136, 335, -1, 31, -1, -1, 46, 334, 136,
1363  201, 157, 335, -1, 39, 136, 157, 335, -1, 39,
1364  136, 335, -1, 163, 257, -1, 252, -1, 252, 257,
1365  -1, 98, 243, -1, 217, 158, 227, 150, 229, 226,
1366  -1, 218, 158, 227, 150, 230, 226, -1, -1, -1,
1367  219, 202, 158, 228, 203, 150, 226, -1, -1, -1,
1368  220, 204, 158, 228, 205, 150, 226, -1, 221, 158,
1369  333, 260, 226, -1, 221, 333, 260, 226, -1, -1,
1370  -1, 222, 231, 25, 206, 158, 228, 207, 150, 226,
1371  -1, -1, 223, 174, 299, 208, 149, 226, -1, -1,
1372  -1, 223, 83, 157, 209, 338, 210, 149, 226, -1,
1373  -1, 224, 174, 211, 149, 226, -1, -1, 225, 175,
1374  212, 301, 149, 226, -1, -1, -1, 225, 324, 332,
1375  213, 175, 214, 301, 149, 226, -1, 21, -1, 22,
1376  -1, 23, -1, 24, -1, 196, -1, 7, -1, 11,
1377  -1, 12, -1, 18, -1, 19, -1, 16, -1, 20,
1378  -1, 3, -1, 4, -1, 5, -1, 10, -1, 338,
1379  -1, 13, -1, 338, 13, -1, 338, -1, 27, -1,
1380  230, -1, 14, 158, 227, 150, 229, -1, 340, -1,
1381  15, 150, -1, 172, -1, 165, -1, 306, -1, 89,
1382  234, 335, -1, 232, -1, 233, 134, 232, -1, 233,
1383  -1, 233, 134, 95, 306, -1, 233, 134, 95, 306,
1384  134, 233, -1, 233, 134, 95, -1, 233, 134, 95,
1385  134, 233, -1, 95, 306, -1, 95, 306, 134, 233,
1386  -1, 95, -1, 95, 134, 233, -1, 311, 134, 314,
1387  323, -1, 311, 323, -1, 314, 323, -1, 322, -1,
1388  134, 235, -1, -1, 308, 134, 317, 134, 320, 236,
1389  -1, 308, 134, 317, 134, 320, 134, 308, 236, -1,
1390  308, 134, 317, 236, -1, 308, 134, 317, 134, 308,
1391  236, -1, 308, 134, 320, 236, -1, 308, 134, -1,
1392  308, 134, 320, 134, 308, 236, -1, 308, 236, -1,
1393  317, 134, 320, 236, -1, 317, 134, 320, 134, 308,
1394  236, -1, 317, 236, -1, 317, 134, 308, 236, -1,
1395  320, 236, -1, 320, 134, 308, 236, -1, 235, -1,
1396  340, -1, 239, -1, 118, 240, 118, -1, 76, -1,
1397  118, 237, 240, 118, -1, 334, -1, 334, 139, 241,
1398  334, -1, 242, -1, 241, 134, 242, -1, 52, -1,
1399  305, -1, -1, -1, -1, 244, 245, 247, 246, 248,
1400  -1, 136, 304, 240, 137, -1, 304, -1, 111, 150,
1401  131, -1, 29, 150, 10, -1, -1, 28, 250, 238,
1402  150, 10, -1, 164, 249, -1, 251, 332, 330, 187,
1403  -1, 251, 332, 330, 187, 257, -1, 251, 332, 330,
1404  190, 249, -1, 163, 186, -1, -1, 215, 133, 330,
1405  253, 187, -1, -1, 215, 85, 330, 254, 186, -1,
1406  215, 85, 331, -1, -1, 215, 133, 255, 186, -1,
1407  -1, 215, 85, 256, 186, -1, 32, 186, -1, 32,
1408  -1, 215, 132, 188, 336, -1, -1, 130, 258, 238,
1409  150, 131, -1, -1, 26, 259, 238, 150, 10, -1,
1410  17, 194, 227, 150, 261, -1, 230, -1, 260, -1,
1411  8, 263, 264, 227, 150, 262, -1, 340, -1, 184,
1412  -1, 195, -1, 340, -1, 88, 172, -1, 340, -1,
1413  9, 150, -1, 340, -1, 293, -1, 290, -1, 292,
1414  -1, 268, -1, 62, -1, 269, -1, 268, 269, -1,
1415  100, 281, 110, -1, 101, 282, 110, -1, 102, 283,
1416  65, -1, 103, 140, 110, -1, 103, 273, 110, -1,
1417  -1, 273, 274, 140, -1, 284, -1, 274, 284, -1,
1418  105, 140, 110, -1, 105, 276, 110, -1, -1, 276,
1419  274, 140, -1, 104, 140, 110, -1, 104, 279, 110,
1420  -1, 106, 140, 110, -1, 106, 280, 110, -1, -1,
1421  279, 61, 140, -1, -1, 280, 61, 140, -1, -1,
1422  281, 284, -1, -1, 282, 284, -1, -1, 283, 284,
1423  -1, 61, -1, -1, 109, 285, 289, -1, -1, -1,
1424  -1, 107, 286, 287, 288, 150, 108, -1, 54, -1,
1425  55, -1, 57, -1, 298, -1, 99, 291, -1, 175,
1426  -1, 55, -1, 54, -1, 57, -1, 99, 282, 110,
1427  -1, 59, -1, 60, -1, 126, 59, -1, 126, 60,
1428  -1, 52, -1, 55, -1, 54, -1, 56, -1, 57,
1429  -1, 34, -1, 33, -1, 35, -1, 36, -1, 50,
1430  -1, 49, -1, 51, -1, 294, -1, 295, -1, 294,
1431  -1, 295, -1, 63, -1, 64, -1, 338, -1, -1,
1432  117, 300, 158, 338, -1, 1, 338, -1, 136, 304,
1433  335, -1, 304, 338, -1, 312, 134, 314, 323, -1,
1434  312, 323, -1, 314, 323, -1, 322, -1, 134, 302,
1435  -1, -1, 308, 134, 318, 134, 320, 303, -1, 308,
1436  134, 318, 134, 320, 134, 308, 303, -1, 308, 134,
1437  318, 303, -1, 308, 134, 318, 134, 308, 303, -1,
1438  308, 134, 320, 303, -1, 308, 134, 320, 134, 308,
1439  303, -1, 308, 303, -1, 318, 134, 320, 303, -1,
1440  318, 134, 320, 134, 308, 303, -1, 318, 303, -1,
1441  318, 134, 308, 303, -1, 320, 303, -1, 320, 134,
1442  308, 303, -1, 302, -1, -1, 56, -1, 55, -1,
1443  54, -1, 57, -1, 305, -1, 52, -1, 306, -1,
1444  89, 234, 335, -1, 307, -1, 308, 134, 307, -1,
1445  58, 184, -1, 58, 215, -1, 310, -1, 311, 134,
1446  310, -1, 309, -1, 312, 134, 309, -1, 68, -1,
1447  96, -1, 313, 52, -1, 313, -1, 52, 113, 184,
1448  -1, 52, 113, 215, -1, 316, -1, 317, 134, 316,
1449  -1, 315, -1, 318, 134, 315, -1, 123, -1, 95,
1450  -1, 319, 52, -1, 319, -1, 120, -1, 97, -1,
1451  321, 52, -1, 134, 322, -1, 340, -1, 296, -1,
1452  -1, 136, 325, 157, 335, -1, 340, -1, 327, 337,
1453  -1, 328, -1, 327, 134, 328, -1, 184, 88, 184,
1454  -1, 58, 184, -1, 96, 184, -1, 52, -1, 56,
1455  -1, 53, -1, 52, -1, 56, -1, 53, -1, 180,
1456  -1, 52, -1, 53, -1, 180, -1, 133, -1, 85,
1457  -1, -1, 339, -1, -1, 141, -1, 334, 137, -1,
1458  334, 138, -1, -1, 141, -1, 134, -1, 139, -1,
1459  141, -1, 338, -1, 339, 139, -1, -1
1460 };
1461 
1462 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
1463 static const yytype_uint16 yyrline[] =
1464 {
1465  0, 855, 855, 855, 886, 897, 906, 914, 922, 928,
1466  930, 929, 950, 983, 994, 1003, 1011, 1019, 1025, 1030,
1467  1029, 1050, 1050, 1058, 1066, 1077, 1087, 1095, 1104, 1113,
1468  1126, 1139, 1148, 1160, 1161, 1171, 1176, 1197, 1202, 1207,
1469  1217, 1222, 1232, 1241, 1250, 1259, 1262, 1271, 1283, 1284,
1470  1292, 1300, 1308, 1316, 1319, 1331, 1332, 1335, 1336, 1348,
1471  1347, 1369, 1379, 1388, 1401, 1410, 1422, 1431, 1443, 1452,
1472  1461, 1469, 1477, 1487, 1488, 1498, 1499, 1509, 1517, 1525,
1473  1533, 1542, 1550, 1559, 1567, 1576, 1584, 1595, 1596, 1606,
1474  1614, 1624, 1632, 1642, 1646, 1650, 1658, 1666, 1674, 1682,
1475  1694, 1704, 1716, 1725, 1734, 1742, 1750, 1758, 1766, 1779,
1476  1792, 1803, 1811, 1814, 1822, 1830, 1840, 1841, 1842, 1843,
1477  1848, 1859, 1860, 1863, 1871, 1874, 1882, 1882, 1892, 1893,
1478  1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903,
1479  1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913,
1480  1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1924, 1924,
1481  1924, 1925, 1925, 1926, 1926, 1926, 1927, 1927, 1927, 1927,
1482  1928, 1928, 1928, 1928, 1929, 1929, 1929, 1930, 1930, 1930,
1483  1930, 1931, 1931, 1931, 1931, 1932, 1932, 1932, 1932, 1933,
1484  1933, 1933, 1933, 1934, 1934, 1934, 1934, 1935, 1935, 1938,
1485  1947, 1957, 1962, 1972, 1998, 2003, 2008, 2013, 2023, 2033,
1486  2044, 2058, 2072, 2080, 2088, 2096, 2104, 2112, 2120, 2129,
1487  2138, 2146, 2154, 2162, 2170, 2178, 2186, 2194, 2202, 2210,
1488  2218, 2226, 2234, 2242, 2253, 2261, 2269, 2277, 2285, 2293,
1489  2301, 2309, 2309, 2319, 2329, 2335, 2347, 2348, 2352, 2360,
1490  2370, 2380, 2381, 2384, 2385, 2386, 2390, 2398, 2408, 2417,
1491  2425, 2435, 2444, 2453, 2453, 2465, 2475, 2479, 2485, 2493,
1492  2501, 2515, 2531, 2545, 2560, 2570, 2571, 2572, 2573, 2574,
1493  2575, 2576, 2577, 2578, 2579, 2580, 2589, 2588, 2616, 2616,
1494  2625, 2629, 2624, 2638, 2646, 2654, 2662, 2675, 2683, 2691,
1495  2699, 2707, 2715, 2715, 2725, 2733, 2741, 2751, 2752, 2762,
1496  2766, 2778, 2790, 2790, 2790, 2801, 2801, 2801, 2812, 2823,
1497  2832, 2834, 2831, 2898, 2897, 2919, 2924, 2918, 2943, 2942,
1498  2964, 2963, 2986, 2987, 2986, 3007, 3015, 3023, 3031, 3041,
1499  3053, 3059, 3065, 3071, 3077, 3083, 3089, 3095, 3101, 3107,
1500  3117, 3123, 3128, 3129, 3136, 3141, 3144, 3145, 3158, 3159,
1501  3169, 3170, 3173, 3181, 3191, 3199, 3209, 3217, 3226, 3235,
1502  3243, 3251, 3260, 3272, 3280, 3291, 3295, 3299, 3303, 3309,
1503  3314, 3319, 3323, 3327, 3331, 3335, 3339, 3347, 3351, 3355,
1504  3359, 3363, 3367, 3371, 3375, 3379, 3385, 3386, 3392, 3401,
1505  3410, 3421, 3425, 3435, 3442, 3451, 3459, 3465, 3468, 3473,
1506  3465, 3489, 3497, 3507, 3511, 3518, 3517, 3538, 3554, 3563,
1507  3575, 3589, 3599, 3598, 3615, 3614, 3630, 3639, 3638, 3656,
1508  3655, 3672, 3680, 3688, 3703, 3702, 3722, 3721, 3742, 3754,
1509  3755, 3758, 3777, 3780, 3788, 3796, 3799, 3803, 3806, 3814,
1510  3817, 3818, 3826, 3829, 3846, 3847, 3848, 3858, 3868, 3895,
1511  3960, 3969, 3980, 3987, 3997, 4005, 4015, 4024, 4035, 4042,
1512  4054, 4063, 4073, 4082, 4093, 4100, 4111, 4118, 4133, 4140,
1513  4151, 4158, 4169, 4176, 4205, 4207, 4206, 4223, 4229, 4234,
1514  4222, 4253, 4261, 4269, 4277, 4280, 4291, 4292, 4293, 4294,
1515  4297, 4308, 4309, 4310, 4318, 4328, 4329, 4330, 4331, 4332,
1516  4335, 4336, 4337, 4338, 4339, 4340, 4341, 4344, 4357, 4367,
1517  4375, 4385, 4386, 4389, 4398, 4397, 4406, 4418, 4428, 4436,
1518  4440, 4444, 4448, 4454, 4459, 4464, 4468, 4472, 4476, 4480,
1519  4484, 4488, 4492, 4496, 4500, 4504, 4508, 4512, 4516, 4521,
1520  4527, 4536, 4545, 4554, 4565, 4566, 4573, 4582, 4601, 4608,
1521  4621, 4633, 4645, 4653, 4670, 4678, 4694, 4695, 4698, 4703,
1522  4709, 4721, 4733, 4741, 4757, 4765, 4781, 4782, 4785, 4798,
1523  4809, 4810, 4813, 4830, 4834, 4844, 4854, 4854, 4883, 4884,
1524  4894, 4901, 4911, 4919, 4927, 4939, 4940, 4941, 4944, 4945,
1525  4946, 4947, 4950, 4951, 4952, 4955, 4960, 4967, 4968, 4971,
1526  4972, 4975, 4978, 4981, 4982, 4983, 4986, 4987, 4990, 4991,
1527  4995
1528 };
1529 #endif
1530 
1531 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1532 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1533  First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1534 static const char *const yytname[] =
1535 {
1536  "\"end-of-input\"", "error", "$undefined", "keyword_class",
1537  "keyword_module", "keyword_def", "keyword_undef", "keyword_begin",
1538  "keyword_rescue", "keyword_ensure", "keyword_end", "keyword_if",
1539  "keyword_unless", "keyword_then", "keyword_elsif", "keyword_else",
1540  "keyword_case", "keyword_when", "keyword_while", "keyword_until",
1541  "keyword_for", "keyword_break", "keyword_next", "keyword_redo",
1542  "keyword_retry", "keyword_in", "keyword_do", "keyword_do_cond",
1543  "keyword_do_block", "keyword_do_LAMBDA", "keyword_return",
1544  "keyword_yield", "keyword_super", "keyword_self", "keyword_nil",
1545  "keyword_true", "keyword_false", "keyword_and", "keyword_or",
1546  "keyword_not", "modifier_if", "modifier_unless", "modifier_while",
1547  "modifier_until", "modifier_rescue", "keyword_alias", "keyword_defined",
1548  "keyword_BEGIN", "keyword_END", "keyword__LINE__", "keyword__FILE__",
1549  "keyword__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR",
1550  "tCONSTANT", "tCVAR", "tLABEL", "tINTEGER", "tFLOAT", "tSTRING_CONTENT",
1551  "tCHAR", "tNTH_REF", "tBACK_REF", "tREGEXP_END", "\"unary+\"",
1552  "\"unary-\"", "\"**\"", "\"<=>\"", "\"==\"", "\"===\"", "\"!=\"",
1553  "\">=\"", "\"<=\"", "\"&&\"", "\"||\"", "\"=~\"", "\"!~\"", "\"..\"",
1554  "\"...\"", "\"[]\"", "\"[]=\"", "\"<<\"", "\">>\"", "\"::\"",
1555  "\":: at EXPR_BEG\"", "tOP_ASGN", "\"=>\"", "\"(\"", "\"( arg\"",
1556  "\")\"", "\"[\"", "\"{\"", "\"{ arg\"", "\"*\"", "\"**arg\"", "\"&\"",
1557  "\"->\"", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG",
1558  "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG", "tQSYMBOLS_BEG",
1559  "tSTRING_DBEG", "tSTRING_DEND", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG",
1560  "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'",
1561  "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "tLAST_TOKEN",
1562  "'{'", "'}'", "'['", "'.'", "','", "'`'", "'('", "')'", "']'", "';'",
1563  "' '", "'\\n'", "$accept", "program", "$@1", "top_compstmt", "top_stmts",
1564  "top_stmt", "$@2", "bodystmt", "compstmt", "stmts", "stmt_or_begin",
1565  "$@3", "stmt", "$@4", "command_asgn", "expr", "expr_value",
1566  "command_call", "block_command", "cmd_brace_block", "@5", "fcall",
1567  "command", "mlhs", "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head",
1568  "mlhs_post", "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym",
1569  "fitem", "undef_list", "$@6", "op", "reswords", "arg", "$@7",
1570  "arg_value", "aref_args", "paren_args", "opt_paren_args",
1571  "opt_call_args", "call_args", "command_args", "@8", "block_arg",
1572  "opt_block_arg", "args", "mrhs", "primary", "@9", "$@10", "$@11", "$@12",
1573  "$@13", "$@14", "$@15", "$@16", "$@17", "$@18", "$@19", "@20", "@21",
1574  "@22", "@23", "@24", "$@25", "$@26", "primary_value", "k_begin", "k_if",
1575  "k_unless", "k_while", "k_until", "k_case", "k_for", "k_class",
1576  "k_module", "k_def", "k_end", "then", "do", "if_tail", "opt_else",
1577  "for_var", "f_marg", "f_marg_list", "f_margs", "block_args_tail",
1578  "opt_block_args_tail", "block_param", "opt_block_param",
1579  "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "lambda", "@27",
1580  "@28", "@29", "f_larglist", "lambda_body", "do_block", "@30",
1581  "block_call", "method_call", "@31", "@32", "@33", "@34", "brace_block",
1582  "@35", "@36", "case_body", "cases", "opt_rescue", "exc_list", "exc_var",
1583  "opt_ensure", "literal", "strings", "string", "string1", "xstring",
1584  "regexp", "words", "word_list", "word", "symbols", "symbol_list",
1585  "qwords", "qsymbols", "qword_list", "qsym_list", "string_contents",
1586  "xstring_contents", "regexp_contents", "string_content", "@37", "@38",
1587  "@39", "@40", "string_dvar", "symbol", "sym", "dsym", "numeric",
1588  "user_variable", "keyword_variable", "var_ref", "var_lhs", "backref",
1589  "superclass", "$@41", "f_arglist", "args_tail", "opt_args_tail",
1590  "f_args", "f_bad_arg", "f_norm_arg", "f_arg_item", "f_arg", "f_kw",
1591  "f_block_kw", "f_block_kwarg", "f_kwarg", "kwrest_mark", "f_kwrest",
1592  "f_opt", "f_block_opt", "f_block_optarg", "f_optarg", "restarg_mark",
1593  "f_rest_arg", "blkarg_mark", "f_block_arg", "opt_f_block_arg",
1594  "singleton", "$@42", "assoc_list", "assocs", "assoc", "operation",
1595  "operation2", "operation3", "dot_or_colon", "opt_terms", "opt_nl",
1596  "rparen", "rbracket", "trailer", "term", "terms", "none", 0
1597 };
1598 #endif
1599 
1600 # ifdef YYPRINT
1601 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1602  token YYLEX-NUM. */
1603 static const yytype_uint16 yytoknum[] =
1604 {
1605  0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1606  265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1607  275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1608  285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1609  295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1610  305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1611  315, 316, 317, 318, 319, 320, 130, 131, 132, 134,
1612  139, 140, 141, 138, 137, 321, 322, 142, 143, 128,
1613  129, 144, 145, 135, 136, 323, 324, 325, 326, 327,
1614  328, 329, 330, 331, 332, 333, 334, 335, 336, 337,
1615  338, 339, 340, 341, 342, 343, 344, 345, 346, 347,
1616  348, 349, 350, 61, 63, 58, 62, 60, 124, 94,
1617  38, 43, 45, 42, 47, 37, 351, 33, 126, 352,
1618  123, 125, 91, 46, 44, 96, 40, 41, 93, 59,
1619  32, 10
1620 };
1621 # endif
1622 
1623 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1624 static const yytype_uint16 yyr1[] =
1625 {
1626  0, 142, 144, 143, 145, 146, 146, 146, 146, 147,
1627  148, 147, 149, 150, 151, 151, 151, 151, 152, 153,
1628  152, 155, 154, 154, 154, 154, 154, 154, 154, 154,
1629  154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
1630  154, 154, 154, 154, 154, 154, 156, 156, 157, 157,
1631  157, 157, 157, 157, 158, 159, 159, 160, 160, 162,
1632  161, 163, 164, 164, 164, 164, 164, 164, 164, 164,
1633  164, 164, 164, 165, 165, 166, 166, 167, 167, 167,
1634  167, 167, 167, 167, 167, 167, 167, 168, 168, 169,
1635  169, 170, 170, 171, 171, 171, 171, 171, 171, 171,
1636  171, 171, 172, 172, 172, 172, 172, 172, 172, 172,
1637  172, 173, 173, 174, 174, 174, 175, 175, 175, 175,
1638  175, 176, 176, 177, 177, 178, 179, 178, 180, 180,
1639  180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
1640  180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
1641  180, 180, 180, 180, 180, 180, 180, 180, 181, 181,
1642  181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
1643  181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
1644  181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
1645  181, 181, 181, 181, 181, 181, 181, 181, 181, 182,
1646  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
1647  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
1648  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
1649  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
1650  182, 183, 182, 182, 182, 184, 185, 185, 185, 185,
1651  186, 187, 187, 188, 188, 188, 188, 188, 189, 189,
1652  189, 189, 189, 191, 190, 192, 193, 193, 194, 194,
1653  194, 194, 195, 195, 195, 196, 196, 196, 196, 196,
1654  196, 196, 196, 196, 196, 196, 197, 196, 198, 196,
1655  199, 200, 196, 196, 196, 196, 196, 196, 196, 196,
1656  196, 196, 201, 196, 196, 196, 196, 196, 196, 196,
1657  196, 196, 202, 203, 196, 204, 205, 196, 196, 196,
1658  206, 207, 196, 208, 196, 209, 210, 196, 211, 196,
1659  212, 196, 213, 214, 196, 196, 196, 196, 196, 215,
1660  216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
1661  226, 227, 227, 227, 228, 228, 229, 229, 230, 230,
1662  231, 231, 232, 232, 233, 233, 234, 234, 234, 234,
1663  234, 234, 234, 234, 234, 235, 235, 235, 235, 236,
1664  236, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1665  237, 237, 237, 237, 237, 237, 238, 238, 239, 239,
1666  239, 240, 240, 241, 241, 242, 242, 244, 245, 246,
1667  243, 247, 247, 248, 248, 250, 249, 251, 251, 251,
1668  251, 252, 253, 252, 254, 252, 252, 255, 252, 256,
1669  252, 252, 252, 252, 258, 257, 259, 257, 260, 261,
1670  261, 262, 262, 263, 263, 263, 264, 264, 265, 265,
1671  266, 266, 266, 267, 268, 268, 268, 269, 270, 271,
1672  272, 272, 273, 273, 274, 274, 275, 275, 276, 276,
1673  277, 277, 278, 278, 279, 279, 280, 280, 281, 281,
1674  282, 282, 283, 283, 284, 285, 284, 286, 287, 288,
1675  284, 289, 289, 289, 289, 290, 291, 291, 291, 291,
1676  292, 293, 293, 293, 293, 294, 294, 294, 294, 294,
1677  295, 295, 295, 295, 295, 295, 295, 296, 296, 297,
1678  297, 298, 298, 299, 300, 299, 299, 301, 301, 302,
1679  302, 302, 302, 303, 303, 304, 304, 304, 304, 304,
1680  304, 304, 304, 304, 304, 304, 304, 304, 304, 304,
1681  305, 305, 305, 305, 306, 306, 307, 307, 308, 308,
1682  309, 310, 311, 311, 312, 312, 313, 313, 314, 314,
1683  315, 316, 317, 317, 318, 318, 319, 319, 320, 320,
1684  321, 321, 322, 323, 323, 324, 325, 324, 326, 326,
1685  327, 327, 328, 328, 328, 329, 329, 329, 330, 330,
1686  330, 330, 331, 331, 331, 332, 332, 333, 333, 334,
1687  334, 335, 336, 337, 337, 337, 338, 338, 339, 339,
1688  340
1689 };
1690 
1691 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
1692 static const yytype_uint8 yyr2[] =
1693 {
1694  0, 2, 0, 2, 2, 1, 1, 3, 2, 1,
1695  0, 5, 4, 2, 1, 1, 3, 2, 1, 0,
1696  5, 0, 4, 3, 3, 3, 2, 3, 3, 3,
1697  3, 3, 4, 1, 3, 3, 6, 5, 5, 5,
1698  5, 3, 3, 3, 3, 1, 3, 3, 1, 3,
1699  3, 3, 2, 1, 1, 1, 1, 1, 4, 0,
1700  5, 1, 2, 3, 4, 5, 4, 5, 2, 2,
1701  2, 2, 2, 1, 3, 1, 3, 1, 2, 3,
1702  5, 2, 4, 2, 4, 1, 3, 1, 3, 2,
1703  3, 1, 3, 1, 1, 4, 3, 3, 3, 3,
1704  2, 1, 1, 1, 4, 3, 3, 3, 3, 2,
1705  1, 1, 1, 2, 1, 3, 1, 1, 1, 1,
1706  1, 1, 1, 1, 1, 1, 0, 4, 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, 1,
1710  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1711  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1712  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1713  1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
1714  5, 3, 5, 6, 5, 5, 5, 5, 4, 3,
1715  3, 3, 3, 3, 3, 3, 3, 3, 4, 4,
1716  2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
1717  3, 3, 3, 3, 3, 2, 2, 3, 3, 3,
1718  3, 0, 4, 6, 1, 1, 1, 2, 4, 2,
1719  3, 1, 1, 1, 1, 2, 4, 2, 1, 2,
1720  2, 4, 1, 0, 2, 2, 2, 1, 1, 2,
1721  3, 4, 3, 4, 2, 1, 1, 1, 1, 1,
1722  1, 1, 1, 1, 1, 1, 0, 4, 0, 3,
1723  0, 0, 5, 3, 3, 2, 3, 3, 1, 4,
1724  3, 1, 0, 6, 4, 3, 2, 1, 2, 2,
1725  6, 6, 0, 0, 7, 0, 0, 7, 5, 4,
1726  0, 0, 9, 0, 6, 0, 0, 8, 0, 5,
1727  0, 6, 0, 0, 9, 1, 1, 1, 1, 1,
1728  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1729  1, 1, 1, 2, 1, 1, 1, 5, 1, 2,
1730  1, 1, 1, 3, 1, 3, 1, 4, 6, 3,
1731  5, 2, 4, 1, 3, 4, 2, 2, 1, 2,
1732  0, 6, 8, 4, 6, 4, 2, 6, 2, 4,
1733  6, 2, 4, 2, 4, 1, 1, 1, 3, 1,
1734  4, 1, 4, 1, 3, 1, 1, 0, 0, 0,
1735  5, 4, 1, 3, 3, 0, 5, 2, 4, 5,
1736  5, 2, 0, 5, 0, 5, 3, 0, 4, 0,
1737  4, 2, 1, 4, 0, 5, 0, 5, 5, 1,
1738  1, 6, 1, 1, 1, 1, 2, 1, 2, 1,
1739  1, 1, 1, 1, 1, 1, 2, 3, 3, 3,
1740  3, 3, 0, 3, 1, 2, 3, 3, 0, 3,
1741  3, 3, 3, 3, 0, 3, 0, 3, 0, 2,
1742  0, 2, 0, 2, 1, 0, 3, 0, 0, 0,
1743  6, 1, 1, 1, 1, 2, 1, 1, 1, 1,
1744  3, 1, 1, 2, 2, 1, 1, 1, 1, 1,
1745  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1746  1, 1, 1, 1, 0, 4, 2, 3, 2, 4,
1747  2, 2, 1, 2, 0, 6, 8, 4, 6, 4,
1748  6, 2, 4, 6, 2, 4, 2, 4, 1, 0,
1749  1, 1, 1, 1, 1, 1, 1, 3, 1, 3,
1750  2, 2, 1, 3, 1, 3, 1, 1, 2, 1,
1751  3, 3, 1, 3, 1, 3, 1, 1, 2, 1,
1752  1, 1, 2, 2, 1, 1, 0, 4, 1, 2,
1753  1, 3, 3, 2, 2, 1, 1, 1, 1, 1,
1754  1, 1, 1, 1, 1, 1, 1, 0, 1, 0,
1755  1, 2, 2, 0, 1, 1, 1, 1, 1, 2,
1756  0
1757 };
1758 
1759 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
1760  Performed when YYTABLE doesn't specify something else to do. Zero
1761  means the default is an error. */
1762 static const yytype_uint16 yydefact[] =
1763 {
1764  2, 0, 0, 1, 0, 347, 348, 349, 0, 340,
1765  341, 342, 345, 343, 344, 346, 335, 336, 337, 338,
1766  298, 263, 263, 511, 510, 512, 513, 609, 0, 609,
1767  10, 0, 515, 514, 516, 595, 597, 507, 506, 596,
1768  509, 501, 502, 454, 521, 522, 0, 0, 0, 0,
1769  290, 620, 620, 85, 407, 480, 478, 480, 482, 462,
1770  474, 468, 476, 0, 0, 0, 3, 607, 6, 9,
1771  33, 45, 48, 56, 263, 55, 0, 73, 0, 77,
1772  87, 0, 53, 244, 0, 286, 0, 0, 312, 315,
1773  607, 0, 0, 0, 0, 57, 307, 275, 276, 453,
1774  455, 277, 278, 279, 281, 280, 282, 451, 452, 450,
1775  517, 518, 283, 0, 284, 61, 5, 8, 168, 179,
1776  169, 192, 165, 185, 175, 174, 195, 196, 190, 173,
1777  172, 167, 193, 197, 198, 177, 166, 180, 184, 186,
1778  178, 171, 187, 194, 189, 188, 181, 191, 176, 164,
1779  183, 182, 163, 170, 161, 162, 158, 159, 160, 116,
1780  118, 117, 153, 154, 149, 131, 132, 133, 140, 137,
1781  139, 134, 135, 155, 156, 141, 142, 146, 150, 136,
1782  138, 128, 129, 130, 143, 144, 145, 147, 148, 151,
1783  152, 157, 121, 123, 125, 26, 119, 120, 122, 124,
1784  0, 0, 0, 0, 0, 0, 0, 0, 258, 0,
1785  245, 268, 71, 262, 620, 0, 517, 518, 0, 284,
1786  620, 590, 72, 70, 609, 69, 0, 620, 431, 68,
1787  609, 610, 0, 0, 21, 241, 0, 0, 335, 336,
1788  298, 301, 432, 0, 220, 0, 221, 295, 0, 19,
1789  0, 0, 607, 15, 18, 609, 75, 14, 609, 0,
1790  0, 613, 613, 246, 0, 0, 613, 588, 609, 0,
1791  0, 0, 83, 339, 0, 93, 94, 101, 309, 408,
1792  498, 497, 499, 496, 0, 495, 0, 0, 0, 0,
1793  0, 0, 0, 0, 0, 0, 0, 503, 504, 52,
1794  235, 236, 616, 617, 4, 618, 608, 0, 0, 0,
1795  0, 0, 0, 0, 436, 434, 421, 62, 306, 415,
1796  417, 0, 89, 0, 81, 78, 0, 0, 0, 0,
1797  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1798  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1799  0, 0, 0, 429, 620, 427, 0, 54, 0, 0,
1800  0, 0, 607, 0, 608, 0, 361, 360, 0, 0,
1801  517, 518, 284, 111, 112, 0, 0, 114, 0, 0,
1802  517, 518, 284, 328, 188, 181, 191, 176, 158, 159,
1803  160, 116, 117, 586, 330, 585, 0, 606, 605, 0,
1804  308, 456, 0, 0, 126, 593, 295, 269, 594, 265,
1805  0, 0, 0, 259, 267, 429, 620, 427, 0, 0,
1806  0, 260, 609, 0, 300, 264, 609, 254, 620, 620,
1807  253, 609, 305, 51, 23, 25, 24, 0, 302, 0,
1808  0, 0, 429, 427, 0, 17, 0, 609, 293, 13,
1809  608, 74, 289, 291, 296, 615, 614, 247, 615, 249,
1810  297, 589, 0, 100, 503, 504, 91, 86, 0, 429,
1811  620, 427, 549, 484, 487, 485, 500, 481, 457, 479,
1812  458, 459, 483, 460, 461, 0, 464, 470, 0, 471,
1813  466, 467, 0, 472, 0, 473, 0, 0, 619, 7,
1814  27, 28, 29, 30, 31, 49, 50, 620, 620, 59,
1815  63, 620, 0, 34, 43, 0, 44, 609, 0, 79,
1816  90, 47, 46, 0, 199, 268, 42, 217, 225, 230,
1817  231, 232, 227, 229, 239, 240, 233, 234, 210, 211,
1818  237, 238, 609, 226, 228, 222, 223, 224, 212, 213,
1819  214, 215, 216, 598, 600, 599, 601, 0, 263, 426,
1820  609, 598, 600, 599, 601, 0, 263, 0, 620, 352,
1821  0, 351, 0, 0, 0, 0, 0, 0, 295, 429,
1822  620, 427, 320, 325, 111, 112, 113, 0, 524, 323,
1823  523, 429, 620, 427, 0, 0, 549, 332, 598, 599,
1824  263, 35, 201, 41, 209, 0, 199, 592, 0, 270,
1825  266, 620, 598, 599, 609, 598, 599, 591, 299, 611,
1826  250, 255, 257, 304, 22, 0, 242, 0, 32, 424,
1827  422, 208, 0, 76, 16, 609, 613, 0, 84, 97,
1828  99, 609, 598, 599, 555, 552, 551, 550, 553, 0,
1829  566, 0, 577, 567, 581, 580, 576, 549, 409, 548,
1830  412, 554, 556, 558, 534, 564, 620, 569, 620, 574,
1831  534, 579, 534, 0, 532, 488, 0, 463, 465, 475,
1832  469, 477, 218, 219, 399, 609, 0, 397, 396, 0,
1833  620, 0, 274, 0, 88, 82, 0, 0, 0, 0,
1834  0, 0, 430, 66, 0, 0, 433, 0, 0, 428,
1835  64, 620, 350, 287, 620, 620, 442, 620, 353, 620,
1836  355, 313, 354, 316, 0, 0, 319, 602, 294, 609,
1837  598, 599, 0, 0, 526, 0, 0, 111, 112, 115,
1838  609, 0, 609, 549, 0, 0, 0, 252, 418, 58,
1839  251, 0, 127, 271, 261, 0, 0, 433, 0, 0,
1840  620, 609, 11, 0, 292, 248, 92, 95, 0, 560,
1841  555, 0, 373, 364, 366, 609, 362, 609, 0, 0,
1842  541, 0, 530, 584, 568, 0, 531, 0, 544, 578,
1843  0, 546, 582, 489, 491, 492, 493, 486, 494, 555,
1844  0, 395, 609, 0, 380, 562, 620, 620, 572, 380,
1845  380, 378, 401, 0, 0, 0, 0, 0, 272, 80,
1846  200, 0, 40, 206, 39, 207, 67, 425, 612, 0,
1847  37, 204, 38, 205, 65, 423, 443, 444, 620, 445,
1848  0, 620, 358, 0, 0, 356, 0, 0, 0, 318,
1849  0, 0, 433, 0, 326, 0, 0, 433, 329, 587,
1850  609, 0, 528, 333, 419, 420, 202, 0, 256, 303,
1851  20, 570, 609, 0, 371, 0, 557, 0, 0, 0,
1852  410, 533, 559, 534, 534, 565, 620, 583, 534, 575,
1853  534, 534, 0, 0, 0, 561, 0, 398, 386, 388,
1854  0, 376, 377, 0, 391, 0, 393, 0, 437, 435,
1855  0, 416, 273, 243, 36, 203, 0, 0, 447, 359,
1856  0, 12, 449, 0, 310, 311, 0, 0, 270, 620,
1857  321, 0, 525, 324, 527, 331, 549, 363, 374, 0,
1858  369, 365, 411, 0, 0, 0, 537, 0, 539, 529,
1859  0, 545, 0, 542, 547, 0, 571, 295, 429, 400,
1860  379, 380, 380, 563, 620, 380, 573, 380, 380, 405,
1861  609, 403, 406, 60, 0, 446, 0, 102, 103, 110,
1862  0, 448, 0, 314, 317, 439, 440, 438, 0, 0,
1863  0, 0, 372, 0, 367, 414, 413, 534, 534, 534,
1864  534, 490, 602, 294, 0, 383, 0, 385, 375, 0,
1865  392, 0, 389, 394, 0, 402, 109, 429, 620, 427,
1866  620, 620, 0, 327, 0, 370, 0, 538, 0, 535,
1867  540, 543, 380, 380, 380, 380, 404, 602, 108, 609,
1868  598, 599, 441, 357, 322, 334, 368, 534, 384, 0,
1869  381, 387, 390, 433, 536, 380, 382
1870 };
1871 
1872 /* YYDEFGOTO[NTERM-NUM]. */
1873 static const yytype_int16 yydefgoto[] =
1874 {
1875  -1, 1, 2, 66, 67, 68, 236, 567, 568, 252,
1876  253, 446, 254, 437, 70, 71, 358, 72, 73, 510,
1877  690, 243, 75, 76, 255, 77, 78, 79, 467, 80,
1878  209, 377, 378, 192, 193, 194, 195, 605, 556, 197,
1879  82, 439, 211, 260, 228, 748, 426, 427, 225, 226,
1880  213, 413, 428, 516, 83, 356, 258, 259, 635, 625,
1881  360, 847, 361, 848, 732, 988, 736, 733, 931, 594,
1882  596, 746, 936, 245, 85, 86, 87, 88, 89, 90,
1883  91, 92, 93, 94, 713, 570, 721, 844, 845, 369,
1884  773, 774, 775, 960, 899, 802, 686, 687, 803, 970,
1885  971, 278, 279, 472, 778, 658, 880, 320, 511, 95,
1886  96, 711, 704, 565, 557, 318, 508, 507, 577, 987,
1887  715, 838, 917, 921, 97, 98, 99, 100, 101, 102,
1888  103, 290, 485, 104, 294, 105, 106, 292, 296, 286,
1889  284, 288, 477, 676, 675, 793, 892, 797, 107, 285,
1890  108, 109, 216, 217, 112, 218, 219, 589, 735, 744,
1891  881, 780, 745, 661, 662, 663, 664, 665, 805, 806,
1892  666, 667, 668, 669, 808, 809, 670, 671, 672, 673,
1893  674, 782, 396, 595, 265, 429, 221, 115, 629, 559,
1894  399, 304, 423, 424, 706, 457, 571, 364, 257
1895 };
1896 
1897 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1898  STATE-NUM. */
1899 #define YYPACT_NINF -808
1900 static const yytype_int16 yypact[] =
1901 {
1902  -808, 134, 2562, -808, 7195, -808, -808, -808, 6718, -808,
1903  -808, -808, -808, -808, -808, -808, 7308, 7308, -808, -808,
1904  7308, 3884, 3479, -808, -808, -808, -808, 455, 6585, 17,
1905  -808, 60, -808, -808, -808, 2804, 3614, -808, -808, 2939,
1906  -808, -808, -808, -808, -808, -808, 8664, 8664, 140, 4955,
1907  462, 7647, 7986, 6977, -808, 6452, -808, -808, -808, 103,
1908  115, 126, 206, 117, 8777, 8664, -808, -25, -808, 1007,
1909  -808, 322, -808, -808, 141, 372, 352, -808, 337, 9003,
1910  -808, 379, 2918, 247, 278, -808, 8890, 8890, -808, -808,
1911  5842, 9112, 9221, 9330, 6318, 33, 65, -808, -808, 410,
1912  -808, -808, -808, -808, -808, -808, -808, -808, -808, -808,
1913  205, 409, -808, 441, 433, -808, -808, -808, -808, -808,
1914  -808, -808, -808, -808, -808, -808, -808, -808, -808, -808,
1915  -808, -808, -808, -808, -808, -808, -808, -808, -808, -808,
1916  -808, -808, -808, -808, -808, -808, -808, -808, -808, -808,
1917  -808, -808, -808, -808, -808, -808, -808, -808, -808, -808,
1918  -808, -808, -808, -808, -808, -808, -808, -808, -808, -808,
1919  -808, -808, -808, -808, -808, -808, -808, -808, -808, -808,
1920  -808, -808, -808, -808, -808, -808, -808, -808, -808, -808,
1921  -808, -808, -808, -808, -808, 396, -808, -808, -808, -808,
1922  427, 8664, 519, 5094, 8664, 8664, 8664, 8664, -808, 468,
1923  2918, 500, -808, -808, 463, 304, 22, 344, 517, 363,
1924  479, -808, -808, -808, 5729, -808, 7308, 7308, -808, -808,
1925  5955, -808, 8890, 498, -808, 482, 491, 5233, -808, -808,
1926  -808, 497, 499, 141, -808, 361, 570, 458, 7421, -808,
1927  4955, 505, -25, -808, 1007, 17, 538, -808, 17, 8890,
1928  515, 188, 318, -808, 500, 523, 318, -808, 17, 617,
1929  338, 9439, 540, -808, 474, 572, 613, 674, -808, -808,
1930  -808, -808, -808, -808, 522, -808, 601, 669, 284, 576,
1931  752, 577, 58, 582, 759, 584, 68, 609, 612, -808,
1932  -808, -808, -808, -808, -808, -808, 6068, 8890, 8890, 8890,
1933  8890, 7421, 8890, 8890, -808, -808, -808, 588, -808, -808,
1934  -808, 8099, -808, 4955, 7086, 561, 8099, 8664, 8664, 8664,
1935  8664, 8664, 8664, 8664, 8664, 8664, 8664, 8664, 8664, 8664,
1936  8664, 8664, 8664, 8664, 8664, 8664, 8664, 8664, 8664, 8664,
1937  8664, 8664, 8664, 2012, 7308, 9718, 4312, 322, 109, 109,
1938  8890, 8890, -25, 689, 563, 651, -808, -808, 685, 691,
1939  53, 57, 100, 328, 393, 8890, 568, -808, 199, 708,
1940  -808, -808, -808, -808, 55, 223, 249, 279, 283, 301,
1941  316, 384, 417, -808, -808, -808, 33, -808, -808, 9795,
1942  -808, -808, 8777, 8777, -808, -808, 414, -808, -808, -808,
1943  8664, 8664, 7534, -808, -808, 9872, 7308, 9949, 8664, 8664,
1944  7760, -808, 17, 595, -808, -808, 17, -808, 580, 599,
1945  -808, 61, -808, -808, -808, -808, -808, 6718, -808, 8664,
1946  5364, 604, 9872, 9949, 8664, 1007, 607, 17, -808, -808,
1947  6181, 618, -808, 322, -808, 7873, -808, -808, 7986, -808,
1948  -808, -808, 482, 769, -808, -808, -808, 622, 9439, 10026,
1949  7308, 10103, 1417, -808, -808, -808, -808, -808, -808, -808,
1950  -808, -808, -808, -808, -808, 244, -808, -808, 611, -808,
1951  -808, -808, 347, -808, 623, -808, 8664, 8664, -808, -808,
1952  -808, -808, -808, -808, -808, -808, -808, 51, 51, -808,
1953  -808, 51, 8664, -808, 628, 634, -808, 17, 9439, 655,
1954  -808, -808, -808, 678, 1866, -808, -808, 570, 2240, 2240,
1955  2240, 2240, 727, 727, 3323, 3188, 2240, 2240, 3053, 3053,
1956  415, 415, 1674, 727, 727, 907, 907, 660, 40, 40,
1957  570, 570, 570, 4019, 3074, 4154, 3209, 499, 661, -808,
1958  17, 535, -808, 688, -808, 499, 3749, 737, 790, -808,
1959  4451, 799, 4729, 66, 66, 689, 8212, 737, 147, 10180,
1960  7308, 10257, -808, 322, -808, 769, -808, -25, -808, -808,
1961  -808, 10334, 7308, 9795, 4312, 8890, 1538, -808, -808, -808,
1962  4173, -808, 2648, -808, 2918, 6718, 2783, -808, 8664, 500,
1963  -808, 479, 2669, 3344, 17, 420, 444, -808, -808, -808,
1964  -808, 7534, 7760, -808, -808, 8890, 2918, 672, -808, -808,
1965  -808, 2918, 5364, 2, -808, 17, 318, 9439, 622, 701,
1966  469, 17, 207, 224, 711, -808, -808, -808, -808, 8664,
1967  -808, 947, -808, -808, -808, -808, -808, 1789, -808, -808,
1968  -808, -808, -808, -808, 680, -808, 687, 773, 694, -808,
1969  698, 783, 704, 791, -808, -808, 834, -808, -808, -808,
1970  -808, -808, 570, 570, -808, 1322, 5503, -808, -808, 5233,
1971  51, 5503, 721, 8325, -808, 622, 9439, 8777, 8664, 741,
1972  8777, 8777, -808, 588, 499, 722, 818, 8777, 8777, -808,
1973  588, 499, -808, -808, 8438, 827, -808, 597, -808, 827,
1974  -808, -808, -808, -808, 737, 70, -808, 67, 136, 17,
1975  148, 149, 8890, -25, -808, 8890, 4312, 701, 469, -808,
1976  17, 737, 61, 1789, 4312, -25, 6851, -808, 65, 372,
1977  -808, 8664, -808, -808, -808, 8664, 8664, 466, 8664, 8664,
1978  731, 61, -808, 736, -808, -808, -808, 567, 8664, -808,
1979  -808, 947, 350, -808, 738, 17, -808, 17, 72, 1789,
1980  -808, 42, -808, -808, -808, 272, -808, 1789, -808, -808,
1981  892, -808, -808, -808, -808, -808, -808, -808, -808, 762,
1982  9548, -808, 17, 764, 746, -808, 751, 694, -808, 758,
1983  760, -808, 761, 893, 775, 5233, 899, 8664, 776, 622,
1984  2918, 8664, -808, 2918, -808, 2918, -808, -808, -808, 8777,
1985  -808, 2918, -808, 2918, -808, -808, 628, -808, 826, -808,
1986  4842, 909, -808, 8890, 737, -808, 737, 5503, 5503, -808,
1987  8551, 4590, 155, 66, -808, -25, 737, -808, -808, -808,
1988  17, 737, -808, -808, -808, -808, 2918, 8664, 7760, -808,
1989  -808, -808, 17, 1011, 789, 1003, -808, 793, 5503, 5233,
1990  -808, -808, -808, 798, 803, -808, 694, -808, 804, -808,
1991  811, 804, 5616, 9548, 877, 792, 808, -808, 1910, -808,
1992  490, -808, -808, 1910, -808, 1368, -808, 1032, -808, -808,
1993  820, -808, 819, 2918, -808, 2918, 9657, 109, -808, -808,
1994  5503, -808, -808, 109, -808, -808, 737, 737, -808, 130,
1995  -808, 4312, -808, -808, -808, -808, 1538, -808, 821, 1011,
1996  434, -808, -808, 944, 832, 1789, -808, 892, -808, -808,
1997  892, -808, 892, -808, -808, 850, 792, -808, 10411, -808,
1998  -808, 830, 831, -808, 694, 835, -808, 837, 835, -808,
1999  443, -808, -808, -808, 910, -808, 796, 572, 613, 674,
2000  4312, -808, 4451, -808, -808, -808, -808, -808, 5503, 737,
2001  4312, 1011, 821, 1011, 838, -808, -808, 804, 839, 804,
2002  804, -808, 840, 841, 1910, -808, 1368, -808, -808, 1368,
2003  -808, 1368, -808, -808, 1032, -808, 769, 10488, 7308, 10565,
2004  790, 597, 737, -808, 737, 821, 1011, -808, 892, -808,
2005  -808, -808, 835, 844, 835, 835, -808, 74, 469, 17,
2006  146, 158, -808, -808, -808, -808, 821, 804, -808, 1368,
2007  -808, -808, -808, 176, -808, 835, -808
2008 };
2009 
2010 /* YYPGOTO[NTERM-NUM]. */
2011 static const yytype_int16 yypgoto[] =
2012 {
2013  -808, -808, -808, -363, -808, 27, -808, -550, -21, -808,
2014  518, -808, 15, -808, -301, -51, -86, 41, -808, -268,
2015  -808, 413, -7, 888, -153, -4, -73, -808, -416, 7,
2016  1571, -315, 889, -53, -808, -5, -808, -808, 98, -808,
2017  870, -808, 735, -808, -44, 275, -340, 87, -11, -808,
2018  -386, -188, 4, -311, -20, -808, -808, -808, -808, -808,
2019  -808, -808, -808, -808, -808, -808, -808, -808, -808, -808,
2020  -808, -808, -808, 64, -808, -808, -808, -808, -808, -808,
2021  -808, -808, -808, -808, 154, -347, -526, -34, -645, -808,
2022  -785, -779, 221, 309, 374, -808, -446, -808, -665, -808,
2023  -18, -808, -808, -808, -808, -808, -808, 248, -808, -808,
2024  -808, -808, -808, -808, -808, -93, -808, -808, -535, -808,
2025  -6, -808, -808, -808, -808, -808, -808, 918, -808, -808,
2026  -808, -808, 712, -808, -808, -808, -808, -808, -808, -808,
2027  963, -808, -142, -808, -808, -808, -808, -808, 10, -808,
2028  14, -808, 1081, 1361, 928, 1531, 1552, -808, -808, 89,
2029  -464, -372, -415, -783, -518, -723, 234, 242, 133, -808,
2030  -808, -808, 289, -708, -807, 128, 255, -808, -638, -808,
2031  228, -622, -808, -808, -808, 69, -383, -808, -348, -808,
2032  639, -26, 0, 48, -598, -208, 21, -14, -2
2033 };
2034 
2035 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
2036  positive, shift that token. If negative, reduce the rule which
2037  number is the opposite. If YYTABLE_NINF, syntax error. */
2038 #define YYTABLE_NINF -621
2039 static const yytype_int16 yytable[] =
2040 {
2041  116, 359, 283, 400, 362, 558, 325, 566, 659, 208,
2042  208, 229, 572, 208, 560, 526, 757, 69, 198, 69,
2043  214, 214, 199, 234, 214, 521, 610, 232, 251, 235,
2044  316, 117, 421, 273, 610, 357, 357, 617, 198, 357,
2045  724, 394, 199, 767, 741, 256, 786, 810, 723, 263,
2046  267, 600, 638, 306, 459, 261, 882, 660, 461, 273,
2047  272, 586, 689, 317, 363, 691, 84, 558, 84, 566,
2048  841, 273, 273, 273, 846, 617, 614, 627, -102, 889,
2049  215, 215, -103, 569, 215, 220, 220, -106, 305, 220,
2050  941, 314, -106, 720, 938, 630, 966, 447, 312, 313,
2051  649, 878, 695, 212, 222, 299, 196, 223, 327, -519,
2052  650, 305, 877, 84, 302, -74, 303, 274, 397, 488,
2053  262, 266, 569, 630, 972, -110, 196, 684, 215, 494,
2054  641, 852, 659, 776, 3, -102, -88, 896, 653, 654,
2055  -511, 884, 857, 274, 479, 840, 482, 576, 486, 890,
2056  215, 215, 486, 196, 215, 368, 379, 379, 231, -105,
2057  992, -108, 655, 350, 351, 352, 398, 314, 489, 685,
2058  517, -107, -109, -105, -107, 882, 297, 298, 495, 431,
2059  -104, 433, 251, 879, 901, 902, 856, -93, -511, -104,
2060  237, -94, 196, 659, 861, 315, 247, 966, 466, 316,
2061  587, -97, 231, -598, 850, 302, 941, 303, 453, 302,
2062  -598, 303, 414, -106, 1025, -106, 441, 208, 414, 208,
2063  208, 500, 501, 502, 503, 430, 449, 882, 214, 251,
2064  214, 972, -96, 630, -101, 610, 610, 889, 450, 617,
2065  729, 421, 777, 289, 815, 630, 256, 1046, 302, -98,
2066  303, 273, 740, 776, 874, 291, 357, 357, 357, 357,
2067  962, 505, 506, 445, 949, 967, 293, 84, 462, 763,
2068  -99, 315, -599, 305, 573, 574, 739, 227, 432, 659,
2069  819, -100, -96, -98, 985, -105, 882, -105, 215, -95,
2070  215, 215, -519, 220, 215, 220, 215, -107, 788, -107,
2071  791, 84, 251, 451, 273, 473, 452, 998, -510, 357,
2072  357, 422, 84, 425, 84, -104, 588, -104, -102, 256,
2073  -96, 69, 455, 215, 583, 515, 504, 930, 860, 456,
2074  515, 519, -339, 499, -512, 274, 575, -98, 302, -93,
2075  303, -96, 1008, 678, -96, 473, 295, 208, -96, 481,
2076  678, 474, 430, 475, -595, 776, -510, 776, -98, 312,
2077  313, -98, 513, 353, -513, -98, 1033, 522, -515, 654,
2078  84, 215, 215, 215, 215, 84, 215, 215, 851, -339,
2079  -339, 989, -512, 305, 677, 215, -514, 84, 274, 415,
2080  215, 474, 655, 475, 986, 466, 521, 464, 465, 590,
2081  319, -516, 770, 837, 645, 646, 647, 648, 473, 208,
2082  354, 355, -513, -505, 430, 74, -515, 74, 215, -596,
2083  84, 776, 994, 754, 215, 215, 414, 414, 765, 74,
2084  74, -520, 624, 74, -514, 826, 416, 417, 116, 215,
2085  1024, 1053, 834, 601, 603, 466, 442, 198, 273, -516,
2086  419, 199, 458, 564, 474, 69, 475, -103, -595, 456,
2087  -505, -505, 74, 208, -595, 321, 215, 215, 430, -505,
2088  618, 322, 659, 776, 620, 776, -110, 74, -508, 623,
2089  215, 611, 610, 327, 873, 617, 770, 680, 645, 646,
2090  647, 648, 326, 416, 443, 633, -520, 564, 273, 74,
2091  74, 444, -508, 74, 84, 688, 688, 758, 776, 688,
2092  56, 946, 948, 702, 84, 564, 951, -505, 953, 954,
2093  403, 709, -103, -596, 636, -508, -508, -109, 402, -596,
2094  404, 759, 274, -105, 215, 196, 348, 349, 350, 351,
2095  352, 564, 699, -94, 742, 444, -110, 703, 800, 717,
2096  -508, 719, 434, 867, -294, 710, 747, -107, 650, 469,
2097  705, 435, 436, 230, 766, 694, 716, -101, 993, 564,
2098  980, -109, 754, 208, 761, 406, 982, 1014, 430, -104,
2099  725, 410, 274, 473, 231, 208, 653, 654, 411, 749,
2100  430, 230, -100, -433, 722, 722, 231, 412, 750, -288,
2101  752, -294, -294, -288, 418, -599, 470, 471, 734, 414,
2102  655, 843, 840, 420, 705, 198, 74, 273, 438, 199,
2103  584, 440, 707, 466, 585, 1027, 1029, 1030, 1031, 474,
2104  116, 475, 476, 224, 84, 227, 84, 74, 327, 74,
2105  74, 705, 448, 74, 215, 74, 853, 69, -105, 855,
2106  74, -73, -433, 454, 460, 864, 215, -517, 84, 215,
2107  827, 74, 473, 74, 783, 813, 783, 747, 814, -96,
2108  816, 630, 74, 463, 468, 1054, 273, 496, 1039, 564,
2109  497, 357, 509, 764, 357, 812, 483, 487, 688, 215,
2110  760, 564, 490, 863, 493, 520, 84, -433, -518, -433,
2111  -433, 274, 498, 196, -517, -517, 576, 578, 474, 750,
2112  475, 478, 839, 842, 621, 842, 582, 842, 515, 74,
2113  74, 74, 74, 74, 74, 74, 74, -602, 327, 705,
2114  473, 726, 619, 622, 74, 628, 74, 632, 522, 74,
2115  705, 822, 824, 340, 341, -518, -518, 712, 830, 832,
2116  84, 679, -88, 84, 854, 84, 637, 923, 414, -284,
2117  274, 215, -268, 681, 215, 215, 862, 74, 693, 74,
2118  579, 215, 215, 74, 74, 708, 474, 812, 475, 480,
2119  273, 348, 349, 350, 351, 352, -602, 264, 74, 696,
2120  859, 697, 357, 591, 910, 327, 215, -424, 714, 215,
2121  84, -107, 812, 762, 783, 783, -284, -284, 84, 869,
2122  340, 341, 718, 473, 779, 74, 74, 580, 581, 919,
2123  473, 781, -98, 876, 768, 784, 926, 927, 785, 74,
2124  929, -602, 787, -602, -602, 789, 918, -598, 790, 922,
2125  592, 593, 840, 792, 196, 345, 346, 347, 348, 349,
2126  350, 351, 352, 74, -295, -269, 821, 943, 944, 474,
2127  828, 475, 484, 74, 895, 868, 474, 870, 475, 491,
2128  914, 955, 875, 273, 722, 893, 932, 958, 849, 84,
2129  898, 1017, 897, 74, 783, 900, 210, 210, 794, 795,
2130  210, 796, 903, 215, 905, 858, 273, 44, 45, 981,
2131  907, -295, -295, 908, 84, 829, 909, 215, 934, 911,
2132  -270, 84, 84, 811, 916, 84, 244, 246, 920, 804,
2133  937, 210, 210, 939, 592, 593, 959, 842, 1018, 1019,
2134  942, -104, 945, 957, 300, 301, 405, 947, 950, 407,
2135  408, 409, 84, 84, 770, 952, 645, 646, 647, 648,
2136  649, 973, -95, -271, 995, 991, 84, 956, 1001, 1020,
2137  650, 1021, 783, 996, 1004, 1006, 1016, 1022, 634, 1009,
2138  1015, 1011, 1026, 1028, 807, 327, -598, -599, 1049, 366,
2139  976, 651, 383, 74, 84, 74, 835, 1043, 653, 654,
2140  340, 341, 872, 74, 801, 84, 1036, 865, 924, 770,
2141  925, 645, 646, 647, 648, 74, 492, 74, 74, 887,
2142  933, 208, 655, 887, 1042, 935, 430, 401, 716, 842,
2143  287, 888, 395, 885, 891, 990, 961, 347, 348, 349,
2144  350, 351, 352, 963, 883, 597, 771, 0, 74, 705,
2145  0, 0, 772, 0, 84, 74, 84, 307, 308, 309,
2146  310, 311, 84, 0, 84, 770, 514, 645, 646, 647,
2147  648, 525, 0, 770, 0, 645, 646, 647, 648, 0,
2148  886, 210, 0, 0, 210, 210, 210, 300, 0, 0,
2149  983, 984, 215, 110, 969, 110, 645, 646, 647, 648,
2150  0, 0, 771, 0, 210, 0, 210, 210, 940, 74,
2151  771, 0, 74, 0, 74, 0, 0, 0, 0, 0,
2152  74, 0, 0, 74, 74, 0, 0, 564, 0, 0,
2153  74, 74, 0, 0, 0, 0, 811, 0, 887, 0,
2154  110, 811, 0, 811, 275, 0, 0, 965, 0, 968,
2155  0, 0, 0, 1023, 0, 74, 607, 609, 74, 74,
2156  0, 0, 0, 0, 0, 264, 0, 74, 0, 0,
2157  275, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2158  0, 0, 370, 380, 380, 380, 1044, 0, 1045, 997,
2159  0, 999, 0, 904, 906, 0, 1000, 807, 0, 964,
2160  609, 210, 807, 264, 807, 0, 524, 527, 528, 529,
2161  530, 531, 532, 533, 534, 535, 536, 537, 538, 539,
2162  540, 541, 542, 543, 544, 545, 546, 547, 548, 549,
2163  550, 551, 552, 0, 210, 0, 0, 0, 74, 0,
2164  0, 0, 811, 0, 811, 0, 0, 811, 1032, 811,
2165  1034, 0, 74, 0, 0, 1035, 0, 692, 0, 0,
2166  0, 0, 0, 74, 0, 0, 74, 0, 0, 0,
2167  74, 74, 1047, 0, 74, 0, 0, 0, 0, 0,
2168  0, 0, 602, 604, 0, 0, 0, 811, 0, 0,
2169  606, 210, 210, 1055, 110, 0, 210, 0, 602, 604,
2170  210, 74, 74, 807, 0, 807, 0, 0, 807, 0,
2171  807, 0, 0, 0, 0, 74, 0, 0, 0, 626,
2172  0, 525, 0, 0, 631, 0, 0, 0, 110, 0,
2173  0, 0, 0, 0, 0, 210, 0, 0, 210, 110,
2174  0, 110, 0, 74, 0, 1005, 1007, 0, 807, 1010,
2175  210, 1012, 1013, 753, 74, 0, 0, 0, 0, 0,
2176  0, 0, 275, 0, 0, 0, 609, 264, 0, 0,
2177  0, 0, 0, 111, 0, 111, 682, 683, 0, 0,
2178  0, 0, 0, 0, 799, 0, 645, 646, 647, 648,
2179  800, 0, 210, 0, 769, 0, 0, 110, 0, 0,
2180  650, 0, 110, 74, 0, 74, 0, 0, 0, 0,
2181  0, 74, 0, 74, 110, 275, 1048, 1050, 1051, 1052,
2182  111, 651, 0, 0, 276, 0, 0, 652, 653, 654,
2183  770, 0, 645, 646, 647, 648, 800, 0, 818, 1056,
2184  0, 74, 0, 0, 0, 0, 650, 110, 0, 0,
2185  276, 0, 655, 0, 0, 656, 210, 0, 0, 836,
2186  210, 0, 371, 381, 381, 381, 0, 651, 0, 0,
2187  0, 0, 210, 231, 653, 654, 0, 0, 0, 644,
2188  0, 645, 646, 647, 648, 649, 0, 0, 210, 0,
2189  0, 0, 0, 0, 0, 650, 0, 0, 655, 0,
2190  0, 210, 210, 0, 0, 0, 0, 0, 0, 0,
2191  0, 0, 0, 871, 0, 0, 651, 0, 0, 0,
2192  0, 0, 652, 653, 654, 0, 0, 0, 0, 210,
2193  0, 110, 0, 0, 0, 0, 0, 0, 0, 0,
2194  0, 110, 0, 113, 0, 113, 0, 655, 0, 0,
2195  656, 0, 0, 0, 0, 0, 0, 0, 0, 275,
2196  0, 0, 912, 657, 114, 0, 114, 0, 0, 0,
2197  0, 0, 0, 210, 111, 0, 0, 606, 820, 0,
2198  823, 825, 0, 81, 0, 81, 0, 831, 833, 0,
2199  113, 0, 0, 0, 210, 928, 0, 0, 0, 0,
2200  644, 0, 645, 646, 647, 648, 649, 0, 111, 275,
2201  0, 114, 0, 264, 0, 277, 650, 0, 0, 111,
2202  0, 111, 0, 0, 0, 0, 0, 0, 0, 0,
2203  81, 866, 0, 0, 0, 823, 825, 651, 831, 833,
2204  0, 277, 276, 652, 653, 654, 0, 0, 210, 0,
2205  0, 0, 0, 372, 382, 382, 0, 0, 0, 0,
2206  0, 110, 0, 110, 0, 0, 0, 0, 655, 0,
2207  0, 656, 367, 0, 0, 0, 0, 111, 0, 0,
2208  0, 0, 111, 0, 743, 110, 0, 0, 0, 0,
2209  0, 0, 0, 0, 111, 276, 0, 210, 0, 0,
2210  0, 913, 0, 0, 0, 0, 0, 0, 0, 915,
2211  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2212  0, 0, 0, 110, 0, 0, 0, 111, 275, 0,
2213  210, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2214  0, 0, 0, 0, 113, 0, 0, 915, 210, 0,
2215  0, 0, 327, 328, 329, 330, 331, 332, 333, 334,
2216  335, 336, 337, 338, 339, 114, 0, 340, 341, 0,
2217  0, 0, 0, 0, 0, 0, 0, 110, 113, 0,
2218  110, 0, 110, 0, 81, 0, 0, 275, 0, 113,
2219  0, 113, 0, 0, 0, 0, 0, 0, 342, 114,
2220  343, 344, 345, 346, 347, 348, 349, 350, 351, 352,
2221  114, 111, 114, 0, 0, 0, 0, 0, 81, 0,
2222  0, 111, 0, 0, 0, 231, 0, 110, 0, 81,
2223  0, 81, 0, 277, 0, 110, 0, 0, 0, 276,
2224  0, 0, 0, 0, 0, 0, 0, 113, 0, 0,
2225  0, 644, 113, 645, 646, 647, 648, 649, 0, 0,
2226  0, 0, 0, 0, 113, 0, 0, 650, 114, 0,
2227  0, 0, 0, 114, 0, 0, 0, 0, 0, 0,
2228  0, 0, 0, 0, 0, 114, 277, 81, 651, 276,
2229  0, 380, 81, 0, 652, 653, 654, 113, 210, 0,
2230  0, 0, 0, 0, 81, 0, 110, 523, 0, 0,
2231  0, 0, 0, 0, 0, 0, 0, 0, 114, 655,
2232  698, 0, 656, 0, 0, 0, 0, 0, 0, 0,
2233  0, 110, 0, 0, 0, 0, 0, 81, 110, 110,
2234  0, 111, 110, 111, 327, 328, 329, 330, 331, 332,
2235  333, 334, 335, 336, 337, 338, 339, 0, 0, 340,
2236  341, 0, 0, 0, 0, 111, 0, 0, 0, 110,
2237  110, 0, 799, 0, 645, 646, 647, 648, 800, 0,
2238  0, 113, 0, 110, 380, 0, 0, 0, 650, 0,
2239  342, 113, 343, 344, 345, 346, 347, 348, 349, 350,
2240  351, 352, 114, 111, 0, 0, 0, 977, 276, 651,
2241  -245, 110, 114, 0, 0, 652, 653, 654, 0, 0,
2242  0, 81, 110, 0, 0, 0, 0, 0, 0, 0,
2243  277, 81, 0, 0, 0, 0, 0, 0, 0, 0,
2244  655, 0, 0, 656, 0, 0, 0, 0, 0, 0,
2245  0, 0, 0, 0, 0, 0, 0, 111, 0, 0,
2246  111, 0, 111, 0, 0, 0, 0, 276, 0, 0,
2247  0, 110, 0, 110, 553, 554, 0, 0, 555, 110,
2248  277, 110, 0, 0, 0, 0, 0, 0, 162, 163,
2249  164, 165, 166, 167, 168, 169, 170, 0, 0, 171,
2250  172, 0, 0, 173, 174, 175, 176, 111, 0, 0,
2251  0, 113, 0, 113, 0, 111, 0, 177, 178, 0,
2252  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2253  0, 0, 114, 0, 114, 113, 0, 0, 179, 180,
2254  181, 182, 183, 184, 185, 186, 187, 188, 0, 189,
2255  190, 81, 0, 81, 0, 0, 114, 191, 0, 0,
2256  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2257  0, 381, 0, 113, 0, 81, 0, 0, 0, 0,
2258  0, 0, 0, 0, 0, 0, 111, 0, 0, 0,
2259  0, 0, 0, 0, 114, 0, 0, 0, 0, 277,
2260  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2261  0, 111, 0, 81, 0, 0, 0, 0, 111, 111,
2262  0, 0, 111, 0, 0, 0, 0, 113, 0, 0,
2263  113, 0, 113, 0, 0, 0, 0, 0, 798, 0,
2264  0, 0, 0, 0, 0, 0, 0, 0, 114, 111,
2265  111, 114, 0, 114, 0, 0, 0, 0, 277, 0,
2266  0, 0, 0, 111, 381, 0, 0, 81, 0, 0,
2267  81, 0, 81, 0, 0, 0, 0, 113, 523, 0,
2268  0, 0, 0, 0, 0, 113, 0, 978, 0, 0,
2269  0, 111, 0, 0, 0, 0, 0, 0, 114, 0,
2270  0, 0, 111, 0, 0, 0, 114, 0, 0, 0,
2271  0, 0, 0, 0, 0, 0, 0, 81, 327, -621,
2272  -621, -621, -621, 332, 333, 81, 0, -621, -621, 0,
2273  0, 0, 0, 340, 341, 0, 0, 0, 0, 0,
2274  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2275  0, 111, 0, 111, 0, 0, 113, 0, 0, 111,
2276  0, 111, 382, 0, 0, 0, 343, 344, 345, 346,
2277  347, 348, 349, 350, 351, 352, 0, 114, 0, 0,
2278  0, 113, 0, 0, 0, 0, 0, 0, 113, 113,
2279  0, 0, 113, 0, 0, 0, 81, 0, 0, 0,
2280  0, 0, 114, 0, 0, 0, 0, 0, 0, 114,
2281  114, 0, 0, 114, 0, 0, 0, 0, 0, 113,
2282  113, 81, 0, 0, 0, 0, 0, 0, 81, 81,
2283  0, 0, 81, 113, 0, 0, 0, 0, 0, 0,
2284  114, 114, 0, 0, 0, 0, 0, 0, 0, 0,
2285  0, 0, 0, 0, 114, 382, 0, 0, 0, 81,
2286  81, 113, 0, 0, 0, 0, 0, 0, 0, 0,
2287  0, 0, 113, 81, 0, 0, 0, 0, 979, 0,
2288  0, 0, 114, 0, 0, 0, 0, 0, 0, 0,
2289  0, 0, 0, 114, 0, 0, 0, 975, 0, 0,
2290  0, 81, 0, 0, 0, 0, 0, 0, 0, 0,
2291  0, 0, 81, 0, 0, 0, 0, 0, 0, 0,
2292  0, 113, 0, 113, 0, 0, 0, 0, 0, 113,
2293  0, 113, 0, 0, 0, 0, 0, 0, 0, 0,
2294  0, 0, 114, 0, 114, 0, 0, 0, 0, 0,
2295  114, 0, 114, 0, 0, 0, 0, 0, 0, 0,
2296  0, 81, 0, 81, 0, 0, 0, 0, 0, 81,
2297  0, 81, -620, 4, 0, 5, 6, 7, 8, 9,
2298  0, 0, 0, 10, 11, 0, 0, 0, 12, 0,
2299  13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
2300  0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
2301  0, 27, 0, 0, 0, 0, 0, 28, 29, 30,
2302  31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2303  0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
2304  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2305  0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
2306  0, 49, 50, 0, 51, 52, 0, 53, 0, 0,
2307  54, 55, 56, 57, 58, 59, 60, 61, 62, -602,
2308  0, 0, 0, 0, 0, 0, 0, -602, -602, -602,
2309  0, 0, -602, -602, -602, 0, -602, 0, 63, 64,
2310  65, 0, 751, 0, 0, -602, -602, -602, -602, 0,
2311  0, -620, 0, -620, 0, 0, -602, -602, 0, -602,
2312  -602, -602, -602, -602, 0, 0, 327, 328, 329, 330,
2313  331, 332, 333, 334, 335, 336, 337, 338, 339, 0,
2314  0, 340, 341, 0, 0, 0, 0, -602, -602, -602,
2315  -602, -602, -602, -602, -602, -602, -602, -602, -602, -602,
2316  0, 0, -602, -602, -602, 0, 755, -602, 0, 0,
2317  0, 0, 342, -602, 343, 344, 345, 346, 347, 348,
2318  349, 350, 351, 352, 0, 0, 0, -602, 0, 0,
2319  -602, 0, -106, -602, -602, -602, -602, -602, -602, -602,
2320  -602, -602, -602, -602, -602, 0, 0, 0, 0, -602,
2321  -602, -602, -602, -602, -505, 0, -602, -602, -602, 0,
2322  -602, 0, -505, -505, -505, 0, 0, -505, -505, -505,
2323  0, -505, 0, 0, 0, 0, 0, 698, 0, -505,
2324  0, -505, -505, -505, 0, 0, 0, 0, 0, 0,
2325  0, -505, -505, 0, -505, -505, -505, -505, -505, 0,
2326  0, 327, 328, 329, 330, 331, 332, 333, 334, 335,
2327  336, 337, 338, 339, 0, 0, 340, 341, 0, 0,
2328  0, 0, -505, -505, -505, -505, -505, -505, -505, -505,
2329  -505, -505, -505, -505, -505, 0, 0, -505, -505, -505,
2330  0, -505, -505, 0, 0, 0, 0, 342, -505, 343,
2331  344, 345, 346, 347, 348, 349, 350, 351, 352, 0,
2332  0, 0, -505, 0, 0, -505, 0, -505, -505, -505,
2333  -505, -505, -505, -505, -505, -505, -505, -505, -505, -505,
2334  0, 0, 0, 0, 0, -505, -505, -505, -505, -508,
2335  0, -505, -505, -505, 0, -505, 0, -508, -508, -508,
2336  0, 0, -508, -508, -508, 0, -508, 0, 0, 0,
2337  0, 0, 0, 0, -508, 0, -508, -508, -508, 0,
2338  0, 0, 0, 0, 0, 0, -508, -508, 0, -508,
2339  -508, -508, -508, -508, 0, 0, 327, 328, 329, 330,
2340  331, 332, 333, 334, 335, 336, 337, 338, 339, 0,
2341  0, 340, 341, 0, 0, 0, 0, -508, -508, -508,
2342  -508, -508, -508, -508, -508, -508, -508, -508, -508, -508,
2343  0, 0, -508, -508, -508, 0, -508, -508, 0, 0,
2344  0, 0, 342, -508, 343, 344, 345, 346, 347, 348,
2345  349, 350, 351, 352, 0, 0, 0, -508, 0, 0,
2346  -508, 0, -508, -508, -508, -508, -508, -508, -508, -508,
2347  -508, -508, -508, -508, -508, 0, 0, 0, 0, 0,
2348  -508, -508, -508, -508, -603, 0, -508, -508, -508, 0,
2349  -508, 0, -603, -603, -603, 0, 0, -603, -603, -603,
2350  0, -603, 0, 0, 0, 0, 0, 0, 0, 0,
2351  -603, -603, -603, -603, 0, 0, 0, 0, 0, 0,
2352  0, -603, -603, 0, -603, -603, -603, -603, -603, 0,
2353  0, 327, 328, 329, 330, 331, 332, 333, 334, 335,
2354  336, 337, -621, -621, 0, 0, 340, 341, 0, 0,
2355  0, 0, -603, -603, -603, -603, -603, -603, -603, -603,
2356  -603, -603, -603, -603, -603, 0, 0, -603, -603, -603,
2357  0, 0, -603, 0, 0, 0, 0, 0, -603, 343,
2358  344, 345, 346, 347, 348, 349, 350, 351, 352, 0,
2359  0, 0, -603, 0, 0, -603, 0, 0, -603, -603,
2360  -603, -603, -603, -603, -603, -603, -603, -603, -603, -603,
2361  0, 0, 0, 0, -603, -603, -603, -603, -603, -604,
2362  0, -603, -603, -603, 0, -603, 0, -604, -604, -604,
2363  0, 0, -604, -604, -604, 0, -604, 0, 0, 0,
2364  0, 0, 0, 0, 0, -604, -604, -604, -604, 0,
2365  0, 0, 0, 0, 0, 0, -604, -604, 0, -604,
2366  -604, -604, -604, -604, 0, 0, 327, 328, 329, 330,
2367  331, 332, 333, 334, 0, 336, 337, 0, 0, 0,
2368  0, 340, 341, 0, 0, 0, 0, -604, -604, -604,
2369  -604, -604, -604, -604, -604, -604, -604, -604, -604, -604,
2370  0, 0, -604, -604, -604, 0, 0, -604, 0, 0,
2371  0, 0, 0, -604, 343, 344, 345, 346, 347, 348,
2372  349, 350, 351, 352, 0, 0, 0, -604, 0, 0,
2373  -604, 0, 0, -604, -604, -604, -604, -604, -604, -604,
2374  -604, -604, -604, -604, -604, 0, 0, 0, 0, -604,
2375  -604, -604, -604, -604, -294, 0, -604, -604, -604, 0,
2376  -604, 0, -294, -294, -294, 0, 0, -294, -294, -294,
2377  0, -294, 0, 0, 0, 0, 0, 0, 0, 0,
2378  0, -294, -294, -294, 0, 0, 0, 0, 0, 0,
2379  0, -294, -294, 0, -294, -294, -294, -294, -294, 0,
2380  0, 327, 328, 329, 330, 331, 332, 333, 0, 0,
2381  336, 337, 0, 0, 0, 0, 340, 341, 0, 0,
2382  0, 0, -294, -294, -294, -294, -294, -294, -294, -294,
2383  -294, -294, -294, -294, -294, 0, 0, -294, -294, -294,
2384  0, 756, -294, 0, 0, 0, 0, 0, -294, 343,
2385  344, 345, 346, 347, 348, 349, 350, 351, 352, 0,
2386  0, 0, -294, 0, 0, -294, 0, -108, -294, -294,
2387  -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
2388  0, 0, 0, 0, 0, -294, -294, -294, -294, -432,
2389  0, -294, -294, -294, 0, -294, 0, -432, -432, -432,
2390  0, 0, -432, -432, -432, 0, -432, 0, 0, 0,
2391  0, 0, 0, 0, 0, -432, -432, -432, 0, 0,
2392  0, 0, 0, 0, 0, 0, -432, -432, 0, -432,
2393  -432, -432, -432, -432, 0, 0, 0, 0, 0, 0,
2394  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2395  0, 0, 0, 0, 0, 0, 0, -432, -432, -432,
2396  -432, -432, -432, -432, -432, -432, -432, -432, -432, -432,
2397  0, 0, -432, -432, -432, 0, 0, -432, 0, 0,
2398  0, 0, 0, -432, 0, 0, 0, 0, 0, 0,
2399  0, 0, 0, 0, 0, 0, 0, -432, 0, 0,
2400  0, 0, 0, -432, 0, -432, -432, -432, -432, -432,
2401  -432, -432, -432, -432, -432, 0, 0, 0, 0, -432,
2402  -432, -432, -432, -432, -285, 227, -432, -432, -432, 0,
2403  -432, 0, -285, -285, -285, 0, 0, -285, -285, -285,
2404  0, -285, 0, 0, 0, 0, 0, 0, 0, 0,
2405  0, -285, -285, -285, 0, 0, 0, 0, 0, 0,
2406  0, -285, -285, 0, -285, -285, -285, -285, -285, 0,
2407  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2408  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2409  0, 0, -285, -285, -285, -285, -285, -285, -285, -285,
2410  -285, -285, -285, -285, -285, 0, 0, -285, -285, -285,
2411  0, 0, -285, 0, 0, 0, 0, 0, -285, 0,
2412  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2413  0, 0, -285, 0, 0, -285, 0, 0, -285, -285,
2414  -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
2415  0, 0, 0, 0, 0, -285, -285, -285, -285, -422,
2416  0, -285, -285, -285, 0, -285, 0, -422, -422, -422,
2417  0, 0, -422, -422, -422, 0, -422, 0, 0, 0,
2418  0, 0, 0, 0, 0, -422, -422, -422, 0, 0,
2419  0, 0, 0, 0, 0, 0, -422, -422, 0, -422,
2420  -422, -422, -422, -422, 0, 0, 0, 0, 0, 0,
2421  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2422  0, 0, 0, 0, 0, 0, 0, -422, -422, -422,
2423  -422, -422, -422, -422, -422, -422, -422, -422, -422, -422,
2424  0, 0, -422, -422, -422, 0, 0, -422, 0, 0,
2425  0, 0, 0, -422, 0, 0, 0, 0, 0, 0,
2426  0, 0, 0, 0, 0, 0, 0, -422, 0, 0,
2427  0, 0, 0, -422, 0, -422, -422, -422, -422, -422,
2428  -422, -422, -422, -422, -422, 0, 0, 0, 0, -422,
2429  -422, -422, -422, -422, -301, -422, -422, -422, -422, 0,
2430  -422, 0, -301, -301, -301, 0, 0, -301, -301, -301,
2431  0, -301, 0, 0, 0, 0, 0, 0, 0, 0,
2432  0, -301, -301, 0, 0, 0, 0, 0, 0, 0,
2433  0, -301, -301, 0, -301, -301, -301, -301, -301, 0,
2434  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2435  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2436  0, 0, -301, -301, -301, -301, -301, -301, -301, -301,
2437  -301, -301, -301, -301, -301, 0, 0, -301, -301, -301,
2438  0, 0, -301, 0, 0, 0, 0, 0, -301, 0,
2439  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2440  0, 0, -301, 0, 0, 0, 0, 0, -301, 0,
2441  -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
2442  0, 0, 0, 0, 0, -301, -301, -301, -301, -602,
2443  224, -301, -301, -301, 0, -301, 0, -602, -602, -602,
2444  0, 0, 0, -602, -602, 0, -602, 0, 0, 0,
2445  0, 0, 0, 0, 0, -602, 0, 0, 0, 0,
2446  0, 0, 0, 0, 0, 0, -602, -602, 0, -602,
2447  -602, -602, -602, -602, 0, 0, 0, 0, 0, 0,
2448  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2449  0, 0, 0, 0, 0, 0, 0, -602, -602, -602,
2450  -602, -602, -602, -602, -602, -602, -602, -602, -602, -602,
2451  0, 0, -602, -602, -602, 0, 700, 0, 0, 0,
2452  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2453  0, 0, 0, 0, 0, 0, 0, -602, 0, 0,
2454  0, 0, -106, -602, 0, -602, -602, -602, -602, -602,
2455  -602, -602, -602, -602, -602, 0, 0, 0, 0, -602,
2456  -602, -602, -602, -97, -294, 0, -602, 0, -602, 0,
2457  -602, 0, -294, -294, -294, 0, 0, 0, -294, -294,
2458  0, -294, 0, -620, 0, 0, 0, 0, 0, 0,
2459  0, -620, -620, -620, 0, 0, -620, -620, -620, 0,
2460  -620, -294, -294, 0, -294, -294, -294, -294, -294, -620,
2461  -620, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2462  -620, -620, 0, -620, -620, -620, -620, -620, 0, 0,
2463  0, 0, -294, -294, -294, -294, -294, -294, -294, -294,
2464  -294, -294, -294, -294, -294, 0, 0, -294, -294, -294,
2465  0, 701, 0, 0, 0, 0, 0, 0, 0, 0,
2466  0, 0, 0, 0, 0, 0, 0, 0, -620, 0,
2467  0, 0, -294, 0, 0, 0, 0, -108, -294, 0,
2468  -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
2469  0, -620, 0, 0, 0, -294, -294, -294, -99, 0,
2470  0, -294, 0, -294, 0, -294, 0, 0, 0, 0,
2471  0, 0, 0, -620, -620, 0, -620, 0, 0, 227,
2472  -620, 0, -620, 248, -620, 5, 6, 7, 8, 9,
2473  -620, -620, -620, 10, 11, 0, 0, -620, 12, 0,
2474  13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
2475  0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
2476  0, 27, 0, 0, 0, 0, 0, 28, 29, 249,
2477  31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2478  0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
2479  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2480  0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
2481  0, 49, 50, 0, 51, 52, 0, 53, 0, 0,
2482  54, 55, 56, 57, 58, 59, 60, 61, 62, 0,
2483  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2484  0, 0, 0, 0, 0, 0, 0, 0, 63, 64,
2485  65, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2486  0, -620, 248, -620, 5, 6, 7, 8, 9, 0,
2487  0, -620, 10, 11, 0, -620, -620, 12, 0, 13,
2488  14, 15, 16, 17, 18, 19, 0, 0, 0, 0,
2489  0, 20, 21, 22, 23, 24, 25, 26, 0, 0,
2490  27, 0, 0, 0, 0, 0, 28, 29, 249, 31,
2491  32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
2492  41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
2493  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2494  0, 0, 0, 0, 0, 0, 0, 48, 0, 0,
2495  49, 50, 0, 51, 52, 0, 53, 0, 0, 54,
2496  55, 56, 57, 58, 59, 60, 61, 62, 0, 0,
2497  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2498  0, 0, 0, 0, 0, 0, 0, 63, 64, 65,
2499  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2500  -620, 248, -620, 5, 6, 7, 8, 9, 0, 0,
2501  -620, 10, 11, 0, 0, -620, 12, -620, 13, 14,
2502  15, 16, 17, 18, 19, 0, 0, 0, 0, 0,
2503  20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
2504  0, 0, 0, 0, 0, 28, 29, 249, 31, 32,
2505  33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
2506  42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
2507  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2508  0, 0, 0, 0, 0, 0, 48, 0, 0, 49,
2509  50, 0, 51, 52, 0, 53, 0, 0, 54, 55,
2510  56, 57, 58, 59, 60, 61, 62, 0, 0, 0,
2511  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2512  0, 0, 0, 0, 0, 0, 63, 64, 65, 0,
2513  0, 0, 0, 0, 0, 0, 0, 0, 0, -620,
2514  248, -620, 5, 6, 7, 8, 9, 0, 0, -620,
2515  10, 11, 0, 0, -620, 12, 0, 13, 14, 15,
2516  16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
2517  21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
2518  0, 0, 0, 0, 28, 29, 249, 31, 32, 33,
2519  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2520  0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
2521  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2522  0, 0, 0, 0, 0, 48, 0, 0, 49, 50,
2523  0, 51, 52, 0, 53, 0, 0, 54, 55, 56,
2524  57, 58, 59, 60, 61, 62, 0, 0, 0, 0,
2525  0, 0, 0, 248, 0, 5, 6, 7, 8, 9,
2526  0, -620, -620, 10, 11, 63, 64, 65, 12, 0,
2527  13, 14, 15, 16, 17, 18, 19, 0, -620, 0,
2528  -620, 0, 20, 21, 22, 23, 24, 25, 26, 0,
2529  0, 27, 0, 0, 0, 0, 0, 28, 29, 249,
2530  31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2531  0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
2532  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2533  0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
2534  0, 49, 50, 0, 51, 52, 0, 53, 0, 0,
2535  54, 55, 56, 57, 58, 59, 60, 61, 62, 0,
2536  0, 0, 0, 0, 0, 0, 248, 0, 5, 6,
2537  7, 8, 9, 0, 0, 0, 10, 11, 63, 64,
2538  65, 12, 0, 13, 14, 15, 16, 17, 18, 19,
2539  0, -620, 0, -620, 0, 20, 21, 22, 23, 24,
2540  25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
2541  28, 29, 249, 31, 32, 33, 34, 35, 36, 37,
2542  38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
2543  0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
2544  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2545  0, 48, 0, 0, 250, 50, 0, 51, 52, 0,
2546  53, 0, 0, 54, 55, 56, 57, 58, 59, 60,
2547  61, 62, 0, 0, 0, 0, 0, 0, 0, 0,
2548  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2549  0, 63, 64, 65, 0, 0, 0, 0, 0, 0,
2550  0, 0, -620, 0, -620, 248, -620, 5, 6, 7,
2551  8, 9, 0, 0, 0, 10, 11, 0, 0, 0,
2552  12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
2553  0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
2554  26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
2555  29, 249, 31, 32, 33, 34, 35, 36, 37, 38,
2556  39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
2557  46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
2558  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2559  48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
2560  0, 0, 54, 55, 56, 57, 58, 59, 60, 61,
2561  62, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2562  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2563  63, 64, 65, 0, 0, 0, 0, 0, 0, 0,
2564  0, -620, 0, -620, 248, -620, 5, 6, 7, 8,
2565  9, 0, 0, 0, 10, 11, 0, 0, 0, 12,
2566  0, 13, 14, 15, 16, 17, 18, 19, 0, 0,
2567  0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
2568  0, 0, 27, 0, 0, 0, 0, 0, 28, 29,
2569  249, 31, 32, 33, 34, 35, 36, 37, 38, 39,
2570  40, 0, 41, 42, 0, 43, 44, 45, 0, 46,
2571  47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2572  0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
2573  0, 0, 49, 50, 0, 51, 52, 0, 53, 0,
2574  0, 54, 55, 56, 57, 58, 59, 60, 61, 62,
2575  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2576  0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
2577  64, 65, 0, 0, -620, 4, 0, 5, 6, 7,
2578  8, 9, -620, 0, -620, 10, 11, 0, 0, 0,
2579  12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
2580  0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
2581  26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
2582  29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
2583  39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
2584  46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
2585  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2586  48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
2587  0, 0, 54, 55, 56, 57, 58, 59, 60, 61,
2588  62, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2589  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2590  63, 64, 65, 0, 0, -620, 0, 0, 0, 0,
2591  0, 0, 0, -620, 248, -620, 5, 6, 7, 8,
2592  9, 0, 0, -620, 10, 11, 0, 0, 0, 12,
2593  0, 13, 14, 15, 16, 17, 18, 19, 0, 0,
2594  0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
2595  0, 0, 27, 0, 0, 0, 0, 0, 28, 29,
2596  249, 31, 32, 33, 34, 35, 36, 37, 38, 39,
2597  40, 0, 41, 42, 0, 43, 44, 45, 0, 46,
2598  47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2599  0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
2600  0, 0, 49, 50, 0, 51, 52, 0, 53, 0,
2601  0, 54, 55, 56, 57, 58, 59, 60, 61, 62,
2602  0, 0, 0, 0, 0, 0, 0, 248, 0, 5,
2603  6, 7, 8, 9, 0, 0, 0, 10, 11, 63,
2604  64, 65, 12, 0, 13, 14, 15, 16, 17, 18,
2605  19, 0, -620, 0, -620, 0, 20, 21, 22, 23,
2606  24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
2607  0, 28, 29, 249, 31, 32, 33, 34, 35, 36,
2608  37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
2609  45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
2610  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2611  0, 0, 48, 0, 0, 49, 50, 0, 51, 52,
2612  0, 53, 0, 0, 54, 55, 56, 57, 58, 59,
2613  60, 61, 62, 0, -620, 0, 0, 0, 0, 0,
2614  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2615  10, 11, 63, 64, 65, 12, 0, 13, 14, 15,
2616  16, 17, 18, 19, 0, -620, 0, -620, 0, 20,
2617  21, 22, 23, 24, 25, 26, 0, 0, 200, 0,
2618  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
2619  34, 35, 36, 37, 38, 39, 40, 201, 41, 42,
2620  0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
2621  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2622  0, 0, 0, 0, 0, 202, 0, 0, 203, 50,
2623  0, 51, 52, 0, 204, 205, 206, 54, 55, 56,
2624  57, 58, 59, 60, 61, 62, 0, 0, 0, 0,
2625  0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
2626  0, 0, 0, 10, 11, 63, 207, 65, 12, 0,
2627  13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
2628  231, 0, 20, 21, 22, 23, 24, 25, 26, 0,
2629  0, 27, 0, 0, 0, 0, 0, 0, 29, 0,
2630  0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2631  0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
2632  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2633  0, 0, 0, 0, 0, 0, 0, 0, 202, 0,
2634  0, 203, 50, 0, 51, 52, 0, 0, 0, 0,
2635  54, 55, 56, 57, 58, 59, 60, 61, 62, 0,
2636  0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
2637  7, 0, 9, 0, 0, 0, 10, 11, 63, 64,
2638  65, 12, 0, 13, 14, 15, 16, 17, 18, 19,
2639  0, 302, 0, 303, 0, 20, 21, 22, 23, 24,
2640  25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
2641  0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
2642  38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
2643  0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
2644  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2645  0, 202, 0, 0, 203, 50, 0, 51, 52, 0,
2646  0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
2647  61, 62, 0, 0, 0, 0, 0, 0, 0, 0,
2648  0, 5, 6, 7, 8, 9, 0, 0, 0, 10,
2649  11, 63, 64, 65, 12, 0, 13, 14, 15, 16,
2650  17, 18, 19, 0, 0, 0, 231, 0, 20, 21,
2651  22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
2652  0, 0, 0, 28, 29, 30, 31, 32, 33, 34,
2653  35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
2654  43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
2655  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2656  0, 0, 0, 0, 48, 0, 0, 49, 50, 0,
2657  51, 52, 0, 53, 0, 0, 54, 55, 56, 57,
2658  58, 59, 60, 61, 62, 0, 0, 0, 0, 0,
2659  0, 0, 0, 0, 5, 6, 7, 8, 9, 0,
2660  0, 0, 10, 11, 63, 64, 65, 12, 0, 13,
2661  14, 15, 16, 17, 18, 19, 0, 498, 0, 0,
2662  0, 20, 21, 22, 23, 24, 25, 26, 0, 0,
2663  27, 0, 0, 0, 0, 0, 28, 29, 249, 31,
2664  32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
2665  41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
2666  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2667  0, 0, 0, 0, 0, 0, 0, 48, 0, 0,
2668  49, 50, 0, 51, 52, 0, 53, 0, 0, 54,
2669  55, 56, 57, 58, 59, 60, 61, 62, 0, 0,
2670  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2671  0, 0, 0, 0, 0, 0, 0, 63, 64, 65,
2672  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2673  498, 118, 119, 120, 121, 122, 123, 124, 125, 126,
2674  127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
2675  137, 138, 139, 140, 141, 0, 0, 0, 142, 143,
2676  144, 384, 385, 386, 387, 149, 150, 151, 0, 0,
2677  0, 0, 0, 152, 153, 154, 155, 388, 389, 390,
2678  391, 160, 37, 38, 392, 40, 0, 0, 0, 0,
2679  0, 0, 0, 0, 162, 163, 164, 165, 166, 167,
2680  168, 169, 170, 0, 0, 171, 172, 0, 0, 173,
2681  174, 175, 176, 0, 0, 0, 0, 0, 0, 0,
2682  0, 0, 0, 177, 178, 0, 0, 0, 0, 0,
2683  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2684  0, 0, 0, 0, 179, 180, 181, 182, 183, 184,
2685  185, 186, 187, 188, 0, 189, 190, 0, 0, 0,
2686  0, 0, 0, 191, 393, 118, 119, 120, 121, 122,
2687  123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
2688  133, 134, 135, 136, 137, 138, 139, 140, 141, 0,
2689  0, 0, 142, 143, 144, 145, 146, 147, 148, 149,
2690  150, 151, 0, 0, 0, 0, 0, 152, 153, 154,
2691  155, 156, 157, 158, 159, 160, 280, 281, 161, 282,
2692  0, 0, 0, 0, 0, 0, 0, 0, 162, 163,
2693  164, 165, 166, 167, 168, 169, 170, 0, 0, 171,
2694  172, 0, 0, 173, 174, 175, 176, 0, 0, 0,
2695  0, 0, 0, 0, 0, 0, 0, 177, 178, 0,
2696  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2697  0, 0, 0, 0, 0, 0, 0, 0, 179, 180,
2698  181, 182, 183, 184, 185, 186, 187, 188, 0, 189,
2699  190, 0, 0, 0, 0, 0, 0, 191, 118, 119,
2700  120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
2701  130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
2702  140, 141, 0, 0, 0, 142, 143, 144, 145, 146,
2703  147, 148, 149, 150, 151, 0, 0, 0, 0, 0,
2704  152, 153, 154, 155, 156, 157, 158, 159, 160, 233,
2705  0, 161, 0, 0, 0, 0, 0, 0, 0, 0,
2706  0, 162, 163, 164, 165, 166, 167, 168, 169, 170,
2707  0, 0, 171, 172, 0, 0, 173, 174, 175, 176,
2708  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2709  177, 178, 0, 0, 55, 0, 0, 0, 0, 0,
2710  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2711  0, 179, 180, 181, 182, 183, 184, 185, 186, 187,
2712  188, 0, 189, 190, 0, 0, 0, 0, 0, 0,
2713  191, 118, 119, 120, 121, 122, 123, 124, 125, 126,
2714  127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
2715  137, 138, 139, 140, 141, 0, 0, 0, 142, 143,
2716  144, 145, 146, 147, 148, 149, 150, 151, 0, 0,
2717  0, 0, 0, 152, 153, 154, 155, 156, 157, 158,
2718  159, 160, 0, 0, 161, 0, 0, 0, 0, 0,
2719  0, 0, 0, 0, 162, 163, 164, 165, 166, 167,
2720  168, 169, 170, 0, 0, 171, 172, 0, 0, 173,
2721  174, 175, 176, 0, 0, 0, 0, 0, 0, 0,
2722  0, 0, 0, 177, 178, 0, 0, 55, 0, 0,
2723  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2724  0, 0, 0, 0, 179, 180, 181, 182, 183, 184,
2725  185, 186, 187, 188, 0, 189, 190, 0, 0, 0,
2726  0, 0, 0, 191, 118, 119, 120, 121, 122, 123,
2727  124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
2728  134, 135, 136, 137, 138, 139, 140, 141, 0, 0,
2729  0, 142, 143, 144, 145, 146, 147, 148, 149, 150,
2730  151, 0, 0, 0, 0, 0, 152, 153, 154, 155,
2731  156, 157, 158, 159, 160, 0, 0, 161, 0, 0,
2732  0, 0, 0, 0, 0, 0, 0, 162, 163, 164,
2733  165, 166, 167, 168, 169, 170, 0, 0, 171, 172,
2734  0, 0, 173, 174, 175, 176, 0, 0, 0, 0,
2735  0, 0, 0, 0, 0, 0, 177, 178, 0, 0,
2736  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2737  0, 0, 0, 0, 0, 0, 0, 179, 180, 181,
2738  182, 183, 184, 185, 186, 187, 188, 0, 189, 190,
2739  5, 6, 7, 0, 9, 0, 191, 0, 10, 11,
2740  0, 0, 0, 12, 0, 13, 14, 15, 238, 239,
2741  18, 19, 0, 0, 0, 0, 0, 240, 241, 242,
2742  23, 24, 25, 26, 0, 0, 200, 0, 0, 0,
2743  0, 0, 0, 268, 0, 0, 32, 33, 34, 35,
2744  36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
2745  44, 45, 0, 0, 0, 0, 0, 0, 0, 0,
2746  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2747  0, 0, 0, 269, 0, 0, 203, 50, 0, 51,
2748  52, 0, 0, 0, 0, 54, 55, 56, 57, 58,
2749  59, 60, 61, 62, 0, 0, 0, 0, 0, 5,
2750  6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
2751  0, 0, 12, 270, 13, 14, 15, 238, 239, 18,
2752  19, 271, 0, 0, 0, 0, 240, 241, 242, 23,
2753  24, 25, 26, 0, 0, 200, 0, 0, 0, 0,
2754  0, 0, 268, 0, 0, 32, 33, 34, 35, 36,
2755  37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
2756  45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2757  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2758  0, 0, 269, 0, 0, 203, 50, 0, 51, 52,
2759  0, 0, 0, 0, 54, 55, 56, 57, 58, 59,
2760  60, 61, 62, 0, 0, 0, 0, 0, 5, 6,
2761  7, 8, 9, 0, 0, 0, 10, 11, 0, 0,
2762  0, 12, 270, 13, 14, 15, 16, 17, 18, 19,
2763  518, 0, 0, 0, 0, 20, 21, 22, 23, 24,
2764  25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
2765  28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
2766  38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
2767  0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
2768  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2769  0, 48, 0, 0, 49, 50, 0, 51, 52, 0,
2770  53, 0, 0, 54, 55, 56, 57, 58, 59, 60,
2771  61, 62, 0, 0, 0, 0, 0, 0, 0, 0,
2772  0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
2773  11, 63, 64, 65, 12, 0, 13, 14, 15, 16,
2774  17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
2775  22, 23, 24, 25, 26, 0, 0, 200, 0, 0,
2776  0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
2777  35, 36, 37, 38, 39, 40, 201, 41, 42, 0,
2778  43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
2779  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2780  0, 0, 0, 0, 202, 0, 0, 203, 50, 0,
2781  51, 52, 0, 204, 205, 206, 54, 55, 56, 57,
2782  58, 59, 60, 61, 62, 0, 0, 0, 0, 0,
2783  0, 0, 0, 0, 5, 6, 7, 8, 9, 0,
2784  0, 0, 10, 11, 63, 207, 65, 12, 0, 13,
2785  14, 15, 16, 17, 18, 19, 0, 0, 0, 0,
2786  0, 20, 21, 22, 23, 24, 25, 26, 0, 0,
2787  27, 0, 0, 0, 0, 0, 28, 29, 0, 31,
2788  32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
2789  41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
2790  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2791  0, 0, 0, 0, 0, 0, 0, 48, 0, 0,
2792  49, 50, 0, 51, 52, 0, 53, 0, 0, 54,
2793  55, 56, 57, 58, 59, 60, 61, 62, 0, 0,
2794  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
2795  0, 9, 0, 0, 0, 10, 11, 63, 64, 65,
2796  12, 0, 13, 14, 15, 238, 239, 18, 19, 0,
2797  0, 0, 0, 0, 240, 241, 242, 23, 24, 25,
2798  26, 0, 0, 200, 0, 0, 0, 0, 0, 0,
2799  29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
2800  39, 40, 201, 41, 42, 0, 43, 44, 45, 0,
2801  46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
2802  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2803  202, 0, 0, 203, 50, 0, 51, 52, 0, 608,
2804  205, 206, 54, 55, 56, 57, 58, 59, 60, 61,
2805  62, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2806  5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
2807  63, 207, 65, 12, 0, 13, 14, 15, 238, 239,
2808  18, 19, 0, 0, 0, 0, 0, 240, 241, 242,
2809  23, 24, 25, 26, 0, 0, 200, 0, 0, 0,
2810  0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
2811  36, 37, 38, 39, 40, 201, 41, 42, 0, 43,
2812  44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
2813  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2814  0, 0, 0, 202, 0, 0, 203, 50, 0, 51,
2815  52, 0, 204, 205, 0, 54, 55, 56, 57, 58,
2816  59, 60, 61, 62, 0, 0, 0, 0, 0, 0,
2817  0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
2818  0, 10, 11, 63, 207, 65, 12, 0, 13, 14,
2819  15, 238, 239, 18, 19, 0, 0, 0, 0, 0,
2820  240, 241, 242, 23, 24, 25, 26, 0, 0, 200,
2821  0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
2822  33, 34, 35, 36, 37, 38, 39, 40, 201, 41,
2823  42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
2824  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2825  0, 0, 0, 0, 0, 0, 202, 0, 0, 203,
2826  50, 0, 51, 52, 0, 0, 205, 206, 54, 55,
2827  56, 57, 58, 59, 60, 61, 62, 0, 0, 0,
2828  0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
2829  9, 0, 0, 0, 10, 11, 63, 207, 65, 12,
2830  0, 13, 14, 15, 238, 239, 18, 19, 0, 0,
2831  0, 0, 0, 240, 241, 242, 23, 24, 25, 26,
2832  0, 0, 200, 0, 0, 0, 0, 0, 0, 29,
2833  0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
2834  40, 201, 41, 42, 0, 43, 44, 45, 0, 46,
2835  47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2836  0, 0, 0, 0, 0, 0, 0, 0, 0, 202,
2837  0, 0, 203, 50, 0, 51, 52, 0, 608, 205,
2838  0, 54, 55, 56, 57, 58, 59, 60, 61, 62,
2839  0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
2840  6, 7, 0, 9, 0, 0, 0, 10, 11, 63,
2841  207, 65, 12, 0, 13, 14, 15, 238, 239, 18,
2842  19, 0, 0, 0, 0, 0, 240, 241, 242, 23,
2843  24, 25, 26, 0, 0, 200, 0, 0, 0, 0,
2844  0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
2845  37, 38, 39, 40, 201, 41, 42, 0, 43, 44,
2846  45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
2847  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2848  0, 0, 202, 0, 0, 203, 50, 0, 51, 52,
2849  0, 0, 205, 0, 54, 55, 56, 57, 58, 59,
2850  60, 61, 62, 0, 0, 0, 0, 0, 0, 0,
2851  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2852  10, 11, 63, 207, 65, 12, 0, 13, 14, 15,
2853  16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
2854  21, 22, 23, 24, 25, 26, 0, 0, 200, 0,
2855  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
2856  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2857  0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
2858  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2859  0, 0, 0, 0, 0, 202, 0, 0, 203, 50,
2860  0, 51, 52, 0, 512, 0, 0, 54, 55, 56,
2861  57, 58, 59, 60, 61, 62, 0, 0, 0, 0,
2862  0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
2863  0, 0, 0, 10, 11, 63, 207, 65, 12, 0,
2864  13, 14, 15, 238, 239, 18, 19, 0, 0, 0,
2865  0, 0, 240, 241, 242, 23, 24, 25, 26, 0,
2866  0, 200, 0, 0, 0, 0, 0, 0, 29, 0,
2867  0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2868  0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
2869  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2870  0, 0, 0, 0, 0, 0, 0, 0, 202, 0,
2871  0, 203, 50, 0, 51, 52, 0, 204, 0, 0,
2872  54, 55, 56, 57, 58, 59, 60, 61, 62, 0,
2873  0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
2874  7, 0, 9, 0, 0, 0, 10, 11, 63, 207,
2875  65, 12, 0, 13, 14, 15, 238, 239, 18, 19,
2876  0, 0, 0, 0, 0, 240, 241, 242, 23, 24,
2877  25, 26, 0, 0, 200, 0, 0, 0, 0, 0,
2878  0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
2879  38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
2880  0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
2881  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2882  0, 202, 0, 0, 203, 50, 0, 51, 52, 0,
2883  817, 0, 0, 54, 55, 56, 57, 58, 59, 60,
2884  61, 62, 0, 0, 0, 0, 0, 0, 0, 0,
2885  0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
2886  11, 63, 207, 65, 12, 0, 13, 14, 15, 238,
2887  239, 18, 19, 0, 0, 0, 0, 0, 240, 241,
2888  242, 23, 24, 25, 26, 0, 0, 200, 0, 0,
2889  0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
2890  35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
2891  43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
2892  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2893  0, 0, 0, 0, 202, 0, 0, 203, 50, 0,
2894  51, 52, 0, 512, 0, 0, 54, 55, 56, 57,
2895  58, 59, 60, 61, 62, 0, 0, 0, 0, 0,
2896  0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
2897  0, 0, 10, 11, 63, 207, 65, 12, 0, 13,
2898  14, 15, 238, 239, 18, 19, 0, 0, 0, 0,
2899  0, 240, 241, 242, 23, 24, 25, 26, 0, 0,
2900  200, 0, 0, 0, 0, 0, 0, 29, 0, 0,
2901  32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
2902  41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
2903  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2904  0, 0, 0, 0, 0, 0, 0, 202, 0, 0,
2905  203, 50, 0, 51, 52, 0, 608, 0, 0, 54,
2906  55, 56, 57, 58, 59, 60, 61, 62, 0, 0,
2907  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
2908  0, 9, 0, 0, 0, 10, 11, 63, 207, 65,
2909  12, 0, 13, 14, 15, 238, 239, 18, 19, 0,
2910  0, 0, 0, 0, 240, 241, 242, 23, 24, 25,
2911  26, 0, 0, 200, 0, 0, 0, 0, 0, 0,
2912  29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
2913  39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
2914  46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
2915  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2916  202, 0, 0, 203, 50, 0, 51, 52, 0, 0,
2917  0, 0, 54, 55, 56, 57, 58, 59, 60, 61,
2918  62, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2919  5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
2920  63, 207, 65, 12, 0, 13, 14, 15, 16, 17,
2921  18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
2922  23, 24, 25, 26, 0, 0, 200, 0, 0, 0,
2923  0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
2924  36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
2925  44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
2926  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2927  0, 0, 0, 202, 0, 0, 203, 50, 0, 51,
2928  52, 0, 0, 0, 0, 54, 55, 56, 57, 58,
2929  59, 60, 61, 62, 0, 0, 0, 0, 0, 0,
2930  0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
2931  0, 10, 11, 63, 207, 65, 12, 0, 13, 14,
2932  15, 16, 17, 18, 19, 0, 0, 0, 0, 0,
2933  20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
2934  0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
2935  33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
2936  42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
2937  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2938  0, 0, 0, 0, 0, 0, 202, 0, 0, 203,
2939  50, 0, 51, 52, 0, 0, 0, 0, 54, 55,
2940  56, 57, 58, 59, 60, 61, 62, 0, 0, 0,
2941  0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
2942  9, 0, 0, 0, 10, 11, 63, 64, 65, 12,
2943  0, 13, 14, 15, 238, 239, 18, 19, 0, 0,
2944  0, 0, 0, 240, 241, 242, 23, 24, 25, 26,
2945  0, 0, 200, 0, 0, 0, 0, 0, 0, 268,
2946  0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
2947  40, 0, 41, 42, 0, 43, 44, 45, 0, 0,
2948  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2949  0, 0, 0, 0, 0, 0, 0, 0, 0, 269,
2950  0, 0, 323, 50, 0, 51, 52, 0, 324, 0,
2951  0, 54, 55, 56, 57, 58, 59, 60, 61, 62,
2952  0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
2953  0, 0, 0, 10, 11, 0, 0, 0, 12, 270,
2954  13, 14, 15, 238, 239, 18, 19, 0, 0, 0,
2955  0, 0, 240, 241, 242, 23, 24, 25, 26, 0,
2956  0, 200, 0, 0, 0, 0, 0, 0, 268, 0,
2957  0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2958  0, 41, 42, 0, 43, 44, 45, 0, 0, 0,
2959  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2960  0, 0, 0, 0, 0, 0, 0, 0, 365, 0,
2961  0, 49, 50, 0, 51, 52, 0, 53, 0, 0,
2962  54, 55, 56, 57, 58, 59, 60, 61, 62, 0,
2963  0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
2964  0, 0, 10, 11, 0, 0, 0, 12, 270, 13,
2965  14, 15, 238, 239, 18, 19, 0, 0, 0, 0,
2966  0, 240, 241, 242, 23, 24, 25, 26, 0, 0,
2967  200, 0, 0, 0, 0, 0, 0, 268, 0, 0,
2968  32, 33, 34, 373, 36, 37, 38, 374, 40, 0,
2969  41, 42, 0, 43, 44, 45, 0, 0, 0, 0,
2970  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2971  0, 0, 0, 0, 375, 0, 0, 376, 0, 0,
2972  203, 50, 0, 51, 52, 0, 0, 0, 0, 54,
2973  55, 56, 57, 58, 59, 60, 61, 62, 0, 0,
2974  0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
2975  0, 10, 11, 0, 0, 0, 12, 270, 13, 14,
2976  15, 238, 239, 18, 19, 0, 0, 0, 0, 0,
2977  240, 241, 242, 23, 24, 25, 26, 0, 0, 200,
2978  0, 0, 0, 0, 0, 0, 268, 0, 0, 32,
2979  33, 34, 373, 36, 37, 38, 374, 40, 0, 41,
2980  42, 0, 43, 44, 45, 0, 0, 0, 0, 0,
2981  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2982  0, 0, 0, 0, 0, 0, 376, 0, 0, 203,
2983  50, 0, 51, 52, 0, 0, 0, 0, 54, 55,
2984  56, 57, 58, 59, 60, 61, 62, 0, 0, 0,
2985  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2986  10, 11, 0, 0, 0, 12, 270, 13, 14, 15,
2987  238, 239, 18, 19, 0, 0, 0, 0, 0, 240,
2988  241, 242, 23, 24, 25, 26, 0, 0, 200, 0,
2989  0, 0, 0, 0, 0, 268, 0, 0, 32, 33,
2990  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2991  0, 43, 44, 45, 0, 0, 0, 0, 0, 0,
2992  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2993  0, 0, 0, 0, 0, 269, 0, 0, 323, 50,
2994  0, 51, 52, 0, 0, 0, 0, 54, 55, 56,
2995  57, 58, 59, 60, 61, 62, 0, 0, 0, 0,
2996  0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
2997  11, 0, 0, 0, 12, 270, 13, 14, 15, 238,
2998  239, 18, 19, 0, 0, 0, 0, 0, 240, 241,
2999  242, 23, 24, 25, 26, 0, 0, 200, 0, 0,
3000  0, 0, 0, 0, 268, 0, 0, 32, 33, 34,
3001  35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
3002  43, 44, 45, 0, 0, 0, 0, 0, 0, 0,
3003  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3004  0, 0, 0, 0, 894, 0, 0, 203, 50, 0,
3005  51, 52, 0, 0, 0, 0, 54, 55, 56, 57,
3006  58, 59, 60, 61, 62, 0, 0, 0, 0, 0,
3007  5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
3008  0, 0, 0, 12, 270, 13, 14, 15, 238, 239,
3009  18, 19, 0, 0, 0, 0, 0, 240, 241, 242,
3010  23, 24, 25, 26, 0, 0, 200, 0, 0, 0,
3011  0, 0, 0, 268, 0, 0, 32, 33, 34, 35,
3012  36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
3013  44, 45, 0, 0, 0, 0, 0, 0, 0, 0,
3014  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3015  0, 0, 0, 974, 0, 0, 203, 50, 0, 51,
3016  52, 0, 0, 0, 0, 54, 55, 56, 57, 58,
3017  59, 60, 61, 62, 0, 0, 0, 0, 0, 0,
3018  561, 562, 0, 0, 563, 0, 0, 0, 0, 0,
3019  0, 0, 0, 270, 162, 163, 164, 165, 166, 167,
3020  168, 169, 170, 0, 0, 171, 172, 0, 0, 173,
3021  174, 175, 176, 0, 0, 0, 0, 0, 0, 0,
3022  0, 0, 0, 177, 178, 0, 0, 0, 0, 0,
3023  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3024  0, 0, 0, 0, 179, 180, 181, 182, 183, 184,
3025  185, 186, 187, 188, 0, 189, 190, 598, 562, 0,
3026  0, 599, 0, 191, 0, 0, 0, 0, 0, 0,
3027  0, 162, 163, 164, 165, 166, 167, 168, 169, 170,
3028  0, 0, 171, 172, 0, 0, 173, 174, 175, 176,
3029  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3030  177, 178, 0, 0, 0, 0, 0, 0, 0, 0,
3031  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3032  0, 179, 180, 181, 182, 183, 184, 185, 186, 187,
3033  188, 0, 189, 190, 612, 554, 0, 0, 613, 0,
3034  191, 0, 0, 0, 0, 0, 0, 0, 162, 163,
3035  164, 165, 166, 167, 168, 169, 170, 0, 0, 171,
3036  172, 0, 0, 173, 174, 175, 176, 0, 0, 0,
3037  0, 0, 0, 0, 0, 0, 0, 177, 178, 0,
3038  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3039  0, 0, 0, 0, 0, 0, 0, 0, 179, 180,
3040  181, 182, 183, 184, 185, 186, 187, 188, 0, 189,
3041  190, 615, 562, 0, 0, 616, 0, 191, 0, 0,
3042  0, 0, 0, 0, 0, 162, 163, 164, 165, 166,
3043  167, 168, 169, 170, 0, 0, 171, 172, 0, 0,
3044  173, 174, 175, 176, 0, 0, 0, 0, 0, 0,
3045  0, 0, 0, 0, 177, 178, 0, 0, 0, 0,
3046  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3047  0, 0, 0, 0, 0, 179, 180, 181, 182, 183,
3048  184, 185, 186, 187, 188, 0, 189, 190, 639, 554,
3049  0, 0, 640, 0, 191, 0, 0, 0, 0, 0,
3050  0, 0, 162, 163, 164, 165, 166, 167, 168, 169,
3051  170, 0, 0, 171, 172, 0, 0, 173, 174, 175,
3052  176, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3053  0, 177, 178, 0, 0, 0, 0, 0, 0, 0,
3054  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3055  0, 0, 179, 180, 181, 182, 183, 184, 185, 186,
3056  187, 188, 0, 189, 190, 642, 562, 0, 0, 643,
3057  0, 191, 0, 0, 0, 0, 0, 0, 0, 162,
3058  163, 164, 165, 166, 167, 168, 169, 170, 0, 0,
3059  171, 172, 0, 0, 173, 174, 175, 176, 0, 0,
3060  0, 0, 0, 0, 0, 0, 0, 0, 177, 178,
3061  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3062  0, 0, 0, 0, 0, 0, 0, 0, 0, 179,
3063  180, 181, 182, 183, 184, 185, 186, 187, 188, 0,
3064  189, 190, 727, 554, 0, 0, 728, 0, 191, 0,
3065  0, 0, 0, 0, 0, 0, 162, 163, 164, 165,
3066  166, 167, 168, 169, 170, 0, 0, 171, 172, 0,
3067  0, 173, 174, 175, 176, 0, 0, 0, 0, 0,
3068  0, 0, 0, 0, 0, 177, 178, 0, 0, 0,
3069  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3070  0, 0, 0, 0, 0, 0, 179, 180, 181, 182,
3071  183, 184, 185, 186, 187, 188, 0, 189, 190, 730,
3072  562, 0, 0, 731, 0, 191, 0, 0, 0, 0,
3073  0, 0, 0, 162, 163, 164, 165, 166, 167, 168,
3074  169, 170, 0, 0, 171, 172, 0, 0, 173, 174,
3075  175, 176, 0, 0, 0, 0, 0, 0, 0, 0,
3076  0, 0, 177, 178, 0, 0, 0, 0, 0, 0,
3077  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3078  0, 0, 0, 179, 180, 181, 182, 183, 184, 185,
3079  186, 187, 188, 0, 189, 190, 737, 554, 0, 0,
3080  738, 0, 191, 0, 0, 0, 0, 0, 0, 0,
3081  162, 163, 164, 165, 166, 167, 168, 169, 170, 0,
3082  0, 171, 172, 0, 0, 173, 174, 175, 176, 0,
3083  0, 0, 0, 0, 0, 0, 0, 0, 0, 177,
3084  178, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3085  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3086  179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
3087  0, 189, 190, 1002, 554, 0, 0, 1003, 0, 191,
3088  0, 0, 0, 0, 0, 0, 0, 162, 163, 164,
3089  165, 166, 167, 168, 169, 170, 0, 0, 171, 172,
3090  0, 0, 173, 174, 175, 176, 0, 0, 0, 0,
3091  0, 0, 0, 0, 0, 0, 177, 178, 0, 0,
3092  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3093  0, 0, 0, 0, 0, 0, 0, 179, 180, 181,
3094  182, 183, 184, 185, 186, 187, 188, 0, 189, 190,
3095  1037, 554, 0, 0, 1038, 0, 191, 0, 0, 0,
3096  0, 0, 0, 0, 162, 163, 164, 165, 166, 167,
3097  168, 169, 170, 0, 0, 171, 172, 0, 0, 173,
3098  174, 175, 176, 0, 0, 0, 0, 0, 0, 0,
3099  0, 0, 0, 177, 178, 0, 0, 0, 0, 0,
3100  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3101  0, 0, 0, 0, 179, 180, 181, 182, 183, 184,
3102  185, 186, 187, 188, 0, 189, 190, 1040, 562, 0,
3103  0, 1041, 0, 191, 0, 0, 0, 0, 0, 0,
3104  0, 162, 163, 164, 165, 166, 167, 168, 169, 170,
3105  0, 0, 171, 172, 0, 0, 173, 174, 175, 176,
3106  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3107  177, 178, 0, 0, 0, 0, 0, 0, 0, 0,
3108  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3109  0, 179, 180, 181, 182, 183, 184, 185, 186, 187,
3110  188, 0, 189, 190, 0, 0, 0, 0, 0, 0,
3111  191
3112 };
3113 
3114 #define yypact_value_is_default(yystate) \
3115  ((yystate) == (-808))
3116 
3117 #define yytable_value_is_error(yytable_value) \
3118  ((yytable_value) == (-621))
3119 
3120 static const yytype_int16 yycheck[] =
3121 {
3122  2, 87, 55, 96, 90, 353, 79, 355, 472, 16,
3123  17, 22, 359, 20, 354, 326, 614, 2, 8, 4,
3124  16, 17, 8, 28, 20, 326, 412, 27, 49, 29,
3125  74, 4, 220, 53, 420, 86, 87, 420, 28, 90,
3126  575, 94, 28, 641, 594, 49, 668, 685, 574, 51,
3127  52, 399, 468, 67, 262, 51, 779, 472, 266, 79,
3128  53, 376, 508, 74, 90, 511, 2, 415, 4, 417,
3129  715, 91, 92, 93, 719, 458, 416, 440, 25, 787,
3130  16, 17, 25, 13, 20, 16, 17, 13, 67, 20,
3131  875, 26, 25, 27, 873, 443, 903, 250, 37, 38,
3132  58, 29, 518, 16, 17, 64, 8, 20, 68, 87,
3133  68, 90, 777, 49, 139, 113, 141, 53, 85, 61,
3134  51, 52, 13, 471, 907, 25, 28, 76, 64, 61,
3135  470, 729, 596, 651, 0, 113, 134, 802, 96, 97,
3136  85, 779, 740, 79, 286, 15, 288, 17, 290, 787,
3137  86, 87, 294, 55, 90, 91, 92, 93, 141, 13,
3138  939, 25, 120, 123, 124, 125, 133, 26, 110, 118,
3139  323, 13, 25, 25, 25, 898, 59, 60, 110, 230,
3140  25, 232, 203, 111, 806, 807, 736, 134, 133, 13,
3141  130, 134, 94, 657, 744, 130, 56, 1004, 271, 243,
3142  1, 134, 141, 136, 134, 139, 991, 141, 259, 139,
3143  136, 141, 214, 139, 993, 141, 237, 224, 220, 226,
3144  227, 307, 308, 309, 310, 227, 252, 950, 224, 250,
3145  226, 1014, 25, 581, 134, 621, 622, 945, 252, 622,
3146  580, 429, 657, 140, 690, 593, 250, 1026, 139, 25,
3147  141, 271, 592, 771, 772, 140, 307, 308, 309, 310,
3148  898, 312, 313, 248, 886, 903, 140, 203, 268, 632,
3149  134, 130, 136, 252, 360, 361, 591, 136, 230, 743,
3150  696, 134, 134, 134, 929, 139, 1009, 141, 224, 134,
3151  226, 227, 87, 224, 230, 226, 232, 139, 670, 141,
3152  672, 237, 323, 255, 324, 61, 258, 945, 85, 360,
3153  361, 224, 248, 226, 250, 139, 117, 141, 113, 323,
3154  113, 306, 134, 259, 375, 321, 311, 853, 743, 141,
3155  326, 324, 85, 306, 85, 271, 362, 113, 139, 134,
3156  141, 134, 964, 485, 137, 61, 140, 354, 141, 65,
3157  492, 107, 354, 109, 26, 873, 133, 875, 134, 37,
3158  38, 137, 321, 85, 85, 141, 1004, 326, 85, 97,
3159  306, 307, 308, 309, 310, 311, 312, 313, 725, 132,
3160  133, 931, 133, 362, 140, 321, 85, 323, 324, 85,
3161  326, 107, 120, 109, 929, 468, 697, 59, 60, 378,
3162  28, 85, 52, 714, 54, 55, 56, 57, 61, 416,
3163  132, 133, 133, 85, 416, 2, 133, 4, 354, 26,
3164  356, 939, 940, 611, 360, 361, 428, 429, 636, 16,
3165  17, 87, 437, 20, 133, 703, 132, 133, 440, 375,
3166  990, 1039, 710, 402, 403, 518, 85, 437, 468, 133,
3167  87, 437, 134, 355, 107, 440, 109, 113, 130, 141,
3168  132, 133, 49, 470, 136, 113, 402, 403, 470, 85,
3169  422, 134, 936, 991, 426, 993, 113, 64, 85, 431,
3170  416, 412, 868, 68, 134, 868, 52, 140, 54, 55,
3171  56, 57, 113, 132, 133, 447, 87, 399, 518, 86,
3172  87, 87, 85, 90, 440, 507, 508, 87, 1026, 511,
3173  100, 883, 884, 557, 450, 417, 888, 133, 890, 891,
3174  87, 565, 113, 130, 455, 132, 133, 113, 87, 136,
3175  134, 87, 468, 113, 470, 437, 121, 122, 123, 124,
3176  125, 443, 542, 134, 595, 87, 113, 558, 58, 570,
3177  133, 572, 54, 87, 85, 566, 600, 113, 68, 85,
3178  560, 63, 64, 136, 637, 517, 568, 134, 134, 471,
3179  917, 113, 760, 580, 625, 56, 923, 134, 580, 113,
3180  576, 113, 518, 61, 141, 592, 96, 97, 88, 600,
3181  592, 136, 134, 26, 573, 574, 141, 134, 600, 137,
3182  605, 132, 133, 141, 87, 136, 132, 133, 587, 611,
3183  120, 14, 15, 134, 614, 605, 203, 637, 136, 605,
3184  52, 130, 87, 696, 56, 997, 998, 999, 1000, 107,
3185  632, 109, 110, 136, 570, 136, 572, 224, 68, 226,
3186  227, 641, 137, 230, 580, 232, 732, 632, 113, 735,
3187  237, 113, 85, 138, 131, 748, 592, 85, 594, 595,
3188  704, 248, 61, 250, 666, 686, 668, 711, 689, 134,
3189  691, 1019, 259, 56, 134, 1047, 696, 68, 1018, 581,
3190  68, 732, 94, 635, 735, 685, 110, 110, 690, 625,
3191  621, 593, 110, 746, 110, 134, 632, 130, 85, 132,
3192  133, 637, 139, 605, 132, 133, 17, 56, 107, 711,
3193  109, 110, 714, 715, 134, 717, 25, 719, 714, 306,
3194  307, 308, 309, 310, 311, 312, 313, 26, 68, 729,
3195  61, 577, 137, 134, 321, 131, 323, 130, 697, 326,
3196  740, 700, 701, 83, 84, 132, 133, 10, 707, 708,
3197  686, 140, 134, 689, 733, 691, 134, 843, 760, 85,
3198  696, 697, 134, 140, 700, 701, 745, 354, 134, 356,
3199  85, 707, 708, 360, 361, 87, 107, 777, 109, 110,
3200  800, 121, 122, 123, 124, 125, 85, 52, 375, 134,
3201  742, 113, 843, 85, 815, 68, 732, 136, 8, 735,
3202  736, 113, 802, 131, 806, 807, 132, 133, 744, 761,
3203  83, 84, 13, 61, 134, 402, 403, 132, 133, 840,
3204  61, 134, 134, 775, 113, 52, 847, 848, 134, 416,
3205  851, 130, 134, 132, 133, 52, 838, 136, 134, 841,
3206  132, 133, 15, 52, 746, 118, 119, 120, 121, 122,
3207  123, 124, 125, 440, 85, 134, 115, 878, 879, 107,
3208  138, 109, 110, 450, 800, 134, 107, 131, 109, 110,
3209  829, 892, 134, 893, 853, 113, 855, 85, 724, 815,
3210  134, 85, 118, 470, 886, 134, 16, 17, 54, 55,
3211  20, 57, 134, 829, 134, 741, 916, 63, 64, 920,
3212  139, 132, 133, 10, 840, 87, 131, 843, 860, 10,
3213  134, 847, 848, 685, 88, 851, 46, 47, 9, 685,
3214  872, 51, 52, 134, 132, 133, 118, 929, 132, 133,
3215  137, 113, 134, 56, 64, 65, 201, 134, 134, 204,
3216  205, 206, 878, 879, 52, 134, 54, 55, 56, 57,
3217  58, 131, 134, 134, 10, 134, 892, 893, 108, 980,
3218  68, 982, 964, 131, 134, 134, 56, 988, 450, 134,
3219  970, 134, 134, 134, 685, 68, 136, 136, 134, 91,
3220  916, 89, 93, 570, 920, 572, 711, 1021, 96, 97,
3221  83, 84, 771, 580, 685, 931, 1014, 749, 844, 52,
3222  846, 54, 55, 56, 57, 592, 294, 594, 595, 781,
3223  856, 1018, 120, 785, 1020, 861, 1018, 99, 1020, 1021,
3224  57, 787, 94, 781, 790, 936, 898, 120, 121, 122,
3225  123, 124, 125, 900, 779, 396, 89, -1, 625, 1039,
3226  -1, -1, 95, -1, 980, 632, 982, 40, 41, 42,
3227  43, 44, 988, -1, 990, 52, 321, 54, 55, 56,
3228  57, 326, -1, 52, -1, 54, 55, 56, 57, -1,
3229  781, 201, -1, -1, 204, 205, 206, 207, -1, -1,
3230  926, 927, 1018, 2, 52, 4, 54, 55, 56, 57,
3231  -1, -1, 89, -1, 224, -1, 226, 227, 95, 686,
3232  89, -1, 689, -1, 691, -1, -1, -1, -1, -1,
3233  697, -1, -1, 700, 701, -1, -1, 1019, -1, -1,
3234  707, 708, -1, -1, -1, -1, 898, -1, 900, -1,
3235  49, 903, -1, 905, 53, -1, -1, 903, -1, 905,
3236  -1, -1, -1, 989, -1, 732, 411, 412, 735, 736,
3237  -1, -1, -1, -1, -1, 420, -1, 744, -1, -1,
3238  79, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3239  -1, -1, 91, 92, 93, 94, 1022, -1, 1024, 945,
3240  -1, 947, -1, 809, 810, -1, 952, 898, -1, 900,
3241  455, 321, 903, 458, 905, -1, 326, 327, 328, 329,
3242  330, 331, 332, 333, 334, 335, 336, 337, 338, 339,
3243  340, 341, 342, 343, 344, 345, 346, 347, 348, 349,
3244  350, 351, 352, -1, 354, -1, -1, -1, 815, -1,
3245  -1, -1, 1004, -1, 1006, -1, -1, 1009, 1004, 1011,
3246  1006, -1, 829, -1, -1, 1011, -1, 512, -1, -1,
3247  -1, -1, -1, 840, -1, -1, 843, -1, -1, -1,
3248  847, 848, 1028, -1, 851, -1, -1, -1, -1, -1,
3249  -1, -1, 402, 403, -1, -1, -1, 1049, -1, -1,
3250  410, 411, 412, 1049, 203, -1, 416, -1, 418, 419,
3251  420, 878, 879, 1004, -1, 1006, -1, -1, 1009, -1,
3252  1011, -1, -1, -1, -1, 892, -1, -1, -1, 439,
3253  -1, 576, -1, -1, 444, -1, -1, -1, 237, -1,
3254  -1, -1, -1, -1, -1, 455, -1, -1, 458, 248,
3255  -1, 250, -1, 920, -1, 961, 962, -1, 1049, 965,
3256  470, 967, 968, 608, 931, -1, -1, -1, -1, -1,
3257  -1, -1, 271, -1, -1, -1, 621, 622, -1, -1,
3258  -1, -1, -1, 2, -1, 4, 496, 497, -1, -1,
3259  -1, -1, -1, -1, 52, -1, 54, 55, 56, 57,
3260  58, -1, 512, -1, 649, -1, -1, 306, -1, -1,
3261  68, -1, 311, 980, -1, 982, -1, -1, -1, -1,
3262  -1, 988, -1, 990, 323, 324, 1032, 1033, 1034, 1035,
3263  49, 89, -1, -1, 53, -1, -1, 95, 96, 97,
3264  52, -1, 54, 55, 56, 57, 58, -1, 693, 1055,
3265  -1, 1018, -1, -1, -1, -1, 68, 356, -1, -1,
3266  79, -1, 120, -1, -1, 123, 576, -1, -1, 714,
3267  580, -1, 91, 92, 93, 94, -1, 89, -1, -1,
3268  -1, -1, 592, 141, 96, 97, -1, -1, -1, 52,
3269  -1, 54, 55, 56, 57, 58, -1, -1, 608, -1,
3270  -1, -1, -1, -1, -1, 68, -1, -1, 120, -1,
3271  -1, 621, 622, -1, -1, -1, -1, -1, -1, -1,
3272  -1, -1, -1, 768, -1, -1, 89, -1, -1, -1,
3273  -1, -1, 95, 96, 97, -1, -1, -1, -1, 649,
3274  -1, 440, -1, -1, -1, -1, -1, -1, -1, -1,
3275  -1, 450, -1, 2, -1, 4, -1, 120, -1, -1,
3276  123, -1, -1, -1, -1, -1, -1, -1, -1, 468,
3277  -1, -1, 817, 136, 2, -1, 4, -1, -1, -1,
3278  -1, -1, -1, 693, 203, -1, -1, 697, 698, -1,
3279  700, 701, -1, 2, -1, 4, -1, 707, 708, -1,
3280  49, -1, -1, -1, 714, 850, -1, -1, -1, -1,
3281  52, -1, 54, 55, 56, 57, 58, -1, 237, 518,
3282  -1, 49, -1, 868, -1, 53, 68, -1, -1, 248,
3283  -1, 250, -1, -1, -1, -1, -1, -1, -1, -1,
3284  49, 751, -1, -1, -1, 755, 756, 89, 758, 759,
3285  -1, 79, 271, 95, 96, 97, -1, -1, 768, -1,
3286  -1, -1, -1, 91, 92, 93, -1, -1, -1, -1,
3287  -1, 570, -1, 572, -1, -1, -1, -1, 120, -1,
3288  -1, 123, 91, -1, -1, -1, -1, 306, -1, -1,
3289  -1, -1, 311, -1, 136, 594, -1, -1, -1, -1,
3290  -1, -1, -1, -1, 323, 324, -1, 817, -1, -1,
3291  -1, 821, -1, -1, -1, -1, -1, -1, -1, 829,
3292  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3293  -1, -1, -1, 632, -1, -1, -1, 356, 637, -1,
3294  850, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3295  -1, -1, -1, -1, 203, -1, -1, 867, 868, -1,
3296  -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
3297  76, 77, 78, 79, 80, 203, -1, 83, 84, -1,
3298  -1, -1, -1, -1, -1, -1, -1, 686, 237, -1,
3299  689, -1, 691, -1, 203, -1, -1, 696, -1, 248,
3300  -1, 250, -1, -1, -1, -1, -1, -1, 114, 237,
3301  116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
3302  248, 440, 250, -1, -1, -1, -1, -1, 237, -1,
3303  -1, 450, -1, -1, -1, 141, -1, 736, -1, 248,
3304  -1, 250, -1, 271, -1, 744, -1, -1, -1, 468,
3305  -1, -1, -1, -1, -1, -1, -1, 306, -1, -1,
3306  -1, 52, 311, 54, 55, 56, 57, 58, -1, -1,
3307  -1, -1, -1, -1, 323, -1, -1, 68, 306, -1,
3308  -1, -1, -1, 311, -1, -1, -1, -1, -1, -1,
3309  -1, -1, -1, -1, -1, 323, 324, 306, 89, 518,
3310  -1, 800, 311, -1, 95, 96, 97, 356, 1018, -1,
3311  -1, -1, -1, -1, 323, -1, 815, 326, -1, -1,
3312  -1, -1, -1, -1, -1, -1, -1, -1, 356, 120,
3313  44, -1, 123, -1, -1, -1, -1, -1, -1, -1,
3314  -1, 840, -1, -1, -1, -1, -1, 356, 847, 848,
3315  -1, 570, 851, 572, 68, 69, 70, 71, 72, 73,
3316  74, 75, 76, 77, 78, 79, 80, -1, -1, 83,
3317  84, -1, -1, -1, -1, 594, -1, -1, -1, 878,
3318  879, -1, 52, -1, 54, 55, 56, 57, 58, -1,
3319  -1, 440, -1, 892, 893, -1, -1, -1, 68, -1,
3320  114, 450, 116, 117, 118, 119, 120, 121, 122, 123,
3321  124, 125, 440, 632, -1, -1, -1, 916, 637, 89,
3322  134, 920, 450, -1, -1, 95, 96, 97, -1, -1,
3323  -1, 440, 931, -1, -1, -1, -1, -1, -1, -1,
3324  468, 450, -1, -1, -1, -1, -1, -1, -1, -1,
3325  120, -1, -1, 123, -1, -1, -1, -1, -1, -1,
3326  -1, -1, -1, -1, -1, -1, -1, 686, -1, -1,
3327  689, -1, 691, -1, -1, -1, -1, 696, -1, -1,
3328  -1, 980, -1, 982, 52, 53, -1, -1, 56, 988,
3329  518, 990, -1, -1, -1, -1, -1, -1, 66, 67,
3330  68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
3331  78, -1, -1, 81, 82, 83, 84, 736, -1, -1,
3332  -1, 570, -1, 572, -1, 744, -1, 95, 96, -1,
3333  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3334  -1, -1, 570, -1, 572, 594, -1, -1, 116, 117,
3335  118, 119, 120, 121, 122, 123, 124, 125, -1, 127,
3336  128, 570, -1, 572, -1, -1, 594, 135, -1, -1,
3337  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3338  -1, 800, -1, 632, -1, 594, -1, -1, -1, -1,
3339  -1, -1, -1, -1, -1, -1, 815, -1, -1, -1,
3340  -1, -1, -1, -1, 632, -1, -1, -1, -1, 637,
3341  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3342  -1, 840, -1, 632, -1, -1, -1, -1, 847, 848,
3343  -1, -1, 851, -1, -1, -1, -1, 686, -1, -1,
3344  689, -1, 691, -1, -1, -1, -1, -1, 676, -1,
3345  -1, -1, -1, -1, -1, -1, -1, -1, 686, 878,
3346  879, 689, -1, 691, -1, -1, -1, -1, 696, -1,
3347  -1, -1, -1, 892, 893, -1, -1, 686, -1, -1,
3348  689, -1, 691, -1, -1, -1, -1, 736, 697, -1,
3349  -1, -1, -1, -1, -1, 744, -1, 916, -1, -1,
3350  -1, 920, -1, -1, -1, -1, -1, -1, 736, -1,
3351  -1, -1, 931, -1, -1, -1, 744, -1, -1, -1,
3352  -1, -1, -1, -1, -1, -1, -1, 736, 68, 69,
3353  70, 71, 72, 73, 74, 744, -1, 77, 78, -1,
3354  -1, -1, -1, 83, 84, -1, -1, -1, -1, -1,
3355  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3356  -1, 980, -1, 982, -1, -1, 815, -1, -1, 988,
3357  -1, 990, 800, -1, -1, -1, 116, 117, 118, 119,
3358  120, 121, 122, 123, 124, 125, -1, 815, -1, -1,
3359  -1, 840, -1, -1, -1, -1, -1, -1, 847, 848,
3360  -1, -1, 851, -1, -1, -1, 815, -1, -1, -1,
3361  -1, -1, 840, -1, -1, -1, -1, -1, -1, 847,
3362  848, -1, -1, 851, -1, -1, -1, -1, -1, 878,
3363  879, 840, -1, -1, -1, -1, -1, -1, 847, 848,
3364  -1, -1, 851, 892, -1, -1, -1, -1, -1, -1,
3365  878, 879, -1, -1, -1, -1, -1, -1, -1, -1,
3366  -1, -1, -1, -1, 892, 893, -1, -1, -1, 878,
3367  879, 920, -1, -1, -1, -1, -1, -1, -1, -1,
3368  -1, -1, 931, 892, -1, -1, -1, -1, 916, -1,
3369  -1, -1, 920, -1, -1, -1, -1, -1, -1, -1,
3370  -1, -1, -1, 931, -1, -1, -1, 916, -1, -1,
3371  -1, 920, -1, -1, -1, -1, -1, -1, -1, -1,
3372  -1, -1, 931, -1, -1, -1, -1, -1, -1, -1,
3373  -1, 980, -1, 982, -1, -1, -1, -1, -1, 988,
3374  -1, 990, -1, -1, -1, -1, -1, -1, -1, -1,
3375  -1, -1, 980, -1, 982, -1, -1, -1, -1, -1,
3376  988, -1, 990, -1, -1, -1, -1, -1, -1, -1,
3377  -1, 980, -1, 982, -1, -1, -1, -1, -1, 988,
3378  -1, 990, 0, 1, -1, 3, 4, 5, 6, 7,
3379  -1, -1, -1, 11, 12, -1, -1, -1, 16, -1,
3380  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
3381  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
3382  -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
3383  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
3384  -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
3385  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3386  -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
3387  -1, 89, 90, -1, 92, 93, -1, 95, -1, -1,
3388  98, 99, 100, 101, 102, 103, 104, 105, 106, 0,
3389  -1, -1, -1, -1, -1, -1, -1, 8, 9, 10,
3390  -1, -1, 13, 14, 15, -1, 17, -1, 126, 127,
3391  128, -1, 44, -1, -1, 26, 27, 28, 29, -1,
3392  -1, 139, -1, 141, -1, -1, 37, 38, -1, 40,
3393  41, 42, 43, 44, -1, -1, 68, 69, 70, 71,
3394  72, 73, 74, 75, 76, 77, 78, 79, 80, -1,
3395  -1, 83, 84, -1, -1, -1, -1, 68, 69, 70,
3396  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
3397  -1, -1, 83, 84, 85, -1, 87, 88, -1, -1,
3398  -1, -1, 114, 94, 116, 117, 118, 119, 120, 121,
3399  122, 123, 124, 125, -1, -1, -1, 108, -1, -1,
3400  111, -1, 113, 114, 115, 116, 117, 118, 119, 120,
3401  121, 122, 123, 124, 125, -1, -1, -1, -1, 130,
3402  131, 132, 133, 134, 0, -1, 137, 138, 139, -1,
3403  141, -1, 8, 9, 10, -1, -1, 13, 14, 15,
3404  -1, 17, -1, -1, -1, -1, -1, 44, -1, 25,
3405  -1, 27, 28, 29, -1, -1, -1, -1, -1, -1,
3406  -1, 37, 38, -1, 40, 41, 42, 43, 44, -1,
3407  -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
3408  77, 78, 79, 80, -1, -1, 83, 84, -1, -1,
3409  -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
3410  76, 77, 78, 79, 80, -1, -1, 83, 84, 85,
3411  -1, 87, 88, -1, -1, -1, -1, 114, 94, 116,
3412  117, 118, 119, 120, 121, 122, 123, 124, 125, -1,
3413  -1, -1, 108, -1, -1, 111, -1, 113, 114, 115,
3414  116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
3415  -1, -1, -1, -1, -1, 131, 132, 133, 134, 0,
3416  -1, 137, 138, 139, -1, 141, -1, 8, 9, 10,
3417  -1, -1, 13, 14, 15, -1, 17, -1, -1, -1,
3418  -1, -1, -1, -1, 25, -1, 27, 28, 29, -1,
3419  -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
3420  41, 42, 43, 44, -1, -1, 68, 69, 70, 71,
3421  72, 73, 74, 75, 76, 77, 78, 79, 80, -1,
3422  -1, 83, 84, -1, -1, -1, -1, 68, 69, 70,
3423  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
3424  -1, -1, 83, 84, 85, -1, 87, 88, -1, -1,
3425  -1, -1, 114, 94, 116, 117, 118, 119, 120, 121,
3426  122, 123, 124, 125, -1, -1, -1, 108, -1, -1,
3427  111, -1, 113, 114, 115, 116, 117, 118, 119, 120,
3428  121, 122, 123, 124, 125, -1, -1, -1, -1, -1,
3429  131, 132, 133, 134, 0, -1, 137, 138, 139, -1,
3430  141, -1, 8, 9, 10, -1, -1, 13, 14, 15,
3431  -1, 17, -1, -1, -1, -1, -1, -1, -1, -1,
3432  26, 27, 28, 29, -1, -1, -1, -1, -1, -1,
3433  -1, 37, 38, -1, 40, 41, 42, 43, 44, -1,
3434  -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
3435  77, 78, 79, 80, -1, -1, 83, 84, -1, -1,
3436  -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
3437  76, 77, 78, 79, 80, -1, -1, 83, 84, 85,
3438  -1, -1, 88, -1, -1, -1, -1, -1, 94, 116,
3439  117, 118, 119, 120, 121, 122, 123, 124, 125, -1,
3440  -1, -1, 108, -1, -1, 111, -1, -1, 114, 115,
3441  116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
3442  -1, -1, -1, -1, 130, 131, 132, 133, 134, 0,
3443  -1, 137, 138, 139, -1, 141, -1, 8, 9, 10,
3444  -1, -1, 13, 14, 15, -1, 17, -1, -1, -1,
3445  -1, -1, -1, -1, -1, 26, 27, 28, 29, -1,
3446  -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
3447  41, 42, 43, 44, -1, -1, 68, 69, 70, 71,
3448  72, 73, 74, 75, -1, 77, 78, -1, -1, -1,
3449  -1, 83, 84, -1, -1, -1, -1, 68, 69, 70,
3450  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
3451  -1, -1, 83, 84, 85, -1, -1, 88, -1, -1,
3452  -1, -1, -1, 94, 116, 117, 118, 119, 120, 121,
3453  122, 123, 124, 125, -1, -1, -1, 108, -1, -1,
3454  111, -1, -1, 114, 115, 116, 117, 118, 119, 120,
3455  121, 122, 123, 124, 125, -1, -1, -1, -1, 130,
3456  131, 132, 133, 134, 0, -1, 137, 138, 139, -1,
3457  141, -1, 8, 9, 10, -1, -1, 13, 14, 15,
3458  -1, 17, -1, -1, -1, -1, -1, -1, -1, -1,
3459  -1, 27, 28, 29, -1, -1, -1, -1, -1, -1,
3460  -1, 37, 38, -1, 40, 41, 42, 43, 44, -1,
3461  -1, 68, 69, 70, 71, 72, 73, 74, -1, -1,
3462  77, 78, -1, -1, -1, -1, 83, 84, -1, -1,
3463  -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
3464  76, 77, 78, 79, 80, -1, -1, 83, 84, 85,
3465  -1, 87, 88, -1, -1, -1, -1, -1, 94, 116,
3466  117, 118, 119, 120, 121, 122, 123, 124, 125, -1,
3467  -1, -1, 108, -1, -1, 111, -1, 113, 114, 115,
3468  116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
3469  -1, -1, -1, -1, -1, 131, 132, 133, 134, 0,
3470  -1, 137, 138, 139, -1, 141, -1, 8, 9, 10,
3471  -1, -1, 13, 14, 15, -1, 17, -1, -1, -1,
3472  -1, -1, -1, -1, -1, 26, 27, 28, -1, -1,
3473  -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
3474  41, 42, 43, 44, -1, -1, -1, -1, -1, -1,
3475  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3476  -1, -1, -1, -1, -1, -1, -1, 68, 69, 70,
3477  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
3478  -1, -1, 83, 84, 85, -1, -1, 88, -1, -1,
3479  -1, -1, -1, 94, -1, -1, -1, -1, -1, -1,
3480  -1, -1, -1, -1, -1, -1, -1, 108, -1, -1,
3481  -1, -1, -1, 114, -1, 116, 117, 118, 119, 120,
3482  121, 122, 123, 124, 125, -1, -1, -1, -1, 130,
3483  131, 132, 133, 134, 0, 136, 137, 138, 139, -1,
3484  141, -1, 8, 9, 10, -1, -1, 13, 14, 15,
3485  -1, 17, -1, -1, -1, -1, -1, -1, -1, -1,
3486  -1, 27, 28, 29, -1, -1, -1, -1, -1, -1,
3487  -1, 37, 38, -1, 40, 41, 42, 43, 44, -1,
3488  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3489  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3490  -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
3491  76, 77, 78, 79, 80, -1, -1, 83, 84, 85,
3492  -1, -1, 88, -1, -1, -1, -1, -1, 94, -1,
3493  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3494  -1, -1, 108, -1, -1, 111, -1, -1, 114, 115,
3495  116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
3496  -1, -1, -1, -1, -1, 131, 132, 133, 134, 0,
3497  -1, 137, 138, 139, -1, 141, -1, 8, 9, 10,
3498  -1, -1, 13, 14, 15, -1, 17, -1, -1, -1,
3499  -1, -1, -1, -1, -1, 26, 27, 28, -1, -1,
3500  -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
3501  41, 42, 43, 44, -1, -1, -1, -1, -1, -1,
3502  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3503  -1, -1, -1, -1, -1, -1, -1, 68, 69, 70,
3504  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
3505  -1, -1, 83, 84, 85, -1, -1, 88, -1, -1,
3506  -1, -1, -1, 94, -1, -1, -1, -1, -1, -1,
3507  -1, -1, -1, -1, -1, -1, -1, 108, -1, -1,
3508  -1, -1, -1, 114, -1, 116, 117, 118, 119, 120,
3509  121, 122, 123, 124, 125, -1, -1, -1, -1, 130,
3510  131, 132, 133, 134, 0, 136, 137, 138, 139, -1,
3511  141, -1, 8, 9, 10, -1, -1, 13, 14, 15,
3512  -1, 17, -1, -1, -1, -1, -1, -1, -1, -1,
3513  -1, 27, 28, -1, -1, -1, -1, -1, -1, -1,
3514  -1, 37, 38, -1, 40, 41, 42, 43, 44, -1,
3515  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3516  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3517  -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
3518  76, 77, 78, 79, 80, -1, -1, 83, 84, 85,
3519  -1, -1, 88, -1, -1, -1, -1, -1, 94, -1,
3520  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3521  -1, -1, 108, -1, -1, -1, -1, -1, 114, -1,
3522  116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
3523  -1, -1, -1, -1, -1, 131, 132, 133, 134, 0,
3524  136, 137, 138, 139, -1, 141, -1, 8, 9, 10,
3525  -1, -1, -1, 14, 15, -1, 17, -1, -1, -1,
3526  -1, -1, -1, -1, -1, 26, -1, -1, -1, -1,
3527  -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
3528  41, 42, 43, 44, -1, -1, -1, -1, -1, -1,
3529  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3530  -1, -1, -1, -1, -1, -1, -1, 68, 69, 70,
3531  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
3532  -1, -1, 83, 84, 85, -1, 87, -1, -1, -1,
3533  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3534  -1, -1, -1, -1, -1, -1, -1, 108, -1, -1,
3535  -1, -1, 113, 114, -1, 116, 117, 118, 119, 120,
3536  121, 122, 123, 124, 125, -1, -1, -1, -1, 130,
3537  131, 132, 133, 134, 0, -1, 137, -1, 139, -1,
3538  141, -1, 8, 9, 10, -1, -1, -1, 14, 15,
3539  -1, 17, -1, 0, -1, -1, -1, -1, -1, -1,
3540  -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
3541  17, 37, 38, -1, 40, 41, 42, 43, 44, 26,
3542  27, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3543  37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
3544  -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
3545  76, 77, 78, 79, 80, -1, -1, 83, 84, 85,
3546  -1, 87, -1, -1, -1, -1, -1, -1, -1, -1,
3547  -1, -1, -1, -1, -1, -1, -1, -1, 85, -1,
3548  -1, -1, 108, -1, -1, -1, -1, 113, 114, -1,
3549  116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
3550  -1, 108, -1, -1, -1, 131, 132, 133, 134, -1,
3551  -1, 137, -1, 139, -1, 141, -1, -1, -1, -1,
3552  -1, -1, -1, 130, 131, -1, 133, -1, -1, 136,
3553  137, -1, 139, 1, 141, 3, 4, 5, 6, 7,
3554  8, 9, 10, 11, 12, -1, -1, 15, 16, -1,
3555  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
3556  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
3557  -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
3558  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
3559  -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
3560  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3561  -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
3562  -1, 89, 90, -1, 92, 93, -1, 95, -1, -1,
3563  98, 99, 100, 101, 102, 103, 104, 105, 106, -1,
3564  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3565  -1, -1, -1, -1, -1, -1, -1, -1, 126, 127,
3566  128, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3567  -1, 139, 1, 141, 3, 4, 5, 6, 7, -1,
3568  -1, 10, 11, 12, -1, 14, 15, 16, -1, 18,
3569  19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
3570  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
3571  39, -1, -1, -1, -1, -1, 45, 46, 47, 48,
3572  49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
3573  59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
3574  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3575  -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
3576  89, 90, -1, 92, 93, -1, 95, -1, -1, 98,
3577  99, 100, 101, 102, 103, 104, 105, 106, -1, -1,
3578  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3579  -1, -1, -1, -1, -1, -1, -1, 126, 127, 128,
3580  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3581  139, 1, 141, 3, 4, 5, 6, 7, -1, -1,
3582  10, 11, 12, -1, -1, 15, 16, 17, 18, 19,
3583  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
3584  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
3585  -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
3586  50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
3587  60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
3588  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3589  -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
3590  90, -1, 92, 93, -1, 95, -1, -1, 98, 99,
3591  100, 101, 102, 103, 104, 105, 106, -1, -1, -1,
3592  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3593  -1, -1, -1, -1, -1, -1, 126, 127, 128, -1,
3594  -1, -1, -1, -1, -1, -1, -1, -1, -1, 139,
3595  1, 141, 3, 4, 5, 6, 7, -1, -1, 10,
3596  11, 12, -1, -1, 15, 16, -1, 18, 19, 20,
3597  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
3598  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
3599  -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
3600  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
3601  -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
3602  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3603  -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
3604  -1, 92, 93, -1, 95, -1, -1, 98, 99, 100,
3605  101, 102, 103, 104, 105, 106, -1, -1, -1, -1,
3606  -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
3607  -1, 9, 10, 11, 12, 126, 127, 128, 16, -1,
3608  18, 19, 20, 21, 22, 23, 24, -1, 139, -1,
3609  141, -1, 30, 31, 32, 33, 34, 35, 36, -1,
3610  -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
3611  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
3612  -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
3613  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3614  -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
3615  -1, 89, 90, -1, 92, 93, -1, 95, -1, -1,
3616  98, 99, 100, 101, 102, 103, 104, 105, 106, -1,
3617  -1, -1, -1, -1, -1, -1, 1, -1, 3, 4,
3618  5, 6, 7, -1, -1, -1, 11, 12, 126, 127,
3619  128, 16, -1, 18, 19, 20, 21, 22, 23, 24,
3620  -1, 139, -1, 141, -1, 30, 31, 32, 33, 34,
3621  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
3622  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
3623  55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
3624  -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
3625  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3626  -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
3627  95, -1, -1, 98, 99, 100, 101, 102, 103, 104,
3628  105, 106, -1, -1, -1, -1, -1, -1, -1, -1,
3629  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3630  -1, 126, 127, 128, -1, -1, -1, -1, -1, -1,
3631  -1, -1, 137, -1, 139, 1, 141, 3, 4, 5,
3632  6, 7, -1, -1, -1, 11, 12, -1, -1, -1,
3633  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
3634  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
3635  36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
3636  46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
3637  56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
3638  66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
3639  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3640  86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
3641  -1, -1, 98, 99, 100, 101, 102, 103, 104, 105,
3642  106, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3643  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3644  126, 127, 128, -1, -1, -1, -1, -1, -1, -1,
3645  -1, 137, -1, 139, 1, 141, 3, 4, 5, 6,
3646  7, -1, -1, -1, 11, 12, -1, -1, -1, 16,
3647  -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
3648  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
3649  -1, -1, 39, -1, -1, -1, -1, -1, 45, 46,
3650  47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
3651  57, -1, 59, 60, -1, 62, 63, 64, -1, 66,
3652  67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3653  -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
3654  -1, -1, 89, 90, -1, 92, 93, -1, 95, -1,
3655  -1, 98, 99, 100, 101, 102, 103, 104, 105, 106,
3656  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3657  -1, -1, -1, -1, -1, -1, -1, -1, -1, 126,
3658  127, 128, -1, -1, 131, 1, -1, 3, 4, 5,
3659  6, 7, 139, -1, 141, 11, 12, -1, -1, -1,
3660  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
3661  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
3662  36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
3663  46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
3664  56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
3665  66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
3666  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3667  86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
3668  -1, -1, 98, 99, 100, 101, 102, 103, 104, 105,
3669  106, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3670  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3671  126, 127, 128, -1, -1, 131, -1, -1, -1, -1,
3672  -1, -1, -1, 139, 1, 141, 3, 4, 5, 6,
3673  7, -1, -1, 10, 11, 12, -1, -1, -1, 16,
3674  -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
3675  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
3676  -1, -1, 39, -1, -1, -1, -1, -1, 45, 46,
3677  47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
3678  57, -1, 59, 60, -1, 62, 63, 64, -1, 66,
3679  67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3680  -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
3681  -1, -1, 89, 90, -1, 92, 93, -1, 95, -1,
3682  -1, 98, 99, 100, 101, 102, 103, 104, 105, 106,
3683  -1, -1, -1, -1, -1, -1, -1, 1, -1, 3,
3684  4, 5, 6, 7, -1, -1, -1, 11, 12, 126,
3685  127, 128, 16, -1, 18, 19, 20, 21, 22, 23,
3686  24, -1, 139, -1, 141, -1, 30, 31, 32, 33,
3687  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
3688  -1, 45, 46, 47, 48, 49, 50, 51, 52, 53,
3689  54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
3690  64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
3691  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3692  -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
3693  -1, 95, -1, -1, 98, 99, 100, 101, 102, 103,
3694  104, 105, 106, -1, 108, -1, -1, -1, -1, -1,
3695  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
3696  11, 12, 126, 127, 128, 16, -1, 18, 19, 20,
3697  21, 22, 23, 24, -1, 139, -1, 141, -1, 30,
3698  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
3699  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
3700  51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
3701  -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
3702  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3703  -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
3704  -1, 92, 93, -1, 95, 96, 97, 98, 99, 100,
3705  101, 102, 103, 104, 105, 106, -1, -1, -1, -1,
3706  -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
3707  -1, -1, -1, 11, 12, 126, 127, 128, 16, -1,
3708  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
3709  141, -1, 30, 31, 32, 33, 34, 35, 36, -1,
3710  -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
3711  -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
3712  -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
3713  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3714  -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
3715  -1, 89, 90, -1, 92, 93, -1, -1, -1, -1,
3716  98, 99, 100, 101, 102, 103, 104, 105, 106, -1,
3717  -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
3718  5, -1, 7, -1, -1, -1, 11, 12, 126, 127,
3719  128, 16, -1, 18, 19, 20, 21, 22, 23, 24,
3720  -1, 139, -1, 141, -1, 30, 31, 32, 33, 34,
3721  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
3722  -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
3723  55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
3724  -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
3725  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3726  -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
3727  -1, -1, -1, 98, 99, 100, 101, 102, 103, 104,
3728  105, 106, -1, -1, -1, -1, -1, -1, -1, -1,
3729  -1, 3, 4, 5, 6, 7, -1, -1, -1, 11,
3730  12, 126, 127, 128, 16, -1, 18, 19, 20, 21,
3731  22, 23, 24, -1, -1, -1, 141, -1, 30, 31,
3732  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
3733  -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
3734  52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
3735  62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
3736  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3737  -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
3738  92, 93, -1, 95, -1, -1, 98, 99, 100, 101,
3739  102, 103, 104, 105, 106, -1, -1, -1, -1, -1,
3740  -1, -1, -1, -1, 3, 4, 5, 6, 7, -1,
3741  -1, -1, 11, 12, 126, 127, 128, 16, -1, 18,
3742  19, 20, 21, 22, 23, 24, -1, 139, -1, -1,
3743  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
3744  39, -1, -1, -1, -1, -1, 45, 46, 47, 48,
3745  49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
3746  59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
3747  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3748  -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
3749  89, 90, -1, 92, 93, -1, 95, -1, -1, 98,
3750  99, 100, 101, 102, 103, 104, 105, 106, -1, -1,
3751  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3752  -1, -1, -1, -1, -1, -1, -1, 126, 127, 128,
3753  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3754  139, 3, 4, 5, 6, 7, 8, 9, 10, 11,
3755  12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
3756  22, 23, 24, 25, 26, -1, -1, -1, 30, 31,
3757  32, 33, 34, 35, 36, 37, 38, 39, -1, -1,
3758  -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
3759  52, 53, 54, 55, 56, 57, -1, -1, -1, -1,
3760  -1, -1, -1, -1, 66, 67, 68, 69, 70, 71,
3761  72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
3762  82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
3763  -1, -1, -1, 95, 96, -1, -1, -1, -1, -1,
3764  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3765  -1, -1, -1, -1, 116, 117, 118, 119, 120, 121,
3766  122, 123, 124, 125, -1, 127, 128, -1, -1, -1,
3767  -1, -1, -1, 135, 136, 3, 4, 5, 6, 7,
3768  8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
3769  18, 19, 20, 21, 22, 23, 24, 25, 26, -1,
3770  -1, -1, 30, 31, 32, 33, 34, 35, 36, 37,
3771  38, 39, -1, -1, -1, -1, -1, 45, 46, 47,
3772  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
3773  -1, -1, -1, -1, -1, -1, -1, -1, 66, 67,
3774  68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
3775  78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
3776  -1, -1, -1, -1, -1, -1, -1, 95, 96, -1,
3777  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3778  -1, -1, -1, -1, -1, -1, -1, -1, 116, 117,
3779  118, 119, 120, 121, 122, 123, 124, 125, -1, 127,
3780  128, -1, -1, -1, -1, -1, -1, 135, 3, 4,
3781  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
3782  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
3783  25, 26, -1, -1, -1, 30, 31, 32, 33, 34,
3784  35, 36, 37, 38, 39, -1, -1, -1, -1, -1,
3785  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
3786  -1, 56, -1, -1, -1, -1, -1, -1, -1, -1,
3787  -1, 66, 67, 68, 69, 70, 71, 72, 73, 74,
3788  -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
3789  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3790  95, 96, -1, -1, 99, -1, -1, -1, -1, -1,
3791  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3792  -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
3793  125, -1, 127, 128, -1, -1, -1, -1, -1, -1,
3794  135, 3, 4, 5, 6, 7, 8, 9, 10, 11,
3795  12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
3796  22, 23, 24, 25, 26, -1, -1, -1, 30, 31,
3797  32, 33, 34, 35, 36, 37, 38, 39, -1, -1,
3798  -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
3799  52, 53, -1, -1, 56, -1, -1, -1, -1, -1,
3800  -1, -1, -1, -1, 66, 67, 68, 69, 70, 71,
3801  72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
3802  82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
3803  -1, -1, -1, 95, 96, -1, -1, 99, -1, -1,
3804  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3805  -1, -1, -1, -1, 116, 117, 118, 119, 120, 121,
3806  122, 123, 124, 125, -1, 127, 128, -1, -1, -1,
3807  -1, -1, -1, 135, 3, 4, 5, 6, 7, 8,
3808  9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
3809  19, 20, 21, 22, 23, 24, 25, 26, -1, -1,
3810  -1, 30, 31, 32, 33, 34, 35, 36, 37, 38,
3811  39, -1, -1, -1, -1, -1, 45, 46, 47, 48,
3812  49, 50, 51, 52, 53, -1, -1, 56, -1, -1,
3813  -1, -1, -1, -1, -1, -1, -1, 66, 67, 68,
3814  69, 70, 71, 72, 73, 74, -1, -1, 77, 78,
3815  -1, -1, 81, 82, 83, 84, -1, -1, -1, -1,
3816  -1, -1, -1, -1, -1, -1, 95, 96, -1, -1,
3817  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3818  -1, -1, -1, -1, -1, -1, -1, 116, 117, 118,
3819  119, 120, 121, 122, 123, 124, 125, -1, 127, 128,
3820  3, 4, 5, -1, 7, -1, 135, -1, 11, 12,
3821  -1, -1, -1, 16, -1, 18, 19, 20, 21, 22,
3822  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
3823  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
3824  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
3825  53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
3826  63, 64, -1, -1, -1, -1, -1, -1, -1, -1,
3827  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3828  -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
3829  93, -1, -1, -1, -1, 98, 99, 100, 101, 102,
3830  103, 104, 105, 106, -1, -1, -1, -1, -1, 3,
3831  4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
3832  -1, -1, 16, 126, 18, 19, 20, 21, 22, 23,
3833  24, 134, -1, -1, -1, -1, 30, 31, 32, 33,
3834  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
3835  -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
3836  54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
3837  64, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3838  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3839  -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
3840  -1, -1, -1, -1, 98, 99, 100, 101, 102, 103,
3841  104, 105, 106, -1, -1, -1, -1, -1, 3, 4,
3842  5, 6, 7, -1, -1, -1, 11, 12, -1, -1,
3843  -1, 16, 126, 18, 19, 20, 21, 22, 23, 24,
3844  134, -1, -1, -1, -1, 30, 31, 32, 33, 34,
3845  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
3846  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
3847  55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
3848  -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
3849  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3850  -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
3851  95, -1, -1, 98, 99, 100, 101, 102, 103, 104,
3852  105, 106, -1, -1, -1, -1, -1, -1, -1, -1,
3853  -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
3854  12, 126, 127, 128, 16, -1, 18, 19, 20, 21,
3855  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
3856  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
3857  -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
3858  52, 53, 54, 55, 56, 57, 58, 59, 60, -1,
3859  62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
3860  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3861  -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
3862  92, 93, -1, 95, 96, 97, 98, 99, 100, 101,
3863  102, 103, 104, 105, 106, -1, -1, -1, -1, -1,
3864  -1, -1, -1, -1, 3, 4, 5, 6, 7, -1,
3865  -1, -1, 11, 12, 126, 127, 128, 16, -1, 18,
3866  19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
3867  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
3868  39, -1, -1, -1, -1, -1, 45, 46, -1, 48,
3869  49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
3870  59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
3871  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3872  -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
3873  89, 90, -1, 92, 93, -1, 95, -1, -1, 98,
3874  99, 100, 101, 102, 103, 104, 105, 106, -1, -1,
3875  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
3876  -1, 7, -1, -1, -1, 11, 12, 126, 127, 128,
3877  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
3878  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
3879  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
3880  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
3881  56, 57, 58, 59, 60, -1, 62, 63, 64, -1,
3882  66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
3883  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3884  86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
3885  96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
3886  106, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3887  3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
3888  126, 127, 128, 16, -1, 18, 19, 20, 21, 22,
3889  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
3890  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
3891  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
3892  53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
3893  63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
3894  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3895  -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
3896  93, -1, 95, 96, -1, 98, 99, 100, 101, 102,
3897  103, 104, 105, 106, -1, -1, -1, -1, -1, -1,
3898  -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
3899  -1, 11, 12, 126, 127, 128, 16, -1, 18, 19,
3900  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
3901  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
3902  -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
3903  50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
3904  60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
3905  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3906  -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
3907  90, -1, 92, 93, -1, -1, 96, 97, 98, 99,
3908  100, 101, 102, 103, 104, 105, 106, -1, -1, -1,
3909  -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
3910  7, -1, -1, -1, 11, 12, 126, 127, 128, 16,
3911  -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
3912  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
3913  -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
3914  -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
3915  57, 58, 59, 60, -1, 62, 63, 64, -1, 66,
3916  67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3917  -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
3918  -1, -1, 89, 90, -1, 92, 93, -1, 95, 96,
3919  -1, 98, 99, 100, 101, 102, 103, 104, 105, 106,
3920  -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
3921  4, 5, -1, 7, -1, -1, -1, 11, 12, 126,
3922  127, 128, 16, -1, 18, 19, 20, 21, 22, 23,
3923  24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
3924  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
3925  -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
3926  54, 55, 56, 57, 58, 59, 60, -1, 62, 63,
3927  64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
3928  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3929  -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
3930  -1, -1, 96, -1, 98, 99, 100, 101, 102, 103,
3931  104, 105, 106, -1, -1, -1, -1, -1, -1, -1,
3932  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
3933  11, 12, 126, 127, 128, 16, -1, 18, 19, 20,
3934  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
3935  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
3936  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
3937  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
3938  -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
3939  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3940  -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
3941  -1, 92, 93, -1, 95, -1, -1, 98, 99, 100,
3942  101, 102, 103, 104, 105, 106, -1, -1, -1, -1,
3943  -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
3944  -1, -1, -1, 11, 12, 126, 127, 128, 16, -1,
3945  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
3946  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
3947  -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
3948  -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
3949  -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
3950  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3951  -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
3952  -1, 89, 90, -1, 92, 93, -1, 95, -1, -1,
3953  98, 99, 100, 101, 102, 103, 104, 105, 106, -1,
3954  -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
3955  5, -1, 7, -1, -1, -1, 11, 12, 126, 127,
3956  128, 16, -1, 18, 19, 20, 21, 22, 23, 24,
3957  -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
3958  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
3959  -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
3960  55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
3961  -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
3962  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3963  -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
3964  95, -1, -1, 98, 99, 100, 101, 102, 103, 104,
3965  105, 106, -1, -1, -1, -1, -1, -1, -1, -1,
3966  -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
3967  12, 126, 127, 128, 16, -1, 18, 19, 20, 21,
3968  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
3969  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
3970  -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
3971  52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
3972  62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
3973  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3974  -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
3975  92, 93, -1, 95, -1, -1, 98, 99, 100, 101,
3976  102, 103, 104, 105, 106, -1, -1, -1, -1, -1,
3977  -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
3978  -1, -1, 11, 12, 126, 127, 128, 16, -1, 18,
3979  19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
3980  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
3981  39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
3982  49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
3983  59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
3984  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3985  -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
3986  89, 90, -1, 92, 93, -1, 95, -1, -1, 98,
3987  99, 100, 101, 102, 103, 104, 105, 106, -1, -1,
3988  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
3989  -1, 7, -1, -1, -1, 11, 12, 126, 127, 128,
3990  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
3991  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
3992  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
3993  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
3994  56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
3995  66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
3996  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3997  86, -1, -1, 89, 90, -1, 92, 93, -1, -1,
3998  -1, -1, 98, 99, 100, 101, 102, 103, 104, 105,
3999  106, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4000  3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
4001  126, 127, 128, 16, -1, 18, 19, 20, 21, 22,
4002  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
4003  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4004  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
4005  53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
4006  63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
4007  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4008  -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
4009  93, -1, -1, -1, -1, 98, 99, 100, 101, 102,
4010  103, 104, 105, 106, -1, -1, -1, -1, -1, -1,
4011  -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
4012  -1, 11, 12, 126, 127, 128, 16, -1, 18, 19,
4013  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
4014  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4015  -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
4016  50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
4017  60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
4018  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4019  -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
4020  90, -1, 92, 93, -1, -1, -1, -1, 98, 99,
4021  100, 101, 102, 103, 104, 105, 106, -1, -1, -1,
4022  -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
4023  7, -1, -1, -1, 11, 12, 126, 127, 128, 16,
4024  -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
4025  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
4026  -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
4027  -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
4028  57, -1, 59, 60, -1, 62, 63, 64, -1, -1,
4029  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4030  -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
4031  -1, -1, 89, 90, -1, 92, 93, -1, 95, -1,
4032  -1, 98, 99, 100, 101, 102, 103, 104, 105, 106,
4033  -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
4034  -1, -1, -1, 11, 12, -1, -1, -1, 16, 126,
4035  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
4036  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4037  -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
4038  -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4039  -1, 59, 60, -1, 62, 63, 64, -1, -1, -1,
4040  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4041  -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
4042  -1, 89, 90, -1, 92, 93, -1, 95, -1, -1,
4043  98, 99, 100, 101, 102, 103, 104, 105, 106, -1,
4044  -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
4045  -1, -1, 11, 12, -1, -1, -1, 16, 126, 18,
4046  19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
4047  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
4048  39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
4049  49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
4050  59, 60, -1, 62, 63, 64, -1, -1, -1, -1,
4051  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4052  -1, -1, -1, -1, 83, -1, -1, 86, -1, -1,
4053  89, 90, -1, 92, 93, -1, -1, -1, -1, 98,
4054  99, 100, 101, 102, 103, 104, 105, 106, -1, -1,
4055  -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
4056  -1, 11, 12, -1, -1, -1, 16, 126, 18, 19,
4057  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
4058  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4059  -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
4060  50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
4061  60, -1, 62, 63, 64, -1, -1, -1, -1, -1,
4062  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4063  -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
4064  90, -1, 92, 93, -1, -1, -1, -1, 98, 99,
4065  100, 101, 102, 103, 104, 105, 106, -1, -1, -1,
4066  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4067  11, 12, -1, -1, -1, 16, 126, 18, 19, 20,
4068  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4069  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4070  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4071  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4072  -1, 62, 63, 64, -1, -1, -1, -1, -1, -1,
4073  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4074  -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
4075  -1, 92, 93, -1, -1, -1, -1, 98, 99, 100,
4076  101, 102, 103, 104, 105, 106, -1, -1, -1, -1,
4077  -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
4078  12, -1, -1, -1, 16, 126, 18, 19, 20, 21,
4079  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
4080  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
4081  -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
4082  52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
4083  62, 63, 64, -1, -1, -1, -1, -1, -1, -1,
4084  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4085  -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
4086  92, 93, -1, -1, -1, -1, 98, 99, 100, 101,
4087  102, 103, 104, 105, 106, -1, -1, -1, -1, -1,
4088  3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
4089  -1, -1, -1, 16, 126, 18, 19, 20, 21, 22,
4090  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
4091  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4092  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
4093  53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
4094  63, 64, -1, -1, -1, -1, -1, -1, -1, -1,
4095  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4096  -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
4097  93, -1, -1, -1, -1, 98, 99, 100, 101, 102,
4098  103, 104, 105, 106, -1, -1, -1, -1, -1, -1,
4099  52, 53, -1, -1, 56, -1, -1, -1, -1, -1,
4100  -1, -1, -1, 126, 66, 67, 68, 69, 70, 71,
4101  72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
4102  82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
4103  -1, -1, -1, 95, 96, -1, -1, -1, -1, -1,
4104  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4105  -1, -1, -1, -1, 116, 117, 118, 119, 120, 121,
4106  122, 123, 124, 125, -1, 127, 128, 52, 53, -1,
4107  -1, 56, -1, 135, -1, -1, -1, -1, -1, -1,
4108  -1, 66, 67, 68, 69, 70, 71, 72, 73, 74,
4109  -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
4110  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4111  95, 96, -1, -1, -1, -1, -1, -1, -1, -1,
4112  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4113  -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
4114  125, -1, 127, 128, 52, 53, -1, -1, 56, -1,
4115  135, -1, -1, -1, -1, -1, -1, -1, 66, 67,
4116  68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
4117  78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
4118  -1, -1, -1, -1, -1, -1, -1, 95, 96, -1,
4119  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4120  -1, -1, -1, -1, -1, -1, -1, -1, 116, 117,
4121  118, 119, 120, 121, 122, 123, 124, 125, -1, 127,
4122  128, 52, 53, -1, -1, 56, -1, 135, -1, -1,
4123  -1, -1, -1, -1, -1, 66, 67, 68, 69, 70,
4124  71, 72, 73, 74, -1, -1, 77, 78, -1, -1,
4125  81, 82, 83, 84, -1, -1, -1, -1, -1, -1,
4126  -1, -1, -1, -1, 95, 96, -1, -1, -1, -1,
4127  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4128  -1, -1, -1, -1, -1, 116, 117, 118, 119, 120,
4129  121, 122, 123, 124, 125, -1, 127, 128, 52, 53,
4130  -1, -1, 56, -1, 135, -1, -1, -1, -1, -1,
4131  -1, -1, 66, 67, 68, 69, 70, 71, 72, 73,
4132  74, -1, -1, 77, 78, -1, -1, 81, 82, 83,
4133  84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4134  -1, 95, 96, -1, -1, -1, -1, -1, -1, -1,
4135  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4136  -1, -1, 116, 117, 118, 119, 120, 121, 122, 123,
4137  124, 125, -1, 127, 128, 52, 53, -1, -1, 56,
4138  -1, 135, -1, -1, -1, -1, -1, -1, -1, 66,
4139  67, 68, 69, 70, 71, 72, 73, 74, -1, -1,
4140  77, 78, -1, -1, 81, 82, 83, 84, -1, -1,
4141  -1, -1, -1, -1, -1, -1, -1, -1, 95, 96,
4142  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4143  -1, -1, -1, -1, -1, -1, -1, -1, -1, 116,
4144  117, 118, 119, 120, 121, 122, 123, 124, 125, -1,
4145  127, 128, 52, 53, -1, -1, 56, -1, 135, -1,
4146  -1, -1, -1, -1, -1, -1, 66, 67, 68, 69,
4147  70, 71, 72, 73, 74, -1, -1, 77, 78, -1,
4148  -1, 81, 82, 83, 84, -1, -1, -1, -1, -1,
4149  -1, -1, -1, -1, -1, 95, 96, -1, -1, -1,
4150  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4151  -1, -1, -1, -1, -1, -1, 116, 117, 118, 119,
4152  120, 121, 122, 123, 124, 125, -1, 127, 128, 52,
4153  53, -1, -1, 56, -1, 135, -1, -1, -1, -1,
4154  -1, -1, -1, 66, 67, 68, 69, 70, 71, 72,
4155  73, 74, -1, -1, 77, 78, -1, -1, 81, 82,
4156  83, 84, -1, -1, -1, -1, -1, -1, -1, -1,
4157  -1, -1, 95, 96, -1, -1, -1, -1, -1, -1,
4158  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4159  -1, -1, -1, 116, 117, 118, 119, 120, 121, 122,
4160  123, 124, 125, -1, 127, 128, 52, 53, -1, -1,
4161  56, -1, 135, -1, -1, -1, -1, -1, -1, -1,
4162  66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
4163  -1, 77, 78, -1, -1, 81, 82, 83, 84, -1,
4164  -1, -1, -1, -1, -1, -1, -1, -1, -1, 95,
4165  96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4166  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4167  116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
4168  -1, 127, 128, 52, 53, -1, -1, 56, -1, 135,
4169  -1, -1, -1, -1, -1, -1, -1, 66, 67, 68,
4170  69, 70, 71, 72, 73, 74, -1, -1, 77, 78,
4171  -1, -1, 81, 82, 83, 84, -1, -1, -1, -1,
4172  -1, -1, -1, -1, -1, -1, 95, 96, -1, -1,
4173  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4174  -1, -1, -1, -1, -1, -1, -1, 116, 117, 118,
4175  119, 120, 121, 122, 123, 124, 125, -1, 127, 128,
4176  52, 53, -1, -1, 56, -1, 135, -1, -1, -1,
4177  -1, -1, -1, -1, 66, 67, 68, 69, 70, 71,
4178  72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
4179  82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
4180  -1, -1, -1, 95, 96, -1, -1, -1, -1, -1,
4181  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4182  -1, -1, -1, -1, 116, 117, 118, 119, 120, 121,
4183  122, 123, 124, 125, -1, 127, 128, 52, 53, -1,
4184  -1, 56, -1, 135, -1, -1, -1, -1, -1, -1,
4185  -1, 66, 67, 68, 69, 70, 71, 72, 73, 74,
4186  -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
4187  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4188  95, 96, -1, -1, -1, -1, -1, -1, -1, -1,
4189  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4190  -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
4191  125, -1, 127, 128, -1, -1, -1, -1, -1, -1,
4192  135
4193 };
4194 
4195 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
4196  symbol of state STATE-NUM. */
4197 static const yytype_uint16 yystos[] =
4198 {
4199  0, 143, 144, 0, 1, 3, 4, 5, 6, 7,
4200  11, 12, 16, 18, 19, 20, 21, 22, 23, 24,
4201  30, 31, 32, 33, 34, 35, 36, 39, 45, 46,
4202  47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
4203  57, 59, 60, 62, 63, 64, 66, 67, 86, 89,
4204  90, 92, 93, 95, 98, 99, 100, 101, 102, 103,
4205  104, 105, 106, 126, 127, 128, 145, 146, 147, 154,
4206  156, 157, 159, 160, 163, 164, 165, 167, 168, 169,
4207  171, 172, 182, 196, 215, 216, 217, 218, 219, 220,
4208  221, 222, 223, 224, 225, 251, 252, 266, 267, 268,
4209  269, 270, 271, 272, 275, 277, 278, 290, 292, 293,
4210  294, 295, 296, 297, 298, 329, 340, 147, 3, 4,
4211  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
4212  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
4213  25, 26, 30, 31, 32, 33, 34, 35, 36, 37,
4214  38, 39, 45, 46, 47, 48, 49, 50, 51, 52,
4215  53, 56, 66, 67, 68, 69, 70, 71, 72, 73,
4216  74, 77, 78, 81, 82, 83, 84, 95, 96, 116,
4217  117, 118, 119, 120, 121, 122, 123, 124, 125, 127,
4218  128, 135, 175, 176, 177, 178, 180, 181, 290, 292,
4219  39, 58, 86, 89, 95, 96, 97, 127, 164, 172,
4220  182, 184, 189, 192, 194, 215, 294, 295, 297, 298,
4221  327, 328, 189, 189, 136, 190, 191, 136, 186, 190,
4222  136, 141, 334, 54, 177, 334, 148, 130, 21, 22,
4223  30, 31, 32, 163, 182, 215, 182, 56, 1, 47,
4224  89, 150, 151, 152, 154, 166, 167, 340, 198, 199,
4225  185, 194, 327, 340, 184, 326, 327, 340, 46, 86,
4226  126, 134, 171, 196, 215, 294, 295, 298, 243, 244,
4227  54, 55, 57, 175, 282, 291, 281, 282, 283, 140,
4228  273, 140, 279, 140, 276, 140, 280, 59, 60, 159,
4229  182, 182, 139, 141, 333, 338, 339, 40, 41, 42,
4230  43, 44, 37, 38, 26, 130, 186, 190, 257, 28,
4231  249, 113, 134, 89, 95, 168, 113, 68, 69, 70,
4232  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
4233  83, 84, 114, 116, 117, 118, 119, 120, 121, 122,
4234  123, 124, 125, 85, 132, 133, 197, 157, 158, 158,
4235  202, 204, 158, 333, 339, 86, 165, 172, 215, 231,
4236  294, 295, 298, 52, 56, 83, 86, 173, 174, 215,
4237  294, 295, 298, 174, 33, 34, 35, 36, 49, 50,
4238  51, 52, 56, 136, 175, 296, 324, 85, 133, 332,
4239  257, 269, 87, 87, 134, 184, 56, 184, 184, 184,
4240  113, 88, 134, 193, 340, 85, 132, 133, 87, 87,
4241  134, 193, 189, 334, 335, 189, 188, 189, 194, 327,
4242  340, 157, 335, 157, 54, 63, 64, 155, 136, 183,
4243  130, 150, 85, 133, 87, 154, 153, 166, 137, 333,
4244  339, 335, 335, 157, 138, 134, 141, 337, 134, 337,
4245  131, 337, 334, 56, 59, 60, 168, 170, 134, 85,
4246  132, 133, 245, 61, 107, 109, 110, 284, 110, 284,
4247  110, 65, 284, 110, 110, 274, 284, 110, 61, 110,
4248  110, 110, 274, 110, 61, 110, 68, 68, 139, 147,
4249  158, 158, 158, 158, 154, 157, 157, 259, 258, 94,
4250  161, 250, 95, 159, 184, 194, 195, 166, 134, 171,
4251  134, 156, 159, 172, 182, 184, 195, 182, 182, 182,
4252  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
4253  182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
4254  182, 182, 182, 52, 53, 56, 180, 256, 330, 331,
4255  188, 52, 53, 56, 180, 255, 330, 149, 150, 13,
4256  227, 338, 227, 158, 158, 333, 17, 260, 56, 85,
4257  132, 133, 25, 157, 52, 56, 173, 1, 117, 299,
4258  338, 85, 132, 133, 211, 325, 212, 332, 52, 56,
4259  330, 159, 182, 159, 182, 179, 182, 184, 95, 184,
4260  192, 327, 52, 56, 188, 52, 56, 328, 335, 137,
4261  335, 134, 134, 335, 177, 201, 182, 145, 131, 330,
4262  330, 182, 130, 335, 152, 200, 327, 134, 170, 52,
4263  56, 188, 52, 56, 52, 54, 55, 56, 57, 58,
4264  68, 89, 95, 96, 97, 120, 123, 136, 247, 302,
4265  304, 305, 306, 307, 308, 309, 312, 313, 314, 315,
4266  318, 319, 320, 321, 322, 286, 285, 140, 284, 140,
4267  140, 140, 182, 182, 76, 118, 238, 239, 340, 238,
4268  162, 238, 184, 134, 335, 170, 134, 113, 44, 334,
4269  87, 87, 186, 190, 254, 334, 336, 87, 87, 186,
4270  190, 253, 10, 226, 8, 262, 340, 150, 13, 150,
4271  27, 228, 338, 228, 260, 194, 226, 52, 56, 188,
4272  52, 56, 206, 209, 338, 300, 208, 52, 56, 173,
4273  188, 149, 157, 136, 301, 304, 213, 186, 187, 190,
4274  340, 44, 177, 184, 193, 87, 87, 336, 87, 87,
4275  327, 157, 131, 145, 335, 337, 168, 336, 113, 184,
4276  52, 89, 95, 232, 233, 234, 306, 304, 246, 134,
4277  303, 134, 323, 340, 52, 134, 323, 134, 303, 52,
4278  134, 303, 52, 287, 54, 55, 57, 289, 298, 52,
4279  58, 235, 237, 240, 308, 310, 311, 314, 316, 317,
4280  320, 322, 334, 150, 150, 238, 150, 95, 184, 170,
4281  182, 115, 159, 182, 159, 182, 161, 186, 138, 87,
4282  159, 182, 159, 182, 161, 187, 184, 195, 263, 340,
4283  15, 230, 340, 14, 229, 230, 230, 203, 205, 226,
4284  134, 227, 336, 158, 338, 158, 149, 336, 226, 335,
4285  304, 149, 338, 175, 257, 249, 182, 87, 134, 335,
4286  131, 184, 234, 134, 306, 134, 335, 240, 29, 111,
4287  248, 302, 307, 318, 320, 309, 314, 322, 308, 315,
4288  320, 308, 288, 113, 86, 215, 240, 118, 134, 236,
4289  134, 323, 323, 134, 236, 134, 236, 139, 10, 131,
4290  150, 10, 184, 182, 159, 182, 88, 264, 340, 150,
4291  9, 265, 340, 158, 226, 226, 150, 150, 184, 150,
4292  228, 210, 338, 226, 335, 226, 214, 335, 233, 134,
4293  95, 232, 137, 150, 150, 134, 303, 134, 303, 323,
4294  134, 303, 134, 303, 303, 150, 215, 56, 85, 118,
4295  235, 317, 320, 310, 314, 308, 316, 320, 308, 52,
4296  241, 242, 305, 131, 86, 172, 215, 294, 295, 298,
4297  227, 150, 227, 226, 226, 230, 260, 261, 207, 149,
4298  301, 134, 233, 134, 306, 10, 131, 308, 320, 308,
4299  308, 108, 52, 56, 134, 236, 134, 236, 323, 134,
4300  236, 134, 236, 236, 134, 334, 56, 85, 132, 133,
4301  150, 150, 150, 226, 149, 233, 134, 303, 134, 303,
4302  303, 303, 308, 320, 308, 308, 242, 52, 56, 188,
4303  52, 56, 262, 229, 226, 226, 233, 308, 236, 134,
4304  236, 236, 236, 336, 303, 308, 236
4305 };
4306 
4307 #define yyerrok (yyerrstatus = 0)
4308 #define yyclearin (yychar = YYEMPTY)
4309 #define YYEMPTY (-2)
4310 #define YYEOF 0
4311 
4312 #define YYACCEPT goto yyacceptlab
4313 #define YYABORT goto yyabortlab
4314 #define YYERROR goto yyerrorlab
4315 
4316 
4317 /* Like YYERROR except do call yyerror. This remains here temporarily
4318  to ease the transition to the new meaning of YYERROR, for GCC.
4319  Once GCC version 2 has supplanted version 1, this can go. However,
4320  YYFAIL appears to be in use. Nevertheless, it is formally deprecated
4321  in Bison 2.4.2's NEWS entry, where a plan to phase it out is
4322  discussed. */
4323 
4324 #define YYFAIL goto yyerrlab
4325 #if defined YYFAIL
4326  /* This is here to suppress warnings from the GCC cpp's
4327  -Wunused-macros. Normally we don't worry about that warning, but
4328  some users do, and we want to make it easy for users to remove
4329  YYFAIL uses, which will produce warnings from Bison 2.5. */
4330 #endif
4331 
4332 #define YYRECOVERING() (!!yyerrstatus)
4333 
4334 #define YYBACKUP(Token, Value) \
4335 do \
4336  if (yychar == YYEMPTY && yylen == 1) \
4337  { \
4338  yychar = (Token); \
4339  yylval = (Value); \
4340  YYPOPSTACK (1); \
4341  goto yybackup; \
4342  } \
4343  else \
4344  { \
4345  parser_yyerror (parser, YY_("syntax error: cannot back up")); \
4346  YYERROR; \
4347  } \
4348 while (YYID (0))
4349 
4350 
4351 #define YYTERROR 1
4352 #define YYERRCODE 256
4353 
4354 
4355 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
4356  If N is 0, then set CURRENT to the empty location which ends
4357  the previous symbol: RHS[0] (always defined). */
4358 
4359 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
4360 #ifndef YYLLOC_DEFAULT
4361 # define YYLLOC_DEFAULT(Current, Rhs, N) \
4362  do \
4363  if (YYID (N)) \
4364  { \
4365  (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
4366  (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
4367  (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
4368  (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
4369  } \
4370  else \
4371  { \
4372  (Current).first_line = (Current).last_line = \
4373  YYRHSLOC (Rhs, 0).last_line; \
4374  (Current).first_column = (Current).last_column = \
4375  YYRHSLOC (Rhs, 0).last_column; \
4376  } \
4377  while (YYID (0))
4378 #endif
4379 
4380 
4381 /* This macro is provided for backward compatibility. */
4382 
4383 #ifndef YY_LOCATION_PRINT
4384 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
4385 #endif
4386 
4387 
4388 /* YYLEX -- calling `yylex' with the right arguments. */
4389 
4390 #ifdef YYLEX_PARAM
4391 # define YYLEX yylex (&yylval, YYLEX_PARAM)
4392 #else
4393 # define YYLEX yylex (&yylval, parser)
4394 #endif
4395 
4396 /* Enable debugging if requested. */
4397 #if YYDEBUG
4398 
4399 # ifndef YYFPRINTF
4400 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
4401 # define YYFPRINTF fprintf
4402 # endif
4403 
4404 # define YYDPRINTF(Args) \
4405 do { \
4406  if (yydebug) \
4407  YYFPRINTF Args; \
4408 } while (YYID (0))
4409 
4410 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
4411 do { \
4412  if (yydebug) \
4413  { \
4414  YYFPRINTF (stderr, "%s ", Title); \
4415  yy_symbol_print (stderr, \
4416  Type, Value, parser); \
4417  YYFPRINTF (stderr, "\n"); \
4418  } \
4419 } while (YYID (0))
4420 
4421 
4422 /*--------------------------------.
4423 | Print this symbol on YYOUTPUT. |
4424 `--------------------------------*/
4425 
4426 /*ARGSUSED*/
4427 #if (defined __STDC__ || defined __C99__FUNC__ \
4428  || defined __cplusplus || defined _MSC_VER)
4429 static void
4430 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
4431 #else
4432 static void
4433 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
4434  FILE *yyoutput;
4435  int yytype;
4436  YYSTYPE const * const yyvaluep;
4437  struct parser_params *parser;
4438 #endif
4439 {
4440  if (!yyvaluep)
4441  return;
4442  YYUSE (parser);
4443 # ifdef YYPRINT
4444  if (yytype < YYNTOKENS)
4445  YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
4446 # else
4447  YYUSE (yyoutput);
4448 # endif
4449  switch (yytype)
4450  {
4451  default:
4452  break;
4453  }
4454 }
4455 
4456 
4457 /*--------------------------------.
4458 | Print this symbol on YYOUTPUT. |
4459 `--------------------------------*/
4460 
4461 #if (defined __STDC__ || defined __C99__FUNC__ \
4462  || defined __cplusplus || defined _MSC_VER)
4463 static void
4464 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
4465 #else
4466 static void
4467 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
4468  FILE *yyoutput;
4469  int yytype;
4470  YYSTYPE const * const yyvaluep;
4471  struct parser_params *parser;
4472 #endif
4473 {
4474  if (yytype < YYNTOKENS)
4475  YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
4476  else
4477  YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
4478 
4479  yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
4480  YYFPRINTF (yyoutput, ")");
4481 }
4482 
4483 /*------------------------------------------------------------------.
4484 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
4485 | TOP (included). |
4486 `------------------------------------------------------------------*/
4487 
4488 #if (defined __STDC__ || defined __C99__FUNC__ \
4489  || defined __cplusplus || defined _MSC_VER)
4490 static void
4491 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
4492 #else
4493 static void
4494 yy_stack_print (yybottom, yytop)
4495  yytype_int16 *yybottom;
4496  yytype_int16 *yytop;
4497 #endif
4498 {
4499  YYFPRINTF (stderr, "Stack now");
4500  for (; yybottom <= yytop; yybottom++)
4501  {
4502  int yybot = *yybottom;
4503  YYFPRINTF (stderr, " %d", yybot);
4504  }
4505  YYFPRINTF (stderr, "\n");
4506 }
4507 
4508 # define YY_STACK_PRINT(Bottom, Top) \
4509 do { \
4510  if (yydebug) \
4511  yy_stack_print ((Bottom), (Top)); \
4512 } while (YYID (0))
4513 
4514 
4515 /*------------------------------------------------.
4516 | Report that the YYRULE is going to be reduced. |
4517 `------------------------------------------------*/
4518 
4519 #if (defined __STDC__ || defined __C99__FUNC__ \
4520  || defined __cplusplus || defined _MSC_VER)
4521 static void
4522 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
4523 #else
4524 static void
4525 yy_reduce_print (yyvsp, yyrule, parser)
4526  YYSTYPE *yyvsp;
4527  int yyrule;
4528  struct parser_params *parser;
4529 #endif
4531  int yynrhs = yyr2[yyrule];
4532  int yyi;
4533  unsigned long int yylno = yyrline[yyrule];
4534  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
4535  yyrule - 1, yylno);
4536  /* The symbols being reduced. */
4537  for (yyi = 0; yyi < yynrhs; yyi++)
4538  {
4539  YYFPRINTF (stderr, " $%d = ", yyi + 1);
4540  yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
4541  &(yyvsp[(yyi + 1) - (yynrhs)])
4542  , parser);
4543  YYFPRINTF (stderr, "\n");
4544  }
4545 }
4546 
4547 # define YY_REDUCE_PRINT(Rule) \
4548 do { \
4549  if (yydebug) \
4550  yy_reduce_print (yyvsp, Rule, parser); \
4551 } while (YYID (0))
4552 
4553 /* Nonzero means print parse trace. It is left uninitialized so that
4554  multiple parsers can coexist. */
4555 #ifndef yydebug
4556 int yydebug;
4557 #endif
4558 #else /* !YYDEBUG */
4559 # define YYDPRINTF(Args)
4560 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
4561 # define YY_STACK_PRINT(Bottom, Top)
4562 # define YY_REDUCE_PRINT(Rule)
4563 #endif /* !YYDEBUG */
4564 
4565 
4566 /* YYINITDEPTH -- initial size of the parser's stacks. */
4567 #ifndef YYINITDEPTH
4568 # define YYINITDEPTH 200
4569 #endif
4570 
4571 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
4572  if the built-in stack extension method is used).
4573 
4574  Do not make this value too large; the results are undefined if
4575  YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
4576  evaluated with infinite-precision integer arithmetic. */
4577 
4578 #ifndef YYMAXDEPTH
4579 # define YYMAXDEPTH 10000
4580 #endif
4581 
4582 
4583 #if YYERROR_VERBOSE
4584 
4585 # ifndef yystrlen
4586 # if defined __GLIBC__ && defined _STRING_H
4587 # define yystrlen strlen
4588 # else
4589 /* Return the length of YYSTR. */
4590 #if (defined __STDC__ || defined __C99__FUNC__ \
4591  || defined __cplusplus || defined _MSC_VER)
4592 static YYSIZE_T
4593 yystrlen (const char *yystr)
4594 #else
4595 static YYSIZE_T
4596 yystrlen (yystr)
4597  const char *yystr;
4598 #endif
4600  YYSIZE_T yylen;
4601  for (yylen = 0; yystr[yylen]; yylen++)
4602  continue;
4603  return yylen;
4604 }
4605 # endif
4606 # endif
4607 
4608 # ifndef yystpcpy
4609 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
4610 # define yystpcpy stpcpy
4611 # else
4612 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
4613  YYDEST. */
4614 #if (defined __STDC__ || defined __C99__FUNC__ \
4615  || defined __cplusplus || defined _MSC_VER)
4616 static char *
4617 yystpcpy (char *yydest, const char *yysrc)
4618 #else
4619 static char *
4620 yystpcpy (yydest, yysrc)
4621  char *yydest;
4622  const char *yysrc;
4623 #endif
4624 {
4625  char *yyd = yydest;
4626  const char *yys = yysrc;
4627 
4628  while ((*yyd++ = *yys++) != '\0')
4629  continue;
4630 
4631  return yyd - 1;
4632 }
4633 # endif
4634 # endif
4635 
4636 # ifndef yytnamerr
4637 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
4638  quotes and backslashes, so that it's suitable for yyerror. The
4639  heuristic is that double-quoting is unnecessary unless the string
4640  contains an apostrophe, a comma, or backslash (other than
4641  backslash-backslash). YYSTR is taken from yytname. If YYRES is
4642  null, do not copy; instead, return the length of what the result
4643  would have been. */
4644 static YYSIZE_T
4645 yytnamerr (char *yyres, const char *yystr)
4646 {
4647  if (*yystr == '"')
4648  {
4649  YYSIZE_T yyn = 0;
4650  char const *yyp = yystr;
4651 
4652  for (;;)
4653  switch (*++yyp)
4654  {
4655  case '\'':
4656  case ',':
4657  goto do_not_strip_quotes;
4658 
4659  case '\\':
4660  if (*++yyp != '\\')
4661  goto do_not_strip_quotes;
4662  /* Fall through. */
4663  default:
4664  if (yyres)
4665  yyres[yyn] = *yyp;
4666  yyn++;
4667  break;
4668 
4669  case '"':
4670  if (yyres)
4671  yyres[yyn] = '\0';
4672  return yyn;
4673  }
4674  do_not_strip_quotes: ;
4675  }
4676 
4677  if (! yyres)
4678  return yystrlen (yystr);
4679 
4680  return yystpcpy (yyres, yystr) - yyres;
4681 }
4682 # endif
4683 
4684 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
4685  about the unexpected token YYTOKEN for the state stack whose top is
4686  YYSSP.
4687 
4688  Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
4689  not large enough to hold the message. In that case, also set
4690  *YYMSG_ALLOC to the required number of bytes. Return 2 if the
4691  required number of bytes is too large to store. */
4692 static int
4694  yytype_int16 *yyssp, int yytoken)
4695 {
4696  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
4697  YYSIZE_T yysize = yysize0;
4698  YYSIZE_T yysize1;
4699  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
4700  /* Internationalized format string. */
4701  const char *yyformat = 0;
4702  /* Arguments of yyformat. */
4703  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
4704  /* Number of reported tokens (one for the "unexpected", one per
4705  "expected"). */
4706  int yycount = 0;
4707 
4708  /* There are many possibilities here to consider:
4709  - Assume YYFAIL is not used. It's too flawed to consider. See
4710  <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
4711  for details. YYERROR is fine as it does not invoke this
4712  function.
4713  - If this state is a consistent state with a default action, then
4714  the only way this function was invoked is if the default action
4715  is an error action. In that case, don't check for expected
4716  tokens because there are none.
4717  - The only way there can be no lookahead present (in yychar) is if
4718  this state is a consistent state with a default action. Thus,
4719  detecting the absence of a lookahead is sufficient to determine
4720  that there is no unexpected or expected token to report. In that
4721  case, just report a simple "syntax error".
4722  - Don't assume there isn't a lookahead just because this state is a
4723  consistent state with a default action. There might have been a
4724  previous inconsistent state, consistent state with a non-default
4725  action, or user semantic action that manipulated yychar.
4726  - Of course, the expected token list depends on states to have
4727  correct lookahead information, and it depends on the parser not
4728  to perform extra reductions after fetching a lookahead from the
4729  scanner and before detecting a syntax error. Thus, state merging
4730  (from LALR or IELR) and default reductions corrupt the expected
4731  token list. However, the list is correct for canonical LR with
4732  one exception: it will still contain any token that will not be
4733  accepted due to an error action in a later state.
4734  */
4735  if (yytoken != YYEMPTY)
4736  {
4737  int yyn = yypact[*yyssp];
4738  yyarg[yycount++] = yytname[yytoken];
4739  if (!yypact_value_is_default (yyn))
4740  {
4741  /* Start YYX at -YYN if negative to avoid negative indexes in
4742  YYCHECK. In other words, skip the first -YYN actions for
4743  this state because they are default actions. */
4744  int yyxbegin = yyn < 0 ? -yyn : 0;
4745  /* Stay within bounds of both yycheck and yytname. */
4746  int yychecklim = YYLAST - yyn + 1;
4747  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
4748  int yyx;
4749 
4750  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
4751  if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
4752  && !yytable_value_is_error (yytable[yyx + yyn]))
4753  {
4754  if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
4755  {
4756  yycount = 1;
4757  yysize = yysize0;
4758  break;
4759  }
4760  yyarg[yycount++] = yytname[yyx];
4761  yysize1 = yysize + yytnamerr (0, yytname[yyx]);
4762  if (! (yysize <= yysize1
4763  && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
4764  return 2;
4765  yysize = yysize1;
4766  }
4767  }
4768  }
4769 
4770  switch (yycount)
4771  {
4772 # define YYCASE_(N, S) \
4773  case N: \
4774  yyformat = S; \
4775  break
4776  YYCASE_(0, YY_("syntax error"));
4777  YYCASE_(1, YY_("syntax error, unexpected %s"));
4778  YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
4779  YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
4780  YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
4781  YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
4782 # undef YYCASE_
4783  }
4784 
4785  yysize1 = yysize + yystrlen (yyformat);
4786  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
4787  return 2;
4788  yysize = yysize1;
4789 
4790  if (*yymsg_alloc < yysize)
4791  {
4792  *yymsg_alloc = 2 * yysize;
4793  if (! (yysize <= *yymsg_alloc
4794  && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
4795  *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
4796  return 1;
4797  }
4798 
4799  /* Avoid sprintf, as that infringes on the user's name space.
4800  Don't have undefined behavior even if the translation
4801  produced a string with the wrong number of "%s"s. */
4802  {
4803  char *yyp = *yymsg;
4804  int yyi = 0;
4805  while ((*yyp = *yyformat) != '\0')
4806  if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
4807  {
4808  yyp += yytnamerr (yyp, yyarg[yyi++]);
4809  yyformat += 2;
4810  }
4811  else
4812  {
4813  yyp++;
4814  yyformat++;
4815  }
4816  }
4817  return 0;
4818 }
4819 #endif /* YYERROR_VERBOSE */
4820 
4821 /*-----------------------------------------------.
4822 | Release the memory associated to this symbol. |
4823 `-----------------------------------------------*/
4824 
4825 /*ARGSUSED*/
4826 #if (defined __STDC__ || defined __C99__FUNC__ \
4827  || defined __cplusplus || defined _MSC_VER)
4828 static void
4829 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
4830 #else
4831 static void
4832 yydestruct (yymsg, yytype, yyvaluep, parser)
4833  const char *yymsg;
4834  int yytype;
4835  YYSTYPE *yyvaluep;
4836  struct parser_params *parser;
4837 #endif
4838 {
4839  YYUSE (yyvaluep);
4840  YYUSE (parser);
4841 
4842  if (!yymsg)
4843  yymsg = "Deleting";
4844  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
4845 
4846  switch (yytype)
4847  {
4848 
4849  default:
4850  break;
4851  }
4852 }
4853 
4854 
4855 /* Prevent warnings from -Wmissing-prototypes. */
4856 #ifdef YYPARSE_PARAM
4857 #if defined __STDC__ || defined __cplusplus
4858 int yyparse (void *YYPARSE_PARAM);
4859 #else
4860 int yyparse ();
4861 #endif
4862 #else /* ! YYPARSE_PARAM */
4863 #if defined __STDC__ || defined __cplusplus
4864 int yyparse (struct parser_params *parser);
4865 #else
4866 int yyparse ();
4867 #endif
4868 #endif /* ! YYPARSE_PARAM */
4869 
4870 
4871 /*----------.
4872 | yyparse. |
4873 `----------*/
4874 
4875 #ifdef YYPARSE_PARAM
4876 #if (defined __STDC__ || defined __C99__FUNC__ \
4877  || defined __cplusplus || defined _MSC_VER)
4878 int
4879 yyparse (void *YYPARSE_PARAM)
4880 #else
4881 int
4882 yyparse (YYPARSE_PARAM)
4883  void *YYPARSE_PARAM;
4884 #endif
4885 #else /* ! YYPARSE_PARAM */
4886 #if (defined __STDC__ || defined __C99__FUNC__ \
4887  || defined __cplusplus || defined _MSC_VER)
4888 int
4889 yyparse (struct parser_params *parser)
4890 #else
4891 int
4892 yyparse (parser)
4893  struct parser_params *parser;
4894 #endif
4895 #endif
4897 /* The lookahead symbol. */
4898 int yychar;
4899 
4900 /* The semantic value of the lookahead symbol. */
4901 YYSTYPE yylval;
4902 
4903  /* Number of syntax errors so far. */
4904  int yynerrs;
4905 
4906  int yystate;
4907  /* Number of tokens to shift before error messages enabled. */
4909 
4910  /* The stacks and their tools:
4911  `yyss': related to states.
4912  `yyvs': related to semantic values.
4913 
4914  Refer to the stacks thru separate pointers, to allow yyoverflow
4915  to reallocate them elsewhere. */
4916 
4917  /* The state stack. */
4918  yytype_int16 yyssa[YYINITDEPTH];
4919  yytype_int16 *yyss;
4920  yytype_int16 *yyssp;
4921 
4922  /* The semantic value stack. */
4925  YYSTYPE *yyvsp;
4926 
4928 
4929  int yyn;
4931  /* Lookahead token as an internal (translated) token number. */
4932  int yytoken;
4933  /* The variables used to return semantic value and location from the
4934  action routines. */
4936 
4937 #if YYERROR_VERBOSE
4938  /* Buffer for error messages, and its allocated size. */
4939  char yymsgbuf[128];
4940  char *yymsg = yymsgbuf;
4942 #endif
4943 
4944 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
4945 
4946  /* The number of symbols on the RHS of the reduced rule.
4947  Keep to zero when no symbol should be popped. */
4948  int yylen = 0;
4949 
4950  yytoken = 0;
4951  yyss = yyssa;
4952  yyvs = yyvsa;
4953  yystacksize = YYINITDEPTH;
4954 
4955  YYDPRINTF ((stderr, "Starting parse\n"));
4956 
4957  yystate = 0;
4958  yyerrstatus = 0;
4959  yynerrs = 0;
4960  yychar = YYEMPTY; /* Cause a token to be read. */
4961 
4962  /* Initialize stack pointers.
4963  Waste one element of value and location stack
4964  so that they stay on the same level as the state stack.
4965  The wasted elements are never initialized. */
4966  yyssp = yyss;
4967  yyvsp = yyvs;
4968 
4970 
4971 /*------------------------------------------------------------.
4972 | yynewstate -- Push a new state, which is found in yystate. |
4973 `------------------------------------------------------------*/
4974  yynewstate:
4975  /* In all cases, when you get here, the value and location stacks
4976  have just been pushed. So pushing a state here evens the stacks. */
4977  yyssp++;
4978 
4979  yysetstate:
4980  *yyssp = yystate;
4981 
4982  if (yyss + yystacksize - 1 <= yyssp)
4983  {
4984  /* Get the current used size of the three stacks, in elements. */
4985  YYSIZE_T yysize = yyssp - yyss + 1;
4986 
4987 #ifdef yyoverflow
4988  {
4989  /* Give user a chance to reallocate the stack. Use copies of
4990  these so that the &'s don't force the real ones into
4991  memory. */
4992  YYSTYPE *yyvs1 = yyvs;
4993  yytype_int16 *yyss1 = yyss;
4994 
4995  /* Each stack pointer address is followed by the size of the
4996  data in use in that stack, in bytes. This used to be a
4997  conditional around just the two extra args, but that might
4998  be undefined if yyoverflow is a macro. */
4999  yyoverflow (YY_("memory exhausted"),
5000  &yyss1, yysize * sizeof (*yyssp),
5001  &yyvs1, yysize * sizeof (*yyvsp),
5002  &yystacksize);
5003 
5004  yyss = yyss1;
5005  yyvs = yyvs1;
5006  }
5007 #else /* no yyoverflow */
5008 # ifndef YYSTACK_RELOCATE
5009  goto yyexhaustedlab;
5010 # else
5011  /* Extend the stack our own way. */
5012  if (YYMAXDEPTH <= yystacksize)
5013  goto yyexhaustedlab;
5014  yystacksize *= 2;
5015  if (YYMAXDEPTH < yystacksize)
5016  yystacksize = YYMAXDEPTH;
5017 
5018  {
5019  yytype_int16 *yyss1 = yyss;
5020  union yyalloc *yyptr =
5021  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
5022  if (! yyptr)
5023  goto yyexhaustedlab;
5024  YYSTACK_RELOCATE (yyss_alloc, yyss);
5025  YYSTACK_RELOCATE (yyvs_alloc, yyvs);
5026 # undef YYSTACK_RELOCATE
5027  if (yyss1 != yyssa)
5028  YYSTACK_FREE (yyss1);
5029  }
5030 # endif
5031 #endif /* no yyoverflow */
5032 
5033  yyssp = yyss + yysize - 1;
5034  yyvsp = yyvs + yysize - 1;
5035 
5036  YYDPRINTF ((stderr, "Stack size increased to %lu\n",
5037  (unsigned long int) yystacksize));
5038 
5039  if (yyss + yystacksize - 1 <= yyssp)
5040  YYABORT;
5041  }
5042 
5043  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
5044 
5045  if (yystate == YYFINAL)
5047 
5048  goto yybackup;
5049 
5050 /*-----------.
5051 | yybackup. |
5052 `-----------*/
5053 yybackup:
5054 
5055  /* Do appropriate processing given the current state. Read a
5056  lookahead token if we need one and don't already have one. */
5057 
5058  /* First try to decide what to do without reference to lookahead token. */
5059  yyn = yypact[yystate];
5060  if (yypact_value_is_default (yyn))
5062 
5063  /* Not known => get a lookahead token if don't already have one. */
5064 
5065  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
5066  if (yychar == YYEMPTY)
5067  {
5068  YYDPRINTF ((stderr, "Reading a token: "));
5069  yychar = YYLEX;
5070  }
5071 
5072  if (yychar <= YYEOF)
5073  {
5074  yychar = yytoken = YYEOF;
5075  YYDPRINTF ((stderr, "Now at end of input.\n"));
5076  }
5077  else
5078  {
5079  yytoken = YYTRANSLATE (yychar);
5080  YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
5081  }
5082 
5083  /* If the proper action on seeing token YYTOKEN is to reduce or to
5084  detect an error, take that action. */
5085  yyn += yytoken;
5086  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
5087  goto yydefault;
5088  yyn = yytable[yyn];
5089  if (yyn <= 0)
5090  {
5091  if (yytable_value_is_error (yyn))
5092  goto yyerrlab;
5093  yyn = -yyn;
5094  goto yyreduce;
5095  }
5096 
5097  /* Count tokens shifted since error; after three, turn off error
5098  status. */
5099  if (yyerrstatus)
5100  yyerrstatus--;
5101 
5102  /* Shift the lookahead token. */
5103  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
5104 
5105  /* Discard the shifted token. */
5106  yychar = YYEMPTY;
5107 
5108  yystate = yyn;
5109  *++yyvsp = yylval;
5110 
5112 
5113 
5114 /*-----------------------------------------------------------.
5115 | yydefault -- do the default action for the current state. |
5116 `-----------------------------------------------------------*/
5117 yydefault:
5118  yyn = yydefact[yystate];
5119  if (yyn == 0)
5120  goto yyerrlab;
5121  goto yyreduce;
5122 
5123 
5124 /*-----------------------------.
5125 | yyreduce -- Do a reduction. |
5126 `-----------------------------*/
5127 yyreduce:
5128  /* yyn is the number of a rule to reduce with. */
5129  yylen = yyr2[yyn];
5130 
5131  /* If YYLEN is nonzero, implement the default value of the action:
5132  `$$ = $1'.
5133 
5134  Otherwise, the following line sets YYVAL to garbage.
5135  This behavior is undocumented and Bison
5136  users should not rely upon it. Assigning to YYVAL
5137  unconditionally makes the parser a bit smaller, and it avoids a
5138  GCC warning that YYVAL may be used uninitialized. */
5139  yyval = yyvsp[1-yylen];
5140 
5141 
5142  YY_REDUCE_PRINT (yyn);
5143  switch (yyn)
5144  {
5145  case 2:
5146 
5147 /* Line 1806 of yacc.c */
5148 #line 855 "parse.y"
5149  {
5150  lex_state = EXPR_BEG;
5151  /*%%%*/
5153  /*%
5154  local_push(0);
5155  %*/
5156  }
5157  break;
5158 
5159  case 3:
5160 
5161 /* Line 1806 of yacc.c */
5162 #line 864 "parse.y"
5163  {
5164  /*%%%*/
5165  if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
5166  /* last expression should not be void */
5167  if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
5168  else {
5169  NODE *node = (yyvsp[(2) - (2)].node);
5170  while (node->nd_next) {
5171  node = node->nd_next;
5172  }
5173  void_expr(node->nd_head);
5174  }
5175  }
5176  ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
5177  /*%
5178  $$ = $2;
5179  parser->result = dispatch1(program, $$);
5180  %*/
5181  local_pop();
5182  }
5183  break;
5184 
5185  case 4:
5186 
5187 /* Line 1806 of yacc.c */
5188 #line 887 "parse.y"
5189  {
5190  /*%%%*/
5191  void_stmts((yyvsp[(1) - (2)].node));
5193  /*%
5194  %*/
5195  (yyval.node) = (yyvsp[(1) - (2)].node);
5196  }
5197  break;
5198 
5199  case 5:
5200 
5201 /* Line 1806 of yacc.c */
5202 #line 898 "parse.y"
5203  {
5204  /*%%%*/
5205  (yyval.node) = NEW_BEGIN(0);
5206  /*%
5207  $$ = dispatch2(stmts_add, dispatch0(stmts_new),
5208  dispatch0(void_stmt));
5209  %*/
5210  }
5211  break;
5212 
5213  case 6:
5214 
5215 /* Line 1806 of yacc.c */
5216 #line 907 "parse.y"
5217  {
5218  /*%%%*/
5219  (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
5220  /*%
5221  $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
5222  %*/
5223  }
5224  break;
5225 
5226  case 7:
5227 
5228 /* Line 1806 of yacc.c */
5229 #line 915 "parse.y"
5230  {
5231  /*%%%*/
5232  (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
5233  /*%
5234  $$ = dispatch2(stmts_add, $1, $3);
5235  %*/
5236  }
5237  break;
5238 
5239  case 8:
5240 
5241 /* Line 1806 of yacc.c */
5242 #line 923 "parse.y"
5243  {
5244  (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
5245  }
5246  break;
5247 
5248  case 10:
5249 
5250 /* Line 1806 of yacc.c */
5251 #line 930 "parse.y"
5252  {
5253  /*%%%*/
5254  /* local_push(0); */
5255  /*%
5256  %*/
5257  }
5258  break;
5259 
5260  case 11:
5261 
5262 /* Line 1806 of yacc.c */
5263 #line 937 "parse.y"
5264  {
5265  /*%%%*/
5267  (yyvsp[(4) - (5)].node));
5268  /* NEW_PREEXE($4)); */
5269  /* local_pop(); */
5270  (yyval.node) = NEW_BEGIN(0);
5271  /*%
5272  $$ = dispatch1(BEGIN, $4);
5273  %*/
5274  }
5275  break;
5276 
5277  case 12:
5278 
5279 /* Line 1806 of yacc.c */
5280 #line 954 "parse.y"
5281  {
5282  /*%%%*/
5283  (yyval.node) = (yyvsp[(1) - (4)].node);
5284  if ((yyvsp[(2) - (4)].node)) {
5285  (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
5286  }
5287  else if ((yyvsp[(3) - (4)].node)) {
5288  rb_warn0("else without rescue is useless");
5289  (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
5290  }
5291  if ((yyvsp[(4) - (4)].node)) {
5292  if ((yyval.node)) {
5293  (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
5294  }
5295  else {
5296  (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
5297  }
5298  }
5299  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
5300  /*%
5301  $$ = dispatch4(bodystmt,
5302  escape_Qundef($1),
5303  escape_Qundef($2),
5304  escape_Qundef($3),
5305  escape_Qundef($4));
5306  %*/
5307  }
5308  break;
5309 
5310  case 13:
5311 
5312 /* Line 1806 of yacc.c */
5313 #line 984 "parse.y"
5314  {
5315  /*%%%*/
5316  void_stmts((yyvsp[(1) - (2)].node));
5318  /*%
5319  %*/
5320  (yyval.node) = (yyvsp[(1) - (2)].node);
5321  }
5322  break;
5323 
5324  case 14:
5325 
5326 /* Line 1806 of yacc.c */
5327 #line 995 "parse.y"
5328  {
5329  /*%%%*/
5330  (yyval.node) = NEW_BEGIN(0);
5331  /*%
5332  $$ = dispatch2(stmts_add, dispatch0(stmts_new),
5333  dispatch0(void_stmt));
5334  %*/
5335  }
5336  break;
5337 
5338  case 15:
5339 
5340 /* Line 1806 of yacc.c */
5341 #line 1004 "parse.y"
5342  {
5343  /*%%%*/
5344  (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
5345  /*%
5346  $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
5347  %*/
5348  }
5349  break;
5350 
5351  case 16:
5352 
5353 /* Line 1806 of yacc.c */
5354 #line 1012 "parse.y"
5355  {
5356  /*%%%*/
5357  (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
5358  /*%
5359  $$ = dispatch2(stmts_add, $1, $3);
5360  %*/
5361  }
5362  break;
5363 
5364  case 17:
5365 
5366 /* Line 1806 of yacc.c */
5367 #line 1020 "parse.y"
5368  {
5369  (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
5370  }
5371  break;
5372 
5373  case 18:
5374 
5375 /* Line 1806 of yacc.c */
5376 #line 1026 "parse.y"
5377  {
5378  (yyval.node) = (yyvsp[(1) - (1)].node);
5379  }
5380  break;
5381 
5382  case 19:
5383 
5384 /* Line 1806 of yacc.c */
5385 #line 1030 "parse.y"
5386  {
5387  yyerror("BEGIN is permitted only at toplevel");
5388  /*%%%*/
5389  /* local_push(0); */
5390  /*%
5391  %*/
5392  }
5393  break;
5394 
5395  case 20:
5396 
5397 /* Line 1806 of yacc.c */
5398 #line 1038 "parse.y"
5399  {
5400  /*%%%*/
5402  (yyvsp[(4) - (5)].node));
5403  /* NEW_PREEXE($4)); */
5404  /* local_pop(); */
5405  (yyval.node) = NEW_BEGIN(0);
5406  /*%
5407  $$ = dispatch1(BEGIN, $4);
5408  %*/
5409  }
5410  break;
5411 
5412  case 21:
5413 
5414 /* Line 1806 of yacc.c */
5415 #line 1050 "parse.y"
5416  {lex_state = EXPR_FNAME;}
5417  break;
5418 
5419  case 22:
5420 
5421 /* Line 1806 of yacc.c */
5422 #line 1051 "parse.y"
5423  {
5424  /*%%%*/
5425  (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
5426  /*%
5427  $$ = dispatch2(alias, $2, $4);
5428  %*/
5429  }
5430  break;
5431 
5432  case 23:
5433 
5434 /* Line 1806 of yacc.c */
5435 #line 1059 "parse.y"
5436  {
5437  /*%%%*/
5438  (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
5439  /*%
5440  $$ = dispatch2(var_alias, $2, $3);
5441  %*/
5442  }
5443  break;
5444 
5445  case 24:
5446 
5447 /* Line 1806 of yacc.c */
5448 #line 1067 "parse.y"
5449  {
5450  /*%%%*/
5451  char buf[2];
5452  buf[0] = '$';
5453  buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
5454  (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
5455  /*%
5456  $$ = dispatch2(var_alias, $2, $3);
5457  %*/
5458  }
5459  break;
5460 
5461  case 25:
5462 
5463 /* Line 1806 of yacc.c */
5464 #line 1078 "parse.y"
5465  {
5466  /*%%%*/
5467  yyerror("can't make alias for the number variables");
5468  (yyval.node) = NEW_BEGIN(0);
5469  /*%
5470  $$ = dispatch2(var_alias, $2, $3);
5471  $$ = dispatch1(alias_error, $$);
5472  %*/
5473  }
5474  break;
5475 
5476  case 26:
5477 
5478 /* Line 1806 of yacc.c */
5479 #line 1088 "parse.y"
5480  {
5481  /*%%%*/
5482  (yyval.node) = (yyvsp[(2) - (2)].node);
5483  /*%
5484  $$ = dispatch1(undef, $2);
5485  %*/
5486  }
5487  break;
5488 
5489  case 27:
5490 
5491 /* Line 1806 of yacc.c */
5492 #line 1096 "parse.y"
5493  {
5494  /*%%%*/
5495  (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
5496  fixpos((yyval.node), (yyvsp[(3) - (3)].node));
5497  /*%
5498  $$ = dispatch2(if_mod, $3, $1);
5499  %*/
5500  }
5501  break;
5502 
5503  case 28:
5504 
5505 /* Line 1806 of yacc.c */
5506 #line 1105 "parse.y"
5507  {
5508  /*%%%*/
5509  (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
5510  fixpos((yyval.node), (yyvsp[(3) - (3)].node));
5511  /*%
5512  $$ = dispatch2(unless_mod, $3, $1);
5513  %*/
5514  }
5515  break;
5516 
5517  case 29:
5518 
5519 /* Line 1806 of yacc.c */
5520 #line 1114 "parse.y"
5521  {
5522  /*%%%*/
5523  if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
5524  (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
5525  }
5526  else {
5527  (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
5528  }
5529  /*%
5530  $$ = dispatch2(while_mod, $3, $1);
5531  %*/
5532  }
5533  break;
5534 
5535  case 30:
5536 
5537 /* Line 1806 of yacc.c */
5538 #line 1127 "parse.y"
5539  {
5540  /*%%%*/
5541  if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
5542  (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
5543  }
5544  else {
5545  (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
5546  }
5547  /*%
5548  $$ = dispatch2(until_mod, $3, $1);
5549  %*/
5550  }
5551  break;
5552 
5553  case 31:
5554 
5555 /* Line 1806 of yacc.c */
5556 #line 1140 "parse.y"
5557  {
5558  /*%%%*/
5559  NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
5560  (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
5561  /*%
5562  $$ = dispatch2(rescue_mod, $1, $3);
5563  %*/
5564  }
5565  break;
5566 
5567  case 32:
5568 
5569 /* Line 1806 of yacc.c */
5570 #line 1149 "parse.y"
5571  {
5572  if (in_def || in_single) {
5573  rb_warn0("END in method; use at_exit");
5574  }
5575  /*%%%*/
5576  (yyval.node) = NEW_POSTEXE(NEW_NODE(
5577  NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].node) /* body */, 0 /* args */));
5578  /*%
5579  $$ = dispatch1(END, $3);
5580  %*/
5581  }
5582  break;
5583 
5584  case 34:
5585 
5586 /* Line 1806 of yacc.c */
5587 #line 1162 "parse.y"
5588  {
5589  /*%%%*/
5590  value_expr((yyvsp[(3) - (3)].node));
5591  (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
5592  (yyval.node) = (yyvsp[(1) - (3)].node);
5593  /*%
5594  $$ = dispatch2(massign, $1, $3);
5595  %*/
5596  }
5597  break;
5598 
5599  case 35:
5600 
5601 /* Line 1806 of yacc.c */
5602 #line 1172 "parse.y"
5603  {
5604  value_expr((yyvsp[(3) - (3)].node));
5605  (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
5606  }
5607  break;
5608 
5609  case 36:
5610 
5611 /* Line 1806 of yacc.c */
5612 #line 1177 "parse.y"
5613  {
5614  /*%%%*/
5615  NODE *args;
5616 
5617  value_expr((yyvsp[(6) - (6)].node));
5618  if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
5619  args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
5620  if ((yyvsp[(5) - (6)].id) == tOROP) {
5621  (yyvsp[(5) - (6)].id) = 0;
5622  }
5623  else if ((yyvsp[(5) - (6)].id) == tANDOP) {
5624  (yyvsp[(5) - (6)].id) = 1;
5625  }
5626  (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
5627  fixpos((yyval.node), (yyvsp[(1) - (6)].node));
5628  /*%
5629  $$ = dispatch2(aref_field, $1, escape_Qundef($3));
5630  $$ = dispatch3(opassign, $$, $5, $6);
5631  %*/
5632  }
5633  break;
5634 
5635  case 37:
5636 
5637 /* Line 1806 of yacc.c */
5638 #line 1198 "parse.y"
5639  {
5640  value_expr((yyvsp[(5) - (5)].node));
5641  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
5642  }
5643  break;
5644 
5645  case 38:
5646 
5647 /* Line 1806 of yacc.c */
5648 #line 1203 "parse.y"
5649  {
5650  value_expr((yyvsp[(5) - (5)].node));
5651  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
5652  }
5653  break;
5654 
5655  case 39:
5656 
5657 /* Line 1806 of yacc.c */
5658 #line 1208 "parse.y"
5659  {
5660  /*%%%*/
5661  (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
5662  (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
5663  /*%
5664  $$ = dispatch2(const_path_field, $1, $3);
5665  $$ = dispatch3(opassign, $$, $4, $5);
5666  %*/
5667  }
5668  break;
5669 
5670  case 40:
5671 
5672 /* Line 1806 of yacc.c */
5673 #line 1218 "parse.y"
5674  {
5675  value_expr((yyvsp[(5) - (5)].node));
5676  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_intern("::"), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
5677  }
5678  break;
5679 
5680  case 41:
5681 
5682 /* Line 1806 of yacc.c */
5683 #line 1223 "parse.y"
5684  {
5685  /*%%%*/
5686  rb_backref_error((yyvsp[(1) - (3)].node));
5687  (yyval.node) = NEW_BEGIN(0);
5688  /*%
5689  $$ = dispatch2(assign, dispatch1(var_field, $1), $3);
5690  $$ = dispatch1(assign_error, $$);
5691  %*/
5692  }
5693  break;
5694 
5695  case 42:
5696 
5697 /* Line 1806 of yacc.c */
5698 #line 1233 "parse.y"
5699  {
5700  /*%%%*/
5701  value_expr((yyvsp[(3) - (3)].node));
5702  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5703  /*%
5704  $$ = dispatch2(assign, $1, $3);
5705  %*/
5706  }
5707  break;
5708 
5709  case 43:
5710 
5711 /* Line 1806 of yacc.c */
5712 #line 1242 "parse.y"
5713  {
5714  /*%%%*/
5715  (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
5716  (yyval.node) = (yyvsp[(1) - (3)].node);
5717  /*%
5718  $$ = dispatch2(massign, $1, $3);
5719  %*/
5720  }
5721  break;
5722 
5723  case 44:
5724 
5725 /* Line 1806 of yacc.c */
5726 #line 1251 "parse.y"
5727  {
5728  /*%%%*/
5729  (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
5730  (yyval.node) = (yyvsp[(1) - (3)].node);
5731  /*%
5732  $$ = dispatch2(massign, $1, $3);
5733  %*/
5734  }
5735  break;
5736 
5737  case 46:
5738 
5739 /* Line 1806 of yacc.c */
5740 #line 1263 "parse.y"
5741  {
5742  /*%%%*/
5743  value_expr((yyvsp[(3) - (3)].node));
5744  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5745  /*%
5746  $$ = dispatch2(assign, $1, $3);
5747  %*/
5748  }
5749  break;
5750 
5751  case 47:
5752 
5753 /* Line 1806 of yacc.c */
5754 #line 1272 "parse.y"
5755  {
5756  /*%%%*/
5757  value_expr((yyvsp[(3) - (3)].node));
5758  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5759  /*%
5760  $$ = dispatch2(assign, $1, $3);
5761  %*/
5762  }
5763  break;
5764 
5765  case 49:
5766 
5767 /* Line 1806 of yacc.c */
5768 #line 1285 "parse.y"
5769  {
5770  /*%%%*/
5771  (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5772  /*%
5773  $$ = dispatch3(binary, $1, ripper_intern("and"), $3);
5774  %*/
5775  }
5776  break;
5777 
5778  case 50:
5779 
5780 /* Line 1806 of yacc.c */
5781 #line 1293 "parse.y"
5782  {
5783  /*%%%*/
5784  (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5785  /*%
5786  $$ = dispatch3(binary, $1, ripper_intern("or"), $3);
5787  %*/
5788  }
5789  break;
5790 
5791  case 51:
5792 
5793 /* Line 1806 of yacc.c */
5794 #line 1301 "parse.y"
5795  {
5796  /*%%%*/
5797  (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
5798  /*%
5799  $$ = dispatch2(unary, ripper_intern("not"), $3);
5800  %*/
5801  }
5802  break;
5803 
5804  case 52:
5805 
5806 /* Line 1806 of yacc.c */
5807 #line 1309 "parse.y"
5808  {
5809  /*%%%*/
5810  (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
5811  /*%
5812  $$ = dispatch2(unary, ripper_id2sym('!'), $2);
5813  %*/
5814  }
5815  break;
5816 
5817  case 54:
5818 
5819 /* Line 1806 of yacc.c */
5820 #line 1320 "parse.y"
5821  {
5822  /*%%%*/
5823  value_expr((yyvsp[(1) - (1)].node));
5824  (yyval.node) = (yyvsp[(1) - (1)].node);
5825  if (!(yyval.node)) (yyval.node) = NEW_NIL();
5826  /*%
5827  $$ = $1;
5828  %*/
5829  }
5830  break;
5831 
5832  case 58:
5833 
5834 /* Line 1806 of yacc.c */
5835 #line 1337 "parse.y"
5836  {
5837  /*%%%*/
5838  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
5839  /*%
5840  $$ = dispatch3(call, $1, $2, $3);
5841  $$ = method_arg($$, $4);
5842  %*/
5843  }
5844  break;
5845 
5846  case 59:
5847 
5848 /* Line 1806 of yacc.c */
5849 #line 1348 "parse.y"
5850  {
5851  (yyvsp[(1) - (1)].vars) = dyna_push();
5852  /*%%%*/
5853  (yyval.num) = ruby_sourceline;
5854  /*%
5855  %*/
5856  }
5857  break;
5858 
5859  case 60:
5860 
5861 /* Line 1806 of yacc.c */
5862 #line 1358 "parse.y"
5863  {
5864  /*%%%*/
5865  (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
5866  nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
5867  /*%
5868  $$ = dispatch2(brace_block, escape_Qundef($3), $4);
5869  %*/
5870  dyna_pop((yyvsp[(1) - (5)].vars));
5871  }
5872  break;
5873 
5874  case 61:
5875 
5876 /* Line 1806 of yacc.c */
5877 #line 1370 "parse.y"
5878  {
5879  /*%%%*/
5880  (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
5881  nd_set_line((yyval.node), tokline);
5882  /*%
5883  %*/
5884  }
5885  break;
5886 
5887  case 62:
5888 
5889 /* Line 1806 of yacc.c */
5890 #line 1380 "parse.y"
5891  {
5892  /*%%%*/
5893  (yyval.node) = (yyvsp[(1) - (2)].node);
5894  (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
5895  /*%
5896  $$ = dispatch2(command, $1, $2);
5897  %*/
5898  }
5899  break;
5900 
5901  case 63:
5902 
5903 /* Line 1806 of yacc.c */
5904 #line 1389 "parse.y"
5905  {
5906  /*%%%*/
5907  block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
5908  (yyvsp[(1) - (3)].node)->nd_args = (yyvsp[(2) - (3)].node);
5909  (yyvsp[(3) - (3)].node)->nd_iter = (yyvsp[(1) - (3)].node);
5910  (yyval.node) = (yyvsp[(3) - (3)].node);
5911  fixpos((yyval.node), (yyvsp[(1) - (3)].node));
5912  /*%
5913  $$ = dispatch2(command, $1, $2);
5914  $$ = method_add_block($$, $3);
5915  %*/
5916  }
5917  break;
5918 
5919  case 64:
5920 
5921 /* Line 1806 of yacc.c */
5922 #line 1402 "parse.y"
5923  {
5924  /*%%%*/
5925  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
5926  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
5927  /*%
5928  $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
5929  %*/
5930  }
5931  break;
5932 
5933  case 65:
5934 
5935 /* Line 1806 of yacc.c */
5936 #line 1411 "parse.y"
5937  {
5938  /*%%%*/
5939  block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
5940  (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
5941  (yyval.node) = (yyvsp[(5) - (5)].node);
5942  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
5943  /*%
5944  $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
5945  $$ = method_add_block($$, $5);
5946  %*/
5947  }
5948  break;
5949 
5950  case 66:
5951 
5952 /* Line 1806 of yacc.c */
5953 #line 1423 "parse.y"
5954  {
5955  /*%%%*/
5956  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
5957  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
5958  /*%
5959  $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
5960  %*/
5961  }
5962  break;
5963 
5964  case 67:
5965 
5966 /* Line 1806 of yacc.c */
5967 #line 1432 "parse.y"
5968  {
5969  /*%%%*/
5970  block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
5971  (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
5972  (yyval.node) = (yyvsp[(5) - (5)].node);
5973  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
5974  /*%
5975  $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
5976  $$ = method_add_block($$, $5);
5977  %*/
5978  }
5979  break;
5980 
5981  case 68:
5982 
5983 /* Line 1806 of yacc.c */
5984 #line 1444 "parse.y"
5985  {
5986  /*%%%*/
5987  (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
5988  fixpos((yyval.node), (yyvsp[(2) - (2)].node));
5989  /*%
5990  $$ = dispatch1(super, $2);
5991  %*/
5992  }
5993  break;
5994 
5995  case 69:
5996 
5997 /* Line 1806 of yacc.c */
5998 #line 1453 "parse.y"
5999  {
6000  /*%%%*/
6001  (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
6002  fixpos((yyval.node), (yyvsp[(2) - (2)].node));
6003  /*%
6004  $$ = dispatch1(yield, $2);
6005  %*/
6006  }
6007  break;
6008 
6009  case 70:
6010 
6011 /* Line 1806 of yacc.c */
6012 #line 1462 "parse.y"
6013  {
6014  /*%%%*/
6015  (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
6016  /*%
6017  $$ = dispatch1(return, $2);
6018  %*/
6019  }
6020  break;
6021 
6022  case 71:
6023 
6024 /* Line 1806 of yacc.c */
6025 #line 1470 "parse.y"
6026  {
6027  /*%%%*/
6028  (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
6029  /*%
6030  $$ = dispatch1(break, $2);
6031  %*/
6032  }
6033  break;
6034 
6035  case 72:
6036 
6037 /* Line 1806 of yacc.c */
6038 #line 1478 "parse.y"
6039  {
6040  /*%%%*/
6041  (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
6042  /*%
6043  $$ = dispatch1(next, $2);
6044  %*/
6045  }
6046  break;
6047 
6048  case 74:
6049 
6050 /* Line 1806 of yacc.c */
6051 #line 1489 "parse.y"
6052  {
6053  /*%%%*/
6054  (yyval.node) = (yyvsp[(2) - (3)].node);
6055  /*%
6056  $$ = dispatch1(mlhs_paren, $2);
6057  %*/
6058  }
6059  break;
6060 
6061  case 76:
6062 
6063 /* Line 1806 of yacc.c */
6064 #line 1500 "parse.y"
6065  {
6066  /*%%%*/
6067  (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
6068  /*%
6069  $$ = dispatch1(mlhs_paren, $2);
6070  %*/
6071  }
6072  break;
6073 
6074  case 77:
6075 
6076 /* Line 1806 of yacc.c */
6077 #line 1510 "parse.y"
6078  {
6079  /*%%%*/
6080  (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
6081  /*%
6082  $$ = $1;
6083  %*/
6084  }
6085  break;
6086 
6087  case 78:
6088 
6089 /* Line 1806 of yacc.c */
6090 #line 1518 "parse.y"
6091  {
6092  /*%%%*/
6093  (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
6094  /*%
6095  $$ = mlhs_add($1, $2);
6096  %*/
6097  }
6098  break;
6099 
6100  case 79:
6101 
6102 /* Line 1806 of yacc.c */
6103 #line 1526 "parse.y"
6104  {
6105  /*%%%*/
6106  (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6107  /*%
6108  $$ = mlhs_add_star($1, $3);
6109  %*/
6110  }
6111  break;
6112 
6113  case 80:
6114 
6115 /* Line 1806 of yacc.c */
6116 #line 1534 "parse.y"
6117  {
6118  /*%%%*/
6119  (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
6120  /*%
6121  $1 = mlhs_add_star($1, $3);
6122  $$ = mlhs_add($1, $5);
6123  %*/
6124  }
6125  break;
6126 
6127  case 81:
6128 
6129 /* Line 1806 of yacc.c */
6130 #line 1543 "parse.y"
6131  {
6132  /*%%%*/
6133  (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
6134  /*%
6135  $$ = mlhs_add_star($1, Qnil);
6136  %*/
6137  }
6138  break;
6139 
6140  case 82:
6141 
6142 /* Line 1806 of yacc.c */
6143 #line 1551 "parse.y"
6144  {
6145  /*%%%*/
6146  (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
6147  /*%
6148  $1 = mlhs_add_star($1, Qnil);
6149  $$ = mlhs_add($1, $4);
6150  %*/
6151  }
6152  break;
6153 
6154  case 83:
6155 
6156 /* Line 1806 of yacc.c */
6157 #line 1560 "parse.y"
6158  {
6159  /*%%%*/
6160  (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
6161  /*%
6162  $$ = mlhs_add_star(mlhs_new(), $2);
6163  %*/
6164  }
6165  break;
6166 
6167  case 84:
6168 
6169 /* Line 1806 of yacc.c */
6170 #line 1568 "parse.y"
6171  {
6172  /*%%%*/
6173  (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
6174  /*%
6175  $2 = mlhs_add_star(mlhs_new(), $2);
6176  $$ = mlhs_add($2, $4);
6177  %*/
6178  }
6179  break;
6180 
6181  case 85:
6182 
6183 /* Line 1806 of yacc.c */
6184 #line 1577 "parse.y"
6185  {
6186  /*%%%*/
6187  (yyval.node) = NEW_MASGN(0, -1);
6188  /*%
6189  $$ = mlhs_add_star(mlhs_new(), Qnil);
6190  %*/
6191  }
6192  break;
6193 
6194  case 86:
6195 
6196 /* Line 1806 of yacc.c */
6197 #line 1585 "parse.y"
6198  {
6199  /*%%%*/
6200  (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
6201  /*%
6202  $$ = mlhs_add_star(mlhs_new(), Qnil);
6203  $$ = mlhs_add($$, $3);
6204  %*/
6205  }
6206  break;
6207 
6208  case 88:
6209 
6210 /* Line 1806 of yacc.c */
6211 #line 1597 "parse.y"
6212  {
6213  /*%%%*/
6214  (yyval.node) = (yyvsp[(2) - (3)].node);
6215  /*%
6216  $$ = dispatch1(mlhs_paren, $2);
6217  %*/
6218  }
6219  break;
6220 
6221  case 89:
6222 
6223 /* Line 1806 of yacc.c */
6224 #line 1607 "parse.y"
6225  {
6226  /*%%%*/
6227  (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
6228  /*%
6229  $$ = mlhs_add(mlhs_new(), $1);
6230  %*/
6231  }
6232  break;
6233 
6234  case 90:
6235 
6236 /* Line 1806 of yacc.c */
6237 #line 1615 "parse.y"
6238  {
6239  /*%%%*/
6240  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
6241  /*%
6242  $$ = mlhs_add($1, $2);
6243  %*/
6244  }
6245  break;
6246 
6247  case 91:
6248 
6249 /* Line 1806 of yacc.c */
6250 #line 1625 "parse.y"
6251  {
6252  /*%%%*/
6253  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
6254  /*%
6255  $$ = mlhs_add(mlhs_new(), $1);
6256  %*/
6257  }
6258  break;
6259 
6260  case 92:
6261 
6262 /* Line 1806 of yacc.c */
6263 #line 1633 "parse.y"
6264  {
6265  /*%%%*/
6266  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6267  /*%
6268  $$ = mlhs_add($1, $3);
6269  %*/
6270  }
6271  break;
6272 
6273  case 93:
6274 
6275 /* Line 1806 of yacc.c */
6276 #line 1643 "parse.y"
6277  {
6278  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6279  }
6280  break;
6281 
6282  case 94:
6283 
6284 /* Line 1806 of yacc.c */
6285 #line 1647 "parse.y"
6286  {
6287  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6288  }
6289  break;
6290 
6291  case 95:
6292 
6293 /* Line 1806 of yacc.c */
6294 #line 1651 "parse.y"
6295  {
6296  /*%%%*/
6297  (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
6298  /*%
6299  $$ = dispatch2(aref_field, $1, escape_Qundef($3));
6300  %*/
6301  }
6302  break;
6303 
6304  case 96:
6305 
6306 /* Line 1806 of yacc.c */
6307 #line 1659 "parse.y"
6308  {
6309  /*%%%*/
6310  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6311  /*%
6312  $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
6313  %*/
6314  }
6315  break;
6316 
6317  case 97:
6318 
6319 /* Line 1806 of yacc.c */
6320 #line 1667 "parse.y"
6321  {
6322  /*%%%*/
6323  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6324  /*%
6325  $$ = dispatch2(const_path_field, $1, $3);
6326  %*/
6327  }
6328  break;
6329 
6330  case 98:
6331 
6332 /* Line 1806 of yacc.c */
6333 #line 1675 "parse.y"
6334  {
6335  /*%%%*/
6336  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6337  /*%
6338  $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
6339  %*/
6340  }
6341  break;
6342 
6343  case 99:
6344 
6345 /* Line 1806 of yacc.c */
6346 #line 1683 "parse.y"
6347  {
6348  /*%%%*/
6349  if (in_def || in_single)
6350  yyerror("dynamic constant assignment");
6351  (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
6352  /*%
6353  if (in_def || in_single)
6354  yyerror("dynamic constant assignment");
6355  $$ = dispatch2(const_path_field, $1, $3);
6356  %*/
6357  }
6358  break;
6359 
6360  case 100:
6361 
6362 /* Line 1806 of yacc.c */
6363 #line 1695 "parse.y"
6364  {
6365  /*%%%*/
6366  if (in_def || in_single)
6367  yyerror("dynamic constant assignment");
6368  (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
6369  /*%
6370  $$ = dispatch1(top_const_field, $2);
6371  %*/
6372  }
6373  break;
6374 
6375  case 101:
6376 
6377 /* Line 1806 of yacc.c */
6378 #line 1705 "parse.y"
6379  {
6380  /*%%%*/
6381  rb_backref_error((yyvsp[(1) - (1)].node));
6382  (yyval.node) = NEW_BEGIN(0);
6383  /*%
6384  $$ = dispatch1(var_field, $1);
6385  $$ = dispatch1(assign_error, $$);
6386  %*/
6387  }
6388  break;
6389 
6390  case 102:
6391 
6392 /* Line 1806 of yacc.c */
6393 #line 1717 "parse.y"
6394  {
6395  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6396  /*%%%*/
6397  if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
6398  /*%
6399  $$ = dispatch1(var_field, $$);
6400  %*/
6401  }
6402  break;
6403 
6404  case 103:
6405 
6406 /* Line 1806 of yacc.c */
6407 #line 1726 "parse.y"
6408  {
6409  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6410  /*%%%*/
6411  if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
6412  /*%
6413  $$ = dispatch1(var_field, $$);
6414  %*/
6415  }
6416  break;
6417 
6418  case 104:
6419 
6420 /* Line 1806 of yacc.c */
6421 #line 1735 "parse.y"
6422  {
6423  /*%%%*/
6424  (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
6425  /*%
6426  $$ = dispatch2(aref_field, $1, escape_Qundef($3));
6427  %*/
6428  }
6429  break;
6430 
6431  case 105:
6432 
6433 /* Line 1806 of yacc.c */
6434 #line 1743 "parse.y"
6435  {
6436  /*%%%*/
6437  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6438  /*%
6439  $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
6440  %*/
6441  }
6442  break;
6443 
6444  case 106:
6445 
6446 /* Line 1806 of yacc.c */
6447 #line 1751 "parse.y"
6448  {
6449  /*%%%*/
6450  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6451  /*%
6452  $$ = dispatch3(field, $1, ripper_intern("::"), $3);
6453  %*/
6454  }
6455  break;
6456 
6457  case 107:
6458 
6459 /* Line 1806 of yacc.c */
6460 #line 1759 "parse.y"
6461  {
6462  /*%%%*/
6463  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6464  /*%
6465  $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
6466  %*/
6467  }
6468  break;
6469 
6470  case 108:
6471 
6472 /* Line 1806 of yacc.c */
6473 #line 1767 "parse.y"
6474  {
6475  /*%%%*/
6476  if (in_def || in_single)
6477  yyerror("dynamic constant assignment");
6478  (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
6479  /*%
6480  $$ = dispatch2(const_path_field, $1, $3);
6481  if (in_def || in_single) {
6482  $$ = dispatch1(assign_error, $$);
6483  }
6484  %*/
6485  }
6486  break;
6487 
6488  case 109:
6489 
6490 /* Line 1806 of yacc.c */
6491 #line 1780 "parse.y"
6492  {
6493  /*%%%*/
6494  if (in_def || in_single)
6495  yyerror("dynamic constant assignment");
6496  (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
6497  /*%
6498  $$ = dispatch1(top_const_field, $2);
6499  if (in_def || in_single) {
6500  $$ = dispatch1(assign_error, $$);
6501  }
6502  %*/
6503  }
6504  break;
6505 
6506  case 110:
6507 
6508 /* Line 1806 of yacc.c */
6509 #line 1793 "parse.y"
6510  {
6511  /*%%%*/
6512  rb_backref_error((yyvsp[(1) - (1)].node));
6513  (yyval.node) = NEW_BEGIN(0);
6514  /*%
6515  $$ = dispatch1(assign_error, $1);
6516  %*/
6517  }
6518  break;
6519 
6520  case 111:
6521 
6522 /* Line 1806 of yacc.c */
6523 #line 1804 "parse.y"
6524  {
6525  /*%%%*/
6526  yyerror("class/module name must be CONSTANT");
6527  /*%
6528  $$ = dispatch1(class_name_error, $1);
6529  %*/
6530  }
6531  break;
6532 
6533  case 113:
6534 
6535 /* Line 1806 of yacc.c */
6536 #line 1815 "parse.y"
6537  {
6538  /*%%%*/
6539  (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
6540  /*%
6541  $$ = dispatch1(top_const_ref, $2);
6542  %*/
6543  }
6544  break;
6545 
6546  case 114:
6547 
6548 /* Line 1806 of yacc.c */
6549 #line 1823 "parse.y"
6550  {
6551  /*%%%*/
6552  (yyval.node) = NEW_COLON2(0, (yyval.node));
6553  /*%
6554  $$ = dispatch1(const_ref, $1);
6555  %*/
6556  }
6557  break;
6558 
6559  case 115:
6560 
6561 /* Line 1806 of yacc.c */
6562 #line 1831 "parse.y"
6563  {
6564  /*%%%*/
6565  (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6566  /*%
6567  $$ = dispatch2(const_path_ref, $1, $3);
6568  %*/
6569  }
6570  break;
6571 
6572  case 119:
6573 
6574 /* Line 1806 of yacc.c */
6575 #line 1844 "parse.y"
6576  {
6577  lex_state = EXPR_ENDFN;
6578  (yyval.id) = (yyvsp[(1) - (1)].id);
6579  }
6580  break;
6581 
6582  case 120:
6583 
6584 /* Line 1806 of yacc.c */
6585 #line 1849 "parse.y"
6586  {
6587  lex_state = EXPR_ENDFN;
6588  /*%%%*/
6589  (yyval.id) = (yyvsp[(1) - (1)].id);
6590  /*%
6591  $$ = $1;
6592  %*/
6593  }
6594  break;
6595 
6596  case 123:
6597 
6598 /* Line 1806 of yacc.c */
6599 #line 1864 "parse.y"
6600  {
6601  /*%%%*/
6602  (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
6603  /*%
6604  $$ = dispatch1(symbol_literal, $1);
6605  %*/
6606  }
6607  break;
6608 
6609  case 125:
6610 
6611 /* Line 1806 of yacc.c */
6612 #line 1875 "parse.y"
6613  {
6614  /*%%%*/
6615  (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
6616  /*%
6617  $$ = rb_ary_new3(1, $1);
6618  %*/
6619  }
6620  break;
6621 
6622  case 126:
6623 
6624 /* Line 1806 of yacc.c */
6625 #line 1882 "parse.y"
6626  {lex_state = EXPR_FNAME;}
6627  break;
6628 
6629  case 127:
6630 
6631 /* Line 1806 of yacc.c */
6632 #line 1883 "parse.y"
6633  {
6634  /*%%%*/
6635  (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
6636  /*%
6637  rb_ary_push($1, $4);
6638  %*/
6639  }
6640  break;
6641 
6642  case 128:
6643 
6644 /* Line 1806 of yacc.c */
6645 #line 1892 "parse.y"
6646  { ifndef_ripper((yyval.id) = '|'); }
6647  break;
6648 
6649  case 129:
6650 
6651 /* Line 1806 of yacc.c */
6652 #line 1893 "parse.y"
6653  { ifndef_ripper((yyval.id) = '^'); }
6654  break;
6655 
6656  case 130:
6657 
6658 /* Line 1806 of yacc.c */
6659 #line 1894 "parse.y"
6660  { ifndef_ripper((yyval.id) = '&'); }
6661  break;
6662 
6663  case 131:
6664 
6665 /* Line 1806 of yacc.c */
6666 #line 1895 "parse.y"
6667  { ifndef_ripper((yyval.id) = tCMP); }
6668  break;
6669 
6670  case 132:
6671 
6672 /* Line 1806 of yacc.c */
6673 #line 1896 "parse.y"
6674  { ifndef_ripper((yyval.id) = tEQ); }
6675  break;
6676 
6677  case 133:
6678 
6679 /* Line 1806 of yacc.c */
6680 #line 1897 "parse.y"
6681  { ifndef_ripper((yyval.id) = tEQQ); }
6682  break;
6683 
6684  case 134:
6685 
6686 /* Line 1806 of yacc.c */
6687 #line 1898 "parse.y"
6688  { ifndef_ripper((yyval.id) = tMATCH); }
6689  break;
6690 
6691  case 135:
6692 
6693 /* Line 1806 of yacc.c */
6694 #line 1899 "parse.y"
6695  { ifndef_ripper((yyval.id) = tNMATCH); }
6696  break;
6697 
6698  case 136:
6699 
6700 /* Line 1806 of yacc.c */
6701 #line 1900 "parse.y"
6702  { ifndef_ripper((yyval.id) = '>'); }
6703  break;
6704 
6705  case 137:
6706 
6707 /* Line 1806 of yacc.c */
6708 #line 1901 "parse.y"
6709  { ifndef_ripper((yyval.id) = tGEQ); }
6710  break;
6711 
6712  case 138:
6713 
6714 /* Line 1806 of yacc.c */
6715 #line 1902 "parse.y"
6716  { ifndef_ripper((yyval.id) = '<'); }
6717  break;
6718 
6719  case 139:
6720 
6721 /* Line 1806 of yacc.c */
6722 #line 1903 "parse.y"
6723  { ifndef_ripper((yyval.id) = tLEQ); }
6724  break;
6725 
6726  case 140:
6727 
6728 /* Line 1806 of yacc.c */
6729 #line 1904 "parse.y"
6730  { ifndef_ripper((yyval.id) = tNEQ); }
6731  break;
6732 
6733  case 141:
6734 
6735 /* Line 1806 of yacc.c */
6736 #line 1905 "parse.y"
6737  { ifndef_ripper((yyval.id) = tLSHFT); }
6738  break;
6739 
6740  case 142:
6741 
6742 /* Line 1806 of yacc.c */
6743 #line 1906 "parse.y"
6744  { ifndef_ripper((yyval.id) = tRSHFT); }
6745  break;
6746 
6747  case 143:
6748 
6749 /* Line 1806 of yacc.c */
6750 #line 1907 "parse.y"
6751  { ifndef_ripper((yyval.id) = '+'); }
6752  break;
6753 
6754  case 144:
6755 
6756 /* Line 1806 of yacc.c */
6757 #line 1908 "parse.y"
6758  { ifndef_ripper((yyval.id) = '-'); }
6759  break;
6760 
6761  case 145:
6762 
6763 /* Line 1806 of yacc.c */
6764 #line 1909 "parse.y"
6765  { ifndef_ripper((yyval.id) = '*'); }
6766  break;
6767 
6768  case 146:
6769 
6770 /* Line 1806 of yacc.c */
6771 #line 1910 "parse.y"
6772  { ifndef_ripper((yyval.id) = '*'); }
6773  break;
6774 
6775  case 147:
6776 
6777 /* Line 1806 of yacc.c */
6778 #line 1911 "parse.y"
6779  { ifndef_ripper((yyval.id) = '/'); }
6780  break;
6781 
6782  case 148:
6783 
6784 /* Line 1806 of yacc.c */
6785 #line 1912 "parse.y"
6786  { ifndef_ripper((yyval.id) = '%'); }
6787  break;
6788 
6789  case 149:
6790 
6791 /* Line 1806 of yacc.c */
6792 #line 1913 "parse.y"
6793  { ifndef_ripper((yyval.id) = tPOW); }
6794  break;
6795 
6796  case 150:
6797 
6798 /* Line 1806 of yacc.c */
6799 #line 1914 "parse.y"
6800  { ifndef_ripper((yyval.id) = tDSTAR); }
6801  break;
6802 
6803  case 151:
6804 
6805 /* Line 1806 of yacc.c */
6806 #line 1915 "parse.y"
6807  { ifndef_ripper((yyval.id) = '!'); }
6808  break;
6809 
6810  case 152:
6811 
6812 /* Line 1806 of yacc.c */
6813 #line 1916 "parse.y"
6814  { ifndef_ripper((yyval.id) = '~'); }
6815  break;
6816 
6817  case 153:
6818 
6819 /* Line 1806 of yacc.c */
6820 #line 1917 "parse.y"
6821  { ifndef_ripper((yyval.id) = tUPLUS); }
6822  break;
6823 
6824  case 154:
6825 
6826 /* Line 1806 of yacc.c */
6827 #line 1918 "parse.y"
6828  { ifndef_ripper((yyval.id) = tUMINUS); }
6829  break;
6830 
6831  case 155:
6832 
6833 /* Line 1806 of yacc.c */
6834 #line 1919 "parse.y"
6835  { ifndef_ripper((yyval.id) = tAREF); }
6836  break;
6837 
6838  case 156:
6839 
6840 /* Line 1806 of yacc.c */
6841 #line 1920 "parse.y"
6842  { ifndef_ripper((yyval.id) = tASET); }
6843  break;
6844 
6845  case 157:
6846 
6847 /* Line 1806 of yacc.c */
6848 #line 1921 "parse.y"
6849  { ifndef_ripper((yyval.id) = '`'); }
6850  break;
6851 
6852  case 199:
6853 
6854 /* Line 1806 of yacc.c */
6855 #line 1939 "parse.y"
6856  {
6857  /*%%%*/
6858  value_expr((yyvsp[(3) - (3)].node));
6859  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6860  /*%
6861  $$ = dispatch2(assign, $1, $3);
6862  %*/
6863  }
6864  break;
6865 
6866  case 200:
6867 
6868 /* Line 1806 of yacc.c */
6869 #line 1948 "parse.y"
6870  {
6871  /*%%%*/
6872  value_expr((yyvsp[(3) - (5)].node));
6873  (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
6874  (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
6875  /*%
6876  $$ = dispatch2(assign, $1, dispatch2(rescue_mod, $3, $5));
6877  %*/
6878  }
6879  break;
6880 
6881  case 201:
6882 
6883 /* Line 1806 of yacc.c */
6884 #line 1958 "parse.y"
6885  {
6886  value_expr((yyvsp[(3) - (3)].node));
6887  (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
6888  }
6889  break;
6890 
6891  case 202:
6892 
6893 /* Line 1806 of yacc.c */
6894 #line 1963 "parse.y"
6895  {
6896  /*%%%*/
6897  value_expr((yyvsp[(3) - (5)].node));
6898  (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
6899  /*%
6900  $3 = dispatch2(rescue_mod, $3, $5);
6901  %*/
6902  (yyval.node) = new_op_assign((yyvsp[(1) - (5)].node), (yyvsp[(2) - (5)].id), (yyvsp[(3) - (5)].node));
6903  }
6904  break;
6905 
6906  case 203:
6907 
6908 /* Line 1806 of yacc.c */
6909 #line 1973 "parse.y"
6910  {
6911  /*%%%*/
6912  NODE *args;
6913 
6914  value_expr((yyvsp[(6) - (6)].node));
6915  if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
6916  if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
6917  args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
6918  }
6919  else {
6920  args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
6921  }
6922  if ((yyvsp[(5) - (6)].id) == tOROP) {
6923  (yyvsp[(5) - (6)].id) = 0;
6924  }
6925  else if ((yyvsp[(5) - (6)].id) == tANDOP) {
6926  (yyvsp[(5) - (6)].id) = 1;
6927  }
6928  (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
6929  fixpos((yyval.node), (yyvsp[(1) - (6)].node));
6930  /*%
6931  $1 = dispatch2(aref_field, $1, escape_Qundef($3));
6932  $$ = dispatch3(opassign, $1, $5, $6);
6933  %*/
6934  }
6935  break;
6936 
6937  case 204:
6938 
6939 /* Line 1806 of yacc.c */
6940 #line 1999 "parse.y"
6941  {
6942  value_expr((yyvsp[(5) - (5)].node));
6943  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
6944  }
6945  break;
6946 
6947  case 205:
6948 
6949 /* Line 1806 of yacc.c */
6950 #line 2004 "parse.y"
6951  {
6952  value_expr((yyvsp[(5) - (5)].node));
6953  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
6954  }
6955  break;
6956 
6957  case 206:
6958 
6959 /* Line 1806 of yacc.c */
6960 #line 2009 "parse.y"
6961  {
6962  value_expr((yyvsp[(5) - (5)].node));
6963  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_intern("::"), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
6964  }
6965  break;
6966 
6967  case 207:
6968 
6969 /* Line 1806 of yacc.c */
6970 #line 2014 "parse.y"
6971  {
6972  /*%%%*/
6973  (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
6974  (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
6975  /*%
6976  $$ = dispatch2(const_path_field, $1, $3);
6977  $$ = dispatch3(opassign, $$, $4, $5);
6978  %*/
6979  }
6980  break;
6981 
6982  case 208:
6983 
6984 /* Line 1806 of yacc.c */
6985 #line 2024 "parse.y"
6986  {
6987  /*%%%*/
6988  (yyval.node) = NEW_COLON3((yyvsp[(2) - (4)].id));
6989  (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
6990  /*%
6991  $$ = dispatch1(top_const_field, $2);
6992  $$ = dispatch3(opassign, $$, $3, $4);
6993  %*/
6994  }
6995  break;
6996 
6997  case 209:
6998 
6999 /* Line 1806 of yacc.c */
7000 #line 2034 "parse.y"
7001  {
7002  /*%%%*/
7003  rb_backref_error((yyvsp[(1) - (3)].node));
7004  (yyval.node) = NEW_BEGIN(0);
7005  /*%
7006  $$ = dispatch1(var_field, $1);
7007  $$ = dispatch3(opassign, $$, $2, $3);
7008  $$ = dispatch1(assign_error, $$);
7009  %*/
7010  }
7011  break;
7012 
7013  case 210:
7014 
7015 /* Line 1806 of yacc.c */
7016 #line 2045 "parse.y"
7017  {
7018  /*%%%*/
7019  value_expr((yyvsp[(1) - (3)].node));
7020  value_expr((yyvsp[(3) - (3)].node));
7021  (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7022  if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
7023  nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
7025  }
7026  /*%
7027  $$ = dispatch2(dot2, $1, $3);
7028  %*/
7029  }
7030  break;
7031 
7032  case 211:
7033 
7034 /* Line 1806 of yacc.c */
7035 #line 2059 "parse.y"
7036  {
7037  /*%%%*/
7038  value_expr((yyvsp[(1) - (3)].node));
7039  value_expr((yyvsp[(3) - (3)].node));
7040  (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7041  if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
7042  nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
7044  }
7045  /*%
7046  $$ = dispatch2(dot3, $1, $3);
7047  %*/
7048  }
7049  break;
7050 
7051  case 212:
7052 
7053 /* Line 1806 of yacc.c */
7054 #line 2073 "parse.y"
7055  {
7056  /*%%%*/
7057  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
7058  /*%
7059  $$ = dispatch3(binary, $1, ID2SYM('+'), $3);
7060  %*/
7061  }
7062  break;
7063 
7064  case 213:
7065 
7066 /* Line 1806 of yacc.c */
7067 #line 2081 "parse.y"
7068  {
7069  /*%%%*/
7070  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
7071  /*%
7072  $$ = dispatch3(binary, $1, ID2SYM('-'), $3);
7073  %*/
7074  }
7075  break;
7076 
7077  case 214:
7078 
7079 /* Line 1806 of yacc.c */
7080 #line 2089 "parse.y"
7081  {
7082  /*%%%*/
7083  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
7084  /*%
7085  $$ = dispatch3(binary, $1, ID2SYM('*'), $3);
7086  %*/
7087  }
7088  break;
7089 
7090  case 215:
7091 
7092 /* Line 1806 of yacc.c */
7093 #line 2097 "parse.y"
7094  {
7095  /*%%%*/
7096  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
7097  /*%
7098  $$ = dispatch3(binary, $1, ID2SYM('/'), $3);
7099  %*/
7100  }
7101  break;
7102 
7103  case 216:
7104 
7105 /* Line 1806 of yacc.c */
7106 #line 2105 "parse.y"
7107  {
7108  /*%%%*/
7109  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
7110  /*%
7111  $$ = dispatch3(binary, $1, ID2SYM('%'), $3);
7112  %*/
7113  }
7114  break;
7115 
7116  case 217:
7117 
7118 /* Line 1806 of yacc.c */
7119 #line 2113 "parse.y"
7120  {
7121  /*%%%*/
7122  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
7123  /*%
7124  $$ = dispatch3(binary, $1, ripper_intern("**"), $3);
7125  %*/
7126  }
7127  break;
7128 
7129  case 218:
7130 
7131 /* Line 1806 of yacc.c */
7132 #line 2121 "parse.y"
7133  {
7134  /*%%%*/
7135  (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
7136  /*%
7137  $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
7138  $$ = dispatch2(unary, ripper_intern("-@"), $$);
7139  %*/
7140  }
7141  break;
7142 
7143  case 219:
7144 
7145 /* Line 1806 of yacc.c */
7146 #line 2130 "parse.y"
7147  {
7148  /*%%%*/
7149  (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
7150  /*%
7151  $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
7152  $$ = dispatch2(unary, ripper_intern("-@"), $$);
7153  %*/
7154  }
7155  break;
7156 
7157  case 220:
7158 
7159 /* Line 1806 of yacc.c */
7160 #line 2139 "parse.y"
7161  {
7162  /*%%%*/
7163  (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
7164  /*%
7165  $$ = dispatch2(unary, ripper_intern("+@"), $2);
7166  %*/
7167  }
7168  break;
7169 
7170  case 221:
7171 
7172 /* Line 1806 of yacc.c */
7173 #line 2147 "parse.y"
7174  {
7175  /*%%%*/
7176  (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
7177  /*%
7178  $$ = dispatch2(unary, ripper_intern("-@"), $2);
7179  %*/
7180  }
7181  break;
7182 
7183  case 222:
7184 
7185 /* Line 1806 of yacc.c */
7186 #line 2155 "parse.y"
7187  {
7188  /*%%%*/
7189  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
7190  /*%
7191  $$ = dispatch3(binary, $1, ID2SYM('|'), $3);
7192  %*/
7193  }
7194  break;
7195 
7196  case 223:
7197 
7198 /* Line 1806 of yacc.c */
7199 #line 2163 "parse.y"
7200  {
7201  /*%%%*/
7202  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
7203  /*%
7204  $$ = dispatch3(binary, $1, ID2SYM('^'), $3);
7205  %*/
7206  }
7207  break;
7208 
7209  case 224:
7210 
7211 /* Line 1806 of yacc.c */
7212 #line 2171 "parse.y"
7213  {
7214  /*%%%*/
7215  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
7216  /*%
7217  $$ = dispatch3(binary, $1, ID2SYM('&'), $3);
7218  %*/
7219  }
7220  break;
7221 
7222  case 225:
7223 
7224 /* Line 1806 of yacc.c */
7225 #line 2179 "parse.y"
7226  {
7227  /*%%%*/
7228  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
7229  /*%
7230  $$ = dispatch3(binary, $1, ripper_intern("<=>"), $3);
7231  %*/
7232  }
7233  break;
7234 
7235  case 226:
7236 
7237 /* Line 1806 of yacc.c */
7238 #line 2187 "parse.y"
7239  {
7240  /*%%%*/
7241  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
7242  /*%
7243  $$ = dispatch3(binary, $1, ID2SYM('>'), $3);
7244  %*/
7245  }
7246  break;
7247 
7248  case 227:
7249 
7250 /* Line 1806 of yacc.c */
7251 #line 2195 "parse.y"
7252  {
7253  /*%%%*/
7254  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
7255  /*%
7256  $$ = dispatch3(binary, $1, ripper_intern(">="), $3);
7257  %*/
7258  }
7259  break;
7260 
7261  case 228:
7262 
7263 /* Line 1806 of yacc.c */
7264 #line 2203 "parse.y"
7265  {
7266  /*%%%*/
7267  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
7268  /*%
7269  $$ = dispatch3(binary, $1, ID2SYM('<'), $3);
7270  %*/
7271  }
7272  break;
7273 
7274  case 229:
7275 
7276 /* Line 1806 of yacc.c */
7277 #line 2211 "parse.y"
7278  {
7279  /*%%%*/
7280  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
7281  /*%
7282  $$ = dispatch3(binary, $1, ripper_intern("<="), $3);
7283  %*/
7284  }
7285  break;
7286 
7287  case 230:
7288 
7289 /* Line 1806 of yacc.c */
7290 #line 2219 "parse.y"
7291  {
7292  /*%%%*/
7293  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
7294  /*%
7295  $$ = dispatch3(binary, $1, ripper_intern("=="), $3);
7296  %*/
7297  }
7298  break;
7299 
7300  case 231:
7301 
7302 /* Line 1806 of yacc.c */
7303 #line 2227 "parse.y"
7304  {
7305  /*%%%*/
7306  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
7307  /*%
7308  $$ = dispatch3(binary, $1, ripper_intern("==="), $3);
7309  %*/
7310  }
7311  break;
7312 
7313  case 232:
7314 
7315 /* Line 1806 of yacc.c */
7316 #line 2235 "parse.y"
7317  {
7318  /*%%%*/
7319  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
7320  /*%
7321  $$ = dispatch3(binary, $1, ripper_intern("!="), $3);
7322  %*/
7323  }
7324  break;
7325 
7326  case 233:
7327 
7328 /* Line 1806 of yacc.c */
7329 #line 2243 "parse.y"
7330  {
7331  /*%%%*/
7332  (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7333  if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && RB_TYPE_P((yyvsp[(1) - (3)].node)->nd_lit, T_REGEXP)) {
7334  (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
7335  }
7336  /*%
7337  $$ = dispatch3(binary, $1, ripper_intern("=~"), $3);
7338  %*/
7339  }
7340  break;
7341 
7342  case 234:
7343 
7344 /* Line 1806 of yacc.c */
7345 #line 2254 "parse.y"
7346  {
7347  /*%%%*/
7348  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
7349  /*%
7350  $$ = dispatch3(binary, $1, ripper_intern("!~"), $3);
7351  %*/
7352  }
7353  break;
7354 
7355  case 235:
7356 
7357 /* Line 1806 of yacc.c */
7358 #line 2262 "parse.y"
7359  {
7360  /*%%%*/
7361  (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
7362  /*%
7363  $$ = dispatch2(unary, ID2SYM('!'), $2);
7364  %*/
7365  }
7366  break;
7367 
7368  case 236:
7369 
7370 /* Line 1806 of yacc.c */
7371 #line 2270 "parse.y"
7372  {
7373  /*%%%*/
7374  (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
7375  /*%
7376  $$ = dispatch2(unary, ID2SYM('~'), $2);
7377  %*/
7378  }
7379  break;
7380 
7381  case 237:
7382 
7383 /* Line 1806 of yacc.c */
7384 #line 2278 "parse.y"
7385  {
7386  /*%%%*/
7387  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
7388  /*%
7389  $$ = dispatch3(binary, $1, ripper_intern("<<"), $3);
7390  %*/
7391  }
7392  break;
7393 
7394  case 238:
7395 
7396 /* Line 1806 of yacc.c */
7397 #line 2286 "parse.y"
7398  {
7399  /*%%%*/
7400  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
7401  /*%
7402  $$ = dispatch3(binary, $1, ripper_intern(">>"), $3);
7403  %*/
7404  }
7405  break;
7406 
7407  case 239:
7408 
7409 /* Line 1806 of yacc.c */
7410 #line 2294 "parse.y"
7411  {
7412  /*%%%*/
7413  (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7414  /*%
7415  $$ = dispatch3(binary, $1, ripper_intern("&&"), $3);
7416  %*/
7417  }
7418  break;
7419 
7420  case 240:
7421 
7422 /* Line 1806 of yacc.c */
7423 #line 2302 "parse.y"
7424  {
7425  /*%%%*/
7426  (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7427  /*%
7428  $$ = dispatch3(binary, $1, ripper_intern("||"), $3);
7429  %*/
7430  }
7431  break;
7432 
7433  case 241:
7434 
7435 /* Line 1806 of yacc.c */
7436 #line 2309 "parse.y"
7437  {in_defined = 1;}
7438  break;
7439 
7440  case 242:
7441 
7442 /* Line 1806 of yacc.c */
7443 #line 2310 "parse.y"
7444  {
7445  /*%%%*/
7446  in_defined = 0;
7447  (yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node));
7448  /*%
7449  in_defined = 0;
7450  $$ = dispatch1(defined, $4);
7451  %*/
7452  }
7453  break;
7454 
7455  case 243:
7456 
7457 /* Line 1806 of yacc.c */
7458 #line 2320 "parse.y"
7459  {
7460  /*%%%*/
7461  value_expr((yyvsp[(1) - (6)].node));
7462  (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
7463  fixpos((yyval.node), (yyvsp[(1) - (6)].node));
7464  /*%
7465  $$ = dispatch3(ifop, $1, $3, $6);
7466  %*/
7467  }
7468  break;
7469 
7470  case 244:
7471 
7472 /* Line 1806 of yacc.c */
7473 #line 2330 "parse.y"
7474  {
7475  (yyval.node) = (yyvsp[(1) - (1)].node);
7476  }
7477  break;
7478 
7479  case 245:
7480 
7481 /* Line 1806 of yacc.c */
7482 #line 2336 "parse.y"
7483  {
7484  /*%%%*/
7485  value_expr((yyvsp[(1) - (1)].node));
7486  (yyval.node) = (yyvsp[(1) - (1)].node);
7487  if (!(yyval.node)) (yyval.node) = NEW_NIL();
7488  /*%
7489  $$ = $1;
7490  %*/
7491  }
7492  break;
7493 
7494  case 247:
7495 
7496 /* Line 1806 of yacc.c */
7497 #line 2349 "parse.y"
7498  {
7499  (yyval.node) = (yyvsp[(1) - (2)].node);
7500  }
7501  break;
7502 
7503  case 248:
7504 
7505 /* Line 1806 of yacc.c */
7506 #line 2353 "parse.y"
7507  {
7508  /*%%%*/
7509  (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
7510  /*%
7511  $$ = arg_add_assocs($1, $3);
7512  %*/
7513  }
7514  break;
7515 
7516  case 249:
7517 
7518 /* Line 1806 of yacc.c */
7519 #line 2361 "parse.y"
7520  {
7521  /*%%%*/
7522  (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
7523  /*%
7524  $$ = arg_add_assocs(arg_new(), $1);
7525  %*/
7526  }
7527  break;
7528 
7529  case 250:
7530 
7531 /* Line 1806 of yacc.c */
7532 #line 2371 "parse.y"
7533  {
7534  /*%%%*/
7535  (yyval.node) = (yyvsp[(2) - (3)].node);
7536  /*%
7537  $$ = dispatch1(arg_paren, escape_Qundef($2));
7538  %*/
7539  }
7540  break;
7541 
7542  case 255:
7543 
7544 /* Line 1806 of yacc.c */
7545 #line 2387 "parse.y"
7546  {
7547  (yyval.node) = (yyvsp[(1) - (2)].node);
7548  }
7549  break;
7550 
7551  case 256:
7552 
7553 /* Line 1806 of yacc.c */
7554 #line 2391 "parse.y"
7555  {
7556  /*%%%*/
7557  (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
7558  /*%
7559  $$ = arg_add_assocs($1, $3);
7560  %*/
7561  }
7562  break;
7563 
7564  case 257:
7565 
7566 /* Line 1806 of yacc.c */
7567 #line 2399 "parse.y"
7568  {
7569  /*%%%*/
7570  (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
7571  /*%
7572  $$ = arg_add_assocs(arg_new(), $1);
7573  %*/
7574  }
7575  break;
7576 
7577  case 258:
7578 
7579 /* Line 1806 of yacc.c */
7580 #line 2409 "parse.y"
7581  {
7582  /*%%%*/
7583  value_expr((yyvsp[(1) - (1)].node));
7584  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
7585  /*%
7586  $$ = arg_add(arg_new(), $1);
7587  %*/
7588  }
7589  break;
7590 
7591  case 259:
7592 
7593 /* Line 1806 of yacc.c */
7594 #line 2418 "parse.y"
7595  {
7596  /*%%%*/
7597  (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
7598  /*%
7599  $$ = arg_add_optblock($1, $2);
7600  %*/
7601  }
7602  break;
7603 
7604  case 260:
7605 
7606 /* Line 1806 of yacc.c */
7607 #line 2426 "parse.y"
7608  {
7609  /*%%%*/
7610  (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
7611  (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
7612  /*%
7613  $$ = arg_add_assocs(arg_new(), $1);
7614  $$ = arg_add_optblock($$, $2);
7615  %*/
7616  }
7617  break;
7618 
7619  case 261:
7620 
7621 /* Line 1806 of yacc.c */
7622 #line 2436 "parse.y"
7623  {
7624  /*%%%*/
7625  (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
7626  (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
7627  /*%
7628  $$ = arg_add_optblock(arg_add_assocs($1, $3), $4);
7629  %*/
7630  }
7631  break;
7632 
7633  case 263:
7634 
7635 /* Line 1806 of yacc.c */
7636 #line 2453 "parse.y"
7637  {
7638  (yyval.val) = cmdarg_stack;
7639  CMDARG_PUSH(1);
7640  }
7641  break;
7642 
7643  case 264:
7644 
7645 /* Line 1806 of yacc.c */
7646 #line 2458 "parse.y"
7647  {
7648  /* CMDARG_POP() */
7649  cmdarg_stack = (yyvsp[(1) - (2)].val);
7650  (yyval.node) = (yyvsp[(2) - (2)].node);
7651  }
7652  break;
7653 
7654  case 265:
7655 
7656 /* Line 1806 of yacc.c */
7657 #line 2466 "parse.y"
7658  {
7659  /*%%%*/
7660  (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
7661  /*%
7662  $$ = $2;
7663  %*/
7664  }
7665  break;
7666 
7667  case 266:
7668 
7669 /* Line 1806 of yacc.c */
7670 #line 2476 "parse.y"
7671  {
7672  (yyval.node) = (yyvsp[(2) - (2)].node);
7673  }
7674  break;
7675 
7676  case 267:
7677 
7678 /* Line 1806 of yacc.c */
7679 #line 2480 "parse.y"
7680  {
7681  (yyval.node) = 0;
7682  }
7683  break;
7684 
7685  case 268:
7686 
7687 /* Line 1806 of yacc.c */
7688 #line 2486 "parse.y"
7689  {
7690  /*%%%*/
7691  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
7692  /*%
7693  $$ = arg_add(arg_new(), $1);
7694  %*/
7695  }
7696  break;
7697 
7698  case 269:
7699 
7700 /* Line 1806 of yacc.c */
7701 #line 2494 "parse.y"
7702  {
7703  /*%%%*/
7704  (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
7705  /*%
7706  $$ = arg_add_star(arg_new(), $2);
7707  %*/
7708  }
7709  break;
7710 
7711  case 270:
7712 
7713 /* Line 1806 of yacc.c */
7714 #line 2502 "parse.y"
7715  {
7716  /*%%%*/
7717  NODE *n1;
7718  if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
7719  (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
7720  }
7721  else {
7722  (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7723  }
7724  /*%
7725  $$ = arg_add($1, $3);
7726  %*/
7727  }
7728  break;
7729 
7730  case 271:
7731 
7732 /* Line 1806 of yacc.c */
7733 #line 2516 "parse.y"
7734  {
7735  /*%%%*/
7736  NODE *n1;
7737  if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
7738  (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
7739  }
7740  else {
7741  (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
7742  }
7743  /*%
7744  $$ = arg_add_star($1, $4);
7745  %*/
7746  }
7747  break;
7748 
7749  case 272:
7750 
7751 /* Line 1806 of yacc.c */
7752 #line 2532 "parse.y"
7753  {
7754  /*%%%*/
7755  NODE *n1;
7756  if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
7757  (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
7758  }
7759  else {
7760  (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7761  }
7762  /*%
7763  $$ = mrhs_add(args2mrhs($1), $3);
7764  %*/
7765  }
7766  break;
7767 
7768  case 273:
7769 
7770 /* Line 1806 of yacc.c */
7771 #line 2546 "parse.y"
7772  {
7773  /*%%%*/
7774  NODE *n1;
7775  if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
7776  (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
7777  (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
7778  }
7779  else {
7780  (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
7781  }
7782  /*%
7783  $$ = mrhs_add_star(args2mrhs($1), $4);
7784  %*/
7785  }
7786  break;
7787 
7788  case 274:
7789 
7790 /* Line 1806 of yacc.c */
7791 #line 2561 "parse.y"
7792  {
7793  /*%%%*/
7794  (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
7795  /*%
7796  $$ = mrhs_add_star(mrhs_new(), $2);
7797  %*/
7798  }
7799  break;
7800 
7801  case 285:
7802 
7803 /* Line 1806 of yacc.c */
7804 #line 2581 "parse.y"
7805  {
7806  /*%%%*/
7807  (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
7808  /*%
7809  $$ = method_arg(dispatch1(fcall, $1), arg_new());
7810  %*/
7811  }
7812  break;
7813 
7814  case 286:
7815 
7816 /* Line 1806 of yacc.c */
7817 #line 2589 "parse.y"
7818  {
7819  (yyvsp[(1) - (1)].val) = cmdarg_stack;
7820  cmdarg_stack = 0;
7821  /*%%%*/
7822  (yyval.num) = ruby_sourceline;
7823  /*%
7824  %*/
7825  }
7826  break;
7827 
7828  case 287:
7829 
7830 /* Line 1806 of yacc.c */
7831 #line 2599 "parse.y"
7832  {
7833  cmdarg_stack = (yyvsp[(1) - (4)].val);
7834  /*%%%*/
7835  if ((yyvsp[(3) - (4)].node) == NULL) {
7836  (yyval.node) = NEW_NIL();
7837  }
7838  else {
7839  if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
7840  nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
7841  nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
7842  (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
7843  }
7844  nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
7845  /*%
7846  $$ = dispatch1(begin, $3);
7847  %*/
7848  }
7849  break;
7850 
7851  case 288:
7852 
7853 /* Line 1806 of yacc.c */
7854 #line 2616 "parse.y"
7855  {lex_state = EXPR_ENDARG;}
7856  break;
7857 
7858  case 289:
7859 
7860 /* Line 1806 of yacc.c */
7861 #line 2617 "parse.y"
7862  {
7863  /*%%%*/
7864  (yyval.node) = 0;
7865  /*%
7866  $$ = dispatch1(paren, 0);
7867  %*/
7868  }
7869  break;
7870 
7871  case 290:
7872 
7873 /* Line 1806 of yacc.c */
7874 #line 2625 "parse.y"
7875  {
7876  (yyvsp[(1) - (1)].val) = cmdarg_stack;
7877  cmdarg_stack = 0;
7878  }
7879  break;
7880 
7881  case 291:
7882 
7883 /* Line 1806 of yacc.c */
7884 #line 2629 "parse.y"
7885  {lex_state = EXPR_ENDARG;}
7886  break;
7887 
7888  case 292:
7889 
7890 /* Line 1806 of yacc.c */
7891 #line 2630 "parse.y"
7892  {
7893  cmdarg_stack = (yyvsp[(1) - (5)].val);
7894  /*%%%*/
7895  (yyval.node) = (yyvsp[(3) - (5)].node);
7896  /*%
7897  $$ = dispatch1(paren, $3);
7898  %*/
7899  }
7900  break;
7901 
7902  case 293:
7903 
7904 /* Line 1806 of yacc.c */
7905 #line 2639 "parse.y"
7906  {
7907  /*%%%*/
7908  (yyval.node) = (yyvsp[(2) - (3)].node);
7909  /*%
7910  $$ = dispatch1(paren, $2);
7911  %*/
7912  }
7913  break;
7914 
7915  case 294:
7916 
7917 /* Line 1806 of yacc.c */
7918 #line 2647 "parse.y"
7919  {
7920  /*%%%*/
7921  (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
7922  /*%
7923  $$ = dispatch2(const_path_ref, $1, $3);
7924  %*/
7925  }
7926  break;
7927 
7928  case 295:
7929 
7930 /* Line 1806 of yacc.c */
7931 #line 2655 "parse.y"
7932  {
7933  /*%%%*/
7934  (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
7935  /*%
7936  $$ = dispatch1(top_const_ref, $2);
7937  %*/
7938  }
7939  break;
7940 
7941  case 296:
7942 
7943 /* Line 1806 of yacc.c */
7944 #line 2663 "parse.y"
7945  {
7946  /*%%%*/
7947  if ((yyvsp[(2) - (3)].node) == 0) {
7948  (yyval.node) = NEW_ZARRAY(); /* zero length array*/
7949  }
7950  else {
7951  (yyval.node) = (yyvsp[(2) - (3)].node);
7952  }
7953  /*%
7954  $$ = dispatch1(array, escape_Qundef($2));
7955  %*/
7956  }
7957  break;
7958 
7959  case 297:
7960 
7961 /* Line 1806 of yacc.c */
7962 #line 2676 "parse.y"
7963  {
7964  /*%%%*/
7965  (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node));
7966  /*%
7967  $$ = dispatch1(hash, escape_Qundef($2));
7968  %*/
7969  }
7970  break;
7971 
7972  case 298:
7973 
7974 /* Line 1806 of yacc.c */
7975 #line 2684 "parse.y"
7976  {
7977  /*%%%*/
7978  (yyval.node) = NEW_RETURN(0);
7979  /*%
7980  $$ = dispatch0(return0);
7981  %*/
7982  }
7983  break;
7984 
7985  case 299:
7986 
7987 /* Line 1806 of yacc.c */
7988 #line 2692 "parse.y"
7989  {
7990  /*%%%*/
7991  (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
7992  /*%
7993  $$ = dispatch1(yield, dispatch1(paren, $3));
7994  %*/
7995  }
7996  break;
7997 
7998  case 300:
7999 
8000 /* Line 1806 of yacc.c */
8001 #line 2700 "parse.y"
8002  {
8003  /*%%%*/
8004  (yyval.node) = NEW_YIELD(0);
8005  /*%
8006  $$ = dispatch1(yield, dispatch1(paren, arg_new()));
8007  %*/
8008  }
8009  break;
8010 
8011  case 301:
8012 
8013 /* Line 1806 of yacc.c */
8014 #line 2708 "parse.y"
8015  {
8016  /*%%%*/
8017  (yyval.node) = NEW_YIELD(0);
8018  /*%
8019  $$ = dispatch0(yield0);
8020  %*/
8021  }
8022  break;
8023 
8024  case 302:
8025 
8026 /* Line 1806 of yacc.c */
8027 #line 2715 "parse.y"
8028  {in_defined = 1;}
8029  break;
8030 
8031  case 303:
8032 
8033 /* Line 1806 of yacc.c */
8034 #line 2716 "parse.y"
8035  {
8036  /*%%%*/
8037  in_defined = 0;
8038  (yyval.node) = NEW_DEFINED((yyvsp[(5) - (6)].node));
8039  /*%
8040  in_defined = 0;
8041  $$ = dispatch1(defined, $5);
8042  %*/
8043  }
8044  break;
8045 
8046  case 304:
8047 
8048 /* Line 1806 of yacc.c */
8049 #line 2726 "parse.y"
8050  {
8051  /*%%%*/
8052  (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!');
8053  /*%
8054  $$ = dispatch2(unary, ripper_intern("not"), $3);
8055  %*/
8056  }
8057  break;
8058 
8059  case 305:
8060 
8061 /* Line 1806 of yacc.c */
8062 #line 2734 "parse.y"
8063  {
8064  /*%%%*/
8065  (yyval.node) = call_uni_op(cond(NEW_NIL()), '!');
8066  /*%
8067  $$ = dispatch2(unary, ripper_intern("not"), Qnil);
8068  %*/
8069  }
8070  break;
8071 
8072  case 306:
8073 
8074 /* Line 1806 of yacc.c */
8075 #line 2742 "parse.y"
8076  {
8077  /*%%%*/
8078  (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
8079  (yyval.node) = (yyvsp[(2) - (2)].node);
8080  /*%
8081  $$ = method_arg(dispatch1(fcall, $1), arg_new());
8082  $$ = method_add_block($$, $2);
8083  %*/
8084  }
8085  break;
8086 
8087  case 308:
8088 
8089 /* Line 1806 of yacc.c */
8090 #line 2753 "parse.y"
8091  {
8092  /*%%%*/
8093  block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
8094  (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
8095  (yyval.node) = (yyvsp[(2) - (2)].node);
8096  /*%
8097  $$ = method_add_block($1, $2);
8098  %*/
8099  }
8100  break;
8101 
8102  case 309:
8103 
8104 /* Line 1806 of yacc.c */
8105 #line 2763 "parse.y"
8106  {
8107  (yyval.node) = (yyvsp[(2) - (2)].node);
8108  }
8109  break;
8110 
8111  case 310:
8112 
8113 /* Line 1806 of yacc.c */
8114 #line 2770 "parse.y"
8115  {
8116  /*%%%*/
8117  (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
8118  fixpos((yyval.node), (yyvsp[(2) - (6)].node));
8119  /*%
8120  $$ = dispatch3(if, $2, $4, escape_Qundef($5));
8121  %*/
8122  }
8123  break;
8124 
8125  case 311:
8126 
8127 /* Line 1806 of yacc.c */
8128 #line 2782 "parse.y"
8129  {
8130  /*%%%*/
8131  (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
8132  fixpos((yyval.node), (yyvsp[(2) - (6)].node));
8133  /*%
8134  $$ = dispatch3(unless, $2, $4, escape_Qundef($5));
8135  %*/
8136  }
8137  break;
8138 
8139  case 312:
8140 
8141 /* Line 1806 of yacc.c */
8142 #line 2790 "parse.y"
8143  {COND_PUSH(1);}
8144  break;
8145 
8146  case 313:
8147 
8148 /* Line 1806 of yacc.c */
8149 #line 2790 "parse.y"
8150  {COND_POP();}
8151  break;
8152 
8153  case 314:
8154 
8155 /* Line 1806 of yacc.c */
8156 #line 2793 "parse.y"
8157  {
8158  /*%%%*/
8159  (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
8160  fixpos((yyval.node), (yyvsp[(3) - (7)].node));
8161  /*%
8162  $$ = dispatch2(while, $3, $6);
8163  %*/
8164  }
8165  break;
8166 
8167  case 315:
8168 
8169 /* Line 1806 of yacc.c */
8170 #line 2801 "parse.y"
8171  {COND_PUSH(1);}
8172  break;
8173 
8174  case 316:
8175 
8176 /* Line 1806 of yacc.c */
8177 #line 2801 "parse.y"
8178  {COND_POP();}
8179  break;
8180 
8181  case 317:
8182 
8183 /* Line 1806 of yacc.c */
8184 #line 2804 "parse.y"
8185  {
8186  /*%%%*/
8187  (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
8188  fixpos((yyval.node), (yyvsp[(3) - (7)].node));
8189  /*%
8190  $$ = dispatch2(until, $3, $6);
8191  %*/
8192  }
8193  break;
8194 
8195  case 318:
8196 
8197 /* Line 1806 of yacc.c */
8198 #line 2815 "parse.y"
8199  {
8200  /*%%%*/
8201  (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
8202  fixpos((yyval.node), (yyvsp[(2) - (5)].node));
8203  /*%
8204  $$ = dispatch2(case, $2, $4);
8205  %*/
8206  }
8207  break;
8208 
8209  case 319:
8210 
8211 /* Line 1806 of yacc.c */
8212 #line 2824 "parse.y"
8213  {
8214  /*%%%*/
8215  (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
8216  /*%
8217  $$ = dispatch2(case, Qnil, $3);
8218  %*/
8219  }
8220  break;
8221 
8222  case 320:
8223 
8224 /* Line 1806 of yacc.c */
8225 #line 2832 "parse.y"
8226  {COND_PUSH(1);}
8227  break;
8228 
8229  case 321:
8230 
8231 /* Line 1806 of yacc.c */
8232 #line 2834 "parse.y"
8233  {COND_POP();}
8234  break;
8235 
8236  case 322:
8237 
8238 /* Line 1806 of yacc.c */
8239 #line 2837 "parse.y"
8240  {
8241  /*%%%*/
8242  /*
8243  * for a, b, c in e
8244  * #=>
8245  * e.each{|*x| a, b, c = x
8246  *
8247  * for a in e
8248  * #=>
8249  * e.each{|x| a, = x}
8250  */
8251  ID id = internal_id();
8252  ID *tbl = ALLOC_N(ID, 2);
8253  NODE *m = NEW_ARGS_AUX(0, 0);
8254  NODE *args, *scope;
8255 
8256  if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) {
8257  /* if args.length == 1 && args[0].kind_of?(Array)
8258  * args = args[0]
8259  * end
8260  */
8261  NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
8262  NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
8263  m->nd_next = block_append(
8264  NEW_IF(
8266  NEW_CALL(NEW_CALL(NEW_DVAR(id), idLength, 0),
8267  idEq, one),
8268  NEW_CALL(NEW_CALL(NEW_DVAR(id), idAREF, zero),
8269  rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
8270  0),
8271  NEW_DASGN_CURR(id,
8272  NEW_CALL(NEW_DVAR(id), idAREF, zero)),
8273  0),
8274  node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id)));
8275 
8276  args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
8277  }
8278  else {
8279  if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN ||
8280  nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN ||
8281  nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) {
8282  (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
8283  m->nd_plen = 1;
8284  m->nd_next = (yyvsp[(2) - (9)].node);
8285  args = new_args(m, 0, 0, 0, new_args_tail(0, 0, 0));
8286  }
8287  else {
8288  m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
8289  args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
8290  }
8291  }
8292  scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
8293  tbl[0] = 1; tbl[1] = id;
8294  (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
8295  fixpos((yyval.node), (yyvsp[(2) - (9)].node));
8296  /*%
8297  $$ = dispatch3(for, $2, $5, $8);
8298  %*/
8299  }
8300  break;
8301 
8302  case 323:
8303 
8304 /* Line 1806 of yacc.c */
8305 #line 2898 "parse.y"
8306  {
8307  if (in_def || in_single)
8308  yyerror("class definition in method body");
8309  local_push(0);
8310  /*%%%*/
8311  (yyval.num) = ruby_sourceline;
8312  /*%
8313  %*/
8314  }
8315  break;
8316 
8317  case 324:
8318 
8319 /* Line 1806 of yacc.c */
8320 #line 2909 "parse.y"
8321  {
8322  /*%%%*/
8323  (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
8324  nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
8325  /*%
8326  $$ = dispatch3(class, $2, $3, $5);
8327  %*/
8328  local_pop();
8329  }
8330  break;
8331 
8332  case 325:
8333 
8334 /* Line 1806 of yacc.c */
8335 #line 2919 "parse.y"
8336  {
8337  (yyval.num) = in_def;
8338  in_def = 0;
8339  }
8340  break;
8341 
8342  case 326:
8343 
8344 /* Line 1806 of yacc.c */
8345 #line 2924 "parse.y"
8346  {
8347  (yyval.num) = in_single;
8348  in_single = 0;
8349  local_push(0);
8350  }
8351  break;
8352 
8353  case 327:
8354 
8355 /* Line 1806 of yacc.c */
8356 #line 2931 "parse.y"
8357  {
8358  /*%%%*/
8359  (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
8360  fixpos((yyval.node), (yyvsp[(3) - (8)].node));
8361  /*%
8362  $$ = dispatch2(sclass, $3, $7);
8363  %*/
8364  local_pop();
8365  in_def = (yyvsp[(4) - (8)].num);
8366  in_single = (yyvsp[(6) - (8)].num);
8367  }
8368  break;
8369 
8370  case 328:
8371 
8372 /* Line 1806 of yacc.c */
8373 #line 2943 "parse.y"
8374  {
8375  if (in_def || in_single)
8376  yyerror("module definition in method body");
8377  local_push(0);
8378  /*%%%*/
8379  (yyval.num) = ruby_sourceline;
8380  /*%
8381  %*/
8382  }
8383  break;
8384 
8385  case 329:
8386 
8387 /* Line 1806 of yacc.c */
8388 #line 2954 "parse.y"
8389  {
8390  /*%%%*/
8391  (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
8392  nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
8393  /*%
8394  $$ = dispatch2(module, $2, $4);
8395  %*/
8396  local_pop();
8397  }
8398  break;
8399 
8400  case 330:
8401 
8402 /* Line 1806 of yacc.c */
8403 #line 2964 "parse.y"
8404  {
8405  (yyval.id) = cur_mid;
8406  cur_mid = (yyvsp[(2) - (2)].id);
8407  in_def++;
8408  local_push(0);
8409  }
8410  break;
8411 
8412  case 331:
8413 
8414 /* Line 1806 of yacc.c */
8415 #line 2973 "parse.y"
8416  {
8417  /*%%%*/
8418  NODE *body = remove_begin((yyvsp[(5) - (6)].node));
8419  reduce_nodes(&body);
8420  (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
8421  nd_set_line((yyval.node), (yyvsp[(1) - (6)].num));
8422  /*%
8423  $$ = dispatch3(def, $2, $4, $5);
8424  %*/
8425  local_pop();
8426  in_def--;
8427  cur_mid = (yyvsp[(3) - (6)].id);
8428  }
8429  break;
8430 
8431  case 332:
8432 
8433 /* Line 1806 of yacc.c */
8434 #line 2986 "parse.y"
8435  {lex_state = EXPR_FNAME;}
8436  break;
8437 
8438  case 333:
8439 
8440 /* Line 1806 of yacc.c */
8441 #line 2987 "parse.y"
8442  {
8443  in_single++;
8444  lex_state = EXPR_ENDFN; /* force for args */
8445  local_push(0);
8446  }
8447  break;
8448 
8449  case 334:
8450 
8451 /* Line 1806 of yacc.c */
8452 #line 2995 "parse.y"
8453  {
8454  /*%%%*/
8455  NODE *body = remove_begin((yyvsp[(8) - (9)].node));
8456  reduce_nodes(&body);
8457  (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
8458  nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
8459  /*%
8460  $$ = dispatch5(defs, $2, $3, $5, $7, $8);
8461  %*/
8462  local_pop();
8463  in_single--;
8464  }
8465  break;
8466 
8467  case 335:
8468 
8469 /* Line 1806 of yacc.c */
8470 #line 3008 "parse.y"
8471  {
8472  /*%%%*/
8473  (yyval.node) = NEW_BREAK(0);
8474  /*%
8475  $$ = dispatch1(break, arg_new());
8476  %*/
8477  }
8478  break;
8479 
8480  case 336:
8481 
8482 /* Line 1806 of yacc.c */
8483 #line 3016 "parse.y"
8484  {
8485  /*%%%*/
8486  (yyval.node) = NEW_NEXT(0);
8487  /*%
8488  $$ = dispatch1(next, arg_new());
8489  %*/
8490  }
8491  break;
8492 
8493  case 337:
8494 
8495 /* Line 1806 of yacc.c */
8496 #line 3024 "parse.y"
8497  {
8498  /*%%%*/
8499  (yyval.node) = NEW_REDO();
8500  /*%
8501  $$ = dispatch0(redo);
8502  %*/
8503  }
8504  break;
8505 
8506  case 338:
8507 
8508 /* Line 1806 of yacc.c */
8509 #line 3032 "parse.y"
8510  {
8511  /*%%%*/
8512  (yyval.node) = NEW_RETRY();
8513  /*%
8514  $$ = dispatch0(retry);
8515  %*/
8516  }
8517  break;
8518 
8519  case 339:
8520 
8521 /* Line 1806 of yacc.c */
8522 #line 3042 "parse.y"
8523  {
8524  /*%%%*/
8525  value_expr((yyvsp[(1) - (1)].node));
8526  (yyval.node) = (yyvsp[(1) - (1)].node);
8527  if (!(yyval.node)) (yyval.node) = NEW_NIL();
8528  /*%
8529  $$ = $1;
8530  %*/
8531  }
8532  break;
8533 
8534  case 340:
8535 
8536 /* Line 1806 of yacc.c */
8537 #line 3054 "parse.y"
8538  {
8539  token_info_push("begin");
8540  }
8541  break;
8542 
8543  case 341:
8544 
8545 /* Line 1806 of yacc.c */
8546 #line 3060 "parse.y"
8547  {
8548  token_info_push("if");
8549  }
8550  break;
8551 
8552  case 342:
8553 
8554 /* Line 1806 of yacc.c */
8555 #line 3066 "parse.y"
8556  {
8557  token_info_push("unless");
8558  }
8559  break;
8560 
8561  case 343:
8562 
8563 /* Line 1806 of yacc.c */
8564 #line 3072 "parse.y"
8565  {
8566  token_info_push("while");
8567  }
8568  break;
8569 
8570  case 344:
8571 
8572 /* Line 1806 of yacc.c */
8573 #line 3078 "parse.y"
8574  {
8575  token_info_push("until");
8576  }
8577  break;
8578 
8579  case 345:
8580 
8581 /* Line 1806 of yacc.c */
8582 #line 3084 "parse.y"
8583  {
8584  token_info_push("case");
8585  }
8586  break;
8587 
8588  case 346:
8589 
8590 /* Line 1806 of yacc.c */
8591 #line 3090 "parse.y"
8592  {
8593  token_info_push("for");
8594  }
8595  break;
8596 
8597  case 347:
8598 
8599 /* Line 1806 of yacc.c */
8600 #line 3096 "parse.y"
8601  {
8602  token_info_push("class");
8603  }
8604  break;
8605 
8606  case 348:
8607 
8608 /* Line 1806 of yacc.c */
8609 #line 3102 "parse.y"
8610  {
8611  token_info_push("module");
8612  }
8613  break;
8614 
8615  case 349:
8616 
8617 /* Line 1806 of yacc.c */
8618 #line 3108 "parse.y"
8619  {
8620  token_info_push("def");
8621  /*%%%*/
8622  (yyval.num) = ruby_sourceline;
8623  /*%
8624  %*/
8625  }
8626  break;
8627 
8628  case 350:
8629 
8630 /* Line 1806 of yacc.c */
8631 #line 3118 "parse.y"
8632  {
8633  token_info_pop("end");
8634  }
8635  break;
8636 
8637  case 357:
8638 
8639 /* Line 1806 of yacc.c */
8640 #line 3148 "parse.y"
8641  {
8642  /*%%%*/
8643  (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
8644  fixpos((yyval.node), (yyvsp[(2) - (5)].node));
8645  /*%
8646  $$ = dispatch3(elsif, $2, $4, escape_Qundef($5));
8647  %*/
8648  }
8649  break;
8650 
8651  case 359:
8652 
8653 /* Line 1806 of yacc.c */
8654 #line 3160 "parse.y"
8655  {
8656  /*%%%*/
8657  (yyval.node) = (yyvsp[(2) - (2)].node);
8658  /*%
8659  $$ = dispatch1(else, $2);
8660  %*/
8661  }
8662  break;
8663 
8664  case 362:
8665 
8666 /* Line 1806 of yacc.c */
8667 #line 3174 "parse.y"
8668  {
8669  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
8670  /*%%%*/
8671  /*%
8672  $$ = dispatch1(mlhs_paren, $$);
8673  %*/
8674  }
8675  break;
8676 
8677  case 363:
8678 
8679 /* Line 1806 of yacc.c */
8680 #line 3182 "parse.y"
8681  {
8682  /*%%%*/
8683  (yyval.node) = (yyvsp[(2) - (3)].node);
8684  /*%
8685  $$ = dispatch1(mlhs_paren, $2);
8686  %*/
8687  }
8688  break;
8689 
8690  case 364:
8691 
8692 /* Line 1806 of yacc.c */
8693 #line 3192 "parse.y"
8694  {
8695  /*%%%*/
8696  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
8697  /*%
8698  $$ = mlhs_add(mlhs_new(), $1);
8699  %*/
8700  }
8701  break;
8702 
8703  case 365:
8704 
8705 /* Line 1806 of yacc.c */
8706 #line 3200 "parse.y"
8707  {
8708  /*%%%*/
8709  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
8710  /*%
8711  $$ = mlhs_add($1, $3);
8712  %*/
8713  }
8714  break;
8715 
8716  case 366:
8717 
8718 /* Line 1806 of yacc.c */
8719 #line 3210 "parse.y"
8720  {
8721  /*%%%*/
8722  (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
8723  /*%
8724  $$ = $1;
8725  %*/
8726  }
8727  break;
8728 
8729  case 367:
8730 
8731 /* Line 1806 of yacc.c */
8732 #line 3218 "parse.y"
8733  {
8734  (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
8735  /*%%%*/
8736  (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
8737  /*%
8738  $$ = mlhs_add_star($1, $$);
8739  %*/
8740  }
8741  break;
8742 
8743  case 368:
8744 
8745 /* Line 1806 of yacc.c */
8746 #line 3227 "parse.y"
8747  {
8748  (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
8749  /*%%%*/
8750  (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
8751  /*%
8752  $$ = mlhs_add_star($1, $$);
8753  %*/
8754  }
8755  break;
8756 
8757  case 369:
8758 
8759 /* Line 1806 of yacc.c */
8760 #line 3236 "parse.y"
8761  {
8762  /*%%%*/
8763  (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
8764  /*%
8765  $$ = mlhs_add_star($1, Qnil);
8766  %*/
8767  }
8768  break;
8769 
8770  case 370:
8771 
8772 /* Line 1806 of yacc.c */
8773 #line 3244 "parse.y"
8774  {
8775  /*%%%*/
8776  (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
8777  /*%
8778  $$ = mlhs_add_star($1, $5);
8779  %*/
8780  }
8781  break;
8782 
8783  case 371:
8784 
8785 /* Line 1806 of yacc.c */
8786 #line 3252 "parse.y"
8787  {
8788  (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
8789  /*%%%*/
8790  (yyval.node) = NEW_MASGN(0, (yyval.node));
8791  /*%
8792  $$ = mlhs_add_star(mlhs_new(), $$);
8793  %*/
8794  }
8795  break;
8796 
8797  case 372:
8798 
8799 /* Line 1806 of yacc.c */
8800 #line 3261 "parse.y"
8801  {
8802  (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
8803  /*%%%*/
8804  (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
8805  /*%
8806  #if 0
8807  TODO: Check me
8808  #endif
8809  $$ = mlhs_add_star($$, $4);
8810  %*/
8811  }
8812  break;
8813 
8814  case 373:
8815 
8816 /* Line 1806 of yacc.c */
8817 #line 3273 "parse.y"
8818  {
8819  /*%%%*/
8820  (yyval.node) = NEW_MASGN(0, -1);
8821  /*%
8822  $$ = mlhs_add_star(mlhs_new(), Qnil);
8823  %*/
8824  }
8825  break;
8826 
8827  case 374:
8828 
8829 /* Line 1806 of yacc.c */
8830 #line 3281 "parse.y"
8831  {
8832  /*%%%*/
8833  (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
8834  /*%
8835  $$ = mlhs_add_star(mlhs_new(), Qnil);
8836  %*/
8837  }
8838  break;
8839 
8840  case 375:
8841 
8842 /* Line 1806 of yacc.c */
8843 #line 3292 "parse.y"
8844  {
8845  (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id));
8846  }
8847  break;
8848 
8849  case 376:
8850 
8851 /* Line 1806 of yacc.c */
8852 #line 3296 "parse.y"
8853  {
8854  (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
8855  }
8856  break;
8857 
8858  case 377:
8859 
8860 /* Line 1806 of yacc.c */
8861 #line 3300 "parse.y"
8862  {
8863  (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
8864  }
8865  break;
8866 
8867  case 378:
8868 
8869 /* Line 1806 of yacc.c */
8870 #line 3304 "parse.y"
8871  {
8872  (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
8873  }
8874  break;
8875 
8876  case 379:
8877 
8878 /* Line 1806 of yacc.c */
8879 #line 3310 "parse.y"
8880  {
8881  (yyval.node) = (yyvsp[(2) - (2)].node);
8882  }
8883  break;
8884 
8885  case 380:
8886 
8887 /* Line 1806 of yacc.c */
8888 #line 3314 "parse.y"
8889  {
8890  (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
8891  }
8892  break;
8893 
8894  case 381:
8895 
8896 /* Line 1806 of yacc.c */
8897 #line 3320 "parse.y"
8898  {
8899  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node));
8900  }
8901  break;
8902 
8903  case 382:
8904 
8905 /* Line 1806 of yacc.c */
8906 #line 3324 "parse.y"
8907  {
8908  (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node));
8909  }
8910  break;
8911 
8912  case 383:
8913 
8914 /* Line 1806 of yacc.c */
8915 #line 3328 "parse.y"
8916  {
8917  (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node));
8918  }
8919  break;
8920 
8921  case 384:
8922 
8923 /* Line 1806 of yacc.c */
8924 #line 3332 "parse.y"
8925  {
8926  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
8927  }
8928  break;
8929 
8930  case 385:
8931 
8932 /* Line 1806 of yacc.c */
8933 #line 3336 "parse.y"
8934  {
8935  (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
8936  }
8937  break;
8938 
8939  case 386:
8940 
8941 /* Line 1806 of yacc.c */
8942 #line 3340 "parse.y"
8943  {
8944  (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, 1, Qnone, new_args_tail(Qnone, Qnone, Qnone));
8945  /*%%%*/
8946  /*%
8947  dispatch1(excessed_comma, $$);
8948  %*/
8949  }
8950  break;
8951 
8952  case 387:
8953 
8954 /* Line 1806 of yacc.c */
8955 #line 3348 "parse.y"
8956  {
8957  (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
8958  }
8959  break;
8960 
8961  case 388:
8962 
8963 /* Line 1806 of yacc.c */
8964 #line 3352 "parse.y"
8965  {
8966  (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node));
8967  }
8968  break;
8969 
8970  case 389:
8971 
8972 /* Line 1806 of yacc.c */
8973 #line 3356 "parse.y"
8974  {
8975  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
8976  }
8977  break;
8978 
8979  case 390:
8980 
8981 /* Line 1806 of yacc.c */
8982 #line 3360 "parse.y"
8983  {
8984  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
8985  }
8986  break;
8987 
8988  case 391:
8989 
8990 /* Line 1806 of yacc.c */
8991 #line 3364 "parse.y"
8992  {
8993  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node));
8994  }
8995  break;
8996 
8997  case 392:
8998 
8999 /* Line 1806 of yacc.c */
9000 #line 3368 "parse.y"
9001  {
9002  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
9003  }
9004  break;
9005 
9006  case 393:
9007 
9008 /* Line 1806 of yacc.c */
9009 #line 3372 "parse.y"
9010  {
9011  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node));
9012  }
9013  break;
9014 
9015  case 394:
9016 
9017 /* Line 1806 of yacc.c */
9018 #line 3376 "parse.y"
9019  {
9020  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
9021  }
9022  break;
9023 
9024  case 395:
9025 
9026 /* Line 1806 of yacc.c */
9027 #line 3380 "parse.y"
9028  {
9029  (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
9030  }
9031  break;
9032 
9033  case 397:
9034 
9035 /* Line 1806 of yacc.c */
9036 #line 3387 "parse.y"
9037  {
9038  command_start = TRUE;
9039  }
9040  break;
9041 
9042  case 398:
9043 
9044 /* Line 1806 of yacc.c */
9045 #line 3393 "parse.y"
9046  {
9047  /*%%%*/
9048  (yyval.node) = 0;
9049  /*%
9050  $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
9051  escape_Qundef($2));
9052  %*/
9053  }
9054  break;
9055 
9056  case 399:
9057 
9058 /* Line 1806 of yacc.c */
9059 #line 3402 "parse.y"
9060  {
9061  /*%%%*/
9062  (yyval.node) = 0;
9063  /*%
9064  $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
9065  Qnil);
9066  %*/
9067  }
9068  break;
9069 
9070  case 400:
9071 
9072 /* Line 1806 of yacc.c */
9073 #line 3411 "parse.y"
9074  {
9075  /*%%%*/
9076  (yyval.node) = (yyvsp[(2) - (4)].node);
9077  /*%
9078  $$ = blockvar_new(escape_Qundef($2), escape_Qundef($3));
9079  %*/
9080  }
9081  break;
9082 
9083  case 401:
9084 
9085 /* Line 1806 of yacc.c */
9086 #line 3422 "parse.y"
9087  {
9088  (yyval.node) = 0;
9089  }
9090  break;
9091 
9092  case 402:
9093 
9094 /* Line 1806 of yacc.c */
9095 #line 3426 "parse.y"
9096  {
9097  /*%%%*/
9098  (yyval.node) = 0;
9099  /*%
9100  $$ = $3;
9101  %*/
9102  }
9103  break;
9104 
9105  case 405:
9106 
9107 /* Line 1806 of yacc.c */
9108 #line 3452 "parse.y"
9109  {
9110  new_bv(get_id((yyvsp[(1) - (1)].id)));
9111  /*%%%*/
9112  /*%
9113  $$ = get_value($1);
9114  %*/
9115  }
9116  break;
9117 
9118  case 406:
9119 
9120 /* Line 1806 of yacc.c */
9121 #line 3460 "parse.y"
9122  {
9123  (yyval.node) = 0;
9124  }
9125  break;
9126 
9127  case 407:
9128 
9129 /* Line 1806 of yacc.c */
9130 #line 3465 "parse.y"
9131  {
9132  (yyval.vars) = dyna_push();
9133  }
9134  break;
9135 
9136  case 408:
9137 
9138 /* Line 1806 of yacc.c */
9139 #line 3468 "parse.y"
9140  {
9141  (yyval.num) = lpar_beg;
9142  lpar_beg = ++paren_nest;
9143  }
9144  break;
9145 
9146  case 409:
9147 
9148 /* Line 1806 of yacc.c */
9149 #line 3473 "parse.y"
9150  {
9151  (yyval.num) = ruby_sourceline;
9152  }
9153  break;
9154 
9155  case 410:
9156 
9157 /* Line 1806 of yacc.c */
9158 #line 3477 "parse.y"
9159  {
9160  lpar_beg = (yyvsp[(2) - (5)].num);
9161  /*%%%*/
9162  (yyval.node) = NEW_LAMBDA((yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node));
9163  nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
9164  /*%
9165  $$ = dispatch2(lambda, $3, $5);
9166  %*/
9167  dyna_pop((yyvsp[(1) - (5)].vars));
9168  }
9169  break;
9170 
9171  case 411:
9172 
9173 /* Line 1806 of yacc.c */
9174 #line 3490 "parse.y"
9175  {
9176  /*%%%*/
9177  (yyval.node) = (yyvsp[(2) - (4)].node);
9178  /*%
9179  $$ = dispatch1(paren, $2);
9180  %*/
9181  }
9182  break;
9183 
9184  case 412:
9185 
9186 /* Line 1806 of yacc.c */
9187 #line 3498 "parse.y"
9188  {
9189  /*%%%*/
9190  (yyval.node) = (yyvsp[(1) - (1)].node);
9191  /*%
9192  $$ = $1;
9193  %*/
9194  }
9195  break;
9196 
9197  case 413:
9198 
9199 /* Line 1806 of yacc.c */
9200 #line 3508 "parse.y"
9201  {
9202  (yyval.node) = (yyvsp[(2) - (3)].node);
9203  }
9204  break;
9205 
9206  case 414:
9207 
9208 /* Line 1806 of yacc.c */
9209 #line 3512 "parse.y"
9210  {
9211  (yyval.node) = (yyvsp[(2) - (3)].node);
9212  }
9213  break;
9214 
9215  case 415:
9216 
9217 /* Line 1806 of yacc.c */
9218 #line 3518 "parse.y"
9219  {
9220  (yyvsp[(1) - (1)].vars) = dyna_push();
9221  /*%%%*/
9222  (yyval.num) = ruby_sourceline;
9223  /*% %*/
9224  }
9225  break;
9226 
9227  case 416:
9228 
9229 /* Line 1806 of yacc.c */
9230 #line 3527 "parse.y"
9231  {
9232  /*%%%*/
9233  (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
9234  nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
9235  /*%
9236  $$ = dispatch2(do_block, escape_Qundef($3), $4);
9237  %*/
9238  dyna_pop((yyvsp[(1) - (5)].vars));
9239  }
9240  break;
9241 
9242  case 417:
9243 
9244 /* Line 1806 of yacc.c */
9245 #line 3539 "parse.y"
9246  {
9247  /*%%%*/
9248  if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
9249  compile_error(PARSER_ARG "block given to yield");
9250  }
9251  else {
9252  block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
9253  }
9254  (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
9255  (yyval.node) = (yyvsp[(2) - (2)].node);
9256  fixpos((yyval.node), (yyvsp[(1) - (2)].node));
9257  /*%
9258  $$ = method_add_block($1, $2);
9259  %*/
9260  }
9261  break;
9262 
9263  case 418:
9264 
9265 /* Line 1806 of yacc.c */
9266 #line 3555 "parse.y"
9267  {
9268  /*%%%*/
9269  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
9270  /*%
9271  $$ = dispatch3(call, $1, $2, $3);
9272  $$ = method_optarg($$, $4);
9273  %*/
9274  }
9275  break;
9276 
9277  case 419:
9278 
9279 /* Line 1806 of yacc.c */
9280 #line 3564 "parse.y"
9281  {
9282  /*%%%*/
9283  block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
9284  (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
9285  (yyval.node) = (yyvsp[(5) - (5)].node);
9286  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
9287  /*%
9288  $$ = dispatch4(command_call, $1, $2, $3, $4);
9289  $$ = method_add_block($$, $5);
9290  %*/
9291  }
9292  break;
9293 
9294  case 420:
9295 
9296 /* Line 1806 of yacc.c */
9297 #line 3576 "parse.y"
9298  {
9299  /*%%%*/
9300  block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
9301  (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
9302  (yyval.node) = (yyvsp[(5) - (5)].node);
9303  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
9304  /*%
9305  $$ = dispatch4(command_call, $1, $2, $3, $4);
9306  $$ = method_add_block($$, $5);
9307  %*/
9308  }
9309  break;
9310 
9311  case 421:
9312 
9313 /* Line 1806 of yacc.c */
9314 #line 3590 "parse.y"
9315  {
9316  /*%%%*/
9317  (yyval.node) = (yyvsp[(1) - (2)].node);
9318  (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
9319  /*%
9320  $$ = method_arg(dispatch1(fcall, $1), $2);
9321  %*/
9322  }
9323  break;
9324 
9325  case 422:
9326 
9327 /* Line 1806 of yacc.c */
9328 #line 3599 "parse.y"
9329  {
9330  /*%%%*/
9331  (yyval.num) = ruby_sourceline;
9332  /*% %*/
9333  }
9334  break;
9335 
9336  case 423:
9337 
9338 /* Line 1806 of yacc.c */
9339 #line 3605 "parse.y"
9340  {
9341  /*%%%*/
9342  (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
9343  nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
9344  /*%
9345  $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
9346  $$ = method_optarg($$, $5);
9347  %*/
9348  }
9349  break;
9350 
9351  case 424:
9352 
9353 /* Line 1806 of yacc.c */
9354 #line 3615 "parse.y"
9355  {
9356  /*%%%*/
9357  (yyval.num) = ruby_sourceline;
9358  /*% %*/
9359  }
9360  break;
9361 
9362  case 425:
9363 
9364 /* Line 1806 of yacc.c */
9365 #line 3621 "parse.y"
9366  {
9367  /*%%%*/
9368  (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
9369  nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
9370  /*%
9371  $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
9372  $$ = method_optarg($$, $5);
9373  %*/
9374  }
9375  break;
9376 
9377  case 426:
9378 
9379 /* Line 1806 of yacc.c */
9380 #line 3631 "parse.y"
9381  {
9382  /*%%%*/
9383  (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
9384  /*%
9385  $$ = dispatch3(call, $1, ripper_intern("::"), $3);
9386  %*/
9387  }
9388  break;
9389 
9390  case 427:
9391 
9392 /* Line 1806 of yacc.c */
9393 #line 3639 "parse.y"
9394  {
9395  /*%%%*/
9396  (yyval.num) = ruby_sourceline;
9397  /*% %*/
9398  }
9399  break;
9400 
9401  case 428:
9402 
9403 /* Line 1806 of yacc.c */
9404 #line 3645 "parse.y"
9405  {
9406  /*%%%*/
9407  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), rb_intern("call"), (yyvsp[(4) - (4)].node));
9408  nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
9409  /*%
9410  $$ = dispatch3(call, $1, ripper_id2sym('.'),
9411  ripper_intern("call"));
9412  $$ = method_optarg($$, $4);
9413  %*/
9414  }
9415  break;
9416 
9417  case 429:
9418 
9419 /* Line 1806 of yacc.c */
9420 #line 3656 "parse.y"
9421  {
9422  /*%%%*/
9423  (yyval.num) = ruby_sourceline;
9424  /*% %*/
9425  }
9426  break;
9427 
9428  case 430:
9429 
9430 /* Line 1806 of yacc.c */
9431 #line 3662 "parse.y"
9432  {
9433  /*%%%*/
9434  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), rb_intern("call"), (yyvsp[(4) - (4)].node));
9435  nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
9436  /*%
9437  $$ = dispatch3(call, $1, ripper_intern("::"),
9438  ripper_intern("call"));
9439  $$ = method_optarg($$, $4);
9440  %*/
9441  }
9442  break;
9443 
9444  case 431:
9445 
9446 /* Line 1806 of yacc.c */
9447 #line 3673 "parse.y"
9448  {
9449  /*%%%*/
9450  (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
9451  /*%
9452  $$ = dispatch1(super, $2);
9453  %*/
9454  }
9455  break;
9456 
9457  case 432:
9458 
9459 /* Line 1806 of yacc.c */
9460 #line 3681 "parse.y"
9461  {
9462  /*%%%*/
9463  (yyval.node) = NEW_ZSUPER();
9464  /*%
9465  $$ = dispatch0(zsuper);
9466  %*/
9467  }
9468  break;
9469 
9470  case 433:
9471 
9472 /* Line 1806 of yacc.c */
9473 #line 3689 "parse.y"
9474  {
9475  /*%%%*/
9476  if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
9477  (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
9478  else
9479  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
9480  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
9481  /*%
9482  $$ = dispatch2(aref, $1, escape_Qundef($3));
9483  %*/
9484  }
9485  break;
9486 
9487  case 434:
9488 
9489 /* Line 1806 of yacc.c */
9490 #line 3703 "parse.y"
9491  {
9492  (yyvsp[(1) - (1)].vars) = dyna_push();
9493  /*%%%*/
9494  (yyval.num) = ruby_sourceline;
9495  /*%
9496  %*/
9497  }
9498  break;
9499 
9500  case 435:
9501 
9502 /* Line 1806 of yacc.c */
9503 #line 3712 "parse.y"
9504  {
9505  /*%%%*/
9506  (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
9507  nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
9508  /*%
9509  $$ = dispatch2(brace_block, escape_Qundef($3), $4);
9510  %*/
9511  dyna_pop((yyvsp[(1) - (5)].vars));
9512  }
9513  break;
9514 
9515  case 436:
9516 
9517 /* Line 1806 of yacc.c */
9518 #line 3722 "parse.y"
9519  {
9520  (yyvsp[(1) - (1)].vars) = dyna_push();
9521  /*%%%*/
9522  (yyval.num) = ruby_sourceline;
9523  /*%
9524  %*/
9525  }
9526  break;
9527 
9528  case 437:
9529 
9530 /* Line 1806 of yacc.c */
9531 #line 3731 "parse.y"
9532  {
9533  /*%%%*/
9534  (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
9535  nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
9536  /*%
9537  $$ = dispatch2(do_block, escape_Qundef($3), $4);
9538  %*/
9539  dyna_pop((yyvsp[(1) - (5)].vars));
9540  }
9541  break;
9542 
9543  case 438:
9544 
9545 /* Line 1806 of yacc.c */
9546 #line 3745 "parse.y"
9547  {
9548  /*%%%*/
9549  (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
9550  /*%
9551  $$ = dispatch3(when, $2, $4, escape_Qundef($5));
9552  %*/
9553  }
9554  break;
9555 
9556  case 441:
9557 
9558 /* Line 1806 of yacc.c */
9559 #line 3761 "parse.y"
9560  {
9561  /*%%%*/
9562  if ((yyvsp[(3) - (6)].node)) {
9563  (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
9564  (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
9565  }
9566  (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
9567  fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
9568  /*%
9569  $$ = dispatch4(rescue,
9570  escape_Qundef($2),
9571  escape_Qundef($3),
9572  escape_Qundef($5),
9573  escape_Qundef($6));
9574  %*/
9575  }
9576  break;
9577 
9578  case 443:
9579 
9580 /* Line 1806 of yacc.c */
9581 #line 3781 "parse.y"
9582  {
9583  /*%%%*/
9584  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
9585  /*%
9586  $$ = rb_ary_new3(1, $1);
9587  %*/
9588  }
9589  break;
9590 
9591  case 444:
9592 
9593 /* Line 1806 of yacc.c */
9594 #line 3789 "parse.y"
9595  {
9596  /*%%%*/
9597  if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
9598  /*%
9599  $$ = $1;
9600  %*/
9601  }
9602  break;
9603 
9604  case 446:
9605 
9606 /* Line 1806 of yacc.c */
9607 #line 3800 "parse.y"
9608  {
9609  (yyval.node) = (yyvsp[(2) - (2)].node);
9610  }
9611  break;
9612 
9613  case 448:
9614 
9615 /* Line 1806 of yacc.c */
9616 #line 3807 "parse.y"
9617  {
9618  /*%%%*/
9619  (yyval.node) = (yyvsp[(2) - (2)].node);
9620  /*%
9621  $$ = dispatch1(ensure, $2);
9622  %*/
9623  }
9624  break;
9625 
9626  case 451:
9627 
9628 /* Line 1806 of yacc.c */
9629 #line 3819 "parse.y"
9630  {
9631  /*%%%*/
9632  (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
9633  /*%
9634  $$ = dispatch1(symbol_literal, $1);
9635  %*/
9636  }
9637  break;
9638 
9639  case 453:
9640 
9641 /* Line 1806 of yacc.c */
9642 #line 3830 "parse.y"
9643  {
9644  /*%%%*/
9645  NODE *node = (yyvsp[(1) - (1)].node);
9646  if (!node) {
9647  node = NEW_STR(STR_NEW0());
9648  }
9649  else {
9650  node = evstr2dstr(node);
9651  }
9652  (yyval.node) = node;
9653  /*%
9654  $$ = $1;
9655  %*/
9656  }
9657  break;
9658 
9659  case 456:
9660 
9661 /* Line 1806 of yacc.c */
9662 #line 3849 "parse.y"
9663  {
9664  /*%%%*/
9665  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
9666  /*%
9667  $$ = dispatch2(string_concat, $1, $2);
9668  %*/
9669  }
9670  break;
9671 
9672  case 457:
9673 
9674 /* Line 1806 of yacc.c */
9675 #line 3859 "parse.y"
9676  {
9677  /*%%%*/
9678  (yyval.node) = (yyvsp[(2) - (3)].node);
9679  /*%
9680  $$ = dispatch1(string_literal, $2);
9681  %*/
9682  }
9683  break;
9684 
9685  case 458:
9686 
9687 /* Line 1806 of yacc.c */
9688 #line 3869 "parse.y"
9689  {
9690  /*%%%*/
9691  NODE *node = (yyvsp[(2) - (3)].node);
9692  if (!node) {
9693  node = NEW_XSTR(STR_NEW0());
9694  }
9695  else {
9696  switch (nd_type(node)) {
9697  case NODE_STR:
9698  nd_set_type(node, NODE_XSTR);
9699  break;
9700  case NODE_DSTR:
9701  nd_set_type(node, NODE_DXSTR);
9702  break;
9703  default:
9704  node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
9705  break;
9706  }
9707  }
9708  (yyval.node) = node;
9709  /*%
9710  $$ = dispatch1(xstring_literal, $2);
9711  %*/
9712  }
9713  break;
9714 
9715  case 459:
9716 
9717 /* Line 1806 of yacc.c */
9718 #line 3896 "parse.y"
9719  {
9720  /*%%%*/
9721  int options = (yyvsp[(3) - (3)].num);
9722  NODE *node = (yyvsp[(2) - (3)].node);
9723  NODE *list, *prev;
9724  if (!node) {
9725  node = NEW_LIT(reg_compile(STR_NEW0(), options));
9726  }
9727  else switch (nd_type(node)) {
9728  case NODE_STR:
9729  {
9730  VALUE src = node->nd_lit;
9731  nd_set_type(node, NODE_LIT);
9732  node->nd_lit = reg_compile(src, options);
9733  }
9734  break;
9735  default:
9736  node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
9737  case NODE_DSTR:
9738  if (options & RE_OPTION_ONCE) {
9740  }
9741  else {
9742  nd_set_type(node, NODE_DREGX);
9743  }
9744  node->nd_cflag = options & RE_OPTION_MASK;
9745  if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
9746  for (list = (prev = node)->nd_next; list; list = list->nd_next) {
9747  if (nd_type(list->nd_head) == NODE_STR) {
9748  VALUE tail = list->nd_head->nd_lit;
9749  if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
9750  VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
9751  if (!literal_concat0(parser, lit, tail)) {
9752  node = 0;
9753  break;
9754  }
9755  rb_str_resize(tail, 0);
9756  prev->nd_next = list->nd_next;
9757  rb_gc_force_recycle((VALUE)list->nd_head);
9758  rb_gc_force_recycle((VALUE)list);
9759  list = prev;
9760  }
9761  else {
9762  prev = list;
9763  }
9764  }
9765  else {
9766  prev = 0;
9767  }
9768  }
9769  if (!node->nd_next) {
9770  VALUE src = node->nd_lit;
9771  nd_set_type(node, NODE_LIT);
9772  node->nd_lit = reg_compile(src, options);
9773  }
9774  break;
9775  }
9776  (yyval.node) = node;
9777  /*%
9778  $$ = dispatch2(regexp_literal, $2, $3);
9779  %*/
9780  }
9781  break;
9782 
9783  case 460:
9784 
9785 /* Line 1806 of yacc.c */
9786 #line 3961 "parse.y"
9787  {
9788  /*%%%*/
9789  (yyval.node) = NEW_ZARRAY();
9790  /*%
9791  $$ = dispatch0(words_new);
9792  $$ = dispatch1(array, $$);
9793  %*/
9794  }
9795  break;
9796 
9797  case 461:
9798 
9799 /* Line 1806 of yacc.c */
9800 #line 3970 "parse.y"
9801  {
9802  /*%%%*/
9803  (yyval.node) = (yyvsp[(2) - (3)].node);
9804  /*%
9805  $$ = dispatch1(array, $2);
9806  %*/
9807  }
9808  break;
9809 
9810  case 462:
9811 
9812 /* Line 1806 of yacc.c */
9813 #line 3980 "parse.y"
9814  {
9815  /*%%%*/
9816  (yyval.node) = 0;
9817  /*%
9818  $$ = dispatch0(words_new);
9819  %*/
9820  }
9821  break;
9822 
9823  case 463:
9824 
9825 /* Line 1806 of yacc.c */
9826 #line 3988 "parse.y"
9827  {
9828  /*%%%*/
9829  (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
9830  /*%
9831  $$ = dispatch2(words_add, $1, $2);
9832  %*/
9833  }
9834  break;
9835 
9836  case 465:
9837 
9838 /* Line 1806 of yacc.c */
9839 #line 4006 "parse.y"
9840  {
9841  /*%%%*/
9842  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
9843  /*%
9844  $$ = dispatch2(word_add, $1, $2);
9845  %*/
9846  }
9847  break;
9848 
9849  case 466:
9850 
9851 /* Line 1806 of yacc.c */
9852 #line 4016 "parse.y"
9853  {
9854  /*%%%*/
9855  (yyval.node) = NEW_ZARRAY();
9856  /*%
9857  $$ = dispatch0(symbols_new);
9858  $$ = dispatch1(array, $$);
9859  %*/
9860  }
9861  break;
9862 
9863  case 467:
9864 
9865 /* Line 1806 of yacc.c */
9866 #line 4025 "parse.y"
9867  {
9868  /*%%%*/
9869  (yyval.node) = (yyvsp[(2) - (3)].node);
9870  /*%
9871  $$ = dispatch1(array, $2);
9872  %*/
9873  }
9874  break;
9875 
9876  case 468:
9877 
9878 /* Line 1806 of yacc.c */
9879 #line 4035 "parse.y"
9880  {
9881  /*%%%*/
9882  (yyval.node) = 0;
9883  /*%
9884  $$ = dispatch0(symbols_new);
9885  %*/
9886  }
9887  break;
9888 
9889  case 469:
9890 
9891 /* Line 1806 of yacc.c */
9892 #line 4043 "parse.y"
9893  {
9894  /*%%%*/
9895  (yyvsp[(2) - (3)].node) = evstr2dstr((yyvsp[(2) - (3)].node));
9896  nd_set_type((yyvsp[(2) - (3)].node), NODE_DSYM);
9897  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
9898  /*%
9899  $$ = dispatch2(symbols_add, $1, $2);
9900  %*/
9901  }
9902  break;
9903 
9904  case 470:
9905 
9906 /* Line 1806 of yacc.c */
9907 #line 4055 "parse.y"
9908  {
9909  /*%%%*/
9910  (yyval.node) = NEW_ZARRAY();
9911  /*%
9912  $$ = dispatch0(qwords_new);
9913  $$ = dispatch1(array, $$);
9914  %*/
9915  }
9916  break;
9917 
9918  case 471:
9919 
9920 /* Line 1806 of yacc.c */
9921 #line 4064 "parse.y"
9922  {
9923  /*%%%*/
9924  (yyval.node) = (yyvsp[(2) - (3)].node);
9925  /*%
9926  $$ = dispatch1(array, $2);
9927  %*/
9928  }
9929  break;
9930 
9931  case 472:
9932 
9933 /* Line 1806 of yacc.c */
9934 #line 4074 "parse.y"
9935  {
9936  /*%%%*/
9937  (yyval.node) = NEW_ZARRAY();
9938  /*%
9939  $$ = dispatch0(qsymbols_new);
9940  $$ = dispatch1(array, $$);
9941  %*/
9942  }
9943  break;
9944 
9945  case 473:
9946 
9947 /* Line 1806 of yacc.c */
9948 #line 4083 "parse.y"
9949  {
9950  /*%%%*/
9951  (yyval.node) = (yyvsp[(2) - (3)].node);
9952  /*%
9953  $$ = dispatch1(array, $2);
9954  %*/
9955  }
9956  break;
9957 
9958  case 474:
9959 
9960 /* Line 1806 of yacc.c */
9961 #line 4093 "parse.y"
9962  {
9963  /*%%%*/
9964  (yyval.node) = 0;
9965  /*%
9966  $$ = dispatch0(qwords_new);
9967  %*/
9968  }
9969  break;
9970 
9971  case 475:
9972 
9973 /* Line 1806 of yacc.c */
9974 #line 4101 "parse.y"
9975  {
9976  /*%%%*/
9977  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
9978  /*%
9979  $$ = dispatch2(qwords_add, $1, $2);
9980  %*/
9981  }
9982  break;
9983 
9984  case 476:
9985 
9986 /* Line 1806 of yacc.c */
9987 #line 4111 "parse.y"
9988  {
9989  /*%%%*/
9990  (yyval.node) = 0;
9991  /*%
9992  $$ = dispatch0(qsymbols_new);
9993  %*/
9994  }
9995  break;
9996 
9997  case 477:
9998 
9999 /* Line 1806 of yacc.c */
10000 #line 4119 "parse.y"
10001  {
10002  /*%%%*/
10003  VALUE lit;
10004  lit = (yyvsp[(2) - (3)].node)->nd_lit;
10005  (yyvsp[(2) - (3)].node)->nd_lit = ID2SYM(rb_intern_str(lit));
10006  nd_set_type((yyvsp[(2) - (3)].node), NODE_LIT);
10007  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
10008  /*%
10009  $$ = dispatch2(qsymbols_add, $1, $2);
10010  %*/
10011  }
10012  break;
10013 
10014  case 478:
10015 
10016 /* Line 1806 of yacc.c */
10017 #line 4133 "parse.y"
10018  {
10019  /*%%%*/
10020  (yyval.node) = 0;
10021  /*%
10022  $$ = dispatch0(string_content);
10023  %*/
10024  }
10025  break;
10026 
10027  case 479:
10028 
10029 /* Line 1806 of yacc.c */
10030 #line 4141 "parse.y"
10031  {
10032  /*%%%*/
10033  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
10034  /*%
10035  $$ = dispatch2(string_add, $1, $2);
10036  %*/
10037  }
10038  break;
10039 
10040  case 480:
10041 
10042 /* Line 1806 of yacc.c */
10043 #line 4151 "parse.y"
10044  {
10045  /*%%%*/
10046  (yyval.node) = 0;
10047  /*%
10048  $$ = dispatch0(xstring_new);
10049  %*/
10050  }
10051  break;
10052 
10053  case 481:
10054 
10055 /* Line 1806 of yacc.c */
10056 #line 4159 "parse.y"
10057  {
10058  /*%%%*/
10059  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
10060  /*%
10061  $$ = dispatch2(xstring_add, $1, $2);
10062  %*/
10063  }
10064  break;
10065 
10066  case 482:
10067 
10068 /* Line 1806 of yacc.c */
10069 #line 4169 "parse.y"
10070  {
10071  /*%%%*/
10072  (yyval.node) = 0;
10073  /*%
10074  $$ = dispatch0(regexp_new);
10075  %*/
10076  }
10077  break;
10078 
10079  case 483:
10080 
10081 /* Line 1806 of yacc.c */
10082 #line 4177 "parse.y"
10083  {
10084  /*%%%*/
10085  NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
10086  if (!head) {
10087  (yyval.node) = tail;
10088  }
10089  else if (!tail) {
10090  (yyval.node) = head;
10091  }
10092  else {
10093  switch (nd_type(head)) {
10094  case NODE_STR:
10095  nd_set_type(head, NODE_DSTR);
10096  break;
10097  case NODE_DSTR:
10098  break;
10099  default:
10100  head = list_append(NEW_DSTR(Qnil), head);
10101  break;
10102  }
10103  (yyval.node) = list_append(head, tail);
10104  }
10105  /*%
10106  $$ = dispatch2(regexp_add, $1, $2);
10107  %*/
10108  }
10109  break;
10110 
10111  case 485:
10112 
10113 /* Line 1806 of yacc.c */
10114 #line 4207 "parse.y"
10115  {
10116  (yyval.node) = lex_strterm;
10117  lex_strterm = 0;
10118  lex_state = EXPR_BEG;
10119  }
10120  break;
10121 
10122  case 486:
10123 
10124 /* Line 1806 of yacc.c */
10125 #line 4213 "parse.y"
10126  {
10127  /*%%%*/
10128  lex_strterm = (yyvsp[(2) - (3)].node);
10129  (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
10130  /*%
10131  lex_strterm = $<node>2;
10132  $$ = dispatch1(string_dvar, $3);
10133  %*/
10134  }
10135  break;
10136 
10137  case 487:
10138 
10139 /* Line 1806 of yacc.c */
10140 #line 4223 "parse.y"
10141  {
10142  (yyvsp[(1) - (1)].val) = cond_stack;
10143  (yyval.val) = cmdarg_stack;
10144  cond_stack = 0;
10145  cmdarg_stack = 0;
10146  }
10147  break;
10148 
10149  case 488:
10150 
10151 /* Line 1806 of yacc.c */
10152 #line 4229 "parse.y"
10153  {
10154  (yyval.node) = lex_strterm;
10155  lex_strterm = 0;
10156  lex_state = EXPR_BEG;
10157  }
10158  break;
10159 
10160  case 489:
10161 
10162 /* Line 1806 of yacc.c */
10163 #line 4234 "parse.y"
10164  {
10165  (yyval.num) = brace_nest;
10166  brace_nest = 0;
10167  }
10168  break;
10169 
10170  case 490:
10171 
10172 /* Line 1806 of yacc.c */
10173 #line 4239 "parse.y"
10174  {
10175  cond_stack = (yyvsp[(1) - (6)].val);
10176  cmdarg_stack = (yyvsp[(2) - (6)].val);
10177  lex_strterm = (yyvsp[(3) - (6)].node);
10178  brace_nest = (yyvsp[(4) - (6)].num);
10179  /*%%%*/
10180  if ((yyvsp[(5) - (6)].node)) (yyvsp[(5) - (6)].node)->flags &= ~NODE_FL_NEWLINE;
10181  (yyval.node) = new_evstr((yyvsp[(5) - (6)].node));
10182  /*%
10183  $$ = dispatch1(string_embexpr, $5);
10184  %*/
10185  }
10186  break;
10187 
10188  case 491:
10189 
10190 /* Line 1806 of yacc.c */
10191 #line 4254 "parse.y"
10192  {
10193  /*%%%*/
10194  (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
10195  /*%
10196  $$ = dispatch1(var_ref, $1);
10197  %*/
10198  }
10199  break;
10200 
10201  case 492:
10202 
10203 /* Line 1806 of yacc.c */
10204 #line 4262 "parse.y"
10205  {
10206  /*%%%*/
10207  (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
10208  /*%
10209  $$ = dispatch1(var_ref, $1);
10210  %*/
10211  }
10212  break;
10213 
10214  case 493:
10215 
10216 /* Line 1806 of yacc.c */
10217 #line 4270 "parse.y"
10218  {
10219  /*%%%*/
10220  (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
10221  /*%
10222  $$ = dispatch1(var_ref, $1);
10223  %*/
10224  }
10225  break;
10226 
10227  case 495:
10228 
10229 /* Line 1806 of yacc.c */
10230 #line 4281 "parse.y"
10231  {
10232  lex_state = EXPR_END;
10233  /*%%%*/
10234  (yyval.id) = (yyvsp[(2) - (2)].id);
10235  /*%
10236  $$ = dispatch1(symbol, $2);
10237  %*/
10238  }
10239  break;
10240 
10241  case 500:
10242 
10243 /* Line 1806 of yacc.c */
10244 #line 4298 "parse.y"
10245  {
10246  lex_state = EXPR_END;
10247  /*%%%*/
10248  (yyval.node) = dsym_node((yyvsp[(2) - (3)].node));
10249  /*%
10250  $$ = dispatch1(dyna_symbol, $2);
10251  %*/
10252  }
10253  break;
10254 
10255  case 503:
10256 
10257 /* Line 1806 of yacc.c */
10258 #line 4311 "parse.y"
10259  {
10260  /*%%%*/
10261  (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
10262  /*%
10263  $$ = dispatch2(unary, ripper_intern("-@"), $2);
10264  %*/
10265  }
10266  break;
10267 
10268  case 504:
10269 
10270 /* Line 1806 of yacc.c */
10271 #line 4319 "parse.y"
10272  {
10273  /*%%%*/
10274  (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
10275  /*%
10276  $$ = dispatch2(unary, ripper_intern("-@"), $2);
10277  %*/
10278  }
10279  break;
10280 
10281  case 510:
10282 
10283 /* Line 1806 of yacc.c */
10284 #line 4335 "parse.y"
10285  {ifndef_ripper((yyval.id) = keyword_nil);}
10286  break;
10287 
10288  case 511:
10289 
10290 /* Line 1806 of yacc.c */
10291 #line 4336 "parse.y"
10292  {ifndef_ripper((yyval.id) = keyword_self);}
10293  break;
10294 
10295  case 512:
10296 
10297 /* Line 1806 of yacc.c */
10298 #line 4337 "parse.y"
10299  {ifndef_ripper((yyval.id) = keyword_true);}
10300  break;
10301 
10302  case 513:
10303 
10304 /* Line 1806 of yacc.c */
10305 #line 4338 "parse.y"
10306  {ifndef_ripper((yyval.id) = keyword_false);}
10307  break;
10308 
10309  case 514:
10310 
10311 /* Line 1806 of yacc.c */
10312 #line 4339 "parse.y"
10313  {ifndef_ripper((yyval.id) = keyword__FILE__);}
10314  break;
10315 
10316  case 515:
10317 
10318 /* Line 1806 of yacc.c */
10319 #line 4340 "parse.y"
10320  {ifndef_ripper((yyval.id) = keyword__LINE__);}
10321  break;
10322 
10323  case 516:
10324 
10325 /* Line 1806 of yacc.c */
10326 #line 4341 "parse.y"
10327  {ifndef_ripper((yyval.id) = keyword__ENCODING__);}
10328  break;
10329 
10330  case 517:
10331 
10332 /* Line 1806 of yacc.c */
10333 #line 4345 "parse.y"
10334  {
10335  /*%%%*/
10336  if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10337  /*%
10338  if (id_is_var(get_id($1))) {
10339  $$ = dispatch1(var_ref, $1);
10340  }
10341  else {
10342  $$ = dispatch1(vcall, $1);
10343  }
10344  %*/
10345  }
10346  break;
10347 
10348  case 518:
10349 
10350 /* Line 1806 of yacc.c */
10351 #line 4358 "parse.y"
10352  {
10353  /*%%%*/
10354  if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10355  /*%
10356  $$ = dispatch1(var_ref, $1);
10357  %*/
10358  }
10359  break;
10360 
10361  case 519:
10362 
10363 /* Line 1806 of yacc.c */
10364 #line 4368 "parse.y"
10365  {
10366  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10367  /*%%%*/
10368  /*%
10369  $$ = dispatch1(var_field, $$);
10370  %*/
10371  }
10372  break;
10373 
10374  case 520:
10375 
10376 /* Line 1806 of yacc.c */
10377 #line 4376 "parse.y"
10378  {
10379  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10380  /*%%%*/
10381  /*%
10382  $$ = dispatch1(var_field, $$);
10383  %*/
10384  }
10385  break;
10386 
10387  case 523:
10388 
10389 /* Line 1806 of yacc.c */
10390 #line 4390 "parse.y"
10391  {
10392  /*%%%*/
10393  (yyval.node) = 0;
10394  /*%
10395  $$ = Qnil;
10396  %*/
10397  }
10398  break;
10399 
10400  case 524:
10401 
10402 /* Line 1806 of yacc.c */
10403 #line 4398 "parse.y"
10404  {
10405  lex_state = EXPR_BEG;
10406  command_start = TRUE;
10407  }
10408  break;
10409 
10410  case 525:
10411 
10412 /* Line 1806 of yacc.c */
10413 #line 4403 "parse.y"
10414  {
10415  (yyval.node) = (yyvsp[(3) - (4)].node);
10416  }
10417  break;
10418 
10419  case 526:
10420 
10421 /* Line 1806 of yacc.c */
10422 #line 4407 "parse.y"
10423  {
10424  /*%%%*/
10425  yyerrok;
10426  (yyval.node) = 0;
10427  /*%
10428  yyerrok;
10429  $$ = Qnil;
10430  %*/
10431  }
10432  break;
10433 
10434  case 527:
10435 
10436 /* Line 1806 of yacc.c */
10437 #line 4419 "parse.y"
10438  {
10439  /*%%%*/
10440  (yyval.node) = (yyvsp[(2) - (3)].node);
10441  /*%
10442  $$ = dispatch1(paren, $2);
10443  %*/
10444  lex_state = EXPR_BEG;
10445  command_start = TRUE;
10446  }
10447  break;
10448 
10449  case 528:
10450 
10451 /* Line 1806 of yacc.c */
10452 #line 4429 "parse.y"
10453  {
10454  (yyval.node) = (yyvsp[(1) - (2)].node);
10455  lex_state = EXPR_BEG;
10456  command_start = TRUE;
10457  }
10458  break;
10459 
10460  case 529:
10461 
10462 /* Line 1806 of yacc.c */
10463 #line 4437 "parse.y"
10464  {
10465  (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id));
10466  }
10467  break;
10468 
10469  case 530:
10470 
10471 /* Line 1806 of yacc.c */
10472 #line 4441 "parse.y"
10473  {
10474  (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
10475  }
10476  break;
10477 
10478  case 531:
10479 
10480 /* Line 1806 of yacc.c */
10481 #line 4445 "parse.y"
10482  {
10483  (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
10484  }
10485  break;
10486 
10487  case 532:
10488 
10489 /* Line 1806 of yacc.c */
10490 #line 4449 "parse.y"
10491  {
10492  (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
10493  }
10494  break;
10495 
10496  case 533:
10497 
10498 /* Line 1806 of yacc.c */
10499 #line 4455 "parse.y"
10500  {
10501  (yyval.node) = (yyvsp[(2) - (2)].node);
10502  }
10503  break;
10504 
10505  case 534:
10506 
10507 /* Line 1806 of yacc.c */
10508 #line 4459 "parse.y"
10509  {
10510  (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
10511  }
10512  break;
10513 
10514  case 535:
10515 
10516 /* Line 1806 of yacc.c */
10517 #line 4465 "parse.y"
10518  {
10519  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node));
10520  }
10521  break;
10522 
10523  case 536:
10524 
10525 /* Line 1806 of yacc.c */
10526 #line 4469 "parse.y"
10527  {
10528  (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node));
10529  }
10530  break;
10531 
10532  case 537:
10533 
10534 /* Line 1806 of yacc.c */
10535 #line 4473 "parse.y"
10536  {
10537  (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node));
10538  }
10539  break;
10540 
10541  case 538:
10542 
10543 /* Line 1806 of yacc.c */
10544 #line 4477 "parse.y"
10545  {
10546  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10547  }
10548  break;
10549 
10550  case 539:
10551 
10552 /* Line 1806 of yacc.c */
10553 #line 4481 "parse.y"
10554  {
10555  (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
10556  }
10557  break;
10558 
10559  case 540:
10560 
10561 /* Line 1806 of yacc.c */
10562 #line 4485 "parse.y"
10563  {
10564  (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10565  }
10566  break;
10567 
10568  case 541:
10569 
10570 /* Line 1806 of yacc.c */
10571 #line 4489 "parse.y"
10572  {
10573  (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node));
10574  }
10575  break;
10576 
10577  case 542:
10578 
10579 /* Line 1806 of yacc.c */
10580 #line 4493 "parse.y"
10581  {
10582  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
10583  }
10584  break;
10585 
10586  case 543:
10587 
10588 /* Line 1806 of yacc.c */
10589 #line 4497 "parse.y"
10590  {
10591  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10592  }
10593  break;
10594 
10595  case 544:
10596 
10597 /* Line 1806 of yacc.c */
10598 #line 4501 "parse.y"
10599  {
10600  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node));
10601  }
10602  break;
10603 
10604  case 545:
10605 
10606 /* Line 1806 of yacc.c */
10607 #line 4505 "parse.y"
10608  {
10609  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
10610  }
10611  break;
10612 
10613  case 546:
10614 
10615 /* Line 1806 of yacc.c */
10616 #line 4509 "parse.y"
10617  {
10618  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node));
10619  }
10620  break;
10621 
10622  case 547:
10623 
10624 /* Line 1806 of yacc.c */
10625 #line 4513 "parse.y"
10626  {
10627  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
10628  }
10629  break;
10630 
10631  case 548:
10632 
10633 /* Line 1806 of yacc.c */
10634 #line 4517 "parse.y"
10635  {
10636  (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
10637  }
10638  break;
10639 
10640  case 549:
10641 
10642 /* Line 1806 of yacc.c */
10643 #line 4521 "parse.y"
10644  {
10645  (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
10646  (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyval.node));
10647  }
10648  break;
10649 
10650  case 550:
10651 
10652 /* Line 1806 of yacc.c */
10653 #line 4528 "parse.y"
10654  {
10655  /*%%%*/
10656  yyerror("formal argument cannot be a constant");
10657  (yyval.id) = 0;
10658  /*%
10659  $$ = dispatch1(param_error, $1);
10660  %*/
10661  }
10662  break;
10663 
10664  case 551:
10665 
10666 /* Line 1806 of yacc.c */
10667 #line 4537 "parse.y"
10668  {
10669  /*%%%*/
10670  yyerror("formal argument cannot be an instance variable");
10671  (yyval.id) = 0;
10672  /*%
10673  $$ = dispatch1(param_error, $1);
10674  %*/
10675  }
10676  break;
10677 
10678  case 552:
10679 
10680 /* Line 1806 of yacc.c */
10681 #line 4546 "parse.y"
10682  {
10683  /*%%%*/
10684  yyerror("formal argument cannot be a global variable");
10685  (yyval.id) = 0;
10686  /*%
10687  $$ = dispatch1(param_error, $1);
10688  %*/
10689  }
10690  break;
10691 
10692  case 553:
10693 
10694 /* Line 1806 of yacc.c */
10695 #line 4555 "parse.y"
10696  {
10697  /*%%%*/
10698  yyerror("formal argument cannot be a class variable");
10699  (yyval.id) = 0;
10700  /*%
10701  $$ = dispatch1(param_error, $1);
10702  %*/
10703  }
10704  break;
10705 
10706  case 555:
10707 
10708 /* Line 1806 of yacc.c */
10709 #line 4567 "parse.y"
10710  {
10711  formal_argument(get_id((yyvsp[(1) - (1)].id)));
10712  (yyval.id) = (yyvsp[(1) - (1)].id);
10713  }
10714  break;
10715 
10716  case 556:
10717 
10718 /* Line 1806 of yacc.c */
10719 #line 4574 "parse.y"
10720  {
10721  arg_var(get_id((yyvsp[(1) - (1)].id)));
10722  /*%%%*/
10723  (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
10724  /*%
10725  $$ = get_value($1);
10726  %*/
10727  }
10728  break;
10729 
10730  case 557:
10731 
10732 /* Line 1806 of yacc.c */
10733 #line 4583 "parse.y"
10734  {
10735  ID tid = internal_id();
10736  arg_var(tid);
10737  /*%%%*/
10738  if (dyna_in_block()) {
10739  (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
10740  }
10741  else {
10742  (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
10743  }
10744  (yyval.node) = NEW_ARGS_AUX(tid, 1);
10745  (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
10746  /*%
10747  $$ = dispatch1(mlhs_paren, $2);
10748  %*/
10749  }
10750  break;
10751 
10752  case 559:
10753 
10754 /* Line 1806 of yacc.c */
10755 #line 4609 "parse.y"
10756  {
10757  /*%%%*/
10758  (yyval.node) = (yyvsp[(1) - (3)].node);
10759  (yyval.node)->nd_plen++;
10760  (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
10761  rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
10762  /*%
10763  $$ = rb_ary_push($1, $3);
10764  %*/
10765  }
10766  break;
10767 
10768  case 560:
10769 
10770 /* Line 1806 of yacc.c */
10771 #line 4622 "parse.y"
10772  {
10773  arg_var(formal_argument(get_id((yyvsp[(1) - (2)].id))));
10774  (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
10775  /*%%%*/
10776  (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10777  /*%
10778  $$ = rb_assoc_new($$, $2);
10779  %*/
10780  }
10781  break;
10782 
10783  case 561:
10784 
10785 /* Line 1806 of yacc.c */
10786 #line 4634 "parse.y"
10787  {
10788  arg_var(formal_argument(get_id((yyvsp[(1) - (2)].id))));
10789  (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
10790  /*%%%*/
10791  (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10792  /*%
10793  $$ = rb_assoc_new($$, $2);
10794  %*/
10795  }
10796  break;
10797 
10798  case 562:
10799 
10800 /* Line 1806 of yacc.c */
10801 #line 4646 "parse.y"
10802  {
10803  /*%%%*/
10804  (yyval.node) = (yyvsp[(1) - (1)].node);
10805  /*%
10806  $$ = rb_ary_new3(1, $1);
10807  %*/
10808  }
10809  break;
10810 
10811  case 563:
10812 
10813 /* Line 1806 of yacc.c */
10814 #line 4654 "parse.y"
10815  {
10816  /*%%%*/
10817  NODE *kws = (yyvsp[(1) - (3)].node);
10818 
10819  while (kws->nd_next) {
10820  kws = kws->nd_next;
10821  }
10822  kws->nd_next = (yyvsp[(3) - (3)].node);
10823  (yyval.node) = (yyvsp[(1) - (3)].node);
10824  /*%
10825  $$ = rb_ary_push($1, $3);
10826  %*/
10827  }
10828  break;
10829 
10830  case 564:
10831 
10832 /* Line 1806 of yacc.c */
10833 #line 4671 "parse.y"
10834  {
10835  /*%%%*/
10836  (yyval.node) = (yyvsp[(1) - (1)].node);
10837  /*%
10838  $$ = rb_ary_new3(1, $1);
10839  %*/
10840  }
10841  break;
10842 
10843  case 565:
10844 
10845 /* Line 1806 of yacc.c */
10846 #line 4679 "parse.y"
10847  {
10848  /*%%%*/
10849  NODE *kws = (yyvsp[(1) - (3)].node);
10850 
10851  while (kws->nd_next) {
10852  kws = kws->nd_next;
10853  }
10854  kws->nd_next = (yyvsp[(3) - (3)].node);
10855  (yyval.node) = (yyvsp[(1) - (3)].node);
10856  /*%
10857  $$ = rb_ary_push($1, $3);
10858  %*/
10859  }
10860  break;
10861 
10862  case 568:
10863 
10864 /* Line 1806 of yacc.c */
10865 #line 4699 "parse.y"
10866  {
10867  shadowing_lvar(get_id((yyvsp[(2) - (2)].id)));
10868  (yyval.id) = (yyvsp[(2) - (2)].id);
10869  }
10870  break;
10871 
10872  case 569:
10873 
10874 /* Line 1806 of yacc.c */
10875 #line 4704 "parse.y"
10876  {
10877  (yyval.id) = internal_id();
10878  }
10879  break;
10880 
10881  case 570:
10882 
10883 /* Line 1806 of yacc.c */
10884 #line 4710 "parse.y"
10885  {
10886  arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10887  (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10888  /*%%%*/
10889  (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10890  /*%
10891  $$ = rb_assoc_new($$, $3);
10892  %*/
10893  }
10894  break;
10895 
10896  case 571:
10897 
10898 /* Line 1806 of yacc.c */
10899 #line 4722 "parse.y"
10900  {
10901  arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10902  (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10903  /*%%%*/
10904  (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10905  /*%
10906  $$ = rb_assoc_new($$, $3);
10907  %*/
10908  }
10909  break;
10910 
10911  case 572:
10912 
10913 /* Line 1806 of yacc.c */
10914 #line 4734 "parse.y"
10915  {
10916  /*%%%*/
10917  (yyval.node) = (yyvsp[(1) - (1)].node);
10918  /*%
10919  $$ = rb_ary_new3(1, $1);
10920  %*/
10921  }
10922  break;
10923 
10924  case 573:
10925 
10926 /* Line 1806 of yacc.c */
10927 #line 4742 "parse.y"
10928  {
10929  /*%%%*/
10930  NODE *opts = (yyvsp[(1) - (3)].node);
10931 
10932  while (opts->nd_next) {
10933  opts = opts->nd_next;
10934  }
10935  opts->nd_next = (yyvsp[(3) - (3)].node);
10936  (yyval.node) = (yyvsp[(1) - (3)].node);
10937  /*%
10938  $$ = rb_ary_push($1, $3);
10939  %*/
10940  }
10941  break;
10942 
10943  case 574:
10944 
10945 /* Line 1806 of yacc.c */
10946 #line 4758 "parse.y"
10947  {
10948  /*%%%*/
10949  (yyval.node) = (yyvsp[(1) - (1)].node);
10950  /*%
10951  $$ = rb_ary_new3(1, $1);
10952  %*/
10953  }
10954  break;
10955 
10956  case 575:
10957 
10958 /* Line 1806 of yacc.c */
10959 #line 4766 "parse.y"
10960  {
10961  /*%%%*/
10962  NODE *opts = (yyvsp[(1) - (3)].node);
10963 
10964  while (opts->nd_next) {
10965  opts = opts->nd_next;
10966  }
10967  opts->nd_next = (yyvsp[(3) - (3)].node);
10968  (yyval.node) = (yyvsp[(1) - (3)].node);
10969  /*%
10970  $$ = rb_ary_push($1, $3);
10971  %*/
10972  }
10973  break;
10974 
10975  case 578:
10976 
10977 /* Line 1806 of yacc.c */
10978 #line 4786 "parse.y"
10979  {
10980  /*%%%*/
10981  if (!is_local_id((yyvsp[(2) - (2)].id)))
10982  yyerror("rest argument must be local variable");
10983  /*% %*/
10984  arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10985  /*%%%*/
10986  (yyval.id) = (yyvsp[(2) - (2)].id);
10987  /*%
10988  $$ = dispatch1(rest_param, $2);
10989  %*/
10990  }
10991  break;
10992 
10993  case 579:
10994 
10995 /* Line 1806 of yacc.c */
10996 #line 4799 "parse.y"
10997  {
10998  /*%%%*/
10999  (yyval.id) = internal_id();
11000  arg_var((yyval.id));
11001  /*%
11002  $$ = dispatch1(rest_param, Qnil);
11003  %*/
11004  }
11005  break;
11006 
11007  case 582:
11008 
11009 /* Line 1806 of yacc.c */
11010 #line 4814 "parse.y"
11011  {
11012  /*%%%*/
11013  if (!is_local_id((yyvsp[(2) - (2)].id)))
11014  yyerror("block argument must be local variable");
11015  else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
11016  yyerror("duplicated block argument name");
11017  /*% %*/
11018  arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
11019  /*%%%*/
11020  (yyval.id) = (yyvsp[(2) - (2)].id);
11021  /*%
11022  $$ = dispatch1(blockarg, $2);
11023  %*/
11024  }
11025  break;
11026 
11027  case 583:
11028 
11029 /* Line 1806 of yacc.c */
11030 #line 4831 "parse.y"
11031  {
11032  (yyval.id) = (yyvsp[(2) - (2)].id);
11033  }
11034  break;
11035 
11036  case 584:
11037 
11038 /* Line 1806 of yacc.c */
11039 #line 4835 "parse.y"
11040  {
11041  /*%%%*/
11042  (yyval.id) = 0;
11043  /*%
11044  $$ = Qundef;
11045  %*/
11046  }
11047  break;
11048 
11049  case 585:
11050 
11051 /* Line 1806 of yacc.c */
11052 #line 4845 "parse.y"
11053  {
11054  /*%%%*/
11055  value_expr((yyvsp[(1) - (1)].node));
11056  (yyval.node) = (yyvsp[(1) - (1)].node);
11057  if (!(yyval.node)) (yyval.node) = NEW_NIL();
11058  /*%
11059  $$ = $1;
11060  %*/
11061  }
11062  break;
11063 
11064  case 586:
11065 
11066 /* Line 1806 of yacc.c */
11067 #line 4854 "parse.y"
11068  {lex_state = EXPR_BEG;}
11069  break;
11070 
11071  case 587:
11072 
11073 /* Line 1806 of yacc.c */
11074 #line 4855 "parse.y"
11075  {
11076  /*%%%*/
11077  if ((yyvsp[(3) - (4)].node) == 0) {
11078  yyerror("can't define singleton method for ().");
11079  }
11080  else {
11081  switch (nd_type((yyvsp[(3) - (4)].node))) {
11082  case NODE_STR:
11083  case NODE_DSTR:
11084  case NODE_XSTR:
11085  case NODE_DXSTR:
11086  case NODE_DREGX:
11087  case NODE_LIT:
11088  case NODE_ARRAY:
11089  case NODE_ZARRAY:
11090  yyerror("can't define singleton method for literals");
11091  default:
11092  value_expr((yyvsp[(3) - (4)].node));
11093  break;
11094  }
11095  }
11096  (yyval.node) = (yyvsp[(3) - (4)].node);
11097  /*%
11098  $$ = dispatch1(paren, $3);
11099  %*/
11100  }
11101  break;
11102 
11103  case 589:
11104 
11105 /* Line 1806 of yacc.c */
11106 #line 4885 "parse.y"
11107  {
11108  /*%%%*/
11109  (yyval.node) = (yyvsp[(1) - (2)].node);
11110  /*%
11111  $$ = dispatch1(assoclist_from_args, $1);
11112  %*/
11113  }
11114  break;
11115 
11116  case 591:
11117 
11118 /* Line 1806 of yacc.c */
11119 #line 4902 "parse.y"
11120  {
11121  /*%%%*/
11122  (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
11123  /*%
11124  $$ = rb_ary_push($1, $3);
11125  %*/
11126  }
11127  break;
11128 
11129  case 592:
11130 
11131 /* Line 1806 of yacc.c */
11132 #line 4912 "parse.y"
11133  {
11134  /*%%%*/
11135  (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
11136  /*%
11137  $$ = dispatch2(assoc_new, $1, $3);
11138  %*/
11139  }
11140  break;
11141 
11142  case 593:
11143 
11144 /* Line 1806 of yacc.c */
11145 #line 4920 "parse.y"
11146  {
11147  /*%%%*/
11148  (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
11149  /*%
11150  $$ = dispatch2(assoc_new, $1, $2);
11151  %*/
11152  }
11153  break;
11154 
11155  case 594:
11156 
11157 /* Line 1806 of yacc.c */
11158 #line 4928 "parse.y"
11159  {
11160  /*%%%*/
11161  (yyval.node) = list_append(NEW_LIST(0), (yyvsp[(2) - (2)].node));
11162  /*%
11163  $$ = dispatch1(assoc_splat, $2);
11164  %*/
11165  }
11166  break;
11167 
11168  case 616:
11169 
11170 /* Line 1806 of yacc.c */
11171 #line 4986 "parse.y"
11172  {yyerrok;}
11173  break;
11174 
11175  case 619:
11176 
11177 /* Line 1806 of yacc.c */
11178 #line 4991 "parse.y"
11179  {yyerrok;}
11180  break;
11181 
11182  case 620:
11183 
11184 /* Line 1806 of yacc.c */
11185 #line 4995 "parse.y"
11186  {
11187  /*%%%*/
11188  (yyval.node) = 0;
11189  /*%
11190  $$ = Qundef;
11191  %*/
11192  }
11193  break;
11194 
11195 
11196 
11197 /* Line 1806 of yacc.c */
11198 #line 11197 "parse.c"
11199  default: break;
11200  }
11201  /* User semantic actions sometimes alter yychar, and that requires
11202  that yytoken be updated with the new translation. We take the
11203  approach of translating immediately before every use of yytoken.
11204  One alternative is translating here after every semantic action,
11205  but that translation would be missed if the semantic action invokes
11206  YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
11207  if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
11208  incorrect destructor might then be invoked immediately. In the
11209  case of YYERROR or YYBACKUP, subsequent parser actions might lead
11210  to an incorrect destructor call or verbose syntax error message
11211  before the lookahead is translated. */
11212  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
11213 
11214  YYPOPSTACK (yylen);
11215  yylen = 0;
11216  YY_STACK_PRINT (yyss, yyssp);
11217 
11218  *++yyvsp = yyval;
11219 
11220  /* Now `shift' the result of the reduction. Determine what state
11221  that goes to, based on the state we popped back to and the rule
11222  number reduced by. */
11223 
11224  yyn = yyr1[yyn];
11225 
11226  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
11227  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
11228  yystate = yytable[yystate];
11229  else
11230  yystate = yydefgoto[yyn - YYNTOKENS];
11231 
11232  goto yynewstate;
11233 
11234 
11235 /*------------------------------------.
11236 | yyerrlab -- here on detecting error |
11237 `------------------------------------*/
11238 yyerrlab:
11239  /* Make sure we have latest lookahead translation. See comments at
11240  user semantic actions for why this is necessary. */
11241  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
11242 
11243  /* If not already recovering from an error, report this error. */
11244  if (!yyerrstatus)
11245  {
11246  ++yynerrs;
11247 #if ! YYERROR_VERBOSE
11248  parser_yyerror (parser, YY_("syntax error"));
11249 #else
11250 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
11251  yyssp, yytoken)
11252  {
11253  char const *yymsgp = YY_("syntax error");
11254  int yysyntax_error_status;
11255  yysyntax_error_status = YYSYNTAX_ERROR;
11256  if (yysyntax_error_status == 0)
11257  yymsgp = yymsg;
11258  else if (yysyntax_error_status == 1)
11259  {
11260  if (yymsg != yymsgbuf)
11261  YYSTACK_FREE (yymsg);
11262  yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
11263  if (!yymsg)
11264  {
11265  yymsg = yymsgbuf;
11266  yymsg_alloc = sizeof yymsgbuf;
11267  yysyntax_error_status = 2;
11268  }
11269  else
11270  {
11271  yysyntax_error_status = YYSYNTAX_ERROR;
11272  yymsgp = yymsg;
11273  }
11274  }
11275  parser_yyerror (parser, yymsgp);
11276  if (yysyntax_error_status == 2)
11277  goto yyexhaustedlab;
11278  }
11279 # undef YYSYNTAX_ERROR
11280 #endif
11281  }
11282 
11283 
11284 
11285  if (yyerrstatus == 3)
11286  {
11287  /* If just tried and failed to reuse lookahead token after an
11288  error, discard it. */
11289 
11290  if (yychar <= YYEOF)
11291  {
11292  /* Return failure if at end of input. */
11293  if (yychar == YYEOF)
11294  YYABORT;
11295  }
11296  else
11297  {
11298  yydestruct ("Error: discarding",
11299  yytoken, &yylval, parser);
11300  yychar = YYEMPTY;
11301  }
11302  }
11303 
11304  /* Else will try to reuse lookahead token after shifting the error
11305  token. */
11307 
11308 
11309 /*---------------------------------------------------.
11310 | yyerrorlab -- error raised explicitly by YYERROR. |
11311 `---------------------------------------------------*/
11312 yyerrorlab:
11313 
11314  /* Pacify compilers like GCC when the user code never invokes
11315  YYERROR and the label yyerrorlab therefore never appears in user
11316  code. */
11317  if (/*CONSTCOND*/ 0)
11318  goto yyerrorlab;
11319 
11320  /* Do not reclaim the symbols of the rule which action triggered
11321  this YYERROR. */
11322  YYPOPSTACK (yylen);
11323  yylen = 0;
11324  YY_STACK_PRINT (yyss, yyssp);
11325  yystate = *yyssp;
11326  goto yyerrlab1;
11327 
11328 
11329 /*-------------------------------------------------------------.
11330 | yyerrlab1 -- common code for both syntax error and YYERROR. |
11331 `-------------------------------------------------------------*/
11332 yyerrlab1:
11333  yyerrstatus = 3; /* Each real token shifted decrements this. */
11334 
11335  for (;;)
11336  {
11337  yyn = yypact[yystate];
11338  if (!yypact_value_is_default (yyn))
11339  {
11340  yyn += YYTERROR;
11341  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
11342  {
11343  yyn = yytable[yyn];
11344  if (0 < yyn)
11345  break;
11346  }
11347  }
11348 
11349  /* Pop the current state because it cannot handle the error token. */
11350  if (yyssp == yyss)
11351  YYABORT;
11352 
11353 
11354  yydestruct ("Error: popping",
11355  yystos[yystate], yyvsp, parser);
11356  YYPOPSTACK (1);
11357  yystate = *yyssp;
11358  YY_STACK_PRINT (yyss, yyssp);
11359  }
11360 
11361  *++yyvsp = yylval;
11362 
11363 
11364  /* Shift the error token. */
11365  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
11366 
11367  yystate = yyn;
11368  goto yynewstate;
11369 
11370 
11371 /*-------------------------------------.
11372 | yyacceptlab -- YYACCEPT comes here. |
11373 `-------------------------------------*/
11374 yyacceptlab:
11375  yyresult = 0;
11376  goto yyreturn;
11377 
11378 /*-----------------------------------.
11379 | yyabortlab -- YYABORT comes here. |
11380 `-----------------------------------*/
11381 yyabortlab:
11382  yyresult = 1;
11383  goto yyreturn;
11384 
11385 #if !defined(yyoverflow) || YYERROR_VERBOSE
11386 /*-------------------------------------------------.
11387 | yyexhaustedlab -- memory exhaustion comes here. |
11388 `-------------------------------------------------*/
11389 yyexhaustedlab:
11390  parser_yyerror (parser, YY_("memory exhausted"));
11391  yyresult = 2;
11392  /* Fall through. */
11393 #endif
11394 
11395 yyreturn:
11396  if (yychar != YYEMPTY)
11397  {
11398  /* Make sure we have latest lookahead translation. See comments at
11399  user semantic actions for why this is necessary. */
11400  yytoken = YYTRANSLATE (yychar);
11401  yydestruct ("Cleanup: discarding lookahead",
11402  yytoken, &yylval, parser);
11403  }
11404  /* Do not reclaim the symbols of the rule which action triggered
11405  this YYABORT or YYACCEPT. */
11406  YYPOPSTACK (yylen);
11407  YY_STACK_PRINT (yyss, yyssp);
11408  while (yyssp != yyss)
11409  {
11410  yydestruct ("Cleanup: popping",
11411  yystos[*yyssp], yyvsp, parser);
11412  YYPOPSTACK (1);
11413  }
11414 #ifndef yyoverflow
11415  if (yyss != yyssa)
11416  YYSTACK_FREE (yyss);
11417 #endif
11418 #if YYERROR_VERBOSE
11419  if (yymsg != yymsgbuf)
11420  YYSTACK_FREE (yymsg);
11421 #endif
11422  /* Make sure YYID is used. */
11423  return YYID (yyresult);
11424 }
11425 
11426 
11427 
11428 /* Line 2067 of yacc.c */
11429 #line 5003 "parse.y"
11430 
11431 # undef parser
11432 # undef yylex
11433 # undef yylval
11434 # define yylval (*((YYSTYPE*)(parser->parser_yylval)))
11435 
11436 static int parser_regx_options(struct parser_params*);
11437 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
11438 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
11439 static int parser_parse_string(struct parser_params*,NODE*);
11440 static int parser_here_document(struct parser_params*,NODE*);
11441 
11442 
11443 # define nextc() parser_nextc(parser)
11444 # define pushback(c) parser_pushback(parser, (c))
11445 # define newtok() parser_newtok(parser)
11446 # define tokspace(n) parser_tokspace(parser, (n))
11447 # define tokadd(c) parser_tokadd(parser, (c))
11448 # define tok_hex(numlen) parser_tok_hex(parser, (numlen))
11449 # define read_escape(flags,e) parser_read_escape(parser, (flags), (e))
11450 # define tokadd_escape(e) parser_tokadd_escape(parser, (e))
11451 # define regx_options() parser_regx_options(parser)
11452 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,(f),(t),(p),(n),(e))
11453 # define parse_string(n) parser_parse_string(parser,(n))
11454 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, (c), (enc))
11455 # define here_document(n) parser_here_document(parser,(n))
11456 # define heredoc_identifier() parser_heredoc_identifier(parser)
11457 # define heredoc_restore(n) parser_heredoc_restore(parser,(n))
11458 # define whole_match_p(e,l,i) parser_whole_match_p(parser,(e),(l),(i))
11459 
11460 #ifndef RIPPER
11461 # define set_yylval_str(x) (yylval.node = NEW_STR(x))
11462 # define set_yylval_num(x) (yylval.num = (x))
11463 # define set_yylval_id(x) (yylval.id = (x))
11464 # define set_yylval_name(x) (yylval.id = (x))
11465 # define set_yylval_literal(x) (yylval.node = NEW_LIT(x))
11466 # define set_yylval_node(x) (yylval.node = (x))
11467 # define yylval_id() (yylval.id)
11468 #else
11469 static inline VALUE
11470 ripper_yylval_id(ID x)
11471 {
11472  return (VALUE)NEW_LASGN(x, ID2SYM(x));
11473 }
11474 # define set_yylval_str(x) (void)(x)
11475 # define set_yylval_num(x) (void)(x)
11476 # define set_yylval_id(x) (void)(x)
11477 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
11478 # define set_yylval_literal(x) (void)(x)
11479 # define set_yylval_node(x) (void)(x)
11480 # define yylval_id() yylval.id
11481 #endif
11482 
11483 #ifndef RIPPER
11484 #define ripper_flush(p) (void)(p)
11485 #else
11486 #define ripper_flush(p) ((p)->tokp = (p)->parser_lex_p)
11487 
11488 #define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
11489 
11490 static int
11491 ripper_has_scan_event(struct parser_params *parser)
11492 {
11493 
11494  if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
11495  return lex_p > parser->tokp;
11496 }
11497 
11498 static VALUE
11499 ripper_scan_event_val(struct parser_params *parser, int t)
11500 {
11501  VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
11502  VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
11503  ripper_flush(parser);
11504  return rval;
11505 }
11506 
11507 static void
11508 ripper_dispatch_scan_event(struct parser_params *parser, int t)
11509 {
11510  if (!ripper_has_scan_event(parser)) return;
11511  yylval_rval = ripper_scan_event_val(parser, t);
11512 }
11513 
11514 static void
11515 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
11516 {
11517  if (!ripper_has_scan_event(parser)) return;
11518  (void)ripper_scan_event_val(parser, t);
11519 }
11520 
11521 static void
11522 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
11523 {
11524  int saved_line = ruby_sourceline;
11525  const char *saved_tokp = parser->tokp;
11526 
11527  ruby_sourceline = parser->delayed_line;
11528  parser->tokp = lex_pbeg + parser->delayed_col;
11529  yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
11530  parser->delayed = Qnil;
11531  ruby_sourceline = saved_line;
11532  parser->tokp = saved_tokp;
11533 }
11534 #endif /* RIPPER */
11535 
11536 #include "ruby/regex.h"
11537 #include "ruby/util.h"
11538 
11539 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
11540  since ours (we hope) works properly with all combinations of
11541  machines, compilers, `char' and `unsigned char' argument types.
11542  (Per Bothner suggested the basic approach.) */
11543 #undef SIGN_EXTEND_CHAR
11544 #if __STDC__
11545 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
11546 #else /* not __STDC__ */
11547 /* As in Harbison and Steele. */
11548 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
11549 #endif
11550 
11551 #define parser_encoding_name() (current_enc->name)
11552 #define parser_mbclen() mbclen((lex_p-1),lex_pend,current_enc)
11553 #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,current_enc)
11554 #define is_identchar(p,e,enc) (rb_enc_isalnum(*(p),(enc)) || (*(p)) == '_' || !ISASCII(*(p)))
11555 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,current_enc))
11556 
11557 #define parser_isascii() ISASCII(*(lex_p-1))
11558 
11559 #ifndef RIPPER
11560 static int
11561 token_info_get_column(struct parser_params *parser, const char *token)
11562 {
11563  int column = 1;
11564  const char *p, *pend = lex_p - strlen(token);
11565  for (p = lex_pbeg; p < pend; p++) {
11566  if (*p == '\t') {
11567  column = (((column - 1) / 8) + 1) * 8;
11568  }
11569  column++;
11570  }
11571  return column;
11572 }
11573 
11574 static int
11575 token_info_has_nonspaces(struct parser_params *parser, const char *token)
11576 {
11577  const char *p, *pend = lex_p - strlen(token);
11578  for (p = lex_pbeg; p < pend; p++) {
11579  if (*p != ' ' && *p != '\t') {
11580  return 1;
11581  }
11582  }
11583  return 0;
11584 }
11585 
11586 #undef token_info_push
11587 static void
11588 token_info_push(struct parser_params *parser, const char *token)
11589 {
11590  token_info *ptinfo;
11591 
11592  if (!parser->parser_token_info_enabled) return;
11593  ptinfo = ALLOC(token_info);
11594  ptinfo->token = token;
11595  ptinfo->linenum = ruby_sourceline;
11596  ptinfo->column = token_info_get_column(parser, token);
11597  ptinfo->nonspc = token_info_has_nonspaces(parser, token);
11598  ptinfo->next = parser->parser_token_info;
11599 
11600  parser->parser_token_info = ptinfo;
11601 }
11602 
11603 #undef token_info_pop
11604 static void
11605 token_info_pop(struct parser_params *parser, const char *token)
11606 {
11607  int linenum;
11608  token_info *ptinfo = parser->parser_token_info;
11609 
11610  if (!ptinfo) return;
11611  parser->parser_token_info = ptinfo->next;
11612  if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */
11613  goto finish;
11614  }
11615  linenum = ruby_sourceline;
11616  if (linenum == ptinfo->linenum) { /* SKIP */
11617  goto finish;
11618  }
11619  if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */
11620  goto finish;
11621  }
11622  if (parser->parser_token_info_enabled) {
11624  "mismatched indentations at '%s' with '%s' at %d",
11625  token, ptinfo->token, ptinfo->linenum);
11626  }
11627 
11628  finish:
11629  xfree(ptinfo);
11630 }
11631 #endif /* RIPPER */
11632 
11633 static int
11634 parser_yyerror(struct parser_params *parser, const char *msg)
11635 {
11636 #ifndef RIPPER
11637  const int max_line_margin = 30;
11638  const char *p, *pe;
11639  char *buf;
11640  long len;
11641  int i;
11642 
11643  compile_error(PARSER_ARG "%s", msg);
11644  p = lex_p;
11645  while (lex_pbeg <= p) {
11646  if (*p == '\n') break;
11647  p--;
11648  }
11649  p++;
11650 
11651  pe = lex_p;
11652  while (pe < lex_pend) {
11653  if (*pe == '\n') break;
11654  pe++;
11655  }
11656 
11657  len = pe - p;
11658  if (len > 4) {
11659  char *p2;
11660  const char *pre = "", *post = "";
11661 
11662  if (len > max_line_margin * 2 + 10) {
11663  if (lex_p - p > max_line_margin) {
11664  p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
11665  pre = "...";
11666  }
11667  if (pe - lex_p > max_line_margin) {
11668  pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
11669  post = "...";
11670  }
11671  len = pe - p;
11672  }
11673  buf = ALLOCA_N(char, len+2);
11674  MEMCPY(buf, p, char, len);
11675  buf[len] = '\0';
11676  rb_compile_error_with_enc(NULL, 0, (void *)current_enc, "%s%s%s", pre, buf, post);
11677 
11678  i = (int)(lex_p - p);
11679  p2 = buf; pe = buf + len;
11680 
11681  while (p2 < pe) {
11682  if (*p2 != '\t') *p2 = ' ';
11683  p2++;
11684  }
11685  buf[i] = '^';
11686  buf[i+1] = '\0';
11687  rb_compile_error_append("%s%s", pre, buf);
11688  }
11689 #else
11690  dispatch1(parse_error, STR_NEW2(msg));
11691 #endif /* !RIPPER */
11692  return 0;
11693 }
11694 
11695 static void parser_prepare(struct parser_params *parser);
11696 
11697 #ifndef RIPPER
11698 static VALUE
11700 {
11701  ID script_lines;
11702  CONST_ID(script_lines, "SCRIPT_LINES__");
11703  if (rb_const_defined_at(rb_cObject, script_lines)) {
11704  VALUE hash = rb_const_get_at(rb_cObject, script_lines);
11705  if (RB_TYPE_P(hash, T_HASH)) {
11706  VALUE lines = rb_ary_new();
11707  rb_hash_aset(hash, fname, lines);
11708  return lines;
11709  }
11710  }
11711  return 0;
11712 }
11713 
11714 static VALUE
11715 coverage(VALUE fname, int n)
11716 {
11717  VALUE coverages = rb_get_coverages();
11718  if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
11719  VALUE lines = rb_ary_new2(n);
11720  int i;
11721  RBASIC(lines)->klass = 0;
11722  for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil;
11723  RARRAY(lines)->as.heap.len = n;
11724  rb_hash_aset(coverages, fname, lines);
11725  return lines;
11726  }
11727  return 0;
11728 }
11729 
11730 static int
11732 {
11733  return strcmp(ruby_sourcefile, "-e") == 0;
11734 }
11735 
11736 static VALUE
11738 {
11739  int n;
11740  NODE *tree;
11741  struct parser_params *parser = (struct parser_params *)arg;
11742 
11743  if (!compile_for_eval && rb_safe_level() == 0) {
11745  if (ruby_debug_lines && ruby_sourceline > 0) {
11746  VALUE str = STR_NEW0();
11747  n = ruby_sourceline;
11748  do {
11750  } while (--n);
11751  }
11752 
11753  if (!e_option_supplied(parser)) {
11755  }
11756  }
11757 
11758  parser_prepare(parser);
11759  deferred_nodes = 0;
11760 #ifndef RIPPER
11762 #endif
11763 #ifndef RIPPER
11766  parser->parser_ruby_sourceline);
11767  }
11768 #endif
11769  n = yyparse((void*)parser);
11770 #ifndef RIPPER
11773  parser->parser_ruby_sourceline);
11774  }
11775 #endif
11776  ruby_debug_lines = 0;
11777  ruby_coverage = 0;
11778  compile_for_eval = 0;
11779 
11780  lex_strterm = 0;
11781  lex_p = lex_pbeg = lex_pend = 0;
11782  lex_lastline = lex_nextline = 0;
11783  if (parser->nerr) {
11784  return 0;
11785  }
11786  tree = ruby_eval_tree;
11787  if (!tree) {
11788  tree = NEW_NIL();
11789  }
11790  else if (ruby_eval_tree_begin) {
11791  tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
11792  }
11793  return (VALUE)tree;
11794 }
11795 
11796 static NODE*
11797 yycompile(struct parser_params *parser, VALUE fname, int line)
11798 {
11800  ruby_sourcefile = RSTRING_PTR(fname);
11801  ruby_sourceline = line - 1;
11802  return (NODE *)rb_suppress_tracing(yycompile0, (VALUE)parser);
11803 }
11804 #endif /* !RIPPER */
11805 
11806 static rb_encoding *
11808 {
11809  rb_encoding *enc = rb_enc_get(s);
11810  if (!rb_enc_asciicompat(enc)) {
11811  rb_raise(rb_eArgError, "invalid source encoding");
11812  }
11813  return enc;
11814 }
11815 
11816 static VALUE
11818 {
11819  char *beg, *end, *pend;
11821 
11822  beg = RSTRING_PTR(s);
11823  if (lex_gets_ptr) {
11824  if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
11825  beg += lex_gets_ptr;
11826  }
11827  pend = RSTRING_PTR(s) + RSTRING_LEN(s);
11828  end = beg;
11829  while (end < pend) {
11830  if (*end++ == '\n') break;
11831  }
11832  lex_gets_ptr = end - RSTRING_PTR(s);
11833  return rb_enc_str_new(beg, end - beg, enc);
11834 }
11835 
11836 static VALUE
11838 {
11839  VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
11840  if (NIL_P(line)) return line;
11842 #ifndef RIPPER
11843  if (ruby_debug_lines) {
11846  }
11847  if (ruby_coverage) {
11849  }
11850 #endif
11851  return line;
11852 }
11853 
11854 #ifdef RIPPER
11856 #else
11858 
11859 static NODE*
11860 parser_compile_string(volatile VALUE vparser, VALUE fname, VALUE s, int line)
11861 {
11862  struct parser_params *parser;
11863  NODE *node;
11864 
11865  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11867  lex_gets_ptr = 0;
11868  lex_input = s;
11869  lex_pbeg = lex_p = lex_pend = 0;
11871 
11872  node = yycompile(parser, fname, line);
11873  RB_GC_GUARD(vparser); /* prohibit tail call optimization */
11874 
11875  return node;
11876 }
11877 
11878 NODE*
11879 rb_compile_string(const char *f, VALUE s, int line)
11880 {
11883 }
11884 
11885 NODE*
11886 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11887 {
11888  return rb_parser_compile_string_path(vparser, rb_filesystem_str_new_cstr(f), s, line);
11889 }
11890 
11891 NODE*
11892 rb_parser_compile_string_path(volatile VALUE vparser, VALUE f, VALUE s, int line)
11893 {
11895  return parser_compile_string(vparser, f, s, line);
11896 }
11897 
11898 NODE*
11899 rb_compile_cstr(const char *f, const char *s, int len, int line)
11900 {
11901  VALUE str = rb_str_new(s, len);
11903 }
11904 
11905 NODE*
11906 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
11907 {
11908  VALUE str = rb_str_new(s, len);
11909  return parser_compile_string(vparser, rb_filesystem_str_new_cstr(f), str, line);
11910 }
11911 
11912 static VALUE
11914 {
11915  return rb_io_gets(io);
11916 }
11917 
11918 NODE*
11919 rb_compile_file(const char *f, VALUE file, int start)
11920 {
11921  VALUE volatile vparser = rb_parser_new();
11922 
11923  return rb_parser_compile_file(vparser, f, file, start);
11924 }
11925 
11926 NODE*
11927 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
11928 {
11929  return rb_parser_compile_file_path(vparser, rb_filesystem_str_new_cstr(f), file, start);
11930 }
11931 
11932 NODE*
11933 rb_parser_compile_file_path(volatile VALUE vparser, VALUE fname, VALUE file, int start)
11934 {
11935  struct parser_params *parser;
11936  NODE *node;
11937 
11938  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11940  lex_input = file;
11941  lex_pbeg = lex_p = lex_pend = 0;
11943 
11944  node = yycompile(parser, fname, start);
11945  RB_GC_GUARD(vparser); /* prohibit tail call optimization */
11946 
11947  return node;
11948 }
11949 #endif /* !RIPPER */
11950 
11951 #define STR_FUNC_ESCAPE 0x01
11952 #define STR_FUNC_EXPAND 0x02
11953 #define STR_FUNC_REGEXP 0x04
11954 #define STR_FUNC_QWORDS 0x08
11955 #define STR_FUNC_SYMBOL 0x10
11956 #define STR_FUNC_INDENT 0x20
11957 
11959  str_squote = (0),
11967 };
11968 
11969 static VALUE
11970 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
11971 {
11972  VALUE str;
11973 
11974  str = rb_enc_str_new(p, n, enc);
11975  if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
11977  }
11978  else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
11980  }
11981  }
11982 
11983  return str;
11984 }
11985 
11986 #define lex_goto_eol(parser) ((parser)->parser_lex_p = (parser)->parser_lex_pend)
11987 #define lex_eol_p() (lex_p >= lex_pend)
11988 #define peek(c) peek_n((c), 0)
11989 #define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n])
11990 
11991 static inline int
11993 {
11994  int c;
11995 
11996  if (lex_p == lex_pend) {
11997  VALUE v = lex_nextline;
11998  lex_nextline = 0;
11999  if (!v) {
12000  if (parser->eofp)
12001  return -1;
12002 
12003  if (!lex_input || NIL_P(v = lex_getline(parser))) {
12004  parser->eofp = Qtrue;
12005  lex_goto_eol(parser);
12006  return -1;
12007  }
12008  }
12009  {
12010 #ifdef RIPPER
12011  if (parser->tokp < lex_pend) {
12012  if (NIL_P(parser->delayed)) {
12013  parser->delayed = rb_str_buf_new(1024);
12014  rb_enc_associate(parser->delayed, current_enc);
12015  rb_str_buf_cat(parser->delayed,
12016  parser->tokp, lex_pend - parser->tokp);
12017  parser->delayed_line = ruby_sourceline;
12018  parser->delayed_col = (int)(parser->tokp - lex_pbeg);
12019  }
12020  else {
12021  rb_str_buf_cat(parser->delayed,
12022  parser->tokp, lex_pend - parser->tokp);
12023  }
12024  }
12025 #endif
12026  if (heredoc_end > 0) {
12028  heredoc_end = 0;
12029  }
12030  ruby_sourceline++;
12031  parser->line_count++;
12032  lex_pbeg = lex_p = RSTRING_PTR(v);
12033  lex_pend = lex_p + RSTRING_LEN(v);
12034  ripper_flush(parser);
12035  lex_lastline = v;
12036  }
12037  }
12038  c = (unsigned char)*lex_p++;
12039  if (c == '\r' && peek('\n')) {
12040  lex_p++;
12041  c = '\n';
12042  }
12043 
12044  return c;
12045 }
12046 
12047 static void
12048 parser_pushback(struct parser_params *parser, int c)
12049 {
12050  if (c == -1) return;
12051  lex_p--;
12052  if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
12053  lex_p--;
12054  }
12055 }
12056 
12057 #define was_bol() (lex_p == lex_pbeg + 1)
12058 
12059 #define tokfix() (tokenbuf[tokidx]='\0')
12060 #define tok() tokenbuf
12061 #define toklen() tokidx
12062 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
12063 
12064 static char*
12066 {
12067  tokidx = 0;
12069  if (!tokenbuf) {
12070  toksiz = 60;
12071  tokenbuf = ALLOC_N(char, 60);
12072  }
12073  if (toksiz > 4096) {
12074  toksiz = 60;
12075  REALLOC_N(tokenbuf, char, 60);
12076  }
12077  return tokenbuf;
12078 }
12079 
12080 static char *
12081 parser_tokspace(struct parser_params *parser, int n)
12082 {
12083  tokidx += n;
12084 
12085  if (tokidx >= toksiz) {
12086  do {toksiz *= 2;} while (toksiz < tokidx);
12087  REALLOC_N(tokenbuf, char, toksiz);
12088  }
12089  return &tokenbuf[tokidx-n];
12090 }
12091 
12092 static void
12093 parser_tokadd(struct parser_params *parser, int c)
12094 {
12095  tokenbuf[tokidx++] = (char)c;
12096  if (tokidx >= toksiz) {
12097  toksiz *= 2;
12098  REALLOC_N(tokenbuf, char, toksiz);
12099  }
12100 }
12101 
12102 static int
12103 parser_tok_hex(struct parser_params *parser, size_t *numlen)
12104 {
12105  int c;
12106 
12107  c = scan_hex(lex_p, 2, numlen);
12108  if (!*numlen) {
12109  yyerror("invalid hex escape");
12110  return 0;
12111  }
12112  lex_p += *numlen;
12113  return c;
12114 }
12115 
12116 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
12117 
12118 /* return value is for ?\u3042 */
12119 static int
12121  int string_literal, int symbol_literal, int regexp_literal)
12122 {
12123  /*
12124  * If string_literal is true, then we allow multiple codepoints
12125  * in \u{}, and add the codepoints to the current token.
12126  * Otherwise we're parsing a character literal and return a single
12127  * codepoint without adding it
12128  */
12129 
12130  int codepoint;
12131  size_t numlen;
12132 
12133  if (regexp_literal) { tokadd('\\'); tokadd('u'); }
12134 
12135  if (peek('{')) { /* handle \u{...} form */
12136  do {
12137  if (regexp_literal) { tokadd(*lex_p); }
12138  nextc();
12139  codepoint = scan_hex(lex_p, 6, &numlen);
12140  if (numlen == 0) {
12141  yyerror("invalid Unicode escape");
12142  return 0;
12143  }
12144  if (codepoint > 0x10ffff) {
12145  yyerror("invalid Unicode codepoint (too large)");
12146  return 0;
12147  }
12148  lex_p += numlen;
12149  if (regexp_literal) {
12150  tokcopy((int)numlen);
12151  }
12152  else if (codepoint >= 0x80) {
12153  *encp = rb_utf8_encoding();
12154  if (string_literal) tokaddmbc(codepoint, *encp);
12155  }
12156  else if (string_literal) {
12157  tokadd(codepoint);
12158  }
12159  } while (string_literal && (peek(' ') || peek('\t')));
12160 
12161  if (!peek('}')) {
12162  yyerror("unterminated Unicode escape");
12163  return 0;
12164  }
12165 
12166  if (regexp_literal) { tokadd('}'); }
12167  nextc();
12168  }
12169  else { /* handle \uxxxx form */
12170  codepoint = scan_hex(lex_p, 4, &numlen);
12171  if (numlen < 4) {
12172  yyerror("invalid Unicode escape");
12173  return 0;
12174  }
12175  lex_p += 4;
12176  if (regexp_literal) {
12177  tokcopy(4);
12178  }
12179  else if (codepoint >= 0x80) {
12180  *encp = rb_utf8_encoding();
12181  if (string_literal) tokaddmbc(codepoint, *encp);
12182  }
12183  else if (string_literal) {
12184  tokadd(codepoint);
12185  }
12186  }
12187 
12188  return codepoint;
12189 }
12190 
12191 #define ESCAPE_CONTROL 1
12192 #define ESCAPE_META 2
12193 
12194 static int
12196  rb_encoding **encp)
12197 {
12198  int c;
12199  size_t numlen;
12200 
12201  switch (c = nextc()) {
12202  case '\\': /* Backslash */
12203  return c;
12204 
12205  case 'n': /* newline */
12206  return '\n';
12207 
12208  case 't': /* horizontal tab */
12209  return '\t';
12210 
12211  case 'r': /* carriage-return */
12212  return '\r';
12213 
12214  case 'f': /* form-feed */
12215  return '\f';
12216 
12217  case 'v': /* vertical tab */
12218  return '\13';
12219 
12220  case 'a': /* alarm(bell) */
12221  return '\007';
12222 
12223  case 'e': /* escape */
12224  return 033;
12225 
12226  case '0': case '1': case '2': case '3': /* octal constant */
12227  case '4': case '5': case '6': case '7':
12228  pushback(c);
12229  c = scan_oct(lex_p, 3, &numlen);
12230  lex_p += numlen;
12231  return c;
12232 
12233  case 'x': /* hex constant */
12234  c = tok_hex(&numlen);
12235  if (numlen == 0) return 0;
12236  return c;
12237 
12238  case 'b': /* backspace */
12239  return '\010';
12240 
12241  case 's': /* space */
12242  return ' ';
12243 
12244  case 'M':
12245  if (flags & ESCAPE_META) goto eof;
12246  if ((c = nextc()) != '-') {
12247  pushback(c);
12248  goto eof;
12249  }
12250  if ((c = nextc()) == '\\') {
12251  if (peek('u')) goto eof;
12252  return read_escape(flags|ESCAPE_META, encp) | 0x80;
12253  }
12254  else if (c == -1 || !ISASCII(c)) goto eof;
12255  else {
12256  return ((c & 0xff) | 0x80);
12257  }
12258 
12259  case 'C':
12260  if ((c = nextc()) != '-') {
12261  pushback(c);
12262  goto eof;
12263  }
12264  case 'c':
12265  if (flags & ESCAPE_CONTROL) goto eof;
12266  if ((c = nextc())== '\\') {
12267  if (peek('u')) goto eof;
12268  c = read_escape(flags|ESCAPE_CONTROL, encp);
12269  }
12270  else if (c == '?')
12271  return 0177;
12272  else if (c == -1 || !ISASCII(c)) goto eof;
12273  return c & 0x9f;
12274 
12275  eof:
12276  case -1:
12277  yyerror("Invalid escape character syntax");
12278  return '\0';
12279 
12280  default:
12281  return c;
12282  }
12283 }
12284 
12285 static void
12287 {
12288  int len = rb_enc_codelen(c, enc);
12289  rb_enc_mbcput(c, tokspace(len), enc);
12290 }
12291 
12292 static int
12294 {
12295  int c;
12296  int flags = 0;
12297  size_t numlen;
12298 
12299  first:
12300  switch (c = nextc()) {
12301  case '\n':
12302  return 0; /* just ignore */
12303 
12304  case '0': case '1': case '2': case '3': /* octal constant */
12305  case '4': case '5': case '6': case '7':
12306  {
12307  ruby_scan_oct(--lex_p, 3, &numlen);
12308  if (numlen == 0) goto eof;
12309  lex_p += numlen;
12310  tokcopy((int)numlen + 1);
12311  }
12312  return 0;
12313 
12314  case 'x': /* hex constant */
12315  {
12316  tok_hex(&numlen);
12317  if (numlen == 0) return -1;
12318  tokcopy((int)numlen + 2);
12319  }
12320  return 0;
12321 
12322  case 'M':
12323  if (flags & ESCAPE_META) goto eof;
12324  if ((c = nextc()) != '-') {
12325  pushback(c);
12326  goto eof;
12327  }
12328  tokcopy(3);
12329  flags |= ESCAPE_META;
12330  goto escaped;
12331 
12332  case 'C':
12333  if (flags & ESCAPE_CONTROL) goto eof;
12334  if ((c = nextc()) != '-') {
12335  pushback(c);
12336  goto eof;
12337  }
12338  tokcopy(3);
12339  goto escaped;
12340 
12341  case 'c':
12342  if (flags & ESCAPE_CONTROL) goto eof;
12343  tokcopy(2);
12344  flags |= ESCAPE_CONTROL;
12345  escaped:
12346  if ((c = nextc()) == '\\') {
12347  goto first;
12348  }
12349  else if (c == -1) goto eof;
12350  tokadd(c);
12351  return 0;
12352 
12353  eof:
12354  case -1:
12355  yyerror("Invalid escape character syntax");
12356  return -1;
12357 
12358  default:
12359  tokadd('\\');
12360  tokadd(c);
12361  }
12362  return 0;
12363 }
12364 
12365 static int
12367 {
12368  int kcode = 0;
12369  int kopt = 0;
12370  int options = 0;
12371  int c, opt, kc;
12372 
12373  newtok();
12374  while (c = nextc(), ISALPHA(c)) {
12375  if (c == 'o') {
12376  options |= RE_OPTION_ONCE;
12377  }
12378  else if (rb_char_to_option_kcode(c, &opt, &kc)) {
12379  if (kc >= 0) {
12380  if (kc != rb_ascii8bit_encindex()) kcode = c;
12381  kopt = opt;
12382  }
12383  else {
12384  options |= opt;
12385  }
12386  }
12387  else {
12388  tokadd(c);
12389  }
12390  }
12391  options |= kopt;
12392  pushback(c);
12393  if (toklen()) {
12394  tokfix();
12395  compile_error(PARSER_ARG "unknown regexp option%s - %s",
12396  toklen() > 1 ? "s" : "", tok());
12397  }
12398  return options | RE_OPTION_ENCODING(kcode);
12399 }
12400 
12401 static void
12403 {
12404  rb_str_free(str);
12405  rb_gc_force_recycle(str);
12406 }
12407 
12408 static int
12410 {
12411  int len = parser_precise_mbclen();
12412  if (!MBCLEN_CHARFOUND_P(len)) {
12413  compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
12414  return -1;
12415  }
12416  tokadd(c);
12417  lex_p += --len;
12418  if (len > 0) tokcopy(len);
12419  return c;
12420 }
12421 
12422 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c))
12423 
12424 static inline int
12426 {
12427  switch (c) {
12428  case '$': case '*': case '+': case '.':
12429  case '?': case '^': case '|':
12430  case ')': case ']': case '}': case '>':
12431  return TRUE;
12432  default:
12433  return FALSE;
12434  }
12435 }
12436 
12437 static int
12439  int func, int term, int paren, long *nest,
12440  rb_encoding **encp)
12441 {
12442  int c;
12443  int has_nonascii = 0;
12444  rb_encoding *enc = *encp;
12445  char *errbuf = 0;
12446  static const char mixed_msg[] = "%s mixed within %s source";
12447 
12448 #define mixed_error(enc1, enc2) if (!errbuf) { \
12449  size_t len = sizeof(mixed_msg) - 4; \
12450  len += strlen(rb_enc_name(enc1)); \
12451  len += strlen(rb_enc_name(enc2)); \
12452  errbuf = ALLOCA_N(char, len); \
12453  snprintf(errbuf, len, mixed_msg, \
12454  rb_enc_name(enc1), \
12455  rb_enc_name(enc2)); \
12456  yyerror(errbuf); \
12457  }
12458 #define mixed_escape(beg, enc1, enc2) do { \
12459  const char *pos = lex_p; \
12460  lex_p = (beg); \
12461  mixed_error((enc1), (enc2)); \
12462  lex_p = pos; \
12463  } while (0)
12464 
12465  while ((c = nextc()) != -1) {
12466  if (paren && c == paren) {
12467  ++*nest;
12468  }
12469  else if (c == term) {
12470  if (!nest || !*nest) {
12471  pushback(c);
12472  break;
12473  }
12474  --*nest;
12475  }
12476  else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
12477  int c2 = *lex_p;
12478  if (c2 == '$' || c2 == '@' || c2 == '{') {
12479  pushback(c);
12480  break;
12481  }
12482  }
12483  else if (c == '\\') {
12484  const char *beg = lex_p - 1;
12485  c = nextc();
12486  switch (c) {
12487  case '\n':
12488  if (func & STR_FUNC_QWORDS) break;
12489  if (func & STR_FUNC_EXPAND) continue;
12490  tokadd('\\');
12491  break;
12492 
12493  case '\\':
12494  if (func & STR_FUNC_ESCAPE) tokadd(c);
12495  break;
12496 
12497  case 'u':
12498  if ((func & STR_FUNC_EXPAND) == 0) {
12499  tokadd('\\');
12500  break;
12501  }
12502  parser_tokadd_utf8(parser, &enc, 1,
12503  func & STR_FUNC_SYMBOL,
12504  func & STR_FUNC_REGEXP);
12505  if (has_nonascii && enc != *encp) {
12506  mixed_escape(beg, enc, *encp);
12507  }
12508  continue;
12509 
12510  default:
12511  if (c == -1) return -1;
12512  if (!ISASCII(c)) {
12513  if ((func & STR_FUNC_EXPAND) == 0) tokadd('\\');
12514  goto non_ascii;
12515  }
12516  if (func & STR_FUNC_REGEXP) {
12517  if (c == term && !simple_re_meta(c)) {
12518  tokadd(c);
12519  continue;
12520  }
12521  pushback(c);
12522  if ((c = tokadd_escape(&enc)) < 0)
12523  return -1;
12524  if (has_nonascii && enc != *encp) {
12525  mixed_escape(beg, enc, *encp);
12526  }
12527  continue;
12528  }
12529  else if (func & STR_FUNC_EXPAND) {
12530  pushback(c);
12531  if (func & STR_FUNC_ESCAPE) tokadd('\\');
12532  c = read_escape(0, &enc);
12533  }
12534  else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12535  /* ignore backslashed spaces in %w */
12536  }
12537  else if (c != term && !(paren && c == paren)) {
12538  tokadd('\\');
12539  pushback(c);
12540  continue;
12541  }
12542  }
12543  }
12544  else if (!parser_isascii()) {
12545  non_ascii:
12546  has_nonascii = 1;
12547  if (enc != *encp) {
12548  mixed_error(enc, *encp);
12549  continue;
12550  }
12551  if (tokadd_mbchar(c) == -1) return -1;
12552  continue;
12553  }
12554  else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12555  pushback(c);
12556  break;
12557  }
12558  if (c & 0x80) {
12559  has_nonascii = 1;
12560  if (enc != *encp) {
12561  mixed_error(enc, *encp);
12562  continue;
12563  }
12564  }
12565  tokadd(c);
12566  }
12567  *encp = enc;
12568  return c;
12569 }
12570 
12571 #define NEW_STRTERM(func, term, paren) \
12572  rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
12573 
12574 #ifdef RIPPER
12575 static void
12576 ripper_flush_string_content(struct parser_params *parser, rb_encoding *enc)
12577 {
12578  if (!NIL_P(parser->delayed)) {
12579  ptrdiff_t len = lex_p - parser->tokp;
12580  if (len > 0) {
12581  rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
12582  }
12583  ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12584  parser->tokp = lex_p;
12585  }
12586 }
12587 
12588 #define flush_string_content(enc) ripper_flush_string_content(parser, (enc))
12589 #else
12590 #define flush_string_content(enc) ((void)(enc))
12591 #endif
12592 
12593 RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20 + 31) / 32];
12594 /* this can be shared with ripper, since it's independent from struct
12595  * parser_params. */
12596 #ifndef RIPPER
12597 #define BIT(c, idx) (((c) / 32 - 1 == idx) ? (1U << ((c) % 32)) : 0)
12598 #define SPECIAL_PUNCT(idx) ( \
12599  BIT('~', idx) | BIT('*', idx) | BIT('$', idx) | BIT('?', idx) | \
12600  BIT('!', idx) | BIT('@', idx) | BIT('/', idx) | BIT('\\', idx) | \
12601  BIT(';', idx) | BIT(',', idx) | BIT('.', idx) | BIT('=', idx) | \
12602  BIT(':', idx) | BIT('<', idx) | BIT('>', idx) | BIT('\"', idx) | \
12603  BIT('&', idx) | BIT('`', idx) | BIT('\'', idx) | BIT('+', idx) | \
12604  BIT('0', idx))
12605 const unsigned int ruby_global_name_punct_bits[] = {
12606  SPECIAL_PUNCT(0),
12607  SPECIAL_PUNCT(1),
12608  SPECIAL_PUNCT(2),
12609 };
12610 #undef BIT
12611 #undef SPECIAL_PUNCT
12612 #endif
12613 
12614 static inline int
12616 {
12617  if (c <= 0x20 || 0x7e < c) return 0;
12618  return (ruby_global_name_punct_bits[(c - 0x20) / 32] >> (c % 32)) & 1;
12619 }
12620 
12621 static int
12623 {
12624  int c;
12625  const char *p = lex_p;
12626 
12627  if (p + 1 >= lex_pend) return 0;
12628  c = *p++;
12629  switch (c) {
12630  case '$':
12631  if ((c = *p) == '-') {
12632  if (++p >= lex_pend) return 0;
12633  c = *p;
12634  }
12635  else if (is_global_name_punct(c) || ISDIGIT(c)) {
12636  return tSTRING_DVAR;
12637  }
12638  break;
12639  case '@':
12640  if ((c = *p) == '@') {
12641  if (++p >= lex_pend) return 0;
12642  c = *p;
12643  }
12644  break;
12645  case '{':
12646  lex_p = p;
12647  command_start = TRUE;
12648  return tSTRING_DBEG;
12649  default:
12650  return 0;
12651  }
12652  if (!ISASCII(c) || c == '_' || ISALPHA(c))
12653  return tSTRING_DVAR;
12654  return 0;
12655 }
12656 
12657 static int
12658 parser_parse_string(struct parser_params *parser, NODE *quote)
12659 {
12660  int func = (int)quote->nd_func;
12661  int term = nd_term(quote);
12662  int paren = nd_paren(quote);
12663  int c, space = 0;
12665 
12666  if (func == -1) return tSTRING_END;
12667  c = nextc();
12668  if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12669  do {c = nextc();} while (ISSPACE(c));
12670  space = 1;
12671  }
12672  if (c == term && !quote->nd_nest) {
12673  if (func & STR_FUNC_QWORDS) {
12674  quote->nd_func = -1;
12675  return ' ';
12676  }
12677  if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
12679  return tREGEXP_END;
12680  }
12681  if (space) {
12682  pushback(c);
12683  return ' ';
12684  }
12685  newtok();
12686  if ((func & STR_FUNC_EXPAND) && c == '#') {
12687  int t = parser_peek_variable_name(parser);
12688  if (t) return t;
12689  tokadd('#');
12690  c = nextc();
12691  }
12692  pushback(c);
12693  if (tokadd_string(func, term, paren, &quote->nd_nest,
12694  &enc) == -1) {
12695  ruby_sourceline = nd_line(quote);
12696  if (func & STR_FUNC_REGEXP) {
12697  if (parser->eofp)
12698  compile_error(PARSER_ARG "unterminated regexp meets end of file");
12699  return tREGEXP_END;
12700  }
12701  else {
12702  if (parser->eofp)
12703  compile_error(PARSER_ARG "unterminated string meets end of file");
12704  return tSTRING_END;
12705  }
12706  }
12707 
12708  tokfix();
12709  set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12710  flush_string_content(enc);
12711 
12712  return tSTRING_CONTENT;
12713 }
12714 
12715 static int
12717 {
12718  int c = nextc(), term, func = 0;
12719  long len;
12720 
12721  if (c == '-') {
12722  c = nextc();
12723  func = STR_FUNC_INDENT;
12724  }
12725  switch (c) {
12726  case '\'':
12727  func |= str_squote; goto quoted;
12728  case '"':
12729  func |= str_dquote; goto quoted;
12730  case '`':
12731  func |= str_xquote;
12732  quoted:
12733  newtok();
12734  tokadd(func);
12735  term = c;
12736  while ((c = nextc()) != -1 && c != term) {
12737  if (tokadd_mbchar(c) == -1) return 0;
12738  }
12739  if (c == -1) {
12740  compile_error(PARSER_ARG "unterminated here document identifier");
12741  return 0;
12742  }
12743  break;
12744 
12745  default:
12746  if (!parser_is_identchar()) {
12747  pushback(c);
12748  if (func & STR_FUNC_INDENT) {
12749  pushback('-');
12750  }
12751  return 0;
12752  }
12753  newtok();
12754  term = '"';
12755  tokadd(func |= str_dquote);
12756  do {
12757  if (tokadd_mbchar(c) == -1) return 0;
12758  } while ((c = nextc()) != -1 && parser_is_identchar());
12759  pushback(c);
12760  break;
12761  }
12762 
12763  tokfix();
12764 #ifdef RIPPER
12765  ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
12766 #endif
12767  len = lex_p - lex_pbeg;
12768  lex_goto_eol(parser);
12770  STR_NEW(tok(), toklen()), /* nd_lit */
12771  len, /* nd_nth */
12772  lex_lastline); /* nd_orig */
12774  ripper_flush(parser);
12775  return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
12776 }
12777 
12778 static void
12780 {
12781  VALUE line;
12782 
12783  line = here->nd_orig;
12784  lex_lastline = line;
12785  lex_pbeg = RSTRING_PTR(line);
12786  lex_pend = lex_pbeg + RSTRING_LEN(line);
12787  lex_p = lex_pbeg + here->nd_nth;
12789  ruby_sourceline = nd_line(here);
12790  dispose_string(here->nd_lit);
12791  rb_gc_force_recycle((VALUE)here);
12792  ripper_flush(parser);
12793 }
12794 
12795 static int
12797  const char *eos, long len, int indent)
12798 {
12799  const char *p = lex_pbeg;
12800  long n;
12801 
12802  if (indent) {
12803  while (*p && ISSPACE(*p)) p++;
12804  }
12805  n = lex_pend - (p + len);
12806  if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE;
12807  return strncmp(eos, p, len) == 0;
12808 }
12809 
12810 #ifdef RIPPER
12811 static void
12812 ripper_dispatch_heredoc_end(struct parser_params *parser)
12813 {
12814  if (!NIL_P(parser->delayed))
12815  ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12816  lex_goto_eol(parser);
12817  ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
12818 }
12819 
12820 #define dispatch_heredoc_end() ripper_dispatch_heredoc_end(parser)
12821 #else
12822 #define dispatch_heredoc_end() ((void)0)
12823 #endif
12824 
12825 static int
12827 {
12828  int c, func, indent = 0;
12829  const char *eos, *p, *pend;
12830  long len;
12831  VALUE str = 0;
12833 
12834  eos = RSTRING_PTR(here->nd_lit);
12835  len = RSTRING_LEN(here->nd_lit) - 1;
12836  indent = (func = *eos++) & STR_FUNC_INDENT;
12837 
12838  if ((c = nextc()) == -1) {
12839  error:
12840  compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
12841 #ifdef RIPPER
12842  if (NIL_P(parser->delayed)) {
12843  ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
12844  }
12845  else {
12846  if (str ||
12847  ((len = lex_p - parser->tokp) > 0 &&
12848  (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
12849  rb_str_append(parser->delayed, str);
12850  }
12851  ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12852  }
12853  lex_goto_eol(parser);
12854 #endif
12855  restore:
12857  lex_strterm = 0;
12858  return 0;
12859  }
12860  if (was_bol() && whole_match_p(eos, len, indent)) {
12863  return tSTRING_END;
12864  }
12865 
12866  if (!(func & STR_FUNC_EXPAND)) {
12867  do {
12869  pend = lex_pend;
12870  if (pend > p) {
12871  switch (pend[-1]) {
12872  case '\n':
12873  if (--pend == p || pend[-1] != '\r') {
12874  pend++;
12875  break;
12876  }
12877  case '\r':
12878  --pend;
12879  }
12880  }
12881  if (str)
12882  rb_str_cat(str, p, pend - p);
12883  else
12884  str = STR_NEW(p, pend - p);
12885  if (pend < lex_pend) rb_str_cat(str, "\n", 1);
12886  lex_goto_eol(parser);
12887  if (nextc() == -1) {
12888  if (str) {
12889  dispose_string(str);
12890  str = 0;
12891  }
12892  goto error;
12893  }
12894  } while (!whole_match_p(eos, len, indent));
12895  }
12896  else {
12897  /* int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
12898  newtok();
12899  if (c == '#') {
12900  int t = parser_peek_variable_name(parser);
12901  if (t) return t;
12902  tokadd('#');
12903  c = nextc();
12904  }
12905  do {
12906  pushback(c);
12907  if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
12908  if (parser->eofp) goto error;
12909  goto restore;
12910  }
12911  if (c != '\n') {
12912  set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12913  flush_string_content(enc);
12914  return tSTRING_CONTENT;
12915  }
12916  tokadd(nextc());
12917  /* if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
12918  if ((c = nextc()) == -1) goto error;
12919  } while (!whole_match_p(eos, len, indent));
12920  str = STR_NEW3(tok(), toklen(), enc, func);
12921  }
12924  lex_strterm = NEW_STRTERM(-1, 0, 0);
12925  set_yylval_str(str);
12926  return tSTRING_CONTENT;
12927 }
12928 
12929 #include "lex.c"
12930 
12931 static void
12933 {
12934 #ifndef RIPPER
12935  rb_warning0("ambiguous first argument; put parentheses or even spaces");
12936 #else
12938 #endif
12939 }
12940 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
12941 
12942 static ID
12944 {
12945 #ifndef RIPPER
12946  if (!is_local_id(lhs))
12947  yyerror("formal argument must be local variable");
12948 #endif
12949  shadowing_lvar(lhs);
12950  return lhs;
12951 }
12952 
12953 static int
12954 lvar_defined_gen(struct parser_params *parser, ID id)
12955 {
12956  return (dyna_in_block() && dvar_defined_get(id)) || local_id(id);
12957 }
12958 
12959 /* emacsen -*- hack */
12960 static long
12961 parser_encode_length(struct parser_params *parser, const char *name, long len)
12962 {
12963  long nlen;
12964 
12965  if (len > 5 && name[nlen = len - 5] == '-') {
12966  if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
12967  return nlen;
12968  }
12969  if (len > 4 && name[nlen = len - 4] == '-') {
12970  if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
12971  return nlen;
12972  if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
12973  !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
12974  /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */
12975  return nlen;
12976  }
12977  return len;
12978 }
12979 
12980 static void
12981 parser_set_encode(struct parser_params *parser, const char *name)
12982 {
12983  int idx = rb_enc_find_index(name);
12984  rb_encoding *enc;
12985  VALUE excargs[3];
12986 
12987  if (idx < 0) {
12988  excargs[1] = rb_sprintf("unknown encoding name: %s", name);
12989  error:
12990  excargs[0] = rb_eArgError;
12991  excargs[2] = rb_make_backtrace();
12992  rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
12993  rb_exc_raise(rb_make_exception(3, excargs));
12994  }
12995  enc = rb_enc_from_index(idx);
12996  if (!rb_enc_asciicompat(enc)) {
12997  excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
12998  goto error;
12999  }
13000  parser->enc = enc;
13001 #ifndef RIPPER
13002  if (ruby_debug_lines) {
13003  long i, n = RARRAY_LEN(ruby_debug_lines);
13004  const VALUE *p = RARRAY_PTR(ruby_debug_lines);
13005  for (i = 0; i < n; ++i) {
13006  rb_enc_associate_index(*p, idx);
13007  }
13008  }
13009 #endif
13010 }
13011 
13012 static int
13014 {
13015  const char *p = lex_pbeg, *pend = lex_p - 1;
13016  if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
13017  while (p < pend) {
13018  if (!ISSPACE(*p)) return 0;
13019  p++;
13020  }
13021  return 1;
13022 }
13023 
13024 #ifndef RIPPER
13025 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
13026 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
13027 
13028 static void
13029 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
13030 {
13031  if (!comment_at_top(parser)) {
13032  return;
13033  }
13034  parser_set_encode(parser, val);
13035 }
13036 
13037 static void
13038 parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
13039 {
13040  int *p = &parser->parser_token_info_enabled;
13041 
13042  switch (*val) {
13043  case 't': case 'T':
13044  if (strcasecmp(val, "true") == 0) {
13045  *p = TRUE;
13046  return;
13047  }
13048  break;
13049  case 'f': case 'F':
13050  if (strcasecmp(val, "false") == 0) {
13051  *p = FALSE;
13052  return;
13053  }
13054  break;
13055  }
13056  rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val);
13057 }
13058 
13059 struct magic_comment {
13060  const char *name;
13063 };
13064 
13065 static const struct magic_comment magic_comments[] = {
13068  {"warn_indent", parser_set_token_info},
13069 };
13070 #endif
13071 
13072 static const char *
13073 magic_comment_marker(const char *str, long len)
13074 {
13075  long i = 2;
13076 
13077  while (i < len) {
13078  switch (str[i]) {
13079  case '-':
13080  if (str[i-1] == '*' && str[i-2] == '-') {
13081  return str + i + 1;
13082  }
13083  i += 2;
13084  break;
13085  case '*':
13086  if (i + 1 >= len) return 0;
13087  if (str[i+1] != '-') {
13088  i += 4;
13089  }
13090  else if (str[i-1] != '-') {
13091  i += 2;
13092  }
13093  else {
13094  return str + i + 2;
13095  }
13096  break;
13097  default:
13098  i += 3;
13099  break;
13100  }
13101  }
13102  return 0;
13103 }
13104 
13105 static int
13106 parser_magic_comment(struct parser_params *parser, const char *str, long len)
13107 {
13108  VALUE name = 0, val = 0;
13109  const char *beg, *end, *vbeg, *vend;
13110 #define str_copy(_s, _p, _n) ((_s) \
13111  ? (void)(rb_str_resize((_s), (_n)), \
13112  MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
13113  : (void)((_s) = STR_NEW((_p), (_n))))
13114 
13115  if (len <= 7) return FALSE;
13116  if (!(beg = magic_comment_marker(str, len))) return FALSE;
13117  if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
13118  str = beg;
13119  len = end - beg - 3;
13120 
13121  /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
13122  while (len > 0) {
13123 #ifndef RIPPER
13124  const struct magic_comment *p = magic_comments;
13125 #endif
13126  char *s;
13127  int i;
13128  long n = 0;
13129 
13130  for (; len > 0 && *str; str++, --len) {
13131  switch (*str) {
13132  case '\'': case '"': case ':': case ';':
13133  continue;
13134  }
13135  if (!ISSPACE(*str)) break;
13136  }
13137  for (beg = str; len > 0; str++, --len) {
13138  switch (*str) {
13139  case '\'': case '"': case ':': case ';':
13140  break;
13141  default:
13142  if (ISSPACE(*str)) break;
13143  continue;
13144  }
13145  break;
13146  }
13147  for (end = str; len > 0 && ISSPACE(*str); str++, --len);
13148  if (!len) break;
13149  if (*str != ':') continue;
13150 
13151  do str++; while (--len > 0 && ISSPACE(*str));
13152  if (!len) break;
13153  if (*str == '"') {
13154  for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
13155  if (*str == '\\') {
13156  --len;
13157  ++str;
13158  }
13159  }
13160  vend = str;
13161  if (len) {
13162  --len;
13163  ++str;
13164  }
13165  }
13166  else {
13167  for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
13168  vend = str;
13169  }
13170  while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
13171 
13172  n = end - beg;
13173  str_copy(name, beg, n);
13174  s = RSTRING_PTR(name);
13175  for (i = 0; i < n; ++i) {
13176  if (s[i] == '-') s[i] = '_';
13177  }
13178 #ifndef RIPPER
13179  do {
13180  if (STRNCASECMP(p->name, s, n) == 0) {
13181  n = vend - vbeg;
13182  if (p->length) {
13183  n = (*p->length)(parser, vbeg, n);
13184  }
13185  str_copy(val, vbeg, n);
13186  (*p->func)(parser, s, RSTRING_PTR(val));
13187  break;
13188  }
13189  } while (++p < magic_comments + numberof(magic_comments));
13190 #else
13191  str_copy(val, vbeg, vend - vbeg);
13192  dispatch2(magic_comment, name, val);
13193 #endif
13194  }
13195 
13196  return TRUE;
13197 }
13198 
13199 static void
13200 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
13201 {
13202  int sep = 0;
13203  const char *beg = str;
13204  VALUE s;
13205 
13206  for (;;) {
13207  if (send - str <= 6) return;
13208  switch (str[6]) {
13209  case 'C': case 'c': str += 6; continue;
13210  case 'O': case 'o': str += 5; continue;
13211  case 'D': case 'd': str += 4; continue;
13212  case 'I': case 'i': str += 3; continue;
13213  case 'N': case 'n': str += 2; continue;
13214  case 'G': case 'g': str += 1; continue;
13215  case '=': case ':':
13216  sep = 1;
13217  str += 6;
13218  break;
13219  default:
13220  str += 6;
13221  if (ISSPACE(*str)) break;
13222  continue;
13223  }
13224  if (STRNCASECMP(str-6, "coding", 6) == 0) break;
13225  }
13226  for (;;) {
13227  do {
13228  if (++str >= send) return;
13229  } while (ISSPACE(*str));
13230  if (sep) break;
13231  if (*str != '=' && *str != ':') return;
13232  sep = 1;
13233  str++;
13234  }
13235  beg = str;
13236  while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
13237  s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
13238  parser_set_encode(parser, RSTRING_PTR(s));
13239  rb_str_resize(s, 0);
13240 }
13241 
13242 static void
13244 {
13245  int c = nextc();
13246  switch (c) {
13247  case '#':
13248  if (peek('!')) parser->has_shebang = 1;
13249  break;
13250  case 0xef: /* UTF-8 BOM marker */
13251  if (lex_pend - lex_p >= 2 &&
13252  (unsigned char)lex_p[0] == 0xbb &&
13253  (unsigned char)lex_p[1] == 0xbf) {
13254  parser->enc = rb_utf8_encoding();
13255  lex_p += 2;
13256  lex_pbeg = lex_p;
13257  return;
13258  }
13259  break;
13260  case EOF:
13261  return;
13262  }
13263  pushback(c);
13264  parser->enc = rb_enc_get(lex_lastline);
13265 }
13266 
13267 #define IS_ARG() IS_lex_state(EXPR_ARG_ANY)
13268 #define IS_END() IS_lex_state(EXPR_END_ANY)
13269 #define IS_BEG() IS_lex_state(EXPR_BEG_ANY)
13270 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
13271 #define IS_LABEL_POSSIBLE() ((IS_lex_state(EXPR_BEG | EXPR_ENDFN) && !cmd_state) || IS_ARG())
13272 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1))
13273 #define IS_AFTER_OPERATOR() IS_lex_state(EXPR_FNAME | EXPR_DOT)
13274 
13275 #ifndef RIPPER
13276 #define ambiguous_operator(op, syn) ( \
13277  rb_warning0("`"op"' after local variable is interpreted as binary operator"), \
13278  rb_warning0("even though it seems like "syn""))
13279 #else
13280 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
13281 #endif
13282 #define warn_balanced(op, syn) ((void) \
13283  (!IS_lex_state_for(last_state, EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN|EXPR_ENDARG) && \
13284  space_seen && !ISSPACE(c) && \
13285  (ambiguous_operator(op, syn), 0)))
13286 
13287 static int
13289 {
13290  register int c;
13291  int space_seen = 0;
13292  int cmd_state;
13293  enum lex_state_e last_state;
13294  rb_encoding *enc;
13295  int mb;
13296 #ifdef RIPPER
13297  int fallthru = FALSE;
13298 #endif
13299 
13300  if (lex_strterm) {
13301  int token;
13302  if (nd_type(lex_strterm) == NODE_HEREDOC) {
13303  token = here_document(lex_strterm);
13304  if (token == tSTRING_END) {
13305  lex_strterm = 0;
13306  lex_state = EXPR_END;
13307  }
13308  }
13309  else {
13310  token = parse_string(lex_strterm);
13311  if (token == tSTRING_END || token == tREGEXP_END) {
13313  lex_strterm = 0;
13314  lex_state = EXPR_END;
13315  }
13316  }
13317  return token;
13318  }
13319  cmd_state = command_start;
13320  command_start = FALSE;
13321  retry:
13322  last_state = lex_state;
13323  switch (c = nextc()) {
13324  case '\0': /* NUL */
13325  case '\004': /* ^D */
13326  case '\032': /* ^Z */
13327  case -1: /* end of script. */
13328  return 0;
13329 
13330  /* white spaces */
13331  case ' ': case '\t': case '\f': case '\r':
13332  case '\13': /* '\v' */
13333  space_seen = 1;
13334 #ifdef RIPPER
13335  while ((c = nextc())) {
13336  switch (c) {
13337  case ' ': case '\t': case '\f': case '\r':
13338  case '\13': /* '\v' */
13339  break;
13340  default:
13341  goto outofloop;
13342  }
13343  }
13344  outofloop:
13345  pushback(c);
13346  ripper_dispatch_scan_event(parser, tSP);
13347 #endif
13348  goto retry;
13349 
13350  case '#': /* it's a comment */
13351  /* no magic_comment in shebang line */
13352  if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
13353  if (comment_at_top(parser)) {
13354  set_file_encoding(parser, lex_p, lex_pend);
13355  }
13356  }
13357  lex_p = lex_pend;
13358 #ifdef RIPPER
13359  ripper_dispatch_scan_event(parser, tCOMMENT);
13360  fallthru = TRUE;
13361 #endif
13362  /* fall through */
13363  case '\n':
13364  if (IS_lex_state(EXPR_BEG | EXPR_VALUE | EXPR_CLASS | EXPR_FNAME | EXPR_DOT)) {
13365 #ifdef RIPPER
13366  if (!fallthru) {
13367  ripper_dispatch_scan_event(parser, tIGNORED_NL);
13368  }
13369  fallthru = FALSE;
13370 #endif
13371  goto retry;
13372  }
13373  while ((c = nextc())) {
13374  switch (c) {
13375  case ' ': case '\t': case '\f': case '\r':
13376  case '\13': /* '\v' */
13377  space_seen = 1;
13378  break;
13379  case '.': {
13380  if ((c = nextc()) != '.') {
13381  pushback(c);
13382  pushback('.');
13383  goto retry;
13384  }
13385  }
13386  default:
13387  --ruby_sourceline;
13389  case -1: /* EOF no decrement*/
13390  lex_goto_eol(parser);
13391 #ifdef RIPPER
13392  if (c != -1) {
13393  parser->tokp = lex_p;
13394  }
13395 #endif
13396  goto normal_newline;
13397  }
13398  }
13399  normal_newline:
13400  command_start = TRUE;
13401  lex_state = EXPR_BEG;
13402  return '\n';
13403 
13404  case '*':
13405  if ((c = nextc()) == '*') {
13406  if ((c = nextc()) == '=') {
13408  lex_state = EXPR_BEG;
13409  return tOP_ASGN;
13410  }
13411  pushback(c);
13412  if (IS_SPCARG(c)) {
13413  rb_warning0("`**' interpreted as argument prefix");
13414  c = tDSTAR;
13415  }
13416  else if (IS_BEG()) {
13417  c = tDSTAR;
13418  }
13419  else {
13420  warn_balanced("**", "argument prefix");
13421  c = tPOW;
13422  }
13423  }
13424  else {
13425  if (c == '=') {
13426  set_yylval_id('*');
13427  lex_state = EXPR_BEG;
13428  return tOP_ASGN;
13429  }
13430  pushback(c);
13431  if (IS_SPCARG(c)) {
13432  rb_warning0("`*' interpreted as argument prefix");
13433  c = tSTAR;
13434  }
13435  else if (IS_BEG()) {
13436  c = tSTAR;
13437  }
13438  else {
13439  warn_balanced("*", "argument prefix");
13440  c = '*';
13441  }
13442  }
13443  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13444  return c;
13445 
13446  case '!':
13447  c = nextc();
13448  if (IS_AFTER_OPERATOR()) {
13449  lex_state = EXPR_ARG;
13450  if (c == '@') {
13451  return '!';
13452  }
13453  }
13454  else {
13455  lex_state = EXPR_BEG;
13456  }
13457  if (c == '=') {
13458  return tNEQ;
13459  }
13460  if (c == '~') {
13461  return tNMATCH;
13462  }
13463  pushback(c);
13464  return '!';
13465 
13466  case '=':
13467  if (was_bol()) {
13468  /* skip embedded rd document */
13469  if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
13470 #ifdef RIPPER
13471  int first_p = TRUE;
13472 
13473  lex_goto_eol(parser);
13474  ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
13475 #endif
13476  for (;;) {
13477  lex_goto_eol(parser);
13478 #ifdef RIPPER
13479  if (!first_p) {
13480  ripper_dispatch_scan_event(parser, tEMBDOC);
13481  }
13482  first_p = FALSE;
13483 #endif
13484  c = nextc();
13485  if (c == -1) {
13486  compile_error(PARSER_ARG "embedded document meets end of file");
13487  return 0;
13488  }
13489  if (c != '=') continue;
13490  if (strncmp(lex_p, "end", 3) == 0 &&
13491  (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
13492  break;
13493  }
13494  }
13495  lex_goto_eol(parser);
13496 #ifdef RIPPER
13497  ripper_dispatch_scan_event(parser, tEMBDOC_END);
13498 #endif
13499  goto retry;
13500  }
13501  }
13502 
13503  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13504  if ((c = nextc()) == '=') {
13505  if ((c = nextc()) == '=') {
13506  return tEQQ;
13507  }
13508  pushback(c);
13509  return tEQ;
13510  }
13511  if (c == '~') {
13512  return tMATCH;
13513  }
13514  else if (c == '>') {
13515  return tASSOC;
13516  }
13517  pushback(c);
13518  return '=';
13519 
13520  case '<':
13521  last_state = lex_state;
13522  c = nextc();
13523  if (c == '<' &&
13524  !IS_lex_state(EXPR_DOT | EXPR_CLASS) &&
13525  !IS_END() &&
13526  (!IS_ARG() || space_seen)) {
13527  int token = heredoc_identifier();
13528  if (token) return token;
13529  }
13530  if (IS_AFTER_OPERATOR()) {
13531  lex_state = EXPR_ARG;
13532  }
13533  else {
13534  if (IS_lex_state(EXPR_CLASS))
13535  command_start = TRUE;
13536  lex_state = EXPR_BEG;
13537  }
13538  if (c == '=') {
13539  if ((c = nextc()) == '>') {
13540  return tCMP;
13541  }
13542  pushback(c);
13543  return tLEQ;
13544  }
13545  if (c == '<') {
13546  if ((c = nextc()) == '=') {
13548  lex_state = EXPR_BEG;
13549  return tOP_ASGN;
13550  }
13551  pushback(c);
13552  warn_balanced("<<", "here document");
13553  return tLSHFT;
13554  }
13555  pushback(c);
13556  return '<';
13557 
13558  case '>':
13559  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13560  if ((c = nextc()) == '=') {
13561  return tGEQ;
13562  }
13563  if (c == '>') {
13564  if ((c = nextc()) == '=') {
13566  lex_state = EXPR_BEG;
13567  return tOP_ASGN;
13568  }
13569  pushback(c);
13570  return tRSHFT;
13571  }
13572  pushback(c);
13573  return '>';
13574 
13575  case '"':
13576  lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
13577  return tSTRING_BEG;
13578 
13579  case '`':
13580  if (IS_lex_state(EXPR_FNAME)) {
13581  lex_state = EXPR_ENDFN;
13582  return c;
13583  }
13584  if (IS_lex_state(EXPR_DOT)) {
13585  if (cmd_state)
13586  lex_state = EXPR_CMDARG;
13587  else
13588  lex_state = EXPR_ARG;
13589  return c;
13590  }
13591  lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
13592  return tXSTRING_BEG;
13593 
13594  case '\'':
13595  lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
13596  return tSTRING_BEG;
13597 
13598  case '?':
13599  if (IS_END()) {
13600  lex_state = EXPR_VALUE;
13601  return '?';
13602  }
13603  c = nextc();
13604  if (c == -1) {
13605  compile_error(PARSER_ARG "incomplete character syntax");
13606  return 0;
13607  }
13608  if (rb_enc_isspace(c, current_enc)) {
13609  if (!IS_ARG()) {
13610  int c2 = 0;
13611  switch (c) {
13612  case ' ':
13613  c2 = 's';
13614  break;
13615  case '\n':
13616  c2 = 'n';
13617  break;
13618  case '\t':
13619  c2 = 't';
13620  break;
13621  case '\v':
13622  c2 = 'v';
13623  break;
13624  case '\r':
13625  c2 = 'r';
13626  break;
13627  case '\f':
13628  c2 = 'f';
13629  break;
13630  }
13631  if (c2) {
13632  rb_warnI("invalid character syntax; use ?\\%c", c2);
13633  }
13634  }
13635  ternary:
13636  pushback(c);
13637  lex_state = EXPR_VALUE;
13638  return '?';
13639  }
13640  newtok();
13641  enc = current_enc;
13642  if (!parser_isascii()) {
13643  if (tokadd_mbchar(c) == -1) return 0;
13644  }
13645  else if ((rb_enc_isalnum(c, current_enc) || c == '_') &&
13647  goto ternary;
13648  }
13649  else if (c == '\\') {
13650  if (peek('u')) {
13651  nextc();
13652  c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
13653  if (0x80 <= c) {
13654  tokaddmbc(c, enc);
13655  }
13656  else {
13657  tokadd(c);
13658  }
13659  }
13660  else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) {
13661  nextc();
13662  if (tokadd_mbchar(c) == -1) return 0;
13663  }
13664  else {
13665  c = read_escape(0, &enc);
13666  tokadd(c);
13667  }
13668  }
13669  else {
13670  tokadd(c);
13671  }
13672  tokfix();
13673  set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
13674  lex_state = EXPR_END;
13675  return tCHAR;
13676 
13677  case '&':
13678  if ((c = nextc()) == '&') {
13679  lex_state = EXPR_BEG;
13680  if ((c = nextc()) == '=') {
13682  lex_state = EXPR_BEG;
13683  return tOP_ASGN;
13684  }
13685  pushback(c);
13686  return tANDOP;
13687  }
13688  else if (c == '=') {
13689  set_yylval_id('&');
13690  lex_state = EXPR_BEG;
13691  return tOP_ASGN;
13692  }
13693  pushback(c);
13694  if (IS_SPCARG(c)) {
13695  rb_warning0("`&' interpreted as argument prefix");
13696  c = tAMPER;
13697  }
13698  else if (IS_BEG()) {
13699  c = tAMPER;
13700  }
13701  else {
13702  warn_balanced("&", "argument prefix");
13703  c = '&';
13704  }
13705  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13706  return c;
13707 
13708  case '|':
13709  if ((c = nextc()) == '|') {
13710  lex_state = EXPR_BEG;
13711  if ((c = nextc()) == '=') {
13713  lex_state = EXPR_BEG;
13714  return tOP_ASGN;
13715  }
13716  pushback(c);
13717  return tOROP;
13718  }
13719  if (c == '=') {
13720  set_yylval_id('|');
13721  lex_state = EXPR_BEG;
13722  return tOP_ASGN;
13723  }
13724  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13725  pushback(c);
13726  return '|';
13727 
13728  case '+':
13729  c = nextc();
13730  if (IS_AFTER_OPERATOR()) {
13731  lex_state = EXPR_ARG;
13732  if (c == '@') {
13733  return tUPLUS;
13734  }
13735  pushback(c);
13736  return '+';
13737  }
13738  if (c == '=') {
13739  set_yylval_id('+');
13740  lex_state = EXPR_BEG;
13741  return tOP_ASGN;
13742  }
13743  if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13744  lex_state = EXPR_BEG;
13745  pushback(c);
13746  if (c != -1 && ISDIGIT(c)) {
13747  c = '+';
13748  goto start_num;
13749  }
13750  return tUPLUS;
13751  }
13752  lex_state = EXPR_BEG;
13753  pushback(c);
13754  warn_balanced("+", "unary operator");
13755  return '+';
13756 
13757  case '-':
13758  c = nextc();
13759  if (IS_AFTER_OPERATOR()) {
13760  lex_state = EXPR_ARG;
13761  if (c == '@') {
13762  return tUMINUS;
13763  }
13764  pushback(c);
13765  return '-';
13766  }
13767  if (c == '=') {
13768  set_yylval_id('-');
13769  lex_state = EXPR_BEG;
13770  return tOP_ASGN;
13771  }
13772  if (c == '>') {
13773  lex_state = EXPR_ENDFN;
13774  return tLAMBDA;
13775  }
13776  if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13777  lex_state = EXPR_BEG;
13778  pushback(c);
13779  if (c != -1 && ISDIGIT(c)) {
13780  return tUMINUS_NUM;
13781  }
13782  return tUMINUS;
13783  }
13784  lex_state = EXPR_BEG;
13785  pushback(c);
13786  warn_balanced("-", "unary operator");
13787  return '-';
13788 
13789  case '.':
13790  lex_state = EXPR_BEG;
13791  if ((c = nextc()) == '.') {
13792  if ((c = nextc()) == '.') {
13793  return tDOT3;
13794  }
13795  pushback(c);
13796  return tDOT2;
13797  }
13798  pushback(c);
13799  if (c != -1 && ISDIGIT(c)) {
13800  yyerror("no .<digit> floating literal anymore; put 0 before dot");
13801  }
13802  lex_state = EXPR_DOT;
13803  return '.';
13804 
13805  start_num:
13806  case '0': case '1': case '2': case '3': case '4':
13807  case '5': case '6': case '7': case '8': case '9':
13808  {
13809  int is_float, seen_point, seen_e, nondigit;
13810 
13811  is_float = seen_point = seen_e = nondigit = 0;
13812  lex_state = EXPR_END;
13813  newtok();
13814  if (c == '-' || c == '+') {
13815  tokadd(c);
13816  c = nextc();
13817  }
13818  if (c == '0') {
13819 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13820  int start = toklen();
13821  c = nextc();
13822  if (c == 'x' || c == 'X') {
13823  /* hexadecimal */
13824  c = nextc();
13825  if (c != -1 && ISXDIGIT(c)) {
13826  do {
13827  if (c == '_') {
13828  if (nondigit) break;
13829  nondigit = c;
13830  continue;
13831  }
13832  if (!ISXDIGIT(c)) break;
13833  nondigit = 0;
13834  tokadd(c);
13835  } while ((c = nextc()) != -1);
13836  }
13837  pushback(c);
13838  tokfix();
13839  if (toklen() == start) {
13840  no_digits();
13841  }
13842  else if (nondigit) goto trailing_uc;
13844  return tINTEGER;
13845  }
13846  if (c == 'b' || c == 'B') {
13847  /* binary */
13848  c = nextc();
13849  if (c == '0' || c == '1') {
13850  do {
13851  if (c == '_') {
13852  if (nondigit) break;
13853  nondigit = c;
13854  continue;
13855  }
13856  if (c != '0' && c != '1') break;
13857  nondigit = 0;
13858  tokadd(c);
13859  } while ((c = nextc()) != -1);
13860  }
13861  pushback(c);
13862  tokfix();
13863  if (toklen() == start) {
13864  no_digits();
13865  }
13866  else if (nondigit) goto trailing_uc;
13868  return tINTEGER;
13869  }
13870  if (c == 'd' || c == 'D') {
13871  /* decimal */
13872  c = nextc();
13873  if (c != -1 && ISDIGIT(c)) {
13874  do {
13875  if (c == '_') {
13876  if (nondigit) break;
13877  nondigit = c;
13878  continue;
13879  }
13880  if (!ISDIGIT(c)) break;
13881  nondigit = 0;
13882  tokadd(c);
13883  } while ((c = nextc()) != -1);
13884  }
13885  pushback(c);
13886  tokfix();
13887  if (toklen() == start) {
13888  no_digits();
13889  }
13890  else if (nondigit) goto trailing_uc;
13892  return tINTEGER;
13893  }
13894  if (c == '_') {
13895  /* 0_0 */
13896  goto octal_number;
13897  }
13898  if (c == 'o' || c == 'O') {
13899  /* prefixed octal */
13900  c = nextc();
13901  if (c == -1 || c == '_' || !ISDIGIT(c)) {
13902  no_digits();
13903  }
13904  }
13905  if (c >= '0' && c <= '7') {
13906  /* octal */
13907  octal_number:
13908  do {
13909  if (c == '_') {
13910  if (nondigit) break;
13911  nondigit = c;
13912  continue;
13913  }
13914  if (c < '0' || c > '9') break;
13915  if (c > '7') goto invalid_octal;
13916  nondigit = 0;
13917  tokadd(c);
13918  } while ((c = nextc()) != -1);
13919  if (toklen() > start) {
13920  pushback(c);
13921  tokfix();
13922  if (nondigit) goto trailing_uc;
13924  return tINTEGER;
13925  }
13926  if (nondigit) {
13927  pushback(c);
13928  goto trailing_uc;
13929  }
13930  }
13931  if (c > '7' && c <= '9') {
13932  invalid_octal:
13933  yyerror("Invalid octal digit");
13934  }
13935  else if (c == '.' || c == 'e' || c == 'E') {
13936  tokadd('0');
13937  }
13938  else {
13939  pushback(c);
13941  return tINTEGER;
13942  }
13943  }
13944 
13945  for (;;) {
13946  switch (c) {
13947  case '0': case '1': case '2': case '3': case '4':
13948  case '5': case '6': case '7': case '8': case '9':
13949  nondigit = 0;
13950  tokadd(c);
13951  break;
13952 
13953  case '.':
13954  if (nondigit) goto trailing_uc;
13955  if (seen_point || seen_e) {
13956  goto decode_num;
13957  }
13958  else {
13959  int c0 = nextc();
13960  if (c0 == -1 || !ISDIGIT(c0)) {
13961  pushback(c0);
13962  goto decode_num;
13963  }
13964  c = c0;
13965  }
13966  tokadd('.');
13967  tokadd(c);
13968  is_float++;
13969  seen_point++;
13970  nondigit = 0;
13971  break;
13972 
13973  case 'e':
13974  case 'E':
13975  if (nondigit) {
13976  pushback(c);
13977  c = nondigit;
13978  goto decode_num;
13979  }
13980  if (seen_e) {
13981  goto decode_num;
13982  }
13983  tokadd(c);
13984  seen_e++;
13985  is_float++;
13986  nondigit = c;
13987  c = nextc();
13988  if (c != '-' && c != '+') continue;
13989  tokadd(c);
13990  nondigit = c;
13991  break;
13992 
13993  case '_': /* `_' in number just ignored */
13994  if (nondigit) goto decode_num;
13995  nondigit = c;
13996  break;
13997 
13998  default:
13999  goto decode_num;
14000  }
14001  c = nextc();
14002  }
14003 
14004  decode_num:
14005  pushback(c);
14006  if (nondigit) {
14007  char tmp[30];
14008  trailing_uc:
14009  snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
14010  yyerror(tmp);
14011  }
14012  tokfix();
14013  if (is_float) {
14014  double d = strtod(tok(), 0);
14015  if (errno == ERANGE) {
14016  rb_warningS("Float %s out of range", tok());
14017  errno = 0;
14018  }
14020  return tFLOAT;
14021  }
14023  return tINTEGER;
14024  }
14025 
14026  case ')':
14027  case ']':
14028  paren_nest--;
14029  case '}':
14030  COND_LEXPOP();
14031  CMDARG_LEXPOP();
14032  if (c == ')')
14033  lex_state = EXPR_ENDFN;
14034  else
14035  lex_state = EXPR_ENDARG;
14036  if (c == '}') {
14037  if (!brace_nest--) c = tSTRING_DEND;
14038  }
14039  return c;
14040 
14041  case ':':
14042  c = nextc();
14043  if (c == ':') {
14044  if (IS_BEG() || IS_lex_state(EXPR_CLASS) || IS_SPCARG(-1)) {
14045  lex_state = EXPR_BEG;
14046  return tCOLON3;
14047  }
14048  lex_state = EXPR_DOT;
14049  return tCOLON2;
14050  }
14051  if (IS_END() || ISSPACE(c)) {
14052  pushback(c);
14053  warn_balanced(":", "symbol literal");
14054  lex_state = EXPR_BEG;
14055  return ':';
14056  }
14057  switch (c) {
14058  case '\'':
14059  lex_strterm = NEW_STRTERM(str_ssym, c, 0);
14060  break;
14061  case '"':
14062  lex_strterm = NEW_STRTERM(str_dsym, c, 0);
14063  break;
14064  default:
14065  pushback(c);
14066  break;
14067  }
14068  lex_state = EXPR_FNAME;
14069  return tSYMBEG;
14070 
14071  case '/':
14072  if (IS_lex_state(EXPR_BEG_ANY)) {
14073  lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
14074  return tREGEXP_BEG;
14075  }
14076  if ((c = nextc()) == '=') {
14077  set_yylval_id('/');
14078  lex_state = EXPR_BEG;
14079  return tOP_ASGN;
14080  }
14081  pushback(c);
14082  if (IS_SPCARG(c)) {
14083  (void)arg_ambiguous();
14084  lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
14085  return tREGEXP_BEG;
14086  }
14087  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14088  warn_balanced("/", "regexp literal");
14089  return '/';
14090 
14091  case '^':
14092  if ((c = nextc()) == '=') {
14093  set_yylval_id('^');
14094  lex_state = EXPR_BEG;
14095  return tOP_ASGN;
14096  }
14097  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14098  pushback(c);
14099  return '^';
14100 
14101  case ';':
14102  lex_state = EXPR_BEG;
14103  command_start = TRUE;
14104  return ';';
14105 
14106  case ',':
14107  lex_state = EXPR_BEG;
14108  return ',';
14109 
14110  case '~':
14111  if (IS_AFTER_OPERATOR()) {
14112  if ((c = nextc()) != '@') {
14113  pushback(c);
14114  }
14115  lex_state = EXPR_ARG;
14116  }
14117  else {
14118  lex_state = EXPR_BEG;
14119  }
14120  return '~';
14121 
14122  case '(':
14123  if (IS_BEG()) {
14124  c = tLPAREN;
14125  }
14126  else if (IS_SPCARG(-1)) {
14127  c = tLPAREN_ARG;
14128  }
14129  paren_nest++;
14130  COND_PUSH(0);
14131  CMDARG_PUSH(0);
14132  lex_state = EXPR_BEG;
14133  return c;
14134 
14135  case '[':
14136  paren_nest++;
14137  if (IS_AFTER_OPERATOR()) {
14138  lex_state = EXPR_ARG;
14139  if ((c = nextc()) == ']') {
14140  if ((c = nextc()) == '=') {
14141  return tASET;
14142  }
14143  pushback(c);
14144  return tAREF;
14145  }
14146  pushback(c);
14147  return '[';
14148  }
14149  else if (IS_BEG()) {
14150  c = tLBRACK;
14151  }
14152  else if (IS_ARG() && space_seen) {
14153  c = tLBRACK;
14154  }
14155  lex_state = EXPR_BEG;
14156  COND_PUSH(0);
14157  CMDARG_PUSH(0);
14158  return c;
14159 
14160  case '{':
14161  ++brace_nest;
14162  if (lpar_beg && lpar_beg == paren_nest) {
14163  lex_state = EXPR_BEG;
14164  lpar_beg = 0;
14165  --paren_nest;
14166  COND_PUSH(0);
14167  CMDARG_PUSH(0);
14168  return tLAMBEG;
14169  }
14170  if (IS_ARG() || IS_lex_state(EXPR_END | EXPR_ENDFN))
14171  c = '{'; /* block (primary) */
14172  else if (IS_lex_state(EXPR_ENDARG))
14173  c = tLBRACE_ARG; /* block (expr) */
14174  else
14175  c = tLBRACE; /* hash */
14176  COND_PUSH(0);
14177  CMDARG_PUSH(0);
14178  lex_state = EXPR_BEG;
14179  if (c != tLBRACE) command_start = TRUE;
14180  return c;
14181 
14182  case '\\':
14183  c = nextc();
14184  if (c == '\n') {
14185  space_seen = 1;
14186 #ifdef RIPPER
14187  ripper_dispatch_scan_event(parser, tSP);
14188 #endif
14189  goto retry; /* skip \\n */
14190  }
14191  pushback(c);
14192  return '\\';
14193 
14194  case '%':
14195  if (IS_lex_state(EXPR_BEG_ANY)) {
14196  int term;
14197  int paren;
14198 
14199  c = nextc();
14200  quotation:
14201  if (c == -1 || !ISALNUM(c)) {
14202  term = c;
14203  c = 'Q';
14204  }
14205  else {
14206  term = nextc();
14207  if (rb_enc_isalnum(term, current_enc) || !parser_isascii()) {
14208  yyerror("unknown type of %string");
14209  return 0;
14210  }
14211  }
14212  if (c == -1 || term == -1) {
14213  compile_error(PARSER_ARG "unterminated quoted string meets end of file");
14214  return 0;
14215  }
14216  paren = term;
14217  if (term == '(') term = ')';
14218  else if (term == '[') term = ']';
14219  else if (term == '{') term = '}';
14220  else if (term == '<') term = '>';
14221  else paren = 0;
14222 
14223  switch (c) {
14224  case 'Q':
14225  lex_strterm = NEW_STRTERM(str_dquote, term, paren);
14226  return tSTRING_BEG;
14227 
14228  case 'q':
14229  lex_strterm = NEW_STRTERM(str_squote, term, paren);
14230  return tSTRING_BEG;
14231 
14232  case 'W':
14233  lex_strterm = NEW_STRTERM(str_dword, term, paren);
14234  do {c = nextc();} while (ISSPACE(c));
14235  pushback(c);
14236  return tWORDS_BEG;
14237 
14238  case 'w':
14239  lex_strterm = NEW_STRTERM(str_sword, term, paren);
14240  do {c = nextc();} while (ISSPACE(c));
14241  pushback(c);
14242  return tQWORDS_BEG;
14243 
14244  case 'I':
14245  lex_strterm = NEW_STRTERM(str_dword, term, paren);
14246  do {c = nextc();} while (ISSPACE(c));
14247  pushback(c);
14248  return tSYMBOLS_BEG;
14249 
14250  case 'i':
14251  lex_strterm = NEW_STRTERM(str_sword, term, paren);
14252  do {c = nextc();} while (ISSPACE(c));
14253  pushback(c);
14254  return tQSYMBOLS_BEG;
14255 
14256  case 'x':
14257  lex_strterm = NEW_STRTERM(str_xquote, term, paren);
14258  return tXSTRING_BEG;
14259 
14260  case 'r':
14261  lex_strterm = NEW_STRTERM(str_regexp, term, paren);
14262  return tREGEXP_BEG;
14263 
14264  case 's':
14265  lex_strterm = NEW_STRTERM(str_ssym, term, paren);
14266  lex_state = EXPR_FNAME;
14267  return tSYMBEG;
14268 
14269  default:
14270  yyerror("unknown type of %string");
14271  return 0;
14272  }
14273  }
14274  if ((c = nextc()) == '=') {
14275  set_yylval_id('%');
14276  lex_state = EXPR_BEG;
14277  return tOP_ASGN;
14278  }
14279  if (IS_SPCARG(c)) {
14280  goto quotation;
14281  }
14282  lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14283  pushback(c);
14284  warn_balanced("%%", "string literal");
14285  return '%';
14286 
14287  case '$':
14288  lex_state = EXPR_END;
14289  newtok();
14290  c = nextc();
14291  switch (c) {
14292  case '_': /* $_: last read line string */
14293  c = nextc();
14294  if (parser_is_identchar()) {
14295  tokadd('$');
14296  tokadd('_');
14297  break;
14298  }
14299  pushback(c);
14300  c = '_';
14301  /* fall through */
14302  case '~': /* $~: match-data */
14303  case '*': /* $*: argv */
14304  case '$': /* $$: pid */
14305  case '?': /* $?: last status */
14306  case '!': /* $!: error string */
14307  case '@': /* $@: error position */
14308  case '/': /* $/: input record separator */
14309  case '\\': /* $\: output record separator */
14310  case ';': /* $;: field separator */
14311  case ',': /* $,: output field separator */
14312  case '.': /* $.: last read line number */
14313  case '=': /* $=: ignorecase */
14314  case ':': /* $:: load path */
14315  case '<': /* $<: reading filename */
14316  case '>': /* $>: default output handle */
14317  case '\"': /* $": already loaded files */
14318  tokadd('$');
14319  tokadd(c);
14320  tokfix();
14322  return tGVAR;
14323 
14324  case '-':
14325  tokadd('$');
14326  tokadd(c);
14327  c = nextc();
14328  if (parser_is_identchar()) {
14329  if (tokadd_mbchar(c) == -1) return 0;
14330  }
14331  else {
14332  pushback(c);
14333  }
14334  gvar:
14335  tokfix();
14337  return tGVAR;
14338 
14339  case '&': /* $&: last match */
14340  case '`': /* $`: string before last match */
14341  case '\'': /* $': string after last match */
14342  case '+': /* $+: string matches last paren. */
14343  if (IS_lex_state_for(last_state, EXPR_FNAME)) {
14344  tokadd('$');
14345  tokadd(c);
14346  goto gvar;
14347  }
14349  return tBACK_REF;
14350 
14351  case '1': case '2': case '3':
14352  case '4': case '5': case '6':
14353  case '7': case '8': case '9':
14354  tokadd('$');
14355  do {
14356  tokadd(c);
14357  c = nextc();
14358  } while (c != -1 && ISDIGIT(c));
14359  pushback(c);
14360  if (IS_lex_state_for(last_state, EXPR_FNAME)) goto gvar;
14361  tokfix();
14362  set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
14363  return tNTH_REF;
14364 
14365  default:
14366  if (!parser_is_identchar()) {
14367  pushback(c);
14368  compile_error(PARSER_ARG "`$%c' is not allowed as a global variable name", c);
14369  return 0;
14370  }
14371  case '0':
14372  tokadd('$');
14373  }
14374  break;
14375 
14376  case '@':
14377  c = nextc();
14378  newtok();
14379  tokadd('@');
14380  if (c == '@') {
14381  tokadd('@');
14382  c = nextc();
14383  }
14384  if (c != -1 && (ISDIGIT(c) || !parser_is_identchar())) {
14385  pushback(c);
14386  if (tokidx == 1) {
14387  compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
14388  }
14389  else {
14390  compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
14391  }
14392  return 0;
14393  }
14394  break;
14395 
14396  case '_':
14397  if (was_bol() && whole_match_p("__END__", 7, 0)) {
14398  ruby__end__seen = 1;
14399  parser->eofp = Qtrue;
14400 #ifndef RIPPER
14401  return -1;
14402 #else
14403  lex_goto_eol(parser);
14404  ripper_dispatch_scan_event(parser, k__END__);
14405  return 0;
14406 #endif
14407  }
14408  newtok();
14409  break;
14410 
14411  default:
14412  if (!parser_is_identchar()) {
14413  compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c);
14414  goto retry;
14415  }
14416 
14417  newtok();
14418  break;
14419  }
14420 
14421  mb = ENC_CODERANGE_7BIT;
14422  do {
14423  if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
14424  if (tokadd_mbchar(c) == -1) return 0;
14425  c = nextc();
14426  } while (parser_is_identchar());
14427  switch (tok()[0]) {
14428  case '@': case '$':
14429  pushback(c);
14430  break;
14431  default:
14432  if ((c == '!' || c == '?') && !peek('=')) {
14433  tokadd(c);
14434  }
14435  else {
14436  pushback(c);
14437  }
14438  }
14439  tokfix();
14440 
14441  {
14442  int result = 0;
14443 
14444  last_state = lex_state;
14445  switch (tok()[0]) {
14446  case '$':
14447  lex_state = EXPR_END;
14448  result = tGVAR;
14449  break;
14450  case '@':
14451  lex_state = EXPR_END;
14452  if (tok()[1] == '@')
14453  result = tCVAR;
14454  else
14455  result = tIVAR;
14456  break;
14457 
14458  default:
14459  if (toklast() == '!' || toklast() == '?') {
14460  result = tFID;
14461  }
14462  else {
14463  if (IS_lex_state(EXPR_FNAME)) {
14464  if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
14465  (!peek('=') || (peek_n('>', 1)))) {
14466  result = tIDENTIFIER;
14467  tokadd(c);
14468  tokfix();
14469  }
14470  else {
14471  pushback(c);
14472  }
14473  }
14474  if (result == 0 && ISUPPER(tok()[0])) {
14475  result = tCONSTANT;
14476  }
14477  else {
14478  result = tIDENTIFIER;
14479  }
14480  }
14481 
14482  if (IS_LABEL_POSSIBLE()) {
14483  if (IS_LABEL_SUFFIX(0)) {
14484  lex_state = EXPR_BEG;
14485  nextc();
14487  return tLABEL;
14488  }
14489  }
14490  if (mb == ENC_CODERANGE_7BIT && !IS_lex_state(EXPR_DOT)) {
14491  const struct kwtable *kw;
14492 
14493  /* See if it is a reserved word. */
14494  kw = rb_reserved_word(tok(), toklen());
14495  if (kw) {
14496  enum lex_state_e state = lex_state;
14497  lex_state = kw->state;
14498  if (state == EXPR_FNAME) {
14500  return kw->id[0];
14501  }
14502  if (lex_state == EXPR_BEG) {
14503  command_start = TRUE;
14504  }
14505  if (kw->id[0] == keyword_do) {
14506  if (lpar_beg && lpar_beg == paren_nest) {
14507  lpar_beg = 0;
14508  --paren_nest;
14509  return keyword_do_LAMBDA;
14510  }
14511  if (COND_P()) return keyword_do_cond;
14512  if (CMDARG_P() && state != EXPR_CMDARG)
14513  return keyword_do_block;
14514  if (state & (EXPR_BEG | EXPR_ENDARG))
14515  return keyword_do_block;
14516  return keyword_do;
14517  }
14518  if (state & (EXPR_BEG | EXPR_VALUE))
14519  return kw->id[0];
14520  else {
14521  if (kw->id[0] != kw->id[1])
14522  lex_state = EXPR_BEG;
14523  return kw->id[1];
14524  }
14525  }
14526  }
14527 
14528  if (IS_lex_state(EXPR_BEG_ANY | EXPR_ARG_ANY | EXPR_DOT)) {
14529  if (cmd_state) {
14530  lex_state = EXPR_CMDARG;
14531  }
14532  else {
14533  lex_state = EXPR_ARG;
14534  }
14535  }
14536  else if (lex_state == EXPR_FNAME) {
14537  lex_state = EXPR_ENDFN;
14538  }
14539  else {
14540  lex_state = EXPR_END;
14541  }
14542  }
14543  {
14544  ID ident = TOK_INTERN(!ENC_SINGLE(mb));
14545 
14546  set_yylval_name(ident);
14547  if (!IS_lex_state_for(last_state, EXPR_DOT|EXPR_FNAME) &&
14548  is_local_id(ident) && lvar_defined(ident)) {
14549  lex_state = EXPR_END;
14550  }
14551  }
14552  return result;
14553  }
14554 }
14555 
14556 #if YYPURE
14557 static int
14558 yylex(void *lval, void *p)
14559 #else
14560 yylex(void *p)
14561 #endif
14563  struct parser_params *parser = (struct parser_params*)p;
14564  int t;
14565 
14566 #if YYPURE
14567  parser->parser_yylval = lval;
14569 #endif
14570  t = parser_yylex(parser);
14571 #ifdef RIPPER
14572  if (!NIL_P(parser->delayed)) {
14573  ripper_dispatch_delayed_token(parser, t);
14574  return t;
14575  }
14576  if (t != 0)
14577  ripper_dispatch_scan_event(parser, t);
14578 #endif
14579 
14580  return t;
14581 }
14582 
14583 #ifndef RIPPER
14584 static NODE*
14585 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
14586 {
14587  NODE *n = (rb_node_newnode)(type, a0, a1, a2);
14589  return n;
14590 }
14591 
14592 static enum node_type
14593 nodetype(NODE *node) /* for debug */
14594 {
14595  return (enum node_type)nd_type(node);
14596 }
14597 
14598 static int
14600 {
14601  return nd_line(node);
14602 }
14603 
14604 static NODE*
14606 {
14607  if (node) {
14608  node = remove_begin(node);
14609  node->flags |= NODE_FL_NEWLINE;
14610  }
14611  return node;
14612 }
14613 
14614 static void
14615 fixpos(NODE *node, NODE *orig)
14616 {
14617  if (!node) return;
14618  if (!orig) return;
14619  if (orig == (NODE*)1) return;
14620  nd_set_line(node, nd_line(orig));
14621 }
14622 
14623 static void
14624 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
14625 {
14626  rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
14627 }
14628 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg))
14629 
14630 static void
14631 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
14632 {
14633  rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
14634 }
14635 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg))
14636 
14637 static NODE*
14638 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
14639 {
14640  NODE *end, *h = head, *nd;
14641 
14642  if (tail == 0) return head;
14643 
14644  if (h == 0) return tail;
14645  switch (nd_type(h)) {
14646  case NODE_LIT:
14647  case NODE_STR:
14648  case NODE_SELF:
14649  case NODE_TRUE:
14650  case NODE_FALSE:
14651  case NODE_NIL:
14652  parser_warning(h, "unused literal ignored");
14653  return tail;
14654  default:
14655  h = end = NEW_BLOCK(head);
14656  end->nd_end = end;
14657  fixpos(end, head);
14658  head = end;
14659  break;
14660  case NODE_BLOCK:
14661  end = h->nd_end;
14662  break;
14663  }
14664 
14665  nd = end->nd_head;
14666  switch (nd_type(nd)) {
14667  case NODE_RETURN:
14668  case NODE_BREAK:
14669  case NODE_NEXT:
14670  case NODE_REDO:
14671  case NODE_RETRY:
14672  if (RTEST(ruby_verbose)) {
14673  parser_warning(tail, "statement not reached");
14674  }
14675  break;
14676 
14677  default:
14678  break;
14679  }
14680 
14681  if (nd_type(tail) != NODE_BLOCK) {
14682  tail = NEW_BLOCK(tail);
14683  tail->nd_end = tail;
14684  }
14685  end->nd_next = tail;
14686  h->nd_end = tail->nd_end;
14687  return head;
14688 }
14689 
14690 /* append item to the list */
14691 static NODE*
14692 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
14693 {
14694  NODE *last;
14695 
14696  if (list == 0) return NEW_LIST(item);
14697  if (list->nd_next) {
14698  last = list->nd_next->nd_end;
14699  }
14700  else {
14701  last = list;
14702  }
14703 
14704  list->nd_alen += 1;
14705  last->nd_next = NEW_LIST(item);
14706  list->nd_next->nd_end = last->nd_next;
14707  return list;
14708 }
14709 
14710 /* concat two lists */
14711 static NODE*
14712 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14713 {
14714  NODE *last;
14715 
14716  if (head->nd_next) {
14717  last = head->nd_next->nd_end;
14718  }
14719  else {
14720  last = head;
14721  }
14722 
14723  head->nd_alen += tail->nd_alen;
14724  last->nd_next = tail;
14725  if (tail->nd_next) {
14726  head->nd_next->nd_end = tail->nd_next->nd_end;
14727  }
14728  else {
14729  head->nd_next->nd_end = tail;
14730  }
14731 
14732  return head;
14733 }
14734 
14735 static int
14737 {
14738  if (NIL_P(tail)) return 1;
14739  if (!rb_enc_compatible(head, tail)) {
14740  compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
14741  rb_enc_name(rb_enc_get(head)),
14742  rb_enc_name(rb_enc_get(tail)));
14743  rb_str_resize(head, 0);
14744  rb_str_resize(tail, 0);
14745  return 0;
14746  }
14747  rb_str_buf_append(head, tail);
14748  return 1;
14749 }
14750 
14751 /* concat two string literals */
14752 static NODE *
14754 {
14755  enum node_type htype;
14756  NODE *headlast;
14757  VALUE lit;
14758 
14759  if (!head) return tail;
14760  if (!tail) return head;
14761 
14762  htype = nd_type(head);
14763  if (htype == NODE_EVSTR) {
14764  NODE *node = NEW_DSTR(Qnil);
14765  head = list_append(node, head);
14766  htype = NODE_DSTR;
14767  }
14768  switch (nd_type(tail)) {
14769  case NODE_STR:
14770  if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
14771  nd_type(headlast) == NODE_STR) {
14772  htype = NODE_STR;
14773  lit = headlast->nd_lit;
14774  }
14775  else {
14776  lit = head->nd_lit;
14777  }
14778  if (htype == NODE_STR) {
14779  if (!literal_concat0(parser, lit, tail->nd_lit)) {
14780  error:
14781  rb_gc_force_recycle((VALUE)head);
14782  rb_gc_force_recycle((VALUE)tail);
14783  return 0;
14784  }
14785  rb_gc_force_recycle((VALUE)tail);
14786  }
14787  else {
14788  list_append(head, tail);
14789  }
14790  break;
14791 
14792  case NODE_DSTR:
14793  if (htype == NODE_STR) {
14794  if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
14795  goto error;
14796  tail->nd_lit = head->nd_lit;
14797  rb_gc_force_recycle((VALUE)head);
14798  head = tail;
14799  }
14800  else if (NIL_P(tail->nd_lit)) {
14801  append:
14802  head->nd_alen += tail->nd_alen - 1;
14803  head->nd_next->nd_end->nd_next = tail->nd_next;
14804  head->nd_next->nd_end = tail->nd_next->nd_end;
14805  rb_gc_force_recycle((VALUE)tail);
14806  }
14807  else if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
14808  nd_type(headlast) == NODE_STR) {
14809  lit = headlast->nd_lit;
14810  if (!literal_concat0(parser, lit, tail->nd_lit))
14811  goto error;
14812  tail->nd_lit = Qnil;
14813  goto append;
14814  }
14815  else {
14816  nd_set_type(tail, NODE_ARRAY);
14817  tail->nd_head = NEW_STR(tail->nd_lit);
14818  list_concat(head, tail);
14819  }
14820  break;
14821 
14822  case NODE_EVSTR:
14823  if (htype == NODE_STR) {
14824  nd_set_type(head, NODE_DSTR);
14825  head->nd_alen = 1;
14826  }
14827  list_append(head, tail);
14828  break;
14829  }
14830  return head;
14831 }
14832 
14833 static NODE *
14834 evstr2dstr_gen(struct parser_params *parser, NODE *node)
14835 {
14836  if (nd_type(node) == NODE_EVSTR) {
14837  node = list_append(NEW_DSTR(Qnil), node);
14838  }
14839  return node;
14840 }
14841 
14842 static NODE *
14843 new_evstr_gen(struct parser_params *parser, NODE *node)
14844 {
14845  NODE *head = node;
14846 
14847  if (node) {
14848  switch (nd_type(node)) {
14849  case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
14850  return node;
14851  }
14852  }
14853  return NEW_EVSTR(head);
14854 }
14855 
14856 static NODE *
14857 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
14858 {
14859  value_expr(recv);
14860  value_expr(arg1);
14861  return NEW_CALL(recv, id, NEW_LIST(arg1));
14862 }
14863 
14864 static NODE *
14865 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
14866 {
14867  value_expr(recv);
14868  return NEW_CALL(recv, id, 0);
14869 }
14870 
14871 static NODE*
14872 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14873 {
14874  value_expr(node1);
14875  value_expr(node2);
14876  if (node1) {
14877  switch (nd_type(node1)) {
14878  case NODE_DREGX:
14879  case NODE_DREGX_ONCE:
14880  return NEW_MATCH2(node1, node2);
14881 
14882  case NODE_LIT:
14883  if (RB_TYPE_P(node1->nd_lit, T_REGEXP)) {
14884  return NEW_MATCH2(node1, node2);
14885  }
14886  }
14887  }
14888 
14889  if (node2) {
14890  switch (nd_type(node2)) {
14891  case NODE_DREGX:
14892  case NODE_DREGX_ONCE:
14893  return NEW_MATCH3(node2, node1);
14894 
14895  case NODE_LIT:
14896  if (RB_TYPE_P(node2->nd_lit, T_REGEXP)) {
14897  return NEW_MATCH3(node2, node1);
14898  }
14899  }
14900  }
14901 
14902  return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
14903 }
14904 
14905 static NODE*
14906 gettable_gen(struct parser_params *parser, ID id)
14907 {
14908  switch (id) {
14909  case keyword_self:
14910  return NEW_SELF();
14911  case keyword_nil:
14912  return NEW_NIL();
14913  case keyword_true:
14914  return NEW_TRUE();
14915  case keyword_false:
14916  return NEW_FALSE();
14917  case keyword__FILE__:
14919  case keyword__LINE__:
14920  return NEW_LIT(INT2FIX(tokline));
14921  case keyword__ENCODING__:
14923  }
14924  switch (id_type(id)) {
14925  case ID_LOCAL:
14926  if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
14927  if (local_id(id)) return NEW_LVAR(id);
14928  /* method call without arguments */
14929  return NEW_VCALL(id);
14930  case ID_GLOBAL:
14931  return NEW_GVAR(id);
14932  case ID_INSTANCE:
14933  return NEW_IVAR(id);
14934  case ID_CONST:
14935  return NEW_CONST(id);
14936  case ID_CLASS:
14937  return NEW_CVAR(id);
14938  }
14939  compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14940  return 0;
14941 }
14942 #else /* !RIPPER */
14943 static int
14944 id_is_var_gen(struct parser_params *parser, ID id)
14945 {
14946  if (is_notop_id(id)) {
14947  switch (id & ID_SCOPE_MASK) {
14948  case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
14949  return 1;
14950  case ID_LOCAL:
14951  if (dyna_in_block() && dvar_defined(id)) return 1;
14952  if (local_id(id)) return 1;
14953  /* method call without arguments */
14954  return 0;
14955  }
14956  }
14957  compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14958  return 0;
14959 }
14960 #endif /* !RIPPER */
14961 
14962 #if PARSER_DEBUG
14963 static const char *
14964 lex_state_name(enum lex_state_e state)
14965 {
14966  static const char names[][12] = {
14967  "EXPR_BEG", "EXPR_END", "EXPR_ENDARG", "EXPR_ENDFN", "EXPR_ARG",
14968  "EXPR_CMDARG", "EXPR_MID", "EXPR_FNAME", "EXPR_DOT", "EXPR_CLASS",
14969  "EXPR_VALUE",
14970  };
14971 
14972  if ((unsigned)state & ~(~0u << EXPR_MAX_STATE))
14973  return names[ffs(state)];
14974  return NULL;
14975 }
14976 #endif
14977 
14978 #ifdef RIPPER
14979 static VALUE
14980 assignable_gen(struct parser_params *parser, VALUE lhs)
14981 #else
14982 static NODE*
14983 assignable_gen(struct parser_params *parser, ID id, NODE *val)
14984 #endif
14985 {
14986 #ifdef RIPPER
14987  ID id = get_id(lhs);
14988 # define assignable_result(x) get_value(lhs)
14989 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
14990 #else
14991 # define assignable_result(x) (x)
14992 #endif
14993  if (!id) return assignable_result(0);
14994  switch (id) {
14995  case keyword_self:
14996  yyerror("Can't change the value of self");
14997  goto error;
14998  case keyword_nil:
14999  yyerror("Can't assign to nil");
15000  goto error;
15001  case keyword_true:
15002  yyerror("Can't assign to true");
15003  goto error;
15004  case keyword_false:
15005  yyerror("Can't assign to false");
15006  goto error;
15007  case keyword__FILE__:
15008  yyerror("Can't assign to __FILE__");
15009  goto error;
15010  case keyword__LINE__:
15011  yyerror("Can't assign to __LINE__");
15012  goto error;
15013  case keyword__ENCODING__:
15014  yyerror("Can't assign to __ENCODING__");
15015  goto error;
15016  }
15017  switch (id_type(id)) {
15018  case ID_LOCAL:
15019  if (dyna_in_block()) {
15020  if (dvar_curr(id)) {
15021  return assignable_result(NEW_DASGN_CURR(id, val));
15022  }
15023  else if (dvar_defined(id)) {
15024  return assignable_result(NEW_DASGN(id, val));
15025  }
15026  else if (local_id(id)) {
15027  return assignable_result(NEW_LASGN(id, val));
15028  }
15029  else {
15030  dyna_var(id);
15031  return assignable_result(NEW_DASGN_CURR(id, val));
15032  }
15033  }
15034  else {
15035  if (!local_id(id)) {
15036  local_var(id);
15037  }
15038  return assignable_result(NEW_LASGN(id, val));
15039  }
15040  break;
15041  case ID_GLOBAL:
15042  return assignable_result(NEW_GASGN(id, val));
15043  case ID_INSTANCE:
15044  return assignable_result(NEW_IASGN(id, val));
15045  case ID_CONST:
15046  if (!in_def && !in_single)
15047  return assignable_result(NEW_CDECL(id, val, 0));
15048  yyerror("dynamic constant assignment");
15049  break;
15050  case ID_CLASS:
15051  return assignable_result(NEW_CVASGN(id, val));
15052  default:
15053  compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
15054  }
15055  error:
15057 #undef assignable_result
15058 #undef parser_yyerror
15059 }
15060 
15061 static int
15063 {
15064  VALUE s;
15065  if (name == idUScore) return 1;
15066  if (!is_local_id(name)) return 0;
15067  s = rb_id2str(name);
15068  if (!s) return 0;
15069  return RSTRING_PTR(s)[0] == '_';
15070 }
15071 
15072 #define LVAR_USED ((ID)1 << (sizeof(ID) * CHAR_BIT - 1))
15073 
15074 static ID
15075 shadowing_lvar_gen(struct parser_params *parser, ID name)
15076 {
15077  if (is_private_local_id(name)) return name;
15078  if (dyna_in_block()) {
15079  if (dvar_curr(name)) {
15080  yyerror("duplicated argument name");
15081  }
15082  else if (dvar_defined_get(name) || local_id(name)) {
15083  rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
15084  vtable_add(lvtbl->vars, name);
15085  if (lvtbl->used) {
15087  }
15088  }
15089  }
15090  else {
15091  if (local_id(name)) {
15092  yyerror("duplicated argument name");
15093  }
15094  }
15095  return name;
15096 }
15097 
15098 static void
15099 new_bv_gen(struct parser_params *parser, ID name)
15100 {
15101  if (!name) return;
15102  if (!is_local_id(name)) {
15103  compile_error(PARSER_ARG "invalid local variable - %s",
15104  rb_id2name(name));
15105  return;
15106  }
15107  shadowing_lvar(name);
15108  dyna_var(name);
15109 }
15110 
15111 #ifndef RIPPER
15112 static NODE *
15113 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
15114 {
15115  if (recv && nd_type(recv) == NODE_SELF)
15116  recv = (NODE *)1;
15117  return NEW_ATTRASGN(recv, tASET, idx);
15118 }
15119 
15120 static void
15121 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15122 {
15123  if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
15124  compile_error(PARSER_ARG "both block arg and actual block given");
15125  }
15126 }
15127 
15128 static const char id_type_names[][9] = {
15129  "LOCAL",
15130  "INSTANCE",
15131  "", /* INSTANCE2 */
15132  "GLOBAL",
15133  "ATTRSET",
15134  "CONST",
15135  "CLASS",
15136  "JUNK",
15137 };
15138 
15139 ID
15141 {
15142  if (!is_notop_id(id)) {
15143  switch (id) {
15144  case tAREF: case tASET:
15145  return tASET; /* only exception */
15146  }
15147  rb_name_error(id, "cannot make operator ID :%s attrset", rb_id2name(id));
15148  }
15149  else {
15150  int scope = (int)(id & ID_SCOPE_MASK);
15151  switch (scope) {
15152  case ID_LOCAL: case ID_INSTANCE: case ID_GLOBAL:
15153  case ID_CONST: case ID_CLASS: case ID_JUNK:
15154  break;
15155  case ID_ATTRSET:
15156  return id;
15157  default:
15158  rb_name_error(id, "cannot make %s ID %+"PRIsVALUE" attrset",
15159  id_type_names[scope], ID2SYM(id));
15160 
15161  }
15162  }
15163  id &= ~ID_SCOPE_MASK;
15164  id |= ID_ATTRSET;
15165  return id;
15166 }
15167 
15168 static NODE *
15169 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
15170 {
15171  if (recv && nd_type(recv) == NODE_SELF)
15172  recv = (NODE *)1;
15173  return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
15174 }
15175 
15176 static void
15178 {
15179  switch (nd_type(node)) {
15180  case NODE_NTH_REF:
15181  compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
15182  break;
15183  case NODE_BACK_REF:
15184  compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
15185  break;
15186  }
15187 }
15188 
15189 static NODE *
15190 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15191 {
15192  if (!node2) return node1;
15193  switch (nd_type(node1)) {
15194  case NODE_BLOCK_PASS:
15195  if (node1->nd_head)
15196  node1->nd_head = arg_concat(node1->nd_head, node2);
15197  else
15198  node1->nd_head = NEW_LIST(node2);
15199  return node1;
15200  case NODE_ARGSPUSH:
15201  if (nd_type(node2) != NODE_ARRAY) break;
15202  node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
15203  nd_set_type(node1, NODE_ARGSCAT);
15204  return node1;
15205  case NODE_ARGSCAT:
15206  if (nd_type(node2) != NODE_ARRAY ||
15207  nd_type(node1->nd_body) != NODE_ARRAY) break;
15208  node1->nd_body = list_concat(node1->nd_body, node2);
15209  return node1;
15210  }
15211  return NEW_ARGSCAT(node1, node2);
15212 }
15213 
15214 static NODE *
15215 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15216 {
15217  if (!node1) return NEW_LIST(node2);
15218  switch (nd_type(node1)) {
15219  case NODE_ARRAY:
15220  return list_append(node1, node2);
15221  case NODE_BLOCK_PASS:
15222  node1->nd_head = arg_append(node1->nd_head, node2);
15223  return node1;
15224  case NODE_ARGSPUSH:
15225  node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
15226  nd_set_type(node1, NODE_ARGSCAT);
15227  return node1;
15228  }
15229  return NEW_ARGSPUSH(node1, node2);
15230 }
15231 
15232 static NODE *
15234 {
15235  if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
15236  if (nd_type(node) == NODE_ARRAY) return node;
15237  return 0;
15238 }
15239 
15240 static NODE *
15241 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
15242 {
15243  if (!lhs) return 0;
15244 
15245  switch (nd_type(lhs)) {
15246  case NODE_GASGN:
15247  case NODE_IASGN:
15248  case NODE_IASGN2:
15249  case NODE_LASGN:
15250  case NODE_DASGN:
15251  case NODE_DASGN_CURR:
15252  case NODE_MASGN:
15253  case NODE_CDECL:
15254  case NODE_CVASGN:
15255  lhs->nd_value = rhs;
15256  break;
15257 
15258  case NODE_ATTRASGN:
15259  case NODE_CALL:
15260  lhs->nd_args = arg_append(lhs->nd_args, rhs);
15261  break;
15262 
15263  default:
15264  /* should not happen */
15265  break;
15266  }
15267 
15268  return lhs;
15269 }
15270 
15271 static int
15272 value_expr_gen(struct parser_params *parser, NODE *node)
15273 {
15274  int cond = 0;
15275 
15276  if (!node) {
15277  rb_warning0("empty expression");
15278  }
15279  while (node) {
15280  switch (nd_type(node)) {
15281  case NODE_DEFN:
15282  case NODE_DEFS:
15283  parser_warning(node, "void value expression");
15284  return FALSE;
15285 
15286  case NODE_RETURN:
15287  case NODE_BREAK:
15288  case NODE_NEXT:
15289  case NODE_REDO:
15290  case NODE_RETRY:
15291  if (!cond) yyerror("void value expression");
15292  /* or "control never reach"? */
15293  return FALSE;
15294 
15295  case NODE_BLOCK:
15296  while (node->nd_next) {
15297  node = node->nd_next;
15298  }
15299  node = node->nd_head;
15300  break;
15301 
15302  case NODE_BEGIN:
15303  node = node->nd_body;
15304  break;
15305 
15306  case NODE_IF:
15307  if (!node->nd_body) {
15308  node = node->nd_else;
15309  break;
15310  }
15311  else if (!node->nd_else) {
15312  node = node->nd_body;
15313  break;
15314  }
15315  if (!value_expr(node->nd_body)) return FALSE;
15316  node = node->nd_else;
15317  break;
15318 
15319  case NODE_AND:
15320  case NODE_OR:
15321  cond = 1;
15322  node = node->nd_2nd;
15323  break;
15324 
15325  default:
15326  return TRUE;
15327  }
15328  }
15329 
15330  return TRUE;
15331 }
15332 
15333 static void
15334 void_expr_gen(struct parser_params *parser, NODE *node)
15335 {
15336  const char *useless = 0;
15337 
15338  if (!RTEST(ruby_verbose)) return;
15339 
15340  if (!node) return;
15341  switch (nd_type(node)) {
15342  case NODE_CALL:
15343  switch (node->nd_mid) {
15344  case '+':
15345  case '-':
15346  case '*':
15347  case '/':
15348  case '%':
15349  case tPOW:
15350  case tUPLUS:
15351  case tUMINUS:
15352  case '|':
15353  case '^':
15354  case '&':
15355  case tCMP:
15356  case '>':
15357  case tGEQ:
15358  case '<':
15359  case tLEQ:
15360  case tEQ:
15361  case tNEQ:
15362  useless = rb_id2name(node->nd_mid);
15363  break;
15364  }
15365  break;
15366 
15367  case NODE_LVAR:
15368  case NODE_DVAR:
15369  case NODE_GVAR:
15370  case NODE_IVAR:
15371  case NODE_CVAR:
15372  case NODE_NTH_REF:
15373  case NODE_BACK_REF:
15374  useless = "a variable";
15375  break;
15376  case NODE_CONST:
15377  useless = "a constant";
15378  break;
15379  case NODE_LIT:
15380  case NODE_STR:
15381  case NODE_DSTR:
15382  case NODE_DREGX:
15383  case NODE_DREGX_ONCE:
15384  useless = "a literal";
15385  break;
15386  case NODE_COLON2:
15387  case NODE_COLON3:
15388  useless = "::";
15389  break;
15390  case NODE_DOT2:
15391  useless = "..";
15392  break;
15393  case NODE_DOT3:
15394  useless = "...";
15395  break;
15396  case NODE_SELF:
15397  useless = "self";
15398  break;
15399  case NODE_NIL:
15400  useless = "nil";
15401  break;
15402  case NODE_TRUE:
15403  useless = "true";
15404  break;
15405  case NODE_FALSE:
15406  useless = "false";
15407  break;
15408  case NODE_DEFINED:
15409  useless = "defined?";
15410  break;
15411  }
15412 
15413  if (useless) {
15414  int line = ruby_sourceline;
15415 
15416  ruby_sourceline = nd_line(node);
15417  rb_warnS("possibly useless use of %s in void context", useless);
15418  ruby_sourceline = line;
15419  }
15420 }
15421 
15422 static void
15423 void_stmts_gen(struct parser_params *parser, NODE *node)
15424 {
15425  if (!RTEST(ruby_verbose)) return;
15426  if (!node) return;
15427  if (nd_type(node) != NODE_BLOCK) return;
15428 
15429  for (;;) {
15430  if (!node->nd_next) return;
15431  void_expr0(node->nd_head);
15432  node = node->nd_next;
15433  }
15434 }
15435 
15436 static NODE *
15438 {
15439  NODE **n = &node, *n1 = node;
15440  while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
15441  *n = n1 = n1->nd_body;
15442  }
15443  return node;
15444 }
15445 
15446 static void
15447 reduce_nodes_gen(struct parser_params *parser, NODE **body)
15448 {
15449  NODE *node = *body;
15450 
15451  if (!node) {
15452  *body = NEW_NIL();
15453  return;
15454  }
15455 #define subnodes(n1, n2) \
15456  ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
15457  (!node->n2) ? (body = &node->n1, 1) : \
15458  (reduce_nodes(&node->n1), body = &node->n2, 1))
15459 
15460  while (node) {
15461  int newline = (int)(node->flags & NODE_FL_NEWLINE);
15462  switch (nd_type(node)) {
15463  end:
15464  case NODE_NIL:
15465  *body = 0;
15466  return;
15467  case NODE_RETURN:
15468  *body = node = node->nd_stts;
15469  if (newline && node) node->flags |= NODE_FL_NEWLINE;
15470  continue;
15471  case NODE_BEGIN:
15472  *body = node = node->nd_body;
15473  if (newline && node) node->flags |= NODE_FL_NEWLINE;
15474  continue;
15475  case NODE_BLOCK:
15476  body = &node->nd_end->nd_head;
15477  break;
15478  case NODE_IF:
15479  if (subnodes(nd_body, nd_else)) break;
15480  return;
15481  case NODE_CASE:
15482  body = &node->nd_body;
15483  break;
15484  case NODE_WHEN:
15485  if (!subnodes(nd_body, nd_next)) goto end;
15486  break;
15487  case NODE_ENSURE:
15488  if (!subnodes(nd_head, nd_resq)) goto end;
15489  break;
15490  case NODE_RESCUE:
15491  if (node->nd_else) {
15492  body = &node->nd_resq;
15493  break;
15494  }
15495  if (!subnodes(nd_head, nd_resq)) goto end;
15496  break;
15497  default:
15498  return;
15499  }
15500  node = *body;
15501  if (newline && node) node->flags |= NODE_FL_NEWLINE;
15502  }
15503 
15504 #undef subnodes
15505 }
15506 
15507 static int
15509 {
15510  if (!node) return 1;
15511  switch (nd_type(node)) {
15512  case NODE_HASH:
15513  if (!(node = node->nd_head)) break;
15514  case NODE_ARRAY:
15515  do {
15516  if (!is_static_content(node->nd_head)) return 0;
15517  } while ((node = node->nd_next) != 0);
15518  case NODE_LIT:
15519  case NODE_STR:
15520  case NODE_NIL:
15521  case NODE_TRUE:
15522  case NODE_FALSE:
15523  case NODE_ZARRAY:
15524  break;
15525  default:
15526  return 0;
15527  }
15528  return 1;
15529 }
15530 
15531 static int
15532 assign_in_cond(struct parser_params *parser, NODE *node)
15533 {
15534  switch (nd_type(node)) {
15535  case NODE_MASGN:
15536  yyerror("multiple assignment in conditional");
15537  return 1;
15538 
15539  case NODE_LASGN:
15540  case NODE_DASGN:
15541  case NODE_DASGN_CURR:
15542  case NODE_GASGN:
15543  case NODE_IASGN:
15544  break;
15545 
15546  default:
15547  return 0;
15548  }
15549 
15550  if (!node->nd_value) return 1;
15551  if (is_static_content(node->nd_value)) {
15552  /* reports always */
15553  parser_warn(node->nd_value, "found = in conditional, should be ==");
15554  }
15555  return 1;
15556 }
15557 
15558 static void
15559 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15560 {
15561  if (!e_option_supplied(parser)) parser_warn(node, str);
15562 }
15563 
15564 static void
15565 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15566 {
15567  if (!e_option_supplied(parser)) parser_warning(node, str);
15568 }
15569 
15570 static void
15571 fixup_nodes(NODE **rootnode)
15572 {
15573  NODE *node, *next, *head;
15574 
15575  for (node = *rootnode; node; node = next) {
15576  enum node_type type;
15577  VALUE val;
15578 
15579  next = node->nd_next;
15580  head = node->nd_head;
15581  rb_gc_force_recycle((VALUE)node);
15582  *rootnode = next;
15583  switch (type = nd_type(head)) {
15584  case NODE_DOT2:
15585  case NODE_DOT3:
15586  val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
15587  type == NODE_DOT3);
15588  rb_gc_force_recycle((VALUE)head->nd_beg);
15589  rb_gc_force_recycle((VALUE)head->nd_end);
15590  nd_set_type(head, NODE_LIT);
15591  head->nd_lit = val;
15592  break;
15593  default:
15594  break;
15595  }
15596  }
15597 }
15598 
15599 static NODE *cond0(struct parser_params*,NODE*);
15600 
15601 static NODE*
15602 range_op(struct parser_params *parser, NODE *node)
15603 {
15604  enum node_type type;
15605 
15606  if (node == 0) return 0;
15607 
15608  type = nd_type(node);
15609  value_expr(node);
15610  if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
15611  warn_unless_e_option(parser, node, "integer literal in conditional range");
15612  return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
15613  }
15614  return cond0(parser, node);
15615 }
15616 
15617 static int
15619 {
15620  if (!node) return 1; /* same as NODE_NIL */
15621  switch (nd_type(node)) {
15622  case NODE_LIT:
15623  case NODE_STR:
15624  case NODE_DSTR:
15625  case NODE_EVSTR:
15626  case NODE_DREGX:
15627  case NODE_DREGX_ONCE:
15628  case NODE_DSYM:
15629  return 2;
15630  case NODE_TRUE:
15631  case NODE_FALSE:
15632  case NODE_NIL:
15633  return 1;
15634  }
15635  return 0;
15636 }
15637 
15638 static NODE*
15639 cond0(struct parser_params *parser, NODE *node)
15640 {
15641  if (node == 0) return 0;
15642  assign_in_cond(parser, node);
15643 
15644  switch (nd_type(node)) {
15645  case NODE_DSTR:
15646  case NODE_EVSTR:
15647  case NODE_STR:
15648  rb_warn0("string literal in condition");
15649  break;
15650 
15651  case NODE_DREGX:
15652  case NODE_DREGX_ONCE:
15653  warning_unless_e_option(parser, node, "regex literal in condition");
15654  return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
15655 
15656  case NODE_AND:
15657  case NODE_OR:
15658  node->nd_1st = cond0(parser, node->nd_1st);
15659  node->nd_2nd = cond0(parser, node->nd_2nd);
15660  break;
15661 
15662  case NODE_DOT2:
15663  case NODE_DOT3:
15664  node->nd_beg = range_op(parser, node->nd_beg);
15665  node->nd_end = range_op(parser, node->nd_end);
15666  if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
15667  else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
15668  if (!e_option_supplied(parser)) {
15669  int b = literal_node(node->nd_beg);
15670  int e = literal_node(node->nd_end);
15671  if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
15672  parser_warn(node, "range literal in condition");
15673  }
15674  }
15675  break;
15676 
15677  case NODE_DSYM:
15678  parser_warning(node, "literal in condition");
15679  break;
15680 
15681  case NODE_LIT:
15682  if (RB_TYPE_P(node->nd_lit, T_REGEXP)) {
15683  warn_unless_e_option(parser, node, "regex literal in condition");
15684  nd_set_type(node, NODE_MATCH);
15685  }
15686  else {
15687  parser_warning(node, "literal in condition");
15688  }
15689  default:
15690  break;
15691  }
15692  return node;
15693 }
15694 
15695 static NODE*
15696 cond_gen(struct parser_params *parser, NODE *node)
15697 {
15698  if (node == 0) return 0;
15699  return cond0(parser, node);
15700 }
15701 
15702 static NODE*
15703 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
15704 {
15705  value_expr(left);
15706  if (left && (enum node_type)nd_type(left) == type) {
15707  NODE *node = left, *second;
15708  while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
15709  node = second;
15710  }
15711  node->nd_2nd = NEW_NODE(type, second, right, 0);
15712  return left;
15713  }
15714  return NEW_NODE(type, left, right, 0);
15715 }
15716 
15717 static void
15718 no_blockarg(struct parser_params *parser, NODE *node)
15719 {
15720  if (node && nd_type(node) == NODE_BLOCK_PASS) {
15721  compile_error(PARSER_ARG "block argument should not be given");
15722  }
15723 }
15724 
15725 static NODE *
15726 ret_args_gen(struct parser_params *parser, NODE *node)
15727 {
15728  if (node) {
15729  no_blockarg(parser, node);
15730  if (nd_type(node) == NODE_ARRAY) {
15731  if (node->nd_next == 0) {
15732  node = node->nd_head;
15733  }
15734  else {
15735  nd_set_type(node, NODE_VALUES);
15736  }
15737  }
15738  }
15739  return node;
15740 }
15741 
15742 static NODE *
15743 new_yield_gen(struct parser_params *parser, NODE *node)
15744 {
15745  if (node) no_blockarg(parser, node);
15746 
15747  return NEW_YIELD(node);
15748 }
15749 
15750 static NODE*
15752 {
15753  switch (TYPE(node->nd_lit)) {
15754  case T_FIXNUM:
15755  node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
15756  break;
15757  case T_BIGNUM:
15758  node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
15759  break;
15760  case T_FLOAT:
15761 #if USE_FLONUM
15762  if (FLONUM_P(node->nd_lit)) {
15763  node->nd_lit = DBL2NUM(-RFLOAT_VALUE(node->nd_lit));
15764  }
15765  else {
15766  RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15767  }
15768 #else
15769  RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15770 #endif
15771  break;
15772  default:
15773  break;
15774  }
15775  return node;
15776 }
15777 
15778 static NODE *
15779 arg_blk_pass(NODE *node1, NODE *node2)
15780 {
15781  if (node2) {
15782  node2->nd_head = node1;
15783  return node2;
15784  }
15785  return node1;
15786 }
15787 
15788 
15789 static NODE*
15790 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, NODE *tail)
15791 {
15792  int saved_line = ruby_sourceline;
15793  struct rb_args_info *args = tail->nd_ainfo;
15794 
15795  args->pre_args_num = m ? rb_long2int(m->nd_plen) : 0;
15796  args->pre_init = m ? m->nd_next : 0;
15797 
15798  args->post_args_num = p ? rb_long2int(p->nd_plen) : 0;
15799  args->post_init = p ? p->nd_next : 0;
15800  args->first_post_arg = p ? p->nd_pid : 0;
15801 
15802  args->rest_arg = r;
15803 
15804  args->opt_args = o;
15805 
15806  ruby_sourceline = saved_line;
15807 
15808  return tail;
15809 }
15810 
15811 static NODE*
15812 new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b)
15813 {
15814  int saved_line = ruby_sourceline;
15815  struct rb_args_info *args;
15816  NODE *kw_rest_arg = 0;
15817  NODE *node;
15818 
15819  args = ALLOC(struct rb_args_info);
15820  MEMZERO(args, struct rb_args_info, 1);
15821  node = NEW_NODE(NODE_ARGS, 0, 0, args);
15822 
15823  args->block_arg = b;
15824  args->kw_args = k;
15825  if (k && !kr) kr = internal_id();
15826  if (kr) {
15827  arg_var(kr);
15828  kw_rest_arg = NEW_DVAR(kr);
15829  }
15830  args->kw_rest_arg = kw_rest_arg;
15831 
15832  ruby_sourceline = saved_line;
15833  return node;
15834 }
15835 
15836 static NODE*
15837 dsym_node_gen(struct parser_params *parser, NODE *node)
15838 {
15839  VALUE lit;
15840 
15841  if (!node) {
15842  return NEW_LIT(ID2SYM(idNULL));
15843  }
15844 
15845  switch (nd_type(node)) {
15846  case NODE_DSTR:
15847  nd_set_type(node, NODE_DSYM);
15848  break;
15849  case NODE_STR:
15850  lit = node->nd_lit;
15851  node->nd_lit = ID2SYM(rb_intern_str(lit));
15852  nd_set_type(node, NODE_LIT);
15853  break;
15854  default:
15855  node = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST(node));
15856  break;
15857  }
15858  return node;
15859 }
15860 #endif /* !RIPPER */
15861 
15862 #ifndef RIPPER
15863 static NODE *
15864 new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
15865 {
15866  NODE *asgn;
15867 
15868  if (lhs) {
15869  ID vid = lhs->nd_vid;
15870  if (op == tOROP) {
15871  lhs->nd_value = rhs;
15872  asgn = NEW_OP_ASGN_OR(gettable(vid), lhs);
15873  if (is_asgn_or_id(vid)) {
15874  asgn->nd_aid = vid;
15875  }
15876  }
15877  else if (op == tANDOP) {
15878  lhs->nd_value = rhs;
15879  asgn = NEW_OP_ASGN_AND(gettable(vid), lhs);
15880  }
15881  else {
15882  asgn = lhs;
15883  asgn->nd_value = NEW_CALL(gettable(vid), op, NEW_LIST(rhs));
15884  }
15885  }
15886  else {
15887  asgn = NEW_BEGIN(0);
15888  }
15889  return asgn;
15890 }
15891 
15892 static NODE *
15893 new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs)
15894 {
15895  NODE *asgn;
15896 
15897  if (op == tOROP) {
15898  op = 0;
15899  }
15900  else if (op == tANDOP) {
15901  op = 1;
15902  }
15903  asgn = NEW_OP_ASGN2(lhs, attr, op, rhs);
15904  fixpos(asgn, lhs);
15905  return asgn;
15906 }
15907 
15908 static NODE *
15909 new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
15910 {
15911  NODE *asgn;
15912 
15913  if (op == tOROP) {
15914  op = 0;
15915  }
15916  else if (op == tANDOP) {
15917  op = 1;
15918  }
15919  if (lhs) {
15920  asgn = NEW_OP_CDECL(lhs, op, rhs);
15921  }
15922  else {
15923  asgn = NEW_BEGIN(0);
15924  }
15925  fixpos(asgn, lhs);
15926  return asgn;
15927 }
15928 #else
15929 static VALUE
15930 new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs)
15931 {
15932  return dispatch3(opassign, lhs, op, rhs);
15933 }
15934 
15935 static VALUE
15936 new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs)
15937 {
15938  VALUE recv = dispatch3(field, lhs, type, attr);
15939  return dispatch3(opassign, recv, op, rhs);
15940 }
15941 #endif
15942 
15943 static void
15944 warn_unused_var(struct parser_params *parser, struct local_vars *local)
15945 {
15946  int i, cnt;
15947  ID *v, *u;
15948 
15949  if (!local->used) return;
15950  v = local->vars->tbl;
15951  u = local->used->tbl;
15952  cnt = local->used->pos;
15953  if (cnt != local->vars->pos) {
15954  rb_bug("local->used->pos != local->vars->pos");
15955  }
15956  for (i = 0; i < cnt; ++i) {
15957  if (!v[i] || (u[i] & LVAR_USED)) continue;
15958  if (is_private_local_id(v[i])) continue;
15959  rb_warn4S(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i]));
15960  }
15961 }
15962 
15963 static void
15964 local_push_gen(struct parser_params *parser, int inherit_dvars)
15965 {
15966  struct local_vars *local;
15967 
15968  local = ALLOC(struct local_vars);
15969  local->prev = lvtbl;
15970  local->args = vtable_alloc(0);
15971  local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
15972  local->used = !(inherit_dvars &&
15974  RTEST(ruby_verbose) ? vtable_alloc(0) : 0;
15975  local->cmdargs = cmdarg_stack;
15976  cmdarg_stack = 0;
15977  lvtbl = local;
15978 }
15979 
15980 static void
15982 {
15983  struct local_vars *local = lvtbl->prev;
15984  if (lvtbl->used) {
15985  warn_unused_var(parser, lvtbl);
15986  vtable_free(lvtbl->used);
15987  }
15988  vtable_free(lvtbl->args);
15989  vtable_free(lvtbl->vars);
15990  cmdarg_stack = lvtbl->cmdargs;
15991  xfree(lvtbl);
15992  lvtbl = local;
15993 }
15994 
15995 #ifndef RIPPER
15996 static ID*
15998 {
15999  int cnt_args = vtable_size(lvtbl->args);
16000  int cnt_vars = vtable_size(lvtbl->vars);
16001  int cnt = cnt_args + cnt_vars;
16002  int i, j;
16003  ID *buf;
16004 
16005  if (cnt <= 0) return 0;
16006  buf = ALLOC_N(ID, cnt + 1);
16007  MEMCPY(buf+1, lvtbl->args->tbl, ID, cnt_args);
16008  /* remove IDs duplicated to warn shadowing */
16009  for (i = 0, j = cnt_args+1; i < cnt_vars; ++i) {
16010  ID id = lvtbl->vars->tbl[i];
16011  if (!vtable_included(lvtbl->args, id)) {
16012  buf[j++] = id;
16013  }
16014  }
16015  if (--j < cnt) REALLOC_N(buf, ID, (cnt = j) + 1);
16016  buf[0] = cnt;
16017  return buf;
16018 }
16019 #endif
16020 
16021 static int
16022 arg_var_gen(struct parser_params *parser, ID id)
16023 {
16024  vtable_add(lvtbl->args, id);
16025  return vtable_size(lvtbl->args) - 1;
16026 }
16027 
16028 static int
16029 local_var_gen(struct parser_params *parser, ID id)
16030 {
16031  vtable_add(lvtbl->vars, id);
16032  if (lvtbl->used) {
16034  }
16035  return vtable_size(lvtbl->vars) - 1;
16036 }
16037 
16038 static int
16039 local_id_gen(struct parser_params *parser, ID id)
16040 {
16041  struct vtable *vars, *args, *used;
16042 
16043  vars = lvtbl->vars;
16044  args = lvtbl->args;
16045  used = lvtbl->used;
16046 
16047  while (vars && POINTER_P(vars->prev)) {
16048  vars = vars->prev;
16049  args = args->prev;
16050  if (used) used = used->prev;
16051  }
16052 
16053  if (vars && vars->prev == DVARS_INHERIT) {
16054  return rb_local_defined(id);
16055  }
16056  else if (vtable_included(args, id)) {
16057  return 1;
16058  }
16059  else {
16060  int i = vtable_included(vars, id);
16061  if (i && used) used->tbl[i-1] |= LVAR_USED;
16062  return i != 0;
16063  }
16064 }
16065 
16066 static const struct vtable *
16068 {
16069  lvtbl->args = vtable_alloc(lvtbl->args);
16070  lvtbl->vars = vtable_alloc(lvtbl->vars);
16071  if (lvtbl->used) {
16072  lvtbl->used = vtable_alloc(lvtbl->used);
16073  }
16074  return lvtbl->args;
16075 }
16076 
16077 static void
16078 dyna_pop_1(struct parser_params *parser)
16079 {
16080  struct vtable *tmp;
16081 
16082  if ((tmp = lvtbl->used) != 0) {
16083  warn_unused_var(parser, lvtbl);
16084  lvtbl->used = lvtbl->used->prev;
16085  vtable_free(tmp);
16086  }
16087  tmp = lvtbl->args;
16088  lvtbl->args = lvtbl->args->prev;
16089  vtable_free(tmp);
16090  tmp = lvtbl->vars;
16091  lvtbl->vars = lvtbl->vars->prev;
16092  vtable_free(tmp);
16093 }
16094 
16095 static void
16096 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
16097 {
16098  while (lvtbl->args != lvargs) {
16099  dyna_pop_1(parser);
16100  if (!lvtbl->args) {
16101  struct local_vars *local = lvtbl->prev;
16102  xfree(lvtbl);
16103  lvtbl = local;
16104  }
16105  }
16106  dyna_pop_1(parser);
16107 }
16108 
16109 static int
16111 {
16112  return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
16113 }
16114 
16115 static int
16116 dvar_defined_gen(struct parser_params *parser, ID id, int get)
16117 {
16118  struct vtable *vars, *args, *used;
16119  int i;
16120 
16121  args = lvtbl->args;
16122  vars = lvtbl->vars;
16123  used = lvtbl->used;
16124 
16125  while (POINTER_P(vars)) {
16126  if (vtable_included(args, id)) {
16127  return 1;
16128  }
16129  if ((i = vtable_included(vars, id)) != 0) {
16130  if (used) used->tbl[i-1] |= LVAR_USED;
16131  return 1;
16132  }
16133  args = args->prev;
16134  vars = vars->prev;
16135  if (get) used = 0;
16136  if (used) used = used->prev;
16137  }
16138 
16139  if (vars == DVARS_INHERIT) {
16140  return rb_dvar_defined(id);
16141  }
16142 
16143  return 0;
16144 }
16145 
16146 static int
16147 dvar_curr_gen(struct parser_params *parser, ID id)
16148 {
16149  return (vtable_included(lvtbl->args, id) ||
16150  vtable_included(lvtbl->vars, id));
16151 }
16152 
16153 #ifndef RIPPER
16154 static void
16156 {
16157  int c = RE_OPTION_ENCODING_IDX(options);
16158 
16159  if (c) {
16160  int opt, idx;
16161  rb_char_to_option_kcode(c, &opt, &idx);
16162  if (idx != ENCODING_GET(str) &&
16164  goto error;
16165  }
16166  ENCODING_SET(str, idx);
16167  }
16168  else if (RE_OPTION_ENCODING_NONE(options)) {
16169  if (!ENCODING_IS_ASCII8BIT(str) &&
16171  c = 'n';
16172  goto error;
16173  }
16175  }
16176  else if (current_enc == rb_usascii_encoding()) {
16178  /* raise in re.c */
16180  }
16181  else {
16183  }
16184  }
16185  return;
16186 
16187  error:
16189  "regexp encoding option '%c' differs from source encoding '%s'",
16190  c, rb_enc_name(rb_enc_get(str)));
16191 }
16192 
16193 static int
16195 {
16196  VALUE err;
16197  reg_fragment_setenc(str, options);
16198  err = rb_reg_check_preprocess(str);
16199  if (err != Qnil) {
16200  err = rb_obj_as_string(err);
16201  compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
16202  RB_GC_GUARD(err);
16203  return 0;
16204  }
16205  return 1;
16206 }
16207 
16208 typedef struct {
16209  struct parser_params* parser;
16210  rb_encoding *enc;
16211  NODE *succ_block;
16212  NODE *fail_block;
16213  int num;
16215 
16216 static int
16218  int back_num, int *back_refs, OnigRegex regex, void *arg0)
16219 {
16221  struct parser_params* parser = arg->parser;
16222  rb_encoding *enc = arg->enc;
16223  long len = name_end - name;
16224  const char *s = (const char *)name;
16225  ID var;
16226 
16227  arg->num++;
16228 
16229  if (arg->succ_block == 0) {
16230  arg->succ_block = NEW_BEGIN(0);
16231  arg->fail_block = NEW_BEGIN(0);
16232  }
16233 
16234  if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
16235  (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
16236  !rb_enc_symname2_p(s, len, enc)) {
16237  return ST_CONTINUE;
16238  }
16239  var = rb_intern3(s, len, enc);
16240  if (dvar_defined(var) || local_id(var)) {
16241  rb_warningS("named capture conflicts a local variable - %s",
16242  rb_id2name(var));
16243  }
16244  arg->succ_block = block_append(arg->succ_block,
16246  NEW_CALL(
16247  gettable(rb_intern("$~")),
16248  idAREF,
16249  NEW_LIST(NEW_LIT(ID2SYM(var))))
16250  )));
16251  arg->fail_block = block_append(arg->fail_block,
16253  return ST_CONTINUE;
16254 }
16255 
16256 static NODE *
16258 {
16260 
16261  arg.parser = parser;
16262  arg.enc = rb_enc_get(regexp);
16263  arg.succ_block = 0;
16264  arg.fail_block = 0;
16265  arg.num = 0;
16267 
16268  if (arg.num == 0)
16269  return match;
16270 
16271  return
16272  block_append(
16273  newline_node(match),
16274  NEW_IF(gettable(rb_intern("$~")),
16275  block_append(
16276  newline_node(arg.succ_block),
16277  newline_node(
16278  NEW_CALL(
16279  gettable(rb_intern("$~")),
16280  rb_intern("begin"),
16281  NEW_LIST(NEW_LIT(INT2FIX(0)))))),
16282  block_append(
16283  newline_node(arg.fail_block),
16284  newline_node(
16285  NEW_LIT(Qnil)))));
16286 }
16287 
16288 static VALUE
16289 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
16290 {
16291  VALUE re;
16292  VALUE err;
16293 
16294  reg_fragment_setenc(str, options);
16295  err = rb_errinfo();
16297  if (NIL_P(re)) {
16298  ID mesg = rb_intern("mesg");
16299  VALUE m = rb_attr_get(rb_errinfo(), mesg);
16300  rb_set_errinfo(err);
16301  if (!NIL_P(err)) {
16302  rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
16303  }
16304  else {
16306  }
16307  return Qnil;
16308  }
16309  return re;
16310 }
16311 
16312 void
16314 {
16315 }
16316 
16317 NODE*
16319 {
16320  NODE *prelude = 0;
16321  NODE *scope = node;
16322  struct parser_params *parser;
16323 
16324  if (!node) return node;
16325 
16326  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16327 
16328  node = node->nd_body;
16329 
16330  if (nd_type(node) == NODE_PRELUDE) {
16331  prelude = node;
16332  node = node->nd_body;
16333  }
16334 
16335  node = block_append(node,
16336  NEW_FCALL(rb_intern("print"),
16337  NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
16338  if (prelude) {
16339  prelude->nd_body = node;
16340  scope->nd_body = prelude;
16341  }
16342  else {
16343  scope->nd_body = node;
16344  }
16345 
16346  return scope;
16347 }
16348 
16349 NODE *
16350 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
16351 {
16352  NODE *prelude = 0;
16353  NODE *scope = node;
16354  struct parser_params *parser;
16355 
16356  if (!node) return node;
16357 
16358  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16359 
16360  node = node->nd_body;
16361 
16362  if (nd_type(node) == NODE_PRELUDE) {
16363  prelude = node;
16364  node = node->nd_body;
16365  }
16366  if (split) {
16367  node = block_append(NEW_GASGN(rb_intern("$F"),
16368  NEW_CALL(NEW_GVAR(rb_intern("$_")),
16369  rb_intern("split"), 0)),
16370  node);
16371  }
16372  if (chop) {
16373  node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
16374  rb_intern("chop!"), 0), node);
16375  }
16376 
16377  node = NEW_OPT_N(node);
16378 
16379  if (prelude) {
16380  prelude->nd_body = node;
16381  scope->nd_body = prelude;
16382  }
16383  else {
16384  scope->nd_body = node;
16385  }
16386 
16387  return scope;
16388 }
16389 
16390 static const struct {
16392  const char *name;
16393 } op_tbl[] = {
16394  {tDOT2, ".."},
16395  {tDOT3, "..."},
16396  {tPOW, "**"},
16397  {tDSTAR, "**"},
16398  {tUPLUS, "+@"},
16399  {tUMINUS, "-@"},
16400  {tCMP, "<=>"},
16401  {tGEQ, ">="},
16402  {tLEQ, "<="},
16403  {tEQ, "=="},
16404  {tEQQ, "==="},
16405  {tNEQ, "!="},
16406  {tMATCH, "=~"},
16407  {tNMATCH, "!~"},
16408  {tAREF, "[]"},
16409  {tASET, "[]="},
16410  {tLSHFT, "<<"},
16411  {tRSHFT, ">>"},
16412  {tCOLON2, "::"},
16413 };
16414 
16415 #define op_tbl_count numberof(op_tbl)
16416 
16417 #ifndef ENABLE_SELECTOR_NAMESPACE
16418 #define ENABLE_SELECTOR_NAMESPACE 0
16419 #endif
16420 
16421 static struct symbols {
16422  ID last_id;
16423  st_table *sym_id;
16424  st_table *id_str;
16425 #if ENABLE_SELECTOR_NAMESPACE
16426  st_table *ivar2_id;
16427  st_table *id_ivar2;
16428 #endif
16431 
16432 static const struct st_hash_type symhash = {
16434  rb_str_hash,
16435 };
16436 
16437 #if ENABLE_SELECTOR_NAMESPACE
16438 struct ivar2_key {
16439  ID id;
16440  VALUE klass;
16441 };
16442 
16443 static int
16444 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
16445 {
16446  if (key1->id == key2->id && key1->klass == key2->klass) {
16447  return 0;
16448  }
16449  return 1;
16450 }
16451 
16452 static int
16453 ivar2_hash(struct ivar2_key *key)
16454 {
16455  return (key->id << 8) ^ (key->klass >> 2);
16456 }
16457 
16458 static const struct st_hash_type ivar2_hash_type = {
16459  ivar2_cmp,
16460  ivar2_hash,
16461 };
16462 #endif
16463 
16464 void
16466 {
16467  global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
16469 #if ENABLE_SELECTOR_NAMESPACE
16470  global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
16471  global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
16472 #endif
16473 
16474  (void)nodetype;
16475  (void)nodeline;
16476 #if PARSER_DEBUG
16477  (void)lex_state_name(-1);
16478 #endif
16479 
16480  Init_id();
16481 }
16482 
16483 void
16485 {
16489 }
16490 #endif /* !RIPPER */
16491 
16492 static ID
16494 {
16495  ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
16496  id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
16497  return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
16498 }
16499 
16500 #ifndef RIPPER
16501 static int
16502 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
16503 {
16504  int mb = 0;
16505 
16506  if (m >= e) return 0;
16507  if (is_global_name_punct(*m)) {
16508  ++m;
16509  }
16510  else if (*m == '-') {
16511  ++m;
16512  if (m < e && is_identchar(m, e, enc)) {
16513  if (!ISASCII(*m)) mb = 1;
16514  m += rb_enc_mbclen(m, e, enc);
16515  }
16516  }
16517  else {
16518  if (!rb_enc_isdigit(*m, enc)) return 0;
16519  do {
16520  if (!ISASCII(*m)) mb = 1;
16521  ++m;
16522  } while (m < e && rb_enc_isdigit(*m, enc));
16523  }
16524  return m == e ? mb + 1 : 0;
16525 }
16526 
16527 int
16528 rb_symname_p(const char *name)
16529 {
16530  return rb_enc_symname_p(name, rb_ascii8bit_encoding());
16531 }
16532 
16533 int
16534 rb_enc_symname_p(const char *name, rb_encoding *enc)
16535 {
16536  return rb_enc_symname2_p(name, strlen(name), enc);
16537 }
16538 
16539 #define IDSET_ATTRSET_FOR_SYNTAX ((1U<<ID_LOCAL)|(1U<<ID_CONST))
16540 #define IDSET_ATTRSET_FOR_INTERN (~(~0U<<(1<<ID_SCOPE_SHIFT)) & ~(1U<<ID_ATTRSET))
16541 
16542 static int
16543 rb_enc_symname_type(const char *name, long len, rb_encoding *enc, unsigned int allowed_atttset)
16544 {
16545  const char *m = name;
16546  const char *e = m + len;
16547  int type = ID_JUNK;
16548 
16549  if (!m || len <= 0) return -1;
16550  switch (*m) {
16551  case '\0':
16552  return -1;
16553 
16554  case '$':
16555  type = ID_GLOBAL;
16556  if (is_special_global_name(++m, e, enc)) return type;
16557  goto id;
16558 
16559  case '@':
16560  type = ID_INSTANCE;
16561  if (*++m == '@') {
16562  ++m;
16563  type = ID_CLASS;
16564  }
16565  goto id;
16566 
16567  case '<':
16568  switch (*++m) {
16569  case '<': ++m; break;
16570  case '=': if (*++m == '>') ++m; break;
16571  default: break;
16572  }
16573  break;
16574 
16575  case '>':
16576  switch (*++m) {
16577  case '>': case '=': ++m; break;
16578  }
16579  break;
16580 
16581  case '=':
16582  switch (*++m) {
16583  case '~': ++m; break;
16584  case '=': if (*++m == '=') ++m; break;
16585  default: return -1;
16586  }
16587  break;
16588 
16589  case '*':
16590  if (*++m == '*') ++m;
16591  break;
16592 
16593  case '+': case '-':
16594  if (*++m == '@') ++m;
16595  break;
16596 
16597  case '|': case '^': case '&': case '/': case '%': case '~': case '`':
16598  ++m;
16599  break;
16600 
16601  case '[':
16602  if (*++m != ']') return -1;
16603  if (*++m == '=') ++m;
16604  break;
16605 
16606  case '!':
16607  if (len == 1) return ID_JUNK;
16608  switch (*++m) {
16609  case '=': case '~': ++m; break;
16610  default: return -1;
16611  }
16612  break;
16613 
16614  default:
16615  type = rb_enc_isupper(*m, enc) ? ID_CONST : ID_LOCAL;
16616  id:
16617  if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
16618  return -1;
16619  while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
16620  if (m >= e) break;
16621  switch (*m) {
16622  case '!': case '?':
16623  if (type == ID_GLOBAL || type == ID_CLASS || type == ID_INSTANCE) return -1;
16624  type = ID_JUNK;
16625  ++m;
16626  if (m + 1 < e || *m != '=') break;
16627  /* fall through */
16628  case '=':
16629  if (!(allowed_atttset & (1U << type))) return -1;
16630  type = ID_ATTRSET;
16631  ++m;
16632  break;
16633  }
16634  break;
16635  }
16636  return m == e ? type : -1;
16637 }
16638 
16639 int
16640 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
16641 {
16642  return rb_enc_symname_type(name, len, enc, IDSET_ATTRSET_FOR_SYNTAX) != -1;
16643 }
16644 
16645 static int
16646 rb_str_symname_type(VALUE name, unsigned int allowed_atttset)
16647 {
16648  const char *ptr = StringValuePtr(name);
16649  long len = RSTRING_LEN(name);
16650  int type = rb_enc_symname_type(ptr, len, rb_enc_get(name), allowed_atttset);
16651  RB_GC_GUARD(name);
16652  return type;
16653 }
16654 
16655 static ID
16656 register_symid(ID id, const char *name, long len, rb_encoding *enc)
16657 {
16658  VALUE str = rb_enc_str_new(name, len, enc);
16659  return register_symid_str(id, str);
16660 }
16661 
16662 static ID
16664 {
16665  OBJ_FREEZE(str);
16668  return id;
16669 }
16670 
16671 static int
16673 {
16674  if (!rb_enc_asciicompat(rb_enc_get(str))) return FALSE;
16675  switch (rb_enc_str_coderange(str)) {
16676  case ENC_CODERANGE_BROKEN:
16677  rb_raise(rb_eEncodingError, "invalid encoding symbol");
16678  case ENC_CODERANGE_7BIT:
16679  return TRUE;
16680  }
16681  return FALSE;
16682 }
16683 
16684 /*
16685  * _str_ itself will be registered at the global symbol table. _str_
16686  * can be modified before the registration, since the encoding will be
16687  * set to ASCII-8BIT if it is a special global name.
16688  */
16689 static ID intern_str(VALUE str);
16690 
16691 ID
16692 rb_intern3(const char *name, long len, rb_encoding *enc)
16693 {
16694  VALUE str;
16695  st_data_t data;
16696  struct RString fake_str;
16697  fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
16698  fake_str.basic.klass = rb_cString;
16699  fake_str.as.heap.len = len;
16700  fake_str.as.heap.ptr = (char *)name;
16701  fake_str.as.heap.aux.capa = len;
16702  str = (VALUE)&fake_str;
16703  rb_enc_associate(str, enc);
16704  OBJ_FREEZE(str);
16705 
16706  if (st_lookup(global_symbols.sym_id, str, &data))
16707  return (ID)data;
16708 
16709  str = rb_enc_str_new(name, len, enc); /* make true string */
16710  return intern_str(str);
16711 }
16712 
16713 static ID
16715 {
16716  const char *name, *m, *e;
16717  long len, last;
16718  rb_encoding *enc, *symenc;
16719  unsigned char c;
16720  ID id;
16721  int mb;
16722 
16723  RSTRING_GETMEM(str, name, len);
16724  m = name;
16725  e = m + len;
16726  enc = rb_enc_get(str);
16727  symenc = enc;
16728 
16729  if (!len || (rb_cString && !rb_enc_asciicompat(enc))) {
16730  junk:
16731  id = ID_JUNK;
16732  goto new_id;
16733  }
16734  last = len-1;
16735  id = 0;
16736  switch (*m) {
16737  case '$':
16738  if (len < 2) goto junk;
16739  id |= ID_GLOBAL;
16740  if ((mb = is_special_global_name(++m, e, enc)) != 0) {
16741  if (!--mb) symenc = rb_usascii_encoding();
16742  goto new_id;
16743  }
16744  break;
16745  case '@':
16746  if (m[1] == '@') {
16747  if (len < 3) goto junk;
16748  m++;
16749  id |= ID_CLASS;
16750  }
16751  else {
16752  if (len < 2) goto junk;
16753  id |= ID_INSTANCE;
16754  }
16755  m++;
16756  break;
16757  default:
16758  c = m[0];
16759  if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
16760  /* operators */
16761  int i;
16762 
16763  if (len == 1) {
16764  id = c;
16765  goto id_register;
16766  }
16767  for (i = 0; i < op_tbl_count; i++) {
16768  if (*op_tbl[i].name == *m &&
16769  strcmp(op_tbl[i].name, m) == 0) {
16770  id = op_tbl[i].token;
16771  goto id_register;
16772  }
16773  }
16774  }
16775  break;
16776  }
16777  if (name[last] == '=') {
16778  /* attribute assignment */
16779  if (last > 1 && name[last-1] == '=')
16780  goto junk;
16781  id = rb_intern3(name, last, enc);
16782  if (id > tLAST_OP_ID && !is_attrset_id(id)) {
16783  enc = rb_enc_get(rb_id2str(id));
16784  id = rb_id_attrset(id);
16785  goto id_register;
16786  }
16787  id = ID_ATTRSET;
16788  }
16789  else if (id == 0) {
16790  if (rb_enc_isupper(m[0], enc)) {
16791  id = ID_CONST;
16792  }
16793  else {
16794  id = ID_LOCAL;
16795  }
16796  }
16797  if (!rb_enc_isdigit(*m, enc)) {
16798  while (m <= name + last && is_identchar(m, e, enc)) {
16799  if (ISASCII(*m)) {
16800  m++;
16801  }
16802  else {
16803  m += rb_enc_mbclen(m, e, enc);
16804  }
16805  }
16806  }
16807  if (id != ID_ATTRSET && m - name < len) id = ID_JUNK;
16808  if (sym_check_asciionly(str)) symenc = rb_usascii_encoding();
16809  new_id:
16810  if (symenc != enc) rb_enc_associate(str, symenc);
16812  if (len > 20) {
16813  rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
16814  name);
16815  }
16816  else {
16817  rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
16818  (int)len, name);
16819  }
16820  }
16822  id_register:
16823  return register_symid_str(id, str);
16824 }
16825 
16826 ID
16827 rb_intern2(const char *name, long len)
16828 {
16829  return rb_intern3(name, len, rb_usascii_encoding());
16830 }
16831 
16832 #undef rb_intern
16833 ID
16834 rb_intern(const char *name)
16835 {
16836  return rb_intern2(name, strlen(name));
16837 }
16838 
16839 ID
16841 {
16842  st_data_t id;
16843 
16844  if (st_lookup(global_symbols.sym_id, str, &id))
16845  return (ID)id;
16846  return intern_str(rb_str_dup(str));
16847 }
16848 
16849 VALUE
16851 {
16852  st_data_t data;
16853 
16854  if (id < tLAST_TOKEN) {
16855  int i = 0;
16856 
16857  if (id < INT_MAX && rb_ispunct((int)id)) {
16858  VALUE str = global_symbols.op_sym[i = (int)id];
16859  if (!str) {
16860  char name[2];
16861  name[0] = (char)id;
16862  name[1] = 0;
16863  str = rb_usascii_str_new(name, 1);
16864  OBJ_FREEZE(str);
16866  }
16867  return str;
16868  }
16869  for (i = 0; i < op_tbl_count; i++) {
16870  if (op_tbl[i].token == id) {
16871  VALUE str = global_symbols.op_sym[i];
16872  if (!str) {
16873  str = rb_usascii_str_new2(op_tbl[i].name);
16874  OBJ_FREEZE(str);
16876  }
16877  return str;
16878  }
16879  }
16880  }
16881 
16882  if (st_lookup(global_symbols.id_str, id, &data)) {
16883  VALUE str = (VALUE)data;
16884  if (RBASIC(str)->klass == 0)
16885  RBASIC(str)->klass = rb_cString;
16886  return str;
16887  }
16888 
16889  if (is_attrset_id(id)) {
16890  ID id_stem = (id & ~ID_SCOPE_MASK);
16891  VALUE str;
16892 
16893  do {
16894  if (!!(str = rb_id2str(id_stem | ID_LOCAL))) break;
16895  if (!!(str = rb_id2str(id_stem | ID_CONST))) break;
16896  if (!!(str = rb_id2str(id_stem | ID_INSTANCE))) break;
16897  if (!!(str = rb_id2str(id_stem | ID_GLOBAL))) break;
16898  if (!!(str = rb_id2str(id_stem | ID_CLASS))) break;
16899  if (!!(str = rb_id2str(id_stem | ID_JUNK))) break;
16900  return 0;
16901  } while (0);
16902  str = rb_str_dup(str);
16903  rb_str_cat(str, "=", 1);
16904  register_symid_str(id, str);
16905  if (st_lookup(global_symbols.id_str, id, &data)) {
16906  VALUE str = (VALUE)data;
16907  if (RBASIC(str)->klass == 0)
16908  RBASIC(str)->klass = rb_cString;
16909  return str;
16910  }
16911  }
16912  return 0;
16913 }
16914 
16915 const char *
16917 {
16918  VALUE str = rb_id2str(id);
16919 
16920  if (!str) return 0;
16921  return RSTRING_PTR(str);
16922 }
16923 
16924 static int
16926 {
16927  rb_ary_push(ary, ID2SYM(value));
16928  return ST_CONTINUE;
16929 }
16930 
16931 /*
16932  * call-seq:
16933  * Symbol.all_symbols => array
16934  *
16935  * Returns an array of all the symbols currently in Ruby's symbol
16936  * table.
16937  *
16938  * Symbol.all_symbols.size #=> 903
16939  * Symbol.all_symbols[1,20] #=> [:floor, :ARGV, :Binding, :symlink,
16940  * :chown, :EOFError, :$;, :String,
16941  * :LOCK_SH, :"setuid?", :$<,
16942  * :default_proc, :compact, :extend,
16943  * :Tms, :getwd, :$=, :ThreadGroup,
16944  * :wait2, :$>]
16945  */
16946 
16947 VALUE
16949 {
16951 
16953  return ary;
16954 }
16955 
16956 int
16958 {
16959  return is_const_id(id);
16960 }
16961 
16962 int
16964 {
16965  return is_class_id(id);
16966 }
16967 
16968 int
16970 {
16971  return is_global_id(id);
16972 }
16973 
16974 int
16976 {
16977  return is_instance_id(id);
16978 }
16979 
16980 int
16982 {
16983  return is_attrset_id(id);
16984 }
16985 
16986 int
16988 {
16989  return is_local_id(id);
16990 }
16991 
16992 int
16994 {
16995  return is_junk_id(id);
16996 }
16997 
17009 ID
17010 rb_check_id(volatile VALUE *namep)
17011 {
17012  st_data_t id;
17013  VALUE tmp;
17014  VALUE name = *namep;
17015 
17016  if (SYMBOL_P(name)) {
17017  return SYM2ID(name);
17018  }
17019  else if (!RB_TYPE_P(name, T_STRING)) {
17020  tmp = rb_check_string_type(name);
17021  if (NIL_P(tmp)) {
17022  tmp = rb_inspect(name);
17023  rb_raise(rb_eTypeError, "%s is not a symbol",
17024  RSTRING_PTR(tmp));
17025  }
17026  name = tmp;
17027  *namep = name;
17028  }
17029 
17030  sym_check_asciionly(name);
17031 
17032  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
17033  return (ID)id;
17034 
17035  if (rb_is_attrset_name(name)) {
17036  struct RString fake_str;
17037  const VALUE localname = (VALUE)&fake_str;
17038  /* make local name by chopping '=' */
17039  fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
17040  fake_str.basic.klass = rb_cString;
17041  fake_str.as.heap.len = RSTRING_LEN(name) - 1;
17042  fake_str.as.heap.ptr = RSTRING_PTR(name);
17043  fake_str.as.heap.aux.capa = fake_str.as.heap.len;
17044  rb_enc_copy(localname, name);
17045  OBJ_FREEZE(localname);
17046 
17047  if (st_lookup(global_symbols.sym_id, (st_data_t)localname, &id)) {
17048  return rb_id_attrset((ID)id);
17049  }
17050  RB_GC_GUARD(name);
17051  }
17052 
17053  return (ID)0;
17054 }
17055 
17056 ID
17058 {
17059  st_data_t id;
17060  struct RString fake_str;
17061  const VALUE name = (VALUE)&fake_str;
17062  fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
17063  fake_str.basic.klass = rb_cString;
17064  fake_str.as.heap.len = len;
17065  fake_str.as.heap.ptr = (char *)ptr;
17066  fake_str.as.heap.aux.capa = len;
17067  rb_enc_associate(name, enc);
17068 
17069  sym_check_asciionly(name);
17070 
17071  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
17072  return (ID)id;
17073 
17074  if (rb_is_attrset_name(name)) {
17075  fake_str.as.heap.len = len - 1;
17076  if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id)) {
17077  return rb_id_attrset((ID)id);
17078  }
17079  }
17080 
17081  return (ID)0;
17082 }
17083 
17084 int
17086 {
17087  return rb_str_symname_type(name, 0) == ID_CONST;
17088 }
17089 
17090 int
17092 {
17093  return rb_str_symname_type(name, 0) == ID_CLASS;
17094 }
17095 
17096 int
17098 {
17099  return rb_str_symname_type(name, 0) == ID_GLOBAL;
17100 }
17101 
17102 int
17104 {
17105  return rb_str_symname_type(name, 0) == ID_INSTANCE;
17106 }
17107 
17108 int
17110 {
17112 }
17113 
17114 int
17116 {
17117  return rb_str_symname_type(name, 0) == ID_LOCAL;
17118 }
17119 
17120 int
17122 {
17123  switch (rb_str_symname_type(name, 0)) {
17124  case ID_LOCAL: case ID_ATTRSET: case ID_JUNK:
17125  return TRUE;
17126  }
17127  return FALSE;
17128 }
17129 
17130 int
17132 {
17133  return rb_str_symname_type(name, IDSET_ATTRSET_FOR_SYNTAX) == -1;
17134 }
17135 
17136 #endif /* !RIPPER */
17137 
17138 static void
17140 {
17141  parser->eofp = Qfalse;
17142 
17143  parser->parser_lex_strterm = 0;
17144  parser->parser_cond_stack = 0;
17145  parser->parser_cmdarg_stack = 0;
17146  parser->parser_class_nest = 0;
17147  parser->parser_paren_nest = 0;
17148  parser->parser_lpar_beg = 0;
17149  parser->parser_brace_nest = 0;
17150  parser->parser_in_single = 0;
17151  parser->parser_in_def = 0;
17152  parser->parser_in_defined = 0;
17153  parser->parser_compile_for_eval = 0;
17154  parser->parser_cur_mid = 0;
17155  parser->parser_tokenbuf = NULL;
17156  parser->parser_tokidx = 0;
17157  parser->parser_toksiz = 0;
17158  parser->parser_heredoc_end = 0;
17159  parser->parser_command_start = TRUE;
17160  parser->parser_deferred_nodes = 0;
17161  parser->parser_lex_pbeg = 0;
17162  parser->parser_lex_p = 0;
17163  parser->parser_lex_pend = 0;
17164  parser->parser_lvtbl = 0;
17165  parser->parser_ruby__end__seen = 0;
17166  parser->parser_ruby_sourcefile = 0;
17168 #ifndef RIPPER
17169  parser->is_ripper = 0;
17170  parser->parser_eval_tree_begin = 0;
17171  parser->parser_eval_tree = 0;
17172 #else
17173  parser->is_ripper = 1;
17174  parser->delayed = Qnil;
17175 
17176  parser->result = Qnil;
17177  parser->parsing_thread = Qnil;
17178  parser->toplevel_p = TRUE;
17179 #endif
17180 #ifdef YYMALLOC
17181  parser->heap = NULL;
17182 #endif
17183  parser->enc = rb_utf8_encoding();
17184 }
17185 
17186 #ifdef RIPPER
17187 #define parser_mark ripper_parser_mark
17188 #define parser_free ripper_parser_free
17189 #endif
17190 
17191 static void
17193 {
17194  struct parser_params *p = (struct parser_params*)ptr;
17195 
17202 #ifndef RIPPER
17205  rb_gc_mark(p->debug_lines);
17206 #else
17207  rb_gc_mark(p->delayed);
17208  rb_gc_mark(p->value);
17209  rb_gc_mark(p->result);
17210  rb_gc_mark(p->parsing_thread);
17211 #endif
17212 #ifdef YYMALLOC
17213  rb_gc_mark((VALUE)p->heap);
17214 #endif
17215 }
17216 
17217 static void
17219 {
17220  struct parser_params *p = (struct parser_params*)ptr;
17221  struct local_vars *local, *prev;
17222 
17223  if (p->parser_tokenbuf) {
17224  xfree(p->parser_tokenbuf);
17225  }
17226  for (local = p->parser_lvtbl; local; local = prev) {
17227  if (local->vars) xfree(local->vars);
17228  prev = local->prev;
17229  xfree(local);
17230  }
17231  xfree(p);
17232 }
17233 
17234 static size_t
17235 parser_memsize(const void *ptr)
17236 {
17237  struct parser_params *p = (struct parser_params*)ptr;
17238  struct local_vars *local;
17239  size_t size = sizeof(*p);
17240 
17241  if (!ptr) return 0;
17242  size += p->parser_toksiz;
17243  for (local = p->parser_lvtbl; local; local = local->prev) {
17244  size += sizeof(*local);
17245  if (local->vars) size += local->vars->capa * sizeof(ID);
17246  }
17247  return size;
17248 }
17249 
17250 static
17251 #ifndef RIPPER
17252 const
17253 #endif
17254 rb_data_type_t parser_data_type = {
17255  "parser",
17256  {
17257  parser_mark,
17258  parser_free,
17260  },
17261 };
17262 
17263 #ifndef RIPPER
17264 #undef rb_reserved_word
17265 
17266 const struct kwtable *
17267 rb_reserved_word(const char *str, unsigned int len)
17268 {
17269  return reserved_word(str, len);
17270 }
17271 
17272 static struct parser_params *
17274 {
17275  struct parser_params *p;
17276 
17277  p = ALLOC_N(struct parser_params, 1);
17278  MEMZERO(p, struct parser_params, 1);
17279  parser_initialize(p);
17280  return p;
17281 }
17282 
17283 VALUE
17285 {
17286  struct parser_params *p = parser_new();
17287 
17288  return TypedData_Wrap_Struct(0, &parser_data_type, p);
17289 }
17290 
17291 /*
17292  * call-seq:
17293  * ripper#end_seen? -> Boolean
17294  *
17295  * Return true if parsed source ended by +\_\_END\_\_+.
17296  */
17297 VALUE
17299 {
17300  struct parser_params *parser;
17301 
17302  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17303  return ruby__end__seen ? Qtrue : Qfalse;
17304 }
17305 
17306 /*
17307  * call-seq:
17308  * ripper#encoding -> encoding
17309  *
17310  * Return encoding of the source.
17311  */
17312 VALUE
17314 {
17315  struct parser_params *parser;
17316 
17317  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17319 }
17320 
17321 /*
17322  * call-seq:
17323  * ripper.yydebug -> true or false
17324  *
17325  * Get yydebug.
17326  */
17327 VALUE
17329 {
17330  struct parser_params *parser;
17331 
17332  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17333  return yydebug ? Qtrue : Qfalse;
17334 }
17335 
17336 /*
17337  * call-seq:
17338  * ripper.yydebug = flag
17339  *
17340  * Set yydebug.
17341  */
17342 VALUE
17344 {
17345  struct parser_params *parser;
17346 
17347  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17348  yydebug = RTEST(flag);
17349  return flag;
17350 }
17351 
17352 #ifdef YYMALLOC
17353 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
17354 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
17355 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
17356  (n)->u3.cnt = (c), (p))
17357 
17358 void *
17359 rb_parser_malloc(struct parser_params *parser, size_t size)
17360 {
17361  size_t cnt = HEAPCNT(1, size);
17362  NODE *n = NEWHEAP();
17363  void *ptr = xmalloc(size);
17364 
17365  return ADD2HEAP(n, cnt, ptr);
17366 }
17367 
17368 void *
17369 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
17370 {
17371  size_t cnt = HEAPCNT(nelem, size);
17372  NODE *n = NEWHEAP();
17373  void *ptr = xcalloc(nelem, size);
17374 
17375  return ADD2HEAP(n, cnt, ptr);
17376 }
17377 
17378 void *
17379 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
17380 {
17381  NODE *n;
17382  size_t cnt = HEAPCNT(1, size);
17383 
17384  if (ptr && (n = parser->heap) != NULL) {
17385  do {
17386  if (n->u1.node == ptr) {
17387  n->u1.node = ptr = xrealloc(ptr, size);
17388  if (n->u3.cnt) n->u3.cnt = cnt;
17389  return ptr;
17390  }
17391  } while ((n = n->u2.node) != NULL);
17392  }
17393  n = NEWHEAP();
17394  ptr = xrealloc(ptr, size);
17395  return ADD2HEAP(n, cnt, ptr);
17396 }
17397 
17398 void
17399 rb_parser_free(struct parser_params *parser, void *ptr)
17400 {
17401  NODE **prev = &parser->heap, *n;
17402 
17403  while ((n = *prev) != NULL) {
17404  if (n->u1.node == ptr) {
17405  *prev = n->u2.node;
17407  break;
17408  }
17409  prev = &n->u2.node;
17410  }
17411  xfree(ptr);
17412 }
17413 #endif
17414 #endif
17415 
17416 #ifdef RIPPER
17417 #ifdef RIPPER_DEBUG
17418 extern int rb_is_pointer_to_heap(VALUE);
17419 
17420 /* :nodoc: */
17421 static VALUE
17422 ripper_validate_object(VALUE self, VALUE x)
17423 {
17424  if (x == Qfalse) return x;
17425  if (x == Qtrue) return x;
17426  if (x == Qnil) return x;
17427  if (x == Qundef)
17428  rb_raise(rb_eArgError, "Qundef given");
17429  if (FIXNUM_P(x)) return x;
17430  if (SYMBOL_P(x)) return x;
17431  if (!rb_is_pointer_to_heap(x))
17432  rb_raise(rb_eArgError, "invalid pointer: %p", x);
17433  switch (TYPE(x)) {
17434  case T_STRING:
17435  case T_OBJECT:
17436  case T_ARRAY:
17437  case T_BIGNUM:
17438  case T_FLOAT:
17439  return x;
17440  case T_NODE:
17441  if (nd_type(x) != NODE_LASGN) {
17442  rb_raise(rb_eArgError, "NODE given: %p", x);
17443  }
17444  return ((NODE *)x)->nd_rval;
17445  default:
17446  rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
17447  x, rb_obj_classname(x));
17448  }
17449  return x;
17450 }
17451 #endif
17452 
17453 #define validate(x) ((x) = get_value(x))
17454 
17455 static VALUE
17456 ripper_dispatch0(struct parser_params *parser, ID mid)
17457 {
17458  return rb_funcall(parser->value, mid, 0);
17459 }
17460 
17461 static VALUE
17462 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
17463 {
17464  validate(a);
17465  return rb_funcall(parser->value, mid, 1, a);
17466 }
17467 
17468 static VALUE
17469 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
17470 {
17471  validate(a);
17472  validate(b);
17473  return rb_funcall(parser->value, mid, 2, a, b);
17474 }
17475 
17476 static VALUE
17477 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
17478 {
17479  validate(a);
17480  validate(b);
17481  validate(c);
17482  return rb_funcall(parser->value, mid, 3, a, b, c);
17483 }
17484 
17485 static VALUE
17486 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
17487 {
17488  validate(a);
17489  validate(b);
17490  validate(c);
17491  validate(d);
17492  return rb_funcall(parser->value, mid, 4, a, b, c, d);
17493 }
17494 
17495 static VALUE
17496 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
17497 {
17498  validate(a);
17499  validate(b);
17500  validate(c);
17501  validate(d);
17502  validate(e);
17503  return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
17504 }
17505 
17506 static VALUE
17507 ripper_dispatch7(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e, VALUE f, VALUE g)
17508 {
17509  validate(a);
17510  validate(b);
17511  validate(c);
17512  validate(d);
17513  validate(e);
17514  validate(f);
17515  validate(g);
17516  return rb_funcall(parser->value, mid, 7, a, b, c, d, e, f, g);
17517 }
17518 
17519 static const struct kw_assoc {
17520  ID id;
17521  const char *name;
17522 } keyword_to_name[] = {
17523  {keyword_class, "class"},
17524  {keyword_module, "module"},
17525  {keyword_def, "def"},
17526  {keyword_undef, "undef"},
17527  {keyword_begin, "begin"},
17528  {keyword_rescue, "rescue"},
17529  {keyword_ensure, "ensure"},
17530  {keyword_end, "end"},
17531  {keyword_if, "if"},
17532  {keyword_unless, "unless"},
17533  {keyword_then, "then"},
17534  {keyword_elsif, "elsif"},
17535  {keyword_else, "else"},
17536  {keyword_case, "case"},
17537  {keyword_when, "when"},
17538  {keyword_while, "while"},
17539  {keyword_until, "until"},
17540  {keyword_for, "for"},
17541  {keyword_break, "break"},
17542  {keyword_next, "next"},
17543  {keyword_redo, "redo"},
17544  {keyword_retry, "retry"},
17545  {keyword_in, "in"},
17546  {keyword_do, "do"},
17547  {keyword_do_cond, "do"},
17548  {keyword_do_block, "do"},
17549  {keyword_return, "return"},
17550  {keyword_yield, "yield"},
17551  {keyword_super, "super"},
17552  {keyword_self, "self"},
17553  {keyword_nil, "nil"},
17554  {keyword_true, "true"},
17555  {keyword_false, "false"},
17556  {keyword_and, "and"},
17557  {keyword_or, "or"},
17558  {keyword_not, "not"},
17559  {modifier_if, "if"},
17560  {modifier_unless, "unless"},
17561  {modifier_while, "while"},
17562  {modifier_until, "until"},
17563  {modifier_rescue, "rescue"},
17564  {keyword_alias, "alias"},
17565  {keyword_defined, "defined?"},
17566  {keyword_BEGIN, "BEGIN"},
17567  {keyword_END, "END"},
17568  {keyword__LINE__, "__LINE__"},
17569  {keyword__FILE__, "__FILE__"},
17570  {keyword__ENCODING__, "__ENCODING__"},
17571  {0, NULL}
17572 };
17573 
17574 static const char*
17575 keyword_id_to_str(ID id)
17576 {
17577  const struct kw_assoc *a;
17578 
17579  for (a = keyword_to_name; a->id; a++) {
17580  if (a->id == id)
17581  return a->name;
17582  }
17583  return NULL;
17584 }
17585 
17586 #undef ripper_id2sym
17587 static VALUE
17588 ripper_id2sym(ID id)
17589 {
17590  const char *name;
17591  char buf[8];
17592 
17593  if (id <= 256) {
17594  buf[0] = (char)id;
17595  buf[1] = '\0';
17596  return ID2SYM(rb_intern2(buf, 1));
17597  }
17598  if ((name = keyword_id_to_str(id))) {
17599  return ID2SYM(rb_intern(name));
17600  }
17601  switch (id) {
17602  case tOROP:
17603  name = "||";
17604  break;
17605  case tANDOP:
17606  name = "&&";
17607  break;
17608  default:
17609  name = rb_id2name(id);
17610  if (!name) {
17611  rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
17612  }
17613  return ID2SYM(id);
17614  }
17615  return ID2SYM(rb_intern(name));
17616 }
17617 
17618 static ID
17619 ripper_get_id(VALUE v)
17620 {
17621  NODE *nd;
17622  if (!RB_TYPE_P(v, T_NODE)) return 0;
17623  nd = (NODE *)v;
17624  if (nd_type(nd) != NODE_LASGN) return 0;
17625  return nd->nd_vid;
17626 }
17627 
17628 static VALUE
17629 ripper_get_value(VALUE v)
17630 {
17631  NODE *nd;
17632  if (v == Qundef) return Qnil;
17633  if (!RB_TYPE_P(v, T_NODE)) return v;
17634  nd = (NODE *)v;
17635  if (nd_type(nd) != NODE_LASGN) return Qnil;
17636  return nd->nd_rval;
17637 }
17638 
17639 static void
17640 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
17641 {
17642  VALUE str;
17643  va_list args;
17644 
17645  va_start(args, fmt);
17646  str = rb_vsprintf(fmt, args);
17647  va_end(args);
17648  rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
17649 }
17650 
17651 static void
17652 ripper_warn0(struct parser_params *parser, const char *fmt)
17653 {
17654  rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
17655 }
17656 
17657 static void
17658 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
17659 {
17660  rb_funcall(parser->value, rb_intern("warn"), 2,
17661  STR_NEW2(fmt), INT2NUM(a));
17662 }
17663 
17664 static void
17665 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
17666 {
17667  rb_funcall(parser->value, rb_intern("warn"), 2,
17668  STR_NEW2(fmt), STR_NEW2(str));
17669 }
17670 
17671 static void
17672 ripper_warning0(struct parser_params *parser, const char *fmt)
17673 {
17674  rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
17675 }
17676 
17677 static void
17678 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
17679 {
17680  rb_funcall(parser->value, rb_intern("warning"), 2,
17681  STR_NEW2(fmt), STR_NEW2(str));
17682 }
17683 
17684 static VALUE
17685 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
17686 {
17687  return rb_io_gets(src);
17688 }
17689 
17690 static VALUE
17691 ripper_s_allocate(VALUE klass)
17692 {
17693  struct parser_params *p;
17694  VALUE self;
17695 
17696  p = ALLOC_N(struct parser_params, 1);
17697  MEMZERO(p, struct parser_params, 1);
17698  self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
17699  p->value = self;
17700  return self;
17701 }
17702 
17703 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
17704 
17705 /*
17706  * call-seq:
17707  * Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
17708  *
17709  * Create a new Ripper object.
17710  * _src_ must be a String, an IO, or an Object which has #gets method.
17711  *
17712  * This method does not starts parsing.
17713  * See also Ripper#parse and Ripper.parse.
17714  */
17715 static VALUE
17716 ripper_initialize(int argc, VALUE *argv, VALUE self)
17717 {
17718  struct parser_params *parser;
17719  VALUE src, fname, lineno;
17720 
17721  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17722  rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
17723  if (RB_TYPE_P(src, T_FILE)) {
17724  parser->parser_lex_gets = ripper_lex_get_generic;
17725  }
17726  else {
17727  StringValue(src);
17728  parser->parser_lex_gets = lex_get_str;
17729  }
17730  parser->parser_lex_input = src;
17731  parser->eofp = Qfalse;
17732  if (NIL_P(fname)) {
17733  fname = STR_NEW2("(ripper)");
17734  }
17735  else {
17736  StringValue(fname);
17737  }
17738  parser_initialize(parser);
17739 
17740  parser->parser_ruby_sourcefile_string = fname;
17741  parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
17742  parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
17743 
17744  return Qnil;
17745 }
17746 
17747 struct ripper_args {
17748  struct parser_params *parser;
17749  int argc;
17750  VALUE *argv;
17751 };
17752 
17753 static VALUE
17754 ripper_parse0(VALUE parser_v)
17755 {
17756  struct parser_params *parser;
17757 
17758  TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
17759  parser_prepare(parser);
17760  ripper_yyparse((void*)parser);
17761  return parser->result;
17762 }
17763 
17764 static VALUE
17765 ripper_ensure(VALUE parser_v)
17766 {
17767  struct parser_params *parser;
17768 
17769  TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
17770  parser->parsing_thread = Qnil;
17771  return Qnil;
17772 }
17773 
17774 /*
17775  * call-seq:
17776  * ripper#parse
17777  *
17778  * Start parsing and returns the value of the root action.
17779  */
17780 static VALUE
17781 ripper_parse(VALUE self)
17782 {
17783  struct parser_params *parser;
17784 
17785  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17786  if (!ripper_initialized_p(parser)) {
17787  rb_raise(rb_eArgError, "method called for uninitialized object");
17788  }
17789  if (!NIL_P(parser->parsing_thread)) {
17790  if (parser->parsing_thread == rb_thread_current())
17791  rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
17792  else
17793  rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
17794  }
17795  parser->parsing_thread = rb_thread_current();
17796  rb_ensure(ripper_parse0, self, ripper_ensure, self);
17797 
17798  return parser->result;
17799 }
17800 
17801 /*
17802  * call-seq:
17803  * ripper#column -> Integer
17804  *
17805  * Return column number of current parsing line.
17806  * This number starts from 0.
17807  */
17808 static VALUE
17809 ripper_column(VALUE self)
17810 {
17811  struct parser_params *parser;
17812  long col;
17813 
17814  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17815  if (!ripper_initialized_p(parser)) {
17816  rb_raise(rb_eArgError, "method called for uninitialized object");
17817  }
17818  if (NIL_P(parser->parsing_thread)) return Qnil;
17819  col = parser->tokp - parser->parser_lex_pbeg;
17820  return LONG2NUM(col);
17821 }
17822 
17823 /*
17824  * call-seq:
17825  * ripper#filename -> String
17826  *
17827  * Return current parsing filename.
17828  */
17829 static VALUE
17830 ripper_filename(VALUE self)
17831 {
17832  struct parser_params *parser;
17833 
17834  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17835  if (!ripper_initialized_p(parser)) {
17836  rb_raise(rb_eArgError, "method called for uninitialized object");
17837  }
17838  return parser->parser_ruby_sourcefile_string;
17839 }
17840 
17841 /*
17842  * call-seq:
17843  * ripper#lineno -> Integer
17844  *
17845  * Return line number of current parsing line.
17846  * This number starts from 1.
17847  */
17848 static VALUE
17849 ripper_lineno(VALUE self)
17850 {
17851  struct parser_params *parser;
17852 
17853  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17854  if (!ripper_initialized_p(parser)) {
17855  rb_raise(rb_eArgError, "method called for uninitialized object");
17856  }
17857  if (NIL_P(parser->parsing_thread)) return Qnil;
17858  return INT2NUM(parser->parser_ruby_sourceline);
17859 }
17860 
17861 #ifdef RIPPER_DEBUG
17862 /* :nodoc: */
17863 static VALUE
17864 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
17865 {
17866  StringValue(msg);
17867  if (obj == Qundef) {
17868  rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg));
17869  }
17870  return Qnil;
17871 }
17872 
17873 /* :nodoc: */
17874 static VALUE
17875 ripper_value(VALUE self, VALUE obj)
17876 {
17877  return ULONG2NUM(obj);
17878 }
17879 #endif
17880 
17881 
17882 void
17883 Init_ripper(void)
17884 {
17885  parser_data_type.parent = RTYPEDDATA_TYPE(rb_parser_new());
17886 
17889  /* ensure existing in symbol table */
17890  (void)rb_intern("||");
17891  (void)rb_intern("&&");
17892 
17893  InitVM(ripper);
17894 }
17895 
17896 void
17897 InitVM_ripper(void)
17898 {
17899  VALUE Ripper;
17900 
17901  Ripper = rb_define_class("Ripper", rb_cObject);
17902  rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
17903  rb_define_alloc_func(Ripper, ripper_s_allocate);
17904  rb_define_method(Ripper, "initialize", ripper_initialize, -1);
17905  rb_define_method(Ripper, "parse", ripper_parse, 0);
17906  rb_define_method(Ripper, "column", ripper_column, 0);
17907  rb_define_method(Ripper, "filename", ripper_filename, 0);
17908  rb_define_method(Ripper, "lineno", ripper_lineno, 0);
17909  rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
17910  rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
17911  rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
17912  rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
17913 #ifdef RIPPER_DEBUG
17914  rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
17915  rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
17916  rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
17917 #endif
17918 
17921 
17922 # if 0
17923  /* Hack to let RDoc document SCRIPT_LINES__ */
17924 
17925  /*
17926  * When a Hash is assigned to +SCRIPT_LINES__+ the contents of files loaded
17927  * after the assignment will be added as an Array of lines with the file
17928  * name as the key.
17929  */
17930  rb_define_global_const("SCRIPT_LINES__", Qnil);
17931 #endif
17932 
17933 }
17934 #endif /* RIPPER */
17935 
VALUE data
Definition: tcltklib.c:3367
#define toklast()
Definition: parse.c:12062
#define rb_enc_islower(c, enc)
#define tokadd_mbchar(c)
Definition: parse.c:12422
char * parser_ruby_sourcefile
Definition: ripper.c:327
#define RB_TYPE_P(obj, type)
VALUE val
Definition: parse.h:164
#define YYLAST
Definition: parse.c:1138
#define deferred_nodes
Definition: ripper.c:393
#define nd_next
#define nd_type(n)
#define NEW_ARGSCAT(a, b)
#define evstr2dstr(n)
Definition: parse.c:460
RARRAY_PTR(q->result)[0]
static const char id_type_names[][9]
Definition: parse.c:15128
#define NODE_DREGX_ONCE
VALUE rb_const_get_at(VALUE, ID)
Definition: variable.c:1882
#define yyparse
Definition: ripper.c:418
static NODE * call_bin_op_gen(struct parser_params *, NODE *, ID, NODE *)
Definition: parse.c:14857
stack_type cmdargs
Definition: ripper.c:193
#define ALLOC(type)
volatile VALUE tmp
Definition: tcltklib.c:10208
#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:4645
VALUE rb_ary_unshift(VALUE ary, VALUE item)
Definition: array.c:1071
static ID ripper_token2eventid(int tok)
Definition: eventids2.c:273
static ID internal_id_gen(struct parser_params *)
Definition: parse.c:16493
#define NODE_RESCUE
Definition: lex.c:33
#define tokenbuf
Definition: parse.c:381
int rb_is_attrset_id(ID id)
Definition: ripper.c:17071
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 lex_state
Definition: ripper.c:369
ssize_t n
Definition: bigdecimal.c:5676
#define shadowing_lvar(name)
Definition: parse.c:549
VALUE sym
Definition: tkutil.c:1298
static void arg_ambiguous_gen(struct parser_params *parser)
Definition: parse.c:12932
volatile VALUE ary
Definition: tcltklib.c:9712
#define NODE_FALSE
#define NEW_DOT3(b, e)
case return tREGEXP_BEG
Definition: ripper.y:7646
#define nextc()
Definition: parse.c:11443
static long parser_encode_length(struct parser_params *parser, const char *name, long len)
Definition: parse.c:12961
#define FLONUM_P(x)
VP_EXPORT int
Definition: bigdecimal.c:5071
#define NODE_OR
#define RE_OPTION_ENCODING_IDX(o)
Definition: parse.c:585
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
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:5185
#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:295
#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:1692
struct token_info * next
Definition: ripper.c:275
static NODE * attrset_gen(struct parser_params *, NODE *, ID)
Definition: parse.c:15169
void rb_enc_copy(VALUE obj1, VALUE obj2)
Definition: encoding.c:856
#define FALSE
Definition: nkf.h:174
#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: ripper.c:17181
struct vtable * used
Definition: ripper.c:191
#define tHEREDOC_BEG
Definition: eventids2.c:7
NODE * rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
Definition: ripper.c:12017
#define pushback(c)
Definition: parse.c:11444
#define rb_gc_mark_locations(start, end)
Definition: gc.c:2348
size_t strlen(const char *)
yytype_int16 yyssa[YYINITDEPTH]
Definition: ripper.c:4918
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:721
static NODE * negate_lit(NODE *)
Definition: parse.c:15751
VALUE stack_type
Definition: ripper.c:164
#define toklen()
Definition: parse.c:12061
#define new_yield(node)
Definition: parse.c:478
const char * rb_obj_classname(VALUE)
Definition: variable.c:396
#define dispatch_heredoc_end()
Definition: parse.c:12822
static NODE * node_assign_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15241
VALUE rb_id2str(ID id)
Definition: ripper.c:16940
Win32OLEIDispatch * p
Definition: win32ole.c:786
#define YY_(msgid)
Definition: ripper.c:976
int parser_ruby__end__seen
Definition: ripper.c:324
static void local_push_gen(struct parser_params *, int)
Definition: parse.c:15964
static int vtable_size(const struct vtable *tbl)
Definition: parse.c:202
#define formal_argument(id)
Definition: parse.c:547
#define NODE_DSYM
int parser_command_start
Definition: ripper.c:319
static void fixpos(NODE *, NODE *)
Definition: ripper.c:14705
#define NODE_DEFS
static NODE * arg_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15190
#define YYSTACK_FREE
Definition: ripper.c:1045
#define is_notop_id(id)
Definition: parse.c:110
#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:629
#define tokfix()
Definition: parse.c:12059
static NODE * evstr2dstr_gen(struct parser_params *, NODE *)
Definition: parse.c:14834
#define nd_body
#define local_pop()
Definition: parse.c:556
VALUE rb_str_buf_append(VALUE, VALUE)
Definition: string.c:2109
static int nodeline(NODE *node)
Definition: parse.c:14599
#define NODE_HASH
static int token_info_has_nonspaces(struct parser_params *parser, const char *token)
Definition: parse.c:11575
#define local_var(id)
Definition: parse.c:558
#define NODE_DOT3
static NODE * arg_blk_pass(NODE *, NODE *)
Definition: parse.c:15779
#define IS_LABEL_POSSIBLE()
Definition: parse.c:13271
#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:16155
#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:342
#define parser_precise_mbclen()
Definition: parse.c:11553
#define NEW_ALIAS(n, o)
static ID formal_argument_gen(struct parser_params *, ID)
Definition: parse.c:12943
static int parser_read_escape(struct parser_params *parser, int flags, rb_encoding **encp)
Definition: parse.c:12195
#define NEW_OP_CDECL(v, op, val)
#define internal_id()
Definition: parse.c:564
int parser_brace_nest
Definition: ripper.c:304
static VALUE reg_compile_gen(struct parser_params *, VALUE, int)
Definition: parse.c:16289
static ID register_symid(ID, const char *, long, rb_encoding *)
Definition: parse.c:16656
Definition: ripper.y:105
#define lex_nextline
Definition: parse.c:387
static void FILE * yyoutput
Definition: parse.c:4434
SSL_METHOD *(* func)(void)
Definition: ossl_ssl.c:108
#define rb_usascii_str_new2
#define NEW_TRUE()
#define RE_OPTION_ENCODING(e)
Definition: parse.c:584
#define nd_resq
#define NODE_NTH_REF
void rb_define_global_const(const char *, VALUE)
Definition: variable.c:2218
#define DVARS_TOPSCOPE
Definition: parse.c:197
#define set_yylval_str(x)
Definition: parse.c:11461
void rb_gc_force_recycle(VALUE)
Definition: gc.c:2963
ssize_t i
Definition: bigdecimal.c:5676
static const yytype_uint16 yyr1[]
Definition: parse.c:1624
#define NODE_TRUE
#define gettable(id)
Definition: parse.c:483
#define set_yylval_literal(x)
Definition: parse.c:11465
#define yytable_value_is_error(yytable_value)
Definition: parse.c:3117
#define IDSET_ATTRSET_FOR_SYNTAX
Definition: parse.c:16539
#define T_NODE
#define ADD2HEAP(n, c, p)
Definition: parse.c:17355
#define rb_enc_name(enc)
VALUE rb_parser_end_seen_p(VALUE vparser)
Definition: ripper.c:17388
#define literal_concat(h, t)
Definition: parse.c:455
static void block_dup_check_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15121
int line_count
Definition: ripper.c:325
#define NEW_EVSTR(n)
#define NODE_ARGS
#define NEW_NEXT(s)
struct token_info token_info
stack_type parser_cmdarg_stack
Definition: ripper.c:298
#define RFLOAT_VALUE(v)
int yyresult
Definition: ripper.c:4930
yytype_int16 * yyssp
Definition: ripper.c:4920
#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:12954
#define tokspace(n)
Definition: parse.c:11446
VALUE rb_enc_from_encoding(rb_encoding *encoding)
Definition: encoding.c:103
#define NEW_NIL()
#define token_info_push(token)
Definition: ripper.c:737
Real * a
Definition: bigdecimal.c:1196
static ID * local_tbl_gen(struct parser_params *)
Definition: parse.c:15997
#define NODE_ENSURE
VALUE rb_eTypeError
Definition: error.c:516
#define rb_enc_isalnum(c, enc)
#define rb_warnI(fmt, a)
Definition: parse.c:695
#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:722
long(* rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len)
Definition: ripper.c:13115
#define NEW_ZARRAY()
st_table * names
Definition: encoding.c:53
#define rb_enc_prev_char(s, p, e, enc)
VALUE enc
Definition: tcltklib.c:10310
#define lvar_defined(id)
Definition: parse.c:580
VALUE rb_ary_push(VALUE ary, VALUE item)
Definition: array.c:822
NODE * kw_args
Definition: ripper.y:519
#define current_enc
Definition: parse.c:401
#define lex_pbeg
Definition: parse.c:388
Definition: ripper.y:99
unsigned long int yylno
Definition: ripper.c:4533
#define MAX_WORD_LENGTH
Definition: lex.c:43
VALUE rb_eEncodingError
Definition: error.c:522
#define subnodes(n1, n2)
return yyd
Definition: ripper.c:4631
#define yydebug
Definition: parse.c:402
#define TYPE(x)
struct RBasic basic
Definition: ripper.y:843
#define YYSTACK_BYTES(N)
Definition: parse.c:1091
#define nd_term(node)
Definition: parse.c:597
unsigned short int yytype_uint16
Definition: ripper.c:943
static int parser_yylex(struct parser_params *parser)
Definition: parse.c:13288
#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:471
#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:14843
yytype_int16 * yyss
Definition: ripper.c:4919
#define NEW_MATCH2(n1, n2)
VALUE op_sym[tLAST_OP_ID]
Definition: ripper.c:16519
VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline)
Definition: re.c:2525
NIL_P(eventloop_thread)
Definition: tcltklib.c:4067
#define T_ARRAY
VALUE debug_lines
Definition: ripper.c:338
static int parser_regx_options(struct parser_params *)
Definition: parse.c:12366
VALUE rb_enc_str_new(const char *, long, rb_encoding *)
Definition: string.c:439
#define warn_balanced(op, syn)
Definition: ripper.c:13372
#define NEW_LAMBDA(a, b)
ID id
Definition: parse.h:166
#define nd_plen
#define NEW_POSTEXE(b)
#define NEW_STR(s)
VALUE var
Definition: tcltklib.c:5516
#define NODE_EVSTR
static VALUE coverage(VALUE fname, int n)
Definition: parse.c:11715
#define xfree
static void set_file_encoding(struct parser_params *parser, const char *str, const char *send)
Definition: parse.c:13200
static NODE * newline_node(NODE *)
Definition: parse.c:14605
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
Definition: vm_eval.c:773
#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:1788
#define RE_OPTION_ONCE
Definition: parse.c:582
#define T_HASH
Definition: ripper.y:109
static const yytype_uint16 yyprhs[]
Definition: parse.c:1200
return Qtrue
Definition: tcltklib.c:9609
#define block_dup_check(n1, n2)
Definition: parse.c:442
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:15944
#define YY_SYMBOL_PRINT(Title, Type, Value, Location)
Definition: ripper.c:4410
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:177
#define attrset(node, id)
Definition: parse.c:490
#define YYPOPSTACK(N)
Definition: ripper.c:4944
#define T_FILE
int pre_args_num
Definition: ripper.y:511
primary_value operation2 command_args prec tLOWEST
Definition: ripper.y:1402
#define new_const_op_assign(lhs, op, rhs)
Definition: parse.c:501
#define NEW_CONST(v)
int parser_toksiz
Definition: ripper.c:310
int rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc)
Definition: encoding.c:886
NODE * kw_rest_arg
Definition: ripper.y:520
#define NODE_STR
ID last_id
Definition: ripper.c:16512
static size_t parser_memsize(const void *ptr)
Definition: parse.c:17235
#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:15864
Definition: ripper.y:112
#define NEW_DVAR(v)
void(* rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val)
Definition: ripper.c:13116
static struct @118 op_tbl[]
#define lex_pend
Definition: parse.c:390
static NODE * gettable_gen(struct parser_params *, ID)
Definition: parse.c:14906
r
Definition: bigdecimal.c:1210
#define nd_paren(node)
Definition: parse.c:599
#define cmdarg_stack
Definition: parse.c:371
static struct symbols global_symbols
#define is_class_id(id)
Definition: parse.c:116
#define ID_LOCAL
#define ruby_sourcefile
Definition: compile.c:424
Definition: ripper.y:82
#define NODE_XSTR
static NODE * cond0(struct parser_params *, NODE *)
Definition: parse.c:15639
Definition: ripper.y:107
#define STR_NEW0()
Definition: parse.c:359
#define NEW_CVASGN(v, val)
#define NODE_BLOCK_PASS
#define numberof(array)
Definition: parse.c:92
#define reg_compile(str, options)
Definition: parse.c:512
int state
Definition: tcltklib.c:1461
#define ISDIGIT(c)
static int local_var_gen(struct parser_params *, ID)
Definition: parse.c:16029
#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:14872
#define NEW_MASGN(l, r)
ID block_arg
Definition: ripper.y:517
#define ENCODING_IS_ASCII8BIT(obj)
#define InitVM(ext)
int yytoken
Definition: ripper.c:4932
ID rb_check_id(volatile VALUE *namep)
Returns ID for the given name if it is interned already, or 0.
Definition: ripper.c:17100
int yystate
Definition: ripper.c:4906
ID rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc)
Definition: ripper.c:17147
struct RNode * node
Definition: ripper.y:244
rb_encoding * rb_utf8_encoding(void)
Definition: encoding.c:1166
#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:16116
VALUE tbl
Definition: tkutil.c:1279
static NODE * new_yield_gen(struct parser_params *, NODE *)
Definition: parse.c:15743
#define RE_OPTION_ENCODING_NONE(o)
Definition: parse.c:586
#define NEW_LVAR(v)
#define YYNTOKENS
Definition: parse.c:1141
VALUE VALUE args
Definition: tcltklib.c:2560
static char * parser_tokspace(struct parser_params *parser, int n)
Definition: parse.c:12081
VALUE klass
Definition: ripper.y:701
#define rb_enc_isdigit(c, enc)
#define tokadd_string(f, t, p, n, e)
Definition: parse.c:11452
#define T_OBJECT
#define paren_nest
Definition: parse.c:373
#define ENC_CODERANGE_BROKEN
VALUE rb_sym_all_symbols(void)
Definition: ripper.c:17038
#define is_identchar(p, e, enc)
Definition: parse.c:11554
Definition: ripper.y:114
#define ID_INTERNAL
#define LONG2NUM(x)
VALUE rb_str_append(VALUE, VALUE)
Definition: string.c:2125
VALUE rb_str_new_frozen(VALUE)
Definition: string.c:713
#define RUBY_DTRACE_PARSE_BEGIN(arg0, arg1)
Definition: probes.h:68
Definition: ripper.y:96
int pos
Definition: ripper.c:183
VALUE parser_ruby_sourcefile_string
Definition: ripper.c:329
#define NEW_FOR(v, i, b)
static void parser_heredoc_restore(struct parser_params *parser, NODE *here)
Definition: parse.c:12779
#define NEW_CLASS(n, b, s)
static NODE * remove_begin(NODE *)
Definition: parse.c:15437
static int is_global_name_punct(const char c)
Definition: parse.c:12615
#define YYID(n)
Definition: ripper.c:989
static struct st_hash_type symhash
Definition: parse.c:16432
#define NODE_GASGN
int rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
Definition: ripper.c:16730
#define NEW_SPLAT(a)
#define ID_SCOPE_SHIFT
flag
Definition: tcltklib.c:2047
VALUE rb_parser_set_yydebug(VALUE self, VALUE flag)
Definition: ripper.c:17433
#define NEW_PRELUDE(p, b)
d
Definition: strlcat.c:58
#define lex_lastline
Definition: parse.c:386
gz lineno
Definition: zlib.c:2268
#define NEW_ITER(a, b)
#define head
Definition: st.c:107
#define tok_hex(numlen)
Definition: parse.c:11448
const char * fmt
Definition: tcltklib.c:841
#define ENCODING_GET(obj)
int parser_yydebug
Definition: ripper.c:332
st_table * id_str
Definition: ripper.c:16514
static const yytype_int16 yytable[]
Definition: parse.c:2039
NODE * parser_eval_tree
Definition: ripper.c:337
NODE * parser_deferred_nodes
Definition: ripper.c:320
#define NEW_GVAR(v)
int yyi
Definition: ripper.c:4530
int yynerrs
Definition: ripper.c:4904
void rb_name_error(ID id, const char *fmt,...)
Definition: error.c:904
command_asgn lhs
Definition: ripper.y:1271
static int dyna_in_block_gen(struct parser_params *)
Definition: parse.c:16110
static const rb_data_type_t parser_data_type
Definition: parse.c:11857
Definition: ripper.y:240
#define YYSYNTAX_ERROR
#define YYABORT
Definition: parse.c:4313
Definition: parse.h:159
int has_shebang
Definition: ripper.c:326
nd_args
Definition: parse.y:1383
#define NEW_DSTR(s)
#define nd_set_type(n, t)
#define logop(type, node1, node2)
Definition: parse.c:426
static rb_encoding * must_be_ascii_compatible(VALUE s)
Definition: parse.c:11807
#define ISALPHA(c)
Definition: ruby.h:1636
#define MEMZERO(p, type, n)
static void dyna_pop_1(struct parser_params *parser)
Definition: parse.c:16078
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)
static NODE * new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
Definition: parse.c:15909
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
struct vtable * prev
Definition: ripper.c:185
int rb_is_const_id(ID id)
Definition: ripper.c:17047
int rb_is_instance_id(ID id)
Definition: ripper.c:17065
#define RUBY_DTRACE_PARSE_END(arg0, arg1)
Definition: probes.h:72
struct RString::@63::@64 heap
VALUE hash
Definition: tkutil.c:267
int rb_is_method_name(VALUE name)
Definition: ripper.c:17211
static void warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
Definition: parse.c:15559
YYSTYPE yyval
Definition: ripper.c:4935
Definition: ripper.y:110
#define toksiz
Definition: parse.c:383
Definition: ripper.y:97
#define NEW_OP_ASGN_AND(i, val)
rb_encoding * enc
Definition: ripper.c:330
#define parser_warning(node, mesg)
Definition: ripper.c:14718
static void parser_free(void *ptr)
Definition: parse.c:17218
static YYSIZE_T const char * yystr
Definition: parse.c:4597
#define NODE_LVAR
enum lex_state_e parser_lex_state
Definition: ripper.c:296
#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
NODE * rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
Definition: ripper.c:11976
#define void_expr(node)
Definition: parse.c:436
#define NEW_KW_ARG(i, v)
BDIGIT m
Definition: bigdecimal.c:5106
static void parser_initialize(struct parser_params *parser)
Definition: parse.c:17139
#define scan_hex(s, l, e)
Definition: util.h:54
static struct vtable * dyna_push_gen(struct parser_params *)
Definition: parse.c:16067
static void parser_set_encode(struct parser_params *parser, const char *name)
Definition: parse.c:12981
return Qfalse
Definition: tcltklib.c:6778
#define FIXNUM_P(f)
#define rb_intern_str(string)
Definition: generator.h:17
#define local_id(id)
Definition: parse.c:562
#define here_document(n)
Definition: parse.c:11455
#define lex_goto_eol(parser)
Definition: parse.c:11986
int rb_char_to_option_kcode(int c, int *option, int *kcode)
Definition: re.c:301
#define TypedData_Get_Struct(obj, type, data_type, sval)
void rb_compile_error_append(const char *fmt,...)
Definition: error.c:155
void rb_compile_error_with_enc(const char *file, int line, void *enc, const char *fmt,...)
Definition: error.c:131
#define RARRAY_LEN(a)
#define NODE_WHEN
#define Qnil
Definition: tcltklib.c:1895
#define StringValuePtr(v)
#define YYTRANSLATE(YYX)
Definition: parse.c:1153
#define val
Definition: tcltklib.c:1948
int rb_ispunct(int c)
Definition: encoding.c:1890
#define tokidx
Definition: parse.c:382
VALUE rb_eRuntimeError
Definition: error.c:515
#define match_op(node1, node2)
Definition: parse.c:504
static enum node_type nodetype(NODE *node)
Definition: parse.c:14593
#define NEW_STRTERM(func, term, paren)
Definition: parse.c:12571
const rb_data_type_t * parent
Definition: ripper.y:969
#define NEW_RESCUE(b, res, e)
#define RARRAY(obj)
#define yylval
Definition: ripper.c:11524
VALUE rb_parser_encoding(VALUE vparser)
Definition: ripper.c:17403
#define CMDARG_PUSH(n)
Definition: parse.c:176
#define reg_named_capture_assign(regexp, match)
Definition: parse.c:518
union RNode::@81 u2
#define arg_concat(h, t)
Definition: parse.c:453
struct parser_params * parser
Definition: ripper.c:16299
static void magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
Definition: parse.c:13029
#define RE_OPTION_MASK
Definition: parse.c:587
#define NODE_YIELD
#define NEW_NODE(t, a0, a1, a2)
#define NEW_LIST(a)
#define NEW_ENSURE(b, en)
RUBY_EXTERN VALUE rb_mKernel
Definition: ripper.y:1414
static VALUE char * str
Definition: tcltklib.c:3546
#define NODE_FLIP2
#define NODE_BLOCK
#define ID_INSTANCE
static int e_option_supplied(struct parser_params *parser)
Definition: parse.c:11731
NODE * rb_compile_string(const char *f, VALUE s, int line)
Definition: ripper.c:11969
#define NEW_BLOCK(a)
static struct vtable * vtable_alloc(struct vtable *prev)
Definition: parse.c:215
int yyrule
Definition: ripper.c:4527
static int rb_str_symname_type(VALUE name, unsigned int allowed_atttset)
Definition: parse.c:16646
#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 NODE_HEREDOC
Definition: parse.c:591
int rb_ascii8bit_encindex(void)
Definition: encoding.c:1160
int flags
Definition: tcltklib.c:3022
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
va_end(args)
static int is_special_global_name(const char *m, const char *e, rb_encoding *enc)
Definition: parse.c:16502
static const yytype_uint16 yyrline[]
Definition: parse.c:1463
void rb_gc_mark(VALUE)
Definition: gc.c:2600
#define ID_GLOBAL
YYSIZE_T yymsg_alloc
Definition: ripper.c:4941
#define IS_SPCARG(c)
Definition: parse.c:13270
void rb_define_const(VALUE, const char *, VALUE)
Definition: variable.c:2204
#define set_yylval_id(x)
Definition: parse.c:11463
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
static char *char * yydest
Definition: parse.c:4621
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
Definition: class.c:503
static VALUE VALUE obj
Definition: tcltklib.c:3157
#define RSTRING_LEN(str)
static int reg_fragment_check_gen(struct parser_params *, VALUE, int)
Definition: parse.c:16194
#define INT2FIX(i)
#define YYSTACK_ALLOC
Definition: parse.c:1044
struct vtable * vars
Definition: parse.h:168
int idx
Definition: tcltklib.c:9715
static NODE * dsym_node_gen(struct parser_params *, NODE *)
Definition: parse.c:15837
#define STR_FUNC_REGEXP
Definition: parse.c:11953
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:15893
#define k__END__
Definition: eventids2.c:9
#define ISALNUM(c)
Definition: ruby.h:1635
#define YYDPRINTF(Args)
Definition: ripper.c:4404
return yylen
Definition: ripper.c:4603
static void no_blockarg(struct parser_params *parser, NODE *node)
Definition: parse.c:15718
#define T_STRING
static struct magic_comment magic_comments[]
Definition: parse.c:13065
#define MBCLEN_CHARFOUND_P(ret)
static double one(void)
Definition: isinf.c:52
static NODE * splat_array(NODE *)
Definition: parse.c:15233
int yyn
Definition: ripper.c:4929
static void parser_mark(void *ptr)
Definition: parse.c:17192
unsigned char OnigUChar
Definition: ripper.y:114
#define NODE_ARGSCAT
#define NODE_COLON2
NODE * rb_parser_append_print(VALUE vparser, NODE *node)
Definition: ripper.c:16408
static void parser_tokadd(struct parser_params *parser, int c)
Definition: parse.c:12093
#define nd_set_line(n, l)
#define is_local_id(id)
Definition: parse.c:111
#define LVAR_USED
Definition: parse.c:15072
#define xmalloc
#define xrealloc
static void ripper_init_eventids1(void)
Definition: eventids1.c:134
static int sym_check_asciionly(VALUE str)
Definition: parse.c:16672
yytype_int16 yyss_alloc
Definition: ripper.c:1082
static ID intern_str(VALUE str)
Definition: parse.c:16714
#define STR_FUNC_INDENT
Definition: parse.c:11956
#define arg_append(h, t)
Definition: parse.c:451
static VALUE lex_get_str(struct parser_params *parser, VALUE s)
Definition: parse.c:11817
static int assign_in_cond(struct parser_params *parser, NODE *node)
Definition: parse.c:15532
#define op_tbl_count
Definition: parse.c:16415
#define NEW_ARGS_AUX(r, b)
#define tokadd(c)
Definition: parse.c:11447
#define no_digits()
#define TypedData_Wrap_Struct(klass, data_type, sval)
#define peek_n(c, n)
Definition: parse.c:11989
#define RSTRING_NOEMBED
#define YYFINAL
Definition: parse.c:1136
#define ISUPPER(c)
Definition: ruby.h:1633
static void void_expr_gen(struct parser_params *, NODE *)
Definition: parse.c:15334
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:16217
#define RUBY_FUNC_EXPORTED
Definition: defines.h:184
unsigned char buf[MIME_BUF_SIZE]
Definition: nkf.c:4308
VALUE rb_suppress_tracing(VALUE(*func)(VALUE), VALUE arg)
Definition: vm_trace.c:345
VALUE rb_enc_associate_index(VALUE obj, int idx)
Definition: encoding.c:748
int rb_parse_in_main(void)
Definition: compile.c:5882
static VALUE debug_lines(VALUE fname)
Definition: parse.c:11699
#define YYCASE_(N, S)
int err
Definition: win32.c:87
#define IS_AFTER_OPERATOR()
Definition: parse.c:13273
#define dyna_pop(node)
Definition: ripper.c:569
#define YYACCEPT
Definition: ripper.c:4312
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:12286
#define DBL2NUM(dbl)
#define ALLOCA_N(type, n)
#define IDSET_ATTRSET_FOR_INTERN
Definition: parse.c:16540
#define ENC_CODERANGE_UNKNOWN
void rb_gc_mark_symbols(void)
Definition: ripper.c:16574
#define set_yylval_num(x)
Definition: parse.c:11462
long cnt
Definition: ripper.y:262
ID token
Definition: ripper.c:16481
static int VALUE key
Definition: tkutil.c:265
#define YY_REDUCE_PRINT(Rule)
Definition: ripper.c:4547
YYSTYPE yyvsa[YYINITDEPTH]
Definition: ripper.c:4923
Definition: ripper.y:116
NODE * rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
Definition: ripper.c:16440
Definition: util.c:791
NODE * rb_compile_cstr(const char *f, const char *s, int len, int line)
Definition: ripper.c:11989
#define parser_encoding_name()
Definition: parse.c:11551
token_info * parser_token_info
Definition: ripper.c:343
Definition: ripper.y:123
#define new_op_assign(lhs, op, rhs)
Definition: parse.c:544
int column
Definition: ripper.c:273
#define YYSIZE_T
Definition: parse.c:962
#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:14692
int yyerrstatus
Definition: ripper.c:4908
VALUE rb_str_buf_cat(VALUE, const char *, long)
Definition: string.c:1951
void * rb_parser_malloc(struct parser_params *parser, size_t size)
Definition: ripper.c:17449
VALUE rb_str_dup(VALUE)
Definition: string.c:946
static const yytype_int16 yycheck[]
Definition: parse.c:3120
static int literal_node(NODE *node)
Definition: parse.c:15618
#define DEF_EXPR(n)
Definition: ripper.c:141
static int dvar_curr_gen(struct parser_params *, ID)
Definition: parse.c:16147
#define tHEREDOC_END
Definition: eventids2.c:8
#define rb_long2int(n)
YYSTYPE yyvs_alloc
Definition: ripper.c:1083
#define ID_CLASS
#define NEW_LASGN(v, val)
node_type
Definition: ripper.y:23
#define flush_string_content(enc)
Definition: parse.c:12590
VALUE rb_obj_as_string(VALUE)
Definition: string.c:895
VALUE * argv
Definition: tcltklib.c:1970
goto yysetstate
Definition: ripper.c:4969
#define NODE_MEMO
#define NEW_OPT_ARG(i, v)
VALUE rb_hash_aset(VALUE, VALUE, VALUE)
#define command_start
Definition: ripper.c:392
string_type
Definition: ripper.c:12048
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
const int id
Definition: nkf.c:209
int st_foreach(st_table *, int(*)(ANYARGS), st_data_t)
Definition: st.c:1006
#define ret_args(node)
Definition: parse.c:475
#define NEW_SCLASS(r, b)
static int parser_yyerror(struct parser_params *, const char *)
Definition: parse.c:11634
#define RUBY_DTRACE_PARSE_END_ENABLED()
Definition: probes.h:71
#define COND_LEXPOP()
Definition: parse.c:173
ID rest_arg
Definition: ripper.y:516
static const yytype_int16 yypgoto[]
Definition: parse.c:2011
int errno
#define TRUE
Definition: nkf.h:175
int rb_symname_p(const char *name)
Definition: ripper.c:16618
static int parser_tokadd_mbchar(struct parser_params *parser, int c)
Definition: parse.c:12409
q result
Definition: tcltklib.c:7069
#define NODE_NIL
VALUE rb_thread_current(void)
Definition: thread.c:2355
#define COND_POP()
Definition: parse.c:172
#define TOK_INTERN(mb)
Definition: parse.c:363
#define NODE_ATTRASGN
#define token_info_pop(token)
Definition: ripper.c:738
VALUE rb_range_new(VALUE, VALUE, int)
Definition: range.c:67
VALUE rb_sprintf(const char *format,...)
Definition: sprintf.c:1275
volatile VALUE value
Definition: tcltklib.c:9441
#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:408
#define rb_node_newnode(type, a1, a2, a3)
Definition: ripper.c:421
#define ruby_sourcefile_string
Definition: parse.c:400
#define rb_warnS(fmt, a)
Definition: parse.c:696
goto yynewstate
Definition: ripper.c:5111
#define mixed_error(enc1, enc2)
#define NEW_DOT2(b, e)
#define NODE_MASGN
#define T_REGEXP
#define const
Definition: strftime.c:102
int rb_is_attrset_name(VALUE name)
Definition: ripper.c:17199
#define NEW_DASGN(v, val)
register char * s
Definition: os2.c:56
#define value_expr(node)
Definition: parse.c:434
#define NEW_VALIAS(n, o)
int rb_enc_symname_p(const char *name, rb_encoding *enc)
Definition: ripper.c:16624
#define NEW_POSTARG(i, v)
#define rb_warning0(fmt)
Definition: parse.c:698
#define CONST_ID(var, str)
#define NEW_ERRINFO()
#define reg_fragment_setenc(str, options)
Definition: parse.c:514
#define malloc
Definition: ripper.c:98
static int value_expr_gen(struct parser_params *, NODE *)
Definition: parse.c:15272
static const yytype_int16 yyrhs[]
Definition: parse.c:1268
void Init_sym(void)
Definition: ripper.c:16555
#define NODE_CONST
static void yytype_int16 * yybottom
Definition: parse.c:4495
VP_EXPORT void
Definition: bigdecimal.c:5104
static int parser_whole_match_p(struct parser_params *parser, const char *eos, long len, int indent)
Definition: parse.c:12796
static const char * magic_comment_marker(const char *str, long len)
Definition: parse.c:13073
#define rb_warn0(fmt)
Definition: parse.c:694
int rb_is_local_id(ID id)
Definition: ripper.c:17077
rb_magic_comment_length_t length
Definition: ripper.c:13152
int parser_in_def
Definition: ripper.c:303
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
Definition: class.c:1574
#define NEW_SUPER(a)
static const yytype_uint8 yytranslate[]
Definition: parse.c:1157
#define new_bv(id)
Definition: parse.c:551
#define YYEMPTY
Definition: parse.c:4309
#define NEW_COLON2(c, i)
VALUE parser_cur_mid
Definition: ripper.c:306
short int yytype_int16
Definition: ripper.c:949
VALUE rb_io_gets(VALUE)
Definition: io.c:3122
static void Init_id(void)
Definition: ripper.y:15
static char * parser_newtok(struct parser_params *parser)
Definition: parse.c:12065
long parser_lex_gets_ptr
Definition: ripper.c:321
goto yyreturn
Definition: ripper.c:11466
#define NODE_GVAR
#define NODE_CDECL
static void fixup_nodes(NODE **)
Definition: parse.c:15571
rb_encoding * rb_usascii_encoding(void)
Definition: encoding.c:1181
#define NEW_HASH(a)
Definition: ripper.y:94
unsigned char yytype_uint8
Definition: ripper.c:928
#define list_concat(h, t)
Definition: parse.c:449
union RNode::@82 u3
#define dyna_in_block()
Definition: parse.c:571
#define dyna_var(id)
Definition: parse.c:572
#define RB_GC_GUARD(v)
#define STR_FUNC_ESCAPE
Definition: parse.c:11951
#define NODE_LIT
#define rb_reserved_word(str, len)
Definition: lex.c:37
int type
Definition: tcltklib.c:111
int id[2]
Definition: lex.c:33
#define heredoc_restore(n)
Definition: parse.c:11457
#define NEW_UNTIL(c, b, n)
#define T_FIXNUM
#define NEW_MATCH3(r, n2)
#define yyerror(msg)
Definition: parse.c:366
int argc
Definition: tcltklib.c:1969
VALUE rb_str_buf_new(long)
Definition: string.c:777
#define peek(c)
Definition: parse.c:11988
stack_type parser_cond_stack
Definition: ripper.c:297
#define IS_lex_state_for(x, ls)
Definition: parse.c:157
NODE * post_init
Definition: ripper.y:509
static NODE * arg_append_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15215
static void ripper_init_eventids2(void)
Definition: eventids2.c:64
int rb_const_defined_at(VALUE, ID)
Definition: variable.c:2109
int rb_is_junk_id(ID id)
Definition: ripper.c:17083
#define heredoc_identifier()
Definition: parse.c:11456
int parser_heredoc_end
Definition: ripper.c:318
#define ruby_sourceline
Definition: ripper.c:398
Definition: ripper.y:101
ID rb_id_attrset(ID id)
Definition: ripper.c:15230
static VALUE parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
Definition: parse.c:11970
Definition: ripper.y:72
#define ripper_flush(p)
Definition: parse.c:11484
#define dsym_node(node)
Definition: parse.c:480
#define regx_options()
Definition: parse.c:11451
mlhs_head tSTAR
Definition: ripper.y:1543
int post_args_num
Definition: ripper.y:512
static int parser_magic_comment(struct parser_params *parser, const char *str, long len)
Definition: parse.c:13106
int rb_is_global_id(ID id)
Definition: ripper.c:17059
static int arg_var_gen(struct parser_params *, ID)
Definition: parse.c:16022
#define NEW_SELF()
#define YYUSE(e)
Definition: ripper.c:982
#define call_bin_op(recv, id, arg1)
Definition: parse.c:464
#define rb_warn4S(file, line, fmt, a)
Definition: parse.c:697
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:11737
#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:686
#define assignable_result(x)
short int yytype_int8
Definition: ripper.c:937
static int parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
Definition: parse.c:12293
static int parser_tokadd_string(struct parser_params *, int, int, int, long *, rb_encoding **)
Definition: parse.c:12438
VALUE rb_reg_check_preprocess(VALUE)
Definition: re.c:2299
VALUE flags
Definition: ripper.y:241
expr ripper_intern("and")
yytype_int16 * yytop
Definition: ripper.c:4496
const char * token
Definition: ripper.c:271
ruby_verbose
Definition: tcltklib.c:5817
static NODE * assignable_gen(struct parser_params *, ID, NODE *)
RUBY_EXTERN VALUE rb_cString
Definition: ripper.y:1456
Real * b
Definition: bigdecimal.c:1196
#define NEW_COLON3(i)
#define dvar_defined_get(id)
Definition: parse.c:575
#define RUBY_DTRACE_PARSE_BEGIN_ENABLED()
Definition: probes.h:67
#define NEW_CASE(h, b)
return ptr
Definition: tcltklib.c:784
#define free(x)
Definition: dln.c:50
static NODE * new_args_gen(struct parser_params *, NODE *, NODE *, ID, NODE *, NODE *)
Definition: parse.c:15790
VpDivd * c
Definition: bigdecimal.c:1219
#define is_global_id(id)
Definition: parse.c:112
goto yyerrlab1
Definition: ripper.c:11396
#define lex_input
Definition: parse.c:385
#define STR_FUNC_QWORDS
Definition: parse.c:11954
static int vtable_included(const struct vtable *tbl, ID id)
Definition: parse.c:254
#define NODE_DASGN
int parser_in_defined
Definition: ripper.c:307
VALUE msg
Definition: tcltklib.c:846
#define ruby_eval_tree
Definition: parse.c:405
#define NEW_BACK_REF(n)
VALUE rb_vsprintf(const char *, va_list)
Definition: sprintf.c:1269
int parser_class_nest
Definition: ripper.c:299
#define T_BIGNUM
static VALUE lex_io_gets(struct parser_params *parser, VALUE io)
Definition: parse.c:11913
#define MEMCPY(p1, p2, type, n)
#define parser_is_identchar()
Definition: parse.c:11555
Definition: ripper.y:122
gz end
Definition: zlib.c:2270
goto yydefault
Definition: ripper.c:5061
#define NEW_IF(c, t, e)
#define ruby__end__seen
Definition: parse.c:397
#define dvar_curr(id)
Definition: parse.c:577
#define set_yylval_node(x)
Definition: parse.c:11466
static void const char * yymsg
Definition: parse.c:4833
nd_iter
Definition: parse.y:1393
static void vtable_free(struct vtable *tbl)
Definition: parse.c:227
#define NEW_GASGN(v, val)
yydestruct("Cleanup: discarding lookahead", yytoken,&yylval, parser)
YYSIZE_T yystacksize
Definition: ripper.c:4927
#define NEW_ARGSPUSH(a, b)
int rb_is_const_name(VALUE name)
Definition: ripper.c:17175
int rb_is_local_name(VALUE name)
Definition: ripper.c:17205
static int rb_enc_symname_type(const char *name, long len, rb_encoding *enc, unsigned int allowed_atttset)
Definition: parse.c:16543
arg
Definition: ripper.y:1317
#define reg_fragment_check(str, options)
Definition: parse.c:516
VALUE src
Definition: tcltklib.c:7952
yy_symbol_value_print(yyoutput, yytype, yyvaluep, parser)
VALUE rb_str_cat(VALUE, const char *, long)
Definition: string.c:1967
#define NEW_XSTR(s)
Definition: ripper.y:111
#define arg_ambiguous()
Definition: parse.c:12940
#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:15447
#define NEW_DEFS(r, i, a, d)
void rb_gc_mark_parser(void)
Definition: ripper.c:16403
int nonspc
Definition: ripper.c:274
int size
Definition: encoding.c:52
#define YYSTACK_ALLOC_MAXIMUM
Definition: parse.c:1047
#define newtok()
Definition: parse.c:11445
#define f
#define set_yylval_name(x)
Definition: parse.c:11464
#define SYMBOL_P(x)
char yymsgbuf[128]
Definition: ripper.c:4939
static NODE * reg_named_capture_assign_gen(struct parser_params *parser, VALUE regexp, NODE *match)
Definition: parse.c:16257
#define NODE_FLIP3
static void parser_pushback(struct parser_params *parser, int c)
Definition: parse.c:12048
void rb_parser_free(struct parser_params *parser, void *ptr)
Definition: ripper.c:17489
#define Qundef
int parser_tokidx
Definition: ripper.c:309
static const yytype_uint16 yydefact[]
Definition: parse.c:1762
#define NODE_DVAR
#define lpar_beg
Definition: parse.c:374
static int parser_here_document(struct parser_params *, NODE *)
Definition: parse.c:12826
#define COND_PUSH(n)
Definition: parse.c:171
#define parser_warn(node, mesg)
Definition: ripper.c:14725
static NODE * ret_args_gen(struct parser_params *, NODE *)
Definition: parse.c:15726
Definition: ripper.y:92
Definition: ripper.y:127
VALUE coverage
Definition: ripper.c:339
int t
Definition: ripper.c:14654
void rb_set_errinfo(VALUE err)
Definition: eval.c:1429
#define lex_gets_ptr
Definition: parse.c:394
return tOP_ASGN
Definition: ripper.y:7668
#define rb_enc_isspace(c, enc)
static void dyna_pop_gen(struct parser_params *, const struct vtable *)
Definition: parse.c:16096
NODE * parser_lex_strterm
Definition: ripper.c:295
const char * name
Definition: ripper.c:13150
#define NEW_IVAR(v)
top_stmts dispatch0(stmts_new)
static void local_pop_gen(struct parser_params *)
Definition: parse.c:15981
#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:12425
#define NODE_ZARRAY
#define lvtbl
Definition: parse.c:396
#define new_attr_op_assign(lhs, type, attr, op, rhs)
Definition: parse.c:499
const char * yys
Definition: ripper.c:4626
#define aryset(node1, node2)
Definition: parse.c:488
#define NEW_BEGIN(b)
NODE * pre_init
Definition: ripper.y:508
#define NEW_FCALL(m, a)
#define NODE_CVAR
#define NEW_SCOPE(a, b)
#define list_append(l, i)
Definition: parse.c:447
st_index_t rb_str_hash(VALUE)
Definition: string.c:2248
#define NEW_OP_ASGN2(r, i, o, val)
#define tokaddmbc(c, enc)
Definition: parse.c:11454
#define NODE_BREAK
#define cur_mid
Definition: parse.c:379
#define STR_NEW3(p, n, e, func)
Definition: parse.c:361
#define IS_BEG()
Definition: parse.c:13269
rb_magic_comment_setter_t func
Definition: ripper.c:13151
static const yytype_int16 yypact[]
Definition: parse.c:1900
#define dvar_defined(id)
Definition: parse.c:574
int parser_lpar_beg
Definition: ripper.c:301
#define ESCAPE_CONTROL
Definition: parse.c:12191
void rb_compile_warning(const char *file, int line, const char *fmt,...)
Definition: error.c:190
st_table * sym_id
Definition: ripper.c:16513
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:15565
#define yypact_value_is_default(yystate)
Definition: parse.c:3114
#define ALLOC_N(type, n)
#define LONG2FIX(i)
#define NODE_FL_NEWLINE
static int symbols_i(VALUE sym, ID value, VALUE ary)
Definition: parse.c:16925
#define RBASIC(obj)
struct local_vars * prev
Definition: ripper.c:192
#define NEW_VCALL(m)
#define IS_END()
Definition: parse.c:13268
static void parser_prepare(struct parser_params *parser)
Definition: parse.c:13243
static struct parser_params * parser_new(void)
Definition: parse.c:17273
struct vtable * vars
Definition: ripper.c:190
#define new_args(f, o, r, p, t)
Definition: parse.c:469
static void rb_backref_error_gen(struct parser_params *, NODE *)
Definition: parse.c:15177
klass
Definition: tcltklib.c:3503
#define INT2NUM(x)
#define YYINITDEPTH
Definition: parse.c:4568
static NODE * logop_gen(struct parser_params *, enum node_type, NODE *, NODE *)
Definition: parse.c:15703
goto yybackup
Definition: ripper.c:5048
#define NODE_DSTR
static void void_stmts_gen(struct parser_params *, NODE *)
Definition: parse.c:15423
#define ENC_SINGLE(cr)
Definition: parse.c:362
struct rb_encoding_entry * list
Definition: encoding.c:50
keyword_BEGIN
Definition: ripper.y:1030
#define NEW_RETRY()
void * rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
Definition: ripper.c:17459
static const yytype_int16 yydefgoto[]
Definition: parse.c:1873
#define STRNCASECMP(s1, s2, n)
VALUE rb_make_backtrace(void)
Definition: vm_backtrace.c:772
static NODE * parser_compile_string(volatile VALUE vparser, VALUE fname, VALUE s, int line)
Definition: parse.c:11860
#define parse_string(n)
Definition: parse.c:11453
#define NEWHEAP()
Definition: parse.c:17354
static int yylex(void *, void *)
int linenum
Definition: ripper.c:272
#define NEW_CVAR(v)
#define YYEOF
Definition: parse.c:4310
#define tEMBDOC
Definition: eventids2.c:4
Definition: ripper.y:121
#define NODE_BEGIN
gz io
Definition: zlib.c:2261
char * parser_tokenbuf
Definition: ripper.c:308
#define node_assign(node1, node2)
Definition: parse.c:495
#define get_id(id)
Definition: parse.c:520
VALUE rb_cArray
Definition: array.c:29
#define BEG(no)
Definition: re.c:25
#define NEW_OP_ASGN1(p, id, a)
#define id_type(id)
Definition: parse.c:118
int parser_tokline
Definition: ripper.c:311
Definition: ripper.y:79
#define YYTERROR
Definition: parse.c:4351
static int parser_parse_string(struct parser_params *, NODE *)
Definition: parse.c:12658
#define tok()
Definition: parse.c:12060
#define cond(node)
Definition: parse.c:424
VALUE rb_ary_new2(long capa)
Definition: array.c:417
#define ruby_eval_tree_begin
Definition: parse.c:406
#define is_instance_id(id)
Definition: parse.c:113
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:15696
int rb_is_class_id(ID id)
Definition: ripper.c:17053
#define rb_safe_level()
Definition: tcltklib.c:94
VALUE rb_parser_new(void)
Definition: ripper.c:17374
static NODE * list_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:14712
struct parser_params * parser
Definition: ripper.c:4437
#define NODE_CVASGN
Definition: ripper.c:181
#define NEW_CDECL(v, val, path)
static int is_private_local_id(ID name)
Definition: parse.c:15062
#define lex_p
Definition: parse.c:389
static int comment_at_top(struct parser_params *parser)
Definition: parse.c:13013
const char * parser_lex_p
Definition: ripper.c:316
#define nd_lit
static void dispose_string(VALUE str)
Definition: parse.c:12402
static int parser_nextc(struct parser_params *parser)
Definition: parse.c:11992
#define rb_enc_asciicompat(enc)
lex_state_e
Definition: ripper.c:140
#define read_escape(flags, e)
Definition: parse.c:11449
#define parser_isascii()
Definition: parse.c:11557
static const char *const yytname[]
Definition: parse.c:1534
#define NUM2INT(x)
#define nd_head
int rb_is_instance_name(VALUE name)
Definition: ripper.c:17193
int parser_ruby_sourceline
Definition: ripper.c:328
const char * rb_id2name(ID id)
Definition: ripper.c:17006
#define call_uni_op(recv, id)
Definition: parse.c:466
#define NODE_CALL
#define rb_errinfo()
Definition: tcltklib.c:89
static ID register_symid_str(ID, VALUE)
Definition: parse.c:16663
#define STR_FUNC_SYMBOL
Definition: parse.c:11955
#define rb_enc_isupper(c, enc)
#define DVARS_INHERIT
Definition: parse.c:196
int cnt
Definition: tcltklib.c:6148
static ID shadowing_lvar_gen(struct parser_params *, ID)
Definition: parse.c:15075
#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:11561
static NODE * yycompile(struct parser_params *parser, VALUE fname, int line)
Definition: parse.c:11797
#define arg_var(id)
Definition: parse.c:560
#define xcalloc
BDIGIT e
Definition: bigdecimal.c:5106
yychar
Definition: ripper.c:4960
#define is_junk_id(id)
Definition: parse.c:117
#define YY_STACK_PRINT(Bottom, Top)
Definition: ripper.c:4508
#define NEW_LIT(l)
#define rb_enc_isascii(c, enc)
int rb_str_hash_cmp(VALUE, VALUE)
Definition: string.c:2258
static void vtable_add(struct vtable *tbl, ID id)
Definition: parse.c:239
#define YYFPRINTF
Definition: ripper.c:4401
NODE * rb_parser_compile_string_path(volatile VALUE vparser, VALUE f, VALUE s, int line)
Definition: ripper.c:11982
VALUE opts
Definition: tcltklib.c:6145
static const yytype_uint16 yystos[]
Definition: parse.c:4197
static int is_static_content(NODE *node)
Definition: parse.c:15508
int is_ripper
Definition: ripper.c:289
unsigned long VALUE
Definition: ripper.y:104
options
Definition: tcltklib.c:4480
#define in_defined
Definition: parse.c:380
rb_encoding * rb_ascii8bit_encoding(void)
Definition: encoding.c:1151
int rb_is_junk_name(VALUE name)
Definition: ripper.c:17221
#define NODE_IVAR
return tSYMBEG
Definition: ripper.y:7642
#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:15113
static int parser_heredoc_identifier(struct parser_params *parser)
Definition: parse.c:12716
RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e-0x20+31)/32]
Definition: ripper.c:12683
YYSTYPE * yyvs
Definition: ripper.c:4924
static int parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp, int string_literal, int symbol_literal, int regexp_literal)
Definition: parse.c:12120
goto yyreduce
Definition: ripper.c:5121
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:14638
ID rb_intern3(const char *name, long len, rb_encoding *enc)
Definition: ripper.c:16782
#define NODE_DOT2
encp
Definition: crypt.c:564
#define ID_SCOPE_MASK
#define tokline
Definition: parse.c:384
#define ESCAPE_META
Definition: parse.c:12192
#define local_push(top)
Definition: parse.c:554
#define NODE_DREGX
#define NODE_IASGN
#define NEW_DEFN(i, a, d, p)
#define NODE_RETURN
#define snprintf
static void new_bv_gen(struct parser_params *, ID)
Definition: parse.c:15099
#define assignable(id, node)
Definition: parse.c:485
ID first_post_arg
Definition: ripper.y:514
void * rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
Definition: ripper.c:17469
#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:15602
#define ruby_debug_lines
Definition: parse.c:407
#define NODE_ARRAY
#define NODE_SPLAT
#define IS_ARG()
Definition: parse.c:13267
#define rb_intern(str)
static int parser_tok_hex(struct parser_params *parser, size_t *numlen)
Definition: parse.c:12103
#define new_evstr(n)
Definition: parse.c:458
int rb_parse_in_eval(void)
Definition: compile.c:5876
YYSTYPE const *const yyvaluep
Definition: ripper.c:4436
BDIGIT v
Definition: bigdecimal.c:5677
#define ENCODING_SET(obj, i)
int rb_memcicmp(const void *, const void *, long)
Definition: re.c:80
#define lex_eol_p()
Definition: parse.c:11987
#define tCOMMENT
Definition: eventids2.c:2
#define NEW_ZSUPER()
VALUE rb_filesystem_str_new_cstr(const char *)
Definition: string.c:614
ID rb_intern2(const char *name, long len)
Definition: ripper.c:16917
NODE * rb_compile_file(const char *f, VALUE file, int start)
Definition: ripper.c:12009
#define void_stmts(node)
Definition: parse.c:438
#define block_append(h, t)
Definition: parse.c:445
#define nd_line(n)
VALUE rb_parser_get_yydebug(VALUE self)
Definition: ripper.c:17418
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)
static NODE * literal_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:14753
const char * name
Definition: nkf.c:208
#define tIGNORED_NL
Definition: eventids2.c:1
NODE * rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
Definition: ripper.c:11996
VALUE rb_check_string_type(VALUE)
Definition: string.c:1509
#define yyerrok
Definition: parse.c:4307
#define REALLOC_N(var, type, n)
#define NODE_SCOPE
static NODE * call_uni_op_gen(struct parser_params *, NODE *, ID)
Definition: parse.c:14865
#define YYMAXDEPTH
Definition: parse.c:4579
static int literal_concat0(struct parser_params *, VALUE, VALUE)
Definition: parse.c:14736
#define in_def
Definition: parse.c:377
static struct kwtable * reserved_word(const char *, unsigned int)
int rb_enc_str_coderange(VALUE)
Definition: string.c:327
#define ISXDIGIT(c)
Definition: ruby.h:1638
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:13272
NODE * parser_eval_tree_begin
Definition: ripper.c:336
static int match(VALUE str, VALUE pat, VALUE hash, int(*cb)(VALUE, VALUE))
Definition: date_parse.c:273
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
Definition: class.c:1348
int retry
Definition: tcltklib.c:10150
static void parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
Definition: parse.c:13038
#define NODE_IASGN2
#define ULONG2NUM(x)
#define NODE_SELF
goto yyerrlab
Definition: ripper.c:5120
#define ifndef_ripper(x)
Definition: parse.c:687
#define SYM2ID(x)
#define YYLEX
Definition: parse.c:4393
static VALUE lex_getline(struct parser_params *parser)
Definition: parse.c:11837
#define ID_CONST
NODE * rb_parser_compile_file_path(volatile VALUE vparser, VALUE fname, VALUE file, int start)
Definition: ripper.c:12023
VALUE rb_eArgError
Definition: error.c:517
#define NEW_ARRAY(a)
#define tokadd_escape(e)
Definition: parse.c:11450
Definition: ripper.y:93
static NODE * node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE)
Definition: parse.c:14585
void rb_str_free(VALUE)
Definition: string.c:830
#define dyna_push()
Definition: parse.c:567
#define RTYPEDDATA_TYPE(v)
#define whole_match_p(e, l, i)
Definition: parse.c:11458
#define was_bol()
Definition: parse.c:12057
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:4693
#define NODE_VALUES
#define HEAPCNT(n, size)
Definition: parse.c:17353
#define STR_FUNC_EXPAND
Definition: parse.c:11952
static int parser_peek_variable_name(struct parser_params *parser)
Definition: parse.c:12622
#define is_attrset_id(id)
Definition: parse.c:114
#define ID_ATTRSET
static void YYSTYPE * yyvsp
Definition: parse.c:4526
struct vtable * args
Definition: ripper.c:189
static int local_id_gen(struct parser_params *, ID)
Definition: parse.c:16039
#define SPECIAL_PUNCT(idx)
Definition: parse.c:12598
#define rb_backref_error(n)
Definition: parse.c:493
Definition: ripper.y:136
#define tEMBDOC_END
Definition: eventids2.c:5
int yytype
Definition: ripper.c:4435
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:15812
#define rb_warningS(fmt, a)
Definition: parse.c:699
const char * yysrc
Definition: ripper.c:4622
VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc)
Definition: string.c:2078
#define YYSTACK_RELOCATE(Stack_alloc, Stack)
Definition: parse.c:1102
VALUE rb_inspect(VALUE)
Definition: object.c:411
#define reduce_nodes(n)
Definition: parse.c:440
#define void_expr0(node)
Definition: parse.c:435
rb_encoding * rb_enc_from_index(int index)
Definition: encoding.c:548
#define tokcopy(n)
Definition: parse.c:12116
#define NEW_BLOCK_PASS(b)
NODE * opt_args
Definition: ripper.y:522
int rb_is_global_name(VALUE name)
Definition: ripper.c:17187
size_t len
Definition: tcltklib.c:3567