00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 #define YYBISON 1
00046
00047
00048 #define YYBISON_VERSION "2.4.3"
00049
00050
00051 #define YYSKELETON_NAME "yacc.c"
00052
00053
00054 #define YYPURE 1
00055
00056
00057 #define YYPUSH 0
00058
00059
00060 #define YYPULL 1
00061
00062
00063 #define YYLSP_NEEDED 0
00064
00065
00066
00067
00068
00069
00070 #line 12 "parse.y"
00071
00072
00073 #define YYDEBUG 1
00074 #define YYERROR_VERBOSE 1
00075 #define YYSTACK_USE_ALLOCA 0
00076
00077 #include "ruby/ruby.h"
00078 #include "ruby/st.h"
00079 #include "ruby/encoding.h"
00080 #include "node.h"
00081 #include "parse.h"
00082 #include "id.h"
00083 #include "regenc.h"
00084 #include <stdio.h>
00085 #include <errno.h>
00086 #include <ctype.h>
00087
00088 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
00089
00090 #define YYMALLOC(size) rb_parser_malloc(parser, size)
00091 #define YYREALLOC(ptr, size) rb_parser_realloc(parser, ptr, size)
00092 #define YYCALLOC(nelem, size) rb_parser_calloc(parser, nelem, size)
00093 #define YYFREE(ptr) rb_parser_free(parser, ptr)
00094 #define malloc YYMALLOC
00095 #define realloc YYREALLOC
00096 #define calloc YYCALLOC
00097 #define free YYFREE
00098
00099 #ifndef RIPPER
00100 static ID register_symid(ID, const char *, long, rb_encoding *);
00101 #define REGISTER_SYMID(id, name) register_symid(id, name, strlen(name), enc)
00102 #include "id.c"
00103 #endif
00104
00105 #define is_notop_id(id) ((id)>tLAST_TOKEN)
00106 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL)
00107 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL)
00108 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE)
00109 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET)
00110 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST)
00111 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS)
00112 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK)
00113
00114 #define is_asgn_or_id(id) ((is_notop_id(id)) && \
00115 (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \
00116 ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \
00117 ((id)&ID_SCOPE_MASK) == ID_CLASS))
00118
00119 enum lex_state_e {
00120 EXPR_BEG,
00121 EXPR_END,
00122 EXPR_ENDARG,
00123 EXPR_ENDFN,
00124 EXPR_ARG,
00125 EXPR_CMDARG,
00126 EXPR_MID,
00127 EXPR_FNAME,
00128 EXPR_DOT,
00129 EXPR_CLASS,
00130 EXPR_VALUE,
00131 EXPR_MAX_STATE
00132 };
00133
00134 typedef VALUE stack_type;
00135
00136 # define BITSTACK_PUSH(stack, n) (stack = (stack<<1)|((n)&1))
00137 # define BITSTACK_POP(stack) (stack = stack >> 1)
00138 # define BITSTACK_LEXPOP(stack) (stack = (stack >> 1) | (stack & 1))
00139 # define BITSTACK_SET_P(stack) (stack&1)
00140
00141 #define COND_PUSH(n) BITSTACK_PUSH(cond_stack, n)
00142 #define COND_POP() BITSTACK_POP(cond_stack)
00143 #define COND_LEXPOP() BITSTACK_LEXPOP(cond_stack)
00144 #define COND_P() BITSTACK_SET_P(cond_stack)
00145
00146 #define CMDARG_PUSH(n) BITSTACK_PUSH(cmdarg_stack, n)
00147 #define CMDARG_POP() BITSTACK_POP(cmdarg_stack)
00148 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
00149 #define CMDARG_P() BITSTACK_SET_P(cmdarg_stack)
00150
00151 struct vtable {
00152 ID *tbl;
00153 int pos;
00154 int capa;
00155 struct vtable *prev;
00156 };
00157
00158 struct local_vars {
00159 struct vtable *args;
00160 struct vtable *vars;
00161 struct local_vars *prev;
00162 };
00163
00164 #define DVARS_INHERIT ((void*)1)
00165 #define DVARS_TOPSCOPE NULL
00166 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
00167 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
00168
00169 static int
00170 vtable_size(const struct vtable *tbl)
00171 {
00172 if (POINTER_P(tbl)) {
00173 return tbl->pos;
00174 }
00175 else {
00176 return 0;
00177 }
00178 }
00179
00180 #define VTBL_DEBUG 0
00181
00182 static struct vtable *
00183 vtable_alloc(struct vtable *prev)
00184 {
00185 struct vtable *tbl = ALLOC(struct vtable);
00186 tbl->pos = 0;
00187 tbl->capa = 8;
00188 tbl->tbl = ALLOC_N(ID, tbl->capa);
00189 tbl->prev = prev;
00190 if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
00191 return tbl;
00192 }
00193
00194 static void
00195 vtable_free(struct vtable *tbl)
00196 {
00197 if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
00198 if (POINTER_P(tbl)) {
00199 if (tbl->tbl) {
00200 xfree(tbl->tbl);
00201 }
00202 xfree(tbl);
00203 }
00204 }
00205
00206 static void
00207 vtable_add(struct vtable *tbl, ID id)
00208 {
00209 if (!POINTER_P(tbl)) {
00210 rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
00211 }
00212 if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id));
00213
00214 if (tbl->pos == tbl->capa) {
00215 tbl->capa = tbl->capa * 2;
00216 REALLOC_N(tbl->tbl, ID, tbl->capa);
00217 }
00218 tbl->tbl[tbl->pos++] = id;
00219 }
00220
00221 static int
00222 vtable_included(const struct vtable * tbl, ID id)
00223 {
00224 int i;
00225
00226 if (POINTER_P(tbl)) {
00227 for (i = 0; i < tbl->pos; i++) {
00228 if (tbl->tbl[i] == id) {
00229 return 1;
00230 }
00231 }
00232 }
00233 return 0;
00234 }
00235
00236
00237 #ifndef RIPPER
00238 typedef struct token_info {
00239 const char *token;
00240 int linenum;
00241 int column;
00242 int nonspc;
00243 struct token_info *next;
00244 } token_info;
00245 #endif
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256 struct parser_params {
00257 int is_ripper;
00258 NODE *heap;
00259
00260 YYSTYPE *parser_yylval;
00261 VALUE eofp;
00262
00263 NODE *parser_lex_strterm;
00264 enum lex_state_e parser_lex_state;
00265 stack_type parser_cond_stack;
00266 stack_type parser_cmdarg_stack;
00267 int parser_class_nest;
00268 int parser_paren_nest;
00269 int parser_lpar_beg;
00270 int parser_in_single;
00271 int parser_in_def;
00272 int parser_compile_for_eval;
00273 VALUE parser_cur_mid;
00274 int parser_in_defined;
00275 char *parser_tokenbuf;
00276 int parser_tokidx;
00277 int parser_toksiz;
00278 VALUE parser_lex_input;
00279 VALUE parser_lex_lastline;
00280 VALUE parser_lex_nextline;
00281 const char *parser_lex_pbeg;
00282 const char *parser_lex_p;
00283 const char *parser_lex_pend;
00284 int parser_heredoc_end;
00285 int parser_command_start;
00286 NODE *parser_deferred_nodes;
00287 long parser_lex_gets_ptr;
00288 VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
00289 struct local_vars *parser_lvtbl;
00290 int parser_ruby__end__seen;
00291 int line_count;
00292 int has_shebang;
00293 char *parser_ruby_sourcefile;
00294 int parser_ruby_sourceline;
00295 rb_encoding *enc;
00296 rb_encoding *utf8;
00297
00298 int parser_yydebug;
00299
00300 #ifndef RIPPER
00301
00302 NODE *parser_eval_tree_begin;
00303 NODE *parser_eval_tree;
00304 VALUE debug_lines;
00305 VALUE coverage;
00306 int nerr;
00307
00308 token_info *parser_token_info;
00309 #else
00310
00311 VALUE parser_ruby_sourcefile_string;
00312 const char *tokp;
00313 VALUE delayed;
00314 int delayed_line;
00315 int delayed_col;
00316
00317 VALUE value;
00318 VALUE result;
00319 VALUE parsing_thread;
00320 int toplevel_p;
00321 #endif
00322 };
00323
00324 #define UTF8_ENC() (parser->utf8 ? parser->utf8 : \
00325 (parser->utf8 = rb_utf8_encoding()))
00326 #define STR_NEW(p,n) rb_enc_str_new((p),(n),parser->enc)
00327 #define STR_NEW0() rb_enc_str_new(0,0,parser->enc)
00328 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),parser->enc)
00329 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),parser->enc)
00330 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
00331 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), parser->enc)
00332
00333 #ifdef YYMALLOC
00334 void *rb_parser_malloc(struct parser_params *, size_t);
00335 void *rb_parser_realloc(struct parser_params *, void *, size_t);
00336 void *rb_parser_calloc(struct parser_params *, size_t, size_t);
00337 void rb_parser_free(struct parser_params *, void *);
00338 #endif
00339
00340 static int parser_yyerror(struct parser_params*, const char*);
00341 #define yyerror(msg) parser_yyerror(parser, msg)
00342
00343 #define YYLEX_PARAM parser
00344
00345 #define lex_strterm (parser->parser_lex_strterm)
00346 #define lex_state (parser->parser_lex_state)
00347 #define cond_stack (parser->parser_cond_stack)
00348 #define cmdarg_stack (parser->parser_cmdarg_stack)
00349 #define class_nest (parser->parser_class_nest)
00350 #define paren_nest (parser->parser_paren_nest)
00351 #define lpar_beg (parser->parser_lpar_beg)
00352 #define in_single (parser->parser_in_single)
00353 #define in_def (parser->parser_in_def)
00354 #define compile_for_eval (parser->parser_compile_for_eval)
00355 #define cur_mid (parser->parser_cur_mid)
00356 #define in_defined (parser->parser_in_defined)
00357 #define tokenbuf (parser->parser_tokenbuf)
00358 #define tokidx (parser->parser_tokidx)
00359 #define toksiz (parser->parser_toksiz)
00360 #define lex_input (parser->parser_lex_input)
00361 #define lex_lastline (parser->parser_lex_lastline)
00362 #define lex_nextline (parser->parser_lex_nextline)
00363 #define lex_pbeg (parser->parser_lex_pbeg)
00364 #define lex_p (parser->parser_lex_p)
00365 #define lex_pend (parser->parser_lex_pend)
00366 #define heredoc_end (parser->parser_heredoc_end)
00367 #define command_start (parser->parser_command_start)
00368 #define deferred_nodes (parser->parser_deferred_nodes)
00369 #define lex_gets_ptr (parser->parser_lex_gets_ptr)
00370 #define lex_gets (parser->parser_lex_gets)
00371 #define lvtbl (parser->parser_lvtbl)
00372 #define ruby__end__seen (parser->parser_ruby__end__seen)
00373 #define ruby_sourceline (parser->parser_ruby_sourceline)
00374 #define ruby_sourcefile (parser->parser_ruby_sourcefile)
00375 #define yydebug (parser->parser_yydebug)
00376 #ifdef RIPPER
00377 #else
00378 #define ruby_eval_tree (parser->parser_eval_tree)
00379 #define ruby_eval_tree_begin (parser->parser_eval_tree_begin)
00380 #define ruby_debug_lines (parser->debug_lines)
00381 #define ruby_coverage (parser->coverage)
00382 #endif
00383
00384 static int yylex(void*, void*);
00385
00386 #ifndef RIPPER
00387 #define yyparse ruby_yyparse
00388
00389 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
00390 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, type, a1, a2, a3)
00391
00392 static NODE *cond_gen(struct parser_params*,NODE*);
00393 #define cond(node) cond_gen(parser, node)
00394 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
00395 #define logop(type,node1,node2) logop_gen(parser, type, node1, node2)
00396
00397 static NODE *newline_node(NODE*);
00398 static void fixpos(NODE*,NODE*);
00399
00400 static int value_expr_gen(struct parser_params*,NODE*);
00401 static void void_expr_gen(struct parser_params*,NODE*);
00402 static NODE *remove_begin(NODE*);
00403 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
00404 #define void_expr0(node) void_expr_gen(parser, (node))
00405 #define void_expr(node) void_expr0((node) = remove_begin(node))
00406 static void void_stmts_gen(struct parser_params*,NODE*);
00407 #define void_stmts(node) void_stmts_gen(parser, node)
00408 static void reduce_nodes_gen(struct parser_params*,NODE**);
00409 #define reduce_nodes(n) reduce_nodes_gen(parser,n)
00410 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
00411 #define block_dup_check(n1,n2) block_dup_check_gen(parser,n1,n2)
00412
00413 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
00414 #define block_append(h,t) block_append_gen(parser,h,t)
00415 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
00416 #define list_append(l,i) list_append_gen(parser,l,i)
00417 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
00418 #define list_concat(h,t) list_concat_gen(parser,h,t)
00419 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
00420 #define arg_append(h,t) arg_append_gen(parser,h,t)
00421 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
00422 #define arg_concat(h,t) arg_concat_gen(parser,h,t)
00423 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
00424 #define literal_concat(h,t) literal_concat_gen(parser,h,t)
00425 static int literal_concat0(struct parser_params *, VALUE, VALUE);
00426 static NODE *new_evstr_gen(struct parser_params*,NODE*);
00427 #define new_evstr(n) new_evstr_gen(parser,n)
00428 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
00429 #define evstr2dstr(n) evstr2dstr_gen(parser,n)
00430 static NODE *splat_array(NODE*);
00431
00432 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
00433 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, recv,id,arg1)
00434 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
00435 #define call_uni_op(recv,id) call_uni_op_gen(parser, recv,id)
00436
00437 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,ID);
00438 #define new_args(f,o,r,p,b) new_args_gen(parser, f,o,r,p,b)
00439
00440 static NODE *negate_lit(NODE*);
00441 static NODE *ret_args_gen(struct parser_params*,NODE*);
00442 #define ret_args(node) ret_args_gen(parser, node)
00443 static NODE *arg_blk_pass(NODE*,NODE*);
00444 static NODE *new_yield_gen(struct parser_params*,NODE*);
00445 #define new_yield(node) new_yield_gen(parser, node)
00446
00447 static NODE *gettable_gen(struct parser_params*,ID);
00448 #define gettable(id) gettable_gen(parser,id)
00449 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
00450 #define assignable(id,node) assignable_gen(parser, id, node)
00451
00452 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
00453 #define aryset(node1,node2) aryset_gen(parser, node1, node2)
00454 static NODE *attrset_gen(struct parser_params*,NODE*,ID);
00455 #define attrset(node,id) attrset_gen(parser, node, id)
00456
00457 static void rb_backref_error_gen(struct parser_params*,NODE*);
00458 #define rb_backref_error(n) rb_backref_error_gen(parser,n)
00459 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
00460 #define node_assign(node1, node2) node_assign_gen(parser, node1, node2)
00461
00462 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
00463 #define match_op(node1,node2) match_op_gen(parser, node1, node2)
00464
00465 static ID *local_tbl_gen(struct parser_params*);
00466 #define local_tbl() local_tbl_gen(parser)
00467
00468 static void fixup_nodes(NODE **);
00469
00470 extern int rb_dvar_defined(ID);
00471 extern int rb_local_defined(ID);
00472 extern int rb_parse_in_eval(void);
00473 extern int rb_parse_in_main(void);
00474
00475 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
00476 #define reg_compile(str,options) reg_compile_gen(parser, str, options)
00477 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
00478 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, str, options)
00479 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
00480 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, str, options)
00481 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
00482 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,regexp,match)
00483
00484 #define get_id(id) (id)
00485 #define get_value(val) (val)
00486 #else
00487 #define remove_begin(node) (node)
00488 #define rb_dvar_defined(id) 0
00489 #define rb_local_defined(id) 0
00490 static ID ripper_get_id(VALUE);
00491 #define get_id(id) ripper_get_id(id)
00492 static VALUE ripper_get_value(VALUE);
00493 #define get_value(val) ripper_get_value(val)
00494 static VALUE assignable_gen(struct parser_params*,VALUE);
00495 #define assignable(lhs,node) assignable_gen(parser, lhs)
00496 #endif
00497
00498 static ID formal_argument_gen(struct parser_params*, ID);
00499 #define formal_argument(id) formal_argument_gen(parser, id)
00500 static ID shadowing_lvar_gen(struct parser_params*,ID);
00501 #define shadowing_lvar(name) shadowing_lvar_gen(parser, name)
00502 static void new_bv_gen(struct parser_params*,ID);
00503 #define new_bv(id) new_bv_gen(parser, id)
00504
00505 static void local_push_gen(struct parser_params*,int);
00506 #define local_push(top) local_push_gen(parser,top)
00507 static void local_pop_gen(struct parser_params*);
00508 #define local_pop() local_pop_gen(parser)
00509 static int local_var_gen(struct parser_params*, ID);
00510 #define local_var(id) local_var_gen(parser, id);
00511 static int arg_var_gen(struct parser_params*, ID);
00512 #define arg_var(id) arg_var_gen(parser, id)
00513 static int local_id_gen(struct parser_params*, ID);
00514 #define local_id(id) local_id_gen(parser, id)
00515 static ID internal_id_gen(struct parser_params*);
00516 #define internal_id() internal_id_gen(parser)
00517
00518 static const struct vtable *dyna_push_gen(struct parser_params *);
00519 #define dyna_push() dyna_push_gen(parser)
00520 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
00521 #define dyna_pop(node) dyna_pop_gen(parser, node)
00522 static int dyna_in_block_gen(struct parser_params*);
00523 #define dyna_in_block() dyna_in_block_gen(parser)
00524 #define dyna_var(id) local_var(id)
00525 static int dvar_defined_gen(struct parser_params*,ID);
00526 #define dvar_defined(id) dvar_defined_gen(parser, id)
00527 static int dvar_curr_gen(struct parser_params*,ID);
00528 #define dvar_curr(id) dvar_curr_gen(parser, id)
00529
00530 static int lvar_defined_gen(struct parser_params*, ID);
00531 #define lvar_defined(id) lvar_defined_gen(parser, id)
00532
00533 #define RE_OPTION_ONCE (1<<16)
00534 #define RE_OPTION_ENCODING_SHIFT 8
00535 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
00536 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
00537 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
00538 #define RE_OPTION_MASK 0xff
00539 #define RE_OPTION_ARG_ENCODING_NONE 32
00540
00541 #define NODE_STRTERM NODE_ZARRAY
00542 #define NODE_HEREDOC NODE_ARRAY
00543 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
00544 #define nd_func u1.id
00545 #if SIZEOF_SHORT == 2
00546 #define nd_term(node) ((signed short)(node)->u2.id)
00547 #else
00548 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
00549 #endif
00550 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
00551 #define nd_nest u3.cnt
00552
00553
00554
00555 #ifdef RIPPER
00556 #define RIPPER_VERSION "0.1.0"
00557
00558 #include "eventids1.c"
00559 #include "eventids2.c"
00560 static ID ripper_id_gets;
00561
00562 static VALUE ripper_dispatch0(struct parser_params*,ID);
00563 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
00564 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
00565 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
00566 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
00567 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
00568
00569 #define dispatch0(n) ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
00570 #define dispatch1(n,a) ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), a)
00571 #define dispatch2(n,a,b) ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), a, b)
00572 #define dispatch3(n,a,b,c) ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), a, b, c)
00573 #define dispatch4(n,a,b,c,d) ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), a, b, c, d)
00574 #define dispatch5(n,a,b,c,d,e) ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), a, b, c, d, e)
00575
00576 #define yyparse ripper_yyparse
00577
00578 #define ripper_intern(s) ID2SYM(rb_intern(s))
00579 static VALUE ripper_id2sym(ID);
00580 #ifdef __GNUC__
00581 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
00582 ID2SYM(id) : ripper_id2sym(id))
00583 #endif
00584
00585 #define arg_new() dispatch0(args_new)
00586 #define arg_add(l,a) dispatch2(args_add, l, a)
00587 #define arg_add_star(l,a) dispatch2(args_add_star, l, a)
00588 #define arg_add_block(l,b) dispatch2(args_add_block, l, b)
00589 #define arg_add_optblock(l,b) ((b)==Qundef? l : dispatch2(args_add_block, l, b))
00590 #define bare_assoc(v) dispatch1(bare_assoc_hash, v)
00591 #define arg_add_assocs(l,b) arg_add(l, bare_assoc(b))
00592
00593 #define args2mrhs(a) dispatch1(mrhs_new_from_args, a)
00594 #define mrhs_new() dispatch0(mrhs_new)
00595 #define mrhs_add(l,a) dispatch2(mrhs_add, l, a)
00596 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, l, a)
00597
00598 #define mlhs_new() dispatch0(mlhs_new)
00599 #define mlhs_add(l,a) dispatch2(mlhs_add, l, a)
00600 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, l, a)
00601
00602 #define params_new(pars, opts, rest, pars2, blk) \
00603 dispatch5(params, pars, opts, rest, pars2, blk)
00604
00605 #define blockvar_new(p,v) dispatch2(block_var, p, v)
00606 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, l, a)
00607 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, l, a)
00608
00609 #define method_optarg(m,a) ((a)==Qundef ? m : dispatch2(method_add_arg,m,a))
00610 #define method_arg(m,a) dispatch2(method_add_arg,m,a)
00611 #define method_add_block(m,b) dispatch2(method_add_block, m, b)
00612
00613 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
00614
00615 #define FIXME 0
00616
00617 #endif
00618
00619 #ifndef RIPPER
00620 # define ifndef_ripper(x) x
00621 #else
00622 # define ifndef_ripper(x)
00623 #endif
00624
00625 #ifndef RIPPER
00626 # define rb_warn0(fmt) rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt)
00627 # define rb_warnI(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt, a)
00628 # define rb_warnS(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt, a)
00629 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, fmt)
00630 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, fmt, a)
00631 #else
00632 # define rb_warn0(fmt) ripper_warn0(parser, fmt)
00633 # define rb_warnI(fmt,a) ripper_warnI(parser, fmt, a)
00634 # define rb_warnS(fmt,a) ripper_warnS(parser, fmt, a)
00635 # define rb_warning0(fmt) ripper_warning0(parser, fmt)
00636 # define rb_warningS(fmt,a) ripper_warningS(parser, fmt, a)
00637 static void ripper_warn0(struct parser_params*, const char*);
00638 static void ripper_warnI(struct parser_params*, const char*, int);
00639 #if 0
00640 static void ripper_warnS(struct parser_params*, const char*, const char*);
00641 #endif
00642 static void ripper_warning0(struct parser_params*, const char*);
00643 static void ripper_warningS(struct parser_params*, const char*, const char*);
00644 #endif
00645
00646 #ifdef RIPPER
00647 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
00648 # define rb_compile_error ripper_compile_error
00649 # define compile_error ripper_compile_error
00650 # define PARSER_ARG parser,
00651 #else
00652 # define compile_error parser->nerr++,rb_compile_error
00653 # define PARSER_ARG ruby_sourcefile, ruby_sourceline,
00654 #endif
00655
00656
00657
00658
00659 #ifdef OLD_YACC
00660 #ifndef YYMAXDEPTH
00661 #define YYMAXDEPTH 10000
00662 #endif
00663 #endif
00664
00665 #ifndef RIPPER
00666 static void token_info_push(struct parser_params*, const char *token);
00667 static void token_info_pop(struct parser_params*, const char *token);
00668 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, token) : (void)0)
00669 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, token) : (void)0)
00670 #else
00671 #define token_info_push(token)
00672 #define token_info_pop(token)
00673 #endif
00674
00675
00676
00677 #line 678 "parse.c"
00678
00679
00680 #ifndef YYDEBUG
00681 # define YYDEBUG 0
00682 #endif
00683
00684
00685 #ifdef YYERROR_VERBOSE
00686 # undef YYERROR_VERBOSE
00687 # define YYERROR_VERBOSE 1
00688 #else
00689 # define YYERROR_VERBOSE 0
00690 #endif
00691
00692
00693 #ifndef YYTOKEN_TABLE
00694 # define YYTOKEN_TABLE 0
00695 #endif
00696
00697
00698
00699 #ifndef YYTOKENTYPE
00700 # define YYTOKENTYPE
00701
00702
00703 enum yytokentype {
00704 keyword_class = 258,
00705 keyword_module = 259,
00706 keyword_def = 260,
00707 keyword_undef = 261,
00708 keyword_begin = 262,
00709 keyword_rescue = 263,
00710 keyword_ensure = 264,
00711 keyword_end = 265,
00712 keyword_if = 266,
00713 keyword_unless = 267,
00714 keyword_then = 268,
00715 keyword_elsif = 269,
00716 keyword_else = 270,
00717 keyword_case = 271,
00718 keyword_when = 272,
00719 keyword_while = 273,
00720 keyword_until = 274,
00721 keyword_for = 275,
00722 keyword_break = 276,
00723 keyword_next = 277,
00724 keyword_redo = 278,
00725 keyword_retry = 279,
00726 keyword_in = 280,
00727 keyword_do = 281,
00728 keyword_do_cond = 282,
00729 keyword_do_block = 283,
00730 keyword_do_LAMBDA = 284,
00731 keyword_return = 285,
00732 keyword_yield = 286,
00733 keyword_super = 287,
00734 keyword_self = 288,
00735 keyword_nil = 289,
00736 keyword_true = 290,
00737 keyword_false = 291,
00738 keyword_and = 292,
00739 keyword_or = 293,
00740 keyword_not = 294,
00741 modifier_if = 295,
00742 modifier_unless = 296,
00743 modifier_while = 297,
00744 modifier_until = 298,
00745 modifier_rescue = 299,
00746 keyword_alias = 300,
00747 keyword_defined = 301,
00748 keyword_BEGIN = 302,
00749 keyword_END = 303,
00750 keyword__LINE__ = 304,
00751 keyword__FILE__ = 305,
00752 keyword__ENCODING__ = 306,
00753 tIDENTIFIER = 307,
00754 tFID = 308,
00755 tGVAR = 309,
00756 tIVAR = 310,
00757 tCONSTANT = 311,
00758 tCVAR = 312,
00759 tLABEL = 313,
00760 tINTEGER = 314,
00761 tFLOAT = 315,
00762 tSTRING_CONTENT = 316,
00763 tCHAR = 317,
00764 tNTH_REF = 318,
00765 tBACK_REF = 319,
00766 tREGEXP_END = 320,
00767 tUPLUS = 321,
00768 tUMINUS = 322,
00769 tPOW = 323,
00770 tCMP = 324,
00771 tEQ = 325,
00772 tEQQ = 326,
00773 tNEQ = 327,
00774 tGEQ = 328,
00775 tLEQ = 329,
00776 tANDOP = 330,
00777 tOROP = 331,
00778 tMATCH = 332,
00779 tNMATCH = 333,
00780 tDOT2 = 334,
00781 tDOT3 = 335,
00782 tAREF = 336,
00783 tASET = 337,
00784 tLSHFT = 338,
00785 tRSHFT = 339,
00786 tCOLON2 = 340,
00787 tCOLON3 = 341,
00788 tOP_ASGN = 342,
00789 tASSOC = 343,
00790 tLPAREN = 344,
00791 tLPAREN_ARG = 345,
00792 tRPAREN = 346,
00793 tLBRACK = 347,
00794 tLBRACE = 348,
00795 tLBRACE_ARG = 349,
00796 tSTAR = 350,
00797 tAMPER = 351,
00798 tLAMBDA = 352,
00799 tSYMBEG = 353,
00800 tSTRING_BEG = 354,
00801 tXSTRING_BEG = 355,
00802 tREGEXP_BEG = 356,
00803 tWORDS_BEG = 357,
00804 tQWORDS_BEG = 358,
00805 tSTRING_DBEG = 359,
00806 tSTRING_DVAR = 360,
00807 tSTRING_END = 361,
00808 tLAMBEG = 362,
00809 tLOWEST = 363,
00810 tUMINUS_NUM = 364,
00811 idNULL = 365,
00812 idRespond_to = 366,
00813 idIFUNC = 367,
00814 idCFUNC = 368,
00815 id_core_set_method_alias = 369,
00816 id_core_set_variable_alias = 370,
00817 id_core_undef_method = 371,
00818 id_core_define_method = 372,
00819 id_core_define_singleton_method = 373,
00820 id_core_set_postexe = 374,
00821 tLAST_TOKEN = 375
00822 };
00823 #endif
00824
00825
00826
00827 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
00828 typedef union YYSTYPE
00829 {
00830
00831
00832 #line 620 "parse.y"
00833
00834 VALUE val;
00835 NODE *node;
00836 ID id;
00837 int num;
00838 const struct vtable *vars;
00839
00840
00841
00842
00843 #line 844 "parse.c"
00844 } YYSTYPE;
00845 # define YYSTYPE_IS_TRIVIAL 1
00846 # define yystype YYSTYPE
00847 # define YYSTYPE_IS_DECLARED 1
00848 #endif
00849
00850
00851
00852
00853
00854
00855 #line 856 "parse.c"
00856
00857 #ifdef short
00858 # undef short
00859 #endif
00860
00861 #ifdef YYTYPE_UINT8
00862 typedef YYTYPE_UINT8 yytype_uint8;
00863 #else
00864 typedef unsigned char yytype_uint8;
00865 #endif
00866
00867 #ifdef YYTYPE_INT8
00868 typedef YYTYPE_INT8 yytype_int8;
00869 #elif (defined __STDC__ || defined __C99__FUNC__ \
00870 || defined __cplusplus || defined _MSC_VER)
00871 typedef signed char yytype_int8;
00872 #else
00873 typedef short int yytype_int8;
00874 #endif
00875
00876 #ifdef YYTYPE_UINT16
00877 typedef YYTYPE_UINT16 yytype_uint16;
00878 #else
00879 typedef unsigned short int yytype_uint16;
00880 #endif
00881
00882 #ifdef YYTYPE_INT16
00883 typedef YYTYPE_INT16 yytype_int16;
00884 #else
00885 typedef short int yytype_int16;
00886 #endif
00887
00888 #ifndef YYSIZE_T
00889 # ifdef __SIZE_TYPE__
00890 # define YYSIZE_T __SIZE_TYPE__
00891 # elif defined size_t
00892 # define YYSIZE_T size_t
00893 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
00894 || defined __cplusplus || defined _MSC_VER)
00895 # include <stddef.h>
00896 # define YYSIZE_T size_t
00897 # else
00898 # define YYSIZE_T unsigned int
00899 # endif
00900 #endif
00901
00902 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
00903
00904 #ifndef YY_
00905 # if defined YYENABLE_NLS && YYENABLE_NLS
00906 # if ENABLE_NLS
00907 # include <libintl.h>
00908 # define YY_(msgid) dgettext ("bison-runtime", msgid)
00909 # endif
00910 # endif
00911 # ifndef YY_
00912 # define YY_(msgid) msgid
00913 # endif
00914 #endif
00915
00916
00917 #if ! defined lint || defined __GNUC__
00918 # define YYUSE(e) ((void) (e))
00919 #else
00920 # define YYUSE(e)
00921 #endif
00922
00923
00924 #ifndef lint
00925 # define YYID(n) (n)
00926 #else
00927 #if (defined __STDC__ || defined __C99__FUNC__ \
00928 || defined __cplusplus || defined _MSC_VER)
00929 static int
00930 YYID (int yyi)
00931 #else
00932 static int
00933 YYID (yyi)
00934 int yyi;
00935 #endif
00936 {
00937 return yyi;
00938 }
00939 #endif
00940
00941 #if ! defined yyoverflow || YYERROR_VERBOSE
00942
00943
00944
00945 # ifdef YYSTACK_USE_ALLOCA
00946 # if YYSTACK_USE_ALLOCA
00947 # ifdef __GNUC__
00948 # define YYSTACK_ALLOC __builtin_alloca
00949 # elif defined __BUILTIN_VA_ARG_INCR
00950 # include <alloca.h>
00951 # elif defined _AIX
00952 # define YYSTACK_ALLOC __alloca
00953 # elif defined _MSC_VER
00954 # include <malloc.h>
00955 # define alloca _alloca
00956 # else
00957 # define YYSTACK_ALLOC alloca
00958 # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00959 || defined __cplusplus || defined _MSC_VER)
00960 # include <stdlib.h>
00961 # ifndef _STDLIB_H
00962 # define _STDLIB_H 1
00963 # endif
00964 # endif
00965 # endif
00966 # endif
00967 # endif
00968
00969 # ifdef YYSTACK_ALLOC
00970
00971 # define YYSTACK_FREE(Ptr) do { ; } while (YYID (0))
00972 # ifndef YYSTACK_ALLOC_MAXIMUM
00973
00974
00975
00976
00977 # define YYSTACK_ALLOC_MAXIMUM 4032
00978 # endif
00979 # else
00980 # define YYSTACK_ALLOC YYMALLOC
00981 # define YYSTACK_FREE YYFREE
00982 # ifndef YYSTACK_ALLOC_MAXIMUM
00983 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
00984 # endif
00985 # if (defined __cplusplus && ! defined _STDLIB_H \
00986 && ! ((defined YYMALLOC || defined malloc) \
00987 && (defined YYFREE || defined free)))
00988 # include <stdlib.h>
00989 # ifndef _STDLIB_H
00990 # define _STDLIB_H 1
00991 # endif
00992 # endif
00993 # ifndef YYMALLOC
00994 # define YYMALLOC malloc
00995 # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00996 || defined __cplusplus || defined _MSC_VER)
00997 void *malloc (YYSIZE_T);
00998 # endif
00999 # endif
01000 # ifndef YYFREE
01001 # define YYFREE free
01002 # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
01003 || defined __cplusplus || defined _MSC_VER)
01004 void free (void *);
01005 # endif
01006 # endif
01007 # endif
01008 #endif
01009
01010
01011 #if (! defined yyoverflow \
01012 && (! defined __cplusplus \
01013 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
01014
01015
01016 union yyalloc
01017 {
01018 yytype_int16 yyss_alloc;
01019 YYSTYPE yyvs_alloc;
01020 };
01021
01022
01023 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
01024
01025
01026
01027 # define YYSTACK_BYTES(N) \
01028 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
01029 + YYSTACK_GAP_MAXIMUM)
01030
01031
01032
01033 # ifndef YYCOPY
01034 # if defined __GNUC__ && 1 < __GNUC__
01035 # define YYCOPY(To, From, Count) \
01036 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
01037 # else
01038 # define YYCOPY(To, From, Count) \
01039 do \
01040 { \
01041 YYSIZE_T yyi; \
01042 for (yyi = 0; yyi < (Count); yyi++) \
01043 (To)[yyi] = (From)[yyi]; \
01044 } \
01045 while (YYID (0))
01046 # endif
01047 # endif
01048
01049
01050
01051
01052
01053
01054 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
01055 do \
01056 { \
01057 YYSIZE_T yynewbytes; \
01058 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
01059 Stack = &yyptr->Stack_alloc; \
01060 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
01061 yyptr += yynewbytes / sizeof (*yyptr); \
01062 } \
01063 while (YYID (0))
01064
01065 #endif
01066
01067
01068 #define YYFINAL 3
01069
01070 #define YYLAST 10410
01071
01072
01073 #define YYNTOKENS 148
01074
01075 #define YYNNTS 172
01076
01077 #define YYNRULES 565
01078
01079 #define YYNSTATES 975
01080
01081
01082 #define YYUNDEFTOK 2
01083 #define YYMAXUTOK 375
01084
01085 #define YYTRANSLATE(YYX) \
01086 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
01087
01088
01089 static const yytype_uint8 yytranslate[] =
01090 {
01091 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01092 147, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01093 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01094 2, 2, 146, 123, 2, 2, 2, 121, 116, 2,
01095 142, 143, 119, 117, 140, 118, 139, 120, 2, 2,
01096 2, 2, 2, 2, 2, 2, 2, 2, 111, 145,
01097 113, 109, 112, 110, 2, 2, 2, 2, 2, 2,
01098 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01099 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01100 2, 138, 2, 144, 115, 2, 141, 2, 2, 2,
01101 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01102 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01103 2, 2, 2, 136, 114, 137, 124, 2, 2, 2,
01104 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01105 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01106 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01107 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01108 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01109 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01110 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01111 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01112 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01113 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01114 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01115 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01116 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
01117 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
01118 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
01119 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
01120 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
01121 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
01122 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
01123 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
01124 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
01125 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
01126 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
01127 105, 106, 107, 108, 122, 125, 126, 127, 128, 129,
01128 130, 131, 132, 133, 134, 135
01129 };
01130
01131 #if YYDEBUG
01132
01133
01134 static const yytype_uint16 yyprhs[] =
01135 {
01136 0, 0, 3, 4, 7, 10, 12, 14, 18, 21,
01137 23, 24, 30, 35, 38, 40, 42, 46, 49, 50,
01138 55, 59, 63, 67, 70, 74, 78, 82, 86, 90,
01139 95, 99, 103, 107, 114, 120, 126, 132, 138, 142,
01140 146, 150, 154, 156, 158, 162, 166, 170, 173, 175,
01141 177, 179, 181, 183, 188, 193, 194, 200, 203, 207,
01142 212, 218, 223, 229, 232, 235, 238, 241, 244, 246,
01143 250, 252, 256, 258, 261, 265, 271, 274, 279, 282,
01144 287, 289, 293, 295, 299, 302, 306, 308, 312, 314,
01145 319, 323, 327, 331, 335, 338, 340, 342, 347, 351,
01146 355, 359, 363, 366, 368, 370, 372, 375, 377, 381,
01147 383, 385, 387, 389, 391, 393, 395, 397, 399, 401,
01148 402, 407, 409, 411, 413, 415, 417, 419, 421, 423,
01149 425, 427, 429, 431, 433, 435, 437, 439, 441, 443,
01150 445, 447, 449, 451, 453, 455, 457, 459, 461, 463,
01151 465, 467, 469, 471, 473, 475, 477, 479, 481, 483,
01152 485, 487, 489, 491, 493, 495, 497, 499, 501, 503,
01153 505, 507, 509, 511, 513, 515, 517, 519, 521, 523,
01154 525, 527, 529, 531, 533, 535, 537, 539, 541, 543,
01155 545, 547, 551, 557, 561, 567, 574, 580, 586, 592,
01156 598, 603, 607, 611, 615, 619, 623, 627, 631, 635,
01157 639, 644, 649, 652, 655, 659, 663, 667, 671, 675,
01158 679, 683, 687, 691, 695, 699, 703, 707, 710, 713,
01159 717, 721, 725, 729, 730, 735, 742, 744, 746, 748,
01160 751, 756, 759, 763, 765, 767, 769, 771, 773, 776,
01161 779, 784, 786, 787, 790, 793, 796, 798, 800, 802,
01162 805, 809, 814, 818, 823, 826, 828, 830, 832, 834,
01163 836, 838, 840, 842, 844, 845, 850, 851, 856, 860,
01164 864, 867, 871, 875, 877, 882, 886, 888, 889, 896,
01165 901, 905, 908, 910, 913, 916, 923, 930, 931, 932,
01166 940, 941, 942, 950, 956, 961, 962, 963, 973, 974,
01167 981, 982, 983, 992, 993, 999, 1000, 1007, 1008, 1009,
01168 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037,
01169 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1058,
01170 1060, 1062, 1064, 1070, 1072, 1075, 1077, 1079, 1081, 1085,
01171 1087, 1091, 1093, 1098, 1105, 1109, 1115, 1118, 1123, 1125,
01172 1129, 1136, 1145, 1150, 1157, 1162, 1165, 1172, 1175, 1180,
01173 1187, 1190, 1195, 1198, 1203, 1205, 1207, 1209, 1213, 1215,
01174 1220, 1222, 1225, 1227, 1231, 1233, 1235, 1236, 1237, 1242,
01175 1247, 1249, 1253, 1257, 1258, 1264, 1267, 1272, 1277, 1280,
01176 1285, 1290, 1294, 1298, 1302, 1305, 1307, 1312, 1313, 1319,
01177 1320, 1326, 1332, 1334, 1336, 1343, 1345, 1347, 1349, 1351,
01178 1354, 1356, 1359, 1361, 1363, 1365, 1367, 1369, 1371, 1373,
01179 1376, 1380, 1384, 1388, 1392, 1396, 1397, 1401, 1403, 1406,
01180 1410, 1414, 1415, 1419, 1420, 1423, 1424, 1427, 1428, 1431,
01181 1433, 1434, 1438, 1439, 1440, 1446, 1448, 1450, 1452, 1454,
01182 1457, 1459, 1461, 1463, 1465, 1469, 1471, 1473, 1476, 1479,
01183 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499,
01184 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1514, 1519, 1522,
01185 1526, 1529, 1536, 1545, 1550, 1557, 1562, 1569, 1572, 1577,
01186 1584, 1587, 1592, 1595, 1600, 1602, 1603, 1605, 1607, 1609,
01187 1611, 1613, 1615, 1617, 1621, 1623, 1627, 1631, 1635, 1637,
01188 1641, 1643, 1647, 1649, 1651, 1654, 1656, 1658, 1660, 1663,
01189 1666, 1668, 1670, 1671, 1676, 1678, 1681, 1683, 1687, 1691,
01190 1694, 1696, 1698, 1700, 1702, 1704, 1706, 1708, 1710, 1712,
01191 1714, 1716, 1718, 1719, 1721, 1722, 1724, 1727, 1730, 1731,
01192 1733, 1735, 1737, 1739, 1741, 1744
01193 };
01194
01195
01196 static const yytype_int16 yyrhs[] =
01197 {
01198 149, 0, -1, -1, 150, 151, -1, 152, 312, -1,
01199 319, -1, 153, -1, 152, 318, 153, -1, 1, 153,
01200 -1, 158, -1, -1, 47, 154, 136, 151, 137, -1,
01201 156, 255, 230, 258, -1, 157, 312, -1, 319, -1,
01202 158, -1, 157, 318, 158, -1, 1, 158, -1, -1,
01203 45, 179, 159, 179, -1, 45, 54, 54, -1, 45,
01204 54, 64, -1, 45, 54, 63, -1, 6, 180, -1,
01205 158, 40, 161, -1, 158, 41, 161, -1, 158, 42,
01206 161, -1, 158, 43, 161, -1, 158, 44, 158, -1,
01207 48, 136, 156, 137, -1, 174, 109, 162, -1, 167,
01208 109, 162, -1, 284, 87, 162, -1, 215, 138, 190,
01209 315, 87, 162, -1, 215, 139, 52, 87, 162, -1,
01210 215, 139, 56, 87, 162, -1, 215, 85, 56, 87,
01211 162, -1, 215, 85, 52, 87, 162, -1, 285, 87,
01212 162, -1, 174, 109, 197, -1, 167, 109, 186, -1,
01213 167, 109, 197, -1, 160, -1, 162, -1, 160, 37,
01214 160, -1, 160, 38, 160, -1, 39, 313, 160, -1,
01215 123, 162, -1, 184, -1, 160, -1, 166, -1, 163,
01216 -1, 248, -1, 248, 139, 309, 192, -1, 248, 85,
01217 309, 192, -1, -1, 94, 165, 236, 156, 137, -1,
01218 308, 192, -1, 308, 192, 164, -1, 215, 139, 309,
01219 192, -1, 215, 139, 309, 192, 164, -1, 215, 85,
01220 309, 192, -1, 215, 85, 309, 192, 164, -1, 32,
01221 192, -1, 31, 192, -1, 30, 191, -1, 21, 191,
01222 -1, 22, 191, -1, 169, -1, 89, 168, 314, -1,
01223 169, -1, 89, 168, 314, -1, 171, -1, 171, 170,
01224 -1, 171, 95, 173, -1, 171, 95, 173, 140, 172,
01225 -1, 171, 95, -1, 171, 95, 140, 172, -1, 95,
01226 173, -1, 95, 173, 140, 172, -1, 95, -1, 95,
01227 140, 172, -1, 173, -1, 89, 168, 314, -1, 170,
01228 140, -1, 171, 170, 140, -1, 170, -1, 172, 140,
01229 170, -1, 282, -1, 215, 138, 190, 315, -1, 215,
01230 139, 52, -1, 215, 85, 52, -1, 215, 139, 56,
01231 -1, 215, 85, 56, -1, 86, 56, -1, 285, -1,
01232 282, -1, 215, 138, 190, 315, -1, 215, 139, 52,
01233 -1, 215, 85, 52, -1, 215, 139, 56, -1, 215,
01234 85, 56, -1, 86, 56, -1, 285, -1, 52, -1,
01235 56, -1, 86, 175, -1, 175, -1, 215, 85, 175,
01236 -1, 52, -1, 56, -1, 53, -1, 182, -1, 183,
01237 -1, 177, -1, 278, -1, 178, -1, 280, -1, 179,
01238 -1, -1, 180, 140, 181, 179, -1, 114, -1, 115,
01239 -1, 116, -1, 69, -1, 70, -1, 71, -1, 77,
01240 -1, 78, -1, 112, -1, 73, -1, 113, -1, 74,
01241 -1, 72, -1, 83, -1, 84, -1, 117, -1, 118,
01242 -1, 119, -1, 95, -1, 120, -1, 121, -1, 68,
01243 -1, 123, -1, 124, -1, 66, -1, 67, -1, 81,
01244 -1, 82, -1, 141, -1, 49, -1, 50, -1, 51,
01245 -1, 47, -1, 48, -1, 45, -1, 37, -1, 7,
01246 -1, 21, -1, 16, -1, 3, -1, 5, -1, 46,
01247 -1, 26, -1, 15, -1, 14, -1, 10, -1, 9,
01248 -1, 36, -1, 20, -1, 25, -1, 4, -1, 22,
01249 -1, 34, -1, 39, -1, 38, -1, 23, -1, 8,
01250 -1, 24, -1, 30, -1, 33, -1, 32, -1, 13,
01251 -1, 35, -1, 6, -1, 17, -1, 31, -1, 11,
01252 -1, 12, -1, 18, -1, 19, -1, 174, 109, 184,
01253 -1, 174, 109, 184, 44, 184, -1, 284, 87, 184,
01254 -1, 284, 87, 184, 44, 184, -1, 215, 138, 190,
01255 315, 87, 184, -1, 215, 139, 52, 87, 184, -1,
01256 215, 139, 56, 87, 184, -1, 215, 85, 52, 87,
01257 184, -1, 215, 85, 56, 87, 184, -1, 86, 56,
01258 87, 184, -1, 285, 87, 184, -1, 184, 79, 184,
01259 -1, 184, 80, 184, -1, 184, 117, 184, -1, 184,
01260 118, 184, -1, 184, 119, 184, -1, 184, 120, 184,
01261 -1, 184, 121, 184, -1, 184, 68, 184, -1, 122,
01262 59, 68, 184, -1, 122, 60, 68, 184, -1, 66,
01263 184, -1, 67, 184, -1, 184, 114, 184, -1, 184,
01264 115, 184, -1, 184, 116, 184, -1, 184, 69, 184,
01265 -1, 184, 112, 184, -1, 184, 73, 184, -1, 184,
01266 113, 184, -1, 184, 74, 184, -1, 184, 70, 184,
01267 -1, 184, 71, 184, -1, 184, 72, 184, -1, 184,
01268 77, 184, -1, 184, 78, 184, -1, 123, 184, -1,
01269 124, 184, -1, 184, 83, 184, -1, 184, 84, 184,
01270 -1, 184, 75, 184, -1, 184, 76, 184, -1, -1,
01271 46, 313, 185, 184, -1, 184, 110, 184, 313, 111,
01272 184, -1, 198, -1, 184, -1, 319, -1, 196, 316,
01273 -1, 196, 140, 306, 316, -1, 306, 316, -1, 142,
01274 190, 314, -1, 319, -1, 188, -1, 319, -1, 191,
01275 -1, 166, -1, 196, 195, -1, 306, 195, -1, 196,
01276 140, 306, 195, -1, 194, -1, -1, 193, 191, -1,
01277 96, 186, -1, 140, 194, -1, 140, -1, 319, -1,
01278 186, -1, 95, 186, -1, 196, 140, 186, -1, 196,
01279 140, 95, 186, -1, 196, 140, 186, -1, 196, 140,
01280 95, 186, -1, 95, 186, -1, 259, -1, 260, -1,
01281 263, -1, 264, -1, 265, -1, 268, -1, 283, -1,
01282 285, -1, 53, -1, -1, 216, 199, 155, 226, -1,
01283 -1, 90, 160, 200, 314, -1, 89, 156, 143, -1,
01284 215, 85, 56, -1, 86, 56, -1, 92, 187, 144,
01285 -1, 93, 305, 137, -1, 30, -1, 31, 142, 191,
01286 314, -1, 31, 142, 314, -1, 31, -1, -1, 46,
01287 313, 142, 201, 160, 314, -1, 39, 142, 160, 314,
01288 -1, 39, 142, 314, -1, 308, 250, -1, 249, -1,
01289 249, 250, -1, 97, 241, -1, 217, 161, 227, 156,
01290 229, 226, -1, 218, 161, 227, 156, 230, 226, -1,
01291 -1, -1, 219, 202, 161, 228, 203, 156, 226, -1,
01292 -1, -1, 220, 204, 161, 228, 205, 156, 226, -1,
01293 221, 161, 312, 253, 226, -1, 221, 312, 253, 226,
01294 -1, -1, -1, 222, 231, 25, 206, 161, 228, 207,
01295 156, 226, -1, -1, 223, 176, 286, 208, 155, 226,
01296 -1, -1, -1, 223, 83, 160, 209, 317, 210, 155,
01297 226, -1, -1, 224, 176, 211, 155, 226, -1, -1,
01298 225, 177, 212, 288, 155, 226, -1, -1, -1, 225,
01299 303, 311, 213, 177, 214, 288, 155, 226, -1, 21,
01300 -1, 22, -1, 23, -1, 24, -1, 198, -1, 7,
01301 -1, 11, -1, 12, -1, 18, -1, 19, -1, 16,
01302 -1, 20, -1, 3, -1, 4, -1, 5, -1, 10,
01303 -1, 317, -1, 13, -1, 317, 13, -1, 317, -1,
01304 27, -1, 230, -1, 14, 161, 227, 156, 229, -1,
01305 319, -1, 15, 156, -1, 174, -1, 167, -1, 291,
01306 -1, 89, 234, 314, -1, 232, -1, 233, 140, 232,
01307 -1, 233, -1, 233, 140, 95, 291, -1, 233, 140,
01308 95, 291, 140, 233, -1, 233, 140, 95, -1, 233,
01309 140, 95, 140, 233, -1, 95, 291, -1, 95, 291,
01310 140, 233, -1, 95, -1, 95, 140, 233, -1, 293,
01311 140, 296, 140, 299, 302, -1, 293, 140, 296, 140,
01312 299, 140, 293, 302, -1, 293, 140, 296, 302, -1,
01313 293, 140, 296, 140, 293, 302, -1, 293, 140, 299,
01314 302, -1, 293, 140, -1, 293, 140, 299, 140, 293,
01315 302, -1, 293, 302, -1, 296, 140, 299, 302, -1,
01316 296, 140, 299, 140, 293, 302, -1, 296, 302, -1,
01317 296, 140, 293, 302, -1, 299, 302, -1, 299, 140,
01318 293, 302, -1, 301, -1, 319, -1, 237, -1, 114,
01319 238, 114, -1, 76, -1, 114, 235, 238, 114, -1,
01320 319, -1, 145, 239, -1, 240, -1, 239, 140, 240,
01321 -1, 52, -1, 290, -1, -1, -1, 242, 243, 244,
01322 245, -1, 142, 289, 238, 314, -1, 289, -1, 107,
01323 156, 137, -1, 29, 156, 10, -1, -1, 28, 247,
01324 236, 156, 10, -1, 166, 246, -1, 248, 139, 309,
01325 189, -1, 248, 85, 309, 189, -1, 308, 188, -1,
01326 215, 139, 309, 189, -1, 215, 85, 309, 188, -1,
01327 215, 85, 310, -1, 215, 139, 188, -1, 215, 85,
01328 188, -1, 32, 188, -1, 32, -1, 215, 138, 190,
01329 315, -1, -1, 136, 251, 236, 156, 137, -1, -1,
01330 26, 252, 236, 156, 10, -1, 17, 196, 227, 156,
01331 254, -1, 230, -1, 253, -1, 8, 256, 257, 227,
01332 156, 255, -1, 319, -1, 186, -1, 197, -1, 319,
01333 -1, 88, 174, -1, 319, -1, 9, 156, -1, 319,
01334 -1, 281, -1, 278, -1, 280, -1, 261, -1, 62,
01335 -1, 262, -1, 261, 262, -1, 99, 270, 106, -1,
01336 100, 271, 106, -1, 101, 272, 65, -1, 102, 146,
01337 106, -1, 102, 266, 106, -1, -1, 266, 267, 146,
01338 -1, 273, -1, 267, 273, -1, 103, 146, 106, -1,
01339 103, 269, 106, -1, -1, 269, 61, 146, -1, -1,
01340 270, 273, -1, -1, 271, 273, -1, -1, 272, 273,
01341 -1, 61, -1, -1, 105, 274, 277, -1, -1, -1,
01342 104, 275, 276, 156, 137, -1, 54, -1, 55, -1,
01343 57, -1, 285, -1, 98, 279, -1, 177, -1, 55,
01344 -1, 54, -1, 57, -1, 98, 271, 106, -1, 59,
01345 -1, 60, -1, 122, 59, -1, 122, 60, -1, 52,
01346 -1, 55, -1, 54, -1, 56, -1, 57, -1, 34,
01347 -1, 33, -1, 35, -1, 36, -1, 50, -1, 49,
01348 -1, 51, -1, 282, -1, 282, -1, 63, -1, 64,
01349 -1, 317, -1, -1, 113, 287, 161, 317, -1, 1,
01350 317, -1, 142, 289, 314, -1, 289, 317, -1, 293,
01351 140, 297, 140, 299, 302, -1, 293, 140, 297, 140,
01352 299, 140, 293, 302, -1, 293, 140, 297, 302, -1,
01353 293, 140, 297, 140, 293, 302, -1, 293, 140, 299,
01354 302, -1, 293, 140, 299, 140, 293, 302, -1, 293,
01355 302, -1, 297, 140, 299, 302, -1, 297, 140, 299,
01356 140, 293, 302, -1, 297, 302, -1, 297, 140, 293,
01357 302, -1, 299, 302, -1, 299, 140, 293, 302, -1,
01358 301, -1, -1, 56, -1, 55, -1, 54, -1, 57,
01359 -1, 290, -1, 52, -1, 291, -1, 89, 234, 314,
01360 -1, 292, -1, 293, 140, 292, -1, 52, 109, 186,
01361 -1, 52, 109, 215, -1, 295, -1, 296, 140, 295,
01362 -1, 294, -1, 297, 140, 294, -1, 119, -1, 95,
01363 -1, 298, 52, -1, 298, -1, 116, -1, 96, -1,
01364 300, 52, -1, 140, 301, -1, 319, -1, 283, -1,
01365 -1, 142, 304, 160, 314, -1, 319, -1, 306, 316,
01366 -1, 307, -1, 306, 140, 307, -1, 186, 88, 186,
01367 -1, 58, 186, -1, 52, -1, 56, -1, 53, -1,
01368 52, -1, 56, -1, 53, -1, 182, -1, 52, -1,
01369 53, -1, 182, -1, 139, -1, 85, -1, -1, 318,
01370 -1, -1, 147, -1, 313, 143, -1, 313, 144, -1,
01371 -1, 147, -1, 140, -1, 145, -1, 147, -1, 317,
01372 -1, 318, 145, -1, -1
01373 };
01374
01375
01376 static const yytype_uint16 yyrline[] =
01377 {
01378 0, 786, 786, 786, 817, 828, 837, 845, 853, 859,
01379 861, 860, 884, 917, 928, 937, 945, 953, 959, 959,
01380 967, 975, 986, 996, 1004, 1013, 1022, 1035, 1048, 1057,
01381 1069, 1078, 1088, 1117, 1138, 1155, 1172, 1177, 1194, 1204,
01382 1213, 1222, 1231, 1234, 1235, 1243, 1251, 1259, 1267, 1270,
01383 1282, 1283, 1286, 1287, 1296, 1308, 1307, 1329, 1338, 1350,
01384 1359, 1371, 1380, 1392, 1401, 1410, 1418, 1426, 1436, 1437,
01385 1447, 1448, 1458, 1466, 1474, 1482, 1491, 1499, 1507, 1515,
01386 1523, 1531, 1541, 1542, 1552, 1560, 1570, 1578, 1588, 1592,
01387 1600, 1608, 1616, 1624, 1636, 1646, 1658, 1667, 1675, 1683,
01388 1691, 1699, 1712, 1725, 1736, 1744, 1747, 1755, 1763, 1773,
01389 1774, 1775, 1776, 1781, 1792, 1793, 1796, 1804, 1807, 1815,
01390 1815, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833,
01391 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843,
01392 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853,
01393 1856, 1856, 1856, 1857, 1857, 1858, 1858, 1858, 1859, 1859,
01394 1859, 1859, 1860, 1860, 1860, 1860, 1861, 1861, 1861, 1862,
01395 1862, 1862, 1862, 1863, 1863, 1863, 1863, 1864, 1864, 1864,
01396 1864, 1865, 1865, 1865, 1865, 1866, 1866, 1866, 1866, 1867,
01397 1867, 1870, 1879, 1889, 1918, 1949, 1975, 1992, 2009, 2026,
01398 2037, 2048, 2059, 2073, 2087, 2095, 2103, 2111, 2119, 2127,
01399 2135, 2144, 2153, 2161, 2169, 2177, 2185, 2193, 2201, 2209,
01400 2217, 2225, 2233, 2241, 2249, 2257, 2268, 2276, 2284, 2292,
01401 2300, 2308, 2316, 2324, 2324, 2334, 2344, 2350, 2362, 2363,
01402 2367, 2375, 2385, 2395, 2396, 2399, 2400, 2403, 2412, 2420,
01403 2430, 2439, 2448, 2448, 2460, 2470, 2474, 2478, 2484, 2492,
01404 2500, 2514, 2530, 2544, 2559, 2569, 2570, 2571, 2572, 2573,
01405 2574, 2575, 2576, 2577, 2586, 2585, 2610, 2610, 2619, 2627,
01406 2635, 2643, 2656, 2664, 2672, 2680, 2688, 2696, 2696, 2706,
01407 2714, 2722, 2733, 2734, 2745, 2749, 2761, 2773, 2773, 2773,
01408 2784, 2784, 2784, 2795, 2806, 2815, 2817, 2814, 2881, 2880,
01409 2902, 2907, 2901, 2926, 2925, 2947, 2946, 2969, 2970, 2969,
01410 2990, 2998, 3006, 3014, 3024, 3036, 3042, 3048, 3054, 3060,
01411 3066, 3072, 3078, 3084, 3090, 3100, 3106, 3111, 3112, 3119,
01412 3124, 3127, 3128, 3141, 3142, 3152, 3153, 3156, 3164, 3174,
01413 3182, 3192, 3200, 3209, 3218, 3226, 3234, 3243, 3255, 3263,
01414 3273, 3281, 3289, 3297, 3305, 3313, 3322, 3330, 3338, 3346,
01415 3354, 3362, 3370, 3378, 3386, 3396, 3397, 3403, 3412, 3421,
01416 3432, 3433, 3443, 3450, 3459, 3467, 3473, 3476, 3473, 3494,
01417 3502, 3512, 3516, 3523, 3522, 3543, 3559, 3568, 3579, 3588,
01418 3598, 3608, 3616, 3627, 3638, 3646, 3654, 3669, 3668, 3688,
01419 3687, 3708, 3720, 3721, 3724, 3743, 3746, 3754, 3762, 3765,
01420 3769, 3772, 3780, 3783, 3784, 3792, 3795, 3812, 3813, 3814,
01421 3824, 3834, 3861, 3926, 3934, 3941, 3948, 3958, 3966, 3976,
01422 3984, 3991, 3998, 4009, 4016, 4027, 4034, 4045, 4052, 4081,
01423 4083, 4082, 4099, 4105, 4098, 4124, 4132, 4140, 4148, 4151,
01424 4162, 4163, 4164, 4165, 4168, 4198, 4199, 4200, 4208, 4218,
01425 4219, 4220, 4221, 4222, 4223, 4224, 4225, 4226, 4227, 4228,
01426 4229, 4232, 4242, 4252, 4253, 4256, 4265, 4264, 4272, 4284,
01427 4294, 4300, 4308, 4316, 4324, 4332, 4340, 4348, 4356, 4364,
01428 4372, 4380, 4388, 4396, 4404, 4413, 4422, 4431, 4440, 4449,
01429 4460, 4461, 4468, 4477, 4496, 4503, 4516, 4528, 4540, 4548,
01430 4564, 4572, 4588, 4589, 4592, 4605, 4616, 4617, 4620, 4637,
01431 4641, 4651, 4661, 4661, 4690, 4691, 4701, 4708, 4718, 4726,
01432 4736, 4737, 4738, 4741, 4742, 4743, 4744, 4747, 4748, 4749,
01433 4752, 4757, 4764, 4765, 4768, 4769, 4772, 4775, 4778, 4779,
01434 4780, 4783, 4784, 4787, 4788, 4792
01435 };
01436 #endif
01437
01438 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
01439
01440
01441 static const char *const yytname[] =
01442 {
01443 "$end", "error", "$undefined", "keyword_class", "keyword_module",
01444 "keyword_def", "keyword_undef", "keyword_begin", "keyword_rescue",
01445 "keyword_ensure", "keyword_end", "keyword_if", "keyword_unless",
01446 "keyword_then", "keyword_elsif", "keyword_else", "keyword_case",
01447 "keyword_when", "keyword_while", "keyword_until", "keyword_for",
01448 "keyword_break", "keyword_next", "keyword_redo", "keyword_retry",
01449 "keyword_in", "keyword_do", "keyword_do_cond", "keyword_do_block",
01450 "keyword_do_LAMBDA", "keyword_return", "keyword_yield", "keyword_super",
01451 "keyword_self", "keyword_nil", "keyword_true", "keyword_false",
01452 "keyword_and", "keyword_or", "keyword_not", "modifier_if",
01453 "modifier_unless", "modifier_while", "modifier_until", "modifier_rescue",
01454 "keyword_alias", "keyword_defined", "keyword_BEGIN", "keyword_END",
01455 "keyword__LINE__", "keyword__FILE__", "keyword__ENCODING__",
01456 "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tCVAR", "tLABEL",
01457 "tINTEGER", "tFLOAT", "tSTRING_CONTENT", "tCHAR", "tNTH_REF",
01458 "tBACK_REF", "tREGEXP_END", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ",
01459 "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH",
01460 "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2",
01461 "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN_ARG", "tRPAREN",
01462 "tLBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tAMPER", "tLAMBDA",
01463 "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG",
01464 "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG",
01465 "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'",
01466 "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "idNULL",
01467 "idRespond_to", "idIFUNC", "idCFUNC", "id_core_set_method_alias",
01468 "id_core_set_variable_alias", "id_core_undef_method",
01469 "id_core_define_method", "id_core_define_singleton_method",
01470 "id_core_set_postexe", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'", "','",
01471 "'`'", "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program",
01472 "$@1", "top_compstmt", "top_stmts", "top_stmt", "$@2", "bodystmt",
01473 "compstmt", "stmts", "stmt", "$@3", "expr", "expr_value", "command_call",
01474 "block_command", "cmd_brace_block", "@4", "command", "mlhs",
01475 "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head", "mlhs_post",
01476 "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", "fitem",
01477 "undef_list", "$@5", "op", "reswords", "arg", "$@6", "arg_value",
01478 "aref_args", "paren_args", "opt_paren_args", "opt_call_args",
01479 "call_args", "command_args", "@7", "block_arg", "opt_block_arg", "args",
01480 "mrhs", "primary", "@8", "$@9", "$@10", "$@11", "$@12", "$@13", "$@14",
01481 "$@15", "$@16", "@17", "@18", "@19", "@20", "@21", "$@22", "$@23",
01482 "primary_value", "k_begin", "k_if", "k_unless", "k_while", "k_until",
01483 "k_case", "k_for", "k_class", "k_module", "k_def", "k_end", "then", "do",
01484 "if_tail", "opt_else", "for_var", "f_marg", "f_marg_list", "f_margs",
01485 "block_param", "opt_block_param", "block_param_def", "opt_bv_decl",
01486 "bv_decls", "bvar", "lambda", "@24", "@25", "f_larglist", "lambda_body",
01487 "do_block", "@26", "block_call", "method_call", "brace_block", "@27",
01488 "@28", "case_body", "cases", "opt_rescue", "exc_list", "exc_var",
01489 "opt_ensure", "literal", "strings", "string", "string1", "xstring",
01490 "regexp", "words", "word_list", "word", "qwords", "qword_list",
01491 "string_contents", "xstring_contents", "regexp_contents",
01492 "string_content", "@29", "@30", "@31", "string_dvar", "symbol", "sym",
01493 "dsym", "numeric", "variable", "var_ref", "var_lhs", "backref",
01494 "superclass", "$@32", "f_arglist", "f_args", "f_bad_arg", "f_norm_arg",
01495 "f_arg_item", "f_arg", "f_opt", "f_block_opt", "f_block_optarg",
01496 "f_optarg", "restarg_mark", "f_rest_arg", "blkarg_mark", "f_block_arg",
01497 "opt_f_block_arg", "singleton", "$@33", "assoc_list", "assocs", "assoc",
01498 "operation", "operation2", "operation3", "dot_or_colon", "opt_terms",
01499 "opt_nl", "rparen", "rbracket", "trailer", "term", "terms", "none", 0
01500 };
01501 #endif
01502
01503 # ifdef YYPRINT
01504
01505
01506 static const yytype_uint16 yytoknum[] =
01507 {
01508 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
01509 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
01510 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
01511 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
01512 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
01513 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
01514 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
01515 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
01516 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
01517 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
01518 355, 356, 357, 358, 359, 360, 361, 362, 363, 61,
01519 63, 58, 62, 60, 124, 94, 38, 43, 45, 42,
01520 47, 37, 364, 33, 126, 365, 366, 367, 368, 369,
01521 370, 371, 372, 373, 374, 375, 123, 125, 91, 46,
01522 44, 96, 40, 41, 93, 59, 32, 10
01523 };
01524 # endif
01525
01526
01527 static const yytype_uint16 yyr1[] =
01528 {
01529 0, 148, 150, 149, 151, 152, 152, 152, 152, 153,
01530 154, 153, 155, 156, 157, 157, 157, 157, 159, 158,
01531 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
01532 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
01533 158, 158, 158, 160, 160, 160, 160, 160, 160, 161,
01534 162, 162, 163, 163, 163, 165, 164, 166, 166, 166,
01535 166, 166, 166, 166, 166, 166, 166, 166, 167, 167,
01536 168, 168, 169, 169, 169, 169, 169, 169, 169, 169,
01537 169, 169, 170, 170, 171, 171, 172, 172, 173, 173,
01538 173, 173, 173, 173, 173, 173, 174, 174, 174, 174,
01539 174, 174, 174, 174, 175, 175, 176, 176, 176, 177,
01540 177, 177, 177, 177, 178, 178, 179, 179, 180, 181,
01541 180, 182, 182, 182, 182, 182, 182, 182, 182, 182,
01542 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
01543 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
01544 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
01545 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
01546 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
01547 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
01548 183, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01549 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01550 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01551 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01552 184, 184, 184, 185, 184, 184, 184, 186, 187, 187,
01553 187, 187, 188, 189, 189, 190, 190, 191, 191, 191,
01554 191, 191, 193, 192, 194, 195, 195, 195, 196, 196,
01555 196, 196, 197, 197, 197, 198, 198, 198, 198, 198,
01556 198, 198, 198, 198, 199, 198, 200, 198, 198, 198,
01557 198, 198, 198, 198, 198, 198, 198, 201, 198, 198,
01558 198, 198, 198, 198, 198, 198, 198, 202, 203, 198,
01559 204, 205, 198, 198, 198, 206, 207, 198, 208, 198,
01560 209, 210, 198, 211, 198, 212, 198, 213, 214, 198,
01561 198, 198, 198, 198, 215, 216, 217, 218, 219, 220,
01562 221, 222, 223, 224, 225, 226, 227, 227, 227, 228,
01563 228, 229, 229, 230, 230, 231, 231, 232, 232, 233,
01564 233, 234, 234, 234, 234, 234, 234, 234, 234, 234,
01565 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
01566 235, 235, 235, 235, 235, 236, 236, 237, 237, 237,
01567 238, 238, 239, 239, 240, 240, 242, 243, 241, 244,
01568 244, 245, 245, 247, 246, 248, 248, 248, 249, 249,
01569 249, 249, 249, 249, 249, 249, 249, 251, 250, 252,
01570 250, 253, 254, 254, 255, 255, 256, 256, 256, 257,
01571 257, 258, 258, 259, 259, 259, 260, 261, 261, 261,
01572 262, 263, 264, 265, 265, 266, 266, 267, 267, 268,
01573 268, 269, 269, 270, 270, 271, 271, 272, 272, 273,
01574 274, 273, 275, 276, 273, 277, 277, 277, 277, 278,
01575 279, 279, 279, 279, 280, 281, 281, 281, 281, 282,
01576 282, 282, 282, 282, 282, 282, 282, 282, 282, 282,
01577 282, 283, 284, 285, 285, 286, 287, 286, 286, 288,
01578 288, 289, 289, 289, 289, 289, 289, 289, 289, 289,
01579 289, 289, 289, 289, 289, 289, 290, 290, 290, 290,
01580 291, 291, 292, 292, 293, 293, 294, 295, 296, 296,
01581 297, 297, 298, 298, 299, 299, 300, 300, 301, 302,
01582 302, 303, 304, 303, 305, 305, 306, 306, 307, 307,
01583 308, 308, 308, 309, 309, 309, 309, 310, 310, 310,
01584 311, 311, 312, 312, 313, 313, 314, 315, 316, 316,
01585 316, 317, 317, 318, 318, 319
01586 };
01587
01588
01589 static const yytype_uint8 yyr2[] =
01590 {
01591 0, 2, 0, 2, 2, 1, 1, 3, 2, 1,
01592 0, 5, 4, 2, 1, 1, 3, 2, 0, 4,
01593 3, 3, 3, 2, 3, 3, 3, 3, 3, 4,
01594 3, 3, 3, 6, 5, 5, 5, 5, 3, 3,
01595 3, 3, 1, 1, 3, 3, 3, 2, 1, 1,
01596 1, 1, 1, 4, 4, 0, 5, 2, 3, 4,
01597 5, 4, 5, 2, 2, 2, 2, 2, 1, 3,
01598 1, 3, 1, 2, 3, 5, 2, 4, 2, 4,
01599 1, 3, 1, 3, 2, 3, 1, 3, 1, 4,
01600 3, 3, 3, 3, 2, 1, 1, 4, 3, 3,
01601 3, 3, 2, 1, 1, 1, 2, 1, 3, 1,
01602 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
01603 4, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01604 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01605 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01606 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01607 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01608 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01609 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01610 1, 3, 5, 3, 5, 6, 5, 5, 5, 5,
01611 4, 3, 3, 3, 3, 3, 3, 3, 3, 3,
01612 4, 4, 2, 2, 3, 3, 3, 3, 3, 3,
01613 3, 3, 3, 3, 3, 3, 3, 2, 2, 3,
01614 3, 3, 3, 0, 4, 6, 1, 1, 1, 2,
01615 4, 2, 3, 1, 1, 1, 1, 1, 2, 2,
01616 4, 1, 0, 2, 2, 2, 1, 1, 1, 2,
01617 3, 4, 3, 4, 2, 1, 1, 1, 1, 1,
01618 1, 1, 1, 1, 0, 4, 0, 4, 3, 3,
01619 2, 3, 3, 1, 4, 3, 1, 0, 6, 4,
01620 3, 2, 1, 2, 2, 6, 6, 0, 0, 7,
01621 0, 0, 7, 5, 4, 0, 0, 9, 0, 6,
01622 0, 0, 8, 0, 5, 0, 6, 0, 0, 9,
01623 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01624 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
01625 1, 1, 5, 1, 2, 1, 1, 1, 3, 1,
01626 3, 1, 4, 6, 3, 5, 2, 4, 1, 3,
01627 6, 8, 4, 6, 4, 2, 6, 2, 4, 6,
01628 2, 4, 2, 4, 1, 1, 1, 3, 1, 4,
01629 1, 2, 1, 3, 1, 1, 0, 0, 4, 4,
01630 1, 3, 3, 0, 5, 2, 4, 4, 2, 4,
01631 4, 3, 3, 3, 2, 1, 4, 0, 5, 0,
01632 5, 5, 1, 1, 6, 1, 1, 1, 1, 2,
01633 1, 2, 1, 1, 1, 1, 1, 1, 1, 2,
01634 3, 3, 3, 3, 3, 0, 3, 1, 2, 3,
01635 3, 0, 3, 0, 2, 0, 2, 0, 2, 1,
01636 0, 3, 0, 0, 5, 1, 1, 1, 1, 2,
01637 1, 1, 1, 1, 3, 1, 1, 2, 2, 1,
01638 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01639 1, 1, 1, 1, 1, 1, 0, 4, 2, 3,
01640 2, 6, 8, 4, 6, 4, 6, 2, 4, 6,
01641 2, 4, 2, 4, 1, 0, 1, 1, 1, 1,
01642 1, 1, 1, 3, 1, 3, 3, 3, 1, 3,
01643 1, 3, 1, 1, 2, 1, 1, 1, 2, 2,
01644 1, 1, 0, 4, 1, 2, 1, 3, 3, 2,
01645 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01646 1, 1, 0, 1, 0, 1, 2, 2, 0, 1,
01647 1, 1, 1, 1, 2, 0
01648 };
01649
01650
01651
01652
01653 static const yytype_uint16 yydefact[] =
01654 {
01655 2, 0, 0, 1, 0, 332, 333, 334, 0, 325,
01656 326, 327, 330, 328, 329, 331, 320, 321, 322, 323,
01657 283, 252, 252, 475, 474, 476, 477, 554, 0, 554,
01658 10, 0, 479, 478, 480, 469, 542, 471, 470, 472,
01659 473, 465, 466, 427, 483, 484, 0, 0, 0, 0,
01660 0, 565, 565, 80, 386, 445, 443, 445, 447, 435,
01661 441, 0, 0, 0, 3, 552, 6, 9, 42, 43,
01662 51, 50, 0, 68, 0, 72, 82, 0, 48, 236,
01663 0, 274, 0, 0, 297, 300, 552, 0, 0, 0,
01664 0, 52, 292, 265, 266, 426, 428, 267, 268, 269,
01665 270, 424, 425, 423, 481, 271, 0, 272, 252, 5,
01666 8, 160, 171, 161, 184, 157, 177, 167, 166, 187,
01667 188, 182, 165, 164, 159, 185, 189, 190, 169, 158,
01668 172, 176, 178, 170, 163, 179, 186, 181, 180, 173,
01669 183, 168, 156, 175, 174, 155, 162, 153, 154, 150,
01670 151, 152, 109, 111, 110, 145, 146, 142, 124, 125,
01671 126, 133, 130, 132, 127, 128, 147, 148, 134, 135,
01672 139, 129, 131, 121, 122, 123, 136, 137, 138, 140,
01673 141, 143, 144, 149, 114, 116, 118, 23, 112, 113,
01674 115, 117, 0, 0, 0, 0, 0, 0, 0, 247,
01675 0, 237, 258, 66, 251, 565, 0, 481, 0, 272,
01676 565, 536, 67, 65, 554, 64, 0, 565, 404, 63,
01677 554, 555, 0, 0, 18, 233, 0, 0, 320, 321,
01678 283, 286, 405, 212, 0, 0, 213, 280, 0, 0,
01679 0, 552, 15, 554, 70, 14, 276, 0, 558, 558,
01680 238, 0, 0, 558, 534, 554, 0, 0, 0, 78,
01681 324, 0, 88, 95, 294, 387, 462, 461, 463, 460,
01682 0, 459, 0, 0, 0, 0, 0, 0, 0, 467,
01683 468, 47, 227, 228, 561, 562, 4, 563, 553, 0,
01684 0, 0, 0, 0, 0, 0, 393, 395, 0, 84,
01685 0, 76, 73, 0, 0, 0, 0, 0, 0, 0,
01686 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
01687 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
01688 0, 565, 0, 0, 49, 0, 0, 0, 0, 552,
01689 0, 553, 0, 346, 345, 0, 0, 481, 272, 104,
01690 105, 0, 0, 107, 0, 0, 481, 272, 313, 180,
01691 173, 183, 168, 150, 151, 152, 109, 110, 532, 315,
01692 531, 0, 0, 0, 409, 407, 293, 429, 0, 0,
01693 398, 57, 291, 119, 539, 280, 259, 254, 0, 0,
01694 256, 248, 257, 0, 565, 0, 0, 0, 256, 249,
01695 554, 0, 285, 253, 554, 246, 245, 554, 290, 46,
01696 20, 22, 21, 0, 287, 0, 0, 0, 0, 0,
01697 0, 17, 554, 278, 13, 553, 69, 554, 281, 560,
01698 559, 239, 560, 241, 282, 535, 0, 94, 467, 468,
01699 86, 81, 0, 0, 565, 0, 505, 449, 452, 450,
01700 464, 446, 430, 444, 431, 432, 448, 433, 434, 0,
01701 437, 439, 0, 440, 0, 0, 564, 7, 24, 25,
01702 26, 27, 28, 44, 45, 565, 0, 31, 40, 0,
01703 41, 554, 0, 74, 85, 30, 191, 258, 39, 209,
01704 217, 222, 223, 224, 219, 221, 231, 232, 225, 226,
01705 202, 203, 229, 230, 554, 218, 220, 214, 215, 216,
01706 204, 205, 206, 207, 208, 543, 548, 544, 549, 403,
01707 252, 401, 554, 543, 545, 544, 546, 402, 252, 0,
01708 565, 337, 0, 336, 0, 0, 0, 0, 0, 0,
01709 280, 0, 565, 0, 305, 310, 104, 105, 106, 0,
01710 486, 308, 485, 0, 565, 0, 0, 0, 505, 551,
01711 550, 317, 543, 544, 252, 252, 565, 565, 32, 193,
01712 38, 201, 55, 58, 0, 191, 538, 0, 260, 255,
01713 565, 547, 544, 554, 543, 544, 537, 284, 556, 242,
01714 289, 19, 0, 234, 0, 29, 0, 565, 200, 71,
01715 16, 277, 558, 0, 79, 91, 93, 554, 543, 544,
01716 511, 508, 507, 506, 509, 0, 523, 527, 526, 522,
01717 505, 0, 390, 510, 512, 514, 565, 520, 565, 525,
01718 565, 0, 504, 453, 0, 436, 438, 442, 210, 211,
01719 378, 565, 0, 376, 375, 264, 0, 83, 77, 0,
01720 0, 0, 0, 0, 400, 61, 0, 406, 0, 0,
01721 244, 399, 59, 243, 335, 275, 565, 565, 415, 565,
01722 338, 565, 340, 298, 339, 301, 0, 0, 304, 547,
01723 279, 554, 543, 544, 0, 0, 488, 0, 0, 104,
01724 105, 108, 554, 0, 554, 505, 0, 0, 0, 397,
01725 54, 396, 53, 0, 0, 0, 565, 120, 261, 250,
01726 0, 0, 406, 0, 0, 554, 11, 240, 87, 89,
01727 0, 511, 0, 358, 349, 351, 554, 347, 565, 0,
01728 0, 388, 0, 497, 530, 0, 500, 524, 0, 502,
01729 528, 0, 455, 456, 457, 451, 458, 511, 0, 565,
01730 0, 565, 518, 565, 565, 374, 380, 0, 0, 262,
01731 75, 192, 0, 37, 198, 36, 199, 62, 557, 0,
01732 34, 196, 35, 197, 60, 416, 417, 565, 418, 0,
01733 565, 343, 0, 0, 341, 0, 0, 0, 303, 0,
01734 0, 406, 0, 311, 0, 0, 406, 314, 533, 554,
01735 0, 490, 318, 0, 0, 194, 0, 0, 288, 516,
01736 554, 0, 356, 0, 513, 554, 0, 0, 515, 565,
01737 565, 529, 565, 521, 565, 565, 0, 0, 384, 381,
01738 382, 385, 0, 377, 365, 367, 0, 370, 0, 372,
01739 394, 263, 235, 33, 195, 0, 0, 420, 344, 0,
01740 12, 422, 0, 295, 296, 0, 0, 260, 565, 306,
01741 0, 487, 309, 489, 316, 505, 410, 408, 0, 348,
01742 359, 0, 354, 350, 389, 392, 391, 0, 493, 0,
01743 495, 0, 501, 0, 498, 503, 454, 0, 517, 0,
01744 379, 565, 565, 565, 519, 565, 565, 0, 419, 0,
01745 96, 103, 0, 421, 0, 299, 302, 412, 413, 411,
01746 0, 0, 0, 56, 0, 357, 0, 352, 565, 565,
01747 565, 565, 280, 0, 383, 0, 362, 0, 364, 371,
01748 0, 368, 373, 102, 0, 565, 0, 565, 565, 0,
01749 312, 0, 355, 0, 494, 0, 491, 496, 499, 547,
01750 279, 565, 565, 565, 565, 547, 101, 554, 543, 544,
01751 414, 342, 307, 319, 353, 565, 363, 0, 360, 366,
01752 369, 406, 492, 565, 361
01753 };
01754
01755
01756 static const yytype_int16 yydefgoto[] =
01757 {
01758 -1, 1, 2, 64, 65, 66, 226, 529, 530, 241,
01759 242, 413, 68, 335, 69, 70, 573, 706, 71, 72,
01760 243, 73, 74, 75, 441, 76, 200, 353, 354, 184,
01761 185, 186, 187, 574, 526, 189, 78, 415, 202, 247,
01762 519, 661, 404, 405, 215, 216, 204, 391, 205, 480,
01763 79, 333, 427, 592, 337, 786, 338, 787, 684, 910,
01764 688, 685, 860, 556, 558, 698, 865, 234, 81, 82,
01765 83, 84, 85, 86, 87, 88, 89, 90, 665, 532,
01766 673, 783, 784, 346, 724, 725, 726, 749, 642, 643,
01767 750, 829, 830, 264, 265, 446, 621, 731, 297, 475,
01768 91, 92, 382, 567, 566, 539, 909, 667, 777, 846,
01769 850, 93, 94, 95, 96, 97, 98, 99, 276, 459,
01770 100, 278, 272, 270, 274, 451, 634, 633, 741, 745,
01771 101, 271, 102, 103, 207, 105, 208, 209, 551, 687,
01772 696, 697, 623, 624, 625, 626, 627, 752, 753, 628,
01773 629, 630, 631, 821, 733, 371, 557, 252, 210, 211,
01774 108, 596, 521, 561, 286, 401, 402, 657, 431, 533,
01775 341, 245
01776 };
01777
01778
01779
01780 #define YYPACT_NINF -778
01781 static const yytype_int16 yypact[] =
01782 {
01783 -778, 133, 2394, -778, 7010, -778, -778, -778, 6523, -778,
01784 -778, -778, -778, -778, -778, -778, 7228, 7228, -778, -778,
01785 7228, 3145, 2722, -778, -778, -778, -778, 164, 6384, -11,
01786 -778, 69, -778, -778, -778, 5623, 2863, -778, -778, 5750,
01787 -778, -778, -778, -778, -778, -778, 8427, 8427, 96, 4342,
01788 8536, 7446, 7773, 6786, -778, 6245, -778, -778, -778, 74,
01789 93, 122, 8645, 8427, -778, 187, -778, 698, 288, -778,
01790 -778, 230, 167, -778, 180, 8754, -778, 234, 2846, 273,
01791 310, -778, 8536, 8536, -778, -778, 4986, 8859, 8964, 9069,
01792 5496, 16, 60, -778, -778, 174, -778, -778, -778, -778,
01793 -778, -778, -778, -778, 201, -778, 258, 282, 206, -778,
01794 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01795 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01796 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01797 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01798 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01799 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01800 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01801 -778, -778, -778, -778, -778, -778, -778, 212, -778, -778,
01802 -778, -778, 215, 8427, 303, 4472, 8427, 8427, 8427, -778,
01803 257, 2846, 285, -778, -778, 281, 343, 38, 337, 263,
01804 290, -778, -778, -778, 4877, -778, 7228, 7228, -778, -778,
01805 5116, -778, 8536, 599, -778, 296, 315, 4602, -778, -778,
01806 -778, 311, 328, -778, 347, 206, 396, 446, 7119, 4342,
01807 329, 187, 698, -11, 370, -778, 288, 339, -30, 30,
01808 -778, 285, 356, 30, -778, -11, 442, 375, 9174, 390,
01809 -778, 351, 373, 383, -778, -778, -778, -778, -778, -778,
01810 515, -778, 552, 587, 620, 397, 607, 407, 34, 473,
01811 474, -778, -778, -778, -778, -778, -778, -778, 5225, 8536,
01812 8536, 8536, 8536, 7119, 8536, 8536, -778, -778, 7882, -778,
01813 4342, 6898, 413, 7882, 8427, 8427, 8427, 8427, 8427, 8427,
01814 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427,
01815 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427,
01816 1712, 7228, 2060, 3517, 288, 80, 80, 8536, 8536, 187,
01817 534, 416, 516, -778, -778, 386, 568, 50, 72, 301,
01818 321, 8536, 363, -778, 66, 393, -778, -778, -778, 36,
01819 41, 103, 224, 259, 266, 322, 348, 369, -778, -778,
01820 -778, 377, 10211, 10211, -778, -778, -778, -778, 8645, 8645,
01821 -778, 483, -778, -778, -778, 268, -778, -778, 8427, 8427,
01822 7337, -778, -778, 2216, 7228, 9441, 8427, 8427, 7555, -778,
01823 -11, 454, -778, -778, -11, -778, -778, 70, -778, -778,
01824 -778, -778, -778, 6523, -778, 8427, 3937, 463, 2216, 9441,
01825 8427, 698, -11, -778, -778, 5353, 462, -11, -778, 7664,
01826 -778, -778, 7773, -778, -778, -778, 296, 411, -778, -778,
01827 -778, 467, 9174, 9518, 7228, 9595, 1033, -778, -778, -778,
01828 -778, -778, -778, -778, -778, -778, -778, -778, -778, 39,
01829 -778, -778, 472, -778, 8427, 8427, -778, -778, -778, -778,
01830 -778, -778, -778, -778, -778, 28, 8427, -778, 468, 487,
01831 -778, -11, 9174, 496, -778, -778, 1576, -778, -778, 396,
01832 1512, 1512, 1512, 1512, 1223, 1223, 1879, 2079, 1512, 1512,
01833 2146, 2146, 582, 582, 2705, 1223, 1223, 1098, 1098, 790,
01834 514, 514, 396, 396, 396, 3286, 5991, 3372, 6105, -778,
01835 328, -778, -11, 448, -778, 451, -778, -778, 3004, 639,
01836 644, -778, 3662, 646, 4082, 42, 42, 534, 7991, 639,
01837 109, 9672, 7228, 9749, -778, 288, -778, 411, -778, 187,
01838 -778, -778, -778, 9826, 7228, 9903, 3517, 8536, 1115, -778,
01839 -778, -778, -778, -778, 1235, 1235, 28, 28, -778, 10270,
01840 -778, 2846, -778, -778, 6523, 10289, -778, 8427, 285, -778,
01841 290, 5877, 2581, -11, 410, 529, -778, -778, -778, -778,
01842 -778, -778, 8536, 2846, 535, -778, 328, 328, 2846, 20,
01843 698, -778, 30, 9174, 467, 338, 271, -11, 228, 261,
01844 557, -778, -778, -778, -778, 666, -778, -778, -778, -778,
01845 923, 43, -778, -778, -778, -778, 543, -778, 544, 623,
01846 547, 642, -778, -778, 722, -778, -778, -778, 396, 396,
01847 -778, 904, 4747, -778, -778, 555, 8100, -778, 467, 9174,
01848 8427, 598, 8645, 8645, -778, 483, 570, 538, 8645, 8645,
01849 -778, -778, 483, -778, -778, -778, 8209, 701, -778, 441,
01850 -778, 701, -778, -778, -778, -778, 639, 31, -778, 110,
01851 132, -11, 126, 144, 8536, 187, -778, 8536, 3517, 338,
01852 271, -778, -11, 639, 70, 923, 3517, 187, 6662, -778,
01853 -778, -778, -778, 4747, 4602, 8427, 28, -778, -778, -778,
01854 8427, 8427, 536, 8427, 8427, 70, -778, -778, -778, 251,
01855 8427, -778, 666, 450, -778, 579, -11, -778, 583, 4747,
01856 4602, -778, 923, -778, -778, 923, -778, -778, 779, -778,
01857 -778, 4602, -778, -778, -778, -778, -778, 625, 809, 583,
01858 615, 595, -778, 604, 605, -778, -778, 740, 8427, 619,
01859 467, 2846, 8427, -778, 2846, -778, 2846, -778, -778, 8645,
01860 -778, 2846, -778, 2846, -778, 468, -778, 675, -778, 4212,
01861 757, -778, 8536, 639, -778, 639, 4747, 4747, -778, 8318,
01862 3807, 147, 42, -778, 187, 639, -778, -778, -778, -11,
01863 639, -778, -778, 759, 630, 2846, 4602, 8427, -778, -778,
01864 -11, 845, 632, 826, -778, -11, 760, 637, -778, 640,
01865 643, -778, 647, -778, 651, 647, 656, 9279, -778, 657,
01866 -778, -778, 682, -778, 1199, -778, 1199, -778, 779, -778,
01867 -778, 658, 2846, -778, 2846, 9384, 80, -778, -778, 4747,
01868 -778, -778, 80, -778, -778, 639, 639, -778, 115, -778,
01869 3517, -778, -778, -778, -778, 1115, -778, -778, 664, -778,
01870 662, 845, 491, -778, -778, -778, -778, 923, -778, 779,
01871 -778, 779, -778, 779, -778, -778, -778, 751, 429, 809,
01872 -778, 672, 673, 647, -778, 679, 647, 765, -778, 432,
01873 373, 383, 3517, -778, 3662, -778, -778, -778, -778, -778,
01874 4747, 639, 3517, -778, 845, 662, 845, 685, 647, 686,
01875 647, 647, -778, 9980, -778, 1199, -778, 779, -778, -778,
01876 779, -778, -778, 411, 10057, 7228, 10134, 644, 441, 639,
01877 -778, 639, 662, 845, -778, 779, -778, -778, -778, 688,
01878 690, 647, 687, 647, 647, 81, 271, -11, 86, 118,
01879 -778, -778, -778, -778, 662, 647, -778, 779, -778, -778,
01880 -778, 124, -778, 647, -778
01881 };
01882
01883
01884 static const yytype_int16 yypgoto[] =
01885 {
01886 -778, -778, -778, 399, -778, 33, -778, -530, -33, -778,
01887 159, -778, 23, -55, 21, -778, -462, -778, -15, 741,
01888 -136, -1, -66, -778, -403, -26, 1181, -306, 750, -52,
01889 -778, -20, -778, -778, 32, -778, 748, -778, 540, -778,
01890 46, -98, -298, 54, 76, -778, -278, -196, -44, -283,
01891 27, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01892 -778, -778, -778, -778, -778, -778, -778, 2, -778, -778,
01893 -778, -778, -778, -778, -778, -778, -778, -778, 298, -323,
01894 -512, -97, -610, -778, -755, -748, 120, -778, -485, -778,
01895 -636, -778, -49, -778, -778, -778, -778, -778, -778, -778,
01896 -778, -778, 752, -778, -778, -520, -778, -92, -778, -778,
01897 -778, -778, -778, -778, 753, -778, -778, -778, -778, -778,
01898 -778, -778, -778, 792, -778, -229, -778, -778, -778, -778,
01899 7, -778, 13, -778, 1031, 762, 1198, 1109, -778, -778,
01900 -12, -416, -706, -549, -667, -121, -679, -777, 25, 128,
01901 -778, -579, -778, -434, 531, -778, -778, -778, -41, -287,
01902 1927, -254, -778, -778, -32, -4, 88, -554, -217, 63,
01903 -31, -2
01904 };
01905
01906
01907
01908
01909
01910 #define YYTABLE_NINF -566
01911 static const yytype_int16 yytable[] =
01912 {
01913 109, 199, 199, 269, 80, 199, 80, 248, 224, 302,
01914 249, 253, 632, 534, 399, 190, 240, 676, 206, 206,
01915 488, 191, 206, 222, 675, 225, 693, 259, 336, 712,
01916 622, 339, 433, 522, 288, 190, 435, 110, 369, 604,
01917 188, 191, 831, 453, 531, 456, 548, 460, 244, 250,
01918 254, 80, 206, 719, 340, 261, 823, 780, 873, 894,
01919 188, 785, 754, 870, 206, 818, 727, 549, 218, 672,
01920 203, 212, 729, 246, 213, -96, 520, 261, 528, 648,
01921 260, 703, 704, 281, 206, 206, 374, 188, 206, 345,
01922 355, 355, 815, 531, -99, 462, 583, -103, 219, -98,
01923 447, 372, 260, 422, 640, 334, 334, 294, 295, 334,
01924 429, 586, 579, 832, 260, 260, 260, 430, 564, 565,
01925 579, -475, 188, 915, 632, -482, -474, 791, 287, -69,
01926 779, -100, 538, 3, -102, -99, 221, -97, 796, 520,
01927 463, 528, 641, 448, 449, 586, 607, -96, 894, 287,
01928 730, -98, 237, 820, 380, 373, 824, -101, 795, 873,
01929 -83, 67, 240, 67, 481, 597, 800, 818, 942, -100,
01930 432, 789, -97, 727, 812, -475, 284, 430, 285, 550,
01931 -474, 279, 280, 831, 381, 635, 632, 284, -476, 285,
01932 -88, 597, 440, 767, 417, 964, 375, 80, 823, 199,
01933 774, 199, 199, 392, 728, 227, 240, 755, 392, 424,
01934 425, 284, -95, 285, 818, 406, 206, 221, 206, 206,
01935 275, 806, 206, -543, 206, 284, -99, 285, -99, 80,
01936 636, -98, 374, -98, 468, 469, 470, 471, 244, 277,
01937 80, 80, -476, 407, 681, 409, 760, 691, 907, -94,
01938 -91, 436, -543, -90, 479, 892, 692, 895, 296, 479,
01939 261, 632, 727, -100, 727, -100, -90, 240, 400, -97,
01940 403, -97, -93, 56, -544, 483, 298, -406, 218, 799,
01941 859, 380, 535, 536, -92, 260, -92, -89, -482, 597,
01942 80, 206, 206, 206, 206, 80, 206, 206, 919, 244,
01943 206, 597, 80, 261, 287, 206, 220, 537, 408, -477,
01944 -96, 221, 334, 334, 334, 334, 199, 473, 474, 477,
01945 299, 467, 727, 917, 485, 294, 295, -540, 260, 406,
01946 911, 426, 284, 206, 285, 80, -406, -90, 908, 206,
01947 206, -88, 375, 303, -479, 378, 952, -541, 217, 580,
01948 397, -478, 383, 206, 790, 420, -279, 220, -324, 385,
01949 334, 334, 518, -477, -547, 727, 388, 727, -90, 379,
01950 -92, -90, -103, 389, 545, -90, 440, -102, 527, 199,
01951 206, 206, 941, 776, 709, 717, -469, -406, 602, -406,
01952 -406, -103, 406, 591, 727, 330, 206, 421, -479, 568,
01953 570, -92, 287, 971, -92, -478, -472, -480, -92, -279,
01954 -279, -324, -324, -544, 109, 546, 440, 552, 80, 547,
01955 190, 390, -95, -547, 396, 518, 191, 80, 393, 199,
01956 398, 632, 418, -469, 438, 439, 443, -540, 414, -469,
01957 -469, 527, 406, -540, 261, 188, 206, 67, 331, 332,
01958 518, 416, 472, 214, -472, 782, 779, -541, -481, -472,
01959 -472, -480, 559, -541, 304, 527, 699, 701, -272, 260,
01960 217, 541, 423, 644, -547, 518, -547, -547, 553, -68,
01961 -543, 394, 395, 428, 261, 394, 419, -469, 587, 444,
01962 445, 527, 589, 434, 677, 590, -280, 713, 437, 669,
01963 651, 671, 721, 457, 611, 612, 613, 614, -472, 260,
01964 599, -481, -481, 461, 923, 601, 560, 934, 656, -98,
01965 751, -272, -272, 902, 542, 543, 663, 199, 668, 904,
01966 442, 554, 555, 420, 80, 658, 80, 718, 659, 199,
01967 406, 464, 465, 721, 206, 611, 612, 613, 614, -280,
01968 -280, 538, 406, 484, 707, -102, 206, -98, 80, 206,
01969 -100, 466, 663, 663, 644, 644, 654, 554, 555, 647,
01970 935, 936, 540, 518, 660, 67, 447, 572, 392, 656,
01971 694, 190, 304, 440, 600, 518, -94, 191, -90, 527,
01972 811, -92, 251, 544, 206, 663, 655, 588, 674, 674,
01973 595, 527, -83, 656, 662, 261, 188, 603, -258, 757,
01974 660, 660, 686, 447, 822, 715, 714, 825, 637, 448,
01975 449, 450, 479, 807, 734, 769, 734, 646, 734, 792,
01976 260, 916, 794, 327, 328, 329, 649, 957, -100, 756,
01977 700, 702, 654, 660, 80, -97, 802, -97, 447, 664,
01978 304, 261, 666, 410, 206, 206, 448, 449, 452, 670,
01979 206, 206, 411, 412, 778, 781, 720, 781, 447, 781,
01980 803, 804, 716, 763, 765, 737, 260, 656, -89, 770,
01981 772, 447, 597, 732, 735, 455, 206, 738, 656, 206,
01982 80, 448, 449, 454, 740, -259, 816, 817, 80, 325,
01983 326, 327, 328, 329, 644, 80, 80, 334, 826, 762,
01984 334, 448, 449, 458, 768, 893, 779, 896, 721, 813,
01985 611, 612, 613, 614, 448, 449, 756, 852, 748, 833,
01986 188, 80, 80, 384, 827, 834, 386, 387, 289, 290,
01987 291, 292, 293, 80, 836, 838, 848, 756, 793, 734,
01988 840, 734, 734, 855, 856, 722, 918, 858, 920, -260,
01989 801, 723, 921, 845, 201, 201, 849, 867, 201, 866,
01990 875, 206, 871, 868, 876, 847, 742, 743, 851, 744,
01991 877, 80, 798, 879, 206, 44, 45, 881, 80, 80,
01992 843, 883, 80, 886, 233, 236, 890, 889, -261, 201,
01993 201, 913, 914, 808, 951, 334, 953, 922, 80, 954,
01994 282, 283, 925, 927, 814, 594, 903, 734, 734, 930,
01995 734, 933, 734, 734, 965, 943, 945, 967, 343, 888,
01996 -543, 721, -544, 611, 612, 613, 614, 678, 478, 358,
01997 924, 961, 810, 487, 376, 960, 973, 899, 377, 273,
01998 0, 80, 370, 912, 260, 674, 781, 861, 304, 891,
01999 819, 828, 80, 611, 612, 613, 614, 0, 615, 937,
02000 0, 938, 260, 317, 318, 617, 0, 939, 721, 0,
02001 611, 612, 613, 614, 0, 0, 0, 863, 0, 734,
02002 734, 734, 0, 734, 734, 618, 0, 721, 869, 611,
02003 612, 613, 614, 874, 80, 0, 80, 325, 326, 327,
02004 328, 329, 80, 0, 80, 722, 734, 734, 734, 734,
02005 199, 872, 0, 0, 0, 0, 0, 0, 0, 576,
02006 578, 0, 0, 406, 722, 668, 781, 206, 251, 0,
02007 0, 201, 0, 0, 201, 201, 282, 0, 0, 734,
02008 734, 734, 734, 656, 0, 518, 747, 0, 611, 612,
02009 613, 614, 201, 734, 201, 201, 518, 0, 0, 578,
02010 0, 734, 251, 0, 788, 610, 0, 611, 612, 613,
02011 614, 0, 527, 0, 0, 0, 0, 0, 0, 0,
02012 0, 797, 0, 615, 0, 0, 0, 0, 0, 616,
02013 617, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02014 0, 0, 615, 0, 0, 0, 645, 0, 616, 617,
02015 618, 0, 0, 619, 0, 0, 0, 0, 0, 0,
02016 0, 0, 0, 104, 0, 104, 0, 0, 0, 618,
02017 0, 0, 619, 0, 0, 0, 201, 0, 0, 748,
02018 0, 486, 489, 490, 491, 492, 493, 494, 495, 496,
02019 497, 498, 499, 500, 501, 502, 503, 504, 505, 506,
02020 507, 508, 509, 510, 511, 512, 513, 514, 487, 201,
02021 104, 853, 0, 854, 262, 610, 0, 611, 612, 613,
02022 614, 0, 0, 862, 0, 0, 0, 0, 864, 0,
02023 0, 0, 0, 0, 0, 0, 262, 0, 0, 0,
02024 0, 107, 0, 107, 0, 0, 0, 708, 347, 356,
02025 356, 356, 615, 0, 0, 0, 569, 571, 616, 617,
02026 0, 0, 0, 0, 0, 0, 575, 201, 201, 0,
02027 0, 0, 201, 0, 569, 571, 201, 0, 0, 618,
02028 0, 0, 619, 905, 906, 0, 0, 0, 107, 736,
02029 0, 739, 263, 593, 0, 0, 304, 610, 598, 611,
02030 612, 613, 614, 0, 0, 620, 0, 201, 0, 0,
02031 201, 317, 318, 77, 263, 77, 759, 0, 0, 0,
02032 0, 0, 201, 0, 0, 0, 348, 357, 357, 0,
02033 106, 0, 106, 0, 615, 0, 775, 0, 0, 940,
02034 616, 617, 638, 639, 324, 325, 326, 327, 328, 329,
02035 0, 0, 0, 0, 201, 0, 104, 0, 0, 0,
02036 77, 618, 0, 0, 619, -565, 0, 962, 0, 963,
02037 0, 0, 0, -565, -565, -565, 0, 106, -565, -565,
02038 -565, 747, -565, 611, 612, 613, 614, 695, 104, 0,
02039 809, 0, -565, 0, 0, 0, 0, 0, 344, 104,
02040 104, 0, -565, -565, 0, -565, -565, -565, -565, -565,
02041 0, 0, 835, 0, 837, 839, 201, 0, 615, 262,
02042 201, 304, 0, 0, 616, 617, 0, 0, 841, 0,
02043 0, 0, 201, 0, 107, 0, 317, 318, 0, 0,
02044 0, 0, 0, 0, 0, 618, 0, 0, 619, 104,
02045 -565, 0, 0, 0, 104, 201, 0, 0, 0, 857,
02046 0, 104, 262, 0, 0, 0, 107, 322, 323, 324,
02047 325, 326, 327, 328, 329, 0, 0, 107, 107, 0,
02048 878, 880, 0, 882, 0, 884, 885, 0, 0, 0,
02049 0, 0, 0, 0, 104, 0, 0, 263, 0, 0,
02050 0, 0, -565, 0, -565, 0, 77, 217, -565, 0,
02051 -565, 0, -565, 0, 0, 0, 0, 0, 0, 0,
02052 0, 0, 0, 106, 201, 0, 0, 107, 761, 0,
02053 764, 766, 107, 0, 0, 0, 771, 773, 77, 107,
02054 263, 0, 0, 0, 201, 0, 0, 0, 0, 77,
02055 77, 0, 926, 928, 929, 106, 931, 932, 0, 0,
02056 0, 0, 0, 0, 0, 0, 106, 106, 0, 0,
02057 0, 0, 107, 0, 0, 0, 0, 104, 0, 944,
02058 946, 947, 948, 805, 0, 0, 104, 0, 764, 766,
02059 0, 771, 773, 0, 0, 0, 0, 0, 201, 77,
02060 0, 0, 0, 262, 77, 0, 0, 0, 0, 0,
02061 0, 77, 966, 968, 969, 970, 106, 0, 0, 0,
02062 0, 106, 0, 0, 0, 0, 972, 0, 106, 0,
02063 0, 0, 0, 0, 974, 0, 201, 0, 0, 0,
02064 842, 0, 0, 262, 77, 0, 0, 844, 0, 0,
02065 0, 0, 0, 0, 0, 107, 0, 0, 0, 0,
02066 0, 106, 0, 0, 107, 0, 0, 201, 0, 0,
02067 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02068 0, 263, 0, 0, 0, 844, 0, 0, 0, 0,
02069 0, 0, 0, 104, 0, 104, 0, 0, 0, 0,
02070 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02071 304, -566, -566, -566, -566, 309, 310, 104, 0, -566,
02072 -566, 263, 0, 0, 0, 317, 318, 77, 0, 0,
02073 0, 0, 0, 0, 0, 0, 77, 0, 0, 0,
02074 0, 0, 0, 0, 106, 0, 0, 0, 0, 0,
02075 650, 0, 0, 106, 320, 321, 322, 323, 324, 325,
02076 326, 327, 328, 329, 262, 0, 0, 0, 0, 0,
02077 0, 107, 0, 107, 304, 305, 306, 307, 308, 309,
02078 310, 311, 312, 313, 314, 315, 316, 0, 0, 317,
02079 318, 0, 0, 0, 0, 107, 0, 0, 0, 0,
02080 0, 0, 0, 104, 0, 0, 0, 0, 0, 0,
02081 262, 0, 0, 201, 0, 0, 319, 0, 320, 321,
02082 322, 323, 324, 325, 326, 327, 328, 329, 0, 0,
02083 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02084 0, 0, 263, 77, 0, 77, -237, 0, 0, 104,
02085 0, 0, 0, 0, 0, 0, 0, 104, 0, 0,
02086 106, 0, 106, 0, 104, 104, 0, 77, 0, 0,
02087 0, 0, 0, 746, 0, 0, 0, 0, 0, 0,
02088 0, 107, 0, 0, 106, 0, 0, 0, 263, 0,
02089 104, 104, 0, 0, 515, 516, 0, 0, 517, 0,
02090 0, 0, 104, 0, 0, 0, 0, 0, 155, 156,
02091 157, 158, 159, 160, 161, 162, 163, 0, 0, 164,
02092 165, 0, 0, 166, 167, 168, 169, 107, 0, 0,
02093 0, 0, 0, 0, 0, 107, 0, 170, 0, 0,
02094 104, 0, 107, 107, 0, 0, 0, 104, 104, 0,
02095 0, 104, 0, 77, 171, 172, 173, 174, 175, 176,
02096 177, 178, 179, 180, 0, 181, 182, 104, 107, 107,
02097 106, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02098 107, 0, 0, 183, 217, 0, 0, 0, 356, 0,
02099 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,
02100 0, 0, 0, 0, 0, 0, 900, 77, 0, 0,
02101 104, 0, 0, 0, 77, 77, 106, 0, 107, 0,
02102 0, 104, 0, 0, 106, 107, 107, 0, 0, 107,
02103 0, 106, 106, 0, 0, 0, 0, 0, 0, 0,
02104 77, 77, 0, 0, 0, 107, 0, 0, 0, 0,
02105 0, 0, 77, 0, 0, 0, 0, 106, 106, 0,
02106 0, 0, 0, 104, 0, 104, 357, 0, 0, 106,
02107 0, 104, 0, 104, 0, 0, 0, 304, 305, 306,
02108 307, 308, 309, 310, 901, 0, 313, 314, 107, 0,
02109 77, 0, 317, 318, 0, 0, 0, 77, 77, 107,
02110 0, 77, 0, 235, 235, 0, 0, 106, 235, 235,
02111 235, 0, 0, 0, 106, 106, 0, 77, 106, 0,
02112 235, 320, 321, 322, 323, 324, 325, 326, 327, 328,
02113 329, 0, 235, 0, 106, 0, 0, 0, 0, 0,
02114 0, 107, 0, 107, 235, 235, 235, 0, 0, 107,
02115 0, 107, 0, 0, 0, 0, 898, 0, 0, 0,
02116 77, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02117 0, 77, 0, 0, 0, 0, 0, 106, 0, 0,
02118 0, 0, 0, 0, 0, 0, 0, 0, 106, 0,
02119 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02120 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02121 0, 0, 0, 77, 0, 77, 0, 0, 0, 0,
02122 0, 77, 0, 77, 0, 0, 0, 0, 0, 0,
02123 106, 0, 106, 0, 0, 0, 0, 0, 106, 0,
02124 106, 0, 523, 524, 0, 0, 525, 0, 0, 0,
02125 235, 0, 0, 235, 235, 235, 155, 156, 157, 158,
02126 159, 160, 161, 162, 163, 0, 0, 164, 165, 0,
02127 0, 166, 167, 168, 169, 0, 0, 304, 305, 306,
02128 307, 308, 309, 310, 311, 170, 313, 314, 0, 0,
02129 0, 0, 317, 318, 0, 0, 0, 0, 0, 0,
02130 0, 0, 171, 172, 173, 174, 175, 176, 177, 178,
02131 179, 180, 0, 181, 182, 235, 0, 0, 0, 0,
02132 0, 320, 321, 322, 323, 324, 325, 326, 327, 328,
02133 329, 183, 217, 0, 0, 0, 0, 0, 0, 0,
02134 0, 0, 0, 0, 304, 305, 306, 307, 308, 309,
02135 310, 311, 312, 313, 314, -566, -566, 0, 235, 317,
02136 318, 235, 235, 235, 235, 235, 235, 235, 235, 235,
02137 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
02138 235, 235, 235, 235, 235, 235, 235, 0, 320, 321,
02139 322, 323, 324, 325, 326, 327, 328, 329, 581, 516,
02140 0, 0, 582, 0, 0, 0, 0, 0, 0, 0,
02141 0, 0, 155, 156, 157, 158, 159, 160, 161, 162,
02142 163, 0, 0, 164, 165, 0, 0, 166, 167, 168,
02143 169, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02144 0, 170, 0, 0, 0, 235, 235, 235, 0, 0,
02145 0, 0, 0, 235, 235, 235, 0, 0, 171, 172,
02146 173, 174, 175, 176, 177, 178, 179, 180, 0, 181,
02147 182, 0, 235, 0, 0, 0, 0, 235, 0, 0,
02148 0, 0, 0, 0, 0, 0, 235, 183, 217, 235,
02149 0, 0, 0, 0, 0, 0, 0, 0, 0, 235,
02150 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02151 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02152 0, 235, 235, 0, -565, 4, 0, 5, 6, 7,
02153 8, 9, 0, 235, 0, 10, 11, 0, 0, 235,
02154 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
02155 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02156 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02157 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
02158 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02159 46, 47, 0, 0, 0, 235, 0, 0, 0, 0,
02160 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02161 48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
02162 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02163 0, 0, 0, 0, 235, 0, 0, 0, 0, 0,
02164 0, 0, 0, 0, 0, 0, 61, 62, 63, 0,
02165 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02166 235, 0, 0, 0, 0, 0, 0, 0, 0, -565,
02167 0, -565, 0, 0, 0, 0, 0, 0, 0, 0,
02168 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02169 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02170 0, 0, 0, 235, 0, 0, 235, 235, 0, 0,
02171 0, -279, 0, 0, 0, 0, 0, 0, 0, -279,
02172 -279, -279, 0, 235, -279, -279, -279, 0, -279, 0,
02173 0, 0, 0, 0, 0, 0, 0, 0, -279, -279,
02174 -279, 0, 0, 0, 0, 0, 0, 0, -279, -279,
02175 0, -279, -279, -279, -279, -279, 0, 0, 0, 0,
02176 0, 0, 235, 0, 0, 0, 0, 235, 235, 0,
02177 235, 235, 0, 0, 0, 0, 0, 235, 0, -279,
02178 -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
02179 -279, -279, 0, 0, -279, -279, -279, 0, 711, -279,
02180 0, 0, 0, 0, 0, -279, 0, 0, 0, 0,
02181 0, 0, 0, 0, 0, 235, 0, 0, -279, 235,
02182 -101, -279, -279, -279, -279, -279, -279, -279, -279, -279,
02183 -279, -279, -279, 0, 0, 0, 0, 0, 0, 0,
02184 0, 0, 0, 0, 0, 0, 235, 0, -279, -279,
02185 -279, -279, -405, 0, -279, -279, -279, 0, -279, 0,
02186 -405, -405, -405, 0, 235, -405, -405, -405, 0, -405,
02187 0, 0, 0, 0, 0, 0, 0, 0, -405, -405,
02188 -405, 0, 0, 0, 235, 0, 0, 0, 0, -405,
02189 -405, 0, -405, -405, -405, -405, -405, 0, 0, 0,
02190 0, 0, 235, 304, 305, 306, 307, 308, 309, 310,
02191 311, 312, 313, 314, 315, 316, 0, 0, 317, 318,
02192 -405, -405, -405, -405, -405, -405, -405, -405, -405, -405,
02193 -405, -405, -405, 0, 0, -405, -405, -405, 0, 0,
02194 -405, 0, 0, 0, 0, 319, -405, 320, 321, 322,
02195 323, 324, 325, 326, 327, 328, 329, 0, 0, 0,
02196 0, 0, -405, 0, -405, -405, -405, -405, -405, -405,
02197 -405, -405, -405, -405, 0, 0, 0, 0, 0, 0,
02198 0, 0, 221, 0, 0, 0, 0, 0, -405, -405,
02199 -405, -405, -405, -273, 217, -405, -405, -405, 0, -405,
02200 0, -273, -273, -273, 0, 0, -273, -273, -273, 0,
02201 -273, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02202 -273, -273, -273, 0, 0, 0, 0, 0, 0, 0,
02203 -273, -273, 0, -273, -273, -273, -273, -273, 0, 0,
02204 0, 0, 0, 0, 304, 305, 306, 307, 308, 309,
02205 310, 311, 312, 313, 314, 315, 316, 0, 0, 317,
02206 318, -273, -273, -273, -273, -273, -273, -273, -273, -273,
02207 -273, -273, -273, -273, 0, 0, -273, -273, -273, 0,
02208 0, -273, 0, 0, 0, 0, 319, -273, 320, 321,
02209 322, 323, 324, 325, 326, 327, 328, 329, 0, 0,
02210 -273, 0, 0, -273, -273, -273, -273, -273, -273, -273,
02211 -273, -273, -273, -273, -273, 0, 0, 0, 0, 0,
02212 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02213 -273, -273, -273, -273, -565, 0, -273, -273, -273, 0,
02214 -273, 0, -565, -565, -565, 0, 0, -565, -565, -565,
02215 0, -565, 0, 0, 0, 0, 0, 0, 0, 0,
02216 -565, -565, -565, 0, 0, 0, 0, 0, 0, 0,
02217 0, -565, -565, 0, -565, -565, -565, -565, -565, 0,
02218 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02219 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02220 0, 0, -565, -565, -565, -565, -565, -565, -565, -565,
02221 -565, -565, -565, -565, -565, 0, 0, -565, -565, -565,
02222 0, 0, -565, 0, 0, 0, 0, 0, -565, 0,
02223 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02224 0, 0, 0, 0, -565, 0, -565, -565, -565, -565,
02225 -565, -565, -565, -565, -565, -565, 0, 0, 0, 0,
02226 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02227 -565, -565, -565, -565, -565, -286, 217, -565, -565, -565,
02228 0, -565, 0, -286, -286, -286, 0, 0, -286, -286,
02229 -286, 0, -286, 0, 0, 0, 0, 0, 0, 0,
02230 0, 0, -286, -286, 0, 0, 0, 0, 0, 0,
02231 0, 0, -286, -286, 0, -286, -286, -286, -286, -286,
02232 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02233 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02234 0, 0, 0, -286, -286, -286, -286, -286, -286, -286,
02235 -286, -286, -286, -286, -286, -286, 0, 0, -286, -286,
02236 -286, 0, 0, -286, 0, 0, 0, 0, 0, -286,
02237 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02238 0, 0, 0, 0, 0, -286, 0, -286, -286, -286,
02239 -286, -286, -286, -286, -286, -286, -286, 0, 0, 0,
02240 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02241 0, 0, -286, -286, -286, -286, -547, 214, -286, -286,
02242 -286, 0, -286, 0, -547, -547, -547, 0, 0, 0,
02243 -547, -547, 0, -547, 0, 0, 0, 0, 0, 0,
02244 0, 0, -547, 0, 0, 0, 0, 0, 0, 0,
02245 0, 0, 0, -547, -547, 0, -547, -547, -547, -547,
02246 -547, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02247 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02248 0, 0, 0, 0, -547, -547, -547, -547, -547, -547,
02249 -547, -547, -547, -547, -547, -547, -547, 0, 0, -547,
02250 -547, -547, -279, 652, 0, 0, 0, 0, 0, 0,
02251 -279, -279, -279, 0, 0, 0, -279, -279, 0, -279,
02252 0, 0, 0, 0, 0, -99, -547, 0, -547, -547,
02253 -547, -547, -547, -547, -547, -547, -547, -547, 0, -279,
02254 -279, 0, -279, -279, -279, -279, -279, 0, 0, 0,
02255 0, 0, -547, -547, -547, -547, -91, 0, 0, -547,
02256 0, -547, 0, -547, 0, 0, 0, 0, 0, 0,
02257 -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
02258 -279, -279, -279, 0, 0, -279, -279, -279, 0, 653,
02259 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02260 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02261 0, -101, -279, 0, -279, -279, -279, -279, -279, -279,
02262 -279, -279, -279, -279, 0, 0, 0, 0, 0, 0,
02263 0, 0, 0, 0, 0, 0, 0, 0, 0, -279,
02264 -279, -279, -93, 0, 0, -279, 0, -279, 238, -279,
02265 5, 6, 7, 8, 9, -565, -565, -565, 10, 11,
02266 0, 0, -565, 12, 0, 13, 14, 15, 16, 17,
02267 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02268 23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
02269 0, 0, 28, 29, 0, 31, 32, 33, 34, 35,
02270 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02271 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02272 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02273 0, 0, 0, 48, 0, 0, 49, 50, 0, 51,
02274 52, 0, 53, 0, 54, 55, 56, 57, 58, 59,
02275 60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02276 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
02277 62, 63, 0, 0, 0, 0, 0, 0, 0, 0,
02278 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02279 0, 0, -565, 238, -565, 5, 6, 7, 8, 9,
02280 0, 0, -565, 10, 11, 0, -565, -565, 12, 0,
02281 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02282 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02283 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02284 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02285 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02286 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02287 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02288 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02289 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02290 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02291 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02293 0, 0, 0, 0, 0, 0, 0, -565, 238, -565,
02294 5, 6, 7, 8, 9, 0, 0, -565, 10, 11,
02295 0, 0, -565, 12, -565, 13, 14, 15, 16, 17,
02296 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02297 23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
02298 0, 0, 28, 29, 0, 31, 32, 33, 34, 35,
02299 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02300 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02301 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02302 0, 0, 0, 48, 0, 0, 49, 50, 0, 51,
02303 52, 0, 53, 0, 54, 55, 56, 57, 58, 59,
02304 60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02305 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
02306 62, 63, 0, 0, 0, 0, 0, 0, 4, 0,
02307 5, 6, 7, 8, 9, 0, 0, 0, 10, 11,
02308 0, 0, -565, 12, -565, 13, 14, 15, 16, 17,
02309 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02310 23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
02311 0, 0, 28, 29, 30, 31, 32, 33, 34, 35,
02312 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02313 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02314 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02315 0, 0, 0, 48, 0, 0, 49, 50, 0, 51,
02316 52, 0, 53, 0, 54, 55, 56, 57, 58, 59,
02317 60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02318 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
02319 62, 63, 0, 0, 0, 0, 0, 0, 0, 0,
02320 0, 0, 0, 0, -565, 0, 0, 0, 0, 0,
02321 0, 0, -565, 238, -565, 5, 6, 7, 8, 9,
02322 0, 0, -565, 10, 11, 0, 0, -565, 12, 0,
02323 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02324 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02325 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02326 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02327 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02328 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02329 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02330 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02331 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02332 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02333 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02334 0, 0, 0, 238, 0, 5, 6, 7, 8, 9,
02335 0, -565, -565, 10, 11, 0, 0, -565, 12, -565,
02336 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02337 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02338 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02339 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02340 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02341 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02342 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02343 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02344 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02345 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02346 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02347 0, 0, 0, 238, 0, 5, 6, 7, 8, 9,
02348 0, 0, 0, 10, 11, 0, 0, -565, 12, -565,
02349 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02350 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02351 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02352 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02353 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02354 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02355 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02356 0, 239, 50, 0, 51, 52, 0, 53, 0, 54,
02357 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02358 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02359 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02360 0, 0, 0, 238, 0, 5, 6, 7, 8, 9,
02361 0, 0, 0, 10, 11, -565, 0, -565, 12, -565,
02362 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02363 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02364 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02365 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02366 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02367 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02368 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02369 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02370 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02371 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02372 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02373 0, 0, 0, 238, 0, 5, 6, 7, 8, 9,
02374 0, 0, 0, 10, 11, -565, 0, -565, 12, -565,
02375 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02376 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02377 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02378 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02379 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02380 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02381 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02382 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02383 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02384 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02385 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02386 0, 0, 0, 0, 0, 0, 0, 0, 0, -565,
02387 0, 0, 0, 0, 0, 0, 0, -565, 238, -565,
02388 5, 6, 7, 8, 9, 0, 0, -565, 10, 11,
02389 0, 0, 0, 12, 0, 13, 14, 15, 16, 17,
02390 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02391 23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
02392 0, 0, 28, 29, 0, 31, 32, 33, 34, 35,
02393 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02394 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02395 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02396 0, 0, 0, 48, 0, 0, 49, 50, 0, 51,
02397 52, 0, 53, 0, 54, 55, 56, 57, 58, 59,
02398 60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02399 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
02400 62, 63, 0, 0, 0, 0, 0, 0, 0, 0,
02401 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
02402 0, 0, -565, 12, -565, 13, 14, 15, 16, 17,
02403 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02404 23, 24, 25, 26, 0, 0, 192, 0, 0, 0,
02405 0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
02406 36, 37, 38, 39, 40, 193, 41, 42, 0, 43,
02407 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02408 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02409 0, 0, 0, 194, 0, 0, 195, 50, 0, 51,
02410 52, 0, 196, 197, 54, 55, 56, 57, 58, 59,
02411 60, 0, 0, 0, 0, 0, 0, 0, 0, 5,
02412 6, 7, 0, 9, 0, 0, 0, 10, 11, 61,
02413 198, 63, 12, 0, 13, 14, 15, 16, 17, 18,
02414 19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
02415 24, 25, 26, 0, 221, 27, 0, 0, 0, 0,
02416 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
02417 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02418 45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
02419 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02420 0, 0, 194, 0, 0, 195, 50, 0, 51, 52,
02421 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02422 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02423 0, 0, 0, 0, 0, 0, 0, 0, 61, 62,
02424 63, 0, 0, 0, 0, 0, 0, 0, 0, 5,
02425 6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
02426 0, 284, 12, 285, 13, 14, 15, 16, 17, 18,
02427 19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
02428 24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
02429 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
02430 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02431 45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
02432 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02433 0, 0, 194, 0, 0, 195, 50, 0, 51, 52,
02434 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02435 0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
02436 7, 8, 9, 0, 0, 0, 10, 11, 61, 62,
02437 63, 12, 0, 13, 14, 15, 16, 17, 18, 19,
02438 0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
02439 25, 26, 0, 221, 27, 0, 0, 0, 0, 0,
02440 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
02441 38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
02442 0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
02443 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02444 0, 48, 0, 0, 49, 50, 0, 51, 52, 0,
02445 53, 0, 54, 55, 56, 57, 58, 59, 60, 0,
02446 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02447 0, 0, 0, 0, 0, 0, 0, 61, 62, 63,
02448 0, 0, 0, 0, 0, 0, 5, 6, 7, 8,
02449 9, 0, 0, 0, 10, 11, 0, 0, 0, 12,
02450 466, 13, 14, 15, 16, 17, 18, 19, 0, 0,
02451 0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
02452 0, 0, 27, 0, 0, 0, 0, 0, 28, 29,
02453 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
02454 40, 0, 41, 42, 0, 43, 44, 45, 0, 46,
02455 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02456 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
02457 0, 0, 49, 50, 0, 51, 52, 0, 53, 0,
02458 54, 55, 56, 57, 58, 59, 60, 0, 0, 0,
02459 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02460 0, 0, 0, 0, 0, 61, 62, 63, 0, 0,
02461 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02462 0, 0, 0, 0, 0, 0, 0, 0, 466, 111,
02463 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
02464 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
02465 132, 133, 134, 0, 0, 0, 135, 136, 137, 359,
02466 360, 361, 362, 142, 143, 144, 0, 0, 0, 0,
02467 0, 145, 146, 147, 148, 363, 364, 365, 366, 153,
02468 37, 38, 367, 40, 0, 0, 0, 0, 0, 0,
02469 0, 0, 155, 156, 157, 158, 159, 160, 161, 162,
02470 163, 0, 0, 164, 165, 0, 0, 166, 167, 168,
02471 169, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02472 0, 170, 0, 0, 0, 0, 0, 0, 0, 0,
02473 0, 0, 0, 0, 0, 0, 0, 0, 171, 172,
02474 173, 174, 175, 176, 177, 178, 179, 180, 0, 181,
02475 182, 0, 0, 0, 0, 0, -540, -540, -540, 0,
02476 -540, 0, 0, 0, -540, -540, 0, 183, 368, -540,
02477 0, -540, -540, -540, -540, -540, -540, -540, 0, -540,
02478 0, 0, 0, -540, -540, -540, -540, -540, -540, -540,
02479 0, 0, -540, 0, 0, 0, 0, 0, 0, -540,
02480 0, 0, -540, -540, -540, -540, -540, -540, -540, -540,
02481 -540, -540, -540, -540, 0, -540, -540, -540, 0, -540,
02482 -540, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02483 0, 0, 0, 0, 0, 0, 0, 0, 0, -540,
02484 0, 0, -540, -540, 0, -540, -540, 0, -540, -540,
02485 -540, -540, -540, -540, -540, -540, -540, 0, 0, 0,
02486 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02487 0, 0, 0, 0, 0, -540, -540, -540, 0, 0,
02488 0, 0, 0, -541, -541, -541, 0, -541, 0, -540,
02489 0, -541, -541, 0, 0, -540, -541, 0, -541, -541,
02490 -541, -541, -541, -541, -541, 0, -541, 0, 0, 0,
02491 -541, -541, -541, -541, -541, -541, -541, 0, 0, -541,
02492 0, 0, 0, 0, 0, 0, -541, 0, 0, -541,
02493 -541, -541, -541, -541, -541, -541, -541, -541, -541, -541,
02494 -541, 0, -541, -541, -541, 0, -541, -541, 0, 0,
02495 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02496 0, 0, 0, 0, 0, 0, -541, 0, 0, -541,
02497 -541, 0, -541, -541, 0, -541, -541, -541, -541, -541,
02498 -541, -541, -541, -541, 0, 0, 0, 0, 0, 0,
02499 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02500 0, 0, -541, -541, -541, 0, 0, 0, 0, 0,
02501 -543, -543, -543, 0, -543, 0, -541, 0, -543, -543,
02502 0, 0, -541, -543, 0, -543, -543, -543, -543, -543,
02503 -543, -543, 0, 0, 0, 0, 0, -543, -543, -543,
02504 -543, -543, -543, -543, 0, 0, -543, 0, 0, 0,
02505 0, 0, 0, -543, 0, 0, -543, -543, -543, -543,
02506 -543, -543, -543, -543, -543, -543, -543, -543, 0, -543,
02507 -543, -543, 0, -543, -543, 0, 0, 0, 0, 0,
02508 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02509 0, 0, 0, -543, 710, 0, -543, -543, 0, -543,
02510 -543, 0, -543, -543, -543, -543, -543, -543, -543, -543,
02511 -543, 0, 0, 0, 0, 0, -99, 0, 0, 0,
02512 0, 0, 0, 0, -545, -545, -545, 0, -545, -543,
02513 -543, -543, -545, -545, 0, 0, 0, -545, 0, -545,
02514 -545, -545, -545, -545, -545, -545, 0, 0, 0, -543,
02515 0, -545, -545, -545, -545, -545, -545, -545, 0, 0,
02516 -545, 0, 0, 0, 0, 0, 0, -545, 0, 0,
02517 -545, -545, -545, -545, -545, -545, -545, -545, -545, -545,
02518 -545, -545, 0, -545, -545, -545, 0, -545, -545, 0,
02519 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02520 0, 0, 0, 0, 0, 0, 0, -545, 0, 0,
02521 -545, -545, 0, -545, -545, 0, -545, -545, -545, -545,
02522 -545, -545, -545, -545, -545, 0, 0, 0, 0, 0,
02523 0, 0, 0, 0, 0, 0, 0, 0, -546, -546,
02524 -546, 0, -546, -545, -545, -545, -546, -546, 0, 0,
02525 0, -546, 0, -546, -546, -546, -546, -546, -546, -546,
02526 0, 0, 0, -545, 0, -546, -546, -546, -546, -546,
02527 -546, -546, 0, 0, -546, 0, 0, 0, 0, 0,
02528 0, -546, 0, 0, -546, -546, -546, -546, -546, -546,
02529 -546, -546, -546, -546, -546, -546, 0, -546, -546, -546,
02530 0, -546, -546, 0, 0, 0, 0, 0, 0, 0,
02531 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02532 0, -546, 0, 0, -546, -546, 0, -546, -546, 0,
02533 -546, -546, -546, -546, -546, -546, -546, -546, -546, 0,
02534 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02535 0, 0, 0, 0, 0, 0, 0, -546, -546, -546,
02536 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02537 0, 0, 0, 0, 0, 0, 0, -546, 111, 112,
02538 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
02539 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
02540 133, 134, 0, 0, 0, 135, 136, 137, 138, 139,
02541 140, 141, 142, 143, 144, 0, 0, 0, 0, 0,
02542 145, 146, 147, 148, 149, 150, 151, 152, 153, 266,
02543 267, 154, 268, 0, 0, 0, 0, 0, 0, 0,
02544 0, 155, 156, 157, 158, 159, 160, 161, 162, 163,
02545 0, 0, 164, 165, 0, 0, 166, 167, 168, 169,
02546 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02547 170, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02548 0, 0, 0, 0, 0, 0, 0, 171, 172, 173,
02549 174, 175, 176, 177, 178, 179, 180, 0, 181, 182,
02550 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02551 0, 0, 0, 0, 0, 0, 183, 111, 112, 113,
02552 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
02553 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
02554 134, 0, 0, 0, 135, 136, 137, 138, 139, 140,
02555 141, 142, 143, 144, 0, 0, 0, 0, 0, 145,
02556 146, 147, 148, 149, 150, 151, 152, 153, 223, 0,
02557 154, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02558 155, 156, 157, 158, 159, 160, 161, 162, 163, 0,
02559 0, 164, 165, 0, 0, 166, 167, 168, 169, 0,
02560 0, 0, 0, 0, 0, 0, 0, 0, 0, 170,
02561 0, 0, 55, 0, 0, 0, 0, 0, 0, 0,
02562 0, 0, 0, 0, 0, 0, 171, 172, 173, 174,
02563 175, 176, 177, 178, 179, 180, 0, 181, 182, 0,
02564 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02565 0, 0, 0, 0, 0, 183, 111, 112, 113, 114,
02566 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
02567 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
02568 0, 0, 0, 135, 136, 137, 138, 139, 140, 141,
02569 142, 143, 144, 0, 0, 0, 0, 0, 145, 146,
02570 147, 148, 149, 150, 151, 152, 153, 0, 0, 154,
02571 0, 0, 0, 0, 0, 0, 0, 0, 0, 155,
02572 156, 157, 158, 159, 160, 161, 162, 163, 0, 0,
02573 164, 165, 0, 0, 166, 167, 168, 169, 0, 0,
02574 0, 0, 0, 0, 0, 0, 0, 0, 170, 0,
02575 0, 55, 0, 0, 0, 0, 0, 0, 0, 0,
02576 0, 0, 0, 0, 0, 171, 172, 173, 174, 175,
02577 176, 177, 178, 179, 180, 0, 181, 182, 0, 0,
02578 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02579 0, 0, 0, 0, 183, 111, 112, 113, 114, 115,
02580 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
02581 126, 127, 128, 129, 130, 131, 132, 133, 134, 0,
02582 0, 0, 135, 136, 137, 138, 139, 140, 141, 142,
02583 143, 144, 0, 0, 0, 0, 0, 145, 146, 147,
02584 148, 149, 150, 151, 152, 153, 0, 0, 154, 0,
02585 0, 0, 0, 0, 0, 0, 0, 0, 155, 156,
02586 157, 158, 159, 160, 161, 162, 163, 0, 0, 164,
02587 165, 0, 0, 166, 167, 168, 169, 0, 0, 0,
02588 0, 0, 0, 0, 0, 0, 0, 170, 0, 0,
02589 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02590 0, 0, 0, 0, 171, 172, 173, 174, 175, 176,
02591 177, 178, 179, 180, 0, 181, 182, 0, 0, 5,
02592 6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
02593 0, 0, 12, 183, 13, 14, 15, 228, 229, 18,
02594 19, 0, 0, 0, 0, 0, 230, 231, 232, 23,
02595 24, 25, 26, 0, 0, 192, 0, 0, 0, 0,
02596 0, 0, 255, 0, 0, 32, 33, 34, 35, 36,
02597 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02598 45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02599 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02600 0, 0, 256, 0, 0, 195, 50, 0, 51, 52,
02601 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02602 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02603 0, 5, 6, 7, 0, 9, 0, 0, 257, 10,
02604 11, 0, 0, 0, 12, 0, 13, 14, 15, 228,
02605 229, 18, 19, 0, 0, 0, 258, 0, 230, 231,
02606 232, 23, 24, 25, 26, 0, 0, 192, 0, 0,
02607 0, 0, 0, 0, 255, 0, 0, 32, 33, 34,
02608 35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
02609 43, 44, 45, 0, 0, 0, 0, 0, 0, 0,
02610 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02611 0, 0, 0, 0, 256, 0, 0, 195, 50, 0,
02612 51, 52, 0, 0, 0, 54, 55, 56, 57, 58,
02613 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02614 0, 0, 0, 5, 6, 7, 8, 9, 0, 0,
02615 257, 10, 11, 0, 0, 0, 12, 0, 13, 14,
02616 15, 16, 17, 18, 19, 0, 0, 0, 482, 0,
02617 20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
02618 0, 0, 0, 0, 0, 28, 29, 30, 31, 32,
02619 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
02620 42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
02621 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02622 0, 0, 0, 0, 0, 0, 48, 0, 0, 49,
02623 50, 0, 51, 52, 0, 53, 0, 54, 55, 56,
02624 57, 58, 59, 60, 0, 0, 0, 0, 0, 0,
02625 0, 0, 5, 6, 7, 8, 9, 0, 0, 0,
02626 10, 11, 61, 62, 63, 12, 0, 13, 14, 15,
02627 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
02628 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
02629 0, 0, 0, 0, 28, 29, 0, 31, 32, 33,
02630 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02631 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02632 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02633 0, 0, 0, 0, 0, 48, 0, 0, 49, 50,
02634 0, 51, 52, 0, 53, 0, 54, 55, 56, 57,
02635 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02636 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
02637 11, 61, 62, 63, 12, 0, 13, 14, 15, 16,
02638 17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
02639 22, 23, 24, 25, 26, 0, 0, 192, 0, 0,
02640 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
02641 35, 36, 37, 38, 39, 40, 193, 41, 42, 0,
02642 43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
02643 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02644 0, 0, 0, 0, 194, 0, 0, 195, 50, 0,
02645 51, 52, 0, 196, 197, 54, 55, 56, 57, 58,
02646 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02647 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
02648 61, 198, 63, 12, 0, 13, 14, 15, 228, 229,
02649 18, 19, 0, 0, 0, 0, 0, 230, 231, 232,
02650 23, 24, 25, 26, 0, 0, 192, 0, 0, 0,
02651 0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
02652 36, 37, 38, 39, 40, 193, 41, 42, 0, 43,
02653 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02654 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02655 0, 0, 0, 194, 0, 0, 195, 50, 0, 51,
02656 52, 0, 577, 197, 54, 55, 56, 57, 58, 59,
02657 60, 0, 0, 0, 0, 0, 0, 0, 0, 5,
02658 6, 7, 0, 9, 0, 0, 0, 10, 11, 61,
02659 198, 63, 12, 0, 13, 14, 15, 228, 229, 18,
02660 19, 0, 0, 0, 0, 0, 230, 231, 232, 23,
02661 24, 25, 26, 0, 0, 192, 0, 0, 0, 0,
02662 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
02663 37, 38, 39, 40, 193, 41, 42, 0, 43, 44,
02664 45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
02665 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02666 0, 0, 194, 0, 0, 195, 50, 0, 51, 52,
02667 0, 196, 0, 54, 55, 56, 57, 58, 59, 60,
02668 0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
02669 7, 0, 9, 0, 0, 0, 10, 11, 61, 198,
02670 63, 12, 0, 13, 14, 15, 228, 229, 18, 19,
02671 0, 0, 0, 0, 0, 230, 231, 232, 23, 24,
02672 25, 26, 0, 0, 192, 0, 0, 0, 0, 0,
02673 0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
02674 38, 39, 40, 193, 41, 42, 0, 43, 44, 45,
02675 0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
02676 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02677 0, 194, 0, 0, 195, 50, 0, 51, 52, 0,
02678 0, 197, 54, 55, 56, 57, 58, 59, 60, 0,
02679 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02680 0, 9, 0, 0, 0, 10, 11, 61, 198, 63,
02681 12, 0, 13, 14, 15, 228, 229, 18, 19, 0,
02682 0, 0, 0, 0, 230, 231, 232, 23, 24, 25,
02683 26, 0, 0, 192, 0, 0, 0, 0, 0, 0,
02684 29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02685 39, 40, 193, 41, 42, 0, 43, 44, 45, 0,
02686 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02687 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02688 194, 0, 0, 195, 50, 0, 51, 52, 0, 577,
02689 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02690 0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
02691 9, 0, 0, 0, 10, 11, 61, 198, 63, 12,
02692 0, 13, 14, 15, 228, 229, 18, 19, 0, 0,
02693 0, 0, 0, 230, 231, 232, 23, 24, 25, 26,
02694 0, 0, 192, 0, 0, 0, 0, 0, 0, 29,
02695 0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
02696 40, 193, 41, 42, 0, 43, 44, 45, 0, 46,
02697 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02698 0, 0, 0, 0, 0, 0, 0, 0, 0, 194,
02699 0, 0, 195, 50, 0, 51, 52, 0, 0, 0,
02700 54, 55, 56, 57, 58, 59, 60, 0, 0, 0,
02701 0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
02702 0, 0, 0, 10, 11, 61, 198, 63, 12, 0,
02703 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02704 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02705 0, 192, 0, 0, 0, 0, 0, 0, 29, 0,
02706 0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02707 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02708 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02709 0, 0, 0, 0, 0, 0, 0, 0, 194, 0,
02710 0, 195, 50, 0, 51, 52, 0, 476, 0, 54,
02711 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02712 0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
02713 0, 0, 10, 11, 61, 198, 63, 12, 0, 13,
02714 14, 15, 228, 229, 18, 19, 0, 0, 0, 0,
02715 0, 230, 231, 232, 23, 24, 25, 26, 0, 0,
02716 192, 0, 0, 0, 0, 0, 0, 29, 0, 0,
02717 32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
02718 41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
02719 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02720 0, 0, 0, 0, 0, 0, 0, 194, 0, 0,
02721 195, 50, 0, 51, 52, 0, 196, 0, 54, 55,
02722 56, 57, 58, 59, 60, 0, 0, 0, 0, 0,
02723 0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
02724 0, 10, 11, 61, 198, 63, 12, 0, 13, 14,
02725 15, 228, 229, 18, 19, 0, 0, 0, 0, 0,
02726 230, 231, 232, 23, 24, 25, 26, 0, 0, 192,
02727 0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
02728 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
02729 42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
02730 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02731 0, 0, 0, 0, 0, 0, 194, 0, 0, 195,
02732 50, 0, 51, 52, 0, 758, 0, 54, 55, 56,
02733 57, 58, 59, 60, 0, 0, 0, 0, 0, 0,
02734 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02735 10, 11, 61, 198, 63, 12, 0, 13, 14, 15,
02736 228, 229, 18, 19, 0, 0, 0, 0, 0, 230,
02737 231, 232, 23, 24, 25, 26, 0, 0, 192, 0,
02738 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02739 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02740 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02741 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02742 0, 0, 0, 0, 0, 194, 0, 0, 195, 50,
02743 0, 51, 52, 0, 476, 0, 54, 55, 56, 57,
02744 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02745 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
02746 11, 61, 198, 63, 12, 0, 13, 14, 15, 228,
02747 229, 18, 19, 0, 0, 0, 0, 0, 230, 231,
02748 232, 23, 24, 25, 26, 0, 0, 192, 0, 0,
02749 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
02750 35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
02751 43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
02752 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02753 0, 0, 0, 0, 194, 0, 0, 195, 50, 0,
02754 51, 52, 0, 577, 0, 54, 55, 56, 57, 58,
02755 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02756 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
02757 61, 198, 63, 12, 0, 13, 14, 15, 228, 229,
02758 18, 19, 0, 0, 0, 0, 0, 230, 231, 232,
02759 23, 24, 25, 26, 0, 0, 192, 0, 0, 0,
02760 0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
02761 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02762 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02763 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02764 0, 0, 0, 194, 0, 0, 195, 50, 0, 51,
02765 52, 0, 0, 0, 54, 55, 56, 57, 58, 59,
02766 60, 0, 0, 0, 0, 0, 0, 0, 0, 5,
02767 6, 7, 0, 9, 0, 0, 0, 10, 11, 61,
02768 198, 63, 12, 0, 13, 14, 15, 16, 17, 18,
02769 19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
02770 24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
02771 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
02772 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02773 45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
02774 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02775 0, 0, 194, 0, 0, 195, 50, 0, 51, 52,
02776 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02777 0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
02778 7, 0, 9, 0, 0, 0, 10, 11, 61, 62,
02779 63, 12, 0, 13, 14, 15, 16, 17, 18, 19,
02780 0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
02781 25, 26, 0, 0, 192, 0, 0, 0, 0, 0,
02782 0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
02783 38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
02784 0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
02785 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02786 0, 194, 0, 0, 195, 50, 0, 51, 52, 0,
02787 0, 0, 54, 55, 56, 57, 58, 59, 60, 0,
02788 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02789 0, 9, 0, 0, 0, 10, 11, 61, 198, 63,
02790 12, 0, 13, 14, 15, 228, 229, 18, 19, 0,
02791 0, 0, 0, 0, 230, 231, 232, 23, 24, 25,
02792 26, 0, 0, 192, 0, 0, 0, 0, 0, 0,
02793 255, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02794 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02795 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02796 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02797 256, 0, 0, 300, 50, 0, 51, 52, 0, 301,
02798 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02799 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02800 10, 11, 0, 0, 0, 12, 257, 13, 14, 15,
02801 228, 229, 18, 19, 0, 0, 0, 0, 0, 230,
02802 231, 232, 23, 24, 25, 26, 0, 0, 192, 0,
02803 0, 0, 0, 0, 0, 255, 0, 0, 32, 33,
02804 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02805 0, 43, 44, 45, 0, 0, 0, 0, 0, 0,
02806 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02807 0, 0, 0, 0, 0, 342, 0, 0, 49, 50,
02808 0, 51, 52, 0, 53, 0, 54, 55, 56, 57,
02809 58, 59, 60, 0, 0, 0, 0, 5, 6, 7,
02810 0, 9, 0, 0, 0, 10, 11, 0, 0, 0,
02811 12, 257, 13, 14, 15, 228, 229, 18, 19, 0,
02812 0, 0, 0, 0, 230, 231, 232, 23, 24, 25,
02813 26, 0, 0, 192, 0, 0, 0, 0, 0, 0,
02814 255, 0, 0, 32, 33, 34, 349, 36, 37, 38,
02815 350, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02816 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02817 0, 0, 0, 0, 0, 0, 0, 351, 0, 0,
02818 352, 0, 0, 195, 50, 0, 51, 52, 0, 0,
02819 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02820 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02821 10, 11, 0, 0, 0, 12, 257, 13, 14, 15,
02822 228, 229, 18, 19, 0, 0, 0, 0, 0, 230,
02823 231, 232, 23, 24, 25, 26, 0, 0, 192, 0,
02824 0, 0, 0, 0, 0, 255, 0, 0, 32, 33,
02825 34, 349, 36, 37, 38, 350, 40, 0, 41, 42,
02826 0, 43, 44, 45, 0, 0, 0, 0, 0, 0,
02827 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02828 0, 0, 0, 0, 0, 352, 0, 0, 195, 50,
02829 0, 51, 52, 0, 0, 0, 54, 55, 56, 57,
02830 58, 59, 60, 0, 0, 0, 0, 5, 6, 7,
02831 0, 9, 0, 0, 0, 10, 11, 0, 0, 0,
02832 12, 257, 13, 14, 15, 228, 229, 18, 19, 0,
02833 0, 0, 0, 0, 230, 231, 232, 23, 24, 25,
02834 26, 0, 0, 192, 0, 0, 0, 0, 0, 0,
02835 255, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02836 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02837 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02838 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02839 256, 0, 0, 300, 50, 0, 51, 52, 0, 0,
02840 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02841 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02842 10, 11, 0, 0, 0, 12, 257, 13, 14, 15,
02843 228, 229, 18, 19, 0, 0, 0, 0, 0, 230,
02844 231, 232, 23, 24, 25, 26, 0, 0, 192, 0,
02845 0, 0, 0, 0, 0, 255, 0, 0, 32, 33,
02846 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02847 0, 43, 44, 45, 0, 0, 0, 0, 0, 0,
02848 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02849 0, 0, 0, 0, 0, 887, 0, 0, 195, 50,
02850 0, 51, 52, 0, 0, 0, 54, 55, 56, 57,
02851 58, 59, 60, 0, 0, 0, 0, 5, 6, 7,
02852 0, 9, 0, 0, 0, 10, 11, 0, 0, 0,
02853 12, 257, 13, 14, 15, 228, 229, 18, 19, 0,
02854 0, 0, 0, 0, 230, 231, 232, 23, 24, 25,
02855 26, 0, 0, 192, 0, 0, 0, 0, 0, 0,
02856 255, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02857 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02858 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02859 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02860 897, 0, 0, 195, 50, 0, 51, 52, 0, 0,
02861 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02862 0, 0, 0, 584, 524, 0, 0, 585, 0, 0,
02863 0, 0, 0, 0, 0, 0, 257, 155, 156, 157,
02864 158, 159, 160, 161, 162, 163, 0, 0, 164, 165,
02865 0, 0, 166, 167, 168, 169, 0, 0, 0, 0,
02866 0, 0, 0, 0, 0, 0, 170, 0, 0, 0,
02867 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02868 0, 0, 0, 171, 172, 173, 174, 175, 176, 177,
02869 178, 179, 180, 0, 181, 182, 0, 0, 0, 0,
02870 605, 516, 0, 0, 606, 0, 0, 0, 0, 0,
02871 0, 0, 183, 217, 155, 156, 157, 158, 159, 160,
02872 161, 162, 163, 0, 0, 164, 165, 0, 0, 166,
02873 167, 168, 169, 0, 0, 0, 0, 0, 0, 0,
02874 0, 0, 0, 170, 0, 0, 0, 0, 0, 0,
02875 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02876 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
02877 0, 181, 182, 0, 0, 0, 0, 608, 524, 0,
02878 0, 609, 0, 0, 0, 0, 0, 0, 0, 183,
02879 217, 155, 156, 157, 158, 159, 160, 161, 162, 163,
02880 0, 0, 164, 165, 0, 0, 166, 167, 168, 169,
02881 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02882 170, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02883 0, 0, 0, 0, 0, 0, 0, 171, 172, 173,
02884 174, 175, 176, 177, 178, 179, 180, 0, 181, 182,
02885 0, 0, 0, 0, 679, 516, 0, 0, 680, 0,
02886 0, 0, 0, 0, 0, 0, 183, 217, 155, 156,
02887 157, 158, 159, 160, 161, 162, 163, 0, 0, 164,
02888 165, 0, 0, 166, 167, 168, 169, 0, 0, 0,
02889 0, 0, 0, 0, 0, 0, 0, 170, 0, 0,
02890 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02891 0, 0, 0, 0, 171, 172, 173, 174, 175, 176,
02892 177, 178, 179, 180, 0, 181, 182, 0, 0, 0,
02893 0, 682, 524, 0, 0, 683, 0, 0, 0, 0,
02894 0, 0, 0, 183, 217, 155, 156, 157, 158, 159,
02895 160, 161, 162, 163, 0, 0, 164, 165, 0, 0,
02896 166, 167, 168, 169, 0, 0, 0, 0, 0, 0,
02897 0, 0, 0, 0, 170, 0, 0, 0, 0, 0,
02898 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02899 0, 171, 172, 173, 174, 175, 176, 177, 178, 179,
02900 180, 0, 181, 182, 0, 0, 0, 0, 689, 516,
02901 0, 0, 690, 0, 0, 0, 0, 0, 0, 0,
02902 183, 217, 155, 156, 157, 158, 159, 160, 161, 162,
02903 163, 0, 0, 164, 165, 0, 0, 166, 167, 168,
02904 169, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02905 0, 170, 0, 0, 0, 0, 0, 0, 0, 0,
02906 0, 0, 0, 0, 0, 0, 0, 0, 171, 172,
02907 173, 174, 175, 176, 177, 178, 179, 180, 0, 181,
02908 182, 0, 0, 0, 0, 562, 524, 0, 0, 563,
02909 0, 0, 0, 0, 0, 0, 0, 183, 217, 155,
02910 156, 157, 158, 159, 160, 161, 162, 163, 0, 0,
02911 164, 165, 0, 0, 166, 167, 168, 169, 0, 0,
02912 0, 0, 0, 0, 0, 0, 0, 0, 170, 0,
02913 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02914 0, 0, 0, 0, 0, 171, 172, 173, 174, 175,
02915 176, 177, 178, 179, 180, 0, 181, 182, 0, 0,
02916 0, 0, 949, 516, 0, 0, 950, 0, 0, 0,
02917 0, 0, 0, 0, 183, 217, 155, 156, 157, 158,
02918 159, 160, 161, 162, 163, 0, 0, 164, 165, 0,
02919 0, 166, 167, 168, 169, 0, 0, 0, 0, 0,
02920 0, 0, 0, 0, 0, 170, 0, 0, 0, 0,
02921 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02922 0, 0, 171, 172, 173, 174, 175, 176, 177, 178,
02923 179, 180, 0, 181, 182, 0, 0, 0, 0, 955,
02924 516, 0, 0, 956, 0, 0, 0, 0, 0, 0,
02925 0, 183, 217, 155, 156, 157, 158, 159, 160, 161,
02926 162, 163, 0, 0, 164, 165, 0, 0, 166, 167,
02927 168, 169, 0, 0, 0, 0, 0, 0, 0, 0,
02928 0, 0, 170, 0, 0, 0, 0, 0, 0, 0,
02929 0, 0, 0, 0, 0, 0, 0, 0, 0, 171,
02930 172, 173, 174, 175, 176, 177, 178, 179, 180, 0,
02931 181, 182, 0, 0, 0, 0, 958, 524, 0, 0,
02932 959, 0, 0, 0, 0, 0, 0, 0, 183, 217,
02933 155, 156, 157, 158, 159, 160, 161, 162, 163, 0,
02934 0, 164, 165, 0, 0, 166, 167, 168, 169, 0,
02935 0, 0, 0, 0, 0, 0, 0, 0, 0, 170,
02936 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02937 0, 0, 0, 0, 0, 0, 171, 172, 173, 174,
02938 175, 176, 177, 178, 179, 180, 0, 181, 182, 0,
02939 0, 0, 0, 562, 524, 0, 0, 563, 0, 0,
02940 0, 0, 0, 0, 0, 183, 217, 155, 156, 157,
02941 158, 159, 160, 161, 162, 163, 0, 0, 164, 165,
02942 0, 0, 166, 167, 168, 169, 0, 0, 0, 0,
02943 0, 0, 0, 0, 0, 0, 170, 0, 0, 0,
02944 0, 0, 0, 0, 705, 0, 0, 0, 0, 0,
02945 0, 0, 0, 171, 172, 173, 174, 175, 176, 177,
02946 178, 179, 180, 650, 181, 182, 0, 0, 304, 305,
02947 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
02948 316, 0, 183, 317, 318, 0, 0, 304, 305, 306,
02949 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
02950 0, 0, 317, 318, 0, 0, 0, 0, 0, 0,
02951 319, 0, 320, 321, 322, 323, 324, 325, 326, 327,
02952 328, 329, 0, 0, 0, 0, 0, 0, 0, 319,
02953 0, 320, 321, 322, 323, 324, 325, 326, 327, 328,
02954 329
02955 };
02956
02957 static const yytype_int16 yycheck[] =
02958 {
02959 2, 16, 17, 55, 2, 20, 4, 51, 28, 75,
02960 51, 52, 446, 336, 210, 8, 49, 537, 16, 17,
02961 303, 8, 20, 27, 536, 29, 556, 53, 83, 583,
02962 446, 86, 249, 331, 65, 28, 253, 4, 90, 442,
02963 8, 28, 748, 272, 13, 274, 352, 276, 49, 51,
02964 52, 49, 50, 607, 86, 53, 735, 667, 813, 836,
02965 28, 671, 641, 811, 62, 732, 615, 1, 22, 27,
02966 16, 17, 29, 50, 20, 25, 330, 75, 332, 482,
02967 53, 566, 567, 62, 82, 83, 26, 55, 86, 87,
02968 88, 89, 728, 13, 13, 61, 394, 25, 22, 13,
02969 61, 85, 75, 239, 76, 82, 83, 37, 38, 86,
02970 140, 398, 390, 749, 87, 88, 89, 147, 372, 373,
02971 398, 85, 90, 871, 558, 87, 85, 681, 65, 109,
02972 15, 13, 17, 0, 25, 25, 147, 13, 692, 393,
02973 106, 395, 114, 104, 105, 432, 444, 109, 925, 86,
02974 107, 25, 56, 732, 108, 139, 735, 25, 688, 914,
02975 140, 2, 195, 4, 300, 419, 696, 834, 916, 25,
02976 140, 140, 25, 722, 723, 139, 145, 147, 147, 113,
02977 139, 59, 60, 889, 108, 146, 620, 145, 85, 147,
02978 140, 445, 258, 655, 227, 943, 136, 195, 877, 214,
02979 662, 216, 217, 205, 620, 136, 239, 641, 210, 241,
02980 241, 145, 140, 147, 881, 217, 214, 147, 216, 217,
02981 146, 706, 220, 142, 222, 145, 145, 147, 147, 227,
02982 459, 145, 26, 147, 289, 290, 291, 292, 239, 146,
02983 238, 239, 139, 220, 542, 222, 649, 553, 858, 140,
02984 140, 255, 142, 25, 298, 834, 554, 836, 28, 303,
02985 258, 695, 811, 145, 813, 147, 140, 300, 214, 145,
02986 216, 147, 140, 99, 142, 301, 109, 26, 232, 695,
02987 792, 235, 337, 338, 140, 258, 25, 140, 87, 543,
02988 288, 289, 290, 291, 292, 293, 294, 295, 877, 300,
02989 298, 555, 300, 301, 241, 303, 142, 339, 220, 85,
02990 109, 147, 289, 290, 291, 292, 331, 294, 295, 298,
02991 140, 288, 871, 872, 303, 37, 38, 26, 301, 331,
02992 860, 243, 145, 331, 147, 333, 85, 109, 858, 337,
02993 338, 140, 136, 109, 85, 87, 925, 26, 142, 390,
02994 87, 85, 140, 351, 677, 87, 85, 142, 85, 56,
02995 337, 338, 330, 139, 26, 914, 109, 916, 140, 87,
02996 109, 143, 109, 88, 351, 147, 442, 109, 332, 394,
02997 378, 379, 912, 666, 580, 602, 85, 136, 429, 138,
02998 139, 109, 394, 413, 943, 85, 394, 238, 139, 378,
02999 379, 140, 339, 957, 143, 139, 85, 85, 147, 138,
03000 139, 138, 139, 142, 416, 52, 482, 354, 416, 56,
03001 413, 140, 140, 85, 87, 393, 413, 425, 85, 444,
03002 140, 865, 85, 85, 59, 60, 85, 136, 142, 138,
03003 139, 395, 444, 142, 442, 413, 444, 288, 138, 139,
03004 418, 136, 293, 142, 85, 14, 15, 136, 85, 138,
03005 139, 139, 85, 142, 68, 419, 564, 565, 85, 442,
03006 142, 85, 143, 475, 136, 443, 138, 139, 85, 109,
03007 142, 138, 139, 144, 482, 138, 139, 139, 400, 138,
03008 139, 445, 404, 137, 538, 407, 85, 87, 56, 532,
03009 504, 534, 52, 106, 54, 55, 56, 57, 139, 482,
03010 422, 138, 139, 106, 85, 427, 139, 85, 522, 109,
03011 641, 138, 139, 846, 138, 139, 528, 542, 530, 852,
03012 140, 138, 139, 87, 532, 87, 534, 603, 87, 554,
03013 542, 68, 68, 52, 542, 54, 55, 56, 57, 138,
03014 139, 17, 554, 140, 574, 109, 554, 109, 556, 557,
03015 109, 145, 564, 565, 566, 567, 520, 138, 139, 481,
03016 138, 139, 56, 541, 528, 416, 61, 94, 580, 583,
03017 557, 574, 68, 649, 425, 553, 140, 574, 140, 543,
03018 140, 140, 52, 25, 592, 597, 520, 143, 535, 536,
03019 137, 555, 140, 607, 528, 603, 574, 140, 140, 642,
03020 564, 565, 549, 61, 735, 592, 87, 738, 146, 104,
03021 105, 106, 666, 87, 626, 87, 628, 140, 630, 684,
03022 603, 140, 687, 119, 120, 121, 140, 935, 109, 641,
03023 564, 565, 596, 597, 642, 109, 698, 109, 61, 10,
03024 68, 649, 8, 54, 652, 653, 104, 105, 106, 13,
03025 658, 659, 63, 64, 666, 667, 109, 669, 61, 671,
03026 703, 704, 137, 652, 653, 52, 649, 681, 140, 658,
03027 659, 61, 936, 140, 140, 65, 684, 140, 692, 687,
03028 688, 104, 105, 106, 52, 140, 729, 730, 696, 117,
03029 118, 119, 120, 121, 706, 703, 704, 684, 741, 111,
03030 687, 104, 105, 106, 144, 836, 15, 838, 52, 140,
03031 54, 55, 56, 57, 104, 105, 728, 782, 145, 114,
03032 698, 729, 730, 193, 109, 140, 196, 197, 40, 41,
03033 42, 43, 44, 741, 140, 140, 779, 749, 685, 751,
03034 10, 753, 754, 786, 787, 89, 877, 790, 879, 140,
03035 697, 95, 883, 88, 16, 17, 9, 137, 20, 10,
03036 10, 769, 140, 806, 137, 777, 54, 55, 780, 57,
03037 140, 779, 694, 140, 782, 63, 64, 140, 786, 787,
03038 769, 140, 790, 137, 46, 47, 114, 140, 140, 51,
03039 52, 137, 140, 715, 925, 782, 927, 56, 806, 930,
03040 62, 63, 140, 140, 726, 416, 849, 819, 820, 140,
03041 822, 56, 824, 825, 945, 140, 140, 140, 87, 827,
03042 142, 52, 142, 54, 55, 56, 57, 539, 298, 89,
03043 889, 938, 722, 303, 92, 937, 967, 845, 95, 57,
03044 -1, 849, 90, 865, 827, 792, 858, 794, 68, 834,
03045 732, 52, 860, 54, 55, 56, 57, -1, 89, 902,
03046 -1, 904, 845, 83, 84, 96, -1, 910, 52, -1,
03047 54, 55, 56, 57, -1, -1, -1, 799, -1, 891,
03048 892, 893, -1, 895, 896, 116, -1, 52, 810, 54,
03049 55, 56, 57, 815, 902, -1, 904, 117, 118, 119,
03050 120, 121, 910, -1, 912, 89, 918, 919, 920, 921,
03051 935, 95, -1, -1, -1, -1, -1, -1, -1, 389,
03052 390, -1, -1, 935, 89, 937, 938, 935, 398, -1,
03053 -1, 193, -1, -1, 196, 197, 198, -1, -1, 951,
03054 952, 953, 954, 957, -1, 923, 52, -1, 54, 55,
03055 56, 57, 214, 965, 216, 217, 934, -1, -1, 429,
03056 -1, 973, 432, -1, 676, 52, -1, 54, 55, 56,
03057 57, -1, 936, -1, -1, -1, -1, -1, -1, -1,
03058 -1, 693, -1, 89, -1, -1, -1, -1, -1, 95,
03059 96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03060 -1, -1, 89, -1, -1, -1, 476, -1, 95, 96,
03061 116, -1, -1, 119, -1, -1, -1, -1, -1, -1,
03062 -1, -1, -1, 2, -1, 4, -1, -1, -1, 116,
03063 -1, -1, 119, -1, -1, -1, 298, -1, -1, 145,
03064 -1, 303, 304, 305, 306, 307, 308, 309, 310, 311,
03065 312, 313, 314, 315, 316, 317, 318, 319, 320, 321,
03066 322, 323, 324, 325, 326, 327, 328, 329, 538, 331,
03067 49, 783, -1, 785, 53, 52, -1, 54, 55, 56,
03068 57, -1, -1, 795, -1, -1, -1, -1, 800, -1,
03069 -1, -1, -1, -1, -1, -1, 75, -1, -1, -1,
03070 -1, 2, -1, 4, -1, -1, -1, 577, 87, 88,
03071 89, 90, 89, -1, -1, -1, 378, 379, 95, 96,
03072 -1, -1, -1, -1, -1, -1, 388, 389, 390, -1,
03073 -1, -1, 394, -1, 396, 397, 398, -1, -1, 116,
03074 -1, -1, 119, 855, 856, -1, -1, -1, 49, 628,
03075 -1, 630, 53, 415, -1, -1, 68, 52, 420, 54,
03076 55, 56, 57, -1, -1, 142, -1, 429, -1, -1,
03077 432, 83, 84, 2, 75, 4, 646, -1, -1, -1,
03078 -1, -1, 444, -1, -1, -1, 87, 88, 89, -1,
03079 2, -1, 4, -1, 89, -1, 666, -1, -1, 911,
03080 95, 96, 464, 465, 116, 117, 118, 119, 120, 121,
03081 -1, -1, -1, -1, 476, -1, 195, -1, -1, -1,
03082 49, 116, -1, -1, 119, 0, -1, 939, -1, 941,
03083 -1, -1, -1, 8, 9, 10, -1, 49, 13, 14,
03084 15, 52, 17, 54, 55, 56, 57, 142, 227, -1,
03085 720, -1, 27, -1, -1, -1, -1, -1, 87, 238,
03086 239, -1, 37, 38, -1, 40, 41, 42, 43, 44,
03087 -1, -1, 751, -1, 753, 754, 538, -1, 89, 258,
03088 542, 68, -1, -1, 95, 96, -1, -1, 758, -1,
03089 -1, -1, 554, -1, 195, -1, 83, 84, -1, -1,
03090 -1, -1, -1, -1, -1, 116, -1, -1, 119, 288,
03091 85, -1, -1, -1, 293, 577, -1, -1, -1, 789,
03092 -1, 300, 301, -1, -1, -1, 227, 114, 115, 116,
03093 117, 118, 119, 120, 121, -1, -1, 238, 239, -1,
03094 819, 820, -1, 822, -1, 824, 825, -1, -1, -1,
03095 -1, -1, -1, -1, 333, -1, -1, 258, -1, -1,
03096 -1, -1, 137, -1, 139, -1, 195, 142, 143, -1,
03097 145, -1, 147, -1, -1, -1, -1, -1, -1, -1,
03098 -1, -1, -1, 195, 646, -1, -1, 288, 650, -1,
03099 652, 653, 293, -1, -1, -1, 658, 659, 227, 300,
03100 301, -1, -1, -1, 666, -1, -1, -1, -1, 238,
03101 239, -1, 891, 892, 893, 227, 895, 896, -1, -1,
03102 -1, -1, -1, -1, -1, -1, 238, 239, -1, -1,
03103 -1, -1, 333, -1, -1, -1, -1, 416, -1, 918,
03104 919, 920, 921, 705, -1, -1, 425, -1, 710, 711,
03105 -1, 713, 714, -1, -1, -1, -1, -1, 720, 288,
03106 -1, -1, -1, 442, 293, -1, -1, -1, -1, -1,
03107 -1, 300, 951, 952, 953, 954, 288, -1, -1, -1,
03108 -1, 293, -1, -1, -1, -1, 965, -1, 300, -1,
03109 -1, -1, -1, -1, 973, -1, 758, -1, -1, -1,
03110 762, -1, -1, 482, 333, -1, -1, 769, -1, -1,
03111 -1, -1, -1, -1, -1, 416, -1, -1, -1, -1,
03112 -1, 333, -1, -1, 425, -1, -1, 789, -1, -1,
03113 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03114 -1, 442, -1, -1, -1, 807, -1, -1, -1, -1,
03115 -1, -1, -1, 532, -1, 534, -1, -1, -1, -1,
03116 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03117 68, 69, 70, 71, 72, 73, 74, 556, -1, 77,
03118 78, 482, -1, -1, -1, 83, 84, 416, -1, -1,
03119 -1, -1, -1, -1, -1, -1, 425, -1, -1, -1,
03120 -1, -1, -1, -1, 416, -1, -1, -1, -1, -1,
03121 44, -1, -1, 425, 112, 113, 114, 115, 116, 117,
03122 118, 119, 120, 121, 603, -1, -1, -1, -1, -1,
03123 -1, 532, -1, 534, 68, 69, 70, 71, 72, 73,
03124 74, 75, 76, 77, 78, 79, 80, -1, -1, 83,
03125 84, -1, -1, -1, -1, 556, -1, -1, -1, -1,
03126 -1, -1, -1, 642, -1, -1, -1, -1, -1, -1,
03127 649, -1, -1, 935, -1, -1, 110, -1, 112, 113,
03128 114, 115, 116, 117, 118, 119, 120, 121, -1, -1,
03129 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03130 -1, -1, 603, 532, -1, 534, 140, -1, -1, 688,
03131 -1, -1, -1, -1, -1, -1, -1, 696, -1, -1,
03132 532, -1, 534, -1, 703, 704, -1, 556, -1, -1,
03133 -1, -1, -1, 634, -1, -1, -1, -1, -1, -1,
03134 -1, 642, -1, -1, 556, -1, -1, -1, 649, -1,
03135 729, 730, -1, -1, 52, 53, -1, -1, 56, -1,
03136 -1, -1, 741, -1, -1, -1, -1, -1, 66, 67,
03137 68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
03138 78, -1, -1, 81, 82, 83, 84, 688, -1, -1,
03139 -1, -1, -1, -1, -1, 696, -1, 95, -1, -1,
03140 779, -1, 703, 704, -1, -1, -1, 786, 787, -1,
03141 -1, 790, -1, 642, 112, 113, 114, 115, 116, 117,
03142 118, 119, 120, 121, -1, 123, 124, 806, 729, 730,
03143 642, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03144 741, -1, -1, 141, 142, -1, -1, -1, 827, -1,
03145 -1, -1, -1, -1, -1, -1, -1, -1, -1, 688,
03146 -1, -1, -1, -1, -1, -1, 845, 696, -1, -1,
03147 849, -1, -1, -1, 703, 704, 688, -1, 779, -1,
03148 -1, 860, -1, -1, 696, 786, 787, -1, -1, 790,
03149 -1, 703, 704, -1, -1, -1, -1, -1, -1, -1,
03150 729, 730, -1, -1, -1, 806, -1, -1, -1, -1,
03151 -1, -1, 741, -1, -1, -1, -1, 729, 730, -1,
03152 -1, -1, -1, 902, -1, 904, 827, -1, -1, 741,
03153 -1, 910, -1, 912, -1, -1, -1, 68, 69, 70,
03154 71, 72, 73, 74, 845, -1, 77, 78, 849, -1,
03155 779, -1, 83, 84, -1, -1, -1, 786, 787, 860,
03156 -1, 790, -1, 46, 47, -1, -1, 779, 51, 52,
03157 53, -1, -1, -1, 786, 787, -1, 806, 790, -1,
03158 63, 112, 113, 114, 115, 116, 117, 118, 119, 120,
03159 121, -1, 75, -1, 806, -1, -1, -1, -1, -1,
03160 -1, 902, -1, 904, 87, 88, 89, -1, -1, 910,
03161 -1, 912, -1, -1, -1, -1, 845, -1, -1, -1,
03162 849, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03163 -1, 860, -1, -1, -1, -1, -1, 849, -1, -1,
03164 -1, -1, -1, -1, -1, -1, -1, -1, 860, -1,
03165 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03166 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03167 -1, -1, -1, 902, -1, 904, -1, -1, -1, -1,
03168 -1, 910, -1, 912, -1, -1, -1, -1, -1, -1,
03169 902, -1, 904, -1, -1, -1, -1, -1, 910, -1,
03170 912, -1, 52, 53, -1, -1, 56, -1, -1, -1,
03171 193, -1, -1, 196, 197, 198, 66, 67, 68, 69,
03172 70, 71, 72, 73, 74, -1, -1, 77, 78, -1,
03173 -1, 81, 82, 83, 84, -1, -1, 68, 69, 70,
03174 71, 72, 73, 74, 75, 95, 77, 78, -1, -1,
03175 -1, -1, 83, 84, -1, -1, -1, -1, -1, -1,
03176 -1, -1, 112, 113, 114, 115, 116, 117, 118, 119,
03177 120, 121, -1, 123, 124, 258, -1, -1, -1, -1,
03178 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
03179 121, 141, 142, -1, -1, -1, -1, -1, -1, -1,
03180 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
03181 74, 75, 76, 77, 78, 79, 80, -1, 301, 83,
03182 84, 304, 305, 306, 307, 308, 309, 310, 311, 312,
03183 313, 314, 315, 316, 317, 318, 319, 320, 321, 322,
03184 323, 324, 325, 326, 327, 328, 329, -1, 112, 113,
03185 114, 115, 116, 117, 118, 119, 120, 121, 52, 53,
03186 -1, -1, 56, -1, -1, -1, -1, -1, -1, -1,
03187 -1, -1, 66, 67, 68, 69, 70, 71, 72, 73,
03188 74, -1, -1, 77, 78, -1, -1, 81, 82, 83,
03189 84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03190 -1, 95, -1, -1, -1, 388, 389, 390, -1, -1,
03191 -1, -1, -1, 396, 397, 398, -1, -1, 112, 113,
03192 114, 115, 116, 117, 118, 119, 120, 121, -1, 123,
03193 124, -1, 415, -1, -1, -1, -1, 420, -1, -1,
03194 -1, -1, -1, -1, -1, -1, 429, 141, 142, 432,
03195 -1, -1, -1, -1, -1, -1, -1, -1, -1, 442,
03196 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03197 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03198 -1, 464, 465, -1, 0, 1, -1, 3, 4, 5,
03199 6, 7, -1, 476, -1, 11, 12, -1, -1, 482,
03200 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03201 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03202 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03203 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
03204 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03205 66, 67, -1, -1, -1, 538, -1, -1, -1, -1,
03206 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03207 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03208 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03209 -1, -1, -1, -1, 577, -1, -1, -1, -1, -1,
03210 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1,
03211 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03212 603, -1, -1, -1, -1, -1, -1, -1, -1, 145,
03213 -1, 147, -1, -1, -1, -1, -1, -1, -1, -1,
03214 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03215 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03216 -1, -1, -1, 646, -1, -1, 649, 650, -1, -1,
03217 -1, 0, -1, -1, -1, -1, -1, -1, -1, 8,
03218 9, 10, -1, 666, 13, 14, 15, -1, 17, -1,
03219 -1, -1, -1, -1, -1, -1, -1, -1, 27, 28,
03220 29, -1, -1, -1, -1, -1, -1, -1, 37, 38,
03221 -1, 40, 41, 42, 43, 44, -1, -1, -1, -1,
03222 -1, -1, 705, -1, -1, -1, -1, 710, 711, -1,
03223 713, 714, -1, -1, -1, -1, -1, 720, -1, 68,
03224 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
03225 79, 80, -1, -1, 83, 84, 85, -1, 87, 88,
03226 -1, -1, -1, -1, -1, 94, -1, -1, -1, -1,
03227 -1, -1, -1, -1, -1, 758, -1, -1, 107, 762,
03228 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
03229 119, 120, 121, -1, -1, -1, -1, -1, -1, -1,
03230 -1, -1, -1, -1, -1, -1, 789, -1, 137, 138,
03231 139, 140, 0, -1, 143, 144, 145, -1, 147, -1,
03232 8, 9, 10, -1, 807, 13, 14, 15, -1, 17,
03233 -1, -1, -1, -1, -1, -1, -1, -1, 26, 27,
03234 28, -1, -1, -1, 827, -1, -1, -1, -1, 37,
03235 38, -1, 40, 41, 42, 43, 44, -1, -1, -1,
03236 -1, -1, 845, 68, 69, 70, 71, 72, 73, 74,
03237 75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
03238 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
03239 78, 79, 80, -1, -1, 83, 84, 85, -1, -1,
03240 88, -1, -1, -1, -1, 110, 94, 112, 113, 114,
03241 115, 116, 117, 118, 119, 120, 121, -1, -1, -1,
03242 -1, -1, 110, -1, 112, 113, 114, 115, 116, 117,
03243 118, 119, 120, 121, -1, -1, -1, -1, -1, -1,
03244 -1, -1, 147, -1, -1, -1, -1, -1, 136, 137,
03245 138, 139, 140, 0, 142, 143, 144, 145, -1, 147,
03246 -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
03247 17, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03248 27, 28, 29, -1, -1, -1, -1, -1, -1, -1,
03249 37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
03250 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
03251 74, 75, 76, 77, 78, 79, 80, -1, -1, 83,
03252 84, 68, 69, 70, 71, 72, 73, 74, 75, 76,
03253 77, 78, 79, 80, -1, -1, 83, 84, 85, -1,
03254 -1, 88, -1, -1, -1, -1, 110, 94, 112, 113,
03255 114, 115, 116, 117, 118, 119, 120, 121, -1, -1,
03256 107, -1, -1, 110, 111, 112, 113, 114, 115, 116,
03257 117, 118, 119, 120, 121, -1, -1, -1, -1, -1,
03258 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03259 137, 138, 139, 140, 0, -1, 143, 144, 145, -1,
03260 147, -1, 8, 9, 10, -1, -1, 13, 14, 15,
03261 -1, 17, -1, -1, -1, -1, -1, -1, -1, -1,
03262 26, 27, 28, -1, -1, -1, -1, -1, -1, -1,
03263 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1,
03264 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03265 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03266 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
03267 76, 77, 78, 79, 80, -1, -1, 83, 84, 85,
03268 -1, -1, 88, -1, -1, -1, -1, -1, 94, -1,
03269 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03270 -1, -1, -1, -1, 110, -1, 112, 113, 114, 115,
03271 116, 117, 118, 119, 120, 121, -1, -1, -1, -1,
03272 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03273 136, 137, 138, 139, 140, 0, 142, 143, 144, 145,
03274 -1, 147, -1, 8, 9, 10, -1, -1, 13, 14,
03275 15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
03276 -1, -1, 27, 28, -1, -1, -1, -1, -1, -1,
03277 -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
03278 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03279 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03280 -1, -1, -1, 68, 69, 70, 71, 72, 73, 74,
03281 75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
03282 85, -1, -1, 88, -1, -1, -1, -1, -1, 94,
03283 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03284 -1, -1, -1, -1, -1, 110, -1, 112, 113, 114,
03285 115, 116, 117, 118, 119, 120, 121, -1, -1, -1,
03286 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03287 -1, -1, 137, 138, 139, 140, 0, 142, 143, 144,
03288 145, -1, 147, -1, 8, 9, 10, -1, -1, -1,
03289 14, 15, -1, 17, -1, -1, -1, -1, -1, -1,
03290 -1, -1, 26, -1, -1, -1, -1, -1, -1, -1,
03291 -1, -1, -1, 37, 38, -1, 40, 41, 42, 43,
03292 44, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03293 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03294 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
03295 74, 75, 76, 77, 78, 79, 80, -1, -1, 83,
03296 84, 85, 0, 87, -1, -1, -1, -1, -1, -1,
03297 8, 9, 10, -1, -1, -1, 14, 15, -1, 17,
03298 -1, -1, -1, -1, -1, 109, 110, -1, 112, 113,
03299 114, 115, 116, 117, 118, 119, 120, 121, -1, 37,
03300 38, -1, 40, 41, 42, 43, 44, -1, -1, -1,
03301 -1, -1, 136, 137, 138, 139, 140, -1, -1, 143,
03302 -1, 145, -1, 147, -1, -1, -1, -1, -1, -1,
03303 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
03304 78, 79, 80, -1, -1, 83, 84, 85, -1, 87,
03305 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03306 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03307 -1, 109, 110, -1, 112, 113, 114, 115, 116, 117,
03308 118, 119, 120, 121, -1, -1, -1, -1, -1, -1,
03309 -1, -1, -1, -1, -1, -1, -1, -1, -1, 137,
03310 138, 139, 140, -1, -1, 143, -1, 145, 1, 147,
03311 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
03312 -1, -1, 15, 16, -1, 18, 19, 20, 21, 22,
03313 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03314 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03315 -1, -1, 45, 46, -1, 48, 49, 50, 51, 52,
03316 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03317 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03318 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03319 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03320 93, -1, 95, -1, 97, 98, 99, 100, 101, 102,
03321 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03322 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
03323 123, 124, -1, -1, -1, -1, -1, -1, -1, -1,
03324 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03325 -1, -1, 145, 1, 147, 3, 4, 5, 6, 7,
03326 -1, -1, 10, 11, 12, -1, 14, 15, 16, -1,
03327 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03328 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03329 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03330 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03331 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03332 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03333 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03334 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03335 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03336 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03337 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03338 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03339 -1, -1, -1, -1, -1, -1, -1, 145, 1, 147,
03340 3, 4, 5, 6, 7, -1, -1, 10, 11, 12,
03341 -1, -1, 15, 16, 17, 18, 19, 20, 21, 22,
03342 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03343 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03344 -1, -1, 45, 46, -1, 48, 49, 50, 51, 52,
03345 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03346 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03347 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03348 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03349 93, -1, 95, -1, 97, 98, 99, 100, 101, 102,
03350 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03351 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
03352 123, 124, -1, -1, -1, -1, -1, -1, 1, -1,
03353 3, 4, 5, 6, 7, -1, -1, -1, 11, 12,
03354 -1, -1, 145, 16, 147, 18, 19, 20, 21, 22,
03355 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03356 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03357 -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
03358 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03359 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03360 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03361 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03362 93, -1, 95, -1, 97, 98, 99, 100, 101, 102,
03363 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03364 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
03365 123, 124, -1, -1, -1, -1, -1, -1, -1, -1,
03366 -1, -1, -1, -1, 137, -1, -1, -1, -1, -1,
03367 -1, -1, 145, 1, 147, 3, 4, 5, 6, 7,
03368 -1, -1, 10, 11, 12, -1, -1, 15, 16, -1,
03369 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03370 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03371 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03372 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03373 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03374 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03375 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03376 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03377 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03378 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03379 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03380 -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
03381 -1, 9, 10, 11, 12, -1, -1, 145, 16, 147,
03382 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03383 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03384 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03385 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03386 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03387 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03388 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03389 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03390 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03391 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03392 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03393 -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
03394 -1, -1, -1, 11, 12, -1, -1, 145, 16, 147,
03395 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03396 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03397 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03398 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03399 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03400 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03401 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03402 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03403 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03404 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03405 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03406 -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
03407 -1, -1, -1, 11, 12, 143, -1, 145, 16, 147,
03408 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03409 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03410 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03411 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03412 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03413 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03414 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03415 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03416 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03417 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03418 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03419 -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
03420 -1, -1, -1, 11, 12, 143, -1, 145, 16, 147,
03421 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03422 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03423 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03424 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03425 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03426 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03427 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03428 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03429 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03430 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03431 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03432 -1, -1, -1, -1, -1, -1, -1, -1, -1, 137,
03433 -1, -1, -1, -1, -1, -1, -1, 145, 1, 147,
03434 3, 4, 5, 6, 7, -1, -1, 10, 11, 12,
03435 -1, -1, -1, 16, -1, 18, 19, 20, 21, 22,
03436 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03437 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03438 -1, -1, 45, 46, -1, 48, 49, 50, 51, 52,
03439 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03440 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03441 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03442 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03443 93, -1, 95, -1, 97, 98, 99, 100, 101, 102,
03444 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03445 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
03446 123, 124, -1, -1, -1, -1, -1, -1, -1, -1,
03447 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
03448 -1, -1, 145, 16, 147, 18, 19, 20, 21, 22,
03449 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03450 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03451 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03452 53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
03453 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03454 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03455 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03456 93, -1, 95, 96, 97, 98, 99, 100, 101, 102,
03457 103, -1, -1, -1, -1, -1, -1, -1, -1, 3,
03458 4, 5, -1, 7, -1, -1, -1, 11, 12, 122,
03459 123, 124, 16, -1, 18, 19, 20, 21, 22, 23,
03460 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03461 34, 35, 36, -1, 147, 39, -1, -1, -1, -1,
03462 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03463 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03464 64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
03465 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03466 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03467 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03468 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03469 -1, -1, -1, -1, -1, -1, -1, -1, 122, 123,
03470 124, -1, -1, -1, -1, -1, -1, -1, -1, 3,
03471 4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
03472 -1, 145, 16, 147, 18, 19, 20, 21, 22, 23,
03473 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03474 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03475 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03476 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03477 64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
03478 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03479 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03480 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03481 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
03482 5, 6, 7, -1, -1, -1, 11, 12, 122, 123,
03483 124, 16, -1, 18, 19, 20, 21, 22, 23, 24,
03484 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
03485 35, 36, -1, 147, 39, -1, -1, -1, -1, -1,
03486 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
03487 55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
03488 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03489 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03490 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03491 95, -1, 97, 98, 99, 100, 101, 102, 103, -1,
03492 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03493 -1, -1, -1, -1, -1, -1, -1, 122, 123, 124,
03494 -1, -1, -1, -1, -1, -1, 3, 4, 5, 6,
03495 7, -1, -1, -1, 11, 12, -1, -1, -1, 16,
03496 145, 18, 19, 20, 21, 22, 23, 24, -1, -1,
03497 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
03498 -1, -1, 39, -1, -1, -1, -1, -1, 45, 46,
03499 -1, 48, 49, 50, 51, 52, 53, 54, 55, 56,
03500 57, -1, 59, 60, -1, 62, 63, 64, -1, 66,
03501 67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03502 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
03503 -1, -1, 89, 90, -1, 92, 93, -1, 95, -1,
03504 97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
03505 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03506 -1, -1, -1, -1, -1, 122, 123, 124, -1, -1,
03507 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03508 -1, -1, -1, -1, -1, -1, -1, -1, 145, 3,
03509 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
03510 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
03511 24, 25, 26, -1, -1, -1, 30, 31, 32, 33,
03512 34, 35, 36, 37, 38, 39, -1, -1, -1, -1,
03513 -1, 45, 46, 47, 48, 49, 50, 51, 52, 53,
03514 54, 55, 56, 57, -1, -1, -1, -1, -1, -1,
03515 -1, -1, 66, 67, 68, 69, 70, 71, 72, 73,
03516 74, -1, -1, 77, 78, -1, -1, 81, 82, 83,
03517 84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03518 -1, 95, -1, -1, -1, -1, -1, -1, -1, -1,
03519 -1, -1, -1, -1, -1, -1, -1, -1, 112, 113,
03520 114, 115, 116, 117, 118, 119, 120, 121, -1, 123,
03521 124, -1, -1, -1, -1, -1, 3, 4, 5, -1,
03522 7, -1, -1, -1, 11, 12, -1, 141, 142, 16,
03523 -1, 18, 19, 20, 21, 22, 23, 24, -1, 26,
03524 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
03525 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
03526 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
03527 57, 58, 59, 60, -1, 62, 63, 64, -1, 66,
03528 67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03529 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
03530 -1, -1, 89, 90, -1, 92, 93, -1, 95, 96,
03531 97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
03532 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03533 -1, -1, -1, -1, -1, 122, 123, 124, -1, -1,
03534 -1, -1, -1, 3, 4, 5, -1, 7, -1, 136,
03535 -1, 11, 12, -1, -1, 142, 16, -1, 18, 19,
03536 20, 21, 22, 23, 24, -1, 26, -1, -1, -1,
03537 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
03538 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
03539 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
03540 60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
03541 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03542 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
03543 90, -1, 92, 93, -1, 95, 96, 97, 98, 99,
03544 100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
03545 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03546 -1, -1, 122, 123, 124, -1, -1, -1, -1, -1,
03547 3, 4, 5, -1, 7, -1, 136, -1, 11, 12,
03548 -1, -1, 142, 16, -1, 18, 19, 20, 21, 22,
03549 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03550 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03551 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03552 53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
03553 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03554 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03555 -1, -1, -1, 86, 87, -1, 89, 90, -1, 92,
03556 93, -1, 95, 96, 97, 98, 99, 100, 101, 102,
03557 103, -1, -1, -1, -1, -1, 109, -1, -1, -1,
03558 -1, -1, -1, -1, 3, 4, 5, -1, 7, 122,
03559 123, 124, 11, 12, -1, -1, -1, 16, -1, 18,
03560 19, 20, 21, 22, 23, 24, -1, -1, -1, 142,
03561 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
03562 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
03563 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
03564 59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
03565 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03566 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
03567 89, 90, -1, 92, 93, -1, 95, 96, 97, 98,
03568 99, 100, 101, 102, 103, -1, -1, -1, -1, -1,
03569 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
03570 5, -1, 7, 122, 123, 124, 11, 12, -1, -1,
03571 -1, 16, -1, 18, 19, 20, 21, 22, 23, 24,
03572 -1, -1, -1, 142, -1, 30, 31, 32, 33, 34,
03573 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
03574 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
03575 55, 56, 57, 58, 59, 60, -1, 62, 63, 64,
03576 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03577 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03578 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03579 95, 96, 97, 98, 99, 100, 101, 102, 103, -1,
03580 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03581 -1, -1, -1, -1, -1, -1, -1, 122, 123, 124,
03582 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03583 -1, -1, -1, -1, -1, -1, -1, 142, 3, 4,
03584 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
03585 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
03586 25, 26, -1, -1, -1, 30, 31, 32, 33, 34,
03587 35, 36, 37, 38, 39, -1, -1, -1, -1, -1,
03588 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
03589 55, 56, 57, -1, -1, -1, -1, -1, -1, -1,
03590 -1, 66, 67, 68, 69, 70, 71, 72, 73, 74,
03591 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
03592 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03593 95, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03594 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114,
03595 115, 116, 117, 118, 119, 120, 121, -1, 123, 124,
03596 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03597 -1, -1, -1, -1, -1, -1, 141, 3, 4, 5,
03598 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
03599 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
03600 26, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03601 36, 37, 38, 39, -1, -1, -1, -1, -1, 45,
03602 46, 47, 48, 49, 50, 51, 52, 53, 54, -1,
03603 56, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03604 66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
03605 -1, 77, 78, -1, -1, 81, 82, 83, 84, -1,
03606 -1, -1, -1, -1, -1, -1, -1, -1, -1, 95,
03607 -1, -1, 98, -1, -1, -1, -1, -1, -1, -1,
03608 -1, -1, -1, -1, -1, -1, 112, 113, 114, 115,
03609 116, 117, 118, 119, 120, 121, -1, 123, 124, -1,
03610 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03611 -1, -1, -1, -1, -1, 141, 3, 4, 5, 6,
03612 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
03613 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
03614 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
03615 37, 38, 39, -1, -1, -1, -1, -1, 45, 46,
03616 47, 48, 49, 50, 51, 52, 53, -1, -1, 56,
03617 -1, -1, -1, -1, -1, -1, -1, -1, -1, 66,
03618 67, 68, 69, 70, 71, 72, 73, 74, -1, -1,
03619 77, 78, -1, -1, 81, 82, 83, 84, -1, -1,
03620 -1, -1, -1, -1, -1, -1, -1, -1, 95, -1,
03621 -1, 98, -1, -1, -1, -1, -1, -1, -1, -1,
03622 -1, -1, -1, -1, -1, 112, 113, 114, 115, 116,
03623 117, 118, 119, 120, 121, -1, 123, 124, -1, -1,
03624 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03625 -1, -1, -1, -1, 141, 3, 4, 5, 6, 7,
03626 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
03627 18, 19, 20, 21, 22, 23, 24, 25, 26, -1,
03628 -1, -1, 30, 31, 32, 33, 34, 35, 36, 37,
03629 38, 39, -1, -1, -1, -1, -1, 45, 46, 47,
03630 48, 49, 50, 51, 52, 53, -1, -1, 56, -1,
03631 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67,
03632 68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
03633 78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
03634 -1, -1, -1, -1, -1, -1, -1, 95, -1, -1,
03635 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03636 -1, -1, -1, -1, 112, 113, 114, 115, 116, 117,
03637 118, 119, 120, 121, -1, 123, 124, -1, -1, 3,
03638 4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
03639 -1, -1, 16, 141, 18, 19, 20, 21, 22, 23,
03640 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03641 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03642 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03643 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03644 64, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03645 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03646 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03647 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03648 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03649 -1, 3, 4, 5, -1, 7, -1, -1, 122, 11,
03650 12, -1, -1, -1, 16, -1, 18, 19, 20, 21,
03651 22, 23, 24, -1, -1, -1, 140, -1, 30, 31,
03652 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03653 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03654 52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
03655 62, 63, 64, -1, -1, -1, -1, -1, -1, -1,
03656 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03657 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03658 92, 93, -1, -1, -1, 97, 98, 99, 100, 101,
03659 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03660 -1, -1, -1, 3, 4, 5, 6, 7, -1, -1,
03661 122, 11, 12, -1, -1, -1, 16, -1, 18, 19,
03662 20, 21, 22, 23, 24, -1, -1, -1, 140, -1,
03663 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
03664 -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
03665 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
03666 60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
03667 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03668 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
03669 90, -1, 92, 93, -1, 95, -1, 97, 98, 99,
03670 100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
03671 -1, -1, 3, 4, 5, 6, 7, -1, -1, -1,
03672 11, 12, 122, 123, 124, 16, -1, 18, 19, 20,
03673 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03674 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03675 -1, -1, -1, -1, 45, 46, -1, 48, 49, 50,
03676 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03677 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03678 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03679 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03680 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
03681 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03682 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
03683 12, 122, 123, 124, 16, -1, 18, 19, 20, 21,
03684 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03685 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03686 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03687 52, 53, 54, 55, 56, 57, 58, 59, 60, -1,
03688 62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
03689 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03690 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03691 92, 93, -1, 95, 96, 97, 98, 99, 100, 101,
03692 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03693 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
03694 122, 123, 124, 16, -1, 18, 19, 20, 21, 22,
03695 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03696 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03697 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03698 53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
03699 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03700 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03701 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03702 93, -1, 95, 96, 97, 98, 99, 100, 101, 102,
03703 103, -1, -1, -1, -1, -1, -1, -1, -1, 3,
03704 4, 5, -1, 7, -1, -1, -1, 11, 12, 122,
03705 123, 124, 16, -1, 18, 19, 20, 21, 22, 23,
03706 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03707 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03708 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03709 54, 55, 56, 57, 58, 59, 60, -1, 62, 63,
03710 64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
03711 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03712 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03713 -1, 95, -1, 97, 98, 99, 100, 101, 102, 103,
03714 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
03715 5, -1, 7, -1, -1, -1, 11, 12, 122, 123,
03716 124, 16, -1, 18, 19, 20, 21, 22, 23, 24,
03717 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
03718 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
03719 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
03720 55, 56, 57, 58, 59, 60, -1, 62, 63, 64,
03721 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03722 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03723 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03724 -1, 96, 97, 98, 99, 100, 101, 102, 103, -1,
03725 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
03726 -1, 7, -1, -1, -1, 11, 12, 122, 123, 124,
03727 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03728 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03729 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03730 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03731 56, 57, 58, 59, 60, -1, 62, 63, 64, -1,
03732 66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
03733 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03734 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03735 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03736 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
03737 7, -1, -1, -1, 11, 12, 122, 123, 124, 16,
03738 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
03739 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
03740 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
03741 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
03742 57, 58, 59, 60, -1, 62, 63, 64, -1, 66,
03743 67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03744 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
03745 -1, -1, 89, 90, -1, 92, 93, -1, -1, -1,
03746 97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
03747 -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
03748 -1, -1, -1, 11, 12, 122, 123, 124, 16, -1,
03749 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03750 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03751 -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
03752 -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03753 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03754 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03755 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03756 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03757 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03758 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
03759 -1, -1, 11, 12, 122, 123, 124, 16, -1, 18,
03760 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
03761 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
03762 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
03763 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
03764 59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
03765 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03766 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
03767 89, 90, -1, 92, 93, -1, 95, -1, 97, 98,
03768 99, 100, 101, 102, 103, -1, -1, -1, -1, -1,
03769 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
03770 -1, 11, 12, 122, 123, 124, 16, -1, 18, 19,
03771 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
03772 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
03773 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
03774 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
03775 60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
03776 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03777 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
03778 90, -1, 92, 93, -1, 95, -1, 97, 98, 99,
03779 100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
03780 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03781 11, 12, 122, 123, 124, 16, -1, 18, 19, 20,
03782 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03783 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03784 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03785 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03786 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03787 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03788 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03789 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
03790 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03791 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
03792 12, 122, 123, 124, 16, -1, 18, 19, 20, 21,
03793 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03794 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03795 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03796 52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
03797 62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
03798 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03799 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03800 92, 93, -1, 95, -1, 97, 98, 99, 100, 101,
03801 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03802 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
03803 122, 123, 124, 16, -1, 18, 19, 20, 21, 22,
03804 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03805 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03806 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03807 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03808 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03809 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03810 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03811 93, -1, -1, -1, 97, 98, 99, 100, 101, 102,
03812 103, -1, -1, -1, -1, -1, -1, -1, -1, 3,
03813 4, 5, -1, 7, -1, -1, -1, 11, 12, 122,
03814 123, 124, 16, -1, 18, 19, 20, 21, 22, 23,
03815 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03816 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03817 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03818 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03819 64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
03820 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03821 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03822 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03823 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
03824 5, -1, 7, -1, -1, -1, 11, 12, 122, 123,
03825 124, 16, -1, 18, 19, 20, 21, 22, 23, 24,
03826 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
03827 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
03828 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
03829 55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
03830 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03831 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03832 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03833 -1, -1, 97, 98, 99, 100, 101, 102, 103, -1,
03834 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
03835 -1, 7, -1, -1, -1, 11, 12, 122, 123, 124,
03836 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03837 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03838 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03839 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03840 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03841 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03842 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03843 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03844 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03845 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03846 11, 12, -1, -1, -1, 16, 122, 18, 19, 20,
03847 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03848 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03849 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03850 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03851 -1, 62, 63, 64, -1, -1, -1, -1, -1, -1,
03852 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03853 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03854 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
03855 101, 102, 103, -1, -1, -1, -1, 3, 4, 5,
03856 -1, 7, -1, -1, -1, 11, 12, -1, -1, -1,
03857 16, 122, 18, 19, 20, 21, 22, 23, 24, -1,
03858 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03859 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03860 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03861 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03862 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03863 -1, -1, -1, -1, -1, -1, -1, 83, -1, -1,
03864 86, -1, -1, 89, 90, -1, 92, 93, -1, -1,
03865 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03866 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03867 11, 12, -1, -1, -1, 16, 122, 18, 19, 20,
03868 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03869 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03870 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03871 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03872 -1, 62, 63, 64, -1, -1, -1, -1, -1, -1,
03873 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03874 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03875 -1, 92, 93, -1, -1, -1, 97, 98, 99, 100,
03876 101, 102, 103, -1, -1, -1, -1, 3, 4, 5,
03877 -1, 7, -1, -1, -1, 11, 12, -1, -1, -1,
03878 16, 122, 18, 19, 20, 21, 22, 23, 24, -1,
03879 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03880 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03881 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03882 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03883 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03884 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03885 86, -1, -1, 89, 90, -1, 92, 93, -1, -1,
03886 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03887 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03888 11, 12, -1, -1, -1, 16, 122, 18, 19, 20,
03889 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03890 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03891 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03892 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03893 -1, 62, 63, 64, -1, -1, -1, -1, -1, -1,
03894 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03895 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03896 -1, 92, 93, -1, -1, -1, 97, 98, 99, 100,
03897 101, 102, 103, -1, -1, -1, -1, 3, 4, 5,
03898 -1, 7, -1, -1, -1, 11, 12, -1, -1, -1,
03899 16, 122, 18, 19, 20, 21, 22, 23, 24, -1,
03900 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03901 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03902 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03903 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03904 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03905 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03906 86, -1, -1, 89, 90, -1, 92, 93, -1, -1,
03907 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03908 -1, -1, -1, 52, 53, -1, -1, 56, -1, -1,
03909 -1, -1, -1, -1, -1, -1, 122, 66, 67, 68,
03910 69, 70, 71, 72, 73, 74, -1, -1, 77, 78,
03911 -1, -1, 81, 82, 83, 84, -1, -1, -1, -1,
03912 -1, -1, -1, -1, -1, -1, 95, -1, -1, -1,
03913 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03914 -1, -1, -1, 112, 113, 114, 115, 116, 117, 118,
03915 119, 120, 121, -1, 123, 124, -1, -1, -1, -1,
03916 52, 53, -1, -1, 56, -1, -1, -1, -1, -1,
03917 -1, -1, 141, 142, 66, 67, 68, 69, 70, 71,
03918 72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
03919 82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
03920 -1, -1, -1, 95, -1, -1, -1, -1, -1, -1,
03921 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03922 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
03923 -1, 123, 124, -1, -1, -1, -1, 52, 53, -1,
03924 -1, 56, -1, -1, -1, -1, -1, -1, -1, 141,
03925 142, 66, 67, 68, 69, 70, 71, 72, 73, 74,
03926 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
03927 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03928 95, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03929 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114,
03930 115, 116, 117, 118, 119, 120, 121, -1, 123, 124,
03931 -1, -1, -1, -1, 52, 53, -1, -1, 56, -1,
03932 -1, -1, -1, -1, -1, -1, 141, 142, 66, 67,
03933 68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
03934 78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
03935 -1, -1, -1, -1, -1, -1, -1, 95, -1, -1,
03936 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03937 -1, -1, -1, -1, 112, 113, 114, 115, 116, 117,
03938 118, 119, 120, 121, -1, 123, 124, -1, -1, -1,
03939 -1, 52, 53, -1, -1, 56, -1, -1, -1, -1,
03940 -1, -1, -1, 141, 142, 66, 67, 68, 69, 70,
03941 71, 72, 73, 74, -1, -1, 77, 78, -1, -1,
03942 81, 82, 83, 84, -1, -1, -1, -1, -1, -1,
03943 -1, -1, -1, -1, 95, -1, -1, -1, -1, -1,
03944 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03945 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
03946 121, -1, 123, 124, -1, -1, -1, -1, 52, 53,
03947 -1, -1, 56, -1, -1, -1, -1, -1, -1, -1,
03948 141, 142, 66, 67, 68, 69, 70, 71, 72, 73,
03949 74, -1, -1, 77, 78, -1, -1, 81, 82, 83,
03950 84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03951 -1, 95, -1, -1, -1, -1, -1, -1, -1, -1,
03952 -1, -1, -1, -1, -1, -1, -1, -1, 112, 113,
03953 114, 115, 116, 117, 118, 119, 120, 121, -1, 123,
03954 124, -1, -1, -1, -1, 52, 53, -1, -1, 56,
03955 -1, -1, -1, -1, -1, -1, -1, 141, 142, 66,
03956 67, 68, 69, 70, 71, 72, 73, 74, -1, -1,
03957 77, 78, -1, -1, 81, 82, 83, 84, -1, -1,
03958 -1, -1, -1, -1, -1, -1, -1, -1, 95, -1,
03959 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03960 -1, -1, -1, -1, -1, 112, 113, 114, 115, 116,
03961 117, 118, 119, 120, 121, -1, 123, 124, -1, -1,
03962 -1, -1, 52, 53, -1, -1, 56, -1, -1, -1,
03963 -1, -1, -1, -1, 141, 142, 66, 67, 68, 69,
03964 70, 71, 72, 73, 74, -1, -1, 77, 78, -1,
03965 -1, 81, 82, 83, 84, -1, -1, -1, -1, -1,
03966 -1, -1, -1, -1, -1, 95, -1, -1, -1, -1,
03967 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03968 -1, -1, 112, 113, 114, 115, 116, 117, 118, 119,
03969 120, 121, -1, 123, 124, -1, -1, -1, -1, 52,
03970 53, -1, -1, 56, -1, -1, -1, -1, -1, -1,
03971 -1, 141, 142, 66, 67, 68, 69, 70, 71, 72,
03972 73, 74, -1, -1, 77, 78, -1, -1, 81, 82,
03973 83, 84, -1, -1, -1, -1, -1, -1, -1, -1,
03974 -1, -1, 95, -1, -1, -1, -1, -1, -1, -1,
03975 -1, -1, -1, -1, -1, -1, -1, -1, -1, 112,
03976 113, 114, 115, 116, 117, 118, 119, 120, 121, -1,
03977 123, 124, -1, -1, -1, -1, 52, 53, -1, -1,
03978 56, -1, -1, -1, -1, -1, -1, -1, 141, 142,
03979 66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
03980 -1, 77, 78, -1, -1, 81, 82, 83, 84, -1,
03981 -1, -1, -1, -1, -1, -1, -1, -1, -1, 95,
03982 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03983 -1, -1, -1, -1, -1, -1, 112, 113, 114, 115,
03984 116, 117, 118, 119, 120, 121, -1, 123, 124, -1,
03985 -1, -1, -1, 52, 53, -1, -1, 56, -1, -1,
03986 -1, -1, -1, -1, -1, 141, 142, 66, 67, 68,
03987 69, 70, 71, 72, 73, 74, -1, -1, 77, 78,
03988 -1, -1, 81, 82, 83, 84, -1, -1, -1, -1,
03989 -1, -1, -1, -1, -1, -1, 95, -1, -1, -1,
03990 -1, -1, -1, -1, 44, -1, -1, -1, -1, -1,
03991 -1, -1, -1, 112, 113, 114, 115, 116, 117, 118,
03992 119, 120, 121, 44, 123, 124, -1, -1, 68, 69,
03993 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
03994 80, -1, 141, 83, 84, -1, -1, 68, 69, 70,
03995 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
03996 -1, -1, 83, 84, -1, -1, -1, -1, -1, -1,
03997 110, -1, 112, 113, 114, 115, 116, 117, 118, 119,
03998 120, 121, -1, -1, -1, -1, -1, -1, -1, 110,
03999 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
04000 121
04001 };
04002
04003
04004
04005 static const yytype_uint16 yystos[] =
04006 {
04007 0, 149, 150, 0, 1, 3, 4, 5, 6, 7,
04008 11, 12, 16, 18, 19, 20, 21, 22, 23, 24,
04009 30, 31, 32, 33, 34, 35, 36, 39, 45, 46,
04010 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
04011 57, 59, 60, 62, 63, 64, 66, 67, 86, 89,
04012 90, 92, 93, 95, 97, 98, 99, 100, 101, 102,
04013 103, 122, 123, 124, 151, 152, 153, 158, 160, 162,
04014 163, 166, 167, 169, 170, 171, 173, 174, 184, 198,
04015 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
04016 225, 248, 249, 259, 260, 261, 262, 263, 264, 265,
04017 268, 278, 280, 281, 282, 283, 284, 285, 308, 319,
04018 153, 3, 4, 5, 6, 7, 8, 9, 10, 11,
04019 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
04020 22, 23, 24, 25, 26, 30, 31, 32, 33, 34,
04021 35, 36, 37, 38, 39, 45, 46, 47, 48, 49,
04022 50, 51, 52, 53, 56, 66, 67, 68, 69, 70,
04023 71, 72, 73, 74, 77, 78, 81, 82, 83, 84,
04024 95, 112, 113, 114, 115, 116, 117, 118, 119, 120,
04025 121, 123, 124, 141, 177, 178, 179, 180, 182, 183,
04026 278, 280, 39, 58, 86, 89, 95, 96, 123, 166,
04027 174, 184, 186, 191, 194, 196, 215, 282, 284, 285,
04028 306, 307, 191, 191, 142, 192, 193, 142, 188, 192,
04029 142, 147, 313, 54, 179, 313, 154, 136, 21, 22,
04030 30, 31, 32, 184, 215, 308, 184, 56, 1, 89,
04031 156, 157, 158, 168, 169, 319, 160, 187, 196, 306,
04032 319, 186, 305, 306, 319, 46, 86, 122, 140, 173,
04033 198, 215, 282, 285, 241, 242, 54, 55, 57, 177,
04034 271, 279, 270, 271, 272, 146, 266, 146, 269, 59,
04035 60, 162, 184, 184, 145, 147, 312, 317, 318, 40,
04036 41, 42, 43, 44, 37, 38, 28, 246, 109, 140,
04037 89, 95, 170, 109, 68, 69, 70, 71, 72, 73,
04038 74, 75, 76, 77, 78, 79, 80, 83, 84, 110,
04039 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
04040 85, 138, 139, 199, 160, 161, 161, 202, 204, 161,
04041 312, 318, 86, 167, 174, 215, 231, 282, 285, 52,
04042 56, 83, 86, 175, 176, 215, 282, 285, 176, 33,
04043 34, 35, 36, 49, 50, 51, 52, 56, 142, 177,
04044 283, 303, 85, 139, 26, 136, 250, 262, 87, 87,
04045 188, 192, 250, 140, 186, 56, 186, 186, 109, 88,
04046 140, 195, 319, 85, 138, 139, 87, 87, 140, 195,
04047 191, 313, 314, 191, 190, 191, 319, 160, 314, 160,
04048 54, 63, 64, 159, 142, 185, 136, 156, 85, 139,
04049 87, 158, 168, 143, 312, 318, 314, 200, 144, 140,
04050 147, 316, 140, 316, 137, 316, 313, 56, 59, 60,
04051 170, 172, 140, 85, 138, 139, 243, 61, 104, 105,
04052 106, 273, 106, 273, 106, 65, 273, 106, 106, 267,
04053 273, 106, 61, 106, 68, 68, 145, 153, 161, 161,
04054 161, 161, 158, 160, 160, 247, 95, 162, 186, 196,
04055 197, 168, 140, 173, 140, 162, 184, 186, 197, 184,
04056 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
04057 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
04058 184, 184, 184, 184, 184, 52, 53, 56, 182, 188,
04059 309, 310, 190, 52, 53, 56, 182, 188, 309, 155,
04060 156, 13, 227, 317, 227, 161, 161, 312, 17, 253,
04061 56, 85, 138, 139, 25, 160, 52, 56, 175, 1,
04062 113, 286, 317, 85, 138, 139, 211, 304, 212, 85,
04063 139, 311, 52, 56, 309, 309, 252, 251, 162, 184,
04064 162, 184, 94, 164, 181, 184, 186, 95, 186, 194,
04065 306, 52, 56, 190, 52, 56, 307, 314, 143, 314,
04066 314, 179, 201, 184, 151, 137, 309, 309, 184, 314,
04067 158, 314, 306, 140, 172, 52, 56, 190, 52, 56,
04068 52, 54, 55, 56, 57, 89, 95, 96, 116, 119,
04069 142, 244, 289, 290, 291, 292, 293, 294, 297, 298,
04070 299, 300, 301, 275, 274, 146, 273, 146, 184, 184,
04071 76, 114, 236, 237, 319, 186, 140, 314, 172, 140,
04072 44, 313, 87, 87, 188, 192, 313, 315, 87, 87,
04073 188, 189, 192, 319, 10, 226, 8, 255, 319, 156,
04074 13, 156, 27, 228, 317, 228, 253, 196, 226, 52,
04075 56, 190, 52, 56, 206, 209, 317, 287, 208, 52,
04076 56, 175, 190, 155, 160, 142, 288, 289, 213, 189,
04077 192, 189, 192, 236, 236, 44, 165, 179, 186, 195,
04078 87, 87, 315, 87, 87, 160, 137, 316, 170, 315,
04079 109, 52, 89, 95, 232, 233, 234, 291, 289, 29,
04080 107, 245, 140, 302, 319, 140, 302, 52, 140, 302,
04081 52, 276, 54, 55, 57, 277, 285, 52, 145, 235,
04082 238, 293, 295, 296, 299, 301, 319, 156, 95, 186,
04083 172, 184, 111, 162, 184, 162, 184, 164, 144, 87,
04084 162, 184, 162, 184, 164, 186, 197, 256, 319, 15,
04085 230, 319, 14, 229, 230, 230, 203, 205, 226, 140,
04086 227, 315, 161, 317, 161, 155, 315, 226, 314, 289,
04087 155, 317, 177, 156, 156, 184, 236, 87, 314, 186,
04088 234, 140, 291, 140, 314, 238, 156, 156, 292, 297,
04089 299, 301, 293, 294, 299, 293, 156, 109, 52, 239,
04090 240, 290, 238, 114, 140, 302, 140, 302, 140, 302,
04091 10, 186, 184, 162, 184, 88, 257, 319, 156, 9,
04092 258, 319, 161, 226, 226, 156, 156, 186, 156, 228,
04093 210, 317, 226, 314, 226, 214, 10, 137, 156, 314,
04094 233, 140, 95, 232, 314, 10, 137, 140, 302, 140,
04095 302, 140, 302, 140, 302, 302, 137, 86, 215, 140,
04096 114, 296, 299, 293, 295, 299, 293, 86, 174, 215,
04097 282, 285, 227, 156, 227, 226, 226, 230, 253, 254,
04098 207, 155, 288, 137, 140, 233, 140, 291, 293, 299,
04099 293, 293, 56, 85, 240, 140, 302, 140, 302, 302,
04100 140, 302, 302, 56, 85, 138, 139, 156, 156, 156,
04101 226, 155, 233, 140, 302, 140, 302, 302, 302, 52,
04102 56, 293, 299, 293, 293, 52, 56, 190, 52, 56,
04103 255, 229, 226, 226, 233, 293, 302, 140, 302, 302,
04104 302, 315, 302, 293, 302
04105 };
04106
04107 #define yyerrok (yyerrstatus = 0)
04108 #define yyclearin (yychar = YYEMPTY)
04109 #define YYEMPTY (-2)
04110 #define YYEOF 0
04111
04112 #define YYACCEPT goto yyacceptlab
04113 #define YYABORT goto yyabortlab
04114 #define YYERROR goto yyerrorlab
04115
04116
04117
04118
04119
04120
04121
04122
04123
04124 #define YYFAIL goto yyerrlab
04125 #if defined YYFAIL
04126
04127
04128
04129
04130 #endif
04131
04132 #define YYRECOVERING() (!!yyerrstatus)
04133
04134 #define YYBACKUP(Token, Value) \
04135 do \
04136 if (yychar == YYEMPTY && yylen == 1) \
04137 { \
04138 yychar = (Token); \
04139 yylval = (Value); \
04140 yytoken = YYTRANSLATE (yychar); \
04141 YYPOPSTACK (1); \
04142 goto yybackup; \
04143 } \
04144 else \
04145 { \
04146 parser_yyerror (parser, YY_("syntax error: cannot back up")); \
04147 YYERROR; \
04148 } \
04149 while (YYID (0))
04150
04151
04152 #define YYTERROR 1
04153 #define YYERRCODE 256
04154
04155
04156
04157
04158
04159
04160 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
04161 #ifndef YYLLOC_DEFAULT
04162 # define YYLLOC_DEFAULT(Current, Rhs, N) \
04163 do \
04164 if (YYID (N)) \
04165 { \
04166 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
04167 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
04168 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
04169 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
04170 } \
04171 else \
04172 { \
04173 (Current).first_line = (Current).last_line = \
04174 YYRHSLOC (Rhs, 0).last_line; \
04175 (Current).first_column = (Current).last_column = \
04176 YYRHSLOC (Rhs, 0).last_column; \
04177 } \
04178 while (YYID (0))
04179 #endif
04180
04181
04182
04183
04184
04185
04186 #ifndef YY_LOCATION_PRINT
04187 # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
04188 # define YY_LOCATION_PRINT(File, Loc) \
04189 fprintf (File, "%d.%d-%d.%d", \
04190 (Loc).first_line, (Loc).first_column, \
04191 (Loc).last_line, (Loc).last_column)
04192 # else
04193 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
04194 # endif
04195 #endif
04196
04197
04198
04199
04200 #ifdef YYLEX_PARAM
04201 # define YYLEX yylex (&yylval, YYLEX_PARAM)
04202 #else
04203 # define YYLEX yylex (&yylval)
04204 #endif
04205
04206
04207 #if YYDEBUG
04208
04209 # ifndef YYFPRINTF
04210 # include <stdio.h>
04211 # define YYFPRINTF fprintf
04212 # endif
04213
04214 # define YYDPRINTF(Args) \
04215 do { \
04216 if (yydebug) \
04217 YYFPRINTF Args; \
04218 } while (YYID (0))
04219
04220 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
04221 do { \
04222 if (yydebug) \
04223 { \
04224 YYFPRINTF (stderr, "%s ", Title); \
04225 yy_symbol_print (stderr, \
04226 Type, Value, parser); \
04227 YYFPRINTF (stderr, "\n"); \
04228 } \
04229 } while (YYID (0))
04230
04231
04232
04233
04234
04235
04236
04237 #if (defined __STDC__ || defined __C99__FUNC__ \
04238 || defined __cplusplus || defined _MSC_VER)
04239 static void
04240 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04241 #else
04242 static void
04243 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
04244 FILE *yyoutput;
04245 int yytype;
04246 YYSTYPE const * const yyvaluep;
04247 struct parser_params *parser;
04248 #endif
04249 {
04250 if (!yyvaluep)
04251 return;
04252 YYUSE (parser);
04253 # ifdef YYPRINT
04254 if (yytype < YYNTOKENS)
04255 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
04256 # else
04257 YYUSE (yyoutput);
04258 # endif
04259 switch (yytype)
04260 {
04261 default:
04262 break;
04263 }
04264 }
04265
04266
04267
04268
04269
04270
04271 #if (defined __STDC__ || defined __C99__FUNC__ \
04272 || defined __cplusplus || defined _MSC_VER)
04273 static void
04274 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04275 #else
04276 static void
04277 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
04278 FILE *yyoutput;
04279 int yytype;
04280 YYSTYPE const * const yyvaluep;
04281 struct parser_params *parser;
04282 #endif
04283 {
04284 if (yytype < YYNTOKENS)
04285 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
04286 else
04287 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
04288
04289 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
04290 YYFPRINTF (yyoutput, ")");
04291 }
04292
04293
04294
04295
04296
04297
04298 #if (defined __STDC__ || defined __C99__FUNC__ \
04299 || defined __cplusplus || defined _MSC_VER)
04300 static void
04301 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
04302 #else
04303 static void
04304 yy_stack_print (yybottom, yytop)
04305 yytype_int16 *yybottom;
04306 yytype_int16 *yytop;
04307 #endif
04308 {
04309 YYFPRINTF (stderr, "Stack now");
04310 for (; yybottom <= yytop; yybottom++)
04311 {
04312 int yybot = *yybottom;
04313 YYFPRINTF (stderr, " %d", yybot);
04314 }
04315 YYFPRINTF (stderr, "\n");
04316 }
04317
04318 # define YY_STACK_PRINT(Bottom, Top) \
04319 do { \
04320 if (yydebug) \
04321 yy_stack_print ((Bottom), (Top)); \
04322 } while (YYID (0))
04323
04324
04325
04326
04327
04328
04329 #if (defined __STDC__ || defined __C99__FUNC__ \
04330 || defined __cplusplus || defined _MSC_VER)
04331 static void
04332 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
04333 #else
04334 static void
04335 yy_reduce_print (yyvsp, yyrule, parser)
04336 YYSTYPE *yyvsp;
04337 int yyrule;
04338 struct parser_params *parser;
04339 #endif
04340 {
04341 int yynrhs = yyr2[yyrule];
04342 int yyi;
04343 unsigned long int yylno = yyrline[yyrule];
04344 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
04345 yyrule - 1, yylno);
04346
04347 for (yyi = 0; yyi < yynrhs; yyi++)
04348 {
04349 YYFPRINTF (stderr, " $%d = ", yyi + 1);
04350 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
04351 &(yyvsp[(yyi + 1) - (yynrhs)])
04352 , parser);
04353 YYFPRINTF (stderr, "\n");
04354 }
04355 }
04356
04357 # define YY_REDUCE_PRINT(Rule) \
04358 do { \
04359 if (yydebug) \
04360 yy_reduce_print (yyvsp, Rule, parser); \
04361 } while (YYID (0))
04362
04363
04364
04365 #ifndef yydebug
04366 int yydebug;
04367 #endif
04368 #else
04369 # define YYDPRINTF(Args)
04370 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
04371 # define YY_STACK_PRINT(Bottom, Top)
04372 # define YY_REDUCE_PRINT(Rule)
04373 #endif
04374
04375
04376
04377 #ifndef YYINITDEPTH
04378 # define YYINITDEPTH 200
04379 #endif
04380
04381
04382
04383
04384
04385
04386
04387
04388 #ifndef YYMAXDEPTH
04389 # define YYMAXDEPTH 10000
04390 #endif
04391
04392
04393
04394 #if YYERROR_VERBOSE
04395
04396 # ifndef yystrlen
04397 # if defined __GLIBC__ && defined _STRING_H
04398 # define yystrlen strlen
04399 # else
04400
04401 #if (defined __STDC__ || defined __C99__FUNC__ \
04402 || defined __cplusplus || defined _MSC_VER)
04403 static YYSIZE_T
04404 yystrlen (const char *yystr)
04405 #else
04406 static YYSIZE_T
04407 yystrlen (yystr)
04408 const char *yystr;
04409 #endif
04410 {
04411 YYSIZE_T yylen;
04412 for (yylen = 0; yystr[yylen]; yylen++)
04413 continue;
04414 return yylen;
04415 }
04416 # endif
04417 # endif
04418
04419 # ifndef yystpcpy
04420 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
04421 # define yystpcpy stpcpy
04422 # else
04423
04424
04425 #if (defined __STDC__ || defined __C99__FUNC__ \
04426 || defined __cplusplus || defined _MSC_VER)
04427 static char *
04428 yystpcpy (char *yydest, const char *yysrc)
04429 #else
04430 static char *
04431 yystpcpy (yydest, yysrc)
04432 char *yydest;
04433 const char *yysrc;
04434 #endif
04435 {
04436 char *yyd = yydest;
04437 const char *yys = yysrc;
04438
04439 while ((*yyd++ = *yys++) != '\0')
04440 continue;
04441
04442 return yyd - 1;
04443 }
04444 # endif
04445 # endif
04446
04447 # ifndef yytnamerr
04448
04449
04450
04451
04452
04453
04454
04455 static YYSIZE_T
04456 yytnamerr (char *yyres, const char *yystr)
04457 {
04458 if (*yystr == '"')
04459 {
04460 YYSIZE_T yyn = 0;
04461 char const *yyp = yystr;
04462
04463 for (;;)
04464 switch (*++yyp)
04465 {
04466 case '\'':
04467 case ',':
04468 goto do_not_strip_quotes;
04469
04470 case '\\':
04471 if (*++yyp != '\\')
04472 goto do_not_strip_quotes;
04473
04474 default:
04475 if (yyres)
04476 yyres[yyn] = *yyp;
04477 yyn++;
04478 break;
04479
04480 case '"':
04481 if (yyres)
04482 yyres[yyn] = '\0';
04483 return yyn;
04484 }
04485 do_not_strip_quotes: ;
04486 }
04487
04488 if (! yyres)
04489 return yystrlen (yystr);
04490
04491 return yystpcpy (yyres, yystr) - yyres;
04492 }
04493 # endif
04494
04495
04496
04497
04498
04499
04500
04501
04502 static YYSIZE_T
04503 yysyntax_error (char *yyresult, int yystate, int yychar)
04504 {
04505 int yyn = yypact[yystate];
04506
04507 if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
04508 return 0;
04509 else
04510 {
04511 int yytype = YYTRANSLATE (yychar);
04512 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
04513 YYSIZE_T yysize = yysize0;
04514 YYSIZE_T yysize1;
04515 int yysize_overflow = 0;
04516 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
04517 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
04518 int yyx;
04519
04520 # if 0
04521
04522
04523 YY_("syntax error, unexpected %s");
04524 YY_("syntax error, unexpected %s, expecting %s");
04525 YY_("syntax error, unexpected %s, expecting %s or %s");
04526 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
04527 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
04528 # endif
04529 char *yyfmt;
04530 char const *yyf;
04531 static char const yyunexpected[] = "syntax error, unexpected %s";
04532 static char const yyexpecting[] = ", expecting %s";
04533 static char const yyor[] = " or %s";
04534 char yyformat[sizeof yyunexpected
04535 + sizeof yyexpecting - 1
04536 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
04537 * (sizeof yyor - 1))];
04538 char const *yyprefix = yyexpecting;
04539
04540
04541
04542 int yyxbegin = yyn < 0 ? -yyn : 0;
04543
04544
04545 int yychecklim = YYLAST - yyn + 1;
04546 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
04547 int yycount = 1;
04548
04549 yyarg[0] = yytname[yytype];
04550 yyfmt = yystpcpy (yyformat, yyunexpected);
04551
04552 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
04553 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
04554 {
04555 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
04556 {
04557 yycount = 1;
04558 yysize = yysize0;
04559 yyformat[sizeof yyunexpected - 1] = '\0';
04560 break;
04561 }
04562 yyarg[yycount++] = yytname[yyx];
04563 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
04564 yysize_overflow |= (yysize1 < yysize);
04565 yysize = yysize1;
04566 yyfmt = yystpcpy (yyfmt, yyprefix);
04567 yyprefix = yyor;
04568 }
04569
04570 yyf = YY_(yyformat);
04571 yysize1 = yysize + yystrlen (yyf);
04572 yysize_overflow |= (yysize1 < yysize);
04573 yysize = yysize1;
04574
04575 if (yysize_overflow)
04576 return YYSIZE_MAXIMUM;
04577
04578 if (yyresult)
04579 {
04580
04581
04582
04583 char *yyp = yyresult;
04584 int yyi = 0;
04585 while ((*yyp = *yyf) != '\0')
04586 {
04587 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
04588 {
04589 yyp += yytnamerr (yyp, yyarg[yyi++]);
04590 yyf += 2;
04591 }
04592 else
04593 {
04594 yyp++;
04595 yyf++;
04596 }
04597 }
04598 }
04599 return yysize;
04600 }
04601 }
04602 #endif
04603
04604
04605
04606
04607
04608
04609
04610 #if (defined __STDC__ || defined __C99__FUNC__ \
04611 || defined __cplusplus || defined _MSC_VER)
04612 static void
04613 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
04614 #else
04615 static void
04616 yydestruct (yymsg, yytype, yyvaluep, parser)
04617 const char *yymsg;
04618 int yytype;
04619 YYSTYPE *yyvaluep;
04620 struct parser_params *parser;
04621 #endif
04622 {
04623 YYUSE (yyvaluep);
04624 YYUSE (parser);
04625
04626 if (!yymsg)
04627 yymsg = "Deleting";
04628 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
04629
04630 switch (yytype)
04631 {
04632
04633 default:
04634 break;
04635 }
04636 }
04637
04638
04639 #ifdef YYPARSE_PARAM
04640 #if defined __STDC__ || defined __cplusplus
04641 int yyparse (void *YYPARSE_PARAM);
04642 #else
04643 int yyparse ();
04644 #endif
04645 #else
04646 #if defined __STDC__ || defined __cplusplus
04647 int yyparse (struct parser_params *parser);
04648 #else
04649 int yyparse ();
04650 #endif
04651 #endif
04652
04653
04654
04655
04656
04657
04658
04659
04660
04661 #ifdef YYPARSE_PARAM
04662 #if (defined __STDC__ || defined __C99__FUNC__ \
04663 || defined __cplusplus || defined _MSC_VER)
04664 int
04665 yyparse (void *YYPARSE_PARAM)
04666 #else
04667 int
04668 yyparse (YYPARSE_PARAM)
04669 void *YYPARSE_PARAM;
04670 #endif
04671 #else
04672 #if (defined __STDC__ || defined __C99__FUNC__ \
04673 || defined __cplusplus || defined _MSC_VER)
04674 int
04675 yyparse (struct parser_params *parser)
04676 #else
04677 int
04678 yyparse (parser)
04679 struct parser_params *parser;
04680 #endif
04681 #endif
04682 {
04683
04684 int yychar;
04685
04686
04687 YYSTYPE yylval;
04688
04689
04690 int yynerrs;
04691
04692 int yystate;
04693
04694 int yyerrstatus;
04695
04696
04697
04698
04699
04700
04701
04702
04703
04704 yytype_int16 yyssa[YYINITDEPTH];
04705 yytype_int16 *yyss;
04706 yytype_int16 *yyssp;
04707
04708
04709 YYSTYPE yyvsa[YYINITDEPTH];
04710 YYSTYPE *yyvs;
04711 YYSTYPE *yyvsp;
04712
04713 YYSIZE_T yystacksize;
04714
04715 int yyn;
04716 int yyresult;
04717
04718 int yytoken;
04719
04720
04721 YYSTYPE yyval;
04722
04723 #if YYERROR_VERBOSE
04724
04725 char yymsgbuf[128];
04726 char *yymsg = yymsgbuf;
04727 YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
04728 #endif
04729
04730 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
04731
04732
04733
04734 int yylen = 0;
04735
04736 yytoken = 0;
04737 yyss = yyssa;
04738 yyvs = yyvsa;
04739 yystacksize = YYINITDEPTH;
04740
04741 YYDPRINTF ((stderr, "Starting parse\n"));
04742
04743 yystate = 0;
04744 yyerrstatus = 0;
04745 yynerrs = 0;
04746 yychar = YYEMPTY;
04747
04748
04749
04750
04751
04752 yyssp = yyss;
04753 yyvsp = yyvs;
04754
04755 goto yysetstate;
04756
04757
04758
04759
04760 yynewstate:
04761
04762
04763 yyssp++;
04764
04765 yysetstate:
04766 *yyssp = yystate;
04767
04768 if (yyss + yystacksize - 1 <= yyssp)
04769 {
04770
04771 YYSIZE_T yysize = yyssp - yyss + 1;
04772
04773 #ifdef yyoverflow
04774 {
04775
04776
04777
04778 YYSTYPE *yyvs1 = yyvs;
04779 yytype_int16 *yyss1 = yyss;
04780
04781
04782
04783
04784
04785 yyoverflow (YY_("memory exhausted"),
04786 &yyss1, yysize * sizeof (*yyssp),
04787 &yyvs1, yysize * sizeof (*yyvsp),
04788 &yystacksize);
04789
04790 yyss = yyss1;
04791 yyvs = yyvs1;
04792 }
04793 #else
04794 # ifndef YYSTACK_RELOCATE
04795 goto yyexhaustedlab;
04796 # else
04797
04798 if (YYMAXDEPTH <= yystacksize)
04799 goto yyexhaustedlab;
04800 yystacksize *= 2;
04801 if (YYMAXDEPTH < yystacksize)
04802 yystacksize = YYMAXDEPTH;
04803
04804 {
04805 yytype_int16 *yyss1 = yyss;
04806 union yyalloc *yyptr =
04807 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
04808 if (! yyptr)
04809 goto yyexhaustedlab;
04810 YYSTACK_RELOCATE (yyss_alloc, yyss);
04811 YYSTACK_RELOCATE (yyvs_alloc, yyvs);
04812 # undef YYSTACK_RELOCATE
04813 if (yyss1 != yyssa)
04814 YYSTACK_FREE (yyss1);
04815 }
04816 # endif
04817 #endif
04818
04819 yyssp = yyss + yysize - 1;
04820 yyvsp = yyvs + yysize - 1;
04821
04822 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
04823 (unsigned long int) yystacksize));
04824
04825 if (yyss + yystacksize - 1 <= yyssp)
04826 YYABORT;
04827 }
04828
04829 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
04830
04831 if (yystate == YYFINAL)
04832 YYACCEPT;
04833
04834 goto yybackup;
04835
04836
04837
04838
04839 yybackup:
04840
04841
04842
04843
04844
04845 yyn = yypact[yystate];
04846 if (yyn == YYPACT_NINF)
04847 goto yydefault;
04848
04849
04850
04851
04852 if (yychar == YYEMPTY)
04853 {
04854 YYDPRINTF ((stderr, "Reading a token: "));
04855 yychar = YYLEX;
04856 }
04857
04858 if (yychar <= YYEOF)
04859 {
04860 yychar = yytoken = YYEOF;
04861 YYDPRINTF ((stderr, "Now at end of input.\n"));
04862 }
04863 else
04864 {
04865 yytoken = YYTRANSLATE (yychar);
04866 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
04867 }
04868
04869
04870
04871 yyn += yytoken;
04872 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
04873 goto yydefault;
04874 yyn = yytable[yyn];
04875 if (yyn <= 0)
04876 {
04877 if (yyn == 0 || yyn == YYTABLE_NINF)
04878 goto yyerrlab;
04879 yyn = -yyn;
04880 goto yyreduce;
04881 }
04882
04883
04884
04885 if (yyerrstatus)
04886 yyerrstatus--;
04887
04888
04889 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
04890
04891
04892 yychar = YYEMPTY;
04893
04894 yystate = yyn;
04895 *++yyvsp = yylval;
04896
04897 goto yynewstate;
04898
04899
04900
04901
04902
04903 yydefault:
04904 yyn = yydefact[yystate];
04905 if (yyn == 0)
04906 goto yyerrlab;
04907 goto yyreduce;
04908
04909
04910
04911
04912
04913 yyreduce:
04914
04915 yylen = yyr2[yyn];
04916
04917
04918
04919
04920
04921
04922
04923
04924
04925 yyval = yyvsp[1-yylen];
04926
04927
04928 YY_REDUCE_PRINT (yyn);
04929 switch (yyn)
04930 {
04931 case 2:
04932
04933
04934 #line 786 "parse.y"
04935 {
04936 lex_state = EXPR_BEG;
04937
04938 local_push(compile_for_eval || rb_parse_in_main());
04939
04940
04941
04942 ;}
04943 break;
04944
04945 case 3:
04946
04947
04948 #line 795 "parse.y"
04949 {
04950
04951 if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
04952
04953 if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
04954 else {
04955 NODE *node = (yyvsp[(2) - (2)].node);
04956 while (node->nd_next) {
04957 node = node->nd_next;
04958 }
04959 void_expr(node->nd_head);
04960 }
04961 }
04962 ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
04963
04964
04965
04966
04967 local_pop();
04968 ;}
04969 break;
04970
04971 case 4:
04972
04973
04974 #line 818 "parse.y"
04975 {
04976
04977 void_stmts((yyvsp[(1) - (2)].node));
04978 fixup_nodes(&deferred_nodes);
04979
04980
04981 (yyval.node) = (yyvsp[(1) - (2)].node);
04982 ;}
04983 break;
04984
04985 case 5:
04986
04987
04988 #line 829 "parse.y"
04989 {
04990
04991 (yyval.node) = NEW_BEGIN(0);
04992
04993
04994
04995
04996 ;}
04997 break;
04998
04999 case 6:
05000
05001
05002 #line 838 "parse.y"
05003 {
05004
05005 (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05006
05007
05008
05009 ;}
05010 break;
05011
05012 case 7:
05013
05014
05015 #line 846 "parse.y"
05016 {
05017
05018 (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05019
05020
05021
05022 ;}
05023 break;
05024
05025 case 8:
05026
05027
05028 #line 854 "parse.y"
05029 {
05030 (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05031 ;}
05032 break;
05033
05034 case 10:
05035
05036
05037 #line 861 "parse.y"
05038 {
05039 if (in_def || in_single) {
05040 yyerror("BEGIN in method");
05041 }
05042
05043
05044
05045
05046 ;}
05047 break;
05048
05049 case 11:
05050
05051
05052 #line 871 "parse.y"
05053 {
05054
05055 ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
05056 (yyvsp[(4) - (5)].node));
05057
05058
05059 (yyval.node) = NEW_BEGIN(0);
05060
05061
05062
05063 ;}
05064 break;
05065
05066 case 12:
05067
05068
05069 #line 888 "parse.y"
05070 {
05071
05072 (yyval.node) = (yyvsp[(1) - (4)].node);
05073 if ((yyvsp[(2) - (4)].node)) {
05074 (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
05075 }
05076 else if ((yyvsp[(3) - (4)].node)) {
05077 rb_warn0("else without rescue is useless");
05078 (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
05079 }
05080 if ((yyvsp[(4) - (4)].node)) {
05081 if ((yyval.node)) {
05082 (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
05083 }
05084 else {
05085 (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
05086 }
05087 }
05088 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05089
05090
05091
05092
05093
05094
05095
05096 ;}
05097 break;
05098
05099 case 13:
05100
05101
05102 #line 918 "parse.y"
05103 {
05104
05105 void_stmts((yyvsp[(1) - (2)].node));
05106 fixup_nodes(&deferred_nodes);
05107
05108
05109 (yyval.node) = (yyvsp[(1) - (2)].node);
05110 ;}
05111 break;
05112
05113 case 14:
05114
05115
05116 #line 929 "parse.y"
05117 {
05118
05119 (yyval.node) = NEW_BEGIN(0);
05120
05121
05122
05123
05124 ;}
05125 break;
05126
05127 case 15:
05128
05129
05130 #line 938 "parse.y"
05131 {
05132
05133 (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05134
05135
05136
05137 ;}
05138 break;
05139
05140 case 16:
05141
05142
05143 #line 946 "parse.y"
05144 {
05145
05146 (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05147
05148
05149
05150 ;}
05151 break;
05152
05153 case 17:
05154
05155
05156 #line 954 "parse.y"
05157 {
05158 (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05159 ;}
05160 break;
05161
05162 case 18:
05163
05164
05165 #line 959 "parse.y"
05166 {lex_state = EXPR_FNAME;;}
05167 break;
05168
05169 case 19:
05170
05171
05172 #line 960 "parse.y"
05173 {
05174
05175 (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
05176
05177
05178
05179 ;}
05180 break;
05181
05182 case 20:
05183
05184
05185 #line 968 "parse.y"
05186 {
05187
05188 (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
05189
05190
05191
05192 ;}
05193 break;
05194
05195 case 21:
05196
05197
05198 #line 976 "parse.y"
05199 {
05200
05201 char buf[2];
05202 buf[0] = '$';
05203 buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
05204 (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
05205
05206
05207
05208 ;}
05209 break;
05210
05211 case 22:
05212
05213
05214 #line 987 "parse.y"
05215 {
05216
05217 yyerror("can't make alias for the number variables");
05218 (yyval.node) = NEW_BEGIN(0);
05219
05220
05221
05222
05223 ;}
05224 break;
05225
05226 case 23:
05227
05228
05229 #line 997 "parse.y"
05230 {
05231
05232 (yyval.node) = (yyvsp[(2) - (2)].node);
05233
05234
05235
05236 ;}
05237 break;
05238
05239 case 24:
05240
05241
05242 #line 1005 "parse.y"
05243 {
05244
05245 (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05246 fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05247
05248
05249
05250 ;}
05251 break;
05252
05253 case 25:
05254
05255
05256 #line 1014 "parse.y"
05257 {
05258
05259 (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05260 fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05261
05262
05263
05264 ;}
05265 break;
05266
05267 case 26:
05268
05269
05270 #line 1023 "parse.y"
05271 {
05272
05273 if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05274 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05275 }
05276 else {
05277 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05278 }
05279
05280
05281
05282 ;}
05283 break;
05284
05285 case 27:
05286
05287
05288 #line 1036 "parse.y"
05289 {
05290
05291 if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05292 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05293 }
05294 else {
05295 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05296 }
05297
05298
05299
05300 ;}
05301 break;
05302
05303 case 28:
05304
05305
05306 #line 1049 "parse.y"
05307 {
05308
05309 NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
05310 (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
05311
05312
05313
05314 ;}
05315 break;
05316
05317 case 29:
05318
05319
05320 #line 1058 "parse.y"
05321 {
05322 if (in_def || in_single) {
05323 rb_warn0("END in method; use at_exit");
05324 }
05325
05326 (yyval.node) = NEW_POSTEXE(NEW_NODE(
05327 NODE_SCOPE, 0 , (yyvsp[(3) - (4)].node) , 0 ));
05328
05329
05330
05331 ;}
05332 break;
05333
05334 case 30:
05335
05336
05337 #line 1070 "parse.y"
05338 {
05339
05340 value_expr((yyvsp[(3) - (3)].node));
05341 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05342
05343
05344
05345 ;}
05346 break;
05347
05348 case 31:
05349
05350
05351 #line 1079 "parse.y"
05352 {
05353
05354 value_expr((yyvsp[(3) - (3)].node));
05355 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05356 (yyval.node) = (yyvsp[(1) - (3)].node);
05357
05358
05359
05360 ;}
05361 break;
05362
05363 case 32:
05364
05365
05366 #line 1089 "parse.y"
05367 {
05368
05369 value_expr((yyvsp[(3) - (3)].node));
05370 if ((yyvsp[(1) - (3)].node)) {
05371 ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
05372 if ((yyvsp[(2) - (3)].id) == tOROP) {
05373 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05374 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
05375 if (is_asgn_or_id(vid)) {
05376 (yyval.node)->nd_aid = vid;
05377 }
05378 }
05379 else if ((yyvsp[(2) - (3)].id) == tANDOP) {
05380 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05381 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
05382 }
05383 else {
05384 (yyval.node) = (yyvsp[(1) - (3)].node);
05385 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
05386 }
05387 }
05388 else {
05389 (yyval.node) = NEW_BEGIN(0);
05390 }
05391
05392
05393
05394 ;}
05395 break;
05396
05397 case 33:
05398
05399
05400 #line 1118 "parse.y"
05401 {
05402
05403 NODE *args;
05404
05405 value_expr((yyvsp[(6) - (6)].node));
05406 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
05407 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
05408 if ((yyvsp[(5) - (6)].id) == tOROP) {
05409 (yyvsp[(5) - (6)].id) = 0;
05410 }
05411 else if ((yyvsp[(5) - (6)].id) == tANDOP) {
05412 (yyvsp[(5) - (6)].id) = 1;
05413 }
05414 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
05415 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
05416
05417
05418
05419
05420 ;}
05421 break;
05422
05423 case 34:
05424
05425
05426 #line 1139 "parse.y"
05427 {
05428
05429 value_expr((yyvsp[(5) - (5)].node));
05430 if ((yyvsp[(4) - (5)].id) == tOROP) {
05431 (yyvsp[(4) - (5)].id) = 0;
05432 }
05433 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05434 (yyvsp[(4) - (5)].id) = 1;
05435 }
05436 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05437 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05438
05439
05440
05441
05442 ;}
05443 break;
05444
05445 case 35:
05446
05447
05448 #line 1156 "parse.y"
05449 {
05450
05451 value_expr((yyvsp[(5) - (5)].node));
05452 if ((yyvsp[(4) - (5)].id) == tOROP) {
05453 (yyvsp[(4) - (5)].id) = 0;
05454 }
05455 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05456 (yyvsp[(4) - (5)].id) = 1;
05457 }
05458 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05459 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05460
05461
05462
05463
05464 ;}
05465 break;
05466
05467 case 36:
05468
05469
05470 #line 1173 "parse.y"
05471 {
05472 yyerror("constant re-assignment");
05473 (yyval.node) = 0;
05474 ;}
05475 break;
05476
05477 case 37:
05478
05479
05480 #line 1178 "parse.y"
05481 {
05482
05483 value_expr((yyvsp[(5) - (5)].node));
05484 if ((yyvsp[(4) - (5)].id) == tOROP) {
05485 (yyvsp[(4) - (5)].id) = 0;
05486 }
05487 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05488 (yyvsp[(4) - (5)].id) = 1;
05489 }
05490 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05491 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05492
05493
05494
05495
05496 ;}
05497 break;
05498
05499 case 38:
05500
05501
05502 #line 1195 "parse.y"
05503 {
05504
05505 rb_backref_error((yyvsp[(1) - (3)].node));
05506 (yyval.node) = NEW_BEGIN(0);
05507
05508
05509
05510
05511 ;}
05512 break;
05513
05514 case 39:
05515
05516
05517 #line 1205 "parse.y"
05518 {
05519
05520 value_expr((yyvsp[(3) - (3)].node));
05521 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05522
05523
05524
05525 ;}
05526 break;
05527
05528 case 40:
05529
05530
05531 #line 1214 "parse.y"
05532 {
05533
05534 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05535 (yyval.node) = (yyvsp[(1) - (3)].node);
05536
05537
05538
05539 ;}
05540 break;
05541
05542 case 41:
05543
05544
05545 #line 1223 "parse.y"
05546 {
05547
05548 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05549 (yyval.node) = (yyvsp[(1) - (3)].node);
05550
05551
05552
05553 ;}
05554 break;
05555
05556 case 44:
05557
05558
05559 #line 1236 "parse.y"
05560 {
05561
05562 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05563
05564
05565
05566 ;}
05567 break;
05568
05569 case 45:
05570
05571
05572 #line 1244 "parse.y"
05573 {
05574
05575 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05576
05577
05578
05579 ;}
05580 break;
05581
05582 case 46:
05583
05584
05585 #line 1252 "parse.y"
05586 {
05587
05588 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
05589
05590
05591
05592 ;}
05593 break;
05594
05595 case 47:
05596
05597
05598 #line 1260 "parse.y"
05599 {
05600
05601 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
05602
05603
05604
05605 ;}
05606 break;
05607
05608 case 49:
05609
05610
05611 #line 1271 "parse.y"
05612 {
05613
05614 value_expr((yyvsp[(1) - (1)].node));
05615 (yyval.node) = (yyvsp[(1) - (1)].node);
05616 if (!(yyval.node)) (yyval.node) = NEW_NIL();
05617
05618
05619
05620 ;}
05621 break;
05622
05623 case 53:
05624
05625
05626 #line 1288 "parse.y"
05627 {
05628
05629 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05630
05631
05632
05633
05634 ;}
05635 break;
05636
05637 case 54:
05638
05639
05640 #line 1297 "parse.y"
05641 {
05642
05643 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05644
05645
05646
05647
05648 ;}
05649 break;
05650
05651 case 55:
05652
05653
05654 #line 1308 "parse.y"
05655 {
05656 (yyvsp[(1) - (1)].vars) = dyna_push();
05657
05658 (yyval.num) = ruby_sourceline;
05659
05660
05661 ;}
05662 break;
05663
05664 case 56:
05665
05666
05667 #line 1318 "parse.y"
05668 {
05669
05670 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
05671 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
05672
05673
05674
05675 dyna_pop((yyvsp[(1) - (5)].vars));
05676 ;}
05677 break;
05678
05679 case 57:
05680
05681
05682 #line 1330 "parse.y"
05683 {
05684
05685 (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
05686 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05687
05688
05689
05690 ;}
05691 break;
05692
05693 case 58:
05694
05695
05696 #line 1339 "parse.y"
05697 {
05698
05699 block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
05700 (yyvsp[(3) - (3)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].node));
05701 (yyval.node) = (yyvsp[(3) - (3)].node);
05702 fixpos((yyval.node), (yyvsp[(2) - (3)].node));
05703
05704
05705
05706
05707 ;}
05708 break;
05709
05710 case 59:
05711
05712
05713 #line 1351 "parse.y"
05714 {
05715
05716 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05717 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05718
05719
05720
05721 ;}
05722 break;
05723
05724 case 60:
05725
05726
05727 #line 1360 "parse.y"
05728 {
05729
05730 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05731 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05732 (yyval.node) = (yyvsp[(5) - (5)].node);
05733 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05734
05735
05736
05737
05738 ;}
05739 break;
05740
05741 case 61:
05742
05743
05744 #line 1372 "parse.y"
05745 {
05746
05747 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05748 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05749
05750
05751
05752 ;}
05753 break;
05754
05755 case 62:
05756
05757
05758 #line 1381 "parse.y"
05759 {
05760
05761 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05762 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05763 (yyval.node) = (yyvsp[(5) - (5)].node);
05764 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05765
05766
05767
05768
05769 ;}
05770 break;
05771
05772 case 63:
05773
05774
05775 #line 1393 "parse.y"
05776 {
05777
05778 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
05779 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05780
05781
05782
05783 ;}
05784 break;
05785
05786 case 64:
05787
05788
05789 #line 1402 "parse.y"
05790 {
05791
05792 (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
05793 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05794
05795
05796
05797 ;}
05798 break;
05799
05800 case 65:
05801
05802
05803 #line 1411 "parse.y"
05804 {
05805
05806 (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
05807
05808
05809
05810 ;}
05811 break;
05812
05813 case 66:
05814
05815
05816 #line 1419 "parse.y"
05817 {
05818
05819 (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
05820
05821
05822
05823 ;}
05824 break;
05825
05826 case 67:
05827
05828
05829 #line 1427 "parse.y"
05830 {
05831
05832 (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
05833
05834
05835
05836 ;}
05837 break;
05838
05839 case 69:
05840
05841
05842 #line 1438 "parse.y"
05843 {
05844
05845 (yyval.node) = (yyvsp[(2) - (3)].node);
05846
05847
05848
05849 ;}
05850 break;
05851
05852 case 71:
05853
05854
05855 #line 1449 "parse.y"
05856 {
05857
05858 (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
05859
05860
05861
05862 ;}
05863 break;
05864
05865 case 72:
05866
05867
05868 #line 1459 "parse.y"
05869 {
05870
05871 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
05872
05873
05874
05875 ;}
05876 break;
05877
05878 case 73:
05879
05880
05881 #line 1467 "parse.y"
05882 {
05883
05884 (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
05885
05886
05887
05888 ;}
05889 break;
05890
05891 case 74:
05892
05893
05894 #line 1475 "parse.y"
05895 {
05896
05897 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05898
05899
05900
05901 ;}
05902 break;
05903
05904 case 75:
05905
05906
05907 #line 1483 "parse.y"
05908 {
05909
05910 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
05911
05912
05913
05914
05915 ;}
05916 break;
05917
05918 case 76:
05919
05920
05921 #line 1492 "parse.y"
05922 {
05923
05924 (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
05925
05926
05927
05928 ;}
05929 break;
05930
05931 case 77:
05932
05933
05934 #line 1500 "parse.y"
05935 {
05936
05937 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
05938
05939
05940
05941 ;}
05942 break;
05943
05944 case 78:
05945
05946
05947 #line 1508 "parse.y"
05948 {
05949
05950 (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
05951
05952
05953
05954 ;}
05955 break;
05956
05957 case 79:
05958
05959
05960 #line 1516 "parse.y"
05961 {
05962
05963 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
05964
05965
05966
05967 ;}
05968 break;
05969
05970 case 80:
05971
05972
05973 #line 1524 "parse.y"
05974 {
05975
05976 (yyval.node) = NEW_MASGN(0, -1);
05977
05978
05979
05980 ;}
05981 break;
05982
05983 case 81:
05984
05985
05986 #line 1532 "parse.y"
05987 {
05988
05989 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
05990
05991
05992
05993 ;}
05994 break;
05995
05996 case 83:
05997
05998
05999 #line 1543 "parse.y"
06000 {
06001
06002 (yyval.node) = (yyvsp[(2) - (3)].node);
06003
06004
06005
06006 ;}
06007 break;
06008
06009 case 84:
06010
06011
06012 #line 1553 "parse.y"
06013 {
06014
06015 (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
06016
06017
06018
06019 ;}
06020 break;
06021
06022 case 85:
06023
06024
06025 #line 1561 "parse.y"
06026 {
06027
06028 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
06029
06030
06031
06032 ;}
06033 break;
06034
06035 case 86:
06036
06037
06038 #line 1571 "parse.y"
06039 {
06040
06041 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
06042
06043
06044
06045 ;}
06046 break;
06047
06048 case 87:
06049
06050
06051 #line 1579 "parse.y"
06052 {
06053
06054 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06055
06056
06057
06058 ;}
06059 break;
06060
06061 case 88:
06062
06063
06064 #line 1589 "parse.y"
06065 {
06066 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06067 ;}
06068 break;
06069
06070 case 89:
06071
06072
06073 #line 1593 "parse.y"
06074 {
06075
06076 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06077
06078
06079
06080 ;}
06081 break;
06082
06083 case 90:
06084
06085
06086 #line 1601 "parse.y"
06087 {
06088
06089 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06090
06091
06092
06093 ;}
06094 break;
06095
06096 case 91:
06097
06098
06099 #line 1609 "parse.y"
06100 {
06101
06102 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06103
06104
06105
06106 ;}
06107 break;
06108
06109 case 92:
06110
06111
06112 #line 1617 "parse.y"
06113 {
06114
06115 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06116
06117
06118
06119 ;}
06120 break;
06121
06122 case 93:
06123
06124
06125 #line 1625 "parse.y"
06126 {
06127
06128 if (in_def || in_single)
06129 yyerror("dynamic constant assignment");
06130 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06131
06132
06133
06134
06135
06136 ;}
06137 break;
06138
06139 case 94:
06140
06141
06142 #line 1637 "parse.y"
06143 {
06144
06145 if (in_def || in_single)
06146 yyerror("dynamic constant assignment");
06147 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06148
06149
06150
06151 ;}
06152 break;
06153
06154 case 95:
06155
06156
06157 #line 1647 "parse.y"
06158 {
06159
06160 rb_backref_error((yyvsp[(1) - (1)].node));
06161 (yyval.node) = NEW_BEGIN(0);
06162
06163
06164
06165
06166 ;}
06167 break;
06168
06169 case 96:
06170
06171
06172 #line 1659 "parse.y"
06173 {
06174 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06175
06176 if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06177
06178
06179
06180 ;}
06181 break;
06182
06183 case 97:
06184
06185
06186 #line 1668 "parse.y"
06187 {
06188
06189 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06190
06191
06192
06193 ;}
06194 break;
06195
06196 case 98:
06197
06198
06199 #line 1676 "parse.y"
06200 {
06201
06202 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06203
06204
06205
06206 ;}
06207 break;
06208
06209 case 99:
06210
06211
06212 #line 1684 "parse.y"
06213 {
06214
06215 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06216
06217
06218
06219 ;}
06220 break;
06221
06222 case 100:
06223
06224
06225 #line 1692 "parse.y"
06226 {
06227
06228 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06229
06230
06231
06232 ;}
06233 break;
06234
06235 case 101:
06236
06237
06238 #line 1700 "parse.y"
06239 {
06240
06241 if (in_def || in_single)
06242 yyerror("dynamic constant assignment");
06243 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06244
06245
06246
06247
06248
06249
06250 ;}
06251 break;
06252
06253 case 102:
06254
06255
06256 #line 1713 "parse.y"
06257 {
06258
06259 if (in_def || in_single)
06260 yyerror("dynamic constant assignment");
06261 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06262
06263
06264
06265
06266
06267
06268 ;}
06269 break;
06270
06271 case 103:
06272
06273
06274 #line 1726 "parse.y"
06275 {
06276
06277 rb_backref_error((yyvsp[(1) - (1)].node));
06278 (yyval.node) = NEW_BEGIN(0);
06279
06280
06281
06282 ;}
06283 break;
06284
06285 case 104:
06286
06287
06288 #line 1737 "parse.y"
06289 {
06290
06291 yyerror("class/module name must be CONSTANT");
06292
06293
06294
06295 ;}
06296 break;
06297
06298 case 106:
06299
06300
06301 #line 1748 "parse.y"
06302 {
06303
06304 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
06305
06306
06307
06308 ;}
06309 break;
06310
06311 case 107:
06312
06313
06314 #line 1756 "parse.y"
06315 {
06316
06317 (yyval.node) = NEW_COLON2(0, (yyval.node));
06318
06319
06320
06321 ;}
06322 break;
06323
06324 case 108:
06325
06326
06327 #line 1764 "parse.y"
06328 {
06329
06330 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06331
06332
06333
06334 ;}
06335 break;
06336
06337 case 112:
06338
06339
06340 #line 1777 "parse.y"
06341 {
06342 lex_state = EXPR_ENDFN;
06343 (yyval.id) = (yyvsp[(1) - (1)].id);
06344 ;}
06345 break;
06346
06347 case 113:
06348
06349
06350 #line 1782 "parse.y"
06351 {
06352 lex_state = EXPR_ENDFN;
06353
06354 (yyval.id) = (yyvsp[(1) - (1)].id);
06355
06356
06357
06358 ;}
06359 break;
06360
06361 case 116:
06362
06363
06364 #line 1797 "parse.y"
06365 {
06366
06367 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
06368
06369
06370
06371 ;}
06372 break;
06373
06374 case 118:
06375
06376
06377 #line 1808 "parse.y"
06378 {
06379
06380 (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
06381
06382
06383
06384 ;}
06385 break;
06386
06387 case 119:
06388
06389
06390 #line 1815 "parse.y"
06391 {lex_state = EXPR_FNAME;;}
06392 break;
06393
06394 case 120:
06395
06396
06397 #line 1816 "parse.y"
06398 {
06399
06400 (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
06401
06402
06403
06404 ;}
06405 break;
06406
06407 case 121:
06408
06409
06410 #line 1825 "parse.y"
06411 { ifndef_ripper((yyval.id) = '|'); ;}
06412 break;
06413
06414 case 122:
06415
06416
06417 #line 1826 "parse.y"
06418 { ifndef_ripper((yyval.id) = '^'); ;}
06419 break;
06420
06421 case 123:
06422
06423
06424 #line 1827 "parse.y"
06425 { ifndef_ripper((yyval.id) = '&'); ;}
06426 break;
06427
06428 case 124:
06429
06430
06431 #line 1828 "parse.y"
06432 { ifndef_ripper((yyval.id) = tCMP); ;}
06433 break;
06434
06435 case 125:
06436
06437
06438 #line 1829 "parse.y"
06439 { ifndef_ripper((yyval.id) = tEQ); ;}
06440 break;
06441
06442 case 126:
06443
06444
06445 #line 1830 "parse.y"
06446 { ifndef_ripper((yyval.id) = tEQQ); ;}
06447 break;
06448
06449 case 127:
06450
06451
06452 #line 1831 "parse.y"
06453 { ifndef_ripper((yyval.id) = tMATCH); ;}
06454 break;
06455
06456 case 128:
06457
06458
06459 #line 1832 "parse.y"
06460 { ifndef_ripper((yyval.id) = tNMATCH); ;}
06461 break;
06462
06463 case 129:
06464
06465
06466 #line 1833 "parse.y"
06467 { ifndef_ripper((yyval.id) = '>'); ;}
06468 break;
06469
06470 case 130:
06471
06472
06473 #line 1834 "parse.y"
06474 { ifndef_ripper((yyval.id) = tGEQ); ;}
06475 break;
06476
06477 case 131:
06478
06479
06480 #line 1835 "parse.y"
06481 { ifndef_ripper((yyval.id) = '<'); ;}
06482 break;
06483
06484 case 132:
06485
06486
06487 #line 1836 "parse.y"
06488 { ifndef_ripper((yyval.id) = tLEQ); ;}
06489 break;
06490
06491 case 133:
06492
06493
06494 #line 1837 "parse.y"
06495 { ifndef_ripper((yyval.id) = tNEQ); ;}
06496 break;
06497
06498 case 134:
06499
06500
06501 #line 1838 "parse.y"
06502 { ifndef_ripper((yyval.id) = tLSHFT); ;}
06503 break;
06504
06505 case 135:
06506
06507
06508 #line 1839 "parse.y"
06509 { ifndef_ripper((yyval.id) = tRSHFT); ;}
06510 break;
06511
06512 case 136:
06513
06514
06515 #line 1840 "parse.y"
06516 { ifndef_ripper((yyval.id) = '+'); ;}
06517 break;
06518
06519 case 137:
06520
06521
06522 #line 1841 "parse.y"
06523 { ifndef_ripper((yyval.id) = '-'); ;}
06524 break;
06525
06526 case 138:
06527
06528
06529 #line 1842 "parse.y"
06530 { ifndef_ripper((yyval.id) = '*'); ;}
06531 break;
06532
06533 case 139:
06534
06535
06536 #line 1843 "parse.y"
06537 { ifndef_ripper((yyval.id) = '*'); ;}
06538 break;
06539
06540 case 140:
06541
06542
06543 #line 1844 "parse.y"
06544 { ifndef_ripper((yyval.id) = '/'); ;}
06545 break;
06546
06547 case 141:
06548
06549
06550 #line 1845 "parse.y"
06551 { ifndef_ripper((yyval.id) = '%'); ;}
06552 break;
06553
06554 case 142:
06555
06556
06557 #line 1846 "parse.y"
06558 { ifndef_ripper((yyval.id) = tPOW); ;}
06559 break;
06560
06561 case 143:
06562
06563
06564 #line 1847 "parse.y"
06565 { ifndef_ripper((yyval.id) = '!'); ;}
06566 break;
06567
06568 case 144:
06569
06570
06571 #line 1848 "parse.y"
06572 { ifndef_ripper((yyval.id) = '~'); ;}
06573 break;
06574
06575 case 145:
06576
06577
06578 #line 1849 "parse.y"
06579 { ifndef_ripper((yyval.id) = tUPLUS); ;}
06580 break;
06581
06582 case 146:
06583
06584
06585 #line 1850 "parse.y"
06586 { ifndef_ripper((yyval.id) = tUMINUS); ;}
06587 break;
06588
06589 case 147:
06590
06591
06592 #line 1851 "parse.y"
06593 { ifndef_ripper((yyval.id) = tAREF); ;}
06594 break;
06595
06596 case 148:
06597
06598
06599 #line 1852 "parse.y"
06600 { ifndef_ripper((yyval.id) = tASET); ;}
06601 break;
06602
06603 case 149:
06604
06605
06606 #line 1853 "parse.y"
06607 { ifndef_ripper((yyval.id) = '`'); ;}
06608 break;
06609
06610 case 191:
06611
06612
06613 #line 1871 "parse.y"
06614 {
06615
06616 value_expr((yyvsp[(3) - (3)].node));
06617 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06618
06619
06620
06621 ;}
06622 break;
06623
06624 case 192:
06625
06626
06627 #line 1880 "parse.y"
06628 {
06629
06630 value_expr((yyvsp[(3) - (5)].node));
06631 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06632 (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
06633
06634
06635
06636 ;}
06637 break;
06638
06639 case 193:
06640
06641
06642 #line 1890 "parse.y"
06643 {
06644
06645 value_expr((yyvsp[(3) - (3)].node));
06646 if ((yyvsp[(1) - (3)].node)) {
06647 ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
06648 if ((yyvsp[(2) - (3)].id) == tOROP) {
06649 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06650 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
06651 if (is_asgn_or_id(vid)) {
06652 (yyval.node)->nd_aid = vid;
06653 }
06654 }
06655 else if ((yyvsp[(2) - (3)].id) == tANDOP) {
06656 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06657 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
06658 }
06659 else {
06660 (yyval.node) = (yyvsp[(1) - (3)].node);
06661 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
06662 }
06663 }
06664 else {
06665 (yyval.node) = NEW_BEGIN(0);
06666 }
06667
06668
06669
06670 ;}
06671 break;
06672
06673 case 194:
06674
06675
06676 #line 1919 "parse.y"
06677 {
06678
06679 value_expr((yyvsp[(3) - (5)].node));
06680 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06681 if ((yyvsp[(1) - (5)].node)) {
06682 ID vid = (yyvsp[(1) - (5)].node)->nd_vid;
06683 if ((yyvsp[(2) - (5)].id) == tOROP) {
06684 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06685 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (5)].node));
06686 if (is_asgn_or_id(vid)) {
06687 (yyval.node)->nd_aid = vid;
06688 }
06689 }
06690 else if ((yyvsp[(2) - (5)].id) == tANDOP) {
06691 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06692 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (5)].node));
06693 }
06694 else {
06695 (yyval.node) = (yyvsp[(1) - (5)].node);
06696 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (5)].id), NEW_LIST((yyvsp[(3) - (5)].node)));
06697 }
06698 }
06699 else {
06700 (yyval.node) = NEW_BEGIN(0);
06701 }
06702
06703
06704
06705
06706 ;}
06707 break;
06708
06709 case 195:
06710
06711
06712 #line 1950 "parse.y"
06713 {
06714
06715 NODE *args;
06716
06717 value_expr((yyvsp[(6) - (6)].node));
06718 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
06719 if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
06720 args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06721 }
06722 else {
06723 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06724 }
06725 if ((yyvsp[(5) - (6)].id) == tOROP) {
06726 (yyvsp[(5) - (6)].id) = 0;
06727 }
06728 else if ((yyvsp[(5) - (6)].id) == tANDOP) {
06729 (yyvsp[(5) - (6)].id) = 1;
06730 }
06731 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
06732 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
06733
06734
06735
06736
06737 ;}
06738 break;
06739
06740 case 196:
06741
06742
06743 #line 1976 "parse.y"
06744 {
06745
06746 value_expr((yyvsp[(5) - (5)].node));
06747 if ((yyvsp[(4) - (5)].id) == tOROP) {
06748 (yyvsp[(4) - (5)].id) = 0;
06749 }
06750 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06751 (yyvsp[(4) - (5)].id) = 1;
06752 }
06753 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06754 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06755
06756
06757
06758
06759 ;}
06760 break;
06761
06762 case 197:
06763
06764
06765 #line 1993 "parse.y"
06766 {
06767
06768 value_expr((yyvsp[(5) - (5)].node));
06769 if ((yyvsp[(4) - (5)].id) == tOROP) {
06770 (yyvsp[(4) - (5)].id) = 0;
06771 }
06772 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06773 (yyvsp[(4) - (5)].id) = 1;
06774 }
06775 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06776 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06777
06778
06779
06780
06781 ;}
06782 break;
06783
06784 case 198:
06785
06786
06787 #line 2010 "parse.y"
06788 {
06789
06790 value_expr((yyvsp[(5) - (5)].node));
06791 if ((yyvsp[(4) - (5)].id) == tOROP) {
06792 (yyvsp[(4) - (5)].id) = 0;
06793 }
06794 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06795 (yyvsp[(4) - (5)].id) = 1;
06796 }
06797 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06798 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06799
06800
06801
06802
06803 ;}
06804 break;
06805
06806 case 199:
06807
06808
06809 #line 2027 "parse.y"
06810 {
06811
06812 yyerror("constant re-assignment");
06813 (yyval.node) = NEW_BEGIN(0);
06814
06815
06816
06817
06818
06819 ;}
06820 break;
06821
06822 case 200:
06823
06824
06825 #line 2038 "parse.y"
06826 {
06827
06828 yyerror("constant re-assignment");
06829 (yyval.node) = NEW_BEGIN(0);
06830
06831
06832
06833
06834
06835 ;}
06836 break;
06837
06838 case 201:
06839
06840
06841 #line 2049 "parse.y"
06842 {
06843
06844 rb_backref_error((yyvsp[(1) - (3)].node));
06845 (yyval.node) = NEW_BEGIN(0);
06846
06847
06848
06849
06850
06851 ;}
06852 break;
06853
06854 case 202:
06855
06856
06857 #line 2060 "parse.y"
06858 {
06859
06860 value_expr((yyvsp[(1) - (3)].node));
06861 value_expr((yyvsp[(3) - (3)].node));
06862 (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06863 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
06864 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
06865 deferred_nodes = list_append(deferred_nodes, (yyval.node));
06866 }
06867
06868
06869
06870 ;}
06871 break;
06872
06873 case 203:
06874
06875
06876 #line 2074 "parse.y"
06877 {
06878
06879 value_expr((yyvsp[(1) - (3)].node));
06880 value_expr((yyvsp[(3) - (3)].node));
06881 (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06882 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
06883 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
06884 deferred_nodes = list_append(deferred_nodes, (yyval.node));
06885 }
06886
06887
06888
06889 ;}
06890 break;
06891
06892 case 204:
06893
06894
06895 #line 2088 "parse.y"
06896 {
06897
06898 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
06899
06900
06901
06902 ;}
06903 break;
06904
06905 case 205:
06906
06907
06908 #line 2096 "parse.y"
06909 {
06910
06911 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
06912
06913
06914
06915 ;}
06916 break;
06917
06918 case 206:
06919
06920
06921 #line 2104 "parse.y"
06922 {
06923
06924 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
06925
06926
06927
06928 ;}
06929 break;
06930
06931 case 207:
06932
06933
06934 #line 2112 "parse.y"
06935 {
06936
06937 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
06938
06939
06940
06941 ;}
06942 break;
06943
06944 case 208:
06945
06946
06947 #line 2120 "parse.y"
06948 {
06949
06950 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
06951
06952
06953
06954 ;}
06955 break;
06956
06957 case 209:
06958
06959
06960 #line 2128 "parse.y"
06961 {
06962
06963 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
06964
06965
06966
06967 ;}
06968 break;
06969
06970 case 210:
06971
06972
06973 #line 2136 "parse.y"
06974 {
06975
06976 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
06977
06978
06979
06980
06981 ;}
06982 break;
06983
06984 case 211:
06985
06986
06987 #line 2145 "parse.y"
06988 {
06989
06990 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
06991
06992
06993
06994
06995 ;}
06996 break;
06997
06998 case 212:
06999
07000
07001 #line 2154 "parse.y"
07002 {
07003
07004 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
07005
07006
07007
07008 ;}
07009 break;
07010
07011 case 213:
07012
07013
07014 #line 2162 "parse.y"
07015 {
07016
07017 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
07018
07019
07020
07021 ;}
07022 break;
07023
07024 case 214:
07025
07026
07027 #line 2170 "parse.y"
07028 {
07029
07030 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
07031
07032
07033
07034 ;}
07035 break;
07036
07037 case 215:
07038
07039
07040 #line 2178 "parse.y"
07041 {
07042
07043 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
07044
07045
07046
07047 ;}
07048 break;
07049
07050 case 216:
07051
07052
07053 #line 2186 "parse.y"
07054 {
07055
07056 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
07057
07058
07059
07060 ;}
07061 break;
07062
07063 case 217:
07064
07065
07066 #line 2194 "parse.y"
07067 {
07068
07069 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
07070
07071
07072
07073 ;}
07074 break;
07075
07076 case 218:
07077
07078
07079 #line 2202 "parse.y"
07080 {
07081
07082 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
07083
07084
07085
07086 ;}
07087 break;
07088
07089 case 219:
07090
07091
07092 #line 2210 "parse.y"
07093 {
07094
07095 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
07096
07097
07098
07099 ;}
07100 break;
07101
07102 case 220:
07103
07104
07105 #line 2218 "parse.y"
07106 {
07107
07108 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
07109
07110
07111
07112 ;}
07113 break;
07114
07115 case 221:
07116
07117
07118 #line 2226 "parse.y"
07119 {
07120
07121 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
07122
07123
07124
07125 ;}
07126 break;
07127
07128 case 222:
07129
07130
07131 #line 2234 "parse.y"
07132 {
07133
07134 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
07135
07136
07137
07138 ;}
07139 break;
07140
07141 case 223:
07142
07143
07144 #line 2242 "parse.y"
07145 {
07146
07147 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
07148
07149
07150
07151 ;}
07152 break;
07153
07154 case 224:
07155
07156
07157 #line 2250 "parse.y"
07158 {
07159
07160 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
07161
07162
07163
07164 ;}
07165 break;
07166
07167 case 225:
07168
07169
07170 #line 2258 "parse.y"
07171 {
07172
07173 (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07174 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && TYPE((yyvsp[(1) - (3)].node)->nd_lit) == T_REGEXP) {
07175 (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
07176 }
07177
07178
07179
07180 ;}
07181 break;
07182
07183 case 226:
07184
07185
07186 #line 2269 "parse.y"
07187 {
07188
07189 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
07190
07191
07192
07193 ;}
07194 break;
07195
07196 case 227:
07197
07198
07199 #line 2277 "parse.y"
07200 {
07201
07202 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
07203
07204
07205
07206 ;}
07207 break;
07208
07209 case 228:
07210
07211
07212 #line 2285 "parse.y"
07213 {
07214
07215 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
07216
07217
07218
07219 ;}
07220 break;
07221
07222 case 229:
07223
07224
07225 #line 2293 "parse.y"
07226 {
07227
07228 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
07229
07230
07231
07232 ;}
07233 break;
07234
07235 case 230:
07236
07237
07238 #line 2301 "parse.y"
07239 {
07240
07241 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
07242
07243
07244
07245 ;}
07246 break;
07247
07248 case 231:
07249
07250
07251 #line 2309 "parse.y"
07252 {
07253
07254 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07255
07256
07257
07258 ;}
07259 break;
07260
07261 case 232:
07262
07263
07264 #line 2317 "parse.y"
07265 {
07266
07267 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07268
07269
07270
07271 ;}
07272 break;
07273
07274 case 233:
07275
07276
07277 #line 2324 "parse.y"
07278 {in_defined = 1;;}
07279 break;
07280
07281 case 234:
07282
07283
07284 #line 2325 "parse.y"
07285 {
07286
07287 in_defined = 0;
07288 (yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node));
07289
07290
07291
07292
07293 ;}
07294 break;
07295
07296 case 235:
07297
07298
07299 #line 2335 "parse.y"
07300 {
07301
07302 value_expr((yyvsp[(1) - (6)].node));
07303 (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
07304 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
07305
07306
07307
07308 ;}
07309 break;
07310
07311 case 236:
07312
07313
07314 #line 2345 "parse.y"
07315 {
07316 (yyval.node) = (yyvsp[(1) - (1)].node);
07317 ;}
07318 break;
07319
07320 case 237:
07321
07322
07323 #line 2351 "parse.y"
07324 {
07325
07326 value_expr((yyvsp[(1) - (1)].node));
07327 (yyval.node) = (yyvsp[(1) - (1)].node);
07328 if (!(yyval.node)) (yyval.node) = NEW_NIL();
07329
07330
07331
07332 ;}
07333 break;
07334
07335 case 239:
07336
07337
07338 #line 2364 "parse.y"
07339 {
07340 (yyval.node) = (yyvsp[(1) - (2)].node);
07341 ;}
07342 break;
07343
07344 case 240:
07345
07346
07347 #line 2368 "parse.y"
07348 {
07349
07350 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07351
07352
07353
07354 ;}
07355 break;
07356
07357 case 241:
07358
07359
07360 #line 2376 "parse.y"
07361 {
07362
07363 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07364
07365
07366
07367 ;}
07368 break;
07369
07370 case 242:
07371
07372
07373 #line 2386 "parse.y"
07374 {
07375
07376 (yyval.node) = (yyvsp[(2) - (3)].node);
07377
07378
07379
07380 ;}
07381 break;
07382
07383 case 247:
07384
07385
07386 #line 2404 "parse.y"
07387 {
07388
07389 value_expr((yyvsp[(1) - (1)].node));
07390 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07391
07392
07393
07394 ;}
07395 break;
07396
07397 case 248:
07398
07399
07400 #line 2413 "parse.y"
07401 {
07402
07403 (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
07404
07405
07406
07407 ;}
07408 break;
07409
07410 case 249:
07411
07412
07413 #line 2421 "parse.y"
07414 {
07415
07416 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07417 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
07418
07419
07420
07421
07422 ;}
07423 break;
07424
07425 case 250:
07426
07427
07428 #line 2431 "parse.y"
07429 {
07430
07431 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07432 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
07433
07434
07435
07436 ;}
07437 break;
07438
07439 case 252:
07440
07441
07442 #line 2448 "parse.y"
07443 {
07444 (yyval.val) = cmdarg_stack;
07445 CMDARG_PUSH(1);
07446 ;}
07447 break;
07448
07449 case 253:
07450
07451
07452 #line 2453 "parse.y"
07453 {
07454
07455 cmdarg_stack = (yyvsp[(1) - (2)].val);
07456 (yyval.node) = (yyvsp[(2) - (2)].node);
07457 ;}
07458 break;
07459
07460 case 254:
07461
07462
07463 #line 2461 "parse.y"
07464 {
07465
07466 (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
07467
07468
07469
07470 ;}
07471 break;
07472
07473 case 255:
07474
07475
07476 #line 2471 "parse.y"
07477 {
07478 (yyval.node) = (yyvsp[(2) - (2)].node);
07479 ;}
07480 break;
07481
07482 case 256:
07483
07484
07485 #line 2475 "parse.y"
07486 {
07487 (yyval.node) = 0;
07488 ;}
07489 break;
07490
07491 case 257:
07492
07493
07494 #line 2479 "parse.y"
07495 {
07496 (yyval.node) = 0;
07497 ;}
07498 break;
07499
07500 case 258:
07501
07502
07503 #line 2485 "parse.y"
07504 {
07505
07506 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07507
07508
07509
07510 ;}
07511 break;
07512
07513 case 259:
07514
07515
07516 #line 2493 "parse.y"
07517 {
07518
07519 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07520
07521
07522
07523 ;}
07524 break;
07525
07526 case 260:
07527
07528
07529 #line 2501 "parse.y"
07530 {
07531
07532 NODE *n1;
07533 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07534 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07535 }
07536 else {
07537 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07538 }
07539
07540
07541
07542 ;}
07543 break;
07544
07545 case 261:
07546
07547
07548 #line 2515 "parse.y"
07549 {
07550
07551 NODE *n1;
07552 if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07553 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07554 }
07555 else {
07556 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07557 }
07558
07559
07560
07561 ;}
07562 break;
07563
07564 case 262:
07565
07566
07567 #line 2531 "parse.y"
07568 {
07569
07570 NODE *n1;
07571 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07572 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07573 }
07574 else {
07575 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07576 }
07577
07578
07579
07580 ;}
07581 break;
07582
07583 case 263:
07584
07585
07586 #line 2545 "parse.y"
07587 {
07588
07589 NODE *n1;
07590 if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
07591 (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07592 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07593 }
07594 else {
07595 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07596 }
07597
07598
07599
07600 ;}
07601 break;
07602
07603 case 264:
07604
07605
07606 #line 2560 "parse.y"
07607 {
07608
07609 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07610
07611
07612
07613 ;}
07614 break;
07615
07616 case 273:
07617
07618
07619 #line 2578 "parse.y"
07620 {
07621
07622 (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
07623
07624
07625
07626 ;}
07627 break;
07628
07629 case 274:
07630
07631
07632 #line 2586 "parse.y"
07633 {
07634
07635 (yyval.num) = ruby_sourceline;
07636
07637
07638 ;}
07639 break;
07640
07641 case 275:
07642
07643
07644 #line 2594 "parse.y"
07645 {
07646
07647 if ((yyvsp[(3) - (4)].node) == NULL) {
07648 (yyval.node) = NEW_NIL();
07649 }
07650 else {
07651 if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
07652 nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
07653 nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
07654 (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
07655 }
07656 nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
07657
07658
07659
07660 ;}
07661 break;
07662
07663 case 276:
07664
07665
07666 #line 2610 "parse.y"
07667 {lex_state = EXPR_ENDARG;;}
07668 break;
07669
07670 case 277:
07671
07672
07673 #line 2611 "parse.y"
07674 {
07675 rb_warning0("(...) interpreted as grouped expression");
07676
07677 (yyval.node) = (yyvsp[(2) - (4)].node);
07678
07679
07680
07681 ;}
07682 break;
07683
07684 case 278:
07685
07686
07687 #line 2620 "parse.y"
07688 {
07689
07690 (yyval.node) = (yyvsp[(2) - (3)].node);
07691
07692
07693
07694 ;}
07695 break;
07696
07697 case 279:
07698
07699
07700 #line 2628 "parse.y"
07701 {
07702
07703 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
07704
07705
07706
07707 ;}
07708 break;
07709
07710 case 280:
07711
07712
07713 #line 2636 "parse.y"
07714 {
07715
07716 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
07717
07718
07719
07720 ;}
07721 break;
07722
07723 case 281:
07724
07725
07726 #line 2644 "parse.y"
07727 {
07728
07729 if ((yyvsp[(2) - (3)].node) == 0) {
07730 (yyval.node) = NEW_ZARRAY();
07731 }
07732 else {
07733 (yyval.node) = (yyvsp[(2) - (3)].node);
07734 }
07735
07736
07737
07738 ;}
07739 break;
07740
07741 case 282:
07742
07743
07744 #line 2657 "parse.y"
07745 {
07746
07747 (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node));
07748
07749
07750
07751 ;}
07752 break;
07753
07754 case 283:
07755
07756
07757 #line 2665 "parse.y"
07758 {
07759
07760 (yyval.node) = NEW_RETURN(0);
07761
07762
07763
07764 ;}
07765 break;
07766
07767 case 284:
07768
07769
07770 #line 2673 "parse.y"
07771 {
07772
07773 (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
07774
07775
07776
07777 ;}
07778 break;
07779
07780 case 285:
07781
07782
07783 #line 2681 "parse.y"
07784 {
07785
07786 (yyval.node) = NEW_YIELD(0, Qfalse);
07787
07788
07789
07790 ;}
07791 break;
07792
07793 case 286:
07794
07795
07796 #line 2689 "parse.y"
07797 {
07798
07799 (yyval.node) = NEW_YIELD(0, Qfalse);
07800
07801
07802
07803 ;}
07804 break;
07805
07806 case 287:
07807
07808
07809 #line 2696 "parse.y"
07810 {in_defined = 1;;}
07811 break;
07812
07813 case 288:
07814
07815
07816 #line 2697 "parse.y"
07817 {
07818
07819 in_defined = 0;
07820 (yyval.node) = NEW_DEFINED((yyvsp[(5) - (6)].node));
07821
07822
07823
07824
07825 ;}
07826 break;
07827
07828 case 289:
07829
07830
07831 #line 2707 "parse.y"
07832 {
07833
07834 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!');
07835
07836
07837
07838 ;}
07839 break;
07840
07841 case 290:
07842
07843
07844 #line 2715 "parse.y"
07845 {
07846
07847 (yyval.node) = call_uni_op(cond(NEW_NIL()), '!');
07848
07849
07850
07851 ;}
07852 break;
07853
07854 case 291:
07855
07856
07857 #line 2723 "parse.y"
07858 {
07859
07860 (yyvsp[(2) - (2)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (2)].id), 0);
07861 (yyval.node) = (yyvsp[(2) - (2)].node);
07862 fixpos((yyvsp[(2) - (2)].node)->nd_iter, (yyvsp[(2) - (2)].node));
07863
07864
07865
07866
07867 ;}
07868 break;
07869
07870 case 293:
07871
07872
07873 #line 2735 "parse.y"
07874 {
07875
07876 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
07877 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
07878 (yyval.node) = (yyvsp[(2) - (2)].node);
07879 fixpos((yyval.node), (yyvsp[(1) - (2)].node));
07880
07881
07882
07883 ;}
07884 break;
07885
07886 case 294:
07887
07888
07889 #line 2746 "parse.y"
07890 {
07891 (yyval.node) = (yyvsp[(2) - (2)].node);
07892 ;}
07893 break;
07894
07895 case 295:
07896
07897
07898 #line 2753 "parse.y"
07899 {
07900
07901 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
07902 fixpos((yyval.node), (yyvsp[(2) - (6)].node));
07903
07904
07905
07906 ;}
07907 break;
07908
07909 case 296:
07910
07911
07912 #line 2765 "parse.y"
07913 {
07914
07915 (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
07916 fixpos((yyval.node), (yyvsp[(2) - (6)].node));
07917
07918
07919
07920 ;}
07921 break;
07922
07923 case 297:
07924
07925
07926 #line 2773 "parse.y"
07927 {COND_PUSH(1);;}
07928 break;
07929
07930 case 298:
07931
07932
07933 #line 2773 "parse.y"
07934 {COND_POP();;}
07935 break;
07936
07937 case 299:
07938
07939
07940 #line 2776 "parse.y"
07941 {
07942
07943 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
07944 fixpos((yyval.node), (yyvsp[(3) - (7)].node));
07945
07946
07947
07948 ;}
07949 break;
07950
07951 case 300:
07952
07953
07954 #line 2784 "parse.y"
07955 {COND_PUSH(1);;}
07956 break;
07957
07958 case 301:
07959
07960
07961 #line 2784 "parse.y"
07962 {COND_POP();;}
07963 break;
07964
07965 case 302:
07966
07967
07968 #line 2787 "parse.y"
07969 {
07970
07971 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
07972 fixpos((yyval.node), (yyvsp[(3) - (7)].node));
07973
07974
07975
07976 ;}
07977 break;
07978
07979 case 303:
07980
07981
07982 #line 2798 "parse.y"
07983 {
07984
07985 (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
07986 fixpos((yyval.node), (yyvsp[(2) - (5)].node));
07987
07988
07989
07990 ;}
07991 break;
07992
07993 case 304:
07994
07995
07996 #line 2807 "parse.y"
07997 {
07998
07999 (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
08000
08001
08002
08003 ;}
08004 break;
08005
08006 case 305:
08007
08008
08009 #line 2815 "parse.y"
08010 {COND_PUSH(1);;}
08011 break;
08012
08013 case 306:
08014
08015
08016 #line 2817 "parse.y"
08017 {COND_POP();;}
08018 break;
08019
08020 case 307:
08021
08022
08023 #line 2820 "parse.y"
08024 {
08025
08026
08027
08028
08029
08030
08031
08032
08033
08034
08035 ID id = internal_id();
08036 ID *tbl = ALLOC_N(ID, 2);
08037 NODE *m = NEW_ARGS_AUX(0, 0);
08038 NODE *args, *scope;
08039
08040 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) {
08041
08042
08043
08044
08045 NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
08046 NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
08047 m->nd_next = block_append(
08048 NEW_IF(
08049 NEW_NODE(NODE_AND,
08050 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("length"), 0),
08051 rb_intern("=="), one),
08052 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero),
08053 rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
08054 0),
08055 NEW_DASGN_CURR(id,
08056 NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero)),
08057 0),
08058 node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id)));
08059
08060 args = new_args(m, 0, id, 0, 0);
08061 }
08062 else {
08063 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN ||
08064 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN ||
08065 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) {
08066 (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
08067 m->nd_plen = 1;
08068 m->nd_next = (yyvsp[(2) - (9)].node);
08069 args = new_args(m, 0, 0, 0, 0);
08070 }
08071 else {
08072 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
08073 args = new_args(m, 0, id, 0, 0);
08074 }
08075 }
08076 scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
08077 tbl[0] = 1; tbl[1] = id;
08078 (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
08079 fixpos((yyval.node), (yyvsp[(2) - (9)].node));
08080
08081
08082
08083 ;}
08084 break;
08085
08086 case 308:
08087
08088
08089 #line 2881 "parse.y"
08090 {
08091 if (in_def || in_single)
08092 yyerror("class definition in method body");
08093 local_push(0);
08094
08095 (yyval.num) = ruby_sourceline;
08096
08097
08098 ;}
08099 break;
08100
08101 case 309:
08102
08103
08104 #line 2892 "parse.y"
08105 {
08106
08107 (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
08108 nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
08109
08110
08111
08112 local_pop();
08113 ;}
08114 break;
08115
08116 case 310:
08117
08118
08119 #line 2902 "parse.y"
08120 {
08121 (yyval.num) = in_def;
08122 in_def = 0;
08123 ;}
08124 break;
08125
08126 case 311:
08127
08128
08129 #line 2907 "parse.y"
08130 {
08131 (yyval.num) = in_single;
08132 in_single = 0;
08133 local_push(0);
08134 ;}
08135 break;
08136
08137 case 312:
08138
08139
08140 #line 2914 "parse.y"
08141 {
08142
08143 (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
08144 fixpos((yyval.node), (yyvsp[(3) - (8)].node));
08145
08146
08147
08148 local_pop();
08149 in_def = (yyvsp[(4) - (8)].num);
08150 in_single = (yyvsp[(6) - (8)].num);
08151 ;}
08152 break;
08153
08154 case 313:
08155
08156
08157 #line 2926 "parse.y"
08158 {
08159 if (in_def || in_single)
08160 yyerror("module definition in method body");
08161 local_push(0);
08162
08163 (yyval.num) = ruby_sourceline;
08164
08165
08166 ;}
08167 break;
08168
08169 case 314:
08170
08171
08172 #line 2937 "parse.y"
08173 {
08174
08175 (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08176 nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
08177
08178
08179
08180 local_pop();
08181 ;}
08182 break;
08183
08184 case 315:
08185
08186
08187 #line 2947 "parse.y"
08188 {
08189 (yyval.id) = cur_mid;
08190 cur_mid = (yyvsp[(2) - (2)].id);
08191 in_def++;
08192 local_push(0);
08193 ;}
08194 break;
08195
08196 case 316:
08197
08198
08199 #line 2956 "parse.y"
08200 {
08201
08202 NODE *body = remove_begin((yyvsp[(5) - (6)].node));
08203 reduce_nodes(&body);
08204 (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
08205 nd_set_line((yyval.node), (yyvsp[(1) - (6)].num));
08206
08207
08208
08209 local_pop();
08210 in_def--;
08211 cur_mid = (yyvsp[(3) - (6)].id);
08212 ;}
08213 break;
08214
08215 case 317:
08216
08217
08218 #line 2969 "parse.y"
08219 {lex_state = EXPR_FNAME;;}
08220 break;
08221
08222 case 318:
08223
08224
08225 #line 2970 "parse.y"
08226 {
08227 in_single++;
08228 lex_state = EXPR_ENDFN;
08229 local_push(0);
08230 ;}
08231 break;
08232
08233 case 319:
08234
08235
08236 #line 2978 "parse.y"
08237 {
08238
08239 NODE *body = remove_begin((yyvsp[(8) - (9)].node));
08240 reduce_nodes(&body);
08241 (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
08242 nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
08243
08244
08245
08246 local_pop();
08247 in_single--;
08248 ;}
08249 break;
08250
08251 case 320:
08252
08253
08254 #line 2991 "parse.y"
08255 {
08256
08257 (yyval.node) = NEW_BREAK(0);
08258
08259
08260
08261 ;}
08262 break;
08263
08264 case 321:
08265
08266
08267 #line 2999 "parse.y"
08268 {
08269
08270 (yyval.node) = NEW_NEXT(0);
08271
08272
08273
08274 ;}
08275 break;
08276
08277 case 322:
08278
08279
08280 #line 3007 "parse.y"
08281 {
08282
08283 (yyval.node) = NEW_REDO();
08284
08285
08286
08287 ;}
08288 break;
08289
08290 case 323:
08291
08292
08293 #line 3015 "parse.y"
08294 {
08295
08296 (yyval.node) = NEW_RETRY();
08297
08298
08299
08300 ;}
08301 break;
08302
08303 case 324:
08304
08305
08306 #line 3025 "parse.y"
08307 {
08308
08309 value_expr((yyvsp[(1) - (1)].node));
08310 (yyval.node) = (yyvsp[(1) - (1)].node);
08311 if (!(yyval.node)) (yyval.node) = NEW_NIL();
08312
08313
08314
08315 ;}
08316 break;
08317
08318 case 325:
08319
08320
08321 #line 3037 "parse.y"
08322 {
08323 token_info_push("begin");
08324 ;}
08325 break;
08326
08327 case 326:
08328
08329
08330 #line 3043 "parse.y"
08331 {
08332 token_info_push("if");
08333 ;}
08334 break;
08335
08336 case 327:
08337
08338
08339 #line 3049 "parse.y"
08340 {
08341 token_info_push("unless");
08342 ;}
08343 break;
08344
08345 case 328:
08346
08347
08348 #line 3055 "parse.y"
08349 {
08350 token_info_push("while");
08351 ;}
08352 break;
08353
08354 case 329:
08355
08356
08357 #line 3061 "parse.y"
08358 {
08359 token_info_push("until");
08360 ;}
08361 break;
08362
08363 case 330:
08364
08365
08366 #line 3067 "parse.y"
08367 {
08368 token_info_push("case");
08369 ;}
08370 break;
08371
08372 case 331:
08373
08374
08375 #line 3073 "parse.y"
08376 {
08377 token_info_push("for");
08378 ;}
08379 break;
08380
08381 case 332:
08382
08383
08384 #line 3079 "parse.y"
08385 {
08386 token_info_push("class");
08387 ;}
08388 break;
08389
08390 case 333:
08391
08392
08393 #line 3085 "parse.y"
08394 {
08395 token_info_push("module");
08396 ;}
08397 break;
08398
08399 case 334:
08400
08401
08402 #line 3091 "parse.y"
08403 {
08404 token_info_push("def");
08405
08406 (yyval.num) = ruby_sourceline;
08407
08408
08409 ;}
08410 break;
08411
08412 case 335:
08413
08414
08415 #line 3101 "parse.y"
08416 {
08417 token_info_pop("end");
08418 ;}
08419 break;
08420
08421 case 342:
08422
08423
08424 #line 3131 "parse.y"
08425 {
08426
08427 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
08428 fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08429
08430
08431
08432 ;}
08433 break;
08434
08435 case 344:
08436
08437
08438 #line 3143 "parse.y"
08439 {
08440
08441 (yyval.node) = (yyvsp[(2) - (2)].node);
08442
08443
08444
08445 ;}
08446 break;
08447
08448 case 347:
08449
08450
08451 #line 3157 "parse.y"
08452 {
08453 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
08454
08455
08456
08457
08458 ;}
08459 break;
08460
08461 case 348:
08462
08463
08464 #line 3165 "parse.y"
08465 {
08466
08467 (yyval.node) = (yyvsp[(2) - (3)].node);
08468
08469
08470
08471 ;}
08472 break;
08473
08474 case 349:
08475
08476
08477 #line 3175 "parse.y"
08478 {
08479
08480 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
08481
08482
08483
08484 ;}
08485 break;
08486
08487 case 350:
08488
08489
08490 #line 3183 "parse.y"
08491 {
08492
08493 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
08494
08495
08496
08497 ;}
08498 break;
08499
08500 case 351:
08501
08502
08503 #line 3193 "parse.y"
08504 {
08505
08506 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
08507
08508
08509
08510 ;}
08511 break;
08512
08513 case 352:
08514
08515
08516 #line 3201 "parse.y"
08517 {
08518 (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
08519
08520 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
08521
08522
08523
08524 ;}
08525 break;
08526
08527 case 353:
08528
08529
08530 #line 3210 "parse.y"
08531 {
08532 (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
08533
08534 (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
08535
08536
08537
08538 ;}
08539 break;
08540
08541 case 354:
08542
08543
08544 #line 3219 "parse.y"
08545 {
08546
08547 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
08548
08549
08550
08551 ;}
08552 break;
08553
08554 case 355:
08555
08556
08557 #line 3227 "parse.y"
08558 {
08559
08560 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
08561
08562
08563
08564 ;}
08565 break;
08566
08567 case 356:
08568
08569
08570 #line 3235 "parse.y"
08571 {
08572 (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
08573
08574 (yyval.node) = NEW_MASGN(0, (yyval.node));
08575
08576
08577
08578 ;}
08579 break;
08580
08581 case 357:
08582
08583
08584 #line 3244 "parse.y"
08585 {
08586 (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
08587
08588 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
08589
08590
08591
08592
08593
08594
08595 ;}
08596 break;
08597
08598 case 358:
08599
08600
08601 #line 3256 "parse.y"
08602 {
08603
08604 (yyval.node) = NEW_MASGN(0, -1);
08605
08606
08607
08608 ;}
08609 break;
08610
08611 case 359:
08612
08613
08614 #line 3264 "parse.y"
08615 {
08616
08617 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
08618
08619
08620
08621 ;}
08622 break;
08623
08624 case 360:
08625
08626
08627 #line 3274 "parse.y"
08628 {
08629
08630 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
08631
08632
08633
08634 ;}
08635 break;
08636
08637 case 361:
08638
08639
08640 #line 3282 "parse.y"
08641 {
08642
08643 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
08644
08645
08646
08647 ;}
08648 break;
08649
08650 case 362:
08651
08652
08653 #line 3290 "parse.y"
08654 {
08655
08656 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
08657
08658
08659
08660 ;}
08661 break;
08662
08663 case 363:
08664
08665
08666 #line 3298 "parse.y"
08667 {
08668
08669 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08670
08671
08672
08673 ;}
08674 break;
08675
08676 case 364:
08677
08678
08679 #line 3306 "parse.y"
08680 {
08681
08682 (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08683
08684
08685
08686 ;}
08687 break;
08688
08689 case 365:
08690
08691
08692 #line 3314 "parse.y"
08693 {
08694
08695 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 1, 0, 0);
08696
08697
08698
08699
08700 ;}
08701 break;
08702
08703 case 366:
08704
08705
08706 #line 3323 "parse.y"
08707 {
08708
08709 (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08710
08711
08712
08713 ;}
08714 break;
08715
08716 case 367:
08717
08718
08719 #line 3331 "parse.y"
08720 {
08721
08722 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
08723
08724
08725
08726 ;}
08727 break;
08728
08729 case 368:
08730
08731
08732 #line 3339 "parse.y"
08733 {
08734
08735 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08736
08737
08738
08739 ;}
08740 break;
08741
08742 case 369:
08743
08744
08745 #line 3347 "parse.y"
08746 {
08747
08748 (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08749
08750
08751
08752 ;}
08753 break;
08754
08755 case 370:
08756
08757
08758 #line 3355 "parse.y"
08759 {
08760
08761 (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
08762
08763
08764
08765 ;}
08766 break;
08767
08768 case 371:
08769
08770
08771 #line 3363 "parse.y"
08772 {
08773
08774 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08775
08776
08777
08778 ;}
08779 break;
08780
08781 case 372:
08782
08783
08784 #line 3371 "parse.y"
08785 {
08786
08787 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
08788
08789
08790
08791 ;}
08792 break;
08793
08794 case 373:
08795
08796
08797 #line 3379 "parse.y"
08798 {
08799
08800 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08801
08802
08803
08804 ;}
08805 break;
08806
08807 case 374:
08808
08809
08810 #line 3387 "parse.y"
08811 {
08812
08813 (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
08814
08815
08816
08817 ;}
08818 break;
08819
08820 case 376:
08821
08822
08823 #line 3398 "parse.y"
08824 {
08825 command_start = TRUE;
08826 ;}
08827 break;
08828
08829 case 377:
08830
08831
08832 #line 3404 "parse.y"
08833 {
08834
08835 (yyval.node) = 0;
08836
08837
08838
08839
08840 ;}
08841 break;
08842
08843 case 378:
08844
08845
08846 #line 3413 "parse.y"
08847 {
08848
08849 (yyval.node) = 0;
08850
08851
08852
08853
08854 ;}
08855 break;
08856
08857 case 379:
08858
08859
08860 #line 3422 "parse.y"
08861 {
08862
08863 (yyval.node) = (yyvsp[(2) - (4)].node);
08864
08865
08866
08867 ;}
08868 break;
08869
08870 case 381:
08871
08872
08873 #line 3434 "parse.y"
08874 {
08875
08876 (yyval.node) = 0;
08877
08878
08879
08880 ;}
08881 break;
08882
08883 case 384:
08884
08885
08886 #line 3460 "parse.y"
08887 {
08888 new_bv(get_id((yyvsp[(1) - (1)].id)));
08889
08890
08891
08892
08893 ;}
08894 break;
08895
08896 case 385:
08897
08898
08899 #line 3468 "parse.y"
08900 {
08901 (yyval.node) = 0;
08902 ;}
08903 break;
08904
08905 case 386:
08906
08907
08908 #line 3473 "parse.y"
08909 {
08910 (yyval.vars) = dyna_push();
08911 ;}
08912 break;
08913
08914 case 387:
08915
08916
08917 #line 3476 "parse.y"
08918 {
08919 (yyval.num) = lpar_beg;
08920 lpar_beg = ++paren_nest;
08921 ;}
08922 break;
08923
08924 case 388:
08925
08926
08927 #line 3482 "parse.y"
08928 {
08929 lpar_beg = (yyvsp[(2) - (4)].num);
08930
08931 (yyval.node) = (yyvsp[(3) - (4)].node);
08932 (yyval.node)->nd_body = NEW_SCOPE((yyvsp[(3) - (4)].node)->nd_head, (yyvsp[(4) - (4)].node));
08933
08934
08935
08936 dyna_pop((yyvsp[(1) - (4)].vars));
08937 ;}
08938 break;
08939
08940 case 389:
08941
08942
08943 #line 3495 "parse.y"
08944 {
08945
08946 (yyval.node) = NEW_LAMBDA((yyvsp[(2) - (4)].node));
08947
08948
08949
08950 ;}
08951 break;
08952
08953 case 390:
08954
08955
08956 #line 3503 "parse.y"
08957 {
08958
08959 (yyval.node) = NEW_LAMBDA((yyvsp[(1) - (1)].node));
08960
08961
08962
08963 ;}
08964 break;
08965
08966 case 391:
08967
08968
08969 #line 3513 "parse.y"
08970 {
08971 (yyval.node) = (yyvsp[(2) - (3)].node);
08972 ;}
08973 break;
08974
08975 case 392:
08976
08977
08978 #line 3517 "parse.y"
08979 {
08980 (yyval.node) = (yyvsp[(2) - (3)].node);
08981 ;}
08982 break;
08983
08984 case 393:
08985
08986
08987 #line 3523 "parse.y"
08988 {
08989 (yyvsp[(1) - (1)].vars) = dyna_push();
08990
08991 (yyval.num) = ruby_sourceline;
08992
08993 ;}
08994 break;
08995
08996 case 394:
08997
08998
08999 #line 3532 "parse.y"
09000 {
09001
09002 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09003 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09004
09005
09006
09007 dyna_pop((yyvsp[(1) - (5)].vars));
09008 ;}
09009 break;
09010
09011 case 395:
09012
09013
09014 #line 3544 "parse.y"
09015 {
09016
09017 if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
09018 compile_error(PARSER_ARG "block given to yield");
09019 }
09020 else {
09021 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
09022 }
09023 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
09024 (yyval.node) = (yyvsp[(2) - (2)].node);
09025 fixpos((yyval.node), (yyvsp[(1) - (2)].node));
09026
09027
09028
09029 ;}
09030 break;
09031
09032 case 396:
09033
09034
09035 #line 3560 "parse.y"
09036 {
09037
09038 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09039
09040
09041
09042
09043 ;}
09044 break;
09045
09046 case 397:
09047
09048
09049 #line 3569 "parse.y"
09050 {
09051
09052 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09053
09054
09055
09056
09057 ;}
09058 break;
09059
09060 case 398:
09061
09062
09063 #line 3580 "parse.y"
09064 {
09065
09066 (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
09067 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
09068
09069
09070
09071 ;}
09072 break;
09073
09074 case 399:
09075
09076
09077 #line 3589 "parse.y"
09078 {
09079
09080 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09081 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09082
09083
09084
09085
09086 ;}
09087 break;
09088
09089 case 400:
09090
09091
09092 #line 3599 "parse.y"
09093 {
09094
09095 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09096 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09097
09098
09099
09100
09101 ;}
09102 break;
09103
09104 case 401:
09105
09106
09107 #line 3609 "parse.y"
09108 {
09109
09110 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
09111
09112
09113
09114 ;}
09115 break;
09116
09117 case 402:
09118
09119
09120 #line 3617 "parse.y"
09121 {
09122
09123 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09124 fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09125
09126
09127
09128
09129
09130 ;}
09131 break;
09132
09133 case 403:
09134
09135
09136 #line 3628 "parse.y"
09137 {
09138
09139 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09140 fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09141
09142
09143
09144
09145
09146 ;}
09147 break;
09148
09149 case 404:
09150
09151
09152 #line 3639 "parse.y"
09153 {
09154
09155 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
09156
09157
09158
09159 ;}
09160 break;
09161
09162 case 405:
09163
09164
09165 #line 3647 "parse.y"
09166 {
09167
09168 (yyval.node) = NEW_ZSUPER();
09169
09170
09171
09172 ;}
09173 break;
09174
09175 case 406:
09176
09177
09178 #line 3655 "parse.y"
09179 {
09180
09181 if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
09182 (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
09183 else
09184 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
09185 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09186
09187
09188
09189 ;}
09190 break;
09191
09192 case 407:
09193
09194
09195 #line 3669 "parse.y"
09196 {
09197 (yyvsp[(1) - (1)].vars) = dyna_push();
09198
09199 (yyval.num) = ruby_sourceline;
09200
09201
09202 ;}
09203 break;
09204
09205 case 408:
09206
09207
09208 #line 3678 "parse.y"
09209 {
09210
09211 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09212 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09213
09214
09215
09216 dyna_pop((yyvsp[(1) - (5)].vars));
09217 ;}
09218 break;
09219
09220 case 409:
09221
09222
09223 #line 3688 "parse.y"
09224 {
09225 (yyvsp[(1) - (1)].vars) = dyna_push();
09226
09227 (yyval.num) = ruby_sourceline;
09228
09229
09230 ;}
09231 break;
09232
09233 case 410:
09234
09235
09236 #line 3697 "parse.y"
09237 {
09238
09239 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09240 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09241
09242
09243
09244 dyna_pop((yyvsp[(1) - (5)].vars));
09245 ;}
09246 break;
09247
09248 case 411:
09249
09250
09251 #line 3711 "parse.y"
09252 {
09253
09254 (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09255
09256
09257
09258 ;}
09259 break;
09260
09261 case 414:
09262
09263
09264 #line 3727 "parse.y"
09265 {
09266
09267 if ((yyvsp[(3) - (6)].node)) {
09268 (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
09269 (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
09270 }
09271 (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
09272 fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
09273
09274
09275
09276
09277
09278
09279
09280 ;}
09281 break;
09282
09283 case 416:
09284
09285
09286 #line 3747 "parse.y"
09287 {
09288
09289 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
09290
09291
09292
09293 ;}
09294 break;
09295
09296 case 417:
09297
09298
09299 #line 3755 "parse.y"
09300 {
09301
09302 if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
09303
09304
09305
09306 ;}
09307 break;
09308
09309 case 419:
09310
09311
09312 #line 3766 "parse.y"
09313 {
09314 (yyval.node) = (yyvsp[(2) - (2)].node);
09315 ;}
09316 break;
09317
09318 case 421:
09319
09320
09321 #line 3773 "parse.y"
09322 {
09323
09324 (yyval.node) = (yyvsp[(2) - (2)].node);
09325
09326
09327
09328 ;}
09329 break;
09330
09331 case 424:
09332
09333
09334 #line 3785 "parse.y"
09335 {
09336
09337 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
09338
09339
09340
09341 ;}
09342 break;
09343
09344 case 426:
09345
09346
09347 #line 3796 "parse.y"
09348 {
09349
09350 NODE *node = (yyvsp[(1) - (1)].node);
09351 if (!node) {
09352 node = NEW_STR(STR_NEW0());
09353 }
09354 else {
09355 node = evstr2dstr(node);
09356 }
09357 (yyval.node) = node;
09358
09359
09360
09361 ;}
09362 break;
09363
09364 case 429:
09365
09366
09367 #line 3815 "parse.y"
09368 {
09369
09370 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09371
09372
09373
09374 ;}
09375 break;
09376
09377 case 430:
09378
09379
09380 #line 3825 "parse.y"
09381 {
09382
09383 (yyval.node) = (yyvsp[(2) - (3)].node);
09384
09385
09386
09387 ;}
09388 break;
09389
09390 case 431:
09391
09392
09393 #line 3835 "parse.y"
09394 {
09395
09396 NODE *node = (yyvsp[(2) - (3)].node);
09397 if (!node) {
09398 node = NEW_XSTR(STR_NEW0());
09399 }
09400 else {
09401 switch (nd_type(node)) {
09402 case NODE_STR:
09403 nd_set_type(node, NODE_XSTR);
09404 break;
09405 case NODE_DSTR:
09406 nd_set_type(node, NODE_DXSTR);
09407 break;
09408 default:
09409 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
09410 break;
09411 }
09412 }
09413 (yyval.node) = node;
09414
09415
09416
09417 ;}
09418 break;
09419
09420 case 432:
09421
09422
09423 #line 3862 "parse.y"
09424 {
09425
09426 int options = (yyvsp[(3) - (3)].num);
09427 NODE *node = (yyvsp[(2) - (3)].node);
09428 NODE *list, *prev;
09429 if (!node) {
09430 node = NEW_LIT(reg_compile(STR_NEW0(), options));
09431 }
09432 else switch (nd_type(node)) {
09433 case NODE_STR:
09434 {
09435 VALUE src = node->nd_lit;
09436 nd_set_type(node, NODE_LIT);
09437 node->nd_lit = reg_compile(src, options);
09438 }
09439 break;
09440 default:
09441 node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
09442 case NODE_DSTR:
09443 if (options & RE_OPTION_ONCE) {
09444 nd_set_type(node, NODE_DREGX_ONCE);
09445 }
09446 else {
09447 nd_set_type(node, NODE_DREGX);
09448 }
09449 node->nd_cflag = options & RE_OPTION_MASK;
09450 if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
09451 for (list = (prev = node)->nd_next; list; list = list->nd_next) {
09452 if (nd_type(list->nd_head) == NODE_STR) {
09453 VALUE tail = list->nd_head->nd_lit;
09454 if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
09455 VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
09456 if (!literal_concat0(parser, lit, tail)) {
09457 node = 0;
09458 break;
09459 }
09460 rb_str_resize(tail, 0);
09461 prev->nd_next = list->nd_next;
09462 rb_gc_force_recycle((VALUE)list->nd_head);
09463 rb_gc_force_recycle((VALUE)list);
09464 list = prev;
09465 }
09466 else {
09467 prev = list;
09468 }
09469 }
09470 else {
09471 prev = 0;
09472 }
09473 }
09474 if (!node->nd_next) {
09475 VALUE src = node->nd_lit;
09476 nd_set_type(node, NODE_LIT);
09477 node->nd_lit = reg_compile(src, options);
09478 }
09479 break;
09480 }
09481 (yyval.node) = node;
09482
09483
09484
09485 ;}
09486 break;
09487
09488 case 433:
09489
09490
09491 #line 3927 "parse.y"
09492 {
09493
09494 (yyval.node) = NEW_ZARRAY();
09495
09496
09497
09498 ;}
09499 break;
09500
09501 case 434:
09502
09503
09504 #line 3935 "parse.y"
09505 {
09506 (yyval.node) = (yyvsp[(2) - (3)].node);
09507 ;}
09508 break;
09509
09510 case 435:
09511
09512
09513 #line 3941 "parse.y"
09514 {
09515
09516 (yyval.node) = 0;
09517
09518
09519
09520 ;}
09521 break;
09522
09523 case 436:
09524
09525
09526 #line 3949 "parse.y"
09527 {
09528
09529 (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
09530
09531
09532
09533 ;}
09534 break;
09535
09536 case 438:
09537
09538
09539 #line 3967 "parse.y"
09540 {
09541
09542 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09543
09544
09545
09546 ;}
09547 break;
09548
09549 case 439:
09550
09551
09552 #line 3977 "parse.y"
09553 {
09554
09555 (yyval.node) = NEW_ZARRAY();
09556
09557
09558
09559 ;}
09560 break;
09561
09562 case 440:
09563
09564
09565 #line 3985 "parse.y"
09566 {
09567 (yyval.node) = (yyvsp[(2) - (3)].node);
09568 ;}
09569 break;
09570
09571 case 441:
09572
09573
09574 #line 3991 "parse.y"
09575 {
09576
09577 (yyval.node) = 0;
09578
09579
09580
09581 ;}
09582 break;
09583
09584 case 442:
09585
09586
09587 #line 3999 "parse.y"
09588 {
09589
09590 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
09591
09592
09593
09594 ;}
09595 break;
09596
09597 case 443:
09598
09599
09600 #line 4009 "parse.y"
09601 {
09602
09603 (yyval.node) = 0;
09604
09605
09606
09607 ;}
09608 break;
09609
09610 case 444:
09611
09612
09613 #line 4017 "parse.y"
09614 {
09615
09616 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09617
09618
09619
09620 ;}
09621 break;
09622
09623 case 445:
09624
09625
09626 #line 4027 "parse.y"
09627 {
09628
09629 (yyval.node) = 0;
09630
09631
09632
09633 ;}
09634 break;
09635
09636 case 446:
09637
09638
09639 #line 4035 "parse.y"
09640 {
09641
09642 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09643
09644
09645
09646 ;}
09647 break;
09648
09649 case 447:
09650
09651
09652 #line 4045 "parse.y"
09653 {
09654
09655 (yyval.node) = 0;
09656
09657
09658
09659 ;}
09660 break;
09661
09662 case 448:
09663
09664
09665 #line 4053 "parse.y"
09666 {
09667
09668 NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
09669 if (!head) {
09670 (yyval.node) = tail;
09671 }
09672 else if (!tail) {
09673 (yyval.node) = head;
09674 }
09675 else {
09676 switch (nd_type(head)) {
09677 case NODE_STR:
09678 nd_set_type(head, NODE_DSTR);
09679 break;
09680 case NODE_DSTR:
09681 break;
09682 default:
09683 head = list_append(NEW_DSTR(Qnil), head);
09684 break;
09685 }
09686 (yyval.node) = list_append(head, tail);
09687 }
09688
09689
09690
09691 ;}
09692 break;
09693
09694 case 450:
09695
09696
09697 #line 4083 "parse.y"
09698 {
09699 (yyval.node) = lex_strterm;
09700 lex_strterm = 0;
09701 lex_state = EXPR_BEG;
09702 ;}
09703 break;
09704
09705 case 451:
09706
09707
09708 #line 4089 "parse.y"
09709 {
09710
09711 lex_strterm = (yyvsp[(2) - (3)].node);
09712 (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
09713
09714
09715
09716
09717 ;}
09718 break;
09719
09720 case 452:
09721
09722
09723 #line 4099 "parse.y"
09724 {
09725 (yyvsp[(1) - (1)].val) = cond_stack;
09726 (yyval.val) = cmdarg_stack;
09727 cond_stack = 0;
09728 cmdarg_stack = 0;
09729 ;}
09730 break;
09731
09732 case 453:
09733
09734
09735 #line 4105 "parse.y"
09736 {
09737 (yyval.node) = lex_strterm;
09738 lex_strterm = 0;
09739 lex_state = EXPR_BEG;
09740 ;}
09741 break;
09742
09743 case 454:
09744
09745
09746 #line 4111 "parse.y"
09747 {
09748 cond_stack = (yyvsp[(1) - (5)].val);
09749 cmdarg_stack = (yyvsp[(2) - (5)].val);
09750 lex_strterm = (yyvsp[(3) - (5)].node);
09751
09752 if ((yyvsp[(4) - (5)].node)) (yyvsp[(4) - (5)].node)->flags &= ~NODE_FL_NEWLINE;
09753 (yyval.node) = new_evstr((yyvsp[(4) - (5)].node));
09754
09755
09756
09757 ;}
09758 break;
09759
09760 case 455:
09761
09762
09763 #line 4125 "parse.y"
09764 {
09765
09766 (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
09767
09768
09769
09770 ;}
09771 break;
09772
09773 case 456:
09774
09775
09776 #line 4133 "parse.y"
09777 {
09778
09779 (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
09780
09781
09782
09783 ;}
09784 break;
09785
09786 case 457:
09787
09788
09789 #line 4141 "parse.y"
09790 {
09791
09792 (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
09793
09794
09795
09796 ;}
09797 break;
09798
09799 case 459:
09800
09801
09802 #line 4152 "parse.y"
09803 {
09804 lex_state = EXPR_END;
09805
09806 (yyval.id) = (yyvsp[(2) - (2)].id);
09807
09808
09809
09810 ;}
09811 break;
09812
09813 case 464:
09814
09815
09816 #line 4169 "parse.y"
09817 {
09818 lex_state = EXPR_END;
09819
09820 if (!((yyval.node) = (yyvsp[(2) - (3)].node))) {
09821 (yyval.node) = NEW_LIT(ID2SYM(rb_intern("")));
09822 }
09823 else {
09824 VALUE lit;
09825
09826 switch (nd_type((yyval.node))) {
09827 case NODE_DSTR:
09828 nd_set_type((yyval.node), NODE_DSYM);
09829 break;
09830 case NODE_STR:
09831 lit = (yyval.node)->nd_lit;
09832 (yyval.node)->nd_lit = ID2SYM(rb_intern_str(lit));
09833 nd_set_type((yyval.node), NODE_LIT);
09834 break;
09835 default:
09836 (yyval.node) = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST((yyval.node)));
09837 break;
09838 }
09839 }
09840
09841
09842
09843 ;}
09844 break;
09845
09846 case 467:
09847
09848
09849 #line 4201 "parse.y"
09850 {
09851
09852 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
09853
09854
09855
09856 ;}
09857 break;
09858
09859 case 468:
09860
09861
09862 #line 4209 "parse.y"
09863 {
09864
09865 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
09866
09867
09868
09869 ;}
09870 break;
09871
09872 case 474:
09873
09874
09875 #line 4223 "parse.y"
09876 {ifndef_ripper((yyval.id) = keyword_nil);;}
09877 break;
09878
09879 case 475:
09880
09881
09882 #line 4224 "parse.y"
09883 {ifndef_ripper((yyval.id) = keyword_self);;}
09884 break;
09885
09886 case 476:
09887
09888
09889 #line 4225 "parse.y"
09890 {ifndef_ripper((yyval.id) = keyword_true);;}
09891 break;
09892
09893 case 477:
09894
09895
09896 #line 4226 "parse.y"
09897 {ifndef_ripper((yyval.id) = keyword_false);;}
09898 break;
09899
09900 case 478:
09901
09902
09903 #line 4227 "parse.y"
09904 {ifndef_ripper((yyval.id) = keyword__FILE__);;}
09905 break;
09906
09907 case 479:
09908
09909
09910 #line 4228 "parse.y"
09911 {ifndef_ripper((yyval.id) = keyword__LINE__);;}
09912 break;
09913
09914 case 480:
09915
09916
09917 #line 4229 "parse.y"
09918 {ifndef_ripper((yyval.id) = keyword__ENCODING__);;}
09919 break;
09920
09921 case 481:
09922
09923
09924 #line 4233 "parse.y"
09925 {
09926
09927 if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
09928
09929
09930
09931 ;}
09932 break;
09933
09934 case 482:
09935
09936
09937 #line 4243 "parse.y"
09938 {
09939 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
09940
09941
09942
09943
09944 ;}
09945 break;
09946
09947 case 485:
09948
09949
09950 #line 4257 "parse.y"
09951 {
09952
09953 (yyval.node) = 0;
09954
09955
09956
09957 ;}
09958 break;
09959
09960 case 486:
09961
09962
09963 #line 4265 "parse.y"
09964 {
09965 lex_state = EXPR_BEG;
09966 ;}
09967 break;
09968
09969 case 487:
09970
09971
09972 #line 4269 "parse.y"
09973 {
09974 (yyval.node) = (yyvsp[(3) - (4)].node);
09975 ;}
09976 break;
09977
09978 case 488:
09979
09980
09981 #line 4273 "parse.y"
09982 {
09983
09984 yyerrok;
09985 (yyval.node) = 0;
09986
09987
09988
09989
09990 ;}
09991 break;
09992
09993 case 489:
09994
09995
09996 #line 4285 "parse.y"
09997 {
09998
09999 (yyval.node) = (yyvsp[(2) - (3)].node);
10000
10001
10002
10003 lex_state = EXPR_BEG;
10004 command_start = TRUE;
10005 ;}
10006 break;
10007
10008 case 490:
10009
10010
10011 #line 4295 "parse.y"
10012 {
10013 (yyval.node) = (yyvsp[(1) - (2)].node);
10014 ;}
10015 break;
10016
10017 case 491:
10018
10019
10020 #line 4301 "parse.y"
10021 {
10022
10023 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
10024
10025
10026
10027 ;}
10028 break;
10029
10030 case 492:
10031
10032
10033 #line 4309 "parse.y"
10034 {
10035
10036 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
10037
10038
10039
10040 ;}
10041 break;
10042
10043 case 493:
10044
10045
10046 #line 4317 "parse.y"
10047 {
10048
10049 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
10050
10051
10052
10053 ;}
10054 break;
10055
10056 case 494:
10057
10058
10059 #line 4325 "parse.y"
10060 {
10061
10062 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10063
10064
10065
10066 ;}
10067 break;
10068
10069 case 495:
10070
10071
10072 #line 4333 "parse.y"
10073 {
10074
10075 (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10076
10077
10078
10079 ;}
10080 break;
10081
10082 case 496:
10083
10084
10085 #line 4341 "parse.y"
10086 {
10087
10088 (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10089
10090
10091
10092 ;}
10093 break;
10094
10095 case 497:
10096
10097
10098 #line 4349 "parse.y"
10099 {
10100
10101 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
10102
10103
10104
10105 ;}
10106 break;
10107
10108 case 498:
10109
10110
10111 #line 4357 "parse.y"
10112 {
10113
10114 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10115
10116
10117
10118 ;}
10119 break;
10120
10121 case 499:
10122
10123
10124 #line 4365 "parse.y"
10125 {
10126
10127 (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10128
10129
10130
10131 ;}
10132 break;
10133
10134 case 500:
10135
10136
10137 #line 4373 "parse.y"
10138 {
10139
10140 (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
10141
10142
10143
10144 ;}
10145 break;
10146
10147 case 501:
10148
10149
10150 #line 4381 "parse.y"
10151 {
10152
10153 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10154
10155
10156
10157 ;}
10158 break;
10159
10160 case 502:
10161
10162
10163 #line 4389 "parse.y"
10164 {
10165
10166 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
10167
10168
10169
10170 ;}
10171 break;
10172
10173 case 503:
10174
10175
10176 #line 4397 "parse.y"
10177 {
10178
10179 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10180
10181
10182
10183 ;}
10184 break;
10185
10186 case 504:
10187
10188
10189 #line 4405 "parse.y"
10190 {
10191
10192 (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
10193
10194
10195
10196 ;}
10197 break;
10198
10199 case 505:
10200
10201
10202 #line 4413 "parse.y"
10203 {
10204
10205 (yyval.node) = new_args(0, 0, 0, 0, 0);
10206
10207
10208
10209 ;}
10210 break;
10211
10212 case 506:
10213
10214
10215 #line 4423 "parse.y"
10216 {
10217
10218 yyerror("formal argument cannot be a constant");
10219 (yyval.id) = 0;
10220
10221
10222
10223 ;}
10224 break;
10225
10226 case 507:
10227
10228
10229 #line 4432 "parse.y"
10230 {
10231
10232 yyerror("formal argument cannot be an instance variable");
10233 (yyval.id) = 0;
10234
10235
10236
10237 ;}
10238 break;
10239
10240 case 508:
10241
10242
10243 #line 4441 "parse.y"
10244 {
10245
10246 yyerror("formal argument cannot be a global variable");
10247 (yyval.id) = 0;
10248
10249
10250
10251 ;}
10252 break;
10253
10254 case 509:
10255
10256
10257 #line 4450 "parse.y"
10258 {
10259
10260 yyerror("formal argument cannot be a class variable");
10261 (yyval.id) = 0;
10262
10263
10264
10265 ;}
10266 break;
10267
10268 case 511:
10269
10270
10271 #line 4462 "parse.y"
10272 {
10273 formal_argument(get_id((yyvsp[(1) - (1)].id)));
10274 (yyval.id) = (yyvsp[(1) - (1)].id);
10275 ;}
10276 break;
10277
10278 case 512:
10279
10280
10281 #line 4469 "parse.y"
10282 {
10283 arg_var(get_id((yyvsp[(1) - (1)].id)));
10284
10285 (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
10286
10287
10288
10289 ;}
10290 break;
10291
10292 case 513:
10293
10294
10295 #line 4478 "parse.y"
10296 {
10297 ID tid = internal_id();
10298 arg_var(tid);
10299
10300 if (dyna_in_block()) {
10301 (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
10302 }
10303 else {
10304 (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
10305 }
10306 (yyval.node) = NEW_ARGS_AUX(tid, 1);
10307 (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
10308
10309
10310
10311 ;}
10312 break;
10313
10314 case 515:
10315
10316
10317 #line 4504 "parse.y"
10318 {
10319
10320 (yyval.node) = (yyvsp[(1) - (3)].node);
10321 (yyval.node)->nd_plen++;
10322 (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
10323 rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
10324
10325
10326
10327 ;}
10328 break;
10329
10330 case 516:
10331
10332
10333 #line 4517 "parse.y"
10334 {
10335 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10336 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10337
10338 (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10339
10340
10341
10342 ;}
10343 break;
10344
10345 case 517:
10346
10347
10348 #line 4529 "parse.y"
10349 {
10350 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10351 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10352
10353 (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10354
10355
10356
10357 ;}
10358 break;
10359
10360 case 518:
10361
10362
10363 #line 4541 "parse.y"
10364 {
10365
10366 (yyval.node) = (yyvsp[(1) - (1)].node);
10367
10368
10369
10370 ;}
10371 break;
10372
10373 case 519:
10374
10375
10376 #line 4549 "parse.y"
10377 {
10378
10379 NODE *opts = (yyvsp[(1) - (3)].node);
10380
10381 while (opts->nd_next) {
10382 opts = opts->nd_next;
10383 }
10384 opts->nd_next = (yyvsp[(3) - (3)].node);
10385 (yyval.node) = (yyvsp[(1) - (3)].node);
10386
10387
10388
10389 ;}
10390 break;
10391
10392 case 520:
10393
10394
10395 #line 4565 "parse.y"
10396 {
10397
10398 (yyval.node) = (yyvsp[(1) - (1)].node);
10399
10400
10401
10402 ;}
10403 break;
10404
10405 case 521:
10406
10407
10408 #line 4573 "parse.y"
10409 {
10410
10411 NODE *opts = (yyvsp[(1) - (3)].node);
10412
10413 while (opts->nd_next) {
10414 opts = opts->nd_next;
10415 }
10416 opts->nd_next = (yyvsp[(3) - (3)].node);
10417 (yyval.node) = (yyvsp[(1) - (3)].node);
10418
10419
10420
10421 ;}
10422 break;
10423
10424 case 524:
10425
10426
10427 #line 4593 "parse.y"
10428 {
10429
10430 if (!is_local_id((yyvsp[(2) - (2)].id)))
10431 yyerror("rest argument must be local variable");
10432
10433 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10434
10435 (yyval.id) = (yyvsp[(2) - (2)].id);
10436
10437
10438
10439 ;}
10440 break;
10441
10442 case 525:
10443
10444
10445 #line 4606 "parse.y"
10446 {
10447
10448 (yyval.id) = internal_id();
10449 arg_var((yyval.id));
10450
10451
10452
10453 ;}
10454 break;
10455
10456 case 528:
10457
10458
10459 #line 4621 "parse.y"
10460 {
10461
10462 if (!is_local_id((yyvsp[(2) - (2)].id)))
10463 yyerror("block argument must be local variable");
10464 else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
10465 yyerror("duplicated block argument name");
10466
10467 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10468
10469 (yyval.id) = (yyvsp[(2) - (2)].id);
10470
10471
10472
10473 ;}
10474 break;
10475
10476 case 529:
10477
10478
10479 #line 4638 "parse.y"
10480 {
10481 (yyval.id) = (yyvsp[(2) - (2)].id);
10482 ;}
10483 break;
10484
10485 case 530:
10486
10487
10488 #line 4642 "parse.y"
10489 {
10490
10491 (yyval.id) = 0;
10492
10493
10494
10495 ;}
10496 break;
10497
10498 case 531:
10499
10500
10501 #line 4652 "parse.y"
10502 {
10503
10504 value_expr((yyvsp[(1) - (1)].node));
10505 (yyval.node) = (yyvsp[(1) - (1)].node);
10506 if (!(yyval.node)) (yyval.node) = NEW_NIL();
10507
10508
10509
10510 ;}
10511 break;
10512
10513 case 532:
10514
10515
10516 #line 4661 "parse.y"
10517 {lex_state = EXPR_BEG;;}
10518 break;
10519
10520 case 533:
10521
10522
10523 #line 4662 "parse.y"
10524 {
10525
10526 if ((yyvsp[(3) - (4)].node) == 0) {
10527 yyerror("can't define singleton method for ().");
10528 }
10529 else {
10530 switch (nd_type((yyvsp[(3) - (4)].node))) {
10531 case NODE_STR:
10532 case NODE_DSTR:
10533 case NODE_XSTR:
10534 case NODE_DXSTR:
10535 case NODE_DREGX:
10536 case NODE_LIT:
10537 case NODE_ARRAY:
10538 case NODE_ZARRAY:
10539 yyerror("can't define singleton method for literals");
10540 default:
10541 value_expr((yyvsp[(3) - (4)].node));
10542 break;
10543 }
10544 }
10545 (yyval.node) = (yyvsp[(3) - (4)].node);
10546
10547
10548
10549 ;}
10550 break;
10551
10552 case 535:
10553
10554
10555 #line 4692 "parse.y"
10556 {
10557
10558 (yyval.node) = (yyvsp[(1) - (2)].node);
10559
10560
10561
10562 ;}
10563 break;
10564
10565 case 537:
10566
10567
10568 #line 4709 "parse.y"
10569 {
10570
10571 (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
10572
10573
10574
10575 ;}
10576 break;
10577
10578 case 538:
10579
10580
10581 #line 4719 "parse.y"
10582 {
10583
10584 (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
10585
10586
10587
10588 ;}
10589 break;
10590
10591 case 539:
10592
10593
10594 #line 4727 "parse.y"
10595 {
10596
10597 (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
10598
10599
10600
10601 ;}
10602 break;
10603
10604 case 561:
10605
10606
10607 #line 4783 "parse.y"
10608 {yyerrok;;}
10609 break;
10610
10611 case 564:
10612
10613
10614 #line 4788 "parse.y"
10615 {yyerrok;;}
10616 break;
10617
10618 case 565:
10619
10620
10621 #line 4792 "parse.y"
10622 {
10623
10624 (yyval.node) = 0;
10625
10626
10627
10628 ;}
10629 break;
10630
10631
10632
10633
10634 #line 10633 "parse.c"
10635 default: break;
10636 }
10637 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
10638
10639 YYPOPSTACK (yylen);
10640 yylen = 0;
10641 YY_STACK_PRINT (yyss, yyssp);
10642
10643 *++yyvsp = yyval;
10644
10645
10646
10647
10648
10649 yyn = yyr1[yyn];
10650
10651 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
10652 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
10653 yystate = yytable[yystate];
10654 else
10655 yystate = yydefgoto[yyn - YYNTOKENS];
10656
10657 goto yynewstate;
10658
10659
10660
10661
10662
10663 yyerrlab:
10664
10665 if (!yyerrstatus)
10666 {
10667 ++yynerrs;
10668 #if ! YYERROR_VERBOSE
10669 parser_yyerror (parser, YY_("syntax error"));
10670 #else
10671 {
10672 YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
10673 if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
10674 {
10675 YYSIZE_T yyalloc = 2 * yysize;
10676 if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
10677 yyalloc = YYSTACK_ALLOC_MAXIMUM;
10678 if (yymsg != yymsgbuf)
10679 YYSTACK_FREE (yymsg);
10680 yymsg = (char *) YYSTACK_ALLOC (yyalloc);
10681 if (yymsg)
10682 yymsg_alloc = yyalloc;
10683 else
10684 {
10685 yymsg = yymsgbuf;
10686 yymsg_alloc = sizeof yymsgbuf;
10687 }
10688 }
10689
10690 if (0 < yysize && yysize <= yymsg_alloc)
10691 {
10692 (void) yysyntax_error (yymsg, yystate, yychar);
10693 parser_yyerror (parser, yymsg);
10694 }
10695 else
10696 {
10697 parser_yyerror (parser, YY_("syntax error"));
10698 if (yysize != 0)
10699 goto yyexhaustedlab;
10700 }
10701 }
10702 #endif
10703 }
10704
10705
10706
10707 if (yyerrstatus == 3)
10708 {
10709
10710
10711
10712 if (yychar <= YYEOF)
10713 {
10714
10715 if (yychar == YYEOF)
10716 YYABORT;
10717 }
10718 else
10719 {
10720 yydestruct ("Error: discarding",
10721 yytoken, &yylval, parser);
10722 yychar = YYEMPTY;
10723 }
10724 }
10725
10726
10727
10728 goto yyerrlab1;
10729
10730
10731
10732
10733
10734 yyerrorlab:
10735
10736
10737
10738
10739 if ( 0)
10740 goto yyerrorlab;
10741
10742
10743
10744 YYPOPSTACK (yylen);
10745 yylen = 0;
10746 YY_STACK_PRINT (yyss, yyssp);
10747 yystate = *yyssp;
10748 goto yyerrlab1;
10749
10750
10751
10752
10753
10754 yyerrlab1:
10755 yyerrstatus = 3;
10756
10757 for (;;)
10758 {
10759 yyn = yypact[yystate];
10760 if (yyn != YYPACT_NINF)
10761 {
10762 yyn += YYTERROR;
10763 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
10764 {
10765 yyn = yytable[yyn];
10766 if (0 < yyn)
10767 break;
10768 }
10769 }
10770
10771
10772 if (yyssp == yyss)
10773 YYABORT;
10774
10775
10776 yydestruct ("Error: popping",
10777 yystos[yystate], yyvsp, parser);
10778 YYPOPSTACK (1);
10779 yystate = *yyssp;
10780 YY_STACK_PRINT (yyss, yyssp);
10781 }
10782
10783 *++yyvsp = yylval;
10784
10785
10786
10787 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
10788
10789 yystate = yyn;
10790 goto yynewstate;
10791
10792
10793
10794
10795
10796 yyacceptlab:
10797 yyresult = 0;
10798 goto yyreturn;
10799
10800
10801
10802
10803 yyabortlab:
10804 yyresult = 1;
10805 goto yyreturn;
10806
10807 #if !defined(yyoverflow) || YYERROR_VERBOSE
10808
10809
10810
10811 yyexhaustedlab:
10812 parser_yyerror (parser, YY_("memory exhausted"));
10813 yyresult = 2;
10814
10815 #endif
10816
10817 yyreturn:
10818 if (yychar != YYEMPTY)
10819 yydestruct ("Cleanup: discarding lookahead",
10820 yytoken, &yylval, parser);
10821
10822
10823 YYPOPSTACK (yylen);
10824 YY_STACK_PRINT (yyss, yyssp);
10825 while (yyssp != yyss)
10826 {
10827 yydestruct ("Cleanup: popping",
10828 yystos[*yyssp], yyvsp, parser);
10829 YYPOPSTACK (1);
10830 }
10831 #ifndef yyoverflow
10832 if (yyss != yyssa)
10833 YYSTACK_FREE (yyss);
10834 #endif
10835 #if YYERROR_VERBOSE
10836 if (yymsg != yymsgbuf)
10837 YYSTACK_FREE (yymsg);
10838 #endif
10839
10840 return YYID (yyresult);
10841 }
10842
10843
10844
10845
10846 #line 4800 "parse.y"
10847
10848 # undef parser
10849 # undef yylex
10850 # undef yylval
10851 # define yylval (*((YYSTYPE*)(parser->parser_yylval)))
10852
10853 static int parser_regx_options(struct parser_params*);
10854 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
10855 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
10856 static int parser_parse_string(struct parser_params*,NODE*);
10857 static int parser_here_document(struct parser_params*,NODE*);
10858
10859
10860 # define nextc() parser_nextc(parser)
10861 # define pushback(c) parser_pushback(parser, c)
10862 # define newtok() parser_newtok(parser)
10863 # define tokspace(n) parser_tokspace(parser, n)
10864 # define tokadd(c) parser_tokadd(parser, c)
10865 # define tok_hex(numlen) parser_tok_hex(parser, numlen)
10866 # define read_escape(flags,e) parser_read_escape(parser, flags, e)
10867 # define tokadd_escape(e) parser_tokadd_escape(parser, e)
10868 # define regx_options() parser_regx_options(parser)
10869 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,f,t,p,n,e)
10870 # define parse_string(n) parser_parse_string(parser,n)
10871 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, c, enc)
10872 # define here_document(n) parser_here_document(parser,n)
10873 # define heredoc_identifier() parser_heredoc_identifier(parser)
10874 # define heredoc_restore(n) parser_heredoc_restore(parser,n)
10875 # define whole_match_p(e,l,i) parser_whole_match_p(parser,e,l,i)
10876
10877 #ifndef RIPPER
10878 # define set_yylval_str(x) yylval.node = NEW_STR(x)
10879 # define set_yylval_num(x) yylval.num = x
10880 # define set_yylval_id(x) yylval.id = x
10881 # define set_yylval_name(x) yylval.id = x
10882 # define set_yylval_literal(x) yylval.node = NEW_LIT(x)
10883 # define set_yylval_node(x) yylval.node = x
10884 # define yylval_id() yylval.id
10885 #else
10886 static inline VALUE
10887 ripper_yylval_id(ID x)
10888 {
10889 return (VALUE)NEW_LASGN(x, ID2SYM(x));
10890 }
10891 # define set_yylval_str(x) (void)(x)
10892 # define set_yylval_num(x) (void)(x)
10893 # define set_yylval_id(x) (void)(x)
10894 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
10895 # define set_yylval_literal(x) (void)(x)
10896 # define set_yylval_node(x) (void)(x)
10897 # define yylval_id() yylval.id
10898 #endif
10899
10900 #ifndef RIPPER
10901 #define ripper_flush(p) (void)(p)
10902 #else
10903 #define ripper_flush(p) (p->tokp = p->parser_lex_p)
10904
10905 #define yylval_rval *(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val)
10906
10907 static int
10908 ripper_has_scan_event(struct parser_params *parser)
10909 {
10910
10911 if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
10912 return lex_p > parser->tokp;
10913 }
10914
10915 static VALUE
10916 ripper_scan_event_val(struct parser_params *parser, int t)
10917 {
10918 VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
10919 VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
10920 ripper_flush(parser);
10921 return rval;
10922 }
10923
10924 static void
10925 ripper_dispatch_scan_event(struct parser_params *parser, int t)
10926 {
10927 if (!ripper_has_scan_event(parser)) return;
10928 yylval_rval = ripper_scan_event_val(parser, t);
10929 }
10930
10931 static void
10932 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
10933 {
10934 if (!ripper_has_scan_event(parser)) return;
10935 (void)ripper_scan_event_val(parser, t);
10936 }
10937
10938 static void
10939 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
10940 {
10941 int saved_line = ruby_sourceline;
10942 const char *saved_tokp = parser->tokp;
10943
10944 ruby_sourceline = parser->delayed_line;
10945 parser->tokp = lex_pbeg + parser->delayed_col;
10946 yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
10947 parser->delayed = Qnil;
10948 ruby_sourceline = saved_line;
10949 parser->tokp = saved_tokp;
10950 }
10951 #endif
10952
10953 #include "ruby/regex.h"
10954 #include "ruby/util.h"
10955
10956
10957
10958
10959
10960 #undef SIGN_EXTEND_CHAR
10961 #if __STDC__
10962 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
10963 #else
10964
10965 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
10966 #endif
10967
10968 #define parser_encoding_name() (parser->enc->name)
10969 #define parser_mbclen() mbclen((lex_p-1),lex_pend,parser->enc)
10970 #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,parser->enc)
10971 #define is_identchar(p,e,enc) (rb_enc_isalnum(*p,enc) || (*p) == '_' || !ISASCII(*p))
10972 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,parser->enc))
10973
10974 #define parser_isascii() ISASCII(*(lex_p-1))
10975
10976 #ifndef RIPPER
10977 static int
10978 token_info_get_column(struct parser_params *parser, const char *token)
10979 {
10980 int column = 1;
10981 const char *p, *pend = lex_p - strlen(token);
10982 for (p = lex_pbeg; p < pend; p++) {
10983 if (*p == '\t') {
10984 column = (((column - 1) / 8) + 1) * 8;
10985 }
10986 column++;
10987 }
10988 return column;
10989 }
10990
10991 static int
10992 token_info_has_nonspaces(struct parser_params *parser, const char *token)
10993 {
10994 const char *p, *pend = lex_p - strlen(token);
10995 for (p = lex_pbeg; p < pend; p++) {
10996 if (*p != ' ' && *p != '\t') {
10997 return 1;
10998 }
10999 }
11000 return 0;
11001 }
11002
11003 #undef token_info_push
11004 static void
11005 token_info_push(struct parser_params *parser, const char *token)
11006 {
11007 token_info *ptinfo;
11008
11009 if (compile_for_eval) return;
11010 ptinfo = ALLOC(token_info);
11011 ptinfo->token = token;
11012 ptinfo->linenum = ruby_sourceline;
11013 ptinfo->column = token_info_get_column(parser, token);
11014 ptinfo->nonspc = token_info_has_nonspaces(parser, token);
11015 ptinfo->next = parser->parser_token_info;
11016
11017 parser->parser_token_info = ptinfo;
11018 }
11019
11020 #undef token_info_pop
11021 static void
11022 token_info_pop(struct parser_params *parser, const char *token)
11023 {
11024 int linenum;
11025 token_info *ptinfo = parser->parser_token_info;
11026
11027 if (!ptinfo) return;
11028 parser->parser_token_info = ptinfo->next;
11029 if (token_info_get_column(parser, token) == ptinfo->column) {
11030 goto finish;
11031 }
11032 linenum = ruby_sourceline;
11033 if (linenum == ptinfo->linenum) {
11034 goto finish;
11035 }
11036 if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) {
11037 goto finish;
11038 }
11039 rb_compile_warning(ruby_sourcefile, linenum,
11040 "mismatched indentations at '%s' with '%s' at %d",
11041 token, ptinfo->token, ptinfo->linenum);
11042
11043 finish:
11044 xfree(ptinfo);
11045 }
11046 #endif
11047
11048 static int
11049 parser_yyerror(struct parser_params *parser, const char *msg)
11050 {
11051 #ifndef RIPPER
11052 const int max_line_margin = 30;
11053 const char *p, *pe;
11054 char *buf;
11055 long len;
11056 int i;
11057
11058 compile_error(PARSER_ARG "%s", msg);
11059 p = lex_p;
11060 while (lex_pbeg <= p) {
11061 if (*p == '\n') break;
11062 p--;
11063 }
11064 p++;
11065
11066 pe = lex_p;
11067 while (pe < lex_pend) {
11068 if (*pe == '\n') break;
11069 pe++;
11070 }
11071
11072 len = pe - p;
11073 if (len > 4) {
11074 char *p2;
11075 const char *pre = "", *post = "";
11076
11077 if (len > max_line_margin * 2 + 10) {
11078 if (lex_p - p > max_line_margin) {
11079 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
11080 pre = "...";
11081 }
11082 if (pe - lex_p > max_line_margin) {
11083 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
11084 post = "...";
11085 }
11086 len = pe - p;
11087 }
11088 buf = ALLOCA_N(char, len+2);
11089 MEMCPY(buf, p, char, len);
11090 buf[len] = '\0';
11091 rb_compile_error_append("%s%s%s", pre, buf, post);
11092
11093 i = (int)(lex_p - p);
11094 p2 = buf; pe = buf + len;
11095
11096 while (p2 < pe) {
11097 if (*p2 != '\t') *p2 = ' ';
11098 p2++;
11099 }
11100 buf[i] = '^';
11101 buf[i+1] = '\0';
11102 rb_compile_error_append("%s%s", pre, buf);
11103 }
11104 #else
11105 dispatch1(parse_error, STR_NEW2(msg));
11106 #endif
11107 return 0;
11108 }
11109
11110 static void parser_prepare(struct parser_params *parser);
11111
11112 #ifndef RIPPER
11113 VALUE ruby_suppress_tracing(VALUE (*func)(VALUE, int), VALUE arg, int always);
11114
11115 static VALUE
11116 debug_lines(const char *f)
11117 {
11118 ID script_lines;
11119 CONST_ID(script_lines, "SCRIPT_LINES__");
11120 if (rb_const_defined_at(rb_cObject, script_lines)) {
11121 VALUE hash = rb_const_get_at(rb_cObject, script_lines);
11122 if (TYPE(hash) == T_HASH) {
11123 VALUE fname = rb_str_new2(f);
11124 VALUE lines = rb_ary_new();
11125 rb_hash_aset(hash, fname, lines);
11126 return lines;
11127 }
11128 }
11129 return 0;
11130 }
11131
11132 static VALUE
11133 coverage(const char *f, int n)
11134 {
11135 extern VALUE rb_get_coverages(void);
11136 VALUE coverages = rb_get_coverages();
11137 if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
11138 VALUE fname = rb_str_new2(f);
11139 VALUE lines = rb_ary_new2(n);
11140 int i;
11141 RBASIC(lines)->klass = 0;
11142 for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil;
11143 RARRAY(lines)->as.heap.len = n;
11144 rb_hash_aset(coverages, fname, lines);
11145 return lines;
11146 }
11147 return 0;
11148 }
11149
11150 static int
11151 e_option_supplied(struct parser_params *parser)
11152 {
11153 return strcmp(ruby_sourcefile, "-e") == 0;
11154 }
11155
11156 static VALUE
11157 yycompile0(VALUE arg, int tracing)
11158 {
11159 int n;
11160 NODE *tree;
11161 struct parser_params *parser = (struct parser_params *)arg;
11162
11163 if (!compile_for_eval && rb_safe_level() == 0) {
11164 ruby_debug_lines = debug_lines(ruby_sourcefile);
11165 if (ruby_debug_lines && ruby_sourceline > 0) {
11166 VALUE str = STR_NEW0();
11167 n = ruby_sourceline;
11168 do {
11169 rb_ary_push(ruby_debug_lines, str);
11170 } while (--n);
11171 }
11172
11173 if (!e_option_supplied(parser)) {
11174 ruby_coverage = coverage(ruby_sourcefile, ruby_sourceline);
11175 }
11176 }
11177
11178 parser_prepare(parser);
11179 deferred_nodes = 0;
11180 n = yyparse((void*)parser);
11181 ruby_debug_lines = 0;
11182 ruby_coverage = 0;
11183 compile_for_eval = 0;
11184
11185 lex_strterm = 0;
11186 lex_p = lex_pbeg = lex_pend = 0;
11187 lex_lastline = lex_nextline = 0;
11188 if (parser->nerr) {
11189 return 0;
11190 }
11191 tree = ruby_eval_tree;
11192 if (!tree) {
11193 tree = NEW_NIL();
11194 }
11195 else if (ruby_eval_tree_begin) {
11196 tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
11197 }
11198 return (VALUE)tree;
11199 }
11200
11201 static NODE*
11202 yycompile(struct parser_params *parser, const char *f, int line)
11203 {
11204 ruby_sourcefile = ruby_strdup(f);
11205 ruby_sourceline = line - 1;
11206 return (NODE *)ruby_suppress_tracing(yycompile0, (VALUE)parser, TRUE);
11207 }
11208 #endif
11209
11210 static rb_encoding *
11211 must_be_ascii_compatible(VALUE s)
11212 {
11213 rb_encoding *enc = rb_enc_get(s);
11214 if (!rb_enc_asciicompat(enc)) {
11215 rb_raise(rb_eArgError, "invalid source encoding");
11216 }
11217 return enc;
11218 }
11219
11220 static VALUE
11221 lex_get_str(struct parser_params *parser, VALUE s)
11222 {
11223 char *beg, *end, *pend;
11224 rb_encoding *enc = must_be_ascii_compatible(s);
11225
11226 beg = RSTRING_PTR(s);
11227 if (lex_gets_ptr) {
11228 if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
11229 beg += lex_gets_ptr;
11230 }
11231 pend = RSTRING_PTR(s) + RSTRING_LEN(s);
11232 end = beg;
11233 while (end < pend) {
11234 if (*end++ == '\n') break;
11235 }
11236 lex_gets_ptr = end - RSTRING_PTR(s);
11237 return rb_enc_str_new(beg, end - beg, enc);
11238 }
11239
11240 static VALUE
11241 lex_getline(struct parser_params *parser)
11242 {
11243 VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
11244 if (NIL_P(line)) return line;
11245 must_be_ascii_compatible(line);
11246 #ifndef RIPPER
11247 if (ruby_debug_lines) {
11248 rb_ary_push(ruby_debug_lines, line);
11249 }
11250 if (ruby_coverage) {
11251 rb_ary_push(ruby_coverage, Qnil);
11252 }
11253 #endif
11254 return line;
11255 }
11256
11257 static const rb_data_type_t parser_data_type;
11258
11259 #ifndef RIPPER
11260 static NODE*
11261 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11262 {
11263 struct parser_params *parser;
11264 NODE *node;
11265 volatile VALUE tmp;
11266
11267 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11268 lex_gets = lex_get_str;
11269 lex_gets_ptr = 0;
11270 lex_input = s;
11271 lex_pbeg = lex_p = lex_pend = 0;
11272 compile_for_eval = rb_parse_in_eval();
11273
11274 node = yycompile(parser, f, line);
11275 tmp = vparser;
11276
11277 return node;
11278 }
11279
11280 NODE*
11281 rb_compile_string(const char *f, VALUE s, int line)
11282 {
11283 must_be_ascii_compatible(s);
11284 return parser_compile_string(rb_parser_new(), f, s, line);
11285 }
11286
11287 NODE*
11288 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11289 {
11290 must_be_ascii_compatible(s);
11291 return parser_compile_string(vparser, f, s, line);
11292 }
11293
11294 NODE*
11295 rb_compile_cstr(const char *f, const char *s, int len, int line)
11296 {
11297 VALUE str = rb_str_new(s, len);
11298 return parser_compile_string(rb_parser_new(), f, str, line);
11299 }
11300
11301 NODE*
11302 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
11303 {
11304 VALUE str = rb_str_new(s, len);
11305 return parser_compile_string(vparser, f, str, line);
11306 }
11307
11308 static VALUE
11309 lex_io_gets(struct parser_params *parser, VALUE io)
11310 {
11311 return rb_io_gets(io);
11312 }
11313
11314 NODE*
11315 rb_compile_file(const char *f, VALUE file, int start)
11316 {
11317 VALUE volatile vparser = rb_parser_new();
11318
11319 return rb_parser_compile_file(vparser, f, file, start);
11320 }
11321
11322 NODE*
11323 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
11324 {
11325 struct parser_params *parser;
11326 volatile VALUE tmp;
11327 NODE *node;
11328
11329 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11330 lex_gets = lex_io_gets;
11331 lex_input = file;
11332 lex_pbeg = lex_p = lex_pend = 0;
11333 compile_for_eval = rb_parse_in_eval();
11334
11335 node = yycompile(parser, f, start);
11336 tmp = vparser;
11337
11338 return node;
11339 }
11340 #endif
11341
11342 #define STR_FUNC_ESCAPE 0x01
11343 #define STR_FUNC_EXPAND 0x02
11344 #define STR_FUNC_REGEXP 0x04
11345 #define STR_FUNC_QWORDS 0x08
11346 #define STR_FUNC_SYMBOL 0x10
11347 #define STR_FUNC_INDENT 0x20
11348
11349 enum string_type {
11350 str_squote = (0),
11351 str_dquote = (STR_FUNC_EXPAND),
11352 str_xquote = (STR_FUNC_EXPAND),
11353 str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND),
11354 str_sword = (STR_FUNC_QWORDS),
11355 str_dword = (STR_FUNC_QWORDS|STR_FUNC_EXPAND),
11356 str_ssym = (STR_FUNC_SYMBOL),
11357 str_dsym = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND)
11358 };
11359
11360 static VALUE
11361 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
11362 {
11363 VALUE str;
11364
11365 str = rb_enc_str_new(p, n, enc);
11366 if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
11367 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
11368 }
11369 else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
11370 rb_enc_associate(str, rb_ascii8bit_encoding());
11371 }
11372 }
11373
11374 return str;
11375 }
11376
11377 #define lex_goto_eol(parser) (parser->parser_lex_p = parser->parser_lex_pend)
11378 #define peek(c) (lex_p < lex_pend && (c) == *lex_p)
11379
11380 static inline int
11381 parser_nextc(struct parser_params *parser)
11382 {
11383 int c;
11384
11385 if (lex_p == lex_pend) {
11386 VALUE v = lex_nextline;
11387 lex_nextline = 0;
11388 if (!v) {
11389 if (parser->eofp)
11390 return -1;
11391
11392 if (!lex_input || NIL_P(v = lex_getline(parser))) {
11393 parser->eofp = Qtrue;
11394 lex_goto_eol(parser);
11395 return -1;
11396 }
11397 }
11398 {
11399 #ifdef RIPPER
11400 if (parser->tokp < lex_pend) {
11401 if (NIL_P(parser->delayed)) {
11402 parser->delayed = rb_str_buf_new(1024);
11403 rb_str_buf_cat(parser->delayed,
11404 parser->tokp, lex_pend - parser->tokp);
11405 parser->delayed_line = ruby_sourceline;
11406 parser->delayed_col = (int)(parser->tokp - lex_pbeg);
11407 }
11408 else {
11409 rb_str_buf_cat(parser->delayed,
11410 parser->tokp, lex_pend - parser->tokp);
11411 }
11412 }
11413 #endif
11414 if (heredoc_end > 0) {
11415 ruby_sourceline = heredoc_end;
11416 heredoc_end = 0;
11417 }
11418 ruby_sourceline++;
11419 parser->line_count++;
11420 lex_pbeg = lex_p = RSTRING_PTR(v);
11421 lex_pend = lex_p + RSTRING_LEN(v);
11422 ripper_flush(parser);
11423 lex_lastline = v;
11424 }
11425 }
11426 c = (unsigned char)*lex_p++;
11427 if (c == '\r' && peek('\n')) {
11428 lex_p++;
11429 c = '\n';
11430 }
11431
11432 return c;
11433 }
11434
11435 static void
11436 parser_pushback(struct parser_params *parser, int c)
11437 {
11438 if (c == -1) return;
11439 lex_p--;
11440 if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
11441 lex_p--;
11442 }
11443 }
11444
11445 #define was_bol() (lex_p == lex_pbeg + 1)
11446
11447 #define tokfix() (tokenbuf[tokidx]='\0')
11448 #define tok() tokenbuf
11449 #define toklen() tokidx
11450 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
11451
11452 static char*
11453 parser_newtok(struct parser_params *parser)
11454 {
11455 tokidx = 0;
11456 if (!tokenbuf) {
11457 toksiz = 60;
11458 tokenbuf = ALLOC_N(char, 60);
11459 }
11460 if (toksiz > 4096) {
11461 toksiz = 60;
11462 REALLOC_N(tokenbuf, char, 60);
11463 }
11464 return tokenbuf;
11465 }
11466
11467 static char *
11468 parser_tokspace(struct parser_params *parser, int n)
11469 {
11470 tokidx += n;
11471
11472 if (tokidx >= toksiz) {
11473 do {toksiz *= 2;} while (toksiz < tokidx);
11474 REALLOC_N(tokenbuf, char, toksiz);
11475 }
11476 return &tokenbuf[tokidx-n];
11477 }
11478
11479 static void
11480 parser_tokadd(struct parser_params *parser, int c)
11481 {
11482 tokenbuf[tokidx++] = (char)c;
11483 if (tokidx >= toksiz) {
11484 toksiz *= 2;
11485 REALLOC_N(tokenbuf, char, toksiz);
11486 }
11487 }
11488
11489 static int
11490 parser_tok_hex(struct parser_params *parser, size_t *numlen)
11491 {
11492 int c;
11493
11494 c = scan_hex(lex_p, 2, numlen);
11495 if (!*numlen) {
11496 yyerror("invalid hex escape");
11497 return 0;
11498 }
11499 lex_p += *numlen;
11500 return c;
11501 }
11502
11503 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
11504
11505 static int
11506 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
11507 int string_literal, int symbol_literal, int regexp_literal)
11508 {
11509
11510
11511
11512
11513
11514
11515
11516 int codepoint;
11517 size_t numlen;
11518
11519 if (regexp_literal) { tokadd('\\'); tokadd('u'); }
11520
11521 if (peek('{')) {
11522 do {
11523 if (regexp_literal) { tokadd(*lex_p); }
11524 nextc();
11525 codepoint = scan_hex(lex_p, 6, &numlen);
11526 if (numlen == 0) {
11527 yyerror("invalid Unicode escape");
11528 return 0;
11529 }
11530 if (codepoint > 0x10ffff) {
11531 yyerror("invalid Unicode codepoint (too large)");
11532 return 0;
11533 }
11534 lex_p += numlen;
11535 if (regexp_literal) {
11536 tokcopy((int)numlen);
11537 }
11538 else if (codepoint >= 0x80) {
11539 *encp = UTF8_ENC();
11540 if (string_literal) tokaddmbc(codepoint, *encp);
11541 }
11542 else if (string_literal) {
11543 tokadd(codepoint);
11544 }
11545 } while (string_literal && (peek(' ') || peek('\t')));
11546
11547 if (!peek('}')) {
11548 yyerror("unterminated Unicode escape");
11549 return 0;
11550 }
11551
11552 if (regexp_literal) { tokadd('}'); }
11553 nextc();
11554 }
11555 else {
11556 codepoint = scan_hex(lex_p, 4, &numlen);
11557 if (numlen < 4) {
11558 yyerror("invalid Unicode escape");
11559 return 0;
11560 }
11561 lex_p += 4;
11562 if (regexp_literal) {
11563 tokcopy(4);
11564 }
11565 else if (codepoint >= 0x80) {
11566 *encp = UTF8_ENC();
11567 if (string_literal) tokaddmbc(codepoint, *encp);
11568 }
11569 else if (string_literal) {
11570 tokadd(codepoint);
11571 }
11572 }
11573
11574 return codepoint;
11575 }
11576
11577 #define ESCAPE_CONTROL 1
11578 #define ESCAPE_META 2
11579
11580 static int
11581 parser_read_escape(struct parser_params *parser, int flags,
11582 rb_encoding **encp)
11583 {
11584 int c;
11585 size_t numlen;
11586
11587 switch (c = nextc()) {
11588 case '\\':
11589 return c;
11590
11591 case 'n':
11592 return '\n';
11593
11594 case 't':
11595 return '\t';
11596
11597 case 'r':
11598 return '\r';
11599
11600 case 'f':
11601 return '\f';
11602
11603 case 'v':
11604 return '\13';
11605
11606 case 'a':
11607 return '\007';
11608
11609 case 'e':
11610 return 033;
11611
11612 case '0': case '1': case '2': case '3':
11613 case '4': case '5': case '6': case '7':
11614 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11615 pushback(c);
11616 c = scan_oct(lex_p, 3, &numlen);
11617 lex_p += numlen;
11618 return c;
11619
11620 case 'x':
11621 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11622 c = tok_hex(&numlen);
11623 if (numlen == 0) return 0;
11624 return c;
11625
11626 case 'b':
11627 return '\010';
11628
11629 case 's':
11630 return ' ';
11631
11632 case 'M':
11633 if (flags & ESCAPE_META) goto eof;
11634 if ((c = nextc()) != '-') {
11635 pushback(c);
11636 goto eof;
11637 }
11638 if ((c = nextc()) == '\\') {
11639 if (peek('u')) goto eof;
11640 return read_escape(flags|ESCAPE_META, encp) | 0x80;
11641 }
11642 else if (c == -1 || !ISASCII(c)) goto eof;
11643 else {
11644 return ((c & 0xff) | 0x80);
11645 }
11646
11647 case 'C':
11648 if ((c = nextc()) != '-') {
11649 pushback(c);
11650 goto eof;
11651 }
11652 case 'c':
11653 if (flags & ESCAPE_CONTROL) goto eof;
11654 if ((c = nextc())== '\\') {
11655 if (peek('u')) goto eof;
11656 c = read_escape(flags|ESCAPE_CONTROL, encp);
11657 }
11658 else if (c == '?')
11659 return 0177;
11660 else if (c == -1 || !ISASCII(c)) goto eof;
11661 return c & 0x9f;
11662
11663 eof:
11664 case -1:
11665 yyerror("Invalid escape character syntax");
11666 return '\0';
11667
11668 default:
11669 return c;
11670 }
11671 }
11672
11673 static void
11674 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
11675 {
11676 int len = rb_enc_codelen(c, enc);
11677 rb_enc_mbcput(c, tokspace(len), enc);
11678 }
11679
11680 static int
11681 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
11682 {
11683 int c;
11684 int flags = 0;
11685 size_t numlen;
11686
11687 first:
11688 switch (c = nextc()) {
11689 case '\n':
11690 return 0;
11691
11692 case '0': case '1': case '2': case '3':
11693 case '4': case '5': case '6': case '7':
11694 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11695 {
11696 ruby_scan_oct(--lex_p, 3, &numlen);
11697 if (numlen == 0) goto eof;
11698 lex_p += numlen;
11699 tokcopy((int)numlen + 1);
11700 }
11701 return 0;
11702
11703 case 'x':
11704 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11705 {
11706 tok_hex(&numlen);
11707 if (numlen == 0) goto eof;
11708 tokcopy((int)numlen + 2);
11709 }
11710 return 0;
11711
11712 case 'M':
11713 if (flags & ESCAPE_META) goto eof;
11714 if ((c = nextc()) != '-') {
11715 pushback(c);
11716 goto eof;
11717 }
11718 tokcopy(3);
11719 flags |= ESCAPE_META;
11720 goto escaped;
11721
11722 case 'C':
11723 if (flags & ESCAPE_CONTROL) goto eof;
11724 if ((c = nextc()) != '-') {
11725 pushback(c);
11726 goto eof;
11727 }
11728 tokcopy(3);
11729 goto escaped;
11730
11731 case 'c':
11732 if (flags & ESCAPE_CONTROL) goto eof;
11733 tokcopy(2);
11734 flags |= ESCAPE_CONTROL;
11735 escaped:
11736 if ((c = nextc()) == '\\') {
11737 goto first;
11738 }
11739 else if (c == -1) goto eof;
11740 tokadd(c);
11741 return 0;
11742
11743 eof:
11744 case -1:
11745 yyerror("Invalid escape character syntax");
11746 return -1;
11747
11748 default:
11749 tokadd('\\');
11750 tokadd(c);
11751 }
11752 return 0;
11753 }
11754
11755 extern int rb_char_to_option_kcode(int c, int *option, int *kcode);
11756
11757 static int
11758 parser_regx_options(struct parser_params *parser)
11759 {
11760 int kcode = 0;
11761 int kopt = 0;
11762 int options = 0;
11763 int c, opt, kc;
11764
11765 newtok();
11766 while (c = nextc(), ISALPHA(c)) {
11767 if (c == 'o') {
11768 options |= RE_OPTION_ONCE;
11769 }
11770 else if (rb_char_to_option_kcode(c, &opt, &kc)) {
11771 if (kc >= 0) {
11772 if (kc != rb_ascii8bit_encindex()) kcode = c;
11773 kopt = opt;
11774 }
11775 else {
11776 options |= opt;
11777 }
11778 }
11779 else {
11780 tokadd(c);
11781 }
11782 }
11783 options |= kopt;
11784 pushback(c);
11785 if (toklen()) {
11786 tokfix();
11787 compile_error(PARSER_ARG "unknown regexp option%s - %s",
11788 toklen() > 1 ? "s" : "", tok());
11789 }
11790 return options | RE_OPTION_ENCODING(kcode);
11791 }
11792
11793 static void
11794 dispose_string(VALUE str)
11795 {
11796
11797 if (RBASIC(str)->flags & RSTRING_NOEMBED)
11798 xfree(RSTRING_PTR(str));
11799 rb_gc_force_recycle(str);
11800 }
11801
11802 static int
11803 parser_tokadd_mbchar(struct parser_params *parser, int c)
11804 {
11805 int len = parser_precise_mbclen();
11806 if (!MBCLEN_CHARFOUND_P(len)) {
11807 compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
11808 return -1;
11809 }
11810 tokadd(c);
11811 lex_p += --len;
11812 if (len > 0) tokcopy(len);
11813 return c;
11814 }
11815
11816 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, c)
11817
11818 static int
11819 parser_tokadd_string(struct parser_params *parser,
11820 int func, int term, int paren, long *nest,
11821 rb_encoding **encp)
11822 {
11823 int c;
11824 int has_nonascii = 0;
11825 rb_encoding *enc = *encp;
11826 char *errbuf = 0;
11827 static const char mixed_msg[] = "%s mixed within %s source";
11828
11829 #define mixed_error(enc1, enc2) if (!errbuf) { \
11830 size_t len = sizeof(mixed_msg) - 4; \
11831 len += strlen(rb_enc_name(enc1)); \
11832 len += strlen(rb_enc_name(enc2)); \
11833 errbuf = ALLOCA_N(char, len); \
11834 snprintf(errbuf, len, mixed_msg, \
11835 rb_enc_name(enc1), \
11836 rb_enc_name(enc2)); \
11837 yyerror(errbuf); \
11838 }
11839 #define mixed_escape(beg, enc1, enc2) do { \
11840 const char *pos = lex_p; \
11841 lex_p = beg; \
11842 mixed_error(enc1, enc2); \
11843 lex_p = pos; \
11844 } while (0)
11845
11846 while ((c = nextc()) != -1) {
11847 if (paren && c == paren) {
11848 ++*nest;
11849 }
11850 else if (c == term) {
11851 if (!nest || !*nest) {
11852 pushback(c);
11853 break;
11854 }
11855 --*nest;
11856 }
11857 else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
11858 int c2 = *lex_p;
11859 if (c2 == '$' || c2 == '@' || c2 == '{') {
11860 pushback(c);
11861 break;
11862 }
11863 }
11864 else if (c == '\\') {
11865 const char *beg = lex_p - 1;
11866 c = nextc();
11867 switch (c) {
11868 case '\n':
11869 if (func & STR_FUNC_QWORDS) break;
11870 if (func & STR_FUNC_EXPAND) continue;
11871 tokadd('\\');
11872 break;
11873
11874 case '\\':
11875 if (func & STR_FUNC_ESCAPE) tokadd(c);
11876 break;
11877
11878 case 'u':
11879 if ((func & STR_FUNC_EXPAND) == 0) {
11880 tokadd('\\');
11881 break;
11882 }
11883 parser_tokadd_utf8(parser, &enc, 1,
11884 func & STR_FUNC_SYMBOL,
11885 func & STR_FUNC_REGEXP);
11886 if (has_nonascii && enc != *encp) {
11887 mixed_escape(beg, enc, *encp);
11888 }
11889 continue;
11890
11891 default:
11892 if (func & STR_FUNC_REGEXP) {
11893 pushback(c);
11894 if ((c = tokadd_escape(&enc)) < 0)
11895 return -1;
11896 if (has_nonascii && enc != *encp) {
11897 mixed_escape(beg, enc, *encp);
11898 }
11899 continue;
11900 }
11901 else if (func & STR_FUNC_EXPAND) {
11902 pushback(c);
11903 if (func & STR_FUNC_ESCAPE) tokadd('\\');
11904 c = read_escape(0, &enc);
11905 }
11906 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11907
11908 }
11909 else if (c != term && !(paren && c == paren)) {
11910 tokadd('\\');
11911 pushback(c);
11912 continue;
11913 }
11914 }
11915 }
11916 else if (!parser_isascii()) {
11917 has_nonascii = 1;
11918 if (enc != *encp) {
11919 mixed_error(enc, *encp);
11920 continue;
11921 }
11922 if (tokadd_mbchar(c) == -1) return -1;
11923 continue;
11924 }
11925 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11926 pushback(c);
11927 break;
11928 }
11929 if (c & 0x80) {
11930 has_nonascii = 1;
11931 if (enc != *encp) {
11932 mixed_error(enc, *encp);
11933 continue;
11934 }
11935 }
11936 tokadd(c);
11937 }
11938 *encp = enc;
11939 return c;
11940 }
11941
11942 #define NEW_STRTERM(func, term, paren) \
11943 rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
11944
11945 static int
11946 parser_parse_string(struct parser_params *parser, NODE *quote)
11947 {
11948 int func = (int)quote->nd_func;
11949 int term = nd_term(quote);
11950 int paren = nd_paren(quote);
11951 int c, space = 0;
11952 rb_encoding *enc = parser->enc;
11953
11954 if (func == -1) return tSTRING_END;
11955 c = nextc();
11956 if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11957 do {c = nextc();} while (ISSPACE(c));
11958 space = 1;
11959 }
11960 if (c == term && !quote->nd_nest) {
11961 if (func & STR_FUNC_QWORDS) {
11962 quote->nd_func = -1;
11963 return ' ';
11964 }
11965 if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
11966 set_yylval_num(regx_options());
11967 return tREGEXP_END;
11968 }
11969 if (space) {
11970 pushback(c);
11971 return ' ';
11972 }
11973 newtok();
11974 if ((func & STR_FUNC_EXPAND) && c == '#') {
11975 switch (c = nextc()) {
11976 case '$':
11977 case '@':
11978 pushback(c);
11979 return tSTRING_DVAR;
11980 case '{':
11981 return tSTRING_DBEG;
11982 }
11983 tokadd('#');
11984 }
11985 pushback(c);
11986 if (tokadd_string(func, term, paren, "e->nd_nest,
11987 &enc) == -1) {
11988 ruby_sourceline = nd_line(quote);
11989 if (func & STR_FUNC_REGEXP) {
11990 if (parser->eofp)
11991 compile_error(PARSER_ARG "unterminated regexp meets end of file");
11992 return tREGEXP_END;
11993 }
11994 else {
11995 if (parser->eofp)
11996 compile_error(PARSER_ARG "unterminated string meets end of file");
11997 return tSTRING_END;
11998 }
11999 }
12000
12001 tokfix();
12002 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12003 return tSTRING_CONTENT;
12004 }
12005
12006 static int
12007 parser_heredoc_identifier(struct parser_params *parser)
12008 {
12009 int c = nextc(), term, func = 0;
12010 long len;
12011
12012 if (c == '-') {
12013 c = nextc();
12014 func = STR_FUNC_INDENT;
12015 }
12016 switch (c) {
12017 case '\'':
12018 func |= str_squote; goto quoted;
12019 case '"':
12020 func |= str_dquote; goto quoted;
12021 case '`':
12022 func |= str_xquote;
12023 quoted:
12024 newtok();
12025 tokadd(func);
12026 term = c;
12027 while ((c = nextc()) != -1 && c != term) {
12028 if (tokadd_mbchar(c) == -1) return 0;
12029 }
12030 if (c == -1) {
12031 compile_error(PARSER_ARG "unterminated here document identifier");
12032 return 0;
12033 }
12034 break;
12035
12036 default:
12037 if (!parser_is_identchar()) {
12038 pushback(c);
12039 if (func & STR_FUNC_INDENT) {
12040 pushback('-');
12041 }
12042 return 0;
12043 }
12044 newtok();
12045 term = '"';
12046 tokadd(func |= str_dquote);
12047 do {
12048 if (tokadd_mbchar(c) == -1) return 0;
12049 } while ((c = nextc()) != -1 && parser_is_identchar());
12050 pushback(c);
12051 break;
12052 }
12053
12054 tokfix();
12055 #ifdef RIPPER
12056 ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
12057 #endif
12058 len = lex_p - lex_pbeg;
12059 lex_goto_eol(parser);
12060 lex_strterm = rb_node_newnode(NODE_HEREDOC,
12061 STR_NEW(tok(), toklen()),
12062 len,
12063 lex_lastline);
12064 nd_set_line(lex_strterm, ruby_sourceline);
12065 ripper_flush(parser);
12066 return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
12067 }
12068
12069 static void
12070 parser_heredoc_restore(struct parser_params *parser, NODE *here)
12071 {
12072 VALUE line;
12073
12074 line = here->nd_orig;
12075 lex_lastline = line;
12076 lex_pbeg = RSTRING_PTR(line);
12077 lex_pend = lex_pbeg + RSTRING_LEN(line);
12078 lex_p = lex_pbeg + here->nd_nth;
12079 heredoc_end = ruby_sourceline;
12080 ruby_sourceline = nd_line(here);
12081 dispose_string(here->nd_lit);
12082 rb_gc_force_recycle((VALUE)here);
12083 ripper_flush(parser);
12084 }
12085
12086 static int
12087 parser_whole_match_p(struct parser_params *parser,
12088 const char *eos, long len, int indent)
12089 {
12090 const char *p = lex_pbeg;
12091 long n;
12092
12093 if (indent) {
12094 while (*p && ISSPACE(*p)) p++;
12095 }
12096 n = lex_pend - (p + len);
12097 if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE;
12098 return strncmp(eos, p, len) == 0;
12099 }
12100
12101 static int
12102 parser_here_document(struct parser_params *parser, NODE *here)
12103 {
12104 int c, func, indent = 0;
12105 const char *eos, *p, *pend;
12106 long len;
12107 VALUE str = 0;
12108 rb_encoding *enc = parser->enc;
12109
12110 eos = RSTRING_PTR(here->nd_lit);
12111 len = RSTRING_LEN(here->nd_lit) - 1;
12112 indent = (func = *eos++) & STR_FUNC_INDENT;
12113
12114 if ((c = nextc()) == -1) {
12115 error:
12116 compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
12117 #ifdef RIPPER
12118 if (NIL_P(parser->delayed)) {
12119 ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
12120 }
12121 else {
12122 if (str ||
12123 ((len = lex_p - parser->tokp) > 0 &&
12124 (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
12125 rb_str_append(parser->delayed, str);
12126 }
12127 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12128 }
12129 lex_goto_eol(parser);
12130 #endif
12131 restore:
12132 heredoc_restore(lex_strterm);
12133 lex_strterm = 0;
12134 return 0;
12135 }
12136 if (was_bol() && whole_match_p(eos, len, indent)) {
12137 heredoc_restore(lex_strterm);
12138 return tSTRING_END;
12139 }
12140
12141 if (!(func & STR_FUNC_EXPAND)) {
12142 do {
12143 p = RSTRING_PTR(lex_lastline);
12144 pend = lex_pend;
12145 if (pend > p) {
12146 switch (pend[-1]) {
12147 case '\n':
12148 if (--pend == p || pend[-1] != '\r') {
12149 pend++;
12150 break;
12151 }
12152 case '\r':
12153 --pend;
12154 }
12155 }
12156 if (str)
12157 rb_str_cat(str, p, pend - p);
12158 else
12159 str = STR_NEW(p, pend - p);
12160 if (pend < lex_pend) rb_str_cat(str, "\n", 1);
12161 lex_goto_eol(parser);
12162 if (nextc() == -1) {
12163 if (str) dispose_string(str);
12164 goto error;
12165 }
12166 } while (!whole_match_p(eos, len, indent));
12167 }
12168 else {
12169
12170 newtok();
12171 if (c == '#') {
12172 switch (c = nextc()) {
12173 case '$':
12174 case '@':
12175 pushback(c);
12176 return tSTRING_DVAR;
12177 case '{':
12178 return tSTRING_DBEG;
12179 }
12180 tokadd('#');
12181 }
12182 do {
12183 pushback(c);
12184 if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
12185 if (parser->eofp) goto error;
12186 goto restore;
12187 }
12188 if (c != '\n') {
12189 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12190 return tSTRING_CONTENT;
12191 }
12192 tokadd(nextc());
12193
12194 if ((c = nextc()) == -1) goto error;
12195 } while (!whole_match_p(eos, len, indent));
12196 str = STR_NEW3(tok(), toklen(), enc, func);
12197 }
12198 #ifdef RIPPER
12199 if (!NIL_P(parser->delayed))
12200 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12201 lex_goto_eol(parser);
12202 ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
12203 #endif
12204 heredoc_restore(lex_strterm);
12205 lex_strterm = NEW_STRTERM(-1, 0, 0);
12206 set_yylval_str(str);
12207 return tSTRING_CONTENT;
12208 }
12209
12210 #include "lex.c"
12211
12212 static void
12213 arg_ambiguous_gen(struct parser_params *parser)
12214 {
12215 #ifndef RIPPER
12216 rb_warning0("ambiguous first argument; put parentheses or even spaces");
12217 #else
12218 dispatch0(arg_ambiguous);
12219 #endif
12220 }
12221 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
12222
12223 static ID
12224 formal_argument_gen(struct parser_params *parser, ID lhs)
12225 {
12226 #ifndef RIPPER
12227 if (!is_local_id(lhs))
12228 yyerror("formal argument must be local variable");
12229 #endif
12230 shadowing_lvar(lhs);
12231 return lhs;
12232 }
12233
12234 static int
12235 lvar_defined_gen(struct parser_params *parser, ID id)
12236 {
12237 return (dyna_in_block() && dvar_defined(id)) || local_id(id);
12238 }
12239
12240
12241 static long
12242 parser_encode_length(struct parser_params *parser, const char *name, long len)
12243 {
12244 long nlen;
12245
12246 if (len > 5 && name[nlen = len - 5] == '-') {
12247 if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
12248 return nlen;
12249 }
12250 if (len > 4 && name[nlen = len - 5] == '-') {
12251 if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
12252 return nlen;
12253 if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0)
12254 return nlen;
12255 }
12256 return len;
12257 }
12258
12259 static void
12260 parser_set_encode(struct parser_params *parser, const char *name)
12261 {
12262 int idx = rb_enc_find_index(name);
12263 rb_encoding *enc;
12264 VALUE excargs[3];
12265
12266 if (idx < 0) {
12267 VALUE rb_make_backtrace(void);
12268 VALUE rb_make_exception(int, VALUE*);
12269
12270 excargs[1] = rb_sprintf("unknown encoding name: %s", name);
12271 error:
12272 excargs[0] = rb_eArgError;
12273 excargs[2] = rb_make_backtrace();
12274 rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
12275 rb_exc_raise(rb_make_exception(3, excargs));
12276 }
12277 enc = rb_enc_from_index(idx);
12278 if (!rb_enc_asciicompat(enc)) {
12279 excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
12280 goto error;
12281 }
12282 parser->enc = enc;
12283 }
12284
12285 static int
12286 comment_at_top(struct parser_params *parser)
12287 {
12288 const char *p = lex_pbeg, *pend = lex_p - 1;
12289 if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
12290 while (p < pend) {
12291 if (!ISSPACE(*p)) return 0;
12292 p++;
12293 }
12294 return 1;
12295 }
12296
12297 #ifndef RIPPER
12298 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
12299 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
12300
12301 static void
12302 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
12303 {
12304 if (!comment_at_top(parser)) {
12305 return;
12306 }
12307 parser_set_encode(parser, val);
12308 }
12309
12310 struct magic_comment {
12311 const char *name;
12312 rb_magic_comment_setter_t func;
12313 rb_magic_comment_length_t length;
12314 };
12315
12316 static const struct magic_comment magic_comments[] = {
12317 {"coding", magic_comment_encoding, parser_encode_length},
12318 {"encoding", magic_comment_encoding, parser_encode_length},
12319 };
12320 #endif
12321
12322 static const char *
12323 magic_comment_marker(const char *str, long len)
12324 {
12325 long i = 2;
12326
12327 while (i < len) {
12328 switch (str[i]) {
12329 case '-':
12330 if (str[i-1] == '*' && str[i-2] == '-') {
12331 return str + i + 1;
12332 }
12333 i += 2;
12334 break;
12335 case '*':
12336 if (i + 1 >= len) return 0;
12337 if (str[i+1] != '-') {
12338 i += 4;
12339 }
12340 else if (str[i-1] != '-') {
12341 i += 2;
12342 }
12343 else {
12344 return str + i + 2;
12345 }
12346 break;
12347 default:
12348 i += 3;
12349 break;
12350 }
12351 }
12352 return 0;
12353 }
12354
12355 static int
12356 parser_magic_comment(struct parser_params *parser, const char *str, long len)
12357 {
12358 VALUE name = 0, val = 0;
12359 const char *beg, *end, *vbeg, *vend;
12360 #define str_copy(_s, _p, _n) ((_s) \
12361 ? (rb_str_resize((_s), (_n)), \
12362 MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
12363 : ((_s) = STR_NEW((_p), (_n))))
12364
12365 if (len <= 7) return FALSE;
12366 if (!(beg = magic_comment_marker(str, len))) return FALSE;
12367 if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
12368 str = beg;
12369 len = end - beg - 3;
12370
12371
12372 while (len > 0) {
12373 #ifndef RIPPER
12374 const struct magic_comment *p = magic_comments;
12375 #endif
12376 char *s;
12377 int i;
12378 long n = 0;
12379
12380 for (; len > 0 && *str; str++, --len) {
12381 switch (*str) {
12382 case '\'': case '"': case ':': case ';':
12383 continue;
12384 }
12385 if (!ISSPACE(*str)) break;
12386 }
12387 for (beg = str; len > 0; str++, --len) {
12388 switch (*str) {
12389 case '\'': case '"': case ':': case ';':
12390 break;
12391 default:
12392 if (ISSPACE(*str)) break;
12393 continue;
12394 }
12395 break;
12396 }
12397 for (end = str; len > 0 && ISSPACE(*str); str++, --len);
12398 if (!len) break;
12399 if (*str != ':') continue;
12400
12401 do str++; while (--len > 0 && ISSPACE(*str));
12402 if (!len) break;
12403 if (*str == '"') {
12404 for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
12405 if (*str == '\\') {
12406 --len;
12407 ++str;
12408 }
12409 }
12410 vend = str;
12411 if (len) {
12412 --len;
12413 ++str;
12414 }
12415 }
12416 else {
12417 for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
12418 vend = str;
12419 }
12420 while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
12421
12422 n = end - beg;
12423 str_copy(name, beg, n);
12424 s = RSTRING_PTR(name);
12425 for (i = 0; i < n; ++i) {
12426 if (s[i] == '-') s[i] = '_';
12427 }
12428 #ifndef RIPPER
12429 do {
12430 if (STRNCASECMP(p->name, s, n) == 0) {
12431 n = vend - vbeg;
12432 if (p->length) {
12433 n = (*p->length)(parser, vbeg, n);
12434 }
12435 str_copy(val, vbeg, n);
12436 (*p->func)(parser, s, RSTRING_PTR(val));
12437 break;
12438 }
12439 } while (++p < magic_comments + numberof(magic_comments));
12440 #else
12441 dispatch2(magic_comment, name, val);
12442 #endif
12443 }
12444
12445 return TRUE;
12446 }
12447
12448 static void
12449 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
12450 {
12451 int sep = 0;
12452 const char *beg = str;
12453 VALUE s;
12454
12455 for (;;) {
12456 if (send - str <= 6) return;
12457 switch (str[6]) {
12458 case 'C': case 'c': str += 6; continue;
12459 case 'O': case 'o': str += 5; continue;
12460 case 'D': case 'd': str += 4; continue;
12461 case 'I': case 'i': str += 3; continue;
12462 case 'N': case 'n': str += 2; continue;
12463 case 'G': case 'g': str += 1; continue;
12464 case '=': case ':':
12465 sep = 1;
12466 str += 6;
12467 break;
12468 default:
12469 str += 6;
12470 if (ISSPACE(*str)) break;
12471 continue;
12472 }
12473 if (STRNCASECMP(str-6, "coding", 6) == 0) break;
12474 }
12475 for (;;) {
12476 do {
12477 if (++str >= send) return;
12478 } while (ISSPACE(*str));
12479 if (sep) break;
12480 if (*str != '=' && *str != ':') return;
12481 sep = 1;
12482 str++;
12483 }
12484 beg = str;
12485 while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
12486 s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
12487 parser_set_encode(parser, RSTRING_PTR(s));
12488 rb_str_resize(s, 0);
12489 }
12490
12491 static void
12492 parser_prepare(struct parser_params *parser)
12493 {
12494 int c = nextc();
12495 switch (c) {
12496 case '#':
12497 if (peek('!')) parser->has_shebang = 1;
12498 break;
12499 case 0xef:
12500 if (lex_pend - lex_p >= 2 &&
12501 (unsigned char)lex_p[0] == 0xbb &&
12502 (unsigned char)lex_p[1] == 0xbf) {
12503 parser->enc = rb_utf8_encoding();
12504 lex_p += 2;
12505 lex_pbeg = lex_p;
12506 return;
12507 }
12508 break;
12509 case EOF:
12510 return;
12511 }
12512 pushback(c);
12513 parser->enc = rb_enc_get(lex_lastline);
12514 }
12515
12516 #define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG)
12517 #define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_ENDFN)
12518 #define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS)
12519 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
12520
12521 #ifndef RIPPER
12522 #define ambiguous_operator(op, syn) ( \
12523 rb_warning0("`"op"' after local variable is interpreted as binary operator"), \
12524 rb_warning0("even though it seems like "syn""))
12525 #else
12526 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
12527 #endif
12528 #define warn_balanced(op, syn) \
12529 (last_state != EXPR_CLASS && last_state != EXPR_DOT && \
12530 last_state != EXPR_FNAME && last_state != EXPR_ENDFN && \
12531 last_state != EXPR_ENDARG && \
12532 space_seen && !ISSPACE(c) && \
12533 (ambiguous_operator(op, syn), 0))
12534
12535 static int
12536 parser_yylex(struct parser_params *parser)
12537 {
12538 register int c;
12539 int space_seen = 0;
12540 int cmd_state;
12541 enum lex_state_e last_state;
12542 rb_encoding *enc;
12543 int mb;
12544 #ifdef RIPPER
12545 int fallthru = FALSE;
12546 #endif
12547
12548 if (lex_strterm) {
12549 int token;
12550 if (nd_type(lex_strterm) == NODE_HEREDOC) {
12551 token = here_document(lex_strterm);
12552 if (token == tSTRING_END) {
12553 lex_strterm = 0;
12554 lex_state = EXPR_END;
12555 }
12556 }
12557 else {
12558 token = parse_string(lex_strterm);
12559 if (token == tSTRING_END || token == tREGEXP_END) {
12560 rb_gc_force_recycle((VALUE)lex_strterm);
12561 lex_strterm = 0;
12562 lex_state = EXPR_END;
12563 }
12564 }
12565 return token;
12566 }
12567 cmd_state = command_start;
12568 command_start = FALSE;
12569 retry:
12570 last_state = lex_state;
12571 switch (c = nextc()) {
12572 case '\0':
12573 case '\004':
12574 case '\032':
12575 case -1:
12576 return 0;
12577
12578
12579 case ' ': case '\t': case '\f': case '\r':
12580 case '\13':
12581 space_seen = 1;
12582 #ifdef RIPPER
12583 while ((c = nextc())) {
12584 switch (c) {
12585 case ' ': case '\t': case '\f': case '\r':
12586 case '\13':
12587 break;
12588 default:
12589 goto outofloop;
12590 }
12591 }
12592 outofloop:
12593 pushback(c);
12594 ripper_dispatch_scan_event(parser, tSP);
12595 #endif
12596 goto retry;
12597
12598 case '#':
12599
12600 if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
12601 if (comment_at_top(parser)) {
12602 set_file_encoding(parser, lex_p, lex_pend);
12603 }
12604 }
12605 lex_p = lex_pend;
12606 #ifdef RIPPER
12607 ripper_dispatch_scan_event(parser, tCOMMENT);
12608 fallthru = TRUE;
12609 #endif
12610
12611 case '\n':
12612 switch (lex_state) {
12613 case EXPR_BEG:
12614 case EXPR_FNAME:
12615 case EXPR_DOT:
12616 case EXPR_CLASS:
12617 case EXPR_VALUE:
12618 #ifdef RIPPER
12619 if (!fallthru) {
12620 ripper_dispatch_scan_event(parser, tIGNORED_NL);
12621 }
12622 fallthru = FALSE;
12623 #endif
12624 goto retry;
12625 default:
12626 break;
12627 }
12628 while ((c = nextc())) {
12629 switch (c) {
12630 case ' ': case '\t': case '\f': case '\r':
12631 case '\13':
12632 space_seen = 1;
12633 break;
12634 case '.': {
12635 if ((c = nextc()) != '.') {
12636 pushback(c);
12637 pushback('.');
12638 goto retry;
12639 }
12640 }
12641 default:
12642 --ruby_sourceline;
12643 lex_nextline = lex_lastline;
12644 case -1:
12645 lex_goto_eol(parser);
12646 #ifdef RIPPER
12647 if (c != -1) {
12648 parser->tokp = lex_p;
12649 }
12650 #endif
12651 goto normal_newline;
12652 }
12653 }
12654 normal_newline:
12655 command_start = TRUE;
12656 lex_state = EXPR_BEG;
12657 return '\n';
12658
12659 case '*':
12660 if ((c = nextc()) == '*') {
12661 if ((c = nextc()) == '=') {
12662 set_yylval_id(tPOW);
12663 lex_state = EXPR_BEG;
12664 return tOP_ASGN;
12665 }
12666 pushback(c);
12667 c = tPOW;
12668 }
12669 else {
12670 if (c == '=') {
12671 set_yylval_id('*');
12672 lex_state = EXPR_BEG;
12673 return tOP_ASGN;
12674 }
12675 pushback(c);
12676 if (IS_SPCARG(c)) {
12677 rb_warning0("`*' interpreted as argument prefix");
12678 c = tSTAR;
12679 }
12680 else if (IS_BEG()) {
12681 c = tSTAR;
12682 }
12683 else {
12684 warn_balanced("*", "argument prefix");
12685 c = '*';
12686 }
12687 }
12688 switch (lex_state) {
12689 case EXPR_FNAME: case EXPR_DOT:
12690 lex_state = EXPR_ARG; break;
12691 default:
12692 lex_state = EXPR_BEG; break;
12693 }
12694 return c;
12695
12696 case '!':
12697 c = nextc();
12698 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12699 lex_state = EXPR_ARG;
12700 if (c == '@') {
12701 return '!';
12702 }
12703 }
12704 else {
12705 lex_state = EXPR_BEG;
12706 }
12707 if (c == '=') {
12708 return tNEQ;
12709 }
12710 if (c == '~') {
12711 return tNMATCH;
12712 }
12713 pushback(c);
12714 return '!';
12715
12716 case '=':
12717 if (was_bol()) {
12718
12719 if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
12720 #ifdef RIPPER
12721 int first_p = TRUE;
12722
12723 lex_goto_eol(parser);
12724 ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
12725 #endif
12726 for (;;) {
12727 lex_goto_eol(parser);
12728 #ifdef RIPPER
12729 if (!first_p) {
12730 ripper_dispatch_scan_event(parser, tEMBDOC);
12731 }
12732 first_p = FALSE;
12733 #endif
12734 c = nextc();
12735 if (c == -1) {
12736 compile_error(PARSER_ARG "embedded document meets end of file");
12737 return 0;
12738 }
12739 if (c != '=') continue;
12740 if (strncmp(lex_p, "end", 3) == 0 &&
12741 (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
12742 break;
12743 }
12744 }
12745 lex_goto_eol(parser);
12746 #ifdef RIPPER
12747 ripper_dispatch_scan_event(parser, tEMBDOC_END);
12748 #endif
12749 goto retry;
12750 }
12751 }
12752
12753 switch (lex_state) {
12754 case EXPR_FNAME: case EXPR_DOT:
12755 lex_state = EXPR_ARG; break;
12756 default:
12757 lex_state = EXPR_BEG; break;
12758 }
12759 if ((c = nextc()) == '=') {
12760 if ((c = nextc()) == '=') {
12761 return tEQQ;
12762 }
12763 pushback(c);
12764 return tEQ;
12765 }
12766 if (c == '~') {
12767 return tMATCH;
12768 }
12769 else if (c == '>') {
12770 return tASSOC;
12771 }
12772 pushback(c);
12773 return '=';
12774
12775 case '<':
12776 last_state = lex_state;
12777 c = nextc();
12778 if (c == '<' &&
12779 lex_state != EXPR_DOT &&
12780 lex_state != EXPR_CLASS &&
12781 !IS_END() &&
12782 (!IS_ARG() || space_seen)) {
12783 int token = heredoc_identifier();
12784 if (token) return token;
12785 }
12786 switch (lex_state) {
12787 case EXPR_FNAME: case EXPR_DOT:
12788 lex_state = EXPR_ARG; break;
12789 default:
12790 lex_state = EXPR_BEG; break;
12791 }
12792 if (c == '=') {
12793 if ((c = nextc()) == '>') {
12794 return tCMP;
12795 }
12796 pushback(c);
12797 return tLEQ;
12798 }
12799 if (c == '<') {
12800 if ((c = nextc()) == '=') {
12801 set_yylval_id(tLSHFT);
12802 lex_state = EXPR_BEG;
12803 return tOP_ASGN;
12804 }
12805 pushback(c);
12806 warn_balanced("<<", "here document");
12807 return tLSHFT;
12808 }
12809 pushback(c);
12810 return '<';
12811
12812 case '>':
12813 switch (lex_state) {
12814 case EXPR_FNAME: case EXPR_DOT:
12815 lex_state = EXPR_ARG; break;
12816 default:
12817 lex_state = EXPR_BEG; break;
12818 }
12819 if ((c = nextc()) == '=') {
12820 return tGEQ;
12821 }
12822 if (c == '>') {
12823 if ((c = nextc()) == '=') {
12824 set_yylval_id(tRSHFT);
12825 lex_state = EXPR_BEG;
12826 return tOP_ASGN;
12827 }
12828 pushback(c);
12829 return tRSHFT;
12830 }
12831 pushback(c);
12832 return '>';
12833
12834 case '"':
12835 lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
12836 return tSTRING_BEG;
12837
12838 case '`':
12839 if (lex_state == EXPR_FNAME) {
12840 lex_state = EXPR_ENDFN;
12841 return c;
12842 }
12843 if (lex_state == EXPR_DOT) {
12844 if (cmd_state)
12845 lex_state = EXPR_CMDARG;
12846 else
12847 lex_state = EXPR_ARG;
12848 return c;
12849 }
12850 lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
12851 return tXSTRING_BEG;
12852
12853 case '\'':
12854 lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
12855 return tSTRING_BEG;
12856
12857 case '?':
12858 if (IS_END()) {
12859 lex_state = EXPR_VALUE;
12860 return '?';
12861 }
12862 c = nextc();
12863 if (c == -1) {
12864 compile_error(PARSER_ARG "incomplete character syntax");
12865 return 0;
12866 }
12867 if (rb_enc_isspace(c, parser->enc)) {
12868 if (!IS_ARG()) {
12869 int c2 = 0;
12870 switch (c) {
12871 case ' ':
12872 c2 = 's';
12873 break;
12874 case '\n':
12875 c2 = 'n';
12876 break;
12877 case '\t':
12878 c2 = 't';
12879 break;
12880 case '\v':
12881 c2 = 'v';
12882 break;
12883 case '\r':
12884 c2 = 'r';
12885 break;
12886 case '\f':
12887 c2 = 'f';
12888 break;
12889 }
12890 if (c2) {
12891 rb_warnI("invalid character syntax; use ?\\%c", c2);
12892 }
12893 }
12894 ternary:
12895 pushback(c);
12896 lex_state = EXPR_VALUE;
12897 return '?';
12898 }
12899 newtok();
12900 enc = parser->enc;
12901 if (!parser_isascii()) {
12902 if (tokadd_mbchar(c) == -1) return 0;
12903 }
12904 else if ((rb_enc_isalnum(c, parser->enc) || c == '_') &&
12905 lex_p < lex_pend && is_identchar(lex_p, lex_pend, parser->enc)) {
12906 goto ternary;
12907 }
12908 else if (c == '\\') {
12909 if (peek('u')) {
12910 nextc();
12911 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
12912 if (0x80 <= c) {
12913 tokaddmbc(c, enc);
12914 }
12915 else {
12916 tokadd(c);
12917 }
12918 }
12919 else {
12920 c = read_escape(0, &enc);
12921 tokadd(c);
12922 }
12923 }
12924 else {
12925 tokadd(c);
12926 }
12927 tokfix();
12928 set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
12929 lex_state = EXPR_END;
12930 return tCHAR;
12931
12932 case '&':
12933 if ((c = nextc()) == '&') {
12934 lex_state = EXPR_BEG;
12935 if ((c = nextc()) == '=') {
12936 set_yylval_id(tANDOP);
12937 lex_state = EXPR_BEG;
12938 return tOP_ASGN;
12939 }
12940 pushback(c);
12941 return tANDOP;
12942 }
12943 else if (c == '=') {
12944 set_yylval_id('&');
12945 lex_state = EXPR_BEG;
12946 return tOP_ASGN;
12947 }
12948 pushback(c);
12949 if (IS_SPCARG(c)) {
12950 rb_warning0("`&' interpreted as argument prefix");
12951 c = tAMPER;
12952 }
12953 else if (IS_BEG()) {
12954 c = tAMPER;
12955 }
12956 else {
12957 warn_balanced("&", "argument prefix");
12958 c = '&';
12959 }
12960 switch (lex_state) {
12961 case EXPR_FNAME: case EXPR_DOT:
12962 lex_state = EXPR_ARG; break;
12963 default:
12964 lex_state = EXPR_BEG;
12965 }
12966 return c;
12967
12968 case '|':
12969 if ((c = nextc()) == '|') {
12970 lex_state = EXPR_BEG;
12971 if ((c = nextc()) == '=') {
12972 set_yylval_id(tOROP);
12973 lex_state = EXPR_BEG;
12974 return tOP_ASGN;
12975 }
12976 pushback(c);
12977 return tOROP;
12978 }
12979 if (c == '=') {
12980 set_yylval_id('|');
12981 lex_state = EXPR_BEG;
12982 return tOP_ASGN;
12983 }
12984 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12985 lex_state = EXPR_ARG;
12986 }
12987 else {
12988 lex_state = EXPR_BEG;
12989 }
12990 pushback(c);
12991 return '|';
12992
12993 case '+':
12994 c = nextc();
12995 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12996 lex_state = EXPR_ARG;
12997 if (c == '@') {
12998 return tUPLUS;
12999 }
13000 pushback(c);
13001 return '+';
13002 }
13003 if (c == '=') {
13004 set_yylval_id('+');
13005 lex_state = EXPR_BEG;
13006 return tOP_ASGN;
13007 }
13008 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13009 lex_state = EXPR_BEG;
13010 pushback(c);
13011 if (c != -1 && ISDIGIT(c)) {
13012 c = '+';
13013 goto start_num;
13014 }
13015 return tUPLUS;
13016 }
13017 lex_state = EXPR_BEG;
13018 pushback(c);
13019 warn_balanced("+", "unary operator");
13020 return '+';
13021
13022 case '-':
13023 c = nextc();
13024 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13025 lex_state = EXPR_ARG;
13026 if (c == '@') {
13027 return tUMINUS;
13028 }
13029 pushback(c);
13030 return '-';
13031 }
13032 if (c == '=') {
13033 set_yylval_id('-');
13034 lex_state = EXPR_BEG;
13035 return tOP_ASGN;
13036 }
13037 if (c == '>') {
13038 lex_state = EXPR_ARG;
13039 return tLAMBDA;
13040 }
13041 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13042 lex_state = EXPR_BEG;
13043 pushback(c);
13044 if (c != -1 && ISDIGIT(c)) {
13045 return tUMINUS_NUM;
13046 }
13047 return tUMINUS;
13048 }
13049 lex_state = EXPR_BEG;
13050 pushback(c);
13051 warn_balanced("-", "unary operator");
13052 return '-';
13053
13054 case '.':
13055 lex_state = EXPR_BEG;
13056 if ((c = nextc()) == '.') {
13057 if ((c = nextc()) == '.') {
13058 return tDOT3;
13059 }
13060 pushback(c);
13061 return tDOT2;
13062 }
13063 pushback(c);
13064 if (c != -1 && ISDIGIT(c)) {
13065 yyerror("no .<digit> floating literal anymore; put 0 before dot");
13066 }
13067 lex_state = EXPR_DOT;
13068 return '.';
13069
13070 start_num:
13071 case '0': case '1': case '2': case '3': case '4':
13072 case '5': case '6': case '7': case '8': case '9':
13073 {
13074 int is_float, seen_point, seen_e, nondigit;
13075
13076 is_float = seen_point = seen_e = nondigit = 0;
13077 lex_state = EXPR_END;
13078 newtok();
13079 if (c == '-' || c == '+') {
13080 tokadd(c);
13081 c = nextc();
13082 }
13083 if (c == '0') {
13084 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13085 int start = toklen();
13086 c = nextc();
13087 if (c == 'x' || c == 'X') {
13088
13089 c = nextc();
13090 if (c != -1 && ISXDIGIT(c)) {
13091 do {
13092 if (c == '_') {
13093 if (nondigit) break;
13094 nondigit = c;
13095 continue;
13096 }
13097 if (!ISXDIGIT(c)) break;
13098 nondigit = 0;
13099 tokadd(c);
13100 } while ((c = nextc()) != -1);
13101 }
13102 pushback(c);
13103 tokfix();
13104 if (toklen() == start) {
13105 no_digits();
13106 }
13107 else if (nondigit) goto trailing_uc;
13108 set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE));
13109 return tINTEGER;
13110 }
13111 if (c == 'b' || c == 'B') {
13112
13113 c = nextc();
13114 if (c == '0' || c == '1') {
13115 do {
13116 if (c == '_') {
13117 if (nondigit) break;
13118 nondigit = c;
13119 continue;
13120 }
13121 if (c != '0' && c != '1') break;
13122 nondigit = 0;
13123 tokadd(c);
13124 } while ((c = nextc()) != -1);
13125 }
13126 pushback(c);
13127 tokfix();
13128 if (toklen() == start) {
13129 no_digits();
13130 }
13131 else if (nondigit) goto trailing_uc;
13132 set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE));
13133 return tINTEGER;
13134 }
13135 if (c == 'd' || c == 'D') {
13136
13137 c = nextc();
13138 if (c != -1 && ISDIGIT(c)) {
13139 do {
13140 if (c == '_') {
13141 if (nondigit) break;
13142 nondigit = c;
13143 continue;
13144 }
13145 if (!ISDIGIT(c)) break;
13146 nondigit = 0;
13147 tokadd(c);
13148 } while ((c = nextc()) != -1);
13149 }
13150 pushback(c);
13151 tokfix();
13152 if (toklen() == start) {
13153 no_digits();
13154 }
13155 else if (nondigit) goto trailing_uc;
13156 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13157 return tINTEGER;
13158 }
13159 if (c == '_') {
13160
13161 goto octal_number;
13162 }
13163 if (c == 'o' || c == 'O') {
13164
13165 c = nextc();
13166 if (c == -1 || c == '_' || !ISDIGIT(c)) {
13167 no_digits();
13168 }
13169 }
13170 if (c >= '0' && c <= '7') {
13171
13172 octal_number:
13173 do {
13174 if (c == '_') {
13175 if (nondigit) break;
13176 nondigit = c;
13177 continue;
13178 }
13179 if (c < '0' || c > '9') break;
13180 if (c > '7') goto invalid_octal;
13181 nondigit = 0;
13182 tokadd(c);
13183 } while ((c = nextc()) != -1);
13184 if (toklen() > start) {
13185 pushback(c);
13186 tokfix();
13187 if (nondigit) goto trailing_uc;
13188 set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE));
13189 return tINTEGER;
13190 }
13191 if (nondigit) {
13192 pushback(c);
13193 goto trailing_uc;
13194 }
13195 }
13196 if (c > '7' && c <= '9') {
13197 invalid_octal:
13198 yyerror("Invalid octal digit");
13199 }
13200 else if (c == '.' || c == 'e' || c == 'E') {
13201 tokadd('0');
13202 }
13203 else {
13204 pushback(c);
13205 set_yylval_literal(INT2FIX(0));
13206 return tINTEGER;
13207 }
13208 }
13209
13210 for (;;) {
13211 switch (c) {
13212 case '0': case '1': case '2': case '3': case '4':
13213 case '5': case '6': case '7': case '8': case '9':
13214 nondigit = 0;
13215 tokadd(c);
13216 break;
13217
13218 case '.':
13219 if (nondigit) goto trailing_uc;
13220 if (seen_point || seen_e) {
13221 goto decode_num;
13222 }
13223 else {
13224 int c0 = nextc();
13225 if (c0 == -1 || !ISDIGIT(c0)) {
13226 pushback(c0);
13227 goto decode_num;
13228 }
13229 c = c0;
13230 }
13231 tokadd('.');
13232 tokadd(c);
13233 is_float++;
13234 seen_point++;
13235 nondigit = 0;
13236 break;
13237
13238 case 'e':
13239 case 'E':
13240 if (nondigit) {
13241 pushback(c);
13242 c = nondigit;
13243 goto decode_num;
13244 }
13245 if (seen_e) {
13246 goto decode_num;
13247 }
13248 tokadd(c);
13249 seen_e++;
13250 is_float++;
13251 nondigit = c;
13252 c = nextc();
13253 if (c != '-' && c != '+') continue;
13254 tokadd(c);
13255 nondigit = c;
13256 break;
13257
13258 case '_':
13259 if (nondigit) goto decode_num;
13260 nondigit = c;
13261 break;
13262
13263 default:
13264 goto decode_num;
13265 }
13266 c = nextc();
13267 }
13268
13269 decode_num:
13270 pushback(c);
13271 if (nondigit) {
13272 char tmp[30];
13273 trailing_uc:
13274 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
13275 yyerror(tmp);
13276 }
13277 tokfix();
13278 if (is_float) {
13279 double d = strtod(tok(), 0);
13280 if (errno == ERANGE) {
13281 rb_warningS("Float %s out of range", tok());
13282 errno = 0;
13283 }
13284 set_yylval_literal(DBL2NUM(d));
13285 return tFLOAT;
13286 }
13287 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13288 return tINTEGER;
13289 }
13290
13291 case ')':
13292 case ']':
13293 paren_nest--;
13294 case '}':
13295 COND_LEXPOP();
13296 CMDARG_LEXPOP();
13297 if (c == ')')
13298 lex_state = EXPR_ENDFN;
13299 else
13300 lex_state = EXPR_ENDARG;
13301 return c;
13302
13303 case ':':
13304 c = nextc();
13305 if (c == ':') {
13306 if (IS_BEG() || lex_state == EXPR_CLASS || IS_SPCARG(-1)) {
13307 lex_state = EXPR_BEG;
13308 return tCOLON3;
13309 }
13310 lex_state = EXPR_DOT;
13311 return tCOLON2;
13312 }
13313 if (IS_END() || ISSPACE(c)) {
13314 pushback(c);
13315 warn_balanced(":", "symbol literal");
13316 lex_state = EXPR_BEG;
13317 return ':';
13318 }
13319 switch (c) {
13320 case '\'':
13321 lex_strterm = NEW_STRTERM(str_ssym, c, 0);
13322 break;
13323 case '"':
13324 lex_strterm = NEW_STRTERM(str_dsym, c, 0);
13325 break;
13326 default:
13327 pushback(c);
13328 break;
13329 }
13330 lex_state = EXPR_FNAME;
13331 return tSYMBEG;
13332
13333 case '/':
13334 if (IS_BEG()) {
13335 lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13336 return tREGEXP_BEG;
13337 }
13338 if ((c = nextc()) == '=') {
13339 set_yylval_id('/');
13340 lex_state = EXPR_BEG;
13341 return tOP_ASGN;
13342 }
13343 pushback(c);
13344 if (IS_SPCARG(c)) {
13345 arg_ambiguous();
13346 lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13347 return tREGEXP_BEG;
13348 }
13349 switch (lex_state) {
13350 case EXPR_FNAME: case EXPR_DOT:
13351 lex_state = EXPR_ARG; break;
13352 default:
13353 lex_state = EXPR_BEG; break;
13354 }
13355 warn_balanced("/", "regexp literal");
13356 return '/';
13357
13358 case '^':
13359 if ((c = nextc()) == '=') {
13360 set_yylval_id('^');
13361 lex_state = EXPR_BEG;
13362 return tOP_ASGN;
13363 }
13364 switch (lex_state) {
13365 case EXPR_FNAME: case EXPR_DOT:
13366 lex_state = EXPR_ARG; break;
13367 default:
13368 lex_state = EXPR_BEG; break;
13369 }
13370 pushback(c);
13371 return '^';
13372
13373 case ';':
13374 lex_state = EXPR_BEG;
13375 command_start = TRUE;
13376 return ';';
13377
13378 case ',':
13379 lex_state = EXPR_BEG;
13380 return ',';
13381
13382 case '~':
13383 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13384 if ((c = nextc()) != '@') {
13385 pushback(c);
13386 }
13387 lex_state = EXPR_ARG;
13388 }
13389 else {
13390 lex_state = EXPR_BEG;
13391 }
13392 return '~';
13393
13394 case '(':
13395 if (IS_BEG()) {
13396 c = tLPAREN;
13397 }
13398 else if (IS_SPCARG(-1)) {
13399 c = tLPAREN_ARG;
13400 }
13401 paren_nest++;
13402 COND_PUSH(0);
13403 CMDARG_PUSH(0);
13404 lex_state = EXPR_BEG;
13405 return c;
13406
13407 case '[':
13408 paren_nest++;
13409 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13410 lex_state = EXPR_ARG;
13411 if ((c = nextc()) == ']') {
13412 if ((c = nextc()) == '=') {
13413 return tASET;
13414 }
13415 pushback(c);
13416 return tAREF;
13417 }
13418 pushback(c);
13419 return '[';
13420 }
13421 else if (IS_BEG()) {
13422 c = tLBRACK;
13423 }
13424 else if (IS_ARG() && space_seen) {
13425 c = tLBRACK;
13426 }
13427 lex_state = EXPR_BEG;
13428 COND_PUSH(0);
13429 CMDARG_PUSH(0);
13430 return c;
13431
13432 case '{':
13433 if (lpar_beg && lpar_beg == paren_nest) {
13434 lex_state = EXPR_BEG;
13435 lpar_beg = 0;
13436 --paren_nest;
13437 COND_PUSH(0);
13438 CMDARG_PUSH(0);
13439 return tLAMBEG;
13440 }
13441 if (IS_ARG() || lex_state == EXPR_END || lex_state == EXPR_ENDFN)
13442 c = '{';
13443 else if (lex_state == EXPR_ENDARG)
13444 c = tLBRACE_ARG;
13445 else
13446 c = tLBRACE;
13447 COND_PUSH(0);
13448 CMDARG_PUSH(0);
13449 lex_state = EXPR_BEG;
13450 if (c != tLBRACE) command_start = TRUE;
13451 return c;
13452
13453 case '\\':
13454 c = nextc();
13455 if (c == '\n') {
13456 space_seen = 1;
13457 #ifdef RIPPER
13458 ripper_dispatch_scan_event(parser, tSP);
13459 #endif
13460 goto retry;
13461 }
13462 pushback(c);
13463 return '\\';
13464
13465 case '%':
13466 if (IS_BEG()) {
13467 int term;
13468 int paren;
13469
13470 c = nextc();
13471 quotation:
13472 if (c == -1 || !ISALNUM(c)) {
13473 term = c;
13474 c = 'Q';
13475 }
13476 else {
13477 term = nextc();
13478 if (rb_enc_isalnum(term, parser->enc) || !parser_isascii()) {
13479 yyerror("unknown type of %string");
13480 return 0;
13481 }
13482 }
13483 if (c == -1 || term == -1) {
13484 compile_error(PARSER_ARG "unterminated quoted string meets end of file");
13485 return 0;
13486 }
13487 paren = term;
13488 if (term == '(') term = ')';
13489 else if (term == '[') term = ']';
13490 else if (term == '{') term = '}';
13491 else if (term == '<') term = '>';
13492 else paren = 0;
13493
13494 switch (c) {
13495 case 'Q':
13496 lex_strterm = NEW_STRTERM(str_dquote, term, paren);
13497 return tSTRING_BEG;
13498
13499 case 'q':
13500 lex_strterm = NEW_STRTERM(str_squote, term, paren);
13501 return tSTRING_BEG;
13502
13503 case 'W':
13504 lex_strterm = NEW_STRTERM(str_dword, term, paren);
13505 do {c = nextc();} while (ISSPACE(c));
13506 pushback(c);
13507 return tWORDS_BEG;
13508
13509 case 'w':
13510 lex_strterm = NEW_STRTERM(str_sword, term, paren);
13511 do {c = nextc();} while (ISSPACE(c));
13512 pushback(c);
13513 return tQWORDS_BEG;
13514
13515 case 'x':
13516 lex_strterm = NEW_STRTERM(str_xquote, term, paren);
13517 return tXSTRING_BEG;
13518
13519 case 'r':
13520 lex_strterm = NEW_STRTERM(str_regexp, term, paren);
13521 return tREGEXP_BEG;
13522
13523 case 's':
13524 lex_strterm = NEW_STRTERM(str_ssym, term, paren);
13525 lex_state = EXPR_FNAME;
13526 return tSYMBEG;
13527
13528 default:
13529 yyerror("unknown type of %string");
13530 return 0;
13531 }
13532 }
13533 if ((c = nextc()) == '=') {
13534 set_yylval_id('%');
13535 lex_state = EXPR_BEG;
13536 return tOP_ASGN;
13537 }
13538 if (IS_SPCARG(c)) {
13539 goto quotation;
13540 }
13541 switch (lex_state) {
13542 case EXPR_FNAME: case EXPR_DOT:
13543 lex_state = EXPR_ARG; break;
13544 default:
13545 lex_state = EXPR_BEG; break;
13546 }
13547 pushback(c);
13548 warn_balanced("%%", "string literal");
13549 return '%';
13550
13551 case '$':
13552 lex_state = EXPR_END;
13553 newtok();
13554 c = nextc();
13555 switch (c) {
13556 case '_':
13557 c = nextc();
13558 if (parser_is_identchar()) {
13559 tokadd('$');
13560 tokadd('_');
13561 break;
13562 }
13563 pushback(c);
13564 c = '_';
13565
13566 case '~':
13567 case '*':
13568 case '$':
13569 case '?':
13570 case '!':
13571 case '@':
13572 case '/':
13573 case '\\':
13574 case ';':
13575 case ',':
13576 case '.':
13577 case '=':
13578 case ':':
13579 case '<':
13580 case '>':
13581 case '\"':
13582 tokadd('$');
13583 tokadd(c);
13584 tokfix();
13585 set_yylval_name(rb_intern(tok()));
13586 return tGVAR;
13587
13588 case '-':
13589 tokadd('$');
13590 tokadd(c);
13591 c = nextc();
13592 if (parser_is_identchar()) {
13593 if (tokadd_mbchar(c) == -1) return 0;
13594 }
13595 else {
13596 pushback(c);
13597 }
13598 gvar:
13599 tokfix();
13600 set_yylval_name(rb_intern(tok()));
13601 return tGVAR;
13602
13603 case '&':
13604 case '`':
13605 case '\'':
13606 case '+':
13607 if (last_state == EXPR_FNAME) {
13608 tokadd('$');
13609 tokadd(c);
13610 goto gvar;
13611 }
13612 set_yylval_node(NEW_BACK_REF(c));
13613 return tBACK_REF;
13614
13615 case '1': case '2': case '3':
13616 case '4': case '5': case '6':
13617 case '7': case '8': case '9':
13618 tokadd('$');
13619 do {
13620 tokadd(c);
13621 c = nextc();
13622 } while (c != -1 && ISDIGIT(c));
13623 pushback(c);
13624 if (last_state == EXPR_FNAME) goto gvar;
13625 tokfix();
13626 set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
13627 return tNTH_REF;
13628
13629 default:
13630 if (!parser_is_identchar()) {
13631 pushback(c);
13632 return '$';
13633 }
13634 case '0':
13635 tokadd('$');
13636 }
13637 break;
13638
13639 case '@':
13640 c = nextc();
13641 newtok();
13642 tokadd('@');
13643 if (c == '@') {
13644 tokadd('@');
13645 c = nextc();
13646 }
13647 if (c != -1 && ISDIGIT(c)) {
13648 if (tokidx == 1) {
13649 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
13650 }
13651 else {
13652 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
13653 }
13654 return 0;
13655 }
13656 if (!parser_is_identchar()) {
13657 pushback(c);
13658 return '@';
13659 }
13660 break;
13661
13662 case '_':
13663 if (was_bol() && whole_match_p("__END__", 7, 0)) {
13664 ruby__end__seen = 1;
13665 parser->eofp = Qtrue;
13666 #ifndef RIPPER
13667 return -1;
13668 #else
13669 lex_goto_eol(parser);
13670 ripper_dispatch_scan_event(parser, k__END__);
13671 return 0;
13672 #endif
13673 }
13674 newtok();
13675 break;
13676
13677 default:
13678 if (!parser_is_identchar()) {
13679 rb_compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c);
13680 goto retry;
13681 }
13682
13683 newtok();
13684 break;
13685 }
13686
13687 mb = ENC_CODERANGE_7BIT;
13688 do {
13689 if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
13690 if (tokadd_mbchar(c) == -1) return 0;
13691 c = nextc();
13692 } while (parser_is_identchar());
13693 switch (tok()[0]) {
13694 case '@': case '$':
13695 pushback(c);
13696 break;
13697 default:
13698 if ((c == '!' || c == '?') && !peek('=')) {
13699 tokadd(c);
13700 }
13701 else {
13702 pushback(c);
13703 }
13704 }
13705 tokfix();
13706
13707 {
13708 int result = 0;
13709
13710 last_state = lex_state;
13711 switch (tok()[0]) {
13712 case '$':
13713 lex_state = EXPR_END;
13714 result = tGVAR;
13715 break;
13716 case '@':
13717 lex_state = EXPR_END;
13718 if (tok()[1] == '@')
13719 result = tCVAR;
13720 else
13721 result = tIVAR;
13722 break;
13723
13724 default:
13725 if (toklast() == '!' || toklast() == '?') {
13726 result = tFID;
13727 }
13728 else {
13729 if (lex_state == EXPR_FNAME) {
13730 if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
13731 (!peek('=') || (lex_p + 1 < lex_pend && lex_p[1] == '>'))) {
13732 result = tIDENTIFIER;
13733 tokadd(c);
13734 tokfix();
13735 }
13736 else {
13737 pushback(c);
13738 }
13739 }
13740 if (result == 0 && ISUPPER(tok()[0])) {
13741 result = tCONSTANT;
13742 }
13743 else {
13744 result = tIDENTIFIER;
13745 }
13746 }
13747
13748 if ((lex_state == EXPR_BEG && !cmd_state) ||
13749 IS_ARG()) {
13750 if (peek(':') && !(lex_p + 1 < lex_pend && lex_p[1] == ':')) {
13751 lex_state = EXPR_BEG;
13752 nextc();
13753 set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb)));
13754 return tLABEL;
13755 }
13756 }
13757 if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) {
13758 const struct kwtable *kw;
13759
13760
13761 kw = rb_reserved_word(tok(), toklen());
13762 if (kw) {
13763 enum lex_state_e state = lex_state;
13764 lex_state = kw->state;
13765 if (state == EXPR_FNAME) {
13766 set_yylval_name(rb_intern(kw->name));
13767 return kw->id[0];
13768 }
13769 if (kw->id[0] == keyword_do) {
13770 command_start = TRUE;
13771 if (lpar_beg && lpar_beg == paren_nest) {
13772 lpar_beg = 0;
13773 --paren_nest;
13774 return keyword_do_LAMBDA;
13775 }
13776 if (COND_P()) return keyword_do_cond;
13777 if (CMDARG_P() && state != EXPR_CMDARG)
13778 return keyword_do_block;
13779 if (state == EXPR_ENDARG || state == EXPR_BEG)
13780 return keyword_do_block;
13781 return keyword_do;
13782 }
13783 if (state == EXPR_BEG || state == EXPR_VALUE)
13784 return kw->id[0];
13785 else {
13786 if (kw->id[0] != kw->id[1])
13787 lex_state = EXPR_BEG;
13788 return kw->id[1];
13789 }
13790 }
13791 }
13792
13793 if (IS_BEG() ||
13794 lex_state == EXPR_DOT ||
13795 IS_ARG()) {
13796 if (cmd_state) {
13797 lex_state = EXPR_CMDARG;
13798 }
13799 else {
13800 lex_state = EXPR_ARG;
13801 }
13802 }
13803 else if (lex_state == EXPR_FNAME) {
13804 lex_state = EXPR_ENDFN;
13805 }
13806 else {
13807 lex_state = EXPR_END;
13808 }
13809 }
13810 {
13811 ID ident = TOK_INTERN(!ENC_SINGLE(mb));
13812
13813 set_yylval_name(ident);
13814 if (last_state != EXPR_DOT && is_local_id(ident) && lvar_defined(ident)) {
13815 lex_state = EXPR_END;
13816 }
13817 }
13818 return result;
13819 }
13820 }
13821
13822 #if YYPURE
13823 static int
13824 yylex(void *lval, void *p)
13825 #else
13826 yylex(void *p)
13827 #endif
13828 {
13829 struct parser_params *parser = (struct parser_params*)p;
13830 int t;
13831
13832 #if YYPURE
13833 parser->parser_yylval = lval;
13834 parser->parser_yylval->val = Qundef;
13835 #endif
13836 t = parser_yylex(parser);
13837 #ifdef RIPPER
13838 if (!NIL_P(parser->delayed)) {
13839 ripper_dispatch_delayed_token(parser, t);
13840 }
13841 if (t != 0)
13842 ripper_dispatch_scan_event(parser, t);
13843 #endif
13844
13845 return t;
13846 }
13847
13848 #ifndef RIPPER
13849 static NODE*
13850 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
13851 {
13852 NODE *n = (rb_node_newnode)(type, a0, a1, a2);
13853 nd_set_line(n, ruby_sourceline);
13854 return n;
13855 }
13856
13857 enum node_type
13858 nodetype(NODE *node)
13859 {
13860 return (enum node_type)nd_type(node);
13861 }
13862
13863 int
13864 nodeline(NODE *node)
13865 {
13866 return nd_line(node);
13867 }
13868
13869 static NODE*
13870 newline_node(NODE *node)
13871 {
13872 if (node) {
13873 node = remove_begin(node);
13874 node->flags |= NODE_FL_NEWLINE;
13875 }
13876 return node;
13877 }
13878
13879 static void
13880 fixpos(NODE *node, NODE *orig)
13881 {
13882 if (!node) return;
13883 if (!orig) return;
13884 if (orig == (NODE*)1) return;
13885 nd_set_line(node, nd_line(orig));
13886 }
13887
13888 static void
13889 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
13890 {
13891 rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
13892 }
13893 #define parser_warning(node, mesg) parser_warning(parser, node, mesg)
13894
13895 static void
13896 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
13897 {
13898 rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
13899 }
13900 #define parser_warn(node, mesg) parser_warn(parser, node, mesg)
13901
13902 static NODE*
13903 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
13904 {
13905 NODE *end, *h = head, *nd;
13906
13907 if (tail == 0) return head;
13908
13909 if (h == 0) return tail;
13910 switch (nd_type(h)) {
13911 case NODE_LIT:
13912 case NODE_STR:
13913 case NODE_SELF:
13914 case NODE_TRUE:
13915 case NODE_FALSE:
13916 case NODE_NIL:
13917 parser_warning(h, "unused literal ignored");
13918 return tail;
13919 default:
13920 h = end = NEW_BLOCK(head);
13921 end->nd_end = end;
13922 fixpos(end, head);
13923 head = end;
13924 break;
13925 case NODE_BLOCK:
13926 end = h->nd_end;
13927 break;
13928 }
13929
13930 nd = end->nd_head;
13931 switch (nd_type(nd)) {
13932 case NODE_RETURN:
13933 case NODE_BREAK:
13934 case NODE_NEXT:
13935 case NODE_REDO:
13936 case NODE_RETRY:
13937 if (RTEST(ruby_verbose)) {
13938 parser_warning(nd, "statement not reached");
13939 }
13940 break;
13941
13942 default:
13943 break;
13944 }
13945
13946 if (nd_type(tail) != NODE_BLOCK) {
13947 tail = NEW_BLOCK(tail);
13948 tail->nd_end = tail;
13949 }
13950 end->nd_next = tail;
13951 h->nd_end = tail->nd_end;
13952 return head;
13953 }
13954
13955
13956 static NODE*
13957 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
13958 {
13959 NODE *last;
13960
13961 if (list == 0) return NEW_LIST(item);
13962 if (list->nd_next) {
13963 last = list->nd_next->nd_end;
13964 }
13965 else {
13966 last = list;
13967 }
13968
13969 list->nd_alen += 1;
13970 last->nd_next = NEW_LIST(item);
13971 list->nd_next->nd_end = last->nd_next;
13972 return list;
13973 }
13974
13975
13976 static NODE*
13977 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
13978 {
13979 NODE *last;
13980
13981 if (head->nd_next) {
13982 last = head->nd_next->nd_end;
13983 }
13984 else {
13985 last = head;
13986 }
13987
13988 head->nd_alen += tail->nd_alen;
13989 last->nd_next = tail;
13990 if (tail->nd_next) {
13991 head->nd_next->nd_end = tail->nd_next->nd_end;
13992 }
13993 else {
13994 head->nd_next->nd_end = tail;
13995 }
13996
13997 return head;
13998 }
13999
14000 static int
14001 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
14002 {
14003 if (NIL_P(tail)) return 1;
14004 if (!rb_enc_compatible(head, tail)) {
14005 compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
14006 rb_enc_name(rb_enc_get(head)),
14007 rb_enc_name(rb_enc_get(tail)));
14008 rb_str_resize(head, 0);
14009 rb_str_resize(tail, 0);
14010 return 0;
14011 }
14012 rb_str_buf_append(head, tail);
14013 return 1;
14014 }
14015
14016
14017 static NODE *
14018 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14019 {
14020 enum node_type htype;
14021
14022 if (!head) return tail;
14023 if (!tail) return head;
14024
14025 htype = nd_type(head);
14026 if (htype == NODE_EVSTR) {
14027 NODE *node = NEW_DSTR(Qnil);
14028 head = list_append(node, head);
14029 }
14030 switch (nd_type(tail)) {
14031 case NODE_STR:
14032 if (htype == NODE_STR) {
14033 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) {
14034 error:
14035 rb_gc_force_recycle((VALUE)head);
14036 rb_gc_force_recycle((VALUE)tail);
14037 return 0;
14038 }
14039 rb_gc_force_recycle((VALUE)tail);
14040 }
14041 else {
14042 list_append(head, tail);
14043 }
14044 break;
14045
14046 case NODE_DSTR:
14047 if (htype == NODE_STR) {
14048 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
14049 goto error;
14050 tail->nd_lit = head->nd_lit;
14051 rb_gc_force_recycle((VALUE)head);
14052 head = tail;
14053 }
14054 else if (NIL_P(tail->nd_lit)) {
14055 head->nd_alen += tail->nd_alen - 1;
14056 head->nd_next->nd_end->nd_next = tail->nd_next;
14057 head->nd_next->nd_end = tail->nd_next->nd_end;
14058 rb_gc_force_recycle((VALUE)tail);
14059 }
14060 else {
14061 nd_set_type(tail, NODE_ARRAY);
14062 tail->nd_head = NEW_STR(tail->nd_lit);
14063 list_concat(head, tail);
14064 }
14065 break;
14066
14067 case NODE_EVSTR:
14068 if (htype == NODE_STR) {
14069 nd_set_type(head, NODE_DSTR);
14070 head->nd_alen = 1;
14071 }
14072 list_append(head, tail);
14073 break;
14074 }
14075 return head;
14076 }
14077
14078 static NODE *
14079 evstr2dstr_gen(struct parser_params *parser, NODE *node)
14080 {
14081 if (nd_type(node) == NODE_EVSTR) {
14082 node = list_append(NEW_DSTR(Qnil), node);
14083 }
14084 return node;
14085 }
14086
14087 static NODE *
14088 new_evstr_gen(struct parser_params *parser, NODE *node)
14089 {
14090 NODE *head = node;
14091
14092 if (node) {
14093 switch (nd_type(node)) {
14094 case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
14095 return node;
14096 }
14097 }
14098 return NEW_EVSTR(head);
14099 }
14100
14101 static NODE *
14102 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
14103 {
14104 value_expr(recv);
14105 value_expr(arg1);
14106 return NEW_CALL(recv, id, NEW_LIST(arg1));
14107 }
14108
14109 static NODE *
14110 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
14111 {
14112 value_expr(recv);
14113 return NEW_CALL(recv, id, 0);
14114 }
14115
14116 static NODE*
14117 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14118 {
14119 value_expr(node1);
14120 value_expr(node2);
14121 if (node1) {
14122 switch (nd_type(node1)) {
14123 case NODE_DREGX:
14124 case NODE_DREGX_ONCE:
14125 return NEW_MATCH2(node1, node2);
14126
14127 case NODE_LIT:
14128 if (TYPE(node1->nd_lit) == T_REGEXP) {
14129 return NEW_MATCH2(node1, node2);
14130 }
14131 }
14132 }
14133
14134 if (node2) {
14135 switch (nd_type(node2)) {
14136 case NODE_DREGX:
14137 case NODE_DREGX_ONCE:
14138 return NEW_MATCH3(node2, node1);
14139
14140 case NODE_LIT:
14141 if (TYPE(node2->nd_lit) == T_REGEXP) {
14142 return NEW_MATCH3(node2, node1);
14143 }
14144 }
14145 }
14146
14147 return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
14148 }
14149
14150 static NODE*
14151 gettable_gen(struct parser_params *parser, ID id)
14152 {
14153 if (id == keyword_self) {
14154 return NEW_SELF();
14155 }
14156 else if (id == keyword_nil) {
14157 return NEW_NIL();
14158 }
14159 else if (id == keyword_true) {
14160 return NEW_TRUE();
14161 }
14162 else if (id == keyword_false) {
14163 return NEW_FALSE();
14164 }
14165 else if (id == keyword__FILE__) {
14166 return NEW_STR(rb_external_str_new_with_enc(ruby_sourcefile, strlen(ruby_sourcefile),
14167 rb_filesystem_encoding()));
14168 }
14169 else if (id == keyword__LINE__) {
14170 return NEW_LIT(INT2FIX(ruby_sourceline));
14171 }
14172 else if (id == keyword__ENCODING__) {
14173 return NEW_LIT(rb_enc_from_encoding(parser->enc));
14174 }
14175 else if (is_local_id(id)) {
14176 if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
14177 if (local_id(id)) return NEW_LVAR(id);
14178
14179 return NEW_VCALL(id);
14180 }
14181 else if (is_global_id(id)) {
14182 return NEW_GVAR(id);
14183 }
14184 else if (is_instance_id(id)) {
14185 return NEW_IVAR(id);
14186 }
14187 else if (is_const_id(id)) {
14188 return NEW_CONST(id);
14189 }
14190 else if (is_class_id(id)) {
14191 return NEW_CVAR(id);
14192 }
14193 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14194 return 0;
14195 }
14196 #endif
14197
14198 #ifdef RIPPER
14199 static VALUE
14200 assignable_gen(struct parser_params *parser, VALUE lhs)
14201 #else
14202 static NODE*
14203 assignable_gen(struct parser_params *parser, ID id, NODE *val)
14204 #endif
14205 {
14206 #ifdef RIPPER
14207 ID id = get_id(lhs);
14208 # define assignable_result(x) get_value(lhs)
14209 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
14210 #else
14211 # define assignable_result(x) x
14212 #endif
14213 if (!id) return assignable_result(0);
14214 if (id == keyword_self) {
14215 yyerror("Can't change the value of self");
14216 }
14217 else if (id == keyword_nil) {
14218 yyerror("Can't assign to nil");
14219 }
14220 else if (id == keyword_true) {
14221 yyerror("Can't assign to true");
14222 }
14223 else if (id == keyword_false) {
14224 yyerror("Can't assign to false");
14225 }
14226 else if (id == keyword__FILE__) {
14227 yyerror("Can't assign to __FILE__");
14228 }
14229 else if (id == keyword__LINE__) {
14230 yyerror("Can't assign to __LINE__");
14231 }
14232 else if (id == keyword__ENCODING__) {
14233 yyerror("Can't assign to __ENCODING__");
14234 }
14235 else if (is_local_id(id)) {
14236 if (dyna_in_block()) {
14237 if (dvar_curr(id)) {
14238 return assignable_result(NEW_DASGN_CURR(id, val));
14239 }
14240 else if (dvar_defined(id)) {
14241 return assignable_result(NEW_DASGN(id, val));
14242 }
14243 else if (local_id(id)) {
14244 return assignable_result(NEW_LASGN(id, val));
14245 }
14246 else {
14247 dyna_var(id);
14248 return assignable_result(NEW_DASGN_CURR(id, val));
14249 }
14250 }
14251 else {
14252 if (!local_id(id)) {
14253 local_var(id);
14254 }
14255 return assignable_result(NEW_LASGN(id, val));
14256 }
14257 }
14258 else if (is_global_id(id)) {
14259 return assignable_result(NEW_GASGN(id, val));
14260 }
14261 else if (is_instance_id(id)) {
14262 return assignable_result(NEW_IASGN(id, val));
14263 }
14264 else if (is_const_id(id)) {
14265 if (!in_def && !in_single)
14266 return assignable_result(NEW_CDECL(id, val, 0));
14267 yyerror("dynamic constant assignment");
14268 }
14269 else if (is_class_id(id)) {
14270 return assignable_result(NEW_CVASGN(id, val));
14271 }
14272 else {
14273 compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
14274 }
14275 return assignable_result(0);
14276 #undef assignable_result
14277 #undef parser_yyerror
14278 }
14279
14280 static ID
14281 shadowing_lvar_gen(struct parser_params *parser, ID name)
14282 {
14283 ID uscore;
14284
14285 CONST_ID(uscore, "_");
14286 if (uscore == name) return name;
14287 if (dyna_in_block()) {
14288 if (dvar_curr(name)) {
14289 yyerror("duplicated argument name");
14290 }
14291 else if (dvar_defined(name) || local_id(name)) {
14292 rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
14293 vtable_add(lvtbl->vars, name);
14294 }
14295 }
14296 else {
14297 if (local_id(name)) {
14298 yyerror("duplicated argument name");
14299 }
14300 }
14301 return name;
14302 }
14303
14304 static void
14305 new_bv_gen(struct parser_params *parser, ID name)
14306 {
14307 if (!name) return;
14308 if (!is_local_id(name)) {
14309 compile_error(PARSER_ARG "invalid local variable - %s",
14310 rb_id2name(name));
14311 return;
14312 }
14313 shadowing_lvar(name);
14314 dyna_var(name);
14315 }
14316
14317 #ifndef RIPPER
14318 static NODE *
14319 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
14320 {
14321 if (recv && nd_type(recv) == NODE_SELF)
14322 recv = (NODE *)1;
14323 return NEW_ATTRASGN(recv, tASET, idx);
14324 }
14325
14326 static void
14327 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14328 {
14329 if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
14330 compile_error(PARSER_ARG "both block arg and actual block given");
14331 }
14332 }
14333
14334 ID
14335 rb_id_attrset(ID id)
14336 {
14337 id &= ~ID_SCOPE_MASK;
14338 id |= ID_ATTRSET;
14339 return id;
14340 }
14341
14342 static NODE *
14343 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
14344 {
14345 if (recv && nd_type(recv) == NODE_SELF)
14346 recv = (NODE *)1;
14347 return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
14348 }
14349
14350 static void
14351 rb_backref_error_gen(struct parser_params *parser, NODE *node)
14352 {
14353 switch (nd_type(node)) {
14354 case NODE_NTH_REF:
14355 compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
14356 break;
14357 case NODE_BACK_REF:
14358 compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
14359 break;
14360 }
14361 }
14362
14363 static NODE *
14364 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14365 {
14366 if (!node2) return node1;
14367 switch (nd_type(node1)) {
14368 case NODE_BLOCK_PASS:
14369 if (node1->nd_head)
14370 node1->nd_head = arg_concat(node1->nd_head, node2);
14371 else
14372 node1->nd_head = NEW_LIST(node2);
14373 return node1;
14374 case NODE_ARGSPUSH:
14375 if (nd_type(node2) != NODE_ARRAY) break;
14376 node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
14377 nd_set_type(node1, NODE_ARGSCAT);
14378 return node1;
14379 case NODE_ARGSCAT:
14380 if (nd_type(node2) != NODE_ARRAY ||
14381 nd_type(node1->nd_body) != NODE_ARRAY) break;
14382 node1->nd_body = list_concat(node1->nd_body, node2);
14383 return node1;
14384 }
14385 return NEW_ARGSCAT(node1, node2);
14386 }
14387
14388 static NODE *
14389 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14390 {
14391 if (!node1) return NEW_LIST(node2);
14392 switch (nd_type(node1)) {
14393 case NODE_ARRAY:
14394 return list_append(node1, node2);
14395 case NODE_BLOCK_PASS:
14396 node1->nd_head = arg_append(node1->nd_head, node2);
14397 return node1;
14398 case NODE_ARGSPUSH:
14399 node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
14400 nd_set_type(node1, NODE_ARGSCAT);
14401 return node1;
14402 }
14403 return NEW_ARGSPUSH(node1, node2);
14404 }
14405
14406 static NODE *
14407 splat_array(NODE* node)
14408 {
14409 if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
14410 if (nd_type(node) == NODE_ARRAY) return node;
14411 return 0;
14412 }
14413
14414 static NODE *
14415 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
14416 {
14417 if (!lhs) return 0;
14418
14419 switch (nd_type(lhs)) {
14420 case NODE_GASGN:
14421 case NODE_IASGN:
14422 case NODE_IASGN2:
14423 case NODE_LASGN:
14424 case NODE_DASGN:
14425 case NODE_DASGN_CURR:
14426 case NODE_MASGN:
14427 case NODE_CDECL:
14428 case NODE_CVASGN:
14429 lhs->nd_value = rhs;
14430 break;
14431
14432 case NODE_ATTRASGN:
14433 case NODE_CALL:
14434 lhs->nd_args = arg_append(lhs->nd_args, rhs);
14435 break;
14436
14437 default:
14438
14439 break;
14440 }
14441
14442 return lhs;
14443 }
14444
14445 static int
14446 value_expr_gen(struct parser_params *parser, NODE *node)
14447 {
14448 int cond = 0;
14449
14450 if (!node) {
14451 rb_warning0("empty expression");
14452 }
14453 while (node) {
14454 switch (nd_type(node)) {
14455 case NODE_DEFN:
14456 case NODE_DEFS:
14457 parser_warning(node, "void value expression");
14458 return FALSE;
14459
14460 case NODE_RETURN:
14461 case NODE_BREAK:
14462 case NODE_NEXT:
14463 case NODE_REDO:
14464 case NODE_RETRY:
14465 if (!cond) yyerror("void value expression");
14466
14467 return FALSE;
14468
14469 case NODE_BLOCK:
14470 while (node->nd_next) {
14471 node = node->nd_next;
14472 }
14473 node = node->nd_head;
14474 break;
14475
14476 case NODE_BEGIN:
14477 node = node->nd_body;
14478 break;
14479
14480 case NODE_IF:
14481 if (!node->nd_body) {
14482 node = node->nd_else;
14483 break;
14484 }
14485 else if (!node->nd_else) {
14486 node = node->nd_body;
14487 break;
14488 }
14489 if (!value_expr(node->nd_body)) return FALSE;
14490 node = node->nd_else;
14491 break;
14492
14493 case NODE_AND:
14494 case NODE_OR:
14495 cond = 1;
14496 node = node->nd_2nd;
14497 break;
14498
14499 default:
14500 return TRUE;
14501 }
14502 }
14503
14504 return TRUE;
14505 }
14506
14507 static void
14508 void_expr_gen(struct parser_params *parser, NODE *node)
14509 {
14510 const char *useless = 0;
14511
14512 if (!RTEST(ruby_verbose)) return;
14513
14514 if (!node) return;
14515 switch (nd_type(node)) {
14516 case NODE_CALL:
14517 switch (node->nd_mid) {
14518 case '+':
14519 case '-':
14520 case '*':
14521 case '/':
14522 case '%':
14523 case tPOW:
14524 case tUPLUS:
14525 case tUMINUS:
14526 case '|':
14527 case '^':
14528 case '&':
14529 case tCMP:
14530 case '>':
14531 case tGEQ:
14532 case '<':
14533 case tLEQ:
14534 case tEQ:
14535 case tNEQ:
14536 useless = rb_id2name(node->nd_mid);
14537 break;
14538 }
14539 break;
14540
14541 case NODE_LVAR:
14542 case NODE_DVAR:
14543 case NODE_GVAR:
14544 case NODE_IVAR:
14545 case NODE_CVAR:
14546 case NODE_NTH_REF:
14547 case NODE_BACK_REF:
14548 useless = "a variable";
14549 break;
14550 case NODE_CONST:
14551 useless = "a constant";
14552 break;
14553 case NODE_LIT:
14554 case NODE_STR:
14555 case NODE_DSTR:
14556 case NODE_DREGX:
14557 case NODE_DREGX_ONCE:
14558 useless = "a literal";
14559 break;
14560 case NODE_COLON2:
14561 case NODE_COLON3:
14562 useless = "::";
14563 break;
14564 case NODE_DOT2:
14565 useless = "..";
14566 break;
14567 case NODE_DOT3:
14568 useless = "...";
14569 break;
14570 case NODE_SELF:
14571 useless = "self";
14572 break;
14573 case NODE_NIL:
14574 useless = "nil";
14575 break;
14576 case NODE_TRUE:
14577 useless = "true";
14578 break;
14579 case NODE_FALSE:
14580 useless = "false";
14581 break;
14582 case NODE_DEFINED:
14583 useless = "defined?";
14584 break;
14585 }
14586
14587 if (useless) {
14588 int line = ruby_sourceline;
14589
14590 ruby_sourceline = nd_line(node);
14591 rb_warnS("useless use of %s in void context", useless);
14592 ruby_sourceline = line;
14593 }
14594 }
14595
14596 static void
14597 void_stmts_gen(struct parser_params *parser, NODE *node)
14598 {
14599 if (!RTEST(ruby_verbose)) return;
14600 if (!node) return;
14601 if (nd_type(node) != NODE_BLOCK) return;
14602
14603 for (;;) {
14604 if (!node->nd_next) return;
14605 void_expr0(node->nd_head);
14606 node = node->nd_next;
14607 }
14608 }
14609
14610 static NODE *
14611 remove_begin(NODE *node)
14612 {
14613 NODE **n = &node, *n1 = node;
14614 while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
14615 *n = n1 = n1->nd_body;
14616 }
14617 return node;
14618 }
14619
14620 static void
14621 reduce_nodes_gen(struct parser_params *parser, NODE **body)
14622 {
14623 NODE *node = *body;
14624
14625 if (!node) {
14626 *body = NEW_NIL();
14627 return;
14628 }
14629 #define subnodes(n1, n2) \
14630 ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
14631 (!node->n2) ? (body = &node->n1, 1) : \
14632 (reduce_nodes(&node->n1), body = &node->n2, 1))
14633
14634 while (node) {
14635 int newline = (int)(node->flags & NODE_FL_NEWLINE);
14636 switch (nd_type(node)) {
14637 end:
14638 case NODE_NIL:
14639 *body = 0;
14640 return;
14641 case NODE_RETURN:
14642 *body = node = node->nd_stts;
14643 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14644 continue;
14645 case NODE_BEGIN:
14646 *body = node = node->nd_body;
14647 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14648 continue;
14649 case NODE_BLOCK:
14650 body = &node->nd_end->nd_head;
14651 break;
14652 case NODE_IF:
14653 if (subnodes(nd_body, nd_else)) break;
14654 return;
14655 case NODE_CASE:
14656 body = &node->nd_body;
14657 break;
14658 case NODE_WHEN:
14659 if (!subnodes(nd_body, nd_next)) goto end;
14660 break;
14661 case NODE_ENSURE:
14662 if (!subnodes(nd_head, nd_resq)) goto end;
14663 break;
14664 case NODE_RESCUE:
14665 if (!subnodes(nd_head, nd_resq)) goto end;
14666 break;
14667 default:
14668 return;
14669 }
14670 node = *body;
14671 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14672 }
14673
14674 #undef subnodes
14675 }
14676
14677 static int
14678 assign_in_cond(struct parser_params *parser, NODE *node)
14679 {
14680 switch (nd_type(node)) {
14681 case NODE_MASGN:
14682 yyerror("multiple assignment in conditional");
14683 return 1;
14684
14685 case NODE_LASGN:
14686 case NODE_DASGN:
14687 case NODE_DASGN_CURR:
14688 case NODE_GASGN:
14689 case NODE_IASGN:
14690 break;
14691
14692 default:
14693 return 0;
14694 }
14695
14696 switch (nd_type(node->nd_value)) {
14697 case NODE_LIT:
14698 case NODE_STR:
14699 case NODE_NIL:
14700 case NODE_TRUE:
14701 case NODE_FALSE:
14702
14703 parser_warn(node->nd_value, "found = in conditional, should be ==");
14704 return 1;
14705
14706 case NODE_DSTR:
14707 case NODE_XSTR:
14708 case NODE_DXSTR:
14709 case NODE_EVSTR:
14710 case NODE_DREGX:
14711 default:
14712 break;
14713 }
14714 return 1;
14715 }
14716
14717 static void
14718 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14719 {
14720 if (!e_option_supplied(parser)) parser_warn(node, str);
14721 }
14722
14723 static void
14724 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14725 {
14726 if (!e_option_supplied(parser)) parser_warning(node, str);
14727 }
14728
14729 static void
14730 fixup_nodes(NODE **rootnode)
14731 {
14732 NODE *node, *next, *head;
14733
14734 for (node = *rootnode; node; node = next) {
14735 enum node_type type;
14736 VALUE val;
14737
14738 next = node->nd_next;
14739 head = node->nd_head;
14740 rb_gc_force_recycle((VALUE)node);
14741 *rootnode = next;
14742 switch (type = nd_type(head)) {
14743 case NODE_DOT2:
14744 case NODE_DOT3:
14745 val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
14746 type == NODE_DOT3);
14747 rb_gc_force_recycle((VALUE)head->nd_beg);
14748 rb_gc_force_recycle((VALUE)head->nd_end);
14749 nd_set_type(head, NODE_LIT);
14750 head->nd_lit = val;
14751 break;
14752 default:
14753 break;
14754 }
14755 }
14756 }
14757
14758 static NODE *cond0(struct parser_params*,NODE*);
14759
14760 static NODE*
14761 range_op(struct parser_params *parser, NODE *node)
14762 {
14763 enum node_type type;
14764
14765 if (node == 0) return 0;
14766
14767 type = nd_type(node);
14768 value_expr(node);
14769 if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
14770 warn_unless_e_option(parser, node, "integer literal in conditional range");
14771 return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
14772 }
14773 return cond0(parser, node);
14774 }
14775
14776 static int
14777 literal_node(NODE *node)
14778 {
14779 if (!node) return 1;
14780 switch (nd_type(node)) {
14781 case NODE_LIT:
14782 case NODE_STR:
14783 case NODE_DSTR:
14784 case NODE_EVSTR:
14785 case NODE_DREGX:
14786 case NODE_DREGX_ONCE:
14787 case NODE_DSYM:
14788 return 2;
14789 case NODE_TRUE:
14790 case NODE_FALSE:
14791 case NODE_NIL:
14792 return 1;
14793 }
14794 return 0;
14795 }
14796
14797 static NODE*
14798 cond0(struct parser_params *parser, NODE *node)
14799 {
14800 if (node == 0) return 0;
14801 assign_in_cond(parser, node);
14802
14803 switch (nd_type(node)) {
14804 case NODE_DSTR:
14805 case NODE_EVSTR:
14806 case NODE_STR:
14807 rb_warn0("string literal in condition");
14808 break;
14809
14810 case NODE_DREGX:
14811 case NODE_DREGX_ONCE:
14812 warning_unless_e_option(parser, node, "regex literal in condition");
14813 return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
14814
14815 case NODE_AND:
14816 case NODE_OR:
14817 node->nd_1st = cond0(parser, node->nd_1st);
14818 node->nd_2nd = cond0(parser, node->nd_2nd);
14819 break;
14820
14821 case NODE_DOT2:
14822 case NODE_DOT3:
14823 node->nd_beg = range_op(parser, node->nd_beg);
14824 node->nd_end = range_op(parser, node->nd_end);
14825 if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
14826 else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
14827 if (!e_option_supplied(parser)) {
14828 int b = literal_node(node->nd_beg);
14829 int e = literal_node(node->nd_end);
14830 if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
14831 parser_warn(node, "range literal in condition");
14832 }
14833 }
14834 break;
14835
14836 case NODE_DSYM:
14837 parser_warning(node, "literal in condition");
14838 break;
14839
14840 case NODE_LIT:
14841 if (TYPE(node->nd_lit) == T_REGEXP) {
14842 warn_unless_e_option(parser, node, "regex literal in condition");
14843 nd_set_type(node, NODE_MATCH);
14844 }
14845 else {
14846 parser_warning(node, "literal in condition");
14847 }
14848 default:
14849 break;
14850 }
14851 return node;
14852 }
14853
14854 static NODE*
14855 cond_gen(struct parser_params *parser, NODE *node)
14856 {
14857 if (node == 0) return 0;
14858 return cond0(parser, node);
14859 }
14860
14861 static NODE*
14862 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
14863 {
14864 value_expr(left);
14865 if (left && (enum node_type)nd_type(left) == type) {
14866 NODE *node = left, *second;
14867 while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
14868 node = second;
14869 }
14870 node->nd_2nd = NEW_NODE(type, second, right, 0);
14871 return left;
14872 }
14873 return NEW_NODE(type, left, right, 0);
14874 }
14875
14876 static void
14877 no_blockarg(struct parser_params *parser, NODE *node)
14878 {
14879 if (node && nd_type(node) == NODE_BLOCK_PASS) {
14880 compile_error(PARSER_ARG "block argument should not be given");
14881 }
14882 }
14883
14884 static NODE *
14885 ret_args_gen(struct parser_params *parser, NODE *node)
14886 {
14887 if (node) {
14888 no_blockarg(parser, node);
14889 if (nd_type(node) == NODE_ARRAY) {
14890 if (node->nd_next == 0) {
14891 node = node->nd_head;
14892 }
14893 else {
14894 nd_set_type(node, NODE_VALUES);
14895 }
14896 }
14897 }
14898 return node;
14899 }
14900
14901 static NODE *
14902 new_yield_gen(struct parser_params *parser, NODE *node)
14903 {
14904 long state = Qtrue;
14905
14906 if (node) {
14907 no_blockarg(parser, node);
14908 if (node && nd_type(node) == NODE_SPLAT) {
14909 state = Qtrue;
14910 }
14911 }
14912 else {
14913 state = Qfalse;
14914 }
14915 return NEW_YIELD(node, state);
14916 }
14917
14918 static NODE*
14919 negate_lit(NODE *node)
14920 {
14921 switch (TYPE(node->nd_lit)) {
14922 case T_FIXNUM:
14923 node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
14924 break;
14925 case T_BIGNUM:
14926 node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
14927 break;
14928 case T_FLOAT:
14929 RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
14930 break;
14931 default:
14932 break;
14933 }
14934 return node;
14935 }
14936
14937 static NODE *
14938 arg_blk_pass(NODE *node1, NODE *node2)
14939 {
14940 if (node2) {
14941 node2->nd_head = node1;
14942 return node2;
14943 }
14944 return node1;
14945 }
14946
14947 static NODE*
14948 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b)
14949 {
14950 int saved_line = ruby_sourceline;
14951 NODE *node;
14952 NODE *i1, *i2 = 0;
14953
14954 node = NEW_ARGS(m ? m->nd_plen : 0, o);
14955 i1 = m ? m->nd_next : 0;
14956 node->nd_next = NEW_ARGS_AUX(r, b);
14957
14958 if (p) {
14959 i2 = p->nd_next;
14960 node->nd_next->nd_next = NEW_ARGS_AUX(p->nd_pid, p->nd_plen);
14961 }
14962 else if (i1) {
14963 node->nd_next->nd_next = NEW_ARGS_AUX(0, 0);
14964 }
14965 if (i1 || i2) {
14966 node->nd_next->nd_next->nd_next = NEW_NODE(NODE_AND, i1, i2, 0);
14967 }
14968 ruby_sourceline = saved_line;
14969 return node;
14970 }
14971 #endif
14972
14973 static void
14974 local_push_gen(struct parser_params *parser, int inherit_dvars)
14975 {
14976 struct local_vars *local;
14977
14978 local = ALLOC(struct local_vars);
14979 local->prev = lvtbl;
14980 local->args = vtable_alloc(0);
14981 local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
14982 lvtbl = local;
14983 }
14984
14985 static void
14986 local_pop_gen(struct parser_params *parser)
14987 {
14988 struct local_vars *local = lvtbl->prev;
14989 vtable_free(lvtbl->args);
14990 vtable_free(lvtbl->vars);
14991 xfree(lvtbl);
14992 lvtbl = local;
14993 }
14994
14995 #ifndef RIPPER
14996 static ID*
14997 vtable_tblcpy(ID *buf, const struct vtable *src)
14998 {
14999 int i, cnt = vtable_size(src);
15000
15001 if (cnt > 0) {
15002 buf[0] = cnt;
15003 for (i = 0; i < cnt; i++) {
15004 buf[i] = src->tbl[i];
15005 }
15006 return buf;
15007 }
15008 return 0;
15009 }
15010
15011 static ID*
15012 local_tbl_gen(struct parser_params *parser)
15013 {
15014 int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars);
15015 ID *buf;
15016
15017 if (cnt <= 0) return 0;
15018 buf = ALLOC_N(ID, cnt + 1);
15019 vtable_tblcpy(buf+1, lvtbl->args);
15020 vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars);
15021 buf[0] = cnt;
15022 return buf;
15023 }
15024 #endif
15025
15026 static int
15027 arg_var_gen(struct parser_params *parser, ID id)
15028 {
15029 vtable_add(lvtbl->args, id);
15030 return vtable_size(lvtbl->args) - 1;
15031 }
15032
15033 static int
15034 local_var_gen(struct parser_params *parser, ID id)
15035 {
15036 vtable_add(lvtbl->vars, id);
15037 return vtable_size(lvtbl->vars) - 1;
15038 }
15039
15040 static int
15041 local_id_gen(struct parser_params *parser, ID id)
15042 {
15043 struct vtable *vars, *args;
15044
15045 vars = lvtbl->vars;
15046 args = lvtbl->args;
15047
15048 while (vars && POINTER_P(vars->prev)) {
15049 vars = vars->prev;
15050 args = args->prev;
15051 }
15052
15053 if (vars && vars->prev == DVARS_INHERIT) {
15054 return rb_local_defined(id);
15055 }
15056 else {
15057 return (vtable_included(args, id) ||
15058 vtable_included(vars, id));
15059 }
15060 }
15061
15062 static const struct vtable *
15063 dyna_push_gen(struct parser_params *parser)
15064 {
15065 lvtbl->args = vtable_alloc(lvtbl->args);
15066 lvtbl->vars = vtable_alloc(lvtbl->vars);
15067 return lvtbl->args;
15068 }
15069
15070 static void
15071 dyna_pop_1(struct parser_params *parser)
15072 {
15073 struct vtable *tmp;
15074
15075 tmp = lvtbl->args;
15076 lvtbl->args = lvtbl->args->prev;
15077 vtable_free(tmp);
15078 tmp = lvtbl->vars;
15079 lvtbl->vars = lvtbl->vars->prev;
15080 vtable_free(tmp);
15081 }
15082
15083 static void
15084 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
15085 {
15086 while (lvtbl->args != lvargs) {
15087 dyna_pop_1(parser);
15088 if (!lvtbl->args) {
15089 struct local_vars *local = lvtbl->prev;
15090 xfree(lvtbl);
15091 lvtbl = local;
15092 }
15093 }
15094 dyna_pop_1(parser);
15095 }
15096
15097 static int
15098 dyna_in_block_gen(struct parser_params *parser)
15099 {
15100 return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
15101 }
15102
15103 static int
15104 dvar_defined_gen(struct parser_params *parser, ID id)
15105 {
15106 struct vtable *vars, *args;
15107
15108 args = lvtbl->args;
15109 vars = lvtbl->vars;
15110
15111 while (POINTER_P(vars)) {
15112 if (vtable_included(args, id)) {
15113 return 1;
15114 }
15115 if (vtable_included(vars, id)) {
15116 return 1;
15117 }
15118 args = args->prev;
15119 vars = vars->prev;
15120 }
15121
15122 if (vars == DVARS_INHERIT) {
15123 return rb_dvar_defined(id);
15124 }
15125
15126 return 0;
15127 }
15128
15129 static int
15130 dvar_curr_gen(struct parser_params *parser, ID id)
15131 {
15132 return (vtable_included(lvtbl->args, id) ||
15133 vtable_included(lvtbl->vars, id));
15134 }
15135
15136 #ifndef RIPPER
15137 VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline);
15138 VALUE rb_reg_check_preprocess(VALUE);
15139
15140 static void
15141 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
15142 {
15143 int c = RE_OPTION_ENCODING_IDX(options);
15144
15145 if (c) {
15146 int opt, idx;
15147 rb_char_to_option_kcode(c, &opt, &idx);
15148 if (idx != ENCODING_GET(str) &&
15149 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15150 goto error;
15151 }
15152 ENCODING_SET(str, idx);
15153 }
15154 else if (RE_OPTION_ENCODING_NONE(options)) {
15155 if (!ENCODING_IS_ASCII8BIT(str) &&
15156 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15157 c = 'n';
15158 goto error;
15159 }
15160 rb_enc_associate(str, rb_ascii8bit_encoding());
15161 }
15162 else if (parser->enc == rb_usascii_encoding()) {
15163 if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15164
15165 rb_enc_associate(str, rb_usascii_encoding());
15166 }
15167 else {
15168 rb_enc_associate(str, rb_ascii8bit_encoding());
15169 }
15170 }
15171 return;
15172
15173 error:
15174 compile_error(PARSER_ARG
15175 "regexp encoding option '%c' differs from source encoding '%s'",
15176 c, rb_enc_name(rb_enc_get(str)));
15177 }
15178
15179 static int
15180 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
15181 {
15182 VALUE err;
15183 reg_fragment_setenc(str, options);
15184 err = rb_reg_check_preprocess(str);
15185 if (err != Qnil) {
15186 err = rb_obj_as_string(err);
15187 compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
15188 RB_GC_GUARD(err);
15189 return 0;
15190 }
15191 return 1;
15192 }
15193
15194 typedef struct {
15195 struct parser_params* parser;
15196 rb_encoding *enc;
15197 NODE *succ_block;
15198 NODE *fail_block;
15199 int num;
15200 } reg_named_capture_assign_t;
15201
15202 static int
15203 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
15204 int back_num, int *back_refs, OnigRegex regex, void *arg0)
15205 {
15206 reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
15207 struct parser_params* parser = arg->parser;
15208 rb_encoding *enc = arg->enc;
15209 long len = name_end - name;
15210 const char *s = (const char *)name;
15211 ID var;
15212
15213 arg->num++;
15214
15215 if (arg->succ_block == 0) {
15216 arg->succ_block = NEW_BEGIN(0);
15217 arg->fail_block = NEW_BEGIN(0);
15218 }
15219
15220 if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
15221 (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
15222 !rb_enc_symname2_p(s, len, enc)) {
15223 return ST_CONTINUE;
15224 }
15225 var = rb_intern3(s, len, enc);
15226 if (dvar_defined(var) || local_id(var)) {
15227 rb_warningS("named capture conflicts a local variable - %s",
15228 rb_id2name(var));
15229 }
15230 arg->succ_block = block_append(arg->succ_block,
15231 newline_node(node_assign(assignable(var,0),
15232 NEW_CALL(
15233 gettable(rb_intern("$~")),
15234 idAREF,
15235 NEW_LIST(NEW_LIT(ID2SYM(var))))
15236 )));
15237 arg->fail_block = block_append(arg->fail_block,
15238 newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil))));
15239 return ST_CONTINUE;
15240 }
15241
15242 static NODE *
15243 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match)
15244 {
15245 reg_named_capture_assign_t arg;
15246
15247 arg.parser = parser;
15248 arg.enc = rb_enc_get(regexp);
15249 arg.succ_block = 0;
15250 arg.fail_block = 0;
15251 arg.num = 0;
15252 onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
15253
15254 if (arg.num == 0)
15255 return match;
15256
15257 return
15258 block_append(
15259 newline_node(match),
15260 NEW_IF(gettable(rb_intern("$~")),
15261 block_append(
15262 newline_node(arg.succ_block),
15263 newline_node(
15264 NEW_CALL(
15265 gettable(rb_intern("$~")),
15266 rb_intern("begin"),
15267 NEW_LIST(NEW_LIT(INT2FIX(0)))))),
15268 block_append(
15269 newline_node(arg.fail_block),
15270 newline_node(
15271 NEW_LIT(Qnil)))));
15272 }
15273
15274 static VALUE
15275 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
15276 {
15277 VALUE re;
15278 VALUE err;
15279
15280 reg_fragment_setenc(str, options);
15281 err = rb_errinfo();
15282 re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline);
15283 if (NIL_P(re)) {
15284 ID mesg = rb_intern("mesg");
15285 VALUE m = rb_attr_get(rb_errinfo(), mesg);
15286 rb_set_errinfo(err);
15287 if (!NIL_P(err)) {
15288 rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
15289 }
15290 else {
15291 compile_error(PARSER_ARG "%s", RSTRING_PTR(m));
15292 }
15293 return Qnil;
15294 }
15295 return re;
15296 }
15297
15298 void
15299 rb_gc_mark_parser(void)
15300 {
15301 }
15302
15303 NODE*
15304 rb_parser_append_print(VALUE vparser, NODE *node)
15305 {
15306 NODE *prelude = 0;
15307 NODE *scope = node;
15308 struct parser_params *parser;
15309
15310 if (!node) return node;
15311
15312 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15313
15314 node = node->nd_body;
15315
15316 if (nd_type(node) == NODE_PRELUDE) {
15317 prelude = node;
15318 node = node->nd_body;
15319 }
15320
15321 node = block_append(node,
15322 NEW_FCALL(rb_intern("print"),
15323 NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
15324 if (prelude) {
15325 prelude->nd_body = node;
15326 scope->nd_body = prelude;
15327 }
15328 else {
15329 scope->nd_body = node;
15330 }
15331
15332 return scope;
15333 }
15334
15335 NODE *
15336 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
15337 {
15338 NODE *prelude = 0;
15339 NODE *scope = node;
15340 struct parser_params *parser;
15341
15342 if (!node) return node;
15343
15344 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15345
15346 node = node->nd_body;
15347
15348 if (nd_type(node) == NODE_PRELUDE) {
15349 prelude = node;
15350 node = node->nd_body;
15351 }
15352 if (split) {
15353 node = block_append(NEW_GASGN(rb_intern("$F"),
15354 NEW_CALL(NEW_GVAR(rb_intern("$_")),
15355 rb_intern("split"), 0)),
15356 node);
15357 }
15358 if (chop) {
15359 node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
15360 rb_intern("chop!"), 0), node);
15361 }
15362
15363 node = NEW_OPT_N(node);
15364
15365 if (prelude) {
15366 prelude->nd_body = node;
15367 scope->nd_body = prelude;
15368 }
15369 else {
15370 scope->nd_body = node;
15371 }
15372
15373 return scope;
15374 }
15375
15376 static const struct {
15377 ID token;
15378 const char *name;
15379 } op_tbl[] = {
15380 {tDOT2, ".."},
15381 {tDOT3, "..."},
15382 {'+', "+(binary)"},
15383 {'-', "-(binary)"},
15384 {tPOW, "**"},
15385 {tUPLUS, "+@"},
15386 {tUMINUS, "-@"},
15387 {tCMP, "<=>"},
15388 {tGEQ, ">="},
15389 {tLEQ, "<="},
15390 {tEQ, "=="},
15391 {tEQQ, "==="},
15392 {tNEQ, "!="},
15393 {tMATCH, "=~"},
15394 {tNMATCH, "!~"},
15395 {tAREF, "[]"},
15396 {tASET, "[]="},
15397 {tLSHFT, "<<"},
15398 {tRSHFT, ">>"},
15399 {tCOLON2, "::"},
15400 };
15401
15402 #define op_tbl_count numberof(op_tbl)
15403
15404 #ifndef ENABLE_SELECTOR_NAMESPACE
15405 #define ENABLE_SELECTOR_NAMESPACE 0
15406 #endif
15407
15408 static struct symbols {
15409 ID last_id;
15410 st_table *sym_id;
15411 st_table *id_str;
15412 #if ENABLE_SELECTOR_NAMESPACE
15413 st_table *ivar2_id;
15414 st_table *id_ivar2;
15415 #endif
15416 VALUE op_sym[tLAST_TOKEN];
15417 } global_symbols = {tLAST_ID};
15418
15419 static const struct st_hash_type symhash = {
15420 rb_str_hash_cmp,
15421 rb_str_hash,
15422 };
15423
15424 #if ENABLE_SELECTOR_NAMESPACE
15425 struct ivar2_key {
15426 ID id;
15427 VALUE klass;
15428 };
15429
15430 static int
15431 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
15432 {
15433 if (key1->id == key2->id && key1->klass == key2->klass) {
15434 return 0;
15435 }
15436 return 1;
15437 }
15438
15439 static int
15440 ivar2_hash(struct ivar2_key *key)
15441 {
15442 return (key->id << 8) ^ (key->klass >> 2);
15443 }
15444
15445 static const struct st_hash_type ivar2_hash_type = {
15446 ivar2_cmp,
15447 ivar2_hash,
15448 };
15449 #endif
15450
15451 void
15452 Init_sym(void)
15453 {
15454 global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
15455 global_symbols.id_str = st_init_numtable_with_size(1000);
15456 #if ENABLE_SELECTOR_NAMESPACE
15457 global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
15458 global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
15459 #endif
15460
15461 Init_id();
15462 }
15463
15464 void
15465 rb_gc_mark_symbols(void)
15466 {
15467 rb_mark_tbl(global_symbols.id_str);
15468 rb_gc_mark_locations(global_symbols.op_sym,
15469 global_symbols.op_sym + tLAST_TOKEN);
15470 }
15471 #endif
15472
15473 static ID
15474 internal_id_gen(struct parser_params *parser)
15475 {
15476 ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
15477 id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
15478 return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
15479 }
15480
15481 #ifndef RIPPER
15482 static int
15483 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
15484 {
15485 int mb = 0;
15486
15487 if (m >= e) return 0;
15488 switch (*m) {
15489 case '~': case '*': case '$': case '?': case '!': case '@':
15490 case '/': case '\\': case ';': case ',': case '.': case '=':
15491 case ':': case '<': case '>': case '\"':
15492 case '&': case '`': case '\'': case '+':
15493 case '0':
15494 ++m;
15495 break;
15496 case '-':
15497 ++m;
15498 if (m < e && is_identchar(m, e, enc)) {
15499 if (!ISASCII(*m)) mb = 1;
15500 m += rb_enc_mbclen(m, e, enc);
15501 }
15502 break;
15503 default:
15504 if (!rb_enc_isdigit(*m, enc)) return 0;
15505 do {
15506 if (!ISASCII(*m)) mb = 1;
15507 ++m;
15508 } while (m < e && rb_enc_isdigit(*m, enc));
15509 }
15510 return m == e ? mb + 1 : 0;
15511 }
15512
15513 int
15514 rb_symname_p(const char *name)
15515 {
15516 return rb_enc_symname_p(name, rb_ascii8bit_encoding());
15517 }
15518
15519 int
15520 rb_enc_symname_p(const char *name, rb_encoding *enc)
15521 {
15522 return rb_enc_symname2_p(name, strlen(name), enc);
15523 }
15524
15525 int
15526 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
15527 {
15528 const char *m = name;
15529 const char *e = m + len;
15530 int localid = FALSE;
15531
15532 if (!m) return FALSE;
15533 switch (*m) {
15534 case '\0':
15535 return FALSE;
15536
15537 case '$':
15538 if (is_special_global_name(++m, e, enc)) return TRUE;
15539 goto id;
15540
15541 case '@':
15542 if (*++m == '@') ++m;
15543 goto id;
15544
15545 case '<':
15546 switch (*++m) {
15547 case '<': ++m; break;
15548 case '=': if (*++m == '>') ++m; break;
15549 default: break;
15550 }
15551 break;
15552
15553 case '>':
15554 switch (*++m) {
15555 case '>': case '=': ++m; break;
15556 }
15557 break;
15558
15559 case '=':
15560 switch (*++m) {
15561 case '~': ++m; break;
15562 case '=': if (*++m == '=') ++m; break;
15563 default: return FALSE;
15564 }
15565 break;
15566
15567 case '*':
15568 if (*++m == '*') ++m;
15569 break;
15570
15571 case '+': case '-':
15572 if (*++m == '@') ++m;
15573 break;
15574
15575 case '|': case '^': case '&': case '/': case '%': case '~': case '`':
15576 ++m;
15577 break;
15578
15579 case '[':
15580 if (*++m != ']') return FALSE;
15581 if (*++m == '=') ++m;
15582 break;
15583
15584 case '!':
15585 switch (*++m) {
15586 case '\0': return TRUE;
15587 case '=': case '~': ++m; break;
15588 default: return FALSE;
15589 }
15590 break;
15591
15592 default:
15593 localid = !rb_enc_isupper(*m, enc);
15594 id:
15595 if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
15596 return FALSE;
15597 while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
15598 if (localid) {
15599 switch (*m) {
15600 case '!': case '?': case '=': ++m;
15601 }
15602 }
15603 break;
15604 }
15605 return m == e;
15606 }
15607
15608 static ID
15609 register_symid(ID id, const char *name, long len, rb_encoding *enc)
15610 {
15611 VALUE str = rb_enc_str_new(name, len, enc);
15612 OBJ_FREEZE(str);
15613 st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
15614 st_add_direct(global_symbols.id_str, id, (st_data_t)str);
15615 return id;
15616 }
15617
15618 ID
15619 rb_intern3(const char *name, long len, rb_encoding *enc)
15620 {
15621 const char *m = name;
15622 const char *e = m + len;
15623 unsigned char c;
15624 VALUE str;
15625 ID id;
15626 long last;
15627 int mb;
15628 st_data_t data;
15629 struct RString fake_str;
15630 fake_str.basic.flags = T_STRING|RSTRING_NOEMBED|FL_FREEZE;
15631 fake_str.basic.klass = rb_cString;
15632 fake_str.as.heap.len = len;
15633 fake_str.as.heap.ptr = (char *)name;
15634 fake_str.as.heap.aux.capa = len;
15635 str = (VALUE)&fake_str;
15636 rb_enc_associate(str, enc);
15637
15638 if (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) {
15639 rb_raise(rb_eEncodingError, "invalid encoding symbol");
15640 }
15641
15642 if (st_lookup(global_symbols.sym_id, str, &data))
15643 return (ID)data;
15644
15645 if (rb_cString && !rb_enc_asciicompat(enc)) {
15646 id = ID_JUNK;
15647 goto new_id;
15648 }
15649 last = len-1;
15650 id = 0;
15651 switch (*m) {
15652 case '$':
15653 id |= ID_GLOBAL;
15654 if ((mb = is_special_global_name(++m, e, enc)) != 0) {
15655 if (!--mb) enc = rb_ascii8bit_encoding();
15656 goto new_id;
15657 }
15658 break;
15659 case '@':
15660 if (m[1] == '@') {
15661 m++;
15662 id |= ID_CLASS;
15663 }
15664 else {
15665 id |= ID_INSTANCE;
15666 }
15667 m++;
15668 break;
15669 default:
15670 c = m[0];
15671 if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
15672
15673 int i;
15674
15675 if (len == 1) {
15676 id = c;
15677 goto id_register;
15678 }
15679 for (i = 0; i < op_tbl_count; i++) {
15680 if (*op_tbl[i].name == *m &&
15681 strcmp(op_tbl[i].name, m) == 0) {
15682 id = op_tbl[i].token;
15683 goto id_register;
15684 }
15685 }
15686 }
15687
15688 if (m[last] == '=') {
15689
15690 id = rb_intern3(name, last, enc);
15691 if (id > tLAST_TOKEN && !is_attrset_id(id)) {
15692 enc = rb_enc_get(rb_id2str(id));
15693 id = rb_id_attrset(id);
15694 goto id_register;
15695 }
15696 id = ID_ATTRSET;
15697 }
15698 else if (rb_enc_isupper(m[0], enc)) {
15699 id = ID_CONST;
15700 }
15701 else {
15702 id = ID_LOCAL;
15703 }
15704 break;
15705 }
15706 mb = 0;
15707 if (!rb_enc_isdigit(*m, enc)) {
15708 while (m <= name + last && is_identchar(m, e, enc)) {
15709 if (ISASCII(*m)) {
15710 m++;
15711 }
15712 else {
15713 mb = 1;
15714 m += rb_enc_mbclen(m, e, enc);
15715 }
15716 }
15717 }
15718 if (m - name < len) id = ID_JUNK;
15719 if (enc != rb_usascii_encoding()) {
15720
15721
15722
15723
15724 if (!mb) {
15725 for (; m <= name + len; ++m) {
15726 if (!ISASCII(*m)) goto mbstr;
15727 }
15728 enc = rb_usascii_encoding();
15729 }
15730 mbstr:;
15731 }
15732 new_id:
15733 if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) {
15734 if (len > 20) {
15735 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
15736 name);
15737 }
15738 else {
15739 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
15740 (int)len, name);
15741 }
15742 }
15743 id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
15744 id_register:
15745 return register_symid(id, name, len, enc);
15746 }
15747
15748 ID
15749 rb_intern2(const char *name, long len)
15750 {
15751 return rb_intern3(name, len, rb_usascii_encoding());
15752 }
15753
15754 #undef rb_intern
15755 ID
15756 rb_intern(const char *name)
15757 {
15758 return rb_intern2(name, strlen(name));
15759 }
15760
15761 ID
15762 rb_intern_str(VALUE str)
15763 {
15764 rb_encoding *enc;
15765 ID id;
15766
15767 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
15768 enc = rb_usascii_encoding();
15769 }
15770 else {
15771 enc = rb_enc_get(str);
15772 }
15773 id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc);
15774 RB_GC_GUARD(str);
15775 return id;
15776 }
15777
15778 VALUE
15779 rb_id2str(ID id)
15780 {
15781 st_data_t data;
15782
15783 if (id < tLAST_TOKEN) {
15784 int i = 0;
15785
15786 if (id < INT_MAX && rb_ispunct((int)id)) {
15787 VALUE str = global_symbols.op_sym[i = (int)id];
15788 if (!str) {
15789 char name[2];
15790 name[0] = (char)id;
15791 name[1] = 0;
15792 str = rb_usascii_str_new(name, 1);
15793 OBJ_FREEZE(str);
15794 global_symbols.op_sym[i] = str;
15795 }
15796 return str;
15797 }
15798 for (i = 0; i < op_tbl_count; i++) {
15799 if (op_tbl[i].token == id) {
15800 VALUE str = global_symbols.op_sym[i];
15801 if (!str) {
15802 str = rb_usascii_str_new2(op_tbl[i].name);
15803 OBJ_FREEZE(str);
15804 global_symbols.op_sym[i] = str;
15805 }
15806 return str;
15807 }
15808 }
15809 }
15810
15811 if (st_lookup(global_symbols.id_str, id, &data)) {
15812 VALUE str = (VALUE)data;
15813 if (RBASIC(str)->klass == 0)
15814 RBASIC(str)->klass = rb_cString;
15815 return str;
15816 }
15817
15818 if (is_attrset_id(id)) {
15819 ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL;
15820 VALUE str;
15821
15822 while (!(str = rb_id2str(id2))) {
15823 if (!is_local_id(id2)) return 0;
15824 id2 = (id & ~ID_SCOPE_MASK) | ID_CONST;
15825 }
15826 str = rb_str_dup(str);
15827 rb_str_cat(str, "=", 1);
15828 rb_intern_str(str);
15829 if (st_lookup(global_symbols.id_str, id, &data)) {
15830 VALUE str = (VALUE)data;
15831 if (RBASIC(str)->klass == 0)
15832 RBASIC(str)->klass = rb_cString;
15833 return str;
15834 }
15835 }
15836 return 0;
15837 }
15838
15839 const char *
15840 rb_id2name(ID id)
15841 {
15842 VALUE str = rb_id2str(id);
15843
15844 if (!str) return 0;
15845 return RSTRING_PTR(str);
15846 }
15847
15848 static int
15849 symbols_i(VALUE sym, ID value, VALUE ary)
15850 {
15851 rb_ary_push(ary, ID2SYM(value));
15852 return ST_CONTINUE;
15853 }
15854
15855
15856
15857
15858
15859
15860
15861
15862
15863
15864
15865
15866
15867
15868
15869
15870
15871 VALUE
15872 rb_sym_all_symbols(void)
15873 {
15874 VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries);
15875
15876 st_foreach(global_symbols.sym_id, symbols_i, ary);
15877 return ary;
15878 }
15879
15880 int
15881 rb_is_const_id(ID id)
15882 {
15883 return is_const_id(id);
15884 }
15885
15886 int
15887 rb_is_class_id(ID id)
15888 {
15889 return is_class_id(id);
15890 }
15891
15892 int
15893 rb_is_instance_id(ID id)
15894 {
15895 return is_instance_id(id);
15896 }
15897
15898 int
15899 rb_is_local_id(ID id)
15900 {
15901 return is_local_id(id);
15902 }
15903
15904 int
15905 rb_is_junk_id(ID id)
15906 {
15907 return is_junk_id(id);
15908 }
15909
15910 #endif
15911
15912 static void
15913 parser_initialize(struct parser_params *parser)
15914 {
15915 parser->eofp = Qfalse;
15916
15917 parser->parser_lex_strterm = 0;
15918 parser->parser_cond_stack = 0;
15919 parser->parser_cmdarg_stack = 0;
15920 parser->parser_class_nest = 0;
15921 parser->parser_paren_nest = 0;
15922 parser->parser_lpar_beg = 0;
15923 parser->parser_in_single = 0;
15924 parser->parser_in_def = 0;
15925 parser->parser_in_defined = 0;
15926 parser->parser_compile_for_eval = 0;
15927 parser->parser_cur_mid = 0;
15928 parser->parser_tokenbuf = NULL;
15929 parser->parser_tokidx = 0;
15930 parser->parser_toksiz = 0;
15931 parser->parser_heredoc_end = 0;
15932 parser->parser_command_start = TRUE;
15933 parser->parser_deferred_nodes = 0;
15934 parser->parser_lex_pbeg = 0;
15935 parser->parser_lex_p = 0;
15936 parser->parser_lex_pend = 0;
15937 parser->parser_lvtbl = 0;
15938 parser->parser_ruby__end__seen = 0;
15939 parser->parser_ruby_sourcefile = 0;
15940 #ifndef RIPPER
15941 parser->is_ripper = 0;
15942 parser->parser_eval_tree_begin = 0;
15943 parser->parser_eval_tree = 0;
15944 #else
15945 parser->is_ripper = 1;
15946 parser->parser_ruby_sourcefile_string = Qnil;
15947 parser->delayed = Qnil;
15948
15949 parser->result = Qnil;
15950 parser->parsing_thread = Qnil;
15951 parser->toplevel_p = TRUE;
15952 #endif
15953 #ifdef YYMALLOC
15954 parser->heap = NULL;
15955 #endif
15956 parser->enc = rb_usascii_encoding();
15957 }
15958
15959 #ifdef RIPPER
15960 #define parser_mark ripper_parser_mark
15961 #define parser_free ripper_parser_free
15962 #endif
15963
15964 static void
15965 parser_mark(void *ptr)
15966 {
15967 struct parser_params *p = (struct parser_params*)ptr;
15968
15969 rb_gc_mark((VALUE)p->parser_lex_strterm);
15970 rb_gc_mark((VALUE)p->parser_deferred_nodes);
15971 rb_gc_mark(p->parser_lex_input);
15972 rb_gc_mark(p->parser_lex_lastline);
15973 rb_gc_mark(p->parser_lex_nextline);
15974 #ifndef RIPPER
15975 rb_gc_mark((VALUE)p->parser_eval_tree_begin) ;
15976 rb_gc_mark((VALUE)p->parser_eval_tree) ;
15977 rb_gc_mark(p->debug_lines);
15978 #else
15979 rb_gc_mark(p->parser_ruby_sourcefile_string);
15980 rb_gc_mark(p->delayed);
15981 rb_gc_mark(p->value);
15982 rb_gc_mark(p->result);
15983 rb_gc_mark(p->parsing_thread);
15984 #endif
15985 #ifdef YYMALLOC
15986 rb_gc_mark((VALUE)p->heap);
15987 #endif
15988 }
15989
15990 static void
15991 parser_free(void *ptr)
15992 {
15993 struct parser_params *p = (struct parser_params*)ptr;
15994 struct local_vars *local, *prev;
15995
15996 if (p->parser_tokenbuf) {
15997 xfree(p->parser_tokenbuf);
15998 }
15999 for (local = p->parser_lvtbl; local; local = prev) {
16000 if (local->vars) xfree(local->vars);
16001 prev = local->prev;
16002 xfree(local);
16003 }
16004 #ifndef RIPPER
16005 xfree(p->parser_ruby_sourcefile);
16006 #endif
16007 xfree(p);
16008 }
16009
16010 static size_t
16011 parser_memsize(const void *ptr)
16012 {
16013 struct parser_params *p = (struct parser_params*)ptr;
16014 struct local_vars *local;
16015 size_t size = sizeof(*p);
16016
16017 if (!ptr) return 0;
16018 size += p->parser_toksiz;
16019 for (local = p->parser_lvtbl; local; local = local->prev) {
16020 size += sizeof(*local);
16021 if (local->vars) size += local->vars->capa * sizeof(ID);
16022 }
16023 #ifndef RIPPER
16024 if (p->parser_ruby_sourcefile) {
16025 size += strlen(p->parser_ruby_sourcefile) + 1;
16026 }
16027 #endif
16028 return size;
16029 }
16030
16031 static const rb_data_type_t parser_data_type = {
16032 "parser",
16033 parser_mark,
16034 parser_free,
16035 parser_memsize,
16036 };
16037
16038 VALUE rb_parser_get_yydebug(VALUE);
16039 VALUE rb_parser_set_yydebug(VALUE, VALUE);
16040
16041 #ifndef RIPPER
16042 #undef rb_reserved_word
16043
16044 const struct kwtable *
16045 rb_reserved_word(const char *str, unsigned int len)
16046 {
16047 return reserved_word(str, len);
16048 }
16049
16050 static struct parser_params *
16051 parser_new(void)
16052 {
16053 struct parser_params *p;
16054
16055 p = ALLOC_N(struct parser_params, 1);
16056 MEMZERO(p, struct parser_params, 1);
16057 parser_initialize(p);
16058 return p;
16059 }
16060
16061 VALUE
16062 rb_parser_new(void)
16063 {
16064 struct parser_params *p = parser_new();
16065
16066 return TypedData_Wrap_Struct(0, &parser_data_type, p);
16067 }
16068
16069
16070
16071
16072
16073
16074
16075
16076 VALUE
16077 rb_parser_end_seen_p(VALUE vparser)
16078 {
16079 struct parser_params *parser;
16080
16081 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16082 return ruby__end__seen ? Qtrue : Qfalse;
16083 }
16084
16085
16086
16087
16088
16089
16090
16091 VALUE
16092 rb_parser_encoding(VALUE vparser)
16093 {
16094 struct parser_params *parser;
16095
16096 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16097 return rb_enc_from_encoding(parser->enc);
16098 }
16099
16100
16101
16102
16103
16104
16105
16106 VALUE
16107 rb_parser_get_yydebug(VALUE self)
16108 {
16109 struct parser_params *parser;
16110
16111 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16112 return yydebug ? Qtrue : Qfalse;
16113 }
16114
16115
16116
16117
16118
16119
16120
16121 VALUE
16122 rb_parser_set_yydebug(VALUE self, VALUE flag)
16123 {
16124 struct parser_params *parser;
16125
16126 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16127 yydebug = RTEST(flag);
16128 return flag;
16129 }
16130
16131 #ifdef YYMALLOC
16132 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
16133 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
16134 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
16135 (n)->u3.cnt = (c), (p))
16136
16137 void *
16138 rb_parser_malloc(struct parser_params *parser, size_t size)
16139 {
16140 size_t cnt = HEAPCNT(1, size);
16141 NODE *n = NEWHEAP();
16142 void *ptr = xmalloc(size);
16143
16144 return ADD2HEAP(n, cnt, ptr);
16145 }
16146
16147 void *
16148 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
16149 {
16150 size_t cnt = HEAPCNT(nelem, size);
16151 NODE *n = NEWHEAP();
16152 void *ptr = xcalloc(nelem, size);
16153
16154 return ADD2HEAP(n, cnt, ptr);
16155 }
16156
16157 void *
16158 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
16159 {
16160 NODE *n;
16161 size_t cnt = HEAPCNT(1, size);
16162
16163 if (ptr && (n = parser->heap) != NULL) {
16164 do {
16165 if (n->u1.node == ptr) {
16166 n->u1.node = ptr = xrealloc(ptr, size);
16167 if (n->u3.cnt) n->u3.cnt = cnt;
16168 return ptr;
16169 }
16170 } while ((n = n->u2.node) != NULL);
16171 }
16172 n = NEWHEAP();
16173 ptr = xrealloc(ptr, size);
16174 return ADD2HEAP(n, cnt, ptr);
16175 }
16176
16177 void
16178 rb_parser_free(struct parser_params *parser, void *ptr)
16179 {
16180 NODE **prev = &parser->heap, *n;
16181
16182 while ((n = *prev) != NULL) {
16183 if (n->u1.node == ptr) {
16184 *prev = n->u2.node;
16185 rb_gc_force_recycle((VALUE)n);
16186 break;
16187 }
16188 prev = &n->u2.node;
16189 }
16190 xfree(ptr);
16191 }
16192 #endif
16193 #endif
16194
16195 #ifdef RIPPER
16196 #ifdef RIPPER_DEBUG
16197 extern int rb_is_pointer_to_heap(VALUE);
16198
16199
16200 static VALUE
16201 ripper_validate_object(VALUE self, VALUE x)
16202 {
16203 if (x == Qfalse) return x;
16204 if (x == Qtrue) return x;
16205 if (x == Qnil) return x;
16206 if (x == Qundef)
16207 rb_raise(rb_eArgError, "Qundef given");
16208 if (FIXNUM_P(x)) return x;
16209 if (SYMBOL_P(x)) return x;
16210 if (!rb_is_pointer_to_heap(x))
16211 rb_raise(rb_eArgError, "invalid pointer: %p", x);
16212 switch (TYPE(x)) {
16213 case T_STRING:
16214 case T_OBJECT:
16215 case T_ARRAY:
16216 case T_BIGNUM:
16217 case T_FLOAT:
16218 return x;
16219 case T_NODE:
16220 if (nd_type(x) != NODE_LASGN) {
16221 rb_raise(rb_eArgError, "NODE given: %p", x);
16222 }
16223 return ((NODE *)x)->nd_rval;
16224 default:
16225 rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
16226 x, rb_obj_classname(x));
16227 }
16228 return x;
16229 }
16230 #endif
16231
16232 #define validate(x) (x = get_value(x))
16233
16234 static VALUE
16235 ripper_dispatch0(struct parser_params *parser, ID mid)
16236 {
16237 return rb_funcall(parser->value, mid, 0);
16238 }
16239
16240 static VALUE
16241 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
16242 {
16243 validate(a);
16244 return rb_funcall(parser->value, mid, 1, a);
16245 }
16246
16247 static VALUE
16248 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
16249 {
16250 validate(a);
16251 validate(b);
16252 return rb_funcall(parser->value, mid, 2, a, b);
16253 }
16254
16255 static VALUE
16256 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
16257 {
16258 validate(a);
16259 validate(b);
16260 validate(c);
16261 return rb_funcall(parser->value, mid, 3, a, b, c);
16262 }
16263
16264 static VALUE
16265 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
16266 {
16267 validate(a);
16268 validate(b);
16269 validate(c);
16270 validate(d);
16271 return rb_funcall(parser->value, mid, 4, a, b, c, d);
16272 }
16273
16274 static VALUE
16275 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
16276 {
16277 validate(a);
16278 validate(b);
16279 validate(c);
16280 validate(d);
16281 validate(e);
16282 return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
16283 }
16284
16285 static const struct kw_assoc {
16286 ID id;
16287 const char *name;
16288 } keyword_to_name[] = {
16289 {keyword_class, "class"},
16290 {keyword_module, "module"},
16291 {keyword_def, "def"},
16292 {keyword_undef, "undef"},
16293 {keyword_begin, "begin"},
16294 {keyword_rescue, "rescue"},
16295 {keyword_ensure, "ensure"},
16296 {keyword_end, "end"},
16297 {keyword_if, "if"},
16298 {keyword_unless, "unless"},
16299 {keyword_then, "then"},
16300 {keyword_elsif, "elsif"},
16301 {keyword_else, "else"},
16302 {keyword_case, "case"},
16303 {keyword_when, "when"},
16304 {keyword_while, "while"},
16305 {keyword_until, "until"},
16306 {keyword_for, "for"},
16307 {keyword_break, "break"},
16308 {keyword_next, "next"},
16309 {keyword_redo, "redo"},
16310 {keyword_retry, "retry"},
16311 {keyword_in, "in"},
16312 {keyword_do, "do"},
16313 {keyword_do_cond, "do"},
16314 {keyword_do_block, "do"},
16315 {keyword_return, "return"},
16316 {keyword_yield, "yield"},
16317 {keyword_super, "super"},
16318 {keyword_self, "self"},
16319 {keyword_nil, "nil"},
16320 {keyword_true, "true"},
16321 {keyword_false, "false"},
16322 {keyword_and, "and"},
16323 {keyword_or, "or"},
16324 {keyword_not, "not"},
16325 {modifier_if, "if"},
16326 {modifier_unless, "unless"},
16327 {modifier_while, "while"},
16328 {modifier_until, "until"},
16329 {modifier_rescue, "rescue"},
16330 {keyword_alias, "alias"},
16331 {keyword_defined, "defined?"},
16332 {keyword_BEGIN, "BEGIN"},
16333 {keyword_END, "END"},
16334 {keyword__LINE__, "__LINE__"},
16335 {keyword__FILE__, "__FILE__"},
16336 {keyword__ENCODING__, "__ENCODING__"},
16337 {0, NULL}
16338 };
16339
16340 static const char*
16341 keyword_id_to_str(ID id)
16342 {
16343 const struct kw_assoc *a;
16344
16345 for (a = keyword_to_name; a->id; a++) {
16346 if (a->id == id)
16347 return a->name;
16348 }
16349 return NULL;
16350 }
16351
16352 #undef ripper_id2sym
16353 static VALUE
16354 ripper_id2sym(ID id)
16355 {
16356 const char *name;
16357 char buf[8];
16358
16359 if (id <= 256) {
16360 buf[0] = (char)id;
16361 buf[1] = '\0';
16362 return ID2SYM(rb_intern2(buf, 1));
16363 }
16364 if ((name = keyword_id_to_str(id))) {
16365 return ID2SYM(rb_intern(name));
16366 }
16367 switch (id) {
16368 case tOROP:
16369 name = "||";
16370 break;
16371 case tANDOP:
16372 name = "&&";
16373 break;
16374 default:
16375 name = rb_id2name(id);
16376 if (!name) {
16377 rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
16378 }
16379 return ID2SYM(id);
16380 }
16381 return ID2SYM(rb_intern(name));
16382 }
16383
16384 static ID
16385 ripper_get_id(VALUE v)
16386 {
16387 NODE *nd;
16388 if (!RB_TYPE_P(v, T_NODE)) return 0;
16389 nd = (NODE *)v;
16390 if (nd_type(nd) != NODE_LASGN) return 0;
16391 return nd->nd_vid;
16392 }
16393
16394 static VALUE
16395 ripper_get_value(VALUE v)
16396 {
16397 NODE *nd;
16398 if (v == Qundef) return Qnil;
16399 if (!RB_TYPE_P(v, T_NODE)) return v;
16400 nd = (NODE *)v;
16401 if (nd_type(nd) != NODE_LASGN) return Qnil;
16402 return nd->nd_rval;
16403 }
16404
16405 static void
16406 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
16407 {
16408 VALUE str;
16409 va_list args;
16410
16411 va_start(args, fmt);
16412 str = rb_vsprintf(fmt, args);
16413 va_end(args);
16414 rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
16415 }
16416
16417 static void
16418 ripper_warn0(struct parser_params *parser, const char *fmt)
16419 {
16420 rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
16421 }
16422
16423 static void
16424 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
16425 {
16426 rb_funcall(parser->value, rb_intern("warn"), 2,
16427 STR_NEW2(fmt), INT2NUM(a));
16428 }
16429
16430 #if 0
16431 static void
16432 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
16433 {
16434 rb_funcall(parser->value, rb_intern("warn"), 2,
16435 STR_NEW2(fmt), STR_NEW2(str));
16436 }
16437 #endif
16438
16439 static void
16440 ripper_warning0(struct parser_params *parser, const char *fmt)
16441 {
16442 rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
16443 }
16444
16445 static void
16446 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
16447 {
16448 rb_funcall(parser->value, rb_intern("warning"), 2,
16449 STR_NEW2(fmt), STR_NEW2(str));
16450 }
16451
16452 static VALUE
16453 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
16454 {
16455 return rb_funcall(src, ripper_id_gets, 0);
16456 }
16457
16458 static VALUE
16459 ripper_s_allocate(VALUE klass)
16460 {
16461 struct parser_params *p;
16462 VALUE self;
16463
16464 p = ALLOC_N(struct parser_params, 1);
16465 MEMZERO(p, struct parser_params, 1);
16466 self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
16467 p->value = self;
16468 return self;
16469 }
16470
16471 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
16472
16473
16474
16475
16476
16477
16478
16479
16480
16481
16482
16483 static VALUE
16484 ripper_initialize(int argc, VALUE *argv, VALUE self)
16485 {
16486 struct parser_params *parser;
16487 VALUE src, fname, lineno;
16488
16489 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16490 rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
16491 if (rb_obj_respond_to(src, ripper_id_gets, 0)) {
16492 parser->parser_lex_gets = ripper_lex_get_generic;
16493 }
16494 else {
16495 StringValue(src);
16496 parser->parser_lex_gets = lex_get_str;
16497 }
16498 parser->parser_lex_input = src;
16499 parser->eofp = Qfalse;
16500 if (NIL_P(fname)) {
16501 fname = STR_NEW2("(ripper)");
16502 }
16503 else {
16504 StringValue(fname);
16505 }
16506 parser_initialize(parser);
16507
16508 parser->parser_ruby_sourcefile_string = fname;
16509 parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
16510 parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
16511
16512 return Qnil;
16513 }
16514
16515 extern VALUE rb_thread_pass(void);
16516
16517 struct ripper_args {
16518 struct parser_params *parser;
16519 int argc;
16520 VALUE *argv;
16521 };
16522
16523 static VALUE
16524 ripper_parse0(VALUE parser_v)
16525 {
16526 struct parser_params *parser;
16527
16528 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16529 parser_prepare(parser);
16530 ripper_yyparse((void*)parser);
16531 return parser->result;
16532 }
16533
16534 static VALUE
16535 ripper_ensure(VALUE parser_v)
16536 {
16537 struct parser_params *parser;
16538
16539 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16540 parser->parsing_thread = Qnil;
16541 return Qnil;
16542 }
16543
16544
16545
16546
16547
16548
16549
16550 static VALUE
16551 ripper_parse(VALUE self)
16552 {
16553 struct parser_params *parser;
16554
16555 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16556 if (!ripper_initialized_p(parser)) {
16557 rb_raise(rb_eArgError, "method called for uninitialized object");
16558 }
16559 if (!NIL_P(parser->parsing_thread)) {
16560 if (parser->parsing_thread == rb_thread_current())
16561 rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
16562 else
16563 rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
16564 }
16565 parser->parsing_thread = rb_thread_current();
16566 rb_ensure(ripper_parse0, self, ripper_ensure, self);
16567
16568 return parser->result;
16569 }
16570
16571
16572
16573
16574
16575
16576
16577
16578 static VALUE
16579 ripper_column(VALUE self)
16580 {
16581 struct parser_params *parser;
16582 long col;
16583
16584 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16585 if (!ripper_initialized_p(parser)) {
16586 rb_raise(rb_eArgError, "method called for uninitialized object");
16587 }
16588 if (NIL_P(parser->parsing_thread)) return Qnil;
16589 col = parser->tokp - parser->parser_lex_pbeg;
16590 return LONG2NUM(col);
16591 }
16592
16593
16594
16595
16596
16597
16598
16599 static VALUE
16600 ripper_filename(VALUE self)
16601 {
16602 struct parser_params *parser;
16603
16604 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16605 if (!ripper_initialized_p(parser)) {
16606 rb_raise(rb_eArgError, "method called for uninitialized object");
16607 }
16608 return parser->parser_ruby_sourcefile_string;
16609 }
16610
16611
16612
16613
16614
16615
16616
16617
16618 static VALUE
16619 ripper_lineno(VALUE self)
16620 {
16621 struct parser_params *parser;
16622
16623 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16624 if (!ripper_initialized_p(parser)) {
16625 rb_raise(rb_eArgError, "method called for uninitialized object");
16626 }
16627 if (NIL_P(parser->parsing_thread)) return Qnil;
16628 return INT2NUM(parser->parser_ruby_sourceline);
16629 }
16630
16631 #ifdef RIPPER_DEBUG
16632
16633 static VALUE
16634 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
16635 {
16636 StringValue(msg);
16637 if (obj == Qundef) {
16638 rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg));
16639 }
16640 return Qnil;
16641 }
16642
16643
16644 static VALUE
16645 ripper_value(VALUE self, VALUE obj)
16646 {
16647 return ULONG2NUM(obj);
16648 }
16649 #endif
16650
16651 void
16652 Init_ripper(void)
16653 {
16654 VALUE Ripper;
16655
16656 Ripper = rb_define_class("Ripper", rb_cObject);
16657 rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
16658 rb_define_alloc_func(Ripper, ripper_s_allocate);
16659 rb_define_method(Ripper, "initialize", ripper_initialize, -1);
16660 rb_define_method(Ripper, "parse", ripper_parse, 0);
16661 rb_define_method(Ripper, "column", ripper_column, 0);
16662 rb_define_method(Ripper, "filename", ripper_filename, 0);
16663 rb_define_method(Ripper, "lineno", ripper_lineno, 0);
16664 rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
16665 rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
16666 rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
16667 rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
16668 #ifdef RIPPER_DEBUG
16669 rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
16670 rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
16671 rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
16672 #endif
16673
16674 ripper_id_gets = rb_intern("gets");
16675 ripper_init_eventids1(Ripper);
16676 ripper_init_eventids2(Ripper);
16677
16678 rb_intern("||");
16679 rb_intern("&&");
16680 }
16681 #endif
16682
16683