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, 1183, 1200, 1210,
01382 1219, 1228, 1237, 1240, 1241, 1249, 1257, 1265, 1273, 1276,
01383 1288, 1289, 1292, 1293, 1302, 1314, 1313, 1335, 1344, 1356,
01384 1365, 1377, 1386, 1398, 1407, 1416, 1424, 1432, 1442, 1443,
01385 1453, 1454, 1464, 1472, 1480, 1488, 1497, 1505, 1514, 1522,
01386 1531, 1539, 1550, 1551, 1561, 1569, 1579, 1587, 1597, 1601,
01387 1609, 1617, 1625, 1633, 1645, 1655, 1667, 1676, 1684, 1692,
01388 1700, 1708, 1721, 1734, 1745, 1753, 1756, 1764, 1772, 1782,
01389 1783, 1784, 1785, 1790, 1801, 1802, 1805, 1813, 1816, 1824,
01390 1824, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842,
01391 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852,
01392 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862,
01393 1865, 1865, 1865, 1866, 1866, 1867, 1867, 1867, 1868, 1868,
01394 1868, 1868, 1869, 1869, 1869, 1869, 1870, 1870, 1870, 1871,
01395 1871, 1871, 1871, 1872, 1872, 1872, 1872, 1873, 1873, 1873,
01396 1873, 1874, 1874, 1874, 1874, 1875, 1875, 1875, 1875, 1876,
01397 1876, 1879, 1888, 1898, 1927, 1958, 1984, 2001, 2018, 2035,
01398 2046, 2057, 2068, 2082, 2096, 2104, 2112, 2120, 2128, 2136,
01399 2144, 2153, 2162, 2170, 2178, 2186, 2194, 2202, 2210, 2218,
01400 2226, 2234, 2242, 2250, 2258, 2266, 2277, 2285, 2293, 2301,
01401 2309, 2317, 2325, 2333, 2333, 2343, 2353, 2359, 2371, 2372,
01402 2376, 2384, 2394, 2404, 2405, 2408, 2409, 2412, 2421, 2429,
01403 2439, 2448, 2457, 2457, 2469, 2479, 2483, 2487, 2493, 2501,
01404 2509, 2523, 2539, 2553, 2568, 2578, 2579, 2580, 2581, 2582,
01405 2583, 2584, 2585, 2586, 2595, 2594, 2619, 2619, 2628, 2636,
01406 2644, 2652, 2665, 2673, 2681, 2689, 2697, 2705, 2705, 2715,
01407 2723, 2731, 2742, 2743, 2754, 2758, 2770, 2782, 2782, 2782,
01408 2793, 2793, 2793, 2804, 2815, 2824, 2826, 2823, 2890, 2889,
01409 2911, 2916, 2910, 2935, 2934, 2956, 2955, 2978, 2979, 2978,
01410 2999, 3007, 3015, 3023, 3033, 3045, 3051, 3057, 3063, 3069,
01411 3075, 3081, 3087, 3093, 3099, 3109, 3115, 3120, 3121, 3128,
01412 3133, 3136, 3137, 3150, 3151, 3161, 3162, 3165, 3173, 3183,
01413 3191, 3201, 3209, 3218, 3227, 3235, 3243, 3252, 3264, 3272,
01414 3282, 3290, 3298, 3306, 3314, 3322, 3331, 3339, 3347, 3355,
01415 3363, 3371, 3379, 3387, 3395, 3405, 3406, 3412, 3421, 3430,
01416 3441, 3442, 3452, 3459, 3468, 3476, 3482, 3485, 3482, 3503,
01417 3511, 3521, 3525, 3532, 3531, 3552, 3568, 3577, 3588, 3597,
01418 3607, 3617, 3625, 3636, 3647, 3655, 3663, 3678, 3677, 3697,
01419 3696, 3717, 3729, 3730, 3733, 3752, 3755, 3763, 3771, 3774,
01420 3778, 3781, 3789, 3792, 3793, 3801, 3804, 3821, 3822, 3823,
01421 3833, 3843, 3870, 3935, 3944, 3955, 3962, 3972, 3980, 3990,
01422 3999, 4010, 4017, 4028, 4035, 4046, 4053, 4064, 4071, 4100,
01423 4102, 4101, 4118, 4124, 4117, 4143, 4151, 4159, 4167, 4170,
01424 4181, 4182, 4183, 4184, 4187, 4217, 4218, 4219, 4227, 4237,
01425 4238, 4239, 4240, 4241, 4242, 4243, 4244, 4245, 4246, 4247,
01426 4248, 4251, 4261, 4271, 4272, 4275, 4284, 4283, 4291, 4303,
01427 4313, 4319, 4327, 4335, 4343, 4351, 4359, 4367, 4375, 4383,
01428 4391, 4399, 4407, 4415, 4423, 4432, 4441, 4450, 4459, 4468,
01429 4479, 4480, 4487, 4496, 4515, 4522, 4535, 4547, 4559, 4567,
01430 4583, 4591, 4607, 4608, 4611, 4624, 4635, 4636, 4639, 4656,
01431 4660, 4670, 4680, 4680, 4709, 4710, 4720, 4727, 4737, 4745,
01432 4755, 4756, 4757, 4760, 4761, 4762, 4763, 4766, 4767, 4768,
01433 4771, 4776, 4783, 4784, 4787, 4788, 4791, 4794, 4797, 4798,
01434 4799, 4802, 4803, 4806, 4807, 4811
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
05473 yyerror("constant re-assignment");
05474 (yyval.node) = 0;
05475
05476
05477
05478
05479
05480 ;}
05481 break;
05482
05483 case 37:
05484
05485
05486 #line 1184 "parse.y"
05487 {
05488
05489 value_expr((yyvsp[(5) - (5)].node));
05490 if ((yyvsp[(4) - (5)].id) == tOROP) {
05491 (yyvsp[(4) - (5)].id) = 0;
05492 }
05493 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05494 (yyvsp[(4) - (5)].id) = 1;
05495 }
05496 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05497 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05498
05499
05500
05501
05502 ;}
05503 break;
05504
05505 case 38:
05506
05507
05508 #line 1201 "parse.y"
05509 {
05510
05511 rb_backref_error((yyvsp[(1) - (3)].node));
05512 (yyval.node) = NEW_BEGIN(0);
05513
05514
05515
05516
05517 ;}
05518 break;
05519
05520 case 39:
05521
05522
05523 #line 1211 "parse.y"
05524 {
05525
05526 value_expr((yyvsp[(3) - (3)].node));
05527 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05528
05529
05530
05531 ;}
05532 break;
05533
05534 case 40:
05535
05536
05537 #line 1220 "parse.y"
05538 {
05539
05540 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05541 (yyval.node) = (yyvsp[(1) - (3)].node);
05542
05543
05544
05545 ;}
05546 break;
05547
05548 case 41:
05549
05550
05551 #line 1229 "parse.y"
05552 {
05553
05554 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05555 (yyval.node) = (yyvsp[(1) - (3)].node);
05556
05557
05558
05559 ;}
05560 break;
05561
05562 case 44:
05563
05564
05565 #line 1242 "parse.y"
05566 {
05567
05568 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05569
05570
05571
05572 ;}
05573 break;
05574
05575 case 45:
05576
05577
05578 #line 1250 "parse.y"
05579 {
05580
05581 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05582
05583
05584
05585 ;}
05586 break;
05587
05588 case 46:
05589
05590
05591 #line 1258 "parse.y"
05592 {
05593
05594 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
05595
05596
05597
05598 ;}
05599 break;
05600
05601 case 47:
05602
05603
05604 #line 1266 "parse.y"
05605 {
05606
05607 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
05608
05609
05610
05611 ;}
05612 break;
05613
05614 case 49:
05615
05616
05617 #line 1277 "parse.y"
05618 {
05619
05620 value_expr((yyvsp[(1) - (1)].node));
05621 (yyval.node) = (yyvsp[(1) - (1)].node);
05622 if (!(yyval.node)) (yyval.node) = NEW_NIL();
05623
05624
05625
05626 ;}
05627 break;
05628
05629 case 53:
05630
05631
05632 #line 1294 "parse.y"
05633 {
05634
05635 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05636
05637
05638
05639
05640 ;}
05641 break;
05642
05643 case 54:
05644
05645
05646 #line 1303 "parse.y"
05647 {
05648
05649 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05650
05651
05652
05653
05654 ;}
05655 break;
05656
05657 case 55:
05658
05659
05660 #line 1314 "parse.y"
05661 {
05662 (yyvsp[(1) - (1)].vars) = dyna_push();
05663
05664 (yyval.num) = ruby_sourceline;
05665
05666
05667 ;}
05668 break;
05669
05670 case 56:
05671
05672
05673 #line 1324 "parse.y"
05674 {
05675
05676 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
05677 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
05678
05679
05680
05681 dyna_pop((yyvsp[(1) - (5)].vars));
05682 ;}
05683 break;
05684
05685 case 57:
05686
05687
05688 #line 1336 "parse.y"
05689 {
05690
05691 (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
05692 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05693
05694
05695
05696 ;}
05697 break;
05698
05699 case 58:
05700
05701
05702 #line 1345 "parse.y"
05703 {
05704
05705 block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
05706 (yyvsp[(3) - (3)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].node));
05707 (yyval.node) = (yyvsp[(3) - (3)].node);
05708 fixpos((yyval.node), (yyvsp[(2) - (3)].node));
05709
05710
05711
05712
05713 ;}
05714 break;
05715
05716 case 59:
05717
05718
05719 #line 1357 "parse.y"
05720 {
05721
05722 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05723 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05724
05725
05726
05727 ;}
05728 break;
05729
05730 case 60:
05731
05732
05733 #line 1366 "parse.y"
05734 {
05735
05736 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05737 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05738 (yyval.node) = (yyvsp[(5) - (5)].node);
05739 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05740
05741
05742
05743
05744 ;}
05745 break;
05746
05747 case 61:
05748
05749
05750 #line 1378 "parse.y"
05751 {
05752
05753 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05754 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05755
05756
05757
05758 ;}
05759 break;
05760
05761 case 62:
05762
05763
05764 #line 1387 "parse.y"
05765 {
05766
05767 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05768 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05769 (yyval.node) = (yyvsp[(5) - (5)].node);
05770 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05771
05772
05773
05774
05775 ;}
05776 break;
05777
05778 case 63:
05779
05780
05781 #line 1399 "parse.y"
05782 {
05783
05784 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
05785 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05786
05787
05788
05789 ;}
05790 break;
05791
05792 case 64:
05793
05794
05795 #line 1408 "parse.y"
05796 {
05797
05798 (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
05799 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05800
05801
05802
05803 ;}
05804 break;
05805
05806 case 65:
05807
05808
05809 #line 1417 "parse.y"
05810 {
05811
05812 (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
05813
05814
05815
05816 ;}
05817 break;
05818
05819 case 66:
05820
05821
05822 #line 1425 "parse.y"
05823 {
05824
05825 (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
05826
05827
05828
05829 ;}
05830 break;
05831
05832 case 67:
05833
05834
05835 #line 1433 "parse.y"
05836 {
05837
05838 (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
05839
05840
05841
05842 ;}
05843 break;
05844
05845 case 69:
05846
05847
05848 #line 1444 "parse.y"
05849 {
05850
05851 (yyval.node) = (yyvsp[(2) - (3)].node);
05852
05853
05854
05855 ;}
05856 break;
05857
05858 case 71:
05859
05860
05861 #line 1455 "parse.y"
05862 {
05863
05864 (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
05865
05866
05867
05868 ;}
05869 break;
05870
05871 case 72:
05872
05873
05874 #line 1465 "parse.y"
05875 {
05876
05877 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
05878
05879
05880
05881 ;}
05882 break;
05883
05884 case 73:
05885
05886
05887 #line 1473 "parse.y"
05888 {
05889
05890 (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
05891
05892
05893
05894 ;}
05895 break;
05896
05897 case 74:
05898
05899
05900 #line 1481 "parse.y"
05901 {
05902
05903 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05904
05905
05906
05907 ;}
05908 break;
05909
05910 case 75:
05911
05912
05913 #line 1489 "parse.y"
05914 {
05915
05916 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
05917
05918
05919
05920
05921 ;}
05922 break;
05923
05924 case 76:
05925
05926
05927 #line 1498 "parse.y"
05928 {
05929
05930 (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
05931
05932
05933
05934 ;}
05935 break;
05936
05937 case 77:
05938
05939
05940 #line 1506 "parse.y"
05941 {
05942
05943 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
05944
05945
05946
05947
05948 ;}
05949 break;
05950
05951 case 78:
05952
05953
05954 #line 1515 "parse.y"
05955 {
05956
05957 (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
05958
05959
05960
05961 ;}
05962 break;
05963
05964 case 79:
05965
05966
05967 #line 1523 "parse.y"
05968 {
05969
05970 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
05971
05972
05973
05974
05975 ;}
05976 break;
05977
05978 case 80:
05979
05980
05981 #line 1532 "parse.y"
05982 {
05983
05984 (yyval.node) = NEW_MASGN(0, -1);
05985
05986
05987
05988 ;}
05989 break;
05990
05991 case 81:
05992
05993
05994 #line 1540 "parse.y"
05995 {
05996
05997 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
05998
05999
06000
06001
06002 ;}
06003 break;
06004
06005 case 83:
06006
06007
06008 #line 1552 "parse.y"
06009 {
06010
06011 (yyval.node) = (yyvsp[(2) - (3)].node);
06012
06013
06014
06015 ;}
06016 break;
06017
06018 case 84:
06019
06020
06021 #line 1562 "parse.y"
06022 {
06023
06024 (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
06025
06026
06027
06028 ;}
06029 break;
06030
06031 case 85:
06032
06033
06034 #line 1570 "parse.y"
06035 {
06036
06037 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
06038
06039
06040
06041 ;}
06042 break;
06043
06044 case 86:
06045
06046
06047 #line 1580 "parse.y"
06048 {
06049
06050 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
06051
06052
06053
06054 ;}
06055 break;
06056
06057 case 87:
06058
06059
06060 #line 1588 "parse.y"
06061 {
06062
06063 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06064
06065
06066
06067 ;}
06068 break;
06069
06070 case 88:
06071
06072
06073 #line 1598 "parse.y"
06074 {
06075 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06076 ;}
06077 break;
06078
06079 case 89:
06080
06081
06082 #line 1602 "parse.y"
06083 {
06084
06085 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06086
06087
06088
06089 ;}
06090 break;
06091
06092 case 90:
06093
06094
06095 #line 1610 "parse.y"
06096 {
06097
06098 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06099
06100
06101
06102 ;}
06103 break;
06104
06105 case 91:
06106
06107
06108 #line 1618 "parse.y"
06109 {
06110
06111 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06112
06113
06114
06115 ;}
06116 break;
06117
06118 case 92:
06119
06120
06121 #line 1626 "parse.y"
06122 {
06123
06124 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06125
06126
06127
06128 ;}
06129 break;
06130
06131 case 93:
06132
06133
06134 #line 1634 "parse.y"
06135 {
06136
06137 if (in_def || in_single)
06138 yyerror("dynamic constant assignment");
06139 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06140
06141
06142
06143
06144
06145 ;}
06146 break;
06147
06148 case 94:
06149
06150
06151 #line 1646 "parse.y"
06152 {
06153
06154 if (in_def || in_single)
06155 yyerror("dynamic constant assignment");
06156 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06157
06158
06159
06160 ;}
06161 break;
06162
06163 case 95:
06164
06165
06166 #line 1656 "parse.y"
06167 {
06168
06169 rb_backref_error((yyvsp[(1) - (1)].node));
06170 (yyval.node) = NEW_BEGIN(0);
06171
06172
06173
06174
06175 ;}
06176 break;
06177
06178 case 96:
06179
06180
06181 #line 1668 "parse.y"
06182 {
06183 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06184
06185 if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06186
06187
06188
06189 ;}
06190 break;
06191
06192 case 97:
06193
06194
06195 #line 1677 "parse.y"
06196 {
06197
06198 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06199
06200
06201
06202 ;}
06203 break;
06204
06205 case 98:
06206
06207
06208 #line 1685 "parse.y"
06209 {
06210
06211 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06212
06213
06214
06215 ;}
06216 break;
06217
06218 case 99:
06219
06220
06221 #line 1693 "parse.y"
06222 {
06223
06224 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06225
06226
06227
06228 ;}
06229 break;
06230
06231 case 100:
06232
06233
06234 #line 1701 "parse.y"
06235 {
06236
06237 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06238
06239
06240
06241 ;}
06242 break;
06243
06244 case 101:
06245
06246
06247 #line 1709 "parse.y"
06248 {
06249
06250 if (in_def || in_single)
06251 yyerror("dynamic constant assignment");
06252 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06253
06254
06255
06256
06257
06258
06259 ;}
06260 break;
06261
06262 case 102:
06263
06264
06265 #line 1722 "parse.y"
06266 {
06267
06268 if (in_def || in_single)
06269 yyerror("dynamic constant assignment");
06270 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06271
06272
06273
06274
06275
06276
06277 ;}
06278 break;
06279
06280 case 103:
06281
06282
06283 #line 1735 "parse.y"
06284 {
06285
06286 rb_backref_error((yyvsp[(1) - (1)].node));
06287 (yyval.node) = NEW_BEGIN(0);
06288
06289
06290
06291 ;}
06292 break;
06293
06294 case 104:
06295
06296
06297 #line 1746 "parse.y"
06298 {
06299
06300 yyerror("class/module name must be CONSTANT");
06301
06302
06303
06304 ;}
06305 break;
06306
06307 case 106:
06308
06309
06310 #line 1757 "parse.y"
06311 {
06312
06313 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
06314
06315
06316
06317 ;}
06318 break;
06319
06320 case 107:
06321
06322
06323 #line 1765 "parse.y"
06324 {
06325
06326 (yyval.node) = NEW_COLON2(0, (yyval.node));
06327
06328
06329
06330 ;}
06331 break;
06332
06333 case 108:
06334
06335
06336 #line 1773 "parse.y"
06337 {
06338
06339 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06340
06341
06342
06343 ;}
06344 break;
06345
06346 case 112:
06347
06348
06349 #line 1786 "parse.y"
06350 {
06351 lex_state = EXPR_ENDFN;
06352 (yyval.id) = (yyvsp[(1) - (1)].id);
06353 ;}
06354 break;
06355
06356 case 113:
06357
06358
06359 #line 1791 "parse.y"
06360 {
06361 lex_state = EXPR_ENDFN;
06362
06363 (yyval.id) = (yyvsp[(1) - (1)].id);
06364
06365
06366
06367 ;}
06368 break;
06369
06370 case 116:
06371
06372
06373 #line 1806 "parse.y"
06374 {
06375
06376 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
06377
06378
06379
06380 ;}
06381 break;
06382
06383 case 118:
06384
06385
06386 #line 1817 "parse.y"
06387 {
06388
06389 (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
06390
06391
06392
06393 ;}
06394 break;
06395
06396 case 119:
06397
06398
06399 #line 1824 "parse.y"
06400 {lex_state = EXPR_FNAME;;}
06401 break;
06402
06403 case 120:
06404
06405
06406 #line 1825 "parse.y"
06407 {
06408
06409 (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
06410
06411
06412
06413 ;}
06414 break;
06415
06416 case 121:
06417
06418
06419 #line 1834 "parse.y"
06420 { ifndef_ripper((yyval.id) = '|'); ;}
06421 break;
06422
06423 case 122:
06424
06425
06426 #line 1835 "parse.y"
06427 { ifndef_ripper((yyval.id) = '^'); ;}
06428 break;
06429
06430 case 123:
06431
06432
06433 #line 1836 "parse.y"
06434 { ifndef_ripper((yyval.id) = '&'); ;}
06435 break;
06436
06437 case 124:
06438
06439
06440 #line 1837 "parse.y"
06441 { ifndef_ripper((yyval.id) = tCMP); ;}
06442 break;
06443
06444 case 125:
06445
06446
06447 #line 1838 "parse.y"
06448 { ifndef_ripper((yyval.id) = tEQ); ;}
06449 break;
06450
06451 case 126:
06452
06453
06454 #line 1839 "parse.y"
06455 { ifndef_ripper((yyval.id) = tEQQ); ;}
06456 break;
06457
06458 case 127:
06459
06460
06461 #line 1840 "parse.y"
06462 { ifndef_ripper((yyval.id) = tMATCH); ;}
06463 break;
06464
06465 case 128:
06466
06467
06468 #line 1841 "parse.y"
06469 { ifndef_ripper((yyval.id) = tNMATCH); ;}
06470 break;
06471
06472 case 129:
06473
06474
06475 #line 1842 "parse.y"
06476 { ifndef_ripper((yyval.id) = '>'); ;}
06477 break;
06478
06479 case 130:
06480
06481
06482 #line 1843 "parse.y"
06483 { ifndef_ripper((yyval.id) = tGEQ); ;}
06484 break;
06485
06486 case 131:
06487
06488
06489 #line 1844 "parse.y"
06490 { ifndef_ripper((yyval.id) = '<'); ;}
06491 break;
06492
06493 case 132:
06494
06495
06496 #line 1845 "parse.y"
06497 { ifndef_ripper((yyval.id) = tLEQ); ;}
06498 break;
06499
06500 case 133:
06501
06502
06503 #line 1846 "parse.y"
06504 { ifndef_ripper((yyval.id) = tNEQ); ;}
06505 break;
06506
06507 case 134:
06508
06509
06510 #line 1847 "parse.y"
06511 { ifndef_ripper((yyval.id) = tLSHFT); ;}
06512 break;
06513
06514 case 135:
06515
06516
06517 #line 1848 "parse.y"
06518 { ifndef_ripper((yyval.id) = tRSHFT); ;}
06519 break;
06520
06521 case 136:
06522
06523
06524 #line 1849 "parse.y"
06525 { ifndef_ripper((yyval.id) = '+'); ;}
06526 break;
06527
06528 case 137:
06529
06530
06531 #line 1850 "parse.y"
06532 { ifndef_ripper((yyval.id) = '-'); ;}
06533 break;
06534
06535 case 138:
06536
06537
06538 #line 1851 "parse.y"
06539 { ifndef_ripper((yyval.id) = '*'); ;}
06540 break;
06541
06542 case 139:
06543
06544
06545 #line 1852 "parse.y"
06546 { ifndef_ripper((yyval.id) = '*'); ;}
06547 break;
06548
06549 case 140:
06550
06551
06552 #line 1853 "parse.y"
06553 { ifndef_ripper((yyval.id) = '/'); ;}
06554 break;
06555
06556 case 141:
06557
06558
06559 #line 1854 "parse.y"
06560 { ifndef_ripper((yyval.id) = '%'); ;}
06561 break;
06562
06563 case 142:
06564
06565
06566 #line 1855 "parse.y"
06567 { ifndef_ripper((yyval.id) = tPOW); ;}
06568 break;
06569
06570 case 143:
06571
06572
06573 #line 1856 "parse.y"
06574 { ifndef_ripper((yyval.id) = '!'); ;}
06575 break;
06576
06577 case 144:
06578
06579
06580 #line 1857 "parse.y"
06581 { ifndef_ripper((yyval.id) = '~'); ;}
06582 break;
06583
06584 case 145:
06585
06586
06587 #line 1858 "parse.y"
06588 { ifndef_ripper((yyval.id) = tUPLUS); ;}
06589 break;
06590
06591 case 146:
06592
06593
06594 #line 1859 "parse.y"
06595 { ifndef_ripper((yyval.id) = tUMINUS); ;}
06596 break;
06597
06598 case 147:
06599
06600
06601 #line 1860 "parse.y"
06602 { ifndef_ripper((yyval.id) = tAREF); ;}
06603 break;
06604
06605 case 148:
06606
06607
06608 #line 1861 "parse.y"
06609 { ifndef_ripper((yyval.id) = tASET); ;}
06610 break;
06611
06612 case 149:
06613
06614
06615 #line 1862 "parse.y"
06616 { ifndef_ripper((yyval.id) = '`'); ;}
06617 break;
06618
06619 case 191:
06620
06621
06622 #line 1880 "parse.y"
06623 {
06624
06625 value_expr((yyvsp[(3) - (3)].node));
06626 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06627
06628
06629
06630 ;}
06631 break;
06632
06633 case 192:
06634
06635
06636 #line 1889 "parse.y"
06637 {
06638
06639 value_expr((yyvsp[(3) - (5)].node));
06640 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06641 (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
06642
06643
06644
06645 ;}
06646 break;
06647
06648 case 193:
06649
06650
06651 #line 1899 "parse.y"
06652 {
06653
06654 value_expr((yyvsp[(3) - (3)].node));
06655 if ((yyvsp[(1) - (3)].node)) {
06656 ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
06657 if ((yyvsp[(2) - (3)].id) == tOROP) {
06658 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06659 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
06660 if (is_asgn_or_id(vid)) {
06661 (yyval.node)->nd_aid = vid;
06662 }
06663 }
06664 else if ((yyvsp[(2) - (3)].id) == tANDOP) {
06665 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06666 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
06667 }
06668 else {
06669 (yyval.node) = (yyvsp[(1) - (3)].node);
06670 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
06671 }
06672 }
06673 else {
06674 (yyval.node) = NEW_BEGIN(0);
06675 }
06676
06677
06678
06679 ;}
06680 break;
06681
06682 case 194:
06683
06684
06685 #line 1928 "parse.y"
06686 {
06687
06688 value_expr((yyvsp[(3) - (5)].node));
06689 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06690 if ((yyvsp[(1) - (5)].node)) {
06691 ID vid = (yyvsp[(1) - (5)].node)->nd_vid;
06692 if ((yyvsp[(2) - (5)].id) == tOROP) {
06693 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06694 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (5)].node));
06695 if (is_asgn_or_id(vid)) {
06696 (yyval.node)->nd_aid = vid;
06697 }
06698 }
06699 else if ((yyvsp[(2) - (5)].id) == tANDOP) {
06700 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06701 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (5)].node));
06702 }
06703 else {
06704 (yyval.node) = (yyvsp[(1) - (5)].node);
06705 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (5)].id), NEW_LIST((yyvsp[(3) - (5)].node)));
06706 }
06707 }
06708 else {
06709 (yyval.node) = NEW_BEGIN(0);
06710 }
06711
06712
06713
06714
06715 ;}
06716 break;
06717
06718 case 195:
06719
06720
06721 #line 1959 "parse.y"
06722 {
06723
06724 NODE *args;
06725
06726 value_expr((yyvsp[(6) - (6)].node));
06727 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
06728 if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
06729 args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06730 }
06731 else {
06732 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06733 }
06734 if ((yyvsp[(5) - (6)].id) == tOROP) {
06735 (yyvsp[(5) - (6)].id) = 0;
06736 }
06737 else if ((yyvsp[(5) - (6)].id) == tANDOP) {
06738 (yyvsp[(5) - (6)].id) = 1;
06739 }
06740 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
06741 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
06742
06743
06744
06745
06746 ;}
06747 break;
06748
06749 case 196:
06750
06751
06752 #line 1985 "parse.y"
06753 {
06754
06755 value_expr((yyvsp[(5) - (5)].node));
06756 if ((yyvsp[(4) - (5)].id) == tOROP) {
06757 (yyvsp[(4) - (5)].id) = 0;
06758 }
06759 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06760 (yyvsp[(4) - (5)].id) = 1;
06761 }
06762 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06763 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06764
06765
06766
06767
06768 ;}
06769 break;
06770
06771 case 197:
06772
06773
06774 #line 2002 "parse.y"
06775 {
06776
06777 value_expr((yyvsp[(5) - (5)].node));
06778 if ((yyvsp[(4) - (5)].id) == tOROP) {
06779 (yyvsp[(4) - (5)].id) = 0;
06780 }
06781 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06782 (yyvsp[(4) - (5)].id) = 1;
06783 }
06784 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06785 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06786
06787
06788
06789
06790 ;}
06791 break;
06792
06793 case 198:
06794
06795
06796 #line 2019 "parse.y"
06797 {
06798
06799 value_expr((yyvsp[(5) - (5)].node));
06800 if ((yyvsp[(4) - (5)].id) == tOROP) {
06801 (yyvsp[(4) - (5)].id) = 0;
06802 }
06803 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06804 (yyvsp[(4) - (5)].id) = 1;
06805 }
06806 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06807 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06808
06809
06810
06811
06812 ;}
06813 break;
06814
06815 case 199:
06816
06817
06818 #line 2036 "parse.y"
06819 {
06820
06821 yyerror("constant re-assignment");
06822 (yyval.node) = NEW_BEGIN(0);
06823
06824
06825
06826
06827
06828 ;}
06829 break;
06830
06831 case 200:
06832
06833
06834 #line 2047 "parse.y"
06835 {
06836
06837 yyerror("constant re-assignment");
06838 (yyval.node) = NEW_BEGIN(0);
06839
06840
06841
06842
06843
06844 ;}
06845 break;
06846
06847 case 201:
06848
06849
06850 #line 2058 "parse.y"
06851 {
06852
06853 rb_backref_error((yyvsp[(1) - (3)].node));
06854 (yyval.node) = NEW_BEGIN(0);
06855
06856
06857
06858
06859
06860 ;}
06861 break;
06862
06863 case 202:
06864
06865
06866 #line 2069 "parse.y"
06867 {
06868
06869 value_expr((yyvsp[(1) - (3)].node));
06870 value_expr((yyvsp[(3) - (3)].node));
06871 (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06872 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
06873 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
06874 deferred_nodes = list_append(deferred_nodes, (yyval.node));
06875 }
06876
06877
06878
06879 ;}
06880 break;
06881
06882 case 203:
06883
06884
06885 #line 2083 "parse.y"
06886 {
06887
06888 value_expr((yyvsp[(1) - (3)].node));
06889 value_expr((yyvsp[(3) - (3)].node));
06890 (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06891 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
06892 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
06893 deferred_nodes = list_append(deferred_nodes, (yyval.node));
06894 }
06895
06896
06897
06898 ;}
06899 break;
06900
06901 case 204:
06902
06903
06904 #line 2097 "parse.y"
06905 {
06906
06907 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
06908
06909
06910
06911 ;}
06912 break;
06913
06914 case 205:
06915
06916
06917 #line 2105 "parse.y"
06918 {
06919
06920 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
06921
06922
06923
06924 ;}
06925 break;
06926
06927 case 206:
06928
06929
06930 #line 2113 "parse.y"
06931 {
06932
06933 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
06934
06935
06936
06937 ;}
06938 break;
06939
06940 case 207:
06941
06942
06943 #line 2121 "parse.y"
06944 {
06945
06946 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
06947
06948
06949
06950 ;}
06951 break;
06952
06953 case 208:
06954
06955
06956 #line 2129 "parse.y"
06957 {
06958
06959 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
06960
06961
06962
06963 ;}
06964 break;
06965
06966 case 209:
06967
06968
06969 #line 2137 "parse.y"
06970 {
06971
06972 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
06973
06974
06975
06976 ;}
06977 break;
06978
06979 case 210:
06980
06981
06982 #line 2145 "parse.y"
06983 {
06984
06985 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
06986
06987
06988
06989
06990 ;}
06991 break;
06992
06993 case 211:
06994
06995
06996 #line 2154 "parse.y"
06997 {
06998
06999 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
07000
07001
07002
07003
07004 ;}
07005 break;
07006
07007 case 212:
07008
07009
07010 #line 2163 "parse.y"
07011 {
07012
07013 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
07014
07015
07016
07017 ;}
07018 break;
07019
07020 case 213:
07021
07022
07023 #line 2171 "parse.y"
07024 {
07025
07026 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
07027
07028
07029
07030 ;}
07031 break;
07032
07033 case 214:
07034
07035
07036 #line 2179 "parse.y"
07037 {
07038
07039 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
07040
07041
07042
07043 ;}
07044 break;
07045
07046 case 215:
07047
07048
07049 #line 2187 "parse.y"
07050 {
07051
07052 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
07053
07054
07055
07056 ;}
07057 break;
07058
07059 case 216:
07060
07061
07062 #line 2195 "parse.y"
07063 {
07064
07065 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
07066
07067
07068
07069 ;}
07070 break;
07071
07072 case 217:
07073
07074
07075 #line 2203 "parse.y"
07076 {
07077
07078 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
07079
07080
07081
07082 ;}
07083 break;
07084
07085 case 218:
07086
07087
07088 #line 2211 "parse.y"
07089 {
07090
07091 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
07092
07093
07094
07095 ;}
07096 break;
07097
07098 case 219:
07099
07100
07101 #line 2219 "parse.y"
07102 {
07103
07104 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
07105
07106
07107
07108 ;}
07109 break;
07110
07111 case 220:
07112
07113
07114 #line 2227 "parse.y"
07115 {
07116
07117 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
07118
07119
07120
07121 ;}
07122 break;
07123
07124 case 221:
07125
07126
07127 #line 2235 "parse.y"
07128 {
07129
07130 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
07131
07132
07133
07134 ;}
07135 break;
07136
07137 case 222:
07138
07139
07140 #line 2243 "parse.y"
07141 {
07142
07143 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
07144
07145
07146
07147 ;}
07148 break;
07149
07150 case 223:
07151
07152
07153 #line 2251 "parse.y"
07154 {
07155
07156 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
07157
07158
07159
07160 ;}
07161 break;
07162
07163 case 224:
07164
07165
07166 #line 2259 "parse.y"
07167 {
07168
07169 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
07170
07171
07172
07173 ;}
07174 break;
07175
07176 case 225:
07177
07178
07179 #line 2267 "parse.y"
07180 {
07181
07182 (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07183 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && TYPE((yyvsp[(1) - (3)].node)->nd_lit) == T_REGEXP) {
07184 (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
07185 }
07186
07187
07188
07189 ;}
07190 break;
07191
07192 case 226:
07193
07194
07195 #line 2278 "parse.y"
07196 {
07197
07198 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
07199
07200
07201
07202 ;}
07203 break;
07204
07205 case 227:
07206
07207
07208 #line 2286 "parse.y"
07209 {
07210
07211 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
07212
07213
07214
07215 ;}
07216 break;
07217
07218 case 228:
07219
07220
07221 #line 2294 "parse.y"
07222 {
07223
07224 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
07225
07226
07227
07228 ;}
07229 break;
07230
07231 case 229:
07232
07233
07234 #line 2302 "parse.y"
07235 {
07236
07237 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
07238
07239
07240
07241 ;}
07242 break;
07243
07244 case 230:
07245
07246
07247 #line 2310 "parse.y"
07248 {
07249
07250 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
07251
07252
07253
07254 ;}
07255 break;
07256
07257 case 231:
07258
07259
07260 #line 2318 "parse.y"
07261 {
07262
07263 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07264
07265
07266
07267 ;}
07268 break;
07269
07270 case 232:
07271
07272
07273 #line 2326 "parse.y"
07274 {
07275
07276 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07277
07278
07279
07280 ;}
07281 break;
07282
07283 case 233:
07284
07285
07286 #line 2333 "parse.y"
07287 {in_defined = 1;;}
07288 break;
07289
07290 case 234:
07291
07292
07293 #line 2334 "parse.y"
07294 {
07295
07296 in_defined = 0;
07297 (yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node));
07298
07299
07300
07301
07302 ;}
07303 break;
07304
07305 case 235:
07306
07307
07308 #line 2344 "parse.y"
07309 {
07310
07311 value_expr((yyvsp[(1) - (6)].node));
07312 (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
07313 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
07314
07315
07316
07317 ;}
07318 break;
07319
07320 case 236:
07321
07322
07323 #line 2354 "parse.y"
07324 {
07325 (yyval.node) = (yyvsp[(1) - (1)].node);
07326 ;}
07327 break;
07328
07329 case 237:
07330
07331
07332 #line 2360 "parse.y"
07333 {
07334
07335 value_expr((yyvsp[(1) - (1)].node));
07336 (yyval.node) = (yyvsp[(1) - (1)].node);
07337 if (!(yyval.node)) (yyval.node) = NEW_NIL();
07338
07339
07340
07341 ;}
07342 break;
07343
07344 case 239:
07345
07346
07347 #line 2373 "parse.y"
07348 {
07349 (yyval.node) = (yyvsp[(1) - (2)].node);
07350 ;}
07351 break;
07352
07353 case 240:
07354
07355
07356 #line 2377 "parse.y"
07357 {
07358
07359 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07360
07361
07362
07363 ;}
07364 break;
07365
07366 case 241:
07367
07368
07369 #line 2385 "parse.y"
07370 {
07371
07372 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07373
07374
07375
07376 ;}
07377 break;
07378
07379 case 242:
07380
07381
07382 #line 2395 "parse.y"
07383 {
07384
07385 (yyval.node) = (yyvsp[(2) - (3)].node);
07386
07387
07388
07389 ;}
07390 break;
07391
07392 case 247:
07393
07394
07395 #line 2413 "parse.y"
07396 {
07397
07398 value_expr((yyvsp[(1) - (1)].node));
07399 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07400
07401
07402
07403 ;}
07404 break;
07405
07406 case 248:
07407
07408
07409 #line 2422 "parse.y"
07410 {
07411
07412 (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
07413
07414
07415
07416 ;}
07417 break;
07418
07419 case 249:
07420
07421
07422 #line 2430 "parse.y"
07423 {
07424
07425 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07426 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
07427
07428
07429
07430
07431 ;}
07432 break;
07433
07434 case 250:
07435
07436
07437 #line 2440 "parse.y"
07438 {
07439
07440 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07441 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
07442
07443
07444
07445 ;}
07446 break;
07447
07448 case 252:
07449
07450
07451 #line 2457 "parse.y"
07452 {
07453 (yyval.val) = cmdarg_stack;
07454 CMDARG_PUSH(1);
07455 ;}
07456 break;
07457
07458 case 253:
07459
07460
07461 #line 2462 "parse.y"
07462 {
07463
07464 cmdarg_stack = (yyvsp[(1) - (2)].val);
07465 (yyval.node) = (yyvsp[(2) - (2)].node);
07466 ;}
07467 break;
07468
07469 case 254:
07470
07471
07472 #line 2470 "parse.y"
07473 {
07474
07475 (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
07476
07477
07478
07479 ;}
07480 break;
07481
07482 case 255:
07483
07484
07485 #line 2480 "parse.y"
07486 {
07487 (yyval.node) = (yyvsp[(2) - (2)].node);
07488 ;}
07489 break;
07490
07491 case 256:
07492
07493
07494 #line 2484 "parse.y"
07495 {
07496 (yyval.node) = 0;
07497 ;}
07498 break;
07499
07500 case 257:
07501
07502
07503 #line 2488 "parse.y"
07504 {
07505 (yyval.node) = 0;
07506 ;}
07507 break;
07508
07509 case 258:
07510
07511
07512 #line 2494 "parse.y"
07513 {
07514
07515 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07516
07517
07518
07519 ;}
07520 break;
07521
07522 case 259:
07523
07524
07525 #line 2502 "parse.y"
07526 {
07527
07528 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07529
07530
07531
07532 ;}
07533 break;
07534
07535 case 260:
07536
07537
07538 #line 2510 "parse.y"
07539 {
07540
07541 NODE *n1;
07542 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07543 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07544 }
07545 else {
07546 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07547 }
07548
07549
07550
07551 ;}
07552 break;
07553
07554 case 261:
07555
07556
07557 #line 2524 "parse.y"
07558 {
07559
07560 NODE *n1;
07561 if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07562 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07563 }
07564 else {
07565 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07566 }
07567
07568
07569
07570 ;}
07571 break;
07572
07573 case 262:
07574
07575
07576 #line 2540 "parse.y"
07577 {
07578
07579 NODE *n1;
07580 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07581 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07582 }
07583 else {
07584 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07585 }
07586
07587
07588
07589 ;}
07590 break;
07591
07592 case 263:
07593
07594
07595 #line 2554 "parse.y"
07596 {
07597
07598 NODE *n1;
07599 if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
07600 (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07601 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07602 }
07603 else {
07604 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07605 }
07606
07607
07608
07609 ;}
07610 break;
07611
07612 case 264:
07613
07614
07615 #line 2569 "parse.y"
07616 {
07617
07618 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07619
07620
07621
07622 ;}
07623 break;
07624
07625 case 273:
07626
07627
07628 #line 2587 "parse.y"
07629 {
07630
07631 (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
07632
07633
07634
07635 ;}
07636 break;
07637
07638 case 274:
07639
07640
07641 #line 2595 "parse.y"
07642 {
07643
07644 (yyval.num) = ruby_sourceline;
07645
07646
07647 ;}
07648 break;
07649
07650 case 275:
07651
07652
07653 #line 2603 "parse.y"
07654 {
07655
07656 if ((yyvsp[(3) - (4)].node) == NULL) {
07657 (yyval.node) = NEW_NIL();
07658 }
07659 else {
07660 if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
07661 nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
07662 nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
07663 (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
07664 }
07665 nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
07666
07667
07668
07669 ;}
07670 break;
07671
07672 case 276:
07673
07674
07675 #line 2619 "parse.y"
07676 {lex_state = EXPR_ENDARG;;}
07677 break;
07678
07679 case 277:
07680
07681
07682 #line 2620 "parse.y"
07683 {
07684 rb_warning0("(...) interpreted as grouped expression");
07685
07686 (yyval.node) = (yyvsp[(2) - (4)].node);
07687
07688
07689
07690 ;}
07691 break;
07692
07693 case 278:
07694
07695
07696 #line 2629 "parse.y"
07697 {
07698
07699 (yyval.node) = (yyvsp[(2) - (3)].node);
07700
07701
07702
07703 ;}
07704 break;
07705
07706 case 279:
07707
07708
07709 #line 2637 "parse.y"
07710 {
07711
07712 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
07713
07714
07715
07716 ;}
07717 break;
07718
07719 case 280:
07720
07721
07722 #line 2645 "parse.y"
07723 {
07724
07725 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
07726
07727
07728
07729 ;}
07730 break;
07731
07732 case 281:
07733
07734
07735 #line 2653 "parse.y"
07736 {
07737
07738 if ((yyvsp[(2) - (3)].node) == 0) {
07739 (yyval.node) = NEW_ZARRAY();
07740 }
07741 else {
07742 (yyval.node) = (yyvsp[(2) - (3)].node);
07743 }
07744
07745
07746
07747 ;}
07748 break;
07749
07750 case 282:
07751
07752
07753 #line 2666 "parse.y"
07754 {
07755
07756 (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node));
07757
07758
07759
07760 ;}
07761 break;
07762
07763 case 283:
07764
07765
07766 #line 2674 "parse.y"
07767 {
07768
07769 (yyval.node) = NEW_RETURN(0);
07770
07771
07772
07773 ;}
07774 break;
07775
07776 case 284:
07777
07778
07779 #line 2682 "parse.y"
07780 {
07781
07782 (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
07783
07784
07785
07786 ;}
07787 break;
07788
07789 case 285:
07790
07791
07792 #line 2690 "parse.y"
07793 {
07794
07795 (yyval.node) = NEW_YIELD(0, Qfalse);
07796
07797
07798
07799 ;}
07800 break;
07801
07802 case 286:
07803
07804
07805 #line 2698 "parse.y"
07806 {
07807
07808 (yyval.node) = NEW_YIELD(0, Qfalse);
07809
07810
07811
07812 ;}
07813 break;
07814
07815 case 287:
07816
07817
07818 #line 2705 "parse.y"
07819 {in_defined = 1;;}
07820 break;
07821
07822 case 288:
07823
07824
07825 #line 2706 "parse.y"
07826 {
07827
07828 in_defined = 0;
07829 (yyval.node) = NEW_DEFINED((yyvsp[(5) - (6)].node));
07830
07831
07832
07833
07834 ;}
07835 break;
07836
07837 case 289:
07838
07839
07840 #line 2716 "parse.y"
07841 {
07842
07843 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!');
07844
07845
07846
07847 ;}
07848 break;
07849
07850 case 290:
07851
07852
07853 #line 2724 "parse.y"
07854 {
07855
07856 (yyval.node) = call_uni_op(cond(NEW_NIL()), '!');
07857
07858
07859
07860 ;}
07861 break;
07862
07863 case 291:
07864
07865
07866 #line 2732 "parse.y"
07867 {
07868
07869 (yyvsp[(2) - (2)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (2)].id), 0);
07870 (yyval.node) = (yyvsp[(2) - (2)].node);
07871 fixpos((yyvsp[(2) - (2)].node)->nd_iter, (yyvsp[(2) - (2)].node));
07872
07873
07874
07875
07876 ;}
07877 break;
07878
07879 case 293:
07880
07881
07882 #line 2744 "parse.y"
07883 {
07884
07885 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
07886 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
07887 (yyval.node) = (yyvsp[(2) - (2)].node);
07888 fixpos((yyval.node), (yyvsp[(1) - (2)].node));
07889
07890
07891
07892 ;}
07893 break;
07894
07895 case 294:
07896
07897
07898 #line 2755 "parse.y"
07899 {
07900 (yyval.node) = (yyvsp[(2) - (2)].node);
07901 ;}
07902 break;
07903
07904 case 295:
07905
07906
07907 #line 2762 "parse.y"
07908 {
07909
07910 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
07911 fixpos((yyval.node), (yyvsp[(2) - (6)].node));
07912
07913
07914
07915 ;}
07916 break;
07917
07918 case 296:
07919
07920
07921 #line 2774 "parse.y"
07922 {
07923
07924 (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
07925 fixpos((yyval.node), (yyvsp[(2) - (6)].node));
07926
07927
07928
07929 ;}
07930 break;
07931
07932 case 297:
07933
07934
07935 #line 2782 "parse.y"
07936 {COND_PUSH(1);;}
07937 break;
07938
07939 case 298:
07940
07941
07942 #line 2782 "parse.y"
07943 {COND_POP();;}
07944 break;
07945
07946 case 299:
07947
07948
07949 #line 2785 "parse.y"
07950 {
07951
07952 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
07953 fixpos((yyval.node), (yyvsp[(3) - (7)].node));
07954
07955
07956
07957 ;}
07958 break;
07959
07960 case 300:
07961
07962
07963 #line 2793 "parse.y"
07964 {COND_PUSH(1);;}
07965 break;
07966
07967 case 301:
07968
07969
07970 #line 2793 "parse.y"
07971 {COND_POP();;}
07972 break;
07973
07974 case 302:
07975
07976
07977 #line 2796 "parse.y"
07978 {
07979
07980 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
07981 fixpos((yyval.node), (yyvsp[(3) - (7)].node));
07982
07983
07984
07985 ;}
07986 break;
07987
07988 case 303:
07989
07990
07991 #line 2807 "parse.y"
07992 {
07993
07994 (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
07995 fixpos((yyval.node), (yyvsp[(2) - (5)].node));
07996
07997
07998
07999 ;}
08000 break;
08001
08002 case 304:
08003
08004
08005 #line 2816 "parse.y"
08006 {
08007
08008 (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
08009
08010
08011
08012 ;}
08013 break;
08014
08015 case 305:
08016
08017
08018 #line 2824 "parse.y"
08019 {COND_PUSH(1);;}
08020 break;
08021
08022 case 306:
08023
08024
08025 #line 2826 "parse.y"
08026 {COND_POP();;}
08027 break;
08028
08029 case 307:
08030
08031
08032 #line 2829 "parse.y"
08033 {
08034
08035
08036
08037
08038
08039
08040
08041
08042
08043
08044 ID id = internal_id();
08045 ID *tbl = ALLOC_N(ID, 2);
08046 NODE *m = NEW_ARGS_AUX(0, 0);
08047 NODE *args, *scope;
08048
08049 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) {
08050
08051
08052
08053
08054 NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
08055 NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
08056 m->nd_next = block_append(
08057 NEW_IF(
08058 NEW_NODE(NODE_AND,
08059 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("length"), 0),
08060 rb_intern("=="), one),
08061 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero),
08062 rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
08063 0),
08064 NEW_DASGN_CURR(id,
08065 NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero)),
08066 0),
08067 node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id)));
08068
08069 args = new_args(m, 0, id, 0, 0);
08070 }
08071 else {
08072 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN ||
08073 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN ||
08074 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) {
08075 (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
08076 m->nd_plen = 1;
08077 m->nd_next = (yyvsp[(2) - (9)].node);
08078 args = new_args(m, 0, 0, 0, 0);
08079 }
08080 else {
08081 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
08082 args = new_args(m, 0, id, 0, 0);
08083 }
08084 }
08085 scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
08086 tbl[0] = 1; tbl[1] = id;
08087 (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
08088 fixpos((yyval.node), (yyvsp[(2) - (9)].node));
08089
08090
08091
08092 ;}
08093 break;
08094
08095 case 308:
08096
08097
08098 #line 2890 "parse.y"
08099 {
08100 if (in_def || in_single)
08101 yyerror("class definition in method body");
08102 local_push(0);
08103
08104 (yyval.num) = ruby_sourceline;
08105
08106
08107 ;}
08108 break;
08109
08110 case 309:
08111
08112
08113 #line 2901 "parse.y"
08114 {
08115
08116 (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
08117 nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
08118
08119
08120
08121 local_pop();
08122 ;}
08123 break;
08124
08125 case 310:
08126
08127
08128 #line 2911 "parse.y"
08129 {
08130 (yyval.num) = in_def;
08131 in_def = 0;
08132 ;}
08133 break;
08134
08135 case 311:
08136
08137
08138 #line 2916 "parse.y"
08139 {
08140 (yyval.num) = in_single;
08141 in_single = 0;
08142 local_push(0);
08143 ;}
08144 break;
08145
08146 case 312:
08147
08148
08149 #line 2923 "parse.y"
08150 {
08151
08152 (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
08153 fixpos((yyval.node), (yyvsp[(3) - (8)].node));
08154
08155
08156
08157 local_pop();
08158 in_def = (yyvsp[(4) - (8)].num);
08159 in_single = (yyvsp[(6) - (8)].num);
08160 ;}
08161 break;
08162
08163 case 313:
08164
08165
08166 #line 2935 "parse.y"
08167 {
08168 if (in_def || in_single)
08169 yyerror("module definition in method body");
08170 local_push(0);
08171
08172 (yyval.num) = ruby_sourceline;
08173
08174
08175 ;}
08176 break;
08177
08178 case 314:
08179
08180
08181 #line 2946 "parse.y"
08182 {
08183
08184 (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08185 nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
08186
08187
08188
08189 local_pop();
08190 ;}
08191 break;
08192
08193 case 315:
08194
08195
08196 #line 2956 "parse.y"
08197 {
08198 (yyval.id) = cur_mid;
08199 cur_mid = (yyvsp[(2) - (2)].id);
08200 in_def++;
08201 local_push(0);
08202 ;}
08203 break;
08204
08205 case 316:
08206
08207
08208 #line 2965 "parse.y"
08209 {
08210
08211 NODE *body = remove_begin((yyvsp[(5) - (6)].node));
08212 reduce_nodes(&body);
08213 (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
08214 nd_set_line((yyval.node), (yyvsp[(1) - (6)].num));
08215
08216
08217
08218 local_pop();
08219 in_def--;
08220 cur_mid = (yyvsp[(3) - (6)].id);
08221 ;}
08222 break;
08223
08224 case 317:
08225
08226
08227 #line 2978 "parse.y"
08228 {lex_state = EXPR_FNAME;;}
08229 break;
08230
08231 case 318:
08232
08233
08234 #line 2979 "parse.y"
08235 {
08236 in_single++;
08237 lex_state = EXPR_ENDFN;
08238 local_push(0);
08239 ;}
08240 break;
08241
08242 case 319:
08243
08244
08245 #line 2987 "parse.y"
08246 {
08247
08248 NODE *body = remove_begin((yyvsp[(8) - (9)].node));
08249 reduce_nodes(&body);
08250 (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
08251 nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
08252
08253
08254
08255 local_pop();
08256 in_single--;
08257 ;}
08258 break;
08259
08260 case 320:
08261
08262
08263 #line 3000 "parse.y"
08264 {
08265
08266 (yyval.node) = NEW_BREAK(0);
08267
08268
08269
08270 ;}
08271 break;
08272
08273 case 321:
08274
08275
08276 #line 3008 "parse.y"
08277 {
08278
08279 (yyval.node) = NEW_NEXT(0);
08280
08281
08282
08283 ;}
08284 break;
08285
08286 case 322:
08287
08288
08289 #line 3016 "parse.y"
08290 {
08291
08292 (yyval.node) = NEW_REDO();
08293
08294
08295
08296 ;}
08297 break;
08298
08299 case 323:
08300
08301
08302 #line 3024 "parse.y"
08303 {
08304
08305 (yyval.node) = NEW_RETRY();
08306
08307
08308
08309 ;}
08310 break;
08311
08312 case 324:
08313
08314
08315 #line 3034 "parse.y"
08316 {
08317
08318 value_expr((yyvsp[(1) - (1)].node));
08319 (yyval.node) = (yyvsp[(1) - (1)].node);
08320 if (!(yyval.node)) (yyval.node) = NEW_NIL();
08321
08322
08323
08324 ;}
08325 break;
08326
08327 case 325:
08328
08329
08330 #line 3046 "parse.y"
08331 {
08332 token_info_push("begin");
08333 ;}
08334 break;
08335
08336 case 326:
08337
08338
08339 #line 3052 "parse.y"
08340 {
08341 token_info_push("if");
08342 ;}
08343 break;
08344
08345 case 327:
08346
08347
08348 #line 3058 "parse.y"
08349 {
08350 token_info_push("unless");
08351 ;}
08352 break;
08353
08354 case 328:
08355
08356
08357 #line 3064 "parse.y"
08358 {
08359 token_info_push("while");
08360 ;}
08361 break;
08362
08363 case 329:
08364
08365
08366 #line 3070 "parse.y"
08367 {
08368 token_info_push("until");
08369 ;}
08370 break;
08371
08372 case 330:
08373
08374
08375 #line 3076 "parse.y"
08376 {
08377 token_info_push("case");
08378 ;}
08379 break;
08380
08381 case 331:
08382
08383
08384 #line 3082 "parse.y"
08385 {
08386 token_info_push("for");
08387 ;}
08388 break;
08389
08390 case 332:
08391
08392
08393 #line 3088 "parse.y"
08394 {
08395 token_info_push("class");
08396 ;}
08397 break;
08398
08399 case 333:
08400
08401
08402 #line 3094 "parse.y"
08403 {
08404 token_info_push("module");
08405 ;}
08406 break;
08407
08408 case 334:
08409
08410
08411 #line 3100 "parse.y"
08412 {
08413 token_info_push("def");
08414
08415 (yyval.num) = ruby_sourceline;
08416
08417
08418 ;}
08419 break;
08420
08421 case 335:
08422
08423
08424 #line 3110 "parse.y"
08425 {
08426 token_info_pop("end");
08427 ;}
08428 break;
08429
08430 case 342:
08431
08432
08433 #line 3140 "parse.y"
08434 {
08435
08436 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
08437 fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08438
08439
08440
08441 ;}
08442 break;
08443
08444 case 344:
08445
08446
08447 #line 3152 "parse.y"
08448 {
08449
08450 (yyval.node) = (yyvsp[(2) - (2)].node);
08451
08452
08453
08454 ;}
08455 break;
08456
08457 case 347:
08458
08459
08460 #line 3166 "parse.y"
08461 {
08462 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
08463
08464
08465
08466
08467 ;}
08468 break;
08469
08470 case 348:
08471
08472
08473 #line 3174 "parse.y"
08474 {
08475
08476 (yyval.node) = (yyvsp[(2) - (3)].node);
08477
08478
08479
08480 ;}
08481 break;
08482
08483 case 349:
08484
08485
08486 #line 3184 "parse.y"
08487 {
08488
08489 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
08490
08491
08492
08493 ;}
08494 break;
08495
08496 case 350:
08497
08498
08499 #line 3192 "parse.y"
08500 {
08501
08502 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
08503
08504
08505
08506 ;}
08507 break;
08508
08509 case 351:
08510
08511
08512 #line 3202 "parse.y"
08513 {
08514
08515 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
08516
08517
08518
08519 ;}
08520 break;
08521
08522 case 352:
08523
08524
08525 #line 3210 "parse.y"
08526 {
08527 (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
08528
08529 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
08530
08531
08532
08533 ;}
08534 break;
08535
08536 case 353:
08537
08538
08539 #line 3219 "parse.y"
08540 {
08541 (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
08542
08543 (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
08544
08545
08546
08547 ;}
08548 break;
08549
08550 case 354:
08551
08552
08553 #line 3228 "parse.y"
08554 {
08555
08556 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
08557
08558
08559
08560 ;}
08561 break;
08562
08563 case 355:
08564
08565
08566 #line 3236 "parse.y"
08567 {
08568
08569 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
08570
08571
08572
08573 ;}
08574 break;
08575
08576 case 356:
08577
08578
08579 #line 3244 "parse.y"
08580 {
08581 (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
08582
08583 (yyval.node) = NEW_MASGN(0, (yyval.node));
08584
08585
08586
08587 ;}
08588 break;
08589
08590 case 357:
08591
08592
08593 #line 3253 "parse.y"
08594 {
08595 (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
08596
08597 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
08598
08599
08600
08601
08602
08603
08604 ;}
08605 break;
08606
08607 case 358:
08608
08609
08610 #line 3265 "parse.y"
08611 {
08612
08613 (yyval.node) = NEW_MASGN(0, -1);
08614
08615
08616
08617 ;}
08618 break;
08619
08620 case 359:
08621
08622
08623 #line 3273 "parse.y"
08624 {
08625
08626 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
08627
08628
08629
08630 ;}
08631 break;
08632
08633 case 360:
08634
08635
08636 #line 3283 "parse.y"
08637 {
08638
08639 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
08640
08641
08642
08643 ;}
08644 break;
08645
08646 case 361:
08647
08648
08649 #line 3291 "parse.y"
08650 {
08651
08652 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
08653
08654
08655
08656 ;}
08657 break;
08658
08659 case 362:
08660
08661
08662 #line 3299 "parse.y"
08663 {
08664
08665 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
08666
08667
08668
08669 ;}
08670 break;
08671
08672 case 363:
08673
08674
08675 #line 3307 "parse.y"
08676 {
08677
08678 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08679
08680
08681
08682 ;}
08683 break;
08684
08685 case 364:
08686
08687
08688 #line 3315 "parse.y"
08689 {
08690
08691 (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08692
08693
08694
08695 ;}
08696 break;
08697
08698 case 365:
08699
08700
08701 #line 3323 "parse.y"
08702 {
08703
08704 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 1, 0, 0);
08705
08706
08707
08708
08709 ;}
08710 break;
08711
08712 case 366:
08713
08714
08715 #line 3332 "parse.y"
08716 {
08717
08718 (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08719
08720
08721
08722 ;}
08723 break;
08724
08725 case 367:
08726
08727
08728 #line 3340 "parse.y"
08729 {
08730
08731 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
08732
08733
08734
08735 ;}
08736 break;
08737
08738 case 368:
08739
08740
08741 #line 3348 "parse.y"
08742 {
08743
08744 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08745
08746
08747
08748 ;}
08749 break;
08750
08751 case 369:
08752
08753
08754 #line 3356 "parse.y"
08755 {
08756
08757 (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08758
08759
08760
08761 ;}
08762 break;
08763
08764 case 370:
08765
08766
08767 #line 3364 "parse.y"
08768 {
08769
08770 (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
08771
08772
08773
08774 ;}
08775 break;
08776
08777 case 371:
08778
08779
08780 #line 3372 "parse.y"
08781 {
08782
08783 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08784
08785
08786
08787 ;}
08788 break;
08789
08790 case 372:
08791
08792
08793 #line 3380 "parse.y"
08794 {
08795
08796 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
08797
08798
08799
08800 ;}
08801 break;
08802
08803 case 373:
08804
08805
08806 #line 3388 "parse.y"
08807 {
08808
08809 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08810
08811
08812
08813 ;}
08814 break;
08815
08816 case 374:
08817
08818
08819 #line 3396 "parse.y"
08820 {
08821
08822 (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
08823
08824
08825
08826 ;}
08827 break;
08828
08829 case 376:
08830
08831
08832 #line 3407 "parse.y"
08833 {
08834 command_start = TRUE;
08835 ;}
08836 break;
08837
08838 case 377:
08839
08840
08841 #line 3413 "parse.y"
08842 {
08843
08844 (yyval.node) = 0;
08845
08846
08847
08848
08849 ;}
08850 break;
08851
08852 case 378:
08853
08854
08855 #line 3422 "parse.y"
08856 {
08857
08858 (yyval.node) = 0;
08859
08860
08861
08862
08863 ;}
08864 break;
08865
08866 case 379:
08867
08868
08869 #line 3431 "parse.y"
08870 {
08871
08872 (yyval.node) = (yyvsp[(2) - (4)].node);
08873
08874
08875
08876 ;}
08877 break;
08878
08879 case 381:
08880
08881
08882 #line 3443 "parse.y"
08883 {
08884
08885 (yyval.node) = 0;
08886
08887
08888
08889 ;}
08890 break;
08891
08892 case 384:
08893
08894
08895 #line 3469 "parse.y"
08896 {
08897 new_bv(get_id((yyvsp[(1) - (1)].id)));
08898
08899
08900
08901
08902 ;}
08903 break;
08904
08905 case 385:
08906
08907
08908 #line 3477 "parse.y"
08909 {
08910 (yyval.node) = 0;
08911 ;}
08912 break;
08913
08914 case 386:
08915
08916
08917 #line 3482 "parse.y"
08918 {
08919 (yyval.vars) = dyna_push();
08920 ;}
08921 break;
08922
08923 case 387:
08924
08925
08926 #line 3485 "parse.y"
08927 {
08928 (yyval.num) = lpar_beg;
08929 lpar_beg = ++paren_nest;
08930 ;}
08931 break;
08932
08933 case 388:
08934
08935
08936 #line 3491 "parse.y"
08937 {
08938 lpar_beg = (yyvsp[(2) - (4)].num);
08939
08940 (yyval.node) = (yyvsp[(3) - (4)].node);
08941 (yyval.node)->nd_body = NEW_SCOPE((yyvsp[(3) - (4)].node)->nd_head, (yyvsp[(4) - (4)].node));
08942
08943
08944
08945 dyna_pop((yyvsp[(1) - (4)].vars));
08946 ;}
08947 break;
08948
08949 case 389:
08950
08951
08952 #line 3504 "parse.y"
08953 {
08954
08955 (yyval.node) = NEW_LAMBDA((yyvsp[(2) - (4)].node));
08956
08957
08958
08959 ;}
08960 break;
08961
08962 case 390:
08963
08964
08965 #line 3512 "parse.y"
08966 {
08967
08968 (yyval.node) = NEW_LAMBDA((yyvsp[(1) - (1)].node));
08969
08970
08971
08972 ;}
08973 break;
08974
08975 case 391:
08976
08977
08978 #line 3522 "parse.y"
08979 {
08980 (yyval.node) = (yyvsp[(2) - (3)].node);
08981 ;}
08982 break;
08983
08984 case 392:
08985
08986
08987 #line 3526 "parse.y"
08988 {
08989 (yyval.node) = (yyvsp[(2) - (3)].node);
08990 ;}
08991 break;
08992
08993 case 393:
08994
08995
08996 #line 3532 "parse.y"
08997 {
08998 (yyvsp[(1) - (1)].vars) = dyna_push();
08999
09000 (yyval.num) = ruby_sourceline;
09001
09002 ;}
09003 break;
09004
09005 case 394:
09006
09007
09008 #line 3541 "parse.y"
09009 {
09010
09011 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09012 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09013
09014
09015
09016 dyna_pop((yyvsp[(1) - (5)].vars));
09017 ;}
09018 break;
09019
09020 case 395:
09021
09022
09023 #line 3553 "parse.y"
09024 {
09025
09026 if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
09027 compile_error(PARSER_ARG "block given to yield");
09028 }
09029 else {
09030 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
09031 }
09032 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
09033 (yyval.node) = (yyvsp[(2) - (2)].node);
09034 fixpos((yyval.node), (yyvsp[(1) - (2)].node));
09035
09036
09037
09038 ;}
09039 break;
09040
09041 case 396:
09042
09043
09044 #line 3569 "parse.y"
09045 {
09046
09047 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09048
09049
09050
09051
09052 ;}
09053 break;
09054
09055 case 397:
09056
09057
09058 #line 3578 "parse.y"
09059 {
09060
09061 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09062
09063
09064
09065
09066 ;}
09067 break;
09068
09069 case 398:
09070
09071
09072 #line 3589 "parse.y"
09073 {
09074
09075 (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
09076 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
09077
09078
09079
09080 ;}
09081 break;
09082
09083 case 399:
09084
09085
09086 #line 3598 "parse.y"
09087 {
09088
09089 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09090 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09091
09092
09093
09094
09095 ;}
09096 break;
09097
09098 case 400:
09099
09100
09101 #line 3608 "parse.y"
09102 {
09103
09104 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09105 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09106
09107
09108
09109
09110 ;}
09111 break;
09112
09113 case 401:
09114
09115
09116 #line 3618 "parse.y"
09117 {
09118
09119 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
09120
09121
09122
09123 ;}
09124 break;
09125
09126 case 402:
09127
09128
09129 #line 3626 "parse.y"
09130 {
09131
09132 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09133 fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09134
09135
09136
09137
09138
09139 ;}
09140 break;
09141
09142 case 403:
09143
09144
09145 #line 3637 "parse.y"
09146 {
09147
09148 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09149 fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09150
09151
09152
09153
09154
09155 ;}
09156 break;
09157
09158 case 404:
09159
09160
09161 #line 3648 "parse.y"
09162 {
09163
09164 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
09165
09166
09167
09168 ;}
09169 break;
09170
09171 case 405:
09172
09173
09174 #line 3656 "parse.y"
09175 {
09176
09177 (yyval.node) = NEW_ZSUPER();
09178
09179
09180
09181 ;}
09182 break;
09183
09184 case 406:
09185
09186
09187 #line 3664 "parse.y"
09188 {
09189
09190 if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
09191 (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
09192 else
09193 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
09194 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09195
09196
09197
09198 ;}
09199 break;
09200
09201 case 407:
09202
09203
09204 #line 3678 "parse.y"
09205 {
09206 (yyvsp[(1) - (1)].vars) = dyna_push();
09207
09208 (yyval.num) = ruby_sourceline;
09209
09210
09211 ;}
09212 break;
09213
09214 case 408:
09215
09216
09217 #line 3687 "parse.y"
09218 {
09219
09220 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09221 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09222
09223
09224
09225 dyna_pop((yyvsp[(1) - (5)].vars));
09226 ;}
09227 break;
09228
09229 case 409:
09230
09231
09232 #line 3697 "parse.y"
09233 {
09234 (yyvsp[(1) - (1)].vars) = dyna_push();
09235
09236 (yyval.num) = ruby_sourceline;
09237
09238
09239 ;}
09240 break;
09241
09242 case 410:
09243
09244
09245 #line 3706 "parse.y"
09246 {
09247
09248 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09249 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09250
09251
09252
09253 dyna_pop((yyvsp[(1) - (5)].vars));
09254 ;}
09255 break;
09256
09257 case 411:
09258
09259
09260 #line 3720 "parse.y"
09261 {
09262
09263 (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09264
09265
09266
09267 ;}
09268 break;
09269
09270 case 414:
09271
09272
09273 #line 3736 "parse.y"
09274 {
09275
09276 if ((yyvsp[(3) - (6)].node)) {
09277 (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
09278 (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
09279 }
09280 (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
09281 fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
09282
09283
09284
09285
09286
09287
09288
09289 ;}
09290 break;
09291
09292 case 416:
09293
09294
09295 #line 3756 "parse.y"
09296 {
09297
09298 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
09299
09300
09301
09302 ;}
09303 break;
09304
09305 case 417:
09306
09307
09308 #line 3764 "parse.y"
09309 {
09310
09311 if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
09312
09313
09314
09315 ;}
09316 break;
09317
09318 case 419:
09319
09320
09321 #line 3775 "parse.y"
09322 {
09323 (yyval.node) = (yyvsp[(2) - (2)].node);
09324 ;}
09325 break;
09326
09327 case 421:
09328
09329
09330 #line 3782 "parse.y"
09331 {
09332
09333 (yyval.node) = (yyvsp[(2) - (2)].node);
09334
09335
09336
09337 ;}
09338 break;
09339
09340 case 424:
09341
09342
09343 #line 3794 "parse.y"
09344 {
09345
09346 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
09347
09348
09349
09350 ;}
09351 break;
09352
09353 case 426:
09354
09355
09356 #line 3805 "parse.y"
09357 {
09358
09359 NODE *node = (yyvsp[(1) - (1)].node);
09360 if (!node) {
09361 node = NEW_STR(STR_NEW0());
09362 }
09363 else {
09364 node = evstr2dstr(node);
09365 }
09366 (yyval.node) = node;
09367
09368
09369
09370 ;}
09371 break;
09372
09373 case 429:
09374
09375
09376 #line 3824 "parse.y"
09377 {
09378
09379 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09380
09381
09382
09383 ;}
09384 break;
09385
09386 case 430:
09387
09388
09389 #line 3834 "parse.y"
09390 {
09391
09392 (yyval.node) = (yyvsp[(2) - (3)].node);
09393
09394
09395
09396 ;}
09397 break;
09398
09399 case 431:
09400
09401
09402 #line 3844 "parse.y"
09403 {
09404
09405 NODE *node = (yyvsp[(2) - (3)].node);
09406 if (!node) {
09407 node = NEW_XSTR(STR_NEW0());
09408 }
09409 else {
09410 switch (nd_type(node)) {
09411 case NODE_STR:
09412 nd_set_type(node, NODE_XSTR);
09413 break;
09414 case NODE_DSTR:
09415 nd_set_type(node, NODE_DXSTR);
09416 break;
09417 default:
09418 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
09419 break;
09420 }
09421 }
09422 (yyval.node) = node;
09423
09424
09425
09426 ;}
09427 break;
09428
09429 case 432:
09430
09431
09432 #line 3871 "parse.y"
09433 {
09434
09435 int options = (yyvsp[(3) - (3)].num);
09436 NODE *node = (yyvsp[(2) - (3)].node);
09437 NODE *list, *prev;
09438 if (!node) {
09439 node = NEW_LIT(reg_compile(STR_NEW0(), options));
09440 }
09441 else switch (nd_type(node)) {
09442 case NODE_STR:
09443 {
09444 VALUE src = node->nd_lit;
09445 nd_set_type(node, NODE_LIT);
09446 node->nd_lit = reg_compile(src, options);
09447 }
09448 break;
09449 default:
09450 node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
09451 case NODE_DSTR:
09452 if (options & RE_OPTION_ONCE) {
09453 nd_set_type(node, NODE_DREGX_ONCE);
09454 }
09455 else {
09456 nd_set_type(node, NODE_DREGX);
09457 }
09458 node->nd_cflag = options & RE_OPTION_MASK;
09459 if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
09460 for (list = (prev = node)->nd_next; list; list = list->nd_next) {
09461 if (nd_type(list->nd_head) == NODE_STR) {
09462 VALUE tail = list->nd_head->nd_lit;
09463 if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
09464 VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
09465 if (!literal_concat0(parser, lit, tail)) {
09466 node = 0;
09467 break;
09468 }
09469 rb_str_resize(tail, 0);
09470 prev->nd_next = list->nd_next;
09471 rb_gc_force_recycle((VALUE)list->nd_head);
09472 rb_gc_force_recycle((VALUE)list);
09473 list = prev;
09474 }
09475 else {
09476 prev = list;
09477 }
09478 }
09479 else {
09480 prev = 0;
09481 }
09482 }
09483 if (!node->nd_next) {
09484 VALUE src = node->nd_lit;
09485 nd_set_type(node, NODE_LIT);
09486 node->nd_lit = reg_compile(src, options);
09487 }
09488 break;
09489 }
09490 (yyval.node) = node;
09491
09492
09493
09494 ;}
09495 break;
09496
09497 case 433:
09498
09499
09500 #line 3936 "parse.y"
09501 {
09502
09503 (yyval.node) = NEW_ZARRAY();
09504
09505
09506
09507
09508 ;}
09509 break;
09510
09511 case 434:
09512
09513
09514 #line 3945 "parse.y"
09515 {
09516
09517 (yyval.node) = (yyvsp[(2) - (3)].node);
09518
09519
09520
09521 ;}
09522 break;
09523
09524 case 435:
09525
09526
09527 #line 3955 "parse.y"
09528 {
09529
09530 (yyval.node) = 0;
09531
09532
09533
09534 ;}
09535 break;
09536
09537 case 436:
09538
09539
09540 #line 3963 "parse.y"
09541 {
09542
09543 (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
09544
09545
09546
09547 ;}
09548 break;
09549
09550 case 438:
09551
09552
09553 #line 3981 "parse.y"
09554 {
09555
09556 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09557
09558
09559
09560 ;}
09561 break;
09562
09563 case 439:
09564
09565
09566 #line 3991 "parse.y"
09567 {
09568
09569 (yyval.node) = NEW_ZARRAY();
09570
09571
09572
09573
09574 ;}
09575 break;
09576
09577 case 440:
09578
09579
09580 #line 4000 "parse.y"
09581 {
09582
09583 (yyval.node) = (yyvsp[(2) - (3)].node);
09584
09585
09586
09587 ;}
09588 break;
09589
09590 case 441:
09591
09592
09593 #line 4010 "parse.y"
09594 {
09595
09596 (yyval.node) = 0;
09597
09598
09599
09600 ;}
09601 break;
09602
09603 case 442:
09604
09605
09606 #line 4018 "parse.y"
09607 {
09608
09609 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
09610
09611
09612
09613 ;}
09614 break;
09615
09616 case 443:
09617
09618
09619 #line 4028 "parse.y"
09620 {
09621
09622 (yyval.node) = 0;
09623
09624
09625
09626 ;}
09627 break;
09628
09629 case 444:
09630
09631
09632 #line 4036 "parse.y"
09633 {
09634
09635 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09636
09637
09638
09639 ;}
09640 break;
09641
09642 case 445:
09643
09644
09645 #line 4046 "parse.y"
09646 {
09647
09648 (yyval.node) = 0;
09649
09650
09651
09652 ;}
09653 break;
09654
09655 case 446:
09656
09657
09658 #line 4054 "parse.y"
09659 {
09660
09661 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09662
09663
09664
09665 ;}
09666 break;
09667
09668 case 447:
09669
09670
09671 #line 4064 "parse.y"
09672 {
09673
09674 (yyval.node) = 0;
09675
09676
09677
09678 ;}
09679 break;
09680
09681 case 448:
09682
09683
09684 #line 4072 "parse.y"
09685 {
09686
09687 NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
09688 if (!head) {
09689 (yyval.node) = tail;
09690 }
09691 else if (!tail) {
09692 (yyval.node) = head;
09693 }
09694 else {
09695 switch (nd_type(head)) {
09696 case NODE_STR:
09697 nd_set_type(head, NODE_DSTR);
09698 break;
09699 case NODE_DSTR:
09700 break;
09701 default:
09702 head = list_append(NEW_DSTR(Qnil), head);
09703 break;
09704 }
09705 (yyval.node) = list_append(head, tail);
09706 }
09707
09708
09709
09710 ;}
09711 break;
09712
09713 case 450:
09714
09715
09716 #line 4102 "parse.y"
09717 {
09718 (yyval.node) = lex_strterm;
09719 lex_strterm = 0;
09720 lex_state = EXPR_BEG;
09721 ;}
09722 break;
09723
09724 case 451:
09725
09726
09727 #line 4108 "parse.y"
09728 {
09729
09730 lex_strterm = (yyvsp[(2) - (3)].node);
09731 (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
09732
09733
09734
09735
09736 ;}
09737 break;
09738
09739 case 452:
09740
09741
09742 #line 4118 "parse.y"
09743 {
09744 (yyvsp[(1) - (1)].val) = cond_stack;
09745 (yyval.val) = cmdarg_stack;
09746 cond_stack = 0;
09747 cmdarg_stack = 0;
09748 ;}
09749 break;
09750
09751 case 453:
09752
09753
09754 #line 4124 "parse.y"
09755 {
09756 (yyval.node) = lex_strterm;
09757 lex_strterm = 0;
09758 lex_state = EXPR_BEG;
09759 ;}
09760 break;
09761
09762 case 454:
09763
09764
09765 #line 4130 "parse.y"
09766 {
09767 cond_stack = (yyvsp[(1) - (5)].val);
09768 cmdarg_stack = (yyvsp[(2) - (5)].val);
09769 lex_strterm = (yyvsp[(3) - (5)].node);
09770
09771 if ((yyvsp[(4) - (5)].node)) (yyvsp[(4) - (5)].node)->flags &= ~NODE_FL_NEWLINE;
09772 (yyval.node) = new_evstr((yyvsp[(4) - (5)].node));
09773
09774
09775
09776 ;}
09777 break;
09778
09779 case 455:
09780
09781
09782 #line 4144 "parse.y"
09783 {
09784
09785 (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
09786
09787
09788
09789 ;}
09790 break;
09791
09792 case 456:
09793
09794
09795 #line 4152 "parse.y"
09796 {
09797
09798 (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
09799
09800
09801
09802 ;}
09803 break;
09804
09805 case 457:
09806
09807
09808 #line 4160 "parse.y"
09809 {
09810
09811 (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
09812
09813
09814
09815 ;}
09816 break;
09817
09818 case 459:
09819
09820
09821 #line 4171 "parse.y"
09822 {
09823 lex_state = EXPR_END;
09824
09825 (yyval.id) = (yyvsp[(2) - (2)].id);
09826
09827
09828
09829 ;}
09830 break;
09831
09832 case 464:
09833
09834
09835 #line 4188 "parse.y"
09836 {
09837 lex_state = EXPR_END;
09838
09839 if (!((yyval.node) = (yyvsp[(2) - (3)].node))) {
09840 (yyval.node) = NEW_LIT(ID2SYM(rb_intern("")));
09841 }
09842 else {
09843 VALUE lit;
09844
09845 switch (nd_type((yyval.node))) {
09846 case NODE_DSTR:
09847 nd_set_type((yyval.node), NODE_DSYM);
09848 break;
09849 case NODE_STR:
09850 lit = (yyval.node)->nd_lit;
09851 (yyval.node)->nd_lit = ID2SYM(rb_intern_str(lit));
09852 nd_set_type((yyval.node), NODE_LIT);
09853 break;
09854 default:
09855 (yyval.node) = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST((yyval.node)));
09856 break;
09857 }
09858 }
09859
09860
09861
09862 ;}
09863 break;
09864
09865 case 467:
09866
09867
09868 #line 4220 "parse.y"
09869 {
09870
09871 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
09872
09873
09874
09875 ;}
09876 break;
09877
09878 case 468:
09879
09880
09881 #line 4228 "parse.y"
09882 {
09883
09884 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
09885
09886
09887
09888 ;}
09889 break;
09890
09891 case 474:
09892
09893
09894 #line 4242 "parse.y"
09895 {ifndef_ripper((yyval.id) = keyword_nil);;}
09896 break;
09897
09898 case 475:
09899
09900
09901 #line 4243 "parse.y"
09902 {ifndef_ripper((yyval.id) = keyword_self);;}
09903 break;
09904
09905 case 476:
09906
09907
09908 #line 4244 "parse.y"
09909 {ifndef_ripper((yyval.id) = keyword_true);;}
09910 break;
09911
09912 case 477:
09913
09914
09915 #line 4245 "parse.y"
09916 {ifndef_ripper((yyval.id) = keyword_false);;}
09917 break;
09918
09919 case 478:
09920
09921
09922 #line 4246 "parse.y"
09923 {ifndef_ripper((yyval.id) = keyword__FILE__);;}
09924 break;
09925
09926 case 479:
09927
09928
09929 #line 4247 "parse.y"
09930 {ifndef_ripper((yyval.id) = keyword__LINE__);;}
09931 break;
09932
09933 case 480:
09934
09935
09936 #line 4248 "parse.y"
09937 {ifndef_ripper((yyval.id) = keyword__ENCODING__);;}
09938 break;
09939
09940 case 481:
09941
09942
09943 #line 4252 "parse.y"
09944 {
09945
09946 if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
09947
09948
09949
09950 ;}
09951 break;
09952
09953 case 482:
09954
09955
09956 #line 4262 "parse.y"
09957 {
09958 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
09959
09960
09961
09962
09963 ;}
09964 break;
09965
09966 case 485:
09967
09968
09969 #line 4276 "parse.y"
09970 {
09971
09972 (yyval.node) = 0;
09973
09974
09975
09976 ;}
09977 break;
09978
09979 case 486:
09980
09981
09982 #line 4284 "parse.y"
09983 {
09984 lex_state = EXPR_BEG;
09985 ;}
09986 break;
09987
09988 case 487:
09989
09990
09991 #line 4288 "parse.y"
09992 {
09993 (yyval.node) = (yyvsp[(3) - (4)].node);
09994 ;}
09995 break;
09996
09997 case 488:
09998
09999
10000 #line 4292 "parse.y"
10001 {
10002
10003 yyerrok;
10004 (yyval.node) = 0;
10005
10006
10007
10008
10009 ;}
10010 break;
10011
10012 case 489:
10013
10014
10015 #line 4304 "parse.y"
10016 {
10017
10018 (yyval.node) = (yyvsp[(2) - (3)].node);
10019
10020
10021
10022 lex_state = EXPR_BEG;
10023 command_start = TRUE;
10024 ;}
10025 break;
10026
10027 case 490:
10028
10029
10030 #line 4314 "parse.y"
10031 {
10032 (yyval.node) = (yyvsp[(1) - (2)].node);
10033 ;}
10034 break;
10035
10036 case 491:
10037
10038
10039 #line 4320 "parse.y"
10040 {
10041
10042 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
10043
10044
10045
10046 ;}
10047 break;
10048
10049 case 492:
10050
10051
10052 #line 4328 "parse.y"
10053 {
10054
10055 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
10056
10057
10058
10059 ;}
10060 break;
10061
10062 case 493:
10063
10064
10065 #line 4336 "parse.y"
10066 {
10067
10068 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
10069
10070
10071
10072 ;}
10073 break;
10074
10075 case 494:
10076
10077
10078 #line 4344 "parse.y"
10079 {
10080
10081 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10082
10083
10084
10085 ;}
10086 break;
10087
10088 case 495:
10089
10090
10091 #line 4352 "parse.y"
10092 {
10093
10094 (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10095
10096
10097
10098 ;}
10099 break;
10100
10101 case 496:
10102
10103
10104 #line 4360 "parse.y"
10105 {
10106
10107 (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10108
10109
10110
10111 ;}
10112 break;
10113
10114 case 497:
10115
10116
10117 #line 4368 "parse.y"
10118 {
10119
10120 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
10121
10122
10123
10124 ;}
10125 break;
10126
10127 case 498:
10128
10129
10130 #line 4376 "parse.y"
10131 {
10132
10133 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10134
10135
10136
10137 ;}
10138 break;
10139
10140 case 499:
10141
10142
10143 #line 4384 "parse.y"
10144 {
10145
10146 (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10147
10148
10149
10150 ;}
10151 break;
10152
10153 case 500:
10154
10155
10156 #line 4392 "parse.y"
10157 {
10158
10159 (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
10160
10161
10162
10163 ;}
10164 break;
10165
10166 case 501:
10167
10168
10169 #line 4400 "parse.y"
10170 {
10171
10172 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10173
10174
10175
10176 ;}
10177 break;
10178
10179 case 502:
10180
10181
10182 #line 4408 "parse.y"
10183 {
10184
10185 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
10186
10187
10188
10189 ;}
10190 break;
10191
10192 case 503:
10193
10194
10195 #line 4416 "parse.y"
10196 {
10197
10198 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10199
10200
10201
10202 ;}
10203 break;
10204
10205 case 504:
10206
10207
10208 #line 4424 "parse.y"
10209 {
10210
10211 (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
10212
10213
10214
10215 ;}
10216 break;
10217
10218 case 505:
10219
10220
10221 #line 4432 "parse.y"
10222 {
10223
10224 (yyval.node) = new_args(0, 0, 0, 0, 0);
10225
10226
10227
10228 ;}
10229 break;
10230
10231 case 506:
10232
10233
10234 #line 4442 "parse.y"
10235 {
10236
10237 yyerror("formal argument cannot be a constant");
10238 (yyval.id) = 0;
10239
10240
10241
10242 ;}
10243 break;
10244
10245 case 507:
10246
10247
10248 #line 4451 "parse.y"
10249 {
10250
10251 yyerror("formal argument cannot be an instance variable");
10252 (yyval.id) = 0;
10253
10254
10255
10256 ;}
10257 break;
10258
10259 case 508:
10260
10261
10262 #line 4460 "parse.y"
10263 {
10264
10265 yyerror("formal argument cannot be a global variable");
10266 (yyval.id) = 0;
10267
10268
10269
10270 ;}
10271 break;
10272
10273 case 509:
10274
10275
10276 #line 4469 "parse.y"
10277 {
10278
10279 yyerror("formal argument cannot be a class variable");
10280 (yyval.id) = 0;
10281
10282
10283
10284 ;}
10285 break;
10286
10287 case 511:
10288
10289
10290 #line 4481 "parse.y"
10291 {
10292 formal_argument(get_id((yyvsp[(1) - (1)].id)));
10293 (yyval.id) = (yyvsp[(1) - (1)].id);
10294 ;}
10295 break;
10296
10297 case 512:
10298
10299
10300 #line 4488 "parse.y"
10301 {
10302 arg_var(get_id((yyvsp[(1) - (1)].id)));
10303
10304 (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
10305
10306
10307
10308 ;}
10309 break;
10310
10311 case 513:
10312
10313
10314 #line 4497 "parse.y"
10315 {
10316 ID tid = internal_id();
10317 arg_var(tid);
10318
10319 if (dyna_in_block()) {
10320 (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
10321 }
10322 else {
10323 (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
10324 }
10325 (yyval.node) = NEW_ARGS_AUX(tid, 1);
10326 (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
10327
10328
10329
10330 ;}
10331 break;
10332
10333 case 515:
10334
10335
10336 #line 4523 "parse.y"
10337 {
10338
10339 (yyval.node) = (yyvsp[(1) - (3)].node);
10340 (yyval.node)->nd_plen++;
10341 (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
10342 rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
10343
10344
10345
10346 ;}
10347 break;
10348
10349 case 516:
10350
10351
10352 #line 4536 "parse.y"
10353 {
10354 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10355 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10356
10357 (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10358
10359
10360
10361 ;}
10362 break;
10363
10364 case 517:
10365
10366
10367 #line 4548 "parse.y"
10368 {
10369 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10370 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10371
10372 (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10373
10374
10375
10376 ;}
10377 break;
10378
10379 case 518:
10380
10381
10382 #line 4560 "parse.y"
10383 {
10384
10385 (yyval.node) = (yyvsp[(1) - (1)].node);
10386
10387
10388
10389 ;}
10390 break;
10391
10392 case 519:
10393
10394
10395 #line 4568 "parse.y"
10396 {
10397
10398 NODE *opts = (yyvsp[(1) - (3)].node);
10399
10400 while (opts->nd_next) {
10401 opts = opts->nd_next;
10402 }
10403 opts->nd_next = (yyvsp[(3) - (3)].node);
10404 (yyval.node) = (yyvsp[(1) - (3)].node);
10405
10406
10407
10408 ;}
10409 break;
10410
10411 case 520:
10412
10413
10414 #line 4584 "parse.y"
10415 {
10416
10417 (yyval.node) = (yyvsp[(1) - (1)].node);
10418
10419
10420
10421 ;}
10422 break;
10423
10424 case 521:
10425
10426
10427 #line 4592 "parse.y"
10428 {
10429
10430 NODE *opts = (yyvsp[(1) - (3)].node);
10431
10432 while (opts->nd_next) {
10433 opts = opts->nd_next;
10434 }
10435 opts->nd_next = (yyvsp[(3) - (3)].node);
10436 (yyval.node) = (yyvsp[(1) - (3)].node);
10437
10438
10439
10440 ;}
10441 break;
10442
10443 case 524:
10444
10445
10446 #line 4612 "parse.y"
10447 {
10448
10449 if (!is_local_id((yyvsp[(2) - (2)].id)))
10450 yyerror("rest argument must be local variable");
10451
10452 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10453
10454 (yyval.id) = (yyvsp[(2) - (2)].id);
10455
10456
10457
10458 ;}
10459 break;
10460
10461 case 525:
10462
10463
10464 #line 4625 "parse.y"
10465 {
10466
10467 (yyval.id) = internal_id();
10468 arg_var((yyval.id));
10469
10470
10471
10472 ;}
10473 break;
10474
10475 case 528:
10476
10477
10478 #line 4640 "parse.y"
10479 {
10480
10481 if (!is_local_id((yyvsp[(2) - (2)].id)))
10482 yyerror("block argument must be local variable");
10483 else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
10484 yyerror("duplicated block argument name");
10485
10486 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10487
10488 (yyval.id) = (yyvsp[(2) - (2)].id);
10489
10490
10491
10492 ;}
10493 break;
10494
10495 case 529:
10496
10497
10498 #line 4657 "parse.y"
10499 {
10500 (yyval.id) = (yyvsp[(2) - (2)].id);
10501 ;}
10502 break;
10503
10504 case 530:
10505
10506
10507 #line 4661 "parse.y"
10508 {
10509
10510 (yyval.id) = 0;
10511
10512
10513
10514 ;}
10515 break;
10516
10517 case 531:
10518
10519
10520 #line 4671 "parse.y"
10521 {
10522
10523 value_expr((yyvsp[(1) - (1)].node));
10524 (yyval.node) = (yyvsp[(1) - (1)].node);
10525 if (!(yyval.node)) (yyval.node) = NEW_NIL();
10526
10527
10528
10529 ;}
10530 break;
10531
10532 case 532:
10533
10534
10535 #line 4680 "parse.y"
10536 {lex_state = EXPR_BEG;;}
10537 break;
10538
10539 case 533:
10540
10541
10542 #line 4681 "parse.y"
10543 {
10544
10545 if ((yyvsp[(3) - (4)].node) == 0) {
10546 yyerror("can't define singleton method for ().");
10547 }
10548 else {
10549 switch (nd_type((yyvsp[(3) - (4)].node))) {
10550 case NODE_STR:
10551 case NODE_DSTR:
10552 case NODE_XSTR:
10553 case NODE_DXSTR:
10554 case NODE_DREGX:
10555 case NODE_LIT:
10556 case NODE_ARRAY:
10557 case NODE_ZARRAY:
10558 yyerror("can't define singleton method for literals");
10559 default:
10560 value_expr((yyvsp[(3) - (4)].node));
10561 break;
10562 }
10563 }
10564 (yyval.node) = (yyvsp[(3) - (4)].node);
10565
10566
10567
10568 ;}
10569 break;
10570
10571 case 535:
10572
10573
10574 #line 4711 "parse.y"
10575 {
10576
10577 (yyval.node) = (yyvsp[(1) - (2)].node);
10578
10579
10580
10581 ;}
10582 break;
10583
10584 case 537:
10585
10586
10587 #line 4728 "parse.y"
10588 {
10589
10590 (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
10591
10592
10593
10594 ;}
10595 break;
10596
10597 case 538:
10598
10599
10600 #line 4738 "parse.y"
10601 {
10602
10603 (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
10604
10605
10606
10607 ;}
10608 break;
10609
10610 case 539:
10611
10612
10613 #line 4746 "parse.y"
10614 {
10615
10616 (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
10617
10618
10619
10620 ;}
10621 break;
10622
10623 case 561:
10624
10625
10626 #line 4802 "parse.y"
10627 {yyerrok;;}
10628 break;
10629
10630 case 564:
10631
10632
10633 #line 4807 "parse.y"
10634 {yyerrok;;}
10635 break;
10636
10637 case 565:
10638
10639
10640 #line 4811 "parse.y"
10641 {
10642
10643 (yyval.node) = 0;
10644
10645
10646
10647 ;}
10648 break;
10649
10650
10651
10652
10653 #line 10652 "parse.c"
10654 default: break;
10655 }
10656 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
10657
10658 YYPOPSTACK (yylen);
10659 yylen = 0;
10660 YY_STACK_PRINT (yyss, yyssp);
10661
10662 *++yyvsp = yyval;
10663
10664
10665
10666
10667
10668 yyn = yyr1[yyn];
10669
10670 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
10671 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
10672 yystate = yytable[yystate];
10673 else
10674 yystate = yydefgoto[yyn - YYNTOKENS];
10675
10676 goto yynewstate;
10677
10678
10679
10680
10681
10682 yyerrlab:
10683
10684 if (!yyerrstatus)
10685 {
10686 ++yynerrs;
10687 #if ! YYERROR_VERBOSE
10688 parser_yyerror (parser, YY_("syntax error"));
10689 #else
10690 {
10691 YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
10692 if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
10693 {
10694 YYSIZE_T yyalloc = 2 * yysize;
10695 if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
10696 yyalloc = YYSTACK_ALLOC_MAXIMUM;
10697 if (yymsg != yymsgbuf)
10698 YYSTACK_FREE (yymsg);
10699 yymsg = (char *) YYSTACK_ALLOC (yyalloc);
10700 if (yymsg)
10701 yymsg_alloc = yyalloc;
10702 else
10703 {
10704 yymsg = yymsgbuf;
10705 yymsg_alloc = sizeof yymsgbuf;
10706 }
10707 }
10708
10709 if (0 < yysize && yysize <= yymsg_alloc)
10710 {
10711 (void) yysyntax_error (yymsg, yystate, yychar);
10712 parser_yyerror (parser, yymsg);
10713 }
10714 else
10715 {
10716 parser_yyerror (parser, YY_("syntax error"));
10717 if (yysize != 0)
10718 goto yyexhaustedlab;
10719 }
10720 }
10721 #endif
10722 }
10723
10724
10725
10726 if (yyerrstatus == 3)
10727 {
10728
10729
10730
10731 if (yychar <= YYEOF)
10732 {
10733
10734 if (yychar == YYEOF)
10735 YYABORT;
10736 }
10737 else
10738 {
10739 yydestruct ("Error: discarding",
10740 yytoken, &yylval, parser);
10741 yychar = YYEMPTY;
10742 }
10743 }
10744
10745
10746
10747 goto yyerrlab1;
10748
10749
10750
10751
10752
10753 yyerrorlab:
10754
10755
10756
10757
10758 if ( 0)
10759 goto yyerrorlab;
10760
10761
10762
10763 YYPOPSTACK (yylen);
10764 yylen = 0;
10765 YY_STACK_PRINT (yyss, yyssp);
10766 yystate = *yyssp;
10767 goto yyerrlab1;
10768
10769
10770
10771
10772
10773 yyerrlab1:
10774 yyerrstatus = 3;
10775
10776 for (;;)
10777 {
10778 yyn = yypact[yystate];
10779 if (yyn != YYPACT_NINF)
10780 {
10781 yyn += YYTERROR;
10782 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
10783 {
10784 yyn = yytable[yyn];
10785 if (0 < yyn)
10786 break;
10787 }
10788 }
10789
10790
10791 if (yyssp == yyss)
10792 YYABORT;
10793
10794
10795 yydestruct ("Error: popping",
10796 yystos[yystate], yyvsp, parser);
10797 YYPOPSTACK (1);
10798 yystate = *yyssp;
10799 YY_STACK_PRINT (yyss, yyssp);
10800 }
10801
10802 *++yyvsp = yylval;
10803
10804
10805
10806 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
10807
10808 yystate = yyn;
10809 goto yynewstate;
10810
10811
10812
10813
10814
10815 yyacceptlab:
10816 yyresult = 0;
10817 goto yyreturn;
10818
10819
10820
10821
10822 yyabortlab:
10823 yyresult = 1;
10824 goto yyreturn;
10825
10826 #if !defined(yyoverflow) || YYERROR_VERBOSE
10827
10828
10829
10830 yyexhaustedlab:
10831 parser_yyerror (parser, YY_("memory exhausted"));
10832 yyresult = 2;
10833
10834 #endif
10835
10836 yyreturn:
10837 if (yychar != YYEMPTY)
10838 yydestruct ("Cleanup: discarding lookahead",
10839 yytoken, &yylval, parser);
10840
10841
10842 YYPOPSTACK (yylen);
10843 YY_STACK_PRINT (yyss, yyssp);
10844 while (yyssp != yyss)
10845 {
10846 yydestruct ("Cleanup: popping",
10847 yystos[*yyssp], yyvsp, parser);
10848 YYPOPSTACK (1);
10849 }
10850 #ifndef yyoverflow
10851 if (yyss != yyssa)
10852 YYSTACK_FREE (yyss);
10853 #endif
10854 #if YYERROR_VERBOSE
10855 if (yymsg != yymsgbuf)
10856 YYSTACK_FREE (yymsg);
10857 #endif
10858
10859 return YYID (yyresult);
10860 }
10861
10862
10863
10864
10865 #line 4819 "parse.y"
10866
10867 # undef parser
10868 # undef yylex
10869 # undef yylval
10870 # define yylval (*((YYSTYPE*)(parser->parser_yylval)))
10871
10872 static int parser_regx_options(struct parser_params*);
10873 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
10874 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
10875 static int parser_parse_string(struct parser_params*,NODE*);
10876 static int parser_here_document(struct parser_params*,NODE*);
10877
10878
10879 # define nextc() parser_nextc(parser)
10880 # define pushback(c) parser_pushback(parser, c)
10881 # define newtok() parser_newtok(parser)
10882 # define tokspace(n) parser_tokspace(parser, n)
10883 # define tokadd(c) parser_tokadd(parser, c)
10884 # define tok_hex(numlen) parser_tok_hex(parser, numlen)
10885 # define read_escape(flags,e) parser_read_escape(parser, flags, e)
10886 # define tokadd_escape(e) parser_tokadd_escape(parser, e)
10887 # define regx_options() parser_regx_options(parser)
10888 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,f,t,p,n,e)
10889 # define parse_string(n) parser_parse_string(parser,n)
10890 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, c, enc)
10891 # define here_document(n) parser_here_document(parser,n)
10892 # define heredoc_identifier() parser_heredoc_identifier(parser)
10893 # define heredoc_restore(n) parser_heredoc_restore(parser,n)
10894 # define whole_match_p(e,l,i) parser_whole_match_p(parser,e,l,i)
10895
10896 #ifndef RIPPER
10897 # define set_yylval_str(x) yylval.node = NEW_STR(x)
10898 # define set_yylval_num(x) yylval.num = x
10899 # define set_yylval_id(x) yylval.id = x
10900 # define set_yylval_name(x) yylval.id = x
10901 # define set_yylval_literal(x) yylval.node = NEW_LIT(x)
10902 # define set_yylval_node(x) yylval.node = x
10903 # define yylval_id() yylval.id
10904 #else
10905 static inline VALUE
10906 ripper_yylval_id(ID x)
10907 {
10908 return (VALUE)NEW_LASGN(x, ID2SYM(x));
10909 }
10910 # define set_yylval_str(x) (void)(x)
10911 # define set_yylval_num(x) (void)(x)
10912 # define set_yylval_id(x) (void)(x)
10913 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
10914 # define set_yylval_literal(x) (void)(x)
10915 # define set_yylval_node(x) (void)(x)
10916 # define yylval_id() yylval.id
10917 #endif
10918
10919 #ifndef RIPPER
10920 #define ripper_flush(p) (void)(p)
10921 #else
10922 #define ripper_flush(p) (p->tokp = p->parser_lex_p)
10923
10924 #define yylval_rval *(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val)
10925
10926 static int
10927 ripper_has_scan_event(struct parser_params *parser)
10928 {
10929
10930 if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
10931 return lex_p > parser->tokp;
10932 }
10933
10934 static VALUE
10935 ripper_scan_event_val(struct parser_params *parser, int t)
10936 {
10937 VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
10938 VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
10939 ripper_flush(parser);
10940 return rval;
10941 }
10942
10943 static void
10944 ripper_dispatch_scan_event(struct parser_params *parser, int t)
10945 {
10946 if (!ripper_has_scan_event(parser)) return;
10947 yylval_rval = ripper_scan_event_val(parser, t);
10948 }
10949
10950 static void
10951 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
10952 {
10953 if (!ripper_has_scan_event(parser)) return;
10954 (void)ripper_scan_event_val(parser, t);
10955 }
10956
10957 static void
10958 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
10959 {
10960 int saved_line = ruby_sourceline;
10961 const char *saved_tokp = parser->tokp;
10962
10963 ruby_sourceline = parser->delayed_line;
10964 parser->tokp = lex_pbeg + parser->delayed_col;
10965 yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
10966 parser->delayed = Qnil;
10967 ruby_sourceline = saved_line;
10968 parser->tokp = saved_tokp;
10969 }
10970 #endif
10971
10972 #include "ruby/regex.h"
10973 #include "ruby/util.h"
10974
10975
10976
10977
10978
10979 #undef SIGN_EXTEND_CHAR
10980 #if __STDC__
10981 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
10982 #else
10983
10984 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
10985 #endif
10986
10987 #define parser_encoding_name() (parser->enc->name)
10988 #define parser_mbclen() mbclen((lex_p-1),lex_pend,parser->enc)
10989 #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,parser->enc)
10990 #define is_identchar(p,e,enc) (rb_enc_isalnum(*p,enc) || (*p) == '_' || !ISASCII(*p))
10991 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,parser->enc))
10992
10993 #define parser_isascii() ISASCII(*(lex_p-1))
10994
10995 #ifndef RIPPER
10996 static int
10997 token_info_get_column(struct parser_params *parser, const char *token)
10998 {
10999 int column = 1;
11000 const char *p, *pend = lex_p - strlen(token);
11001 for (p = lex_pbeg; p < pend; p++) {
11002 if (*p == '\t') {
11003 column = (((column - 1) / 8) + 1) * 8;
11004 }
11005 column++;
11006 }
11007 return column;
11008 }
11009
11010 static int
11011 token_info_has_nonspaces(struct parser_params *parser, const char *token)
11012 {
11013 const char *p, *pend = lex_p - strlen(token);
11014 for (p = lex_pbeg; p < pend; p++) {
11015 if (*p != ' ' && *p != '\t') {
11016 return 1;
11017 }
11018 }
11019 return 0;
11020 }
11021
11022 #undef token_info_push
11023 static void
11024 token_info_push(struct parser_params *parser, const char *token)
11025 {
11026 token_info *ptinfo;
11027
11028 if (compile_for_eval) return;
11029 ptinfo = ALLOC(token_info);
11030 ptinfo->token = token;
11031 ptinfo->linenum = ruby_sourceline;
11032 ptinfo->column = token_info_get_column(parser, token);
11033 ptinfo->nonspc = token_info_has_nonspaces(parser, token);
11034 ptinfo->next = parser->parser_token_info;
11035
11036 parser->parser_token_info = ptinfo;
11037 }
11038
11039 #undef token_info_pop
11040 static void
11041 token_info_pop(struct parser_params *parser, const char *token)
11042 {
11043 int linenum;
11044 token_info *ptinfo = parser->parser_token_info;
11045
11046 if (!ptinfo) return;
11047 parser->parser_token_info = ptinfo->next;
11048 if (token_info_get_column(parser, token) == ptinfo->column) {
11049 goto finish;
11050 }
11051 linenum = ruby_sourceline;
11052 if (linenum == ptinfo->linenum) {
11053 goto finish;
11054 }
11055 if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) {
11056 goto finish;
11057 }
11058 rb_compile_warning(ruby_sourcefile, linenum,
11059 "mismatched indentations at '%s' with '%s' at %d",
11060 token, ptinfo->token, ptinfo->linenum);
11061
11062 finish:
11063 xfree(ptinfo);
11064 }
11065 #endif
11066
11067 static int
11068 parser_yyerror(struct parser_params *parser, const char *msg)
11069 {
11070 #ifndef RIPPER
11071 const int max_line_margin = 30;
11072 const char *p, *pe;
11073 char *buf;
11074 long len;
11075 int i;
11076
11077 compile_error(PARSER_ARG "%s", msg);
11078 p = lex_p;
11079 while (lex_pbeg <= p) {
11080 if (*p == '\n') break;
11081 p--;
11082 }
11083 p++;
11084
11085 pe = lex_p;
11086 while (pe < lex_pend) {
11087 if (*pe == '\n') break;
11088 pe++;
11089 }
11090
11091 len = pe - p;
11092 if (len > 4) {
11093 char *p2;
11094 const char *pre = "", *post = "";
11095
11096 if (len > max_line_margin * 2 + 10) {
11097 if (lex_p - p > max_line_margin) {
11098 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
11099 pre = "...";
11100 }
11101 if (pe - lex_p > max_line_margin) {
11102 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
11103 post = "...";
11104 }
11105 len = pe - p;
11106 }
11107 buf = ALLOCA_N(char, len+2);
11108 MEMCPY(buf, p, char, len);
11109 buf[len] = '\0';
11110 rb_compile_error_append("%s%s%s", pre, buf, post);
11111
11112 i = (int)(lex_p - p);
11113 p2 = buf; pe = buf + len;
11114
11115 while (p2 < pe) {
11116 if (*p2 != '\t') *p2 = ' ';
11117 p2++;
11118 }
11119 buf[i] = '^';
11120 buf[i+1] = '\0';
11121 rb_compile_error_append("%s%s", pre, buf);
11122 }
11123 #else
11124 dispatch1(parse_error, STR_NEW2(msg));
11125 #endif
11126 return 0;
11127 }
11128
11129 static void parser_prepare(struct parser_params *parser);
11130
11131 #ifndef RIPPER
11132 VALUE ruby_suppress_tracing(VALUE (*func)(VALUE, int), VALUE arg, int always);
11133
11134 static VALUE
11135 debug_lines(const char *f)
11136 {
11137 ID script_lines;
11138 CONST_ID(script_lines, "SCRIPT_LINES__");
11139 if (rb_const_defined_at(rb_cObject, script_lines)) {
11140 VALUE hash = rb_const_get_at(rb_cObject, script_lines);
11141 if (TYPE(hash) == T_HASH) {
11142 VALUE fname = rb_str_new2(f);
11143 VALUE lines = rb_ary_new();
11144 rb_hash_aset(hash, fname, lines);
11145 return lines;
11146 }
11147 }
11148 return 0;
11149 }
11150
11151 static VALUE
11152 coverage(const char *f, int n)
11153 {
11154 extern VALUE rb_get_coverages(void);
11155 VALUE coverages = rb_get_coverages();
11156 if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
11157 VALUE fname = rb_str_new2(f);
11158 VALUE lines = rb_ary_new2(n);
11159 int i;
11160 RBASIC(lines)->klass = 0;
11161 for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil;
11162 RARRAY(lines)->as.heap.len = n;
11163 rb_hash_aset(coverages, fname, lines);
11164 return lines;
11165 }
11166 return 0;
11167 }
11168
11169 static int
11170 e_option_supplied(struct parser_params *parser)
11171 {
11172 return strcmp(ruby_sourcefile, "-e") == 0;
11173 }
11174
11175 static VALUE
11176 yycompile0(VALUE arg, int tracing)
11177 {
11178 int n;
11179 NODE *tree;
11180 struct parser_params *parser = (struct parser_params *)arg;
11181
11182 if (!compile_for_eval && rb_safe_level() == 0) {
11183 ruby_debug_lines = debug_lines(ruby_sourcefile);
11184 if (ruby_debug_lines && ruby_sourceline > 0) {
11185 VALUE str = STR_NEW0();
11186 n = ruby_sourceline;
11187 do {
11188 rb_ary_push(ruby_debug_lines, str);
11189 } while (--n);
11190 }
11191
11192 if (!e_option_supplied(parser)) {
11193 ruby_coverage = coverage(ruby_sourcefile, ruby_sourceline);
11194 }
11195 }
11196
11197 parser_prepare(parser);
11198 deferred_nodes = 0;
11199 n = yyparse((void*)parser);
11200 ruby_debug_lines = 0;
11201 ruby_coverage = 0;
11202 compile_for_eval = 0;
11203
11204 lex_strterm = 0;
11205 lex_p = lex_pbeg = lex_pend = 0;
11206 lex_lastline = lex_nextline = 0;
11207 if (parser->nerr) {
11208 return 0;
11209 }
11210 tree = ruby_eval_tree;
11211 if (!tree) {
11212 tree = NEW_NIL();
11213 }
11214 else if (ruby_eval_tree_begin) {
11215 tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
11216 }
11217 return (VALUE)tree;
11218 }
11219
11220 static NODE*
11221 yycompile(struct parser_params *parser, const char *f, int line)
11222 {
11223 ruby_sourcefile = ruby_strdup(f);
11224 ruby_sourceline = line - 1;
11225 return (NODE *)ruby_suppress_tracing(yycompile0, (VALUE)parser, TRUE);
11226 }
11227 #endif
11228
11229 static rb_encoding *
11230 must_be_ascii_compatible(VALUE s)
11231 {
11232 rb_encoding *enc = rb_enc_get(s);
11233 if (!rb_enc_asciicompat(enc)) {
11234 rb_raise(rb_eArgError, "invalid source encoding");
11235 }
11236 return enc;
11237 }
11238
11239 static VALUE
11240 lex_get_str(struct parser_params *parser, VALUE s)
11241 {
11242 char *beg, *end, *pend;
11243 rb_encoding *enc = must_be_ascii_compatible(s);
11244
11245 beg = RSTRING_PTR(s);
11246 if (lex_gets_ptr) {
11247 if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
11248 beg += lex_gets_ptr;
11249 }
11250 pend = RSTRING_PTR(s) + RSTRING_LEN(s);
11251 end = beg;
11252 while (end < pend) {
11253 if (*end++ == '\n') break;
11254 }
11255 lex_gets_ptr = end - RSTRING_PTR(s);
11256 return rb_enc_str_new(beg, end - beg, enc);
11257 }
11258
11259 static VALUE
11260 lex_getline(struct parser_params *parser)
11261 {
11262 VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
11263 if (NIL_P(line)) return line;
11264 must_be_ascii_compatible(line);
11265 #ifndef RIPPER
11266 if (ruby_debug_lines) {
11267 rb_enc_associate(line, parser->enc);
11268 rb_ary_push(ruby_debug_lines, line);
11269 }
11270 if (ruby_coverage) {
11271 rb_ary_push(ruby_coverage, Qnil);
11272 }
11273 #endif
11274 return line;
11275 }
11276
11277 static const rb_data_type_t parser_data_type;
11278
11279 #ifndef RIPPER
11280 static NODE*
11281 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11282 {
11283 struct parser_params *parser;
11284 NODE *node;
11285 volatile VALUE tmp;
11286
11287 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11288 lex_gets = lex_get_str;
11289 lex_gets_ptr = 0;
11290 lex_input = s;
11291 lex_pbeg = lex_p = lex_pend = 0;
11292 compile_for_eval = rb_parse_in_eval();
11293
11294 node = yycompile(parser, f, line);
11295 tmp = vparser;
11296
11297 return node;
11298 }
11299
11300 NODE*
11301 rb_compile_string(const char *f, VALUE s, int line)
11302 {
11303 must_be_ascii_compatible(s);
11304 return parser_compile_string(rb_parser_new(), f, s, line);
11305 }
11306
11307 NODE*
11308 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11309 {
11310 must_be_ascii_compatible(s);
11311 return parser_compile_string(vparser, f, s, line);
11312 }
11313
11314 NODE*
11315 rb_compile_cstr(const char *f, const char *s, int len, int line)
11316 {
11317 VALUE str = rb_str_new(s, len);
11318 return parser_compile_string(rb_parser_new(), f, str, line);
11319 }
11320
11321 NODE*
11322 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
11323 {
11324 VALUE str = rb_str_new(s, len);
11325 return parser_compile_string(vparser, f, str, line);
11326 }
11327
11328 static VALUE
11329 lex_io_gets(struct parser_params *parser, VALUE io)
11330 {
11331 return rb_io_gets(io);
11332 }
11333
11334 NODE*
11335 rb_compile_file(const char *f, VALUE file, int start)
11336 {
11337 VALUE volatile vparser = rb_parser_new();
11338
11339 return rb_parser_compile_file(vparser, f, file, start);
11340 }
11341
11342 NODE*
11343 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
11344 {
11345 struct parser_params *parser;
11346 volatile VALUE tmp;
11347 NODE *node;
11348
11349 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11350 lex_gets = lex_io_gets;
11351 lex_input = file;
11352 lex_pbeg = lex_p = lex_pend = 0;
11353 compile_for_eval = rb_parse_in_eval();
11354
11355 node = yycompile(parser, f, start);
11356 tmp = vparser;
11357
11358 return node;
11359 }
11360 #endif
11361
11362 #define STR_FUNC_ESCAPE 0x01
11363 #define STR_FUNC_EXPAND 0x02
11364 #define STR_FUNC_REGEXP 0x04
11365 #define STR_FUNC_QWORDS 0x08
11366 #define STR_FUNC_SYMBOL 0x10
11367 #define STR_FUNC_INDENT 0x20
11368
11369 enum string_type {
11370 str_squote = (0),
11371 str_dquote = (STR_FUNC_EXPAND),
11372 str_xquote = (STR_FUNC_EXPAND),
11373 str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND),
11374 str_sword = (STR_FUNC_QWORDS),
11375 str_dword = (STR_FUNC_QWORDS|STR_FUNC_EXPAND),
11376 str_ssym = (STR_FUNC_SYMBOL),
11377 str_dsym = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND)
11378 };
11379
11380 static VALUE
11381 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
11382 {
11383 VALUE str;
11384
11385 str = rb_enc_str_new(p, n, enc);
11386 if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
11387 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
11388 }
11389 else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
11390 rb_enc_associate(str, rb_ascii8bit_encoding());
11391 }
11392 }
11393
11394 return str;
11395 }
11396
11397 #define lex_goto_eol(parser) (parser->parser_lex_p = parser->parser_lex_pend)
11398 #define peek(c) (lex_p < lex_pend && (c) == *lex_p)
11399
11400 static inline int
11401 parser_nextc(struct parser_params *parser)
11402 {
11403 int c;
11404
11405 if (lex_p == lex_pend) {
11406 VALUE v = lex_nextline;
11407 lex_nextline = 0;
11408 if (!v) {
11409 if (parser->eofp)
11410 return -1;
11411
11412 if (!lex_input || NIL_P(v = lex_getline(parser))) {
11413 parser->eofp = Qtrue;
11414 lex_goto_eol(parser);
11415 return -1;
11416 }
11417 }
11418 {
11419 #ifdef RIPPER
11420 if (parser->tokp < lex_pend) {
11421 if (NIL_P(parser->delayed)) {
11422 parser->delayed = rb_str_buf_new(1024);
11423 rb_str_buf_cat(parser->delayed,
11424 parser->tokp, lex_pend - parser->tokp);
11425 parser->delayed_line = ruby_sourceline;
11426 parser->delayed_col = (int)(parser->tokp - lex_pbeg);
11427 }
11428 else {
11429 rb_str_buf_cat(parser->delayed,
11430 parser->tokp, lex_pend - parser->tokp);
11431 }
11432 }
11433 #endif
11434 if (heredoc_end > 0) {
11435 ruby_sourceline = heredoc_end;
11436 heredoc_end = 0;
11437 }
11438 ruby_sourceline++;
11439 parser->line_count++;
11440 lex_pbeg = lex_p = RSTRING_PTR(v);
11441 lex_pend = lex_p + RSTRING_LEN(v);
11442 ripper_flush(parser);
11443 lex_lastline = v;
11444 }
11445 }
11446 c = (unsigned char)*lex_p++;
11447 if (c == '\r' && peek('\n')) {
11448 lex_p++;
11449 c = '\n';
11450 }
11451
11452 return c;
11453 }
11454
11455 static void
11456 parser_pushback(struct parser_params *parser, int c)
11457 {
11458 if (c == -1) return;
11459 lex_p--;
11460 if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
11461 lex_p--;
11462 }
11463 }
11464
11465 #define was_bol() (lex_p == lex_pbeg + 1)
11466
11467 #define tokfix() (tokenbuf[tokidx]='\0')
11468 #define tok() tokenbuf
11469 #define toklen() tokidx
11470 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
11471
11472 static char*
11473 parser_newtok(struct parser_params *parser)
11474 {
11475 tokidx = 0;
11476 if (!tokenbuf) {
11477 toksiz = 60;
11478 tokenbuf = ALLOC_N(char, 60);
11479 }
11480 if (toksiz > 4096) {
11481 toksiz = 60;
11482 REALLOC_N(tokenbuf, char, 60);
11483 }
11484 return tokenbuf;
11485 }
11486
11487 static char *
11488 parser_tokspace(struct parser_params *parser, int n)
11489 {
11490 tokidx += n;
11491
11492 if (tokidx >= toksiz) {
11493 do {toksiz *= 2;} while (toksiz < tokidx);
11494 REALLOC_N(tokenbuf, char, toksiz);
11495 }
11496 return &tokenbuf[tokidx-n];
11497 }
11498
11499 static void
11500 parser_tokadd(struct parser_params *parser, int c)
11501 {
11502 tokenbuf[tokidx++] = (char)c;
11503 if (tokidx >= toksiz) {
11504 toksiz *= 2;
11505 REALLOC_N(tokenbuf, char, toksiz);
11506 }
11507 }
11508
11509 static int
11510 parser_tok_hex(struct parser_params *parser, size_t *numlen)
11511 {
11512 int c;
11513
11514 c = scan_hex(lex_p, 2, numlen);
11515 if (!*numlen) {
11516 yyerror("invalid hex escape");
11517 return 0;
11518 }
11519 lex_p += *numlen;
11520 return c;
11521 }
11522
11523 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
11524
11525 static int
11526 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
11527 int string_literal, int symbol_literal, int regexp_literal)
11528 {
11529
11530
11531
11532
11533
11534
11535
11536 int codepoint;
11537 size_t numlen;
11538
11539 if (regexp_literal) { tokadd('\\'); tokadd('u'); }
11540
11541 if (peek('{')) {
11542 do {
11543 if (regexp_literal) { tokadd(*lex_p); }
11544 nextc();
11545 codepoint = scan_hex(lex_p, 6, &numlen);
11546 if (numlen == 0) {
11547 yyerror("invalid Unicode escape");
11548 return 0;
11549 }
11550 if (codepoint > 0x10ffff) {
11551 yyerror("invalid Unicode codepoint (too large)");
11552 return 0;
11553 }
11554 lex_p += numlen;
11555 if (regexp_literal) {
11556 tokcopy((int)numlen);
11557 }
11558 else if (codepoint >= 0x80) {
11559 *encp = UTF8_ENC();
11560 if (string_literal) tokaddmbc(codepoint, *encp);
11561 }
11562 else if (string_literal) {
11563 tokadd(codepoint);
11564 }
11565 } while (string_literal && (peek(' ') || peek('\t')));
11566
11567 if (!peek('}')) {
11568 yyerror("unterminated Unicode escape");
11569 return 0;
11570 }
11571
11572 if (regexp_literal) { tokadd('}'); }
11573 nextc();
11574 }
11575 else {
11576 codepoint = scan_hex(lex_p, 4, &numlen);
11577 if (numlen < 4) {
11578 yyerror("invalid Unicode escape");
11579 return 0;
11580 }
11581 lex_p += 4;
11582 if (regexp_literal) {
11583 tokcopy(4);
11584 }
11585 else if (codepoint >= 0x80) {
11586 *encp = UTF8_ENC();
11587 if (string_literal) tokaddmbc(codepoint, *encp);
11588 }
11589 else if (string_literal) {
11590 tokadd(codepoint);
11591 }
11592 }
11593
11594 return codepoint;
11595 }
11596
11597 #define ESCAPE_CONTROL 1
11598 #define ESCAPE_META 2
11599
11600 static int
11601 parser_read_escape(struct parser_params *parser, int flags,
11602 rb_encoding **encp)
11603 {
11604 int c;
11605 size_t numlen;
11606
11607 switch (c = nextc()) {
11608 case '\\':
11609 return c;
11610
11611 case 'n':
11612 return '\n';
11613
11614 case 't':
11615 return '\t';
11616
11617 case 'r':
11618 return '\r';
11619
11620 case 'f':
11621 return '\f';
11622
11623 case 'v':
11624 return '\13';
11625
11626 case 'a':
11627 return '\007';
11628
11629 case 'e':
11630 return 033;
11631
11632 case '0': case '1': case '2': case '3':
11633 case '4': case '5': case '6': case '7':
11634 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11635 pushback(c);
11636 c = scan_oct(lex_p, 3, &numlen);
11637 lex_p += numlen;
11638 return c;
11639
11640 case 'x':
11641 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11642 c = tok_hex(&numlen);
11643 if (numlen == 0) return 0;
11644 return c;
11645
11646 case 'b':
11647 return '\010';
11648
11649 case 's':
11650 return ' ';
11651
11652 case 'M':
11653 if (flags & ESCAPE_META) goto eof;
11654 if ((c = nextc()) != '-') {
11655 pushback(c);
11656 goto eof;
11657 }
11658 if ((c = nextc()) == '\\') {
11659 if (peek('u')) goto eof;
11660 return read_escape(flags|ESCAPE_META, encp) | 0x80;
11661 }
11662 else if (c == -1 || !ISASCII(c)) goto eof;
11663 else {
11664 return ((c & 0xff) | 0x80);
11665 }
11666
11667 case 'C':
11668 if ((c = nextc()) != '-') {
11669 pushback(c);
11670 goto eof;
11671 }
11672 case 'c':
11673 if (flags & ESCAPE_CONTROL) goto eof;
11674 if ((c = nextc())== '\\') {
11675 if (peek('u')) goto eof;
11676 c = read_escape(flags|ESCAPE_CONTROL, encp);
11677 }
11678 else if (c == '?')
11679 return 0177;
11680 else if (c == -1 || !ISASCII(c)) goto eof;
11681 return c & 0x9f;
11682
11683 eof:
11684 case -1:
11685 yyerror("Invalid escape character syntax");
11686 return '\0';
11687
11688 default:
11689 return c;
11690 }
11691 }
11692
11693 static void
11694 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
11695 {
11696 int len = rb_enc_codelen(c, enc);
11697 rb_enc_mbcput(c, tokspace(len), enc);
11698 }
11699
11700 static int
11701 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
11702 {
11703 int c;
11704 int flags = 0;
11705 size_t numlen;
11706
11707 first:
11708 switch (c = nextc()) {
11709 case '\n':
11710 return 0;
11711
11712 case '0': case '1': case '2': case '3':
11713 case '4': case '5': case '6': case '7':
11714 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11715 {
11716 ruby_scan_oct(--lex_p, 3, &numlen);
11717 if (numlen == 0) goto eof;
11718 lex_p += numlen;
11719 tokcopy((int)numlen + 1);
11720 }
11721 return 0;
11722
11723 case 'x':
11724 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11725 {
11726 tok_hex(&numlen);
11727 if (numlen == 0) goto eof;
11728 tokcopy((int)numlen + 2);
11729 }
11730 return 0;
11731
11732 case 'M':
11733 if (flags & ESCAPE_META) goto eof;
11734 if ((c = nextc()) != '-') {
11735 pushback(c);
11736 goto eof;
11737 }
11738 tokcopy(3);
11739 flags |= ESCAPE_META;
11740 goto escaped;
11741
11742 case 'C':
11743 if (flags & ESCAPE_CONTROL) goto eof;
11744 if ((c = nextc()) != '-') {
11745 pushback(c);
11746 goto eof;
11747 }
11748 tokcopy(3);
11749 goto escaped;
11750
11751 case 'c':
11752 if (flags & ESCAPE_CONTROL) goto eof;
11753 tokcopy(2);
11754 flags |= ESCAPE_CONTROL;
11755 escaped:
11756 if ((c = nextc()) == '\\') {
11757 goto first;
11758 }
11759 else if (c == -1) goto eof;
11760 tokadd(c);
11761 return 0;
11762
11763 eof:
11764 case -1:
11765 yyerror("Invalid escape character syntax");
11766 return -1;
11767
11768 default:
11769 tokadd('\\');
11770 tokadd(c);
11771 }
11772 return 0;
11773 }
11774
11775 extern int rb_char_to_option_kcode(int c, int *option, int *kcode);
11776
11777 static int
11778 parser_regx_options(struct parser_params *parser)
11779 {
11780 int kcode = 0;
11781 int kopt = 0;
11782 int options = 0;
11783 int c, opt, kc;
11784
11785 newtok();
11786 while (c = nextc(), ISALPHA(c)) {
11787 if (c == 'o') {
11788 options |= RE_OPTION_ONCE;
11789 }
11790 else if (rb_char_to_option_kcode(c, &opt, &kc)) {
11791 if (kc >= 0) {
11792 if (kc != rb_ascii8bit_encindex()) kcode = c;
11793 kopt = opt;
11794 }
11795 else {
11796 options |= opt;
11797 }
11798 }
11799 else {
11800 tokadd(c);
11801 }
11802 }
11803 options |= kopt;
11804 pushback(c);
11805 if (toklen()) {
11806 tokfix();
11807 compile_error(PARSER_ARG "unknown regexp option%s - %s",
11808 toklen() > 1 ? "s" : "", tok());
11809 }
11810 return options | RE_OPTION_ENCODING(kcode);
11811 }
11812
11813 static void
11814 dispose_string(VALUE str)
11815 {
11816
11817 if (RBASIC(str)->flags & RSTRING_NOEMBED)
11818 xfree(RSTRING_PTR(str));
11819 rb_gc_force_recycle(str);
11820 }
11821
11822 static int
11823 parser_tokadd_mbchar(struct parser_params *parser, int c)
11824 {
11825 int len = parser_precise_mbclen();
11826 if (!MBCLEN_CHARFOUND_P(len)) {
11827 compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
11828 return -1;
11829 }
11830 tokadd(c);
11831 lex_p += --len;
11832 if (len > 0) tokcopy(len);
11833 return c;
11834 }
11835
11836 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, c)
11837
11838 static int
11839 parser_tokadd_string(struct parser_params *parser,
11840 int func, int term, int paren, long *nest,
11841 rb_encoding **encp)
11842 {
11843 int c;
11844 int has_nonascii = 0;
11845 rb_encoding *enc = *encp;
11846 char *errbuf = 0;
11847 static const char mixed_msg[] = "%s mixed within %s source";
11848
11849 #define mixed_error(enc1, enc2) if (!errbuf) { \
11850 size_t len = sizeof(mixed_msg) - 4; \
11851 len += strlen(rb_enc_name(enc1)); \
11852 len += strlen(rb_enc_name(enc2)); \
11853 errbuf = ALLOCA_N(char, len); \
11854 snprintf(errbuf, len, mixed_msg, \
11855 rb_enc_name(enc1), \
11856 rb_enc_name(enc2)); \
11857 yyerror(errbuf); \
11858 }
11859 #define mixed_escape(beg, enc1, enc2) do { \
11860 const char *pos = lex_p; \
11861 lex_p = beg; \
11862 mixed_error(enc1, enc2); \
11863 lex_p = pos; \
11864 } while (0)
11865
11866 while ((c = nextc()) != -1) {
11867 if (paren && c == paren) {
11868 ++*nest;
11869 }
11870 else if (c == term) {
11871 if (!nest || !*nest) {
11872 pushback(c);
11873 break;
11874 }
11875 --*nest;
11876 }
11877 else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
11878 int c2 = *lex_p;
11879 if (c2 == '$' || c2 == '@' || c2 == '{') {
11880 pushback(c);
11881 break;
11882 }
11883 }
11884 else if (c == '\\') {
11885 const char *beg = lex_p - 1;
11886 c = nextc();
11887 switch (c) {
11888 case '\n':
11889 if (func & STR_FUNC_QWORDS) break;
11890 if (func & STR_FUNC_EXPAND) continue;
11891 tokadd('\\');
11892 break;
11893
11894 case '\\':
11895 if (func & STR_FUNC_ESCAPE) tokadd(c);
11896 break;
11897
11898 case 'u':
11899 if ((func & STR_FUNC_EXPAND) == 0) {
11900 tokadd('\\');
11901 break;
11902 }
11903 parser_tokadd_utf8(parser, &enc, 1,
11904 func & STR_FUNC_SYMBOL,
11905 func & STR_FUNC_REGEXP);
11906 if (has_nonascii && enc != *encp) {
11907 mixed_escape(beg, enc, *encp);
11908 }
11909 continue;
11910
11911 default:
11912 if (func & STR_FUNC_REGEXP) {
11913 pushback(c);
11914 if ((c = tokadd_escape(&enc)) < 0)
11915 return -1;
11916 if (has_nonascii && enc != *encp) {
11917 mixed_escape(beg, enc, *encp);
11918 }
11919 continue;
11920 }
11921 else if (func & STR_FUNC_EXPAND) {
11922 pushback(c);
11923 if (func & STR_FUNC_ESCAPE) tokadd('\\');
11924 c = read_escape(0, &enc);
11925 }
11926 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11927
11928 }
11929 else if (c != term && !(paren && c == paren)) {
11930 tokadd('\\');
11931 pushback(c);
11932 continue;
11933 }
11934 }
11935 }
11936 else if (!parser_isascii()) {
11937 has_nonascii = 1;
11938 if (enc != *encp) {
11939 mixed_error(enc, *encp);
11940 continue;
11941 }
11942 if (tokadd_mbchar(c) == -1) return -1;
11943 continue;
11944 }
11945 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11946 pushback(c);
11947 break;
11948 }
11949 if (c & 0x80) {
11950 has_nonascii = 1;
11951 if (enc != *encp) {
11952 mixed_error(enc, *encp);
11953 continue;
11954 }
11955 }
11956 tokadd(c);
11957 }
11958 *encp = enc;
11959 return c;
11960 }
11961
11962 #define NEW_STRTERM(func, term, paren) \
11963 rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
11964
11965 static int
11966 parser_parse_string(struct parser_params *parser, NODE *quote)
11967 {
11968 int func = (int)quote->nd_func;
11969 int term = nd_term(quote);
11970 int paren = nd_paren(quote);
11971 int c, space = 0;
11972 rb_encoding *enc = parser->enc;
11973
11974 if (func == -1) return tSTRING_END;
11975 c = nextc();
11976 if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11977 do {c = nextc();} while (ISSPACE(c));
11978 space = 1;
11979 }
11980 if (c == term && !quote->nd_nest) {
11981 if (func & STR_FUNC_QWORDS) {
11982 quote->nd_func = -1;
11983 return ' ';
11984 }
11985 if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
11986 set_yylval_num(regx_options());
11987 return tREGEXP_END;
11988 }
11989 if (space) {
11990 pushback(c);
11991 return ' ';
11992 }
11993 newtok();
11994 if ((func & STR_FUNC_EXPAND) && c == '#') {
11995 switch (c = nextc()) {
11996 case '$':
11997 case '@':
11998 pushback(c);
11999 return tSTRING_DVAR;
12000 case '{':
12001 return tSTRING_DBEG;
12002 }
12003 tokadd('#');
12004 }
12005 pushback(c);
12006 if (tokadd_string(func, term, paren, "e->nd_nest,
12007 &enc) == -1) {
12008 ruby_sourceline = nd_line(quote);
12009 if (func & STR_FUNC_REGEXP) {
12010 if (parser->eofp)
12011 compile_error(PARSER_ARG "unterminated regexp meets end of file");
12012 return tREGEXP_END;
12013 }
12014 else {
12015 if (parser->eofp)
12016 compile_error(PARSER_ARG "unterminated string meets end of file");
12017 return tSTRING_END;
12018 }
12019 }
12020
12021 tokfix();
12022 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12023
12024 #ifdef RIPPER
12025 if (!NIL_P(parser->delayed)){
12026 ptrdiff_t len = lex_p - parser->tokp;
12027 if (len > 0) {
12028 rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
12029 }
12030 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12031 parser->tokp = lex_p;
12032 }
12033 #endif
12034
12035 return tSTRING_CONTENT;
12036 }
12037
12038 static int
12039 parser_heredoc_identifier(struct parser_params *parser)
12040 {
12041 int c = nextc(), term, func = 0;
12042 long len;
12043
12044 if (c == '-') {
12045 c = nextc();
12046 func = STR_FUNC_INDENT;
12047 }
12048 switch (c) {
12049 case '\'':
12050 func |= str_squote; goto quoted;
12051 case '"':
12052 func |= str_dquote; goto quoted;
12053 case '`':
12054 func |= str_xquote;
12055 quoted:
12056 newtok();
12057 tokadd(func);
12058 term = c;
12059 while ((c = nextc()) != -1 && c != term) {
12060 if (tokadd_mbchar(c) == -1) return 0;
12061 }
12062 if (c == -1) {
12063 compile_error(PARSER_ARG "unterminated here document identifier");
12064 return 0;
12065 }
12066 break;
12067
12068 default:
12069 if (!parser_is_identchar()) {
12070 pushback(c);
12071 if (func & STR_FUNC_INDENT) {
12072 pushback('-');
12073 }
12074 return 0;
12075 }
12076 newtok();
12077 term = '"';
12078 tokadd(func |= str_dquote);
12079 do {
12080 if (tokadd_mbchar(c) == -1) return 0;
12081 } while ((c = nextc()) != -1 && parser_is_identchar());
12082 pushback(c);
12083 break;
12084 }
12085
12086 tokfix();
12087 #ifdef RIPPER
12088 ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
12089 #endif
12090 len = lex_p - lex_pbeg;
12091 lex_goto_eol(parser);
12092 lex_strterm = rb_node_newnode(NODE_HEREDOC,
12093 STR_NEW(tok(), toklen()),
12094 len,
12095 lex_lastline);
12096 nd_set_line(lex_strterm, ruby_sourceline);
12097 ripper_flush(parser);
12098 return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
12099 }
12100
12101 static void
12102 parser_heredoc_restore(struct parser_params *parser, NODE *here)
12103 {
12104 VALUE line;
12105
12106 line = here->nd_orig;
12107 lex_lastline = line;
12108 lex_pbeg = RSTRING_PTR(line);
12109 lex_pend = lex_pbeg + RSTRING_LEN(line);
12110 lex_p = lex_pbeg + here->nd_nth;
12111 heredoc_end = ruby_sourceline;
12112 ruby_sourceline = nd_line(here);
12113 dispose_string(here->nd_lit);
12114 rb_gc_force_recycle((VALUE)here);
12115 ripper_flush(parser);
12116 }
12117
12118 static int
12119 parser_whole_match_p(struct parser_params *parser,
12120 const char *eos, long len, int indent)
12121 {
12122 const char *p = lex_pbeg;
12123 long n;
12124
12125 if (indent) {
12126 while (*p && ISSPACE(*p)) p++;
12127 }
12128 n = lex_pend - (p + len);
12129 if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE;
12130 return strncmp(eos, p, len) == 0;
12131 }
12132
12133 static int
12134 parser_here_document(struct parser_params *parser, NODE *here)
12135 {
12136 int c, func, indent = 0;
12137 const char *eos, *p, *pend;
12138 long len;
12139 VALUE str = 0;
12140 rb_encoding *enc = parser->enc;
12141
12142 eos = RSTRING_PTR(here->nd_lit);
12143 len = RSTRING_LEN(here->nd_lit) - 1;
12144 indent = (func = *eos++) & STR_FUNC_INDENT;
12145
12146 if ((c = nextc()) == -1) {
12147 error:
12148 compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
12149 #ifdef RIPPER
12150 if (NIL_P(parser->delayed)) {
12151 ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
12152 }
12153 else {
12154 if (str ||
12155 ((len = lex_p - parser->tokp) > 0 &&
12156 (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
12157 rb_str_append(parser->delayed, str);
12158 }
12159 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12160 }
12161 lex_goto_eol(parser);
12162 #endif
12163 restore:
12164 heredoc_restore(lex_strterm);
12165 lex_strterm = 0;
12166 return 0;
12167 }
12168 if (was_bol() && whole_match_p(eos, len, indent)) {
12169 heredoc_restore(lex_strterm);
12170 return tSTRING_END;
12171 }
12172
12173 if (!(func & STR_FUNC_EXPAND)) {
12174 do {
12175 p = RSTRING_PTR(lex_lastline);
12176 pend = lex_pend;
12177 if (pend > p) {
12178 switch (pend[-1]) {
12179 case '\n':
12180 if (--pend == p || pend[-1] != '\r') {
12181 pend++;
12182 break;
12183 }
12184 case '\r':
12185 --pend;
12186 }
12187 }
12188 if (str)
12189 rb_str_cat(str, p, pend - p);
12190 else
12191 str = STR_NEW(p, pend - p);
12192 if (pend < lex_pend) rb_str_cat(str, "\n", 1);
12193 lex_goto_eol(parser);
12194 if (nextc() == -1) {
12195 if (str) dispose_string(str);
12196 goto error;
12197 }
12198 } while (!whole_match_p(eos, len, indent));
12199 }
12200 else {
12201
12202 newtok();
12203 if (c == '#') {
12204 switch (c = nextc()) {
12205 case '$':
12206 case '@':
12207 pushback(c);
12208 return tSTRING_DVAR;
12209 case '{':
12210 return tSTRING_DBEG;
12211 }
12212 tokadd('#');
12213 }
12214 do {
12215 pushback(c);
12216 if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
12217 if (parser->eofp) goto error;
12218 goto restore;
12219 }
12220 if (c != '\n') {
12221 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12222 return tSTRING_CONTENT;
12223 }
12224 tokadd(nextc());
12225
12226 if ((c = nextc()) == -1) goto error;
12227 } while (!whole_match_p(eos, len, indent));
12228 str = STR_NEW3(tok(), toklen(), enc, func);
12229 }
12230 #ifdef RIPPER
12231 if (!NIL_P(parser->delayed))
12232 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12233 lex_goto_eol(parser);
12234 ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
12235 #endif
12236 heredoc_restore(lex_strterm);
12237 lex_strterm = NEW_STRTERM(-1, 0, 0);
12238 set_yylval_str(str);
12239 return tSTRING_CONTENT;
12240 }
12241
12242 #include "lex.c"
12243
12244 static void
12245 arg_ambiguous_gen(struct parser_params *parser)
12246 {
12247 #ifndef RIPPER
12248 rb_warning0("ambiguous first argument; put parentheses or even spaces");
12249 #else
12250 dispatch0(arg_ambiguous);
12251 #endif
12252 }
12253 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
12254
12255 static ID
12256 formal_argument_gen(struct parser_params *parser, ID lhs)
12257 {
12258 #ifndef RIPPER
12259 if (!is_local_id(lhs))
12260 yyerror("formal argument must be local variable");
12261 #endif
12262 shadowing_lvar(lhs);
12263 return lhs;
12264 }
12265
12266 static int
12267 lvar_defined_gen(struct parser_params *parser, ID id)
12268 {
12269 return (dyna_in_block() && dvar_defined(id)) || local_id(id);
12270 }
12271
12272
12273 static long
12274 parser_encode_length(struct parser_params *parser, const char *name, long len)
12275 {
12276 long nlen;
12277
12278 if (len > 5 && name[nlen = len - 5] == '-') {
12279 if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
12280 return nlen;
12281 }
12282 if (len > 4 && name[nlen = len - 4] == '-') {
12283 if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
12284 return nlen;
12285 if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
12286 !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
12287
12288 return nlen;
12289 }
12290 return len;
12291 }
12292
12293 static void
12294 parser_set_encode(struct parser_params *parser, const char *name)
12295 {
12296 int idx = rb_enc_find_index(name);
12297 rb_encoding *enc;
12298 VALUE excargs[3];
12299
12300 if (idx < 0) {
12301 VALUE rb_make_backtrace(void);
12302 VALUE rb_make_exception(int, VALUE*);
12303
12304 excargs[1] = rb_sprintf("unknown encoding name: %s", name);
12305 error:
12306 excargs[0] = rb_eArgError;
12307 excargs[2] = rb_make_backtrace();
12308 rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
12309 rb_exc_raise(rb_make_exception(3, excargs));
12310 }
12311 enc = rb_enc_from_index(idx);
12312 if (!rb_enc_asciicompat(enc)) {
12313 excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
12314 goto error;
12315 }
12316 parser->enc = enc;
12317 #ifndef RIPPER
12318 if (ruby_debug_lines) {
12319 long i, n = RARRAY_LEN(ruby_debug_lines);
12320 const VALUE *p = RARRAY_PTR(ruby_debug_lines);
12321 for (i = 0; i < n; ++i) {
12322 rb_enc_associate_index(*p, idx);
12323 }
12324 }
12325 #endif
12326 }
12327
12328 static int
12329 comment_at_top(struct parser_params *parser)
12330 {
12331 const char *p = lex_pbeg, *pend = lex_p - 1;
12332 if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
12333 while (p < pend) {
12334 if (!ISSPACE(*p)) return 0;
12335 p++;
12336 }
12337 return 1;
12338 }
12339
12340 #ifndef RIPPER
12341 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
12342 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
12343
12344 static void
12345 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
12346 {
12347 if (!comment_at_top(parser)) {
12348 return;
12349 }
12350 parser_set_encode(parser, val);
12351 }
12352
12353 struct magic_comment {
12354 const char *name;
12355 rb_magic_comment_setter_t func;
12356 rb_magic_comment_length_t length;
12357 };
12358
12359 static const struct magic_comment magic_comments[] = {
12360 {"coding", magic_comment_encoding, parser_encode_length},
12361 {"encoding", magic_comment_encoding, parser_encode_length},
12362 };
12363 #endif
12364
12365 static const char *
12366 magic_comment_marker(const char *str, long len)
12367 {
12368 long i = 2;
12369
12370 while (i < len) {
12371 switch (str[i]) {
12372 case '-':
12373 if (str[i-1] == '*' && str[i-2] == '-') {
12374 return str + i + 1;
12375 }
12376 i += 2;
12377 break;
12378 case '*':
12379 if (i + 1 >= len) return 0;
12380 if (str[i+1] != '-') {
12381 i += 4;
12382 }
12383 else if (str[i-1] != '-') {
12384 i += 2;
12385 }
12386 else {
12387 return str + i + 2;
12388 }
12389 break;
12390 default:
12391 i += 3;
12392 break;
12393 }
12394 }
12395 return 0;
12396 }
12397
12398 static int
12399 parser_magic_comment(struct parser_params *parser, const char *str, long len)
12400 {
12401 VALUE name = 0, val = 0;
12402 const char *beg, *end, *vbeg, *vend;
12403 #define str_copy(_s, _p, _n) ((_s) \
12404 ? (rb_str_resize((_s), (_n)), \
12405 MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
12406 : ((_s) = STR_NEW((_p), (_n))))
12407
12408 if (len <= 7) return FALSE;
12409 if (!(beg = magic_comment_marker(str, len))) return FALSE;
12410 if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
12411 str = beg;
12412 len = end - beg - 3;
12413
12414
12415 while (len > 0) {
12416 #ifndef RIPPER
12417 const struct magic_comment *p = magic_comments;
12418 #endif
12419 char *s;
12420 int i;
12421 long n = 0;
12422
12423 for (; len > 0 && *str; str++, --len) {
12424 switch (*str) {
12425 case '\'': case '"': case ':': case ';':
12426 continue;
12427 }
12428 if (!ISSPACE(*str)) break;
12429 }
12430 for (beg = str; len > 0; str++, --len) {
12431 switch (*str) {
12432 case '\'': case '"': case ':': case ';':
12433 break;
12434 default:
12435 if (ISSPACE(*str)) break;
12436 continue;
12437 }
12438 break;
12439 }
12440 for (end = str; len > 0 && ISSPACE(*str); str++, --len);
12441 if (!len) break;
12442 if (*str != ':') continue;
12443
12444 do str++; while (--len > 0 && ISSPACE(*str));
12445 if (!len) break;
12446 if (*str == '"') {
12447 for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
12448 if (*str == '\\') {
12449 --len;
12450 ++str;
12451 }
12452 }
12453 vend = str;
12454 if (len) {
12455 --len;
12456 ++str;
12457 }
12458 }
12459 else {
12460 for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
12461 vend = str;
12462 }
12463 while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
12464
12465 n = end - beg;
12466 str_copy(name, beg, n);
12467 s = RSTRING_PTR(name);
12468 for (i = 0; i < n; ++i) {
12469 if (s[i] == '-') s[i] = '_';
12470 }
12471 #ifndef RIPPER
12472 do {
12473 if (STRNCASECMP(p->name, s, n) == 0) {
12474 n = vend - vbeg;
12475 if (p->length) {
12476 n = (*p->length)(parser, vbeg, n);
12477 }
12478 str_copy(val, vbeg, n);
12479 (*p->func)(parser, s, RSTRING_PTR(val));
12480 break;
12481 }
12482 } while (++p < magic_comments + numberof(magic_comments));
12483 #else
12484 dispatch2(magic_comment, name, val);
12485 #endif
12486 }
12487
12488 return TRUE;
12489 }
12490
12491 static void
12492 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
12493 {
12494 int sep = 0;
12495 const char *beg = str;
12496 VALUE s;
12497
12498 for (;;) {
12499 if (send - str <= 6) return;
12500 switch (str[6]) {
12501 case 'C': case 'c': str += 6; continue;
12502 case 'O': case 'o': str += 5; continue;
12503 case 'D': case 'd': str += 4; continue;
12504 case 'I': case 'i': str += 3; continue;
12505 case 'N': case 'n': str += 2; continue;
12506 case 'G': case 'g': str += 1; continue;
12507 case '=': case ':':
12508 sep = 1;
12509 str += 6;
12510 break;
12511 default:
12512 str += 6;
12513 if (ISSPACE(*str)) break;
12514 continue;
12515 }
12516 if (STRNCASECMP(str-6, "coding", 6) == 0) break;
12517 }
12518 for (;;) {
12519 do {
12520 if (++str >= send) return;
12521 } while (ISSPACE(*str));
12522 if (sep) break;
12523 if (*str != '=' && *str != ':') return;
12524 sep = 1;
12525 str++;
12526 }
12527 beg = str;
12528 while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
12529 s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
12530 parser_set_encode(parser, RSTRING_PTR(s));
12531 rb_str_resize(s, 0);
12532 }
12533
12534 static void
12535 parser_prepare(struct parser_params *parser)
12536 {
12537 int c = nextc();
12538 switch (c) {
12539 case '#':
12540 if (peek('!')) parser->has_shebang = 1;
12541 break;
12542 case 0xef:
12543 if (lex_pend - lex_p >= 2 &&
12544 (unsigned char)lex_p[0] == 0xbb &&
12545 (unsigned char)lex_p[1] == 0xbf) {
12546 parser->enc = rb_utf8_encoding();
12547 lex_p += 2;
12548 lex_pbeg = lex_p;
12549 return;
12550 }
12551 break;
12552 case EOF:
12553 return;
12554 }
12555 pushback(c);
12556 parser->enc = rb_enc_get(lex_lastline);
12557 }
12558
12559 #define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG)
12560 #define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_ENDFN)
12561 #define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS)
12562 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
12563
12564 #ifndef RIPPER
12565 #define ambiguous_operator(op, syn) ( \
12566 rb_warning0("`"op"' after local variable is interpreted as binary operator"), \
12567 rb_warning0("even though it seems like "syn""))
12568 #else
12569 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
12570 #endif
12571 #define warn_balanced(op, syn) \
12572 (last_state != EXPR_CLASS && last_state != EXPR_DOT && \
12573 last_state != EXPR_FNAME && last_state != EXPR_ENDFN && \
12574 last_state != EXPR_ENDARG && \
12575 space_seen && !ISSPACE(c) && \
12576 (ambiguous_operator(op, syn), 0))
12577
12578 static int
12579 parser_yylex(struct parser_params *parser)
12580 {
12581 register int c;
12582 int space_seen = 0;
12583 int cmd_state;
12584 enum lex_state_e last_state;
12585 rb_encoding *enc;
12586 int mb;
12587 #ifdef RIPPER
12588 int fallthru = FALSE;
12589 #endif
12590
12591 if (lex_strterm) {
12592 int token;
12593 if (nd_type(lex_strterm) == NODE_HEREDOC) {
12594 token = here_document(lex_strterm);
12595 if (token == tSTRING_END) {
12596 lex_strterm = 0;
12597 lex_state = EXPR_END;
12598 }
12599 }
12600 else {
12601 token = parse_string(lex_strterm);
12602 if (token == tSTRING_END || token == tREGEXP_END) {
12603 rb_gc_force_recycle((VALUE)lex_strterm);
12604 lex_strterm = 0;
12605 lex_state = EXPR_END;
12606 }
12607 }
12608 return token;
12609 }
12610 cmd_state = command_start;
12611 command_start = FALSE;
12612 retry:
12613 last_state = lex_state;
12614 switch (c = nextc()) {
12615 case '\0':
12616 case '\004':
12617 case '\032':
12618 case -1:
12619 return 0;
12620
12621
12622 case ' ': case '\t': case '\f': case '\r':
12623 case '\13':
12624 space_seen = 1;
12625 #ifdef RIPPER
12626 while ((c = nextc())) {
12627 switch (c) {
12628 case ' ': case '\t': case '\f': case '\r':
12629 case '\13':
12630 break;
12631 default:
12632 goto outofloop;
12633 }
12634 }
12635 outofloop:
12636 pushback(c);
12637 ripper_dispatch_scan_event(parser, tSP);
12638 #endif
12639 goto retry;
12640
12641 case '#':
12642
12643 if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
12644 if (comment_at_top(parser)) {
12645 set_file_encoding(parser, lex_p, lex_pend);
12646 }
12647 }
12648 lex_p = lex_pend;
12649 #ifdef RIPPER
12650 ripper_dispatch_scan_event(parser, tCOMMENT);
12651 fallthru = TRUE;
12652 #endif
12653
12654 case '\n':
12655 switch (lex_state) {
12656 case EXPR_BEG:
12657 case EXPR_FNAME:
12658 case EXPR_DOT:
12659 case EXPR_CLASS:
12660 case EXPR_VALUE:
12661 #ifdef RIPPER
12662 if (!fallthru) {
12663 ripper_dispatch_scan_event(parser, tIGNORED_NL);
12664 }
12665 fallthru = FALSE;
12666 #endif
12667 goto retry;
12668 default:
12669 break;
12670 }
12671 while ((c = nextc())) {
12672 switch (c) {
12673 case ' ': case '\t': case '\f': case '\r':
12674 case '\13':
12675 space_seen = 1;
12676 break;
12677 case '.': {
12678 if ((c = nextc()) != '.') {
12679 pushback(c);
12680 pushback('.');
12681 goto retry;
12682 }
12683 }
12684 default:
12685 --ruby_sourceline;
12686 lex_nextline = lex_lastline;
12687 case -1:
12688 lex_goto_eol(parser);
12689 #ifdef RIPPER
12690 if (c != -1) {
12691 parser->tokp = lex_p;
12692 }
12693 #endif
12694 goto normal_newline;
12695 }
12696 }
12697 normal_newline:
12698 command_start = TRUE;
12699 lex_state = EXPR_BEG;
12700 return '\n';
12701
12702 case '*':
12703 if ((c = nextc()) == '*') {
12704 if ((c = nextc()) == '=') {
12705 set_yylval_id(tPOW);
12706 lex_state = EXPR_BEG;
12707 return tOP_ASGN;
12708 }
12709 pushback(c);
12710 c = tPOW;
12711 }
12712 else {
12713 if (c == '=') {
12714 set_yylval_id('*');
12715 lex_state = EXPR_BEG;
12716 return tOP_ASGN;
12717 }
12718 pushback(c);
12719 if (IS_SPCARG(c)) {
12720 rb_warning0("`*' interpreted as argument prefix");
12721 c = tSTAR;
12722 }
12723 else if (IS_BEG()) {
12724 c = tSTAR;
12725 }
12726 else {
12727 warn_balanced("*", "argument prefix");
12728 c = '*';
12729 }
12730 }
12731 switch (lex_state) {
12732 case EXPR_FNAME: case EXPR_DOT:
12733 lex_state = EXPR_ARG; break;
12734 default:
12735 lex_state = EXPR_BEG; break;
12736 }
12737 return c;
12738
12739 case '!':
12740 c = nextc();
12741 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12742 lex_state = EXPR_ARG;
12743 if (c == '@') {
12744 return '!';
12745 }
12746 }
12747 else {
12748 lex_state = EXPR_BEG;
12749 }
12750 if (c == '=') {
12751 return tNEQ;
12752 }
12753 if (c == '~') {
12754 return tNMATCH;
12755 }
12756 pushback(c);
12757 return '!';
12758
12759 case '=':
12760 if (was_bol()) {
12761
12762 if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
12763 #ifdef RIPPER
12764 int first_p = TRUE;
12765
12766 lex_goto_eol(parser);
12767 ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
12768 #endif
12769 for (;;) {
12770 lex_goto_eol(parser);
12771 #ifdef RIPPER
12772 if (!first_p) {
12773 ripper_dispatch_scan_event(parser, tEMBDOC);
12774 }
12775 first_p = FALSE;
12776 #endif
12777 c = nextc();
12778 if (c == -1) {
12779 compile_error(PARSER_ARG "embedded document meets end of file");
12780 return 0;
12781 }
12782 if (c != '=') continue;
12783 if (strncmp(lex_p, "end", 3) == 0 &&
12784 (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
12785 break;
12786 }
12787 }
12788 lex_goto_eol(parser);
12789 #ifdef RIPPER
12790 ripper_dispatch_scan_event(parser, tEMBDOC_END);
12791 #endif
12792 goto retry;
12793 }
12794 }
12795
12796 switch (lex_state) {
12797 case EXPR_FNAME: case EXPR_DOT:
12798 lex_state = EXPR_ARG; break;
12799 default:
12800 lex_state = EXPR_BEG; break;
12801 }
12802 if ((c = nextc()) == '=') {
12803 if ((c = nextc()) == '=') {
12804 return tEQQ;
12805 }
12806 pushback(c);
12807 return tEQ;
12808 }
12809 if (c == '~') {
12810 return tMATCH;
12811 }
12812 else if (c == '>') {
12813 return tASSOC;
12814 }
12815 pushback(c);
12816 return '=';
12817
12818 case '<':
12819 last_state = lex_state;
12820 c = nextc();
12821 if (c == '<' &&
12822 lex_state != EXPR_DOT &&
12823 lex_state != EXPR_CLASS &&
12824 !IS_END() &&
12825 (!IS_ARG() || space_seen)) {
12826 int token = heredoc_identifier();
12827 if (token) return token;
12828 }
12829 switch (lex_state) {
12830 case EXPR_FNAME: case EXPR_DOT:
12831 lex_state = EXPR_ARG; break;
12832 default:
12833 lex_state = EXPR_BEG; break;
12834 }
12835 if (c == '=') {
12836 if ((c = nextc()) == '>') {
12837 return tCMP;
12838 }
12839 pushback(c);
12840 return tLEQ;
12841 }
12842 if (c == '<') {
12843 if ((c = nextc()) == '=') {
12844 set_yylval_id(tLSHFT);
12845 lex_state = EXPR_BEG;
12846 return tOP_ASGN;
12847 }
12848 pushback(c);
12849 warn_balanced("<<", "here document");
12850 return tLSHFT;
12851 }
12852 pushback(c);
12853 return '<';
12854
12855 case '>':
12856 switch (lex_state) {
12857 case EXPR_FNAME: case EXPR_DOT:
12858 lex_state = EXPR_ARG; break;
12859 default:
12860 lex_state = EXPR_BEG; break;
12861 }
12862 if ((c = nextc()) == '=') {
12863 return tGEQ;
12864 }
12865 if (c == '>') {
12866 if ((c = nextc()) == '=') {
12867 set_yylval_id(tRSHFT);
12868 lex_state = EXPR_BEG;
12869 return tOP_ASGN;
12870 }
12871 pushback(c);
12872 return tRSHFT;
12873 }
12874 pushback(c);
12875 return '>';
12876
12877 case '"':
12878 lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
12879 return tSTRING_BEG;
12880
12881 case '`':
12882 if (lex_state == EXPR_FNAME) {
12883 lex_state = EXPR_ENDFN;
12884 return c;
12885 }
12886 if (lex_state == EXPR_DOT) {
12887 if (cmd_state)
12888 lex_state = EXPR_CMDARG;
12889 else
12890 lex_state = EXPR_ARG;
12891 return c;
12892 }
12893 lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
12894 return tXSTRING_BEG;
12895
12896 case '\'':
12897 lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
12898 return tSTRING_BEG;
12899
12900 case '?':
12901 if (IS_END()) {
12902 lex_state = EXPR_VALUE;
12903 return '?';
12904 }
12905 c = nextc();
12906 if (c == -1) {
12907 compile_error(PARSER_ARG "incomplete character syntax");
12908 return 0;
12909 }
12910 if (rb_enc_isspace(c, parser->enc)) {
12911 if (!IS_ARG()) {
12912 int c2 = 0;
12913 switch (c) {
12914 case ' ':
12915 c2 = 's';
12916 break;
12917 case '\n':
12918 c2 = 'n';
12919 break;
12920 case '\t':
12921 c2 = 't';
12922 break;
12923 case '\v':
12924 c2 = 'v';
12925 break;
12926 case '\r':
12927 c2 = 'r';
12928 break;
12929 case '\f':
12930 c2 = 'f';
12931 break;
12932 }
12933 if (c2) {
12934 rb_warnI("invalid character syntax; use ?\\%c", c2);
12935 }
12936 }
12937 ternary:
12938 pushback(c);
12939 lex_state = EXPR_VALUE;
12940 return '?';
12941 }
12942 newtok();
12943 enc = parser->enc;
12944 if (!parser_isascii()) {
12945 if (tokadd_mbchar(c) == -1) return 0;
12946 }
12947 else if ((rb_enc_isalnum(c, parser->enc) || c == '_') &&
12948 lex_p < lex_pend && is_identchar(lex_p, lex_pend, parser->enc)) {
12949 goto ternary;
12950 }
12951 else if (c == '\\') {
12952 if (peek('u')) {
12953 nextc();
12954 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
12955 if (0x80 <= c) {
12956 tokaddmbc(c, enc);
12957 }
12958 else {
12959 tokadd(c);
12960 }
12961 }
12962 else {
12963 c = read_escape(0, &enc);
12964 tokadd(c);
12965 }
12966 }
12967 else {
12968 tokadd(c);
12969 }
12970 tokfix();
12971 set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
12972 lex_state = EXPR_END;
12973 return tCHAR;
12974
12975 case '&':
12976 if ((c = nextc()) == '&') {
12977 lex_state = EXPR_BEG;
12978 if ((c = nextc()) == '=') {
12979 set_yylval_id(tANDOP);
12980 lex_state = EXPR_BEG;
12981 return tOP_ASGN;
12982 }
12983 pushback(c);
12984 return tANDOP;
12985 }
12986 else if (c == '=') {
12987 set_yylval_id('&');
12988 lex_state = EXPR_BEG;
12989 return tOP_ASGN;
12990 }
12991 pushback(c);
12992 if (IS_SPCARG(c)) {
12993 rb_warning0("`&' interpreted as argument prefix");
12994 c = tAMPER;
12995 }
12996 else if (IS_BEG()) {
12997 c = tAMPER;
12998 }
12999 else {
13000 warn_balanced("&", "argument prefix");
13001 c = '&';
13002 }
13003 switch (lex_state) {
13004 case EXPR_FNAME: case EXPR_DOT:
13005 lex_state = EXPR_ARG; break;
13006 default:
13007 lex_state = EXPR_BEG;
13008 }
13009 return c;
13010
13011 case '|':
13012 if ((c = nextc()) == '|') {
13013 lex_state = EXPR_BEG;
13014 if ((c = nextc()) == '=') {
13015 set_yylval_id(tOROP);
13016 lex_state = EXPR_BEG;
13017 return tOP_ASGN;
13018 }
13019 pushback(c);
13020 return tOROP;
13021 }
13022 if (c == '=') {
13023 set_yylval_id('|');
13024 lex_state = EXPR_BEG;
13025 return tOP_ASGN;
13026 }
13027 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13028 lex_state = EXPR_ARG;
13029 }
13030 else {
13031 lex_state = EXPR_BEG;
13032 }
13033 pushback(c);
13034 return '|';
13035
13036 case '+':
13037 c = nextc();
13038 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13039 lex_state = EXPR_ARG;
13040 if (c == '@') {
13041 return tUPLUS;
13042 }
13043 pushback(c);
13044 return '+';
13045 }
13046 if (c == '=') {
13047 set_yylval_id('+');
13048 lex_state = EXPR_BEG;
13049 return tOP_ASGN;
13050 }
13051 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13052 lex_state = EXPR_BEG;
13053 pushback(c);
13054 if (c != -1 && ISDIGIT(c)) {
13055 c = '+';
13056 goto start_num;
13057 }
13058 return tUPLUS;
13059 }
13060 lex_state = EXPR_BEG;
13061 pushback(c);
13062 warn_balanced("+", "unary operator");
13063 return '+';
13064
13065 case '-':
13066 c = nextc();
13067 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13068 lex_state = EXPR_ARG;
13069 if (c == '@') {
13070 return tUMINUS;
13071 }
13072 pushback(c);
13073 return '-';
13074 }
13075 if (c == '=') {
13076 set_yylval_id('-');
13077 lex_state = EXPR_BEG;
13078 return tOP_ASGN;
13079 }
13080 if (c == '>') {
13081 lex_state = EXPR_ARG;
13082 return tLAMBDA;
13083 }
13084 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13085 lex_state = EXPR_BEG;
13086 pushback(c);
13087 if (c != -1 && ISDIGIT(c)) {
13088 return tUMINUS_NUM;
13089 }
13090 return tUMINUS;
13091 }
13092 lex_state = EXPR_BEG;
13093 pushback(c);
13094 warn_balanced("-", "unary operator");
13095 return '-';
13096
13097 case '.':
13098 lex_state = EXPR_BEG;
13099 if ((c = nextc()) == '.') {
13100 if ((c = nextc()) == '.') {
13101 return tDOT3;
13102 }
13103 pushback(c);
13104 return tDOT2;
13105 }
13106 pushback(c);
13107 if (c != -1 && ISDIGIT(c)) {
13108 yyerror("no .<digit> floating literal anymore; put 0 before dot");
13109 }
13110 lex_state = EXPR_DOT;
13111 return '.';
13112
13113 start_num:
13114 case '0': case '1': case '2': case '3': case '4':
13115 case '5': case '6': case '7': case '8': case '9':
13116 {
13117 int is_float, seen_point, seen_e, nondigit;
13118
13119 is_float = seen_point = seen_e = nondigit = 0;
13120 lex_state = EXPR_END;
13121 newtok();
13122 if (c == '-' || c == '+') {
13123 tokadd(c);
13124 c = nextc();
13125 }
13126 if (c == '0') {
13127 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13128 int start = toklen();
13129 c = nextc();
13130 if (c == 'x' || c == 'X') {
13131
13132 c = nextc();
13133 if (c != -1 && ISXDIGIT(c)) {
13134 do {
13135 if (c == '_') {
13136 if (nondigit) break;
13137 nondigit = c;
13138 continue;
13139 }
13140 if (!ISXDIGIT(c)) break;
13141 nondigit = 0;
13142 tokadd(c);
13143 } while ((c = nextc()) != -1);
13144 }
13145 pushback(c);
13146 tokfix();
13147 if (toklen() == start) {
13148 no_digits();
13149 }
13150 else if (nondigit) goto trailing_uc;
13151 set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE));
13152 return tINTEGER;
13153 }
13154 if (c == 'b' || c == 'B') {
13155
13156 c = nextc();
13157 if (c == '0' || c == '1') {
13158 do {
13159 if (c == '_') {
13160 if (nondigit) break;
13161 nondigit = c;
13162 continue;
13163 }
13164 if (c != '0' && c != '1') break;
13165 nondigit = 0;
13166 tokadd(c);
13167 } while ((c = nextc()) != -1);
13168 }
13169 pushback(c);
13170 tokfix();
13171 if (toklen() == start) {
13172 no_digits();
13173 }
13174 else if (nondigit) goto trailing_uc;
13175 set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE));
13176 return tINTEGER;
13177 }
13178 if (c == 'd' || c == 'D') {
13179
13180 c = nextc();
13181 if (c != -1 && ISDIGIT(c)) {
13182 do {
13183 if (c == '_') {
13184 if (nondigit) break;
13185 nondigit = c;
13186 continue;
13187 }
13188 if (!ISDIGIT(c)) break;
13189 nondigit = 0;
13190 tokadd(c);
13191 } while ((c = nextc()) != -1);
13192 }
13193 pushback(c);
13194 tokfix();
13195 if (toklen() == start) {
13196 no_digits();
13197 }
13198 else if (nondigit) goto trailing_uc;
13199 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13200 return tINTEGER;
13201 }
13202 if (c == '_') {
13203
13204 goto octal_number;
13205 }
13206 if (c == 'o' || c == 'O') {
13207
13208 c = nextc();
13209 if (c == -1 || c == '_' || !ISDIGIT(c)) {
13210 no_digits();
13211 }
13212 }
13213 if (c >= '0' && c <= '7') {
13214
13215 octal_number:
13216 do {
13217 if (c == '_') {
13218 if (nondigit) break;
13219 nondigit = c;
13220 continue;
13221 }
13222 if (c < '0' || c > '9') break;
13223 if (c > '7') goto invalid_octal;
13224 nondigit = 0;
13225 tokadd(c);
13226 } while ((c = nextc()) != -1);
13227 if (toklen() > start) {
13228 pushback(c);
13229 tokfix();
13230 if (nondigit) goto trailing_uc;
13231 set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE));
13232 return tINTEGER;
13233 }
13234 if (nondigit) {
13235 pushback(c);
13236 goto trailing_uc;
13237 }
13238 }
13239 if (c > '7' && c <= '9') {
13240 invalid_octal:
13241 yyerror("Invalid octal digit");
13242 }
13243 else if (c == '.' || c == 'e' || c == 'E') {
13244 tokadd('0');
13245 }
13246 else {
13247 pushback(c);
13248 set_yylval_literal(INT2FIX(0));
13249 return tINTEGER;
13250 }
13251 }
13252
13253 for (;;) {
13254 switch (c) {
13255 case '0': case '1': case '2': case '3': case '4':
13256 case '5': case '6': case '7': case '8': case '9':
13257 nondigit = 0;
13258 tokadd(c);
13259 break;
13260
13261 case '.':
13262 if (nondigit) goto trailing_uc;
13263 if (seen_point || seen_e) {
13264 goto decode_num;
13265 }
13266 else {
13267 int c0 = nextc();
13268 if (c0 == -1 || !ISDIGIT(c0)) {
13269 pushback(c0);
13270 goto decode_num;
13271 }
13272 c = c0;
13273 }
13274 tokadd('.');
13275 tokadd(c);
13276 is_float++;
13277 seen_point++;
13278 nondigit = 0;
13279 break;
13280
13281 case 'e':
13282 case 'E':
13283 if (nondigit) {
13284 pushback(c);
13285 c = nondigit;
13286 goto decode_num;
13287 }
13288 if (seen_e) {
13289 goto decode_num;
13290 }
13291 tokadd(c);
13292 seen_e++;
13293 is_float++;
13294 nondigit = c;
13295 c = nextc();
13296 if (c != '-' && c != '+') continue;
13297 tokadd(c);
13298 nondigit = c;
13299 break;
13300
13301 case '_':
13302 if (nondigit) goto decode_num;
13303 nondigit = c;
13304 break;
13305
13306 default:
13307 goto decode_num;
13308 }
13309 c = nextc();
13310 }
13311
13312 decode_num:
13313 pushback(c);
13314 if (nondigit) {
13315 char tmp[30];
13316 trailing_uc:
13317 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
13318 yyerror(tmp);
13319 }
13320 tokfix();
13321 if (is_float) {
13322 double d = strtod(tok(), 0);
13323 if (errno == ERANGE) {
13324 rb_warningS("Float %s out of range", tok());
13325 errno = 0;
13326 }
13327 set_yylval_literal(DBL2NUM(d));
13328 return tFLOAT;
13329 }
13330 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13331 return tINTEGER;
13332 }
13333
13334 case ')':
13335 case ']':
13336 paren_nest--;
13337 case '}':
13338 COND_LEXPOP();
13339 CMDARG_LEXPOP();
13340 if (c == ')')
13341 lex_state = EXPR_ENDFN;
13342 else
13343 lex_state = EXPR_ENDARG;
13344 return c;
13345
13346 case ':':
13347 c = nextc();
13348 if (c == ':') {
13349 if (IS_BEG() || lex_state == EXPR_CLASS || IS_SPCARG(-1)) {
13350 lex_state = EXPR_BEG;
13351 return tCOLON3;
13352 }
13353 lex_state = EXPR_DOT;
13354 return tCOLON2;
13355 }
13356 if (IS_END() || ISSPACE(c)) {
13357 pushback(c);
13358 warn_balanced(":", "symbol literal");
13359 lex_state = EXPR_BEG;
13360 return ':';
13361 }
13362 switch (c) {
13363 case '\'':
13364 lex_strterm = NEW_STRTERM(str_ssym, c, 0);
13365 break;
13366 case '"':
13367 lex_strterm = NEW_STRTERM(str_dsym, c, 0);
13368 break;
13369 default:
13370 pushback(c);
13371 break;
13372 }
13373 lex_state = EXPR_FNAME;
13374 return tSYMBEG;
13375
13376 case '/':
13377 if (IS_BEG()) {
13378 lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13379 return tREGEXP_BEG;
13380 }
13381 if ((c = nextc()) == '=') {
13382 set_yylval_id('/');
13383 lex_state = EXPR_BEG;
13384 return tOP_ASGN;
13385 }
13386 pushback(c);
13387 if (IS_SPCARG(c)) {
13388 arg_ambiguous();
13389 lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13390 return tREGEXP_BEG;
13391 }
13392 switch (lex_state) {
13393 case EXPR_FNAME: case EXPR_DOT:
13394 lex_state = EXPR_ARG; break;
13395 default:
13396 lex_state = EXPR_BEG; break;
13397 }
13398 warn_balanced("/", "regexp literal");
13399 return '/';
13400
13401 case '^':
13402 if ((c = nextc()) == '=') {
13403 set_yylval_id('^');
13404 lex_state = EXPR_BEG;
13405 return tOP_ASGN;
13406 }
13407 switch (lex_state) {
13408 case EXPR_FNAME: case EXPR_DOT:
13409 lex_state = EXPR_ARG; break;
13410 default:
13411 lex_state = EXPR_BEG; break;
13412 }
13413 pushback(c);
13414 return '^';
13415
13416 case ';':
13417 lex_state = EXPR_BEG;
13418 command_start = TRUE;
13419 return ';';
13420
13421 case ',':
13422 lex_state = EXPR_BEG;
13423 return ',';
13424
13425 case '~':
13426 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13427 if ((c = nextc()) != '@') {
13428 pushback(c);
13429 }
13430 lex_state = EXPR_ARG;
13431 }
13432 else {
13433 lex_state = EXPR_BEG;
13434 }
13435 return '~';
13436
13437 case '(':
13438 if (IS_BEG()) {
13439 c = tLPAREN;
13440 }
13441 else if (IS_SPCARG(-1)) {
13442 c = tLPAREN_ARG;
13443 }
13444 paren_nest++;
13445 COND_PUSH(0);
13446 CMDARG_PUSH(0);
13447 lex_state = EXPR_BEG;
13448 return c;
13449
13450 case '[':
13451 paren_nest++;
13452 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13453 lex_state = EXPR_ARG;
13454 if ((c = nextc()) == ']') {
13455 if ((c = nextc()) == '=') {
13456 return tASET;
13457 }
13458 pushback(c);
13459 return tAREF;
13460 }
13461 pushback(c);
13462 return '[';
13463 }
13464 else if (IS_BEG()) {
13465 c = tLBRACK;
13466 }
13467 else if (IS_ARG() && space_seen) {
13468 c = tLBRACK;
13469 }
13470 lex_state = EXPR_BEG;
13471 COND_PUSH(0);
13472 CMDARG_PUSH(0);
13473 return c;
13474
13475 case '{':
13476 if (lpar_beg && lpar_beg == paren_nest) {
13477 lex_state = EXPR_BEG;
13478 lpar_beg = 0;
13479 --paren_nest;
13480 COND_PUSH(0);
13481 CMDARG_PUSH(0);
13482 return tLAMBEG;
13483 }
13484 if (IS_ARG() || lex_state == EXPR_END || lex_state == EXPR_ENDFN)
13485 c = '{';
13486 else if (lex_state == EXPR_ENDARG)
13487 c = tLBRACE_ARG;
13488 else
13489 c = tLBRACE;
13490 COND_PUSH(0);
13491 CMDARG_PUSH(0);
13492 lex_state = EXPR_BEG;
13493 if (c != tLBRACE) command_start = TRUE;
13494 return c;
13495
13496 case '\\':
13497 c = nextc();
13498 if (c == '\n') {
13499 space_seen = 1;
13500 #ifdef RIPPER
13501 ripper_dispatch_scan_event(parser, tSP);
13502 #endif
13503 goto retry;
13504 }
13505 pushback(c);
13506 return '\\';
13507
13508 case '%':
13509 if (IS_BEG()) {
13510 int term;
13511 int paren;
13512
13513 c = nextc();
13514 quotation:
13515 if (c == -1 || !ISALNUM(c)) {
13516 term = c;
13517 c = 'Q';
13518 }
13519 else {
13520 term = nextc();
13521 if (rb_enc_isalnum(term, parser->enc) || !parser_isascii()) {
13522 yyerror("unknown type of %string");
13523 return 0;
13524 }
13525 }
13526 if (c == -1 || term == -1) {
13527 compile_error(PARSER_ARG "unterminated quoted string meets end of file");
13528 return 0;
13529 }
13530 paren = term;
13531 if (term == '(') term = ')';
13532 else if (term == '[') term = ']';
13533 else if (term == '{') term = '}';
13534 else if (term == '<') term = '>';
13535 else paren = 0;
13536
13537 switch (c) {
13538 case 'Q':
13539 lex_strterm = NEW_STRTERM(str_dquote, term, paren);
13540 return tSTRING_BEG;
13541
13542 case 'q':
13543 lex_strterm = NEW_STRTERM(str_squote, term, paren);
13544 return tSTRING_BEG;
13545
13546 case 'W':
13547 lex_strterm = NEW_STRTERM(str_dword, term, paren);
13548 do {c = nextc();} while (ISSPACE(c));
13549 pushback(c);
13550 return tWORDS_BEG;
13551
13552 case 'w':
13553 lex_strterm = NEW_STRTERM(str_sword, term, paren);
13554 do {c = nextc();} while (ISSPACE(c));
13555 pushback(c);
13556 return tQWORDS_BEG;
13557
13558 case 'x':
13559 lex_strterm = NEW_STRTERM(str_xquote, term, paren);
13560 return tXSTRING_BEG;
13561
13562 case 'r':
13563 lex_strterm = NEW_STRTERM(str_regexp, term, paren);
13564 return tREGEXP_BEG;
13565
13566 case 's':
13567 lex_strterm = NEW_STRTERM(str_ssym, term, paren);
13568 lex_state = EXPR_FNAME;
13569 return tSYMBEG;
13570
13571 default:
13572 yyerror("unknown type of %string");
13573 return 0;
13574 }
13575 }
13576 if ((c = nextc()) == '=') {
13577 set_yylval_id('%');
13578 lex_state = EXPR_BEG;
13579 return tOP_ASGN;
13580 }
13581 if (IS_SPCARG(c)) {
13582 goto quotation;
13583 }
13584 switch (lex_state) {
13585 case EXPR_FNAME: case EXPR_DOT:
13586 lex_state = EXPR_ARG; break;
13587 default:
13588 lex_state = EXPR_BEG; break;
13589 }
13590 pushback(c);
13591 warn_balanced("%%", "string literal");
13592 return '%';
13593
13594 case '$':
13595 lex_state = EXPR_END;
13596 newtok();
13597 c = nextc();
13598 switch (c) {
13599 case '_':
13600 c = nextc();
13601 if (parser_is_identchar()) {
13602 tokadd('$');
13603 tokadd('_');
13604 break;
13605 }
13606 pushback(c);
13607 c = '_';
13608
13609 case '~':
13610 case '*':
13611 case '$':
13612 case '?':
13613 case '!':
13614 case '@':
13615 case '/':
13616 case '\\':
13617 case ';':
13618 case ',':
13619 case '.':
13620 case '=':
13621 case ':':
13622 case '<':
13623 case '>':
13624 case '\"':
13625 tokadd('$');
13626 tokadd(c);
13627 tokfix();
13628 set_yylval_name(rb_intern(tok()));
13629 return tGVAR;
13630
13631 case '-':
13632 tokadd('$');
13633 tokadd(c);
13634 c = nextc();
13635 if (parser_is_identchar()) {
13636 if (tokadd_mbchar(c) == -1) return 0;
13637 }
13638 else {
13639 pushback(c);
13640 }
13641 gvar:
13642 tokfix();
13643 set_yylval_name(rb_intern(tok()));
13644 return tGVAR;
13645
13646 case '&':
13647 case '`':
13648 case '\'':
13649 case '+':
13650 if (last_state == EXPR_FNAME) {
13651 tokadd('$');
13652 tokadd(c);
13653 goto gvar;
13654 }
13655 set_yylval_node(NEW_BACK_REF(c));
13656 return tBACK_REF;
13657
13658 case '1': case '2': case '3':
13659 case '4': case '5': case '6':
13660 case '7': case '8': case '9':
13661 tokadd('$');
13662 do {
13663 tokadd(c);
13664 c = nextc();
13665 } while (c != -1 && ISDIGIT(c));
13666 pushback(c);
13667 if (last_state == EXPR_FNAME) goto gvar;
13668 tokfix();
13669 set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
13670 return tNTH_REF;
13671
13672 default:
13673 if (!parser_is_identchar()) {
13674 pushback(c);
13675 return '$';
13676 }
13677 case '0':
13678 tokadd('$');
13679 }
13680 break;
13681
13682 case '@':
13683 c = nextc();
13684 newtok();
13685 tokadd('@');
13686 if (c == '@') {
13687 tokadd('@');
13688 c = nextc();
13689 }
13690 if (c != -1 && ISDIGIT(c)) {
13691 if (tokidx == 1) {
13692 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
13693 }
13694 else {
13695 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
13696 }
13697 return 0;
13698 }
13699 if (!parser_is_identchar()) {
13700 pushback(c);
13701 return '@';
13702 }
13703 break;
13704
13705 case '_':
13706 if (was_bol() && whole_match_p("__END__", 7, 0)) {
13707 ruby__end__seen = 1;
13708 parser->eofp = Qtrue;
13709 #ifndef RIPPER
13710 return -1;
13711 #else
13712 lex_goto_eol(parser);
13713 ripper_dispatch_scan_event(parser, k__END__);
13714 return 0;
13715 #endif
13716 }
13717 newtok();
13718 break;
13719
13720 default:
13721 if (!parser_is_identchar()) {
13722 rb_compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c);
13723 goto retry;
13724 }
13725
13726 newtok();
13727 break;
13728 }
13729
13730 mb = ENC_CODERANGE_7BIT;
13731 do {
13732 if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
13733 if (tokadd_mbchar(c) == -1) return 0;
13734 c = nextc();
13735 } while (parser_is_identchar());
13736 switch (tok()[0]) {
13737 case '@': case '$':
13738 pushback(c);
13739 break;
13740 default:
13741 if ((c == '!' || c == '?') && !peek('=')) {
13742 tokadd(c);
13743 }
13744 else {
13745 pushback(c);
13746 }
13747 }
13748 tokfix();
13749
13750 {
13751 int result = 0;
13752
13753 last_state = lex_state;
13754 switch (tok()[0]) {
13755 case '$':
13756 lex_state = EXPR_END;
13757 result = tGVAR;
13758 break;
13759 case '@':
13760 lex_state = EXPR_END;
13761 if (tok()[1] == '@')
13762 result = tCVAR;
13763 else
13764 result = tIVAR;
13765 break;
13766
13767 default:
13768 if (toklast() == '!' || toklast() == '?') {
13769 result = tFID;
13770 }
13771 else {
13772 if (lex_state == EXPR_FNAME) {
13773 if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
13774 (!peek('=') || (lex_p + 1 < lex_pend && lex_p[1] == '>'))) {
13775 result = tIDENTIFIER;
13776 tokadd(c);
13777 tokfix();
13778 }
13779 else {
13780 pushback(c);
13781 }
13782 }
13783 if (result == 0 && ISUPPER(tok()[0])) {
13784 result = tCONSTANT;
13785 }
13786 else {
13787 result = tIDENTIFIER;
13788 }
13789 }
13790
13791 if ((lex_state == EXPR_BEG && !cmd_state) ||
13792 IS_ARG()) {
13793 if (peek(':') && !(lex_p + 1 < lex_pend && lex_p[1] == ':')) {
13794 lex_state = EXPR_BEG;
13795 nextc();
13796 set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb)));
13797 return tLABEL;
13798 }
13799 }
13800 if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) {
13801 const struct kwtable *kw;
13802
13803
13804 kw = rb_reserved_word(tok(), toklen());
13805 if (kw) {
13806 enum lex_state_e state = lex_state;
13807 lex_state = kw->state;
13808 if (state == EXPR_FNAME) {
13809 set_yylval_name(rb_intern(kw->name));
13810 return kw->id[0];
13811 }
13812 if (kw->id[0] == keyword_do) {
13813 command_start = TRUE;
13814 if (lpar_beg && lpar_beg == paren_nest) {
13815 lpar_beg = 0;
13816 --paren_nest;
13817 return keyword_do_LAMBDA;
13818 }
13819 if (COND_P()) return keyword_do_cond;
13820 if (CMDARG_P() && state != EXPR_CMDARG)
13821 return keyword_do_block;
13822 if (state == EXPR_ENDARG || state == EXPR_BEG)
13823 return keyword_do_block;
13824 return keyword_do;
13825 }
13826 if (state == EXPR_BEG || state == EXPR_VALUE)
13827 return kw->id[0];
13828 else {
13829 if (kw->id[0] != kw->id[1])
13830 lex_state = EXPR_BEG;
13831 return kw->id[1];
13832 }
13833 }
13834 }
13835
13836 if (IS_BEG() ||
13837 lex_state == EXPR_DOT ||
13838 IS_ARG()) {
13839 if (cmd_state) {
13840 lex_state = EXPR_CMDARG;
13841 }
13842 else {
13843 lex_state = EXPR_ARG;
13844 }
13845 }
13846 else if (lex_state == EXPR_FNAME) {
13847 lex_state = EXPR_ENDFN;
13848 }
13849 else {
13850 lex_state = EXPR_END;
13851 }
13852 }
13853 {
13854 ID ident = TOK_INTERN(!ENC_SINGLE(mb));
13855
13856 set_yylval_name(ident);
13857 if (last_state != EXPR_DOT && is_local_id(ident) && lvar_defined(ident)) {
13858 lex_state = EXPR_END;
13859 }
13860 }
13861 return result;
13862 }
13863 }
13864
13865 #if YYPURE
13866 static int
13867 yylex(void *lval, void *p)
13868 #else
13869 yylex(void *p)
13870 #endif
13871 {
13872 struct parser_params *parser = (struct parser_params*)p;
13873 int t;
13874
13875 #if YYPURE
13876 parser->parser_yylval = lval;
13877 parser->parser_yylval->val = Qundef;
13878 #endif
13879 t = parser_yylex(parser);
13880 #ifdef RIPPER
13881 if (!NIL_P(parser->delayed)) {
13882 ripper_dispatch_delayed_token(parser, t);
13883 return t;
13884 }
13885 if (t != 0)
13886 ripper_dispatch_scan_event(parser, t);
13887 #endif
13888
13889 return t;
13890 }
13891
13892 #ifndef RIPPER
13893 static NODE*
13894 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
13895 {
13896 NODE *n = (rb_node_newnode)(type, a0, a1, a2);
13897 nd_set_line(n, ruby_sourceline);
13898 return n;
13899 }
13900
13901 enum node_type
13902 nodetype(NODE *node)
13903 {
13904 return (enum node_type)nd_type(node);
13905 }
13906
13907 int
13908 nodeline(NODE *node)
13909 {
13910 return nd_line(node);
13911 }
13912
13913 static NODE*
13914 newline_node(NODE *node)
13915 {
13916 if (node) {
13917 node = remove_begin(node);
13918 node->flags |= NODE_FL_NEWLINE;
13919 }
13920 return node;
13921 }
13922
13923 static void
13924 fixpos(NODE *node, NODE *orig)
13925 {
13926 if (!node) return;
13927 if (!orig) return;
13928 if (orig == (NODE*)1) return;
13929 nd_set_line(node, nd_line(orig));
13930 }
13931
13932 static void
13933 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
13934 {
13935 rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
13936 }
13937 #define parser_warning(node, mesg) parser_warning(parser, node, mesg)
13938
13939 static void
13940 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
13941 {
13942 rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
13943 }
13944 #define parser_warn(node, mesg) parser_warn(parser, node, mesg)
13945
13946 static NODE*
13947 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
13948 {
13949 NODE *end, *h = head, *nd;
13950
13951 if (tail == 0) return head;
13952
13953 if (h == 0) return tail;
13954 switch (nd_type(h)) {
13955 case NODE_LIT:
13956 case NODE_STR:
13957 case NODE_SELF:
13958 case NODE_TRUE:
13959 case NODE_FALSE:
13960 case NODE_NIL:
13961 parser_warning(h, "unused literal ignored");
13962 return tail;
13963 default:
13964 h = end = NEW_BLOCK(head);
13965 end->nd_end = end;
13966 fixpos(end, head);
13967 head = end;
13968 break;
13969 case NODE_BLOCK:
13970 end = h->nd_end;
13971 break;
13972 }
13973
13974 nd = end->nd_head;
13975 switch (nd_type(nd)) {
13976 case NODE_RETURN:
13977 case NODE_BREAK:
13978 case NODE_NEXT:
13979 case NODE_REDO:
13980 case NODE_RETRY:
13981 if (RTEST(ruby_verbose)) {
13982 parser_warning(nd, "statement not reached");
13983 }
13984 break;
13985
13986 default:
13987 break;
13988 }
13989
13990 if (nd_type(tail) != NODE_BLOCK) {
13991 tail = NEW_BLOCK(tail);
13992 tail->nd_end = tail;
13993 }
13994 end->nd_next = tail;
13995 h->nd_end = tail->nd_end;
13996 return head;
13997 }
13998
13999
14000 static NODE*
14001 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
14002 {
14003 NODE *last;
14004
14005 if (list == 0) return NEW_LIST(item);
14006 if (list->nd_next) {
14007 last = list->nd_next->nd_end;
14008 }
14009 else {
14010 last = list;
14011 }
14012
14013 list->nd_alen += 1;
14014 last->nd_next = NEW_LIST(item);
14015 list->nd_next->nd_end = last->nd_next;
14016 return list;
14017 }
14018
14019
14020 static NODE*
14021 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14022 {
14023 NODE *last;
14024
14025 if (head->nd_next) {
14026 last = head->nd_next->nd_end;
14027 }
14028 else {
14029 last = head;
14030 }
14031
14032 head->nd_alen += tail->nd_alen;
14033 last->nd_next = tail;
14034 if (tail->nd_next) {
14035 head->nd_next->nd_end = tail->nd_next->nd_end;
14036 }
14037 else {
14038 head->nd_next->nd_end = tail;
14039 }
14040
14041 return head;
14042 }
14043
14044 static int
14045 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
14046 {
14047 if (NIL_P(tail)) return 1;
14048 if (!rb_enc_compatible(head, tail)) {
14049 compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
14050 rb_enc_name(rb_enc_get(head)),
14051 rb_enc_name(rb_enc_get(tail)));
14052 rb_str_resize(head, 0);
14053 rb_str_resize(tail, 0);
14054 return 0;
14055 }
14056 rb_str_buf_append(head, tail);
14057 return 1;
14058 }
14059
14060
14061 static NODE *
14062 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14063 {
14064 enum node_type htype;
14065
14066 if (!head) return tail;
14067 if (!tail) return head;
14068
14069 htype = nd_type(head);
14070 if (htype == NODE_EVSTR) {
14071 NODE *node = NEW_DSTR(Qnil);
14072 head = list_append(node, head);
14073 }
14074 switch (nd_type(tail)) {
14075 case NODE_STR:
14076 if (htype == NODE_STR) {
14077 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) {
14078 error:
14079 rb_gc_force_recycle((VALUE)head);
14080 rb_gc_force_recycle((VALUE)tail);
14081 return 0;
14082 }
14083 rb_gc_force_recycle((VALUE)tail);
14084 }
14085 else {
14086 list_append(head, tail);
14087 }
14088 break;
14089
14090 case NODE_DSTR:
14091 if (htype == NODE_STR) {
14092 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
14093 goto error;
14094 tail->nd_lit = head->nd_lit;
14095 rb_gc_force_recycle((VALUE)head);
14096 head = tail;
14097 }
14098 else if (NIL_P(tail->nd_lit)) {
14099 head->nd_alen += tail->nd_alen - 1;
14100 head->nd_next->nd_end->nd_next = tail->nd_next;
14101 head->nd_next->nd_end = tail->nd_next->nd_end;
14102 rb_gc_force_recycle((VALUE)tail);
14103 }
14104 else {
14105 nd_set_type(tail, NODE_ARRAY);
14106 tail->nd_head = NEW_STR(tail->nd_lit);
14107 list_concat(head, tail);
14108 }
14109 break;
14110
14111 case NODE_EVSTR:
14112 if (htype == NODE_STR) {
14113 nd_set_type(head, NODE_DSTR);
14114 head->nd_alen = 1;
14115 }
14116 list_append(head, tail);
14117 break;
14118 }
14119 return head;
14120 }
14121
14122 static NODE *
14123 evstr2dstr_gen(struct parser_params *parser, NODE *node)
14124 {
14125 if (nd_type(node) == NODE_EVSTR) {
14126 node = list_append(NEW_DSTR(Qnil), node);
14127 }
14128 return node;
14129 }
14130
14131 static NODE *
14132 new_evstr_gen(struct parser_params *parser, NODE *node)
14133 {
14134 NODE *head = node;
14135
14136 if (node) {
14137 switch (nd_type(node)) {
14138 case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
14139 return node;
14140 }
14141 }
14142 return NEW_EVSTR(head);
14143 }
14144
14145 static NODE *
14146 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
14147 {
14148 value_expr(recv);
14149 value_expr(arg1);
14150 return NEW_CALL(recv, id, NEW_LIST(arg1));
14151 }
14152
14153 static NODE *
14154 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
14155 {
14156 value_expr(recv);
14157 return NEW_CALL(recv, id, 0);
14158 }
14159
14160 static NODE*
14161 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14162 {
14163 value_expr(node1);
14164 value_expr(node2);
14165 if (node1) {
14166 switch (nd_type(node1)) {
14167 case NODE_DREGX:
14168 case NODE_DREGX_ONCE:
14169 return NEW_MATCH2(node1, node2);
14170
14171 case NODE_LIT:
14172 if (TYPE(node1->nd_lit) == T_REGEXP) {
14173 return NEW_MATCH2(node1, node2);
14174 }
14175 }
14176 }
14177
14178 if (node2) {
14179 switch (nd_type(node2)) {
14180 case NODE_DREGX:
14181 case NODE_DREGX_ONCE:
14182 return NEW_MATCH3(node2, node1);
14183
14184 case NODE_LIT:
14185 if (TYPE(node2->nd_lit) == T_REGEXP) {
14186 return NEW_MATCH3(node2, node1);
14187 }
14188 }
14189 }
14190
14191 return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
14192 }
14193
14194 static NODE*
14195 gettable_gen(struct parser_params *parser, ID id)
14196 {
14197 if (id == keyword_self) {
14198 return NEW_SELF();
14199 }
14200 else if (id == keyword_nil) {
14201 return NEW_NIL();
14202 }
14203 else if (id == keyword_true) {
14204 return NEW_TRUE();
14205 }
14206 else if (id == keyword_false) {
14207 return NEW_FALSE();
14208 }
14209 else if (id == keyword__FILE__) {
14210 return NEW_STR(rb_external_str_new_with_enc(ruby_sourcefile, strlen(ruby_sourcefile),
14211 rb_filesystem_encoding()));
14212 }
14213 else if (id == keyword__LINE__) {
14214 return NEW_LIT(INT2FIX(ruby_sourceline));
14215 }
14216 else if (id == keyword__ENCODING__) {
14217 return NEW_LIT(rb_enc_from_encoding(parser->enc));
14218 }
14219 else if (is_local_id(id)) {
14220 if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
14221 if (local_id(id)) return NEW_LVAR(id);
14222
14223 return NEW_VCALL(id);
14224 }
14225 else if (is_global_id(id)) {
14226 return NEW_GVAR(id);
14227 }
14228 else if (is_instance_id(id)) {
14229 return NEW_IVAR(id);
14230 }
14231 else if (is_const_id(id)) {
14232 return NEW_CONST(id);
14233 }
14234 else if (is_class_id(id)) {
14235 return NEW_CVAR(id);
14236 }
14237 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14238 return 0;
14239 }
14240 #endif
14241
14242 #ifdef RIPPER
14243 static VALUE
14244 assignable_gen(struct parser_params *parser, VALUE lhs)
14245 #else
14246 static NODE*
14247 assignable_gen(struct parser_params *parser, ID id, NODE *val)
14248 #endif
14249 {
14250 #ifdef RIPPER
14251 ID id = get_id(lhs);
14252 # define assignable_result(x) get_value(lhs)
14253 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
14254 #else
14255 # define assignable_result(x) x
14256 #endif
14257 if (!id) return assignable_result(0);
14258 if (id == keyword_self) {
14259 yyerror("Can't change the value of self");
14260 }
14261 else if (id == keyword_nil) {
14262 yyerror("Can't assign to nil");
14263 }
14264 else if (id == keyword_true) {
14265 yyerror("Can't assign to true");
14266 }
14267 else if (id == keyword_false) {
14268 yyerror("Can't assign to false");
14269 }
14270 else if (id == keyword__FILE__) {
14271 yyerror("Can't assign to __FILE__");
14272 }
14273 else if (id == keyword__LINE__) {
14274 yyerror("Can't assign to __LINE__");
14275 }
14276 else if (id == keyword__ENCODING__) {
14277 yyerror("Can't assign to __ENCODING__");
14278 }
14279 else if (is_local_id(id)) {
14280 if (dyna_in_block()) {
14281 if (dvar_curr(id)) {
14282 return assignable_result(NEW_DASGN_CURR(id, val));
14283 }
14284 else if (dvar_defined(id)) {
14285 return assignable_result(NEW_DASGN(id, val));
14286 }
14287 else if (local_id(id)) {
14288 return assignable_result(NEW_LASGN(id, val));
14289 }
14290 else {
14291 dyna_var(id);
14292 return assignable_result(NEW_DASGN_CURR(id, val));
14293 }
14294 }
14295 else {
14296 if (!local_id(id)) {
14297 local_var(id);
14298 }
14299 return assignable_result(NEW_LASGN(id, val));
14300 }
14301 }
14302 else if (is_global_id(id)) {
14303 return assignable_result(NEW_GASGN(id, val));
14304 }
14305 else if (is_instance_id(id)) {
14306 return assignable_result(NEW_IASGN(id, val));
14307 }
14308 else if (is_const_id(id)) {
14309 if (!in_def && !in_single)
14310 return assignable_result(NEW_CDECL(id, val, 0));
14311 yyerror("dynamic constant assignment");
14312 }
14313 else if (is_class_id(id)) {
14314 return assignable_result(NEW_CVASGN(id, val));
14315 }
14316 else {
14317 compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
14318 }
14319 return assignable_result(0);
14320 #undef assignable_result
14321 #undef parser_yyerror
14322 }
14323
14324 static ID
14325 shadowing_lvar_gen(struct parser_params *parser, ID name)
14326 {
14327 ID uscore;
14328
14329 CONST_ID(uscore, "_");
14330 if (uscore == name) return name;
14331 if (dyna_in_block()) {
14332 if (dvar_curr(name)) {
14333 yyerror("duplicated argument name");
14334 }
14335 else if (dvar_defined(name) || local_id(name)) {
14336 rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
14337 vtable_add(lvtbl->vars, name);
14338 }
14339 }
14340 else {
14341 if (local_id(name)) {
14342 yyerror("duplicated argument name");
14343 }
14344 }
14345 return name;
14346 }
14347
14348 static void
14349 new_bv_gen(struct parser_params *parser, ID name)
14350 {
14351 if (!name) return;
14352 if (!is_local_id(name)) {
14353 compile_error(PARSER_ARG "invalid local variable - %s",
14354 rb_id2name(name));
14355 return;
14356 }
14357 shadowing_lvar(name);
14358 dyna_var(name);
14359 }
14360
14361 #ifndef RIPPER
14362 static NODE *
14363 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
14364 {
14365 if (recv && nd_type(recv) == NODE_SELF)
14366 recv = (NODE *)1;
14367 return NEW_ATTRASGN(recv, tASET, idx);
14368 }
14369
14370 static void
14371 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14372 {
14373 if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
14374 compile_error(PARSER_ARG "both block arg and actual block given");
14375 }
14376 }
14377
14378 ID
14379 rb_id_attrset(ID id)
14380 {
14381 id &= ~ID_SCOPE_MASK;
14382 id |= ID_ATTRSET;
14383 return id;
14384 }
14385
14386 static NODE *
14387 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
14388 {
14389 if (recv && nd_type(recv) == NODE_SELF)
14390 recv = (NODE *)1;
14391 return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
14392 }
14393
14394 static void
14395 rb_backref_error_gen(struct parser_params *parser, NODE *node)
14396 {
14397 switch (nd_type(node)) {
14398 case NODE_NTH_REF:
14399 compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
14400 break;
14401 case NODE_BACK_REF:
14402 compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
14403 break;
14404 }
14405 }
14406
14407 static NODE *
14408 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14409 {
14410 if (!node2) return node1;
14411 switch (nd_type(node1)) {
14412 case NODE_BLOCK_PASS:
14413 if (node1->nd_head)
14414 node1->nd_head = arg_concat(node1->nd_head, node2);
14415 else
14416 node1->nd_head = NEW_LIST(node2);
14417 return node1;
14418 case NODE_ARGSPUSH:
14419 if (nd_type(node2) != NODE_ARRAY) break;
14420 node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
14421 nd_set_type(node1, NODE_ARGSCAT);
14422 return node1;
14423 case NODE_ARGSCAT:
14424 if (nd_type(node2) != NODE_ARRAY ||
14425 nd_type(node1->nd_body) != NODE_ARRAY) break;
14426 node1->nd_body = list_concat(node1->nd_body, node2);
14427 return node1;
14428 }
14429 return NEW_ARGSCAT(node1, node2);
14430 }
14431
14432 static NODE *
14433 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14434 {
14435 if (!node1) return NEW_LIST(node2);
14436 switch (nd_type(node1)) {
14437 case NODE_ARRAY:
14438 return list_append(node1, node2);
14439 case NODE_BLOCK_PASS:
14440 node1->nd_head = arg_append(node1->nd_head, node2);
14441 return node1;
14442 case NODE_ARGSPUSH:
14443 node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
14444 nd_set_type(node1, NODE_ARGSCAT);
14445 return node1;
14446 }
14447 return NEW_ARGSPUSH(node1, node2);
14448 }
14449
14450 static NODE *
14451 splat_array(NODE* node)
14452 {
14453 if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
14454 if (nd_type(node) == NODE_ARRAY) return node;
14455 return 0;
14456 }
14457
14458 static NODE *
14459 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
14460 {
14461 if (!lhs) return 0;
14462
14463 switch (nd_type(lhs)) {
14464 case NODE_GASGN:
14465 case NODE_IASGN:
14466 case NODE_IASGN2:
14467 case NODE_LASGN:
14468 case NODE_DASGN:
14469 case NODE_DASGN_CURR:
14470 case NODE_MASGN:
14471 case NODE_CDECL:
14472 case NODE_CVASGN:
14473 lhs->nd_value = rhs;
14474 break;
14475
14476 case NODE_ATTRASGN:
14477 case NODE_CALL:
14478 lhs->nd_args = arg_append(lhs->nd_args, rhs);
14479 break;
14480
14481 default:
14482
14483 break;
14484 }
14485
14486 return lhs;
14487 }
14488
14489 static int
14490 value_expr_gen(struct parser_params *parser, NODE *node)
14491 {
14492 int cond = 0;
14493
14494 if (!node) {
14495 rb_warning0("empty expression");
14496 }
14497 while (node) {
14498 switch (nd_type(node)) {
14499 case NODE_DEFN:
14500 case NODE_DEFS:
14501 parser_warning(node, "void value expression");
14502 return FALSE;
14503
14504 case NODE_RETURN:
14505 case NODE_BREAK:
14506 case NODE_NEXT:
14507 case NODE_REDO:
14508 case NODE_RETRY:
14509 if (!cond) yyerror("void value expression");
14510
14511 return FALSE;
14512
14513 case NODE_BLOCK:
14514 while (node->nd_next) {
14515 node = node->nd_next;
14516 }
14517 node = node->nd_head;
14518 break;
14519
14520 case NODE_BEGIN:
14521 node = node->nd_body;
14522 break;
14523
14524 case NODE_IF:
14525 if (!node->nd_body) {
14526 node = node->nd_else;
14527 break;
14528 }
14529 else if (!node->nd_else) {
14530 node = node->nd_body;
14531 break;
14532 }
14533 if (!value_expr(node->nd_body)) return FALSE;
14534 node = node->nd_else;
14535 break;
14536
14537 case NODE_AND:
14538 case NODE_OR:
14539 cond = 1;
14540 node = node->nd_2nd;
14541 break;
14542
14543 default:
14544 return TRUE;
14545 }
14546 }
14547
14548 return TRUE;
14549 }
14550
14551 static void
14552 void_expr_gen(struct parser_params *parser, NODE *node)
14553 {
14554 const char *useless = 0;
14555
14556 if (!RTEST(ruby_verbose)) return;
14557
14558 if (!node) return;
14559 switch (nd_type(node)) {
14560 case NODE_CALL:
14561 switch (node->nd_mid) {
14562 case '+':
14563 case '-':
14564 case '*':
14565 case '/':
14566 case '%':
14567 case tPOW:
14568 case tUPLUS:
14569 case tUMINUS:
14570 case '|':
14571 case '^':
14572 case '&':
14573 case tCMP:
14574 case '>':
14575 case tGEQ:
14576 case '<':
14577 case tLEQ:
14578 case tEQ:
14579 case tNEQ:
14580 useless = rb_id2name(node->nd_mid);
14581 break;
14582 }
14583 break;
14584
14585 case NODE_LVAR:
14586 case NODE_DVAR:
14587 case NODE_GVAR:
14588 case NODE_IVAR:
14589 case NODE_CVAR:
14590 case NODE_NTH_REF:
14591 case NODE_BACK_REF:
14592 useless = "a variable";
14593 break;
14594 case NODE_CONST:
14595 useless = "a constant";
14596 break;
14597 case NODE_LIT:
14598 case NODE_STR:
14599 case NODE_DSTR:
14600 case NODE_DREGX:
14601 case NODE_DREGX_ONCE:
14602 useless = "a literal";
14603 break;
14604 case NODE_COLON2:
14605 case NODE_COLON3:
14606 useless = "::";
14607 break;
14608 case NODE_DOT2:
14609 useless = "..";
14610 break;
14611 case NODE_DOT3:
14612 useless = "...";
14613 break;
14614 case NODE_SELF:
14615 useless = "self";
14616 break;
14617 case NODE_NIL:
14618 useless = "nil";
14619 break;
14620 case NODE_TRUE:
14621 useless = "true";
14622 break;
14623 case NODE_FALSE:
14624 useless = "false";
14625 break;
14626 case NODE_DEFINED:
14627 useless = "defined?";
14628 break;
14629 }
14630
14631 if (useless) {
14632 int line = ruby_sourceline;
14633
14634 ruby_sourceline = nd_line(node);
14635 rb_warnS("useless use of %s in void context", useless);
14636 ruby_sourceline = line;
14637 }
14638 }
14639
14640 static void
14641 void_stmts_gen(struct parser_params *parser, NODE *node)
14642 {
14643 if (!RTEST(ruby_verbose)) return;
14644 if (!node) return;
14645 if (nd_type(node) != NODE_BLOCK) return;
14646
14647 for (;;) {
14648 if (!node->nd_next) return;
14649 void_expr0(node->nd_head);
14650 node = node->nd_next;
14651 }
14652 }
14653
14654 static NODE *
14655 remove_begin(NODE *node)
14656 {
14657 NODE **n = &node, *n1 = node;
14658 while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
14659 *n = n1 = n1->nd_body;
14660 }
14661 return node;
14662 }
14663
14664 static void
14665 reduce_nodes_gen(struct parser_params *parser, NODE **body)
14666 {
14667 NODE *node = *body;
14668
14669 if (!node) {
14670 *body = NEW_NIL();
14671 return;
14672 }
14673 #define subnodes(n1, n2) \
14674 ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
14675 (!node->n2) ? (body = &node->n1, 1) : \
14676 (reduce_nodes(&node->n1), body = &node->n2, 1))
14677
14678 while (node) {
14679 int newline = (int)(node->flags & NODE_FL_NEWLINE);
14680 switch (nd_type(node)) {
14681 end:
14682 case NODE_NIL:
14683 *body = 0;
14684 return;
14685 case NODE_RETURN:
14686 *body = node = node->nd_stts;
14687 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14688 continue;
14689 case NODE_BEGIN:
14690 *body = node = node->nd_body;
14691 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14692 continue;
14693 case NODE_BLOCK:
14694 body = &node->nd_end->nd_head;
14695 break;
14696 case NODE_IF:
14697 if (subnodes(nd_body, nd_else)) break;
14698 return;
14699 case NODE_CASE:
14700 body = &node->nd_body;
14701 break;
14702 case NODE_WHEN:
14703 if (!subnodes(nd_body, nd_next)) goto end;
14704 break;
14705 case NODE_ENSURE:
14706 if (!subnodes(nd_head, nd_resq)) goto end;
14707 break;
14708 case NODE_RESCUE:
14709 if (!subnodes(nd_head, nd_resq)) goto end;
14710 break;
14711 default:
14712 return;
14713 }
14714 node = *body;
14715 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14716 }
14717
14718 #undef subnodes
14719 }
14720
14721 static int
14722 assign_in_cond(struct parser_params *parser, NODE *node)
14723 {
14724 switch (nd_type(node)) {
14725 case NODE_MASGN:
14726 yyerror("multiple assignment in conditional");
14727 return 1;
14728
14729 case NODE_LASGN:
14730 case NODE_DASGN:
14731 case NODE_DASGN_CURR:
14732 case NODE_GASGN:
14733 case NODE_IASGN:
14734 break;
14735
14736 default:
14737 return 0;
14738 }
14739
14740 if (!node->nd_value) return 1;
14741 switch (nd_type(node->nd_value)) {
14742 case NODE_LIT:
14743 case NODE_STR:
14744 case NODE_NIL:
14745 case NODE_TRUE:
14746 case NODE_FALSE:
14747
14748 parser_warn(node->nd_value, "found = in conditional, should be ==");
14749 return 1;
14750
14751 case NODE_DSTR:
14752 case NODE_XSTR:
14753 case NODE_DXSTR:
14754 case NODE_EVSTR:
14755 case NODE_DREGX:
14756 default:
14757 break;
14758 }
14759 return 1;
14760 }
14761
14762 static void
14763 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14764 {
14765 if (!e_option_supplied(parser)) parser_warn(node, str);
14766 }
14767
14768 static void
14769 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14770 {
14771 if (!e_option_supplied(parser)) parser_warning(node, str);
14772 }
14773
14774 static void
14775 fixup_nodes(NODE **rootnode)
14776 {
14777 NODE *node, *next, *head;
14778
14779 for (node = *rootnode; node; node = next) {
14780 enum node_type type;
14781 VALUE val;
14782
14783 next = node->nd_next;
14784 head = node->nd_head;
14785 rb_gc_force_recycle((VALUE)node);
14786 *rootnode = next;
14787 switch (type = nd_type(head)) {
14788 case NODE_DOT2:
14789 case NODE_DOT3:
14790 val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
14791 type == NODE_DOT3);
14792 rb_gc_force_recycle((VALUE)head->nd_beg);
14793 rb_gc_force_recycle((VALUE)head->nd_end);
14794 nd_set_type(head, NODE_LIT);
14795 head->nd_lit = val;
14796 break;
14797 default:
14798 break;
14799 }
14800 }
14801 }
14802
14803 static NODE *cond0(struct parser_params*,NODE*);
14804
14805 static NODE*
14806 range_op(struct parser_params *parser, NODE *node)
14807 {
14808 enum node_type type;
14809
14810 if (node == 0) return 0;
14811
14812 type = nd_type(node);
14813 value_expr(node);
14814 if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
14815 warn_unless_e_option(parser, node, "integer literal in conditional range");
14816 return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
14817 }
14818 return cond0(parser, node);
14819 }
14820
14821 static int
14822 literal_node(NODE *node)
14823 {
14824 if (!node) return 1;
14825 switch (nd_type(node)) {
14826 case NODE_LIT:
14827 case NODE_STR:
14828 case NODE_DSTR:
14829 case NODE_EVSTR:
14830 case NODE_DREGX:
14831 case NODE_DREGX_ONCE:
14832 case NODE_DSYM:
14833 return 2;
14834 case NODE_TRUE:
14835 case NODE_FALSE:
14836 case NODE_NIL:
14837 return 1;
14838 }
14839 return 0;
14840 }
14841
14842 static NODE*
14843 cond0(struct parser_params *parser, NODE *node)
14844 {
14845 if (node == 0) return 0;
14846 assign_in_cond(parser, node);
14847
14848 switch (nd_type(node)) {
14849 case NODE_DSTR:
14850 case NODE_EVSTR:
14851 case NODE_STR:
14852 rb_warn0("string literal in condition");
14853 break;
14854
14855 case NODE_DREGX:
14856 case NODE_DREGX_ONCE:
14857 warning_unless_e_option(parser, node, "regex literal in condition");
14858 return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
14859
14860 case NODE_AND:
14861 case NODE_OR:
14862 node->nd_1st = cond0(parser, node->nd_1st);
14863 node->nd_2nd = cond0(parser, node->nd_2nd);
14864 break;
14865
14866 case NODE_DOT2:
14867 case NODE_DOT3:
14868 node->nd_beg = range_op(parser, node->nd_beg);
14869 node->nd_end = range_op(parser, node->nd_end);
14870 if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
14871 else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
14872 if (!e_option_supplied(parser)) {
14873 int b = literal_node(node->nd_beg);
14874 int e = literal_node(node->nd_end);
14875 if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
14876 parser_warn(node, "range literal in condition");
14877 }
14878 }
14879 break;
14880
14881 case NODE_DSYM:
14882 parser_warning(node, "literal in condition");
14883 break;
14884
14885 case NODE_LIT:
14886 if (TYPE(node->nd_lit) == T_REGEXP) {
14887 warn_unless_e_option(parser, node, "regex literal in condition");
14888 nd_set_type(node, NODE_MATCH);
14889 }
14890 else {
14891 parser_warning(node, "literal in condition");
14892 }
14893 default:
14894 break;
14895 }
14896 return node;
14897 }
14898
14899 static NODE*
14900 cond_gen(struct parser_params *parser, NODE *node)
14901 {
14902 if (node == 0) return 0;
14903 return cond0(parser, node);
14904 }
14905
14906 static NODE*
14907 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
14908 {
14909 value_expr(left);
14910 if (left && (enum node_type)nd_type(left) == type) {
14911 NODE *node = left, *second;
14912 while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
14913 node = second;
14914 }
14915 node->nd_2nd = NEW_NODE(type, second, right, 0);
14916 return left;
14917 }
14918 return NEW_NODE(type, left, right, 0);
14919 }
14920
14921 static void
14922 no_blockarg(struct parser_params *parser, NODE *node)
14923 {
14924 if (node && nd_type(node) == NODE_BLOCK_PASS) {
14925 compile_error(PARSER_ARG "block argument should not be given");
14926 }
14927 }
14928
14929 static NODE *
14930 ret_args_gen(struct parser_params *parser, NODE *node)
14931 {
14932 if (node) {
14933 no_blockarg(parser, node);
14934 if (nd_type(node) == NODE_ARRAY) {
14935 if (node->nd_next == 0) {
14936 node = node->nd_head;
14937 }
14938 else {
14939 nd_set_type(node, NODE_VALUES);
14940 }
14941 }
14942 }
14943 return node;
14944 }
14945
14946 static NODE *
14947 new_yield_gen(struct parser_params *parser, NODE *node)
14948 {
14949 long state = Qtrue;
14950
14951 if (node) {
14952 no_blockarg(parser, node);
14953 if (node && nd_type(node) == NODE_SPLAT) {
14954 state = Qtrue;
14955 }
14956 }
14957 else {
14958 state = Qfalse;
14959 }
14960 return NEW_YIELD(node, state);
14961 }
14962
14963 static NODE*
14964 negate_lit(NODE *node)
14965 {
14966 switch (TYPE(node->nd_lit)) {
14967 case T_FIXNUM:
14968 node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
14969 break;
14970 case T_BIGNUM:
14971 node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
14972 break;
14973 case T_FLOAT:
14974 RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
14975 break;
14976 default:
14977 break;
14978 }
14979 return node;
14980 }
14981
14982 static NODE *
14983 arg_blk_pass(NODE *node1, NODE *node2)
14984 {
14985 if (node2) {
14986 node2->nd_head = node1;
14987 return node2;
14988 }
14989 return node1;
14990 }
14991
14992 static NODE*
14993 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b)
14994 {
14995 int saved_line = ruby_sourceline;
14996 NODE *node;
14997 NODE *i1, *i2 = 0;
14998
14999 node = NEW_ARGS(m ? m->nd_plen : 0, o);
15000 i1 = m ? m->nd_next : 0;
15001 node->nd_next = NEW_ARGS_AUX(r, b);
15002
15003 if (p) {
15004 i2 = p->nd_next;
15005 node->nd_next->nd_next = NEW_ARGS_AUX(p->nd_pid, p->nd_plen);
15006 }
15007 else if (i1) {
15008 node->nd_next->nd_next = NEW_ARGS_AUX(0, 0);
15009 }
15010 if (i1 || i2) {
15011 node->nd_next->nd_next->nd_next = NEW_NODE(NODE_AND, i1, i2, 0);
15012 }
15013 ruby_sourceline = saved_line;
15014 return node;
15015 }
15016 #endif
15017
15018 static void
15019 local_push_gen(struct parser_params *parser, int inherit_dvars)
15020 {
15021 struct local_vars *local;
15022
15023 local = ALLOC(struct local_vars);
15024 local->prev = lvtbl;
15025 local->args = vtable_alloc(0);
15026 local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
15027 lvtbl = local;
15028 }
15029
15030 static void
15031 local_pop_gen(struct parser_params *parser)
15032 {
15033 struct local_vars *local = lvtbl->prev;
15034 vtable_free(lvtbl->args);
15035 vtable_free(lvtbl->vars);
15036 xfree(lvtbl);
15037 lvtbl = local;
15038 }
15039
15040 #ifndef RIPPER
15041 static ID*
15042 vtable_tblcpy(ID *buf, const struct vtable *src)
15043 {
15044 int i, cnt = vtable_size(src);
15045
15046 if (cnt > 0) {
15047 buf[0] = cnt;
15048 for (i = 0; i < cnt; i++) {
15049 buf[i] = src->tbl[i];
15050 }
15051 return buf;
15052 }
15053 return 0;
15054 }
15055
15056 static ID*
15057 local_tbl_gen(struct parser_params *parser)
15058 {
15059 int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars);
15060 ID *buf;
15061
15062 if (cnt <= 0) return 0;
15063 buf = ALLOC_N(ID, cnt + 1);
15064 vtable_tblcpy(buf+1, lvtbl->args);
15065 vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars);
15066 buf[0] = cnt;
15067 return buf;
15068 }
15069 #endif
15070
15071 static int
15072 arg_var_gen(struct parser_params *parser, ID id)
15073 {
15074 vtable_add(lvtbl->args, id);
15075 return vtable_size(lvtbl->args) - 1;
15076 }
15077
15078 static int
15079 local_var_gen(struct parser_params *parser, ID id)
15080 {
15081 vtable_add(lvtbl->vars, id);
15082 return vtable_size(lvtbl->vars) - 1;
15083 }
15084
15085 static int
15086 local_id_gen(struct parser_params *parser, ID id)
15087 {
15088 struct vtable *vars, *args;
15089
15090 vars = lvtbl->vars;
15091 args = lvtbl->args;
15092
15093 while (vars && POINTER_P(vars->prev)) {
15094 vars = vars->prev;
15095 args = args->prev;
15096 }
15097
15098 if (vars && vars->prev == DVARS_INHERIT) {
15099 return rb_local_defined(id);
15100 }
15101 else {
15102 return (vtable_included(args, id) ||
15103 vtable_included(vars, id));
15104 }
15105 }
15106
15107 static const struct vtable *
15108 dyna_push_gen(struct parser_params *parser)
15109 {
15110 lvtbl->args = vtable_alloc(lvtbl->args);
15111 lvtbl->vars = vtable_alloc(lvtbl->vars);
15112 return lvtbl->args;
15113 }
15114
15115 static void
15116 dyna_pop_1(struct parser_params *parser)
15117 {
15118 struct vtable *tmp;
15119
15120 tmp = lvtbl->args;
15121 lvtbl->args = lvtbl->args->prev;
15122 vtable_free(tmp);
15123 tmp = lvtbl->vars;
15124 lvtbl->vars = lvtbl->vars->prev;
15125 vtable_free(tmp);
15126 }
15127
15128 static void
15129 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
15130 {
15131 while (lvtbl->args != lvargs) {
15132 dyna_pop_1(parser);
15133 if (!lvtbl->args) {
15134 struct local_vars *local = lvtbl->prev;
15135 xfree(lvtbl);
15136 lvtbl = local;
15137 }
15138 }
15139 dyna_pop_1(parser);
15140 }
15141
15142 static int
15143 dyna_in_block_gen(struct parser_params *parser)
15144 {
15145 return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
15146 }
15147
15148 static int
15149 dvar_defined_gen(struct parser_params *parser, ID id)
15150 {
15151 struct vtable *vars, *args;
15152
15153 args = lvtbl->args;
15154 vars = lvtbl->vars;
15155
15156 while (POINTER_P(vars)) {
15157 if (vtable_included(args, id)) {
15158 return 1;
15159 }
15160 if (vtable_included(vars, id)) {
15161 return 1;
15162 }
15163 args = args->prev;
15164 vars = vars->prev;
15165 }
15166
15167 if (vars == DVARS_INHERIT) {
15168 return rb_dvar_defined(id);
15169 }
15170
15171 return 0;
15172 }
15173
15174 static int
15175 dvar_curr_gen(struct parser_params *parser, ID id)
15176 {
15177 return (vtable_included(lvtbl->args, id) ||
15178 vtable_included(lvtbl->vars, id));
15179 }
15180
15181 #ifndef RIPPER
15182 VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline);
15183 VALUE rb_reg_check_preprocess(VALUE);
15184
15185 static void
15186 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
15187 {
15188 int c = RE_OPTION_ENCODING_IDX(options);
15189
15190 if (c) {
15191 int opt, idx;
15192 rb_char_to_option_kcode(c, &opt, &idx);
15193 if (idx != ENCODING_GET(str) &&
15194 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15195 goto error;
15196 }
15197 ENCODING_SET(str, idx);
15198 }
15199 else if (RE_OPTION_ENCODING_NONE(options)) {
15200 if (!ENCODING_IS_ASCII8BIT(str) &&
15201 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15202 c = 'n';
15203 goto error;
15204 }
15205 rb_enc_associate(str, rb_ascii8bit_encoding());
15206 }
15207 else if (parser->enc == rb_usascii_encoding()) {
15208 if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15209
15210 rb_enc_associate(str, rb_usascii_encoding());
15211 }
15212 else {
15213 rb_enc_associate(str, rb_ascii8bit_encoding());
15214 }
15215 }
15216 return;
15217
15218 error:
15219 compile_error(PARSER_ARG
15220 "regexp encoding option '%c' differs from source encoding '%s'",
15221 c, rb_enc_name(rb_enc_get(str)));
15222 }
15223
15224 static int
15225 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
15226 {
15227 VALUE err;
15228 reg_fragment_setenc(str, options);
15229 err = rb_reg_check_preprocess(str);
15230 if (err != Qnil) {
15231 err = rb_obj_as_string(err);
15232 compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
15233 RB_GC_GUARD(err);
15234 return 0;
15235 }
15236 return 1;
15237 }
15238
15239 typedef struct {
15240 struct parser_params* parser;
15241 rb_encoding *enc;
15242 NODE *succ_block;
15243 NODE *fail_block;
15244 int num;
15245 } reg_named_capture_assign_t;
15246
15247 static int
15248 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
15249 int back_num, int *back_refs, OnigRegex regex, void *arg0)
15250 {
15251 reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
15252 struct parser_params* parser = arg->parser;
15253 rb_encoding *enc = arg->enc;
15254 long len = name_end - name;
15255 const char *s = (const char *)name;
15256 ID var;
15257
15258 arg->num++;
15259
15260 if (arg->succ_block == 0) {
15261 arg->succ_block = NEW_BEGIN(0);
15262 arg->fail_block = NEW_BEGIN(0);
15263 }
15264
15265 if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
15266 (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
15267 !rb_enc_symname2_p(s, len, enc)) {
15268 return ST_CONTINUE;
15269 }
15270 var = rb_intern3(s, len, enc);
15271 if (dvar_defined(var) || local_id(var)) {
15272 rb_warningS("named capture conflicts a local variable - %s",
15273 rb_id2name(var));
15274 }
15275 arg->succ_block = block_append(arg->succ_block,
15276 newline_node(node_assign(assignable(var,0),
15277 NEW_CALL(
15278 gettable(rb_intern("$~")),
15279 idAREF,
15280 NEW_LIST(NEW_LIT(ID2SYM(var))))
15281 )));
15282 arg->fail_block = block_append(arg->fail_block,
15283 newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil))));
15284 return ST_CONTINUE;
15285 }
15286
15287 static NODE *
15288 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match)
15289 {
15290 reg_named_capture_assign_t arg;
15291
15292 arg.parser = parser;
15293 arg.enc = rb_enc_get(regexp);
15294 arg.succ_block = 0;
15295 arg.fail_block = 0;
15296 arg.num = 0;
15297 onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
15298
15299 if (arg.num == 0)
15300 return match;
15301
15302 return
15303 block_append(
15304 newline_node(match),
15305 NEW_IF(gettable(rb_intern("$~")),
15306 block_append(
15307 newline_node(arg.succ_block),
15308 newline_node(
15309 NEW_CALL(
15310 gettable(rb_intern("$~")),
15311 rb_intern("begin"),
15312 NEW_LIST(NEW_LIT(INT2FIX(0)))))),
15313 block_append(
15314 newline_node(arg.fail_block),
15315 newline_node(
15316 NEW_LIT(Qnil)))));
15317 }
15318
15319 static VALUE
15320 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
15321 {
15322 VALUE re;
15323 VALUE err;
15324
15325 reg_fragment_setenc(str, options);
15326 err = rb_errinfo();
15327 re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline);
15328 if (NIL_P(re)) {
15329 ID mesg = rb_intern("mesg");
15330 VALUE m = rb_attr_get(rb_errinfo(), mesg);
15331 rb_set_errinfo(err);
15332 if (!NIL_P(err)) {
15333 rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
15334 }
15335 else {
15336 compile_error(PARSER_ARG "%s", RSTRING_PTR(m));
15337 }
15338 return Qnil;
15339 }
15340 return re;
15341 }
15342
15343 void
15344 rb_gc_mark_parser(void)
15345 {
15346 }
15347
15348 NODE*
15349 rb_parser_append_print(VALUE vparser, NODE *node)
15350 {
15351 NODE *prelude = 0;
15352 NODE *scope = node;
15353 struct parser_params *parser;
15354
15355 if (!node) return node;
15356
15357 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15358
15359 node = node->nd_body;
15360
15361 if (nd_type(node) == NODE_PRELUDE) {
15362 prelude = node;
15363 node = node->nd_body;
15364 }
15365
15366 node = block_append(node,
15367 NEW_FCALL(rb_intern("print"),
15368 NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
15369 if (prelude) {
15370 prelude->nd_body = node;
15371 scope->nd_body = prelude;
15372 }
15373 else {
15374 scope->nd_body = node;
15375 }
15376
15377 return scope;
15378 }
15379
15380 NODE *
15381 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
15382 {
15383 NODE *prelude = 0;
15384 NODE *scope = node;
15385 struct parser_params *parser;
15386
15387 if (!node) return node;
15388
15389 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15390
15391 node = node->nd_body;
15392
15393 if (nd_type(node) == NODE_PRELUDE) {
15394 prelude = node;
15395 node = node->nd_body;
15396 }
15397 if (split) {
15398 node = block_append(NEW_GASGN(rb_intern("$F"),
15399 NEW_CALL(NEW_GVAR(rb_intern("$_")),
15400 rb_intern("split"), 0)),
15401 node);
15402 }
15403 if (chop) {
15404 node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
15405 rb_intern("chop!"), 0), node);
15406 }
15407
15408 node = NEW_OPT_N(node);
15409
15410 if (prelude) {
15411 prelude->nd_body = node;
15412 scope->nd_body = prelude;
15413 }
15414 else {
15415 scope->nd_body = node;
15416 }
15417
15418 return scope;
15419 }
15420
15421 static const struct {
15422 ID token;
15423 const char *name;
15424 } op_tbl[] = {
15425 {tDOT2, ".."},
15426 {tDOT3, "..."},
15427 {'+', "+(binary)"},
15428 {'-', "-(binary)"},
15429 {tPOW, "**"},
15430 {tUPLUS, "+@"},
15431 {tUMINUS, "-@"},
15432 {tCMP, "<=>"},
15433 {tGEQ, ">="},
15434 {tLEQ, "<="},
15435 {tEQ, "=="},
15436 {tEQQ, "==="},
15437 {tNEQ, "!="},
15438 {tMATCH, "=~"},
15439 {tNMATCH, "!~"},
15440 {tAREF, "[]"},
15441 {tASET, "[]="},
15442 {tLSHFT, "<<"},
15443 {tRSHFT, ">>"},
15444 {tCOLON2, "::"},
15445 };
15446
15447 #define op_tbl_count numberof(op_tbl)
15448
15449 #ifndef ENABLE_SELECTOR_NAMESPACE
15450 #define ENABLE_SELECTOR_NAMESPACE 0
15451 #endif
15452
15453 static struct symbols {
15454 ID last_id;
15455 st_table *sym_id;
15456 st_table *id_str;
15457 #if ENABLE_SELECTOR_NAMESPACE
15458 st_table *ivar2_id;
15459 st_table *id_ivar2;
15460 #endif
15461 VALUE op_sym[tLAST_TOKEN];
15462 } global_symbols = {tLAST_ID};
15463
15464 static const struct st_hash_type symhash = {
15465 rb_str_hash_cmp,
15466 rb_str_hash,
15467 };
15468
15469 #if ENABLE_SELECTOR_NAMESPACE
15470 struct ivar2_key {
15471 ID id;
15472 VALUE klass;
15473 };
15474
15475 static int
15476 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
15477 {
15478 if (key1->id == key2->id && key1->klass == key2->klass) {
15479 return 0;
15480 }
15481 return 1;
15482 }
15483
15484 static int
15485 ivar2_hash(struct ivar2_key *key)
15486 {
15487 return (key->id << 8) ^ (key->klass >> 2);
15488 }
15489
15490 static const struct st_hash_type ivar2_hash_type = {
15491 ivar2_cmp,
15492 ivar2_hash,
15493 };
15494 #endif
15495
15496 void
15497 Init_sym(void)
15498 {
15499 global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
15500 global_symbols.id_str = st_init_numtable_with_size(1000);
15501 #if ENABLE_SELECTOR_NAMESPACE
15502 global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
15503 global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
15504 #endif
15505
15506 Init_id();
15507 }
15508
15509 void
15510 rb_gc_mark_symbols(void)
15511 {
15512 rb_mark_tbl(global_symbols.id_str);
15513 rb_gc_mark_locations(global_symbols.op_sym,
15514 global_symbols.op_sym + tLAST_TOKEN);
15515 }
15516 #endif
15517
15518 static ID
15519 internal_id_gen(struct parser_params *parser)
15520 {
15521 ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
15522 id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
15523 return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
15524 }
15525
15526 #ifndef RIPPER
15527 static int
15528 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
15529 {
15530 int mb = 0;
15531
15532 if (m >= e) return 0;
15533 switch (*m) {
15534 case '~': case '*': case '$': case '?': case '!': case '@':
15535 case '/': case '\\': case ';': case ',': case '.': case '=':
15536 case ':': case '<': case '>': case '\"':
15537 case '&': case '`': case '\'': case '+':
15538 case '0':
15539 ++m;
15540 break;
15541 case '-':
15542 ++m;
15543 if (m < e && is_identchar(m, e, enc)) {
15544 if (!ISASCII(*m)) mb = 1;
15545 m += rb_enc_mbclen(m, e, enc);
15546 }
15547 break;
15548 default:
15549 if (!rb_enc_isdigit(*m, enc)) return 0;
15550 do {
15551 if (!ISASCII(*m)) mb = 1;
15552 ++m;
15553 } while (m < e && rb_enc_isdigit(*m, enc));
15554 }
15555 return m == e ? mb + 1 : 0;
15556 }
15557
15558 int
15559 rb_symname_p(const char *name)
15560 {
15561 return rb_enc_symname_p(name, rb_ascii8bit_encoding());
15562 }
15563
15564 int
15565 rb_enc_symname_p(const char *name, rb_encoding *enc)
15566 {
15567 return rb_enc_symname2_p(name, strlen(name), enc);
15568 }
15569
15570 int
15571 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
15572 {
15573 const char *m = name;
15574 const char *e = m + len;
15575 int localid = FALSE;
15576
15577 if (!m) return FALSE;
15578 switch (*m) {
15579 case '\0':
15580 return FALSE;
15581
15582 case '$':
15583 if (is_special_global_name(++m, e, enc)) return TRUE;
15584 goto id;
15585
15586 case '@':
15587 if (*++m == '@') ++m;
15588 goto id;
15589
15590 case '<':
15591 switch (*++m) {
15592 case '<': ++m; break;
15593 case '=': if (*++m == '>') ++m; break;
15594 default: break;
15595 }
15596 break;
15597
15598 case '>':
15599 switch (*++m) {
15600 case '>': case '=': ++m; break;
15601 }
15602 break;
15603
15604 case '=':
15605 switch (*++m) {
15606 case '~': ++m; break;
15607 case '=': if (*++m == '=') ++m; break;
15608 default: return FALSE;
15609 }
15610 break;
15611
15612 case '*':
15613 if (*++m == '*') ++m;
15614 break;
15615
15616 case '+': case '-':
15617 if (*++m == '@') ++m;
15618 break;
15619
15620 case '|': case '^': case '&': case '/': case '%': case '~': case '`':
15621 ++m;
15622 break;
15623
15624 case '[':
15625 if (*++m != ']') return FALSE;
15626 if (*++m == '=') ++m;
15627 break;
15628
15629 case '!':
15630 switch (*++m) {
15631 case '\0': return TRUE;
15632 case '=': case '~': ++m; break;
15633 default: return FALSE;
15634 }
15635 break;
15636
15637 default:
15638 localid = !rb_enc_isupper(*m, enc);
15639 id:
15640 if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
15641 return FALSE;
15642 while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
15643 if (localid) {
15644 switch (*m) {
15645 case '!': case '?': case '=': ++m;
15646 }
15647 }
15648 break;
15649 }
15650 return m == e;
15651 }
15652
15653 static ID
15654 register_symid(ID id, const char *name, long len, rb_encoding *enc)
15655 {
15656 VALUE str = rb_enc_str_new(name, len, enc);
15657 OBJ_FREEZE(str);
15658 st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
15659 st_add_direct(global_symbols.id_str, id, (st_data_t)str);
15660 return id;
15661 }
15662
15663 ID
15664 rb_intern3(const char *name, long len, rb_encoding *enc)
15665 {
15666 const char *m = name;
15667 const char *e = m + len;
15668 unsigned char c;
15669 VALUE str;
15670 ID id;
15671 long last;
15672 int mb;
15673 st_data_t data;
15674 struct RString fake_str;
15675 fake_str.basic.flags = T_STRING|RSTRING_NOEMBED|FL_FREEZE;
15676 fake_str.basic.klass = rb_cString;
15677 fake_str.as.heap.len = len;
15678 fake_str.as.heap.ptr = (char *)name;
15679 fake_str.as.heap.aux.capa = len;
15680 str = (VALUE)&fake_str;
15681 rb_enc_associate(str, enc);
15682
15683 if (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) {
15684 rb_raise(rb_eEncodingError, "invalid encoding symbol");
15685 }
15686
15687 if (st_lookup(global_symbols.sym_id, str, &data))
15688 return (ID)data;
15689
15690 if (rb_cString && !rb_enc_asciicompat(enc)) {
15691 id = ID_JUNK;
15692 goto new_id;
15693 }
15694 last = len-1;
15695 id = 0;
15696 switch (*m) {
15697 case '$':
15698 id |= ID_GLOBAL;
15699 if ((mb = is_special_global_name(++m, e, enc)) != 0) {
15700 if (!--mb) enc = rb_ascii8bit_encoding();
15701 goto new_id;
15702 }
15703 break;
15704 case '@':
15705 if (m[1] == '@') {
15706 m++;
15707 id |= ID_CLASS;
15708 }
15709 else {
15710 id |= ID_INSTANCE;
15711 }
15712 m++;
15713 break;
15714 default:
15715 c = m[0];
15716 if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
15717
15718 int i;
15719
15720 if (len == 1) {
15721 id = c;
15722 goto id_register;
15723 }
15724 for (i = 0; i < op_tbl_count; i++) {
15725 if (*op_tbl[i].name == *m &&
15726 strcmp(op_tbl[i].name, m) == 0) {
15727 id = op_tbl[i].token;
15728 goto id_register;
15729 }
15730 }
15731 }
15732
15733 if (m[last] == '=') {
15734
15735 id = rb_intern3(name, last, enc);
15736 if (id > tLAST_TOKEN && !is_attrset_id(id)) {
15737 enc = rb_enc_get(rb_id2str(id));
15738 id = rb_id_attrset(id);
15739 goto id_register;
15740 }
15741 id = ID_ATTRSET;
15742 }
15743 else if (rb_enc_isupper(m[0], enc)) {
15744 id = ID_CONST;
15745 }
15746 else {
15747 id = ID_LOCAL;
15748 }
15749 break;
15750 }
15751 mb = 0;
15752 if (!rb_enc_isdigit(*m, enc)) {
15753 while (m <= name + last && is_identchar(m, e, enc)) {
15754 if (ISASCII(*m)) {
15755 m++;
15756 }
15757 else {
15758 mb = 1;
15759 m += rb_enc_mbclen(m, e, enc);
15760 }
15761 }
15762 }
15763 if (m - name < len) id = ID_JUNK;
15764 if (enc != rb_usascii_encoding()) {
15765
15766
15767
15768
15769 if (!mb) {
15770 for (; m <= name + len; ++m) {
15771 if (!ISASCII(*m)) goto mbstr;
15772 }
15773 enc = rb_usascii_encoding();
15774 }
15775 mbstr:;
15776 }
15777 new_id:
15778 if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) {
15779 if (len > 20) {
15780 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
15781 name);
15782 }
15783 else {
15784 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
15785 (int)len, name);
15786 }
15787 }
15788 id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
15789 id_register:
15790 return register_symid(id, name, len, enc);
15791 }
15792
15793 ID
15794 rb_intern2(const char *name, long len)
15795 {
15796 return rb_intern3(name, len, rb_usascii_encoding());
15797 }
15798
15799 #undef rb_intern
15800 ID
15801 rb_intern(const char *name)
15802 {
15803 return rb_intern2(name, strlen(name));
15804 }
15805
15806 ID
15807 rb_intern_str(VALUE str)
15808 {
15809 rb_encoding *enc;
15810 ID id;
15811
15812 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
15813 enc = rb_usascii_encoding();
15814 }
15815 else {
15816 enc = rb_enc_get(str);
15817 }
15818 id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc);
15819 RB_GC_GUARD(str);
15820 return id;
15821 }
15822
15823 VALUE
15824 rb_id2str(ID id)
15825 {
15826 st_data_t data;
15827
15828 if (id < tLAST_TOKEN) {
15829 int i = 0;
15830
15831 if (id < INT_MAX && rb_ispunct((int)id)) {
15832 VALUE str = global_symbols.op_sym[i = (int)id];
15833 if (!str) {
15834 char name[2];
15835 name[0] = (char)id;
15836 name[1] = 0;
15837 str = rb_usascii_str_new(name, 1);
15838 OBJ_FREEZE(str);
15839 global_symbols.op_sym[i] = str;
15840 }
15841 return str;
15842 }
15843 for (i = 0; i < op_tbl_count; i++) {
15844 if (op_tbl[i].token == id) {
15845 VALUE str = global_symbols.op_sym[i];
15846 if (!str) {
15847 str = rb_usascii_str_new2(op_tbl[i].name);
15848 OBJ_FREEZE(str);
15849 global_symbols.op_sym[i] = str;
15850 }
15851 return str;
15852 }
15853 }
15854 }
15855
15856 if (st_lookup(global_symbols.id_str, id, &data)) {
15857 VALUE str = (VALUE)data;
15858 if (RBASIC(str)->klass == 0)
15859 RBASIC(str)->klass = rb_cString;
15860 return str;
15861 }
15862
15863 if (is_attrset_id(id)) {
15864 ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL;
15865 VALUE str;
15866
15867 while (!(str = rb_id2str(id2))) {
15868 if (!is_local_id(id2)) return 0;
15869 id2 = (id & ~ID_SCOPE_MASK) | ID_CONST;
15870 }
15871 str = rb_str_dup(str);
15872 rb_str_cat(str, "=", 1);
15873 rb_intern_str(str);
15874 if (st_lookup(global_symbols.id_str, id, &data)) {
15875 VALUE str = (VALUE)data;
15876 if (RBASIC(str)->klass == 0)
15877 RBASIC(str)->klass = rb_cString;
15878 return str;
15879 }
15880 }
15881 return 0;
15882 }
15883
15884 const char *
15885 rb_id2name(ID id)
15886 {
15887 VALUE str = rb_id2str(id);
15888
15889 if (!str) return 0;
15890 return RSTRING_PTR(str);
15891 }
15892
15893 static int
15894 symbols_i(VALUE sym, ID value, VALUE ary)
15895 {
15896 rb_ary_push(ary, ID2SYM(value));
15897 return ST_CONTINUE;
15898 }
15899
15900
15901
15902
15903
15904
15905
15906
15907
15908
15909
15910
15911
15912
15913
15914
15915
15916 VALUE
15917 rb_sym_all_symbols(void)
15918 {
15919 VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries);
15920
15921 st_foreach(global_symbols.sym_id, symbols_i, ary);
15922 return ary;
15923 }
15924
15925 int
15926 rb_is_const_id(ID id)
15927 {
15928 return is_const_id(id);
15929 }
15930
15931 int
15932 rb_is_class_id(ID id)
15933 {
15934 return is_class_id(id);
15935 }
15936
15937 int
15938 rb_is_instance_id(ID id)
15939 {
15940 return is_instance_id(id);
15941 }
15942
15943 int
15944 rb_is_local_id(ID id)
15945 {
15946 return is_local_id(id);
15947 }
15948
15949 int
15950 rb_is_junk_id(ID id)
15951 {
15952 return is_junk_id(id);
15953 }
15954
15955 #endif
15956
15957 static void
15958 parser_initialize(struct parser_params *parser)
15959 {
15960 parser->eofp = Qfalse;
15961
15962 parser->parser_lex_strterm = 0;
15963 parser->parser_cond_stack = 0;
15964 parser->parser_cmdarg_stack = 0;
15965 parser->parser_class_nest = 0;
15966 parser->parser_paren_nest = 0;
15967 parser->parser_lpar_beg = 0;
15968 parser->parser_in_single = 0;
15969 parser->parser_in_def = 0;
15970 parser->parser_in_defined = 0;
15971 parser->parser_compile_for_eval = 0;
15972 parser->parser_cur_mid = 0;
15973 parser->parser_tokenbuf = NULL;
15974 parser->parser_tokidx = 0;
15975 parser->parser_toksiz = 0;
15976 parser->parser_heredoc_end = 0;
15977 parser->parser_command_start = TRUE;
15978 parser->parser_deferred_nodes = 0;
15979 parser->parser_lex_pbeg = 0;
15980 parser->parser_lex_p = 0;
15981 parser->parser_lex_pend = 0;
15982 parser->parser_lvtbl = 0;
15983 parser->parser_ruby__end__seen = 0;
15984 parser->parser_ruby_sourcefile = 0;
15985 #ifndef RIPPER
15986 parser->is_ripper = 0;
15987 parser->parser_eval_tree_begin = 0;
15988 parser->parser_eval_tree = 0;
15989 #else
15990 parser->is_ripper = 1;
15991 parser->parser_ruby_sourcefile_string = Qnil;
15992 parser->delayed = Qnil;
15993
15994 parser->result = Qnil;
15995 parser->parsing_thread = Qnil;
15996 parser->toplevel_p = TRUE;
15997 #endif
15998 #ifdef YYMALLOC
15999 parser->heap = NULL;
16000 #endif
16001 parser->enc = rb_usascii_encoding();
16002 }
16003
16004 #ifdef RIPPER
16005 #define parser_mark ripper_parser_mark
16006 #define parser_free ripper_parser_free
16007 #endif
16008
16009 static void
16010 parser_mark(void *ptr)
16011 {
16012 struct parser_params *p = (struct parser_params*)ptr;
16013
16014 rb_gc_mark((VALUE)p->parser_lex_strterm);
16015 rb_gc_mark((VALUE)p->parser_deferred_nodes);
16016 rb_gc_mark(p->parser_lex_input);
16017 rb_gc_mark(p->parser_lex_lastline);
16018 rb_gc_mark(p->parser_lex_nextline);
16019 #ifndef RIPPER
16020 rb_gc_mark((VALUE)p->parser_eval_tree_begin) ;
16021 rb_gc_mark((VALUE)p->parser_eval_tree) ;
16022 rb_gc_mark(p->debug_lines);
16023 #else
16024 rb_gc_mark(p->parser_ruby_sourcefile_string);
16025 rb_gc_mark(p->delayed);
16026 rb_gc_mark(p->value);
16027 rb_gc_mark(p->result);
16028 rb_gc_mark(p->parsing_thread);
16029 #endif
16030 #ifdef YYMALLOC
16031 rb_gc_mark((VALUE)p->heap);
16032 #endif
16033 }
16034
16035 static void
16036 parser_free(void *ptr)
16037 {
16038 struct parser_params *p = (struct parser_params*)ptr;
16039 struct local_vars *local, *prev;
16040
16041 if (p->parser_tokenbuf) {
16042 xfree(p->parser_tokenbuf);
16043 }
16044 for (local = p->parser_lvtbl; local; local = prev) {
16045 if (local->vars) xfree(local->vars);
16046 prev = local->prev;
16047 xfree(local);
16048 }
16049 #ifndef RIPPER
16050 xfree(p->parser_ruby_sourcefile);
16051 #endif
16052 xfree(p);
16053 }
16054
16055 static size_t
16056 parser_memsize(const void *ptr)
16057 {
16058 struct parser_params *p = (struct parser_params*)ptr;
16059 struct local_vars *local;
16060 size_t size = sizeof(*p);
16061
16062 if (!ptr) return 0;
16063 size += p->parser_toksiz;
16064 for (local = p->parser_lvtbl; local; local = local->prev) {
16065 size += sizeof(*local);
16066 if (local->vars) size += local->vars->capa * sizeof(ID);
16067 }
16068 #ifndef RIPPER
16069 if (p->parser_ruby_sourcefile) {
16070 size += strlen(p->parser_ruby_sourcefile) + 1;
16071 }
16072 #endif
16073 return size;
16074 }
16075
16076 static const rb_data_type_t parser_data_type = {
16077 "parser",
16078 parser_mark,
16079 parser_free,
16080 parser_memsize,
16081 };
16082
16083 VALUE rb_parser_get_yydebug(VALUE);
16084 VALUE rb_parser_set_yydebug(VALUE, VALUE);
16085
16086 #ifndef RIPPER
16087 #undef rb_reserved_word
16088
16089 const struct kwtable *
16090 rb_reserved_word(const char *str, unsigned int len)
16091 {
16092 return reserved_word(str, len);
16093 }
16094
16095 static struct parser_params *
16096 parser_new(void)
16097 {
16098 struct parser_params *p;
16099
16100 p = ALLOC_N(struct parser_params, 1);
16101 MEMZERO(p, struct parser_params, 1);
16102 parser_initialize(p);
16103 return p;
16104 }
16105
16106 VALUE
16107 rb_parser_new(void)
16108 {
16109 struct parser_params *p = parser_new();
16110
16111 return TypedData_Wrap_Struct(0, &parser_data_type, p);
16112 }
16113
16114
16115
16116
16117
16118
16119
16120
16121 VALUE
16122 rb_parser_end_seen_p(VALUE vparser)
16123 {
16124 struct parser_params *parser;
16125
16126 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16127 return ruby__end__seen ? Qtrue : Qfalse;
16128 }
16129
16130
16131
16132
16133
16134
16135
16136 VALUE
16137 rb_parser_encoding(VALUE vparser)
16138 {
16139 struct parser_params *parser;
16140
16141 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16142 return rb_enc_from_encoding(parser->enc);
16143 }
16144
16145
16146
16147
16148
16149
16150
16151 VALUE
16152 rb_parser_get_yydebug(VALUE self)
16153 {
16154 struct parser_params *parser;
16155
16156 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16157 return yydebug ? Qtrue : Qfalse;
16158 }
16159
16160
16161
16162
16163
16164
16165
16166 VALUE
16167 rb_parser_set_yydebug(VALUE self, VALUE flag)
16168 {
16169 struct parser_params *parser;
16170
16171 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16172 yydebug = RTEST(flag);
16173 return flag;
16174 }
16175
16176 #ifdef YYMALLOC
16177 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
16178 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
16179 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
16180 (n)->u3.cnt = (c), (p))
16181
16182 void *
16183 rb_parser_malloc(struct parser_params *parser, size_t size)
16184 {
16185 size_t cnt = HEAPCNT(1, size);
16186 NODE *n = NEWHEAP();
16187 void *ptr = xmalloc(size);
16188
16189 return ADD2HEAP(n, cnt, ptr);
16190 }
16191
16192 void *
16193 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
16194 {
16195 size_t cnt = HEAPCNT(nelem, size);
16196 NODE *n = NEWHEAP();
16197 void *ptr = xcalloc(nelem, size);
16198
16199 return ADD2HEAP(n, cnt, ptr);
16200 }
16201
16202 void *
16203 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
16204 {
16205 NODE *n;
16206 size_t cnt = HEAPCNT(1, size);
16207
16208 if (ptr && (n = parser->heap) != NULL) {
16209 do {
16210 if (n->u1.node == ptr) {
16211 n->u1.node = ptr = xrealloc(ptr, size);
16212 if (n->u3.cnt) n->u3.cnt = cnt;
16213 return ptr;
16214 }
16215 } while ((n = n->u2.node) != NULL);
16216 }
16217 n = NEWHEAP();
16218 ptr = xrealloc(ptr, size);
16219 return ADD2HEAP(n, cnt, ptr);
16220 }
16221
16222 void
16223 rb_parser_free(struct parser_params *parser, void *ptr)
16224 {
16225 NODE **prev = &parser->heap, *n;
16226
16227 while ((n = *prev) != NULL) {
16228 if (n->u1.node == ptr) {
16229 *prev = n->u2.node;
16230 rb_gc_force_recycle((VALUE)n);
16231 break;
16232 }
16233 prev = &n->u2.node;
16234 }
16235 xfree(ptr);
16236 }
16237 #endif
16238 #endif
16239
16240 #ifdef RIPPER
16241 #ifdef RIPPER_DEBUG
16242 extern int rb_is_pointer_to_heap(VALUE);
16243
16244
16245 static VALUE
16246 ripper_validate_object(VALUE self, VALUE x)
16247 {
16248 if (x == Qfalse) return x;
16249 if (x == Qtrue) return x;
16250 if (x == Qnil) return x;
16251 if (x == Qundef)
16252 rb_raise(rb_eArgError, "Qundef given");
16253 if (FIXNUM_P(x)) return x;
16254 if (SYMBOL_P(x)) return x;
16255 if (!rb_is_pointer_to_heap(x))
16256 rb_raise(rb_eArgError, "invalid pointer: %p", x);
16257 switch (TYPE(x)) {
16258 case T_STRING:
16259 case T_OBJECT:
16260 case T_ARRAY:
16261 case T_BIGNUM:
16262 case T_FLOAT:
16263 return x;
16264 case T_NODE:
16265 if (nd_type(x) != NODE_LASGN) {
16266 rb_raise(rb_eArgError, "NODE given: %p", x);
16267 }
16268 return ((NODE *)x)->nd_rval;
16269 default:
16270 rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
16271 x, rb_obj_classname(x));
16272 }
16273 return x;
16274 }
16275 #endif
16276
16277 #define validate(x) (x = get_value(x))
16278
16279 static VALUE
16280 ripper_dispatch0(struct parser_params *parser, ID mid)
16281 {
16282 return rb_funcall(parser->value, mid, 0);
16283 }
16284
16285 static VALUE
16286 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
16287 {
16288 validate(a);
16289 return rb_funcall(parser->value, mid, 1, a);
16290 }
16291
16292 static VALUE
16293 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
16294 {
16295 validate(a);
16296 validate(b);
16297 return rb_funcall(parser->value, mid, 2, a, b);
16298 }
16299
16300 static VALUE
16301 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
16302 {
16303 validate(a);
16304 validate(b);
16305 validate(c);
16306 return rb_funcall(parser->value, mid, 3, a, b, c);
16307 }
16308
16309 static VALUE
16310 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
16311 {
16312 validate(a);
16313 validate(b);
16314 validate(c);
16315 validate(d);
16316 return rb_funcall(parser->value, mid, 4, a, b, c, d);
16317 }
16318
16319 static VALUE
16320 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
16321 {
16322 validate(a);
16323 validate(b);
16324 validate(c);
16325 validate(d);
16326 validate(e);
16327 return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
16328 }
16329
16330 static const struct kw_assoc {
16331 ID id;
16332 const char *name;
16333 } keyword_to_name[] = {
16334 {keyword_class, "class"},
16335 {keyword_module, "module"},
16336 {keyword_def, "def"},
16337 {keyword_undef, "undef"},
16338 {keyword_begin, "begin"},
16339 {keyword_rescue, "rescue"},
16340 {keyword_ensure, "ensure"},
16341 {keyword_end, "end"},
16342 {keyword_if, "if"},
16343 {keyword_unless, "unless"},
16344 {keyword_then, "then"},
16345 {keyword_elsif, "elsif"},
16346 {keyword_else, "else"},
16347 {keyword_case, "case"},
16348 {keyword_when, "when"},
16349 {keyword_while, "while"},
16350 {keyword_until, "until"},
16351 {keyword_for, "for"},
16352 {keyword_break, "break"},
16353 {keyword_next, "next"},
16354 {keyword_redo, "redo"},
16355 {keyword_retry, "retry"},
16356 {keyword_in, "in"},
16357 {keyword_do, "do"},
16358 {keyword_do_cond, "do"},
16359 {keyword_do_block, "do"},
16360 {keyword_return, "return"},
16361 {keyword_yield, "yield"},
16362 {keyword_super, "super"},
16363 {keyword_self, "self"},
16364 {keyword_nil, "nil"},
16365 {keyword_true, "true"},
16366 {keyword_false, "false"},
16367 {keyword_and, "and"},
16368 {keyword_or, "or"},
16369 {keyword_not, "not"},
16370 {modifier_if, "if"},
16371 {modifier_unless, "unless"},
16372 {modifier_while, "while"},
16373 {modifier_until, "until"},
16374 {modifier_rescue, "rescue"},
16375 {keyword_alias, "alias"},
16376 {keyword_defined, "defined?"},
16377 {keyword_BEGIN, "BEGIN"},
16378 {keyword_END, "END"},
16379 {keyword__LINE__, "__LINE__"},
16380 {keyword__FILE__, "__FILE__"},
16381 {keyword__ENCODING__, "__ENCODING__"},
16382 {0, NULL}
16383 };
16384
16385 static const char*
16386 keyword_id_to_str(ID id)
16387 {
16388 const struct kw_assoc *a;
16389
16390 for (a = keyword_to_name; a->id; a++) {
16391 if (a->id == id)
16392 return a->name;
16393 }
16394 return NULL;
16395 }
16396
16397 #undef ripper_id2sym
16398 static VALUE
16399 ripper_id2sym(ID id)
16400 {
16401 const char *name;
16402 char buf[8];
16403
16404 if (id <= 256) {
16405 buf[0] = (char)id;
16406 buf[1] = '\0';
16407 return ID2SYM(rb_intern2(buf, 1));
16408 }
16409 if ((name = keyword_id_to_str(id))) {
16410 return ID2SYM(rb_intern(name));
16411 }
16412 switch (id) {
16413 case tOROP:
16414 name = "||";
16415 break;
16416 case tANDOP:
16417 name = "&&";
16418 break;
16419 default:
16420 name = rb_id2name(id);
16421 if (!name) {
16422 rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
16423 }
16424 return ID2SYM(id);
16425 }
16426 return ID2SYM(rb_intern(name));
16427 }
16428
16429 static ID
16430 ripper_get_id(VALUE v)
16431 {
16432 NODE *nd;
16433 if (!RB_TYPE_P(v, T_NODE)) return 0;
16434 nd = (NODE *)v;
16435 if (nd_type(nd) != NODE_LASGN) return 0;
16436 return nd->nd_vid;
16437 }
16438
16439 static VALUE
16440 ripper_get_value(VALUE v)
16441 {
16442 NODE *nd;
16443 if (v == Qundef) return Qnil;
16444 if (!RB_TYPE_P(v, T_NODE)) return v;
16445 nd = (NODE *)v;
16446 if (nd_type(nd) != NODE_LASGN) return Qnil;
16447 return nd->nd_rval;
16448 }
16449
16450 static void
16451 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
16452 {
16453 VALUE str;
16454 va_list args;
16455
16456 va_start(args, fmt);
16457 str = rb_vsprintf(fmt, args);
16458 va_end(args);
16459 rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
16460 }
16461
16462 static void
16463 ripper_warn0(struct parser_params *parser, const char *fmt)
16464 {
16465 rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
16466 }
16467
16468 static void
16469 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
16470 {
16471 rb_funcall(parser->value, rb_intern("warn"), 2,
16472 STR_NEW2(fmt), INT2NUM(a));
16473 }
16474
16475 #if 0
16476 static void
16477 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
16478 {
16479 rb_funcall(parser->value, rb_intern("warn"), 2,
16480 STR_NEW2(fmt), STR_NEW2(str));
16481 }
16482 #endif
16483
16484 static void
16485 ripper_warning0(struct parser_params *parser, const char *fmt)
16486 {
16487 rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
16488 }
16489
16490 static void
16491 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
16492 {
16493 rb_funcall(parser->value, rb_intern("warning"), 2,
16494 STR_NEW2(fmt), STR_NEW2(str));
16495 }
16496
16497 static VALUE
16498 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
16499 {
16500 return rb_funcall(src, ripper_id_gets, 0);
16501 }
16502
16503 static VALUE
16504 ripper_s_allocate(VALUE klass)
16505 {
16506 struct parser_params *p;
16507 VALUE self;
16508
16509 p = ALLOC_N(struct parser_params, 1);
16510 MEMZERO(p, struct parser_params, 1);
16511 self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
16512 p->value = self;
16513 return self;
16514 }
16515
16516 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
16517
16518
16519
16520
16521
16522
16523
16524
16525
16526
16527
16528 static VALUE
16529 ripper_initialize(int argc, VALUE *argv, VALUE self)
16530 {
16531 struct parser_params *parser;
16532 VALUE src, fname, lineno;
16533
16534 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16535 rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
16536 if (rb_obj_respond_to(src, ripper_id_gets, 0)) {
16537 parser->parser_lex_gets = ripper_lex_get_generic;
16538 }
16539 else {
16540 StringValue(src);
16541 parser->parser_lex_gets = lex_get_str;
16542 }
16543 parser->parser_lex_input = src;
16544 parser->eofp = Qfalse;
16545 if (NIL_P(fname)) {
16546 fname = STR_NEW2("(ripper)");
16547 }
16548 else {
16549 StringValue(fname);
16550 }
16551 parser_initialize(parser);
16552
16553 parser->parser_ruby_sourcefile_string = fname;
16554 parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
16555 parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
16556
16557 return Qnil;
16558 }
16559
16560 extern VALUE rb_thread_pass(void);
16561
16562 struct ripper_args {
16563 struct parser_params *parser;
16564 int argc;
16565 VALUE *argv;
16566 };
16567
16568 static VALUE
16569 ripper_parse0(VALUE parser_v)
16570 {
16571 struct parser_params *parser;
16572
16573 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16574 parser_prepare(parser);
16575 ripper_yyparse((void*)parser);
16576 return parser->result;
16577 }
16578
16579 static VALUE
16580 ripper_ensure(VALUE parser_v)
16581 {
16582 struct parser_params *parser;
16583
16584 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16585 parser->parsing_thread = Qnil;
16586 return Qnil;
16587 }
16588
16589
16590
16591
16592
16593
16594
16595 static VALUE
16596 ripper_parse(VALUE self)
16597 {
16598 struct parser_params *parser;
16599
16600 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16601 if (!ripper_initialized_p(parser)) {
16602 rb_raise(rb_eArgError, "method called for uninitialized object");
16603 }
16604 if (!NIL_P(parser->parsing_thread)) {
16605 if (parser->parsing_thread == rb_thread_current())
16606 rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
16607 else
16608 rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
16609 }
16610 parser->parsing_thread = rb_thread_current();
16611 rb_ensure(ripper_parse0, self, ripper_ensure, self);
16612
16613 return parser->result;
16614 }
16615
16616
16617
16618
16619
16620
16621
16622
16623 static VALUE
16624 ripper_column(VALUE self)
16625 {
16626 struct parser_params *parser;
16627 long col;
16628
16629 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16630 if (!ripper_initialized_p(parser)) {
16631 rb_raise(rb_eArgError, "method called for uninitialized object");
16632 }
16633 if (NIL_P(parser->parsing_thread)) return Qnil;
16634 col = parser->tokp - parser->parser_lex_pbeg;
16635 return LONG2NUM(col);
16636 }
16637
16638
16639
16640
16641
16642
16643
16644 static VALUE
16645 ripper_filename(VALUE self)
16646 {
16647 struct parser_params *parser;
16648
16649 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16650 if (!ripper_initialized_p(parser)) {
16651 rb_raise(rb_eArgError, "method called for uninitialized object");
16652 }
16653 return parser->parser_ruby_sourcefile_string;
16654 }
16655
16656
16657
16658
16659
16660
16661
16662
16663 static VALUE
16664 ripper_lineno(VALUE self)
16665 {
16666 struct parser_params *parser;
16667
16668 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16669 if (!ripper_initialized_p(parser)) {
16670 rb_raise(rb_eArgError, "method called for uninitialized object");
16671 }
16672 if (NIL_P(parser->parsing_thread)) return Qnil;
16673 return INT2NUM(parser->parser_ruby_sourceline);
16674 }
16675
16676 #ifdef RIPPER_DEBUG
16677
16678 static VALUE
16679 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
16680 {
16681 StringValue(msg);
16682 if (obj == Qundef) {
16683 rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg));
16684 }
16685 return Qnil;
16686 }
16687
16688
16689 static VALUE
16690 ripper_value(VALUE self, VALUE obj)
16691 {
16692 return ULONG2NUM(obj);
16693 }
16694 #endif
16695
16696 void
16697 Init_ripper(void)
16698 {
16699 VALUE Ripper;
16700
16701 Ripper = rb_define_class("Ripper", rb_cObject);
16702 rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
16703 rb_define_alloc_func(Ripper, ripper_s_allocate);
16704 rb_define_method(Ripper, "initialize", ripper_initialize, -1);
16705 rb_define_method(Ripper, "parse", ripper_parse, 0);
16706 rb_define_method(Ripper, "column", ripper_column, 0);
16707 rb_define_method(Ripper, "filename", ripper_filename, 0);
16708 rb_define_method(Ripper, "lineno", ripper_lineno, 0);
16709 rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
16710 rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
16711 rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
16712 rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
16713 #ifdef RIPPER_DEBUG
16714 rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
16715 rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
16716 rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
16717 #endif
16718
16719 ripper_id_gets = rb_intern("gets");
16720 ripper_init_eventids1(Ripper);
16721 ripper_init_eventids2(Ripper);
16722
16723 rb_intern("||");
16724 rb_intern("&&");
16725 }
16726 #endif
16727
16728