Ruby  2.4.2p198(2017-09-14revision59899)
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 #if !YYPURE
73 # error needs pure parser
74 #endif
75 #ifndef PARSER_DEBUG
76 #define PARSER_DEBUG 0
77 #endif
78 #define YYDEBUG 1
79 #define YYERROR_VERBOSE 1
80 #define YYSTACK_USE_ALLOCA 0
81 
82 #include "ruby/ruby.h"
83 #include "ruby/st.h"
84 #include "ruby/encoding.h"
85 #include "internal.h"
86 #include "node.h"
87 #include "parse.h"
88 #include "symbol.h"
89 #include "regenc.h"
90 #include <stdio.h>
91 #include <errno.h>
92 #include <ctype.h>
93 #include "probes.h"
94 
95 #ifndef WARN_PAST_SCOPE
96 # define WARN_PAST_SCOPE 0
97 #endif
98 
99 #define TAB_WIDTH 8
100 
101 #define YYMALLOC(size) rb_parser_malloc(parser, (size))
102 #define YYREALLOC(ptr, size) rb_parser_realloc(parser, (ptr), (size))
103 #define YYCALLOC(nelem, size) rb_parser_calloc(parser, (nelem), (size))
104 #define YYFREE(ptr) rb_parser_free(parser, (ptr))
105 #define YYFPRINTF rb_parser_printf
106 #if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
107 # define YY_LOCATION_PRINT(File, Loc) \
108  rb_parser_printf(parser, "%d.%d-%d.%d", \
109  (Loc).first_line, (Loc).first_column, \
110  (Loc).last_line, (Loc).last_column)
111 #endif
112 #undef malloc
113 #undef realloc
114 #undef calloc
115 #undef free
116 #define malloc YYMALLOC
117 #define realloc YYREALLOC
118 #define calloc YYCALLOC
119 #define free YYFREE
120 
122  EXPR_BEG_bit, /* ignore newline, +/- is a sign. */
123  EXPR_END_bit, /* newline significant, +/- is an operator. */
124  EXPR_ENDARG_bit, /* ditto, and unbound braces. */
125  EXPR_ENDFN_bit, /* ditto, and unbound braces. */
126  EXPR_ARG_bit, /* newline significant, +/- is an operator. */
127  EXPR_CMDARG_bit, /* newline significant, +/- is an operator. */
128  EXPR_MID_bit, /* newline significant, +/- is an operator. */
129  EXPR_FNAME_bit, /* ignore newline, no reserved words. */
130  EXPR_DOT_bit, /* right after `.' or `::', no reserved words. */
131  EXPR_CLASS_bit, /* immediate after `class', no here document. */
132  EXPR_LABEL_bit, /* flag bit, label is allowed. */
133  EXPR_LABELED_bit, /* flag bit, just after a label. */
134  EXPR_FITEM_bit, /* symbol literal as FNAME. */
136 };
137 /* examine combinations */
139 #define DEF_EXPR(n) EXPR_##n = (1 << EXPR_##n##_bit)
141  DEF_EXPR(END),
142  DEF_EXPR(ENDARG),
143  DEF_EXPR(ENDFN),
144  DEF_EXPR(ARG),
145  DEF_EXPR(CMDARG),
146  DEF_EXPR(MID),
147  DEF_EXPR(FNAME),
148  DEF_EXPR(DOT),
149  DEF_EXPR(CLASS),
150  DEF_EXPR(LABEL),
151  DEF_EXPR(LABELED),
152  DEF_EXPR(FITEM),
153  EXPR_VALUE = EXPR_BEG,
154  EXPR_BEG_ANY = (EXPR_BEG | EXPR_MID | EXPR_CLASS),
155  EXPR_ARG_ANY = (EXPR_ARG | EXPR_CMDARG),
156  EXPR_END_ANY = (EXPR_END | EXPR_ENDARG | EXPR_ENDFN)
157 };
158 #define IS_lex_state_for(x, ls) ((x) & (ls))
159 #define IS_lex_state_all_for(x, ls) (((x) & (ls)) == (ls))
160 #define IS_lex_state(ls) IS_lex_state_for(lex_state, (ls))
161 #define IS_lex_state_all(ls) IS_lex_state_all_for(lex_state, (ls))
162 
163 # define SET_LEX_STATE(ls) \
164  (lex_state = (yydebug ? trace_lex_state(lex_state, (ls), __LINE__) : \
165  (enum lex_state_e)(ls)))
166 static enum lex_state_e trace_lex_state(enum lex_state_e from, enum lex_state_e to, int line);
167 
169 
170 static void show_bitstack(stack_type, const char *, int);
171 # define SHOW_BITSTACK(stack, name) (yydebug ? show_bitstack(stack, name, __LINE__) : (void)0)
172 # define BITSTACK_PUSH(stack, n) (((stack) = ((stack)<<1)|((n)&1)), SHOW_BITSTACK(stack, #stack"(push)"))
173 # define BITSTACK_POP(stack) (((stack) = (stack) >> 1), SHOW_BITSTACK(stack, #stack"(pop)"))
174 # define BITSTACK_LEXPOP(stack) (((stack) = ((stack) >> 1) | ((stack) & 1)), SHOW_BITSTACK(stack, #stack"(lexpop)"))
175 # define BITSTACK_SET_P(stack) (SHOW_BITSTACK(stack, #stack), (stack)&1)
176 # define BITSTACK_SET(stack, n) ((stack)=(n), SHOW_BITSTACK(stack, #stack"(set)"))
177 
178 #define COND_PUSH(n) BITSTACK_PUSH(cond_stack, (n))
179 #define COND_POP() BITSTACK_POP(cond_stack)
180 #define COND_LEXPOP() BITSTACK_LEXPOP(cond_stack)
181 #define COND_P() BITSTACK_SET_P(cond_stack)
182 #define COND_SET(n) BITSTACK_SET(cond_stack, (n))
183 
184 #define CMDARG_PUSH(n) BITSTACK_PUSH(cmdarg_stack, (n))
185 #define CMDARG_POP() BITSTACK_POP(cmdarg_stack)
186 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
187 #define CMDARG_P() BITSTACK_SET_P(cmdarg_stack)
188 #define CMDARG_SET(n) BITSTACK_SET(cmdarg_stack, (n))
189 
190 struct vtable {
191  ID *tbl;
192  int pos;
193  int capa;
194  struct vtable *prev;
195 };
196 
197 struct local_vars {
198  struct vtable *args;
199  struct vtable *vars;
200  struct vtable *used;
201 # if WARN_PAST_SCOPE
202  struct vtable *past;
203 # endif
204  struct local_vars *prev;
205  stack_type cmdargs;
206 };
207 
208 #define DVARS_INHERIT ((void*)1)
209 #define DVARS_TOPSCOPE NULL
210 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
211 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
212 
213 static int
214 vtable_size(const struct vtable *tbl)
215 {
216  if (POINTER_P(tbl)) {
217  return tbl->pos;
218  }
219  else {
220  return 0;
221  }
222 }
223 
224 #define VTBL_DEBUG 0
225 
226 static struct vtable *
228 {
229  struct vtable *tbl = ALLOC(struct vtable);
230  tbl->pos = 0;
231  tbl->capa = 8;
232  tbl->tbl = ALLOC_N(ID, tbl->capa);
233  tbl->prev = prev;
234  if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
235  return tbl;
236 }
237 
238 static void
240 {
241  if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
242  if (POINTER_P(tbl)) {
243  if (tbl->tbl) {
244  xfree(tbl->tbl);
245  }
246  xfree(tbl);
247  }
248 }
249 
250 static void
251 vtable_add(struct vtable *tbl, ID id)
252 {
253  if (!POINTER_P(tbl)) {
254  rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
255  }
256  if (VTBL_DEBUG) printf("vtable_add: %p, %"PRIsVALUE"\n", (void *)tbl, rb_id2str(id));
257 
258  if (tbl->pos == tbl->capa) {
259  tbl->capa = tbl->capa * 2;
260  REALLOC_N(tbl->tbl, ID, tbl->capa);
261  }
262  tbl->tbl[tbl->pos++] = id;
263 }
264 
265 #ifndef RIPPER
266 static void
267 vtable_pop(struct vtable *tbl, int n)
268 {
269  if (tbl->pos < n) rb_bug("vtable_pop: unreachable");
270  tbl->pos -= n;
271 }
272 #endif
273 
274 static int
275 vtable_included(const struct vtable * tbl, ID id)
276 {
277  int i;
278 
279  if (POINTER_P(tbl)) {
280  for (i = 0; i < tbl->pos; i++) {
281  if (tbl->tbl[i] == id) {
282  return i+1;
283  }
284  }
285  }
286  return 0;
287 }
288 
289 typedef struct token_info {
290  const char *token;
291  int linenum;
292  int column;
293  int nonspc;
294  struct token_info *next;
295 } token_info;
296 
297 /*
298  Structure of Lexer Buffer:
299 
300  lex_pbeg tokp lex_p lex_pend
301  | | | |
302  |-----------+--------------+------------|
303  |<------------>|
304  token
305 */
306 struct parser_params {
307  NODE *heap;
308 
309  YYSTYPE *lval;
310 
311  struct {
312  NODE *strterm;
313  VALUE (*gets)(struct parser_params*,VALUE);
314  VALUE input;
315  VALUE lastline;
316  VALUE nextline;
317  const char *pbeg;
318  const char *pcur;
319  const char *pend;
320  long gets_ptr;
321  enum lex_state_e state;
322  int paren_nest;
323  int lpar_beg;
324  int brace_nest;
325  } lex;
326  stack_type cond_stack;
327  stack_type cmdarg_stack;
328  int tokidx;
329  int toksiz;
330  int tokline;
331  int heredoc_end;
332  int heredoc_indent;
334  char *tokenbuf;
335  struct local_vars *lvtbl;
336  int line_count;
337  int ruby_sourceline; /* current line no. */
338  char *ruby_sourcefile; /* current source file */
340  rb_encoding *enc;
342  VALUE compile_option;
343 
344  VALUE debug_buffer;
345 
346  ID cur_arg;
347 
348  unsigned int command_start:1;
349  unsigned int eofp: 1;
350  unsigned int ruby__end__seen: 1;
351  unsigned int yydebug: 1;
352  unsigned int has_shebang: 1;
353  unsigned int in_defined: 1;
354  unsigned int in_main: 1;
355  unsigned int in_kwarg: 1;
356  unsigned int in_single: 1;
357  unsigned int in_def: 1;
358  unsigned int token_seen: 1;
359  unsigned int token_info_enabled: 1;
360 # if WARN_PAST_SCOPE
361  unsigned int past_scope_enabled: 1;
362 # endif
363  unsigned int error_p: 1;
364  unsigned int cr_seen: 1;
365 
366 #ifndef RIPPER
367  /* Ruby core only */
368 
369  NODE *eval_tree_begin;
370  NODE *eval_tree;
371  VALUE error_buffer;
373  VALUE coverage;
374  const struct rb_block *base_block;
375 #else
376  /* Ripper only */
377 
378  const char *tokp;
379  VALUE delayed;
380  int delayed_line;
381  int delayed_col;
382 
383  VALUE value;
384  VALUE result;
385  VALUE parsing_thread;
386 #endif
387 };
388 
389 #ifdef RIPPER
390 #define intern_cstr(n,l,en) rb_intern3(n,l,en)
391 #else
392 #define intern_cstr(n,l,en) rb_intern3(n,l,en)
393 #endif
394 
395 #define STR_NEW(p,n) rb_enc_str_new((p),(n),current_enc)
396 #define STR_NEW0() rb_enc_str_new(0,0,current_enc)
397 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),current_enc)
398 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),current_enc)
399 #define TOK_INTERN() intern_cstr(tok(), toklen(), current_enc)
400 
401 static int parser_yyerror(struct parser_params*, const char*);
402 #define yyerror(msg) parser_yyerror(parser, (msg))
403 
404 #define lex_strterm (parser->lex.strterm)
405 #define lex_state (parser->lex.state)
406 #define cond_stack (parser->cond_stack)
407 #define cmdarg_stack (parser->cmdarg_stack)
408 #define paren_nest (parser->lex.paren_nest)
409 #define lpar_beg (parser->lex.lpar_beg)
410 #define brace_nest (parser->lex.brace_nest)
411 #define in_single (parser->in_single)
412 #define in_def (parser->in_def)
413 #define in_main (parser->in_main)
414 #define in_defined (parser->in_defined)
415 #define tokenbuf (parser->tokenbuf)
416 #define tokidx (parser->tokidx)
417 #define toksiz (parser->toksiz)
418 #define tokline (parser->tokline)
419 #define lex_input (parser->lex.input)
420 #define lex_lastline (parser->lex.lastline)
421 #define lex_nextline (parser->lex.nextline)
422 #define lex_pbeg (parser->lex.pbeg)
423 #define lex_p (parser->lex.pcur)
424 #define lex_pend (parser->lex.pend)
425 #define heredoc_end (parser->heredoc_end)
426 #define heredoc_indent (parser->heredoc_indent)
427 #define heredoc_line_indent (parser->heredoc_line_indent)
428 #define command_start (parser->command_start)
429 #define lex_gets_ptr (parser->lex.gets_ptr)
430 #define lex_gets (parser->lex.gets)
431 #define lvtbl (parser->lvtbl)
432 #define ruby__end__seen (parser->ruby__end__seen)
433 #define ruby_sourceline (parser->ruby_sourceline)
434 #define ruby_sourcefile (parser->ruby_sourcefile)
435 #define ruby_sourcefile_string (parser->ruby_sourcefile_string)
436 #define current_enc (parser->enc)
437 #define current_arg (parser->cur_arg)
438 #define yydebug (parser->yydebug)
439 #ifdef RIPPER
440 #define compile_for_eval (0)
441 #else
442 #define compile_for_eval (parser->base_block != 0 && !in_main)
443 #define ruby_eval_tree (parser->eval_tree)
444 #define ruby_eval_tree_begin (parser->eval_tree_begin)
445 #define ruby_debug_lines (parser->debug_lines)
446 #define ruby_coverage (parser->coverage)
447 #endif
448 
449 #define CALL_Q_P(q) ((q) == tANDDOT)
450 #define NODE_CALL_Q(q) (CALL_Q_P(q) ? NODE_QCALL : NODE_CALL)
451 #define NEW_QCALL(q,r,m,a) NEW_NODE(NODE_CALL_Q(q),r,m,a)
452 
453 #define lambda_beginning_p() (lpar_beg && lpar_beg == paren_nest)
454 
455 static int yylex(YYSTYPE*, struct parser_params*);
456 
457 #ifndef RIPPER
458 #define yyparse ruby_yyparse
459 
460 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
461 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, (type), (a1), (a2), (a3))
462 
463 static NODE *cond_gen(struct parser_params*,NODE*,int);
464 #define cond(node) cond_gen(parser, (node), FALSE)
465 #define method_cond(node) cond_gen(parser, (node), TRUE)
466 static NODE *new_if_gen(struct parser_params*,NODE*,NODE*,NODE*);
467 #define new_if(cc,left,right) new_if_gen(parser, (cc), (left), (right))
468 #define new_unless(cc,left,right) new_if_gen(parser, (cc), (right), (left))
469 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
470 #define logop(type,node1,node2) logop_gen(parser, (type), (node1), (node2))
471 
472 static NODE *newline_node(NODE*);
473 static void fixpos(NODE*,NODE*);
474 
475 static int value_expr_gen(struct parser_params*,NODE*);
476 static void void_expr_gen(struct parser_params*,NODE*);
477 static NODE *remove_begin(NODE*);
478 static NODE *remove_begin_all(NODE*);
479 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
480 #define void_expr0(node) void_expr_gen(parser, (node))
481 #define void_expr(node) void_expr0((node) = remove_begin(node))
482 static void void_stmts_gen(struct parser_params*,NODE*);
483 #define void_stmts(node) void_stmts_gen(parser, (node))
484 static void reduce_nodes_gen(struct parser_params*,NODE**);
485 #define reduce_nodes(n) reduce_nodes_gen(parser,(n))
486 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
487 #define block_dup_check(n1,n2) block_dup_check_gen(parser,(n1),(n2))
488 
489 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
490 #define block_append(h,t) block_append_gen(parser,(h),(t))
491 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
492 #define list_append(l,i) list_append_gen(parser,(l),(i))
493 static NODE *list_concat(NODE*,NODE*);
494 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
495 #define arg_append(h,t) arg_append_gen(parser,(h),(t))
496 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
497 #define arg_concat(h,t) arg_concat_gen(parser,(h),(t))
498 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
499 #define literal_concat(h,t) literal_concat_gen(parser,(h),(t))
500 static int literal_concat0(struct parser_params *, VALUE, VALUE);
501 static NODE *new_evstr_gen(struct parser_params*,NODE*);
502 #define new_evstr(n) new_evstr_gen(parser,(n))
503 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
504 #define evstr2dstr(n) evstr2dstr_gen(parser,(n))
505 static NODE *splat_array(NODE*);
506 
507 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
508 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, (recv),(id),(arg1))
509 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
510 #define call_uni_op(recv,id) call_uni_op_gen(parser, (recv),(id))
511 
512 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,NODE*);
513 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
514 static NODE *new_args_tail_gen(struct parser_params*,NODE*,ID,ID);
515 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
516 #define new_kw_arg(k) ((k) ? NEW_KW_ARG(0, (k)) : 0)
517 
518 static VALUE negate_lit(VALUE);
519 static NODE *ret_args_gen(struct parser_params*,NODE*);
520 #define ret_args(node) ret_args_gen(parser, (node))
521 static NODE *arg_blk_pass(NODE*,NODE*);
522 static NODE *new_yield_gen(struct parser_params*,NODE*);
523 #define new_yield(node) new_yield_gen(parser, (node))
524 static NODE *dsym_node_gen(struct parser_params*,NODE*);
525 #define dsym_node(node) dsym_node_gen(parser, (node))
526 
527 static NODE *gettable_gen(struct parser_params*,ID);
528 #define gettable(id) gettable_gen(parser,(id))
529 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
530 #define assignable(id,node) assignable_gen(parser, (id), (node))
531 
532 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
533 #define aryset(node1,node2) aryset_gen(parser, (node1), (node2))
534 static NODE *attrset_gen(struct parser_params*,NODE*,ID,ID);
535 #define attrset(node,q,id) attrset_gen(parser, (node), (q), (id))
536 
537 static void rb_backref_error_gen(struct parser_params*,NODE*);
538 #define rb_backref_error(n) rb_backref_error_gen(parser,(n))
539 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
540 #define node_assign(node1, node2) node_assign_gen(parser, (node1), (node2))
541 
542 static NODE *new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
543 static NODE *new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID atype, ID attr, ID op, NODE *rhs);
544 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (type), (attr), (op), (rhs))
545 static NODE *new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
546 #define new_const_op_assign(lhs, op, rhs) new_const_op_assign_gen(parser, (lhs), (op), (rhs))
547 
548 #define const_path_field(w, n) NEW_COLON2(w, n)
549 #define top_const_field(n) NEW_COLON3(n)
550 static NODE *const_decl_gen(struct parser_params *parser, NODE* path);
551 #define const_decl(path) const_decl_gen(parser, path)
552 
553 #define var_field(n) (n)
554 #define backref_assign_error(n, a) (rb_backref_error(n), NEW_BEGIN(0))
555 
556 static NODE *kwd_append(NODE*, NODE*);
557 
558 static NODE *new_hash_gen(struct parser_params *parser, NODE *hash);
559 #define new_hash(hash) new_hash_gen(parser, (hash))
560 
561 #define new_defined(expr) NEW_DEFINED(remove_begin_all(expr))
562 
563 static NODE *new_regexp_gen(struct parser_params *, NODE *, int);
564 #define new_regexp(node, opt) new_regexp_gen(parser, node, opt)
565 
566 static NODE *new_xstring_gen(struct parser_params *, NODE *);
567 #define new_xstring(node) new_xstring_gen(parser, node)
568 #define new_string1(str) (str)
569 
570 #define new_brace_body(param, stmt) NEW_ITER(param, stmt)
571 #define new_do_body(param, stmt) NEW_ITER(param, stmt)
572 
573 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
574 #define match_op(node1,node2) match_op_gen(parser, (node1), (node2))
575 
576 static ID *local_tbl_gen(struct parser_params*);
577 #define local_tbl() local_tbl_gen(parser)
578 
579 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
580 #define reg_compile(str,options) reg_compile_gen(parser, (str), (options))
581 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
582 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, (str), (options))
583 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
584 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, (str), (options))
585 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp);
586 #define reg_named_capture_assign(regexp) reg_named_capture_assign_gen(parser,(regexp))
587 
588 static NODE *parser_heredoc_dedent(struct parser_params*,NODE*);
589 # define heredoc_dedent(str) parser_heredoc_dedent(parser, (str))
590 
591 #define get_id(id) (id)
592 #define get_value(val) (val)
593 #else /* RIPPER */
594 #define NODE_RIPPER NODE_CDECL
595 
596 static inline VALUE
597 ripper_new_yylval(ID a, VALUE b, VALUE c)
598 {
599  return (VALUE)NEW_CDECL(a, b, c);
600 }
601 
602 static inline int
603 ripper_is_node_yylval(VALUE n)
604 {
605  return RB_TYPE_P(n, T_NODE) && nd_type(RNODE(n)) == NODE_RIPPER;
606 }
607 
608 #define value_expr(node) ((void)(node))
609 #define remove_begin(node) (node)
610 #define rb_dvar_defined(id, base) 0
611 #define rb_local_defined(id, base) 0
612 static ID ripper_get_id(VALUE);
613 #define get_id(id) ripper_get_id(id)
614 static VALUE ripper_get_value(VALUE);
615 #define get_value(val) ripper_get_value(val)
616 static VALUE assignable_gen(struct parser_params*,VALUE);
617 #define assignable(lhs,node) assignable_gen(parser, (lhs))
618 static int id_is_var_gen(struct parser_params *parser, ID id);
619 #define id_is_var(id) id_is_var_gen(parser, (id))
620 
621 #define node_assign(node1, node2) dispatch2(assign, (node1), (node2))
622 
623 static VALUE new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs);
624 static VALUE new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs);
625 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (type), (attr), (op), (rhs))
626 #define new_const_op_assign(lhs, op, rhs) new_op_assign(lhs, op, rhs)
627 
628 static VALUE new_regexp_gen(struct parser_params *, VALUE, VALUE);
629 #define new_regexp(node, opt) new_regexp_gen(parser, node, opt)
630 
631 static VALUE new_xstring_gen(struct parser_params *, VALUE);
632 #define new_xstring(str) new_xstring_gen(parser, str)
633 #define new_string1(str) dispatch1(string_literal, str)
634 
635 #define new_brace_body(param, stmt) dispatch2(brace_block, escape_Qundef(param), stmt)
636 #define new_do_body(param, stmt) dispatch2(do_block, escape_Qundef(param), stmt)
637 
638 #define const_path_field(w, n) dispatch2(const_path_field, (w), (n))
639 #define top_const_field(n) dispatch1(top_const_field, (n))
640 static VALUE const_decl_gen(struct parser_params *parser, VALUE path);
641 #define const_decl(path) const_decl_gen(parser, path)
642 
643 #define var_field(n) dispatch1(var_field, (n))
644 static VALUE assign_error_gen(struct parser_params *parser, VALUE a);
645 #define assign_error(a) assign_error_gen(parser, (a))
646 #define backref_assign_error(n, a) assign_error(a)
647 
648 static VALUE parser_reg_compile(struct parser_params*, VALUE, int, VALUE *);
649 
650 #endif /* !RIPPER */
651 
652 #define new_op_assign(lhs, op, rhs) new_op_assign_gen(parser, (lhs), (op), (rhs))
653 
656 
657 
658 static ID formal_argument_gen(struct parser_params*, ID);
659 #define formal_argument(id) formal_argument_gen(parser, (id))
660 static ID shadowing_lvar_gen(struct parser_params*,ID);
661 #define shadowing_lvar(name) shadowing_lvar_gen(parser, (name))
662 static void new_bv_gen(struct parser_params*,ID);
663 #define new_bv(id) new_bv_gen(parser, (id))
664 
665 static void local_push_gen(struct parser_params*,int);
666 #define local_push(top) local_push_gen(parser,(top))
667 static void local_pop_gen(struct parser_params*);
668 #define local_pop() local_pop_gen(parser)
669 static void local_var_gen(struct parser_params*, ID);
670 #define local_var(id) local_var_gen(parser, (id))
671 static void arg_var_gen(struct parser_params*, ID);
672 #define arg_var(id) arg_var_gen(parser, (id))
673 static int local_id_gen(struct parser_params*, ID);
674 #define local_id(id) local_id_gen(parser, (id))
675 static ID internal_id_gen(struct parser_params*);
676 #define internal_id() internal_id_gen(parser)
677 
678 static const struct vtable *dyna_push_gen(struct parser_params *);
679 #define dyna_push() dyna_push_gen(parser)
680 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
681 #define dyna_pop(node) dyna_pop_gen(parser, (node))
682 static int dyna_in_block_gen(struct parser_params*);
683 #define dyna_in_block() dyna_in_block_gen(parser)
684 #define dyna_var(id) local_var(id)
685 static int dvar_defined_gen(struct parser_params*,ID,int);
686 #define dvar_defined(id) dvar_defined_gen(parser, (id), 0)
687 #define dvar_defined_get(id) dvar_defined_gen(parser, (id), 1)
688 static int dvar_curr_gen(struct parser_params*,ID);
689 #define dvar_curr(id) dvar_curr_gen(parser, (id))
690 
691 static int lvar_defined_gen(struct parser_params*, ID);
692 #define lvar_defined(id) lvar_defined_gen(parser, (id))
693 
694 #define RE_OPTION_ONCE (1<<16)
695 #define RE_OPTION_ENCODING_SHIFT 8
696 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
697 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
698 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
699 #define RE_OPTION_MASK 0xff
700 #define RE_OPTION_ARG_ENCODING_NONE 32
701 
702 #define NODE_STRTERM NODE_ZARRAY /* nothing to gc */
703 #define NODE_HEREDOC NODE_ARRAY /* 1, 3 to gc */
704 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
705 #define nd_func u1.id
706 #if SIZEOF_SHORT == 2
707 #define nd_term(node) ((signed short)(node)->u2.id)
708 #else
709 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
710 #endif
711 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
712 #define nd_nest u3.cnt
713 
714 /****** Ripper *******/
715 
716 #ifdef RIPPER
717 #define RIPPER_VERSION "0.1.0"
718 
719 static inline VALUE intern_sym(const char *name);
720 
721 #include "eventids1.c"
722 #include "eventids2.c"
723 
724 static VALUE ripper_dispatch0(struct parser_params*,ID);
725 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
726 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
727 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
728 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
729 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
730 static VALUE ripper_dispatch7(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE);
731 static void ripper_error_gen(struct parser_params *parser);
732 #define ripper_error() ripper_error_gen(parser)
733 
734 #define dispatch0(n) ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
735 #define dispatch1(n,a) ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a))
736 #define dispatch2(n,a,b) ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), (a), (b))
737 #define dispatch3(n,a,b,c) ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c))
738 #define dispatch4(n,a,b,c,d) ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d))
739 #define dispatch5(n,a,b,c,d,e) ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e))
740 #define dispatch7(n,a,b,c,d,e,f,g) ripper_dispatch7(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e), (f), (g))
741 
742 #define yyparse ripper_yyparse
743 
744 #define ripper_intern(s) ID2SYM(rb_intern(s))
745 static VALUE ripper_id2sym(ID);
746 #ifdef __GNUC__
747 #define ripper_id2sym(id) (rb_ispunct((int)(id)) ? \
748  ID2SYM(id) : ripper_id2sym(id))
749 #endif
750 
751 #define arg_new() dispatch0(args_new)
752 #define arg_add(l,a) dispatch2(args_add, (l), (a))
753 #define arg_add_star(l,a) dispatch2(args_add_star, (l), (a))
754 #define arg_add_block(l,b) dispatch2(args_add_block, (l), (b))
755 #define arg_add_optblock(l,b) ((b)==Qundef? (l) : dispatch2(args_add_block, (l), (b)))
756 #define bare_assoc(v) dispatch1(bare_assoc_hash, (v))
757 #define arg_add_assocs(l,b) arg_add((l), bare_assoc(b))
758 
759 #define args2mrhs(a) dispatch1(mrhs_new_from_args, (a))
760 #define mrhs_new() dispatch0(mrhs_new)
761 #define mrhs_add(l,a) dispatch2(mrhs_add, (l), (a))
762 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, (l), (a))
763 
764 #define mlhs_new() dispatch0(mlhs_new)
765 #define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a))
766 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a))
767 
768 #define params_new(pars, opts, rest, pars2, kws, kwrest, blk) \
769  dispatch7(params, (pars), (opts), (rest), (pars2), (kws), (kwrest), (blk))
770 
771 #define blockvar_new(p,v) dispatch2(block_var, (p), (v))
772 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a))
773 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, (l), (a))
774 
775 #define method_optarg(m,a) ((a)==Qundef ? (m) : dispatch2(method_add_arg,(m),(a)))
776 #define method_arg(m,a) dispatch2(method_add_arg,(m),(a))
777 #define method_add_block(m,b) dispatch2(method_add_block, (m), (b))
778 
779 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
780 
781 static inline VALUE
782 new_args_gen(struct parser_params *parser, VALUE f, VALUE o, VALUE r, VALUE p, VALUE tail)
783 {
784  NODE *t = (NODE *)tail;
785  VALUE k = t->u1.value, kr = t->u2.value, b = t->u3.value;
786  return params_new(f, o, r, p, k, kr, escape_Qundef(b));
787 }
788 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
789 
790 static inline VALUE
791 new_args_tail_gen(struct parser_params *parser, VALUE k, VALUE kr, VALUE b)
792 {
793  return (VALUE)MEMO_NEW(k, kr, b);
794 }
795 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
796 
797 #define new_defined(expr) dispatch1(defined, (expr))
798 
800 # define heredoc_dedent(str) parser_heredoc_dedent(parser, (str))
801 
802 #define FIXME 0
803 
804 #else
805 #define ripper_id2sym(id) id
806 #endif /* RIPPER */
807 
808 #ifndef RIPPER
809 # define Qnone 0
810 # define ifndef_ripper(x) (x)
811 #else
812 # define Qnone Qnil
813 # define ifndef_ripper(x)
814 #endif
815 
816 # define rb_warn0(fmt) WARN_CALL(WARN_ARGS(fmt, 1))
817 # define rb_warn1(fmt,a) WARN_CALL(WARN_ARGS(fmt, 2), (a))
818 # define rb_warn2(fmt,a,b) WARN_CALL(WARN_ARGS(fmt, 3), (a), (b))
819 # define rb_warn3(fmt,a,b,c) WARN_CALL(WARN_ARGS(fmt, 4), (a), (b), (c))
820 # define rb_warn4(fmt,a,b,c,d) WARN_CALL(WARN_ARGS(fmt, 5), (a), (b), (c), (d))
821 # define rb_warning0(fmt) WARNING_CALL(WARNING_ARGS(fmt, 1))
822 # define rb_warning1(fmt,a) WARNING_CALL(WARNING_ARGS(fmt, 2), (a))
823 # define rb_warning2(fmt,a,b) WARNING_CALL(WARNING_ARGS(fmt, 3), (a), (b))
824 # define rb_warning3(fmt,a,b,c) WARNING_CALL(WARNING_ARGS(fmt, 4), (a), (b), (c))
825 # define rb_warning4(fmt,a,b,c,d) WARNING_CALL(WARNING_ARGS(fmt, 5), (a), (b), (c), (d))
826 # define rb_warn0L(l,fmt) WARN_CALL(WARN_ARGS_L(l, fmt, 1))
827 # define rb_warn1L(l,fmt,a) WARN_CALL(WARN_ARGS_L(l, fmt, 2), (a))
828 # define rb_warn2L(l,fmt,a,b) WARN_CALL(WARN_ARGS_L(l, fmt, 3), (a), (b))
829 # define rb_warn3L(l,fmt,a,b,c) WARN_CALL(WARN_ARGS_L(l, fmt, 4), (a), (b), (c))
830 # define rb_warn4L(l,fmt,a,b,c,d) WARN_CALL(WARN_ARGS_L(l, fmt, 5), (a), (b), (c), (d))
831 # define rb_warning0L(l,fmt) WARNING_CALL(WARNING_ARGS_L(l, fmt, 1))
832 # define rb_warning1L(l,fmt,a) WARNING_CALL(WARNING_ARGS_L(l, fmt, 2), (a))
833 # define rb_warning2L(l,fmt,a,b) WARNING_CALL(WARNING_ARGS_L(l, fmt, 3), (a), (b))
834 # define rb_warning3L(l,fmt,a,b,c) WARNING_CALL(WARNING_ARGS_L(l, fmt, 4), (a), (b), (c))
835 # define rb_warning4L(l,fmt,a,b,c,d) WARNING_CALL(WARNING_ARGS_L(l, fmt, 5), (a), (b), (c), (d))
836 #ifdef RIPPER
837 static ID id_warn, id_warning, id_gets;
838 # define WARN_S_L(s,l) STR_NEW(s,l)
839 # define WARN_S(s) STR_NEW2(s)
840 # define WARN_I(i) INT2NUM(i)
841 # define PRIsWARN "s"
842 # define WARN_ARGS(fmt,n) parser->value, id_warn, n, rb_usascii_str_new_lit(fmt)
843 # define WARN_ARGS_L(l,fmt,n) WARN_ARGS(fmt,n)
844 # define WARN_CALL rb_funcall
845 # define WARNING_ARGS(fmt,n) parser->value, id_warning, n, rb_usascii_str_new_lit(fmt)
846 # define WARNING_ARGS_L(l, fmt,n) WARNING_ARGS(fmt,n)
847 # define WARNING_CALL rb_funcall
848 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
849 # define compile_error ripper_compile_error
850 # define PARSER_ARG parser,
851 #else
852 # define WARN_S_L(s,l) s
853 # define WARN_S(s) s
854 # define WARN_I(i) i
855 # define PRIsWARN PRIsVALUE
856 # define WARN_ARGS(fmt,n) WARN_ARGS_L(ruby_sourceline,fmt,n)
857 # define WARN_ARGS_L(l,fmt,n) ruby_sourcefile, (l), (fmt)
858 # define WARN_CALL rb_compile_warn
859 # define WARNING_ARGS(fmt,n) WARN_ARGS(fmt,n)
860 # define WARNING_ARGS_L(l,fmt,n) WARN_ARGS_L(l,fmt,n)
861 # define WARNING_CALL rb_compile_warning
862 static void parser_compile_error(struct parser_params*, const char *fmt, ...);
863 # define compile_error parser_compile_error
864 # define PARSER_ARG parser,
865 #endif
866 
867 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150,
868  for instance). This is too low for Ruby to parse some files, such as
869  date/format.rb, therefore bump the value up to at least Bison's default. */
870 #ifdef OLD_YACC
871 #ifndef YYMAXDEPTH
872 #define YYMAXDEPTH 10000
873 #endif
874 #endif
875 
876 static void token_info_push_gen(struct parser_params*, const char *token, size_t len);
877 static void token_info_pop_gen(struct parser_params*, const char *token, size_t len);
878 #define token_info_push(token) token_info_push_gen(parser, (token), rb_strlen_lit(token))
879 #define token_info_pop(token) token_info_pop_gen(parser, (token), rb_strlen_lit(token))
880 
881 
882 /* Line 268 of yacc.c */
883 #line 884 "parse.c"
884 
885 /* Enabling traces. */
886 #ifndef YYDEBUG
887 # define YYDEBUG 0
888 #endif
889 
890 /* Enabling verbose error messages. */
891 #ifdef YYERROR_VERBOSE
892 # undef YYERROR_VERBOSE
893 # define YYERROR_VERBOSE 1
894 #else
895 # define YYERROR_VERBOSE 0
896 #endif
897 
898 /* Enabling the token table. */
899 #ifndef YYTOKEN_TABLE
900 # define YYTOKEN_TABLE 0
901 #endif
902 
903 
904 /* Tokens. */
905 #ifndef YYTOKENTYPE
906 # define YYTOKENTYPE
907  /* Put the tokens into the symbol table, so that GDB and other debuggers
908  know about them. */
909  enum yytokentype {
913  keyword_def = 260,
918  keyword_end = 265,
919  keyword_if = 266,
928  keyword_for = 275,
933  keyword_in = 280,
934  keyword_do = 281,
942  keyword_nil = 289,
945  keyword_and = 292,
946  keyword_or = 293,
947  keyword_not = 294,
948  modifier_if = 295,
956  keyword_END = 303,
960  tIDENTIFIER = 307,
961  tFID = 308,
962  tGVAR = 309,
963  tIVAR = 310,
964  tCONSTANT = 311,
965  tCVAR = 312,
966  tLABEL = 313,
967  tINTEGER = 314,
968  tFLOAT = 315,
969  tRATIONAL = 316,
970  tIMAGINARY = 317,
972  tCHAR = 319,
973  tNTH_REF = 320,
974  tBACK_REF = 321,
975  tREGEXP_END = 322,
976  tUPLUS = 130,
977  tUMINUS = 131,
978  tPOW = 132,
979  tCMP = 134,
980  tEQ = 139,
981  tEQQ = 140,
982  tNEQ = 141,
983  tGEQ = 138,
984  tLEQ = 137,
985  tANDOP = 148,
986  tOROP = 149,
987  tMATCH = 142,
988  tNMATCH = 143,
989  tDOT2 = 128,
990  tDOT3 = 129,
991  tAREF = 144,
992  tASET = 145,
993  tLSHFT = 135,
994  tRSHFT = 136,
995  tANDDOT = 150,
996  tCOLON2 = 323,
997  tCOLON3 = 324,
998  tOP_ASGN = 325,
999  tASSOC = 326,
1000  tLPAREN = 327,
1002  tRPAREN = 329,
1003  tLBRACK = 330,
1004  tLBRACE = 331,
1006  tSTAR = 333,
1007  tDSTAR = 334,
1008  tAMPER = 335,
1009  tLAMBDA = 336,
1010  tSYMBEG = 337,
1014  tWORDS_BEG = 341,
1022  tLAMBEG = 349,
1023  tLABEL_END = 350,
1024  tLOWEST = 351,
1027  };
1028 #endif
1029 
1030 
1031 
1032 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
1033 typedef union YYSTYPE
1034 {
1035 
1036 /* Line 293 of yacc.c */
1037 #line 828 "parse.y"
1038 
1039  VALUE val;
1040  NODE *node;
1041  ID id;
1042  int num;
1043  const struct vtable *vars;
1044 
1045 
1046 
1047 /* Line 293 of yacc.c */
1048 #line 1049 "parse.c"
1049 } YYSTYPE;
1050 # define YYSTYPE_IS_TRIVIAL 1
1051 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
1052 # define YYSTYPE_IS_DECLARED 1
1053 #endif
1054 
1055 
1056 /* Copy the second part of user declarations. */
1057 
1058 
1059 /* Line 343 of yacc.c */
1060 #line 1061 "parse.c"
1061 
1062 #ifdef short
1063 # undef short
1064 #endif
1065 
1066 #ifdef YYTYPE_UINT8
1067 typedef YYTYPE_UINT8 yytype_uint8;
1068 #else
1069 typedef unsigned char yytype_uint8;
1070 #endif
1071 
1072 #ifdef YYTYPE_INT8
1073 typedef YYTYPE_INT8 yytype_int8;
1074 #elif (defined __STDC__ || defined __C99__FUNC__ \
1075  || defined __cplusplus || defined _MSC_VER)
1076 typedef signed char yytype_int8;
1077 #else
1078 typedef short int yytype_int8;
1079 #endif
1080 
1081 #ifdef YYTYPE_UINT16
1082 typedef YYTYPE_UINT16 yytype_uint16;
1083 #else
1084 typedef unsigned short int yytype_uint16;
1085 #endif
1086 
1087 #ifdef YYTYPE_INT16
1088 typedef YYTYPE_INT16 yytype_int16;
1089 #else
1090 typedef short int yytype_int16;
1091 #endif
1092 
1093 #ifndef YYSIZE_T
1094 # ifdef __SIZE_TYPE__
1095 # define YYSIZE_T __SIZE_TYPE__
1096 # elif defined size_t
1097 # define YYSIZE_T size_t
1098 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
1099  || defined __cplusplus || defined _MSC_VER)
1100 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1101 # define YYSIZE_T size_t
1102 # else
1103 # define YYSIZE_T unsigned int
1104 # endif
1105 #endif
1106 
1107 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
1108 
1109 #ifndef YY_
1110 # if defined YYENABLE_NLS && YYENABLE_NLS
1111 # if ENABLE_NLS
1112 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1113 # define YY_(msgid) dgettext ("bison-runtime", msgid)
1114 # endif
1115 # endif
1116 # ifndef YY_
1117 # define YY_(msgid) msgid
1118 # endif
1119 #endif
1120 
1121 /* Suppress unused-variable warnings by "using" E. */
1122 #if ! defined lint || defined __GNUC__
1123 # define YYUSE(e) ((void) (e))
1124 #else
1125 # define YYUSE(e) /* empty */
1126 #endif
1127 
1128 /* Identity function, used to suppress warnings about constant conditions. */
1129 #ifndef lint
1130 # define YYID(n) (n)
1131 #else
1132 #if (defined __STDC__ || defined __C99__FUNC__ \
1133  || defined __cplusplus || defined _MSC_VER)
1134 static int
1135 YYID (int yyi)
1136 #else
1137 static int
1138 YYID (yyi)
1139  int yyi;
1140 #endif
1141 {
1142  return yyi;
1143 }
1144 #endif
1145 
1146 #if ! defined yyoverflow || YYERROR_VERBOSE
1147 
1148 /* The parser invokes alloca or malloc; define the necessary symbols. */
1149 
1150 # ifdef YYSTACK_USE_ALLOCA
1151 # if YYSTACK_USE_ALLOCA
1152 # ifdef __GNUC__
1153 # define YYSTACK_ALLOC __builtin_alloca
1154 # elif defined __BUILTIN_VA_ARG_INCR
1155 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
1156 # elif defined _AIX
1157 # define YYSTACK_ALLOC __alloca
1158 # elif defined _MSC_VER
1159 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
1160 # define alloca _alloca
1161 # else
1162 # define YYSTACK_ALLOC alloca
1163 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
1164  || defined __cplusplus || defined _MSC_VER)
1165 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1166 # ifndef EXIT_SUCCESS
1167 # define EXIT_SUCCESS 0
1168 # endif
1169 # endif
1170 # endif
1171 # endif
1172 # endif
1173 
1174 # ifdef YYSTACK_ALLOC
1175  /* Pacify GCC's `empty if-body' warning. */
1176 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
1177 # ifndef YYSTACK_ALLOC_MAXIMUM
1178  /* The OS might guarantee only one guard page at the bottom of the stack,
1179  and a page size can be as small as 4096 bytes. So we cannot safely
1180  invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1181  to allow for a few compiler-allocated temporary stack slots. */
1182 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
1183 # endif
1184 # else
1185 # define YYSTACK_ALLOC YYMALLOC
1186 # define YYSTACK_FREE YYFREE
1187 # ifndef YYSTACK_ALLOC_MAXIMUM
1188 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
1189 # endif
1190 # if (defined __cplusplus && ! defined EXIT_SUCCESS \
1191  && ! ((defined YYMALLOC || defined malloc) \
1192  && (defined YYFREE || defined free)))
1193 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1194 # ifndef EXIT_SUCCESS
1195 # define EXIT_SUCCESS 0
1196 # endif
1197 # endif
1198 # ifndef YYMALLOC
1199 # define YYMALLOC malloc
1200 # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
1201  || defined __cplusplus || defined _MSC_VER)
1202 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1203 # endif
1204 # endif
1205 # ifndef YYFREE
1206 # define YYFREE free
1207 # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
1208  || defined __cplusplus || defined _MSC_VER)
1209 void free (void *); /* INFRINGES ON USER NAME SPACE */
1210 # endif
1211 # endif
1212 # endif
1213 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
1214 
1215 
1216 #if (! defined yyoverflow \
1217  && (! defined __cplusplus \
1218  || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
1219 
1220 /* A type that is properly aligned for any stack member. */
1221 union yyalloc
1222 {
1223  yytype_int16 yyss_alloc;
1224  YYSTYPE yyvs_alloc;
1225 };
1226 
1227 /* The size of the maximum gap between one aligned stack and the next. */
1228 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1229 
1230 /* The size of an array large to enough to hold all stacks, each with
1231  N elements. */
1232 # define YYSTACK_BYTES(N) \
1233  ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
1234  + YYSTACK_GAP_MAXIMUM)
1235 
1236 # define YYCOPY_NEEDED 1
1237 
1238 /* Relocate STACK from its old location to the new one. The
1239  local variables YYSIZE and YYSTACKSIZE give the old and new number of
1240  elements in the stack, and YYPTR gives the new location of the
1241  stack. Advance YYPTR to a properly aligned location for the next
1242  stack. */
1243 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
1244  do \
1245  { \
1246  YYSIZE_T yynewbytes; \
1247  YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
1248  Stack = &yyptr->Stack_alloc; \
1249  yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1250  yyptr += yynewbytes / sizeof (*yyptr); \
1251  } \
1252  while (YYID (0))
1253 
1254 #endif
1255 
1256 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
1257 /* Copy COUNT objects from FROM to TO. The source and destination do
1258  not overlap. */
1259 # ifndef YYCOPY
1260 # if defined __GNUC__ && 1 < __GNUC__
1261 # define YYCOPY(To, From, Count) \
1262  __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1263 # else
1264 # define YYCOPY(To, From, Count) \
1265  do \
1266  { \
1267  YYSIZE_T yyi; \
1268  for (yyi = 0; yyi < (Count); yyi++) \
1269  (To)[yyi] = (From)[yyi]; \
1270  } \
1271  while (YYID (0))
1272 # endif
1273 # endif
1274 #endif /* !YYCOPY_NEEDED */
1275 
1276 /* YYFINAL -- State number of the termination state. */
1277 #define YYFINAL 3
1278 /* YYLAST -- Last index in YYTABLE. */
1279 #define YYLAST 11794
1280 
1281 /* YYNTOKENS -- Number of terminals. */
1282 #define YYNTOKENS 146
1283 /* YYNNTS -- Number of nonterminals. */
1284 #define YYNNTS 217
1285 /* YYNRULES -- Number of rules. */
1286 #define YYNRULES 642
1287 /* YYNRULES -- Number of states. */
1288 #define YYNSTATES 1085
1289 
1290 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1291 #define YYUNDEFTOK 2
1292 #define YYMAXUTOK 353
1293 
1294 #define YYTRANSLATE(YYX) \
1295  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1296 
1297 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
1298 static const yytype_uint8 yytranslate[] =
1299 {
1300  0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1301  145, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1302  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1303  2, 2, 143, 131, 2, 2, 2, 129, 124, 2,
1304  139, 140, 127, 125, 137, 126, 144, 128, 2, 2,
1305  2, 2, 2, 2, 2, 2, 2, 2, 119, 142,
1306  121, 117, 120, 118, 2, 2, 2, 2, 2, 2,
1307  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1308  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1309  2, 136, 2, 141, 123, 2, 138, 2, 2, 2,
1310  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1311  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1312  2, 2, 2, 134, 122, 135, 132, 2, 81, 82,
1313  68, 69, 70, 2, 71, 85, 86, 76, 75, 72,
1314  73, 74, 79, 80, 83, 84, 2, 2, 77, 78,
1315  87, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1316  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1317  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1318  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1319  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1320  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1321  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1322  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1323  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1324  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1325  2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1326  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1327  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1328  25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1329  35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1330  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1331  55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1332  65, 66, 67, 88, 89, 90, 91, 92, 93, 94,
1333  95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1334  105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
1335  115, 116, 130, 133
1336 };
1337 
1338 #if YYDEBUG
1339 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1340  YYRHS. */
1341 static const yytype_uint16 yyprhs[] =
1342 {
1343  0, 0, 3, 4, 7, 10, 12, 14, 18, 21,
1344  23, 24, 30, 35, 38, 40, 42, 46, 49, 51,
1345  52, 58, 59, 64, 68, 72, 76, 79, 83, 87,
1346  91, 95, 99, 104, 106, 110, 114, 118, 120, 124,
1347  128, 135, 141, 147, 153, 159, 163, 165, 169, 171,
1348  173, 177, 181, 185, 188, 190, 192, 194, 196, 198,
1349  203, 204, 209, 211, 214, 218, 223, 229, 234, 240,
1350  243, 246, 249, 252, 255, 257, 261, 263, 267, 269,
1351  272, 276, 282, 285, 290, 293, 298, 300, 304, 306,
1352  310, 313, 317, 319, 323, 325, 327, 332, 336, 340,
1353  344, 348, 351, 353, 355, 357, 362, 366, 370, 374,
1354  378, 381, 383, 385, 387, 390, 392, 396, 398, 400,
1355  402, 404, 406, 408, 410, 412, 414, 416, 417, 422,
1356  424, 426, 428, 430, 432, 434, 436, 438, 440, 442,
1357  444, 446, 448, 450, 452, 454, 456, 458, 460, 462,
1358  464, 466, 468, 470, 472, 474, 476, 478, 480, 482,
1359  484, 486, 488, 490, 492, 494, 496, 498, 500, 502,
1360  504, 506, 508, 510, 512, 514, 516, 518, 520, 522,
1361  524, 526, 528, 530, 532, 534, 536, 538, 540, 542,
1362  544, 546, 548, 550, 552, 554, 556, 558, 560, 562,
1363  564, 568, 572, 579, 585, 591, 597, 603, 608, 612,
1364  616, 620, 624, 628, 632, 636, 640, 644, 649, 652,
1365  655, 659, 663, 667, 671, 675, 679, 683, 687, 691,
1366  695, 699, 703, 707, 710, 713, 717, 721, 725, 729,
1367  730, 735, 742, 744, 746, 748, 751, 756, 759, 761,
1368  765, 769, 771, 773, 775, 777, 780, 785, 788, 790,
1369  793, 796, 801, 803, 804, 807, 810, 813, 815, 817,
1370  820, 824, 829, 831, 833, 837, 842, 845, 847, 849,
1371  851, 853, 855, 857, 859, 861, 863, 865, 867, 868,
1372  873, 874, 878, 879, 880, 886, 890, 894, 897, 901,
1373  905, 907, 912, 916, 918, 919, 926, 931, 935, 938,
1374  940, 943, 946, 953, 960, 961, 962, 970, 971, 972,
1375  980, 986, 991, 992, 993, 1003, 1004, 1011, 1012, 1020,
1376  1021, 1027, 1028, 1029, 1037, 1038, 1039, 1049, 1051, 1053,
1377  1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073,
1378  1075, 1077, 1079, 1081, 1083, 1085, 1088, 1090, 1092, 1094,
1379  1100, 1102, 1105, 1107, 1109, 1111, 1115, 1117, 1121, 1123,
1380  1128, 1135, 1139, 1145, 1148, 1153, 1155, 1159, 1164, 1167,
1381  1170, 1172, 1175, 1176, 1183, 1192, 1197, 1204, 1209, 1212,
1382  1219, 1222, 1227, 1234, 1237, 1242, 1245, 1250, 1252, 1254,
1383  1256, 1260, 1262, 1267, 1269, 1274, 1276, 1280, 1282, 1284,
1384  1285, 1286, 1287, 1288, 1295, 1300, 1302, 1306, 1310, 1311,
1385  1316, 1319, 1324, 1330, 1336, 1339, 1340, 1346, 1347, 1353,
1386  1357, 1358, 1363, 1364, 1369, 1372, 1374, 1379, 1380, 1385,
1387  1386, 1391, 1392, 1393, 1398, 1399, 1400, 1405, 1411, 1413,
1388  1415, 1422, 1424, 1426, 1428, 1430, 1433, 1435, 1438, 1440,
1389  1442, 1444, 1446, 1448, 1450, 1452, 1455, 1459, 1463, 1467,
1390  1471, 1475, 1476, 1480, 1482, 1485, 1489, 1493, 1494, 1498,
1391  1502, 1506, 1510, 1514, 1515, 1519, 1520, 1524, 1525, 1528,
1392  1529, 1532, 1533, 1536, 1538, 1539, 1543, 1544, 1545, 1546,
1393  1547, 1548, 1557, 1559, 1561, 1563, 1565, 1568, 1570, 1572,
1394  1574, 1576, 1580, 1582, 1585, 1587, 1589, 1591, 1593, 1595,
1395  1597, 1599, 1601, 1603, 1605, 1607, 1609, 1611, 1613, 1615,
1396  1617, 1619, 1621, 1623, 1625, 1627, 1629, 1630, 1635, 1636,
1397  1640, 1641, 1645, 1650, 1653, 1656, 1658, 1661, 1662, 1669,
1398  1678, 1683, 1690, 1695, 1702, 1705, 1710, 1717, 1720, 1725,
1399  1728, 1733, 1735, 1736, 1738, 1740, 1742, 1744, 1746, 1748,
1400  1750, 1752, 1756, 1758, 1762, 1764, 1767, 1769, 1772, 1774,
1401  1776, 1780, 1782, 1786, 1788, 1790, 1793, 1795, 1799, 1803,
1402  1805, 1809, 1811, 1815, 1817, 1819, 1822, 1824, 1826, 1828,
1403  1831, 1834, 1836, 1838, 1839, 1844, 1846, 1849, 1851, 1855,
1404  1859, 1862, 1867, 1870, 1872, 1874, 1876, 1878, 1880, 1882,
1405  1884, 1886, 1888, 1890, 1892, 1894, 1896, 1898, 1900, 1902,
1406  1903, 1905, 1906, 1908, 1911, 1914, 1915, 1917, 1919, 1921,
1407  1923, 1925, 1928
1408 };
1409 
1410 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
1411 static const yytype_int16 yyrhs[] =
1412 {
1413  147, 0, -1, -1, 148, 149, -1, 150, 355, -1,
1414  362, -1, 151, -1, 150, 361, 151, -1, 1, 151,
1415  -1, 158, -1, -1, 47, 152, 134, 149, 135, -1,
1416  154, 276, 237, 279, -1, 155, 355, -1, 362, -1,
1417  156, -1, 155, 361, 156, -1, 1, 158, -1, 158,
1418  -1, -1, 47, 157, 134, 149, 135, -1, -1, 45,
1419  182, 159, 182, -1, 45, 54, 54, -1, 45, 54,
1420  66, -1, 45, 54, 65, -1, 6, 183, -1, 158,
1421  40, 163, -1, 158, 41, 163, -1, 158, 42, 163,
1422  -1, 158, 43, 163, -1, 158, 44, 158, -1, 48,
1423  134, 154, 135, -1, 160, -1, 170, 117, 164, -1,
1424  177, 117, 202, -1, 170, 117, 201, -1, 162, -1,
1425  177, 117, 161, -1, 314, 90, 161, -1, 222, 136,
1426  194, 358, 90, 161, -1, 222, 353, 52, 90, 161,
1427  -1, 222, 353, 56, 90, 161, -1, 222, 88, 56,
1428  90, 161, -1, 222, 88, 52, 90, 161, -1, 315,
1429  90, 161, -1, 164, -1, 164, 44, 158, -1, 160,
1430  -1, 164, -1, 162, 37, 162, -1, 162, 38, 162,
1431  -1, 39, 356, 162, -1, 131, 164, -1, 187, -1,
1432  162, -1, 169, -1, 165, -1, 259, -1, 259, 354,
1433  350, 196, -1, -1, 97, 167, 268, 135, -1, 349,
1434  -1, 168, 196, -1, 168, 196, 166, -1, 222, 353,
1435  350, 196, -1, 222, 353, 350, 196, 166, -1, 222,
1436  88, 350, 196, -1, 222, 88, 350, 196, 166, -1,
1437  32, 196, -1, 31, 196, -1, 30, 195, -1, 21,
1438  195, -1, 22, 195, -1, 172, -1, 92, 171, 357,
1439  -1, 172, -1, 92, 171, 357, -1, 174, -1, 174,
1440  173, -1, 174, 98, 176, -1, 174, 98, 176, 137,
1441  175, -1, 174, 98, -1, 174, 98, 137, 175, -1,
1442  98, 176, -1, 98, 176, 137, 175, -1, 98, -1,
1443  98, 137, 175, -1, 176, -1, 92, 171, 357, -1,
1444  173, 137, -1, 174, 173, 137, -1, 173, -1, 175,
1445  137, 173, -1, 311, -1, 312, -1, 222, 136, 194,
1446  358, -1, 222, 353, 52, -1, 222, 88, 52, -1,
1447  222, 353, 56, -1, 222, 88, 56, -1, 89, 56,
1448  -1, 315, -1, 311, -1, 312, -1, 222, 136, 194,
1449  358, -1, 222, 353, 52, -1, 222, 88, 52, -1,
1450  222, 353, 56, -1, 222, 88, 56, -1, 89, 56,
1451  -1, 315, -1, 52, -1, 56, -1, 89, 178, -1,
1452  178, -1, 222, 88, 178, -1, 52, -1, 56, -1,
1453  53, -1, 185, -1, 186, -1, 180, -1, 306, -1,
1454  181, -1, 308, -1, 182, -1, -1, 183, 137, 184,
1455  182, -1, 122, -1, 123, -1, 124, -1, 71, -1,
1456  72, -1, 73, -1, 79, -1, 80, -1, 120, -1,
1457  75, -1, 121, -1, 76, -1, 74, -1, 85, -1,
1458  86, -1, 125, -1, 126, -1, 127, -1, 98, -1,
1459  128, -1, 129, -1, 70, -1, 99, -1, 131, -1,
1460  132, -1, 68, -1, 69, -1, 83, -1, 84, -1,
1461  138, -1, 49, -1, 50, -1, 51, -1, 47, -1,
1462  48, -1, 45, -1, 37, -1, 7, -1, 21, -1,
1463  16, -1, 3, -1, 5, -1, 46, -1, 26, -1,
1464  15, -1, 14, -1, 10, -1, 9, -1, 36, -1,
1465  20, -1, 25, -1, 4, -1, 22, -1, 34, -1,
1466  39, -1, 38, -1, 23, -1, 8, -1, 24, -1,
1467  30, -1, 33, -1, 32, -1, 13, -1, 35, -1,
1468  6, -1, 17, -1, 31, -1, 11, -1, 12, -1,
1469  18, -1, 19, -1, 177, 117, 191, -1, 314, 90,
1470  191, -1, 222, 136, 194, 358, 90, 191, -1, 222,
1471  353, 52, 90, 191, -1, 222, 353, 56, 90, 191,
1472  -1, 222, 88, 52, 90, 191, -1, 222, 88, 56,
1473  90, 191, -1, 89, 56, 90, 191, -1, 315, 90,
1474  191, -1, 187, 81, 187, -1, 187, 82, 187, -1,
1475  187, 125, 187, -1, 187, 126, 187, -1, 187, 127,
1476  187, -1, 187, 128, 187, -1, 187, 129, 187, -1,
1477  187, 70, 187, -1, 130, 310, 70, 187, -1, 68,
1478  187, -1, 69, 187, -1, 187, 122, 187, -1, 187,
1479  123, 187, -1, 187, 124, 187, -1, 187, 71, 187,
1480  -1, 187, 120, 187, -1, 187, 75, 187, -1, 187,
1481  121, 187, -1, 187, 76, 187, -1, 187, 72, 187,
1482  -1, 187, 73, 187, -1, 187, 74, 187, -1, 187,
1483  79, 187, -1, 187, 80, 187, -1, 131, 187, -1,
1484  132, 187, -1, 187, 85, 187, -1, 187, 86, 187,
1485  -1, 187, 77, 187, -1, 187, 78, 187, -1, -1,
1486  46, 356, 188, 187, -1, 187, 118, 187, 356, 119,
1487  187, -1, 203, -1, 187, -1, 362, -1, 200, 359,
1488  -1, 200, 137, 347, 359, -1, 347, 359, -1, 187,
1489  -1, 187, 44, 187, -1, 139, 194, 357, -1, 362,
1490  -1, 192, -1, 362, -1, 195, -1, 200, 137, -1,
1491  200, 137, 347, 137, -1, 347, 137, -1, 169, -1,
1492  200, 199, -1, 347, 199, -1, 200, 137, 347, 199,
1493  -1, 198, -1, -1, 197, 195, -1, 100, 189, -1,
1494  137, 198, -1, 362, -1, 189, -1, 98, 189, -1,
1495  200, 137, 189, -1, 200, 137, 98, 189, -1, 202,
1496  -1, 189, -1, 200, 137, 189, -1, 200, 137, 98,
1497  189, -1, 98, 189, -1, 280, -1, 281, -1, 284,
1498  -1, 285, -1, 286, -1, 291, -1, 289, -1, 292,
1499  -1, 313, -1, 315, -1, 53, -1, -1, 223, 204,
1500  153, 233, -1, -1, 93, 205, 357, -1, -1, -1,
1501  93, 206, 158, 207, 357, -1, 92, 154, 140, -1,
1502  222, 88, 56, -1, 89, 56, -1, 95, 190, 141,
1503  -1, 96, 346, 135, -1, 30, -1, 31, 139, 195,
1504  357, -1, 31, 139, 357, -1, 31, -1, -1, 46,
1505  356, 139, 208, 162, 357, -1, 39, 139, 162, 357,
1506  -1, 39, 139, 357, -1, 168, 265, -1, 260, -1,
1507  260, 265, -1, 101, 250, -1, 224, 163, 234, 154,
1508  236, 233, -1, 225, 163, 234, 154, 237, 233, -1,
1509  -1, -1, 226, 209, 163, 235, 210, 154, 233, -1,
1510  -1, -1, 227, 211, 163, 235, 212, 154, 233, -1,
1511  228, 163, 355, 274, 233, -1, 228, 355, 274, 233,
1512  -1, -1, -1, 229, 238, 25, 213, 163, 235, 214,
1513  154, 233, -1, -1, 230, 179, 316, 215, 153, 233,
1514  -1, -1, 230, 85, 162, 216, 360, 153, 233, -1,
1515  -1, 231, 179, 217, 153, 233, -1, -1, -1, 232,
1516  180, 218, 219, 318, 153, 233, -1, -1, -1, 232,
1517  344, 352, 220, 180, 221, 318, 153, 233, -1, 21,
1518  -1, 22, -1, 23, -1, 24, -1, 203, -1, 7,
1519  -1, 11, -1, 12, -1, 18, -1, 19, -1, 16,
1520  -1, 20, -1, 3, -1, 4, -1, 5, -1, 10,
1521  -1, 360, -1, 13, -1, 360, 13, -1, 360, -1,
1522  27, -1, 237, -1, 14, 163, 234, 154, 236, -1,
1523  362, -1, 15, 154, -1, 177, -1, 170, -1, 324,
1524  -1, 92, 241, 357, -1, 239, -1, 240, 137, 239,
1525  -1, 240, -1, 240, 137, 98, 324, -1, 240, 137,
1526  98, 324, 137, 240, -1, 240, 137, 98, -1, 240,
1527  137, 98, 137, 240, -1, 98, 324, -1, 98, 324,
1528  137, 240, -1, 98, -1, 98, 137, 240, -1, 331,
1529  137, 334, 343, -1, 331, 343, -1, 334, 343, -1,
1530  342, -1, 137, 242, -1, -1, 327, 137, 337, 137,
1531  340, 243, -1, 327, 137, 337, 137, 340, 137, 327,
1532  243, -1, 327, 137, 337, 243, -1, 327, 137, 337,
1533  137, 327, 243, -1, 327, 137, 340, 243, -1, 327,
1534  137, -1, 327, 137, 340, 137, 327, 243, -1, 327,
1535  243, -1, 337, 137, 340, 243, -1, 337, 137, 340,
1536  137, 327, 243, -1, 337, 243, -1, 337, 137, 327,
1537  243, -1, 340, 243, -1, 340, 137, 327, 243, -1,
1538  242, -1, 362, -1, 246, -1, 122, 247, 122, -1,
1539  78, -1, 122, 244, 247, 122, -1, 356, -1, 356,
1540  142, 248, 356, -1, 249, -1, 248, 137, 249, -1,
1541  52, -1, 323, -1, -1, -1, -1, -1, 251, 252,
1542  255, 253, 254, 256, -1, 139, 322, 247, 140, -1,
1543  322, -1, 114, 154, 135, -1, 29, 154, 233, -1,
1544  -1, 28, 258, 271, 10, -1, 169, 257, -1, 259,
1545  354, 350, 193, -1, 259, 354, 350, 193, 265, -1,
1546  259, 354, 350, 196, 257, -1, 168, 192, -1, -1,
1547  222, 353, 350, 261, 193, -1, -1, 222, 88, 350,
1548  262, 192, -1, 222, 88, 351, -1, -1, 222, 353,
1549  263, 192, -1, -1, 222, 88, 264, 192, -1, 32,
1550  192, -1, 32, -1, 222, 136, 194, 358, -1, -1,
1551  134, 266, 268, 135, -1, -1, 26, 267, 271, 10,
1552  -1, -1, -1, 269, 270, 245, 154, -1, -1, -1,
1553  272, 273, 245, 154, -1, 17, 200, 234, 154, 275,
1554  -1, 237, -1, 274, -1, 8, 277, 278, 234, 154,
1555  276, -1, 362, -1, 189, -1, 202, -1, 362, -1,
1556  91, 177, -1, 362, -1, 9, 154, -1, 362, -1,
1557  309, -1, 306, -1, 308, -1, 282, -1, 64, -1,
1558  283, -1, 282, 283, -1, 103, 295, 113, -1, 104,
1559  296, 113, -1, 105, 297, 67, -1, 106, 143, 113,
1560  -1, 106, 287, 113, -1, -1, 287, 288, 143, -1,
1561  298, -1, 288, 298, -1, 108, 143, 113, -1, 108,
1562  290, 113, -1, -1, 290, 288, 143, -1, 107, 143,
1563  113, -1, 107, 293, 113, -1, 109, 143, 113, -1,
1564  109, 294, 113, -1, -1, 293, 63, 143, -1, -1,
1565  294, 63, 143, -1, -1, 295, 298, -1, -1, 296,
1566  298, -1, -1, 297, 298, -1, 63, -1, -1, 112,
1567  299, 305, -1, -1, -1, -1, -1, -1, 110, 300,
1568  301, 302, 303, 304, 154, 111, -1, 54, -1, 55,
1569  -1, 57, -1, 315, -1, 102, 307, -1, 180, -1,
1570  55, -1, 54, -1, 57, -1, 102, 296, 113, -1,
1571  310, -1, 130, 310, -1, 59, -1, 60, -1, 61,
1572  -1, 62, -1, 52, -1, 55, -1, 54, -1, 56,
1573  -1, 57, -1, 34, -1, 33, -1, 35, -1, 36,
1574  -1, 50, -1, 49, -1, 51, -1, 311, -1, 312,
1575  -1, 311, -1, 312, -1, 65, -1, 66, -1, -1,
1576  121, 317, 163, 360, -1, -1, 139, 322, 357, -1,
1577  -1, 319, 322, 360, -1, 332, 137, 334, 343, -1,
1578  332, 343, -1, 334, 343, -1, 342, -1, 137, 320,
1579  -1, -1, 327, 137, 338, 137, 340, 321, -1, 327,
1580  137, 338, 137, 340, 137, 327, 321, -1, 327, 137,
1581  338, 321, -1, 327, 137, 338, 137, 327, 321, -1,
1582  327, 137, 340, 321, -1, 327, 137, 340, 137, 327,
1583  321, -1, 327, 321, -1, 338, 137, 340, 321, -1,
1584  338, 137, 340, 137, 327, 321, -1, 338, 321, -1,
1585  338, 137, 327, 321, -1, 340, 321, -1, 340, 137,
1586  327, 321, -1, 320, -1, -1, 56, -1, 55, -1,
1587  54, -1, 57, -1, 323, -1, 52, -1, 324, -1,
1588  325, -1, 92, 241, 357, -1, 326, -1, 327, 137,
1589  326, -1, 58, -1, 328, 189, -1, 328, -1, 328,
1590  222, -1, 328, -1, 330, -1, 331, 137, 330, -1,
1591  329, -1, 332, 137, 329, -1, 70, -1, 99, -1,
1592  333, 52, -1, 333, -1, 325, 117, 189, -1, 325,
1593  117, 222, -1, 336, -1, 337, 137, 336, -1, 335,
1594  -1, 338, 137, 335, -1, 127, -1, 98, -1, 339,
1595  52, -1, 339, -1, 124, -1, 100, -1, 341, 52,
1596  -1, 137, 342, -1, 362, -1, 313, -1, -1, 139,
1597  345, 162, 357, -1, 362, -1, 347, 359, -1, 348,
1598  -1, 347, 137, 348, -1, 189, 91, 189, -1, 58,
1599  189, -1, 103, 295, 115, 189, -1, 99, 189, -1,
1600  52, -1, 56, -1, 53, -1, 52, -1, 56, -1,
1601  53, -1, 185, -1, 52, -1, 53, -1, 185, -1,
1602  144, -1, 88, -1, 144, -1, 87, -1, 353, -1,
1603  88, -1, -1, 361, -1, -1, 145, -1, 356, 140,
1604  -1, 356, 141, -1, -1, 145, -1, 137, -1, 142,
1605  -1, 145, -1, 360, -1, 361, 142, -1, -1
1606 };
1607 
1608 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
1609 static const yytype_uint16 yyrline[] =
1610 {
1611  0, 994, 994, 994, 1025, 1035, 1044, 1052, 1060, 1066,
1612  1068, 1067, 1088, 1121, 1131, 1140, 1148, 1156, 1162, 1167,
1613  1166, 1187, 1187, 1195, 1203, 1214, 1225, 1233, 1242, 1251,
1614  1264, 1277, 1286, 1298, 1299, 1309, 1314, 1323, 1326, 1331,
1615  1336, 1357, 1362, 1367, 1372, 1377, 1384, 1392, 1401, 1404,
1616  1405, 1413, 1421, 1429, 1437, 1440, 1452, 1453, 1456, 1457,
1617  1469, 1468, 1484, 1494, 1503, 1516, 1525, 1537, 1546, 1558,
1618  1567, 1576, 1584, 1592, 1602, 1603, 1613, 1614, 1624, 1632,
1619  1640, 1648, 1657, 1665, 1674, 1682, 1691, 1699, 1710, 1711,
1620  1721, 1729, 1739, 1747, 1757, 1761, 1765, 1773, 1781, 1789,
1621  1797, 1801, 1805, 1812, 1821, 1830, 1838, 1846, 1854, 1862,
1622  1866, 1870, 1877, 1886, 1889, 1897, 1905, 1915, 1916, 1917,
1623  1918, 1923, 1934, 1935, 1938, 1946, 1949, 1957, 1957, 1967,
1624  1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977,
1625  1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987,
1626  1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999,
1627  1999, 1999, 2000, 2000, 2001, 2001, 2001, 2002, 2002, 2002,
1628  2002, 2003, 2003, 2003, 2003, 2004, 2004, 2004, 2005, 2005,
1629  2005, 2005, 2006, 2006, 2006, 2006, 2007, 2007, 2007, 2007,
1630  2008, 2008, 2008, 2008, 2009, 2009, 2009, 2009, 2010, 2010,
1631  2013, 2017, 2021, 2047, 2052, 2057, 2062, 2067, 2072, 2077,
1632  2087, 2097, 2105, 2113, 2121, 2129, 2137, 2145, 2154, 2162,
1633  2170, 2178, 2186, 2194, 2202, 2210, 2218, 2226, 2234, 2242,
1634  2250, 2258, 2272, 2280, 2288, 2296, 2304, 2312, 2320, 2328,
1635  2328, 2337, 2347, 2353, 2365, 2366, 2370, 2378, 2388, 2396,
1636  2407, 2417, 2418, 2421, 2422, 2423, 2427, 2435, 2445, 2454,
1637  2462, 2472, 2481, 2490, 2490, 2502, 2512, 2516, 2522, 2530,
1638  2538, 2552, 2568, 2569, 2572, 2586, 2601, 2611, 2612, 2613,
1639  2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2630, 2629,
1640  2657, 2657, 2666, 2670, 2665, 2679, 2687, 2695, 2703, 2716,
1641  2724, 2732, 2740, 2748, 2756, 2756, 2765, 2773, 2781, 2791,
1642  2792, 2802, 2806, 2818, 2830, 2830, 2830, 2841, 2841, 2841,
1643  2852, 2863, 2872, 2874, 2871, 2920, 2919, 2941, 2940, 2962,
1644  2961, 2983, 2988, 2982, 3008, 3009, 3008, 3033, 3041, 3049,
1645  3057, 3067, 3079, 3085, 3091, 3097, 3103, 3109, 3115, 3121,
1646  3127, 3133, 3143, 3149, 3154, 3155, 3162, 3167, 3170, 3171,
1647  3184, 3185, 3195, 3196, 3199, 3207, 3217, 3225, 3235, 3243,
1648  3252, 3261, 3269, 3277, 3286, 3298, 3306, 3317, 3321, 3325,
1649  3329, 3335, 3340, 3345, 3349, 3353, 3357, 3361, 3365, 3373,
1650  3377, 3381, 3385, 3389, 3393, 3397, 3401, 3405, 3411, 3412,
1651  3418, 3428, 3437, 3449, 3453, 3463, 3470, 3479, 3487, 3493,
1652  3496, 3501, 3504, 3493, 3523, 3531, 3537, 3542, 3549, 3548,
1653  3563, 3579, 3588, 3600, 3614, 3624, 3623, 3640, 3639, 3655,
1654  3664, 3663, 3680, 3679, 3696, 3704, 3712, 3727, 3726, 3740,
1655  3739, 3754, 3755, 3754, 3764, 3765, 3764, 3774, 3786, 3787,
1656  3790, 3809, 3812, 3820, 3828, 3831, 3835, 3838, 3846, 3849,
1657  3850, 3858, 3861, 3878, 3879, 3880, 3890, 3896, 3902, 3908,
1658  3917, 3928, 3935, 3945, 3953, 3963, 3972, 3983, 3990, 4008,
1659  4017, 4027, 4036, 4047, 4054, 4065, 4072, 4087, 4094, 4105,
1660  4112, 4123, 4130, 4171, 4173, 4172, 4188, 4194, 4198, 4202,
1661  4206, 4187, 4228, 4236, 4244, 4252, 4255, 4266, 4267, 4268,
1662  4269, 4272, 4283, 4284, 4295, 4296, 4297, 4298, 4301, 4302,
1663  4303, 4304, 4305, 4308, 4309, 4310, 4311, 4312, 4313, 4314,
1664  4317, 4330, 4340, 4348, 4358, 4359, 4363, 4362, 4372, 4381,
1665  4391, 4391, 4405, 4409, 4413, 4417, 4423, 4428, 4433, 4437,
1666  4441, 4445, 4449, 4453, 4457, 4461, 4465, 4469, 4473, 4477,
1667  4481, 4485, 4490, 4496, 4506, 4516, 4526, 4538, 4539, 4546,
1668  4555, 4564, 4583, 4590, 4604, 4613, 4623, 4635, 4644, 4655,
1669  4663, 4674, 4682, 4692, 4693, 4696, 4701, 4708, 4720, 4732,
1670  4740, 4756, 4764, 4780, 4781, 4784, 4797, 4808, 4809, 4812,
1671  4829, 4833, 4843, 4853, 4853, 4882, 4883, 4893, 4900, 4924,
1672  4936, 4944, 4952, 4966, 4967, 4968, 4971, 4972, 4973, 4974,
1673  4977, 4978, 4979, 4982, 4987, 4994, 5002, 5012, 5013, 5023,
1674  5024, 5027, 5028, 5031, 5034, 5037, 5038, 5039, 5042, 5043,
1675  5046, 5047, 5051
1676 };
1677 #endif
1678 
1679 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1680 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1681  First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1682 static const char *const yytname[] =
1683 {
1684  "\"end-of-input\"", "error", "$undefined", "keyword_class",
1685  "keyword_module", "keyword_def", "keyword_undef", "keyword_begin",
1686  "keyword_rescue", "keyword_ensure", "keyword_end", "keyword_if",
1687  "keyword_unless", "keyword_then", "keyword_elsif", "keyword_else",
1688  "keyword_case", "keyword_when", "keyword_while", "keyword_until",
1689  "keyword_for", "keyword_break", "keyword_next", "keyword_redo",
1690  "keyword_retry", "keyword_in", "keyword_do", "keyword_do_cond",
1691  "keyword_do_block", "keyword_do_LAMBDA", "keyword_return",
1692  "keyword_yield", "keyword_super", "keyword_self", "keyword_nil",
1693  "keyword_true", "keyword_false", "keyword_and", "keyword_or",
1694  "keyword_not", "modifier_if", "modifier_unless", "modifier_while",
1695  "modifier_until", "modifier_rescue", "keyword_alias", "keyword_defined",
1696  "keyword_BEGIN", "keyword_END", "keyword__LINE__", "keyword__FILE__",
1697  "keyword__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR",
1698  "tCONSTANT", "tCVAR", "tLABEL", "tINTEGER", "tFLOAT", "tRATIONAL",
1699  "tIMAGINARY", "tSTRING_CONTENT", "tCHAR", "tNTH_REF", "tBACK_REF",
1700  "tREGEXP_END", "\"unary+\"", "\"unary-\"", "\"**\"", "\"<=>\"", "\"==\"",
1701  "\"===\"", "\"!=\"", "\">=\"", "\"<=\"", "\"&&\"", "\"||\"", "\"=~\"",
1702  "\"!~\"", "\"..\"", "\"...\"", "\"[]\"", "\"[]=\"", "\"<<\"", "\">>\"",
1703  "\"&.\"", "\"::\"", "\":: at EXPR_BEG\"", "tOP_ASGN", "\"=>\"", "\"(\"",
1704  "\"( arg\"", "\")\"", "\"[\"", "\"{\"", "\"{ arg\"", "\"*\"",
1705  "\"**arg\"", "\"&\"", "\"->\"", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG",
1706  "tREGEXP_BEG", "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG",
1707  "tQSYMBOLS_BEG", "tSTRING_DBEG", "tSTRING_DEND", "tSTRING_DVAR",
1708  "tSTRING_END", "tLAMBEG", "tLABEL_END", "tLOWEST", "'='", "'?'", "':'",
1709  "'>'", "'<'", "'|'", "'^'", "'&'", "'+'", "'-'", "'*'", "'/'", "'%'",
1710  "tUMINUS_NUM", "'!'", "'~'", "tLAST_TOKEN", "'{'", "'}'", "'['", "','",
1711  "'`'", "'('", "')'", "']'", "';'", "' '", "'.'", "'\\n'", "$accept",
1712  "program", "$@1", "top_compstmt", "top_stmts", "top_stmt", "$@2",
1713  "bodystmt", "compstmt", "stmts", "stmt_or_begin", "$@3", "stmt", "$@4",
1714  "command_asgn", "command_rhs", "expr", "expr_value", "command_call",
1715  "block_command", "cmd_brace_block", "@5", "fcall", "command", "mlhs",
1716  "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head", "mlhs_post",
1717  "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", "fitem",
1718  "undef_list", "$@6", "op", "reswords", "arg", "$@7", "arg_value",
1719  "aref_args", "arg_rhs", "paren_args", "opt_paren_args", "opt_call_args",
1720  "call_args", "command_args", "@8", "block_arg", "opt_block_arg", "args",
1721  "mrhs_arg", "mrhs", "primary", "@9", "$@10", "$@11", "$@12", "$@13",
1722  "$@14", "$@15", "$@16", "$@17", "$@18", "$@19", "@20", "@21", "@22",
1723  "@23", "@24", "@25", "@26", "primary_value", "k_begin", "k_if",
1724  "k_unless", "k_while", "k_until", "k_case", "k_for", "k_class",
1725  "k_module", "k_def", "k_end", "then", "do", "if_tail", "opt_else",
1726  "for_var", "f_marg", "f_marg_list", "f_margs", "block_args_tail",
1727  "opt_block_args_tail", "block_param", "opt_block_param",
1728  "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "lambda", "@27",
1729  "@28", "@29", "@30", "f_larglist", "lambda_body", "do_block", "@31",
1730  "block_call", "method_call", "@32", "@33", "@34", "@35", "brace_block",
1731  "@36", "@37", "brace_body", "@38", "@39", "do_body", "@40", "@41",
1732  "case_body", "cases", "opt_rescue", "exc_list", "exc_var", "opt_ensure",
1733  "literal", "strings", "string", "string1", "xstring", "regexp", "words",
1734  "word_list", "word", "symbols", "symbol_list", "qwords", "qsymbols",
1735  "qword_list", "qsym_list", "string_contents", "xstring_contents",
1736  "regexp_contents", "string_content", "@42", "@43", "@44", "@45", "@46",
1737  "@47", "string_dvar", "symbol", "sym", "dsym", "numeric",
1738  "simple_numeric", "user_variable", "keyword_variable", "var_ref",
1739  "var_lhs", "backref", "superclass", "$@48", "f_arglist", "@49",
1740  "args_tail", "opt_args_tail", "f_args", "f_bad_arg", "f_norm_arg",
1741  "f_arg_asgn", "f_arg_item", "f_arg", "f_label", "f_kw", "f_block_kw",
1742  "f_block_kwarg", "f_kwarg", "kwrest_mark", "f_kwrest", "f_opt",
1743  "f_block_opt", "f_block_optarg", "f_optarg", "restarg_mark",
1744  "f_rest_arg", "blkarg_mark", "f_block_arg", "opt_f_block_arg",
1745  "singleton", "$@50", "assoc_list", "assocs", "assoc", "operation",
1746  "operation2", "operation3", "dot_or_colon", "call_op", "call_op2",
1747  "opt_terms", "opt_nl", "rparen", "rbracket", "trailer", "term", "terms",
1748  "none", 0
1749 };
1750 #endif
1751 
1752 # ifdef YYPRINT
1753 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1754  token YYLEX-NUM. */
1755 static const yytype_uint16 yytoknum[] =
1756 {
1757  0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1758  265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1759  275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1760  285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1761  295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1762  305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1763  315, 316, 317, 318, 319, 320, 321, 322, 130, 131,
1764  132, 134, 139, 140, 141, 138, 137, 148, 149, 142,
1765  143, 128, 129, 144, 145, 135, 136, 150, 323, 324,
1766  325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1767  335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
1768  345, 346, 347, 348, 349, 350, 351, 61, 63, 58,
1769  62, 60, 124, 94, 38, 43, 45, 42, 47, 37,
1770  352, 33, 126, 353, 123, 125, 91, 44, 96, 40,
1771  41, 93, 59, 32, 46, 10
1772 };
1773 # endif
1774 
1775 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1776 static const yytype_uint16 yyr1[] =
1777 {
1778  0, 146, 148, 147, 149, 150, 150, 150, 150, 151,
1779  152, 151, 153, 154, 155, 155, 155, 155, 156, 157,
1780  156, 159, 158, 158, 158, 158, 158, 158, 158, 158,
1781  158, 158, 158, 158, 158, 158, 158, 158, 160, 160,
1782  160, 160, 160, 160, 160, 160, 161, 161, 161, 162,
1783  162, 162, 162, 162, 162, 163, 164, 164, 165, 165,
1784  167, 166, 168, 169, 169, 169, 169, 169, 169, 169,
1785  169, 169, 169, 169, 170, 170, 171, 171, 172, 172,
1786  172, 172, 172, 172, 172, 172, 172, 172, 173, 173,
1787  174, 174, 175, 175, 176, 176, 176, 176, 176, 176,
1788  176, 176, 176, 177, 177, 177, 177, 177, 177, 177,
1789  177, 177, 178, 178, 179, 179, 179, 180, 180, 180,
1790  180, 180, 181, 181, 182, 182, 183, 184, 183, 185,
1791  185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
1792  185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
1793  185, 185, 185, 185, 185, 185, 185, 185, 185, 186,
1794  186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
1795  186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
1796  186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
1797  186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
1798  187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
1799  187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
1800  187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
1801  187, 187, 187, 187, 187, 187, 187, 187, 187, 188,
1802  187, 187, 187, 189, 190, 190, 190, 190, 191, 191,
1803  192, 193, 193, 194, 194, 194, 194, 194, 195, 195,
1804  195, 195, 195, 197, 196, 198, 199, 199, 200, 200,
1805  200, 200, 201, 201, 202, 202, 202, 203, 203, 203,
1806  203, 203, 203, 203, 203, 203, 203, 203, 204, 203,
1807  205, 203, 206, 207, 203, 203, 203, 203, 203, 203,
1808  203, 203, 203, 203, 208, 203, 203, 203, 203, 203,
1809  203, 203, 203, 203, 209, 210, 203, 211, 212, 203,
1810  203, 203, 213, 214, 203, 215, 203, 216, 203, 217,
1811  203, 218, 219, 203, 220, 221, 203, 203, 203, 203,
1812  203, 222, 223, 224, 225, 226, 227, 228, 229, 230,
1813  231, 232, 233, 234, 234, 234, 235, 235, 236, 236,
1814  237, 237, 238, 238, 239, 239, 240, 240, 241, 241,
1815  241, 241, 241, 241, 241, 241, 241, 242, 242, 242,
1816  242, 243, 243, 244, 244, 244, 244, 244, 244, 244,
1817  244, 244, 244, 244, 244, 244, 244, 244, 245, 245,
1818  246, 246, 246, 247, 247, 248, 248, 249, 249, 251,
1819  252, 253, 254, 250, 255, 255, 256, 256, 258, 257,
1820  259, 259, 259, 259, 260, 261, 260, 262, 260, 260,
1821  263, 260, 264, 260, 260, 260, 260, 266, 265, 267,
1822  265, 269, 270, 268, 272, 273, 271, 274, 275, 275,
1823  276, 276, 277, 277, 277, 278, 278, 279, 279, 280,
1824  280, 280, 281, 282, 282, 282, 283, 284, 285, 286,
1825  286, 287, 287, 288, 288, 289, 289, 290, 290, 291,
1826  291, 292, 292, 293, 293, 294, 294, 295, 295, 296,
1827  296, 297, 297, 298, 299, 298, 300, 301, 302, 303,
1828  304, 298, 305, 305, 305, 305, 306, 307, 307, 307,
1829  307, 308, 309, 309, 310, 310, 310, 310, 311, 311,
1830  311, 311, 311, 312, 312, 312, 312, 312, 312, 312,
1831  313, 313, 314, 314, 315, 315, 317, 316, 316, 318,
1832  319, 318, 320, 320, 320, 320, 321, 321, 322, 322,
1833  322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
1834  322, 322, 322, 323, 323, 323, 323, 324, 324, 325,
1835  326, 326, 327, 327, 328, 329, 329, 330, 330, 331,
1836  331, 332, 332, 333, 333, 334, 334, 335, 336, 337,
1837  337, 338, 338, 339, 339, 340, 340, 341, 341, 342,
1838  343, 343, 344, 345, 344, 346, 346, 347, 347, 348,
1839  348, 348, 348, 349, 349, 349, 350, 350, 350, 350,
1840  351, 351, 351, 352, 352, 353, 353, 354, 354, 355,
1841  355, 356, 356, 357, 358, 359, 359, 359, 360, 360,
1842  361, 361, 362
1843 };
1844 
1845 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
1846 static const yytype_uint8 yyr2[] =
1847 {
1848  0, 2, 0, 2, 2, 1, 1, 3, 2, 1,
1849  0, 5, 4, 2, 1, 1, 3, 2, 1, 0,
1850  5, 0, 4, 3, 3, 3, 2, 3, 3, 3,
1851  3, 3, 4, 1, 3, 3, 3, 1, 3, 3,
1852  6, 5, 5, 5, 5, 3, 1, 3, 1, 1,
1853  3, 3, 3, 2, 1, 1, 1, 1, 1, 4,
1854  0, 4, 1, 2, 3, 4, 5, 4, 5, 2,
1855  2, 2, 2, 2, 1, 3, 1, 3, 1, 2,
1856  3, 5, 2, 4, 2, 4, 1, 3, 1, 3,
1857  2, 3, 1, 3, 1, 1, 4, 3, 3, 3,
1858  3, 2, 1, 1, 1, 4, 3, 3, 3, 3,
1859  2, 1, 1, 1, 2, 1, 3, 1, 1, 1,
1860  1, 1, 1, 1, 1, 1, 1, 0, 4, 1,
1861  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1862  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1863  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1864  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1865  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1866  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1867  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1868  3, 3, 6, 5, 5, 5, 5, 4, 3, 3,
1869  3, 3, 3, 3, 3, 3, 3, 4, 2, 2,
1870  3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
1871  3, 3, 3, 2, 2, 3, 3, 3, 3, 0,
1872  4, 6, 1, 1, 1, 2, 4, 2, 1, 3,
1873  3, 1, 1, 1, 1, 2, 4, 2, 1, 2,
1874  2, 4, 1, 0, 2, 2, 2, 1, 1, 2,
1875  3, 4, 1, 1, 3, 4, 2, 1, 1, 1,
1876  1, 1, 1, 1, 1, 1, 1, 1, 0, 4,
1877  0, 3, 0, 0, 5, 3, 3, 2, 3, 3,
1878  1, 4, 3, 1, 0, 6, 4, 3, 2, 1,
1879  2, 2, 6, 6, 0, 0, 7, 0, 0, 7,
1880  5, 4, 0, 0, 9, 0, 6, 0, 7, 0,
1881  5, 0, 0, 7, 0, 0, 9, 1, 1, 1,
1882  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1883  1, 1, 1, 1, 1, 2, 1, 1, 1, 5,
1884  1, 2, 1, 1, 1, 3, 1, 3, 1, 4,
1885  6, 3, 5, 2, 4, 1, 3, 4, 2, 2,
1886  1, 2, 0, 6, 8, 4, 6, 4, 2, 6,
1887  2, 4, 6, 2, 4, 2, 4, 1, 1, 1,
1888  3, 1, 4, 1, 4, 1, 3, 1, 1, 0,
1889  0, 0, 0, 6, 4, 1, 3, 3, 0, 4,
1890  2, 4, 5, 5, 2, 0, 5, 0, 5, 3,
1891  0, 4, 0, 4, 2, 1, 4, 0, 4, 0,
1892  4, 0, 0, 4, 0, 0, 4, 5, 1, 1,
1893  6, 1, 1, 1, 1, 2, 1, 2, 1, 1,
1894  1, 1, 1, 1, 1, 2, 3, 3, 3, 3,
1895  3, 0, 3, 1, 2, 3, 3, 0, 3, 3,
1896  3, 3, 3, 0, 3, 0, 3, 0, 2, 0,
1897  2, 0, 2, 1, 0, 3, 0, 0, 0, 0,
1898  0, 8, 1, 1, 1, 1, 2, 1, 1, 1,
1899  1, 3, 1, 2, 1, 1, 1, 1, 1, 1,
1900  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1901  1, 1, 1, 1, 1, 1, 0, 4, 0, 3,
1902  0, 3, 4, 2, 2, 1, 2, 0, 6, 8,
1903  4, 6, 4, 6, 2, 4, 6, 2, 4, 2,
1904  4, 1, 0, 1, 1, 1, 1, 1, 1, 1,
1905  1, 3, 1, 3, 1, 2, 1, 2, 1, 1,
1906  3, 1, 3, 1, 1, 2, 1, 3, 3, 1,
1907  3, 1, 3, 1, 1, 2, 1, 1, 1, 2,
1908  2, 1, 1, 0, 4, 1, 2, 1, 3, 3,
1909  2, 4, 2, 1, 1, 1, 1, 1, 1, 1,
1910  1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
1911  1, 0, 1, 2, 2, 0, 1, 1, 1, 1,
1912  1, 2, 0
1913 };
1914 
1915 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
1916  Performed when YYTABLE doesn't specify something else to do. Zero
1917  means the default is an error. */
1918 static const yytype_uint16 yydefact[] =
1919 {
1920  2, 0, 0, 1, 0, 349, 350, 351, 0, 342,
1921  343, 344, 347, 345, 346, 348, 337, 338, 339, 340,
1922  300, 263, 263, 524, 523, 525, 526, 631, 0, 631,
1923  10, 0, 528, 527, 529, 613, 615, 520, 519, 614,
1924  522, 514, 515, 516, 517, 463, 534, 535, 0, 0,
1925  0, 0, 292, 642, 642, 86, 409, 489, 487, 489,
1926  491, 471, 483, 477, 485, 0, 0, 0, 3, 629,
1927  6, 9, 33, 37, 49, 57, 263, 56, 0, 74,
1928  0, 78, 88, 0, 54, 242, 0, 288, 0, 0,
1929  314, 317, 629, 0, 0, 0, 0, 58, 309, 277,
1930  278, 462, 464, 279, 280, 281, 283, 282, 284, 460,
1931  461, 459, 512, 530, 531, 285, 0, 286, 62, 5,
1932  8, 169, 180, 170, 193, 166, 186, 176, 175, 196,
1933  197, 191, 174, 173, 168, 194, 198, 199, 178, 167,
1934  181, 185, 187, 179, 172, 188, 195, 190, 189, 182,
1935  192, 177, 165, 184, 183, 164, 171, 162, 163, 159,
1936  160, 161, 117, 119, 118, 154, 155, 150, 132, 133,
1937  134, 141, 138, 140, 135, 136, 156, 157, 142, 143,
1938  147, 151, 137, 139, 129, 130, 131, 144, 145, 146,
1939  148, 149, 152, 153, 158, 122, 124, 126, 26, 120,
1940  121, 123, 125, 0, 0, 0, 0, 0, 0, 0,
1941  487, 0, 258, 0, 243, 268, 72, 262, 642, 0,
1942  530, 531, 0, 286, 642, 607, 73, 71, 631, 70,
1943  0, 642, 434, 69, 631, 632, 0, 0, 21, 239,
1944  0, 0, 337, 338, 300, 303, 435, 0, 218, 0,
1945  219, 297, 0, 19, 0, 0, 629, 15, 18, 631,
1946  76, 14, 631, 0, 0, 635, 635, 244, 0, 0,
1947  635, 605, 631, 0, 0, 0, 84, 341, 0, 94,
1948  95, 102, 311, 410, 509, 508, 510, 507, 0, 506,
1949  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1950  0, 513, 53, 233, 234, 638, 639, 4, 640, 630,
1951  0, 0, 0, 0, 0, 0, 0, 439, 437, 424,
1952  63, 308, 418, 420, 0, 90, 0, 82, 79, 0,
1953  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1954  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1955  0, 0, 0, 0, 0, 0, 626, 432, 642, 625,
1956  430, 0, 55, 0, 0, 0, 0, 629, 0, 630,
1957  0, 363, 362, 0, 0, 530, 531, 286, 112, 113,
1958  0, 0, 115, 538, 0, 530, 531, 286, 329, 189,
1959  182, 192, 177, 159, 160, 161, 117, 118, 603, 331,
1960  602, 0, 628, 627, 0, 310, 465, 0, 0, 127,
1961  610, 297, 269, 612, 265, 0, 0, 0, 0, 259,
1962  267, 432, 642, 430, 0, 0, 0, 260, 631, 0,
1963  302, 264, 631, 254, 642, 642, 253, 631, 307, 52,
1964  23, 25, 24, 0, 304, 0, 0, 0, 432, 430,
1965  0, 17, 0, 631, 295, 13, 630, 75, 291, 293,
1966  298, 637, 636, 245, 637, 247, 299, 606, 0, 101,
1967  513, 92, 87, 0, 432, 642, 430, 562, 493, 496,
1968  494, 511, 490, 466, 488, 467, 468, 492, 469, 470,
1969  0, 473, 479, 0, 480, 475, 476, 0, 481, 0,
1970  482, 0, 641, 7, 27, 28, 29, 30, 31, 50,
1971  51, 444, 441, 60, 64, 444, 0, 34, 273, 0,
1972  36, 272, 631, 0, 80, 91, 48, 38, 46, 0,
1973  248, 268, 200, 35, 0, 286, 216, 223, 228, 229,
1974  230, 225, 227, 237, 238, 231, 232, 209, 210, 235,
1975  236, 631, 224, 226, 220, 221, 222, 211, 212, 213,
1976  214, 215, 616, 618, 617, 619, 0, 263, 429, 631,
1977  616, 618, 617, 619, 0, 263, 0, 642, 354, 0,
1978  353, 0, 0, 0, 0, 0, 0, 297, 432, 642,
1979  430, 322, 327, 112, 113, 114, 536, 325, 432, 642,
1980  430, 0, 0, 332, 624, 623, 334, 616, 617, 263,
1981  39, 248, 201, 45, 208, 0, 0, 609, 0, 270,
1982  266, 642, 616, 617, 631, 616, 617, 608, 301, 633,
1983  250, 255, 257, 306, 22, 0, 240, 0, 32, 427,
1984  425, 207, 0, 77, 16, 631, 635, 0, 85, 620,
1985  100, 631, 616, 617, 568, 565, 564, 563, 566, 574,
1986  583, 0, 594, 584, 598, 597, 593, 562, 411, 561,
1987  415, 567, 569, 570, 572, 547, 576, 581, 642, 586,
1988  642, 591, 547, 596, 547, 0, 545, 497, 0, 472,
1989  474, 484, 478, 486, 217, 0, 445, 0, 442, 441,
1990  0, 276, 0, 89, 83, 0, 0, 0, 0, 432,
1991  642, 430, 0, 0, 0, 433, 67, 0, 0, 436,
1992  0, 0, 431, 65, 642, 352, 289, 642, 642, 451,
1993  642, 355, 642, 357, 315, 356, 318, 0, 0, 321,
1994  620, 296, 631, 616, 617, 0, 0, 0, 0, 112,
1995  113, 116, 631, 0, 631, 540, 0, 252, 421, 59,
1996  251, 128, 611, 271, 261, 0, 0, 436, 0, 0,
1997  642, 631, 11, 0, 294, 246, 93, 436, 0, 375,
1998  366, 368, 631, 364, 631, 412, 0, 0, 554, 575,
1999  0, 543, 601, 585, 0, 544, 0, 557, 595, 0,
2000  559, 599, 498, 502, 503, 504, 495, 505, 440, 642,
2001  438, 642, 0, 419, 0, 274, 81, 47, 249, 616,
2002  617, 631, 616, 617, 0, 44, 205, 43, 206, 68,
2003  428, 634, 0, 41, 203, 42, 204, 66, 426, 452,
2004  453, 642, 454, 0, 642, 360, 0, 0, 358, 0,
2005  0, 0, 320, 0, 0, 436, 0, 0, 0, 0,
2006  436, 330, 604, 562, 0, 562, 335, 422, 423, 0,
2007  256, 305, 20, 631, 0, 373, 0, 571, 0, 403,
2008  0, 587, 546, 573, 547, 547, 582, 642, 600, 547,
2009  592, 547, 570, 547, 499, 401, 631, 0, 399, 398,
2010  0, 61, 275, 436, 241, 40, 202, 0, 0, 456,
2011  361, 0, 12, 458, 0, 312, 313, 0, 0, 270,
2012  642, 323, 0, 537, 326, 631, 0, 0, 540, 365,
2013  376, 0, 371, 367, 414, 0, 0, 0, 413, 0,
2014  550, 0, 552, 542, 0, 558, 0, 555, 560, 500,
2015  397, 631, 0, 570, 382, 578, 579, 642, 642, 589,
2016  382, 382, 380, 446, 443, 0, 455, 0, 530, 531,
2017  286, 0, 457, 0, 316, 319, 448, 449, 447, 0,
2018  328, 539, 333, 541, 0, 0, 374, 0, 369, 407,
2019  631, 405, 408, 0, 0, 547, 547, 547, 547, 0,
2020  0, 400, 0, 388, 390, 0, 577, 0, 378, 379,
2021  0, 393, 0, 395, 297, 432, 642, 430, 642, 642,
2022  0, 0, 372, 0, 0, 404, 417, 416, 551, 0,
2023  548, 553, 556, 0, 402, 588, 381, 382, 382, 297,
2024  432, 580, 642, 382, 590, 382, 382, 620, 296, 631,
2025  616, 617, 450, 359, 324, 336, 370, 406, 547, 501,
2026  0, 385, 0, 387, 620, 296, 377, 0, 394, 0,
2027  391, 396, 436, 549, 382, 382, 382, 382, 386, 0,
2028  383, 389, 392, 382, 384
2029 };
2030 
2031 /* YYDEFGOTO[NTERM-NUM]. */
2032 static const yytype_int16 yydefgoto[] =
2033 {
2034  -1, 1, 2, 68, 69, 70, 240, 576, 577, 256,
2035  257, 452, 258, 443, 72, 527, 73, 363, 74, 75,
2036  514, 699, 247, 77, 78, 259, 79, 80, 81, 472,
2037  82, 213, 382, 383, 195, 196, 197, 198, 615, 565,
2038  200, 84, 445, 215, 264, 532, 232, 758, 432, 433,
2039  229, 230, 217, 419, 434, 520, 521, 85, 361, 262,
2040  263, 645, 635, 365, 850, 366, 851, 745, 979, 748,
2041  746, 601, 603, 755, 756, 928, 249, 87, 88, 89,
2042  90, 91, 92, 93, 94, 95, 96, 726, 579, 734,
2043  847, 848, 374, 780, 781, 782, 1036, 1004, 951, 897,
2044  898, 878, 990, 991, 282, 283, 477, 785, 880, 668,
2045  938, 323, 515, 97, 98, 724, 717, 574, 566, 321,
2046  512, 511, 697, 698, 811, 695, 696, 809, 586, 978,
2047  728, 841, 908, 912, 99, 100, 101, 102, 103, 104,
2048  105, 294, 490, 106, 298, 107, 108, 296, 300, 290,
2049  288, 292, 482, 688, 687, 802, 894, 949, 999, 806,
2050  109, 289, 110, 111, 112, 220, 221, 115, 222, 223,
2051  597, 747, 864, 865, 882, 788, 670, 671, 672, 892,
2052  674, 675, 676, 677, 956, 957, 678, 679, 680, 681,
2053  959, 960, 682, 683, 684, 685, 686, 791, 401, 602,
2054  269, 435, 225, 118, 639, 568, 606, 600, 404, 307,
2055  429, 430, 719, 463, 580, 369, 261
2056 };
2057 
2058 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
2059  STATE-NUM. */
2060 #define YYPACT_NINF -876
2061 static const yytype_int16 yypact[] =
2062 {
2063  -876, 96, 3133, -876, 8152, -876, -876, -876, 7646, -876,
2064  -876, -876, -876, -876, -876, -876, 8269, 8269, -876, -876,
2065  8269, 4485, 4071, -876, -876, -876, -876, 235, 7510, -1,
2066  -876, 81, -876, -876, -876, 3381, 4209, -876, -876, 3519,
2067  -876, -876, -876, -876, -876, -876, -876, -876, 9673, 9673,
2068  172, 5845, -3, 8620, 8971, 7912, -876, 7374, -876, -876,
2069  -876, 234, 278, 284, 295, 1381, 9790, 9673, -876, 333,
2070  -876, 1276, -876, 125, -876, -876, 141, 406, 329, -876,
2071  318, 10024, -876, 363, 2119, 45, 338, -876, 9907, 9907,
2072  -876, -876, 6746, 10137, 10250, 10363, 7237, 12, 67, -876,
2073  -876, 380, -876, -876, -876, -876, -876, -876, -876, -876,
2074  -876, -876, -876, 225, 574, -876, 395, 598, -876, -876,
2075  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2076  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2077  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2078  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2079  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2080  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2081  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2082  -876, -876, -876, -876, -876, -876, -876, -876, 387, -876,
2083  -876, -876, -876, 388, 9673, 473, 5977, 9673, 9673, 9673,
2084  -876, 9673, -876, 454, 2119, 451, -876, -876, 442, 421,
2085  51, 210, 503, 268, 472, -876, -876, -876, 6629, -876,
2086  8269, 8269, -876, -876, 6863, -876, 9907, 523, -876, 488,
2087  507, 6109, -876, -876, -876, 524, 533, 141, -876, 606,
2088  572, 629, 8386, -876, 5845, 504, 333, -876, 1276, -1,
2089  550, -876, -1, 8386, 534, -11, 76, -876, 451, 548,
2090  76, -876, -1, 621, 1381, 10476, 549, -876, 702, 883,
2091  974, 976, -876, -876, -876, -876, -876, -876, 505, -876,
2092  674, 712, 492, 582, 1109, 590, 40, 593, 1152, 601,
2093  47, 626, -876, -876, -876, -876, -876, -876, -876, 6980,
2094  9907, 9907, 9907, 9907, 8386, 9907, 9907, -876, -876, -876,
2095  624, -876, -876, -876, 9088, -876, 5845, 8032, 581, 9088,
2096  9673, 9673, 9673, 9673, 9673, 9673, 9673, 9673, 9673, 9673,
2097  9673, 9673, 9673, 9673, 9673, 9673, 9673, 9673, 9673, 9673,
2098  9673, 9673, 9673, 9673, 9673, 9673, -876, 1985, 8269, -876,
2099  2365, 5182, 125, 116, 116, 9907, 9907, 333, 726, 587,
2100  698, -876, -876, 1000, 733, 66, 129, 136, 52, 730,
2101  9907, 583, -876, 634, 1012, -876, -876, -876, -876, 25,
2102  27, 29, 30, 39, 88, 90, 216, 291, -876, -876,
2103  -876, 299, -876, -876, 2639, -876, -876, 9790, 9790, -876,
2104  -876, 322, -876, -876, -876, 425, 9673, 9673, 8503, -876,
2105  -876, 10765, 8269, 10846, 9673, 9673, 8737, -876, -1, 625,
2106  -876, -876, -1, -876, 635, 637, -876, 49, -876, -876,
2107  -876, -876, -876, 7646, -876, 9673, 6252, 641, 10765, 10846,
2108  9673, 1276, 649, -1, -876, -876, 7097, 648, -876, 1276,
2109  -876, 8854, -876, -876, 8971, -876, -876, -876, 488, 1014,
2110  -876, -876, 654, 10476, 10927, 8269, 11008, 1156, -876, -876,
2111  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2112  287, -876, -876, 657, -876, -876, -876, 390, -876, 663,
2113  -876, 9673, -876, -876, -876, -876, -876, -876, -876, -876,
2114  -876, -876, -876, -876, -876, -876, 9673, -876, 660, 676,
2115  -876, -876, -1, 10476, 679, -876, -876, -876, 767, 719,
2116  1264, -876, -876, -876, 1017, 323, 572, 2443, 2443, 2443,
2117  2443, 969, 969, 3497, 3359, 2443, 2443, 3221, 3221, 818,
2118  818, 2710, 969, 969, 834, 834, 765, 542, 542, 572,
2119  572, 572, 4623, 3657, 4899, 3795, 533, 690, -876, -1,
2120  643, -876, 740, -876, 533, 4347, 830, 833, -876, 5325,
2121  831, 5611, 256, 256, 726, 9205, 830, 147, 11089, 8269,
2122  11170, -876, 125, -876, 1014, -876, -876, -876, 11251, 8269,
2123  2639, 5182, 9907, -876, -876, -876, -876, -876, -876, 1288,
2124  -876, 1391, -876, -876, -876, 7646, 9673, -876, 9673, 451,
2125  -876, 472, 3243, 3933, -1, 339, 382, -876, -876, -876,
2126  -876, 8503, 8737, -876, -876, 9907, 2119, 708, -876, -876,
2127  -876, -876, 6252, 274, -876, -1, 76, 10476, 654, 424,
2128  306, -1, 411, 461, -876, -876, -876, -876, -876, -876,
2129  -876, 1214, -876, -876, -876, -876, -876, 1584, -876, -876,
2130  -876, -876, -876, 731, -876, 710, 9673, -876, 717, 803,
2131  722, -876, 724, 810, 728, 815, -876, -876, 1224, -876,
2132  -876, -876, -876, -876, 572, 860, -876, 738, -876, -876,
2133  865, 739, 9322, -876, 654, 10476, 8386, 9790, 9673, 11332,
2134  8269, 11413, 763, 9790, 9790, -876, 624, 533, 754, 741,
2135  9790, 9790, -876, 624, 533, -876, -876, 9439, 882, -876,
2136  571, -876, 882, -876, -876, -876, -876, 830, 82, -876,
2137  72, 103, -1, 155, 162, 9907, 333, 9907, 5182, 898,
2138  306, -876, -1, 830, 49, 762, 7782, -876, 67, 406,
2139  -876, -876, -876, -876, -876, 9673, 9673, 404, 9673, 9673,
2140  773, 49, -876, 780, -876, -876, -876, 528, 1214, 576,
2141  -876, 779, -1, -876, -1, -876, 9673, 1584, -876, -876,
2142  699, -876, -876, -876, 377, -876, 1584, -876, -876, 1175,
2143  -876, -876, -876, -876, -876, -876, -876, -876, -876, 33,
2144  -876, 33, 782, -876, 9673, 785, 654, -876, 2119, 4761,
2145  5037, -1, 432, 563, 9673, -876, -876, -876, -876, -876,
2146  -876, -876, 9790, -876, -876, -876, -876, -876, -876, 660,
2147  -876, 837, -876, 5728, 921, -876, 9907, 830, -876, 830,
2148  6395, 6395, -876, 9556, 5468, 165, 256, 5182, 333, 830,
2149  -876, -876, -876, 1584, 5182, 1584, -876, -876, -876, 9673,
2150  8737, -876, -876, -1, 1230, 799, 1310, -876, 801, 806,
2151  65, -876, -876, -876, 812, 813, -876, 722, -876, 816,
2152  -876, 829, -876, 816, -876, -876, 1489, 6395, -876, -876,
2153  6109, -876, 832, 662, 2119, -876, -876, 10589, 116, -876,
2154  -876, 6395, -876, -876, 116, -876, -876, 830, 830, -876,
2155  344, -876, 830, -876, -876, -1, 830, 333, 762, -876,
2156  841, 1230, 595, -876, -876, 1382, 6395, 6109, -876, 1584,
2157  -876, 1175, -876, -876, 1175, -876, 1175, -876, -876, -876,
2158  -876, -1, 845, 835, 842, 10702, -876, 843, 722, -876,
2159  846, 847, -876, -876, -876, 931, -876, 1027, 152, 171,
2160  184, 5182, -876, 5325, -876, -876, -876, -876, -876, 6395,
2161  -876, -876, -876, -876, 5182, 1230, 841, 1230, 851, -876,
2162  185, -876, -876, 830, 854, 816, 868, 816, 816, 6512,
2163  869, -876, 10702, 1584, -876, 951, 1051, 699, -876, -876,
2164  1584, -876, 1175, -876, 199, 11494, 8269, 11575, 833, 571,
2165  830, 830, 841, 1230, 1382, -876, -876, -876, -876, 1175,
2166  -876, -876, -876, 902, -876, 1051, -876, 878, 884, -876,
2167  11656, -876, 722, 888, -876, 892, 888, 94, 106, -1,
2168  265, 321, -876, -876, -876, -876, 841, -876, 816, -876,
2169  1584, -876, 1175, -876, 881, 894, -876, 1175, -876, 1175,
2170  -876, -876, 342, -876, 888, 901, 888, 888, -876, 1175,
2171  -876, -876, -876, 888, -876
2172 };
2173 
2174 /* YYPGOTO[NTERM-NUM]. */
2175 static const yytype_int16 yypgoto[] =
2176 {
2177  -876, -876, -876, -382, -876, 15, -876, -543, 2, -876,
2178  575, -876, 43, -876, -209, -325, 180, -58, -59, -876,
2179  -592, -876, 817, -5, 950, -162, 20, -71, -876, -443,
2180  -9, 2093, -302, 949, -56, -876, -12, -876, -876, 5,
2181  -876, 1150, -876, 196, -876, 166, -27, 326, -332, 89,
2182  -13, -876, -401, -159, 7, -876, -308, -26, -876, -876,
2183  -876, -876, -876, -876, -876, -876, -876, -876, -876, -876,
2184  -876, -876, -876, -876, -876, -876, 57, -876, -876, -876,
2185  -876, -876, -876, -876, -876, -876, -876, 159, -356, -546,
2186  38, -656, -876, -792, -817, 282, 150, -336, -876, 241,
2187  -876, -749, -876, 41, -876, -876, -876, -876, -876, -876,
2188  -876, 308, -876, -876, -876, -876, -876, -876, -876, -92,
2189  -876, -876, 369, -876, -876, 555, -876, -876, -566, -876,
2190  54, -876, -876, -876, -876, -876, -876, 978, -876, -876,
2191  -876, -876, 777, -876, -876, -876, -876, -876, -876, 872,
2192  1024, -876, 53, -876, -876, -876, -876, -876, -876, -876,
2193  14, -876, 28, -876, -30, 1683, 1997, 988, 2151, 1319,
2194  -876, -876, 158, -876, -457, 111, -586, -847, -415, -329,
2195  -744, 178, -259, 300, 104, -876, -876, -876, 182, -757,
2196  -875, 86, 316, -876, -721, -876, -70, -582, -876, -876,
2197  -876, 105, -394, -876, -319, -876, -876, -83, -876, -42,
2198  -25, 78, -535, -222, -64, -15, -2
2199 };
2200 
2201 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
2202  positive, shift that token. If negative, reduce the rule which
2203  number is the opposite. If YYTABLE_NINF, syntax error. */
2204 #define YYTABLE_NINF -643
2205 static const yytype_int16 yytable[] =
2206 {
2207  119, 287, 236, 360, 239, 308, 405, 302, 581, 233,
2208  328, 212, 212, 199, 403, 212, 238, 620, 737, 120,
2209  669, 533, 201, 218, 218, 620, 569, 218, 308, 277,
2210  648, 364, 627, 199, 367, 301, 202, 736, 567, 890,
2211  399, 575, 201, 883, 465, 71, 276, 71, 467, 319,
2212  368, 267, 271, 255, 309, 277, 202, 930, 753, 86,
2213  265, 86, 199, 320, 637, 427, 885, 277, 277, 277,
2214  627, 260, 844, 219, 219, 891, 849, 219, -613, 595,
2215  704, 784, 610, 613, 933, 609, 315, 316, 992, 767,
2216  624, -103, 453, 317, 936, 578, 3, -107, 795, 356,
2217  402, 199, 567, 493, 575, 216, 226, -107, 86, 227,
2218  499, 895, 278, -524, 986, -523, 777, -525, -526, -109,
2219  526, 224, 224, 219, 829, 224, 461, -528, -109, 578,
2220  640, 837, -341, -341, 462, 1044, 423, -290, 278, -518,
2221  -518, -532, -290, 651, 235, 219, 219, 952, 673, 219,
2222  373, 384, 384, 494, -104, 896, 359, 640, 266, 270,
2223  500, -111, 315, 316, 522, -103, 449, 317, -103, -524,
2224  1022, -523, -110, -525, -526, 961, -527, 992, -529, 937,
2225  -106, -341, 890, -528, -104, 1044, -613, -108, -518, -341,
2226  -105, -613, 308, 933, 235, 476, -518, -111, 526, 526,
2227  883, 318, 1000, -94, 471, 859, 1056, 855, 255, -98,
2228  669, -616, -110, 464, 455, 241, 420, 860, 996, 853,
2229  319, 462, 420, 212, 305, 212, 212, 306, 251, 436,
2230  620, 620, -527, -616, -529, 218, -107, 218, 627, -107,
2231  -100, 456, -617, 447, 470, -617, 783, 468, -109, 277,
2232  268, -109, 504, 505, 506, 507, 255, 742, 305, 883,
2233  773, 306, 816, 86, 976, 517, -95, 752, 362, 362,
2234  528, 640, 362, -102, 260, 318, 427, 925, -106, 927,
2235  231, 640, 1038, 733, -101, 219, 903, 219, 219, 1045,
2236  590, 219, -97, 219, -103, 451, 751, -103, 86, -99,
2237  -533, 277, -96, 308, -518, 943, 459, 582, 583, 86,
2238  921, 86, 438, -104, 922, -532, -104, 428, 524, 431,
2239  86, 926, 1024, 883, 503, 584, -111, -104, 255, -111,
2240  235, 519, 278, 224, -108, 224, 519, 457, 673, 1075,
2241  458, -110, -103, 484, -110, 487, 260, 491, 528, 528,
2242  478, 491, 71, 212, 977, -105, 436, 508, 425, 843,
2243  -518, 585, -94, 783, 875, 573, 86, 219, 219, 219,
2244  219, 86, 219, 219, 234, 1008, 1009, 293, 821, -521,
2245  235, 219, 854, 86, 278, -111, 534, 604, 825, 827,
2246  567, -75, 575, -296, -296, 833, 835, 479, 305, 480,
2247  410, 306, 471, 412, 413, 414, 669, -106, 669, 573,
2248  -106, -89, 450, 408, 437, 219, 439, 212, 86, 840,
2249  436, 295, 219, 219, 775, 356, 357, 297, 573, 768,
2250  689, 634, 420, 420, 322, -521, -97, 219, 299, -110,
2251  -111, 1021, -296, 605, 119, -617, 324, 277, 199, -98,
2252  -296, 711, 471, 478, 573, 325, -106, 201, 673, 783,
2253  1066, 783, 764, -108, 534, 534, -108, 673, 484, 620,
2254  212, 202, 769, 436, 358, 305, 627, 664, 306, 219,
2255  329, 573, 359, 58, -105, 407, -99, -105, 478, 71,
2256  362, 362, 362, 362, 869, 509, 510, 277, 526, -108,
2257  479, 665, 480, 86, 526, 526, 628, 905, 356, 421,
2258  630, 526, 526, 86, 1072, 633, 783, 988, 735, 735,
2259  518, -105, 720, 621, 409, 531, 712, 234, -97, 411,
2260  278, 643, 219, 692, 673, 479, 673, 480, 483, 715,
2261  616, -98, 417, 690, 718, 362, 362, 722, -97, -106,
2262  690, -97, 971, -96, 716, 478, -97, 422, 973, 486,
2263  592, -98, 723, -616, -98, 359, 646, 953, 478, -98,
2264  783, 416, 783, 612, 614, 729, 776, 440, -99, 418,
2265  278, 730, 757, 732, 212, 846, 843, 436, 441, 442,
2266  612, 614, 738, 424, 212, 573, 759, 436, -99, 718,
2267  703, -99, 479, 761, 480, 573, -99, 760, 783, 426,
2268  673, 764, 330, 617, 619, 479, 641, 480, 481, 420,
2269  199, 277, 268, 526, 1011, 1013, 718, 444, 654, 201,
2270  655, 656, 657, 658, 471, 593, 86, 955, 86, 594,
2271  119, 446, 330, 202, 454, -96, 219, 654, 528, 655,
2272  656, 657, 658, 721, 528, 528, 219, 619, 86, 219,
2273  268, 528, 528, 228, -533, -96, 867, -74, -96, 353,
2274  354, 355, 231, -96, 953, 460, 792, 469, 792, 277,
2275  -108, 953, 857, 466, 1049, 71, 473, 856, 408, 858,
2276  830, -104, 219, 356, 448, 488, 501, 757, 640, 86,
2277  866, 1061, 1063, 492, 278, 212, 495, 1068, 436, 1070,
2278  1071, -95, 701, 874, 498, -111, 573, 718, 525, 450,
2279  888, 513, 760, 774, 888, 842, 845, 718, 845, 502,
2280  845, 953, 987, 720, 519, -102, 770, 478, 1078, 1080,
2281  1081, 1082, 422, 585, 955, 739, -110, 1084, 955, 817,
2282  359, 955, 832, 955, 587, 596, -614, 659, 591, 879,
2283  -106, 199, 278, 86, 534, 629, -101, 219, 420, 660,
2284  534, 534, 631, 528, 632, 478, 638, 534, 534, -105,
2285  -97, 531, 754, 642, 479, -89, 480, 483, 914, 356,
2286  474, 647, 735, 797, 923, 800, 718, -268, 663, 664,
2287  691, 955, 219, 955, 219, 86, 693, 899, 955, 899,
2288  955, 706, 762, 702, 763, 771, 705, -521, -521, 76,
2289  955, 76, 479, 665, 480, 485, 962, 619, 268, -427,
2290  721, 832, 862, 76, 76, 330, 707, 76, 475, 909,
2291  725, 727, 913, 772, 731, 910, 359, 787, 786, 871,
2292  343, 344, 917, 918, 790, 793, 920, -108, -105, 794,
2293  877, 796, 798, 983, -614, 799, -521, 801, 76, -614,
2294  808, 879, 789, 810, -521, 813, -269, -99, -96, 826,
2295  828, 277, 824, 76, 1017, 792, 834, 836, 330, 534,
2296  351, 352, 353, 354, 355, 831, 852, 843, 815, 963,
2297  86, 863, 964, 219, 330, 76, 76, 86, 86, 76,
2298  870, 86, 861, 972, 86, 872, 876, 901, 845, 343,
2299  344, 86, -270, 839, -620, 362, 879, 362, 907, 277,
2300  911, 826, 828, 962, 834, 836, 931, 888, 993, 994,
2301  962, 934, 962, 351, 352, 353, 354, 355, 935, 939,
2302  941, 929, 1002, 944, 86, 792, 792, 86, 350, 351,
2303  352, 353, 354, 355, 967, 1025, 946, 1001, 86, -271,
2304  -530, -530, 887, 1018, 889, 1019, 277, 893, 985, 1003,
2305  1007, 1020, 881, 1010, 1012, -620, -620, 1014, 1023, 1027,
2306  962, 1034, 962, 86, 86, 940, 942, 962, 906, 962,
2307  945, 1033, 947, 981, 948, 1029, 915, 1039, 916, 962,
2308  902, 212, 1006, 1059, 436, 1060, 729, 845, 924, -530,
2309  -616, 1062, 573, 76, 718, 1067, 362, -530, 86, 1069,
2310  86, 644, -620, -617, -620, 906, 86, -616, 1079, 330,
2311  792, 86, -620, 371, 388, 76, 950, 76, 76, 919,
2312  838, 76, 900, 76, 343, 344, 86, 1053, 76, 1035,
2313  873, -531, -531, -286, -286, 1057, 268, 868, 812, 76,
2314  700, 76, 1052, 219, 954, 497, 974, 975, 958, 406,
2315  76, 980, 415, 291, 400, 982, 984, 356, 588, 1037,
2316  886, 348, 349, 350, 351, 352, 353, 354, 355, 356,
2317  598, -297, -297, 884, 356, 709, 1028, 1030, 1031, 1032,
2318  -531, 1041, -286, 0, 356, 1015, 0, 995, -531, 997,
2319  -286, 0, 0, 0, 998, 0, 76, 76, 76, 76,
2320  76, 76, 76, 76, 0, 0, 589, 0, 356, 1040,
2321  0, 76, 0, 76, 359, 0, 76, 0, 599, 0,
2322  -297, 0, 1026, 710, 0, 0, 359, 0, -297, 0,
2323  0, 359, 0, 1016, 0, 0, 214, 214, 0, 1073,
2324  214, 359, 478, 0, 0, 76, 0, 0, 76, 1054,
2325  1055, 0, 76, 76, 0, 958, 0, 599, 1043, 1042,
2326  1046, 0, 958, 0, 958, 359, 0, 76, 248, 250,
2327  0, 0, 0, 214, 214, 0, 0, 1058, 654, 0,
2328  655, 656, 657, 658, 659, 478, 303, 304, 0, 479,
2329  0, 480, 489, 0, 76, 76, 660, 654, 0, 655,
2330  656, 657, 658, 659, 0, 0, 0, 0, 1074, 76,
2331  1076, 0, 958, 0, 958, 660, 0, 1077, 661, 958,
2332  0, 958, 0, 0, 662, 663, 664, 1083, 0, 0,
2333  0, 958, 479, 76, 480, 496, 654, 661, 655, 656,
2334  657, 658, 0, 76, 663, 664, 0, 0, 803, 804,
2335  665, 805, 654, 666, 655, 656, 657, 658, -642, 46,
2336  47, 0, 76, 0, 0, 667, -642, -642, -642, 665,
2337  0, -642, -642, -642, 0, -642, 778, 0, 708, 0,
2338  0, 0, 779, 0, -642, -642, 310, 311, 312, 313,
2339  314, 117, 778, 117, 0, -642, -642, 0, -642, -642,
2340  -642, -642, -642, 0, 330, 331, 332, 333, 334, 335,
2341  336, 337, 338, 339, 340, 341, 342, 0, 0, 343,
2342  344, 0, 0, 0, 214, 0, 0, 214, 214, 214,
2343  0, 303, 654, 0, 655, 656, 657, 658, 0, 0,
2344  117, 0, 0, 0, 281, -642, -642, 0, 214, 0,
2345  214, 214, 345, 0, 346, 347, 348, 349, 350, 351,
2346  352, 353, 354, 355, 0, 0, 76, 0, 76, -642,
2347  281, -243, 778, 0, 0, 0, 76, 0, 932, 0,
2348  0, 0, 377, 387, 387, 0, 76, 0, 76, 76,
2349  0, 0, -642, -642, 0, 0, 0, 231, -642, 0,
2350  -642, 0, -642, -642, 989, 708, 655, 656, 657, 658,
2351  41, 42, 43, 44, 0, 0, 0, 0, 0, 0,
2352  0, 0, 76, 0, 0, 0, 0, 0, 0, 76,
2353  0, 330, 331, 332, 333, 334, 335, 336, 337, 338,
2354  339, 340, 341, 342, 214, 0, 343, 344, 0, 530,
2355  536, 537, 538, 539, 540, 541, 542, 543, 544, 545,
2356  546, 547, 548, 549, 550, 551, 552, 553, 554, 555,
2357  556, 557, 558, 559, 560, 561, 0, 0, 214, 345,
2358  0, 346, 347, 348, 349, 350, 351, 352, 353, 354,
2359  355, 0, 0, 76, 76, 117, 0, 76, 0, 0,
2360  76, 76, 0, 0, 0, 0, 0, 76, 76, 0,
2361  0, 654, 0, 655, 656, 657, 658, 659, 0, 0,
2362  0, 0, 0, 0, 0, 0, 0, 611, 611, 660,
2363  117, 0, 76, 0, 76, 76, 611, 214, 214, 0,
2364  0, 117, 214, 117, 611, 611, 214, 0, 0, 0,
2365  0, 661, 117, 0, 0, 0, 0, 662, 663, 664,
2366  0, 0, 0, 0, 281, 636, 0, 0, 0, 0,
2367  611, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2368  0, 214, 0, 665, 214, 0, 666, 0, 0, 0,
2369  0, 0, 0, 0, 0, 214, 0, 0, 117, 0,
2370  0, 0, 0, 117, 235, 0, 654, 0, 655, 656,
2371  657, 658, 659, 0, 0, 117, 281, 0, 535, 76,
2372  0, 694, 0, 0, 660, 0, 0, 0, 0, 0,
2373  76, 0, 0, 76, 0, 0, 214, 76, 76, 0,
2374  0, 76, 0, 0, 76, 0, 661, 0, 0, 0,
2375  117, 76, 662, 663, 664, 113, 0, 113, 0, 0,
2376  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2377  0, 0, 0, 0, 0, 0, 0, 0, 665, 0,
2378  0, 666, 0, 0, 76, 0, 0, 76, 0, 0,
2379  0, 0, 0, 0, 0, 0, 535, 535, 76, 0,
2380  0, 0, 0, 0, 113, 214, 0, 0, 279, 214,
2381  0, 0, 0, 0, 0, 0, 0, 0, 0, 214,
2382  0, 0, 0, 76, 76, 0, 0, 0, 0, 0,
2383  0, 0, 0, 0, 279, 117, 214, 0, 214, 0,
2384  0, 0, 0, 0, 0, 117, 375, 385, 385, 385,
2385  0, 214, 214, 0, 0, 0, 0, 0, 76, 0,
2386  76, 0, 281, 0, 0, 0, 76, 0, 0, 0,
2387  0, 76, 0, 0, 0, 0, 0, 0, 0, 0,
2388  0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
2389  0, 0, 0, 0, 0, 0, 214, 0, 0, 0,
2390  0, 0, 0, 76, 0, 0, 0, 0, 0, 0,
2391  0, 0, 281, 0, 0, 0, 0, 0, 0, 0,
2392  0, 0, 214, 0, 0, 0, 0, 611, 818, 0,
2393  214, 0, 0, 611, 611, 0, 0, 0, 0, 0,
2394  611, 611, 0, 0, 0, 0, 0, 214, 0, 0,
2395  0, 0, 0, 0, 0, 0, 0, 0, 0, 113,
2396  0, 0, 0, 0, 0, 0, 0, 0, 117, 0,
2397  117, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2398  0, 0, 0, 0, 0, 611, 611, 0, 611, 611,
2399  117, 0, 0, 0, 113, 0, 0, 0, 0, 0,
2400  0, 0, 0, 0, 0, 113, 214, 113, 0, 0,
2401  0, 0, 0, 0, 0, 0, 113, 0, 0, 0,
2402  0, 0, 0, 0, 0, 0, 0, 0, 279, 0,
2403  0, 117, 0, 0, 214, 0, 281, 0, 0, 0,
2404  0, 0, 0, 0, 904, 0, 0, 0, 0, 0,
2405  0, 0, 611, 0, 0, 0, 0, 0, 0, 0,
2406  0, 0, 113, 0, 0, 0, 0, 113, 0, 114,
2407  0, 114, 0, 214, 0, 0, 0, 807, 0, 113,
2408  279, 0, 0, 0, 0, 0, 0, 0, 0, 611,
2409  214, 0, 0, 0, 281, 117, 535, 0, 0, 0,
2410  0, 0, 535, 535, 0, 0, 0, 562, 563, 535,
2411  535, 564, 0, 0, 113, 0, 0, 0, 114, 0,
2412  0, 0, 280, 165, 166, 167, 168, 169, 170, 171,
2413  172, 173, 0, 0, 174, 175, 0, 117, 176, 177,
2414  178, 179, 0, 0, 0, 0, 0, 0, 280, 0,
2415  0, 0, 0, 180, 181, 0, 0, 0, 0, 0,
2416  376, 386, 386, 386, 0, 83, 0, 83, 0, 0,
2417  0, 0, 0, 0, 0, 182, 183, 184, 185, 186,
2418  187, 188, 189, 190, 191, 0, 192, 193, 0, 0,
2419  0, 0, 0, 194, 0, 0, 0, 0, 0, 113,
2420  0, 0, 0, 0, 0, 0, 0, 0, 0, 113,
2421  0, 0, 0, 0, 83, 0, 0, 0, 0, 0,
2422  0, 535, 0, 116, 0, 116, 279, 0, 0, 0,
2423  0, 0, 117, 0, 0, 0, 214, 0, 0, 117,
2424  117, 0, 0, 117, 0, 0, 117, 0, 0, 0,
2425  0, 0, 0, 117, 0, 0, 372, 0, 0, 330,
2426  331, 332, 333, 334, 335, 336, 337, 338, 339, 340,
2427  341, 342, 116, 114, 343, 344, 279, 0, 0, 0,
2428  0, 0, 0, 0, 0, 0, 117, 0, 0, 117,
2429  0, 0, 0, 0, 0, 0, 970, 0, 0, 0,
2430  117, 0, 0, 0, 0, 0, 0, 345, 114, 346,
2431  347, 348, 349, 350, 351, 352, 353, 354, 355, 114,
2432  0, 114, 0, 0, 0, 117, 117, 0, 0, 0,
2433  114, 0, 113, 0, 113, 0, 0, 0, 0, 0,
2434  0, 0, 280, 0, 387, 0, 0, 0, 0, 0,
2435  0, 0, 0, 0, 113, 0, 0, 0, 0, 0,
2436  117, 0, 117, 0, 0, 0, 0, 0, 117, 83,
2437  0, 0, 0, 117, 0, 0, 114, 0, 0, 0,
2438  0, 114, 0, 0, 0, 0, 0, 0, 117, 0,
2439  0, 387, 0, 114, 280, 113, 0, 0, 0, 0,
2440  279, 0, 0, 0, 83, 0, 0, 0, 0, 0,
2441  0, 0, 0, 0, 0, 83, 0, 83, 0, 0,
2442  0, 0, 0, 0, 0, 0, 83, 116, 114, 0,
2443  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2444  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2445  0, 0, 0, 0, 0, 0, 0, 0, 279, 113,
2446  0, 0, 116, 0, 0, 0, 0, 0, 0, 0,
2447  0, 0, 83, 116, 0, 116, 0, 83, 0, 0,
2448  0, 0, 0, 0, 116, 0, 0, 570, 571, 83,
2449  0, 572, 529, 0, 0, 0, 0, 0, 0, 0,
2450  0, 113, 0, 165, 166, 167, 168, 169, 170, 171,
2451  172, 173, 0, 114, 174, 175, 0, 0, 176, 177,
2452  178, 179, 0, 114, 83, 0, 0, 0, 0, 0,
2453  116, 0, 0, 180, 181, 116, 0, 0, 0, 0,
2454  280, 0, 0, 0, 0, 0, 0, 116, 0, 0,
2455  116, 0, 0, 0, 0, 182, 183, 184, 185, 186,
2456  187, 188, 189, 190, 191, 0, 192, 193, 0, 0,
2457  529, 529, 0, 194, 0, 0, 0, 0, 0, 0,
2458  0, 0, 116, 330, -643, -643, -643, -643, 335, 336,
2459  280, 0, -643, -643, 0, 0, 113, 0, 343, 344,
2460  0, 0, 0, 113, 113, 0, 0, 113, 0, 83,
2461  113, 0, 0, 0, 0, 0, 0, 113, 0, 83,
2462  0, 0, 0, 0, 0, 0, 0, 0, 116, 116,
2463  0, 0, 0, 346, 347, 348, 349, 350, 351, 352,
2464  353, 354, 355, 0, 0, 0, 114, 0, 114, 0,
2465  113, 0, 0, 113, 0, 0, 0, 0, 0, 0,
2466  968, 0, 0, 0, 113, 0, 0, 116, 114, 0,
2467  0, 0, 0, 0, 0, 0, 0, 116, 0, 0,
2468  0, 0, 0, 0, 0, 0, 0, 0, 0, 113,
2469  113, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2470  0, 0, 0, 0, 0, 0, 0, 0, 385, 114,
2471  0, 0, 0, 0, 280, 0, 0, 0, 0, 0,
2472  0, 0, 0, 0, 113, 0, 113, 0, 0, 0,
2473  0, 0, 113, 0, 0, 0, 0, 113, 0, 0,
2474  0, 0, 83, 0, 83, 0, 0, 0, 0, 0,
2475  0, 0, 113, 0, 0, 385, 0, 0, 0, 0,
2476  0, 607, 571, 0, 83, 608, 0, 0, 0, 0,
2477  0, 0, 280, 114, 0, 0, 0, 165, 166, 167,
2478  168, 169, 170, 171, 172, 173, 0, 0, 174, 175,
2479  0, 0, 176, 177, 178, 179, 0, 0, 0, 0,
2480  116, 0, 116, 0, 0, 83, 0, 180, 181, 0,
2481  0, 0, 0, 0, 0, 114, 0, 0, 0, 0,
2482  0, 0, 116, 0, 0, 0, 0, 0, 0, 182,
2483  183, 184, 185, 186, 187, 188, 189, 190, 191, 0,
2484  192, 193, 0, 0, 0, 0, 0, 194, 0, 0,
2485  330, 331, 332, 333, 334, 335, 336, 337, 338, 339,
2486  340, 341, 342, 116, 0, 343, 344, 0, 0, 83,
2487  529, 0, 0, 0, 0, 0, 529, 529, 0, 0,
2488  0, 0, 0, 529, 529, 0, 0, 0, 0, 0,
2489  0, 0, 0, 0, 0, 0, 0, 0, 345, 0,
2490  346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
2491  114, 83, 0, 0, 0, 0, 0, 114, 114, 0,
2492  0, 114, 0, 0, 114, 235, 0, 116, 116, 0,
2493  0, 114, 0, 0, 116, 116, 0, 0, 0, 0,
2494  0, 116, 116, 0, 0, 0, 0, 0, 0, 0,
2495  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2496  0, 0, 0, 0, 114, 0, 0, 114, 0, 116,
2497  0, 0, 0, 0, 969, 0, 0, 0, 114, 0,
2498  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2499  0, 0, 0, 0, 0, 529, 0, 0, 0, 0,
2500  0, 0, 0, 114, 114, 0, 83, 0, 0, 0,
2501  0, 0, 0, 83, 83, 0, 0, 83, 0, 0,
2502  83, 0, 386, 0, 0, 0, 0, 83, 0, 0,
2503  0, 0, 0, 0, 0, 0, 0, 0, 114, 0,
2504  114, 0, 0, 0, 0, 0, 114, 0, 0, 0,
2505  0, 114, 0, 116, 0, 0, 0, 0, 0, 0,
2506  83, 0, 0, 83, 116, 0, 114, 0, 0, 386,
2507  966, 116, 116, 0, 83, 116, 0, 0, 116, 0,
2508  0, 0, 0, 0, 0, 116, 0, 0, 0, 0,
2509  0, 0, 0, 0, 0, 0, 0, 0, 0, 83,
2510  83, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2511  0, 0, 0, 0, 0, 0, 0, 0, 116, 0,
2512  0, 116, 0, 0, 0, 0, 0, 0, 0, 0,
2513  0, 0, 116, 0, 83, 0, 83, 0, 0, 0,
2514  0, 0, 83, 0, 0, 0, 0, 83, 0, 0,
2515  0, 0, 0, 0, 0, 0, 0, 116, 116, 0,
2516  0, 0, 83, 0, 0, 0, 0, 0, 0, 0,
2517  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2518  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2519  0, 0, 116, 0, 116, 0, 0, 0, 0, 0,
2520  116, 0, 0, -642, 4, 116, 5, 6, 7, 8,
2521  9, 0, 0, 0, 10, 11, 0, 0, 0, 12,
2522  116, 13, 14, 15, 16, 17, 18, 19, 0, 0,
2523  0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
2524  0, 0, 27, 0, 0, 0, 0, 0, 28, 29,
2525  30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
2526  40, 0, 41, 42, 43, 44, 0, 45, 46, 47,
2527  0, 48, 49, 0, 0, 0, 0, 0, 0, 0,
2528  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2529  0, 0, 50, 0, 0, 51, 52, 0, 53, 54,
2530  0, 55, 0, 0, 56, 57, 58, 59, 60, 61,
2531  62, 63, 64, -620, 0, 0, 0, 0, 0, 0,
2532  0, -620, -620, -620, 0, 0, -620, -620, -620, 0,
2533  -620, 0, 0, 65, 66, 67, 0, 0, 0, -620,
2534  -620, -620, -620, 0, 0, -642, 0, 0, -642, 0,
2535  -620, -620, 0, -620, -620, -620, -620, -620, 0, 0,
2536  0, 330, 331, 332, 333, 334, 335, 336, 337, 338,
2537  339, 340, -643, -643, 0, 0, 343, 344, 0, 0,
2538  0, 0, 0, -620, -620, -620, -620, -620, -620, -620,
2539  -620, -620, -620, -620, -620, -620, 0, 0, -620, -620,
2540  -620, -620, 0, 765, -620, 0, 0, 0, 0, 0,
2541  -620, 346, 347, 348, 349, 350, 351, 352, 353, 354,
2542  355, 0, 0, 0, -620, 0, 0, -620, 0, 0,
2543  -107, -620, -620, -620, -620, -620, -620, -620, -620, -620,
2544  -620, -620, -620, 0, 0, 0, 0, -620, -620, -620,
2545  -620, -518, 0, -620, -620, -620, 0, -620, -620, -518,
2546  -518, -518, 0, 0, -518, -518, -518, 0, -518, 0,
2547  0, 0, 0, 0, 0, 0, -518, 0, -518, -518,
2548  -518, 0, 0, 0, 0, 0, 0, 0, -518, -518,
2549  0, -518, -518, -518, -518, -518, 0, 0, 0, 330,
2550  331, 332, 333, 334, 335, 336, 337, 0, 339, 340,
2551  0, 0, 0, 0, 343, 344, 0, 0, 0, 0,
2552  0, -518, -518, -518, -518, -518, -518, -518, -518, -518,
2553  -518, -518, -518, -518, 0, 0, -518, -518, -518, -518,
2554  0, -518, -518, 0, 0, 0, 0, 0, -518, 346,
2555  347, 348, 349, 350, 351, 352, 353, 354, 355, 0,
2556  0, 0, -518, 0, 0, -518, 0, 0, -518, -518,
2557  -518, -518, -518, -518, -518, -518, -518, -518, -518, -518,
2558  -518, 0, 0, 0, 0, 0, -518, -518, -518, -521,
2559  0, -518, -518, -518, 0, -518, -518, -521, -521, -521,
2560  0, 0, -521, -521, -521, 0, -521, 0, 0, 0,
2561  0, 0, 0, 0, -521, 0, -521, -521, -521, 0,
2562  0, 0, 0, 0, 0, 0, -521, -521, 0, -521,
2563  -521, -521, -521, -521, 0, 0, 0, 330, 331, 332,
2564  333, 334, 335, 336, 0, 0, 339, 340, 0, 0,
2565  0, 0, 343, 344, 0, 0, 0, 0, 0, -521,
2566  -521, -521, -521, -521, -521, -521, -521, -521, -521, -521,
2567  -521, -521, 0, 0, -521, -521, -521, -521, 0, -521,
2568  -521, 0, 0, 0, 0, 0, -521, 346, 347, 348,
2569  349, 350, 351, 352, 353, 354, 355, 0, 0, 0,
2570  -521, 0, 0, -521, 0, 0, -521, -521, -521, -521,
2571  -521, -521, -521, -521, -521, -521, -521, -521, -521, 0,
2572  0, 0, 0, 0, -521, -521, -521, -621, 0, -521,
2573  -521, -521, 0, -521, -521, -621, -621, -621, 0, 0,
2574  -621, -621, -621, 0, -621, 0, 0, 0, 0, 0,
2575  0, 0, 0, -621, -621, -621, -621, 0, 0, 0,
2576  0, 0, 0, 0, -621, -621, 0, -621, -621, -621,
2577  -621, -621, 0, 0, 0, 0, 0, 0, 0, 0,
2578  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2579  0, 0, 0, 0, 0, 0, 0, -621, -621, -621,
2580  -621, -621, -621, -621, -621, -621, -621, -621, -621, -621,
2581  0, 0, -621, -621, -621, -621, 0, 0, -621, 0,
2582  0, 0, 0, 0, -621, 0, 0, 0, 0, 0,
2583  0, 0, 0, 0, 0, 0, 0, 0, -621, 0,
2584  0, -621, 0, 0, 0, -621, -621, -621, -621, -621,
2585  -621, -621, -621, -621, -621, -621, -621, 0, 0, 0,
2586  0, -621, -621, -621, -621, -622, 0, -621, -621, -621,
2587  0, -621, -621, -622, -622, -622, 0, 0, -622, -622,
2588  -622, 0, -622, 0, 0, 0, 0, 0, 0, 0,
2589  0, -622, -622, -622, -622, 0, 0, 0, 0, 0,
2590  0, 0, -622, -622, 0, -622, -622, -622, -622, -622,
2591  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2592  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2593  0, 0, 0, 0, 0, -622, -622, -622, -622, -622,
2594  -622, -622, -622, -622, -622, -622, -622, -622, 0, 0,
2595  -622, -622, -622, -622, 0, 0, -622, 0, 0, 0,
2596  0, 0, -622, 0, 0, 0, 0, 0, 0, 0,
2597  0, 0, 0, 0, 0, 0, -622, 0, 0, -622,
2598  0, 0, 0, -622, -622, -622, -622, -622, -622, -622,
2599  -622, -622, -622, -622, -622, 0, 0, 0, 0, -622,
2600  -622, -622, -622, -296, 0, -622, -622, -622, 0, -622,
2601  -622, -296, -296, -296, 0, 0, -296, -296, -296, 0,
2602  -296, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2603  -296, -296, -296, 0, 0, 0, 0, 0, 0, 0,
2604  -296, -296, 0, -296, -296, -296, -296, -296, 0, 0,
2605  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2606  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2607  0, 0, 0, -296, -296, -296, -296, -296, -296, -296,
2608  -296, -296, -296, -296, -296, -296, 0, 0, -296, -296,
2609  -296, -296, 0, 766, -296, 0, 0, 0, 0, 0,
2610  -296, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2611  0, 0, 0, 0, -296, 0, 0, -296, 0, 0,
2612  -109, -296, -296, -296, -296, -296, -296, -296, -296, -296,
2613  -296, -296, -296, 0, 0, 0, 0, 0, -296, -296,
2614  -296, -435, 0, -296, -296, -296, 0, -296, -296, -435,
2615  -435, -435, 0, 0, -435, -435, -435, 0, -435, 0,
2616  0, 0, 0, 0, 0, 0, 0, -435, -435, -435,
2617  0, 0, 0, 0, 0, 0, 0, 0, -435, -435,
2618  0, -435, -435, -435, -435, -435, 0, 0, 0, 0,
2619  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2620  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2621  0, -435, -435, -435, -435, -435, -435, -435, -435, -435,
2622  -435, -435, -435, -435, 0, 0, -435, -435, -435, -435,
2623  0, 0, -435, 0, 0, 0, 0, 0, -435, 0,
2624  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2625  0, 0, -435, 0, 0, 0, 0, 0, 0, -435,
2626  0, -435, -435, -435, -435, -435, -435, -435, -435, -435,
2627  -435, 0, 0, 0, 0, -435, -435, -435, -435, -287,
2628  231, -435, -435, -435, 0, -435, -435, -287, -287, -287,
2629  0, 0, -287, -287, -287, 0, -287, 0, 0, 0,
2630  0, 0, 0, 0, 0, 0, -287, -287, -287, 0,
2631  0, 0, 0, 0, 0, 0, -287, -287, 0, -287,
2632  -287, -287, -287, -287, 0, 0, 0, 0, 0, 0,
2633  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2634  0, 0, 0, 0, 0, 0, 0, 0, 0, -287,
2635  -287, -287, -287, -287, -287, -287, -287, -287, -287, -287,
2636  -287, -287, 0, 0, -287, -287, -287, -287, 0, 0,
2637  -287, 0, 0, 0, 0, 0, -287, 0, 0, 0,
2638  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2639  -287, 0, 0, -287, 0, 0, 0, -287, -287, -287,
2640  -287, -287, -287, -287, -287, -287, -287, -287, -287, 0,
2641  0, 0, 0, 0, -287, -287, -287, -425, 0, -287,
2642  -287, -287, 0, -287, -287, -425, -425, -425, 0, 0,
2643  -425, -425, -425, 0, -425, 0, 0, 0, 0, 0,
2644  0, 0, 0, -425, -425, -425, 0, 0, 0, 0,
2645  0, 0, 0, 0, -425, -425, 0, -425, -425, -425,
2646  -425, -425, 0, 0, 0, 0, 0, 0, 0, 0,
2647  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2648  0, 0, 0, 0, 0, 0, 0, -425, -425, -425,
2649  -425, -425, -425, -425, -425, -425, -425, -425, -425, -425,
2650  0, 0, -425, -425, -425, -425, 0, 0, -425, 0,
2651  0, 0, 0, 0, -425, 0, 0, 0, 0, 0,
2652  0, 0, 0, 0, 0, 0, 0, 0, -425, 0,
2653  0, 0, 0, 0, 0, -425, 0, -425, -425, -425,
2654  -425, -425, -425, -425, -425, -425, -425, 0, 0, 0,
2655  0, -425, -425, -425, -425, -303, -425, -425, -425, -425,
2656  0, -425, -425, -303, -303, -303, 0, 0, -303, -303,
2657  -303, 0, -303, 0, 0, 0, 0, 0, 0, 0,
2658  0, 0, -303, -303, 0, 0, 0, 0, 0, 0,
2659  0, 0, -303, -303, 0, -303, -303, -303, -303, -303,
2660  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2661  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2662  0, 0, 0, 0, 0, -303, -303, -303, -303, -303,
2663  -303, -303, -303, -303, -303, -303, -303, -303, 0, 0,
2664  -303, -303, -303, -303, 0, 0, -303, 0, 0, 0,
2665  0, 0, -303, 0, 0, 0, 0, 0, 0, 0,
2666  0, 0, 0, 0, 0, 0, -303, 0, 0, 0,
2667  0, 0, 0, -303, 0, -303, -303, -303, -303, -303,
2668  -303, -303, -303, -303, -303, 0, 0, 0, 0, 0,
2669  -303, -303, -303, -620, 228, -303, -303, -303, 0, -303,
2670  -303, -620, -620, -620, 0, 0, 0, -620, -620, 0,
2671  -620, 0, 0, 0, 0, 0, 0, 0, 0, -620,
2672  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2673  -620, -620, 0, -620, -620, -620, -620, -620, 0, 0,
2674  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2675  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2676  0, 0, 0, -620, -620, -620, -620, -620, -620, -620,
2677  -620, -620, -620, -620, -620, -620, 0, 0, -620, -620,
2678  -620, -620, 0, 713, 0, 0, 0, 0, 0, 0,
2679  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2680  0, 0, 0, 0, -620, 0, 0, 0, 0, 0,
2681  -107, -620, 0, -620, -620, -620, -620, -620, -620, -620,
2682  -620, -620, -620, 0, 0, 0, 0, -620, -620, -620,
2683  -98, -620, 0, -620, 0, -620, 0, -620, -620, -620,
2684  -620, -620, 0, 0, 0, -620, -620, 0, -620, 0,
2685  0, 0, 0, 0, 0, 0, 0, -620, 0, 0,
2686  0, 0, 0, 0, 0, 0, 0, 0, -620, -620,
2687  0, -620, -620, -620, -620, -620, 0, 0, 0, 0,
2688  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2689  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2690  0, -620, -620, -620, -620, -620, -620, -620, -620, -620,
2691  -620, -620, -620, -620, 0, 0, -620, -620, -620, -620,
2692  0, 713, 0, 0, 0, 0, 0, 0, 0, 0,
2693  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2694  0, 0, -620, 0, 0, 0, 0, 0, -107, -620,
2695  0, -620, -620, -620, -620, -620, -620, -620, -620, -620,
2696  -620, 0, 0, 0, 0, -620, -620, -620, -620, -296,
2697  0, -620, 0, -620, 0, -620, -620, -296, -296, -296,
2698  0, 0, 0, -296, -296, 0, -296, 0, 0, 0,
2699  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2700  0, 0, 0, 0, 0, 0, -296, -296, 0, -296,
2701  -296, -296, -296, -296, 0, 0, 0, 0, 0, 0,
2702  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2703  0, 0, 0, 0, 0, 0, 0, 0, 0, -296,
2704  -296, -296, -296, -296, -296, -296, -296, -296, -296, -296,
2705  -296, -296, 0, 0, -296, -296, -296, -296, 0, 714,
2706  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2707  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2708  -296, 0, 0, 0, 0, 0, -109, -296, 0, -296,
2709  -296, -296, -296, -296, -296, -296, -296, -296, -296, 0,
2710  0, 0, 0, 0, -296, -296, -100, -296, 0, -296,
2711  0, -296, 0, -296, -296, -296, -296, -296, 0, 0,
2712  0, -296, -296, 0, -296, 0, 0, 0, 0, 0,
2713  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2714  0, 0, 0, 0, -296, -296, 0, -296, -296, -296,
2715  -296, -296, 0, 0, 0, 0, 0, 0, 0, 0,
2716  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2717  0, 0, 0, 0, 0, 0, 0, -296, -296, -296,
2718  -296, -296, -296, -296, -296, -296, -296, -296, -296, -296,
2719  0, 0, -296, -296, -296, -296, 0, 714, 0, 0,
2720  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2721  0, 0, 0, 0, 0, 0, 0, 0, -296, 0,
2722  0, 0, 0, 0, -109, -296, 0, -296, -296, -296,
2723  -296, -296, -296, -296, -296, -296, -296, 0, 0, 0,
2724  0, 0, -296, -296, -296, 0, 0, -296, 0, -296,
2725  0, -296, -296, 252, 0, 5, 6, 7, 8, 9,
2726  -642, -642, -642, 10, 11, 0, 0, -642, 12, 0,
2727  13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
2728  0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
2729  0, 27, 0, 0, 0, 0, 0, 28, 29, 253,
2730  31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2731  0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
2732  48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
2733  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2734  0, 50, 0, 0, 51, 52, 0, 53, 54, 0,
2735  55, 0, 0, 56, 57, 58, 59, 60, 61, 62,
2736  63, 64, 0, 0, 0, 0, 0, 0, 0, 0,
2737  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2738  0, 0, 65, 66, 67, 0, 0, 0, 0, 0,
2739  0, 0, 0, 0, -642, 0, 252, -642, 5, 6,
2740  7, 8, 9, 0, 0, -642, 10, 11, 0, -642,
2741  -642, 12, 0, 13, 14, 15, 16, 17, 18, 19,
2742  0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
2743  25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
2744  28, 29, 253, 31, 32, 33, 34, 35, 36, 37,
2745  38, 39, 40, 0, 41, 42, 43, 44, 0, 45,
2746  46, 47, 0, 48, 49, 0, 0, 0, 0, 0,
2747  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2748  0, 0, 0, 0, 50, 0, 0, 51, 52, 0,
2749  53, 54, 0, 55, 0, 0, 56, 57, 58, 59,
2750  60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
2751  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2752  0, 0, 0, 0, 0, 65, 66, 67, 0, 0,
2753  0, 0, 0, 0, 0, 0, 0, -642, 0, 252,
2754  -642, 5, 6, 7, 8, 9, 0, 0, -642, 10,
2755  11, 0, 0, -642, 12, -642, 13, 14, 15, 16,
2756  17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
2757  22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
2758  0, 0, 0, 28, 29, 253, 31, 32, 33, 34,
2759  35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
2760  44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
2761  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2762  0, 0, 0, 0, 0, 0, 0, 50, 0, 0,
2763  51, 52, 0, 53, 54, 0, 55, 0, 0, 56,
2764  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
2765  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2766  0, 0, 0, 0, 0, 0, 0, 0, 65, 66,
2767  67, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2768  -642, 0, 252, -642, 5, 6, 7, 8, 9, 0,
2769  0, -642, 10, 11, 0, 0, -642, 12, 0, 13,
2770  14, 15, 16, 17, 18, 19, 0, 0, 0, 0,
2771  0, 20, 21, 22, 23, 24, 25, 26, 0, 0,
2772  27, 0, 0, 0, 0, 0, 28, 29, 253, 31,
2773  32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
2774  41, 42, 43, 44, 0, 45, 46, 47, 0, 48,
2775  49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2776  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2777  50, 0, 0, 51, 52, 0, 53, 54, 0, 55,
2778  0, 0, 56, 57, 58, 59, 60, 61, 62, 63,
2779  64, 0, 0, 0, 0, 0, 0, 0, 0, 252,
2780  0, 5, 6, 7, 8, 9, 0, -642, -642, 10,
2781  11, 65, 66, 67, 12, 0, 13, 14, 15, 16,
2782  17, 18, 19, -642, 0, 0, -642, 0, 20, 21,
2783  22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
2784  0, 0, 0, 28, 29, 253, 31, 32, 33, 34,
2785  35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
2786  44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
2787  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2788  0, 0, 0, 0, 0, 0, 0, 50, 0, 0,
2789  51, 52, 0, 53, 54, 0, 55, 0, 0, 56,
2790  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
2791  0, 0, 0, 0, 0, 0, 252, 0, 5, 6,
2792  7, 8, 9, 0, 0, 0, 10, 11, 65, 66,
2793  67, 12, 0, 13, 14, 15, 16, 17, 18, 19,
2794  -642, 0, 0, -642, 0, 20, 21, 22, 23, 24,
2795  25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
2796  28, 29, 253, 31, 32, 33, 34, 35, 36, 37,
2797  38, 39, 40, 0, 41, 42, 43, 44, 0, 45,
2798  46, 47, 0, 48, 49, 0, 0, 0, 0, 0,
2799  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2800  0, 0, 0, 0, 50, 0, 0, 254, 52, 0,
2801  53, 54, 0, 55, 0, 0, 56, 57, 58, 59,
2802  60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
2803  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2804  0, 0, 0, 0, 0, 65, 66, 67, 252, 0,
2805  5, 6, 7, 8, 9, -642, 0, -642, 10, 11,
2806  -642, 0, 0, 12, 0, 13, 14, 15, 16, 17,
2807  18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
2808  23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
2809  0, 0, 28, 29, 253, 31, 32, 33, 34, 35,
2810  36, 37, 38, 39, 40, 0, 41, 42, 43, 44,
2811  0, 45, 46, 47, 0, 48, 49, 0, 0, 0,
2812  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2813  0, 0, 0, 0, 0, 0, 50, 0, 0, 51,
2814  52, 0, 53, 54, 0, 55, 0, 0, 56, 57,
2815  58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
2816  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2817  0, 0, 0, 0, 0, 0, 0, 65, 66, 67,
2818  252, 0, 5, 6, 7, 8, 9, -642, 0, -642,
2819  10, 11, -642, 0, 0, 12, 0, 13, 14, 15,
2820  16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
2821  21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
2822  0, 0, 0, 0, 28, 29, 253, 31, 32, 33,
2823  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
2824  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
2825  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2826  0, 0, 0, 0, 0, 0, 0, 0, 50, 0,
2827  0, 51, 52, 0, 53, 54, 0, 55, 0, 0,
2828  56, 57, 58, 59, 60, 61, 62, 63, 64, 0,
2829  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2830  0, 0, 0, 0, 0, 0, 0, 0, 0, 65,
2831  66, 67, 0, 0, -642, 0, 0, 0, 0, 0,
2832  0, -642, 0, 4, -642, 5, 6, 7, 8, 9,
2833  0, 0, 0, 10, 11, 0, 0, 0, 12, 0,
2834  13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
2835  0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
2836  0, 27, 0, 0, 0, 0, 0, 28, 29, 30,
2837  31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2838  0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
2839  48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
2840  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2841  0, 50, 0, 0, 51, 52, 0, 53, 54, 0,
2842  55, 0, 0, 56, 57, 58, 59, 60, 61, 62,
2843  63, 64, 0, 0, 0, 0, 0, 0, 0, 0,
2844  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2845  0, 0, 65, 66, 67, 0, 0, -642, 0, 0,
2846  0, 0, 0, 0, -642, 0, 252, -642, 5, 6,
2847  7, 8, 9, 0, 0, -642, 10, 11, 0, 0,
2848  0, 12, 0, 13, 14, 15, 16, 17, 18, 19,
2849  0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
2850  25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
2851  28, 29, 253, 31, 32, 33, 34, 35, 36, 37,
2852  38, 39, 40, 0, 41, 42, 43, 44, 0, 45,
2853  46, 47, 0, 48, 49, 0, 0, 0, 0, 0,
2854  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2855  0, 0, 0, 0, 50, 0, 0, 51, 52, 0,
2856  53, 54, 0, 55, 0, 0, 56, 57, 58, 59,
2857  60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
2858  0, 0, 0, 252, 0, 5, 6, 7, 8, 9,
2859  0, 0, 0, 10, 11, 65, 66, 67, 12, 0,
2860  13, 14, 15, 16, 17, 18, 19, -642, 0, 0,
2861  -642, 0, 20, 21, 22, 23, 24, 25, 26, 0,
2862  0, 27, 0, 0, 0, 0, 0, 28, 29, 253,
2863  31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
2864  0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
2865  48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
2866  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2867  0, 50, 0, 0, 51, 52, 0, 53, 54, 0,
2868  55, 0, 0, 56, 57, 58, 59, 60, 61, 62,
2869  63, 64, 0, -642, 0, 0, 0, 0, 0, 0,
2870  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
2871  10, 11, 65, 66, 67, 12, 0, 13, 14, 15,
2872  16, 17, 18, 19, -642, 0, 0, -642, 0, 20,
2873  21, 22, 23, 24, 25, 26, 0, 0, 203, 0,
2874  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
2875  34, 35, 36, 37, 38, 39, 40, 204, 41, 42,
2876  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
2877  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2878  0, 0, 0, 0, 0, 0, 0, 0, 205, 0,
2879  0, 206, 52, 0, 53, 54, 0, 207, 208, 209,
2880  56, 57, 210, 59, 60, 61, 62, 63, 64, 0,
2881  0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
2882  6, 7, 0, 9, 0, 0, 0, 10, 11, 65,
2883  211, 67, 12, 0, 13, 14, 15, 16, 17, 18,
2884  19, 0, 0, 0, 235, 0, 20, 21, 22, 23,
2885  24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
2886  0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
2887  37, 38, 39, 40, 0, 41, 42, 43, 44, 0,
2888  45, 46, 47, 0, 48, 49, 0, 0, 0, 0,
2889  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2890  0, 0, 0, 0, 0, 205, 0, 0, 206, 52,
2891  0, 53, 54, 0, 0, 0, 0, 56, 57, 58,
2892  59, 60, 61, 62, 63, 64, 0, 0, 0, 0,
2893  0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
2894  9, 0, 0, 0, 10, 11, 65, 66, 67, 12,
2895  0, 13, 14, 15, 16, 17, 18, 19, 305, 0,
2896  0, 306, 0, 20, 21, 22, 23, 24, 25, 26,
2897  0, 0, 27, 0, 0, 0, 0, 0, 0, 29,
2898  0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
2899  40, 0, 41, 42, 43, 44, 0, 45, 46, 47,
2900  0, 48, 49, 0, 0, 0, 0, 0, 0, 0,
2901  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2902  0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
2903  0, 0, 0, 0, 56, 57, 58, 59, 60, 61,
2904  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
2905  0, 0, 0, 5, 6, 7, 8, 9, 0, 0,
2906  0, 10, 11, 65, 66, 67, 12, 0, 13, 14,
2907  15, 16, 17, 18, 19, 0, 0, 0, 235, 0,
2908  20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
2909  0, 0, 0, 0, 0, 28, 29, 30, 31, 32,
2910  33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
2911  42, 43, 44, 0, 45, 46, 47, 0, 48, 49,
2912  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2913  0, 0, 0, 0, 0, 0, 0, 0, 0, 50,
2914  0, 0, 51, 52, 0, 53, 54, 0, 55, 0,
2915  0, 56, 57, 58, 59, 60, 61, 62, 63, 64,
2916  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2917  5, 6, 7, 8, 9, 0, 0, 0, 10, 11,
2918  65, 66, 67, 12, 0, 13, 14, 15, 16, 17,
2919  18, 19, 502, 0, 0, 0, 0, 20, 21, 22,
2920  23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
2921  0, 0, 28, 29, 253, 31, 32, 33, 34, 35,
2922  36, 37, 38, 39, 40, 0, 41, 42, 43, 44,
2923  0, 45, 46, 47, 0, 48, 49, 0, 0, 0,
2924  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2925  0, 0, 0, 0, 0, 0, 50, 0, 0, 51,
2926  52, 0, 53, 54, 0, 55, 0, 0, 56, 57,
2927  58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
2928  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2929  0, 0, 0, 0, 0, 0, 0, 65, 66, 67,
2930  0, 0, 0, 0, 0, 0, 0, 0, 0, 502,
2931  121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
2932  131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
2933  141, 142, 143, 144, 0, 0, 0, 145, 146, 147,
2934  389, 390, 391, 392, 152, 153, 154, 0, 0, 0,
2935  0, 0, 155, 156, 157, 158, 393, 394, 395, 396,
2936  163, 37, 38, 397, 40, 0, 0, 0, 0, 0,
2937  0, 0, 0, 0, 0, 165, 166, 167, 168, 169,
2938  170, 171, 172, 173, 0, 0, 174, 175, 0, 0,
2939  176, 177, 178, 179, 0, 0, 0, 0, 0, 0,
2940  0, 0, 0, 0, 0, 180, 181, 0, 0, 0,
2941  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2942  0, 0, 0, 0, 0, 0, 0, 182, 183, 184,
2943  185, 186, 187, 188, 189, 190, 191, 0, 192, 193,
2944  0, 0, 0, 0, 0, 194, 398, 121, 122, 123,
2945  124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
2946  134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
2947  144, 0, 0, 0, 145, 146, 147, 148, 149, 150,
2948  151, 152, 153, 154, 0, 0, 0, 0, 0, 155,
2949  156, 157, 158, 159, 160, 161, 162, 163, 284, 285,
2950  164, 286, 0, 0, 0, 0, 0, 0, 0, 0,
2951  0, 0, 165, 166, 167, 168, 169, 170, 171, 172,
2952  173, 0, 0, 174, 175, 0, 0, 176, 177, 178,
2953  179, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2954  0, 0, 180, 181, 0, 0, 0, 0, 0, 0,
2955  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2956  0, 0, 0, 0, 182, 183, 184, 185, 186, 187,
2957  188, 189, 190, 191, 0, 192, 193, 0, 0, 0,
2958  0, 0, 194, 121, 122, 123, 124, 125, 126, 127,
2959  128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
2960  138, 139, 140, 141, 142, 143, 144, 0, 0, 0,
2961  145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
2962  0, 0, 0, 0, 0, 155, 156, 157, 158, 159,
2963  160, 161, 162, 163, 237, 0, 164, 0, 0, 0,
2964  0, 0, 0, 0, 0, 0, 0, 0, 165, 166,
2965  167, 168, 169, 170, 171, 172, 173, 0, 0, 174,
2966  175, 0, 0, 176, 177, 178, 179, 0, 0, 0,
2967  0, 0, 0, 0, 0, 0, 0, 0, 180, 181,
2968  0, 0, 57, 0, 0, 0, 0, 0, 0, 0,
2969  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2970  182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
2971  0, 192, 193, 0, 0, 0, 0, 0, 194, 121,
2972  122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
2973  132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
2974  142, 143, 144, 0, 0, 0, 145, 146, 147, 148,
2975  149, 150, 151, 152, 153, 154, 0, 0, 0, 0,
2976  0, 155, 156, 157, 158, 159, 160, 161, 162, 163,
2977  0, 0, 164, 0, 0, 0, 0, 0, 0, 0,
2978  0, 0, 0, 0, 165, 166, 167, 168, 169, 170,
2979  171, 172, 173, 0, 0, 174, 175, 0, 0, 176,
2980  177, 178, 179, 0, 0, 0, 0, 0, 0, 0,
2981  0, 0, 0, 0, 180, 181, 0, 0, 57, 0,
2982  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2983  0, 0, 0, 0, 0, 0, 182, 183, 184, 185,
2984  186, 187, 188, 189, 190, 191, 0, 192, 193, 0,
2985  0, 0, 0, 0, 194, 121, 122, 123, 124, 125,
2986  126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
2987  136, 137, 138, 139, 140, 141, 142, 143, 144, 0,
2988  0, 0, 145, 146, 147, 148, 149, 150, 151, 152,
2989  153, 154, 0, 0, 0, 0, 0, 155, 156, 157,
2990  158, 159, 160, 161, 162, 163, 0, 0, 164, 0,
2991  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2992  165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
2993  0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
2994  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2995  180, 181, 0, 0, 0, 0, 0, 0, 0, 0,
2996  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2997  0, 0, 182, 183, 184, 185, 186, 187, 188, 189,
2998  190, 191, 0, 192, 193, 5, 6, 7, 0, 9,
2999  194, 0, 0, 10, 11, 0, 0, 0, 12, 0,
3000  13, 14, 15, 242, 243, 18, 19, 0, 0, 0,
3001  0, 0, 244, 245, 246, 23, 24, 25, 26, 0,
3002  0, 203, 0, 0, 0, 0, 0, 0, 272, 0,
3003  0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
3004  0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
3005  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3006  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3007  0, 273, 0, 0, 206, 52, 0, 53, 54, 0,
3008  0, 0, 0, 56, 57, 58, 59, 60, 61, 62,
3009  63, 64, 0, 0, 0, 0, 0, 0, 0, 0,
3010  0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
3011  0, 0, 274, 10, 11, 0, 0, 0, 12, 275,
3012  13, 14, 15, 242, 243, 18, 19, 0, 0, 0,
3013  0, 0, 244, 245, 246, 23, 24, 25, 26, 0,
3014  0, 203, 0, 0, 0, 0, 0, 0, 272, 0,
3015  0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
3016  0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
3017  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3018  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3019  0, 273, 0, 0, 206, 52, 0, 53, 54, 0,
3020  0, 0, 0, 56, 57, 58, 59, 60, 61, 62,
3021  63, 64, 0, 0, 0, 0, 0, 0, 0, 0,
3022  0, 0, 0, 0, 0, 5, 6, 7, 8, 9,
3023  0, 0, 274, 10, 11, 0, 0, 0, 12, 523,
3024  13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
3025  0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
3026  0, 27, 0, 0, 0, 0, 0, 28, 29, 30,
3027  31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
3028  0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
3029  48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
3030  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3031  0, 50, 0, 0, 51, 52, 0, 53, 54, 0,
3032  55, 0, 0, 56, 57, 58, 59, 60, 61, 62,
3033  63, 64, 0, 0, 0, 0, 0, 0, 0, 0,
3034  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
3035  10, 11, 65, 66, 67, 12, 0, 13, 14, 15,
3036  16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
3037  21, 22, 23, 24, 25, 26, 0, 0, 203, 0,
3038  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
3039  34, 35, 36, 37, 38, 39, 40, 204, 41, 42,
3040  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
3041  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3042  0, 0, 0, 0, 0, 0, 0, 0, 205, 0,
3043  0, 206, 52, 0, 53, 54, 0, 207, 208, 209,
3044  56, 57, 210, 59, 60, 61, 62, 63, 64, 0,
3045  0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
3046  6, 7, 8, 9, 0, 0, 0, 10, 11, 65,
3047  211, 67, 12, 0, 13, 14, 15, 16, 17, 18,
3048  19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
3049  24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
3050  0, 28, 29, 0, 31, 32, 33, 34, 35, 36,
3051  37, 38, 39, 40, 0, 41, 42, 43, 44, 0,
3052  45, 46, 47, 0, 48, 49, 0, 0, 0, 0,
3053  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3054  0, 0, 0, 0, 0, 50, 0, 0, 51, 52,
3055  0, 53, 54, 0, 55, 0, 0, 56, 57, 58,
3056  59, 60, 61, 62, 63, 64, 0, 0, 0, 0,
3057  0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
3058  9, 0, 0, 0, 10, 11, 65, 66, 67, 12,
3059  0, 13, 14, 15, 242, 243, 18, 19, 0, 0,
3060  0, 0, 0, 244, 245, 246, 23, 24, 25, 26,
3061  0, 0, 203, 0, 0, 0, 0, 0, 0, 29,
3062  0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
3063  40, 204, 41, 42, 43, 44, 0, 45, 46, 47,
3064  0, 48, 49, 0, 0, 0, 0, 0, 0, 0,
3065  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3066  0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
3067  0, 618, 208, 209, 56, 57, 210, 59, 60, 61,
3068  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
3069  0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
3070  0, 10, 11, 65, 211, 67, 12, 0, 13, 14,
3071  15, 242, 243, 18, 19, 0, 0, 0, 0, 0,
3072  244, 245, 246, 23, 24, 25, 26, 0, 0, 203,
3073  0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
3074  33, 34, 35, 36, 37, 38, 39, 40, 204, 41,
3075  42, 43, 44, 0, 45, 46, 47, 0, 48, 49,
3076  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3077  0, 0, 0, 0, 0, 0, 0, 0, 0, 205,
3078  0, 0, 206, 52, 0, 53, 54, 0, 207, 208,
3079  0, 56, 57, 210, 59, 60, 61, 62, 63, 64,
3080  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3081  5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
3082  65, 211, 67, 12, 0, 13, 14, 15, 242, 243,
3083  18, 19, 0, 0, 0, 0, 0, 244, 245, 246,
3084  23, 24, 25, 26, 0, 0, 203, 0, 0, 0,
3085  0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
3086  36, 37, 38, 39, 40, 204, 41, 42, 43, 44,
3087  0, 45, 46, 47, 0, 48, 49, 0, 0, 0,
3088  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3089  0, 0, 0, 0, 0, 0, 205, 0, 0, 206,
3090  52, 0, 53, 54, 0, 0, 208, 209, 56, 57,
3091  210, 59, 60, 61, 62, 63, 64, 0, 0, 0,
3092  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
3093  0, 9, 0, 0, 0, 10, 11, 65, 211, 67,
3094  12, 0, 13, 14, 15, 242, 243, 18, 19, 0,
3095  0, 0, 0, 0, 244, 245, 246, 23, 24, 25,
3096  26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
3097  29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
3098  39, 40, 204, 41, 42, 43, 44, 0, 45, 46,
3099  47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
3100  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3101  0, 0, 0, 205, 0, 0, 206, 52, 0, 53,
3102  54, 0, 618, 208, 0, 56, 57, 210, 59, 60,
3103  61, 62, 63, 64, 0, 0, 0, 0, 0, 0,
3104  0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
3105  0, 0, 10, 11, 65, 211, 67, 12, 0, 13,
3106  14, 15, 242, 243, 18, 19, 0, 0, 0, 0,
3107  0, 244, 245, 246, 23, 24, 25, 26, 0, 0,
3108  203, 0, 0, 0, 0, 0, 0, 29, 0, 0,
3109  32, 33, 34, 35, 36, 37, 38, 39, 40, 204,
3110  41, 42, 43, 44, 0, 45, 46, 47, 0, 48,
3111  49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3112  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3113  205, 0, 0, 206, 52, 0, 53, 54, 0, 0,
3114  208, 0, 56, 57, 210, 59, 60, 61, 62, 63,
3115  64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3116  0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
3117  11, 65, 211, 67, 12, 0, 13, 14, 15, 16,
3118  17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
3119  22, 23, 24, 25, 26, 0, 0, 203, 0, 0,
3120  0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
3121  35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
3122  44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
3123  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3124  0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
3125  206, 52, 0, 53, 54, 0, 516, 0, 0, 56,
3126  57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
3127  0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
3128  7, 0, 9, 0, 0, 0, 10, 11, 65, 211,
3129  67, 12, 0, 13, 14, 15, 242, 243, 18, 19,
3130  0, 0, 0, 0, 0, 244, 245, 246, 23, 24,
3131  25, 26, 0, 0, 203, 0, 0, 0, 0, 0,
3132  0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
3133  38, 39, 40, 0, 41, 42, 43, 44, 0, 45,
3134  46, 47, 0, 48, 49, 0, 0, 0, 0, 0,
3135  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3136  0, 0, 0, 0, 205, 0, 0, 206, 52, 0,
3137  53, 54, 0, 207, 0, 0, 56, 57, 58, 59,
3138  60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
3139  0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
3140  0, 0, 0, 10, 11, 65, 211, 67, 12, 0,
3141  13, 14, 15, 242, 243, 18, 19, 0, 0, 0,
3142  0, 0, 244, 245, 246, 23, 24, 25, 26, 0,
3143  0, 203, 0, 0, 0, 0, 0, 0, 29, 0,
3144  0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
3145  0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
3146  48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
3147  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3148  0, 205, 0, 0, 206, 52, 0, 53, 54, 0,
3149  814, 0, 0, 56, 57, 58, 59, 60, 61, 62,
3150  63, 64, 0, 0, 0, 0, 0, 0, 0, 0,
3151  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
3152  10, 11, 65, 211, 67, 12, 0, 13, 14, 15,
3153  242, 243, 18, 19, 0, 0, 0, 0, 0, 244,
3154  245, 246, 23, 24, 25, 26, 0, 0, 203, 0,
3155  0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
3156  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
3157  43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
3158  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3159  0, 0, 0, 0, 0, 0, 0, 0, 205, 0,
3160  0, 206, 52, 0, 53, 54, 0, 516, 0, 0,
3161  56, 57, 58, 59, 60, 61, 62, 63, 64, 0,
3162  0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
3163  6, 7, 0, 9, 0, 0, 0, 10, 11, 65,
3164  211, 67, 12, 0, 13, 14, 15, 242, 243, 18,
3165  19, 0, 0, 0, 0, 0, 244, 245, 246, 23,
3166  24, 25, 26, 0, 0, 203, 0, 0, 0, 0,
3167  0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
3168  37, 38, 39, 40, 0, 41, 42, 43, 44, 0,
3169  45, 46, 47, 0, 48, 49, 0, 0, 0, 0,
3170  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3171  0, 0, 0, 0, 0, 205, 0, 0, 206, 52,
3172  0, 53, 54, 0, 618, 0, 0, 56, 57, 58,
3173  59, 60, 61, 62, 63, 64, 0, 0, 0, 0,
3174  0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
3175  9, 0, 0, 0, 10, 11, 65, 211, 67, 12,
3176  0, 13, 14, 15, 242, 243, 18, 19, 0, 0,
3177  0, 0, 0, 244, 245, 246, 23, 24, 25, 26,
3178  0, 0, 203, 0, 0, 0, 0, 0, 0, 29,
3179  0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
3180  40, 0, 41, 42, 43, 44, 0, 45, 46, 47,
3181  0, 48, 49, 0, 0, 0, 0, 0, 0, 0,
3182  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3183  0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
3184  0, 0, 0, 0, 56, 57, 58, 59, 60, 61,
3185  62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
3186  0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
3187  0, 10, 11, 65, 211, 67, 12, 0, 13, 14,
3188  15, 16, 17, 18, 19, 0, 0, 0, 0, 0,
3189  20, 21, 22, 23, 24, 25, 26, 0, 0, 203,
3190  0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
3191  33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
3192  42, 43, 44, 0, 45, 46, 47, 0, 48, 49,
3193  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3194  0, 0, 0, 0, 0, 0, 0, 0, 0, 205,
3195  0, 0, 206, 52, 0, 53, 54, 0, 0, 0,
3196  0, 56, 57, 58, 59, 60, 61, 62, 63, 64,
3197  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3198  5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
3199  65, 211, 67, 12, 0, 13, 14, 15, 16, 17,
3200  18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
3201  23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
3202  0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
3203  36, 37, 38, 39, 40, 0, 41, 42, 43, 44,
3204  0, 45, 46, 47, 0, 48, 49, 0, 0, 0,
3205  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3206  0, 0, 0, 0, 0, 0, 205, 0, 0, 206,
3207  52, 0, 53, 54, 0, 0, 0, 0, 56, 57,
3208  58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
3209  0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
3210  0, 9, 0, 0, 0, 10, 11, 65, 66, 67,
3211  12, 0, 13, 14, 15, 242, 243, 18, 19, 0,
3212  0, 0, 0, 0, 244, 245, 246, 23, 24, 25,
3213  26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
3214  272, 0, 0, 32, 33, 34, 35, 36, 37, 38,
3215  39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
3216  47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3217  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3218  0, 0, 0, 273, 0, 0, 326, 52, 0, 53,
3219  54, 0, 327, 0, 0, 56, 57, 58, 59, 60,
3220  61, 62, 63, 64, 0, 0, 0, 0, 0, 0,
3221  5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
3222  0, 0, 0, 12, 274, 13, 14, 15, 242, 243,
3223  18, 19, 0, 0, 0, 0, 0, 244, 245, 246,
3224  23, 24, 25, 26, 0, 0, 203, 0, 0, 0,
3225  0, 0, 0, 272, 0, 0, 32, 33, 34, 35,
3226  36, 37, 38, 39, 40, 0, 41, 42, 43, 44,
3227  0, 45, 46, 47, 0, 0, 0, 0, 0, 0,
3228  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3229  0, 0, 0, 0, 0, 0, 370, 0, 0, 51,
3230  52, 0, 53, 54, 0, 55, 0, 0, 56, 57,
3231  58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
3232  0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
3233  0, 10, 11, 0, 0, 0, 12, 274, 13, 14,
3234  15, 242, 243, 18, 19, 0, 0, 0, 0, 0,
3235  244, 245, 246, 23, 24, 25, 26, 0, 0, 203,
3236  0, 0, 0, 0, 0, 0, 272, 0, 0, 32,
3237  33, 34, 378, 36, 37, 38, 379, 40, 0, 41,
3238  42, 43, 44, 0, 45, 46, 47, 0, 0, 0,
3239  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3240  0, 0, 0, 0, 0, 380, 0, 0, 0, 381,
3241  0, 0, 206, 52, 0, 53, 54, 0, 0, 0,
3242  0, 56, 57, 58, 59, 60, 61, 62, 63, 64,
3243  0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
3244  9, 0, 0, 0, 10, 11, 0, 0, 0, 12,
3245  274, 13, 14, 15, 242, 243, 18, 19, 0, 0,
3246  0, 0, 0, 244, 245, 246, 23, 24, 25, 26,
3247  0, 0, 203, 0, 0, 0, 0, 0, 0, 272,
3248  0, 0, 32, 33, 34, 378, 36, 37, 38, 379,
3249  40, 0, 41, 42, 43, 44, 0, 45, 46, 47,
3250  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3251  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3252  0, 0, 381, 0, 0, 206, 52, 0, 53, 54,
3253  0, 0, 0, 0, 56, 57, 58, 59, 60, 61,
3254  62, 63, 64, 0, 0, 0, 0, 0, 0, 5,
3255  6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
3256  0, 0, 12, 274, 13, 14, 15, 242, 243, 18,
3257  19, 0, 0, 0, 0, 0, 244, 245, 246, 23,
3258  24, 25, 26, 0, 0, 203, 0, 0, 0, 0,
3259  0, 0, 272, 0, 0, 32, 33, 34, 35, 36,
3260  37, 38, 39, 40, 0, 41, 42, 43, 44, 0,
3261  45, 46, 47, 0, 0, 0, 0, 0, 0, 0,
3262  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3263  0, 0, 0, 0, 0, 273, 0, 0, 326, 52,
3264  0, 53, 54, 0, 0, 0, 0, 56, 57, 58,
3265  59, 60, 61, 62, 63, 64, 0, 0, 0, 0,
3266  0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
3267  10, 11, 0, 0, 0, 12, 274, 13, 14, 15,
3268  242, 243, 18, 19, 0, 0, 0, 0, 0, 244,
3269  245, 246, 23, 24, 25, 26, 0, 0, 203, 0,
3270  0, 0, 0, 0, 0, 272, 0, 0, 32, 33,
3271  34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
3272  43, 44, 0, 45, 46, 47, 0, 0, 0, 0,
3273  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3274  0, 0, 0, 0, 0, 0, 0, 0, 965, 0,
3275  0, 206, 52, 0, 53, 54, 0, 0, 0, 0,
3276  56, 57, 58, 59, 60, 61, 62, 63, 64, 0,
3277  0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
3278  0, 0, 0, 10, 11, 0, 0, 0, 12, 274,
3279  13, 14, 15, 242, 243, 18, 19, 0, 0, 0,
3280  0, 0, 244, 245, 246, 23, 24, 25, 26, 0,
3281  0, 203, 0, 0, 0, 0, 0, 0, 272, 0,
3282  0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
3283  0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
3284  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3285  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3286  0, 1005, 0, 0, 206, 52, 0, 53, 54, 0,
3287  0, 0, 0, 56, 57, 58, 59, 60, 61, 62,
3288  63, 64, 0, 0, 0, 0, 0, 622, 563, 0,
3289  0, 623, 0, 0, 0, 0, 0, 0, 0, 0,
3290  0, 0, 274, 165, 166, 167, 168, 169, 170, 171,
3291  172, 173, 0, 0, 174, 175, 0, 0, 176, 177,
3292  178, 179, 0, 0, 0, 0, 0, 0, 0, 0,
3293  0, 0, 0, 180, 181, 0, 0, 0, 0, 0,
3294  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3295  0, 0, 0, 0, 0, 182, 183, 184, 185, 186,
3296  187, 188, 189, 190, 191, 0, 192, 193, 625, 571,
3297  0, 0, 626, 194, 0, 0, 0, 0, 0, 0,
3298  0, 0, 0, 0, 165, 166, 167, 168, 169, 170,
3299  171, 172, 173, 0, 0, 174, 175, 0, 0, 176,
3300  177, 178, 179, 0, 0, 0, 0, 0, 0, 0,
3301  0, 0, 0, 0, 180, 181, 0, 0, 0, 0,
3302  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3303  0, 0, 0, 0, 0, 0, 182, 183, 184, 185,
3304  186, 187, 188, 189, 190, 191, 0, 192, 193, 649,
3305  563, 0, 0, 650, 194, 0, 0, 0, 0, 0,
3306  0, 0, 0, 0, 0, 165, 166, 167, 168, 169,
3307  170, 171, 172, 173, 0, 0, 174, 175, 0, 0,
3308  176, 177, 178, 179, 0, 0, 0, 0, 0, 0,
3309  0, 0, 0, 0, 0, 180, 181, 0, 0, 0,
3310  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3311  0, 0, 0, 0, 0, 0, 0, 182, 183, 184,
3312  185, 186, 187, 188, 189, 190, 191, 0, 192, 193,
3313  652, 571, 0, 0, 653, 194, 0, 0, 0, 0,
3314  0, 0, 0, 0, 0, 0, 165, 166, 167, 168,
3315  169, 170, 171, 172, 173, 0, 0, 174, 175, 0,
3316  0, 176, 177, 178, 179, 0, 0, 0, 0, 0,
3317  0, 0, 0, 0, 0, 0, 180, 181, 0, 0,
3318  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3319  0, 0, 0, 0, 0, 0, 0, 0, 182, 183,
3320  184, 185, 186, 187, 188, 189, 190, 191, 0, 192,
3321  193, 740, 563, 0, 0, 741, 194, 0, 0, 0,
3322  0, 0, 0, 0, 0, 0, 0, 165, 166, 167,
3323  168, 169, 170, 171, 172, 173, 0, 0, 174, 175,
3324  0, 0, 176, 177, 178, 179, 0, 0, 0, 0,
3325  0, 0, 0, 0, 0, 0, 0, 180, 181, 0,
3326  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3327  0, 0, 0, 0, 0, 0, 0, 0, 0, 182,
3328  183, 184, 185, 186, 187, 188, 189, 190, 191, 0,
3329  192, 193, 743, 571, 0, 0, 744, 194, 0, 0,
3330  0, 0, 0, 0, 0, 0, 0, 0, 165, 166,
3331  167, 168, 169, 170, 171, 172, 173, 0, 0, 174,
3332  175, 0, 0, 176, 177, 178, 179, 0, 0, 0,
3333  0, 0, 0, 0, 0, 0, 0, 0, 180, 181,
3334  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3335  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3336  182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
3337  0, 192, 193, 749, 563, 0, 0, 750, 194, 0,
3338  0, 0, 0, 0, 0, 0, 0, 0, 0, 165,
3339  166, 167, 168, 169, 170, 171, 172, 173, 0, 0,
3340  174, 175, 0, 0, 176, 177, 178, 179, 0, 0,
3341  0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
3342  181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3343  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3344  0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
3345  191, 0, 192, 193, 819, 563, 0, 0, 820, 194,
3346  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3347  165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
3348  0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
3349  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3350  180, 181, 0, 0, 0, 0, 0, 0, 0, 0,
3351  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3352  0, 0, 182, 183, 184, 185, 186, 187, 188, 189,
3353  190, 191, 0, 192, 193, 822, 571, 0, 0, 823,
3354  194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3355  0, 165, 166, 167, 168, 169, 170, 171, 172, 173,
3356  0, 0, 174, 175, 0, 0, 176, 177, 178, 179,
3357  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3358  0, 180, 181, 0, 0, 0, 0, 0, 0, 0,
3359  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3360  0, 0, 0, 182, 183, 184, 185, 186, 187, 188,
3361  189, 190, 191, 0, 192, 193, 1047, 563, 0, 0,
3362  1048, 194, 0, 0, 0, 0, 0, 0, 0, 0,
3363  0, 0, 165, 166, 167, 168, 169, 170, 171, 172,
3364  173, 0, 0, 174, 175, 0, 0, 176, 177, 178,
3365  179, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3366  0, 0, 180, 181, 0, 0, 0, 0, 0, 0,
3367  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3368  0, 0, 0, 0, 182, 183, 184, 185, 186, 187,
3369  188, 189, 190, 191, 0, 192, 193, 1050, 571, 0,
3370  0, 1051, 194, 0, 0, 0, 0, 0, 0, 0,
3371  0, 0, 0, 165, 166, 167, 168, 169, 170, 171,
3372  172, 173, 0, 0, 174, 175, 0, 0, 176, 177,
3373  178, 179, 0, 0, 0, 0, 0, 0, 0, 0,
3374  0, 0, 0, 180, 181, 0, 0, 0, 0, 0,
3375  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3376  0, 0, 0, 0, 0, 182, 183, 184, 185, 186,
3377  187, 188, 189, 190, 191, 0, 192, 193, 1064, 563,
3378  0, 0, 1065, 194, 0, 0, 0, 0, 0, 0,
3379  0, 0, 0, 0, 165, 166, 167, 168, 169, 170,
3380  171, 172, 173, 0, 0, 174, 175, 0, 0, 176,
3381  177, 178, 179, 0, 0, 0, 0, 0, 0, 0,
3382  0, 0, 0, 0, 180, 181, 0, 0, 0, 0,
3383  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3384  0, 0, 0, 0, 0, 0, 182, 183, 184, 185,
3385  186, 187, 188, 189, 190, 191, 0, 192, 193, 0,
3386  0, 0, 0, 0, 194
3387 };
3388 
3389 #define yypact_value_is_default(yystate) \
3390  ((yystate) == (-876))
3391 
3392 #define yytable_value_is_error(yytable_value) \
3393  ((yytable_value) == (-643))
3394 
3395 static const yytype_int16 yycheck[] =
3396 {
3397  2, 57, 27, 86, 29, 69, 98, 66, 364, 22,
3398  81, 16, 17, 8, 97, 20, 28, 418, 584, 4,
3399  477, 329, 8, 16, 17, 426, 358, 20, 92, 55,
3400  473, 89, 426, 28, 92, 65, 8, 583, 357, 796,
3401  96, 360, 28, 787, 266, 2, 55, 4, 270, 76,
3402  92, 53, 54, 51, 69, 81, 28, 874, 601, 2,
3403  53, 4, 57, 76, 446, 224, 787, 93, 94, 95,
3404  464, 51, 728, 16, 17, 796, 732, 20, 26, 381,
3405  523, 667, 407, 408, 876, 404, 37, 38, 935, 624,
3406  422, 25, 254, 26, 29, 13, 0, 25, 680, 87,
3407  88, 96, 421, 63, 423, 16, 17, 13, 51, 20,
3408  63, 78, 55, 88, 931, 88, 651, 88, 88, 13,
3409  329, 16, 17, 66, 716, 20, 137, 88, 25, 13,
3410  449, 723, 87, 88, 145, 1010, 219, 140, 81, 87,
3411  88, 90, 145, 475, 145, 88, 89, 896, 477, 92,
3412  93, 94, 95, 113, 25, 122, 144, 476, 53, 54,
3413  113, 25, 37, 38, 326, 13, 249, 26, 117, 144,
3414  987, 144, 25, 144, 144, 896, 88, 1024, 88, 114,
3415  25, 136, 939, 144, 13, 1060, 134, 25, 136, 144,
3416  25, 139, 256, 985, 145, 278, 144, 13, 407, 408,
3417  944, 134, 951, 137, 275, 748, 1023, 742, 206, 137,
3418  667, 139, 13, 137, 256, 134, 218, 752, 939, 137,
3419  247, 145, 224, 228, 142, 230, 231, 145, 56, 231,
3420  631, 632, 144, 139, 144, 228, 142, 230, 632, 145,
3421  137, 256, 139, 241, 274, 139, 661, 272, 142, 275,
3422  54, 145, 310, 311, 312, 313, 254, 589, 142, 1003,
3423  642, 145, 705, 206, 920, 324, 137, 599, 88, 89,
3424  329, 590, 92, 137, 254, 134, 435, 863, 13, 865,
3425  139, 600, 1003, 27, 137, 228, 821, 230, 231, 1010,
3426  373, 234, 137, 236, 142, 252, 598, 145, 241, 137,
3427  90, 327, 137, 367, 88, 887, 263, 365, 366, 252,
3428  856, 254, 234, 142, 857, 90, 145, 228, 327, 230,
3429  263, 864, 137, 1067, 309, 367, 142, 117, 326, 145,
3430  145, 324, 275, 228, 13, 230, 329, 259, 667, 1060,
3431  262, 142, 117, 290, 145, 292, 326, 294, 407, 408,
3432  63, 298, 309, 358, 920, 13, 358, 314, 90, 15,
3433  144, 17, 137, 778, 779, 360, 309, 310, 311, 312,
3434  313, 314, 315, 316, 139, 957, 958, 143, 710, 88,
3435  145, 324, 738, 326, 327, 117, 329, 88, 713, 714,
3436  709, 117, 711, 87, 88, 720, 721, 110, 142, 112,
3437  204, 145, 473, 207, 208, 209, 863, 142, 865, 404,
3438  145, 137, 90, 90, 234, 358, 236, 422, 361, 727,
3439  422, 143, 365, 366, 646, 87, 88, 143, 423, 90,
3440  143, 443, 434, 435, 28, 144, 25, 380, 143, 117,
3441  117, 984, 136, 144, 446, 139, 117, 473, 443, 25,
3442  144, 534, 523, 63, 449, 137, 117, 443, 787, 874,
3443  1042, 876, 621, 142, 407, 408, 145, 796, 415, 870,
3444  475, 443, 90, 475, 136, 142, 870, 100, 145, 422,
3445  117, 476, 144, 103, 142, 90, 25, 145, 63, 446,
3446  310, 311, 312, 313, 90, 315, 316, 523, 707, 117,
3447  110, 124, 112, 446, 713, 714, 428, 832, 87, 88,
3448  432, 720, 721, 456, 1049, 437, 931, 932, 582, 583,
3449  324, 117, 90, 418, 137, 329, 551, 139, 117, 56,
3450  473, 453, 475, 143, 863, 110, 865, 112, 113, 566,
3451  115, 117, 91, 490, 569, 365, 366, 574, 137, 117,
3452  497, 140, 908, 25, 567, 63, 145, 136, 914, 67,
3453  380, 137, 575, 139, 140, 144, 461, 896, 63, 145,
3454  985, 117, 987, 407, 408, 577, 647, 54, 117, 137,
3455  523, 579, 609, 581, 589, 14, 15, 589, 65, 66,
3456  424, 425, 585, 90, 599, 590, 609, 599, 137, 624,
3457  522, 140, 110, 615, 112, 600, 145, 609, 1023, 137,
3458  939, 770, 70, 417, 418, 110, 450, 112, 113, 621,
3459  615, 647, 426, 832, 960, 961, 651, 139, 52, 615,
3460  54, 55, 56, 57, 705, 52, 579, 896, 581, 56,
3461  642, 134, 70, 615, 140, 117, 589, 52, 707, 54,
3462  55, 56, 57, 90, 713, 714, 599, 461, 601, 602,
3463  464, 720, 721, 139, 90, 137, 758, 117, 140, 127,
3464  128, 129, 139, 145, 1003, 141, 678, 56, 680, 705,
3465  117, 1010, 746, 135, 1016, 642, 137, 745, 90, 747,
3466  717, 117, 635, 87, 88, 113, 70, 724, 1017, 642,
3467  756, 1037, 1038, 113, 647, 710, 113, 1043, 710, 1045,
3468  1046, 137, 516, 137, 113, 117, 711, 742, 137, 90,
3469  790, 97, 724, 645, 794, 727, 728, 752, 730, 142,
3470  732, 1060, 137, 90, 727, 137, 631, 63, 1074, 1075,
3471  1076, 1077, 136, 17, 1003, 586, 117, 1083, 1007, 706,
3472  144, 1010, 90, 1012, 56, 121, 26, 58, 25, 784,
3473  117, 756, 705, 706, 707, 140, 137, 710, 770, 70,
3474  713, 714, 137, 832, 137, 63, 135, 720, 721, 117,
3475  137, 585, 602, 134, 110, 137, 112, 113, 846, 87,
3476  88, 137, 856, 682, 858, 684, 821, 137, 99, 100,
3477  143, 1060, 745, 1062, 747, 748, 143, 809, 1067, 811,
3478  1069, 44, 616, 137, 618, 635, 137, 87, 88, 2,
3479  1079, 4, 110, 124, 112, 113, 896, 631, 632, 139,
3480  90, 90, 754, 16, 17, 70, 117, 20, 136, 841,
3481  10, 8, 844, 135, 13, 843, 144, 137, 117, 771,
3482  85, 86, 850, 851, 137, 52, 854, 117, 117, 137,
3483  782, 137, 52, 927, 134, 137, 136, 52, 51, 139,
3484  10, 896, 676, 135, 144, 10, 137, 137, 137, 713,
3485  714, 907, 119, 66, 967, 887, 720, 721, 70, 832,
3486  125, 126, 127, 128, 129, 141, 737, 15, 702, 897,
3487  843, 139, 900, 846, 70, 88, 89, 850, 851, 92,
3488  137, 854, 753, 911, 857, 135, 137, 135, 920, 85,
3489  86, 864, 137, 727, 26, 745, 951, 747, 91, 955,
3490  9, 765, 766, 1003, 768, 769, 137, 1007, 936, 937,
3491  1010, 140, 1012, 125, 126, 127, 128, 129, 142, 137,
3492  137, 873, 117, 137, 897, 957, 958, 900, 124, 125,
3493  126, 127, 128, 129, 907, 990, 137, 122, 911, 137,
3494  87, 88, 790, 971, 796, 973, 1002, 799, 137, 137,
3495  137, 979, 786, 137, 137, 87, 88, 56, 137, 135,
3496  1060, 122, 1062, 936, 937, 884, 885, 1067, 832, 1069,
3497  889, 999, 891, 925, 893, 137, 847, 56, 849, 1079,
3498  814, 1016, 955, 111, 1016, 137, 1018, 1019, 859, 136,
3499  139, 137, 1017, 206, 1049, 137, 846, 144, 971, 137,
3500  973, 456, 134, 139, 136, 869, 979, 139, 137, 70,
3501  1042, 984, 144, 93, 95, 228, 896, 230, 231, 853,
3502  724, 234, 811, 236, 85, 86, 999, 1019, 241, 1002,
3503  778, 87, 88, 87, 88, 1024, 870, 759, 699, 252,
3504  515, 254, 1018, 1016, 896, 298, 917, 918, 896, 101,
3505  263, 922, 210, 59, 96, 926, 928, 87, 88, 1003,
3506  790, 122, 123, 124, 125, 126, 127, 128, 129, 87,
3507  88, 87, 88, 787, 87, 88, 995, 996, 997, 998,
3508  136, 1007, 136, -1, 87, 88, -1, 939, 144, 941,
3509  144, -1, -1, -1, 946, -1, 309, 310, 311, 312,
3510  313, 314, 315, 316, -1, -1, 136, -1, 87, 88,
3511  -1, 324, -1, 326, 144, -1, 329, -1, 136, -1,
3512  136, -1, 993, 136, -1, -1, 144, -1, 144, -1,
3513  -1, 144, -1, 136, -1, -1, 16, 17, -1, 1058,
3514  20, 144, 63, -1, -1, 358, -1, -1, 361, 1020,
3515  1021, -1, 365, 366, -1, 1003, -1, 136, 1010, 1007,
3516  1012, -1, 1010, -1, 1012, 144, -1, 380, 48, 49,
3517  -1, -1, -1, 53, 54, -1, -1, 1029, 52, -1,
3518  54, 55, 56, 57, 58, 63, 66, 67, -1, 110,
3519  -1, 112, 113, -1, 407, 408, 70, 52, -1, 54,
3520  55, 56, 57, 58, -1, -1, -1, -1, 1060, 422,
3521  1062, -1, 1060, -1, 1062, 70, -1, 1069, 92, 1067,
3522  -1, 1069, -1, -1, 98, 99, 100, 1079, -1, -1,
3523  -1, 1079, 110, 446, 112, 113, 52, 92, 54, 55,
3524  56, 57, -1, 456, 99, 100, -1, -1, 54, 55,
3525  124, 57, 52, 127, 54, 55, 56, 57, 0, 65,
3526  66, -1, 475, -1, -1, 139, 8, 9, 10, 124,
3527  -1, 13, 14, 15, -1, 17, 92, -1, 44, -1,
3528  -1, -1, 98, -1, 26, 27, 40, 41, 42, 43,
3529  44, 2, 92, 4, -1, 37, 38, -1, 40, 41,
3530  42, 43, 44, -1, 70, 71, 72, 73, 74, 75,
3531  76, 77, 78, 79, 80, 81, 82, -1, -1, 85,
3532  86, -1, -1, -1, 204, -1, -1, 207, 208, 209,
3533  -1, 211, 52, -1, 54, 55, 56, 57, -1, -1,
3534  51, -1, -1, -1, 55, 87, 88, -1, 228, -1,
3535  230, 231, 118, -1, 120, 121, 122, 123, 124, 125,
3536  126, 127, 128, 129, -1, -1, 579, -1, 581, 111,
3537  81, 137, 92, -1, -1, -1, 589, -1, 98, -1,
3538  -1, -1, 93, 94, 95, -1, 599, -1, 601, 602,
3539  -1, -1, 134, 135, -1, -1, -1, 139, 140, -1,
3540  142, -1, 144, 145, 52, 44, 54, 55, 56, 57,
3541  59, 60, 61, 62, -1, -1, -1, -1, -1, -1,
3542  -1, -1, 635, -1, -1, -1, -1, -1, -1, 642,
3543  -1, 70, 71, 72, 73, 74, 75, 76, 77, 78,
3544  79, 80, 81, 82, 324, -1, 85, 86, -1, 329,
3545  330, 331, 332, 333, 334, 335, 336, 337, 338, 339,
3546  340, 341, 342, 343, 344, 345, 346, 347, 348, 349,
3547  350, 351, 352, 353, 354, 355, -1, -1, 358, 118,
3548  -1, 120, 121, 122, 123, 124, 125, 126, 127, 128,
3549  129, -1, -1, 706, 707, 206, -1, 710, -1, -1,
3550  713, 714, -1, -1, -1, -1, -1, 720, 721, -1,
3551  -1, 52, -1, 54, 55, 56, 57, 58, -1, -1,
3552  -1, -1, -1, -1, -1, -1, -1, 407, 408, 70,
3553  241, -1, 745, -1, 747, 748, 416, 417, 418, -1,
3554  -1, 252, 422, 254, 424, 425, 426, -1, -1, -1,
3555  -1, 92, 263, -1, -1, -1, -1, 98, 99, 100,
3556  -1, -1, -1, -1, 275, 445, -1, -1, -1, -1,
3557  450, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3558  -1, 461, -1, 124, 464, -1, 127, -1, -1, -1,
3559  -1, -1, -1, -1, -1, 475, -1, -1, 309, -1,
3560  -1, -1, -1, 314, 145, -1, 52, -1, 54, 55,
3561  56, 57, 58, -1, -1, 326, 327, -1, 329, 832,
3562  -1, 501, -1, -1, 70, -1, -1, -1, -1, -1,
3563  843, -1, -1, 846, -1, -1, 516, 850, 851, -1,
3564  -1, 854, -1, -1, 857, -1, 92, -1, -1, -1,
3565  361, 864, 98, 99, 100, 2, -1, 4, -1, -1,
3566  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3567  -1, -1, -1, -1, -1, -1, -1, -1, 124, -1,
3568  -1, 127, -1, -1, 897, -1, -1, 900, -1, -1,
3569  -1, -1, -1, -1, -1, -1, 407, 408, 911, -1,
3570  -1, -1, -1, -1, 51, 585, -1, -1, 55, 589,
3571  -1, -1, -1, -1, -1, -1, -1, -1, -1, 599,
3572  -1, -1, -1, 936, 937, -1, -1, -1, -1, -1,
3573  -1, -1, -1, -1, 81, 446, 616, -1, 618, -1,
3574  -1, -1, -1, -1, -1, 456, 93, 94, 95, 96,
3575  -1, 631, 632, -1, -1, -1, -1, -1, 971, -1,
3576  973, -1, 473, -1, -1, -1, 979, -1, -1, -1,
3577  -1, 984, -1, -1, -1, -1, -1, -1, -1, -1,
3578  -1, -1, -1, -1, -1, -1, 999, -1, -1, -1,
3579  -1, -1, -1, -1, -1, -1, 676, -1, -1, -1,
3580  -1, -1, -1, 1016, -1, -1, -1, -1, -1, -1,
3581  -1, -1, 523, -1, -1, -1, -1, -1, -1, -1,
3582  -1, -1, 702, -1, -1, -1, -1, 707, 708, -1,
3583  710, -1, -1, 713, 714, -1, -1, -1, -1, -1,
3584  720, 721, -1, -1, -1, -1, -1, 727, -1, -1,
3585  -1, -1, -1, -1, -1, -1, -1, -1, -1, 206,
3586  -1, -1, -1, -1, -1, -1, -1, -1, 579, -1,
3587  581, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3588  -1, -1, -1, -1, -1, 765, 766, -1, 768, 769,
3589  601, -1, -1, -1, 241, -1, -1, -1, -1, -1,
3590  -1, -1, -1, -1, -1, 252, 786, 254, -1, -1,
3591  -1, -1, -1, -1, -1, -1, 263, -1, -1, -1,
3592  -1, -1, -1, -1, -1, -1, -1, -1, 275, -1,
3593  -1, 642, -1, -1, 814, -1, 647, -1, -1, -1,
3594  -1, -1, -1, -1, 824, -1, -1, -1, -1, -1,
3595  -1, -1, 832, -1, -1, -1, -1, -1, -1, -1,
3596  -1, -1, 309, -1, -1, -1, -1, 314, -1, 2,
3597  -1, 4, -1, 853, -1, -1, -1, 688, -1, 326,
3598  327, -1, -1, -1, -1, -1, -1, -1, -1, 869,
3599  870, -1, -1, -1, 705, 706, 707, -1, -1, -1,
3600  -1, -1, 713, 714, -1, -1, -1, 52, 53, 720,
3601  721, 56, -1, -1, 361, -1, -1, -1, 51, -1,
3602  -1, -1, 55, 68, 69, 70, 71, 72, 73, 74,
3603  75, 76, -1, -1, 79, 80, -1, 748, 83, 84,
3604  85, 86, -1, -1, -1, -1, -1, -1, 81, -1,
3605  -1, -1, -1, 98, 99, -1, -1, -1, -1, -1,
3606  93, 94, 95, 96, -1, 2, -1, 4, -1, -1,
3607  -1, -1, -1, -1, -1, 120, 121, 122, 123, 124,
3608  125, 126, 127, 128, 129, -1, 131, 132, -1, -1,
3609  -1, -1, -1, 138, -1, -1, -1, -1, -1, 446,
3610  -1, -1, -1, -1, -1, -1, -1, -1, -1, 456,
3611  -1, -1, -1, -1, 51, -1, -1, -1, -1, -1,
3612  -1, 832, -1, 2, -1, 4, 473, -1, -1, -1,
3613  -1, -1, 843, -1, -1, -1, 1016, -1, -1, 850,
3614  851, -1, -1, 854, -1, -1, 857, -1, -1, -1,
3615  -1, -1, -1, 864, -1, -1, 93, -1, -1, 70,
3616  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
3617  81, 82, 51, 206, 85, 86, 523, -1, -1, -1,
3618  -1, -1, -1, -1, -1, -1, 897, -1, -1, 900,
3619  -1, -1, -1, -1, -1, -1, 907, -1, -1, -1,
3620  911, -1, -1, -1, -1, -1, -1, 118, 241, 120,
3621  121, 122, 123, 124, 125, 126, 127, 128, 129, 252,
3622  -1, 254, -1, -1, -1, 936, 937, -1, -1, -1,
3623  263, -1, 579, -1, 581, -1, -1, -1, -1, -1,
3624  -1, -1, 275, -1, 955, -1, -1, -1, -1, -1,
3625  -1, -1, -1, -1, 601, -1, -1, -1, -1, -1,
3626  971, -1, 973, -1, -1, -1, -1, -1, 979, 206,
3627  -1, -1, -1, 984, -1, -1, 309, -1, -1, -1,
3628  -1, 314, -1, -1, -1, -1, -1, -1, 999, -1,
3629  -1, 1002, -1, 326, 327, 642, -1, -1, -1, -1,
3630  647, -1, -1, -1, 241, -1, -1, -1, -1, -1,
3631  -1, -1, -1, -1, -1, 252, -1, 254, -1, -1,
3632  -1, -1, -1, -1, -1, -1, 263, 206, 361, -1,
3633  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3634  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3635  -1, -1, -1, -1, -1, -1, -1, -1, 705, 706,
3636  -1, -1, 241, -1, -1, -1, -1, -1, -1, -1,
3637  -1, -1, 309, 252, -1, 254, -1, 314, -1, -1,
3638  -1, -1, -1, -1, 263, -1, -1, 52, 53, 326,
3639  -1, 56, 329, -1, -1, -1, -1, -1, -1, -1,
3640  -1, 748, -1, 68, 69, 70, 71, 72, 73, 74,
3641  75, 76, -1, 446, 79, 80, -1, -1, 83, 84,
3642  85, 86, -1, 456, 361, -1, -1, -1, -1, -1,
3643  309, -1, -1, 98, 99, 314, -1, -1, -1, -1,
3644  473, -1, -1, -1, -1, -1, -1, 326, -1, -1,
3645  329, -1, -1, -1, -1, 120, 121, 122, 123, 124,
3646  125, 126, 127, 128, 129, -1, 131, 132, -1, -1,
3647  407, 408, -1, 138, -1, -1, -1, -1, -1, -1,
3648  -1, -1, 361, 70, 71, 72, 73, 74, 75, 76,
3649  523, -1, 79, 80, -1, -1, 843, -1, 85, 86,
3650  -1, -1, -1, 850, 851, -1, -1, 854, -1, 446,
3651  857, -1, -1, -1, -1, -1, -1, 864, -1, 456,
3652  -1, -1, -1, -1, -1, -1, -1, -1, 407, 408,
3653  -1, -1, -1, 120, 121, 122, 123, 124, 125, 126,
3654  127, 128, 129, -1, -1, -1, 579, -1, 581, -1,
3655  897, -1, -1, 900, -1, -1, -1, -1, -1, -1,
3656  907, -1, -1, -1, 911, -1, -1, 446, 601, -1,
3657  -1, -1, -1, -1, -1, -1, -1, 456, -1, -1,
3658  -1, -1, -1, -1, -1, -1, -1, -1, -1, 936,
3659  937, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3660  -1, -1, -1, -1, -1, -1, -1, -1, 955, 642,
3661  -1, -1, -1, -1, 647, -1, -1, -1, -1, -1,
3662  -1, -1, -1, -1, 971, -1, 973, -1, -1, -1,
3663  -1, -1, 979, -1, -1, -1, -1, 984, -1, -1,
3664  -1, -1, 579, -1, 581, -1, -1, -1, -1, -1,
3665  -1, -1, 999, -1, -1, 1002, -1, -1, -1, -1,
3666  -1, 52, 53, -1, 601, 56, -1, -1, -1, -1,
3667  -1, -1, 705, 706, -1, -1, -1, 68, 69, 70,
3668  71, 72, 73, 74, 75, 76, -1, -1, 79, 80,
3669  -1, -1, 83, 84, 85, 86, -1, -1, -1, -1,
3670  579, -1, 581, -1, -1, 642, -1, 98, 99, -1,
3671  -1, -1, -1, -1, -1, 748, -1, -1, -1, -1,
3672  -1, -1, 601, -1, -1, -1, -1, -1, -1, 120,
3673  121, 122, 123, 124, 125, 126, 127, 128, 129, -1,
3674  131, 132, -1, -1, -1, -1, -1, 138, -1, -1,
3675  70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
3676  80, 81, 82, 642, -1, 85, 86, -1, -1, 706,
3677  707, -1, -1, -1, -1, -1, 713, 714, -1, -1,
3678  -1, -1, -1, 720, 721, -1, -1, -1, -1, -1,
3679  -1, -1, -1, -1, -1, -1, -1, -1, 118, -1,
3680  120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
3681  843, 748, -1, -1, -1, -1, -1, 850, 851, -1,
3682  -1, 854, -1, -1, 857, 145, -1, 706, 707, -1,
3683  -1, 864, -1, -1, 713, 714, -1, -1, -1, -1,
3684  -1, 720, 721, -1, -1, -1, -1, -1, -1, -1,
3685  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3686  -1, -1, -1, -1, 897, -1, -1, 900, -1, 748,
3687  -1, -1, -1, -1, 907, -1, -1, -1, 911, -1,
3688  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3689  -1, -1, -1, -1, -1, 832, -1, -1, -1, -1,
3690  -1, -1, -1, 936, 937, -1, 843, -1, -1, -1,
3691  -1, -1, -1, 850, 851, -1, -1, 854, -1, -1,
3692  857, -1, 955, -1, -1, -1, -1, 864, -1, -1,
3693  -1, -1, -1, -1, -1, -1, -1, -1, 971, -1,
3694  973, -1, -1, -1, -1, -1, 979, -1, -1, -1,
3695  -1, 984, -1, 832, -1, -1, -1, -1, -1, -1,
3696  897, -1, -1, 900, 843, -1, 999, -1, -1, 1002,
3697  907, 850, 851, -1, 911, 854, -1, -1, 857, -1,
3698  -1, -1, -1, -1, -1, 864, -1, -1, -1, -1,
3699  -1, -1, -1, -1, -1, -1, -1, -1, -1, 936,
3700  937, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3701  -1, -1, -1, -1, -1, -1, -1, -1, 897, -1,
3702  -1, 900, -1, -1, -1, -1, -1, -1, -1, -1,
3703  -1, -1, 911, -1, 971, -1, 973, -1, -1, -1,
3704  -1, -1, 979, -1, -1, -1, -1, 984, -1, -1,
3705  -1, -1, -1, -1, -1, -1, -1, 936, 937, -1,
3706  -1, -1, 999, -1, -1, -1, -1, -1, -1, -1,
3707  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3708  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3709  -1, -1, 971, -1, 973, -1, -1, -1, -1, -1,
3710  979, -1, -1, 0, 1, 984, 3, 4, 5, 6,
3711  7, -1, -1, -1, 11, 12, -1, -1, -1, 16,
3712  999, 18, 19, 20, 21, 22, 23, 24, -1, -1,
3713  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
3714  -1, -1, 39, -1, -1, -1, -1, -1, 45, 46,
3715  47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
3716  57, -1, 59, 60, 61, 62, -1, 64, 65, 66,
3717  -1, 68, 69, -1, -1, -1, -1, -1, -1, -1,
3718  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3719  -1, -1, 89, -1, -1, 92, 93, -1, 95, 96,
3720  -1, 98, -1, -1, 101, 102, 103, 104, 105, 106,
3721  107, 108, 109, 0, -1, -1, -1, -1, -1, -1,
3722  -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
3723  17, -1, -1, 130, 131, 132, -1, -1, -1, 26,
3724  27, 28, 29, -1, -1, 142, -1, -1, 145, -1,
3725  37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
3726  -1, 70, 71, 72, 73, 74, 75, 76, 77, 78,
3727  79, 80, 81, 82, -1, -1, 85, 86, -1, -1,
3728  -1, -1, -1, 70, 71, 72, 73, 74, 75, 76,
3729  77, 78, 79, 80, 81, 82, -1, -1, 85, 86,
3730  87, 88, -1, 90, 91, -1, -1, -1, -1, -1,
3731  97, 120, 121, 122, 123, 124, 125, 126, 127, 128,
3732  129, -1, -1, -1, 111, -1, -1, 114, -1, -1,
3733  117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
3734  127, 128, 129, -1, -1, -1, -1, 134, 135, 136,
3735  137, 0, -1, 140, 141, 142, -1, 144, 145, 8,
3736  9, 10, -1, -1, 13, 14, 15, -1, 17, -1,
3737  -1, -1, -1, -1, -1, -1, 25, -1, 27, 28,
3738  29, -1, -1, -1, -1, -1, -1, -1, 37, 38,
3739  -1, 40, 41, 42, 43, 44, -1, -1, -1, 70,
3740  71, 72, 73, 74, 75, 76, 77, -1, 79, 80,
3741  -1, -1, -1, -1, 85, 86, -1, -1, -1, -1,
3742  -1, 70, 71, 72, 73, 74, 75, 76, 77, 78,
3743  79, 80, 81, 82, -1, -1, 85, 86, 87, 88,
3744  -1, 90, 91, -1, -1, -1, -1, -1, 97, 120,
3745  121, 122, 123, 124, 125, 126, 127, 128, 129, -1,
3746  -1, -1, 111, -1, -1, 114, -1, -1, 117, 118,
3747  119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
3748  129, -1, -1, -1, -1, -1, 135, 136, 137, 0,
3749  -1, 140, 141, 142, -1, 144, 145, 8, 9, 10,
3750  -1, -1, 13, 14, 15, -1, 17, -1, -1, -1,
3751  -1, -1, -1, -1, 25, -1, 27, 28, 29, -1,
3752  -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
3753  41, 42, 43, 44, -1, -1, -1, 70, 71, 72,
3754  73, 74, 75, 76, -1, -1, 79, 80, -1, -1,
3755  -1, -1, 85, 86, -1, -1, -1, -1, -1, 70,
3756  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
3757  81, 82, -1, -1, 85, 86, 87, 88, -1, 90,
3758  91, -1, -1, -1, -1, -1, 97, 120, 121, 122,
3759  123, 124, 125, 126, 127, 128, 129, -1, -1, -1,
3760  111, -1, -1, 114, -1, -1, 117, 118, 119, 120,
3761  121, 122, 123, 124, 125, 126, 127, 128, 129, -1,
3762  -1, -1, -1, -1, 135, 136, 137, 0, -1, 140,
3763  141, 142, -1, 144, 145, 8, 9, 10, -1, -1,
3764  13, 14, 15, -1, 17, -1, -1, -1, -1, -1,
3765  -1, -1, -1, 26, 27, 28, 29, -1, -1, -1,
3766  -1, -1, -1, -1, 37, 38, -1, 40, 41, 42,
3767  43, 44, -1, -1, -1, -1, -1, -1, -1, -1,
3768  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3769  -1, -1, -1, -1, -1, -1, -1, 70, 71, 72,
3770  73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
3771  -1, -1, 85, 86, 87, 88, -1, -1, 91, -1,
3772  -1, -1, -1, -1, 97, -1, -1, -1, -1, -1,
3773  -1, -1, -1, -1, -1, -1, -1, -1, 111, -1,
3774  -1, 114, -1, -1, -1, 118, 119, 120, 121, 122,
3775  123, 124, 125, 126, 127, 128, 129, -1, -1, -1,
3776  -1, 134, 135, 136, 137, 0, -1, 140, 141, 142,
3777  -1, 144, 145, 8, 9, 10, -1, -1, 13, 14,
3778  15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
3779  -1, 26, 27, 28, 29, -1, -1, -1, -1, -1,
3780  -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
3781  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3782  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3783  -1, -1, -1, -1, -1, 70, 71, 72, 73, 74,
3784  75, 76, 77, 78, 79, 80, 81, 82, -1, -1,
3785  85, 86, 87, 88, -1, -1, 91, -1, -1, -1,
3786  -1, -1, 97, -1, -1, -1, -1, -1, -1, -1,
3787  -1, -1, -1, -1, -1, -1, 111, -1, -1, 114,
3788  -1, -1, -1, 118, 119, 120, 121, 122, 123, 124,
3789  125, 126, 127, 128, 129, -1, -1, -1, -1, 134,
3790  135, 136, 137, 0, -1, 140, 141, 142, -1, 144,
3791  145, 8, 9, 10, -1, -1, 13, 14, 15, -1,
3792  17, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3793  27, 28, 29, -1, -1, -1, -1, -1, -1, -1,
3794  37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
3795  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3796  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3797  -1, -1, -1, 70, 71, 72, 73, 74, 75, 76,
3798  77, 78, 79, 80, 81, 82, -1, -1, 85, 86,
3799  87, 88, -1, 90, 91, -1, -1, -1, -1, -1,
3800  97, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3801  -1, -1, -1, -1, 111, -1, -1, 114, -1, -1,
3802  117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
3803  127, 128, 129, -1, -1, -1, -1, -1, 135, 136,
3804  137, 0, -1, 140, 141, 142, -1, 144, 145, 8,
3805  9, 10, -1, -1, 13, 14, 15, -1, 17, -1,
3806  -1, -1, -1, -1, -1, -1, -1, 26, 27, 28,
3807  -1, -1, -1, -1, -1, -1, -1, -1, 37, 38,
3808  -1, 40, 41, 42, 43, 44, -1, -1, -1, -1,
3809  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3810  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3811  -1, 70, 71, 72, 73, 74, 75, 76, 77, 78,
3812  79, 80, 81, 82, -1, -1, 85, 86, 87, 88,
3813  -1, -1, 91, -1, -1, -1, -1, -1, 97, -1,
3814  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3815  -1, -1, 111, -1, -1, -1, -1, -1, -1, 118,
3816  -1, 120, 121, 122, 123, 124, 125, 126, 127, 128,
3817  129, -1, -1, -1, -1, 134, 135, 136, 137, 0,
3818  139, 140, 141, 142, -1, 144, 145, 8, 9, 10,
3819  -1, -1, 13, 14, 15, -1, 17, -1, -1, -1,
3820  -1, -1, -1, -1, -1, -1, 27, 28, 29, -1,
3821  -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
3822  41, 42, 43, 44, -1, -1, -1, -1, -1, -1,
3823  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3824  -1, -1, -1, -1, -1, -1, -1, -1, -1, 70,
3825  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
3826  81, 82, -1, -1, 85, 86, 87, 88, -1, -1,
3827  91, -1, -1, -1, -1, -1, 97, -1, -1, -1,
3828  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3829  111, -1, -1, 114, -1, -1, -1, 118, 119, 120,
3830  121, 122, 123, 124, 125, 126, 127, 128, 129, -1,
3831  -1, -1, -1, -1, 135, 136, 137, 0, -1, 140,
3832  141, 142, -1, 144, 145, 8, 9, 10, -1, -1,
3833  13, 14, 15, -1, 17, -1, -1, -1, -1, -1,
3834  -1, -1, -1, 26, 27, 28, -1, -1, -1, -1,
3835  -1, -1, -1, -1, 37, 38, -1, 40, 41, 42,
3836  43, 44, -1, -1, -1, -1, -1, -1, -1, -1,
3837  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3838  -1, -1, -1, -1, -1, -1, -1, 70, 71, 72,
3839  73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
3840  -1, -1, 85, 86, 87, 88, -1, -1, 91, -1,
3841  -1, -1, -1, -1, 97, -1, -1, -1, -1, -1,
3842  -1, -1, -1, -1, -1, -1, -1, -1, 111, -1,
3843  -1, -1, -1, -1, -1, 118, -1, 120, 121, 122,
3844  123, 124, 125, 126, 127, 128, 129, -1, -1, -1,
3845  -1, 134, 135, 136, 137, 0, 139, 140, 141, 142,
3846  -1, 144, 145, 8, 9, 10, -1, -1, 13, 14,
3847  15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
3848  -1, -1, 27, 28, -1, -1, -1, -1, -1, -1,
3849  -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
3850  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3851  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3852  -1, -1, -1, -1, -1, 70, 71, 72, 73, 74,
3853  75, 76, 77, 78, 79, 80, 81, 82, -1, -1,
3854  85, 86, 87, 88, -1, -1, 91, -1, -1, -1,
3855  -1, -1, 97, -1, -1, -1, -1, -1, -1, -1,
3856  -1, -1, -1, -1, -1, -1, 111, -1, -1, -1,
3857  -1, -1, -1, 118, -1, 120, 121, 122, 123, 124,
3858  125, 126, 127, 128, 129, -1, -1, -1, -1, -1,
3859  135, 136, 137, 0, 139, 140, 141, 142, -1, 144,
3860  145, 8, 9, 10, -1, -1, -1, 14, 15, -1,
3861  17, -1, -1, -1, -1, -1, -1, -1, -1, 26,
3862  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3863  37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
3864  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3865  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3866  -1, -1, -1, 70, 71, 72, 73, 74, 75, 76,
3867  77, 78, 79, 80, 81, 82, -1, -1, 85, 86,
3868  87, 88, -1, 90, -1, -1, -1, -1, -1, -1,
3869  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3870  -1, -1, -1, -1, 111, -1, -1, -1, -1, -1,
3871  117, 118, -1, 120, 121, 122, 123, 124, 125, 126,
3872  127, 128, 129, -1, -1, -1, -1, 134, 135, 136,
3873  137, 0, -1, 140, -1, 142, -1, 144, 145, 8,
3874  9, 10, -1, -1, -1, 14, 15, -1, 17, -1,
3875  -1, -1, -1, -1, -1, -1, -1, 26, -1, -1,
3876  -1, -1, -1, -1, -1, -1, -1, -1, 37, 38,
3877  -1, 40, 41, 42, 43, 44, -1, -1, -1, -1,
3878  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3879  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3880  -1, 70, 71, 72, 73, 74, 75, 76, 77, 78,
3881  79, 80, 81, 82, -1, -1, 85, 86, 87, 88,
3882  -1, 90, -1, -1, -1, -1, -1, -1, -1, -1,
3883  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3884  -1, -1, 111, -1, -1, -1, -1, -1, 117, 118,
3885  -1, 120, 121, 122, 123, 124, 125, 126, 127, 128,
3886  129, -1, -1, -1, -1, 134, 135, 136, 137, 0,
3887  -1, 140, -1, 142, -1, 144, 145, 8, 9, 10,
3888  -1, -1, -1, 14, 15, -1, 17, -1, -1, -1,
3889  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3890  -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
3891  41, 42, 43, 44, -1, -1, -1, -1, -1, -1,
3892  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3893  -1, -1, -1, -1, -1, -1, -1, -1, -1, 70,
3894  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
3895  81, 82, -1, -1, 85, 86, 87, 88, -1, 90,
3896  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3897  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3898  111, -1, -1, -1, -1, -1, 117, 118, -1, 120,
3899  121, 122, 123, 124, 125, 126, 127, 128, 129, -1,
3900  -1, -1, -1, -1, 135, 136, 137, 0, -1, 140,
3901  -1, 142, -1, 144, 145, 8, 9, 10, -1, -1,
3902  -1, 14, 15, -1, 17, -1, -1, -1, -1, -1,
3903  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3904  -1, -1, -1, -1, 37, 38, -1, 40, 41, 42,
3905  43, 44, -1, -1, -1, -1, -1, -1, -1, -1,
3906  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3907  -1, -1, -1, -1, -1, -1, -1, 70, 71, 72,
3908  73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
3909  -1, -1, 85, 86, 87, 88, -1, 90, -1, -1,
3910  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3911  -1, -1, -1, -1, -1, -1, -1, -1, 111, -1,
3912  -1, -1, -1, -1, 117, 118, -1, 120, 121, 122,
3913  123, 124, 125, 126, 127, 128, 129, -1, -1, -1,
3914  -1, -1, 135, 136, 137, -1, -1, 140, -1, 142,
3915  -1, 144, 145, 1, -1, 3, 4, 5, 6, 7,
3916  8, 9, 10, 11, 12, -1, -1, 15, 16, -1,
3917  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
3918  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
3919  -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
3920  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
3921  -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
3922  68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
3923  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3924  -1, 89, -1, -1, 92, 93, -1, 95, 96, -1,
3925  98, -1, -1, 101, 102, 103, 104, 105, 106, 107,
3926  108, 109, -1, -1, -1, -1, -1, -1, -1, -1,
3927  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3928  -1, -1, 130, 131, 132, -1, -1, -1, -1, -1,
3929  -1, -1, -1, -1, 142, -1, 1, 145, 3, 4,
3930  5, 6, 7, -1, -1, 10, 11, 12, -1, 14,
3931  15, 16, -1, 18, 19, 20, 21, 22, 23, 24,
3932  -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
3933  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
3934  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
3935  55, 56, 57, -1, 59, 60, 61, 62, -1, 64,
3936  65, 66, -1, 68, 69, -1, -1, -1, -1, -1,
3937  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3938  -1, -1, -1, -1, 89, -1, -1, 92, 93, -1,
3939  95, 96, -1, 98, -1, -1, 101, 102, 103, 104,
3940  105, 106, 107, 108, 109, -1, -1, -1, -1, -1,
3941  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3942  -1, -1, -1, -1, -1, 130, 131, 132, -1, -1,
3943  -1, -1, -1, -1, -1, -1, -1, 142, -1, 1,
3944  145, 3, 4, 5, 6, 7, -1, -1, 10, 11,
3945  12, -1, -1, 15, 16, 17, 18, 19, 20, 21,
3946  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
3947  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
3948  -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
3949  52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
3950  62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
3951  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3952  -1, -1, -1, -1, -1, -1, -1, 89, -1, -1,
3953  92, 93, -1, 95, 96, -1, 98, -1, -1, 101,
3954  102, 103, 104, 105, 106, 107, 108, 109, -1, -1,
3955  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3956  -1, -1, -1, -1, -1, -1, -1, -1, 130, 131,
3957  132, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3958  142, -1, 1, 145, 3, 4, 5, 6, 7, -1,
3959  -1, 10, 11, 12, -1, -1, 15, 16, -1, 18,
3960  19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
3961  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
3962  39, -1, -1, -1, -1, -1, 45, 46, 47, 48,
3963  49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
3964  59, 60, 61, 62, -1, 64, 65, 66, -1, 68,
3965  69, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3966  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3967  89, -1, -1, 92, 93, -1, 95, 96, -1, 98,
3968  -1, -1, 101, 102, 103, 104, 105, 106, 107, 108,
3969  109, -1, -1, -1, -1, -1, -1, -1, -1, 1,
3970  -1, 3, 4, 5, 6, 7, -1, 9, 10, 11,
3971  12, 130, 131, 132, 16, -1, 18, 19, 20, 21,
3972  22, 23, 24, 142, -1, -1, 145, -1, 30, 31,
3973  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
3974  -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
3975  52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
3976  62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
3977  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3978  -1, -1, -1, -1, -1, -1, -1, 89, -1, -1,
3979  92, 93, -1, 95, 96, -1, 98, -1, -1, 101,
3980  102, 103, 104, 105, 106, 107, 108, 109, -1, -1,
3981  -1, -1, -1, -1, -1, -1, 1, -1, 3, 4,
3982  5, 6, 7, -1, -1, -1, 11, 12, 130, 131,
3983  132, 16, -1, 18, 19, 20, 21, 22, 23, 24,
3984  142, -1, -1, 145, -1, 30, 31, 32, 33, 34,
3985  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
3986  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
3987  55, 56, 57, -1, 59, 60, 61, 62, -1, 64,
3988  65, 66, -1, 68, 69, -1, -1, -1, -1, -1,
3989  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3990  -1, -1, -1, -1, 89, -1, -1, 92, 93, -1,
3991  95, 96, -1, 98, -1, -1, 101, 102, 103, 104,
3992  105, 106, 107, 108, 109, -1, -1, -1, -1, -1,
3993  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
3994  -1, -1, -1, -1, -1, 130, 131, 132, 1, -1,
3995  3, 4, 5, 6, 7, 140, -1, 142, 11, 12,
3996  145, -1, -1, 16, -1, 18, 19, 20, 21, 22,
3997  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
3998  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
3999  -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
4000  53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
4001  -1, 64, 65, 66, -1, 68, 69, -1, -1, -1,
4002  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4003  -1, -1, -1, -1, -1, -1, 89, -1, -1, 92,
4004  93, -1, 95, 96, -1, 98, -1, -1, 101, 102,
4005  103, 104, 105, 106, 107, 108, 109, -1, -1, -1,
4006  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4007  -1, -1, -1, -1, -1, -1, -1, 130, 131, 132,
4008  1, -1, 3, 4, 5, 6, 7, 140, -1, 142,
4009  11, 12, 145, -1, -1, 16, -1, 18, 19, 20,
4010  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4011  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4012  -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
4013  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4014  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
4015  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4016  -1, -1, -1, -1, -1, -1, -1, -1, 89, -1,
4017  -1, 92, 93, -1, 95, 96, -1, 98, -1, -1,
4018  101, 102, 103, 104, 105, 106, 107, 108, 109, -1,
4019  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4020  -1, -1, -1, -1, -1, -1, -1, -1, -1, 130,
4021  131, 132, -1, -1, 135, -1, -1, -1, -1, -1,
4022  -1, 142, -1, 1, 145, 3, 4, 5, 6, 7,
4023  -1, -1, -1, 11, 12, -1, -1, -1, 16, -1,
4024  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
4025  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4026  -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
4027  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4028  -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
4029  68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
4030  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4031  -1, 89, -1, -1, 92, 93, -1, 95, 96, -1,
4032  98, -1, -1, 101, 102, 103, 104, 105, 106, 107,
4033  108, 109, -1, -1, -1, -1, -1, -1, -1, -1,
4034  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4035  -1, -1, 130, 131, 132, -1, -1, 135, -1, -1,
4036  -1, -1, -1, -1, 142, -1, 1, 145, 3, 4,
4037  5, 6, 7, -1, -1, 10, 11, 12, -1, -1,
4038  -1, 16, -1, 18, 19, 20, 21, 22, 23, 24,
4039  -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
4040  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
4041  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
4042  55, 56, 57, -1, 59, 60, 61, 62, -1, 64,
4043  65, 66, -1, 68, 69, -1, -1, -1, -1, -1,
4044  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4045  -1, -1, -1, -1, 89, -1, -1, 92, 93, -1,
4046  95, 96, -1, 98, -1, -1, 101, 102, 103, 104,
4047  105, 106, 107, 108, 109, -1, -1, -1, -1, -1,
4048  -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
4049  -1, -1, -1, 11, 12, 130, 131, 132, 16, -1,
4050  18, 19, 20, 21, 22, 23, 24, 142, -1, -1,
4051  145, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4052  -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
4053  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4054  -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
4055  68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
4056  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4057  -1, 89, -1, -1, 92, 93, -1, 95, 96, -1,
4058  98, -1, -1, 101, 102, 103, 104, 105, 106, 107,
4059  108, 109, -1, 111, -1, -1, -1, -1, -1, -1,
4060  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4061  11, 12, 130, 131, 132, 16, -1, 18, 19, 20,
4062  21, 22, 23, 24, 142, -1, -1, 145, -1, 30,
4063  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4064  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4065  51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
4066  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
4067  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4068  -1, -1, -1, -1, -1, -1, -1, -1, 89, -1,
4069  -1, 92, 93, -1, 95, 96, -1, 98, 99, 100,
4070  101, 102, 103, 104, 105, 106, 107, 108, 109, -1,
4071  -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
4072  4, 5, -1, 7, -1, -1, -1, 11, 12, 130,
4073  131, 132, 16, -1, 18, 19, 20, 21, 22, 23,
4074  24, -1, -1, -1, 145, -1, 30, 31, 32, 33,
4075  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
4076  -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
4077  54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
4078  64, 65, 66, -1, 68, 69, -1, -1, -1, -1,
4079  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4080  -1, -1, -1, -1, -1, 89, -1, -1, 92, 93,
4081  -1, 95, 96, -1, -1, -1, -1, 101, 102, 103,
4082  104, 105, 106, 107, 108, 109, -1, -1, -1, -1,
4083  -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
4084  7, -1, -1, -1, 11, 12, 130, 131, 132, 16,
4085  -1, 18, 19, 20, 21, 22, 23, 24, 142, -1,
4086  -1, 145, -1, 30, 31, 32, 33, 34, 35, 36,
4087  -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
4088  -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
4089  57, -1, 59, 60, 61, 62, -1, 64, 65, 66,
4090  -1, 68, 69, -1, -1, -1, -1, -1, -1, -1,
4091  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4092  -1, -1, 89, -1, -1, 92, 93, -1, 95, 96,
4093  -1, -1, -1, -1, 101, 102, 103, 104, 105, 106,
4094  107, 108, 109, -1, -1, -1, -1, -1, -1, -1,
4095  -1, -1, -1, 3, 4, 5, 6, 7, -1, -1,
4096  -1, 11, 12, 130, 131, 132, 16, -1, 18, 19,
4097  20, 21, 22, 23, 24, -1, -1, -1, 145, -1,
4098  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4099  -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
4100  50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
4101  60, 61, 62, -1, 64, 65, 66, -1, 68, 69,
4102  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4103  -1, -1, -1, -1, -1, -1, -1, -1, -1, 89,
4104  -1, -1, 92, 93, -1, 95, 96, -1, 98, -1,
4105  -1, 101, 102, 103, 104, 105, 106, 107, 108, 109,
4106  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4107  3, 4, 5, 6, 7, -1, -1, -1, 11, 12,
4108  130, 131, 132, 16, -1, 18, 19, 20, 21, 22,
4109  23, 24, 142, -1, -1, -1, -1, 30, 31, 32,
4110  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4111  -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
4112  53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
4113  -1, 64, 65, 66, -1, 68, 69, -1, -1, -1,
4114  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4115  -1, -1, -1, -1, -1, -1, 89, -1, -1, 92,
4116  93, -1, 95, 96, -1, 98, -1, -1, 101, 102,
4117  103, 104, 105, 106, 107, 108, 109, -1, -1, -1,
4118  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4119  -1, -1, -1, -1, -1, -1, -1, 130, 131, 132,
4120  -1, -1, -1, -1, -1, -1, -1, -1, -1, 142,
4121  3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
4122  13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
4123  23, 24, 25, 26, -1, -1, -1, 30, 31, 32,
4124  33, 34, 35, 36, 37, 38, 39, -1, -1, -1,
4125  -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
4126  53, 54, 55, 56, 57, -1, -1, -1, -1, -1,
4127  -1, -1, -1, -1, -1, 68, 69, 70, 71, 72,
4128  73, 74, 75, 76, -1, -1, 79, 80, -1, -1,
4129  83, 84, 85, 86, -1, -1, -1, -1, -1, -1,
4130  -1, -1, -1, -1, -1, 98, 99, -1, -1, -1,
4131  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4132  -1, -1, -1, -1, -1, -1, -1, 120, 121, 122,
4133  123, 124, 125, 126, 127, 128, 129, -1, 131, 132,
4134  -1, -1, -1, -1, -1, 138, 139, 3, 4, 5,
4135  6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
4136  16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
4137  26, -1, -1, -1, 30, 31, 32, 33, 34, 35,
4138  36, 37, 38, 39, -1, -1, -1, -1, -1, 45,
4139  46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
4140  56, 57, -1, -1, -1, -1, -1, -1, -1, -1,
4141  -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
4142  76, -1, -1, 79, 80, -1, -1, 83, 84, 85,
4143  86, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4144  -1, -1, 98, 99, -1, -1, -1, -1, -1, -1,
4145  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4146  -1, -1, -1, -1, 120, 121, 122, 123, 124, 125,
4147  126, 127, 128, 129, -1, 131, 132, -1, -1, -1,
4148  -1, -1, 138, 3, 4, 5, 6, 7, 8, 9,
4149  10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
4150  20, 21, 22, 23, 24, 25, 26, -1, -1, -1,
4151  30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
4152  -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
4153  50, 51, 52, 53, 54, -1, 56, -1, -1, -1,
4154  -1, -1, -1, -1, -1, -1, -1, -1, 68, 69,
4155  70, 71, 72, 73, 74, 75, 76, -1, -1, 79,
4156  80, -1, -1, 83, 84, 85, 86, -1, -1, -1,
4157  -1, -1, -1, -1, -1, -1, -1, -1, 98, 99,
4158  -1, -1, 102, -1, -1, -1, -1, -1, -1, -1,
4159  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4160  120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
4161  -1, 131, 132, -1, -1, -1, -1, -1, 138, 3,
4162  4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
4163  14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
4164  24, 25, 26, -1, -1, -1, 30, 31, 32, 33,
4165  34, 35, 36, 37, 38, 39, -1, -1, -1, -1,
4166  -1, 45, 46, 47, 48, 49, 50, 51, 52, 53,
4167  -1, -1, 56, -1, -1, -1, -1, -1, -1, -1,
4168  -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
4169  74, 75, 76, -1, -1, 79, 80, -1, -1, 83,
4170  84, 85, 86, -1, -1, -1, -1, -1, -1, -1,
4171  -1, -1, -1, -1, 98, 99, -1, -1, 102, -1,
4172  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4173  -1, -1, -1, -1, -1, -1, 120, 121, 122, 123,
4174  124, 125, 126, 127, 128, 129, -1, 131, 132, -1,
4175  -1, -1, -1, -1, 138, 3, 4, 5, 6, 7,
4176  8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
4177  18, 19, 20, 21, 22, 23, 24, 25, 26, -1,
4178  -1, -1, 30, 31, 32, 33, 34, 35, 36, 37,
4179  38, 39, -1, -1, -1, -1, -1, 45, 46, 47,
4180  48, 49, 50, 51, 52, 53, -1, -1, 56, -1,
4181  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4182  68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
4183  -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
4184  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4185  98, 99, -1, -1, -1, -1, -1, -1, -1, -1,
4186  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4187  -1, -1, 120, 121, 122, 123, 124, 125, 126, 127,
4188  128, 129, -1, 131, 132, 3, 4, 5, -1, 7,
4189  138, -1, -1, 11, 12, -1, -1, -1, 16, -1,
4190  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
4191  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4192  -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
4193  -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4194  -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
4195  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4196  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4197  -1, 89, -1, -1, 92, 93, -1, 95, 96, -1,
4198  -1, -1, -1, 101, 102, 103, 104, 105, 106, 107,
4199  108, 109, -1, -1, -1, -1, -1, -1, -1, -1,
4200  -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
4201  -1, -1, 130, 11, 12, -1, -1, -1, 16, 137,
4202  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
4203  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4204  -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
4205  -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4206  -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
4207  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4208  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4209  -1, 89, -1, -1, 92, 93, -1, 95, 96, -1,
4210  -1, -1, -1, 101, 102, 103, 104, 105, 106, 107,
4211  108, 109, -1, -1, -1, -1, -1, -1, -1, -1,
4212  -1, -1, -1, -1, -1, 3, 4, 5, 6, 7,
4213  -1, -1, 130, 11, 12, -1, -1, -1, 16, 137,
4214  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
4215  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4216  -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
4217  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4218  -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
4219  68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
4220  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4221  -1, 89, -1, -1, 92, 93, -1, 95, 96, -1,
4222  98, -1, -1, 101, 102, 103, 104, 105, 106, 107,
4223  108, 109, -1, -1, -1, -1, -1, -1, -1, -1,
4224  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4225  11, 12, 130, 131, 132, 16, -1, 18, 19, 20,
4226  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4227  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4228  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4229  51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
4230  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
4231  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4232  -1, -1, -1, -1, -1, -1, -1, -1, 89, -1,
4233  -1, 92, 93, -1, 95, 96, -1, 98, 99, 100,
4234  101, 102, 103, 104, 105, 106, 107, 108, 109, -1,
4235  -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
4236  4, 5, 6, 7, -1, -1, -1, 11, 12, 130,
4237  131, 132, 16, -1, 18, 19, 20, 21, 22, 23,
4238  24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
4239  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
4240  -1, 45, 46, -1, 48, 49, 50, 51, 52, 53,
4241  54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
4242  64, 65, 66, -1, 68, 69, -1, -1, -1, -1,
4243  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4244  -1, -1, -1, -1, -1, 89, -1, -1, 92, 93,
4245  -1, 95, 96, -1, 98, -1, -1, 101, 102, 103,
4246  104, 105, 106, 107, 108, 109, -1, -1, -1, -1,
4247  -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
4248  7, -1, -1, -1, 11, 12, 130, 131, 132, 16,
4249  -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
4250  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
4251  -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
4252  -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
4253  57, 58, 59, 60, 61, 62, -1, 64, 65, 66,
4254  -1, 68, 69, -1, -1, -1, -1, -1, -1, -1,
4255  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4256  -1, -1, 89, -1, -1, 92, 93, -1, 95, 96,
4257  -1, 98, 99, 100, 101, 102, 103, 104, 105, 106,
4258  107, 108, 109, -1, -1, -1, -1, -1, -1, -1,
4259  -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
4260  -1, 11, 12, 130, 131, 132, 16, -1, 18, 19,
4261  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
4262  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4263  -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
4264  50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
4265  60, 61, 62, -1, 64, 65, 66, -1, 68, 69,
4266  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4267  -1, -1, -1, -1, -1, -1, -1, -1, -1, 89,
4268  -1, -1, 92, 93, -1, 95, 96, -1, 98, 99,
4269  -1, 101, 102, 103, 104, 105, 106, 107, 108, 109,
4270  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4271  3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
4272  130, 131, 132, 16, -1, 18, 19, 20, 21, 22,
4273  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
4274  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4275  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
4276  53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
4277  -1, 64, 65, 66, -1, 68, 69, -1, -1, -1,
4278  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4279  -1, -1, -1, -1, -1, -1, 89, -1, -1, 92,
4280  93, -1, 95, 96, -1, -1, 99, 100, 101, 102,
4281  103, 104, 105, 106, 107, 108, 109, -1, -1, -1,
4282  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
4283  -1, 7, -1, -1, -1, 11, 12, 130, 131, 132,
4284  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
4285  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
4286  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
4287  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
4288  56, 57, 58, 59, 60, 61, 62, -1, 64, 65,
4289  66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
4290  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4291  -1, -1, -1, 89, -1, -1, 92, 93, -1, 95,
4292  96, -1, 98, 99, -1, 101, 102, 103, 104, 105,
4293  106, 107, 108, 109, -1, -1, -1, -1, -1, -1,
4294  -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
4295  -1, -1, 11, 12, 130, 131, 132, 16, -1, 18,
4296  19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
4297  -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
4298  39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
4299  49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
4300  59, 60, 61, 62, -1, 64, 65, 66, -1, 68,
4301  69, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4302  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4303  89, -1, -1, 92, 93, -1, 95, 96, -1, -1,
4304  99, -1, 101, 102, 103, 104, 105, 106, 107, 108,
4305  109, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4306  -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
4307  12, 130, 131, 132, 16, -1, 18, 19, 20, 21,
4308  22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
4309  32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
4310  -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
4311  52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
4312  62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
4313  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4314  -1, -1, -1, -1, -1, -1, -1, 89, -1, -1,
4315  92, 93, -1, 95, 96, -1, 98, -1, -1, 101,
4316  102, 103, 104, 105, 106, 107, 108, 109, -1, -1,
4317  -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
4318  5, -1, 7, -1, -1, -1, 11, 12, 130, 131,
4319  132, 16, -1, 18, 19, 20, 21, 22, 23, 24,
4320  -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
4321  35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
4322  -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
4323  55, 56, 57, -1, 59, 60, 61, 62, -1, 64,
4324  65, 66, -1, 68, 69, -1, -1, -1, -1, -1,
4325  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4326  -1, -1, -1, -1, 89, -1, -1, 92, 93, -1,
4327  95, 96, -1, 98, -1, -1, 101, 102, 103, 104,
4328  105, 106, 107, 108, 109, -1, -1, -1, -1, -1,
4329  -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
4330  -1, -1, -1, 11, 12, 130, 131, 132, 16, -1,
4331  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
4332  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4333  -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
4334  -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4335  -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
4336  68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
4337  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4338  -1, 89, -1, -1, 92, 93, -1, 95, 96, -1,
4339  98, -1, -1, 101, 102, 103, 104, 105, 106, 107,
4340  108, 109, -1, -1, -1, -1, -1, -1, -1, -1,
4341  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4342  11, 12, 130, 131, 132, 16, -1, 18, 19, 20,
4343  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4344  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4345  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4346  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4347  61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
4348  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4349  -1, -1, -1, -1, -1, -1, -1, -1, 89, -1,
4350  -1, 92, 93, -1, 95, 96, -1, 98, -1, -1,
4351  101, 102, 103, 104, 105, 106, 107, 108, 109, -1,
4352  -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
4353  4, 5, -1, 7, -1, -1, -1, 11, 12, 130,
4354  131, 132, 16, -1, 18, 19, 20, 21, 22, 23,
4355  24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
4356  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
4357  -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
4358  54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
4359  64, 65, 66, -1, 68, 69, -1, -1, -1, -1,
4360  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4361  -1, -1, -1, -1, -1, 89, -1, -1, 92, 93,
4362  -1, 95, 96, -1, 98, -1, -1, 101, 102, 103,
4363  104, 105, 106, 107, 108, 109, -1, -1, -1, -1,
4364  -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
4365  7, -1, -1, -1, 11, 12, 130, 131, 132, 16,
4366  -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
4367  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
4368  -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
4369  -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
4370  57, -1, 59, 60, 61, 62, -1, 64, 65, 66,
4371  -1, 68, 69, -1, -1, -1, -1, -1, -1, -1,
4372  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4373  -1, -1, 89, -1, -1, 92, 93, -1, 95, 96,
4374  -1, -1, -1, -1, 101, 102, 103, 104, 105, 106,
4375  107, 108, 109, -1, -1, -1, -1, -1, -1, -1,
4376  -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
4377  -1, 11, 12, 130, 131, 132, 16, -1, 18, 19,
4378  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
4379  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4380  -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
4381  50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
4382  60, 61, 62, -1, 64, 65, 66, -1, 68, 69,
4383  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4384  -1, -1, -1, -1, -1, -1, -1, -1, -1, 89,
4385  -1, -1, 92, 93, -1, 95, 96, -1, -1, -1,
4386  -1, 101, 102, 103, 104, 105, 106, 107, 108, 109,
4387  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4388  3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
4389  130, 131, 132, 16, -1, 18, 19, 20, 21, 22,
4390  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
4391  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4392  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
4393  53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
4394  -1, 64, 65, 66, -1, 68, 69, -1, -1, -1,
4395  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4396  -1, -1, -1, -1, -1, -1, 89, -1, -1, 92,
4397  93, -1, 95, 96, -1, -1, -1, -1, 101, 102,
4398  103, 104, 105, 106, 107, 108, 109, -1, -1, -1,
4399  -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
4400  -1, 7, -1, -1, -1, 11, 12, 130, 131, 132,
4401  16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
4402  -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
4403  36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
4404  46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
4405  56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
4406  66, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4407  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4408  -1, -1, -1, 89, -1, -1, 92, 93, -1, 95,
4409  96, -1, 98, -1, -1, 101, 102, 103, 104, 105,
4410  106, 107, 108, 109, -1, -1, -1, -1, -1, -1,
4411  3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
4412  -1, -1, -1, 16, 130, 18, 19, 20, 21, 22,
4413  23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
4414  33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4415  -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
4416  53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
4417  -1, 64, 65, 66, -1, -1, -1, -1, -1, -1,
4418  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4419  -1, -1, -1, -1, -1, -1, 89, -1, -1, 92,
4420  93, -1, 95, 96, -1, 98, -1, -1, 101, 102,
4421  103, 104, 105, 106, 107, 108, 109, -1, -1, -1,
4422  -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
4423  -1, 11, 12, -1, -1, -1, 16, 130, 18, 19,
4424  20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
4425  30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4426  -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
4427  50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
4428  60, 61, 62, -1, 64, 65, 66, -1, -1, -1,
4429  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4430  -1, -1, -1, -1, -1, 85, -1, -1, -1, 89,
4431  -1, -1, 92, 93, -1, 95, 96, -1, -1, -1,
4432  -1, 101, 102, 103, 104, 105, 106, 107, 108, 109,
4433  -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
4434  7, -1, -1, -1, 11, 12, -1, -1, -1, 16,
4435  130, 18, 19, 20, 21, 22, 23, 24, -1, -1,
4436  -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
4437  -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
4438  -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
4439  57, -1, 59, 60, 61, 62, -1, 64, 65, 66,
4440  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4441  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4442  -1, -1, 89, -1, -1, 92, 93, -1, 95, 96,
4443  -1, -1, -1, -1, 101, 102, 103, 104, 105, 106,
4444  107, 108, 109, -1, -1, -1, -1, -1, -1, 3,
4445  4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
4446  -1, -1, 16, 130, 18, 19, 20, 21, 22, 23,
4447  24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
4448  34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
4449  -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
4450  54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
4451  64, 65, 66, -1, -1, -1, -1, -1, -1, -1,
4452  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4453  -1, -1, -1, -1, -1, 89, -1, -1, 92, 93,
4454  -1, 95, 96, -1, -1, -1, -1, 101, 102, 103,
4455  104, 105, 106, 107, 108, 109, -1, -1, -1, -1,
4456  -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4457  11, 12, -1, -1, -1, 16, 130, 18, 19, 20,
4458  21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4459  31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4460  -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4461  51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4462  61, 62, -1, 64, 65, 66, -1, -1, -1, -1,
4463  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4464  -1, -1, -1, -1, -1, -1, -1, -1, 89, -1,
4465  -1, 92, 93, -1, 95, 96, -1, -1, -1, -1,
4466  101, 102, 103, 104, 105, 106, 107, 108, 109, -1,
4467  -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
4468  -1, -1, -1, 11, 12, -1, -1, -1, 16, 130,
4469  18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
4470  -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4471  -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
4472  -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4473  -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
4474  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4475  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4476  -1, 89, -1, -1, 92, 93, -1, 95, 96, -1,
4477  -1, -1, -1, 101, 102, 103, 104, 105, 106, 107,
4478  108, 109, -1, -1, -1, -1, -1, 52, 53, -1,
4479  -1, 56, -1, -1, -1, -1, -1, -1, -1, -1,
4480  -1, -1, 130, 68, 69, 70, 71, 72, 73, 74,
4481  75, 76, -1, -1, 79, 80, -1, -1, 83, 84,
4482  85, 86, -1, -1, -1, -1, -1, -1, -1, -1,
4483  -1, -1, -1, 98, 99, -1, -1, -1, -1, -1,
4484  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4485  -1, -1, -1, -1, -1, 120, 121, 122, 123, 124,
4486  125, 126, 127, 128, 129, -1, 131, 132, 52, 53,
4487  -1, -1, 56, 138, -1, -1, -1, -1, -1, -1,
4488  -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
4489  74, 75, 76, -1, -1, 79, 80, -1, -1, 83,
4490  84, 85, 86, -1, -1, -1, -1, -1, -1, -1,
4491  -1, -1, -1, -1, 98, 99, -1, -1, -1, -1,
4492  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4493  -1, -1, -1, -1, -1, -1, 120, 121, 122, 123,
4494  124, 125, 126, 127, 128, 129, -1, 131, 132, 52,
4495  53, -1, -1, 56, 138, -1, -1, -1, -1, -1,
4496  -1, -1, -1, -1, -1, 68, 69, 70, 71, 72,
4497  73, 74, 75, 76, -1, -1, 79, 80, -1, -1,
4498  83, 84, 85, 86, -1, -1, -1, -1, -1, -1,
4499  -1, -1, -1, -1, -1, 98, 99, -1, -1, -1,
4500  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4501  -1, -1, -1, -1, -1, -1, -1, 120, 121, 122,
4502  123, 124, 125, 126, 127, 128, 129, -1, 131, 132,
4503  52, 53, -1, -1, 56, 138, -1, -1, -1, -1,
4504  -1, -1, -1, -1, -1, -1, 68, 69, 70, 71,
4505  72, 73, 74, 75, 76, -1, -1, 79, 80, -1,
4506  -1, 83, 84, 85, 86, -1, -1, -1, -1, -1,
4507  -1, -1, -1, -1, -1, -1, 98, 99, -1, -1,
4508  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4509  -1, -1, -1, -1, -1, -1, -1, -1, 120, 121,
4510  122, 123, 124, 125, 126, 127, 128, 129, -1, 131,
4511  132, 52, 53, -1, -1, 56, 138, -1, -1, -1,
4512  -1, -1, -1, -1, -1, -1, -1, 68, 69, 70,
4513  71, 72, 73, 74, 75, 76, -1, -1, 79, 80,
4514  -1, -1, 83, 84, 85, 86, -1, -1, -1, -1,
4515  -1, -1, -1, -1, -1, -1, -1, 98, 99, -1,
4516  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4517  -1, -1, -1, -1, -1, -1, -1, -1, -1, 120,
4518  121, 122, 123, 124, 125, 126, 127, 128, 129, -1,
4519  131, 132, 52, 53, -1, -1, 56, 138, -1, -1,
4520  -1, -1, -1, -1, -1, -1, -1, -1, 68, 69,
4521  70, 71, 72, 73, 74, 75, 76, -1, -1, 79,
4522  80, -1, -1, 83, 84, 85, 86, -1, -1, -1,
4523  -1, -1, -1, -1, -1, -1, -1, -1, 98, 99,
4524  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4525  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4526  120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
4527  -1, 131, 132, 52, 53, -1, -1, 56, 138, -1,
4528  -1, -1, -1, -1, -1, -1, -1, -1, -1, 68,
4529  69, 70, 71, 72, 73, 74, 75, 76, -1, -1,
4530  79, 80, -1, -1, 83, 84, 85, 86, -1, -1,
4531  -1, -1, -1, -1, -1, -1, -1, -1, -1, 98,
4532  99, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4533  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4534  -1, 120, 121, 122, 123, 124, 125, 126, 127, 128,
4535  129, -1, 131, 132, 52, 53, -1, -1, 56, 138,
4536  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4537  68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
4538  -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
4539  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4540  98, 99, -1, -1, -1, -1, -1, -1, -1, -1,
4541  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4542  -1, -1, 120, 121, 122, 123, 124, 125, 126, 127,
4543  128, 129, -1, 131, 132, 52, 53, -1, -1, 56,
4544  138, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4545  -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
4546  -1, -1, 79, 80, -1, -1, 83, 84, 85, 86,
4547  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4548  -1, 98, 99, -1, -1, -1, -1, -1, -1, -1,
4549  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4550  -1, -1, -1, 120, 121, 122, 123, 124, 125, 126,
4551  127, 128, 129, -1, 131, 132, 52, 53, -1, -1,
4552  56, 138, -1, -1, -1, -1, -1, -1, -1, -1,
4553  -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
4554  76, -1, -1, 79, 80, -1, -1, 83, 84, 85,
4555  86, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4556  -1, -1, 98, 99, -1, -1, -1, -1, -1, -1,
4557  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4558  -1, -1, -1, -1, 120, 121, 122, 123, 124, 125,
4559  126, 127, 128, 129, -1, 131, 132, 52, 53, -1,
4560  -1, 56, 138, -1, -1, -1, -1, -1, -1, -1,
4561  -1, -1, -1, 68, 69, 70, 71, 72, 73, 74,
4562  75, 76, -1, -1, 79, 80, -1, -1, 83, 84,
4563  85, 86, -1, -1, -1, -1, -1, -1, -1, -1,
4564  -1, -1, -1, 98, 99, -1, -1, -1, -1, -1,
4565  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4566  -1, -1, -1, -1, -1, 120, 121, 122, 123, 124,
4567  125, 126, 127, 128, 129, -1, 131, 132, 52, 53,
4568  -1, -1, 56, 138, -1, -1, -1, -1, -1, -1,
4569  -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
4570  74, 75, 76, -1, -1, 79, 80, -1, -1, 83,
4571  84, 85, 86, -1, -1, -1, -1, -1, -1, -1,
4572  -1, -1, -1, -1, 98, 99, -1, -1, -1, -1,
4573  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4574  -1, -1, -1, -1, -1, -1, 120, 121, 122, 123,
4575  124, 125, 126, 127, 128, 129, -1, 131, 132, -1,
4576  -1, -1, -1, -1, 138
4577 };
4578 
4579 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
4580  symbol of state STATE-NUM. */
4581 static const yytype_uint16 yystos[] =
4582 {
4583  0, 147, 148, 0, 1, 3, 4, 5, 6, 7,
4584  11, 12, 16, 18, 19, 20, 21, 22, 23, 24,
4585  30, 31, 32, 33, 34, 35, 36, 39, 45, 46,
4586  47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
4587  57, 59, 60, 61, 62, 64, 65, 66, 68, 69,
4588  89, 92, 93, 95, 96, 98, 101, 102, 103, 104,
4589  105, 106, 107, 108, 109, 130, 131, 132, 149, 150,
4590  151, 158, 160, 162, 164, 165, 168, 169, 170, 172,
4591  173, 174, 176, 177, 187, 203, 222, 223, 224, 225,
4592  226, 227, 228, 229, 230, 231, 232, 259, 260, 280,
4593  281, 282, 283, 284, 285, 286, 289, 291, 292, 306,
4594  308, 309, 310, 311, 312, 313, 314, 315, 349, 362,
4595  151, 3, 4, 5, 6, 7, 8, 9, 10, 11,
4596  12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
4597  22, 23, 24, 25, 26, 30, 31, 32, 33, 34,
4598  35, 36, 37, 38, 39, 45, 46, 47, 48, 49,
4599  50, 51, 52, 53, 56, 68, 69, 70, 71, 72,
4600  73, 74, 75, 76, 79, 80, 83, 84, 85, 86,
4601  98, 99, 120, 121, 122, 123, 124, 125, 126, 127,
4602  128, 129, 131, 132, 138, 180, 181, 182, 183, 185,
4603  186, 306, 308, 39, 58, 89, 92, 98, 99, 100,
4604  103, 131, 169, 177, 187, 189, 195, 198, 200, 222,
4605  311, 312, 314, 315, 347, 348, 195, 195, 139, 196,
4606  197, 139, 192, 196, 139, 145, 356, 54, 182, 356,
4607  152, 134, 21, 22, 30, 31, 32, 168, 187, 222,
4608  187, 56, 1, 47, 92, 154, 155, 156, 158, 171,
4609  172, 362, 205, 206, 190, 200, 347, 362, 189, 346,
4610  347, 362, 46, 89, 130, 137, 176, 203, 222, 311,
4611  312, 315, 250, 251, 54, 55, 57, 180, 296, 307,
4612  295, 296, 297, 143, 287, 143, 293, 143, 290, 143,
4613  294, 310, 164, 187, 187, 142, 145, 355, 360, 361,
4614  40, 41, 42, 43, 44, 37, 38, 26, 134, 192,
4615  196, 265, 28, 257, 117, 137, 92, 98, 173, 117,
4616  70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
4617  80, 81, 82, 85, 86, 118, 120, 121, 122, 123,
4618  124, 125, 126, 127, 128, 129, 87, 88, 136, 144,
4619  353, 204, 162, 163, 163, 209, 211, 163, 355, 361,
4620  89, 170, 177, 222, 238, 311, 312, 315, 52, 56,
4621  85, 89, 178, 179, 222, 311, 312, 315, 179, 33,
4622  34, 35, 36, 49, 50, 51, 52, 56, 139, 180,
4623  313, 344, 88, 353, 354, 265, 283, 90, 90, 137,
4624  189, 56, 189, 189, 189, 295, 117, 91, 137, 199,
4625  362, 88, 136, 353, 90, 90, 137, 199, 195, 356,
4626  357, 195, 194, 195, 200, 347, 362, 162, 357, 162,
4627  54, 65, 66, 159, 139, 188, 134, 154, 88, 353,
4628  90, 158, 157, 171, 140, 355, 361, 357, 357, 158,
4629  141, 137, 145, 359, 137, 359, 135, 359, 356, 56,
4630  310, 173, 175, 137, 88, 136, 353, 252, 63, 110,
4631  112, 113, 298, 113, 298, 113, 67, 298, 113, 113,
4632  288, 298, 113, 63, 113, 113, 113, 288, 113, 63,
4633  113, 70, 142, 151, 163, 163, 163, 163, 158, 162,
4634  162, 267, 266, 97, 166, 258, 98, 164, 189, 200,
4635  201, 202, 171, 137, 176, 137, 160, 161, 164, 177,
4636  187, 189, 191, 202, 222, 315, 187, 187, 187, 187,
4637  187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
4638  187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
4639  187, 187, 52, 53, 56, 185, 264, 350, 351, 194,
4640  52, 53, 56, 185, 263, 350, 153, 154, 13, 234,
4641  360, 234, 163, 163, 355, 17, 274, 56, 88, 136,
4642  353, 25, 162, 52, 56, 178, 121, 316, 88, 136,
4643  353, 217, 345, 218, 88, 144, 352, 52, 56, 350,
4644  161, 187, 191, 161, 191, 184, 115, 189, 98, 189,
4645  198, 347, 52, 56, 194, 52, 56, 348, 357, 140,
4646  357, 137, 137, 357, 182, 208, 187, 149, 135, 350,
4647  350, 191, 134, 357, 156, 207, 347, 137, 175, 52,
4648  56, 194, 52, 56, 52, 54, 55, 56, 57, 58,
4649  70, 92, 98, 99, 100, 124, 127, 139, 255, 320,
4650  322, 323, 324, 325, 326, 327, 328, 329, 332, 333,
4651  334, 335, 338, 339, 340, 341, 342, 300, 299, 143,
4652  298, 143, 143, 143, 187, 271, 272, 268, 269, 167,
4653  271, 189, 137, 357, 175, 137, 44, 117, 44, 88,
4654  136, 353, 356, 90, 90, 192, 196, 262, 356, 358,
4655  90, 90, 192, 196, 261, 10, 233, 8, 276, 362,
4656  154, 13, 154, 27, 235, 360, 235, 274, 200, 233,
4657  52, 56, 194, 52, 56, 213, 216, 317, 215, 52,
4658  56, 178, 194, 153, 162, 219, 220, 192, 193, 196,
4659  362, 182, 189, 189, 199, 90, 90, 358, 90, 90,
4660  347, 162, 135, 149, 357, 359, 173, 358, 92, 98,
4661  239, 240, 241, 324, 322, 253, 117, 137, 321, 189,
4662  137, 343, 362, 52, 137, 343, 137, 321, 52, 137,
4663  321, 52, 301, 54, 55, 57, 305, 315, 10, 273,
4664  135, 270, 268, 10, 98, 189, 175, 158, 187, 52,
4665  56, 194, 52, 56, 119, 161, 191, 161, 191, 166,
4666  192, 141, 90, 161, 191, 161, 191, 166, 193, 189,
4667  202, 277, 362, 15, 237, 362, 14, 236, 237, 237,
4668  210, 212, 233, 137, 234, 358, 163, 360, 163, 153,
4669  358, 233, 357, 139, 318, 319, 180, 265, 257, 90,
4670  137, 357, 135, 241, 137, 324, 137, 357, 247, 356,
4671  254, 189, 320, 326, 338, 340, 329, 334, 342, 327,
4672  335, 340, 325, 327, 302, 78, 122, 245, 246, 362,
4673  245, 135, 189, 358, 187, 161, 191, 91, 278, 362,
4674  154, 9, 279, 362, 163, 233, 233, 154, 154, 189,
4675  154, 235, 153, 360, 233, 322, 153, 322, 221, 357,
4676  240, 137, 98, 239, 140, 142, 29, 114, 256, 137,
4677  321, 137, 321, 343, 137, 321, 137, 321, 321, 303,
4678  242, 244, 247, 325, 327, 328, 330, 331, 334, 336,
4679  337, 340, 342, 154, 154, 89, 177, 222, 311, 312,
4680  315, 234, 154, 234, 233, 233, 237, 274, 275, 214,
4681  233, 357, 233, 360, 318, 137, 240, 137, 324, 52,
4682  248, 249, 323, 154, 154, 327, 340, 327, 327, 304,
4683  247, 122, 117, 137, 243, 89, 222, 137, 343, 343,
4684  137, 243, 137, 243, 56, 88, 136, 353, 154, 154,
4685  154, 153, 240, 137, 137, 356, 233, 135, 321, 137,
4686  321, 321, 321, 154, 122, 222, 242, 337, 340, 56,
4687  88, 330, 334, 327, 336, 340, 327, 52, 56, 194,
4688  52, 56, 276, 236, 233, 233, 240, 249, 327, 111,
4689  137, 243, 137, 243, 52, 56, 343, 137, 243, 137,
4690  243, 243, 358, 321, 327, 340, 327, 327, 243, 137,
4691  243, 243, 243, 327, 243
4692 };
4693 
4694 #define yyerrok (yyerrstatus = 0)
4695 #define yyclearin (yychar = YYEMPTY)
4696 #define YYEMPTY (-2)
4697 #define YYEOF 0
4698 
4699 #define YYACCEPT goto yyacceptlab
4700 #define YYABORT goto yyabortlab
4701 #define YYERROR goto yyerrorlab
4702 
4703 
4704 /* Like YYERROR except do call yyerror. This remains here temporarily
4705  to ease the transition to the new meaning of YYERROR, for GCC.
4706  Once GCC version 2 has supplanted version 1, this can go. However,
4707  YYFAIL appears to be in use. Nevertheless, it is formally deprecated
4708  in Bison 2.4.2's NEWS entry, where a plan to phase it out is
4709  discussed. */
4710 
4711 #define YYFAIL goto yyerrlab
4712 #if defined YYFAIL
4713  /* This is here to suppress warnings from the GCC cpp's
4714  -Wunused-macros. Normally we don't worry about that warning, but
4715  some users do, and we want to make it easy for users to remove
4716  YYFAIL uses, which will produce warnings from Bison 2.5. */
4717 #endif
4718 
4719 #define YYRECOVERING() (!!yyerrstatus)
4720 
4721 #define YYBACKUP(Token, Value) \
4722 do \
4723  if (yychar == YYEMPTY && yylen == 1) \
4724  { \
4725  yychar = (Token); \
4726  yylval = (Value); \
4727  YYPOPSTACK (1); \
4728  goto yybackup; \
4729  } \
4730  else \
4731  { \
4732  parser_yyerror (parser, YY_("syntax error: cannot back up")); \
4733  YYERROR; \
4734  } \
4735 while (YYID (0))
4736 
4737 
4738 #define YYTERROR 1
4739 #define YYERRCODE 256
4740 
4741 
4742 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
4743  If N is 0, then set CURRENT to the empty location which ends
4744  the previous symbol: RHS[0] (always defined). */
4745 
4746 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
4747 #ifndef YYLLOC_DEFAULT
4748 # define YYLLOC_DEFAULT(Current, Rhs, N) \
4749  do \
4750  if (YYID (N)) \
4751  { \
4752  (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
4753  (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
4754  (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
4755  (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
4756  } \
4757  else \
4758  { \
4759  (Current).first_line = (Current).last_line = \
4760  YYRHSLOC (Rhs, 0).last_line; \
4761  (Current).first_column = (Current).last_column = \
4762  YYRHSLOC (Rhs, 0).last_column; \
4763  } \
4764  while (YYID (0))
4765 #endif
4766 
4767 
4768 /* This macro is provided for backward compatibility. */
4769 
4770 #ifndef YY_LOCATION_PRINT
4771 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
4772 #endif
4773 
4774 
4775 /* YYLEX -- calling `yylex' with the right arguments. */
4776 
4777 #ifdef YYLEX_PARAM
4778 # define YYLEX yylex (&yylval, YYLEX_PARAM)
4779 #else
4780 # define YYLEX yylex (&yylval, parser)
4781 #endif
4782 
4783 /* Enable debugging if requested. */
4784 #if YYDEBUG
4785 
4786 # ifndef YYFPRINTF
4787 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
4788 # define YYFPRINTF fprintf
4789 # endif
4790 
4791 # define YYDPRINTF(Args) \
4792 do { \
4793  if (yydebug) \
4794  YYFPRINTF Args; \
4795 } while (YYID (0))
4796 
4797 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
4798 do { \
4799  if (yydebug) \
4800  { \
4801  YYFPRINTF (parser, "%s ", Title); \
4802  yy_symbol_print (stderr, \
4803  Type, Value, parser); \
4804  YYFPRINTF (parser, "\n"); \
4805  } \
4806 } while (YYID (0))
4807 
4808 
4809 /*--------------------------------.
4810 | Print this symbol on YYOUTPUT. |
4811 `--------------------------------*/
4812 
4813 /*ARGSUSED*/
4814 #if (defined __STDC__ || defined __C99__FUNC__ \
4815  || defined __cplusplus || defined _MSC_VER)
4816 static void
4817 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
4818 #else
4819 static void
4820 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
4821  FILE *yyoutput;
4822  int yytype;
4823  YYSTYPE const * const yyvaluep;
4824  struct parser_params *parser;
4825 #endif
4826 {
4827  if (!yyvaluep)
4828  return;
4829  YYUSE (parser);
4830 # ifdef YYPRINT
4831  if (yytype < YYNTOKENS)
4832  YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
4833 # else
4834  YYUSE (yyoutput);
4835 # endif
4836  switch (yytype)
4837  {
4838  default:
4839  break;
4840  }
4841 }
4842 
4843 
4844 /*--------------------------------.
4845 | Print this symbol on YYOUTPUT. |
4846 `--------------------------------*/
4847 
4848 #if (defined __STDC__ || defined __C99__FUNC__ \
4849  || defined __cplusplus || defined _MSC_VER)
4850 static void
4851 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
4852 #else
4853 static void
4854 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
4855  FILE *yyoutput;
4856  int yytype;
4857  YYSTYPE const * const yyvaluep;
4858  struct parser_params *parser;
4859 #endif
4860 {
4861  if (yytype < YYNTOKENS)
4862  YYFPRINTF (parser, "token %s (", yytname[yytype]);
4863  else
4864  YYFPRINTF (parser, "nterm %s (", yytname[yytype]);
4865 
4866  yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
4867  YYFPRINTF (parser, ")");
4868 }
4869 
4870 /*------------------------------------------------------------------.
4871 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
4872 | TOP (included). |
4873 `------------------------------------------------------------------*/
4874 
4875 #if (defined __STDC__ || defined __C99__FUNC__ \
4876  || defined __cplusplus || defined _MSC_VER)
4877 static void
4878 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop, struct parser_params *parser)
4879 #else
4880 static void
4881 yy_stack_print (yybottom, yytop, parser)
4882  yytype_int16 *yybottom;
4883  yytype_int16 *yytop;
4884 #endif
4885 {
4886  YYFPRINTF (parser, "Stack now");
4887  for (; yybottom <= yytop; yybottom++)
4888  {
4889  int yybot = *yybottom;
4890  YYFPRINTF (parser, " %d", yybot);
4891  }
4892  YYFPRINTF (parser, "\n");
4893 }
4894 
4895 # define YY_STACK_PRINT(Bottom, Top) \
4896 do { \
4897  if (yydebug) \
4898  yy_stack_print ((Bottom), (Top), parser); \
4899 } while (YYID (0))
4900 
4901 
4902 /*------------------------------------------------.
4903 | Report that the YYRULE is going to be reduced. |
4904 `------------------------------------------------*/
4905 
4906 #if (defined __STDC__ || defined __C99__FUNC__ \
4907  || defined __cplusplus || defined _MSC_VER)
4908 static void
4909 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
4910 #else
4911 static void
4912 yy_reduce_print (yyvsp, yyrule, parser)
4913  YYSTYPE *yyvsp;
4914  int yyrule;
4915  struct parser_params *parser;
4916 #endif
4917 {
4918  int yynrhs = yyr2[yyrule];
4919  int yyi;
4920  unsigned long int yylno = yyrline[yyrule];
4921  YYFPRINTF (parser, "Reducing stack by rule %d (line %lu):\n",
4922  yyrule - 1, yylno);
4923  /* The symbols being reduced. */
4924  for (yyi = 0; yyi < yynrhs; yyi++)
4925  {
4926  YYFPRINTF (parser, " $%d = ", yyi + 1);
4927  yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
4928  &(yyvsp[(yyi + 1) - (yynrhs)])
4929  , parser);
4930  YYFPRINTF (parser, "\n");
4931  }
4932 }
4933 
4934 # define YY_REDUCE_PRINT(Rule) \
4935 do { \
4936  if (yydebug) \
4937  yy_reduce_print (yyvsp, Rule, parser); \
4938 } while (YYID (0))
4939 
4940 /* Nonzero means print parse trace. It is left uninitialized so that
4941  multiple parsers can coexist. */
4942 #ifndef yydebug
4943 int yydebug;
4944 #endif
4945 #else /* !YYDEBUG */
4946 # define YYDPRINTF(Args)
4947 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
4948 # define YY_STACK_PRINT(Bottom, Top)
4949 # define YY_REDUCE_PRINT(Rule)
4950 #endif /* !YYDEBUG */
4951 
4952 
4953 /* YYINITDEPTH -- initial size of the parser's stacks. */
4954 #ifndef YYINITDEPTH
4955 # define YYINITDEPTH 200
4956 #endif
4957 
4958 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
4959  if the built-in stack extension method is used).
4960 
4961  Do not make this value too large; the results are undefined if
4962  YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
4963  evaluated with infinite-precision integer arithmetic. */
4964 
4965 #ifndef YYMAXDEPTH
4966 # define YYMAXDEPTH 10000
4967 #endif
4968 
4969 
4970 #if YYERROR_VERBOSE
4971 
4972 # ifndef yystrlen
4973 # if defined __GLIBC__ && defined _STRING_H
4974 # define yystrlen strlen
4975 # else
4976 /* Return the length of YYSTR. */
4977 #if (defined __STDC__ || defined __C99__FUNC__ \
4978  || defined __cplusplus || defined _MSC_VER)
4979 static YYSIZE_T
4980 yystrlen (const char *yystr)
4981 #else
4982 static YYSIZE_T
4983 yystrlen (yystr)
4984  const char *yystr;
4985 #endif
4986 {
4987  YYSIZE_T yylen;
4988  for (yylen = 0; yystr[yylen]; yylen++)
4989  continue;
4990  return yylen;
4991 }
4992 # endif
4993 # endif
4994 
4995 # ifndef yystpcpy
4996 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
4997 # define yystpcpy stpcpy
4998 # else
4999 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
5000  YYDEST. */
5001 #if (defined __STDC__ || defined __C99__FUNC__ \
5002  || defined __cplusplus || defined _MSC_VER)
5003 static char *
5004 yystpcpy (char *yydest, const char *yysrc)
5005 #else
5006 static char *
5007 yystpcpy (yydest, yysrc)
5008  char *yydest;
5009  const char *yysrc;
5010 #endif
5011 {
5012  char *yyd = yydest;
5013  const char *yys = yysrc;
5014 
5015  while ((*yyd++ = *yys++) != '\0')
5016  continue;
5017 
5018  return yyd - 1;
5019 }
5020 # endif
5021 # endif
5022 
5023 # ifndef yytnamerr
5024 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
5025  quotes and backslashes, so that it's suitable for yyerror. The
5026  heuristic is that double-quoting is unnecessary unless the string
5027  contains an apostrophe, a comma, or backslash (other than
5028  backslash-backslash). YYSTR is taken from yytname. If YYRES is
5029  null, do not copy; instead, return the length of what the result
5030  would have been. */
5031 static YYSIZE_T
5032 yytnamerr (char *yyres, const char *yystr)
5033 {
5034  if (*yystr == '"')
5035  {
5036  YYSIZE_T yyn = 0;
5037  char const *yyp = yystr;
5038 
5039  for (;;)
5040  switch (*++yyp)
5041  {
5042  case '\'':
5043  case ',':
5044  goto do_not_strip_quotes;
5045 
5046  case '\\':
5047  if (*++yyp != '\\')
5048  goto do_not_strip_quotes;
5049  /* Fall through. */
5050  default:
5051  if (yyres)
5052  yyres[yyn] = *yyp;
5053  yyn++;
5054  break;
5055 
5056  case '"':
5057  if (yyres)
5058  yyres[yyn] = '\0';
5059  return yyn;
5060  }
5061  do_not_strip_quotes: ;
5062  }
5063 
5064  if (! yyres)
5065  return yystrlen (yystr);
5066 
5067  return yystpcpy (yyres, yystr) - yyres;
5068 }
5069 # endif
5070 
5071 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
5072  about the unexpected token YYTOKEN for the state stack whose top is
5073  YYSSP.
5074 
5075  Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
5076  not large enough to hold the message. In that case, also set
5077  *YYMSG_ALLOC to the required number of bytes. Return 2 if the
5078  required number of bytes is too large to store. */
5079 static int
5080 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
5081  yytype_int16 *yyssp, int yytoken)
5082 {
5083  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
5084  YYSIZE_T yysize = yysize0;
5085  YYSIZE_T yysize1;
5086  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
5087  /* Internationalized format string. */
5088  const char *yyformat = 0;
5089  /* Arguments of yyformat. */
5090  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
5091  /* Number of reported tokens (one for the "unexpected", one per
5092  "expected"). */
5093  int yycount = 0;
5094 
5095  /* There are many possibilities here to consider:
5096  - Assume YYFAIL is not used. It's too flawed to consider. See
5097  <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
5098  for details. YYERROR is fine as it does not invoke this
5099  function.
5100  - If this state is a consistent state with a default action, then
5101  the only way this function was invoked is if the default action
5102  is an error action. In that case, don't check for expected
5103  tokens because there are none.
5104  - The only way there can be no lookahead present (in yychar) is if
5105  this state is a consistent state with a default action. Thus,
5106  detecting the absence of a lookahead is sufficient to determine
5107  that there is no unexpected or expected token to report. In that
5108  case, just report a simple "syntax error".
5109  - Don't assume there isn't a lookahead just because this state is a
5110  consistent state with a default action. There might have been a
5111  previous inconsistent state, consistent state with a non-default
5112  action, or user semantic action that manipulated yychar.
5113  - Of course, the expected token list depends on states to have
5114  correct lookahead information, and it depends on the parser not
5115  to perform extra reductions after fetching a lookahead from the
5116  scanner and before detecting a syntax error. Thus, state merging
5117  (from LALR or IELR) and default reductions corrupt the expected
5118  token list. However, the list is correct for canonical LR with
5119  one exception: it will still contain any token that will not be
5120  accepted due to an error action in a later state.
5121  */
5122  if (yytoken != YYEMPTY)
5123  {
5124  int yyn = yypact[*yyssp];
5125  yyarg[yycount++] = yytname[yytoken];
5126  if (!yypact_value_is_default (yyn))
5127  {
5128  /* Start YYX at -YYN if negative to avoid negative indexes in
5129  YYCHECK. In other words, skip the first -YYN actions for
5130  this state because they are default actions. */
5131  int yyxbegin = yyn < 0 ? -yyn : 0;
5132  /* Stay within bounds of both yycheck and yytname. */
5133  int yychecklim = YYLAST - yyn + 1;
5134  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
5135  int yyx;
5136 
5137  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
5138  if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
5139  && !yytable_value_is_error (yytable[yyx + yyn]))
5140  {
5141  if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
5142  {
5143  yycount = 1;
5144  yysize = yysize0;
5145  break;
5146  }
5147  yyarg[yycount++] = yytname[yyx];
5148  yysize1 = yysize + yytnamerr (0, yytname[yyx]);
5149  if (! (yysize <= yysize1
5150  && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
5151  return 2;
5152  yysize = yysize1;
5153  }
5154  }
5155  }
5156 
5157  switch (yycount)
5158  {
5159 # define YYCASE_(N, S) \
5160  case N: \
5161  yyformat = S; \
5162  break
5163  YYCASE_(0, YY_("syntax error"));
5164  YYCASE_(1, YY_("syntax error, unexpected %s"));
5165  YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
5166  YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
5167  YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
5168  YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
5169 # undef YYCASE_
5170  }
5171 
5172  yysize1 = yysize + yystrlen (yyformat);
5173  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
5174  return 2;
5175  yysize = yysize1;
5176 
5177  if (*yymsg_alloc < yysize)
5178  {
5179  *yymsg_alloc = 2 * yysize;
5180  if (! (yysize <= *yymsg_alloc
5181  && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
5182  *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
5183  return 1;
5184  }
5185 
5186  /* Avoid sprintf, as that infringes on the user's name space.
5187  Don't have undefined behavior even if the translation
5188  produced a string with the wrong number of "%s"s. */
5189  {
5190  char *yyp = *yymsg;
5191  int yyi = 0;
5192  while ((*yyp = *yyformat) != '\0')
5193  if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
5194  {
5195  yyp += yytnamerr (yyp, yyarg[yyi++]);
5196  yyformat += 2;
5197  }
5198  else
5199  {
5200  yyp++;
5201  yyformat++;
5202  }
5203  }
5204  return 0;
5205 }
5206 #endif /* YYERROR_VERBOSE */
5207 
5208 /*-----------------------------------------------.
5209 | Release the memory associated to this symbol. |
5210 `-----------------------------------------------*/
5211 
5212 /*ARGSUSED*/
5213 #if (defined __STDC__ || defined __C99__FUNC__ \
5214  || defined __cplusplus || defined _MSC_VER)
5215 static void
5216 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
5217 #else
5218 static void
5219 yydestruct (yymsg, yytype, yyvaluep, parser)
5220  const char *yymsg;
5221  int yytype;
5222  YYSTYPE *yyvaluep;
5223  struct parser_params *parser;
5224 #endif
5225 {
5226  YYUSE (yyvaluep);
5227  YYUSE (parser);
5228 
5229  if (!yymsg)
5230  yymsg = "Deleting";
5231  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
5232 
5233  switch (yytype)
5234  {
5235 
5236  default:
5237  break;
5238  }
5239 }
5240 
5241 
5242 /* Prevent warnings from -Wmissing-prototypes. */
5243 #ifdef YYPARSE_PARAM
5244 #if defined __STDC__ || defined __cplusplus
5245 int yyparse (void *YYPARSE_PARAM);
5246 #else
5247 int yyparse ();
5248 #endif
5249 #else /* ! YYPARSE_PARAM */
5250 #if defined __STDC__ || defined __cplusplus
5251 int yyparse (struct parser_params *parser);
5252 #else
5253 int yyparse ();
5254 #endif
5255 #endif /* ! YYPARSE_PARAM */
5256 
5257 
5258 /*----------.
5259 | yyparse. |
5260 `----------*/
5261 
5262 #ifdef YYPARSE_PARAM
5263 #if (defined __STDC__ || defined __C99__FUNC__ \
5264  || defined __cplusplus || defined _MSC_VER)
5265 int
5266 yyparse (void *YYPARSE_PARAM)
5267 #else
5268 int
5269 yyparse (YYPARSE_PARAM)
5270  void *YYPARSE_PARAM;
5271 #endif
5272 #else /* ! YYPARSE_PARAM */
5273 #if (defined __STDC__ || defined __C99__FUNC__ \
5274  || defined __cplusplus || defined _MSC_VER)
5275 int
5276 yyparse (struct parser_params *parser)
5277 #else
5278 int
5279 yyparse (parser)
5280  struct parser_params *parser;
5281 #endif
5282 #endif
5283 {
5284 /* The lookahead symbol. */
5285 int yychar;
5286 
5287 /* The semantic value of the lookahead symbol. */
5288 YYSTYPE yylval;
5289 
5290  /* Number of syntax errors so far. */
5291  int yynerrs;
5292 
5293  int yystate;
5294  /* Number of tokens to shift before error messages enabled. */
5295  int yyerrstatus;
5296 
5297  /* The stacks and their tools:
5298  `yyss': related to states.
5299  `yyvs': related to semantic values.
5300 
5301  Refer to the stacks thru separate pointers, to allow yyoverflow
5302  to reallocate them elsewhere. */
5303 
5304  /* The state stack. */
5305  yytype_int16 yyssa[YYINITDEPTH];
5306  yytype_int16 *yyss;
5307  yytype_int16 *yyssp;
5308 
5309  /* The semantic value stack. */
5310  YYSTYPE yyvsa[YYINITDEPTH];
5311  YYSTYPE *yyvs;
5312  YYSTYPE *yyvsp;
5313 
5314  YYSIZE_T yystacksize;
5315 
5316  int yyn;
5317  int yyresult;
5318  /* Lookahead token as an internal (translated) token number. */
5319  int yytoken;
5320  /* The variables used to return semantic value and location from the
5321  action routines. */
5322  YYSTYPE yyval;
5323 
5324 #if YYERROR_VERBOSE
5325  /* Buffer for error messages, and its allocated size. */
5326  char yymsgbuf[128];
5327  char *yymsg = yymsgbuf;
5328  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
5329 #endif
5330 
5331 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
5332 
5333  /* The number of symbols on the RHS of the reduced rule.
5334  Keep to zero when no symbol should be popped. */
5335  int yylen = 0;
5336 
5337  yytoken = 0;
5338  yyss = yyssa;
5339  yyvs = yyvsa;
5340  yystacksize = YYINITDEPTH;
5341 
5342  YYDPRINTF ((parser, "Starting parse\n"));
5343 
5344  yystate = 0;
5345  yyerrstatus = 0;
5346  yynerrs = 0;
5347  yychar = YYEMPTY; /* Cause a token to be read. */
5348 
5349  /* Initialize stack pointers.
5350  Waste one element of value and location stack
5351  so that they stay on the same level as the state stack.
5352  The wasted elements are never initialized. */
5353  yyssp = yyss;
5354  yyvsp = yyvs;
5355 
5356  goto yysetstate;
5357 
5358 /*------------------------------------------------------------.
5359 | yynewstate -- Push a new state, which is found in yystate. |
5360 `------------------------------------------------------------*/
5361  yynewstate:
5362  /* In all cases, when you get here, the value and location stacks
5363  have just been pushed. So pushing a state here evens the stacks. */
5364  yyssp++;
5365 
5366  yysetstate:
5367  *yyssp = yystate;
5368 
5369  if (yyss + yystacksize - 1 <= yyssp)
5370  {
5371  /* Get the current used size of the three stacks, in elements. */
5372  YYSIZE_T yysize = yyssp - yyss + 1;
5373 
5374 #ifdef yyoverflow
5375  {
5376  /* Give user a chance to reallocate the stack. Use copies of
5377  these so that the &'s don't force the real ones into
5378  memory. */
5379  YYSTYPE *yyvs1 = yyvs;
5380  yytype_int16 *yyss1 = yyss;
5381 
5382  /* Each stack pointer address is followed by the size of the
5383  data in use in that stack, in bytes. This used to be a
5384  conditional around just the two extra args, but that might
5385  be undefined if yyoverflow is a macro. */
5386  yyoverflow (YY_("memory exhausted"),
5387  &yyss1, yysize * sizeof (*yyssp),
5388  &yyvs1, yysize * sizeof (*yyvsp),
5389  &yystacksize);
5390 
5391  yyss = yyss1;
5392  yyvs = yyvs1;
5393  }
5394 #else /* no yyoverflow */
5395 # ifndef YYSTACK_RELOCATE
5396  goto yyexhaustedlab;
5397 # else
5398  /* Extend the stack our own way. */
5399  if (YYMAXDEPTH <= yystacksize)
5400  goto yyexhaustedlab;
5401  yystacksize *= 2;
5402  if (YYMAXDEPTH < yystacksize)
5403  yystacksize = YYMAXDEPTH;
5404 
5405  {
5406  yytype_int16 *yyss1 = yyss;
5407  union yyalloc *yyptr =
5408  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
5409  if (! yyptr)
5410  goto yyexhaustedlab;
5411  YYSTACK_RELOCATE (yyss_alloc, yyss);
5412  YYSTACK_RELOCATE (yyvs_alloc, yyvs);
5413 # undef YYSTACK_RELOCATE
5414  if (yyss1 != yyssa)
5415  YYSTACK_FREE (yyss1);
5416  }
5417 # endif
5418 #endif /* no yyoverflow */
5419 
5420  yyssp = yyss + yysize - 1;
5421  yyvsp = yyvs + yysize - 1;
5422 
5423  YYDPRINTF ((parser, "Stack size increased to %lu\n",
5424  (unsigned long int) yystacksize));
5425 
5426  if (yyss + yystacksize - 1 <= yyssp)
5427  YYABORT;
5428  }
5429 
5430  YYDPRINTF ((parser, "Entering state %d\n", yystate));
5431 
5432  if (yystate == YYFINAL)
5433  YYACCEPT;
5434 
5435  goto yybackup;
5436 
5437 /*-----------.
5438 | yybackup. |
5439 `-----------*/
5440 yybackup:
5441 
5442  /* Do appropriate processing given the current state. Read a
5443  lookahead token if we need one and don't already have one. */
5444 
5445  /* First try to decide what to do without reference to lookahead token. */
5446  yyn = yypact[yystate];
5447  if (yypact_value_is_default (yyn))
5448  goto yydefault;
5449 
5450  /* Not known => get a lookahead token if don't already have one. */
5451 
5452  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
5453  if (yychar == YYEMPTY)
5454  {
5455  YYDPRINTF ((parser, "Reading a token: "));
5456  yychar = YYLEX;
5457  }
5458 
5459  if (yychar <= YYEOF)
5460  {
5461  yychar = yytoken = YYEOF;
5462  YYDPRINTF ((parser, "Now at end of input.\n"));
5463  }
5464  else
5465  {
5466  yytoken = YYTRANSLATE (yychar);
5467  YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
5468  }
5469 
5470  /* If the proper action on seeing token YYTOKEN is to reduce or to
5471  detect an error, take that action. */
5472  yyn += yytoken;
5473  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
5474  goto yydefault;
5475  yyn = yytable[yyn];
5476  if (yyn <= 0)
5477  {
5478  if (yytable_value_is_error (yyn))
5479  goto yyerrlab;
5480  yyn = -yyn;
5481  goto yyreduce;
5482  }
5483 
5484  /* Count tokens shifted since error; after three, turn off error
5485  status. */
5486  if (yyerrstatus)
5487  yyerrstatus--;
5488 
5489  /* Shift the lookahead token. */
5490  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
5491 
5492  /* Discard the shifted token. */
5493  yychar = YYEMPTY;
5494 
5495  yystate = yyn;
5496  *++yyvsp = yylval;
5497 
5498  goto yynewstate;
5499 
5500 
5501 /*-----------------------------------------------------------.
5502 | yydefault -- do the default action for the current state. |
5503 `-----------------------------------------------------------*/
5504 yydefault:
5505  yyn = yydefact[yystate];
5506  if (yyn == 0)
5507  goto yyerrlab;
5508  goto yyreduce;
5509 
5510 
5511 /*-----------------------------.
5512 | yyreduce -- Do a reduction. |
5513 `-----------------------------*/
5514 yyreduce:
5515  /* yyn is the number of a rule to reduce with. */
5516  yylen = yyr2[yyn];
5517 
5518  /* If YYLEN is nonzero, implement the default value of the action:
5519  `$$ = $1'.
5520 
5521  Otherwise, the following line sets YYVAL to garbage.
5522  This behavior is undocumented and Bison
5523  users should not rely upon it. Assigning to YYVAL
5524  unconditionally makes the parser a bit smaller, and it avoids a
5525  GCC warning that YYVAL may be used uninitialized. */
5526  yyval = yyvsp[1-yylen];
5527 
5528 
5529  YY_REDUCE_PRINT (yyn);
5530  switch (yyn)
5531  {
5532  case 2:
5533 
5534 /* Line 1806 of yacc.c */
5535 #line 994 "parse.y"
5536  {
5537  SET_LEX_STATE(EXPR_BEG);
5538  /*%%%*/
5540  /*%
5541  local_push(0);
5542  %*/
5543  }
5544  break;
5545 
5546  case 3:
5547 
5548 /* Line 1806 of yacc.c */
5549 #line 1003 "parse.y"
5550  {
5551  /*%%%*/
5552  if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
5553  /* last expression should not be void */
5554  if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
5555  else {
5556  NODE *node = (yyvsp[(2) - (2)].node);
5557  while (node->nd_next) {
5558  node = node->nd_next;
5559  }
5560  void_expr(node->nd_head);
5561  }
5562  }
5563  ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
5564  /*%
5565  $$ = $2;
5566  parser->result = dispatch1(program, $$);
5567  %*/
5568  local_pop();
5569  }
5570  break;
5571 
5572  case 4:
5573 
5574 /* Line 1806 of yacc.c */
5575 #line 1026 "parse.y"
5576  {
5577  /*%%%*/
5578  void_stmts((yyvsp[(1) - (2)].node));
5579  /*%
5580  %*/
5581  (yyval.node) = (yyvsp[(1) - (2)].node);
5582  }
5583  break;
5584 
5585  case 5:
5586 
5587 /* Line 1806 of yacc.c */
5588 #line 1036 "parse.y"
5589  {
5590  /*%%%*/
5591  (yyval.node) = NEW_BEGIN(0);
5592  /*%
5593  $$ = dispatch2(stmts_add, dispatch0(stmts_new),
5594  dispatch0(void_stmt));
5595  %*/
5596  }
5597  break;
5598 
5599  case 6:
5600 
5601 /* Line 1806 of yacc.c */
5602 #line 1045 "parse.y"
5603  {
5604  /*%%%*/
5605  (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
5606  /*%
5607  $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
5608  %*/
5609  }
5610  break;
5611 
5612  case 7:
5613 
5614 /* Line 1806 of yacc.c */
5615 #line 1053 "parse.y"
5616  {
5617  /*%%%*/
5618  (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
5619  /*%
5620  $$ = dispatch2(stmts_add, $1, $3);
5621  %*/
5622  }
5623  break;
5624 
5625  case 8:
5626 
5627 /* Line 1806 of yacc.c */
5628 #line 1061 "parse.y"
5629  {
5630  (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
5631  }
5632  break;
5633 
5634  case 10:
5635 
5636 /* Line 1806 of yacc.c */
5637 #line 1068 "parse.y"
5638  {
5639  /*%%%*/
5640  /* local_push(0); */
5641  /*%
5642  %*/
5643  }
5644  break;
5645 
5646  case 11:
5647 
5648 /* Line 1806 of yacc.c */
5649 #line 1075 "parse.y"
5650  {
5651  /*%%%*/
5653  (yyvsp[(4) - (5)].node));
5654  /* NEW_PREEXE($4)); */
5655  /* local_pop(); */
5656  (yyval.node) = NEW_BEGIN(0);
5657  /*%
5658  $$ = dispatch1(BEGIN, $4);
5659  %*/
5660  }
5661  break;
5662 
5663  case 12:
5664 
5665 /* Line 1806 of yacc.c */
5666 #line 1092 "parse.y"
5667  {
5668  /*%%%*/
5669  (yyval.node) = (yyvsp[(1) - (4)].node);
5670  if ((yyvsp[(2) - (4)].node)) {
5671  (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
5672  }
5673  else if ((yyvsp[(3) - (4)].node)) {
5674  rb_warn0("else without rescue is useless");
5675  (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
5676  }
5677  if ((yyvsp[(4) - (4)].node)) {
5678  if ((yyval.node)) {
5679  (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
5680  }
5681  else {
5682  (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
5683  }
5684  }
5685  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
5686  /*%
5687  $$ = dispatch4(bodystmt,
5688  escape_Qundef($1),
5689  escape_Qundef($2),
5690  escape_Qundef($3),
5691  escape_Qundef($4));
5692  %*/
5693  }
5694  break;
5695 
5696  case 13:
5697 
5698 /* Line 1806 of yacc.c */
5699 #line 1122 "parse.y"
5700  {
5701  /*%%%*/
5702  void_stmts((yyvsp[(1) - (2)].node));
5703  /*%
5704  %*/
5705  (yyval.node) = (yyvsp[(1) - (2)].node);
5706  }
5707  break;
5708 
5709  case 14:
5710 
5711 /* Line 1806 of yacc.c */
5712 #line 1132 "parse.y"
5713  {
5714  /*%%%*/
5715  (yyval.node) = NEW_BEGIN(0);
5716  /*%
5717  $$ = dispatch2(stmts_add, dispatch0(stmts_new),
5718  dispatch0(void_stmt));
5719  %*/
5720  }
5721  break;
5722 
5723  case 15:
5724 
5725 /* Line 1806 of yacc.c */
5726 #line 1141 "parse.y"
5727  {
5728  /*%%%*/
5729  (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
5730  /*%
5731  $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
5732  %*/
5733  }
5734  break;
5735 
5736  case 16:
5737 
5738 /* Line 1806 of yacc.c */
5739 #line 1149 "parse.y"
5740  {
5741  /*%%%*/
5742  (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
5743  /*%
5744  $$ = dispatch2(stmts_add, $1, $3);
5745  %*/
5746  }
5747  break;
5748 
5749  case 17:
5750 
5751 /* Line 1806 of yacc.c */
5752 #line 1157 "parse.y"
5753  {
5754  (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
5755  }
5756  break;
5757 
5758  case 18:
5759 
5760 /* Line 1806 of yacc.c */
5761 #line 1163 "parse.y"
5762  {
5763  (yyval.node) = (yyvsp[(1) - (1)].node);
5764  }
5765  break;
5766 
5767  case 19:
5768 
5769 /* Line 1806 of yacc.c */
5770 #line 1167 "parse.y"
5771  {
5772  yyerror("BEGIN is permitted only at toplevel");
5773  /*%%%*/
5774  /* local_push(0); */
5775  /*%
5776  %*/
5777  }
5778  break;
5779 
5780  case 20:
5781 
5782 /* Line 1806 of yacc.c */
5783 #line 1175 "parse.y"
5784  {
5785  /*%%%*/
5787  (yyvsp[(4) - (5)].node));
5788  /* NEW_PREEXE($4)); */
5789  /* local_pop(); */
5790  (yyval.node) = NEW_BEGIN(0);
5791  /*%
5792  $$ = dispatch1(BEGIN, $4);
5793  %*/
5794  }
5795  break;
5796 
5797  case 21:
5798 
5799 /* Line 1806 of yacc.c */
5800 #line 1187 "parse.y"
5801  {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);}
5802  break;
5803 
5804  case 22:
5805 
5806 /* Line 1806 of yacc.c */
5807 #line 1188 "parse.y"
5808  {
5809  /*%%%*/
5810  (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
5811  /*%
5812  $$ = dispatch2(alias, $2, $4);
5813  %*/
5814  }
5815  break;
5816 
5817  case 23:
5818 
5819 /* Line 1806 of yacc.c */
5820 #line 1196 "parse.y"
5821  {
5822  /*%%%*/
5823  (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
5824  /*%
5825  $$ = dispatch2(var_alias, $2, $3);
5826  %*/
5827  }
5828  break;
5829 
5830  case 24:
5831 
5832 /* Line 1806 of yacc.c */
5833 #line 1204 "parse.y"
5834  {
5835  /*%%%*/
5836  char buf[2];
5837  buf[0] = '$';
5838  buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
5839  (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
5840  /*%
5841  $$ = dispatch2(var_alias, $2, $3);
5842  %*/
5843  }
5844  break;
5845 
5846  case 25:
5847 
5848 /* Line 1806 of yacc.c */
5849 #line 1215 "parse.y"
5850  {
5851  /*%%%*/
5852  yyerror("can't make alias for the number variables");
5853  (yyval.node) = NEW_BEGIN(0);
5854  /*%
5855  $$ = dispatch2(var_alias, $2, $3);
5856  $$ = dispatch1(alias_error, $$);
5857  ripper_error();
5858  %*/
5859  }
5860  break;
5861 
5862  case 26:
5863 
5864 /* Line 1806 of yacc.c */
5865 #line 1226 "parse.y"
5866  {
5867  /*%%%*/
5868  (yyval.node) = (yyvsp[(2) - (2)].node);
5869  /*%
5870  $$ = dispatch1(undef, $2);
5871  %*/
5872  }
5873  break;
5874 
5875  case 27:
5876 
5877 /* Line 1806 of yacc.c */
5878 #line 1234 "parse.y"
5879  {
5880  /*%%%*/
5881  (yyval.node) = new_if((yyvsp[(3) - (3)].node), remove_begin((yyvsp[(1) - (3)].node)), 0);
5882  fixpos((yyval.node), (yyvsp[(3) - (3)].node));
5883  /*%
5884  $$ = dispatch2(if_mod, $3, $1);
5885  %*/
5886  }
5887  break;
5888 
5889  case 28:
5890 
5891 /* Line 1806 of yacc.c */
5892 #line 1243 "parse.y"
5893  {
5894  /*%%%*/
5895  (yyval.node) = new_unless((yyvsp[(3) - (3)].node), remove_begin((yyvsp[(1) - (3)].node)), 0);
5896  fixpos((yyval.node), (yyvsp[(3) - (3)].node));
5897  /*%
5898  $$ = dispatch2(unless_mod, $3, $1);
5899  %*/
5900  }
5901  break;
5902 
5903  case 29:
5904 
5905 /* Line 1806 of yacc.c */
5906 #line 1252 "parse.y"
5907  {
5908  /*%%%*/
5909  if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
5910  (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
5911  }
5912  else {
5913  (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
5914  }
5915  /*%
5916  $$ = dispatch2(while_mod, $3, $1);
5917  %*/
5918  }
5919  break;
5920 
5921  case 30:
5922 
5923 /* Line 1806 of yacc.c */
5924 #line 1265 "parse.y"
5925  {
5926  /*%%%*/
5927  if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
5928  (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
5929  }
5930  else {
5931  (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
5932  }
5933  /*%
5934  $$ = dispatch2(until_mod, $3, $1);
5935  %*/
5936  }
5937  break;
5938 
5939  case 31:
5940 
5941 /* Line 1806 of yacc.c */
5942 #line 1278 "parse.y"
5943  {
5944  /*%%%*/
5945  NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
5946  (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
5947  /*%
5948  $$ = dispatch2(rescue_mod, $1, $3);
5949  %*/
5950  }
5951  break;
5952 
5953  case 32:
5954 
5955 /* Line 1806 of yacc.c */
5956 #line 1287 "parse.y"
5957  {
5958  if (in_def || in_single) {
5959  rb_warn0("END in method; use at_exit");
5960  }
5961  /*%%%*/
5962  (yyval.node) = NEW_POSTEXE(NEW_NODE(
5963  NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].node) /* body */, 0 /* args */));
5964  /*%
5965  $$ = dispatch1(END, $3);
5966  %*/
5967  }
5968  break;
5969 
5970  case 34:
5971 
5972 /* Line 1806 of yacc.c */
5973 #line 1300 "parse.y"
5974  {
5975  /*%%%*/
5976  value_expr((yyvsp[(3) - (3)].node));
5977  (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
5978  (yyval.node) = (yyvsp[(1) - (3)].node);
5979  /*%
5980  $$ = dispatch2(massign, $1, $3);
5981  %*/
5982  }
5983  break;
5984 
5985  case 35:
5986 
5987 /* Line 1806 of yacc.c */
5988 #line 1310 "parse.y"
5989  {
5990  value_expr((yyvsp[(3) - (3)].node));
5991  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
5992  }
5993  break;
5994 
5995  case 36:
5996 
5997 /* Line 1806 of yacc.c */
5998 #line 1315 "parse.y"
5999  {
6000  /*%%%*/
6001  (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
6002  (yyval.node) = (yyvsp[(1) - (3)].node);
6003  /*%
6004  $$ = dispatch2(massign, $1, $3);
6005  %*/
6006  }
6007  break;
6008 
6009  case 38:
6010 
6011 /* Line 1806 of yacc.c */
6012 #line 1327 "parse.y"
6013  {
6014  value_expr((yyvsp[(3) - (3)].node));
6015  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6016  }
6017  break;
6018 
6019  case 39:
6020 
6021 /* Line 1806 of yacc.c */
6022 #line 1332 "parse.y"
6023  {
6024  value_expr((yyvsp[(3) - (3)].node));
6025  (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
6026  }
6027  break;
6028 
6029  case 40:
6030 
6031 /* Line 1806 of yacc.c */
6032 #line 1337 "parse.y"
6033  {
6034  /*%%%*/
6035  NODE *args;
6036 
6037  value_expr((yyvsp[(6) - (6)].node));
6038  if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
6039  args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
6040  if ((yyvsp[(5) - (6)].id) == tOROP) {
6041  (yyvsp[(5) - (6)].id) = 0;
6042  }
6043  else if ((yyvsp[(5) - (6)].id) == tANDOP) {
6044  (yyvsp[(5) - (6)].id) = 1;
6045  }
6046  (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
6047  fixpos((yyval.node), (yyvsp[(1) - (6)].node));
6048  /*%
6049  $$ = dispatch2(aref_field, $1, escape_Qundef($3));
6050  $$ = dispatch3(opassign, $$, $5, $6);
6051  %*/
6052  }
6053  break;
6054 
6055  case 41:
6056 
6057 /* Line 1806 of yacc.c */
6058 #line 1358 "parse.y"
6059  {
6060  value_expr((yyvsp[(5) - (5)].node));
6061  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), (yyvsp[(2) - (5)].id), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
6062  }
6063  break;
6064 
6065  case 42:
6066 
6067 /* Line 1806 of yacc.c */
6068 #line 1363 "parse.y"
6069  {
6070  value_expr((yyvsp[(5) - (5)].node));
6071  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), (yyvsp[(2) - (5)].id), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
6072  }
6073  break;
6074 
6075  case 43:
6076 
6077 /* Line 1806 of yacc.c */
6078 #line 1368 "parse.y"
6079  {
6080  (yyval.node) = const_path_field((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
6081  (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
6082  }
6083  break;
6084 
6085  case 44:
6086 
6087 /* Line 1806 of yacc.c */
6088 #line 1373 "parse.y"
6089  {
6090  value_expr((yyvsp[(5) - (5)].node));
6091  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym(idCOLON2), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
6092  }
6093  break;
6094 
6095  case 45:
6096 
6097 /* Line 1806 of yacc.c */
6098 #line 1378 "parse.y"
6099  {
6100  (yyvsp[(1) - (3)].node) = var_field((yyvsp[(1) - (3)].node));
6101  (yyval.node) = backref_assign_error((yyvsp[(1) - (3)].node), node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)));
6102  }
6103  break;
6104 
6105  case 46:
6106 
6107 /* Line 1806 of yacc.c */
6108 #line 1385 "parse.y"
6109  {
6110  /*%%%*/
6111  value_expr((yyvsp[(1) - (1)].node));
6112  (yyval.node) = (yyvsp[(1) - (1)].node);
6113  /*%
6114  %*/
6115  }
6116  break;
6117 
6118  case 47:
6119 
6120 /* Line 1806 of yacc.c */
6121 #line 1393 "parse.y"
6122  {
6123  /*%%%*/
6124  value_expr((yyvsp[(1) - (3)].node));
6125  (yyval.node) = NEW_RESCUE((yyvsp[(1) - (3)].node), NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0), 0);
6126  /*%
6127  $$ = dispatch2(rescue_mod, $1, $3);
6128  %*/
6129  }
6130  break;
6131 
6132  case 50:
6133 
6134 /* Line 1806 of yacc.c */
6135 #line 1406 "parse.y"
6136  {
6137  /*%%%*/
6138  (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6139  /*%
6140  $$ = dispatch3(binary, $1, ripper_intern("and"), $3);
6141  %*/
6142  }
6143  break;
6144 
6145  case 51:
6146 
6147 /* Line 1806 of yacc.c */
6148 #line 1414 "parse.y"
6149  {
6150  /*%%%*/
6151  (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6152  /*%
6153  $$ = dispatch3(binary, $1, ripper_intern("or"), $3);
6154  %*/
6155  }
6156  break;
6157 
6158  case 52:
6159 
6160 /* Line 1806 of yacc.c */
6161 #line 1422 "parse.y"
6162  {
6163  /*%%%*/
6164  (yyval.node) = call_uni_op(method_cond((yyvsp[(3) - (3)].node)), '!');
6165  /*%
6166  $$ = dispatch2(unary, ripper_intern("not"), $3);
6167  %*/
6168  }
6169  break;
6170 
6171  case 53:
6172 
6173 /* Line 1806 of yacc.c */
6174 #line 1430 "parse.y"
6175  {
6176  /*%%%*/
6177  (yyval.node) = call_uni_op(method_cond((yyvsp[(2) - (2)].node)), '!');
6178  /*%
6179  $$ = dispatch2(unary, ripper_id2sym('!'), $2);
6180  %*/
6181  }
6182  break;
6183 
6184  case 55:
6185 
6186 /* Line 1806 of yacc.c */
6187 #line 1441 "parse.y"
6188  {
6189  /*%%%*/
6190  value_expr((yyvsp[(1) - (1)].node));
6191  (yyval.node) = (yyvsp[(1) - (1)].node);
6192  if (!(yyval.node)) (yyval.node) = NEW_NIL();
6193  /*%
6194  $$ = $1;
6195  %*/
6196  }
6197  break;
6198 
6199  case 59:
6200 
6201 /* Line 1806 of yacc.c */
6202 #line 1458 "parse.y"
6203  {
6204  /*%%%*/
6205  (yyval.node) = NEW_QCALL((yyvsp[(2) - (4)].id), (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
6206  /*%
6207  $$ = dispatch3(call, $1, $2, $3);
6208  $$ = method_arg($$, $4);
6209  %*/
6210  }
6211  break;
6212 
6213  case 60:
6214 
6215 /* Line 1806 of yacc.c */
6216 #line 1469 "parse.y"
6217  {
6218  /*%%%*/
6219  (yyval.num) = ruby_sourceline;
6220  /*%
6221  %*/
6222  }
6223  break;
6224 
6225  case 61:
6226 
6227 /* Line 1806 of yacc.c */
6228 #line 1476 "parse.y"
6229  {
6230  (yyval.node) = (yyvsp[(3) - (4)].node);
6231  /*%%%*/
6232  nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
6233  /*% %*/
6234  }
6235  break;
6236 
6237  case 62:
6238 
6239 /* Line 1806 of yacc.c */
6240 #line 1485 "parse.y"
6241  {
6242  /*%%%*/
6243  (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
6244  nd_set_line((yyval.node), tokline);
6245  /*%
6246  %*/
6247  }
6248  break;
6249 
6250  case 63:
6251 
6252 /* Line 1806 of yacc.c */
6253 #line 1495 "parse.y"
6254  {
6255  /*%%%*/
6256  (yyval.node) = (yyvsp[(1) - (2)].node);
6257  (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
6258  /*%
6259  $$ = dispatch2(command, $1, $2);
6260  %*/
6261  }
6262  break;
6263 
6264  case 64:
6265 
6266 /* Line 1806 of yacc.c */
6267 #line 1504 "parse.y"
6268  {
6269  /*%%%*/
6270  block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
6271  (yyvsp[(1) - (3)].node)->nd_args = (yyvsp[(2) - (3)].node);
6272  (yyvsp[(3) - (3)].node)->nd_iter = (yyvsp[(1) - (3)].node);
6273  (yyval.node) = (yyvsp[(3) - (3)].node);
6274  fixpos((yyval.node), (yyvsp[(1) - (3)].node));
6275  /*%
6276  $$ = dispatch2(command, $1, $2);
6277  $$ = method_add_block($$, $3);
6278  %*/
6279  }
6280  break;
6281 
6282  case 65:
6283 
6284 /* Line 1806 of yacc.c */
6285 #line 1517 "parse.y"
6286  {
6287  /*%%%*/
6288  (yyval.node) = NEW_QCALL((yyvsp[(2) - (4)].id), (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
6289  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
6290  /*%
6291  $$ = dispatch4(command_call, $1, $2, $3, $4);
6292  %*/
6293  }
6294  break;
6295 
6296  case 66:
6297 
6298 /* Line 1806 of yacc.c */
6299 #line 1526 "parse.y"
6300  {
6301  /*%%%*/
6302  block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
6303  (yyvsp[(5) - (5)].node)->nd_iter = NEW_QCALL((yyvsp[(2) - (5)].id), (yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
6304  (yyval.node) = (yyvsp[(5) - (5)].node);
6305  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
6306  /*%
6307  $$ = dispatch4(command_call, $1, $2, $3, $4);
6308  $$ = method_add_block($$, $5);
6309  %*/
6310  }
6311  break;
6312 
6313  case 67:
6314 
6315 /* Line 1806 of yacc.c */
6316 #line 1538 "parse.y"
6317  {
6318  /*%%%*/
6319  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
6320  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
6321  /*%
6322  $$ = dispatch4(command_call, $1, ID2SYM(idCOLON2), $3, $4);
6323  %*/
6324  }
6325  break;
6326 
6327  case 68:
6328 
6329 /* Line 1806 of yacc.c */
6330 #line 1547 "parse.y"
6331  {
6332  /*%%%*/
6333  block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
6334  (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
6335  (yyval.node) = (yyvsp[(5) - (5)].node);
6336  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
6337  /*%
6338  $$ = dispatch4(command_call, $1, ID2SYM(idCOLON2), $3, $4);
6339  $$ = method_add_block($$, $5);
6340  %*/
6341  }
6342  break;
6343 
6344  case 69:
6345 
6346 /* Line 1806 of yacc.c */
6347 #line 1559 "parse.y"
6348  {
6349  /*%%%*/
6350  (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
6351  fixpos((yyval.node), (yyvsp[(2) - (2)].node));
6352  /*%
6353  $$ = dispatch1(super, $2);
6354  %*/
6355  }
6356  break;
6357 
6358  case 70:
6359 
6360 /* Line 1806 of yacc.c */
6361 #line 1568 "parse.y"
6362  {
6363  /*%%%*/
6364  (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
6365  fixpos((yyval.node), (yyvsp[(2) - (2)].node));
6366  /*%
6367  $$ = dispatch1(yield, $2);
6368  %*/
6369  }
6370  break;
6371 
6372  case 71:
6373 
6374 /* Line 1806 of yacc.c */
6375 #line 1577 "parse.y"
6376  {
6377  /*%%%*/
6378  (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
6379  /*%
6380  $$ = dispatch1(return, $2);
6381  %*/
6382  }
6383  break;
6384 
6385  case 72:
6386 
6387 /* Line 1806 of yacc.c */
6388 #line 1585 "parse.y"
6389  {
6390  /*%%%*/
6391  (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
6392  /*%
6393  $$ = dispatch1(break, $2);
6394  %*/
6395  }
6396  break;
6397 
6398  case 73:
6399 
6400 /* Line 1806 of yacc.c */
6401 #line 1593 "parse.y"
6402  {
6403  /*%%%*/
6404  (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
6405  /*%
6406  $$ = dispatch1(next, $2);
6407  %*/
6408  }
6409  break;
6410 
6411  case 75:
6412 
6413 /* Line 1806 of yacc.c */
6414 #line 1604 "parse.y"
6415  {
6416  /*%%%*/
6417  (yyval.node) = (yyvsp[(2) - (3)].node);
6418  /*%
6419  $$ = dispatch1(mlhs_paren, $2);
6420  %*/
6421  }
6422  break;
6423 
6424  case 77:
6425 
6426 /* Line 1806 of yacc.c */
6427 #line 1615 "parse.y"
6428  {
6429  /*%%%*/
6430  (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
6431  /*%
6432  $$ = dispatch1(mlhs_paren, $2);
6433  %*/
6434  }
6435  break;
6436 
6437  case 78:
6438 
6439 /* Line 1806 of yacc.c */
6440 #line 1625 "parse.y"
6441  {
6442  /*%%%*/
6443  (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
6444  /*%
6445  $$ = $1;
6446  %*/
6447  }
6448  break;
6449 
6450  case 79:
6451 
6452 /* Line 1806 of yacc.c */
6453 #line 1633 "parse.y"
6454  {
6455  /*%%%*/
6456  (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
6457  /*%
6458  $$ = mlhs_add($1, $2);
6459  %*/
6460  }
6461  break;
6462 
6463  case 80:
6464 
6465 /* Line 1806 of yacc.c */
6466 #line 1641 "parse.y"
6467  {
6468  /*%%%*/
6469  (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6470  /*%
6471  $$ = mlhs_add_star($1, $3);
6472  %*/
6473  }
6474  break;
6475 
6476  case 81:
6477 
6478 /* Line 1806 of yacc.c */
6479 #line 1649 "parse.y"
6480  {
6481  /*%%%*/
6482  (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
6483  /*%
6484  $1 = mlhs_add_star($1, $3);
6485  $$ = mlhs_add($1, $5);
6486  %*/
6487  }
6488  break;
6489 
6490  case 82:
6491 
6492 /* Line 1806 of yacc.c */
6493 #line 1658 "parse.y"
6494  {
6495  /*%%%*/
6496  (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
6497  /*%
6498  $$ = mlhs_add_star($1, Qnil);
6499  %*/
6500  }
6501  break;
6502 
6503  case 83:
6504 
6505 /* Line 1806 of yacc.c */
6506 #line 1666 "parse.y"
6507  {
6508  /*%%%*/
6509  (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
6510  /*%
6511  $1 = mlhs_add_star($1, Qnil);
6512  $$ = mlhs_add($1, $4);
6513  %*/
6514  }
6515  break;
6516 
6517  case 84:
6518 
6519 /* Line 1806 of yacc.c */
6520 #line 1675 "parse.y"
6521  {
6522  /*%%%*/
6523  (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
6524  /*%
6525  $$ = mlhs_add_star(mlhs_new(), $2);
6526  %*/
6527  }
6528  break;
6529 
6530  case 85:
6531 
6532 /* Line 1806 of yacc.c */
6533 #line 1683 "parse.y"
6534  {
6535  /*%%%*/
6536  (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
6537  /*%
6538  $2 = mlhs_add_star(mlhs_new(), $2);
6539  $$ = mlhs_add($2, $4);
6540  %*/
6541  }
6542  break;
6543 
6544  case 86:
6545 
6546 /* Line 1806 of yacc.c */
6547 #line 1692 "parse.y"
6548  {
6549  /*%%%*/
6550  (yyval.node) = NEW_MASGN(0, -1);
6551  /*%
6552  $$ = mlhs_add_star(mlhs_new(), Qnil);
6553  %*/
6554  }
6555  break;
6556 
6557  case 87:
6558 
6559 /* Line 1806 of yacc.c */
6560 #line 1700 "parse.y"
6561  {
6562  /*%%%*/
6563  (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
6564  /*%
6565  $$ = mlhs_add_star(mlhs_new(), Qnil);
6566  $$ = mlhs_add($$, $3);
6567  %*/
6568  }
6569  break;
6570 
6571  case 89:
6572 
6573 /* Line 1806 of yacc.c */
6574 #line 1712 "parse.y"
6575  {
6576  /*%%%*/
6577  (yyval.node) = (yyvsp[(2) - (3)].node);
6578  /*%
6579  $$ = dispatch1(mlhs_paren, $2);
6580  %*/
6581  }
6582  break;
6583 
6584  case 90:
6585 
6586 /* Line 1806 of yacc.c */
6587 #line 1722 "parse.y"
6588  {
6589  /*%%%*/
6590  (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
6591  /*%
6592  $$ = mlhs_add(mlhs_new(), $1);
6593  %*/
6594  }
6595  break;
6596 
6597  case 91:
6598 
6599 /* Line 1806 of yacc.c */
6600 #line 1730 "parse.y"
6601  {
6602  /*%%%*/
6603  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
6604  /*%
6605  $$ = mlhs_add($1, $2);
6606  %*/
6607  }
6608  break;
6609 
6610  case 92:
6611 
6612 /* Line 1806 of yacc.c */
6613 #line 1740 "parse.y"
6614  {
6615  /*%%%*/
6616  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
6617  /*%
6618  $$ = mlhs_add(mlhs_new(), $1);
6619  %*/
6620  }
6621  break;
6622 
6623  case 93:
6624 
6625 /* Line 1806 of yacc.c */
6626 #line 1748 "parse.y"
6627  {
6628  /*%%%*/
6629  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
6630  /*%
6631  $$ = mlhs_add($1, $3);
6632  %*/
6633  }
6634  break;
6635 
6636  case 94:
6637 
6638 /* Line 1806 of yacc.c */
6639 #line 1758 "parse.y"
6640  {
6641  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6642  }
6643  break;
6644 
6645  case 95:
6646 
6647 /* Line 1806 of yacc.c */
6648 #line 1762 "parse.y"
6649  {
6650  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6651  }
6652  break;
6653 
6654  case 96:
6655 
6656 /* Line 1806 of yacc.c */
6657 #line 1766 "parse.y"
6658  {
6659  /*%%%*/
6660  (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
6661  /*%
6662  $$ = dispatch2(aref_field, $1, escape_Qundef($3));
6663  %*/
6664  }
6665  break;
6666 
6667  case 97:
6668 
6669 /* Line 1806 of yacc.c */
6670 #line 1774 "parse.y"
6671  {
6672  /*%%%*/
6673  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
6674  /*%
6675  $$ = dispatch3(field, $1, $2, $3);
6676  %*/
6677  }
6678  break;
6679 
6680  case 98:
6681 
6682 /* Line 1806 of yacc.c */
6683 #line 1782 "parse.y"
6684  {
6685  /*%%%*/
6686  (yyval.node) = attrset((yyvsp[(1) - (3)].node), idCOLON2, (yyvsp[(3) - (3)].id));
6687  /*%
6688  $$ = dispatch2(const_path_field, $1, $3);
6689  %*/
6690  }
6691  break;
6692 
6693  case 99:
6694 
6695 /* Line 1806 of yacc.c */
6696 #line 1790 "parse.y"
6697  {
6698  /*%%%*/
6699  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
6700  /*%
6701  $$ = dispatch3(field, $1, $2, $3);
6702  %*/
6703  }
6704  break;
6705 
6706  case 100:
6707 
6708 /* Line 1806 of yacc.c */
6709 #line 1798 "parse.y"
6710  {
6711  (yyval.node) = const_decl(const_path_field((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
6712  }
6713  break;
6714 
6715  case 101:
6716 
6717 /* Line 1806 of yacc.c */
6718 #line 1802 "parse.y"
6719  {
6720  (yyval.node) = const_decl(top_const_field((yyvsp[(2) - (2)].id)));
6721  }
6722  break;
6723 
6724  case 102:
6725 
6726 /* Line 1806 of yacc.c */
6727 #line 1806 "parse.y"
6728  {
6729  (yyvsp[(1) - (1)].node) = var_field((yyvsp[(1) - (1)].node));
6730  (yyval.node) = backref_assign_error((yyvsp[(1) - (1)].node), (yyvsp[(1) - (1)].node));
6731  }
6732  break;
6733 
6734  case 103:
6735 
6736 /* Line 1806 of yacc.c */
6737 #line 1813 "parse.y"
6738  {
6739  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6740  /*%%%*/
6741  if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
6742  /*%
6743  $$ = dispatch1(var_field, $$);
6744  %*/
6745  }
6746  break;
6747 
6748  case 104:
6749 
6750 /* Line 1806 of yacc.c */
6751 #line 1822 "parse.y"
6752  {
6753  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
6754  /*%%%*/
6755  if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
6756  /*%
6757  $$ = dispatch1(var_field, $$);
6758  %*/
6759  }
6760  break;
6761 
6762  case 105:
6763 
6764 /* Line 1806 of yacc.c */
6765 #line 1831 "parse.y"
6766  {
6767  /*%%%*/
6768  (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
6769  /*%
6770  $$ = dispatch2(aref_field, $1, escape_Qundef($3));
6771  %*/
6772  }
6773  break;
6774 
6775  case 106:
6776 
6777 /* Line 1806 of yacc.c */
6778 #line 1839 "parse.y"
6779  {
6780  /*%%%*/
6781  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
6782  /*%
6783  $$ = dispatch3(field, $1, $2, $3);
6784  %*/
6785  }
6786  break;
6787 
6788  case 107:
6789 
6790 /* Line 1806 of yacc.c */
6791 #line 1847 "parse.y"
6792  {
6793  /*%%%*/
6794  (yyval.node) = attrset((yyvsp[(1) - (3)].node), idCOLON2, (yyvsp[(3) - (3)].id));
6795  /*%
6796  $$ = dispatch3(field, $1, ID2SYM(idCOLON2), $3);
6797  %*/
6798  }
6799  break;
6800 
6801  case 108:
6802 
6803 /* Line 1806 of yacc.c */
6804 #line 1855 "parse.y"
6805  {
6806  /*%%%*/
6807  (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
6808  /*%
6809  $$ = dispatch3(field, $1, $2, $3);
6810  %*/
6811  }
6812  break;
6813 
6814  case 109:
6815 
6816 /* Line 1806 of yacc.c */
6817 #line 1863 "parse.y"
6818  {
6819  (yyval.node) = const_decl(const_path_field((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
6820  }
6821  break;
6822 
6823  case 110:
6824 
6825 /* Line 1806 of yacc.c */
6826 #line 1867 "parse.y"
6827  {
6828  (yyval.node) = const_decl(top_const_field((yyvsp[(2) - (2)].id)));
6829  }
6830  break;
6831 
6832  case 111:
6833 
6834 /* Line 1806 of yacc.c */
6835 #line 1871 "parse.y"
6836  {
6837  (yyvsp[(1) - (1)].node) = var_field((yyvsp[(1) - (1)].node));
6838  (yyval.node) = backref_assign_error((yyvsp[(1) - (1)].node), (yyvsp[(1) - (1)].node));
6839  }
6840  break;
6841 
6842  case 112:
6843 
6844 /* Line 1806 of yacc.c */
6845 #line 1878 "parse.y"
6846  {
6847  /*%%%*/
6848  yyerror("class/module name must be CONSTANT");
6849  /*%
6850  $$ = dispatch1(class_name_error, $1);
6851  ripper_error();
6852  %*/
6853  }
6854  break;
6855 
6856  case 114:
6857 
6858 /* Line 1806 of yacc.c */
6859 #line 1890 "parse.y"
6860  {
6861  /*%%%*/
6862  (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
6863  /*%
6864  $$ = dispatch1(top_const_ref, $2);
6865  %*/
6866  }
6867  break;
6868 
6869  case 115:
6870 
6871 /* Line 1806 of yacc.c */
6872 #line 1898 "parse.y"
6873  {
6874  /*%%%*/
6875  (yyval.node) = NEW_COLON2(0, (yyval.node));
6876  /*%
6877  $$ = dispatch1(const_ref, $1);
6878  %*/
6879  }
6880  break;
6881 
6882  case 116:
6883 
6884 /* Line 1806 of yacc.c */
6885 #line 1906 "parse.y"
6886  {
6887  /*%%%*/
6888  (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
6889  /*%
6890  $$ = dispatch2(const_path_ref, $1, $3);
6891  %*/
6892  }
6893  break;
6894 
6895  case 120:
6896 
6897 /* Line 1806 of yacc.c */
6898 #line 1919 "parse.y"
6899  {
6900  SET_LEX_STATE(EXPR_ENDFN);
6901  (yyval.id) = (yyvsp[(1) - (1)].id);
6902  }
6903  break;
6904 
6905  case 121:
6906 
6907 /* Line 1806 of yacc.c */
6908 #line 1924 "parse.y"
6909  {
6910  SET_LEX_STATE(EXPR_ENDFN);
6911  /*%%%*/
6912  (yyval.id) = (yyvsp[(1) - (1)].id);
6913  /*%
6914  $$ = $1;
6915  %*/
6916  }
6917  break;
6918 
6919  case 124:
6920 
6921 /* Line 1806 of yacc.c */
6922 #line 1939 "parse.y"
6923  {
6924  /*%%%*/
6925  (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
6926  /*%
6927  $$ = dispatch1(symbol_literal, $1);
6928  %*/
6929  }
6930  break;
6931 
6932  case 126:
6933 
6934 /* Line 1806 of yacc.c */
6935 #line 1950 "parse.y"
6936  {
6937  /*%%%*/
6938  (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
6939  /*%
6940  $$ = rb_ary_new3(1, $1);
6941  %*/
6942  }
6943  break;
6944 
6945  case 127:
6946 
6947 /* Line 1806 of yacc.c */
6948 #line 1957 "parse.y"
6949  {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);}
6950  break;
6951 
6952  case 128:
6953 
6954 /* Line 1806 of yacc.c */
6955 #line 1958 "parse.y"
6956  {
6957  /*%%%*/
6958  (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
6959  /*%
6960  rb_ary_push($1, $4);
6961  %*/
6962  }
6963  break;
6964 
6965  case 129:
6966 
6967 /* Line 1806 of yacc.c */
6968 #line 1967 "parse.y"
6969  { ifndef_ripper((yyval.id) = '|'); }
6970  break;
6971 
6972  case 130:
6973 
6974 /* Line 1806 of yacc.c */
6975 #line 1968 "parse.y"
6976  { ifndef_ripper((yyval.id) = '^'); }
6977  break;
6978 
6979  case 131:
6980 
6981 /* Line 1806 of yacc.c */
6982 #line 1969 "parse.y"
6983  { ifndef_ripper((yyval.id) = '&'); }
6984  break;
6985 
6986  case 132:
6987 
6988 /* Line 1806 of yacc.c */
6989 #line 1970 "parse.y"
6990  { ifndef_ripper((yyval.id) = tCMP); }
6991  break;
6992 
6993  case 133:
6994 
6995 /* Line 1806 of yacc.c */
6996 #line 1971 "parse.y"
6997  { ifndef_ripper((yyval.id) = tEQ); }
6998  break;
6999 
7000  case 134:
7001 
7002 /* Line 1806 of yacc.c */
7003 #line 1972 "parse.y"
7004  { ifndef_ripper((yyval.id) = tEQQ); }
7005  break;
7006 
7007  case 135:
7008 
7009 /* Line 1806 of yacc.c */
7010 #line 1973 "parse.y"
7011  { ifndef_ripper((yyval.id) = tMATCH); }
7012  break;
7013 
7014  case 136:
7015 
7016 /* Line 1806 of yacc.c */
7017 #line 1974 "parse.y"
7018  { ifndef_ripper((yyval.id) = tNMATCH); }
7019  break;
7020 
7021  case 137:
7022 
7023 /* Line 1806 of yacc.c */
7024 #line 1975 "parse.y"
7025  { ifndef_ripper((yyval.id) = '>'); }
7026  break;
7027 
7028  case 138:
7029 
7030 /* Line 1806 of yacc.c */
7031 #line 1976 "parse.y"
7032  { ifndef_ripper((yyval.id) = tGEQ); }
7033  break;
7034 
7035  case 139:
7036 
7037 /* Line 1806 of yacc.c */
7038 #line 1977 "parse.y"
7039  { ifndef_ripper((yyval.id) = '<'); }
7040  break;
7041 
7042  case 140:
7043 
7044 /* Line 1806 of yacc.c */
7045 #line 1978 "parse.y"
7046  { ifndef_ripper((yyval.id) = tLEQ); }
7047  break;
7048 
7049  case 141:
7050 
7051 /* Line 1806 of yacc.c */
7052 #line 1979 "parse.y"
7053  { ifndef_ripper((yyval.id) = tNEQ); }
7054  break;
7055 
7056  case 142:
7057 
7058 /* Line 1806 of yacc.c */
7059 #line 1980 "parse.y"
7060  { ifndef_ripper((yyval.id) = tLSHFT); }
7061  break;
7062 
7063  case 143:
7064 
7065 /* Line 1806 of yacc.c */
7066 #line 1981 "parse.y"
7067  { ifndef_ripper((yyval.id) = tRSHFT); }
7068  break;
7069 
7070  case 144:
7071 
7072 /* Line 1806 of yacc.c */
7073 #line 1982 "parse.y"
7074  { ifndef_ripper((yyval.id) = '+'); }
7075  break;
7076 
7077  case 145:
7078 
7079 /* Line 1806 of yacc.c */
7080 #line 1983 "parse.y"
7081  { ifndef_ripper((yyval.id) = '-'); }
7082  break;
7083 
7084  case 146:
7085 
7086 /* Line 1806 of yacc.c */
7087 #line 1984 "parse.y"
7088  { ifndef_ripper((yyval.id) = '*'); }
7089  break;
7090 
7091  case 147:
7092 
7093 /* Line 1806 of yacc.c */
7094 #line 1985 "parse.y"
7095  { ifndef_ripper((yyval.id) = '*'); }
7096  break;
7097 
7098  case 148:
7099 
7100 /* Line 1806 of yacc.c */
7101 #line 1986 "parse.y"
7102  { ifndef_ripper((yyval.id) = '/'); }
7103  break;
7104 
7105  case 149:
7106 
7107 /* Line 1806 of yacc.c */
7108 #line 1987 "parse.y"
7109  { ifndef_ripper((yyval.id) = '%'); }
7110  break;
7111 
7112  case 150:
7113 
7114 /* Line 1806 of yacc.c */
7115 #line 1988 "parse.y"
7116  { ifndef_ripper((yyval.id) = tPOW); }
7117  break;
7118 
7119  case 151:
7120 
7121 /* Line 1806 of yacc.c */
7122 #line 1989 "parse.y"
7123  { ifndef_ripper((yyval.id) = tDSTAR); }
7124  break;
7125 
7126  case 152:
7127 
7128 /* Line 1806 of yacc.c */
7129 #line 1990 "parse.y"
7130  { ifndef_ripper((yyval.id) = '!'); }
7131  break;
7132 
7133  case 153:
7134 
7135 /* Line 1806 of yacc.c */
7136 #line 1991 "parse.y"
7137  { ifndef_ripper((yyval.id) = '~'); }
7138  break;
7139 
7140  case 154:
7141 
7142 /* Line 1806 of yacc.c */
7143 #line 1992 "parse.y"
7144  { ifndef_ripper((yyval.id) = tUPLUS); }
7145  break;
7146 
7147  case 155:
7148 
7149 /* Line 1806 of yacc.c */
7150 #line 1993 "parse.y"
7151  { ifndef_ripper((yyval.id) = tUMINUS); }
7152  break;
7153 
7154  case 156:
7155 
7156 /* Line 1806 of yacc.c */
7157 #line 1994 "parse.y"
7158  { ifndef_ripper((yyval.id) = tAREF); }
7159  break;
7160 
7161  case 157:
7162 
7163 /* Line 1806 of yacc.c */
7164 #line 1995 "parse.y"
7165  { ifndef_ripper((yyval.id) = tASET); }
7166  break;
7167 
7168  case 158:
7169 
7170 /* Line 1806 of yacc.c */
7171 #line 1996 "parse.y"
7172  { ifndef_ripper((yyval.id) = '`'); }
7173  break;
7174 
7175  case 200:
7176 
7177 /* Line 1806 of yacc.c */
7178 #line 2014 "parse.y"
7179  {
7180  (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7181  }
7182  break;
7183 
7184  case 201:
7185 
7186 /* Line 1806 of yacc.c */
7187 #line 2018 "parse.y"
7188  {
7189  (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
7190  }
7191  break;
7192 
7193  case 202:
7194 
7195 /* Line 1806 of yacc.c */
7196 #line 2022 "parse.y"
7197  {
7198  /*%%%*/
7199  NODE *args;
7200 
7201  value_expr((yyvsp[(6) - (6)].node));
7202  if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
7203  if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
7204  args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
7205  }
7206  else {
7207  args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
7208  }
7209  if ((yyvsp[(5) - (6)].id) == tOROP) {
7210  (yyvsp[(5) - (6)].id) = 0;
7211  }
7212  else if ((yyvsp[(5) - (6)].id) == tANDOP) {
7213  (yyvsp[(5) - (6)].id) = 1;
7214  }
7215  (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
7216  fixpos((yyval.node), (yyvsp[(1) - (6)].node));
7217  /*%
7218  $1 = dispatch2(aref_field, $1, escape_Qundef($3));
7219  $$ = dispatch3(opassign, $1, $5, $6);
7220  %*/
7221  }
7222  break;
7223 
7224  case 203:
7225 
7226 /* Line 1806 of yacc.c */
7227 #line 2048 "parse.y"
7228  {
7229  value_expr((yyvsp[(5) - (5)].node));
7230  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), (yyvsp[(2) - (5)].id), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
7231  }
7232  break;
7233 
7234  case 204:
7235 
7236 /* Line 1806 of yacc.c */
7237 #line 2053 "parse.y"
7238  {
7239  value_expr((yyvsp[(5) - (5)].node));
7240  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), (yyvsp[(2) - (5)].id), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
7241  }
7242  break;
7243 
7244  case 205:
7245 
7246 /* Line 1806 of yacc.c */
7247 #line 2058 "parse.y"
7248  {
7249  value_expr((yyvsp[(5) - (5)].node));
7250  (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym(idCOLON2), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
7251  }
7252  break;
7253 
7254  case 206:
7255 
7256 /* Line 1806 of yacc.c */
7257 #line 2063 "parse.y"
7258  {
7259  (yyval.node) = const_path_field((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
7260  (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
7261  }
7262  break;
7263 
7264  case 207:
7265 
7266 /* Line 1806 of yacc.c */
7267 #line 2068 "parse.y"
7268  {
7269  (yyval.node) = top_const_field((yyvsp[(2) - (4)].id));
7270  (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
7271  }
7272  break;
7273 
7274  case 208:
7275 
7276 /* Line 1806 of yacc.c */
7277 #line 2073 "parse.y"
7278  {
7279  (yyvsp[(1) - (3)].node) = var_field((yyvsp[(1) - (3)].node));
7280  (yyval.node) = backref_assign_error((yyvsp[(1) - (3)].node), new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node)));
7281  }
7282  break;
7283 
7284  case 209:
7285 
7286 /* Line 1806 of yacc.c */
7287 #line 2078 "parse.y"
7288  {
7289  /*%%%*/
7290  value_expr((yyvsp[(1) - (3)].node));
7291  value_expr((yyvsp[(3) - (3)].node));
7292  (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7293  /*%
7294  $$ = dispatch2(dot2, $1, $3);
7295  %*/
7296  }
7297  break;
7298 
7299  case 210:
7300 
7301 /* Line 1806 of yacc.c */
7302 #line 2088 "parse.y"
7303  {
7304  /*%%%*/
7305  value_expr((yyvsp[(1) - (3)].node));
7306  value_expr((yyvsp[(3) - (3)].node));
7307  (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7308  /*%
7309  $$ = dispatch2(dot3, $1, $3);
7310  %*/
7311  }
7312  break;
7313 
7314  case 211:
7315 
7316 /* Line 1806 of yacc.c */
7317 #line 2098 "parse.y"
7318  {
7319  /*%%%*/
7320  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
7321  /*%
7322  $$ = dispatch3(binary, $1, ID2SYM('+'), $3);
7323  %*/
7324  }
7325  break;
7326 
7327  case 212:
7328 
7329 /* Line 1806 of yacc.c */
7330 #line 2106 "parse.y"
7331  {
7332  /*%%%*/
7333  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
7334  /*%
7335  $$ = dispatch3(binary, $1, ID2SYM('-'), $3);
7336  %*/
7337  }
7338  break;
7339 
7340  case 213:
7341 
7342 /* Line 1806 of yacc.c */
7343 #line 2114 "parse.y"
7344  {
7345  /*%%%*/
7346  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
7347  /*%
7348  $$ = dispatch3(binary, $1, ID2SYM('*'), $3);
7349  %*/
7350  }
7351  break;
7352 
7353  case 214:
7354 
7355 /* Line 1806 of yacc.c */
7356 #line 2122 "parse.y"
7357  {
7358  /*%%%*/
7359  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
7360  /*%
7361  $$ = dispatch3(binary, $1, ID2SYM('/'), $3);
7362  %*/
7363  }
7364  break;
7365 
7366  case 215:
7367 
7368 /* Line 1806 of yacc.c */
7369 #line 2130 "parse.y"
7370  {
7371  /*%%%*/
7372  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
7373  /*%
7374  $$ = dispatch3(binary, $1, ID2SYM('%'), $3);
7375  %*/
7376  }
7377  break;
7378 
7379  case 216:
7380 
7381 /* Line 1806 of yacc.c */
7382 #line 2138 "parse.y"
7383  {
7384  /*%%%*/
7385  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
7386  /*%
7387  $$ = dispatch3(binary, $1, ID2SYM(idPow), $3);
7388  %*/
7389  }
7390  break;
7391 
7392  case 217:
7393 
7394 /* Line 1806 of yacc.c */
7395 #line 2146 "parse.y"
7396  {
7397  /*%%%*/
7398  (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
7399  /*%
7400  $$ = dispatch3(binary, $2, ID2SYM(idPow), $4);
7401  $$ = dispatch2(unary, ID2SYM(idUMinus), $$);
7402  %*/
7403  }
7404  break;
7405 
7406  case 218:
7407 
7408 /* Line 1806 of yacc.c */
7409 #line 2155 "parse.y"
7410  {
7411  /*%%%*/
7412  (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
7413  /*%
7414  $$ = dispatch2(unary, ID2SYM(idUPlus), $2);
7415  %*/
7416  }
7417  break;
7418 
7419  case 219:
7420 
7421 /* Line 1806 of yacc.c */
7422 #line 2163 "parse.y"
7423  {
7424  /*%%%*/
7425  (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
7426  /*%
7427  $$ = dispatch2(unary, ID2SYM(idUMinus), $2);
7428  %*/
7429  }
7430  break;
7431 
7432  case 220:
7433 
7434 /* Line 1806 of yacc.c */
7435 #line 2171 "parse.y"
7436  {
7437  /*%%%*/
7438  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
7439  /*%
7440  $$ = dispatch3(binary, $1, ID2SYM('|'), $3);
7441  %*/
7442  }
7443  break;
7444 
7445  case 221:
7446 
7447 /* Line 1806 of yacc.c */
7448 #line 2179 "parse.y"
7449  {
7450  /*%%%*/
7451  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
7452  /*%
7453  $$ = dispatch3(binary, $1, ID2SYM('^'), $3);
7454  %*/
7455  }
7456  break;
7457 
7458  case 222:
7459 
7460 /* Line 1806 of yacc.c */
7461 #line 2187 "parse.y"
7462  {
7463  /*%%%*/
7464  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
7465  /*%
7466  $$ = dispatch3(binary, $1, ID2SYM('&'), $3);
7467  %*/
7468  }
7469  break;
7470 
7471  case 223:
7472 
7473 /* Line 1806 of yacc.c */
7474 #line 2195 "parse.y"
7475  {
7476  /*%%%*/
7477  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
7478  /*%
7479  $$ = dispatch3(binary, $1, ID2SYM(idCmp), $3);
7480  %*/
7481  }
7482  break;
7483 
7484  case 224:
7485 
7486 /* Line 1806 of yacc.c */
7487 #line 2203 "parse.y"
7488  {
7489  /*%%%*/
7490  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
7491  /*%
7492  $$ = dispatch3(binary, $1, ID2SYM('>'), $3);
7493  %*/
7494  }
7495  break;
7496 
7497  case 225:
7498 
7499 /* Line 1806 of yacc.c */
7500 #line 2211 "parse.y"
7501  {
7502  /*%%%*/
7503  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
7504  /*%
7505  $$ = dispatch3(binary, $1, ID2SYM(idGE), $3);
7506  %*/
7507  }
7508  break;
7509 
7510  case 226:
7511 
7512 /* Line 1806 of yacc.c */
7513 #line 2219 "parse.y"
7514  {
7515  /*%%%*/
7516  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
7517  /*%
7518  $$ = dispatch3(binary, $1, ID2SYM('<'), $3);
7519  %*/
7520  }
7521  break;
7522 
7523  case 227:
7524 
7525 /* Line 1806 of yacc.c */
7526 #line 2227 "parse.y"
7527  {
7528  /*%%%*/
7529  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
7530  /*%
7531  $$ = dispatch3(binary, $1, ID2SYM(idLE), $3);
7532  %*/
7533  }
7534  break;
7535 
7536  case 228:
7537 
7538 /* Line 1806 of yacc.c */
7539 #line 2235 "parse.y"
7540  {
7541  /*%%%*/
7542  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
7543  /*%
7544  $$ = dispatch3(binary, $1, ID2SYM(idEq), $3);
7545  %*/
7546  }
7547  break;
7548 
7549  case 229:
7550 
7551 /* Line 1806 of yacc.c */
7552 #line 2243 "parse.y"
7553  {
7554  /*%%%*/
7555  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
7556  /*%
7557  $$ = dispatch3(binary, $1, ID2SYM(idEqq), $3);
7558  %*/
7559  }
7560  break;
7561 
7562  case 230:
7563 
7564 /* Line 1806 of yacc.c */
7565 #line 2251 "parse.y"
7566  {
7567  /*%%%*/
7568  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
7569  /*%
7570  $$ = dispatch3(binary, $1, ID2SYM(idNeq), $3);
7571  %*/
7572  }
7573  break;
7574 
7575  case 231:
7576 
7577 /* Line 1806 of yacc.c */
7578 #line 2259 "parse.y"
7579  {
7580  /*%%%*/
7581  (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7582  if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT) {
7583  VALUE lit = (yyvsp[(1) - (3)].node)->nd_lit;
7584  if (RB_TYPE_P(lit, T_REGEXP)) {
7585  (yyval.node)->nd_args = reg_named_capture_assign(lit);
7586  }
7587  }
7588  /*%
7589  $$ = dispatch3(binary, $1, ID2SYM(idEqTilde), $3);
7590  %*/
7591  }
7592  break;
7593 
7594  case 232:
7595 
7596 /* Line 1806 of yacc.c */
7597 #line 2273 "parse.y"
7598  {
7599  /*%%%*/
7600  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
7601  /*%
7602  $$ = dispatch3(binary, $1, ID2SYM(idNeqTilde), $3);
7603  %*/
7604  }
7605  break;
7606 
7607  case 233:
7608 
7609 /* Line 1806 of yacc.c */
7610 #line 2281 "parse.y"
7611  {
7612  /*%%%*/
7613  (yyval.node) = call_uni_op(method_cond((yyvsp[(2) - (2)].node)), '!');
7614  /*%
7615  $$ = dispatch2(unary, ID2SYM('!'), $2);
7616  %*/
7617  }
7618  break;
7619 
7620  case 234:
7621 
7622 /* Line 1806 of yacc.c */
7623 #line 2289 "parse.y"
7624  {
7625  /*%%%*/
7626  (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
7627  /*%
7628  $$ = dispatch2(unary, ID2SYM('~'), $2);
7629  %*/
7630  }
7631  break;
7632 
7633  case 235:
7634 
7635 /* Line 1806 of yacc.c */
7636 #line 2297 "parse.y"
7637  {
7638  /*%%%*/
7639  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
7640  /*%
7641  $$ = dispatch3(binary, $1, ID2SYM(idLTLT), $3);
7642  %*/
7643  }
7644  break;
7645 
7646  case 236:
7647 
7648 /* Line 1806 of yacc.c */
7649 #line 2305 "parse.y"
7650  {
7651  /*%%%*/
7652  (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
7653  /*%
7654  $$ = dispatch3(binary, $1, ID2SYM(idGTGT), $3);
7655  %*/
7656  }
7657  break;
7658 
7659  case 237:
7660 
7661 /* Line 1806 of yacc.c */
7662 #line 2313 "parse.y"
7663  {
7664  /*%%%*/
7665  (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7666  /*%
7667  $$ = dispatch3(binary, $1, ID2SYM(idANDOP), $3);
7668  %*/
7669  }
7670  break;
7671 
7672  case 238:
7673 
7674 /* Line 1806 of yacc.c */
7675 #line 2321 "parse.y"
7676  {
7677  /*%%%*/
7678  (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
7679  /*%
7680  $$ = dispatch3(binary, $1, ID2SYM(idOROP), $3);
7681  %*/
7682  }
7683  break;
7684 
7685  case 239:
7686 
7687 /* Line 1806 of yacc.c */
7688 #line 2328 "parse.y"
7689  {in_defined = 1;}
7690  break;
7691 
7692  case 240:
7693 
7694 /* Line 1806 of yacc.c */
7695 #line 2329 "parse.y"
7696  {
7697  in_defined = 0;
7698  /*%%%*/
7699  (yyval.node) = new_defined((yyvsp[(4) - (4)].node));
7700  /*%
7701  $$ = dispatch1(defined, $4);
7702  %*/
7703  }
7704  break;
7705 
7706  case 241:
7707 
7708 /* Line 1806 of yacc.c */
7709 #line 2338 "parse.y"
7710  {
7711  /*%%%*/
7712  value_expr((yyvsp[(1) - (6)].node));
7713  (yyval.node) = new_if((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
7714  fixpos((yyval.node), (yyvsp[(1) - (6)].node));
7715  /*%
7716  $$ = dispatch3(ifop, $1, $3, $6);
7717  %*/
7718  }
7719  break;
7720 
7721  case 242:
7722 
7723 /* Line 1806 of yacc.c */
7724 #line 2348 "parse.y"
7725  {
7726  (yyval.node) = (yyvsp[(1) - (1)].node);
7727  }
7728  break;
7729 
7730  case 243:
7731 
7732 /* Line 1806 of yacc.c */
7733 #line 2354 "parse.y"
7734  {
7735  /*%%%*/
7736  value_expr((yyvsp[(1) - (1)].node));
7737  (yyval.node) = (yyvsp[(1) - (1)].node);
7738  if (!(yyval.node)) (yyval.node) = NEW_NIL();
7739  /*%
7740  $$ = $1;
7741  %*/
7742  }
7743  break;
7744 
7745  case 245:
7746 
7747 /* Line 1806 of yacc.c */
7748 #line 2367 "parse.y"
7749  {
7750  (yyval.node) = (yyvsp[(1) - (2)].node);
7751  }
7752  break;
7753 
7754  case 246:
7755 
7756 /* Line 1806 of yacc.c */
7757 #line 2371 "parse.y"
7758  {
7759  /*%%%*/
7760  (yyval.node) = (yyvsp[(3) - (4)].node) ? arg_append((yyvsp[(1) - (4)].node), new_hash((yyvsp[(3) - (4)].node))) : (yyvsp[(1) - (4)].node);
7761  /*%
7762  $$ = arg_add_assocs($1, $3);
7763  %*/
7764  }
7765  break;
7766 
7767  case 247:
7768 
7769 /* Line 1806 of yacc.c */
7770 #line 2379 "parse.y"
7771  {
7772  /*%%%*/
7773  (yyval.node) = (yyvsp[(1) - (2)].node) ? NEW_LIST(new_hash((yyvsp[(1) - (2)].node))) : 0;
7774  /*%
7775  $$ = arg_add_assocs(arg_new(), $1);
7776  %*/
7777  }
7778  break;
7779 
7780  case 248:
7781 
7782 /* Line 1806 of yacc.c */
7783 #line 2389 "parse.y"
7784  {
7785  /*%%%*/
7786  value_expr((yyvsp[(1) - (1)].node));
7787  (yyval.node) = (yyvsp[(1) - (1)].node);
7788  /*%
7789  %*/
7790  }
7791  break;
7792 
7793  case 249:
7794 
7795 /* Line 1806 of yacc.c */
7796 #line 2397 "parse.y"
7797  {
7798  /*%%%*/
7799  value_expr((yyvsp[(1) - (3)].node));
7800  (yyval.node) = NEW_RESCUE((yyvsp[(1) - (3)].node), NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0), 0);
7801  /*%
7802  $$ = dispatch2(rescue_mod, $1, $3);
7803  %*/
7804  }
7805  break;
7806 
7807  case 250:
7808 
7809 /* Line 1806 of yacc.c */
7810 #line 2408 "parse.y"
7811  {
7812  /*%%%*/
7813  (yyval.node) = (yyvsp[(2) - (3)].node);
7814  /*%
7815  $$ = dispatch1(arg_paren, escape_Qundef($2));
7816  %*/
7817  }
7818  break;
7819 
7820  case 255:
7821 
7822 /* Line 1806 of yacc.c */
7823 #line 2424 "parse.y"
7824  {
7825  (yyval.node) = (yyvsp[(1) - (2)].node);
7826  }
7827  break;
7828 
7829  case 256:
7830 
7831 /* Line 1806 of yacc.c */
7832 #line 2428 "parse.y"
7833  {
7834  /*%%%*/
7835  (yyval.node) = (yyvsp[(3) - (4)].node) ? arg_append((yyvsp[(1) - (4)].node), new_hash((yyvsp[(3) - (4)].node))) : (yyvsp[(1) - (4)].node);
7836  /*%
7837  $$ = arg_add_assocs($1, $3);
7838  %*/
7839  }
7840  break;
7841 
7842  case 257:
7843 
7844 /* Line 1806 of yacc.c */
7845 #line 2436 "parse.y"
7846  {
7847  /*%%%*/
7848  (yyval.node) = (yyvsp[(1) - (2)].node) ? NEW_LIST(new_hash((yyvsp[(1) - (2)].node))) : 0;
7849  /*%
7850  $$ = arg_add_assocs(arg_new(), $1);
7851  %*/
7852  }
7853  break;
7854 
7855  case 258:
7856 
7857 /* Line 1806 of yacc.c */
7858 #line 2446 "parse.y"
7859  {
7860  /*%%%*/
7861  value_expr((yyvsp[(1) - (1)].node));
7862  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
7863  /*%
7864  $$ = arg_add(arg_new(), $1);
7865  %*/
7866  }
7867  break;
7868 
7869  case 259:
7870 
7871 /* Line 1806 of yacc.c */
7872 #line 2455 "parse.y"
7873  {
7874  /*%%%*/
7875  (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
7876  /*%
7877  $$ = arg_add_optblock($1, $2);
7878  %*/
7879  }
7880  break;
7881 
7882  case 260:
7883 
7884 /* Line 1806 of yacc.c */
7885 #line 2463 "parse.y"
7886  {
7887  /*%%%*/
7888  (yyval.node) = (yyvsp[(1) - (2)].node) ? NEW_LIST(new_hash((yyvsp[(1) - (2)].node))) : 0;
7889  (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
7890  /*%
7891  $$ = arg_add_assocs(arg_new(), $1);
7892  $$ = arg_add_optblock($$, $2);
7893  %*/
7894  }
7895  break;
7896 
7897  case 261:
7898 
7899 /* Line 1806 of yacc.c */
7900 #line 2473 "parse.y"
7901  {
7902  /*%%%*/
7903  (yyval.node) = (yyvsp[(3) - (4)].node) ? arg_append((yyvsp[(1) - (4)].node), new_hash((yyvsp[(3) - (4)].node))) : (yyvsp[(1) - (4)].node);
7904  (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
7905  /*%
7906  $$ = arg_add_optblock(arg_add_assocs($1, $3), $4);
7907  %*/
7908  }
7909  break;
7910 
7911  case 263:
7912 
7913 /* Line 1806 of yacc.c */
7914 #line 2490 "parse.y"
7915  {
7916  (yyval.val) = cmdarg_stack;
7917  CMDARG_PUSH(1);
7918  }
7919  break;
7920 
7921  case 264:
7922 
7923 /* Line 1806 of yacc.c */
7924 #line 2495 "parse.y"
7925  {
7926  /* CMDARG_POP() */
7927  CMDARG_SET((yyvsp[(1) - (2)].val));
7928  (yyval.node) = (yyvsp[(2) - (2)].node);
7929  }
7930  break;
7931 
7932  case 265:
7933 
7934 /* Line 1806 of yacc.c */
7935 #line 2503 "parse.y"
7936  {
7937  /*%%%*/
7938  (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
7939  /*%
7940  $$ = $2;
7941  %*/
7942  }
7943  break;
7944 
7945  case 266:
7946 
7947 /* Line 1806 of yacc.c */
7948 #line 2513 "parse.y"
7949  {
7950  (yyval.node) = (yyvsp[(2) - (2)].node);
7951  }
7952  break;
7953 
7954  case 267:
7955 
7956 /* Line 1806 of yacc.c */
7957 #line 2517 "parse.y"
7958  {
7959  (yyval.node) = 0;
7960  }
7961  break;
7962 
7963  case 268:
7964 
7965 /* Line 1806 of yacc.c */
7966 #line 2523 "parse.y"
7967  {
7968  /*%%%*/
7969  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
7970  /*%
7971  $$ = arg_add(arg_new(), $1);
7972  %*/
7973  }
7974  break;
7975 
7976  case 269:
7977 
7978 /* Line 1806 of yacc.c */
7979 #line 2531 "parse.y"
7980  {
7981  /*%%%*/
7982  (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
7983  /*%
7984  $$ = arg_add_star(arg_new(), $2);
7985  %*/
7986  }
7987  break;
7988 
7989  case 270:
7990 
7991 /* Line 1806 of yacc.c */
7992 #line 2539 "parse.y"
7993  {
7994  /*%%%*/
7995  NODE *n1;
7996  if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
7997  (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
7998  }
7999  else {
8000  (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
8001  }
8002  /*%
8003  $$ = arg_add($1, $3);
8004  %*/
8005  }
8006  break;
8007 
8008  case 271:
8009 
8010 /* Line 1806 of yacc.c */
8011 #line 2553 "parse.y"
8012  {
8013  /*%%%*/
8014  NODE *n1;
8015  if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
8016  (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
8017  }
8018  else {
8019  (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
8020  }
8021  /*%
8022  $$ = arg_add_star($1, $4);
8023  %*/
8024  }
8025  break;
8026 
8027  case 274:
8028 
8029 /* Line 1806 of yacc.c */
8030 #line 2573 "parse.y"
8031  {
8032  /*%%%*/
8033  NODE *n1;
8034  if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
8035  (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
8036  }
8037  else {
8038  (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
8039  }
8040  /*%
8041  $$ = mrhs_add(args2mrhs($1), $3);
8042  %*/
8043  }
8044  break;
8045 
8046  case 275:
8047 
8048 /* Line 1806 of yacc.c */
8049 #line 2587 "parse.y"
8050  {
8051  /*%%%*/
8052  NODE *n1;
8053  if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
8054  (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
8055  (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
8056  }
8057  else {
8058  (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
8059  }
8060  /*%
8061  $$ = mrhs_add_star(args2mrhs($1), $4);
8062  %*/
8063  }
8064  break;
8065 
8066  case 276:
8067 
8068 /* Line 1806 of yacc.c */
8069 #line 2602 "parse.y"
8070  {
8071  /*%%%*/
8072  (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
8073  /*%
8074  $$ = mrhs_add_star(mrhs_new(), $2);
8075  %*/
8076  }
8077  break;
8078 
8079  case 287:
8080 
8081 /* Line 1806 of yacc.c */
8082 #line 2622 "parse.y"
8083  {
8084  /*%%%*/
8085  (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
8086  /*%
8087  $$ = method_arg(dispatch1(fcall, $1), arg_new());
8088  %*/
8089  }
8090  break;
8091 
8092  case 288:
8093 
8094 /* Line 1806 of yacc.c */
8095 #line 2630 "parse.y"
8096  {
8097  (yyvsp[(1) - (1)].val) = cmdarg_stack;
8098  CMDARG_SET(0);
8099  /*%%%*/
8100  (yyval.num) = ruby_sourceline;
8101  /*%
8102  %*/
8103  }
8104  break;
8105 
8106  case 289:
8107 
8108 /* Line 1806 of yacc.c */
8109 #line 2640 "parse.y"
8110  {
8111  CMDARG_SET((yyvsp[(1) - (4)].val));
8112  /*%%%*/
8113  if ((yyvsp[(3) - (4)].node) == NULL) {
8114  (yyval.node) = NEW_NIL();
8115  }
8116  else {
8117  if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
8118  nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
8119  nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
8120  (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
8121  }
8122  nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
8123  /*%
8124  $$ = dispatch1(begin, $3);
8125  %*/
8126  }
8127  break;
8128 
8129  case 290:
8130 
8131 /* Line 1806 of yacc.c */
8132 #line 2657 "parse.y"
8133  {SET_LEX_STATE(EXPR_ENDARG);}
8134  break;
8135 
8136  case 291:
8137 
8138 /* Line 1806 of yacc.c */
8139 #line 2658 "parse.y"
8140  {
8141  /*%%%*/
8142  (yyval.node) = NEW_BEGIN(0);
8143  /*%
8144  $$ = dispatch1(paren, 0);
8145  %*/
8146  }
8147  break;
8148 
8149  case 292:
8150 
8151 /* Line 1806 of yacc.c */
8152 #line 2666 "parse.y"
8153  {
8154  (yyvsp[(1) - (1)].val) = cmdarg_stack;
8155  CMDARG_SET(0);
8156  }
8157  break;
8158 
8159  case 293:
8160 
8161 /* Line 1806 of yacc.c */
8162 #line 2670 "parse.y"
8163  {SET_LEX_STATE(EXPR_ENDARG);}
8164  break;
8165 
8166  case 294:
8167 
8168 /* Line 1806 of yacc.c */
8169 #line 2671 "parse.y"
8170  {
8171  CMDARG_SET((yyvsp[(1) - (5)].val));
8172  /*%%%*/
8173  (yyval.node) = (yyvsp[(3) - (5)].node);
8174  /*%
8175  $$ = dispatch1(paren, $3);
8176  %*/
8177  }
8178  break;
8179 
8180  case 295:
8181 
8182 /* Line 1806 of yacc.c */
8183 #line 2680 "parse.y"
8184  {
8185  /*%%%*/
8186  (yyval.node) = (yyvsp[(2) - (3)].node);
8187  /*%
8188  $$ = dispatch1(paren, $2);
8189  %*/
8190  }
8191  break;
8192 
8193  case 296:
8194 
8195 /* Line 1806 of yacc.c */
8196 #line 2688 "parse.y"
8197  {
8198  /*%%%*/
8199  (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
8200  /*%
8201  $$ = dispatch2(const_path_ref, $1, $3);
8202  %*/
8203  }
8204  break;
8205 
8206  case 297:
8207 
8208 /* Line 1806 of yacc.c */
8209 #line 2696 "parse.y"
8210  {
8211  /*%%%*/
8212  (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
8213  /*%
8214  $$ = dispatch1(top_const_ref, $2);
8215  %*/
8216  }
8217  break;
8218 
8219  case 298:
8220 
8221 /* Line 1806 of yacc.c */
8222 #line 2704 "parse.y"
8223  {
8224  /*%%%*/
8225  if ((yyvsp[(2) - (3)].node) == 0) {
8226  (yyval.node) = NEW_ZARRAY(); /* zero length array*/
8227  }
8228  else {
8229  (yyval.node) = (yyvsp[(2) - (3)].node);
8230  }
8231  /*%
8232  $$ = dispatch1(array, escape_Qundef($2));
8233  %*/
8234  }
8235  break;
8236 
8237  case 299:
8238 
8239 /* Line 1806 of yacc.c */
8240 #line 2717 "parse.y"
8241  {
8242  /*%%%*/
8243  (yyval.node) = new_hash((yyvsp[(2) - (3)].node));
8244  /*%
8245  $$ = dispatch1(hash, escape_Qundef($2));
8246  %*/
8247  }
8248  break;
8249 
8250  case 300:
8251 
8252 /* Line 1806 of yacc.c */
8253 #line 2725 "parse.y"
8254  {
8255  /*%%%*/
8256  (yyval.node) = NEW_RETURN(0);
8257  /*%
8258  $$ = dispatch0(return0);
8259  %*/
8260  }
8261  break;
8262 
8263  case 301:
8264 
8265 /* Line 1806 of yacc.c */
8266 #line 2733 "parse.y"
8267  {
8268  /*%%%*/
8269  (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
8270  /*%
8271  $$ = dispatch1(yield, dispatch1(paren, $3));
8272  %*/
8273  }
8274  break;
8275 
8276  case 302:
8277 
8278 /* Line 1806 of yacc.c */
8279 #line 2741 "parse.y"
8280  {
8281  /*%%%*/
8282  (yyval.node) = NEW_YIELD(0);
8283  /*%
8284  $$ = dispatch1(yield, dispatch1(paren, arg_new()));
8285  %*/
8286  }
8287  break;
8288 
8289  case 303:
8290 
8291 /* Line 1806 of yacc.c */
8292 #line 2749 "parse.y"
8293  {
8294  /*%%%*/
8295  (yyval.node) = NEW_YIELD(0);
8296  /*%
8297  $$ = dispatch0(yield0);
8298  %*/
8299  }
8300  break;
8301 
8302  case 304:
8303 
8304 /* Line 1806 of yacc.c */
8305 #line 2756 "parse.y"
8306  {in_defined = 1;}
8307  break;
8308 
8309  case 305:
8310 
8311 /* Line 1806 of yacc.c */
8312 #line 2757 "parse.y"
8313  {
8314  in_defined = 0;
8315  /*%%%*/
8316  (yyval.node) = new_defined((yyvsp[(5) - (6)].node));
8317  /*%
8318  $$ = dispatch1(defined, $5);
8319  %*/
8320  }
8321  break;
8322 
8323  case 306:
8324 
8325 /* Line 1806 of yacc.c */
8326 #line 2766 "parse.y"
8327  {
8328  /*%%%*/
8329  (yyval.node) = call_uni_op(method_cond((yyvsp[(3) - (4)].node)), '!');
8330  /*%
8331  $$ = dispatch2(unary, ripper_intern("not"), $3);
8332  %*/
8333  }
8334  break;
8335 
8336  case 307:
8337 
8338 /* Line 1806 of yacc.c */
8339 #line 2774 "parse.y"
8340  {
8341  /*%%%*/
8342  (yyval.node) = call_uni_op(method_cond(NEW_NIL()), '!');
8343  /*%
8344  $$ = dispatch2(unary, ripper_intern("not"), Qnil);
8345  %*/
8346  }
8347  break;
8348 
8349  case 308:
8350 
8351 /* Line 1806 of yacc.c */
8352 #line 2782 "parse.y"
8353  {
8354  /*%%%*/
8355  (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
8356  (yyval.node) = (yyvsp[(2) - (2)].node);
8357  /*%
8358  $$ = method_arg(dispatch1(fcall, $1), arg_new());
8359  $$ = method_add_block($$, $2);
8360  %*/
8361  }
8362  break;
8363 
8364  case 310:
8365 
8366 /* Line 1806 of yacc.c */
8367 #line 2793 "parse.y"
8368  {
8369  /*%%%*/
8370  block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
8371  (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
8372  (yyval.node) = (yyvsp[(2) - (2)].node);
8373  /*%
8374  $$ = method_add_block($1, $2);
8375  %*/
8376  }
8377  break;
8378 
8379  case 311:
8380 
8381 /* Line 1806 of yacc.c */
8382 #line 2803 "parse.y"
8383  {
8384  (yyval.node) = (yyvsp[(2) - (2)].node);
8385  }
8386  break;
8387 
8388  case 312:
8389 
8390 /* Line 1806 of yacc.c */
8391 #line 2810 "parse.y"
8392  {
8393  /*%%%*/
8394  (yyval.node) = new_if((yyvsp[(2) - (6)].node), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
8395  fixpos((yyval.node), (yyvsp[(2) - (6)].node));
8396  /*%
8397  $$ = dispatch3(if, $2, $4, escape_Qundef($5));
8398  %*/
8399  }
8400  break;
8401 
8402  case 313:
8403 
8404 /* Line 1806 of yacc.c */
8405 #line 2822 "parse.y"
8406  {
8407  /*%%%*/
8408  (yyval.node) = new_unless((yyvsp[(2) - (6)].node), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
8409  fixpos((yyval.node), (yyvsp[(2) - (6)].node));
8410  /*%
8411  $$ = dispatch3(unless, $2, $4, escape_Qundef($5));
8412  %*/
8413  }
8414  break;
8415 
8416  case 314:
8417 
8418 /* Line 1806 of yacc.c */
8419 #line 2830 "parse.y"
8420  {COND_PUSH(1);}
8421  break;
8422 
8423  case 315:
8424 
8425 /* Line 1806 of yacc.c */
8426 #line 2830 "parse.y"
8427  {COND_POP();}
8428  break;
8429 
8430  case 316:
8431 
8432 /* Line 1806 of yacc.c */
8433 #line 2833 "parse.y"
8434  {
8435  /*%%%*/
8436  (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
8437  fixpos((yyval.node), (yyvsp[(3) - (7)].node));
8438  /*%
8439  $$ = dispatch2(while, $3, $6);
8440  %*/
8441  }
8442  break;
8443 
8444  case 317:
8445 
8446 /* Line 1806 of yacc.c */
8447 #line 2841 "parse.y"
8448  {COND_PUSH(1);}
8449  break;
8450 
8451  case 318:
8452 
8453 /* Line 1806 of yacc.c */
8454 #line 2841 "parse.y"
8455  {COND_POP();}
8456  break;
8457 
8458  case 319:
8459 
8460 /* Line 1806 of yacc.c */
8461 #line 2844 "parse.y"
8462  {
8463  /*%%%*/
8464  (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
8465  fixpos((yyval.node), (yyvsp[(3) - (7)].node));
8466  /*%
8467  $$ = dispatch2(until, $3, $6);
8468  %*/
8469  }
8470  break;
8471 
8472  case 320:
8473 
8474 /* Line 1806 of yacc.c */
8475 #line 2855 "parse.y"
8476  {
8477  /*%%%*/
8478  (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
8479  fixpos((yyval.node), (yyvsp[(2) - (5)].node));
8480  /*%
8481  $$ = dispatch2(case, $2, $4);
8482  %*/
8483  }
8484  break;
8485 
8486  case 321:
8487 
8488 /* Line 1806 of yacc.c */
8489 #line 2864 "parse.y"
8490  {
8491  /*%%%*/
8492  (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
8493  /*%
8494  $$ = dispatch2(case, Qnil, $3);
8495  %*/
8496  }
8497  break;
8498 
8499  case 322:
8500 
8501 /* Line 1806 of yacc.c */
8502 #line 2872 "parse.y"
8503  {COND_PUSH(1);}
8504  break;
8505 
8506  case 323:
8507 
8508 /* Line 1806 of yacc.c */
8509 #line 2874 "parse.y"
8510  {COND_POP();}
8511  break;
8512 
8513  case 324:
8514 
8515 /* Line 1806 of yacc.c */
8516 #line 2877 "parse.y"
8517  {
8518  /*%%%*/
8519  /*
8520  * for a, b, c in e
8521  * #=>
8522  * e.each{|*x| a, b, c = x}
8523  *
8524  * for a in e
8525  * #=>
8526  * e.each{|x| a, = x}
8527  */
8528  ID id = internal_id();
8529  ID *tbl = ALLOC_N(ID, 2);
8530  NODE *m = NEW_ARGS_AUX(0, 0);
8531  NODE *args, *scope;
8532 
8533  switch (nd_type((yyvsp[(2) - (9)].node))) {
8534  case NODE_MASGN:
8535  m->nd_next = node_assign((yyvsp[(2) - (9)].node), NEW_FOR(NEW_DVAR(id), 0, 0));
8536  args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
8537  break;
8538  case NODE_LASGN:
8539  case NODE_DASGN:
8540  case NODE_DASGN_CURR:
8541  (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
8542  m->nd_plen = 1;
8543  m->nd_next = (yyvsp[(2) - (9)].node);
8544  args = new_args(m, 0, 0, 0, new_args_tail(0, 0, 0));
8545  break;
8546  default:
8547  m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
8548  args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
8549  break;
8550  }
8551  scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
8552  tbl[0] = 1; tbl[1] = id;
8553  (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
8554  fixpos((yyval.node), (yyvsp[(2) - (9)].node));
8555  /*%
8556  $$ = dispatch3(for, $2, $5, $8);
8557  %*/
8558  }
8559  break;
8560 
8561  case 325:
8562 
8563 /* Line 1806 of yacc.c */
8564 #line 2920 "parse.y"
8565  {
8566  if (in_def || in_single)
8567  yyerror("class definition in method body");
8568  local_push(0);
8569  /*%%%*/
8570  (yyval.num) = ruby_sourceline;
8571  /*%
8572  %*/
8573  }
8574  break;
8575 
8576  case 326:
8577 
8578 /* Line 1806 of yacc.c */
8579 #line 2931 "parse.y"
8580  {
8581  /*%%%*/
8582  (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
8583  nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
8584  /*%
8585  $$ = dispatch3(class, $2, $3, $5);
8586  %*/
8587  local_pop();
8588  }
8589  break;
8590 
8591  case 327:
8592 
8593 /* Line 1806 of yacc.c */
8594 #line 2941 "parse.y"
8595  {
8596  (yyval.num) = (in_def << 1) | in_single;
8597  in_def = 0;
8598  in_single = 0;
8599  local_push(0);
8600  }
8601  break;
8602 
8603  case 328:
8604 
8605 /* Line 1806 of yacc.c */
8606 #line 2950 "parse.y"
8607  {
8608  /*%%%*/
8609  (yyval.node) = NEW_SCLASS((yyvsp[(3) - (7)].node), (yyvsp[(6) - (7)].node));
8610  fixpos((yyval.node), (yyvsp[(3) - (7)].node));
8611  /*%
8612  $$ = dispatch2(sclass, $3, $6);
8613  %*/
8614  local_pop();
8615  in_def = ((yyvsp[(4) - (7)].num) >> 1) & 1;
8616  in_single = (yyvsp[(4) - (7)].num) & 1;
8617  }
8618  break;
8619 
8620  case 329:
8621 
8622 /* Line 1806 of yacc.c */
8623 #line 2962 "parse.y"
8624  {
8625  if (in_def || in_single)
8626  yyerror("module definition in method body");
8627  local_push(0);
8628  /*%%%*/
8629  (yyval.num) = ruby_sourceline;
8630  /*%
8631  %*/
8632  }
8633  break;
8634 
8635  case 330:
8636 
8637 /* Line 1806 of yacc.c */
8638 #line 2973 "parse.y"
8639  {
8640  /*%%%*/
8641  (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
8642  nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
8643  /*%
8644  $$ = dispatch2(module, $2, $4);
8645  %*/
8646  local_pop();
8647  }
8648  break;
8649 
8650  case 331:
8651 
8652 /* Line 1806 of yacc.c */
8653 #line 2983 "parse.y"
8654  {
8655  local_push(0);
8656  (yyval.id) = current_arg;
8657  current_arg = 0;
8658  }
8659  break;
8660 
8661  case 332:
8662 
8663 /* Line 1806 of yacc.c */
8664 #line 2988 "parse.y"
8665  {
8666  (yyval.num) = in_def;
8667  in_def = 1;
8668  }
8669  break;
8670 
8671  case 333:
8672 
8673 /* Line 1806 of yacc.c */
8674 #line 2995 "parse.y"
8675  {
8676  /*%%%*/
8677  NODE *body = remove_begin((yyvsp[(6) - (7)].node));
8678  reduce_nodes(&body);
8679  (yyval.node) = NEW_DEFN((yyvsp[(2) - (7)].id), (yyvsp[(5) - (7)].node), body, METHOD_VISI_PRIVATE);
8680  nd_set_line((yyval.node), (yyvsp[(1) - (7)].num));
8681  /*%
8682  $$ = dispatch3(def, $2, $5, $6);
8683  %*/
8684  local_pop();
8685  in_def = (yyvsp[(4) - (7)].num) & 1;
8686  current_arg = (yyvsp[(3) - (7)].id);
8687  }
8688  break;
8689 
8690  case 334:
8691 
8692 /* Line 1806 of yacc.c */
8693 #line 3008 "parse.y"
8694  {SET_LEX_STATE(EXPR_FNAME);}
8695  break;
8696 
8697  case 335:
8698 
8699 /* Line 1806 of yacc.c */
8700 #line 3009 "parse.y"
8701  {
8702  (yyvsp[(4) - (5)].num) = in_single;
8703  in_single = 1;
8704  SET_LEX_STATE(EXPR_ENDFN|EXPR_LABEL); /* force for args */
8705  local_push(0);
8706  (yyval.id) = current_arg;
8707  current_arg = 0;
8708  }
8709  break;
8710 
8711  case 336:
8712 
8713 /* Line 1806 of yacc.c */
8714 #line 3020 "parse.y"
8715  {
8716  /*%%%*/
8717  NODE *body = remove_begin((yyvsp[(8) - (9)].node));
8718  reduce_nodes(&body);
8719  (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
8720  nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
8721  /*%
8722  $$ = dispatch5(defs, $2, $3, $5, $7, $8);
8723  %*/
8724  local_pop();
8725  in_single = (yyvsp[(4) - (9)].num) & 1;
8726  current_arg = (yyvsp[(6) - (9)].id);
8727  }
8728  break;
8729 
8730  case 337:
8731 
8732 /* Line 1806 of yacc.c */
8733 #line 3034 "parse.y"
8734  {
8735  /*%%%*/
8736  (yyval.node) = NEW_BREAK(0);
8737  /*%
8738  $$ = dispatch1(break, arg_new());
8739  %*/
8740  }
8741  break;
8742 
8743  case 338:
8744 
8745 /* Line 1806 of yacc.c */
8746 #line 3042 "parse.y"
8747  {
8748  /*%%%*/
8749  (yyval.node) = NEW_NEXT(0);
8750  /*%
8751  $$ = dispatch1(next, arg_new());
8752  %*/
8753  }
8754  break;
8755 
8756  case 339:
8757 
8758 /* Line 1806 of yacc.c */
8759 #line 3050 "parse.y"
8760  {
8761  /*%%%*/
8762  (yyval.node) = NEW_REDO();
8763  /*%
8764  $$ = dispatch0(redo);
8765  %*/
8766  }
8767  break;
8768 
8769  case 340:
8770 
8771 /* Line 1806 of yacc.c */
8772 #line 3058 "parse.y"
8773  {
8774  /*%%%*/
8775  (yyval.node) = NEW_RETRY();
8776  /*%
8777  $$ = dispatch0(retry);
8778  %*/
8779  }
8780  break;
8781 
8782  case 341:
8783 
8784 /* Line 1806 of yacc.c */
8785 #line 3068 "parse.y"
8786  {
8787  /*%%%*/
8788  value_expr((yyvsp[(1) - (1)].node));
8789  (yyval.node) = (yyvsp[(1) - (1)].node);
8790  if (!(yyval.node)) (yyval.node) = NEW_NIL();
8791  /*%
8792  $$ = $1;
8793  %*/
8794  }
8795  break;
8796 
8797  case 342:
8798 
8799 /* Line 1806 of yacc.c */
8800 #line 3080 "parse.y"
8801  {
8802  token_info_push("begin");
8803  }
8804  break;
8805 
8806  case 343:
8807 
8808 /* Line 1806 of yacc.c */
8809 #line 3086 "parse.y"
8810  {
8811  token_info_push("if");
8812  }
8813  break;
8814 
8815  case 344:
8816 
8817 /* Line 1806 of yacc.c */
8818 #line 3092 "parse.y"
8819  {
8820  token_info_push("unless");
8821  }
8822  break;
8823 
8824  case 345:
8825 
8826 /* Line 1806 of yacc.c */
8827 #line 3098 "parse.y"
8828  {
8829  token_info_push("while");
8830  }
8831  break;
8832 
8833  case 346:
8834 
8835 /* Line 1806 of yacc.c */
8836 #line 3104 "parse.y"
8837  {
8838  token_info_push("until");
8839  }
8840  break;
8841 
8842  case 347:
8843 
8844 /* Line 1806 of yacc.c */
8845 #line 3110 "parse.y"
8846  {
8847  token_info_push("case");
8848  }
8849  break;
8850 
8851  case 348:
8852 
8853 /* Line 1806 of yacc.c */
8854 #line 3116 "parse.y"
8855  {
8856  token_info_push("for");
8857  }
8858  break;
8859 
8860  case 349:
8861 
8862 /* Line 1806 of yacc.c */
8863 #line 3122 "parse.y"
8864  {
8865  token_info_push("class");
8866  }
8867  break;
8868 
8869  case 350:
8870 
8871 /* Line 1806 of yacc.c */
8872 #line 3128 "parse.y"
8873  {
8874  token_info_push("module");
8875  }
8876  break;
8877 
8878  case 351:
8879 
8880 /* Line 1806 of yacc.c */
8881 #line 3134 "parse.y"
8882  {
8883  token_info_push("def");
8884  /*%%%*/
8885  (yyval.num) = ruby_sourceline;
8886  /*%
8887  %*/
8888  }
8889  break;
8890 
8891  case 352:
8892 
8893 /* Line 1806 of yacc.c */
8894 #line 3144 "parse.y"
8895  {
8896  token_info_pop("end");
8897  }
8898  break;
8899 
8900  case 359:
8901 
8902 /* Line 1806 of yacc.c */
8903 #line 3174 "parse.y"
8904  {
8905  /*%%%*/
8906  (yyval.node) = new_if((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
8907  fixpos((yyval.node), (yyvsp[(2) - (5)].node));
8908  /*%
8909  $$ = dispatch3(elsif, $2, $4, escape_Qundef($5));
8910  %*/
8911  }
8912  break;
8913 
8914  case 361:
8915 
8916 /* Line 1806 of yacc.c */
8917 #line 3186 "parse.y"
8918  {
8919  /*%%%*/
8920  (yyval.node) = (yyvsp[(2) - (2)].node);
8921  /*%
8922  $$ = dispatch1(else, $2);
8923  %*/
8924  }
8925  break;
8926 
8927  case 364:
8928 
8929 /* Line 1806 of yacc.c */
8930 #line 3200 "parse.y"
8931  {
8932  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
8933  /*%%%*/
8934  /*%
8935  $$ = dispatch1(mlhs_paren, $$);
8936  %*/
8937  }
8938  break;
8939 
8940  case 365:
8941 
8942 /* Line 1806 of yacc.c */
8943 #line 3208 "parse.y"
8944  {
8945  /*%%%*/
8946  (yyval.node) = (yyvsp[(2) - (3)].node);
8947  /*%
8948  $$ = dispatch1(mlhs_paren, $2);
8949  %*/
8950  }
8951  break;
8952 
8953  case 366:
8954 
8955 /* Line 1806 of yacc.c */
8956 #line 3218 "parse.y"
8957  {
8958  /*%%%*/
8959  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
8960  /*%
8961  $$ = mlhs_add(mlhs_new(), $1);
8962  %*/
8963  }
8964  break;
8965 
8966  case 367:
8967 
8968 /* Line 1806 of yacc.c */
8969 #line 3226 "parse.y"
8970  {
8971  /*%%%*/
8972  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
8973  /*%
8974  $$ = mlhs_add($1, $3);
8975  %*/
8976  }
8977  break;
8978 
8979  case 368:
8980 
8981 /* Line 1806 of yacc.c */
8982 #line 3236 "parse.y"
8983  {
8984  /*%%%*/
8985  (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
8986  /*%
8987  $$ = $1;
8988  %*/
8989  }
8990  break;
8991 
8992  case 369:
8993 
8994 /* Line 1806 of yacc.c */
8995 #line 3244 "parse.y"
8996  {
8997  (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
8998  /*%%%*/
8999  (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
9000  /*%
9001  $$ = mlhs_add_star($1, $$);
9002  %*/
9003  }
9004  break;
9005 
9006  case 370:
9007 
9008 /* Line 1806 of yacc.c */
9009 #line 3253 "parse.y"
9010  {
9011  (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
9012  /*%%%*/
9013  (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
9014  /*%
9015  $$ = mlhs_add_star($1, $$);
9016  %*/
9017  }
9018  break;
9019 
9020  case 371:
9021 
9022 /* Line 1806 of yacc.c */
9023 #line 3262 "parse.y"
9024  {
9025  /*%%%*/
9026  (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
9027  /*%
9028  $$ = mlhs_add_star($1, Qnil);
9029  %*/
9030  }
9031  break;
9032 
9033  case 372:
9034 
9035 /* Line 1806 of yacc.c */
9036 #line 3270 "parse.y"
9037  {
9038  /*%%%*/
9039  (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
9040  /*%
9041  $$ = mlhs_add_star($1, $5);
9042  %*/
9043  }
9044  break;
9045 
9046  case 373:
9047 
9048 /* Line 1806 of yacc.c */
9049 #line 3278 "parse.y"
9050  {
9051  (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
9052  /*%%%*/
9053  (yyval.node) = NEW_MASGN(0, (yyval.node));
9054  /*%
9055  $$ = mlhs_add_star(mlhs_new(), $$);
9056  %*/
9057  }
9058  break;
9059 
9060  case 374:
9061 
9062 /* Line 1806 of yacc.c */
9063 #line 3287 "parse.y"
9064  {
9065  (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
9066  /*%%%*/
9067  (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
9068  /*%
9069  #if 0
9070  TODO: Check me
9071  #endif
9072  $$ = mlhs_add_star($$, $4);
9073  %*/
9074  }
9075  break;
9076 
9077  case 375:
9078 
9079 /* Line 1806 of yacc.c */
9080 #line 3299 "parse.y"
9081  {
9082  /*%%%*/
9083  (yyval.node) = NEW_MASGN(0, -1);
9084  /*%
9085  $$ = mlhs_add_star(mlhs_new(), Qnil);
9086  %*/
9087  }
9088  break;
9089 
9090  case 376:
9091 
9092 /* Line 1806 of yacc.c */
9093 #line 3307 "parse.y"
9094  {
9095  /*%%%*/
9096  (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
9097  /*%
9098  $$ = mlhs_add_star(mlhs_new(), Qnil);
9099  %*/
9100  }
9101  break;
9102 
9103  case 377:
9104 
9105 /* Line 1806 of yacc.c */
9106 #line 3318 "parse.y"
9107  {
9108  (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id));
9109  }
9110  break;
9111 
9112  case 378:
9113 
9114 /* Line 1806 of yacc.c */
9115 #line 3322 "parse.y"
9116  {
9117  (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
9118  }
9119  break;
9120 
9121  case 379:
9122 
9123 /* Line 1806 of yacc.c */
9124 #line 3326 "parse.y"
9125  {
9126  (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
9127  }
9128  break;
9129 
9130  case 380:
9131 
9132 /* Line 1806 of yacc.c */
9133 #line 3330 "parse.y"
9134  {
9135  (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
9136  }
9137  break;
9138 
9139  case 381:
9140 
9141 /* Line 1806 of yacc.c */
9142 #line 3336 "parse.y"
9143  {
9144  (yyval.node) = (yyvsp[(2) - (2)].node);
9145  }
9146  break;
9147 
9148  case 382:
9149 
9150 /* Line 1806 of yacc.c */
9151 #line 3340 "parse.y"
9152  {
9153  (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
9154  }
9155  break;
9156 
9157  case 383:
9158 
9159 /* Line 1806 of yacc.c */
9160 #line 3346 "parse.y"
9161  {
9162  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node));
9163  }
9164  break;
9165 
9166  case 384:
9167 
9168 /* Line 1806 of yacc.c */
9169 #line 3350 "parse.y"
9170  {
9171  (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node));
9172  }
9173  break;
9174 
9175  case 385:
9176 
9177 /* Line 1806 of yacc.c */
9178 #line 3354 "parse.y"
9179  {
9180  (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node));
9181  }
9182  break;
9183 
9184  case 386:
9185 
9186 /* Line 1806 of yacc.c */
9187 #line 3358 "parse.y"
9188  {
9189  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
9190  }
9191  break;
9192 
9193  case 387:
9194 
9195 /* Line 1806 of yacc.c */
9196 #line 3362 "parse.y"
9197  {
9198  (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
9199  }
9200  break;
9201 
9202  case 388:
9203 
9204 /* Line 1806 of yacc.c */
9205 #line 3366 "parse.y"
9206  {
9207  (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, 1, Qnone, new_args_tail(Qnone, Qnone, Qnone));
9208  /*%%%*/
9209  /*%
9210  dispatch1(excessed_comma, $$);
9211  %*/
9212  }
9213  break;
9214 
9215  case 389:
9216 
9217 /* Line 1806 of yacc.c */
9218 #line 3374 "parse.y"
9219  {
9220  (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
9221  }
9222  break;
9223 
9224  case 390:
9225 
9226 /* Line 1806 of yacc.c */
9227 #line 3378 "parse.y"
9228  {
9229  (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node));
9230  }
9231  break;
9232 
9233  case 391:
9234 
9235 /* Line 1806 of yacc.c */
9236 #line 3382 "parse.y"
9237  {
9238  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
9239  }
9240  break;
9241 
9242  case 392:
9243 
9244 /* Line 1806 of yacc.c */
9245 #line 3386 "parse.y"
9246  {
9247  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
9248  }
9249  break;
9250 
9251  case 393:
9252 
9253 /* Line 1806 of yacc.c */
9254 #line 3390 "parse.y"
9255  {
9256  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node));
9257  }
9258  break;
9259 
9260  case 394:
9261 
9262 /* Line 1806 of yacc.c */
9263 #line 3394 "parse.y"
9264  {
9265  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
9266  }
9267  break;
9268 
9269  case 395:
9270 
9271 /* Line 1806 of yacc.c */
9272 #line 3398 "parse.y"
9273  {
9274  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node));
9275  }
9276  break;
9277 
9278  case 396:
9279 
9280 /* Line 1806 of yacc.c */
9281 #line 3402 "parse.y"
9282  {
9283  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
9284  }
9285  break;
9286 
9287  case 397:
9288 
9289 /* Line 1806 of yacc.c */
9290 #line 3406 "parse.y"
9291  {
9292  (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
9293  }
9294  break;
9295 
9296  case 399:
9297 
9298 /* Line 1806 of yacc.c */
9299 #line 3413 "parse.y"
9300  {
9301  command_start = TRUE;
9302  }
9303  break;
9304 
9305  case 400:
9306 
9307 /* Line 1806 of yacc.c */
9308 #line 3419 "parse.y"
9309  {
9310  current_arg = 0;
9311  /*%%%*/
9312  (yyval.node) = 0;
9313  /*%
9314  $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
9315  escape_Qundef($2));
9316  %*/
9317  }
9318  break;
9319 
9320  case 401:
9321 
9322 /* Line 1806 of yacc.c */
9323 #line 3429 "parse.y"
9324  {
9325  /*%%%*/
9326  (yyval.node) = 0;
9327  /*%
9328  $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
9329  Qnil);
9330  %*/
9331  }
9332  break;
9333 
9334  case 402:
9335 
9336 /* Line 1806 of yacc.c */
9337 #line 3438 "parse.y"
9338  {
9339  current_arg = 0;
9340  /*%%%*/
9341  (yyval.node) = (yyvsp[(2) - (4)].node);
9342  /*%
9343  $$ = blockvar_new(escape_Qundef($2), escape_Qundef($3));
9344  %*/
9345  }
9346  break;
9347 
9348  case 403:
9349 
9350 /* Line 1806 of yacc.c */
9351 #line 3450 "parse.y"
9352  {
9353  (yyval.node) = 0;
9354  }
9355  break;
9356 
9357  case 404:
9358 
9359 /* Line 1806 of yacc.c */
9360 #line 3454 "parse.y"
9361  {
9362  /*%%%*/
9363  (yyval.node) = 0;
9364  /*%
9365  $$ = $3;
9366  %*/
9367  }
9368  break;
9369 
9370  case 407:
9371 
9372 /* Line 1806 of yacc.c */
9373 #line 3480 "parse.y"
9374  {
9375  new_bv(get_id((yyvsp[(1) - (1)].id)));
9376  /*%%%*/
9377  /*%
9378  $$ = get_value($1);
9379  %*/
9380  }
9381  break;
9382 
9383  case 408:
9384 
9385 /* Line 1806 of yacc.c */
9386 #line 3488 "parse.y"
9387  {
9388  (yyval.node) = 0;
9389  }
9390  break;
9391 
9392  case 409:
9393 
9394 /* Line 1806 of yacc.c */
9395 #line 3493 "parse.y"
9396  {
9397  (yyval.vars) = dyna_push();
9398  }
9399  break;
9400 
9401  case 410:
9402 
9403 /* Line 1806 of yacc.c */
9404 #line 3496 "parse.y"
9405  {
9406  (yyval.num) = lpar_beg;
9407  lpar_beg = ++paren_nest;
9408  }
9409  break;
9410 
9411  case 411:
9412 
9413 /* Line 1806 of yacc.c */
9414 #line 3501 "parse.y"
9415  {
9416  (yyval.num) = ruby_sourceline;
9417  }
9418  break;
9419 
9420  case 412:
9421 
9422 /* Line 1806 of yacc.c */
9423 #line 3504 "parse.y"
9424  {
9425  (yyval.val) = cmdarg_stack;
9426  CMDARG_SET(0);
9427  }
9428  break;
9429 
9430  case 413:
9431 
9432 /* Line 1806 of yacc.c */
9433 #line 3509 "parse.y"
9434  {
9435  lpar_beg = (yyvsp[(2) - (6)].num);
9436  CMDARG_SET((yyvsp[(5) - (6)].val));
9437  CMDARG_LEXPOP();
9438  /*%%%*/
9439  (yyval.node) = NEW_LAMBDA((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
9440  nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
9441  /*%
9442  $$ = dispatch2(lambda, $3, $6);
9443  %*/
9444  dyna_pop((yyvsp[(1) - (6)].vars));
9445  }
9446  break;
9447 
9448  case 414:
9449 
9450 /* Line 1806 of yacc.c */
9451 #line 3524 "parse.y"
9452  {
9453  /*%%%*/
9454  (yyval.node) = (yyvsp[(2) - (4)].node);
9455  /*%
9456  $$ = dispatch1(paren, $2);
9457  %*/
9458  }
9459  break;
9460 
9461  case 415:
9462 
9463 /* Line 1806 of yacc.c */
9464 #line 3532 "parse.y"
9465  {
9466  (yyval.node) = (yyvsp[(1) - (1)].node);
9467  }
9468  break;
9469 
9470  case 416:
9471 
9472 /* Line 1806 of yacc.c */
9473 #line 3538 "parse.y"
9474  {
9475  token_info_pop("}");
9476  (yyval.node) = (yyvsp[(2) - (3)].node);
9477  }
9478  break;
9479 
9480  case 417:
9481 
9482 /* Line 1806 of yacc.c */
9483 #line 3543 "parse.y"
9484  {
9485  (yyval.node) = (yyvsp[(2) - (3)].node);
9486  }
9487  break;
9488 
9489  case 418:
9490 
9491 /* Line 1806 of yacc.c */
9492 #line 3549 "parse.y"
9493  {
9494  /*%%%*/
9495  (yyval.num) = ruby_sourceline;
9496  /*% %*/
9497  }
9498  break;
9499 
9500  case 419:
9501 
9502 /* Line 1806 of yacc.c */
9503 #line 3555 "parse.y"
9504  {
9505  (yyval.node) = (yyvsp[(3) - (4)].node);
9506  /*%%%*/
9507  nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
9508  /*% %*/
9509  }
9510  break;
9511 
9512  case 420:
9513 
9514 /* Line 1806 of yacc.c */
9515 #line 3564 "parse.y"
9516  {
9517  /*%%%*/
9518  if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
9519  compile_error(PARSER_ARG "block given to yield");
9520  }
9521  else {
9522  block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
9523  }
9524  (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
9525  (yyval.node) = (yyvsp[(2) - (2)].node);
9526  fixpos((yyval.node), (yyvsp[(1) - (2)].node));
9527  /*%
9528  $$ = method_add_block($1, $2);
9529  %*/
9530  }
9531  break;
9532 
9533  case 421:
9534 
9535 /* Line 1806 of yacc.c */
9536 #line 3580 "parse.y"
9537  {
9538  /*%%%*/
9539  (yyval.node) = NEW_QCALL((yyvsp[(2) - (4)].id), (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
9540  /*%
9541  $$ = dispatch3(call, $1, $2, $3);
9542  $$ = method_optarg($$, $4);
9543  %*/
9544  }
9545  break;
9546 
9547  case 422:
9548 
9549 /* Line 1806 of yacc.c */
9550 #line 3589 "parse.y"
9551  {
9552  /*%%%*/
9553  block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
9554  (yyvsp[(5) - (5)].node)->nd_iter = NEW_QCALL((yyvsp[(2) - (5)].id), (yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
9555  (yyval.node) = (yyvsp[(5) - (5)].node);
9556  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
9557  /*%
9558  $$ = dispatch4(command_call, $1, $2, $3, $4);
9559  $$ = method_add_block($$, $5);
9560  %*/
9561  }
9562  break;
9563 
9564  case 423:
9565 
9566 /* Line 1806 of yacc.c */
9567 #line 3601 "parse.y"
9568  {
9569  /*%%%*/
9570  block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
9571  (yyvsp[(5) - (5)].node)->nd_iter = NEW_QCALL((yyvsp[(2) - (5)].id), (yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
9572  (yyval.node) = (yyvsp[(5) - (5)].node);
9573  fixpos((yyval.node), (yyvsp[(1) - (5)].node));
9574  /*%
9575  $$ = dispatch4(command_call, $1, $2, $3, $4);
9576  $$ = method_add_block($$, $5);
9577  %*/
9578  }
9579  break;
9580 
9581  case 424:
9582 
9583 /* Line 1806 of yacc.c */
9584 #line 3615 "parse.y"
9585  {
9586  /*%%%*/
9587  (yyval.node) = (yyvsp[(1) - (2)].node);
9588  (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
9589  /*%
9590  $$ = method_arg(dispatch1(fcall, $1), $2);
9591  %*/
9592  }
9593  break;
9594 
9595  case 425:
9596 
9597 /* Line 1806 of yacc.c */
9598 #line 3624 "parse.y"
9599  {
9600  /*%%%*/
9601  (yyval.num) = ruby_sourceline;
9602  /*% %*/
9603  }
9604  break;
9605 
9606  case 426:
9607 
9608 /* Line 1806 of yacc.c */
9609 #line 3630 "parse.y"
9610  {
9611  /*%%%*/
9612  (yyval.node) = NEW_QCALL((yyvsp[(2) - (5)].id), (yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
9613  nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
9614  /*%
9615  $$ = dispatch3(call, $1, $2, $3);
9616  $$ = method_optarg($$, $5);
9617  %*/
9618  }
9619  break;
9620 
9621  case 427:
9622 
9623 /* Line 1806 of yacc.c */
9624 #line 3640 "parse.y"
9625  {
9626  /*%%%*/
9627  (yyval.num) = ruby_sourceline;
9628  /*% %*/
9629  }
9630  break;
9631 
9632  case 428:
9633 
9634 /* Line 1806 of yacc.c */
9635 #line 3646 "parse.y"
9636  {
9637  /*%%%*/
9638  (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
9639  nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
9640  /*%
9641  $$ = dispatch3(call, $1, ripper_id2sym(idCOLON2), $3);
9642  $$ = method_optarg($$, $5);
9643  %*/
9644  }
9645  break;
9646 
9647  case 429:
9648 
9649 /* Line 1806 of yacc.c */
9650 #line 3656 "parse.y"
9651  {
9652  /*%%%*/
9653  (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
9654  /*%
9655  $$ = dispatch3(call, $1, ID2SYM(idCOLON2), $3);
9656  %*/
9657  }
9658  break;
9659 
9660  case 430:
9661 
9662 /* Line 1806 of yacc.c */
9663 #line 3664 "parse.y"
9664  {
9665  /*%%%*/
9666  (yyval.num) = ruby_sourceline;
9667  /*% %*/
9668  }
9669  break;
9670 
9671  case 431:
9672 
9673 /* Line 1806 of yacc.c */
9674 #line 3670 "parse.y"
9675  {
9676  /*%%%*/
9677  (yyval.node) = NEW_QCALL((yyvsp[(2) - (4)].id), (yyvsp[(1) - (4)].node), idCall, (yyvsp[(4) - (4)].node));
9678  nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
9679  /*%
9680  $$ = dispatch3(call, $1, $2, ID2SYM(idCall));
9681  $$ = method_optarg($$, $4);
9682  %*/
9683  }
9684  break;
9685 
9686  case 432:
9687 
9688 /* Line 1806 of yacc.c */
9689 #line 3680 "parse.y"
9690  {
9691  /*%%%*/
9692  (yyval.num) = ruby_sourceline;
9693  /*% %*/
9694  }
9695  break;
9696 
9697  case 433:
9698 
9699 /* Line 1806 of yacc.c */
9700 #line 3686 "parse.y"
9701  {
9702  /*%%%*/
9703  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), idCall, (yyvsp[(4) - (4)].node));
9704  nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
9705  /*%
9706  $$ = dispatch3(call, $1, ID2SYM(idCOLON2),
9707  ID2SYM(idCall));
9708  $$ = method_optarg($$, $4);
9709  %*/
9710  }
9711  break;
9712 
9713  case 434:
9714 
9715 /* Line 1806 of yacc.c */
9716 #line 3697 "parse.y"
9717  {
9718  /*%%%*/
9719  (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
9720  /*%
9721  $$ = dispatch1(super, $2);
9722  %*/
9723  }
9724  break;
9725 
9726  case 435:
9727 
9728 /* Line 1806 of yacc.c */
9729 #line 3705 "parse.y"
9730  {
9731  /*%%%*/
9732  (yyval.node) = NEW_ZSUPER();
9733  /*%
9734  $$ = dispatch0(zsuper);
9735  %*/
9736  }
9737  break;
9738 
9739  case 436:
9740 
9741 /* Line 1806 of yacc.c */
9742 #line 3713 "parse.y"
9743  {
9744  /*%%%*/
9745  if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
9746  (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
9747  else
9748  (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
9749  fixpos((yyval.node), (yyvsp[(1) - (4)].node));
9750  /*%
9751  $$ = dispatch2(aref, $1, escape_Qundef($3));
9752  %*/
9753  }
9754  break;
9755 
9756  case 437:
9757 
9758 /* Line 1806 of yacc.c */
9759 #line 3727 "parse.y"
9760  {
9761  /*%%%*/
9762  (yyval.num) = ruby_sourceline;
9763  /*% %*/
9764  }
9765  break;
9766 
9767  case 438:
9768 
9769 /* Line 1806 of yacc.c */
9770 #line 3733 "parse.y"
9771  {
9772  (yyval.node) = (yyvsp[(3) - (4)].node);
9773  /*%%%*/
9774  nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
9775  /*% %*/
9776  }
9777  break;
9778 
9779  case 439:
9780 
9781 /* Line 1806 of yacc.c */
9782 #line 3740 "parse.y"
9783  {
9784  /*%%%*/
9785  (yyval.num) = ruby_sourceline;
9786  /*% %*/
9787  }
9788  break;
9789 
9790  case 440:
9791 
9792 /* Line 1806 of yacc.c */
9793 #line 3746 "parse.y"
9794  {
9795  (yyval.node) = (yyvsp[(3) - (4)].node);
9796  /*%%%*/
9797  nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
9798  /*% %*/
9799  }
9800  break;
9801 
9802  case 441:
9803 
9804 /* Line 1806 of yacc.c */
9805 #line 3754 "parse.y"
9806  {(yyval.vars) = dyna_push();}
9807  break;
9808 
9809  case 442:
9810 
9811 /* Line 1806 of yacc.c */
9812 #line 3755 "parse.y"
9813  {(yyval.val) = cmdarg_stack >> 1; CMDARG_SET(0);}
9814  break;
9815 
9816  case 443:
9817 
9818 /* Line 1806 of yacc.c */
9819 #line 3757 "parse.y"
9820  {
9821  (yyval.node) = new_brace_body((yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
9822  dyna_pop((yyvsp[(1) - (4)].vars));
9823  CMDARG_SET((yyvsp[(2) - (4)].val));
9824  }
9825  break;
9826 
9827  case 444:
9828 
9829 /* Line 1806 of yacc.c */
9830 #line 3764 "parse.y"
9831  {(yyval.vars) = dyna_push();}
9832  break;
9833 
9834  case 445:
9835 
9836 /* Line 1806 of yacc.c */
9837 #line 3765 "parse.y"
9838  {(yyval.val) = cmdarg_stack; CMDARG_SET(0);}
9839  break;
9840 
9841  case 446:
9842 
9843 /* Line 1806 of yacc.c */
9844 #line 3767 "parse.y"
9845  {
9846  (yyval.node) = new_do_body((yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
9847  dyna_pop((yyvsp[(1) - (4)].vars));
9848  CMDARG_SET((yyvsp[(2) - (4)].val));
9849  }
9850  break;
9851 
9852  case 447:
9853 
9854 /* Line 1806 of yacc.c */
9855 #line 3777 "parse.y"
9856  {
9857  /*%%%*/
9858  (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
9859  /*%
9860  $$ = dispatch3(when, $2, $4, escape_Qundef($5));
9861  %*/
9862  }
9863  break;
9864 
9865  case 450:
9866 
9867 /* Line 1806 of yacc.c */
9868 #line 3793 "parse.y"
9869  {
9870  /*%%%*/
9871  if ((yyvsp[(3) - (6)].node)) {
9872  (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
9873  (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
9874  }
9875  (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
9876  fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
9877  /*%
9878  $$ = dispatch4(rescue,
9879  escape_Qundef($2),
9880  escape_Qundef($3),
9881  escape_Qundef($5),
9882  escape_Qundef($6));
9883  %*/
9884  }
9885  break;
9886 
9887  case 452:
9888 
9889 /* Line 1806 of yacc.c */
9890 #line 3813 "parse.y"
9891  {
9892  /*%%%*/
9893  (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
9894  /*%
9895  $$ = rb_ary_new3(1, $1);
9896  %*/
9897  }
9898  break;
9899 
9900  case 453:
9901 
9902 /* Line 1806 of yacc.c */
9903 #line 3821 "parse.y"
9904  {
9905  /*%%%*/
9906  if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
9907  /*%
9908  $$ = $1;
9909  %*/
9910  }
9911  break;
9912 
9913  case 455:
9914 
9915 /* Line 1806 of yacc.c */
9916 #line 3832 "parse.y"
9917  {
9918  (yyval.node) = (yyvsp[(2) - (2)].node);
9919  }
9920  break;
9921 
9922  case 457:
9923 
9924 /* Line 1806 of yacc.c */
9925 #line 3839 "parse.y"
9926  {
9927  /*%%%*/
9928  (yyval.node) = (yyvsp[(2) - (2)].node);
9929  /*%
9930  $$ = dispatch1(ensure, $2);
9931  %*/
9932  }
9933  break;
9934 
9935  case 460:
9936 
9937 /* Line 1806 of yacc.c */
9938 #line 3851 "parse.y"
9939  {
9940  /*%%%*/
9941  (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
9942  /*%
9943  $$ = dispatch1(symbol_literal, $1);
9944  %*/
9945  }
9946  break;
9947 
9948  case 462:
9949 
9950 /* Line 1806 of yacc.c */
9951 #line 3862 "parse.y"
9952  {
9953  /*%%%*/
9954  NODE *node = (yyvsp[(1) - (1)].node);
9955  if (!node) {
9956  node = NEW_STR(STR_NEW0());
9957  }
9958  else {
9959  node = evstr2dstr(node);
9960  }
9961  (yyval.node) = node;
9962  /*%
9963  $$ = $1;
9964  %*/
9965  }
9966  break;
9967 
9968  case 465:
9969 
9970 /* Line 1806 of yacc.c */
9971 #line 3881 "parse.y"
9972  {
9973  /*%%%*/
9974  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
9975  /*%
9976  $$ = dispatch2(string_concat, $1, $2);
9977  %*/
9978  }
9979  break;
9980 
9981  case 466:
9982 
9983 /* Line 1806 of yacc.c */
9984 #line 3891 "parse.y"
9985  {
9986  (yyval.node) = new_string1(heredoc_dedent((yyvsp[(2) - (3)].node)));
9987  }
9988  break;
9989 
9990  case 467:
9991 
9992 /* Line 1806 of yacc.c */
9993 #line 3897 "parse.y"
9994  {
9995  (yyval.node) = new_xstring(heredoc_dedent((yyvsp[(2) - (3)].node)));
9996  }
9997  break;
9998 
9999  case 468:
10000 
10001 /* Line 1806 of yacc.c */
10002 #line 3903 "parse.y"
10003  {
10004  (yyval.node) = new_regexp((yyvsp[(2) - (3)].node), (yyvsp[(3) - (3)].num));
10005  }
10006  break;
10007 
10008  case 469:
10009 
10010 /* Line 1806 of yacc.c */
10011 #line 3909 "parse.y"
10012  {
10013  /*%%%*/
10014  (yyval.node) = NEW_ZARRAY();
10015  /*%
10016  $$ = dispatch0(words_new);
10017  $$ = dispatch1(array, $$);
10018  %*/
10019  }
10020  break;
10021 
10022  case 470:
10023 
10024 /* Line 1806 of yacc.c */
10025 #line 3918 "parse.y"
10026  {
10027  /*%%%*/
10028  (yyval.node) = (yyvsp[(2) - (3)].node);
10029  /*%
10030  $$ = dispatch1(array, $2);
10031  %*/
10032  }
10033  break;
10034 
10035  case 471:
10036 
10037 /* Line 1806 of yacc.c */
10038 #line 3928 "parse.y"
10039  {
10040  /*%%%*/
10041  (yyval.node) = 0;
10042  /*%
10043  $$ = dispatch0(words_new);
10044  %*/
10045  }
10046  break;
10047 
10048  case 472:
10049 
10050 /* Line 1806 of yacc.c */
10051 #line 3936 "parse.y"
10052  {
10053  /*%%%*/
10054  (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
10055  /*%
10056  $$ = dispatch2(words_add, $1, $2);
10057  %*/
10058  }
10059  break;
10060 
10061  case 474:
10062 
10063 /* Line 1806 of yacc.c */
10064 #line 3954 "parse.y"
10065  {
10066  /*%%%*/
10067  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
10068  /*%
10069  $$ = dispatch2(word_add, $1, $2);
10070  %*/
10071  }
10072  break;
10073 
10074  case 475:
10075 
10076 /* Line 1806 of yacc.c */
10077 #line 3964 "parse.y"
10078  {
10079  /*%%%*/
10080  (yyval.node) = NEW_ZARRAY();
10081  /*%
10082  $$ = dispatch0(symbols_new);
10083  $$ = dispatch1(array, $$);
10084  %*/
10085  }
10086  break;
10087 
10088  case 476:
10089 
10090 /* Line 1806 of yacc.c */
10091 #line 3973 "parse.y"
10092  {
10093  /*%%%*/
10094  (yyval.node) = (yyvsp[(2) - (3)].node);
10095  /*%
10096  $$ = dispatch1(array, $2);
10097  %*/
10098  }
10099  break;
10100 
10101  case 477:
10102 
10103 /* Line 1806 of yacc.c */
10104 #line 3983 "parse.y"
10105  {
10106  /*%%%*/
10107  (yyval.node) = 0;
10108  /*%
10109  $$ = dispatch0(symbols_new);
10110  %*/
10111  }
10112  break;
10113 
10114  case 478:
10115 
10116 /* Line 1806 of yacc.c */
10117 #line 3991 "parse.y"
10118  {
10119  /*%%%*/
10120  (yyvsp[(2) - (3)].node) = evstr2dstr((yyvsp[(2) - (3)].node));
10121  if (nd_type((yyvsp[(2) - (3)].node)) == NODE_DSTR) {
10122  nd_set_type((yyvsp[(2) - (3)].node), NODE_DSYM);
10123  }
10124  else {
10125  nd_set_type((yyvsp[(2) - (3)].node), NODE_LIT);
10126  (yyvsp[(2) - (3)].node)->nd_lit = rb_str_intern((yyvsp[(2) - (3)].node)->nd_lit);
10127  }
10128  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
10129  /*%
10130  $$ = dispatch2(symbols_add, $1, $2);
10131  %*/
10132  }
10133  break;
10134 
10135  case 479:
10136 
10137 /* Line 1806 of yacc.c */
10138 #line 4009 "parse.y"
10139  {
10140  /*%%%*/
10141  (yyval.node) = NEW_ZARRAY();
10142  /*%
10143  $$ = dispatch0(qwords_new);
10144  $$ = dispatch1(array, $$);
10145  %*/
10146  }
10147  break;
10148 
10149  case 480:
10150 
10151 /* Line 1806 of yacc.c */
10152 #line 4018 "parse.y"
10153  {
10154  /*%%%*/
10155  (yyval.node) = (yyvsp[(2) - (3)].node);
10156  /*%
10157  $$ = dispatch1(array, $2);
10158  %*/
10159  }
10160  break;
10161 
10162  case 481:
10163 
10164 /* Line 1806 of yacc.c */
10165 #line 4028 "parse.y"
10166  {
10167  /*%%%*/
10168  (yyval.node) = NEW_ZARRAY();
10169  /*%
10170  $$ = dispatch0(qsymbols_new);
10171  $$ = dispatch1(array, $$);
10172  %*/
10173  }
10174  break;
10175 
10176  case 482:
10177 
10178 /* Line 1806 of yacc.c */
10179 #line 4037 "parse.y"
10180  {
10181  /*%%%*/
10182  (yyval.node) = (yyvsp[(2) - (3)].node);
10183  /*%
10184  $$ = dispatch1(array, $2);
10185  %*/
10186  }
10187  break;
10188 
10189  case 483:
10190 
10191 /* Line 1806 of yacc.c */
10192 #line 4047 "parse.y"
10193  {
10194  /*%%%*/
10195  (yyval.node) = 0;
10196  /*%
10197  $$ = dispatch0(qwords_new);
10198  %*/
10199  }
10200  break;
10201 
10202  case 484:
10203 
10204 /* Line 1806 of yacc.c */
10205 #line 4055 "parse.y"
10206  {
10207  /*%%%*/
10208  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
10209  /*%
10210  $$ = dispatch2(qwords_add, $1, $2);
10211  %*/
10212  }
10213  break;
10214 
10215  case 485:
10216 
10217 /* Line 1806 of yacc.c */
10218 #line 4065 "parse.y"
10219  {
10220  /*%%%*/
10221  (yyval.node) = 0;
10222  /*%
10223  $$ = dispatch0(qsymbols_new);
10224  %*/
10225  }
10226  break;
10227 
10228  case 486:
10229 
10230 /* Line 1806 of yacc.c */
10231 #line 4073 "parse.y"
10232  {
10233  /*%%%*/
10234  VALUE lit;
10235  lit = (yyvsp[(2) - (3)].node)->nd_lit;
10236  (yyvsp[(2) - (3)].node)->nd_lit = ID2SYM(rb_intern_str(lit));
10237  nd_set_type((yyvsp[(2) - (3)].node), NODE_LIT);
10238  (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
10239  /*%
10240  $$ = dispatch2(qsymbols_add, $1, $2);
10241  %*/
10242  }
10243  break;
10244 
10245  case 487:
10246 
10247 /* Line 1806 of yacc.c */
10248 #line 4087 "parse.y"
10249  {
10250  /*%%%*/
10251  (yyval.node) = 0;
10252  /*%
10253  $$ = dispatch0(string_content);
10254  %*/
10255  }
10256  break;
10257 
10258  case 488:
10259 
10260 /* Line 1806 of yacc.c */
10261 #line 4095 "parse.y"
10262  {
10263  /*%%%*/
10264  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
10265  /*%
10266  $$ = dispatch2(string_add, $1, $2);
10267  %*/
10268  }
10269  break;
10270 
10271  case 489:
10272 
10273 /* Line 1806 of yacc.c */
10274 #line 4105 "parse.y"
10275  {
10276  /*%%%*/
10277  (yyval.node) = 0;
10278  /*%
10279  $$ = dispatch0(xstring_new);
10280  %*/
10281  }
10282  break;
10283 
10284  case 490:
10285 
10286 /* Line 1806 of yacc.c */
10287 #line 4113 "parse.y"
10288  {
10289  /*%%%*/
10290  (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
10291  /*%
10292  $$ = dispatch2(xstring_add, $1, $2);
10293  %*/
10294  }
10295  break;
10296 
10297  case 491:
10298 
10299 /* Line 1806 of yacc.c */
10300 #line 4123 "parse.y"
10301  {
10302  /*%%%*/
10303  (yyval.node) = 0;
10304  /*%
10305  $$ = ripper_new_yylval(0, dispatch0(regexp_new), 0);
10306  %*/
10307  }
10308  break;
10309 
10310  case 492:
10311 
10312 /* Line 1806 of yacc.c */
10313 #line 4131 "parse.y"
10314  {
10315  /*%%%*/
10316  NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
10317  if (!head) {
10318  (yyval.node) = tail;
10319  }
10320  else if (!tail) {
10321  (yyval.node) = head;
10322  }
10323  else {
10324  switch (nd_type(head)) {
10325  case NODE_STR:
10326  nd_set_type(head, NODE_DSTR);
10327  break;
10328  case NODE_DSTR:
10329  break;
10330  default:
10331  head = list_append(NEW_DSTR(Qnil), head);
10332  break;
10333  }
10334  (yyval.node) = list_append(head, tail);
10335  }
10336  /*%
10337  VALUE s1 = 1, s2 = 0, n1 = $1, n2 = $2;
10338  if (ripper_is_node_yylval(n1)) {
10339  s1 = RNODE(n1)->nd_cval;
10340  n1 = RNODE(n1)->nd_rval;
10341  }
10342  if (ripper_is_node_yylval(n2)) {
10343  s2 = RNODE(n2)->nd_cval;
10344  n2 = RNODE(n2)->nd_rval;
10345  }
10346  $$ = dispatch2(regexp_add, n1, n2);
10347  if (!s1 && s2) {
10348  $$ = ripper_new_yylval(0, $$, s2);
10349  }
10350  %*/
10351  }
10352  break;
10353 
10354  case 494:
10355 
10356 /* Line 1806 of yacc.c */
10357 #line 4173 "parse.y"
10358  {
10359  (yyval.node) = lex_strterm;
10360  lex_strterm = 0;
10361  SET_LEX_STATE(EXPR_BEG);
10362  }
10363  break;
10364 
10365  case 495:
10366 
10367 /* Line 1806 of yacc.c */
10368 #line 4179 "parse.y"
10369  {
10370  lex_strterm = (yyvsp[(2) - (3)].node);
10371  /*%%%*/
10372  (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
10373  /*%
10374  $$ = dispatch1(string_dvar, $3);
10375  %*/
10376  }
10377  break;
10378 
10379  case 496:
10380 
10381 /* Line 1806 of yacc.c */
10382 #line 4188 "parse.y"
10383  {
10384  (yyvsp[(1) - (1)].val) = cond_stack;
10385  (yyval.val) = cmdarg_stack;
10386  COND_SET(0);
10387  CMDARG_SET(0);
10388  }
10389  break;
10390 
10391  case 497:
10392 
10393 /* Line 1806 of yacc.c */
10394 #line 4194 "parse.y"
10395  {
10396  (yyval.node) = lex_strterm;
10397  lex_strterm = 0;
10398  }
10399  break;
10400 
10401  case 498:
10402 
10403 /* Line 1806 of yacc.c */
10404 #line 4198 "parse.y"
10405  {
10406  (yyval.num) = lex_state;
10407  SET_LEX_STATE(EXPR_BEG);
10408  }
10409  break;
10410 
10411  case 499:
10412 
10413 /* Line 1806 of yacc.c */
10414 #line 4202 "parse.y"
10415  {
10416  (yyval.num) = brace_nest;
10417  brace_nest = 0;
10418  }
10419  break;
10420 
10421  case 500:
10422 
10423 /* Line 1806 of yacc.c */
10424 #line 4206 "parse.y"
10425  {
10426  (yyval.num) = heredoc_indent;
10427  heredoc_indent = 0;
10428  }
10429  break;
10430 
10431  case 501:
10432 
10433 /* Line 1806 of yacc.c */
10434 #line 4211 "parse.y"
10435  {
10436  COND_SET((yyvsp[(1) - (8)].val));
10437  CMDARG_SET((yyvsp[(2) - (8)].val));
10438  lex_strterm = (yyvsp[(3) - (8)].node);
10439  SET_LEX_STATE((yyvsp[(4) - (8)].num));
10440  brace_nest = (yyvsp[(5) - (8)].num);
10441  heredoc_indent = (yyvsp[(6) - (8)].num);
10442  heredoc_line_indent = -1;
10443  /*%%%*/
10444  if ((yyvsp[(7) - (8)].node)) (yyvsp[(7) - (8)].node)->flags &= ~NODE_FL_NEWLINE;
10445  (yyval.node) = new_evstr((yyvsp[(7) - (8)].node));
10446  /*%
10447  $$ = dispatch1(string_embexpr, $7);
10448  %*/
10449  }
10450  break;
10451 
10452  case 502:
10453 
10454 /* Line 1806 of yacc.c */
10455 #line 4229 "parse.y"
10456  {
10457  /*%%%*/
10458  (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
10459  /*%
10460  $$ = dispatch1(var_ref, $1);
10461  %*/
10462  }
10463  break;
10464 
10465  case 503:
10466 
10467 /* Line 1806 of yacc.c */
10468 #line 4237 "parse.y"
10469  {
10470  /*%%%*/
10471  (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
10472  /*%
10473  $$ = dispatch1(var_ref, $1);
10474  %*/
10475  }
10476  break;
10477 
10478  case 504:
10479 
10480 /* Line 1806 of yacc.c */
10481 #line 4245 "parse.y"
10482  {
10483  /*%%%*/
10484  (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
10485  /*%
10486  $$ = dispatch1(var_ref, $1);
10487  %*/
10488  }
10489  break;
10490 
10491  case 506:
10492 
10493 /* Line 1806 of yacc.c */
10494 #line 4256 "parse.y"
10495  {
10496  SET_LEX_STATE(EXPR_END|EXPR_ENDARG);
10497  /*%%%*/
10498  (yyval.id) = (yyvsp[(2) - (2)].id);
10499  /*%
10500  $$ = dispatch1(symbol, $2);
10501  %*/
10502  }
10503  break;
10504 
10505  case 511:
10506 
10507 /* Line 1806 of yacc.c */
10508 #line 4273 "parse.y"
10509  {
10510  SET_LEX_STATE(EXPR_END|EXPR_ENDARG);
10511  /*%%%*/
10512  (yyval.node) = dsym_node((yyvsp[(2) - (3)].node));
10513  /*%
10514  $$ = dispatch1(dyna_symbol, $2);
10515  %*/
10516  }
10517  break;
10518 
10519  case 513:
10520 
10521 /* Line 1806 of yacc.c */
10522 #line 4285 "parse.y"
10523  {
10524  /*%%%*/
10525  (yyval.node) = (yyvsp[(2) - (2)].node);
10526  (yyval.node)->nd_lit = negate_lit((yyval.node)->nd_lit);
10527  /*%
10528  $$ = dispatch2(unary, ID2SYM(idUMinus), $2);
10529  %*/
10530  }
10531  break;
10532 
10533  case 523:
10534 
10535 /* Line 1806 of yacc.c */
10536 #line 4308 "parse.y"
10537  {ifndef_ripper((yyval.id) = keyword_nil);}
10538  break;
10539 
10540  case 524:
10541 
10542 /* Line 1806 of yacc.c */
10543 #line 4309 "parse.y"
10544  {ifndef_ripper((yyval.id) = keyword_self);}
10545  break;
10546 
10547  case 525:
10548 
10549 /* Line 1806 of yacc.c */
10550 #line 4310 "parse.y"
10551  {ifndef_ripper((yyval.id) = keyword_true);}
10552  break;
10553 
10554  case 526:
10555 
10556 /* Line 1806 of yacc.c */
10557 #line 4311 "parse.y"
10558  {ifndef_ripper((yyval.id) = keyword_false);}
10559  break;
10560 
10561  case 527:
10562 
10563 /* Line 1806 of yacc.c */
10564 #line 4312 "parse.y"
10565  {ifndef_ripper((yyval.id) = keyword__FILE__);}
10566  break;
10567 
10568  case 528:
10569 
10570 /* Line 1806 of yacc.c */
10571 #line 4313 "parse.y"
10572  {ifndef_ripper((yyval.id) = keyword__LINE__);}
10573  break;
10574 
10575  case 529:
10576 
10577 /* Line 1806 of yacc.c */
10578 #line 4314 "parse.y"
10579  {ifndef_ripper((yyval.id) = keyword__ENCODING__);}
10580  break;
10581 
10582  case 530:
10583 
10584 /* Line 1806 of yacc.c */
10585 #line 4318 "parse.y"
10586  {
10587  /*%%%*/
10588  if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10589  /*%
10590  if (id_is_var(get_id($1))) {
10591  $$ = dispatch1(var_ref, $1);
10592  }
10593  else {
10594  $$ = dispatch1(vcall, $1);
10595  }
10596  %*/
10597  }
10598  break;
10599 
10600  case 531:
10601 
10602 /* Line 1806 of yacc.c */
10603 #line 4331 "parse.y"
10604  {
10605  /*%%%*/
10606  if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10607  /*%
10608  $$ = dispatch1(var_ref, $1);
10609  %*/
10610  }
10611  break;
10612 
10613  case 532:
10614 
10615 /* Line 1806 of yacc.c */
10616 #line 4341 "parse.y"
10617  {
10618  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10619  /*%%%*/
10620  /*%
10621  $$ = dispatch1(var_field, $$);
10622  %*/
10623  }
10624  break;
10625 
10626  case 533:
10627 
10628 /* Line 1806 of yacc.c */
10629 #line 4349 "parse.y"
10630  {
10631  (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10632  /*%%%*/
10633  /*%
10634  $$ = dispatch1(var_field, $$);
10635  %*/
10636  }
10637  break;
10638 
10639  case 536:
10640 
10641 /* Line 1806 of yacc.c */
10642 #line 4363 "parse.y"
10643  {
10644  SET_LEX_STATE(EXPR_BEG);
10645  command_start = TRUE;
10646  }
10647  break;
10648 
10649  case 537:
10650 
10651 /* Line 1806 of yacc.c */
10652 #line 4368 "parse.y"
10653  {
10654  (yyval.node) = (yyvsp[(3) - (4)].node);
10655  }
10656  break;
10657 
10658  case 538:
10659 
10660 /* Line 1806 of yacc.c */
10661 #line 4372 "parse.y"
10662  {
10663  /*%%%*/
10664  (yyval.node) = 0;
10665  /*%
10666  $$ = Qnil;
10667  %*/
10668  }
10669  break;
10670 
10671  case 539:
10672 
10673 /* Line 1806 of yacc.c */
10674 #line 4382 "parse.y"
10675  {
10676  /*%%%*/
10677  (yyval.node) = (yyvsp[(2) - (3)].node);
10678  /*%
10679  $$ = dispatch1(paren, $2);
10680  %*/
10681  SET_LEX_STATE(EXPR_BEG);
10682  command_start = TRUE;
10683  }
10684  break;
10685 
10686  case 540:
10687 
10688 /* Line 1806 of yacc.c */
10689 #line 4391 "parse.y"
10690  {
10691  (yyval.num) = parser->in_kwarg;
10692  parser->in_kwarg = 1;
10693  lex_state |= EXPR_LABEL; /* force for args */
10694  }
10695  break;
10696 
10697  case 541:
10698 
10699 /* Line 1806 of yacc.c */
10700 #line 4397 "parse.y"
10701  {
10702  parser->in_kwarg = !!(yyvsp[(1) - (3)].num);
10703  (yyval.node) = (yyvsp[(2) - (3)].node);
10704  SET_LEX_STATE(EXPR_BEG);
10705  command_start = TRUE;
10706  }
10707  break;
10708 
10709  case 542:
10710 
10711 /* Line 1806 of yacc.c */
10712 #line 4406 "parse.y"
10713  {
10714  (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id));
10715  }
10716  break;
10717 
10718  case 543:
10719 
10720 /* Line 1806 of yacc.c */
10721 #line 4410 "parse.y"
10722  {
10723  (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
10724  }
10725  break;
10726 
10727  case 544:
10728 
10729 /* Line 1806 of yacc.c */
10730 #line 4414 "parse.y"
10731  {
10732  (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
10733  }
10734  break;
10735 
10736  case 545:
10737 
10738 /* Line 1806 of yacc.c */
10739 #line 4418 "parse.y"
10740  {
10741  (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
10742  }
10743  break;
10744 
10745  case 546:
10746 
10747 /* Line 1806 of yacc.c */
10748 #line 4424 "parse.y"
10749  {
10750  (yyval.node) = (yyvsp[(2) - (2)].node);
10751  }
10752  break;
10753 
10754  case 547:
10755 
10756 /* Line 1806 of yacc.c */
10757 #line 4428 "parse.y"
10758  {
10759  (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
10760  }
10761  break;
10762 
10763  case 548:
10764 
10765 /* Line 1806 of yacc.c */
10766 #line 4434 "parse.y"
10767  {
10768  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node));
10769  }
10770  break;
10771 
10772  case 549:
10773 
10774 /* Line 1806 of yacc.c */
10775 #line 4438 "parse.y"
10776  {
10777  (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node));
10778  }
10779  break;
10780 
10781  case 550:
10782 
10783 /* Line 1806 of yacc.c */
10784 #line 4442 "parse.y"
10785  {
10786  (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node));
10787  }
10788  break;
10789 
10790  case 551:
10791 
10792 /* Line 1806 of yacc.c */
10793 #line 4446 "parse.y"
10794  {
10795  (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10796  }
10797  break;
10798 
10799  case 552:
10800 
10801 /* Line 1806 of yacc.c */
10802 #line 4450 "parse.y"
10803  {
10804  (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
10805  }
10806  break;
10807 
10808  case 553:
10809 
10810 /* Line 1806 of yacc.c */
10811 #line 4454 "parse.y"
10812  {
10813  (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10814  }
10815  break;
10816 
10817  case 554:
10818 
10819 /* Line 1806 of yacc.c */
10820 #line 4458 "parse.y"
10821  {
10822  (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node));
10823  }
10824  break;
10825 
10826  case 555:
10827 
10828 /* Line 1806 of yacc.c */
10829 #line 4462 "parse.y"
10830  {
10831  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
10832  }
10833  break;
10834 
10835  case 556:
10836 
10837 /* Line 1806 of yacc.c */
10838 #line 4466 "parse.y"
10839  {
10840  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10841  }
10842  break;
10843 
10844  case 557:
10845 
10846 /* Line 1806 of yacc.c */
10847 #line 4470 "parse.y"
10848  {
10849  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node));
10850  }
10851  break;
10852 
10853  case 558:
10854 
10855 /* Line 1806 of yacc.c */
10856 #line 4474 "parse.y"
10857  {
10858  (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
10859  }
10860  break;
10861 
10862  case 559:
10863 
10864 /* Line 1806 of yacc.c */
10865 #line 4478 "parse.y"
10866  {
10867  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node));
10868  }
10869  break;
10870 
10871  case 560:
10872 
10873 /* Line 1806 of yacc.c */
10874 #line 4482 "parse.y"
10875  {
10876  (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
10877  }
10878  break;
10879 
10880  case 561:
10881 
10882 /* Line 1806 of yacc.c */
10883 #line 4486 "parse.y"
10884  {
10885  (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
10886  }
10887  break;
10888 
10889  case 562:
10890 
10891 /* Line 1806 of yacc.c */
10892 #line 4490 "parse.y"
10893  {
10894  (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
10895  (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyval.node));
10896  }
10897  break;
10898 
10899  case 563:
10900 
10901 /* Line 1806 of yacc.c */
10902 #line 4497 "parse.y"
10903  {
10904  /*%%%*/
10905  yyerror("formal argument cannot be a constant");
10906  (yyval.id) = 0;
10907  /*%
10908  $$ = dispatch1(param_error, $1);
10909  ripper_error();
10910  %*/
10911  }
10912  break;
10913 
10914  case 564:
10915 
10916 /* Line 1806 of yacc.c */
10917 #line 4507 "parse.y"
10918  {
10919  /*%%%*/
10920  yyerror("formal argument cannot be an instance variable");
10921  (yyval.id) = 0;
10922  /*%
10923  $$ = dispatch1(param_error, $1);
10924  ripper_error();
10925  %*/
10926  }
10927  break;
10928 
10929  case 565:
10930 
10931 /* Line 1806 of yacc.c */
10932 #line 4517 "parse.y"
10933  {
10934  /*%%%*/
10935  yyerror("formal argument cannot be a global variable");
10936  (yyval.id) = 0;
10937  /*%
10938  $$ = dispatch1(param_error, $1);
10939  ripper_error();
10940  %*/
10941  }
10942  break;
10943 
10944  case 566:
10945 
10946 /* Line 1806 of yacc.c */
10947 #line 4527 "parse.y"
10948  {
10949  /*%%%*/
10950  yyerror("formal argument cannot be a class variable");
10951  (yyval.id) = 0;
10952  /*%
10953  $$ = dispatch1(param_error, $1);
10954  ripper_error();
10955  %*/
10956  }
10957  break;
10958 
10959  case 568:
10960 
10961 /* Line 1806 of yacc.c */
10962 #line 4540 "parse.y"
10963  {
10964  formal_argument(get_id((yyvsp[(1) - (1)].id)));
10965  (yyval.id) = (yyvsp[(1) - (1)].id);
10966  }
10967  break;
10968 
10969  case 569:
10970 
10971 /* Line 1806 of yacc.c */
10972 #line 4547 "parse.y"
10973  {
10974  ID id = get_id((yyvsp[(1) - (1)].id));
10975  arg_var(id);
10976  current_arg = id;
10977  (yyval.id) = (yyvsp[(1) - (1)].id);
10978  }
10979  break;
10980 
10981  case 570:
10982 
10983 /* Line 1806 of yacc.c */
10984 #line 4556 "parse.y"
10985  {
10986  current_arg = 0;
10987  /*%%%*/
10988  (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
10989  /*%
10990  $$ = get_value($1);
10991  %*/
10992  }
10993  break;
10994 
10995  case 571:
10996 
10997 /* Line 1806 of yacc.c */
10998 #line 4565 "parse.y"
10999  {
11000  ID tid = internal_id();
11001  arg_var(tid);
11002  /*%%%*/
11003  if (dyna_in_block()) {
11004  (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
11005  }
11006  else {
11007  (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
11008  }
11009  (yyval.node) = NEW_ARGS_AUX(tid, 1);
11010  (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
11011  /*%
11012  $$ = dispatch1(mlhs_paren, $2);
11013  %*/
11014  }
11015  break;
11016 
11017  case 573:
11018 
11019 /* Line 1806 of yacc.c */
11020 #line 4591 "parse.y"
11021  {
11022  /*%%%*/
11023  (yyval.node) = (yyvsp[(1) - (3)].node);
11024  (yyval.node)->nd_plen++;
11025  (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
11026  rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
11027  /*%
11028  $$ = rb_ary_push($1, $3);
11029  %*/
11030  }
11031  break;
11032 
11033  case 574:
11034 
11035 /* Line 1806 of yacc.c */
11036 #line 4605 "parse.y"
11037  {
11038  ID id = get_id((yyvsp[(1) - (1)].id));
11039  arg_var(formal_argument(id));
11040  current_arg = id;
11041  (yyval.id) = (yyvsp[(1) - (1)].id);
11042  }
11043  break;
11044 
11045  case 575:
11046 
11047 /* Line 1806 of yacc.c */
11048 #line 4614 "parse.y"
11049  {
11050  current_arg = 0;
11051  (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
11052  /*%%%*/
11053  (yyval.node) = new_kw_arg((yyval.node));
11054  /*%
11055  $$ = rb_assoc_new($$, $2);
11056  %*/
11057  }
11058  break;
11059 
11060  case 576:
11061 
11062 /* Line 1806 of yacc.c */
11063 #line 4624 "parse.y"
11064  {
11065  current_arg = 0;
11066  (yyval.node) = assignable((yyvsp[(1) - (1)].id), (NODE *)-1);
11067  /*%%%*/
11068  (yyval.node) = new_kw_arg((yyval.node));
11069  /*%
11070  $$ = rb_assoc_new($$, 0);
11071  %*/
11072  }
11073  break;
11074 
11075  case 577:
11076 
11077 /* Line 1806 of yacc.c */
11078 #line 4636 "parse.y"
11079  {
11080  (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
11081  /*%%%*/
11082  (yyval.node) = new_kw_arg((yyval.node));
11083  /*%
11084  $$ = rb_assoc_new($$, $2);
11085  %*/
11086  }
11087  break;
11088 
11089  case 578:
11090 
11091 /* Line 1806 of yacc.c */
11092 #line 4645 "parse.y"
11093  {
11094  (yyval.node) = assignable((yyvsp[(1) - (1)].id), (NODE *)-1);
11095  /*%%%*/
11096  (yyval.node) = new_kw_arg((yyval.node));
11097  /*%
11098  $$ = rb_assoc_new($$, 0);
11099  %*/
11100  }
11101  break;
11102 
11103  case 579:
11104 
11105 /* Line 1806 of yacc.c */
11106 #line 4656 "parse.y"
11107  {
11108  /*%%%*/
11109  (yyval.node) = (yyvsp[(1) - (1)].node);
11110  /*%
11111  $$ = rb_ary_new3(1, $1);
11112  %*/
11113  }
11114  break;
11115 
11116  case 580:
11117 
11118 /* Line 1806 of yacc.c */
11119 #line 4664 "parse.y"
11120  {
11121  /*%%%*/
11122  (yyval.node) = kwd_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
11123  /*%
11124  $$ = rb_ary_push($1, $3);
11125  %*/
11126  }
11127  break;
11128 
11129  case 581:
11130 
11131 /* Line 1806 of yacc.c */
11132 #line 4675 "parse.y"
11133  {
11134  /*%%%*/
11135  (yyval.node) = (yyvsp[(1) - (1)].node);
11136  /*%
11137  $$ = rb_ary_new3(1, $1);
11138  %*/
11139  }
11140  break;
11141 
11142  case 582:
11143 
11144 /* Line 1806 of yacc.c */
11145 #line 4683 "parse.y"
11146  {
11147  /*%%%*/
11148  (yyval.node) = kwd_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
11149  /*%
11150  $$ = rb_ary_push($1, $3);
11151  %*/
11152  }
11153  break;
11154 
11155  case 585:
11156 
11157 /* Line 1806 of yacc.c */
11158 #line 4697 "parse.y"
11159  {
11160  shadowing_lvar(get_id((yyvsp[(2) - (2)].id)));
11161  (yyval.id) = (yyvsp[(2) - (2)].id);
11162  }
11163  break;
11164 
11165  case 586:
11166 
11167 /* Line 1806 of yacc.c */
11168 #line 4702 "parse.y"
11169  {
11170  (yyval.id) = internal_id();
11171  arg_var((yyval.id));
11172  }
11173  break;
11174 
11175  case 587:
11176 
11177 /* Line 1806 of yacc.c */
11178 #line 4709 "parse.y"
11179  {
11180  current_arg = 0;
11181  (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
11182  /*%%%*/
11183  (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
11184  /*%
11185  $$ = rb_assoc_new($$, $3);
11186  %*/
11187  }
11188  break;
11189 
11190  case 588:
11191 
11192 /* Line 1806 of yacc.c */
11193 #line 4721 "parse.y"
11194  {
11195  current_arg = 0;
11196  (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
11197  /*%%%*/
11198  (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
11199  /*%
11200  $$ = rb_assoc_new($$, $3);
11201  %*/
11202  }
11203  break;
11204 
11205  case 589:
11206 
11207 /* Line 1806 of yacc.c */
11208 #line 4733 "parse.y"
11209  {
11210  /*%%%*/
11211  (yyval.node) = (yyvsp[(1) - (1)].node);
11212  /*%
11213  $$ = rb_ary_new3(1, $1);
11214  %*/
11215  }
11216  break;
11217 
11218  case 590:
11219 
11220 /* Line 1806 of yacc.c */
11221 #line 4741 "parse.y"
11222  {
11223  /*%%%*/
11224  NODE *opts = (yyvsp[(1) - (3)].node);
11225 
11226  while (opts->nd_next) {
11227  opts = opts->nd_next;
11228  }
11229  opts->nd_next = (yyvsp[(3) - (3)].node);
11230  (yyval.node) = (yyvsp[(1) - (3)].node);
11231  /*%
11232  $$ = rb_ary_push($1, $3);
11233  %*/
11234  }
11235  break;
11236 
11237  case 591:
11238 
11239 /* Line 1806 of yacc.c */
11240 #line 4757 "parse.y"
11241  {
11242  /*%%%*/
11243  (yyval.node) = (yyvsp[(1) - (1)].node);
11244  /*%
11245  $$ = rb_ary_new3(1, $1);
11246  %*/
11247  }
11248  break;
11249 
11250  case 592:
11251 
11252 /* Line 1806 of yacc.c */
11253 #line 4765 "parse.y"
11254  {
11255  /*%%%*/
11256  NODE *opts = (yyvsp[(1) - (3)].node);
11257 
11258  while (opts->nd_next) {
11259  opts = opts->nd_next;
11260  }
11261  opts->nd_next = (yyvsp[(3) - (3)].node);
11262  (yyval.node) = (yyvsp[(1) - (3)].node);
11263  /*%
11264  $$ = rb_ary_push($1, $3);
11265  %*/
11266  }
11267  break;
11268 
11269  case 595:
11270 
11271 /* Line 1806 of yacc.c */
11272 #line 4785 "parse.y"
11273  {
11274  /*%%%*/
11275  if (!is_local_id((yyvsp[(2) - (2)].id)))
11276  yyerror("rest argument must be local variable");
11277  /*% %*/
11278  arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
11279  /*%%%*/
11280  (yyval.id) = (yyvsp[(2) - (2)].id);
11281  /*%
11282  $$ = dispatch1(rest_param, $2);
11283  %*/
11284  }
11285  break;
11286 
11287  case 596:
11288 
11289 /* Line 1806 of yacc.c */
11290 #line 4798 "parse.y"
11291  {
11292  /*%%%*/
11293  (yyval.id) = internal_id();
11294  arg_var((yyval.id));
11295  /*%
11296  $$ = dispatch1(rest_param, Qnil);
11297  %*/
11298  }
11299  break;
11300 
11301  case 599:
11302 
11303 /* Line 1806 of yacc.c */
11304 #line 4813 "parse.y"
11305  {
11306  /*%%%*/
11307  if (!is_local_id((yyvsp[(2) - (2)].id)))
11308  yyerror("block argument must be local variable");
11309  else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
11310  yyerror("duplicated block argument name");
11311  /*% %*/
11312  arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
11313  /*%%%*/
11314  (yyval.id) = (yyvsp[(2) - (2)].id);
11315  /*%
11316  $$ = dispatch1(blockarg, $2);
11317  %*/
11318  }
11319  break;
11320 
11321  case 600:
11322 
11323 /* Line 1806 of yacc.c */
11324 #line 4830 "parse.y"
11325  {
11326  (yyval.id) = (yyvsp[(2) - (2)].id);
11327  }
11328  break;
11329 
11330  case 601:
11331 
11332 /* Line 1806 of yacc.c */
11333 #line 4834 "parse.y"
11334  {
11335  /*%%%*/
11336  (yyval.id) = 0;
11337  /*%
11338  $$ = Qundef;
11339  %*/
11340  }
11341  break;
11342 
11343  case 602:
11344 
11345 /* Line 1806 of yacc.c */
11346 #line 4844 "parse.y"
11347  {
11348  /*%%%*/
11349  value_expr((yyvsp[(1) - (1)].node));
11350  (yyval.node) = (yyvsp[(1) - (1)].node);
11351  if (!(yyval.node)) (yyval.node) = NEW_NIL();
11352  /*%
11353  $$ = $1;
11354  %*/
11355  }
11356  break;
11357 
11358  case 603:
11359 
11360 /* Line 1806 of yacc.c */
11361 #line 4853 "parse.y"
11362  {SET_LEX_STATE(EXPR_BEG);}
11363  break;
11364 
11365  case 604:
11366 
11367 /* Line 1806 of yacc.c */
11368 #line 4854 "parse.y"
11369  {
11370  /*%%%*/
11371  if ((yyvsp[(3) - (4)].node) == 0) {
11372  yyerror("can't define singleton method for ().");
11373  }
11374  else {
11375  switch (nd_type((yyvsp[(3) - (4)].node))) {
11376  case NODE_STR:
11377  case NODE_DSTR:
11378  case NODE_XSTR:
11379  case NODE_DXSTR:
11380  case NODE_DREGX:
11381  case NODE_LIT:
11382  case NODE_ARRAY:
11383  case NODE_ZARRAY:
11384  yyerror("can't define singleton method for literals");
11385  default:
11386  value_expr((yyvsp[(3) - (4)].node));
11387  break;
11388  }
11389  }
11390  (yyval.node) = (yyvsp[(3) - (4)].node);
11391  /*%
11392  $$ = dispatch1(paren, $3);
11393  %*/
11394  }
11395  break;
11396 
11397  case 606:
11398 
11399 /* Line 1806 of yacc.c */
11400 #line 4884 "parse.y"
11401  {
11402  /*%%%*/
11403  (yyval.node) = (yyvsp[(1) - (2)].node);
11404  /*%
11405  $$ = dispatch1(assoclist_from_args, $1);
11406  %*/
11407  }
11408  break;
11409 
11410  case 608:
11411 
11412 /* Line 1806 of yacc.c */
11413 #line 4901 "parse.y"
11414  {
11415  /*%%%*/
11416  NODE *assocs = (yyvsp[(1) - (3)].node);
11417  NODE *tail = (yyvsp[(3) - (3)].node);
11418  if (!assocs) {
11419  assocs = tail;
11420  }
11421  else if (tail) {
11422  if (assocs->nd_head &&
11423  !tail->nd_head && nd_type(tail->nd_next) == NODE_ARRAY &&
11424  nd_type(tail->nd_next->nd_head) == NODE_HASH) {
11425  /* DSTAR */
11426  tail = tail->nd_next->nd_head->nd_head;
11427  }
11428  assocs = list_concat(assocs, tail);
11429  }
11430  (yyval.node) = assocs;
11431  /*%
11432  $$ = rb_ary_push($1, $3);
11433  %*/
11434  }
11435  break;
11436 
11437  case 609:
11438 
11439 /* Line 1806 of yacc.c */
11440 #line 4925 "parse.y"
11441  {
11442  /*%%%*/
11443  if (nd_type((yyvsp[(1) - (3)].node)) == NODE_STR) {
11444  nd_set_type((yyvsp[(1) - (3)].node), NODE_LIT);
11445  (yyvsp[(1) - (3)].node)->nd_lit = rb_fstring((yyvsp[(1) - (3)].node)->nd_lit);
11446  }
11447  (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
11448  /*%
11449  $$ = dispatch2(assoc_new, $1, $3);
11450  %*/
11451  }
11452  break;
11453 
11454  case 610:
11455 
11456 /* Line 1806 of yacc.c */
11457 #line 4937 "parse.y"
11458  {
11459  /*%%%*/
11460  (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
11461  /*%
11462  $$ = dispatch2(assoc_new, $1, $2);
11463  %*/
11464  }
11465  break;
11466 
11467  case 611:
11468 
11469 /* Line 1806 of yacc.c */
11470 #line 4945 "parse.y"
11471  {
11472  /*%%%*/
11473  (yyval.node) = list_append(NEW_LIST(dsym_node((yyvsp[(2) - (4)].node))), (yyvsp[(4) - (4)].node));
11474  /*%
11475  $$ = dispatch2(assoc_new, dispatch1(dyna_symbol, $2), $4);
11476  %*/
11477  }
11478  break;
11479 
11480  case 612:
11481 
11482 /* Line 1806 of yacc.c */
11483 #line 4953 "parse.y"
11484  {
11485  /*%%%*/
11486  if (nd_type((yyvsp[(2) - (2)].node)) == NODE_HASH &&
11487  !((yyvsp[(2) - (2)].node)->nd_head && (yyvsp[(2) - (2)].node)->nd_head->nd_alen))
11488  (yyval.node) = 0;
11489  else
11490  (yyval.node) = list_append(NEW_LIST(0), (yyvsp[(2) - (2)].node));
11491  /*%
11492  $$ = dispatch1(assoc_splat, $2);
11493  %*/
11494  }
11495  break;
11496 
11497  case 625:
11498 
11499 /* Line 1806 of yacc.c */
11500 #line 4995 "parse.y"
11501  {
11502  /*%%%*/
11503  (yyval.id) = '.';
11504  /*%
11505  $$ = ripper_id2sym('.');
11506  %*/
11507  }
11508  break;
11509 
11510  case 626:
11511 
11512 /* Line 1806 of yacc.c */
11513 #line 5003 "parse.y"
11514  {
11515  /*%%%*/
11516  (yyval.id) = tANDDOT;
11517  /*%
11518  $$ = ripper_id2sym(idANDDOT);
11519  %*/
11520  }
11521  break;
11522 
11523  case 628:
11524 
11525 /* Line 1806 of yacc.c */
11526 #line 5014 "parse.y"
11527  {
11528  /*%%%*/
11529  (yyval.id) = tCOLON2;
11530  /*%
11531  $$ = ripper_id2sym(idCOLON2);
11532  %*/
11533  }
11534  break;
11535 
11536  case 638:
11537 
11538 /* Line 1806 of yacc.c */
11539 #line 5042 "parse.y"
11540  {yyerrok;}
11541  break;
11542 
11543  case 641:
11544 
11545 /* Line 1806 of yacc.c */
11546 #line 5047 "parse.y"
11547  {yyerrok;}
11548  break;
11549 
11550  case 642:
11551 
11552 /* Line 1806 of yacc.c */
11553 #line 5051 "parse.y"
11554  {
11555  /*%%%*/
11556  (yyval.node) = 0;
11557  /*%
11558  $$ = Qundef;
11559  %*/
11560  }
11561  break;
11562 
11563 
11564 
11565 /* Line 1806 of yacc.c */
11566 #line 11565 "parse.c"
11567  default: break;
11568  }
11569  /* User semantic actions sometimes alter yychar, and that requires
11570  that yytoken be updated with the new translation. We take the
11571  approach of translating immediately before every use of yytoken.
11572  One alternative is translating here after every semantic action,
11573  but that translation would be missed if the semantic action invokes
11574  YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
11575  if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
11576  incorrect destructor might then be invoked immediately. In the
11577  case of YYERROR or YYBACKUP, subsequent parser actions might lead
11578  to an incorrect destructor call or verbose syntax error message
11579  before the lookahead is translated. */
11580  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
11581 
11582  YYPOPSTACK (yylen);
11583  yylen = 0;
11584  YY_STACK_PRINT (yyss, yyssp);
11585 
11586  *++yyvsp = yyval;
11587 
11588  /* Now `shift' the result of the reduction. Determine what state
11589  that goes to, based on the state we popped back to and the rule
11590  number reduced by. */
11591 
11592  yyn = yyr1[yyn];
11593 
11594  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
11595  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
11596  yystate = yytable[yystate];
11597  else
11598  yystate = yydefgoto[yyn - YYNTOKENS];
11599 
11600  goto yynewstate;
11601 
11602 
11603 /*------------------------------------.
11604 | yyerrlab -- here on detecting error |
11605 `------------------------------------*/
11606 yyerrlab:
11607  /* Make sure we have latest lookahead translation. See comments at
11608  user semantic actions for why this is necessary. */
11609  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
11610 
11611  /* If not already recovering from an error, report this error. */
11612  if (!yyerrstatus)
11613  {
11614  ++yynerrs;
11615 #if ! YYERROR_VERBOSE
11616  parser_yyerror (parser, YY_("syntax error"));
11617 #else
11618 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
11619  yyssp, yytoken)
11620  {
11621  char const *yymsgp = YY_("syntax error");
11622  int yysyntax_error_status;
11623  yysyntax_error_status = YYSYNTAX_ERROR;
11624  if (yysyntax_error_status == 0)
11625  yymsgp = yymsg;
11626  else if (yysyntax_error_status == 1)
11627  {
11628  if (yymsg != yymsgbuf)
11629  YYSTACK_FREE (yymsg);
11630  yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
11631  if (!yymsg)
11632  {
11633  yymsg = yymsgbuf;
11634  yymsg_alloc = sizeof yymsgbuf;
11635  yysyntax_error_status = 2;
11636  }
11637  else
11638  {
11639  yysyntax_error_status = YYSYNTAX_ERROR;
11640  yymsgp = yymsg;
11641  }
11642  }
11643  parser_yyerror (parser, yymsgp);
11644  if (yysyntax_error_status == 2)
11645  goto yyexhaustedlab;
11646  }
11647 # undef YYSYNTAX_ERROR
11648 #endif
11649  }
11650 
11651 
11652 
11653  if (yyerrstatus == 3)
11654  {
11655  /* If just tried and failed to reuse lookahead token after an
11656  error, discard it. */
11657 
11658  if (yychar <= YYEOF)
11659  {
11660  /* Return failure if at end of input. */
11661  if (yychar == YYEOF)
11662  YYABORT;
11663  }
11664  else
11665  {
11666  yydestruct ("Error: discarding",
11667  yytoken, &yylval, parser);
11668  yychar = YYEMPTY;
11669  }
11670  }
11671 
11672  /* Else will try to reuse lookahead token after shifting the error
11673  token. */
11674  goto yyerrlab1;
11675 
11676 
11677 /*---------------------------------------------------.
11678 | yyerrorlab -- error raised explicitly by YYERROR. |
11679 `---------------------------------------------------*/
11680 yyerrorlab:
11681 
11682  /* Pacify compilers like GCC when the user code never invokes
11683  YYERROR and the label yyerrorlab therefore never appears in user
11684  code. */
11685  if (/*CONSTCOND*/ 0)
11686  goto yyerrorlab;
11687 
11688  /* Do not reclaim the symbols of the rule which action triggered
11689  this YYERROR. */
11690  YYPOPSTACK (yylen);
11691  yylen = 0;
11692  YY_STACK_PRINT (yyss, yyssp);
11693  yystate = *yyssp;
11694  goto yyerrlab1;
11695 
11696 
11697 /*-------------------------------------------------------------.
11698 | yyerrlab1 -- common code for both syntax error and YYERROR. |
11699 `-------------------------------------------------------------*/
11700 yyerrlab1:
11701  yyerrstatus = 3; /* Each real token shifted decrements this. */
11702 
11703  for (;;)
11704  {
11705  yyn = yypact[yystate];
11706  if (!yypact_value_is_default (yyn))
11707  {
11708  yyn += YYTERROR;
11709  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
11710  {
11711  yyn = yytable[yyn];
11712  if (0 < yyn)
11713  break;
11714  }
11715  }
11716 
11717  /* Pop the current state because it cannot handle the error token. */
11718  if (yyssp == yyss)
11719  YYABORT;
11720 
11721 
11722  yydestruct ("Error: popping",
11723  yystos[yystate], yyvsp, parser);
11724  YYPOPSTACK (1);
11725  yystate = *yyssp;
11726  YY_STACK_PRINT (yyss, yyssp);
11727  }
11728 
11729  *++yyvsp = yylval;
11730 
11731 
11732  /* Shift the error token. */
11733  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
11734 
11735  yystate = yyn;
11736  goto yynewstate;
11737 
11738 
11739 /*-------------------------------------.
11740 | yyacceptlab -- YYACCEPT comes here. |
11741 `-------------------------------------*/
11742 yyacceptlab:
11743  yyresult = 0;
11744  goto yyreturn;
11745 
11746 /*-----------------------------------.
11747 | yyabortlab -- YYABORT comes here. |
11748 `-----------------------------------*/
11749 yyabortlab:
11750  yyresult = 1;
11751  goto yyreturn;
11752 
11753 #if !defined(yyoverflow) || YYERROR_VERBOSE
11754 /*-------------------------------------------------.
11755 | yyexhaustedlab -- memory exhaustion comes here. |
11756 `-------------------------------------------------*/
11757 yyexhaustedlab:
11758  parser_yyerror (parser, YY_("memory exhausted"));
11759  yyresult = 2;
11760  /* Fall through. */
11761 #endif
11762 
11763 yyreturn:
11764  if (yychar != YYEMPTY)
11765  {
11766  /* Make sure we have latest lookahead translation. See comments at
11767  user semantic actions for why this is necessary. */
11768  yytoken = YYTRANSLATE (yychar);
11769  yydestruct ("Cleanup: discarding lookahead",
11770  yytoken, &yylval, parser);
11771  }
11772  /* Do not reclaim the symbols of the rule which action triggered
11773  this YYABORT or YYACCEPT. */
11774  YYPOPSTACK (yylen);
11775  YY_STACK_PRINT (yyss, yyssp);
11776  while (yyssp != yyss)
11777  {
11778  yydestruct ("Cleanup: popping",
11779  yystos[*yyssp], yyvsp, parser);
11780  YYPOPSTACK (1);
11781  }
11782 #ifndef yyoverflow
11783  if (yyss != yyssa)
11784  YYSTACK_FREE (yyss);
11785 #endif
11786 #if YYERROR_VERBOSE
11787  if (yymsg != yymsgbuf)
11788  YYSTACK_FREE (yymsg);
11789 #endif
11790  /* Make sure YYID is used. */
11791  return YYID (yyresult);
11792 }
11793 
11794 
11795 
11796 /* Line 2067 of yacc.c */
11797 #line 5059 "parse.y"
11798 
11799 # undef parser
11800 # undef yylex
11801 # undef yylval
11802 # define yylval (*parser->lval)
11803 
11804 static int parser_regx_options(struct parser_params*);
11805 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
11806 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
11807 static int parser_parse_string(struct parser_params*,NODE*);
11808 static int parser_here_document(struct parser_params*,NODE*);
11809 
11810 
11811 # define nextc() parser_nextc(parser)
11812 # define pushback(c) parser_pushback(parser, (c))
11813 # define newtok() parser_newtok(parser)
11814 # define tokspace(n) parser_tokspace(parser, (n))
11815 # define tokadd(c) parser_tokadd(parser, (c))
11816 # define tok_hex(numlen) parser_tok_hex(parser, (numlen))
11817 # define read_escape(flags,e) parser_read_escape(parser, (flags), (e))
11818 # define tokadd_escape(e) parser_tokadd_escape(parser, (e))
11819 # define regx_options() parser_regx_options(parser)
11820 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,(f),(t),(p),(n),(e))
11821 # define parse_string(n) parser_parse_string(parser,(n))
11822 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, (c), (enc))
11823 # define here_document(n) parser_here_document(parser,(n))
11824 # define heredoc_identifier() parser_heredoc_identifier(parser)
11825 # define heredoc_restore(n) parser_heredoc_restore(parser,(n))
11826 # define whole_match_p(e,l,i) parser_whole_match_p(parser,(e),(l),(i))
11827 # define number_literal_suffix(f) parser_number_literal_suffix(parser, (f))
11828 # define set_number_literal(v, t, f) parser_set_number_literal(parser, (v), (t), (f))
11829 # define set_integer_literal(v, f) parser_set_integer_literal(parser, (v), (f))
11830 
11831 #ifndef RIPPER
11832 # define set_yylval_str(x) (yylval.node = NEW_STR(x))
11833 # define set_yylval_num(x) (yylval.num = (x))
11834 # define set_yylval_id(x) (yylval.id = (x))
11835 # define set_yylval_name(x) (yylval.id = (x))
11836 # define set_yylval_literal(x) (yylval.node = NEW_LIT(x))
11837 # define set_yylval_node(x) (yylval.node = (x))
11838 # define yylval_id() (yylval.id)
11839 #else
11840 static inline VALUE
11841 ripper_yylval_id(ID x)
11842 {
11843  return ripper_new_yylval(x, ID2SYM(x), 0);
11844 }
11845 # define set_yylval_str(x) (yylval.val = (x))
11846 # define set_yylval_num(x) (yylval.val = ripper_new_yylval((x), 0, 0))
11847 # define set_yylval_id(x) (void)(x)
11848 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
11849 # define set_yylval_literal(x) (void)(x)
11850 # define set_yylval_node(x) (void)(x)
11851 # define yylval_id() yylval.id
11852 #endif
11853 
11854 #ifndef RIPPER
11855 #define ripper_flush(p) (void)(p)
11856 #define dispatch_scan_event(t) ((void)0)
11857 #define dispatch_delayed_token(t) ((void)0)
11858 #define has_delayed_token() (0)
11859 #else
11860 #define ripper_flush(p) ((p)->tokp = (p)->lex.pcur)
11861 
11862 #define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
11863 
11864 static inline VALUE
11865 intern_sym(const char *name)
11866 {
11867  ID id = rb_intern_const(name);
11868  return ID2SYM(id);
11869 }
11870 
11871 static int
11872 ripper_has_scan_event(struct parser_params *parser)
11873 {
11874 
11875  if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
11876  return lex_p > parser->tokp;
11877 }
11878 
11879 static VALUE
11880 ripper_scan_event_val(struct parser_params *parser, int t)
11881 {
11882  VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
11883  VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
11884  ripper_flush(parser);
11885  return rval;
11886 }
11887 
11888 static void
11889 ripper_dispatch_scan_event(struct parser_params *parser, int t)
11890 {
11891  if (!ripper_has_scan_event(parser)) return;
11892  yylval_rval = ripper_scan_event_val(parser, t);
11893 }
11894 #define dispatch_scan_event(t) ripper_dispatch_scan_event(parser, t)
11895 
11896 static void
11897 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
11898 {
11899  int saved_line = ruby_sourceline;
11900  const char *saved_tokp = parser->tokp;
11901 
11902  ruby_sourceline = parser->delayed_line;
11903  parser->tokp = lex_pbeg + parser->delayed_col;
11904  yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
11905  parser->delayed = Qnil;
11906  ruby_sourceline = saved_line;
11907  parser->tokp = saved_tokp;
11908 }
11909 #define dispatch_delayed_token(t) ripper_dispatch_delayed_token(parser, t)
11910 #define has_delayed_token() (!NIL_P(parser->delayed))
11911 #endif /* RIPPER */
11912 
11913 #include "ruby/regex.h"
11914 #include "ruby/util.h"
11915 
11916 #define parser_encoding_name() (current_enc->name)
11917 #define parser_mbclen() mbclen((lex_p-1),lex_pend,current_enc)
11918 #define is_identchar(p,e,enc) (rb_enc_isalnum((unsigned char)(*(p)),(enc)) || (*(p)) == '_' || !ISASCII(*(p)))
11919 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,current_enc))
11920 
11921 #define parser_isascii() ISASCII(*(lex_p-1))
11922 
11923 static int
11924 token_info_get_column(struct parser_params *parser, const char *pend)
11925 {
11926  int column = 1;
11927  const char *p;
11928  for (p = lex_pbeg; p < pend; p++) {
11929  if (*p == '\t') {
11930  column = (((column - 1) / TAB_WIDTH) + 1) * TAB_WIDTH;
11931  }
11932  column++;
11933  }
11934  return column;
11935 }
11936 
11937 static int
11938 token_info_has_nonspaces(struct parser_params *parser, const char *pend)
11939 {
11940  const char *p;
11941  for (p = lex_pbeg; p < pend; p++) {
11942  if (*p != ' ' && *p != '\t') {
11943  return 1;
11944  }
11945  }
11946  return 0;
11947 }
11948 
11949 static void
11950 token_info_push_gen(struct parser_params *parser, const char *token, size_t len)
11951 {
11952  token_info *ptinfo;
11953  const char *t = lex_p - len;
11954 
11955  if (!parser->token_info_enabled) return;
11956  ptinfo = ALLOC(token_info);
11957  ptinfo->token = token;
11958  ptinfo->linenum = ruby_sourceline;
11959  ptinfo->column = token_info_get_column(parser, t);
11960  ptinfo->nonspc = token_info_has_nonspaces(parser, t);
11961  ptinfo->next = parser->token_info;
11962 
11963  parser->token_info = ptinfo;
11964 }
11965 
11966 static void
11967 token_info_pop_gen(struct parser_params *parser, const char *token, size_t len)
11968 {
11969  int linenum;
11970  token_info *ptinfo = parser->token_info;
11971  const char *t = lex_p - len;
11972 
11973  if (!ptinfo) return;
11974  parser->token_info = ptinfo->next;
11975  linenum = ruby_sourceline;
11976  if (parser->token_info_enabled &&
11977  linenum != ptinfo->linenum && !ptinfo->nonspc &&
11978  !token_info_has_nonspaces(parser, t) &&
11979  token_info_get_column(parser, t) != ptinfo->column) {
11980  rb_warn3L(linenum,
11981  "mismatched indentations at '%s' with '%s' at %d",
11982  WARN_S(token), WARN_S(ptinfo->token), WARN_I(ptinfo->linenum));
11983  }
11984 
11985  xfree(ptinfo);
11986 }
11987 
11988 static int
11989 parser_precise_mbclen(struct parser_params *parser, const char *p)
11990 {
11992  if (!MBCLEN_CHARFOUND_P(len)) {
11993  compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
11994  return -1;
11995  }
11996  return len;
11997 }
11998 
11999 static int
12000 parser_yyerror(struct parser_params *parser, const char *msg)
12001 {
12002 #ifndef RIPPER
12003  const int max_line_margin = 30;
12004  const char *p, *pe;
12005  const char *pre = "", *post = "";
12006  const char *code = "", *caret = "", *newline = "";
12007  const char *lim;
12008  char *buf;
12009  long len;
12010  int i;
12011 
12012  p = lex_p;
12013  lim = p - lex_pbeg > max_line_margin ? p - max_line_margin : lex_pbeg;
12014  while (lim < p) {
12015  if (*(p-1) == '\n') break;
12016  p--;
12017  }
12018 
12019  pe = lex_p;
12020  lim = lex_pend - pe > max_line_margin ? pe + max_line_margin : lex_pend;
12021  while (pe < lim) {
12022  if (*pe == '\n') break;
12023  pe++;
12024  }
12025 
12026  len = pe - p;
12027  if (len > 4) {
12028  char *p2;
12029 
12030  if (len > max_line_margin * 2 + 10) {
12031  if (lex_p - p > max_line_margin) {
12032  p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
12033  pre = "...";
12034  }
12035  if (pe - lex_p > max_line_margin) {
12036  pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
12037  post = "...";
12038  }
12039  len = pe - p;
12040  }
12041  i = (int)(lex_p - p);
12042  buf = ALLOCA_N(char, i+2);
12043  code = p;
12044  caret = p2 = buf;
12045  while (i-- > 0) {
12046  *p2++ = *p++ == '\t' ? '\t' : ' ';
12047  }
12048  *p2++ = '^';
12049  *p2 = '\0';
12050  newline = "\n";
12051  }
12052  else {
12053  len = 0;
12054  }
12055  compile_error(PARSER_ARG "%s%s""%s%.*s%s%s""%s%s",
12056  msg, newline,
12057  pre, (int)len, code, post, newline,
12058  pre, caret);
12059 #else
12060  dispatch1(parse_error, STR_NEW2(msg));
12061  ripper_error();
12062 #endif /* !RIPPER */
12063  return 0;
12064 }
12065 
12066 static void parser_prepare(struct parser_params *parser);
12067 
12068 #ifndef RIPPER
12069 static VALUE
12071 {
12072  ID script_lines;
12073  CONST_ID(script_lines, "SCRIPT_LINES__");
12074  if (rb_const_defined_at(rb_cObject, script_lines)) {
12075  VALUE hash = rb_const_get_at(rb_cObject, script_lines);
12076  if (RB_TYPE_P(hash, T_HASH)) {
12077  VALUE lines = rb_ary_new();
12078  rb_hash_aset(hash, fname, lines);
12079  return lines;
12080  }
12081  }
12082  return 0;
12083 }
12084 
12085 static VALUE
12086 coverage(VALUE fname, int n)
12087 {
12088  VALUE coverages = rb_get_coverages();
12089  if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
12090  VALUE lines = n > 0 ? rb_ary_tmp_new_fill(n) : rb_ary_tmp_new(0);
12091  rb_hash_aset(coverages, fname, lines);
12092  return lines;
12093  }
12094  return 0;
12095 }
12096 
12097 static int
12099 {
12100  return strcmp(ruby_sourcefile, "-e") == 0;
12101 }
12102 
12103 static VALUE
12105 {
12106  int n;
12107  NODE *tree;
12108  struct parser_params *parser = (struct parser_params *)arg;
12109  VALUE cov = Qfalse;
12110 
12111  if (!compile_for_eval && rb_safe_level() == 0) {
12113  if (ruby_debug_lines && ruby_sourceline > 0) {
12114  VALUE str = STR_NEW0();
12115  n = ruby_sourceline;
12116  do {
12118  } while (--n);
12119  }
12120 
12121  if (!e_option_supplied(parser)) {
12123  cov = Qtrue;
12124  }
12125  }
12126 
12127  parser_prepare(parser);
12128 #ifndef RIPPER
12129 #define RUBY_DTRACE_PARSE_HOOK(name) \
12130  if (RUBY_DTRACE_PARSE_##name##_ENABLED()) { \
12131  RUBY_DTRACE_PARSE_##name(ruby_sourcefile, ruby_sourceline); \
12132  }
12133  RUBY_DTRACE_PARSE_HOOK(BEGIN);
12134 #endif
12135  n = yyparse((void*)parser);
12136 #ifndef RIPPER
12138 #endif
12139  ruby_debug_lines = 0;
12140  ruby_coverage = 0;
12141 
12142  lex_strterm = 0;
12143  lex_p = lex_pbeg = lex_pend = 0;
12144  lex_lastline = lex_nextline = 0;
12145  if (parser->error_p) {
12146  VALUE mesg = parser->error_buffer;
12147  if (!mesg) {
12148  mesg = rb_class_new_instance(0, 0, rb_eSyntaxError);
12149  }
12150  rb_set_errinfo(mesg);
12151  return 0;
12152  }
12153  tree = ruby_eval_tree;
12154  if (!tree) {
12155  tree = NEW_NIL();
12156  }
12157  else {
12158  VALUE opt = parser->compile_option;
12159  if (!opt) opt = rb_obj_hide(rb_ident_hash_new());
12160  rb_hash_aset(opt, rb_sym_intern_ascii_cstr("coverage_enabled"), cov);
12161  tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body, opt);
12162  }
12163  return (VALUE)tree;
12164 }
12165 
12166 static NODE*
12167 yycompile(struct parser_params *parser, VALUE fname, int line)
12168 {
12170  ruby_sourcefile = RSTRING_PTR(fname);
12171  ruby_sourceline = line - 1;
12172  return (NODE *)rb_suppress_tracing(yycompile0, (VALUE)parser);
12173 }
12174 #endif /* !RIPPER */
12175 
12176 static rb_encoding *
12178 {
12179  rb_encoding *enc = rb_enc_get(s);
12180  if (!rb_enc_asciicompat(enc)) {
12181  rb_raise(rb_eArgError, "invalid source encoding");
12182  }
12183  return enc;
12184 }
12185 
12186 static VALUE
12187 lex_get_str(struct parser_params *parser, VALUE s)
12188 {
12189  char *beg, *end, *start;
12190  long len;
12191 
12192  beg = RSTRING_PTR(s);
12193  len = RSTRING_LEN(s);
12194  start = beg;
12195  if (lex_gets_ptr) {
12196  if (len == lex_gets_ptr) return Qnil;
12197  beg += lex_gets_ptr;
12198  len -= lex_gets_ptr;
12199  }
12200  end = memchr(beg, '\n', len);
12201  if (end) len = ++end - beg;
12202  lex_gets_ptr += len;
12203  return rb_str_subseq(s, beg - start, len);
12204 }
12205 
12206 static VALUE
12208 {
12209  VALUE line = (*lex_gets)(parser, lex_input);
12210  if (NIL_P(line)) return line;
12212 #ifndef RIPPER
12213  if (ruby_debug_lines) {
12216  }
12217  if (ruby_coverage) {
12219  }
12220 #endif
12221  return line;
12222 }
12223 
12225 
12226 #ifndef RIPPER
12227 static NODE*
12228 parser_compile_string(VALUE vparser, VALUE fname, VALUE s, int line)
12229 {
12230  struct parser_params *parser;
12231  NODE *node;
12232 
12233  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
12235  lex_gets_ptr = 0;
12237  lex_pbeg = lex_p = lex_pend = 0;
12238 
12239  node = yycompile(parser, fname, line);
12240  RB_GC_GUARD(vparser); /* prohibit tail call optimization */
12241 
12242  return node;
12243 }
12244 
12245 NODE*
12246 rb_compile_string(const char *f, VALUE s, int line)
12247 {
12250 }
12251 
12252 NODE*
12253 rb_parser_compile_string(VALUE vparser, const char *f, VALUE s, int line)
12254 {
12255  return rb_parser_compile_string_path(vparser, rb_filesystem_str_new_cstr(f), s, line);
12256 }
12257 
12258 NODE*
12260 {
12262  return parser_compile_string(vparser, f, s, line);
12263 }
12264 
12265 NODE*
12266 rb_compile_cstr(const char *f, const char *s, int len, int line)
12267 {
12268  VALUE str = rb_str_new(s, len);
12270 }
12271 
12272 NODE*
12273 rb_parser_compile_cstr(VALUE vparser, const char *f, const char *s, int len, int line)
12274 {
12275  VALUE str = rb_str_new(s, len);
12276  return parser_compile_string(vparser, rb_filesystem_str_new_cstr(f), str, line);
12277 }
12278 
12280 
12281 static VALUE
12282 lex_io_gets(struct parser_params *parser, VALUE io)
12283 {
12284  return rb_io_gets_internal(io);
12285 }
12286 
12287 NODE*
12288 rb_compile_file(const char *f, VALUE file, int start)
12289 {
12290  VALUE vparser = rb_parser_new();
12291 
12292  return rb_parser_compile_file(vparser, f, file, start);
12293 }
12294 
12295 NODE*
12296 rb_parser_compile_file(VALUE vparser, const char *f, VALUE file, int start)
12297 {
12298  return rb_parser_compile_file_path(vparser, rb_filesystem_str_new_cstr(f), file, start);
12299 }
12300 
12301 NODE*
12302 rb_parser_compile_file_path(VALUE vparser, VALUE fname, VALUE file, int start)
12303 {
12304  struct parser_params *parser;
12305  NODE *node;
12306 
12307  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
12309  lex_input = file;
12310  lex_pbeg = lex_p = lex_pend = 0;
12311 
12312  node = yycompile(parser, fname, start);
12313  RB_GC_GUARD(vparser); /* prohibit tail call optimization */
12314 
12315  return node;
12316 }
12317 #endif /* !RIPPER */
12318 
12319 #define STR_FUNC_ESCAPE 0x01
12320 #define STR_FUNC_EXPAND 0x02
12321 #define STR_FUNC_REGEXP 0x04
12322 #define STR_FUNC_QWORDS 0x08
12323 #define STR_FUNC_SYMBOL 0x10
12324 #define STR_FUNC_INDENT 0x20
12325 #define STR_FUNC_LABEL 0x40
12326 #define STR_TERM_END -1
12327 
12330  str_squote = (0),
12338 };
12339 
12340 static VALUE
12341 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
12342 {
12343  VALUE str;
12344 
12345  str = rb_enc_str_new(p, n, enc);
12346  if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
12348  }
12349  else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
12351  }
12352  }
12353 
12354  return str;
12355 }
12356 
12357 #define lex_goto_eol(parser) ((parser)->lex.pcur = (parser)->lex.pend)
12358 #define lex_eol_p() (lex_p >= lex_pend)
12359 #define peek(c) peek_n((c), 0)
12360 #define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n])
12361 #define peekc() peekc_n(0)
12362 #define peekc_n(n) (lex_p+(n) < lex_pend ? (unsigned char)lex_p[n] : -1)
12363 
12364 static int
12366 {
12367  VALUE v = lex_nextline;
12368  lex_nextline = 0;
12369  if (!v) {
12370  if (parser->eofp)
12371  return -1;
12372 
12373  if (!lex_input || NIL_P(v = lex_getline(parser))) {
12374  parser->eofp = 1;
12375  lex_goto_eol(parser);
12376  return -1;
12377  }
12378  parser->cr_seen = FALSE;
12379  }
12380 #ifdef RIPPER
12381  if (parser->tokp < lex_pend) {
12382  if (!has_delayed_token()) {
12383  parser->delayed = rb_str_buf_new(1024);
12384  rb_enc_associate(parser->delayed, current_enc);
12385  rb_str_buf_cat(parser->delayed,
12386  parser->tokp, lex_pend - parser->tokp);
12387  parser->delayed_line = ruby_sourceline;
12388  parser->delayed_col = (int)(parser->tokp - lex_pbeg);
12389  }
12390  else {
12391  rb_str_buf_cat(parser->delayed,
12392  parser->tokp, lex_pend - parser->tokp);
12393  }
12394  }
12395 #endif
12396  if (heredoc_end > 0) {
12398  heredoc_end = 0;
12399  }
12400  ruby_sourceline++;
12401  parser->line_count++;
12402  lex_pbeg = lex_p = RSTRING_PTR(v);
12403  lex_pend = lex_p + RSTRING_LEN(v);
12404  ripper_flush(parser);
12405  lex_lastline = v;
12406  return 0;
12407 }
12408 
12409 static int
12410 parser_cr(struct parser_params *parser, int c)
12411 {
12412  if (peek('\n')) {
12413  lex_p++;
12414  c = '\n';
12415  }
12416  else if (!parser->cr_seen) {
12417  parser->cr_seen = TRUE;
12418  /* carried over with lex_nextline for nextc() */
12419  rb_warn0("encountered \\r in middle of line, treated as a mere space");
12420  }
12421  return c;
12422 }
12423 
12424 static inline int
12426 {
12427  int c;
12428 
12429  if (UNLIKELY(lex_p == lex_pend)) {
12430  if (parser_nextline(parser)) return -1;
12431  }
12432  c = (unsigned char)*lex_p++;
12433  if (UNLIKELY(c == '\r')) {
12434  c = parser_cr(parser, c);
12435  }
12436 
12437  return c;
12438 }
12439 
12440 static void
12441 parser_pushback(struct parser_params *parser, int c)
12442 {
12443  if (c == -1) return;
12444  lex_p--;
12445  if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
12446  lex_p--;
12447  }
12448 }
12449 
12450 #define was_bol() (lex_p == lex_pbeg + 1)
12451 
12452 #define tokfix() (tokenbuf[tokidx]='\0')
12453 #define tok() tokenbuf
12454 #define toklen() tokidx
12455 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
12456 
12457 static char*
12459 {
12460  tokidx = 0;
12462  if (!tokenbuf) {
12463  toksiz = 60;
12464  tokenbuf = ALLOC_N(char, 60);
12465  }
12466  if (toksiz > 4096) {
12467  toksiz = 60;
12468  REALLOC_N(tokenbuf, char, 60);
12469  }
12470  return tokenbuf;
12471 }
12472 
12473 static char *
12474 parser_tokspace(struct parser_params *parser, int n)
12475 {
12476  tokidx += n;
12477 
12478  if (tokidx >= toksiz) {
12479  do {toksiz *= 2;} while (toksiz < tokidx);
12480  REALLOC_N(tokenbuf, char, toksiz);
12481  }
12482  return &tokenbuf[tokidx-n];
12483 }
12484 
12485 static void
12486 parser_tokadd(struct parser_params *parser, int c)
12487 {
12488  tokenbuf[tokidx++] = (char)c;
12489  if (tokidx >= toksiz) {
12490  toksiz *= 2;
12491  REALLOC_N(tokenbuf, char, toksiz);
12492  }
12493 }
12494 
12495 static int
12496 parser_tok_hex(struct parser_params *parser, size_t *numlen)
12497 {
12498  int c;
12499 
12500  c = scan_hex(lex_p, 2, numlen);
12501  if (!*numlen) {
12502  yyerror("invalid hex escape");
12503  return 0;
12504  }
12505  lex_p += *numlen;
12506  return c;
12507 }
12508 
12509 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
12510 
12511 static int
12513  int regexp_literal, int wide)
12514 {
12515  size_t numlen;
12516  int codepoint = scan_hex(lex_p, wide ? 6 : 4, &numlen);
12517  if (wide ? (numlen == 0) : (numlen < 4)) {
12518  yyerror("invalid Unicode escape");
12519  return FALSE;
12520  }
12521  if (codepoint > 0x10ffff) {
12522  yyerror("invalid Unicode codepoint (too large)");
12523  return FALSE;
12524  }
12525  if ((codepoint & 0xfffff800) == 0xd800) {
12526  yyerror("invalid Unicode codepoint");
12527  return FALSE;
12528  }
12529  lex_p += numlen;
12530  if (regexp_literal) {
12531  tokcopy((int)numlen);
12532  }
12533  else if (codepoint >= 0x80) {
12534  *encp = rb_utf8_encoding();
12535  tokaddmbc(codepoint, *encp);
12536  }
12537  else {
12538  tokadd(codepoint);
12539  }
12540  return TRUE;
12541 }
12542 
12543 /* return value is for ?\u3042 */
12544 static int
12546  int string_literal, int symbol_literal, int regexp_literal)
12547 {
12548  /*
12549  * If string_literal is true, then we allow multiple codepoints
12550  * in \u{}, and add the codepoints to the current token.
12551  * Otherwise we're parsing a character literal and return a single
12552  * codepoint without adding it
12553  */
12554 
12555  const int open_brace = '{', close_brace = '}';
12556 
12557  if (regexp_literal) { tokadd('\\'); tokadd('u'); }
12558 
12559  if (peek(open_brace)) { /* handle \u{...} form */
12560  int c, last = nextc();
12561  do c = nextc(); while (ISSPACE(c));
12562  pushback(c);
12563  while (!string_literal || c != close_brace) {
12564  if (regexp_literal) tokadd(last);
12565  if (!parser_tokadd_codepoint(parser, encp, regexp_literal, TRUE)) {
12566  return 0;
12567  }
12568  while (ISSPACE(c = nextc())) last = c;
12569  pushback(c);
12570  if (!string_literal) break;
12571  }
12572 
12573  if (c != close_brace) {
12574  yyerror("unterminated Unicode escape");
12575  return 0;
12576  }
12577 
12578  if (regexp_literal) tokadd(close_brace);
12579  nextc();
12580  }
12581  else { /* handle \uxxxx form */
12582  if (!parser_tokadd_codepoint(parser, encp, regexp_literal, FALSE)) {
12583  return 0;
12584  }
12585  }
12586 
12587  return TRUE;
12588 }
12589 
12590 #define ESCAPE_CONTROL 1
12591 #define ESCAPE_META 2
12592 
12593 static int
12594 parser_read_escape(struct parser_params *parser, int flags,
12595  rb_encoding **encp)
12596 {
12597  int c;
12598  size_t numlen;
12599 
12600  switch (c = nextc()) {
12601  case '\\': /* Backslash */
12602  return c;
12603 
12604  case 'n': /* newline */
12605  return '\n';
12606 
12607  case 't': /* horizontal tab */
12608  return '\t';
12609 
12610  case 'r': /* carriage-return */
12611  return '\r';
12612 
12613  case 'f': /* form-feed */
12614  return '\f';
12615 
12616  case 'v': /* vertical tab */
12617  return '\13';
12618 
12619  case 'a': /* alarm(bell) */
12620  return '\007';
12621 
12622  case 'e': /* escape */
12623  return 033;
12624 
12625  case '0': case '1': case '2': case '3': /* octal constant */
12626  case '4': case '5': case '6': case '7':
12627  pushback(c);
12628  c = scan_oct(lex_p, 3, &numlen);
12629  lex_p += numlen;
12630  return c;
12631 
12632  case 'x': /* hex constant */
12633  c = tok_hex(&numlen);
12634  if (numlen == 0) return 0;
12635  return c;
12636 
12637  case 'b': /* backspace */
12638  return '\010';
12639 
12640  case 's': /* space */
12641  return ' ';
12642 
12643  case 'M':
12644  if (flags & ESCAPE_META) goto eof;
12645  if ((c = nextc()) != '-') {
12646  pushback(c);
12647  goto eof;
12648  }
12649  if ((c = nextc()) == '\\') {
12650  if (peek('u')) goto eof;
12651  return read_escape(flags|ESCAPE_META, encp) | 0x80;
12652  }
12653  else if (c == -1 || !ISASCII(c)) goto eof;
12654  else {
12655  return ((c & 0xff) | 0x80);
12656  }
12657 
12658  case 'C':
12659  if ((c = nextc()) != '-') {
12660  pushback(c);
12661  goto eof;
12662  }
12663  case 'c':
12664  if (flags & ESCAPE_CONTROL) goto eof;
12665  if ((c = nextc())== '\\') {
12666  if (peek('u')) goto eof;
12667  c = read_escape(flags|ESCAPE_CONTROL, encp);
12668  }
12669  else if (c == '?')
12670  return 0177;
12671  else if (c == -1 || !ISASCII(c)) goto eof;
12672  return c & 0x9f;
12673 
12674  eof:
12675  case -1:
12676  yyerror("Invalid escape character syntax");
12677  return '\0';
12678 
12679  default:
12680  return c;
12681  }
12682 }
12683 
12684 static void
12686 {
12687  int len = rb_enc_codelen(c, enc);
12688  rb_enc_mbcput(c, tokspace(len), enc);
12689 }
12690 
12691 static int
12693 {
12694  int c;
12695  int flags = 0;
12696  size_t numlen;
12697 
12698  first:
12699  switch (c = nextc()) {
12700  case '\n':
12701  return 0; /* just ignore */
12702 
12703  case '0': case '1': case '2': case '3': /* octal constant */
12704  case '4': case '5': case '6': case '7':
12705  {
12706  ruby_scan_oct(--lex_p, 3, &numlen);
12707  if (numlen == 0) goto eof;
12708  lex_p += numlen;
12709  tokcopy((int)numlen + 1);
12710  }
12711  return 0;
12712 
12713  case 'x': /* hex constant */
12714  {
12715  tok_hex(&numlen);
12716  if (numlen == 0) return -1;
12717  tokcopy((int)numlen + 2);
12718  }
12719  return 0;
12720 
12721  case 'M':
12722  if (flags & ESCAPE_META) goto eof;
12723  if ((c = nextc()) != '-') {
12724  pushback(c);
12725  goto eof;
12726  }
12727  tokcopy(3);
12728  flags |= ESCAPE_META;
12729  goto escaped;
12730 
12731  case 'C':
12732  if (flags & ESCAPE_CONTROL) goto eof;
12733  if ((c = nextc()) != '-') {
12734  pushback(c);
12735  goto eof;
12736  }
12737  tokcopy(3);
12738  goto escaped;
12739 
12740  case 'c':
12741  if (flags & ESCAPE_CONTROL) goto eof;
12742  tokcopy(2);
12743  flags |= ESCAPE_CONTROL;
12744  escaped:
12745  if ((c = nextc()) == '\\') {
12746  goto first;
12747  }
12748  else if (c == -1) goto eof;
12749  tokadd(c);
12750  return 0;
12751 
12752  eof:
12753  case -1:
12754  yyerror("Invalid escape character syntax");
12755  return -1;
12756 
12757  default:
12758  tokadd('\\');
12759  tokadd(c);
12760  }
12761  return 0;
12762 }
12763 
12764 static int
12766 {
12767  int kcode = 0;
12768  int kopt = 0;
12769  int options = 0;
12770  int c, opt, kc;
12771 
12772  newtok();
12773  while (c = nextc(), ISALPHA(c)) {
12774  if (c == 'o') {
12775  options |= RE_OPTION_ONCE;
12776  }
12777  else if (rb_char_to_option_kcode(c, &opt, &kc)) {
12778  if (kc >= 0) {
12779  if (kc != rb_ascii8bit_encindex()) kcode = c;
12780  kopt = opt;
12781  }
12782  else {
12783  options |= opt;
12784  }
12785  }
12786  else {
12787  tokadd(c);
12788  }
12789  }
12790  options |= kopt;
12791  pushback(c);
12792  if (toklen()) {
12793  tokfix();
12794  compile_error(PARSER_ARG "unknown regexp option%s - %s",
12795  toklen() > 1 ? "s" : "", tok());
12796  }
12797  return options | RE_OPTION_ENCODING(kcode);
12798 }
12799 
12800 static void
12802 {
12803  rb_str_free(str);
12804  rb_gc_force_recycle(str);
12805 }
12806 
12807 static int
12808 parser_tokadd_mbchar(struct parser_params *parser, int c)
12809 {
12810  int len = parser_precise_mbclen(parser, lex_p-1);
12811  if (len < 0) return -1;
12812  tokadd(c);
12813  lex_p += --len;
12814  if (len > 0) tokcopy(len);
12815  return c;
12816 }
12817 
12818 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c))
12819 
12820 static inline int
12822 {
12823  switch (c) {
12824  case '$': case '*': case '+': case '.':
12825  case '?': case '^': case '|':
12826  case ')': case ']': case '}': case '>':
12827  return TRUE;
12828  default:
12829  return FALSE;
12830  }
12831 }
12832 
12833 static int
12835 {
12836  if (heredoc_line_indent == -1) {
12837  if (c == '\n') heredoc_line_indent = 0;
12838  }
12839  else {
12840  if (c == ' ') {
12842  return TRUE;
12843  }
12844  else if (c == '\t') {
12845  int w = (heredoc_line_indent / TAB_WIDTH) + 1;
12847  return TRUE;
12848  }
12849  else if (c != '\n') {
12852  }
12853  heredoc_line_indent = -1;
12854  }
12855  }
12856  return FALSE;
12857 }
12858 
12859 static int
12861  int func, int term, int paren, long *nest,
12862  rb_encoding **encp)
12863 {
12864  int c;
12865  int has_nonascii = 0;
12866  rb_encoding *enc = *encp;
12867  char *errbuf = 0;
12868  static const char mixed_msg[] = "%s mixed within %s source";
12869 
12870 #define mixed_error(enc1, enc2) if (!errbuf) { \
12871  size_t len = sizeof(mixed_msg) - 4; \
12872  len += strlen(rb_enc_name(enc1)); \
12873  len += strlen(rb_enc_name(enc2)); \
12874  errbuf = ALLOCA_N(char, len); \
12875  snprintf(errbuf, len, mixed_msg, \
12876  rb_enc_name(enc1), \
12877  rb_enc_name(enc2)); \
12878  yyerror(errbuf); \
12879  }
12880 #define mixed_escape(beg, enc1, enc2) do { \
12881  const char *pos = lex_p; \
12882  lex_p = (beg); \
12883  mixed_error((enc1), (enc2)); \
12884  lex_p = pos; \
12885  } while (0)
12886 
12887  while ((c = nextc()) != -1) {
12888  if (heredoc_indent > 0) {
12889  parser_update_heredoc_indent(parser, c);
12890  }
12891 
12892  if (paren && c == paren) {
12893  ++*nest;
12894  }
12895  else if (c == term) {
12896  if (!nest || !*nest) {
12897  pushback(c);
12898  break;
12899  }
12900  --*nest;
12901  }
12902  else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
12903  int c2 = *lex_p;
12904  if (c2 == '$' || c2 == '@' || c2 == '{') {
12905  pushback(c);
12906  break;
12907  }
12908  }
12909  else if (c == '\\') {
12910  const char *beg = lex_p - 1;
12911  c = nextc();
12912  switch (c) {
12913  case '\n':
12914  if (func & STR_FUNC_QWORDS) break;
12915  if (func & STR_FUNC_EXPAND) continue;
12916  tokadd('\\');
12917  break;
12918 
12919  case '\\':
12920  if (func & STR_FUNC_ESCAPE) tokadd(c);
12921  break;
12922 
12923  case 'u':
12924  if ((func & STR_FUNC_EXPAND) == 0) {
12925  tokadd('\\');
12926  break;
12927  }
12928  parser_tokadd_utf8(parser, &enc, 1,
12929  func & STR_FUNC_SYMBOL,
12930  func & STR_FUNC_REGEXP);
12931  if (has_nonascii && enc != *encp) {
12932  mixed_escape(beg, enc, *encp);
12933  }
12934  continue;
12935 
12936  default:
12937  if (c == -1) return -1;
12938  if (!ISASCII(c)) {
12939  if ((func & STR_FUNC_EXPAND) == 0) tokadd('\\');
12940  goto non_ascii;
12941  }
12942  if (func & STR_FUNC_REGEXP) {
12943  if (c == term && !simple_re_meta(c)) {
12944  tokadd(c);
12945  continue;
12946  }
12947  pushback(c);
12948  if ((c = tokadd_escape(&enc)) < 0)
12949  return -1;
12950  if (has_nonascii && enc != *encp) {
12951  mixed_escape(beg, enc, *encp);
12952  }
12953  continue;
12954  }
12955  else if (func & STR_FUNC_EXPAND) {
12956  pushback(c);
12957  if (func & STR_FUNC_ESCAPE) tokadd('\\');
12958  c = read_escape(0, &enc);
12959  }
12960  else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12961  /* ignore backslashed spaces in %w */
12962  }
12963  else if (c != term && !(paren && c == paren)) {
12964  tokadd('\\');
12965  pushback(c);
12966  continue;
12967  }
12968  }
12969  }
12970  else if (!parser_isascii()) {
12971  non_ascii:
12972  has_nonascii = 1;
12973  if (enc != *encp) {
12974  mixed_error(enc, *encp);
12975  continue;
12976  }
12977  if (tokadd_mbchar(c) == -1) return -1;
12978  continue;
12979  }
12980  else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12981  pushback(c);
12982  break;
12983  }
12984  if (c & 0x80) {
12985  has_nonascii = 1;
12986  if (enc != *encp) {
12987  mixed_error(enc, *encp);
12988  continue;
12989  }
12990  }
12991  tokadd(c);
12992  }
12993  *encp = enc;
12994  return c;
12995 }
12996 
12997 #define NEW_STRTERM(func, term, paren) \
12998  rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
12999 
13000 #ifdef RIPPER
13001 static void
13002 ripper_flush_string_content(struct parser_params *parser, rb_encoding *enc)
13003 {
13004  VALUE content = yylval.val;
13005  if (!ripper_is_node_yylval(content))
13006  content = ripper_new_yylval(0, 0, content);
13007  if (has_delayed_token()) {
13008  ptrdiff_t len = lex_p - parser->tokp;
13009  if (len > 0) {
13010  rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
13011  }
13013  parser->tokp = lex_p;
13014  RNODE(content)->nd_rval = yylval.val;
13015  }
13017  if (yylval.val != content)
13018  RNODE(content)->nd_rval = yylval.val;
13019  yylval.val = content;
13020 }
13021 
13022 #define flush_string_content(enc) ripper_flush_string_content(parser, (enc))
13023 #else
13024 #define flush_string_content(enc) ((void)(enc))
13025 #endif
13026 
13027 RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20 + 31) / 32];
13028 /* this can be shared with ripper, since it's independent from struct
13029  * parser_params. */
13030 #ifndef RIPPER
13031 #define BIT(c, idx) (((c) / 32 - 1 == idx) ? (1U << ((c) % 32)) : 0)
13032 #define SPECIAL_PUNCT(idx) ( \
13033  BIT('~', idx) | BIT('*', idx) | BIT('$', idx) | BIT('?', idx) | \
13034  BIT('!', idx) | BIT('@', idx) | BIT('/', idx) | BIT('\\', idx) | \
13035  BIT(';', idx) | BIT(',', idx) | BIT('.', idx) | BIT('=', idx) | \
13036  BIT(':', idx) | BIT('<', idx) | BIT('>', idx) | BIT('\"', idx) | \
13037  BIT('&', idx) | BIT('`', idx) | BIT('\'', idx) | BIT('+', idx) | \
13038  BIT('0', idx))
13039 const unsigned int ruby_global_name_punct_bits[] = {
13040  SPECIAL_PUNCT(0),
13041  SPECIAL_PUNCT(1),
13042  SPECIAL_PUNCT(2),
13043 };
13044 #undef BIT
13045 #undef SPECIAL_PUNCT
13046 #endif
13047 
13048 static int
13050 {
13051  int c;
13052  const char *p = lex_p;
13053 
13054  if (p + 1 >= lex_pend) return 0;
13055  c = *p++;
13056  switch (c) {
13057  case '$':
13058  if ((c = *p) == '-') {
13059  if (++p >= lex_pend) return 0;
13060  c = *p;
13061  }
13062  else if (is_global_name_punct(c) || ISDIGIT(c)) {
13063  return tSTRING_DVAR;
13064  }
13065  break;
13066  case '@':
13067  if ((c = *p) == '@') {
13068  if (++p >= lex_pend) return 0;
13069  c = *p;
13070  }
13071  break;
13072  case '{':
13073  lex_p = p;
13074  command_start = TRUE;
13075  return tSTRING_DBEG;
13076  default:
13077  return 0;
13078  }
13079  if (!ISASCII(c) || c == '_' || ISALPHA(c))
13080  return tSTRING_DVAR;
13081  return 0;
13082 }
13083 
13084 static inline int
13086 {
13087  if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
13090  return tREGEXP_END;
13091 }
13092 
13093 static int
13094 parser_parse_string(struct parser_params *parser, NODE *quote)
13095 {
13096  int func = (int)quote->nd_func;
13097  int term = nd_term(quote);
13098  int paren = nd_paren(quote);
13099  int c, space = 0;
13101 
13102  if (term == STR_TERM_END) return tSTRING_END;
13103  c = nextc();
13104  if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
13105  do {c = nextc();} while (ISSPACE(c));
13106  space = 1;
13107  }
13108  if (c == term && !quote->nd_nest) {
13109  if (func & STR_FUNC_QWORDS) {
13110  quote->u2.id = STR_TERM_END;
13111  return ' ';
13112  }
13113  return parser_string_term(parser, func);
13114  }
13115  if (space) {
13116  pushback(c);
13117  return ' ';
13118  }
13119  newtok();
13120  if ((func & STR_FUNC_EXPAND) && c == '#') {
13121  int t = parser_peek_variable_name(parser);
13122  if (t) return t;
13123  tokadd('#');
13124  c = nextc();
13125  }
13126  pushback(c);
13127  if (tokadd_string(func, term, paren, &quote->nd_nest,
13128  &enc) == -1) {
13129  ruby_sourceline = nd_line(quote);
13130  if (func & STR_FUNC_REGEXP) {
13131  if (parser->eofp)
13132  compile_error(PARSER_ARG "unterminated regexp meets end of file");
13133  return tREGEXP_END;
13134  }
13135  else {
13136  if (parser->eofp)
13137  compile_error(PARSER_ARG "unterminated string meets end of file");
13138  return tSTRING_END;
13139  }
13140  }
13141 
13142  tokfix();
13143  set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
13144  flush_string_content(enc);
13145 
13146  return tSTRING_CONTENT;
13147 }
13148 
13149 static int
13151 {
13152  int c = nextc(), term, func = 0;
13153  int token = tSTRING_BEG;
13154  long len;
13155  int newline = 0;
13156  int indent = 0;
13157 
13158  if (c == '-') {
13159  c = nextc();
13160  func = STR_FUNC_INDENT;
13161  }
13162  else if (c == '~') {
13163  c = nextc();
13164  func = STR_FUNC_INDENT;
13165  indent = INT_MAX;
13166  }
13167  switch (c) {
13168  case '\'':
13169  func |= str_squote; goto quoted;
13170  case '"':
13171  func |= str_dquote; goto quoted;
13172  case '`':
13173  token = tXSTRING_BEG;
13174  func |= str_xquote; goto quoted;
13175 
13176  quoted:
13177  newtok();
13178  tokadd(func);
13179  term = c;
13180  while ((c = nextc()) != -1 && c != term) {
13181  if (tokadd_mbchar(c) == -1) return 0;
13182  if (!newline && c == '\n') newline = 1;
13183  else if (newline) newline = 2;
13184  }
13185  if (c == -1) {
13186  compile_error(PARSER_ARG "unterminated here document identifier");
13187  return 0;
13188  }
13189  switch (newline) {
13190  case 1:
13191  rb_warn0("here document identifier ends with a newline");
13192  if (--tokidx > 0 && tokenbuf[tokidx] == '\r') --tokidx;
13193  break;
13194  case 2:
13195  compile_error(PARSER_ARG "here document identifier across newlines, never match");
13196  return -1;
13197  }
13198  break;
13199 
13200  default:
13201  if (!parser_is_identchar()) {
13202  pushback(c);
13203  if (func & STR_FUNC_INDENT) {
13204  pushback(indent > 0 ? '~' : '-');
13205  }
13206  return 0;
13207  }
13208  newtok();
13209  tokadd(func |= str_dquote);
13210  do {
13211  if (tokadd_mbchar(c) == -1) return 0;
13212  } while ((c = nextc()) != -1 && parser_is_identchar());
13213  pushback(c);
13214  break;
13215  }
13216 
13217  tokfix();
13219  len = lex_p - lex_pbeg;
13220  lex_goto_eol(parser);
13222  STR_NEW(tok(), toklen()), /* nd_lit */
13223  len, /* nd_nth */
13224  lex_lastline); /* nd_orig */
13226  ripper_flush(parser);
13227  heredoc_indent = indent;
13228  heredoc_line_indent = 0;
13229  return token;
13230 }
13231 
13232 static void
13234 {
13235  VALUE line;
13236 
13237  lex_strterm = 0;
13238  line = here->nd_orig;
13239  lex_lastline = line;
13240  lex_pbeg = RSTRING_PTR(line);
13241  lex_pend = lex_pbeg + RSTRING_LEN(line);
13242  lex_p = lex_pbeg + here->nd_nth;
13244  ruby_sourceline = nd_line(here);
13245  dispose_string(here->nd_lit);
13246  rb_gc_force_recycle((VALUE)here);
13247  ripper_flush(parser);
13248 }
13249 
13250 static int
13251 dedent_string(VALUE string, int width)
13252 {
13253  char *str;
13254  long len;
13255  int i, col = 0;
13256 
13257  RSTRING_GETMEM(string, str, len);
13258  for (i = 0; i < len && col < width; i++) {
13259  if (str[i] == ' ') {
13260  col++;
13261  }
13262  else if (str[i] == '\t') {
13263  int n = TAB_WIDTH * (col / TAB_WIDTH + 1);
13264  if (n > width) break;
13265  col = n;
13266  }
13267  else {
13268  break;
13269  }
13270  }
13271  if (!i) return 0;
13272  rb_str_modify(string);
13273  str = RSTRING_PTR(string);
13274  if (RSTRING_LEN(string) != len)
13275  rb_fatal("literal string changed: %+"PRIsVALUE, string);
13276  MEMMOVE(str, str + i, char, len - i);
13277  rb_str_set_len(string, len - i);
13278  return i;
13279 }
13280 
13281 #ifndef RIPPER
13282 static NODE *
13284 {
13285  NODE *node, *str_node;
13286  int bol = TRUE;
13287  int indent = heredoc_indent;
13288 
13289  if (indent <= 0) return root;
13290  heredoc_indent = 0;
13291  if (!root) return root;
13292 
13293  node = str_node = root;
13294  if (nd_type(root) == NODE_ARRAY) str_node = root->nd_head;
13295 
13296  while (str_node) {
13297  VALUE lit = str_node->nd_lit;
13298  if (bol) dedent_string(lit, indent);
13299  bol = TRUE;
13300 
13301  str_node = 0;
13302  while ((node = node->nd_next) != 0 && nd_type(node) == NODE_ARRAY) {
13303  if ((str_node = node->nd_head) != 0) {
13304  enum node_type type = nd_type(str_node);
13305  if (type == NODE_STR || type == NODE_DSTR) break;
13306  bol = FALSE;
13307  str_node = 0;
13308  }
13309  }
13310  }
13311  return root;
13312 }
13313 #else /* RIPPER */
13314 static VALUE
13315 parser_heredoc_dedent(struct parser_params *parser, VALUE array)
13316 {
13317  int indent = heredoc_indent;
13318 
13319  if (indent <= 0) return array;
13320  heredoc_indent = 0;
13321  dispatch2(heredoc_dedent, array, INT2NUM(indent));
13322  return array;
13323 }
13324 
13325 static VALUE
13326 parser_dedent_string(VALUE self, VALUE input, VALUE width)
13327 {
13328  int wid, col;
13329 
13330  StringValue(input);
13331  wid = NUM2UINT(width);
13332  col = dedent_string(input, wid);
13333  return INT2NUM(col);
13334 }
13335 #endif
13336 
13337 static int
13339  const char *eos, long len, int indent)
13340 {
13341  const char *p = lex_pbeg;
13342  long n;
13343 
13344  if (indent) {
13345  while (*p && ISSPACE(*p)) p++;
13346  }
13347  n = lex_pend - (p + len);
13348  if (n < 0) return FALSE;
13349  if (n > 0 && p[len] != '\n') {
13350  if (p[len] != '\r') return FALSE;
13351  if (n <= 1 || p[len+1] != '\n') return FALSE;
13352  }
13353  return strncmp(eos, p, len) == 0;
13354 }
13355 
13356 #define NUM_SUFFIX_R (1<<0)
13357 #define NUM_SUFFIX_I (1<<1)
13358 #define NUM_SUFFIX_ALL 3
13359 
13360 static int
13362 {
13363  int c, result = 0;
13364  const char *lastp = lex_p;
13365 
13366  while ((c = nextc()) != -1) {
13367  if ((mask & NUM_SUFFIX_I) && c == 'i') {
13368  result |= (mask & NUM_SUFFIX_I);
13369  mask &= ~NUM_SUFFIX_I;
13370  /* r after i, rational of complex is disallowed */
13371  mask &= ~NUM_SUFFIX_R;
13372  continue;
13373  }
13374  if ((mask & NUM_SUFFIX_R) && c == 'r') {
13375  result |= (mask & NUM_SUFFIX_R);
13376  mask &= ~NUM_SUFFIX_R;
13377  continue;
13378  }
13379  if (!ISASCII(c) || ISALPHA(c) || c == '_') {
13380  lex_p = lastp;
13381  return 0;
13382  }
13383  pushback(c);
13384  if (c == '.') {
13385  c = peekc_n(1);
13386  if (ISDIGIT(c)) {
13387  yyerror("unexpected fraction part after numeric literal");
13388  lex_p += 2;
13389  while (parser_is_identchar()) nextc();
13390  }
13391  }
13392  break;
13393  }
13394  return result;
13395 }
13396 
13397 static int
13398 parser_set_number_literal(struct parser_params *parser, VALUE v, int type, int suffix)
13399 {
13400  if (suffix & NUM_SUFFIX_I) {
13401  v = rb_complex_raw(INT2FIX(0), v);
13402  type = tIMAGINARY;
13403  }
13404  set_yylval_literal(v);
13405  SET_LEX_STATE(EXPR_END|EXPR_ENDARG);
13406  return type;
13407 }
13408 
13409 static int
13410 parser_set_integer_literal(struct parser_params *parser, VALUE v, int suffix)
13411 {
13412  int type = tINTEGER;
13413  if (suffix & NUM_SUFFIX_R) {
13414  v = rb_rational_raw1(v);
13415  type = tRATIONAL;
13416  }
13417  return set_number_literal(v, type, suffix);
13418 }
13419 
13420 #ifdef RIPPER
13421 static void
13422 ripper_dispatch_heredoc_end(struct parser_params *parser)
13423 {
13424  VALUE str;
13425  if (has_delayed_token())
13427  str = STR_NEW(parser->tokp, lex_pend - parser->tokp);
13428  ripper_dispatch1(parser, ripper_token2eventid(tHEREDOC_END), str);
13429  lex_goto_eol(parser);
13430  ripper_flush(parser);
13431 }
13432 
13433 #define dispatch_heredoc_end() ripper_dispatch_heredoc_end(parser)
13434 #else
13435 #define dispatch_heredoc_end() ((void)0)
13436 #endif
13437 
13438 static int
13440 {
13441  int c, func, indent = 0;
13442  const char *eos, *p, *pend;
13443  long len;
13444  VALUE str = 0;
13446 
13447  eos = RSTRING_PTR(here->nd_lit);
13448  len = RSTRING_LEN(here->nd_lit) - 1;
13449  indent = (func = *eos++) & STR_FUNC_INDENT;
13450 
13451  if ((c = nextc()) == -1) {
13452  error:
13453  compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
13454 #ifdef RIPPER
13455  if (!has_delayed_token()) {
13457  }
13458  else {
13459  if (str) {
13460  rb_str_append(parser->delayed, str);
13461  }
13462  else if ((len = lex_p - parser->tokp) > 0) {
13463  if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
13464  int cr = ENC_CODERANGE_UNKNOWN;
13465  rb_str_coderange_scan_restartable(parser->tokp, lex_p, enc, &cr);
13466  if (cr != ENC_CODERANGE_7BIT &&
13468  enc != rb_utf8_encoding()) {
13469  enc = rb_ascii8bit_encoding();
13470  }
13471  }
13472  rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
13473  }
13475  }
13476  lex_goto_eol(parser);
13477 #endif
13478  restore:
13480  return 0;
13481  }
13482  if (was_bol() && whole_match_p(eos, len, indent)) {
13485  return tSTRING_END;
13486  }
13487 
13488  if (!(func & STR_FUNC_EXPAND)) {
13489  do {
13491  pend = lex_pend;
13492  if (pend > p) {
13493  switch (pend[-1]) {
13494  case '\n':
13495  if (--pend == p || pend[-1] != '\r') {
13496  pend++;
13497  break;
13498  }
13499  case '\r':
13500  --pend;
13501  }
13502  }
13503 
13504  if (heredoc_indent > 0) {
13505  long i = 0;
13506  while (p + i < pend && parser_update_heredoc_indent(parser, p[i]))
13507  i++;
13508  heredoc_line_indent = 0;
13509  }
13510 
13511  if (str)
13512  rb_str_cat(str, p, pend - p);
13513  else
13514  str = STR_NEW(p, pend - p);
13515  if (pend < lex_pend) rb_str_cat(str, "\n", 1);
13516  lex_goto_eol(parser);
13517  if (heredoc_indent > 0) {
13518  set_yylval_str(str);
13519  flush_string_content(enc);
13520  return tSTRING_CONTENT;
13521  }
13522  if (nextc() == -1) {
13523  if (str) {
13524  dispose_string(str);
13525  str = 0;
13526  }
13527  goto error;
13528  }
13529  } while (!whole_match_p(eos, len, indent));
13530  }
13531  else {
13532  /* int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
13533  newtok();
13534  if (c == '#') {
13535  int t = parser_peek_variable_name(parser);
13536  if (t) return t;
13537  tokadd('#');
13538  c = nextc();
13539  }
13540  do {
13541  pushback(c);
13542  if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
13543  if (parser->eofp) goto error;
13544  goto restore;
13545  }
13546  if (c != '\n') {
13547  flush:
13548  set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
13549  flush_string_content(enc);
13550  return tSTRING_CONTENT;
13551  }
13552  tokadd(nextc());
13553  if (heredoc_indent > 0) {
13554  lex_goto_eol(parser);
13555  goto flush;
13556  }
13557  /* if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
13558  if ((c = nextc()) == -1) goto error;
13559  } while (!whole_match_p(eos, len, indent));
13560  str = STR_NEW3(tok(), toklen(), enc, func);
13561  }
13563 #ifdef RIPPER
13564  str = ripper_new_yylval(ripper_token2eventid(tSTRING_CONTENT),
13565  yylval.val, str);
13566 #endif
13568  lex_strterm = NEW_STRTERM(func, STR_TERM_END, 0);
13569  set_yylval_str(str);
13570  return tSTRING_CONTENT;
13571 }
13572 
13573 #include "lex.c"
13574 
13575 static void
13576 arg_ambiguous_gen(struct parser_params *parser, char c)
13577 {
13578 #ifndef RIPPER
13579  rb_warning1("ambiguous first argument; put parentheses or a space even after `%c' operator", WARN_I(c));
13580 #else
13581  dispatch1(arg_ambiguous, rb_usascii_str_new(&c, 1));
13582 #endif
13583 }
13584 #define arg_ambiguous(c) (arg_ambiguous_gen(parser, (c)), 1)
13585 
13586 static ID
13588 {
13589  switch (id_type(lhs)) {
13590  case ID_LOCAL:
13591  break;
13592 #ifndef RIPPER
13593  case ID_CONST:
13594  yyerror("formal argument cannot be a constant");
13595  return 0;
13596  case ID_INSTANCE:
13597  yyerror("formal argument cannot be an instance variable");
13598  return 0;
13599  case ID_GLOBAL:
13600  yyerror("formal argument cannot be a global variable");
13601  return 0;
13602  case ID_CLASS:
13603  yyerror("formal argument cannot be a class variable");
13604  return 0;
13605  default:
13606  yyerror("formal argument must be local variable");
13607  return 0;
13608 #else
13609  default:
13610  lhs = dispatch1(param_error, lhs);
13611  ripper_error();
13612  return 0;
13613 #endif
13614  }
13615  shadowing_lvar(lhs);
13616  return lhs;
13617 }
13618 
13619 static int
13620 lvar_defined_gen(struct parser_params *parser, ID id)
13621 {
13622  return (dyna_in_block() && dvar_defined_get(id)) || local_id(id);
13623 }
13624 
13625 /* emacsen -*- hack */
13626 static long
13627 parser_encode_length(struct parser_params *parser, const char *name, long len)
13628 {
13629  long nlen;
13630 
13631  if (len > 5 && name[nlen = len - 5] == '-') {
13632  if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
13633  return nlen;
13634  }
13635  if (len > 4 && name[nlen = len - 4] == '-') {
13636  if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
13637  return nlen;
13638  if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
13639  !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
13640  /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */
13641  return nlen;
13642  }
13643  return len;
13644 }
13645 
13646 static void
13647 parser_set_encode(struct parser_params *parser, const char *name)
13648 {
13649  int idx = rb_enc_find_index(name);
13650  rb_encoding *enc;
13651  VALUE excargs[3];
13652 
13653  if (idx < 0) {
13654  excargs[1] = rb_sprintf("unknown encoding name: %s", name);
13655  error:
13656  excargs[0] = rb_eArgError;
13657  excargs[2] = rb_make_backtrace();
13659  rb_exc_raise(rb_make_exception(3, excargs));
13660  }
13661  enc = rb_enc_from_index(idx);
13662  if (!rb_enc_asciicompat(enc)) {
13663  excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
13664  goto error;
13665  }
13666  parser->enc = enc;
13667 #ifndef RIPPER
13668  if (ruby_debug_lines) {
13669  VALUE lines = ruby_debug_lines;
13670  long i, n = RARRAY_LEN(lines);
13671  for (i = 0; i < n; ++i) {
13672  rb_enc_associate_index(RARRAY_AREF(lines, i), idx);
13673  }
13674  }
13675 #endif
13676 }
13677 
13678 static int
13680 {
13681  const char *p = lex_pbeg, *pend = lex_p - 1;
13682  if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
13683  while (p < pend) {
13684  if (!ISSPACE(*p)) return 0;
13685  p++;
13686  }
13687  return 1;
13688 }
13689 
13690 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
13691 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
13692 
13693 static void
13694 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
13695 {
13696  if (!comment_at_top(parser)) {
13697  return;
13698  }
13699  parser_set_encode(parser, val);
13700 }
13701 
13702 static int
13703 parser_get_bool(struct parser_params *parser, const char *name, const char *val)
13704 {
13705  switch (*val) {
13706  case 't': case 'T':
13707  if (strcasecmp(val, "true") == 0) {
13708  return TRUE;
13709  }
13710  break;
13711  case 'f': case 'F':
13712  if (strcasecmp(val, "false") == 0) {
13713  return FALSE;
13714  }
13715  break;
13716  }
13717  rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val);
13718  return -1;
13719 }
13720 
13721 static void
13722 parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
13723 {
13724  int b = parser_get_bool(parser, name, val);
13725  if (b >= 0) parser->token_info_enabled = b;
13726 }
13727 
13728 static void
13729 parser_set_compile_option_flag(struct parser_params *parser, const char *name, const char *val)
13730 {
13731  int b;
13732 
13733  if (parser->token_seen) {
13734  rb_warning1("`%s' is ignored after any tokens", WARN_S(name));
13735  return;
13736  }
13737 
13738  b = parser_get_bool(parser, name, val);
13739  if (b < 0) return;
13740 
13741  if (!parser->compile_option)
13743  rb_hash_aset(parser->compile_option, ID2SYM(rb_intern(name)),
13744  (b ? Qtrue : Qfalse));
13745 }
13746 
13747 # if WARN_PAST_SCOPE
13748 static void
13749 parser_set_past_scope(struct parser_params *parser, const char *name, const char *val)
13750 {
13751  int b = parser_get_bool(parser, name, val);
13752  if (b >= 0) parser->past_scope_enabled = b;
13753 }
13754 # endif
13755 
13756 struct magic_comment {
13757  const char *name;
13760 };
13761 
13762 static const struct magic_comment magic_comments[] = {
13764  {"encoding", magic_comment_encoding, parser_encode_length},
13765  {"frozen_string_literal", parser_set_compile_option_flag},
13766  {"warn_indent", parser_set_token_info},
13767 # if WARN_PAST_SCOPE
13768  {"warn_past_scope", parser_set_past_scope},
13769 # endif
13770 };
13771 
13772 static const char *
13773 magic_comment_marker(const char *str, long len)
13774 {
13775  long i = 2;
13776 
13777  while (i < len) {
13778  switch (str[i]) {
13779  case '-':
13780  if (str[i-1] == '*' && str[i-2] == '-') {
13781  return str + i + 1;
13782  }
13783  i += 2;
13784  break;
13785  case '*':
13786  if (i + 1 >= len) return 0;
13787  if (str[i+1] != '-') {
13788  i += 4;
13789  }
13790  else if (str[i-1] != '-') {
13791  i += 2;
13792  }
13793  else {
13794  return str + i + 2;
13795  }
13796  break;
13797  default:
13798  i += 3;
13799  break;
13800  }
13801  }
13802  return 0;
13803 }
13804 
13805 static int
13806 parser_magic_comment(struct parser_params *parser, const char *str, long len)
13807 {
13808  int indicator = 0;
13809  VALUE name = 0, val = 0;
13810  const char *beg, *end, *vbeg, *vend;
13811 #define str_copy(_s, _p, _n) ((_s) \
13812  ? (void)(rb_str_resize((_s), (_n)), \
13813  MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
13814  : (void)((_s) = STR_NEW((_p), (_n))))
13815 
13816  if (len <= 7) return FALSE;
13817  if (!!(beg = magic_comment_marker(str, len))) {
13818  if (!(end = magic_comment_marker(beg, str + len - beg)))
13819  return FALSE;
13820  indicator = TRUE;
13821  str = beg;
13822  len = end - beg - 3;
13823  }
13824 
13825  /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
13826  while (len > 0) {
13827  const struct magic_comment *p = magic_comments;
13828  char *s;
13829  int i;
13830  long n = 0;
13831 
13832  for (; len > 0 && *str; str++, --len) {
13833  switch (*str) {
13834  case '\'': case '"': case ':': case ';':
13835  continue;
13836  }
13837  if (!ISSPACE(*str)) break;
13838  }
13839  for (beg = str; len > 0; str++, --len) {
13840  switch (*str) {
13841  case '\'': case '"': case ':': case ';':
13842  break;
13843  default:
13844  if (ISSPACE(*str)) break;
13845  continue;
13846  }
13847  break;
13848  }
13849  for (end = str; len > 0 && ISSPACE(*str); str++, --len);
13850  if (!len) break;
13851  if (*str != ':') {
13852  if (!indicator) return FALSE;
13853  continue;
13854  }
13855 
13856  do str++; while (--len > 0 && ISSPACE(*str));
13857  if (!len) break;
13858  if (*str == '"') {
13859  for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
13860  if (*str == '\\') {
13861  --len;
13862  ++str;
13863  }
13864  }
13865  vend = str;
13866  if (len) {
13867  --len;
13868  ++str;
13869  }
13870  }
13871  else {
13872  for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
13873  vend = str;
13874  }
13875  if (indicator) {
13876  while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
13877  }
13878  else {
13879  while (len > 0 && (ISSPACE(*str))) --len, str++;
13880  if (len) return FALSE;
13881  }
13882 
13883  n = end - beg;
13884  str_copy(name, beg, n);
13885  s = RSTRING_PTR(name);
13886  for (i = 0; i < n; ++i) {
13887  if (s[i] == '-') s[i] = '_';
13888  }
13889  do {
13890  if (STRNCASECMP(p->name, s, n) == 0 && !p->name[n]) {
13891  n = vend - vbeg;
13892  if (p->length) {
13893  n = (*p->length)(parser, vbeg, n);
13894  }
13895  str_copy(val, vbeg, n);
13896  (*p->func)(parser, p->name, RSTRING_PTR(val));
13897  break;
13898  }
13899  } while (++p < magic_comments + numberof(magic_comments));
13900 #ifdef RIPPER
13901  str_copy(val, vbeg, vend - vbeg);
13902  dispatch2(magic_comment, name, val);
13903 #endif
13904  }
13905 
13906  return TRUE;
13907 }
13908 
13909 static void
13910 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
13911 {
13912  int sep = 0;
13913  const char *beg = str;
13914  VALUE s;
13915 
13916  for (;;) {
13917  if (send - str <= 6) return;
13918  switch (str[6]) {
13919  case 'C': case 'c': str += 6; continue;
13920  case 'O': case 'o': str += 5; continue;
13921  case 'D': case 'd': str += 4; continue;
13922  case 'I': case 'i': str += 3; continue;
13923  case 'N': case 'n': str += 2; continue;
13924  case 'G': case 'g': str += 1; continue;
13925  case '=': case ':':
13926  sep = 1;
13927  str += 6;
13928  break;
13929  default:
13930  str += 6;
13931  if (ISSPACE(*str)) break;
13932  continue;
13933  }
13934  if (STRNCASECMP(str-6, "coding", 6) == 0) break;
13935  }
13936  for (;;) {
13937  do {
13938  if (++str >= send) return;
13939  } while (ISSPACE(*str));
13940  if (sep) break;
13941  if (*str != '=' && *str != ':') return;
13942  sep = 1;
13943  str++;
13944  }
13945  beg = str;
13946  while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
13947  s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
13948  parser_set_encode(parser, RSTRING_PTR(s));
13949  rb_str_resize(s, 0);
13950 }
13951 
13952 static void
13954 {
13955  int c = nextc();
13956  switch (c) {
13957  case '#':
13958  if (peek('!')) parser->has_shebang = 1;
13959  break;
13960  case 0xef: /* UTF-8 BOM marker */
13961  if (lex_pend - lex_p >= 2 &&
13962  (unsigned char)lex_p[0] == 0xbb &&
13963  (unsigned char)lex_p[1] == 0xbf) {
13964  parser->enc = rb_utf8_encoding();
13965  lex_p += 2;
13966  lex_pbeg = lex_p;
13967  return;
13968  }
13969  break;
13970  case EOF:
13971  return;
13972  }
13973  pushback(c);
13974  parser->enc = rb_enc_get(lex_lastline);
13976 }
13977 
13978 #define IS_ARG() IS_lex_state(EXPR_ARG_ANY)
13979 #define IS_END() IS_lex_state(EXPR_END_ANY)
13980 #define IS_BEG() (IS_lex_state(EXPR_BEG_ANY) || IS_lex_state_all(EXPR_ARG|EXPR_LABELED))
13981 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
13982 #define IS_LABEL_POSSIBLE() (\
13983  (IS_lex_state(EXPR_LABEL|EXPR_ENDFN) && !cmd_state) || \
13984  IS_ARG())
13985 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1))
13986 #define IS_AFTER_OPERATOR() IS_lex_state(EXPR_FNAME | EXPR_DOT)
13987 
13988 #ifndef RIPPER
13989 #define ambiguous_operator(op, syn) ( \
13990  rb_warning0("`"op"' after local variable or literal is interpreted as binary operator"), \
13991  rb_warning0("even though it seems like "syn""))
13992 #else
13993 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
13994 #endif
13995 #define warn_balanced(op, syn) ((void) \
13996  (!IS_lex_state_for(last_state, EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN) && \
13997  space_seen && !ISSPACE(c) && \
13998  (ambiguous_operator(op, syn), 0)))
13999 
14000 static VALUE
14001 parse_rational(struct parser_params *parser, char *str, int len, int seen_point)
14002 {
14003  VALUE v;
14004  char *point = &str[seen_point];
14005  size_t fraclen = len-seen_point-1;
14006  memmove(point, point+1, fraclen+1);
14007  v = rb_cstr_to_inum(str, 10, FALSE);
14008  return rb_rational_new(v, rb_int_positive_pow(10, fraclen));
14009 }
14010 
14011 static int
14012 parse_numeric(struct parser_params *parser, int c)
14013 {
14014  int is_float, seen_point, seen_e, nondigit;
14015  int suffix;
14016 
14017  is_float = seen_point = seen_e = nondigit = 0;
14018  SET_LEX_STATE(EXPR_END);
14019  newtok();
14020  if (c == '-' || c == '+') {
14021  tokadd(c);
14022  c = nextc();
14023  }
14024  if (c == '0') {
14025 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
14026  int start = toklen();
14027  c = nextc();
14028  if (c == 'x' || c == 'X') {
14029  /* hexadecimal */
14030  c = nextc();
14031  if (c != -1 && ISXDIGIT(c)) {
14032  do {
14033  if (c == '_') {
14034  if (nondigit) break;
14035  nondigit = c;
14036  continue;
14037  }
14038  if (!ISXDIGIT(c)) break;
14039  nondigit = 0;
14040  tokadd(c);
14041  } while ((c = nextc()) != -1);
14042  }
14043  pushback(c);
14044  tokfix();
14045  if (toklen() == start) {
14046  no_digits();
14047  }
14048  else if (nondigit) goto trailing_uc;
14050  return set_integer_literal(rb_cstr_to_inum(tok(), 16, FALSE), suffix);
14051  }
14052  if (c == 'b' || c == 'B') {
14053  /* binary */
14054  c = nextc();
14055  if (c == '0' || c == '1') {
14056  do {
14057  if (c == '_') {
14058  if (nondigit) break;
14059  nondigit = c;
14060  continue;
14061  }
14062  if (c != '0' && c != '1') break;
14063  nondigit = 0;
14064  tokadd(c);
14065  } while ((c = nextc()) != -1);
14066  }
14067  pushback(c);
14068  tokfix();
14069  if (toklen() == start) {
14070  no_digits();
14071  }
14072  else if (nondigit) goto trailing_uc;
14074  return set_integer_literal(rb_cstr_to_inum(tok(), 2, FALSE), suffix);
14075  }
14076  if (c == 'd' || c == 'D') {
14077  /* decimal */
14078  c = nextc();
14079  if (c != -1 && ISDIGIT(c)) {
14080  do {
14081  if (c == '_') {
14082  if (nondigit) break;
14083  nondigit = c;
14084  continue;
14085  }
14086  if (!ISDIGIT(c)) break;
14087  nondigit = 0;
14088  tokadd(c);
14089  } while ((c = nextc()) != -1);
14090  }
14091  pushback(c);
14092  tokfix();
14093  if (toklen() == start) {
14094  no_digits();
14095  }
14096  else if (nondigit) goto trailing_uc;
14098  return set_integer_literal(rb_cstr_to_inum(tok(), 10, FALSE), suffix);
14099  }
14100  if (c == '_') {
14101  /* 0_0 */
14102  goto octal_number;
14103  }
14104  if (c == 'o' || c == 'O') {
14105  /* prefixed octal */
14106  c = nextc();
14107  if (c == -1 || c == '_' || !ISDIGIT(c)) {
14108  no_digits();
14109  }
14110  }
14111  if (c >= '0' && c <= '7') {
14112  /* octal */
14113  octal_number:
14114  do {
14115  if (c == '_') {
14116  if (nondigit) break;
14117  nondigit = c;
14118  continue;
14119  }
14120  if (c < '0' || c > '9') break;
14121  if (c > '7') goto invalid_octal;
14122  nondigit = 0;
14123  tokadd(c);
14124  } while ((c = nextc()) != -1);
14125  if (toklen() > start) {
14126  pushback(c);
14127  tokfix();
14128  if (nondigit) goto trailing_uc;
14130  return set_integer_literal(rb_cstr_to_inum(tok(), 8, FALSE), suffix);
14131  }
14132  if (nondigit) {
14133  pushback(c);
14134  goto trailing_uc;
14135  }
14136  }
14137  if (c > '7' && c <= '9') {
14138  invalid_octal:
14139  yyerror("Invalid octal digit");
14140  }
14141  else if (c == '.' || c == 'e' || c == 'E') {
14142  tokadd('0');
14143  }
14144  else {
14145  pushback(c);
14147  return set_integer_literal(INT2FIX(0), suffix);
14148  }
14149  }
14150 
14151  for (;;) {
14152  switch (c) {
14153  case '0': case '1': case '2': case '3': case '4':
14154  case '5': case '6': case '7': case '8': case '9':
14155  nondigit = 0;
14156  tokadd(c);
14157  break;
14158 
14159  case '.':
14160  if (nondigit) goto trailing_uc;
14161  if (seen_point || seen_e) {
14162  goto decode_num;
14163  }
14164  else {
14165  int c0 = nextc();
14166  if (c0 == -1 || !ISDIGIT(c0)) {
14167  pushback(c0);
14168  goto decode_num;
14169  }
14170  c = c0;
14171  }
14172  seen_point = toklen();
14173  tokadd('.');
14174  tokadd(c);
14175  is_float++;
14176  nondigit = 0;
14177  break;
14178 
14179  case 'e':
14180  case 'E':
14181  if (nondigit) {
14182  pushback(c);
14183  c = nondigit;
14184  goto decode_num;
14185  }
14186  if (seen_e) {
14187  goto decode_num;
14188  }
14189  nondigit = c;
14190  c = nextc();
14191  if (c != '-' && c != '+' && !ISDIGIT(c)) {
14192  pushback(c);
14193  nondigit = 0;
14194  goto decode_num;
14195  }
14196  tokadd(nondigit);
14197  seen_e++;
14198  is_float++;
14199  tokadd(c);
14200  nondigit = (c == '-' || c == '+') ? c : 0;
14201  break;
14202 
14203  case '_': /* `_' in number just ignored */
14204  if (nondigit) goto decode_num;
14205  nondigit = c;
14206  break;
14207 
14208  default:
14209  goto decode_num;
14210  }
14211  c = nextc();
14212  }
14213 
14214  decode_num:
14215  pushback(c);
14216  if (nondigit) {
14217  char tmp[30];
14218  trailing_uc:
14219  snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
14220  yyerror(tmp);
14221  }
14222  tokfix();
14223  if (is_float) {
14224  int type = tFLOAT;
14225  VALUE v;
14226 
14227  suffix = number_literal_suffix(seen_e ? NUM_SUFFIX_I : NUM_SUFFIX_ALL);
14228  if (suffix & NUM_SUFFIX_R) {
14229  type = tRATIONAL;
14230  v = parse_rational(parser, tok(), toklen(), seen_point);
14231  }
14232  else {
14233  double d = strtod(tok(), 0);
14234  if (errno == ERANGE) {
14235  rb_warning1("Float %s out of range", WARN_S(tok()));
14236  errno = 0;
14237  }
14238  v = DBL2NUM(d);
14239  }
14240  return set_number_literal(v, type, suffix);
14241  }
14243  return set_integer_literal(rb_cstr_to_inum(tok(), 10, FALSE), suffix);
14244 }
14245 
14246 static int
14247 parse_qmark(struct parser_params *parser, int space_seen)
14248 {
14249  rb_encoding *enc;
14250  register int c;
14251 
14252  if (IS_END()) {
14254  return '?';
14255  }
14256  c = nextc();
14257  if (c == -1) {
14258  compile_error(PARSER_ARG "incomplete character syntax");
14259  return 0;
14260  }
14261  if (rb_enc_isspace(c, current_enc)) {
14262  if (!IS_ARG()) {
14263  int c2 = 0;
14264  switch (c) {
14265  case ' ':
14266  c2 = 's';
14267  break;
14268  case '\n':
14269  c2 = 'n';
14270  break;
14271  case '\t':
14272  c2 = 't';
14273  break;
14274  case '\v':
14275  c2 = 'v';
14276  break;
14277  case '\r':
14278  c2 = 'r';
14279  break;
14280  case '\f':
14281  c2 = 'f';
14282  break;
14283  }
14284  if (c2) {
14285  rb_warn1("invalid character syntax; use ?\\%c", WARN_I(c2));
14286  }
14287  }
14288  ternary:
14289  pushback(c);
14291  return '?';
14292  }
14293  newtok();
14294  enc = current_enc;
14295  if (!parser_isascii()) {
14296  if (tokadd_mbchar(c) == -1) return 0;
14297  }
14298  else if ((rb_enc_isalnum(c, current_enc) || c == '_') &&
14300  if (space_seen) {
14301  const char *start = lex_p - 1, *p = start;
14302  do {
14303  int n = parser_precise_mbclen(parser, p);
14304  if (n < 0) return -1;
14305  p += n;
14306  } while (p < lex_pend && is_identchar(p, lex_pend, current_enc));
14307  rb_warn2("`?' just followed by `%.*s' is interpreted as" \
14308  " a conditional operator, put a space after `?'",
14309  WARN_I((int)(p - start)), WARN_S_L(start, (p - start)));
14310  }
14311  goto ternary;
14312  }
14313  else if (c == '\\') {
14314  if (peek('u')) {
14315  nextc();
14316  if (!parser_tokadd_utf8(parser, &enc, 0, 0, 0))
14317  return 0;
14318  }
14319  else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) {
14320  nextc();
14321  if (tokadd_mbchar(c) == -1) return 0;
14322  }
14323  else {
14324  c = read_escape(0, &enc);
14325  tokadd(c);
14326  }
14327  }
14328  else {
14329  tokadd(c);
14330  }
14331  tokfix();
14332  set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
14333  SET_LEX_STATE(EXPR_END);
14334  return tCHAR;
14335 }
14336 
14337 static int
14338 parse_percent(struct parser_params *parser, const int space_seen, const enum lex_state_e last_state)
14339 {
14340  register int c;
14341 
14342  if (IS_BEG()) {
14343  int term;
14344  int paren;
14345 
14346  c = nextc();
14347  quotation:
14348  if (c == -1 || !ISALNUM(c)) {
14349  term = c;
14350  c = 'Q';
14351  }
14352  else {
14353  term = nextc();
14354  if (rb_enc_isalnum(term, current_enc) || !parser_isascii()) {
14355  yyerror("unknown type of %string");
14356  return 0;
14357  }
14358  }
14359  if (c == -1 || term == -1) {
14360  compile_error(PARSER_ARG "unterminated quoted string meets end of file");
14361  return 0;
14362  }
14363  paren = term;
14364  if (term == '(') term = ')';
14365  else if (term == '[') term = ']';
14366  else if (term == '{') term = '}';
14367  else if (term == '<') term = '>';
14368  else paren = 0;
14369 
14370  switch (c) {
14371  case 'Q':
14372  lex_strterm = NEW_STRTERM(str_dquote, term, paren);
14373  return tSTRING_BEG;
14374 
14375  case 'q':
14376  lex_strterm = NEW_STRTERM(str_squote, term, paren);
14377  return tSTRING_BEG;
14378 
14379  case 'W':
14380  lex_strterm = NEW_STRTERM(str_dword, term, paren);
14381  do {c = nextc();} while (ISSPACE(c));
14382  pushback(c);
14383  return tWORDS_BEG;
14384 
14385  case 'w':
14386  lex_strterm = NEW_STRTERM(str_sword, term, paren);
14387  do {c = nextc();} while (ISSPACE(c));
14388  pushback(c);
14389  return tQWORDS_BEG;
14390 
14391  case 'I':
14392  lex_strterm = NEW_STRTERM(str_dword, term, paren);
14393  do {c = nextc();} while (ISSPACE(c));
14394  pushback(c);
14395  return tSYMBOLS_BEG;
14396 
14397  case 'i':
14398  lex_strterm = NEW_STRTERM(str_sword, term, paren);
14399  do {c = nextc();} while (ISSPACE(c));
14400  pushback(c);
14401  return tQSYMBOLS_BEG;
14402 
14403  case 'x':
14404  lex_strterm = NEW_STRTERM(str_xquote, term, paren);
14405  return tXSTRING_BEG;
14406 
14407  case 'r':
14408  lex_strterm = NEW_STRTERM(str_regexp, term, paren);
14409  return tREGEXP_BEG;
14410 
14411  case 's':
14412  lex_strterm = NEW_STRTERM(str_ssym, term, paren);
14413  SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);
14414  return tSYMBEG;
14415 
14416  default:
14417  yyerror("unknown type of %string");
14418  return 0;
14419  }
14420  }
14421  if ((c = nextc()) == '=') {
14422  set_yylval_id('%');
14423  SET_LEX_STATE(EXPR_BEG);
14424  return tOP_ASGN;
14425  }
14426  if (IS_SPCARG(c) || (IS_lex_state(EXPR_FITEM) && c == 's')) {
14427  goto quotation;
14428  }
14429  SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
14430  pushback(c);
14431  warn_balanced("%%", "string literal");
14432  return '%';
14433 }
14434 
14435 static int
14436 tokadd_ident(struct parser_params *parser, int c)
14437 {
14438  do {
14439  if (tokadd_mbchar(c) == -1) return -1;
14440  c = nextc();
14441  } while (parser_is_identchar());
14442  pushback(c);
14443  return 0;
14444 }
14445 
14446 static ID
14447 tokenize_ident(struct parser_params *parser, const enum lex_state_e last_state)
14448 {
14449  ID ident = TOK_INTERN();
14450 
14451  set_yylval_name(ident);
14452 
14453  return ident;
14454 }
14455 
14456 static int
14458 {
14459  size_t len;
14460  int overflow;
14461  unsigned long n = ruby_scan_digits(tok()+1, toklen()-1, 10, &len, &overflow);
14462  const unsigned long nth_ref_max =
14463  ((FIXNUM_MAX < INT_MAX) ? FIXNUM_MAX : INT_MAX) >> 1;
14464  /* NTH_REF is left-shifted to be ORed with back-ref flag and
14465  * turned into a Fixnum, in compile.c */
14466 
14467  if (overflow || n > nth_ref_max) {
14468  /* compile_error()? */
14469  rb_warn1("`%s' is too big for a number variable, always nil", WARN_S(tok()));
14470  return 0; /* $0 is $PROGRAM_NAME, not NTH_REF */
14471  }
14472  else {
14473  return (int)n;
14474  }
14475 }
14476 
14477 static int
14478 parse_gvar(struct parser_params *parser, const enum lex_state_e last_state)
14479 {
14480  register int c;
14481 
14482  SET_LEX_STATE(EXPR_END);
14483  newtok();
14484  c = nextc();
14485  switch (c) {
14486  case '_': /* $_: last read line string */
14487  c = nextc();
14488  if (parser_is_identchar()) {
14489  tokadd('$');
14490  tokadd('_');
14491  break;
14492  }
14493  pushback(c);
14494  c = '_';
14495  /* fall through */
14496  case '~': /* $~: match-data */
14497  case '*': /* $*: argv */
14498  case '$': /* $$: pid */
14499  case '?': /* $?: last status */
14500  case '!': /* $!: error string */
14501  case '@': /* $@: error position */
14502  case '/': /* $/: input record separator */
14503  case '\\': /* $\: output record separator */
14504  case ';': /* $;: field separator */
14505  case ',': /* $,: output field separator */
14506  case '.': /* $.: last read line number */
14507  case '=': /* $=: ignorecase */
14508  case ':': /* $:: load path */
14509  case '<': /* $<: reading filename */
14510  case '>': /* $>: default output handle */
14511  case '\"': /* $": already loaded files */
14512  tokadd('$');
14513  tokadd(c);
14514  goto gvar;
14515 
14516  case '-':
14517  tokadd('$');
14518  tokadd(c);
14519  c = nextc();
14520  if (parser_is_identchar()) {
14521  if (tokadd_mbchar(c) == -1) return 0;
14522  }
14523  else {
14524  pushback(c);
14525  pushback('-');
14526  return '$';
14527  }
14528  gvar:
14530  return tGVAR;
14531 
14532  case '&': /* $&: last match */
14533  case '`': /* $`: string before last match */
14534  case '\'': /* $': string after last match */
14535  case '+': /* $+: string matches last paren. */
14536  if (IS_lex_state_for(last_state, EXPR_FNAME)) {
14537  tokadd('$');
14538  tokadd(c);
14539  goto gvar;
14540  }
14542  return tBACK_REF;
14543 
14544  case '1': case '2': case '3':
14545  case '4': case '5': case '6':
14546  case '7': case '8': case '9':
14547  tokadd('$');
14548  do {
14549  tokadd(c);
14550  c = nextc();
14551  } while (c != -1 && ISDIGIT(c));
14552  pushback(c);
14553  if (IS_lex_state_for(last_state, EXPR_FNAME)) goto gvar;
14554  tokfix();
14556  return tNTH_REF;
14557 
14558  default:
14559  if (!parser_is_identchar()) {
14560  if (c == -1 || ISSPACE(c)) {
14561  compile_error(PARSER_ARG "`$' without identifiers is not allowed as a global variable name");
14562  }
14563  else {
14564  pushback(c);
14565  compile_error(PARSER_ARG "`$%c' is not allowed as a global variable name", c);
14566  }
14567  return 0;
14568  }
14569  case '0':
14570  tokadd('$');
14571  }
14572 
14573  if (tokadd_ident(parser, c)) return 0;
14574  SET_LEX_STATE(EXPR_END);
14575  tokenize_ident(parser, last_state);
14576  return tGVAR;
14577 }
14578 
14579 static int
14580 parse_atmark(struct parser_params *parser, const enum lex_state_e last_state)
14581 {
14582  int result = tIVAR;
14583  register int c = nextc();
14584 
14585  newtok();
14586  tokadd('@');
14587  if (c == '@') {
14588  result = tCVAR;
14589  tokadd('@');
14590  c = nextc();
14591  }
14592  if (c == -1 || ISSPACE(c)) {
14593  if (result == tIVAR) {
14594  compile_error(PARSER_ARG "`@' without identifiers is not allowed as an instance variable name");
14595  }
14596  else {
14597  compile_error(PARSER_ARG "`@@' without identifiers is not allowed as a class variable name");
14598  }
14599  return 0;
14600  }
14601  else if (ISDIGIT(c) || !parser_is_identchar()) {
14602  pushback(c);
14603  if (result == tIVAR) {
14604  compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
14605  }
14606  else {
14607  compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
14608  }
14609  return 0;
14610  }
14611 
14612  if (tokadd_ident(parser, c)) return 0;
14613  SET_LEX_STATE(EXPR_END);
14614  tokenize_ident(parser, last_state);
14615  return result;
14616 }
14617 
14618 static int
14619 parse_ident(struct parser_params *parser, int c, int cmd_state)
14620 {
14621  int result = 0;
14622  int mb = ENC_CODERANGE_7BIT;
14623  const enum lex_state_e last_state = lex_state;
14624  ID ident;
14625 
14626  do {
14627  if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
14628  if (tokadd_mbchar(c) == -1) return 0;
14629  c = nextc();
14630  } while (parser_is_identchar());
14631  if ((c == '!' || c == '?') && !peek('=')) {
14632  tokadd(c);
14633  }
14634  else {
14635  pushback(c);
14636  }
14637  tokfix();
14638 
14639  if (toklast() == '!' || toklast() == '?') {
14640  result = tFID;
14641  }
14642  else {
14643  if (IS_lex_state(EXPR_FNAME)) {
14644  register int c = nextc();
14645  if (c == '=' && !peek('~') && !peek('>') &&
14646  (!peek('=') || (peek_n('>', 1)))) {
14647  result = tIDENTIFIER;
14648  tokadd(c);
14649  tokfix();
14650  }
14651  else {
14652  pushback(c);
14653  }
14654  }
14655  if (result == 0 && ISUPPER(tok()[0])) {
14656  result = tCONSTANT;
14657  }
14658  else {
14659  result = tIDENTIFIER;
14660  }
14661  }
14662 
14663  if (IS_LABEL_POSSIBLE()) {
14664  if (IS_LABEL_SUFFIX(0)) {
14665  SET_LEX_STATE(EXPR_ARG|EXPR_LABELED);
14666  nextc();
14668  return tLABEL;
14669  }
14670  }
14671  if (mb == ENC_CODERANGE_7BIT && !IS_lex_state(EXPR_DOT)) {
14672  const struct kwtable *kw;
14673 
14674  /* See if it is a reserved word. */
14675  kw = rb_reserved_word(tok(), toklen());
14676  if (kw) {
14677  enum lex_state_e state = lex_state;
14678  SET_LEX_STATE(kw->state);
14679  if (IS_lex_state_for(state, EXPR_FNAME)) {
14681  return kw->id[0];
14682  }
14683  if (IS_lex_state(EXPR_BEG)) {
14684  command_start = TRUE;
14685  }
14686  if (kw->id[0] == keyword_do) {
14687  if (lambda_beginning_p()) {
14688  lpar_beg = 0;
14689  --paren_nest;
14690  return keyword_do_LAMBDA;
14691  }
14692  if (COND_P()) return keyword_do_cond;
14693  if (CMDARG_P() && !IS_lex_state_for(state, EXPR_CMDARG))
14694  return keyword_do_block;
14695  if (IS_lex_state_for(state, (EXPR_BEG | EXPR_ENDARG)))
14696  return keyword_do_block;
14697  return keyword_do;
14698  }
14699  if (IS_lex_state_for(state, (EXPR_BEG | EXPR_LABELED)))
14700  return kw->id[0];
14701  else {
14702  if (kw->id[0] != kw->id[1])
14703  SET_LEX_STATE(EXPR_BEG | EXPR_LABEL);
14704  return kw->id[1];
14705  }
14706  }
14707  }
14708 
14709  if (IS_lex_state(EXPR_BEG_ANY | EXPR_ARG_ANY | EXPR_DOT)) {
14710  if (cmd_state) {
14711  SET_LEX_STATE(EXPR_CMDARG);
14712  }
14713  else {
14714  SET_LEX_STATE(EXPR_ARG);
14715  }
14716  }
14717  else if (lex_state == EXPR_FNAME) {
14718  SET_LEX_STATE(EXPR_ENDFN);
14719  }
14720  else {
14721  SET_LEX_STATE(EXPR_END);
14722  }
14723 
14724  ident = tokenize_ident(parser, last_state);
14725  if (!IS_lex_state_for(last_state, EXPR_DOT|EXPR_FNAME) &&
14726  (result == tIDENTIFIER) && /* not EXPR_FNAME, not attrasgn */
14727  lvar_defined(ident)) {
14728  SET_LEX_STATE(EXPR_END|EXPR_LABEL);
14729  }
14730  return result;
14731 }
14732 
14733 static int
14735 {
14736  register int c;
14737  int space_seen = 0;
14738  int cmd_state;
14739  int label;
14740  enum lex_state_e last_state;
14741  int fallthru = FALSE;
14742  int token_seen = parser->token_seen;
14743 
14744  if (lex_strterm) {
14745  int token;
14746  if (nd_type(lex_strterm) == NODE_HEREDOC) {
14747  token = here_document(lex_strterm);
14748  if (token == tSTRING_END) {
14749  lex_strterm = 0;
14750  SET_LEX_STATE(EXPR_END);
14751  }
14752  }
14753  else {
14754  token = parse_string(lex_strterm);
14755  if ((token == tSTRING_END) && (lex_strterm->nd_func & STR_FUNC_LABEL)) {
14756  if (((IS_lex_state(EXPR_BEG | EXPR_ENDFN) && !COND_P()) || IS_ARG()) &&
14757  IS_LABEL_SUFFIX(0)) {
14758  nextc();
14759  token = tLABEL_END;
14760  }
14761  }
14762  if (token == tSTRING_END || token == tREGEXP_END || token == tLABEL_END) {
14763  const enum lex_state_e next_state =
14764  token == tLABEL_END ? EXPR_BEG|EXPR_LABEL : EXPR_END|EXPR_ENDARG;
14766  lex_strterm = 0;
14767  SET_LEX_STATE(next_state);
14768  }
14769  }
14770  return token;
14771  }
14772  cmd_state = command_start;
14773  command_start = FALSE;
14774  parser->token_seen = TRUE;
14775  retry:
14776  last_state = lex_state;
14777  switch (c = nextc()) {
14778  case '\0': /* NUL */
14779  case '\004': /* ^D */
14780  case '\032': /* ^Z */
14781  case -1: /* end of script. */
14782  return 0;
14783 
14784  /* white spaces */
14785  case ' ': case '\t': case '\f': case '\r':
14786  case '\13': /* '\v' */
14787  space_seen = 1;
14788 #ifdef RIPPER
14789  while ((c = nextc())) {
14790  switch (c) {
14791  case ' ': case '\t': case '\f': case '\r':
14792  case '\13': /* '\v' */
14793  break;
14794  default:
14795  goto outofloop;
14796  }
14797  }
14798  outofloop:
14799  pushback(c);
14801 #endif
14802  goto retry;
14803 
14804  case '#': /* it's a comment */
14805  parser->token_seen = token_seen;
14806  /* no magic_comment in shebang line */
14807  if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
14808  if (comment_at_top(parser)) {
14809  set_file_encoding(parser, lex_p, lex_pend);
14810  }
14811  }
14812  lex_p = lex_pend;
14814  fallthru = TRUE;
14815  /* fall through */
14816  case '\n':
14817  parser->token_seen = token_seen;
14818  c = (IS_lex_state(EXPR_BEG|EXPR_CLASS|EXPR_FNAME|EXPR_DOT) &&
14819  !IS_lex_state(EXPR_LABELED));
14820  if (c || IS_lex_state_all(EXPR_ARG|EXPR_LABELED)) {
14821  if (!fallthru) {
14823  }
14824  fallthru = FALSE;
14825  if (!c && parser->in_kwarg) {
14826  goto normal_newline;
14827  }
14828  goto retry;
14829  }
14830  while ((c = nextc())) {
14831  switch (c) {
14832  case ' ': case '\t': case '\f': case '\r':
14833  case '\13': /* '\v' */
14834  space_seen = 1;
14835  break;
14836  case '&':
14837  case '.': {
14839  if (peek('.') == (c == '&')) {
14840  pushback(c);
14842  goto retry;
14843  }
14844  }
14845  default:
14846  --ruby_sourceline;
14848  case -1: /* EOF no decrement*/
14849  lex_goto_eol(parser);
14850 #ifdef RIPPER
14851  if (c != -1) {
14852  parser->tokp = lex_p;
14853  }
14854 #endif
14855  goto normal_newline;
14856  }
14857  }
14858  normal_newline:
14859  command_start = TRUE;
14860  SET_LEX_STATE(EXPR_BEG);
14861  return '\n';
14862 
14863  case '*':
14864  if ((c = nextc()) == '*') {
14865  if ((c = nextc()) == '=') {
14867  SET_LEX_STATE(EXPR_BEG);
14868  return tOP_ASGN;
14869  }
14870  pushback(c);
14871  if (IS_SPCARG(c)) {
14872  rb_warning0("`**' interpreted as argument prefix");
14873  c = tDSTAR;
14874  }
14875  else if (IS_BEG()) {
14876  c = tDSTAR;
14877  }
14878  else {
14879  warn_balanced("**", "argument prefix");
14880  c = tPOW;
14881  }
14882  }
14883  else {
14884  if (c == '=') {
14885  set_yylval_id('*');
14886  SET_LEX_STATE(EXPR_BEG);
14887  return tOP_ASGN;
14888  }
14889  pushback(c);
14890  if (IS_SPCARG(c)) {
14891  rb_warning0("`*' interpreted as argument prefix");
14892  c = tSTAR;
14893  }
14894  else if (IS_BEG()) {
14895  c = tSTAR;
14896  }
14897  else {
14898  warn_balanced("*", "argument prefix");
14899  c = '*';
14900  }
14901  }
14902  SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
14903  return c;
14904 
14905  case '!':
14906  c = nextc();
14907  if (IS_AFTER_OPERATOR()) {
14908  SET_LEX_STATE(EXPR_ARG);
14909  if (c == '@') {
14910  return '!';
14911  }
14912  }
14913  else {
14914  SET_LEX_STATE(EXPR_BEG);
14915  }
14916  if (c == '=') {
14917  return tNEQ;
14918  }
14919  if (c == '~') {
14920  return tNMATCH;
14921  }
14922  pushback(c);
14923  return '!';
14924 
14925  case '=':
14926  if (was_bol()) {
14927  /* skip embedded rd document */
14928  if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
14929  int first_p = TRUE;
14930 
14931  lex_goto_eol(parser);
14933  for (;;) {
14934  lex_goto_eol(parser);
14935  if (!first_p) {
14937  }
14938  first_p = FALSE;
14939  c = nextc();
14940  if (c == -1) {
14941  compile_error(PARSER_ARG "embedded document meets end of file");
14942  return 0;
14943  }
14944  if (c != '=') continue;
14945  if (c == '=' && strncmp(lex_p, "end", 3) == 0 &&
14946  (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
14947  break;
14948  }
14949  }
14950  lex_goto_eol(parser);
14952  goto retry;
14953  }
14954  }
14955 
14956  SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
14957  if ((c = nextc()) == '=') {
14958  if ((c = nextc()) == '=') {
14959  return tEQQ;
14960  }
14961  pushback(c);
14962  return tEQ;
14963  }
14964  if (c == '~') {
14965  return tMATCH;
14966  }
14967  else if (c == '>') {
14968  return tASSOC;
14969  }
14970  pushback(c);
14971  return '=';
14972 
14973  case '<':
14974  last_state = lex_state;
14975  c = nextc();
14976  if (c == '<' &&
14977  !IS_lex_state(EXPR_DOT | EXPR_CLASS) &&
14978  !IS_END() &&
14979  (!IS_ARG() || IS_lex_state(EXPR_LABELED) || space_seen)) {
14980  int token = heredoc_identifier();
14981  if (token) return token;
14982  }
14983  if (IS_AFTER_OPERATOR()) {
14984  SET_LEX_STATE(EXPR_ARG);
14985  }
14986  else {
14987  if (IS_lex_state(EXPR_CLASS))
14988  command_start = TRUE;
14989  SET_LEX_STATE(EXPR_BEG);
14990  }
14991  if (c == '=') {
14992  if ((c = nextc()) == '>') {
14993  return tCMP;
14994  }
14995  pushback(c);
14996  return tLEQ;
14997  }
14998  if (c == '<') {
14999  if ((c = nextc()) == '=') {
15001  SET_LEX_STATE(EXPR_BEG);
15002  return tOP_ASGN;
15003  }
15004  pushback(c);
15005  warn_balanced("<<", "here document");
15006  return tLSHFT;
15007  }
15008  pushback(c);
15009  return '<';
15010 
15011  case '>':
15012  SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
15013  if ((c = nextc()) == '=') {
15014  return tGEQ;
15015  }
15016  if (c == '>') {
15017  if ((c = nextc()) == '=') {
15019  SET_LEX_STATE(EXPR_BEG);
15020  return tOP_ASGN;
15021  }
15022  pushback(c);
15023  return tRSHFT;
15024  }
15025  pushback(c);
15026  return '>';
15027 
15028  case '"':
15029  label = (IS_LABEL_POSSIBLE() ? str_label : 0);
15030  lex_strterm = NEW_STRTERM(str_dquote | label, '"', 0);
15031  return tSTRING_BEG;
15032 
15033  case '`':
15034  if (IS_lex_state(EXPR_FNAME)) {
15035  SET_LEX_STATE(EXPR_ENDFN);
15036  return c;
15037  }
15038  if (IS_lex_state(EXPR_DOT)) {
15039  if (cmd_state)
15040  SET_LEX_STATE(EXPR_CMDARG);
15041  else
15042  SET_LEX_STATE(EXPR_ARG);
15043  return c;
15044  }
15045  lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
15046  return tXSTRING_BEG;
15047 
15048  case '\'':
15049  label = (IS_LABEL_POSSIBLE() ? str_label : 0);
15050  lex_strterm = NEW_STRTERM(str_squote | label, '\'', 0);
15051  return tSTRING_BEG;
15052 
15053  case '?':
15054  return parse_qmark(parser, space_seen);
15055 
15056  case '&':
15057  if ((c = nextc()) == '&') {
15058  SET_LEX_STATE(EXPR_BEG);
15059  if ((c = nextc()) == '=') {
15061  SET_LEX_STATE(EXPR_BEG);
15062  return tOP_ASGN;
15063  }
15064  pushback(c);
15065  return tANDOP;
15066  }
15067  else if (c == '=') {
15068  set_yylval_id('&');
15069  SET_LEX_STATE(EXPR_BEG);
15070  return tOP_ASGN;
15071  }
15072  else if (c == '.') {
15073  SET_LEX_STATE(EXPR_DOT);
15074  return tANDDOT;
15075  }
15076  pushback(c);
15077  if (IS_SPCARG(c)) {
15078  rb_warning0("`&' interpreted as argument prefix");
15079  c = tAMPER;
15080  }
15081  else if (IS_BEG()) {
15082  c = tAMPER;
15083  }
15084  else {
15085  warn_balanced("&", "argument prefix");
15086  c = '&';
15087  }
15088  SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
15089  return c;
15090 
15091  case '|':
15092  if ((c = nextc()) == '|') {
15093  SET_LEX_STATE(EXPR_BEG);
15094  if ((c = nextc()) == '=') {
15096  SET_LEX_STATE(EXPR_BEG);
15097  return tOP_ASGN;
15098  }
15099  pushback(c);
15100  return tOROP;
15101  }
15102  if (c == '=') {
15103  set_yylval_id('|');
15104  SET_LEX_STATE(EXPR_BEG);
15105  return tOP_ASGN;
15106  }
15107  SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG|EXPR_LABEL);
15108  pushback(c);
15109  return '|';
15110 
15111  case '+':
15112  c = nextc();
15113  if (IS_AFTER_OPERATOR()) {
15114  SET_LEX_STATE(EXPR_ARG);
15115  if (c == '@') {
15116  return tUPLUS;
15117  }
15118  pushback(c);
15119  return '+';
15120  }
15121  if (c == '=') {
15122  set_yylval_id('+');
15123  SET_LEX_STATE(EXPR_BEG);
15124  return tOP_ASGN;
15125  }
15126  if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous('+'))) {
15127  SET_LEX_STATE(EXPR_BEG);
15128  pushback(c);
15129  if (c != -1 && ISDIGIT(c)) {
15130  return parse_numeric(parser, '+');
15131  }
15132  return tUPLUS;
15133  }
15134  SET_LEX_STATE(EXPR_BEG);
15135  pushback(c);
15136  warn_balanced("+", "unary operator");
15137  return '+';
15138 
15139  case '-':
15140  c = nextc();
15141  if (IS_AFTER_OPERATOR()) {
15142  SET_LEX_STATE(EXPR_ARG);
15143  if (c == '@') {
15144  return tUMINUS;
15145  }
15146  pushback(c);
15147  return '-';
15148  }
15149  if (c == '=') {
15150  set_yylval_id('-');
15151  SET_LEX_STATE(EXPR_BEG);
15152  return tOP_ASGN;
15153  }
15154  if (c == '>') {
15155  SET_LEX_STATE(EXPR_ENDFN);
15156  token_info_push("->");
15157  return tLAMBDA;
15158  }
15159  if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous('-'))) {
15160  SET_LEX_STATE(EXPR_BEG);
15161  pushback(c);
15162  if (c != -1 && ISDIGIT(c)) {
15163  return tUMINUS_NUM;
15164  }
15165  return tUMINUS;
15166  }
15167  SET_LEX_STATE(EXPR_BEG);
15168  pushback(c);
15169  warn_balanced("-", "unary operator");
15170  return '-';
15171 
15172  case '.':
15173  SET_LEX_STATE(EXPR_BEG);
15174  if ((c = nextc()) == '.') {
15175  if ((c = nextc()) == '.') {
15176  return tDOT3;
15177  }
15178  pushback(c);
15179  return tDOT2;
15180  }
15181  pushback(c);
15182  if (c != -1 && ISDIGIT(c)) {
15183  yyerror("no .<digit> floating literal anymore; put 0 before dot");
15184  }
15185  SET_LEX_STATE(EXPR_DOT);
15186  return '.';
15187 
15188  case '0': case '1': case '2': case '3': case '4':
15189  case '5': case '6': case '7': case '8': case '9':
15190  return parse_numeric(parser, c);
15191 
15192  case ')':
15193  case ']':
15194  paren_nest--;
15195  case '}':
15196  COND_LEXPOP();
15197  CMDARG_LEXPOP();
15198  if (c == ')')
15199  SET_LEX_STATE(EXPR_ENDFN);
15200  else
15201  SET_LEX_STATE(EXPR_ENDARG);
15202  if (c == '}') {
15203  if (!brace_nest--) c = tSTRING_DEND;
15204  }
15205  return c;
15206 
15207  case ':':
15208  c = nextc();
15209  if (c == ':') {
15210  if (IS_BEG() || IS_lex_state(EXPR_CLASS) || IS_SPCARG(-1)) {
15211  SET_LEX_STATE(EXPR_BEG);
15212  return tCOLON3;
15213  }
15214  SET_LEX_STATE(EXPR_DOT);
15215  return tCOLON2;
15216  }
15217  if (IS_END() || ISSPACE(c) || c == '#') {
15218  pushback(c);
15219  warn_balanced(":", "symbol literal");
15220  SET_LEX_STATE(EXPR_BEG);
15221  return ':';
15222  }
15223  switch (c) {
15224  case '\'':
15225  lex_strterm = NEW_STRTERM(str_ssym, c, 0);
15226  break;
15227  case '"':
15228  lex_strterm = NEW_STRTERM(str_dsym, c, 0);
15229  break;
15230  default:
15231  pushback(c);
15232  break;
15233  }
15234  SET_LEX_STATE(EXPR_FNAME);
15235  return tSYMBEG;
15236 
15237  case '/':
15238  if (IS_BEG()) {
15239  lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
15240  return tREGEXP_BEG;
15241  }
15242  if ((c = nextc()) == '=') {
15243  set_yylval_id('/');
15244  SET_LEX_STATE(EXPR_BEG);
15245  return tOP_ASGN;
15246  }
15247  pushback(c);
15248  if (IS_SPCARG(c)) {
15249  (void)arg_ambiguous('/');
15250  lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
15251  return tREGEXP_BEG;
15252  }
15253  SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
15254  warn_balanced("/", "regexp literal");
15255  return '/';
15256 
15257  case '^':
15258  if ((c = nextc()) == '=') {
15259  set_yylval_id('^');
15260  SET_LEX_STATE(EXPR_BEG);
15261  return tOP_ASGN;
15262  }
15263  SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
15264  pushback(c);
15265  return '^';
15266 
15267  case ';':
15268  SET_LEX_STATE(EXPR_BEG);
15269  command_start = TRUE;
15270  return ';';
15271 
15272  case ',':
15273  SET_LEX_STATE(EXPR_BEG|EXPR_LABEL);
15274  return ',';
15275 
15276  case '~':
15277  if (IS_AFTER_OPERATOR()) {
15278  if ((c = nextc()) != '@') {
15279  pushback(c);
15280  }
15281  SET_LEX_STATE(EXPR_ARG);
15282  }
15283  else {
15284  SET_LEX_STATE(EXPR_BEG);
15285  }
15286  return '~';
15287 
15288  case '(':
15289  if (IS_BEG()) {
15290  c = tLPAREN;
15291  }
15292  else if (IS_SPCARG(-1)) {
15293  c = tLPAREN_ARG;
15294  }
15295  else if (IS_lex_state(EXPR_ENDFN) && space_seen && !lambda_beginning_p()) {
15296  rb_warning0("parentheses after method name is interpreted as "
15297  "an argument list, not a decomposed argument");
15298  }
15299  paren_nest++;
15300  COND_PUSH(0);
15301  CMDARG_PUSH(0);
15302  SET_LEX_STATE(EXPR_BEG|EXPR_LABEL);
15303  return c;
15304 
15305  case '[':
15306  paren_nest++;
15307  if (IS_AFTER_OPERATOR()) {
15308  SET_LEX_STATE(EXPR_ARG);
15309  if ((c = nextc()) == ']') {
15310  if ((c = nextc()) == '=') {
15311  return tASET;
15312  }
15313  pushback(c);
15314  return tAREF;
15315  }
15316  pushback(c);
15317  lex_state |= EXPR_LABEL;
15318  return '[';
15319  }
15320  else if (IS_BEG()) {
15321  c = tLBRACK;
15322  }
15323  else if (IS_ARG() && (space_seen || IS_lex_state(EXPR_LABELED))) {
15324  c = tLBRACK;
15325  }
15326  SET_LEX_STATE(EXPR_BEG|EXPR_LABEL);
15327  COND_PUSH(0);
15328  CMDARG_PUSH(0);
15329  return c;
15330 
15331  case '{':
15332  ++brace_nest;
15333  if (lambda_beginning_p()) {
15334  SET_LEX_STATE(EXPR_BEG);
15335  lpar_beg = 0;
15336  --paren_nest;
15337  COND_PUSH(0);
15338  CMDARG_PUSH(0);
15339  return tLAMBEG;
15340  }
15341  if (IS_lex_state(EXPR_LABELED))
15342  c = tLBRACE; /* hash */
15343  else if (IS_lex_state(EXPR_ARG_ANY | EXPR_END | EXPR_ENDFN))
15344  c = '{'; /* block (primary) */
15345  else if (IS_lex_state(EXPR_ENDARG))
15346  c = tLBRACE_ARG; /* block (expr) */
15347  else
15348  c = tLBRACE; /* hash */
15349  COND_PUSH(0);
15350  CMDARG_PUSH(0);
15351  SET_LEX_STATE(EXPR_BEG);
15352  if (c != tLBRACE_ARG) lex_state |= EXPR_LABEL;
15353  if (c != tLBRACE) command_start = TRUE;
15354  return c;
15355 
15356  case '\\':
15357  c = nextc();
15358  if (c == '\n') {
15359  space_seen = 1;
15361  goto retry; /* skip \\n */
15362  }
15363  pushback(c);
15364  return '\\';
15365 
15366  case '%':
15367  return parse_percent(parser, space_seen, last_state);
15368 
15369  case '$':
15370  return parse_gvar(parser, last_state);
15371 
15372  case '@':
15373  return parse_atmark(parser, last_state);
15374 
15375  case '_':
15376  if (was_bol() && whole_match_p("__END__", 7, 0)) {
15377  ruby__end__seen = 1;
15378  parser->eofp = 1;
15379 #ifndef RIPPER
15380  return -1;
15381 #else
15382  lex_goto_eol(parser);
15384  return 0;
15385 #endif
15386  }
15387  newtok();
15388  break;
15389 
15390  default:
15391  if (!parser_is_identchar()) {
15392  compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c);
15393  goto retry;
15394  }
15395 
15396  newtok();
15397  break;
15398  }
15399 
15400  return parse_ident(parser, c, cmd_state);
15401 }
15402 
15403 static int
15404 yylex(YYSTYPE *lval, struct parser_params *parser)
15405 {
15406  int t;
15407 
15408  parser->lval = lval;
15409  lval->val = Qundef;
15410  t = parser_yylex(parser);
15411  if (has_delayed_token())
15413  else if (t != 0)
15415 
15416  return t;
15417 }
15418 
15419 #ifndef RIPPER
15420 static NODE*
15421 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
15422 {
15423  NODE *n = (rb_node_newnode)(type, a0, a1, a2);
15425  return n;
15426 }
15427 
15428 static enum node_type
15429 nodetype(NODE *node) /* for debug */
15430 {
15431  return (enum node_type)nd_type(node);
15432 }
15433 
15434 static int
15436 {
15437  return nd_line(node);
15438 }
15439 
15440 static NODE*
15442 {
15443  if (node) {
15444  node = remove_begin(node);
15445  node->flags |= NODE_FL_NEWLINE;
15446  }
15447  return node;
15448 }
15449 
15450 static void
15451 fixpos(NODE *node, NODE *orig)
15452 {
15453  if (!node) return;
15454  if (!orig) return;
15455  if (orig == (NODE*)1) return;
15456  nd_set_line(node, nd_line(orig));
15457 }
15458 
15459 static void
15460 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
15461 {
15462  rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
15463 }
15464 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg))
15465 
15466 static void
15467 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
15468 {
15469  rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
15470 }
15471 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg))
15472 
15473 static NODE*
15474 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
15475 {
15476  NODE *end, *h = head, *nd;
15477 
15478  if (tail == 0) return head;
15479 
15480  if (h == 0) return tail;
15481  switch (nd_type(h)) {
15482  case NODE_LIT:
15483  case NODE_STR:
15484  case NODE_SELF:
15485  case NODE_TRUE:
15486  case NODE_FALSE:
15487  case NODE_NIL:
15488  parser_warning(h, "unused literal ignored");
15489  return tail;
15490  default:
15491  h = end = NEW_BLOCK(head);
15492  end->nd_end = end;
15493  fixpos(end, head);
15494  head = end;
15495  break;
15496  case NODE_BLOCK:
15497  end = h->nd_end;
15498  break;
15499  }
15500 
15501  nd = end->nd_head;
15502  switch (nd_type(nd)) {
15503  case NODE_RETURN:
15504  case NODE_BREAK:
15505  case NODE_NEXT:
15506  case NODE_REDO:
15507  case NODE_RETRY:
15508  if (RTEST(ruby_verbose)) {
15509  parser_warning(tail, "statement not reached");
15510  }
15511  break;
15512 
15513  default:
15514  break;
15515  }
15516 
15517  if (nd_type(tail) != NODE_BLOCK) {
15518  tail = NEW_BLOCK(tail);
15519  tail->nd_end = tail;
15520  }
15521  end->nd_next = tail;
15522  h->nd_end = tail->nd_end;
15523  return head;
15524 }
15525 
15526 /* append item to the list */
15527 static NODE*
15528 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
15529 {
15530  NODE *last;
15531 
15532  if (list == 0) return NEW_LIST(item);
15533  if (list->nd_next) {
15534  last = list->nd_next->nd_end;
15535  }
15536  else {
15537  last = list;
15538  }
15539 
15540  list->nd_alen += 1;
15541  last->nd_next = NEW_LIST(item);
15542  list->nd_next->nd_end = last->nd_next;
15543  return list;
15544 }
15545 
15546 /* concat two lists */
15547 static NODE*
15548 list_concat(NODE *head, NODE *tail)
15549 {
15550  NODE *last;
15551 
15552  if (head->nd_next) {
15553  last = head->nd_next->nd_end;
15554  }
15555  else {
15556  last = head;
15557  }
15558 
15559  head->nd_alen += tail->nd_alen;
15560  last->nd_next = tail;
15561  if (tail->nd_next) {
15562  head->nd_next->nd_end = tail->nd_next->nd_end;
15563  }
15564  else {
15565  head->nd_next->nd_end = tail;
15566  }
15567 
15568  return head;
15569 }
15570 
15571 static int
15572 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
15573 {
15574  if (NIL_P(tail)) return 1;
15575  if (!rb_enc_compatible(head, tail)) {
15576  compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
15577  rb_enc_name(rb_enc_get(head)),
15578  rb_enc_name(rb_enc_get(tail)));
15579  rb_str_resize(head, 0);
15580  rb_str_resize(tail, 0);
15581  return 0;
15582  }
15583  rb_str_buf_append(head, tail);
15584  return 1;
15585 }
15586 
15587 /* concat two string literals */
15588 static NODE *
15589 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
15590 {
15591  enum node_type htype;
15592  NODE *headlast;
15593  VALUE lit;
15594 
15595  if (!head) return tail;
15596  if (!tail) return head;
15597 
15598  htype = nd_type(head);
15599  if (htype == NODE_EVSTR) {
15600  NODE *node = NEW_DSTR(STR_NEW0());
15601  head = list_append(node, head);
15602  htype = NODE_DSTR;
15603  }
15604  if (heredoc_indent > 0) {
15605  switch (htype) {
15606  case NODE_STR:
15607  nd_set_type(head, NODE_DSTR);
15608  case NODE_DSTR:
15609  return list_append(head, tail);
15610  default:
15611  break;
15612  }
15613  }
15614  switch (nd_type(tail)) {
15615  case NODE_STR:
15616  if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
15617  nd_type(headlast) == NODE_STR) {
15618  htype = NODE_STR;
15619  lit = headlast->nd_lit;
15620  }
15621  else {
15622  lit = head->nd_lit;
15623  }
15624  if (htype == NODE_STR) {
15625  if (!literal_concat0(parser, lit, tail->nd_lit)) {
15626  error:
15627  rb_gc_force_recycle((VALUE)head);
15628  rb_gc_force_recycle((VALUE)tail);
15629  return 0;
15630  }
15631  rb_gc_force_recycle((VALUE)tail);
15632  }
15633  else {
15634  list_append(head, tail);
15635  }
15636  break;
15637 
15638  case NODE_DSTR:
15639  if (htype == NODE_STR) {
15640  if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
15641  goto error;
15642  tail->nd_lit = head->nd_lit;
15643  rb_gc_force_recycle((VALUE)head);
15644  head = tail;
15645  }
15646  else if (NIL_P(tail->nd_lit)) {
15647  append:
15648  head->nd_alen += tail->nd_alen - 1;
15649  head->nd_next->nd_end->nd_next = tail->nd_next;
15650  head->nd_next->nd_end = tail->nd_next->nd_end;
15651  rb_gc_force_recycle((VALUE)tail);
15652  }
15653  else if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
15654  nd_type(headlast) == NODE_STR) {
15655  lit = headlast->nd_lit;
15656  if (!literal_concat0(parser, lit, tail->nd_lit))
15657  goto error;
15658  tail->nd_lit = Qnil;
15659  goto append;
15660  }
15661  else {
15662  nd_set_type(tail, NODE_ARRAY);
15663  tail->nd_head = NEW_STR(tail->nd_lit);
15664  list_concat(head, tail);
15665  }
15666  break;
15667 
15668  case NODE_EVSTR:
15669  if (htype == NODE_STR) {
15670  nd_set_type(head, NODE_DSTR);
15671  head->nd_alen = 1;
15672  }
15673  list_append(head, tail);
15674  break;
15675  }
15676  return head;
15677 }
15678 
15679 static NODE *
15680 evstr2dstr_gen(struct parser_params *parser, NODE *node)
15681 {
15682  if (nd_type(node) == NODE_EVSTR) {
15683  node = list_append(NEW_DSTR(STR_NEW0()), node);
15684  }
15685  return node;
15686 }
15687 
15688 static NODE *
15689 new_evstr_gen(struct parser_params *parser, NODE *node)
15690 {
15691  NODE *head = node;
15692 
15693  if (node) {
15694  switch (nd_type(node)) {
15695  case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
15696  return node;
15697  }
15698  }
15699  return NEW_EVSTR(head);
15700 }
15701 
15702 static NODE *
15703 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
15704 {
15705  value_expr(recv);
15706  value_expr(arg1);
15707  return NEW_CALL(recv, id, NEW_LIST(arg1));
15708 }
15709 
15710 static NODE *
15711 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
15712 {
15713  value_expr(recv);
15714  return NEW_CALL(recv, id, 0);
15715 }
15716 
15717 static NODE*
15718 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15719 {
15720  value_expr(node1);
15721  value_expr(node2);
15722  if (node1) {
15723  switch (nd_type(node1)) {
15724  case NODE_DREGX:
15725  case NODE_DREGX_ONCE:
15726  return NEW_MATCH2(node1, node2);
15727 
15728  case NODE_LIT:
15729  if (RB_TYPE_P(node1->nd_lit, T_REGEXP)) {
15730  return NEW_MATCH2(node1, node2);
15731  }
15732  }
15733  }
15734 
15735  if (node2) {
15736  switch (nd_type(node2)) {
15737  case NODE_DREGX:
15738  case NODE_DREGX_ONCE:
15739  return NEW_MATCH3(node2, node1);
15740 
15741  case NODE_LIT:
15742  if (RB_TYPE_P(node2->nd_lit, T_REGEXP)) {
15743  return NEW_MATCH3(node2, node1);
15744  }
15745  }
15746  }
15747 
15748  return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
15749 }
15750 
15751 # if WARN_PAST_SCOPE
15752 static int
15753 past_dvar_p(struct parser_params *parser, ID id)
15754 {
15755  struct vtable *past = lvtbl->past;
15756  while (past) {
15757  if (vtable_included(past, id)) return 1;
15758  past = past->prev;
15759  }
15760  return 0;
15761 }
15762 # endif
15763 
15764 static NODE*
15765 gettable_gen(struct parser_params *parser, ID id)
15766 {
15767  switch (id) {
15768  case keyword_self:
15769  return NEW_SELF();
15770  case keyword_nil:
15771  return NEW_NIL();
15772  case keyword_true:
15773  return NEW_TRUE();
15774  case keyword_false:
15775  return NEW_FALSE();
15776  case keyword__FILE__:
15778  case keyword__LINE__:
15779  return NEW_LIT(INT2FIX(tokline));
15780  case keyword__ENCODING__:
15782  }
15783  switch (id_type(id)) {
15784  case ID_LOCAL:
15785  if (dyna_in_block() && dvar_defined(id)) {
15786  if (id == current_arg) {
15787  rb_warn1("circular argument reference - %"PRIsWARN, rb_id2str(id));
15788  }
15789  return NEW_DVAR(id);
15790  }
15791  if (local_id(id)) {
15792  if (id == current_arg) {
15793  rb_warn1("circular argument reference - %"PRIsWARN, rb_id2str(id));
15794  }
15795  return NEW_LVAR(id);
15796  }
15797 # if WARN_PAST_SCOPE
15798  if (!in_defined && RTEST(ruby_verbose) && past_dvar_p(parser, id)) {
15799  rb_warning1("possible reference to past scope - %"PRIsWARN, rb_id2str(id));
15800  }
15801 # endif
15802  /* method call without arguments */
15803  return NEW_VCALL(id);
15804  case ID_GLOBAL:
15805  return NEW_GVAR(id);
15806  case ID_INSTANCE:
15807  return NEW_IVAR(id);
15808  case ID_CONST:
15809  return NEW_CONST(id);
15810  case ID_CLASS:
15811  return NEW_CVAR(id);
15812  }
15813  compile_error(PARSER_ARG "identifier %"PRIsVALUE" is not valid to get", rb_id2str(id));
15814  return 0;
15815 }
15816 
15817 static NODE *
15818 kwd_append(NODE *kwlist, NODE *kw)
15819 {
15820  if (kwlist) {
15821  NODE *kws = kwlist;
15822  while (kws->nd_next) {
15823  kws = kws->nd_next;
15824  }
15825  kws->nd_next = kw;
15826  }
15827  return kwlist;
15828 }
15829 
15830 static NODE *
15831 new_regexp_gen(struct parser_params *parser, NODE *node, int options)
15832 {
15833  NODE *list, *prev;
15834 
15835  if (!node) {
15836  return NEW_LIT(reg_compile(STR_NEW0(), options));
15837  }
15838  switch (nd_type(node)) {
15839  case NODE_STR:
15840  {
15841  VALUE src = node->nd_lit;
15842  nd_set_type(node, NODE_LIT);
15843  node->nd_lit = reg_compile(src, options);
15844  }
15845  break;
15846  default:
15847  node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
15848  case NODE_DSTR:
15849  if (options & RE_OPTION_ONCE) {
15851  }
15852  else {
15853  nd_set_type(node, NODE_DREGX);
15854  }
15855  node->nd_cflag = options & RE_OPTION_MASK;
15856  if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
15857  for (list = (prev = node)->nd_next; list; list = list->nd_next) {
15858  if (nd_type(list->nd_head) == NODE_STR) {
15859  VALUE tail = list->nd_head->nd_lit;
15860  if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
15861  VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
15862  if (!literal_concat0(parser, lit, tail)) {
15863  node = 0;
15864  break;
15865  }
15866  rb_str_resize(tail, 0);
15867  prev->nd_next = list->nd_next;
15868  rb_gc_force_recycle((VALUE)list->nd_head);
15869  rb_gc_force_recycle((VALUE)list);
15870  list = prev;
15871  }
15872  else {
15873  prev = list;
15874  }
15875  }
15876  else {
15877  prev = 0;
15878  }
15879  }
15880  if (!node->nd_next) {
15881  VALUE src = node->nd_lit;
15882  nd_set_type(node, NODE_LIT);
15883  node->nd_lit = reg_compile(src, options);
15884  }
15885  break;
15886  }
15887  return node;
15888 }
15889 
15890 static NODE *
15891 new_xstring_gen(struct parser_params *parser, NODE *node)
15892 {
15893  if (!node) {
15894  return NEW_XSTR(STR_NEW0());
15895  }
15896  switch (nd_type(node)) {
15897  case NODE_STR:
15898  nd_set_type(node, NODE_XSTR);
15899  break;
15900  case NODE_DSTR:
15901  nd_set_type(node, NODE_DXSTR);
15902  break;
15903  default:
15904  node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
15905  break;
15906  }
15907  return node;
15908 }
15909 #else /* !RIPPER */
15910 static int
15911 id_is_var_gen(struct parser_params *parser, ID id)
15912 {
15913  if (is_notop_id(id)) {
15914  switch (id & ID_SCOPE_MASK) {
15915  case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
15916  return 1;
15917  case ID_LOCAL:
15918  if (dyna_in_block() && dvar_defined(id)) return 1;
15919  if (local_id(id)) return 1;
15920  /* method call without arguments */
15921  return 0;
15922  }
15923  }
15924  compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2str(id));
15925  return 0;
15926 }
15927 
15928 static VALUE
15929 new_regexp_gen(struct parser_params *parser, VALUE re, VALUE opt)
15930 {
15931  VALUE src = 0, err;
15932  int options = 0;
15933  if (ripper_is_node_yylval(re)) {
15934  src = RNODE(re)->nd_cval;
15935  re = RNODE(re)->nd_rval;
15936  }
15937  if (ripper_is_node_yylval(opt)) {
15938  options = (int)RNODE(opt)->nd_tag;
15939  opt = RNODE(opt)->nd_rval;
15940  }
15941  if (src && NIL_P(parser_reg_compile(parser, src, options, &err))) {
15943  }
15944  return dispatch2(regexp_literal, re, opt);
15945 }
15946 
15947 static VALUE
15948 new_xstring_gen(struct parser_params *parser, VALUE str)
15949 {
15950  return dispatch1(xstring_literal, str);
15951 }
15952 #endif /* !RIPPER */
15953 
15954 static const char lex_state_names[][13] = {
15955  "EXPR_BEG", "EXPR_END", "EXPR_ENDARG", "EXPR_ENDFN", "EXPR_ARG",
15956  "EXPR_CMDARG", "EXPR_MID", "EXPR_FNAME", "EXPR_DOT", "EXPR_CLASS",
15957  "EXPR_LABEL", "EXPR_LABELED","EXPR_FITEM",
15958 };
15959 
15960 static VALUE
15962 {
15963  int i, sep = 0;
15964  unsigned int mask = 1;
15965  static const char none[] = "EXPR_NONE";
15966 
15967  for (i = 0; i < EXPR_MAX_STATE; ++i, mask <<= 1) {
15968  if ((unsigned)state & mask) {
15969  if (sep) {
15970  rb_str_cat(buf, "|", 1);
15971  }
15972  sep = 1;
15973  rb_str_cat_cstr(buf, lex_state_names[i]);
15974  }
15975  }
15976  if (!sep) {
15977  rb_str_cat(buf, none, sizeof(none)-1);
15978  }
15979  return buf;
15980 }
15981 
15982 static enum lex_state_e
15983 trace_lex_state(enum lex_state_e from, enum lex_state_e to, int line)
15984 {
15985  VALUE mesg;
15986  mesg = rb_str_new_cstr("lex_state: ");
15987  append_lex_state_name(from, mesg);
15988  rb_str_cat_cstr(mesg, " -> ");
15989  append_lex_state_name(to, mesg);
15990  rb_str_catf(mesg, " at line %d\n", line);
15991  rb_io_write(rb_stdout, mesg);
15992  return to;
15993 }
15994 
15995 static void
15996 show_bitstack(stack_type stack, const char *name, int line)
15997 {
15998  VALUE mesg = rb_sprintf("%s: ", name);
15999  if (stack == 0) {
16000  rb_str_cat_cstr(mesg, "0");
16001  }
16002  else {
16003  stack_type mask = (stack_type)1U << (CHAR_BIT * sizeof(stack_type) - 1);
16004  for (; mask && !(stack & mask); mask >>= 1) continue;
16005  for (; mask; mask >>= 1) rb_str_cat(mesg, stack & mask ? "1" : "0", 1);
16006  }
16007  rb_str_catf(mesg, " at line %d\n", line);
16008  rb_io_write(rb_stdout, mesg);
16009 }
16010 
16011 #ifdef RIPPER
16012 static VALUE
16013 assignable_gen(struct parser_params *parser, VALUE lhs)
16014 #else
16015 static NODE*
16016 assignable_gen(struct parser_params *parser, ID id, NODE *val)
16017 #endif
16018 {
16019 #ifdef RIPPER
16020  ID id = get_id(lhs);
16021 # define assignable_result(x) get_value(lhs)
16022 # define parser_yyerror(parser, x) assign_error_gen(parser, lhs)
16023 #else
16024 # define assignable_result(x) (x)
16025 #endif
16026  if (!id) return assignable_result(0);
16027  switch (id) {
16028  case keyword_self:
16029  yyerror("Can't change the value of self");
16030  goto error;
16031  case keyword_nil:
16032  yyerror("Can't assign to nil");
16033  goto error;
16034  case keyword_true:
16035  yyerror("Can't assign to true");
16036  goto error;
16037  case keyword_false:
16038  yyerror("Can't assign to false");
16039  goto error;
16040  case keyword__FILE__:
16041  yyerror("Can't assign to __FILE__");
16042  goto error;
16043  case keyword__LINE__:
16044  yyerror("Can't assign to __LINE__");
16045  goto error;
16046  case keyword__ENCODING__:
16047  yyerror("Can't assign to __ENCODING__");
16048  goto error;
16049  }
16050  switch (id_type(id)) {
16051  case ID_LOCAL:
16052  if (dyna_in_block()) {
16053  if (dvar_curr(id)) {
16054  return assignable_result(NEW_DASGN_CURR(id, val));
16055  }
16056  else if (dvar_defined(id)) {
16057  return assignable_result(NEW_DASGN(id, val));
16058  }
16059  else if (local_id(id)) {
16060  return assignable_result(NEW_LASGN(id, val));
16061  }
16062  else {
16063  dyna_var(id);
16064  return assignable_result(NEW_DASGN_CURR(id, val));
16065  }
16066  }
16067  else {
16068  if (!local_id(id)) {
16069  local_var(id);
16070  }
16071  return assignable_result(NEW_LASGN(id, val));
16072  }
16073  break;
16074  case ID_GLOBAL:
16075  return assignable_result(NEW_GASGN(id, val));
16076  case ID_INSTANCE:
16077  return assignable_result(NEW_IASGN(id, val));
16078  case ID_CONST:
16079  if (!in_def && !in_single)
16080  return assignable_result(NEW_CDECL(id, val, 0));
16081  yyerror("dynamic constant assignment");
16082  break;
16083  case ID_CLASS:
16084  return assignable_result(NEW_CVASGN(id, val));
16085  default:
16086  compile_error(PARSER_ARG "identifier %"PRIsVALUE" is not valid to set", rb_id2str(id));
16087  }
16088  error:
16089  return assignable_result(0);
16090 #undef assignable_result
16091 #undef parser_yyerror
16092 }
16093 
16094 static int
16096 {
16097  VALUE s;
16098  if (name == idUScore) return 1;
16099  if (!is_local_id(name)) return 0;
16100  s = rb_id2str(name);
16101  if (!s) return 0;
16102  return RSTRING_PTR(s)[0] == '_';
16103 }
16104 
16105 #define LVAR_USED ((ID)1 << (sizeof(ID) * CHAR_BIT - 1))
16106 
16107 static int
16108 shadowing_lvar_0(struct parser_params *parser, ID name)
16109 {
16110  if (is_private_local_id(name)) return 1;
16111  if (dyna_in_block()) {
16112  if (dvar_curr(name)) {
16113  yyerror("duplicated argument name");
16114  }
16115  else if (dvar_defined_get(name) || local_id(name)) {
16116  rb_warning1("shadowing outer local variable - %"PRIsWARN, rb_id2str(name));
16117  vtable_add(lvtbl->vars, name);
16118  if (lvtbl->used) {
16120  }
16121  return 0;
16122  }
16123  }
16124  else {
16125  if (local_id(name)) {
16126  yyerror("duplicated argument name");
16127  }
16128  }
16129  return 1;
16130 }
16131 
16132 static ID
16133 shadowing_lvar_gen(struct parser_params *parser, ID name)
16134 {
16135  shadowing_lvar_0(parser, name);
16136  return name;
16137 }
16138 
16139 static void
16140 new_bv_gen(struct parser_params *parser, ID name)
16141 {
16142  if (!name) return;
16143  if (!is_local_id(name)) {
16144  compile_error(PARSER_ARG "invalid local variable - %"PRIsVALUE,
16145  rb_id2str(name));
16146  return;
16147  }
16148  if (!shadowing_lvar_0(parser, name)) return;
16149  dyna_var(name);
16150 }
16151 
16152 #ifndef RIPPER
16153 static NODE *
16154 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
16155 {
16156  return NEW_ATTRASGN(recv, tASET, idx);
16157 }
16158 
16159 static void
16160 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
16161 {
16162  if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
16163  compile_error(PARSER_ARG "both block arg and actual block given");
16164  }
16165 }
16166 
16167 static NODE *
16168 attrset_gen(struct parser_params *parser, NODE *recv, ID atype, ID id)
16169 {
16170  if (!CALL_Q_P(atype)) id = rb_id_attrset(id);
16171  return NEW_ATTRASGN(recv, id, 0);
16172 }
16173 
16174 static void
16176 {
16177  switch (nd_type(node)) {
16178  case NODE_NTH_REF:
16179  compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
16180  break;
16181  case NODE_BACK_REF:
16182  compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
16183  break;
16184  }
16185 }
16186 
16187 static NODE *
16188 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
16189 {
16190  if (!node2) return node1;
16191  switch (nd_type(node1)) {
16192  case NODE_BLOCK_PASS:
16193  if (node1->nd_head)
16194  node1->nd_head = arg_concat(node1->nd_head, node2);
16195  else
16196  node1->nd_head = NEW_LIST(node2);
16197  return node1;
16198  case NODE_ARGSPUSH:
16199  if (nd_type(node2) != NODE_ARRAY) break;
16200  node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
16201  nd_set_type(node1, NODE_ARGSCAT);
16202  return node1;
16203  case NODE_ARGSCAT:
16204  if (nd_type(node2) != NODE_ARRAY ||
16205  nd_type(node1->nd_body) != NODE_ARRAY) break;
16206  node1->nd_body = list_concat(node1->nd_body, node2);
16207  return node1;
16208  }
16209  return NEW_ARGSCAT(node1, node2);
16210 }
16211 
16212 static NODE *
16213 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
16214 {
16215  if (!node1) return NEW_LIST(node2);
16216  switch (nd_type(node1)) {
16217  case NODE_ARRAY:
16218  return list_append(node1, node2);
16219  case NODE_BLOCK_PASS:
16220  node1->nd_head = arg_append(node1->nd_head, node2);
16221  return node1;
16222  case NODE_ARGSPUSH:
16223  node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
16224  nd_set_type(node1, NODE_ARGSCAT);
16225  return node1;
16226  }
16227  return NEW_ARGSPUSH(node1, node2);
16228 }
16229 
16230 static NODE *
16232 {
16233  if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
16234  if (nd_type(node) == NODE_ARRAY) return node;
16235  return 0;
16236 }
16237 
16238 static NODE *
16239 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
16240 {
16241  if (!lhs) return 0;
16242 
16243  switch (nd_type(lhs)) {
16244  case NODE_GASGN:
16245  case NODE_IASGN:
16246  case NODE_IASGN2:
16247  case NODE_LASGN:
16248  case NODE_DASGN:
16249  case NODE_DASGN_CURR:
16250  case NODE_MASGN:
16251  case NODE_CDECL:
16252  case NODE_CVASGN:
16253  lhs->nd_value = rhs;
16254  break;
16255 
16256  case NODE_ATTRASGN:
16257  case NODE_CALL:
16258  lhs->nd_args = arg_append(lhs->nd_args, rhs);
16259  break;
16260 
16261  default:
16262  /* should not happen */
16263  break;
16264  }
16265 
16266  return lhs;
16267 }
16268 
16269 static int
16270 value_expr_gen(struct parser_params *parser, NODE *node)
16271 {
16272  int cond = 0;
16273 
16274  if (!node) {
16275  rb_warning0("empty expression");
16276  }
16277  while (node) {
16278  switch (nd_type(node)) {
16279  case NODE_RETURN:
16280  case NODE_BREAK:
16281  case NODE_NEXT:
16282  case NODE_REDO:
16283  case NODE_RETRY:
16284  if (!cond) yyerror("void value expression");
16285  /* or "control never reach"? */
16286  return FALSE;
16287 
16288  case NODE_BLOCK:
16289  while (node->nd_next) {
16290  node = node->nd_next;
16291  }
16292  node = node->nd_head;
16293  break;
16294 
16295  case NODE_BEGIN:
16296  node = node->nd_body;
16297  break;
16298 
16299  case NODE_IF:
16300  if (!node->nd_body) {
16301  node = node->nd_else;
16302  break;
16303  }
16304  else if (!node->nd_else) {
16305  node = node->nd_body;
16306  break;
16307  }
16308  if (!value_expr(node->nd_body)) return FALSE;
16309  node = node->nd_else;
16310  break;
16311 
16312  case NODE_AND:
16313  case NODE_OR:
16314  cond = 1;
16315  node = node->nd_2nd;
16316  break;
16317 
16318  default:
16319  return TRUE;
16320  }
16321  }
16322 
16323  return TRUE;
16324 }
16325 
16326 static void
16327 void_expr_gen(struct parser_params *parser, NODE *node)
16328 {
16329  const char *useless = 0;
16330 
16331  if (!RTEST(ruby_verbose)) return;
16332 
16333  if (!node) return;
16334  switch (nd_type(node)) {
16335  case NODE_CALL:
16336  switch (node->nd_mid) {
16337  case '+':
16338  case '-':
16339  case '*':
16340  case '/':
16341  case '%':
16342  case tPOW:
16343  case tUPLUS:
16344  case tUMINUS:
16345  case '|':
16346  case '^':
16347  case '&':
16348  case tCMP:
16349  case '>':
16350  case tGEQ:
16351  case '<':
16352  case tLEQ:
16353  case tEQ:
16354  case tNEQ:
16355  useless = rb_id2name(node->nd_mid);
16356  break;
16357  }
16358  break;
16359 
16360  case NODE_LVAR:
16361  case NODE_DVAR:
16362  case NODE_GVAR:
16363  case NODE_IVAR:
16364  case NODE_CVAR:
16365  case NODE_NTH_REF:
16366  case NODE_BACK_REF:
16367  useless = "a variable";
16368  break;
16369  case NODE_CONST:
16370  useless = "a constant";
16371  break;
16372  case NODE_LIT:
16373  case NODE_STR:
16374  case NODE_DSTR:
16375  case NODE_DREGX:
16376  case NODE_DREGX_ONCE:
16377  useless = "a literal";
16378  break;
16379  case NODE_COLON2:
16380  case NODE_COLON3:
16381  useless = "::";
16382  break;
16383  case NODE_DOT2:
16384  useless = "..";
16385  break;
16386  case NODE_DOT3:
16387  useless = "...";
16388  break;
16389  case NODE_SELF:
16390  useless = "self";
16391  break;
16392  case NODE_NIL:
16393  useless = "nil";
16394  break;
16395  case NODE_TRUE:
16396  useless = "true";
16397  break;
16398  case NODE_FALSE:
16399  useless = "false";
16400  break;
16401  case NODE_DEFINED:
16402  useless = "defined?";
16403  break;
16404  }
16405 
16406  if (useless) {
16407  rb_warn1L(nd_line(node), "possibly useless use of %s in void context", WARN_S(useless));
16408  }
16409 }
16410 
16411 static void
16412 void_stmts_gen(struct parser_params *parser, NODE *node)
16413 {
16414  if (!RTEST(ruby_verbose)) return;
16415  if (!node) return;
16416  if (nd_type(node) != NODE_BLOCK) return;
16417 
16418  for (;;) {
16419  if (!node->nd_next) return;
16420  void_expr0(node->nd_head);
16421  node = node->nd_next;
16422  }
16423 }
16424 
16425 static NODE *
16427 {
16428  NODE **n = &node, *n1 = node;
16429  while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
16430  *n = n1 = n1->nd_body;
16431  }
16432  return node;
16433 }
16434 
16435 static NODE *
16437 {
16438  NODE **n = &node, *n1 = node;
16439  while (n1 && nd_type(n1) == NODE_BEGIN) {
16440  *n = n1 = n1->nd_body;
16441  }
16442  return node;
16443 }
16444 
16445 static void
16446 reduce_nodes_gen(struct parser_params *parser, NODE **body)
16447 {
16448  NODE *node = *body;
16449 
16450  if (!node) {
16451  *body = NEW_NIL();
16452  return;
16453  }
16454 #define subnodes(n1, n2) \
16455  ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
16456  (!node->n2) ? (body = &node->n1, 1) : \
16457  (reduce_nodes(&node->n1), body = &node->n2, 1))
16458 
16459  while (node) {
16460  int newline = (int)(node->flags & NODE_FL_NEWLINE);
16461  switch (nd_type(node)) {
16462  end:
16463  case NODE_NIL:
16464  *body = 0;
16465  return;
16466  case NODE_RETURN:
16467  *body = node = node->nd_stts;
16468  if (newline && node) node->flags |= NODE_FL_NEWLINE;
16469  continue;
16470  case NODE_BEGIN:
16471  *body = node = node->nd_body;
16472  if (newline && node) node->flags |= NODE_FL_NEWLINE;
16473  continue;
16474  case NODE_BLOCK:
16475  body = &node->nd_end->nd_head;
16476  break;
16477  case NODE_IF:
16478  if (subnodes(nd_body, nd_else)) break;
16479  return;
16480  case NODE_CASE:
16481  body = &node->nd_body;
16482  break;
16483  case NODE_WHEN:
16484  if (!subnodes(nd_body, nd_next)) goto end;
16485  break;
16486  case NODE_ENSURE:
16487  if (!subnodes(nd_head, nd_resq)) goto end;
16488  break;
16489  case NODE_RESCUE:
16490  if (node->nd_else) {
16491  body = &node->nd_resq;
16492  break;
16493  }
16494  if (!subnodes(nd_head, nd_resq)) goto end;
16495  break;
16496  default:
16497  return;
16498  }
16499  node = *body;
16500  if (newline && node) node->flags |= NODE_FL_NEWLINE;
16501  }
16502 
16503 #undef subnodes
16504 }
16505 
16506 static int
16508 {
16509  if (!node) return 1;
16510  switch (nd_type(node)) {
16511  case NODE_HASH:
16512  if (!(node = node->nd_head)) break;
16513  case NODE_ARRAY:
16514  do {
16515  if (!is_static_content(node->nd_head)) return 0;
16516  } while ((node = node->nd_next) != 0);
16517  case NODE_LIT:
16518  case NODE_STR:
16519  case NODE_NIL:
16520  case NODE_TRUE:
16521  case NODE_FALSE:
16522  case NODE_ZARRAY:
16523  break;
16524  default:
16525  return 0;
16526  }
16527  return 1;
16528 }
16529 
16530 static int
16531 assign_in_cond(struct parser_params *parser, NODE *node)
16532 {
16533  switch (nd_type(node)) {
16534  case NODE_MASGN:
16535  case NODE_LASGN:
16536  case NODE_DASGN:
16537  case NODE_DASGN_CURR:
16538  case NODE_GASGN:
16539  case NODE_IASGN:
16540  break;
16541 
16542  default:
16543  return 0;
16544  }
16545 
16546  if (!node->nd_value) return 1;
16547  if (is_static_content(node->nd_value)) {
16548  /* reports always */
16549  parser_warn(node->nd_value, "found = in conditional, should be ==");
16550  }
16551  return 1;
16552 }
16553 
16554 static void
16555 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
16556 {
16557  if (!e_option_supplied(parser)) parser_warn(node, str);
16558 }
16559 
16560 static void
16561 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
16562 {
16563  if (!e_option_supplied(parser)) parser_warning(node, str);
16564 }
16565 
16566 static NODE *cond0(struct parser_params*,NODE*,int);
16567 
16568 static NODE*
16569 range_op(struct parser_params *parser, NODE *node)
16570 {
16571  enum node_type type;
16572 
16573  if (node == 0) return 0;
16574 
16575  type = nd_type(node);
16576  value_expr(node);
16577  if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
16578  warn_unless_e_option(parser, node, "integer literal in conditional range");
16579  return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
16580  }
16581  return cond0(parser, node, FALSE);
16582 }
16583 
16584 static int
16586 {
16587  if (!node) return 1; /* same as NODE_NIL */
16588  switch (nd_type(node)) {
16589  case NODE_LIT:
16590  case NODE_STR:
16591  case NODE_DSTR:
16592  case NODE_EVSTR:
16593  case NODE_DREGX:
16594  case NODE_DREGX_ONCE:
16595  case NODE_DSYM:
16596  return 2;
16597  case NODE_TRUE:
16598  case NODE_FALSE:
16599  case NODE_NIL:
16600  return 1;
16601  }
16602  return 0;
16603 }
16604 
16605 static NODE*
16606 cond0(struct parser_params *parser, NODE *node, int method_op)
16607 {
16608  if (node == 0) return 0;
16609  assign_in_cond(parser, node);
16610 
16611  switch (nd_type(node)) {
16612  case NODE_DSTR:
16613  case NODE_EVSTR:
16614  case NODE_STR:
16615  if (!method_op) rb_warn0("string literal in condition");
16616  break;
16617 
16618  case NODE_DREGX:
16619  case NODE_DREGX_ONCE:
16620  if (!method_op)
16621  warning_unless_e_option(parser, node, "regex literal in condition");
16622  return NEW_MATCH2(node, NEW_GVAR(idLASTLINE));
16623 
16624  case NODE_AND:
16625  case NODE_OR:
16626  node->nd_1st = cond0(parser, node->nd_1st, FALSE);
16627  node->nd_2nd = cond0(parser, node->nd_2nd, FALSE);
16628  break;
16629 
16630  case NODE_DOT2:
16631  case NODE_DOT3:
16632  node->nd_beg = range_op(parser, node->nd_beg);
16633  node->nd_end = range_op(parser, node->nd_end);
16634  if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
16635  else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
16636  if (!method_op && !e_option_supplied(parser)) {
16637  int b = literal_node(node->nd_beg);
16638  int e = literal_node(node->nd_end);
16639  if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
16640  parser_warn(node, "range literal in condition");
16641  }
16642  }
16643  break;
16644 
16645  case NODE_DSYM:
16646  if (!method_op) parser_warning(node, "literal in condition");
16647  break;
16648 
16649  case NODE_LIT:
16650  if (RB_TYPE_P(node->nd_lit, T_REGEXP)) {
16651  if (!method_op)
16652  warn_unless_e_option(parser, node, "regex literal in condition");
16653  nd_set_type(node, NODE_MATCH);
16654  }
16655  else {
16656  if (!method_op)
16657  parser_warning(node, "literal in condition");
16658  }
16659  default:
16660  break;
16661  }
16662  return node;
16663 }
16664 
16665 static NODE*
16666 cond_gen(struct parser_params *parser, NODE *node, int method_op)
16667 {
16668  if (node == 0) return 0;
16669  return cond0(parser, node, method_op);
16670 }
16671 
16672 static NODE*
16673 new_if_gen(struct parser_params *parser, NODE *cc, NODE *left, NODE *right)
16674 {
16675  if (!cc) return right;
16676  cc = cond0(parser, cc, FALSE);
16677  return newline_node(NEW_IF(cc, left, right));
16678 }
16679 
16680 static NODE*
16681 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
16682 {
16683  value_expr(left);
16684  if (left && (enum node_type)nd_type(left) == type) {
16685  NODE *node = left, *second;
16686  while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
16687  node = second;
16688  }
16689  node->nd_2nd = NEW_NODE(type, second, right, 0);
16690  return left;
16691  }
16692  return NEW_NODE(type, left, right, 0);
16693 }
16694 
16695 static void
16696 no_blockarg(struct parser_params *parser, NODE *node)
16697 {
16698  if (node && nd_type(node) == NODE_BLOCK_PASS) {
16699  compile_error(PARSER_ARG "block argument should not be given");
16700  }
16701 }
16702 
16703 static NODE *
16704 ret_args_gen(struct parser_params *parser, NODE *node)
16705 {
16706  if (node) {
16707  no_blockarg(parser, node);
16708  if (nd_type(node) == NODE_ARRAY) {
16709  if (node->nd_next == 0) {
16710  node = node->nd_head;
16711  }
16712  else {
16713  nd_set_type(node, NODE_VALUES);
16714  }
16715  }
16716  }
16717  return node;
16718 }
16719 
16720 static NODE *
16721 new_yield_gen(struct parser_params *parser, NODE *node)
16722 {
16723  if (node) no_blockarg(parser, node);
16724 
16725  return NEW_YIELD(node);
16726 }
16727 
16728 static VALUE
16730 {
16731  int type = TYPE(lit);
16732  switch (type) {
16733  case T_FIXNUM:
16734  lit = LONG2FIX(-FIX2LONG(lit));
16735  break;
16736  case T_BIGNUM:
16737  BIGNUM_NEGATE(lit);
16738  lit = rb_big_norm(lit);
16739  break;
16740  case T_RATIONAL:
16741  RRATIONAL_SET_NUM(lit, negate_lit(RRATIONAL(lit)->num));
16742  break;
16743  case T_COMPLEX:
16744  RCOMPLEX_SET_REAL(lit, negate_lit(RCOMPLEX(lit)->real));
16745  RCOMPLEX_SET_IMAG(lit, negate_lit(RCOMPLEX(lit)->imag));
16746  break;
16747  case T_FLOAT:
16748 #if USE_FLONUM
16749  if (FLONUM_P(lit)) {
16750  lit = DBL2NUM(-RFLOAT_VALUE(lit));
16751  break;
16752  }
16753 #endif
16754  RFLOAT(lit)->float_value = -RFLOAT_VALUE(lit);
16755  break;
16756  default:
16757  rb_bug("unknown literal type (%d) passed to negate_lit", type);
16758  break;
16759  }
16760  return lit;
16761 }
16762 
16763 static NODE *
16764 arg_blk_pass(NODE *node1, NODE *node2)
16765 {
16766  if (node2) {
16767  node2->nd_head = node1;
16768  return node2;
16769  }
16770  return node1;
16771 }
16772 
16773 
16774 static NODE*
16775 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, NODE *tail)
16776 {
16777  int saved_line = ruby_sourceline;
16778  struct rb_args_info *args = tail->nd_ainfo;
16779 
16780  args->pre_args_num = m ? rb_long2int(m->nd_plen) : 0;
16781  args->pre_init = m ? m->nd_next : 0;
16782 
16783  args->post_args_num = p ? rb_long2int(p->nd_plen) : 0;
16784  args->post_init = p ? p->nd_next : 0;
16785  args->first_post_arg = p ? p->nd_pid : 0;
16786 
16787  args->rest_arg = r;
16788 
16789  args->opt_args = o;
16790 
16791  ruby_sourceline = saved_line;
16792 
16793  return tail;
16794 }
16795 
16796 static NODE*
16797 new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b)
16798 {
16799  int saved_line = ruby_sourceline;
16800  struct rb_args_info *args;
16801  NODE *node;
16802 
16803  args = ZALLOC(struct rb_args_info);
16804  node = NEW_NODE(NODE_ARGS, 0, 0, args);
16805 
16806  args->block_arg = b;
16807  args->kw_args = k;
16808 
16809  if (k) {
16810  /*
16811  * def foo(k1: 1, kr1:, k2: 2, **krest, &b)
16812  * variable order: k1, kr1, k2, &b, internal_id, krest
16813  * #=> <reorder>
16814  * variable order: kr1, k1, k2, internal_id, krest, &b
16815  */
16816  ID kw_bits;
16817  NODE *kwn = k;
16818  struct vtable *required_kw_vars = vtable_alloc(NULL);
16819  struct vtable *kw_vars = vtable_alloc(NULL);
16820  int i;
16821 
16822  while (kwn) {
16823  NODE *val_node = kwn->nd_body->nd_value;
16824  ID vid = kwn->nd_body->nd_vid;
16825 
16826  if (val_node == (NODE *)-1) {
16827  vtable_add(required_kw_vars, vid);
16828  }
16829  else {
16830  vtable_add(kw_vars, vid);
16831  }
16832 
16833  kwn = kwn->nd_next;
16834  }
16835 
16836  kw_bits = internal_id();
16837  if (kr && is_junk_id(kr)) vtable_pop(lvtbl->args, 1);
16838  vtable_pop(lvtbl->args, vtable_size(required_kw_vars) + vtable_size(kw_vars) + (b != 0));
16839 
16840  for (i=0; i<vtable_size(required_kw_vars); i++) arg_var(required_kw_vars->tbl[i]);
16841  for (i=0; i<vtable_size(kw_vars); i++) arg_var(kw_vars->tbl[i]);
16842  vtable_free(required_kw_vars);
16843  vtable_free(kw_vars);
16844 
16845  arg_var(kw_bits);
16846  if (kr) arg_var(kr);
16847  if (b) arg_var(b);
16848 
16849  args->kw_rest_arg = NEW_DVAR(kw_bits);
16850  args->kw_rest_arg->nd_cflag = kr;
16851  }
16852  else if (kr) {
16853  if (b) vtable_pop(lvtbl->args, 1); /* reorder */
16854  arg_var(kr);
16855  if (b) arg_var(b);
16856  args->kw_rest_arg = NEW_DVAR(kr);
16857  }
16858 
16859  ruby_sourceline = saved_line;
16860  return node;
16861 }
16862 
16863 static NODE*
16864 dsym_node_gen(struct parser_params *parser, NODE *node)
16865 {
16866  VALUE lit;
16867 
16868  if (!node) {
16869  return NEW_LIT(ID2SYM(idNULL));
16870  }
16871 
16872  switch (nd_type(node)) {
16873  case NODE_DSTR:
16874  nd_set_type(node, NODE_DSYM);
16875  break;
16876  case NODE_STR:
16877  lit = node->nd_lit;
16878  node->nd_lit = ID2SYM(rb_intern_str(lit));
16879  nd_set_type(node, NODE_LIT);
16880  break;
16881  default:
16882  node = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST(node));
16883  break;
16884  }
16885  return node;
16886 }
16887 
16888 static int
16890 {
16891  NODE *node = (NODE *)v;
16892  NODE **result = (NODE **)h;
16893  node->nd_alen = 2;
16894  node->nd_next->nd_end = node->nd_next;
16895  node->nd_next->nd_next = 0;
16896  if (*result)
16897  list_concat(*result, node);
16898  else
16899  *result = node;
16900  return ST_CONTINUE;
16901 }
16902 
16903 static NODE *
16905 {
16906  st_table *literal_keys = st_init_numtable_with_size(hash->nd_alen / 2);
16907  NODE *result = 0;
16908  while (hash && hash->nd_head && hash->nd_next) {
16909  NODE *head = hash->nd_head;
16910  NODE *value = hash->nd_next;
16911  NODE *next = value->nd_next;
16912  VALUE key = (VALUE)head;
16913  st_data_t data;
16914  if (nd_type(head) == NODE_LIT &&
16915  st_lookup(literal_keys, (key = head->nd_lit), &data)) {
16917  "key %+"PRIsVALUE" is duplicated and overwritten on line %d",
16918  head->nd_lit, nd_line(head));
16919  head = ((NODE *)data)->nd_next;
16920  head->nd_head = block_append(head->nd_head, value->nd_head);
16921  }
16922  else {
16923  st_insert(literal_keys, (st_data_t)key, (st_data_t)hash);
16924  }
16925  hash = next;
16926  }
16927  st_foreach(literal_keys, append_literal_keys, (st_data_t)&result);
16928  st_free_table(literal_keys);
16929  if (hash) {
16930  if (!result) result = hash;
16931  else list_concat(result, hash);
16932  }
16933  return result;
16934 }
16935 
16936 static NODE *
16938 {
16939  if (hash) hash = remove_duplicate_keys(parser, hash);
16940  return NEW_HASH(hash);
16941 }
16942 #endif /* !RIPPER */
16943 
16944 #ifndef RIPPER
16945 static NODE *
16946 new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
16947 {
16948  NODE *asgn;
16949 
16950  if (lhs) {
16951  ID vid = lhs->nd_vid;
16952  if (op == tOROP) {
16953  lhs->nd_value = rhs;
16954  asgn = NEW_OP_ASGN_OR(gettable(vid), lhs);
16955  if (is_notop_id(vid)) {
16956  switch (id_type(vid)) {
16957  case ID_GLOBAL:
16958  case ID_INSTANCE:
16959  case ID_CLASS:
16960  asgn->nd_aid = vid;
16961  }
16962  }
16963  }
16964  else if (op == tANDOP) {
16965  lhs->nd_value = rhs;
16966  asgn = NEW_OP_ASGN_AND(gettable(vid), lhs);
16967  }
16968  else {
16969  asgn = lhs;
16970  asgn->nd_value = NEW_CALL(gettable(vid), op, NEW_LIST(rhs));
16971  }
16972  }
16973  else {
16974  asgn = NEW_BEGIN(0);
16975  }
16976  return asgn;
16977 }
16978 
16979 static NODE *
16981  ID atype, ID attr, ID op, NODE *rhs)
16982 {
16983  NODE *asgn;
16984 
16985  if (op == tOROP) {
16986  op = 0;
16987  }
16988  else if (op == tANDOP) {
16989  op = 1;
16990  }
16991  asgn = NEW_OP_ASGN2(lhs, CALL_Q_P(atype), attr, op, rhs);
16992  fixpos(asgn, lhs);
16993  return asgn;
16994 }
16995 
16996 static NODE *
16997 new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
16998 {
16999  NODE *asgn;
17000 
17001  if (op == tOROP) {
17002  op = 0;
17003  }
17004  else if (op == tANDOP) {
17005  op = 1;
17006  }
17007  if (lhs) {
17008  asgn = NEW_OP_CDECL(lhs, op, rhs);
17009  }
17010  else {
17011  asgn = NEW_BEGIN(0);
17012  }
17013  fixpos(asgn, lhs);
17014  return asgn;
17015 }
17016 
17017 static NODE *
17018 const_decl_gen(struct parser_params *parser, NODE *path)
17019 {
17020  if (in_def || in_single) {
17021  yyerror("dynamic constant assignment");
17022  }
17023  return NEW_CDECL(0, 0, (path));
17024 }
17025 #else
17026 static VALUE
17027 new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs)
17028 {
17029  return dispatch3(opassign, lhs, op, rhs);
17030 }
17031 
17032 static VALUE
17033 new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs)
17034 {
17035  VALUE recv = dispatch3(field, lhs, type, attr);
17036  return dispatch3(opassign, recv, op, rhs);
17037 }
17038 
17039 static VALUE
17040 const_decl_gen(struct parser_params *parser, VALUE path)
17041 {
17042  if (in_def || in_single) {
17043  assign_error(path);
17044  }
17045  return path;
17046 }
17047 
17048 static VALUE
17049 assign_error_gen(struct parser_params *parser, VALUE a)
17050 {
17051  a = dispatch1(assign_error, a);
17052  ripper_error();
17053  return a;
17054 }
17055 #endif
17056 
17057 static void
17058 warn_unused_var(struct parser_params *parser, struct local_vars *local)
17059 {
17060  int i, cnt;
17061  ID *v, *u;
17062 
17063  if (!local->used) return;
17064  v = local->vars->tbl;
17065  u = local->used->tbl;
17066  cnt = local->used->pos;
17067  if (cnt != local->vars->pos) {
17068  rb_bug("local->used->pos != local->vars->pos");
17069  }
17070  for (i = 0; i < cnt; ++i) {
17071  if (!v[i] || (u[i] & LVAR_USED)) continue;
17072  if (is_private_local_id(v[i])) continue;
17073  rb_warn1L((int)u[i], "assigned but unused variable - %"PRIsWARN, rb_id2str(v[i]));
17074  }
17075 }
17076 
17077 static void
17078 local_push_gen(struct parser_params *parser, int inherit_dvars)
17079 {
17080  struct local_vars *local;
17081 
17082  local = ALLOC(struct local_vars);
17083  local->prev = lvtbl;
17084  local->args = vtable_alloc(0);
17085  local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
17086  local->used = !(inherit_dvars &&
17088  RTEST(ruby_verbose) ? vtable_alloc(0) : 0;
17089 # if WARN_PAST_SCOPE
17090  local->past = 0;
17091 # endif
17092  local->cmdargs = cmdarg_stack;
17093  CMDARG_SET(0);
17094  lvtbl = local;
17095 }
17096 
17097 static void
17099 {
17100  struct local_vars *local = lvtbl->prev;
17101  if (lvtbl->used) {
17102  warn_unused_var(parser, lvtbl);
17103  vtable_free(lvtbl->used);
17104  }
17105 # if WARN_PAST_SCOPE
17106  while (lvtbl->past) {
17107  struct vtable *past = lvtbl->past;
17108  lvtbl->past = past->prev;
17109  vtable_free(past);
17110  }
17111 # endif
17112  vtable_free(lvtbl->args);
17113  vtable_free(lvtbl->vars);
17114  CMDARG_SET(lvtbl->cmdargs);
17115  xfree(lvtbl);
17116  lvtbl = local;
17117 }
17118 
17119 #ifndef RIPPER
17120 static ID*
17122 {
17123  int cnt_args = vtable_size(lvtbl->args);
17124  int cnt_vars = vtable_size(lvtbl->vars);
17125  int cnt = cnt_args + cnt_vars;
17126  int i, j;
17127  ID *buf;
17128 
17129  if (cnt <= 0) return 0;
17130  buf = ALLOC_N(ID, cnt + 1);
17131  MEMCPY(buf+1, lvtbl->args->tbl, ID, cnt_args);
17132  /* remove IDs duplicated to warn shadowing */
17133  for (i = 0, j = cnt_args+1; i < cnt_vars; ++i) {
17134  ID id = lvtbl->vars->tbl[i];
17135  if (!vtable_included(lvtbl->args, id)) {
17136  buf[j++] = id;
17137  }
17138  }
17139  if (--j < cnt) REALLOC_N(buf, ID, (cnt = j) + 1);
17140  buf[0] = cnt;
17141  return buf;
17142 }
17143 #endif
17144 
17145 static void
17146 arg_var_gen(struct parser_params *parser, ID id)
17147 {
17148  vtable_add(lvtbl->args, id);
17149 }
17150 
17151 static void
17152 local_var_gen(struct parser_params *parser, ID id)
17153 {
17154  vtable_add(lvtbl->vars, id);
17155  if (lvtbl->used) {
17157  }
17158 }
17159 
17160 static int
17161 local_id_gen(struct parser_params *parser, ID id)
17162 {
17163  struct vtable *vars, *args, *used;
17164 
17165  vars = lvtbl->vars;
17166  args = lvtbl->args;
17167  used = lvtbl->used;
17168 
17169  while (vars && POINTER_P(vars->prev)) {
17170  vars = vars->prev;
17171  args = args->prev;
17172  if (used) used = used->prev;
17173  }
17174 
17175  if (vars && vars->prev == DVARS_INHERIT) {
17176  return rb_local_defined(id, parser->base_block);
17177  }
17178  else if (vtable_included(args, id)) {
17179  return 1;
17180  }
17181  else {
17182  int i = vtable_included(vars, id);
17183  if (i && used) used->tbl[i-1] |= LVAR_USED;
17184  return i != 0;
17185  }
17186 }
17187 
17188 static const struct vtable *
17190 {
17191  lvtbl->args = vtable_alloc(lvtbl->args);
17192  lvtbl->vars = vtable_alloc(lvtbl->vars);
17193  if (lvtbl->used) {
17194  lvtbl->used = vtable_alloc(lvtbl->used);
17195  }
17196  return lvtbl->args;
17197 }
17198 
17199 static void
17200 dyna_pop_vtable(struct parser_params *parser, struct vtable **vtblp)
17201 {
17202  struct vtable *tmp = *vtblp;
17203  *vtblp = tmp->prev;
17204 # if WARN_PAST_SCOPE
17205  if (parser->past_scope_enabled) {
17206  tmp->prev = lvtbl->past;
17207  lvtbl->past = tmp;
17208  return;
17209  }
17210 # endif
17211  vtable_free(tmp);
17212 }
17213 
17214 static void
17215 dyna_pop_1(struct parser_params *parser)
17216 {
17217  struct vtable *tmp;
17218 
17219  if ((tmp = lvtbl->used) != 0) {
17220  warn_unused_var(parser, lvtbl);
17221  lvtbl->used = lvtbl->used->prev;
17222  vtable_free(tmp);
17223  }
17224  dyna_pop_vtable(parser, &lvtbl->args);
17225  dyna_pop_vtable(parser, &lvtbl->vars);
17226 }
17227 
17228 static void
17229 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
17230 {
17231  while (lvtbl->args != lvargs) {
17232  dyna_pop_1(parser);
17233  if (!lvtbl->args) {
17234  struct local_vars *local = lvtbl->prev;
17235  xfree(lvtbl);
17236  lvtbl = local;
17237  }
17238  }
17239  dyna_pop_1(parser);
17240 }
17241 
17242 static int
17244 {
17245  return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
17246 }
17247 
17248 static int
17249 dvar_defined_gen(struct parser_params *parser, ID id, int get)
17250 {
17251  struct vtable *vars, *args, *used;
17252  int i;
17253 
17254  args = lvtbl->args;
17255  vars = lvtbl->vars;
17256  used = lvtbl->used;
17257 
17258  while (POINTER_P(vars)) {
17259  if (vtable_included(args, id)) {
17260  return 1;
17261  }
17262  if ((i = vtable_included(vars, id)) != 0) {
17263  if (used) used->tbl[i-1] |= LVAR_USED;
17264  return 1;
17265  }
17266  args = args->prev;
17267  vars = vars->prev;
17268  if (get) used = 0;
17269  if (used) used = used->prev;
17270  }
17271 
17272  if (vars == DVARS_INHERIT) {
17273  return rb_dvar_defined(id, parser->base_block);
17274  }
17275 
17276  return 0;
17277 }
17278 
17279 static int
17280 dvar_curr_gen(struct parser_params *parser, ID id)
17281 {
17282  return (vtable_included(lvtbl->args, id) ||
17283  vtable_included(lvtbl->vars, id));
17284 }
17285 
17286 static void
17287 reg_fragment_enc_error(struct parser_params* parser, VALUE str, int c)
17288 {
17290  "regexp encoding option '%c' differs from source encoding '%s'",
17291  c, rb_enc_name(rb_enc_get(str)));
17292 }
17293 
17294 #ifndef RIPPER
17295 int
17297 {
17298  int c = RE_OPTION_ENCODING_IDX(options);
17299 
17300  if (c) {
17301  int opt, idx;
17302  rb_char_to_option_kcode(c, &opt, &idx);
17303  if (idx != ENCODING_GET(str) &&
17305  goto error;
17306  }
17307  ENCODING_SET(str, idx);
17308  }
17309  else if (RE_OPTION_ENCODING_NONE(options)) {
17310  if (!ENCODING_IS_ASCII8BIT(str) &&
17312  c = 'n';
17313  goto error;
17314  }
17316  }
17317  else if (current_enc == rb_usascii_encoding()) {
17319  /* raise in re.c */
17321  }
17322  else {
17324  }
17325  }
17326  return 0;
17327 
17328  error:
17329  return c;
17330 }
17331 
17332 static void
17334 {
17335  int c = rb_reg_fragment_setenc(parser, str, options);
17336  if (c) reg_fragment_enc_error(parser, str, c);
17337 }
17338 
17339 static int
17341 {
17342  VALUE err;
17343  reg_fragment_setenc(str, options);
17344  err = rb_reg_check_preprocess(str);
17345  if (err != Qnil) {
17346  err = rb_obj_as_string(err);
17348  return 0;
17349  }
17350  return 1;
17351 }
17352 
17353 typedef struct {
17354  struct parser_params* parser;
17355  rb_encoding *enc;
17356  NODE *succ_block;
17358 
17359 static int
17361  int back_num, int *back_refs, OnigRegex regex, void *arg0)
17362 {
17364  struct parser_params* parser = arg->parser;
17365  rb_encoding *enc = arg->enc;
17366  long len = name_end - name;
17367  const char *s = (const char *)name;
17368  ID var;
17369  NODE *node, *succ;
17370 
17371  if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
17372  (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
17373  !rb_enc_symname2_p(s, len, enc)) {
17374  return ST_CONTINUE;
17375  }
17376  var = intern_cstr(s, len, enc);
17377  node = node_assign(assignable(var, 0), NEW_LIT(ID2SYM(var)));
17378  succ = arg->succ_block;
17379  if (!succ) succ = NEW_BEGIN(0);
17380  succ = block_append(succ, node);
17381  arg->succ_block = succ;
17382  return ST_CONTINUE;
17383 }
17384 
17385 static NODE *
17387 {
17389 
17390  arg.parser = parser;
17391  arg.enc = rb_enc_get(regexp);
17392  arg.succ_block = 0;
17394 
17395  if (!arg.succ_block) return 0;
17396  return arg.succ_block->nd_next;
17397 }
17398 
17399 static VALUE
17401 {
17402  reg_fragment_setenc(str, options);
17403  return rb_parser_reg_compile(parser, str, options);
17404 }
17405 
17406 VALUE
17408 {
17410 }
17411 
17412 static VALUE
17413 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
17414 {
17415  VALUE re;
17416  VALUE err;
17417 
17418  err = rb_errinfo();
17419  re = parser_reg_compile(parser, str, options);
17420  if (NIL_P(re)) {
17421  VALUE m = rb_attr_get(rb_errinfo(), idMesg);
17422  rb_set_errinfo(err);
17424  return Qnil;
17425  }
17426  return re;
17427 }
17428 #else
17429 static VALUE
17430 parser_reg_compile(struct parser_params* parser, VALUE str, int options, VALUE *errmsg)
17431 {
17432  VALUE err = rb_errinfo();
17433  VALUE re;
17434  int c = rb_reg_fragment_setenc(parser, str, options);
17435  if (c) reg_fragment_enc_error(parser, str, c);
17436  re = rb_parser_reg_compile(parser, str, options);
17437  if (NIL_P(re)) {
17438  *errmsg = rb_attr_get(rb_errinfo(), idMesg);
17439  rb_set_errinfo(err);
17440  }
17441  return re;
17442 }
17443 #endif
17444 
17445 #ifndef RIPPER
17446 NODE*
17448 {
17449  NODE *prelude = 0;
17450  NODE *scope = node;
17451  struct parser_params *parser;
17452 
17453  if (!node) return node;
17454 
17455  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17456 
17457  node = node->nd_body;
17458 
17459  if (nd_type(node) == NODE_PRELUDE) {
17460  prelude = node;
17461  node = node->nd_body;
17462  }
17463 
17464  node = block_append(node,
17465  NEW_FCALL(rb_intern("print"),
17466  NEW_ARRAY(NEW_GVAR(idLASTLINE))));
17467  if (prelude) {
17468  prelude->nd_body = node;
17469  scope->nd_body = prelude;
17470  }
17471  else {
17472  scope->nd_body = node;
17473  }
17474 
17475  return scope;
17476 }
17477 
17478 NODE *
17479 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
17480 {
17481  NODE *prelude = 0;
17482  NODE *scope = node;
17483  struct parser_params *parser;
17484 
17485  if (!node) return node;
17486 
17487  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17488 
17489  node = node->nd_body;
17490 
17491  if (nd_type(node) == NODE_PRELUDE) {
17492  prelude = node;
17493  node = node->nd_body;
17494  }
17495  if (split) {
17496  node = block_append(NEW_GASGN(rb_intern("$F"),
17497  NEW_CALL(NEW_GVAR(idLASTLINE),
17498  rb_intern("split"), 0)),
17499  node);
17500  }
17501  if (chop) {
17502  node = block_append(NEW_CALL(NEW_GVAR(idLASTLINE),
17503  rb_intern("chop!"), 0), node);
17504  }
17505 
17506  node = NEW_OPT_N(node);
17507 
17508  if (prelude) {
17509  prelude->nd_body = node;
17510  scope->nd_body = prelude;
17511  }
17512  else {
17513  scope->nd_body = node;
17514  }
17515 
17516  return scope;
17517 }
17518 
17519 void
17521 {
17522  /* just to suppress unused-function warnings */
17523  (void)nodetype;
17524  (void)nodeline;
17525 }
17526 #endif /* !RIPPER */
17527 
17528 static ID
17530 {
17531  ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
17532  id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
17533  return ID_STATIC_SYM | ID_INTERNAL | (id << ID_SCOPE_SHIFT);
17534 }
17535 
17536 static void
17538 {
17539  /* note: we rely on TypedData_Make_Struct to set most fields to 0 */
17540  command_start = TRUE;
17542 #ifdef RIPPER
17543  parser->delayed = Qnil;
17544  parser->result = Qnil;
17545  parser->parsing_thread = Qnil;
17546 #else
17547  parser->error_buffer = Qfalse;
17548 #endif
17549  parser->debug_buffer = Qnil;
17550  parser->enc = rb_utf8_encoding();
17551 }
17552 
17553 #ifdef RIPPER
17554 #define parser_mark ripper_parser_mark
17555 #define parser_free ripper_parser_free
17556 #endif
17557 
17558 static void
17559 parser_mark(void *ptr)
17560 {
17561  struct parser_params *parser = (struct parser_params*)ptr;
17562 
17568 #ifndef RIPPER
17572  rb_gc_mark(parser->compile_option);
17573  rb_gc_mark(parser->error_buffer);
17574 #else
17575  rb_gc_mark(parser->delayed);
17576  rb_gc_mark(parser->value);
17577  rb_gc_mark(parser->result);
17578  rb_gc_mark(parser->parsing_thread);
17579 #endif
17580  rb_gc_mark(parser->debug_buffer);
17581 #ifdef YYMALLOC
17582  rb_gc_mark((VALUE)parser->heap);
17583 #endif
17584 }
17585 
17586 static void
17587 parser_free(void *ptr)
17588 {
17589  struct parser_params *parser = (struct parser_params*)ptr;
17590  struct local_vars *local, *prev;
17591 
17592  if (tokenbuf) {
17593  xfree(tokenbuf);
17594  }
17595  for (local = lvtbl; local; local = prev) {
17596  if (local->vars) xfree(local->vars);
17597  prev = local->prev;
17598  xfree(local);
17599  }
17600  {
17601  token_info *ptinfo;
17602  while ((ptinfo = parser->token_info) != 0) {
17603  parser->token_info = ptinfo->next;
17604  xfree(ptinfo);
17605  }
17606  }
17607  xfree(ptr);
17608 }
17609 
17610 static size_t
17611 parser_memsize(const void *ptr)
17612 {
17613  struct parser_params *parser = (struct parser_params*)ptr;
17614  struct local_vars *local;
17615  size_t size = sizeof(*parser);
17616 
17617  size += toksiz;
17618  for (local = lvtbl; local; local = local->prev) {
17619  size += sizeof(*local);
17620  if (local->vars) size += local->vars->capa * sizeof(ID);
17621  }
17622  return size;
17623 }
17624 
17625 static const rb_data_type_t parser_data_type = {
17626 #ifndef RIPPER
17627  "parser",
17628 #else
17629  "ripper",
17630 #endif
17631  {
17632  parser_mark,
17633  parser_free,
17635  },
17637 };
17638 
17639 #ifndef RIPPER
17640 #undef rb_reserved_word
17641 
17642 const struct kwtable *
17643 rb_reserved_word(const char *str, unsigned int len)
17644 {
17645  return reserved_word(str, len);
17646 }
17647 
17648 VALUE
17650 {
17651  struct parser_params *p;
17652  VALUE parser = TypedData_Make_Struct(0, struct parser_params,
17653  &parser_data_type, p);
17654  parser_initialize(p);
17655  return parser;
17656 }
17657 
17658 VALUE
17659 rb_parser_set_context(VALUE vparser, const struct rb_block *base, int main)
17660 {
17661  struct parser_params *parser;
17662 
17663  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17664  parser->error_buffer = main ? Qfalse : Qnil;
17665  parser->base_block = base;
17666  in_main = main;
17667  return vparser;
17668 }
17669 #endif
17670 
17671 #ifdef RIPPER
17672 #define rb_parser_end_seen_p ripper_parser_end_seen_p
17673 #define rb_parser_encoding ripper_parser_encoding
17674 #define rb_parser_get_yydebug ripper_parser_get_yydebug
17675 #define rb_parser_set_yydebug ripper_parser_set_yydebug
17676 static VALUE ripper_parser_end_seen_p(VALUE vparser);
17677 static VALUE ripper_parser_encoding(VALUE vparser);
17678 static VALUE ripper_parser_get_yydebug(VALUE self);
17679 static VALUE ripper_parser_set_yydebug(VALUE self, VALUE flag);
17680 
17681 /*
17682  * call-seq:
17683  * ripper#error? -> Boolean
17684  *
17685  * Return true if parsed source has errors.
17686  */
17687 static VALUE
17688 ripper_error_p(VALUE vparser)
17689 {
17690  struct parser_params *parser;
17691 
17692  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17693  return parser->error_p ? Qtrue : Qfalse;
17694 }
17695 #endif
17696 
17697 /*
17698  * call-seq:
17699  * ripper#end_seen? -> Boolean
17700  *
17701  * Return true if parsed source ended by +\_\_END\_\_+.
17702  */
17703 VALUE
17705 {
17706  struct parser_params *parser;
17707 
17708  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17709  return ruby__end__seen ? Qtrue : Qfalse;
17710 }
17711 
17712 /*
17713  * call-seq:
17714  * ripper#encoding -> encoding
17715  *
17716  * Return encoding of the source.
17717  */
17718 VALUE
17720 {
17721  struct parser_params *parser;
17722 
17723  TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17725 }
17726 
17727 /*
17728  * call-seq:
17729  * ripper.yydebug -> true or false
17730  *
17731  * Get yydebug.
17732  */
17733 VALUE
17735 {
17736  struct parser_params *parser;
17737 
17738  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17739  return yydebug ? Qtrue : Qfalse;
17740 }
17741 
17742 /*
17743  * call-seq:
17744  * ripper.yydebug = flag
17745  *
17746  * Set yydebug.
17747  */
17748 VALUE
17750 {
17751  struct parser_params *parser;
17752 
17753  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17754  yydebug = RTEST(flag);
17755  return flag;
17756 }
17757 
17758 #ifndef RIPPER
17759 #ifdef YYMALLOC
17760 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
17761 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
17762 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
17763  (n)->u3.cnt = (c), (p))
17764 
17765 void *
17766 rb_parser_malloc(struct parser_params *parser, size_t size)
17767 {
17768  size_t cnt = HEAPCNT(1, size);
17769  NODE *n = NEWHEAP();
17770  void *ptr = xmalloc(size);
17771 
17772  return ADD2HEAP(n, cnt, ptr);
17773 }
17774 
17775 void *
17776 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
17777 {
17778  size_t cnt = HEAPCNT(nelem, size);
17779  NODE *n = NEWHEAP();
17780  void *ptr = xcalloc(nelem, size);
17781 
17782  return ADD2HEAP(n, cnt, ptr);
17783 }
17784 
17785 void *
17786 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
17787 {
17788  NODE *n;
17789  size_t cnt = HEAPCNT(1, size);
17790 
17791  if (ptr && (n = parser->heap) != NULL) {
17792  do {
17793  if (n->u1.node == ptr) {
17794  n->u1.node = ptr = xrealloc(ptr, size);
17795  if (n->u3.cnt) n->u3.cnt = cnt;
17796  return ptr;
17797  }
17798  } while ((n = n->u2.node) != NULL);
17799  }
17800  n = NEWHEAP();
17801  ptr = xrealloc(ptr, size);
17802  return ADD2HEAP(n, cnt, ptr);
17803 }
17804 
17805 void
17806 rb_parser_free(struct parser_params *parser, void *ptr)
17807 {
17808  NODE **prev = &parser->heap, *n;
17809 
17810  while ((n = *prev) != NULL) {
17811  if (n->u1.node == ptr) {
17812  *prev = n->u2.node;
17814  break;
17815  }
17816  prev = &n->u2.node;
17817  }
17818  xfree(ptr);
17819 }
17820 #endif
17821 
17822 void
17823 rb_parser_printf(struct parser_params *parser, const char *fmt, ...)
17824 {
17825  va_list ap;
17826  VALUE mesg = parser->debug_buffer;
17827 
17828  if (NIL_P(mesg)) parser->debug_buffer = mesg = rb_str_new(0, 0);
17829  va_start(ap, fmt);
17830  rb_str_vcatf(mesg, fmt, ap);
17831  va_end(ap);
17832  if (RSTRING_END(mesg)[-1] == '\n') {
17833  rb_io_write(rb_stdout, mesg);
17834  parser->debug_buffer = Qnil;
17835  }
17836 }
17837 
17838 static void
17839 parser_compile_error(struct parser_params *parser, const char *fmt, ...)
17840 {
17841  va_list ap;
17842 
17843  parser->error_p = 1;
17844  va_start(ap, fmt);
17845  parser->error_buffer =
17850  current_enc, fmt, ap);
17851  va_end(ap);
17852 }
17853 #endif
17854 
17855 #ifdef RIPPER
17856 #ifdef RIPPER_DEBUG
17857 extern int rb_is_pointer_to_heap(VALUE);
17858 
17859 /* :nodoc: */
17860 static VALUE
17861 ripper_validate_object(VALUE self, VALUE x)
17862 {
17863  if (x == Qfalse) return x;
17864  if (x == Qtrue) return x;
17865  if (x == Qnil) return x;
17866  if (x == Qundef)
17867  rb_raise(rb_eArgError, "Qundef given");
17868  if (FIXNUM_P(x)) return x;
17869  if (SYMBOL_P(x)) return x;
17870  if (!rb_is_pointer_to_heap(x))
17871  rb_raise(rb_eArgError, "invalid pointer: %p", x);
17872  switch (BUILTIN_TYPE(x)) {
17873  case T_STRING:
17874  case T_OBJECT:
17875  case T_ARRAY:
17876  case T_BIGNUM:
17877  case T_FLOAT:
17878  case T_COMPLEX:
17879  case T_RATIONAL:
17880  return x;
17881  case T_NODE:
17882  if (nd_type(x) != NODE_RIPPER) {
17883  rb_raise(rb_eArgError, "NODE given: %p", x);
17884  }
17885  return ((NODE *)x)->nd_rval;
17886  default:
17887  rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
17888  x, rb_obj_classname(x));
17889  }
17890  return x;
17891 }
17892 #endif
17893 
17894 #define validate(x) ((x) = get_value(x))
17895 
17896 static VALUE
17897 ripper_dispatch0(struct parser_params *parser, ID mid)
17898 {
17899  return rb_funcall(parser->value, mid, 0);
17900 }
17901 
17902 static VALUE
17903 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
17904 {
17905  validate(a);
17906  return rb_funcall(parser->value, mid, 1, a);
17907 }
17908 
17909 static VALUE
17910 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
17911 {
17912  validate(a);
17913  validate(b);
17914  return rb_funcall(parser->value, mid, 2, a, b);
17915 }
17916 
17917 static VALUE
17918 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
17919 {
17920  validate(a);
17921  validate(b);
17922  validate(c);
17923  return rb_funcall(parser->value, mid, 3, a, b, c);
17924 }
17925 
17926 static VALUE
17927 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
17928 {
17929  validate(a);
17930  validate(b);
17931  validate(c);
17932  validate(d);
17933  return rb_funcall(parser->value, mid, 4, a, b, c, d);
17934 }
17935 
17936 static VALUE
17937 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
17938 {
17939  validate(a);
17940  validate(b);
17941  validate(c);
17942  validate(d);
17943  validate(e);
17944  return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
17945 }
17946 
17947 static VALUE
17948 ripper_dispatch7(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e, VALUE f, VALUE g)
17949 {
17950  validate(a);
17951  validate(b);
17952  validate(c);
17953  validate(d);
17954  validate(e);
17955  validate(f);
17956  validate(g);
17957  return rb_funcall(parser->value, mid, 7, a, b, c, d, e, f, g);
17958 }
17959 
17960 static const struct kw_assoc {
17961  ID id;
17962  const char *name;
17963 } keyword_to_name[] = {
17964  {keyword_class, "class"},
17965  {keyword_module, "module"},
17966  {keyword_def, "def"},
17967  {keyword_undef, "undef"},
17968  {keyword_begin, "begin"},
17969  {keyword_rescue, "rescue"},
17970  {keyword_ensure, "ensure"},
17971  {keyword_end, "end"},
17972  {keyword_if, "if"},
17973  {keyword_unless, "unless"},
17974  {keyword_then, "then"},
17975  {keyword_elsif, "elsif"},
17976  {keyword_else, "else"},
17977  {keyword_case, "case"},
17978  {keyword_when, "when"},
17979  {keyword_while, "while"},
17980  {keyword_until, "until"},
17981  {keyword_for, "for"},
17982  {keyword_break, "break"},
17983  {keyword_next, "next"},
17984  {keyword_redo, "redo"},
17985  {keyword_retry, "retry"},
17986  {keyword_in, "in"},
17987  {keyword_do, "do"},
17988  {keyword_do_cond, "do"},
17989  {keyword_do_block, "do"},
17990  {keyword_return, "return"},
17991  {keyword_yield, "yield"},
17992  {keyword_super, "super"},
17993  {keyword_self, "self"},
17994  {keyword_nil, "nil"},
17995  {keyword_true, "true"},
17996  {keyword_false, "false"},
17997  {keyword_and, "and"},
17998  {keyword_or, "or"},
17999  {keyword_not, "not"},
18000  {modifier_if, "if"},
18001  {modifier_unless, "unless"},
18002  {modifier_while, "while"},
18003  {modifier_until, "until"},
18004  {modifier_rescue, "rescue"},
18005  {keyword_alias, "alias"},
18006  {keyword_defined, "defined?"},
18007  {keyword_BEGIN, "BEGIN"},
18008  {keyword_END, "END"},
18009  {keyword__LINE__, "__LINE__"},
18010  {keyword__FILE__, "__FILE__"},
18011  {keyword__ENCODING__, "__ENCODING__"},
18012  {0, NULL}
18013 };
18014 
18015 static const char*
18016 keyword_id_to_str(ID id)
18017 {
18018  const struct kw_assoc *a;
18019 
18020  for (a = keyword_to_name; a->id; a++) {
18021  if (a->id == id)
18022  return a->name;
18023  }
18024  return NULL;
18025 }
18026 
18027 #undef ripper_id2sym
18028 static VALUE
18029 ripper_id2sym(ID id)
18030 {
18031  const char *name;
18032  char buf[8];
18033 
18034  if (id == (ID)(signed char)id) {
18035  buf[0] = (char)id;
18036  buf[1] = '\0';
18037  return ID2SYM(rb_intern2(buf, 1));
18038  }
18039  if ((name = keyword_id_to_str(id))) {
18040  return ID2SYM(rb_intern(name));
18041  }
18042  if (!rb_id2str(id)) {
18043  rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
18044  }
18045  return ID2SYM(id);
18046 }
18047 
18048 static ID
18049 ripper_get_id(VALUE v)
18050 {
18051  NODE *nd;
18052  if (!RB_TYPE_P(v, T_NODE)) return 0;
18053  nd = (NODE *)v;
18054  if (nd_type(nd) != NODE_RIPPER) return 0;
18055  return nd->nd_vid;
18056 }
18057 
18058 static VALUE
18059 ripper_get_value(VALUE v)
18060 {
18061  NODE *nd;
18062  if (v == Qundef) return Qnil;
18063  if (!RB_TYPE_P(v, T_NODE)) return v;
18064  nd = (NODE *)v;
18065  if (nd_type(nd) != NODE_RIPPER) return Qnil;
18066  return nd->nd_rval;
18067 }
18068 
18069 static void
18070 ripper_error_gen(struct parser_params *parser)
18071 {
18072  parser->error_p = TRUE;
18073 }
18074 
18075 static void
18076 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
18077 {
18078  VALUE str;
18079  va_list args;
18080 
18081  va_start(args, fmt);
18082  str = rb_vsprintf(fmt, args);
18083  va_end(args);
18084  rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
18085  ripper_error_gen(parser);
18086 }
18087 
18088 static VALUE
18089 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
18090 {
18091  VALUE line = rb_funcallv_public(src, id_gets, 0, 0);
18092  if (!NIL_P(line) && !RB_TYPE_P(line, T_STRING)) {
18094  "gets returned %"PRIsVALUE" (expected String or nil)",
18095  rb_obj_class(line));
18096  }
18097  return line;
18098 }
18099 
18100 static VALUE
18101 ripper_lex_io_get(struct parser_params *parser, VALUE src)
18102 {
18103  return rb_io_gets(src);
18104 }
18105 
18106 static VALUE
18107 ripper_s_allocate(VALUE klass)
18108 {
18109  struct parser_params *p;
18110  VALUE self = TypedData_Make_Struct(klass, struct parser_params,
18111  &parser_data_type, p);
18112  p->value = self;
18113  return self;
18114 }
18115 
18116 #define ripper_initialized_p(r) ((r)->lex.input != 0)
18117 
18118 /*
18119  * call-seq:
18120  * Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
18121  *
18122  * Create a new Ripper object.
18123  * _src_ must be a String, an IO, or an Object which has #gets method.
18124  *
18125  * This method does not starts parsing.
18126  * See also Ripper#parse and Ripper.parse.
18127  */
18128 static VALUE
18129 ripper_initialize(int argc, VALUE *argv, VALUE self)
18130 {
18131  struct parser_params *parser;
18132  VALUE src, fname, lineno;
18133 
18134  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18135  rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
18136  if (RB_TYPE_P(src, T_FILE)) {
18137  lex_gets = ripper_lex_io_get;
18138  }
18139  else if (rb_respond_to(src, id_gets)) {
18140  lex_gets = ripper_lex_get_generic;
18141  }
18142  else {
18143  StringValue(src);
18145  }
18146  lex_input = src;
18147  parser->eofp = 0;
18148  if (NIL_P(fname)) {
18149  fname = STR_NEW2("(ripper)");
18150  OBJ_FREEZE(fname);
18151  }
18152  else {
18153  StringValue(fname);
18154  fname = rb_str_new_frozen(fname);
18155  }
18156  parser_initialize(parser);
18157 
18158  ruby_sourcefile_string = fname;
18159  ruby_sourcefile = RSTRING_PTR(fname);
18160  ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
18161 
18162  return Qnil;
18163 }
18164 
18165 struct ripper_args {
18166  struct parser_params *parser;
18167  int argc;
18168  VALUE *argv;
18169 };
18170 
18171 static VALUE
18172 ripper_parse0(VALUE parser_v)
18173 {
18174  struct parser_params *parser;
18175 
18176  TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
18177  parser_prepare(parser);
18178  ripper_yyparse((void*)parser);
18179  return parser->result;
18180 }
18181 
18182 static VALUE
18183 ripper_ensure(VALUE parser_v)
18184 {
18185  struct parser_params *parser;
18186 
18187  TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
18188  parser->parsing_thread = Qnil;
18189  return Qnil;
18190 }
18191 
18192 /*
18193  * call-seq:
18194  * ripper#parse
18195  *
18196  * Start parsing and returns the value of the root action.
18197  */
18198 static VALUE
18199 ripper_parse(VALUE self)
18200 {
18201  struct parser_params *parser;
18202 
18203  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18204  if (!ripper_initialized_p(parser)) {
18205  rb_raise(rb_eArgError, "method called for uninitialized object");
18206  }
18207  if (!NIL_P(parser->parsing_thread)) {
18208  if (parser->parsing_thread == rb_thread_current())
18209  rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
18210  else
18211  rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
18212  }
18213  parser->parsing_thread = rb_thread_current();
18214  rb_ensure(ripper_parse0, self, ripper_ensure, self);
18215 
18216  return parser->result;
18217 }
18218 
18219 /*
18220  * call-seq:
18221  * ripper#column -> Integer
18222  *
18223  * Return column number of current parsing line.
18224  * This number starts from 0.
18225  */
18226 static VALUE
18227 ripper_column(VALUE self)
18228 {
18229  struct parser_params *parser;
18230  long col;
18231 
18232  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18233  if (!ripper_initialized_p(parser)) {
18234  rb_raise(rb_eArgError, "method called for uninitialized object");
18235  }
18236  if (NIL_P(parser->parsing_thread)) return Qnil;
18237  col = parser->tokp - lex_pbeg;
18238  return LONG2NUM(col);
18239 }
18240 
18241 /*
18242  * call-seq:
18243  * ripper#filename -> String
18244  *
18245  * Return current parsing filename.
18246  */
18247 static VALUE
18248 ripper_filename(VALUE self)
18249 {
18250  struct parser_params *parser;
18251 
18252  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18253  if (!ripper_initialized_p(parser)) {
18254  rb_raise(rb_eArgError, "method called for uninitialized object");
18255  }
18256  return ruby_sourcefile_string;
18257 }
18258 
18259 /*
18260  * call-seq:
18261  * ripper#lineno -> Integer
18262  *
18263  * Return line number of current parsing line.
18264  * This number starts from 1.
18265  */
18266 static VALUE
18267 ripper_lineno(VALUE self)
18268 {
18269  struct parser_params *parser;
18270 
18271  TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18272  if (!ripper_initialized_p(parser)) {
18273  rb_raise(rb_eArgError, "method called for uninitialized object");
18274  }
18275  if (NIL_P(parser->parsing_thread)) return Qnil;
18276  return INT2NUM(ruby_sourceline);
18277 }
18278 
18279 #ifdef RIPPER_DEBUG
18280 /* :nodoc: */
18281 static VALUE
18282 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
18283 {
18284  StringValue(msg);
18285  if (obj == Qundef) {
18286  rb_raise(rb_eArgError, "%"PRIsVALUE, msg);
18287  }
18288  return Qnil;
18289 }
18290 
18291 /* :nodoc: */
18292 static VALUE
18293 ripper_value(VALUE self, VALUE obj)
18294 {
18295  return ULONG2NUM(obj);
18296 }
18297 #endif
18298 
18299 
18300 void
18301 Init_ripper(void)
18302 {
18305  id_warn = rb_intern_const("warn");
18306  id_warning = rb_intern_const("warning");
18307  id_gets = rb_intern_const("gets");
18308 
18309  InitVM(ripper);
18310 }
18311 
18312 void
18313 InitVM_ripper(void)
18314 {
18315  VALUE Ripper;
18316 
18317  Ripper = rb_define_class("Ripper", rb_cObject);
18318  /* version of Ripper */
18319  rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
18320  rb_define_alloc_func(Ripper, ripper_s_allocate);
18321  rb_define_method(Ripper, "initialize", ripper_initialize, -1);
18322  rb_define_method(Ripper, "parse", ripper_parse, 0);
18323  rb_define_method(Ripper, "column", ripper_column, 0);
18324  rb_define_method(Ripper, "filename", ripper_filename, 0);
18325  rb_define_method(Ripper, "lineno", ripper_lineno, 0);
18326  rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
18327  rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
18328  rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
18329  rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
18330  rb_define_method(Ripper, "error?", ripper_error_p, 0);
18331 #ifdef RIPPER_DEBUG
18332  rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
18333  rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
18334  rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
18335 #endif
18336 
18337  rb_define_singleton_method(Ripper, "dedent_string", parser_dedent_string, 2);
18338  rb_define_private_method(Ripper, "dedent_string", parser_dedent_string, 2);
18339 
18342 
18343 # if 0
18344  /* Hack to let RDoc document SCRIPT_LINES__ */
18345 
18346  /*
18347  * When a Hash is assigned to +SCRIPT_LINES__+ the contents of files loaded
18348  * after the assignment will be added as an Array of lines with the file
18349  * name as the key.
18350  */
18351  rb_define_global_const("SCRIPT_LINES__", Qnil);
18352 #endif
18353 
18354 }
18355 #endif /* RIPPER */
18356 
#define STRNCASECMP(s1, s2, n)
Definition: ruby.h:2138
#define toklast()
Definition: parse.c:12455
#define tokadd_mbchar(c)
Definition: parse.c:12818
void rb_define_global_const(const char *, VALUE)
Definition: variable.c:2745
#define command_start
Definition: parse.c:428
static void arg_ambiguous_gen(struct parser_params *parser, char c)
Definition: parse.c:13576
VALUE val
Definition: parse.h:168
static void token_info_pop_gen(struct parser_params *, const char *token, size_t len)
Definition: parse.c:11967
#define YYFPRINTF
Definition: parse.c:105
#define YYLAST
Definition: parse.c:1279
#define evstr2dstr(n)
Definition: parse.c:504
NODE * rb_parser_compile_string_path(VALUE vparser, VALUE f, VALUE s, int line)
Definition: parse.c:12259
#define T_OBJECT
Definition: ruby.h:491
Definition: node.h:93
Definition: node.h:29
static NODE * call_bin_op_gen(struct parser_params *, NODE *, ID, NODE *)
Definition: parse.c:15703
stack_type cmdargs
Definition: ripper.c:205
#define ISDIGIT(c)
Definition: ruby.h:2129
#define NEW_RETURN(s)
Definition: node.h:380
#define const_decl(path)
Definition: parse.c:551
ONIG_EXTERN int onig_foreach_name(OnigRegex reg, int(*func)(const OnigUChar *, const OnigUChar *, int, int *, OnigRegex, void *), void *arg)
int state
Definition: lex.c:33
static YYSIZE_T yytnamerr(char *yyres, const char *yystr)
Definition: parse.c:5032
VALUE rb_ary_unshift(VALUE ary, VALUE item)
Definition: array.c:1178
static NODE * new_if_gen(struct parser_params *, NODE *, NODE *, NODE *)
Definition: parse.c:16673
static ID ripper_token2eventid(int tok)
Definition: eventids2.c:291
static ID internal_id_gen(struct parser_params *)
Definition: parse.c:17529
Definition: lex.c:33
#define tokenbuf
Definition: parse.c:415
int rb_enc_codelen(int c, rb_encoding *enc)
Definition: encoding.c:1077
#define heredoc_line_indent
Definition: parse.c:427
#define NEW_OP_ASGN_AND(i, val)
Definition: node.h:400
#define heredoc_indent
Definition: parse.c:426
#define YY_REDUCE_PRINT(Rule)
Definition: parse.c:4934
#define shadowing_lvar(name)
Definition: parse.c:661
#define MBCLEN_CHARFOUND_P(ret)
Definition: encoding.h:185
unsigned int in_kwarg
Definition: ripper.c:355
#define nextc()
Definition: parse.c:11811
static long parser_encode_length(struct parser_params *parser, const char *name, long len)
Definition: parse.c:13627
#define RRATIONAL_SET_NUM(rat, n)
Definition: internal.h:530
#define RE_OPTION_ENCODING_IDX(o)
Definition: parse.c:697
#define NEW_OP_ASGN1(p, id, a)
Definition: node.h:396
union YYSTYPE YYSTYPE
void * rb_parser_malloc(struct parser_params *parser, size_t size)
Definition: parse.c:17766
#define NEW_SCLASS(r, b)
Definition: node.h:439
#define lex_strterm
Definition: parse.c:404
#define RARRAY_LEN(a)
Definition: ruby.h:1026
void rb_bug(const char *fmt,...)
Definition: error.c:482
int num
Definition: parse.h:171
#define mixed_escape(beg, enc1, enc2)
static const yytype_uint8 yyr2[]
Definition: parse.c:1846
struct token_info * next
Definition: ripper.c:294
#define FALSE
Definition: nkf.h:174
#define RUBY_TYPED_FREE_IMMEDIATELY
Definition: ruby.h:1145
static const struct kwtable * reserved_word(const char *, unsigned int)
#define NUM_SUFFIX_R
Definition: parse.c:13356
#define CMDARG_P()
Definition: parse.c:187
long rb_str_coderange_scan_restartable(const char *, const char *, rb_encoding *, int *)
Definition: string.c:530
#define heredoc_end
Definition: parse.c:425
#define NEW_LIST(a)
Definition: node.h:382
struct vtable * used
Definition: ripper.c:200
#define tHEREDOC_BEG
Definition: eventids2.c:7
#define pushback(c)
Definition: parse.c:11812
#define WARN_S_L(s, l)
Definition: parse.c:852
#define INT2NUM(x)
Definition: ruby.h:1538
VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline)
Definition: re.c:2850
#define scan_oct(s, l, e)
Definition: util.h:53
#define nd_plen
Definition: node.h:325
#define compile_error
Definition: parse.c:863
#define T_FIXNUM
Definition: ruby.h:503
Definition: st.h:79
#define toklen()
Definition: parse.c:12454
#define new_yield(node)
Definition: parse.c:523
#define dispatch_heredoc_end()
Definition: parse.c:13435
static NODE * node_assign_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:16239
VALUE rb_make_exception(int argc, const VALUE *argv)
Definition: eval.c:763
static NODE * new_regexp_gen(struct parser_params *, NODE *, int)
Definition: parse.c:15831
static int parser_tokadd_codepoint(struct parser_params *parser, rb_encoding **encp, int regexp_literal, int wide)
Definition: parse.c:12512
Definition: node.h:47
#define NEW_XSTR(s)
Definition: node.h:416
static void local_push_gen(struct parser_params *, int)
Definition: parse.c:17078
static int vtable_size(const struct vtable *tbl)
Definition: parse.c:214
#define formal_argument(id)
Definition: parse.c:659
#define set_number_literal(v, t, f)
Definition: parse.c:11828
const struct kwtable * rb_reserved_word(const char *str, unsigned int len)
Definition: parse.c:17643
#define YY_STACK_PRINT(Bottom, Top)
Definition: parse.c:4895
static NODE * arg_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:16188
#define NUM2INT(x)
Definition: ruby.h:684
ID rb_intern2(const char *, long)
Definition: symbol.c:604
VALUE rb_errinfo(void)
Definition: eval.c:1623
#define NEW_DOT2(b, e)
Definition: node.h:443
#define NUM2UINT(x)
Definition: ruby.h:685
static unsigned int hash(str, len) register const char *str
#define tokfix()
Definition: parse.c:12452
static NODE * evstr2dstr_gen(struct parser_params *, NODE *)
Definition: parse.c:15680
#define local_pop()
Definition: parse.c:668
static void parser_compile_error(struct parser_params *, const char *fmt,...)
Definition: parse.c:17839
static void yy_reduce_print(YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
Definition: parse.c:4912
void rb_define_singleton_method(VALUE obj, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a singleton method for obj.
Definition: class.c:1716
static int nodeline(NODE *node)
Definition: parse.c:15435
#define malloc
Definition: parse.c:116
#define local_var(id)
Definition: parse.c:670
static NODE * const_decl_gen(struct parser_params *parser, NODE *path)
Definition: parse.c:17018
static NODE * arg_blk_pass(NODE *, NODE *)
Definition: parse.c:16764
#define RUBY_DTRACE_PARSE_HOOK(name)
#define IS_LABEL_POSSIBLE()
Definition: parse.c:13982
#define tEMBDOC_BEG
Definition: eventids2.c:3
static void reg_fragment_setenc_gen(struct parser_params *, VALUE, int)
Definition: parse.c:17333
#define POINTER_P(val)
Definition: parse.c:211
static ID formal_argument_gen(struct parser_params *, ID)
Definition: parse.c:13587
#define rb_usascii_str_new2
Definition: intern.h:863
RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20+31)/32]
Definition: parse.c:13027
static int parser_read_escape(struct parser_params *parser, int flags, rb_encoding **encp)
Definition: parse.c:12594
#define internal_id()
Definition: parse.c:676
static VALUE reg_compile_gen(struct parser_params *, VALUE, int)
Definition: parse.c:17413
#define InitVM(ext)
Definition: ruby.h:2143
unsigned short int yytype_uint16
Definition: parse.c:1084
VALUE rb_str_cat(VALUE, const char *, long)
Definition: string.c:2664
NODE * rb_parser_compile_file_path(VALUE vparser, VALUE fname, VALUE file, int start)
Definition: parse.c:12302
#define lex_nextline
Definition: parse.c:421
#define st_foreach
Definition: regint.h:186
Definition: id.h:102
#define nd_line(n)
Definition: node.h:280
#define Qtrue
Definition: ruby.h:437
VALUE rb_reg_check_preprocess(VALUE)
Definition: re.c:2603
#define RE_OPTION_ENCODING(e)
Definition: parse.c:696
NODE * rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
Definition: parse.c:17479
#define yyparse
Definition: parse.c:458
#define DVARS_TOPSCOPE
Definition: parse.c:209
#define set_yylval_str(x)
Definition: parse.c:11832
static const yytype_uint16 yyr1[]
Definition: parse.c:1776
#define gettable(id)
Definition: parse.c:528
#define set_yylval_literal(x)
Definition: parse.c:11836
#define yytable_value_is_error(yytable_value)
Definition: parse.c:3392
#define YYPOPSTACK(N)
#define lambda_beginning_p()
Definition: parse.c:453
Definition: parse.c:993
#define ADD2HEAP(n, c, p)
Definition: parse.c:17762
VALUE rb_io_gets_internal(VALUE io)
Definition: io.c:3267
#define rb_id2str(id)
Definition: vm_backtrace.c:29
VALUE rb_parser_encoding(VALUE vparser)
Definition: parse.c:17719
Definition: st.h:99
#define TypedData_Get_Struct(obj, type, data_type, sval)
Definition: ruby.h:1190
#define literal_concat(h, t)
Definition: parse.c:499
static ID id_warn
Definition: error.c:51
const int id
Definition: nkf.c:209
static void block_dup_check_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:16160
int line_count
Definition: ripper.c:336
node_type
Definition: node.h:22
#define strcasecmp
Definition: win32.h:191
#define STR_NEW2(p)
Definition: parse.c:397
Definition: parse.c:978
static int lvar_defined_gen(struct parser_params *, ID)
Definition: parse.c:13620
Definition: parse.c:1007
#define ID_CONST
Definition: id.h:37
VALUE rb_suppress_tracing(VALUE(*func)(VALUE), VALUE arg)
Definition: vm_trace.c:387
void rb_define_private_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
Definition: class.c:1527
#define tokspace(n)
Definition: parse.c:11814
VALUE rb_enc_from_encoding(rb_encoding *encoding)
Definition: encoding.c:117
unsigned int eofp
Definition: ripper.c:349
int rb_enc_symname2_p(const char *, long, rb_encoding *)
Definition: symbol.c:311
static ID * local_tbl_gen(struct parser_params *)
Definition: parse.c:17121
VALUE rb_eTypeError
Definition: error.c:762
NODE * node
Definition: parse.h:169
#define T_RATIONAL
Definition: ruby.h:509
#define ripper_id2sym(id)
Definition: parse.c:805
#define PARSER_ARG
Definition: parse.c:864
NODE * rb_parser_compile_string(VALUE vparser, const char *f, VALUE s, int line)
Definition: parse.c:12253
#define IS_lex_state_all(ls)
Definition: parse.c:161
#define new_defined(expr)
Definition: parse.c:561
#define ULONG2NUM(x)
Definition: ruby.h:1574
#define lvar_defined(id)
Definition: parse.c:692
VALUE rb_ary_push(VALUE ary, VALUE item)
Definition: array.c:905
#define rb_long2int(n)
Definition: ruby.h:319
#define RREGEXP_PTR(r)
Definition: ruby.h:1056
#define NEW_CLASS(n, b, s)
Definition: node.h:438
#define current_enc
Definition: parse.c:436
#define lex_pbeg
Definition: parse.c:422
#define new_do_body(param, stmt)
Definition: parse.c:571
SSL_METHOD *(* func)(void)
Definition: ossl_ssl.c:54
#define MAX_WORD_LENGTH
Definition: lex.c:43
#define subnodes(n1, n2)
static NODE * parser_compile_string(VALUE vparser, VALUE fname, VALUE s, int line)
Definition: parse.c:12228
#define yydebug
Definition: parse.c:438
#define YYSTACK_BYTES(N)
Definition: parse.c:1232
#define nd_term(node)
Definition: parse.c:709
static int parser_yylex(struct parser_params *parser)
Definition: parse.c:14734
rb_encoding * rb_enc_compatible(VALUE str1, VALUE str2)
Definition: encoding.c:962
#define new_args_tail(k, kr, b)
Definition: parse.c:515
#define NEW_OPT_N(b)
Definition: node.h:366
VALUE rb_ary_tmp_new(long capa)
Definition: array.c:532
static NODE * attrset_gen(struct parser_params *, NODE *, ID, ID)
Definition: parse.c:16168
#define CMDARG_LEXPOP()
Definition: parse.c:186
union RNode::@149 u3
int rb_local_defined(ID id, const struct rb_block *base_block)
Definition: compile.c:7049
static NODE * remove_begin_all(NODE *)
Definition: parse.c:16436
static NODE * new_evstr_gen(struct parser_params *, NODE *)
Definition: parse.c:15689
static int parser_regx_options(struct parser_params *)
Definition: parse.c:12765
static int dedent_string(VALUE string, int width)
Definition: parse.c:13251
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
Definition: vm_eval.c:821
YYSTYPE * lval
Definition: ripper.c:309
ID id
Definition: parse.h:170
void rb_str_set_len(VALUE, long)
Definition: string.c:2545
#define rb_warn2(fmt, a, b)
Definition: parse.c:818
static VALUE coverage(VALUE fname, int n)
Definition: parse.c:12086
static void set_file_encoding(struct parser_params *parser, const char *str, const char *send)
Definition: parse.c:13910
unsigned int token_seen
Definition: ripper.c:358
static NODE * newline_node(NODE *)
Definition: parse.c:15441
int rb_enc_str_coderange(VALUE)
Definition: string.c:620
token_info * token_info
Definition: ripper.c:341
static void ripper_init_eventids1_table(VALUE self)
Definition: eventids1.c:408
void rb_raise(VALUE exc, const char *fmt,...)
Definition: error.c:2207
ID id
Definition: node.h:240
Definition: parse.c:979
#define YY_SYMBOL_PRINT(Title, Type, Value, Location)
Definition: parse.c:4797
#define RE_OPTION_ONCE
Definition: parse.c:694
#define NEW_NIL()
Definition: node.h:446
static const yytype_uint16 yyprhs[]
Definition: parse.c:1341
#define RSTRING_GETMEM(str, ptrvar, lenvar)
Definition: ruby.h:991
#define block_dup_check(n1, n2)
Definition: parse.c:487
VALUE rb_enc_associate(VALUE obj, rb_encoding *enc)
Definition: encoding.c:854
static void warn_unused_var(struct parser_params *parser, struct local_vars *local)
Definition: parse.c:17058
ID * tbl
Definition: ripper.c:191
NODE * rb_parser_compile_cstr(VALUE vparser, const char *f, const char *s, int len, int line)
Definition: parse.c:12273
void rb_compile_warn(const char *file, int line, const char *fmt,...)
Definition: error.c:181
static NODE * new_hash_gen(struct parser_params *parser, NODE *hash)
Definition: parse.c:16937
#define NEW_OP_ASGN2(r, t, i, o, val)
Definition: node.h:397
static int parse_ident(struct parser_params *parser, int c, int cmd_state)
Definition: parse.c:14619
int pre_args_num
Definition: node.h:490
#define RB_GC_GUARD(v)
Definition: ruby.h:552
void rb_define_alloc_func(VALUE, rb_alloc_func_t)
#define T_HASH
Definition: ruby.h:499
#define new_const_op_assign(lhs, op, rhs)
Definition: parse.c:546
#define var_field(n)
Definition: parse.c:553
int main(void)
Definition: closure_fn0.c:49
static NODE * assignable_gen(struct parser_params *, ID, NODE *)
Definition: parse.c:16016
static int parser_string_term(struct parser_params *parser, int func)
Definition: parse.c:13085
#define ID_LOCAL
Definition: id.h:33
#define peekc_n(n)
Definition: parse.c:12362
#define nd_args
Definition: node.h:329
#define rb_warning1(fmt, a)
Definition: parse.c:822
unsigned short token
Definition: id.c:36
#define nd_set_type(n, t)
Definition: node.h:275
static size_t parser_memsize(const void *ptr)
Definition: parse.c:17611
static NODE * new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
Definition: parse.c:16946
static void fixpos(NODE *, NODE *)
Definition: parse.c:15451
void rb_gc_mark(VALUE ptr)
Definition: gc.c:4394
#define lex_pend
Definition: parse.c:424
static NODE * gettable_gen(struct parser_params *, ID)
Definition: parse.c:15765
#define arg_ambiguous(c)
Definition: parse.c:13584
#define T_ARRAY
Definition: ruby.h:498
#define NEW_DOT3(b, e)
Definition: node.h:444
#define nd_paren(node)
Definition: parse.c:711
#define st_lookup
Definition: regint.h:185
#define cmdarg_stack
Definition: parse.c:407
#define rb_enc_islower(c, enc)
Definition: encoding.h:226
VALUE rb_io_write(VALUE, VALUE)
Definition: io.c:1508
#define STR_NEW0()
Definition: parse.c:396
#define RCOMPLEX(obj)
Definition: internal.h:546
#define reg_compile(str, options)
Definition: parse.c:580
NODE * pre_init
Definition: node.h:487
#define rb_warn3L(l, fmt, a, b, c)
Definition: parse.c:829
static void reg_fragment_enc_error(struct parser_params *parser, VALUE str, int c)
Definition: parse.c:17287
#define str_copy(_s, _p, _n)
#define NEW_IVAR(v)
Definition: node.h:405
#define RCOMPLEX_SET_IMAG(cmp, i)
Definition: ruby.h:1076
unsigned int last
Definition: nkf.c:4311
static NODE * match_op_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15718
ID block_arg
Definition: node.h:496
void rb_gc_force_recycle(VALUE obj)
Definition: gc.c:6102
#define MEMO_NEW(a, b, c)
Definition: internal.h:836
VALUE rb_parser_set_context(VALUE vparser, const struct rb_block *base, int main)
Definition: parse.c:17659
struct RNode * node
Definition: node.h:239
VALUE rb_eSyntaxError
Definition: error.c:777
#define NEW_IASGN(v, val)
Definition: node.h:391
#define FIXNUM_P(f)
Definition: ruby.h:365
rb_encoding * rb_utf8_encoding(void)
Definition: encoding.c:1320
static VALUE parser_reg_compile(struct parser_params *parser, VALUE str, int options)
Definition: parse.c:17400
static int dvar_defined_gen(struct parser_params *, ID, int)
Definition: parse.c:17249
#define nd_type(n)
Definition: node.h:274
static NODE * new_yield_gen(struct parser_params *, NODE *)
Definition: parse.c:16721
#define RE_OPTION_ENCODING_NONE(o)
Definition: parse.c:698
#define YYNTOKENS
Definition: parse.c:1282
static char * parser_tokspace(struct parser_params *parser, int n)
Definition: parse.c:12474
Definition: parse.c:999
static int parser_nextline(struct parser_params *parser)
Definition: parse.c:12365
#define tokadd_string(f, t, p, n, e)
Definition: parse.c:11820
#define paren_nest
Definition: parse.c:408
VALUE error_buffer
Definition: ripper.c:371
VALUE rb_str_buf_append(VALUE, VALUE)
Definition: string.c:2802
#define number_literal_suffix(f)
Definition: parse.c:11827
#define is_identchar(p, e, enc)
Definition: parse.c:11918
VALUE rb_syntax_error_append(VALUE exc, VALUE file, int line, int column, rb_encoding *enc, const char *fmt, va_list args)
Definition: error.c:104
int pos
Definition: ripper.c:192
static int parse_atmark(struct parser_params *parser, const enum lex_state_e last_state)
Definition: parse.c:14580
Definition: parse.c:962
static void parser_heredoc_restore(struct parser_params *parser, NODE *here)
Definition: parse.c:13233
static NODE * remove_begin(NODE *)
Definition: parse.c:16426
#define st_init_numtable_with_size
Definition: regint.h:179
#define ENC_CODERANGE_7BIT
Definition: encoding.h:100
const char * rb_obj_classname(VALUE)
Definition: variable.c:458
static int parser_set_integer_literal(struct parser_params *parser, VALUE v, int suffix)
Definition: parse.c:13410
#define lex_lastline
Definition: parse.c:420
#define NEW_SCOPE(a, b)
Definition: node.h:360
#define tok_hex(numlen)
Definition: parse.c:11816
const char term
Definition: id.c:37
RUBY_EXTERN void * memmove(void *, const void *, size_t)
Definition: memmove.c:7
#define NUM_SUFFIX_I
Definition: parse.c:13357
Definition: node.h:27
static const yytype_int16 yytable[]
Definition: parse.c:2205
RUBY_EXTERN unsigned long ruby_scan_digits(const char *str, ssize_t len, int base, size_t *retlen, int *overflow)
Definition: util.c:84
#define in_main
Definition: parse.c:413
VALUE rb_str_buf_cat(VALUE, const char *, long)
RUBY_SYMBOL_EXPORT_BEGIN typedef unsigned long st_data_t
Definition: st.h:22
#define STR_TERM_END
Definition: parse.c:12326
static int dyna_in_block_gen(struct parser_params *)
Definition: parse.c:17243
unsigned int error_p
Definition: ripper.c:363
static const rb_data_type_t parser_data_type
Definition: parse.c:12224
Definition: node.h:235
#define YYSYNTAX_ERROR
#define YYABORT
Definition: parse.c:4700
Definition: parse.h:163
#define logop(type, node1, node2)
Definition: parse.c:470
long gets_ptr
Definition: ripper.c:320
static rb_encoding * must_be_ascii_compatible(VALUE s)
Definition: parse.c:12177
#define ISALPHA(c)
Definition: ruby.h:2128
static void dyna_pop_1(struct parser_params *parser)
Definition: parse.c:17215
void rb_exc_raise(VALUE mesg)
Definition: eval.c:620
#define in_single
Definition: parse.c:411
#define NEW_VCALL(m)
Definition: node.h:422
static NODE * new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
Definition: parse.c:16997
struct parser_params::@99 lex
#define strtod(s, e)
Definition: util.h:77
#define ID_STATIC_SYM
Definition: id.h:30
#define parser_warn(node, mesg)
Definition: parse.c:15471
NODE * rb_parser_compile_file(VALUE vparser, const char *f, VALUE file, int start)
Definition: parse.c:12296
struct vtable * prev
Definition: ripper.c:194
#define NEW_VALIAS(n, o)
Definition: node.h:436
static const char lex_state_names[][13]
Definition: parse.c:15954
#define RB_TYPE_P(obj, type)
Definition: ruby.h:527
const char * pcur
Definition: ripper.c:318
static int parser_precise_mbclen(struct parser_params *parser, const char *p)
Definition: parse.c:11989
#define END(name)
Definition: asm.h:115
#define NEW_LVAR(v)
Definition: node.h:403
static void next_state(struct MT *mt)
Definition: random.c:164
static void warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
Definition: parse.c:16555
#define NEW_ATTRASGN(r, m, a)
Definition: node.h:454
#define toksiz
Definition: parse.c:417
#define attrset(node, q, id)
Definition: parse.c:535
#define ID_SCOPE_MASK
Definition: id.h:32
rb_encoding * enc
Definition: ripper.c:340
static void parser_free(void *ptr)
Definition: parse.c:17587
static VALUE negate_lit(VALUE)
Definition: parse.c:16729
#define free
Definition: parse.c:119
#define lex_gets
Definition: parse.c:430
#define NEW_POSTEXE(b)
Definition: node.h:452
int capa
Definition: ripper.c:193
void * rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
Definition: parse.c:17786
#define void_expr(node)
Definition: parse.c:481
static int parse_percent(struct parser_params *parser, const int space_seen, const enum lex_state_e last_state)
Definition: parse.c:14338
static void parser_initialize(struct parser_params *parser)
Definition: parse.c:17537
unsigned int input
Definition: nkf.c:4312
#define scan_hex(s, l, e)
Definition: util.h:55
static void parser_set_encode(struct parser_params *parser, const char *name)
Definition: parse.c:13647
#define rb_intern_str(string)
Definition: generator.h:16
#define NEW_IF(c, t, e)
Definition: node.h:362
#define local_id(id)
Definition: parse.c:674
#define here_document(n)
Definition: parse.c:11823
#define lex_goto_eol(parser)
Definition: parse.c:12357
#define rb_rational_raw1(x)
Definition: intern.h:163
static void yy_stack_print(yytype_int16 *yybottom, yytype_int16 *yytop, parser)
Definition: parse.c:4881
#define ruby_sourcefile
Definition: parse.c:434
#define ALLOC_N(type, n)
Definition: ruby.h:1587
VALUE rb_hash_aset(VALUE hash, VALUE key, VALUE val)
Definition: hash.c:1576
static NODE * remove_duplicate_keys(struct parser_params *parser, NODE *hash)
Definition: parse.c:16904
VALUE rb_parser_get_yydebug(VALUE self)
Definition: parse.c:17734
#define SET_LEX_STATE(ls)
Definition: parse.c:163
#define CALL_Q_P(q)
Definition: parse.c:449
void rb_parser_printf(struct parser_params *parser, const char *fmt,...)
Definition: parse.c:17823
static void arg_var_gen(struct parser_params *, ID)
Definition: parse.c:17146
#define YYTRANSLATE(YYX)
Definition: parse.c:1294
#define val
Definition: parse.c:972
#define NEW_ARRAY(a)
Definition: node.h:383
#define tokidx
Definition: parse.c:416
RUBY_EXTERN VALUE rb_cObject
Definition: ruby.h:1872
VALUE rb_eRuntimeError
Definition: error.c:761
#define match_op(node1, node2)
Definition: parse.c:574
static enum node_type nodetype(NODE *node)
Definition: parse.c:15429
#define NEW_STRTERM(func, term, paren)
Definition: parse.c:12997
static int parser_update_heredoc_indent(struct parser_params *parser, int c)
Definition: parse.c:12834
#define ID_INSTANCE
Definition: id.h:34
static const struct magic_comment magic_comments[]
Definition: parse.c:13762
#define CMDARG_PUSH(n)
Definition: parse.c:184
#define arg_concat(h, t)
Definition: parse.c:497
void rb_str_free(VALUE)
Definition: string.c:1281
struct parser_params * parser
Definition: ripper.c:17444
static void magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
Definition: parse.c:13694
static int parser_number_literal_suffix(struct parser_params *parser, int mask)
Definition: parse.c:13361
#define RSTRING_END(str)
Definition: ruby.h:986
#define RE_OPTION_MASK
Definition: parse.c:699
void * rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
Definition: parse.c:17776
enum lex_state_e state
Definition: ripper.c:321
#define NEW_HASH(a)
Definition: node.h:385
#define DEF_EXPR(n)
Definition: parse.c:139
VALUE rb_get_coverages(void)
Definition: thread.c:5004
static int parser_cr(struct parser_params *parser, int c)
Definition: parse.c:12410
static int e_option_supplied(struct parser_params *parser)
Definition: parse.c:12098
#define NEW_ZARRAY()
Definition: node.h:384
static struct vtable * vtable_alloc(struct vtable *prev)
Definition: parse.c:227
#define NEW_FALSE()
Definition: node.h:448
#define token_info_push(token)
Definition: parse.c:878
const struct rb_block * base_block
Definition: ripper.c:374
VALUE rb_obj_as_string(VALUE)
Definition: string.c:1364
VALUE rb_ary_new(void)
Definition: array.c:493
#define YY_(msgid)
Definition: parse.c:1117
#define NODE_HEREDOC
Definition: parse.c:703
int rb_ascii8bit_encindex(void)
Definition: encoding.c:1314
#define NEW_ARGSPUSH(a, b)
Definition: node.h:430
static int append_literal_keys(st_data_t k, st_data_t v, st_data_t h)
Definition: parse.c:16889
#define VTBL_DEBUG
Definition: parse.c:224
#define cond_stack
Definition: parse.c:406
static const yytype_uint16 yyrline[]
Definition: parse.c:1609
#define NEW_REDO()
Definition: node.h:374
#define NEW_NTH_REF(n)
Definition: node.h:408
RUBY_EXTERN VALUE rb_mKernel
Definition: ruby.h:1860
#define snprintf
Definition: subst.h:6
static int parse_qmark(struct parser_params *parser, int space_seen)
Definition: parse.c:14247
VALUE rb_thread_current(void)
Definition: thread.c:2504
#define RRATIONAL(obj)
Definition: internal.h:529
#define IS_SPCARG(c)
Definition: parse.c:13981
#define set_yylval_id(x)
Definition: parse.c:11834
#define NIL_P(v)
Definition: ruby.h:451
static VALUE append_lex_state_name(enum lex_state_e state, VALUE buf)
Definition: parse.c:15961
#define ISASCII(c)
Definition: ruby.h:2121
static NODE * new_xstring_gen(struct parser_params *, NODE *)
Definition: parse.c:15891
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
Definition: class.c:646
static char msg[50]
Definition: strerror.c:8
#define NEW_GVAR(v)
Definition: node.h:402
NODE * opt_args
Definition: node.h:501
static int reg_fragment_check_gen(struct parser_params *, VALUE, int)
Definition: parse.c:17340
#define NEW_YIELD(a)
Definition: node.h:381
#define YYSTACK_ALLOC
Definition: parse.c:1185
static NODE * dsym_node_gen(struct parser_params *, NODE *)
Definition: parse.c:16864
#define STR_FUNC_REGEXP
Definition: parse.c:12321
NODE * rb_compile_string(const char *f, VALUE s, int line)
Definition: parse.c:12246
void rb_define_const(VALUE, const char *, VALUE)
Definition: variable.c:2734
VALUE value
Definition: node.h:241
#define ID_SCOPE_SHIFT
Definition: id.h:31
#define k__END__
Definition: eventids2.c:9
#define ISALNUM(c)
Definition: ruby.h:2127
#define NEW_CASE(h, b)
Definition: node.h:364
rb_atomic_t cnt[RUBY_NSIG]
Definition: signal.c:525
static void no_blockarg(struct parser_params *parser, NODE *node)
Definition: parse.c:16696
Definition: parse.c:968
static NODE * cond_gen(struct parser_params *, NODE *, int)
Definition: parse.c:16666
Definition: parse.c:966
static NODE * splat_array(NODE *)
Definition: parse.c:16231
#define FLONUM_P(x)
Definition: ruby.h:399
static void parser_mark(void *ptr)
Definition: parse.c:17559
unsigned int has_shebang
Definition: ripper.c:352
#define new_kw_arg(k)
Definition: parse.c:516
#define T_FLOAT
Definition: ruby.h:495
static void parser_tokadd(struct parser_params *parser, int c)
Definition: parse.c:12486
static YYSIZE_T yystrlen(char *yystr) const
Definition: parse.c:4983
#define LVAR_USED
Definition: parse.c:16105
#define TYPE(x)
Definition: ruby.h:521
static void ripper_init_eventids1(void)
Definition: eventids1.c:270
int argc
Definition: ruby.c:183
Definition: node.h:59
yytype_int16 yyss_alloc
Definition: ripper.c:1223
void rb_init_parse(void)
Definition: parse.c:17520
Definition: parse.c:991
#define STR_FUNC_INDENT
Definition: parse.c:12324
unsigned char OnigUChar
Definition: onigmo.h:79
#define Qfalse
Definition: ruby.h:436
#define NEW_EVSTR(n)
Definition: node.h:419
#define arg_append(h, t)
Definition: parse.c:495
VALUE rb_rational_new(VALUE, VALUE)
Definition: rational.c:1898
VALUE nextline
Definition: ripper.c:316
static VALUE lex_get_str(struct parser_params *parser, VALUE s)
Definition: parse.c:12187
#define ALLOCA_N(type, n)
Definition: ruby.h:1593
static NODE * list_concat(NODE *, NODE *)
Definition: parse.c:15548
static int assign_in_cond(struct parser_params *parser, NODE *node)
Definition: parse.c:16531
#define warn_balanced(op, syn)
Definition: parse.c:13995
#define tokadd(c)
Definition: parse.c:11815
#define NEW_OP_CDECL(v, op, val)
Definition: node.h:401
#define no_digits()
#define peek_n(c, n)
Definition: parse.c:12360
#define T_BIGNUM
Definition: ruby.h:501
#define ENC_CODERANGE_UNKNOWN
Definition: encoding.h:99
#define YYFINAL
Definition: parse.c:1277
#define ISUPPER(c)
Definition: ruby.h:2125
static void void_expr_gen(struct parser_params *, NODE *)
Definition: parse.c:16327
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:17360
#define RUBY_FUNC_EXPORTED
Definition: defines.h:263
#define MEMCPY(p1, p2, type, n)
Definition: ruby.h:1661
static void parser_set_compile_option_flag(struct parser_params *parser, const char *name, const char *val)
Definition: parse.c:13729
#define T_NODE
Definition: ruby.h:513
VALUE rb_enc_associate_index(VALUE obj, int idx)
Definition: encoding.c:826
static VALUE debug_lines(VALUE fname)
Definition: parse.c:12070
#define YYCASE_(N, S)
#define RNODE(obj)
Definition: node.h:262
int err
Definition: win32.c:135
#define dispatch_delayed_token(t)
Definition: parse.c:11857
#define IS_AFTER_OPERATOR()
Definition: parse.c:13986
Definition: parse.c:984
#define OBJ_FREEZE(x)
Definition: ruby.h:1308
static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
Definition: parse.c:12685
#define T_COMPLEX
Definition: ruby.h:510
#define nd_else
Definition: node.h:292
#define set_yylval_num(x)
Definition: parse.c:11833
#define WARN_S(s)
Definition: parse.c:853
VALUE rb_class_new_instance(int, const VALUE *, VALUE)
Definition: object.c:1891
long cnt
Definition: node.h:257
VALUE lastline
Definition: ripper.c:315
Definition: util.c:833
#define parser_encoding_name()
Definition: parse.c:11916
#define new_op_assign(lhs, op, rhs)
Definition: parse.c:652
RUBY_EXTERN VALUE rb_int_positive_pow(long x, unsigned long y)
Definition: numeric.c:3949
int column
Definition: ripper.c:292
#define YYSIZE_T
Definition: parse.c:1103
#define numberof(array)
Definition: etc.c:616
VALUE rb_make_backtrace(void)
Definition: vm_backtrace.c:811
static NODE * reg_named_capture_assign_gen(struct parser_params *parser, VALUE regexp)
Definition: parse.c:17386
#define ALLOC(type)
Definition: ruby.h:1588
#define NEW_FOR(v, i, b)
Definition: node.h:369
#define brace_nest
Definition: parse.c:410
#define EOF
Definition: vsnprintf.c:201
static NODE * list_append_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15528
union RNode::@147 u1
static void dyna_pop_vtable(struct parser_params *parser, struct vtable **vtblp)
Definition: parse.c:17200
#define NEW_WHEN(c, t, e)
Definition: node.h:365
static const yytype_int16 yycheck[]
Definition: parse.c:3395
VALUE rb_str_resize(VALUE, long)
Definition: string.c:2562
static int literal_node(NODE *node)
Definition: parse.c:16585
static int dvar_curr_gen(struct parser_params *, ID)
Definition: parse.c:17280
#define tHEREDOC_END
Definition: eventids2.c:8
RUBY_FUNC_EXPORTED int rb_reg_fragment_setenc(struct parser_params *, VALUE, int)
Definition: parse.c:17296
#define has_delayed_token()
Definition: parse.c:11858
#define NEW_DASGN(v, val)
Definition: node.h:389
YYSTYPE yyvs_alloc
Definition: ripper.c:1224
const char * pbeg
Definition: ripper.c:317
#define flush_string_content(enc)
Definition: parse.c:13024
#define NEW_ERRINFO()
Definition: node.h:449
#define NEW_BLOCK_PASS(b)
Definition: node.h:434
VALUE rb_str_subseq(VALUE, long, long)
Definition: string.c:2324
Definition: parse.c:985
#define ZALLOC(type)
Definition: ruby.h:1590
string_type
Definition: ripper.c:12418
#define dispatch_scan_event(t)
Definition: parse.c:11856
#define RSTRING_LEN(str)
Definition: ruby.h:978
static NODE * kwd_append(NODE *, NODE *)
Definition: parse.c:15818
lex_state_bits
Definition: ripper.c:121
VALUE rb_funcallv_public(VALUE, ID, int, const VALUE *)
Calls a method.
Definition: vm_eval.c:867
#define ret_args(node)
Definition: parse.c:520
static int parser_yyerror(struct parser_params *, const char *)
Definition: parse.c:12000
unsigned int cr_seen
Definition: ripper.c:364
#define COND_LEXPOP()
Definition: parse.c:180
ID rest_arg
Definition: node.h:495
#define REALLOC_N(var, type, n)
Definition: ruby.h:1591
static const yytype_int16 yypgoto[]
Definition: parse.c:2175
int errno
#define TRUE
Definition: nkf.h:175
static int parser_tokadd_mbchar(struct parser_params *parser, int c)
Definition: parse.c:12808
#define nd_next
Definition: node.h:288
#define heredoc_dedent(str)
Definition: parse.c:589
#define NEW_CONST(v)
Definition: node.h:406
#define COND_POP()
Definition: parse.c:179
#define NEW_LIT(l)
Definition: node.h:413
VALUE rb_io_gets(VALUE)
Definition: io.c:3261
int rb_dvar_defined(ID id, const struct rb_block *base_block)
Definition: compile.c:7024
Definition: parse.c:995
#define new_brace_body(param, stmt)
Definition: parse.c:570
static NODE * parser_heredoc_dedent(struct parser_params *, NODE *)
Definition: parse.c:13283
VALUE rb_sprintf(const char *format,...)
Definition: sprintf.c:1440
#define set_integer_literal(v, f)
Definition: parse.c:11829
#define COND_P()
Definition: parse.c:181
#define ruby_coverage
Definition: parse.c:446
#define NEW_OP_ASGN_OR(i, val)
Definition: node.h:399
static void yydestruct(char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser) const
Definition: parse.c:5219
#define rb_enc_isspace(c, enc)
Definition: encoding.h:231
#define ruby_sourcefile_string
Definition: parse.c:435
int rb_enc_precise_mbclen(const char *p, const char *e, rb_encoding *enc)
Definition: encoding.c:1020
#define NEW_NEXT(s)
Definition: node.h:373
#define parser_warning(node, mesg)
Definition: parse.c:15464
static int parse_numeric(struct parser_params *parser, int c)
Definition: parse.c:14012
static int yylex(YYSTYPE *, struct parser_params *)
Definition: parse.c:15404
#define mixed_error(enc1, enc2)
void rb_fatal(const char *fmt,...)
Definition: error.c:2261
static int tokadd_ident(struct parser_params *parser, int c)
Definition: parse.c:14436
#define rb_enc_name(enc)
Definition: encoding.h:171
#define value_expr(node)
Definition: parse.c:479
#define rb_warning0(fmt)
Definition: parse.c:821
#define TOK_INTERN()
Definition: parse.c:399
#define MEMMOVE(p1, p2, type, n)
Definition: ruby.h:1662
#define reg_fragment_setenc(str, options)
Definition: parse.c:582
static int value_expr_gen(struct parser_params *, NODE *)
Definition: parse.c:16270
static const yytype_int16 yyrhs[]
Definition: parse.c:1411
VALUE rb_str_vcatf(VALUE, const char *, va_list)
Definition: sprintf.c:1453
static int parser_whole_match_p(struct parser_params *parser, const char *eos, long len, int indent)
Definition: parse.c:13338
#define NEW_RESCUE(b, res, e)
Definition: node.h:377
#define YYDPRINTF(Args)
Definition: parse.c:4791
#define STR_FUNC_LABEL
Definition: parse.c:12325
static const char * magic_comment_marker(const char *str, long len)
Definition: parse.c:13773
#define rb_warn0(fmt)
Definition: parse.c:816
rb_magic_comment_length_t length
Definition: ripper.c:13849
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
Definition: class.c:1919
static const yytype_uint8 yytranslate[]
Definition: parse.c:1298
#define new_bv(id)
Definition: parse.c:663
#define YYEMPTY
Definition: parse.c:4696
#define YYSTACK_FREE
Definition: parse.c:1186
#define YYID(n)
Definition: parse.c:1130
VALUE stack_type
Definition: parse.c:168
unsigned char buf[MIME_BUF_SIZE]
Definition: nkf.c:4309
Definition: parse.c:963
Definition: parse.c:1006
#define PRIsVALUE
Definition: ruby.h:135
static char * parser_newtok(struct parser_params *parser)
Definition: parse.c:12458
unsigned long ID
Definition: ruby.h:86
rb_encoding * rb_usascii_encoding(void)
Definition: encoding.c:1335
RUBY_FUNC_EXPORTED VALUE rb_parser_reg_compile(struct parser_params *parser, VALUE str, int options)
Definition: parse.c:17407
#define rb_enc_isalnum(c, enc)
Definition: encoding.h:229
#define dyna_pop(node)
Definition: parse.c:681
#define nd_resq
Definition: node.h:296
#define NEW_PRELUDE(p, b, o)
Definition: node.h:455
#define dyna_in_block()
Definition: parse.c:683
#define Qnil
Definition: ruby.h:438
#define dyna_var(id)
Definition: parse.c:684
#define NEW_BACK_REF(n)
Definition: node.h:409
union RNode::@148 u2
Definition: parse.c:997
#define STR_FUNC_ESCAPE
Definition: parse.c:12319
int id[2]
Definition: lex.c:33
#define NODE_FL_NEWLINE
Definition: node.h:269
static int options(unsigned char *cp)
Definition: nkf.c:6358
#define NEW_MASGN(l, r)
Definition: node.h:386
#define heredoc_restore(n)
Definition: parse.c:11825
#define BUILTIN_TYPE(x)
Definition: ruby.h:518
#define NEW_COLON2(c, i)
Definition: node.h:441
unsigned long VALUE
Definition: ruby.h:85
#define yyerror(msg)
Definition: parse.c:402
#define RFLOAT(obj)
Definition: internal.h:538
#define intern_cstr(n, l, en)
Definition: parse.c:392
#define peek(c)
Definition: parse.c:12359
#define IS_lex_state_for(x, ls)
Definition: parse.c:158
static VALUE result
Definition: nkf.c:40
static ID tokenize_ident(struct parser_params *parser, const enum lex_state_e last_state)
Definition: parse.c:14447
NODE * post_init
Definition: node.h:488
static NODE * arg_append_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:16213
static void ripper_init_eventids2(void)
Definition: eventids2.c:71
#define RBASIC(obj)
Definition: ruby.h:1204
#define heredoc_identifier()
Definition: parse.c:11824
VALUE rb_obj_hide(VALUE obj)
Definition: object.c:51
static void show_bitstack(stack_type, const char *, int)
Definition: parse.c:15996
static int token_info_has_nonspaces(struct parser_params *parser, const char *pend)
Definition: parse.c:11938
static VALUE parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
Definition: parse.c:12341
#define ripper_flush(p)
Definition: parse.c:11855
#define dsym_node(node)
Definition: parse.c:525
#define regx_options()
Definition: parse.c:11819
int post_args_num
Definition: node.h:491
static int parser_magic_comment(struct parser_params *parser, const char *str, long len)
Definition: parse.c:13806
#define NEW_ENSURE(b, en)
Definition: node.h:379
yytokentype
Definition: parse.c:909
#define token_info_pop(token)
Definition: parse.c:879
#define PRIsWARN
Definition: parse.c:855
#define call_bin_op(recv, id, arg1)
Definition: parse.c:508
#define NEW_ZSUPER()
Definition: node.h:424
const char * rb_id2name(ID)
Definition: symbol.c:759
#define rb_enc_asciicompat(enc)
Definition: encoding.h:239
VALUE rb_ensure(VALUE(*b_proc)(ANYARGS), VALUE data1, VALUE(*e_proc)(ANYARGS), VALUE data2)
Definition: eval.c:923
static VALUE yycompile0(VALUE arg)
Definition: parse.c:12104
static void local_var_gen(struct parser_params *, ID)
Definition: parse.c:17152
VALUE rb_str_new_cstr(const char *)
Definition: string.c:770
#define new_xstring(node)
Definition: parse.c:567
int rb_char_to_option_kcode(int c, int *option, int *kcode)
Definition: re.c:332
#define NEW_COLON3(i)
Definition: node.h:442
#define NEW_BLOCK(a)
Definition: node.h:361
#define Qnone
Definition: parse.c:809
#define assignable_result(x)
static int parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
Definition: parse.c:12692
static int parser_tokadd_string(struct parser_params *, int, int, int, long *, rb_encoding **)
Definition: parse.c:12860
#define nd_body
Definition: node.h:291
VALUE flags
Definition: node.h:236
const char * pend
Definition: ripper.c:319
VALUE rb_fstring(VALUE)
Definition: string.c:305
const char * token
Definition: ripper.c:290
#define ENCODING_IS_ASCII8BIT(obj)
Definition: encoding.h:59
VALUE rb_str_dup(VALUE)
Definition: string.c:1436
#define top_const_field(n)
Definition: parse.c:549
#define dvar_defined_get(id)
Definition: parse.c:687
unsigned int token_info_enabled
Definition: ripper.c:359
static NODE * new_args_gen(struct parser_params *, NODE *, NODE *, ID, NODE *, NODE *)
Definition: parse.c:16775
#define ruby_sourceline
Definition: parse.c:433
#define CMDARG_SET(n)
Definition: parse.c:188
#define CHAR_BIT
Definition: ruby.h:196
#define lex_input
Definition: parse.c:419
Definition: parse.c:986
#define STR_FUNC_QWORDS
Definition: parse.c:12322
static int vtable_included(const struct vtable *tbl, ID id)
Definition: parse.c:275
VALUE rb_sym_intern_ascii_cstr(const char *ptr)
Definition: symbol.c:1050
static int parser_set_number_literal(struct parser_params *parser, VALUE v, int type, int suffix)
Definition: parse.c:13398
#define ruby_eval_tree
Definition: parse.c:443
#define LONG2NUM(x)
Definition: ruby.h:1573
#define backref_assign_error(n, a)
Definition: parse.c:554
int rb_respond_to(VALUE, ID)
Definition: vm_method.c:1995
static VALUE lex_io_gets(struct parser_params *parser, VALUE io)
Definition: parse.c:12282
register unsigned int len
Definition: zonetab.h:51
NODE * rb_compile_cstr(const char *f, const char *s, int len, int line)
Definition: parse.c:12266
#define parser_is_identchar()
Definition: parse.c:11919
#define NEW_BEGIN(b)
Definition: node.h:376
#define ruby__end__seen
Definition: parse.c:432
#define dvar_curr(id)
Definition: parse.c:689
#define set_yylval_node(x)
Definition: parse.c:11837
static void yy_symbol_value_print(FILE *yyoutput, int yytype, YYSTYPE const *const yyvaluep, struct parser_params *parser)
Definition: parse.c:4820
static void vtable_free(struct vtable *tbl)
Definition: parse.c:239
static int parser_get_bool(struct parser_params *parser, const char *name, const char *val)
Definition: parse.c:13703
#define RSTRING_PTR(str)
Definition: ruby.h:982
#define NEW_SPLAT(a)
Definition: node.h:431
#define reg_fragment_check(str, options)
Definition: parse.c:584
void rb_str_modify(VALUE)
Definition: string.c:1980
const struct vtable * vars
Definition: parse.h:172
int rb_const_defined_at(VALUE, ID)
Definition: variable.c:2586
#define ENCODING_GET(obj)
Definition: encoding.h:58
#define lex_state
Definition: parse.c:405
rb_encoding * rb_enc_get(VALUE obj)
Definition: encoding.c:860
VALUE debug_buffer
Definition: ripper.c:344
static void reduce_nodes_gen(struct parser_params *, NODE **)
Definition: parse.c:16446
#define RFLOAT_VALUE(v)
Definition: ruby.h:940
int nonspc
Definition: ripper.c:293
int size
Definition: encoding.c:57
#define YYSTACK_ALLOC_MAXIMUM
Definition: parse.c:1188
VALUE rb_ident_hash_new(void)
Definition: hash.c:2808
#define NEW_DSTR(s)
Definition: node.h:415
#define newtok()
Definition: parse.c:11813
#define f
#define TAB_WIDTH
Definition: parse.c:99
#define yylval
Definition: parse.c:11802
#define INT2FIX(i)
Definition: ruby.h:232
#define set_yylval_name(x)
Definition: parse.c:11835
#define is_local_id(id)
Definition: symbol.h:36
#define NEW_GASGN(v, val)
Definition: node.h:387
#define NEW_BREAK(s)
Definition: node.h:372
Definition: parse.c:981
static void parser_pushback(struct parser_params *parser, int c)
Definition: parse.c:12441
int rb_safe_level(void)
Definition: safe.c:35
#define RARRAY_AREF(a, i)
Definition: ruby.h:1040
static const yytype_uint16 yydefact[]
Definition: parse.c:1918
Definition: node.h:45
#define lpar_beg
Definition: parse.c:409
static int parser_here_document(struct parser_params *, NODE *)
Definition: parse.c:13439
#define YYUSE(e)
Definition: parse.c:1123
#define COND_PUSH(n)
Definition: parse.c:178
#define xmalloc
Definition: defines.h:183
static NODE * ret_args_gen(struct parser_params *, NODE *)
Definition: parse.c:16704
#define YYACCEPT
Definition: parse.c:4699
static NODE * cond0(struct parser_params *, NODE *, int)
Definition: parse.c:16606
void rb_set_errinfo(VALUE err)
Definition: eval.c:1630
#define lex_gets_ptr
Definition: parse.c:429
#define NEW_TRUE()
Definition: node.h:447
static void dyna_pop_gen(struct parser_params *, const struct vtable *)
Definition: parse.c:17229
#define WARN_I(i)
Definition: parse.c:854
const char * name
Definition: ripper.c:13847
static void local_pop_gen(struct parser_params *)
Definition: parse.c:17098
#define tSP
Definition: eventids2.c:6
#define NEW_LAMBDA(a, b)
Definition: node.h:371
VALUE rb_complex_raw(VALUE x, VALUE y)
Definition: complex.c:1423
#define IS_lex_state(ls)
Definition: parse.c:160
static int simple_re_meta(int c)
Definition: parse.c:12821
Definition: node.h:207
#define NEW_UNTIL(c, b, n)
Definition: node.h:368
#define lvtbl
Definition: parse.c:431
#define method_cond(node)
Definition: parse.c:465
#define new_attr_op_assign(lhs, type, attr, op, rhs)
Definition: parse.c:544
#define aryset(node1, node2)
Definition: parse.c:533
#define rb_warn1(fmt, a)
Definition: parse.c:817
#define NEW_MODULE(n, b)
Definition: node.h:440
#define list_append(l, i)
Definition: parse.c:492
#define tokaddmbc(c, enc)
Definition: parse.c:11822
VALUE rb_str_catf(VALUE str, const char *format,...)
Definition: sprintf.c:1480
#define BIGNUM_NEGATE(b)
Definition: internal.h:504
short int yytype_int16
Definition: parse.c:1090
#define STR_NEW3(p, n, e, func)
Definition: parse.c:398
#define IS_BEG()
Definition: parse.c:13980
rb_magic_comment_setter_t func
Definition: ripper.c:13848
#define is_junk_id(id)
Definition: symbol.h:42
static const yytype_int16 yypact[]
Definition: parse.c:2061
#define dvar_defined(id)
Definition: parse.c:686
#define ESCAPE_CONTROL
Definition: parse.c:12590
void rb_compile_warning(const char *file, int line, const char *fmt,...)
Definition: error.c:196
static void warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
Definition: parse.c:16561
#define yypact_value_is_default(yystate)
Definition: parse.c:3389
Definition: parse.c:989
VALUE rb_big_norm(VALUE x)
Definition: bignum.c:3136
#define nd_head
Definition: node.h:286
struct local_vars * prev
Definition: ripper.c:204
#define IS_END()
Definition: parse.c:13979
static void parser_prepare(struct parser_params *parser)
Definition: parse.c:13953
#define LONG2FIX(i)
Definition: ruby.h:234
#define NEW_WHILE(c, b, n)
Definition: node.h:367
struct vtable * vars
Definition: ripper.c:199
#define RTEST(v)
Definition: ruby.h:450
static void yy_symbol_print(FILE *yyoutput, int yytype, YYSTYPE const *const yyvaluep, struct parser_params *parser)
Definition: parse.c:4854
Definition: node.h:141
#define new_args(f, o, r, p, t)
Definition: parse.c:513
#define T_STRING
Definition: ruby.h:496
static void rb_backref_error_gen(struct parser_params *, NODE *)
Definition: parse.c:16175
static void vtable_pop(struct vtable *tbl, int n)
Definition: parse.c:267
#define NEW_POSTARG(i, v)
Definition: node.h:428
#define YYINITDEPTH
Definition: parse.c:4955
static NODE * logop_gen(struct parser_params *, enum node_type, NODE *, NODE *)
Definition: parse.c:16681
VALUE rb_parser_new(void)
Definition: parse.c:17649
static void void_stmts_gen(struct parser_params *, NODE *)
Definition: parse.c:16412
static int parse_numvar(struct parser_params *parser)
Definition: parse.c:14457
#define NEW_UNDEF(i)
Definition: node.h:437
struct rb_encoding_entry * list
Definition: encoding.c:55
static const yytype_int16 yydefgoto[]
Definition: parse.c:2032
#define const_path_field(w, n)
Definition: parse.c:548
#define new_if(cc, left, right)
Definition: parse.c:467
Definition: id.h:97
VALUE rb_str_cat_cstr(VALUE, const char *)
Definition: string.c:2674
#define parse_string(n)
Definition: parse.c:11821
#define T_FILE
Definition: ruby.h:502
#define NEWHEAP()
Definition: parse.c:17761
#define NEW_CVASGN(v, val)
Definition: node.h:394
#define current_arg
Definition: parse.c:437
#define NEW_FCALL(m, a)
Definition: node.h:421
Definition: parse.c:983
int linenum
Definition: ripper.c:291
VALUE compile_option
Definition: ripper.c:342
static int is_global_name_punct(const int c)
Definition: symbol.h:95
static int id_type(ID id)
Definition: symbol.h:45
#define TypedData_Make_Struct(klass, type, data_type, sval)
Definition: ruby.h:1182
#define YYEOF
Definition: parse.c:4697
#define tEMBDOC
Definition: eventids2.c:4
#define NEW_QCALL(q, r, m, a)
Definition: parse.c:451
#define NEW_MATCH3(r, n2)
Definition: node.h:412
#define UNLIKELY(x)
Definition: ffi_common.h:126
long(* rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len)
Definition: parse.c:13690
#define node_assign(node1, node2)
Definition: parse.c:540
#define get_id(id)
Definition: parse.c:591
#define NEW_OPT_ARG(i, v)
Definition: node.h:426
#define COND_SET(n)
Definition: parse.c:182
#define BEG(no)
Definition: re.c:24
short int yytype_int8
Definition: parse.c:1078
VALUE rb_ary_tmp_new_fill(long capa)
Definition: array.c:538
#define YYTERROR
Definition: parse.c:4738
#define st_insert
Definition: regint.h:184
static int parser_parse_string(struct parser_params *, NODE *)
Definition: parse.c:13094
#define tok()
Definition: parse.c:12453
#define cond(node)
Definition: parse.c:464
VALUE rb_filesystem_str_new_cstr(const char *)
Definition: string.c:1050
#define ruby_eval_tree_begin
Definition: parse.c:444
NODE * rb_parser_append_print(VALUE vparser, NODE *node)
Definition: parse.c:17447
static int shadowing_lvar_0(struct parser_params *parser, ID name)
Definition: parse.c:16108
VALUE rb_enc_str_new(const char *, long, rb_encoding *)
Definition: string.c:758
Definition: ripper.c:190
VALUE rb_const_get_at(VALUE, ID)
Definition: variable.c:2341
static enum lex_state_e trace_lex_state(enum lex_state_e from, enum lex_state_e to, int line)
Definition: parse.c:15983
#define NUM_SUFFIX_ALL
Definition: parse.c:13358
static int is_private_local_id(ID name)
Definition: parse.c:16095
static VALUE parse_rational(struct parser_params *parser, char *str, int len, int seen_point)
Definition: parse.c:14001
#define lex_p
Definition: parse.c:423
static int comment_at_top(struct parser_params *parser)
Definition: parse.c:13679
#define new_string1(str)
Definition: parse.c:568
const char * name
Definition: nkf.c:208
static void dispose_string(VALUE str)
Definition: parse.c:12801
Definition: parse.c:980
#define xrealloc
Definition: defines.h:186
static int parser_nextc(struct parser_params *parser)
Definition: parse.c:12425
lex_state_e
Definition: ripper.c:138
#define read_escape(flags, e)
Definition: parse.c:11817
#define parser_isascii()
Definition: parse.c:11921
#define ID2SYM(x)
Definition: ruby.h:383
static const char *const yytname[]
Definition: parse.c:1682
Definition: node.h:61
static char * yystpcpy(char *yydest, const char *yysrc)
Definition: parse.c:5007
#define NEW_RETRY()
Definition: node.h:375
#define call_uni_op(recv, id)
Definition: parse.c:510
#define STR_FUNC_SYMBOL
Definition: parse.c:12323
#define nd_value
Definition: node.h:316
#define DVARS_INHERIT
Definition: parse.c:208
#define ID_INTERNAL
Definition: id.h:40
Definition: parse.c:990
static ID shadowing_lvar_gen(struct parser_params *, ID)
Definition: parse.c:16133
enum rb_block_type type
Definition: vm_core.h:628
VALUE rb_str_new_frozen(VALUE)
Definition: string.c:1123
unsigned char yytype_uint8
Definition: parse.c:1069
void(* rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val)
Definition: parse.c:13691
static NODE * yycompile(struct parser_params *parser, VALUE fname, int line)
Definition: parse.c:12167
#define NEW_RESBODY(a, ex, n)
Definition: node.h:378
Definition: parse.c:992
#define NEW_ARGSCAT(a, b)
Definition: node.h:429
#define arg_var(id)
Definition: parse.c:672
#define st_free_table
Definition: regint.h:188
#define NEW_DASGN_CURR(v, val)
Definition: node.h:390
static void token_info_push_gen(struct parser_params *, const char *token, size_t len)
Definition: parse.c:11950
static void vtable_add(struct vtable *tbl, ID id)
Definition: parse.c:251
#define NEW_SUPER(a)
Definition: node.h:423
#define NEW_CALL(r, m, a)
Definition: node.h:420
static const yytype_uint16 yystos[]
Definition: parse.c:4581
static int is_static_content(NODE *node)
Definition: parse.c:16507
#define in_defined
Definition: parse.c:414
rb_encoding * rb_ascii8bit_encoding(void)
Definition: encoding.c:1305
int rb_enc_find_index(const char *name)
Definition: encoding.c:704
static NODE * aryset_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:16154
VALUE rb_parser_end_seen_p(VALUE vparser)
Definition: parse.c:17704
static int parser_heredoc_identifier(struct parser_params *parser)
Definition: parse.c:13150
#define new_hash(hash)
Definition: parse.c:559
Definition: node.h:31
#define new_unless(cc, left, right)
Definition: parse.c:468
#define RCOMPLEX_SET_REAL(cmp, r)
Definition: ruby.h:1075
static int parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp, int string_literal, int symbol_literal, int regexp_literal)
Definition: parse.c:12545
static const struct vtable * dyna_push_gen(struct parser_params *)
Definition: parse.c:17189
#define CONST_ID(var, str)
Definition: ruby.h:1743
NODE * heap
Definition: ripper.c:307
static NODE * block_append_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15474
RUBY_EXTERN VALUE rb_stdout
Definition: ruby.h:1950
VALUE rb_str_intern(VALUE)
Definition: symbol.c:661
#define rb_intern_const(str)
Definition: ruby.h:1756
#define NEW_CVAR(v)
Definition: node.h:407
ID rb_id_attrset(ID)
Definition: symbol.c:100
#define tokline
Definition: parse.c:418
#define ESCAPE_META
Definition: parse.c:12591
#define local_push(top)
Definition: parse.c:666
void void xfree(void *)
Definition: parse.c:1008
#define is_notop_id(id)
Definition: symbol.h:35
#define NEW_MATCH2(n1, n2)
Definition: node.h:411
VALUE rb_parser_set_yydebug(VALUE self, VALUE flag)
Definition: parse.c:17749
static void new_bv_gen(struct parser_params *, ID)
Definition: parse.c:16140
#define assignable(id, node)
Definition: parse.c:530
ID first_post_arg
Definition: node.h:493
Definition: parse.c:996
VALUE rb_cstr_to_inum(const char *str, int base, int badcheck)
Definition: bignum.c:3994
static NODE * range_op(struct parser_params *parser, NODE *node)
Definition: parse.c:16569
#define ruby_debug_lines
Definition: parse.c:445
#define rb_enc_mbcput(c, buf, enc)
Definition: encoding.h:211
#define IS_ARG()
Definition: parse.c:13978
#define NEW_DVAR(v)
Definition: node.h:404
#define rb_intern(str)
#define NEW_DEFN(i, a, d, p)
Definition: node.h:358
static int parser_tok_hex(struct parser_params *parser, size_t *numlen)
Definition: parse.c:12496
#define new_evstr(n)
Definition: parse.c:502
NODE * rb_compile_file(const char *f, VALUE file, int start)
Definition: parse.c:12288
VALUE rb_str_buf_new(long)
Definition: string.c:1247
VALUE rb_usascii_str_new(const char *, long)
Definition: string.c:742
#define lex_eol_p()
Definition: parse.c:12358
#define rb_node_newnode(type, a1, a2, a3)
Definition: parse.c:461
#define SYMBOL_P(x)
Definition: ruby.h:382
#define tCOMMENT
Definition: eventids2.c:2
NODE * kw_args
Definition: node.h:498
#define nd_iter
Definition: node.h:314
#define nd_set_line(n, l)
Definition: node.h:281
VALUE rb_vsprintf(const char *, va_list)
Definition: sprintf.c:1434
Definition: parse.c:977
#define void_stmts(node)
Definition: parse.c:483
#define block_append(h, t)
Definition: parse.c:490
#define reg_named_capture_assign(regexp)
Definition: parse.c:586
#define NULL
Definition: _sdbm.c:102
#define compile_for_eval
Definition: parse.c:442
#define NEW_LASGN(v, val)
Definition: node.h:388
struct token_info token_info
#define FIX2LONG(x)
Definition: ruby.h:363
#define Qundef
Definition: ruby.h:439
static NODE * literal_concat_gen(struct parser_params *, NODE *, NODE *)
Definition: parse.c:15589
#define tIGNORED_NL
Definition: eventids2.c:1
#define yyerrok
Definition: parse.c:4694
#define NEW_STR(s)
Definition: node.h:414
static NODE * call_uni_op_gen(struct parser_params *, NODE *, ID)
Definition: parse.c:15711
#define YYMAXDEPTH
Definition: parse.c:4966
static int literal_concat0(struct parser_params *, VALUE, VALUE)
Definition: parse.c:15572
void rb_parser_free(struct parser_params *parser, void *ptr)
Definition: parse.c:17806
Definition: parse.c:976
NODE * kw_rest_arg
Definition: node.h:499
#define ID_GLOBAL
Definition: id.h:35
#define in_def
Definition: parse.c:412
#define ISXDIGIT(c)
Definition: ruby.h:2130
#define ENCODING_SET(obj, i)
Definition: encoding.h:56
Definition: parse.c:987
#define IS_LABEL_SUFFIX(n)
Definition: parse.c:13985
#define NEW_SELF()
Definition: node.h:445
Definition: parse.c:961
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
Definition: class.c:1515
Definition: parse.c:994
#define ruby_verbose
Definition: ruby.h:1792
VALUE rb_str_append(VALUE, VALUE)
Definition: string.c:2818
static void parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
Definition: parse.c:13722
#define NEW_NODE(t, a0, a1, a2)
Definition: node.h:356
#define NEW_ARGS_AUX(r, b)
Definition: node.h:425
int rb_memcicmp(const void *, const void *, long)
Definition: re.c:79
#define NEW_ALIAS(n, o)
Definition: node.h:435
#define ifndef_ripper(x)
Definition: parse.c:810
#define YYLEX
Definition: parse.c:4780
static VALUE lex_getline(struct parser_params *parser)
Definition: parse.c:12207
VALUE rb_eArgError
Definition: error.c:763
#define nd_lit
Definition: node.h:319
static NODE * new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID atype, ID attr, ID op, NODE *rhs)
Definition: parse.c:16980
static int token_info_get_column(struct parser_params *parser, const char *pend)
Definition: parse.c:11924
#define rb_enc_prev_char(s, p, e, enc)
Definition: encoding.h:214
#define T_REGEXP
Definition: ruby.h:497
#define tokadd_escape(e)
Definition: parse.c:11818
static NODE * node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE)
Definition: parse.c:15421
Definition: node.h:139
#define dyna_push()
Definition: parse.c:679
#define new_regexp(node, opt)
Definition: parse.c:564
#define whole_match_p(e, l, i)
Definition: parse.c:11826
#define was_bol()
Definition: parse.c:12450
unsigned long ruby_scan_oct(const char *, size_t, size_t *)
Definition: util.c:34
static int yysyntax_error(YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken)
Definition: parse.c:5080
static int parse_gvar(struct parser_params *parser, const enum lex_state_e last_state)
Definition: parse.c:14478
#define HEAPCNT(n, size)
Definition: parse.c:17760
#define STR_FUNC_EXPAND
Definition: parse.c:12320
static int parser_peek_variable_name(struct parser_params *parser)
Definition: parse.c:13049
VALUE rb_attr_get(VALUE, ID)
Definition: variable.c:1273
struct vtable * args
Definition: ripper.c:198
static int local_id_gen(struct parser_params *, ID)
Definition: parse.c:17161
#define SPECIAL_PUNCT(idx)
Definition: parse.c:13032
#define NEW_CDECL(v, val, path)
Definition: node.h:393
#define NEW_DEFS(r, i, a, d)
Definition: node.h:359
char ** argv
Definition: ruby.c:184
#define tEMBDOC_END
Definition: eventids2.c:5
#define DBL2NUM(dbl)
Definition: ruby.h:941
static void ripper_init_eventids2_table(VALUE self)
Definition: eventids2table.c:2
Definition: parse.c:988
#define ISSPACE(c)
Definition: ruby.h:2124
#define StringValue(v)
Definition: ruby.h:569
VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc)
Definition: string.c:2771
#define STR_NEW(p, n)
Definition: parse.c:395
static NODE * new_args_tail_gen(struct parser_params *, NODE *, ID, ID)
Definition: parse.c:16797
#define YYSTACK_RELOCATE(Stack_alloc, Stack)
Definition: parse.c:1243
#define reduce_nodes(n)
Definition: parse.c:485
#define void_expr0(node)
Definition: parse.c:480
rb_encoding * rb_enc_from_index(int index)
Definition: encoding.c:616
#define tokcopy(n)
Definition: parse.c:12509
VALUE rb_obj_class(VALUE)
Definition: object.c:229
VALUE rb_str_new(const char *, long)
Definition: string.c:736
Definition: parse.c:965
#define xcalloc
Definition: defines.h:185
#define rb_warn1L(l, fmt, a)
Definition: parse.c:827
#define ID_CLASS
Definition: id.h:38
Definition: parse.c:982