Ruby 2.7.7p221 (2022-11-24 revision 168ec2b1e5ad0e4688e963d9de019557c78feed9)
ripper.c
Go to the documentation of this file.
1/* A Bison parser, made by GNU Bison 3.8.2. */
2
3/* Bison implementation for Yacc-like parsers in C
4
5 Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
6 Inc.
7
8 This program is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <https://www.gnu.org/licenses/>. */
20
21/* As a special exception, you may create a larger work that contains
22 part or all of the Bison parser skeleton and distribute that work
23 under terms of your choice, so long as that work isn't itself a
24 parser generator using the skeleton or a modified version thereof
25 as a parser skeleton. Alternatively, if you modify or redistribute
26 the parser skeleton itself, you may (at your option) remove this
27 special exception, which will cause the skeleton and the resulting
28 Bison output files to be licensed under the GNU General Public
29 License without this special exception.
30
31 This special exception was added by the Free Software Foundation in
32 version 2.2 of Bison. */
33
34/* C LALR(1) parser skeleton written by Richard Stallman, by
35 simplifying the original so-called "semantic" parser. */
36
37/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
38 especially those whose name start with YY_ or yy_. They are
39 private implementation details that can be changed or removed. */
40
41/* All symbols defined below should begin with yy or YY, to avoid
42 infringing on user name space. This should be done even for local
43 variables, as they might otherwise be expanded by user macros.
44 There are some unavoidable exceptions within include files to
45 define necessary library symbols; they are noted "INFRINGES ON
46 USER NAME SPACE" below. */
47
48/* Identify Bison output, and Bison version. */
49#define YYBISON 30802
50
51/* Bison version string. */
52#define YYBISON_VERSION "3.8.2"
53
54/* Skeleton name. */
55#define YYSKELETON_NAME "yacc.c"
56
57/* Pure parsers. */
58#define YYPURE 1
59
60/* Push parsers. */
61#define YYPUSH 0
62
63/* Pull parsers. */
64#define YYPULL 1
65
66
67
68
69/* First part of user prologue. */
70#line 12 "ripper.y"
71
72
73#if !YYPURE
74# error needs pure parser
75#endif
76#define YYDEBUG 1
77#define YYERROR_VERBOSE 1
78#define YYSTACK_USE_ALLOCA 0
79#define YYLTYPE rb_code_location_t
80#define YYLTYPE_IS_DECLARED 1
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 yydebug (p->debug) /* disable the global variable definition */
102
103#define YYMALLOC(size) rb_parser_malloc(p, (size))
104#define YYREALLOC(ptr, size) rb_parser_realloc(p, (ptr), (size))
105#define YYCALLOC(nelem, size) rb_parser_calloc(p, (nelem), (size))
106#define YYFREE(ptr) rb_parser_free(p, (ptr))
107#define YYFPRINTF rb_parser_printf
108#define YY_LOCATION_PRINT(File, loc) \
109 rb_parser_printf(p, "%d.%d-%d.%d", \
110 (loc).beg_pos.lineno, (loc).beg_pos.column,\
111 (loc).end_pos.lineno, (loc).end_pos.column)
112#define YYLLOC_DEFAULT(Current, Rhs, N) \
113 do \
114 if (N) \
115 { \
116 (Current).beg_pos = YYRHSLOC(Rhs, 1).beg_pos; \
117 (Current).end_pos = YYRHSLOC(Rhs, N).end_pos; \
118 } \
119 else \
120 { \
121 (Current).beg_pos = YYRHSLOC(Rhs, 0).end_pos; \
122 (Current).end_pos = YYRHSLOC(Rhs, 0).end_pos; \
123 } \
124 while (0)
125
126#define RUBY_SET_YYLLOC_FROM_STRTERM_HEREDOC(Current) \
127 rb_parser_set_location_from_strterm_heredoc(p, &p->lex.strterm->u.heredoc, &(Current))
128#define RUBY_SET_YYLLOC_OF_NONE(Current) \
129 rb_parser_set_location_of_none(p, &(Current))
130#define RUBY_SET_YYLLOC(Current) \
131 rb_parser_set_location(p, &(Current))
132#define RUBY_INIT_YYLLOC() \
133 { \
134 {p->ruby_sourceline, (int)(p->lex.ptok - p->lex.pbeg)}, \
135 {p->ruby_sourceline, (int)(p->lex.pcur - p->lex.pbeg)}, \
136 }
137
139 EXPR_BEG_bit, /* ignore newline, +/- is a sign. */
140 EXPR_END_bit, /* newline significant, +/- is an operator. */
141 EXPR_ENDARG_bit, /* ditto, and unbound braces. */
142 EXPR_ENDFN_bit, /* ditto, and unbound braces. */
143 EXPR_ARG_bit, /* newline significant, +/- is an operator. */
144 EXPR_CMDARG_bit, /* newline significant, +/- is an operator. */
145 EXPR_MID_bit, /* newline significant, +/- is an operator. */
146 EXPR_FNAME_bit, /* ignore newline, no reserved words. */
147 EXPR_DOT_bit, /* right after `.' or `::', no reserved words. */
148 EXPR_CLASS_bit, /* immediate after `class', no here document. */
149 EXPR_LABEL_bit, /* flag bit, label is allowed. */
150 EXPR_LABELED_bit, /* flag bit, just after a label. */
151 EXPR_FITEM_bit, /* symbol literal as FNAME. */
154/* examine combinations */
156#define DEF_EXPR(n) EXPR_##n = (1 << EXPR_##n##_bit)
158 DEF_EXPR(END),
159 DEF_EXPR(ENDARG),
160 DEF_EXPR(ENDFN),
161 DEF_EXPR(ARG),
162 DEF_EXPR(CMDARG),
163 DEF_EXPR(MID),
164 DEF_EXPR(FNAME),
165 DEF_EXPR(DOT),
166 DEF_EXPR(CLASS),
168 DEF_EXPR(LABELED),
169 DEF_EXPR(FITEM),
170 EXPR_VALUE = EXPR_BEG,
171 EXPR_BEG_ANY = (EXPR_BEG | EXPR_MID | EXPR_CLASS),
172 EXPR_ARG_ANY = (EXPR_ARG | EXPR_CMDARG),
173 EXPR_END_ANY = (EXPR_END | EXPR_ENDARG | EXPR_ENDFN),
174 EXPR_NONE = 0
176#define IS_lex_state_for(x, ls) ((x) & (ls))
177#define IS_lex_state_all_for(x, ls) (((x) & (ls)) == (ls))
178#define IS_lex_state(ls) IS_lex_state_for(p->lex.state, (ls))
179#define IS_lex_state_all(ls) IS_lex_state_all_for(p->lex.state, (ls))
180
181# define SET_LEX_STATE(ls) \
182 (p->lex.state = \
183 (p->debug ? \
184 rb_parser_trace_lex_state(p, p->lex.state, (ls), __LINE__) : \
185 (enum lex_state_e)(ls)))
186
188
189static const rb_code_location_t NULL_LOC = { {0, -1}, {0, -1} };
190
191# define SHOW_BITSTACK(stack, name) (p->debug ? rb_parser_show_bitstack(p, stack, name, __LINE__) : (void)0)
192# define BITSTACK_PUSH(stack, n) (((p->stack) = ((p->stack)<<1)|((n)&1)), SHOW_BITSTACK(p->stack, #stack"(push)"))
193# define BITSTACK_POP(stack) (((p->stack) = (p->stack) >> 1), SHOW_BITSTACK(p->stack, #stack"(pop)"))
194# define BITSTACK_SET_P(stack) (SHOW_BITSTACK(p->stack, #stack), (p->stack)&1)
195# define BITSTACK_SET(stack, n) ((p->stack)=(n), SHOW_BITSTACK(p->stack, #stack"(set)"))
196
197/* A flag to identify keyword_do_cond, "do" keyword after condition expression.
198 Examples: `while ... do`, `until ... do`, and `for ... in ... do` */
199#define COND_PUSH(n) BITSTACK_PUSH(cond_stack, (n))
200#define COND_POP() BITSTACK_POP(cond_stack)
201#define COND_P() BITSTACK_SET_P(cond_stack)
202#define COND_SET(n) BITSTACK_SET(cond_stack, (n))
203
204/* A flag to identify keyword_do_block; "do" keyword after command_call.
205 Example: `foo 1, 2 do`. */
206#define CMDARG_PUSH(n) BITSTACK_PUSH(cmdarg_stack, (n))
207#define CMDARG_POP() BITSTACK_POP(cmdarg_stack)
208#define CMDARG_P() BITSTACK_SET_P(cmdarg_stack)
209#define CMDARG_SET(n) BITSTACK_SET(cmdarg_stack, (n))
210
211struct vtable {
213 int pos;
214 int capa;
215 struct vtable *prev;
216};
217
219 struct vtable *args;
220 struct vtable *vars;
221 struct vtable *used;
222# if WARN_PAST_SCOPE
223 struct vtable *past;
224# endif
226# ifndef RIPPER
227 struct {
230# endif
231};
232
233enum {
237};
238
239#define NUMPARAM_ID_P(id) numparam_id_p(id)
240#define NUMPARAM_ID_TO_IDX(id) (unsigned int)(((id) >> ID_SCOPE_SHIFT) - tNUMPARAM_1 + 1)
241#define NUMPARAM_IDX_TO_ID(idx) TOKEN2LOCALID((tNUMPARAM_1 + (idx) - 1))
242static int
243numparam_id_p(ID id)
244{
245 if (!is_local_id(id)) return 0;
246 unsigned int idx = NUMPARAM_ID_TO_IDX(id);
247 return idx > 0 && idx <= NUMPARAM_MAX;
248}
249static void numparam_name(struct parser_params *p, ID id);
250
251#define DVARS_INHERIT ((void*)1)
252#define DVARS_TOPSCOPE NULL
253#define DVARS_TERMINAL_P(tbl) ((tbl) == DVARS_INHERIT || (tbl) == DVARS_TOPSCOPE)
254
255typedef struct token_info {
256 const char *token;
262
264
265/*
266 Structure of Lexer Buffer:
267
268 lex.pbeg lex.ptok lex.pcur lex.pend
269 | | | |
270 |------------+------------+------------|
271 |<---------->|
272 token
273*/
276
278
279 struct {
286 const char *pbeg;
287 const char *pcur;
288 const char *pend;
289 const char *ptok;
290 union {
291 long ptr;
295 /* track the nest level of any parens "()[]{}" */
297 /* keep p->lex.paren_nest at the beginning of lambda "->" to detect tLAMBEG and keyword_do_LAMBDA */
299 /* track the nest level of only braces "{}" */
310 char *tokenbuf;
315 int ruby_sourceline; /* current line no. */
316 const char *ruby_sourcefile; /* current source file */
322
325
327
330
332
333 unsigned int command_start:1;
334 unsigned int eofp: 1;
335 unsigned int ruby__end__seen: 1;
336 unsigned int debug: 1;
337 unsigned int has_shebang: 1;
338 unsigned int in_defined: 1;
339 unsigned int in_kwarg: 1;
340 unsigned int in_def: 1;
341 unsigned int in_class: 1;
342 unsigned int token_seen: 1;
343 unsigned int token_info_enabled: 1;
344# if WARN_PAST_SCOPE
345 unsigned int past_scope_enabled: 1;
346# endif
347 unsigned int error_p: 1;
348 unsigned int cr_seen: 1;
349
350#ifndef RIPPER
351 /* Ruby core only */
352
353 unsigned int do_print: 1;
354 unsigned int do_loop: 1;
355 unsigned int do_chomp: 1;
356 unsigned int do_split: 1;
357 unsigned int warn_location: 1;
358
364#else
365 /* Ripper only */
366
367 struct {
368 VALUE token;
369 int line;
370 int col;
371 } delayed;
372
373 VALUE value;
374 VALUE result;
375 VALUE parsing_thread;
376#endif
377};
378
379#define intern_cstr(n,l,en) rb_intern3(n,l,en)
380
381#define STR_NEW(ptr,len) rb_enc_str_new((ptr),(len),p->enc)
382#define STR_NEW0() rb_enc_str_new(0,0,p->enc)
383#define STR_NEW2(ptr) rb_enc_str_new((ptr),strlen(ptr),p->enc)
384#define STR_NEW3(ptr,len,e,func) parser_str_new((ptr),(len),(e),(func),p->enc)
385#define TOK_INTERN() intern_cstr(tok(p), toklen(p), p->enc)
386
387static st_table *
388push_pvtbl(struct parser_params *p)
389{
390 st_table *tbl = p->pvtbl;
391 p->pvtbl = st_init_numtable();
392 return tbl;
393}
394
395static void
396pop_pvtbl(struct parser_params *p, st_table *tbl)
397{
399 p->pvtbl = tbl;
400}
401
402static st_table *
403push_pktbl(struct parser_params *p)
404{
405 st_table *tbl = p->pktbl;
406 p->pktbl = 0;
407 return tbl;
408}
409
410static void
411pop_pktbl(struct parser_params *p, st_table *tbl)
412{
413 if (p->pktbl) st_free_table(p->pktbl);
414 p->pktbl = tbl;
415}
416
417static int parser_yyerror(struct parser_params*, const YYLTYPE *yylloc, const char*);
418#define yyerror0(msg) parser_yyerror(p, NULL, (msg))
419#define yyerror1(loc, msg) parser_yyerror(p, (loc), (msg))
420#define yyerror(yylloc, p, msg) parser_yyerror(p, yylloc, msg)
421#define token_flush(ptr) ((ptr)->lex.ptok = (ptr)->lex.pcur)
422
423#ifdef RIPPER
424#define compile_for_eval (0)
425#else
426#define compile_for_eval (p->parent_iseq != 0)
427#endif
428
429#define token_column ((int)(p->lex.ptok - p->lex.pbeg))
430
431#define CALL_Q_P(q) ((q) == TOKEN2VAL(tANDDOT))
432#define NODE_CALL_Q(q) (CALL_Q_P(q) ? NODE_QCALL : NODE_CALL)
433#define NEW_QCALL(q,r,m,a,loc) NEW_NODE(NODE_CALL_Q(q),r,m,a,loc)
434
435#define lambda_beginning_p() (p->lex.lpar_beg == p->lex.paren_nest)
436
437static enum yytokentype yylex(YYSTYPE*, YYLTYPE*, struct parser_params*);
438
439#ifndef RIPPER
440static inline void
441rb_discard_node(struct parser_params *p, NODE *n)
442{
444}
445#endif
446
447#ifdef RIPPER
448static inline VALUE
449add_mark_object(struct parser_params *p, VALUE obj)
450{
451 if (!SPECIAL_CONST_P(obj)
452 && !RB_TYPE_P(obj, T_NODE) /* Ripper jumbles NODE objects and other objects... */
453 ) {
455 }
456 return obj;
457}
458#else
459static NODE* node_newnode_with_locals(struct parser_params *, enum node_type, VALUE, VALUE, const rb_code_location_t*);
460#endif
461
462static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE, const rb_code_location_t*);
463#define rb_node_newnode(type, a1, a2, a3, loc) node_newnode(p, (type), (a1), (a2), (a3), (loc))
464
465static NODE *nd_set_loc(NODE *nd, const YYLTYPE *loc);
466
467static int
468parser_get_node_id(struct parser_params *p)
469{
470 int node_id = p->node_id;
471 p->node_id++;
472 return node_id;
473}
474
475#ifndef RIPPER
476static inline void
477set_line_body(NODE *body, int line)
478{
479 if (!body) return;
480 switch (nd_type(body)) {
481 case NODE_RESCUE:
482 case NODE_ENSURE:
483 nd_set_line(body, line);
484 }
485}
486
487#define yyparse ruby_yyparse
488
489static NODE* cond(struct parser_params *p, NODE *node, const YYLTYPE *loc);
490static NODE* method_cond(struct parser_params *p, NODE *node, const YYLTYPE *loc);
491#define new_nil(loc) NEW_NIL(loc)
492static NODE *new_if(struct parser_params*,NODE*,NODE*,NODE*,const YYLTYPE*);
493static NODE *new_unless(struct parser_params*,NODE*,NODE*,NODE*,const YYLTYPE*);
494static NODE *logop(struct parser_params*,ID,NODE*,NODE*,const YYLTYPE*,const YYLTYPE*);
495
496static NODE *newline_node(NODE*);
497static void fixpos(NODE*,NODE*);
498
499static int value_expr_gen(struct parser_params*,NODE*);
500static void void_expr(struct parser_params*,NODE*);
501static NODE *remove_begin(NODE*);
502static NODE *remove_begin_all(NODE*);
503#define value_expr(node) value_expr_gen(p, (node) = remove_begin(node))
504static NODE *void_stmts(struct parser_params*,NODE*);
505static void reduce_nodes(struct parser_params*,NODE**);
506static void block_dup_check(struct parser_params*,NODE*,NODE*);
507
508static NODE *block_append(struct parser_params*,NODE*,NODE*);
509static NODE *list_append(struct parser_params*,NODE*,NODE*);
510static NODE *list_concat(NODE*,NODE*);
511static NODE *arg_append(struct parser_params*,NODE*,NODE*,const YYLTYPE*);
512static NODE *last_arg_append(struct parser_params *p, NODE *args, NODE *last_arg, const YYLTYPE *loc);
513static NODE *rest_arg_append(struct parser_params *p, NODE *args, NODE *rest_arg, const YYLTYPE *loc);
514static NODE *literal_concat(struct parser_params*,NODE*,NODE*,const YYLTYPE*);
515static NODE *new_evstr(struct parser_params*,NODE*,const YYLTYPE*);
516static NODE *evstr2dstr(struct parser_params*,NODE*);
517static NODE *splat_array(NODE*);
518static void mark_lvar_used(struct parser_params *p, NODE *rhs);
519
520static NODE *call_bin_op(struct parser_params*,NODE*,ID,NODE*,const YYLTYPE*,const YYLTYPE*);
521static NODE *call_uni_op(struct parser_params*,NODE*,ID,const YYLTYPE*,const YYLTYPE*);
522static NODE *new_qcall(struct parser_params* p, ID atype, NODE *recv, ID mid, NODE *args, const YYLTYPE *op_loc, const YYLTYPE *loc);
523static NODE *new_command_qcall(struct parser_params* p, ID atype, NODE *recv, ID mid, NODE *args, NODE *block, const YYLTYPE *op_loc, const YYLTYPE *loc);
524static NODE *method_add_block(struct parser_params*p, NODE *m, NODE *b, const YYLTYPE *loc) {b->nd_iter = m; b->nd_loc = *loc; return b;}
525
526static bool args_info_empty_p(struct rb_args_info *args);
527static NODE *new_args(struct parser_params*,NODE*,NODE*,ID,NODE*,NODE*,const YYLTYPE*);
528static NODE *new_args_tail(struct parser_params*,NODE*,ID,ID,const YYLTYPE*);
529static NODE *new_array_pattern(struct parser_params *p, NODE *constant, NODE *pre_arg, NODE *aryptn, const YYLTYPE *loc);
530static NODE *new_array_pattern_tail(struct parser_params *p, NODE *pre_args, int has_rest, ID rest_arg, NODE *post_args, const YYLTYPE *loc);
531static NODE *new_hash_pattern(struct parser_params *p, NODE *constant, NODE *hshptn, const YYLTYPE *loc);
532static NODE *new_hash_pattern_tail(struct parser_params *p, NODE *kw_args, ID kw_rest_arg, const YYLTYPE *loc);
533static NODE *new_case3(struct parser_params *p, NODE *val, NODE *pat, const YYLTYPE *loc);
534
535static NODE *new_kw_arg(struct parser_params *p, NODE *k, const YYLTYPE *loc);
536static NODE *args_with_numbered(struct parser_params*,NODE*,int);
537
538static VALUE negate_lit(struct parser_params*, VALUE);
539static NODE *ret_args(struct parser_params*,NODE*);
540static NODE *arg_blk_pass(NODE*,NODE*);
541static NODE *new_yield(struct parser_params*,NODE*,const YYLTYPE*);
542static NODE *dsym_node(struct parser_params*,NODE*,const YYLTYPE*);
543
544static NODE *gettable(struct parser_params*,ID,const YYLTYPE*);
545static NODE *assignable(struct parser_params*,ID,NODE*,const YYLTYPE*);
546
547static NODE *aryset(struct parser_params*,NODE*,NODE*,const YYLTYPE*);
548static NODE *attrset(struct parser_params*,NODE*,ID,ID,const YYLTYPE*);
549
550static void rb_backref_error(struct parser_params*,NODE*);
551static NODE *node_assign(struct parser_params*,NODE*,NODE*,const YYLTYPE*);
552
553static NODE *new_op_assign(struct parser_params *p, NODE *lhs, ID op, NODE *rhs, const YYLTYPE *loc);
554static NODE *new_ary_op_assign(struct parser_params *p, NODE *ary, NODE *args, ID op, NODE *rhs, const YYLTYPE *args_loc, const YYLTYPE *loc);
555static NODE *new_attr_op_assign(struct parser_params *p, NODE *lhs, ID atype, ID attr, ID op, NODE *rhs, const YYLTYPE *loc);
556static NODE *new_const_op_assign(struct parser_params *p, NODE *lhs, ID op, NODE *rhs, const YYLTYPE *loc);
557static NODE *new_bodystmt(struct parser_params *p, NODE *head, NODE *rescue, NODE *rescue_else, NODE *ensure, const YYLTYPE *loc);
558
559static NODE *const_decl(struct parser_params *p, NODE* path, const YYLTYPE *loc);
560
561static NODE *opt_arg_append(NODE*, NODE*);
562static NODE *kwd_append(NODE*, NODE*);
563
564static NODE *new_hash(struct parser_params *p, NODE *hash, const YYLTYPE *loc);
565static NODE *new_unique_key_hash(struct parser_params *p, NODE *hash, const YYLTYPE *loc);
566
567static NODE *new_defined(struct parser_params *p, NODE *expr, const YYLTYPE *loc);
568
569static NODE *new_regexp(struct parser_params *, NODE *, int, const YYLTYPE *);
570
571#define make_list(list, loc) ((list) ? (nd_set_loc(list, loc), list) : NEW_ZLIST(loc))
572
573static NODE *new_xstring(struct parser_params *, NODE *, const YYLTYPE *loc);
574
575static NODE *symbol_append(struct parser_params *p, NODE *symbols, NODE *symbol);
576
577static NODE *match_op(struct parser_params*,NODE*,NODE*,const YYLTYPE*,const YYLTYPE*);
578
579static ID *local_tbl(struct parser_params*);
580
581static VALUE reg_compile(struct parser_params*, VALUE, int);
582static void reg_fragment_setenc(struct parser_params*, VALUE, int);
583static int reg_fragment_check(struct parser_params*, VALUE, int);
584static NODE *reg_named_capture_assign(struct parser_params* p, VALUE regexp, const YYLTYPE *loc);
585
586static int literal_concat0(struct parser_params *p, VALUE head, VALUE tail);
587static NODE *heredoc_dedent(struct parser_params*,NODE*);
588
589static void check_literal_when(struct parser_params *p, NODE *args, const YYLTYPE *loc);
590
591#define get_id(id) (id)
592#define get_value(val) (val)
593#define get_num(num) (num)
594#else /* RIPPER */
595#define NODE_RIPPER NODE_CDECL
596
597static inline int ripper_is_node_yylval(VALUE n);
598
599static inline VALUE
600ripper_new_yylval(struct parser_params *p, ID a, VALUE b, VALUE c)
601{
602 if (ripper_is_node_yylval(c)) c = RNODE(c)->nd_cval;
603 add_mark_object(p, b);
604 add_mark_object(p, c);
605 return (VALUE)NEW_CDECL(a, b, c, &NULL_LOC);
606}
607
608static inline int
609ripper_is_node_yylval(VALUE n)
610{
611 return RB_TYPE_P(n, T_NODE) && nd_type(RNODE(n)) == NODE_RIPPER;
612}
613
614#define value_expr(node) ((void)(node))
615#define remove_begin(node) (node)
616#define void_stmts(p,x) (x)
617#define rb_dvar_defined(id, base) 0
618#define rb_local_defined(id, base) 0
619static ID ripper_get_id(VALUE);
620#define get_id(id) ripper_get_id(id)
621static VALUE ripper_get_value(VALUE);
622#define get_value(val) ripper_get_value(val)
623#define get_num(num) (int)get_id(num)
624static VALUE assignable(struct parser_params*,VALUE);
625static int id_is_var(struct parser_params *p, ID id);
626
627#define method_cond(p,node,loc) (node)
628#define call_bin_op(p, recv,id,arg1,op_loc,loc) dispatch3(binary, (recv), STATIC_ID2SYM(id), (arg1))
629#define match_op(p,node1,node2,op_loc,loc) call_bin_op(0, (node1), idEqTilde, (node2), op_loc, loc)
630#define call_uni_op(p, recv,id,op_loc,loc) dispatch2(unary, STATIC_ID2SYM(id), (recv))
631#define logop(p,id,node1,node2,op_loc,loc) call_bin_op(0, (node1), (id), (node2), op_loc, loc)
632
633#define new_nil(loc) Qnil
634
635static VALUE new_regexp(struct parser_params *, VALUE, VALUE, const YYLTYPE *);
636
637static VALUE const_decl(struct parser_params *p, VALUE path);
638
639static VALUE var_field(struct parser_params *p, VALUE a);
640static VALUE assign_error(struct parser_params *p, VALUE a);
641
642static VALUE parser_reg_compile(struct parser_params*, VALUE, int, VALUE *);
643
644#endif /* !RIPPER */
645
646/* forward declaration */
648
650VALUE rb_parser_reg_compile(struct parser_params* p, VALUE str, int options);
654void rb_parser_show_bitstack(struct parser_params *, stack_type, const char *, int);
655PRINTF_ARGS(void rb_parser_fatal(struct parser_params *p, const char *fmt, ...), 2, 3);
660
661static void error_duplicate_pattern_variable(struct parser_params *p, ID id, const YYLTYPE *loc);
662static void error_duplicate_pattern_key(struct parser_params *p, ID id, const YYLTYPE *loc);
663static ID formal_argument(struct parser_params*, ID);
664static ID shadowing_lvar(struct parser_params*,ID);
665static void new_bv(struct parser_params*,ID);
666
667static void local_push(struct parser_params*,int);
668static void local_pop(struct parser_params*);
669static void local_var(struct parser_params*, ID);
670static void arg_var(struct parser_params*, ID);
671static int local_id(struct parser_params *p, ID id);
672static int local_id_ref(struct parser_params*, ID, ID **);
673#ifndef RIPPER
674static ID internal_id(struct parser_params*);
675#endif
676
677static const struct vtable *dyna_push(struct parser_params *);
678static void dyna_pop(struct parser_params*, const struct vtable *);
679static int dyna_in_block(struct parser_params*);
680#define dyna_var(p, id) local_var(p, id)
681static int dvar_defined(struct parser_params*, ID);
682static int dvar_defined_ref(struct parser_params*, ID, ID**);
683static int dvar_curr(struct parser_params*,ID);
684
685static int lvar_defined(struct parser_params*, ID);
686
687static NODE *numparam_push(struct parser_params *p);
688static void numparam_pop(struct parser_params *p, NODE *prev_inner);
689
690#ifdef RIPPER
691# define METHOD_NOT idNOT
692#else
693# define METHOD_NOT '!'
694#endif
695
696#define idFWD_REST '*'
697#ifdef RUBY3_KEYWORDS
698#define idFWD_KWREST idPow /* Use simple "**", as tDSTAR is "**arg" */
699#else
700#define idFWD_KWREST 0
701#endif
702#define idFWD_BLOCK '&'
703
704#define RE_OPTION_ONCE (1<<16)
705#define RE_OPTION_ENCODING_SHIFT 8
706#define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
707#define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
708#define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
709#define RE_OPTION_MASK 0xff
710#define RE_OPTION_ARG_ENCODING_NONE 32
711
712/* structs for managing terminator of string literal and heredocment */
714 union {
716 long nest;
717 } u0;
718 union {
719 VALUE dummy;
720 long func; /* STR_FUNC_* (e.g., STR_FUNC_ESCAPE and STR_FUNC_EXPAND) */
721 } u1;
722 union {
723 VALUE dummy;
724 long paren; /* '(' of `%q(...)` */
725 } u2;
726 union {
727 VALUE dummy;
728 long term; /* ')' of `%q(...)` */
729 } u3;
731
732#define HERETERM_LENGTH_BITS ((SIZEOF_VALUE - 1) * CHAR_BIT - 1)
733
735 VALUE lastline; /* the string of line that contains `<<"END"` */
736 long offset; /* the column of END in `<<"END"` */
737 int sourceline; /* lineno of the line that contains `<<"END"` */
738 unsigned length /* the length of END in `<<"END"` */
739#if HERETERM_LENGTH_BITS < SIZEOF_INT * CHAR_BIT
741# define HERETERM_LENGTH_MAX ((1U << HERETERM_LENGTH_BITS) - 1)
742#else
743# define HERETERM_LENGTH_MAX UINT_MAX
744#endif
745 ;
746#if HERETERM_LENGTH_BITS < SIZEOF_INT * CHAR_BIT
747 unsigned quote: 1;
748 unsigned func: 8;
749#else
752#endif
753};
755
756#define STRTERM_HEREDOC IMEMO_FL_USER0
757
760 union {
763 } u;
764};
765
766#ifndef RIPPER
767void
769{
770 rb_strterm_t *strterm = (rb_strterm_t*)obj;
771 if (RBASIC(obj)->flags & STRTERM_HEREDOC) {
772 rb_strterm_heredoc_t *heredoc = &strterm->u.heredoc;
773 rb_gc_mark(heredoc->lastline);
774 }
775}
776#endif
777
778#define yytnamerr(yyres, yystr) (YYSIZE_T)rb_yytnamerr(p, yyres, yystr)
779size_t rb_yytnamerr(struct parser_params *p, char *yyres, const char *yystr);
780
781#define TOKEN2ID(tok) ( \
782 tTOKEN_LOCAL_BEGIN<(tok)&&(tok)<tTOKEN_LOCAL_END ? TOKEN2LOCALID(tok) : \
783 tTOKEN_INSTANCE_BEGIN<(tok)&&(tok)<tTOKEN_INSTANCE_END ? TOKEN2INSTANCEID(tok) : \
784 tTOKEN_GLOBAL_BEGIN<(tok)&&(tok)<tTOKEN_GLOBAL_END ? TOKEN2GLOBALID(tok) : \
785 tTOKEN_CONST_BEGIN<(tok)&&(tok)<tTOKEN_CONST_END ? TOKEN2CONSTID(tok) : \
786 tTOKEN_CLASS_BEGIN<(tok)&&(tok)<tTOKEN_CLASS_END ? TOKEN2CLASSID(tok) : \
787 tTOKEN_ATTRSET_BEGIN<(tok)&&(tok)<tTOKEN_ATTRSET_END ? TOKEN2ATTRSETID(tok) : \
788 ((tok) / ((tok)<tPRESERVED_ID_END && ((tok)>=128 || rb_ispunct(tok)))))
789
790/****** Ripper *******/
791
792#ifdef RIPPER
793#define RIPPER_VERSION "0.1.0"
794
795static inline VALUE intern_sym(const char *name);
796
797#include "eventids1.c"
798#include "eventids2.c"
799
800static VALUE ripper_dispatch0(struct parser_params*,ID);
801static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
802static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
803static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
804static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
805static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
806static VALUE ripper_dispatch7(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE);
807static void ripper_error(struct parser_params *p);
808
809#define dispatch0(n) ripper_dispatch0(p, TOKEN_PASTE(ripper_id_, n))
810#define dispatch1(n,a) ripper_dispatch1(p, TOKEN_PASTE(ripper_id_, n), (a))
811#define dispatch2(n,a,b) ripper_dispatch2(p, TOKEN_PASTE(ripper_id_, n), (a), (b))
812#define dispatch3(n,a,b,c) ripper_dispatch3(p, TOKEN_PASTE(ripper_id_, n), (a), (b), (c))
813#define dispatch4(n,a,b,c,d) ripper_dispatch4(p, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d))
814#define dispatch5(n,a,b,c,d,e) ripper_dispatch5(p, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e))
815#define dispatch7(n,a,b,c,d,e,f,g) ripper_dispatch7(p, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e), (f), (g))
816
817#define yyparse ripper_yyparse
818
819#define ID2VAL(id) STATIC_ID2SYM(id)
820#define TOKEN2VAL(t) ID2VAL(TOKEN2ID(t))
821#define KWD2EID(t, v) ripper_new_yylval(p, keyword_##t, get_value(v), 0)
822
823#define params_new(pars, opts, rest, pars2, kws, kwrest, blk) \
824 dispatch7(params, (pars), (opts), (rest), (pars2), (kws), (kwrest), (blk))
825
826#define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
827
828static inline VALUE
829new_args(struct parser_params *p, VALUE pre_args, VALUE opt_args, VALUE rest_arg, VALUE post_args, VALUE tail, YYLTYPE *loc)
830{
831 NODE *t = (NODE *)tail;
832 VALUE kw_args = t->u1.value, kw_rest_arg = t->u2.value, block = t->u3.value;
833 return params_new(pre_args, opt_args, rest_arg, post_args, kw_args, kw_rest_arg, escape_Qundef(block));
834}
835
836static inline VALUE
837new_args_tail(struct parser_params *p, VALUE kw_args, VALUE kw_rest_arg, VALUE block, YYLTYPE *loc)
838{
839 NODE *t = rb_node_newnode(NODE_ARGS_AUX, kw_args, kw_rest_arg, block, &NULL_LOC);
840 add_mark_object(p, kw_args);
841 add_mark_object(p, kw_rest_arg);
842 add_mark_object(p, block);
843 return (VALUE)t;
844}
845
846static inline VALUE
847args_with_numbered(struct parser_params *p, VALUE args, int max_numparam)
848{
849 return args;
850}
851
852static VALUE
853new_array_pattern(struct parser_params *p, VALUE constant, VALUE pre_arg, VALUE aryptn, const YYLTYPE *loc)
854{
855 NODE *t = (NODE *)aryptn;
856 struct rb_ary_pattern_info *apinfo = t->nd_apinfo;
858
859 if (apinfo) {
860 pre_args = rb_ary_entry(apinfo->imemo, 0);
861 rest_arg = rb_ary_entry(apinfo->imemo, 1);
862 post_args = rb_ary_entry(apinfo->imemo, 2);
863 }
864
865 if (!NIL_P(pre_arg)) {
866 if (!NIL_P(pre_args)) {
867 rb_ary_unshift(pre_args, pre_arg);
868 }
869 else {
870 pre_args = rb_ary_new_from_args(1, pre_arg);
871 }
872 }
873 return dispatch4(aryptn, constant, pre_args, rest_arg, post_args);
874}
875
876static VALUE
877new_array_pattern_tail(struct parser_params *p, VALUE pre_args, VALUE has_rest, VALUE rest_arg, VALUE post_args, const YYLTYPE *loc)
878{
879 NODE *t;
880 struct rb_ary_pattern_info *apinfo;
881
882 if (has_rest) {
883 rest_arg = dispatch1(var_field, rest_arg ? rest_arg : Qnil);
884 }
885 else {
886 rest_arg = Qnil;
887 }
888
890 apinfo = ZALLOC(struct rb_ary_pattern_info);
891 rb_imemo_tmpbuf_set_ptr(tmpbuf, apinfo);
892 apinfo->imemo = rb_ary_new_from_args(4, pre_args, rest_arg, post_args, tmpbuf);
893
894 t = rb_node_newnode(NODE_ARYPTN, Qnil, Qnil, (VALUE)apinfo, &NULL_LOC);
895 RB_OBJ_WRITTEN(p->ast, Qnil, apinfo->imemo);
896
897 return (VALUE)t;
898}
899
900#define new_hash(p,h,l) rb_ary_new_from_args(0)
901
902static VALUE
903new_unique_key_hash(struct parser_params *p, VALUE ary, const YYLTYPE *loc)
904{
905 return ary;
906}
907
908static VALUE
909new_hash_pattern(struct parser_params *p, VALUE constant, VALUE hshptn, const YYLTYPE *loc)
910{
911 NODE *t = (NODE *)hshptn;
912 VALUE kw_args = t->u1.value, kw_rest_arg = t->u2.value;
913 return dispatch3(hshptn, constant, kw_args, kw_rest_arg);
914}
915
916static VALUE
917new_hash_pattern_tail(struct parser_params *p, VALUE kw_args, VALUE kw_rest_arg, const YYLTYPE *loc)
918{
919 NODE *t;
920 if (kw_rest_arg) {
921 kw_rest_arg = dispatch1(var_field, kw_rest_arg);
922 }
923 else {
924 kw_rest_arg = Qnil;
925 }
926 t = rb_node_newnode(NODE_HSHPTN, kw_args, kw_rest_arg, 0, &NULL_LOC);
927
928 add_mark_object(p, kw_args);
929 add_mark_object(p, kw_rest_arg);
930 return (VALUE)t;
931}
932
933#define new_defined(p,expr,loc) dispatch1(defined, (expr))
934
935static VALUE heredoc_dedent(struct parser_params*,VALUE);
936
937#else
938#define ID2VAL(id) (id)
939#define TOKEN2VAL(t) ID2VAL(t)
940#define KWD2EID(t, v) keyword_##t
941#endif /* RIPPER */
942
943#ifndef RIPPER
944# define Qnone 0
945# define Qnull 0
946# define ifndef_ripper(x) (x)
947#else
948# define Qnone Qnil
949# define Qnull Qundef
950# define ifndef_ripper(x)
951#endif
952
953# define rb_warn0(fmt) WARN_CALL(WARN_ARGS(fmt, 1))
954# define rb_warn1(fmt,a) WARN_CALL(WARN_ARGS(fmt, 2), (a))
955# define rb_warn2(fmt,a,b) WARN_CALL(WARN_ARGS(fmt, 3), (a), (b))
956# define rb_warn3(fmt,a,b,c) WARN_CALL(WARN_ARGS(fmt, 4), (a), (b), (c))
957# define rb_warn4(fmt,a,b,c,d) WARN_CALL(WARN_ARGS(fmt, 5), (a), (b), (c), (d))
958# define rb_warning0(fmt) WARNING_CALL(WARNING_ARGS(fmt, 1))
959# define rb_warning1(fmt,a) WARNING_CALL(WARNING_ARGS(fmt, 2), (a))
960# define rb_warning2(fmt,a,b) WARNING_CALL(WARNING_ARGS(fmt, 3), (a), (b))
961# define rb_warning3(fmt,a,b,c) WARNING_CALL(WARNING_ARGS(fmt, 4), (a), (b), (c))
962# define rb_warning4(fmt,a,b,c,d) WARNING_CALL(WARNING_ARGS(fmt, 5), (a), (b), (c), (d))
963# define rb_warn0L(l,fmt) WARN_CALL(WARN_ARGS_L(l, fmt, 1))
964# define rb_warn1L(l,fmt,a) WARN_CALL(WARN_ARGS_L(l, fmt, 2), (a))
965# define rb_warn2L(l,fmt,a,b) WARN_CALL(WARN_ARGS_L(l, fmt, 3), (a), (b))
966# define rb_warn3L(l,fmt,a,b,c) WARN_CALL(WARN_ARGS_L(l, fmt, 4), (a), (b), (c))
967# define rb_warn4L(l,fmt,a,b,c,d) WARN_CALL(WARN_ARGS_L(l, fmt, 5), (a), (b), (c), (d))
968# define rb_warning0L(l,fmt) WARNING_CALL(WARNING_ARGS_L(l, fmt, 1))
969# define rb_warning1L(l,fmt,a) WARNING_CALL(WARNING_ARGS_L(l, fmt, 2), (a))
970# define rb_warning2L(l,fmt,a,b) WARNING_CALL(WARNING_ARGS_L(l, fmt, 3), (a), (b))
971# define rb_warning3L(l,fmt,a,b,c) WARNING_CALL(WARNING_ARGS_L(l, fmt, 4), (a), (b), (c))
972# define rb_warning4L(l,fmt,a,b,c,d) WARNING_CALL(WARNING_ARGS_L(l, fmt, 5), (a), (b), (c), (d))
973#ifdef RIPPER
974static ID id_warn, id_warning, id_gets, id_assoc;
975# define WARN_S_L(s,l) STR_NEW(s,l)
976# define WARN_S(s) STR_NEW2(s)
977# define WARN_I(i) INT2NUM(i)
978# define WARN_ID(i) rb_id2str(i)
979# define WARN_IVAL(i) i
980# define PRIsWARN "s"
981# define WARN_ARGS(fmt,n) p->value, id_warn, n, rb_usascii_str_new_lit(fmt)
982# define WARN_ARGS_L(l,fmt,n) WARN_ARGS(fmt,n)
983# ifdef HAVE_VA_ARGS_MACRO
984# define WARN_CALL(...) rb_funcall(__VA_ARGS__)
985# else
986# define WARN_CALL rb_funcall
987# endif
988# define WARNING_ARGS(fmt,n) p->value, id_warning, n, rb_usascii_str_new_lit(fmt)
989# define WARNING_ARGS_L(l, fmt,n) WARNING_ARGS(fmt,n)
990# ifdef HAVE_VA_ARGS_MACRO
991# define WARNING_CALL(...) rb_funcall(__VA_ARGS__)
992# else
993# define WARNING_CALL rb_funcall
994# endif
995PRINTF_ARGS(static void ripper_compile_error(struct parser_params*, const char *fmt, ...), 2, 3);
996# define compile_error ripper_compile_error
997#else
998# define WARN_S_L(s,l) s
999# define WARN_S(s) s
1000# define WARN_I(i) i
1001# define WARN_ID(i) rb_id2name(i)
1002# define WARN_IVAL(i) NUM2INT(i)
1003# define PRIsWARN PRIsVALUE
1004# define WARN_ARGS(fmt,n) WARN_ARGS_L(p->ruby_sourceline,fmt,n)
1005# define WARN_ARGS_L(l,fmt,n) p->ruby_sourcefile, (l), (fmt)
1006# define WARN_CALL rb_compile_warn
1007# define WARNING_ARGS(fmt,n) WARN_ARGS(fmt,n)
1008# define WARNING_ARGS_L(l,fmt,n) WARN_ARGS_L(l,fmt,n)
1009# define WARNING_CALL rb_compile_warning
1010PRINTF_ARGS(static void parser_compile_error(struct parser_params*, const char *fmt, ...), 2, 3);
1011# define compile_error parser_compile_error
1012#endif
1013
1014static void token_info_setup(token_info *ptinfo, const char *ptr, const rb_code_location_t *loc);
1015static void token_info_push(struct parser_params*, const char *token, const rb_code_location_t *loc);
1016static void token_info_pop(struct parser_params*, const char *token, const rb_code_location_t *loc);
1017static void token_info_warn(struct parser_params *p, const char *token, token_info *ptinfo_beg, int same, const rb_code_location_t *loc);
1018
1019#define WARN_EOL(tok) \
1020 (looking_at_eol_p(p) ? \
1021 (void)rb_warning0("`" tok "' at the end of line without an expression") : \
1022 (void)0)
1023static int looking_at_eol_p(struct parser_params *p);
1024
1025#line 1026 "ripper.c"
1026
1027# ifndef YY_CAST
1028# ifdef __cplusplus
1029# define YY_CAST(Type, Val) static_cast<Type> (Val)
1030# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
1031# else
1032# define YY_CAST(Type, Val) ((Type) (Val))
1033# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
1034# endif
1035# endif
1036# ifndef YY_NULLPTR
1037# if defined __cplusplus
1038# if 201103L <= __cplusplus
1039# define YY_NULLPTR nullptr
1040# else
1041# define YY_NULLPTR 0
1042# endif
1043# else
1044# define YY_NULLPTR ((void*)0)
1045# endif
1046# endif
1047
1048
1049/* Debug traces. */
1050#ifndef YYDEBUG
1051# define YYDEBUG 1
1052#endif
1053#if YYDEBUG
1054#ifndef yydebug
1055extern int yydebug;
1056#endif
1057#endif
1058
1059/* Token kinds. */
1060#ifndef YYTOKENTYPE
1061# define YYTOKENTYPE
1062 enum yytokentype
1063 {
1064 YYEMPTY = -2,
1065 END_OF_INPUT = 0, /* "end-of-input" */
1066 YYerror = 256, /* error */
1067 YYUNDEF = 257, /* "invalid token" */
1068 keyword_class = 258, /* "`class'" */
1069 keyword_module = 259, /* "`module'" */
1070 keyword_def = 260, /* "`def'" */
1071 keyword_undef = 261, /* "`undef'" */
1072 keyword_begin = 262, /* "`begin'" */
1073 keyword_rescue = 263, /* "`rescue'" */
1074 keyword_ensure = 264, /* "`ensure'" */
1075 keyword_end = 265, /* "`end'" */
1076 keyword_if = 266, /* "`if'" */
1077 keyword_unless = 267, /* "`unless'" */
1078 keyword_then = 268, /* "`then'" */
1079 keyword_elsif = 269, /* "`elsif'" */
1080 keyword_else = 270, /* "`else'" */
1081 keyword_case = 271, /* "`case'" */
1082 keyword_when = 272, /* "`when'" */
1083 keyword_while = 273, /* "`while'" */
1084 keyword_until = 274, /* "`until'" */
1085 keyword_for = 275, /* "`for'" */
1086 keyword_break = 276, /* "`break'" */
1087 keyword_next = 277, /* "`next'" */
1088 keyword_redo = 278, /* "`redo'" */
1089 keyword_retry = 279, /* "`retry'" */
1090 keyword_in = 280, /* "`in'" */
1091 keyword_do = 281, /* "`do'" */
1092 keyword_do_cond = 282, /* "`do' for condition" */
1093 keyword_do_block = 283, /* "`do' for block" */
1094 keyword_do_LAMBDA = 284, /* "`do' for lambda" */
1095 keyword_return = 285, /* "`return'" */
1096 keyword_yield = 286, /* "`yield'" */
1097 keyword_super = 287, /* "`super'" */
1098 keyword_self = 288, /* "`self'" */
1099 keyword_nil = 289, /* "`nil'" */
1100 keyword_true = 290, /* "`true'" */
1101 keyword_false = 291, /* "`false'" */
1102 keyword_and = 292, /* "`and'" */
1103 keyword_or = 293, /* "`or'" */
1104 keyword_not = 294, /* "`not'" */
1105 modifier_if = 295, /* "`if' modifier" */
1106 modifier_unless = 296, /* "`unless' modifier" */
1107 modifier_while = 297, /* "`while' modifier" */
1108 modifier_until = 298, /* "`until' modifier" */
1109 modifier_rescue = 299, /* "`rescue' modifier" */
1110 keyword_alias = 300, /* "`alias'" */
1111 keyword_defined = 301, /* "`defined?'" */
1112 keyword_BEGIN = 302, /* "`BEGIN'" */
1113 keyword_END = 303, /* "`END'" */
1114 keyword__LINE__ = 304, /* "`__LINE__'" */
1115 keyword__FILE__ = 305, /* "`__FILE__'" */
1116 keyword__ENCODING__ = 306, /* "`__ENCODING__'" */
1117 tIDENTIFIER = 307, /* "local variable or method" */
1118 tFID = 308, /* "method" */
1119 tGVAR = 309, /* "global variable" */
1120 tIVAR = 310, /* "instance variable" */
1121 tCONSTANT = 311, /* "constant" */
1122 tCVAR = 312, /* "class variable" */
1123 tLABEL = 313, /* tLABEL */
1124 tINTEGER = 314, /* "integer literal" */
1125 tFLOAT = 315, /* "float literal" */
1126 tRATIONAL = 316, /* "rational literal" */
1127 tIMAGINARY = 317, /* "imaginary literal" */
1128 tCHAR = 318, /* "char literal" */
1129 tNTH_REF = 319, /* "numbered reference" */
1130 tBACK_REF = 320, /* "back reference" */
1131 tSTRING_CONTENT = 321, /* "literal content" */
1132 tREGEXP_END = 322, /* tREGEXP_END */
1133 tSP = 323, /* "escaped space" */
1134 tUPLUS = 132, /* "unary+" */
1135 tUMINUS = 133, /* "unary-" */
1136 tPOW = 134, /* "**" */
1137 tCMP = 135, /* "<=>" */
1138 tEQ = 140, /* "==" */
1139 tEQQ = 141, /* "===" */
1140 tNEQ = 142, /* "!=" */
1141 tGEQ = 139, /* ">=" */
1142 tLEQ = 138, /* "<=" */
1143 tANDOP = 148, /* "&&" */
1144 tOROP = 149, /* "||" */
1145 tMATCH = 143, /* "=~" */
1146 tNMATCH = 144, /* "!~" */
1147 tDOT2 = 128, /* ".." */
1148 tDOT3 = 129, /* "..." */
1149 tBDOT2 = 130, /* "(.." */
1150 tBDOT3 = 131, /* "(..." */
1151 tAREF = 145, /* "[]" */
1152 tASET = 146, /* "[]=" */
1153 tLSHFT = 136, /* "<<" */
1154 tRSHFT = 137, /* ">>" */
1155 tANDDOT = 150, /* "&." */
1156 tCOLON2 = 147, /* "::" */
1157 tCOLON3 = 324, /* ":: at EXPR_BEG" */
1158 tOP_ASGN = 325, /* "operator-assignment" */
1159 tASSOC = 326, /* "=>" */
1160 tLPAREN = 327, /* "(" */
1161 tLPAREN_ARG = 328, /* "( arg" */
1162 tRPAREN = 329, /* ")" */
1163 tLBRACK = 330, /* "[" */
1164 tLBRACE = 331, /* "{" */
1165 tLBRACE_ARG = 332, /* "{ arg" */
1166 tSTAR = 333, /* "*" */
1167 tDSTAR = 334, /* "**arg" */
1168 tAMPER = 335, /* "&" */
1169 tLAMBDA = 336, /* "->" */
1170 tSYMBEG = 337, /* "symbol literal" */
1171 tSTRING_BEG = 338, /* "string literal" */
1172 tXSTRING_BEG = 339, /* "backtick literal" */
1173 tREGEXP_BEG = 340, /* "regexp literal" */
1174 tWORDS_BEG = 341, /* "word list" */
1175 tQWORDS_BEG = 342, /* "verbatim word list" */
1176 tSYMBOLS_BEG = 343, /* "symbol list" */
1177 tQSYMBOLS_BEG = 344, /* "verbatim symbol list" */
1178 tSTRING_END = 345, /* "terminator" */
1179 tSTRING_DEND = 346, /* "'}'" */
1180 tSTRING_DBEG = 347, /* tSTRING_DBEG */
1181 tSTRING_DVAR = 348, /* tSTRING_DVAR */
1182 tLAMBEG = 349, /* tLAMBEG */
1183 tLABEL_END = 350, /* tLABEL_END */
1184 tLOWEST = 351, /* tLOWEST */
1185 tUMINUS_NUM = 352, /* tUMINUS_NUM */
1186 tLAST_TOKEN = 353 /* tLAST_TOKEN */
1187 };
1188 typedef enum yytokentype yytoken_kind_t;
1189#endif
1190
1191/* Value type. */
1192#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
1193union YYSTYPE
1194{
1195#line 1006 "ripper.y"
1196
1197 VALUE val;
1198 NODE *node;
1199 ID id;
1200 int num;
1201 st_table *tbl;
1202 const struct vtable *vars;
1203 struct rb_strterm_struct *strterm;
1204
1205#line 1204 "ripper.c"
1206
1207};
1208typedef union YYSTYPE YYSTYPE;
1209# define YYSTYPE_IS_TRIVIAL 1
1210# define YYSTYPE_IS_DECLARED 1
1211#endif
1212
1213/* Location type. */
1214#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
1215typedef struct YYLTYPE YYLTYPE;
1216struct YYLTYPE
1217{
1218 int first_line;
1219 int first_column;
1220 int last_line;
1221 int last_column;
1222};
1223# define YYLTYPE_IS_DECLARED 1
1224# define YYLTYPE_IS_TRIVIAL 1
1225#endif
1226
1227
1228
1229
1230int yyparse (struct parser_params *p);
1231
1232
1233
1234/* Symbol kind. */
1236{
1238 YYSYMBOL_YYEOF = 0, /* "end-of-input" */
1239 YYSYMBOL_YYerror = 1, /* error */
1240 YYSYMBOL_YYUNDEF = 2, /* "invalid token" */
1241 YYSYMBOL_keyword_class = 3, /* "`class'" */
1242 YYSYMBOL_keyword_module = 4, /* "`module'" */
1243 YYSYMBOL_keyword_def = 5, /* "`def'" */
1244 YYSYMBOL_keyword_undef = 6, /* "`undef'" */
1245 YYSYMBOL_keyword_begin = 7, /* "`begin'" */
1246 YYSYMBOL_keyword_rescue = 8, /* "`rescue'" */
1247 YYSYMBOL_keyword_ensure = 9, /* "`ensure'" */
1248 YYSYMBOL_keyword_end = 10, /* "`end'" */
1249 YYSYMBOL_keyword_if = 11, /* "`if'" */
1250 YYSYMBOL_keyword_unless = 12, /* "`unless'" */
1251 YYSYMBOL_keyword_then = 13, /* "`then'" */
1252 YYSYMBOL_keyword_elsif = 14, /* "`elsif'" */
1253 YYSYMBOL_keyword_else = 15, /* "`else'" */
1254 YYSYMBOL_keyword_case = 16, /* "`case'" */
1255 YYSYMBOL_keyword_when = 17, /* "`when'" */
1256 YYSYMBOL_keyword_while = 18, /* "`while'" */
1257 YYSYMBOL_keyword_until = 19, /* "`until'" */
1258 YYSYMBOL_keyword_for = 20, /* "`for'" */
1259 YYSYMBOL_keyword_break = 21, /* "`break'" */
1260 YYSYMBOL_keyword_next = 22, /* "`next'" */
1261 YYSYMBOL_keyword_redo = 23, /* "`redo'" */
1262 YYSYMBOL_keyword_retry = 24, /* "`retry'" */
1263 YYSYMBOL_keyword_in = 25, /* "`in'" */
1264 YYSYMBOL_keyword_do = 26, /* "`do'" */
1265 YYSYMBOL_keyword_do_cond = 27, /* "`do' for condition" */
1266 YYSYMBOL_keyword_do_block = 28, /* "`do' for block" */
1267 YYSYMBOL_keyword_do_LAMBDA = 29, /* "`do' for lambda" */
1268 YYSYMBOL_keyword_return = 30, /* "`return'" */
1269 YYSYMBOL_keyword_yield = 31, /* "`yield'" */
1270 YYSYMBOL_keyword_super = 32, /* "`super'" */
1271 YYSYMBOL_keyword_self = 33, /* "`self'" */
1272 YYSYMBOL_keyword_nil = 34, /* "`nil'" */
1273 YYSYMBOL_keyword_true = 35, /* "`true'" */
1274 YYSYMBOL_keyword_false = 36, /* "`false'" */
1275 YYSYMBOL_keyword_and = 37, /* "`and'" */
1276 YYSYMBOL_keyword_or = 38, /* "`or'" */
1277 YYSYMBOL_keyword_not = 39, /* "`not'" */
1278 YYSYMBOL_modifier_if = 40, /* "`if' modifier" */
1279 YYSYMBOL_modifier_unless = 41, /* "`unless' modifier" */
1280 YYSYMBOL_modifier_while = 42, /* "`while' modifier" */
1281 YYSYMBOL_modifier_until = 43, /* "`until' modifier" */
1282 YYSYMBOL_modifier_rescue = 44, /* "`rescue' modifier" */
1283 YYSYMBOL_keyword_alias = 45, /* "`alias'" */
1284 YYSYMBOL_keyword_defined = 46, /* "`defined?'" */
1285 YYSYMBOL_keyword_BEGIN = 47, /* "`BEGIN'" */
1286 YYSYMBOL_keyword_END = 48, /* "`END'" */
1287 YYSYMBOL_keyword__LINE__ = 49, /* "`__LINE__'" */
1288 YYSYMBOL_keyword__FILE__ = 50, /* "`__FILE__'" */
1289 YYSYMBOL_keyword__ENCODING__ = 51, /* "`__ENCODING__'" */
1290 YYSYMBOL_tIDENTIFIER = 52, /* "local variable or method" */
1291 YYSYMBOL_tFID = 53, /* "method" */
1292 YYSYMBOL_tGVAR = 54, /* "global variable" */
1293 YYSYMBOL_tIVAR = 55, /* "instance variable" */
1294 YYSYMBOL_tCONSTANT = 56, /* "constant" */
1295 YYSYMBOL_tCVAR = 57, /* "class variable" */
1296 YYSYMBOL_tLABEL = 58, /* tLABEL */
1297 YYSYMBOL_tINTEGER = 59, /* "integer literal" */
1298 YYSYMBOL_tFLOAT = 60, /* "float literal" */
1299 YYSYMBOL_tRATIONAL = 61, /* "rational literal" */
1300 YYSYMBOL_tIMAGINARY = 62, /* "imaginary literal" */
1301 YYSYMBOL_tCHAR = 63, /* "char literal" */
1302 YYSYMBOL_tNTH_REF = 64, /* "numbered reference" */
1303 YYSYMBOL_tBACK_REF = 65, /* "back reference" */
1304 YYSYMBOL_tSTRING_CONTENT = 66, /* "literal content" */
1305 YYSYMBOL_tREGEXP_END = 67, /* tREGEXP_END */
1306 YYSYMBOL_68_ = 68, /* '.' */
1307 YYSYMBOL_69_backslash_ = 69, /* "backslash" */
1308 YYSYMBOL_tSP = 70, /* "escaped space" */
1309 YYSYMBOL_71_escaped_horizontal_tab_ = 71, /* "escaped horizontal tab" */
1310 YYSYMBOL_72_escaped_form_feed_ = 72, /* "escaped form feed" */
1311 YYSYMBOL_73_escaped_carriage_return_ = 73, /* "escaped carriage return" */
1312 YYSYMBOL_74_escaped_vertical_tab_ = 74, /* "escaped vertical tab" */
1313 YYSYMBOL_tUPLUS = 75, /* "unary+" */
1314 YYSYMBOL_tUMINUS = 76, /* "unary-" */
1315 YYSYMBOL_tPOW = 77, /* "**" */
1316 YYSYMBOL_tCMP = 78, /* "<=>" */
1317 YYSYMBOL_tEQ = 79, /* "==" */
1318 YYSYMBOL_tEQQ = 80, /* "===" */
1319 YYSYMBOL_tNEQ = 81, /* "!=" */
1320 YYSYMBOL_tGEQ = 82, /* ">=" */
1321 YYSYMBOL_tLEQ = 83, /* "<=" */
1322 YYSYMBOL_tANDOP = 84, /* "&&" */
1323 YYSYMBOL_tOROP = 85, /* "||" */
1324 YYSYMBOL_tMATCH = 86, /* "=~" */
1325 YYSYMBOL_tNMATCH = 87, /* "!~" */
1326 YYSYMBOL_tDOT2 = 88, /* ".." */
1327 YYSYMBOL_tDOT3 = 89, /* "..." */
1328 YYSYMBOL_tBDOT2 = 90, /* "(.." */
1329 YYSYMBOL_tBDOT3 = 91, /* "(..." */
1330 YYSYMBOL_tAREF = 92, /* "[]" */
1331 YYSYMBOL_tASET = 93, /* "[]=" */
1332 YYSYMBOL_tLSHFT = 94, /* "<<" */
1333 YYSYMBOL_tRSHFT = 95, /* ">>" */
1334 YYSYMBOL_tANDDOT = 96, /* "&." */
1335 YYSYMBOL_tCOLON2 = 97, /* "::" */
1336 YYSYMBOL_tCOLON3 = 98, /* ":: at EXPR_BEG" */
1337 YYSYMBOL_tOP_ASGN = 99, /* "operator-assignment" */
1338 YYSYMBOL_tASSOC = 100, /* "=>" */
1339 YYSYMBOL_tLPAREN = 101, /* "(" */
1340 YYSYMBOL_tLPAREN_ARG = 102, /* "( arg" */
1341 YYSYMBOL_tRPAREN = 103, /* ")" */
1342 YYSYMBOL_tLBRACK = 104, /* "[" */
1343 YYSYMBOL_tLBRACE = 105, /* "{" */
1344 YYSYMBOL_tLBRACE_ARG = 106, /* "{ arg" */
1345 YYSYMBOL_tSTAR = 107, /* "*" */
1346 YYSYMBOL_tDSTAR = 108, /* "**arg" */
1347 YYSYMBOL_tAMPER = 109, /* "&" */
1348 YYSYMBOL_tLAMBDA = 110, /* "->" */
1349 YYSYMBOL_tSYMBEG = 111, /* "symbol literal" */
1350 YYSYMBOL_tSTRING_BEG = 112, /* "string literal" */
1351 YYSYMBOL_tXSTRING_BEG = 113, /* "backtick literal" */
1352 YYSYMBOL_tREGEXP_BEG = 114, /* "regexp literal" */
1353 YYSYMBOL_tWORDS_BEG = 115, /* "word list" */
1354 YYSYMBOL_tQWORDS_BEG = 116, /* "verbatim word list" */
1355 YYSYMBOL_tSYMBOLS_BEG = 117, /* "symbol list" */
1356 YYSYMBOL_tQSYMBOLS_BEG = 118, /* "verbatim symbol list" */
1357 YYSYMBOL_tSTRING_END = 119, /* "terminator" */
1358 YYSYMBOL_tSTRING_DEND = 120, /* "'}'" */
1359 YYSYMBOL_tSTRING_DBEG = 121, /* tSTRING_DBEG */
1360 YYSYMBOL_tSTRING_DVAR = 122, /* tSTRING_DVAR */
1361 YYSYMBOL_tLAMBEG = 123, /* tLAMBEG */
1362 YYSYMBOL_tLABEL_END = 124, /* tLABEL_END */
1363 YYSYMBOL_tLOWEST = 125, /* tLOWEST */
1364 YYSYMBOL_126_ = 126, /* '=' */
1365 YYSYMBOL_127_ = 127, /* '?' */
1366 YYSYMBOL_128_ = 128, /* ':' */
1367 YYSYMBOL_129_ = 129, /* '>' */
1368 YYSYMBOL_130_ = 130, /* '<' */
1369 YYSYMBOL_131_ = 131, /* '|' */
1370 YYSYMBOL_132_ = 132, /* '^' */
1371 YYSYMBOL_133_ = 133, /* '&' */
1372 YYSYMBOL_134_ = 134, /* '+' */
1373 YYSYMBOL_135_ = 135, /* '-' */
1374 YYSYMBOL_136_ = 136, /* '*' */
1375 YYSYMBOL_137_ = 137, /* '/' */
1376 YYSYMBOL_138_ = 138, /* '%' */
1377 YYSYMBOL_tUMINUS_NUM = 139, /* tUMINUS_NUM */
1378 YYSYMBOL_140_ = 140, /* '!' */
1379 YYSYMBOL_141_ = 141, /* '~' */
1380 YYSYMBOL_tLAST_TOKEN = 142, /* tLAST_TOKEN */
1381 YYSYMBOL_143_ = 143, /* '{' */
1382 YYSYMBOL_144_ = 144, /* '}' */
1383 YYSYMBOL_145_ = 145, /* '[' */
1384 YYSYMBOL_146_ = 146, /* ',' */
1385 YYSYMBOL_147_ = 147, /* '`' */
1386 YYSYMBOL_148_ = 148, /* '(' */
1387 YYSYMBOL_149_ = 149, /* ')' */
1388 YYSYMBOL_150_ = 150, /* ']' */
1389 YYSYMBOL_151_ = 151, /* ';' */
1390 YYSYMBOL_152_ = 152, /* ' ' */
1391 YYSYMBOL_153_n_ = 153, /* '\n' */
1392 YYSYMBOL_YYACCEPT = 154, /* $accept */
1393 YYSYMBOL_program = 155, /* program */
1394 YYSYMBOL_156_1 = 156, /* $@1 */
1395 YYSYMBOL_top_compstmt = 157, /* top_compstmt */
1396 YYSYMBOL_top_stmts = 158, /* top_stmts */
1397 YYSYMBOL_top_stmt = 159, /* top_stmt */
1398 YYSYMBOL_begin_block = 160, /* begin_block */
1399 YYSYMBOL_bodystmt = 161, /* bodystmt */
1400 YYSYMBOL_162_2 = 162, /* $@2 */
1401 YYSYMBOL_compstmt = 163, /* compstmt */
1402 YYSYMBOL_stmts = 164, /* stmts */
1403 YYSYMBOL_stmt_or_begin = 165, /* stmt_or_begin */
1404 YYSYMBOL_166_3 = 166, /* $@3 */
1405 YYSYMBOL_stmt = 167, /* stmt */
1406 YYSYMBOL_168_4 = 168, /* $@4 */
1407 YYSYMBOL_command_asgn = 169, /* command_asgn */
1408 YYSYMBOL_command_rhs = 170, /* command_rhs */
1409 YYSYMBOL_expr = 171, /* expr */
1410 YYSYMBOL_172_5 = 172, /* @5 */
1411 YYSYMBOL_173_6 = 173, /* @6 */
1412 YYSYMBOL_174_7 = 174, /* $@7 */
1413 YYSYMBOL_expr_value = 175, /* expr_value */
1414 YYSYMBOL_expr_value_do = 176, /* expr_value_do */
1415 YYSYMBOL_177_8 = 177, /* $@8 */
1416 YYSYMBOL_178_9 = 178, /* $@9 */
1417 YYSYMBOL_command_call = 179, /* command_call */
1418 YYSYMBOL_block_command = 180, /* block_command */
1419 YYSYMBOL_cmd_brace_block = 181, /* cmd_brace_block */
1420 YYSYMBOL_fcall = 182, /* fcall */
1421 YYSYMBOL_command = 183, /* command */
1422 YYSYMBOL_mlhs = 184, /* mlhs */
1423 YYSYMBOL_mlhs_inner = 185, /* mlhs_inner */
1424 YYSYMBOL_mlhs_basic = 186, /* mlhs_basic */
1425 YYSYMBOL_mlhs_item = 187, /* mlhs_item */
1426 YYSYMBOL_mlhs_head = 188, /* mlhs_head */
1427 YYSYMBOL_mlhs_post = 189, /* mlhs_post */
1428 YYSYMBOL_mlhs_node = 190, /* mlhs_node */
1429 YYSYMBOL_lhs = 191, /* lhs */
1430 YYSYMBOL_cname = 192, /* cname */
1431 YYSYMBOL_cpath = 193, /* cpath */
1432 YYSYMBOL_fname = 194, /* fname */
1433 YYSYMBOL_fitem = 195, /* fitem */
1434 YYSYMBOL_undef_list = 196, /* undef_list */
1435 YYSYMBOL_197_10 = 197, /* $@10 */
1436 YYSYMBOL_op = 198, /* op */
1437 YYSYMBOL_reswords = 199, /* reswords */
1438 YYSYMBOL_arg = 200, /* arg */
1439 YYSYMBOL_201_11 = 201, /* $@11 */
1440 YYSYMBOL_relop = 202, /* relop */
1441 YYSYMBOL_rel_expr = 203, /* rel_expr */
1442 YYSYMBOL_arg_value = 204, /* arg_value */
1443 YYSYMBOL_aref_args = 205, /* aref_args */
1444 YYSYMBOL_arg_rhs = 206, /* arg_rhs */
1445 YYSYMBOL_paren_args = 207, /* paren_args */
1446 YYSYMBOL_opt_paren_args = 208, /* opt_paren_args */
1447 YYSYMBOL_opt_call_args = 209, /* opt_call_args */
1448 YYSYMBOL_call_args = 210, /* call_args */
1449 YYSYMBOL_command_args = 211, /* command_args */
1450 YYSYMBOL_212_12 = 212, /* $@12 */
1451 YYSYMBOL_block_arg = 213, /* block_arg */
1452 YYSYMBOL_opt_block_arg = 214, /* opt_block_arg */
1453 YYSYMBOL_args = 215, /* args */
1454 YYSYMBOL_mrhs_arg = 216, /* mrhs_arg */
1455 YYSYMBOL_mrhs = 217, /* mrhs */
1456 YYSYMBOL_primary = 218, /* primary */
1457 YYSYMBOL_219_13 = 219, /* $@13 */
1458 YYSYMBOL_220_14 = 220, /* $@14 */
1459 YYSYMBOL_221_15 = 221, /* $@15 */
1460 YYSYMBOL_222_16 = 222, /* $@16 */
1461 YYSYMBOL_223_17 = 223, /* $@17 */
1462 YYSYMBOL_224_18 = 224, /* @18 */
1463 YYSYMBOL_225_19 = 225, /* @19 */
1464 YYSYMBOL_226_20 = 226, /* $@20 */
1465 YYSYMBOL_227_21 = 227, /* @21 */
1466 YYSYMBOL_228_22 = 228, /* $@22 */
1467 YYSYMBOL_229_23 = 229, /* @23 */
1468 YYSYMBOL_230_24 = 230, /* @24 */
1469 YYSYMBOL_231_25 = 231, /* @25 */
1470 YYSYMBOL_232_26 = 232, /* @26 */
1471 YYSYMBOL_primary_value = 233, /* primary_value */
1472 YYSYMBOL_k_begin = 234, /* k_begin */
1473 YYSYMBOL_k_if = 235, /* k_if */
1474 YYSYMBOL_k_unless = 236, /* k_unless */
1475 YYSYMBOL_k_while = 237, /* k_while */
1476 YYSYMBOL_k_until = 238, /* k_until */
1477 YYSYMBOL_k_case = 239, /* k_case */
1478 YYSYMBOL_k_for = 240, /* k_for */
1479 YYSYMBOL_k_class = 241, /* k_class */
1480 YYSYMBOL_k_module = 242, /* k_module */
1481 YYSYMBOL_k_def = 243, /* k_def */
1482 YYSYMBOL_k_do = 244, /* k_do */
1483 YYSYMBOL_k_do_block = 245, /* k_do_block */
1484 YYSYMBOL_k_rescue = 246, /* k_rescue */
1485 YYSYMBOL_k_ensure = 247, /* k_ensure */
1486 YYSYMBOL_k_when = 248, /* k_when */
1487 YYSYMBOL_k_else = 249, /* k_else */
1488 YYSYMBOL_k_elsif = 250, /* k_elsif */
1489 YYSYMBOL_k_end = 251, /* k_end */
1490 YYSYMBOL_k_return = 252, /* k_return */
1491 YYSYMBOL_then = 253, /* then */
1492 YYSYMBOL_do = 254, /* do */
1493 YYSYMBOL_if_tail = 255, /* if_tail */
1494 YYSYMBOL_opt_else = 256, /* opt_else */
1495 YYSYMBOL_for_var = 257, /* for_var */
1496 YYSYMBOL_f_marg = 258, /* f_marg */
1497 YYSYMBOL_f_marg_list = 259, /* f_marg_list */
1498 YYSYMBOL_f_margs = 260, /* f_margs */
1499 YYSYMBOL_f_rest_marg = 261, /* f_rest_marg */
1500 YYSYMBOL_block_args_tail = 262, /* block_args_tail */
1501 YYSYMBOL_opt_block_args_tail = 263, /* opt_block_args_tail */
1502 YYSYMBOL_block_param = 264, /* block_param */
1503 YYSYMBOL_opt_block_param = 265, /* opt_block_param */
1504 YYSYMBOL_block_param_def = 266, /* block_param_def */
1505 YYSYMBOL_opt_bv_decl = 267, /* opt_bv_decl */
1506 YYSYMBOL_bv_decls = 268, /* bv_decls */
1507 YYSYMBOL_bvar = 269, /* bvar */
1508 YYSYMBOL_lambda = 270, /* lambda */
1509 YYSYMBOL_271_27 = 271, /* @27 */
1510 YYSYMBOL_272_28 = 272, /* @28 */
1511 YYSYMBOL_273_29 = 273, /* @29 */
1512 YYSYMBOL_274_30 = 274, /* @30 */
1513 YYSYMBOL_275_31 = 275, /* $@31 */
1514 YYSYMBOL_f_larglist = 276, /* f_larglist */
1515 YYSYMBOL_lambda_body = 277, /* lambda_body */
1516 YYSYMBOL_do_block = 278, /* do_block */
1517 YYSYMBOL_block_call = 279, /* block_call */
1518 YYSYMBOL_method_call = 280, /* method_call */
1519 YYSYMBOL_brace_block = 281, /* brace_block */
1520 YYSYMBOL_brace_body = 282, /* brace_body */
1521 YYSYMBOL_283_32 = 283, /* @32 */
1522 YYSYMBOL_284_33 = 284, /* @33 */
1523 YYSYMBOL_285_34 = 285, /* @34 */
1524 YYSYMBOL_do_body = 286, /* do_body */
1525 YYSYMBOL_287_35 = 287, /* @35 */
1526 YYSYMBOL_288_36 = 288, /* @36 */
1527 YYSYMBOL_289_37 = 289, /* @37 */
1528 YYSYMBOL_case_args = 290, /* case_args */
1529 YYSYMBOL_case_body = 291, /* case_body */
1530 YYSYMBOL_cases = 292, /* cases */
1531 YYSYMBOL_p_case_body = 293, /* p_case_body */
1532 YYSYMBOL_294_38 = 294, /* @38 */
1533 YYSYMBOL_295_39 = 295, /* @39 */
1534 YYSYMBOL_296_40 = 296, /* @40 */
1535 YYSYMBOL_297_41 = 297, /* $@41 */
1536 YYSYMBOL_298_42 = 298, /* $@42 */
1537 YYSYMBOL_299_43 = 299, /* $@43 */
1538 YYSYMBOL_p_cases = 300, /* p_cases */
1539 YYSYMBOL_p_top_expr = 301, /* p_top_expr */
1540 YYSYMBOL_p_top_expr_body = 302, /* p_top_expr_body */
1541 YYSYMBOL_p_expr = 303, /* p_expr */
1542 YYSYMBOL_p_as = 304, /* p_as */
1543 YYSYMBOL_p_alt = 305, /* p_alt */
1544 YYSYMBOL_p_lparen = 306, /* p_lparen */
1545 YYSYMBOL_p_lbracket = 307, /* p_lbracket */
1546 YYSYMBOL_p_expr_basic = 308, /* p_expr_basic */
1547 YYSYMBOL_309_44 = 309, /* @44 */
1548 YYSYMBOL_310_45 = 310, /* @45 */
1549 YYSYMBOL_311_46 = 311, /* @46 */
1550 YYSYMBOL_p_args = 312, /* p_args */
1551 YYSYMBOL_p_args_head = 313, /* p_args_head */
1552 YYSYMBOL_p_args_tail = 314, /* p_args_tail */
1553 YYSYMBOL_p_args_post = 315, /* p_args_post */
1554 YYSYMBOL_p_arg = 316, /* p_arg */
1555 YYSYMBOL_p_kwargs = 317, /* p_kwargs */
1556 YYSYMBOL_p_kwarg = 318, /* p_kwarg */
1557 YYSYMBOL_p_kw = 319, /* p_kw */
1558 YYSYMBOL_p_kw_label = 320, /* p_kw_label */
1559 YYSYMBOL_p_kwrest = 321, /* p_kwrest */
1560 YYSYMBOL_p_kwnorest = 322, /* p_kwnorest */
1561 YYSYMBOL_p_value = 323, /* p_value */
1562 YYSYMBOL_p_primitive = 324, /* p_primitive */
1563 YYSYMBOL_325_47 = 325, /* $@47 */
1564 YYSYMBOL_p_variable = 326, /* p_variable */
1565 YYSYMBOL_p_var_ref = 327, /* p_var_ref */
1566 YYSYMBOL_p_const = 328, /* p_const */
1567 YYSYMBOL_opt_rescue = 329, /* opt_rescue */
1568 YYSYMBOL_exc_list = 330, /* exc_list */
1569 YYSYMBOL_exc_var = 331, /* exc_var */
1570 YYSYMBOL_opt_ensure = 332, /* opt_ensure */
1571 YYSYMBOL_literal = 333, /* literal */
1572 YYSYMBOL_strings = 334, /* strings */
1573 YYSYMBOL_string = 335, /* string */
1574 YYSYMBOL_string1 = 336, /* string1 */
1575 YYSYMBOL_xstring = 337, /* xstring */
1576 YYSYMBOL_regexp = 338, /* regexp */
1577 YYSYMBOL_words = 339, /* words */
1578 YYSYMBOL_word_list = 340, /* word_list */
1579 YYSYMBOL_word = 341, /* word */
1580 YYSYMBOL_symbols = 342, /* symbols */
1581 YYSYMBOL_symbol_list = 343, /* symbol_list */
1582 YYSYMBOL_qwords = 344, /* qwords */
1583 YYSYMBOL_qsymbols = 345, /* qsymbols */
1584 YYSYMBOL_qword_list = 346, /* qword_list */
1585 YYSYMBOL_qsym_list = 347, /* qsym_list */
1586 YYSYMBOL_string_contents = 348, /* string_contents */
1587 YYSYMBOL_xstring_contents = 349, /* xstring_contents */
1588 YYSYMBOL_regexp_contents = 350, /* regexp_contents */
1589 YYSYMBOL_string_content = 351, /* string_content */
1590 YYSYMBOL_352_48 = 352, /* @48 */
1591 YYSYMBOL_353_49 = 353, /* $@49 */
1592 YYSYMBOL_354_50 = 354, /* @50 */
1593 YYSYMBOL_355_51 = 355, /* @51 */
1594 YYSYMBOL_356_52 = 356, /* @52 */
1595 YYSYMBOL_357_53 = 357, /* @53 */
1596 YYSYMBOL_string_dvar = 358, /* string_dvar */
1597 YYSYMBOL_symbol = 359, /* symbol */
1598 YYSYMBOL_ssym = 360, /* ssym */
1599 YYSYMBOL_sym = 361, /* sym */
1600 YYSYMBOL_dsym = 362, /* dsym */
1601 YYSYMBOL_numeric = 363, /* numeric */
1602 YYSYMBOL_simple_numeric = 364, /* simple_numeric */
1603 YYSYMBOL_user_variable = 365, /* user_variable */
1604 YYSYMBOL_keyword_variable = 366, /* keyword_variable */
1605 YYSYMBOL_var_ref = 367, /* var_ref */
1606 YYSYMBOL_var_lhs = 368, /* var_lhs */
1607 YYSYMBOL_backref = 369, /* backref */
1608 YYSYMBOL_superclass = 370, /* superclass */
1609 YYSYMBOL_371_54 = 371, /* $@54 */
1610 YYSYMBOL_f_arglist = 372, /* f_arglist */
1611 YYSYMBOL_373_55 = 373, /* @55 */
1612 YYSYMBOL_args_tail = 374, /* args_tail */
1613 YYSYMBOL_opt_args_tail = 375, /* opt_args_tail */
1614 YYSYMBOL_f_args = 376, /* f_args */
1615 YYSYMBOL_args_forward = 377, /* args_forward */
1616 YYSYMBOL_f_bad_arg = 378, /* f_bad_arg */
1617 YYSYMBOL_f_norm_arg = 379, /* f_norm_arg */
1618 YYSYMBOL_f_arg_asgn = 380, /* f_arg_asgn */
1619 YYSYMBOL_f_arg_item = 381, /* f_arg_item */
1620 YYSYMBOL_f_arg = 382, /* f_arg */
1621 YYSYMBOL_f_label = 383, /* f_label */
1622 YYSYMBOL_f_kw = 384, /* f_kw */
1623 YYSYMBOL_f_block_kw = 385, /* f_block_kw */
1624 YYSYMBOL_f_block_kwarg = 386, /* f_block_kwarg */
1625 YYSYMBOL_f_kwarg = 387, /* f_kwarg */
1626 YYSYMBOL_kwrest_mark = 388, /* kwrest_mark */
1627 YYSYMBOL_f_no_kwarg = 389, /* f_no_kwarg */
1628 YYSYMBOL_f_kwrest = 390, /* f_kwrest */
1629 YYSYMBOL_f_opt = 391, /* f_opt */
1630 YYSYMBOL_f_block_opt = 392, /* f_block_opt */
1631 YYSYMBOL_f_block_optarg = 393, /* f_block_optarg */
1632 YYSYMBOL_f_optarg = 394, /* f_optarg */
1633 YYSYMBOL_restarg_mark = 395, /* restarg_mark */
1634 YYSYMBOL_f_rest_arg = 396, /* f_rest_arg */
1635 YYSYMBOL_blkarg_mark = 397, /* blkarg_mark */
1636 YYSYMBOL_f_block_arg = 398, /* f_block_arg */
1637 YYSYMBOL_opt_f_block_arg = 399, /* opt_f_block_arg */
1638 YYSYMBOL_singleton = 400, /* singleton */
1639 YYSYMBOL_401_56 = 401, /* $@56 */
1640 YYSYMBOL_assoc_list = 402, /* assoc_list */
1641 YYSYMBOL_assocs = 403, /* assocs */
1642 YYSYMBOL_assoc = 404, /* assoc */
1643 YYSYMBOL_operation = 405, /* operation */
1644 YYSYMBOL_operation2 = 406, /* operation2 */
1645 YYSYMBOL_operation3 = 407, /* operation3 */
1646 YYSYMBOL_dot_or_colon = 408, /* dot_or_colon */
1647 YYSYMBOL_call_op = 409, /* call_op */
1648 YYSYMBOL_call_op2 = 410, /* call_op2 */
1649 YYSYMBOL_opt_terms = 411, /* opt_terms */
1650 YYSYMBOL_opt_nl = 412, /* opt_nl */
1651 YYSYMBOL_rparen = 413, /* rparen */
1652 YYSYMBOL_rbracket = 414, /* rbracket */
1653 YYSYMBOL_rbrace = 415, /* rbrace */
1654 YYSYMBOL_trailer = 416, /* trailer */
1655 YYSYMBOL_term = 417, /* term */
1656 YYSYMBOL_terms = 418, /* terms */
1657 YYSYMBOL_none = 419 /* none */
1660
1661
1662
1663
1664#ifdef short
1665# undef short
1666#endif
1667
1668/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
1669 <limits.h> and (if available) <stdint.h> are included
1670 so that the code can choose integer types of a good width. */
1671
1672#ifndef __PTRDIFF_MAX__
1673# include <limits.h> /* INFRINGES ON USER NAME SPACE */
1674# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
1675# include <stdint.h> /* INFRINGES ON USER NAME SPACE */
1676# define YY_STDINT_H
1677# endif
1678#endif
1679
1680/* Narrow types that promote to a signed type and that can represent a
1681 signed or unsigned integer of at least N bits. In tables they can
1682 save space and decrease cache pressure. Promoting to a signed type
1683 helps avoid bugs in integer arithmetic. */
1684
1685#ifdef __INT_LEAST8_MAX__
1686typedef __INT_LEAST8_TYPE__ yytype_int8;
1687#elif defined YY_STDINT_H
1689#else
1690typedef signed char yytype_int8;
1691#endif
1692
1693#ifdef __INT_LEAST16_MAX__
1694typedef __INT_LEAST16_TYPE__ yytype_int16;
1695#elif defined YY_STDINT_H
1697#else
1698typedef short yytype_int16;
1699#endif
1700
1701/* Work around bug in HP-UX 11.23, which defines these macros
1702 incorrectly for preprocessor constants. This workaround can likely
1703 be removed in 2023, as HPE has promised support for HP-UX 11.23
1704 (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
1705 <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
1706#ifdef __hpux
1707# undef UINT_LEAST8_MAX
1708# undef UINT_LEAST16_MAX
1709# define UINT_LEAST8_MAX 255
1710# define UINT_LEAST16_MAX 65535
1711#endif
1712
1713#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
1714typedef __UINT_LEAST8_TYPE__ yytype_uint8;
1715#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
1716 && UINT_LEAST8_MAX <= INT_MAX)
1718#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
1719typedef unsigned char yytype_uint8;
1720#else
1721typedef short yytype_uint8;
1722#endif
1723
1724#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
1725typedef __UINT_LEAST16_TYPE__ yytype_uint16;
1726#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
1727 && UINT_LEAST16_MAX <= INT_MAX)
1729#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
1730typedef unsigned short yytype_uint16;
1731#else
1732typedef int yytype_uint16;
1733#endif
1734
1735#ifndef YYPTRDIFF_T
1736# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
1737# define YYPTRDIFF_T __PTRDIFF_TYPE__
1738# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
1739# elif defined PTRDIFF_MAX
1740# ifndef ptrdiff_t
1741# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1742# endif
1743# define YYPTRDIFF_T ptrdiff_t
1744# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
1745# else
1746# define YYPTRDIFF_T long
1747# define YYPTRDIFF_MAXIMUM LONG_MAX
1748# endif
1749#endif
1750
1751#ifndef YYSIZE_T
1752# ifdef __SIZE_TYPE__
1753# define YYSIZE_T __SIZE_TYPE__
1754# elif defined size_t
1755# define YYSIZE_T size_t
1756# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
1757# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1758# define YYSIZE_T size_t
1759# else
1760# define YYSIZE_T unsigned
1761# endif
1762#endif
1763
1764#define YYSIZE_MAXIMUM \
1765 YY_CAST (YYPTRDIFF_T, \
1766 (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
1767 ? YYPTRDIFF_MAXIMUM \
1768 : YY_CAST (YYSIZE_T, -1)))
1769
1770#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
1771
1772
1773/* Stored state numbers (used for stacks). */
1775
1776/* State numbers in computations. */
1778
1779#ifndef YY_
1780# if defined YYENABLE_NLS && YYENABLE_NLS
1781# if ENABLE_NLS
1782# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1783# define YY_(Msgid) dgettext ("bison-runtime", Msgid)
1784# endif
1785# endif
1786# ifndef YY_
1787# define YY_(Msgid) Msgid
1788# endif
1789#endif
1790
1791
1792#ifndef YY_ATTRIBUTE_PURE
1793# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
1794# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
1795# else
1796# define YY_ATTRIBUTE_PURE
1797# endif
1798#endif
1799
1800#ifndef YY_ATTRIBUTE_UNUSED
1801# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
1802# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
1803# else
1804# define YY_ATTRIBUTE_UNUSED
1805# endif
1806#endif
1807
1808/* Suppress unused-variable warnings by "using" E. */
1809#if ! defined lint || defined __GNUC__
1810# define YY_USE(E) ((void) (E))
1811#else
1812# define YY_USE(E) /* empty */
1813#endif
1814
1815/* Suppress an incorrect diagnostic about yylval being uninitialized. */
1816#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
1817# if __GNUC__ * 100 + __GNUC_MINOR__ < 407
1818# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
1819 _Pragma ("GCC diagnostic push") \
1820 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
1821# else
1822# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
1823 _Pragma ("GCC diagnostic push") \
1824 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
1825 _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
1826# endif
1827# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
1828 _Pragma ("GCC diagnostic pop")
1829#else
1830# define YY_INITIAL_VALUE(Value) Value
1831#endif
1832#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1833# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1834# define YY_IGNORE_MAYBE_UNINITIALIZED_END
1835#endif
1836#ifndef YY_INITIAL_VALUE
1837# define YY_INITIAL_VALUE(Value) /* Nothing. */
1838#endif
1839
1840#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
1841# define YY_IGNORE_USELESS_CAST_BEGIN \
1842 _Pragma ("GCC diagnostic push") \
1843 _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
1844# define YY_IGNORE_USELESS_CAST_END \
1845 _Pragma ("GCC diagnostic pop")
1846#endif
1847#ifndef YY_IGNORE_USELESS_CAST_BEGIN
1848# define YY_IGNORE_USELESS_CAST_BEGIN
1849# define YY_IGNORE_USELESS_CAST_END
1850#endif
1851
1852
1853#define YY_ASSERT(E) ((void) (0 && (E)))
1854
1855#if 1
1856
1857/* The parser invokes alloca or malloc; define the necessary symbols. */
1858
1859# ifdef YYSTACK_USE_ALLOCA
1860# if YYSTACK_USE_ALLOCA
1861# ifdef __GNUC__
1862# define YYSTACK_ALLOC __builtin_alloca
1863# elif defined __BUILTIN_VA_ARG_INCR
1864# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
1865# elif defined _AIX
1866# define YYSTACK_ALLOC __alloca
1867# elif defined _MSC_VER
1868# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
1869# define alloca _alloca
1870# else
1871# define YYSTACK_ALLOC alloca
1872# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
1873# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1874 /* Use EXIT_SUCCESS as a witness for stdlib.h. */
1875# ifndef EXIT_SUCCESS
1876# define EXIT_SUCCESS 0
1877# endif
1878# endif
1879# endif
1880# endif
1881# endif
1882
1883# ifdef YYSTACK_ALLOC
1884 /* Pacify GCC's 'empty if-body' warning. */
1885# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
1886# ifndef YYSTACK_ALLOC_MAXIMUM
1887 /* The OS might guarantee only one guard page at the bottom of the stack,
1888 and a page size can be as small as 4096 bytes. So we cannot safely
1889 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1890 to allow for a few compiler-allocated temporary stack slots. */
1891# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
1892# endif
1893# else
1894# define YYSTACK_ALLOC YYMALLOC
1895# define YYSTACK_FREE YYFREE
1896# ifndef YYSTACK_ALLOC_MAXIMUM
1897# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
1898# endif
1899# if (defined __cplusplus && ! defined EXIT_SUCCESS \
1900 && ! ((defined YYMALLOC || defined malloc) \
1901 && (defined YYFREE || defined free)))
1902# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1903# ifndef EXIT_SUCCESS
1904# define EXIT_SUCCESS 0
1905# endif
1906# endif
1907# ifndef YYMALLOC
1908# define YYMALLOC malloc
1909# if ! defined malloc && ! defined EXIT_SUCCESS
1910void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1911# endif
1912# endif
1913# ifndef YYFREE
1914# define YYFREE free
1915# if ! defined free && ! defined EXIT_SUCCESS
1916void free (void *); /* INFRINGES ON USER NAME SPACE */
1917# endif
1918# endif
1919# endif
1920#endif /* 1 */
1921
1922#if (! defined yyoverflow \
1923 && (! defined __cplusplus \
1924 || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
1925 && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
1926
1927/* A type that is properly aligned for any stack member. */
1929{
1933};
1934
1935/* The size of the maximum gap between one aligned stack and the next. */
1936# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
1937
1938/* The size of an array large to enough to hold all stacks, each with
1939 N elements. */
1940# define YYSTACK_BYTES(N) \
1941 ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE) \
1942 + YYSIZEOF (YYLTYPE)) \
1943 + 2 * YYSTACK_GAP_MAXIMUM)
1944
1945# define YYCOPY_NEEDED 1
1946
1947/* Relocate STACK from its old location to the new one. The
1948 local variables YYSIZE and YYSTACKSIZE give the old and new number of
1949 elements in the stack, and YYPTR gives the new location of the
1950 stack. Advance YYPTR to a properly aligned location for the next
1951 stack. */
1952# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
1953 do \
1954 { \
1955 YYPTRDIFF_T yynewbytes; \
1956 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
1957 Stack = &yyptr->Stack_alloc; \
1958 yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
1959 yyptr += yynewbytes / YYSIZEOF (*yyptr); \
1960 } \
1961 while (0)
1962
1963#endif
1964
1965#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
1966/* Copy COUNT objects from SRC to DST. The source and destination do
1967 not overlap. */
1968# ifndef YYCOPY
1969# if defined __GNUC__ && 1 < __GNUC__
1970# define YYCOPY(Dst, Src, Count) \
1971 __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
1972# else
1973# define YYCOPY(Dst, Src, Count) \
1974 do \
1975 { \
1976 YYPTRDIFF_T yyi; \
1977 for (yyi = 0; yyi < (Count); yyi++) \
1978 (Dst)[yyi] = (Src)[yyi]; \
1979 } \
1980 while (0)
1981# endif
1982# endif
1983#endif /* !YYCOPY_NEEDED */
1984
1985/* YYFINAL -- State number of the termination state. */
1986#define YYFINAL 3
1987/* YYLAST -- Last index in YYTABLE. */
1988#define YYLAST 13883
1989
1990/* YYNTOKENS -- Number of terminals. */
1991#define YYNTOKENS 154
1992/* YYNNTS -- Number of nonterminals. */
1993#define YYNNTS 266
1994/* YYNRULES -- Number of rules. */
1995#define YYNRULES 761
1996/* YYNSTATES -- Number of states. */
1997#define YYNSTATES 1251
1998
1999/* YYMAXUTOK -- Last valid token kind. */
2000#define YYMAXUTOK 353
2001
2002
2003/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
2004 as returned by yylex, with out-of-bounds checking. */
2005#define YYTRANSLATE(YYX) \
2006 (0 <= (YYX) && (YYX) <= YYMAXUTOK \
2007 ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \
2008 : YYSYMBOL_YYUNDEF)
2009
2010/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
2011 as returned by yylex. */
2012static const yytype_uint8 yytranslate[] =
2013{
2014 0, 2, 2, 2, 2, 2, 2, 2, 2, 71,
2015 153, 74, 72, 73, 2, 2, 2, 2, 2, 2,
2016 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2017 2, 2, 152, 140, 2, 2, 2, 138, 133, 2,
2018 148, 149, 136, 134, 146, 135, 68, 137, 2, 2,
2019 2, 2, 2, 2, 2, 2, 2, 2, 128, 151,
2020 130, 126, 129, 127, 2, 2, 2, 2, 2, 2,
2021 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2022 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2023 2, 145, 69, 150, 132, 2, 147, 2, 2, 2,
2024 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2025 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2026 2, 2, 2, 143, 131, 144, 141, 2, 88, 89,
2027 90, 91, 75, 76, 77, 78, 94, 95, 83, 82,
2028 79, 80, 81, 86, 87, 92, 93, 97, 84, 85,
2029 96, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2030 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2031 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2032 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2033 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2034 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2035 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2036 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2037 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2038 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2039 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
2040 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
2041 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
2042 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
2043 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
2044 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
2045 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
2046 65, 66, 67, 70, 98, 99, 100, 101, 102, 103,
2047 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
2048 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
2049 124, 125, 139, 142
2050};
2051
2052#if YYDEBUG
2053/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
2054static const yytype_int16 yyrline[] =
2055{
2056 0, 1204, 1204, 1204, 1230, 1236, 1243, 1250, 1257, 1263,
2057 1264, 1270, 1283, 1281, 1292, 1303, 1309, 1316, 1323, 1330,
2058 1336, 1341, 1340, 1350, 1350, 1357, 1364, 1374, 1382, 1389,
2059 1397, 1405, 1417, 1429, 1439, 1453, 1454, 1462, 1470, 1479,
2060 1486, 1489, 1496, 1503, 1511, 1518, 1525, 1533, 1540, 1550,
2061 1555, 1564, 1567, 1568, 1572, 1576, 1580, 1585, 1592, 1594,
2062 1584, 1602, 1605, 1612, 1612, 1612, 1618, 1619, 1622, 1623,
2063 1632, 1642, 1652, 1661, 1672, 1679, 1686, 1693, 1700, 1708,
2064 1716, 1723, 1730, 1739, 1740, 1749, 1750, 1759, 1766, 1773,
2065 1780, 1787, 1794, 1801, 1808, 1815, 1822, 1831, 1832, 1841,
2066 1848, 1857, 1864, 1873, 1880, 1887, 1894, 1904, 1911, 1921,
2067 1928, 1935, 1945, 1952, 1959, 1966, 1973, 1980, 1987, 1994,
2068 2001, 2011, 2018, 2021, 2028, 2035, 2044, 2045, 2046, 2047,
2069 2052, 2055, 2062, 2065, 2072, 2072, 2082, 2083, 2084, 2085,
2070 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095,
2071 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105,
2072 2106, 2107, 2108, 2109, 2110, 2111, 2114, 2114, 2114, 2115,
2073 2115, 2116, 2116, 2116, 2117, 2117, 2117, 2117, 2118, 2118,
2074 2118, 2118, 2119, 2119, 2119, 2120, 2120, 2120, 2120, 2121,
2075 2121, 2121, 2121, 2122, 2122, 2122, 2122, 2123, 2123, 2123,
2076 2123, 2124, 2124, 2124, 2124, 2125, 2125, 2128, 2135, 2142,
2077 2150, 2158, 2166, 2174, 2182, 2189, 2197, 2206, 2215, 2227,
2078 2239, 2251, 2263, 2267, 2271, 2275, 2279, 2283, 2287, 2291,
2079 2295, 2299, 2303, 2307, 2311, 2315, 2316, 2320, 2324, 2328,
2080 2332, 2336, 2340, 2344, 2348, 2352, 2356, 2360, 2360, 2365,
2081 2374, 2380, 2381, 2382, 2383, 2386, 2390, 2397, 2404, 2405,
2082 2409, 2416, 2425, 2430, 2441, 2448, 2474, 2503, 2504, 2507,
2083 2508, 2509, 2513, 2520, 2529, 2537, 2544, 2552, 2560, 2564,
2084 2564, 2601, 2610, 2614, 2620, 2627, 2634, 2641, 2650, 2651,
2085 2654, 2661, 2668, 2677, 2678, 2679, 2680, 2681, 2682, 2683,
2086 2684, 2685, 2686, 2687, 2695, 2694, 2709, 2709, 2716, 2716,
2087 2724, 2732, 2739, 2746, 2753, 2761, 2768, 2775, 2782, 2789,
2088 2789, 2794, 2798, 2802, 2809, 2810, 2819, 2818, 2829, 2840,
2089 2851, 2861, 2872, 2871, 2888, 2887, 2902, 2911, 2956, 2955,
2090 2979, 2978, 3001, 3000, 3024, 3030, 3023, 3050, 3051, 3050,
2091 3076, 3083, 3090, 3097, 3106, 3113, 3119, 3136, 3142, 3148,
2092 3154, 3160, 3166, 3172, 3178, 3184, 3190, 3196, 3202, 3208,
2093 3214, 3229, 3236, 3242, 3249, 3250, 3251, 3254, 3255, 3258,
2094 3259, 3271, 3272, 3281, 3282, 3285, 3293, 3302, 3309, 3318,
2095 3325, 3332, 3339, 3346, 3355, 3363, 3372, 3376, 3380, 3384,
2096 3388, 3394, 3399, 3404, 3408, 3412, 3416, 3420, 3424, 3432,
2097 3436, 3440, 3444, 3448, 3452, 3456, 3460, 3464, 3470, 3471,
2098 3477, 3486, 3498, 3502, 3511, 3513, 3517, 3522, 3528, 3531,
2099 3535, 3539, 3543, 3528, 3567, 3575, 3585, 3590, 3596, 3606,
2100 3620, 3627, 3634, 3643, 3652, 3660, 3668, 3675, 3683, 3691,
2101 3698, 3705, 3718, 3726, 3736, 3737, 3741, 3736, 3758, 3759,
2102 3763, 3758, 3782, 3790, 3797, 3805, 3814, 3826, 3827, 3831,
2103 3837, 3838, 3840, 3841, 3842, 3830, 3855, 3856, 3859, 3860,
2104 3868, 3878, 3879, 3884, 3892, 3896, 3902, 3905, 3914, 3917,
2105 3924, 3927, 3928, 3930, 3931, 3940, 3949, 3954, 3963, 3972,
2106 3977, 3977, 3982, 3988, 3987, 3999, 4004, 4004, 4011, 4020,
2107 4024, 4033, 4037, 4041, 4045, 4049, 4052, 4056, 4065, 4069,
2108 4073, 4077, 4083, 4084, 4093, 4102, 4106, 4110, 4114, 4118,
2109 4122, 4128, 4130, 4139, 4147, 4161, 4162, 4185, 4189, 4195,
2110 4201, 4202, 4211, 4220, 4232, 4244, 4245, 4246, 4247, 4259,
2111 4273, 4274, 4275, 4276, 4277, 4278, 4279, 4280, 4281, 4289,
2112 4288, 4301, 4311, 4324, 4331, 4338, 4347, 4359, 4362, 4369,
2113 4376, 4379, 4383, 4386, 4393, 4396, 4397, 4400, 4417, 4418,
2114 4419, 4428, 4438, 4447, 4453, 4463, 4469, 4478, 4480, 4489,
2115 4499, 4505, 4514, 4523, 4533, 4539, 4549, 4555, 4565, 4575,
2116 4594, 4600, 4610, 4620, 4661, 4664, 4663, 4680, 4684, 4689,
2117 4693, 4697, 4679, 4718, 4725, 4732, 4739, 4742, 4743, 4746,
2118 4756, 4757, 4758, 4759, 4762, 4772, 4773, 4783, 4784, 4785,
2119 4786, 4789, 4790, 4791, 4792, 4793, 4796, 4797, 4798, 4799,
2120 4800, 4801, 4802, 4805, 4818, 4827, 4834, 4843, 4844, 4848,
2121 4847, 4857, 4865, 4874, 4889, 4904, 4904, 4918, 4922, 4926,
2122 4930, 4934, 4940, 4945, 4950, 4954, 4958, 4962, 4966, 4970,
2123 4974, 4978, 4982, 4986, 4990, 4994, 4998, 5002, 5007, 5013,
2124 5022, 5030, 5038, 5046, 5056, 5057, 5065, 5074, 5082, 5103,
2125 5105, 5118, 5128, 5136, 5146, 5153, 5162, 5169, 5179, 5186,
2126 5195, 5196, 5199, 5207, 5215, 5225, 5235, 5245, 5252, 5261,
2127 5268, 5277, 5278, 5281, 5289, 5299, 5300, 5303, 5313, 5317,
2128 5323, 5328, 5328, 5352, 5353, 5362, 5364, 5387, 5398, 5405,
2129 5413, 5432, 5433, 5434, 5437, 5438, 5439, 5440, 5443, 5444,
2130 5445, 5448, 5449, 5452, 5453, 5456, 5457, 5460, 5461, 5464,
2131 5465, 5468, 5471, 5474, 5477, 5478, 5479, 5482, 5483, 5486,
2132 5487, 5491
2133};
2134#endif
2135
2137#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
2138
2139#if 1
2140/* The user-facing name of the symbol whose (internal) number is
2141 YYSYMBOL. No bounds checking. */
2142static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
2143
2144/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
2145 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
2146static const char *const yytname[] =
2147{
2148 "\"end-of-input\"", "error", "\"invalid token\"", "\"`class'\"",
2149 "\"`module'\"", "\"`def'\"", "\"`undef'\"", "\"`begin'\"",
2150 "\"`rescue'\"", "\"`ensure'\"", "\"`end'\"", "\"`if'\"", "\"`unless'\"",
2151 "\"`then'\"", "\"`elsif'\"", "\"`else'\"", "\"`case'\"", "\"`when'\"",
2152 "\"`while'\"", "\"`until'\"", "\"`for'\"", "\"`break'\"", "\"`next'\"",
2153 "\"`redo'\"", "\"`retry'\"", "\"`in'\"", "\"`do'\"",
2154 "\"`do' for condition\"", "\"`do' for block\"", "\"`do' for lambda\"",
2155 "\"`return'\"", "\"`yield'\"", "\"`super'\"", "\"`self'\"", "\"`nil'\"",
2156 "\"`true'\"", "\"`false'\"", "\"`and'\"", "\"`or'\"", "\"`not'\"",
2157 "\"`if' modifier\"", "\"`unless' modifier\"", "\"`while' modifier\"",
2158 "\"`until' modifier\"", "\"`rescue' modifier\"", "\"`alias'\"",
2159 "\"`defined?'\"", "\"`BEGIN'\"", "\"`END'\"", "\"`__LINE__'\"",
2160 "\"`__FILE__'\"", "\"`__ENCODING__'\"", "\"local variable or method\"",
2161 "\"method\"", "\"global variable\"", "\"instance variable\"",
2162 "\"constant\"", "\"class variable\"", "tLABEL", "\"integer literal\"",
2163 "\"float literal\"", "\"rational literal\"", "\"imaginary literal\"",
2164 "\"char literal\"", "\"numbered reference\"", "\"back reference\"",
2165 "\"literal content\"", "tREGEXP_END", "'.'", "\"backslash\"",
2166 "\"escaped space\"", "\"escaped horizontal tab\"",
2167 "\"escaped form feed\"", "\"escaped carriage return\"",
2168 "\"escaped vertical tab\"", "\"unary+\"", "\"unary-\"", "\"**\"",
2169 "\"<=>\"", "\"==\"", "\"===\"", "\"!=\"", "\">=\"", "\"<=\"", "\"&&\"",
2170 "\"||\"", "\"=~\"", "\"!~\"", "\"..\"", "\"...\"", "\"(..\"", "\"(...\"",
2171 "\"[]\"", "\"[]=\"", "\"<<\"", "\">>\"", "\"&.\"", "\"::\"",
2172 "\":: at EXPR_BEG\"", "\"operator-assignment\"", "\"=>\"", "\"(\"",
2173 "\"( arg\"", "\")\"", "\"[\"", "\"{\"", "\"{ arg\"", "\"*\"",
2174 "\"**arg\"", "\"&\"", "\"->\"", "\"symbol literal\"",
2175 "\"string literal\"", "\"backtick literal\"", "\"regexp literal\"",
2176 "\"word list\"", "\"verbatim word list\"", "\"symbol list\"",
2177 "\"verbatim symbol list\"", "\"terminator\"", "\"'}'\"", "tSTRING_DBEG",
2178 "tSTRING_DVAR", "tLAMBEG", "tLABEL_END", "tLOWEST", "'='", "'?'", "':'",
2179 "'>'", "'<'", "'|'", "'^'", "'&'", "'+'", "'-'", "'*'", "'/'", "'%'",
2180 "tUMINUS_NUM", "'!'", "'~'", "tLAST_TOKEN", "'{'", "'}'", "'['", "','",
2181 "'`'", "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program",
2182 "$@1", "top_compstmt", "top_stmts", "top_stmt", "begin_block",
2183 "bodystmt", "$@2", "compstmt", "stmts", "stmt_or_begin", "$@3", "stmt",
2184 "$@4", "command_asgn", "command_rhs", "expr", "@5", "@6", "$@7",
2185 "expr_value", "expr_value_do", "$@8", "$@9", "command_call",
2186 "block_command", "cmd_brace_block", "fcall", "command", "mlhs",
2187 "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head", "mlhs_post",
2188 "mlhs_node", "lhs", "cname", "cpath", "fname", "fitem", "undef_list",
2189 "$@10", "op", "reswords", "arg", "$@11", "relop", "rel_expr",
2190 "arg_value", "aref_args", "arg_rhs", "paren_args", "opt_paren_args",
2191 "opt_call_args", "call_args", "command_args", "$@12", "block_arg",
2192 "opt_block_arg", "args", "mrhs_arg", "mrhs", "primary", "$@13", "$@14",
2193 "$@15", "$@16", "$@17", "@18", "@19", "$@20", "@21", "$@22", "@23",
2194 "@24", "@25", "@26", "primary_value", "k_begin", "k_if", "k_unless",
2195 "k_while", "k_until", "k_case", "k_for", "k_class", "k_module", "k_def",
2196 "k_do", "k_do_block", "k_rescue", "k_ensure", "k_when", "k_else",
2197 "k_elsif", "k_end", "k_return", "then", "do", "if_tail", "opt_else",
2198 "for_var", "f_marg", "f_marg_list", "f_margs", "f_rest_marg",
2199 "block_args_tail", "opt_block_args_tail", "block_param",
2200 "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", "bvar",
2201 "lambda", "@27", "@28", "@29", "@30", "$@31", "f_larglist",
2202 "lambda_body", "do_block", "block_call", "method_call", "brace_block",
2203 "brace_body", "@32", "@33", "@34", "do_body", "@35", "@36", "@37",
2204 "case_args", "case_body", "cases", "p_case_body", "@38", "@39", "@40",
2205 "$@41", "$@42", "$@43", "p_cases", "p_top_expr", "p_top_expr_body",
2206 "p_expr", "p_as", "p_alt", "p_lparen", "p_lbracket", "p_expr_basic",
2207 "@44", "@45", "@46", "p_args", "p_args_head", "p_args_tail",
2208 "p_args_post", "p_arg", "p_kwargs", "p_kwarg", "p_kw", "p_kw_label",
2209 "p_kwrest", "p_kwnorest", "p_value", "p_primitive", "$@47", "p_variable",
2210 "p_var_ref", "p_const", "opt_rescue", "exc_list", "exc_var",
2211 "opt_ensure", "literal", "strings", "string", "string1", "xstring",
2212 "regexp", "words", "word_list", "word", "symbols", "symbol_list",
2213 "qwords", "qsymbols", "qword_list", "qsym_list", "string_contents",
2214 "xstring_contents", "regexp_contents", "string_content", "@48", "$@49",
2215 "@50", "@51", "@52", "@53", "string_dvar", "symbol", "ssym", "sym",
2216 "dsym", "numeric", "simple_numeric", "user_variable", "keyword_variable",
2217 "var_ref", "var_lhs", "backref", "superclass", "$@54", "f_arglist",
2218 "@55", "args_tail", "opt_args_tail", "f_args", "args_forward",
2219 "f_bad_arg", "f_norm_arg", "f_arg_asgn", "f_arg_item", "f_arg",
2220 "f_label", "f_kw", "f_block_kw", "f_block_kwarg", "f_kwarg",
2221 "kwrest_mark", "f_no_kwarg", "f_kwrest", "f_opt", "f_block_opt",
2222 "f_block_optarg", "f_optarg", "restarg_mark", "f_rest_arg",
2223 "blkarg_mark", "f_block_arg", "opt_f_block_arg", "singleton", "$@56",
2224 "assoc_list", "assocs", "assoc", "operation", "operation2", "operation3",
2225 "dot_or_colon", "call_op", "call_op2", "opt_terms", "opt_nl", "rparen",
2226 "rbracket", "rbrace", "trailer", "term", "terms", "none", YY_NULLPTR
2227};
2228
2229static const char *
2230yysymbol_name (yysymbol_kind_t yysymbol)
2231{
2232 return yytname[yysymbol];
2233}
2234#endif
2235
2236#define YYPACT_NINF (-1040)
2237
2238#define yypact_value_is_default(Yyn) \
2239 ((Yyn) == YYPACT_NINF)
2240
2241#define YYTABLE_NINF (-762)
2242
2243#define yytable_value_is_error(Yyn) \
2244 ((Yyn) == YYTABLE_NINF)
2245
2246/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
2247 STATE-NUM. */
2248static const yytype_int16 yypact[] =
2249{
2250 -1040, 114, 3745, -1040, 9167, -1040, -1040, -1040, 8625, -1040,
2251 -1040, -1040, -1040, -1040, -1040, -1040, 9293, 9293, -1040, -1040,
2252 -1040, 5085, 4644, -1040, -1040, -1040, -1040, 384, 8480, -27,
2253 236, 280, -1040, -1040, -1040, 3909, 4791, -1040, -1040, 4056,
2254 -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, 11057, 11057,
2255 11057, 11057, 124, 6680, 9419, 9923, 10301, 8909, -1040, 8335,
2256 -1040, -1040, -1040, 282, 316, 388, 413, 996, 11183, 11057,
2257 -1040, 799, -1040, 1065, -1040, 374, -1040, -1040, 367, 549,
2258 495, -1040, 485, 11435, -1040, 520, 1591, 398, 65, 348,
2259 -1040, 11309, 11309, -1040, -1040, 7662, 11557, 11679, 11801, 8189,
2260 9293, 424, 95, -1040, -1040, 544, -1040, -1040, -1040, -1040,
2261 -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, 323, 435,
2262 -1040, 570, 518, -1040, -1040, -1040, -1040, -1040, -1040, -1040,
2263 -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040,
2264 -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040,
2265 -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040,
2266 -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040,
2267 -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040,
2268 -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040,
2269 -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040,
2270 -1040, -1040, 547, -1040, -1040, -1040, 580, 11057, 634, 6831,
2271 11057, 11057, 11057, -1040, 11057, -1040, 613, 4181, 679, -1040,
2272 -1040, 640, 496, 353, 453, 696, 553, 655, -1040, -1040,
2273 7536, -1040, 9293, 9545, -1040, -1040, 7788, -1040, 11309, 863,
2274 -1040, 671, 6982, -1040, 7133, -1040, -1040, 702, 708, 367,
2275 -1040, 531, -1040, 759, 4328, 4328, 551, 9419, -1040, 6680,
2276 713, 799, -1040, 1065, -27, 745, -1040, 1065, -27, 750,
2277 -33, 38, -1040, 679, 765, 38, -1040, -27, 838, 996,
2278 11923, 769, -1040, 536, 562, 605, 659, -1040, -1040, -1040,
2279 -1040, -1040, 600, -1040, 716, 911, 438, -1040, -1040, -1040,
2280 -1040, 843, -1040, -1040, -1040, -1040, -1040, -1040, -1040, 7914,
2281 11309, 11309, 11309, 11309, 9419, 11309, 11309, -1040, -1040, -1040,
2282 824, -1040, -1040, -1040, -1040, -1040, 10427, -1040, 6680, 9038,
2283 794, 10427, -1040, 11057, 11057, 11057, 11057, 11057, -1040, -1040,
2284 11057, 11057, 11057, 11057, 11057, 11057, 11057, 11057, 11057, -1040,
2285 -1040, 11057, 11057, 11057, 11057, 11057, 11057, 11057, 11057, 11057,
2286 11057, -1040, -1040, 12386, 9293, 12476, 5824, 374, 106, 106,
2287 7284, 11309, 7284, 799, -1040, 798, 885, -1040, -1040, 662,
2288 928, 117, 127, 141, 439, 670, 11309, 880, -1040, 832,
2289 701, -1040, -1040, -1040, -1040, 34, 78, 415, 543, 558,
2290 612, 626, 632, 720, -1040, -1040, -1040, 732, -1040, -1040,
2291 -1040, 13736, -1040, -1040, 11183, 11183, -1040, -1040, 585, -1040,
2292 -1040, -1040, 777, 11057, 11057, 9671, -1040, -1040, 12566, 9293,
2293 12656, 11057, 11057, 10049, -1040, -27, 826, -1040, -1040, 11057,
2294 -27, -1040, 836, -27, 842, -1040, 133, -1040, -1040, -1040,
2295 -1040, -1040, 8625, -1040, 11057, 834, 847, 12566, 12656, 11057,
2296 1065, 236, -27, -1040, -1040, 8040, 846, -27, -1040, -1040,
2297 10175, -1040, -1040, 10301, -1040, -1040, -1040, 671, 731, -1040,
2298 -1040, 850, 11923, 12746, 9293, 12836, -1040, -1040, -1040, -1040,
2299 -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, 931, 59,
2300 960, 340, 11057, -1040, -1040, -1040, -1040, -1040, -1040, -1040,
2301 -1040, -1040, 851, -1040, -1040, -1040, 990, -1040, 990, 11057,
2302 -1040, 855, 857, 963, -1040, -27, 11923, 858, -1040, -1040,
2303 -1040, 966, 887, 3887, -1040, -1040, -1040, 737, 663, -1040,
2304 759, 4622, 4622, 4622, 4622, 4769, 4475, 4622, 4622, 4328,
2305 4328, 849, 849, 3200, 1162, 1162, 886, 436, 436, 759,
2306 759, 759, 1842, 1842, 5232, 4203, 5526, 4350, -1040, 708,
2307 -1040, -27, 866, 588, -1040, 666, -1040, -1040, 4938, 990,
2308 1010, -1040, 5975, 1012, 6428, 990, 54, 990, 1003, 1018,
2309 144, 12926, 9293, 13016, -1040, 374, -1040, 731, -1040, -1040,
2310 -1040, 13106, 9293, 13196, 5824, 11309, -1040, -1040, -1040, -1040,
2311 -1040, -1040, 3529, -1040, 4034, -1040, -1040, -1040, 8625, 11057,
2312 -1040, 11057, 679, -1040, 655, 3369, 4497, -27, 688, 722,
2313 -1040, -1040, -1040, -1040, 9797, -1040, 10049, -1040, -1040, 11309,
2314 4181, -1040, -1040, 708, 708, -1040, -1040, 345, -1040, -1040,
2315 38, 11923, 850, 37, 470, -27, 271, 349, -1040, -1040,
2316 1007, -1040, 487, -1040, 877, -1040, -1040, 491, 884, -1040,
2317 759, -1040, -1040, 893, -1040, -1040, -1040, -1040, 895, 10553,
2318 9419, -1040, 850, 11923, 9419, 11183, 11057, 13286, 9293, 13376,
2319 12319, 918, 11183, 11183, -1040, 824, 889, 727, 9671, 11183,
2320 11183, -1040, -1040, 824, -1040, -1040, -1040, 10679, 738, -1040,
2321 574, -1040, 1033, -1040, -1040, -1040, -1040, -1040, -1040, 1018,
2322 990, -1040, 10805, 990, 72, 235, -27, 156, 312, 7284,
2323 799, 11309, 5824, 897, 470, -1040, -27, 990, 133, 921,
2324 8770, 95, 549, -1040, -1040, -1040, -1040, 11057, 11057, 733,
2325 11057, 11057, -27, 920, 133, -1040, -1040, 350, -1040, -1040,
2326 -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040,
2327 939, -1040, 939, 11057, 927, -1040, 850, -1040, 4181, 5379,
2328 5673, -27, 753, 786, -1040, -1040, 2945, 2945, 881, -1040,
2329 356, 631, -1040, 1024, 978, -1040, 952, -1040, -1040, 742,
2330 -1040, -1040, 341, -1040, -1040, -1040, -1040, -1040, -1040, -1040,
2331 -1040, -1040, 11057, -1040, -1040, -1040, -1040, -1040, -1040, 11183,
2332 -1040, -1040, -1040, -1040, -1040, 855, -1040, 989, -1040, -1040,
2333 -1040, 7284, -1040, -1040, -1040, -1040, 7284, 11309, 990, -1040,
2334 -1040, 990, -1040, -1040, 990, -1040, 11057, -1040, 26, -1040,
2335 332, 990, 5824, 799, 990, -1040, -1040, -1040, 2196, 5824,
2336 2402, -1040, -1040, -1040, 11057, -1040, 10049, -1040, 1834, -1040,
2337 1556, 7133, -1040, -1040, 5824, 944, 787, -1040, -1040, -1040,
2338 -1040, 12319, 12200, -1040, 577, 949, -1040, -1040, -1040, 1043,
2339 -1040, 12319, 2945, 2945, 881, 356, 790, 3608, 3608, 4181,
2340 -1040, -1040, 12045, 106, -1040, -1040, 6554, -1040, 106, -1040,
2341 -1040, -1040, -1040, -1040, 10931, 6126, -1040, 990, -1040, -1040,
2342 -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, 1151, -1040,
2343 -1040, -1040, -1040, -1040, -1040, -27, -27, -1040, -1040, 973,
2344 -1040, 954, 11057, -1040, 956, 546, 965, 965, -1040, 967,
2345 1049, 968, 1066, -1040, 990, 799, 974, 921, 2402, -1040,
2346 -1040, -1040, -1040, -27, 991, 995, 979, 12167, -1040, 981,
2347 965, 965, -1040, 982, 992, -1040, 999, -1040, -1040, 3,
2348 264, 355, -27, 12286, -1040, 1001, -1040, -1040, -27, 1011,
2349 -1040, 12319, -1040, -1040, 744, -1040, -1040, -1040, -1040, -1040,
2350 -1040, -1040, -1040, -1040, -1040, -27, -27, -27, -27, 1068,
2351 -1040, 743, 198, 203, 213, 5824, 1133, 5975, 3608, 11057,
2352 -1040, 955, -1040, 1151, 1079, -1040, 1022, -27, 1025, -1040,
2353 -1040, -1040, 11057, 2196, -1040, -1040, 714, -1040, -1040, -1040,
2354 -1040, 243, -1040, -1040, 2402, -1040, -1040, 1417, -1040, -1040,
2355 -1040, -1040, 2402, 5824, -27, 291, 7410, 1027, -1040, 12167,
2356 2402, -1040, 1108, 748, 714, -1040, -1040, -1040, 2402, -1040,
2357 1417, -1040, 1089, -1040, 1028, 12319, -1040, 307, 978, 1031,
2358 -1040, 652, -1040, 577, 978, -1040, -1040, 800, -1040, -1040,
2359 -1040, -1040, 248, 13466, 9293, 13556, 1010, -1040, 574, 106,
2360 801, 377, -1040, -1040, -1040, -1040, -1040, -1040, -27, -1040,
2361 1151, -1040, 1097, -1040, -1040, -27, -1040, 1032, 1037, -1040,
2362 1121, 965, -1040, 1040, -1040, 1041, -1040, 1040, 990, 1046,
2363 5824, 7133, -1040, 1069, -1040, 748, -1040, 1051, 1053, -1040,
2364 13646, -1040, 965, 1054, -1040, 1067, 1054, -1040, 542, -1040,
2365 -1040, 12319, 1071, -1040, 1072, 12319, -1040, -1040, -1040, -1040,
2366 -1040, 61, 202, -27, 286, 313, -1040, -1040, -1040, 11309,
2367 11309, 12200, -1040, -1040, 1073, 1074, -1040, 2402, -1040, 1417,
2368 -1040, -1040, 1417, -1040, 1417, -1040, -1040, -1040, -1040, 990,
2369 1048, -1040, 2402, -1040, 1417, -1040, 1075, 1076, -1040, 1417,
2370 -1040, 1417, -1040, -1040, 1089, -1040, 1071, 12319, 12319, 1071,
2371 321, -1040, -1040, -1040, -1040, 1097, 1097, 1040, 1080, 1040,
2372 1040, -1040, -1040, 1054, 1087, 1054, 1054, -1040, -1040, 1071,
2373 -1040, 1074, -1040, 1417, -1040, -1040, -1040, -1040, 1417, -1040,
2374 -1040, -1040, 6277, 1040, 1054, 576, -1040, -1040, -1040, -1040,
2375 -1040
2376};
2377
2378/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
2379 Performed when YYTABLE does not specify something else to do. Zero
2380 means the default is an error. */
2381static const yytype_int16 yydefact[] =
2382{
2383 2, 0, 0, 1, 0, 362, 363, 364, 0, 355,
2384 356, 357, 360, 358, 359, 361, 350, 351, 352, 353,
2385 373, 279, 279, 637, 636, 638, 639, 749, 0, 749,
2386 0, 0, 641, 640, 642, 731, 733, 633, 632, 732,
2387 635, 627, 628, 629, 630, 578, 647, 648, 0, 0,
2388 0, 0, 0, 0, 306, 761, 761, 95, 326, 598,
2389 598, 600, 602, 0, 0, 0, 0, 0, 0, 0,
2390 3, 747, 6, 9, 35, 40, 52, 67, 279, 66,
2391 0, 83, 0, 87, 97, 0, 61, 235, 250, 0,
2392 304, 0, 0, 63, 63, 747, 0, 0, 0, 0,
2393 315, 68, 324, 293, 294, 577, 579, 295, 296, 297,
2394 299, 298, 300, 576, 617, 618, 575, 625, 643, 644,
2395 301, 0, 302, 71, 5, 8, 176, 187, 177, 200,
2396 173, 193, 183, 182, 203, 204, 198, 181, 180, 175,
2397 201, 205, 206, 185, 174, 188, 192, 194, 186, 179,
2398 195, 202, 197, 196, 189, 199, 184, 172, 191, 190,
2399 171, 178, 169, 170, 166, 167, 168, 126, 128, 127,
2400 161, 162, 157, 139, 140, 141, 148, 145, 147, 142,
2401 143, 163, 164, 149, 150, 154, 158, 144, 146, 136,
2402 137, 138, 151, 152, 153, 155, 156, 159, 160, 165,
2403 131, 133, 28, 129, 130, 132, 0, 0, 0, 0,
2404 0, 0, 0, 598, 0, 274, 0, 257, 284, 81,
2405 278, 761, 0, 643, 644, 0, 302, 761, 725, 82,
2406 749, 79, 0, 761, 449, 78, 749, 750, 0, 0,
2407 23, 247, 0, 10, 0, 350, 351, 318, 450, 0,
2408 229, 0, 315, 230, 220, 221, 312, 0, 21, 0,
2409 0, 747, 17, 20, 749, 85, 16, 308, 749, 0,
2410 754, 754, 258, 0, 0, 754, 723, 749, 0, 0,
2411 0, 93, 354, 0, 103, 104, 111, 428, 622, 621,
2412 623, 620, 0, 619, 0, 0, 0, 585, 594, 590,
2413 596, 626, 56, 241, 242, 757, 758, 4, 759, 748,
2414 0, 0, 0, 0, 0, 0, 0, 365, 454, 443,
2415 72, 458, 323, 366, 458, 439, 0, 99, 0, 91,
2416 88, 0, 57, 0, 0, 0, 0, 0, 253, 254,
2417 0, 0, 0, 0, 218, 219, 0, 0, 0, 251,
2418 252, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2419 0, 743, 744, 0, 761, 0, 0, 62, 0, 0,
2420 0, 0, 0, 747, 334, 748, 0, 384, 383, 0,
2421 0, 643, 644, 302, 121, 122, 0, 0, 124, 651,
2422 0, 643, 644, 302, 342, 196, 189, 199, 184, 166,
2423 167, 168, 126, 127, 721, 344, 720, 0, 80, 746,
2424 745, 0, 325, 580, 0, 0, 134, 728, 312, 285,
2425 730, 281, 0, 0, 0, 0, 275, 283, 0, 761,
2426 0, 0, 0, 0, 276, 749, 0, 317, 280, 679,
2427 749, 270, 761, 749, 761, 269, 749, 322, 55, 25,
2428 27, 26, 0, 319, 0, 0, 0, 0, 0, 0,
2429 19, 0, 749, 310, 15, 748, 84, 749, 307, 313,
2430 756, 755, 259, 756, 261, 314, 724, 0, 110, 626,
2431 101, 96, 0, 0, 761, 0, 327, 429, 604, 624,
2432 607, 605, 599, 581, 582, 601, 583, 603, 0, 0,
2433 0, 0, 0, 760, 7, 29, 30, 31, 32, 33,
2434 53, 54, 0, 455, 454, 73, 0, 459, 0, 0,
2435 36, 289, 0, 39, 288, 749, 0, 89, 100, 51,
2436 41, 49, 0, 262, 284, 207, 37, 0, 302, 58,
2437 227, 234, 236, 237, 238, 245, 246, 239, 240, 216,
2438 217, 243, 244, 749, 231, 232, 233, 222, 223, 224,
2439 225, 226, 255, 256, 734, 736, 735, 737, 448, 279,
2440 446, 749, 761, 734, 736, 735, 737, 447, 279, 0,
2441 761, 375, 0, 374, 0, 0, 0, 0, 332, 0,
2442 312, 0, 761, 0, 63, 340, 121, 122, 123, 649,
2443 338, 0, 761, 0, 0, 0, 345, 741, 742, 347,
2444 734, 735, 279, 42, 262, 208, 48, 215, 0, 0,
2445 727, 0, 286, 282, 761, 734, 735, 749, 734, 735,
2446 726, 316, 751, 264, 271, 266, 273, 321, 24, 0,
2447 248, 11, 34, 0, 761, 214, 22, 86, 18, 309,
2448 754, 0, 94, 738, 109, 749, 734, 735, 430, 608,
2449 0, 584, 0, 587, 0, 592, 589, 0, 0, 593,
2450 228, 452, 456, 0, 372, 453, 460, 438, 292, 0,
2451 0, 98, 92, 0, 0, 0, 0, 0, 761, 0,
2452 0, 0, 0, 0, 445, 76, 0, 451, 271, 0,
2453 0, 268, 444, 74, 267, 305, 367, 761, 761, 567,
2454 761, 376, 761, 330, 378, 64, 377, 331, 469, 0,
2455 0, 369, 0, 0, 738, 311, 749, 734, 735, 0,
2456 0, 0, 0, 121, 122, 125, 749, 0, 749, 655,
2457 0, 440, 69, 135, 729, 287, 277, 0, 0, 451,
2458 0, 0, 749, 761, 749, 260, 102, 451, 431, 609,
2459 613, 614, 615, 606, 616, 586, 588, 595, 591, 597,
2460 761, 70, 761, 0, 290, 38, 90, 50, 263, 734,
2461 735, 749, 734, 735, 561, 565, 0, 0, 0, 506,
2462 500, 503, 559, 0, 59, 486, 488, 490, 493, 540,
2463 545, 546, 547, 550, 551, 552, 553, 554, 556, 555,
2464 557, 558, 0, 47, 212, 46, 213, 77, 752, 0,
2465 44, 210, 45, 211, 75, 568, 569, 761, 570, 368,
2466 370, 0, 12, 14, 574, 371, 0, 0, 0, 379,
2467 381, 0, 65, 470, 0, 336, 0, 462, 0, 335,
2468 451, 0, 0, 0, 0, 451, 343, 722, 678, 0,
2469 678, 348, 441, 442, 0, 265, 272, 320, 678, 610,
2470 749, 0, 419, 418, 0, 291, 451, 548, 549, 122,
2471 563, 0, 0, 502, 0, 0, 505, 428, 562, 0,
2472 60, 0, 543, 544, 0, 492, 491, 0, 0, 249,
2473 43, 209, 0, 0, 572, 573, 0, 382, 0, 328,
2474 329, 471, 333, 463, 0, 0, 337, 0, 650, 339,
2475 685, 682, 681, 680, 683, 691, 700, 679, 0, 712,
2476 701, 716, 715, 711, 677, 749, 749, 684, 686, 687,
2477 689, 663, 693, 698, 761, 704, 761, 761, 709, 663,
2478 714, 663, 0, 661, 0, 0, 663, 655, 678, 432,
2479 435, 611, 417, 749, 0, 687, 402, 695, 696, 761,
2480 761, 761, 707, 402, 402, 400, 422, 457, 461, 749,
2481 520, 508, 749, 509, 515, 0, 535, 598, 749, 526,
2482 531, 534, 528, 530, 538, 753, 560, 487, 489, 541,
2483 542, 564, 499, 496, 598, 749, 749, 749, 749, 0,
2484 571, 0, 643, 644, 302, 0, 761, 0, 0, 0,
2485 464, 761, 341, 0, 395, 387, 389, 749, 392, 385,
2486 652, 654, 0, 0, 670, 692, 0, 658, 719, 702,
2487 703, 0, 660, 659, 0, 673, 713, 0, 675, 717,
2488 346, 656, 0, 0, 749, 0, 0, 0, 420, 0,
2489 408, 410, 0, 694, 0, 397, 399, 398, 0, 413,
2490 0, 415, 0, 507, 518, 0, 501, 513, 524, 510,
2491 516, 0, 504, 527, 533, 539, 537, 0, 494, 495,
2492 497, 498, 312, 0, 761, 0, 761, 13, 761, 0,
2493 478, 481, 484, 485, 465, 467, 468, 466, 749, 394,
2494 0, 688, 0, 705, 662, 749, 690, 663, 663, 699,
2495 704, 761, 718, 663, 710, 663, 687, 663, 0, 0,
2496 0, 0, 433, 0, 421, 706, 401, 402, 402, 312,
2497 0, 697, 761, 402, 708, 402, 402, 426, 749, 424,
2498 427, 0, 521, 522, 511, 0, 517, 536, 532, 525,
2499 529, 738, 311, 749, 734, 735, 566, 380, 472, 0,
2500 0, 482, 386, 388, 390, 393, 653, 0, 666, 0,
2501 668, 657, 0, 674, 0, 671, 676, 349, 434, 0,
2502 0, 612, 0, 405, 0, 407, 738, 311, 396, 0,
2503 414, 0, 411, 416, 0, 423, 519, 0, 0, 514,
2504 451, 473, 479, 480, 483, 0, 0, 663, 663, 663,
2505 663, 437, 436, 402, 402, 402, 402, 425, 523, 512,
2506 474, 391, 667, 0, 664, 669, 672, 406, 0, 403,
2507 409, 412, 0, 663, 402, 761, 665, 404, 476, 477,
2508 475
2509};
2510
2511/* YYPGOTO[NTERM-NUM]. */
2512static const yytype_int16 yypgoto[] =
2513{
2514 -1040, -1040, -1040, 972, -1040, 19, 754, -545, -1040, -51,
2515 -1040, 756, -1040, 68, -1040, -264, -308, -83, -1040, -1040,
2516 -1040, -66, -75, -1040, -1040, -25, -1040, -323, 645, 4,
2517 1126, -154, 7, -26, -1040, -391, 11, 2057, -345, 1127,
2518 -58, -11, -1040, -1040, 2, -1040, 2889, -1040, 1147, -1040,
2519 1411, -1040, 110, 60, 630, -350, 100, -15, -1040, -381,
2520 -205, 39, -1040, -307, -32, -1040, -1040, -1040, -1040, -1040,
2521 -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, 32,
2522 -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040,
2523 -1040, -1040, -1040, -1040, -1040, 538, -1040, 331, 1177, -364,
2524 -1040, 146, -694, -1040, -1027, -1039, 230, 152, 393, 308,
2525 -1040, 501, -1040, -886, -1040, 74, 389, -1040, -1040, -1040,
2526 -1040, -1040, -1040, -1040, 537, -1040, -1040, -96, 766, -1040,
2527 -1040, -1040, 962, -1040, -1040, -1040, -1040, -688, -1040, 42,
2528 -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -1040, -603,
2529 -1040, -1040, -1040, -1040, 399, -1040, -1040, -1040, -860, -1040,
2530 274, -991, -605, -822, -1040, 206, -1040, 210, 218, -1040,
2531 -643, -1040, 414, -1040, -1040, 208, -1040, -1040, 289, 373,
2532 675, -1040, 1197, 1459, 1483, 1523, -1040, 806, 1936, -1040,
2533 1965, 2010, -1040, -1040, -56, -1040, -1040, -200, -1040, -1040,
2534 -1040, -1040, -1040, -1040, -1040, 5, -1040, -1040, -1040, -1040,
2535 -21, 1967, 1113, 1209, 1908, 1709, -1040, -1040, 352, -1040,
2536 -770, 412, -776, -607, -1001, -829, 207, -915, -287, -62,
2537 275, 249, -1040, -1040, -489, -327, 168, -975, -957, 256,
2538 -879, -1040, -729, -1040, 120, -748, -1040, -1040, -1040, 92,
2539 -393, -1040, -318, -1040, -1040, -86, -1040, -37, 253, 848,
2540 -577, 329, -243, -60, -55, -2
2541};
2542
2543/* YYDEFGOTO[NTERM-NUM]. */
2544static const yytype_int16 yydefgoto[] =
2545{
2546 0, 1, 2, 70, 71, 72, 243, 579, 906, 580,
2547 261, 262, 461, 263, 452, 74, 530, 75, 539, 690,
2548 890, 368, 370, 371, 842, 76, 77, 515, 249, 79,
2549 80, 264, 81, 82, 83, 481, 84, 216, 388, 389,
2550 200, 201, 202, 618, 567, 204, 86, 454, 359, 87,
2551 218, 269, 535, 568, 702, 440, 441, 231, 232, 220,
2552 426, 572, 523, 524, 88, 366, 268, 467, 639, 287,
2553 719, 589, 732, 730, 604, 606, 739, 740, 957, 251,
2554 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
2555 321, 324, 707, 831, 722, 836, 837, 675, 252, 582,
2556 715, 838, 839, 380, 1025, 1026, 1027, 1028, 1136, 1061,
2557 963, 871, 872, 964, 1148, 1149, 486, 487, 658, 758,
2558 868, 1055, 959, 1132, 325, 101, 102, 322, 512, 513,
2559 672, 770, 516, 517, 676, 772, 848, 723, 1107, 720,
2560 843, 911, 1018, 1211, 1230, 1242, 1250, 1099, 1100, 1078,
2561 795, 796, 897, 898, 797, 882, 884, 881, 982, 983,
2562 984, 1152, 985, 988, 989, 990, 991, 992, 993, 798,
2563 799, 887, 800, 801, 802, 708, 827, 903, 833, 103,
2564 104, 105, 106, 107, 108, 109, 498, 662, 110, 500,
2565 111, 112, 499, 501, 292, 295, 296, 492, 660, 659,
2566 759, 869, 961, 1056, 763, 113, 114, 293, 115, 116,
2567 117, 223, 224, 120, 225, 226, 600, 731, 859, 860,
2568 1114, 1034, 935, 443, 937, 938, 1126, 940, 956, 942,
2569 943, 968, 969, 944, 945, 946, 947, 948, 972, 973,
2570 949, 950, 951, 952, 953, 1037, 407, 605, 274, 444,
2571 228, 123, 643, 570, 609, 603, 411, 307, 436, 437,
2572 697, 886, 472, 583, 375, 266
2573};
2574
2575/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
2576 positive, shift that token. If negative, reduce the rule whose
2577 number is the opposite. If YYTABLE_NINF, syntax error. */
2578static const yytype_int16 yytable[] =
2579{
2580 124, 291, 260, 365, 294, 584, 412, 235, 367, 367,
2581 203, 308, 367, 205, 571, 410, 309, 240, 841, 372,
2582 215, 215, 434, 125, 536, 282, 369, 752, 474, 373,
2583 203, 844, 476, 205, 89, 308, 89, 1005, 1007, 581,
2584 630, 405, 598, 302, 623, 569, 301, 578, 222, 222,
2585 749, 282, 623, 272, 276, 221, 221, 330, 374, 737,
2586 265, 203, -107, 320, 282, 282, 282, 529, 281, 1124,
2587 73, 1150, 73, 1175, -116, 1006, 1008, 1057, 757, 627,
2588 630, 714, 234, 1173, 955, 89, 89, 794, 934, 283,
2589 934, 652, 960, 612, 270, 495, 497, -116, 934, 1029,
2590 222, 203, -637, 889, 215, 462, 613, 616, 227, 227,
2591 569, 1144, 578, 470, 3, 283, 219, 229, 1116, 581,
2592 471, 317, 267, 222, 222, 664, 237, 222, 379, 390,
2593 390, -637, 222, -354, 655, 682, 430, 1116, 319, 221,
2594 644, 974, -112, 877, 878, 1116, -636, 271, 275, 850,
2595 529, 529, -113, 446, 1117, 448, 237, 422, 260, 855,
2596 1206, -354, -354, -107, 1209, 458, -120, 644, 1129, -119,
2597 315, 316, 914, 1117, 525, -636, 1231, 305, 665, 306,
2598 256, -115, 1054, -107, 473, -734, -107, 854, 934, 1173,
2599 -107, 471, 227, 456, 1029, 1109, 1103, 485, 1042, 1043,
2600 408, 308, 1124, 1150, 876, 305, 465, 306, 260, -734,
2601 -354, -112, -116, 883, -116, -118, -113, 1229, -107, 427,
2602 -734, 1065, 1066, 1067, 464, 427, -120, 367, 367, 367,
2603 367, 445, 510, 511, 215, 1144, 215, 215, 318, 434,
2604 124, 89, 726, 630, 505, 506, 507, 508, 282, 999,
2605 1000, 936, 736, 623, 480, 623, 735, 305, 479, 306,
2606 -118, -119, 222, -103, 222, 222, 265, 1116, 222, 221,
2607 222, 221, 442, -104, 89, 644, 89, 260, 979, 981,
2608 238, 1029, 241, 1029, 1116, 644, 237, -111, 367, 89,
2609 -110, 89, 776, 593, 981, 981, -106, 282, 663, -115,
2610 663, 520, -106, 595, 1118, 586, 531, 917, 234, 319,
2611 73, 1214, 283, 308, 954, 1125, 1074, 623, 1002, 585,
2612 1130, 587, 227, 1118, 227, 460, -117, 1105, 504, 978,
2613 435, 1138, 438, 1106, -114, 265, 588, -117, 781, 1145,
2614 527, 89, 222, 222, 222, 222, 89, 222, 222, -112,
2615 -735, -112, 931, -118, -113, -118, -113, -114, 222, 1154,
2616 89, 283, 445, 537, -120, 522, -120, 576, 215, 569,
2617 522, 578, 817, 1181, -108, -105, 932, 73, 1079, 242,
2618 824, -109, 509, -735, 813, 815, 1029, 1029, 1084, 531,
2619 531, 820, 822, 317, 1198, 994, 222, -106, 89, -119,
2620 826, -119, 89, 222, 89, 1076, 668, 755, 994, 994,
2621 1075, 315, 316, 576, 1131, 1101, 361, -106, 222, 746,
2622 -106, 529, -645, 244, -106, 577, 1115, 445, 529, 529,
2623 1090, 1091, 576, 215, 297, 529, 529, -115, 894, -115,
2624 427, 638, 427, 880, 362, 363, 537, 537, 1218, -112,
2625 282, 689, -645, 1155, 203, 889, 480, 205, -108, 669,
2626 576, 222, 766, 1224, -117, -731, -117, 766, 298, -103,
2627 1153, -84, -114, 630, -114, -108, -105, 889, -105, -112,
2628 338, 339, 445, -638, 915, 623, 895, 576, 215, 896,
2629 577, -98, 361, 364, 282, -108, -105, 89, -108, -105,
2630 480, -524, -108, -105, 488, 496, -749, -631, 1128, 237,
2631 318, 900, -638, 333, 283, 233, 222, 624, 577, 729,
2632 362, 409, 738, 1171, 615, 617, 716, 349, 350, 994,
2633 477, 710, 236, 712, -646, -631, -631, 237, -311, 1015,
2634 299, 615, 617, 970, 1017, 577, 1153, 1120, 746, 1001,
2635 1153, 1248, -646, 488, 695, 529, 754, 488, 283, 490,
2636 491, -113, 650, 703, 361, 300, -311, -311, 981, 645,
2637 427, 941, 356, 357, 358, 1120, 704, 323, 709, -113,
2638 1039, -104, -731, 966, -631, 1189, 1210, -731, 835, 830,
2639 445, 830, 362, 428, 994, 576, 215, 742, 1040, 361,
2640 445, 718, 1228, 1153, 361, 576, 215, 743, 490, 491,
2641 704, -639, 490, 491, 89, -311, 89, 415, -735, 282,
2642 203, 326, 427, 205, 222, 756, -641, 362, 457, 694,
2643 -643, 327, 362, 483, 222, 986, 89, 222, 701, 765,
2644 -639, 429, 704, 768, -120, 862, 331, 78, 367, 78,
2645 459, 282, 432, 577, 926, -641, 60, 480, -643, -643,
2646 531, 78, 78, 577, -111, 853, 488, 531, 531, 414,
2647 852, 222, 701, -644, 531, 531, 429, -119, 851, -120,
2648 -640, 484, 861, 283, 459, 930, 445, 699, 1204, 987,
2649 418, 576, 215, 416, -642, 237, -732, -110, 78, 78,
2650 -631, -644, -644, 694, 701, 828, 834, -643, 840, -640,
2651 840, -119, 89, 78, -115, 283, 89, 537, 488, 489,
2652 222, 490, 491, -642, 537, 537, 753, -302, 236, -631,
2653 361, 537, 537, 970, -106, 1168, 78, 78, -634, 423,
2654 78, 970, 203, 970, 1163, 78, 522, 829, 775, 577,
2655 -644, 427, 777, 830, 367, -302, -302, 1123, 362, 591,
2656 1127, 89, 415, 222, 89, 700, -634, -634, 873, 361,
2657 873, 908, 925, 490, 491, -749, 1157, 644, 1085, 424,
2658 905, 1143, 488, 1146, 237, 907, 425, 750, -634, -120,
2659 753, 926, -117, 918, 531, 431, 1086, 362, 601, -312,
2660 607, 433, 814, 816, -302, 361, 691, 592, 967, 821,
2661 823, 361, -108, -732, -115, -634, 361, -634, -732, 453,
2662 977, 751, 930, 931, 696, 904, 819, -312, -312, 608,
2663 892, 893, 864, 362, 687, 493, 333, 490, 491, 362,
2664 1093, 1169, 1170, 488, 362, 1140, 602, 932, -117, 677,
2665 230, 537, 699, -114, 78, 1016, 233, 814, 816, -114,
2666 821, 823, 463, 89, 1021, 970, 488, 970, 89, 222,
2667 282, -83, 970, -105, 970, 78, -312, 78, 78, -115,
2668 696, 78, 688, 78, 89, 700, 819, 78, 1094, 78,
2669 1217, 89, 1219, 602, 478, 1051, 493, 1220, 490, 491,
2670 469, 619, 78, 89, 78, 1223, 89, 1225, 696, 475,
2671 705, 970, -117, -114, 1226, 482, 713, 449, 717, 493,
2672 502, 490, 491, -738, 1157, 1095, 333, 450, 451, 901,
2673 514, 1081, 596, 596, 1011, 282, 597, 879, 89, -749,
2674 528, 590, 1038, 237, 1038, 1038, 1243, 89, 1087, 503,
2675 305, 1244, 306, 594, 78, 78, 78, 78, 78, 78,
2676 78, 78, 599, 333, 1096, -738, 1098, 1038, 1038, 1038,
2677 830, 78, 721, 78, 901, 632, 78, 488, 641, 696,
2678 346, 347, 634, 354, 355, 356, 357, 358, 636, 696,
2679 975, 642, -98, -738, -738, 671, 651, 488, 967, 1063,
2680 674, -284, 967, 679, 683, 1133, 967, 680, 967, 78,
2681 684, 78, 698, 685, 834, 78, 78, 78, 706, 840,
2682 354, 355, 356, 357, 358, 711, 488, 282, 718, 767,
2683 494, 78, 490, 491, 696, 721, 769, 771, 971, 818,
2684 -738, -285, -738, 696, 885, -734, 812, 89, 830, 89,
2685 661, 845, 490, 491, 849, 41, 42, 43, 44, 78,
2686 78, 760, 761, 803, 762, 939, 866, 939, 856, 858,
2687 870, 46, 47, -286, 78, 939, 888, 965, 889, 666,
2688 1190, 490, 491, 891, 447, 89, 367, 367, 89, 902,
2689 -287, 1135, 445, 995, 709, 784, 840, 576, 215, 1032,
2690 1033, 1046, 1036, 1212, 1213, 310, 311, 312, 313, 314,
2691 78, 1041, 466, 1044, 1047, 119, 468, 119, 1049, 1038,
2692 1052, 1059, 1058, 976, 1092, 1060, 222, 1064, 1068, 78,
2693 967, 920, 967, 921, 922, 923, 924, 967, 1070, 967,
2694 1038, 1147, 829, 921, 922, 923, 924, 1080, 696, 920,
2695 1072, 921, 922, 923, 924, 577, 1122, 1083, 1134, 803,
2696 803, 1122, 89, 89, 1139, 939, 119, 119, 1110, 909,
2697 285, 1112, 910, 1040, 1151, 912, 967, 1156, 1177, 100,
2698 975, 100, 916, 1179, 1122, 919, 1182, 1184, 975, 1191,
2699 975, 1245, 1222, 100, 100, 1188, 285, 1192, 1023, 1194,
2700 1199, 222, 222, 920, 1121, 921, 922, 923, 924, 382,
2701 392, 392, 392, 1201, 455, 646, 976, 1207, 1208, 1215,
2702 1216, 648, 377, -734, -735, 394, 1233, 78, 971, 78,
2703 100, 100, 1142, 1238, 360, 696, 971, 78, 971, 333,
2704 939, 885, 741, 840, 1167, 100, 832, 78, 1022, 78,
2705 78, 939, 1023, 1108, 803, 803, 346, 347, 1024, 939,
2706 696, 696, 1174, 962, 803, 803, 803, 965, 100, 100,
2707 803, 803, 100, 874, 89, 965, 996, 100, 1227, 863,
2708 673, 1069, 1071, 631, 78, 1050, 518, 1249, 633, 1158,
2709 998, 635, 1102, 1159, 637, 353, 354, 355, 356, 357,
2710 358, 1160, 413, 997, 1166, 1097, 667, 976, 406, 1053,
2711 647, 1119, 975, 1141, 975, 649, 1137, 1082, 0, 975,
2712 0, 975, 119, 0, 0, 78, 0, 0, 0, 78,
2713 78, 0, 0, 78, 0, 0, 0, 78, 78, 0,
2714 0, 0, 0, 0, 78, 78, 0, 0, 0, 0,
2715 0, 0, 0, 0, 0, 119, 803, 119, 975, 0,
2716 971, 1045, 971, 1048, 803, 804, 0, 971, 0, 971,
2717 119, 0, 119, 681, 78, 0, 78, 78, 0, 0,
2718 0, 0, 0, 0, 939, 0, 100, 0, 0, 0,
2719 0, 803, 0, 285, 0, 0, 0, 0, 0, 965,
2720 0, 1205, 0, 0, 0, 0, 971, 100, 0, 100,
2721 100, 0, 0, 100, 0, 100, 696, 0, 0, 100,
2722 0, 100, 119, 0, 0, 0, 0, 119, 0, 0,
2723 0, 0, 0, 0, 100, 0, 100, 0, 0, 0,
2724 0, 119, 285, 0, 0, 1193, 1195, 0, 803, 0,
2725 0, 1200, 0, 1202, 1203, 0, 0, 0, 0, 1187,
2726 0, 804, 804, 0, 78, 0, 0, 273, 0, 920,
2727 0, 921, 922, 923, 924, 925, 78, 0, 0, 119,
2728 0, 78, 78, 119, 0, 119, 100, 100, 100, 100,
2729 100, 100, 100, 100, 926, 0, 0, 78, 0, 0,
2730 0, 0, 0, 100, 78, 100, 0, 0, 100, 0,
2731 0, 0, 0, 0, 0, 0, 78, 0, 928, 78,
2732 1221, 0, 0, 0, 803, 930, 931, 0, 803, 1178,
2733 1180, 1237, 1239, 1240, 1241, 1183, 0, 1185, 0, 1186,
2734 0, 100, 0, 100, 803, 0, 0, 100, 100, 100,
2735 932, 78, 1247, 0, 0, 0, 804, 804, 0, 0,
2736 78, 0, 0, 100, 0, 0, 804, 804, 804, 0,
2737 0, 0, 804, 804, 0, 0, 0, 0, 119, 0,
2738 803, 803, 0, 0, 0, 0, 857, 0, 0, 0,
2739 0, 100, 100, 0, 0, 285, 0, 0, 0, 0,
2740 865, 0, 867, 0, 0, 0, 100, 0, 920, 0,
2741 921, 922, 923, 924, 925, 0, 332, 0, 417, 0,
2742 0, 419, 420, 421, 0, 0, 0, 0, 0, 1232,
2743 1234, 1235, 1236, 926, 0, 0, 0, 0, 0, 285,
2744 0, 0, 100, 0, 0, 0, 0, 0, 0, 0,
2745 0, 0, 0, 0, 0, 1246, 0, 928, 804, 0,
2746 78, 100, 78, 929, 930, 931, 804, 0, 333, 334,
2747 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
2748 345, 0, 0, 0, 0, 346, 347, 0, 0, 932,
2749 0, 0, 933, 804, 0, 119, 0, 119, 78, 0,
2750 0, 78, 0, 0, 0, 0, 0, 0, 0, 237,
2751 0, 122, 0, 122, 0, 0, 0, 119, 348, 0,
2752 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
2753 0, 0, 0, 0, 0, 0, 0, 521, 0, 78,
2754 0, 0, 534, 0, 1003, 0, 0, 0, 0, 0,
2755 804, 0, 0, 0, 0, 0, 0, 0, 0, 100,
2756 0, 100, 122, 122, 285, 0, 286, 0, 0, 100,
2757 0, 0, 0, 0, 0, 78, 78, 0, 0, 100,
2758 0, 100, 100, 1030, 1031, 0, 0, 0, 0, 0,
2759 0, 0, 286, 119, 0, 0, 285, 119, 0, 0,
2760 0, 0, 0, 811, 0, 383, 393, 393, 0, 0,
2761 0, 0, 0, 0, 78, 78, 100, 0, 0, 0,
2762 0, 0, 0, 0, 0, 0, 804, 1073, 0, 0,
2763 804, 0, 0, 0, 0, 620, 622, 0, 0, 0,
2764 0, 0, 119, 0, 273, 119, 804, 0, 0, 0,
2765 0, 0, 0, 1088, 1089, 0, 0, 100, 0, 0,
2766 0, 100, 100, 0, 0, 100, 0, 0, 0, 100,
2767 100, 0, 0, 0, 0, 1111, 100, 100, 0, 0,
2768 0, 622, 804, 804, 273, 0, 920, 78, 921, 922,
2769 923, 924, 925, 0, 0, 0, 0, 0, 0, 811,
2770 811, 0, 0, 0, 0, 0, 100, 0, 100, 100,
2771 121, 926, 121, 0, 0, 0, 0, 0, 122, 333,
2772 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2773 678, 0, 0, 0, 0, 928, 346, 347, 0, 0,
2774 0, 929, 930, 931, 119, 0, 0, 0, 0, 119,
2775 0, 122, 0, 122, 0, 0, 1172, 0, 0, 0,
2776 0, 121, 121, 1176, 0, 119, 122, 932, 122, 118,
2777 933, 118, 119, 351, 352, 353, 354, 355, 356, 357,
2778 358, 0, 958, 0, 119, 0, 0, 119, 0, 286,
2779 0, 0, 0, 0, 811, 811, 100, 0, 0, 0,
2780 0, 0, 0, 0, 811, 811, 811, 0, 100, 0,
2781 811, 811, 0, 100, 100, 1013, 0, 0, 122, 119,
2782 118, 118, 0, 122, 284, 0, 0, 0, 119, 100,
2783 744, 0, 745, 0, 0, 0, 100, 122, 286, 0,
2784 538, 0, 0, 0, 0, 622, 0, 273, 100, 0,
2785 284, 100, 0, 0, 0, 0, 0, 0, 0, 85,
2786 0, 85, 0, 381, 391, 391, 391, 0, 0, 0,
2787 0, 0, 0, 0, 0, 122, 0, 0, 0, 122,
2788 392, 122, 0, 100, 0, 0, 0, 0, 0, 0,
2789 774, 0, 100, 0, 0, 0, 811, 0, 0, 0,
2790 0, 0, 0, 0, 811, 0, 0, 0, 0, 622,
2791 85, 85, 0, 0, 0, 0, 0, 121, 825, 0,
2792 0, 0, 0, 538, 538, 0, 0, 0, 119, 0,
2793 119, 811, 0, 847, 0, 0, 0, 0, 0, 0,
2794 0, 0, 0, 0, 0, 0, 0, 0, 0, 805,
2795 121, 0, 121, 378, 0, 0, 0, 0, 0, 0,
2796 0, 0, 0, 0, 0, 121, 119, 121, 0, 119,
2797 0, 0, 392, 806, 122, 0, 118, 0, 0, 0,
2798 0, 0, 0, 0, 875, 0, 0, 0, 811, 0,
2799 0, 286, 100, 0, 100, 0, 0, 0, 0, 0,
2800 0, 0, 0, 0, 0, 0, 0, 0, 0, 118,
2801 0, 118, 0, 807, 0, 0, 0, 121, 0, 0,
2802 0, 0, 121, 0, 118, 0, 118, 0, 0, 0,
2803 100, 0, 0, 100, 0, 286, 121, 0, 0, 121,
2804 0, 0, 0, 119, 119, 805, 805, 284, 920, 0,
2805 921, 922, 923, 924, 925, 0, 0, 913, 0, 0,
2806 0, 0, 0, 0, 811, 0, 85, 0, 811, 806,
2807 806, 100, 0, 926, 121, 0, 118, 273, 121, 0,
2808 121, 118, 0, 0, 811, 0, 0, 927, 0, 0,
2809 0, 122, 0, 122, 0, 118, 284, 928, 0, 85,
2810 0, 85, 0, 929, 930, 931, 0, 100, 100, 807,
2811 807, 0, 0, 122, 85, 0, 85, 0, 0, 0,
2812 811, 811, 121, 121, 0, 1020, 0, 0, 0, 932,
2813 0, 0, 933, 118, 0, 0, 0, 118, 0, 118,
2814 805, 805, 0, 0, 0, 0, 100, 100, 0, 0,
2815 805, 805, 805, 1035, 0, 119, 805, 805, 0, 0,
2816 286, 0, 0, 0, 806, 806, 85, 0, 0, 764,
2817 0, 85, 0, 121, 806, 806, 806, 0, 0, 0,
2818 806, 806, 0, 0, 0, 85, 0, 0, 532, 122,
2819 0, 0, 286, 122, 538, 0, 0, 0, 0, 0,
2820 0, 538, 538, 0, 807, 807, 0, 0, 538, 538,
2821 0, 0, 0, 0, 807, 807, 807, 0, 0, 100,
2822 807, 807, 0, 85, 0, 0, 0, 85, 0, 85,
2823 1104, 0, 118, 0, 0, 0, 0, 0, 122, 0,
2824 0, 122, 805, 1113, 0, 0, 0, 0, 0, 284,
2825 805, 0, 0, 0, 920, 0, 921, 922, 923, 924,
2826 925, 0, 0, 0, 0, 0, 806, 0, 0, 0,
2827 0, 532, 532, 0, 806, 0, 0, 805, 0, 926,
2828 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2829 121, 0, 121, 284, 0, 0, 0, 0, 0, 0,
2830 0, 806, 0, 928, 0, 0, 807, 0, 0, 929,
2831 930, 931, 121, 0, 807, 0, 0, 0, 0, 0,
2832 0, 0, 85, 0, 0, 0, 0, 0, 538, 0,
2833 0, 0, 0, 0, 805, 932, 0, 0, 933, 0,
2834 122, 807, 0, 0, 0, 122, 0, 0, 0, 118,
2835 0, 118, 0, 0, 0, 0, 0, 0, 806, 0,
2836 0, 122, 0, 0, 0, 0, 0, 0, 122, 0,
2837 0, 118, 0, 0, 0, 0, 0, 0, 0, 0,
2838 122, 0, 0, 122, 0, 0, 0, 0, 121, 0,
2839 0, 0, 121, 121, 0, 0, 0, 0, 807, 0,
2840 121, 121, 0, 0, 0, 0, 0, 121, 121, 0,
2841 805, 1014, 0, 0, 805, 122, 0, 0, 284, 0,
2842 0, 0, 0, 0, 122, 0, 808, 0, 0, 0,
2843 805, 0, 0, 0, 806, 0, 0, 121, 806, 85,
2844 121, 85, 0, 0, 0, 0, 0, 118, 0, 0,
2845 284, 118, 0, 0, 806, 809, 0, 0, 0, 0,
2846 0, 85, 0, 0, 0, 0, 805, 805, 0, 0,
2847 0, 0, 0, 0, 807, 0, 393, 0, 807, 0,
2848 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2849 806, 806, 0, 0, 807, 0, 118, 0, 0, 118,
2850 810, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2851 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2852 0, 0, 808, 808, 122, 0, 122, 121, 0, 0,
2853 807, 807, 0, 0, 0, 0, 0, 85, 0, 121,
2854 0, 85, 532, 0, 121, 0, 0, 0, 0, 532,
2855 532, 809, 809, 0, 0, 0, 532, 532, 0, 0,
2856 121, 0, 122, 0, 0, 122, 0, 121, 393, 0,
2857 0, 0, 0, 0, 0, 0, 0, 0, 0, 121,
2858 0, 0, 121, 0, 0, 0, 85, 0, 0, 85,
2859 0, 0, 0, 0, 0, 0, 810, 810, 118, 0,
2860 0, 0, 0, 118, 0, 0, 0, 0, 0, 0,
2861 0, 0, 0, 0, 121, 0, 0, 808, 808, 118,
2862 0, 0, 0, 121, 0, 0, 118, 808, 808, 808,
2863 0, 0, 0, 808, 808, 0, 0, 0, 118, 122,
2864 122, 118, 0, 0, 0, 0, 809, 809, 0, 0,
2865 0, 0, 0, 0, 0, 0, 809, 809, 809, 0,
2866 0, 0, 809, 809, 0, 0, 0, 0, 0, 1012,
2867 0, 0, 0, 118, 0, 0, 532, 0, 0, 0,
2868 0, 0, 118, 0, 0, 0, 0, 0, 85, 0,
2869 0, 810, 810, 85, 0, 0, 0, 0, 0, 0,
2870 0, 810, 810, 810, 0, 217, 217, 810, 810, 85,
2871 0, 0, 0, 0, 0, 0, 85, 0, 0, 808,
2872 0, 0, 0, 121, 0, 121, 0, 808, 85, 0,
2873 0, 85, 0, 0, 391, 0, 0, 250, 253, 254,
2874 255, 0, 0, 0, 217, 217, 0, 0, 809, 0,
2875 0, 122, 0, 0, 808, 0, 809, 303, 304, 1010,
2876 0, 121, 0, 85, 121, 0, 0, 0, 0, 0,
2877 0, 0, 85, 0, 0, 0, 0, 0, 23, 24,
2878 25, 26, 118, 809, 118, 0, 0, 0, 0, 217,
2879 0, 0, 0, 810, 32, 33, 34, 0, 0, 0,
2880 0, 810, 0, 0, 41, 42, 43, 44, 45, 0,
2881 0, 808, 0, 0, 0, 0, 0, 0, 0, 0,
2882 118, 0, 0, 118, 0, 0, 391, 0, 810, 0,
2883 0, 0, 0, 0, 0, 0, 0, 0, 121, 121,
2884 809, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2885 0, 0, 0, 0, 0, 792, 59, 60, 61, 62,
2886 63, 64, 65, 66, 0, 0, 0, 0, 0, 0,
2887 0, 0, 85, 0, 85, 0, 0, 0, 0, 0,
2888 0, 0, 0, 0, 279, 810, 0, 808, 0, 0,
2889 0, 808, 0, 0, 0, 0, 217, 118, 118, 217,
2890 217, 217, 0, 303, 0, 0, 0, 808, 0, 0,
2891 85, 0, 0, 85, 0, 0, 809, 0, 0, 217,
2892 809, 217, 217, 0, 0, 0, 0, 0, 0, 0,
2893 0, 0, 0, 0, 0, 0, 809, 0, 0, 0,
2894 0, 0, 0, 808, 808, 0, 0, 0, 0, 0,
2895 121, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2896 0, 810, 0, 0, 0, 810, 0, 0, 0, 0,
2897 0, 0, 809, 809, 0, 0, 0, 0, 0, 0,
2898 0, 810, 0, 0, 0, 0, 0, 85, 85, 0,
2899 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2900 0, 0, 0, 0, 0, 0, 0, 0, 0, 118,
2901 0, 0, 0, 0, 0, 217, 0, 810, 810, 0,
2902 533, 0, 540, 541, 542, 543, 544, 0, 0, 545,
2903 546, 547, 548, 549, 550, 551, 552, 553, 0, 0,
2904 554, 555, 556, 557, 558, 559, 560, 561, 562, 563,
2905 0, 0, 0, 217, 0, 0, 0, 0, 0, 0,
2906 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2907 0, 0, 0, 0, 0, 0, 0, 333, 334, 335,
2908 336, 337, 338, 339, 340, 341, 342, 343, 344, 345,
2909 0, 0, 0, 0, 346, 347, 0, 0, 0, 85,
2910 0, 0, 0, 614, 614, 0, 0, 0, 0, 0,
2911 0, 0, 614, 217, 217, 0, 0, 0, 217, 0,
2912 614, 614, 217, 0, 0, 0, 0, 348, 255, 349,
2913 350, 351, 352, 353, 354, 355, 356, 357, 358, 0,
2914 0, 0, 0, 640, 0, 0, 0, 0, 614, 0,
2915 0, 0, 0, 237, 0, 0, 0, 0, 0, 217,
2916 0, 0, 217, 0, 0, 0, 0, 0, 0, -738,
2917 0, 0, 0, 217, 0, 0, 0, -738, -738, -738,
2918 0, 0, -738, -738, -738, 0, -738, 0, 0, 0,
2919 0, 670, 0, 0, -738, -738, -738, -738, -738, 0,
2920 0, 0, 0, 0, 0, 0, -738, -738, 217, -738,
2921 -738, -738, -738, -738, 0, 0, 0, 0, 0, 0,
2922 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2923 0, 0, 0, 0, 0, 0, 0, -738, 0, 0,
2924 0, 0, 0, 0, 0, 0, -738, -738, -738, -738,
2925 -738, -738, -738, -738, -738, -738, -738, -738, -738, 0,
2926 0, 0, 0, -738, -738, -738, -738, 0, 747, -738,
2927 0, 0, 0, 0, 0, -738, 0, 0, 0, 0,
2928 0, 217, 0, 0, 0, 0, 0, 0, 0, -738,
2929 0, 217, -738, 0, 0, -116, -738, -738, -738, -738,
2930 -738, -738, -738, -738, -738, -738, -738, -738, 217, 0,
2931 217, 0, -738, -738, -738, -738, 0, 0, -738, -738,
2932 -738, 0, -738, 217, 0, 217, 0, 0, 0, -761,
2933 0, 0, 0, 0, 0, 0, 0, -761, -761, -761,
2934 0, 0, -761, -761, -761, 0, -761, 0, 0, 0,
2935 0, 0, 0, 0, -761, -761, -761, 0, 0, 0,
2936 0, 0, 0, 0, 0, 0, -761, -761, 217, -761,
2937 -761, -761, -761, -761, 614, 778, 0, 217, 0, 0,
2938 0, 614, 614, 0, 0, 0, 0, 217, 614, 614,
2939 0, 0, 0, 0, 0, 0, 217, -761, 0, 0,
2940 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2941 0, 217, 0, 0, 0, 0, 0, 0, 0, 0,
2942 0, 0, 0, 0, 0, -761, -761, 0, 0, 0,
2943 0, 0, 0, 0, 0, 0, 614, 614, 0, 614,
2944 614, 23, 24, 25, 26, 0, 0, 0, 0, -761,
2945 0, 0, 0, 0, 0, 0, 0, 32, 33, 34,
2946 784, 0, 217, 0, 785, 0, 986, 41, 42, 43,
2947 44, 45, -761, -761, 0, 0, 0, 233, -761, 0,
2948 -761, 0, -761, 0, 0, 926, 0, 0, 0, 0,
2949 0, 0, 0, 0, 0, 0, 0, 0, 786, 787,
2950 0, 899, 0, 0, 0, 0, 788, 0, 614, 789,
2951 0, 0, 790, 791, 0, 980, 930, 0, 792, 59,
2952 1004, 61, 62, 63, 64, 65, 66, 0, 0, 0,
2953 0, 0, 0, 0, 0, 217, 0, 0, 0, 0,
2954 793, 0, 0, 0, 0, -761, 4, 279, 5, 6,
2955 7, 8, 9, 614, 0, 217, 10, 11, 0, 0,
2956 0, 12, 0, 13, 14, 15, 16, 17, 18, 19,
2957 0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
2958 25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
2959 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
2960 38, 39, 40, 217, 41, 42, 43, 44, 45, 46,
2961 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2962 48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
2963 0, 217, 0, 0, 0, 50, 51, 0, 0, 0,
2964 0, 0, 0, 52, 0, 0, 53, 54, 0, 55,
2965 56, 0, 57, 0, 0, 58, 59, 60, 61, 62,
2966 63, 64, 65, 66, 0, 0, 0, 0, 0, 0,
2967 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2968 0, 0, 0, 0, 67, 68, 69, 0, 0, 0,
2969 0, 0, 0, 0, 0, 0, -761, 0, -761, 0,
2970 0, 0, 0, 0, 0, 0, 0, 0, 217, -631,
2971 0, 0, 0, 0, 0, 0, 0, -631, -631, -631,
2972 0, 217, -631, -631, -631, 0, -631, 0, 0, 0,
2973 0, 686, 0, 0, -631, 0, -631, -631, -631, 0,
2974 0, 0, 0, 0, 0, 0, -631, -631, 0, -631,
2975 -631, -631, -631, -631, 0, 0, 0, 0, 0, 0,
2976 0, 0, 0, 0, 333, 334, 335, 336, 337, 338,
2977 339, 340, 341, 342, 343, 344, 345, -631, 0, 0,
2978 0, 346, 347, 217, 0, 0, -631, -631, -631, -631,
2979 -631, -631, -631, -631, -631, -631, -631, -631, -631, 0,
2980 0, 0, 0, -631, -631, -631, -631, 0, -631, -631,
2981 0, 0, 0, 0, 348, -631, 349, 350, 351, 352,
2982 353, 354, 355, 356, 357, 358, 0, 0, 0, -631,
2983 0, 0, -631, -257, 0, -631, -631, -631, -631, -631,
2984 -631, -631, -631, -631, -631, -631, -631, -631, 0, 0,
2985 0, 0, 0, -631, -631, -631, -634, 0, -631, -631,
2986 -631, 0, -631, 0, -634, -634, -634, 0, 0, -634,
2987 -634, -634, 0, -634, 0, 0, 0, 0, 686, 0,
2988 0, -634, 0, -634, -634, -634, 0, 0, 0, 0,
2989 0, 0, 0, -634, -634, 0, -634, -634, -634, -634,
2990 -634, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2991 0, 333, 334, 335, 336, 337, 338, 339, 340, 341,
2992 342, 343, 344, 345, -634, 0, 0, 0, 346, 347,
2993 0, 0, 0, -634, -634, -634, -634, -634, -634, -634,
2994 -634, -634, -634, -634, -634, -634, 0, 0, 0, 0,
2995 -634, -634, -634, -634, 0, -634, -634, 0, 0, 0,
2996 0, 348, -634, 349, 350, 351, 352, 353, 354, 355,
2997 356, 357, 358, 0, 0, 0, -634, 0, 0, -634,
2998 0, 0, -634, -634, -634, -634, -634, -634, -634, -634,
2999 -634, -634, -634, -634, -634, 0, 0, 0, 0, 0,
3000 -634, -634, -634, -739, 0, -634, -634, -634, 0, -634,
3001 0, -739, -739, -739, 0, 0, -739, -739, -739, 0,
3002 -739, 0, 0, 0, 0, 0, 0, 0, -739, -739,
3003 -739, -739, -739, 0, 0, 0, 0, 0, 0, 0,
3004 -739, -739, 0, -739, -739, -739, -739, -739, 0, 0,
3005 0, 0, 0, 0, 0, 0, 0, 0, 333, 334,
3006 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
3007 345, -739, 0, 0, 0, 346, 347, 0, 0, 0,
3008 -739, -739, -739, -739, -739, -739, -739, -739, -739, -739,
3009 -739, -739, -739, 0, 0, 0, 0, -739, -739, -739,
3010 -739, 0, 0, -739, 0, 0, 0, 0, 348, -739,
3011 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
3012 0, 0, 0, -739, 0, 0, -739, 0, 0, 0,
3013 -739, -739, -739, -739, -739, -739, -739, -739, -739, -739,
3014 -739, -739, 0, 0, 0, 0, -739, -739, -739, -739,
3015 -740, 0, -739, -739, -739, 0, -739, 0, -740, -740,
3016 -740, 0, 0, -740, -740, -740, 0, -740, 0, 0,
3017 0, 0, 0, 0, 0, -740, -740, -740, -740, -740,
3018 0, 0, 0, 0, 0, 0, 0, -740, -740, 0,
3019 -740, -740, -740, -740, -740, 0, 0, 0, 0, 0,
3020 0, 0, 0, 0, 0, 333, 334, 335, 336, 337,
3021 338, 339, 340, 341, 342, 343, -762, -762, -740, 0,
3022 0, 0, 346, 347, 0, 0, 0, -740, -740, -740,
3023 -740, -740, -740, -740, -740, -740, -740, -740, -740, -740,
3024 0, 0, 0, 0, -740, -740, -740, -740, 0, 0,
3025 -740, 0, 0, 0, 0, 0, -740, 349, 350, 351,
3026 352, 353, 354, 355, 356, 357, 358, 0, 0, 0,
3027 -740, 0, 0, -740, 0, 0, 0, -740, -740, -740,
3028 -740, -740, -740, -740, -740, -740, -740, -740, -740, 0,
3029 0, 0, 0, -740, -740, -740, -740, -311, 0, -740,
3030 -740, -740, 0, -740, 0, -311, -311, -311, 0, 0,
3031 -311, -311, -311, 0, -311, 0, 0, 0, 0, 0,
3032 0, 0, -311, 0, -311, -311, -311, 0, 0, 0,
3033 0, 0, 0, 0, -311, -311, 0, -311, -311, -311,
3034 -311, -311, 0, 0, 0, 0, 0, 0, 0, 0,
3035 0, 0, 333, 334, 335, 336, 337, 338, 339, 340,
3036 0, 342, 343, 0, 0, -311, 0, 0, 0, 346,
3037 347, 0, 0, 0, -311, -311, -311, -311, -311, -311,
3038 -311, -311, -311, -311, -311, -311, -311, 0, 0, 0,
3039 0, -311, -311, -311, -311, 0, 748, -311, 0, 0,
3040 0, 0, 0, -311, 349, 350, 351, 352, 353, 354,
3041 355, 356, 357, 358, 0, 0, 0, -311, 0, 0,
3042 -311, 0, 0, -118, -311, -311, -311, -311, -311, -311,
3043 -311, -311, -311, -311, -311, -311, 0, 0, 0, 0,
3044 0, -311, -311, -311, -450, 0, -311, -311, -311, 0,
3045 -311, 0, -450, -450, -450, 0, 0, -450, -450, -450,
3046 0, -450, 0, 0, 0, 0, 0, 0, 0, -450,
3047 -450, -450, -450, 0, 0, 0, 0, 0, 0, 0,
3048 0, -450, -450, 0, -450, -450, -450, -450, -450, 0,
3049 0, 0, 0, 0, 0, 0, 0, 0, 0, 333,
3050 -762, -762, -762, -762, 338, 339, 0, 0, -762, -762,
3051 0, 0, -450, 0, 0, 0, 346, 347, 0, 0,
3052 0, -450, -450, -450, -450, -450, -450, -450, -450, -450,
3053 -450, -450, -450, -450, 0, 0, 0, 0, -450, -450,
3054 -450, -450, 0, 0, -450, 0, 0, 0, 0, 0,
3055 -450, 349, 350, 351, 352, 353, 354, 355, 356, 357,
3056 358, 0, 0, 0, -450, 0, 0, 0, 0, 0,
3057 0, -450, 0, -450, -450, -450, -450, -450, -450, -450,
3058 -450, -450, -450, 0, 0, 0, 0, -450, -450, -450,
3059 -450, -303, 233, -450, -450, -450, 0, -450, 0, -303,
3060 -303, -303, 0, 0, -303, -303, -303, 0, -303, 0,
3061 0, 0, 0, 0, 0, 0, -303, 0, -303, -303,
3062 -303, 0, 0, 0, 0, 0, 0, 0, -303, -303,
3063 0, -303, -303, -303, -303, -303, 0, 0, 0, 0,
3064 0, 0, 0, 0, 0, 0, 333, 334, 335, 336,
3065 337, 338, 339, 0, 0, 342, 343, 0, 0, -303,
3066 0, 0, 0, 346, 347, 0, 0, 0, -303, -303,
3067 -303, -303, -303, -303, -303, -303, -303, -303, -303, -303,
3068 -303, 0, 0, 0, 0, -303, -303, -303, -303, 0,
3069 0, -303, 0, 0, 0, 0, 0, -303, 349, 350,
3070 351, 352, 353, 354, 355, 356, 357, 358, 0, 0,
3071 0, -303, 0, 0, -303, 0, 0, 0, -303, -303,
3072 -303, -303, -303, -303, -303, -303, -303, -303, -303, -303,
3073 0, 0, 0, 0, 0, -303, -303, -303, -761, 0,
3074 -303, -303, -303, 0, -303, 0, -761, -761, -761, 0,
3075 0, -761, -761, -761, 0, -761, 0, 0, 0, 0,
3076 0, 0, 0, -761, -761, -761, -761, 0, 0, 0,
3077 0, 0, 0, 0, 0, -761, -761, 0, -761, -761,
3078 -761, -761, -761, 0, 0, 0, 0, 0, 0, 0,
3079 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3080 0, 0, 0, 0, 0, 0, -761, 0, 0, 0,
3081 0, 0, 0, 0, 0, -761, -761, -761, -761, -761,
3082 -761, -761, -761, -761, -761, -761, -761, -761, 0, 0,
3083 0, 0, -761, -761, -761, -761, 0, 0, -761, 0,
3084 0, 0, 0, 0, -761, 0, 0, 0, 0, 0,
3085 0, 0, 0, 0, 0, 0, 0, 0, -761, 0,
3086 0, 0, 0, 0, 0, -761, 0, -761, -761, -761,
3087 -761, -761, -761, -761, -761, -761, -761, 0, 0, 0,
3088 0, -761, -761, -761, -761, -318, 233, -761, -761, -761,
3089 0, -761, 0, -318, -318, -318, 0, 0, -318, -318,
3090 -318, 0, -318, 0, 0, 0, 0, 0, 0, 0,
3091 -318, 0, -318, -318, 0, 0, 0, 0, 0, 0,
3092 0, 0, -318, -318, 0, -318, -318, -318, -318, -318,
3093 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3094 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3095 0, 0, 0, -318, 0, 0, 0, 0, 0, 0,
3096 0, 0, -318, -318, -318, -318, -318, -318, -318, -318,
3097 -318, -318, -318, -318, -318, 0, 0, 0, 0, -318,
3098 -318, -318, -318, 0, 0, -318, 0, 0, 0, 0,
3099 0, -318, 0, 0, 0, 0, 0, 0, 0, 0,
3100 0, 0, 0, 0, 0, -318, 0, 0, 0, 0,
3101 0, 0, -318, 0, -318, -318, -318, -318, -318, -318,
3102 -318, -318, -318, -318, 0, 0, 0, 0, 0, -318,
3103 -318, -318, -738, 230, -318, -318, -318, 0, -318, 0,
3104 -738, -738, -738, 0, 0, 0, -738, -738, 0, -738,
3105 0, 0, 0, 0, 0, 0, 0, -738, -738, 0,
3106 0, 0, 0, 0, 0, 0, 0, 0, 0, -738,
3107 -738, 0, -738, -738, -738, -738, -738, 0, 0, 0,
3108 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3109 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3110 -738, 0, 0, 0, 0, 0, 0, 0, 0, -738,
3111 -738, -738, -738, -738, -738, -738, -738, -738, -738, -738,
3112 -738, -738, 0, 0, 0, 0, -738, -738, -738, -738,
3113 0, 692, 0, 0, 0, 0, 0, 0, 0, 0,
3114 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3115 0, 0, -738, 0, 0, 0, 0, 0, -116, -738,
3116 0, -738, -738, -738, -738, -738, -738, -738, -738, -738,
3117 -738, 0, 0, 0, 0, -738, -738, -738, -107, -738,
3118 0, -738, 0, -738, 0, -738, 0, -738, -738, -738,
3119 0, 0, 0, -738, -738, 0, -738, 0, 0, 0,
3120 0, 0, 0, 0, -738, -738, 0, 0, 0, 0,
3121 0, 0, 0, 0, 0, 0, -738, -738, 0, -738,
3122 -738, -738, -738, -738, 0, 0, 0, 0, 0, 0,
3123 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3124 0, 0, 0, 0, 0, 0, 0, -738, 0, 0,
3125 0, 0, 0, 0, 0, 0, -738, -738, -738, -738,
3126 -738, -738, -738, -738, -738, -738, -738, -738, -738, 0,
3127 0, 0, 0, -738, -738, -738, -738, 0, 692, 0,
3128 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3129 0, 0, 0, 0, 0, 0, 0, 0, 0, -738,
3130 0, 0, 0, 0, 0, -116, -738, 0, -738, -738,
3131 -738, -738, -738, -738, -738, -738, -738, -738, 0, 0,
3132 0, 0, -738, -738, -738, -738, -311, 0, -738, 0,
3133 -738, 0, -738, 0, -311, -311, -311, 0, 0, 0,
3134 -311, -311, 0, -311, 0, 0, 0, 0, 0, 0,
3135 0, -311, 0, 0, 0, 0, 0, 0, 0, 0,
3136 0, 0, 0, -311, -311, 0, -311, -311, -311, -311,
3137 -311, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3138 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3139 0, 0, 0, 0, -311, 0, 0, 0, 0, 0,
3140 0, 0, 0, -311, -311, -311, -311, -311, -311, -311,
3141 -311, -311, -311, -311, -311, -311, 0, 0, 0, 0,
3142 -311, -311, -311, -311, 0, 693, 0, 0, 0, 0,
3143 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3144 0, 0, 0, 0, 0, 0, -311, 0, 0, 0,
3145 0, 0, -118, -311, 0, -311, -311, -311, -311, -311,
3146 -311, -311, -311, -311, -311, 0, 0, 0, 0, 0,
3147 -311, -311, -109, -311, 0, -311, 0, -311, 0, -311,
3148 0, -311, -311, -311, 0, 0, 0, -311, -311, 0,
3149 -311, 0, 0, 0, 0, 0, 0, 0, -311, 0,
3150 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3151 -311, -311, 0, -311, -311, -311, -311, -311, 0, 0,
3152 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3153 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3154 0, -311, 0, 0, 0, 0, 0, 0, 0, 0,
3155 -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
3156 -311, -311, -311, 0, 0, 0, 0, -311, -311, -311,
3157 -311, 0, 693, 0, 0, 0, 0, 0, 0, 0,
3158 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3159 0, 0, 0, -311, 0, 0, 0, 0, 0, -118,
3160 -311, 0, -311, -311, -311, -311, -311, -311, -311, -311,
3161 -311, -311, 0, 0, 0, 0, 0, -311, -311, -311,
3162 0, 0, -311, 0, -311, 257, -311, 5, 6, 7,
3163 8, 9, -761, -761, -761, 10, 11, 0, 0, -761,
3164 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
3165 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
3166 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
3167 29, 258, 31, 32, 33, 34, 35, 36, 37, 38,
3168 39, 40, 0, 41, 42, 43, 44, 45, 46, 47,
3169 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
3170 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3171 0, 0, 0, 0, 50, 51, 0, 0, 0, 0,
3172 0, 0, 52, 0, 0, 53, 54, 0, 55, 56,
3173 0, 57, 0, 0, 58, 59, 60, 61, 62, 63,
3174 64, 65, 66, 0, 0, 0, 0, 0, 0, 0,
3175 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3176 0, 0, 0, 67, 68, 69, 0, 0, 0, 0,
3177 0, 0, 0, 0, 0, -761, 257, -761, 5, 6,
3178 7, 8, 9, 0, 0, -761, 10, 11, 0, -761,
3179 -761, 12, 0, 13, 14, 15, 16, 17, 18, 19,
3180 0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
3181 25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
3182 28, 29, 258, 31, 32, 33, 34, 35, 36, 37,
3183 38, 39, 40, 0, 41, 42, 43, 44, 45, 46,
3184 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3185 48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
3186 0, 0, 0, 0, 0, 50, 51, 0, 0, 0,
3187 0, 0, 0, 52, 0, 0, 53, 54, 0, 55,
3188 56, 0, 57, 0, 0, 58, 59, 60, 61, 62,
3189 63, 64, 65, 66, 0, 0, 0, 0, 0, 0,
3190 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3191 0, 0, 0, 0, 67, 68, 69, 0, 0, 0,
3192 0, 0, 0, 0, 0, 0, -761, 257, -761, 5,
3193 6, 7, 8, 9, 0, 0, -761, 10, 11, 0,
3194 0, -761, 12, -761, 13, 14, 15, 16, 17, 18,
3195 19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
3196 24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
3197 0, 28, 29, 258, 31, 32, 33, 34, 35, 36,
3198 37, 38, 39, 40, 0, 41, 42, 43, 44, 45,
3199 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
3200 0, 48, 49, 0, 0, 0, 0, 0, 0, 0,
3201 0, 0, 0, 0, 0, 0, 50, 51, 0, 0,
3202 0, 0, 0, 0, 52, 0, 0, 53, 54, 0,
3203 55, 56, 0, 57, 0, 0, 58, 59, 60, 61,
3204 62, 63, 64, 65, 66, 0, 0, 0, 0, 0,
3205 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3206 0, 0, 0, 0, 0, 67, 68, 69, 0, 0,
3207 0, 0, 0, 0, 0, 0, 0, -761, 257, -761,
3208 5, 6, 7, 8, 9, 0, 0, -761, 10, 11,
3209 0, 0, -761, 12, 0, 13, 14, 15, 16, 17,
3210 18, 19, -761, 0, 0, 0, 0, 20, 21, 22,
3211 23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
3212 0, 0, 28, 29, 258, 31, 32, 33, 34, 35,
3213 36, 37, 38, 39, 40, 0, 41, 42, 43, 44,
3214 45, 46, 47, 0, 0, 0, 0, 0, 0, 0,
3215 0, 0, 48, 49, 0, 0, 0, 0, 0, 0,
3216 0, 0, 0, 0, 0, 0, 0, 50, 51, 0,
3217 0, 0, 0, 0, 0, 52, 0, 0, 53, 54,
3218 0, 55, 56, 0, 57, 0, 0, 58, 59, 60,
3219 61, 62, 63, 64, 65, 66, 0, 0, 0, 0,
3220 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3221 0, 0, 0, 0, 0, 0, 67, 68, 69, 0,
3222 0, 0, 0, 0, 0, 0, 0, 0, -761, 257,
3223 -761, 5, 6, 7, 8, 9, 0, 0, -761, 10,
3224 11, 0, 0, -761, 12, 0, 13, 14, 15, 16,
3225 17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
3226 22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
3227 0, 0, 0, 28, 29, 258, 31, 32, 33, 34,
3228 35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
3229 44, 45, 46, 47, 0, 0, 0, 0, 0, 0,
3230 0, 0, 0, 48, 49, 0, 0, 0, 0, 0,
3231 0, 0, 0, 0, 0, 0, 0, 0, 50, 51,
3232 0, 0, 0, 0, 0, 0, 52, 0, 0, 53,
3233 54, 0, 55, 56, 0, 57, 0, 0, 58, 59,
3234 60, 61, 62, 63, 64, 65, 66, 0, 0, 0,
3235 0, 0, 0, 0, 0, 257, 0, 5, 6, 7,
3236 8, 9, 0, -761, -761, 10, 11, 67, 68, 69,
3237 12, 0, 13, 14, 15, 16, 17, 18, 19, -761,
3238 0, -761, 0, 0, 20, 21, 22, 23, 24, 25,
3239 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
3240 29, 258, 31, 32, 33, 34, 35, 36, 37, 38,
3241 39, 40, 0, 41, 42, 43, 44, 45, 46, 47,
3242 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
3243 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3244 0, 0, 0, 0, 50, 51, 0, 0, 0, 0,
3245 0, 0, 52, 0, 0, 53, 54, 0, 55, 56,
3246 0, 57, 0, 0, 58, 59, 60, 61, 62, 63,
3247 64, 65, 66, 0, 0, 0, 0, 0, 0, 0,
3248 0, 257, 0, 5, 6, 7, 8, 9, 0, 0,
3249 0, 10, 11, 67, 68, 69, 12, 0, 13, 14,
3250 15, 16, 17, 18, 19, -761, 0, -761, 0, 0,
3251 20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
3252 0, 0, 0, 0, 0, 28, 29, 258, 31, 32,
3253 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
3254 42, 43, 44, 45, 46, 47, 0, 0, 0, 0,
3255 0, 0, 0, 0, 0, 48, 49, 0, 0, 0,
3256 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3257 50, 51, 0, 0, 0, 0, 0, 0, 52, 0,
3258 0, 259, 54, 0, 55, 56, 0, 57, 0, 0,
3259 58, 59, 60, 61, 62, 63, 64, 65, 66, 0,
3260 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3261 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,
3262 68, 69, 0, 0, 0, 0, 0, 0, 0, -761,
3263 0, -761, 257, -761, 5, 6, 7, 8, 9, 0,
3264 0, 0, 10, 11, 0, 0, 0, 12, 0, 13,
3265 14, 15, 16, 17, 18, 19, 0, 0, 0, 0,
3266 0, 20, 21, 22, 23, 24, 25, 26, 0, 0,
3267 27, 0, 0, 0, 0, 0, 28, 29, 258, 31,
3268 32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
3269 41, 42, 43, 44, 45, 46, 47, 0, 0, 0,
3270 0, 0, 0, 0, 0, 0, 48, 49, 0, 0,
3271 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3272 0, 50, 51, 0, 0, 0, 0, 0, 0, 52,
3273 0, 0, 53, 54, 0, 55, 56, 0, 57, 0,
3274 0, 58, 59, 60, 61, 62, 63, 64, 65, 66,
3275 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3276 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3277 67, 68, 69, 0, 0, 0, 0, 0, 0, 0,
3278 -761, 0, -761, 4, -761, 5, 6, 7, 8, 9,
3279 0, 0, 0, 10, 11, 0, 0, 0, 12, 0,
3280 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
3281 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
3282 0, 27, 0, 0, 0, 0, 0, 28, 29, 30,
3283 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
3284 0, 41, 42, 43, 44, 45, 46, 47, 0, 0,
3285 0, 0, 0, 0, 0, 0, 0, 48, 49, 0,
3286 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3287 0, 0, 50, 51, 0, 0, 0, 0, 0, 0,
3288 52, 0, 0, 53, 54, 0, 55, 56, 0, 57,
3289 0, 0, 58, 59, 60, 61, 62, 63, 64, 65,
3290 66, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3291 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3292 0, 67, 68, 69, 0, 0, -761, 0, 0, 0,
3293 0, 0, 0, -761, 257, -761, 5, 6, 7, 8,
3294 9, 0, 0, 0, 10, 11, 0, 0, 0, 12,
3295 0, 13, 14, 15, 16, 17, 18, 19, 0, 0,
3296 0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
3297 0, 0, 27, 0, 0, 0, 0, 0, 28, 29,
3298 258, 31, 32, 33, 34, 35, 36, 37, 38, 39,
3299 40, 0, 41, 42, 43, 44, 45, 46, 47, 0,
3300 0, 0, 0, 0, 0, 0, 0, 0, 48, 49,
3301 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3302 0, 0, 0, 50, 51, 0, 0, 0, 0, 0,
3303 0, 52, 0, 0, 53, 54, 0, 55, 56, 0,
3304 57, 0, 0, 58, 59, 60, 61, 62, 63, 64,
3305 65, 66, 0, 0, 0, 0, 0, 0, 0, 0,
3306 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3307 0, 0, 67, 68, 69, 0, 0, -761, 0, 0,
3308 0, 0, 0, 0, -761, 257, -761, 5, 6, 7,
3309 8, 9, 0, 0, -761, 10, 11, 0, 0, 0,
3310 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
3311 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
3312 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
3313 29, 258, 31, 32, 33, 34, 35, 36, 37, 38,
3314 39, 40, 0, 41, 42, 43, 44, 45, 46, 47,
3315 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
3316 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3317 0, 0, 0, 0, 50, 51, 0, 0, 0, 0,
3318 0, 0, 52, 0, 0, 53, 54, 0, 55, 56,
3319 0, 57, 0, 0, 58, 59, 60, 61, 62, 63,
3320 64, 65, 66, 0, 0, 0, 0, 0, 0, 0,
3321 0, 257, 0, 5, 6, 7, 8, 9, 0, 0,
3322 0, 10, 11, 67, 68, 69, 12, 0, 13, 14,
3323 15, 16, 17, 18, 19, -761, 0, -761, 0, 0,
3324 20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
3325 0, 0, 0, 0, 0, 28, 29, 258, 31, 32,
3326 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
3327 42, 43, 44, 45, 46, 47, 0, 0, 0, 0,
3328 0, 0, 0, 0, 0, 48, 49, 0, 0, 0,
3329 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3330 50, 51, 0, 0, 0, 0, 0, 0, 52, 0,
3331 0, 53, 54, 0, 55, 56, 0, 57, 0, 0,
3332 58, 59, 60, 61, 62, 63, 64, 65, 66, 0,
3333 -761, 0, 0, 0, 0, 0, 0, 0, 0, 5,
3334 6, 7, 0, 9, 0, 0, 0, 10, 11, 67,
3335 68, 69, 12, 0, 13, 14, 15, 16, 17, 18,
3336 19, -761, 0, -761, 0, 0, 20, 21, 22, 23,
3337 24, 25, 26, 0, 0, 206, 0, 0, 0, 0,
3338 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
3339 37, 38, 39, 40, 207, 41, 42, 43, 44, 45,
3340 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
3341 0, 48, 49, 0, 0, 0, 0, 0, 0, 0,
3342 0, 0, 0, 0, 0, 0, 50, 51, 0, 0,
3343 0, 0, 0, 0, 208, 0, 0, 209, 54, 0,
3344 55, 56, 0, 210, 211, 212, 58, 59, 213, 61,
3345 62, 63, 64, 65, 66, 0, 0, 0, 0, 0,
3346 0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
3347 0, 0, 0, 10, 11, 67, 214, 69, 12, 0,
3348 13, 14, 15, 16, 17, 18, 19, 0, 0, 237,
3349 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
3350 0, 27, 0, 0, 0, 0, 0, 0, 29, 0,
3351 0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
3352 0, 41, 42, 43, 44, 45, 46, 47, 0, 0,
3353 0, 0, 0, 0, 0, 0, 0, 48, 49, 0,
3354 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3355 0, 0, 50, 51, 0, 0, 0, 0, 0, 0,
3356 208, 0, 0, 209, 54, 0, 55, 56, 0, 0,
3357 0, 0, 58, 59, 60, 61, 62, 63, 64, 65,
3358 66, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3359 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
3360 11, 67, 68, 69, 12, 0, 13, 14, 15, 16,
3361 17, 18, 19, 305, 0, 306, 0, 0, 20, 21,
3362 22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
3363 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
3364 35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
3365 44, 45, 46, 47, 0, 0, 0, 0, 0, 0,
3366 0, 0, 0, 48, 49, 0, 0, 0, 0, 0,
3367 0, 0, 0, 0, 0, 0, 0, 0, 50, 51,
3368 0, 0, 0, 0, 0, 0, 208, 0, 0, 209,
3369 54, 0, 55, 56, 0, 0, 0, 0, 58, 59,
3370 60, 61, 62, 63, 64, 65, 66, 0, 0, 0,
3371 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
3372 8, 9, 0, 0, 0, 10, 11, 67, 68, 69,
3373 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
3374 0, 237, 0, 0, 20, 21, 22, 23, 24, 25,
3375 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
3376 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
3377 39, 40, 0, 41, 42, 43, 44, 45, 46, 47,
3378 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
3379 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3380 0, 0, 0, 0, 50, 51, 0, 0, 0, 0,
3381 0, 0, 52, 0, 0, 53, 54, 0, 55, 56,
3382 0, 57, 0, 0, 58, 59, 60, 61, 62, 63,
3383 64, 65, 66, 0, 0, 0, 0, 0, 0, 0,
3384 0, 0, 0, 5, 6, 7, 8, 9, 0, 0,
3385 0, 10, 11, 67, 68, 69, 12, 0, 13, 14,
3386 15, 16, 17, 18, 19, 503, 0, 0, 0, 0,
3387 20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
3388 0, 0, 0, 0, 0, 28, 29, 258, 31, 32,
3389 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
3390 42, 43, 44, 45, 46, 47, 0, 0, 0, 0,
3391 0, 0, 0, 0, 0, 48, 49, 0, 0, 0,
3392 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3393 50, 51, 0, 0, 0, 0, 0, 0, 52, 0,
3394 0, 53, 54, 0, 55, 56, 0, 57, 0, 0,
3395 58, 59, 60, 61, 62, 63, 64, 65, 66, 0,
3396 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3397 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,
3398 68, 69, 0, 0, 0, 0, 0, 0, 0, 0,
3399 0, 503, 126, 127, 128, 129, 130, 131, 132, 133,
3400 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
3401 144, 145, 146, 147, 148, 149, 0, 0, 0, 150,
3402 151, 152, 395, 396, 397, 398, 157, 158, 159, 0,
3403 0, 0, 0, 0, 160, 161, 162, 163, 399, 400,
3404 401, 402, 168, 37, 38, 403, 40, 0, 0, 0,
3405 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3406 0, 0, 0, 0, 170, 171, 172, 173, 174, 175,
3407 176, 177, 178, 0, 0, 179, 180, 0, 0, 0,
3408 0, 181, 182, 183, 184, 0, 0, 0, 0, 0,
3409 0, 0, 0, 0, 0, 0, 185, 186, 0, 0,
3410 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3411 0, 0, 0, 0, 0, 0, 0, 0, 187, 188,
3412 189, 190, 191, 192, 193, 194, 195, 196, 0, 197,
3413 198, 0, 0, 0, 0, 0, 199, 404, 126, 127,
3414 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
3415 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
3416 148, 149, 0, 0, 0, 150, 151, 152, 153, 154,
3417 155, 156, 157, 158, 159, 0, 0, 0, 0, 0,
3418 160, 161, 162, 163, 164, 165, 166, 167, 168, 288,
3419 289, 169, 290, 0, 0, 0, 0, 0, 0, 0,
3420 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3421 170, 171, 172, 173, 174, 175, 176, 177, 178, 0,
3422 0, 179, 180, 0, 0, 0, 0, 181, 182, 183,
3423 184, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3424 0, 0, 185, 186, 0, 0, 0, 0, 0, 0,
3425 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3426 0, 0, 0, 0, 187, 188, 189, 190, 191, 192,
3427 193, 194, 195, 196, 0, 197, 198, 0, 0, 0,
3428 0, 0, 199, 126, 127, 128, 129, 130, 131, 132,
3429 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
3430 143, 144, 145, 146, 147, 148, 149, 0, 0, 0,
3431 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
3432 0, 0, 0, 0, 0, 160, 161, 162, 163, 164,
3433 165, 166, 167, 168, 239, 0, 169, 0, 0, 0,
3434 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3435 0, 0, 0, 0, 0, 170, 171, 172, 173, 174,
3436 175, 176, 177, 178, 0, 0, 179, 180, 0, 0,
3437 0, 0, 181, 182, 183, 184, 0, 0, 0, 0,
3438 0, 0, 0, 0, 0, 0, 0, 185, 186, 0,
3439 0, 59, 0, 0, 0, 0, 0, 0, 0, 0,
3440 0, 0, 0, 0, 0, 0, 0, 0, 0, 187,
3441 188, 189, 190, 191, 192, 193, 194, 195, 196, 0,
3442 197, 198, 0, 0, 0, 0, 0, 199, 126, 127,
3443 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
3444 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
3445 148, 149, 0, 0, 0, 150, 151, 152, 153, 154,
3446 155, 156, 157, 158, 159, 0, 0, 0, 0, 0,
3447 160, 161, 162, 163, 164, 165, 166, 167, 168, 0,
3448 0, 169, 0, 0, 0, 0, 0, 0, 0, 0,
3449 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3450 170, 171, 172, 173, 174, 175, 176, 177, 178, 0,
3451 0, 179, 180, 0, 0, 0, 0, 181, 182, 183,
3452 184, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3453 0, 0, 185, 186, 0, 0, 59, 0, 0, 0,
3454 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3455 0, 0, 0, 0, 187, 188, 189, 190, 191, 192,
3456 193, 194, 195, 196, 0, 197, 198, 0, 0, 0,
3457 0, 0, 199, 126, 127, 128, 129, 130, 131, 132,
3458 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
3459 143, 144, 145, 146, 147, 148, 149, 0, 0, 0,
3460 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
3461 0, 0, 0, 0, 0, 160, 161, 162, 163, 164,
3462 165, 166, 167, 168, 0, 0, 169, 0, 0, 0,
3463 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3464 0, 0, 0, 0, 0, 170, 171, 172, 173, 174,
3465 175, 176, 177, 178, 0, 0, 179, 180, 0, 0,
3466 0, 0, 181, 182, 183, 184, 0, 0, 0, 0,
3467 0, 0, 0, 0, 0, 0, 0, 185, 186, 0,
3468 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3469 0, 0, 0, 0, 0, 0, 0, 0, 0, 187,
3470 188, 189, 190, 191, 192, 193, 194, 195, 196, 0,
3471 197, 198, 5, 6, 7, 0, 9, 199, 0, 0,
3472 10, 11, 0, 0, 0, 12, 0, 13, 14, 15,
3473 245, 246, 18, 19, 0, 0, 0, 0, 0, 20,
3474 247, 248, 23, 24, 25, 26, 0, 0, 206, 0,
3475 0, 0, 0, 0, 0, 277, 0, 0, 32, 33,
3476 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
3477 43, 44, 45, 46, 47, 0, 0, 0, 0, 0,
3478 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3479 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3480 0, 0, 0, 0, 0, 0, 0, 278, 0, 0,
3481 209, 54, 0, 55, 56, 0, 0, 0, 0, 58,
3482 59, 60, 61, 62, 63, 64, 65, 66, 0, 0,
3483 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3484 0, 5, 6, 7, 0, 9, 0, 0, 279, 10,
3485 11, 0, 0, 0, 12, 280, 13, 14, 15, 245,
3486 246, 18, 19, 0, 0, 0, 0, 0, 20, 247,
3487 248, 23, 24, 25, 26, 0, 0, 206, 0, 0,
3488 0, 0, 0, 0, 277, 0, 0, 32, 33, 34,
3489 35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
3490 44, 45, 46, 47, 0, 0, 0, 0, 0, 0,
3491 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3492 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3493 0, 0, 0, 0, 0, 0, 278, 0, 0, 209,
3494 54, 0, 55, 56, 0, 0, 0, 0, 58, 59,
3495 60, 61, 62, 63, 64, 65, 66, 0, 0, 0,
3496 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3497 5, 6, 7, 8, 9, 0, 0, 279, 10, 11,
3498 0, 0, 0, 12, 526, 13, 14, 15, 16, 17,
3499 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
3500 23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
3501 0, 0, 28, 29, 30, 31, 32, 33, 34, 35,
3502 36, 37, 38, 39, 40, 0, 41, 42, 43, 44,
3503 45, 46, 47, 0, 0, 0, 0, 0, 0, 0,
3504 0, 0, 48, 49, 0, 0, 0, 0, 0, 0,
3505 0, 0, 0, 0, 0, 0, 0, 50, 51, 0,
3506 0, 0, 0, 0, 0, 52, 0, 0, 53, 54,
3507 0, 55, 56, 0, 57, 0, 0, 58, 59, 60,
3508 61, 62, 63, 64, 65, 66, 0, 0, 0, 0,
3509 0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
3510 9, 0, 0, 0, 10, 11, 67, 68, 69, 12,
3511 0, 13, 14, 15, 16, 17, 18, 19, 0, 0,
3512 0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
3513 0, 0, 206, 0, 0, 0, 0, 0, 0, 29,
3514 0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
3515 40, 207, 41, 42, 43, 44, 45, 46, 47, 0,
3516 0, 0, 0, 0, 0, 0, 0, 0, 48, 49,
3517 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3518 0, 0, 0, 50, 51, 0, 0, 0, 0, 0,
3519 0, 208, 0, 0, 209, 54, 0, 55, 56, 0,
3520 210, 211, 212, 58, 59, 213, 61, 62, 63, 64,
3521 65, 66, 0, 0, 0, 0, 0, 0, 0, 0,
3522 0, 0, 5, 6, 7, 8, 9, 0, 0, 0,
3523 10, 11, 67, 214, 69, 12, 0, 13, 14, 15,
3524 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
3525 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
3526 0, 0, 0, 0, 28, 29, 0, 31, 32, 33,
3527 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
3528 43, 44, 45, 46, 47, 0, 0, 0, 0, 0,
3529 0, 0, 0, 0, 48, 49, 0, 0, 0, 0,
3530 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,
3531 51, 0, 0, 0, 0, 0, 0, 52, 0, 0,
3532 53, 54, 0, 55, 56, 0, 57, 0, 0, 58,
3533 59, 60, 61, 62, 63, 64, 65, 66, 0, 0,
3534 0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
3535 7, 0, 9, 0, 0, 0, 10, 11, 67, 68,
3536 69, 12, 0, 13, 14, 15, 16, 17, 18, 19,
3537 0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
3538 25, 26, 0, 0, 206, 0, 0, 0, 0, 0,
3539 0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
3540 38, 39, 40, 207, 41, 42, 43, 44, 45, 46,
3541 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3542 48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
3543 0, 0, 0, 0, 0, 50, 439, 0, 0, 0,
3544 0, 0, 0, 208, 0, 0, 209, 54, 0, 55,
3545 56, 0, 210, 211, 212, 58, 59, 213, 61, 62,
3546 63, 64, 65, 66, 0, 0, 0, 0, 0, 0,
3547 0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
3548 0, 0, 10, 11, 67, 214, 69, 12, 0, 13,
3549 14, 15, 245, 246, 18, 19, 0, 0, 0, 0,
3550 0, 20, 247, 248, 23, 24, 25, 26, 0, 0,
3551 206, 0, 0, 0, 0, 0, 0, 29, 0, 0,
3552 32, 33, 34, 35, 36, 37, 38, 39, 40, 207,
3553 41, 42, 43, 44, 45, 46, 47, 0, 0, 0,
3554 0, 0, 0, 0, 0, 0, 48, 49, 0, 0,
3555 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3556 0, 50, 51, 0, 0, 0, 0, 0, 0, 208,
3557 0, 0, 209, 54, 0, 55, 56, 0, 621, 211,
3558 212, 58, 59, 213, 61, 62, 63, 64, 65, 66,
3559 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3560 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
3561 67, 214, 69, 12, 0, 13, 14, 15, 245, 246,
3562 18, 19, 0, 0, 0, 0, 0, 20, 247, 248,
3563 23, 24, 25, 26, 0, 0, 206, 0, 0, 0,
3564 0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
3565 36, 37, 38, 39, 40, 207, 41, 42, 43, 44,
3566 45, 46, 47, 0, 0, 0, 0, 0, 0, 0,
3567 0, 0, 48, 49, 0, 0, 0, 0, 0, 0,
3568 0, 0, 0, 0, 0, 0, 0, 50, 439, 0,
3569 0, 0, 0, 0, 0, 208, 0, 0, 209, 54,
3570 0, 55, 56, 0, 621, 211, 212, 58, 59, 213,
3571 61, 62, 63, 64, 65, 66, 0, 0, 0, 0,
3572 0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
3573 9, 0, 0, 0, 10, 11, 67, 214, 69, 12,
3574 0, 13, 14, 15, 245, 246, 18, 19, 0, 0,
3575 0, 0, 0, 20, 247, 248, 23, 24, 25, 26,
3576 0, 0, 206, 0, 0, 0, 0, 0, 0, 29,
3577 0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
3578 40, 207, 41, 42, 43, 44, 45, 46, 47, 0,
3579 0, 0, 0, 0, 0, 0, 0, 0, 48, 49,
3580 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3581 0, 0, 0, 50, 51, 0, 0, 0, 0, 0,
3582 0, 208, 0, 0, 209, 54, 0, 55, 56, 0,
3583 210, 211, 0, 58, 59, 213, 61, 62, 63, 64,
3584 65, 66, 0, 0, 0, 0, 0, 0, 0, 0,
3585 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
3586 10, 11, 67, 214, 69, 12, 0, 13, 14, 15,
3587 245, 246, 18, 19, 0, 0, 0, 0, 0, 20,
3588 247, 248, 23, 24, 25, 26, 0, 0, 206, 0,
3589 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
3590 34, 35, 36, 37, 38, 39, 40, 207, 41, 42,
3591 43, 44, 45, 46, 47, 0, 0, 0, 0, 0,
3592 0, 0, 0, 0, 48, 49, 0, 0, 0, 0,
3593 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,
3594 51, 0, 0, 0, 0, 0, 0, 208, 0, 0,
3595 209, 54, 0, 55, 56, 0, 0, 211, 212, 58,
3596 59, 213, 61, 62, 63, 64, 65, 66, 0, 0,
3597 0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
3598 7, 0, 9, 0, 0, 0, 10, 11, 67, 214,
3599 69, 12, 0, 13, 14, 15, 245, 246, 18, 19,
3600 0, 0, 0, 0, 0, 20, 247, 248, 23, 24,
3601 25, 26, 0, 0, 206, 0, 0, 0, 0, 0,
3602 0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
3603 38, 39, 40, 207, 41, 42, 43, 44, 45, 46,
3604 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3605 48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
3606 0, 0, 0, 0, 0, 50, 51, 0, 0, 0,
3607 0, 0, 0, 208, 0, 0, 209, 54, 0, 55,
3608 56, 0, 621, 211, 0, 58, 59, 213, 61, 62,
3609 63, 64, 65, 66, 0, 0, 0, 0, 0, 0,
3610 0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
3611 0, 0, 10, 11, 67, 214, 69, 12, 0, 13,
3612 14, 15, 245, 246, 18, 19, 0, 0, 0, 0,
3613 0, 20, 247, 248, 23, 24, 25, 26, 0, 0,
3614 206, 0, 0, 0, 0, 0, 0, 29, 0, 0,
3615 32, 33, 34, 35, 36, 37, 38, 39, 40, 207,
3616 41, 42, 43, 44, 45, 46, 47, 0, 0, 0,
3617 0, 0, 0, 0, 0, 0, 48, 49, 0, 0,
3618 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3619 0, 50, 51, 0, 0, 0, 0, 0, 0, 208,
3620 0, 0, 209, 54, 0, 55, 56, 0, 0, 211,
3621 0, 58, 59, 213, 61, 62, 63, 64, 65, 66,
3622 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3623 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
3624 67, 214, 69, 12, 0, 13, 14, 15, 16, 17,
3625 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
3626 23, 24, 25, 26, 0, 0, 206, 0, 0, 0,
3627 0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
3628 36, 37, 38, 39, 40, 0, 41, 42, 43, 44,
3629 45, 46, 47, 0, 0, 0, 0, 0, 0, 0,
3630 0, 0, 48, 49, 0, 0, 0, 0, 0, 0,
3631 0, 0, 0, 0, 0, 0, 0, 50, 51, 0,
3632 0, 0, 0, 0, 0, 208, 0, 0, 209, 54,
3633 0, 55, 56, 0, 519, 0, 0, 58, 59, 60,
3634 61, 62, 63, 64, 65, 66, 0, 0, 0, 0,
3635 0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
3636 9, 0, 0, 0, 10, 11, 67, 214, 69, 12,
3637 0, 13, 14, 15, 245, 246, 18, 19, 0, 0,
3638 0, 0, 0, 20, 247, 248, 23, 24, 25, 26,
3639 0, 0, 206, 0, 0, 0, 0, 0, 0, 29,
3640 0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
3641 40, 0, 41, 42, 43, 44, 45, 46, 47, 0,
3642 0, 0, 0, 0, 0, 0, 0, 0, 48, 49,
3643 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3644 0, 0, 0, 50, 51, 0, 0, 0, 0, 0,
3645 0, 208, 0, 0, 209, 54, 0, 55, 56, 0,
3646 773, 0, 0, 58, 59, 60, 61, 62, 63, 64,
3647 65, 66, 0, 0, 0, 0, 0, 0, 0, 0,
3648 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
3649 10, 11, 67, 214, 69, 12, 0, 13, 14, 15,
3650 245, 246, 18, 19, 0, 0, 0, 0, 0, 20,
3651 247, 248, 23, 24, 25, 26, 0, 0, 206, 0,
3652 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
3653 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
3654 43, 44, 45, 46, 47, 0, 0, 0, 0, 0,
3655 0, 0, 0, 0, 48, 49, 0, 0, 0, 0,
3656 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,
3657 51, 0, 0, 0, 0, 0, 0, 208, 0, 0,
3658 209, 54, 0, 55, 56, 0, 519, 0, 0, 58,
3659 59, 60, 61, 62, 63, 64, 65, 66, 0, 0,
3660 0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
3661 7, 0, 9, 0, 0, 0, 10, 11, 67, 214,
3662 69, 12, 0, 13, 14, 15, 245, 246, 18, 19,
3663 0, 0, 0, 0, 0, 20, 247, 248, 23, 24,
3664 25, 26, 0, 0, 206, 0, 0, 0, 0, 0,
3665 0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
3666 38, 39, 40, 0, 41, 42, 43, 44, 45, 46,
3667 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3668 48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
3669 0, 0, 0, 0, 0, 50, 51, 0, 0, 0,
3670 0, 0, 0, 208, 0, 0, 209, 54, 0, 55,
3671 56, 0, 846, 0, 0, 58, 59, 60, 61, 62,
3672 63, 64, 65, 66, 0, 0, 0, 0, 0, 0,
3673 0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
3674 0, 0, 10, 11, 67, 214, 69, 12, 0, 13,
3675 14, 15, 245, 246, 18, 19, 0, 0, 0, 0,
3676 0, 20, 247, 248, 23, 24, 25, 26, 0, 0,
3677 206, 0, 0, 0, 0, 0, 0, 29, 0, 0,
3678 32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
3679 41, 42, 43, 44, 45, 46, 47, 0, 0, 0,
3680 0, 0, 0, 0, 0, 0, 48, 49, 0, 0,
3681 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3682 0, 50, 51, 0, 0, 0, 0, 0, 0, 208,
3683 0, 0, 209, 54, 0, 55, 56, 0, 1019, 0,
3684 0, 58, 59, 60, 61, 62, 63, 64, 65, 66,
3685 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3686 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
3687 67, 214, 69, 12, 0, 13, 14, 15, 245, 246,
3688 18, 19, 0, 0, 0, 0, 0, 20, 247, 248,
3689 23, 24, 25, 26, 0, 0, 206, 0, 0, 0,
3690 0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
3691 36, 37, 38, 39, 40, 0, 41, 42, 43, 44,
3692 45, 46, 47, 0, 0, 0, 0, 0, 0, 0,
3693 0, 0, 48, 49, 0, 0, 0, 0, 0, 0,
3694 0, 0, 0, 0, 0, 0, 0, 50, 51, 0,
3695 0, 0, 0, 0, 0, 208, 0, 0, 209, 54,
3696 0, 55, 56, 0, 0, 0, 0, 58, 59, 60,
3697 61, 62, 63, 64, 65, 66, 0, 0, 0, 0,
3698 0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
3699 9, 0, 0, 0, 10, 11, 67, 214, 69, 12,
3700 0, 13, 14, 15, 16, 17, 18, 19, 0, 0,
3701 0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
3702 0, 0, 206, 0, 0, 0, 0, 0, 0, 29,
3703 0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
3704 40, 0, 41, 42, 43, 44, 45, 46, 47, 0,
3705 0, 0, 0, 0, 0, 0, 0, 0, 48, 49,
3706 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3707 0, 0, 0, 50, 51, 0, 0, 0, 0, 0,
3708 0, 208, 0, 0, 209, 54, 0, 55, 56, 0,
3709 0, 0, 0, 58, 59, 60, 61, 62, 63, 64,
3710 65, 66, 0, 0, 0, 0, 0, 0, 0, 0,
3711 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
3712 10, 11, 67, 214, 69, 12, 0, 13, 14, 15,
3713 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
3714 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
3715 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
3716 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
3717 43, 44, 45, 46, 47, 0, 0, 0, 0, 0,
3718 0, 0, 0, 0, 48, 49, 0, 0, 0, 0,
3719 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,
3720 51, 0, 0, 0, 0, 0, 0, 208, 0, 0,
3721 209, 54, 0, 55, 56, 0, 0, 0, 0, 58,
3722 59, 60, 61, 62, 63, 64, 65, 66, 0, 0,
3723 0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
3724 7, 0, 9, 0, 0, 0, 10, 11, 67, 68,
3725 69, 12, 0, 13, 14, 15, 245, 246, 18, 19,
3726 0, 0, 0, 0, 0, 20, 247, 248, 23, 24,
3727 25, 26, 0, 0, 206, 0, 0, 0, 0, 0,
3728 0, 277, 0, 0, 32, 33, 34, 35, 36, 37,
3729 38, 39, 40, 0, 41, 42, 43, 44, 45, 46,
3730 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3731 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3732 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3733 0, 0, 0, 278, 0, 0, 328, 54, 0, 55,
3734 56, 0, 329, 0, 0, 58, 59, 60, 61, 62,
3735 63, 64, 65, 66, 0, 0, 0, 0, 0, 0,
3736 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
3737 0, 0, 0, 12, 279, 13, 14, 15, 245, 246,
3738 18, 19, 0, 0, 0, 0, 0, 20, 247, 248,
3739 23, 24, 25, 26, 0, 0, 206, 0, 0, 0,
3740 0, 0, 0, 277, 0, 0, 32, 33, 34, 35,
3741 36, 37, 38, 39, 40, 0, 41, 42, 43, 44,
3742 45, 46, 47, 0, 0, 0, 0, 0, 0, 0,
3743 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3744 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3745 0, 0, 0, 0, 0, 376, 0, 0, 53, 54,
3746 0, 55, 56, 0, 57, 0, 0, 58, 59, 60,
3747 61, 62, 63, 64, 65, 66, 0, 0, 0, 0,
3748 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
3749 10, 11, 0, 0, 0, 12, 279, 13, 14, 15,
3750 245, 246, 18, 19, 0, 0, 0, 0, 0, 20,
3751 247, 248, 23, 24, 25, 26, 0, 0, 206, 0,
3752 0, 0, 0, 0, 0, 277, 0, 0, 32, 33,
3753 34, 384, 36, 37, 38, 385, 40, 0, 41, 42,
3754 43, 44, 45, 46, 47, 0, 0, 0, 0, 0,
3755 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3756 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3757 0, 0, 0, 386, 0, 0, 0, 387, 0, 0,
3758 209, 54, 0, 55, 56, 0, 0, 0, 0, 58,
3759 59, 60, 61, 62, 63, 64, 65, 66, 0, 0,
3760 0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
3761 0, 0, 10, 11, 0, 0, 0, 12, 279, 13,
3762 14, 15, 245, 246, 18, 19, 0, 0, 0, 0,
3763 0, 20, 247, 248, 23, 24, 25, 26, 0, 0,
3764 206, 0, 0, 0, 0, 0, 0, 277, 0, 0,
3765 32, 33, 34, 384, 36, 37, 38, 385, 40, 0,
3766 41, 42, 43, 44, 45, 46, 47, 0, 0, 0,
3767 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3768 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3769 0, 0, 0, 0, 0, 0, 0, 0, 0, 387,
3770 0, 0, 209, 54, 0, 55, 56, 0, 0, 0,
3771 0, 58, 59, 60, 61, 62, 63, 64, 65, 66,
3772 0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
3773 9, 0, 0, 0, 10, 11, 0, 0, 0, 12,
3774 279, 13, 14, 15, 245, 246, 18, 19, 0, 0,
3775 0, 0, 0, 20, 247, 248, 23, 24, 25, 26,
3776 0, 0, 206, 0, 0, 0, 0, 0, 0, 277,
3777 0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
3778 40, 0, 41, 42, 43, 44, 45, 46, 47, 0,
3779 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3780 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3781 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3782 0, 278, 0, 0, 328, 54, 0, 55, 56, 0,
3783 0, 0, 0, 58, 59, 60, 61, 62, 63, 64,
3784 65, 66, 0, 0, 0, 0, 0, 0, 5, 6,
3785 7, 0, 9, 0, 0, 0, 10, 11, 0, 0,
3786 0, 12, 279, 13, 14, 15, 245, 246, 18, 19,
3787 0, 0, 0, 0, 0, 20, 247, 248, 23, 24,
3788 25, 26, 0, 0, 206, 0, 0, 0, 0, 0,
3789 0, 277, 0, 0, 32, 33, 34, 35, 36, 37,
3790 38, 39, 40, 0, 41, 42, 43, 44, 45, 46,
3791 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3792 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3793 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3794 0, 0, 0, 1009, 0, 0, 209, 54, 0, 55,
3795 56, 0, 0, 0, 0, 58, 59, 60, 61, 62,
3796 63, 64, 65, 66, 0, 0, 0, 0, 0, 0,
3797 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
3798 0, 0, 0, 12, 279, 13, 14, 15, 245, 246,
3799 18, 19, 0, 0, 0, 0, 0, 20, 247, 248,
3800 23, 24, 25, 26, 0, 0, 206, 0, 0, 0,
3801 0, 0, 0, 277, 0, 0, 32, 33, 34, 35,
3802 36, 37, 38, 39, 40, 0, 41, 42, 43, 44,
3803 45, 46, 47, 23, 24, 25, 26, 0, 0, 0,
3804 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,
3805 33, 34, 784, 0, 0, 0, 785, 0, 0, 41,
3806 42, 43, 44, 45, 0, 1062, 0, 0, 209, 54,
3807 0, 55, 56, 0, 0, 0, 0, 58, 59, 60,
3808 61, 62, 63, 64, 65, 66, 0, 0, 0, 0,
3809 786, 787, 0, 0, 0, 0, 0, 0, 788, 0,
3810 0, 789, 0, 0, 790, 791, 279, 980, 0, 0,
3811 792, 59, 60, 61, 62, 63, 64, 65, 66, 23,
3812 24, 25, 26, 0, 0, 0, 0, 0, 0, 0,
3813 0, 0, 793, 0, 0, 32, 33, 34, 784, 279,
3814 0, 0, 785, 0, 0, 41, 42, 43, 44, 45,
3815 0, 0, 23, 24, 25, 26, 0, 0, 0, 0,
3816 0, 0, 0, 0, 0, 0, 0, 0, 32, 33,
3817 34, 784, 0, 0, 0, 785, 786, 787, 41, 42,
3818 43, 44, 45, 0, 788, 0, 0, 789, 0, 0,
3819 790, 791, 0, 1077, 0, 0, 792, 59, 60, 61,
3820 62, 63, 64, 65, 66, 0, 0, 0, 0, 786,
3821 787, 0, 0, 0, 0, 0, 0, 788, 793, 0,
3822 789, 0, 0, 790, 791, 279, 0, 0, 0, 792,
3823 59, 60, 61, 62, 63, 64, 65, 66, 564, 565,
3824 0, 0, 566, 0, 0, 0, 0, 0, 0, 0,
3825 0, 793, 0, 0, 0, 0, 0, 0, 279, 0,
3826 0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
3827 0, 0, 179, 180, 0, 0, 0, 0, 181, 182,
3828 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
3829 0, 0, 0, 185, 186, 0, 0, 0, 0, 0,
3830 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3831 0, 0, 0, 0, 0, 187, 188, 189, 190, 191,
3832 192, 193, 194, 195, 196, 0, 197, 198, 573, 574,
3833 0, 0, 575, 199, 233, 0, 0, 0, 0, 0,
3834 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3835 0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
3836 0, 0, 179, 180, 0, 0, 0, 0, 181, 182,
3837 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
3838 0, 0, 0, 185, 186, 0, 0, 0, 0, 0,
3839 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3840 0, 0, 0, 0, 0, 187, 188, 189, 190, 191,
3841 192, 193, 194, 195, 196, 0, 197, 198, 625, 565,
3842 0, 0, 626, 199, 233, 0, 0, 0, 0, 0,
3843 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3844 0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
3845 0, 0, 179, 180, 0, 0, 0, 0, 181, 182,
3846 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
3847 0, 0, 0, 185, 186, 0, 0, 0, 0, 0,
3848 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3849 0, 0, 0, 0, 0, 187, 188, 189, 190, 191,
3850 192, 193, 194, 195, 196, 0, 197, 198, 628, 574,
3851 0, 0, 629, 199, 233, 0, 0, 0, 0, 0,
3852 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3853 0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
3854 0, 0, 179, 180, 0, 0, 0, 0, 181, 182,
3855 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
3856 0, 0, 0, 185, 186, 0, 0, 0, 0, 0,
3857 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3858 0, 0, 0, 0, 0, 187, 188, 189, 190, 191,
3859 192, 193, 194, 195, 196, 0, 197, 198, 653, 565,
3860 0, 0, 654, 199, 233, 0, 0, 0, 0, 0,
3861 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3862 0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
3863 0, 0, 179, 180, 0, 0, 0, 0, 181, 182,
3864 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
3865 0, 0, 0, 185, 186, 0, 0, 0, 0, 0,
3866 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3867 0, 0, 0, 0, 0, 187, 188, 189, 190, 191,
3868 192, 193, 194, 195, 196, 0, 197, 198, 656, 574,
3869 0, 0, 657, 199, 233, 0, 0, 0, 0, 0,
3870 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3871 0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
3872 0, 0, 179, 180, 0, 0, 0, 0, 181, 182,
3873 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
3874 0, 0, 0, 185, 186, 0, 0, 0, 0, 0,
3875 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3876 0, 0, 0, 0, 0, 187, 188, 189, 190, 191,
3877 192, 193, 194, 195, 196, 0, 197, 198, 724, 565,
3878 0, 0, 725, 199, 233, 0, 0, 0, 0, 0,
3879 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3880 0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
3881 0, 0, 179, 180, 0, 0, 0, 0, 181, 182,
3882 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
3883 0, 0, 0, 185, 186, 0, 0, 0, 0, 0,
3884 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3885 0, 0, 0, 0, 0, 187, 188, 189, 190, 191,
3886 192, 193, 194, 195, 196, 0, 197, 198, 727, 574,
3887 0, 0, 728, 199, 233, 0, 0, 0, 0, 0,
3888 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3889 0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
3890 0, 0, 179, 180, 0, 0, 0, 0, 181, 182,
3891 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
3892 0, 0, 0, 185, 186, 0, 0, 0, 0, 0,
3893 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3894 0, 0, 0, 0, 0, 187, 188, 189, 190, 191,
3895 192, 193, 194, 195, 196, 0, 197, 198, 733, 565,
3896 0, 0, 734, 199, 233, 0, 0, 0, 0, 0,
3897 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3898 0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
3899 0, 0, 179, 180, 0, 0, 0, 0, 181, 182,
3900 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
3901 0, 0, 0, 185, 186, 0, 0, 0, 0, 0,
3902 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3903 0, 0, 0, 0, 0, 187, 188, 189, 190, 191,
3904 192, 193, 194, 195, 196, 0, 197, 198, 610, 574,
3905 0, 0, 611, 199, 233, 0, 0, 0, 0, 0,
3906 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3907 0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
3908 0, 0, 179, 180, 0, 0, 0, 0, 181, 182,
3909 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
3910 0, 0, 0, 185, 186, 0, 0, 0, 0, 0,
3911 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3912 0, 0, 0, 0, 0, 187, 188, 189, 190, 191,
3913 192, 193, 194, 195, 196, 0, 197, 198, 779, 565,
3914 0, 0, 780, 199, 233, 0, 0, 0, 0, 0,
3915 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3916 0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
3917 0, 0, 179, 180, 0, 0, 0, 0, 181, 182,
3918 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
3919 0, 0, 0, 185, 186, 0, 0, 0, 0, 0,
3920 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3921 0, 0, 0, 0, 0, 187, 188, 189, 190, 191,
3922 192, 193, 194, 195, 196, 0, 197, 198, 782, 574,
3923 0, 0, 783, 199, 233, 0, 0, 0, 0, 0,
3924 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3925 0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
3926 0, 0, 179, 180, 0, 0, 0, 0, 181, 182,
3927 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
3928 0, 0, 0, 185, 186, 0, 0, 0, 0, 0,
3929 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3930 0, 0, 0, 0, 0, 187, 188, 189, 190, 191,
3931 192, 193, 194, 195, 196, 0, 197, 198, 1161, 565,
3932 0, 0, 1162, 199, 233, 0, 0, 0, 0, 0,
3933 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3934 0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
3935 0, 0, 179, 180, 0, 0, 0, 0, 181, 182,
3936 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
3937 0, 0, 0, 185, 186, 0, 0, 0, 0, 0,
3938 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3939 0, 0, 0, 0, 0, 187, 188, 189, 190, 191,
3940 192, 193, 194, 195, 196, 0, 197, 198, 1164, 574,
3941 0, 0, 1165, 199, 233, 0, 0, 0, 0, 0,
3942 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3943 0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
3944 0, 0, 179, 180, 0, 0, 0, 0, 181, 182,
3945 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
3946 0, 0, 0, 185, 186, 0, 0, 0, 0, 0,
3947 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3948 0, 0, 0, 0, 0, 187, 188, 189, 190, 191,
3949 192, 193, 194, 195, 196, 0, 197, 198, 1196, 565,
3950 0, 0, 1197, 199, 233, 0, 0, 0, 0, 0,
3951 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3952 0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
3953 0, 0, 179, 180, 0, 0, 0, 0, 181, 182,
3954 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
3955 0, 0, 0, 185, 186, 0, 0, 0, 0, 0,
3956 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3957 0, 0, 0, 0, 0, 187, 188, 189, 190, 191,
3958 192, 193, 194, 195, 196, 0, 197, 198, 610, 574,
3959 0, 0, 611, 199, 233, 0, 0, 0, 0, 0,
3960 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3961 0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
3962 0, 0, 179, 180, 0, 0, 0, 0, 181, 182,
3963 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
3964 0, 0, 0, 185, 186, 0, 0, 0, 0, 0,
3965 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3966 0, 0, 0, 0, 0, 187, 188, 189, 190, 191,
3967 192, 193, 194, 195, 196, 0, 197, 198, 0, 0,
3968 0, 0, 0, 199
3969};
3970
3971static const yytype_int16 yycheck[] =
3972{
3973 2, 59, 53, 89, 60, 369, 102, 22, 91, 92,
3974 8, 71, 95, 8, 364, 101, 71, 28, 712, 94,
3975 16, 17, 227, 4, 331, 57, 92, 634, 271, 95,
3976 28, 719, 275, 28, 2, 95, 4, 897, 898, 13,
3977 433, 99, 387, 68, 425, 363, 67, 365, 16, 17,
3978 627, 83, 433, 55, 56, 16, 17, 83, 95, 604,
3979 53, 59, 25, 78, 96, 97, 98, 331, 57, 1044,
3980 2, 1072, 4, 1112, 13, 897, 898, 963, 655, 429,
3981 473, 27, 22, 1110, 860, 53, 54, 690, 858, 57,
3982 860, 482, 868, 411, 55, 295, 296, 25, 868, 928,
3983 68, 99, 68, 100, 100, 259, 414, 415, 16, 17,
3984 428, 1068, 430, 146, 0, 83, 16, 17, 1033, 13,
3985 153, 26, 54, 91, 92, 66, 153, 95, 96, 97,
3986 98, 97, 100, 68, 484, 526, 222, 1052, 78, 100,
3987 458, 870, 25, 786, 787, 1060, 68, 55, 56, 726,
3988 414, 415, 25, 236, 1033, 238, 153, 213, 209, 736,
3989 1151, 96, 97, 126, 1155, 251, 25, 485, 1054, 25,
3990 37, 38, 146, 1052, 328, 97, 1215, 151, 119, 153,
3991 56, 25, 958, 146, 146, 148, 149, 732, 958, 1216,
3992 153, 153, 100, 244, 1023, 1024, 1018, 283, 946, 947,
3993 100, 261, 1177, 1204, 781, 151, 261, 153, 259, 148,
3994 145, 13, 151, 790, 153, 13, 13, 1208, 146, 221,
3995 148, 969, 970, 971, 261, 227, 13, 310, 311, 312,
3996 313, 233, 315, 316, 230, 1192, 232, 233, 143, 444,
3997 242, 209, 592, 636, 310, 311, 312, 313, 280, 892,
3998 893, 858, 602, 634, 280, 636, 601, 151, 279, 153,
3999 25, 13, 230, 146, 232, 233, 259, 1182, 236, 230,
4000 238, 232, 233, 146, 242, 593, 244, 328, 881, 882,
4001 27, 1110, 29, 1112, 1199, 603, 153, 146, 371, 257,
4002 146, 259, 683, 379, 897, 898, 25, 329, 498, 13,
4003 500, 326, 146, 386, 1033, 371, 331, 852, 248, 249,
4004 242, 1171, 280, 373, 859, 1044, 52, 698, 895, 370,
4005 29, 372, 230, 1052, 232, 257, 13, 1021, 309, 874,
4006 230, 1060, 232, 1021, 13, 328, 373, 25, 688, 1068,
4007 329, 309, 310, 311, 312, 313, 314, 315, 316, 151,
4008 148, 153, 109, 151, 151, 153, 153, 25, 326, 52,
4009 328, 329, 364, 331, 151, 326, 153, 365, 364, 687,
4010 331, 689, 695, 1121, 25, 25, 133, 309, 983, 143,
4011 703, 146, 314, 148, 692, 693, 1215, 1216, 991, 414,
4012 415, 699, 700, 26, 1142, 884, 364, 126, 366, 151,
4013 707, 153, 370, 371, 372, 982, 66, 650, 897, 898,
4014 146, 37, 38, 411, 123, 1018, 68, 146, 386, 624,
4015 149, 685, 99, 143, 153, 365, 1033, 429, 692, 693,
4016 1007, 1008, 430, 429, 152, 699, 700, 151, 97, 153,
4017 442, 452, 444, 788, 96, 97, 414, 415, 1177, 126,
4018 482, 537, 99, 146, 452, 100, 482, 452, 146, 119,
4019 458, 429, 662, 1192, 151, 26, 153, 667, 152, 146,
4020 1075, 126, 151, 866, 153, 126, 126, 100, 146, 126,
4021 82, 83, 484, 68, 848, 866, 145, 485, 484, 148,
4022 430, 146, 68, 145, 526, 146, 146, 465, 149, 149,
4023 526, 146, 153, 153, 66, 67, 150, 68, 1053, 153,
4024 143, 819, 97, 77, 482, 148, 484, 425, 458, 594,
4025 96, 97, 605, 146, 414, 415, 586, 129, 130, 1018,
4026 277, 582, 148, 584, 99, 96, 97, 153, 68, 903,
4027 152, 431, 432, 870, 908, 485, 1151, 1036, 753, 894,
4028 1155, 1245, 99, 66, 569, 819, 639, 66, 526, 121,
4029 122, 126, 470, 578, 68, 152, 96, 97, 1171, 459,
4030 572, 858, 136, 137, 138, 1064, 578, 28, 580, 126,
4031 34, 146, 143, 870, 145, 1130, 1163, 148, 14, 15,
4032 592, 15, 96, 97, 1083, 593, 592, 612, 52, 68,
4033 602, 25, 1207, 1208, 68, 603, 602, 618, 121, 122,
4034 612, 68, 121, 122, 582, 145, 584, 99, 148, 651,
4035 618, 126, 624, 618, 592, 651, 68, 96, 97, 569,
4036 68, 146, 96, 97, 602, 58, 604, 605, 578, 152,
4037 97, 145, 644, 152, 126, 741, 126, 2, 731, 4,
4038 99, 683, 99, 593, 77, 97, 112, 683, 96, 97,
4039 685, 16, 17, 603, 146, 731, 66, 692, 693, 99,
4040 730, 639, 612, 68, 699, 700, 145, 126, 729, 126,
4041 68, 145, 740, 651, 99, 108, 688, 99, 146, 112,
4042 56, 689, 688, 146, 68, 153, 26, 146, 53, 54,
4043 68, 96, 97, 643, 644, 707, 708, 145, 710, 97,
4044 712, 126, 680, 68, 126, 683, 684, 685, 66, 119,
4045 688, 121, 122, 97, 692, 693, 634, 68, 148, 97,
4046 68, 699, 700, 1060, 146, 1099, 91, 92, 68, 126,
4047 95, 1068, 740, 1070, 1094, 100, 707, 9, 680, 689,
4048 145, 753, 684, 15, 837, 96, 97, 1044, 96, 97,
4049 1047, 729, 99, 731, 732, 99, 96, 97, 770, 68,
4050 772, 837, 58, 121, 122, 144, 124, 1095, 34, 100,
4051 831, 1068, 66, 1070, 153, 836, 146, 99, 68, 126,
4052 698, 77, 126, 853, 819, 99, 52, 96, 97, 68,
4053 68, 146, 692, 693, 145, 68, 553, 145, 870, 699,
4054 700, 68, 146, 143, 126, 145, 68, 97, 148, 148,
4055 871, 99, 108, 109, 571, 827, 99, 96, 97, 97,
4056 88, 89, 99, 96, 97, 119, 77, 121, 122, 96,
4057 97, 40, 41, 66, 96, 97, 145, 133, 126, 518,
4058 148, 819, 99, 126, 209, 906, 148, 747, 748, 126,
4059 750, 751, 149, 831, 915, 1192, 66, 1194, 836, 837,
4060 902, 126, 1199, 146, 1201, 230, 145, 232, 233, 126,
4061 627, 236, 145, 238, 852, 99, 99, 242, 145, 244,
4062 1177, 859, 1179, 145, 56, 955, 119, 1184, 121, 122,
4063 150, 124, 257, 871, 259, 1192, 874, 1194, 655, 144,
4064 579, 1238, 126, 126, 1201, 146, 585, 54, 587, 119,
4065 77, 121, 122, 26, 124, 1011, 77, 64, 65, 819,
4066 106, 987, 52, 52, 902, 967, 56, 56, 906, 149,
4067 146, 56, 944, 153, 946, 947, 1233, 915, 1004, 151,
4068 151, 1238, 153, 25, 309, 310, 311, 312, 313, 314,
4069 315, 316, 130, 77, 1015, 68, 1017, 969, 970, 971,
4070 15, 326, 17, 328, 864, 149, 331, 66, 144, 726,
4071 94, 95, 146, 134, 135, 136, 137, 138, 146, 736,
4072 870, 144, 146, 96, 97, 144, 146, 66, 1060, 967,
4073 10, 146, 1064, 146, 146, 1056, 1068, 44, 1070, 364,
4074 44, 366, 146, 126, 1016, 370, 371, 372, 8, 1021,
4075 134, 135, 136, 137, 138, 13, 66, 1059, 25, 152,
4076 119, 386, 121, 122, 781, 17, 152, 144, 870, 150,
4077 143, 146, 145, 790, 791, 148, 128, 1015, 15, 1017,
4078 119, 720, 121, 122, 723, 59, 60, 61, 62, 414,
4079 415, 54, 55, 690, 57, 858, 146, 860, 737, 148,
4080 131, 64, 65, 146, 429, 868, 52, 870, 100, 119,
4081 1131, 121, 122, 131, 236, 1053, 1169, 1170, 1056, 100,
4082 146, 1059, 1094, 144, 1096, 52, 1098, 1095, 1094, 126,
4083 146, 52, 146, 1169, 1170, 40, 41, 42, 43, 44,
4084 465, 146, 264, 146, 146, 2, 268, 4, 52, 1121,
4085 146, 126, 131, 870, 56, 146, 1094, 146, 146, 484,
4086 1192, 52, 1194, 54, 55, 56, 57, 1199, 146, 1201,
4087 1142, 52, 9, 54, 55, 56, 57, 146, 895, 52,
4088 151, 54, 55, 56, 57, 1095, 1036, 146, 131, 786,
4089 787, 1041, 1130, 1131, 56, 958, 53, 54, 146, 838,
4090 57, 146, 841, 52, 146, 844, 1238, 146, 146, 2,
4091 1060, 4, 851, 146, 1064, 854, 146, 146, 1068, 120,
4092 1070, 1242, 144, 16, 17, 149, 83, 146, 101, 146,
4093 146, 1169, 1170, 52, 1036, 54, 55, 56, 57, 96,
4094 97, 98, 99, 146, 242, 461, 963, 146, 146, 146,
4095 146, 465, 96, 148, 148, 98, 146, 582, 1060, 584,
4096 53, 54, 1064, 146, 87, 982, 1068, 592, 1070, 77,
4097 1033, 988, 612, 1245, 1098, 68, 708, 602, 917, 604,
4098 605, 1044, 101, 1023, 881, 882, 94, 95, 107, 1052,
4099 1007, 1008, 1110, 870, 891, 892, 893, 1060, 91, 92,
4100 897, 898, 95, 772, 1242, 1068, 887, 100, 1204, 742,
4101 514, 973, 974, 435, 639, 954, 324, 1245, 440, 1083,
4102 891, 443, 1018, 1083, 446, 133, 134, 135, 136, 137,
4103 138, 1083, 105, 889, 1096, 1016, 500, 1054, 99, 957,
4104 462, 1036, 1192, 1064, 1194, 467, 1060, 988, -1, 1199,
4105 -1, 1201, 209, -1, -1, 680, -1, -1, -1, 684,
4106 685, -1, -1, 688, -1, -1, -1, 692, 693, -1,
4107 -1, -1, -1, -1, 699, 700, -1, -1, -1, -1,
4108 -1, -1, -1, -1, -1, 242, 983, 244, 1238, -1,
4109 1192, 949, 1194, 951, 991, 690, -1, 1199, -1, 1201,
4110 257, -1, 259, 525, 729, -1, 731, 732, -1, -1,
4111 -1, -1, -1, -1, 1177, -1, 209, -1, -1, -1,
4112 -1, 1018, -1, 280, -1, -1, -1, -1, -1, 1192,
4113 -1, 1148, -1, -1, -1, -1, 1238, 230, -1, 232,
4114 233, -1, -1, 236, -1, 238, 1163, -1, -1, 242,
4115 -1, 244, 309, -1, -1, -1, -1, 314, -1, -1,
4116 -1, -1, -1, -1, 257, -1, 259, -1, -1, -1,
4117 -1, 328, 329, -1, -1, 1137, 1138, -1, 1075, -1,
4118 -1, 1143, -1, 1145, 1146, -1, -1, -1, -1, 1128,
4119 -1, 786, 787, -1, 819, -1, -1, 56, -1, 52,
4120 -1, 54, 55, 56, 57, 58, 831, -1, -1, 366,
4121 -1, 836, 837, 370, -1, 372, 309, 310, 311, 312,
4122 313, 314, 315, 316, 77, -1, -1, 852, -1, -1,
4123 -1, -1, -1, 326, 859, 328, -1, -1, 331, -1,
4124 -1, -1, -1, -1, -1, -1, 871, -1, 101, 874,
4125 1189, -1, -1, -1, 1151, 108, 109, -1, 1155, 1117,
4126 1118, 1223, 1224, 1225, 1226, 1123, -1, 1125, -1, 1127,
4127 -1, 364, -1, 366, 1171, -1, -1, 370, 371, 372,
4128 133, 906, 1244, -1, -1, -1, 881, 882, -1, -1,
4129 915, -1, -1, 386, -1, -1, 891, 892, 893, -1,
4130 -1, -1, 897, 898, -1, -1, -1, -1, 465, -1,
4131 1207, 1208, -1, -1, -1, -1, 738, -1, -1, -1,
4132 -1, 414, 415, -1, -1, 482, -1, -1, -1, -1,
4133 752, -1, 754, -1, -1, -1, 429, -1, 52, -1,
4134 54, 55, 56, 57, 58, -1, 25, -1, 207, -1,
4135 -1, 210, 211, 212, -1, -1, -1, -1, -1, 1217,
4136 1218, 1219, 1220, 77, -1, -1, -1, -1, -1, 526,
4137 -1, -1, 465, -1, -1, -1, -1, -1, -1, -1,
4138 -1, -1, -1, -1, -1, 1243, -1, 101, 983, -1,
4139 1015, 484, 1017, 107, 108, 109, 991, -1, 77, 78,
4140 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
4141 89, -1, -1, -1, -1, 94, 95, -1, -1, 133,
4142 -1, -1, 136, 1018, -1, 582, -1, 584, 1053, -1,
4143 -1, 1056, -1, -1, -1, -1, -1, -1, -1, 153,
4144 -1, 2, -1, 4, -1, -1, -1, 604, 127, -1,
4145 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
4146 -1, -1, -1, -1, -1, -1, -1, 326, -1, 1094,
4147 -1, -1, 331, -1, 896, -1, -1, -1, -1, -1,
4148 1075, -1, -1, -1, -1, -1, -1, -1, -1, 582,
4149 -1, 584, 53, 54, 651, -1, 57, -1, -1, 592,
4150 -1, -1, -1, -1, -1, 1130, 1131, -1, -1, 602,
4151 -1, 604, 605, 935, 936, -1, -1, -1, -1, -1,
4152 -1, -1, 83, 680, -1, -1, 683, 684, -1, -1,
4153 -1, -1, -1, 690, -1, 96, 97, 98, -1, -1,
4154 -1, -1, -1, -1, 1169, 1170, 639, -1, -1, -1,
4155 -1, -1, -1, -1, -1, -1, 1151, 979, -1, -1,
4156 1155, -1, -1, -1, -1, 424, 425, -1, -1, -1,
4157 -1, -1, 729, -1, 433, 732, 1171, -1, -1, -1,
4158 -1, -1, -1, 1005, 1006, -1, -1, 680, -1, -1,
4159 -1, 684, 685, -1, -1, 688, -1, -1, -1, 692,
4160 693, -1, -1, -1, -1, 1027, 699, 700, -1, -1,
4161 -1, 470, 1207, 1208, 473, -1, 52, 1242, 54, 55,
4162 56, 57, 58, -1, -1, -1, -1, -1, -1, 786,
4163 787, -1, -1, -1, -1, -1, 729, -1, 731, 732,
4164 2, 77, 4, -1, -1, -1, -1, -1, 209, 77,
4165 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4166 519, -1, -1, -1, -1, 101, 94, 95, -1, -1,
4167 -1, 107, 108, 109, 831, -1, -1, -1, -1, 836,
4168 -1, 242, -1, 244, -1, -1, 1108, -1, -1, -1,
4169 -1, 53, 54, 1115, -1, 852, 257, 133, 259, 2,
4170 136, 4, 859, 131, 132, 133, 134, 135, 136, 137,
4171 138, -1, 148, -1, 871, -1, -1, 874, -1, 280,
4172 -1, -1, -1, -1, 881, 882, 819, -1, -1, -1,
4173 -1, -1, -1, -1, 891, 892, 893, -1, 831, -1,
4174 897, 898, -1, 836, 837, 902, -1, -1, 309, 906,
4175 53, 54, -1, 314, 57, -1, -1, -1, 915, 852,
4176 619, -1, 621, -1, -1, -1, 859, 328, 329, -1,
4177 331, -1, -1, -1, -1, 634, -1, 636, 871, -1,
4178 83, 874, -1, -1, -1, -1, -1, -1, -1, 2,
4179 -1, 4, -1, 96, 97, 98, 99, -1, -1, -1,
4180 -1, -1, -1, -1, -1, 366, -1, -1, -1, 370,
4181 967, 372, -1, 906, -1, -1, -1, -1, -1, -1,
4182 679, -1, 915, -1, -1, -1, 983, -1, -1, -1,
4183 -1, -1, -1, -1, 991, -1, -1, -1, -1, 698,
4184 53, 54, -1, -1, -1, -1, -1, 209, 707, -1,
4185 -1, -1, -1, 414, 415, -1, -1, -1, 1015, -1,
4186 1017, 1018, -1, 722, -1, -1, -1, -1, -1, -1,
4187 -1, -1, -1, -1, -1, -1, -1, -1, -1, 690,
4188 242, -1, 244, 96, -1, -1, -1, -1, -1, -1,
4189 -1, -1, -1, -1, -1, 257, 1053, 259, -1, 1056,
4190 -1, -1, 1059, 690, 465, -1, 209, -1, -1, -1,
4191 -1, -1, -1, -1, 773, -1, -1, -1, 1075, -1,
4192 -1, 482, 1015, -1, 1017, -1, -1, -1, -1, -1,
4193 -1, -1, -1, -1, -1, -1, -1, -1, -1, 242,
4194 -1, 244, -1, 690, -1, -1, -1, 309, -1, -1,
4195 -1, -1, 314, -1, 257, -1, 259, -1, -1, -1,
4196 1053, -1, -1, 1056, -1, 526, 328, -1, -1, 331,
4197 -1, -1, -1, 1130, 1131, 786, 787, 280, 52, -1,
4198 54, 55, 56, 57, 58, -1, -1, 846, -1, -1,
4199 -1, -1, -1, -1, 1151, -1, 209, -1, 1155, 786,
4200 787, 1094, -1, 77, 366, -1, 309, 866, 370, -1,
4201 372, 314, -1, -1, 1171, -1, -1, 91, -1, -1,
4202 -1, 582, -1, 584, -1, 328, 329, 101, -1, 242,
4203 -1, 244, -1, 107, 108, 109, -1, 1130, 1131, 786,
4204 787, -1, -1, 604, 257, -1, 259, -1, -1, -1,
4205 1207, 1208, 414, 415, -1, 914, -1, -1, -1, 133,
4206 -1, -1, 136, 366, -1, -1, -1, 370, -1, 372,
4207 881, 882, -1, -1, -1, -1, 1169, 1170, -1, -1,
4208 891, 892, 893, 942, -1, 1242, 897, 898, -1, -1,
4209 651, -1, -1, -1, 881, 882, 309, -1, -1, 660,
4210 -1, 314, -1, 465, 891, 892, 893, -1, -1, -1,
4211 897, 898, -1, -1, -1, 328, -1, -1, 331, 680,
4212 -1, -1, 683, 684, 685, -1, -1, -1, -1, -1,
4213 -1, 692, 693, -1, 881, 882, -1, -1, 699, 700,
4214 -1, -1, -1, -1, 891, 892, 893, -1, -1, 1242,
4215 897, 898, -1, 366, -1, -1, -1, 370, -1, 372,
4216 1019, -1, 465, -1, -1, -1, -1, -1, 729, -1,
4217 -1, 732, 983, 1032, -1, -1, -1, -1, -1, 482,
4218 991, -1, -1, -1, 52, -1, 54, 55, 56, 57,
4219 58, -1, -1, -1, -1, -1, 983, -1, -1, -1,
4220 -1, 414, 415, -1, 991, -1, -1, 1018, -1, 77,
4221 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4222 582, -1, 584, 526, -1, -1, -1, -1, -1, -1,
4223 -1, 1018, -1, 101, -1, -1, 983, -1, -1, 107,
4224 108, 109, 604, -1, 991, -1, -1, -1, -1, -1,
4225 -1, -1, 465, -1, -1, -1, -1, -1, 819, -1,
4226 -1, -1, -1, -1, 1075, 133, -1, -1, 136, -1,
4227 831, 1018, -1, -1, -1, 836, -1, -1, -1, 582,
4228 -1, 584, -1, -1, -1, -1, -1, -1, 1075, -1,
4229 -1, 852, -1, -1, -1, -1, -1, -1, 859, -1,
4230 -1, 604, -1, -1, -1, -1, -1, -1, -1, -1,
4231 871, -1, -1, 874, -1, -1, -1, -1, 680, -1,
4232 -1, -1, 684, 685, -1, -1, -1, -1, 1075, -1,
4233 692, 693, -1, -1, -1, -1, -1, 699, 700, -1,
4234 1151, 902, -1, -1, 1155, 906, -1, -1, 651, -1,
4235 -1, -1, -1, -1, 915, -1, 690, -1, -1, -1,
4236 1171, -1, -1, -1, 1151, -1, -1, 729, 1155, 582,
4237 732, 584, -1, -1, -1, -1, -1, 680, -1, -1,
4238 683, 684, -1, -1, 1171, 690, -1, -1, -1, -1,
4239 -1, 604, -1, -1, -1, -1, 1207, 1208, -1, -1,
4240 -1, -1, -1, -1, 1151, -1, 967, -1, 1155, -1,
4241 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4242 1207, 1208, -1, -1, 1171, -1, 729, -1, -1, 732,
4243 690, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4244 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4245 -1, -1, 786, 787, 1015, -1, 1017, 819, -1, -1,
4246 1207, 1208, -1, -1, -1, -1, -1, 680, -1, 831,
4247 -1, 684, 685, -1, 836, -1, -1, -1, -1, 692,
4248 693, 786, 787, -1, -1, -1, 699, 700, -1, -1,
4249 852, -1, 1053, -1, -1, 1056, -1, 859, 1059, -1,
4250 -1, -1, -1, -1, -1, -1, -1, -1, -1, 871,
4251 -1, -1, 874, -1, -1, -1, 729, -1, -1, 732,
4252 -1, -1, -1, -1, -1, -1, 786, 787, 831, -1,
4253 -1, -1, -1, 836, -1, -1, -1, -1, -1, -1,
4254 -1, -1, -1, -1, 906, -1, -1, 881, 882, 852,
4255 -1, -1, -1, 915, -1, -1, 859, 891, 892, 893,
4256 -1, -1, -1, 897, 898, -1, -1, -1, 871, 1130,
4257 1131, 874, -1, -1, -1, -1, 881, 882, -1, -1,
4258 -1, -1, -1, -1, -1, -1, 891, 892, 893, -1,
4259 -1, -1, 897, 898, -1, -1, -1, -1, -1, 902,
4260 -1, -1, -1, 906, -1, -1, 819, -1, -1, -1,
4261 -1, -1, 915, -1, -1, -1, -1, -1, 831, -1,
4262 -1, 881, 882, 836, -1, -1, -1, -1, -1, -1,
4263 -1, 891, 892, 893, -1, 16, 17, 897, 898, 852,
4264 -1, -1, -1, -1, -1, -1, 859, -1, -1, 983,
4265 -1, -1, -1, 1015, -1, 1017, -1, 991, 871, -1,
4266 -1, 874, -1, -1, 967, -1, -1, 48, 49, 50,
4267 51, -1, -1, -1, 55, 56, -1, -1, 983, -1,
4268 -1, 1242, -1, -1, 1018, -1, 991, 68, 69, 902,
4269 -1, 1053, -1, 906, 1056, -1, -1, -1, -1, -1,
4270 -1, -1, 915, -1, -1, -1, -1, -1, 33, 34,
4271 35, 36, 1015, 1018, 1017, -1, -1, -1, -1, 100,
4272 -1, -1, -1, 983, 49, 50, 51, -1, -1, -1,
4273 -1, 991, -1, -1, 59, 60, 61, 62, 63, -1,
4274 -1, 1075, -1, -1, -1, -1, -1, -1, -1, -1,
4275 1053, -1, -1, 1056, -1, -1, 1059, -1, 1018, -1,
4276 -1, -1, -1, -1, -1, -1, -1, -1, 1130, 1131,
4277 1075, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4278 -1, -1, -1, -1, -1, 110, 111, 112, 113, 114,
4279 115, 116, 117, 118, -1, -1, -1, -1, -1, -1,
4280 -1, -1, 1015, -1, 1017, -1, -1, -1, -1, -1,
4281 -1, -1, -1, -1, 139, 1075, -1, 1151, -1, -1,
4282 -1, 1155, -1, -1, -1, -1, 207, 1130, 1131, 210,
4283 211, 212, -1, 214, -1, -1, -1, 1171, -1, -1,
4284 1053, -1, -1, 1056, -1, -1, 1151, -1, -1, 230,
4285 1155, 232, 233, -1, -1, -1, -1, -1, -1, -1,
4286 -1, -1, -1, -1, -1, -1, 1171, -1, -1, -1,
4287 -1, -1, -1, 1207, 1208, -1, -1, -1, -1, -1,
4288 1242, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4289 -1, 1151, -1, -1, -1, 1155, -1, -1, -1, -1,
4290 -1, -1, 1207, 1208, -1, -1, -1, -1, -1, -1,
4291 -1, 1171, -1, -1, -1, -1, -1, 1130, 1131, -1,
4292 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4293 -1, -1, -1, -1, -1, -1, -1, -1, -1, 1242,
4294 -1, -1, -1, -1, -1, 326, -1, 1207, 1208, -1,
4295 331, -1, 333, 334, 335, 336, 337, -1, -1, 340,
4296 341, 342, 343, 344, 345, 346, 347, 348, -1, -1,
4297 351, 352, 353, 354, 355, 356, 357, 358, 359, 360,
4298 -1, -1, -1, 364, -1, -1, -1, -1, -1, -1,
4299 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4300 -1, -1, -1, -1, -1, -1, -1, 77, 78, 79,
4301 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
4302 -1, -1, -1, -1, 94, 95, -1, -1, -1, 1242,
4303 -1, -1, -1, 414, 415, -1, -1, -1, -1, -1,
4304 -1, -1, 423, 424, 425, -1, -1, -1, 429, -1,
4305 431, 432, 433, -1, -1, -1, -1, 127, 439, 129,
4306 130, 131, 132, 133, 134, 135, 136, 137, 138, -1,
4307 -1, -1, -1, 454, -1, -1, -1, -1, 459, -1,
4308 -1, -1, -1, 153, -1, -1, -1, -1, -1, 470,
4309 -1, -1, 473, -1, -1, -1, -1, -1, -1, 0,
4310 -1, -1, -1, 484, -1, -1, -1, 8, 9, 10,
4311 -1, -1, 13, 14, 15, -1, 17, -1, -1, -1,
4312 -1, 502, -1, -1, 25, 26, 27, 28, 29, -1,
4313 -1, -1, -1, -1, -1, -1, 37, 38, 519, 40,
4314 41, 42, 43, 44, -1, -1, -1, -1, -1, -1,
4315 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4316 -1, -1, -1, -1, -1, -1, -1, 68, -1, -1,
4317 -1, -1, -1, -1, -1, -1, 77, 78, 79, 80,
4318 81, 82, 83, 84, 85, 86, 87, 88, 89, -1,
4319 -1, -1, -1, 94, 95, 96, 97, -1, 99, 100,
4320 -1, -1, -1, -1, -1, 106, -1, -1, -1, -1,
4321 -1, 592, -1, -1, -1, -1, -1, -1, -1, 120,
4322 -1, 602, 123, -1, -1, 126, 127, 128, 129, 130,
4323 131, 132, 133, 134, 135, 136, 137, 138, 619, -1,
4324 621, -1, 143, 144, 145, 146, -1, -1, 149, 150,
4325 151, -1, 153, 634, -1, 636, -1, -1, -1, 0,
4326 -1, -1, -1, -1, -1, -1, -1, 8, 9, 10,
4327 -1, -1, 13, 14, 15, -1, 17, -1, -1, -1,
4328 -1, -1, -1, -1, 25, 26, 27, -1, -1, -1,
4329 -1, -1, -1, -1, -1, -1, 37, 38, 679, 40,
4330 41, 42, 43, 44, 685, 686, -1, 688, -1, -1,
4331 -1, 692, 693, -1, -1, -1, -1, 698, 699, 700,
4332 -1, -1, -1, -1, -1, -1, 707, 68, -1, -1,
4333 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4334 -1, 722, -1, -1, -1, -1, -1, -1, -1, -1,
4335 -1, -1, -1, -1, -1, 96, 97, -1, -1, -1,
4336 -1, -1, -1, -1, -1, -1, 747, 748, -1, 750,
4337 751, 33, 34, 35, 36, -1, -1, -1, -1, 120,
4338 -1, -1, -1, -1, -1, -1, -1, 49, 50, 51,
4339 52, -1, 773, -1, 56, -1, 58, 59, 60, 61,
4340 62, 63, 143, 144, -1, -1, -1, 148, 149, -1,
4341 151, -1, 153, -1, -1, 77, -1, -1, -1, -1,
4342 -1, -1, -1, -1, -1, -1, -1, -1, 90, 91,
4343 -1, 812, -1, -1, -1, -1, 98, -1, 819, 101,
4344 -1, -1, 104, 105, -1, 107, 108, -1, 110, 111,
4345 112, 113, 114, 115, 116, 117, 118, -1, -1, -1,
4346 -1, -1, -1, -1, -1, 846, -1, -1, -1, -1,
4347 132, -1, -1, -1, -1, 0, 1, 139, 3, 4,
4348 5, 6, 7, 864, -1, 866, 11, 12, -1, -1,
4349 -1, 16, -1, 18, 19, 20, 21, 22, 23, 24,
4350 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
4351 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
4352 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
4353 55, 56, 57, 914, 59, 60, 61, 62, 63, 64,
4354 65, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4355 75, 76, -1, -1, -1, -1, -1, -1, -1, -1,
4356 -1, 942, -1, -1, -1, 90, 91, -1, -1, -1,
4357 -1, -1, -1, 98, -1, -1, 101, 102, -1, 104,
4358 105, -1, 107, -1, -1, 110, 111, 112, 113, 114,
4359 115, 116, 117, 118, -1, -1, -1, -1, -1, -1,
4360 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4361 -1, -1, -1, -1, 139, 140, 141, -1, -1, -1,
4362 -1, -1, -1, -1, -1, -1, 151, -1, 153, -1,
4363 -1, -1, -1, -1, -1, -1, -1, -1, 1019, 0,
4364 -1, -1, -1, -1, -1, -1, -1, 8, 9, 10,
4365 -1, 1032, 13, 14, 15, -1, 17, -1, -1, -1,
4366 -1, 44, -1, -1, 25, -1, 27, 28, 29, -1,
4367 -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
4368 41, 42, 43, 44, -1, -1, -1, -1, -1, -1,
4369 -1, -1, -1, -1, 77, 78, 79, 80, 81, 82,
4370 83, 84, 85, 86, 87, 88, 89, 68, -1, -1,
4371 -1, 94, 95, 1094, -1, -1, 77, 78, 79, 80,
4372 81, 82, 83, 84, 85, 86, 87, 88, 89, -1,
4373 -1, -1, -1, 94, 95, 96, 97, -1, 99, 100,
4374 -1, -1, -1, -1, 127, 106, 129, 130, 131, 132,
4375 133, 134, 135, 136, 137, 138, -1, -1, -1, 120,
4376 -1, -1, 123, 146, -1, 126, 127, 128, 129, 130,
4377 131, 132, 133, 134, 135, 136, 137, 138, -1, -1,
4378 -1, -1, -1, 144, 145, 146, 0, -1, 149, 150,
4379 151, -1, 153, -1, 8, 9, 10, -1, -1, 13,
4380 14, 15, -1, 17, -1, -1, -1, -1, 44, -1,
4381 -1, 25, -1, 27, 28, 29, -1, -1, -1, -1,
4382 -1, -1, -1, 37, 38, -1, 40, 41, 42, 43,
4383 44, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4384 -1, 77, 78, 79, 80, 81, 82, 83, 84, 85,
4385 86, 87, 88, 89, 68, -1, -1, -1, 94, 95,
4386 -1, -1, -1, 77, 78, 79, 80, 81, 82, 83,
4387 84, 85, 86, 87, 88, 89, -1, -1, -1, -1,
4388 94, 95, 96, 97, -1, 99, 100, -1, -1, -1,
4389 -1, 127, 106, 129, 130, 131, 132, 133, 134, 135,
4390 136, 137, 138, -1, -1, -1, 120, -1, -1, 123,
4391 -1, -1, 126, 127, 128, 129, 130, 131, 132, 133,
4392 134, 135, 136, 137, 138, -1, -1, -1, -1, -1,
4393 144, 145, 146, 0, -1, 149, 150, 151, -1, 153,
4394 -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
4395 17, -1, -1, -1, -1, -1, -1, -1, 25, 26,
4396 27, 28, 29, -1, -1, -1, -1, -1, -1, -1,
4397 37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
4398 -1, -1, -1, -1, -1, -1, -1, -1, 77, 78,
4399 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
4400 89, 68, -1, -1, -1, 94, 95, -1, -1, -1,
4401 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
4402 87, 88, 89, -1, -1, -1, -1, 94, 95, 96,
4403 97, -1, -1, 100, -1, -1, -1, -1, 127, 106,
4404 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
4405 -1, -1, -1, 120, -1, -1, 123, -1, -1, -1,
4406 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
4407 137, 138, -1, -1, -1, -1, 143, 144, 145, 146,
4408 0, -1, 149, 150, 151, -1, 153, -1, 8, 9,
4409 10, -1, -1, 13, 14, 15, -1, 17, -1, -1,
4410 -1, -1, -1, -1, -1, 25, 26, 27, 28, 29,
4411 -1, -1, -1, -1, -1, -1, -1, 37, 38, -1,
4412 40, 41, 42, 43, 44, -1, -1, -1, -1, -1,
4413 -1, -1, -1, -1, -1, 77, 78, 79, 80, 81,
4414 82, 83, 84, 85, 86, 87, 88, 89, 68, -1,
4415 -1, -1, 94, 95, -1, -1, -1, 77, 78, 79,
4416 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
4417 -1, -1, -1, -1, 94, 95, 96, 97, -1, -1,
4418 100, -1, -1, -1, -1, -1, 106, 129, 130, 131,
4419 132, 133, 134, 135, 136, 137, 138, -1, -1, -1,
4420 120, -1, -1, 123, -1, -1, -1, 127, 128, 129,
4421 130, 131, 132, 133, 134, 135, 136, 137, 138, -1,
4422 -1, -1, -1, 143, 144, 145, 146, 0, -1, 149,
4423 150, 151, -1, 153, -1, 8, 9, 10, -1, -1,
4424 13, 14, 15, -1, 17, -1, -1, -1, -1, -1,
4425 -1, -1, 25, -1, 27, 28, 29, -1, -1, -1,
4426 -1, -1, -1, -1, 37, 38, -1, 40, 41, 42,
4427 43, 44, -1, -1, -1, -1, -1, -1, -1, -1,
4428 -1, -1, 77, 78, 79, 80, 81, 82, 83, 84,
4429 -1, 86, 87, -1, -1, 68, -1, -1, -1, 94,
4430 95, -1, -1, -1, 77, 78, 79, 80, 81, 82,
4431 83, 84, 85, 86, 87, 88, 89, -1, -1, -1,
4432 -1, 94, 95, 96, 97, -1, 99, 100, -1, -1,
4433 -1, -1, -1, 106, 129, 130, 131, 132, 133, 134,
4434 135, 136, 137, 138, -1, -1, -1, 120, -1, -1,
4435 123, -1, -1, 126, 127, 128, 129, 130, 131, 132,
4436 133, 134, 135, 136, 137, 138, -1, -1, -1, -1,
4437 -1, 144, 145, 146, 0, -1, 149, 150, 151, -1,
4438 153, -1, 8, 9, 10, -1, -1, 13, 14, 15,
4439 -1, 17, -1, -1, -1, -1, -1, -1, -1, 25,
4440 26, 27, 28, -1, -1, -1, -1, -1, -1, -1,
4441 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1,
4442 -1, -1, -1, -1, -1, -1, -1, -1, -1, 77,
4443 78, 79, 80, 81, 82, 83, -1, -1, 86, 87,
4444 -1, -1, 68, -1, -1, -1, 94, 95, -1, -1,
4445 -1, 77, 78, 79, 80, 81, 82, 83, 84, 85,
4446 86, 87, 88, 89, -1, -1, -1, -1, 94, 95,
4447 96, 97, -1, -1, 100, -1, -1, -1, -1, -1,
4448 106, 129, 130, 131, 132, 133, 134, 135, 136, 137,
4449 138, -1, -1, -1, 120, -1, -1, -1, -1, -1,
4450 -1, 127, -1, 129, 130, 131, 132, 133, 134, 135,
4451 136, 137, 138, -1, -1, -1, -1, 143, 144, 145,
4452 146, 0, 148, 149, 150, 151, -1, 153, -1, 8,
4453 9, 10, -1, -1, 13, 14, 15, -1, 17, -1,
4454 -1, -1, -1, -1, -1, -1, 25, -1, 27, 28,
4455 29, -1, -1, -1, -1, -1, -1, -1, 37, 38,
4456 -1, 40, 41, 42, 43, 44, -1, -1, -1, -1,
4457 -1, -1, -1, -1, -1, -1, 77, 78, 79, 80,
4458 81, 82, 83, -1, -1, 86, 87, -1, -1, 68,
4459 -1, -1, -1, 94, 95, -1, -1, -1, 77, 78,
4460 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
4461 89, -1, -1, -1, -1, 94, 95, 96, 97, -1,
4462 -1, 100, -1, -1, -1, -1, -1, 106, 129, 130,
4463 131, 132, 133, 134, 135, 136, 137, 138, -1, -1,
4464 -1, 120, -1, -1, 123, -1, -1, -1, 127, 128,
4465 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
4466 -1, -1, -1, -1, -1, 144, 145, 146, 0, -1,
4467 149, 150, 151, -1, 153, -1, 8, 9, 10, -1,
4468 -1, 13, 14, 15, -1, 17, -1, -1, -1, -1,
4469 -1, -1, -1, 25, 26, 27, 28, -1, -1, -1,
4470 -1, -1, -1, -1, -1, 37, 38, -1, 40, 41,
4471 42, 43, 44, -1, -1, -1, -1, -1, -1, -1,
4472 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4473 -1, -1, -1, -1, -1, -1, 68, -1, -1, -1,
4474 -1, -1, -1, -1, -1, 77, 78, 79, 80, 81,
4475 82, 83, 84, 85, 86, 87, 88, 89, -1, -1,
4476 -1, -1, 94, 95, 96, 97, -1, -1, 100, -1,
4477 -1, -1, -1, -1, 106, -1, -1, -1, -1, -1,
4478 -1, -1, -1, -1, -1, -1, -1, -1, 120, -1,
4479 -1, -1, -1, -1, -1, 127, -1, 129, 130, 131,
4480 132, 133, 134, 135, 136, 137, 138, -1, -1, -1,
4481 -1, 143, 144, 145, 146, 0, 148, 149, 150, 151,
4482 -1, 153, -1, 8, 9, 10, -1, -1, 13, 14,
4483 15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
4484 25, -1, 27, 28, -1, -1, -1, -1, -1, -1,
4485 -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
4486 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4487 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4488 -1, -1, -1, 68, -1, -1, -1, -1, -1, -1,
4489 -1, -1, 77, 78, 79, 80, 81, 82, 83, 84,
4490 85, 86, 87, 88, 89, -1, -1, -1, -1, 94,
4491 95, 96, 97, -1, -1, 100, -1, -1, -1, -1,
4492 -1, 106, -1, -1, -1, -1, -1, -1, -1, -1,
4493 -1, -1, -1, -1, -1, 120, -1, -1, -1, -1,
4494 -1, -1, 127, -1, 129, 130, 131, 132, 133, 134,
4495 135, 136, 137, 138, -1, -1, -1, -1, -1, 144,
4496 145, 146, 0, 148, 149, 150, 151, -1, 153, -1,
4497 8, 9, 10, -1, -1, -1, 14, 15, -1, 17,
4498 -1, -1, -1, -1, -1, -1, -1, 25, 26, -1,
4499 -1, -1, -1, -1, -1, -1, -1, -1, -1, 37,
4500 38, -1, 40, 41, 42, 43, 44, -1, -1, -1,
4501 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4502 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4503 68, -1, -1, -1, -1, -1, -1, -1, -1, 77,
4504 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
4505 88, 89, -1, -1, -1, -1, 94, 95, 96, 97,
4506 -1, 99, -1, -1, -1, -1, -1, -1, -1, -1,
4507 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4508 -1, -1, 120, -1, -1, -1, -1, -1, 126, 127,
4509 -1, 129, 130, 131, 132, 133, 134, 135, 136, 137,
4510 138, -1, -1, -1, -1, 143, 144, 145, 146, 0,
4511 -1, 149, -1, 151, -1, 153, -1, 8, 9, 10,
4512 -1, -1, -1, 14, 15, -1, 17, -1, -1, -1,
4513 -1, -1, -1, -1, 25, 26, -1, -1, -1, -1,
4514 -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
4515 41, 42, 43, 44, -1, -1, -1, -1, -1, -1,
4516 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4517 -1, -1, -1, -1, -1, -1, -1, 68, -1, -1,
4518 -1, -1, -1, -1, -1, -1, 77, 78, 79, 80,
4519 81, 82, 83, 84, 85, 86, 87, 88, 89, -1,
4520 -1, -1, -1, 94, 95, 96, 97, -1, 99, -1,
4521 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4522 -1, -1, -1, -1, -1, -1, -1, -1, -1, 120,
4523 -1, -1, -1, -1, -1, 126, 127, -1, 129, 130,
4524 131, 132, 133, 134, 135, 136, 137, 138, -1, -1,
4525 -1, -1, 143, 144, 145, 146, 0, -1, 149, -1,
4526 151, -1, 153, -1, 8, 9, 10, -1, -1, -1,
4527 14, 15, -1, 17, -1, -1, -1, -1, -1, -1,
4528 -1, 25, -1, -1, -1, -1, -1, -1, -1, -1,
4529 -1, -1, -1, 37, 38, -1, 40, 41, 42, 43,
4530 44, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4531 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4532 -1, -1, -1, -1, 68, -1, -1, -1, -1, -1,
4533 -1, -1, -1, 77, 78, 79, 80, 81, 82, 83,
4534 84, 85, 86, 87, 88, 89, -1, -1, -1, -1,
4535 94, 95, 96, 97, -1, 99, -1, -1, -1, -1,
4536 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4537 -1, -1, -1, -1, -1, -1, 120, -1, -1, -1,
4538 -1, -1, 126, 127, -1, 129, 130, 131, 132, 133,
4539 134, 135, 136, 137, 138, -1, -1, -1, -1, -1,
4540 144, 145, 146, 0, -1, 149, -1, 151, -1, 153,
4541 -1, 8, 9, 10, -1, -1, -1, 14, 15, -1,
4542 17, -1, -1, -1, -1, -1, -1, -1, 25, -1,
4543 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4544 37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
4545 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4546 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4547 -1, 68, -1, -1, -1, -1, -1, -1, -1, -1,
4548 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
4549 87, 88, 89, -1, -1, -1, -1, 94, 95, 96,
4550 97, -1, 99, -1, -1, -1, -1, -1, -1, -1,
4551 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4552 -1, -1, -1, 120, -1, -1, -1, -1, -1, 126,
4553 127, -1, 129, 130, 131, 132, 133, 134, 135, 136,
4554 137, 138, -1, -1, -1, -1, -1, 144, 145, 146,
4555 -1, -1, 149, -1, 151, 1, 153, 3, 4, 5,
4556 6, 7, 8, 9, 10, 11, 12, -1, -1, 15,
4557 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
4558 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
4559 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
4560 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
4561 56, 57, -1, 59, 60, 61, 62, 63, 64, 65,
4562 -1, -1, -1, -1, -1, -1, -1, -1, -1, 75,
4563 76, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4564 -1, -1, -1, -1, 90, 91, -1, -1, -1, -1,
4565 -1, -1, 98, -1, -1, 101, 102, -1, 104, 105,
4566 -1, 107, -1, -1, 110, 111, 112, 113, 114, 115,
4567 116, 117, 118, -1, -1, -1, -1, -1, -1, -1,
4568 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4569 -1, -1, -1, 139, 140, 141, -1, -1, -1, -1,
4570 -1, -1, -1, -1, -1, 151, 1, 153, 3, 4,
4571 5, 6, 7, -1, -1, 10, 11, 12, -1, 14,
4572 15, 16, -1, 18, 19, 20, 21, 22, 23, 24,
4573 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
4574 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
4575 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
4576 55, 56, 57, -1, 59, 60, 61, 62, 63, 64,
4577 65, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4578 75, 76, -1, -1, -1, -1, -1, -1, -1, -1,
4579 -1, -1, -1, -1, -1, 90, 91, -1, -1, -1,
4580 -1, -1, -1, 98, -1, -1, 101, 102, -1, 104,
4581 105, -1, 107, -1, -1, 110, 111, 112, 113, 114,
4582 115, 116, 117, 118, -1, -1, -1, -1, -1, -1,
4583 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4584 -1, -1, -1, -1, 139, 140, 141, -1, -1, -1,
4585 -1, -1, -1, -1, -1, -1, 151, 1, 153, 3,
4586 4, 5, 6, 7, -1, -1, 10, 11, 12, -1,
4587 -1, 15, 16, 17, 18, 19, 20, 21, 22, 23,
4588 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
4589 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
4590 -1, 45, 46, 47, 48, 49, 50, 51, 52, 53,
4591 54, 55, 56, 57, -1, 59, 60, 61, 62, 63,
4592 64, 65, -1, -1, -1, -1, -1, -1, -1, -1,
4593 -1, 75, 76, -1, -1, -1, -1, -1, -1, -1,
4594 -1, -1, -1, -1, -1, -1, 90, 91, -1, -1,
4595 -1, -1, -1, -1, 98, -1, -1, 101, 102, -1,
4596 104, 105, -1, 107, -1, -1, 110, 111, 112, 113,
4597 114, 115, 116, 117, 118, -1, -1, -1, -1, -1,
4598 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4599 -1, -1, -1, -1, -1, 139, 140, 141, -1, -1,
4600 -1, -1, -1, -1, -1, -1, -1, 151, 1, 153,
4601 3, 4, 5, 6, 7, -1, -1, 10, 11, 12,
4602 -1, -1, 15, 16, -1, 18, 19, 20, 21, 22,
4603 23, 24, 25, -1, -1, -1, -1, 30, 31, 32,
4604 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4605 -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
4606 53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
4607 63, 64, 65, -1, -1, -1, -1, -1, -1, -1,
4608 -1, -1, 75, 76, -1, -1, -1, -1, -1, -1,
4609 -1, -1, -1, -1, -1, -1, -1, 90, 91, -1,
4610 -1, -1, -1, -1, -1, 98, -1, -1, 101, 102,
4611 -1, 104, 105, -1, 107, -1, -1, 110, 111, 112,
4612 113, 114, 115, 116, 117, 118, -1, -1, -1, -1,
4613 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4614 -1, -1, -1, -1, -1, -1, 139, 140, 141, -1,
4615 -1, -1, -1, -1, -1, -1, -1, -1, 151, 1,
4616 153, 3, 4, 5, 6, 7, -1, -1, 10, 11,
4617 12, -1, -1, 15, 16, -1, 18, 19, 20, 21,
4618 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
4619 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
4620 -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
4621 52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
4622 62, 63, 64, 65, -1, -1, -1, -1, -1, -1,
4623 -1, -1, -1, 75, 76, -1, -1, -1, -1, -1,
4624 -1, -1, -1, -1, -1, -1, -1, -1, 90, 91,
4625 -1, -1, -1, -1, -1, -1, 98, -1, -1, 101,
4626 102, -1, 104, 105, -1, 107, -1, -1, 110, 111,
4627 112, 113, 114, 115, 116, 117, 118, -1, -1, -1,
4628 -1, -1, -1, -1, -1, 1, -1, 3, 4, 5,
4629 6, 7, -1, 9, 10, 11, 12, 139, 140, 141,
4630 16, -1, 18, 19, 20, 21, 22, 23, 24, 151,
4631 -1, 153, -1, -1, 30, 31, 32, 33, 34, 35,
4632 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
4633 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
4634 56, 57, -1, 59, 60, 61, 62, 63, 64, 65,
4635 -1, -1, -1, -1, -1, -1, -1, -1, -1, 75,
4636 76, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4637 -1, -1, -1, -1, 90, 91, -1, -1, -1, -1,
4638 -1, -1, 98, -1, -1, 101, 102, -1, 104, 105,
4639 -1, 107, -1, -1, 110, 111, 112, 113, 114, 115,
4640 116, 117, 118, -1, -1, -1, -1, -1, -1, -1,
4641 -1, 1, -1, 3, 4, 5, 6, 7, -1, -1,
4642 -1, 11, 12, 139, 140, 141, 16, -1, 18, 19,
4643 20, 21, 22, 23, 24, 151, -1, 153, -1, -1,
4644 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4645 -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
4646 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
4647 60, 61, 62, 63, 64, 65, -1, -1, -1, -1,
4648 -1, -1, -1, -1, -1, 75, 76, -1, -1, -1,
4649 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4650 90, 91, -1, -1, -1, -1, -1, -1, 98, -1,
4651 -1, 101, 102, -1, 104, 105, -1, 107, -1, -1,
4652 110, 111, 112, 113, 114, 115, 116, 117, 118, -1,
4653 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4654 -1, -1, -1, -1, -1, -1, -1, -1, -1, 139,
4655 140, 141, -1, -1, -1, -1, -1, -1, -1, 149,
4656 -1, 151, 1, 153, 3, 4, 5, 6, 7, -1,
4657 -1, -1, 11, 12, -1, -1, -1, 16, -1, 18,
4658 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
4659 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
4660 39, -1, -1, -1, -1, -1, 45, 46, 47, 48,
4661 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
4662 59, 60, 61, 62, 63, 64, 65, -1, -1, -1,
4663 -1, -1, -1, -1, -1, -1, 75, 76, -1, -1,
4664 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4665 -1, 90, 91, -1, -1, -1, -1, -1, -1, 98,
4666 -1, -1, 101, 102, -1, 104, 105, -1, 107, -1,
4667 -1, 110, 111, 112, 113, 114, 115, 116, 117, 118,
4668 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4669 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4670 139, 140, 141, -1, -1, -1, -1, -1, -1, -1,
4671 149, -1, 151, 1, 153, 3, 4, 5, 6, 7,
4672 -1, -1, -1, 11, 12, -1, -1, -1, 16, -1,
4673 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
4674 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4675 -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
4676 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4677 -1, 59, 60, 61, 62, 63, 64, 65, -1, -1,
4678 -1, -1, -1, -1, -1, -1, -1, 75, 76, -1,
4679 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4680 -1, -1, 90, 91, -1, -1, -1, -1, -1, -1,
4681 98, -1, -1, 101, 102, -1, 104, 105, -1, 107,
4682 -1, -1, 110, 111, 112, 113, 114, 115, 116, 117,
4683 118, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4684 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4685 -1, 139, 140, 141, -1, -1, 144, -1, -1, -1,
4686 -1, -1, -1, 151, 1, 153, 3, 4, 5, 6,
4687 7, -1, -1, -1, 11, 12, -1, -1, -1, 16,
4688 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
4689 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
4690 -1, -1, 39, -1, -1, -1, -1, -1, 45, 46,
4691 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
4692 57, -1, 59, 60, 61, 62, 63, 64, 65, -1,
4693 -1, -1, -1, -1, -1, -1, -1, -1, 75, 76,
4694 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4695 -1, -1, -1, 90, 91, -1, -1, -1, -1, -1,
4696 -1, 98, -1, -1, 101, 102, -1, 104, 105, -1,
4697 107, -1, -1, 110, 111, 112, 113, 114, 115, 116,
4698 117, 118, -1, -1, -1, -1, -1, -1, -1, -1,
4699 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4700 -1, -1, 139, 140, 141, -1, -1, 144, -1, -1,
4701 -1, -1, -1, -1, 151, 1, 153, 3, 4, 5,
4702 6, 7, -1, -1, 10, 11, 12, -1, -1, -1,
4703 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
4704 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
4705 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
4706 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
4707 56, 57, -1, 59, 60, 61, 62, 63, 64, 65,
4708 -1, -1, -1, -1, -1, -1, -1, -1, -1, 75,
4709 76, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4710 -1, -1, -1, -1, 90, 91, -1, -1, -1, -1,
4711 -1, -1, 98, -1, -1, 101, 102, -1, 104, 105,
4712 -1, 107, -1, -1, 110, 111, 112, 113, 114, 115,
4713 116, 117, 118, -1, -1, -1, -1, -1, -1, -1,
4714 -1, 1, -1, 3, 4, 5, 6, 7, -1, -1,
4715 -1, 11, 12, 139, 140, 141, 16, -1, 18, 19,
4716 20, 21, 22, 23, 24, 151, -1, 153, -1, -1,
4717 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4718 -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
4719 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
4720 60, 61, 62, 63, 64, 65, -1, -1, -1, -1,
4721 -1, -1, -1, -1, -1, 75, 76, -1, -1, -1,
4722 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4723 90, 91, -1, -1, -1, -1, -1, -1, 98, -1,
4724 -1, 101, 102, -1, 104, 105, -1, 107, -1, -1,
4725 110, 111, 112, 113, 114, 115, 116, 117, 118, -1,
4726 120, -1, -1, -1, -1, -1, -1, -1, -1, 3,
4727 4, 5, -1, 7, -1, -1, -1, 11, 12, 139,
4728 140, 141, 16, -1, 18, 19, 20, 21, 22, 23,
4729 24, 151, -1, 153, -1, -1, 30, 31, 32, 33,
4730 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
4731 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
4732 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
4733 64, 65, -1, -1, -1, -1, -1, -1, -1, -1,
4734 -1, 75, 76, -1, -1, -1, -1, -1, -1, -1,
4735 -1, -1, -1, -1, -1, -1, 90, 91, -1, -1,
4736 -1, -1, -1, -1, 98, -1, -1, 101, 102, -1,
4737 104, 105, -1, 107, 108, 109, 110, 111, 112, 113,
4738 114, 115, 116, 117, 118, -1, -1, -1, -1, -1,
4739 -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
4740 -1, -1, -1, 11, 12, 139, 140, 141, 16, -1,
4741 18, 19, 20, 21, 22, 23, 24, -1, -1, 153,
4742 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
4743 -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
4744 -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
4745 -1, 59, 60, 61, 62, 63, 64, 65, -1, -1,
4746 -1, -1, -1, -1, -1, -1, -1, 75, 76, -1,
4747 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4748 -1, -1, 90, 91, -1, -1, -1, -1, -1, -1,
4749 98, -1, -1, 101, 102, -1, 104, 105, -1, -1,
4750 -1, -1, 110, 111, 112, 113, 114, 115, 116, 117,
4751 118, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4752 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
4753 12, 139, 140, 141, 16, -1, 18, 19, 20, 21,
4754 22, 23, 24, 151, -1, 153, -1, -1, 30, 31,
4755 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
4756 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
4757 52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
4758 62, 63, 64, 65, -1, -1, -1, -1, -1, -1,
4759 -1, -1, -1, 75, 76, -1, -1, -1, -1, -1,
4760 -1, -1, -1, -1, -1, -1, -1, -1, 90, 91,
4761 -1, -1, -1, -1, -1, -1, 98, -1, -1, 101,
4762 102, -1, 104, 105, -1, -1, -1, -1, 110, 111,
4763 112, 113, 114, 115, 116, 117, 118, -1, -1, -1,
4764 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
4765 6, 7, -1, -1, -1, 11, 12, 139, 140, 141,
4766 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
4767 -1, 153, -1, -1, 30, 31, 32, 33, 34, 35,
4768 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
4769 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
4770 56, 57, -1, 59, 60, 61, 62, 63, 64, 65,
4771 -1, -1, -1, -1, -1, -1, -1, -1, -1, 75,
4772 76, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4773 -1, -1, -1, -1, 90, 91, -1, -1, -1, -1,
4774 -1, -1, 98, -1, -1, 101, 102, -1, 104, 105,
4775 -1, 107, -1, -1, 110, 111, 112, 113, 114, 115,
4776 116, 117, 118, -1, -1, -1, -1, -1, -1, -1,
4777 -1, -1, -1, 3, 4, 5, 6, 7, -1, -1,
4778 -1, 11, 12, 139, 140, 141, 16, -1, 18, 19,
4779 20, 21, 22, 23, 24, 151, -1, -1, -1, -1,
4780 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
4781 -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
4782 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
4783 60, 61, 62, 63, 64, 65, -1, -1, -1, -1,
4784 -1, -1, -1, -1, -1, 75, 76, -1, -1, -1,
4785 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4786 90, 91, -1, -1, -1, -1, -1, -1, 98, -1,
4787 -1, 101, 102, -1, 104, 105, -1, 107, -1, -1,
4788 110, 111, 112, 113, 114, 115, 116, 117, 118, -1,
4789 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4790 -1, -1, -1, -1, -1, -1, -1, -1, -1, 139,
4791 140, 141, -1, -1, -1, -1, -1, -1, -1, -1,
4792 -1, 151, 3, 4, 5, 6, 7, 8, 9, 10,
4793 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
4794 21, 22, 23, 24, 25, 26, -1, -1, -1, 30,
4795 31, 32, 33, 34, 35, 36, 37, 38, 39, -1,
4796 -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
4797 51, 52, 53, 54, 55, 56, 57, -1, -1, -1,
4798 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4799 -1, -1, -1, -1, 75, 76, 77, 78, 79, 80,
4800 81, 82, 83, -1, -1, 86, 87, -1, -1, -1,
4801 -1, 92, 93, 94, 95, -1, -1, -1, -1, -1,
4802 -1, -1, -1, -1, -1, -1, 107, 108, -1, -1,
4803 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4804 -1, -1, -1, -1, -1, -1, -1, -1, 129, 130,
4805 131, 132, 133, 134, 135, 136, 137, 138, -1, 140,
4806 141, -1, -1, -1, -1, -1, 147, 148, 3, 4,
4807 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
4808 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
4809 25, 26, -1, -1, -1, 30, 31, 32, 33, 34,
4810 35, 36, 37, 38, 39, -1, -1, -1, -1, -1,
4811 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
4812 55, 56, 57, -1, -1, -1, -1, -1, -1, -1,
4813 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4814 75, 76, 77, 78, 79, 80, 81, 82, 83, -1,
4815 -1, 86, 87, -1, -1, -1, -1, 92, 93, 94,
4816 95, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4817 -1, -1, 107, 108, -1, -1, -1, -1, -1, -1,
4818 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4819 -1, -1, -1, -1, 129, 130, 131, 132, 133, 134,
4820 135, 136, 137, 138, -1, 140, 141, -1, -1, -1,
4821 -1, -1, 147, 3, 4, 5, 6, 7, 8, 9,
4822 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
4823 20, 21, 22, 23, 24, 25, 26, -1, -1, -1,
4824 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
4825 -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
4826 50, 51, 52, 53, 54, -1, 56, -1, -1, -1,
4827 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4828 -1, -1, -1, -1, -1, 75, 76, 77, 78, 79,
4829 80, 81, 82, 83, -1, -1, 86, 87, -1, -1,
4830 -1, -1, 92, 93, 94, 95, -1, -1, -1, -1,
4831 -1, -1, -1, -1, -1, -1, -1, 107, 108, -1,
4832 -1, 111, -1, -1, -1, -1, -1, -1, -1, -1,
4833 -1, -1, -1, -1, -1, -1, -1, -1, -1, 129,
4834 130, 131, 132, 133, 134, 135, 136, 137, 138, -1,
4835 140, 141, -1, -1, -1, -1, -1, 147, 3, 4,
4836 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
4837 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
4838 25, 26, -1, -1, -1, 30, 31, 32, 33, 34,
4839 35, 36, 37, 38, 39, -1, -1, -1, -1, -1,
4840 45, 46, 47, 48, 49, 50, 51, 52, 53, -1,
4841 -1, 56, -1, -1, -1, -1, -1, -1, -1, -1,
4842 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4843 75, 76, 77, 78, 79, 80, 81, 82, 83, -1,
4844 -1, 86, 87, -1, -1, -1, -1, 92, 93, 94,
4845 95, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4846 -1, -1, 107, 108, -1, -1, 111, -1, -1, -1,
4847 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4848 -1, -1, -1, -1, 129, 130, 131, 132, 133, 134,
4849 135, 136, 137, 138, -1, 140, 141, -1, -1, -1,
4850 -1, -1, 147, 3, 4, 5, 6, 7, 8, 9,
4851 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
4852 20, 21, 22, 23, 24, 25, 26, -1, -1, -1,
4853 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
4854 -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
4855 50, 51, 52, 53, -1, -1, 56, -1, -1, -1,
4856 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4857 -1, -1, -1, -1, -1, 75, 76, 77, 78, 79,
4858 80, 81, 82, 83, -1, -1, 86, 87, -1, -1,
4859 -1, -1, 92, 93, 94, 95, -1, -1, -1, -1,
4860 -1, -1, -1, -1, -1, -1, -1, 107, 108, -1,
4861 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4862 -1, -1, -1, -1, -1, -1, -1, -1, -1, 129,
4863 130, 131, 132, 133, 134, 135, 136, 137, 138, -1,
4864 140, 141, 3, 4, 5, -1, 7, 147, -1, -1,
4865 11, 12, -1, -1, -1, 16, -1, 18, 19, 20,
4866 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4867 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4868 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4869 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4870 61, 62, 63, 64, 65, -1, -1, -1, -1, -1,
4871 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4872 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4873 -1, -1, -1, -1, -1, -1, -1, 98, -1, -1,
4874 101, 102, -1, 104, 105, -1, -1, -1, -1, 110,
4875 111, 112, 113, 114, 115, 116, 117, 118, -1, -1,
4876 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4877 -1, 3, 4, 5, -1, 7, -1, -1, 139, 11,
4878 12, -1, -1, -1, 16, 146, 18, 19, 20, 21,
4879 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
4880 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
4881 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
4882 52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
4883 62, 63, 64, 65, -1, -1, -1, -1, -1, -1,
4884 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4885 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4886 -1, -1, -1, -1, -1, -1, 98, -1, -1, 101,
4887 102, -1, 104, 105, -1, -1, -1, -1, 110, 111,
4888 112, 113, 114, 115, 116, 117, 118, -1, -1, -1,
4889 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4890 3, 4, 5, 6, 7, -1, -1, 139, 11, 12,
4891 -1, -1, -1, 16, 146, 18, 19, 20, 21, 22,
4892 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
4893 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4894 -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
4895 53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
4896 63, 64, 65, -1, -1, -1, -1, -1, -1, -1,
4897 -1, -1, 75, 76, -1, -1, -1, -1, -1, -1,
4898 -1, -1, -1, -1, -1, -1, -1, 90, 91, -1,
4899 -1, -1, -1, -1, -1, 98, -1, -1, 101, 102,
4900 -1, 104, 105, -1, 107, -1, -1, 110, 111, 112,
4901 113, 114, 115, 116, 117, 118, -1, -1, -1, -1,
4902 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
4903 7, -1, -1, -1, 11, 12, 139, 140, 141, 16,
4904 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
4905 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
4906 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
4907 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
4908 57, 58, 59, 60, 61, 62, 63, 64, 65, -1,
4909 -1, -1, -1, -1, -1, -1, -1, -1, 75, 76,
4910 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4911 -1, -1, -1, 90, 91, -1, -1, -1, -1, -1,
4912 -1, 98, -1, -1, 101, 102, -1, 104, 105, -1,
4913 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
4914 117, 118, -1, -1, -1, -1, -1, -1, -1, -1,
4915 -1, -1, 3, 4, 5, 6, 7, -1, -1, -1,
4916 11, 12, 139, 140, 141, 16, -1, 18, 19, 20,
4917 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4918 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4919 -1, -1, -1, -1, 45, 46, -1, 48, 49, 50,
4920 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
4921 61, 62, 63, 64, 65, -1, -1, -1, -1, -1,
4922 -1, -1, -1, -1, 75, 76, -1, -1, -1, -1,
4923 -1, -1, -1, -1, -1, -1, -1, -1, -1, 90,
4924 91, -1, -1, -1, -1, -1, -1, 98, -1, -1,
4925 101, 102, -1, 104, 105, -1, 107, -1, -1, 110,
4926 111, 112, 113, 114, 115, 116, 117, 118, -1, -1,
4927 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
4928 5, -1, 7, -1, -1, -1, 11, 12, 139, 140,
4929 141, 16, -1, 18, 19, 20, 21, 22, 23, 24,
4930 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
4931 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
4932 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
4933 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
4934 65, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4935 75, 76, -1, -1, -1, -1, -1, -1, -1, -1,
4936 -1, -1, -1, -1, -1, 90, 91, -1, -1, -1,
4937 -1, -1, -1, 98, -1, -1, 101, 102, -1, 104,
4938 105, -1, 107, 108, 109, 110, 111, 112, 113, 114,
4939 115, 116, 117, 118, -1, -1, -1, -1, -1, -1,
4940 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
4941 -1, -1, 11, 12, 139, 140, 141, 16, -1, 18,
4942 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
4943 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
4944 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
4945 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
4946 59, 60, 61, 62, 63, 64, 65, -1, -1, -1,
4947 -1, -1, -1, -1, -1, -1, 75, 76, -1, -1,
4948 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4949 -1, 90, 91, -1, -1, -1, -1, -1, -1, 98,
4950 -1, -1, 101, 102, -1, 104, 105, -1, 107, 108,
4951 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
4952 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4953 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
4954 139, 140, 141, 16, -1, 18, 19, 20, 21, 22,
4955 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
4956 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
4957 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
4958 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
4959 63, 64, 65, -1, -1, -1, -1, -1, -1, -1,
4960 -1, -1, 75, 76, -1, -1, -1, -1, -1, -1,
4961 -1, -1, -1, -1, -1, -1, -1, 90, 91, -1,
4962 -1, -1, -1, -1, -1, 98, -1, -1, 101, 102,
4963 -1, 104, 105, -1, 107, 108, 109, 110, 111, 112,
4964 113, 114, 115, 116, 117, 118, -1, -1, -1, -1,
4965 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
4966 7, -1, -1, -1, 11, 12, 139, 140, 141, 16,
4967 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
4968 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
4969 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
4970 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
4971 57, 58, 59, 60, 61, 62, 63, 64, 65, -1,
4972 -1, -1, -1, -1, -1, -1, -1, -1, 75, 76,
4973 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4974 -1, -1, -1, 90, 91, -1, -1, -1, -1, -1,
4975 -1, 98, -1, -1, 101, 102, -1, 104, 105, -1,
4976 107, 108, -1, 110, 111, 112, 113, 114, 115, 116,
4977 117, 118, -1, -1, -1, -1, -1, -1, -1, -1,
4978 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
4979 11, 12, 139, 140, 141, 16, -1, 18, 19, 20,
4980 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
4981 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
4982 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
4983 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
4984 61, 62, 63, 64, 65, -1, -1, -1, -1, -1,
4985 -1, -1, -1, -1, 75, 76, -1, -1, -1, -1,
4986 -1, -1, -1, -1, -1, -1, -1, -1, -1, 90,
4987 91, -1, -1, -1, -1, -1, -1, 98, -1, -1,
4988 101, 102, -1, 104, 105, -1, -1, 108, 109, 110,
4989 111, 112, 113, 114, 115, 116, 117, 118, -1, -1,
4990 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
4991 5, -1, 7, -1, -1, -1, 11, 12, 139, 140,
4992 141, 16, -1, 18, 19, 20, 21, 22, 23, 24,
4993 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
4994 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
4995 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
4996 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
4997 65, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4998 75, 76, -1, -1, -1, -1, -1, -1, -1, -1,
4999 -1, -1, -1, -1, -1, 90, 91, -1, -1, -1,
5000 -1, -1, -1, 98, -1, -1, 101, 102, -1, 104,
5001 105, -1, 107, 108, -1, 110, 111, 112, 113, 114,
5002 115, 116, 117, 118, -1, -1, -1, -1, -1, -1,
5003 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
5004 -1, -1, 11, 12, 139, 140, 141, 16, -1, 18,
5005 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
5006 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
5007 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
5008 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
5009 59, 60, 61, 62, 63, 64, 65, -1, -1, -1,
5010 -1, -1, -1, -1, -1, -1, 75, 76, -1, -1,
5011 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5012 -1, 90, 91, -1, -1, -1, -1, -1, -1, 98,
5013 -1, -1, 101, 102, -1, 104, 105, -1, -1, 108,
5014 -1, 110, 111, 112, 113, 114, 115, 116, 117, 118,
5015 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5016 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
5017 139, 140, 141, 16, -1, 18, 19, 20, 21, 22,
5018 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
5019 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
5020 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
5021 53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
5022 63, 64, 65, -1, -1, -1, -1, -1, -1, -1,
5023 -1, -1, 75, 76, -1, -1, -1, -1, -1, -1,
5024 -1, -1, -1, -1, -1, -1, -1, 90, 91, -1,
5025 -1, -1, -1, -1, -1, 98, -1, -1, 101, 102,
5026 -1, 104, 105, -1, 107, -1, -1, 110, 111, 112,
5027 113, 114, 115, 116, 117, 118, -1, -1, -1, -1,
5028 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
5029 7, -1, -1, -1, 11, 12, 139, 140, 141, 16,
5030 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
5031 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
5032 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
5033 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
5034 57, -1, 59, 60, 61, 62, 63, 64, 65, -1,
5035 -1, -1, -1, -1, -1, -1, -1, -1, 75, 76,
5036 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5037 -1, -1, -1, 90, 91, -1, -1, -1, -1, -1,
5038 -1, 98, -1, -1, 101, 102, -1, 104, 105, -1,
5039 107, -1, -1, 110, 111, 112, 113, 114, 115, 116,
5040 117, 118, -1, -1, -1, -1, -1, -1, -1, -1,
5041 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
5042 11, 12, 139, 140, 141, 16, -1, 18, 19, 20,
5043 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
5044 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
5045 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
5046 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
5047 61, 62, 63, 64, 65, -1, -1, -1, -1, -1,
5048 -1, -1, -1, -1, 75, 76, -1, -1, -1, -1,
5049 -1, -1, -1, -1, -1, -1, -1, -1, -1, 90,
5050 91, -1, -1, -1, -1, -1, -1, 98, -1, -1,
5051 101, 102, -1, 104, 105, -1, 107, -1, -1, 110,
5052 111, 112, 113, 114, 115, 116, 117, 118, -1, -1,
5053 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
5054 5, -1, 7, -1, -1, -1, 11, 12, 139, 140,
5055 141, 16, -1, 18, 19, 20, 21, 22, 23, 24,
5056 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
5057 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
5058 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
5059 55, 56, 57, -1, 59, 60, 61, 62, 63, 64,
5060 65, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5061 75, 76, -1, -1, -1, -1, -1, -1, -1, -1,
5062 -1, -1, -1, -1, -1, 90, 91, -1, -1, -1,
5063 -1, -1, -1, 98, -1, -1, 101, 102, -1, 104,
5064 105, -1, 107, -1, -1, 110, 111, 112, 113, 114,
5065 115, 116, 117, 118, -1, -1, -1, -1, -1, -1,
5066 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
5067 -1, -1, 11, 12, 139, 140, 141, 16, -1, 18,
5068 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
5069 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
5070 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
5071 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
5072 59, 60, 61, 62, 63, 64, 65, -1, -1, -1,
5073 -1, -1, -1, -1, -1, -1, 75, 76, -1, -1,
5074 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5075 -1, 90, 91, -1, -1, -1, -1, -1, -1, 98,
5076 -1, -1, 101, 102, -1, 104, 105, -1, 107, -1,
5077 -1, 110, 111, 112, 113, 114, 115, 116, 117, 118,
5078 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5079 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
5080 139, 140, 141, 16, -1, 18, 19, 20, 21, 22,
5081 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
5082 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
5083 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
5084 53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
5085 63, 64, 65, -1, -1, -1, -1, -1, -1, -1,
5086 -1, -1, 75, 76, -1, -1, -1, -1, -1, -1,
5087 -1, -1, -1, -1, -1, -1, -1, 90, 91, -1,
5088 -1, -1, -1, -1, -1, 98, -1, -1, 101, 102,
5089 -1, 104, 105, -1, -1, -1, -1, 110, 111, 112,
5090 113, 114, 115, 116, 117, 118, -1, -1, -1, -1,
5091 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
5092 7, -1, -1, -1, 11, 12, 139, 140, 141, 16,
5093 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
5094 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
5095 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
5096 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
5097 57, -1, 59, 60, 61, 62, 63, 64, 65, -1,
5098 -1, -1, -1, -1, -1, -1, -1, -1, 75, 76,
5099 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5100 -1, -1, -1, 90, 91, -1, -1, -1, -1, -1,
5101 -1, 98, -1, -1, 101, 102, -1, 104, 105, -1,
5102 -1, -1, -1, 110, 111, 112, 113, 114, 115, 116,
5103 117, 118, -1, -1, -1, -1, -1, -1, -1, -1,
5104 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
5105 11, 12, 139, 140, 141, 16, -1, 18, 19, 20,
5106 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
5107 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
5108 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
5109 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
5110 61, 62, 63, 64, 65, -1, -1, -1, -1, -1,
5111 -1, -1, -1, -1, 75, 76, -1, -1, -1, -1,
5112 -1, -1, -1, -1, -1, -1, -1, -1, -1, 90,
5113 91, -1, -1, -1, -1, -1, -1, 98, -1, -1,
5114 101, 102, -1, 104, 105, -1, -1, -1, -1, 110,
5115 111, 112, 113, 114, 115, 116, 117, 118, -1, -1,
5116 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
5117 5, -1, 7, -1, -1, -1, 11, 12, 139, 140,
5118 141, 16, -1, 18, 19, 20, 21, 22, 23, 24,
5119 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
5120 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
5121 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
5122 55, 56, 57, -1, 59, 60, 61, 62, 63, 64,
5123 65, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5124 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5125 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5126 -1, -1, -1, 98, -1, -1, 101, 102, -1, 104,
5127 105, -1, 107, -1, -1, 110, 111, 112, 113, 114,
5128 115, 116, 117, 118, -1, -1, -1, -1, -1, -1,
5129 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
5130 -1, -1, -1, 16, 139, 18, 19, 20, 21, 22,
5131 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
5132 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
5133 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
5134 53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
5135 63, 64, 65, -1, -1, -1, -1, -1, -1, -1,
5136 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5137 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5138 -1, -1, -1, -1, -1, 98, -1, -1, 101, 102,
5139 -1, 104, 105, -1, 107, -1, -1, 110, 111, 112,
5140 113, 114, 115, 116, 117, 118, -1, -1, -1, -1,
5141 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
5142 11, 12, -1, -1, -1, 16, 139, 18, 19, 20,
5143 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
5144 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
5145 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
5146 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
5147 61, 62, 63, 64, 65, -1, -1, -1, -1, -1,
5148 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5149 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5150 -1, -1, -1, 94, -1, -1, -1, 98, -1, -1,
5151 101, 102, -1, 104, 105, -1, -1, -1, -1, 110,
5152 111, 112, 113, 114, 115, 116, 117, 118, -1, -1,
5153 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
5154 -1, -1, 11, 12, -1, -1, -1, 16, 139, 18,
5155 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
5156 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
5157 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
5158 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
5159 59, 60, 61, 62, 63, 64, 65, -1, -1, -1,
5160 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5161 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5162 -1, -1, -1, -1, -1, -1, -1, -1, -1, 98,
5163 -1, -1, 101, 102, -1, 104, 105, -1, -1, -1,
5164 -1, 110, 111, 112, 113, 114, 115, 116, 117, 118,
5165 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
5166 7, -1, -1, -1, 11, 12, -1, -1, -1, 16,
5167 139, 18, 19, 20, 21, 22, 23, 24, -1, -1,
5168 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
5169 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
5170 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
5171 57, -1, 59, 60, 61, 62, 63, 64, 65, -1,
5172 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5173 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5174 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5175 -1, 98, -1, -1, 101, 102, -1, 104, 105, -1,
5176 -1, -1, -1, 110, 111, 112, 113, 114, 115, 116,
5177 117, 118, -1, -1, -1, -1, -1, -1, 3, 4,
5178 5, -1, 7, -1, -1, -1, 11, 12, -1, -1,
5179 -1, 16, 139, 18, 19, 20, 21, 22, 23, 24,
5180 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
5181 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
5182 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
5183 55, 56, 57, -1, 59, 60, 61, 62, 63, 64,
5184 65, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5185 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5186 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5187 -1, -1, -1, 98, -1, -1, 101, 102, -1, 104,
5188 105, -1, -1, -1, -1, 110, 111, 112, 113, 114,
5189 115, 116, 117, 118, -1, -1, -1, -1, -1, -1,
5190 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
5191 -1, -1, -1, 16, 139, 18, 19, 20, 21, 22,
5192 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
5193 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
5194 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
5195 53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
5196 63, 64, 65, 33, 34, 35, 36, -1, -1, -1,
5197 -1, -1, -1, -1, -1, -1, -1, -1, -1, 49,
5198 50, 51, 52, -1, -1, -1, 56, -1, -1, 59,
5199 60, 61, 62, 63, -1, 98, -1, -1, 101, 102,
5200 -1, 104, 105, -1, -1, -1, -1, 110, 111, 112,
5201 113, 114, 115, 116, 117, 118, -1, -1, -1, -1,
5202 90, 91, -1, -1, -1, -1, -1, -1, 98, -1,
5203 -1, 101, -1, -1, 104, 105, 139, 107, -1, -1,
5204 110, 111, 112, 113, 114, 115, 116, 117, 118, 33,
5205 34, 35, 36, -1, -1, -1, -1, -1, -1, -1,
5206 -1, -1, 132, -1, -1, 49, 50, 51, 52, 139,
5207 -1, -1, 56, -1, -1, 59, 60, 61, 62, 63,
5208 -1, -1, 33, 34, 35, 36, -1, -1, -1, -1,
5209 -1, -1, -1, -1, -1, -1, -1, -1, 49, 50,
5210 51, 52, -1, -1, -1, 56, 90, 91, 59, 60,
5211 61, 62, 63, -1, 98, -1, -1, 101, -1, -1,
5212 104, 105, -1, 107, -1, -1, 110, 111, 112, 113,
5213 114, 115, 116, 117, 118, -1, -1, -1, -1, 90,
5214 91, -1, -1, -1, -1, -1, -1, 98, 132, -1,
5215 101, -1, -1, 104, 105, 139, -1, -1, -1, 110,
5216 111, 112, 113, 114, 115, 116, 117, 118, 52, 53,
5217 -1, -1, 56, -1, -1, -1, -1, -1, -1, -1,
5218 -1, 132, -1, -1, -1, -1, -1, -1, 139, -1,
5219 -1, 75, 76, 77, 78, 79, 80, 81, 82, 83,
5220 -1, -1, 86, 87, -1, -1, -1, -1, 92, 93,
5221 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
5222 -1, -1, -1, 107, 108, -1, -1, -1, -1, -1,
5223 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5224 -1, -1, -1, -1, -1, 129, 130, 131, 132, 133,
5225 134, 135, 136, 137, 138, -1, 140, 141, 52, 53,
5226 -1, -1, 56, 147, 148, -1, -1, -1, -1, -1,
5227 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5228 -1, 75, 76, 77, 78, 79, 80, 81, 82, 83,
5229 -1, -1, 86, 87, -1, -1, -1, -1, 92, 93,
5230 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
5231 -1, -1, -1, 107, 108, -1, -1, -1, -1, -1,
5232 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5233 -1, -1, -1, -1, -1, 129, 130, 131, 132, 133,
5234 134, 135, 136, 137, 138, -1, 140, 141, 52, 53,
5235 -1, -1, 56, 147, 148, -1, -1, -1, -1, -1,
5236 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5237 -1, 75, 76, 77, 78, 79, 80, 81, 82, 83,
5238 -1, -1, 86, 87, -1, -1, -1, -1, 92, 93,
5239 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
5240 -1, -1, -1, 107, 108, -1, -1, -1, -1, -1,
5241 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5242 -1, -1, -1, -1, -1, 129, 130, 131, 132, 133,
5243 134, 135, 136, 137, 138, -1, 140, 141, 52, 53,
5244 -1, -1, 56, 147, 148, -1, -1, -1, -1, -1,
5245 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5246 -1, 75, 76, 77, 78, 79, 80, 81, 82, 83,
5247 -1, -1, 86, 87, -1, -1, -1, -1, 92, 93,
5248 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
5249 -1, -1, -1, 107, 108, -1, -1, -1, -1, -1,
5250 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5251 -1, -1, -1, -1, -1, 129, 130, 131, 132, 133,
5252 134, 135, 136, 137, 138, -1, 140, 141, 52, 53,
5253 -1, -1, 56, 147, 148, -1, -1, -1, -1, -1,
5254 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5255 -1, 75, 76, 77, 78, 79, 80, 81, 82, 83,
5256 -1, -1, 86, 87, -1, -1, -1, -1, 92, 93,
5257 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
5258 -1, -1, -1, 107, 108, -1, -1, -1, -1, -1,
5259 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5260 -1, -1, -1, -1, -1, 129, 130, 131, 132, 133,
5261 134, 135, 136, 137, 138, -1, 140, 141, 52, 53,
5262 -1, -1, 56, 147, 148, -1, -1, -1, -1, -1,
5263 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5264 -1, 75, 76, 77, 78, 79, 80, 81, 82, 83,
5265 -1, -1, 86, 87, -1, -1, -1, -1, 92, 93,
5266 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
5267 -1, -1, -1, 107, 108, -1, -1, -1, -1, -1,
5268 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5269 -1, -1, -1, -1, -1, 129, 130, 131, 132, 133,
5270 134, 135, 136, 137, 138, -1, 140, 141, 52, 53,
5271 -1, -1, 56, 147, 148, -1, -1, -1, -1, -1,
5272 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5273 -1, 75, 76, 77, 78, 79, 80, 81, 82, 83,
5274 -1, -1, 86, 87, -1, -1, -1, -1, 92, 93,
5275 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
5276 -1, -1, -1, 107, 108, -1, -1, -1, -1, -1,
5277 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5278 -1, -1, -1, -1, -1, 129, 130, 131, 132, 133,
5279 134, 135, 136, 137, 138, -1, 140, 141, 52, 53,
5280 -1, -1, 56, 147, 148, -1, -1, -1, -1, -1,
5281 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5282 -1, 75, 76, 77, 78, 79, 80, 81, 82, 83,
5283 -1, -1, 86, 87, -1, -1, -1, -1, 92, 93,
5284 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
5285 -1, -1, -1, 107, 108, -1, -1, -1, -1, -1,
5286 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5287 -1, -1, -1, -1, -1, 129, 130, 131, 132, 133,
5288 134, 135, 136, 137, 138, -1, 140, 141, 52, 53,
5289 -1, -1, 56, 147, 148, -1, -1, -1, -1, -1,
5290 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5291 -1, 75, 76, 77, 78, 79, 80, 81, 82, 83,
5292 -1, -1, 86, 87, -1, -1, -1, -1, 92, 93,
5293 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
5294 -1, -1, -1, 107, 108, -1, -1, -1, -1, -1,
5295 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5296 -1, -1, -1, -1, -1, 129, 130, 131, 132, 133,
5297 134, 135, 136, 137, 138, -1, 140, 141, 52, 53,
5298 -1, -1, 56, 147, 148, -1, -1, -1, -1, -1,
5299 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5300 -1, 75, 76, 77, 78, 79, 80, 81, 82, 83,
5301 -1, -1, 86, 87, -1, -1, -1, -1, 92, 93,
5302 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
5303 -1, -1, -1, 107, 108, -1, -1, -1, -1, -1,
5304 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5305 -1, -1, -1, -1, -1, 129, 130, 131, 132, 133,
5306 134, 135, 136, 137, 138, -1, 140, 141, 52, 53,
5307 -1, -1, 56, 147, 148, -1, -1, -1, -1, -1,
5308 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5309 -1, 75, 76, 77, 78, 79, 80, 81, 82, 83,
5310 -1, -1, 86, 87, -1, -1, -1, -1, 92, 93,
5311 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
5312 -1, -1, -1, 107, 108, -1, -1, -1, -1, -1,
5313 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5314 -1, -1, -1, -1, -1, 129, 130, 131, 132, 133,
5315 134, 135, 136, 137, 138, -1, 140, 141, 52, 53,
5316 -1, -1, 56, 147, 148, -1, -1, -1, -1, -1,
5317 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5318 -1, 75, 76, 77, 78, 79, 80, 81, 82, 83,
5319 -1, -1, 86, 87, -1, -1, -1, -1, 92, 93,
5320 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
5321 -1, -1, -1, 107, 108, -1, -1, -1, -1, -1,
5322 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5323 -1, -1, -1, -1, -1, 129, 130, 131, 132, 133,
5324 134, 135, 136, 137, 138, -1, 140, 141, 52, 53,
5325 -1, -1, 56, 147, 148, -1, -1, -1, -1, -1,
5326 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5327 -1, 75, 76, 77, 78, 79, 80, 81, 82, 83,
5328 -1, -1, 86, 87, -1, -1, -1, -1, 92, 93,
5329 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
5330 -1, -1, -1, 107, 108, -1, -1, -1, -1, -1,
5331 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5332 -1, -1, -1, -1, -1, 129, 130, 131, 132, 133,
5333 134, 135, 136, 137, 138, -1, 140, 141, 52, 53,
5334 -1, -1, 56, 147, 148, -1, -1, -1, -1, -1,
5335 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5336 -1, 75, 76, 77, 78, 79, 80, 81, 82, 83,
5337 -1, -1, 86, 87, -1, -1, -1, -1, 92, 93,
5338 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
5339 -1, -1, -1, 107, 108, -1, -1, -1, -1, -1,
5340 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5341 -1, -1, -1, -1, -1, 129, 130, 131, 132, 133,
5342 134, 135, 136, 137, 138, -1, 140, 141, 52, 53,
5343 -1, -1, 56, 147, 148, -1, -1, -1, -1, -1,
5344 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5345 -1, 75, 76, 77, 78, 79, 80, 81, 82, 83,
5346 -1, -1, 86, 87, -1, -1, -1, -1, 92, 93,
5347 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
5348 -1, -1, -1, 107, 108, -1, -1, -1, -1, -1,
5349 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5350 -1, -1, -1, -1, -1, 129, 130, 131, 132, 133,
5351 134, 135, 136, 137, 138, -1, 140, 141, 52, 53,
5352 -1, -1, 56, 147, 148, -1, -1, -1, -1, -1,
5353 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5354 -1, 75, 76, 77, 78, 79, 80, 81, 82, 83,
5355 -1, -1, 86, 87, -1, -1, -1, -1, 92, 93,
5356 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
5357 -1, -1, -1, 107, 108, -1, -1, -1, -1, -1,
5358 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
5359 -1, -1, -1, -1, -1, 129, 130, 131, 132, 133,
5360 134, 135, 136, 137, 138, -1, 140, 141, -1, -1,
5361 -1, -1, -1, 147
5362};
5363
5364/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
5365 state STATE-NUM. */
5366static const yytype_int16 yystos[] =
5367{
5368 0, 155, 156, 0, 1, 3, 4, 5, 6, 7,
5369 11, 12, 16, 18, 19, 20, 21, 22, 23, 24,
5370 30, 31, 32, 33, 34, 35, 36, 39, 45, 46,
5371 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
5372 57, 59, 60, 61, 62, 63, 64, 65, 75, 76,
5373 90, 91, 98, 101, 102, 104, 105, 107, 110, 111,
5374 112, 113, 114, 115, 116, 117, 118, 139, 140, 141,
5375 157, 158, 159, 167, 169, 171, 179, 180, 182, 183,
5376 184, 186, 187, 188, 190, 191, 200, 203, 218, 233,
5377 234, 235, 236, 237, 238, 239, 240, 241, 242, 243,
5378 252, 279, 280, 333, 334, 335, 336, 337, 338, 339,
5379 342, 344, 345, 359, 360, 362, 363, 364, 365, 366,
5380 367, 368, 369, 405, 419, 159, 3, 4, 5, 6,
5381 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
5382 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
5383 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
5384 45, 46, 47, 48, 49, 50, 51, 52, 53, 56,
5385 75, 76, 77, 78, 79, 80, 81, 82, 83, 86,
5386 87, 92, 93, 94, 95, 107, 108, 129, 130, 131,
5387 132, 133, 134, 135, 136, 137, 138, 140, 141, 147,
5388 194, 195, 196, 198, 199, 359, 39, 58, 98, 101,
5389 107, 108, 109, 112, 140, 183, 191, 200, 204, 210,
5390 213, 215, 233, 365, 366, 368, 369, 403, 404, 210,
5391 148, 211, 212, 148, 207, 211, 148, 153, 412, 54,
5392 195, 412, 143, 160, 143, 21, 22, 31, 32, 182,
5393 200, 233, 252, 200, 200, 200, 56, 1, 47, 101,
5394 163, 164, 165, 167, 185, 186, 419, 167, 220, 205,
5395 215, 403, 419, 204, 402, 403, 419, 46, 98, 139,
5396 146, 190, 218, 233, 365, 366, 369, 223, 54, 55,
5397 57, 194, 348, 361, 348, 349, 350, 152, 152, 152,
5398 152, 364, 179, 200, 200, 151, 153, 411, 417, 418,
5399 40, 41, 42, 43, 44, 37, 38, 26, 143, 207,
5400 211, 244, 281, 28, 245, 278, 126, 146, 101, 107,
5401 187, 126, 25, 77, 78, 79, 80, 81, 82, 83,
5402 84, 85, 86, 87, 88, 89, 94, 95, 127, 129,
5403 130, 131, 132, 133, 134, 135, 136, 137, 138, 202,
5404 202, 68, 96, 97, 145, 409, 219, 171, 175, 175,
5405 176, 177, 176, 175, 411, 418, 98, 184, 191, 233,
5406 257, 365, 366, 369, 52, 56, 94, 98, 192, 193,
5407 233, 365, 366, 369, 193, 33, 34, 35, 36, 49,
5408 50, 51, 52, 56, 148, 194, 367, 400, 210, 97,
5409 409, 410, 281, 336, 99, 99, 146, 204, 56, 204,
5410 204, 204, 348, 126, 100, 146, 214, 419, 97, 145,
5411 409, 99, 99, 146, 214, 210, 412, 413, 210, 91,
5412 209, 210, 215, 377, 403, 419, 171, 413, 171, 54,
5413 64, 65, 168, 148, 201, 157, 163, 97, 409, 99,
5414 167, 166, 185, 149, 411, 418, 413, 221, 413, 150,
5415 146, 153, 416, 146, 416, 144, 416, 412, 56, 364,
5416 187, 189, 146, 97, 145, 409, 270, 271, 66, 119,
5417 121, 122, 351, 119, 119, 351, 67, 351, 340, 346,
5418 343, 347, 77, 151, 159, 175, 175, 175, 175, 167,
5419 171, 171, 282, 283, 106, 181, 286, 287, 286, 107,
5420 179, 204, 215, 216, 217, 185, 146, 190, 146, 169,
5421 170, 179, 191, 200, 204, 206, 217, 233, 369, 172,
5422 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
5423 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
5424 200, 200, 200, 200, 52, 53, 56, 198, 207, 406,
5425 407, 209, 215, 52, 53, 56, 198, 207, 406, 161,
5426 163, 13, 253, 417, 253, 163, 175, 163, 411, 225,
5427 56, 97, 145, 409, 25, 171, 52, 56, 192, 130,
5428 370, 97, 145, 409, 228, 401, 229, 68, 97, 408,
5429 52, 56, 406, 170, 200, 206, 170, 206, 197, 124,
5430 204, 107, 204, 213, 403, 52, 56, 209, 52, 56,
5431 404, 413, 149, 413, 146, 413, 146, 413, 195, 222,
5432 200, 144, 144, 406, 406, 206, 160, 413, 165, 413,
5433 403, 146, 189, 52, 56, 209, 52, 56, 272, 353,
5434 352, 119, 341, 351, 66, 119, 119, 341, 66, 119,
5435 200, 144, 284, 282, 10, 251, 288, 251, 204, 146,
5436 44, 413, 189, 146, 44, 126, 44, 97, 145, 409,
5437 173, 412, 99, 99, 207, 211, 412, 414, 146, 99,
5438 99, 207, 208, 211, 419, 251, 8, 246, 329, 419,
5439 163, 13, 163, 251, 27, 254, 417, 251, 25, 224,
5440 293, 17, 248, 291, 52, 56, 209, 52, 56, 176,
5441 227, 371, 226, 52, 56, 192, 209, 161, 171, 230,
5442 231, 208, 211, 195, 204, 204, 214, 99, 99, 414,
5443 99, 99, 377, 403, 171, 416, 187, 414, 273, 354,
5444 54, 55, 57, 358, 369, 152, 351, 152, 152, 152,
5445 285, 144, 289, 107, 204, 167, 189, 167, 200, 52,
5446 56, 209, 52, 56, 52, 56, 90, 91, 98, 101,
5447 104, 105, 110, 132, 303, 304, 305, 308, 323, 324,
5448 326, 327, 328, 333, 334, 337, 338, 339, 342, 344,
5449 345, 366, 128, 170, 206, 170, 206, 181, 150, 99,
5450 170, 206, 170, 206, 181, 204, 217, 330, 419, 9,
5451 15, 247, 249, 332, 419, 14, 249, 250, 255, 256,
5452 419, 256, 178, 294, 291, 251, 107, 204, 290, 251,
5453 414, 163, 417, 175, 161, 414, 251, 413, 148, 372,
5454 373, 194, 281, 278, 99, 413, 146, 413, 274, 355,
5455 131, 265, 266, 419, 265, 204, 414, 324, 324, 56,
5456 192, 311, 309, 414, 310, 412, 415, 325, 52, 100,
5457 174, 131, 88, 89, 97, 145, 148, 306, 307, 200,
5458 170, 206, 100, 331, 419, 163, 162, 163, 175, 251,
5459 251, 295, 251, 204, 146, 253, 251, 161, 417, 251,
5460 52, 54, 55, 56, 57, 58, 77, 91, 101, 107,
5461 108, 109, 133, 136, 374, 376, 377, 378, 379, 380,
5462 381, 382, 383, 384, 387, 388, 389, 390, 391, 394,
5463 395, 396, 397, 398, 161, 376, 382, 232, 148, 276,
5464 376, 356, 262, 264, 267, 380, 382, 383, 385, 386,
5465 389, 390, 392, 393, 396, 398, 412, 163, 161, 303,
5466 107, 303, 312, 313, 314, 316, 58, 112, 317, 318,
5467 319, 320, 321, 322, 388, 144, 270, 326, 308, 324,
5468 324, 192, 414, 413, 112, 312, 317, 312, 317, 98,
5469 191, 233, 365, 366, 369, 253, 163, 253, 296, 107,
5470 204, 163, 251, 101, 107, 258, 259, 260, 261, 379,
5471 413, 413, 126, 146, 375, 204, 146, 399, 419, 34,
5472 52, 146, 399, 399, 146, 375, 52, 146, 375, 52,
5473 251, 417, 146, 372, 376, 275, 357, 267, 131, 126,
5474 146, 263, 98, 233, 146, 399, 399, 399, 146, 263,
5475 146, 263, 151, 413, 52, 146, 414, 107, 303, 316,
5476 146, 348, 415, 146, 303, 34, 52, 348, 413, 413,
5477 414, 414, 56, 97, 145, 409, 163, 332, 163, 301,
5478 302, 303, 314, 317, 204, 256, 291, 292, 260, 379,
5479 146, 413, 146, 204, 374, 377, 381, 394, 396, 384,
5480 388, 390, 398, 382, 391, 396, 380, 382, 161, 267,
5481 29, 123, 277, 163, 131, 233, 262, 393, 396, 56,
5482 97, 385, 390, 382, 392, 396, 382, 52, 268, 269,
5483 378, 146, 315, 316, 52, 146, 146, 124, 319, 321,
5484 322, 52, 56, 209, 52, 56, 329, 255, 253, 40,
5485 41, 146, 413, 258, 261, 259, 413, 146, 375, 146,
5486 375, 399, 146, 375, 146, 375, 375, 251, 149, 161,
5487 163, 120, 146, 263, 146, 263, 52, 56, 399, 146,
5488 263, 146, 263, 263, 146, 412, 315, 146, 146, 315,
5489 414, 297, 175, 175, 312, 146, 146, 382, 396, 382,
5490 382, 251, 144, 382, 396, 382, 382, 269, 316, 315,
5491 298, 259, 375, 146, 375, 375, 375, 263, 146, 263,
5492 263, 263, 299, 382, 382, 163, 375, 263, 256, 293,
5493 300
5494};
5495
5496/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
5497static const yytype_int16 yyr1[] =
5498{
5499 0, 154, 156, 155, 157, 158, 158, 158, 158, 159,
5500 159, 160, 162, 161, 161, 163, 164, 164, 164, 164,
5501 165, 166, 165, 168, 167, 167, 167, 167, 167, 167,
5502 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
5503 167, 169, 169, 169, 169, 169, 169, 169, 169, 170,
5504 170, 170, 171, 171, 171, 171, 171, 172, 173, 174,
5505 171, 171, 175, 177, 178, 176, 179, 179, 180, 180,
5506 181, 182, 183, 183, 183, 183, 183, 183, 183, 183,
5507 183, 183, 183, 184, 184, 185, 185, 186, 186, 186,
5508 186, 186, 186, 186, 186, 186, 186, 187, 187, 188,
5509 188, 189, 189, 190, 190, 190, 190, 190, 190, 190,
5510 190, 190, 191, 191, 191, 191, 191, 191, 191, 191,
5511 191, 192, 192, 193, 193, 193, 194, 194, 194, 194,
5512 194, 195, 195, 196, 197, 196, 198, 198, 198, 198,
5513 198, 198, 198, 198, 198, 198, 198, 198, 198, 198,
5514 198, 198, 198, 198, 198, 198, 198, 198, 198, 198,
5515 198, 198, 198, 198, 198, 198, 199, 199, 199, 199,
5516 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
5517 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
5518 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
5519 199, 199, 199, 199, 199, 199, 199, 200, 200, 200,
5520 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
5521 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
5522 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
5523 200, 200, 200, 200, 200, 200, 200, 201, 200, 200,
5524 200, 202, 202, 202, 202, 203, 203, 204, 205, 205,
5525 205, 205, 206, 206, 207, 207, 207, 208, 208, 209,
5526 209, 209, 209, 209, 210, 210, 210, 210, 210, 212,
5527 211, 213, 214, 214, 215, 215, 215, 215, 216, 216,
5528 217, 217, 217, 218, 218, 218, 218, 218, 218, 218,
5529 218, 218, 218, 218, 219, 218, 220, 218, 221, 218,
5530 218, 218, 218, 218, 218, 218, 218, 218, 218, 222,
5531 218, 218, 218, 218, 218, 218, 223, 218, 218, 218,
5532 218, 218, 224, 218, 225, 218, 218, 218, 226, 218,
5533 227, 218, 228, 218, 229, 230, 218, 231, 232, 218,
5534 218, 218, 218, 218, 233, 234, 235, 236, 237, 238,
5535 239, 240, 241, 242, 243, 244, 245, 246, 247, 248,
5536 249, 250, 251, 252, 253, 253, 253, 254, 254, 255,
5537 255, 256, 256, 257, 257, 258, 258, 259, 259, 260,
5538 260, 260, 260, 260, 261, 261, 262, 262, 262, 262,
5539 262, 263, 263, 264, 264, 264, 264, 264, 264, 264,
5540 264, 264, 264, 264, 264, 264, 264, 264, 265, 265,
5541 266, 266, 267, 267, 268, 268, 269, 269, 271, 272,
5542 273, 274, 275, 270, 276, 276, 277, 277, 278, 279,
5543 279, 279, 279, 280, 280, 280, 280, 280, 280, 280,
5544 280, 280, 281, 281, 283, 284, 285, 282, 287, 288,
5545 289, 286, 290, 290, 290, 290, 291, 292, 292, 294,
5546 295, 296, 297, 298, 299, 293, 300, 300, 301, 301,
5547 301, 302, 302, 302, 302, 302, 303, 304, 304, 305,
5548 305, 306, 307, 308, 308, 308, 308, 308, 308, 308,
5549 309, 308, 308, 310, 308, 308, 311, 308, 312, 312,
5550 312, 312, 312, 312, 312, 312, 313, 313, 314, 314,
5551 314, 314, 315, 315, 316, 317, 317, 317, 317, 317,
5552 317, 318, 318, 319, 319, 320, 320, 321, 321, 322,
5553 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
5554 324, 324, 324, 324, 324, 324, 324, 324, 324, 325,
5555 324, 326, 327, 328, 328, 328, 329, 329, 330, 330,
5556 330, 331, 331, 332, 332, 333, 333, 334, 335, 335,
5557 335, 336, 337, 338, 339, 340, 340, 341, 341, 342,
5558 343, 343, 344, 345, 346, 346, 347, 347, 348, 348,
5559 349, 349, 350, 350, 351, 352, 351, 353, 354, 355,
5560 356, 357, 351, 358, 358, 358, 358, 359, 359, 360,
5561 361, 361, 361, 361, 362, 363, 363, 364, 364, 364,
5562 364, 365, 365, 365, 365, 365, 366, 366, 366, 366,
5563 366, 366, 366, 367, 367, 368, 368, 369, 369, 371,
5564 370, 370, 372, 372, 372, 373, 372, 374, 374, 374,
5565 374, 374, 375, 375, 376, 376, 376, 376, 376, 376,
5566 376, 376, 376, 376, 376, 376, 376, 376, 376, 377,
5567 378, 378, 378, 378, 379, 379, 380, 381, 381, 382,
5568 382, 383, 384, 384, 385, 385, 386, 386, 387, 387,
5569 388, 388, 389, 390, 390, 391, 392, 393, 393, 394,
5570 394, 395, 395, 396, 396, 397, 397, 398, 399, 399,
5571 400, 401, 400, 402, 402, 403, 403, 404, 404, 404,
5572 404, 405, 405, 405, 406, 406, 406, 406, 407, 407,
5573 407, 408, 408, 409, 409, 410, 410, 411, 411, 412,
5574 412, 413, 414, 415, 416, 416, 416, 417, 417, 418,
5575 418, 419
5576};
5577
5578/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
5579static const yytype_int8 yyr2[] =
5580{
5581 0, 2, 0, 2, 2, 1, 1, 3, 2, 1,
5582 2, 3, 0, 6, 3, 2, 1, 1, 3, 2,
5583 1, 0, 3, 0, 4, 3, 3, 3, 2, 3,
5584 3, 3, 3, 3, 4, 1, 3, 3, 5, 3,
5585 1, 3, 3, 6, 5, 5, 5, 5, 3, 1,
5586 3, 1, 1, 3, 3, 3, 2, 0, 0, 0,
5587 6, 1, 1, 0, 0, 4, 1, 1, 1, 4,
5588 3, 1, 2, 3, 4, 5, 4, 5, 2, 2,
5589 2, 2, 2, 1, 3, 1, 3, 1, 2, 3,
5590 5, 2, 4, 2, 4, 1, 3, 1, 3, 2,
5591 3, 1, 3, 1, 1, 4, 3, 3, 3, 3,
5592 2, 1, 1, 1, 4, 3, 3, 3, 3, 2,
5593 1, 1, 1, 2, 1, 3, 1, 1, 1, 1,
5594 1, 1, 1, 1, 0, 4, 1, 1, 1, 1,
5595 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
5596 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
5597 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
5598 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
5599 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
5600 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
5601 1, 1, 1, 1, 1, 1, 1, 3, 3, 6,
5602 5, 5, 5, 5, 4, 3, 3, 3, 2, 2,
5603 2, 2, 3, 3, 3, 3, 3, 3, 4, 2,
5604 2, 3, 3, 3, 3, 1, 3, 3, 3, 3,
5605 3, 2, 2, 3, 3, 3, 3, 0, 4, 6,
5606 1, 1, 1, 1, 1, 3, 3, 1, 1, 2,
5607 4, 2, 1, 3, 3, 5, 3, 1, 1, 1,
5608 1, 2, 4, 2, 1, 2, 2, 4, 1, 0,
5609 2, 2, 2, 1, 1, 2, 3, 4, 1, 1,
5610 3, 4, 2, 1, 1, 1, 1, 1, 1, 1,
5611 1, 1, 1, 1, 0, 4, 0, 3, 0, 4,
5612 3, 3, 2, 3, 3, 1, 4, 3, 1, 0,
5613 6, 4, 3, 2, 1, 2, 0, 3, 6, 6,
5614 4, 4, 0, 6, 0, 5, 5, 6, 0, 6,
5615 0, 7, 0, 5, 0, 0, 7, 0, 0, 9,
5616 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
5617 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
5618 1, 1, 1, 1, 1, 1, 2, 1, 1, 1,
5619 5, 1, 2, 1, 1, 1, 3, 1, 3, 1,
5620 3, 5, 1, 3, 2, 1, 4, 2, 2, 2,
5621 1, 2, 0, 6, 8, 4, 6, 4, 2, 6,
5622 2, 4, 6, 2, 4, 2, 4, 1, 1, 1,
5623 3, 4, 1, 4, 1, 3, 1, 1, 0, 0,
5624 0, 0, 0, 7, 4, 1, 3, 3, 3, 2,
5625 4, 5, 5, 2, 4, 4, 3, 3, 3, 2,
5626 1, 4, 3, 3, 0, 0, 0, 5, 0, 0,
5627 0, 5, 1, 2, 3, 4, 5, 1, 1, 0,
5628 0, 0, 0, 0, 0, 11, 1, 1, 1, 3,
5629 3, 1, 2, 3, 1, 1, 1, 3, 1, 3,
5630 1, 1, 1, 1, 4, 4, 3, 4, 4, 3,
5631 0, 4, 2, 0, 4, 2, 0, 4, 1, 1,
5632 2, 3, 5, 2, 4, 1, 2, 3, 2, 4,
5633 1, 3, 1, 3, 1, 3, 1, 2, 1, 3,
5634 1, 1, 3, 2, 1, 1, 3, 2, 1, 2,
5635 1, 3, 3, 2, 2, 1, 1, 1, 2, 2,
5636 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
5637 3, 1, 2, 2, 3, 1, 6, 1, 1, 1,
5638 1, 2, 1, 2, 1, 1, 1, 1, 1, 1,
5639 2, 3, 3, 3, 4, 0, 3, 1, 2, 4,
5640 0, 3, 4, 4, 0, 3, 0, 3, 0, 2,
5641 0, 2, 0, 2, 1, 0, 3, 0, 0, 0,
5642 0, 0, 8, 1, 1, 1, 1, 1, 1, 2,
5643 1, 1, 1, 1, 3, 1, 2, 1, 1, 1,
5644 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
5645 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
5646 4, 0, 3, 5, 3, 0, 3, 4, 2, 2,
5647 2, 1, 2, 0, 6, 8, 4, 6, 4, 6,
5648 2, 4, 6, 2, 4, 2, 4, 1, 0, 1,
5649 1, 1, 1, 1, 1, 1, 1, 1, 3, 1,
5650 3, 1, 2, 1, 2, 1, 1, 3, 1, 3,
5651 1, 1, 2, 2, 1, 3, 3, 1, 3, 1,
5652 3, 1, 1, 2, 1, 1, 1, 2, 2, 1,
5653 1, 0, 4, 1, 2, 1, 3, 3, 2, 4,
5654 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
5655 1, 1, 1, 1, 1, 1, 1, 0, 1, 0,
5656 1, 2, 2, 2, 0, 1, 1, 1, 1, 1,
5657 2, 0
5658};
5659
5660
5661enum { YYENOMEM = -2 };
5662
5663#define yyerrok (yyerrstatus = 0)
5664#define yyclearin (yychar = YYEMPTY)
5665
5666#define YYACCEPT goto yyacceptlab
5667#define YYABORT goto yyabortlab
5668#define YYERROR goto yyerrorlab
5669#define YYNOMEM goto yyexhaustedlab
5670
5671
5672#define YYRECOVERING() (!!yyerrstatus)
5673
5674#define YYBACKUP(Token, Value) \
5675 do \
5676 if (yychar == YYEMPTY) \
5677 { \
5678 yychar = (Token); \
5679 yylval = (Value); \
5680 YYPOPSTACK (yylen); \
5681 yystate = *yyssp; \
5682 goto yybackup; \
5683 } \
5684 else \
5685 { \
5686 yyerror (&yylloc, p, YY_("syntax error: cannot back up")); \
5687 YYERROR; \
5688 } \
5689 while (0)
5690
5691/* Backward compatibility with an undocumented macro.
5692 Use YYerror or YYUNDEF. */
5693#define YYERRCODE YYUNDEF
5694
5695/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
5696 If N is 0, then set CURRENT to the empty location which ends
5697 the previous symbol: RHS[0] (always defined). */
5698
5699#ifndef YYLLOC_DEFAULT
5700# define YYLLOC_DEFAULT(Current, Rhs, N) \
5701 do \
5702 if (N) \
5703 { \
5704 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
5705 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
5706 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
5707 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
5708 } \
5709 else \
5710 { \
5711 (Current).first_line = (Current).last_line = \
5712 YYRHSLOC (Rhs, 0).last_line; \
5713 (Current).first_column = (Current).last_column = \
5714 YYRHSLOC (Rhs, 0).last_column; \
5715 } \
5716 while (0)
5717#endif
5718
5719#define YYRHSLOC(Rhs, K) ((Rhs)[K])
5720
5721
5722/* Enable debugging if requested. */
5723#if YYDEBUG
5724
5725# ifndef YYFPRINTF
5726# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
5727# define YYFPRINTF fprintf
5728# endif
5729
5730# define YYDPRINTF(Args) \
5731do { \
5732 if (yydebug) \
5733 YYFPRINTF Args; \
5734} while (0)
5735
5736
5737/* YYLOCATION_PRINT -- Print the location on the stream.
5738 This macro was not mandated originally: define only if we know
5739 we won't break user code: when these are the locations we know. */
5740
5741# ifndef YYLOCATION_PRINT
5742
5743# if defined YY_LOCATION_PRINT
5744
5745 /* Temporary convenience wrapper in case some people defined the
5746 undocumented and private YY_LOCATION_PRINT macros. */
5747# define YYLOCATION_PRINT(File, Loc) YY_LOCATION_PRINT(File, *(Loc))
5748
5749# elif defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
5750
5751/* Print *YYLOCP on YYO. Private, do not rely on its existence. */
5752
5754static int
5755yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp)
5756{
5757 int res = 0;
5758 int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0;
5759 if (0 <= yylocp->first_line)
5760 {
5761 res += YYFPRINTF (p, "%d", yylocp->first_line);
5762 if (0 <= yylocp->first_column)
5763 res += YYFPRINTF (p, ".%d", yylocp->first_column);
5764 }
5765 if (0 <= yylocp->last_line)
5766 {
5767 if (yylocp->first_line < yylocp->last_line)
5768 {
5769 res += YYFPRINTF (p, "-%d", yylocp->last_line);
5770 if (0 <= end_col)
5771 res += YYFPRINTF (p, ".%d", end_col);
5772 }
5773 else if (0 <= end_col && yylocp->first_column < end_col)
5774 res += YYFPRINTF (p, "-%d", end_col);
5775 }
5776 return res;
5777}
5778
5779# define YYLOCATION_PRINT yy_location_print_
5780
5781 /* Temporary convenience wrapper in case some people defined the
5782 undocumented and private YY_LOCATION_PRINT macros. */
5783# define YY_LOCATION_PRINT(File, Loc) YYLOCATION_PRINT(File, &(Loc))
5784
5785# else
5786
5787# define YYLOCATION_PRINT(File, Loc) ((void) 0)
5788 /* Temporary convenience wrapper in case some people defined the
5789 undocumented and private YY_LOCATION_PRINT macros. */
5790# define YY_LOCATION_PRINT YYLOCATION_PRINT
5791
5792# endif
5793# endif /* !defined YYLOCATION_PRINT */
5794
5795
5796# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
5797do { \
5798 if (yydebug) \
5799 { \
5800 YYFPRINTF (p, "%s ", Title); \
5801 yy_symbol_print (stderr, \
5802 Kind, Value, Location, p); \
5803 YYFPRINTF (p, "\n"); \
5804 } \
5805} while (0)
5806
5807
5808/*-----------------------------------.
5809| Print this symbol's value on YYO. |
5810`-----------------------------------*/
5811
5812static void
5813yy_symbol_value_print (FILE *yyo,
5814 yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct parser_params *p)
5815{
5816 FILE *yyoutput = yyo;
5817 YY_USE (yyoutput);
5818 YY_USE (yylocationp);
5819 YY_USE (p);
5820 if (!yyvaluep)
5821 return;
5823 switch (yykind)
5824 {
5825 case YYSYMBOL_tIDENTIFIER: /* "local variable or method" */
5826#line 970 "ripper.y"
5827 {
5828#ifndef RIPPER
5829 rb_parser_printf(p, "%"PRIsVALUE, rb_id2str(((*yyvaluep).val)));
5830#else
5831 rb_parser_printf(p, "%"PRIsVALUE, RNODE(((*yyvaluep).val))->nd_rval);
5832#endif
5833}
5834#line 5833 "ripper.c"
5835 break;
5836
5837 case YYSYMBOL_tFID: /* "method" */
5838#line 970 "ripper.y"
5839 {
5840#ifndef RIPPER
5841 rb_parser_printf(p, "%"PRIsVALUE, rb_id2str(((*yyvaluep).val)));
5842#else
5843 rb_parser_printf(p, "%"PRIsVALUE, RNODE(((*yyvaluep).val))->nd_rval);
5844#endif
5845}
5846#line 5845 "ripper.c"
5847 break;
5848
5849 case YYSYMBOL_tGVAR: /* "global variable" */
5850#line 970 "ripper.y"
5851 {
5852#ifndef RIPPER
5853 rb_parser_printf(p, "%"PRIsVALUE, rb_id2str(((*yyvaluep).val)));
5854#else
5855 rb_parser_printf(p, "%"PRIsVALUE, RNODE(((*yyvaluep).val))->nd_rval);
5856#endif
5857}
5858#line 5857 "ripper.c"
5859 break;
5860
5861 case YYSYMBOL_tIVAR: /* "instance variable" */
5862#line 970 "ripper.y"
5863 {
5864#ifndef RIPPER
5865 rb_parser_printf(p, "%"PRIsVALUE, rb_id2str(((*yyvaluep).val)));
5866#else
5867 rb_parser_printf(p, "%"PRIsVALUE, RNODE(((*yyvaluep).val))->nd_rval);
5868#endif
5869}
5870#line 5869 "ripper.c"
5871 break;
5872
5873 case YYSYMBOL_tCONSTANT: /* "constant" */
5874#line 970 "ripper.y"
5875 {
5876#ifndef RIPPER
5877 rb_parser_printf(p, "%"PRIsVALUE, rb_id2str(((*yyvaluep).val)));
5878#else
5879 rb_parser_printf(p, "%"PRIsVALUE, RNODE(((*yyvaluep).val))->nd_rval);
5880#endif
5881}
5882#line 5881 "ripper.c"
5883 break;
5884
5885 case YYSYMBOL_tCVAR: /* "class variable" */
5886#line 970 "ripper.y"
5887 {
5888#ifndef RIPPER
5889 rb_parser_printf(p, "%"PRIsVALUE, rb_id2str(((*yyvaluep).val)));
5890#else
5891 rb_parser_printf(p, "%"PRIsVALUE, RNODE(((*yyvaluep).val))->nd_rval);
5892#endif
5893}
5894#line 5893 "ripper.c"
5895 break;
5896
5897 case YYSYMBOL_tLABEL: /* tLABEL */
5898#line 970 "ripper.y"
5899 {
5900#ifndef RIPPER
5901 rb_parser_printf(p, "%"PRIsVALUE, rb_id2str(((*yyvaluep).val)));
5902#else
5903 rb_parser_printf(p, "%"PRIsVALUE, RNODE(((*yyvaluep).val))->nd_rval);
5904#endif
5905}
5906#line 5905 "ripper.c"
5907 break;
5908
5909 case YYSYMBOL_tINTEGER: /* "integer literal" */
5910#line 977 "ripper.y"
5911 {
5912#ifndef RIPPER
5913 rb_parser_printf(p, "%+"PRIsVALUE, ((*yyvaluep).val)->nd_lit);
5914#else
5915 rb_parser_printf(p, "%+"PRIsVALUE, get_value(((*yyvaluep).val)));
5916#endif
5917}
5918#line 5917 "ripper.c"
5919 break;
5920
5921 case YYSYMBOL_tFLOAT: /* "float literal" */
5922#line 977 "ripper.y"
5923 {
5924#ifndef RIPPER
5925 rb_parser_printf(p, "%+"PRIsVALUE, ((*yyvaluep).val)->nd_lit);
5926#else
5927 rb_parser_printf(p, "%+"PRIsVALUE, get_value(((*yyvaluep).val)));
5928#endif
5929}
5930#line 5929 "ripper.c"
5931 break;
5932
5933 case YYSYMBOL_tRATIONAL: /* "rational literal" */
5934#line 977 "ripper.y"
5935 {
5936#ifndef RIPPER
5937 rb_parser_printf(p, "%+"PRIsVALUE, ((*yyvaluep).val)->nd_lit);
5938#else
5939 rb_parser_printf(p, "%+"PRIsVALUE, get_value(((*yyvaluep).val)));
5940#endif
5941}
5942#line 5941 "ripper.c"
5943 break;
5944
5945 case YYSYMBOL_tIMAGINARY: /* "imaginary literal" */
5946#line 977 "ripper.y"
5947 {
5948#ifndef RIPPER
5949 rb_parser_printf(p, "%+"PRIsVALUE, ((*yyvaluep).val)->nd_lit);
5950#else
5951 rb_parser_printf(p, "%+"PRIsVALUE, get_value(((*yyvaluep).val)));
5952#endif
5953}
5954#line 5953 "ripper.c"
5955 break;
5956
5957 case YYSYMBOL_tCHAR: /* "char literal" */
5958#line 977 "ripper.y"
5959 {
5960#ifndef RIPPER
5961 rb_parser_printf(p, "%+"PRIsVALUE, ((*yyvaluep).val)->nd_lit);
5962#else
5963 rb_parser_printf(p, "%+"PRIsVALUE, get_value(((*yyvaluep).val)));
5964#endif
5965}
5966#line 5965 "ripper.c"
5967 break;
5968
5969 case YYSYMBOL_tNTH_REF: /* "numbered reference" */
5970#line 984 "ripper.y"
5971 {
5972#ifndef RIPPER
5973 rb_parser_printf(p, "$%ld", ((*yyvaluep).val)->nd_nth);
5974#else
5975 rb_parser_printf(p, "%"PRIsVALUE, ((*yyvaluep).val));
5976#endif
5977}
5978#line 5977 "ripper.c"
5979 break;
5980
5981 case YYSYMBOL_tBACK_REF: /* "back reference" */
5982#line 991 "ripper.y"
5983 {
5984#ifndef RIPPER
5985 rb_parser_printf(p, "$%c", (int)((*yyvaluep).val)->nd_nth);
5986#else
5987 rb_parser_printf(p, "%"PRIsVALUE, ((*yyvaluep).val));
5988#endif
5989}
5990#line 5989 "ripper.c"
5991 break;
5992
5993 case YYSYMBOL_tSTRING_CONTENT: /* "literal content" */
5994#line 977 "ripper.y"
5995 {
5996#ifndef RIPPER
5997 rb_parser_printf(p, "%+"PRIsVALUE, ((*yyvaluep).val)->nd_lit);
5998#else
5999 rb_parser_printf(p, "%+"PRIsVALUE, get_value(((*yyvaluep).val)));
6000#endif
6001}
6002#line 6001 "ripper.c"
6003 break;
6004
6005 case YYSYMBOL_tOP_ASGN: /* "operator-assignment" */
6006#line 970 "ripper.y"
6007 {
6008#ifndef RIPPER
6009 rb_parser_printf(p, "%"PRIsVALUE, rb_id2str(((*yyvaluep).val)));
6010#else
6011 rb_parser_printf(p, "%"PRIsVALUE, RNODE(((*yyvaluep).val))->nd_rval);
6012#endif
6013}
6014#line 6013 "ripper.c"
6015 break;
6016
6017 default:
6018 break;
6019 }
6021}
6022
6023
6024/*---------------------------.
6025| Print this symbol on YYO. |
6026`---------------------------*/
6027
6028static void
6029yy_symbol_print (FILE *yyo,
6030 yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct parser_params *p)
6031{
6032 YYFPRINTF (p, "%s %s (",
6033 yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
6034
6035 YYLOCATION_PRINT (yyo, yylocationp);
6036 YYFPRINTF (p, ": ");
6037 yy_symbol_value_print (yyo, yykind, yyvaluep, yylocationp, p);
6038 YYFPRINTF (p, ")");
6039}
6040
6041/*------------------------------------------------------------------.
6042| yy_stack_print -- Print the state stack from its BOTTOM up to its |
6043| TOP (included). |
6044`------------------------------------------------------------------*/
6045
6046static void
6047ruby_parser_yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop, struct parser_params *p)
6048#define yy_stack_print(b, t) ruby_parser_yy_stack_print(b, t, p)
6049{
6050 YYFPRINTF (p, "Stack now");
6051 for (; yybottom <= yytop; yybottom++)
6052 {
6053 int yybot = *yybottom;
6054 YYFPRINTF (p, " %d", yybot);
6055 }
6056 YYFPRINTF (p, "\n");
6057}
6058
6059# define YY_STACK_PRINT(Bottom, Top) \
6060do { \
6061 if (yydebug) \
6062 yy_stack_print ((Bottom), (Top)); \
6063} while (0)
6064
6065
6066/*------------------------------------------------.
6067| Report that the YYRULE is going to be reduced. |
6068`------------------------------------------------*/
6069
6070static void
6071yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp,
6072 int yyrule, struct parser_params *p)
6073{
6074 int yylno = yyrline[yyrule];
6075 int yynrhs = yyr2[yyrule];
6076 int yyi;
6077 YYFPRINTF (p, "Reducing stack by rule %d (line %d):\n",
6078 yyrule - 1, yylno);
6079 /* The symbols being reduced. */
6080 for (yyi = 0; yyi < yynrhs; yyi++)
6081 {
6082 YYFPRINTF (p, " $%d = ", yyi + 1);
6083 yy_symbol_print (stderr,
6084 YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
6085 &yyvsp[(yyi + 1) - (yynrhs)],
6086 &(yylsp[(yyi + 1) - (yynrhs)]), p);
6087 YYFPRINTF (p, "\n");
6088 }
6089}
6090
6091# define YY_REDUCE_PRINT(Rule) \
6092do { \
6093 if (yydebug) \
6094 yy_reduce_print (yyssp, yyvsp, yylsp, Rule, p); \
6095} while (0)
6096
6097/* Nonzero means print parse trace. It is left uninitialized so that
6098 multiple parsers can coexist. */
6099#ifndef yydebug
6100int yydebug;
6101#endif
6102#else /* !YYDEBUG */
6103# define YYDPRINTF(Args) ((void) 0)
6104# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
6105# define YY_STACK_PRINT(Bottom, Top)
6106# define YY_REDUCE_PRINT(Rule)
6107#endif /* !YYDEBUG */
6108
6109
6110/* YYINITDEPTH -- initial size of the parser's stacks. */
6111#ifndef YYINITDEPTH
6112# define YYINITDEPTH 200
6113#endif
6114
6115/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
6116 if the built-in stack extension method is used).
6117
6118 Do not make this value too large; the results are undefined if
6119 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
6120 evaluated with infinite-precision integer arithmetic. */
6121
6122#ifndef YYMAXDEPTH
6123# define YYMAXDEPTH 10000
6124#endif
6125
6126
6127/* Context of a parse error. */
6128typedef struct
6129{
6133} yypcontext_t;
6134
6135/* Put in YYARG at most YYARGN of the expected tokens given the
6136 current YYCTX, and return the number of tokens stored in YYARG. If
6137 YYARG is null, return the number of expected tokens (guaranteed to
6138 be less than YYNTOKENS). Return YYENOMEM on memory exhaustion.
6139 Return 0 if there are more than YYARGN expected tokens, yet fill
6140 YYARG up to YYARGN. */
6141static int
6142yypcontext_expected_tokens (const yypcontext_t *yyctx,
6143 yysymbol_kind_t yyarg[], int yyargn)
6144{
6145 /* Actual size of YYARG. */
6146 int yycount = 0;
6147 int yyn = yypact[+*yyctx->yyssp];
6148 if (!yypact_value_is_default (yyn))
6149 {
6150 /* Start YYX at -YYN if negative to avoid negative indexes in
6151 YYCHECK. In other words, skip the first -YYN actions for
6152 this state because they are default actions. */
6153 int yyxbegin = yyn < 0 ? -yyn : 0;
6154 /* Stay within bounds of both yycheck and yytname. */
6155 int yychecklim = YYLAST - yyn + 1;
6156 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
6157 int yyx;
6158 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
6159 if (yycheck[yyx + yyn] == yyx && yyx != YYSYMBOL_YYerror
6160 && !yytable_value_is_error (yytable[yyx + yyn]))
6161 {
6162 if (!yyarg)
6163 ++yycount;
6164 else if (yycount == yyargn)
6165 return 0;
6166 else
6167 yyarg[yycount++] = YY_CAST (yysymbol_kind_t, yyx);
6168 }
6169 }
6170 if (yyarg && yycount == 0 && 0 < yyargn)
6171 yyarg[0] = YYSYMBOL_YYEMPTY;
6172 return yycount;
6173}
6174
6175
6176
6177
6178#ifndef yystrlen
6179# if defined __GLIBC__ && defined _STRING_H
6180# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
6181# else
6182/* Return the length of YYSTR. */
6183static YYPTRDIFF_T
6184yystrlen (const char *yystr)
6185{
6186 YYPTRDIFF_T yylen;
6187 for (yylen = 0; yystr[yylen]; yylen++)
6188 continue;
6189 return yylen;
6190}
6191# endif
6192#endif
6193
6194#ifndef yystpcpy
6195# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
6196# define yystpcpy stpcpy
6197# else
6198/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
6199 YYDEST. */
6200static char *
6201yystpcpy (char *yydest, const char *yysrc)
6202{
6203 char *yyd = yydest;
6204 const char *yys = yysrc;
6205
6206 while ((*yyd++ = *yys++) != '\0')
6207 continue;
6208
6209 return yyd - 1;
6210}
6211# endif
6212#endif
6213
6214#ifndef yytnamerr
6215/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
6216 quotes and backslashes, so that it's suitable for yyerror. The
6217 heuristic is that double-quoting is unnecessary unless the string
6218 contains an apostrophe, a comma, or backslash (other than
6219 backslash-backslash). YYSTR is taken from yytname. If YYRES is
6220 null, do not copy; instead, return the length of what the result
6221 would have been. */
6222static YYPTRDIFF_T
6223yytnamerr (char *yyres, const char *yystr)
6224{
6225 if (*yystr == '"')
6226 {
6227 YYPTRDIFF_T yyn = 0;
6228 char const *yyp = yystr;
6229 for (;;)
6230 switch (*++yyp)
6231 {
6232 case '\'':
6233 case ',':
6234 goto do_not_strip_quotes;
6235
6236 case '\\':
6237 if (*++yyp != '\\')
6238 goto do_not_strip_quotes;
6239 else
6240 goto append;
6241
6242 append:
6243 default:
6244 if (yyres)
6245 yyres[yyn] = *yyp;
6246 yyn++;
6247 break;
6248
6249 case '"':
6250 if (yyres)
6251 yyres[yyn] = '\0';
6252 return yyn;
6253 }
6254 do_not_strip_quotes: ;
6255 }
6256
6257 if (yyres)
6258 return yystpcpy (yyres, yystr) - yyres;
6259 else
6260 return yystrlen (yystr);
6261}
6262#endif
6263
6264
6265static int
6266yy_syntax_error_arguments (const yypcontext_t *yyctx,
6267 yysymbol_kind_t yyarg[], int yyargn)
6268{
6269 /* Actual size of YYARG. */
6270 int yycount = 0;
6271 /* There are many possibilities here to consider:
6272 - If this state is a consistent state with a default action, then
6273 the only way this function was invoked is if the default action
6274 is an error action. In that case, don't check for expected
6275 tokens because there are none.
6276 - The only way there can be no lookahead present (in yychar) is if
6277 this state is a consistent state with a default action. Thus,
6278 detecting the absence of a lookahead is sufficient to determine
6279 that there is no unexpected or expected token to report. In that
6280 case, just report a simple "syntax error".
6281 - Don't assume there isn't a lookahead just because this state is a
6282 consistent state with a default action. There might have been a
6283 previous inconsistent state, consistent state with a non-default
6284 action, or user semantic action that manipulated yychar.
6285 - Of course, the expected token list depends on states to have
6286 correct lookahead information, and it depends on the parser not
6287 to perform extra reductions after fetching a lookahead from the
6288 scanner and before detecting a syntax error. Thus, state merging
6289 (from LALR or IELR) and default reductions corrupt the expected
6290 token list. However, the list is correct for canonical LR with
6291 one exception: it will still contain any token that will not be
6292 accepted due to an error action in a later state.
6293 */
6294 if (yyctx->yytoken != YYSYMBOL_YYEMPTY)
6295 {
6296 int yyn;
6297 if (yyarg)
6298 yyarg[yycount] = yyctx->yytoken;
6299 ++yycount;
6300 yyn = yypcontext_expected_tokens (yyctx,
6301 yyarg ? yyarg + 1 : yyarg, yyargn - 1);
6302 if (yyn == YYENOMEM)
6303 return YYENOMEM;
6304 else
6305 yycount += yyn;
6306 }
6307 return yycount;
6308}
6309
6310/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
6311 about the unexpected token YYTOKEN for the state stack whose top is
6312 YYSSP.
6313
6314 Return 0 if *YYMSG was successfully written. Return -1 if *YYMSG is
6315 not large enough to hold the message. In that case, also set
6316 *YYMSG_ALLOC to the required number of bytes. Return YYENOMEM if the
6317 required number of bytes is too large to store. */
6318static int
6319yysyntax_error (struct parser_params *p, YYPTRDIFF_T *yymsg_alloc, char **yymsg,
6320 const yypcontext_t *yyctx)
6321{
6322 enum { YYARGS_MAX = 5 };
6323 /* Internationalized format string. */
6324 const char *yyformat = YY_NULLPTR;
6325 /* Arguments of yyformat: reported tokens (one for the "unexpected",
6326 one per "expected"). */
6327 yysymbol_kind_t yyarg[YYARGS_MAX];
6328 /* Cumulated lengths of YYARG. */
6329 YYPTRDIFF_T yysize = 0;
6330
6331 /* Actual size of YYARG. */
6332 int yycount = yy_syntax_error_arguments (yyctx, yyarg, YYARGS_MAX);
6333 if (yycount == YYENOMEM)
6334 return YYENOMEM;
6335
6336 switch (yycount)
6337 {
6338#define YYCASE_(N, S) \
6339 case N: \
6340 yyformat = S; \
6341 break
6342 default: /* Avoid compiler warnings. */
6343 YYCASE_(0, YY_("syntax error"));
6344 YYCASE_(1, YY_("syntax error, unexpected %s"));
6345 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
6346 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
6347 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
6348 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
6349#undef YYCASE_
6350 }
6351
6352 /* Compute error message size. Don't count the "%s"s, but reserve
6353 room for the terminator. */
6354 yysize = yystrlen (yyformat) - 2 * yycount + 1;
6355 {
6356 int yyi;
6357 for (yyi = 0; yyi < yycount; ++yyi)
6358 {
6359 YYPTRDIFF_T yysize1
6360 = yysize + yytnamerr (YY_NULLPTR, yytname[yyarg[yyi]]);
6361 if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
6362 yysize = yysize1;
6363 else
6364 return YYENOMEM;
6365 }
6366 }
6367
6368 if (*yymsg_alloc < yysize)
6369 {
6370 *yymsg_alloc = 2 * yysize;
6371 if (! (yysize <= *yymsg_alloc
6372 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
6373 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
6374 return -1;
6375 }
6376
6377 /* Avoid sprintf, as that infringes on the user's name space.
6378 Don't have undefined behavior even if the translation
6379 produced a string with the wrong number of "%s"s. */
6380 {
6381 char *yyp = *yymsg;
6382 int yyi = 0;
6383 while ((*yyp = *yyformat) != '\0')
6384 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
6385 {
6386 yyp += yytnamerr (yyp, yytname[yyarg[yyi++]]);
6387 yyformat += 2;
6388 }
6389 else
6390 {
6391 ++yyp;
6392 ++yyformat;
6393 }
6394 }
6395 return 0;
6396}
6397
6398
6399/*-----------------------------------------------.
6400| Release the memory associated to this symbol. |
6401`-----------------------------------------------*/
6402
6403static void
6404yydestruct (const char *yymsg,
6405 yysymbol_kind_t yykind, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, struct parser_params *p)
6406{
6407 YY_USE (yyvaluep);
6408 YY_USE (yylocationp);
6409 YY_USE (p);
6410 if (!yymsg)
6411 yymsg = "Deleting";
6412 YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
6413
6415 YY_USE (yykind);
6417}
6418
6419
6420
6421
6422
6423
6424/*----------.
6425| yyparse. |
6426`----------*/
6427
6428int
6430{
6431/* Lookahead token kind. */
6432int yychar;
6433
6434
6435/* The semantic value of the lookahead symbol. */
6436/* Default value used for initialization, for pacifying older GCCs
6437 or non-GCC compilers. */
6438YY_INITIAL_VALUE (static YYSTYPE yyval_default;)
6439YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
6440
6441/* Location data for the lookahead symbol. */
6442static YYLTYPE yyloc_default
6443# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
6444 = { 1, 1, 1, 1 }
6445# endif
6446;
6447YYLTYPE yylloc = yyloc_default;
6448
6449 /* Number of syntax errors so far. */
6450 int yynerrs = 0;
6451
6452 yy_state_fast_t yystate = 0;
6453 /* Number of tokens to shift before error messages enabled. */
6454 int yyerrstatus = 0;
6455
6456 /* Refer to the stacks through separate pointers, to allow yyoverflow
6457 to reallocate them elsewhere. */
6458
6459 /* Their size. */
6460 YYPTRDIFF_T yystacksize = YYINITDEPTH;
6461
6462 /* The state stack: array, bottom, top. */
6463 yy_state_t yyssa[YYINITDEPTH];
6464 yy_state_t *yyss = yyssa;
6465 yy_state_t *yyssp = yyss;
6466
6467 /* The semantic value stack: array, bottom, top. */
6468 YYSTYPE yyvsa[YYINITDEPTH];
6469 YYSTYPE *yyvs = yyvsa;
6470 YYSTYPE *yyvsp = yyvs;
6471
6472 /* The location stack: array, bottom, top. */
6473 YYLTYPE yylsa[YYINITDEPTH];
6474 YYLTYPE *yyls = yylsa;
6475 YYLTYPE *yylsp = yyls;
6476
6477 int yyn;
6478 /* The return value of yyparse. */
6479 int yyresult;
6480 /* Lookahead symbol kind. */
6482 /* The variables used to return semantic value and location from the
6483 action routines. */
6484 YYSTYPE yyval;
6485 YYLTYPE yyloc;
6486
6487 /* The locations where the error started and ended. */
6488 YYLTYPE yyerror_range[3];
6489
6490 /* Buffer for error messages, and its allocated size. */
6491 char yymsgbuf[128];
6492 char *yymsg = yymsgbuf;
6493 YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
6494
6495#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N))
6496
6497 /* The number of symbols on the RHS of the reduced rule.
6498 Keep to zero when no symbol should be popped. */
6499 int yylen = 0;
6500
6501 YYDPRINTF ((p, "Starting parse\n"));
6502
6503 yychar = YYEMPTY; /* Cause a token to be read. */
6504
6505
6506/* User initialization code. */
6507#line 1002 "ripper.y"
6508{
6510}
6511
6512#line 6508 "ripper.c"
6513
6514 yylsp[0] = yylloc;
6515 goto yysetstate;
6516
6517
6518/*------------------------------------------------------------.
6519| yynewstate -- push a new state, which is found in yystate. |
6520`------------------------------------------------------------*/
6521yynewstate:
6522 /* In all cases, when you get here, the value and location stacks
6523 have just been pushed. So pushing a state here evens the stacks. */
6524 yyssp++;
6525
6526
6527/*--------------------------------------------------------------------.
6528| yysetstate -- set current state (the top of the stack) to yystate. |
6529`--------------------------------------------------------------------*/
6530yysetstate:
6531 YYDPRINTF ((p, "Entering state %d\n", yystate));
6532 YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
6534 *yyssp = YY_CAST (yy_state_t, yystate);
6536 YY_STACK_PRINT (yyss, yyssp);
6537
6538 if (yyss + yystacksize - 1 <= yyssp)
6539#if !defined yyoverflow && !defined YYSTACK_RELOCATE
6540 YYNOMEM;
6541#else
6542 {
6543 /* Get the current used size of the three stacks, in elements. */
6544 YYPTRDIFF_T yysize = yyssp - yyss + 1;
6545
6546# if defined yyoverflow
6547 {
6548 /* Give user a chance to reallocate the stack. Use copies of
6549 these so that the &'s don't force the real ones into
6550 memory. */
6551 yy_state_t *yyss1 = yyss;
6552 YYSTYPE *yyvs1 = yyvs;
6553 YYLTYPE *yyls1 = yyls;
6554
6555 /* Each stack pointer address is followed by the size of the
6556 data in use in that stack, in bytes. This used to be a
6557 conditional around just the two extra args, but that might
6558 be undefined if yyoverflow is a macro. */
6559 yyoverflow (YY_("memory exhausted"),
6560 &yyss1, yysize * YYSIZEOF (*yyssp),
6561 &yyvs1, yysize * YYSIZEOF (*yyvsp),
6562 &yyls1, yysize * YYSIZEOF (*yylsp),
6563 &yystacksize);
6564 yyss = yyss1;
6565 yyvs = yyvs1;
6566 yyls = yyls1;
6567 }
6568# else /* defined YYSTACK_RELOCATE */
6569 /* Extend the stack our own way. */
6570 if (YYMAXDEPTH <= yystacksize)
6571 YYNOMEM;
6572 yystacksize *= 2;
6573 if (YYMAXDEPTH < yystacksize)
6574 yystacksize = YYMAXDEPTH;
6575
6576 {
6577 yy_state_t *yyss1 = yyss;
6578 union yyalloc *yyptr =
6579 YY_CAST (union yyalloc *,
6580 YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
6581 if (! yyptr)
6582 YYNOMEM;
6586# undef YYSTACK_RELOCATE
6587 if (yyss1 != yyssa)
6588 YYSTACK_FREE (yyss1);
6589 }
6590# endif
6591
6592 yyssp = yyss + yysize - 1;
6593 yyvsp = yyvs + yysize - 1;
6594 yylsp = yyls + yysize - 1;
6595
6597 YYDPRINTF ((p, "Stack size increased to %ld\n",
6598 YY_CAST (long, yystacksize)));
6600
6601 if (yyss + yystacksize - 1 <= yyssp)
6602 YYABORT;
6603 }
6604#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
6605
6606
6607 if (yystate == YYFINAL)
6608 YYACCEPT;
6609
6610 goto yybackup;
6611
6612
6613/*-----------.
6614| yybackup. |
6615`-----------*/
6616yybackup:
6617 /* Do appropriate processing given the current state. Read a
6618 lookahead token if we need one and don't already have one. */
6619
6620 /* First try to decide what to do without reference to lookahead token. */
6621 yyn = yypact[yystate];
6622 if (yypact_value_is_default (yyn))
6623 goto yydefault;
6624
6625 /* Not known => get a lookahead token if don't already have one. */
6626
6627 /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */
6628 if (yychar == YYEMPTY)
6629 {
6630 YYDPRINTF ((p, "Reading a token\n"));
6631 yychar = yylex (&yylval, &yylloc, p);
6632 }
6633
6634 if (yychar <= END_OF_INPUT)
6635 {
6636 yychar = END_OF_INPUT;
6637 yytoken = YYSYMBOL_YYEOF;
6638 YYDPRINTF ((p, "Now at end of input.\n"));
6639 }
6640 else if (yychar == YYerror)
6641 {
6642 /* The scanner already issued an error message, process directly
6643 to error recovery. But do not keep the error token as
6644 lookahead, it is too special and may lead us to an endless
6645 loop in error recovery. */
6646 yychar = YYUNDEF;
6647 yytoken = YYSYMBOL_YYerror;
6648 yyerror_range[1] = yylloc;
6649 goto yyerrlab1;
6650 }
6651 else
6652 {
6653 yytoken = YYTRANSLATE (yychar);
6654 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
6655 }
6656
6657 /* If the proper action on seeing token YYTOKEN is to reduce or to
6658 detect an error, take that action. */
6659 yyn += yytoken;
6660 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
6661 goto yydefault;
6662 yyn = yytable[yyn];
6663 if (yyn <= 0)
6664 {
6665 if (yytable_value_is_error (yyn))
6666 goto yyerrlab;
6667 yyn = -yyn;
6668 goto yyreduce;
6669 }
6670
6671 /* Count tokens shifted since error; after three, turn off error
6672 status. */
6673 if (yyerrstatus)
6674 yyerrstatus--;
6675
6676 /* Shift the lookahead token. */
6677 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
6678 yystate = yyn;
6680 *++yyvsp = yylval;
6682 *++yylsp = yylloc;
6683
6684 /* Discard the shifted token. */
6685 yychar = YYEMPTY;
6686 goto yynewstate;
6687
6688
6689/*-----------------------------------------------------------.
6690| yydefault -- do the default action for the current state. |
6691`-----------------------------------------------------------*/
6692yydefault:
6693 yyn = yydefact[yystate];
6694 if (yyn == 0)
6695 goto yyerrlab;
6696 goto yyreduce;
6697
6698
6699/*-----------------------------.
6700| yyreduce -- do a reduction. |
6701`-----------------------------*/
6702yyreduce:
6703 /* yyn is the number of a rule to reduce with. */
6704 yylen = yyr2[yyn];
6705
6706 /* If YYLEN is nonzero, implement the default value of the action:
6707 '$$ = $1'.
6708
6709 Otherwise, the following line sets YYVAL to garbage.
6710 This behavior is undocumented and Bison
6711 users should not rely upon it. Assigning to YYVAL
6712 unconditionally makes the parser a bit smaller, and it avoids a
6713 GCC warning that YYVAL may be used uninitialized. */
6714 yyval = yyvsp[1-yylen];
6715
6716 /* Default location. */
6717 YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
6718 yyerror_range[1] = yyloc;
6719 YY_REDUCE_PRINT (yyn);
6720 switch (yyn)
6721 {
6722 case 2: /* $@1: %empty */
6723#line 1204 "ripper.y"
6724 {
6725 SET_LEX_STATE(EXPR_BEG);
6726 local_push(p, ifndef_ripper(1)+0);
6727 }
6728#line 6724 "ripper.c"
6729 break;
6730
6731 case 3: /* program: $@1 top_compstmt */
6732#line 1209 "ripper.y"
6733 {
6734#if 0
6735 if ((yyvsp[0].val) && !compile_for_eval) {
6736 NODE *node = (yyvsp[0].val);
6737 /* last expression should not be void */
6738 if (nd_type(node) == NODE_BLOCK) {
6739 while (node->nd_next) {
6740 node = node->nd_next;
6741 }
6742 node = node->nd_head;
6743 }
6744 node = remove_begin(node);
6745 void_expr(p, node);
6746 }
6747 p->eval_tree = NEW_SCOPE(0, block_append(p, p->eval_tree, (yyvsp[0].val)), &(yyloc));
6748#endif
6749 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(program,v1);p->result=v2;}
6750 local_pop(p);
6751 }
6752#line 6748 "ripper.c"
6753 break;
6754
6755 case 4: /* top_compstmt: top_stmts opt_terms */
6756#line 1231 "ripper.y"
6757 {
6758 (yyval.val) = void_stmts(p, (yyvsp[-1].val));
6759 }
6760#line 6756 "ripper.c"
6761 break;
6762
6763 case 5: /* top_stmts: none */
6764#line 1237 "ripper.y"
6765 {
6766#if 0
6767 (yyval.val) = NEW_BEGIN(0, &(yyloc));
6768#endif
6769 {VALUE v1,v2,v3,v4,v5;v1=dispatch0(stmts_new);v2=dispatch0(void_stmt);v3=v1;v4=v2;v5=dispatch2(stmts_add,v3,v4);(yyval.val)=v5;}
6770 }
6771#line 6767 "ripper.c"
6772 break;
6773
6774 case 6: /* top_stmts: top_stmt */
6775#line 1244 "ripper.y"
6776 {
6777#if 0
6778 (yyval.val) = newline_node((yyvsp[0].val));
6779#endif
6780 {VALUE v1,v2,v3,v4;v1=dispatch0(stmts_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(stmts_add,v2,v3);(yyval.val)=v4;}
6781 }
6782#line 6778 "ripper.c"
6783 break;
6784
6785 case 7: /* top_stmts: top_stmts terms top_stmt */
6786#line 1251 "ripper.y"
6787 {
6788#if 0
6789 (yyval.val) = block_append(p, (yyvsp[-2].val), newline_node((yyvsp[0].val)));
6790#endif
6791 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(stmts_add,v1,v2);(yyval.val)=v3;}
6792 }
6793#line 6789 "ripper.c"
6794 break;
6795
6796 case 8: /* top_stmts: error top_stmt */
6797#line 1258 "ripper.y"
6798 {
6799 (yyval.val) = remove_begin((yyvsp[0].val));
6800 }
6801#line 6797 "ripper.c"
6802 break;
6803
6804 case 10: /* top_stmt: "`BEGIN'" begin_block */
6805#line 1265 "ripper.y"
6806 {
6807 (yyval.val) = (yyvsp[0].val);
6808 }
6809#line 6805 "ripper.c"
6810 break;
6811
6812 case 11: /* begin_block: '{' top_compstmt '}' */
6813#line 1271 "ripper.y"
6814 {
6815#if 0
6816 p->eval_tree_begin = block_append(p, p->eval_tree_begin,
6817 NEW_BEGIN((yyvsp[-1].val), &(yyloc)));
6818 (yyval.val) = NEW_BEGIN(0, &(yyloc));
6819#endif
6820 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(BEGIN,v1);(yyval.val)=v2;}
6821 }
6822#line 6818 "ripper.c"
6823 break;
6824
6825 case 12: /* $@2: %empty */
6826#line 1283 "ripper.y"
6827 {if (!(yyvsp[-1].val)) {yyerror1(&(yylsp[0]), "else without rescue is useless");}}
6828#line 6824 "ripper.c"
6829 break;
6830
6831 case 13: /* bodystmt: compstmt opt_rescue k_else $@2 compstmt opt_ensure */
6832#line 1286 "ripper.y"
6833 {
6834#if 0
6835 (yyval.val) = new_bodystmt(p, (yyvsp[-5].val), (yyvsp[-4].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
6836#endif
6837 {VALUE v1,v2,v3,v4,v5;v1=escape_Qundef((yyvsp[-5].val));v2=escape_Qundef((yyvsp[-4].val));v3=escape_Qundef((yyvsp[-1].val));v4=escape_Qundef((yyvsp[0].val));v5=dispatch4(bodystmt,v1,v2,v3,v4);(yyval.val)=v5;}
6838 }
6839#line 6835 "ripper.c"
6840 break;
6841
6842 case 14: /* bodystmt: compstmt opt_rescue opt_ensure */
6843#line 1295 "ripper.y"
6844 {
6845#if 0
6846 (yyval.val) = new_bodystmt(p, (yyvsp[-2].val), (yyvsp[-1].val), 0, (yyvsp[0].val), &(yyloc));
6847#endif
6848 {VALUE v1,v2,v3,v4,v5;v1=escape_Qundef((yyvsp[-2].val));v2=escape_Qundef((yyvsp[-1].val));v3=Qnil;v4=escape_Qundef((yyvsp[0].val));v5=dispatch4(bodystmt,v1,v2,v3,v4);(yyval.val)=v5;}
6849 }
6850#line 6846 "ripper.c"
6851 break;
6852
6853 case 15: /* compstmt: stmts opt_terms */
6854#line 1304 "ripper.y"
6855 {
6856 (yyval.val) = void_stmts(p, (yyvsp[-1].val));
6857 }
6858#line 6854 "ripper.c"
6859 break;
6860
6861 case 16: /* stmts: none */
6862#line 1310 "ripper.y"
6863 {
6864#if 0
6865 (yyval.val) = NEW_BEGIN(0, &(yyloc));
6866#endif
6867 {VALUE v1,v2,v3,v4,v5;v1=dispatch0(stmts_new);v2=dispatch0(void_stmt);v3=v1;v4=v2;v5=dispatch2(stmts_add,v3,v4);(yyval.val)=v5;}
6868 }
6869#line 6865 "ripper.c"
6870 break;
6871
6872 case 17: /* stmts: stmt_or_begin */
6873#line 1317 "ripper.y"
6874 {
6875#if 0
6876 (yyval.val) = newline_node((yyvsp[0].val));
6877#endif
6878 {VALUE v1,v2,v3,v4;v1=dispatch0(stmts_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(stmts_add,v2,v3);(yyval.val)=v4;}
6879 }
6880#line 6876 "ripper.c"
6881 break;
6882
6883 case 18: /* stmts: stmts terms stmt_or_begin */
6884#line 1324 "ripper.y"
6885 {
6886#if 0
6887 (yyval.val) = block_append(p, (yyvsp[-2].val), newline_node((yyvsp[0].val)));
6888#endif
6889 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(stmts_add,v1,v2);(yyval.val)=v3;}
6890 }
6891#line 6887 "ripper.c"
6892 break;
6893
6894 case 19: /* stmts: error stmt */
6895#line 1331 "ripper.y"
6896 {
6897 (yyval.val) = remove_begin((yyvsp[0].val));
6898 }
6899#line 6895 "ripper.c"
6900 break;
6901
6902 case 20: /* stmt_or_begin: stmt */
6903#line 1337 "ripper.y"
6904 {
6905 (yyval.val) = (yyvsp[0].val);
6906 }
6907#line 6903 "ripper.c"
6908 break;
6909
6910 case 21: /* $@3: %empty */
6911#line 1341 "ripper.y"
6912 {
6913 yyerror1(&(yylsp[0]), "BEGIN is permitted only at toplevel");
6914 }
6915#line 6911 "ripper.c"
6916 break;
6917
6918 case 22: /* stmt_or_begin: "`BEGIN'" $@3 begin_block */
6919#line 1345 "ripper.y"
6920 {
6921 (yyval.val) = (yyvsp[0].val);
6922 }
6923#line 6919 "ripper.c"
6924 break;
6925
6926 case 23: /* $@4: %empty */
6927#line 1350 "ripper.y"
6928 {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);}
6929#line 6925 "ripper.c"
6930 break;
6931
6932 case 24: /* stmt: "`alias'" fitem $@4 fitem */
6933#line 1351 "ripper.y"
6934 {
6935#if 0
6936 (yyval.val) = NEW_ALIAS((yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
6937#endif
6938 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(alias,v1,v2);(yyval.val)=v3;}
6939 }
6940#line 6936 "ripper.c"
6941 break;
6942
6943 case 25: /* stmt: "`alias'" "global variable" "global variable" */
6944#line 1358 "ripper.y"
6945 {
6946#if 0
6947 (yyval.val) = NEW_VALIAS((yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
6948#endif
6949 {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(var_alias,v1,v2);(yyval.val)=v3;}
6950 }
6951#line 6947 "ripper.c"
6952 break;
6953
6954 case 26: /* stmt: "`alias'" "global variable" "back reference" */
6955#line 1365 "ripper.y"
6956 {
6957#if 0
6958 char buf[2];
6959 buf[0] = '$';
6960 buf[1] = (char)(yyvsp[0].val)->nd_nth;
6961 (yyval.val) = NEW_VALIAS((yyvsp[-1].val), rb_intern2(buf, 2), &(yyloc));
6962#endif
6963 {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(var_alias,v1,v2);(yyval.val)=v3;}
6964 }
6965#line 6961 "ripper.c"
6966 break;
6967
6968 case 27: /* stmt: "`alias'" "global variable" "numbered reference" */
6969#line 1375 "ripper.y"
6970 {
6971#if 0
6972 yyerror1(&(yylsp[0]), "can't make alias for the number variables");
6973 (yyval.val) = NEW_BEGIN(0, &(yyloc));
6974#endif
6975 {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(var_alias,v1,v2);v4=v3;v5=dispatch1(alias_error,v4);(yyval.val)=v5;}ripper_error(p);
6976 }
6977#line 6973 "ripper.c"
6978 break;
6979
6980 case 28: /* stmt: "`undef'" undef_list */
6981#line 1383 "ripper.y"
6982 {
6983#if 0
6984 (yyval.val) = (yyvsp[0].val);
6985#endif
6986 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(undef,v1);(yyval.val)=v2;}
6987 }
6988#line 6984 "ripper.c"
6989 break;
6990
6991 case 29: /* stmt: stmt "`if' modifier" expr_value */
6992#line 1390 "ripper.y"
6993 {
6994#if 0
6995 (yyval.val) = new_if(p, (yyvsp[0].val), remove_begin((yyvsp[-2].val)), 0, &(yyloc));
6996 fixpos((yyval.val), (yyvsp[0].val));
6997#endif
6998 {VALUE v1,v2,v3;v1=(yyvsp[0].val);v2=(yyvsp[-2].val);v3=dispatch2(if_mod,v1,v2);(yyval.val)=v3;}
6999 }
7000#line 6996 "ripper.c"
7001 break;
7002
7003 case 30: /* stmt: stmt "`unless' modifier" expr_value */
7004#line 1398 "ripper.y"
7005 {
7006#if 0
7007 (yyval.val) = new_unless(p, (yyvsp[0].val), remove_begin((yyvsp[-2].val)), 0, &(yyloc));
7008 fixpos((yyval.val), (yyvsp[0].val));
7009#endif
7010 {VALUE v1,v2,v3;v1=(yyvsp[0].val);v2=(yyvsp[-2].val);v3=dispatch2(unless_mod,v1,v2);(yyval.val)=v3;}
7011 }
7012#line 7008 "ripper.c"
7013 break;
7014
7015 case 31: /* stmt: stmt "`while' modifier" expr_value */
7016#line 1406 "ripper.y"
7017 {
7018#if 0
7019 if ((yyvsp[-2].val) && nd_type((yyvsp[-2].val)) == NODE_BEGIN) {
7020 (yyval.val) = NEW_WHILE(cond(p, (yyvsp[0].val), &(yylsp[0])), (yyvsp[-2].val)->nd_body, 0, &(yyloc));
7021 }
7022 else {
7023 (yyval.val) = NEW_WHILE(cond(p, (yyvsp[0].val), &(yylsp[0])), (yyvsp[-2].val), 1, &(yyloc));
7024 }
7025#endif
7026 {VALUE v1,v2,v3;v1=(yyvsp[0].val);v2=(yyvsp[-2].val);v3=dispatch2(while_mod,v1,v2);(yyval.val)=v3;}
7027 }
7028#line 7024 "ripper.c"
7029 break;
7030
7031 case 32: /* stmt: stmt "`until' modifier" expr_value */
7032#line 1418 "ripper.y"
7033 {
7034#if 0
7035 if ((yyvsp[-2].val) && nd_type((yyvsp[-2].val)) == NODE_BEGIN) {
7036 (yyval.val) = NEW_UNTIL(cond(p, (yyvsp[0].val), &(yylsp[0])), (yyvsp[-2].val)->nd_body, 0, &(yyloc));
7037 }
7038 else {
7039 (yyval.val) = NEW_UNTIL(cond(p, (yyvsp[0].val), &(yylsp[0])), (yyvsp[-2].val), 1, &(yyloc));
7040 }
7041#endif
7042 {VALUE v1,v2,v3;v1=(yyvsp[0].val);v2=(yyvsp[-2].val);v3=dispatch2(until_mod,v1,v2);(yyval.val)=v3;}
7043 }
7044#line 7040 "ripper.c"
7045 break;
7046
7047 case 33: /* stmt: stmt "`rescue' modifier" stmt */
7048#line 1430 "ripper.y"
7049 {
7050#if 0
7051 NODE *resq;
7052 YYLTYPE loc = code_loc_gen(&(yylsp[-1]), &(yylsp[0]));
7053 resq = NEW_RESBODY(0, remove_begin((yyvsp[0].val)), 0, &loc);
7054 (yyval.val) = NEW_RESCUE(remove_begin((yyvsp[-2].val)), resq, 0, &(yyloc));
7055#endif
7056 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(rescue_mod,v1,v2);(yyval.val)=v3;}
7057 }
7058#line 7054 "ripper.c"
7059 break;
7060
7061 case 34: /* stmt: "`END'" '{' compstmt '}' */
7062#line 1440 "ripper.y"
7063 {
7064 if (p->in_def) {
7065 rb_warn0("END in method; use at_exit");
7066 }
7067#if 0
7068 {
7069 NODE *scope = NEW_NODE(
7070 NODE_SCOPE, 0 /* tbl */, (yyvsp[-1].val) /* body */, 0 /* args */, &(yyloc));
7071 (yyval.val) = NEW_POSTEXE(scope, &(yyloc));
7072 }
7073#endif
7074 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(END,v1);(yyval.val)=v2;}
7075 }
7076#line 7072 "ripper.c"
7077 break;
7078
7079 case 36: /* stmt: mlhs '=' command_call */
7080#line 1455 "ripper.y"
7081 {
7082#if 0
7083 value_expr((yyvsp[0].val));
7084 (yyval.val) = node_assign(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
7085#endif
7086 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(massign,v1,v2);(yyval.val)=v3;}
7087 }
7088#line 7084 "ripper.c"
7089 break;
7090
7091 case 37: /* stmt: lhs '=' mrhs */
7092#line 1463 "ripper.y"
7093 {
7094#if 0
7095 value_expr((yyvsp[0].val));
7096 (yyval.val) = node_assign(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
7097#endif
7098 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(assign,v1,v2);(yyval.val)=v3;}
7099 }
7100#line 7096 "ripper.c"
7101 break;
7102
7103 case 38: /* stmt: mlhs '=' mrhs_arg "`rescue' modifier" stmt */
7104#line 1471 "ripper.y"
7105 {
7106#if 0
7107 YYLTYPE loc = code_loc_gen(&(yylsp[-1]), &(yylsp[0]));
7108 value_expr((yyvsp[-2].val));
7109 (yyval.val) = node_assign(p, (yyvsp[-4].val), NEW_RESCUE((yyvsp[-2].val), NEW_RESBODY(0, remove_begin((yyvsp[0].val)), 0, &loc), 0, &(yyloc)), &(yyloc));
7110#endif
7111 {VALUE v1,v2,v3,v4,v5,v6;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(rescue_mod,v1,v2);v4=(yyvsp[-4].val);v5=v3;v6=dispatch2(massign,v4,v5);(yyval.val)=v6;}
7112 }
7113#line 7109 "ripper.c"
7114 break;
7115
7116 case 39: /* stmt: mlhs '=' mrhs_arg */
7117#line 1480 "ripper.y"
7118 {
7119#if 0
7120 (yyval.val) = node_assign(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
7121#endif
7122 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(massign,v1,v2);(yyval.val)=v3;}
7123 }
7124#line 7120 "ripper.c"
7125 break;
7126
7127 case 41: /* command_asgn: lhs '=' command_rhs */
7128#line 1490 "ripper.y"
7129 {
7130#if 0
7131 (yyval.val) = node_assign(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
7132#endif
7133 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(assign,v1,v2);(yyval.val)=v3;}
7134 }
7135#line 7131 "ripper.c"
7136 break;
7137
7138 case 42: /* command_asgn: var_lhs "operator-assignment" command_rhs */
7139#line 1497 "ripper.y"
7140 {
7141#if 0
7142 (yyval.val) = new_op_assign(p, (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
7143#endif
7144 {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=(yyvsp[0].val);v4=dispatch3(opassign,v1,v2,v3);(yyval.val)=v4;}
7145 }
7146#line 7142 "ripper.c"
7147 break;
7148
7149 case 43: /* command_asgn: primary_value '[' opt_call_args rbracket "operator-assignment" command_rhs */
7150#line 1504 "ripper.y"
7151 {
7152#if 0
7153 (yyval.val) = new_ary_op_assign(p, (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-3]), &(yyloc));
7154#endif
7155 {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-5].val);v2=escape_Qundef((yyvsp[-3].val));v3=dispatch2(aref_field,v1,v2);v4=v3;v5=(yyvsp[-1].val);v6=(yyvsp[0].val);v7=dispatch3(opassign,v4,v5,v6);(yyval.val)=v7;}
7156
7157 }
7158#line 7154 "ripper.c"
7159 break;
7160
7161 case 44: /* command_asgn: primary_value call_op "local variable or method" "operator-assignment" command_rhs */
7162#line 1512 "ripper.y"
7163 {
7164#if 0
7165 (yyval.val) = new_attr_op_assign(p, (yyvsp[-4].val), (yyvsp[-3].val), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
7166#endif
7167 {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=(yyvsp[-3].val);v3=(yyvsp[-2].val);v4=dispatch3(field,v1,v2,v3);v5=v4;v6=(yyvsp[-1].val);v7=(yyvsp[0].val);v8=dispatch3(opassign,v5,v6,v7);(yyval.val)=v8;}
7168 }
7169#line 7165 "ripper.c"
7170 break;
7171
7172 case 45: /* command_asgn: primary_value call_op "constant" "operator-assignment" command_rhs */
7173#line 1519 "ripper.y"
7174 {
7175#if 0
7176 (yyval.val) = new_attr_op_assign(p, (yyvsp[-4].val), (yyvsp[-3].val), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
7177#endif
7178 {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=(yyvsp[-3].val);v3=(yyvsp[-2].val);v4=dispatch3(field,v1,v2,v3);v5=v4;v6=(yyvsp[-1].val);v7=(yyvsp[0].val);v8=dispatch3(opassign,v5,v6,v7);(yyval.val)=v8;}
7179 }
7180#line 7176 "ripper.c"
7181 break;
7182
7183 case 46: /* command_asgn: primary_value "::" "constant" "operator-assignment" command_rhs */
7184#line 1526 "ripper.y"
7185 {
7186#if 0
7187 YYLTYPE loc = code_loc_gen(&(yylsp[-4]), &(yylsp[-2]));
7188 (yyval.val) = new_const_op_assign(p, NEW_COLON2((yyvsp[-4].val), (yyvsp[-2].val), &loc), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
7189#endif
7190 {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-4].val);v2=(yyvsp[-2].val);v3=dispatch2(const_path_field,v1,v2);v4=v3;v5=(yyvsp[-1].val);v6=(yyvsp[0].val);v7=dispatch3(opassign,v4,v5,v6);(yyval.val)=v7;}
7191 }
7192#line 7188 "ripper.c"
7193 break;
7194
7195 case 47: /* command_asgn: primary_value "::" "local variable or method" "operator-assignment" command_rhs */
7196#line 1534 "ripper.y"
7197 {
7198#if 0
7199 (yyval.val) = new_attr_op_assign(p, (yyvsp[-4].val), ID2VAL(idCOLON2), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
7200#endif
7201 {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=ID2VAL(idCOLON2);v3=(yyvsp[-2].val);v4=dispatch3(field,v1,v2,v3);v5=v4;v6=(yyvsp[-1].val);v7=(yyvsp[0].val);v8=dispatch3(opassign,v5,v6,v7);(yyval.val)=v8;}
7202 }
7203#line 7199 "ripper.c"
7204 break;
7205
7206 case 48: /* command_asgn: backref "operator-assignment" command_rhs */
7207#line 1541 "ripper.y"
7208 {
7209#if 0
7210 rb_backref_error(p, (yyvsp[-2].val));
7211 (yyval.val) = NEW_BEGIN(0, &(yyloc));
7212#endif
7213 {VALUE v1,v2,v3,v4,v5;v1=var_field(p, (yyvsp[-2].val));v2=(yyvsp[0].val);v3=dispatch2(assign,v1,v2);v4=v3;v5=dispatch1(assign_error,v4);(yyval.val)=v5;}ripper_error(p);
7214 }
7215#line 7211 "ripper.c"
7216 break;
7217
7218 case 49: /* command_rhs: command_call */
7219#line 1551 "ripper.y"
7220 {
7221 value_expr((yyvsp[0].val));
7222 (yyval.val) = (yyvsp[0].val);
7223 }
7224#line 7220 "ripper.c"
7225 break;
7226
7227 case 50: /* command_rhs: command_call "`rescue' modifier" stmt */
7228#line 1556 "ripper.y"
7229 {
7230#if 0
7231 YYLTYPE loc = code_loc_gen(&(yylsp[-1]), &(yylsp[0]));
7232 value_expr((yyvsp[-2].val));
7233 (yyval.val) = NEW_RESCUE((yyvsp[-2].val), NEW_RESBODY(0, remove_begin((yyvsp[0].val)), 0, &loc), 0, &(yyloc));
7234#endif
7235 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(rescue_mod,v1,v2);(yyval.val)=v3;}
7236 }
7237#line 7233 "ripper.c"
7238 break;
7239
7240 case 53: /* expr: expr "`and'" expr */
7241#line 1569 "ripper.y"
7242 {
7243 (yyval.val) = logop(p, idAND, (yyvsp[-2].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
7244 }
7245#line 7241 "ripper.c"
7246 break;
7247
7248 case 54: /* expr: expr "`or'" expr */
7249#line 1573 "ripper.y"
7250 {
7251 (yyval.val) = logop(p, idOR, (yyvsp[-2].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
7252 }
7253#line 7249 "ripper.c"
7254 break;
7255
7256 case 55: /* expr: "`not'" opt_nl expr */
7257#line 1577 "ripper.y"
7258 {
7259 (yyval.val) = call_uni_op(p, method_cond(p, (yyvsp[0].val), &(yylsp[0])), METHOD_NOT, &(yylsp[-2]), &(yyloc));
7260 }
7261#line 7257 "ripper.c"
7262 break;
7263
7264 case 56: /* expr: '!' command_call */
7265#line 1581 "ripper.y"
7266 {
7267 (yyval.val) = call_uni_op(p, method_cond(p, (yyvsp[0].val), &(yylsp[0])), '!', &(yylsp[-1]), &(yyloc));
7268 }
7269#line 7265 "ripper.c"
7270 break;
7271
7272 case 57: /* @5: %empty */
7273#line 1585 "ripper.y"
7274 {
7275 value_expr((yyvsp[-1].val));
7276 SET_LEX_STATE(EXPR_BEG|EXPR_LABEL);
7277 p->command_start = FALSE;
7278 (yyval.num) = p->in_kwarg;
7279 p->in_kwarg = 1;
7280 }
7281#line 7277 "ripper.c"
7282 break;
7283
7284 case 58: /* @6: %empty */
7285#line 1592 "ripper.y"
7286 {(yyval.tbl) = push_pvtbl(p);}
7287#line 7283 "ripper.c"
7288 break;
7289
7290 case 59: /* $@7: %empty */
7291#line 1594 "ripper.y"
7292 {pop_pvtbl(p, (yyvsp[-1].tbl));}
7293#line 7289 "ripper.c"
7294 break;
7295
7296 case 60: /* expr: arg "`in'" @5 @6 p_expr $@7 */
7297#line 1595 "ripper.y"
7298 {
7299 p->in_kwarg = !!(yyvsp[-3].num);
7300#if 0
7301 (yyval.val) = new_case3(p, (yyvsp[-5].val), NEW_IN((yyvsp[-1].val), 0, 0, &(yylsp[-1])), &(yyloc));
7302#endif
7303 {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-1].val);v2=Qnil;v3=Qnil;v4=dispatch3(in,v1,v2,v3);v5=(yyvsp[-5].val);v6=v4;v7=dispatch2(case,v5,v6);(yyval.val)=v7;}
7304 }
7305#line 7301 "ripper.c"
7306 break;
7307
7308 case 62: /* expr_value: expr */
7309#line 1606 "ripper.y"
7310 {
7311 value_expr((yyvsp[0].val));
7312 (yyval.val) = (yyvsp[0].val);
7313 }
7314#line 7310 "ripper.c"
7315 break;
7316
7317 case 63: /* $@8: %empty */
7318#line 1612 "ripper.y"
7319 {COND_PUSH(1);}
7320#line 7316 "ripper.c"
7321 break;
7322
7323 case 64: /* $@9: %empty */
7324#line 1612 "ripper.y"
7325 {COND_POP();}
7326#line 7322 "ripper.c"
7327 break;
7328
7329 case 65: /* expr_value_do: $@8 expr_value do $@9 */
7330#line 1613 "ripper.y"
7331 {
7332 (yyval.val) = (yyvsp[-2].val);
7333 }
7334#line 7330 "ripper.c"
7335 break;
7336
7337 case 69: /* block_command: block_call call_op2 operation2 command_args */
7338#line 1624 "ripper.y"
7339 {
7340#if 0
7341 (yyval.val) = new_qcall(p, (yyvsp[-2].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
7342#endif
7343 {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-3].val);v2=(yyvsp[-2].val);v3=(yyvsp[-1].val);v4=dispatch3(call,v1,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=dispatch2(method_add_arg,v5,v6);(yyval.val)=v7;}
7344 }
7345#line 7341 "ripper.c"
7346 break;
7347
7348 case 70: /* cmd_brace_block: "{ arg" brace_body '}' */
7349#line 1633 "ripper.y"
7350 {
7351 (yyval.val) = (yyvsp[-1].val);
7352#if 0
7353 (yyval.val)->nd_body->nd_loc = code_loc_gen(&(yylsp[-2]), &(yylsp[0]));
7354 nd_set_line((yyval.val), (yylsp[-2]).end_pos.lineno);
7355#endif
7356 }
7357#line 7353 "ripper.c"
7358 break;
7359
7360 case 71: /* fcall: operation */
7361#line 1643 "ripper.y"
7362 {
7363#if 0
7364 (yyval.val) = NEW_FCALL((yyvsp[0].val), 0, &(yyloc));
7365 nd_set_line((yyval.val), p->tokline);
7366#endif
7367 (yyval.val)=(yyvsp[0].val);
7368 }
7369#line 7365 "ripper.c"
7370 break;
7371
7372 case 72: /* command: fcall command_args */
7373#line 1653 "ripper.y"
7374 {
7375#if 0
7376 (yyvsp[-1].val)->nd_args = (yyvsp[0].val);
7377 nd_set_last_loc((yyvsp[-1].val), (yylsp[0]).end_pos);
7378 (yyval.val) = (yyvsp[-1].val);
7379#endif
7380 {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(command,v1,v2);(yyval.val)=v3;}
7381 }
7382#line 7378 "ripper.c"
7383 break;
7384
7385 case 73: /* command: fcall command_args cmd_brace_block */
7386#line 1662 "ripper.y"
7387 {
7388#if 0
7389 block_dup_check(p, (yyvsp[-1].val), (yyvsp[0].val));
7390 (yyvsp[-2].val)->nd_args = (yyvsp[-1].val);
7391 (yyval.val) = method_add_block(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
7392 fixpos((yyval.val), (yyvsp[-2].val));
7393 nd_set_last_loc((yyvsp[-2].val), (yylsp[-1]).end_pos);
7394#endif
7395 {VALUE v1,v2,v3,v4,v5,v6;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=dispatch2(command,v1,v2);v4=v3;v5=(yyvsp[0].val);v6=dispatch2(method_add_block,v4,v5);(yyval.val)=v6;}
7396 }
7397#line 7393 "ripper.c"
7398 break;
7399
7400 case 74: /* command: primary_value call_op operation2 command_args */
7401#line 1673 "ripper.y"
7402 {
7403#if 0
7404 (yyval.val) = new_command_qcall(p, (yyvsp[-2].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), Qnull, &(yylsp[-1]), &(yyloc));
7405#endif
7406 {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-3].val);v2=(yyvsp[-2].val);v3=(yyvsp[-1].val);v4=(yyvsp[0].val);v5=dispatch4(command_call,v1,v2,v3,v4);(yyval.val)=v5;}
7407 }
7408#line 7404 "ripper.c"
7409 break;
7410
7411 case 75: /* command: primary_value call_op operation2 command_args cmd_brace_block */
7412#line 1680 "ripper.y"
7413 {
7414#if 0
7415 (yyval.val) = new_command_qcall(p, (yyvsp[-3].val), (yyvsp[-4].val), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-2]), &(yyloc));
7416#endif
7417 {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=(yyvsp[-3].val);v3=(yyvsp[-2].val);v4=(yyvsp[-1].val);v5=dispatch4(command_call,v1,v2,v3,v4);v6=v5;v7=(yyvsp[0].val);v8=dispatch2(method_add_block,v6,v7);(yyval.val)=v8;}
7418 }
7419#line 7415 "ripper.c"
7420 break;
7421
7422 case 76: /* command: primary_value "::" operation2 command_args */
7423#line 1687 "ripper.y"
7424 {
7425#if 0
7426 (yyval.val) = new_command_qcall(p, ID2VAL(idCOLON2), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), Qnull, &(yylsp[-1]), &(yyloc));
7427#endif
7428 {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-3].val);v2=ID2VAL(idCOLON2);v3=(yyvsp[-1].val);v4=(yyvsp[0].val);v5=dispatch4(command_call,v1,v2,v3,v4);(yyval.val)=v5;}
7429 }
7430#line 7426 "ripper.c"
7431 break;
7432
7433 case 77: /* command: primary_value "::" operation2 command_args cmd_brace_block */
7434#line 1694 "ripper.y"
7435 {
7436#if 0
7437 (yyval.val) = new_command_qcall(p, ID2VAL(idCOLON2), (yyvsp[-4].val), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-2]), &(yyloc));
7438#endif
7439 {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=ID2VAL(idCOLON2);v3=(yyvsp[-2].val);v4=(yyvsp[-1].val);v5=dispatch4(command_call,v1,v2,v3,v4);v6=v5;v7=(yyvsp[0].val);v8=dispatch2(method_add_block,v6,v7);(yyval.val)=v8;}
7440 }
7441#line 7437 "ripper.c"
7442 break;
7443
7444 case 78: /* command: "`super'" command_args */
7445#line 1701 "ripper.y"
7446 {
7447#if 0
7448 (yyval.val) = NEW_SUPER((yyvsp[0].val), &(yyloc));
7449 fixpos((yyval.val), (yyvsp[0].val));
7450#endif
7451 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(super,v1);(yyval.val)=v2;}
7452 }
7453#line 7449 "ripper.c"
7454 break;
7455
7456 case 79: /* command: "`yield'" command_args */
7457#line 1709 "ripper.y"
7458 {
7459#if 0
7460 (yyval.val) = new_yield(p, (yyvsp[0].val), &(yyloc));
7461 fixpos((yyval.val), (yyvsp[0].val));
7462#endif
7463 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(yield,v1);(yyval.val)=v2;}
7464 }
7465#line 7461 "ripper.c"
7466 break;
7467
7468 case 80: /* command: k_return call_args */
7469#line 1717 "ripper.y"
7470 {
7471#if 0
7472 (yyval.val) = NEW_RETURN(ret_args(p, (yyvsp[0].val)), &(yyloc));
7473#endif
7474 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(return,v1);(yyval.val)=v2;}
7475 }
7476#line 7472 "ripper.c"
7477 break;
7478
7479 case 81: /* command: "`break'" call_args */
7480#line 1724 "ripper.y"
7481 {
7482#if 0
7483 (yyval.val) = NEW_BREAK(ret_args(p, (yyvsp[0].val)), &(yyloc));
7484#endif
7485 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(break,v1);(yyval.val)=v2;}
7486 }
7487#line 7483 "ripper.c"
7488 break;
7489
7490 case 82: /* command: "`next'" call_args */
7491#line 1731 "ripper.y"
7492 {
7493#if 0
7494 (yyval.val) = NEW_NEXT(ret_args(p, (yyvsp[0].val)), &(yyloc));
7495#endif
7496 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(next,v1);(yyval.val)=v2;}
7497 }
7498#line 7494 "ripper.c"
7499 break;
7500
7501 case 84: /* mlhs: "(" mlhs_inner rparen */
7502#line 1741 "ripper.y"
7503 {
7504#if 0
7505 (yyval.val) = (yyvsp[-1].val);
7506#endif
7507 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(mlhs_paren,v1);(yyval.val)=v2;}
7508 }
7509#line 7505 "ripper.c"
7510 break;
7511
7512 case 86: /* mlhs_inner: "(" mlhs_inner rparen */
7513#line 1751 "ripper.y"
7514 {
7515#if 0
7516 (yyval.val) = NEW_MASGN(NEW_LIST((yyvsp[-1].val), &(yyloc)), 0, &(yyloc));
7517#endif
7518 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(mlhs_paren,v1);(yyval.val)=v2;}
7519 }
7520#line 7516 "ripper.c"
7521 break;
7522
7523 case 87: /* mlhs_basic: mlhs_head */
7524#line 1760 "ripper.y"
7525 {
7526#if 0
7527 (yyval.val) = NEW_MASGN((yyvsp[0].val), 0, &(yyloc));
7528#endif
7529 (yyval.val)=(yyvsp[0].val);
7530 }
7531#line 7527 "ripper.c"
7532 break;
7533
7534 case 88: /* mlhs_basic: mlhs_head mlhs_item */
7535#line 1767 "ripper.y"
7536 {
7537#if 0
7538 (yyval.val) = NEW_MASGN(list_append(p, (yyvsp[-1].val),(yyvsp[0].val)), 0, &(yyloc));
7539#endif
7540 {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(mlhs_add,v1,v2);(yyval.val)=v3;}
7541 }
7542#line 7538 "ripper.c"
7543 break;
7544
7545 case 89: /* mlhs_basic: mlhs_head "*" mlhs_node */
7546#line 1774 "ripper.y"
7547 {
7548#if 0
7549 (yyval.val) = NEW_MASGN((yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
7550#endif
7551 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(mlhs_add_star,v1,v2);(yyval.val)=v3;}
7552 }
7553#line 7549 "ripper.c"
7554 break;
7555
7556 case 90: /* mlhs_basic: mlhs_head "*" mlhs_node ',' mlhs_post */
7557#line 1781 "ripper.y"
7558 {
7559#if 0
7560 (yyval.val) = NEW_MASGN((yyvsp[-4].val), NEW_POSTARG((yyvsp[-2].val),(yyvsp[0].val),&(yyloc)), &(yyloc));
7561#endif
7562 {VALUE v1,v2,v3,v4,v5,v6;v1=(yyvsp[-4].val);v2=(yyvsp[-2].val);v3=dispatch2(mlhs_add_star,v1,v2);v4=v3;v5=(yyvsp[0].val);v6=dispatch2(mlhs_add_post,v4,v5);(yyval.val)=v6;}
7563 }
7564#line 7560 "ripper.c"
7565 break;
7566
7567 case 91: /* mlhs_basic: mlhs_head "*" */
7568#line 1788 "ripper.y"
7569 {
7570#if 0
7571 (yyval.val) = NEW_MASGN((yyvsp[-1].val), NODE_SPECIAL_NO_NAME_REST, &(yyloc));
7572#endif
7573 {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=Qnil;v3=dispatch2(mlhs_add_star,v1,v2);(yyval.val)=v3;}
7574 }
7575#line 7571 "ripper.c"
7576 break;
7577
7578 case 92: /* mlhs_basic: mlhs_head "*" ',' mlhs_post */
7579#line 1795 "ripper.y"
7580 {
7581#if 0
7582 (yyval.val) = NEW_MASGN((yyvsp[-3].val), NEW_POSTARG(NODE_SPECIAL_NO_NAME_REST, (yyvsp[0].val), &(yyloc)), &(yyloc));
7583#endif
7584 {VALUE v1,v2,v3,v4,v5,v6;v1=(yyvsp[-3].val);v2=Qnil;v3=dispatch2(mlhs_add_star,v1,v2);v4=v3;v5=(yyvsp[0].val);v6=dispatch2(mlhs_add_post,v4,v5);(yyval.val)=v6;}
7585 }
7586#line 7582 "ripper.c"
7587 break;
7588
7589 case 93: /* mlhs_basic: "*" mlhs_node */
7590#line 1802 "ripper.y"
7591 {
7592#if 0
7593 (yyval.val) = NEW_MASGN(0, (yyvsp[0].val), &(yyloc));
7594#endif
7595 {VALUE v1,v2,v3,v4;v1=dispatch0(mlhs_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(mlhs_add_star,v2,v3);(yyval.val)=v4;}
7596 }
7597#line 7593 "ripper.c"
7598 break;
7599
7600 case 94: /* mlhs_basic: "*" mlhs_node ',' mlhs_post */
7601#line 1809 "ripper.y"
7602 {
7603#if 0
7604 (yyval.val) = NEW_MASGN(0, NEW_POSTARG((yyvsp[-2].val),(yyvsp[0].val),&(yyloc)), &(yyloc));
7605#endif
7606 {VALUE v1,v2,v3,v4,v5,v6,v7;v1=dispatch0(mlhs_new);v2=v1;v3=(yyvsp[-2].val);v4=dispatch2(mlhs_add_star,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=dispatch2(mlhs_add_post,v5,v6);(yyval.val)=v7;}
7607 }
7608#line 7604 "ripper.c"
7609 break;
7610
7611 case 95: /* mlhs_basic: "*" */
7612#line 1816 "ripper.y"
7613 {
7614#if 0
7615 (yyval.val) = NEW_MASGN(0, NODE_SPECIAL_NO_NAME_REST, &(yyloc));
7616#endif
7617 {VALUE v1,v2,v3,v4;v1=dispatch0(mlhs_new);v2=v1;v3=Qnil;v4=dispatch2(mlhs_add_star,v2,v3);(yyval.val)=v4;}
7618 }
7619#line 7615 "ripper.c"
7620 break;
7621
7622 case 96: /* mlhs_basic: "*" ',' mlhs_post */
7623#line 1823 "ripper.y"
7624 {
7625#if 0
7626 (yyval.val) = NEW_MASGN(0, NEW_POSTARG(NODE_SPECIAL_NO_NAME_REST, (yyvsp[0].val), &(yyloc)), &(yyloc));
7627#endif
7628 {VALUE v1,v2,v3,v4,v5,v6,v7;v1=dispatch0(mlhs_new);v2=v1;v3=Qnil;v4=dispatch2(mlhs_add_star,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=dispatch2(mlhs_add_post,v5,v6);(yyval.val)=v7;}
7629 }
7630#line 7626 "ripper.c"
7631 break;
7632
7633 case 98: /* mlhs_item: "(" mlhs_inner rparen */
7634#line 1833 "ripper.y"
7635 {
7636#if 0
7637 (yyval.val) = (yyvsp[-1].val);
7638#endif
7639 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(mlhs_paren,v1);(yyval.val)=v2;}
7640 }
7641#line 7637 "ripper.c"
7642 break;
7643
7644 case 99: /* mlhs_head: mlhs_item ',' */
7645#line 1842 "ripper.y"
7646 {
7647#if 0
7648 (yyval.val) = NEW_LIST((yyvsp[-1].val), &(yylsp[-1]));
7649#endif
7650 {VALUE v1,v2,v3,v4;v1=dispatch0(mlhs_new);v2=v1;v3=(yyvsp[-1].val);v4=dispatch2(mlhs_add,v2,v3);(yyval.val)=v4;}
7651 }
7652#line 7648 "ripper.c"
7653 break;
7654
7655 case 100: /* mlhs_head: mlhs_head mlhs_item ',' */
7656#line 1849 "ripper.y"
7657 {
7658#if 0
7659 (yyval.val) = list_append(p, (yyvsp[-2].val), (yyvsp[-1].val));
7660#endif
7661 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=dispatch2(mlhs_add,v1,v2);(yyval.val)=v3;}
7662 }
7663#line 7659 "ripper.c"
7664 break;
7665
7666 case 101: /* mlhs_post: mlhs_item */
7667#line 1858 "ripper.y"
7668 {
7669#if 0
7670 (yyval.val) = NEW_LIST((yyvsp[0].val), &(yyloc));
7671#endif
7672 {VALUE v1,v2,v3,v4;v1=dispatch0(mlhs_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(mlhs_add,v2,v3);(yyval.val)=v4;}
7673 }
7674#line 7670 "ripper.c"
7675 break;
7676
7677 case 102: /* mlhs_post: mlhs_post ',' mlhs_item */
7678#line 1865 "ripper.y"
7679 {
7680#if 0
7681 (yyval.val) = list_append(p, (yyvsp[-2].val), (yyvsp[0].val));
7682#endif
7683 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(mlhs_add,v1,v2);(yyval.val)=v3;}
7684 }
7685#line 7681 "ripper.c"
7686 break;
7687
7688 case 103: /* mlhs_node: user_variable */
7689#line 1874 "ripper.y"
7690 {
7691#if 0
7692 (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc));
7693#endif
7694 (yyval.val)=assignable(p, var_field(p, (yyvsp[0].val)));
7695 }
7696#line 7692 "ripper.c"
7697 break;
7698
7699 case 104: /* mlhs_node: keyword_variable */
7700#line 1881 "ripper.y"
7701 {
7702#if 0
7703 (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc));
7704#endif
7705 (yyval.val)=assignable(p, var_field(p, (yyvsp[0].val)));
7706 }
7707#line 7703 "ripper.c"
7708 break;
7709
7710 case 105: /* mlhs_node: primary_value '[' opt_call_args rbracket */
7711#line 1888 "ripper.y"
7712 {
7713#if 0
7714 (yyval.val) = aryset(p, (yyvsp[-3].val), (yyvsp[-1].val), &(yyloc));
7715#endif
7716 {VALUE v1,v2,v3;v1=(yyvsp[-3].val);v2=escape_Qundef((yyvsp[-1].val));v3=dispatch2(aref_field,v1,v2);(yyval.val)=v3;}
7717 }
7718#line 7714 "ripper.c"
7719 break;
7720
7721 case 106: /* mlhs_node: primary_value call_op "local variable or method" */
7722#line 1895 "ripper.y"
7723 {
7724 if ((yyvsp[-1].val) == tANDDOT) {
7725 yyerror1(&(yylsp[-1]), "&. inside multiple assignment destination");
7726 }
7727#if 0
7728 (yyval.val) = attrset(p, (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
7729#endif
7730 {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=(yyvsp[0].val);v4=dispatch3(field,v1,v2,v3);(yyval.val)=v4;}
7731 }
7732#line 7728 "ripper.c"
7733 break;
7734
7735 case 107: /* mlhs_node: primary_value "::" "local variable or method" */
7736#line 1905 "ripper.y"
7737 {
7738#if 0
7739 (yyval.val) = attrset(p, (yyvsp[-2].val), idCOLON2, (yyvsp[0].val), &(yyloc));
7740#endif
7741 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(const_path_field,v1,v2);(yyval.val)=v3;}
7742 }
7743#line 7739 "ripper.c"
7744 break;
7745
7746 case 108: /* mlhs_node: primary_value call_op "constant" */
7747#line 1912 "ripper.y"
7748 {
7749 if ((yyvsp[-1].val) == tANDDOT) {
7750 yyerror1(&(yylsp[-1]), "&. inside multiple assignment destination");
7751 }
7752#if 0
7753 (yyval.val) = attrset(p, (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
7754#endif
7755 {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=(yyvsp[0].val);v4=dispatch3(field,v1,v2,v3);(yyval.val)=v4;}
7756 }
7757#line 7753 "ripper.c"
7758 break;
7759
7760 case 109: /* mlhs_node: primary_value "::" "constant" */
7761#line 1922 "ripper.y"
7762 {
7763#if 0
7764 (yyval.val) = const_decl(p, NEW_COLON2((yyvsp[-2].val), (yyvsp[0].val), &(yyloc)), &(yyloc));
7765#endif
7766 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(const_path_field,v1,v2);(yyval.val)=const_decl(p, v3);}
7767 }
7768#line 7764 "ripper.c"
7769 break;
7770
7771 case 110: /* mlhs_node: ":: at EXPR_BEG" "constant" */
7772#line 1929 "ripper.y"
7773 {
7774#if 0
7775 (yyval.val) = const_decl(p, NEW_COLON3((yyvsp[0].val), &(yyloc)), &(yyloc));
7776#endif
7777 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(top_const_field,v1);(yyval.val)=const_decl(p, v2);}
7778 }
7779#line 7775 "ripper.c"
7780 break;
7781
7782 case 111: /* mlhs_node: backref */
7783#line 1936 "ripper.y"
7784 {
7785#if 0
7786 rb_backref_error(p, (yyvsp[0].val));
7787 (yyval.val) = NEW_BEGIN(0, &(yyloc));
7788#endif
7789 {VALUE v1,v2;v1=var_field(p, (yyvsp[0].val));v2=dispatch1(assign_error,v1);(yyval.val)=v2;}ripper_error(p);
7790 }
7791#line 7787 "ripper.c"
7792 break;
7793
7794 case 112: /* lhs: user_variable */
7795#line 1946 "ripper.y"
7796 {
7797#if 0
7798 (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc));
7799#endif
7800 (yyval.val)=assignable(p, var_field(p, (yyvsp[0].val)));
7801 }
7802#line 7798 "ripper.c"
7803 break;
7804
7805 case 113: /* lhs: keyword_variable */
7806#line 1953 "ripper.y"
7807 {
7808#if 0
7809 (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc));
7810#endif
7811 (yyval.val)=assignable(p, var_field(p, (yyvsp[0].val)));
7812 }
7813#line 7809 "ripper.c"
7814 break;
7815
7816 case 114: /* lhs: primary_value '[' opt_call_args rbracket */
7817#line 1960 "ripper.y"
7818 {
7819#if 0
7820 (yyval.val) = aryset(p, (yyvsp[-3].val), (yyvsp[-1].val), &(yyloc));
7821#endif
7822 {VALUE v1,v2,v3;v1=(yyvsp[-3].val);v2=escape_Qundef((yyvsp[-1].val));v3=dispatch2(aref_field,v1,v2);(yyval.val)=v3;}
7823 }
7824#line 7820 "ripper.c"
7825 break;
7826
7827 case 115: /* lhs: primary_value call_op "local variable or method" */
7828#line 1967 "ripper.y"
7829 {
7830#if 0
7831 (yyval.val) = attrset(p, (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
7832#endif
7833 {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=(yyvsp[0].val);v4=dispatch3(field,v1,v2,v3);(yyval.val)=v4;}
7834 }
7835#line 7831 "ripper.c"
7836 break;
7837
7838 case 116: /* lhs: primary_value "::" "local variable or method" */
7839#line 1974 "ripper.y"
7840 {
7841#if 0
7842 (yyval.val) = attrset(p, (yyvsp[-2].val), idCOLON2, (yyvsp[0].val), &(yyloc));
7843#endif
7844 {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=ID2VAL(idCOLON2);v3=(yyvsp[0].val);v4=dispatch3(field,v1,v2,v3);(yyval.val)=v4;}
7845 }
7846#line 7842 "ripper.c"
7847 break;
7848
7849 case 117: /* lhs: primary_value call_op "constant" */
7850#line 1981 "ripper.y"
7851 {
7852#if 0
7853 (yyval.val) = attrset(p, (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
7854#endif
7855 {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=(yyvsp[0].val);v4=dispatch3(field,v1,v2,v3);(yyval.val)=v4;}
7856 }
7857#line 7853 "ripper.c"
7858 break;
7859
7860 case 118: /* lhs: primary_value "::" "constant" */
7861#line 1988 "ripper.y"
7862 {
7863#if 0
7864 (yyval.val) = const_decl(p, NEW_COLON2((yyvsp[-2].val), (yyvsp[0].val), &(yyloc)), &(yyloc));
7865#endif
7866 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(const_path_field,v1,v2);(yyval.val)=const_decl(p, v3);}
7867 }
7868#line 7864 "ripper.c"
7869 break;
7870
7871 case 119: /* lhs: ":: at EXPR_BEG" "constant" */
7872#line 1995 "ripper.y"
7873 {
7874#if 0
7875 (yyval.val) = const_decl(p, NEW_COLON3((yyvsp[0].val), &(yyloc)), &(yyloc));
7876#endif
7877 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(top_const_field,v1);(yyval.val)=const_decl(p, v2);}
7878 }
7879#line 7875 "ripper.c"
7880 break;
7881
7882 case 120: /* lhs: backref */
7883#line 2002 "ripper.y"
7884 {
7885#if 0
7886 rb_backref_error(p, (yyvsp[0].val));
7887 (yyval.val) = NEW_BEGIN(0, &(yyloc));
7888#endif
7889 {VALUE v1,v2;v1=var_field(p, (yyvsp[0].val));v2=dispatch1(assign_error,v1);(yyval.val)=v2;}ripper_error(p);
7890 }
7891#line 7887 "ripper.c"
7892 break;
7893
7894 case 121: /* cname: "local variable or method" */
7895#line 2012 "ripper.y"
7896 {
7897#if 0
7898 yyerror1(&(yylsp[0]), "class/module name must be CONSTANT");
7899#endif
7900 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(class_name_error,v1);(yyval.val)=v2;}ripper_error(p);
7901 }
7902#line 7898 "ripper.c"
7903 break;
7904
7905 case 123: /* cpath: ":: at EXPR_BEG" cname */
7906#line 2022 "ripper.y"
7907 {
7908#if 0
7909 (yyval.val) = NEW_COLON3((yyvsp[0].val), &(yyloc));
7910#endif
7911 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(top_const_ref,v1);(yyval.val)=v2;}
7912 }
7913#line 7909 "ripper.c"
7914 break;
7915
7916 case 124: /* cpath: cname */
7917#line 2029 "ripper.y"
7918 {
7919#if 0
7920 (yyval.val) = NEW_COLON2(0, (yyval.val), &(yyloc));
7921#endif
7922 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(const_ref,v1);(yyval.val)=v2;}
7923 }
7924#line 7920 "ripper.c"
7925 break;
7926
7927 case 125: /* cpath: primary_value "::" cname */
7928#line 2036 "ripper.y"
7929 {
7930#if 0
7931 (yyval.val) = NEW_COLON2((yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
7932#endif
7933 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(const_path_ref,v1,v2);(yyval.val)=v3;}
7934 }
7935#line 7931 "ripper.c"
7936 break;
7937
7938 case 129: /* fname: op */
7939#line 2048 "ripper.y"
7940 {
7941 SET_LEX_STATE(EXPR_ENDFN);
7942 (yyval.val) = (yyvsp[0].val);
7943 }
7944#line 7940 "ripper.c"
7945 break;
7946
7947 case 131: /* fitem: fname */
7948#line 2056 "ripper.y"
7949 {
7950#if 0
7951 (yyval.val) = NEW_LIT(ID2SYM((yyvsp[0].val)), &(yyloc));
7952#endif
7953 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(symbol_literal,v1);(yyval.val)=v2;}
7954 }
7955#line 7951 "ripper.c"
7956 break;
7957
7958 case 133: /* undef_list: fitem */
7959#line 2066 "ripper.y"
7960 {
7961#if 0
7962 (yyval.val) = NEW_UNDEF((yyvsp[0].val), &(yyloc));
7963#endif
7964 (yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val)));
7965 }
7966#line 7962 "ripper.c"
7967 break;
7968
7969 case 134: /* $@10: %empty */
7970#line 2072 "ripper.y"
7971 {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);}
7972#line 7968 "ripper.c"
7973 break;
7974
7975 case 135: /* undef_list: undef_list ',' $@10 fitem */
7976#line 2073 "ripper.y"
7977 {
7978#if 0
7979 NODE *undef = NEW_UNDEF((yyvsp[0].val), &(yylsp[0]));
7980 (yyval.val) = block_append(p, (yyvsp[-3].val), undef);
7981#endif
7982 (yyval.val)=rb_ary_push((yyvsp[-3].val), get_value((yyvsp[0].val)));
7983 }
7984#line 7980 "ripper.c"
7985 break;
7986
7987 case 136: /* op: '|' */
7988#line 2082 "ripper.y"
7989 { ifndef_ripper((yyval.val) = '|'); }
7990#line 7986 "ripper.c"
7991 break;
7992
7993 case 137: /* op: '^' */
7994#line 2083 "ripper.y"
7995 { ifndef_ripper((yyval.val) = '^'); }
7996#line 7992 "ripper.c"
7997 break;
7998
7999 case 138: /* op: '&' */
8000#line 2084 "ripper.y"
8001 { ifndef_ripper((yyval.val) = '&'); }
8002#line 7998 "ripper.c"
8003 break;
8004
8005 case 139: /* op: "<=>" */
8006#line 2085 "ripper.y"
8007 { ifndef_ripper((yyval.val) = tCMP); }
8008#line 8004 "ripper.c"
8009 break;
8010
8011 case 140: /* op: "==" */
8012#line 2086 "ripper.y"
8013 { ifndef_ripper((yyval.val) = tEQ); }
8014#line 8010 "ripper.c"
8015 break;
8016
8017 case 141: /* op: "===" */
8018#line 2087 "ripper.y"
8019 { ifndef_ripper((yyval.val) = tEQQ); }
8020#line 8016 "ripper.c"
8021 break;
8022
8023 case 142: /* op: "=~" */
8024#line 2088 "ripper.y"
8025 { ifndef_ripper((yyval.val) = tMATCH); }
8026#line 8022 "ripper.c"
8027 break;
8028
8029 case 143: /* op: "!~" */
8030#line 2089 "ripper.y"
8031 { ifndef_ripper((yyval.val) = tNMATCH); }
8032#line 8028 "ripper.c"
8033 break;
8034
8035 case 144: /* op: '>' */
8036#line 2090 "ripper.y"
8037 { ifndef_ripper((yyval.val) = '>'); }
8038#line 8034 "ripper.c"
8039 break;
8040
8041 case 145: /* op: ">=" */
8042#line 2091 "ripper.y"
8043 { ifndef_ripper((yyval.val) = tGEQ); }
8044#line 8040 "ripper.c"
8045 break;
8046
8047 case 146: /* op: '<' */
8048#line 2092 "ripper.y"
8049 { ifndef_ripper((yyval.val) = '<'); }
8050#line 8046 "ripper.c"
8051 break;
8052
8053 case 147: /* op: "<=" */
8054#line 2093 "ripper.y"
8055 { ifndef_ripper((yyval.val) = tLEQ); }
8056#line 8052 "ripper.c"
8057 break;
8058
8059 case 148: /* op: "!=" */
8060#line 2094 "ripper.y"
8061 { ifndef_ripper((yyval.val) = tNEQ); }
8062#line 8058 "ripper.c"
8063 break;
8064
8065 case 149: /* op: "<<" */
8066#line 2095 "ripper.y"
8067 { ifndef_ripper((yyval.val) = tLSHFT); }
8068#line 8064 "ripper.c"
8069 break;
8070
8071 case 150: /* op: ">>" */
8072#line 2096 "ripper.y"
8073 { ifndef_ripper((yyval.val) = tRSHFT); }
8074#line 8070 "ripper.c"
8075 break;
8076
8077 case 151: /* op: '+' */
8078#line 2097 "ripper.y"
8079 { ifndef_ripper((yyval.val) = '+'); }
8080#line 8076 "ripper.c"
8081 break;
8082
8083 case 152: /* op: '-' */
8084#line 2098 "ripper.y"
8085 { ifndef_ripper((yyval.val) = '-'); }
8086#line 8082 "ripper.c"
8087 break;
8088
8089 case 153: /* op: '*' */
8090#line 2099 "ripper.y"
8091 { ifndef_ripper((yyval.val) = '*'); }
8092#line 8088 "ripper.c"
8093 break;
8094
8095 case 154: /* op: "*" */
8096#line 2100 "ripper.y"
8097 { ifndef_ripper((yyval.val) = '*'); }
8098#line 8094 "ripper.c"
8099 break;
8100
8101 case 155: /* op: '/' */
8102#line 2101 "ripper.y"
8103 { ifndef_ripper((yyval.val) = '/'); }
8104#line 8100 "ripper.c"
8105 break;
8106
8107 case 156: /* op: '%' */
8108#line 2102 "ripper.y"
8109 { ifndef_ripper((yyval.val) = '%'); }
8110#line 8106 "ripper.c"
8111 break;
8112
8113 case 157: /* op: "**" */
8114#line 2103 "ripper.y"
8115 { ifndef_ripper((yyval.val) = tPOW); }
8116#line 8112 "ripper.c"
8117 break;
8118
8119 case 158: /* op: "**arg" */
8120#line 2104 "ripper.y"
8121 { ifndef_ripper((yyval.val) = tDSTAR); }
8122#line 8118 "ripper.c"
8123 break;
8124
8125 case 159: /* op: '!' */
8126#line 2105 "ripper.y"
8127 { ifndef_ripper((yyval.val) = '!'); }
8128#line 8124 "ripper.c"
8129 break;
8130
8131 case 160: /* op: '~' */
8132#line 2106 "ripper.y"
8133 { ifndef_ripper((yyval.val) = '~'); }
8134#line 8130 "ripper.c"
8135 break;
8136
8137 case 161: /* op: "unary+" */
8138#line 2107 "ripper.y"
8139 { ifndef_ripper((yyval.val) = tUPLUS); }
8140#line 8136 "ripper.c"
8141 break;
8142
8143 case 162: /* op: "unary-" */
8144#line 2108 "ripper.y"
8145 { ifndef_ripper((yyval.val) = tUMINUS); }
8146#line 8142 "ripper.c"
8147 break;
8148
8149 case 163: /* op: "[]" */
8150#line 2109 "ripper.y"
8151 { ifndef_ripper((yyval.val) = tAREF); }
8152#line 8148 "ripper.c"
8153 break;
8154
8155 case 164: /* op: "[]=" */
8156#line 2110 "ripper.y"
8157 { ifndef_ripper((yyval.val) = tASET); }
8158#line 8154 "ripper.c"
8159 break;
8160
8161 case 165: /* op: '`' */
8162#line 2111 "ripper.y"
8163 { ifndef_ripper((yyval.val) = '`'); }
8164#line 8160 "ripper.c"
8165 break;
8166
8167 case 207: /* arg: lhs '=' arg_rhs */
8168#line 2129 "ripper.y"
8169 {
8170#if 0
8171 (yyval.val) = node_assign(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
8172#endif
8173 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(assign,v1,v2);(yyval.val)=v3;}
8174 }
8175#line 8171 "ripper.c"
8176 break;
8177
8178 case 208: /* arg: var_lhs "operator-assignment" arg_rhs */
8179#line 2136 "ripper.y"
8180 {
8181#if 0
8182 (yyval.val) = new_op_assign(p, (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
8183#endif
8184 {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=(yyvsp[0].val);v4=dispatch3(opassign,v1,v2,v3);(yyval.val)=v4;}
8185 }
8186#line 8182 "ripper.c"
8187 break;
8188
8189 case 209: /* arg: primary_value '[' opt_call_args rbracket "operator-assignment" arg_rhs */
8190#line 2143 "ripper.y"
8191 {
8192#if 0
8193 value_expr((yyvsp[0].val));
8194 (yyval.val) = new_ary_op_assign(p, (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-3]), &(yyloc));
8195#endif
8196 {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-5].val);v2=escape_Qundef((yyvsp[-3].val));v3=dispatch2(aref_field,v1,v2);v4=v3;v5=(yyvsp[-1].val);v6=(yyvsp[0].val);v7=dispatch3(opassign,v4,v5,v6);(yyval.val)=v7;}
8197 }
8198#line 8194 "ripper.c"
8199 break;
8200
8201 case 210: /* arg: primary_value call_op "local variable or method" "operator-assignment" arg_rhs */
8202#line 2151 "ripper.y"
8203 {
8204#if 0
8205 value_expr((yyvsp[0].val));
8206 (yyval.val) = new_attr_op_assign(p, (yyvsp[-4].val), (yyvsp[-3].val), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
8207#endif
8208 {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=(yyvsp[-3].val);v3=(yyvsp[-2].val);v4=dispatch3(field,v1,v2,v3);v5=v4;v6=(yyvsp[-1].val);v7=(yyvsp[0].val);v8=dispatch3(opassign,v5,v6,v7);(yyval.val)=v8;}
8209 }
8210#line 8206 "ripper.c"
8211 break;
8212
8213 case 211: /* arg: primary_value call_op "constant" "operator-assignment" arg_rhs */
8214#line 2159 "ripper.y"
8215 {
8216#if 0
8217 value_expr((yyvsp[0].val));
8218 (yyval.val) = new_attr_op_assign(p, (yyvsp[-4].val), (yyvsp[-3].val), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
8219#endif
8220 {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=(yyvsp[-3].val);v3=(yyvsp[-2].val);v4=dispatch3(field,v1,v2,v3);v5=v4;v6=(yyvsp[-1].val);v7=(yyvsp[0].val);v8=dispatch3(opassign,v5,v6,v7);(yyval.val)=v8;}
8221 }
8222#line 8218 "ripper.c"
8223 break;
8224
8225 case 212: /* arg: primary_value "::" "local variable or method" "operator-assignment" arg_rhs */
8226#line 2167 "ripper.y"
8227 {
8228#if 0
8229 value_expr((yyvsp[0].val));
8230 (yyval.val) = new_attr_op_assign(p, (yyvsp[-4].val), ID2VAL(idCOLON2), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
8231#endif
8232 {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=ID2VAL(idCOLON2);v3=(yyvsp[-2].val);v4=dispatch3(field,v1,v2,v3);v5=v4;v6=(yyvsp[-1].val);v7=(yyvsp[0].val);v8=dispatch3(opassign,v5,v6,v7);(yyval.val)=v8;}
8233 }
8234#line 8230 "ripper.c"
8235 break;
8236
8237 case 213: /* arg: primary_value "::" "constant" "operator-assignment" arg_rhs */
8238#line 2175 "ripper.y"
8239 {
8240#if 0
8241 YYLTYPE loc = code_loc_gen(&(yylsp[-4]), &(yylsp[-2]));
8242 (yyval.val) = new_const_op_assign(p, NEW_COLON2((yyvsp[-4].val), (yyvsp[-2].val), &loc), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
8243#endif
8244 {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-4].val);v2=(yyvsp[-2].val);v3=dispatch2(const_path_field,v1,v2);v4=v3;v5=(yyvsp[-1].val);v6=(yyvsp[0].val);v7=dispatch3(opassign,v4,v5,v6);(yyval.val)=v7;}
8245 }
8246#line 8242 "ripper.c"
8247 break;
8248
8249 case 214: /* arg: ":: at EXPR_BEG" "constant" "operator-assignment" arg_rhs */
8250#line 2183 "ripper.y"
8251 {
8252#if 0
8253 (yyval.val) = new_const_op_assign(p, NEW_COLON3((yyvsp[-2].val), &(yyloc)), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
8254#endif
8255 {VALUE v1,v2,v3,v4,v5,v6;v1=(yyvsp[-2].val);v2=dispatch1(top_const_field,v1);v3=v2;v4=(yyvsp[-1].val);v5=(yyvsp[0].val);v6=dispatch3(opassign,v3,v4,v5);(yyval.val)=v6;}
8256 }
8257#line 8253 "ripper.c"
8258 break;
8259
8260 case 215: /* arg: backref "operator-assignment" arg_rhs */
8261#line 2190 "ripper.y"
8262 {
8263#if 0
8264 rb_backref_error(p, (yyvsp[-2].val));
8265 (yyval.val) = NEW_BEGIN(0, &(yyloc));
8266#endif
8267 {VALUE v1,v2,v3,v4,v5,v6;v1=var_field(p, (yyvsp[-2].val));v2=(yyvsp[-1].val);v3=(yyvsp[0].val);v4=dispatch3(opassign,v1,v2,v3);v5=v4;v6=dispatch1(assign_error,v5);(yyval.val)=v6;}ripper_error(p);
8268 }
8269#line 8265 "ripper.c"
8270 break;
8271
8272 case 216: /* arg: arg ".." arg */
8273#line 2198 "ripper.y"
8274 {
8275#if 0
8276 value_expr((yyvsp[-2].val));
8277 value_expr((yyvsp[0].val));
8278 (yyval.val) = NEW_DOT2((yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
8279#endif
8280 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(dot2,v1,v2);(yyval.val)=v3;}
8281 }
8282#line 8278 "ripper.c"
8283 break;
8284
8285 case 217: /* arg: arg "..." arg */
8286#line 2207 "ripper.y"
8287 {
8288#if 0
8289 value_expr((yyvsp[-2].val));
8290 value_expr((yyvsp[0].val));
8291 (yyval.val) = NEW_DOT3((yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
8292#endif
8293 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(dot3,v1,v2);(yyval.val)=v3;}
8294 }
8295#line 8291 "ripper.c"
8296 break;
8297
8298 case 218: /* arg: arg ".." */
8299#line 2216 "ripper.y"
8300 {
8301#if 0
8302 YYLTYPE loc;
8303 loc.beg_pos = (yylsp[0]).end_pos;
8304 loc.end_pos = (yylsp[0]).end_pos;
8305
8306 value_expr((yyvsp[-1].val));
8307 (yyval.val) = NEW_DOT2((yyvsp[-1].val), new_nil(&loc), &(yyloc));
8308#endif
8309 {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=Qnil;v3=dispatch2(dot2,v1,v2);(yyval.val)=v3;}
8310 }
8311#line 8307 "ripper.c"
8312 break;
8313
8314 case 219: /* arg: arg "..." */
8315#line 2228 "ripper.y"
8316 {
8317#if 0
8318 YYLTYPE loc;
8319 loc.beg_pos = (yylsp[0]).end_pos;
8320 loc.end_pos = (yylsp[0]).end_pos;
8321
8322 value_expr((yyvsp[-1].val));
8323 (yyval.val) = NEW_DOT3((yyvsp[-1].val), new_nil(&loc), &(yyloc));
8324#endif
8325 {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=Qnil;v3=dispatch2(dot3,v1,v2);(yyval.val)=v3;}
8326 }
8327#line 8323 "ripper.c"
8328 break;
8329
8330 case 220: /* arg: "(.." arg */
8331#line 2240 "ripper.y"
8332 {
8333#if 0
8334 YYLTYPE loc;
8335 loc.beg_pos = (yylsp[-1]).beg_pos;
8336 loc.end_pos = (yylsp[-1]).beg_pos;
8337
8338 value_expr((yyvsp[0].val));
8339 (yyval.val) = NEW_DOT2(new_nil(&loc), (yyvsp[0].val), &(yyloc));
8340#endif
8341 {VALUE v1,v2,v3;v1=Qnil;v2=(yyvsp[0].val);v3=dispatch2(dot2,v1,v2);(yyval.val)=v3;}
8342 }
8343#line 8339 "ripper.c"
8344 break;
8345
8346 case 221: /* arg: "(..." arg */
8347#line 2252 "ripper.y"
8348 {
8349#if 0
8350 YYLTYPE loc;
8351 loc.beg_pos = (yylsp[-1]).beg_pos;
8352 loc.end_pos = (yylsp[-1]).beg_pos;
8353
8354 value_expr((yyvsp[0].val));
8355 (yyval.val) = NEW_DOT3(new_nil(&loc), (yyvsp[0].val), &(yyloc));
8356#endif
8357 {VALUE v1,v2,v3;v1=Qnil;v2=(yyvsp[0].val);v3=dispatch2(dot3,v1,v2);(yyval.val)=v3;}
8358 }
8359#line 8355 "ripper.c"
8360 break;
8361
8362 case 222: /* arg: arg '+' arg */
8363#line 2264 "ripper.y"
8364 {
8365 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), '+', (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8366 }
8367#line 8363 "ripper.c"
8368 break;
8369
8370 case 223: /* arg: arg '-' arg */
8371#line 2268 "ripper.y"
8372 {
8373 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), '-', (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8374 }
8375#line 8371 "ripper.c"
8376 break;
8377
8378 case 224: /* arg: arg '*' arg */
8379#line 2272 "ripper.y"
8380 {
8381 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), '*', (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8382 }
8383#line 8379 "ripper.c"
8384 break;
8385
8386 case 225: /* arg: arg '/' arg */
8387#line 2276 "ripper.y"
8388 {
8389 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), '/', (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8390 }
8391#line 8387 "ripper.c"
8392 break;
8393
8394 case 226: /* arg: arg '%' arg */
8395#line 2280 "ripper.y"
8396 {
8397 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), '%', (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8398 }
8399#line 8395 "ripper.c"
8400 break;
8401
8402 case 227: /* arg: arg "**" arg */
8403#line 2284 "ripper.y"
8404 {
8405 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), idPow, (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8406 }
8407#line 8403 "ripper.c"
8408 break;
8409
8410 case 228: /* arg: tUMINUS_NUM simple_numeric "**" arg */
8411#line 2288 "ripper.y"
8412 {
8413 (yyval.val) = call_uni_op(p, call_bin_op(p, (yyvsp[-2].val), idPow, (yyvsp[0].val), &(yylsp[-2]), &(yyloc)), idUMinus, &(yylsp[-3]), &(yyloc));
8414 }
8415#line 8411 "ripper.c"
8416 break;
8417
8418 case 229: /* arg: "unary+" arg */
8419#line 2292 "ripper.y"
8420 {
8421 (yyval.val) = call_uni_op(p, (yyvsp[0].val), idUPlus, &(yylsp[-1]), &(yyloc));
8422 }
8423#line 8419 "ripper.c"
8424 break;
8425
8426 case 230: /* arg: "unary-" arg */
8427#line 2296 "ripper.y"
8428 {
8429 (yyval.val) = call_uni_op(p, (yyvsp[0].val), idUMinus, &(yylsp[-1]), &(yyloc));
8430 }
8431#line 8427 "ripper.c"
8432 break;
8433
8434 case 231: /* arg: arg '|' arg */
8435#line 2300 "ripper.y"
8436 {
8437 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), '|', (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8438 }
8439#line 8435 "ripper.c"
8440 break;
8441
8442 case 232: /* arg: arg '^' arg */
8443#line 2304 "ripper.y"
8444 {
8445 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), '^', (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8446 }
8447#line 8443 "ripper.c"
8448 break;
8449
8450 case 233: /* arg: arg '&' arg */
8451#line 2308 "ripper.y"
8452 {
8453 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), '&', (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8454 }
8455#line 8451 "ripper.c"
8456 break;
8457
8458 case 234: /* arg: arg "<=>" arg */
8459#line 2312 "ripper.y"
8460 {
8461 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), idCmp, (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8462 }
8463#line 8459 "ripper.c"
8464 break;
8465
8466 case 236: /* arg: arg "==" arg */
8467#line 2317 "ripper.y"
8468 {
8469 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), idEq, (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8470 }
8471#line 8467 "ripper.c"
8472 break;
8473
8474 case 237: /* arg: arg "===" arg */
8475#line 2321 "ripper.y"
8476 {
8477 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), idEqq, (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8478 }
8479#line 8475 "ripper.c"
8480 break;
8481
8482 case 238: /* arg: arg "!=" arg */
8483#line 2325 "ripper.y"
8484 {
8485 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), idNeq, (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8486 }
8487#line 8483 "ripper.c"
8488 break;
8489
8490 case 239: /* arg: arg "=~" arg */
8491#line 2329 "ripper.y"
8492 {
8493 (yyval.val) = match_op(p, (yyvsp[-2].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8494 }
8495#line 8491 "ripper.c"
8496 break;
8497
8498 case 240: /* arg: arg "!~" arg */
8499#line 2333 "ripper.y"
8500 {
8501 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), idNeqTilde, (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8502 }
8503#line 8499 "ripper.c"
8504 break;
8505
8506 case 241: /* arg: '!' arg */
8507#line 2337 "ripper.y"
8508 {
8509 (yyval.val) = call_uni_op(p, method_cond(p, (yyvsp[0].val), &(yylsp[0])), '!', &(yylsp[-1]), &(yyloc));
8510 }
8511#line 8507 "ripper.c"
8512 break;
8513
8514 case 242: /* arg: '~' arg */
8515#line 2341 "ripper.y"
8516 {
8517 (yyval.val) = call_uni_op(p, (yyvsp[0].val), '~', &(yylsp[-1]), &(yyloc));
8518 }
8519#line 8515 "ripper.c"
8520 break;
8521
8522 case 243: /* arg: arg "<<" arg */
8523#line 2345 "ripper.y"
8524 {
8525 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), idLTLT, (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8526 }
8527#line 8523 "ripper.c"
8528 break;
8529
8530 case 244: /* arg: arg ">>" arg */
8531#line 2349 "ripper.y"
8532 {
8533 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), idGTGT, (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8534 }
8535#line 8531 "ripper.c"
8536 break;
8537
8538 case 245: /* arg: arg "&&" arg */
8539#line 2353 "ripper.y"
8540 {
8541 (yyval.val) = logop(p, idANDOP, (yyvsp[-2].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8542 }
8543#line 8539 "ripper.c"
8544 break;
8545
8546 case 246: /* arg: arg "||" arg */
8547#line 2357 "ripper.y"
8548 {
8549 (yyval.val) = logop(p, idOROP, (yyvsp[-2].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8550 }
8551#line 8547 "ripper.c"
8552 break;
8553
8554 case 247: /* $@11: %empty */
8555#line 2360 "ripper.y"
8556 {p->in_defined = 1;}
8557#line 8553 "ripper.c"
8558 break;
8559
8560 case 248: /* arg: "`defined?'" opt_nl $@11 arg */
8561#line 2361 "ripper.y"
8562 {
8563 p->in_defined = 0;
8564 (yyval.val) = new_defined(p, (yyvsp[0].val), &(yyloc));
8565 }
8566#line 8562 "ripper.c"
8567 break;
8568
8569 case 249: /* arg: arg '?' arg opt_nl ':' arg */
8570#line 2366 "ripper.y"
8571 {
8572#if 0
8573 value_expr((yyvsp[-5].val));
8574 (yyval.val) = new_if(p, (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[0].val), &(yyloc));
8575 fixpos((yyval.val), (yyvsp[-5].val));
8576#endif
8577 {VALUE v1,v2,v3,v4;v1=(yyvsp[-5].val);v2=(yyvsp[-3].val);v3=(yyvsp[0].val);v4=dispatch3(ifop,v1,v2,v3);(yyval.val)=v4;}
8578 }
8579#line 8575 "ripper.c"
8580 break;
8581
8582 case 250: /* arg: primary */
8583#line 2375 "ripper.y"
8584 {
8585 (yyval.val) = (yyvsp[0].val);
8586 }
8587#line 8583 "ripper.c"
8588 break;
8589
8590 case 251: /* relop: '>' */
8591#line 2380 "ripper.y"
8592 {(yyval.val) = '>';}
8593#line 8589 "ripper.c"
8594 break;
8595
8596 case 252: /* relop: '<' */
8597#line 2381 "ripper.y"
8598 {(yyval.val) = '<';}
8599#line 8595 "ripper.c"
8600 break;
8601
8602 case 253: /* relop: ">=" */
8603#line 2382 "ripper.y"
8604 {(yyval.val) = idGE;}
8605#line 8601 "ripper.c"
8606 break;
8607
8608 case 254: /* relop: "<=" */
8609#line 2383 "ripper.y"
8610 {(yyval.val) = idLE;}
8611#line 8607 "ripper.c"
8612 break;
8613
8614 case 255: /* rel_expr: arg relop arg */
8615#line 2387 "ripper.y"
8616 {
8617 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8618 }
8619#line 8615 "ripper.c"
8620 break;
8621
8622 case 256: /* rel_expr: rel_expr relop arg */
8623#line 2391 "ripper.y"
8624 {
8625 rb_warning1("comparison '%s' after comparison", WARN_ID((yyvsp[-1].val)));
8626 (yyval.val) = call_bin_op(p, (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
8627 }
8628#line 8624 "ripper.c"
8629 break;
8630
8631 case 257: /* arg_value: arg */
8632#line 2398 "ripper.y"
8633 {
8634 value_expr((yyvsp[0].val));
8635 (yyval.val) = (yyvsp[0].val);
8636 }
8637#line 8633 "ripper.c"
8638 break;
8639
8640 case 259: /* aref_args: args trailer */
8641#line 2406 "ripper.y"
8642 {
8643 (yyval.val) = (yyvsp[-1].val);
8644 }
8645#line 8641 "ripper.c"
8646 break;
8647
8648 case 260: /* aref_args: args ',' assocs trailer */
8649#line 2410 "ripper.y"
8650 {
8651#if 0
8652 (yyval.val) = (yyvsp[-1].val) ? arg_append(p, (yyvsp[-3].val), new_hash(p, (yyvsp[-1].val), &(yylsp[-1])), &(yyloc)) : (yyvsp[-3].val);
8653#endif
8654 {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-1].val);v2=dispatch1(bare_assoc_hash,v1);v3=(yyvsp[-3].val);v4=v2;v5=dispatch2(args_add,v3,v4);(yyval.val)=v5;}
8655 }
8656#line 8652 "ripper.c"
8657 break;
8658
8659 case 261: /* aref_args: assocs trailer */
8660#line 2417 "ripper.y"
8661 {
8662#if 0
8663 (yyval.val) = (yyvsp[-1].val) ? NEW_LIST(new_hash(p, (yyvsp[-1].val), &(yylsp[-1])), &(yyloc)) : 0;
8664#endif
8665 {VALUE v1,v2,v3,v4,v5,v6;v1=dispatch0(args_new);v2=(yyvsp[-1].val);v3=dispatch1(bare_assoc_hash,v2);v4=v1;v5=v3;v6=dispatch2(args_add,v4,v5);(yyval.val)=v6;}
8666 }
8667#line 8663 "ripper.c"
8668 break;
8669
8670 case 262: /* arg_rhs: arg */
8671#line 2426 "ripper.y"
8672 {
8673 value_expr((yyvsp[0].val));
8674 (yyval.val) = (yyvsp[0].val);
8675 }
8676#line 8672 "ripper.c"
8677 break;
8678
8679 case 263: /* arg_rhs: arg "`rescue' modifier" arg */
8680#line 2431 "ripper.y"
8681 {
8682#if 0
8683 YYLTYPE loc = code_loc_gen(&(yylsp[-1]), &(yylsp[0]));
8684 value_expr((yyvsp[-2].val));
8685 (yyval.val) = NEW_RESCUE((yyvsp[-2].val), NEW_RESBODY(0, remove_begin((yyvsp[0].val)), 0, &loc), 0, &(yyloc));
8686#endif
8687 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(rescue_mod,v1,v2);(yyval.val)=v3;}
8688 }
8689#line 8685 "ripper.c"
8690 break;
8691
8692 case 264: /* paren_args: '(' opt_call_args rparen */
8693#line 2442 "ripper.y"
8694 {
8695#if 0
8696 (yyval.val) = (yyvsp[-1].val);
8697#endif
8698 {VALUE v1,v2;v1=escape_Qundef((yyvsp[-1].val));v2=dispatch1(arg_paren,v1);(yyval.val)=v2;}
8699 }
8700#line 8696 "ripper.c"
8701 break;
8702
8703 case 265: /* paren_args: '(' args ',' args_forward rparen */
8704#line 2449 "ripper.y"
8705 {
8706 if (!local_id(p, idFWD_REST) ||
8707#if idFWD_KWREST
8708 !local_id(p, idFWD_KWREST) ||
8709#endif
8710 !local_id(p, idFWD_BLOCK)) {
8711 compile_error(p, "unexpected ...");
8712 (yyval.val) = Qnone;
8713 }
8714 else {
8715#if 0
8716 NODE *splat = NEW_SPLAT(NEW_LVAR(idFWD_REST, &(yylsp[-1])), &(yylsp[-1]));
8717#if idFWD_KWREST
8718 NODE *kwrest = list_append(p, NEW_LIST(0, &(yylsp[-1])), NEW_LVAR(idFWD_KWREST, &(yylsp[-1])));
8719#endif
8720 NODE *block = NEW_BLOCK_PASS(NEW_LVAR(idFWD_BLOCK, &(yylsp[-1])), &(yylsp[-1]));
8721 (yyval.val) = rest_arg_append(p, (yyvsp[-3].val), splat, &(yyloc));
8722#if idFWD_KWREST
8723 (yyval.val) = arg_append(p, (yyval.val), new_hash(p, kwrest, &(yylsp[-1])), &(yylsp[-1]));
8724#endif
8725 (yyval.val) = arg_blk_pass((yyval.val), block);
8726#endif
8727 {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-3].val);v2=(yyvsp[-1].val);v3=dispatch2(args_add,v1,v2);v4=v3;v5=dispatch1(arg_paren,v4);(yyval.val)=v5;}
8728 }
8729 }
8730#line 8726 "ripper.c"
8731 break;
8732
8733 case 266: /* paren_args: '(' args_forward rparen */
8734#line 2475 "ripper.y"
8735 {
8736 if (!local_id(p, idFWD_REST) ||
8737#if idFWD_KWREST
8738 !local_id(p, idFWD_KWREST) ||
8739#endif
8740 !local_id(p, idFWD_BLOCK)) {
8741 compile_error(p, "unexpected ...");
8742 (yyval.val) = Qnone;
8743 }
8744 else {
8745#if 0
8746 NODE *splat = NEW_SPLAT(NEW_LVAR(idFWD_REST, &(yylsp[-1])), &(yylsp[-1]));
8747#if idFWD_KWREST
8748 NODE *kwrest = list_append(p, NEW_LIST(0, &(yylsp[-1])), NEW_LVAR(idFWD_KWREST, &(yylsp[-1])));
8749#endif
8750 NODE *block = NEW_BLOCK_PASS(NEW_LVAR(idFWD_BLOCK, &(yylsp[-1])), &(yylsp[-1]));
8751#if idFWD_KWREST
8752 (yyval.val) = arg_append(p, splat, new_hash(p, kwrest, &(yylsp[-1])), &(yylsp[-1]));
8753#else
8754 (yyval.val) = splat;
8755#endif
8756 (yyval.val) = arg_blk_pass((yyval.val), block);
8757#endif
8758 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(arg_paren,v1);(yyval.val)=v2;}
8759 }
8760 }
8761#line 8757 "ripper.c"
8762 break;
8763
8764 case 271: /* opt_call_args: args ',' */
8765#line 2510 "ripper.y"
8766 {
8767 (yyval.val) = (yyvsp[-1].val);
8768 }
8769#line 8765 "ripper.c"
8770 break;
8771
8772 case 272: /* opt_call_args: args ',' assocs ',' */
8773#line 2514 "ripper.y"
8774 {
8775#if 0
8776 (yyval.val) = (yyvsp[-1].val) ? arg_append(p, (yyvsp[-3].val), new_hash(p, (yyvsp[-1].val), &(yylsp[-1])), &(yyloc)) : (yyvsp[-3].val);
8777#endif
8778 {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-1].val);v2=dispatch1(bare_assoc_hash,v1);v3=(yyvsp[-3].val);v4=v2;v5=dispatch2(args_add,v3,v4);(yyval.val)=v5;}
8779 }
8780#line 8776 "ripper.c"
8781 break;
8782
8783 case 273: /* opt_call_args: assocs ',' */
8784#line 2521 "ripper.y"
8785 {
8786#if 0
8787 (yyval.val) = (yyvsp[-1].val) ? NEW_LIST(new_hash(p, (yyvsp[-1].val), &(yylsp[-1])), &(yylsp[-1])) : 0;
8788#endif
8789 {VALUE v1,v2,v3,v4,v5,v6;v1=dispatch0(args_new);v2=(yyvsp[-1].val);v3=dispatch1(bare_assoc_hash,v2);v4=v1;v5=v3;v6=dispatch2(args_add,v4,v5);(yyval.val)=v6;}
8790 }
8791#line 8787 "ripper.c"
8792 break;
8793
8794 case 274: /* call_args: command */
8795#line 2530 "ripper.y"
8796 {
8797#if 0
8798 value_expr((yyvsp[0].val));
8799 (yyval.val) = NEW_LIST((yyvsp[0].val), &(yyloc));
8800#endif
8801 {VALUE v1,v2,v3,v4;v1=dispatch0(args_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(args_add,v2,v3);(yyval.val)=v4;}
8802 }
8803#line 8799 "ripper.c"
8804 break;
8805
8806 case 275: /* call_args: args opt_block_arg */
8807#line 2538 "ripper.y"
8808 {
8809#if 0
8810 (yyval.val) = arg_blk_pass((yyvsp[-1].val), (yyvsp[0].val));
8811#endif
8812 {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(args_add_block,v1,v2);(yyval.val)=v3;}
8813 }
8814#line 8810 "ripper.c"
8815 break;
8816
8817 case 276: /* call_args: assocs opt_block_arg */
8818#line 2545 "ripper.y"
8819 {
8820#if 0
8821 (yyval.val) = (yyvsp[-1].val) ? NEW_LIST(new_hash(p, (yyvsp[-1].val), &(yylsp[-1])), &(yylsp[-1])) : 0;
8822 (yyval.val) = arg_blk_pass((yyval.val), (yyvsp[0].val));
8823#endif
8824 {VALUE v1,v2,v3,v4,v5,v6,v7,v8,v9;v1=dispatch0(args_new);v2=(yyvsp[-1].val);v3=dispatch1(bare_assoc_hash,v2);v4=v1;v5=v3;v6=dispatch2(args_add,v4,v5);v7=v6;v8=(yyvsp[0].val);v9=dispatch2(args_add_block,v7,v8);(yyval.val)=v9;}
8825 }
8826#line 8822 "ripper.c"
8827 break;
8828
8829 case 277: /* call_args: args ',' assocs opt_block_arg */
8830#line 2553 "ripper.y"
8831 {
8832#if 0
8833 (yyval.val) = (yyvsp[-1].val) ? arg_append(p, (yyvsp[-3].val), new_hash(p, (yyvsp[-1].val), &(yylsp[-1])), &(yyloc)) : (yyvsp[-3].val);
8834 (yyval.val) = arg_blk_pass((yyval.val), (yyvsp[0].val));
8835#endif
8836 {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-1].val);v2=dispatch1(bare_assoc_hash,v1);v3=(yyvsp[-3].val);v4=v2;v5=dispatch2(args_add,v3,v4);v6=v5;v7=(yyvsp[0].val);v8=dispatch2(args_add_block,v6,v7);(yyval.val)=v8;}
8837 }
8838#line 8834 "ripper.c"
8839 break;
8840
8841 case 278: /* call_args: block_arg */
8842#line 2561 "ripper.y"
8843 {{VALUE v1,v2,v3,v4;v1=dispatch0(args_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(args_add_block,v2,v3);(yyval.val)=v4;}}
8844#line 8840 "ripper.c"
8845 break;
8846
8847 case 279: /* $@12: %empty */
8848#line 2564 "ripper.y"
8849 {
8850 /* If call_args starts with a open paren '(' or '[',
8851 * look-ahead reading of the letters calls CMDARG_PUSH(0),
8852 * but the push must be done after CMDARG_PUSH(1).
8853 * So this code makes them consistent by first cancelling
8854 * the premature CMDARG_PUSH(0), doing CMDARG_PUSH(1),
8855 * and finally redoing CMDARG_PUSH(0).
8856 */
8857 int lookahead = 0;
8858 switch (yychar) {
8859 case '(': case tLPAREN: case tLPAREN_ARG: case '[': case tLBRACK:
8860 lookahead = 1;
8861 }
8862 if (lookahead) CMDARG_POP();
8863 CMDARG_PUSH(1);
8864 if (lookahead) CMDARG_PUSH(0);
8865 }
8866#line 8862 "ripper.c"
8867 break;
8868
8869 case 280: /* command_args: $@12 call_args */
8870#line 2582 "ripper.y"
8871 {
8872 /* call_args can be followed by tLBRACE_ARG (that does CMDARG_PUSH(0) in the lexer)
8873 * but the push must be done after CMDARG_POP() in the parser.
8874 * So this code does CMDARG_POP() to pop 0 pushed by tLBRACE_ARG,
8875 * CMDARG_POP() to pop 1 pushed by command_args,
8876 * and CMDARG_PUSH(0) to restore back the flag set by tLBRACE_ARG.
8877 */
8878 int lookahead = 0;
8879 switch (yychar) {
8880 case tLBRACE_ARG:
8881 lookahead = 1;
8882 }
8883 if (lookahead) CMDARG_POP();
8884 CMDARG_POP();
8885 if (lookahead) CMDARG_PUSH(0);
8886 (yyval.val) = (yyvsp[0].val);
8887 }
8888#line 8884 "ripper.c"
8889 break;
8890
8891 case 281: /* block_arg: "&" arg_value */
8892#line 2602 "ripper.y"
8893 {
8894#if 0
8895 (yyval.val) = NEW_BLOCK_PASS((yyvsp[0].val), &(yyloc));
8896#endif
8897 (yyval.val)=(yyvsp[0].val);
8898 }
8899#line 8895 "ripper.c"
8900 break;
8901
8902 case 282: /* opt_block_arg: ',' block_arg */
8903#line 2611 "ripper.y"
8904 {
8905 (yyval.val) = (yyvsp[0].val);
8906 }
8907#line 8903 "ripper.c"
8908 break;
8909
8910 case 283: /* opt_block_arg: none */
8911#line 2615 "ripper.y"
8912 {
8913 (yyval.val) = 0;
8914 }
8915#line 8911 "ripper.c"
8916 break;
8917
8918 case 284: /* args: arg_value */
8919#line 2621 "ripper.y"
8920 {
8921#if 0
8922 (yyval.val) = NEW_LIST((yyvsp[0].val), &(yyloc));
8923#endif
8924 {VALUE v1,v2,v3,v4;v1=dispatch0(args_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(args_add,v2,v3);(yyval.val)=v4;}
8925 }
8926#line 8922 "ripper.c"
8927 break;
8928
8929 case 285: /* args: "*" arg_value */
8930#line 2628 "ripper.y"
8931 {
8932#if 0
8933 (yyval.val) = NEW_SPLAT((yyvsp[0].val), &(yyloc));
8934#endif
8935 {VALUE v1,v2,v3,v4;v1=dispatch0(args_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(args_add_star,v2,v3);(yyval.val)=v4;}
8936 }
8937#line 8933 "ripper.c"
8938 break;
8939
8940 case 286: /* args: args ',' arg_value */
8941#line 2635 "ripper.y"
8942 {
8943#if 0
8944 (yyval.val) = last_arg_append(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
8945#endif
8946 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(args_add,v1,v2);(yyval.val)=v3;}
8947 }
8948#line 8944 "ripper.c"
8949 break;
8950
8951 case 287: /* args: args ',' "*" arg_value */
8952#line 2642 "ripper.y"
8953 {
8954#if 0
8955 (yyval.val) = rest_arg_append(p, (yyvsp[-3].val), (yyvsp[0].val), &(yyloc));
8956#endif
8957 {VALUE v1,v2,v3;v1=(yyvsp[-3].val);v2=(yyvsp[0].val);v3=dispatch2(args_add_star,v1,v2);(yyval.val)=v3;}
8958 }
8959#line 8955 "ripper.c"
8960 break;
8961
8962 case 290: /* mrhs: args ',' arg_value */
8963#line 2655 "ripper.y"
8964 {
8965#if 0
8966 (yyval.val) = last_arg_append(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
8967#endif
8968 {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-2].val);v2=dispatch1(mrhs_new_from_args,v1);v3=v2;v4=(yyvsp[0].val);v5=dispatch2(mrhs_add,v3,v4);(yyval.val)=v5;}
8969 }
8970#line 8966 "ripper.c"
8971 break;
8972
8973 case 291: /* mrhs: args ',' "*" arg_value */
8974#line 2662 "ripper.y"
8975 {
8976#if 0
8977 (yyval.val) = rest_arg_append(p, (yyvsp[-3].val), (yyvsp[0].val), &(yyloc));
8978#endif
8979 {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-3].val);v2=dispatch1(mrhs_new_from_args,v1);v3=v2;v4=(yyvsp[0].val);v5=dispatch2(mrhs_add_star,v3,v4);(yyval.val)=v5;}
8980 }
8981#line 8977 "ripper.c"
8982 break;
8983
8984 case 292: /* mrhs: "*" arg_value */
8985#line 2669 "ripper.y"
8986 {
8987#if 0
8988 (yyval.val) = NEW_SPLAT((yyvsp[0].val), &(yyloc));
8989#endif
8990 {VALUE v1,v2,v3,v4;v1=dispatch0(mrhs_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(mrhs_add_star,v2,v3);(yyval.val)=v4;}
8991 }
8992#line 8988 "ripper.c"
8993 break;
8994
8995 case 303: /* primary: "method" */
8996#line 2688 "ripper.y"
8997 {
8998#if 0
8999 (yyval.val) = NEW_FCALL((yyvsp[0].val), 0, &(yyloc));
9000#endif
9001 {VALUE v1,v2,v3,v4,v5,v6;v1=(yyvsp[0].val);v2=dispatch1(fcall,v1);v3=dispatch0(args_new);v4=v2;v5=v3;v6=dispatch2(method_add_arg,v4,v5);(yyval.val)=v6;}
9002 }
9003#line 8999 "ripper.c"
9004 break;
9005
9006 case 304: /* $@13: %empty */
9007#line 2695 "ripper.y"
9008 {
9009 CMDARG_PUSH(0);
9010 }
9011#line 9007 "ripper.c"
9012 break;
9013
9014 case 305: /* primary: k_begin $@13 bodystmt k_end */
9015#line 2700 "ripper.y"
9016 {
9017 CMDARG_POP();
9018#if 0
9019 set_line_body((yyvsp[-1].val), (yylsp[-3]).end_pos.lineno);
9020 (yyval.val) = NEW_BEGIN((yyvsp[-1].val), &(yyloc));
9021 nd_set_line((yyval.val), (yylsp[-3]).end_pos.lineno);
9022#endif
9023 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(begin,v1);(yyval.val)=v2;}
9024 }
9025#line 9021 "ripper.c"
9026 break;
9027
9028 case 306: /* $@14: %empty */
9029#line 2709 "ripper.y"
9030 {SET_LEX_STATE(EXPR_ENDARG);}
9031#line 9027 "ripper.c"
9032 break;
9033
9034 case 307: /* primary: "( arg" $@14 rparen */
9035#line 2710 "ripper.y"
9036 {
9037#if 0
9038 (yyval.val) = NEW_BEGIN(0, &(yyloc));
9039#endif
9040 {VALUE v1,v2;v1=0;v2=dispatch1(paren,v1);(yyval.val)=v2;}
9041 }
9042#line 9038 "ripper.c"
9043 break;
9044
9045 case 308: /* $@15: %empty */
9046#line 2716 "ripper.y"
9047 {SET_LEX_STATE(EXPR_ENDARG);}
9048#line 9044 "ripper.c"
9049 break;
9050
9051 case 309: /* primary: "( arg" stmt $@15 rparen */
9052#line 2717 "ripper.y"
9053 {
9054#if 0
9055 if (nd_type((yyvsp[-2].val)) == NODE_SELF) (yyvsp[-2].val)->nd_state = 0;
9056 (yyval.val) = (yyvsp[-2].val);
9057#endif
9058 {VALUE v1,v2;v1=(yyvsp[-2].val);v2=dispatch1(paren,v1);(yyval.val)=v2;}
9059 }
9060#line 9056 "ripper.c"
9061 break;
9062
9063 case 310: /* primary: "(" compstmt ')' */
9064#line 2725 "ripper.y"
9065 {
9066#if 0
9067 if (nd_type((yyvsp[-1].val)) == NODE_SELF) (yyvsp[-1].val)->nd_state = 0;
9068 (yyval.val) = (yyvsp[-1].val);
9069#endif
9070 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(paren,v1);(yyval.val)=v2;}
9071 }
9072#line 9068 "ripper.c"
9073 break;
9074
9075 case 311: /* primary: primary_value "::" "constant" */
9076#line 2733 "ripper.y"
9077 {
9078#if 0
9079 (yyval.val) = NEW_COLON2((yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
9080#endif
9081 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(const_path_ref,v1,v2);(yyval.val)=v3;}
9082 }
9083#line 9079 "ripper.c"
9084 break;
9085
9086 case 312: /* primary: ":: at EXPR_BEG" "constant" */
9087#line 2740 "ripper.y"
9088 {
9089#if 0
9090 (yyval.val) = NEW_COLON3((yyvsp[0].val), &(yyloc));
9091#endif
9092 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(top_const_ref,v1);(yyval.val)=v2;}
9093 }
9094#line 9090 "ripper.c"
9095 break;
9096
9097 case 313: /* primary: "[" aref_args ']' */
9098#line 2747 "ripper.y"
9099 {
9100#if 0
9101 (yyval.val) = make_list((yyvsp[-1].val), &(yyloc));
9102#endif
9103 {VALUE v1,v2;v1=escape_Qundef((yyvsp[-1].val));v2=dispatch1(array,v1);(yyval.val)=v2;}
9104 }
9105#line 9101 "ripper.c"
9106 break;
9107
9108 case 314: /* primary: "{" assoc_list '}' */
9109#line 2754 "ripper.y"
9110 {
9111#if 0
9112 (yyval.val) = new_hash(p, (yyvsp[-1].val), &(yyloc));
9113 (yyval.val)->nd_brace = TRUE;
9114#endif
9115 {VALUE v1,v2;v1=escape_Qundef((yyvsp[-1].val));v2=dispatch1(hash,v1);(yyval.val)=v2;}
9116 }
9117#line 9113 "ripper.c"
9118 break;
9119
9120 case 315: /* primary: k_return */
9121#line 2762 "ripper.y"
9122 {
9123#if 0
9124 (yyval.val) = NEW_RETURN(0, &(yyloc));
9125#endif
9126 {VALUE v1;v1=dispatch0(return0);(yyval.val)=v1;}
9127 }
9128#line 9124 "ripper.c"
9129 break;
9130
9131 case 316: /* primary: "`yield'" '(' call_args rparen */
9132#line 2769 "ripper.y"
9133 {
9134#if 0
9135 (yyval.val) = new_yield(p, (yyvsp[-1].val), &(yyloc));
9136#endif
9137 {VALUE v1,v2,v3,v4;v1=(yyvsp[-1].val);v2=dispatch1(paren,v1);v3=v2;v4=dispatch1(yield,v3);(yyval.val)=v4;}
9138 }
9139#line 9135 "ripper.c"
9140 break;
9141
9142 case 317: /* primary: "`yield'" '(' rparen */
9143#line 2776 "ripper.y"
9144 {
9145#if 0
9146 (yyval.val) = NEW_YIELD(0, &(yyloc));
9147#endif
9148 {VALUE v1,v2,v3,v4,v5;v1=dispatch0(args_new);v2=v1;v3=dispatch1(paren,v2);v4=v3;v5=dispatch1(yield,v4);(yyval.val)=v5;}
9149 }
9150#line 9146 "ripper.c"
9151 break;
9152
9153 case 318: /* primary: "`yield'" */
9154#line 2783 "ripper.y"
9155 {
9156#if 0
9157 (yyval.val) = NEW_YIELD(0, &(yyloc));
9158#endif
9159 {VALUE v1;v1=dispatch0(yield0);(yyval.val)=v1;}
9160 }
9161#line 9157 "ripper.c"
9162 break;
9163
9164 case 319: /* $@16: %empty */
9165#line 2789 "ripper.y"
9166 {p->in_defined = 1;}
9167#line 9163 "ripper.c"
9168 break;
9169
9170 case 320: /* primary: "`defined?'" opt_nl '(' $@16 expr rparen */
9171#line 2790 "ripper.y"
9172 {
9173 p->in_defined = 0;
9174 (yyval.val) = new_defined(p, (yyvsp[-1].val), &(yyloc));
9175 }
9176#line 9172 "ripper.c"
9177 break;
9178
9179 case 321: /* primary: "`not'" '(' expr rparen */
9180#line 2795 "ripper.y"
9181 {
9182 (yyval.val) = call_uni_op(p, method_cond(p, (yyvsp[-1].val), &(yylsp[-1])), METHOD_NOT, &(yylsp[-3]), &(yyloc));
9183 }
9184#line 9180 "ripper.c"
9185 break;
9186
9187 case 322: /* primary: "`not'" '(' rparen */
9188#line 2799 "ripper.y"
9189 {
9190 (yyval.val) = call_uni_op(p, method_cond(p, new_nil(&(yylsp[-1])), &(yylsp[-1])), METHOD_NOT, &(yylsp[-2]), &(yyloc));
9191 }
9192#line 9188 "ripper.c"
9193 break;
9194
9195 case 323: /* primary: fcall brace_block */
9196#line 2803 "ripper.y"
9197 {
9198#if 0
9199 (yyval.val) = method_add_block(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
9200#endif
9201 {VALUE v1,v2,v3,v4,v5,v6,v7,v8,v9;v1=(yyvsp[-1].val);v2=dispatch1(fcall,v1);v3=dispatch0(args_new);v4=v2;v5=v3;v6=dispatch2(method_add_arg,v4,v5);v7=v6;v8=(yyvsp[0].val);v9=dispatch2(method_add_block,v7,v8);(yyval.val)=v9;}
9202 }
9203#line 9199 "ripper.c"
9204 break;
9205
9206 case 325: /* primary: method_call brace_block */
9207#line 2811 "ripper.y"
9208 {
9209#if 0
9210 block_dup_check(p, (yyvsp[-1].val)->nd_args, (yyvsp[0].val));
9211 (yyval.val) = method_add_block(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
9212#endif
9213 {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(method_add_block,v1,v2);(yyval.val)=v3;}
9214 }
9215#line 9211 "ripper.c"
9216 break;
9217
9218 case 326: /* $@17: %empty */
9219#line 2819 "ripper.y"
9220 {
9221 token_info_push(p, "->", &(yylsp[0]));
9222 }
9223#line 9219 "ripper.c"
9224 break;
9225
9226 case 327: /* primary: "->" $@17 lambda */
9227#line 2823 "ripper.y"
9228 {
9229 (yyval.val) = (yyvsp[0].val);
9230#if 0
9231 nd_set_first_loc((yyval.val), (yylsp[-2]).beg_pos);
9232#endif
9233 }
9234#line 9230 "ripper.c"
9235 break;
9236
9237 case 328: /* primary: k_if expr_value then compstmt if_tail k_end */
9238#line 2833 "ripper.y"
9239 {
9240#if 0
9241 (yyval.val) = new_if(p, (yyvsp[-4].val), (yyvsp[-2].val), (yyvsp[-1].val), &(yyloc));
9242 fixpos((yyval.val), (yyvsp[-4].val));
9243#endif
9244 {VALUE v1,v2,v3,v4;v1=(yyvsp[-4].val);v2=(yyvsp[-2].val);v3=escape_Qundef((yyvsp[-1].val));v4=dispatch3(if,v1,v2,v3);(yyval.val)=v4;}
9245 }
9246#line 9242 "ripper.c"
9247 break;
9248
9249 case 329: /* primary: k_unless expr_value then compstmt opt_else k_end */
9250#line 2844 "ripper.y"
9251 {
9252#if 0
9253 (yyval.val) = new_unless(p, (yyvsp[-4].val), (yyvsp[-2].val), (yyvsp[-1].val), &(yyloc));
9254 fixpos((yyval.val), (yyvsp[-4].val));
9255#endif
9256 {VALUE v1,v2,v3,v4;v1=(yyvsp[-4].val);v2=(yyvsp[-2].val);v3=escape_Qundef((yyvsp[-1].val));v4=dispatch3(unless,v1,v2,v3);(yyval.val)=v4;}
9257 }
9258#line 9254 "ripper.c"
9259 break;
9260
9261 case 330: /* primary: k_while expr_value_do compstmt k_end */
9262#line 2854 "ripper.y"
9263 {
9264#if 0
9265 (yyval.val) = NEW_WHILE(cond(p, (yyvsp[-2].val), &(yylsp[-2])), (yyvsp[-1].val), 1, &(yyloc));
9266 fixpos((yyval.val), (yyvsp[-2].val));
9267#endif
9268 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=dispatch2(while,v1,v2);(yyval.val)=v3;}
9269 }
9270#line 9266 "ripper.c"
9271 break;
9272
9273 case 331: /* primary: k_until expr_value_do compstmt k_end */
9274#line 2864 "ripper.y"
9275 {
9276#if 0
9277 (yyval.val) = NEW_UNTIL(cond(p, (yyvsp[-2].val), &(yylsp[-2])), (yyvsp[-1].val), 1, &(yyloc));
9278 fixpos((yyval.val), (yyvsp[-2].val));
9279#endif
9280 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=dispatch2(until,v1,v2);(yyval.val)=v3;}
9281 }
9282#line 9278 "ripper.c"
9283 break;
9284
9285 case 332: /* @18: %empty */
9286#line 2872 "ripper.y"
9287 {
9288 (yyval.val) = p->case_labels;
9289 p->case_labels = Qnil;
9290 }
9291#line 9287 "ripper.c"
9292 break;
9293
9294 case 333: /* primary: k_case expr_value opt_terms @18 case_body k_end */
9295#line 2878 "ripper.y"
9296 {
9298 p->case_labels = (yyvsp[-2].val);
9299#if 0
9300 (yyval.val) = NEW_CASE((yyvsp[-4].val), (yyvsp[-1].val), &(yyloc));
9301 fixpos((yyval.val), (yyvsp[-4].val));
9302#endif
9303 {VALUE v1,v2,v3;v1=(yyvsp[-4].val);v2=(yyvsp[-1].val);v3=dispatch2(case,v1,v2);(yyval.val)=v3;}
9304 }
9305#line 9301 "ripper.c"
9306 break;
9307
9308 case 334: /* @19: %empty */
9309#line 2888 "ripper.y"
9310 {
9311 (yyval.val) = p->case_labels;
9312 p->case_labels = 0;
9313 }
9314#line 9310 "ripper.c"
9315 break;
9316
9317 case 335: /* primary: k_case opt_terms @19 case_body k_end */
9318#line 2894 "ripper.y"
9319 {
9321 p->case_labels = (yyvsp[-2].val);
9322#if 0
9323 (yyval.val) = NEW_CASE2((yyvsp[-1].val), &(yyloc));
9324#endif
9325 {VALUE v1,v2,v3;v1=Qnil;v2=(yyvsp[-1].val);v3=dispatch2(case,v1,v2);(yyval.val)=v3;}
9326 }
9327#line 9323 "ripper.c"
9328 break;
9329
9330 case 336: /* primary: k_case expr_value opt_terms p_case_body k_end */
9331#line 2905 "ripper.y"
9332 {
9333#if 0
9334 (yyval.val) = new_case3(p, (yyvsp[-3].val), (yyvsp[-1].val), &(yyloc));
9335#endif
9336 {VALUE v1,v2,v3;v1=(yyvsp[-3].val);v2=(yyvsp[-1].val);v3=dispatch2(case,v1,v2);(yyval.val)=v3;}
9337 }
9338#line 9334 "ripper.c"
9339 break;
9340
9341 case 337: /* primary: k_for for_var "`in'" expr_value_do compstmt k_end */
9342#line 2914 "ripper.y"
9343 {
9344#if 0
9345 /*
9346 * for a, b, c in e
9347 * #=>
9348 * e.each{|*x| a, b, c = x}
9349 *
9350 * for a in e
9351 * #=>
9352 * e.each{|x| a, = x}
9353 */
9354 ID id = internal_id(p);
9355 NODE *m = NEW_ARGS_AUX(0, 0, &NULL_LOC);
9356 NODE *args, *scope, *internal_var = NEW_DVAR(id, &(yylsp[-4]));
9357 ID *tbl = ALLOC_N(ID, 3);
9358 tbl[0] = 1 /* length of local var table */; tbl[1] = id /* internal id */;
9359 rb_ast_add_local_table(p->ast, tbl);
9360
9361 switch (nd_type((yyvsp[-4].val))) {
9362 case NODE_LASGN:
9363 case NODE_DASGN:
9364 case NODE_DASGN_CURR: /* e.each {|internal_var| a = internal_var; ... } */
9365 (yyvsp[-4].val)->nd_value = internal_var;
9366 id = 0;
9367 m->nd_plen = 1;
9368 m->nd_next = (yyvsp[-4].val);
9369 break;
9370 case NODE_MASGN: /* e.each {|*internal_var| a, b, c = (internal_var.length == 1 && Array === (tmp = internal_var[0]) ? tmp : internal_var); ... } */
9371 m->nd_next = node_assign(p, (yyvsp[-4].val), NEW_FOR_MASGN(internal_var, &(yylsp[-4])), &(yylsp[-4]));
9372 break;
9373 default: /* e.each {|*internal_var| @a, B, c[1], d.attr = internal_val; ... } */
9374 m->nd_next = node_assign(p, NEW_MASGN(NEW_LIST((yyvsp[-4].val), &(yylsp[-4])), 0, &(yylsp[-4])), internal_var, &(yylsp[-4]));
9375 }
9376 /* {|*internal_id| <m> = internal_id; ... } */
9377 args = new_args(p, m, 0, id, 0, new_args_tail(p, 0, 0, 0, &(yylsp[-4])), &(yylsp[-4]));
9378 scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[-1].val), args, &(yyloc));
9379 (yyval.val) = NEW_FOR((yyvsp[-2].val), scope, &(yyloc));
9380 fixpos((yyval.val), (yyvsp[-4].val));
9381#endif
9382 {VALUE v1,v2,v3,v4;v1=(yyvsp[-4].val);v2=(yyvsp[-2].val);v3=(yyvsp[-1].val);v4=dispatch3(for,v1,v2,v3);(yyval.val)=v4;}
9383 }
9384#line 9380 "ripper.c"
9385 break;
9386
9387 case 338: /* $@20: %empty */
9388#line 2956 "ripper.y"
9389 {
9390 if (p->in_def) {
9391 YYLTYPE loc = code_loc_gen(&(yylsp[-2]), &(yylsp[-1]));
9392 yyerror1(&loc, "class definition in method body");
9393 }
9394 (yyvsp[-2].num) = p->in_class;
9395 p->in_class = 1;
9396 local_push(p, 0);
9397 }
9398#line 9394 "ripper.c"
9399 break;
9400
9401 case 339: /* primary: k_class cpath superclass $@20 bodystmt k_end */
9402#line 2967 "ripper.y"
9403 {
9404#if 0
9405 (yyval.val) = NEW_CLASS((yyvsp[-4].val), (yyvsp[-1].val), (yyvsp[-3].val), &(yyloc));
9406 nd_set_line((yyval.val)->nd_body, (yylsp[0]).end_pos.lineno);
9407 set_line_body((yyvsp[-1].val), (yylsp[-3]).end_pos.lineno);
9408 nd_set_line((yyval.val), (yylsp[-3]).end_pos.lineno);
9409#endif
9410 {VALUE v1,v2,v3,v4;v1=(yyvsp[-4].val);v2=(yyvsp[-3].val);v3=(yyvsp[-1].val);v4=dispatch3(class,v1,v2,v3);(yyval.val)=v4;}
9411 local_pop(p);
9412 p->in_class = (yyvsp[-5].num) & 1;
9413 }
9414#line 9410 "ripper.c"
9415 break;
9416
9417 case 340: /* @21: %empty */
9418#line 2979 "ripper.y"
9419 {
9420 (yyval.num) = (p->in_class << 1) | p->in_def;
9421 p->in_def = 0;
9422 p->in_class = 0;
9423 local_push(p, 0);
9424 }
9425#line 9421 "ripper.c"
9426 break;
9427
9428 case 341: /* primary: k_class "<<" expr @21 term bodystmt k_end */
9429#line 2988 "ripper.y"
9430 {
9431#if 0
9432 (yyval.val) = NEW_SCLASS((yyvsp[-4].val), (yyvsp[-1].val), &(yyloc));
9433 nd_set_line((yyval.val)->nd_body, (yylsp[0]).end_pos.lineno);
9434 set_line_body((yyvsp[-1].val), nd_line((yyvsp[-4].val)));
9435 fixpos((yyval.val), (yyvsp[-4].val));
9436#endif
9437 {VALUE v1,v2,v3;v1=(yyvsp[-4].val);v2=(yyvsp[-1].val);v3=dispatch2(sclass,v1,v2);(yyval.val)=v3;}
9438 local_pop(p);
9439 p->in_def = (yyvsp[-3].num) & 1;
9440 p->in_class = ((yyvsp[-3].num) >> 1) & 1;
9441 }
9442#line 9438 "ripper.c"
9443 break;
9444
9445 case 342: /* $@22: %empty */
9446#line 3001 "ripper.y"
9447 {
9448 if (p->in_def) {
9449 YYLTYPE loc = code_loc_gen(&(yylsp[-1]), &(yylsp[0]));
9450 yyerror1(&loc, "module definition in method body");
9451 }
9452 (yyvsp[-1].num) = p->in_class;
9453 p->in_class = 1;
9454 local_push(p, 0);
9455 }
9456#line 9452 "ripper.c"
9457 break;
9458
9459 case 343: /* primary: k_module cpath $@22 bodystmt k_end */
9460#line 3012 "ripper.y"
9461 {
9462#if 0
9463 (yyval.val) = NEW_MODULE((yyvsp[-3].val), (yyvsp[-1].val), &(yyloc));
9464 nd_set_line((yyval.val)->nd_body, (yylsp[0]).end_pos.lineno);
9465 set_line_body((yyvsp[-1].val), (yylsp[-3]).end_pos.lineno);
9466 nd_set_line((yyval.val), (yylsp[-3]).end_pos.lineno);
9467#endif
9468 {VALUE v1,v2,v3;v1=(yyvsp[-3].val);v2=(yyvsp[-1].val);v3=dispatch2(module,v1,v2);(yyval.val)=v3;}
9469 local_pop(p);
9470 p->in_class = (yyvsp[-4].num) & 1;
9471 }
9472#line 9468 "ripper.c"
9473 break;
9474
9475 case 344: /* @23: %empty */
9476#line 3024 "ripper.y"
9477 {
9478 numparam_name(p, get_id((yyvsp[0].val)));
9479 local_push(p, 0);
9480 (yyval.id) = p->cur_arg;
9481 p->cur_arg = 0;
9482 }
9483#line 9479 "ripper.c"
9484 break;
9485
9486 case 345: /* @24: %empty */
9487#line 3030 "ripper.y"
9488 {
9489 (yyval.num) = p->in_def;
9490 p->in_def = 1;
9491 }
9492#line 9488 "ripper.c"
9493 break;
9494
9495 case 346: /* primary: k_def fname @23 @24 f_arglist bodystmt k_end */
9496#line 3037 "ripper.y"
9497 {
9498#if 0
9499 NODE *body = remove_begin((yyvsp[-1].val));
9500 reduce_nodes(p, &body);
9501 (yyval.val) = NEW_DEFN((yyvsp[-5].val), (yyvsp[-2].val), body, &(yyloc));
9502 nd_set_line((yyval.val)->nd_defn, (yylsp[0]).end_pos.lineno);
9503 set_line_body(body, (yylsp[-6]).beg_pos.lineno);
9504#endif
9505 {VALUE v1,v2,v3,v4;v1=(yyvsp[-5].val);v2=(yyvsp[-2].val);v3=(yyvsp[-1].val);v4=dispatch3(def,v1,v2,v3);(yyval.val)=v4;}
9506 local_pop(p);
9507 p->in_def = (yyvsp[-3].num) & 1;
9508 p->cur_arg = (yyvsp[-4].id);
9509 }
9510#line 9506 "ripper.c"
9511 break;
9512
9513 case 347: /* @25: %empty */
9514#line 3050 "ripper.y"
9515 {SET_LEX_STATE(EXPR_FNAME);}
9516#line 9512 "ripper.c"
9517 break;
9518
9519 case 348: /* @26: %empty */
9520#line 3051 "ripper.y"
9521 {
9522 numparam_name(p, get_id((yyvsp[0].val)));
9523 (yyvsp[-1].num) = p->in_def;
9524 p->in_def = 1;
9525 SET_LEX_STATE(EXPR_ENDFN|EXPR_LABEL); /* force for args */
9526 local_push(p, 0);
9527 (yyval.id) = p->cur_arg;
9528 p->cur_arg = 0;
9529 }
9530#line 9526 "ripper.c"
9531 break;
9532
9533 case 349: /* primary: k_def singleton dot_or_colon @25 fname @26 f_arglist bodystmt k_end */
9534#line 3063 "ripper.y"
9535 {
9536#if 0
9537 NODE *body = remove_begin((yyvsp[-1].val));
9538 reduce_nodes(p, &body);
9539 (yyval.val) = NEW_DEFS((yyvsp[-7].val), (yyvsp[-4].val), (yyvsp[-2].val), body, &(yyloc));
9540 nd_set_line((yyval.val)->nd_defn, (yylsp[0]).end_pos.lineno);
9541 set_line_body(body, (yylsp[-8]).beg_pos.lineno);
9542#endif
9543 {VALUE v1,v2,v3,v4,v5,v6;v1=(yyvsp[-7].val);v2=(yyvsp[-6].val);v3=(yyvsp[-4].val);v4=(yyvsp[-2].val);v5=(yyvsp[-1].val);v6=dispatch5(defs,v1,v2,v3,v4,v5);(yyval.val)=v6;}
9544 local_pop(p);
9545 p->in_def = (yyvsp[-5].num) & 1;
9546 p->cur_arg = (yyvsp[-3].id);
9547 }
9548#line 9544 "ripper.c"
9549 break;
9550
9551 case 350: /* primary: "`break'" */
9552#line 3077 "ripper.y"
9553 {
9554#if 0
9555 (yyval.val) = NEW_BREAK(0, &(yyloc));
9556#endif
9557 {VALUE v1,v2,v3;v1=dispatch0(args_new);v2=v1;v3=dispatch1(break,v2);(yyval.val)=v3;}
9558 }
9559#line 9555 "ripper.c"
9560 break;
9561
9562 case 351: /* primary: "`next'" */
9563#line 3084 "ripper.y"
9564 {
9565#if 0
9566 (yyval.val) = NEW_NEXT(0, &(yyloc));
9567#endif
9568 {VALUE v1,v2,v3;v1=dispatch0(args_new);v2=v1;v3=dispatch1(next,v2);(yyval.val)=v3;}
9569 }
9570#line 9566 "ripper.c"
9571 break;
9572
9573 case 352: /* primary: "`redo'" */
9574#line 3091 "ripper.y"
9575 {
9576#if 0
9577 (yyval.val) = NEW_REDO(&(yyloc));
9578#endif
9579 {VALUE v1;v1=dispatch0(redo);(yyval.val)=v1;}
9580 }
9581#line 9577 "ripper.c"
9582 break;
9583
9584 case 353: /* primary: "`retry'" */
9585#line 3098 "ripper.y"
9586 {
9587#if 0
9588 (yyval.val) = NEW_RETRY(&(yyloc));
9589#endif
9590 {VALUE v1;v1=dispatch0(retry);(yyval.val)=v1;}
9591 }
9592#line 9588 "ripper.c"
9593 break;
9594
9595 case 354: /* primary_value: primary */
9596#line 3107 "ripper.y"
9597 {
9598 value_expr((yyvsp[0].val));
9599 (yyval.val) = (yyvsp[0].val);
9600 }
9601#line 9597 "ripper.c"
9602 break;
9603
9604 case 355: /* k_begin: "`begin'" */
9605#line 3114 "ripper.y"
9606 {
9607 token_info_push(p, "begin", &(yyloc));
9608 }
9609#line 9605 "ripper.c"
9610 break;
9611
9612 case 356: /* k_if: "`if'" */
9613#line 3120 "ripper.y"
9614 {
9615 WARN_EOL("if");
9616 token_info_push(p, "if", &(yyloc));
9617 if (p->token_info && p->token_info->nonspc &&
9618 p->token_info->next && !strcmp(p->token_info->next->token, "else")) {
9619 const char *tok = p->lex.ptok;
9620 const char *beg = p->lex.pbeg + p->token_info->next->beg.column;
9621 beg += rb_strlen_lit("else");
9622 while (beg < tok && ISSPACE(*beg)) beg++;
9623 if (beg == tok) {
9624 p->token_info->nonspc = 0;
9625 }
9626 }
9627 }
9628#line 9624 "ripper.c"
9629 break;
9630
9631 case 357: /* k_unless: "`unless'" */
9632#line 3137 "ripper.y"
9633 {
9634 token_info_push(p, "unless", &(yyloc));
9635 }
9636#line 9632 "ripper.c"
9637 break;
9638
9639 case 358: /* k_while: "`while'" */
9640#line 3143 "ripper.y"
9641 {
9642 token_info_push(p, "while", &(yyloc));
9643 }
9644#line 9640 "ripper.c"
9645 break;
9646
9647 case 359: /* k_until: "`until'" */
9648#line 3149 "ripper.y"
9649 {
9650 token_info_push(p, "until", &(yyloc));
9651 }
9652#line 9648 "ripper.c"
9653 break;
9654
9655 case 360: /* k_case: "`case'" */
9656#line 3155 "ripper.y"
9657 {
9658 token_info_push(p, "case", &(yyloc));
9659 }
9660#line 9656 "ripper.c"
9661 break;
9662
9663 case 361: /* k_for: "`for'" */
9664#line 3161 "ripper.y"
9665 {
9666 token_info_push(p, "for", &(yyloc));
9667 }
9668#line 9664 "ripper.c"
9669 break;
9670
9671 case 362: /* k_class: "`class'" */
9672#line 3167 "ripper.y"
9673 {
9674 token_info_push(p, "class", &(yyloc));
9675 }
9676#line 9672 "ripper.c"
9677 break;
9678
9679 case 363: /* k_module: "`module'" */
9680#line 3173 "ripper.y"
9681 {
9682 token_info_push(p, "module", &(yyloc));
9683 }
9684#line 9680 "ripper.c"
9685 break;
9686
9687 case 364: /* k_def: "`def'" */
9688#line 3179 "ripper.y"
9689 {
9690 token_info_push(p, "def", &(yyloc));
9691 }
9692#line 9688 "ripper.c"
9693 break;
9694
9695 case 365: /* k_do: "`do'" */
9696#line 3185 "ripper.y"
9697 {
9698 token_info_push(p, "do", &(yyloc));
9699 }
9700#line 9696 "ripper.c"
9701 break;
9702
9703 case 366: /* k_do_block: "`do' for block" */
9704#line 3191 "ripper.y"
9705 {
9706 token_info_push(p, "do", &(yyloc));
9707 }
9708#line 9704 "ripper.c"
9709 break;
9710
9711 case 367: /* k_rescue: "`rescue'" */
9712#line 3197 "ripper.y"
9713 {
9714 token_info_warn(p, "rescue", p->token_info, 1, &(yyloc));
9715 }
9716#line 9712 "ripper.c"
9717 break;
9718
9719 case 368: /* k_ensure: "`ensure'" */
9720#line 3203 "ripper.y"
9721 {
9722 token_info_warn(p, "ensure", p->token_info, 1, &(yyloc));
9723 }
9724#line 9720 "ripper.c"
9725 break;
9726
9727 case 369: /* k_when: "`when'" */
9728#line 3209 "ripper.y"
9729 {
9730 token_info_warn(p, "when", p->token_info, 0, &(yyloc));
9731 }
9732#line 9728 "ripper.c"
9733 break;
9734
9735 case 370: /* k_else: "`else'" */
9736#line 3215 "ripper.y"
9737 {
9738 token_info *ptinfo_beg = p->token_info;
9739 int same = ptinfo_beg && strcmp(ptinfo_beg->token, "case") != 0;
9740 token_info_warn(p, "else", p->token_info, same, &(yyloc));
9741 if (same) {
9742 token_info e;
9743 e.next = ptinfo_beg->next;
9744 e.token = "else";
9745 token_info_setup(&e, p->lex.pbeg, &(yyloc));
9746 if (!e.nonspc) *ptinfo_beg = e;
9747 }
9748 }
9749#line 9745 "ripper.c"
9750 break;
9751
9752 case 371: /* k_elsif: "`elsif'" */
9753#line 3230 "ripper.y"
9754 {
9755 WARN_EOL("elsif");
9756 token_info_warn(p, "elsif", p->token_info, 1, &(yyloc));
9757 }
9758#line 9754 "ripper.c"
9759 break;
9760
9761 case 372: /* k_end: "`end'" */
9762#line 3237 "ripper.y"
9763 {
9764 token_info_pop(p, "end", &(yyloc));
9765 }
9766#line 9762 "ripper.c"
9767 break;
9768
9769 case 373: /* k_return: "`return'" */
9770#line 3243 "ripper.y"
9771 {
9772 if (p->in_class && !p->in_def && !dyna_in_block(p))
9773 yyerror1(&(yylsp[0]), "Invalid return in class/module body");
9774 }
9775#line 9771 "ripper.c"
9776 break;
9777
9778 case 380: /* if_tail: k_elsif expr_value then compstmt if_tail */
9779#line 3262 "ripper.y"
9780 {
9781#if 0
9782 (yyval.val) = new_if(p, (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
9783 fixpos((yyval.val), (yyvsp[-3].val));
9784#endif
9785 {VALUE v1,v2,v3,v4;v1=(yyvsp[-3].val);v2=(yyvsp[-1].val);v3=escape_Qundef((yyvsp[0].val));v4=dispatch3(elsif,v1,v2,v3);(yyval.val)=v4;}
9786 }
9787#line 9783 "ripper.c"
9788 break;
9789
9790 case 382: /* opt_else: k_else compstmt */
9791#line 3273 "ripper.y"
9792 {
9793#if 0
9794 (yyval.val) = (yyvsp[0].val);
9795#endif
9796 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(else,v1);(yyval.val)=v2;}
9797 }
9798#line 9794 "ripper.c"
9799 break;
9800
9801 case 385: /* f_marg: f_norm_arg */
9802#line 3286 "ripper.y"
9803 {
9804#if 0
9805 (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc));
9806 mark_lvar_used(p, (yyval.val));
9807#endif
9808 (yyval.val)=assignable(p, (yyvsp[0].val));
9809 }
9810#line 9806 "ripper.c"
9811 break;
9812
9813 case 386: /* f_marg: "(" f_margs rparen */
9814#line 3294 "ripper.y"
9815 {
9816#if 0
9817 (yyval.val) = (yyvsp[-1].val);
9818#endif
9819 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(mlhs_paren,v1);(yyval.val)=v2;}
9820 }
9821#line 9817 "ripper.c"
9822 break;
9823
9824 case 387: /* f_marg_list: f_marg */
9825#line 3303 "ripper.y"
9826 {
9827#if 0
9828 (yyval.val) = NEW_LIST((yyvsp[0].val), &(yyloc));
9829#endif
9830 {VALUE v1,v2,v3,v4;v1=dispatch0(mlhs_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(mlhs_add,v2,v3);(yyval.val)=v4;}
9831 }
9832#line 9828 "ripper.c"
9833 break;
9834
9835 case 388: /* f_marg_list: f_marg_list ',' f_marg */
9836#line 3310 "ripper.y"
9837 {
9838#if 0
9839 (yyval.val) = list_append(p, (yyvsp[-2].val), (yyvsp[0].val));
9840#endif
9841 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(mlhs_add,v1,v2);(yyval.val)=v3;}
9842 }
9843#line 9839 "ripper.c"
9844 break;
9845
9846 case 389: /* f_margs: f_marg_list */
9847#line 3319 "ripper.y"
9848 {
9849#if 0
9850 (yyval.val) = NEW_MASGN((yyvsp[0].val), 0, &(yyloc));
9851#endif
9852 (yyval.val)=(yyvsp[0].val);
9853 }
9854#line 9850 "ripper.c"
9855 break;
9856
9857 case 390: /* f_margs: f_marg_list ',' f_rest_marg */
9858#line 3326 "ripper.y"
9859 {
9860#if 0
9861 (yyval.val) = NEW_MASGN((yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
9862#endif
9863 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(mlhs_add_star,v1,v2);(yyval.val)=v3;}
9864 }
9865#line 9861 "ripper.c"
9866 break;
9867
9868 case 391: /* f_margs: f_marg_list ',' f_rest_marg ',' f_marg_list */
9869#line 3333 "ripper.y"
9870 {
9871#if 0
9872 (yyval.val) = NEW_MASGN((yyvsp[-4].val), NEW_POSTARG((yyvsp[-2].val), (yyvsp[0].val), &(yyloc)), &(yyloc));
9873#endif
9874 {VALUE v1,v2,v3,v4,v5,v6;v1=(yyvsp[-4].val);v2=(yyvsp[-2].val);v3=dispatch2(mlhs_add_star,v1,v2);v4=v3;v5=(yyvsp[0].val);v6=dispatch2(mlhs_add_post,v4,v5);(yyval.val)=v6;}
9875 }
9876#line 9872 "ripper.c"
9877 break;
9878
9879 case 392: /* f_margs: f_rest_marg */
9880#line 3340 "ripper.y"
9881 {
9882#if 0
9883 (yyval.val) = NEW_MASGN(0, (yyvsp[0].val), &(yyloc));
9884#endif
9885 {VALUE v1,v2,v3,v4;v1=dispatch0(mlhs_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(mlhs_add_star,v2,v3);(yyval.val)=v4;}
9886 }
9887#line 9883 "ripper.c"
9888 break;
9889
9890 case 393: /* f_margs: f_rest_marg ',' f_marg_list */
9891#line 3347 "ripper.y"
9892 {
9893#if 0
9894 (yyval.val) = NEW_MASGN(0, NEW_POSTARG((yyvsp[-2].val), (yyvsp[0].val), &(yyloc)), &(yyloc));
9895#endif
9896 {VALUE v1,v2,v3,v4,v5,v6,v7;v1=dispatch0(mlhs_new);v2=v1;v3=(yyvsp[-2].val);v4=dispatch2(mlhs_add_star,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=dispatch2(mlhs_add_post,v5,v6);(yyval.val)=v7;}
9897 }
9898#line 9894 "ripper.c"
9899 break;
9900
9901 case 394: /* f_rest_marg: "*" f_norm_arg */
9902#line 3356 "ripper.y"
9903 {
9904#if 0
9905 (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc));
9906 mark_lvar_used(p, (yyval.val));
9907#endif
9908 (yyval.val)=assignable(p, (yyvsp[0].val));
9909 }
9910#line 9906 "ripper.c"
9911 break;
9912
9913 case 395: /* f_rest_marg: "*" */
9914#line 3364 "ripper.y"
9915 {
9916#if 0
9918#endif
9919 (yyval.val)=Qnil;
9920 }
9921#line 9917 "ripper.c"
9922 break;
9923
9924 case 396: /* block_args_tail: f_block_kwarg ',' f_kwrest opt_f_block_arg */
9925#line 3373 "ripper.y"
9926 {
9927 (yyval.val) = new_args_tail(p, (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1]));
9928 }
9929#line 9925 "ripper.c"
9930 break;
9931
9932 case 397: /* block_args_tail: f_block_kwarg opt_f_block_arg */
9933#line 3377 "ripper.y"
9934 {
9935 (yyval.val) = new_args_tail(p, (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yylsp[-1]));
9936 }
9937#line 9933 "ripper.c"
9938 break;
9939
9940 case 398: /* block_args_tail: f_kwrest opt_f_block_arg */
9941#line 3381 "ripper.y"
9942 {
9943 (yyval.val) = new_args_tail(p, Qnone, (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1]));
9944 }
9945#line 9941 "ripper.c"
9946 break;
9947
9948 case 399: /* block_args_tail: f_no_kwarg opt_f_block_arg */
9949#line 3385 "ripper.y"
9950 {
9951 (yyval.val) = new_args_tail(p, Qnone, ID2VAL(idNil), (yyvsp[0].val), &(yylsp[-1]));
9952 }
9953#line 9949 "ripper.c"
9954 break;
9955
9956 case 400: /* block_args_tail: f_block_arg */
9957#line 3389 "ripper.y"
9958 {
9959 (yyval.val) = new_args_tail(p, Qnone, Qnone, (yyvsp[0].val), &(yylsp[0]));
9960 }
9961#line 9957 "ripper.c"
9962 break;
9963
9964 case 401: /* opt_block_args_tail: ',' block_args_tail */
9965#line 3395 "ripper.y"
9966 {
9967 (yyval.val) = (yyvsp[0].val);
9968 }
9969#line 9965 "ripper.c"
9970 break;
9971
9972 case 402: /* opt_block_args_tail: %empty */
9973#line 3399 "ripper.y"
9974 {
9975 (yyval.val) = new_args_tail(p, Qnone, Qnone, Qnone, &(yylsp[0]));
9976 }
9977#line 9973 "ripper.c"
9978 break;
9979
9980 case 403: /* block_param: f_arg ',' f_block_optarg ',' f_rest_arg opt_block_args_tail */
9981#line 3405 "ripper.y"
9982 {
9983 (yyval.val) = new_args(p, (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yyloc));
9984 }
9985#line 9981 "ripper.c"
9986 break;
9987
9988 case 404: /* block_param: f_arg ',' f_block_optarg ',' f_rest_arg ',' f_arg opt_block_args_tail */
9989#line 3409 "ripper.y"
9990 {
9991 (yyval.val) = new_args(p, (yyvsp[-7].val), (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
9992 }
9993#line 9989 "ripper.c"
9994 break;
9995
9996 case 405: /* block_param: f_arg ',' f_block_optarg opt_block_args_tail */
9997#line 3413 "ripper.y"
9998 {
9999 (yyval.val) = new_args(p, (yyvsp[-3].val), (yyvsp[-1].val), Qnone, Qnone, (yyvsp[0].val), &(yyloc));
10000 }
10001#line 9997 "ripper.c"
10002 break;
10003
10004 case 406: /* block_param: f_arg ',' f_block_optarg ',' f_arg opt_block_args_tail */
10005#line 3417 "ripper.y"
10006 {
10007 (yyval.val) = new_args(p, (yyvsp[-5].val), (yyvsp[-3].val), Qnone, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
10008 }
10009#line 10005 "ripper.c"
10010 break;
10011
10012 case 407: /* block_param: f_arg ',' f_rest_arg opt_block_args_tail */
10013#line 3421 "ripper.y"
10014 {
10015 (yyval.val) = new_args(p, (yyvsp[-3].val), Qnone, (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yyloc));
10016 }
10017#line 10013 "ripper.c"
10018 break;
10019
10020 case 408: /* block_param: f_arg ',' */
10021#line 3425 "ripper.y"
10022 {
10023#if 0
10024 /* magic number for rest_id in iseq_set_arguments() */
10025 (yyval.val) = new_args(p, (yyvsp[-1].val), Qnone, NODE_SPECIAL_EXCESSIVE_COMMA, Qnone, new_args_tail(p, Qnone, Qnone, Qnone, &(yylsp[-1])), &(yyloc));
10026#endif
10027 {VALUE v1;v1=dispatch0(excessed_comma);(yyval.val)=new_args(p, (yyvsp[-1].val), Qnone, v1, Qnone, new_args_tail(p, Qnone, Qnone, Qnone, NULL), NULL);}
10028 }
10029#line 10025 "ripper.c"
10030 break;
10031
10032 case 409: /* block_param: f_arg ',' f_rest_arg ',' f_arg opt_block_args_tail */
10033#line 3433 "ripper.y"
10034 {
10035 (yyval.val) = new_args(p, (yyvsp[-5].val), Qnone, (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
10036 }
10037#line 10033 "ripper.c"
10038 break;
10039
10040 case 410: /* block_param: f_arg opt_block_args_tail */
10041#line 3437 "ripper.y"
10042 {
10043 (yyval.val) = new_args(p, (yyvsp[-1].val), Qnone, Qnone, Qnone, (yyvsp[0].val), &(yyloc));
10044 }
10045#line 10041 "ripper.c"
10046 break;
10047
10048 case 411: /* block_param: f_block_optarg ',' f_rest_arg opt_block_args_tail */
10049#line 3441 "ripper.y"
10050 {
10051 (yyval.val) = new_args(p, Qnone, (yyvsp[-3].val), (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yyloc));
10052 }
10053#line 10049 "ripper.c"
10054 break;
10055
10056 case 412: /* block_param: f_block_optarg ',' f_rest_arg ',' f_arg opt_block_args_tail */
10057#line 3445 "ripper.y"
10058 {
10059 (yyval.val) = new_args(p, Qnone, (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
10060 }
10061#line 10057 "ripper.c"
10062 break;
10063
10064 case 413: /* block_param: f_block_optarg opt_block_args_tail */
10065#line 3449 "ripper.y"
10066 {
10067 (yyval.val) = new_args(p, Qnone, (yyvsp[-1].val), Qnone, Qnone, (yyvsp[0].val), &(yyloc));
10068 }
10069#line 10065 "ripper.c"
10070 break;
10071
10072 case 414: /* block_param: f_block_optarg ',' f_arg opt_block_args_tail */
10073#line 3453 "ripper.y"
10074 {
10075 (yyval.val) = new_args(p, Qnone, (yyvsp[-3].val), Qnone, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
10076 }
10077#line 10073 "ripper.c"
10078 break;
10079
10080 case 415: /* block_param: f_rest_arg opt_block_args_tail */
10081#line 3457 "ripper.y"
10082 {
10083 (yyval.val) = new_args(p, Qnone, Qnone, (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yyloc));
10084 }
10085#line 10081 "ripper.c"
10086 break;
10087
10088 case 416: /* block_param: f_rest_arg ',' f_arg opt_block_args_tail */
10089#line 3461 "ripper.y"
10090 {
10091 (yyval.val) = new_args(p, Qnone, Qnone, (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
10092 }
10093#line 10089 "ripper.c"
10094 break;
10095
10096 case 417: /* block_param: block_args_tail */
10097#line 3465 "ripper.y"
10098 {
10099 (yyval.val) = new_args(p, Qnone, Qnone, Qnone, Qnone, (yyvsp[0].val), &(yyloc));
10100 }
10101#line 10097 "ripper.c"
10102 break;
10103
10104 case 419: /* opt_block_param: block_param_def */
10105#line 3472 "ripper.y"
10106 {
10107 p->command_start = TRUE;
10108 }
10109#line 10105 "ripper.c"
10110 break;
10111
10112 case 420: /* block_param_def: '|' opt_bv_decl '|' */
10113#line 3478 "ripper.y"
10114 {
10115 p->cur_arg = 0;
10117#if 0
10118 (yyval.val) = 0;
10119#endif
10120 {VALUE v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11;v1=Qnil;v2=Qnil;v3=Qnil;v4=Qnil;v5=Qnil;v6=Qnil;v7=Qnil;v8=dispatch7(params,v1,v2,v3,v4,v5,v6,v7);v9=v8;v10=escape_Qundef((yyvsp[-1].val));v11=dispatch2(block_var,v9,v10);(yyval.val)=v11;}
10121 }
10122#line 10118 "ripper.c"
10123 break;
10124
10125 case 421: /* block_param_def: '|' block_param opt_bv_decl '|' */
10126#line 3487 "ripper.y"
10127 {
10128 p->cur_arg = 0;
10130#if 0
10131 (yyval.val) = (yyvsp[-2].val);
10132#endif
10133 {VALUE v1,v2,v3;v1=escape_Qundef((yyvsp[-2].val));v2=escape_Qundef((yyvsp[-1].val));v3=dispatch2(block_var,v1,v2);(yyval.val)=v3;}
10134 }
10135#line 10131 "ripper.c"
10136 break;
10137
10138 case 422: /* opt_bv_decl: opt_nl */
10139#line 3499 "ripper.y"
10140 {
10141 (yyval.val) = 0;
10142 }
10143#line 10139 "ripper.c"
10144 break;
10145
10146 case 423: /* opt_bv_decl: opt_nl ';' bv_decls opt_nl */
10147#line 3503 "ripper.y"
10148 {
10149#if 0
10150 (yyval.val) = 0;
10151#endif
10152 (yyval.val)=(yyvsp[-1].val);
10153 }
10154#line 10150 "ripper.c"
10155 break;
10156
10157 case 424: /* bv_decls: bvar */
10158#line 3512 "ripper.y"
10159 {(yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val)));}
10160#line 10156 "ripper.c"
10161 break;
10162
10163 case 425: /* bv_decls: bv_decls ',' bvar */
10164#line 3514 "ripper.y"
10165 {(yyval.val)=rb_ary_push((yyvsp[-2].val), get_value((yyvsp[0].val)));}
10166#line 10162 "ripper.c"
10167 break;
10168
10169 case 426: /* bvar: "local variable or method" */
10170#line 3518 "ripper.y"
10171 {
10172 new_bv(p, get_id((yyvsp[0].val)));
10173 (yyval.val)=get_value((yyvsp[0].val));
10174 }
10175#line 10171 "ripper.c"
10176 break;
10177
10178 case 427: /* bvar: f_bad_arg */
10179#line 3523 "ripper.y"
10180 {
10181 (yyval.val) = 0;
10182 }
10183#line 10179 "ripper.c"
10184 break;
10185
10186 case 428: /* @27: %empty */
10187#line 3528 "ripper.y"
10188 {
10189 (yyval.vars) = dyna_push(p);
10190 }
10191#line 10187 "ripper.c"
10192 break;
10193
10194 case 429: /* @28: %empty */
10195#line 3531 "ripper.y"
10196 {
10197 (yyval.num) = p->lex.lpar_beg;
10198 p->lex.lpar_beg = p->lex.paren_nest;
10199 }
10200#line 10196 "ripper.c"
10201 break;
10202
10203 case 430: /* @29: %empty */
10204#line 3535 "ripper.y"
10205 {
10206 (yyval.num) = p->max_numparam;
10207 p->max_numparam = 0;
10208 }
10209#line 10205 "ripper.c"
10210 break;
10211
10212 case 431: /* @30: %empty */
10213#line 3539 "ripper.y"
10214 {
10215 (yyval.node) = numparam_push(p);
10216 }
10217#line 10213 "ripper.c"
10218 break;
10219
10220 case 432: /* $@31: %empty */
10221#line 3543 "ripper.y"
10222 {
10223 CMDARG_PUSH(0);
10224 }
10225#line 10221 "ripper.c"
10226 break;
10227
10228 case 433: /* lambda: @27 @28 @29 @30 f_larglist $@31 lambda_body */
10229#line 3547 "ripper.y"
10230 {
10231 int max_numparam = p->max_numparam;
10232 p->lex.lpar_beg = (yyvsp[-5].num);
10233 p->max_numparam = (yyvsp[-4].num);
10234 CMDARG_POP();
10235 (yyvsp[-2].val) = args_with_numbered(p, (yyvsp[-2].val), max_numparam);
10236#if 0
10237 {
10238 YYLTYPE loc = code_loc_gen(&(yylsp[-2]), &(yylsp[0]));
10239 (yyval.val) = NEW_LAMBDA((yyvsp[-2].val), (yyvsp[0].val), &loc);
10240 nd_set_line((yyval.val)->nd_body, (yylsp[0]).end_pos.lineno);
10241 nd_set_line((yyval.val), (yylsp[-2]).end_pos.lineno);
10242 }
10243#endif
10244 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(lambda,v1,v2);(yyval.val)=v3;}
10245 numparam_pop(p, (yyvsp[-3].node));
10246 dyna_pop(p, (yyvsp[-6].vars));
10247 }
10248#line 10244 "ripper.c"
10249 break;
10250
10251 case 434: /* f_larglist: '(' f_args opt_bv_decl ')' */
10252#line 3568 "ripper.y"
10253 {
10254#if 0
10255 (yyval.val) = (yyvsp[-2].val);
10257#endif
10258 {VALUE v1,v2;v1=(yyvsp[-2].val);v2=dispatch1(paren,v1);(yyval.val)=v2;}
10259 }
10260#line 10256 "ripper.c"
10261 break;
10262
10263 case 435: /* f_larglist: f_args */
10264#line 3576 "ripper.y"
10265 {
10266#if 0
10267 if (!args_info_empty_p((yyvsp[0].val)->nd_ainfo))
10269#endif
10270 (yyval.val) = (yyvsp[0].val);
10271 }
10272#line 10268 "ripper.c"
10273 break;
10274
10275 case 436: /* lambda_body: tLAMBEG compstmt '}' */
10276#line 3586 "ripper.y"
10277 {
10278 token_info_pop(p, "}", &(yylsp[0]));
10279 (yyval.val) = (yyvsp[-1].val);
10280 }
10281#line 10277 "ripper.c"
10282 break;
10283
10284 case 437: /* lambda_body: "`do' for lambda" bodystmt k_end */
10285#line 3591 "ripper.y"
10286 {
10287 (yyval.val) = (yyvsp[-1].val);
10288 }
10289#line 10285 "ripper.c"
10290 break;
10291
10292 case 438: /* do_block: k_do_block do_body k_end */
10293#line 3597 "ripper.y"
10294 {
10295 (yyval.val) = (yyvsp[-1].val);
10296#if 0
10297 (yyval.val)->nd_body->nd_loc = code_loc_gen(&(yylsp[-2]), &(yylsp[0]));
10298 nd_set_line((yyval.val), (yylsp[-2]).end_pos.lineno);
10299#endif
10300 }
10301#line 10297 "ripper.c"
10302 break;
10303
10304 case 439: /* block_call: command do_block */
10305#line 3607 "ripper.y"
10306 {
10307#if 0
10308 if (nd_type((yyvsp[-1].val)) == NODE_YIELD) {
10309 compile_error(p, "block given to yield");
10310 }
10311 else {
10312 block_dup_check(p, (yyvsp[-1].val)->nd_args, (yyvsp[0].val));
10313 }
10314 (yyval.val) = method_add_block(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
10315 fixpos((yyval.val), (yyvsp[-1].val));
10316#endif
10317 {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(method_add_block,v1,v2);(yyval.val)=v3;}
10318 }
10319#line 10315 "ripper.c"
10320 break;
10321
10322 case 440: /* block_call: block_call call_op2 operation2 opt_paren_args */
10323#line 3621 "ripper.y"
10324 {
10325#if 0
10326 (yyval.val) = new_qcall(p, (yyvsp[-2].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
10327#endif
10328 {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-3].val);v2=(yyvsp[-2].val);v3=(yyvsp[-1].val);v4=dispatch3(call,v1,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=v6==Qundef ? v5 : dispatch2(method_add_arg,v5,v6);(yyval.val)=v7;}
10329 }
10330#line 10326 "ripper.c"
10331 break;
10332
10333 case 441: /* block_call: block_call call_op2 operation2 opt_paren_args brace_block */
10334#line 3628 "ripper.y"
10335 {
10336#if 0
10337 (yyval.val) = new_command_qcall(p, (yyvsp[-3].val), (yyvsp[-4].val), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-2]), &(yyloc));
10338#endif
10339 {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=(yyvsp[-3].val);v3=(yyvsp[-2].val);v4=(yyvsp[-1].val);v5=dispatch4(command_call,v1,v2,v3,v4);v6=v5;v7=(yyvsp[0].val);v8=v7==Qundef ? v6 : dispatch2(method_add_block,v6,v7);(yyval.val)=v8;}
10340 }
10341#line 10337 "ripper.c"
10342 break;
10343
10344 case 442: /* block_call: block_call call_op2 operation2 command_args do_block */
10345#line 3635 "ripper.y"
10346 {
10347#if 0
10348 (yyval.val) = new_command_qcall(p, (yyvsp[-3].val), (yyvsp[-4].val), (yyvsp[-2].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-2]), &(yyloc));
10349#endif
10350 {VALUE v1,v2,v3,v4,v5,v6,v7,v8;v1=(yyvsp[-4].val);v2=(yyvsp[-3].val);v3=(yyvsp[-2].val);v4=(yyvsp[-1].val);v5=dispatch4(command_call,v1,v2,v3,v4);v6=v5;v7=(yyvsp[0].val);v8=dispatch2(method_add_block,v6,v7);(yyval.val)=v8;}
10351 }
10352#line 10348 "ripper.c"
10353 break;
10354
10355 case 443: /* method_call: fcall paren_args */
10356#line 3644 "ripper.y"
10357 {
10358#if 0
10359 (yyval.val) = (yyvsp[-1].val);
10360 (yyval.val)->nd_args = (yyvsp[0].val);
10361 nd_set_last_loc((yyvsp[-1].val), (yylsp[0]).end_pos);
10362#endif
10363 {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-1].val);v2=dispatch1(fcall,v1);v3=v2;v4=(yyvsp[0].val);v5=dispatch2(method_add_arg,v3,v4);(yyval.val)=v5;}
10364 }
10365#line 10361 "ripper.c"
10366 break;
10367
10368 case 444: /* method_call: primary_value call_op operation2 opt_paren_args */
10369#line 3653 "ripper.y"
10370 {
10371#if 0
10372 (yyval.val) = new_qcall(p, (yyvsp[-2].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
10373 nd_set_line((yyval.val), (yylsp[-1]).end_pos.lineno);
10374#endif
10375 {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-3].val);v2=(yyvsp[-2].val);v3=(yyvsp[-1].val);v4=dispatch3(call,v1,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=v6==Qundef ? v5 : dispatch2(method_add_arg,v5,v6);(yyval.val)=v7;}
10376 }
10377#line 10373 "ripper.c"
10378 break;
10379
10380 case 445: /* method_call: primary_value "::" operation2 paren_args */
10381#line 3661 "ripper.y"
10382 {
10383#if 0
10384 (yyval.val) = new_qcall(p, ID2VAL(idCOLON2), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
10385 nd_set_line((yyval.val), (yylsp[-1]).end_pos.lineno);
10386#endif
10387 {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-3].val);v2=ID2VAL(idCOLON2);v3=(yyvsp[-1].val);v4=dispatch3(call,v1,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=dispatch2(method_add_arg,v5,v6);(yyval.val)=v7;}
10388 }
10389#line 10385 "ripper.c"
10390 break;
10391
10392 case 446: /* method_call: primary_value "::" operation3 */
10393#line 3669 "ripper.y"
10394 {
10395#if 0
10396 (yyval.val) = new_qcall(p, ID2VAL(idCOLON2), (yyvsp[-2].val), (yyvsp[0].val), Qnull, &(yylsp[0]), &(yyloc));
10397#endif
10398 {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=ID2VAL(idCOLON2);v3=(yyvsp[0].val);v4=dispatch3(call,v1,v2,v3);(yyval.val)=v4;}
10399 }
10400#line 10396 "ripper.c"
10401 break;
10402
10403 case 447: /* method_call: primary_value call_op paren_args */
10404#line 3676 "ripper.y"
10405 {
10406#if 0
10407 (yyval.val) = new_qcall(p, (yyvsp[-1].val), (yyvsp[-2].val), ID2VAL(idCall), (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
10408 nd_set_line((yyval.val), (yylsp[-1]).end_pos.lineno);
10409#endif
10410 {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=ID2VAL(idCall);v4=dispatch3(call,v1,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=dispatch2(method_add_arg,v5,v6);(yyval.val)=v7;}
10411 }
10412#line 10408 "ripper.c"
10413 break;
10414
10415 case 448: /* method_call: primary_value "::" paren_args */
10416#line 3684 "ripper.y"
10417 {
10418#if 0
10419 (yyval.val) = new_qcall(p, ID2VAL(idCOLON2), (yyvsp[-2].val), ID2VAL(idCall), (yyvsp[0].val), &(yylsp[-1]), &(yyloc));
10420 nd_set_line((yyval.val), (yylsp[-1]).end_pos.lineno);
10421#endif
10422 {VALUE v1,v2,v3,v4,v5,v6,v7;v1=(yyvsp[-2].val);v2=ID2VAL(idCOLON2);v3=ID2VAL(idCall);v4=dispatch3(call,v1,v2,v3);v5=v4;v6=(yyvsp[0].val);v7=dispatch2(method_add_arg,v5,v6);(yyval.val)=v7;}
10423 }
10424#line 10420 "ripper.c"
10425 break;
10426
10427 case 449: /* method_call: "`super'" paren_args */
10428#line 3692 "ripper.y"
10429 {
10430#if 0
10431 (yyval.val) = NEW_SUPER((yyvsp[0].val), &(yyloc));
10432#endif
10433 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(super,v1);(yyval.val)=v2;}
10434 }
10435#line 10431 "ripper.c"
10436 break;
10437
10438 case 450: /* method_call: "`super'" */
10439#line 3699 "ripper.y"
10440 {
10441#if 0
10442 (yyval.val) = NEW_ZSUPER(&(yyloc));
10443#endif
10444 {VALUE v1;v1=dispatch0(zsuper);(yyval.val)=v1;}
10445 }
10446#line 10442 "ripper.c"
10447 break;
10448
10449 case 451: /* method_call: primary_value '[' opt_call_args rbracket */
10450#line 3706 "ripper.y"
10451 {
10452#if 0
10453 if ((yyvsp[-3].val) && nd_type((yyvsp[-3].val)) == NODE_SELF)
10454 (yyval.val) = NEW_FCALL(tAREF, (yyvsp[-1].val), &(yyloc));
10455 else
10456 (yyval.val) = NEW_CALL((yyvsp[-3].val), tAREF, (yyvsp[-1].val), &(yyloc));
10457 fixpos((yyval.val), (yyvsp[-3].val));
10458#endif
10459 {VALUE v1,v2,v3;v1=(yyvsp[-3].val);v2=escape_Qundef((yyvsp[-1].val));v3=dispatch2(aref,v1,v2);(yyval.val)=v3;}
10460 }
10461#line 10457 "ripper.c"
10462 break;
10463
10464 case 452: /* brace_block: '{' brace_body '}' */
10465#line 3719 "ripper.y"
10466 {
10467 (yyval.val) = (yyvsp[-1].val);
10468#if 0
10469 (yyval.val)->nd_body->nd_loc = code_loc_gen(&(yylsp[-2]), &(yylsp[0]));
10470 nd_set_line((yyval.val), (yylsp[-2]).end_pos.lineno);
10471#endif
10472 }
10473#line 10469 "ripper.c"
10474 break;
10475
10476 case 453: /* brace_block: k_do do_body k_end */
10477#line 3727 "ripper.y"
10478 {
10479 (yyval.val) = (yyvsp[-1].val);
10480#if 0
10481 (yyval.val)->nd_body->nd_loc = code_loc_gen(&(yylsp[-2]), &(yylsp[0]));
10482 nd_set_line((yyval.val), (yylsp[-2]).end_pos.lineno);
10483#endif
10484 }
10485#line 10481 "ripper.c"
10486 break;
10487
10488 case 454: /* @32: %empty */
10489#line 3736 "ripper.y"
10490 {(yyval.vars) = dyna_push(p);}
10491#line 10487 "ripper.c"
10492 break;
10493
10494 case 455: /* @33: %empty */
10495#line 3737 "ripper.y"
10496 {
10497 (yyval.num) = p->max_numparam;
10498 p->max_numparam = 0;
10499 }
10500#line 10496 "ripper.c"
10501 break;
10502
10503 case 456: /* @34: %empty */
10504#line 3741 "ripper.y"
10505 {
10506 (yyval.node) = numparam_push(p);
10507 }
10508#line 10504 "ripper.c"
10509 break;
10510
10511 case 457: /* brace_body: @32 @33 @34 opt_block_param compstmt */
10512#line 3745 "ripper.y"
10513 {
10514 int max_numparam = p->max_numparam;
10515 p->max_numparam = (yyvsp[-3].num);
10516 (yyvsp[-1].val) = args_with_numbered(p, (yyvsp[-1].val), max_numparam);
10517#if 0
10518 (yyval.val) = NEW_ITER((yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
10519#endif
10520 {VALUE v1,v2,v3;v1=escape_Qundef((yyvsp[-1].val));v2=(yyvsp[0].val);v3=dispatch2(brace_block,v1,v2);(yyval.val)=v3;}
10521 numparam_pop(p, (yyvsp[-2].node));
10522 dyna_pop(p, (yyvsp[-4].vars));
10523 }
10524#line 10520 "ripper.c"
10525 break;
10526
10527 case 458: /* @35: %empty */
10528#line 3758 "ripper.y"
10529 {(yyval.vars) = dyna_push(p);}
10530#line 10526 "ripper.c"
10531 break;
10532
10533 case 459: /* @36: %empty */
10534#line 3759 "ripper.y"
10535 {
10536 (yyval.num) = p->max_numparam;
10537 p->max_numparam = 0;
10538 }
10539#line 10535 "ripper.c"
10540 break;
10541
10542 case 460: /* @37: %empty */
10543#line 3763 "ripper.y"
10544 {
10545 (yyval.node) = numparam_push(p);
10546 CMDARG_PUSH(0);
10547 }
10548#line 10544 "ripper.c"
10549 break;
10550
10551 case 461: /* do_body: @35 @36 @37 opt_block_param bodystmt */
10552#line 3768 "ripper.y"
10553 {
10554 int max_numparam = p->max_numparam;
10555 p->max_numparam = (yyvsp[-3].num);
10556 (yyvsp[-1].val) = args_with_numbered(p, (yyvsp[-1].val), max_numparam);
10557#if 0
10558 (yyval.val) = NEW_ITER((yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
10559#endif
10560 {VALUE v1,v2,v3;v1=escape_Qundef((yyvsp[-1].val));v2=(yyvsp[0].val);v3=dispatch2(do_block,v1,v2);(yyval.val)=v3;}
10561 CMDARG_POP();
10562 numparam_pop(p, (yyvsp[-2].node));
10563 dyna_pop(p, (yyvsp[-4].vars));
10564 }
10565#line 10561 "ripper.c"
10566 break;
10567
10568 case 462: /* case_args: arg_value */
10569#line 3783 "ripper.y"
10570 {
10571#if 0
10572 check_literal_when(p, (yyvsp[0].val), &(yylsp[0]));
10573 (yyval.val) = NEW_LIST((yyvsp[0].val), &(yyloc));
10574#endif
10575 {VALUE v1,v2,v3,v4;v1=dispatch0(args_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(args_add,v2,v3);(yyval.val)=v4;}
10576 }
10577#line 10573 "ripper.c"
10578 break;
10579
10580 case 463: /* case_args: "*" arg_value */
10581#line 3791 "ripper.y"
10582 {
10583#if 0
10584 (yyval.val) = NEW_SPLAT((yyvsp[0].val), &(yyloc));
10585#endif
10586 {VALUE v1,v2,v3,v4;v1=dispatch0(args_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(args_add_star,v2,v3);(yyval.val)=v4;}
10587 }
10588#line 10584 "ripper.c"
10589 break;
10590
10591 case 464: /* case_args: case_args ',' arg_value */
10592#line 3798 "ripper.y"
10593 {
10594#if 0
10595 check_literal_when(p, (yyvsp[0].val), &(yylsp[0]));
10596 (yyval.val) = last_arg_append(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
10597#endif
10598 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(args_add,v1,v2);(yyval.val)=v3;}
10599 }
10600#line 10596 "ripper.c"
10601 break;
10602
10603 case 465: /* case_args: case_args ',' "*" arg_value */
10604#line 3806 "ripper.y"
10605 {
10606#if 0
10607 (yyval.val) = rest_arg_append(p, (yyvsp[-3].val), (yyvsp[0].val), &(yyloc));
10608#endif
10609 {VALUE v1,v2,v3;v1=(yyvsp[-3].val);v2=(yyvsp[0].val);v3=dispatch2(args_add_star,v1,v2);(yyval.val)=v3;}
10610 }
10611#line 10607 "ripper.c"
10612 break;
10613
10614 case 466: /* case_body: k_when case_args then compstmt cases */
10615#line 3817 "ripper.y"
10616 {
10617#if 0
10618 (yyval.val) = NEW_WHEN((yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
10619 fixpos((yyval.val), (yyvsp[-3].val));
10620#endif
10621 {VALUE v1,v2,v3,v4;v1=(yyvsp[-3].val);v2=(yyvsp[-1].val);v3=escape_Qundef((yyvsp[0].val));v4=dispatch3(when,v1,v2,v3);(yyval.val)=v4;}
10622 }
10623#line 10619 "ripper.c"
10624 break;
10625
10626 case 469: /* @38: %empty */
10627#line 3831 "ripper.y"
10628 {
10629 SET_LEX_STATE(EXPR_BEG|EXPR_LABEL);
10630 p->command_start = FALSE;
10631 (yyval.num) = p->in_kwarg;
10632 p->in_kwarg = 1;
10633 }
10634#line 10630 "ripper.c"
10635 break;
10636
10637 case 470: /* @39: %empty */
10638#line 3837 "ripper.y"
10639 {(yyval.tbl) = push_pvtbl(p);}
10640#line 10636 "ripper.c"
10641 break;
10642
10643 case 471: /* @40: %empty */
10644#line 3838 "ripper.y"
10645 {(yyval.tbl) = push_pktbl(p);}
10646#line 10642 "ripper.c"
10647 break;
10648
10649 case 472: /* $@41: %empty */
10650#line 3840 "ripper.y"
10651 {pop_pktbl(p, (yyvsp[-2].tbl));}
10652#line 10648 "ripper.c"
10653 break;
10654
10655 case 473: /* $@42: %empty */
10656#line 3841 "ripper.y"
10657 {pop_pvtbl(p, (yyvsp[-4].tbl));}
10658#line 10654 "ripper.c"
10659 break;
10660
10661 case 474: /* $@43: %empty */
10662#line 3842 "ripper.y"
10663 {
10664 p->in_kwarg = !!(yyvsp[-6].num);
10665 }
10666#line 10662 "ripper.c"
10667 break;
10668
10669 case 475: /* p_case_body: "`in'" @38 @39 @40 p_top_expr then $@41 $@42 $@43 compstmt p_cases */
10670#line 3847 "ripper.y"
10671 {
10672#if 0
10673 (yyval.val) = NEW_IN((yyvsp[-6].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
10674#endif
10675 {VALUE v1,v2,v3,v4;v1=(yyvsp[-6].val);v2=(yyvsp[-1].val);v3=escape_Qundef((yyvsp[0].val));v4=dispatch3(in,v1,v2,v3);(yyval.val)=v4;}
10676 }
10677#line 10673 "ripper.c"
10678 break;
10679
10680 case 479: /* p_top_expr: p_top_expr_body "`if' modifier" expr_value */
10681#line 3861 "ripper.y"
10682 {
10683#if 0
10684 (yyval.val) = new_if(p, (yyvsp[0].val), remove_begin((yyvsp[-2].val)), 0, &(yyloc));
10685 fixpos((yyval.val), (yyvsp[0].val));
10686#endif
10687 {VALUE v1,v2,v3;v1=(yyvsp[0].val);v2=(yyvsp[-2].val);v3=dispatch2(if_mod,v1,v2);(yyval.val)=v3;}
10688 }
10689#line 10685 "ripper.c"
10690 break;
10691
10692 case 480: /* p_top_expr: p_top_expr_body "`unless' modifier" expr_value */
10693#line 3869 "ripper.y"
10694 {
10695#if 0
10696 (yyval.val) = new_unless(p, (yyvsp[0].val), remove_begin((yyvsp[-2].val)), 0, &(yyloc));
10697 fixpos((yyval.val), (yyvsp[0].val));
10698#endif
10699 {VALUE v1,v2,v3;v1=(yyvsp[0].val);v2=(yyvsp[-2].val);v3=dispatch2(unless_mod,v1,v2);(yyval.val)=v3;}
10700 }
10701#line 10697 "ripper.c"
10702 break;
10703
10704 case 482: /* p_top_expr_body: p_expr ',' */
10705#line 3880 "ripper.y"
10706 {
10707 (yyval.val) = new_array_pattern_tail(p, Qnone, 1, 0, Qnone, &(yyloc));
10708 (yyval.val) = new_array_pattern(p, Qnone, get_value((yyvsp[-1].val)), (yyval.val), &(yyloc));
10709 }
10710#line 10706 "ripper.c"
10711 break;
10712
10713 case 483: /* p_top_expr_body: p_expr ',' p_args */
10714#line 3885 "ripper.y"
10715 {
10716 (yyval.val) = new_array_pattern(p, Qnone, get_value((yyvsp[-2].val)), (yyvsp[0].val), &(yyloc));
10717#if 0
10718 nd_set_first_loc((yyval.val), (yylsp[-2]).beg_pos);
10719#endif
10720
10721 }
10722#line 10718 "ripper.c"
10723 break;
10724
10725 case 484: /* p_top_expr_body: p_args_tail */
10726#line 3893 "ripper.y"
10727 {
10728 (yyval.val) = new_array_pattern(p, Qnone, Qnone, (yyvsp[0].val), &(yyloc));
10729 }
10730#line 10726 "ripper.c"
10731 break;
10732
10733 case 485: /* p_top_expr_body: p_kwargs */
10734#line 3897 "ripper.y"
10735 {
10736 (yyval.val) = new_hash_pattern(p, Qnone, (yyvsp[0].val), &(yyloc));
10737 }
10738#line 10734 "ripper.c"
10739 break;
10740
10741 case 487: /* p_as: p_expr "=>" p_variable */
10742#line 3906 "ripper.y"
10743 {
10744#if 0
10745 NODE *n = NEW_LIST((yyvsp[-2].val), &(yyloc));
10746 n = list_append(p, n, (yyvsp[0].val));
10747 (yyval.val) = new_hash(p, n, &(yyloc));
10748#endif
10749 {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=STATIC_ID2SYM(id_assoc);v3=(yyvsp[0].val);v4=dispatch3(binary,v1,v2,v3);(yyval.val)=v4;}
10750 }
10751#line 10747 "ripper.c"
10752 break;
10753
10754 case 489: /* p_alt: p_alt '|' p_expr_basic */
10755#line 3918 "ripper.y"
10756 {
10757#if 0
10758 (yyval.val) = NEW_NODE(NODE_OR, (yyvsp[-2].val), (yyvsp[0].val), 0, &(yyloc));
10759#endif
10760 {VALUE v1,v2,v3,v4;v1=(yyvsp[-2].val);v2=STATIC_ID2SYM(idOr);v3=(yyvsp[0].val);v4=dispatch3(binary,v1,v2,v3);(yyval.val)=v4;}
10761 }
10762#line 10758 "ripper.c"
10763 break;
10764
10765 case 491: /* p_lparen: '(' */
10766#line 3927 "ripper.y"
10767 {(yyval.tbl) = push_pktbl(p);}
10768#line 10764 "ripper.c"
10769 break;
10770
10771 case 492: /* p_lbracket: '[' */
10772#line 3928 "ripper.y"
10773 {(yyval.tbl) = push_pktbl(p);}
10774#line 10770 "ripper.c"
10775 break;
10776
10777 case 494: /* p_expr_basic: p_const p_lparen p_args rparen */
10778#line 3932 "ripper.y"
10779 {
10780 pop_pktbl(p, (yyvsp[-2].tbl));
10781 (yyval.val) = new_array_pattern(p, (yyvsp[-3].val), Qnone, (yyvsp[-1].val), &(yyloc));
10782#if 0
10783 nd_set_first_loc((yyval.val), (yylsp[-3]).beg_pos);
10784#endif
10785
10786 }
10787#line 10783 "ripper.c"
10788 break;
10789
10790 case 495: /* p_expr_basic: p_const p_lparen p_kwargs rparen */
10791#line 3941 "ripper.y"
10792 {
10793 pop_pktbl(p, (yyvsp[-2].tbl));
10794 (yyval.val) = new_hash_pattern(p, (yyvsp[-3].val), (yyvsp[-1].val), &(yyloc));
10795#if 0
10796 nd_set_first_loc((yyval.val), (yylsp[-3]).beg_pos);
10797#endif
10798
10799 }
10800#line 10796 "ripper.c"
10801 break;
10802
10803 case 496: /* p_expr_basic: p_const '(' rparen */
10804#line 3950 "ripper.y"
10805 {
10806 (yyval.val) = new_array_pattern_tail(p, Qnone, 0, 0, Qnone, &(yyloc));
10807 (yyval.val) = new_array_pattern(p, (yyvsp[-2].val), Qnone, (yyval.val), &(yyloc));
10808 }
10809#line 10805 "ripper.c"
10810 break;
10811
10812 case 497: /* p_expr_basic: p_const p_lbracket p_args rbracket */
10813#line 3955 "ripper.y"
10814 {
10815 pop_pktbl(p, (yyvsp[-2].tbl));
10816 (yyval.val) = new_array_pattern(p, (yyvsp[-3].val), Qnone, (yyvsp[-1].val), &(yyloc));
10817#if 0
10818 nd_set_first_loc((yyval.val), (yylsp[-3]).beg_pos);
10819#endif
10820
10821 }
10822#line 10818 "ripper.c"
10823 break;
10824
10825 case 498: /* p_expr_basic: p_const p_lbracket p_kwargs rbracket */
10826#line 3964 "ripper.y"
10827 {
10828 pop_pktbl(p, (yyvsp[-2].tbl));
10829 (yyval.val) = new_hash_pattern(p, (yyvsp[-3].val), (yyvsp[-1].val), &(yyloc));
10830#if 0
10831 nd_set_first_loc((yyval.val), (yylsp[-3]).beg_pos);
10832#endif
10833
10834 }
10835#line 10831 "ripper.c"
10836 break;
10837
10838 case 499: /* p_expr_basic: p_const '[' rbracket */
10839#line 3973 "ripper.y"
10840 {
10841 (yyval.val) = new_array_pattern_tail(p, Qnone, 0, 0, Qnone, &(yyloc));
10842 (yyval.val) = new_array_pattern(p, (yyvsp[-2].val), Qnone, (yyval.val), &(yyloc));
10843 }
10844#line 10840 "ripper.c"
10845 break;
10846
10847 case 500: /* @44: %empty */
10848#line 3977 "ripper.y"
10849 {(yyval.tbl) = push_pktbl(p);}
10850#line 10846 "ripper.c"
10851 break;
10852
10853 case 501: /* p_expr_basic: "[" @44 p_args rbracket */
10854#line 3978 "ripper.y"
10855 {
10856 pop_pktbl(p, (yyvsp[-2].tbl));
10857 (yyval.val) = new_array_pattern(p, Qnone, Qnone, (yyvsp[-1].val), &(yyloc));
10858 }
10859#line 10855 "ripper.c"
10860 break;
10861
10862 case 502: /* p_expr_basic: "[" rbracket */
10863#line 3983 "ripper.y"
10864 {
10865 (yyval.val) = new_array_pattern_tail(p, Qnone, 0, 0, Qnone, &(yyloc));
10866 (yyval.val) = new_array_pattern(p, Qnone, Qnone, (yyval.val), &(yyloc));
10867 }
10868#line 10864 "ripper.c"
10869 break;
10870
10871 case 503: /* @45: %empty */
10872#line 3988 "ripper.y"
10873 {
10874 (yyval.tbl) = push_pktbl(p);
10875 (yyvsp[0].num) = p->in_kwarg;
10876 p->in_kwarg = 0;
10877 }
10878#line 10874 "ripper.c"
10879 break;
10880
10881 case 504: /* p_expr_basic: "{" @45 p_kwargs rbrace */
10882#line 3994 "ripper.y"
10883 {
10884 pop_pktbl(p, (yyvsp[-2].tbl));
10885 p->in_kwarg = (yyvsp[-3].num);
10886 (yyval.val) = new_hash_pattern(p, Qnone, (yyvsp[-1].val), &(yyloc));
10887 }
10888#line 10884 "ripper.c"
10889 break;
10890
10891 case 505: /* p_expr_basic: "{" rbrace */
10892#line 4000 "ripper.y"
10893 {
10894 (yyval.val) = new_hash_pattern_tail(p, Qnone, 0, &(yyloc));
10895 (yyval.val) = new_hash_pattern(p, Qnone, (yyval.val), &(yyloc));
10896 }
10897#line 10893 "ripper.c"
10898 break;
10899
10900 case 506: /* @46: %empty */
10901#line 4004 "ripper.y"
10902 {(yyval.tbl) = push_pktbl(p);}
10903#line 10899 "ripper.c"
10904 break;
10905
10906 case 507: /* p_expr_basic: "(" @46 p_expr rparen */
10907#line 4005 "ripper.y"
10908 {
10909 pop_pktbl(p, (yyvsp[-2].tbl));
10910 (yyval.val) = (yyvsp[-1].val);
10911 }
10912#line 10908 "ripper.c"
10913 break;
10914
10915 case 508: /* p_args: p_expr */
10916#line 4012 "ripper.y"
10917 {
10918#if 0
10919 NODE *pre_args = NEW_LIST((yyvsp[0].val), &(yyloc));
10920 (yyval.val) = new_array_pattern_tail(p, pre_args, 0, 0, Qnone, &(yyloc));
10921#endif
10922 (yyval.val) = new_array_pattern_tail(p, rb_ary_new_from_args(1, get_value((yyvsp[0].val))), 0, 0, Qnone, &(yyloc));
10923
10924 }
10925#line 10921 "ripper.c"
10926 break;
10927
10928 case 509: /* p_args: p_args_head */
10929#line 4021 "ripper.y"
10930 {
10931 (yyval.val) = new_array_pattern_tail(p, (yyvsp[0].val), 1, 0, Qnone, &(yyloc));
10932 }
10933#line 10929 "ripper.c"
10934 break;
10935
10936 case 510: /* p_args: p_args_head p_arg */
10937#line 4025 "ripper.y"
10938 {
10939#if 0
10940 (yyval.val) = new_array_pattern_tail(p, list_concat((yyvsp[-1].val), (yyvsp[0].val)), 0, 0, Qnone, &(yyloc));
10941#endif
10942 VALUE pre_args = rb_ary_concat((yyvsp[-1].val), get_value((yyvsp[0].val)));
10943 (yyval.val) = new_array_pattern_tail(p, pre_args, 0, 0, Qnone, &(yyloc));
10944
10945 }
10946#line 10942 "ripper.c"
10947 break;
10948
10949 case 511: /* p_args: p_args_head "*" "local variable or method" */
10950#line 4034 "ripper.y"
10951 {
10952 (yyval.val) = new_array_pattern_tail(p, (yyvsp[-2].val), 1, (yyvsp[0].val), Qnone, &(yyloc));
10953 }
10954#line 10950 "ripper.c"
10955 break;
10956
10957 case 512: /* p_args: p_args_head "*" "local variable or method" ',' p_args_post */
10958#line 4038 "ripper.y"
10959 {
10960 (yyval.val) = new_array_pattern_tail(p, (yyvsp[-4].val), 1, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
10961 }
10962#line 10958 "ripper.c"
10963 break;
10964
10965 case 513: /* p_args: p_args_head "*" */
10966#line 4042 "ripper.y"
10967 {
10968 (yyval.val) = new_array_pattern_tail(p, (yyvsp[-1].val), 1, 0, Qnone, &(yyloc));
10969 }
10970#line 10966 "ripper.c"
10971 break;
10972
10973 case 514: /* p_args: p_args_head "*" ',' p_args_post */
10974#line 4046 "ripper.y"
10975 {
10976 (yyval.val) = new_array_pattern_tail(p, (yyvsp[-3].val), 1, 0, (yyvsp[0].val), &(yyloc));
10977 }
10978#line 10974 "ripper.c"
10979 break;
10980
10981 case 516: /* p_args_head: p_arg ',' */
10982#line 4053 "ripper.y"
10983 {
10984 (yyval.val) = (yyvsp[-1].val);
10985 }
10986#line 10982 "ripper.c"
10987 break;
10988
10989 case 517: /* p_args_head: p_args_head p_arg ',' */
10990#line 4057 "ripper.y"
10991 {
10992#if 0
10993 (yyval.val) = list_concat((yyvsp[-2].val), (yyvsp[-1].val));
10994#endif
10995 (yyval.val)=rb_ary_concat((yyvsp[-2].val), get_value((yyvsp[-1].val)));
10996 }
10997#line 10993 "ripper.c"
10998 break;
10999
11000 case 518: /* p_args_tail: "*" "local variable or method" */
11001#line 4066 "ripper.y"
11002 {
11003 (yyval.val) = new_array_pattern_tail(p, Qnone, 1, (yyvsp[0].val), Qnone, &(yyloc));
11004 }
11005#line 11001 "ripper.c"
11006 break;
11007
11008 case 519: /* p_args_tail: "*" "local variable or method" ',' p_args_post */
11009#line 4070 "ripper.y"
11010 {
11011 (yyval.val) = new_array_pattern_tail(p, Qnone, 1, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
11012 }
11013#line 11009 "ripper.c"
11014 break;
11015
11016 case 520: /* p_args_tail: "*" */
11017#line 4074 "ripper.y"
11018 {
11019 (yyval.val) = new_array_pattern_tail(p, Qnone, 1, 0, Qnone, &(yyloc));
11020 }
11021#line 11017 "ripper.c"
11022 break;
11023
11024 case 521: /* p_args_tail: "*" ',' p_args_post */
11025#line 4078 "ripper.y"
11026 {
11027 (yyval.val) = new_array_pattern_tail(p, Qnone, 1, 0, (yyvsp[0].val), &(yyloc));
11028 }
11029#line 11025 "ripper.c"
11030 break;
11031
11032 case 523: /* p_args_post: p_args_post ',' p_arg */
11033#line 4085 "ripper.y"
11034 {
11035#if 0
11036 (yyval.val) = list_concat((yyvsp[-2].val), (yyvsp[0].val));
11037#endif
11038 (yyval.val)=rb_ary_concat((yyvsp[-2].val), get_value((yyvsp[0].val)));
11039 }
11040#line 11036 "ripper.c"
11041 break;
11042
11043 case 524: /* p_arg: p_expr */
11044#line 4094 "ripper.y"
11045 {
11046#if 0
11047 (yyval.val) = NEW_LIST((yyvsp[0].val), &(yyloc));
11048#endif
11049 (yyval.val)=rb_ary_new_from_args(1, get_value((yyvsp[0].val)));
11050 }
11051#line 11047 "ripper.c"
11052 break;
11053
11054 case 525: /* p_kwargs: p_kwarg ',' p_kwrest */
11055#line 4103 "ripper.y"
11056 {
11057 (yyval.val) = new_hash_pattern_tail(p, new_unique_key_hash(p, (yyvsp[-2].val), &(yyloc)), (yyvsp[0].val), &(yyloc));
11058 }
11059#line 11055 "ripper.c"
11060 break;
11061
11062 case 526: /* p_kwargs: p_kwarg */
11063#line 4107 "ripper.y"
11064 {
11065 (yyval.val) = new_hash_pattern_tail(p, new_unique_key_hash(p, (yyvsp[0].val), &(yyloc)), 0, &(yyloc));
11066 }
11067#line 11063 "ripper.c"
11068 break;
11069
11070 case 527: /* p_kwargs: p_kwarg ',' */
11071#line 4111 "ripper.y"
11072 {
11073 (yyval.val) = new_hash_pattern_tail(p, new_unique_key_hash(p, (yyvsp[-1].val), &(yyloc)), 0, &(yyloc));
11074 }
11075#line 11071 "ripper.c"
11076 break;
11077
11078 case 528: /* p_kwargs: p_kwrest */
11079#line 4115 "ripper.y"
11080 {
11081 (yyval.val) = new_hash_pattern_tail(p, new_hash(p, Qnone, &(yyloc)), (yyvsp[0].val), &(yyloc));
11082 }
11083#line 11079 "ripper.c"
11084 break;
11085
11086 case 529: /* p_kwargs: p_kwarg ',' p_kwnorest */
11087#line 4119 "ripper.y"
11088 {
11089 (yyval.val) = new_hash_pattern_tail(p, new_unique_key_hash(p, (yyvsp[-2].val), &(yyloc)), ID2VAL(idNil), &(yyloc));
11090 }
11091#line 11087 "ripper.c"
11092 break;
11093
11094 case 530: /* p_kwargs: p_kwnorest */
11095#line 4123 "ripper.y"
11096 {
11097 (yyval.val) = new_hash_pattern_tail(p, new_hash(p, Qnone, &(yyloc)), ID2VAL(idNil), &(yyloc));
11098 }
11099#line 11095 "ripper.c"
11100 break;
11101
11102 case 531: /* p_kwarg: p_kw */
11103#line 4129 "ripper.y"
11104 {(yyval.val)=rb_ary_new_from_args(1, (yyvsp[0].val));}
11105#line 11101 "ripper.c"
11106 break;
11107
11108 case 532: /* p_kwarg: p_kwarg ',' p_kw */
11109#line 4131 "ripper.y"
11110 {
11111#if 0
11112 (yyval.val) = list_concat((yyvsp[-2].val), (yyvsp[0].val));
11113#endif
11114 (yyval.val)=rb_ary_push((yyvsp[-2].val), (yyvsp[0].val));
11115 }
11116#line 11112 "ripper.c"
11117 break;
11118
11119 case 533: /* p_kw: p_kw_label p_expr */
11120#line 4140 "ripper.y"
11121 {
11122 error_duplicate_pattern_key(p, get_id((yyvsp[-1].val)), &(yylsp[-1]));
11123#if 0
11124 (yyval.val) = list_append(p, NEW_LIST(NEW_LIT(ID2SYM((yyvsp[-1].val)), &(yyloc)), &(yyloc)), (yyvsp[0].val));
11125#endif
11126 (yyval.val)=rb_ary_new_from_args(2, get_value((yyvsp[-1].val)), get_value((yyvsp[0].val)));
11127 }
11128#line 11124 "ripper.c"
11129 break;
11130
11131 case 534: /* p_kw: p_kw_label */
11132#line 4148 "ripper.y"
11133 {
11134 error_duplicate_pattern_key(p, get_id((yyvsp[0].val)), &(yylsp[0]));
11135 if ((yyvsp[0].val) && !is_local_id(get_id((yyvsp[0].val)))) {
11136 yyerror1(&(yylsp[0]), "key must be valid as local variables");
11137 }
11138 error_duplicate_pattern_variable(p, get_id((yyvsp[0].val)), &(yylsp[0]));
11139#if 0
11140 (yyval.val) = list_append(p, NEW_LIST(NEW_LIT(ID2SYM((yyvsp[0].val)), &(yyloc)), &(yyloc)), assignable(p, (yyvsp[0].val), 0, &(yyloc)));
11141#endif
11142 (yyval.val)=rb_ary_new_from_args(2, get_value((yyvsp[0].val)), Qnil);
11143 }
11144#line 11140 "ripper.c"
11145 break;
11146
11147 case 536: /* p_kw_label: "string literal" string_contents tLABEL_END */
11148#line 4163 "ripper.y"
11149 {
11150 YYLTYPE loc = code_loc_gen(&(yylsp[-2]), &(yylsp[0]));
11151#if 0
11152 if (!(yyvsp[-1].val) || nd_type((yyvsp[-1].val)) == NODE_STR) {
11153 NODE *node = dsym_node(p, (yyvsp[-1].val), &loc);
11154 (yyval.val) = SYM2ID(node->nd_lit);
11155 }
11156#endif
11157 if (ripper_is_node_yylval((yyvsp[-1].val)) && RNODE((yyvsp[-1].val))->nd_cval) {
11158 VALUE label = RNODE((yyvsp[-1].val))->nd_cval;
11159 VALUE rval = RNODE((yyvsp[-1].val))->nd_rval;
11160 (yyval.val) = ripper_new_yylval(p, rb_intern_str(label), rval, label);
11161 RNODE((yyval.val))->nd_loc = loc;
11162 }
11163
11164 else {
11165 yyerror1(&loc, "symbol literal with interpolation is not allowed");
11166 (yyval.val) = 0;
11167 }
11168 }
11169#line 11165 "ripper.c"
11170 break;
11171
11172 case 537: /* p_kwrest: kwrest_mark "local variable or method" */
11173#line 4186 "ripper.y"
11174 {
11175 (yyval.val) = (yyvsp[0].val);
11176 }
11177#line 11173 "ripper.c"
11178 break;
11179
11180 case 538: /* p_kwrest: kwrest_mark */
11181#line 4190 "ripper.y"
11182 {
11183 (yyval.val) = 0;
11184 }
11185#line 11181 "ripper.c"
11186 break;
11187
11188 case 539: /* p_kwnorest: kwrest_mark "`nil'" */
11189#line 4196 "ripper.y"
11190 {
11191 (yyval.val) = 0;
11192 }
11193#line 11189 "ripper.c"
11194 break;
11195
11196 case 541: /* p_value: p_primitive ".." p_primitive */
11197#line 4203 "ripper.y"
11198 {
11199#if 0
11200 value_expr((yyvsp[-2].val));
11201 value_expr((yyvsp[0].val));
11202 (yyval.val) = NEW_DOT2((yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
11203#endif
11204 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(dot2,v1,v2);(yyval.val)=v3;}
11205 }
11206#line 11202 "ripper.c"
11207 break;
11208
11209 case 542: /* p_value: p_primitive "..." p_primitive */
11210#line 4212 "ripper.y"
11211 {
11212#if 0
11213 value_expr((yyvsp[-2].val));
11214 value_expr((yyvsp[0].val));
11215 (yyval.val) = NEW_DOT3((yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
11216#endif
11217 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(dot3,v1,v2);(yyval.val)=v3;}
11218 }
11219#line 11215 "ripper.c"
11220 break;
11221
11222 case 543: /* p_value: p_primitive ".." */
11223#line 4221 "ripper.y"
11224 {
11225#if 0
11226 YYLTYPE loc;
11227 loc.beg_pos = (yylsp[0]).end_pos;
11228 loc.end_pos = (yylsp[0]).end_pos;
11229
11230 value_expr((yyvsp[-1].val));
11231 (yyval.val) = NEW_DOT2((yyvsp[-1].val), new_nil(&loc), &(yyloc));
11232#endif
11233 {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=Qnil;v3=dispatch2(dot2,v1,v2);(yyval.val)=v3;}
11234 }
11235#line 11231 "ripper.c"
11236 break;
11237
11238 case 544: /* p_value: p_primitive "..." */
11239#line 4233 "ripper.y"
11240 {
11241#if 0
11242 YYLTYPE loc;
11243 loc.beg_pos = (yylsp[0]).end_pos;
11244 loc.end_pos = (yylsp[0]).end_pos;
11245
11246 value_expr((yyvsp[-1].val));
11247 (yyval.val) = NEW_DOT3((yyvsp[-1].val), new_nil(&loc), &(yyloc));
11248#endif
11249 {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=Qnil;v3=dispatch2(dot3,v1,v2);(yyval.val)=v3;}
11250 }
11251#line 11247 "ripper.c"
11252 break;
11253
11254 case 548: /* p_value: "(.." p_primitive */
11255#line 4248 "ripper.y"
11256 {
11257#if 0
11258 YYLTYPE loc;
11259 loc.beg_pos = (yylsp[-1]).beg_pos;
11260 loc.end_pos = (yylsp[-1]).beg_pos;
11261
11262 value_expr((yyvsp[0].val));
11263 (yyval.val) = NEW_DOT2(new_nil(&loc), (yyvsp[0].val), &(yyloc));
11264#endif
11265 {VALUE v1,v2,v3;v1=Qnil;v2=(yyvsp[0].val);v3=dispatch2(dot2,v1,v2);(yyval.val)=v3;}
11266 }
11267#line 11263 "ripper.c"
11268 break;
11269
11270 case 549: /* p_value: "(..." p_primitive */
11271#line 4260 "ripper.y"
11272 {
11273#if 0
11274 YYLTYPE loc;
11275 loc.beg_pos = (yylsp[-1]).beg_pos;
11276 loc.end_pos = (yylsp[-1]).beg_pos;
11277
11278 value_expr((yyvsp[0].val));
11279 (yyval.val) = NEW_DOT3(new_nil(&loc), (yyvsp[0].val), &(yyloc));
11280#endif
11281 {VALUE v1,v2,v3;v1=Qnil;v2=(yyvsp[0].val);v3=dispatch2(dot3,v1,v2);(yyval.val)=v3;}
11282 }
11283#line 11279 "ripper.c"
11284 break;
11285
11286 case 558: /* p_primitive: keyword_variable */
11287#line 4282 "ripper.y"
11288 {
11289#if 0
11290 if (!((yyval.val) = gettable(p, (yyvsp[0].val), &(yyloc)))) (yyval.val) = NEW_BEGIN(0, &(yyloc));
11291#endif
11292 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(var_ref,v1);(yyval.val)=v2;}
11293 }
11294#line 11290 "ripper.c"
11295 break;
11296
11297 case 559: /* $@47: %empty */
11298#line 4289 "ripper.y"
11299 {
11300 token_info_push(p, "->", &(yylsp[0]));
11301 }
11302#line 11298 "ripper.c"
11303 break;
11304
11305 case 560: /* p_primitive: "->" $@47 lambda */
11306#line 4293 "ripper.y"
11307 {
11308 (yyval.val) = (yyvsp[0].val);
11309#if 0
11310 nd_set_first_loc((yyval.val), (yylsp[-2]).beg_pos);
11311#endif
11312 }
11313#line 11309 "ripper.c"
11314 break;
11315
11316 case 561: /* p_variable: "local variable or method" */
11317#line 4302 "ripper.y"
11318 {
11319#if 0
11320 error_duplicate_pattern_variable(p, (yyvsp[0].val), &(yylsp[0]));
11321 (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc));
11322#endif
11323 (yyval.val)=assignable(p, var_field(p, (yyvsp[0].val)));
11324 }
11325#line 11321 "ripper.c"
11326 break;
11327
11328 case 562: /* p_var_ref: '^' "local variable or method" */
11329#line 4312 "ripper.y"
11330 {
11331#if 0
11332 NODE *n = gettable(p, (yyvsp[0].val), &(yyloc));
11333 if (!(nd_type(n) == NODE_LVAR || nd_type(n) == NODE_DVAR)) {
11334 compile_error(p, "%"PRIsVALUE": no such local variable", rb_id2str((yyvsp[0].val)));
11335 }
11336 (yyval.val) = n;
11337#endif
11338 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(var_ref,v1);(yyval.val)=v2;}
11339 }
11340#line 11336 "ripper.c"
11341 break;
11342
11343 case 563: /* p_const: ":: at EXPR_BEG" cname */
11344#line 4325 "ripper.y"
11345 {
11346#if 0
11347 (yyval.val) = NEW_COLON3((yyvsp[0].val), &(yyloc));
11348#endif
11349 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(top_const_ref,v1);(yyval.val)=v2;}
11350 }
11351#line 11347 "ripper.c"
11352 break;
11353
11354 case 564: /* p_const: p_const "::" cname */
11355#line 4332 "ripper.y"
11356 {
11357#if 0
11358 (yyval.val) = NEW_COLON2((yyvsp[-2].val), (yyvsp[0].val), &(yyloc));
11359#endif
11360 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(const_path_ref,v1,v2);(yyval.val)=v3;}
11361 }
11362#line 11358 "ripper.c"
11363 break;
11364
11365 case 565: /* p_const: "constant" */
11366#line 4339 "ripper.y"
11367 {
11368#if 0
11369 (yyval.val) = gettable(p, (yyvsp[0].val), &(yyloc));
11370#endif
11371 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(var_ref,v1);(yyval.val)=v2;}
11372 }
11373#line 11369 "ripper.c"
11374 break;
11375
11376 case 566: /* opt_rescue: k_rescue exc_list exc_var then compstmt opt_rescue */
11377#line 4350 "ripper.y"
11378 {
11379#if 0
11380 (yyval.val) = NEW_RESBODY((yyvsp[-4].val),
11381 (yyvsp[-3].val) ? block_append(p, node_assign(p, (yyvsp[-3].val), NEW_ERRINFO(&(yylsp[-3])), &(yylsp[-3])), (yyvsp[-1].val)) : (yyvsp[-1].val),
11382 (yyvsp[0].val), &(yyloc));
11383 fixpos((yyval.val), (yyvsp[-4].val)?(yyvsp[-4].val):(yyvsp[-1].val));
11384#endif
11385 {VALUE v1,v2,v3,v4,v5;v1=escape_Qundef((yyvsp[-4].val));v2=escape_Qundef((yyvsp[-3].val));v3=escape_Qundef((yyvsp[-1].val));v4=escape_Qundef((yyvsp[0].val));v5=dispatch4(rescue,v1,v2,v3,v4);(yyval.val)=v5;}
11386 }
11387#line 11383 "ripper.c"
11388 break;
11389
11390 case 568: /* exc_list: arg_value */
11391#line 4363 "ripper.y"
11392 {
11393#if 0
11394 (yyval.val) = NEW_LIST((yyvsp[0].val), &(yyloc));
11395#endif
11396 (yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val)));
11397 }
11398#line 11394 "ripper.c"
11399 break;
11400
11401 case 569: /* exc_list: mrhs */
11402#line 4370 "ripper.y"
11403 {
11404#if 0
11405 if (!((yyval.val) = splat_array((yyvsp[0].val)))) (yyval.val) = (yyvsp[0].val);
11406#endif
11407 (yyval.val)=(yyvsp[0].val);
11408 }
11409#line 11405 "ripper.c"
11410 break;
11411
11412 case 571: /* exc_var: "=>" lhs */
11413#line 4380 "ripper.y"
11414 {
11415 (yyval.val) = (yyvsp[0].val);
11416 }
11417#line 11413 "ripper.c"
11418 break;
11419
11420 case 573: /* opt_ensure: k_ensure compstmt */
11421#line 4387 "ripper.y"
11422 {
11423#if 0
11424 (yyval.val) = (yyvsp[0].val);
11425#endif
11426 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(ensure,v1);(yyval.val)=v2;}
11427 }
11428#line 11424 "ripper.c"
11429 break;
11430
11431 case 577: /* strings: string */
11432#line 4401 "ripper.y"
11433 {
11434#if 0
11435 NODE *node = (yyvsp[0].val);
11436 if (!node) {
11437 node = NEW_STR(STR_NEW0(), &(yyloc));
11438 RB_OBJ_WRITTEN(p->ast, Qnil, node->nd_lit);
11439 }
11440 else {
11441 node = evstr2dstr(p, node);
11442 }
11443 (yyval.val) = node;
11444#endif
11445 (yyval.val)=(yyvsp[0].val);
11446 }
11447#line 11443 "ripper.c"
11448 break;
11449
11450 case 580: /* string: string string1 */
11451#line 4420 "ripper.y"
11452 {
11453#if 0
11454 (yyval.val) = literal_concat(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
11455#endif
11456 {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(string_concat,v1,v2);(yyval.val)=v3;}
11457 }
11458#line 11454 "ripper.c"
11459 break;
11460
11461 case 581: /* string1: "string literal" string_contents "terminator" */
11462#line 4429 "ripper.y"
11463 {
11464#if 0
11465 (yyval.val) = heredoc_dedent(p, (yyvsp[-1].val));
11466 if ((yyval.val)) nd_set_loc((yyval.val), &(yyloc));
11467#endif
11468 {VALUE v1,v2;v1=heredoc_dedent(p, (yyvsp[-1].val));v2=dispatch1(string_literal,v1);(yyval.val)=v2;}
11469 }
11470#line 11466 "ripper.c"
11471 break;
11472
11473 case 582: /* xstring: "backtick literal" xstring_contents "terminator" */
11474#line 4439 "ripper.y"
11475 {
11476#if 0
11477 (yyval.val) = new_xstring(p, heredoc_dedent(p, (yyvsp[-1].val)), &(yyloc));
11478#endif
11479 {VALUE v1,v2;v1=heredoc_dedent(p, (yyvsp[-1].val));v2=dispatch1(xstring_literal,v1);(yyval.val)=v2;}
11480 }
11481#line 11477 "ripper.c"
11482 break;
11483
11484 case 583: /* regexp: "regexp literal" regexp_contents tREGEXP_END */
11485#line 4448 "ripper.y"
11486 {
11487 (yyval.val) = new_regexp(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
11488 }
11489#line 11485 "ripper.c"
11490 break;
11491
11492 case 584: /* words: "word list" ' ' word_list "terminator" */
11493#line 4454 "ripper.y"
11494 {
11495#if 0
11496 (yyval.val) = make_list((yyvsp[-1].val), &(yyloc));
11497#endif
11498 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(array,v1);(yyval.val)=v2;}
11499 }
11500#line 11496 "ripper.c"
11501 break;
11502
11503 case 585: /* word_list: %empty */
11504#line 4463 "ripper.y"
11505 {
11506#if 0
11507 (yyval.val) = 0;
11508#endif
11509 {VALUE v1;v1=dispatch0(words_new);(yyval.val)=v1;}
11510 }
11511#line 11507 "ripper.c"
11512 break;
11513
11514 case 586: /* word_list: word_list word ' ' */
11515#line 4470 "ripper.y"
11516 {
11517#if 0
11518 (yyval.val) = list_append(p, (yyvsp[-2].val), evstr2dstr(p, (yyvsp[-1].val)));
11519#endif
11520 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=dispatch2(words_add,v1,v2);(yyval.val)=v3;}
11521 }
11522#line 11518 "ripper.c"
11523 break;
11524
11525 case 587: /* word: string_content */
11526#line 4479 "ripper.y"
11527 {{VALUE v1,v2,v3,v4;v1=dispatch0(word_new);v2=v1;v3=(yyvsp[0].val);v4=dispatch2(word_add,v2,v3);(yyval.val)=v4;}}
11528#line 11524 "ripper.c"
11529 break;
11530
11531 case 588: /* word: word string_content */
11532#line 4481 "ripper.y"
11533 {
11534#if 0
11535 (yyval.val) = literal_concat(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
11536#endif
11537 {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(word_add,v1,v2);(yyval.val)=v3;}
11538 }
11539#line 11535 "ripper.c"
11540 break;
11541
11542 case 589: /* symbols: "symbol list" ' ' symbol_list "terminator" */
11543#line 4490 "ripper.y"
11544 {
11545#if 0
11546 (yyval.val) = make_list((yyvsp[-1].val), &(yyloc));
11547#endif
11548 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(array,v1);(yyval.val)=v2;}
11549 }
11550#line 11546 "ripper.c"
11551 break;
11552
11553 case 590: /* symbol_list: %empty */
11554#line 4499 "ripper.y"
11555 {
11556#if 0
11557 (yyval.val) = 0;
11558#endif
11559 {VALUE v1;v1=dispatch0(symbols_new);(yyval.val)=v1;}
11560 }
11561#line 11557 "ripper.c"
11562 break;
11563
11564 case 591: /* symbol_list: symbol_list word ' ' */
11565#line 4506 "ripper.y"
11566 {
11567#if 0
11568 (yyval.val) = symbol_append(p, (yyvsp[-2].val), evstr2dstr(p, (yyvsp[-1].val)));
11569#endif
11570 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=dispatch2(symbols_add,v1,v2);(yyval.val)=v3;}
11571 }
11572#line 11568 "ripper.c"
11573 break;
11574
11575 case 592: /* qwords: "verbatim word list" ' ' qword_list "terminator" */
11576#line 4515 "ripper.y"
11577 {
11578#if 0
11579 (yyval.val) = make_list((yyvsp[-1].val), &(yyloc));
11580#endif
11581 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(array,v1);(yyval.val)=v2;}
11582 }
11583#line 11579 "ripper.c"
11584 break;
11585
11586 case 593: /* qsymbols: "verbatim symbol list" ' ' qsym_list "terminator" */
11587#line 4524 "ripper.y"
11588 {
11589#if 0
11590 (yyval.val) = make_list((yyvsp[-1].val), &(yyloc));
11591#endif
11592 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(array,v1);(yyval.val)=v2;}
11593 }
11594#line 11590 "ripper.c"
11595 break;
11596
11597 case 594: /* qword_list: %empty */
11598#line 4533 "ripper.y"
11599 {
11600#if 0
11601 (yyval.val) = 0;
11602#endif
11603 {VALUE v1;v1=dispatch0(qwords_new);(yyval.val)=v1;}
11604 }
11605#line 11601 "ripper.c"
11606 break;
11607
11608 case 595: /* qword_list: qword_list "literal content" ' ' */
11609#line 4540 "ripper.y"
11610 {
11611#if 0
11612 (yyval.val) = list_append(p, (yyvsp[-2].val), (yyvsp[-1].val));
11613#endif
11614 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=dispatch2(qwords_add,v1,v2);(yyval.val)=v3;}
11615 }
11616#line 11612 "ripper.c"
11617 break;
11618
11619 case 596: /* qsym_list: %empty */
11620#line 4549 "ripper.y"
11621 {
11622#if 0
11623 (yyval.val) = 0;
11624#endif
11625 {VALUE v1;v1=dispatch0(qsymbols_new);(yyval.val)=v1;}
11626 }
11627#line 11623 "ripper.c"
11628 break;
11629
11630 case 597: /* qsym_list: qsym_list "literal content" ' ' */
11631#line 4556 "ripper.y"
11632 {
11633#if 0
11634 (yyval.val) = symbol_append(p, (yyvsp[-2].val), (yyvsp[-1].val));
11635#endif
11636 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[-1].val);v3=dispatch2(qsymbols_add,v1,v2);(yyval.val)=v3;}
11637 }
11638#line 11634 "ripper.c"
11639 break;
11640
11641 case 598: /* string_contents: %empty */
11642#line 4565 "ripper.y"
11643 {
11644#if 0
11645 (yyval.val) = 0;
11646#endif
11647 {VALUE v1;v1=dispatch0(string_content);(yyval.val)=v1;}
11648#if 0
11649#endif
11650 (yyval.val) = ripper_new_yylval(p, 0, (yyval.val), 0);
11651
11652 }
11653#line 11649 "ripper.c"
11654 break;
11655
11656 case 599: /* string_contents: string_contents string_content */
11657#line 4576 "ripper.y"
11658 {
11659#if 0
11660 (yyval.val) = literal_concat(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
11661#endif
11662 {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(string_add,v1,v2);(yyval.val)=v3;}
11663#if 0
11664#endif
11665 if (ripper_is_node_yylval((yyvsp[-1].val)) && ripper_is_node_yylval((yyvsp[0].val)) &&
11666 !RNODE((yyvsp[-1].val))->nd_cval) {
11667 RNODE((yyvsp[-1].val))->nd_cval = RNODE((yyvsp[0].val))->nd_cval;
11668 RNODE((yyvsp[-1].val))->nd_rval = add_mark_object(p, (yyval.val));
11669 (yyval.val) = (yyvsp[-1].val);
11670 }
11671
11672 }
11673#line 11669 "ripper.c"
11674 break;
11675
11676 case 600: /* xstring_contents: %empty */
11677#line 4594 "ripper.y"
11678 {
11679#if 0
11680 (yyval.val) = 0;
11681#endif
11682 {VALUE v1;v1=dispatch0(xstring_new);(yyval.val)=v1;}
11683 }
11684#line 11680 "ripper.c"
11685 break;
11686
11687 case 601: /* xstring_contents: xstring_contents string_content */
11688#line 4601 "ripper.y"
11689 {
11690#if 0
11691 (yyval.val) = literal_concat(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
11692#endif
11693 {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(xstring_add,v1,v2);(yyval.val)=v3;}
11694 }
11695#line 11691 "ripper.c"
11696 break;
11697
11698 case 602: /* regexp_contents: %empty */
11699#line 4610 "ripper.y"
11700 {
11701#if 0
11702 (yyval.val) = 0;
11703#endif
11704 {VALUE v1;v1=dispatch0(regexp_new);(yyval.val)=v1;}
11705#if 0
11706#endif
11707 (yyval.val) = ripper_new_yylval(p, 0, (yyval.val), 0);
11708
11709 }
11710#line 11706 "ripper.c"
11711 break;
11712
11713 case 603: /* regexp_contents: regexp_contents string_content */
11714#line 4621 "ripper.y"
11715 {
11716#if 0
11717 NODE *head = (yyvsp[-1].val), *tail = (yyvsp[0].val);
11718 if (!head) {
11719 (yyval.val) = tail;
11720 }
11721 else if (!tail) {
11722 (yyval.val) = head;
11723 }
11724 else {
11725 switch (nd_type(head)) {
11726 case NODE_STR:
11727 nd_set_type(head, NODE_DSTR);
11728 break;
11729 case NODE_DSTR:
11730 break;
11731 default:
11732 head = list_append(p, NEW_DSTR(Qnil, &(yyloc)), head);
11733 break;
11734 }
11735 (yyval.val) = list_append(p, head, tail);
11736 }
11737#endif
11738 VALUE s1 = 1, s2 = 0, n1 = (yyvsp[-1].val), n2 = (yyvsp[0].val);
11739 if (ripper_is_node_yylval(n1)) {
11740 s1 = RNODE(n1)->nd_cval;
11741 n1 = RNODE(n1)->nd_rval;
11742 }
11743 if (ripper_is_node_yylval(n2)) {
11744 s2 = RNODE(n2)->nd_cval;
11745 n2 = RNODE(n2)->nd_rval;
11746 }
11747 (yyval.val) = dispatch2(regexp_add, n1, n2);
11748 if (!s1 && s2) {
11749 (yyval.val) = ripper_new_yylval(p, 0, (yyval.val), s2);
11750 }
11751
11752 }
11753#line 11749 "ripper.c"
11754 break;
11755
11756 case 604: /* string_content: "literal content" */
11757#line 4662 "ripper.y"
11758 {(yyval.val)=ripper_new_yylval(p, 0, get_value((yyvsp[0].val)), (yyvsp[0].val));}
11759#line 11755 "ripper.c"
11760 break;
11761
11762 case 605: /* @48: %empty */
11763#line 4664 "ripper.y"
11764 {
11765 /* need to backup p->lex.strterm so that a string literal `%&foo,#$&,bar&` can be parsed */
11766 (yyval.strterm) = p->lex.strterm;
11767 p->lex.strterm = 0;
11768 SET_LEX_STATE(EXPR_BEG);
11769 }
11770#line 11766 "ripper.c"
11771 break;
11772
11773 case 606: /* string_content: tSTRING_DVAR @48 string_dvar */
11774#line 4671 "ripper.y"
11775 {
11776 p->lex.strterm = (yyvsp[-1].strterm);
11777#if 0
11778 (yyval.val) = NEW_EVSTR((yyvsp[0].val), &(yyloc));
11779 nd_set_line((yyval.val), (yylsp[0]).end_pos.lineno);
11780#endif
11781 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(string_dvar,v1);(yyval.val)=v2;}
11782 }
11783#line 11779 "ripper.c"
11784 break;
11785
11786 case 607: /* $@49: %empty */
11787#line 4680 "ripper.y"
11788 {
11789 CMDARG_PUSH(0);
11790 COND_PUSH(0);
11791 }
11792#line 11788 "ripper.c"
11793 break;
11794
11795 case 608: /* @50: %empty */
11796#line 4684 "ripper.y"
11797 {
11798 /* need to backup p->lex.strterm so that a string literal `%!foo,#{ !0 },bar!` can be parsed */
11799 (yyval.strterm) = p->lex.strterm;
11800 p->lex.strterm = 0;
11801 }
11802#line 11798 "ripper.c"
11803 break;
11804
11805 case 609: /* @51: %empty */
11806#line 4689 "ripper.y"
11807 {
11808 (yyval.num) = p->lex.state;
11809 SET_LEX_STATE(EXPR_BEG);
11810 }
11811#line 11807 "ripper.c"
11812 break;
11813
11814 case 610: /* @52: %empty */
11815#line 4693 "ripper.y"
11816 {
11817 (yyval.num) = p->lex.brace_nest;
11818 p->lex.brace_nest = 0;
11819 }
11820#line 11816 "ripper.c"
11821 break;
11822
11823 case 611: /* @53: %empty */
11824#line 4697 "ripper.y"
11825 {
11826 (yyval.num) = p->heredoc_indent;
11827 p->heredoc_indent = 0;
11828 }
11829#line 11825 "ripper.c"
11830 break;
11831
11832 case 612: /* string_content: tSTRING_DBEG $@49 @50 @51 @52 @53 compstmt "'}'" */
11833#line 4702 "ripper.y"
11834 {
11835 COND_POP();
11836 CMDARG_POP();
11837 p->lex.strterm = (yyvsp[-5].strterm);
11838 SET_LEX_STATE((yyvsp[-4].num));
11839 p->lex.brace_nest = (yyvsp[-3].num);
11840 p->heredoc_indent = (yyvsp[-2].num);
11841 p->heredoc_line_indent = -1;
11842#if 0
11843 if ((yyvsp[-1].val)) (yyvsp[-1].val)->flags &= ~NODE_FL_NEWLINE;
11844 (yyval.val) = new_evstr(p, (yyvsp[-1].val), &(yyloc));
11845#endif
11846 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(string_embexpr,v1);(yyval.val)=v2;}
11847 }
11848#line 11844 "ripper.c"
11849 break;
11850
11851 case 613: /* string_dvar: "global variable" */
11852#line 4719 "ripper.y"
11853 {
11854#if 0
11855 (yyval.val) = NEW_GVAR((yyvsp[0].val), &(yyloc));
11856#endif
11857 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(var_ref,v1);(yyval.val)=v2;}
11858 }
11859#line 11855 "ripper.c"
11860 break;
11861
11862 case 614: /* string_dvar: "instance variable" */
11863#line 4726 "ripper.y"
11864 {
11865#if 0
11866 (yyval.val) = NEW_IVAR((yyvsp[0].val), &(yyloc));
11867#endif
11868 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(var_ref,v1);(yyval.val)=v2;}
11869 }
11870#line 11866 "ripper.c"
11871 break;
11872
11873 case 615: /* string_dvar: "class variable" */
11874#line 4733 "ripper.y"
11875 {
11876#if 0
11877 (yyval.val) = NEW_CVAR((yyvsp[0].val), &(yyloc));
11878#endif
11879 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(var_ref,v1);(yyval.val)=v2;}
11880 }
11881#line 11877 "ripper.c"
11882 break;
11883
11884 case 619: /* ssym: "symbol literal" sym */
11885#line 4747 "ripper.y"
11886 {
11887 SET_LEX_STATE(EXPR_END);
11888#if 0
11889 (yyval.val) = NEW_LIT(ID2SYM((yyvsp[0].val)), &(yyloc));
11890#endif
11891 {VALUE v1,v2,v3,v4;v1=(yyvsp[0].val);v2=dispatch1(symbol,v1);v3=v2;v4=dispatch1(symbol_literal,v3);(yyval.val)=v4;}
11892 }
11893#line 11889 "ripper.c"
11894 break;
11895
11896 case 624: /* dsym: "symbol literal" string_contents "terminator" */
11897#line 4763 "ripper.y"
11898 {
11899 SET_LEX_STATE(EXPR_END);
11900#if 0
11901 (yyval.val) = dsym_node(p, (yyvsp[-1].val), &(yyloc));
11902#endif
11903 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(dyna_symbol,v1);(yyval.val)=v2;}
11904 }
11905#line 11901 "ripper.c"
11906 break;
11907
11908 case 626: /* numeric: tUMINUS_NUM simple_numeric */
11909#line 4774 "ripper.y"
11910 {
11911#if 0
11912 (yyval.val) = (yyvsp[0].val);
11913 RB_OBJ_WRITE(p->ast, &(yyval.val)->nd_lit, negate_lit(p, (yyval.val)->nd_lit));
11914#endif
11915 {VALUE v1,v2,v3;v1=ID2VAL(idUMinus);v2=(yyvsp[0].val);v3=dispatch2(unary,v1,v2);(yyval.val)=v3;}
11916 }
11917#line 11913 "ripper.c"
11918 break;
11919
11920 case 636: /* keyword_variable: "`nil'" */
11921#line 4796 "ripper.y"
11922 {(yyval.val) = KWD2EID(nil, (yyvsp[0].val));}
11923#line 11919 "ripper.c"
11924 break;
11925
11926 case 637: /* keyword_variable: "`self'" */
11927#line 4797 "ripper.y"
11928 {(yyval.val) = KWD2EID(self, (yyvsp[0].val));}
11929#line 11925 "ripper.c"
11930 break;
11931
11932 case 638: /* keyword_variable: "`true'" */
11933#line 4798 "ripper.y"
11934 {(yyval.val) = KWD2EID(true, (yyvsp[0].val));}
11935#line 11931 "ripper.c"
11936 break;
11937
11938 case 639: /* keyword_variable: "`false'" */
11939#line 4799 "ripper.y"
11940 {(yyval.val) = KWD2EID(false, (yyvsp[0].val));}
11941#line 11937 "ripper.c"
11942 break;
11943
11944 case 640: /* keyword_variable: "`__FILE__'" */
11945#line 4800 "ripper.y"
11946 {(yyval.val) = KWD2EID(_FILE__, (yyvsp[0].val));}
11947#line 11943 "ripper.c"
11948 break;
11949
11950 case 641: /* keyword_variable: "`__LINE__'" */
11951#line 4801 "ripper.y"
11952 {(yyval.val) = KWD2EID(_LINE__, (yyvsp[0].val));}
11953#line 11949 "ripper.c"
11954 break;
11955
11956 case 642: /* keyword_variable: "`__ENCODING__'" */
11957#line 4802 "ripper.y"
11958 {(yyval.val) = KWD2EID(_ENCODING__, (yyvsp[0].val));}
11959#line 11955 "ripper.c"
11960 break;
11961
11962 case 643: /* var_ref: user_variable */
11963#line 4806 "ripper.y"
11964 {
11965#if 0
11966 if (!((yyval.val) = gettable(p, (yyvsp[0].val), &(yyloc)))) (yyval.val) = NEW_BEGIN(0, &(yyloc));
11967#endif
11968 if (id_is_var(p, get_id((yyvsp[0].val)))) {
11969 (yyval.val) = dispatch1(var_ref, (yyvsp[0].val));
11970 }
11971 else {
11972 (yyval.val) = dispatch1(vcall, (yyvsp[0].val));
11973 }
11974
11975 }
11976#line 11972 "ripper.c"
11977 break;
11978
11979 case 644: /* var_ref: keyword_variable */
11980#line 4819 "ripper.y"
11981 {
11982#if 0
11983 if (!((yyval.val) = gettable(p, (yyvsp[0].val), &(yyloc)))) (yyval.val) = NEW_BEGIN(0, &(yyloc));
11984#endif
11985 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(var_ref,v1);(yyval.val)=v2;}
11986 }
11987#line 11983 "ripper.c"
11988 break;
11989
11990 case 645: /* var_lhs: user_variable */
11991#line 4828 "ripper.y"
11992 {
11993#if 0
11994 (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc));
11995#endif
11996 (yyval.val)=assignable(p, var_field(p, (yyvsp[0].val)));
11997 }
11998#line 11994 "ripper.c"
11999 break;
12000
12001 case 646: /* var_lhs: keyword_variable */
12002#line 4835 "ripper.y"
12003 {
12004#if 0
12005 (yyval.val) = assignable(p, (yyvsp[0].val), 0, &(yyloc));
12006#endif
12007 (yyval.val)=assignable(p, var_field(p, (yyvsp[0].val)));
12008 }
12009#line 12005 "ripper.c"
12010 break;
12011
12012 case 649: /* $@54: %empty */
12013#line 4848 "ripper.y"
12014 {
12015 SET_LEX_STATE(EXPR_BEG);
12016 p->command_start = TRUE;
12017 }
12018#line 12014 "ripper.c"
12019 break;
12020
12021 case 650: /* superclass: '<' $@54 expr_value term */
12022#line 4853 "ripper.y"
12023 {
12024 (yyval.val) = (yyvsp[-1].val);
12025 }
12026#line 12022 "ripper.c"
12027 break;
12028
12029 case 651: /* superclass: %empty */
12030#line 4857 "ripper.y"
12031 {
12032#if 0
12033 (yyval.val) = 0;
12034#endif
12035 (yyval.val)=Qnil;
12036 }
12037#line 12033 "ripper.c"
12038 break;
12039
12040 case 652: /* f_arglist: '(' f_args rparen */
12041#line 4866 "ripper.y"
12042 {
12043#if 0
12044 (yyval.val) = (yyvsp[-1].val);
12045#endif
12046 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(paren,v1);(yyval.val)=v2;}
12047 SET_LEX_STATE(EXPR_BEG);
12048 p->command_start = TRUE;
12049 }
12050#line 12046 "ripper.c"
12051 break;
12052
12053 case 653: /* f_arglist: '(' f_arg ',' args_forward rparen */
12054#line 4875 "ripper.y"
12055 {
12056 arg_var(p, idFWD_REST);
12057#if idFWD_KWREST
12058 arg_var(p, idFWD_KWREST);
12059#endif
12060 arg_var(p, idFWD_BLOCK);
12061#if 0
12062 (yyval.val) = new_args_tail(p, Qnone, idFWD_KWREST, idFWD_BLOCK, &(yylsp[-1]));
12063 (yyval.val) = new_args(p, (yyvsp[-3].val), Qnone, idFWD_REST, Qnone, (yyval.val), &(yylsp[-1]));
12064#endif
12065 {VALUE v1,v2;v1=params_new((yyvsp[-3].val), Qnone, (yyvsp[-1].val), Qnone, Qnone, Qnone, Qnone);v2=dispatch1(paren,v1);(yyval.val)=v2;}
12066 SET_LEX_STATE(EXPR_BEG);
12067 p->command_start = TRUE;
12068 }
12069#line 12065 "ripper.c"
12070 break;
12071
12072 case 654: /* f_arglist: '(' args_forward rparen */
12073#line 4890 "ripper.y"
12074 {
12075 arg_var(p, idFWD_REST);
12076#if idFWD_KWREST
12077 arg_var(p, idFWD_KWREST);
12078#endif
12079 arg_var(p, idFWD_BLOCK);
12080#if 0
12081 (yyval.val) = new_args_tail(p, Qnone, idFWD_KWREST, idFWD_BLOCK, &(yylsp[-1]));
12082 (yyval.val) = new_args(p, Qnone, Qnone, idFWD_REST, Qnone, (yyval.val), &(yylsp[-1]));
12083#endif
12084 {VALUE v1,v2;v1=params_new(Qnone, Qnone, (yyvsp[-1].val), Qnone, Qnone, Qnone, Qnone);v2=dispatch1(paren,v1);(yyval.val)=v2;}
12085 SET_LEX_STATE(EXPR_BEG);
12086 p->command_start = TRUE;
12087 }
12088#line 12084 "ripper.c"
12089 break;
12090
12091 case 655: /* @55: %empty */
12092#line 4904 "ripper.y"
12093 {
12094 (yyval.num) = p->in_kwarg;
12095 p->in_kwarg = 1;
12096 SET_LEX_STATE(p->lex.state|EXPR_LABEL); /* force for args */
12097 }
12098#line 12094 "ripper.c"
12099 break;
12100
12101 case 656: /* f_arglist: @55 f_args term */
12102#line 4910 "ripper.y"
12103 {
12104 p->in_kwarg = !!(yyvsp[-2].num);
12105 (yyval.val) = (yyvsp[-1].val);
12106 SET_LEX_STATE(EXPR_BEG);
12107 p->command_start = TRUE;
12108 }
12109#line 12105 "ripper.c"
12110 break;
12111
12112 case 657: /* args_tail: f_kwarg ',' f_kwrest opt_f_block_arg */
12113#line 4919 "ripper.y"
12114 {
12115 (yyval.val) = new_args_tail(p, (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1]));
12116 }
12117#line 12113 "ripper.c"
12118 break;
12119
12120 case 658: /* args_tail: f_kwarg opt_f_block_arg */
12121#line 4923 "ripper.y"
12122 {
12123 (yyval.val) = new_args_tail(p, (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yylsp[-1]));
12124 }
12125#line 12121 "ripper.c"
12126 break;
12127
12128 case 659: /* args_tail: f_kwrest opt_f_block_arg */
12129#line 4927 "ripper.y"
12130 {
12131 (yyval.val) = new_args_tail(p, Qnone, (yyvsp[-1].val), (yyvsp[0].val), &(yylsp[-1]));
12132 }
12133#line 12129 "ripper.c"
12134 break;
12135
12136 case 660: /* args_tail: f_no_kwarg opt_f_block_arg */
12137#line 4931 "ripper.y"
12138 {
12139 (yyval.val) = new_args_tail(p, Qnone, ID2VAL(idNil), (yyvsp[0].val), &(yylsp[-1]));
12140 }
12141#line 12137 "ripper.c"
12142 break;
12143
12144 case 661: /* args_tail: f_block_arg */
12145#line 4935 "ripper.y"
12146 {
12147 (yyval.val) = new_args_tail(p, Qnone, Qnone, (yyvsp[0].val), &(yylsp[0]));
12148 }
12149#line 12145 "ripper.c"
12150 break;
12151
12152 case 662: /* opt_args_tail: ',' args_tail */
12153#line 4941 "ripper.y"
12154 {
12155 (yyval.val) = (yyvsp[0].val);
12156 }
12157#line 12153 "ripper.c"
12158 break;
12159
12160 case 663: /* opt_args_tail: %empty */
12161#line 4945 "ripper.y"
12162 {
12163 (yyval.val) = new_args_tail(p, Qnone, Qnone, Qnone, &(yylsp[0]));
12164 }
12165#line 12161 "ripper.c"
12166 break;
12167
12168 case 664: /* f_args: f_arg ',' f_optarg ',' f_rest_arg opt_args_tail */
12169#line 4951 "ripper.y"
12170 {
12171 (yyval.val) = new_args(p, (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yyloc));
12172 }
12173#line 12169 "ripper.c"
12174 break;
12175
12176 case 665: /* f_args: f_arg ',' f_optarg ',' f_rest_arg ',' f_arg opt_args_tail */
12177#line 4955 "ripper.y"
12178 {
12179 (yyval.val) = new_args(p, (yyvsp[-7].val), (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
12180 }
12181#line 12177 "ripper.c"
12182 break;
12183
12184 case 666: /* f_args: f_arg ',' f_optarg opt_args_tail */
12185#line 4959 "ripper.y"
12186 {
12187 (yyval.val) = new_args(p, (yyvsp[-3].val), (yyvsp[-1].val), Qnone, Qnone, (yyvsp[0].val), &(yyloc));
12188 }
12189#line 12185 "ripper.c"
12190 break;
12191
12192 case 667: /* f_args: f_arg ',' f_optarg ',' f_arg opt_args_tail */
12193#line 4963 "ripper.y"
12194 {
12195 (yyval.val) = new_args(p, (yyvsp[-5].val), (yyvsp[-3].val), Qnone, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
12196 }
12197#line 12193 "ripper.c"
12198 break;
12199
12200 case 668: /* f_args: f_arg ',' f_rest_arg opt_args_tail */
12201#line 4967 "ripper.y"
12202 {
12203 (yyval.val) = new_args(p, (yyvsp[-3].val), Qnone, (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yyloc));
12204 }
12205#line 12201 "ripper.c"
12206 break;
12207
12208 case 669: /* f_args: f_arg ',' f_rest_arg ',' f_arg opt_args_tail */
12209#line 4971 "ripper.y"
12210 {
12211 (yyval.val) = new_args(p, (yyvsp[-5].val), Qnone, (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
12212 }
12213#line 12209 "ripper.c"
12214 break;
12215
12216 case 670: /* f_args: f_arg opt_args_tail */
12217#line 4975 "ripper.y"
12218 {
12219 (yyval.val) = new_args(p, (yyvsp[-1].val), Qnone, Qnone, Qnone, (yyvsp[0].val), &(yyloc));
12220 }
12221#line 12217 "ripper.c"
12222 break;
12223
12224 case 671: /* f_args: f_optarg ',' f_rest_arg opt_args_tail */
12225#line 4979 "ripper.y"
12226 {
12227 (yyval.val) = new_args(p, Qnone, (yyvsp[-3].val), (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yyloc));
12228 }
12229#line 12225 "ripper.c"
12230 break;
12231
12232 case 672: /* f_args: f_optarg ',' f_rest_arg ',' f_arg opt_args_tail */
12233#line 4983 "ripper.y"
12234 {
12235 (yyval.val) = new_args(p, Qnone, (yyvsp[-5].val), (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
12236 }
12237#line 12233 "ripper.c"
12238 break;
12239
12240 case 673: /* f_args: f_optarg opt_args_tail */
12241#line 4987 "ripper.y"
12242 {
12243 (yyval.val) = new_args(p, Qnone, (yyvsp[-1].val), Qnone, Qnone, (yyvsp[0].val), &(yyloc));
12244 }
12245#line 12241 "ripper.c"
12246 break;
12247
12248 case 674: /* f_args: f_optarg ',' f_arg opt_args_tail */
12249#line 4991 "ripper.y"
12250 {
12251 (yyval.val) = new_args(p, Qnone, (yyvsp[-3].val), Qnone, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
12252 }
12253#line 12249 "ripper.c"
12254 break;
12255
12256 case 675: /* f_args: f_rest_arg opt_args_tail */
12257#line 4995 "ripper.y"
12258 {
12259 (yyval.val) = new_args(p, Qnone, Qnone, (yyvsp[-1].val), Qnone, (yyvsp[0].val), &(yyloc));
12260 }
12261#line 12257 "ripper.c"
12262 break;
12263
12264 case 676: /* f_args: f_rest_arg ',' f_arg opt_args_tail */
12265#line 4999 "ripper.y"
12266 {
12267 (yyval.val) = new_args(p, Qnone, Qnone, (yyvsp[-3].val), (yyvsp[-1].val), (yyvsp[0].val), &(yyloc));
12268 }
12269#line 12265 "ripper.c"
12270 break;
12271
12272 case 677: /* f_args: args_tail */
12273#line 5003 "ripper.y"
12274 {
12275 (yyval.val) = new_args(p, Qnone, Qnone, Qnone, Qnone, (yyvsp[0].val), &(yyloc));
12276 }
12277#line 12273 "ripper.c"
12278 break;
12279
12280 case 678: /* f_args: %empty */
12281#line 5007 "ripper.y"
12282 {
12283 (yyval.val) = new_args_tail(p, Qnone, Qnone, Qnone, &(yylsp[0]));
12284 (yyval.val) = new_args(p, Qnone, Qnone, Qnone, Qnone, (yyval.val), &(yylsp[0]));
12285 }
12286#line 12282 "ripper.c"
12287 break;
12288
12289 case 679: /* args_forward: "(..." */
12290#line 5014 "ripper.y"
12291 {
12292#if 0
12293 (yyval.val) = idDot3;
12294#endif
12295 {VALUE v1;v1=dispatch0(args_forward);(yyval.val)=v1;}
12296 }
12297#line 12293 "ripper.c"
12298 break;
12299
12300 case 680: /* f_bad_arg: "constant" */
12301#line 5023 "ripper.y"
12302 {
12303#if 0
12304 yyerror1(&(yylsp[0]), "formal argument cannot be a constant");
12305 (yyval.val) = 0;
12306#endif
12307 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(param_error,v1);(yyval.val)=v2;}ripper_error(p);
12308 }
12309#line 12305 "ripper.c"
12310 break;
12311
12312 case 681: /* f_bad_arg: "instance variable" */
12313#line 5031 "ripper.y"
12314 {
12315#if 0
12316 yyerror1(&(yylsp[0]), "formal argument cannot be an instance variable");
12317 (yyval.val) = 0;
12318#endif
12319 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(param_error,v1);(yyval.val)=v2;}ripper_error(p);
12320 }
12321#line 12317 "ripper.c"
12322 break;
12323
12324 case 682: /* f_bad_arg: "global variable" */
12325#line 5039 "ripper.y"
12326 {
12327#if 0
12328 yyerror1(&(yylsp[0]), "formal argument cannot be a global variable");
12329 (yyval.val) = 0;
12330#endif
12331 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(param_error,v1);(yyval.val)=v2;}ripper_error(p);
12332 }
12333#line 12329 "ripper.c"
12334 break;
12335
12336 case 683: /* f_bad_arg: "class variable" */
12337#line 5047 "ripper.y"
12338 {
12339#if 0
12340 yyerror1(&(yylsp[0]), "formal argument cannot be a class variable");
12341 (yyval.val) = 0;
12342#endif
12343 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(param_error,v1);(yyval.val)=v2;}ripper_error(p);
12344 }
12345#line 12341 "ripper.c"
12346 break;
12347
12348 case 685: /* f_norm_arg: "local variable or method" */
12349#line 5058 "ripper.y"
12350 {
12351 formal_argument(p, get_id((yyvsp[0].val)));
12353 (yyval.val) = (yyvsp[0].val);
12354 }
12355#line 12351 "ripper.c"
12356 break;
12357
12358 case 686: /* f_arg_asgn: f_norm_arg */
12359#line 5066 "ripper.y"
12360 {
12361 ID id = get_id((yyvsp[0].val));
12362 arg_var(p, id);
12363 p->cur_arg = id;
12364 (yyval.val) = (yyvsp[0].val);
12365 }
12366#line 12362 "ripper.c"
12367 break;
12368
12369 case 687: /* f_arg_item: f_arg_asgn */
12370#line 5075 "ripper.y"
12371 {
12372 p->cur_arg = 0;
12373#if 0
12374 (yyval.val) = NEW_ARGS_AUX((yyvsp[0].val), 1, &NULL_LOC);
12375#endif
12376 (yyval.val)=get_value((yyvsp[0].val));
12377 }
12378#line 12374 "ripper.c"
12379 break;
12380
12381 case 688: /* f_arg_item: "(" f_margs rparen */
12382#line 5083 "ripper.y"
12383 {
12384#if 0
12385 ID tid = internal_id(p);
12386 YYLTYPE loc;
12387 loc.beg_pos = (yylsp[-1]).beg_pos;
12388 loc.end_pos = (yylsp[-1]).beg_pos;
12389 arg_var(p, tid);
12390 if (dyna_in_block(p)) {
12391 (yyvsp[-1].val)->nd_value = NEW_DVAR(tid, &loc);
12392 }
12393 else {
12394 (yyvsp[-1].val)->nd_value = NEW_LVAR(tid, &loc);
12395 }
12396 (yyval.val) = NEW_ARGS_AUX(tid, 1, &NULL_LOC);
12397 (yyval.val)->nd_next = (yyvsp[-1].val);
12398#endif
12399 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(mlhs_paren,v1);(yyval.val)=v2;}
12400 }
12401#line 12397 "ripper.c"
12402 break;
12403
12404 case 689: /* f_arg: f_arg_item */
12405#line 5104 "ripper.y"
12406 {(yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val)));}
12407#line 12403 "ripper.c"
12408 break;
12409
12410 case 690: /* f_arg: f_arg ',' f_arg_item */
12411#line 5106 "ripper.y"
12412 {
12413#if 0
12414 (yyval.val) = (yyvsp[-2].val);
12415 (yyval.val)->nd_plen++;
12416 (yyval.val)->nd_next = block_append(p, (yyval.val)->nd_next, (yyvsp[0].val)->nd_next);
12417 rb_discard_node(p, (yyvsp[0].val));
12418#endif
12419 (yyval.val)=rb_ary_push((yyvsp[-2].val), get_value((yyvsp[0].val)));
12420 }
12421#line 12417 "ripper.c"
12422 break;
12423
12424 case 691: /* f_label: tLABEL */
12425#line 5119 "ripper.y"
12426 {
12427 ID id = get_id((yyvsp[0].val));
12428 arg_var(p, formal_argument(p, id));
12429 p->cur_arg = id;
12431 (yyval.val) = (yyvsp[0].val);
12432 }
12433#line 12429 "ripper.c"
12434 break;
12435
12436 case 692: /* f_kw: f_label arg_value */
12437#line 5129 "ripper.y"
12438 {
12439 p->cur_arg = 0;
12440#if 0
12441 (yyval.val) = new_kw_arg(p, assignable(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)), &(yyloc));
12442#endif
12443 (yyval.val)=rb_assoc_new(get_value(assignable(p, (yyvsp[-1].val))), get_value((yyvsp[0].val)));
12444 }
12445#line 12441 "ripper.c"
12446 break;
12447
12448 case 693: /* f_kw: f_label */
12449#line 5137 "ripper.y"
12450 {
12451 p->cur_arg = 0;
12452#if 0
12453 (yyval.val) = new_kw_arg(p, assignable(p, (yyvsp[0].val), NODE_SPECIAL_REQUIRED_KEYWORD, &(yyloc)), &(yyloc));
12454#endif
12455 (yyval.val)=rb_assoc_new(get_value(assignable(p, (yyvsp[0].val))), 0);
12456 }
12457#line 12453 "ripper.c"
12458 break;
12459
12460 case 694: /* f_block_kw: f_label primary_value */
12461#line 5147 "ripper.y"
12462 {
12463#if 0
12464 (yyval.val) = new_kw_arg(p, assignable(p, (yyvsp[-1].val), (yyvsp[0].val), &(yyloc)), &(yyloc));
12465#endif
12466 (yyval.val)=rb_assoc_new(get_value(assignable(p, (yyvsp[-1].val))), get_value((yyvsp[0].val)));
12467 }
12468#line 12464 "ripper.c"
12469 break;
12470
12471 case 695: /* f_block_kw: f_label */
12472#line 5154 "ripper.y"
12473 {
12474#if 0
12475 (yyval.val) = new_kw_arg(p, assignable(p, (yyvsp[0].val), NODE_SPECIAL_REQUIRED_KEYWORD, &(yyloc)), &(yyloc));
12476#endif
12477 (yyval.val)=rb_assoc_new(get_value(assignable(p, (yyvsp[0].val))), 0);
12478 }
12479#line 12475 "ripper.c"
12480 break;
12481
12482 case 696: /* f_block_kwarg: f_block_kw */
12483#line 5163 "ripper.y"
12484 {
12485#if 0
12486 (yyval.val) = (yyvsp[0].val);
12487#endif
12488 (yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val)));
12489 }
12490#line 12486 "ripper.c"
12491 break;
12492
12493 case 697: /* f_block_kwarg: f_block_kwarg ',' f_block_kw */
12494#line 5170 "ripper.y"
12495 {
12496#if 0
12497 (yyval.val) = kwd_append((yyvsp[-2].val), (yyvsp[0].val));
12498#endif
12499 (yyval.val)=rb_ary_push((yyvsp[-2].val), get_value((yyvsp[0].val)));
12500 }
12501#line 12497 "ripper.c"
12502 break;
12503
12504 case 698: /* f_kwarg: f_kw */
12505#line 5180 "ripper.y"
12506 {
12507#if 0
12508 (yyval.val) = (yyvsp[0].val);
12509#endif
12510 (yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val)));
12511 }
12512#line 12508 "ripper.c"
12513 break;
12514
12515 case 699: /* f_kwarg: f_kwarg ',' f_kw */
12516#line 5187 "ripper.y"
12517 {
12518#if 0
12519 (yyval.val) = kwd_append((yyvsp[-2].val), (yyvsp[0].val));
12520#endif
12521 (yyval.val)=rb_ary_push((yyvsp[-2].val), get_value((yyvsp[0].val)));
12522 }
12523#line 12519 "ripper.c"
12524 break;
12525
12526 case 702: /* f_no_kwarg: kwrest_mark "`nil'" */
12527#line 5200 "ripper.y"
12528 {
12529#if 0
12530#endif
12531 {VALUE v1,v2;v1=Qnil;v2=dispatch1(nokw_param,v1);(yyval.val)=v2;}
12532 }
12533#line 12529 "ripper.c"
12534 break;
12535
12536 case 703: /* f_kwrest: kwrest_mark "local variable or method" */
12537#line 5208 "ripper.y"
12538 {
12539 arg_var(p, shadowing_lvar(p, get_id((yyvsp[0].val))));
12540#if 0
12541 (yyval.val) = (yyvsp[0].val);
12542#endif
12543 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(kwrest_param,v1);(yyval.val)=v2;}
12544 }
12545#line 12541 "ripper.c"
12546 break;
12547
12548 case 704: /* f_kwrest: kwrest_mark */
12549#line 5216 "ripper.y"
12550 {
12551#if 0
12552 (yyval.val) = internal_id(p);
12553 arg_var(p, (yyval.val));
12554#endif
12555 {VALUE v1,v2;v1=Qnil;v2=dispatch1(kwrest_param,v1);(yyval.val)=v2;}
12556 }
12557#line 12553 "ripper.c"
12558 break;
12559
12560 case 705: /* f_opt: f_arg_asgn '=' arg_value */
12561#line 5226 "ripper.y"
12562 {
12563 p->cur_arg = 0;
12564#if 0
12565 (yyval.val) = NEW_OPT_ARG(0, assignable(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc)), &(yyloc));
12566#endif
12567 (yyval.val)=rb_assoc_new(get_value(assignable(p, (yyvsp[-2].val))), get_value((yyvsp[0].val)));
12568 }
12569#line 12565 "ripper.c"
12570 break;
12571
12572 case 706: /* f_block_opt: f_arg_asgn '=' primary_value */
12573#line 5236 "ripper.y"
12574 {
12575 p->cur_arg = 0;
12576#if 0
12577 (yyval.val) = NEW_OPT_ARG(0, assignable(p, (yyvsp[-2].val), (yyvsp[0].val), &(yyloc)), &(yyloc));
12578#endif
12579 (yyval.val)=rb_assoc_new(get_value(assignable(p, (yyvsp[-2].val))), get_value((yyvsp[0].val)));
12580 }
12581#line 12577 "ripper.c"
12582 break;
12583
12584 case 707: /* f_block_optarg: f_block_opt */
12585#line 5246 "ripper.y"
12586 {
12587#if 0
12588 (yyval.val) = (yyvsp[0].val);
12589#endif
12590 (yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val)));
12591 }
12592#line 12588 "ripper.c"
12593 break;
12594
12595 case 708: /* f_block_optarg: f_block_optarg ',' f_block_opt */
12596#line 5253 "ripper.y"
12597 {
12598#if 0
12599 (yyval.val) = opt_arg_append((yyvsp[-2].val), (yyvsp[0].val));
12600#endif
12601 (yyval.val)=rb_ary_push((yyvsp[-2].val), get_value((yyvsp[0].val)));
12602 }
12603#line 12599 "ripper.c"
12604 break;
12605
12606 case 709: /* f_optarg: f_opt */
12607#line 5262 "ripper.y"
12608 {
12609#if 0
12610 (yyval.val) = (yyvsp[0].val);
12611#endif
12612 (yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val)));
12613 }
12614#line 12610 "ripper.c"
12615 break;
12616
12617 case 710: /* f_optarg: f_optarg ',' f_opt */
12618#line 5269 "ripper.y"
12619 {
12620#if 0
12621 (yyval.val) = opt_arg_append((yyvsp[-2].val), (yyvsp[0].val));
12622#endif
12623 (yyval.val)=rb_ary_push((yyvsp[-2].val), get_value((yyvsp[0].val)));
12624 }
12625#line 12621 "ripper.c"
12626 break;
12627
12628 case 713: /* f_rest_arg: restarg_mark "local variable or method" */
12629#line 5282 "ripper.y"
12630 {
12631 arg_var(p, shadowing_lvar(p, get_id((yyvsp[0].val))));
12632#if 0
12633 (yyval.val) = (yyvsp[0].val);
12634#endif
12635 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(rest_param,v1);(yyval.val)=v2;}
12636 }
12637#line 12633 "ripper.c"
12638 break;
12639
12640 case 714: /* f_rest_arg: restarg_mark */
12641#line 5290 "ripper.y"
12642 {
12643#if 0
12644 (yyval.val) = internal_id(p);
12645 arg_var(p, (yyval.val));
12646#endif
12647 {VALUE v1,v2;v1=Qnil;v2=dispatch1(rest_param,v1);(yyval.val)=v2;}
12648 }
12649#line 12645 "ripper.c"
12650 break;
12651
12652 case 717: /* f_block_arg: blkarg_mark "local variable or method" */
12653#line 5304 "ripper.y"
12654 {
12655 arg_var(p, shadowing_lvar(p, get_id((yyvsp[0].val))));
12656#if 0
12657 (yyval.val) = (yyvsp[0].val);
12658#endif
12659 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(blockarg,v1);(yyval.val)=v2;}
12660 }
12661#line 12657 "ripper.c"
12662 break;
12663
12664 case 718: /* opt_f_block_arg: ',' f_block_arg */
12665#line 5314 "ripper.y"
12666 {
12667 (yyval.val) = (yyvsp[0].val);
12668 }
12669#line 12665 "ripper.c"
12670 break;
12671
12672 case 719: /* opt_f_block_arg: none */
12673#line 5318 "ripper.y"
12674 {
12675 (yyval.val) = Qnull;
12676 }
12677#line 12673 "ripper.c"
12678 break;
12679
12680 case 720: /* singleton: var_ref */
12681#line 5324 "ripper.y"
12682 {
12683 value_expr((yyvsp[0].val));
12684 (yyval.val) = (yyvsp[0].val);
12685 }
12686#line 12682 "ripper.c"
12687 break;
12688
12689 case 721: /* $@56: %empty */
12690#line 5328 "ripper.y"
12691 {SET_LEX_STATE(EXPR_BEG);}
12692#line 12688 "ripper.c"
12693 break;
12694
12695 case 722: /* singleton: '(' $@56 expr rparen */
12696#line 5329 "ripper.y"
12697 {
12698#if 0
12699 switch (nd_type((yyvsp[-1].val))) {
12700 case NODE_STR:
12701 case NODE_DSTR:
12702 case NODE_XSTR:
12703 case NODE_DXSTR:
12704 case NODE_DREGX:
12705 case NODE_LIT:
12706 case NODE_LIST:
12707 case NODE_ZLIST:
12708 yyerror1(&(yylsp[-1]), "can't define singleton method for literals");
12709 break;
12710 default:
12711 value_expr((yyvsp[-1].val));
12712 break;
12713 }
12714 (yyval.val) = (yyvsp[-1].val);
12715#endif
12716 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(paren,v1);(yyval.val)=v2;}
12717 }
12718#line 12714 "ripper.c"
12719 break;
12720
12721 case 724: /* assoc_list: assocs trailer */
12722#line 5354 "ripper.y"
12723 {
12724#if 0
12725 (yyval.val) = (yyvsp[-1].val);
12726#endif
12727 {VALUE v1,v2;v1=(yyvsp[-1].val);v2=dispatch1(assoclist_from_args,v1);(yyval.val)=v2;}
12728 }
12729#line 12725 "ripper.c"
12730 break;
12731
12732 case 725: /* assocs: assoc */
12733#line 5363 "ripper.y"
12734 {(yyval.val)=rb_ary_new3(1, get_value((yyvsp[0].val)));}
12735#line 12731 "ripper.c"
12736 break;
12737
12738 case 726: /* assocs: assocs ',' assoc */
12739#line 5365 "ripper.y"
12740 {
12741#if 0
12742 NODE *assocs = (yyvsp[-2].val);
12743 NODE *tail = (yyvsp[0].val);
12744 if (!assocs) {
12745 assocs = tail;
12746 }
12747 else if (tail) {
12748 if (assocs->nd_head &&
12749 !tail->nd_head && nd_type(tail->nd_next) == NODE_LIST &&
12750 nd_type(tail->nd_next->nd_head) == NODE_HASH) {
12751 /* DSTAR */
12752 tail = tail->nd_next->nd_head->nd_head;
12753 }
12754 assocs = list_concat(assocs, tail);
12755 }
12756 (yyval.val) = assocs;
12757#endif
12758 (yyval.val)=rb_ary_push((yyvsp[-2].val), get_value((yyvsp[0].val)));
12759 }
12760#line 12756 "ripper.c"
12761 break;
12762
12763 case 727: /* assoc: arg_value "=>" arg_value */
12764#line 5388 "ripper.y"
12765 {
12766#if 0
12767 if (nd_type((yyvsp[-2].val)) == NODE_STR) {
12768 nd_set_type((yyvsp[-2].val), NODE_LIT);
12769 RB_OBJ_WRITE(p->ast, &(yyvsp[-2].val)->nd_lit, rb_fstring((yyvsp[-2].val)->nd_lit));
12770 }
12771 (yyval.val) = list_append(p, NEW_LIST((yyvsp[-2].val), &(yyloc)), (yyvsp[0].val));
12772#endif
12773 {VALUE v1,v2,v3;v1=(yyvsp[-2].val);v2=(yyvsp[0].val);v3=dispatch2(assoc_new,v1,v2);(yyval.val)=v3;}
12774 }
12775#line 12771 "ripper.c"
12776 break;
12777
12778 case 728: /* assoc: tLABEL arg_value */
12779#line 5399 "ripper.y"
12780 {
12781#if 0
12782 (yyval.val) = list_append(p, NEW_LIST(NEW_LIT(ID2SYM((yyvsp[-1].val)), &(yylsp[-1])), &(yyloc)), (yyvsp[0].val));
12783#endif
12784 {VALUE v1,v2,v3;v1=(yyvsp[-1].val);v2=(yyvsp[0].val);v3=dispatch2(assoc_new,v1,v2);(yyval.val)=v3;}
12785 }
12786#line 12782 "ripper.c"
12787 break;
12788
12789 case 729: /* assoc: "string literal" string_contents tLABEL_END arg_value */
12790#line 5406 "ripper.y"
12791 {
12792#if 0
12793 YYLTYPE loc = code_loc_gen(&(yylsp[-3]), &(yylsp[-1]));
12794 (yyval.val) = list_append(p, NEW_LIST(dsym_node(p, (yyvsp[-2].val), &loc), &loc), (yyvsp[0].val));
12795#endif
12796 {VALUE v1,v2,v3,v4,v5;v1=(yyvsp[-2].val);v2=dispatch1(dyna_symbol,v1);v3=v2;v4=(yyvsp[0].val);v5=dispatch2(assoc_new,v3,v4);(yyval.val)=v5;}
12797 }
12798#line 12794 "ripper.c"
12799 break;
12800
12801 case 730: /* assoc: "**arg" arg_value */
12802#line 5414 "ripper.y"
12803 {
12804#if 0
12805 if (nd_type((yyvsp[0].val)) == NODE_HASH &&
12806 !((yyvsp[0].val)->nd_head && (yyvsp[0].val)->nd_head->nd_alen)) {
12807 static VALUE empty_hash;
12808 if (!empty_hash) {
12809 empty_hash = rb_obj_freeze(rb_hash_new());
12810 rb_gc_register_mark_object(empty_hash);
12811 }
12812 (yyval.val) = list_append(p, NEW_LIST(0, &(yyloc)), NEW_LIT(empty_hash, &(yyloc)));
12813 }
12814 else
12815 (yyval.val) = list_append(p, NEW_LIST(0, &(yyloc)), (yyvsp[0].val));
12816#endif
12817 {VALUE v1,v2;v1=(yyvsp[0].val);v2=dispatch1(assoc_splat,v1);(yyval.val)=v2;}
12818 }
12819#line 12815 "ripper.c"
12820 break;
12821
12822 case 757: /* term: ';' */
12823#line 5482 "ripper.y"
12824 {yyerrok;token_flush(p);}
12825#line 12821 "ripper.c"
12826 break;
12827
12828 case 758: /* term: '\n' */
12829#line 5483 "ripper.y"
12830 {token_flush(p);}
12831#line 12827 "ripper.c"
12832 break;
12833
12834 case 760: /* terms: terms ';' */
12835#line 5487 "ripper.y"
12836 {yyerrok;}
12837#line 12833 "ripper.c"
12838 break;
12839
12840 case 761: /* none: %empty */
12841#line 5491 "ripper.y"
12842 {
12843 (yyval.val) = Qnull;
12844 }
12845#line 12841 "ripper.c"
12846 break;
12847
12848
12849#line 12845 "ripper.c"
12850
12851 default: break;
12852 }
12853 /* User semantic actions sometimes alter yychar, and that requires
12854 that yytoken be updated with the new translation. We take the
12855 approach of translating immediately before every use of yytoken.
12856 One alternative is translating here after every semantic action,
12857 but that translation would be missed if the semantic action invokes
12858 YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
12859 if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
12860 incorrect destructor might then be invoked immediately. In the
12861 case of YYERROR or YYBACKUP, subsequent parser actions might lead
12862 to an incorrect destructor call or verbose syntax error message
12863 before the lookahead is translated. */
12864 YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
12865
12866 YYPOPSTACK (yylen);
12867 yylen = 0;
12868
12869 *++yyvsp = yyval;
12870 *++yylsp = yyloc;
12871
12872 /* Now 'shift' the result of the reduction. Determine what state
12873 that goes to, based on the state we popped back to and the rule
12874 number reduced by. */
12875 {
12876 const int yylhs = yyr1[yyn] - YYNTOKENS;
12877 const int yyi = yypgoto[yylhs] + *yyssp;
12878 yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
12879 ? yytable[yyi]
12880 : yydefgoto[yylhs]);
12881 }
12882
12883 goto yynewstate;
12884
12885
12886/*--------------------------------------.
12887| yyerrlab -- here on detecting error. |
12888`--------------------------------------*/
12889yyerrlab:
12890 /* Make sure we have latest lookahead translation. See comments at
12891 user semantic actions for why this is necessary. */
12892 yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
12893 /* If not already recovering from an error, report this error. */
12894 if (!yyerrstatus)
12895 {
12896 ++yynerrs;
12897 {
12898 yypcontext_t yyctx
12899 = {yyssp, yytoken, &yylloc};
12900 char const *yymsgp = YY_("syntax error");
12901 int yysyntax_error_status;
12902 yysyntax_error_status = yysyntax_error (p, &yymsg_alloc, &yymsg, &yyctx);
12903 if (yysyntax_error_status == 0)
12904 yymsgp = yymsg;
12905 else if (yysyntax_error_status == -1)
12906 {
12907 if (yymsg != yymsgbuf)
12908 YYSTACK_FREE (yymsg);
12909 yymsg = YY_CAST (char *,
12910 YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
12911 if (yymsg)
12912 {
12913 yysyntax_error_status
12914 = yysyntax_error (p, &yymsg_alloc, &yymsg, &yyctx);
12915 yymsgp = yymsg;
12916 }
12917 else
12918 {
12919 yymsg = yymsgbuf;
12920 yymsg_alloc = sizeof yymsgbuf;
12921 yysyntax_error_status = YYENOMEM;
12922 }
12923 }
12924 yyerror (&yylloc, p, yymsgp);
12925 if (yysyntax_error_status == YYENOMEM)
12926 YYNOMEM;
12927 }
12928 }
12929
12930 yyerror_range[1] = yylloc;
12931 if (yyerrstatus == 3)
12932 {
12933 /* If just tried and failed to reuse lookahead token after an
12934 error, discard it. */
12935
12936 if (yychar <= END_OF_INPUT)
12937 {
12938 /* Return failure if at end of input. */
12939 if (yychar == END_OF_INPUT)
12940 YYABORT;
12941 }
12942 else
12943 {
12944 yydestruct ("Error: discarding",
12945 yytoken, &yylval, &yylloc, p);
12946 yychar = YYEMPTY;
12947 }
12948 }
12949
12950 /* Else will try to reuse lookahead token after shifting the error
12951 token. */
12952 goto yyerrlab1;
12953
12954
12955/*---------------------------------------------------.
12956| yyerrorlab -- error raised explicitly by YYERROR. |
12957`---------------------------------------------------*/
12958yyerrorlab:
12959 /* Pacify compilers when the user code never invokes YYERROR and the
12960 label yyerrorlab therefore never appears in user code. */
12961 if (0)
12962 YYERROR;
12963 ++yynerrs;
12964
12965 /* Do not reclaim the symbols of the rule whose action triggered
12966 this YYERROR. */
12967 YYPOPSTACK (yylen);
12968 yylen = 0;
12969 YY_STACK_PRINT (yyss, yyssp);
12970 yystate = *yyssp;
12971 goto yyerrlab1;
12972
12973
12974/*-------------------------------------------------------------.
12975| yyerrlab1 -- common code for both syntax error and YYERROR. |
12976`-------------------------------------------------------------*/
12977yyerrlab1:
12978 yyerrstatus = 3; /* Each real token shifted decrements this. */
12979
12980 /* Pop stack until we find a state that shifts the error token. */
12981 for (;;)
12982 {
12983 yyn = yypact[yystate];
12984 if (!yypact_value_is_default (yyn))
12985 {
12986 yyn += YYSYMBOL_YYerror;
12987 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
12988 {
12989 yyn = yytable[yyn];
12990 if (0 < yyn)
12991 break;
12992 }
12993 }
12994
12995 /* Pop the current state because it cannot handle the error token. */
12996 if (yyssp == yyss)
12997 YYABORT;
12998
12999 yyerror_range[1] = *yylsp;
13000 yydestruct ("Error: popping",
13001 YY_ACCESSING_SYMBOL (yystate), yyvsp, yylsp, p);
13002 YYPOPSTACK (1);
13003 yystate = *yyssp;
13004 YY_STACK_PRINT (yyss, yyssp);
13005 }
13006
13008 *++yyvsp = yylval;
13010
13011 yyerror_range[2] = yylloc;
13012 ++yylsp;
13013 YYLLOC_DEFAULT (*yylsp, yyerror_range, 2);
13014
13015 /* Shift the error token. */
13016 YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
13017
13018 yystate = yyn;
13019 goto yynewstate;
13020
13021
13022/*-------------------------------------.
13023| yyacceptlab -- YYACCEPT comes here. |
13024`-------------------------------------*/
13025yyacceptlab:
13026 yyresult = 0;
13027 goto yyreturnlab;
13028
13029
13030/*-----------------------------------.
13031| yyabortlab -- YYABORT comes here. |
13032`-----------------------------------*/
13033yyabortlab:
13034 yyresult = 1;
13035 goto yyreturnlab;
13036
13037
13038/*-----------------------------------------------------------.
13039| yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. |
13040`-----------------------------------------------------------*/
13041yyexhaustedlab:
13042 yyerror (&yylloc, p, YY_("memory exhausted"));
13043 yyresult = 2;
13044 goto yyreturnlab;
13045
13046
13047/*----------------------------------------------------------.
13048| yyreturnlab -- parsing is finished, clean up and return. |
13049`----------------------------------------------------------*/
13050yyreturnlab:
13051 if (yychar != YYEMPTY)
13052 {
13053 /* Make sure we have latest lookahead translation. See comments at
13054 user semantic actions for why this is necessary. */
13055 yytoken = YYTRANSLATE (yychar);
13056 yydestruct ("Cleanup: discarding lookahead",
13057 yytoken, &yylval, &yylloc, p);
13058 }
13059 /* Do not reclaim the symbols of the rule whose action triggered
13060 this YYABORT or YYACCEPT. */
13061 YYPOPSTACK (yylen);
13062 YY_STACK_PRINT (yyss, yyssp);
13063 while (yyssp != yyss)
13064 {
13065 yydestruct ("Cleanup: popping",
13066 YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, yylsp, p);
13067 YYPOPSTACK (1);
13068 }
13069#ifndef yyoverflow
13070 if (yyss != yyssa)
13071 YYSTACK_FREE (yyss);
13072#endif
13073 if (yymsg != yymsgbuf)
13074 YYSTACK_FREE (yymsg);
13075 return yyresult;
13076}
13077
13078#line 5495 "ripper.y"
13079
13080# undef p
13081# undef yylex
13082# undef yylval
13083# define yylval (*p->lval)
13084
13085static int regx_options(struct parser_params*);
13086static int tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**,rb_encoding**);
13087static void tokaddmbc(struct parser_params *p, int c, rb_encoding *enc);
13088static enum yytokentype parse_string(struct parser_params*,rb_strterm_literal_t*);
13089static enum yytokentype here_document(struct parser_params*,rb_strterm_heredoc_t*);
13090
13091#ifndef RIPPER
13092# define set_yylval_node(x) { \
13093 YYLTYPE _cur_loc; \
13094 rb_parser_set_location(p, &_cur_loc); \
13095 yylval.node = (x); \
13096}
13097# define set_yylval_str(x) \
13098do { \
13099 set_yylval_node(NEW_STR(x, &_cur_loc)); \
13100 RB_OBJ_WRITTEN(p->ast, Qnil, x); \
13101} while(0)
13102# define set_yylval_literal(x) \
13103do { \
13104 set_yylval_node(NEW_LIT(x, &_cur_loc)); \
13105 RB_OBJ_WRITTEN(p->ast, Qnil, x); \
13106} while(0)
13107# define set_yylval_num(x) (yylval.num = (x))
13108# define set_yylval_id(x) (yylval.id = (x))
13109# define set_yylval_name(x) (yylval.id = (x))
13110# define yylval_id() (yylval.id)
13111#else
13112static inline VALUE
13113ripper_yylval_id(struct parser_params *p, ID x)
13114{
13115 return ripper_new_yylval(p, x, ID2SYM(x), 0);
13116}
13117# define set_yylval_str(x) (yylval.val = add_mark_object(p, (x)))
13118# define set_yylval_num(x) (yylval.val = ripper_new_yylval(p, (x), 0, 0))
13119# define set_yylval_id(x) (void)(x)
13120# define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(p, x))
13121# define set_yylval_literal(x) add_mark_object(p, (x))
13122# define set_yylval_node(x) (void)(x)
13123# define yylval_id() yylval.id
13124# define _cur_loc NULL_LOC /* dummy */
13125#endif
13126
13127#define set_yylval_noname() set_yylval_id(keyword_nil)
13128
13129#ifndef RIPPER
13130#define literal_flush(p, ptr) ((p)->lex.ptok = (ptr))
13131#define dispatch_scan_event(p, t) ((void)0)
13132#define dispatch_delayed_token(p, t) ((void)0)
13133#define has_delayed_token(p) (0)
13134#else
13135#define literal_flush(p, ptr) ((void)(ptr))
13136
13137#define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
13138
13139static inline VALUE
13140intern_sym(const char *name)
13141{
13142 ID id = rb_intern_const(name);
13143 return ID2SYM(id);
13144}
13145
13146static int
13147ripper_has_scan_event(struct parser_params *p)
13148{
13149 if (p->lex.pcur < p->lex.ptok) rb_raise(rb_eRuntimeError, "lex.pcur < lex.ptok");
13150 return p->lex.pcur > p->lex.ptok;
13151}
13152
13153static VALUE
13154ripper_scan_event_val(struct parser_params *p, enum yytokentype t)
13155{
13156 VALUE str = STR_NEW(p->lex.ptok, p->lex.pcur - p->lex.ptok);
13157 VALUE rval = ripper_dispatch1(p, ripper_token2eventid(t), str);
13158 token_flush(p);
13159 return rval;
13160}
13161
13162static void
13163ripper_dispatch_scan_event(struct parser_params *p, enum yytokentype t)
13164{
13165 if (!ripper_has_scan_event(p)) return;
13166 add_mark_object(p, yylval_rval = ripper_scan_event_val(p, t));
13167}
13168#define dispatch_scan_event(p, t) ripper_dispatch_scan_event(p, t)
13169
13170static void
13171ripper_dispatch_delayed_token(struct parser_params *p, enum yytokentype t)
13172{
13173 int saved_line = p->ruby_sourceline;
13174 const char *saved_tokp = p->lex.ptok;
13175
13176 if (NIL_P(p->delayed.token)) return;
13177 p->ruby_sourceline = p->delayed.line;
13178 p->lex.ptok = p->lex.pbeg + p->delayed.col;
13179 add_mark_object(p, yylval_rval = ripper_dispatch1(p, ripper_token2eventid(t), p->delayed.token));
13180 p->delayed.token = Qnil;
13181 p->ruby_sourceline = saved_line;
13182 p->lex.ptok = saved_tokp;
13183}
13184#define dispatch_delayed_token(p, t) ripper_dispatch_delayed_token(p, t)
13185#define has_delayed_token(p) (!NIL_P(p->delayed.token))
13186#endif /* RIPPER */
13187
13188#include "ruby/regex.h"
13189#include "ruby/util.h"
13190
13191static inline int
13192is_identchar(const char *ptr, const char *MAYBE_UNUSED(ptr_end), rb_encoding *enc)
13193{
13194 return rb_enc_isalnum((unsigned char)*ptr, enc) || *ptr == '_' || !ISASCII(*ptr);
13195}
13196
13197static inline int
13198parser_is_identchar(struct parser_params *p)
13199{
13200 return !(p)->eofp && is_identchar(p->lex.pcur-1, p->lex.pend, p->enc);
13201}
13202
13203static inline int
13204parser_isascii(struct parser_params *p)
13205{
13206 return ISASCII(*(p->lex.pcur-1));
13207}
13208
13209static void
13210token_info_setup(token_info *ptinfo, const char *ptr, const rb_code_location_t *loc)
13211{
13212 int column = 1, nonspc = 0, i;
13213 for (i = 0; i < loc->beg_pos.column; i++, ptr++) {
13214 if (*ptr == '\t') {
13215 column = (((column - 1) / TAB_WIDTH) + 1) * TAB_WIDTH;
13216 }
13217 column++;
13218 if (*ptr != ' ' && *ptr != '\t') {
13219 nonspc = 1;
13220 }
13221 }
13222
13223 ptinfo->beg = loc->beg_pos;
13224 ptinfo->indent = column;
13225 ptinfo->nonspc = nonspc;
13226}
13227
13228static void
13229token_info_push(struct parser_params *p, const char *token, const rb_code_location_t *loc)
13230{
13231 token_info *ptinfo;
13232
13233 if (!p->token_info_enabled) return;
13234 ptinfo = ALLOC(token_info);
13235 ptinfo->token = token;
13236 ptinfo->next = p->token_info;
13237 token_info_setup(ptinfo, p->lex.pbeg, loc);
13238
13239 p->token_info = ptinfo;
13240}
13241
13242static void
13243token_info_pop(struct parser_params *p, const char *token, const rb_code_location_t *loc)
13244{
13245 token_info *ptinfo_beg = p->token_info;
13246
13247 if (!ptinfo_beg) return;
13248 p->token_info = ptinfo_beg->next;
13249
13250 /* indentation check of matched keywords (begin..end, if..end, etc.) */
13251 token_info_warn(p, token, ptinfo_beg, 1, loc);
13252 ruby_sized_xfree(ptinfo_beg, sizeof(*ptinfo_beg));
13253}
13254
13255static void
13256token_info_warn(struct parser_params *p, const char *token, token_info *ptinfo_beg, int same, const rb_code_location_t *loc)
13257{
13258 token_info ptinfo_end_body, *ptinfo_end = &ptinfo_end_body;
13259 if (!p->token_info_enabled) return;
13260 if (!ptinfo_beg) return;
13261 token_info_setup(ptinfo_end, p->lex.pbeg, loc);
13262 if (ptinfo_beg->beg.lineno == ptinfo_end->beg.lineno) return; /* ignore one-line block */
13263 if (ptinfo_beg->nonspc || ptinfo_end->nonspc) return; /* ignore keyword in the middle of a line */
13264 if (ptinfo_beg->indent == ptinfo_end->indent) return; /* the indents are matched */
13265 if (!same && ptinfo_beg->indent < ptinfo_end->indent) return;
13266 rb_warn3L(ptinfo_end->beg.lineno,
13267 "mismatched indentations at '%s' with '%s' at %d",
13268 WARN_S(token), WARN_S(ptinfo_beg->token), WARN_I(ptinfo_beg->beg.lineno));
13269}
13270
13271static int
13272parser_precise_mbclen(struct parser_params *p, const char *ptr)
13273{
13274 int len = rb_enc_precise_mbclen(ptr, p->lex.pend, p->enc);
13275 if (!MBCLEN_CHARFOUND_P(len)) {
13276 compile_error(p, "invalid multibyte char (%s)", rb_enc_name(p->enc));
13277 return -1;
13278 }
13279 return len;
13280}
13281
13282#ifndef RIPPER
13283static void ruby_show_error_line(VALUE errbuf, const YYLTYPE *yylloc, int lineno, VALUE str);
13284
13285static inline void
13286parser_show_error_line(struct parser_params *p, const YYLTYPE *yylloc)
13287{
13288 VALUE str;
13289 int lineno = p->ruby_sourceline;
13290 if (!yylloc) {
13291 return;
13292 }
13293 else if (yylloc->beg_pos.lineno == lineno) {
13294 str = p->lex.lastline;
13295 }
13296 else {
13297 return;
13298 }
13299 ruby_show_error_line(p->error_buffer, yylloc, lineno, str);
13300}
13301
13302static int
13303parser_yyerror(struct parser_params *p, const YYLTYPE *yylloc, const char *msg)
13304{
13305 YYLTYPE current;
13306
13307 if (!yylloc) {
13308 yylloc = RUBY_SET_YYLLOC(current);
13309 }
13310 else if ((p->ruby_sourceline != yylloc->beg_pos.lineno &&
13311 p->ruby_sourceline != yylloc->end_pos.lineno) ||
13312 (yylloc->beg_pos.lineno == yylloc->end_pos.lineno &&
13313 yylloc->beg_pos.column == yylloc->end_pos.column)) {
13314 yylloc = 0;
13315 }
13316 compile_error(p, "%s", msg);
13317 parser_show_error_line(p, yylloc);
13318 return 0;
13319}
13320
13321static void
13322ruby_show_error_line(VALUE errbuf, const YYLTYPE *yylloc, int lineno, VALUE str)
13323{
13324 VALUE mesg;
13325 const int max_line_margin = 30;
13326 const char *ptr, *ptr_end, *pt, *pb;
13327 const char *pre = "", *post = "", *pend;
13328 const char *code = "", *caret = "";
13329 const char *lim;
13330 const char *const pbeg = RSTRING_PTR(str);
13331 char *buf;
13332 long len;
13333 int i;
13334
13335 if (!yylloc) return;
13336 pend = RSTRING_END(str);
13337 if (pend > pbeg && pend[-1] == '\n') {
13338 if (--pend > pbeg && pend[-1] == '\r') --pend;
13339 }
13340
13341 pt = pend;
13342 if (lineno == yylloc->end_pos.lineno &&
13343 (pend - pbeg) > yylloc->end_pos.column) {
13344 pt = pbeg + yylloc->end_pos.column;
13345 }
13346
13347 ptr = ptr_end = pt;
13348 lim = ptr - pbeg > max_line_margin ? ptr - max_line_margin : pbeg;
13349 while ((lim < ptr) && (*(ptr-1) != '\n')) ptr--;
13350
13351 lim = pend - ptr_end > max_line_margin ? ptr_end + max_line_margin : pend;
13352 while ((ptr_end < lim) && (*ptr_end != '\n') && (*ptr_end != '\r')) ptr_end++;
13353
13354 len = ptr_end - ptr;
13355 if (len > 4) {
13356 if (ptr > pbeg) {
13357 ptr = rb_enc_prev_char(pbeg, ptr, pt, rb_enc_get(str));
13358 if (ptr > pbeg) pre = "...";
13359 }
13360 if (ptr_end < pend) {
13361 ptr_end = rb_enc_prev_char(pt, ptr_end, pend, rb_enc_get(str));
13362 if (ptr_end < pend) post = "...";
13363 }
13364 }
13365 pb = pbeg;
13366 if (lineno == yylloc->beg_pos.lineno) {
13367 pb += yylloc->beg_pos.column;
13368 if (pb > pt) pb = pt;
13369 }
13370 if (pb < ptr) pb = ptr;
13371 if (len <= 4 && yylloc->beg_pos.lineno == yylloc->end_pos.lineno) {
13372 return;
13373 }
13374 if (RTEST(errbuf)) {
13375 mesg = rb_attr_get(errbuf, idMesg);
13376 if (RSTRING_LEN(mesg) > 0 && *(RSTRING_END(mesg)-1) != '\n')
13377 rb_str_cat_cstr(mesg, "\n");
13378 }
13379 else {
13380 mesg = rb_enc_str_new(0, 0, rb_enc_get(str));
13381 }
13382 if (!errbuf && rb_stderr_tty_p()) {
13383#define CSI_BEGIN "\033["
13384#define CSI_SGR "m"
13385 rb_str_catf(mesg,
13386 CSI_BEGIN""CSI_SGR"%s" /* pre */
13387 CSI_BEGIN"1"CSI_SGR"%.*s"
13388 CSI_BEGIN"1;4"CSI_SGR"%.*s"
13389 CSI_BEGIN";1"CSI_SGR"%.*s"
13390 CSI_BEGIN""CSI_SGR"%s" /* post */
13391 "\n",
13392 pre,
13393 (int)(pb - ptr), ptr,
13394 (int)(pt - pb), pb,
13395 (int)(ptr_end - pt), pt,
13396 post);
13397 }
13398 else {
13399 char *p2;
13400
13401 len = ptr_end - ptr;
13402 lim = pt < pend ? pt : pend;
13403 i = (int)(lim - ptr);
13404 buf = ALLOCA_N(char, i+2);
13405 code = ptr;
13406 caret = p2 = buf;
13407 if (ptr <= pb) {
13408 while (ptr < pb) {
13409 *p2++ = *ptr++ == '\t' ? '\t' : ' ';
13410 }
13411 *p2++ = '^';
13412 ptr++;
13413 }
13414 if (lim > ptr) {
13415 memset(p2, '~', (lim - ptr));
13416 p2 += (lim - ptr);
13417 }
13418 *p2 = '\0';
13419 rb_str_catf(mesg, "%s%.*s%s\n""%s%s\n",
13420 pre, (int)len, code, post,
13421 pre, caret);
13422 }
13423 if (!errbuf) rb_write_error_str(mesg);
13424}
13425#else
13426static int
13427parser_yyerror(struct parser_params *p, const YYLTYPE *yylloc, const char *msg)
13428{
13429 const char *pcur = 0, *ptok = 0;
13430 if (yylloc &&
13431 p->ruby_sourceline == yylloc->beg_pos.lineno &&
13432 p->ruby_sourceline == yylloc->end_pos.lineno) {
13433 pcur = p->lex.pcur;
13434 ptok = p->lex.ptok;
13435 p->lex.ptok = p->lex.pbeg + yylloc->beg_pos.column;
13436 p->lex.pcur = p->lex.pbeg + yylloc->end_pos.column;
13437 }
13438 dispatch1(parse_error, STR_NEW2(msg));
13439 ripper_error(p);
13440 if (pcur) {
13441 p->lex.ptok = ptok;
13442 p->lex.pcur = pcur;
13443 }
13444 return 0;
13445}
13446
13447static inline void
13448parser_show_error_line(struct parser_params *p, const YYLTYPE *yylloc)
13449{
13450}
13451#endif /* !RIPPER */
13452
13453#ifndef RIPPER
13454static int
13455vtable_size(const struct vtable *tbl)
13456{
13457 if (!DVARS_TERMINAL_P(tbl)) {
13458 return tbl->pos;
13459 }
13460 else {
13461 return 0;
13462 }
13463}
13464#endif
13465
13466static struct vtable *
13467vtable_alloc_gen(struct parser_params *p, int line, struct vtable *prev)
13468{
13469 struct vtable *tbl = ALLOC(struct vtable);
13470 tbl->pos = 0;
13471 tbl->capa = 8;
13472 tbl->tbl = ALLOC_N(ID, tbl->capa);
13473 tbl->prev = prev;
13474#ifndef RIPPER
13475 if (p->debug) {
13476 rb_parser_printf(p, "vtable_alloc:%d: %p\n", line, (void *)tbl);
13477 }
13478#endif
13479 return tbl;
13480}
13481#define vtable_alloc(prev) vtable_alloc_gen(p, __LINE__, prev)
13482
13483static void
13484vtable_free_gen(struct parser_params *p, int line, const char *name,
13485 struct vtable *tbl)
13486{
13487#ifndef RIPPER
13488 if (p->debug) {
13489 rb_parser_printf(p, "vtable_free:%d: %s(%p)\n", line, name, (void *)tbl);
13490 }
13491#endif
13492 if (!DVARS_TERMINAL_P(tbl)) {
13493 if (tbl->tbl) {
13494 ruby_sized_xfree(tbl->tbl, tbl->capa * sizeof(ID));
13495 }
13496 ruby_sized_xfree(tbl, sizeof(tbl));
13497 }
13498}
13499#define vtable_free(tbl) vtable_free_gen(p, __LINE__, #tbl, tbl)
13500
13501static void
13502vtable_add_gen(struct parser_params *p, int line, const char *name,
13503 struct vtable *tbl, ID id)
13504{
13505#ifndef RIPPER
13506 if (p->debug) {
13507 rb_parser_printf(p, "vtable_add:%d: %s(%p), %s\n",
13508 line, name, (void *)tbl, rb_id2name(id));
13509 }
13510#endif
13511 if (DVARS_TERMINAL_P(tbl)) {
13512 rb_parser_fatal(p, "vtable_add: vtable is not allocated (%p)", (void *)tbl);
13513 return;
13514 }
13515 if (tbl->pos == tbl->capa) {
13516 tbl->capa = tbl->capa * 2;
13517 SIZED_REALLOC_N(tbl->tbl, ID, tbl->capa, tbl->pos);
13518 }
13519 tbl->tbl[tbl->pos++] = id;
13520}
13521#define vtable_add(tbl, id) vtable_add_gen(p, __LINE__, #tbl, tbl, id)
13522
13523#ifndef RIPPER
13524static void
13525vtable_pop_gen(struct parser_params *p, int line, const char *name,
13526 struct vtable *tbl, int n)
13527{
13528 if (p->debug) {
13529 rb_parser_printf(p, "vtable_pop:%d: %s(%p), %d\n",
13530 line, name, (void *)tbl, n);
13531 }
13532 if (tbl->pos < n) {
13533 rb_parser_fatal(p, "vtable_pop: unreachable (%d < %d)", tbl->pos, n);
13534 return;
13535 }
13536 tbl->pos -= n;
13537}
13538#define vtable_pop(tbl, n) vtable_pop_gen(p, __LINE__, #tbl, tbl, n)
13539#endif
13540
13541static int
13542vtable_included(const struct vtable * tbl, ID id)
13543{
13544 int i;
13545
13546 if (!DVARS_TERMINAL_P(tbl)) {
13547 for (i = 0; i < tbl->pos; i++) {
13548 if (tbl->tbl[i] == id) {
13549 return i+1;
13550 }
13551 }
13552 }
13553 return 0;
13554}
13555
13556static void parser_prepare(struct parser_params *p);
13557
13558#ifndef RIPPER
13559static NODE *parser_append_options(struct parser_params *p, NODE *node);
13560
13561static VALUE
13562debug_lines(VALUE fname)
13563{
13564 ID script_lines;
13565 CONST_ID(script_lines, "SCRIPT_LINES__");
13566 if (rb_const_defined_at(rb_cObject, script_lines)) {
13567 VALUE hash = rb_const_get_at(rb_cObject, script_lines);
13568 if (RB_TYPE_P(hash, T_HASH)) {
13569 VALUE lines = rb_ary_new();
13570 rb_hash_aset(hash, fname, lines);
13571 return lines;
13572 }
13573 }
13574 return 0;
13575}
13576
13577static int
13578e_option_supplied(struct parser_params *p)
13579{
13580 return strcmp(p->ruby_sourcefile, "-e") == 0;
13581}
13582
13583static VALUE
13584yycompile0(VALUE arg)
13585{
13586 int n;
13587 NODE *tree;
13588 struct parser_params *p = (struct parser_params *)arg;
13589 VALUE cov = Qfalse;
13590
13593 if (p->debug_lines && p->ruby_sourceline > 0) {
13594 VALUE str = STR_NEW0();
13595 n = p->ruby_sourceline;
13596 do {
13598 } while (--n);
13599 }
13600
13601 if (!e_option_supplied(p)) {
13602 cov = Qtrue;
13603 }
13604 }
13605
13606 parser_prepare(p);
13607#define RUBY_DTRACE_PARSE_HOOK(name) \
13608 if (RUBY_DTRACE_PARSE_##name##_ENABLED()) { \
13609 RUBY_DTRACE_PARSE_##name(p->ruby_sourcefile, p->ruby_sourceline); \
13610 }
13612 n = yyparse(p);
13614 p->debug_lines = 0;
13615
13616 p->lex.strterm = 0;
13617 p->lex.pcur = p->lex.pbeg = p->lex.pend = 0;
13618 p->lex.prevline = p->lex.lastline = p->lex.nextline = 0;
13619 if (n || p->error_p) {
13620 VALUE mesg = p->error_buffer;
13621 if (!mesg) {
13623 }
13624 rb_set_errinfo(mesg);
13625 return FALSE;
13626 }
13627 tree = p->eval_tree;
13628 if (!tree) {
13629 tree = NEW_NIL(&NULL_LOC);
13630 }
13631 else {
13632 VALUE opt = p->compile_option;
13633 NODE *prelude;
13634 NODE *body = parser_append_options(p, tree->nd_body);
13635 if (!opt) opt = rb_obj_hide(rb_ident_hash_new());
13636 rb_hash_aset(opt, rb_sym_intern_ascii_cstr("coverage_enabled"), cov);
13637 prelude = block_append(p, p->eval_tree_begin, body);
13638 tree->nd_body = prelude;
13639 RB_OBJ_WRITE(p->ast, &p->ast->body.compile_option, opt);
13640 }
13641 p->ast->body.root = tree;
13642 p->ast->body.line_count = p->line_count;
13643 return TRUE;
13644}
13645
13646static rb_ast_t *
13647yycompile(VALUE vparser, struct parser_params *p, VALUE fname, int line)
13648{
13649 rb_ast_t *ast;
13650 if (NIL_P(fname)) {
13652 p->ruby_sourcefile = "(none)";
13653 }
13654 else {
13656 p->ruby_sourcefile = StringValueCStr(fname);
13657 }
13658 p->ruby_sourceline = line - 1;
13659
13660 p->ast = ast = rb_ast_new();
13661 rb_suppress_tracing(yycompile0, (VALUE)p);
13662 p->ast = 0;
13663 RB_GC_GUARD(vparser); /* prohibit tail call optimization */
13664
13665 return ast;
13666}
13667#endif /* !RIPPER */
13668
13669static rb_encoding *
13670must_be_ascii_compatible(VALUE s)
13671{
13673 if (!rb_enc_asciicompat(enc)) {
13674 rb_raise(rb_eArgError, "invalid source encoding");
13675 }
13676 return enc;
13677}
13678
13679static VALUE
13680lex_get_str(struct parser_params *p, VALUE s)
13681{
13682 char *beg, *end, *start;
13683 long len;
13684
13685 beg = RSTRING_PTR(s);
13686 len = RSTRING_LEN(s);
13687 start = beg;
13688 if (p->lex.gets_.ptr) {
13689 if (len == p->lex.gets_.ptr) return Qnil;
13690 beg += p->lex.gets_.ptr;
13691 len -= p->lex.gets_.ptr;
13692 }
13693 end = memchr(beg, '\n', len);
13694 if (end) len = ++end - beg;
13695 p->lex.gets_.ptr += len;
13696 return rb_str_subseq(s, beg - start, len);
13697}
13698
13699static VALUE
13700lex_getline(struct parser_params *p)
13701{
13702 VALUE line = (*p->lex.gets)(p, p->lex.input);
13703 if (NIL_P(line)) return line;
13704 must_be_ascii_compatible(line);
13705#ifndef RIPPER
13706 if (p->debug_lines) {
13707 rb_enc_associate(line, p->enc);
13708 rb_ary_push(p->debug_lines, line);
13709 }
13710#endif
13711 p->line_count++;
13712 return line;
13713}
13714
13715static const rb_data_type_t parser_data_type;
13716
13717#ifndef RIPPER
13718static rb_ast_t*
13719parser_compile_string(VALUE vparser, VALUE fname, VALUE s, int line)
13720{
13721 struct parser_params *p;
13722
13723 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, p);
13724
13725 p->lex.gets = lex_get_str;
13726 p->lex.gets_.ptr = 0;
13727 p->lex.input = rb_str_new_frozen(s);
13728 p->lex.pbeg = p->lex.pcur = p->lex.pend = 0;
13729
13730 return yycompile(vparser, p, fname, line);
13731}
13732
13733rb_ast_t*
13734rb_parser_compile_string(VALUE vparser, const char *f, VALUE s, int line)
13735{
13737}
13738
13739rb_ast_t*
13741{
13742 must_be_ascii_compatible(s);
13743 return parser_compile_string(vparser, f, s, line);
13744}
13745
13747
13748static VALUE
13749lex_io_gets(struct parser_params *p, VALUE io)
13750{
13751 return rb_io_gets_internal(io);
13752}
13753
13754rb_ast_t*
13755rb_parser_compile_file_path(VALUE vparser, VALUE fname, VALUE file, int start)
13756{
13757 struct parser_params *p;
13758
13759 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, p);
13760
13761 p->lex.gets = lex_io_gets;
13762 p->lex.input = file;
13763 p->lex.pbeg = p->lex.pcur = p->lex.pend = 0;
13764
13765 return yycompile(vparser, p, fname, start);
13766}
13767
13768static VALUE
13769lex_generic_gets(struct parser_params *p, VALUE input)
13770{
13771 return (*p->lex.gets_.call)(input, p->line_count);
13772}
13773
13774rb_ast_t*
13775rb_parser_compile_generic(VALUE vparser, VALUE (*lex_gets)(VALUE, int), VALUE fname, VALUE input, int start)
13776{
13777 struct parser_params *p;
13778
13779 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, p);
13780
13781 p->lex.gets = lex_generic_gets;
13782 p->lex.gets_.call = lex_gets;
13783 p->lex.input = input;
13784 p->lex.pbeg = p->lex.pcur = p->lex.pend = 0;
13785
13786 return yycompile(vparser, p, fname, start);
13787}
13788#endif /* !RIPPER */
13789
13790#define STR_FUNC_ESCAPE 0x01
13791#define STR_FUNC_EXPAND 0x02
13792#define STR_FUNC_REGEXP 0x04
13793#define STR_FUNC_QWORDS 0x08
13794#define STR_FUNC_SYMBOL 0x10
13795#define STR_FUNC_INDENT 0x20
13796#define STR_FUNC_LABEL 0x40
13797#define STR_FUNC_LIST 0x4000
13798#define STR_FUNC_TERM 0x8000
13799
13811
13812static VALUE
13813parser_str_new(const char *ptr, long len, rb_encoding *enc, int func, rb_encoding *enc0)
13814{
13815 VALUE str;
13816
13818 if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
13820 }
13821 else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
13823 }
13824 }
13825
13826 return str;
13827}
13828
13829#define lex_goto_eol(p) ((p)->lex.pcur = (p)->lex.pend)
13830#define lex_eol_p(p) ((p)->lex.pcur >= (p)->lex.pend)
13831#define lex_eol_n_p(p,n) ((p)->lex.pcur+(n) >= (p)->lex.pend)
13832#define peek(p,c) peek_n(p, (c), 0)
13833#define peek_n(p,c,n) (!lex_eol_n_p(p, n) && (c) == (unsigned char)(p)->lex.pcur[n])
13834#define peekc(p) peekc_n(p, 0)
13835#define peekc_n(p,n) (lex_eol_n_p(p, n) ? -1 : (unsigned char)(p)->lex.pcur[n])
13836
13837#ifdef RIPPER
13838static void
13839add_delayed_token(struct parser_params *p, const char *tok, const char *end)
13840{
13841 if (tok < end) {
13842 if (!has_delayed_token(p)) {
13843 p->delayed.token = rb_str_buf_new(end - tok);
13844 rb_enc_associate(p->delayed.token, p->enc);
13845 p->delayed.line = p->ruby_sourceline;
13846 p->delayed.col = rb_long2int(tok - p->lex.pbeg);
13847 }
13848 rb_str_buf_cat(p->delayed.token, tok, end - tok);
13849 p->lex.ptok = end;
13850 }
13851}
13852#else
13853#define add_delayed_token(p, tok, end) ((void)(tok), (void)(end))
13854#endif
13855
13856static int
13857nextline(struct parser_params *p)
13858{
13859 VALUE v = p->lex.nextline;
13860 p->lex.nextline = 0;
13861 if (!v) {
13862 if (p->eofp)
13863 return -1;
13864
13865 if (p->lex.pend > p->lex.pbeg && *(p->lex.pend-1) != '\n') {
13866 goto end_of_input;
13867 }
13868
13869 if (!p->lex.input || NIL_P(v = lex_getline(p))) {
13870 end_of_input:
13871 p->eofp = 1;
13872 lex_goto_eol(p);
13873 return -1;
13874 }
13875 p->cr_seen = FALSE;
13876 }
13877 else if (NIL_P(v)) {
13878 /* after here-document without terminator */
13879 goto end_of_input;
13880 }
13881 add_delayed_token(p, p->lex.ptok, p->lex.pend);
13882 if (p->heredoc_end > 0) {
13884 p->heredoc_end = 0;
13885 }
13886 p->ruby_sourceline++;
13887 p->lex.pbeg = p->lex.pcur = RSTRING_PTR(v);
13888 p->lex.pend = p->lex.pcur + RSTRING_LEN(v);
13889 token_flush(p);
13890 p->lex.prevline = p->lex.lastline;
13891 p->lex.lastline = v;
13892 return 0;
13893}
13894
13895static int
13896parser_cr(struct parser_params *p, int c)
13897{
13898 if (peek(p, '\n')) {
13899 p->lex.pcur++;
13900 c = '\n';
13901 }
13902 else if (!p->cr_seen) {
13903 p->cr_seen = TRUE;
13904 /* carried over with p->lex.nextline for nextc() */
13905 rb_warn0("encountered \\r in middle of line, treated as a mere space");
13906 }
13907 return c;
13908}
13909
13910static inline int
13911nextc(struct parser_params *p)
13912{
13913 int c;
13914
13915 if (UNLIKELY((p->lex.pcur == p->lex.pend) || p->eofp || RTEST(p->lex.nextline))) {
13916 if (nextline(p)) return -1;
13917 }
13918 c = (unsigned char)*p->lex.pcur++;
13919 if (UNLIKELY(c == '\r')) {
13920 c = parser_cr(p, c);
13921 }
13922
13923 return c;
13924}
13925
13926static void
13927pushback(struct parser_params *p, int c)
13928{
13929 if (c == -1) return;
13930 p->lex.pcur--;
13931 if (p->lex.pcur > p->lex.pbeg && p->lex.pcur[0] == '\n' && p->lex.pcur[-1] == '\r') {
13932 p->lex.pcur--;
13933 }
13934}
13935
13936#define was_bol(p) ((p)->lex.pcur == (p)->lex.pbeg + 1)
13937
13938#define tokfix(p) ((p)->tokenbuf[(p)->tokidx]='\0')
13939#define tok(p) (p)->tokenbuf
13940#define toklen(p) (p)->tokidx
13941
13942static int
13943looking_at_eol_p(struct parser_params *p)
13944{
13945 const char *ptr = p->lex.pcur;
13946 while (ptr < p->lex.pend) {
13947 int c = (unsigned char)*ptr++;
13948 int eol = (c == '\n' || c == '#');
13949 if (eol || !ISSPACE(c)) {
13950 return eol;
13951 }
13952 }
13953 return TRUE;
13954}
13955
13956static char*
13957newtok(struct parser_params *p)
13958{
13959 p->tokidx = 0;
13960 p->tokline = p->ruby_sourceline;
13961 if (!p->tokenbuf) {
13962 p->toksiz = 60;
13963 p->tokenbuf = ALLOC_N(char, 60);
13964 }
13965 if (p->toksiz > 4096) {
13966 p->toksiz = 60;
13967 REALLOC_N(p->tokenbuf, char, 60);
13968 }
13969 return p->tokenbuf;
13970}
13971
13972static char *
13973tokspace(struct parser_params *p, int n)
13974{
13975 p->tokidx += n;
13976
13977 if (p->tokidx >= p->toksiz) {
13978 do {p->toksiz *= 2;} while (p->toksiz < p->tokidx);
13979 REALLOC_N(p->tokenbuf, char, p->toksiz);
13980 }
13981 return &p->tokenbuf[p->tokidx-n];
13982}
13983
13984static void
13985tokadd(struct parser_params *p, int c)
13986{
13987 p->tokenbuf[p->tokidx++] = (char)c;
13988 if (p->tokidx >= p->toksiz) {
13989 p->toksiz *= 2;
13990 REALLOC_N(p->tokenbuf, char, p->toksiz);
13991 }
13992}
13993
13994static int
13995tok_hex(struct parser_params *p, size_t *numlen)
13996{
13997 int c;
13998
13999 c = scan_hex(p->lex.pcur, 2, numlen);
14000 if (!*numlen) {
14001 yyerror0("invalid hex escape");
14002 token_flush(p);
14003 return 0;
14004 }
14005 p->lex.pcur += *numlen;
14006 return c;
14007}
14008
14009#define tokcopy(p, n) memcpy(tokspace(p, n), (p)->lex.pcur - (n), (n))
14010
14011static int
14012escaped_control_code(int c)
14013{
14014 int c2 = 0;
14015 switch (c) {
14016 case ' ':
14017 c2 = 's';
14018 break;
14019 case '\n':
14020 c2 = 'n';
14021 break;
14022 case '\t':
14023 c2 = 't';
14024 break;
14025 case '\v':
14026 c2 = 'v';
14027 break;
14028 case '\r':
14029 c2 = 'r';
14030 break;
14031 case '\f':
14032 c2 = 'f';
14033 break;
14034 }
14035 return c2;
14036}
14037
14038#define WARN_SPACE_CHAR(c, prefix) \
14039 rb_warn1("invalid character syntax; use "prefix"\\%c", WARN_I(c2))
14040
14041static int
14042tokadd_codepoint(struct parser_params *p, rb_encoding **encp,
14043 int regexp_literal, int wide)
14044{
14045 size_t numlen;
14046 int codepoint = scan_hex(p->lex.pcur, wide ? p->lex.pend - p->lex.pcur : 4, &numlen);
14047 literal_flush(p, p->lex.pcur);
14048 p->lex.pcur += numlen;
14049 if (wide ? (numlen == 0 || numlen > 6) : (numlen < 4)) {
14050 yyerror0("invalid Unicode escape");
14051 return wide && numlen > 0;
14052 }
14053 if (codepoint > 0x10ffff) {
14054 yyerror0("invalid Unicode codepoint (too large)");
14055 return wide;
14056 }
14057 if ((codepoint & 0xfffff800) == 0xd800) {
14058 yyerror0("invalid Unicode codepoint");
14059 return wide;
14060 }
14061 if (regexp_literal) {
14062 tokcopy(p, (int)numlen);
14063 }
14064 else if (codepoint >= 0x80) {
14065 rb_encoding *utf8 = rb_utf8_encoding();
14066 if (*encp && utf8 != *encp) {
14067 YYLTYPE loc = RUBY_INIT_YYLLOC();
14068 compile_error(p, "UTF-8 mixed within %s source", rb_enc_name(*encp));
14069 parser_show_error_line(p, &loc);
14070 return wide;
14071 }
14072 *encp = utf8;
14073 tokaddmbc(p, codepoint, *encp);
14074 }
14075 else {
14076 tokadd(p, codepoint);
14077 }
14078 return TRUE;
14079}
14080
14081/* return value is for ?\u3042 */
14082static void
14083tokadd_utf8(struct parser_params *p, rb_encoding **encp,
14084 int term, int symbol_literal, int regexp_literal)
14085{
14086 /*
14087 * If `term` is not -1, then we allow multiple codepoints in \u{}
14088 * upto `term` byte, otherwise we're parsing a character literal.
14089 * And then add the codepoints to the current token.
14090 */
14091 static const char multiple_codepoints[] = "Multiple codepoints at single character literal";
14092
14093 const int open_brace = '{', close_brace = '}';
14094
14095 if (regexp_literal) { tokadd(p, '\\'); tokadd(p, 'u'); }
14096
14097 if (peek(p, open_brace)) { /* handle \u{...} form */
14098 const char *second = NULL;
14099 int c, last = nextc(p);
14100 if (p->lex.pcur >= p->lex.pend) goto unterminated;
14101 while (ISSPACE(c = *p->lex.pcur) && ++p->lex.pcur < p->lex.pend);
14102 while (c != close_brace) {
14103 if (c == term) goto unterminated;
14104 if (second == multiple_codepoints)
14105 second = p->lex.pcur;
14106 if (regexp_literal) tokadd(p, last);
14107 if (!tokadd_codepoint(p, encp, regexp_literal, TRUE)) {
14108 break;
14109 }
14110 while (ISSPACE(c = *p->lex.pcur)) {
14111 if (++p->lex.pcur >= p->lex.pend) goto unterminated;
14112 last = c;
14113 }
14114 if (term == -1 && !second)
14115 second = multiple_codepoints;
14116 }
14117
14118 if (c != close_brace) {
14119 unterminated:
14120 token_flush(p);
14121 yyerror0("unterminated Unicode escape");
14122 return;
14123 }
14124 if (second && second != multiple_codepoints) {
14125 const char *pcur = p->lex.pcur;
14126 p->lex.pcur = second;
14128 token_flush(p);
14129 p->lex.pcur = pcur;
14130 yyerror0(multiple_codepoints);
14131 token_flush(p);
14132 }
14133
14134 if (regexp_literal) tokadd(p, close_brace);
14135 nextc(p);
14136 }
14137 else { /* handle \uxxxx form */
14138 if (!tokadd_codepoint(p, encp, regexp_literal, FALSE)) {
14139 token_flush(p);
14140 return;
14141 }
14142 }
14143}
14144
14145#define ESCAPE_CONTROL 1
14146#define ESCAPE_META 2
14147
14148static int
14149read_escape(struct parser_params *p, int flags, rb_encoding **encp)
14150{
14151 int c;
14152 size_t numlen;
14153
14154 switch (c = nextc(p)) {
14155 case '\\': /* Backslash */
14156 return c;
14157
14158 case 'n': /* newline */
14159 return '\n';
14160
14161 case 't': /* horizontal tab */
14162 return '\t';
14163
14164 case 'r': /* carriage-return */
14165 return '\r';
14166
14167 case 'f': /* form-feed */
14168 return '\f';
14169
14170 case 'v': /* vertical tab */
14171 return '\13';
14172
14173 case 'a': /* alarm(bell) */
14174 return '\007';
14175
14176 case 'e': /* escape */
14177 return 033;
14178
14179 case '0': case '1': case '2': case '3': /* octal constant */
14180 case '4': case '5': case '6': case '7':
14181 pushback(p, c);
14182 c = scan_oct(p->lex.pcur, 3, &numlen);
14183 p->lex.pcur += numlen;
14184 return c;
14185
14186 case 'x': /* hex constant */
14187 c = tok_hex(p, &numlen);
14188 if (numlen == 0) return 0;
14189 return c;
14190
14191 case 'b': /* backspace */
14192 return '\010';
14193
14194 case 's': /* space */
14195 return ' ';
14196
14197 case 'M':
14198 if (flags & ESCAPE_META) goto eof;
14199 if ((c = nextc(p)) != '-') {
14200 goto eof;
14201 }
14202 if ((c = nextc(p)) == '\\') {
14203 if (peek(p, 'u')) goto eof;
14204 return read_escape(p, flags|ESCAPE_META, encp) | 0x80;
14205 }
14206 else if (c == -1 || !ISASCII(c)) goto eof;
14207 else {
14208 int c2 = escaped_control_code(c);
14209 if (c2) {
14210 if (ISCNTRL(c) || !(flags & ESCAPE_CONTROL)) {
14211 WARN_SPACE_CHAR(c2, "\\M-");
14212 }
14213 else {
14214 WARN_SPACE_CHAR(c2, "\\C-\\M-");
14215 }
14216 }
14217 else if (ISCNTRL(c)) goto eof;
14218 return ((c & 0xff) | 0x80);
14219 }
14220
14221 case 'C':
14222 if ((c = nextc(p)) != '-') {
14223 goto eof;
14224 }
14225 case 'c':
14226 if (flags & ESCAPE_CONTROL) goto eof;
14227 if ((c = nextc(p))== '\\') {
14228 if (peek(p, 'u')) goto eof;
14229 c = read_escape(p, flags|ESCAPE_CONTROL, encp);
14230 }
14231 else if (c == '?')
14232 return 0177;
14233 else if (c == -1 || !ISASCII(c)) goto eof;
14234 else {
14235 int c2 = escaped_control_code(c);
14236 if (c2) {
14237 if (ISCNTRL(c)) {
14238 if (flags & ESCAPE_META) {
14239 WARN_SPACE_CHAR(c2, "\\M-");
14240 }
14241 else {
14242 WARN_SPACE_CHAR(c2, "");
14243 }
14244 }
14245 else {
14246 if (flags & ESCAPE_META) {
14247 WARN_SPACE_CHAR(c2, "\\M-\\C-");
14248 }
14249 else {
14250 WARN_SPACE_CHAR(c2, "\\C-");
14251 }
14252 }
14253 }
14254 else if (ISCNTRL(c)) goto eof;
14255 }
14256 return c & 0x9f;
14257
14258 eof:
14259 case -1:
14260 yyerror0("Invalid escape character syntax");
14261 token_flush(p);
14262 return '\0';
14263
14264 default:
14265 return c;
14266 }
14267}
14268
14269static void
14270tokaddmbc(struct parser_params *p, int c, rb_encoding *enc)
14271{
14272 int len = rb_enc_codelen(c, enc);
14273 rb_enc_mbcput(c, tokspace(p, len), enc);
14274}
14275
14276static int
14277tokadd_escape(struct parser_params *p, rb_encoding **encp)
14278{
14279 int c;
14280 int flags = 0;
14281 size_t numlen;
14282
14283 first:
14284 switch (c = nextc(p)) {
14285 case '\n':
14286 return 0; /* just ignore */
14287
14288 case '0': case '1': case '2': case '3': /* octal constant */
14289 case '4': case '5': case '6': case '7':
14290 {
14291 ruby_scan_oct(--p->lex.pcur, 3, &numlen);
14292 if (numlen == 0) goto eof;
14293 p->lex.pcur += numlen;
14294 tokcopy(p, (int)numlen + 1);
14295 }
14296 return 0;
14297
14298 case 'x': /* hex constant */
14299 {
14300 tok_hex(p, &numlen);
14301 if (numlen == 0) return -1;
14302 tokcopy(p, (int)numlen + 2);
14303 }
14304 return 0;
14305
14306 case 'M':
14307 if (flags & ESCAPE_META) goto eof;
14308 if ((c = nextc(p)) != '-') {
14309 pushback(p, c);
14310 goto eof;
14311 }
14312 tokcopy(p, 3);
14313 flags |= ESCAPE_META;
14314 goto escaped;
14315
14316 case 'C':
14317 if (flags & ESCAPE_CONTROL) goto eof;
14318 if ((c = nextc(p)) != '-') {
14319 pushback(p, c);
14320 goto eof;
14321 }
14322 tokcopy(p, 3);
14323 goto escaped;
14324
14325 case 'c':
14326 if (flags & ESCAPE_CONTROL) goto eof;
14327 tokcopy(p, 2);
14328 flags |= ESCAPE_CONTROL;
14329 escaped:
14330 if ((c = nextc(p)) == '\\') {
14331 goto first;
14332 }
14333 else if (c == -1) goto eof;
14334 tokadd(p, c);
14335 return 0;
14336
14337 eof:
14338 case -1:
14339 yyerror0("Invalid escape character syntax");
14340 token_flush(p);
14341 return -1;
14342
14343 default:
14344 tokadd(p, '\\');
14345 tokadd(p, c);
14346 }
14347 return 0;
14348}
14349
14350static int
14351regx_options(struct parser_params *p)
14352{
14353 int kcode = 0;
14354 int kopt = 0;
14355 int options = 0;
14356 int c, opt, kc;
14357
14358 newtok(p);
14359 while (c = nextc(p), ISALPHA(c)) {
14360 if (c == 'o') {
14361 options |= RE_OPTION_ONCE;
14362 }
14363 else if (rb_char_to_option_kcode(c, &opt, &kc)) {
14364 if (kc >= 0) {
14365 if (kc != rb_ascii8bit_encindex()) kcode = c;
14366 kopt = opt;
14367 }
14368 else {
14369 options |= opt;
14370 }
14371 }
14372 else {
14373 tokadd(p, c);
14374 }
14375 }
14376 options |= kopt;
14377 pushback(p, c);
14378 if (toklen(p)) {
14379 YYLTYPE loc = RUBY_INIT_YYLLOC();
14380 tokfix(p);
14381 compile_error(p, "unknown regexp option%s - %*s",
14382 toklen(p) > 1 ? "s" : "", toklen(p), tok(p));
14383 parser_show_error_line(p, &loc);
14384 }
14385 return options | RE_OPTION_ENCODING(kcode);
14386}
14387
14388static int
14389tokadd_mbchar(struct parser_params *p, int c)
14390{
14391 int len = parser_precise_mbclen(p, p->lex.pcur-1);
14392 if (len < 0) return -1;
14393 tokadd(p, c);
14394 p->lex.pcur += --len;
14395 if (len > 0) tokcopy(p, len);
14396 return c;
14397}
14398
14399static inline int
14400simple_re_meta(int c)
14401{
14402 switch (c) {
14403 case '$': case '*': case '+': case '.':
14404 case '?': case '^': case '|':
14405 case ')': case ']': case '}': case '>':
14406 return TRUE;
14407 default:
14408 return FALSE;
14409 }
14410}
14411
14412static int
14413parser_update_heredoc_indent(struct parser_params *p, int c)
14414{
14415 if (p->heredoc_line_indent == -1) {
14416 if (c == '\n') p->heredoc_line_indent = 0;
14417 }
14418 else {
14419 if (c == ' ') {
14421 return TRUE;
14422 }
14423 else if (c == '\t') {
14424 int w = (p->heredoc_line_indent / TAB_WIDTH) + 1;
14426 return TRUE;
14427 }
14428 else if (c != '\n') {
14429 if (p->heredoc_indent > p->heredoc_line_indent) {
14431 }
14432 p->heredoc_line_indent = -1;
14433 }
14434 }
14435 return FALSE;
14436}
14437
14438static void
14439parser_mixed_error(struct parser_params *p, rb_encoding *enc1, rb_encoding *enc2)
14440{
14441 YYLTYPE loc = RUBY_INIT_YYLLOC();
14442 const char *n1 = rb_enc_name(enc1), *n2 = rb_enc_name(enc2);
14443 compile_error(p, "%s mixed within %s source", n1, n2);
14444 parser_show_error_line(p, &loc);
14445}
14446
14447static void
14448parser_mixed_escape(struct parser_params *p, const char *beg, rb_encoding *enc1, rb_encoding *enc2)
14449{
14450 const char *pos = p->lex.pcur;
14451 p->lex.pcur = beg;
14452 parser_mixed_error(p, enc1, enc2);
14453 p->lex.pcur = pos;
14454}
14455
14456static int
14457tokadd_string(struct parser_params *p,
14458 int func, int term, int paren, long *nest,
14459 rb_encoding **encp, rb_encoding **enc)
14460{
14461 int c;
14462 bool erred = false;
14463
14464#define mixed_error(enc1, enc2) \
14465 (void)(erred || (parser_mixed_error(p, enc1, enc2), erred = true))
14466#define mixed_escape(beg, enc1, enc2) \
14467 (void)(erred || (parser_mixed_escape(p, beg, enc1, enc2), erred = true))
14468
14469 while ((c = nextc(p)) != -1) {
14470 if (p->heredoc_indent > 0) {
14471 parser_update_heredoc_indent(p, c);
14472 }
14473
14474 if (paren && c == paren) {
14475 ++*nest;
14476 }
14477 else if (c == term) {
14478 if (!nest || !*nest) {
14479 pushback(p, c);
14480 break;
14481 }
14482 --*nest;
14483 }
14484 else if ((func & STR_FUNC_EXPAND) && c == '#' && p->lex.pcur < p->lex.pend) {
14485 int c2 = *p->lex.pcur;
14486 if (c2 == '$' || c2 == '@' || c2 == '{') {
14487 pushback(p, c);
14488 break;
14489 }
14490 }
14491 else if (c == '\\') {
14492 literal_flush(p, p->lex.pcur - 1);
14493 c = nextc(p);
14494 switch (c) {
14495 case '\n':
14496 if (func & STR_FUNC_QWORDS) break;
14497 if (func & STR_FUNC_EXPAND) {
14498 if (!(func & STR_FUNC_INDENT) || (p->heredoc_indent < 0))
14499 continue;
14500 if (c == term) {
14501 c = '\\';
14502 goto terminate;
14503 }
14504 }
14505 tokadd(p, '\\');
14506 break;
14507
14508 case '\\':
14509 if (func & STR_FUNC_ESCAPE) tokadd(p, c);
14510 break;
14511
14512 case 'u':
14513 if ((func & STR_FUNC_EXPAND) == 0) {
14514 tokadd(p, '\\');
14515 break;
14516 }
14517 tokadd_utf8(p, enc, term,
14518 func & STR_FUNC_SYMBOL,
14519 func & STR_FUNC_REGEXP);
14520 continue;
14521
14522 default:
14523 if (c == -1) return -1;
14524 if (!ISASCII(c)) {
14525 if ((func & STR_FUNC_EXPAND) == 0) tokadd(p, '\\');
14526 goto non_ascii;
14527 }
14528 if (func & STR_FUNC_REGEXP) {
14529 if (c == term && !simple_re_meta(c)) {
14530 tokadd(p, c);
14531 continue;
14532 }
14533 pushback(p, c);
14534 if ((c = tokadd_escape(p, enc)) < 0)
14535 return -1;
14536 if (*enc && *enc != *encp) {
14537 mixed_escape(p->lex.ptok+2, *enc, *encp);
14538 }
14539 continue;
14540 }
14541 else if (func & STR_FUNC_EXPAND) {
14542 pushback(p, c);
14543 if (func & STR_FUNC_ESCAPE) tokadd(p, '\\');
14544 c = read_escape(p, 0, enc);
14545 }
14546 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
14547 /* ignore backslashed spaces in %w */
14548 }
14549 else if (c != term && !(paren && c == paren)) {
14550 tokadd(p, '\\');
14551 pushback(p, c);
14552 continue;
14553 }
14554 }
14555 }
14556 else if (!parser_isascii(p)) {
14557 non_ascii:
14558 if (!*enc) {
14559 *enc = *encp;
14560 }
14561 else if (*enc != *encp) {
14562 mixed_error(*enc, *encp);
14563 continue;
14564 }
14565 if (tokadd_mbchar(p, c) == -1) return -1;
14566 continue;
14567 }
14568 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
14569 pushback(p, c);
14570 break;
14571 }
14572 if (c & 0x80) {
14573 if (!*enc) {
14574 *enc = *encp;
14575 }
14576 else if (*enc != *encp) {
14577 mixed_error(*enc, *encp);
14578 continue;
14579 }
14580 }
14581 tokadd(p, c);
14582 }
14583 terminate:
14584 if (*enc) *encp = *enc;
14585 return c;
14586}
14587
14588static inline rb_strterm_t *
14589new_strterm(VALUE v1, VALUE v2, VALUE v3, VALUE v0)
14590{
14591 return (rb_strterm_t*)rb_imemo_new(imemo_parser_strterm, v1, v2, v3, v0);
14592}
14593
14594/* imemo_parser_strterm for literal */
14595#define NEW_STRTERM(func, term, paren) \
14596 new_strterm((VALUE)(func), (VALUE)(paren), (VALUE)(term), 0)
14597
14598#ifdef RIPPER
14599static void
14601{
14602 VALUE content = yylval.val;
14603 if (!ripper_is_node_yylval(content))
14604 content = ripper_new_yylval(p, 0, 0, content);
14605 if (has_delayed_token(p)) {
14606 ptrdiff_t len = p->lex.pcur - p->lex.ptok;
14607 if (len > 0) {
14608 rb_enc_str_buf_cat(p->delayed.token, p->lex.ptok, len, enc);
14609 }
14611 p->lex.ptok = p->lex.pcur;
14612 RNODE(content)->nd_rval = yylval.val;
14613 }
14615 if (yylval.val != content)
14616 RNODE(content)->nd_rval = yylval.val;
14617 yylval.val = content;
14618}
14619#else
14620#define flush_string_content(p, enc) ((void)(enc))
14621#endif
14622
14623RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20 + 31) / 32];
14624/* this can be shared with ripper, since it's independent from struct
14625 * parser_params. */
14626#ifndef RIPPER
14627#define BIT(c, idx) (((c) / 32 - 1 == idx) ? (1U << ((c) % 32)) : 0)
14628#define SPECIAL_PUNCT(idx) ( \
14629 BIT('~', idx) | BIT('*', idx) | BIT('$', idx) | BIT('?', idx) | \
14630 BIT('!', idx) | BIT('@', idx) | BIT('/', idx) | BIT('\\', idx) | \
14631 BIT(';', idx) | BIT(',', idx) | BIT('.', idx) | BIT('=', idx) | \
14632 BIT(':', idx) | BIT('<', idx) | BIT('>', idx) | BIT('\"', idx) | \
14633 BIT('&', idx) | BIT('`', idx) | BIT('\'', idx) | BIT('+', idx) | \
14634 BIT('0', idx))
14635const unsigned int ruby_global_name_punct_bits[] = {
14636 SPECIAL_PUNCT(0),
14637 SPECIAL_PUNCT(1),
14638 SPECIAL_PUNCT(2),
14639};
14640#undef BIT
14641#undef SPECIAL_PUNCT
14642#endif
14643
14644static enum yytokentype
14645parser_peek_variable_name(struct parser_params *p)
14646{
14647 int c;
14648 const char *ptr = p->lex.pcur;
14649
14650 if (ptr + 1 >= p->lex.pend) return 0;
14651 c = *ptr++;
14652 switch (c) {
14653 case '$':
14654 if ((c = *ptr) == '-') {
14655 if (++ptr >= p->lex.pend) return 0;
14656 c = *ptr;
14657 }
14658 else if (is_global_name_punct(c) || ISDIGIT(c)) {
14659 return tSTRING_DVAR;
14660 }
14661 break;
14662 case '@':
14663 if ((c = *ptr) == '@') {
14664 if (++ptr >= p->lex.pend) return 0;
14665 c = *ptr;
14666 }
14667 break;
14668 case '{':
14669 p->lex.pcur = ptr;
14670 p->command_start = TRUE;
14671 return tSTRING_DBEG;
14672 default:
14673 return 0;
14674 }
14675 if (!ISASCII(c) || c == '_' || ISALPHA(c))
14676 return tSTRING_DVAR;
14677 return 0;
14678}
14679
14680#define IS_ARG() IS_lex_state(EXPR_ARG_ANY)
14681#define IS_END() IS_lex_state(EXPR_END_ANY)
14682#define IS_BEG() (IS_lex_state(EXPR_BEG_ANY) || IS_lex_state_all(EXPR_ARG|EXPR_LABELED))
14683#define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
14684#define IS_LABEL_POSSIBLE() (\
14685 (IS_lex_state(EXPR_LABEL|EXPR_ENDFN) && !cmd_state) || \
14686 IS_ARG())
14687#define IS_LABEL_SUFFIX(n) (peek_n(p, ':',(n)) && !peek_n(p, ':', (n)+1))
14688#define IS_AFTER_OPERATOR() IS_lex_state(EXPR_FNAME | EXPR_DOT)
14689
14690static inline enum yytokentype
14691parser_string_term(struct parser_params *p, int func)
14692{
14693 p->lex.strterm = 0;
14694 if (func & STR_FUNC_REGEXP) {
14695 set_yylval_num(regx_options(p));
14696 dispatch_scan_event(p, tREGEXP_END);
14697 SET_LEX_STATE(EXPR_END);
14698 return tREGEXP_END;
14699 }
14700 if ((func & STR_FUNC_LABEL) && IS_LABEL_SUFFIX(0)) {
14701 nextc(p);
14702 SET_LEX_STATE(EXPR_BEG|EXPR_LABEL);
14703 return tLABEL_END;
14704 }
14705 SET_LEX_STATE(EXPR_END);
14706 return tSTRING_END;
14707}
14708
14709static enum yytokentype
14710parse_string(struct parser_params *p, rb_strterm_literal_t *quote)
14711{
14712 int func = (int)quote->u1.func;
14713 int term = (int)quote->u3.term;
14714 int paren = (int)quote->u2.paren;
14715 int c, space = 0;
14716 rb_encoding *enc = p->enc;
14717 rb_encoding *base_enc = 0;
14718 VALUE lit;
14719
14720 if (func & STR_FUNC_TERM) {
14721 if (func & STR_FUNC_QWORDS) nextc(p); /* delayed term */
14722 SET_LEX_STATE(EXPR_END);
14723 p->lex.strterm = 0;
14724 return func & STR_FUNC_REGEXP ? tREGEXP_END : tSTRING_END;
14725 }
14726 c = nextc(p);
14727 if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
14728 do {c = nextc(p);} while (ISSPACE(c));
14729 space = 1;
14730 }
14731 if (func & STR_FUNC_LIST) {
14732 quote->u1.func &= ~STR_FUNC_LIST;
14733 space = 1;
14734 }
14735 if (c == term && !quote->u0.nest) {
14736 if (func & STR_FUNC_QWORDS) {
14737 quote->u1.func |= STR_FUNC_TERM;
14738 pushback(p, c); /* dispatch the term at tSTRING_END */
14739 add_delayed_token(p, p->lex.ptok, p->lex.pcur);
14740 return ' ';
14741 }
14742 return parser_string_term(p, func);
14743 }
14744 if (space) {
14745 pushback(p, c);
14746 add_delayed_token(p, p->lex.ptok, p->lex.pcur);
14747 return ' ';
14748 }
14749 newtok(p);
14750 if ((func & STR_FUNC_EXPAND) && c == '#') {
14751 int t = parser_peek_variable_name(p);
14752 if (t) return t;
14753 tokadd(p, '#');
14754 c = nextc(p);
14755 }
14756 pushback(p, c);
14757 if (tokadd_string(p, func, term, paren, &quote->u0.nest,
14758 &enc, &base_enc) == -1) {
14759 if (p->eofp) {
14760#ifndef RIPPER
14761# define unterminated_literal(mesg) yyerror0(mesg)
14762#else
14763# define unterminated_literal(mesg) compile_error(p, mesg)
14764#endif
14765 literal_flush(p, p->lex.pcur);
14766 if (func & STR_FUNC_QWORDS) {
14767 /* no content to add, bailing out here */
14768 unterminated_literal("unterminated list meets end of file");
14769 p->lex.strterm = 0;
14770 return tSTRING_END;
14771 }
14772 if (func & STR_FUNC_REGEXP) {
14773 unterminated_literal("unterminated regexp meets end of file");
14774 }
14775 else {
14776 unterminated_literal("unterminated string meets end of file");
14777 }
14778 quote->u1.func |= STR_FUNC_TERM;
14779 }
14780 }
14781
14782 tokfix(p);
14783 lit = STR_NEW3(tok(p), toklen(p), enc, func);
14784 set_yylval_str(lit);
14785 flush_string_content(p, enc);
14786
14787 return tSTRING_CONTENT;
14788}
14789
14790static enum yytokentype
14791heredoc_identifier(struct parser_params *p)
14792{
14793 /*
14794 * term_len is length of `<<"END"` except `END`,
14795 * in this case term_len is 4 (<, <, " and ").
14796 */
14797 long len, offset = p->lex.pcur - p->lex.pbeg;
14798 int c = nextc(p), term, func = 0, quote = 0;
14799 enum yytokentype token = tSTRING_BEG;
14800 int indent = 0;
14801
14802 if (c == '-') {
14803 c = nextc(p);
14804 func = STR_FUNC_INDENT;
14805 offset++;
14806 }
14807 else if (c == '~') {
14808 c = nextc(p);
14809 func = STR_FUNC_INDENT;
14810 offset++;
14811 indent = INT_MAX;
14812 }
14813 switch (c) {
14814 case '\'':
14815 func |= str_squote; goto quoted;
14816 case '"':
14817 func |= str_dquote; goto quoted;
14818 case '`':
14820 func |= str_xquote; goto quoted;
14821
14822 quoted:
14823 quote++;
14824 offset++;
14825 term = c;
14826 len = 0;
14827 while ((c = nextc(p)) != term) {
14828 if (c == -1 || c == '\r' || c == '\n') {
14829 yyerror(NULL, p, "unterminated here document identifier");
14830 return -1;
14831 }
14832 }
14833 break;
14834
14835 default:
14836 if (!parser_is_identchar(p)) {
14837 pushback(p, c);
14838 if (func & STR_FUNC_INDENT) {
14839 pushback(p, indent > 0 ? '~' : '-');
14840 }
14841 return 0;
14842 }
14843 func |= str_dquote;
14844 do {
14845 int n = parser_precise_mbclen(p, p->lex.pcur-1);
14846 if (n < 0) return 0;
14847 p->lex.pcur += --n;
14848 } while ((c = nextc(p)) != -1 && parser_is_identchar(p));
14849 pushback(p, c);
14850 break;
14851 }
14852
14853 len = p->lex.pcur - (p->lex.pbeg + offset) - quote;
14854 if ((unsigned long)len >= HERETERM_LENGTH_MAX)
14855 yyerror(NULL, p, "too long here document identifier");
14857 lex_goto_eol(p);
14858
14859 p->lex.strterm = new_strterm(0, 0, 0, p->lex.lastline);
14862 here->offset = offset;
14863 here->sourceline = p->ruby_sourceline;
14864 here->length = (int)len;
14865 here->quote = quote;
14866 here->func = func;
14867
14868 token_flush(p);
14869 p->heredoc_indent = indent;
14870 p->heredoc_line_indent = 0;
14871 return token;
14872}
14873
14874static void
14875heredoc_restore(struct parser_params *p, rb_strterm_heredoc_t *here)
14876{
14877 VALUE line;
14878
14879 p->lex.strterm = 0;
14880 line = here->lastline;
14881 p->lex.lastline = line;
14882 p->lex.pbeg = RSTRING_PTR(line);
14883 p->lex.pend = p->lex.pbeg + RSTRING_LEN(line);
14884 p->lex.pcur = p->lex.pbeg + here->offset + here->length + here->quote;
14885 p->lex.ptok = p->lex.pbeg + here->offset - here->quote;
14887 p->ruby_sourceline = (int)here->sourceline;
14888 if (p->eofp) p->lex.nextline = Qnil;
14889 p->eofp = 0;
14890}
14891
14892static int
14893dedent_string(VALUE string, int width)
14894{
14895 char *str;
14896 long len;
14897 int i, col = 0;
14898
14899 RSTRING_GETMEM(string, str, len);
14900 for (i = 0; i < len && col < width; i++) {
14901 if (str[i] == ' ') {
14902 col++;
14903 }
14904 else if (str[i] == '\t') {
14905 int n = TAB_WIDTH * (col / TAB_WIDTH + 1);
14906 if (n > width) break;
14907 col = n;
14908 }
14909 else {
14910 break;
14911 }
14912 }
14913 if (!i) return 0;
14914 rb_str_modify(string);
14915 str = RSTRING_PTR(string);
14916 if (RSTRING_LEN(string) != len)
14917 rb_fatal("literal string changed: %+"PRIsVALUE, string);
14918 MEMMOVE(str, str + i, char, len - i);
14919 rb_str_set_len(string, len - i);
14920 return i;
14921}
14922
14923#ifndef RIPPER
14924static NODE *
14925heredoc_dedent(struct parser_params *p, NODE *root)
14926{
14927 NODE *node, *str_node, *prev_node;
14928 int indent = p->heredoc_indent;
14929 VALUE prev_lit = 0;
14930
14931 if (indent <= 0) return root;
14932 p->heredoc_indent = 0;
14933 if (!root) return root;
14934
14935 prev_node = node = str_node = root;
14936 if (nd_type(root) == NODE_LIST) str_node = root->nd_head;
14937
14938 while (str_node) {
14939 VALUE lit = str_node->nd_lit;
14940 if (str_node->flags & NODE_FL_NEWLINE) {
14941 dedent_string(lit, indent);
14942 }
14943 if (!prev_lit) {
14944 prev_lit = lit;
14945 }
14946 else if (!literal_concat0(p, prev_lit, lit)) {
14947 return 0;
14948 }
14949 else {
14950 NODE *end = node->nd_end;
14951 node = prev_node->nd_next = node->nd_next;
14952 if (!node) {
14953 if (nd_type(prev_node) == NODE_DSTR)
14954 nd_set_type(prev_node, NODE_STR);
14955 break;
14956 }
14957 node->nd_end = end;
14958 goto next_str;
14959 }
14960
14961 str_node = 0;
14962 while ((node = (prev_node = node)->nd_next) != 0) {
14963 next_str:
14964 if (nd_type(node) != NODE_LIST) break;
14965 if ((str_node = node->nd_head) != 0) {
14966 enum node_type type = nd_type(str_node);
14967 if (type == NODE_STR || type == NODE_DSTR) break;
14968 prev_lit = 0;
14969 str_node = 0;
14970 }
14971 }
14972 }
14973 return root;
14974}
14975#else /* RIPPER */
14976static VALUE
14977heredoc_dedent(struct parser_params *p, VALUE array)
14978{
14979 int indent = p->heredoc_indent;
14980
14981 if (indent <= 0) return array;
14982 p->heredoc_indent = 0;
14983 dispatch2(heredoc_dedent, array, INT2NUM(indent));
14984 return array;
14985}
14986
14987/*
14988 * call-seq:
14989 * Ripper.dedent_string(input, width) -> Integer
14990 *
14991 * USE OF RIPPER LIBRARY ONLY.
14992 *
14993 * Strips up to +width+ leading whitespaces from +input+,
14994 * and returns the stripped column width.
14995 */
14996static VALUE
14997parser_dedent_string(VALUE self, VALUE input, VALUE width)
14998{
14999 int wid, col;
15000
15002 wid = NUM2UINT(width);
15003 col = dedent_string(input, wid);
15004 return INT2NUM(col);
15005}
15006#endif
15007
15008static int
15009whole_match_p(struct parser_params *p, const char *eos, long len, int indent)
15010{
15011 const char *ptr = p->lex.pbeg;
15012 long n;
15013
15014 if (indent) {
15015 while (*ptr && ISSPACE(*ptr)) ptr++;
15016 }
15017 n = p->lex.pend - (ptr + len);
15018 if (n < 0) return FALSE;
15019 if (n > 0 && ptr[len] != '\n') {
15020 if (ptr[len] != '\r') return FALSE;
15021 if (n <= 1 || ptr[len+1] != '\n') return FALSE;
15022 }
15023 return strncmp(eos, ptr, len) == 0;
15024}
15025
15026static int
15027word_match_p(struct parser_params *p, const char *word, long len)
15028{
15029 if (strncmp(p->lex.pcur, word, len)) return 0;
15030 if (p->lex.pcur + len == p->lex.pend) return 1;
15031 int c = (unsigned char)p->lex.pcur[len];
15032 if (ISSPACE(c)) return 1;
15033 switch (c) {
15034 case '\0': case '\004': case '\032': return 1;
15035 }
15036 return 0;
15037}
15038
15039#define NUM_SUFFIX_R (1<<0)
15040#define NUM_SUFFIX_I (1<<1)
15041#define NUM_SUFFIX_ALL 3
15042
15043static int
15044number_literal_suffix(struct parser_params *p, int mask)
15045{
15046 int c, result = 0;
15047 const char *lastp = p->lex.pcur;
15048
15049 while ((c = nextc(p)) != -1) {
15050 if ((mask & NUM_SUFFIX_I) && c == 'i') {
15051 result |= (mask & NUM_SUFFIX_I);
15052 mask &= ~NUM_SUFFIX_I;
15053 /* r after i, rational of complex is disallowed */
15054 mask &= ~NUM_SUFFIX_R;
15055 continue;
15056 }
15057 if ((mask & NUM_SUFFIX_R) && c == 'r') {
15058 result |= (mask & NUM_SUFFIX_R);
15059 mask &= ~NUM_SUFFIX_R;
15060 continue;
15061 }
15062 if (!ISASCII(c) || ISALPHA(c) || c == '_') {
15063 p->lex.pcur = lastp;
15064 literal_flush(p, p->lex.pcur);
15065 return 0;
15066 }
15067 pushback(p, c);
15068 break;
15069 }
15070 return result;
15071}
15072
15073static enum yytokentype
15074set_number_literal(struct parser_params *p, VALUE v,
15075 enum yytokentype type, int suffix)
15076{
15077 if (suffix & NUM_SUFFIX_I) {
15078 v = rb_complex_raw(INT2FIX(0), v);
15079 type = tIMAGINARY;
15080 }
15082 SET_LEX_STATE(EXPR_END);
15083 return type;
15084}
15085
15086static enum yytokentype
15087set_integer_literal(struct parser_params *p, VALUE v, int suffix)
15088{
15089 enum yytokentype type = tINTEGER;
15090 if (suffix & NUM_SUFFIX_R) {
15091 v = rb_rational_raw1(v);
15092 type = tRATIONAL;
15093 }
15094 return set_number_literal(p, v, type, suffix);
15095}
15096
15097#ifdef RIPPER
15098static void
15100{
15101 VALUE str;
15102 if (has_delayed_token(p))
15104 str = STR_NEW(p->lex.ptok, p->lex.pend - p->lex.ptok);
15105 ripper_dispatch1(p, ripper_token2eventid(tHEREDOC_END), str);
15106 lex_goto_eol(p);
15107 token_flush(p);
15108}
15109
15110#else
15111#define dispatch_heredoc_end(p) ((void)0)
15112#endif
15113
15114static enum yytokentype
15115here_document(struct parser_params *p, rb_strterm_heredoc_t *here)
15116{
15117 int c, func, indent = 0;
15118 const char *eos, *ptr, *ptr_end;
15119 long len;
15120 VALUE str = 0;
15121 rb_encoding *enc = p->enc;
15122 rb_encoding *base_enc = 0;
15123 int bol;
15124
15125 eos = RSTRING_PTR(here->lastline) + here->offset;
15126 len = here->length;
15127 indent = (func = here->func) & STR_FUNC_INDENT;
15128
15129 if ((c = nextc(p)) == -1) {
15130 error:
15131#ifdef RIPPER
15132 if (!has_delayed_token(p)) {
15134 }
15135 else {
15136 if ((len = p->lex.pcur - p->lex.ptok) > 0) {
15137 if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
15138 int cr = ENC_CODERANGE_UNKNOWN;
15140 if (cr != ENC_CODERANGE_7BIT &&
15141 p->enc == rb_usascii_encoding() &&
15142 enc != rb_utf8_encoding()) {
15144 }
15145 }
15146 rb_enc_str_buf_cat(p->delayed.token, p->lex.ptok, len, enc);
15147 }
15149 }
15150 lex_goto_eol(p);
15151#endif
15152 heredoc_restore(p, &p->lex.strterm->u.heredoc);
15153 compile_error(p, "can't find string \"%.*s\" anywhere before EOF",
15154 (int)len, eos);
15155 token_flush(p);
15156 p->lex.strterm = 0;
15157 SET_LEX_STATE(EXPR_END);
15158 return tSTRING_END;
15159 }
15160 bol = was_bol(p);
15161 if (!bol) {
15162 /* not beginning of line, cannot be the terminator */
15163 }
15164 else if (p->heredoc_line_indent == -1) {
15165 /* `heredoc_line_indent == -1` means
15166 * - "after an interpolation in the same line", or
15167 * - "in a continuing line"
15168 */
15169 p->heredoc_line_indent = 0;
15170 }
15171 else if (whole_match_p(p, eos, len, indent)) {
15173 restore:
15174 heredoc_restore(p, &p->lex.strterm->u.heredoc);
15175 token_flush(p);
15176 p->lex.strterm = 0;
15177 SET_LEX_STATE(EXPR_END);
15178 return tSTRING_END;
15179 }
15180
15181 if (!(func & STR_FUNC_EXPAND)) {
15182 do {
15184 ptr_end = p->lex.pend;
15185 if (ptr_end > ptr) {
15186 switch (ptr_end[-1]) {
15187 case '\n':
15188 if (--ptr_end == ptr || ptr_end[-1] != '\r') {
15189 ptr_end++;
15190 break;
15191 }
15192 case '\r':
15193 --ptr_end;
15194 }
15195 }
15196
15197 if (p->heredoc_indent > 0) {
15198 long i = 0;
15199 while (ptr + i < ptr_end && parser_update_heredoc_indent(p, ptr[i]))
15200 i++;
15201 p->heredoc_line_indent = 0;
15202 }
15203
15204 if (str)
15205 rb_str_cat(str, ptr, ptr_end - ptr);
15206 else
15207 str = STR_NEW(ptr, ptr_end - ptr);
15208 if (ptr_end < p->lex.pend) rb_str_cat(str, "\n", 1);
15209 lex_goto_eol(p);
15210 if (p->heredoc_indent > 0) {
15211 goto flush_str;
15212 }
15213 if (nextc(p) == -1) {
15214 if (str) {
15215 str = 0;
15216 }
15217 goto error;
15218 }
15219 } while (!whole_match_p(p, eos, len, indent));
15220 }
15221 else {
15222 /* int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
15223 newtok(p);
15224 if (c == '#') {
15225 int t = parser_peek_variable_name(p);
15226 if (p->heredoc_line_indent != -1) {
15227 if (p->heredoc_indent > p->heredoc_line_indent) {
15229 }
15230 p->heredoc_line_indent = -1;
15231 }
15232 if (t) return t;
15233 tokadd(p, '#');
15234 c = nextc(p);
15235 }
15236 do {
15237 pushback(p, c);
15238 enc = p->enc;
15239 if ((c = tokadd_string(p, func, '\n', 0, NULL, &enc, &base_enc)) == -1) {
15240 if (p->eofp) goto error;
15241 goto restore;
15242 }
15243 if (c != '\n') {
15244 if (c == '\\') p->heredoc_line_indent = -1;
15245 flush:
15246 str = STR_NEW3(tok(p), toklen(p), enc, func);
15247 flush_str:
15249#ifndef RIPPER
15250 if (bol) yylval.node->flags |= NODE_FL_NEWLINE;
15251#endif
15253 return tSTRING_CONTENT;
15254 }
15255 tokadd(p, nextc(p));
15256 if (p->heredoc_indent > 0) {
15257 lex_goto_eol(p);
15258 goto flush;
15259 }
15260 /* if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
15261 if ((c = nextc(p)) == -1) goto error;
15262 } while (!whole_match_p(p, eos, len, indent));
15263 str = STR_NEW3(tok(p), toklen(p), enc, func);
15264 }
15266#ifdef RIPPER
15267 str = ripper_new_yylval(p, ripper_token2eventid(tSTRING_CONTENT),
15268 yylval.val, str);
15269#endif
15270 heredoc_restore(p, &p->lex.strterm->u.heredoc);
15271 token_flush(p);
15272 p->lex.strterm = NEW_STRTERM(func | STR_FUNC_TERM, 0, 0);
15274#ifndef RIPPER
15275 if (bol) yylval.node->flags |= NODE_FL_NEWLINE;
15276#endif
15277 return tSTRING_CONTENT;
15278}
15279
15280#include "lex.c"
15281
15282static int
15283arg_ambiguous(struct parser_params *p, char c)
15284{
15285#ifndef RIPPER
15286 rb_warning1("ambiguous first argument; put parentheses or a space even after `%c' operator", WARN_I(c));
15287#else
15288 dispatch1(arg_ambiguous, rb_usascii_str_new(&c, 1));
15289#endif
15290 return TRUE;
15291}
15292
15293static ID
15294formal_argument(struct parser_params *p, ID lhs)
15295{
15296 switch (id_type(lhs)) {
15297 case ID_LOCAL:
15298 break;
15299#ifndef RIPPER
15300 case ID_CONST:
15301 yyerror0("formal argument cannot be a constant");
15302 return 0;
15303 case ID_INSTANCE:
15304 yyerror0("formal argument cannot be an instance variable");
15305 return 0;
15306 case ID_GLOBAL:
15307 yyerror0("formal argument cannot be a global variable");
15308 return 0;
15309 case ID_CLASS:
15310 yyerror0("formal argument cannot be a class variable");
15311 return 0;
15312 default:
15313 yyerror0("formal argument must be local variable");
15314 return 0;
15315#else
15316 default:
15317 lhs = dispatch1(param_error, lhs);
15318 ripper_error(p);
15319 return 0;
15320#endif
15321 }
15322 shadowing_lvar(p, lhs);
15323 return lhs;
15324}
15325
15326static int
15327lvar_defined(struct parser_params *p, ID id)
15328{
15329 return (dyna_in_block(p) && dvar_defined(p, id)) || local_id(p, id);
15330}
15331
15332/* emacsen -*- hack */
15333static long
15334parser_encode_length(struct parser_params *p, const char *name, long len)
15335{
15336 long nlen;
15337
15338 if (len > 5 && name[nlen = len - 5] == '-') {
15339 if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
15340 return nlen;
15341 }
15342 if (len > 4 && name[nlen = len - 4] == '-') {
15343 if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
15344 return nlen;
15345 if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
15346 !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
15347 /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */
15348 return nlen;
15349 }
15350 return len;
15351}
15352
15353static void
15354parser_set_encode(struct parser_params *p, const char *name)
15355{
15356 int idx = rb_enc_find_index(name);
15358 VALUE excargs[3];
15359
15360 if (idx < 0) {
15361 excargs[1] = rb_sprintf("unknown encoding name: %s", name);
15362 error:
15363 excargs[0] = rb_eArgError;
15364 excargs[2] = rb_make_backtrace();
15366 rb_exc_raise(rb_make_exception(3, excargs));
15367 }
15368 enc = rb_enc_from_index(idx);
15369 if (!rb_enc_asciicompat(enc)) {
15370 excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
15371 goto error;
15372 }
15373 p->enc = enc;
15374#ifndef RIPPER
15375 if (p->debug_lines) {
15376 VALUE lines = p->debug_lines;
15377 long i, n = RARRAY_LEN(lines);
15378 for (i = 0; i < n; ++i) {
15379 rb_enc_associate_index(RARRAY_AREF(lines, i), idx);
15380 }
15381 }
15382#endif
15383}
15384
15385static int
15386comment_at_top(struct parser_params *p)
15387{
15388 const char *ptr = p->lex.pbeg, *ptr_end = p->lex.pcur - 1;
15389 if (p->line_count != (p->has_shebang ? 2 : 1)) return 0;
15390 while (ptr < ptr_end) {
15391 if (!ISSPACE(*ptr)) return 0;
15392 ptr++;
15393 }
15394 return 1;
15395}
15396
15397typedef long (*rb_magic_comment_length_t)(struct parser_params *p, const char *name, long len);
15398typedef void (*rb_magic_comment_setter_t)(struct parser_params *p, const char *name, const char *val);
15399
15400static void
15401magic_comment_encoding(struct parser_params *p, const char *name, const char *val)
15402{
15403 if (!comment_at_top(p)) {
15404 return;
15405 }
15406 parser_set_encode(p, val);
15407}
15408
15409static int
15410parser_get_bool(struct parser_params *p, const char *name, const char *val)
15411{
15412 switch (*val) {
15413 case 't': case 'T':
15414 if (strcasecmp(val, "true") == 0) {
15415 return TRUE;
15416 }
15417 break;
15418 case 'f': case 'F':
15419 if (strcasecmp(val, "false") == 0) {
15420 return FALSE;
15421 }
15422 break;
15423 }
15424 rb_compile_warning(p->ruby_sourcefile, p->ruby_sourceline, "invalid value for %s: %s", name, val);
15425 return -1;
15426}
15427
15428static void
15429parser_set_token_info(struct parser_params *p, const char *name, const char *val)
15430{
15431 int b = parser_get_bool(p, name, val);
15432 if (b >= 0) p->token_info_enabled = b;
15433}
15434
15435static void
15436parser_set_compile_option_flag(struct parser_params *p, const char *name, const char *val)
15437{
15438 int b;
15439
15440 if (p->token_seen) {
15441 rb_warning1("`%s' is ignored after any tokens", WARN_S(name));
15442 return;
15443 }
15444
15445 b = parser_get_bool(p, name, val);
15446 if (b < 0) return;
15447
15448 if (!p->compile_option)
15451 (b ? Qtrue : Qfalse));
15452}
15453
15454# if WARN_PAST_SCOPE
15455static void
15456parser_set_past_scope(struct parser_params *p, const char *name, const char *val)
15457{
15458 int b = parser_get_bool(p, name, val);
15459 if (b >= 0) p->past_scope_enabled = b;
15460}
15461# endif
15462
15464 const char *name;
15467};
15468
15469static const struct magic_comment magic_comments[] = {
15470 {"coding", magic_comment_encoding, parser_encode_length},
15471 {"encoding", magic_comment_encoding, parser_encode_length},
15472 {"frozen_string_literal", parser_set_compile_option_flag},
15473 {"warn_indent", parser_set_token_info},
15474# if WARN_PAST_SCOPE
15475 {"warn_past_scope", parser_set_past_scope},
15476# endif
15477};
15478
15479static const char *
15480magic_comment_marker(const char *str, long len)
15481{
15482 long i = 2;
15483
15484 while (i < len) {
15485 switch (str[i]) {
15486 case '-':
15487 if (str[i-1] == '*' && str[i-2] == '-') {
15488 return str + i + 1;
15489 }
15490 i += 2;
15491 break;
15492 case '*':
15493 if (i + 1 >= len) return 0;
15494 if (str[i+1] != '-') {
15495 i += 4;
15496 }
15497 else if (str[i-1] != '-') {
15498 i += 2;
15499 }
15500 else {
15501 return str + i + 2;
15502 }
15503 break;
15504 default:
15505 i += 3;
15506 break;
15507 }
15508 }
15509 return 0;
15510}
15511
15512static int
15513parser_magic_comment(struct parser_params *p, const char *str, long len)
15514{
15515 int indicator = 0;
15516 VALUE name = 0, val = 0;
15517 const char *beg, *end, *vbeg, *vend;
15518#define str_copy(_s, _p, _n) ((_s) \
15519 ? (void)(rb_str_resize((_s), (_n)), \
15520 MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
15521 : (void)((_s) = STR_NEW((_p), (_n))))
15522
15523 if (len <= 7) return FALSE;
15524 if (!!(beg = magic_comment_marker(str, len))) {
15525 if (!(end = magic_comment_marker(beg, str + len - beg)))
15526 return FALSE;
15527 indicator = TRUE;
15528 str = beg;
15529 len = end - beg - 3;
15530 }
15531
15532 /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
15533 while (len > 0) {
15534 const struct magic_comment *mc = magic_comments;
15535 char *s;
15536 int i;
15537 long n = 0;
15538
15539 for (; len > 0 && *str; str++, --len) {
15540 switch (*str) {
15541 case '\'': case '"': case ':': case ';':
15542 continue;
15543 }
15544 if (!ISSPACE(*str)) break;
15545 }
15546 for (beg = str; len > 0; str++, --len) {
15547 switch (*str) {
15548 case '\'': case '"': case ':': case ';':
15549 break;
15550 default:
15551 if (ISSPACE(*str)) break;
15552 continue;
15553 }
15554 break;
15555 }
15556 for (end = str; len > 0 && ISSPACE(*str); str++, --len);
15557 if (!len) break;
15558 if (*str != ':') {
15559 if (!indicator) return FALSE;
15560 continue;
15561 }
15562
15563 do str++; while (--len > 0 && ISSPACE(*str));
15564 if (!len) break;
15565 if (*str == '"') {
15566 for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
15567 if (*str == '\\') {
15568 --len;
15569 ++str;
15570 }
15571 }
15572 vend = str;
15573 if (len) {
15574 --len;
15575 ++str;
15576 }
15577 }
15578 else {
15579 for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
15580 vend = str;
15581 }
15582 if (indicator) {
15583 while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
15584 }
15585 else {
15586 while (len > 0 && (ISSPACE(*str))) --len, str++;
15587 if (len) return FALSE;
15588 }
15589
15590 n = end - beg;
15591 str_copy(name, beg, n);
15592 s = RSTRING_PTR(name);
15593 for (i = 0; i < n; ++i) {
15594 if (s[i] == '-') s[i] = '_';
15595 }
15596 do {
15597 if (STRNCASECMP(mc->name, s, n) == 0 && !mc->name[n]) {
15598 n = vend - vbeg;
15599 if (mc->length) {
15600 n = (*mc->length)(p, vbeg, n);
15601 }
15602 str_copy(val, vbeg, n);
15603 (*mc->func)(p, mc->name, RSTRING_PTR(val));
15604 break;
15605 }
15606 } while (++mc < magic_comments + numberof(magic_comments));
15607#ifdef RIPPER
15608 str_copy(val, vbeg, vend - vbeg);
15609 dispatch2(magic_comment, name, val);
15610#endif
15611 }
15612
15613 return TRUE;
15614}
15615
15616static void
15617set_file_encoding(struct parser_params *p, const char *str, const char *send)
15618{
15619 int sep = 0;
15620 const char *beg = str;
15621 VALUE s;
15622
15623 for (;;) {
15624 if (send - str <= 6) return;
15625 switch (str[6]) {
15626 case 'C': case 'c': str += 6; continue;
15627 case 'O': case 'o': str += 5; continue;
15628 case 'D': case 'd': str += 4; continue;
15629 case 'I': case 'i': str += 3; continue;
15630 case 'N': case 'n': str += 2; continue;
15631 case 'G': case 'g': str += 1; continue;
15632 case '=': case ':':
15633 sep = 1;
15634 str += 6;
15635 break;
15636 default:
15637 str += 6;
15638 if (ISSPACE(*str)) break;
15639 continue;
15640 }
15641 if (STRNCASECMP(str-6, "coding", 6) == 0) break;
15642 }
15643 for (;;) {
15644 do {
15645 if (++str >= send) return;
15646 } while (ISSPACE(*str));
15647 if (sep) break;
15648 if (*str != '=' && *str != ':') return;
15649 sep = 1;
15650 str++;
15651 }
15652 beg = str;
15653 while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
15654 s = rb_str_new(beg, parser_encode_length(p, beg, str - beg));
15655 parser_set_encode(p, RSTRING_PTR(s));
15656 rb_str_resize(s, 0);
15657}
15658
15659static void
15660parser_prepare(struct parser_params *p)
15661{
15662 int c = nextc(p);
15664 switch (c) {
15665 case '#':
15666 if (peek(p, '!')) p->has_shebang = 1;
15667 break;
15668 case 0xef: /* UTF-8 BOM marker */
15669 if (p->lex.pend - p->lex.pcur >= 2 &&
15670 (unsigned char)p->lex.pcur[0] == 0xbb &&
15671 (unsigned char)p->lex.pcur[1] == 0xbf) {
15672 p->enc = rb_utf8_encoding();
15673 p->lex.pcur += 2;
15674 p->lex.pbeg = p->lex.pcur;
15675 return;
15676 }
15677 break;
15678 case EOF:
15679 return;
15680 }
15681 pushback(p, c);
15682 p->enc = rb_enc_get(p->lex.lastline);
15683}
15684
15685#ifndef RIPPER
15686#define ambiguous_operator(tok, op, syn) ( \
15687 rb_warning0("`"op"' after local variable or literal is interpreted as binary operator"), \
15688 rb_warning0("even though it seems like "syn""))
15689#else
15690#define ambiguous_operator(tok, op, syn) \
15691 dispatch2(operator_ambiguous, TOKEN2VAL(tok), rb_str_new_cstr(syn))
15692#endif
15693#define warn_balanced(tok, op, syn) ((void) \
15694 (!IS_lex_state_for(last_state, EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN) && \
15695 space_seen && !ISSPACE(c) && \
15696 (ambiguous_operator(tok, op, syn), 0)), \
15697 (enum yytokentype)(tok))
15698
15699static VALUE
15700parse_rational(struct parser_params *p, char *str, int len, int seen_point)
15701{
15702 VALUE v;
15703 char *point = &str[seen_point];
15704 size_t fraclen = len-seen_point-1;
15705 memmove(point, point+1, fraclen+1);
15706 v = rb_cstr_to_inum(str, 10, FALSE);
15707 return rb_rational_new(v, rb_int_positive_pow(10, fraclen));
15708}
15709
15710static enum yytokentype
15711no_digits(struct parser_params *p)
15712{
15713 yyerror0("numeric literal without digits");
15714 if (peek(p, '_')) nextc(p);
15715 /* dummy 0, for tUMINUS_NUM at numeric */
15716 return set_integer_literal(p, INT2FIX(0), 0);
15717}
15718
15719static enum yytokentype
15720parse_numeric(struct parser_params *p, int c)
15721{
15722 int is_float, seen_point, seen_e, nondigit;
15723 int suffix;
15724
15725 is_float = seen_point = seen_e = nondigit = 0;
15726 SET_LEX_STATE(EXPR_END);
15727 newtok(p);
15728 if (c == '-' || c == '+') {
15729 tokadd(p, c);
15730 c = nextc(p);
15731 }
15732 if (c == '0') {
15733 int start = toklen(p);
15734 c = nextc(p);
15735 if (c == 'x' || c == 'X') {
15736 /* hexadecimal */
15737 c = nextc(p);
15738 if (c != -1 && ISXDIGIT(c)) {
15739 do {
15740 if (c == '_') {
15741 if (nondigit) break;
15742 nondigit = c;
15743 continue;
15744 }
15745 if (!ISXDIGIT(c)) break;
15746 nondigit = 0;
15747 tokadd(p, c);
15748 } while ((c = nextc(p)) != -1);
15749 }
15750 pushback(p, c);
15751 tokfix(p);
15752 if (toklen(p) == start) {
15753 return no_digits(p);
15754 }
15755 else if (nondigit) goto trailing_uc;
15756 suffix = number_literal_suffix(p, NUM_SUFFIX_ALL);
15757 return set_integer_literal(p, rb_cstr_to_inum(tok(p), 16, FALSE), suffix);
15758 }
15759 if (c == 'b' || c == 'B') {
15760 /* binary */
15761 c = nextc(p);
15762 if (c == '0' || c == '1') {
15763 do {
15764 if (c == '_') {
15765 if (nondigit) break;
15766 nondigit = c;
15767 continue;
15768 }
15769 if (c != '0' && c != '1') break;
15770 nondigit = 0;
15771 tokadd(p, c);
15772 } while ((c = nextc(p)) != -1);
15773 }
15774 pushback(p, c);
15775 tokfix(p);
15776 if (toklen(p) == start) {
15777 return no_digits(p);
15778 }
15779 else if (nondigit) goto trailing_uc;
15780 suffix = number_literal_suffix(p, NUM_SUFFIX_ALL);
15781 return set_integer_literal(p, rb_cstr_to_inum(tok(p), 2, FALSE), suffix);
15782 }
15783 if (c == 'd' || c == 'D') {
15784 /* decimal */
15785 c = nextc(p);
15786 if (c != -1 && ISDIGIT(c)) {
15787 do {
15788 if (c == '_') {
15789 if (nondigit) break;
15790 nondigit = c;
15791 continue;
15792 }
15793 if (!ISDIGIT(c)) break;
15794 nondigit = 0;
15795 tokadd(p, c);
15796 } while ((c = nextc(p)) != -1);
15797 }
15798 pushback(p, c);
15799 tokfix(p);
15800 if (toklen(p) == start) {
15801 return no_digits(p);
15802 }
15803 else if (nondigit) goto trailing_uc;
15804 suffix = number_literal_suffix(p, NUM_SUFFIX_ALL);
15805 return set_integer_literal(p, rb_cstr_to_inum(tok(p), 10, FALSE), suffix);
15806 }
15807 if (c == '_') {
15808 /* 0_0 */
15809 goto octal_number;
15810 }
15811 if (c == 'o' || c == 'O') {
15812 /* prefixed octal */
15813 c = nextc(p);
15814 if (c == -1 || c == '_' || !ISDIGIT(c)) {
15815 return no_digits(p);
15816 }
15817 }
15818 if (c >= '0' && c <= '7') {
15819 /* octal */
15820 octal_number:
15821 do {
15822 if (c == '_') {
15823 if (nondigit) break;
15824 nondigit = c;
15825 continue;
15826 }
15827 if (c < '0' || c > '9') break;
15828 if (c > '7') goto invalid_octal;
15829 nondigit = 0;
15830 tokadd(p, c);
15831 } while ((c = nextc(p)) != -1);
15832 if (toklen(p) > start) {
15833 pushback(p, c);
15834 tokfix(p);
15835 if (nondigit) goto trailing_uc;
15836 suffix = number_literal_suffix(p, NUM_SUFFIX_ALL);
15837 return set_integer_literal(p, rb_cstr_to_inum(tok(p), 8, FALSE), suffix);
15838 }
15839 if (nondigit) {
15840 pushback(p, c);
15841 goto trailing_uc;
15842 }
15843 }
15844 if (c > '7' && c <= '9') {
15845 invalid_octal:
15846 yyerror0("Invalid octal digit");
15847 }
15848 else if (c == '.' || c == 'e' || c == 'E') {
15849 tokadd(p, '0');
15850 }
15851 else {
15852 pushback(p, c);
15853 suffix = number_literal_suffix(p, NUM_SUFFIX_ALL);
15854 return set_integer_literal(p, INT2FIX(0), suffix);
15855 }
15856 }
15857
15858 for (;;) {
15859 switch (c) {
15860 case '0': case '1': case '2': case '3': case '4':
15861 case '5': case '6': case '7': case '8': case '9':
15862 nondigit = 0;
15863 tokadd(p, c);
15864 break;
15865
15866 case '.':
15867 if (nondigit) goto trailing_uc;
15868 if (seen_point || seen_e) {
15869 goto decode_num;
15870 }
15871 else {
15872 int c0 = nextc(p);
15873 if (c0 == -1 || !ISDIGIT(c0)) {
15874 pushback(p, c0);
15875 goto decode_num;
15876 }
15877 c = c0;
15878 }
15879 seen_point = toklen(p);
15880 tokadd(p, '.');
15881 tokadd(p, c);
15882 is_float++;
15883 nondigit = 0;
15884 break;
15885
15886 case 'e':
15887 case 'E':
15888 if (nondigit) {
15889 pushback(p, c);
15890 c = nondigit;
15891 goto decode_num;
15892 }
15893 if (seen_e) {
15894 goto decode_num;
15895 }
15896 nondigit = c;
15897 c = nextc(p);
15898 if (c != '-' && c != '+' && !ISDIGIT(c)) {
15899 pushback(p, c);
15900 nondigit = 0;
15901 goto decode_num;
15902 }
15903 tokadd(p, nondigit);
15904 seen_e++;
15905 is_float++;
15906 tokadd(p, c);
15907 nondigit = (c == '-' || c == '+') ? c : 0;
15908 break;
15909
15910 case '_': /* `_' in number just ignored */
15911 if (nondigit) goto decode_num;
15912 nondigit = c;
15913 break;
15914
15915 default:
15916 goto decode_num;
15917 }
15918 c = nextc(p);
15919 }
15920
15921 decode_num:
15922 pushback(p, c);
15923 if (nondigit) {
15924 trailing_uc:
15925 literal_flush(p, p->lex.pcur - 1);
15926 YYLTYPE loc = RUBY_INIT_YYLLOC();
15927 compile_error(p, "trailing `%c' in number", nondigit);
15928 parser_show_error_line(p, &loc);
15929 }
15930 tokfix(p);
15931 if (is_float) {
15932 enum yytokentype type = tFLOAT;
15933 VALUE v;
15934
15935 suffix = number_literal_suffix(p, seen_e ? NUM_SUFFIX_I : NUM_SUFFIX_ALL);
15936 if (suffix & NUM_SUFFIX_R) {
15937 type = tRATIONAL;
15938 v = parse_rational(p, tok(p), toklen(p), seen_point);
15939 }
15940 else {
15941 double d = strtod(tok(p), 0);
15942 if (errno == ERANGE) {
15943 rb_warning1("Float %s out of range", WARN_S(tok(p)));
15944 errno = 0;
15945 }
15946 v = DBL2NUM(d);
15947 }
15948 return set_number_literal(p, v, type, suffix);
15949 }
15950 suffix = number_literal_suffix(p, NUM_SUFFIX_ALL);
15951 return set_integer_literal(p, rb_cstr_to_inum(tok(p), 10, FALSE), suffix);
15952}
15953
15954static enum yytokentype
15955parse_qmark(struct parser_params *p, int space_seen)
15956{
15957 rb_encoding *enc;
15958 register int c;
15959 VALUE lit;
15960
15961 if (IS_END()) {
15963 return '?';
15964 }
15965 c = nextc(p);
15966 if (c == -1) {
15967 compile_error(p, "incomplete character syntax");
15968 return 0;
15969 }
15970 if (rb_enc_isspace(c, p->enc)) {
15971 if (!IS_ARG()) {
15972 int c2 = escaped_control_code(c);
15973 if (c2) {
15974 WARN_SPACE_CHAR(c2, "?");
15975 }
15976 }
15977 ternary:
15978 pushback(p, c);
15980 return '?';
15981 }
15982 newtok(p);
15983 enc = p->enc;
15984 if (!parser_isascii(p)) {
15985 if (tokadd_mbchar(p, c) == -1) return 0;
15986 }
15987 else if ((rb_enc_isalnum(c, p->enc) || c == '_') &&
15988 p->lex.pcur < p->lex.pend && is_identchar(p->lex.pcur, p->lex.pend, p->enc)) {
15989 if (space_seen) {
15990 const char *start = p->lex.pcur - 1, *ptr = start;
15991 do {
15992 int n = parser_precise_mbclen(p, ptr);
15993 if (n < 0) return -1;
15994 ptr += n;
15995 } while (ptr < p->lex.pend && is_identchar(ptr, p->lex.pend, p->enc));
15996 rb_warn2("`?' just followed by `%.*s' is interpreted as" \
15997 " a conditional operator, put a space after `?'",
15998 WARN_I((int)(ptr - start)), WARN_S_L(start, (ptr - start)));
15999 }
16000 goto ternary;
16001 }
16002 else if (c == '\\') {
16003 if (peek(p, 'u')) {
16004 nextc(p);
16005 enc = rb_utf8_encoding();
16006 tokadd_utf8(p, &enc, -1, 0, 0);
16007 }
16008 else if (!lex_eol_p(p) && !(c = *p->lex.pcur, ISASCII(c))) {
16009 nextc(p);
16010 if (tokadd_mbchar(p, c) == -1) return 0;
16011 }
16012 else {
16013 c = read_escape(p, 0, &enc);
16014 tokadd(p, c);
16015 }
16016 }
16017 else {
16018 tokadd(p, c);
16019 }
16020 tokfix(p);
16021 lit = STR_NEW3(tok(p), toklen(p), enc, 0);
16022 set_yylval_str(lit);
16023 SET_LEX_STATE(EXPR_END);
16024 return tCHAR;
16025}
16026
16027static enum yytokentype
16028parse_percent(struct parser_params *p, const int space_seen, const enum lex_state_e last_state)
16029{
16030 register int c;
16031 const char *ptok = p->lex.pcur;
16032
16033 if (IS_BEG()) {
16034 int term;
16035 int paren;
16036
16037 c = nextc(p);
16038 quotation:
16039 if (c == -1 || !ISALNUM(c)) {
16040 term = c;
16041 c = 'Q';
16042 }
16043 else {
16044 term = nextc(p);
16045 if (rb_enc_isalnum(term, p->enc) || !parser_isascii(p)) {
16046 yyerror0("unknown type of %string");
16047 return 0;
16048 }
16049 }
16050 if (c == -1 || term == -1) {
16051 compile_error(p, "unterminated quoted string meets end of file");
16052 return 0;
16053 }
16054 paren = term;
16055 if (term == '(') term = ')';
16056 else if (term == '[') term = ']';
16057 else if (term == '{') term = '}';
16058 else if (term == '<') term = '>';
16059 else paren = 0;
16060
16061 p->lex.ptok = ptok-1;
16062 switch (c) {
16063 case 'Q':
16064 p->lex.strterm = NEW_STRTERM(str_dquote, term, paren);
16065 return tSTRING_BEG;
16066
16067 case 'q':
16068 p->lex.strterm = NEW_STRTERM(str_squote, term, paren);
16069 return tSTRING_BEG;
16070
16071 case 'W':
16072 p->lex.strterm = NEW_STRTERM(str_dword, term, paren);
16073 return tWORDS_BEG;
16074
16075 case 'w':
16076 p->lex.strterm = NEW_STRTERM(str_sword, term, paren);
16077 return tQWORDS_BEG;
16078
16079 case 'I':
16080 p->lex.strterm = NEW_STRTERM(str_dword, term, paren);
16081 return tSYMBOLS_BEG;
16082
16083 case 'i':
16084 p->lex.strterm = NEW_STRTERM(str_sword, term, paren);
16085 return tQSYMBOLS_BEG;
16086
16087 case 'x':
16088 p->lex.strterm = NEW_STRTERM(str_xquote, term, paren);
16089 return tXSTRING_BEG;
16090
16091 case 'r':
16092 p->lex.strterm = NEW_STRTERM(str_regexp, term, paren);
16093 return tREGEXP_BEG;
16094
16095 case 's':
16096 p->lex.strterm = NEW_STRTERM(str_ssym, term, paren);
16097 SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);
16098 return tSYMBEG;
16099
16100 default:
16101 yyerror0("unknown type of %string");
16102 return 0;
16103 }
16104 }
16105 if ((c = nextc(p)) == '=') {
16106 set_yylval_id('%');
16107 SET_LEX_STATE(EXPR_BEG);
16108 return tOP_ASGN;
16109 }
16110 if (IS_SPCARG(c) || (IS_lex_state(EXPR_FITEM) && c == 's')) {
16111 goto quotation;
16112 }
16113 SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
16114 pushback(p, c);
16115 return warn_balanced('%', "%%", "string literal");
16116}
16117
16118static int
16119tokadd_ident(struct parser_params *p, int c)
16120{
16121 do {
16122 if (tokadd_mbchar(p, c) == -1) return -1;
16123 c = nextc(p);
16124 } while (parser_is_identchar(p));
16125 pushback(p, c);
16126 return 0;
16127}
16128
16129static ID
16130tokenize_ident(struct parser_params *p, const enum lex_state_e last_state)
16131{
16132 ID ident = TOK_INTERN();
16133
16134 set_yylval_name(ident);
16135
16136 return ident;
16137}
16138
16139static int
16140parse_numvar(struct parser_params *p)
16141{
16142 size_t len;
16143 int overflow;
16144 unsigned long n = ruby_scan_digits(tok(p)+1, toklen(p)-1, 10, &len, &overflow);
16145 const unsigned long nth_ref_max =
16146 ((FIXNUM_MAX < INT_MAX) ? FIXNUM_MAX : INT_MAX) >> 1;
16147 /* NTH_REF is left-shifted to be ORed with back-ref flag and
16148 * turned into a Fixnum, in compile.c */
16149
16150 if (overflow || n > nth_ref_max) {
16151 /* compile_error()? */
16152 rb_warn1("`%s' is too big for a number variable, always nil", WARN_S(tok(p)));
16153 return 0; /* $0 is $PROGRAM_NAME, not NTH_REF */
16154 }
16155 else {
16156 return (int)n;
16157 }
16158}
16159
16160static enum yytokentype
16161parse_gvar(struct parser_params *p, const enum lex_state_e last_state)
16162{
16163 const char *ptr = p->lex.pcur;
16164 register int c;
16165
16166 SET_LEX_STATE(EXPR_END);
16167 p->lex.ptok = ptr - 1; /* from '$' */
16168 newtok(p);
16169 c = nextc(p);
16170 switch (c) {
16171 case '_': /* $_: last read line string */
16172 c = nextc(p);
16173 if (parser_is_identchar(p)) {
16174 tokadd(p, '$');
16175 tokadd(p, '_');
16176 break;
16177 }
16178 pushback(p, c);
16179 c = '_';
16180 /* fall through */
16181 case '~': /* $~: match-data */
16182 case '*': /* $*: argv */
16183 case '$': /* $$: pid */
16184 case '?': /* $?: last status */
16185 case '!': /* $!: error string */
16186 case '@': /* $@: error position */
16187 case '/': /* $/: input record separator */
16188 case '\\': /* $\: output record separator */
16189 case ';': /* $;: field separator */
16190 case ',': /* $,: output field separator */
16191 case '.': /* $.: last read line number */
16192 case '=': /* $=: ignorecase */
16193 case ':': /* $:: load path */
16194 case '<': /* $<: reading filename */
16195 case '>': /* $>: default output handle */
16196 case '\"': /* $": already loaded files */
16197 tokadd(p, '$');
16198 tokadd(p, c);
16199 goto gvar;
16200
16201 case '-':
16202 tokadd(p, '$');
16203 tokadd(p, c);
16204 c = nextc(p);
16205 if (parser_is_identchar(p)) {
16206 if (tokadd_mbchar(p, c) == -1) return 0;
16207 }
16208 else {
16209 pushback(p, c);
16210 pushback(p, '-');
16211 return '$';
16212 }
16213 gvar:
16215 return tGVAR;
16216
16217 case '&': /* $&: last match */
16218 case '`': /* $`: string before last match */
16219 case '\'': /* $': string after last match */
16220 case '+': /* $+: string matches last paren. */
16221 if (IS_lex_state_for(last_state, EXPR_FNAME)) {
16222 tokadd(p, '$');
16223 tokadd(p, c);
16224 goto gvar;
16225 }
16226 set_yylval_node(NEW_BACK_REF(c, &_cur_loc));
16227 return tBACK_REF;
16228
16229 case '1': case '2': case '3':
16230 case '4': case '5': case '6':
16231 case '7': case '8': case '9':
16232 tokadd(p, '$');
16233 do {
16234 tokadd(p, c);
16235 c = nextc(p);
16236 } while (c != -1 && ISDIGIT(c));
16237 pushback(p, c);
16238 if (IS_lex_state_for(last_state, EXPR_FNAME)) goto gvar;
16239 tokfix(p);
16240 set_yylval_node(NEW_NTH_REF(parse_numvar(p), &_cur_loc));
16241 return tNTH_REF;
16242
16243 default:
16244 if (!parser_is_identchar(p)) {
16245 YYLTYPE loc = RUBY_INIT_YYLLOC();
16246 if (c == -1 || ISSPACE(c)) {
16247 compile_error(p, "`$' without identifiers is not allowed as a global variable name");
16248 }
16249 else {
16250 pushback(p, c);
16251 compile_error(p, "`$%c' is not allowed as a global variable name", c);
16252 }
16253 parser_show_error_line(p, &loc);
16255 return tGVAR;
16256 }
16257 /* fall through */
16258 case '0':
16259 tokadd(p, '$');
16260 }
16261
16262 if (tokadd_ident(p, c)) return 0;
16263 SET_LEX_STATE(EXPR_END);
16264 tokenize_ident(p, last_state);
16265 return tGVAR;
16266}
16267
16268#ifndef RIPPER
16269static bool
16270parser_numbered_param(struct parser_params *p, int n)
16271{
16272 if (n < 0) return false;
16273
16275 return false;
16276 }
16277 if (p->max_numparam == ORDINAL_PARAM) {
16278 compile_error(p, "ordinary parameter is defined");
16279 return false;
16280 }
16281 struct vtable *args = p->lvtbl->args;
16282 if (p->max_numparam < n) {
16283 p->max_numparam = n;
16284 }
16285 while (n > args->pos) {
16286 vtable_add(args, NUMPARAM_IDX_TO_ID(args->pos+1));
16287 }
16288 return true;
16289}
16290#endif
16291
16292static enum yytokentype
16293parse_atmark(struct parser_params *p, const enum lex_state_e last_state)
16294{
16295 const char *ptr = p->lex.pcur;
16296 enum yytokentype result = tIVAR;
16297 register int c = nextc(p);
16298 YYLTYPE loc;
16299
16300 p->lex.ptok = ptr - 1; /* from '@' */
16301 newtok(p);
16302 tokadd(p, '@');
16303 if (c == '@') {
16304 result = tCVAR;
16305 tokadd(p, '@');
16306 c = nextc(p);
16307 }
16308 SET_LEX_STATE(IS_lex_state_for(last_state, EXPR_FNAME) ? EXPR_ENDFN : EXPR_END);
16309 if (c == -1 || !parser_is_identchar(p)) {
16310 pushback(p, c);
16311 RUBY_SET_YYLLOC(loc);
16312 if (result == tIVAR) {
16313 compile_error(p, "`@' without identifiers is not allowed as an instance variable name");
16314 }
16315 else {
16316 compile_error(p, "`@@' without identifiers is not allowed as a class variable name");
16317 }
16318 parser_show_error_line(p, &loc);
16320 SET_LEX_STATE(EXPR_END);
16321 return result;
16322 }
16323 else if (ISDIGIT(c)) {
16324 pushback(p, c);
16325 RUBY_SET_YYLLOC(loc);
16326 if (result == tIVAR) {
16327 compile_error(p, "`@%c' is not allowed as an instance variable name", c);
16328 }
16329 else {
16330 compile_error(p, "`@@%c' is not allowed as a class variable name", c);
16331 }
16332 parser_show_error_line(p, &loc);
16334 SET_LEX_STATE(EXPR_END);
16335 return result;
16336 }
16337
16338 if (tokadd_ident(p, c)) return 0;
16339 tokenize_ident(p, last_state);
16340 return result;
16341}
16342
16343static enum yytokentype
16344parse_ident(struct parser_params *p, int c, int cmd_state)
16345{
16346 enum yytokentype result;
16347 int mb = ENC_CODERANGE_7BIT;
16348 const enum lex_state_e last_state = p->lex.state;
16349 ID ident;
16350
16351 do {
16352 if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
16353 if (tokadd_mbchar(p, c) == -1) return 0;
16354 c = nextc(p);
16355 } while (parser_is_identchar(p));
16356 if ((c == '!' || c == '?') && !peek(p, '=')) {
16357 result = tFID;
16358 tokadd(p, c);
16359 }
16360 else if (c == '=' && IS_lex_state(EXPR_FNAME) &&
16361 (!peek(p, '~') && !peek(p, '>') && (!peek(p, '=') || (peek_n(p, '>', 1))))) {
16362 result = tIDENTIFIER;
16363 tokadd(p, c);
16364 }
16365 else {
16366 result = tCONSTANT; /* assume provisionally */
16367 pushback(p, c);
16368 }
16369 tokfix(p);
16370
16371 if (IS_LABEL_POSSIBLE()) {
16372 if (IS_LABEL_SUFFIX(0)) {
16373 SET_LEX_STATE(EXPR_ARG|EXPR_LABELED);
16374 nextc(p);
16376 return tLABEL;
16377 }
16378 }
16379 if (mb == ENC_CODERANGE_7BIT && !IS_lex_state(EXPR_DOT)) {
16380 const struct kwtable *kw;
16381
16382 /* See if it is a reserved word. */
16383 kw = rb_reserved_word(tok(p), toklen(p));
16384 if (kw) {
16385 enum lex_state_e state = p->lex.state;
16386 if (IS_lex_state_for(state, EXPR_FNAME)) {
16387 SET_LEX_STATE(EXPR_ENDFN);
16389 return kw->id[0];
16390 }
16391 SET_LEX_STATE(kw->state);
16392 if (IS_lex_state(EXPR_BEG)) {
16393 p->command_start = TRUE;
16394 }
16395 if (kw->id[0] == keyword_do) {
16396 if (lambda_beginning_p()) {
16397 p->lex.lpar_beg = -1; /* make lambda_beginning_p() == FALSE in the body of "-> do ... end" */
16398 return keyword_do_LAMBDA;
16399 }
16400 if (COND_P()) return keyword_do_cond;
16401 if (CMDARG_P() && !IS_lex_state_for(state, EXPR_CMDARG))
16402 return keyword_do_block;
16403 return keyword_do;
16404 }
16405 if (IS_lex_state_for(state, (EXPR_BEG | EXPR_LABELED)))
16406 return kw->id[0];
16407 else {
16408 if (kw->id[0] != kw->id[1])
16409 SET_LEX_STATE(EXPR_BEG | EXPR_LABEL);
16410 return kw->id[1];
16411 }
16412 }
16413 }
16414
16415 if (IS_lex_state(EXPR_BEG_ANY | EXPR_ARG_ANY | EXPR_DOT)) {
16416 if (cmd_state) {
16417 SET_LEX_STATE(EXPR_CMDARG);
16418 }
16419 else {
16420 SET_LEX_STATE(EXPR_ARG);
16421 }
16422 }
16423 else if (p->lex.state == EXPR_FNAME) {
16424 SET_LEX_STATE(EXPR_ENDFN);
16425 }
16426 else {
16427 SET_LEX_STATE(EXPR_END);
16428 }
16429
16430 ident = tokenize_ident(p, last_state);
16431 if (result == tCONSTANT && is_local_id(ident)) result = tIDENTIFIER;
16432 if (!IS_lex_state_for(last_state, EXPR_DOT|EXPR_FNAME) &&
16433 (result == tIDENTIFIER) && /* not EXPR_FNAME, not attrasgn */
16434 lvar_defined(p, ident)) {
16435 SET_LEX_STATE(EXPR_END|EXPR_LABEL);
16436 }
16437 return result;
16438}
16439
16440static enum yytokentype
16441parser_yylex(struct parser_params *p)
16442{
16443 register int c;
16444 int space_seen = 0;
16445 int cmd_state;
16446 int label;
16447 enum lex_state_e last_state;
16448 int fallthru = FALSE;
16449 int token_seen = p->token_seen;
16450
16451 if (p->lex.strterm) {
16452 if (p->lex.strterm->flags & STRTERM_HEREDOC) {
16453 return here_document(p, &p->lex.strterm->u.heredoc);
16454 }
16455 else {
16456 token_flush(p);
16457 return parse_string(p, &p->lex.strterm->u.literal);
16458 }
16459 }
16460 cmd_state = p->command_start;
16461 p->command_start = FALSE;
16462 p->token_seen = TRUE;
16463 retry:
16464 last_state = p->lex.state;
16465#ifndef RIPPER
16466 token_flush(p);
16467#endif
16468 switch (c = nextc(p)) {
16469 case '\0': /* NUL */
16470 case '\004': /* ^D */
16471 case '\032': /* ^Z */
16472 case -1: /* end of script. */
16473 return 0;
16474
16475 /* white spaces */
16476 case ' ': case '\t': case '\f': case '\r':
16477 case '\13': /* '\v' */
16478 space_seen = 1;
16479#ifdef RIPPER
16480 while ((c = nextc(p))) {
16481 switch (c) {
16482 case ' ': case '\t': case '\f': case '\r':
16483 case '\13': /* '\v' */
16484 break;
16485 default:
16486 goto outofloop;
16487 }
16488 }
16489 outofloop:
16490 pushback(p, c);
16492#endif
16493 goto retry;
16494
16495 case '#': /* it's a comment */
16496 p->token_seen = token_seen;
16497 /* no magic_comment in shebang line */
16498 if (!parser_magic_comment(p, p->lex.pcur, p->lex.pend - p->lex.pcur)) {
16499 if (comment_at_top(p)) {
16500 set_file_encoding(p, p->lex.pcur, p->lex.pend);
16501 }
16502 }
16503 lex_goto_eol(p);
16505 fallthru = TRUE;
16506 /* fall through */
16507 case '\n':
16508 p->token_seen = token_seen;
16509 c = (IS_lex_state(EXPR_BEG|EXPR_CLASS|EXPR_FNAME|EXPR_DOT) &&
16510 !IS_lex_state(EXPR_LABELED));
16511 if (c || IS_lex_state_all(EXPR_ARG|EXPR_LABELED)) {
16512 if (!fallthru) {
16514 }
16515 fallthru = FALSE;
16516 if (!c && p->in_kwarg) {
16517 goto normal_newline;
16518 }
16519 goto retry;
16520 }
16521 while (1) {
16522 switch (c = nextc(p)) {
16523 case ' ': case '\t': case '\f': case '\r':
16524 case '\13': /* '\v' */
16525 space_seen = 1;
16526 break;
16527 case '#':
16528 pushback(p, c);
16529 if (space_seen) dispatch_scan_event(p, tSP);
16530 goto retry;
16531 case '&':
16532 case '.': {
16534 if (peek(p, '.') == (c == '&')) {
16535 pushback(p, c);
16537 goto retry;
16538 }
16539 }
16540 default:
16541 p->ruby_sourceline--;
16542 p->lex.nextline = p->lex.lastline;
16543 case -1: /* EOF no decrement*/
16544#ifndef RIPPER
16545 if (p->lex.prevline && !p->eofp) p->lex.lastline = p->lex.prevline;
16546 p->lex.pbeg = RSTRING_PTR(p->lex.lastline);
16547 p->lex.pend = p->lex.pcur = p->lex.pbeg + RSTRING_LEN(p->lex.lastline);
16548 pushback(p, 1); /* always pushback */
16549 p->lex.ptok = p->lex.pcur;
16550#else
16551 lex_goto_eol(p);
16552 if (c != -1) {
16553 p->lex.ptok = p->lex.pcur;
16554 }
16555#endif
16556 goto normal_newline;
16557 }
16558 }
16559 normal_newline:
16560 p->command_start = TRUE;
16561 SET_LEX_STATE(EXPR_BEG);
16562 return '\n';
16563
16564 case '*':
16565 if ((c = nextc(p)) == '*') {
16566 if ((c = nextc(p)) == '=') {
16568 SET_LEX_STATE(EXPR_BEG);
16569 return tOP_ASGN;
16570 }
16571 pushback(p, c);
16572 if (IS_SPCARG(c)) {
16573 rb_warning0("`**' interpreted as argument prefix");
16574 c = tDSTAR;
16575 }
16576 else if (IS_BEG()) {
16577 c = tDSTAR;
16578 }
16579 else {
16580 c = warn_balanced((enum ruby_method_ids)tPOW, "**", "argument prefix");
16581 }
16582 }
16583 else {
16584 if (c == '=') {
16585 set_yylval_id('*');
16586 SET_LEX_STATE(EXPR_BEG);
16587 return tOP_ASGN;
16588 }
16589 pushback(p, c);
16590 if (IS_SPCARG(c)) {
16591 rb_warning0("`*' interpreted as argument prefix");
16592 c = tSTAR;
16593 }
16594 else if (IS_BEG()) {
16595 c = tSTAR;
16596 }
16597 else {
16598 c = warn_balanced('*', "*", "argument prefix");
16599 }
16600 }
16601 SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
16602 return c;
16603
16604 case '!':
16605 c = nextc(p);
16606 if (IS_AFTER_OPERATOR()) {
16607 SET_LEX_STATE(EXPR_ARG);
16608 if (c == '@') {
16609 return '!';
16610 }
16611 }
16612 else {
16613 SET_LEX_STATE(EXPR_BEG);
16614 }
16615 if (c == '=') {
16616 return tNEQ;
16617 }
16618 if (c == '~') {
16619 return tNMATCH;
16620 }
16621 pushback(p, c);
16622 return '!';
16623
16624 case '=':
16625 if (was_bol(p)) {
16626 /* skip embedded rd document */
16627 if (word_match_p(p, "begin", 5)) {
16628 int first_p = TRUE;
16629
16630 lex_goto_eol(p);
16632 for (;;) {
16633 lex_goto_eol(p);
16634 if (!first_p) {
16636 }
16637 first_p = FALSE;
16638 c = nextc(p);
16639 if (c == -1) {
16640 compile_error(p, "embedded document meets end of file");
16641 return 0;
16642 }
16643 if (c == '=' && word_match_p(p, "end", 3)) {
16644 break;
16645 }
16646 pushback(p, c);
16647 }
16648 lex_goto_eol(p);
16650 goto retry;
16651 }
16652 }
16653
16654 SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
16655 if ((c = nextc(p)) == '=') {
16656 if ((c = nextc(p)) == '=') {
16657 return tEQQ;
16658 }
16659 pushback(p, c);
16660 return tEQ;
16661 }
16662 if (c == '~') {
16663 return tMATCH;
16664 }
16665 else if (c == '>') {
16666 return tASSOC;
16667 }
16668 pushback(p, c);
16669 return '=';
16670
16671 case '<':
16672 c = nextc(p);
16673 if (c == '<' &&
16674 !IS_lex_state(EXPR_DOT | EXPR_CLASS) &&
16675 !IS_END() &&
16676 (!IS_ARG() || IS_lex_state(EXPR_LABELED) || space_seen)) {
16677 int token = heredoc_identifier(p);
16678 if (token) return token < 0 ? 0 : token;
16679 }
16680 if (IS_AFTER_OPERATOR()) {
16681 SET_LEX_STATE(EXPR_ARG);
16682 }
16683 else {
16684 if (IS_lex_state(EXPR_CLASS))
16685 p->command_start = TRUE;
16686 SET_LEX_STATE(EXPR_BEG);
16687 }
16688 if (c == '=') {
16689 if ((c = nextc(p)) == '>') {
16690 return tCMP;
16691 }
16692 pushback(p, c);
16693 return tLEQ;
16694 }
16695 if (c == '<') {
16696 if ((c = nextc(p)) == '=') {
16698 SET_LEX_STATE(EXPR_BEG);
16699 return tOP_ASGN;
16700 }
16701 pushback(p, c);
16702 return warn_balanced((enum ruby_method_ids)tLSHFT, "<<", "here document");
16703 }
16704 pushback(p, c);
16705 return '<';
16706
16707 case '>':
16708 SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
16709 if ((c = nextc(p)) == '=') {
16710 return tGEQ;
16711 }
16712 if (c == '>') {
16713 if ((c = nextc(p)) == '=') {
16715 SET_LEX_STATE(EXPR_BEG);
16716 return tOP_ASGN;
16717 }
16718 pushback(p, c);
16719 return tRSHFT;
16720 }
16721 pushback(p, c);
16722 return '>';
16723
16724 case '"':
16725 label = (IS_LABEL_POSSIBLE() ? str_label : 0);
16726 p->lex.strterm = NEW_STRTERM(str_dquote | label, '"', 0);
16727 p->lex.ptok = p->lex.pcur-1;
16728 return tSTRING_BEG;
16729
16730 case '`':
16731 if (IS_lex_state(EXPR_FNAME)) {
16732 SET_LEX_STATE(EXPR_ENDFN);
16733 return c;
16734 }
16735 if (IS_lex_state(EXPR_DOT)) {
16736 if (cmd_state)
16737 SET_LEX_STATE(EXPR_CMDARG);
16738 else
16739 SET_LEX_STATE(EXPR_ARG);
16740 return c;
16741 }
16742 p->lex.strterm = NEW_STRTERM(str_xquote, '`', 0);
16743 return tXSTRING_BEG;
16744
16745 case '\'':
16746 label = (IS_LABEL_POSSIBLE() ? str_label : 0);
16747 p->lex.strterm = NEW_STRTERM(str_squote | label, '\'', 0);
16748 p->lex.ptok = p->lex.pcur-1;
16749 return tSTRING_BEG;
16750
16751 case '?':
16752 return parse_qmark(p, space_seen);
16753
16754 case '&':
16755 if ((c = nextc(p)) == '&') {
16756 SET_LEX_STATE(EXPR_BEG);
16757 if ((c = nextc(p)) == '=') {
16759 SET_LEX_STATE(EXPR_BEG);
16760 return tOP_ASGN;
16761 }
16762 pushback(p, c);
16763 return tANDOP;
16764 }
16765 else if (c == '=') {
16766 set_yylval_id('&');
16767 SET_LEX_STATE(EXPR_BEG);
16768 return tOP_ASGN;
16769 }
16770 else if (c == '.') {
16772 SET_LEX_STATE(EXPR_DOT);
16773 return tANDDOT;
16774 }
16775 pushback(p, c);
16776 if (IS_SPCARG(c)) {
16777 if ((c != ':') ||
16778 (c = peekc_n(p, 1)) == -1 ||
16779 !(c == '\'' || c == '"' ||
16780 is_identchar((p->lex.pcur+1), p->lex.pend, p->enc))) {
16781 rb_warning0("`&' interpreted as argument prefix");
16782 }
16783 c = tAMPER;
16784 }
16785 else if (IS_BEG()) {
16786 c = tAMPER;
16787 }
16788 else {
16789 c = warn_balanced('&', "&", "argument prefix");
16790 }
16791 SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
16792 return c;
16793
16794 case '|':
16795 if ((c = nextc(p)) == '|') {
16796 SET_LEX_STATE(EXPR_BEG);
16797 if ((c = nextc(p)) == '=') {
16799 SET_LEX_STATE(EXPR_BEG);
16800 return tOP_ASGN;
16801 }
16802 pushback(p, c);
16803 if (IS_lex_state_for(last_state, EXPR_BEG)) {
16804 c = '|';
16805 pushback(p, '|');
16806 return c;
16807 }
16808 return tOROP;
16809 }
16810 if (c == '=') {
16811 set_yylval_id('|');
16812 SET_LEX_STATE(EXPR_BEG);
16813 return tOP_ASGN;
16814 }
16815 SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG|EXPR_LABEL);
16816 pushback(p, c);
16817 return '|';
16818
16819 case '+':
16820 c = nextc(p);
16821 if (IS_AFTER_OPERATOR()) {
16822 SET_LEX_STATE(EXPR_ARG);
16823 if (c == '@') {
16824 return tUPLUS;
16825 }
16826 pushback(p, c);
16827 return '+';
16828 }
16829 if (c == '=') {
16830 set_yylval_id('+');
16831 SET_LEX_STATE(EXPR_BEG);
16832 return tOP_ASGN;
16833 }
16834 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous(p, '+'))) {
16835 SET_LEX_STATE(EXPR_BEG);
16836 pushback(p, c);
16837 if (c != -1 && ISDIGIT(c)) {
16838 return parse_numeric(p, '+');
16839 }
16840 return tUPLUS;
16841 }
16842 SET_LEX_STATE(EXPR_BEG);
16843 pushback(p, c);
16844 return warn_balanced('+', "+", "unary operator");
16845
16846 case '-':
16847 c = nextc(p);
16848 if (IS_AFTER_OPERATOR()) {
16849 SET_LEX_STATE(EXPR_ARG);
16850 if (c == '@') {
16851 return tUMINUS;
16852 }
16853 pushback(p, c);
16854 return '-';
16855 }
16856 if (c == '=') {
16857 set_yylval_id('-');
16858 SET_LEX_STATE(EXPR_BEG);
16859 return tOP_ASGN;
16860 }
16861 if (c == '>') {
16862 SET_LEX_STATE(EXPR_ENDFN);
16863 return tLAMBDA;
16864 }
16865 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous(p, '-'))) {
16866 SET_LEX_STATE(EXPR_BEG);
16867 pushback(p, c);
16868 if (c != -1 && ISDIGIT(c)) {
16869 return tUMINUS_NUM;
16870 }
16871 return tUMINUS;
16872 }
16873 SET_LEX_STATE(EXPR_BEG);
16874 pushback(p, c);
16875 return warn_balanced('-', "-", "unary operator");
16876
16877 case '.': {
16878 int is_beg = IS_BEG();
16879 SET_LEX_STATE(EXPR_BEG);
16880 if ((c = nextc(p)) == '.') {
16881 if ((c = nextc(p)) == '.') {
16882 if (p->lex.paren_nest == 0 && looking_at_eol_p(p)) {
16883 rb_warn0("... at EOL, should be parenthesized?");
16884 }
16885 return is_beg ? tBDOT3 : tDOT3;
16886 }
16887 pushback(p, c);
16888 return is_beg ? tBDOT2 : tDOT2;
16889 }
16890 pushback(p, c);
16891 if (c != -1 && ISDIGIT(c)) {
16892 char prev = p->lex.pcur-1 > p->lex.pbeg ? *(p->lex.pcur-2) : 0;
16893 parse_numeric(p, '.');
16894 if (ISDIGIT(prev)) {
16895 yyerror0("unexpected fraction part after numeric literal");
16896 }
16897 else {
16898 yyerror0("no .<digit> floating literal anymore; put 0 before dot");
16899 }
16900 SET_LEX_STATE(EXPR_END);
16901 p->lex.ptok = p->lex.pcur;
16902 goto retry;
16903 }
16904 set_yylval_id('.');
16905 SET_LEX_STATE(EXPR_DOT);
16906 return '.';
16907 }
16908
16909 case '0': case '1': case '2': case '3': case '4':
16910 case '5': case '6': case '7': case '8': case '9':
16911 return parse_numeric(p, c);
16912
16913 case ')':
16914 COND_POP();
16915 CMDARG_POP();
16916 SET_LEX_STATE(EXPR_ENDFN);
16917 p->lex.paren_nest--;
16918 return c;
16919
16920 case ']':
16921 COND_POP();
16922 CMDARG_POP();
16923 SET_LEX_STATE(EXPR_END);
16924 p->lex.paren_nest--;
16925 return c;
16926
16927 case '}':
16928 /* tSTRING_DEND does COND_POP and CMDARG_POP in the yacc's rule */
16929 if (!p->lex.brace_nest--) return tSTRING_DEND;
16930 COND_POP();
16931 CMDARG_POP();
16932 SET_LEX_STATE(EXPR_END);
16933 p->lex.paren_nest--;
16934 return c;
16935
16936 case ':':
16937 c = nextc(p);
16938 if (c == ':') {
16939 if (IS_BEG() || IS_lex_state(EXPR_CLASS) || IS_SPCARG(-1)) {
16940 SET_LEX_STATE(EXPR_BEG);
16941 return tCOLON3;
16942 }
16944 SET_LEX_STATE(EXPR_DOT);
16945 return tCOLON2;
16946 }
16947 if (IS_END() || ISSPACE(c) || c == '#') {
16948 pushback(p, c);
16949 c = warn_balanced(':', ":", "symbol literal");
16950 SET_LEX_STATE(EXPR_BEG);
16951 return c;
16952 }
16953 switch (c) {
16954 case '\'':
16955 p->lex.strterm = NEW_STRTERM(str_ssym, c, 0);
16956 break;
16957 case '"':
16958 p->lex.strterm = NEW_STRTERM(str_dsym, c, 0);
16959 break;
16960 default:
16961 pushback(p, c);
16962 break;
16963 }
16964 SET_LEX_STATE(EXPR_FNAME);
16965 return tSYMBEG;
16966
16967 case '/':
16968 if (IS_BEG()) {
16969 p->lex.strterm = NEW_STRTERM(str_regexp, '/', 0);
16970 return tREGEXP_BEG;
16971 }
16972 if ((c = nextc(p)) == '=') {
16973 set_yylval_id('/');
16974 SET_LEX_STATE(EXPR_BEG);
16975 return tOP_ASGN;
16976 }
16977 pushback(p, c);
16978 if (IS_SPCARG(c)) {
16979 arg_ambiguous(p, '/');
16980 p->lex.strterm = NEW_STRTERM(str_regexp, '/', 0);
16981 return tREGEXP_BEG;
16982 }
16983 SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
16984 return warn_balanced('/', "/", "regexp literal");
16985
16986 case '^':
16987 if ((c = nextc(p)) == '=') {
16988 set_yylval_id('^');
16989 SET_LEX_STATE(EXPR_BEG);
16990 return tOP_ASGN;
16991 }
16992 SET_LEX_STATE(IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG);
16993 pushback(p, c);
16994 return '^';
16995
16996 case ';':
16997 SET_LEX_STATE(EXPR_BEG);
16998 p->command_start = TRUE;
16999 return ';';
17000
17001 case ',':
17002 SET_LEX_STATE(EXPR_BEG|EXPR_LABEL);
17003 return ',';
17004
17005 case '~':
17006 if (IS_AFTER_OPERATOR()) {
17007 if ((c = nextc(p)) != '@') {
17008 pushback(p, c);
17009 }
17010 SET_LEX_STATE(EXPR_ARG);
17011 }
17012 else {
17013 SET_LEX_STATE(EXPR_BEG);
17014 }
17015 return '~';
17016
17017 case '(':
17018 if (IS_BEG()) {
17019 c = tLPAREN;
17020 }
17021 else if (!space_seen) {
17022 /* foo( ... ) => method call, no ambiguity */
17023 }
17024 else if (IS_ARG() || IS_lex_state_all(EXPR_END|EXPR_LABEL)) {
17025 c = tLPAREN_ARG;
17026 }
17027 else if (IS_lex_state(EXPR_ENDFN) && !lambda_beginning_p()) {
17028 rb_warning0("parentheses after method name is interpreted as "
17029 "an argument list, not a decomposed argument");
17030 }
17031 p->lex.paren_nest++;
17032 COND_PUSH(0);
17033 CMDARG_PUSH(0);
17034 SET_LEX_STATE(EXPR_BEG|EXPR_LABEL);
17035 return c;
17036
17037 case '[':
17038 p->lex.paren_nest++;
17039 if (IS_AFTER_OPERATOR()) {
17040 if ((c = nextc(p)) == ']') {
17041 SET_LEX_STATE(EXPR_ARG);
17042 if ((c = nextc(p)) == '=') {
17043 return tASET;
17044 }
17045 pushback(p, c);
17046 return tAREF;
17047 }
17048 pushback(p, c);
17049 SET_LEX_STATE(EXPR_ARG|EXPR_LABEL);
17050 return '[';
17051 }
17052 else if (IS_BEG()) {
17053 c = tLBRACK;
17054 }
17055 else if (IS_ARG() && (space_seen || IS_lex_state(EXPR_LABELED))) {
17056 c = tLBRACK;
17057 }
17058 SET_LEX_STATE(EXPR_BEG|EXPR_LABEL);
17059 COND_PUSH(0);
17060 CMDARG_PUSH(0);
17061 return c;
17062
17063 case '{':
17064 ++p->lex.brace_nest;
17065 if (lambda_beginning_p())
17066 c = tLAMBEG;
17067 else if (IS_lex_state(EXPR_LABELED))
17068 c = tLBRACE; /* hash */
17069 else if (IS_lex_state(EXPR_ARG_ANY | EXPR_END | EXPR_ENDFN))
17070 c = '{'; /* block (primary) */
17071 else if (IS_lex_state(EXPR_ENDARG))
17072 c = tLBRACE_ARG; /* block (expr) */
17073 else
17074 c = tLBRACE; /* hash */
17075 if (c != tLBRACE) {
17076 p->command_start = TRUE;
17077 SET_LEX_STATE(EXPR_BEG);
17078 }
17079 else {
17080 SET_LEX_STATE(EXPR_BEG|EXPR_LABEL);
17081 }
17082 ++p->lex.paren_nest; /* after lambda_beginning_p() */
17083 COND_PUSH(0);
17084 CMDARG_PUSH(0);
17085 return c;
17086
17087 case '\\':
17088 c = nextc(p);
17089 if (c == '\n') {
17090 space_seen = 1;
17092 goto retry; /* skip \\n */
17093 }
17094 if (c == ' ') return tSP;
17095 if (ISSPACE(c)) return c;
17096 pushback(p, c);
17097 return '\\';
17098
17099 case '%':
17100 return parse_percent(p, space_seen, last_state);
17101
17102 case '$':
17103 return parse_gvar(p, last_state);
17104
17105 case '@':
17106 return parse_atmark(p, last_state);
17107
17108 case '_':
17109 if (was_bol(p) && whole_match_p(p, "__END__", 7, 0)) {
17110 p->ruby__end__seen = 1;
17111 p->eofp = 1;
17112#ifndef RIPPER
17113 return -1;
17114#else
17115 lex_goto_eol(p);
17117 return 0;
17118#endif
17119 }
17120 newtok(p);
17121 break;
17122
17123 default:
17124 if (!parser_is_identchar(p)) {
17125 compile_error(p, "Invalid char `\\x%02X' in expression", c);
17126 token_flush(p);
17127 goto retry;
17128 }
17129
17130 newtok(p);
17131 break;
17132 }
17133
17134 return parse_ident(p, c, cmd_state);
17135}
17136
17137static enum yytokentype
17138yylex(YYSTYPE *lval, YYLTYPE *yylloc, struct parser_params *p)
17139{
17140 enum yytokentype t;
17141
17142 p->lval = lval;
17143 lval->val = Qundef;
17144 t = parser_yylex(p);
17145
17146 if (p->lex.strterm && (p->lex.strterm->flags & STRTERM_HEREDOC))
17148 else
17149 RUBY_SET_YYLLOC(*yylloc);
17150
17151 if (has_delayed_token(p))
17153 else if (t != 0)
17154 dispatch_scan_event(p, t);
17155
17156 return t;
17157}
17158
17159#define LVAR_USED ((ID)1 << (sizeof(ID) * CHAR_BIT - 1))
17160
17161static NODE*
17162node_newnode(struct parser_params *p, enum node_type type, VALUE a0, VALUE a1, VALUE a2, const rb_code_location_t *loc)
17163{
17164 NODE *n = rb_ast_newnode(p->ast, type);
17165
17166 rb_node_init(n, type, a0, a1, a2);
17167
17168 nd_set_loc(n, loc);
17169 nd_set_node_id(n, parser_get_node_id(p));
17170 return n;
17171}
17172
17173static NODE *
17174nd_set_loc(NODE *nd, const YYLTYPE *loc)
17175{
17176 nd->nd_loc = *loc;
17177 nd_set_line(nd, loc->beg_pos.lineno);
17178 return nd;
17179}
17180
17181#ifndef RIPPER
17182static enum node_type
17183nodetype(NODE *node) /* for debug */
17184{
17185 return (enum node_type)nd_type(node);
17186}
17187
17188static int
17189nodeline(NODE *node)
17190{
17191 return nd_line(node);
17192}
17193
17194static NODE*
17195newline_node(NODE *node)
17196{
17197 if (node) {
17198 node = remove_begin(node);
17199 node->flags |= NODE_FL_NEWLINE;
17200 }
17201 return node;
17202}
17203
17204static void
17205fixpos(NODE *node, NODE *orig)
17206{
17207 if (!node) return;
17208 if (!orig) return;
17209 nd_set_line(node, nd_line(orig));
17210}
17211
17212static void
17213parser_warning(struct parser_params *p, NODE *node, const char *mesg)
17214{
17215 rb_compile_warning(p->ruby_sourcefile, nd_line(node), "%s", mesg);
17216}
17217
17218static void
17219parser_warn(struct parser_params *p, NODE *node, const char *mesg)
17220{
17221 rb_compile_warn(p->ruby_sourcefile, nd_line(node), "%s", mesg);
17222}
17223
17224static NODE*
17225block_append(struct parser_params *p, NODE *head, NODE *tail)
17226{
17227 NODE *end, *h = head, *nd;
17228
17229 if (tail == 0) return head;
17230
17231 if (h == 0) return tail;
17232 switch (nd_type(h)) {
17233 case NODE_LIT:
17234 case NODE_STR:
17235 case NODE_SELF:
17236 case NODE_TRUE:
17237 case NODE_FALSE:
17238 case NODE_NIL:
17239 parser_warning(p, h, "unused literal ignored");
17240 return tail;
17241 default:
17242 h = end = NEW_BLOCK(head, &head->nd_loc);
17243 end->nd_end = end;
17244 head = end;
17245 break;
17246 case NODE_BLOCK:
17247 end = h->nd_end;
17248 break;
17249 }
17250
17251 nd = end->nd_head;
17252 switch (nd_type(nd)) {
17253 case NODE_RETURN:
17254 case NODE_BREAK:
17255 case NODE_NEXT:
17256 case NODE_REDO:
17257 case NODE_RETRY:
17258 if (RTEST(ruby_verbose)) {
17259 parser_warning(p, tail, "statement not reached");
17260 }
17261 break;
17262
17263 default:
17264 break;
17265 }
17266
17267 if (nd_type(tail) != NODE_BLOCK) {
17268 tail = NEW_BLOCK(tail, &tail->nd_loc);
17269 tail->nd_end = tail;
17270 }
17271 end->nd_next = tail;
17272 h->nd_end = tail->nd_end;
17273 nd_set_last_loc(head, nd_last_loc(tail));
17274 return head;
17275}
17276
17277/* append item to the list */
17278static NODE*
17279list_append(struct parser_params *p, NODE *list, NODE *item)
17280{
17281 NODE *last;
17282
17283 if (list == 0) return NEW_LIST(item, &item->nd_loc);
17284 if (list->nd_next) {
17285 last = list->nd_next->nd_end;
17286 }
17287 else {
17288 last = list;
17289 }
17290
17291 list->nd_alen += 1;
17292 last->nd_next = NEW_LIST(item, &item->nd_loc);
17293 list->nd_next->nd_end = last->nd_next;
17294
17296
17297 return list;
17298}
17299
17300/* concat two lists */
17301static NODE*
17302list_concat(NODE *head, NODE *tail)
17303{
17304 NODE *last;
17305
17306 if (head->nd_next) {
17307 last = head->nd_next->nd_end;
17308 }
17309 else {
17310 last = head;
17311 }
17312
17313 head->nd_alen += tail->nd_alen;
17314 last->nd_next = tail;
17315 if (tail->nd_next) {
17316 head->nd_next->nd_end = tail->nd_next->nd_end;
17317 }
17318 else {
17319 head->nd_next->nd_end = tail;
17320 }
17321
17322 nd_set_last_loc(head, nd_last_loc(tail));
17323
17324 return head;
17325}
17326
17327static int
17328literal_concat0(struct parser_params *p, VALUE head, VALUE tail)
17329{
17330 if (NIL_P(tail)) return 1;
17331 if (!rb_enc_compatible(head, tail)) {
17332 compile_error(p, "string literal encodings differ (%s / %s)",
17333 rb_enc_name(rb_enc_get(head)),
17334 rb_enc_name(rb_enc_get(tail)));
17335 rb_str_resize(head, 0);
17336 rb_str_resize(tail, 0);
17337 return 0;
17338 }
17339 rb_str_buf_append(head, tail);
17340 return 1;
17341}
17342
17343/* concat two string literals */
17344static NODE *
17345literal_concat(struct parser_params *p, NODE *head, NODE *tail, const YYLTYPE *loc)
17346{
17347 enum node_type htype;
17348 NODE *headlast;
17349 VALUE lit;
17350
17351 if (!head) return tail;
17352 if (!tail) return head;
17353
17354 htype = nd_type(head);
17355 if (htype == NODE_EVSTR) {
17356 NODE *node = NEW_DSTR(STR_NEW0(), loc);
17357 RB_OBJ_WRITTEN(p->ast, Qnil, node->nd_lit);
17358 head = list_append(p, node, head);
17359 htype = NODE_DSTR;
17360 }
17361 if (p->heredoc_indent > 0) {
17362 switch (htype) {
17363 case NODE_STR:
17364 nd_set_type(head, NODE_DSTR);
17365 case NODE_DSTR:
17366 return list_append(p, head, tail);
17367 default:
17368 break;
17369 }
17370 }
17371 switch (nd_type(tail)) {
17372 case NODE_STR:
17373 if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
17374 nd_type(headlast) == NODE_STR) {
17375 htype = NODE_STR;
17376 lit = headlast->nd_lit;
17377 }
17378 else {
17379 lit = head->nd_lit;
17380 }
17381 if (htype == NODE_STR) {
17382 if (!literal_concat0(p, lit, tail->nd_lit)) {
17383 error:
17384 rb_discard_node(p, head);
17385 rb_discard_node(p, tail);
17386 return 0;
17387 }
17388 rb_discard_node(p, tail);
17389 }
17390 else {
17391 list_append(p, head, tail);
17392 }
17393 break;
17394
17395 case NODE_DSTR:
17396 if (htype == NODE_STR) {
17397 if (!literal_concat0(p, head->nd_lit, tail->nd_lit))
17398 goto error;
17399 tail->nd_lit = head->nd_lit;
17400 rb_discard_node(p, head);
17401 head = tail;
17402 }
17403 else if (NIL_P(tail->nd_lit)) {
17404 append:
17405 head->nd_alen += tail->nd_alen - 1;
17406 head->nd_next->nd_end->nd_next = tail->nd_next;
17407 head->nd_next->nd_end = tail->nd_next->nd_end;
17408 rb_discard_node(p, tail);
17409 }
17410 else if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
17411 nd_type(headlast) == NODE_STR) {
17412 lit = headlast->nd_lit;
17413 if (!literal_concat0(p, lit, tail->nd_lit))
17414 goto error;
17415 tail->nd_lit = Qnil;
17416 goto append;
17417 }
17418 else {
17419 list_concat(head, NEW_NODE(NODE_LIST, NEW_STR(tail->nd_lit, loc), tail->nd_alen, tail->nd_next, loc));
17420 }
17421 break;
17422
17423 case NODE_EVSTR:
17424 if (htype == NODE_STR) {
17425 nd_set_type(head, NODE_DSTR);
17426 head->nd_alen = 1;
17427 }
17428 list_append(p, head, tail);
17429 break;
17430 }
17431 return head;
17432}
17433
17434static NODE *
17435evstr2dstr(struct parser_params *p, NODE *node)
17436{
17437 if (nd_type(node) == NODE_EVSTR) {
17438 NODE * dstr = NEW_DSTR(STR_NEW0(), &node->nd_loc);
17439 RB_OBJ_WRITTEN(p->ast, Qnil, dstr->nd_lit);
17440 node = list_append(p, dstr, node);
17441 }
17442 return node;
17443}
17444
17445static NODE *
17446new_evstr(struct parser_params *p, NODE *node, const YYLTYPE *loc)
17447{
17448 NODE *head = node;
17449
17450 if (node) {
17451 switch (nd_type(node)) {
17452 case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
17453 return node;
17454 }
17455 }
17456 return NEW_EVSTR(head, loc);
17457}
17458
17459static NODE *
17460call_bin_op(struct parser_params *p, NODE *recv, ID id, NODE *arg1,
17461 const YYLTYPE *op_loc, const YYLTYPE *loc)
17462{
17463 NODE *expr;
17464 value_expr(recv);
17465 value_expr(arg1);
17466 expr = NEW_OPCALL(recv, id, NEW_LIST(arg1, &arg1->nd_loc), loc);
17467 nd_set_line(expr, op_loc->beg_pos.lineno);
17468 return expr;
17469}
17470
17471static NODE *
17472call_uni_op(struct parser_params *p, NODE *recv, ID id, const YYLTYPE *op_loc, const YYLTYPE *loc)
17473{
17474 NODE *opcall;
17475 value_expr(recv);
17476 opcall = NEW_OPCALL(recv, id, 0, loc);
17477 nd_set_line(opcall, op_loc->beg_pos.lineno);
17478 return opcall;
17479}
17480
17481static NODE *
17482new_qcall(struct parser_params* p, ID atype, NODE *recv, ID mid, NODE *args, const YYLTYPE *op_loc, const YYLTYPE *loc)
17483{
17484 NODE *qcall = NEW_QCALL(atype, recv, mid, args, loc);
17485 nd_set_line(qcall, op_loc->beg_pos.lineno);
17486 return qcall;
17487}
17488
17489static NODE*
17490new_command_qcall(struct parser_params* p, ID atype, NODE *recv, ID mid, NODE *args, NODE *block, const YYLTYPE *op_loc, const YYLTYPE *loc)
17491{
17492 NODE *ret;
17493 if (block) block_dup_check(p, args, block);
17494 ret = new_qcall(p, atype, recv, mid, args, op_loc, loc);
17495 if (block) ret = method_add_block(p, ret, block, loc);
17496 fixpos(ret, recv);
17497 return ret;
17498}
17499
17500#define nd_once_body(node) (nd_type(node) == NODE_ONCE ? (node)->nd_body : node)
17501static NODE*
17502match_op(struct parser_params *p, NODE *node1, NODE *node2, const YYLTYPE *op_loc, const YYLTYPE *loc)
17503{
17504 NODE *n;
17505 int line = op_loc->beg_pos.lineno;
17506
17507 value_expr(node1);
17508 value_expr(node2);
17509 if (node1 && (n = nd_once_body(node1)) != 0) {
17510 switch (nd_type(n)) {
17511 case NODE_DREGX:
17512 {
17513 NODE *match = NEW_MATCH2(node1, node2, loc);
17514 nd_set_line(match, line);
17515 return match;
17516 }
17517
17518 case NODE_LIT:
17519 if (RB_TYPE_P(n->nd_lit, T_REGEXP)) {
17520 const VALUE lit = n->nd_lit;
17521 NODE *match = NEW_MATCH2(node1, node2, loc);
17522 match->nd_args = reg_named_capture_assign(p, lit, loc);
17523 nd_set_line(match, line);
17524 return match;
17525 }
17526 }
17527 }
17528
17529 if (node2 && (n = nd_once_body(node2)) != 0) {
17530 NODE *match3;
17531
17532 switch (nd_type(n)) {
17533 case NODE_LIT:
17534 if (!RB_TYPE_P(n->nd_lit, T_REGEXP)) break;
17535 /* fallthru */
17536 case NODE_DREGX:
17537 match3 = NEW_MATCH3(node2, node1, loc);
17538 return match3;
17539 }
17540 }
17541
17542 n = NEW_CALL(node1, tMATCH, NEW_LIST(node2, &node2->nd_loc), loc);
17543 nd_set_line(n, line);
17544 return n;
17545}
17546
17547# if WARN_PAST_SCOPE
17548static int
17549past_dvar_p(struct parser_params *p, ID id)
17550{
17551 struct vtable *past = p->lvtbl->past;
17552 while (past) {
17553 if (vtable_included(past, id)) return 1;
17554 past = past->prev;
17555 }
17556 return 0;
17557}
17558# endif
17559
17560/* As Ripper#warn does not have arguments for the location, so the
17561 * following messages cannot be separated */
17562#define WARN_LOCATION(type) do { \
17563 if (p->warn_location) { \
17564 int line; \
17565 VALUE file = rb_source_location(&line); \
17566 rb_warn3(type" in eval may not return location in binding;" \
17567 " use Binding#source_location instead\n" \
17568 "%"PRIsWARN":%d: warning: in `%"PRIsWARN"'", \
17569 file, WARN_I(line), rb_id2str(rb_frame_this_func())); \
17570 } \
17571} while (0)
17572
17573static int
17574numparam_nested_p(struct parser_params *p)
17575{
17576 struct local_vars *local = p->lvtbl;
17577 NODE *outer = local->numparam.outer;
17578 NODE *inner = local->numparam.inner;
17579 if (outer || inner) {
17580 NODE *used = outer ? outer : inner;
17581 compile_error(p, "numbered parameter is already used in\n"
17582 "%s:%d: %s block here",
17584 outer ? "outer" : "inner");
17585 parser_show_error_line(p, &used->nd_loc);
17586 return 1;
17587 }
17588 return 0;
17589}
17590
17591static NODE*
17592gettable(struct parser_params *p, ID id, const YYLTYPE *loc)
17593{
17594 ID *vidp = NULL;
17595 NODE *node;
17596 switch (id) {
17597 case keyword_self:
17598 return NEW_SELF(loc);
17599 case keyword_nil:
17600 return NEW_NIL(loc);
17601 case keyword_true:
17602 return NEW_TRUE(loc);
17603 case keyword_false:
17604 return NEW_FALSE(loc);
17605 case keyword__FILE__:
17606 WARN_LOCATION("__FILE__");
17607 {
17608 VALUE file = p->ruby_sourcefile_string;
17609 if (NIL_P(file))
17610 file = rb_str_new(0, 0);
17611 else
17612 file = rb_str_dup(file);
17613 node = NEW_STR(file, loc);
17614 RB_OBJ_WRITTEN(p->ast, Qnil, file);
17615 }
17616 return node;
17617 case keyword__LINE__:
17618 WARN_LOCATION("__LINE__");
17619 return NEW_LIT(INT2FIX(p->tokline), loc);
17621 node = NEW_LIT(rb_enc_from_encoding(p->enc), loc);
17622 RB_OBJ_WRITTEN(p->ast, Qnil, node->nd_lit);
17623 return node;
17624
17625 }
17626 switch (id_type(id)) {
17627 case ID_LOCAL:
17628 if (dyna_in_block(p) && dvar_defined_ref(p, id, &vidp)) {
17629 if (NUMPARAM_ID_P(id) && numparam_nested_p(p)) return 0;
17630 if (id == p->cur_arg) {
17631 compile_error(p, "circular argument reference - %"PRIsWARN, rb_id2str(id));
17632 return 0;
17633 }
17634 if (vidp) *vidp |= LVAR_USED;
17635 node = NEW_DVAR(id, loc);
17636 return node;
17637 }
17638 if (local_id_ref(p, id, &vidp)) {
17639 if (id == p->cur_arg) {
17640 compile_error(p, "circular argument reference - %"PRIsWARN, rb_id2str(id));
17641 return 0;
17642 }
17643 if (vidp) *vidp |= LVAR_USED;
17644 node = NEW_LVAR(id, loc);
17645 return node;
17646 }
17647 if (dyna_in_block(p) && NUMPARAM_ID_P(id) &&
17648 parser_numbered_param(p, NUMPARAM_ID_TO_IDX(id))) {
17649 if (numparam_nested_p(p)) return 0;
17650 node = NEW_DVAR(id, loc);
17651 struct local_vars *local = p->lvtbl;
17652 if (!local->numparam.current) local->numparam.current = node;
17653 return node;
17654 }
17655# if WARN_PAST_SCOPE
17656 if (!p->in_defined && RTEST(ruby_verbose) && past_dvar_p(p, id)) {
17657 rb_warning1("possible reference to past scope - %"PRIsWARN, rb_id2str(id));
17658 }
17659# endif
17660 /* method call without arguments */
17661 return NEW_VCALL(id, loc);
17662 case ID_GLOBAL:
17663 return NEW_GVAR(id, loc);
17664 case ID_INSTANCE:
17665 return NEW_IVAR(id, loc);
17666 case ID_CONST:
17667 return NEW_CONST(id, loc);
17668 case ID_CLASS:
17669 return NEW_CVAR(id, loc);
17670 }
17671 compile_error(p, "identifier %"PRIsVALUE" is not valid to get", rb_id2str(id));
17672 return 0;
17673}
17674
17675static NODE *
17676opt_arg_append(NODE *opt_list, NODE *opt)
17677{
17678 NODE *opts = opt_list;
17679 opts->nd_loc.end_pos = opt->nd_loc.end_pos;
17680
17681 while (opts->nd_next) {
17682 opts = opts->nd_next;
17683 opts->nd_loc.end_pos = opt->nd_loc.end_pos;
17684 }
17685 opts->nd_next = opt;
17686
17687 return opt_list;
17688}
17689
17690static NODE *
17691kwd_append(NODE *kwlist, NODE *kw)
17692{
17693 if (kwlist) {
17694 NODE *kws = kwlist;
17695 kws->nd_loc.end_pos = kw->nd_loc.end_pos;
17696 while (kws->nd_next) {
17697 kws = kws->nd_next;
17698 kws->nd_loc.end_pos = kw->nd_loc.end_pos;
17699 }
17700 kws->nd_next = kw;
17701 }
17702 return kwlist;
17703}
17704
17705static NODE *
17706new_defined(struct parser_params *p, NODE *expr, const YYLTYPE *loc)
17707{
17708 return NEW_DEFINED(remove_begin_all(expr), loc);
17709}
17710
17711static NODE*
17712symbol_append(struct parser_params *p, NODE *symbols, NODE *symbol)
17713{
17714 if (nd_type(symbol) == NODE_DSTR) {
17715 nd_set_type(symbol, NODE_DSYM);
17716 }
17717 else {
17718 nd_set_type(symbol, NODE_LIT);
17719 RB_OBJ_WRITTEN(p->ast, Qnil, symbol->nd_lit = rb_str_intern(symbol->nd_lit));
17720 }
17721 return list_append(p, symbols, symbol);
17722}
17723
17724static NODE *
17725new_regexp(struct parser_params *p, NODE *node, int options, const YYLTYPE *loc)
17726{
17727 NODE *list, *prev;
17728 VALUE lit;
17729
17730 if (!node) {
17731 node = NEW_LIT(reg_compile(p, STR_NEW0(), options), loc);
17732 RB_OBJ_WRITTEN(p->ast, Qnil, node->nd_lit);
17733 return node;
17734 }
17735 switch (nd_type(node)) {
17736 case NODE_STR:
17737 {
17738 VALUE src = node->nd_lit;
17739 nd_set_type(node, NODE_LIT);
17740 nd_set_loc(node, loc);
17741 RB_OBJ_WRITTEN(p->ast, Qnil, node->nd_lit = reg_compile(p, src, options));
17742 }
17743 break;
17744 default:
17745 lit = STR_NEW0();
17746 node = NEW_NODE(NODE_DSTR, lit, 1, NEW_LIST(node, loc), loc);
17747 RB_OBJ_WRITTEN(p->ast, Qnil, lit);
17748 /* fall through */
17749 case NODE_DSTR:
17750 nd_set_type(node, NODE_DREGX);
17751 nd_set_loc(node, loc);
17752 node->nd_cflag = options & RE_OPTION_MASK;
17753 if (!NIL_P(node->nd_lit)) reg_fragment_check(p, node->nd_lit, options);
17754 for (list = (prev = node)->nd_next; list; list = list->nd_next) {
17755 if (nd_type(list->nd_head) == NODE_STR) {
17756 VALUE tail = list->nd_head->nd_lit;
17757 if (reg_fragment_check(p, tail, options) && prev && !NIL_P(prev->nd_lit)) {
17758 VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
17759 if (!literal_concat0(p, lit, tail)) {
17760 return NEW_NIL(loc); /* dummy node on error */
17761 }
17762 rb_str_resize(tail, 0);
17763 prev->nd_next = list->nd_next;
17764 rb_discard_node(p, list->nd_head);
17765 rb_discard_node(p, list);
17766 list = prev;
17767 }
17768 else {
17769 prev = list;
17770 }
17771 }
17772 else {
17773 prev = 0;
17774 }
17775 }
17776 if (!node->nd_next) {
17777 VALUE src = node->nd_lit;
17778 nd_set_type(node, NODE_LIT);
17779 RB_OBJ_WRITTEN(p->ast, Qnil, node->nd_lit = reg_compile(p, src, options));
17780 }
17781 if (options & RE_OPTION_ONCE) {
17782 node = NEW_NODE(NODE_ONCE, 0, node, 0, loc);
17783 }
17784 break;
17785 }
17786 return node;
17787}
17788
17789static NODE *
17790new_kw_arg(struct parser_params *p, NODE *k, const YYLTYPE *loc)
17791{
17792 if (!k) return 0;
17793 return NEW_KW_ARG(0, (k), loc);
17794}
17795
17796static NODE *
17797new_xstring(struct parser_params *p, NODE *node, const YYLTYPE *loc)
17798{
17799 if (!node) {
17800 VALUE lit = STR_NEW0();
17801 NODE *xstr = NEW_XSTR(lit, loc);
17802 RB_OBJ_WRITTEN(p->ast, Qnil, lit);
17803 return xstr;
17804 }
17805 switch (nd_type(node)) {
17806 case NODE_STR:
17807 nd_set_type(node, NODE_XSTR);
17808 nd_set_loc(node, loc);
17809 break;
17810 case NODE_DSTR:
17811 nd_set_type(node, NODE_DXSTR);
17812 nd_set_loc(node, loc);
17813 break;
17814 default:
17815 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node, loc), loc);
17816 break;
17817 }
17818 return node;
17819}
17820
17821static void
17822check_literal_when(struct parser_params *p, NODE *arg, const YYLTYPE *loc)
17823{
17824 VALUE lit;
17825
17826 if (!arg || !p->case_labels) return;
17827
17829 if (lit == Qundef) return;
17830 if (nd_type(arg) == NODE_STR) {
17831 RB_OBJ_WRITTEN(p->ast, Qnil, arg->nd_lit = lit);
17832 }
17833
17834 if (NIL_P(p->case_labels)) {
17836 }
17837 else {
17838 VALUE line = rb_hash_lookup(p->case_labels, lit);
17839 if (!NIL_P(line)) {
17840 rb_warning1("duplicated `when' clause with line %d is ignored",
17841 WARN_IVAL(line));
17842 return;
17843 }
17844 }
17846}
17847
17848#else /* !RIPPER */
17849static int
17850id_is_var(struct parser_params *p, ID id)
17851{
17852 if (is_notop_id(id)) {
17853 switch (id & ID_SCOPE_MASK) {
17854 case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
17855 return 1;
17856 case ID_LOCAL:
17857 if (dyna_in_block(p)) {
17858 if (NUMPARAM_ID_P(id) || dvar_defined(p, id)) return 1;
17859 }
17860 if (local_id(p, id)) return 1;
17861 /* method call without arguments */
17862 return 0;
17863 }
17864 }
17865 compile_error(p, "identifier %"PRIsVALUE" is not valid to get", rb_id2str(id));
17866 return 0;
17867}
17868
17869static VALUE
17870new_regexp(struct parser_params *p, VALUE re, VALUE opt, const YYLTYPE *loc)
17871{
17872 VALUE src = 0, err;
17873 int options = 0;
17874 if (ripper_is_node_yylval(re)) {
17875 src = RNODE(re)->nd_cval;
17876 re = RNODE(re)->nd_rval;
17877 }
17878 if (ripper_is_node_yylval(opt)) {
17879 options = (int)RNODE(opt)->nd_tag;
17880 opt = RNODE(opt)->nd_rval;
17881 }
17882 if (src && NIL_P(parser_reg_compile(p, src, options, &err))) {
17883 compile_error(p, "%"PRIsVALUE, err);
17884 }
17885 return dispatch2(regexp_literal, re, opt);
17886}
17887#endif /* !RIPPER */
17888
17889
17890#ifndef RIPPER
17891static const char rb_parser_lex_state_names[][8] = {
17892 "BEG", "END", "ENDARG", "ENDFN", "ARG",
17893 "CMDARG", "MID", "FNAME", "DOT", "CLASS",
17894 "LABEL", "LABELED","FITEM",
17895};
17896
17897static VALUE
17898append_lex_state_name(enum lex_state_e state, VALUE buf)
17899{
17900 int i, sep = 0;
17901 unsigned int mask = 1;
17902 static const char none[] = "NONE";
17903
17904 for (i = 0; i < EXPR_MAX_STATE; ++i, mask <<= 1) {
17905 if ((unsigned)state & mask) {
17906 if (sep) {
17907 rb_str_cat(buf, "|", 1);
17908 }
17909 sep = 1;
17910 rb_str_cat_cstr(buf, rb_parser_lex_state_names[i]);
17911 }
17912 }
17913 if (!sep) {
17914 rb_str_cat(buf, none, sizeof(none)-1);
17915 }
17916 return buf;
17917}
17918
17919static void
17920flush_debug_buffer(struct parser_params *p, VALUE out, VALUE str)
17921{
17922 VALUE mesg = p->debug_buffer;
17923
17924 if (!NIL_P(mesg) && RSTRING_LEN(mesg)) {
17925 p->debug_buffer = Qnil;
17926 rb_io_puts(1, &mesg, out);
17927 }
17928 if (!NIL_P(str) && RSTRING_LEN(str)) {
17930 }
17931}
17932
17933enum lex_state_e
17935 enum lex_state_e to, int line)
17936{
17937 VALUE mesg;
17938 mesg = rb_str_new_cstr("lex_state: ");
17939 append_lex_state_name(from, mesg);
17940 rb_str_cat_cstr(mesg, " -> ");
17941 append_lex_state_name(to, mesg);
17942 rb_str_catf(mesg, " at line %d\n", line);
17943 flush_debug_buffer(p, p->debug_output, mesg);
17944 return to;
17945}
17946
17947VALUE
17949{
17950 return rb_fstring(append_lex_state_name(state, rb_str_new(0, 0)));
17951}
17952
17953static void
17954append_bitstack_value(stack_type stack, VALUE mesg)
17955{
17956 if (stack == 0) {
17957 rb_str_cat_cstr(mesg, "0");
17958 }
17959 else {
17960 stack_type mask = (stack_type)1U << (CHAR_BIT * sizeof(stack_type) - 1);
17961 for (; mask && !(stack & mask); mask >>= 1) continue;
17962 for (; mask; mask >>= 1) rb_str_cat(mesg, stack & mask ? "1" : "0", 1);
17963 }
17964}
17965
17966void
17968 const char *name, int line)
17969{
17970 VALUE mesg = rb_sprintf("%s: ", name);
17971 append_bitstack_value(stack, mesg);
17972 rb_str_catf(mesg, " at line %d\n", line);
17973 flush_debug_buffer(p, p->debug_output, mesg);
17974}
17975
17976void
17977rb_parser_fatal(struct parser_params *p, const char *fmt, ...)
17978{
17979 va_list ap;
17980 VALUE mesg = rb_str_new_cstr("internal parser error: ");
17981
17982 va_start(ap, fmt);
17983 rb_str_vcatf(mesg, fmt, ap);
17984 va_end(ap);
17985 parser_yyerror(p, NULL, RSTRING_PTR(mesg));
17986 RB_GC_GUARD(mesg);
17987
17988 mesg = rb_str_new(0, 0);
17989 append_lex_state_name(p->lex.state, mesg);
17990 compile_error(p, "lex.state: %"PRIsVALUE, mesg);
17991 rb_str_resize(mesg, 0);
17992 append_bitstack_value(p->cond_stack, mesg);
17993 compile_error(p, "cond_stack: %"PRIsVALUE, mesg);
17994 rb_str_resize(mesg, 0);
17995 append_bitstack_value(p->cmdarg_stack, mesg);
17996 compile_error(p, "cmdarg_stack: %"PRIsVALUE, mesg);
17997 if (p->debug_output == rb_stdout)
17999 p->debug = TRUE;
18000}
18001
18002YYLTYPE *
18004{
18005 int sourceline = here->sourceline;
18006 int beg_pos = (int)here->offset - here->quote
18007 - (rb_strlen_lit("<<-") - !(here->func & STR_FUNC_INDENT));
18008 int end_pos = (int)here->offset + here->length + here->quote;
18009
18010 yylloc->beg_pos.lineno = sourceline;
18011 yylloc->beg_pos.column = beg_pos;
18012 yylloc->end_pos.lineno = sourceline;
18013 yylloc->end_pos.column = end_pos;
18014 return yylloc;
18015}
18016
18017YYLTYPE *
18019{
18020 yylloc->beg_pos.lineno = p->ruby_sourceline;
18021 yylloc->beg_pos.column = (int)(p->lex.ptok - p->lex.pbeg);
18022 yylloc->end_pos.lineno = p->ruby_sourceline;
18023 yylloc->end_pos.column = (int)(p->lex.ptok - p->lex.pbeg);
18024 return yylloc;
18025}
18026
18027YYLTYPE *
18029{
18030 yylloc->beg_pos.lineno = p->ruby_sourceline;
18031 yylloc->beg_pos.column = (int)(p->lex.ptok - p->lex.pbeg);
18032 yylloc->end_pos.lineno = p->ruby_sourceline;
18033 yylloc->end_pos.column = (int)(p->lex.pcur - p->lex.pbeg);
18034 return yylloc;
18035}
18036#endif /* !RIPPER */
18037
18038static int
18039assignable0(struct parser_params *p, ID id, const char **err)
18040{
18041 if (!id) return -1;
18042 switch (id) {
18043 case keyword_self:
18044 *err = "Can't change the value of self";
18045 return -1;
18046 case keyword_nil:
18047 *err = "Can't assign to nil";
18048 return -1;
18049 case keyword_true:
18050 *err = "Can't assign to true";
18051 return -1;
18052 case keyword_false:
18053 *err = "Can't assign to false";
18054 return -1;
18055 case keyword__FILE__:
18056 *err = "Can't assign to __FILE__";
18057 return -1;
18058 case keyword__LINE__:
18059 *err = "Can't assign to __LINE__";
18060 return -1;
18062 *err = "Can't assign to __ENCODING__";
18063 return -1;
18064 }
18065 switch (id_type(id)) {
18066 case ID_LOCAL:
18067 if (dyna_in_block(p)) {
18068 if (p->max_numparam > NO_PARAM && NUMPARAM_ID_P(id)) {
18069 compile_error(p, "Can't assign to numbered parameter _%d",
18070 NUMPARAM_ID_TO_IDX(id));
18071 return -1;
18072 }
18073 if (dvar_curr(p, id)) return NODE_DASGN_CURR;
18074 if (dvar_defined(p, id)) return NODE_DASGN;
18075 if (local_id(p, id)) return NODE_LASGN;
18076 dyna_var(p, id);
18077 return NODE_DASGN_CURR;
18078 }
18079 else {
18080 if (!local_id(p, id)) local_var(p, id);
18081 return NODE_LASGN;
18082 }
18083 break;
18084 case ID_GLOBAL: return NODE_GASGN;
18085 case ID_INSTANCE: return NODE_IASGN;
18086 case ID_CONST:
18087 if (!p->in_def) return NODE_CDECL;
18088 *err = "dynamic constant assignment";
18089 return -1;
18090 case ID_CLASS: return NODE_CVASGN;
18091 default:
18092 compile_error(p, "identifier %"PRIsVALUE" is not valid to set", rb_id2str(id));
18093 }
18094 return -1;
18095}
18096
18097#ifndef RIPPER
18098static NODE*
18099assignable(struct parser_params *p, ID id, NODE *val, const YYLTYPE *loc)
18100{
18101 const char *err = 0;
18102 int node_type = assignable0(p, id, &err);
18103 switch (node_type) {
18104 case NODE_DASGN_CURR: return NEW_DASGN_CURR(id, val, loc);
18105 case NODE_DASGN: return NEW_DASGN(id, val, loc);
18106 case NODE_LASGN: return NEW_LASGN(id, val, loc);
18107 case NODE_GASGN: return NEW_GASGN(id, val, loc);
18108 case NODE_IASGN: return NEW_IASGN(id, val, loc);
18109 case NODE_CDECL: return NEW_CDECL(id, val, 0, loc);
18110 case NODE_CVASGN: return NEW_CVASGN(id, val, loc);
18111 }
18112 if (err) yyerror1(loc, err);
18113 return NEW_BEGIN(0, loc);
18114}
18115#else
18116static VALUE
18117assignable(struct parser_params *p, VALUE lhs)
18118{
18119 const char *err = 0;
18120 assignable0(p, get_id(lhs), &err);
18121 if (err) lhs = assign_error(p, lhs);
18122 return lhs;
18123}
18124#endif
18125
18126static int
18127is_private_local_id(ID name)
18128{
18129 VALUE s;
18130 if (name == idUScore) return 1;
18131 if (!is_local_id(name)) return 0;
18132 s = rb_id2str(name);
18133 if (!s) return 0;
18134 return RSTRING_PTR(s)[0] == '_';
18135}
18136
18137static int
18138shadowing_lvar_0(struct parser_params *p, ID name)
18139{
18140 if (is_private_local_id(name)) return 1;
18141 if (dyna_in_block(p)) {
18142 if (dvar_curr(p, name)) {
18143 yyerror0("duplicated argument name");
18144 }
18145 else if (dvar_defined(p, name) || local_id(p, name)) {
18146 vtable_add(p->lvtbl->vars, name);
18147 if (p->lvtbl->used) {
18149 }
18150 return 0;
18151 }
18152 }
18153 else {
18154 if (local_id(p, name)) {
18155 yyerror0("duplicated argument name");
18156 }
18157 }
18158 return 1;
18159}
18160
18161static ID
18162shadowing_lvar(struct parser_params *p, ID name)
18163{
18164 shadowing_lvar_0(p, name);
18165 return name;
18166}
18167
18168static void
18169new_bv(struct parser_params *p, ID name)
18170{
18171 if (!name) return;
18172 if (!is_local_id(name)) {
18173 compile_error(p, "invalid local variable - %"PRIsVALUE,
18174 rb_id2str(name));
18175 return;
18176 }
18177 if (!shadowing_lvar_0(p, name)) return;
18178 dyna_var(p, name);
18179}
18180
18181#ifndef RIPPER
18182static NODE *
18183aryset(struct parser_params *p, NODE *recv, NODE *idx, const YYLTYPE *loc)
18184{
18185 return NEW_ATTRASGN(recv, tASET, idx, loc);
18186}
18187
18188static void
18189block_dup_check(struct parser_params *p, NODE *node1, NODE *node2)
18190{
18191 if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
18192 compile_error(p, "both block arg and actual block given");
18193 }
18194}
18195
18196static NODE *
18197attrset(struct parser_params *p, NODE *recv, ID atype, ID id, const YYLTYPE *loc)
18198{
18199 if (!CALL_Q_P(atype)) id = rb_id_attrset(id);
18200 return NEW_ATTRASGN(recv, id, 0, loc);
18201}
18202
18203static void
18204rb_backref_error(struct parser_params *p, NODE *node)
18205{
18206 switch (nd_type(node)) {
18207 case NODE_NTH_REF:
18208 compile_error(p, "Can't set variable $%ld", node->nd_nth);
18209 break;
18210 case NODE_BACK_REF:
18211 compile_error(p, "Can't set variable $%c", (int)node->nd_nth);
18212 break;
18213 }
18214}
18215
18216static NODE *
18217arg_append(struct parser_params *p, NODE *node1, NODE *node2, const YYLTYPE *loc)
18218{
18219 if (!node1) return NEW_LIST(node2, &node2->nd_loc);
18220 switch (nd_type(node1)) {
18221 case NODE_LIST:
18222 return list_append(p, node1, node2);
18223 case NODE_BLOCK_PASS:
18224 node1->nd_head = arg_append(p, node1->nd_head, node2, loc);
18225 node1->nd_loc.end_pos = node1->nd_head->nd_loc.end_pos;
18226 return node1;
18227 case NODE_ARGSPUSH:
18228 node1->nd_body = list_append(p, NEW_LIST(node1->nd_body, &node1->nd_body->nd_loc), node2);
18229 node1->nd_loc.end_pos = node1->nd_body->nd_loc.end_pos;
18230 nd_set_type(node1, NODE_ARGSCAT);
18231 return node1;
18232 case NODE_ARGSCAT:
18233 if (nd_type(node1->nd_body) != NODE_LIST) break;
18234 node1->nd_body = list_append(p, node1->nd_body, node2);
18235 node1->nd_loc.end_pos = node1->nd_body->nd_loc.end_pos;
18236 return node1;
18237 }
18238 return NEW_ARGSPUSH(node1, node2, loc);
18239}
18240
18241static NODE *
18242arg_concat(struct parser_params *p, NODE *node1, NODE *node2, const YYLTYPE *loc)
18243{
18244 if (!node2) return node1;
18245 switch (nd_type(node1)) {
18246 case NODE_BLOCK_PASS:
18247 if (node1->nd_head)
18248 node1->nd_head = arg_concat(p, node1->nd_head, node2, loc);
18249 else
18250 node1->nd_head = NEW_LIST(node2, loc);
18251 return node1;
18252 case NODE_ARGSPUSH:
18253 if (nd_type(node2) != NODE_LIST) break;
18254 node1->nd_body = list_concat(NEW_LIST(node1->nd_body, loc), node2);
18255 nd_set_type(node1, NODE_ARGSCAT);
18256 return node1;
18257 case NODE_ARGSCAT:
18258 if (nd_type(node2) != NODE_LIST ||
18259 nd_type(node1->nd_body) != NODE_LIST) break;
18260 node1->nd_body = list_concat(node1->nd_body, node2);
18261 return node1;
18262 }
18263 return NEW_ARGSCAT(node1, node2, loc);
18264}
18265
18266static NODE *
18267last_arg_append(struct parser_params *p, NODE *args, NODE *last_arg, const YYLTYPE *loc)
18268{
18269 NODE *n1;
18270 if ((n1 = splat_array(args)) != 0) {
18271 return list_append(p, n1, last_arg);
18272 }
18273 return arg_append(p, args, last_arg, loc);
18274}
18275
18276static NODE *
18277rest_arg_append(struct parser_params *p, NODE *args, NODE *rest_arg, const YYLTYPE *loc)
18278{
18279 NODE *n1;
18280 if ((nd_type(rest_arg) == NODE_LIST) && (n1 = splat_array(args)) != 0) {
18281 return list_concat(n1, rest_arg);
18282 }
18283 return arg_concat(p, args, rest_arg, loc);
18284}
18285
18286static NODE *
18287splat_array(NODE* node)
18288{
18289 if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
18290 if (nd_type(node) == NODE_LIST) return node;
18291 return 0;
18292}
18293
18294static void
18295mark_lvar_used(struct parser_params *p, NODE *rhs)
18296{
18297 ID *vidp = NULL;
18298 if (!rhs) return;
18299 switch (nd_type(rhs)) {
18300 case NODE_LASGN:
18301 if (local_id_ref(p, rhs->nd_vid, &vidp)) {
18302 if (vidp) *vidp |= LVAR_USED;
18303 }
18304 break;
18305 case NODE_DASGN:
18306 case NODE_DASGN_CURR:
18307 if (dvar_defined_ref(p, rhs->nd_vid, &vidp)) {
18308 if (vidp) *vidp |= LVAR_USED;
18309 }
18310 break;
18311#if 0
18312 case NODE_MASGN:
18313 for (rhs = rhs->nd_head; rhs; rhs = rhs->nd_next) {
18314 mark_lvar_used(p, rhs->nd_head);
18315 }
18316 break;
18317#endif
18318 }
18319}
18320
18321static NODE *
18322node_assign(struct parser_params *p, NODE *lhs, NODE *rhs, const YYLTYPE *loc)
18323{
18324 if (!lhs) return 0;
18325
18326 switch (nd_type(lhs)) {
18327 case NODE_GASGN:
18328 case NODE_IASGN:
18329 case NODE_LASGN:
18330 case NODE_DASGN:
18331 case NODE_DASGN_CURR:
18332 case NODE_MASGN:
18333 case NODE_CDECL:
18334 case NODE_CVASGN:
18335 lhs->nd_value = rhs;
18336 nd_set_loc(lhs, loc);
18337 break;
18338
18339 case NODE_ATTRASGN:
18340 lhs->nd_args = arg_append(p, lhs->nd_args, rhs, loc);
18341 nd_set_loc(lhs, loc);
18342 break;
18343
18344 default:
18345 /* should not happen */
18346 break;
18347 }
18348
18349 return lhs;
18350}
18351
18352static NODE *
18353value_expr_check(struct parser_params *p, NODE *node)
18354{
18355 NODE *void_node = 0, *vn;
18356
18357 if (!node) {
18358 rb_warning0("empty expression");
18359 }
18360 while (node) {
18361 switch (nd_type(node)) {
18362 case NODE_RETURN:
18363 case NODE_BREAK:
18364 case NODE_NEXT:
18365 case NODE_REDO:
18366 case NODE_RETRY:
18367 return void_node ? void_node : node;
18368
18369 case NODE_CASE3:
18370 if (!node->nd_body || nd_type(node->nd_body) != NODE_IN) {
18371 compile_error(p, "unexpected node");
18372 return NULL;
18373 }
18374 if (node->nd_body->nd_body) {
18375 return NULL;
18376 }
18377 /* single line pattern matching */
18378 return void_node ? void_node : node;
18379
18380 case NODE_BLOCK:
18381 while (node->nd_next) {
18382 node = node->nd_next;
18383 }
18384 node = node->nd_head;
18385 break;
18386
18387 case NODE_BEGIN:
18388 node = node->nd_body;
18389 break;
18390
18391 case NODE_IF:
18392 case NODE_UNLESS:
18393 if (!node->nd_body) {
18394 return NULL;
18395 }
18396 else if (!node->nd_else) {
18397 return NULL;
18398 }
18399 vn = value_expr_check(p, node->nd_body);
18400 if (!vn) return NULL;
18401 if (!void_node) void_node = vn;
18402 node = node->nd_else;
18403 break;
18404
18405 case NODE_AND:
18406 case NODE_OR:
18407 node = node->nd_1st;
18408 break;
18409
18410 case NODE_LASGN:
18411 case NODE_DASGN:
18412 case NODE_DASGN_CURR:
18413 case NODE_MASGN:
18414 mark_lvar_used(p, node);
18415 return NULL;
18416
18417 default:
18418 return NULL;
18419 }
18420 }
18421
18422 return NULL;
18423}
18424
18425static int
18426value_expr_gen(struct parser_params *p, NODE *node)
18427{
18428 NODE *void_node = value_expr_check(p, node);
18429 if (void_node) {
18430 yyerror1(&void_node->nd_loc, "void value expression");
18431 /* or "control never reach"? */
18432 return FALSE;
18433 }
18434 return TRUE;
18435}
18436static void
18437void_expr(struct parser_params *p, NODE *node)
18438{
18439 const char *useless = 0;
18440
18441 if (!RTEST(ruby_verbose)) return;
18442
18443 if (!node || !(node = nd_once_body(node))) return;
18444 switch (nd_type(node)) {
18445 case NODE_OPCALL:
18446 switch (node->nd_mid) {
18447 case '+':
18448 case '-':
18449 case '*':
18450 case '/':
18451 case '%':
18452 case tPOW:
18453 case tUPLUS:
18454 case tUMINUS:
18455 case '|':
18456 case '^':
18457 case '&':
18458 case tCMP:
18459 case '>':
18460 case tGEQ:
18461 case '<':
18462 case tLEQ:
18463 case tEQ:
18464 case tNEQ:
18465 useless = rb_id2name(node->nd_mid);
18466 break;
18467 }
18468 break;
18469
18470 case NODE_LVAR:
18471 case NODE_DVAR:
18472 case NODE_GVAR:
18473 case NODE_IVAR:
18474 case NODE_CVAR:
18475 case NODE_NTH_REF:
18476 case NODE_BACK_REF:
18477 useless = "a variable";
18478 break;
18479 case NODE_CONST:
18480 useless = "a constant";
18481 break;
18482 case NODE_LIT:
18483 case NODE_STR:
18484 case NODE_DSTR:
18485 case NODE_DREGX:
18486 useless = "a literal";
18487 break;
18488 case NODE_COLON2:
18489 case NODE_COLON3:
18490 useless = "::";
18491 break;
18492 case NODE_DOT2:
18493 useless = "..";
18494 break;
18495 case NODE_DOT3:
18496 useless = "...";
18497 break;
18498 case NODE_SELF:
18499 useless = "self";
18500 break;
18501 case NODE_NIL:
18502 useless = "nil";
18503 break;
18504 case NODE_TRUE:
18505 useless = "true";
18506 break;
18507 case NODE_FALSE:
18508 useless = "false";
18509 break;
18510 case NODE_DEFINED:
18511 useless = "defined?";
18512 break;
18513 }
18514
18515 if (useless) {
18516 rb_warn1L(nd_line(node), "possibly useless use of %s in void context", WARN_S(useless));
18517 }
18518}
18519
18520static NODE *
18521void_stmts(struct parser_params *p, NODE *node)
18522{
18523 NODE *const n = node;
18524 if (!RTEST(ruby_verbose)) return n;
18525 if (!node) return n;
18526 if (nd_type(node) != NODE_BLOCK) return n;
18527
18528 while (node->nd_next) {
18529 void_expr(p, node->nd_head);
18530 node = node->nd_next;
18531 }
18532 return n;
18533}
18534
18535static NODE *
18536remove_begin(NODE *node)
18537{
18538 NODE **n = &node, *n1 = node;
18539 while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
18540 *n = n1 = n1->nd_body;
18541 }
18542 return node;
18543}
18544
18545static NODE *
18546remove_begin_all(NODE *node)
18547{
18548 NODE **n = &node, *n1 = node;
18549 while (n1 && nd_type(n1) == NODE_BEGIN) {
18550 *n = n1 = n1->nd_body;
18551 }
18552 return node;
18553}
18554
18555static void
18556reduce_nodes(struct parser_params *p, NODE **body)
18557{
18558 NODE *node = *body;
18559
18560 if (!node) {
18561 *body = NEW_NIL(&NULL_LOC);
18562 return;
18563 }
18564#define subnodes(n1, n2) \
18565 ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
18566 (!node->n2) ? (body = &node->n1, 1) : \
18567 (reduce_nodes(p, &node->n1), body = &node->n2, 1))
18568
18569 while (node) {
18570 int newline = (int)(node->flags & NODE_FL_NEWLINE);
18571 switch (nd_type(node)) {
18572 end:
18573 case NODE_NIL:
18574 *body = 0;
18575 return;
18576 case NODE_RETURN:
18577 *body = node = node->nd_stts;
18578 if (newline && node) node->flags |= NODE_FL_NEWLINE;
18579 continue;
18580 case NODE_BEGIN:
18581 *body = node = node->nd_body;
18582 if (newline && node) node->flags |= NODE_FL_NEWLINE;
18583 continue;
18584 case NODE_BLOCK:
18585 body = &node->nd_end->nd_head;
18586 break;
18587 case NODE_IF:
18588 case NODE_UNLESS:
18589 if (subnodes(nd_body, nd_else)) break;
18590 return;
18591 case NODE_CASE:
18592 body = &node->nd_body;
18593 break;
18594 case NODE_WHEN:
18595 if (!subnodes(nd_body, nd_next)) goto end;
18596 break;
18597 case NODE_ENSURE:
18598 if (!subnodes(nd_head, nd_resq)) goto end;
18599 break;
18600 case NODE_RESCUE:
18601 if (node->nd_else) {
18602 body = &node->nd_resq;
18603 break;
18604 }
18605 if (!subnodes(nd_head, nd_resq)) goto end;
18606 break;
18607 default:
18608 return;
18609 }
18610 node = *body;
18611 if (newline && node) node->flags |= NODE_FL_NEWLINE;
18612 }
18613
18614#undef subnodes
18615}
18616
18617static int
18618is_static_content(NODE *node)
18619{
18620 if (!node) return 1;
18621 switch (nd_type(node)) {
18622 case NODE_HASH:
18623 if (!(node = node->nd_head)) break;
18624 case NODE_LIST:
18625 do {
18626 if (!is_static_content(node->nd_head)) return 0;
18627 } while ((node = node->nd_next) != 0);
18628 case NODE_LIT:
18629 case NODE_STR:
18630 case NODE_NIL:
18631 case NODE_TRUE:
18632 case NODE_FALSE:
18633 case NODE_ZLIST:
18634 break;
18635 default:
18636 return 0;
18637 }
18638 return 1;
18639}
18640
18641static int
18642assign_in_cond(struct parser_params *p, NODE *node)
18643{
18644 switch (nd_type(node)) {
18645 case NODE_MASGN:
18646 case NODE_LASGN:
18647 case NODE_DASGN:
18648 case NODE_DASGN_CURR:
18649 case NODE_GASGN:
18650 case NODE_IASGN:
18651 break;
18652
18653 default:
18654 return 0;
18655 }
18656
18657 if (!node->nd_value) return 1;
18658 if (is_static_content(node->nd_value)) {
18659 /* reports always */
18660 parser_warn(p, node->nd_value, "found `= literal' in conditional, should be ==");
18661 }
18662 return 1;
18663}
18664
18670
18671#define SWITCH_BY_COND_TYPE(t, w, arg) \
18672 switch (t) { \
18673 case COND_IN_OP: break; \
18674 case COND_IN_COND: rb_##w##0(arg "literal in condition"); break; \
18675 case COND_IN_FF: rb_##w##0(arg "literal in flip-flop"); break; \
18676 }
18677
18678static NODE *cond0(struct parser_params*,NODE*,enum cond_type,const YYLTYPE*);
18679
18680static NODE*
18681range_op(struct parser_params *p, NODE *node, const YYLTYPE *loc)
18682{
18683 enum node_type type;
18684
18685 if (node == 0) return 0;
18686
18687 type = nd_type(node);
18688 value_expr(node);
18689 if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
18690 if (!e_option_supplied(p)) parser_warn(p, node, "integer literal in flip-flop");
18691 return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."), loc), loc), loc);
18692 }
18693 return cond0(p, node, COND_IN_FF, loc);
18694}
18695
18696static NODE*
18697cond0(struct parser_params *p, NODE *node, enum cond_type type, const YYLTYPE *loc)
18698{
18699 if (node == 0) return 0;
18700 if (!(node = nd_once_body(node))) return 0;
18701 assign_in_cond(p, node);
18702
18703 switch (nd_type(node)) {
18704 case NODE_DSTR:
18705 case NODE_EVSTR:
18706 case NODE_STR:
18707 SWITCH_BY_COND_TYPE(type, warn, "string ")
18708 break;
18709
18710 case NODE_DREGX:
18711 if (!e_option_supplied(p)) SWITCH_BY_COND_TYPE(type, warning, "regex ")
18712
18713 return NEW_MATCH2(node, NEW_GVAR(idLASTLINE, loc), loc);
18714
18715 case NODE_AND:
18716 case NODE_OR:
18717 node->nd_1st = cond0(p, node->nd_1st, COND_IN_COND, loc);
18718 node->nd_2nd = cond0(p, node->nd_2nd, COND_IN_COND, loc);
18719 break;
18720
18721 case NODE_DOT2:
18722 case NODE_DOT3:
18723 node->nd_beg = range_op(p, node->nd_beg, loc);
18724 node->nd_end = range_op(p, node->nd_end, loc);
18725 if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
18726 else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
18727 break;
18728
18729 case NODE_DSYM:
18730 SWITCH_BY_COND_TYPE(type, warning, "string ")
18731 break;
18732
18733 case NODE_LIT:
18734 if (RB_TYPE_P(node->nd_lit, T_REGEXP)) {
18735 if (!e_option_supplied(p)) SWITCH_BY_COND_TYPE(type, warn, "regex ")
18736 nd_set_type(node, NODE_MATCH);
18737 }
18738 else if (node->nd_lit == Qtrue ||
18739 node->nd_lit == Qfalse) {
18740 /* booleans are OK, e.g., while true */
18741 }
18742 else {
18743 SWITCH_BY_COND_TYPE(type, warning, "")
18744 }
18745 default:
18746 break;
18747 }
18748 return node;
18749}
18750
18751static NODE*
18752cond(struct parser_params *p, NODE *node, const YYLTYPE *loc)
18753{
18754 if (node == 0) return 0;
18755 return cond0(p, node, COND_IN_COND, loc);
18756}
18757
18758static NODE*
18759method_cond(struct parser_params *p, NODE *node, const YYLTYPE *loc)
18760{
18761 if (node == 0) return 0;
18762 return cond0(p, node, COND_IN_OP, loc);
18763}
18764
18765static NODE*
18766new_if(struct parser_params *p, NODE *cc, NODE *left, NODE *right, const YYLTYPE *loc)
18767{
18768 if (!cc) return right;
18769 cc = cond0(p, cc, COND_IN_COND, loc);
18770 return newline_node(NEW_IF(cc, left, right, loc));
18771}
18772
18773static NODE*
18774new_unless(struct parser_params *p, NODE *cc, NODE *left, NODE *right, const YYLTYPE *loc)
18775{
18776 if (!cc) return right;
18777 cc = cond0(p, cc, COND_IN_COND, loc);
18778 return newline_node(NEW_UNLESS(cc, left, right, loc));
18779}
18780
18781static NODE*
18782logop(struct parser_params *p, ID id, NODE *left, NODE *right,
18783 const YYLTYPE *op_loc, const YYLTYPE *loc)
18784{
18785 enum node_type type = id == idAND || id == idANDOP ? NODE_AND : NODE_OR;
18786 NODE *op;
18787 value_expr(left);
18788 if (left && (enum node_type)nd_type(left) == type) {
18789 NODE *node = left, *second;
18790 while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
18791 node = second;
18792 }
18793 node->nd_2nd = NEW_NODE(type, second, right, 0, loc);
18794 nd_set_line(node->nd_2nd, op_loc->beg_pos.lineno);
18795 left->nd_loc.end_pos = loc->end_pos;
18796 return left;
18797 }
18798 op = NEW_NODE(type, left, right, 0, loc);
18799 nd_set_line(op, op_loc->beg_pos.lineno);
18800 return op;
18801}
18802
18803static void
18804no_blockarg(struct parser_params *p, NODE *node)
18805{
18806 if (node && nd_type(node) == NODE_BLOCK_PASS) {
18807 compile_error(p, "block argument should not be given");
18808 }
18809}
18810
18811static NODE *
18812ret_args(struct parser_params *p, NODE *node)
18813{
18814 if (node) {
18815 no_blockarg(p, node);
18816 if (nd_type(node) == NODE_LIST) {
18817 if (node->nd_next == 0) {
18818 node = node->nd_head;
18819 }
18820 else {
18821 nd_set_type(node, NODE_VALUES);
18822 }
18823 }
18824 }
18825 return node;
18826}
18827
18828static NODE *
18829new_yield(struct parser_params *p, NODE *node, const YYLTYPE *loc)
18830{
18831 if (node) no_blockarg(p, node);
18832
18833 return NEW_YIELD(node, loc);
18834}
18835
18836static VALUE
18837negate_lit(struct parser_params *p, VALUE lit)
18838{
18839 if (FIXNUM_P(lit)) {
18840 return LONG2FIX(-FIX2LONG(lit));
18841 }
18842 if (SPECIAL_CONST_P(lit)) {
18843#if USE_FLONUM
18844 if (FLONUM_P(lit)) {
18845 return DBL2NUM(-RFLOAT_VALUE(lit));
18846 }
18847#endif
18848 goto unknown;
18849 }
18850 switch (BUILTIN_TYPE(lit)) {
18851 case T_BIGNUM:
18852 BIGNUM_NEGATE(lit);
18853 lit = rb_big_norm(lit);
18854 break;
18855 case T_RATIONAL:
18856 RRATIONAL_SET_NUM(lit, negate_lit(p, RRATIONAL(lit)->num));
18857 break;
18858 case T_COMPLEX:
18859 RCOMPLEX_SET_REAL(lit, negate_lit(p, RCOMPLEX(lit)->real));
18860 RCOMPLEX_SET_IMAG(lit, negate_lit(p, RCOMPLEX(lit)->imag));
18861 break;
18862 case T_FLOAT:
18863 RFLOAT(lit)->float_value = -RFLOAT_VALUE(lit);
18864 break;
18865 unknown:
18866 default:
18867 rb_parser_fatal(p, "unknown literal type (%s) passed to negate_lit",
18869 break;
18870 }
18871 return lit;
18872}
18873
18874static NODE *
18875arg_blk_pass(NODE *node1, NODE *node2)
18876{
18877 if (node2) {
18878 if (!node1) return node2;
18879 node2->nd_head = node1;
18880 nd_set_first_lineno(node2, nd_first_lineno(node1));
18881 nd_set_first_column(node2, nd_first_column(node1));
18882 return node2;
18883 }
18884 return node1;
18885}
18886
18887static bool
18888args_info_empty_p(struct rb_args_info *args)
18889{
18890 if (args->pre_args_num) return false;
18891 if (args->post_args_num) return false;
18892 if (args->rest_arg) return false;
18893 if (args->opt_args) return false;
18894 if (args->block_arg) return false;
18895 if (args->kw_args) return false;
18896 if (args->kw_rest_arg) return false;
18897 return true;
18898}
18899
18900static NODE*
18901new_args(struct parser_params *p, NODE *pre_args, NODE *opt_args, ID rest_arg, NODE *post_args, NODE *tail, const YYLTYPE *loc)
18902{
18903 int saved_line = p->ruby_sourceline;
18904 struct rb_args_info *args = tail->nd_ainfo;
18905
18906 args->pre_args_num = pre_args ? rb_long2int(pre_args->nd_plen) : 0;
18907 args->pre_init = pre_args ? pre_args->nd_next : 0;
18908
18909 args->post_args_num = post_args ? rb_long2int(post_args->nd_plen) : 0;
18910 args->post_init = post_args ? post_args->nd_next : 0;
18911 args->first_post_arg = post_args ? post_args->nd_pid : 0;
18912
18913 args->rest_arg = rest_arg;
18914
18915 args->opt_args = opt_args;
18916
18918
18919 p->ruby_sourceline = saved_line;
18920 nd_set_loc(tail, loc);
18921
18922 return tail;
18923}
18924
18925static NODE*
18926new_args_tail(struct parser_params *p, NODE *kw_args, ID kw_rest_arg, ID block, const YYLTYPE *loc)
18927{
18928 int saved_line = p->ruby_sourceline;
18929 NODE *node;
18931 struct rb_args_info *args = ZALLOC(struct rb_args_info);
18932 rb_imemo_tmpbuf_set_ptr(tmpbuf, args);
18933 args->imemo = tmpbuf;
18934 node = NEW_NODE(NODE_ARGS, 0, 0, args, &NULL_LOC);
18935 RB_OBJ_WRITTEN(p->ast, Qnil, tmpbuf);
18936 if (p->error_p) return node;
18937
18938 args->block_arg = block;
18939 args->kw_args = kw_args;
18940
18941 if (kw_args) {
18942 /*
18943 * def foo(k1: 1, kr1:, k2: 2, **krest, &b)
18944 * variable order: k1, kr1, k2, &b, internal_id, krest
18945 * #=> <reorder>
18946 * variable order: kr1, k1, k2, internal_id, krest, &b
18947 */
18948 ID kw_bits = internal_id(p), *required_kw_vars, *kw_vars;
18949 struct vtable *vtargs = p->lvtbl->args;
18950 NODE *kwn = kw_args;
18951
18952 vtable_pop(vtargs, !!block + !!kw_rest_arg);
18953 required_kw_vars = kw_vars = &vtargs->tbl[vtargs->pos];
18954 while (kwn) {
18955 if (!NODE_REQUIRED_KEYWORD_P(kwn->nd_body))
18956 --kw_vars;
18957 --required_kw_vars;
18958 kwn = kwn->nd_next;
18959 }
18960
18961 for (kwn = kw_args; kwn; kwn = kwn->nd_next) {
18962 ID vid = kwn->nd_body->nd_vid;
18963 if (NODE_REQUIRED_KEYWORD_P(kwn->nd_body)) {
18964 *required_kw_vars++ = vid;
18965 }
18966 else {
18967 *kw_vars++ = vid;
18968 }
18969 }
18970
18971 arg_var(p, kw_bits);
18972 if (kw_rest_arg) arg_var(p, kw_rest_arg);
18973 if (block) arg_var(p, block);
18974
18975 args->kw_rest_arg = NEW_DVAR(kw_rest_arg, loc);
18976 args->kw_rest_arg->nd_cflag = kw_bits;
18977 }
18978 else if (kw_rest_arg == idNil) {
18979 args->no_kwarg = 1;
18980 }
18981 else if (kw_rest_arg) {
18982 args->kw_rest_arg = NEW_DVAR(kw_rest_arg, loc);
18983 }
18984
18985 p->ruby_sourceline = saved_line;
18986 return node;
18987}
18988
18989static NODE *
18990args_with_numbered(struct parser_params *p, NODE *args, int max_numparam)
18991{
18992 if (max_numparam > NO_PARAM) {
18993 if (!args) {
18994 YYLTYPE loc = RUBY_INIT_YYLLOC();
18995 args = new_args_tail(p, 0, 0, 0, 0);
18996 nd_set_loc(args, &loc);
18997 }
18998 args->nd_ainfo->pre_args_num = max_numparam;
18999 }
19000 return args;
19001}
19002
19003static NODE*
19004new_array_pattern(struct parser_params *p, NODE *constant, NODE *pre_arg, NODE *aryptn, const YYLTYPE *loc)
19005{
19006 struct rb_ary_pattern_info *apinfo = aryptn->nd_apinfo;
19007
19008 aryptn->nd_pconst = constant;
19009
19010 if (pre_arg) {
19011 NODE *pre_args = NEW_LIST(pre_arg, loc);
19012 if (apinfo->pre_args) {
19013 apinfo->pre_args = list_concat(pre_args, apinfo->pre_args);
19014 }
19015 else {
19016 apinfo->pre_args = pre_args;
19017 }
19018 }
19019 return aryptn;
19020}
19021
19022static NODE*
19023new_array_pattern_tail(struct parser_params *p, NODE *pre_args, int has_rest, ID rest_arg, NODE *post_args, const YYLTYPE *loc)
19024{
19025 int saved_line = p->ruby_sourceline;
19026 NODE *node;
19028 struct rb_ary_pattern_info *apinfo = ZALLOC(struct rb_ary_pattern_info);
19029 rb_imemo_tmpbuf_set_ptr(tmpbuf, apinfo);
19030 node = NEW_NODE(NODE_ARYPTN, 0, 0, apinfo, loc);
19031 apinfo->imemo = tmpbuf;
19032 RB_OBJ_WRITTEN(p->ast, Qnil, tmpbuf);
19033
19034 apinfo->pre_args = pre_args;
19035
19036 if (has_rest) {
19037 if (rest_arg) {
19038 apinfo->rest_arg = assignable(p, rest_arg, 0, loc);
19039 }
19040 else {
19042 }
19043 }
19044 else {
19045 apinfo->rest_arg = NULL;
19046 }
19047
19048 apinfo->post_args = post_args;
19049
19050 p->ruby_sourceline = saved_line;
19051 return node;
19052}
19053
19054static NODE*
19055new_hash_pattern(struct parser_params *p, NODE *constant, NODE *hshptn, const YYLTYPE *loc)
19056{
19057 hshptn->nd_pconst = constant;
19058 return hshptn;
19059}
19060
19061static NODE*
19062new_hash_pattern_tail(struct parser_params *p, NODE *kw_args, ID kw_rest_arg, const YYLTYPE *loc)
19063{
19064 int saved_line = p->ruby_sourceline;
19065 NODE *node, *kw_rest_arg_node;
19066
19067 if (kw_rest_arg == idNil) {
19068 kw_rest_arg_node = NODE_SPECIAL_NO_REST_KEYWORD;
19069 }
19070 else if (kw_rest_arg) {
19071 kw_rest_arg_node = assignable(p, kw_rest_arg, 0, loc);
19072 }
19073 else {
19074 kw_rest_arg_node = NULL;
19075 }
19076
19077 node = NEW_NODE(NODE_HSHPTN, 0, kw_args, kw_rest_arg_node, loc);
19078
19079 p->ruby_sourceline = saved_line;
19080 return node;
19081}
19082
19083static NODE *
19084new_case3(struct parser_params *p, NODE *val, NODE *pat, const YYLTYPE *loc)
19085{
19086 NODE *node = NEW_CASE3(val, pat, loc);
19087
19089 rb_warn0L(nd_line(node), "Pattern matching is experimental, and the behavior may change in future versions of Ruby!");
19090 return node;
19091}
19092
19093static NODE*
19094dsym_node(struct parser_params *p, NODE *node, const YYLTYPE *loc)
19095{
19096 VALUE lit;
19097
19098 if (!node) {
19099 return NEW_LIT(ID2SYM(idNULL), loc);
19100 }
19101
19102 switch (nd_type(node)) {
19103 case NODE_DSTR:
19104 nd_set_type(node, NODE_DSYM);
19105 nd_set_loc(node, loc);
19106 break;
19107 case NODE_STR:
19108 lit = node->nd_lit;
19109 RB_OBJ_WRITTEN(p->ast, Qnil, node->nd_lit = ID2SYM(rb_intern_str(lit)));
19110 nd_set_type(node, NODE_LIT);
19111 nd_set_loc(node, loc);
19112 break;
19113 default:
19114 node = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST(node, loc), loc);
19115 break;
19116 }
19117 return node;
19118}
19119
19120static int
19121append_literal_keys(st_data_t k, st_data_t v, st_data_t h)
19122{
19123 NODE *node = (NODE *)v;
19124 NODE **result = (NODE **)h;
19125 node->nd_alen = 2;
19126 node->nd_next->nd_end = node->nd_next;
19127 node->nd_next->nd_next = 0;
19128 if (*result)
19129 list_concat(*result, node);
19130 else
19131 *result = node;
19132 return ST_CONTINUE;
19133}
19134
19135static NODE *
19136remove_duplicate_keys(struct parser_params *p, NODE *hash)
19137{
19138 st_table *literal_keys = st_init_numtable_with_size(hash->nd_alen / 2);
19139 NODE *result = 0;
19140 rb_code_location_t loc = hash->nd_loc;
19141 while (hash && hash->nd_head && hash->nd_next) {
19142 NODE *head = hash->nd_head;
19143 NODE *value = hash->nd_next;
19144 NODE *next = value->nd_next;
19145 VALUE key = (VALUE)head;
19146 st_data_t data;
19147 if (nd_type(head) == NODE_LIT &&
19148 st_lookup(literal_keys, (key = head->nd_lit), &data)) {
19150 "key %+"PRIsVALUE" is duplicated and overwritten on line %d",
19151 head->nd_lit, nd_line(head));
19152 head = ((NODE *)data)->nd_next;
19153 head->nd_head = block_append(p, head->nd_head, value->nd_head);
19154 }
19155 else {
19156 st_insert(literal_keys, (st_data_t)key, (st_data_t)hash);
19157 }
19158 hash = next;
19159 }
19160 st_foreach(literal_keys, append_literal_keys, (st_data_t)&result);
19161 st_free_table(literal_keys);
19162 if (hash) {
19163 if (!result) result = hash;
19164 else list_concat(result, hash);
19165 }
19166 result->nd_loc = loc;
19167 return result;
19168}
19169
19170static NODE *
19171new_hash(struct parser_params *p, NODE *hash, const YYLTYPE *loc)
19172{
19173 if (hash) hash = remove_duplicate_keys(p, hash);
19174 return NEW_HASH(hash, loc);
19175}
19176#endif
19177
19178static void
19179error_duplicate_pattern_variable(struct parser_params *p, ID id, const YYLTYPE *loc)
19180{
19181 if (is_private_local_id(id)) {
19182 return;
19183 }
19184 if (st_is_member(p->pvtbl, id)) {
19185 yyerror1(loc, "duplicated variable name");
19186 }
19187 else {
19188 st_insert(p->pvtbl, (st_data_t)id, 0);
19189 }
19190}
19191
19192static void
19193error_duplicate_pattern_key(struct parser_params *p, VALUE key, const YYLTYPE *loc)
19194{
19195 if (!p->pktbl) {
19196 p->pktbl = st_init_numtable();
19197 }
19198 else if (st_is_member(p->pktbl, key)) {
19199 yyerror1(loc, "duplicated key name");
19200 return;
19201 }
19202 st_insert(p->pktbl, (st_data_t)key, 0);
19203}
19204
19205#ifndef RIPPER
19206static NODE *
19207new_unique_key_hash(struct parser_params *p, NODE *hash, const YYLTYPE *loc)
19208{
19209 return NEW_HASH(hash, loc);
19210}
19211#endif /* !RIPPER */
19212
19213#ifndef RIPPER
19214static NODE *
19215new_op_assign(struct parser_params *p, NODE *lhs, ID op, NODE *rhs, const YYLTYPE *loc)
19216{
19217 NODE *asgn;
19218
19219 if (lhs) {
19220 ID vid = lhs->nd_vid;
19221 YYLTYPE lhs_loc = lhs->nd_loc;
19222 if (op == tOROP) {
19223 lhs->nd_value = rhs;
19224 nd_set_loc(lhs, loc);
19225 asgn = NEW_OP_ASGN_OR(gettable(p, vid, &lhs_loc), lhs, loc);
19226 if (is_notop_id(vid)) {
19227 switch (id_type(vid)) {
19228 case ID_GLOBAL:
19229 case ID_INSTANCE:
19230 case ID_CLASS:
19231 asgn->nd_aid = vid;
19232 }
19233 }
19234 }
19235 else if (op == tANDOP) {
19236 lhs->nd_value = rhs;
19237 nd_set_loc(lhs, loc);
19238 asgn = NEW_OP_ASGN_AND(gettable(p, vid, &lhs_loc), lhs, loc);
19239 }
19240 else {
19241 asgn = lhs;
19242 asgn->nd_value = NEW_CALL(gettable(p, vid, &lhs_loc), op, NEW_LIST(rhs, &rhs->nd_loc), loc);
19243 nd_set_loc(asgn, loc);
19244 }
19245 }
19246 else {
19247 asgn = NEW_BEGIN(0, loc);
19248 }
19249 return asgn;
19250}
19251
19252static NODE *
19253new_ary_op_assign(struct parser_params *p, NODE *ary,
19254 NODE *args, ID op, NODE *rhs, const YYLTYPE *args_loc, const YYLTYPE *loc)
19255{
19256 NODE *asgn;
19257
19258 args = make_list(args, args_loc);
19259 if (nd_type(args) == NODE_BLOCK_PASS) {
19260 args = NEW_ARGSCAT(args, rhs, loc);
19261 }
19262 else {
19263 args = arg_concat(p, args, rhs, loc);
19264 }
19265 asgn = NEW_OP_ASGN1(ary, op, args, loc);
19266 fixpos(asgn, ary);
19267 return asgn;
19268}
19269
19270static NODE *
19271new_attr_op_assign(struct parser_params *p, NODE *lhs,
19272 ID atype, ID attr, ID op, NODE *rhs, const YYLTYPE *loc)
19273{
19274 NODE *asgn;
19275
19276 asgn = NEW_OP_ASGN2(lhs, CALL_Q_P(atype), attr, op, rhs, loc);
19277 fixpos(asgn, lhs);
19278 return asgn;
19279}
19280
19281static NODE *
19282new_const_op_assign(struct parser_params *p, NODE *lhs, ID op, NODE *rhs, const YYLTYPE *loc)
19283{
19284 NODE *asgn;
19285
19286 if (lhs) {
19287 asgn = NEW_OP_CDECL(lhs, op, rhs, loc);
19288 }
19289 else {
19290 asgn = NEW_BEGIN(0, loc);
19291 }
19292 fixpos(asgn, lhs);
19293 return asgn;
19294}
19295
19296static NODE *
19297const_decl(struct parser_params *p, NODE *path, const YYLTYPE *loc)
19298{
19299 if (p->in_def) {
19300 yyerror1(loc, "dynamic constant assignment");
19301 }
19302 return NEW_CDECL(0, 0, (path), loc);
19303}
19304#else
19305static VALUE
19306const_decl(struct parser_params *p, VALUE path)
19307{
19308 if (p->in_def) {
19309 path = dispatch1(assign_error, path);
19310 ripper_error(p);
19311 }
19312 return path;
19313}
19314
19315static VALUE
19316assign_error(struct parser_params *p, VALUE a)
19317{
19318 a = dispatch1(assign_error, a);
19319 ripper_error(p);
19320 return a;
19321}
19322
19323static VALUE
19324var_field(struct parser_params *p, VALUE a)
19325{
19326 return ripper_new_yylval(p, get_id(a), dispatch1(var_field, a), 0);
19327}
19328#endif
19329
19330#ifndef RIPPER
19331static NODE *
19332new_bodystmt(struct parser_params *p, NODE *head, NODE *rescue, NODE *rescue_else, NODE *ensure, const YYLTYPE *loc)
19333{
19334 NODE *result = head;
19335 if (rescue) {
19336 NODE *tmp = rescue_else ? rescue_else : rescue;
19337 YYLTYPE rescue_loc = code_loc_gen(&head->nd_loc, &tmp->nd_loc);
19338
19339 result = NEW_RESCUE(head, rescue, rescue_else, &rescue_loc);
19340 nd_set_line(result, rescue->nd_loc.beg_pos.lineno);
19341 }
19342 else if (rescue_else) {
19343 result = block_append(p, result, rescue_else);
19344 }
19345 if (ensure) {
19346 result = NEW_ENSURE(result, ensure, loc);
19347 }
19348 fixpos(result, head);
19349 return result;
19350}
19351#endif
19352
19353static void
19354warn_unused_var(struct parser_params *p, struct local_vars *local)
19355{
19356 int cnt;
19357
19358 if (!local->used) return;
19359 cnt = local->used->pos;
19360 if (cnt != local->vars->pos) {
19361 rb_parser_fatal(p, "local->used->pos != local->vars->pos");
19362 }
19363#ifndef RIPPER
19364 ID *v = local->vars->tbl;
19365 ID *u = local->used->tbl;
19366 for (int i = 0; i < cnt; ++i) {
19367 if (!v[i] || (u[i] & LVAR_USED)) continue;
19368 if (is_private_local_id(v[i])) continue;
19369 rb_warn1L((int)u[i], "assigned but unused variable - %"PRIsWARN, rb_id2str(v[i]));
19370 }
19371#endif
19372}
19373
19374static void
19375local_push(struct parser_params *p, int toplevel_scope)
19376{
19377 struct local_vars *local;
19378 int inherits_dvars = toplevel_scope && compile_for_eval;
19379 int warn_unused_vars = RTEST(ruby_verbose);
19380
19381 local = ALLOC(struct local_vars);
19382 local->prev = p->lvtbl;
19383 local->args = vtable_alloc(0);
19384 local->vars = vtable_alloc(inherits_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
19385#ifndef RIPPER
19386 if (toplevel_scope && compile_for_eval) warn_unused_vars = 0;
19387 if (toplevel_scope && e_option_supplied(p)) warn_unused_vars = 0;
19388 local->numparam.outer = 0;
19389 local->numparam.inner = 0;
19390 local->numparam.current = 0;
19391#endif
19392 local->used = warn_unused_vars ? vtable_alloc(0) : 0;
19393
19394# if WARN_PAST_SCOPE
19395 local->past = 0;
19396# endif
19397 CMDARG_PUSH(0);
19398 COND_PUSH(0);
19399 p->lvtbl = local;
19400}
19401
19402static void
19403local_pop(struct parser_params *p)
19404{
19405 struct local_vars *local = p->lvtbl->prev;
19406 if (p->lvtbl->used) {
19407 warn_unused_var(p, p->lvtbl);
19408 vtable_free(p->lvtbl->used);
19409 }
19410# if WARN_PAST_SCOPE
19411 while (p->lvtbl->past) {
19412 struct vtable *past = p->lvtbl->past;
19413 p->lvtbl->past = past->prev;
19414 vtable_free(past);
19415 }
19416# endif
19417 vtable_free(p->lvtbl->args);
19418 vtable_free(p->lvtbl->vars);
19419 CMDARG_POP();
19420 COND_POP();
19421 ruby_sized_xfree(p->lvtbl, sizeof(*p->lvtbl));
19422 p->lvtbl = local;
19423}
19424
19425#ifndef RIPPER
19426static ID*
19427local_tbl(struct parser_params *p)
19428{
19429 int cnt_args = vtable_size(p->lvtbl->args);
19430 int cnt_vars = vtable_size(p->lvtbl->vars);
19431 int cnt = cnt_args + cnt_vars;
19432 int i, j;
19433 ID *buf;
19434
19435 if (cnt <= 0) return 0;
19436 buf = ALLOC_N(ID, cnt + 2);
19437 MEMCPY(buf+1, p->lvtbl->args->tbl, ID, cnt_args);
19438 /* remove IDs duplicated to warn shadowing */
19439 for (i = 0, j = cnt_args+1; i < cnt_vars; ++i) {
19440 ID id = p->lvtbl->vars->tbl[i];
19441 if (!vtable_included(p->lvtbl->args, id)) {
19442 buf[j++] = id;
19443 }
19444 }
19445 if (--j < cnt) {
19446 REALLOC_N(buf, ID, (cnt = j) + 2);
19447 }
19448 buf[0] = cnt;
19450
19451 return buf;
19452}
19453
19454static NODE*
19455node_newnode_with_locals(struct parser_params *p, enum node_type type, VALUE a1, VALUE a2, const rb_code_location_t *loc)
19456{
19457 ID *a0;
19458 NODE *n;
19459
19460 a0 = local_tbl(p);
19461 n = NEW_NODE(type, a0, a1, a2, loc);
19462 return n;
19463}
19464
19465#endif
19466
19467static void
19468numparam_name(struct parser_params *p, ID id)
19469{
19470 if (!NUMPARAM_ID_P(id)) return;
19471 rb_warn1("`_%d' is reserved for numbered parameter; consider another name",
19473}
19474
19475static void
19476arg_var(struct parser_params *p, ID id)
19477{
19478 numparam_name(p, id);
19479 vtable_add(p->lvtbl->args, id);
19480}
19481
19482static void
19483local_var(struct parser_params *p, ID id)
19484{
19485 numparam_name(p, id);
19486 vtable_add(p->lvtbl->vars, id);
19487 if (p->lvtbl->used) {
19489 }
19490}
19491
19492static int
19493local_id_ref(struct parser_params *p, ID id, ID **vidrefp)
19494{
19495 struct vtable *vars, *args, *used;
19496
19497 vars = p->lvtbl->vars;
19498 args = p->lvtbl->args;
19499 used = p->lvtbl->used;
19500
19501 while (vars && !DVARS_TERMINAL_P(vars->prev)) {
19502 vars = vars->prev;
19503 args = args->prev;
19504 if (used) used = used->prev;
19505 }
19506
19507 if (vars && vars->prev == DVARS_INHERIT) {
19508 return rb_local_defined(id, p->parent_iseq);
19509 }
19510 else if (vtable_included(args, id)) {
19511 return 1;
19512 }
19513 else {
19514 int i = vtable_included(vars, id);
19515 if (i && used && vidrefp) *vidrefp = &used->tbl[i-1];
19516 return i != 0;
19517 }
19518}
19519
19520static int
19521local_id(struct parser_params *p, ID id)
19522{
19523 return local_id_ref(p, id, NULL);
19524}
19525
19526static NODE *
19527numparam_push(struct parser_params *p)
19528{
19529#ifndef RIPPER
19530 struct local_vars *local = p->lvtbl;
19531 NODE *inner = local->numparam.inner;
19532 if (!local->numparam.outer) {
19533 local->numparam.outer = local->numparam.current;
19534 }
19535 local->numparam.inner = 0;
19536 local->numparam.current = 0;
19537 return inner;
19538#else
19539 return 0;
19540#endif
19541}
19542
19543static void
19544numparam_pop(struct parser_params *p, NODE *prev_inner)
19545{
19546#ifndef RIPPER
19547 struct local_vars *local = p->lvtbl;
19548 if (prev_inner) {
19549 /* prefer first one */
19550 local->numparam.inner = prev_inner;
19551 }
19552 else if (local->numparam.current) {
19553 /* current and inner are exclusive */
19554 local->numparam.inner = local->numparam.current;
19555 }
19556 if (p->max_numparam > NO_PARAM) {
19557 /* current and outer are exclusive */
19558 local->numparam.current = local->numparam.outer;
19559 local->numparam.outer = 0;
19560 }
19561 else {
19562 /* no numbered parameter */
19563 local->numparam.current = 0;
19564 }
19565#endif
19566}
19567
19568static const struct vtable *
19569dyna_push(struct parser_params *p)
19570{
19571 p->lvtbl->args = vtable_alloc(p->lvtbl->args);
19572 p->lvtbl->vars = vtable_alloc(p->lvtbl->vars);
19573 if (p->lvtbl->used) {
19574 p->lvtbl->used = vtable_alloc(p->lvtbl->used);
19575 }
19576 return p->lvtbl->args;
19577}
19578
19579static void
19580dyna_pop_vtable(struct parser_params *p, struct vtable **vtblp)
19581{
19582 struct vtable *tmp = *vtblp;
19583 *vtblp = tmp->prev;
19584# if WARN_PAST_SCOPE
19585 if (p->past_scope_enabled) {
19586 tmp->prev = p->lvtbl->past;
19587 p->lvtbl->past = tmp;
19588 return;
19589 }
19590# endif
19591 vtable_free(tmp);
19592}
19593
19594static void
19595dyna_pop_1(struct parser_params *p)
19596{
19597 struct vtable *tmp;
19598
19599 if ((tmp = p->lvtbl->used) != 0) {
19600 warn_unused_var(p, p->lvtbl);
19601 p->lvtbl->used = p->lvtbl->used->prev;
19602 vtable_free(tmp);
19603 }
19604 dyna_pop_vtable(p, &p->lvtbl->args);
19605 dyna_pop_vtable(p, &p->lvtbl->vars);
19606}
19607
19608static void
19609dyna_pop(struct parser_params *p, const struct vtable *lvargs)
19610{
19611 while (p->lvtbl->args != lvargs) {
19612 dyna_pop_1(p);
19613 if (!p->lvtbl->args) {
19614 struct local_vars *local = p->lvtbl->prev;
19615 ruby_sized_xfree(p->lvtbl, sizeof(*p->lvtbl));
19616 p->lvtbl = local;
19617 }
19618 }
19619 dyna_pop_1(p);
19620}
19621
19622static int
19623dyna_in_block(struct parser_params *p)
19624{
19625 return !DVARS_TERMINAL_P(p->lvtbl->vars) && p->lvtbl->vars->prev != DVARS_TOPSCOPE;
19626}
19627
19628static int
19629dvar_defined_ref(struct parser_params *p, ID id, ID **vidrefp)
19630{
19631 struct vtable *vars, *args, *used;
19632 int i;
19633
19634 args = p->lvtbl->args;
19635 vars = p->lvtbl->vars;
19636 used = p->lvtbl->used;
19637
19638 while (!DVARS_TERMINAL_P(vars)) {
19639 if (vtable_included(args, id)) {
19640 return 1;
19641 }
19642 if ((i = vtable_included(vars, id)) != 0) {
19643 if (used && vidrefp) *vidrefp = &used->tbl[i-1];
19644 return 1;
19645 }
19646 args = args->prev;
19647 vars = vars->prev;
19648 if (!vidrefp) used = 0;
19649 if (used) used = used->prev;
19650 }
19651
19652 if (vars == DVARS_INHERIT) {
19653 return rb_dvar_defined(id, p->parent_iseq);
19654 }
19655
19656 return 0;
19657}
19658
19659static int
19660dvar_defined(struct parser_params *p, ID id)
19661{
19662 return dvar_defined_ref(p, id, NULL);
19663}
19664
19665static int
19666dvar_curr(struct parser_params *p, ID id)
19667{
19668 return (vtable_included(p->lvtbl->args, id) ||
19669 vtable_included(p->lvtbl->vars, id));
19670}
19671
19672static void
19673reg_fragment_enc_error(struct parser_params* p, VALUE str, int c)
19674{
19675 compile_error(p,
19676 "regexp encoding option '%c' differs from source encoding '%s'",
19678}
19679
19680#ifndef RIPPER
19681int
19683{
19684 int c = RE_OPTION_ENCODING_IDX(options);
19685
19686 if (c) {
19687 int opt, idx;
19688 rb_char_to_option_kcode(c, &opt, &idx);
19689 if (idx != ENCODING_GET(str) &&
19691 goto error;
19692 }
19693 ENCODING_SET(str, idx);
19694 }
19695 else if (RE_OPTION_ENCODING_NONE(options)) {
19696 if (!ENCODING_IS_ASCII8BIT(str) &&
19698 c = 'n';
19699 goto error;
19700 }
19702 }
19703 else if (p->enc == rb_usascii_encoding()) {
19705 /* raise in re.c */
19707 }
19708 else {
19710 }
19711 }
19712 return 0;
19713
19714 error:
19715 return c;
19716}
19717
19718static void
19719reg_fragment_setenc(struct parser_params* p, VALUE str, int options)
19720{
19721 int c = rb_reg_fragment_setenc(p, str, options);
19722 if (c) reg_fragment_enc_error(p, str, c);
19723}
19724
19725static int
19726reg_fragment_check(struct parser_params* p, VALUE str, int options)
19727{
19728 VALUE err;
19729 reg_fragment_setenc(p, str, options);
19731 if (err != Qnil) {
19733 compile_error(p, "%"PRIsVALUE, err);
19734 return 0;
19735 }
19736 return 1;
19737}
19738
19739typedef struct {
19743 const YYLTYPE *loc;
19745
19746static int
19747reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
19748 int back_num, int *back_refs, OnigRegex regex, void *arg0)
19749{
19751 struct parser_params* p = arg->parser;
19752 rb_encoding *enc = arg->enc;
19753 long len = name_end - name;
19754 const char *s = (const char *)name;
19755 ID var;
19756 NODE *node, *succ;
19757
19758 if (!len) return ST_CONTINUE;
19759 if (rb_enc_symname_type(s, len, enc, (1U<<ID_LOCAL)) != ID_LOCAL)
19760 return ST_CONTINUE;
19761
19762 var = intern_cstr(s, len, enc);
19763 if (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) {
19764 if (!lvar_defined(p, var)) return ST_CONTINUE;
19765 }
19766 node = node_assign(p, assignable(p, var, 0, arg->loc), NEW_LIT(ID2SYM(var), arg->loc), arg->loc);
19767 succ = arg->succ_block;
19768 if (!succ) succ = NEW_BEGIN(0, arg->loc);
19769 succ = block_append(p, succ, node);
19770 arg->succ_block = succ;
19771 return ST_CONTINUE;
19772}
19773
19774static NODE *
19775reg_named_capture_assign(struct parser_params* p, VALUE regexp, const YYLTYPE *loc)
19776{
19778
19779 arg.parser = p;
19780 arg.enc = rb_enc_get(regexp);
19781 arg.succ_block = 0;
19782 arg.loc = loc;
19783 onig_foreach_name(RREGEXP_PTR(regexp), reg_named_capture_assign_iter, &arg);
19784
19785 if (!arg.succ_block) return 0;
19786 return arg.succ_block->nd_next;
19787}
19788
19789static VALUE
19790parser_reg_compile(struct parser_params* p, VALUE str, int options)
19791{
19792 reg_fragment_setenc(p, str, options);
19793 return rb_parser_reg_compile(p, str, options);
19794}
19795
19796VALUE
19798{
19800}
19801
19802static VALUE
19803reg_compile(struct parser_params* p, VALUE str, int options)
19804{
19805 VALUE re;
19806 VALUE err;
19807
19808 err = rb_errinfo();
19809 re = parser_reg_compile(p, str, options);
19810 if (NIL_P(re)) {
19813 compile_error(p, "%"PRIsVALUE, m);
19814 return Qnil;
19815 }
19816 return re;
19817}
19818#else
19819static VALUE
19820parser_reg_compile(struct parser_params* p, VALUE str, int options, VALUE *errmsg)
19821{
19822 VALUE err = rb_errinfo();
19823 VALUE re;
19824 str = ripper_is_node_yylval(str) ? RNODE(str)->nd_cval : str;
19825 int c = rb_reg_fragment_setenc(p, str, options);
19826 if (c) reg_fragment_enc_error(p, str, c);
19827 re = rb_parser_reg_compile(p, str, options);
19828 if (NIL_P(re)) {
19829 *errmsg = rb_attr_get(rb_errinfo(), idMesg);
19831 }
19832 return re;
19833}
19834#endif
19835
19836#ifndef RIPPER
19837void
19838rb_parser_set_options(VALUE vparser, int print, int loop, int chomp, int split)
19839{
19840 struct parser_params *p;
19841 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, p);
19842 p->do_print = print;
19843 p->do_loop = loop;
19844 p->do_chomp = chomp;
19845 p->do_split = split;
19846}
19847
19848void
19850{
19851 struct parser_params *p;
19852 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, p);
19853 p->warn_location = warn;
19854}
19855
19856static NODE *
19857parser_append_options(struct parser_params *p, NODE *node)
19858{
19859 static const YYLTYPE default_location = {{1, 0}, {1, 0}};
19860 const YYLTYPE *const LOC = &default_location;
19861
19862 if (p->do_print) {
19863 NODE *print = NEW_FCALL(rb_intern("print"),
19864 NEW_LIST(NEW_GVAR(idLASTLINE, LOC), LOC),
19865 LOC);
19866 node = block_append(p, node, print);
19867 }
19868
19869 if (p->do_loop) {
19870 if (p->do_split) {
19871 NODE *args = NEW_LIST(NEW_GVAR(rb_intern("$;"), LOC), LOC);
19872 NODE *split = NEW_GASGN(rb_intern("$F"),
19874 rb_intern("split"), args, LOC),
19875 LOC);
19876 node = block_append(p, split, node);
19877 }
19878 if (p->do_chomp) {
19879 NODE *chomp = NEW_CALL(NEW_GVAR(idLASTLINE, LOC),
19880 rb_intern("chomp!"), 0, LOC);
19881 node = block_append(p, chomp, node);
19882 }
19883
19884 node = NEW_WHILE(NEW_VCALL(idGets, LOC), node, 1, LOC);
19885 }
19886
19887 return node;
19888}
19889
19890void
19892{
19893 /* just to suppress unused-function warnings */
19894 (void)nodetype;
19895 (void)nodeline;
19896}
19897
19898static ID
19899internal_id(struct parser_params *p)
19900{
19901 const ID max_id = RB_ID_SERIAL_MAX & ~0xffff;
19902 ID id = (ID)vtable_size(p->lvtbl->args) + (ID)vtable_size(p->lvtbl->vars);
19903 id = max_id - id;
19904 return ID_STATIC_SYM | ID_INTERNAL | (id << ID_SCOPE_SHIFT);
19905}
19906#endif /* !RIPPER */
19907
19908static void
19909parser_initialize(struct parser_params *p)
19910{
19911 /* note: we rely on TypedData_Make_Struct to set most fields to 0 */
19912 p->command_start = TRUE;
19914 p->lex.lpar_beg = -1; /* make lambda_beginning_p() == FALSE at first */
19915 p->node_id = 0;
19916#ifdef RIPPER
19917 p->delayed.token = Qnil;
19918 p->result = Qnil;
19919 p->parsing_thread = Qnil;
19920#else
19921 p->error_buffer = Qfalse;
19922#endif
19923 p->debug_buffer = Qnil;
19925 p->enc = rb_utf8_encoding();
19926}
19927
19928#ifdef RIPPER
19929#define parser_mark ripper_parser_mark
19930#define parser_free ripper_parser_free
19931#endif
19932
19933static void
19934parser_mark(void *ptr)
19935{
19936 struct parser_params *p = (struct parser_params*)ptr;
19937
19938 rb_gc_mark(p->lex.input);
19944 rb_gc_mark((VALUE)p->ast);
19946#ifndef RIPPER
19950#else
19951 rb_gc_mark(p->delayed.token);
19952 rb_gc_mark(p->value);
19953 rb_gc_mark(p->result);
19954 rb_gc_mark(p->parsing_thread);
19955#endif
19958#ifdef YYMALLOC
19959 rb_gc_mark((VALUE)p->heap);
19960#endif
19961}
19962
19963static void
19964parser_free(void *ptr)
19965{
19966 struct parser_params *p = (struct parser_params*)ptr;
19967 struct local_vars *local, *prev;
19968
19969 if (p->tokenbuf) {
19971 }
19972 for (local = p->lvtbl; local; local = prev) {
19973 if (local->vars) xfree(local->vars);
19974 prev = local->prev;
19975 xfree(local);
19976 }
19977 {
19978 token_info *ptinfo;
19979 while ((ptinfo = p->token_info) != 0) {
19980 p->token_info = ptinfo->next;
19981 xfree(ptinfo);
19982 }
19983 }
19984 xfree(ptr);
19985}
19986
19987static size_t
19988parser_memsize(const void *ptr)
19989{
19990 struct parser_params *p = (struct parser_params*)ptr;
19991 struct local_vars *local;
19992 size_t size = sizeof(*p);
19993
19994 size += p->toksiz;
19995 for (local = p->lvtbl; local; local = local->prev) {
19996 size += sizeof(*local);
19997 if (local->vars) size += local->vars->capa * sizeof(ID);
19998 }
19999 return size;
20000}
20001
20002static const rb_data_type_t parser_data_type = {
20003#ifndef RIPPER
20004 "parser",
20005#else
20006 "ripper",
20007#endif
20008 {
20009 parser_mark,
20010 parser_free,
20011 parser_memsize,
20012 },
20014};
20015
20016#ifndef RIPPER
20017#undef rb_reserved_word
20018
20019const struct kwtable *
20020rb_reserved_word(const char *str, unsigned int len)
20021{
20022 return reserved_word(str, len);
20023}
20024
20025VALUE
20027{
20028 struct parser_params *p;
20029 VALUE parser = TypedData_Make_Struct(0, struct parser_params,
20030 &parser_data_type, p);
20031 parser_initialize(p);
20032 return parser;
20033}
20034
20035VALUE
20036rb_parser_set_context(VALUE vparser, const struct rb_iseq_struct *base, int main)
20037{
20038 struct parser_params *p;
20039
20040 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, p);
20041 p->error_buffer = main ? Qfalse : Qnil;
20042 p->parent_iseq = base;
20043 return vparser;
20044}
20045#endif
20046
20047#ifdef RIPPER
20048#define rb_parser_end_seen_p ripper_parser_end_seen_p
20049#define rb_parser_encoding ripper_parser_encoding
20050#define rb_parser_get_yydebug ripper_parser_get_yydebug
20051#define rb_parser_set_yydebug ripper_parser_set_yydebug
20052#define rb_parser_get_debug_output ripper_parser_get_debug_output
20053#define rb_parser_set_debug_output ripper_parser_set_debug_output
20054static VALUE ripper_parser_end_seen_p(VALUE vparser);
20055static VALUE ripper_parser_encoding(VALUE vparser);
20056static VALUE ripper_parser_get_yydebug(VALUE self);
20057static VALUE ripper_parser_set_yydebug(VALUE self, VALUE flag);
20058static VALUE ripper_parser_get_debug_output(VALUE self);
20059static VALUE ripper_parser_set_debug_output(VALUE self, VALUE output);
20060
20061/*
20062 * call-seq:
20063 * ripper.error? -> Boolean
20064 *
20065 * Return true if parsed source has errors.
20066 */
20067static VALUE
20068ripper_error_p(VALUE vparser)
20069{
20070 struct parser_params *p;
20071
20072 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, p);
20073 return p->error_p ? Qtrue : Qfalse;
20074}
20075#endif
20076
20077/*
20078 * call-seq:
20079 * ripper.end_seen? -> Boolean
20080 *
20081 * Return true if parsed source ended by +\_\_END\_\_+.
20082 */
20083VALUE
20085{
20086 struct parser_params *p;
20087
20088 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, p);
20089 return p->ruby__end__seen ? Qtrue : Qfalse;
20090}
20091
20092/*
20093 * call-seq:
20094 * ripper.encoding -> encoding
20095 *
20096 * Return encoding of the source.
20097 */
20098VALUE
20100{
20101 struct parser_params *p;
20102
20103 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, p);
20104 return rb_enc_from_encoding(p->enc);
20105}
20106
20107#ifdef RIPPER
20108/*
20109 * call-seq:
20110 * ripper.yydebug -> true or false
20111 *
20112 * Get yydebug.
20113 */
20114VALUE
20115rb_parser_get_yydebug(VALUE self)
20116{
20117 struct parser_params *p;
20118
20119 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, p);
20120 return p->debug ? Qtrue : Qfalse;
20121}
20122#endif
20123
20124/*
20125 * call-seq:
20126 * ripper.yydebug = flag
20127 *
20128 * Set yydebug.
20129 */
20130VALUE
20132{
20133 struct parser_params *p;
20134
20135 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, p);
20136 p->debug = RTEST(flag);
20137 return flag;
20138}
20139
20140/*
20141 * call-seq:
20142 * ripper.debug_output -> obj
20143 *
20144 * Get debug output.
20145 */
20146VALUE
20148{
20149 struct parser_params *p;
20150
20151 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, p);
20152 return p->debug_output;
20153}
20154
20155/*
20156 * call-seq:
20157 * ripper.debug_output = obj
20158 *
20159 * Set debug output.
20160 */
20161VALUE
20163{
20164 struct parser_params *p;
20165
20166 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, p);
20167 return p->debug_output = output;
20168}
20169
20170#ifndef RIPPER
20171#ifdef YYMALLOC
20172#define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
20173/* Keep the order; NEWHEAP then xmalloc and ADD2HEAP to get rid of
20174 * potential memory leak */
20175#define NEWHEAP() rb_imemo_tmpbuf_parser_heap(0, p->heap, 0)
20176#define ADD2HEAP(new, cnt, ptr) ((p->heap = (new))->ptr = (ptr), \
20177 (new)->cnt = (cnt), (ptr))
20178
20179void *
20181{
20182 size_t cnt = HEAPCNT(1, size);
20184 void *ptr = xmalloc(size);
20185
20186 return ADD2HEAP(n, cnt, ptr);
20187}
20188
20189void *
20190rb_parser_calloc(struct parser_params *p, size_t nelem, size_t size)
20191{
20192 size_t cnt = HEAPCNT(nelem, size);
20194 void *ptr = xcalloc(nelem, size);
20195
20196 return ADD2HEAP(n, cnt, ptr);
20197}
20198
20199void *
20200rb_parser_realloc(struct parser_params *p, void *ptr, size_t size)
20201{
20203 size_t cnt = HEAPCNT(1, size);
20204
20205 if (ptr && (n = p->heap) != NULL) {
20206 do {
20207 if (n->ptr == ptr) {
20208 n->ptr = ptr = xrealloc(ptr, size);
20209 if (n->cnt) n->cnt = cnt;
20210 return ptr;
20211 }
20212 } while ((n = n->next) != NULL);
20213 }
20214 n = NEWHEAP();
20215 ptr = xrealloc(ptr, size);
20216 return ADD2HEAP(n, cnt, ptr);
20217}
20218
20219void
20221{
20222 rb_imemo_tmpbuf_t **prev = &p->heap, *n;
20223
20224 while ((n = *prev) != NULL) {
20225 if (n->ptr == ptr) {
20226 *prev = n->next;
20228 break;
20229 }
20230 prev = &n->next;
20231 }
20232 xfree(ptr);
20233}
20234#endif
20235
20236void
20237rb_parser_printf(struct parser_params *p, const char *fmt, ...)
20238{
20239 va_list ap;
20240 VALUE mesg = p->debug_buffer;
20241
20242 if (NIL_P(mesg)) p->debug_buffer = mesg = rb_str_new(0, 0);
20243 va_start(ap, fmt);
20244 rb_str_vcatf(mesg, fmt, ap);
20245 va_end(ap);
20246 if (RSTRING_END(mesg)[-1] == '\n') {
20247 rb_io_write(p->debug_output, mesg);
20248 p->debug_buffer = Qnil;
20249 }
20250}
20251
20252static void
20253parser_compile_error(struct parser_params *p, const char *fmt, ...)
20254{
20255 va_list ap;
20256
20258 p->error_p = 1;
20259 va_start(ap, fmt);
20260 p->error_buffer =
20263 p->ruby_sourceline,
20264 rb_long2int(p->lex.pcur - p->lex.pbeg),
20265 p->enc, fmt, ap);
20266 va_end(ap);
20267}
20268
20269static size_t
20270count_char(const char *str, int c)
20271{
20272 int n = 0;
20273 while (str[n] == c) ++n;
20274 return n;
20275}
20276
20277/*
20278 * strip enclosing double-quotes, same as the default yytnamerr except
20279 * for that single-quotes matching back-quotes do not stop stripping.
20280 *
20281 * "\"`class' keyword\"" => "`class' keyword"
20282 */
20283RUBY_FUNC_EXPORTED size_t
20284rb_yytnamerr(struct parser_params *p, char *yyres, const char *yystr)
20285{
20286 if (*yystr == '"') {
20287 size_t yyn = 0, bquote = 0;
20288 const char *yyp = yystr;
20289
20290 while (*++yyp) {
20291 switch (*yyp) {
20292 case '`':
20293 if (!bquote) {
20294 bquote = count_char(yyp+1, '`') + 1;
20295 if (yyres) memcpy(&yyres[yyn], yyp, bquote);
20296 yyn += bquote;
20297 yyp += bquote - 1;
20298 break;
20299 }
20300 goto default_char;
20301
20302 case '\'':
20303 if (bquote && count_char(yyp+1, '\'') + 1 == bquote) {
20304 if (yyres) memcpy(yyres + yyn, yyp, bquote);
20305 yyn += bquote;
20306 yyp += bquote - 1;
20307 bquote = 0;
20308 break;
20309 }
20310 if (yyp[1] && yyp[1] != '\'' && yyp[2] == '\'') {
20311 if (yyres) memcpy(yyres + yyn, yyp, 3);
20312 yyn += 3;
20313 yyp += 2;
20314 break;
20315 }
20316 goto do_not_strip_quotes;
20317
20318 case ',':
20319 goto do_not_strip_quotes;
20320
20321 case '\\':
20322 if (*++yyp != '\\')
20323 goto do_not_strip_quotes;
20324 /* Fall through. */
20325 default_char:
20326 default:
20327 if (yyres)
20328 yyres[yyn] = *yyp;
20329 yyn++;
20330 break;
20331
20332 case '"':
20333 case '\0':
20334 if (yyres)
20335 yyres[yyn] = '\0';
20336 return yyn;
20337 }
20338 }
20339 do_not_strip_quotes: ;
20340 }
20341
20342 if (!yyres) return strlen(yystr);
20343
20344 return (YYSIZE_T)(yystpcpy(yyres, yystr) - yyres);
20345}
20346#endif
20347
20348#ifdef RIPPER
20349#ifdef RIPPER_DEBUG
20350/* :nodoc: */
20351static VALUE
20352ripper_validate_object(VALUE self, VALUE x)
20353{
20354 if (x == Qfalse) return x;
20355 if (x == Qtrue) return x;
20356 if (x == Qnil) return x;
20357 if (x == Qundef)
20358 rb_raise(rb_eArgError, "Qundef given");
20359 if (FIXNUM_P(x)) return x;
20360 if (SYMBOL_P(x)) return x;
20361 switch (BUILTIN_TYPE(x)) {
20362 case T_STRING:
20363 case T_OBJECT:
20364 case T_ARRAY:
20365 case T_BIGNUM:
20366 case T_FLOAT:
20367 case T_COMPLEX:
20368 case T_RATIONAL:
20369 break;
20370 case T_NODE:
20371 if (nd_type((NODE *)x) != NODE_RIPPER) {
20372 rb_raise(rb_eArgError, "NODE given: %p", (void *)x);
20373 }
20374 x = ((NODE *)x)->nd_rval;
20375 break;
20376 default:
20377 rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
20378 (void *)x, rb_obj_classname(x));
20379 }
20380 if (!RBASIC_CLASS(x)) {
20381 rb_raise(rb_eArgError, "hidden ruby object: %p (%s)",
20382 (void *)x, rb_builtin_type_name(TYPE(x)));
20383 }
20384 return x;
20385}
20386#endif
20387
20388#define validate(x) ((x) = get_value(x))
20389
20390static VALUE
20391ripper_dispatch0(struct parser_params *p, ID mid)
20392{
20393 return rb_funcall(p->value, mid, 0);
20394}
20395
20396static VALUE
20397ripper_dispatch1(struct parser_params *p, ID mid, VALUE a)
20398{
20399 validate(a);
20400 return rb_funcall(p->value, mid, 1, a);
20401}
20402
20403static VALUE
20404ripper_dispatch2(struct parser_params *p, ID mid, VALUE a, VALUE b)
20405{
20406 validate(a);
20407 validate(b);
20408 return rb_funcall(p->value, mid, 2, a, b);
20409}
20410
20411static VALUE
20412ripper_dispatch3(struct parser_params *p, ID mid, VALUE a, VALUE b, VALUE c)
20413{
20414 validate(a);
20415 validate(b);
20416 validate(c);
20417 return rb_funcall(p->value, mid, 3, a, b, c);
20418}
20419
20420static VALUE
20421ripper_dispatch4(struct parser_params *p, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
20422{
20423 validate(a);
20424 validate(b);
20425 validate(c);
20426 validate(d);
20427 return rb_funcall(p->value, mid, 4, a, b, c, d);
20428}
20429
20430static VALUE
20431ripper_dispatch5(struct parser_params *p, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
20432{
20433 validate(a);
20434 validate(b);
20435 validate(c);
20436 validate(d);
20437 validate(e);
20438 return rb_funcall(p->value, mid, 5, a, b, c, d, e);
20439}
20440
20441static VALUE
20442ripper_dispatch7(struct parser_params *p, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e, VALUE f, VALUE g)
20443{
20444 validate(a);
20445 validate(b);
20446 validate(c);
20447 validate(d);
20448 validate(e);
20449 validate(f);
20450 validate(g);
20451 return rb_funcall(p->value, mid, 7, a, b, c, d, e, f, g);
20452}
20453
20454static ID
20455ripper_get_id(VALUE v)
20456{
20457 NODE *nd;
20458 if (!RB_TYPE_P(v, T_NODE)) return 0;
20459 nd = (NODE *)v;
20460 if (nd_type(nd) != NODE_RIPPER) return 0;
20461 return nd->nd_vid;
20462}
20463
20464static VALUE
20465ripper_get_value(VALUE v)
20466{
20467 NODE *nd;
20468 if (v == Qundef) return Qnil;
20469 if (!RB_TYPE_P(v, T_NODE)) return v;
20470 nd = (NODE *)v;
20471 if (nd_type(nd) != NODE_RIPPER) return Qnil;
20472 return nd->nd_rval;
20473}
20474
20475static void
20476ripper_error(struct parser_params *p)
20477{
20478 p->error_p = TRUE;
20479}
20480
20481static void
20482ripper_compile_error(struct parser_params *p, const char *fmt, ...)
20483{
20484 VALUE str;
20485 va_list args;
20486
20487 va_start(args, fmt);
20488 str = rb_vsprintf(fmt, args);
20489 va_end(args);
20490 rb_funcall(p->value, rb_intern("compile_error"), 1, str);
20491 ripper_error(p);
20492}
20493
20494static VALUE
20495ripper_lex_get_generic(struct parser_params *p, VALUE src)
20496{
20497 VALUE line = rb_funcallv_public(src, id_gets, 0, 0);
20498 if (!NIL_P(line) && !RB_TYPE_P(line, T_STRING)) {
20500 "gets returned %"PRIsVALUE" (expected String or nil)",
20501 rb_obj_class(line));
20502 }
20503 return line;
20504}
20505
20506static VALUE
20507ripper_lex_io_get(struct parser_params *p, VALUE src)
20508{
20509 return rb_io_gets(src);
20510}
20511
20512static VALUE
20513ripper_s_allocate(VALUE klass)
20514{
20515 struct parser_params *p;
20517 &parser_data_type, p);
20518 p->value = self;
20519 return self;
20520}
20521
20522#define ripper_initialized_p(r) ((r)->lex.input != 0)
20523
20524/*
20525 * call-seq:
20526 * Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
20527 *
20528 * Create a new Ripper object.
20529 * _src_ must be a String, an IO, or an Object which has #gets method.
20530 *
20531 * This method does not starts parsing.
20532 * See also Ripper#parse and Ripper.parse.
20533 */
20534static VALUE
20535ripper_initialize(int argc, VALUE *argv, VALUE self)
20536{
20537 struct parser_params *p;
20538 VALUE src, fname, lineno;
20539
20540 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, p);
20541 rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
20542 if (RB_TYPE_P(src, T_FILE)) {
20543 p->lex.gets = ripper_lex_io_get;
20544 }
20545 else if (rb_respond_to(src, id_gets)) {
20546 p->lex.gets = ripper_lex_get_generic;
20547 }
20548 else {
20550 p->lex.gets = lex_get_str;
20551 }
20552 p->lex.input = src;
20553 p->eofp = 0;
20554 if (NIL_P(fname)) {
20555 fname = STR_NEW2("(ripper)");
20556 OBJ_FREEZE(fname);
20557 }
20558 else {
20559 StringValueCStr(fname);
20560 fname = rb_str_new_frozen(fname);
20561 }
20562 parser_initialize(p);
20563
20564 p->ruby_sourcefile_string = fname;
20565 p->ruby_sourcefile = RSTRING_PTR(fname);
20566 p->ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
20567
20568 return Qnil;
20569}
20570
20571static VALUE
20572ripper_parse0(VALUE parser_v)
20573{
20574 struct parser_params *p;
20575
20576 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, p);
20577 parser_prepare(p);
20578 p->ast = rb_ast_new();
20579 ripper_yyparse((void*)p);
20580 rb_ast_dispose(p->ast);
20581 p->ast = 0;
20582 return p->result;
20583}
20584
20585static VALUE
20586ripper_ensure(VALUE parser_v)
20587{
20588 struct parser_params *p;
20589
20590 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, p);
20591 p->parsing_thread = Qnil;
20592 return Qnil;
20593}
20594
20595/*
20596 * call-seq:
20597 * ripper.parse
20598 *
20599 * Start parsing and returns the value of the root action.
20600 */
20601static VALUE
20602ripper_parse(VALUE self)
20603{
20604 struct parser_params *p;
20605
20606 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, p);
20607 if (!ripper_initialized_p(p)) {
20608 rb_raise(rb_eArgError, "method called for uninitialized object");
20609 }
20610 if (!NIL_P(p->parsing_thread)) {
20611 if (p->parsing_thread == rb_thread_current())
20612 rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
20613 else
20614 rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
20615 }
20616 p->parsing_thread = rb_thread_current();
20617 rb_ensure(ripper_parse0, self, ripper_ensure, self);
20618
20619 return p->result;
20620}
20621
20622/*
20623 * call-seq:
20624 * ripper.column -> Integer
20625 *
20626 * Return column number of current parsing line.
20627 * This number starts from 0.
20628 */
20629static VALUE
20630ripper_column(VALUE self)
20631{
20632 struct parser_params *p;
20633 long col;
20634
20635 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, p);
20636 if (!ripper_initialized_p(p)) {
20637 rb_raise(rb_eArgError, "method called for uninitialized object");
20638 }
20639 if (NIL_P(p->parsing_thread)) return Qnil;
20640 col = p->lex.ptok - p->lex.pbeg;
20641 return LONG2NUM(col);
20642}
20643
20644/*
20645 * call-seq:
20646 * ripper.filename -> String
20647 *
20648 * Return current parsing filename.
20649 */
20650static VALUE
20651ripper_filename(VALUE self)
20652{
20653 struct parser_params *p;
20654
20655 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, p);
20656 if (!ripper_initialized_p(p)) {
20657 rb_raise(rb_eArgError, "method called for uninitialized object");
20658 }
20659 return p->ruby_sourcefile_string;
20660}
20661
20662/*
20663 * call-seq:
20664 * ripper.lineno -> Integer
20665 *
20666 * Return line number of current parsing line.
20667 * This number starts from 1.
20668 */
20669static VALUE
20670ripper_lineno(VALUE self)
20671{
20672 struct parser_params *p;
20673
20674 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, p);
20675 if (!ripper_initialized_p(p)) {
20676 rb_raise(rb_eArgError, "method called for uninitialized object");
20677 }
20678 if (NIL_P(p->parsing_thread)) return Qnil;
20679 return INT2NUM(p->ruby_sourceline);
20680}
20681
20682/*
20683 * call-seq:
20684 * ripper.state -> Integer
20685 *
20686 * Return scanner state of current token.
20687 */
20688static VALUE
20689ripper_state(VALUE self)
20690{
20691 struct parser_params *p;
20692
20693 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, p);
20694 if (!ripper_initialized_p(p)) {
20695 rb_raise(rb_eArgError, "method called for uninitialized object");
20696 }
20697 if (NIL_P(p->parsing_thread)) return Qnil;
20698 return INT2NUM(p->lex.state);
20699}
20700
20701/*
20702 * call-seq:
20703 * ripper.token -> String
20704 *
20705 * Return the current token string.
20706 */
20707static VALUE
20708ripper_token(VALUE self)
20709{
20710 struct parser_params *p;
20711 long pos, len;
20712
20713 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, p);
20714 if (!ripper_initialized_p(p)) {
20715 rb_raise(rb_eArgError, "method called for uninitialized object");
20716 }
20717 if (NIL_P(p->parsing_thread)) return Qnil;
20718 pos = p->lex.ptok - p->lex.pbeg;
20719 len = p->lex.pcur - p->lex.ptok;
20720 return rb_str_subseq(p->lex.lastline, pos, len);
20721}
20722
20723#ifdef RIPPER_DEBUG
20724/* :nodoc: */
20725static VALUE
20726ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
20727{
20728 StringValue(msg);
20729 if (obj == Qundef) {
20731 }
20732 return Qnil;
20733}
20734
20735/* :nodoc: */
20736static VALUE
20737ripper_value(VALUE self, VALUE obj)
20738{
20739 return ULONG2NUM(obj);
20740}
20741#endif
20742
20743/*
20744 * call-seq:
20745 * Ripper.lex_state_name(integer) -> string
20746 *
20747 * Returns a string representation of lex_state.
20748 */
20749static VALUE
20750ripper_lex_state_name(VALUE self, VALUE state)
20751{
20753}
20754
20755void
20756Init_ripper(void)
20757{
20758 ripper_init_eventids1();
20759 ripper_init_eventids2();
20760 id_warn = rb_intern_const("warn");
20761 id_warning = rb_intern_const("warning");
20762 id_gets = rb_intern_const("gets");
20763 id_assoc = rb_intern_const("=>");
20764
20765 (void)yystpcpy; /* may not used in newer bison */
20766
20767 InitVM(ripper);
20768}
20769
20770void
20771InitVM_ripper(void)
20772{
20773 VALUE Ripper;
20774
20775 Ripper = rb_define_class("Ripper", rb_cObject);
20776 /* version of Ripper */
20777 rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
20778 rb_define_alloc_func(Ripper, ripper_s_allocate);
20779 rb_define_method(Ripper, "initialize", ripper_initialize, -1);
20780 rb_define_method(Ripper, "parse", ripper_parse, 0);
20781 rb_define_method(Ripper, "column", ripper_column, 0);
20782 rb_define_method(Ripper, "filename", ripper_filename, 0);
20783 rb_define_method(Ripper, "lineno", ripper_lineno, 0);
20784 rb_define_method(Ripper, "state", ripper_state, 0);
20785 rb_define_method(Ripper, "token", ripper_token, 0);
20786 rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
20787 rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
20788 rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
20789 rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
20790 rb_define_method(Ripper, "debug_output", rb_parser_get_debug_output, 0);
20791 rb_define_method(Ripper, "debug_output=", rb_parser_set_debug_output, 1);
20792 rb_define_method(Ripper, "error?", ripper_error_p, 0);
20793#ifdef RIPPER_DEBUG
20794 rb_define_method(Ripper, "assert_Qundef", ripper_assert_Qundef, 2);
20795 rb_define_method(Ripper, "rawVALUE", ripper_value, 1);
20796 rb_define_method(Ripper, "validate_object", ripper_validate_object, 1);
20797#endif
20798
20799 rb_define_singleton_method(Ripper, "dedent_string", parser_dedent_string, 2);
20800 rb_define_private_method(Ripper, "dedent_string", parser_dedent_string, 2);
20801
20802 rb_define_singleton_method(Ripper, "lex_state_name", ripper_lex_state_name, 1);
20803
20804 /* ignore newline, +/- is a sign. */
20805 rb_define_const(Ripper, "EXPR_BEG", INT2NUM(EXPR_BEG));
20806 /* newline significant, +/- is an operator. */
20807 rb_define_const(Ripper, "EXPR_END", INT2NUM(EXPR_END));
20808 /* ditto, and unbound braces. */
20809 rb_define_const(Ripper, "EXPR_ENDARG", INT2NUM(EXPR_ENDARG));
20810 /* ditto, and unbound braces. */
20811 rb_define_const(Ripper, "EXPR_ENDFN", INT2NUM(EXPR_ENDFN));
20812 /* newline significant, +/- is an operator. */
20813 rb_define_const(Ripper, "EXPR_ARG", INT2NUM(EXPR_ARG));
20814 /* newline significant, +/- is an operator. */
20815 rb_define_const(Ripper, "EXPR_CMDARG", INT2NUM(EXPR_CMDARG));
20816 /* newline significant, +/- is an operator. */
20817 rb_define_const(Ripper, "EXPR_MID", INT2NUM(EXPR_MID));
20818 /* ignore newline, no reserved words. */
20819 rb_define_const(Ripper, "EXPR_FNAME", INT2NUM(EXPR_FNAME));
20820 /* right after `.' or `::', no reserved words. */
20821 rb_define_const(Ripper, "EXPR_DOT", INT2NUM(EXPR_DOT));
20822 /* immediate after `class', no here document. */
20823 rb_define_const(Ripper, "EXPR_CLASS", INT2NUM(EXPR_CLASS));
20824 /* flag bit, label is allowed. */
20825 rb_define_const(Ripper, "EXPR_LABEL", INT2NUM(EXPR_LABEL));
20826 /* flag bit, just after a label. */
20827 rb_define_const(Ripper, "EXPR_LABELED", INT2NUM(EXPR_LABELED));
20828 /* symbol literal as FNAME. */
20829 rb_define_const(Ripper, "EXPR_FITEM", INT2NUM(EXPR_FITEM));
20830 /* equals to +EXPR_BEG+ */
20831 rb_define_const(Ripper, "EXPR_VALUE", INT2NUM(EXPR_VALUE));
20832 /* equals to <tt>(EXPR_BEG | EXPR_MID | EXPR_CLASS)</tt> */
20833 rb_define_const(Ripper, "EXPR_BEG_ANY", INT2NUM(EXPR_BEG_ANY));
20834 /* equals to <tt>(EXPR_ARG | EXPR_CMDARG)</tt> */
20835 rb_define_const(Ripper, "EXPR_ARG_ANY", INT2NUM(EXPR_ARG_ANY));
20836 /* equals to <tt>(EXPR_END | EXPR_ENDARG | EXPR_ENDFN)</tt> */
20837 rb_define_const(Ripper, "EXPR_END_ANY", INT2NUM(EXPR_END_ANY));
20838 /* equals to +0+ */
20839 rb_define_const(Ripper, "EXPR_NONE", INT2NUM(EXPR_NONE));
20840
20841 ripper_init_eventids1_table(Ripper);
20842 ripper_init_eventids2_table(Ripper);
20843
20844# if 0
20845 /* Hack to let RDoc document SCRIPT_LINES__ */
20846
20847 /*
20848 * When a Hash is assigned to +SCRIPT_LINES__+ the contents of files loaded
20849 * after the assignment will be added as an Array of lines with the file
20850 * name as the key.
20851 */
20852 rb_define_global_const("SCRIPT_LINES__", Qnil);
20853#endif
20854
20855}
20856#endif /* RIPPER */
20857
20858/*
20859 * Local variables:
20860 * mode: c
20861 * c-file-style: "ruby"
20862 * End:
20863 */
int errno
#define END(name)
Definition: asm.h:115
int main(void)
Definition: closure_fn0.c:49
enum @73::@75::@76 mask
struct RIMemo * ptr
Definition: debug.c:65
#define free(x)
Definition: dln.c:52
struct rb_encoding_entry * list
Definition: encoding.c:56
int rb_enc_precise_mbclen(const char *p, const char *e, rb_encoding *enc)
Definition: encoding.c:1032
VALUE rb_enc_associate(VALUE obj, rb_encoding *enc)
Definition: encoding.c:866
rb_encoding * rb_utf8_encoding(void)
Definition: encoding.c:1328
rb_encoding * rb_ascii8bit_encoding(void)
Definition: encoding.c:1316
rb_encoding * rb_enc_from_index(int index)
Definition: encoding.c:609
rb_encoding * rb_enc_get(VALUE obj)
Definition: encoding.c:872
int rb_ascii8bit_encindex(void)
Definition: encoding.c:1322
rb_encoding * rb_enc_compatible(VALUE str1, VALUE str2)
Definition: encoding.c:974
rb_encoding * rb_usascii_encoding(void)
Definition: encoding.c:1340
VALUE rb_enc_from_encoding(rb_encoding *encoding)
Definition: encoding.c:116
VALUE rb_enc_associate_index(VALUE obj, int idx)
Definition: encoding.c:838
int rb_enc_find_index(const char *name)
Definition: encoding.c:693
int rb_enc_codelen(int c, rb_encoding *enc)
Definition: encoding.c:1089
#define ENC_CODERANGE_7BIT
Definition: encoding.h:104
#define rb_enc_mbcput(c, buf, enc)
Definition: encoding.h:217
#define rb_enc_prev_char(s, p, e, enc)
Definition: encoding.h:220
int rb_enc_str_coderange(VALUE)
Definition: string.c:657
#define ENC_CODERANGE_UNKNOWN
Definition: encoding.h:103
VALUE rb_enc_str_new(const char *, long, rb_encoding *)
Definition: string.c:796
#define rb_enc_name(enc)
Definition: encoding.h:177
#define ENCODING_GET(obj)
Definition: encoding.h:62
VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc)
Definition: string.c:2919
#define rb_enc_asciicompat(enc)
Definition: encoding.h:245
#define rb_enc_isalnum(c, enc)
Definition: encoding.h:235
int rb_char_to_option_kcode(int c, int *option, int *kcode)
Definition: re.c:319
long rb_str_coderange_scan_restartable(const char *, const char *, rb_encoding *, int *)
Definition: string.c:567
#define MBCLEN_CHARFOUND_P(ret)
Definition: encoding.h:191
#define ENCODING_SET(obj, i)
Definition: encoding.h:60
#define ENCODING_IS_ASCII8BIT(obj)
Definition: encoding.h:63
#define rb_enc_isspace(c, enc)
Definition: encoding.h:237
char str[HTML_ESCAPE_MAX_LEN+1]
Definition: escape.c:18
@ tHEREDOC_END
Definition: eventids2.c:8
@ tEMBDOC
Definition: eventids2.c:5
@ tEMBDOC_END
Definition: eventids2.c:6
@ tIGNORED_NL
Definition: eventids2.c:2
@ k__END__
Definition: eventids2.c:9
@ tHEREDOC_BEG
Definition: eventids2.c:7
@ tEMBDOC_BEG
Definition: eventids2.c:4
@ tCOMMENT
Definition: eventids2.c:3
#define rb_intern_str(string)
Definition: generator.h:16
VALUE rb_define_class(const char *, VALUE)
Defines a top-level class.
Definition: class.c:662
VALUE rb_cObject
Object class.
Definition: ruby.h:2012
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
void rb_raise(VALUE exc, const char *fmt,...)
Definition: error.c:2671
_Bool rb_warning_category_enabled_p(rb_warning_category_t category)
Definition: error.c:166
void rb_exc_raise(VALUE mesg)
Raises an exception in the current thread.
Definition: eval.c:668
void rb_set_errinfo(VALUE err)
Sets the current exception ($!) to the given value.
Definition: eval.c:1896
const char * rb_builtin_type_name(int t)
Definition: error.c:763
VALUE rb_eTypeError
Definition: error.c:924
void rb_fatal(const char *fmt,...)
Definition: error.c:2722
const char * rb_builtin_class_name(VALUE x)
Definition: error.c:799
VALUE rb_make_exception(int, const VALUE *)
Make an Exception object from the list of arguments in a manner similar to Kernel#raise.
Definition: eval.c:851
VALUE rb_eRuntimeError
Definition: error.c:922
VALUE rb_eArgError
Definition: error.c:925
VALUE rb_ensure(VALUE(*)(VALUE), VALUE, VALUE(*)(VALUE), VALUE)
An equivalent to ensure clause.
Definition: eval.c:1115
VALUE rb_errinfo(void)
The current exception in the current thread.
Definition: eval.c:1882
VALUE rb_eSyntaxError
Definition: error.c:940
VALUE rb_class_new_instance(int, const VALUE *, VALUE)
Allocates and initializes an instance of klass.
Definition: object.c:1955
VALUE rb_obj_hide(VALUE obj)
Make the object invisible from Ruby code.
Definition: object.c:78
VALUE rb_obj_class(VALUE)
Equivalent to Object#class in Ruby.
Definition: object.c:217
VALUE rb_obj_freeze(VALUE)
Make the object unmodifiable.
Definition: object.c:1080
const char term
Definition: id.c:37
unsigned short token
Definition: id.c:36
VALUE type(ANYARGS)
ANYARGS-ed function type.
Definition: cxxanyargs.hpp:39
unsigned int input
Definition: nkf.c:4325
const char * name
Definition: nkf.c:208
const char * alias
Definition: nkf.c:1159
unsigned int last
Definition: nkf.c:4324
unsigned char buf[MIME_BUF_SIZE]
Definition: nkf.c:4322
unsigned char OnigUChar
Definition: onigmo.h:79
ONIG_EXTERN int onig_foreach_name(OnigRegex reg, int(*func)(const OnigUChar *, const OnigUChar *, int, int *, OnigRegex, void *), void *arg)
yytokentype
Definition: parse.h:52
@ tBACK_REF
Definition: parse.h:119
@ tGEQ
Definition: parse.h:130
@ keyword_alias
Definition: parse.h:99
@ tLPAREN_ARG
Definition: parse.h:150
@ tBDOT3
Definition: parse.h:139
@ tWORDS_BEG
Definition: parse.h:163
@ tAMPER
Definition: parse.h:157
@ keyword_do_cond
Definition: parse.h:81
@ END_OF_INPUT
Definition: parse.h:54
@ keyword_do_block
Definition: parse.h:82
@ keyword_defined
Definition: parse.h:100
@ tLPAREN
Definition: parse.h:149
@ tASET
Definition: parse.h:141
@ tSTRING_DEND
Definition: parse.h:168
@ tNMATCH
Definition: parse.h:135
@ tCHAR
Definition: parse.h:117
@ keyword_return
Definition: parse.h:84
@ tCONSTANT
Definition: parse.h:110
@ tMATCH
Definition: parse.h:134
@ tFLOAT
Definition: parse.h:114
@ tANDDOT
Definition: parse.h:144
@ tLABEL_END
Definition: parse.h:172
@ tNEQ
Definition: parse.h:129
@ tDOT2
Definition: parse.h:136
@ tEQ
Definition: parse.h:127
@ keyword_module
Definition: parse.h:58
@ tLAMBEG
Definition: parse.h:171
@ tCOLON2
Definition: parse.h:145
@ tCVAR
Definition: parse.h:111
@ tSTRING_DVAR
Definition: parse.h:170
@ keyword_undef
Definition: parse.h:60
@ tLEQ
Definition: parse.h:131
@ tLBRACE
Definition: parse.h:153
@ keyword_redo
Definition: parse.h:77
@ tSTRING_CONTENT
Definition: parse.h:120
@ keyword_false
Definition: parse.h:90
@ keyword_class
Definition: parse.h:57
@ keyword_ensure
Definition: parse.h:63
@ keyword_end
Definition: parse.h:64
@ keyword_and
Definition: parse.h:91
@ keyword_when
Definition: parse.h:71
@ YYerror
Definition: parse.h:55
@ tASSOC
Definition: parse.h:148
@ keyword_retry
Definition: parse.h:78
@ tSYMBOLS_BEG
Definition: parse.h:165
@ tLBRACE_ARG
Definition: parse.h:154
@ YYEMPTY
Definition: parse.h:53
@ tREGEXP_END
Definition: parse.h:121
@ keyword_or
Definition: parse.h:92
@ keyword__ENCODING__
Definition: parse.h:105
@ keyword_do
Definition: parse.h:80
@ keyword_rescue
Definition: parse.h:62
@ keyword_END
Definition: parse.h:102
@ tLSHFT
Definition: parse.h:142
@ tUMINUS
Definition: parse.h:124
@ tBDOT2
Definition: parse.h:138
@ keyword_next
Definition: parse.h:76
@ modifier_if
Definition: parse.h:94
@ tLOWEST
Definition: parse.h:173
@ tSYMBEG
Definition: parse.h:159
@ keyword_nil
Definition: parse.h:88
@ tLABEL
Definition: parse.h:112
@ tSTAR
Definition: parse.h:155
@ tCMP
Definition: parse.h:126
@ keyword_if
Definition: parse.h:65
@ keyword_BEGIN
Definition: parse.h:101
@ tIMAGINARY
Definition: parse.h:116
@ tRSHFT
Definition: parse.h:143
@ tSTRING_DBEG
Definition: parse.h:169
@ tNTH_REF
Definition: parse.h:118
@ tINTEGER
Definition: parse.h:113
@ tSTRING_BEG
Definition: parse.h:160
@ tXSTRING_BEG
Definition: parse.h:161
@ tIVAR
Definition: parse.h:109
@ keyword_then
Definition: parse.h:67
@ YYUNDEF
Definition: parse.h:56
@ modifier_while
Definition: parse.h:96
@ tQSYMBOLS_BEG
Definition: parse.h:166
@ keyword_def
Definition: parse.h:59
@ tDOT3
Definition: parse.h:137
@ keyword__FILE__
Definition: parse.h:104
@ tIDENTIFIER
Definition: parse.h:106
@ keyword_super
Definition: parse.h:86
@ tOP_ASGN
Definition: parse.h:147
@ keyword_while
Definition: parse.h:72
@ tGVAR
Definition: parse.h:108
@ tPOW
Definition: parse.h:125
@ keyword_true
Definition: parse.h:89
@ keyword__LINE__
Definition: parse.h:103
@ keyword_else
Definition: parse.h:69
@ tSTRING_END
Definition: parse.h:167
@ keyword_in
Definition: parse.h:79
@ modifier_unless
Definition: parse.h:95
@ tEQQ
Definition: parse.h:128
@ tRATIONAL
Definition: parse.h:115
@ tUMINUS_NUM
Definition: parse.h:174
@ keyword_unless
Definition: parse.h:66
@ tDSTAR
Definition: parse.h:156
@ tANDOP
Definition: parse.h:132
@ keyword_do_LAMBDA
Definition: parse.h:83
@ tCOLON3
Definition: parse.h:146
@ keyword_for
Definition: parse.h:74
@ modifier_rescue
Definition: parse.h:98
@ tFID
Definition: parse.h:107
@ keyword_not
Definition: parse.h:93
@ tAREF
Definition: parse.h:140
@ keyword_begin
Definition: parse.h:61
@ keyword_self
Definition: parse.h:87
@ tRPAREN
Definition: parse.h:151
@ keyword_break
Definition: parse.h:75
@ keyword_until
Definition: parse.h:73
@ keyword_case
Definition: parse.h:70
@ tSP
Definition: parse.h:122
@ tOROP
Definition: parse.h:133
@ keyword_yield
Definition: parse.h:85
@ tLBRACK
Definition: parse.h:152
@ tQWORDS_BEG
Definition: parse.h:164
@ tREGEXP_BEG
Definition: parse.h:162
@ modifier_until
Definition: parse.h:97
@ tLAST_TOKEN
Definition: parse.h:175
@ tLAMBDA
Definition: parse.h:158
@ keyword_elsif
Definition: parse.h:68
@ tUPLUS
Definition: parse.h:123
enum yytokentype yytoken_kind_t
Definition: parse.h:177
#define RARRAY_LEN(a)
void * memchr(const void *, int, size_t)
#define NEW_DSTR(s, loc)
VALUE rb_hash_lookup(VALUE, VALUE)
Definition: hash.c:2063
void rb_ast_dispose(rb_ast_t *)
Definition: node.c:1387
#define MEMCPY(p1, p2, type, n)
#define NEW_VCALL(m, loc)
#define T_COMPLEX
#define NULL
void rb_node_init(NODE *n, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
Definition: node.c:1095
#define NEW_DEFS(r, i, a, d, loc)
const char *void void rb_compile_warning(const char *, int, const char *,...) __attribute__((format(printf
VALUE rb_str_resize(VALUE, long)
Definition: string.c:2709
#define NEW_ITER(a, b, loc)
#define T_FILE
@ RB_WARN_CATEGORY_EXPERIMENTAL
#define nd_state
use StringValue() instead")))
#define RSTRING_LEN(str)
#define NEW_BLOCK(a, loc)
#define NEW_POSTEXE(b, loc)
VALUE rb_reg_check_preprocess(VALUE)
Definition: re.c:2707
#define RTEST(v)
#define NEW_CVASGN(v, val, loc)
#define NEW_DOT2(b, e, loc)
#define ALLOCA_N(type, n)
NODE * rb_ast_newnode(rb_ast_t *, enum node_type type)
Definition: node.c:1198
#define NEW_UNLESS(c, t, e, loc)
#define NEW_DEFN(i, a, d, loc)
#define NEW_RETURN(s, loc)
unsigned long st_data_t
#define NEW_ALIAS(n, o, loc)
#define RBASIC(obj)
static const VALUE int int int int int int VALUE * vars[]
void rb_compile_warn(const char *, int, const char *,...) __attribute__((format(printf
#define ID_GLOBAL
#define NEW_MODULE(n, b, loc)
size_t strlen(const char *)
int strcmp(const char *, const char *)
void rb_define_private_method(VALUE, const char *, VALUE(*)(), int)
#define T_STRING
#define nd_first_lineno(n)
long int ptrdiff_t
void * malloc(size_t) __attribute__((__malloc__)) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(1)))
VALUE rb_assoc_new(VALUE, VALUE)
Definition: array.c:896
#define ID_CLASS
__uint8_t uint8_t
#define xfree
#define nd_set_type(n, t)
#define NEW_DOT3(b, e, loc)
#define LONG2FIX(i)
#define Qundef
#define NEW_HASH(a, loc)
#define NEW_BREAK(s, loc)
#define CHAR_BIT
#define MAYBE_UNUSED(x)
VALUE rb_big_norm(VALUE)
Definition: bignum.c:3152
#define NEW_EVSTR(n, loc)
#define RSTRING_END(str)
void rb_write_error_str(VALUE mesg)
Definition: io.c:7940
const VALUE VALUE obj
#define NEW_COLON2(c, i, loc)
#define TYPE(x)
#define T_FLOAT
#define st_is_member(table, key)
VALUE rb_suppress_tracing(VALUE(*func)(VALUE), VALUE arg)
Definition: vm_trace.c:415
#define RSTRING_PTR(str)
void rb_gc_register_mark_object(VALUE)
Definition: gc.c:7079
const rb_iseq_t const char * error
#define xrealloc
#define ISXDIGIT(c)
#define T_BIGNUM
#define NEW_IF(c, t, e, loc)
#define NEW_NIL(loc)
VALUE VALUE rb_str_vcatf(VALUE, const char *, va_list)
Definition: sprintf.c:1210
VALUE rb_ident_hash_new(void)
Definition: hash.c:4278
#define rb_str_new(str, len)
#define NIL_P(v)
#define rb_str_buf_cat
#define numberof(array)
#define ID_CONST
#define DBL2NUM(dbl)
#define nd_resq
VALUE rb_str_cat(VALUE, const char *, long)
Definition: string.c:2812
#define NEW_GASGN(v, val, loc)
rb_ast_t * rb_ast_new(void)
Definition: node.c:1235
#define ID2SYM(x)
VALUE rb_io_gets(VALUE)
Definition: io.c:3577
#define NEW_BEGIN(b, loc)
#define nd_end
const char * rb_id2name(ID)
Definition: symbol.c:801
#define ISCNTRL(c)
#define REALLOC_N(var, type, n)
#define NEW_OPT_ARG(i, v, loc)
#define nd_line(n)
const char size_t n
#define rb_usascii_str_new(str, len)
#define ruby_verbose
#define RUBY_SYMBOL_EXPORT_BEGIN
#define rb_intern_const(str)
#define NEW_SPLAT(a, loc)
VALUE rb_io_write(VALUE, VALUE)
Definition: io.c:1804
#define NEW_IASGN(v, val, loc)
void rb_define_global_const(const char *, VALUE)
Definition: variable.c:2903
#define NEW_ARGS_AUX(r, b, loc)
#define SYM2ID(x)
#define NEW_CDECL(v, val, path, loc)
void rb_str_set_len(VALUE, long)
Definition: string.c:2692
int rb_respond_to(VALUE, ID)
Definition: vm_method.c:2207
const char const char *typedef unsigned long VALUE
VALUE rb_ary_push(VALUE, VALUE)
Definition: array.c:1195
#define stderr
#define nd_ainfo
#define NEW_SELF(loc)
#define NEW_CALL(r, m, a, loc)
#define NEW_DASGN(v, val, loc)
#define T_NODE
#define BIGNUM_NEGATE(b)
#define nd_1st
__inline__ const void *__restrict__ src
#define NEW_ARGSPUSH(a, b, loc)
int rb_local_defined(ID, const struct rb_iseq_struct *)
#define NEW_FALSE(loc)
void rb_str_modify(VALUE)
Definition: string.c:2114
VALUE rb_ary_concat(VALUE, VALUE)
Definition: array.c:4069
#define NEW_CASE(h, b, loc)
VALUE rb_str_buf_new(long)
Definition: string.c:1315
#define rb_sym_intern_ascii_cstr(ptr)
#define NEW_RETRY(loc)
#define nd_first_column(n)
() void(cc->call !=vm_call_general)
#define rb_rational_raw1(x)
VALUE rb_int_positive_pow(long x, unsigned long y)
Definition: numeric.c:4038
int rb_const_defined_at(VALUE, ID)
Definition: variable.c:2692
VALUE rb_filesystem_str_new_cstr(const char *)
Definition: string.c:1117
#define nd_brace
#define xmalloc
VALUE rb_cstr_to_inum(const char *, int, int)
Definition: bignum.c:4012
void rb_define_alloc_func(VALUE, rb_alloc_func_t)
#define nd_2nd
uint32_t i
#define char
#define NEW_SUPER(a, loc)
#define nd_set_node_id(n, id)
VALUE rb_fstring(VALUE)
Definition: string.c:312
#define NUM2UINT(x)
#define RSTRING_GETMEM(str, ptrvar, lenvar)
int strncmp(const char *, const char *, size_t)
__inline__ const void *__restrict__ size_t len
static const VALUE int int int int int int VALUE char * fmt
#define NEW_LASGN(v, val, loc)
VALUE rb_io_flush(VALUE)
Definition: io.c:1903
#define NEW_MATCH2(n1, n2, loc)
#define nd_set_last_loc(n, v)
const char * rb_obj_classname(VALUE)
Definition: variable.c:289
#define NEW_OPCALL(r, m, a, loc)
#define ALLOC_N(type, n)
#define NEW_SCOPE(a, b, loc)
void rb_ast_add_mark_object(rb_ast_t *, VALUE)
Definition: node.c:1393
#define NEW_MATCH3(r, n2, loc)
#define OBJ_FREEZE(x)
#define NEW_LIST(a, loc)
#define INT2NUM(x)
VALUE rb_stderr
#define NEW_XSTR(s, loc)
#define ZALLOC(type)
#define SIZED_REALLOC_N(var, type, n, old_n)
VALUE rb_complex_raw(VALUE, VALUE)
Definition: complex.c:1521
int strcasecmp(const char *, const char *) __attribute__((__pure__))
#define NEW_CASE2(b, loc)
#define T_RATIONAL
#define RNODE(obj)
#define RB_OBJ_WRITE(a, slot, b)
#define va_end(v)
VALUE rb_const_get_at(VALUE, ID)
Definition: variable.c:2397
#define FLONUM_P(x)
#define nd_last_loc(n)
#define T_HASH
#define LONG2NUM(x)
#define NEW_UNTIL(c, b, n, loc)
__int_least8_t int_least8_t
void rb_define_const(VALUE, const char *, VALUE)
Definition: variable.c:2891
__gnuc_va_list va_list
#define long
#define NUM2INT(x)
void rb_define_singleton_method(VALUE, const char *, VALUE(*)(), int)
#define NEW_OP_ASGN_OR(i, val, loc)
#define rb_long2int(n)
#define NEW_OP_ASGN1(p, id, a, loc)
#define RB_GC_GUARD(v)
#define RUBY_TYPED_FREE_IMMEDIATELY
#define NEW_SCLASS(r, b, loc)
#define nd_set_first_lineno(n, v)
#define ISALNUM(c)
#define RREGEXP_PTR(r)
#define NEW_DEFINED(e, loc)
#define NEW_REDO(loc)
#define RUBY_SYMBOL_EXPORT_END
#define NEW_CONST(v, loc)
#define TypedData_Get_Struct(obj, type, data_type, sval)
#define PRIsVALUE
#define NEW_DVAR(v, loc)
#define rb_ary_new3
void * memset(void *, int, size_t)
#define NEW_FOR_MASGN(v, loc)
const char * s2
#define rb_funcall(recv, mid, argc,...)
#define NODE_SPECIAL_REQUIRED_KEYWORD
int VALUE v
VALUE rb_ary_new(void)
Definition: array.c:723
#define ID_SCOPE_SHIFT
#define rb_scan_args(argc, argvp, fmt,...)
__uint_least16_t uint_least16_t
#define nd_args
#define NEW_RESCUE(b, res, e, loc)
#define rb_usascii_str_new2
ID rb_intern2(const char *, long)
Definition: symbol.c:653
VALUE rb_rational_new(VALUE, VALUE)
Definition: rational.c:1957
#define rb_str_cat_cstr(str, ptr)
#define NEW_TRUE(loc)
void rb_gc_mark(VALUE)
Definition: gc.c:5228
#define rb_intern(str)
#define va_start(v, l)
#define ERANGE
int rb_memcicmp(const void *, const void *, long)
Definition: re.c:80
VALUE rb_str_catf(VALUE, const char *,...) __attribute__((format(printf
VALUE rb_node_case_when_optimizable_literal(const NODE *const node)
Definition: compile.c:4284
#define CONST_ID(var, str)
#define RRATIONAL(obj)
#define NEW_YIELD(a, loc)
#define RFLOAT_VALUE(v)
#define TRUE
#define FALSE
#define NEW_MASGN(l, r, loc)
#define rb_imemo_tmpbuf_auto_free_pointer()
#define NEW_NEXT(s, loc)
unsigned int size
#define RRATIONAL_SET_NUM(rat, n)
@ imemo_parser_strterm
#define Qtrue
#define MEMMOVE(p1, p2, type, n)
VALUE rb_str_subseq(VALUE, long, long)
Definition: string.c:2474
#define ruby_sized_xfree(ptr, size)
#define NEW_BLOCK_PASS(b, loc)
#define rb_strlen_lit(str)
#define UNLIKELY(x)
void rb_ast_add_local_table(rb_ast_t *, ID *buf)
Definition: node.c:1219
const struct rb_call_cache * cc
#define memmove(dst, src, len)
#define nd_else
#define NODE_SPECIAL_NO_REST_KEYWORD
#define NEW_FCALL(m, a, loc)
#define ISDIGIT(c)
VALUE rb_str_new_frozen(VALUE)
Definition: string.c:1203
VALUE rb_attr_get(VALUE, ID)
Definition: variable.c:1084
#define Qnil
#define Qfalse
#define NEW_OP_ASGN_AND(i, val, loc)
VALUE rb_io_puts(int, const VALUE *, VALUE)
Definition: io.c:7751
#define T_ARRAY
#define nd_lit
void * memcpy(void *__restrict__, const void *__restrict__, size_t)
VALUE rb_str_buf_append(VALUE, VALUE)
Definition: string.c:2950
#define ID_INSTANCE
#define T_OBJECT
VALUE rb_str_intern(VALUE)
Definition: symbol.c:710
int rb_stderr_tty_p(void)
Definition: io.c:7962
#define NEW_CLASS(n, b, s, loc)
__int_least16_t int_least16_t
VALUE rb_imemo_new(enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VALUE v0)
Definition: gc.c:2321
#define nd_head
#define ULONG2NUM(x)
VALUE rb_thread_current(void)
Definition: thread.c:2675
#define RB_TYPE_P(obj, type)
#define INT2FIX(i)
#define SPECIAL_CONST_P(x)
#define NEW_LVAR(v, loc)
#define nd_set_line(n, l)
#define ALLOC(type)
void rb_gc_force_recycle(VALUE)
Definition: gc.c:7027
#define NODE_FL_NEWLINE
#define NEW_LAMBDA(a, b, loc)
VALUE rb_ary_unshift(VALUE, VALUE)
Definition: array.c:1494
VALUE rb_obj_as_string(VALUE)
Definition: string.c:1440
#define TypedData_Make_Struct(klass, type, data_type, sval)
const VALUE * argv
#define NEW_WHILE(c, b, n, loc)
#define SYMBOL_P(x)
#define NODE_REQUIRED_KEYWORD_P(node)
__inline__ int
VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline)
Definition: re.c:2953
#define NEW_FOR(i, b, loc)
#define FIXNUM_P(f)
#define NEW_RESBODY(a, ex, n, loc)
#define NEW_IN(c, t, e, loc)
__uint_least8_t uint_least8_t
#define nd_beg
#define RCOMPLEX_SET_IMAG(cmp, i)
#define NEW_ZSUPER(loc)
#define NEW_CASE3(h, b, loc)
#define NEW_WHEN(c, t, e, loc)
#define RCOMPLEX_SET_REAL(cmp, r)
if((__builtin_expect(!!(!me), 0)))
VALUE rb_hash_aset(VALUE, VALUE, VALUE)
Definition: hash.c:2852
unsigned long ruby_scan_digits(const char *str, ssize_t len, int base, size_t *retlen, int *overflow)
Definition: util.c:97
#define NEW_GVAR(v, loc)
#define nd_set_first_column(n, v)
#define ID_LOCAL
#define NEW_OP_CDECL(v, op, val, loc)
#define NEW_UNDEF(i, loc)
#define NEW_COLON3(i, loc)
#define NEW_BACK_REF(n, loc)
#define RFLOAT(obj)
#define nd_type(n)
ID rb_id_attrset(ID)
Definition: symbol.c:98
#define xcalloc
#define NEW_IVAR(v, loc)
VALUE rb_str_dup(VALUE)
Definition: string.c:1516
VALUE rb_sprintf(const char *,...) __attribute__((format(printf
#define RBASIC_CLASS(obj)
#define NEW_VALIAS(n, o, loc)
#define nd_set_first_loc(n, v)
unsigned long ID
return cc call
#define nd_body
#define NEW_POSTARG(i, v, loc)
#define InitVM(ext)
#define nd_value
size_t st_index_t h
#define ISSPACE(c)
#define rb_ary_new_from_args(n,...)
#define RUBY_FUNC_EXPORTED
VALUE ID id
#define NEW_NODE(t, a0, a1, a2, loc)
#define FIX2LONG(x)
VALUE rb_hash_clear(VALUE)
Definition: hash.c:2769
#define NEW_ENSURE(b, en, loc)
#define NODE_SPECIAL_NO_NAME_REST
#define NEW_CVAR(v, loc)
#define ID_SCOPE_MASK
void rb_define_method(VALUE, const char *, VALUE(*)(), int)
#define NODE_SPECIAL_EXCESSIVE_COMMA
#define RARRAY_AREF(a, i)
#define BUILTIN_TYPE(x)
#define SIZEOF_VALUE
#define NEW_KW_ARG(i, v, loc)
#define NEW_STR(s, loc)
VALUE rb_stdout
#define nd_next
VALUE rb_make_backtrace(void)
Definition: vm_backtrace.c:872
VALUE rb_hash_new(void)
Definition: hash.c:1523
void rb_ast_delete_node(rb_ast_t *, NODE *n)
Definition: node.c:1227
#define NEW_ARGSCAT(a, b, loc)
#define rb_str_new_cstr(str)
#define RB_OBJ_WRITTEN(a, oldv, b)
VALUE VALUE rb_vsprintf(const char *, va_list)
Definition: sprintf.c:1191
VALUE rb_funcallv_public(VALUE, ID, int, const VALUE *)
Calls a method.
Definition: vm_eval.c:980
#define NEW_DASGN_CURR(v, val, loc)
#define ID_INTERNAL
#define ID_STATIC_SYM
#define ISASCII(c)
VALUE rb_ary_entry(VALUE, long)
Definition: array.c:1512
#define NEW_ATTRASGN(r, m, a, loc)
#define NEW_OP_ASGN2(r, t, i, o, val, loc)
#define StringValueCStr(v)
#define NEW_LIT(l, loc)
#define STRNCASECMP(s1, s2, n)
#define T_REGEXP
#define NEW_ERRINFO(loc)
#define RCOMPLEX(obj)
#define ISALPHA(c)
#define NEW_NTH_REF(n, loc)
int rb_dvar_defined(ID, const struct rb_iseq_struct *)
#define nd_plen
#define BEG(no)
Definition: re.c:25
#define RE_OPTION_ENCODING(e)
Definition: ripper.c:706
enum lex_state_e rb_parser_trace_lex_state(struct parser_params *, enum lex_state_e, enum lex_state_e, int)
Definition: ripper.c:17934
#define NUM_SUFFIX_I
Definition: ripper.c:15040
#define HERETERM_LENGTH_BITS
Definition: ripper.c:732
#define Qnull
Definition: ripper.c:945
void rb_parser_fatal(struct parser_params *p, const char *fmt,...)
Definition: ripper.c:17977
#define yyerror0(msg)
Definition: ripper.c:418
#define DEF_EXPR(n)
Definition: ripper.c:156
#define dispatch_delayed_token(p, t)
Definition: ripper.c:13132
#define IS_LABEL_POSSIBLE()
Definition: ripper.c:14684
#define has_delayed_token(p)
Definition: ripper.c:13133
#define set_yylval_name(x)
Definition: ripper.c:13109
#define DVARS_TOPSCOPE
Definition: ripper.c:252
#define idFWD_REST
Definition: ripper.c:696
#define IS_BEG()
Definition: ripper.c:14682
#define DVARS_TERMINAL_P(tbl)
Definition: ripper.c:253
#define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
Definition: ripper.c:1833
#define YYMAXDEPTH
Definition: ripper.c:6123
#define STR_NEW2(ptr)
Definition: ripper.c:383
VALUE rb_parser_new(void)
Definition: ripper.c:20026
#define RUBY_DTRACE_PARSE_HOOK(name)
#define YYSTACK_FREE
Definition: ripper.c:1895
#define STR_FUNC_QWORDS
Definition: ripper.c:13793
#define DVARS_INHERIT
Definition: ripper.c:251
#define LVAR_USED
Definition: ripper.c:17159
yysymbol_kind_t
Definition: ripper.c:1236
@ YYSYMBOL_none
Definition: ripper.c:1657
@ YYSYMBOL_137_
Definition: ripper.c:1375
@ YYSYMBOL_exc_var
Definition: ripper.c:1569
@ YYSYMBOL_keyword_redo
Definition: ripper.c:1261
@ YYSYMBOL_177_8
Definition: ripper.c:1415
@ YYSYMBOL_command_call
Definition: ripper.c:1417
@ YYSYMBOL_if_tail
Definition: ripper.c:1493
@ YYSYMBOL_k_if
Definition: ripper.c:1473
@ YYSYMBOL_keyword_not
Definition: ripper.c:1277
@ YYSYMBOL_68_
Definition: ripper.c:1306
@ YYSYMBOL_tAMPER
Definition: ripper.c:1347
@ YYSYMBOL_74_escaped_vertical_tab_
Definition: ripper.c:1312
@ YYSYMBOL_353_49
Definition: ripper.c:1591
@ YYSYMBOL_assocs
Definition: ripper.c:1641
@ YYSYMBOL_fitem
Definition: ripper.c:1433
@ YYSYMBOL_f_no_kwarg
Definition: ripper.c:1627
@ YYSYMBOL_k_case
Definition: ripper.c:1477
@ YYSYMBOL_mlhs_head
Definition: ripper.c:1426
@ YYSYMBOL_operation3
Definition: ripper.c:1645
@ YYSYMBOL_undef_list
Definition: ripper.c:1434
@ YYSYMBOL_method_call
Definition: ripper.c:1518
@ YYSYMBOL_mrhs
Definition: ripper.c:1455
@ YYSYMBOL_keyword_module
Definition: ripper.c:1242
@ YYSYMBOL_355_51
Definition: ripper.c:1593
@ YYSYMBOL_f_kwrest
Definition: ripper.c:1628
@ YYSYMBOL_restarg_mark
Definition: ripper.c:1633
@ YYSYMBOL_168_4
Definition: ripper.c:1406
@ YYSYMBOL_310_45
Definition: ripper.c:1548
@ YYSYMBOL_271_27
Definition: ripper.c:1509
@ YYSYMBOL_k_def
Definition: ripper.c:1481
@ YYSYMBOL_tASET
Definition: ripper.c:1331
@ YYSYMBOL_275_31
Definition: ripper.c:1513
@ YYSYMBOL_tNMATCH
Definition: ripper.c:1325
@ YYSYMBOL_stmt
Definition: ripper.c:1405
@ YYSYMBOL_YYUNDEF
Definition: ripper.c:1240
@ YYSYMBOL_expr_value_do
Definition: ripper.c:1414
@ YYSYMBOL_152_
Definition: ripper.c:1390
@ YYSYMBOL_trailer
Definition: ripper.c:1654
@ YYSYMBOL_expr_value
Definition: ripper.c:1413
@ YYSYMBOL_294_38
Definition: ripper.c:1532
@ YYSYMBOL_tSTRING_DEND
Definition: ripper.c:1358
@ YYSYMBOL_tWORDS_BEG
Definition: ripper.c:1353
@ YYSYMBOL_224_18
Definition: ripper.c:1462
@ YYSYMBOL_69_backslash_
Definition: ripper.c:1307
@ YYSYMBOL_tSTRING_DBEG
Definition: ripper.c:1359
@ YYSYMBOL_call_op2
Definition: ripper.c:1648
@ YYSYMBOL_k_module
Definition: ripper.c:1480
@ YYSYMBOL_226_20
Definition: ripper.c:1464
@ YYSYMBOL_k_ensure
Definition: ripper.c:1485
@ YYSYMBOL_tLOWEST
Definition: ripper.c:1363
@ YYSYMBOL_178_9
Definition: ripper.c:1416
@ YYSYMBOL_tAREF
Definition: ripper.c:1330
@ YYSYMBOL_tSTRING_END
Definition: ripper.c:1357
@ YYSYMBOL_tCOLON3
Definition: ripper.c:1336
@ YYSYMBOL_keyword_end
Definition: ripper.c:1248
@ YYSYMBOL_147_
Definition: ripper.c:1385
@ YYSYMBOL_tREGEXP_END
Definition: ripper.c:1305
@ YYSYMBOL_regexp
Definition: ripper.c:1576
@ YYSYMBOL_225_19
Definition: ripper.c:1463
@ YYSYMBOL_tQSYMBOLS_BEG
Definition: ripper.c:1356
@ YYSYMBOL_args_forward
Definition: ripper.c:1615
@ YYSYMBOL_p_args_tail
Definition: ripper.c:1552
@ YYSYMBOL_p_expr
Definition: ripper.c:1541
@ YYSYMBOL_tLABEL_END
Definition: ripper.c:1362
@ YYSYMBOL_k_else
Definition: ripper.c:1487
@ YYSYMBOL_do_body
Definition: ripper.c:1524
@ YYSYMBOL_222_16
Definition: ripper.c:1460
@ YYSYMBOL_354_50
Definition: ripper.c:1592
@ YYSYMBOL_primary
Definition: ripper.c:1456
@ YYSYMBOL_223_17
Definition: ripper.c:1461
@ YYSYMBOL_k_do_block
Definition: ripper.c:1483
@ YYSYMBOL_blkarg_mark
Definition: ripper.c:1635
@ YYSYMBOL_tNTH_REF
Definition: ripper.c:1302
@ YYSYMBOL_tDSTAR
Definition: ripper.c:1346
@ YYSYMBOL_tANDDOT
Definition: ripper.c:1334
@ YYSYMBOL_keyword_while
Definition: ripper.c:1256
@ YYSYMBOL_309_44
Definition: ripper.c:1547
@ YYSYMBOL_73_escaped_carriage_return_
Definition: ripper.c:1311
@ YYSYMBOL_138_
Definition: ripper.c:1376
@ YYSYMBOL_f_block_opt
Definition: ripper.c:1630
@ YYSYMBOL_keyword_else
Definition: ripper.c:1253
@ YYSYMBOL_f_arg_asgn
Definition: ripper.c:1618
@ YYSYMBOL_literal
Definition: ripper.c:1571
@ YYSYMBOL_keyword_do
Definition: ripper.c:1264
@ YYSYMBOL_block_args_tail
Definition: ripper.c:1500
@ YYSYMBOL_keyword_false
Definition: ripper.c:1274
@ YYSYMBOL_131_
Definition: ripper.c:1369
@ YYSYMBOL_symbol_list
Definition: ripper.c:1581
@ YYSYMBOL_rel_expr
Definition: ripper.c:1441
@ YYSYMBOL_p_case_body
Definition: ripper.c:1531
@ YYSYMBOL_opt_block_args_tail
Definition: ripper.c:1501
@ YYSYMBOL_tUMINUS_NUM
Definition: ripper.c:1377
@ YYSYMBOL_lhs
Definition: ripper.c:1429
@ YYSYMBOL_p_cases
Definition: ripper.c:1538
@ YYSYMBOL_YYerror
Definition: ripper.c:1239
@ YYSYMBOL_352_48
Definition: ripper.c:1590
@ YYSYMBOL_modifier_unless
Definition: ripper.c:1279
@ YYSYMBOL_modifier_if
Definition: ripper.c:1278
@ YYSYMBOL_keyword_def
Definition: ripper.c:1243
@ YYSYMBOL_357_53
Definition: ripper.c:1595
@ YYSYMBOL_word
Definition: ripper.c:1579
@ YYSYMBOL_numeric
Definition: ripper.c:1601
@ YYSYMBOL_keyword_do_LAMBDA
Definition: ripper.c:1267
@ YYSYMBOL_274_30
Definition: ripper.c:1512
@ YYSYMBOL_f_larglist
Definition: ripper.c:1514
@ YYSYMBOL_p_variable
Definition: ripper.c:1564
@ YYSYMBOL_p_expr_basic
Definition: ripper.c:1546
@ YYSYMBOL_operation
Definition: ripper.c:1643
@ YYSYMBOL_tSYMBOLS_BEG
Definition: ripper.c:1355
@ YYSYMBOL_keyword_case
Definition: ripper.c:1254
@ YYSYMBOL_401_56
Definition: ripper.c:1639
@ YYSYMBOL_modifier_until
Definition: ripper.c:1281
@ YYSYMBOL_bv_decls
Definition: ripper.c:1506
@ YYSYMBOL_325_47
Definition: ripper.c:1563
@ YYSYMBOL_tOROP
Definition: ripper.c:1323
@ YYSYMBOL_127_
Definition: ripper.c:1365
@ YYSYMBOL_p_args
Definition: ripper.c:1550
@ YYSYMBOL_283_32
Definition: ripper.c:1521
@ YYSYMBOL_tRPAREN
Definition: ripper.c:1341
@ YYSYMBOL_k_unless
Definition: ripper.c:1474
@ YYSYMBOL_k_while
Definition: ripper.c:1475
@ YYSYMBOL_f_arglist
Definition: ripper.c:1610
@ YYSYMBOL_opt_bv_decl
Definition: ripper.c:1505
@ YYSYMBOL_p_arg
Definition: ripper.c:1554
@ YYSYMBOL_272_28
Definition: ripper.c:1510
@ YYSYMBOL_220_14
Definition: ripper.c:1458
@ YYSYMBOL_keyword_BEGIN
Definition: ripper.c:1285
@ YYSYMBOL_dot_or_colon
Definition: ripper.c:1646
@ YYSYMBOL_p_const
Definition: ripper.c:1566
@ YYSYMBOL_p_lbracket
Definition: ripper.c:1545
@ YYSYMBOL_words
Definition: ripper.c:1577
@ YYSYMBOL_modifier_rescue
Definition: ripper.c:1282
@ YYSYMBOL_p_value
Definition: ripper.c:1561
@ YYSYMBOL_f_optarg
Definition: ripper.c:1632
@ YYSYMBOL_assoc
Definition: ripper.c:1642
@ YYSYMBOL_232_26
Definition: ripper.c:1470
@ YYSYMBOL_dsym
Definition: ripper.c:1600
@ YYSYMBOL_opt_block_arg
Definition: ripper.c:1452
@ YYSYMBOL_tLABEL
Definition: ripper.c:1296
@ YYSYMBOL_bodystmt
Definition: ripper.c:1399
@ YYSYMBOL_tCVAR
Definition: ripper.c:1295
@ YYSYMBOL_tFID
Definition: ripper.c:1291
@ YYSYMBOL_opt_terms
Definition: ripper.c:1649
@ YYSYMBOL_tLBRACK
Definition: ripper.c:1342
@ YYSYMBOL_keyword_break
Definition: ripper.c:1259
@ YYSYMBOL_expr
Definition: ripper.c:1409
@ YYSYMBOL_p_primitive
Definition: ripper.c:1562
@ YYSYMBOL_311_46
Definition: ripper.c:1549
@ YYSYMBOL_xstring_contents
Definition: ripper.c:1587
@ YYSYMBOL_string_dvar
Definition: ripper.c:1596
@ YYSYMBOL_tREGEXP_BEG
Definition: ripper.c:1352
@ YYSYMBOL_p_top_expr_body
Definition: ripper.c:1540
@ YYSYMBOL_tSTRING_BEG
Definition: ripper.c:1350
@ YYSYMBOL_tLPAREN_ARG
Definition: ripper.c:1340
@ YYSYMBOL_assoc_list
Definition: ripper.c:1640
@ YYSYMBOL_tLBRACE
Definition: ripper.c:1343
@ YYSYMBOL_129_
Definition: ripper.c:1367
@ YYSYMBOL_aref_args
Definition: ripper.c:1443
@ YYSYMBOL_f_rest_marg
Definition: ripper.c:1499
@ YYSYMBOL_tSTAR
Definition: ripper.c:1345
@ YYSYMBOL_150_
Definition: ripper.c:1388
@ YYSYMBOL_tIMAGINARY
Definition: ripper.c:1300
@ YYSYMBOL_lambda_body
Definition: ripper.c:1515
@ YYSYMBOL_229_23
Definition: ripper.c:1467
@ YYSYMBOL_k_end
Definition: ripper.c:1489
@ YYSYMBOL_146_
Definition: ripper.c:1384
@ YYSYMBOL_command_asgn
Definition: ripper.c:1407
@ YYSYMBOL_tIDENTIFIER
Definition: ripper.c:1290
@ YYSYMBOL_command_args
Definition: ripper.c:1449
@ YYSYMBOL_136_
Definition: ripper.c:1374
@ YYSYMBOL_p_var_ref
Definition: ripper.c:1565
@ YYSYMBOL_130_
Definition: ripper.c:1368
@ YYSYMBOL_block_call
Definition: ripper.c:1517
@ YYSYMBOL_block_param
Definition: ripper.c:1502
@ YYSYMBOL_f_arg_item
Definition: ripper.c:1619
@ YYSYMBOL_args_tail
Definition: ripper.c:1612
@ YYSYMBOL_tRATIONAL
Definition: ripper.c:1299
@ YYSYMBOL_block_param_def
Definition: ripper.c:1504
@ YYSYMBOL_172_5
Definition: ripper.c:1410
@ YYSYMBOL_symbol
Definition: ripper.c:1597
@ YYSYMBOL_tRSHFT
Definition: ripper.c:1333
@ YYSYMBOL_fcall
Definition: ripper.c:1420
@ YYSYMBOL_keyword_when
Definition: ripper.c:1255
@ YYSYMBOL_133_
Definition: ripper.c:1371
@ YYSYMBOL_287_35
Definition: ripper.c:1525
@ YYSYMBOL_singleton
Definition: ripper.c:1638
@ YYSYMBOL_keyword__LINE__
Definition: ripper.c:1287
@ YYSYMBOL_k_rescue
Definition: ripper.c:1484
@ YYSYMBOL_tLPAREN
Definition: ripper.c:1339
@ YYSYMBOL_p_kwarg
Definition: ripper.c:1556
@ YYSYMBOL_relop
Definition: ripper.c:1440
@ YYSYMBOL_k_until
Definition: ripper.c:1476
@ YYSYMBOL_keyword_or
Definition: ripper.c:1276
@ YYSYMBOL_k_return
Definition: ripper.c:1490
@ YYSYMBOL_op
Definition: ripper.c:1436
@ YYSYMBOL_tASSOC
Definition: ripper.c:1338
@ YYSYMBOL_simple_numeric
Definition: ripper.c:1602
@ YYSYMBOL_tSTRING_CONTENT
Definition: ripper.c:1304
@ YYSYMBOL_f_block_kwarg
Definition: ripper.c:1624
@ YYSYMBOL_p_top_expr
Definition: ripper.c:1539
@ YYSYMBOL_f_block_kw
Definition: ripper.c:1623
@ YYSYMBOL_f_bad_arg
Definition: ripper.c:1616
@ YYSYMBOL_mlhs_node
Definition: ripper.c:1428
@ YYSYMBOL_166_3
Definition: ripper.c:1404
@ YYSYMBOL_tNEQ
Definition: ripper.c:1319
@ YYSYMBOL_keyword_variable
Definition: ripper.c:1604
@ YYSYMBOL_regexp_contents
Definition: ripper.c:1588
@ YYSYMBOL_opt_args_tail
Definition: ripper.c:1613
@ YYSYMBOL_keyword_undef
Definition: ripper.c:1244
@ YYSYMBOL_k_begin
Definition: ripper.c:1472
@ YYSYMBOL_do_block
Definition: ripper.c:1516
@ YYSYMBOL_modifier_while
Definition: ripper.c:1280
@ YYSYMBOL_f_arg
Definition: ripper.c:1620
@ YYSYMBOL_backref
Definition: ripper.c:1607
@ YYSYMBOL_tCMP
Definition: ripper.c:1316
@ YYSYMBOL_keyword_unless
Definition: ripper.c:1250
@ YYSYMBOL_tQWORDS_BEG
Definition: ripper.c:1354
@ YYSYMBOL_keyword_alias
Definition: ripper.c:1283
@ YYSYMBOL_brace_block
Definition: ripper.c:1519
@ YYSYMBOL_string
Definition: ripper.c:1573
@ YYSYMBOL_mrhs_arg
Definition: ripper.c:1454
@ YYSYMBOL_lambda
Definition: ripper.c:1508
@ YYSYMBOL_args
Definition: ripper.c:1453
@ YYSYMBOL_f_label
Definition: ripper.c:1621
@ YYSYMBOL_tFLOAT
Definition: ripper.c:1298
@ YYSYMBOL_keyword_do_cond
Definition: ripper.c:1265
@ YYSYMBOL_128_
Definition: ripper.c:1366
@ YYSYMBOL_cmd_brace_block
Definition: ripper.c:1419
@ YYSYMBOL_295_39
Definition: ripper.c:1533
@ YYSYMBOL_tBDOT3
Definition: ripper.c:1329
@ YYSYMBOL_285_34
Definition: ripper.c:1523
@ YYSYMBOL_228_22
Definition: ripper.c:1466
@ YYSYMBOL_block_command
Definition: ripper.c:1418
@ YYSYMBOL_top_stmts
Definition: ripper.c:1396
@ YYSYMBOL_keyword_true
Definition: ripper.c:1273
@ YYSYMBOL_qsym_list
Definition: ripper.c:1585
@ YYSYMBOL_strings
Definition: ripper.c:1572
@ YYSYMBOL_tBACK_REF
Definition: ripper.c:1303
@ YYSYMBOL_p_kwrest
Definition: ripper.c:1559
@ YYSYMBOL_keyword__ENCODING__
Definition: ripper.c:1289
@ YYSYMBOL_141_
Definition: ripper.c:1379
@ YYSYMBOL_keyword_in
Definition: ripper.c:1263
@ YYSYMBOL_tLSHFT
Definition: ripper.c:1332
@ YYSYMBOL_keyword_yield
Definition: ripper.c:1269
@ YYSYMBOL_135_
Definition: ripper.c:1373
@ YYSYMBOL_tLAST_TOKEN
Definition: ripper.c:1380
@ YYSYMBOL_string_content
Definition: ripper.c:1589
@ YYSYMBOL_tEQ
Definition: ripper.c:1317
@ YYSYMBOL_keyword_then
Definition: ripper.c:1251
@ YYSYMBOL_top_compstmt
Definition: ripper.c:1395
@ YYSYMBOL_exc_list
Definition: ripper.c:1568
@ YYSYMBOL_stmt_or_begin
Definition: ripper.c:1403
@ YYSYMBOL_call_op
Definition: ripper.c:1647
@ YYSYMBOL_rbrace
Definition: ripper.c:1653
@ YYSYMBOL_compstmt
Definition: ripper.c:1401
@ YYSYMBOL_p_args_head
Definition: ripper.c:1551
@ YYSYMBOL_kwrest_mark
Definition: ripper.c:1626
@ YYSYMBOL_keyword_class
Definition: ripper.c:1241
@ YYSYMBOL_keyword_retry
Definition: ripper.c:1262
@ YYSYMBOL_var_ref
Definition: ripper.c:1605
@ YYSYMBOL_keyword_ensure
Definition: ripper.c:1247
@ YYSYMBOL_qsymbols
Definition: ripper.c:1583
@ YYSYMBOL_symbols
Definition: ripper.c:1580
@ YYSYMBOL_paren_args
Definition: ripper.c:1445
@ YYSYMBOL_arg
Definition: ripper.c:1438
@ YYSYMBOL_opt_ensure
Definition: ripper.c:1570
@ YYSYMBOL_197_10
Definition: ripper.c:1435
@ YYSYMBOL_keyword_rescue
Definition: ripper.c:1246
@ YYSYMBOL_keyword_until
Definition: ripper.c:1257
@ YYSYMBOL_do
Definition: ripper.c:1492
@ YYSYMBOL_term
Definition: ripper.c:1655
@ YYSYMBOL_p_args_post
Definition: ripper.c:1553
@ YYSYMBOL_for_var
Definition: ripper.c:1495
@ YYSYMBOL_356_52
Definition: ripper.c:1594
@ YYSYMBOL_arg_rhs
Definition: ripper.c:1444
@ YYSYMBOL_then
Definition: ripper.c:1491
@ YYSYMBOL_f_block_arg
Definition: ripper.c:1636
@ YYSYMBOL_YYACCEPT
Definition: ripper.c:1392
@ YYSYMBOL_cpath
Definition: ripper.c:1431
@ YYSYMBOL_288_36
Definition: ripper.c:1526
@ YYSYMBOL_173_6
Definition: ripper.c:1411
@ YYSYMBOL_keyword_for
Definition: ripper.c:1258
@ YYSYMBOL_140_
Definition: ripper.c:1378
@ YYSYMBOL_keyword_next
Definition: ripper.c:1260
@ YYSYMBOL_153_n_
Definition: ripper.c:1391
@ YYSYMBOL_212_12
Definition: ripper.c:1450
@ YYSYMBOL_fname
Definition: ripper.c:1432
@ YYSYMBOL_f_block_optarg
Definition: ripper.c:1631
@ YYSYMBOL_begin_block
Definition: ripper.c:1398
@ YYSYMBOL_keyword_super
Definition: ripper.c:1270
@ YYSYMBOL_298_42
Definition: ripper.c:1536
@ YYSYMBOL_148_
Definition: ripper.c:1386
@ YYSYMBOL_opt_f_block_arg
Definition: ripper.c:1637
@ YYSYMBOL_tGVAR
Definition: ripper.c:1292
@ YYSYMBOL_134_
Definition: ripper.c:1372
@ YYSYMBOL_arg_value
Definition: ripper.c:1442
@ YYSYMBOL_219_13
Definition: ripper.c:1457
@ YYSYMBOL_tUPLUS
Definition: ripper.c:1313
@ YYSYMBOL_tIVAR
Definition: ripper.c:1293
@ YYSYMBOL_tOP_ASGN
Definition: ripper.c:1337
@ YYSYMBOL_174_7
Definition: ripper.c:1412
@ YYSYMBOL_230_24
Definition: ripper.c:1468
@ YYSYMBOL_case_args
Definition: ripper.c:1528
@ YYSYMBOL_keyword_if
Definition: ripper.c:1249
@ YYSYMBOL_tCONSTANT
Definition: ripper.c:1294
@ YYSYMBOL_terms
Definition: ripper.c:1656
@ YYSYMBOL_tSYMBEG
Definition: ripper.c:1349
@ YYSYMBOL_keyword_END
Definition: ripper.c:1286
@ YYSYMBOL_f_norm_arg
Definition: ripper.c:1617
@ YYSYMBOL_f_margs
Definition: ripper.c:1498
@ YYSYMBOL_YYEOF
Definition: ripper.c:1238
@ YYSYMBOL_p_as
Definition: ripper.c:1542
@ YYSYMBOL_mlhs_post
Definition: ripper.c:1427
@ YYSYMBOL_opt_else
Definition: ripper.c:1494
@ YYSYMBOL_case_body
Definition: ripper.c:1529
@ YYSYMBOL_rparen
Definition: ripper.c:1651
@ YYSYMBOL_284_33
Definition: ripper.c:1522
@ YYSYMBOL_opt_nl
Definition: ripper.c:1650
@ YYSYMBOL_primary_value
Definition: ripper.c:1471
@ YYSYMBOL_qwords
Definition: ripper.c:1582
@ YYSYMBOL_201_11
Definition: ripper.c:1439
@ YYSYMBOL_keyword_elsif
Definition: ripper.c:1252
@ YYSYMBOL_tEQQ
Definition: ripper.c:1318
@ YYSYMBOL_tLAMBDA
Definition: ripper.c:1348
@ YYSYMBOL_reswords
Definition: ripper.c:1437
@ YYSYMBOL_mlhs_basic
Definition: ripper.c:1424
@ YYSYMBOL_ssym
Definition: ripper.c:1598
@ YYSYMBOL_k_when
Definition: ripper.c:1486
@ YYSYMBOL_227_21
Definition: ripper.c:1465
@ YYSYMBOL_mlhs
Definition: ripper.c:1422
@ YYSYMBOL_p_alt
Definition: ripper.c:1543
@ YYSYMBOL_151_
Definition: ripper.c:1389
@ YYSYMBOL_f_marg
Definition: ripper.c:1496
@ YYSYMBOL_k_class
Definition: ripper.c:1479
@ YYSYMBOL_keyword_self
Definition: ripper.c:1271
@ YYSYMBOL_143_
Definition: ripper.c:1381
@ YYSYMBOL_p_kwargs
Definition: ripper.c:1555
@ YYSYMBOL_145_
Definition: ripper.c:1383
@ YYSYMBOL_273_29
Definition: ripper.c:1511
@ YYSYMBOL_p_kwnorest
Definition: ripper.c:1560
@ YYSYMBOL_371_54
Definition: ripper.c:1609
@ YYSYMBOL_program
Definition: ripper.c:1393
@ YYSYMBOL_tANDOP
Definition: ripper.c:1322
@ YYSYMBOL_tINTEGER
Definition: ripper.c:1297
@ YYSYMBOL_f_marg_list
Definition: ripper.c:1497
@ YYSYMBOL_k_do
Definition: ripper.c:1482
@ YYSYMBOL_162_2
Definition: ripper.c:1400
@ YYSYMBOL_sym
Definition: ripper.c:1599
@ YYSYMBOL_opt_call_args
Definition: ripper.c:1447
@ YYSYMBOL_f_kwarg
Definition: ripper.c:1625
@ YYSYMBOL_operation2
Definition: ripper.c:1644
@ YYSYMBOL_p_lparen
Definition: ripper.c:1544
@ YYSYMBOL_132_
Definition: ripper.c:1370
@ YYSYMBOL_tLBRACE_ARG
Definition: ripper.c:1344
@ YYSYMBOL_289_37
Definition: ripper.c:1527
@ YYSYMBOL_f_opt
Definition: ripper.c:1629
@ YYSYMBOL_k_elsif
Definition: ripper.c:1488
@ YYSYMBOL_296_40
Definition: ripper.c:1534
@ YYSYMBOL_cases
Definition: ripper.c:1530
@ YYSYMBOL_keyword_defined
Definition: ripper.c:1284
@ YYSYMBOL_keyword_begin
Definition: ripper.c:1245
@ YYSYMBOL_user_variable
Definition: ripper.c:1603
@ YYSYMBOL_tBDOT2
Definition: ripper.c:1328
@ YYSYMBOL_mlhs_inner
Definition: ripper.c:1423
@ YYSYMBOL_p_kw
Definition: ripper.c:1557
@ YYSYMBOL_231_25
Definition: ripper.c:1469
@ YYSYMBOL_keyword_return
Definition: ripper.c:1268
@ YYSYMBOL_tUMINUS
Definition: ripper.c:1314
@ YYSYMBOL_word_list
Definition: ripper.c:1578
@ YYSYMBOL_YYEMPTY
Definition: ripper.c:1237
@ YYSYMBOL_tMATCH
Definition: ripper.c:1324
@ YYSYMBOL_tDOT2
Definition: ripper.c:1326
@ YYSYMBOL_opt_block_param
Definition: ripper.c:1503
@ YYSYMBOL_373_55
Definition: ripper.c:1611
@ YYSYMBOL_156_1
Definition: ripper.c:1394
@ YYSYMBOL_tSTRING_DVAR
Definition: ripper.c:1360
@ YYSYMBOL_f_kw
Definition: ripper.c:1622
@ YYSYMBOL_221_15
Definition: ripper.c:1459
@ YYSYMBOL_top_stmt
Definition: ripper.c:1397
@ YYSYMBOL_tSP
Definition: ripper.c:1308
@ YYSYMBOL_brace_body
Definition: ripper.c:1520
@ YYSYMBOL_126_
Definition: ripper.c:1364
@ YYSYMBOL_qword_list
Definition: ripper.c:1584
@ YYSYMBOL_tLEQ
Definition: ripper.c:1321
@ YYSYMBOL_149_
Definition: ripper.c:1387
@ YYSYMBOL_tCOLON2
Definition: ripper.c:1335
@ YYSYMBOL_keyword__FILE__
Definition: ripper.c:1288
@ YYSYMBOL_tCHAR
Definition: ripper.c:1301
@ YYSYMBOL_mlhs_item
Definition: ripper.c:1425
@ YYSYMBOL_cname
Definition: ripper.c:1430
@ YYSYMBOL_superclass
Definition: ripper.c:1608
@ YYSYMBOL_tGEQ
Definition: ripper.c:1320
@ YYSYMBOL_p_kw_label
Definition: ripper.c:1558
@ YYSYMBOL_string_contents
Definition: ripper.c:1586
@ YYSYMBOL_144_
Definition: ripper.c:1382
@ YYSYMBOL_string1
Definition: ripper.c:1574
@ YYSYMBOL_stmts
Definition: ripper.c:1402
@ YYSYMBOL_opt_paren_args
Definition: ripper.c:1446
@ YYSYMBOL_keyword_and
Definition: ripper.c:1275
@ YYSYMBOL_tPOW
Definition: ripper.c:1315
@ YYSYMBOL_tXSTRING_BEG
Definition: ripper.c:1351
@ YYSYMBOL_xstring
Definition: ripper.c:1575
@ YYSYMBOL_f_rest_arg
Definition: ripper.c:1634
@ YYSYMBOL_f_args
Definition: ripper.c:1614
@ YYSYMBOL_tDOT3
Definition: ripper.c:1327
@ YYSYMBOL_297_41
Definition: ripper.c:1535
@ YYSYMBOL_command
Definition: ripper.c:1421
@ YYSYMBOL_bvar
Definition: ripper.c:1507
@ YYSYMBOL_k_for
Definition: ripper.c:1478
@ YYSYMBOL_block_arg
Definition: ripper.c:1451
@ YYSYMBOL_var_lhs
Definition: ripper.c:1606
@ YYSYMBOL_opt_rescue
Definition: ripper.c:1567
@ YYSYMBOL_299_43
Definition: ripper.c:1537
@ YYSYMBOL_command_rhs
Definition: ripper.c:1408
@ YYSYMBOL_keyword_do_block
Definition: ripper.c:1266
@ YYSYMBOL_call_args
Definition: ripper.c:1448
@ YYSYMBOL_72_escaped_form_feed_
Definition: ripper.c:1310
@ YYSYMBOL_keyword_nil
Definition: ripper.c:1272
@ YYSYMBOL_tLAMBEG
Definition: ripper.c:1361
@ YYSYMBOL_rbracket
Definition: ripper.c:1652
@ YYSYMBOL_71_escaped_horizontal_tab_
Definition: ripper.c:1309
#define yyerrok
Definition: ripper.c:5663
#define add_delayed_token(p, tok, end)
Definition: ripper.c:13853
#define STRTERM_HEREDOC
Definition: ripper.c:756
#define YY_ASSERT(E)
Definition: ripper.c:1853
#define NUMPARAM_ID_P(id)
Definition: ripper.c:239
#define str_copy(_s, _p, _n)
#define YY_(Msgid)
Definition: ripper.c:1787
#define get_value(val)
Definition: ripper.c:592
#define YYNOMEM
Definition: ripper.c:5669
#define SWITCH_BY_COND_TYPE(t, w, arg)
Definition: ripper.c:18671
#define make_list(list, loc)
Definition: ripper.c:571
#define rb_warn1L(l, fmt, a)
Definition: ripper.c:964
void * rb_parser_malloc(struct parser_params *p, size_t size)
Definition: ripper.c:20180
#define dispatch_heredoc_end(p)
Definition: ripper.c:15111
#define YY_IGNORE_MAYBE_UNINITIALIZED_END
Definition: ripper.c:1834
#define YYNSTATES
Definition: ripper.c:1997
VALUE rb_io_gets_internal(VALUE io)
Definition: io.c:3583
rb_ast_t * rb_parser_compile_string(VALUE vparser, const char *f, VALUE s, int line)
Definition: ripper.c:13734
void(* rb_magic_comment_setter_t)(struct parser_params *p, const char *name, const char *val)
Definition: ripper.c:15398
#define NEW_STRTERM(func, term, paren)
Definition: ripper.c:14595
STATIC_ASSERT(rb_strterm_heredoc_t, sizeof(rb_strterm_heredoc_t)<=4 *SIZEOF_VALUE)
#define YY_IGNORE_USELESS_CAST_END
Definition: ripper.c:1849
#define lex_goto_eol(p)
Definition: ripper.c:13829
short yytype_int16
Definition: ripper.c:1698
#define literal_flush(p, ptr)
Definition: ripper.c:13130
#define IS_END()
Definition: ripper.c:14681
#define RE_OPTION_MASK
Definition: ripper.c:709
#define yyerror(yylloc, p, msg)
Definition: ripper.c:420
struct token_info token_info
void rb_parser_printf(struct parser_params *p, const char *fmt,...)
Definition: ripper.c:20237
#define WARN_S(s)
Definition: ripper.c:999
#define tok(p)
Definition: ripper.c:13939
#define KWD2EID(t, v)
Definition: ripper.c:940
#define ESCAPE_CONTROL
Definition: ripper.c:14145
#define YYABORT
Definition: ripper.c:5667
#define idFWD_KWREST
Definition: ripper.c:700
RUBY_SYMBOL_EXPORT_BEGIN VALUE rb_parser_reg_compile(struct parser_params *p, VALUE str, int options)
Definition: ripper.c:19797
#define tokcopy(p, n)
Definition: ripper.c:14009
#define PRIsWARN
Definition: ripper.c:1003
#define YYSTACK_BYTES(N)
Definition: ripper.c:1940
lex_state_e
Definition: ripper.c:155
@ EXPR_END_ANY
Definition: ripper.c:173
@ EXPR_VALUE
Definition: ripper.c:170
@ EXPR_NONE
Definition: ripper.c:174
@ EXPR_BEG_ANY
Definition: ripper.c:171
@ EXPR_ARG_ANY
Definition: ripper.c:172
#define IS_lex_state(ls)
Definition: ripper.c:178
YYLTYPE * rb_parser_set_location(struct parser_params *p, YYLTYPE *yylloc)
Definition: ripper.c:18028
yytype_int16 yy_state_t
Definition: ripper.c:1774
#define WARN_SPACE_CHAR(c, prefix)
Definition: ripper.c:14038
#define YYLLOC_DEFAULT(Current, Rhs, N)
Definition: ripper.c:112
#define intern_cstr(n, l, en)
Definition: ripper.c:379
#define TAB_WIDTH
Definition: ripper.c:99
#define CMDARG_POP()
Definition: ripper.c:207
#define YY_REDUCE_PRINT(Rule)
Definition: ripper.c:6091
rb_ast_t * rb_parser_compile_string_path(VALUE vparser, VALUE f, VALUE s, int line)
Definition: ripper.c:13740
#define YY_CAST(Type, Val)
Definition: ripper.c:1032
void rb_parser_set_options(VALUE vparser, int print, int loop, int chomp, int split)
Definition: ripper.c:19838
#define vtable_alloc(prev)
Definition: ripper.c:13481
VALUE rb_parser_set_context(VALUE vparser, const struct rb_iseq_struct *base, int main)
Definition: ripper.c:20036
#define was_bol(p)
Definition: ripper.c:13936
#define IS_lex_state_for(x, ls)
Definition: ripper.c:176
#define WARN_S_L(s, l)
Definition: ripper.c:998
#define dispatch_scan_event(p, t)
Definition: ripper.c:13131
#define YYCASE_(N, S)
#define set_yylval_id(x)
Definition: ripper.c:13108
#define NUM_SUFFIX_R
Definition: ripper.c:15039
#define NEW_QCALL(q, r, m, a, loc)
Definition: ripper.c:433
long(* rb_magic_comment_length_t)(struct parser_params *p, const char *name, long len)
Definition: ripper.c:15397
#define warn_balanced(tok, op, syn)
Definition: ripper.c:15693
#define YY_NULLPTR
Definition: ripper.c:1044
#define RE_OPTION_ENCODING_NONE(o)
Definition: ripper.c:708
YYLTYPE * rb_parser_set_location_from_strterm_heredoc(struct parser_params *p, rb_strterm_heredoc_t *here, YYLTYPE *yylloc)
Definition: ripper.c:18003
#define STR_FUNC_TERM
Definition: ripper.c:13798
#define set_yylval_literal(x)
Definition: ripper.c:13102
#define set_yylval_str(x)
Definition: ripper.c:13097
#define YYFINAL
Definition: ripper.c:1986
#define WARN_LOCATION(type)
Definition: ripper.c:17562
rb_ast_t * rb_parser_compile_generic(VALUE vparser, VALUE(*lex_gets)(VALUE, int), VALUE fname, VALUE input, int start)
Definition: ripper.c:13775
#define RUBY_INIT_YYLLOC()
Definition: ripper.c:132
#define YY_ACCESSING_SYMBOL(State)
Accessing symbol of state STATE.
Definition: ripper.c:2137
#define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
Definition: ripper.c:5796
void rb_init_parse(void)
Definition: ripper.c:19891
#define YY_INITIAL_VALUE(Value)
Definition: ripper.c:1830
#define TOK_INTERN()
Definition: ripper.c:385
#define vtable_free(tbl)
Definition: ripper.c:13499
#define CALL_Q_P(q)
Definition: ripper.c:431
#define yyparse
Definition: ripper.c:487
#define STR_NEW3(ptr, len, e, func)
Definition: ripper.c:384
#define yylval
Definition: ripper.c:13083
#define YYNTOKENS
Definition: ripper.c:1991
VALUE rb_parser_encoding(VALUE vparser)
Definition: ripper.c:20099
int rb_reg_fragment_setenc(struct parser_params *, VALUE, int)
Definition: ripper.c:19682
#define yytnamerr(yyres, yystr)
Definition: ripper.c:778
VALUE rb_parser_get_debug_output(VALUE self)
Definition: ripper.c:20147
#define Qnone
Definition: ripper.c:944
unsigned char yytype_uint8
Definition: ripper.c:1719
#define peek(p, c)
Definition: ripper.c:13832
#define YY_STACK_PRINT(Bottom, Top)
Definition: ripper.c:6059
#define compile_for_eval
Definition: ripper.c:426
const struct kwtable * rb_reserved_word(const char *str, unsigned int len)
Definition: ripper.c:20020
lex_state_bits
Definition: ripper.c:138
@ EXPR_ENDARG_bit
Definition: ripper.c:141
@ EXPR_ENDFN_bit
Definition: ripper.c:142
@ EXPR_MAX_STATE
Definition: ripper.c:152
@ EXPR_END_bit
Definition: ripper.c:140
@ EXPR_FNAME_bit
Definition: ripper.c:146
@ EXPR_LABEL_bit
Definition: ripper.c:149
@ EXPR_FITEM_bit
Definition: ripper.c:151
@ EXPR_CLASS_bit
Definition: ripper.c:148
@ EXPR_MID_bit
Definition: ripper.c:145
@ EXPR_CMDARG_bit
Definition: ripper.c:144
@ EXPR_LABELED_bit
Definition: ripper.c:150
@ EXPR_ARG_bit
Definition: ripper.c:143
@ EXPR_DOT_bit
Definition: ripper.c:147
@ EXPR_BEG_bit
Definition: ripper.c:139
#define STR_NEW(ptr, len)
Definition: ripper.c:381
#define lambda_beginning_p()
Definition: ripper.c:435
#define YYSIZE_T
Definition: ripper.c:1760
#define RUBY_SET_YYLLOC_FROM_STRTERM_HEREDOC(Current)
Definition: ripper.c:126
#define YYSTACK_ALLOC_MAXIMUM
Definition: ripper.c:1897
#define IS_lex_state_all(ls)
Definition: ripper.c:179
#define yydebug
Definition: ripper.c:101
#define NUMPARAM_IDX_TO_ID(idx)
Definition: ripper.c:241
#define YY_IGNORE_USELESS_CAST_BEGIN
Definition: ripper.c:1848
#define IS_SPCARG(c)
Definition: ripper.c:14683
void rb_strterm_mark(VALUE obj)
Definition: ripper.c:768
@ YYENOMEM
Definition: ripper.c:5661
#define rb_warn2(fmt, a, b)
Definition: ripper.c:955
void rb_parser_show_bitstack(struct parser_params *, stack_type, const char *, int)
Definition: ripper.c:17967
#define IS_ARG()
Definition: ripper.c:14680
#define value_expr(node)
Definition: ripper.c:503
#define RE_OPTION_ONCE
Definition: ripper.c:704
#define YYLOCATION_PRINT(File, Loc)
Definition: ripper.c:5747
#define ADD2HEAP(new, cnt, ptr)
Definition: ripper.c:20176
#define YYPTRDIFF_T
Definition: ripper.c:1746
#define NEWHEAP()
Definition: ripper.c:20175
#define WARN_EOL(tok)
Definition: ripper.c:1019
#define mixed_escape(beg, enc1, enc2)
#define COND_POP()
Definition: ripper.c:200
#define lex_eol_p(p)
Definition: ripper.c:13830
#define RE_OPTION_ENCODING_IDX(o)
Definition: ripper.c:707
#define vtable_pop(tbl, n)
Definition: ripper.c:13538
#define WARN_ID(i)
Definition: ripper.c:1001
#define set_yylval_noname()
Definition: ripper.c:13127
void * rb_parser_realloc(struct parser_params *p, void *ptr, size_t size)
Definition: ripper.c:20200
VALUE rb_parser_set_debug_output(VALUE self, VALUE output)
Definition: ripper.c:20162
#define rb_warn1(fmt, a)
Definition: ripper.c:954
#define set_yylval_node(x)
Definition: ripper.c:13092
VALUE rb_parser_set_yydebug(VALUE self, VALUE flag)
Definition: ripper.c:20131
VALUE rb_parser_end_seen_p(VALUE vparser)
Definition: ripper.c:20084
#define RUBY_SET_YYLLOC(Current)
Definition: ripper.c:130
#define WARN_IVAL(i)
Definition: ripper.c:1002
#define YYACCEPT
Definition: ripper.c:5666
#define ID2VAL(id)
Definition: ripper.c:938
#define yytable_value_is_error(Yyn)
Definition: ripper.c:2243
#define toklen(p)
Definition: ripper.c:13940
#define new_nil(loc)
Definition: ripper.c:491
struct rb_strterm_literal_struct rb_strterm_literal_t
#define YYTRANSLATE(YYX)
Definition: ripper.c:2005
#define subnodes(n1, n2)
#define HERETERM_LENGTH_MAX
#define rb_warn0(fmt)
Definition: ripper.c:953
YYLTYPE * rb_parser_set_location_of_none(struct parser_params *p, YYLTYPE *yylloc)
Definition: ripper.c:18018
#define STR_FUNC_LIST
Definition: ripper.c:13797
#define YY_ATTRIBUTE_UNUSED
Definition: ripper.c:1804
#define STR_FUNC_ESCAPE
Definition: ripper.c:13790
#define ifndef_ripper(x)
Definition: ripper.c:946
#define STR_FUNC_SYMBOL
Definition: ripper.c:13794
#define CMDARG_PUSH(n)
Definition: ripper.c:206
void rb_parser_free(struct parser_params *p, void *ptr)
Definition: ripper.c:20220
#define CMDARG_P()
Definition: ripper.c:208
#define STR_FUNC_LABEL
Definition: ripper.c:13796
#define rb_warning0(fmt)
Definition: ripper.c:958
#define STR_FUNC_INDENT
Definition: ripper.c:13795
#define peek_n(p, c, n)
Definition: ripper.c:13833
#define COND_P()
Definition: ripper.c:201
#define ESCAPE_META
Definition: ripper.c:14146
PRINTF_ARGS(void rb_parser_fatal(struct parser_params *p, const char *fmt,...), 2, 3)
#define METHOD_NOT
Definition: ripper.c:693
rb_ast_t * rb_parser_compile_file_path(VALUE vparser, VALUE fname, VALUE file, int start)
Definition: ripper.c:13755
#define NUMPARAM_ID_TO_IDX(id)
Definition: ripper.c:240
#define HEAPCNT(n, size)
Definition: ripper.c:20172
void rb_parser_warn_location(VALUE vparser, int warn)
Definition: ripper.c:19849
#define YYPOPSTACK(N)
int yy_state_fast_t
Definition: ripper.c:1777
#define SET_LEX_STATE(ls)
Definition: ripper.c:181
#define STR_FUNC_REGEXP
Definition: ripper.c:13792
#define RUBY_SET_YYLLOC_OF_NONE(Current)
Definition: ripper.c:128
#define idFWD_BLOCK
Definition: ripper.c:702
#define vtable_add(tbl, id)
Definition: ripper.c:13521
#define WARN_I(i)
Definition: ripper.c:1000
#define COND_PUSH(n)
Definition: ripper.c:199
unsigned short yytype_uint16
Definition: ripper.c:1730
#define token_flush(ptr)
Definition: ripper.c:421
#define get_id(id)
Definition: ripper.c:591
string_type
Definition: ripper.c:13800
@ str_dsym
Definition: ripper.c:13809
@ str_dword
Definition: ripper.c:13807
@ str_label
Definition: ripper.c:13801
@ str_ssym
Definition: ripper.c:13808
@ str_xquote
Definition: ripper.c:13804
@ str_dquote
Definition: ripper.c:13803
@ str_regexp
Definition: ripper.c:13805
@ str_squote
Definition: ripper.c:13802
@ str_sword
Definition: ripper.c:13806
#define mixed_error(enc1, enc2)
#define dyna_var(p, id)
Definition: ripper.c:680
#define rb_node_newnode(type, a1, a2, a3, loc)
Definition: ripper.c:463
#define IS_LABEL_SUFFIX(n)
Definition: ripper.c:14687
#define nd_once_body(node)
Definition: ripper.c:17500
#define yyerror1(loc, msg)
Definition: ripper.c:419
#define tokfix(p)
Definition: ripper.c:13938
#define YYLAST
Definition: ripper.c:1988
#define NUM_SUFFIX_ALL
Definition: ripper.c:15041
VALUE stack_type
Definition: ripper.c:187
#define YYSTACK_RELOCATE(Stack_alloc, Stack)
Definition: ripper.c:1952
size_t rb_yytnamerr(struct parser_params *p, char *yyres, const char *yystr)
Definition: ripper.c:20284
#define yypact_value_is_default(Yyn)
Definition: ripper.c:2238
cond_type
Definition: ripper.c:18665
@ COND_IN_COND
Definition: ripper.c:18667
@ COND_IN_OP
Definition: ripper.c:18666
@ COND_IN_FF
Definition: ripper.c:18668
#define YYINITDEPTH
Definition: ripper.c:6112
#define flush_string_content(p, enc)
Definition: ripper.c:14620
#define rb_warn0L(l, fmt)
Definition: ripper.c:963
#define CSI_BEGIN
#define STR_NEW0()
Definition: ripper.c:382
@ NUMPARAM_MAX
Definition: ripper.c:236
@ ORDINAL_PARAM
Definition: ripper.c:234
@ NO_PARAM
Definition: ripper.c:235
signed char yytype_int8
Definition: ripper.c:1690
#define rb_warn3L(l, fmt, a, b, c)
Definition: ripper.c:966
#define CSI_SGR
#define STR_FUNC_EXPAND
Definition: ripper.c:13791
#define rb_warning1(fmt, a)
Definition: ripper.c:959
#define YYERROR
Definition: ripper.c:5668
void * rb_parser_calloc(struct parser_params *p, size_t nelem, size_t size)
Definition: ripper.c:20190
#define YYSIZEOF(X)
Definition: ripper.c:1770
#define YYFPRINTF
Definition: ripper.c:107
RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20+31)/32]
Definition: ripper.c:14623
#define YYSTACK_ALLOC
Definition: ripper.c:1894
#define YYDPRINTF(Args)
Definition: ripper.c:5730
VALUE rb_parser_lex_state_name(enum lex_state_e state)
Definition: ripper.c:17948
#define peekc_n(p, n)
Definition: ripper.c:13835
#define compile_error
Definition: ripper.c:1011
#define IS_AFTER_OPERATOR()
Definition: ripper.c:14688
#define YY_USE(E)
Definition: ripper.c:1810
unsigned long VALUE
Definition: ruby.h:102
rb_atomic_t cnt[RUBY_NSIG]
Definition: signal.c:503
#define f
void st_free_table(st_table *tab)
Definition: st.c:709
st_table * st_init_numtable_with_size(st_index_t size)
Definition: st.c:660
st_table * st_init_numtable(void)
Definition: st.c:653
int st_insert(st_table *tab, st_data_t key, st_data_t value)
Definition: st.c:1171
int st_lookup(st_table *tab, st_data_t key, st_data_t *value)
Definition: st.c:1101
int st_foreach(st_table *tab, st_foreach_callback_func *func, st_data_t arg)
Definition: st.c:1717
rb_code_location_t nd_loc
union RNode::@39 u2
union RNode::@40 u3
union RNode::@38 u1
Definition: parse.h:204
int last_line
Definition: parse.h:207
int first_column
Definition: parse.h:206
int first_line
Definition: parse.h:205
int last_column
Definition: parse.h:208
Definition: lex.c:34
short id[2]
Definition: lex.c:34
short state
Definition: lex.c:34
struct local_vars * prev
Definition: ripper.c:225
NODE * current
Definition: ripper.c:228
struct vtable * vars
Definition: ripper.c:220
NODE * outer
Definition: ripper.c:228
NODE * inner
Definition: ripper.c:228
struct vtable * args
Definition: ripper.c:219
struct vtable * used
Definition: ripper.c:221
struct local_vars::@126 numparam
rb_magic_comment_length_t length
Definition: ripper.c:15466
rb_magic_comment_setter_t func
Definition: ripper.c:15465
const char * name
Definition: ripper.c:15464
VALUE(* gets)(struct parser_params *, VALUE)
Definition: ripper.c:281
int brace_nest
Definition: ripper.c:300
VALUE compile_option
Definition: ripper.c:321
rb_strterm_t * strterm
Definition: ripper.c:280
st_table * pktbl
Definition: ripper.c:313
const char * ruby_sourcefile
Definition: ripper.c:316
int heredoc_line_indent
Definition: ripper.c:309
unsigned int debug
Definition: ripper.c:336
unsigned int ruby__end__seen
Definition: ripper.c:335
YYSTYPE * lval
Definition: ripper.c:277
unsigned int has_shebang
Definition: ripper.c:337
VALUE(* call)(VALUE, int)
Definition: ripper.c:292
int lpar_beg
Definition: ripper.c:298
int heredoc_end
Definition: ripper.c:307
st_table * pvtbl
Definition: ripper.c:312
int tokline
Definition: ripper.c:306
int line_count
Definition: ripper.c:314
rb_encoding * enc
Definition: ripper.c:318
token_info * token_info
Definition: ripper.c:319
unsigned int do_chomp
Definition: ripper.c:355
VALUE input
Definition: ripper.c:282
char * tokenbuf
Definition: ripper.c:310
VALUE nextline
Definition: ripper.c:285
const char * ptok
Definition: ripper.c:289
rb_imemo_tmpbuf_t * heap
Definition: ripper.c:275
unsigned int token_seen
Definition: ripper.c:342
VALUE debug_lines
Definition: ripper.c:362
unsigned int command_start
Definition: ripper.c:333
unsigned int in_kwarg
Definition: ripper.c:339
enum lex_state_e state
Definition: ripper.c:294
unsigned int warn_location
Definition: ripper.c:357
unsigned int in_class
Definition: ripper.c:341
union parser_params::@127::@128 gets_
VALUE lastline
Definition: ripper.c:284
stack_type cond_stack
Definition: ripper.c:302
struct parser_params::@127 lex
int node_id
Definition: ripper.c:329
NODE * eval_tree
Definition: ripper.c:360
const char * pend
Definition: ripper.c:288
unsigned int eofp
Definition: ripper.c:334
unsigned int error_p
Definition: ripper.c:347
int heredoc_indent
Definition: ripper.c:308
VALUE case_labels
Definition: ripper.c:320
unsigned int in_defined
Definition: ripper.c:338
int max_numparam
Definition: ripper.c:331
unsigned int do_loop
Definition: ripper.c:354
VALUE debug_buffer
Definition: ripper.c:323
const char * pbeg
Definition: ripper.c:286
long ptr
Definition: ripper.c:291
rb_ast_t * ast
Definition: ripper.c:328
const struct rb_iseq_struct * parent_iseq
Definition: ripper.c:363
int ruby_sourceline
Definition: ripper.c:315
unsigned int do_split
Definition: ripper.c:356
unsigned int do_print
Definition: ripper.c:353
NODE * eval_tree_begin
Definition: ripper.c:359
stack_type cmdarg_stack
Definition: ripper.c:303
VALUE error_buffer
Definition: ripper.c:361
unsigned int in_def
Definition: ripper.c:340
VALUE debug_output
Definition: ripper.c:324
unsigned int token_info_enabled
Definition: ripper.c:343
VALUE ruby_sourcefile_string
Definition: ripper.c:317
int paren_nest
Definition: ripper.c:296
int tokidx
Definition: ripper.c:304
const char * pcur
Definition: ripper.c:287
VALUE prevline
Definition: ripper.c:283
int toksiz
Definition: ripper.c:305
struct local_vars * lvtbl
Definition: ripper.c:311
unsigned int cr_seen
Definition: ripper.c:348
union rb_strterm_literal_struct::@130 u1
union rb_strterm_literal_struct::@131 u2
union rb_strterm_literal_struct::@132 u3
union rb_strterm_literal_struct::@129 u0
rb_strterm_literal_t literal
Definition: ripper.c:761
union rb_strterm_struct::@133 u
rb_strterm_heredoc_t heredoc
Definition: ripper.c:762
const YYLTYPE * loc
Definition: ripper.c:19743
struct parser_params * parser
Definition: ripper.c:19740
int nonspc
Definition: ripper.c:259
int indent
Definition: ripper.c:258
rb_code_position_t beg
Definition: ripper.c:257
const char * token
Definition: ripper.c:256
struct token_info * next
Definition: ripper.c:260
Definition: ripper.c:211
ID * tbl
Definition: ripper.c:212
int capa
Definition: ripper.c:214
struct vtable * prev
Definition: ripper.c:215
int pos
Definition: ripper.c:213
yysymbol_kind_t yytoken
Definition: ripper.c:6131
yy_state_t * yyssp
Definition: ripper.c:6130
YYLTYPE * yylloc
Definition: ripper.c:6132
#define is_identchar(p, e, enc)
Definition: symbol.c:35
int rb_enc_symname_type(const char *name, long len, rb_encoding *enc, unsigned int allowed_attrset)
Definition: symbol.c:233
#define STATIC_ID2SYM(id)
Definition: symbol.h:18
#define is_notop_id(id)
Definition: symbol.h:35
#define is_local_id(id)
Definition: symbol.h:36
Definition: parse.h:183
struct rb_strterm_struct * strterm
Definition: parse.h:191
ID id
Definition: parse.h:187
VALUE val
Definition: parse.h:185
int num
Definition: parse.h:188
NODE * node
Definition: parse.h:186
st_table * tbl
Definition: parse.h:189
const struct vtable * vars
Definition: parse.h:190
YYLTYPE yyls_alloc
Definition: ripper.c:1932
YYSTYPE yyvs_alloc
Definition: ripper.c:1931
yy_state_t yyss_alloc
Definition: ripper.c:1930
unsigned long ruby_scan_oct(const char *, size_t, size_t *)
Definition: util.c:34
#define strtod(s, e)
Definition: util.h:76
#define scan_hex(s, l, e)
Definition: util.h:55
#define scan_oct(s, l, e)
Definition: util.h:53
#define rb_id2str(id)
Definition: vm_backtrace.c:30
#define MAX_WORD_LENGTH
Definition: zonetab.h:45