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.2"
00049
00050
00051 #define YYSKELETON_NAME "yacc.c"
00052
00053
00054 #define YYPURE 1
00055
00056
00057 #define YYPUSH 0
00058
00059
00060 #define YYPULL 1
00061
00062
00063 #define YYLSP_NEEDED 0
00064
00065
00066
00067
00068
00069
00070 #line 12 "parse.y"
00071
00072
00073 #define YYDEBUG 1
00074 #define YYERROR_VERBOSE 1
00075 #define YYSTACK_USE_ALLOCA 0
00076
00077 #include "ruby/ruby.h"
00078 #include "ruby/st.h"
00079 #include "ruby/encoding.h"
00080 #include "node.h"
00081 #include "parse.h"
00082 #include "id.h"
00083 #include "regenc.h"
00084 #include <stdio.h>
00085 #include <errno.h>
00086 #include <ctype.h>
00087
00088 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
00089
00090 #define YYMALLOC(size) rb_parser_malloc(parser, size)
00091 #define YYREALLOC(ptr, size) rb_parser_realloc(parser, ptr, size)
00092 #define YYCALLOC(nelem, size) rb_parser_calloc(parser, nelem, size)
00093 #define YYFREE(ptr) rb_parser_free(parser, ptr)
00094 #define malloc YYMALLOC
00095 #define realloc YYREALLOC
00096 #define calloc YYCALLOC
00097 #define free YYFREE
00098
00099 #ifndef RIPPER
00100 static ID register_symid(ID, const char *, long, rb_encoding *);
00101 #define REGISTER_SYMID(id, name) register_symid(id, name, strlen(name), enc)
00102 #include "id.c"
00103 #endif
00104
00105 #define is_notop_id(id) ((id)>tLAST_TOKEN)
00106 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL)
00107 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL)
00108 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE)
00109 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET)
00110 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST)
00111 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS)
00112 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK)
00113
00114 #define is_asgn_or_id(id) ((is_notop_id(id)) && \
00115 (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \
00116 ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \
00117 ((id)&ID_SCOPE_MASK) == ID_CLASS))
00118
00119 enum lex_state_e {
00120 EXPR_BEG,
00121 EXPR_END,
00122 EXPR_ENDARG,
00123 EXPR_ENDFN,
00124 EXPR_ARG,
00125 EXPR_CMDARG,
00126 EXPR_MID,
00127 EXPR_FNAME,
00128 EXPR_DOT,
00129 EXPR_CLASS,
00130 EXPR_VALUE,
00131 EXPR_MAX_STATE
00132 };
00133
00134 typedef VALUE stack_type;
00135
00136 # define BITSTACK_PUSH(stack, n) (stack = (stack<<1)|((n)&1))
00137 # define BITSTACK_POP(stack) (stack = stack >> 1)
00138 # define BITSTACK_LEXPOP(stack) (stack = (stack >> 1) | (stack & 1))
00139 # define BITSTACK_SET_P(stack) (stack&1)
00140
00141 #define COND_PUSH(n) BITSTACK_PUSH(cond_stack, n)
00142 #define COND_POP() BITSTACK_POP(cond_stack)
00143 #define COND_LEXPOP() BITSTACK_LEXPOP(cond_stack)
00144 #define COND_P() BITSTACK_SET_P(cond_stack)
00145
00146 #define CMDARG_PUSH(n) BITSTACK_PUSH(cmdarg_stack, n)
00147 #define CMDARG_POP() BITSTACK_POP(cmdarg_stack)
00148 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
00149 #define CMDARG_P() BITSTACK_SET_P(cmdarg_stack)
00150
00151 struct vtable {
00152 ID *tbl;
00153 int pos;
00154 int capa;
00155 struct vtable *prev;
00156 };
00157
00158 struct local_vars {
00159 struct vtable *args;
00160 struct vtable *vars;
00161 struct local_vars *prev;
00162 };
00163
00164 #define DVARS_INHERIT ((void*)1)
00165 #define DVARS_TOPSCOPE NULL
00166 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
00167 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
00168
00169 static int
00170 vtable_size(const struct vtable *tbl)
00171 {
00172 if (POINTER_P(tbl)) {
00173 return tbl->pos;
00174 }
00175 else {
00176 return 0;
00177 }
00178 }
00179
00180 #define VTBL_DEBUG 0
00181
00182 static struct vtable *
00183 vtable_alloc(struct vtable *prev)
00184 {
00185 struct vtable *tbl = ALLOC(struct vtable);
00186 tbl->pos = 0;
00187 tbl->capa = 8;
00188 tbl->tbl = ALLOC_N(ID, tbl->capa);
00189 tbl->prev = prev;
00190 if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
00191 return tbl;
00192 }
00193
00194 static void
00195 vtable_free(struct vtable *tbl)
00196 {
00197 if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
00198 if (POINTER_P(tbl)) {
00199 if (tbl->tbl) {
00200 xfree(tbl->tbl);
00201 }
00202 xfree(tbl);
00203 }
00204 }
00205
00206 static void
00207 vtable_add(struct vtable *tbl, ID id)
00208 {
00209 if (!POINTER_P(tbl)) {
00210 rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
00211 }
00212 if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id));
00213
00214 if (tbl->pos == tbl->capa) {
00215 tbl->capa = tbl->capa * 2;
00216 REALLOC_N(tbl->tbl, ID, tbl->capa);
00217 }
00218 tbl->tbl[tbl->pos++] = id;
00219 }
00220
00221 static int
00222 vtable_included(const struct vtable * tbl, ID id)
00223 {
00224 int i;
00225
00226 if (POINTER_P(tbl)) {
00227 for (i = 0; i < tbl->pos; i++) {
00228 if (tbl->tbl[i] == id) {
00229 return 1;
00230 }
00231 }
00232 }
00233 return 0;
00234 }
00235
00236
00237 #ifndef RIPPER
00238 typedef struct token_info {
00239 const char *token;
00240 int linenum;
00241 int column;
00242 int nonspc;
00243 struct token_info *next;
00244 } token_info;
00245 #endif
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256 struct parser_params {
00257 int is_ripper;
00258 NODE *heap;
00259
00260 YYSTYPE *parser_yylval;
00261 VALUE eofp;
00262
00263 NODE *parser_lex_strterm;
00264 enum lex_state_e parser_lex_state;
00265 stack_type parser_cond_stack;
00266 stack_type parser_cmdarg_stack;
00267 int parser_class_nest;
00268 int parser_paren_nest;
00269 int parser_lpar_beg;
00270 int parser_in_single;
00271 int parser_in_def;
00272 int parser_compile_for_eval;
00273 VALUE parser_cur_mid;
00274 int parser_in_defined;
00275 char *parser_tokenbuf;
00276 int parser_tokidx;
00277 int parser_toksiz;
00278 VALUE parser_lex_input;
00279 VALUE parser_lex_lastline;
00280 VALUE parser_lex_nextline;
00281 const char *parser_lex_pbeg;
00282 const char *parser_lex_p;
00283 const char *parser_lex_pend;
00284 int parser_heredoc_end;
00285 int parser_command_start;
00286 NODE *parser_deferred_nodes;
00287 long parser_lex_gets_ptr;
00288 VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
00289 struct local_vars *parser_lvtbl;
00290 int parser_ruby__end__seen;
00291 int line_count;
00292 int has_shebang;
00293 char *parser_ruby_sourcefile;
00294 int parser_ruby_sourceline;
00295 rb_encoding *enc;
00296 rb_encoding *utf8;
00297
00298 int parser_yydebug;
00299
00300 #ifndef RIPPER
00301
00302 NODE *parser_eval_tree_begin;
00303 NODE *parser_eval_tree;
00304 VALUE debug_lines;
00305 VALUE coverage;
00306 int nerr;
00307
00308 token_info *parser_token_info;
00309 #else
00310
00311 VALUE parser_ruby_sourcefile_string;
00312 const char *tokp;
00313 VALUE delayed;
00314 int delayed_line;
00315 int delayed_col;
00316
00317 VALUE value;
00318 VALUE result;
00319 VALUE parsing_thread;
00320 int toplevel_p;
00321 #endif
00322 };
00323
00324 #define UTF8_ENC() (parser->utf8 ? parser->utf8 : \
00325 (parser->utf8 = rb_utf8_encoding()))
00326 #define STR_NEW(p,n) rb_enc_str_new((p),(n),parser->enc)
00327 #define STR_NEW0() rb_enc_str_new(0,0,parser->enc)
00328 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),parser->enc)
00329 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),parser->enc)
00330 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
00331 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), parser->enc)
00332
00333 #ifdef YYMALLOC
00334 void *rb_parser_malloc(struct parser_params *, size_t);
00335 void *rb_parser_realloc(struct parser_params *, void *, size_t);
00336 void *rb_parser_calloc(struct parser_params *, size_t, size_t);
00337 void rb_parser_free(struct parser_params *, void *);
00338 #endif
00339
00340 static int parser_yyerror(struct parser_params*, const char*);
00341 #define yyerror(msg) parser_yyerror(parser, msg)
00342
00343 #define YYLEX_PARAM parser
00344
00345 #define lex_strterm (parser->parser_lex_strterm)
00346 #define lex_state (parser->parser_lex_state)
00347 #define cond_stack (parser->parser_cond_stack)
00348 #define cmdarg_stack (parser->parser_cmdarg_stack)
00349 #define class_nest (parser->parser_class_nest)
00350 #define paren_nest (parser->parser_paren_nest)
00351 #define lpar_beg (parser->parser_lpar_beg)
00352 #define in_single (parser->parser_in_single)
00353 #define in_def (parser->parser_in_def)
00354 #define compile_for_eval (parser->parser_compile_for_eval)
00355 #define cur_mid (parser->parser_cur_mid)
00356 #define in_defined (parser->parser_in_defined)
00357 #define tokenbuf (parser->parser_tokenbuf)
00358 #define tokidx (parser->parser_tokidx)
00359 #define toksiz (parser->parser_toksiz)
00360 #define lex_input (parser->parser_lex_input)
00361 #define lex_lastline (parser->parser_lex_lastline)
00362 #define lex_nextline (parser->parser_lex_nextline)
00363 #define lex_pbeg (parser->parser_lex_pbeg)
00364 #define lex_p (parser->parser_lex_p)
00365 #define lex_pend (parser->parser_lex_pend)
00366 #define heredoc_end (parser->parser_heredoc_end)
00367 #define command_start (parser->parser_command_start)
00368 #define deferred_nodes (parser->parser_deferred_nodes)
00369 #define lex_gets_ptr (parser->parser_lex_gets_ptr)
00370 #define lex_gets (parser->parser_lex_gets)
00371 #define lvtbl (parser->parser_lvtbl)
00372 #define ruby__end__seen (parser->parser_ruby__end__seen)
00373 #define ruby_sourceline (parser->parser_ruby_sourceline)
00374 #define ruby_sourcefile (parser->parser_ruby_sourcefile)
00375 #define yydebug (parser->parser_yydebug)
00376 #ifdef RIPPER
00377 #else
00378 #define ruby_eval_tree (parser->parser_eval_tree)
00379 #define ruby_eval_tree_begin (parser->parser_eval_tree_begin)
00380 #define ruby_debug_lines (parser->debug_lines)
00381 #define ruby_coverage (parser->coverage)
00382 #endif
00383
00384 static int yylex(void*, void*);
00385
00386 #ifndef RIPPER
00387 #define yyparse ruby_yyparse
00388
00389 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
00390 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, type, a1, a2, a3)
00391
00392 static NODE *cond_gen(struct parser_params*,NODE*);
00393 #define cond(node) cond_gen(parser, node)
00394 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
00395 #define logop(type,node1,node2) logop_gen(parser, type, node1, node2)
00396
00397 static NODE *newline_node(NODE*);
00398 static void fixpos(NODE*,NODE*);
00399
00400 static int value_expr_gen(struct parser_params*,NODE*);
00401 static void void_expr_gen(struct parser_params*,NODE*);
00402 static NODE *remove_begin(NODE*);
00403 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
00404 #define void_expr0(node) void_expr_gen(parser, (node))
00405 #define void_expr(node) void_expr0((node) = remove_begin(node))
00406 static void void_stmts_gen(struct parser_params*,NODE*);
00407 #define void_stmts(node) void_stmts_gen(parser, node)
00408 static void reduce_nodes_gen(struct parser_params*,NODE**);
00409 #define reduce_nodes(n) reduce_nodes_gen(parser,n)
00410 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
00411 #define block_dup_check(n1,n2) block_dup_check_gen(parser,n1,n2)
00412
00413 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
00414 #define block_append(h,t) block_append_gen(parser,h,t)
00415 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
00416 #define list_append(l,i) list_append_gen(parser,l,i)
00417 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
00418 #define list_concat(h,t) list_concat_gen(parser,h,t)
00419 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
00420 #define arg_append(h,t) arg_append_gen(parser,h,t)
00421 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
00422 #define arg_concat(h,t) arg_concat_gen(parser,h,t)
00423 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
00424 #define literal_concat(h,t) literal_concat_gen(parser,h,t)
00425 static int literal_concat0(struct parser_params *, VALUE, VALUE);
00426 static NODE *new_evstr_gen(struct parser_params*,NODE*);
00427 #define new_evstr(n) new_evstr_gen(parser,n)
00428 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
00429 #define evstr2dstr(n) evstr2dstr_gen(parser,n)
00430 static NODE *splat_array(NODE*);
00431
00432 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
00433 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, recv,id,arg1)
00434 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
00435 #define call_uni_op(recv,id) call_uni_op_gen(parser, recv,id)
00436
00437 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,ID);
00438 #define new_args(f,o,r,p,b) new_args_gen(parser, f,o,r,p,b)
00439
00440 static NODE *negate_lit(NODE*);
00441 static NODE *ret_args_gen(struct parser_params*,NODE*);
00442 #define ret_args(node) ret_args_gen(parser, node)
00443 static NODE *arg_blk_pass(NODE*,NODE*);
00444 static NODE *new_yield_gen(struct parser_params*,NODE*);
00445 #define new_yield(node) new_yield_gen(parser, node)
00446
00447 static NODE *gettable_gen(struct parser_params*,ID);
00448 #define gettable(id) gettable_gen(parser,id)
00449 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
00450 #define assignable(id,node) assignable_gen(parser, id, node)
00451
00452 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
00453 #define aryset(node1,node2) aryset_gen(parser, node1, node2)
00454 static NODE *attrset_gen(struct parser_params*,NODE*,ID);
00455 #define attrset(node,id) attrset_gen(parser, node, id)
00456
00457 static void rb_backref_error_gen(struct parser_params*,NODE*);
00458 #define rb_backref_error(n) rb_backref_error_gen(parser,n)
00459 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
00460 #define node_assign(node1, node2) node_assign_gen(parser, node1, node2)
00461
00462 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
00463 #define match_op(node1,node2) match_op_gen(parser, node1, node2)
00464
00465 static ID *local_tbl_gen(struct parser_params*);
00466 #define local_tbl() local_tbl_gen(parser)
00467
00468 static void fixup_nodes(NODE **);
00469
00470 extern int rb_dvar_defined(ID);
00471 extern int rb_local_defined(ID);
00472 extern int rb_parse_in_eval(void);
00473 extern int rb_parse_in_main(void);
00474
00475 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
00476 #define reg_compile(str,options) reg_compile_gen(parser, str, options)
00477 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
00478 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, str, options)
00479 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
00480 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, str, options)
00481 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
00482 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,regexp,match)
00483
00484 #define get_id(id) (id)
00485 #define get_value(val) (val)
00486 #else
00487 #define remove_begin(node) (node)
00488 #define rb_dvar_defined(id) 0
00489 #define rb_local_defined(id) 0
00490 static ID ripper_get_id(VALUE);
00491 #define get_id(id) ripper_get_id(id)
00492 static VALUE ripper_get_value(VALUE);
00493 #define get_value(val) ripper_get_value(val)
00494 static VALUE assignable_gen(struct parser_params*,VALUE);
00495 #define assignable(lhs,node) assignable_gen(parser, lhs)
00496 #endif
00497
00498 static ID formal_argument_gen(struct parser_params*, ID);
00499 #define formal_argument(id) formal_argument_gen(parser, id)
00500 static ID shadowing_lvar_gen(struct parser_params*,ID);
00501 #define shadowing_lvar(name) shadowing_lvar_gen(parser, name)
00502 static void new_bv_gen(struct parser_params*,ID);
00503 #define new_bv(id) new_bv_gen(parser, id)
00504
00505 static void local_push_gen(struct parser_params*,int);
00506 #define local_push(top) local_push_gen(parser,top)
00507 static void local_pop_gen(struct parser_params*);
00508 #define local_pop() local_pop_gen(parser)
00509 static int local_var_gen(struct parser_params*, ID);
00510 #define local_var(id) local_var_gen(parser, id);
00511 static int arg_var_gen(struct parser_params*, ID);
00512 #define arg_var(id) arg_var_gen(parser, id)
00513 static int local_id_gen(struct parser_params*, ID);
00514 #define local_id(id) local_id_gen(parser, id)
00515 static ID internal_id_gen(struct parser_params*);
00516 #define internal_id() internal_id_gen(parser)
00517
00518 static const struct vtable *dyna_push_gen(struct parser_params *);
00519 #define dyna_push() dyna_push_gen(parser)
00520 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
00521 #define dyna_pop(node) dyna_pop_gen(parser, node)
00522 static int dyna_in_block_gen(struct parser_params*);
00523 #define dyna_in_block() dyna_in_block_gen(parser)
00524 #define dyna_var(id) local_var(id)
00525 static int dvar_defined_gen(struct parser_params*,ID);
00526 #define dvar_defined(id) dvar_defined_gen(parser, id)
00527 static int dvar_curr_gen(struct parser_params*,ID);
00528 #define dvar_curr(id) dvar_curr_gen(parser, id)
00529
00530 static int lvar_defined_gen(struct parser_params*, ID);
00531 #define lvar_defined(id) lvar_defined_gen(parser, id)
00532
00533 #define RE_OPTION_ONCE (1<<16)
00534 #define RE_OPTION_ENCODING_SHIFT 8
00535 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
00536 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
00537 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
00538 #define RE_OPTION_MASK 0xff
00539 #define RE_OPTION_ARG_ENCODING_NONE 32
00540
00541 #define NODE_STRTERM NODE_ZARRAY
00542 #define NODE_HEREDOC NODE_ARRAY
00543 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
00544 #define nd_func u1.id
00545 #if SIZEOF_SHORT == 2
00546 #define nd_term(node) ((signed short)(node)->u2.id)
00547 #else
00548 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
00549 #endif
00550 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
00551 #define nd_nest u3.cnt
00552
00553
00554
00555 #ifdef RIPPER
00556 #define RIPPER_VERSION "0.1.0"
00557
00558 #include "eventids1.c"
00559 #include "eventids2.c"
00560 static ID ripper_id_gets;
00561
00562 static VALUE ripper_dispatch0(struct parser_params*,ID);
00563 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
00564 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
00565 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
00566 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
00567 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
00568
00569 #define dispatch0(n) ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
00570 #define dispatch1(n,a) ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), a)
00571 #define dispatch2(n,a,b) ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), a, b)
00572 #define dispatch3(n,a,b,c) ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), a, b, c)
00573 #define dispatch4(n,a,b,c,d) ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), a, b, c, d)
00574 #define dispatch5(n,a,b,c,d,e) ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), a, b, c, d, e)
00575
00576 #define yyparse ripper_yyparse
00577
00578 #define ripper_intern(s) ID2SYM(rb_intern(s))
00579 static VALUE ripper_id2sym(ID);
00580 #ifdef __GNUC__
00581 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
00582 ID2SYM(id) : ripper_id2sym(id))
00583 #endif
00584
00585 #define arg_new() dispatch0(args_new)
00586 #define arg_add(l,a) dispatch2(args_add, l, a)
00587 #define arg_add_star(l,a) dispatch2(args_add_star, l, a)
00588 #define arg_add_block(l,b) dispatch2(args_add_block, l, b)
00589 #define arg_add_optblock(l,b) ((b)==Qundef? l : dispatch2(args_add_block, l, b))
00590 #define bare_assoc(v) dispatch1(bare_assoc_hash, v)
00591 #define arg_add_assocs(l,b) arg_add(l, bare_assoc(b))
00592
00593 #define args2mrhs(a) dispatch1(mrhs_new_from_args, a)
00594 #define mrhs_new() dispatch0(mrhs_new)
00595 #define mrhs_add(l,a) dispatch2(mrhs_add, l, a)
00596 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, l, a)
00597
00598 #define mlhs_new() dispatch0(mlhs_new)
00599 #define mlhs_add(l,a) dispatch2(mlhs_add, l, a)
00600 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, l, a)
00601
00602 #define params_new(pars, opts, rest, pars2, blk) \
00603 dispatch5(params, pars, opts, rest, pars2, blk)
00604
00605 #define blockvar_new(p,v) dispatch2(block_var, p, v)
00606 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, l, a)
00607 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, l, a)
00608
00609 #define method_optarg(m,a) ((a)==Qundef ? m : dispatch2(method_add_arg,m,a))
00610 #define method_arg(m,a) dispatch2(method_add_arg,m,a)
00611 #define method_add_block(m,b) dispatch2(method_add_block, m, b)
00612
00613 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
00614
00615 #define FIXME 0
00616
00617 #endif
00618
00619 #ifndef RIPPER
00620 # define ifndef_ripper(x) x
00621 #else
00622 # define ifndef_ripper(x)
00623 #endif
00624
00625 #ifndef RIPPER
00626 # define rb_warn0(fmt) rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt)
00627 # define rb_warnI(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt, a)
00628 # define rb_warnS(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt, a)
00629 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, fmt)
00630 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, fmt, a)
00631 #else
00632 # define rb_warn0(fmt) ripper_warn0(parser, fmt)
00633 # define rb_warnI(fmt,a) ripper_warnI(parser, fmt, a)
00634 # define rb_warnS(fmt,a) ripper_warnS(parser, fmt, a)
00635 # define rb_warning0(fmt) ripper_warning0(parser, fmt)
00636 # define rb_warningS(fmt,a) ripper_warningS(parser, fmt, a)
00637 static void ripper_warn0(struct parser_params*, const char*);
00638 static void ripper_warnI(struct parser_params*, const char*, int);
00639 #if 0
00640 static void ripper_warnS(struct parser_params*, const char*, const char*);
00641 #endif
00642 static void ripper_warning0(struct parser_params*, const char*);
00643 static void ripper_warningS(struct parser_params*, const char*, const char*);
00644 #endif
00645
00646 #ifdef RIPPER
00647 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
00648 # define rb_compile_error ripper_compile_error
00649 # define compile_error ripper_compile_error
00650 # define PARSER_ARG parser,
00651 #else
00652 # define compile_error parser->nerr++,rb_compile_error
00653 # define PARSER_ARG ruby_sourcefile, ruby_sourceline,
00654 #endif
00655
00656
00657
00658
00659 #ifdef OLD_YACC
00660 #ifndef YYMAXDEPTH
00661 #define YYMAXDEPTH 10000
00662 #endif
00663 #endif
00664
00665 #ifndef RIPPER
00666 static void token_info_push(struct parser_params*, const char *token);
00667 static void token_info_pop(struct parser_params*, const char *token);
00668 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, token) : (void)0)
00669 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, token) : (void)0)
00670 #else
00671 #define token_info_push(token)
00672 #define token_info_pop(token)
00673 #endif
00674
00675
00676
00677 #line 678 "parse.c"
00678
00679
00680 #ifndef YYDEBUG
00681 # define YYDEBUG 0
00682 #endif
00683
00684
00685 #ifdef YYERROR_VERBOSE
00686 # undef YYERROR_VERBOSE
00687 # define YYERROR_VERBOSE 1
00688 #else
00689 # define YYERROR_VERBOSE 0
00690 #endif
00691
00692
00693 #ifndef YYTOKEN_TABLE
00694 # define YYTOKEN_TABLE 0
00695 #endif
00696
00697
00698
00699 #ifndef YYTOKENTYPE
00700 # define YYTOKENTYPE
00701
00702
00703 enum yytokentype {
00704 keyword_class = 258,
00705 keyword_module = 259,
00706 keyword_def = 260,
00707 keyword_undef = 261,
00708 keyword_begin = 262,
00709 keyword_rescue = 263,
00710 keyword_ensure = 264,
00711 keyword_end = 265,
00712 keyword_if = 266,
00713 keyword_unless = 267,
00714 keyword_then = 268,
00715 keyword_elsif = 269,
00716 keyword_else = 270,
00717 keyword_case = 271,
00718 keyword_when = 272,
00719 keyword_while = 273,
00720 keyword_until = 274,
00721 keyword_for = 275,
00722 keyword_break = 276,
00723 keyword_next = 277,
00724 keyword_redo = 278,
00725 keyword_retry = 279,
00726 keyword_in = 280,
00727 keyword_do = 281,
00728 keyword_do_cond = 282,
00729 keyword_do_block = 283,
00730 keyword_do_LAMBDA = 284,
00731 keyword_return = 285,
00732 keyword_yield = 286,
00733 keyword_super = 287,
00734 keyword_self = 288,
00735 keyword_nil = 289,
00736 keyword_true = 290,
00737 keyword_false = 291,
00738 keyword_and = 292,
00739 keyword_or = 293,
00740 keyword_not = 294,
00741 modifier_if = 295,
00742 modifier_unless = 296,
00743 modifier_while = 297,
00744 modifier_until = 298,
00745 modifier_rescue = 299,
00746 keyword_alias = 300,
00747 keyword_defined = 301,
00748 keyword_BEGIN = 302,
00749 keyword_END = 303,
00750 keyword__LINE__ = 304,
00751 keyword__FILE__ = 305,
00752 keyword__ENCODING__ = 306,
00753 tIDENTIFIER = 307,
00754 tFID = 308,
00755 tGVAR = 309,
00756 tIVAR = 310,
00757 tCONSTANT = 311,
00758 tCVAR = 312,
00759 tLABEL = 313,
00760 tINTEGER = 314,
00761 tFLOAT = 315,
00762 tSTRING_CONTENT = 316,
00763 tCHAR = 317,
00764 tNTH_REF = 318,
00765 tBACK_REF = 319,
00766 tREGEXP_END = 320,
00767 tUPLUS = 321,
00768 tUMINUS = 322,
00769 tPOW = 323,
00770 tCMP = 324,
00771 tEQ = 325,
00772 tEQQ = 326,
00773 tNEQ = 327,
00774 tGEQ = 328,
00775 tLEQ = 329,
00776 tANDOP = 330,
00777 tOROP = 331,
00778 tMATCH = 332,
00779 tNMATCH = 333,
00780 tDOT2 = 334,
00781 tDOT3 = 335,
00782 tAREF = 336,
00783 tASET = 337,
00784 tLSHFT = 338,
00785 tRSHFT = 339,
00786 tCOLON2 = 340,
00787 tCOLON3 = 341,
00788 tOP_ASGN = 342,
00789 tASSOC = 343,
00790 tLPAREN = 344,
00791 tLPAREN_ARG = 345,
00792 tRPAREN = 346,
00793 tLBRACK = 347,
00794 tLBRACE = 348,
00795 tLBRACE_ARG = 349,
00796 tSTAR = 350,
00797 tAMPER = 351,
00798 tLAMBDA = 352,
00799 tSYMBEG = 353,
00800 tSTRING_BEG = 354,
00801 tXSTRING_BEG = 355,
00802 tREGEXP_BEG = 356,
00803 tWORDS_BEG = 357,
00804 tQWORDS_BEG = 358,
00805 tSTRING_DBEG = 359,
00806 tSTRING_DVAR = 360,
00807 tSTRING_END = 361,
00808 tLAMBEG = 362,
00809 tLOWEST = 363,
00810 tUMINUS_NUM = 364,
00811 idNULL = 365,
00812 idRespond_to = 366,
00813 idIFUNC = 367,
00814 idCFUNC = 368,
00815 id_core_set_method_alias = 369,
00816 id_core_set_variable_alias = 370,
00817 id_core_undef_method = 371,
00818 id_core_define_method = 372,
00819 id_core_define_singleton_method = 373,
00820 id_core_set_postexe = 374,
00821 tLAST_TOKEN = 375
00822 };
00823 #endif
00824
00825
00826
00827 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
00828 typedef union YYSTYPE
00829 {
00830
00831
00832 #line 620 "parse.y"
00833
00834 VALUE val;
00835 NODE *node;
00836 ID id;
00837 int num;
00838 const struct vtable *vars;
00839
00840
00841
00842
00843 #line 844 "parse.c"
00844 } YYSTYPE;
00845 # define YYSTYPE_IS_TRIVIAL 1
00846 # define yystype YYSTYPE
00847 # define YYSTYPE_IS_DECLARED 1
00848 #endif
00849
00850
00851
00852
00853
00854
00855 #line 856 "parse.c"
00856
00857 #ifdef short
00858 # undef short
00859 #endif
00860
00861 #ifdef YYTYPE_UINT8
00862 typedef YYTYPE_UINT8 yytype_uint8;
00863 #else
00864 typedef unsigned char yytype_uint8;
00865 #endif
00866
00867 #ifdef YYTYPE_INT8
00868 typedef YYTYPE_INT8 yytype_int8;
00869 #elif (defined __STDC__ || defined __C99__FUNC__ \
00870 || defined __cplusplus || defined _MSC_VER)
00871 typedef signed char yytype_int8;
00872 #else
00873 typedef short int yytype_int8;
00874 #endif
00875
00876 #ifdef YYTYPE_UINT16
00877 typedef YYTYPE_UINT16 yytype_uint16;
00878 #else
00879 typedef unsigned short int yytype_uint16;
00880 #endif
00881
00882 #ifdef YYTYPE_INT16
00883 typedef YYTYPE_INT16 yytype_int16;
00884 #else
00885 typedef short int yytype_int16;
00886 #endif
00887
00888 #ifndef YYSIZE_T
00889 # ifdef __SIZE_TYPE__
00890 # define YYSIZE_T __SIZE_TYPE__
00891 # elif defined size_t
00892 # define YYSIZE_T size_t
00893 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
00894 || defined __cplusplus || defined _MSC_VER)
00895 # include <stddef.h>
00896 # define YYSIZE_T size_t
00897 # else
00898 # define YYSIZE_T unsigned int
00899 # endif
00900 #endif
00901
00902 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
00903
00904 #ifndef YY_
00905 # if defined YYENABLE_NLS && YYENABLE_NLS
00906 # if ENABLE_NLS
00907 # include <libintl.h>
00908 # define YY_(msgid) dgettext ("bison-runtime", msgid)
00909 # endif
00910 # endif
00911 # ifndef YY_
00912 # define YY_(msgid) msgid
00913 # endif
00914 #endif
00915
00916
00917 #if ! defined lint || defined __GNUC__
00918 # define YYUSE(e) ((void) (e))
00919 #else
00920 # define YYUSE(e)
00921 #endif
00922
00923
00924 #ifndef lint
00925 # define YYID(n) (n)
00926 #else
00927 #if (defined __STDC__ || defined __C99__FUNC__ \
00928 || defined __cplusplus || defined _MSC_VER)
00929 static int
00930 YYID (int yyi)
00931 #else
00932 static int
00933 YYID (yyi)
00934 int yyi;
00935 #endif
00936 {
00937 return yyi;
00938 }
00939 #endif
00940
00941 #if ! defined yyoverflow || YYERROR_VERBOSE
00942
00943
00944
00945 # ifdef YYSTACK_USE_ALLOCA
00946 # if YYSTACK_USE_ALLOCA
00947 # ifdef __GNUC__
00948 # define YYSTACK_ALLOC __builtin_alloca
00949 # elif defined __BUILTIN_VA_ARG_INCR
00950 # include <alloca.h>
00951 # elif defined _AIX
00952 # define YYSTACK_ALLOC __alloca
00953 # elif defined _MSC_VER
00954 # include <malloc.h>
00955 # define alloca _alloca
00956 # else
00957 # define YYSTACK_ALLOC alloca
00958 # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00959 || defined __cplusplus || defined _MSC_VER)
00960 # include <stdlib.h>
00961 # ifndef _STDLIB_H
00962 # define _STDLIB_H 1
00963 # endif
00964 # endif
00965 # endif
00966 # endif
00967 # endif
00968
00969 # ifdef YYSTACK_ALLOC
00970
00971 # define YYSTACK_FREE(Ptr) do { ; } while (YYID (0))
00972 # ifndef YYSTACK_ALLOC_MAXIMUM
00973
00974
00975
00976
00977 # define YYSTACK_ALLOC_MAXIMUM 4032
00978 # endif
00979 # else
00980 # define YYSTACK_ALLOC YYMALLOC
00981 # define YYSTACK_FREE YYFREE
00982 # ifndef YYSTACK_ALLOC_MAXIMUM
00983 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
00984 # endif
00985 # if (defined __cplusplus && ! defined _STDLIB_H \
00986 && ! ((defined YYMALLOC || defined malloc) \
00987 && (defined YYFREE || defined free)))
00988 # include <stdlib.h>
00989 # ifndef _STDLIB_H
00990 # define _STDLIB_H 1
00991 # endif
00992 # endif
00993 # ifndef YYMALLOC
00994 # define YYMALLOC malloc
00995 # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00996 || defined __cplusplus || defined _MSC_VER)
00997 void *malloc (YYSIZE_T);
00998 # endif
00999 # endif
01000 # ifndef YYFREE
01001 # define YYFREE free
01002 # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
01003 || defined __cplusplus || defined _MSC_VER)
01004 void free (void *);
01005 # endif
01006 # endif
01007 # endif
01008 #endif
01009
01010
01011 #if (! defined yyoverflow \
01012 && (! defined __cplusplus \
01013 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
01014
01015
01016 union yyalloc
01017 {
01018 yytype_int16 yyss_alloc;
01019 YYSTYPE yyvs_alloc;
01020 };
01021
01022
01023 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
01024
01025
01026
01027 # define YYSTACK_BYTES(N) \
01028 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
01029 + YYSTACK_GAP_MAXIMUM)
01030
01031
01032
01033 # ifndef YYCOPY
01034 # if defined __GNUC__ && 1 < __GNUC__
01035 # define YYCOPY(To, From, Count) \
01036 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
01037 # else
01038 # define YYCOPY(To, From, Count) \
01039 do \
01040 { \
01041 YYSIZE_T yyi; \
01042 for (yyi = 0; yyi < (Count); yyi++) \
01043 (To)[yyi] = (From)[yyi]; \
01044 } \
01045 while (YYID (0))
01046 # endif
01047 # endif
01048
01049
01050
01051
01052
01053
01054 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
01055 do \
01056 { \
01057 YYSIZE_T yynewbytes; \
01058 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
01059 Stack = &yyptr->Stack_alloc; \
01060 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
01061 yyptr += yynewbytes / sizeof (*yyptr); \
01062 } \
01063 while (YYID (0))
01064
01065 #endif
01066
01067
01068 #define YYFINAL 3
01069
01070 #define YYLAST 10410
01071
01072
01073 #define YYNTOKENS 148
01074
01075 #define YYNNTS 172
01076
01077 #define YYNRULES 565
01078
01079 #define YYNSTATES 975
01080
01081
01082 #define YYUNDEFTOK 2
01083 #define YYMAXUTOK 375
01084
01085 #define YYTRANSLATE(YYX) \
01086 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
01087
01088
01089 static const yytype_uint8 yytranslate[] =
01090 {
01091 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01092 147, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01093 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01094 2, 2, 146, 123, 2, 2, 2, 121, 116, 2,
01095 142, 143, 119, 117, 140, 118, 139, 120, 2, 2,
01096 2, 2, 2, 2, 2, 2, 2, 2, 111, 145,
01097 113, 109, 112, 110, 2, 2, 2, 2, 2, 2,
01098 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01099 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01100 2, 138, 2, 144, 115, 2, 141, 2, 2, 2,
01101 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01102 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01103 2, 2, 2, 136, 114, 137, 124, 2, 2, 2,
01104 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01105 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01106 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01107 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01108 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01109 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01110 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01111 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01112 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01113 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01114 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01115 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01116 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
01117 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
01118 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
01119 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
01120 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
01121 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
01122 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
01123 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
01124 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
01125 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
01126 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
01127 105, 106, 107, 108, 122, 125, 126, 127, 128, 129,
01128 130, 131, 132, 133, 134, 135
01129 };
01130
01131 #if YYDEBUG
01132
01133
01134 static const yytype_uint16 yyprhs[] =
01135 {
01136 0, 0, 3, 4, 7, 10, 12, 14, 18, 21,
01137 23, 24, 30, 35, 38, 40, 42, 46, 49, 50,
01138 55, 59, 63, 67, 70, 74, 78, 82, 86, 90,
01139 95, 99, 103, 107, 114, 120, 126, 132, 138, 142,
01140 146, 150, 154, 156, 158, 162, 166, 170, 173, 175,
01141 177, 179, 181, 183, 188, 193, 194, 200, 203, 207,
01142 212, 218, 223, 229, 232, 235, 238, 241, 244, 246,
01143 250, 252, 256, 258, 261, 265, 271, 274, 279, 282,
01144 287, 289, 293, 295, 299, 302, 306, 308, 312, 314,
01145 319, 323, 327, 331, 335, 338, 340, 342, 347, 351,
01146 355, 359, 363, 366, 368, 370, 372, 375, 377, 381,
01147 383, 385, 387, 389, 391, 393, 395, 397, 399, 401,
01148 402, 407, 409, 411, 413, 415, 417, 419, 421, 423,
01149 425, 427, 429, 431, 433, 435, 437, 439, 441, 443,
01150 445, 447, 449, 451, 453, 455, 457, 459, 461, 463,
01151 465, 467, 469, 471, 473, 475, 477, 479, 481, 483,
01152 485, 487, 489, 491, 493, 495, 497, 499, 501, 503,
01153 505, 507, 509, 511, 513, 515, 517, 519, 521, 523,
01154 525, 527, 529, 531, 533, 535, 537, 539, 541, 543,
01155 545, 547, 551, 557, 561, 567, 574, 580, 586, 592,
01156 598, 603, 607, 611, 615, 619, 623, 627, 631, 635,
01157 639, 644, 649, 652, 655, 659, 663, 667, 671, 675,
01158 679, 683, 687, 691, 695, 699, 703, 707, 710, 713,
01159 717, 721, 725, 729, 730, 735, 742, 744, 746, 748,
01160 751, 756, 759, 763, 765, 767, 769, 771, 773, 776,
01161 779, 784, 786, 787, 790, 793, 796, 798, 800, 802,
01162 805, 809, 814, 818, 823, 826, 828, 830, 832, 834,
01163 836, 838, 840, 842, 844, 845, 850, 851, 856, 860,
01164 864, 867, 871, 875, 877, 882, 886, 888, 889, 896,
01165 901, 905, 908, 910, 913, 916, 923, 930, 931, 932,
01166 940, 941, 942, 950, 956, 961, 962, 963, 973, 974,
01167 981, 982, 983, 992, 993, 999, 1000, 1007, 1008, 1009,
01168 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037,
01169 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1058,
01170 1060, 1062, 1064, 1070, 1072, 1075, 1077, 1079, 1081, 1085,
01171 1087, 1091, 1093, 1098, 1105, 1109, 1115, 1118, 1123, 1125,
01172 1129, 1136, 1145, 1150, 1157, 1162, 1165, 1172, 1175, 1180,
01173 1187, 1190, 1195, 1198, 1203, 1205, 1207, 1209, 1213, 1215,
01174 1220, 1222, 1225, 1227, 1231, 1233, 1235, 1236, 1237, 1242,
01175 1247, 1249, 1253, 1257, 1258, 1264, 1267, 1272, 1277, 1280,
01176 1285, 1290, 1294, 1298, 1302, 1305, 1307, 1312, 1313, 1319,
01177 1320, 1326, 1332, 1334, 1336, 1343, 1345, 1347, 1349, 1351,
01178 1354, 1356, 1359, 1361, 1363, 1365, 1367, 1369, 1371, 1373,
01179 1376, 1380, 1384, 1388, 1392, 1396, 1397, 1401, 1403, 1406,
01180 1410, 1414, 1415, 1419, 1420, 1423, 1424, 1427, 1428, 1431,
01181 1433, 1434, 1438, 1439, 1440, 1446, 1448, 1450, 1452, 1454,
01182 1457, 1459, 1461, 1463, 1465, 1469, 1471, 1473, 1476, 1479,
01183 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499,
01184 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1514, 1519, 1522,
01185 1526, 1529, 1536, 1545, 1550, 1557, 1562, 1569, 1572, 1577,
01186 1584, 1587, 1592, 1595, 1600, 1602, 1603, 1605, 1607, 1609,
01187 1611, 1613, 1615, 1617, 1621, 1623, 1627, 1631, 1635, 1637,
01188 1641, 1643, 1647, 1649, 1651, 1654, 1656, 1658, 1660, 1663,
01189 1666, 1668, 1670, 1671, 1676, 1678, 1681, 1683, 1687, 1691,
01190 1694, 1696, 1698, 1700, 1702, 1704, 1706, 1708, 1710, 1712,
01191 1714, 1716, 1718, 1719, 1721, 1722, 1724, 1727, 1730, 1731,
01192 1733, 1735, 1737, 1739, 1741, 1744
01193 };
01194
01195
01196 static const yytype_int16 yyrhs[] =
01197 {
01198 149, 0, -1, -1, 150, 151, -1, 152, 312, -1,
01199 319, -1, 153, -1, 152, 318, 153, -1, 1, 153,
01200 -1, 158, -1, -1, 47, 154, 136, 151, 137, -1,
01201 156, 255, 230, 258, -1, 157, 312, -1, 319, -1,
01202 158, -1, 157, 318, 158, -1, 1, 158, -1, -1,
01203 45, 179, 159, 179, -1, 45, 54, 54, -1, 45,
01204 54, 64, -1, 45, 54, 63, -1, 6, 180, -1,
01205 158, 40, 161, -1, 158, 41, 161, -1, 158, 42,
01206 161, -1, 158, 43, 161, -1, 158, 44, 158, -1,
01207 48, 136, 156, 137, -1, 174, 109, 162, -1, 167,
01208 109, 162, -1, 284, 87, 162, -1, 215, 138, 190,
01209 315, 87, 162, -1, 215, 139, 52, 87, 162, -1,
01210 215, 139, 56, 87, 162, -1, 215, 85, 56, 87,
01211 162, -1, 215, 85, 52, 87, 162, -1, 285, 87,
01212 162, -1, 174, 109, 197, -1, 167, 109, 186, -1,
01213 167, 109, 197, -1, 160, -1, 162, -1, 160, 37,
01214 160, -1, 160, 38, 160, -1, 39, 313, 160, -1,
01215 123, 162, -1, 184, -1, 160, -1, 166, -1, 163,
01216 -1, 248, -1, 248, 139, 309, 192, -1, 248, 85,
01217 309, 192, -1, -1, 94, 165, 236, 156, 137, -1,
01218 308, 192, -1, 308, 192, 164, -1, 215, 139, 309,
01219 192, -1, 215, 139, 309, 192, 164, -1, 215, 85,
01220 309, 192, -1, 215, 85, 309, 192, 164, -1, 32,
01221 192, -1, 31, 192, -1, 30, 191, -1, 21, 191,
01222 -1, 22, 191, -1, 169, -1, 89, 168, 314, -1,
01223 169, -1, 89, 168, 314, -1, 171, -1, 171, 170,
01224 -1, 171, 95, 173, -1, 171, 95, 173, 140, 172,
01225 -1, 171, 95, -1, 171, 95, 140, 172, -1, 95,
01226 173, -1, 95, 173, 140, 172, -1, 95, -1, 95,
01227 140, 172, -1, 173, -1, 89, 168, 314, -1, 170,
01228 140, -1, 171, 170, 140, -1, 170, -1, 172, 140,
01229 170, -1, 282, -1, 215, 138, 190, 315, -1, 215,
01230 139, 52, -1, 215, 85, 52, -1, 215, 139, 56,
01231 -1, 215, 85, 56, -1, 86, 56, -1, 285, -1,
01232 282, -1, 215, 138, 190, 315, -1, 215, 139, 52,
01233 -1, 215, 85, 52, -1, 215, 139, 56, -1, 215,
01234 85, 56, -1, 86, 56, -1, 285, -1, 52, -1,
01235 56, -1, 86, 175, -1, 175, -1, 215, 85, 175,
01236 -1, 52, -1, 56, -1, 53, -1, 182, -1, 183,
01237 -1, 177, -1, 278, -1, 178, -1, 280, -1, 179,
01238 -1, -1, 180, 140, 181, 179, -1, 114, -1, 115,
01239 -1, 116, -1, 69, -1, 70, -1, 71, -1, 77,
01240 -1, 78, -1, 112, -1, 73, -1, 113, -1, 74,
01241 -1, 72, -1, 83, -1, 84, -1, 117, -1, 118,
01242 -1, 119, -1, 95, -1, 120, -1, 121, -1, 68,
01243 -1, 123, -1, 124, -1, 66, -1, 67, -1, 81,
01244 -1, 82, -1, 141, -1, 49, -1, 50, -1, 51,
01245 -1, 47, -1, 48, -1, 45, -1, 37, -1, 7,
01246 -1, 21, -1, 16, -1, 3, -1, 5, -1, 46,
01247 -1, 26, -1, 15, -1, 14, -1, 10, -1, 9,
01248 -1, 36, -1, 20, -1, 25, -1, 4, -1, 22,
01249 -1, 34, -1, 39, -1, 38, -1, 23, -1, 8,
01250 -1, 24, -1, 30, -1, 33, -1, 32, -1, 13,
01251 -1, 35, -1, 6, -1, 17, -1, 31, -1, 11,
01252 -1, 12, -1, 18, -1, 19, -1, 174, 109, 184,
01253 -1, 174, 109, 184, 44, 184, -1, 284, 87, 184,
01254 -1, 284, 87, 184, 44, 184, -1, 215, 138, 190,
01255 315, 87, 184, -1, 215, 139, 52, 87, 184, -1,
01256 215, 139, 56, 87, 184, -1, 215, 85, 52, 87,
01257 184, -1, 215, 85, 56, 87, 184, -1, 86, 56,
01258 87, 184, -1, 285, 87, 184, -1, 184, 79, 184,
01259 -1, 184, 80, 184, -1, 184, 117, 184, -1, 184,
01260 118, 184, -1, 184, 119, 184, -1, 184, 120, 184,
01261 -1, 184, 121, 184, -1, 184, 68, 184, -1, 122,
01262 59, 68, 184, -1, 122, 60, 68, 184, -1, 66,
01263 184, -1, 67, 184, -1, 184, 114, 184, -1, 184,
01264 115, 184, -1, 184, 116, 184, -1, 184, 69, 184,
01265 -1, 184, 112, 184, -1, 184, 73, 184, -1, 184,
01266 113, 184, -1, 184, 74, 184, -1, 184, 70, 184,
01267 -1, 184, 71, 184, -1, 184, 72, 184, -1, 184,
01268 77, 184, -1, 184, 78, 184, -1, 123, 184, -1,
01269 124, 184, -1, 184, 83, 184, -1, 184, 84, 184,
01270 -1, 184, 75, 184, -1, 184, 76, 184, -1, -1,
01271 46, 313, 185, 184, -1, 184, 110, 184, 313, 111,
01272 184, -1, 198, -1, 184, -1, 319, -1, 196, 316,
01273 -1, 196, 140, 306, 316, -1, 306, 316, -1, 142,
01274 190, 314, -1, 319, -1, 188, -1, 319, -1, 191,
01275 -1, 166, -1, 196, 195, -1, 306, 195, -1, 196,
01276 140, 306, 195, -1, 194, -1, -1, 193, 191, -1,
01277 96, 186, -1, 140, 194, -1, 140, -1, 319, -1,
01278 186, -1, 95, 186, -1, 196, 140, 186, -1, 196,
01279 140, 95, 186, -1, 196, 140, 186, -1, 196, 140,
01280 95, 186, -1, 95, 186, -1, 259, -1, 260, -1,
01281 263, -1, 264, -1, 265, -1, 268, -1, 283, -1,
01282 285, -1, 53, -1, -1, 216, 199, 155, 226, -1,
01283 -1, 90, 160, 200, 314, -1, 89, 156, 143, -1,
01284 215, 85, 56, -1, 86, 56, -1, 92, 187, 144,
01285 -1, 93, 305, 137, -1, 30, -1, 31, 142, 191,
01286 314, -1, 31, 142, 314, -1, 31, -1, -1, 46,
01287 313, 142, 201, 160, 314, -1, 39, 142, 160, 314,
01288 -1, 39, 142, 314, -1, 308, 250, -1, 249, -1,
01289 249, 250, -1, 97, 241, -1, 217, 161, 227, 156,
01290 229, 226, -1, 218, 161, 227, 156, 230, 226, -1,
01291 -1, -1, 219, 202, 161, 228, 203, 156, 226, -1,
01292 -1, -1, 220, 204, 161, 228, 205, 156, 226, -1,
01293 221, 161, 312, 253, 226, -1, 221, 312, 253, 226,
01294 -1, -1, -1, 222, 231, 25, 206, 161, 228, 207,
01295 156, 226, -1, -1, 223, 176, 286, 208, 155, 226,
01296 -1, -1, -1, 223, 83, 160, 209, 317, 210, 155,
01297 226, -1, -1, 224, 176, 211, 155, 226, -1, -1,
01298 225, 177, 212, 288, 155, 226, -1, -1, -1, 225,
01299 303, 311, 213, 177, 214, 288, 155, 226, -1, 21,
01300 -1, 22, -1, 23, -1, 24, -1, 198, -1, 7,
01301 -1, 11, -1, 12, -1, 18, -1, 19, -1, 16,
01302 -1, 20, -1, 3, -1, 4, -1, 5, -1, 10,
01303 -1, 317, -1, 13, -1, 317, 13, -1, 317, -1,
01304 27, -1, 230, -1, 14, 161, 227, 156, 229, -1,
01305 319, -1, 15, 156, -1, 174, -1, 167, -1, 291,
01306 -1, 89, 234, 314, -1, 232, -1, 233, 140, 232,
01307 -1, 233, -1, 233, 140, 95, 291, -1, 233, 140,
01308 95, 291, 140, 233, -1, 233, 140, 95, -1, 233,
01309 140, 95, 140, 233, -1, 95, 291, -1, 95, 291,
01310 140, 233, -1, 95, -1, 95, 140, 233, -1, 293,
01311 140, 296, 140, 299, 302, -1, 293, 140, 296, 140,
01312 299, 140, 293, 302, -1, 293, 140, 296, 302, -1,
01313 293, 140, 296, 140, 293, 302, -1, 293, 140, 299,
01314 302, -1, 293, 140, -1, 293, 140, 299, 140, 293,
01315 302, -1, 293, 302, -1, 296, 140, 299, 302, -1,
01316 296, 140, 299, 140, 293, 302, -1, 296, 302, -1,
01317 296, 140, 293, 302, -1, 299, 302, -1, 299, 140,
01318 293, 302, -1, 301, -1, 319, -1, 237, -1, 114,
01319 238, 114, -1, 76, -1, 114, 235, 238, 114, -1,
01320 319, -1, 145, 239, -1, 240, -1, 239, 140, 240,
01321 -1, 52, -1, 290, -1, -1, -1, 242, 243, 244,
01322 245, -1, 142, 289, 238, 314, -1, 289, -1, 107,
01323 156, 137, -1, 29, 156, 10, -1, -1, 28, 247,
01324 236, 156, 10, -1, 166, 246, -1, 248, 139, 309,
01325 189, -1, 248, 85, 309, 189, -1, 308, 188, -1,
01326 215, 139, 309, 189, -1, 215, 85, 309, 188, -1,
01327 215, 85, 310, -1, 215, 139, 188, -1, 215, 85,
01328 188, -1, 32, 188, -1, 32, -1, 215, 138, 190,
01329 315, -1, -1, 136, 251, 236, 156, 137, -1, -1,
01330 26, 252, 236, 156, 10, -1, 17, 196, 227, 156,
01331 254, -1, 230, -1, 253, -1, 8, 256, 257, 227,
01332 156, 255, -1, 319, -1, 186, -1, 197, -1, 319,
01333 -1, 88, 174, -1, 319, -1, 9, 156, -1, 319,
01334 -1, 281, -1, 278, -1, 280, -1, 261, -1, 62,
01335 -1, 262, -1, 261, 262, -1, 99, 270, 106, -1,
01336 100, 271, 106, -1, 101, 272, 65, -1, 102, 146,
01337 106, -1, 102, 266, 106, -1, -1, 266, 267, 146,
01338 -1, 273, -1, 267, 273, -1, 103, 146, 106, -1,
01339 103, 269, 106, -1, -1, 269, 61, 146, -1, -1,
01340 270, 273, -1, -1, 271, 273, -1, -1, 272, 273,
01341 -1, 61, -1, -1, 105, 274, 277, -1, -1, -1,
01342 104, 275, 276, 156, 137, -1, 54, -1, 55, -1,
01343 57, -1, 285, -1, 98, 279, -1, 177, -1, 55,
01344 -1, 54, -1, 57, -1, 98, 271, 106, -1, 59,
01345 -1, 60, -1, 122, 59, -1, 122, 60, -1, 52,
01346 -1, 55, -1, 54, -1, 56, -1, 57, -1, 34,
01347 -1, 33, -1, 35, -1, 36, -1, 50, -1, 49,
01348 -1, 51, -1, 282, -1, 282, -1, 63, -1, 64,
01349 -1, 317, -1, -1, 113, 287, 161, 317, -1, 1,
01350 317, -1, 142, 289, 314, -1, 289, 317, -1, 293,
01351 140, 297, 140, 299, 302, -1, 293, 140, 297, 140,
01352 299, 140, 293, 302, -1, 293, 140, 297, 302, -1,
01353 293, 140, 297, 140, 293, 302, -1, 293, 140, 299,
01354 302, -1, 293, 140, 299, 140, 293, 302, -1, 293,
01355 302, -1, 297, 140, 299, 302, -1, 297, 140, 299,
01356 140, 293, 302, -1, 297, 302, -1, 297, 140, 293,
01357 302, -1, 299, 302, -1, 299, 140, 293, 302, -1,
01358 301, -1, -1, 56, -1, 55, -1, 54, -1, 57,
01359 -1, 290, -1, 52, -1, 291, -1, 89, 234, 314,
01360 -1, 292, -1, 293, 140, 292, -1, 52, 109, 186,
01361 -1, 52, 109, 215, -1, 295, -1, 296, 140, 295,
01362 -1, 294, -1, 297, 140, 294, -1, 119, -1, 95,
01363 -1, 298, 52, -1, 298, -1, 116, -1, 96, -1,
01364 300, 52, -1, 140, 301, -1, 319, -1, 283, -1,
01365 -1, 142, 304, 160, 314, -1, 319, -1, 306, 316,
01366 -1, 307, -1, 306, 140, 307, -1, 186, 88, 186,
01367 -1, 58, 186, -1, 52, -1, 56, -1, 53, -1,
01368 52, -1, 56, -1, 53, -1, 182, -1, 52, -1,
01369 53, -1, 182, -1, 139, -1, 85, -1, -1, 318,
01370 -1, -1, 147, -1, 313, 143, -1, 313, 144, -1,
01371 -1, 147, -1, 140, -1, 145, -1, 147, -1, 317,
01372 -1, 318, 145, -1, -1
01373 };
01374
01375
01376 static const yytype_uint16 yyrline[] =
01377 {
01378 0, 786, 786, 786, 817, 828, 837, 845, 853, 859,
01379 861, 860, 884, 917, 928, 937, 945, 953, 959, 959,
01380 967, 975, 986, 996, 1004, 1013, 1022, 1035, 1048, 1057,
01381 1069, 1078, 1088, 1117, 1138, 1155, 1172, 1177, 1194, 1204,
01382 1213, 1222, 1231, 1234, 1235, 1243, 1251, 1259, 1267, 1270,
01383 1282, 1283, 1286, 1287, 1296, 1308, 1307, 1329, 1338, 1350,
01384 1359, 1371, 1380, 1392, 1401, 1410, 1418, 1426, 1436, 1437,
01385 1447, 1448, 1458, 1466, 1474, 1482, 1491, 1499, 1507, 1515,
01386 1523, 1531, 1541, 1542, 1552, 1560, 1570, 1578, 1588, 1592,
01387 1600, 1608, 1616, 1624, 1636, 1646, 1658, 1667, 1675, 1683,
01388 1691, 1699, 1712, 1725, 1736, 1744, 1747, 1755, 1763, 1773,
01389 1774, 1775, 1776, 1781, 1792, 1793, 1796, 1804, 1807, 1815,
01390 1815, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833,
01391 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843,
01392 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853,
01393 1856, 1856, 1856, 1857, 1857, 1858, 1858, 1858, 1859, 1859,
01394 1859, 1859, 1860, 1860, 1860, 1860, 1861, 1861, 1861, 1862,
01395 1862, 1862, 1862, 1863, 1863, 1863, 1863, 1864, 1864, 1864,
01396 1864, 1865, 1865, 1865, 1865, 1866, 1866, 1866, 1866, 1867,
01397 1867, 1870, 1879, 1889, 1918, 1949, 1975, 1992, 2009, 2026,
01398 2037, 2048, 2059, 2073, 2087, 2095, 2103, 2111, 2119, 2127,
01399 2135, 2144, 2153, 2161, 2169, 2177, 2185, 2193, 2201, 2209,
01400 2217, 2225, 2233, 2241, 2249, 2257, 2268, 2276, 2284, 2292,
01401 2300, 2308, 2316, 2324, 2324, 2334, 2344, 2350, 2362, 2363,
01402 2367, 2375, 2385, 2395, 2396, 2399, 2400, 2403, 2412, 2420,
01403 2430, 2439, 2448, 2448, 2460, 2470, 2474, 2478, 2484, 2492,
01404 2500, 2514, 2530, 2544, 2559, 2569, 2570, 2571, 2572, 2573,
01405 2574, 2575, 2576, 2577, 2586, 2585, 2610, 2610, 2619, 2627,
01406 2635, 2643, 2656, 2664, 2672, 2680, 2688, 2696, 2696, 2706,
01407 2714, 2722, 2733, 2734, 2745, 2749, 2761, 2773, 2773, 2773,
01408 2784, 2784, 2784, 2795, 2806, 2815, 2817, 2814, 2881, 2880,
01409 2902, 2907, 2901, 2926, 2925, 2947, 2946, 2969, 2970, 2969,
01410 2990, 2998, 3006, 3014, 3024, 3036, 3042, 3048, 3054, 3060,
01411 3066, 3072, 3078, 3084, 3090, 3100, 3106, 3111, 3112, 3119,
01412 3124, 3127, 3128, 3141, 3142, 3152, 3153, 3156, 3164, 3174,
01413 3182, 3192, 3200, 3209, 3218, 3226, 3234, 3243, 3255, 3263,
01414 3273, 3281, 3289, 3297, 3305, 3313, 3322, 3330, 3338, 3346,
01415 3354, 3362, 3370, 3378, 3386, 3396, 3397, 3403, 3412, 3421,
01416 3432, 3433, 3443, 3450, 3459, 3467, 3473, 3476, 3473, 3494,
01417 3502, 3512, 3516, 3523, 3522, 3543, 3559, 3568, 3579, 3588,
01418 3598, 3608, 3616, 3627, 3638, 3646, 3654, 3669, 3668, 3688,
01419 3687, 3708, 3720, 3721, 3724, 3743, 3746, 3754, 3762, 3765,
01420 3769, 3772, 3780, 3783, 3784, 3792, 3795, 3812, 3813, 3814,
01421 3824, 3834, 3861, 3925, 3933, 3940, 3947, 3957, 3965, 3975,
01422 3983, 3990, 3997, 4008, 4015, 4026, 4033, 4044, 4051, 4080,
01423 4082, 4081, 4098, 4104, 4097, 4123, 4131, 4139, 4147, 4150,
01424 4161, 4162, 4163, 4164, 4167, 4197, 4198, 4199, 4207, 4217,
01425 4218, 4219, 4220, 4221, 4222, 4223, 4224, 4225, 4226, 4227,
01426 4228, 4231, 4241, 4251, 4252, 4255, 4264, 4263, 4271, 4283,
01427 4293, 4299, 4307, 4315, 4323, 4331, 4339, 4347, 4355, 4363,
01428 4371, 4379, 4387, 4395, 4403, 4412, 4421, 4430, 4439, 4448,
01429 4459, 4460, 4467, 4476, 4495, 4502, 4515, 4527, 4539, 4547,
01430 4563, 4571, 4587, 4588, 4591, 4604, 4615, 4616, 4619, 4636,
01431 4640, 4650, 4660, 4660, 4689, 4690, 4700, 4707, 4717, 4725,
01432 4735, 4736, 4737, 4740, 4741, 4742, 4743, 4746, 4747, 4748,
01433 4751, 4756, 4763, 4764, 4767, 4768, 4771, 4774, 4777, 4778,
01434 4779, 4782, 4783, 4786, 4787, 4791
01435 };
01436 #endif
01437
01438 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
01439
01440
01441 static const char *const yytname[] =
01442 {
01443 "$end", "error", "$undefined", "keyword_class", "keyword_module",
01444 "keyword_def", "keyword_undef", "keyword_begin", "keyword_rescue",
01445 "keyword_ensure", "keyword_end", "keyword_if", "keyword_unless",
01446 "keyword_then", "keyword_elsif", "keyword_else", "keyword_case",
01447 "keyword_when", "keyword_while", "keyword_until", "keyword_for",
01448 "keyword_break", "keyword_next", "keyword_redo", "keyword_retry",
01449 "keyword_in", "keyword_do", "keyword_do_cond", "keyword_do_block",
01450 "keyword_do_LAMBDA", "keyword_return", "keyword_yield", "keyword_super",
01451 "keyword_self", "keyword_nil", "keyword_true", "keyword_false",
01452 "keyword_and", "keyword_or", "keyword_not", "modifier_if",
01453 "modifier_unless", "modifier_while", "modifier_until", "modifier_rescue",
01454 "keyword_alias", "keyword_defined", "keyword_BEGIN", "keyword_END",
01455 "keyword__LINE__", "keyword__FILE__", "keyword__ENCODING__",
01456 "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tCVAR", "tLABEL",
01457 "tINTEGER", "tFLOAT", "tSTRING_CONTENT", "tCHAR", "tNTH_REF",
01458 "tBACK_REF", "tREGEXP_END", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ",
01459 "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH",
01460 "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2",
01461 "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN_ARG", "tRPAREN",
01462 "tLBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tAMPER", "tLAMBDA",
01463 "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG",
01464 "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG",
01465 "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'",
01466 "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "idNULL",
01467 "idRespond_to", "idIFUNC", "idCFUNC", "id_core_set_method_alias",
01468 "id_core_set_variable_alias", "id_core_undef_method",
01469 "id_core_define_method", "id_core_define_singleton_method",
01470 "id_core_set_postexe", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'", "','",
01471 "'`'", "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program",
01472 "$@1", "top_compstmt", "top_stmts", "top_stmt", "$@2", "bodystmt",
01473 "compstmt", "stmts", "stmt", "$@3", "expr", "expr_value", "command_call",
01474 "block_command", "cmd_brace_block", "@4", "command", "mlhs",
01475 "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head", "mlhs_post",
01476 "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", "fitem",
01477 "undef_list", "$@5", "op", "reswords", "arg", "$@6", "arg_value",
01478 "aref_args", "paren_args", "opt_paren_args", "opt_call_args",
01479 "call_args", "command_args", "@7", "block_arg", "opt_block_arg", "args",
01480 "mrhs", "primary", "@8", "$@9", "$@10", "$@11", "$@12", "$@13", "$@14",
01481 "$@15", "$@16", "@17", "@18", "@19", "@20", "@21", "$@22", "$@23",
01482 "primary_value", "k_begin", "k_if", "k_unless", "k_while", "k_until",
01483 "k_case", "k_for", "k_class", "k_module", "k_def", "k_end", "then", "do",
01484 "if_tail", "opt_else", "for_var", "f_marg", "f_marg_list", "f_margs",
01485 "block_param", "opt_block_param", "block_param_def", "opt_bv_decl",
01486 "bv_decls", "bvar", "lambda", "@24", "@25", "f_larglist", "lambda_body",
01487 "do_block", "@26", "block_call", "method_call", "brace_block", "@27",
01488 "@28", "case_body", "cases", "opt_rescue", "exc_list", "exc_var",
01489 "opt_ensure", "literal", "strings", "string", "string1", "xstring",
01490 "regexp", "words", "word_list", "word", "qwords", "qword_list",
01491 "string_contents", "xstring_contents", "regexp_contents",
01492 "string_content", "@29", "@30", "@31", "string_dvar", "symbol", "sym",
01493 "dsym", "numeric", "variable", "var_ref", "var_lhs", "backref",
01494 "superclass", "$@32", "f_arglist", "f_args", "f_bad_arg", "f_norm_arg",
01495 "f_arg_item", "f_arg", "f_opt", "f_block_opt", "f_block_optarg",
01496 "f_optarg", "restarg_mark", "f_rest_arg", "blkarg_mark", "f_block_arg",
01497 "opt_f_block_arg", "singleton", "$@33", "assoc_list", "assocs", "assoc",
01498 "operation", "operation2", "operation3", "dot_or_colon", "opt_terms",
01499 "opt_nl", "rparen", "rbracket", "trailer", "term", "terms", "none", 0
01500 };
01501 #endif
01502
01503 # ifdef YYPRINT
01504
01505
01506 static const yytype_uint16 yytoknum[] =
01507 {
01508 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
01509 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
01510 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
01511 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
01512 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
01513 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
01514 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
01515 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
01516 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
01517 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
01518 355, 356, 357, 358, 359, 360, 361, 362, 363, 61,
01519 63, 58, 62, 60, 124, 94, 38, 43, 45, 42,
01520 47, 37, 364, 33, 126, 365, 366, 367, 368, 369,
01521 370, 371, 372, 373, 374, 375, 123, 125, 91, 46,
01522 44, 96, 40, 41, 93, 59, 32, 10
01523 };
01524 # endif
01525
01526
01527 static const yytype_uint16 yyr1[] =
01528 {
01529 0, 148, 150, 149, 151, 152, 152, 152, 152, 153,
01530 154, 153, 155, 156, 157, 157, 157, 157, 159, 158,
01531 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
01532 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
01533 158, 158, 158, 160, 160, 160, 160, 160, 160, 161,
01534 162, 162, 163, 163, 163, 165, 164, 166, 166, 166,
01535 166, 166, 166, 166, 166, 166, 166, 166, 167, 167,
01536 168, 168, 169, 169, 169, 169, 169, 169, 169, 169,
01537 169, 169, 170, 170, 171, 171, 172, 172, 173, 173,
01538 173, 173, 173, 173, 173, 173, 174, 174, 174, 174,
01539 174, 174, 174, 174, 175, 175, 176, 176, 176, 177,
01540 177, 177, 177, 177, 178, 178, 179, 179, 180, 181,
01541 180, 182, 182, 182, 182, 182, 182, 182, 182, 182,
01542 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
01543 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
01544 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
01545 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
01546 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
01547 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
01548 183, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01549 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01550 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01551 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01552 184, 184, 184, 185, 184, 184, 184, 186, 187, 187,
01553 187, 187, 188, 189, 189, 190, 190, 191, 191, 191,
01554 191, 191, 193, 192, 194, 195, 195, 195, 196, 196,
01555 196, 196, 197, 197, 197, 198, 198, 198, 198, 198,
01556 198, 198, 198, 198, 199, 198, 200, 198, 198, 198,
01557 198, 198, 198, 198, 198, 198, 198, 201, 198, 198,
01558 198, 198, 198, 198, 198, 198, 198, 202, 203, 198,
01559 204, 205, 198, 198, 198, 206, 207, 198, 208, 198,
01560 209, 210, 198, 211, 198, 212, 198, 213, 214, 198,
01561 198, 198, 198, 198, 215, 216, 217, 218, 219, 220,
01562 221, 222, 223, 224, 225, 226, 227, 227, 227, 228,
01563 228, 229, 229, 230, 230, 231, 231, 232, 232, 233,
01564 233, 234, 234, 234, 234, 234, 234, 234, 234, 234,
01565 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
01566 235, 235, 235, 235, 235, 236, 236, 237, 237, 237,
01567 238, 238, 239, 239, 240, 240, 242, 243, 241, 244,
01568 244, 245, 245, 247, 246, 248, 248, 248, 249, 249,
01569 249, 249, 249, 249, 249, 249, 249, 251, 250, 252,
01570 250, 253, 254, 254, 255, 255, 256, 256, 256, 257,
01571 257, 258, 258, 259, 259, 259, 260, 261, 261, 261,
01572 262, 263, 264, 265, 265, 266, 266, 267, 267, 268,
01573 268, 269, 269, 270, 270, 271, 271, 272, 272, 273,
01574 274, 273, 275, 276, 273, 277, 277, 277, 277, 278,
01575 279, 279, 279, 279, 280, 281, 281, 281, 281, 282,
01576 282, 282, 282, 282, 282, 282, 282, 282, 282, 282,
01577 282, 283, 284, 285, 285, 286, 287, 286, 286, 288,
01578 288, 289, 289, 289, 289, 289, 289, 289, 289, 289,
01579 289, 289, 289, 289, 289, 289, 290, 290, 290, 290,
01580 291, 291, 292, 292, 293, 293, 294, 295, 296, 296,
01581 297, 297, 298, 298, 299, 299, 300, 300, 301, 302,
01582 302, 303, 304, 303, 305, 305, 306, 306, 307, 307,
01583 308, 308, 308, 309, 309, 309, 309, 310, 310, 310,
01584 311, 311, 312, 312, 313, 313, 314, 315, 316, 316,
01585 316, 317, 317, 318, 318, 319
01586 };
01587
01588
01589 static const yytype_uint8 yyr2[] =
01590 {
01591 0, 2, 0, 2, 2, 1, 1, 3, 2, 1,
01592 0, 5, 4, 2, 1, 1, 3, 2, 0, 4,
01593 3, 3, 3, 2, 3, 3, 3, 3, 3, 4,
01594 3, 3, 3, 6, 5, 5, 5, 5, 3, 3,
01595 3, 3, 1, 1, 3, 3, 3, 2, 1, 1,
01596 1, 1, 1, 4, 4, 0, 5, 2, 3, 4,
01597 5, 4, 5, 2, 2, 2, 2, 2, 1, 3,
01598 1, 3, 1, 2, 3, 5, 2, 4, 2, 4,
01599 1, 3, 1, 3, 2, 3, 1, 3, 1, 4,
01600 3, 3, 3, 3, 2, 1, 1, 4, 3, 3,
01601 3, 3, 2, 1, 1, 1, 2, 1, 3, 1,
01602 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
01603 4, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01604 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01605 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01606 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01607 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01608 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01609 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01610 1, 3, 5, 3, 5, 6, 5, 5, 5, 5,
01611 4, 3, 3, 3, 3, 3, 3, 3, 3, 3,
01612 4, 4, 2, 2, 3, 3, 3, 3, 3, 3,
01613 3, 3, 3, 3, 3, 3, 3, 2, 2, 3,
01614 3, 3, 3, 0, 4, 6, 1, 1, 1, 2,
01615 4, 2, 3, 1, 1, 1, 1, 1, 2, 2,
01616 4, 1, 0, 2, 2, 2, 1, 1, 1, 2,
01617 3, 4, 3, 4, 2, 1, 1, 1, 1, 1,
01618 1, 1, 1, 1, 0, 4, 0, 4, 3, 3,
01619 2, 3, 3, 1, 4, 3, 1, 0, 6, 4,
01620 3, 2, 1, 2, 2, 6, 6, 0, 0, 7,
01621 0, 0, 7, 5, 4, 0, 0, 9, 0, 6,
01622 0, 0, 8, 0, 5, 0, 6, 0, 0, 9,
01623 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01624 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
01625 1, 1, 5, 1, 2, 1, 1, 1, 3, 1,
01626 3, 1, 4, 6, 3, 5, 2, 4, 1, 3,
01627 6, 8, 4, 6, 4, 2, 6, 2, 4, 6,
01628 2, 4, 2, 4, 1, 1, 1, 3, 1, 4,
01629 1, 2, 1, 3, 1, 1, 0, 0, 4, 4,
01630 1, 3, 3, 0, 5, 2, 4, 4, 2, 4,
01631 4, 3, 3, 3, 2, 1, 4, 0, 5, 0,
01632 5, 5, 1, 1, 6, 1, 1, 1, 1, 2,
01633 1, 2, 1, 1, 1, 1, 1, 1, 1, 2,
01634 3, 3, 3, 3, 3, 0, 3, 1, 2, 3,
01635 3, 0, 3, 0, 2, 0, 2, 0, 2, 1,
01636 0, 3, 0, 0, 5, 1, 1, 1, 1, 2,
01637 1, 1, 1, 1, 3, 1, 1, 2, 2, 1,
01638 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01639 1, 1, 1, 1, 1, 1, 0, 4, 2, 3,
01640 2, 6, 8, 4, 6, 4, 6, 2, 4, 6,
01641 2, 4, 2, 4, 1, 0, 1, 1, 1, 1,
01642 1, 1, 1, 3, 1, 3, 3, 3, 1, 3,
01643 1, 3, 1, 1, 2, 1, 1, 1, 2, 2,
01644 1, 1, 0, 4, 1, 2, 1, 3, 3, 2,
01645 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01646 1, 1, 0, 1, 0, 1, 2, 2, 0, 1,
01647 1, 1, 1, 1, 2, 0
01648 };
01649
01650
01651
01652
01653 static const yytype_uint16 yydefact[] =
01654 {
01655 2, 0, 0, 1, 0, 332, 333, 334, 0, 325,
01656 326, 327, 330, 328, 329, 331, 320, 321, 322, 323,
01657 283, 252, 252, 475, 474, 476, 477, 554, 0, 554,
01658 10, 0, 479, 478, 480, 469, 542, 471, 470, 472,
01659 473, 465, 466, 427, 483, 484, 0, 0, 0, 0,
01660 0, 565, 565, 80, 386, 445, 443, 445, 447, 435,
01661 441, 0, 0, 0, 3, 552, 6, 9, 42, 43,
01662 51, 50, 0, 68, 0, 72, 82, 0, 48, 236,
01663 0, 274, 0, 0, 297, 300, 552, 0, 0, 0,
01664 0, 52, 292, 265, 266, 426, 428, 267, 268, 269,
01665 270, 424, 425, 423, 481, 271, 0, 272, 252, 5,
01666 8, 160, 171, 161, 184, 157, 177, 167, 166, 187,
01667 188, 182, 165, 164, 159, 185, 189, 190, 169, 158,
01668 172, 176, 178, 170, 163, 179, 186, 181, 180, 173,
01669 183, 168, 156, 175, 174, 155, 162, 153, 154, 150,
01670 151, 152, 109, 111, 110, 145, 146, 142, 124, 125,
01671 126, 133, 130, 132, 127, 128, 147, 148, 134, 135,
01672 139, 129, 131, 121, 122, 123, 136, 137, 138, 140,
01673 141, 143, 144, 149, 114, 116, 118, 23, 112, 113,
01674 115, 117, 0, 0, 0, 0, 0, 0, 0, 247,
01675 0, 237, 258, 66, 251, 565, 0, 481, 0, 272,
01676 565, 536, 67, 65, 554, 64, 0, 565, 404, 63,
01677 554, 555, 0, 0, 18, 233, 0, 0, 320, 321,
01678 283, 286, 405, 212, 0, 0, 213, 280, 0, 0,
01679 0, 552, 15, 554, 70, 14, 276, 0, 558, 558,
01680 238, 0, 0, 558, 534, 554, 0, 0, 0, 78,
01681 324, 0, 88, 95, 294, 387, 462, 461, 463, 460,
01682 0, 459, 0, 0, 0, 0, 0, 0, 0, 467,
01683 468, 47, 227, 228, 561, 562, 4, 563, 553, 0,
01684 0, 0, 0, 0, 0, 0, 393, 395, 0, 84,
01685 0, 76, 73, 0, 0, 0, 0, 0, 0, 0,
01686 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
01687 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
01688 0, 565, 0, 0, 49, 0, 0, 0, 0, 552,
01689 0, 553, 0, 346, 345, 0, 0, 481, 272, 104,
01690 105, 0, 0, 107, 0, 0, 481, 272, 313, 180,
01691 173, 183, 168, 150, 151, 152, 109, 110, 532, 315,
01692 531, 0, 0, 0, 409, 407, 293, 429, 0, 0,
01693 398, 57, 291, 119, 539, 280, 259, 254, 0, 0,
01694 256, 248, 257, 0, 565, 0, 0, 0, 256, 249,
01695 554, 0, 285, 253, 554, 246, 245, 554, 290, 46,
01696 20, 22, 21, 0, 287, 0, 0, 0, 0, 0,
01697 0, 17, 554, 278, 13, 553, 69, 554, 281, 560,
01698 559, 239, 560, 241, 282, 535, 0, 94, 467, 468,
01699 86, 81, 0, 0, 565, 0, 505, 449, 452, 450,
01700 464, 446, 430, 444, 431, 432, 448, 433, 434, 0,
01701 437, 439, 0, 440, 0, 0, 564, 7, 24, 25,
01702 26, 27, 28, 44, 45, 565, 0, 31, 40, 0,
01703 41, 554, 0, 74, 85, 30, 191, 258, 39, 209,
01704 217, 222, 223, 224, 219, 221, 231, 232, 225, 226,
01705 202, 203, 229, 230, 554, 218, 220, 214, 215, 216,
01706 204, 205, 206, 207, 208, 543, 548, 544, 549, 403,
01707 252, 401, 554, 543, 545, 544, 546, 402, 252, 0,
01708 565, 337, 0, 336, 0, 0, 0, 0, 0, 0,
01709 280, 0, 565, 0, 305, 310, 104, 105, 106, 0,
01710 486, 308, 485, 0, 565, 0, 0, 0, 505, 551,
01711 550, 317, 543, 544, 252, 252, 565, 565, 32, 193,
01712 38, 201, 55, 58, 0, 191, 538, 0, 260, 255,
01713 565, 547, 544, 554, 543, 544, 537, 284, 556, 242,
01714 289, 19, 0, 234, 0, 29, 0, 565, 200, 71,
01715 16, 277, 558, 0, 79, 91, 93, 554, 543, 544,
01716 511, 508, 507, 506, 509, 0, 523, 527, 526, 522,
01717 505, 0, 390, 510, 512, 514, 565, 520, 565, 525,
01718 565, 0, 504, 453, 0, 436, 438, 442, 210, 211,
01719 378, 565, 0, 376, 375, 264, 0, 83, 77, 0,
01720 0, 0, 0, 0, 400, 61, 0, 406, 0, 0,
01721 244, 399, 59, 243, 335, 275, 565, 565, 415, 565,
01722 338, 565, 340, 298, 339, 301, 0, 0, 304, 547,
01723 279, 554, 543, 544, 0, 0, 488, 0, 0, 104,
01724 105, 108, 554, 0, 554, 505, 0, 0, 0, 397,
01725 54, 396, 53, 0, 0, 0, 565, 120, 261, 250,
01726 0, 0, 406, 0, 0, 554, 11, 240, 87, 89,
01727 0, 511, 0, 358, 349, 351, 554, 347, 565, 0,
01728 0, 388, 0, 497, 530, 0, 500, 524, 0, 502,
01729 528, 0, 455, 456, 457, 451, 458, 511, 0, 565,
01730 0, 565, 518, 565, 565, 374, 380, 0, 0, 262,
01731 75, 192, 0, 37, 198, 36, 199, 62, 557, 0,
01732 34, 196, 35, 197, 60, 416, 417, 565, 418, 0,
01733 565, 343, 0, 0, 341, 0, 0, 0, 303, 0,
01734 0, 406, 0, 311, 0, 0, 406, 314, 533, 554,
01735 0, 490, 318, 0, 0, 194, 0, 0, 288, 516,
01736 554, 0, 356, 0, 513, 554, 0, 0, 515, 565,
01737 565, 529, 565, 521, 565, 565, 0, 0, 384, 381,
01738 382, 385, 0, 377, 365, 367, 0, 370, 0, 372,
01739 394, 263, 235, 33, 195, 0, 0, 420, 344, 0,
01740 12, 422, 0, 295, 296, 0, 0, 260, 565, 306,
01741 0, 487, 309, 489, 316, 505, 410, 408, 0, 348,
01742 359, 0, 354, 350, 389, 392, 391, 0, 493, 0,
01743 495, 0, 501, 0, 498, 503, 454, 0, 517, 0,
01744 379, 565, 565, 565, 519, 565, 565, 0, 419, 0,
01745 96, 103, 0, 421, 0, 299, 302, 412, 413, 411,
01746 0, 0, 0, 56, 0, 357, 0, 352, 565, 565,
01747 565, 565, 280, 0, 383, 0, 362, 0, 364, 371,
01748 0, 368, 373, 102, 0, 565, 0, 565, 565, 0,
01749 312, 0, 355, 0, 494, 0, 491, 496, 499, 547,
01750 279, 565, 565, 565, 565, 547, 101, 554, 543, 544,
01751 414, 342, 307, 319, 353, 565, 363, 0, 360, 366,
01752 369, 406, 492, 565, 361
01753 };
01754
01755
01756 static const yytype_int16 yydefgoto[] =
01757 {
01758 -1, 1, 2, 64, 65, 66, 226, 529, 530, 241,
01759 242, 413, 68, 335, 69, 70, 573, 706, 71, 72,
01760 243, 73, 74, 75, 441, 76, 200, 353, 354, 184,
01761 185, 186, 187, 574, 526, 189, 78, 415, 202, 247,
01762 519, 661, 404, 405, 215, 216, 204, 391, 205, 480,
01763 79, 333, 427, 592, 337, 786, 338, 787, 684, 910,
01764 688, 685, 860, 556, 558, 698, 865, 234, 81, 82,
01765 83, 84, 85, 86, 87, 88, 89, 90, 665, 532,
01766 673, 783, 784, 346, 724, 725, 726, 749, 642, 643,
01767 750, 829, 830, 264, 265, 446, 621, 731, 297, 475,
01768 91, 92, 382, 567, 566, 539, 909, 667, 777, 846,
01769 850, 93, 94, 95, 96, 97, 98, 99, 276, 459,
01770 100, 278, 272, 270, 274, 451, 634, 633, 741, 745,
01771 101, 271, 102, 103, 207, 105, 208, 209, 551, 687,
01772 696, 697, 623, 624, 625, 626, 627, 752, 753, 628,
01773 629, 630, 631, 821, 733, 371, 557, 252, 210, 211,
01774 108, 596, 521, 561, 286, 401, 402, 657, 431, 533,
01775 341, 245
01776 };
01777
01778
01779
01780 #define YYPACT_NINF -778
01781 static const yytype_int16 yypact[] =
01782 {
01783 -778, 133, 2394, -778, 7010, -778, -778, -778, 6523, -778,
01784 -778, -778, -778, -778, -778, -778, 7228, 7228, -778, -778,
01785 7228, 3145, 2722, -778, -778, -778, -778, 164, 6384, -11,
01786 -778, 69, -778, -778, -778, 5623, 2863, -778, -778, 5750,
01787 -778, -778, -778, -778, -778, -778, 8427, 8427, 96, 4342,
01788 8536, 7446, 7773, 6786, -778, 6245, -778, -778, -778, 74,
01789 93, 122, 8645, 8427, -778, 187, -778, 698, 288, -778,
01790 -778, 230, 167, -778, 180, 8754, -778, 234, 2846, 273,
01791 310, -778, 8536, 8536, -778, -778, 4986, 8859, 8964, 9069,
01792 5496, 16, 60, -778, -778, 174, -778, -778, -778, -778,
01793 -778, -778, -778, -778, 201, -778, 258, 282, 206, -778,
01794 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01795 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01796 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01797 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01798 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01799 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01800 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01801 -778, -778, -778, -778, -778, -778, -778, 212, -778, -778,
01802 -778, -778, 215, 8427, 303, 4472, 8427, 8427, 8427, -778,
01803 257, 2846, 285, -778, -778, 281, 343, 38, 337, 263,
01804 290, -778, -778, -778, 4877, -778, 7228, 7228, -778, -778,
01805 5116, -778, 8536, 599, -778, 296, 315, 4602, -778, -778,
01806 -778, 311, 328, -778, 347, 206, 396, 446, 7119, 4342,
01807 329, 187, 698, -11, 370, -778, 288, 339, -30, 30,
01808 -778, 285, 356, 30, -778, -11, 442, 375, 9174, 390,
01809 -778, 351, 373, 383, -778, -778, -778, -778, -778, -778,
01810 515, -778, 552, 587, 620, 397, 607, 407, 34, 473,
01811 474, -778, -778, -778, -778, -778, -778, -778, 5225, 8536,
01812 8536, 8536, 8536, 7119, 8536, 8536, -778, -778, 7882, -778,
01813 4342, 6898, 413, 7882, 8427, 8427, 8427, 8427, 8427, 8427,
01814 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427,
01815 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427,
01816 1712, 7228, 2060, 3517, 288, 80, 80, 8536, 8536, 187,
01817 534, 416, 516, -778, -778, 386, 568, 50, 72, 301,
01818 321, 8536, 363, -778, 66, 393, -778, -778, -778, 36,
01819 41, 103, 224, 259, 266, 322, 348, 369, -778, -778,
01820 -778, 377, 10211, 10211, -778, -778, -778, -778, 8645, 8645,
01821 -778, 483, -778, -778, -778, 268, -778, -778, 8427, 8427,
01822 7337, -778, -778, 2216, 7228, 9441, 8427, 8427, 7555, -778,
01823 -11, 454, -778, -778, -11, -778, -778, 70, -778, -778,
01824 -778, -778, -778, 6523, -778, 8427, 3937, 463, 2216, 9441,
01825 8427, 698, -11, -778, -778, 5353, 462, -11, -778, 7664,
01826 -778, -778, 7773, -778, -778, -778, 296, 411, -778, -778,
01827 -778, 467, 9174, 9518, 7228, 9595, 1033, -778, -778, -778,
01828 -778, -778, -778, -778, -778, -778, -778, -778, -778, 39,
01829 -778, -778, 472, -778, 8427, 8427, -778, -778, -778, -778,
01830 -778, -778, -778, -778, -778, 28, 8427, -778, 468, 487,
01831 -778, -11, 9174, 496, -778, -778, 1576, -778, -778, 396,
01832 1512, 1512, 1512, 1512, 1223, 1223, 1879, 2079, 1512, 1512,
01833 2146, 2146, 582, 582, 2705, 1223, 1223, 1098, 1098, 790,
01834 514, 514, 396, 396, 396, 3286, 5991, 3372, 6105, -778,
01835 328, -778, -11, 448, -778, 451, -778, -778, 3004, 639,
01836 644, -778, 3662, 646, 4082, 42, 42, 534, 7991, 639,
01837 109, 9672, 7228, 9749, -778, 288, -778, 411, -778, 187,
01838 -778, -778, -778, 9826, 7228, 9903, 3517, 8536, 1115, -778,
01839 -778, -778, -778, -778, 1235, 1235, 28, 28, -778, 10270,
01840 -778, 2846, -778, -778, 6523, 10289, -778, 8427, 285, -778,
01841 290, 5877, 2581, -11, 410, 529, -778, -778, -778, -778,
01842 -778, -778, 8536, 2846, 535, -778, 328, 328, 2846, 20,
01843 698, -778, 30, 9174, 467, 338, 271, -11, 228, 261,
01844 557, -778, -778, -778, -778, 666, -778, -778, -778, -778,
01845 923, 43, -778, -778, -778, -778, 543, -778, 544, 623,
01846 547, 642, -778, -778, 722, -778, -778, -778, 396, 396,
01847 -778, 904, 4747, -778, -778, 555, 8100, -778, 467, 9174,
01848 8427, 598, 8645, 8645, -778, 483, 570, 538, 8645, 8645,
01849 -778, -778, 483, -778, -778, -778, 8209, 701, -778, 441,
01850 -778, 701, -778, -778, -778, -778, 639, 31, -778, 110,
01851 132, -11, 126, 144, 8536, 187, -778, 8536, 3517, 338,
01852 271, -778, -11, 639, 70, 923, 3517, 187, 6662, -778,
01853 -778, -778, -778, 4747, 4602, 8427, 28, -778, -778, -778,
01854 8427, 8427, 536, 8427, 8427, 70, -778, -778, -778, 251,
01855 8427, -778, 666, 450, -778, 579, -11, -778, 583, 4747,
01856 4602, -778, 923, -778, -778, 923, -778, -778, 779, -778,
01857 -778, 4602, -778, -778, -778, -778, -778, 625, 809, 583,
01858 615, 595, -778, 604, 605, -778, -778, 740, 8427, 619,
01859 467, 2846, 8427, -778, 2846, -778, 2846, -778, -778, 8645,
01860 -778, 2846, -778, 2846, -778, 468, -778, 675, -778, 4212,
01861 757, -778, 8536, 639, -778, 639, 4747, 4747, -778, 8318,
01862 3807, 147, 42, -778, 187, 639, -778, -778, -778, -11,
01863 639, -778, -778, 759, 630, 2846, 4602, 8427, -778, -778,
01864 -11, 845, 632, 826, -778, -11, 760, 637, -778, 640,
01865 643, -778, 647, -778, 651, 647, 656, 9279, -778, 657,
01866 -778, -778, 682, -778, 1199, -778, 1199, -778, 779, -778,
01867 -778, 658, 2846, -778, 2846, 9384, 80, -778, -778, 4747,
01868 -778, -778, 80, -778, -778, 639, 639, -778, 115, -778,
01869 3517, -778, -778, -778, -778, 1115, -778, -778, 664, -778,
01870 662, 845, 491, -778, -778, -778, -778, 923, -778, 779,
01871 -778, 779, -778, 779, -778, -778, -778, 751, 429, 809,
01872 -778, 672, 673, 647, -778, 679, 647, 765, -778, 432,
01873 373, 383, 3517, -778, 3662, -778, -778, -778, -778, -778,
01874 4747, 639, 3517, -778, 845, 662, 845, 685, 647, 686,
01875 647, 647, -778, 9980, -778, 1199, -778, 779, -778, -778,
01876 779, -778, -778, 411, 10057, 7228, 10134, 644, 441, 639,
01877 -778, 639, 662, 845, -778, 779, -778, -778, -778, 688,
01878 690, 647, 687, 647, 647, 81, 271, -11, 86, 118,
01879 -778, -778, -778, -778, 662, 647, -778, 779, -778, -778,
01880 -778, 124, -778, 647, -778
01881 };
01882
01883
01884 static const yytype_int16 yypgoto[] =
01885 {
01886 -778, -778, -778, 399, -778, 33, -778, -530, -33, -778,
01887 159, -778, 23, -55, 21, -778, -462, -778, -15, 741,
01888 -136, -1, -66, -778, -403, -26, 1181, -306, 750, -52,
01889 -778, -20, -778, -778, 32, -778, 748, -778, 540, -778,
01890 46, -98, -298, 54, 76, -778, -278, -196, -44, -283,
01891 27, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01892 -778, -778, -778, -778, -778, -778, -778, 2, -778, -778,
01893 -778, -778, -778, -778, -778, -778, -778, -778, 298, -323,
01894 -512, -97, -610, -778, -755, -748, 120, -778, -485, -778,
01895 -636, -778, -49, -778, -778, -778, -778, -778, -778, -778,
01896 -778, -778, 752, -778, -778, -520, -778, -92, -778, -778,
01897 -778, -778, -778, -778, 753, -778, -778, -778, -778, -778,
01898 -778, -778, -778, 792, -778, -229, -778, -778, -778, -778,
01899 7, -778, 13, -778, 1031, 762, 1198, 1109, -778, -778,
01900 -12, -416, -706, -549, -667, -121, -679, -777, 25, 128,
01901 -778, -579, -778, -434, 531, -778, -778, -778, -41, -287,
01902 1927, -254, -778, -778, -32, -4, 88, -554, -217, 63,
01903 -31, -2
01904 };
01905
01906
01907
01908
01909
01910 #define YYTABLE_NINF -566
01911 static const yytype_int16 yytable[] =
01912 {
01913 109, 199, 199, 269, 80, 199, 80, 248, 224, 302,
01914 249, 253, 632, 534, 399, 190, 240, 676, 206, 206,
01915 488, 191, 206, 222, 675, 225, 693, 259, 336, 712,
01916 622, 339, 433, 522, 288, 190, 435, 110, 369, 604,
01917 188, 191, 831, 453, 531, 456, 548, 460, 244, 250,
01918 254, 80, 206, 719, 340, 261, 823, 780, 873, 894,
01919 188, 785, 754, 870, 206, 818, 727, 549, 218, 672,
01920 203, 212, 729, 246, 213, -96, 520, 261, 528, 648,
01921 260, 703, 704, 281, 206, 206, 374, 188, 206, 345,
01922 355, 355, 815, 531, -99, 462, 583, -103, 219, -98,
01923 447, 372, 260, 422, 640, 334, 334, 294, 295, 334,
01924 429, 586, 579, 832, 260, 260, 260, 430, 564, 565,
01925 579, -475, 188, 915, 632, -482, -474, 791, 287, -69,
01926 779, -100, 538, 3, -102, -99, 221, -97, 796, 520,
01927 463, 528, 641, 448, 449, 586, 607, -96, 894, 287,
01928 730, -98, 237, 820, 380, 373, 824, -101, 795, 873,
01929 -83, 67, 240, 67, 481, 597, 800, 818, 942, -100,
01930 432, 789, -97, 727, 812, -475, 284, 430, 285, 550,
01931 -474, 279, 280, 831, 381, 635, 632, 284, -476, 285,
01932 -88, 597, 440, 767, 417, 964, 375, 80, 823, 199,
01933 774, 199, 199, 392, 728, 227, 240, 755, 392, 424,
01934 425, 284, -95, 285, 818, 406, 206, 221, 206, 206,
01935 275, 806, 206, -543, 206, 284, -99, 285, -99, 80,
01936 636, -98, 374, -98, 468, 469, 470, 471, 244, 277,
01937 80, 80, -476, 407, 681, 409, 760, 691, 907, -94,
01938 -91, 436, -543, -90, 479, 892, 692, 895, 296, 479,
01939 261, 632, 727, -100, 727, -100, -90, 240, 400, -97,
01940 403, -97, -93, 56, -544, 483, 298, -406, 218, 799,
01941 859, 380, 535, 536, -92, 260, -92, -89, -482, 597,
01942 80, 206, 206, 206, 206, 80, 206, 206, 919, 244,
01943 206, 597, 80, 261, 287, 206, 220, 537, 408, -477,
01944 -96, 221, 334, 334, 334, 334, 199, 473, 474, 477,
01945 299, 467, 727, 917, 485, 294, 295, -540, 260, 406,
01946 911, 426, 284, 206, 285, 80, -406, -90, 908, 206,
01947 206, -88, 375, 303, -479, 378, 952, -541, 217, 580,
01948 397, -478, 383, 206, 790, 420, -279, 220, -324, 385,
01949 334, 334, 518, -477, -547, 727, 388, 727, -90, 379,
01950 -92, -90, -103, 389, 545, -90, 440, -102, 527, 199,
01951 206, 206, 941, 776, 709, 717, -469, -406, 602, -406,
01952 -406, -103, 406, 591, 727, 330, 206, 421, -479, 568,
01953 570, -92, 287, 971, -92, -478, -472, -480, -92, -279,
01954 -279, -324, -324, -544, 109, 546, 440, 552, 80, 547,
01955 190, 390, -95, -547, 396, 518, 191, 80, 393, 199,
01956 398, 632, 418, -469, 438, 439, 443, -540, 414, -469,
01957 -469, 527, 406, -540, 261, 188, 206, 67, 331, 332,
01958 518, 416, 472, 214, -472, 782, 779, -541, -481, -472,
01959 -472, -480, 559, -541, 304, 527, 699, 701, -272, 260,
01960 217, 541, 423, 644, -547, 518, -547, -547, 553, -68,
01961 -543, 394, 395, 428, 261, 394, 419, -469, 587, 444,
01962 445, 527, 589, 434, 677, 590, -280, 713, 437, 669,
01963 651, 671, 721, 457, 611, 612, 613, 614, -472, 260,
01964 599, -481, -481, 461, 923, 601, 560, 934, 656, -98,
01965 751, -272, -272, 902, 542, 543, 663, 199, 668, 904,
01966 442, 554, 555, 420, 80, 658, 80, 718, 659, 199,
01967 406, 464, 465, 721, 206, 611, 612, 613, 614, -280,
01968 -280, 538, 406, 484, 707, -102, 206, -98, 80, 206,
01969 -100, 466, 663, 663, 644, 644, 654, 554, 555, 647,
01970 935, 936, 540, 518, 660, 67, 447, 572, 392, 656,
01971 694, 190, 304, 440, 600, 518, -94, 191, -90, 527,
01972 811, -92, 251, 544, 206, 663, 655, 588, 674, 674,
01973 595, 527, -83, 656, 662, 261, 188, 603, -258, 757,
01974 660, 660, 686, 447, 822, 715, 714, 825, 637, 448,
01975 449, 450, 479, 807, 734, 769, 734, 646, 734, 792,
01976 260, 916, 794, 327, 328, 329, 649, 957, -100, 756,
01977 700, 702, 654, 660, 80, -97, 802, -97, 447, 664,
01978 304, 261, 666, 410, 206, 206, 448, 449, 452, 670,
01979 206, 206, 411, 412, 778, 781, 720, 781, 447, 781,
01980 803, 804, 716, 763, 765, 737, 260, 656, -89, 770,
01981 772, 447, 597, 732, 735, 455, 206, 738, 656, 206,
01982 80, 448, 449, 454, 740, -259, 816, 817, 80, 325,
01983 326, 327, 328, 329, 644, 80, 80, 334, 826, 762,
01984 334, 448, 449, 458, 768, 893, 779, 896, 721, 813,
01985 611, 612, 613, 614, 448, 449, 756, 852, 748, 833,
01986 188, 80, 80, 384, 827, 834, 386, 387, 289, 290,
01987 291, 292, 293, 80, 836, 838, 848, 756, 793, 734,
01988 840, 734, 734, 855, 856, 722, 918, 858, 920, -260,
01989 801, 723, 921, 845, 201, 201, 849, 867, 201, 866,
01990 875, 206, 871, 868, 876, 847, 742, 743, 851, 744,
01991 877, 80, 798, 879, 206, 44, 45, 881, 80, 80,
01992 843, 883, 80, 886, 233, 236, 890, 889, -261, 201,
01993 201, 913, 914, 808, 951, 334, 953, 922, 80, 954,
01994 282, 283, 925, 927, 814, 594, 903, 734, 734, 930,
01995 734, 933, 734, 734, 965, 943, 945, 967, 343, 888,
01996 -543, 721, -544, 611, 612, 613, 614, 678, 478, 358,
01997 924, 961, 810, 487, 376, 960, 973, 899, 377, 273,
01998 0, 80, 370, 912, 260, 674, 781, 861, 304, 891,
01999 819, 828, 80, 611, 612, 613, 614, 0, 615, 937,
02000 0, 938, 260, 317, 318, 617, 0, 939, 721, 0,
02001 611, 612, 613, 614, 0, 0, 0, 863, 0, 734,
02002 734, 734, 0, 734, 734, 618, 0, 721, 869, 611,
02003 612, 613, 614, 874, 80, 0, 80, 325, 326, 327,
02004 328, 329, 80, 0, 80, 722, 734, 734, 734, 734,
02005 199, 872, 0, 0, 0, 0, 0, 0, 0, 576,
02006 578, 0, 0, 406, 722, 668, 781, 206, 251, 0,
02007 0, 201, 0, 0, 201, 201, 282, 0, 0, 734,
02008 734, 734, 734, 656, 0, 518, 747, 0, 611, 612,
02009 613, 614, 201, 734, 201, 201, 518, 0, 0, 578,
02010 0, 734, 251, 0, 788, 610, 0, 611, 612, 613,
02011 614, 0, 527, 0, 0, 0, 0, 0, 0, 0,
02012 0, 797, 0, 615, 0, 0, 0, 0, 0, 616,
02013 617, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02014 0, 0, 615, 0, 0, 0, 645, 0, 616, 617,
02015 618, 0, 0, 619, 0, 0, 0, 0, 0, 0,
02016 0, 0, 0, 104, 0, 104, 0, 0, 0, 618,
02017 0, 0, 619, 0, 0, 0, 201, 0, 0, 748,
02018 0, 486, 489, 490, 491, 492, 493, 494, 495, 496,
02019 497, 498, 499, 500, 501, 502, 503, 504, 505, 506,
02020 507, 508, 509, 510, 511, 512, 513, 514, 487, 201,
02021 104, 853, 0, 854, 262, 610, 0, 611, 612, 613,
02022 614, 0, 0, 862, 0, 0, 0, 0, 864, 0,
02023 0, 0, 0, 0, 0, 0, 262, 0, 0, 0,
02024 0, 107, 0, 107, 0, 0, 0, 708, 347, 356,
02025 356, 356, 615, 0, 0, 0, 569, 571, 616, 617,
02026 0, 0, 0, 0, 0, 0, 575, 201, 201, 0,
02027 0, 0, 201, 0, 569, 571, 201, 0, 0, 618,
02028 0, 0, 619, 905, 906, 0, 0, 0, 107, 736,
02029 0, 739, 263, 593, 0, 0, 304, 610, 598, 611,
02030 612, 613, 614, 0, 0, 620, 0, 201, 0, 0,
02031 201, 317, 318, 77, 263, 77, 759, 0, 0, 0,
02032 0, 0, 201, 0, 0, 0, 348, 357, 357, 0,
02033 106, 0, 106, 0, 615, 0, 775, 0, 0, 940,
02034 616, 617, 638, 639, 324, 325, 326, 327, 328, 329,
02035 0, 0, 0, 0, 201, 0, 104, 0, 0, 0,
02036 77, 618, 0, 0, 619, -565, 0, 962, 0, 963,
02037 0, 0, 0, -565, -565, -565, 0, 106, -565, -565,
02038 -565, 747, -565, 611, 612, 613, 614, 695, 104, 0,
02039 809, 0, -565, 0, 0, 0, 0, 0, 344, 104,
02040 104, 0, -565, -565, 0, -565, -565, -565, -565, -565,
02041 0, 0, 835, 0, 837, 839, 201, 0, 615, 262,
02042 201, 304, 0, 0, 616, 617, 0, 0, 841, 0,
02043 0, 0, 201, 0, 107, 0, 317, 318, 0, 0,
02044 0, 0, 0, 0, 0, 618, 0, 0, 619, 104,
02045 -565, 0, 0, 0, 104, 201, 0, 0, 0, 857,
02046 0, 104, 262, 0, 0, 0, 107, 322, 323, 324,
02047 325, 326, 327, 328, 329, 0, 0, 107, 107, 0,
02048 878, 880, 0, 882, 0, 884, 885, 0, 0, 0,
02049 0, 0, 0, 0, 104, 0, 0, 263, 0, 0,
02050 0, 0, -565, 0, -565, 0, 77, 217, -565, 0,
02051 -565, 0, -565, 0, 0, 0, 0, 0, 0, 0,
02052 0, 0, 0, 106, 201, 0, 0, 107, 761, 0,
02053 764, 766, 107, 0, 0, 0, 771, 773, 77, 107,
02054 263, 0, 0, 0, 201, 0, 0, 0, 0, 77,
02055 77, 0, 926, 928, 929, 106, 931, 932, 0, 0,
02056 0, 0, 0, 0, 0, 0, 106, 106, 0, 0,
02057 0, 0, 107, 0, 0, 0, 0, 104, 0, 944,
02058 946, 947, 948, 805, 0, 0, 104, 0, 764, 766,
02059 0, 771, 773, 0, 0, 0, 0, 0, 201, 77,
02060 0, 0, 0, 262, 77, 0, 0, 0, 0, 0,
02061 0, 77, 966, 968, 969, 970, 106, 0, 0, 0,
02062 0, 106, 0, 0, 0, 0, 972, 0, 106, 0,
02063 0, 0, 0, 0, 974, 0, 201, 0, 0, 0,
02064 842, 0, 0, 262, 77, 0, 0, 844, 0, 0,
02065 0, 0, 0, 0, 0, 107, 0, 0, 0, 0,
02066 0, 106, 0, 0, 107, 0, 0, 201, 0, 0,
02067 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02068 0, 263, 0, 0, 0, 844, 0, 0, 0, 0,
02069 0, 0, 0, 104, 0, 104, 0, 0, 0, 0,
02070 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02071 304, -566, -566, -566, -566, 309, 310, 104, 0, -566,
02072 -566, 263, 0, 0, 0, 317, 318, 77, 0, 0,
02073 0, 0, 0, 0, 0, 0, 77, 0, 0, 0,
02074 0, 0, 0, 0, 106, 0, 0, 0, 0, 0,
02075 650, 0, 0, 106, 320, 321, 322, 323, 324, 325,
02076 326, 327, 328, 329, 262, 0, 0, 0, 0, 0,
02077 0, 107, 0, 107, 304, 305, 306, 307, 308, 309,
02078 310, 311, 312, 313, 314, 315, 316, 0, 0, 317,
02079 318, 0, 0, 0, 0, 107, 0, 0, 0, 0,
02080 0, 0, 0, 104, 0, 0, 0, 0, 0, 0,
02081 262, 0, 0, 201, 0, 0, 319, 0, 320, 321,
02082 322, 323, 324, 325, 326, 327, 328, 329, 0, 0,
02083 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02084 0, 0, 263, 77, 0, 77, -237, 0, 0, 104,
02085 0, 0, 0, 0, 0, 0, 0, 104, 0, 0,
02086 106, 0, 106, 0, 104, 104, 0, 77, 0, 0,
02087 0, 0, 0, 746, 0, 0, 0, 0, 0, 0,
02088 0, 107, 0, 0, 106, 0, 0, 0, 263, 0,
02089 104, 104, 0, 0, 515, 516, 0, 0, 517, 0,
02090 0, 0, 104, 0, 0, 0, 0, 0, 155, 156,
02091 157, 158, 159, 160, 161, 162, 163, 0, 0, 164,
02092 165, 0, 0, 166, 167, 168, 169, 107, 0, 0,
02093 0, 0, 0, 0, 0, 107, 0, 170, 0, 0,
02094 104, 0, 107, 107, 0, 0, 0, 104, 104, 0,
02095 0, 104, 0, 77, 171, 172, 173, 174, 175, 176,
02096 177, 178, 179, 180, 0, 181, 182, 104, 107, 107,
02097 106, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02098 107, 0, 0, 183, 217, 0, 0, 0, 356, 0,
02099 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,
02100 0, 0, 0, 0, 0, 0, 900, 77, 0, 0,
02101 104, 0, 0, 0, 77, 77, 106, 0, 107, 0,
02102 0, 104, 0, 0, 106, 107, 107, 0, 0, 107,
02103 0, 106, 106, 0, 0, 0, 0, 0, 0, 0,
02104 77, 77, 0, 0, 0, 107, 0, 0, 0, 0,
02105 0, 0, 77, 0, 0, 0, 0, 106, 106, 0,
02106 0, 0, 0, 104, 0, 104, 357, 0, 0, 106,
02107 0, 104, 0, 104, 0, 0, 0, 304, 305, 306,
02108 307, 308, 309, 310, 901, 0, 313, 314, 107, 0,
02109 77, 0, 317, 318, 0, 0, 0, 77, 77, 107,
02110 0, 77, 0, 235, 235, 0, 0, 106, 235, 235,
02111 235, 0, 0, 0, 106, 106, 0, 77, 106, 0,
02112 235, 320, 321, 322, 323, 324, 325, 326, 327, 328,
02113 329, 0, 235, 0, 106, 0, 0, 0, 0, 0,
02114 0, 107, 0, 107, 235, 235, 235, 0, 0, 107,
02115 0, 107, 0, 0, 0, 0, 898, 0, 0, 0,
02116 77, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02117 0, 77, 0, 0, 0, 0, 0, 106, 0, 0,
02118 0, 0, 0, 0, 0, 0, 0, 0, 106, 0,
02119 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02120 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02121 0, 0, 0, 77, 0, 77, 0, 0, 0, 0,
02122 0, 77, 0, 77, 0, 0, 0, 0, 0, 0,
02123 106, 0, 106, 0, 0, 0, 0, 0, 106, 0,
02124 106, 0, 523, 524, 0, 0, 525, 0, 0, 0,
02125 235, 0, 0, 235, 235, 235, 155, 156, 157, 158,
02126 159, 160, 161, 162, 163, 0, 0, 164, 165, 0,
02127 0, 166, 167, 168, 169, 0, 0, 304, 305, 306,
02128 307, 308, 309, 310, 311, 170, 313, 314, 0, 0,
02129 0, 0, 317, 318, 0, 0, 0, 0, 0, 0,
02130 0, 0, 171, 172, 173, 174, 175, 176, 177, 178,
02131 179, 180, 0, 181, 182, 235, 0, 0, 0, 0,
02132 0, 320, 321, 322, 323, 324, 325, 326, 327, 328,
02133 329, 183, 217, 0, 0, 0, 0, 0, 0, 0,
02134 0, 0, 0, 0, 304, 305, 306, 307, 308, 309,
02135 310, 311, 312, 313, 314, -566, -566, 0, 235, 317,
02136 318, 235, 235, 235, 235, 235, 235, 235, 235, 235,
02137 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
02138 235, 235, 235, 235, 235, 235, 235, 0, 320, 321,
02139 322, 323, 324, 325, 326, 327, 328, 329, 581, 516,
02140 0, 0, 582, 0, 0, 0, 0, 0, 0, 0,
02141 0, 0, 155, 156, 157, 158, 159, 160, 161, 162,
02142 163, 0, 0, 164, 165, 0, 0, 166, 167, 168,
02143 169, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02144 0, 170, 0, 0, 0, 235, 235, 235, 0, 0,
02145 0, 0, 0, 235, 235, 235, 0, 0, 171, 172,
02146 173, 174, 175, 176, 177, 178, 179, 180, 0, 181,
02147 182, 0, 235, 0, 0, 0, 0, 235, 0, 0,
02148 0, 0, 0, 0, 0, 0, 235, 183, 217, 235,
02149 0, 0, 0, 0, 0, 0, 0, 0, 0, 235,
02150 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02151 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02152 0, 235, 235, 0, -565, 4, 0, 5, 6, 7,
02153 8, 9, 0, 235, 0, 10, 11, 0, 0, 235,
02154 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
02155 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02156 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02157 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
02158 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02159 46, 47, 0, 0, 0, 235, 0, 0, 0, 0,
02160 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02161 48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
02162 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02163 0, 0, 0, 0, 235, 0, 0, 0, 0, 0,
02164 0, 0, 0, 0, 0, 0, 61, 62, 63, 0,
02165 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02166 235, 0, 0, 0, 0, 0, 0, 0, 0, -565,
02167 0, -565, 0, 0, 0, 0, 0, 0, 0, 0,
02168 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02169 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02170 0, 0, 0, 235, 0, 0, 235, 235, 0, 0,
02171 0, -279, 0, 0, 0, 0, 0, 0, 0, -279,
02172 -279, -279, 0, 235, -279, -279, -279, 0, -279, 0,
02173 0, 0, 0, 0, 0, 0, 0, 0, -279, -279,
02174 -279, 0, 0, 0, 0, 0, 0, 0, -279, -279,
02175 0, -279, -279, -279, -279, -279, 0, 0, 0, 0,
02176 0, 0, 235, 0, 0, 0, 0, 235, 235, 0,
02177 235, 235, 0, 0, 0, 0, 0, 235, 0, -279,
02178 -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
02179 -279, -279, 0, 0, -279, -279, -279, 0, 711, -279,
02180 0, 0, 0, 0, 0, -279, 0, 0, 0, 0,
02181 0, 0, 0, 0, 0, 235, 0, 0, -279, 235,
02182 -101, -279, -279, -279, -279, -279, -279, -279, -279, -279,
02183 -279, -279, -279, 0, 0, 0, 0, 0, 0, 0,
02184 0, 0, 0, 0, 0, 0, 235, 0, -279, -279,
02185 -279, -279, -405, 0, -279, -279, -279, 0, -279, 0,
02186 -405, -405, -405, 0, 235, -405, -405, -405, 0, -405,
02187 0, 0, 0, 0, 0, 0, 0, 0, -405, -405,
02188 -405, 0, 0, 0, 235, 0, 0, 0, 0, -405,
02189 -405, 0, -405, -405, -405, -405, -405, 0, 0, 0,
02190 0, 0, 235, 304, 305, 306, 307, 308, 309, 310,
02191 311, 312, 313, 314, 315, 316, 0, 0, 317, 318,
02192 -405, -405, -405, -405, -405, -405, -405, -405, -405, -405,
02193 -405, -405, -405, 0, 0, -405, -405, -405, 0, 0,
02194 -405, 0, 0, 0, 0, 319, -405, 320, 321, 322,
02195 323, 324, 325, 326, 327, 328, 329, 0, 0, 0,
02196 0, 0, -405, 0, -405, -405, -405, -405, -405, -405,
02197 -405, -405, -405, -405, 0, 0, 0, 0, 0, 0,
02198 0, 0, 221, 0, 0, 0, 0, 0, -405, -405,
02199 -405, -405, -405, -273, 217, -405, -405, -405, 0, -405,
02200 0, -273, -273, -273, 0, 0, -273, -273, -273, 0,
02201 -273, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02202 -273, -273, -273, 0, 0, 0, 0, 0, 0, 0,
02203 -273, -273, 0, -273, -273, -273, -273, -273, 0, 0,
02204 0, 0, 0, 0, 304, 305, 306, 307, 308, 309,
02205 310, 311, 312, 313, 314, 315, 316, 0, 0, 317,
02206 318, -273, -273, -273, -273, -273, -273, -273, -273, -273,
02207 -273, -273, -273, -273, 0, 0, -273, -273, -273, 0,
02208 0, -273, 0, 0, 0, 0, 319, -273, 320, 321,
02209 322, 323, 324, 325, 326, 327, 328, 329, 0, 0,
02210 -273, 0, 0, -273, -273, -273, -273, -273, -273, -273,
02211 -273, -273, -273, -273, -273, 0, 0, 0, 0, 0,
02212 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02213 -273, -273, -273, -273, -565, 0, -273, -273, -273, 0,
02214 -273, 0, -565, -565, -565, 0, 0, -565, -565, -565,
02215 0, -565, 0, 0, 0, 0, 0, 0, 0, 0,
02216 -565, -565, -565, 0, 0, 0, 0, 0, 0, 0,
02217 0, -565, -565, 0, -565, -565, -565, -565, -565, 0,
02218 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02219 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02220 0, 0, -565, -565, -565, -565, -565, -565, -565, -565,
02221 -565, -565, -565, -565, -565, 0, 0, -565, -565, -565,
02222 0, 0, -565, 0, 0, 0, 0, 0, -565, 0,
02223 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02224 0, 0, 0, 0, -565, 0, -565, -565, -565, -565,
02225 -565, -565, -565, -565, -565, -565, 0, 0, 0, 0,
02226 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02227 -565, -565, -565, -565, -565, -286, 217, -565, -565, -565,
02228 0, -565, 0, -286, -286, -286, 0, 0, -286, -286,
02229 -286, 0, -286, 0, 0, 0, 0, 0, 0, 0,
02230 0, 0, -286, -286, 0, 0, 0, 0, 0, 0,
02231 0, 0, -286, -286, 0, -286, -286, -286, -286, -286,
02232 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02233 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02234 0, 0, 0, -286, -286, -286, -286, -286, -286, -286,
02235 -286, -286, -286, -286, -286, -286, 0, 0, -286, -286,
02236 -286, 0, 0, -286, 0, 0, 0, 0, 0, -286,
02237 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02238 0, 0, 0, 0, 0, -286, 0, -286, -286, -286,
02239 -286, -286, -286, -286, -286, -286, -286, 0, 0, 0,
02240 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02241 0, 0, -286, -286, -286, -286, -547, 214, -286, -286,
02242 -286, 0, -286, 0, -547, -547, -547, 0, 0, 0,
02243 -547, -547, 0, -547, 0, 0, 0, 0, 0, 0,
02244 0, 0, -547, 0, 0, 0, 0, 0, 0, 0,
02245 0, 0, 0, -547, -547, 0, -547, -547, -547, -547,
02246 -547, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02247 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02248 0, 0, 0, 0, -547, -547, -547, -547, -547, -547,
02249 -547, -547, -547, -547, -547, -547, -547, 0, 0, -547,
02250 -547, -547, -279, 652, 0, 0, 0, 0, 0, 0,
02251 -279, -279, -279, 0, 0, 0, -279, -279, 0, -279,
02252 0, 0, 0, 0, 0, -99, -547, 0, -547, -547,
02253 -547, -547, -547, -547, -547, -547, -547, -547, 0, -279,
02254 -279, 0, -279, -279, -279, -279, -279, 0, 0, 0,
02255 0, 0, -547, -547, -547, -547, -91, 0, 0, -547,
02256 0, -547, 0, -547, 0, 0, 0, 0, 0, 0,
02257 -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
02258 -279, -279, -279, 0, 0, -279, -279, -279, 0, 653,
02259 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02260 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02261 0, -101, -279, 0, -279, -279, -279, -279, -279, -279,
02262 -279, -279, -279, -279, 0, 0, 0, 0, 0, 0,
02263 0, 0, 0, 0, 0, 0, 0, 0, 0, -279,
02264 -279, -279, -93, 0, 0, -279, 0, -279, 238, -279,
02265 5, 6, 7, 8, 9, -565, -565, -565, 10, 11,
02266 0, 0, -565, 12, 0, 13, 14, 15, 16, 17,
02267 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02268 23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
02269 0, 0, 28, 29, 0, 31, 32, 33, 34, 35,
02270 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02271 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02272 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02273 0, 0, 0, 48, 0, 0, 49, 50, 0, 51,
02274 52, 0, 53, 0, 54, 55, 56, 57, 58, 59,
02275 60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02276 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
02277 62, 63, 0, 0, 0, 0, 0, 0, 0, 0,
02278 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02279 0, 0, -565, 238, -565, 5, 6, 7, 8, 9,
02280 0, 0, -565, 10, 11, 0, -565, -565, 12, 0,
02281 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02282 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02283 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02284 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02285 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02286 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02287 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02288 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02289 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02290 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02291 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02293 0, 0, 0, 0, 0, 0, 0, -565, 238, -565,
02294 5, 6, 7, 8, 9, 0, 0, -565, 10, 11,
02295 0, 0, -565, 12, -565, 13, 14, 15, 16, 17,
02296 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02297 23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
02298 0, 0, 28, 29, 0, 31, 32, 33, 34, 35,
02299 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02300 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02301 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02302 0, 0, 0, 48, 0, 0, 49, 50, 0, 51,
02303 52, 0, 53, 0, 54, 55, 56, 57, 58, 59,
02304 60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02305 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
02306 62, 63, 0, 0, 0, 0, 0, 0, 4, 0,
02307 5, 6, 7, 8, 9, 0, 0, 0, 10, 11,
02308 0, 0, -565, 12, -565, 13, 14, 15, 16, 17,
02309 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02310 23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
02311 0, 0, 28, 29, 30, 31, 32, 33, 34, 35,
02312 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02313 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02314 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02315 0, 0, 0, 48, 0, 0, 49, 50, 0, 51,
02316 52, 0, 53, 0, 54, 55, 56, 57, 58, 59,
02317 60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02318 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
02319 62, 63, 0, 0, 0, 0, 0, 0, 0, 0,
02320 0, 0, 0, 0, -565, 0, 0, 0, 0, 0,
02321 0, 0, -565, 238, -565, 5, 6, 7, 8, 9,
02322 0, 0, -565, 10, 11, 0, 0, -565, 12, 0,
02323 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02324 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02325 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02326 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02327 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02328 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02329 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02330 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02331 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02332 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02333 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02334 0, 0, 0, 238, 0, 5, 6, 7, 8, 9,
02335 0, -565, -565, 10, 11, 0, 0, -565, 12, -565,
02336 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02337 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02338 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02339 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02340 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02341 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02342 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02343 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02344 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02345 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02346 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02347 0, 0, 0, 238, 0, 5, 6, 7, 8, 9,
02348 0, 0, 0, 10, 11, 0, 0, -565, 12, -565,
02349 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02350 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02351 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02352 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02353 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02354 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02355 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02356 0, 239, 50, 0, 51, 52, 0, 53, 0, 54,
02357 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02358 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02359 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02360 0, 0, 0, 238, 0, 5, 6, 7, 8, 9,
02361 0, 0, 0, 10, 11, -565, 0, -565, 12, -565,
02362 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02363 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02364 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02365 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02366 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02367 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02368 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02369 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02370 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02371 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02372 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02373 0, 0, 0, 238, 0, 5, 6, 7, 8, 9,
02374 0, 0, 0, 10, 11, -565, 0, -565, 12, -565,
02375 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02376 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02377 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02378 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02379 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02380 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02381 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02382 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02383 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02384 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02385 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02386 0, 0, 0, 0, 0, 0, 0, 0, 0, -565,
02387 0, 0, 0, 0, 0, 0, 0, -565, 238, -565,
02388 5, 6, 7, 8, 9, 0, 0, -565, 10, 11,
02389 0, 0, 0, 12, 0, 13, 14, 15, 16, 17,
02390 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02391 23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
02392 0, 0, 28, 29, 0, 31, 32, 33, 34, 35,
02393 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02394 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02395 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02396 0, 0, 0, 48, 0, 0, 49, 50, 0, 51,
02397 52, 0, 53, 0, 54, 55, 56, 57, 58, 59,
02398 60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02399 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
02400 62, 63, 0, 0, 0, 0, 0, 0, 0, 0,
02401 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
02402 0, 0, -565, 12, -565, 13, 14, 15, 16, 17,
02403 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02404 23, 24, 25, 26, 0, 0, 192, 0, 0, 0,
02405 0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
02406 36, 37, 38, 39, 40, 193, 41, 42, 0, 43,
02407 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02408 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02409 0, 0, 0, 194, 0, 0, 195, 50, 0, 51,
02410 52, 0, 196, 197, 54, 55, 56, 57, 58, 59,
02411 60, 0, 0, 0, 0, 0, 0, 0, 0, 5,
02412 6, 7, 0, 9, 0, 0, 0, 10, 11, 61,
02413 198, 63, 12, 0, 13, 14, 15, 16, 17, 18,
02414 19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
02415 24, 25, 26, 0, 221, 27, 0, 0, 0, 0,
02416 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
02417 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02418 45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
02419 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02420 0, 0, 194, 0, 0, 195, 50, 0, 51, 52,
02421 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02422 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02423 0, 0, 0, 0, 0, 0, 0, 0, 61, 62,
02424 63, 0, 0, 0, 0, 0, 0, 0, 0, 5,
02425 6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
02426 0, 284, 12, 285, 13, 14, 15, 16, 17, 18,
02427 19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
02428 24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
02429 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
02430 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02431 45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
02432 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02433 0, 0, 194, 0, 0, 195, 50, 0, 51, 52,
02434 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02435 0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
02436 7, 8, 9, 0, 0, 0, 10, 11, 61, 62,
02437 63, 12, 0, 13, 14, 15, 16, 17, 18, 19,
02438 0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
02439 25, 26, 0, 221, 27, 0, 0, 0, 0, 0,
02440 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
02441 38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
02442 0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
02443 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02444 0, 48, 0, 0, 49, 50, 0, 51, 52, 0,
02445 53, 0, 54, 55, 56, 57, 58, 59, 60, 0,
02446 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02447 0, 0, 0, 0, 0, 0, 0, 61, 62, 63,
02448 0, 0, 0, 0, 0, 0, 5, 6, 7, 8,
02449 9, 0, 0, 0, 10, 11, 0, 0, 0, 12,
02450 466, 13, 14, 15, 16, 17, 18, 19, 0, 0,
02451 0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
02452 0, 0, 27, 0, 0, 0, 0, 0, 28, 29,
02453 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
02454 40, 0, 41, 42, 0, 43, 44, 45, 0, 46,
02455 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02456 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
02457 0, 0, 49, 50, 0, 51, 52, 0, 53, 0,
02458 54, 55, 56, 57, 58, 59, 60, 0, 0, 0,
02459 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02460 0, 0, 0, 0, 0, 61, 62, 63, 0, 0,
02461 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02462 0, 0, 0, 0, 0, 0, 0, 0, 466, 111,
02463 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
02464 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
02465 132, 133, 134, 0, 0, 0, 135, 136, 137, 359,
02466 360, 361, 362, 142, 143, 144, 0, 0, 0, 0,
02467 0, 145, 146, 147, 148, 363, 364, 365, 366, 153,
02468 37, 38, 367, 40, 0, 0, 0, 0, 0, 0,
02469 0, 0, 155, 156, 157, 158, 159, 160, 161, 162,
02470 163, 0, 0, 164, 165, 0, 0, 166, 167, 168,
02471 169, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02472 0, 170, 0, 0, 0, 0, 0, 0, 0, 0,
02473 0, 0, 0, 0, 0, 0, 0, 0, 171, 172,
02474 173, 174, 175, 176, 177, 178, 179, 180, 0, 181,
02475 182, 0, 0, 0, 0, 0, -540, -540, -540, 0,
02476 -540, 0, 0, 0, -540, -540, 0, 183, 368, -540,
02477 0, -540, -540, -540, -540, -540, -540, -540, 0, -540,
02478 0, 0, 0, -540, -540, -540, -540, -540, -540, -540,
02479 0, 0, -540, 0, 0, 0, 0, 0, 0, -540,
02480 0, 0, -540, -540, -540, -540, -540, -540, -540, -540,
02481 -540, -540, -540, -540, 0, -540, -540, -540, 0, -540,
02482 -540, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02483 0, 0, 0, 0, 0, 0, 0, 0, 0, -540,
02484 0, 0, -540, -540, 0, -540, -540, 0, -540, -540,
02485 -540, -540, -540, -540, -540, -540, -540, 0, 0, 0,
02486 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02487 0, 0, 0, 0, 0, -540, -540, -540, 0, 0,
02488 0, 0, 0, -541, -541, -541, 0, -541, 0, -540,
02489 0, -541, -541, 0, 0, -540, -541, 0, -541, -541,
02490 -541, -541, -541, -541, -541, 0, -541, 0, 0, 0,
02491 -541, -541, -541, -541, -541, -541, -541, 0, 0, -541,
02492 0, 0, 0, 0, 0, 0, -541, 0, 0, -541,
02493 -541, -541, -541, -541, -541, -541, -541, -541, -541, -541,
02494 -541, 0, -541, -541, -541, 0, -541, -541, 0, 0,
02495 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02496 0, 0, 0, 0, 0, 0, -541, 0, 0, -541,
02497 -541, 0, -541, -541, 0, -541, -541, -541, -541, -541,
02498 -541, -541, -541, -541, 0, 0, 0, 0, 0, 0,
02499 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02500 0, 0, -541, -541, -541, 0, 0, 0, 0, 0,
02501 -543, -543, -543, 0, -543, 0, -541, 0, -543, -543,
02502 0, 0, -541, -543, 0, -543, -543, -543, -543, -543,
02503 -543, -543, 0, 0, 0, 0, 0, -543, -543, -543,
02504 -543, -543, -543, -543, 0, 0, -543, 0, 0, 0,
02505 0, 0, 0, -543, 0, 0, -543, -543, -543, -543,
02506 -543, -543, -543, -543, -543, -543, -543, -543, 0, -543,
02507 -543, -543, 0, -543, -543, 0, 0, 0, 0, 0,
02508 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02509 0, 0, 0, -543, 710, 0, -543, -543, 0, -543,
02510 -543, 0, -543, -543, -543, -543, -543, -543, -543, -543,
02511 -543, 0, 0, 0, 0, 0, -99, 0, 0, 0,
02512 0, 0, 0, 0, -545, -545, -545, 0, -545, -543,
02513 -543, -543, -545, -545, 0, 0, 0, -545, 0, -545,
02514 -545, -545, -545, -545, -545, -545, 0, 0, 0, -543,
02515 0, -545, -545, -545, -545, -545, -545, -545, 0, 0,
02516 -545, 0, 0, 0, 0, 0, 0, -545, 0, 0,
02517 -545, -545, -545, -545, -545, -545, -545, -545, -545, -545,
02518 -545, -545, 0, -545, -545, -545, 0, -545, -545, 0,
02519 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02520 0, 0, 0, 0, 0, 0, 0, -545, 0, 0,
02521 -545, -545, 0, -545, -545, 0, -545, -545, -545, -545,
02522 -545, -545, -545, -545, -545, 0, 0, 0, 0, 0,
02523 0, 0, 0, 0, 0, 0, 0, 0, -546, -546,
02524 -546, 0, -546, -545, -545, -545, -546, -546, 0, 0,
02525 0, -546, 0, -546, -546, -546, -546, -546, -546, -546,
02526 0, 0, 0, -545, 0, -546, -546, -546, -546, -546,
02527 -546, -546, 0, 0, -546, 0, 0, 0, 0, 0,
02528 0, -546, 0, 0, -546, -546, -546, -546, -546, -546,
02529 -546, -546, -546, -546, -546, -546, 0, -546, -546, -546,
02530 0, -546, -546, 0, 0, 0, 0, 0, 0, 0,
02531 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02532 0, -546, 0, 0, -546, -546, 0, -546, -546, 0,
02533 -546, -546, -546, -546, -546, -546, -546, -546, -546, 0,
02534 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02535 0, 0, 0, 0, 0, 0, 0, -546, -546, -546,
02536 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02537 0, 0, 0, 0, 0, 0, 0, -546, 111, 112,
02538 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
02539 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
02540 133, 134, 0, 0, 0, 135, 136, 137, 138, 139,
02541 140, 141, 142, 143, 144, 0, 0, 0, 0, 0,
02542 145, 146, 147, 148, 149, 150, 151, 152, 153, 266,
02543 267, 154, 268, 0, 0, 0, 0, 0, 0, 0,
02544 0, 155, 156, 157, 158, 159, 160, 161, 162, 163,
02545 0, 0, 164, 165, 0, 0, 166, 167, 168, 169,
02546 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02547 170, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02548 0, 0, 0, 0, 0, 0, 0, 171, 172, 173,
02549 174, 175, 176, 177, 178, 179, 180, 0, 181, 182,
02550 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02551 0, 0, 0, 0, 0, 0, 183, 111, 112, 113,
02552 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
02553 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
02554 134, 0, 0, 0, 135, 136, 137, 138, 139, 140,
02555 141, 142, 143, 144, 0, 0, 0, 0, 0, 145,
02556 146, 147, 148, 149, 150, 151, 152, 153, 223, 0,
02557 154, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02558 155, 156, 157, 158, 159, 160, 161, 162, 163, 0,
02559 0, 164, 165, 0, 0, 166, 167, 168, 169, 0,
02560 0, 0, 0, 0, 0, 0, 0, 0, 0, 170,
02561 0, 0, 55, 0, 0, 0, 0, 0, 0, 0,
02562 0, 0, 0, 0, 0, 0, 171, 172, 173, 174,
02563 175, 176, 177, 178, 179, 180, 0, 181, 182, 0,
02564 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02565 0, 0, 0, 0, 0, 183, 111, 112, 113, 114,
02566 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
02567 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
02568 0, 0, 0, 135, 136, 137, 138, 139, 140, 141,
02569 142, 143, 144, 0, 0, 0, 0, 0, 145, 146,
02570 147, 148, 149, 150, 151, 152, 153, 0, 0, 154,
02571 0, 0, 0, 0, 0, 0, 0, 0, 0, 155,
02572 156, 157, 158, 159, 160, 161, 162, 163, 0, 0,
02573 164, 165, 0, 0, 166, 167, 168, 169, 0, 0,
02574 0, 0, 0, 0, 0, 0, 0, 0, 170, 0,
02575 0, 55, 0, 0, 0, 0, 0, 0, 0, 0,
02576 0, 0, 0, 0, 0, 171, 172, 173, 174, 175,
02577 176, 177, 178, 179, 180, 0, 181, 182, 0, 0,
02578 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02579 0, 0, 0, 0, 183, 111, 112, 113, 114, 115,
02580 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
02581 126, 127, 128, 129, 130, 131, 132, 133, 134, 0,
02582 0, 0, 135, 136, 137, 138, 139, 140, 141, 142,
02583 143, 144, 0, 0, 0, 0, 0, 145, 146, 147,
02584 148, 149, 150, 151, 152, 153, 0, 0, 154, 0,
02585 0, 0, 0, 0, 0, 0, 0, 0, 155, 156,
02586 157, 158, 159, 160, 161, 162, 163, 0, 0, 164,
02587 165, 0, 0, 166, 167, 168, 169, 0, 0, 0,
02588 0, 0, 0, 0, 0, 0, 0, 170, 0, 0,
02589 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02590 0, 0, 0, 0, 171, 172, 173, 174, 175, 176,
02591 177, 178, 179, 180, 0, 181, 182, 0, 0, 5,
02592 6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
02593 0, 0, 12, 183, 13, 14, 15, 228, 229, 18,
02594 19, 0, 0, 0, 0, 0, 230, 231, 232, 23,
02595 24, 25, 26, 0, 0, 192, 0, 0, 0, 0,
02596 0, 0, 255, 0, 0, 32, 33, 34, 35, 36,
02597 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02598 45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02599 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02600 0, 0, 256, 0, 0, 195, 50, 0, 51, 52,
02601 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02602 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02603 0, 5, 6, 7, 0, 9, 0, 0, 257, 10,
02604 11, 0, 0, 0, 12, 0, 13, 14, 15, 228,
02605 229, 18, 19, 0, 0, 0, 258, 0, 230, 231,
02606 232, 23, 24, 25, 26, 0, 0, 192, 0, 0,
02607 0, 0, 0, 0, 255, 0, 0, 32, 33, 34,
02608 35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
02609 43, 44, 45, 0, 0, 0, 0, 0, 0, 0,
02610 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02611 0, 0, 0, 0, 256, 0, 0, 195, 50, 0,
02612 51, 52, 0, 0, 0, 54, 55, 56, 57, 58,
02613 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02614 0, 0, 0, 5, 6, 7, 8, 9, 0, 0,
02615 257, 10, 11, 0, 0, 0, 12, 0, 13, 14,
02616 15, 16, 17, 18, 19, 0, 0, 0, 482, 0,
02617 20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
02618 0, 0, 0, 0, 0, 28, 29, 30, 31, 32,
02619 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
02620 42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
02621 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02622 0, 0, 0, 0, 0, 0, 48, 0, 0, 49,
02623 50, 0, 51, 52, 0, 53, 0, 54, 55, 56,
02624 57, 58, 59, 60, 0, 0, 0, 0, 0, 0,
02625 0, 0, 5, 6, 7, 8, 9, 0, 0, 0,
02626 10, 11, 61, 62, 63, 12, 0, 13, 14, 15,
02627 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
02628 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
02629 0, 0, 0, 0, 28, 29, 0, 31, 32, 33,
02630 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02631 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02632 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02633 0, 0, 0, 0, 0, 48, 0, 0, 49, 50,
02634 0, 51, 52, 0, 53, 0, 54, 55, 56, 57,
02635 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02636 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
02637 11, 61, 62, 63, 12, 0, 13, 14, 15, 16,
02638 17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
02639 22, 23, 24, 25, 26, 0, 0, 192, 0, 0,
02640 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
02641 35, 36, 37, 38, 39, 40, 193, 41, 42, 0,
02642 43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
02643 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02644 0, 0, 0, 0, 194, 0, 0, 195, 50, 0,
02645 51, 52, 0, 196, 197, 54, 55, 56, 57, 58,
02646 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02647 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
02648 61, 198, 63, 12, 0, 13, 14, 15, 228, 229,
02649 18, 19, 0, 0, 0, 0, 0, 230, 231, 232,
02650 23, 24, 25, 26, 0, 0, 192, 0, 0, 0,
02651 0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
02652 36, 37, 38, 39, 40, 193, 41, 42, 0, 43,
02653 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02654 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02655 0, 0, 0, 194, 0, 0, 195, 50, 0, 51,
02656 52, 0, 577, 197, 54, 55, 56, 57, 58, 59,
02657 60, 0, 0, 0, 0, 0, 0, 0, 0, 5,
02658 6, 7, 0, 9, 0, 0, 0, 10, 11, 61,
02659 198, 63, 12, 0, 13, 14, 15, 228, 229, 18,
02660 19, 0, 0, 0, 0, 0, 230, 231, 232, 23,
02661 24, 25, 26, 0, 0, 192, 0, 0, 0, 0,
02662 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
02663 37, 38, 39, 40, 193, 41, 42, 0, 43, 44,
02664 45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
02665 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02666 0, 0, 194, 0, 0, 195, 50, 0, 51, 52,
02667 0, 196, 0, 54, 55, 56, 57, 58, 59, 60,
02668 0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
02669 7, 0, 9, 0, 0, 0, 10, 11, 61, 198,
02670 63, 12, 0, 13, 14, 15, 228, 229, 18, 19,
02671 0, 0, 0, 0, 0, 230, 231, 232, 23, 24,
02672 25, 26, 0, 0, 192, 0, 0, 0, 0, 0,
02673 0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
02674 38, 39, 40, 193, 41, 42, 0, 43, 44, 45,
02675 0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
02676 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02677 0, 194, 0, 0, 195, 50, 0, 51, 52, 0,
02678 0, 197, 54, 55, 56, 57, 58, 59, 60, 0,
02679 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02680 0, 9, 0, 0, 0, 10, 11, 61, 198, 63,
02681 12, 0, 13, 14, 15, 228, 229, 18, 19, 0,
02682 0, 0, 0, 0, 230, 231, 232, 23, 24, 25,
02683 26, 0, 0, 192, 0, 0, 0, 0, 0, 0,
02684 29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02685 39, 40, 193, 41, 42, 0, 43, 44, 45, 0,
02686 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02687 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02688 194, 0, 0, 195, 50, 0, 51, 52, 0, 577,
02689 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02690 0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
02691 9, 0, 0, 0, 10, 11, 61, 198, 63, 12,
02692 0, 13, 14, 15, 228, 229, 18, 19, 0, 0,
02693 0, 0, 0, 230, 231, 232, 23, 24, 25, 26,
02694 0, 0, 192, 0, 0, 0, 0, 0, 0, 29,
02695 0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
02696 40, 193, 41, 42, 0, 43, 44, 45, 0, 46,
02697 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02698 0, 0, 0, 0, 0, 0, 0, 0, 0, 194,
02699 0, 0, 195, 50, 0, 51, 52, 0, 0, 0,
02700 54, 55, 56, 57, 58, 59, 60, 0, 0, 0,
02701 0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
02702 0, 0, 0, 10, 11, 61, 198, 63, 12, 0,
02703 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02704 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02705 0, 192, 0, 0, 0, 0, 0, 0, 29, 0,
02706 0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02707 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02708 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02709 0, 0, 0, 0, 0, 0, 0, 0, 194, 0,
02710 0, 195, 50, 0, 51, 52, 0, 476, 0, 54,
02711 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02712 0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
02713 0, 0, 10, 11, 61, 198, 63, 12, 0, 13,
02714 14, 15, 228, 229, 18, 19, 0, 0, 0, 0,
02715 0, 230, 231, 232, 23, 24, 25, 26, 0, 0,
02716 192, 0, 0, 0, 0, 0, 0, 29, 0, 0,
02717 32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
02718 41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
02719 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02720 0, 0, 0, 0, 0, 0, 0, 194, 0, 0,
02721 195, 50, 0, 51, 52, 0, 196, 0, 54, 55,
02722 56, 57, 58, 59, 60, 0, 0, 0, 0, 0,
02723 0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
02724 0, 10, 11, 61, 198, 63, 12, 0, 13, 14,
02725 15, 228, 229, 18, 19, 0, 0, 0, 0, 0,
02726 230, 231, 232, 23, 24, 25, 26, 0, 0, 192,
02727 0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
02728 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
02729 42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
02730 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02731 0, 0, 0, 0, 0, 0, 194, 0, 0, 195,
02732 50, 0, 51, 52, 0, 758, 0, 54, 55, 56,
02733 57, 58, 59, 60, 0, 0, 0, 0, 0, 0,
02734 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02735 10, 11, 61, 198, 63, 12, 0, 13, 14, 15,
02736 228, 229, 18, 19, 0, 0, 0, 0, 0, 230,
02737 231, 232, 23, 24, 25, 26, 0, 0, 192, 0,
02738 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02739 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02740 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02741 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02742 0, 0, 0, 0, 0, 194, 0, 0, 195, 50,
02743 0, 51, 52, 0, 476, 0, 54, 55, 56, 57,
02744 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02745 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
02746 11, 61, 198, 63, 12, 0, 13, 14, 15, 228,
02747 229, 18, 19, 0, 0, 0, 0, 0, 230, 231,
02748 232, 23, 24, 25, 26, 0, 0, 192, 0, 0,
02749 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
02750 35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
02751 43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
02752 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02753 0, 0, 0, 0, 194, 0, 0, 195, 50, 0,
02754 51, 52, 0, 577, 0, 54, 55, 56, 57, 58,
02755 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02756 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
02757 61, 198, 63, 12, 0, 13, 14, 15, 228, 229,
02758 18, 19, 0, 0, 0, 0, 0, 230, 231, 232,
02759 23, 24, 25, 26, 0, 0, 192, 0, 0, 0,
02760 0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
02761 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02762 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02763 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02764 0, 0, 0, 194, 0, 0, 195, 50, 0, 51,
02765 52, 0, 0, 0, 54, 55, 56, 57, 58, 59,
02766 60, 0, 0, 0, 0, 0, 0, 0, 0, 5,
02767 6, 7, 0, 9, 0, 0, 0, 10, 11, 61,
02768 198, 63, 12, 0, 13, 14, 15, 16, 17, 18,
02769 19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
02770 24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
02771 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
02772 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02773 45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
02774 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02775 0, 0, 194, 0, 0, 195, 50, 0, 51, 52,
02776 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02777 0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
02778 7, 0, 9, 0, 0, 0, 10, 11, 61, 62,
02779 63, 12, 0, 13, 14, 15, 16, 17, 18, 19,
02780 0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
02781 25, 26, 0, 0, 192, 0, 0, 0, 0, 0,
02782 0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
02783 38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
02784 0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
02785 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02786 0, 194, 0, 0, 195, 50, 0, 51, 52, 0,
02787 0, 0, 54, 55, 56, 57, 58, 59, 60, 0,
02788 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02789 0, 9, 0, 0, 0, 10, 11, 61, 198, 63,
02790 12, 0, 13, 14, 15, 228, 229, 18, 19, 0,
02791 0, 0, 0, 0, 230, 231, 232, 23, 24, 25,
02792 26, 0, 0, 192, 0, 0, 0, 0, 0, 0,
02793 255, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02794 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02795 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02796 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02797 256, 0, 0, 300, 50, 0, 51, 52, 0, 301,
02798 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02799 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02800 10, 11, 0, 0, 0, 12, 257, 13, 14, 15,
02801 228, 229, 18, 19, 0, 0, 0, 0, 0, 230,
02802 231, 232, 23, 24, 25, 26, 0, 0, 192, 0,
02803 0, 0, 0, 0, 0, 255, 0, 0, 32, 33,
02804 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02805 0, 43, 44, 45, 0, 0, 0, 0, 0, 0,
02806 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02807 0, 0, 0, 0, 0, 342, 0, 0, 49, 50,
02808 0, 51, 52, 0, 53, 0, 54, 55, 56, 57,
02809 58, 59, 60, 0, 0, 0, 0, 5, 6, 7,
02810 0, 9, 0, 0, 0, 10, 11, 0, 0, 0,
02811 12, 257, 13, 14, 15, 228, 229, 18, 19, 0,
02812 0, 0, 0, 0, 230, 231, 232, 23, 24, 25,
02813 26, 0, 0, 192, 0, 0, 0, 0, 0, 0,
02814 255, 0, 0, 32, 33, 34, 349, 36, 37, 38,
02815 350, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02816 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02817 0, 0, 0, 0, 0, 0, 0, 351, 0, 0,
02818 352, 0, 0, 195, 50, 0, 51, 52, 0, 0,
02819 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02820 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02821 10, 11, 0, 0, 0, 12, 257, 13, 14, 15,
02822 228, 229, 18, 19, 0, 0, 0, 0, 0, 230,
02823 231, 232, 23, 24, 25, 26, 0, 0, 192, 0,
02824 0, 0, 0, 0, 0, 255, 0, 0, 32, 33,
02825 34, 349, 36, 37, 38, 350, 40, 0, 41, 42,
02826 0, 43, 44, 45, 0, 0, 0, 0, 0, 0,
02827 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02828 0, 0, 0, 0, 0, 352, 0, 0, 195, 50,
02829 0, 51, 52, 0, 0, 0, 54, 55, 56, 57,
02830 58, 59, 60, 0, 0, 0, 0, 5, 6, 7,
02831 0, 9, 0, 0, 0, 10, 11, 0, 0, 0,
02832 12, 257, 13, 14, 15, 228, 229, 18, 19, 0,
02833 0, 0, 0, 0, 230, 231, 232, 23, 24, 25,
02834 26, 0, 0, 192, 0, 0, 0, 0, 0, 0,
02835 255, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02836 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02837 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02838 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02839 256, 0, 0, 300, 50, 0, 51, 52, 0, 0,
02840 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02841 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02842 10, 11, 0, 0, 0, 12, 257, 13, 14, 15,
02843 228, 229, 18, 19, 0, 0, 0, 0, 0, 230,
02844 231, 232, 23, 24, 25, 26, 0, 0, 192, 0,
02845 0, 0, 0, 0, 0, 255, 0, 0, 32, 33,
02846 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02847 0, 43, 44, 45, 0, 0, 0, 0, 0, 0,
02848 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02849 0, 0, 0, 0, 0, 887, 0, 0, 195, 50,
02850 0, 51, 52, 0, 0, 0, 54, 55, 56, 57,
02851 58, 59, 60, 0, 0, 0, 0, 5, 6, 7,
02852 0, 9, 0, 0, 0, 10, 11, 0, 0, 0,
02853 12, 257, 13, 14, 15, 228, 229, 18, 19, 0,
02854 0, 0, 0, 0, 230, 231, 232, 23, 24, 25,
02855 26, 0, 0, 192, 0, 0, 0, 0, 0, 0,
02856 255, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02857 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02858 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02859 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02860 897, 0, 0, 195, 50, 0, 51, 52, 0, 0,
02861 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02862 0, 0, 0, 584, 524, 0, 0, 585, 0, 0,
02863 0, 0, 0, 0, 0, 0, 257, 155, 156, 157,
02864 158, 159, 160, 161, 162, 163, 0, 0, 164, 165,
02865 0, 0, 166, 167, 168, 169, 0, 0, 0, 0,
02866 0, 0, 0, 0, 0, 0, 170, 0, 0, 0,
02867 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02868 0, 0, 0, 171, 172, 173, 174, 175, 176, 177,
02869 178, 179, 180, 0, 181, 182, 0, 0, 0, 0,
02870 605, 516, 0, 0, 606, 0, 0, 0, 0, 0,
02871 0, 0, 183, 217, 155, 156, 157, 158, 159, 160,
02872 161, 162, 163, 0, 0, 164, 165, 0, 0, 166,
02873 167, 168, 169, 0, 0, 0, 0, 0, 0, 0,
02874 0, 0, 0, 170, 0, 0, 0, 0, 0, 0,
02875 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02876 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
02877 0, 181, 182, 0, 0, 0, 0, 608, 524, 0,
02878 0, 609, 0, 0, 0, 0, 0, 0, 0, 183,
02879 217, 155, 156, 157, 158, 159, 160, 161, 162, 163,
02880 0, 0, 164, 165, 0, 0, 166, 167, 168, 169,
02881 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02882 170, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02883 0, 0, 0, 0, 0, 0, 0, 171, 172, 173,
02884 174, 175, 176, 177, 178, 179, 180, 0, 181, 182,
02885 0, 0, 0, 0, 679, 516, 0, 0, 680, 0,
02886 0, 0, 0, 0, 0, 0, 183, 217, 155, 156,
02887 157, 158, 159, 160, 161, 162, 163, 0, 0, 164,
02888 165, 0, 0, 166, 167, 168, 169, 0, 0, 0,
02889 0, 0, 0, 0, 0, 0, 0, 170, 0, 0,
02890 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02891 0, 0, 0, 0, 171, 172, 173, 174, 175, 176,
02892 177, 178, 179, 180, 0, 181, 182, 0, 0, 0,
02893 0, 682, 524, 0, 0, 683, 0, 0, 0, 0,
02894 0, 0, 0, 183, 217, 155, 156, 157, 158, 159,
02895 160, 161, 162, 163, 0, 0, 164, 165, 0, 0,
02896 166, 167, 168, 169, 0, 0, 0, 0, 0, 0,
02897 0, 0, 0, 0, 170, 0, 0, 0, 0, 0,
02898 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02899 0, 171, 172, 173, 174, 175, 176, 177, 178, 179,
02900 180, 0, 181, 182, 0, 0, 0, 0, 689, 516,
02901 0, 0, 690, 0, 0, 0, 0, 0, 0, 0,
02902 183, 217, 155, 156, 157, 158, 159, 160, 161, 162,
02903 163, 0, 0, 164, 165, 0, 0, 166, 167, 168,
02904 169, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02905 0, 170, 0, 0, 0, 0, 0, 0, 0, 0,
02906 0, 0, 0, 0, 0, 0, 0, 0, 171, 172,
02907 173, 174, 175, 176, 177, 178, 179, 180, 0, 181,
02908 182, 0, 0, 0, 0, 562, 524, 0, 0, 563,
02909 0, 0, 0, 0, 0, 0, 0, 183, 217, 155,
02910 156, 157, 158, 159, 160, 161, 162, 163, 0, 0,
02911 164, 165, 0, 0, 166, 167, 168, 169, 0, 0,
02912 0, 0, 0, 0, 0, 0, 0, 0, 170, 0,
02913 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02914 0, 0, 0, 0, 0, 171, 172, 173, 174, 175,
02915 176, 177, 178, 179, 180, 0, 181, 182, 0, 0,
02916 0, 0, 949, 516, 0, 0, 950, 0, 0, 0,
02917 0, 0, 0, 0, 183, 217, 155, 156, 157, 158,
02918 159, 160, 161, 162, 163, 0, 0, 164, 165, 0,
02919 0, 166, 167, 168, 169, 0, 0, 0, 0, 0,
02920 0, 0, 0, 0, 0, 170, 0, 0, 0, 0,
02921 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02922 0, 0, 171, 172, 173, 174, 175, 176, 177, 178,
02923 179, 180, 0, 181, 182, 0, 0, 0, 0, 955,
02924 516, 0, 0, 956, 0, 0, 0, 0, 0, 0,
02925 0, 183, 217, 155, 156, 157, 158, 159, 160, 161,
02926 162, 163, 0, 0, 164, 165, 0, 0, 166, 167,
02927 168, 169, 0, 0, 0, 0, 0, 0, 0, 0,
02928 0, 0, 170, 0, 0, 0, 0, 0, 0, 0,
02929 0, 0, 0, 0, 0, 0, 0, 0, 0, 171,
02930 172, 173, 174, 175, 176, 177, 178, 179, 180, 0,
02931 181, 182, 0, 0, 0, 0, 958, 524, 0, 0,
02932 959, 0, 0, 0, 0, 0, 0, 0, 183, 217,
02933 155, 156, 157, 158, 159, 160, 161, 162, 163, 0,
02934 0, 164, 165, 0, 0, 166, 167, 168, 169, 0,
02935 0, 0, 0, 0, 0, 0, 0, 0, 0, 170,
02936 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02937 0, 0, 0, 0, 0, 0, 171, 172, 173, 174,
02938 175, 176, 177, 178, 179, 180, 0, 181, 182, 0,
02939 0, 0, 0, 562, 524, 0, 0, 563, 0, 0,
02940 0, 0, 0, 0, 0, 183, 217, 155, 156, 157,
02941 158, 159, 160, 161, 162, 163, 0, 0, 164, 165,
02942 0, 0, 166, 167, 168, 169, 0, 0, 0, 0,
02943 0, 0, 0, 0, 0, 0, 170, 0, 0, 0,
02944 0, 0, 0, 0, 705, 0, 0, 0, 0, 0,
02945 0, 0, 0, 171, 172, 173, 174, 175, 176, 177,
02946 178, 179, 180, 650, 181, 182, 0, 0, 304, 305,
02947 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
02948 316, 0, 183, 317, 318, 0, 0, 304, 305, 306,
02949 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
02950 0, 0, 317, 318, 0, 0, 0, 0, 0, 0,
02951 319, 0, 320, 321, 322, 323, 324, 325, 326, 327,
02952 328, 329, 0, 0, 0, 0, 0, 0, 0, 319,
02953 0, 320, 321, 322, 323, 324, 325, 326, 327, 328,
02954 329
02955 };
02956
02957 static const yytype_int16 yycheck[] =
02958 {
02959 2, 16, 17, 55, 2, 20, 4, 51, 28, 75,
02960 51, 52, 446, 336, 210, 8, 49, 537, 16, 17,
02961 303, 8, 20, 27, 536, 29, 556, 53, 83, 583,
02962 446, 86, 249, 331, 65, 28, 253, 4, 90, 442,
02963 8, 28, 748, 272, 13, 274, 352, 276, 49, 51,
02964 52, 49, 50, 607, 86, 53, 735, 667, 813, 836,
02965 28, 671, 641, 811, 62, 732, 615, 1, 22, 27,
02966 16, 17, 29, 50, 20, 25, 330, 75, 332, 482,
02967 53, 566, 567, 62, 82, 83, 26, 55, 86, 87,
02968 88, 89, 728, 13, 13, 61, 394, 25, 22, 13,
02969 61, 85, 75, 239, 76, 82, 83, 37, 38, 86,
02970 140, 398, 390, 749, 87, 88, 89, 147, 372, 373,
02971 398, 85, 90, 871, 558, 87, 85, 681, 65, 109,
02972 15, 13, 17, 0, 25, 25, 147, 13, 692, 393,
02973 106, 395, 114, 104, 105, 432, 444, 109, 925, 86,
02974 107, 25, 56, 732, 108, 139, 735, 25, 688, 914,
02975 140, 2, 195, 4, 300, 419, 696, 834, 916, 25,
02976 140, 140, 25, 722, 723, 139, 145, 147, 147, 113,
02977 139, 59, 60, 889, 108, 146, 620, 145, 85, 147,
02978 140, 445, 258, 655, 227, 943, 136, 195, 877, 214,
02979 662, 216, 217, 205, 620, 136, 239, 641, 210, 241,
02980 241, 145, 140, 147, 881, 217, 214, 147, 216, 217,
02981 146, 706, 220, 142, 222, 145, 145, 147, 147, 227,
02982 459, 145, 26, 147, 289, 290, 291, 292, 239, 146,
02983 238, 239, 139, 220, 542, 222, 649, 553, 858, 140,
02984 140, 255, 142, 25, 298, 834, 554, 836, 28, 303,
02985 258, 695, 811, 145, 813, 147, 140, 300, 214, 145,
02986 216, 147, 140, 99, 142, 301, 109, 26, 232, 695,
02987 792, 235, 337, 338, 140, 258, 25, 140, 87, 543,
02988 288, 289, 290, 291, 292, 293, 294, 295, 877, 300,
02989 298, 555, 300, 301, 241, 303, 142, 339, 220, 85,
02990 109, 147, 289, 290, 291, 292, 331, 294, 295, 298,
02991 140, 288, 871, 872, 303, 37, 38, 26, 301, 331,
02992 860, 243, 145, 331, 147, 333, 85, 109, 858, 337,
02993 338, 140, 136, 109, 85, 87, 925, 26, 142, 390,
02994 87, 85, 140, 351, 677, 87, 85, 142, 85, 56,
02995 337, 338, 330, 139, 26, 914, 109, 916, 140, 87,
02996 109, 143, 109, 88, 351, 147, 442, 109, 332, 394,
02997 378, 379, 912, 666, 580, 602, 85, 136, 429, 138,
02998 139, 109, 394, 413, 943, 85, 394, 238, 139, 378,
02999 379, 140, 339, 957, 143, 139, 85, 85, 147, 138,
03000 139, 138, 139, 142, 416, 52, 482, 354, 416, 56,
03001 413, 140, 140, 85, 87, 393, 413, 425, 85, 444,
03002 140, 865, 85, 85, 59, 60, 85, 136, 142, 138,
03003 139, 395, 444, 142, 442, 413, 444, 288, 138, 139,
03004 418, 136, 293, 142, 85, 14, 15, 136, 85, 138,
03005 139, 139, 85, 142, 68, 419, 564, 565, 85, 442,
03006 142, 85, 143, 475, 136, 443, 138, 139, 85, 109,
03007 142, 138, 139, 144, 482, 138, 139, 139, 400, 138,
03008 139, 445, 404, 137, 538, 407, 85, 87, 56, 532,
03009 504, 534, 52, 106, 54, 55, 56, 57, 139, 482,
03010 422, 138, 139, 106, 85, 427, 139, 85, 522, 109,
03011 641, 138, 139, 846, 138, 139, 528, 542, 530, 852,
03012 140, 138, 139, 87, 532, 87, 534, 603, 87, 554,
03013 542, 68, 68, 52, 542, 54, 55, 56, 57, 138,
03014 139, 17, 554, 140, 574, 109, 554, 109, 556, 557,
03015 109, 145, 564, 565, 566, 567, 520, 138, 139, 481,
03016 138, 139, 56, 541, 528, 416, 61, 94, 580, 583,
03017 557, 574, 68, 649, 425, 553, 140, 574, 140, 543,
03018 140, 140, 52, 25, 592, 597, 520, 143, 535, 536,
03019 137, 555, 140, 607, 528, 603, 574, 140, 140, 642,
03020 564, 565, 549, 61, 735, 592, 87, 738, 146, 104,
03021 105, 106, 666, 87, 626, 87, 628, 140, 630, 684,
03022 603, 140, 687, 119, 120, 121, 140, 935, 109, 641,
03023 564, 565, 596, 597, 642, 109, 698, 109, 61, 10,
03024 68, 649, 8, 54, 652, 653, 104, 105, 106, 13,
03025 658, 659, 63, 64, 666, 667, 109, 669, 61, 671,
03026 703, 704, 137, 652, 653, 52, 649, 681, 140, 658,
03027 659, 61, 936, 140, 140, 65, 684, 140, 692, 687,
03028 688, 104, 105, 106, 52, 140, 729, 730, 696, 117,
03029 118, 119, 120, 121, 706, 703, 704, 684, 741, 111,
03030 687, 104, 105, 106, 144, 836, 15, 838, 52, 140,
03031 54, 55, 56, 57, 104, 105, 728, 782, 145, 114,
03032 698, 729, 730, 193, 109, 140, 196, 197, 40, 41,
03033 42, 43, 44, 741, 140, 140, 779, 749, 685, 751,
03034 10, 753, 754, 786, 787, 89, 877, 790, 879, 140,
03035 697, 95, 883, 88, 16, 17, 9, 137, 20, 10,
03036 10, 769, 140, 806, 137, 777, 54, 55, 780, 57,
03037 140, 779, 694, 140, 782, 63, 64, 140, 786, 787,
03038 769, 140, 790, 137, 46, 47, 114, 140, 140, 51,
03039 52, 137, 140, 715, 925, 782, 927, 56, 806, 930,
03040 62, 63, 140, 140, 726, 416, 849, 819, 820, 140,
03041 822, 56, 824, 825, 945, 140, 140, 140, 87, 827,
03042 142, 52, 142, 54, 55, 56, 57, 539, 298, 89,
03043 889, 938, 722, 303, 92, 937, 967, 845, 95, 57,
03044 -1, 849, 90, 865, 827, 792, 858, 794, 68, 834,
03045 732, 52, 860, 54, 55, 56, 57, -1, 89, 902,
03046 -1, 904, 845, 83, 84, 96, -1, 910, 52, -1,
03047 54, 55, 56, 57, -1, -1, -1, 799, -1, 891,
03048 892, 893, -1, 895, 896, 116, -1, 52, 810, 54,
03049 55, 56, 57, 815, 902, -1, 904, 117, 118, 119,
03050 120, 121, 910, -1, 912, 89, 918, 919, 920, 921,
03051 935, 95, -1, -1, -1, -1, -1, -1, -1, 389,
03052 390, -1, -1, 935, 89, 937, 938, 935, 398, -1,
03053 -1, 193, -1, -1, 196, 197, 198, -1, -1, 951,
03054 952, 953, 954, 957, -1, 923, 52, -1, 54, 55,
03055 56, 57, 214, 965, 216, 217, 934, -1, -1, 429,
03056 -1, 973, 432, -1, 676, 52, -1, 54, 55, 56,
03057 57, -1, 936, -1, -1, -1, -1, -1, -1, -1,
03058 -1, 693, -1, 89, -1, -1, -1, -1, -1, 95,
03059 96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03060 -1, -1, 89, -1, -1, -1, 476, -1, 95, 96,
03061 116, -1, -1, 119, -1, -1, -1, -1, -1, -1,
03062 -1, -1, -1, 2, -1, 4, -1, -1, -1, 116,
03063 -1, -1, 119, -1, -1, -1, 298, -1, -1, 145,
03064 -1, 303, 304, 305, 306, 307, 308, 309, 310, 311,
03065 312, 313, 314, 315, 316, 317, 318, 319, 320, 321,
03066 322, 323, 324, 325, 326, 327, 328, 329, 538, 331,
03067 49, 783, -1, 785, 53, 52, -1, 54, 55, 56,
03068 57, -1, -1, 795, -1, -1, -1, -1, 800, -1,
03069 -1, -1, -1, -1, -1, -1, 75, -1, -1, -1,
03070 -1, 2, -1, 4, -1, -1, -1, 577, 87, 88,
03071 89, 90, 89, -1, -1, -1, 378, 379, 95, 96,
03072 -1, -1, -1, -1, -1, -1, 388, 389, 390, -1,
03073 -1, -1, 394, -1, 396, 397, 398, -1, -1, 116,
03074 -1, -1, 119, 855, 856, -1, -1, -1, 49, 628,
03075 -1, 630, 53, 415, -1, -1, 68, 52, 420, 54,
03076 55, 56, 57, -1, -1, 142, -1, 429, -1, -1,
03077 432, 83, 84, 2, 75, 4, 646, -1, -1, -1,
03078 -1, -1, 444, -1, -1, -1, 87, 88, 89, -1,
03079 2, -1, 4, -1, 89, -1, 666, -1, -1, 911,
03080 95, 96, 464, 465, 116, 117, 118, 119, 120, 121,
03081 -1, -1, -1, -1, 476, -1, 195, -1, -1, -1,
03082 49, 116, -1, -1, 119, 0, -1, 939, -1, 941,
03083 -1, -1, -1, 8, 9, 10, -1, 49, 13, 14,
03084 15, 52, 17, 54, 55, 56, 57, 142, 227, -1,
03085 720, -1, 27, -1, -1, -1, -1, -1, 87, 238,
03086 239, -1, 37, 38, -1, 40, 41, 42, 43, 44,
03087 -1, -1, 751, -1, 753, 754, 538, -1, 89, 258,
03088 542, 68, -1, -1, 95, 96, -1, -1, 758, -1,
03089 -1, -1, 554, -1, 195, -1, 83, 84, -1, -1,
03090 -1, -1, -1, -1, -1, 116, -1, -1, 119, 288,
03091 85, -1, -1, -1, 293, 577, -1, -1, -1, 789,
03092 -1, 300, 301, -1, -1, -1, 227, 114, 115, 116,
03093 117, 118, 119, 120, 121, -1, -1, 238, 239, -1,
03094 819, 820, -1, 822, -1, 824, 825, -1, -1, -1,
03095 -1, -1, -1, -1, 333, -1, -1, 258, -1, -1,
03096 -1, -1, 137, -1, 139, -1, 195, 142, 143, -1,
03097 145, -1, 147, -1, -1, -1, -1, -1, -1, -1,
03098 -1, -1, -1, 195, 646, -1, -1, 288, 650, -1,
03099 652, 653, 293, -1, -1, -1, 658, 659, 227, 300,
03100 301, -1, -1, -1, 666, -1, -1, -1, -1, 238,
03101 239, -1, 891, 892, 893, 227, 895, 896, -1, -1,
03102 -1, -1, -1, -1, -1, -1, 238, 239, -1, -1,
03103 -1, -1, 333, -1, -1, -1, -1, 416, -1, 918,
03104 919, 920, 921, 705, -1, -1, 425, -1, 710, 711,
03105 -1, 713, 714, -1, -1, -1, -1, -1, 720, 288,
03106 -1, -1, -1, 442, 293, -1, -1, -1, -1, -1,
03107 -1, 300, 951, 952, 953, 954, 288, -1, -1, -1,
03108 -1, 293, -1, -1, -1, -1, 965, -1, 300, -1,
03109 -1, -1, -1, -1, 973, -1, 758, -1, -1, -1,
03110 762, -1, -1, 482, 333, -1, -1, 769, -1, -1,
03111 -1, -1, -1, -1, -1, 416, -1, -1, -1, -1,
03112 -1, 333, -1, -1, 425, -1, -1, 789, -1, -1,
03113 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03114 -1, 442, -1, -1, -1, 807, -1, -1, -1, -1,
03115 -1, -1, -1, 532, -1, 534, -1, -1, -1, -1,
03116 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03117 68, 69, 70, 71, 72, 73, 74, 556, -1, 77,
03118 78, 482, -1, -1, -1, 83, 84, 416, -1, -1,
03119 -1, -1, -1, -1, -1, -1, 425, -1, -1, -1,
03120 -1, -1, -1, -1, 416, -1, -1, -1, -1, -1,
03121 44, -1, -1, 425, 112, 113, 114, 115, 116, 117,
03122 118, 119, 120, 121, 603, -1, -1, -1, -1, -1,
03123 -1, 532, -1, 534, 68, 69, 70, 71, 72, 73,
03124 74, 75, 76, 77, 78, 79, 80, -1, -1, 83,
03125 84, -1, -1, -1, -1, 556, -1, -1, -1, -1,
03126 -1, -1, -1, 642, -1, -1, -1, -1, -1, -1,
03127 649, -1, -1, 935, -1, -1, 110, -1, 112, 113,
03128 114, 115, 116, 117, 118, 119, 120, 121, -1, -1,
03129 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03130 -1, -1, 603, 532, -1, 534, 140, -1, -1, 688,
03131 -1, -1, -1, -1, -1, -1, -1, 696, -1, -1,
03132 532, -1, 534, -1, 703, 704, -1, 556, -1, -1,
03133 -1, -1, -1, 634, -1, -1, -1, -1, -1, -1,
03134 -1, 642, -1, -1, 556, -1, -1, -1, 649, -1,
03135 729, 730, -1, -1, 52, 53, -1, -1, 56, -1,
03136 -1, -1, 741, -1, -1, -1, -1, -1, 66, 67,
03137 68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
03138 78, -1, -1, 81, 82, 83, 84, 688, -1, -1,
03139 -1, -1, -1, -1, -1, 696, -1, 95, -1, -1,
03140 779, -1, 703, 704, -1, -1, -1, 786, 787, -1,
03141 -1, 790, -1, 642, 112, 113, 114, 115, 116, 117,
03142 118, 119, 120, 121, -1, 123, 124, 806, 729, 730,
03143 642, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03144 741, -1, -1, 141, 142, -1, -1, -1, 827, -1,
03145 -1, -1, -1, -1, -1, -1, -1, -1, -1, 688,
03146 -1, -1, -1, -1, -1, -1, 845, 696, -1, -1,
03147 849, -1, -1, -1, 703, 704, 688, -1, 779, -1,
03148 -1, 860, -1, -1, 696, 786, 787, -1, -1, 790,
03149 -1, 703, 704, -1, -1, -1, -1, -1, -1, -1,
03150 729, 730, -1, -1, -1, 806, -1, -1, -1, -1,
03151 -1, -1, 741, -1, -1, -1, -1, 729, 730, -1,
03152 -1, -1, -1, 902, -1, 904, 827, -1, -1, 741,
03153 -1, 910, -1, 912, -1, -1, -1, 68, 69, 70,
03154 71, 72, 73, 74, 845, -1, 77, 78, 849, -1,
03155 779, -1, 83, 84, -1, -1, -1, 786, 787, 860,
03156 -1, 790, -1, 46, 47, -1, -1, 779, 51, 52,
03157 53, -1, -1, -1, 786, 787, -1, 806, 790, -1,
03158 63, 112, 113, 114, 115, 116, 117, 118, 119, 120,
03159 121, -1, 75, -1, 806, -1, -1, -1, -1, -1,
03160 -1, 902, -1, 904, 87, 88, 89, -1, -1, 910,
03161 -1, 912, -1, -1, -1, -1, 845, -1, -1, -1,
03162 849, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03163 -1, 860, -1, -1, -1, -1, -1, 849, -1, -1,
03164 -1, -1, -1, -1, -1, -1, -1, -1, 860, -1,
03165 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03166 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03167 -1, -1, -1, 902, -1, 904, -1, -1, -1, -1,
03168 -1, 910, -1, 912, -1, -1, -1, -1, -1, -1,
03169 902, -1, 904, -1, -1, -1, -1, -1, 910, -1,
03170 912, -1, 52, 53, -1, -1, 56, -1, -1, -1,
03171 193, -1, -1, 196, 197, 198, 66, 67, 68, 69,
03172 70, 71, 72, 73, 74, -1, -1, 77, 78, -1,
03173 -1, 81, 82, 83, 84, -1, -1, 68, 69, 70,
03174 71, 72, 73, 74, 75, 95, 77, 78, -1, -1,
03175 -1, -1, 83, 84, -1, -1, -1, -1, -1, -1,
03176 -1, -1, 112, 113, 114, 115, 116, 117, 118, 119,
03177 120, 121, -1, 123, 124, 258, -1, -1, -1, -1,
03178 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
03179 121, 141, 142, -1, -1, -1, -1, -1, -1, -1,
03180 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
03181 74, 75, 76, 77, 78, 79, 80, -1, 301, 83,
03182 84, 304, 305, 306, 307, 308, 309, 310, 311, 312,
03183 313, 314, 315, 316, 317, 318, 319, 320, 321, 322,
03184 323, 324, 325, 326, 327, 328, 329, -1, 112, 113,
03185 114, 115, 116, 117, 118, 119, 120, 121, 52, 53,
03186 -1, -1, 56, -1, -1, -1, -1, -1, -1, -1,
03187 -1, -1, 66, 67, 68, 69, 70, 71, 72, 73,
03188 74, -1, -1, 77, 78, -1, -1, 81, 82, 83,
03189 84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03190 -1, 95, -1, -1, -1, 388, 389, 390, -1, -1,
03191 -1, -1, -1, 396, 397, 398, -1, -1, 112, 113,
03192 114, 115, 116, 117, 118, 119, 120, 121, -1, 123,
03193 124, -1, 415, -1, -1, -1, -1, 420, -1, -1,
03194 -1, -1, -1, -1, -1, -1, 429, 141, 142, 432,
03195 -1, -1, -1, -1, -1, -1, -1, -1, -1, 442,
03196 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03197 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03198 -1, 464, 465, -1, 0, 1, -1, 3, 4, 5,
03199 6, 7, -1, 476, -1, 11, 12, -1, -1, 482,
03200 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03201 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03202 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03203 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
03204 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03205 66, 67, -1, -1, -1, 538, -1, -1, -1, -1,
03206 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03207 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03208 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03209 -1, -1, -1, -1, 577, -1, -1, -1, -1, -1,
03210 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1,
03211 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03212 603, -1, -1, -1, -1, -1, -1, -1, -1, 145,
03213 -1, 147, -1, -1, -1, -1, -1, -1, -1, -1,
03214 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03215 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03216 -1, -1, -1, 646, -1, -1, 649, 650, -1, -1,
03217 -1, 0, -1, -1, -1, -1, -1, -1, -1, 8,
03218 9, 10, -1, 666, 13, 14, 15, -1, 17, -1,
03219 -1, -1, -1, -1, -1, -1, -1, -1, 27, 28,
03220 29, -1, -1, -1, -1, -1, -1, -1, 37, 38,
03221 -1, 40, 41, 42, 43, 44, -1, -1, -1, -1,
03222 -1, -1, 705, -1, -1, -1, -1, 710, 711, -1,
03223 713, 714, -1, -1, -1, -1, -1, 720, -1, 68,
03224 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
03225 79, 80, -1, -1, 83, 84, 85, -1, 87, 88,
03226 -1, -1, -1, -1, -1, 94, -1, -1, -1, -1,
03227 -1, -1, -1, -1, -1, 758, -1, -1, 107, 762,
03228 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
03229 119, 120, 121, -1, -1, -1, -1, -1, -1, -1,
03230 -1, -1, -1, -1, -1, -1, 789, -1, 137, 138,
03231 139, 140, 0, -1, 143, 144, 145, -1, 147, -1,
03232 8, 9, 10, -1, 807, 13, 14, 15, -1, 17,
03233 -1, -1, -1, -1, -1, -1, -1, -1, 26, 27,
03234 28, -1, -1, -1, 827, -1, -1, -1, -1, 37,
03235 38, -1, 40, 41, 42, 43, 44, -1, -1, -1,
03236 -1, -1, 845, 68, 69, 70, 71, 72, 73, 74,
03237 75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
03238 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
03239 78, 79, 80, -1, -1, 83, 84, 85, -1, -1,
03240 88, -1, -1, -1, -1, 110, 94, 112, 113, 114,
03241 115, 116, 117, 118, 119, 120, 121, -1, -1, -1,
03242 -1, -1, 110, -1, 112, 113, 114, 115, 116, 117,
03243 118, 119, 120, 121, -1, -1, -1, -1, -1, -1,
03244 -1, -1, 147, -1, -1, -1, -1, -1, 136, 137,
03245 138, 139, 140, 0, 142, 143, 144, 145, -1, 147,
03246 -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
03247 17, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03248 27, 28, 29, -1, -1, -1, -1, -1, -1, -1,
03249 37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
03250 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
03251 74, 75, 76, 77, 78, 79, 80, -1, -1, 83,
03252 84, 68, 69, 70, 71, 72, 73, 74, 75, 76,
03253 77, 78, 79, 80, -1, -1, 83, 84, 85, -1,
03254 -1, 88, -1, -1, -1, -1, 110, 94, 112, 113,
03255 114, 115, 116, 117, 118, 119, 120, 121, -1, -1,
03256 107, -1, -1, 110, 111, 112, 113, 114, 115, 116,
03257 117, 118, 119, 120, 121, -1, -1, -1, -1, -1,
03258 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03259 137, 138, 139, 140, 0, -1, 143, 144, 145, -1,
03260 147, -1, 8, 9, 10, -1, -1, 13, 14, 15,
03261 -1, 17, -1, -1, -1, -1, -1, -1, -1, -1,
03262 26, 27, 28, -1, -1, -1, -1, -1, -1, -1,
03263 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1,
03264 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03265 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03266 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
03267 76, 77, 78, 79, 80, -1, -1, 83, 84, 85,
03268 -1, -1, 88, -1, -1, -1, -1, -1, 94, -1,
03269 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03270 -1, -1, -1, -1, 110, -1, 112, 113, 114, 115,
03271 116, 117, 118, 119, 120, 121, -1, -1, -1, -1,
03272 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03273 136, 137, 138, 139, 140, 0, 142, 143, 144, 145,
03274 -1, 147, -1, 8, 9, 10, -1, -1, 13, 14,
03275 15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
03276 -1, -1, 27, 28, -1, -1, -1, -1, -1, -1,
03277 -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
03278 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03279 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03280 -1, -1, -1, 68, 69, 70, 71, 72, 73, 74,
03281 75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
03282 85, -1, -1, 88, -1, -1, -1, -1, -1, 94,
03283 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03284 -1, -1, -1, -1, -1, 110, -1, 112, 113, 114,
03285 115, 116, 117, 118, 119, 120, 121, -1, -1, -1,
03286 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03287 -1, -1, 137, 138, 139, 140, 0, 142, 143, 144,
03288 145, -1, 147, -1, 8, 9, 10, -1, -1, -1,
03289 14, 15, -1, 17, -1, -1, -1, -1, -1, -1,
03290 -1, -1, 26, -1, -1, -1, -1, -1, -1, -1,
03291 -1, -1, -1, 37, 38, -1, 40, 41, 42, 43,
03292 44, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03293 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03294 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
03295 74, 75, 76, 77, 78, 79, 80, -1, -1, 83,
03296 84, 85, 0, 87, -1, -1, -1, -1, -1, -1,
03297 8, 9, 10, -1, -1, -1, 14, 15, -1, 17,
03298 -1, -1, -1, -1, -1, 109, 110, -1, 112, 113,
03299 114, 115, 116, 117, 118, 119, 120, 121, -1, 37,
03300 38, -1, 40, 41, 42, 43, 44, -1, -1, -1,
03301 -1, -1, 136, 137, 138, 139, 140, -1, -1, 143,
03302 -1, 145, -1, 147, -1, -1, -1, -1, -1, -1,
03303 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
03304 78, 79, 80, -1, -1, 83, 84, 85, -1, 87,
03305 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03306 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03307 -1, 109, 110, -1, 112, 113, 114, 115, 116, 117,
03308 118, 119, 120, 121, -1, -1, -1, -1, -1, -1,
03309 -1, -1, -1, -1, -1, -1, -1, -1, -1, 137,
03310 138, 139, 140, -1, -1, 143, -1, 145, 1, 147,
03311 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
03312 -1, -1, 15, 16, -1, 18, 19, 20, 21, 22,
03313 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03314 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03315 -1, -1, 45, 46, -1, 48, 49, 50, 51, 52,
03316 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03317 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03318 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03319 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03320 93, -1, 95, -1, 97, 98, 99, 100, 101, 102,
03321 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03322 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
03323 123, 124, -1, -1, -1, -1, -1, -1, -1, -1,
03324 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03325 -1, -1, 145, 1, 147, 3, 4, 5, 6, 7,
03326 -1, -1, 10, 11, 12, -1, 14, 15, 16, -1,
03327 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03328 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03329 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03330 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03331 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03332 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03333 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03334 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03335 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03336 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03337 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03338 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03339 -1, -1, -1, -1, -1, -1, -1, 145, 1, 147,
03340 3, 4, 5, 6, 7, -1, -1, 10, 11, 12,
03341 -1, -1, 15, 16, 17, 18, 19, 20, 21, 22,
03342 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03343 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03344 -1, -1, 45, 46, -1, 48, 49, 50, 51, 52,
03345 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03346 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03347 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03348 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03349 93, -1, 95, -1, 97, 98, 99, 100, 101, 102,
03350 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03351 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
03352 123, 124, -1, -1, -1, -1, -1, -1, 1, -1,
03353 3, 4, 5, 6, 7, -1, -1, -1, 11, 12,
03354 -1, -1, 145, 16, 147, 18, 19, 20, 21, 22,
03355 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03356 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03357 -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
03358 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03359 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03360 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03361 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03362 93, -1, 95, -1, 97, 98, 99, 100, 101, 102,
03363 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03364 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
03365 123, 124, -1, -1, -1, -1, -1, -1, -1, -1,
03366 -1, -1, -1, -1, 137, -1, -1, -1, -1, -1,
03367 -1, -1, 145, 1, 147, 3, 4, 5, 6, 7,
03368 -1, -1, 10, 11, 12, -1, -1, 15, 16, -1,
03369 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03370 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03371 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03372 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03373 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03374 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03375 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03376 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03377 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03378 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03379 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03380 -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
03381 -1, 9, 10, 11, 12, -1, -1, 145, 16, 147,
03382 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03383 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03384 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03385 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03386 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03387 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03388 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03389 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03390 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03391 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03392 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03393 -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
03394 -1, -1, -1, 11, 12, -1, -1, 145, 16, 147,
03395 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03396 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03397 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03398 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03399 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03400 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03401 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03402 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03403 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03404 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03405 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03406 -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
03407 -1, -1, -1, 11, 12, 143, -1, 145, 16, 147,
03408 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03409 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03410 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03411 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03412 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03413 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03414 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03415 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03416 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03417 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03418 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03419 -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
03420 -1, -1, -1, 11, 12, 143, -1, 145, 16, 147,
03421 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03422 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03423 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03424 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03425 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03426 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03427 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03428 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03429 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03430 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03431 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03432 -1, -1, -1, -1, -1, -1, -1, -1, -1, 137,
03433 -1, -1, -1, -1, -1, -1, -1, 145, 1, 147,
03434 3, 4, 5, 6, 7, -1, -1, 10, 11, 12,
03435 -1, -1, -1, 16, -1, 18, 19, 20, 21, 22,
03436 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03437 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03438 -1, -1, 45, 46, -1, 48, 49, 50, 51, 52,
03439 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03440 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03441 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03442 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03443 93, -1, 95, -1, 97, 98, 99, 100, 101, 102,
03444 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03445 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
03446 123, 124, -1, -1, -1, -1, -1, -1, -1, -1,
03447 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
03448 -1, -1, 145, 16, 147, 18, 19, 20, 21, 22,
03449 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03450 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03451 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03452 53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
03453 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03454 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03455 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03456 93, -1, 95, 96, 97, 98, 99, 100, 101, 102,
03457 103, -1, -1, -1, -1, -1, -1, -1, -1, 3,
03458 4, 5, -1, 7, -1, -1, -1, 11, 12, 122,
03459 123, 124, 16, -1, 18, 19, 20, 21, 22, 23,
03460 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03461 34, 35, 36, -1, 147, 39, -1, -1, -1, -1,
03462 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03463 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03464 64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
03465 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03466 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03467 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03468 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03469 -1, -1, -1, -1, -1, -1, -1, -1, 122, 123,
03470 124, -1, -1, -1, -1, -1, -1, -1, -1, 3,
03471 4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
03472 -1, 145, 16, 147, 18, 19, 20, 21, 22, 23,
03473 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03474 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03475 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03476 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03477 64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
03478 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03479 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03480 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03481 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
03482 5, 6, 7, -1, -1, -1, 11, 12, 122, 123,
03483 124, 16, -1, 18, 19, 20, 21, 22, 23, 24,
03484 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
03485 35, 36, -1, 147, 39, -1, -1, -1, -1, -1,
03486 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
03487 55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
03488 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03489 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03490 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03491 95, -1, 97, 98, 99, 100, 101, 102, 103, -1,
03492 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03493 -1, -1, -1, -1, -1, -1, -1, 122, 123, 124,
03494 -1, -1, -1, -1, -1, -1, 3, 4, 5, 6,
03495 7, -1, -1, -1, 11, 12, -1, -1, -1, 16,
03496 145, 18, 19, 20, 21, 22, 23, 24, -1, -1,
03497 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
03498 -1, -1, 39, -1, -1, -1, -1, -1, 45, 46,
03499 -1, 48, 49, 50, 51, 52, 53, 54, 55, 56,
03500 57, -1, 59, 60, -1, 62, 63, 64, -1, 66,
03501 67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03502 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
03503 -1, -1, 89, 90, -1, 92, 93, -1, 95, -1,
03504 97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
03505 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03506 -1, -1, -1, -1, -1, 122, 123, 124, -1, -1,
03507 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03508 -1, -1, -1, -1, -1, -1, -1, -1, 145, 3,
03509 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
03510 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
03511 24, 25, 26, -1, -1, -1, 30, 31, 32, 33,
03512 34, 35, 36, 37, 38, 39, -1, -1, -1, -1,
03513 -1, 45, 46, 47, 48, 49, 50, 51, 52, 53,
03514 54, 55, 56, 57, -1, -1, -1, -1, -1, -1,
03515 -1, -1, 66, 67, 68, 69, 70, 71, 72, 73,
03516 74, -1, -1, 77, 78, -1, -1, 81, 82, 83,
03517 84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03518 -1, 95, -1, -1, -1, -1, -1, -1, -1, -1,
03519 -1, -1, -1, -1, -1, -1, -1, -1, 112, 113,
03520 114, 115, 116, 117, 118, 119, 120, 121, -1, 123,
03521 124, -1, -1, -1, -1, -1, 3, 4, 5, -1,
03522 7, -1, -1, -1, 11, 12, -1, 141, 142, 16,
03523 -1, 18, 19, 20, 21, 22, 23, 24, -1, 26,
03524 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
03525 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
03526 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
03527 57, 58, 59, 60, -1, 62, 63, 64, -1, 66,
03528 67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03529 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
03530 -1, -1, 89, 90, -1, 92, 93, -1, 95, 96,
03531 97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
03532 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03533 -1, -1, -1, -1, -1, 122, 123, 124, -1, -1,
03534 -1, -1, -1, 3, 4, 5, -1, 7, -1, 136,
03535 -1, 11, 12, -1, -1, 142, 16, -1, 18, 19,
03536 20, 21, 22, 23, 24, -1, 26, -1, -1, -1,
03537 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
03538 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
03539 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
03540 60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
03541 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03542 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
03543 90, -1, 92, 93, -1, 95, 96, 97, 98, 99,
03544 100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
03545 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03546 -1, -1, 122, 123, 124, -1, -1, -1, -1, -1,
03547 3, 4, 5, -1, 7, -1, 136, -1, 11, 12,
03548 -1, -1, 142, 16, -1, 18, 19, 20, 21, 22,
03549 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03550 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03551 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03552 53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
03553 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03554 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03555 -1, -1, -1, 86, 87, -1, 89, 90, -1, 92,
03556 93, -1, 95, 96, 97, 98, 99, 100, 101, 102,
03557 103, -1, -1, -1, -1, -1, 109, -1, -1, -1,
03558 -1, -1, -1, -1, 3, 4, 5, -1, 7, 122,
03559 123, 124, 11, 12, -1, -1, -1, 16, -1, 18,
03560 19, 20, 21, 22, 23, 24, -1, -1, -1, 142,
03561 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
03562 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
03563 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
03564 59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
03565 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03566 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
03567 89, 90, -1, 92, 93, -1, 95, 96, 97, 98,
03568 99, 100, 101, 102, 103, -1, -1, -1, -1, -1,
03569 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
03570 5, -1, 7, 122, 123, 124, 11, 12, -1, -1,
03571 -1, 16, -1, 18, 19, 20, 21, 22, 23, 24,
03572 -1, -1, -1, 142, -1, 30, 31, 32, 33, 34,
03573 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
03574 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
03575 55, 56, 57, 58, 59, 60, -1, 62, 63, 64,
03576 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03577 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03578 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03579 95, 96, 97, 98, 99, 100, 101, 102, 103, -1,
03580 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03581 -1, -1, -1, -1, -1, -1, -1, 122, 123, 124,
03582 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03583 -1, -1, -1, -1, -1, -1, -1, 142, 3, 4,
03584 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
03585 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
03586 25, 26, -1, -1, -1, 30, 31, 32, 33, 34,
03587 35, 36, 37, 38, 39, -1, -1, -1, -1, -1,
03588 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
03589 55, 56, 57, -1, -1, -1, -1, -1, -1, -1,
03590 -1, 66, 67, 68, 69, 70, 71, 72, 73, 74,
03591 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
03592 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03593 95, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03594 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114,
03595 115, 116, 117, 118, 119, 120, 121, -1, 123, 124,
03596 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03597 -1, -1, -1, -1, -1, -1, 141, 3, 4, 5,
03598 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
03599 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
03600 26, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03601 36, 37, 38, 39, -1, -1, -1, -1, -1, 45,
03602 46, 47, 48, 49, 50, 51, 52, 53, 54, -1,
03603 56, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03604 66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
03605 -1, 77, 78, -1, -1, 81, 82, 83, 84, -1,
03606 -1, -1, -1, -1, -1, -1, -1, -1, -1, 95,
03607 -1, -1, 98, -1, -1, -1, -1, -1, -1, -1,
03608 -1, -1, -1, -1, -1, -1, 112, 113, 114, 115,
03609 116, 117, 118, 119, 120, 121, -1, 123, 124, -1,
03610 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03611 -1, -1, -1, -1, -1, 141, 3, 4, 5, 6,
03612 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
03613 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
03614 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
03615 37, 38, 39, -1, -1, -1, -1, -1, 45, 46,
03616 47, 48, 49, 50, 51, 52, 53, -1, -1, 56,
03617 -1, -1, -1, -1, -1, -1, -1, -1, -1, 66,
03618 67, 68, 69, 70, 71, 72, 73, 74, -1, -1,
03619 77, 78, -1, -1, 81, 82, 83, 84, -1, -1,
03620 -1, -1, -1, -1, -1, -1, -1, -1, 95, -1,
03621 -1, 98, -1, -1, -1, -1, -1, -1, -1, -1,
03622 -1, -1, -1, -1, -1, 112, 113, 114, 115, 116,
03623 117, 118, 119, 120, 121, -1, 123, 124, -1, -1,
03624 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03625 -1, -1, -1, -1, 141, 3, 4, 5, 6, 7,
03626 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
03627 18, 19, 20, 21, 22, 23, 24, 25, 26, -1,
03628 -1, -1, 30, 31, 32, 33, 34, 35, 36, 37,
03629 38, 39, -1, -1, -1, -1, -1, 45, 46, 47,
03630 48, 49, 50, 51, 52, 53, -1, -1, 56, -1,
03631 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67,
03632 68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
03633 78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
03634 -1, -1, -1, -1, -1, -1, -1, 95, -1, -1,
03635 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03636 -1, -1, -1, -1, 112, 113, 114, 115, 116, 117,
03637 118, 119, 120, 121, -1, 123, 124, -1, -1, 3,
03638 4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
03639 -1, -1, 16, 141, 18, 19, 20, 21, 22, 23,
03640 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03641 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03642 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03643 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03644 64, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03645 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03646 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03647 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03648 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03649 -1, 3, 4, 5, -1, 7, -1, -1, 122, 11,
03650 12, -1, -1, -1, 16, -1, 18, 19, 20, 21,
03651 22, 23, 24, -1, -1, -1, 140, -1, 30, 31,
03652 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03653 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03654 52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
03655 62, 63, 64, -1, -1, -1, -1, -1, -1, -1,
03656 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03657 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03658 92, 93, -1, -1, -1, 97, 98, 99, 100, 101,
03659 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03660 -1, -1, -1, 3, 4, 5, 6, 7, -1, -1,
03661 122, 11, 12, -1, -1, -1, 16, -1, 18, 19,
03662 20, 21, 22, 23, 24, -1, -1, -1, 140, -1,
03663 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
03664 -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
03665 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
03666 60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
03667 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03668 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
03669 90, -1, 92, 93, -1, 95, -1, 97, 98, 99,
03670 100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
03671 -1, -1, 3, 4, 5, 6, 7, -1, -1, -1,
03672 11, 12, 122, 123, 124, 16, -1, 18, 19, 20,
03673 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03674 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03675 -1, -1, -1, -1, 45, 46, -1, 48, 49, 50,
03676 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03677 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03678 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03679 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03680 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
03681 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03682 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
03683 12, 122, 123, 124, 16, -1, 18, 19, 20, 21,
03684 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03685 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03686 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03687 52, 53, 54, 55, 56, 57, 58, 59, 60, -1,
03688 62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
03689 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03690 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03691 92, 93, -1, 95, 96, 97, 98, 99, 100, 101,
03692 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03693 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
03694 122, 123, 124, 16, -1, 18, 19, 20, 21, 22,
03695 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03696 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03697 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03698 53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
03699 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03700 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03701 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03702 93, -1, 95, 96, 97, 98, 99, 100, 101, 102,
03703 103, -1, -1, -1, -1, -1, -1, -1, -1, 3,
03704 4, 5, -1, 7, -1, -1, -1, 11, 12, 122,
03705 123, 124, 16, -1, 18, 19, 20, 21, 22, 23,
03706 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03707 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03708 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03709 54, 55, 56, 57, 58, 59, 60, -1, 62, 63,
03710 64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
03711 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03712 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03713 -1, 95, -1, 97, 98, 99, 100, 101, 102, 103,
03714 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
03715 5, -1, 7, -1, -1, -1, 11, 12, 122, 123,
03716 124, 16, -1, 18, 19, 20, 21, 22, 23, 24,
03717 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
03718 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
03719 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
03720 55, 56, 57, 58, 59, 60, -1, 62, 63, 64,
03721 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03722 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03723 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03724 -1, 96, 97, 98, 99, 100, 101, 102, 103, -1,
03725 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
03726 -1, 7, -1, -1, -1, 11, 12, 122, 123, 124,
03727 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03728 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03729 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03730 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03731 56, 57, 58, 59, 60, -1, 62, 63, 64, -1,
03732 66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
03733 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03734 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03735 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03736 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
03737 7, -1, -1, -1, 11, 12, 122, 123, 124, 16,
03738 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
03739 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
03740 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
03741 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
03742 57, 58, 59, 60, -1, 62, 63, 64, -1, 66,
03743 67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03744 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
03745 -1, -1, 89, 90, -1, 92, 93, -1, -1, -1,
03746 97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
03747 -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
03748 -1, -1, -1, 11, 12, 122, 123, 124, 16, -1,
03749 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03750 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03751 -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
03752 -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03753 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03754 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03755 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03756 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03757 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03758 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
03759 -1, -1, 11, 12, 122, 123, 124, 16, -1, 18,
03760 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
03761 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
03762 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
03763 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
03764 59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
03765 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03766 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
03767 89, 90, -1, 92, 93, -1, 95, -1, 97, 98,
03768 99, 100, 101, 102, 103, -1, -1, -1, -1, -1,
03769 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
03770 -1, 11, 12, 122, 123, 124, 16, -1, 18, 19,
03771 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
03772 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
03773 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
03774 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
03775 60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
03776 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03777 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
03778 90, -1, 92, 93, -1, 95, -1, 97, 98, 99,
03779 100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
03780 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03781 11, 12, 122, 123, 124, 16, -1, 18, 19, 20,
03782 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03783 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03784 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03785 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03786 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03787 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03788 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03789 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
03790 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03791 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
03792 12, 122, 123, 124, 16, -1, 18, 19, 20, 21,
03793 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03794 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03795 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03796 52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
03797 62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
03798 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03799 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03800 92, 93, -1, 95, -1, 97, 98, 99, 100, 101,
03801 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03802 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
03803 122, 123, 124, 16, -1, 18, 19, 20, 21, 22,
03804 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03805 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03806 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03807 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03808 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03809 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03810 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03811 93, -1, -1, -1, 97, 98, 99, 100, 101, 102,
03812 103, -1, -1, -1, -1, -1, -1, -1, -1, 3,
03813 4, 5, -1, 7, -1, -1, -1, 11, 12, 122,
03814 123, 124, 16, -1, 18, 19, 20, 21, 22, 23,
03815 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03816 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03817 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03818 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03819 64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
03820 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03821 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03822 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03823 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
03824 5, -1, 7, -1, -1, -1, 11, 12, 122, 123,
03825 124, 16, -1, 18, 19, 20, 21, 22, 23, 24,
03826 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
03827 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
03828 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
03829 55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
03830 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03831 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03832 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03833 -1, -1, 97, 98, 99, 100, 101, 102, 103, -1,
03834 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
03835 -1, 7, -1, -1, -1, 11, 12, 122, 123, 124,
03836 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03837 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03838 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03839 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03840 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03841 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03842 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03843 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03844 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03845 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03846 11, 12, -1, -1, -1, 16, 122, 18, 19, 20,
03847 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03848 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03849 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03850 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03851 -1, 62, 63, 64, -1, -1, -1, -1, -1, -1,
03852 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03853 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03854 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
03855 101, 102, 103, -1, -1, -1, -1, 3, 4, 5,
03856 -1, 7, -1, -1, -1, 11, 12, -1, -1, -1,
03857 16, 122, 18, 19, 20, 21, 22, 23, 24, -1,
03858 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03859 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03860 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03861 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03862 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03863 -1, -1, -1, -1, -1, -1, -1, 83, -1, -1,
03864 86, -1, -1, 89, 90, -1, 92, 93, -1, -1,
03865 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03866 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03867 11, 12, -1, -1, -1, 16, 122, 18, 19, 20,
03868 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03869 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03870 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03871 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03872 -1, 62, 63, 64, -1, -1, -1, -1, -1, -1,
03873 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03874 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03875 -1, 92, 93, -1, -1, -1, 97, 98, 99, 100,
03876 101, 102, 103, -1, -1, -1, -1, 3, 4, 5,
03877 -1, 7, -1, -1, -1, 11, 12, -1, -1, -1,
03878 16, 122, 18, 19, 20, 21, 22, 23, 24, -1,
03879 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03880 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03881 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03882 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03883 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03884 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03885 86, -1, -1, 89, 90, -1, 92, 93, -1, -1,
03886 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03887 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03888 11, 12, -1, -1, -1, 16, 122, 18, 19, 20,
03889 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03890 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03891 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03892 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03893 -1, 62, 63, 64, -1, -1, -1, -1, -1, -1,
03894 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03895 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03896 -1, 92, 93, -1, -1, -1, 97, 98, 99, 100,
03897 101, 102, 103, -1, -1, -1, -1, 3, 4, 5,
03898 -1, 7, -1, -1, -1, 11, 12, -1, -1, -1,
03899 16, 122, 18, 19, 20, 21, 22, 23, 24, -1,
03900 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03901 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03902 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03903 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03904 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03905 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03906 86, -1, -1, 89, 90, -1, 92, 93, -1, -1,
03907 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03908 -1, -1, -1, 52, 53, -1, -1, 56, -1, -1,
03909 -1, -1, -1, -1, -1, -1, 122, 66, 67, 68,
03910 69, 70, 71, 72, 73, 74, -1, -1, 77, 78,
03911 -1, -1, 81, 82, 83, 84, -1, -1, -1, -1,
03912 -1, -1, -1, -1, -1, -1, 95, -1, -1, -1,
03913 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03914 -1, -1, -1, 112, 113, 114, 115, 116, 117, 118,
03915 119, 120, 121, -1, 123, 124, -1, -1, -1, -1,
03916 52, 53, -1, -1, 56, -1, -1, -1, -1, -1,
03917 -1, -1, 141, 142, 66, 67, 68, 69, 70, 71,
03918 72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
03919 82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
03920 -1, -1, -1, 95, -1, -1, -1, -1, -1, -1,
03921 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03922 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
03923 -1, 123, 124, -1, -1, -1, -1, 52, 53, -1,
03924 -1, 56, -1, -1, -1, -1, -1, -1, -1, 141,
03925 142, 66, 67, 68, 69, 70, 71, 72, 73, 74,
03926 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
03927 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03928 95, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03929 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114,
03930 115, 116, 117, 118, 119, 120, 121, -1, 123, 124,
03931 -1, -1, -1, -1, 52, 53, -1, -1, 56, -1,
03932 -1, -1, -1, -1, -1, -1, 141, 142, 66, 67,
03933 68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
03934 78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
03935 -1, -1, -1, -1, -1, -1, -1, 95, -1, -1,
03936 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03937 -1, -1, -1, -1, 112, 113, 114, 115, 116, 117,
03938 118, 119, 120, 121, -1, 123, 124, -1, -1, -1,
03939 -1, 52, 53, -1, -1, 56, -1, -1, -1, -1,
03940 -1, -1, -1, 141, 142, 66, 67, 68, 69, 70,
03941 71, 72, 73, 74, -1, -1, 77, 78, -1, -1,
03942 81, 82, 83, 84, -1, -1, -1, -1, -1, -1,
03943 -1, -1, -1, -1, 95, -1, -1, -1, -1, -1,
03944 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03945 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
03946 121, -1, 123, 124, -1, -1, -1, -1, 52, 53,
03947 -1, -1, 56, -1, -1, -1, -1, -1, -1, -1,
03948 141, 142, 66, 67, 68, 69, 70, 71, 72, 73,
03949 74, -1, -1, 77, 78, -1, -1, 81, 82, 83,
03950 84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03951 -1, 95, -1, -1, -1, -1, -1, -1, -1, -1,
03952 -1, -1, -1, -1, -1, -1, -1, -1, 112, 113,
03953 114, 115, 116, 117, 118, 119, 120, 121, -1, 123,
03954 124, -1, -1, -1, -1, 52, 53, -1, -1, 56,
03955 -1, -1, -1, -1, -1, -1, -1, 141, 142, 66,
03956 67, 68, 69, 70, 71, 72, 73, 74, -1, -1,
03957 77, 78, -1, -1, 81, 82, 83, 84, -1, -1,
03958 -1, -1, -1, -1, -1, -1, -1, -1, 95, -1,
03959 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03960 -1, -1, -1, -1, -1, 112, 113, 114, 115, 116,
03961 117, 118, 119, 120, 121, -1, 123, 124, -1, -1,
03962 -1, -1, 52, 53, -1, -1, 56, -1, -1, -1,
03963 -1, -1, -1, -1, 141, 142, 66, 67, 68, 69,
03964 70, 71, 72, 73, 74, -1, -1, 77, 78, -1,
03965 -1, 81, 82, 83, 84, -1, -1, -1, -1, -1,
03966 -1, -1, -1, -1, -1, 95, -1, -1, -1, -1,
03967 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03968 -1, -1, 112, 113, 114, 115, 116, 117, 118, 119,
03969 120, 121, -1, 123, 124, -1, -1, -1, -1, 52,
03970 53, -1, -1, 56, -1, -1, -1, -1, -1, -1,
03971 -1, 141, 142, 66, 67, 68, 69, 70, 71, 72,
03972 73, 74, -1, -1, 77, 78, -1, -1, 81, 82,
03973 83, 84, -1, -1, -1, -1, -1, -1, -1, -1,
03974 -1, -1, 95, -1, -1, -1, -1, -1, -1, -1,
03975 -1, -1, -1, -1, -1, -1, -1, -1, -1, 112,
03976 113, 114, 115, 116, 117, 118, 119, 120, 121, -1,
03977 123, 124, -1, -1, -1, -1, 52, 53, -1, -1,
03978 56, -1, -1, -1, -1, -1, -1, -1, 141, 142,
03979 66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
03980 -1, 77, 78, -1, -1, 81, 82, 83, 84, -1,
03981 -1, -1, -1, -1, -1, -1, -1, -1, -1, 95,
03982 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03983 -1, -1, -1, -1, -1, -1, 112, 113, 114, 115,
03984 116, 117, 118, 119, 120, 121, -1, 123, 124, -1,
03985 -1, -1, -1, 52, 53, -1, -1, 56, -1, -1,
03986 -1, -1, -1, -1, -1, 141, 142, 66, 67, 68,
03987 69, 70, 71, 72, 73, 74, -1, -1, 77, 78,
03988 -1, -1, 81, 82, 83, 84, -1, -1, -1, -1,
03989 -1, -1, -1, -1, -1, -1, 95, -1, -1, -1,
03990 -1, -1, -1, -1, 44, -1, -1, -1, -1, -1,
03991 -1, -1, -1, 112, 113, 114, 115, 116, 117, 118,
03992 119, 120, 121, 44, 123, 124, -1, -1, 68, 69,
03993 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
03994 80, -1, 141, 83, 84, -1, -1, 68, 69, 70,
03995 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
03996 -1, -1, 83, 84, -1, -1, -1, -1, -1, -1,
03997 110, -1, 112, 113, 114, 115, 116, 117, 118, 119,
03998 120, 121, -1, -1, -1, -1, -1, -1, -1, 110,
03999 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
04000 121
04001 };
04002
04003
04004
04005 static const yytype_uint16 yystos[] =
04006 {
04007 0, 149, 150, 0, 1, 3, 4, 5, 6, 7,
04008 11, 12, 16, 18, 19, 20, 21, 22, 23, 24,
04009 30, 31, 32, 33, 34, 35, 36, 39, 45, 46,
04010 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
04011 57, 59, 60, 62, 63, 64, 66, 67, 86, 89,
04012 90, 92, 93, 95, 97, 98, 99, 100, 101, 102,
04013 103, 122, 123, 124, 151, 152, 153, 158, 160, 162,
04014 163, 166, 167, 169, 170, 171, 173, 174, 184, 198,
04015 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
04016 225, 248, 249, 259, 260, 261, 262, 263, 264, 265,
04017 268, 278, 280, 281, 282, 283, 284, 285, 308, 319,
04018 153, 3, 4, 5, 6, 7, 8, 9, 10, 11,
04019 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
04020 22, 23, 24, 25, 26, 30, 31, 32, 33, 34,
04021 35, 36, 37, 38, 39, 45, 46, 47, 48, 49,
04022 50, 51, 52, 53, 56, 66, 67, 68, 69, 70,
04023 71, 72, 73, 74, 77, 78, 81, 82, 83, 84,
04024 95, 112, 113, 114, 115, 116, 117, 118, 119, 120,
04025 121, 123, 124, 141, 177, 178, 179, 180, 182, 183,
04026 278, 280, 39, 58, 86, 89, 95, 96, 123, 166,
04027 174, 184, 186, 191, 194, 196, 215, 282, 284, 285,
04028 306, 307, 191, 191, 142, 192, 193, 142, 188, 192,
04029 142, 147, 313, 54, 179, 313, 154, 136, 21, 22,
04030 30, 31, 32, 184, 215, 308, 184, 56, 1, 89,
04031 156, 157, 158, 168, 169, 319, 160, 187, 196, 306,
04032 319, 186, 305, 306, 319, 46, 86, 122, 140, 173,
04033 198, 215, 282, 285, 241, 242, 54, 55, 57, 177,
04034 271, 279, 270, 271, 272, 146, 266, 146, 269, 59,
04035 60, 162, 184, 184, 145, 147, 312, 317, 318, 40,
04036 41, 42, 43, 44, 37, 38, 28, 246, 109, 140,
04037 89, 95, 170, 109, 68, 69, 70, 71, 72, 73,
04038 74, 75, 76, 77, 78, 79, 80, 83, 84, 110,
04039 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
04040 85, 138, 139, 199, 160, 161, 161, 202, 204, 161,
04041 312, 318, 86, 167, 174, 215, 231, 282, 285, 52,
04042 56, 83, 86, 175, 176, 215, 282, 285, 176, 33,
04043 34, 35, 36, 49, 50, 51, 52, 56, 142, 177,
04044 283, 303, 85, 139, 26, 136, 250, 262, 87, 87,
04045 188, 192, 250, 140, 186, 56, 186, 186, 109, 88,
04046 140, 195, 319, 85, 138, 139, 87, 87, 140, 195,
04047 191, 313, 314, 191, 190, 191, 319, 160, 314, 160,
04048 54, 63, 64, 159, 142, 185, 136, 156, 85, 139,
04049 87, 158, 168, 143, 312, 318, 314, 200, 144, 140,
04050 147, 316, 140, 316, 137, 316, 313, 56, 59, 60,
04051 170, 172, 140, 85, 138, 139, 243, 61, 104, 105,
04052 106, 273, 106, 273, 106, 65, 273, 106, 106, 267,
04053 273, 106, 61, 106, 68, 68, 145, 153, 161, 161,
04054 161, 161, 158, 160, 160, 247, 95, 162, 186, 196,
04055 197, 168, 140, 173, 140, 162, 184, 186, 197, 184,
04056 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
04057 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
04058 184, 184, 184, 184, 184, 52, 53, 56, 182, 188,
04059 309, 310, 190, 52, 53, 56, 182, 188, 309, 155,
04060 156, 13, 227, 317, 227, 161, 161, 312, 17, 253,
04061 56, 85, 138, 139, 25, 160, 52, 56, 175, 1,
04062 113, 286, 317, 85, 138, 139, 211, 304, 212, 85,
04063 139, 311, 52, 56, 309, 309, 252, 251, 162, 184,
04064 162, 184, 94, 164, 181, 184, 186, 95, 186, 194,
04065 306, 52, 56, 190, 52, 56, 307, 314, 143, 314,
04066 314, 179, 201, 184, 151, 137, 309, 309, 184, 314,
04067 158, 314, 306, 140, 172, 52, 56, 190, 52, 56,
04068 52, 54, 55, 56, 57, 89, 95, 96, 116, 119,
04069 142, 244, 289, 290, 291, 292, 293, 294, 297, 298,
04070 299, 300, 301, 275, 274, 146, 273, 146, 184, 184,
04071 76, 114, 236, 237, 319, 186, 140, 314, 172, 140,
04072 44, 313, 87, 87, 188, 192, 313, 315, 87, 87,
04073 188, 189, 192, 319, 10, 226, 8, 255, 319, 156,
04074 13, 156, 27, 228, 317, 228, 253, 196, 226, 52,
04075 56, 190, 52, 56, 206, 209, 317, 287, 208, 52,
04076 56, 175, 190, 155, 160, 142, 288, 289, 213, 189,
04077 192, 189, 192, 236, 236, 44, 165, 179, 186, 195,
04078 87, 87, 315, 87, 87, 160, 137, 316, 170, 315,
04079 109, 52, 89, 95, 232, 233, 234, 291, 289, 29,
04080 107, 245, 140, 302, 319, 140, 302, 52, 140, 302,
04081 52, 276, 54, 55, 57, 277, 285, 52, 145, 235,
04082 238, 293, 295, 296, 299, 301, 319, 156, 95, 186,
04083 172, 184, 111, 162, 184, 162, 184, 164, 144, 87,
04084 162, 184, 162, 184, 164, 186, 197, 256, 319, 15,
04085 230, 319, 14, 229, 230, 230, 203, 205, 226, 140,
04086 227, 315, 161, 317, 161, 155, 315, 226, 314, 289,
04087 155, 317, 177, 156, 156, 184, 236, 87, 314, 186,
04088 234, 140, 291, 140, 314, 238, 156, 156, 292, 297,
04089 299, 301, 293, 294, 299, 293, 156, 109, 52, 239,
04090 240, 290, 238, 114, 140, 302, 140, 302, 140, 302,
04091 10, 186, 184, 162, 184, 88, 257, 319, 156, 9,
04092 258, 319, 161, 226, 226, 156, 156, 186, 156, 228,
04093 210, 317, 226, 314, 226, 214, 10, 137, 156, 314,
04094 233, 140, 95, 232, 314, 10, 137, 140, 302, 140,
04095 302, 140, 302, 140, 302, 302, 137, 86, 215, 140,
04096 114, 296, 299, 293, 295, 299, 293, 86, 174, 215,
04097 282, 285, 227, 156, 227, 226, 226, 230, 253, 254,
04098 207, 155, 288, 137, 140, 233, 140, 291, 293, 299,
04099 293, 293, 56, 85, 240, 140, 302, 140, 302, 302,
04100 140, 302, 302, 56, 85, 138, 139, 156, 156, 156,
04101 226, 155, 233, 140, 302, 140, 302, 302, 302, 52,
04102 56, 293, 299, 293, 293, 52, 56, 190, 52, 56,
04103 255, 229, 226, 226, 233, 293, 302, 140, 302, 302,
04104 302, 315, 302, 293, 302
04105 };
04106
04107 #define yyerrok (yyerrstatus = 0)
04108 #define yyclearin (yychar = YYEMPTY)
04109 #define YYEMPTY (-2)
04110 #define YYEOF 0
04111
04112 #define YYACCEPT goto yyacceptlab
04113 #define YYABORT goto yyabortlab
04114 #define YYERROR goto yyerrorlab
04115
04116
04117
04118
04119
04120
04121
04122
04123
04124 #define YYFAIL goto yyerrlab
04125 #if defined YYFAIL
04126
04127
04128
04129
04130 #endif
04131
04132 #define YYRECOVERING() (!!yyerrstatus)
04133
04134 #define YYBACKUP(Token, Value) \
04135 do \
04136 if (yychar == YYEMPTY && yylen == 1) \
04137 { \
04138 yychar = (Token); \
04139 yylval = (Value); \
04140 yytoken = YYTRANSLATE (yychar); \
04141 YYPOPSTACK (1); \
04142 goto yybackup; \
04143 } \
04144 else \
04145 { \
04146 parser_yyerror (parser, YY_("syntax error: cannot back up")); \
04147 YYERROR; \
04148 } \
04149 while (YYID (0))
04150
04151
04152 #define YYTERROR 1
04153 #define YYERRCODE 256
04154
04155
04156
04157
04158
04159
04160 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
04161 #ifndef YYLLOC_DEFAULT
04162 # define YYLLOC_DEFAULT(Current, Rhs, N) \
04163 do \
04164 if (YYID (N)) \
04165 { \
04166 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
04167 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
04168 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
04169 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
04170 } \
04171 else \
04172 { \
04173 (Current).first_line = (Current).last_line = \
04174 YYRHSLOC (Rhs, 0).last_line; \
04175 (Current).first_column = (Current).last_column = \
04176 YYRHSLOC (Rhs, 0).last_column; \
04177 } \
04178 while (YYID (0))
04179 #endif
04180
04181
04182
04183
04184
04185
04186 #ifndef YY_LOCATION_PRINT
04187 # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
04188 # define YY_LOCATION_PRINT(File, Loc) \
04189 fprintf (File, "%d.%d-%d.%d", \
04190 (Loc).first_line, (Loc).first_column, \
04191 (Loc).last_line, (Loc).last_column)
04192 # else
04193 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
04194 # endif
04195 #endif
04196
04197
04198
04199
04200 #ifdef YYLEX_PARAM
04201 # define YYLEX yylex (&yylval, YYLEX_PARAM)
04202 #else
04203 # define YYLEX yylex (&yylval)
04204 #endif
04205
04206
04207 #if YYDEBUG
04208
04209 # ifndef YYFPRINTF
04210 # include <stdio.h>
04211 # define YYFPRINTF fprintf
04212 # endif
04213
04214 # define YYDPRINTF(Args) \
04215 do { \
04216 if (yydebug) \
04217 YYFPRINTF Args; \
04218 } while (YYID (0))
04219
04220 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
04221 do { \
04222 if (yydebug) \
04223 { \
04224 YYFPRINTF (stderr, "%s ", Title); \
04225 yy_symbol_print (stderr, \
04226 Type, Value, parser); \
04227 YYFPRINTF (stderr, "\n"); \
04228 } \
04229 } while (YYID (0))
04230
04231
04232
04233
04234
04235
04236
04237 #if (defined __STDC__ || defined __C99__FUNC__ \
04238 || defined __cplusplus || defined _MSC_VER)
04239 static void
04240 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04241 #else
04242 static void
04243 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
04244 FILE *yyoutput;
04245 int yytype;
04246 YYSTYPE const * const yyvaluep;
04247 struct parser_params *parser;
04248 #endif
04249 {
04250 if (!yyvaluep)
04251 return;
04252 YYUSE (parser);
04253 # ifdef YYPRINT
04254 if (yytype < YYNTOKENS)
04255 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
04256 # else
04257 YYUSE (yyoutput);
04258 # endif
04259 switch (yytype)
04260 {
04261 default:
04262 break;
04263 }
04264 }
04265
04266
04267
04268
04269
04270
04271 #if (defined __STDC__ || defined __C99__FUNC__ \
04272 || defined __cplusplus || defined _MSC_VER)
04273 static void
04274 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04275 #else
04276 static void
04277 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
04278 FILE *yyoutput;
04279 int yytype;
04280 YYSTYPE const * const yyvaluep;
04281 struct parser_params *parser;
04282 #endif
04283 {
04284 if (yytype < YYNTOKENS)
04285 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
04286 else
04287 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
04288
04289 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
04290 YYFPRINTF (yyoutput, ")");
04291 }
04292
04293
04294
04295
04296
04297
04298 #if (defined __STDC__ || defined __C99__FUNC__ \
04299 || defined __cplusplus || defined _MSC_VER)
04300 static void
04301 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
04302 #else
04303 static void
04304 yy_stack_print (yybottom, yytop)
04305 yytype_int16 *yybottom;
04306 yytype_int16 *yytop;
04307 #endif
04308 {
04309 YYFPRINTF (stderr, "Stack now");
04310 for (; yybottom <= yytop; yybottom++)
04311 {
04312 int yybot = *yybottom;
04313 YYFPRINTF (stderr, " %d", yybot);
04314 }
04315 YYFPRINTF (stderr, "\n");
04316 }
04317
04318 # define YY_STACK_PRINT(Bottom, Top) \
04319 do { \
04320 if (yydebug) \
04321 yy_stack_print ((Bottom), (Top)); \
04322 } while (YYID (0))
04323
04324
04325
04326
04327
04328
04329 #if (defined __STDC__ || defined __C99__FUNC__ \
04330 || defined __cplusplus || defined _MSC_VER)
04331 static void
04332 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
04333 #else
04334 static void
04335 yy_reduce_print (yyvsp, yyrule, parser)
04336 YYSTYPE *yyvsp;
04337 int yyrule;
04338 struct parser_params *parser;
04339 #endif
04340 {
04341 int yynrhs = yyr2[yyrule];
04342 int yyi;
04343 unsigned long int yylno = yyrline[yyrule];
04344 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
04345 yyrule - 1, yylno);
04346
04347 for (yyi = 0; yyi < yynrhs; yyi++)
04348 {
04349 YYFPRINTF (stderr, " $%d = ", yyi + 1);
04350 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
04351 &(yyvsp[(yyi + 1) - (yynrhs)])
04352 , parser);
04353 YYFPRINTF (stderr, "\n");
04354 }
04355 }
04356
04357 # define YY_REDUCE_PRINT(Rule) \
04358 do { \
04359 if (yydebug) \
04360 yy_reduce_print (yyvsp, Rule, parser); \
04361 } while (YYID (0))
04362
04363
04364
04365 #ifndef yydebug
04366 int yydebug;
04367 #endif
04368 #else
04369 # define YYDPRINTF(Args)
04370 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
04371 # define YY_STACK_PRINT(Bottom, Top)
04372 # define YY_REDUCE_PRINT(Rule)
04373 #endif
04374
04375
04376
04377 #ifndef YYINITDEPTH
04378 # define YYINITDEPTH 200
04379 #endif
04380
04381
04382
04383
04384
04385
04386
04387
04388 #ifndef YYMAXDEPTH
04389 # define YYMAXDEPTH 10000
04390 #endif
04391
04392
04393
04394 #if YYERROR_VERBOSE
04395
04396 # ifndef yystrlen
04397 # if defined __GLIBC__ && defined _STRING_H
04398 # define yystrlen strlen
04399 # else
04400
04401 #if (defined __STDC__ || defined __C99__FUNC__ \
04402 || defined __cplusplus || defined _MSC_VER)
04403 static YYSIZE_T
04404 yystrlen (const char *yystr)
04405 #else
04406 static YYSIZE_T
04407 yystrlen (yystr)
04408 const char *yystr;
04409 #endif
04410 {
04411 YYSIZE_T yylen;
04412 for (yylen = 0; yystr[yylen]; yylen++)
04413 continue;
04414 return yylen;
04415 }
04416 # endif
04417 # endif
04418
04419 # ifndef yystpcpy
04420 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
04421 # define yystpcpy stpcpy
04422 # else
04423
04424
04425 #if (defined __STDC__ || defined __C99__FUNC__ \
04426 || defined __cplusplus || defined _MSC_VER)
04427 static char *
04428 yystpcpy (char *yydest, const char *yysrc)
04429 #else
04430 static char *
04431 yystpcpy (yydest, yysrc)
04432 char *yydest;
04433 const char *yysrc;
04434 #endif
04435 {
04436 char *yyd = yydest;
04437 const char *yys = yysrc;
04438
04439 while ((*yyd++ = *yys++) != '\0')
04440 continue;
04441
04442 return yyd - 1;
04443 }
04444 # endif
04445 # endif
04446
04447 # ifndef yytnamerr
04448
04449
04450
04451
04452
04453
04454
04455 static YYSIZE_T
04456 yytnamerr (char *yyres, const char *yystr)
04457 {
04458 if (*yystr == '"')
04459 {
04460 YYSIZE_T yyn = 0;
04461 char const *yyp = yystr;
04462
04463 for (;;)
04464 switch (*++yyp)
04465 {
04466 case '\'':
04467 case ',':
04468 goto do_not_strip_quotes;
04469
04470 case '\\':
04471 if (*++yyp != '\\')
04472 goto do_not_strip_quotes;
04473
04474 default:
04475 if (yyres)
04476 yyres[yyn] = *yyp;
04477 yyn++;
04478 break;
04479
04480 case '"':
04481 if (yyres)
04482 yyres[yyn] = '\0';
04483 return yyn;
04484 }
04485 do_not_strip_quotes: ;
04486 }
04487
04488 if (! yyres)
04489 return yystrlen (yystr);
04490
04491 return yystpcpy (yyres, yystr) - yyres;
04492 }
04493 # endif
04494
04495
04496
04497
04498
04499
04500
04501
04502 static YYSIZE_T
04503 yysyntax_error (char *yyresult, int yystate, int yychar)
04504 {
04505 int yyn = yypact[yystate];
04506
04507 if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
04508 return 0;
04509 else
04510 {
04511 int yytype = YYTRANSLATE (yychar);
04512 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
04513 YYSIZE_T yysize = yysize0;
04514 YYSIZE_T yysize1;
04515 int yysize_overflow = 0;
04516 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
04517 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
04518 int yyx;
04519
04520 # if 0
04521
04522
04523 YY_("syntax error, unexpected %s");
04524 YY_("syntax error, unexpected %s, expecting %s");
04525 YY_("syntax error, unexpected %s, expecting %s or %s");
04526 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
04527 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
04528 # endif
04529 char *yyfmt;
04530 char const *yyf;
04531 static char const yyunexpected[] = "syntax error, unexpected %s";
04532 static char const yyexpecting[] = ", expecting %s";
04533 static char const yyor[] = " or %s";
04534 char yyformat[sizeof yyunexpected
04535 + sizeof yyexpecting - 1
04536 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
04537 * (sizeof yyor - 1))];
04538 char const *yyprefix = yyexpecting;
04539
04540
04541
04542 int yyxbegin = yyn < 0 ? -yyn : 0;
04543
04544
04545 int yychecklim = YYLAST - yyn + 1;
04546 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
04547 int yycount = 1;
04548
04549 yyarg[0] = yytname[yytype];
04550 yyfmt = yystpcpy (yyformat, yyunexpected);
04551
04552 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
04553 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
04554 {
04555 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
04556 {
04557 yycount = 1;
04558 yysize = yysize0;
04559 yyformat[sizeof yyunexpected - 1] = '\0';
04560 break;
04561 }
04562 yyarg[yycount++] = yytname[yyx];
04563 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
04564 yysize_overflow |= (yysize1 < yysize);
04565 yysize = yysize1;
04566 yyfmt = yystpcpy (yyfmt, yyprefix);
04567 yyprefix = yyor;
04568 }
04569
04570 yyf = YY_(yyformat);
04571 yysize1 = yysize + yystrlen (yyf);
04572 yysize_overflow |= (yysize1 < yysize);
04573 yysize = yysize1;
04574
04575 if (yysize_overflow)
04576 return YYSIZE_MAXIMUM;
04577
04578 if (yyresult)
04579 {
04580
04581
04582
04583 char *yyp = yyresult;
04584 int yyi = 0;
04585 while ((*yyp = *yyf) != '\0')
04586 {
04587 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
04588 {
04589 yyp += yytnamerr (yyp, yyarg[yyi++]);
04590 yyf += 2;
04591 }
04592 else
04593 {
04594 yyp++;
04595 yyf++;
04596 }
04597 }
04598 }
04599 return yysize;
04600 }
04601 }
04602 #endif
04603
04604
04605
04606
04607
04608
04609
04610 #if (defined __STDC__ || defined __C99__FUNC__ \
04611 || defined __cplusplus || defined _MSC_VER)
04612 static void
04613 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
04614 #else
04615 static void
04616 yydestruct (yymsg, yytype, yyvaluep, parser)
04617 const char *yymsg;
04618 int yytype;
04619 YYSTYPE *yyvaluep;
04620 struct parser_params *parser;
04621 #endif
04622 {
04623 YYUSE (yyvaluep);
04624 YYUSE (parser);
04625
04626 if (!yymsg)
04627 yymsg = "Deleting";
04628 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
04629
04630 switch (yytype)
04631 {
04632
04633 default:
04634 break;
04635 }
04636 }
04637
04638
04639 #ifdef YYPARSE_PARAM
04640 #if defined __STDC__ || defined __cplusplus
04641 int yyparse (void *YYPARSE_PARAM);
04642 #else
04643 int yyparse ();
04644 #endif
04645 #else
04646 #if defined __STDC__ || defined __cplusplus
04647 int yyparse (struct parser_params *parser);
04648 #else
04649 int yyparse ();
04650 #endif
04651 #endif
04652
04653
04654
04655
04656
04657
04658
04659
04660
04661 #ifdef YYPARSE_PARAM
04662 #if (defined __STDC__ || defined __C99__FUNC__ \
04663 || defined __cplusplus || defined _MSC_VER)
04664 int
04665 yyparse (void *YYPARSE_PARAM)
04666 #else
04667 int
04668 yyparse (YYPARSE_PARAM)
04669 void *YYPARSE_PARAM;
04670 #endif
04671 #else
04672 #if (defined __STDC__ || defined __C99__FUNC__ \
04673 || defined __cplusplus || defined _MSC_VER)
04674 int
04675 yyparse (struct parser_params *parser)
04676 #else
04677 int
04678 yyparse (parser)
04679 struct parser_params *parser;
04680 #endif
04681 #endif
04682 {
04683
04684 int yychar;
04685
04686
04687 YYSTYPE yylval;
04688
04689
04690 int yynerrs;
04691
04692 int yystate;
04693
04694 int yyerrstatus;
04695
04696
04697
04698
04699
04700
04701
04702
04703
04704 yytype_int16 yyssa[YYINITDEPTH];
04705 yytype_int16 *yyss;
04706 yytype_int16 *yyssp;
04707
04708
04709 YYSTYPE yyvsa[YYINITDEPTH];
04710 YYSTYPE *yyvs;
04711 YYSTYPE *yyvsp;
04712
04713 YYSIZE_T yystacksize;
04714
04715 int yyn;
04716 int yyresult;
04717
04718 int yytoken;
04719
04720
04721 YYSTYPE yyval;
04722
04723 #if YYERROR_VERBOSE
04724
04725 char yymsgbuf[128];
04726 char *yymsg = yymsgbuf;
04727 YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
04728 #endif
04729
04730 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
04731
04732
04733
04734 int yylen = 0;
04735
04736 yytoken = 0;
04737 yyss = yyssa;
04738 yyvs = yyvsa;
04739 yystacksize = YYINITDEPTH;
04740
04741 YYDPRINTF ((stderr, "Starting parse\n"));
04742
04743 yystate = 0;
04744 yyerrstatus = 0;
04745 yynerrs = 0;
04746 yychar = YYEMPTY;
04747
04748
04749
04750
04751
04752 yyssp = yyss;
04753 yyvsp = yyvs;
04754
04755 goto yysetstate;
04756
04757
04758
04759
04760 yynewstate:
04761
04762
04763 yyssp++;
04764
04765 yysetstate:
04766 *yyssp = yystate;
04767
04768 if (yyss + yystacksize - 1 <= yyssp)
04769 {
04770
04771 YYSIZE_T yysize = yyssp - yyss + 1;
04772
04773 #ifdef yyoverflow
04774 {
04775
04776
04777
04778 YYSTYPE *yyvs1 = yyvs;
04779 yytype_int16 *yyss1 = yyss;
04780
04781
04782
04783
04784
04785 yyoverflow (YY_("memory exhausted"),
04786 &yyss1, yysize * sizeof (*yyssp),
04787 &yyvs1, yysize * sizeof (*yyvsp),
04788 &yystacksize);
04789
04790 yyss = yyss1;
04791 yyvs = yyvs1;
04792 }
04793 #else
04794 # ifndef YYSTACK_RELOCATE
04795 goto yyexhaustedlab;
04796 # else
04797
04798 if (YYMAXDEPTH <= yystacksize)
04799 goto yyexhaustedlab;
04800 yystacksize *= 2;
04801 if (YYMAXDEPTH < yystacksize)
04802 yystacksize = YYMAXDEPTH;
04803
04804 {
04805 yytype_int16 *yyss1 = yyss;
04806 union yyalloc *yyptr =
04807 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
04808 if (! yyptr)
04809 goto yyexhaustedlab;
04810 YYSTACK_RELOCATE (yyss_alloc, yyss);
04811 YYSTACK_RELOCATE (yyvs_alloc, yyvs);
04812 # undef YYSTACK_RELOCATE
04813 if (yyss1 != yyssa)
04814 YYSTACK_FREE (yyss1);
04815 }
04816 # endif
04817 #endif
04818
04819 yyssp = yyss + yysize - 1;
04820 yyvsp = yyvs + yysize - 1;
04821
04822 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
04823 (unsigned long int) yystacksize));
04824
04825 if (yyss + yystacksize - 1 <= yyssp)
04826 YYABORT;
04827 }
04828
04829 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
04830
04831 if (yystate == YYFINAL)
04832 YYACCEPT;
04833
04834 goto yybackup;
04835
04836
04837
04838
04839 yybackup:
04840
04841
04842
04843
04844
04845 yyn = yypact[yystate];
04846 if (yyn == YYPACT_NINF)
04847 goto yydefault;
04848
04849
04850
04851
04852 if (yychar == YYEMPTY)
04853 {
04854 YYDPRINTF ((stderr, "Reading a token: "));
04855 yychar = YYLEX;
04856 }
04857
04858 if (yychar <= YYEOF)
04859 {
04860 yychar = yytoken = YYEOF;
04861 YYDPRINTF ((stderr, "Now at end of input.\n"));
04862 }
04863 else
04864 {
04865 yytoken = YYTRANSLATE (yychar);
04866 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
04867 }
04868
04869
04870
04871 yyn += yytoken;
04872 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
04873 goto yydefault;
04874 yyn = yytable[yyn];
04875 if (yyn <= 0)
04876 {
04877 if (yyn == 0 || yyn == YYTABLE_NINF)
04878 goto yyerrlab;
04879 yyn = -yyn;
04880 goto yyreduce;
04881 }
04882
04883
04884
04885 if (yyerrstatus)
04886 yyerrstatus--;
04887
04888
04889 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
04890
04891
04892 yychar = YYEMPTY;
04893
04894 yystate = yyn;
04895 *++yyvsp = yylval;
04896
04897 goto yynewstate;
04898
04899
04900
04901
04902
04903 yydefault:
04904 yyn = yydefact[yystate];
04905 if (yyn == 0)
04906 goto yyerrlab;
04907 goto yyreduce;
04908
04909
04910
04911
04912
04913 yyreduce:
04914
04915 yylen = yyr2[yyn];
04916
04917
04918
04919
04920
04921
04922
04923
04924
04925 yyval = yyvsp[1-yylen];
04926
04927
04928 YY_REDUCE_PRINT (yyn);
04929 switch (yyn)
04930 {
04931 case 2:
04932
04933
04934 #line 786 "parse.y"
04935 {
04936 lex_state = EXPR_BEG;
04937
04938 local_push(compile_for_eval || rb_parse_in_main());
04939
04940
04941
04942 ;}
04943 break;
04944
04945 case 3:
04946
04947
04948 #line 795 "parse.y"
04949 {
04950
04951 if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
04952
04953 if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
04954 else {
04955 NODE *node = (yyvsp[(2) - (2)].node);
04956 while (node->nd_next) {
04957 node = node->nd_next;
04958 }
04959 void_expr(node->nd_head);
04960 }
04961 }
04962 ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
04963
04964
04965
04966
04967 local_pop();
04968 ;}
04969 break;
04970
04971 case 4:
04972
04973
04974 #line 818 "parse.y"
04975 {
04976
04977 void_stmts((yyvsp[(1) - (2)].node));
04978 fixup_nodes(&deferred_nodes);
04979
04980
04981 (yyval.node) = (yyvsp[(1) - (2)].node);
04982 ;}
04983 break;
04984
04985 case 5:
04986
04987
04988 #line 829 "parse.y"
04989 {
04990
04991 (yyval.node) = NEW_BEGIN(0);
04992
04993
04994
04995
04996 ;}
04997 break;
04998
04999 case 6:
05000
05001
05002 #line 838 "parse.y"
05003 {
05004
05005 (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05006
05007
05008
05009 ;}
05010 break;
05011
05012 case 7:
05013
05014
05015 #line 846 "parse.y"
05016 {
05017
05018 (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05019
05020
05021
05022 ;}
05023 break;
05024
05025 case 8:
05026
05027
05028 #line 854 "parse.y"
05029 {
05030 (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05031 ;}
05032 break;
05033
05034 case 10:
05035
05036
05037 #line 861 "parse.y"
05038 {
05039 if (in_def || in_single) {
05040 yyerror("BEGIN in method");
05041 }
05042
05043
05044
05045
05046 ;}
05047 break;
05048
05049 case 11:
05050
05051
05052 #line 871 "parse.y"
05053 {
05054
05055 ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
05056 (yyvsp[(4) - (5)].node));
05057
05058
05059 (yyval.node) = NEW_BEGIN(0);
05060
05061
05062
05063 ;}
05064 break;
05065
05066 case 12:
05067
05068
05069 #line 888 "parse.y"
05070 {
05071
05072 (yyval.node) = (yyvsp[(1) - (4)].node);
05073 if ((yyvsp[(2) - (4)].node)) {
05074 (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
05075 }
05076 else if ((yyvsp[(3) - (4)].node)) {
05077 rb_warn0("else without rescue is useless");
05078 (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
05079 }
05080 if ((yyvsp[(4) - (4)].node)) {
05081 if ((yyval.node)) {
05082 (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
05083 }
05084 else {
05085 (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
05086 }
05087 }
05088 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05089
05090
05091
05092
05093
05094
05095
05096 ;}
05097 break;
05098
05099 case 13:
05100
05101
05102 #line 918 "parse.y"
05103 {
05104
05105 void_stmts((yyvsp[(1) - (2)].node));
05106 fixup_nodes(&deferred_nodes);
05107
05108
05109 (yyval.node) = (yyvsp[(1) - (2)].node);
05110 ;}
05111 break;
05112
05113 case 14:
05114
05115
05116 #line 929 "parse.y"
05117 {
05118
05119 (yyval.node) = NEW_BEGIN(0);
05120
05121
05122
05123
05124 ;}
05125 break;
05126
05127 case 15:
05128
05129
05130 #line 938 "parse.y"
05131 {
05132
05133 (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05134
05135
05136
05137 ;}
05138 break;
05139
05140 case 16:
05141
05142
05143 #line 946 "parse.y"
05144 {
05145
05146 (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05147
05148
05149
05150 ;}
05151 break;
05152
05153 case 17:
05154
05155
05156 #line 954 "parse.y"
05157 {
05158 (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05159 ;}
05160 break;
05161
05162 case 18:
05163
05164
05165 #line 959 "parse.y"
05166 {lex_state = EXPR_FNAME;;}
05167 break;
05168
05169 case 19:
05170
05171
05172 #line 960 "parse.y"
05173 {
05174
05175 (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
05176
05177
05178
05179 ;}
05180 break;
05181
05182 case 20:
05183
05184
05185 #line 968 "parse.y"
05186 {
05187
05188 (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
05189
05190
05191
05192 ;}
05193 break;
05194
05195 case 21:
05196
05197
05198 #line 976 "parse.y"
05199 {
05200
05201 char buf[2];
05202 buf[0] = '$';
05203 buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
05204 (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
05205
05206
05207
05208 ;}
05209 break;
05210
05211 case 22:
05212
05213
05214 #line 987 "parse.y"
05215 {
05216
05217 yyerror("can't make alias for the number variables");
05218 (yyval.node) = NEW_BEGIN(0);
05219
05220
05221
05222
05223 ;}
05224 break;
05225
05226 case 23:
05227
05228
05229 #line 997 "parse.y"
05230 {
05231
05232 (yyval.node) = (yyvsp[(2) - (2)].node);
05233
05234
05235
05236 ;}
05237 break;
05238
05239 case 24:
05240
05241
05242 #line 1005 "parse.y"
05243 {
05244
05245 (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05246 fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05247
05248
05249
05250 ;}
05251 break;
05252
05253 case 25:
05254
05255
05256 #line 1014 "parse.y"
05257 {
05258
05259 (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05260 fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05261
05262
05263
05264 ;}
05265 break;
05266
05267 case 26:
05268
05269
05270 #line 1023 "parse.y"
05271 {
05272
05273 if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05274 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05275 }
05276 else {
05277 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05278 }
05279
05280
05281
05282 ;}
05283 break;
05284
05285 case 27:
05286
05287
05288 #line 1036 "parse.y"
05289 {
05290
05291 if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05292 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05293 }
05294 else {
05295 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05296 }
05297
05298
05299
05300 ;}
05301 break;
05302
05303 case 28:
05304
05305
05306 #line 1049 "parse.y"
05307 {
05308
05309 NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
05310 (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
05311
05312
05313
05314 ;}
05315 break;
05316
05317 case 29:
05318
05319
05320 #line 1058 "parse.y"
05321 {
05322 if (in_def || in_single) {
05323 rb_warn0("END in method; use at_exit");
05324 }
05325
05326 (yyval.node) = NEW_POSTEXE(NEW_NODE(
05327 NODE_SCOPE, 0 , (yyvsp[(3) - (4)].node) , 0 ));
05328
05329
05330
05331 ;}
05332 break;
05333
05334 case 30:
05335
05336
05337 #line 1070 "parse.y"
05338 {
05339
05340 value_expr((yyvsp[(3) - (3)].node));
05341 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05342
05343
05344
05345 ;}
05346 break;
05347
05348 case 31:
05349
05350
05351 #line 1079 "parse.y"
05352 {
05353
05354 value_expr((yyvsp[(3) - (3)].node));
05355 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05356 (yyval.node) = (yyvsp[(1) - (3)].node);
05357
05358
05359
05360 ;}
05361 break;
05362
05363 case 32:
05364
05365
05366 #line 1089 "parse.y"
05367 {
05368
05369 value_expr((yyvsp[(3) - (3)].node));
05370 if ((yyvsp[(1) - (3)].node)) {
05371 ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
05372 if ((yyvsp[(2) - (3)].id) == tOROP) {
05373 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05374 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
05375 if (is_asgn_or_id(vid)) {
05376 (yyval.node)->nd_aid = vid;
05377 }
05378 }
05379 else if ((yyvsp[(2) - (3)].id) == tANDOP) {
05380 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05381 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
05382 }
05383 else {
05384 (yyval.node) = (yyvsp[(1) - (3)].node);
05385 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
05386 }
05387 }
05388 else {
05389 (yyval.node) = NEW_BEGIN(0);
05390 }
05391
05392
05393
05394 ;}
05395 break;
05396
05397 case 33:
05398
05399
05400 #line 1118 "parse.y"
05401 {
05402
05403 NODE *args;
05404
05405 value_expr((yyvsp[(6) - (6)].node));
05406 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
05407 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
05408 if ((yyvsp[(5) - (6)].id) == tOROP) {
05409 (yyvsp[(5) - (6)].id) = 0;
05410 }
05411 else if ((yyvsp[(5) - (6)].id) == tANDOP) {
05412 (yyvsp[(5) - (6)].id) = 1;
05413 }
05414 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
05415 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
05416
05417
05418
05419
05420 ;}
05421 break;
05422
05423 case 34:
05424
05425
05426 #line 1139 "parse.y"
05427 {
05428
05429 value_expr((yyvsp[(5) - (5)].node));
05430 if ((yyvsp[(4) - (5)].id) == tOROP) {
05431 (yyvsp[(4) - (5)].id) = 0;
05432 }
05433 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05434 (yyvsp[(4) - (5)].id) = 1;
05435 }
05436 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05437 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05438
05439
05440
05441
05442 ;}
05443 break;
05444
05445 case 35:
05446
05447
05448 #line 1156 "parse.y"
05449 {
05450
05451 value_expr((yyvsp[(5) - (5)].node));
05452 if ((yyvsp[(4) - (5)].id) == tOROP) {
05453 (yyvsp[(4) - (5)].id) = 0;
05454 }
05455 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05456 (yyvsp[(4) - (5)].id) = 1;
05457 }
05458 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05459 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05460
05461
05462
05463
05464 ;}
05465 break;
05466
05467 case 36:
05468
05469
05470 #line 1173 "parse.y"
05471 {
05472 yyerror("constant re-assignment");
05473 (yyval.node) = 0;
05474 ;}
05475 break;
05476
05477 case 37:
05478
05479
05480 #line 1178 "parse.y"
05481 {
05482
05483 value_expr((yyvsp[(5) - (5)].node));
05484 if ((yyvsp[(4) - (5)].id) == tOROP) {
05485 (yyvsp[(4) - (5)].id) = 0;
05486 }
05487 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05488 (yyvsp[(4) - (5)].id) = 1;
05489 }
05490 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05491 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05492
05493
05494
05495
05496 ;}
05497 break;
05498
05499 case 38:
05500
05501
05502 #line 1195 "parse.y"
05503 {
05504
05505 rb_backref_error((yyvsp[(1) - (3)].node));
05506 (yyval.node) = NEW_BEGIN(0);
05507
05508
05509
05510
05511 ;}
05512 break;
05513
05514 case 39:
05515
05516
05517 #line 1205 "parse.y"
05518 {
05519
05520 value_expr((yyvsp[(3) - (3)].node));
05521 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05522
05523
05524
05525 ;}
05526 break;
05527
05528 case 40:
05529
05530
05531 #line 1214 "parse.y"
05532 {
05533
05534 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05535 (yyval.node) = (yyvsp[(1) - (3)].node);
05536
05537
05538
05539 ;}
05540 break;
05541
05542 case 41:
05543
05544
05545 #line 1223 "parse.y"
05546 {
05547
05548 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05549 (yyval.node) = (yyvsp[(1) - (3)].node);
05550
05551
05552
05553 ;}
05554 break;
05555
05556 case 44:
05557
05558
05559 #line 1236 "parse.y"
05560 {
05561
05562 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05563
05564
05565
05566 ;}
05567 break;
05568
05569 case 45:
05570
05571
05572 #line 1244 "parse.y"
05573 {
05574
05575 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05576
05577
05578
05579 ;}
05580 break;
05581
05582 case 46:
05583
05584
05585 #line 1252 "parse.y"
05586 {
05587
05588 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
05589
05590
05591
05592 ;}
05593 break;
05594
05595 case 47:
05596
05597
05598 #line 1260 "parse.y"
05599 {
05600
05601 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
05602
05603
05604
05605 ;}
05606 break;
05607
05608 case 49:
05609
05610
05611 #line 1271 "parse.y"
05612 {
05613
05614 value_expr((yyvsp[(1) - (1)].node));
05615 (yyval.node) = (yyvsp[(1) - (1)].node);
05616 if (!(yyval.node)) (yyval.node) = NEW_NIL();
05617
05618
05619
05620 ;}
05621 break;
05622
05623 case 53:
05624
05625
05626 #line 1288 "parse.y"
05627 {
05628
05629 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05630
05631
05632
05633
05634 ;}
05635 break;
05636
05637 case 54:
05638
05639
05640 #line 1297 "parse.y"
05641 {
05642
05643 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05644
05645
05646
05647
05648 ;}
05649 break;
05650
05651 case 55:
05652
05653
05654 #line 1308 "parse.y"
05655 {
05656 (yyvsp[(1) - (1)].vars) = dyna_push();
05657
05658 (yyval.num) = ruby_sourceline;
05659
05660
05661 ;}
05662 break;
05663
05664 case 56:
05665
05666
05667 #line 1318 "parse.y"
05668 {
05669
05670 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
05671 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
05672
05673
05674
05675 dyna_pop((yyvsp[(1) - (5)].vars));
05676 ;}
05677 break;
05678
05679 case 57:
05680
05681
05682 #line 1330 "parse.y"
05683 {
05684
05685 (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
05686 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05687
05688
05689
05690 ;}
05691 break;
05692
05693 case 58:
05694
05695
05696 #line 1339 "parse.y"
05697 {
05698
05699 block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
05700 (yyvsp[(3) - (3)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].node));
05701 (yyval.node) = (yyvsp[(3) - (3)].node);
05702 fixpos((yyval.node), (yyvsp[(2) - (3)].node));
05703
05704
05705
05706
05707 ;}
05708 break;
05709
05710 case 59:
05711
05712
05713 #line 1351 "parse.y"
05714 {
05715
05716 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05717 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05718
05719
05720
05721 ;}
05722 break;
05723
05724 case 60:
05725
05726
05727 #line 1360 "parse.y"
05728 {
05729
05730 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05731 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05732 (yyval.node) = (yyvsp[(5) - (5)].node);
05733 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05734
05735
05736
05737
05738 ;}
05739 break;
05740
05741 case 61:
05742
05743
05744 #line 1372 "parse.y"
05745 {
05746
05747 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05748 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05749
05750
05751
05752 ;}
05753 break;
05754
05755 case 62:
05756
05757
05758 #line 1381 "parse.y"
05759 {
05760
05761 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05762 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05763 (yyval.node) = (yyvsp[(5) - (5)].node);
05764 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05765
05766
05767
05768
05769 ;}
05770 break;
05771
05772 case 63:
05773
05774
05775 #line 1393 "parse.y"
05776 {
05777
05778 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
05779 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05780
05781
05782
05783 ;}
05784 break;
05785
05786 case 64:
05787
05788
05789 #line 1402 "parse.y"
05790 {
05791
05792 (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
05793 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05794
05795
05796
05797 ;}
05798 break;
05799
05800 case 65:
05801
05802
05803 #line 1411 "parse.y"
05804 {
05805
05806 (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
05807
05808
05809
05810 ;}
05811 break;
05812
05813 case 66:
05814
05815
05816 #line 1419 "parse.y"
05817 {
05818
05819 (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
05820
05821
05822
05823 ;}
05824 break;
05825
05826 case 67:
05827
05828
05829 #line 1427 "parse.y"
05830 {
05831
05832 (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
05833
05834
05835
05836 ;}
05837 break;
05838
05839 case 69:
05840
05841
05842 #line 1438 "parse.y"
05843 {
05844
05845 (yyval.node) = (yyvsp[(2) - (3)].node);
05846
05847
05848
05849 ;}
05850 break;
05851
05852 case 71:
05853
05854
05855 #line 1449 "parse.y"
05856 {
05857
05858 (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
05859
05860
05861
05862 ;}
05863 break;
05864
05865 case 72:
05866
05867
05868 #line 1459 "parse.y"
05869 {
05870
05871 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
05872
05873
05874
05875 ;}
05876 break;
05877
05878 case 73:
05879
05880
05881 #line 1467 "parse.y"
05882 {
05883
05884 (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
05885
05886
05887
05888 ;}
05889 break;
05890
05891 case 74:
05892
05893
05894 #line 1475 "parse.y"
05895 {
05896
05897 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05898
05899
05900
05901 ;}
05902 break;
05903
05904 case 75:
05905
05906
05907 #line 1483 "parse.y"
05908 {
05909
05910 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
05911
05912
05913
05914
05915 ;}
05916 break;
05917
05918 case 76:
05919
05920
05921 #line 1492 "parse.y"
05922 {
05923
05924 (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
05925
05926
05927
05928 ;}
05929 break;
05930
05931 case 77:
05932
05933
05934 #line 1500 "parse.y"
05935 {
05936
05937 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
05938
05939
05940
05941 ;}
05942 break;
05943
05944 case 78:
05945
05946
05947 #line 1508 "parse.y"
05948 {
05949
05950 (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
05951
05952
05953
05954 ;}
05955 break;
05956
05957 case 79:
05958
05959
05960 #line 1516 "parse.y"
05961 {
05962
05963 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
05964
05965
05966
05967 ;}
05968 break;
05969
05970 case 80:
05971
05972
05973 #line 1524 "parse.y"
05974 {
05975
05976 (yyval.node) = NEW_MASGN(0, -1);
05977
05978
05979
05980 ;}
05981 break;
05982
05983 case 81:
05984
05985
05986 #line 1532 "parse.y"
05987 {
05988
05989 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
05990
05991
05992
05993 ;}
05994 break;
05995
05996 case 83:
05997
05998
05999 #line 1543 "parse.y"
06000 {
06001
06002 (yyval.node) = (yyvsp[(2) - (3)].node);
06003
06004
06005
06006 ;}
06007 break;
06008
06009 case 84:
06010
06011
06012 #line 1553 "parse.y"
06013 {
06014
06015 (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
06016
06017
06018
06019 ;}
06020 break;
06021
06022 case 85:
06023
06024
06025 #line 1561 "parse.y"
06026 {
06027
06028 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
06029
06030
06031
06032 ;}
06033 break;
06034
06035 case 86:
06036
06037
06038 #line 1571 "parse.y"
06039 {
06040
06041 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
06042
06043
06044
06045 ;}
06046 break;
06047
06048 case 87:
06049
06050
06051 #line 1579 "parse.y"
06052 {
06053
06054 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06055
06056
06057
06058 ;}
06059 break;
06060
06061 case 88:
06062
06063
06064 #line 1589 "parse.y"
06065 {
06066 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06067 ;}
06068 break;
06069
06070 case 89:
06071
06072
06073 #line 1593 "parse.y"
06074 {
06075
06076 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06077
06078
06079
06080 ;}
06081 break;
06082
06083 case 90:
06084
06085
06086 #line 1601 "parse.y"
06087 {
06088
06089 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06090
06091
06092
06093 ;}
06094 break;
06095
06096 case 91:
06097
06098
06099 #line 1609 "parse.y"
06100 {
06101
06102 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06103
06104
06105
06106 ;}
06107 break;
06108
06109 case 92:
06110
06111
06112 #line 1617 "parse.y"
06113 {
06114
06115 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06116
06117
06118
06119 ;}
06120 break;
06121
06122 case 93:
06123
06124
06125 #line 1625 "parse.y"
06126 {
06127
06128 if (in_def || in_single)
06129 yyerror("dynamic constant assignment");
06130 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06131
06132
06133
06134
06135
06136 ;}
06137 break;
06138
06139 case 94:
06140
06141
06142 #line 1637 "parse.y"
06143 {
06144
06145 if (in_def || in_single)
06146 yyerror("dynamic constant assignment");
06147 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06148
06149
06150
06151 ;}
06152 break;
06153
06154 case 95:
06155
06156
06157 #line 1647 "parse.y"
06158 {
06159
06160 rb_backref_error((yyvsp[(1) - (1)].node));
06161 (yyval.node) = NEW_BEGIN(0);
06162
06163
06164
06165
06166 ;}
06167 break;
06168
06169 case 96:
06170
06171
06172 #line 1659 "parse.y"
06173 {
06174 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06175
06176 if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06177
06178
06179
06180 ;}
06181 break;
06182
06183 case 97:
06184
06185
06186 #line 1668 "parse.y"
06187 {
06188
06189 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06190
06191
06192
06193 ;}
06194 break;
06195
06196 case 98:
06197
06198
06199 #line 1676 "parse.y"
06200 {
06201
06202 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06203
06204
06205
06206 ;}
06207 break;
06208
06209 case 99:
06210
06211
06212 #line 1684 "parse.y"
06213 {
06214
06215 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06216
06217
06218
06219 ;}
06220 break;
06221
06222 case 100:
06223
06224
06225 #line 1692 "parse.y"
06226 {
06227
06228 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06229
06230
06231
06232 ;}
06233 break;
06234
06235 case 101:
06236
06237
06238 #line 1700 "parse.y"
06239 {
06240
06241 if (in_def || in_single)
06242 yyerror("dynamic constant assignment");
06243 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06244
06245
06246
06247
06248
06249
06250 ;}
06251 break;
06252
06253 case 102:
06254
06255
06256 #line 1713 "parse.y"
06257 {
06258
06259 if (in_def || in_single)
06260 yyerror("dynamic constant assignment");
06261 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06262
06263
06264
06265
06266
06267
06268 ;}
06269 break;
06270
06271 case 103:
06272
06273
06274 #line 1726 "parse.y"
06275 {
06276
06277 rb_backref_error((yyvsp[(1) - (1)].node));
06278 (yyval.node) = NEW_BEGIN(0);
06279
06280
06281
06282 ;}
06283 break;
06284
06285 case 104:
06286
06287
06288 #line 1737 "parse.y"
06289 {
06290
06291 yyerror("class/module name must be CONSTANT");
06292
06293
06294
06295 ;}
06296 break;
06297
06298 case 106:
06299
06300
06301 #line 1748 "parse.y"
06302 {
06303
06304 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
06305
06306
06307
06308 ;}
06309 break;
06310
06311 case 107:
06312
06313
06314 #line 1756 "parse.y"
06315 {
06316
06317 (yyval.node) = NEW_COLON2(0, (yyval.node));
06318
06319
06320
06321 ;}
06322 break;
06323
06324 case 108:
06325
06326
06327 #line 1764 "parse.y"
06328 {
06329
06330 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06331
06332
06333
06334 ;}
06335 break;
06336
06337 case 112:
06338
06339
06340 #line 1777 "parse.y"
06341 {
06342 lex_state = EXPR_ENDFN;
06343 (yyval.id) = (yyvsp[(1) - (1)].id);
06344 ;}
06345 break;
06346
06347 case 113:
06348
06349
06350 #line 1782 "parse.y"
06351 {
06352 lex_state = EXPR_ENDFN;
06353
06354 (yyval.id) = (yyvsp[(1) - (1)].id);
06355
06356
06357
06358 ;}
06359 break;
06360
06361 case 116:
06362
06363
06364 #line 1797 "parse.y"
06365 {
06366
06367 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
06368
06369
06370
06371 ;}
06372 break;
06373
06374 case 118:
06375
06376
06377 #line 1808 "parse.y"
06378 {
06379
06380 (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
06381
06382
06383
06384 ;}
06385 break;
06386
06387 case 119:
06388
06389
06390 #line 1815 "parse.y"
06391 {lex_state = EXPR_FNAME;;}
06392 break;
06393
06394 case 120:
06395
06396
06397 #line 1816 "parse.y"
06398 {
06399
06400 (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
06401
06402
06403
06404 ;}
06405 break;
06406
06407 case 121:
06408
06409
06410 #line 1825 "parse.y"
06411 { ifndef_ripper((yyval.id) = '|'); ;}
06412 break;
06413
06414 case 122:
06415
06416
06417 #line 1826 "parse.y"
06418 { ifndef_ripper((yyval.id) = '^'); ;}
06419 break;
06420
06421 case 123:
06422
06423
06424 #line 1827 "parse.y"
06425 { ifndef_ripper((yyval.id) = '&'); ;}
06426 break;
06427
06428 case 124:
06429
06430
06431 #line 1828 "parse.y"
06432 { ifndef_ripper((yyval.id) = tCMP); ;}
06433 break;
06434
06435 case 125:
06436
06437
06438 #line 1829 "parse.y"
06439 { ifndef_ripper((yyval.id) = tEQ); ;}
06440 break;
06441
06442 case 126:
06443
06444
06445 #line 1830 "parse.y"
06446 { ifndef_ripper((yyval.id) = tEQQ); ;}
06447 break;
06448
06449 case 127:
06450
06451
06452 #line 1831 "parse.y"
06453 { ifndef_ripper((yyval.id) = tMATCH); ;}
06454 break;
06455
06456 case 128:
06457
06458
06459 #line 1832 "parse.y"
06460 { ifndef_ripper((yyval.id) = tNMATCH); ;}
06461 break;
06462
06463 case 129:
06464
06465
06466 #line 1833 "parse.y"
06467 { ifndef_ripper((yyval.id) = '>'); ;}
06468 break;
06469
06470 case 130:
06471
06472
06473 #line 1834 "parse.y"
06474 { ifndef_ripper((yyval.id) = tGEQ); ;}
06475 break;
06476
06477 case 131:
06478
06479
06480 #line 1835 "parse.y"
06481 { ifndef_ripper((yyval.id) = '<'); ;}
06482 break;
06483
06484 case 132:
06485
06486
06487 #line 1836 "parse.y"
06488 { ifndef_ripper((yyval.id) = tLEQ); ;}
06489 break;
06490
06491 case 133:
06492
06493
06494 #line 1837 "parse.y"
06495 { ifndef_ripper((yyval.id) = tNEQ); ;}
06496 break;
06497
06498 case 134:
06499
06500
06501 #line 1838 "parse.y"
06502 { ifndef_ripper((yyval.id) = tLSHFT); ;}
06503 break;
06504
06505 case 135:
06506
06507
06508 #line 1839 "parse.y"
06509 { ifndef_ripper((yyval.id) = tRSHFT); ;}
06510 break;
06511
06512 case 136:
06513
06514
06515 #line 1840 "parse.y"
06516 { ifndef_ripper((yyval.id) = '+'); ;}
06517 break;
06518
06519 case 137:
06520
06521
06522 #line 1841 "parse.y"
06523 { ifndef_ripper((yyval.id) = '-'); ;}
06524 break;
06525
06526 case 138:
06527
06528
06529 #line 1842 "parse.y"
06530 { ifndef_ripper((yyval.id) = '*'); ;}
06531 break;
06532
06533 case 139:
06534
06535
06536 #line 1843 "parse.y"
06537 { ifndef_ripper((yyval.id) = '*'); ;}
06538 break;
06539
06540 case 140:
06541
06542
06543 #line 1844 "parse.y"
06544 { ifndef_ripper((yyval.id) = '/'); ;}
06545 break;
06546
06547 case 141:
06548
06549
06550 #line 1845 "parse.y"
06551 { ifndef_ripper((yyval.id) = '%'); ;}
06552 break;
06553
06554 case 142:
06555
06556
06557 #line 1846 "parse.y"
06558 { ifndef_ripper((yyval.id) = tPOW); ;}
06559 break;
06560
06561 case 143:
06562
06563
06564 #line 1847 "parse.y"
06565 { ifndef_ripper((yyval.id) = '!'); ;}
06566 break;
06567
06568 case 144:
06569
06570
06571 #line 1848 "parse.y"
06572 { ifndef_ripper((yyval.id) = '~'); ;}
06573 break;
06574
06575 case 145:
06576
06577
06578 #line 1849 "parse.y"
06579 { ifndef_ripper((yyval.id) = tUPLUS); ;}
06580 break;
06581
06582 case 146:
06583
06584
06585 #line 1850 "parse.y"
06586 { ifndef_ripper((yyval.id) = tUMINUS); ;}
06587 break;
06588
06589 case 147:
06590
06591
06592 #line 1851 "parse.y"
06593 { ifndef_ripper((yyval.id) = tAREF); ;}
06594 break;
06595
06596 case 148:
06597
06598
06599 #line 1852 "parse.y"
06600 { ifndef_ripper((yyval.id) = tASET); ;}
06601 break;
06602
06603 case 149:
06604
06605
06606 #line 1853 "parse.y"
06607 { ifndef_ripper((yyval.id) = '`'); ;}
06608 break;
06609
06610 case 191:
06611
06612
06613 #line 1871 "parse.y"
06614 {
06615
06616 value_expr((yyvsp[(3) - (3)].node));
06617 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06618
06619
06620
06621 ;}
06622 break;
06623
06624 case 192:
06625
06626
06627 #line 1880 "parse.y"
06628 {
06629
06630 value_expr((yyvsp[(3) - (5)].node));
06631 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06632 (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
06633
06634
06635
06636 ;}
06637 break;
06638
06639 case 193:
06640
06641
06642 #line 1890 "parse.y"
06643 {
06644
06645 value_expr((yyvsp[(3) - (3)].node));
06646 if ((yyvsp[(1) - (3)].node)) {
06647 ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
06648 if ((yyvsp[(2) - (3)].id) == tOROP) {
06649 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06650 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
06651 if (is_asgn_or_id(vid)) {
06652 (yyval.node)->nd_aid = vid;
06653 }
06654 }
06655 else if ((yyvsp[(2) - (3)].id) == tANDOP) {
06656 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06657 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
06658 }
06659 else {
06660 (yyval.node) = (yyvsp[(1) - (3)].node);
06661 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
06662 }
06663 }
06664 else {
06665 (yyval.node) = NEW_BEGIN(0);
06666 }
06667
06668
06669
06670 ;}
06671 break;
06672
06673 case 194:
06674
06675
06676 #line 1919 "parse.y"
06677 {
06678
06679 value_expr((yyvsp[(3) - (5)].node));
06680 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06681 if ((yyvsp[(1) - (5)].node)) {
06682 ID vid = (yyvsp[(1) - (5)].node)->nd_vid;
06683 if ((yyvsp[(2) - (5)].id) == tOROP) {
06684 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06685 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (5)].node));
06686 if (is_asgn_or_id(vid)) {
06687 (yyval.node)->nd_aid = vid;
06688 }
06689 }
06690 else if ((yyvsp[(2) - (5)].id) == tANDOP) {
06691 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06692 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (5)].node));
06693 }
06694 else {
06695 (yyval.node) = (yyvsp[(1) - (5)].node);
06696 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (5)].id), NEW_LIST((yyvsp[(3) - (5)].node)));
06697 }
06698 }
06699 else {
06700 (yyval.node) = NEW_BEGIN(0);
06701 }
06702
06703
06704
06705
06706 ;}
06707 break;
06708
06709 case 195:
06710
06711
06712 #line 1950 "parse.y"
06713 {
06714
06715 NODE *args;
06716
06717 value_expr((yyvsp[(6) - (6)].node));
06718 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
06719 if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
06720 args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06721 }
06722 else {
06723 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06724 }
06725 if ((yyvsp[(5) - (6)].id) == tOROP) {
06726 (yyvsp[(5) - (6)].id) = 0;
06727 }
06728 else if ((yyvsp[(5) - (6)].id) == tANDOP) {
06729 (yyvsp[(5) - (6)].id) = 1;
06730 }
06731 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
06732 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
06733
06734
06735
06736
06737 ;}
06738 break;
06739
06740 case 196:
06741
06742
06743 #line 1976 "parse.y"
06744 {
06745
06746 value_expr((yyvsp[(5) - (5)].node));
06747 if ((yyvsp[(4) - (5)].id) == tOROP) {
06748 (yyvsp[(4) - (5)].id) = 0;
06749 }
06750 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06751 (yyvsp[(4) - (5)].id) = 1;
06752 }
06753 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06754 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06755
06756
06757
06758
06759 ;}
06760 break;
06761
06762 case 197:
06763
06764
06765 #line 1993 "parse.y"
06766 {
06767
06768 value_expr((yyvsp[(5) - (5)].node));
06769 if ((yyvsp[(4) - (5)].id) == tOROP) {
06770 (yyvsp[(4) - (5)].id) = 0;
06771 }
06772 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06773 (yyvsp[(4) - (5)].id) = 1;
06774 }
06775 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06776 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06777
06778
06779
06780
06781 ;}
06782 break;
06783
06784 case 198:
06785
06786
06787 #line 2010 "parse.y"
06788 {
06789
06790 value_expr((yyvsp[(5) - (5)].node));
06791 if ((yyvsp[(4) - (5)].id) == tOROP) {
06792 (yyvsp[(4) - (5)].id) = 0;
06793 }
06794 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06795 (yyvsp[(4) - (5)].id) = 1;
06796 }
06797 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06798 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06799
06800
06801
06802
06803 ;}
06804 break;
06805
06806 case 199:
06807
06808
06809 #line 2027 "parse.y"
06810 {
06811
06812 yyerror("constant re-assignment");
06813 (yyval.node) = NEW_BEGIN(0);
06814
06815
06816
06817
06818
06819 ;}
06820 break;
06821
06822 case 200:
06823
06824
06825 #line 2038 "parse.y"
06826 {
06827
06828 yyerror("constant re-assignment");
06829 (yyval.node) = NEW_BEGIN(0);
06830
06831
06832
06833
06834
06835 ;}
06836 break;
06837
06838 case 201:
06839
06840
06841 #line 2049 "parse.y"
06842 {
06843
06844 rb_backref_error((yyvsp[(1) - (3)].node));
06845 (yyval.node) = NEW_BEGIN(0);
06846
06847
06848
06849
06850
06851 ;}
06852 break;
06853
06854 case 202:
06855
06856
06857 #line 2060 "parse.y"
06858 {
06859
06860 value_expr((yyvsp[(1) - (3)].node));
06861 value_expr((yyvsp[(3) - (3)].node));
06862 (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06863 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
06864 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
06865 deferred_nodes = list_append(deferred_nodes, (yyval.node));
06866 }
06867
06868
06869
06870 ;}
06871 break;
06872
06873 case 203:
06874
06875
06876 #line 2074 "parse.y"
06877 {
06878
06879 value_expr((yyvsp[(1) - (3)].node));
06880 value_expr((yyvsp[(3) - (3)].node));
06881 (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06882 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
06883 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
06884 deferred_nodes = list_append(deferred_nodes, (yyval.node));
06885 }
06886
06887
06888
06889 ;}
06890 break;
06891
06892 case 204:
06893
06894
06895 #line 2088 "parse.y"
06896 {
06897
06898 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
06899
06900
06901
06902 ;}
06903 break;
06904
06905 case 205:
06906
06907
06908 #line 2096 "parse.y"
06909 {
06910
06911 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
06912
06913
06914
06915 ;}
06916 break;
06917
06918 case 206:
06919
06920
06921 #line 2104 "parse.y"
06922 {
06923
06924 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
06925
06926
06927
06928 ;}
06929 break;
06930
06931 case 207:
06932
06933
06934 #line 2112 "parse.y"
06935 {
06936
06937 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
06938
06939
06940
06941 ;}
06942 break;
06943
06944 case 208:
06945
06946
06947 #line 2120 "parse.y"
06948 {
06949
06950 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
06951
06952
06953
06954 ;}
06955 break;
06956
06957 case 209:
06958
06959
06960 #line 2128 "parse.y"
06961 {
06962
06963 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
06964
06965
06966
06967 ;}
06968 break;
06969
06970 case 210:
06971
06972
06973 #line 2136 "parse.y"
06974 {
06975
06976 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
06977
06978
06979
06980
06981 ;}
06982 break;
06983
06984 case 211:
06985
06986
06987 #line 2145 "parse.y"
06988 {
06989
06990 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
06991
06992
06993
06994
06995 ;}
06996 break;
06997
06998 case 212:
06999
07000
07001 #line 2154 "parse.y"
07002 {
07003
07004 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
07005
07006
07007
07008 ;}
07009 break;
07010
07011 case 213:
07012
07013
07014 #line 2162 "parse.y"
07015 {
07016
07017 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
07018
07019
07020
07021 ;}
07022 break;
07023
07024 case 214:
07025
07026
07027 #line 2170 "parse.y"
07028 {
07029
07030 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
07031
07032
07033
07034 ;}
07035 break;
07036
07037 case 215:
07038
07039
07040 #line 2178 "parse.y"
07041 {
07042
07043 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
07044
07045
07046
07047 ;}
07048 break;
07049
07050 case 216:
07051
07052
07053 #line 2186 "parse.y"
07054 {
07055
07056 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
07057
07058
07059
07060 ;}
07061 break;
07062
07063 case 217:
07064
07065
07066 #line 2194 "parse.y"
07067 {
07068
07069 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
07070
07071
07072
07073 ;}
07074 break;
07075
07076 case 218:
07077
07078
07079 #line 2202 "parse.y"
07080 {
07081
07082 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
07083
07084
07085
07086 ;}
07087 break;
07088
07089 case 219:
07090
07091
07092 #line 2210 "parse.y"
07093 {
07094
07095 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
07096
07097
07098
07099 ;}
07100 break;
07101
07102 case 220:
07103
07104
07105 #line 2218 "parse.y"
07106 {
07107
07108 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
07109
07110
07111
07112 ;}
07113 break;
07114
07115 case 221:
07116
07117
07118 #line 2226 "parse.y"
07119 {
07120
07121 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
07122
07123
07124
07125 ;}
07126 break;
07127
07128 case 222:
07129
07130
07131 #line 2234 "parse.y"
07132 {
07133
07134 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
07135
07136
07137
07138 ;}
07139 break;
07140
07141 case 223:
07142
07143
07144 #line 2242 "parse.y"
07145 {
07146
07147 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
07148
07149
07150
07151 ;}
07152 break;
07153
07154 case 224:
07155
07156
07157 #line 2250 "parse.y"
07158 {
07159
07160 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
07161
07162
07163
07164 ;}
07165 break;
07166
07167 case 225:
07168
07169
07170 #line 2258 "parse.y"
07171 {
07172
07173 (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07174 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && TYPE((yyvsp[(1) - (3)].node)->nd_lit) == T_REGEXP) {
07175 (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
07176 }
07177
07178
07179
07180 ;}
07181 break;
07182
07183 case 226:
07184
07185
07186 #line 2269 "parse.y"
07187 {
07188
07189 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
07190
07191
07192
07193 ;}
07194 break;
07195
07196 case 227:
07197
07198
07199 #line 2277 "parse.y"
07200 {
07201
07202 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
07203
07204
07205
07206 ;}
07207 break;
07208
07209 case 228:
07210
07211
07212 #line 2285 "parse.y"
07213 {
07214
07215 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
07216
07217
07218
07219 ;}
07220 break;
07221
07222 case 229:
07223
07224
07225 #line 2293 "parse.y"
07226 {
07227
07228 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
07229
07230
07231
07232 ;}
07233 break;
07234
07235 case 230:
07236
07237
07238 #line 2301 "parse.y"
07239 {
07240
07241 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
07242
07243
07244
07245 ;}
07246 break;
07247
07248 case 231:
07249
07250
07251 #line 2309 "parse.y"
07252 {
07253
07254 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07255
07256
07257
07258 ;}
07259 break;
07260
07261 case 232:
07262
07263
07264 #line 2317 "parse.y"
07265 {
07266
07267 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07268
07269
07270
07271 ;}
07272 break;
07273
07274 case 233:
07275
07276
07277 #line 2324 "parse.y"
07278 {in_defined = 1;;}
07279 break;
07280
07281 case 234:
07282
07283
07284 #line 2325 "parse.y"
07285 {
07286
07287 in_defined = 0;
07288 (yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node));
07289
07290
07291
07292
07293 ;}
07294 break;
07295
07296 case 235:
07297
07298
07299 #line 2335 "parse.y"
07300 {
07301
07302 value_expr((yyvsp[(1) - (6)].node));
07303 (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
07304 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
07305
07306
07307
07308 ;}
07309 break;
07310
07311 case 236:
07312
07313
07314 #line 2345 "parse.y"
07315 {
07316 (yyval.node) = (yyvsp[(1) - (1)].node);
07317 ;}
07318 break;
07319
07320 case 237:
07321
07322
07323 #line 2351 "parse.y"
07324 {
07325
07326 value_expr((yyvsp[(1) - (1)].node));
07327 (yyval.node) = (yyvsp[(1) - (1)].node);
07328 if (!(yyval.node)) (yyval.node) = NEW_NIL();
07329
07330
07331
07332 ;}
07333 break;
07334
07335 case 239:
07336
07337
07338 #line 2364 "parse.y"
07339 {
07340 (yyval.node) = (yyvsp[(1) - (2)].node);
07341 ;}
07342 break;
07343
07344 case 240:
07345
07346
07347 #line 2368 "parse.y"
07348 {
07349
07350 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07351
07352
07353
07354 ;}
07355 break;
07356
07357 case 241:
07358
07359
07360 #line 2376 "parse.y"
07361 {
07362
07363 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07364
07365
07366
07367 ;}
07368 break;
07369
07370 case 242:
07371
07372
07373 #line 2386 "parse.y"
07374 {
07375
07376 (yyval.node) = (yyvsp[(2) - (3)].node);
07377
07378
07379
07380 ;}
07381 break;
07382
07383 case 247:
07384
07385
07386 #line 2404 "parse.y"
07387 {
07388
07389 value_expr((yyvsp[(1) - (1)].node));
07390 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07391
07392
07393
07394 ;}
07395 break;
07396
07397 case 248:
07398
07399
07400 #line 2413 "parse.y"
07401 {
07402
07403 (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
07404
07405
07406
07407 ;}
07408 break;
07409
07410 case 249:
07411
07412
07413 #line 2421 "parse.y"
07414 {
07415
07416 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07417 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
07418
07419
07420
07421
07422 ;}
07423 break;
07424
07425 case 250:
07426
07427
07428 #line 2431 "parse.y"
07429 {
07430
07431 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07432 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
07433
07434
07435
07436 ;}
07437 break;
07438
07439 case 252:
07440
07441
07442 #line 2448 "parse.y"
07443 {
07444 (yyval.val) = cmdarg_stack;
07445 CMDARG_PUSH(1);
07446 ;}
07447 break;
07448
07449 case 253:
07450
07451
07452 #line 2453 "parse.y"
07453 {
07454
07455 cmdarg_stack = (yyvsp[(1) - (2)].val);
07456 (yyval.node) = (yyvsp[(2) - (2)].node);
07457 ;}
07458 break;
07459
07460 case 254:
07461
07462
07463 #line 2461 "parse.y"
07464 {
07465
07466 (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
07467
07468
07469
07470 ;}
07471 break;
07472
07473 case 255:
07474
07475
07476 #line 2471 "parse.y"
07477 {
07478 (yyval.node) = (yyvsp[(2) - (2)].node);
07479 ;}
07480 break;
07481
07482 case 256:
07483
07484
07485 #line 2475 "parse.y"
07486 {
07487 (yyval.node) = 0;
07488 ;}
07489 break;
07490
07491 case 257:
07492
07493
07494 #line 2479 "parse.y"
07495 {
07496 (yyval.node) = 0;
07497 ;}
07498 break;
07499
07500 case 258:
07501
07502
07503 #line 2485 "parse.y"
07504 {
07505
07506 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07507
07508
07509
07510 ;}
07511 break;
07512
07513 case 259:
07514
07515
07516 #line 2493 "parse.y"
07517 {
07518
07519 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07520
07521
07522
07523 ;}
07524 break;
07525
07526 case 260:
07527
07528
07529 #line 2501 "parse.y"
07530 {
07531
07532 NODE *n1;
07533 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07534 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07535 }
07536 else {
07537 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07538 }
07539
07540
07541
07542 ;}
07543 break;
07544
07545 case 261:
07546
07547
07548 #line 2515 "parse.y"
07549 {
07550
07551 NODE *n1;
07552 if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07553 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07554 }
07555 else {
07556 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07557 }
07558
07559
07560
07561 ;}
07562 break;
07563
07564 case 262:
07565
07566
07567 #line 2531 "parse.y"
07568 {
07569
07570 NODE *n1;
07571 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07572 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07573 }
07574 else {
07575 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07576 }
07577
07578
07579
07580 ;}
07581 break;
07582
07583 case 263:
07584
07585
07586 #line 2545 "parse.y"
07587 {
07588
07589 NODE *n1;
07590 if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
07591 (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07592 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07593 }
07594 else {
07595 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07596 }
07597
07598
07599
07600 ;}
07601 break;
07602
07603 case 264:
07604
07605
07606 #line 2560 "parse.y"
07607 {
07608
07609 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07610
07611
07612
07613 ;}
07614 break;
07615
07616 case 273:
07617
07618
07619 #line 2578 "parse.y"
07620 {
07621
07622 (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
07623
07624
07625
07626 ;}
07627 break;
07628
07629 case 274:
07630
07631
07632 #line 2586 "parse.y"
07633 {
07634
07635 (yyval.num) = ruby_sourceline;
07636
07637
07638 ;}
07639 break;
07640
07641 case 275:
07642
07643
07644 #line 2594 "parse.y"
07645 {
07646
07647 if ((yyvsp[(3) - (4)].node) == NULL) {
07648 (yyval.node) = NEW_NIL();
07649 }
07650 else {
07651 if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
07652 nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
07653 nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
07654 (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
07655 }
07656 nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
07657
07658
07659
07660 ;}
07661 break;
07662
07663 case 276:
07664
07665
07666 #line 2610 "parse.y"
07667 {lex_state = EXPR_ENDARG;;}
07668 break;
07669
07670 case 277:
07671
07672
07673 #line 2611 "parse.y"
07674 {
07675 rb_warning0("(...) interpreted as grouped expression");
07676
07677 (yyval.node) = (yyvsp[(2) - (4)].node);
07678
07679
07680
07681 ;}
07682 break;
07683
07684 case 278:
07685
07686
07687 #line 2620 "parse.y"
07688 {
07689
07690 (yyval.node) = (yyvsp[(2) - (3)].node);
07691
07692
07693
07694 ;}
07695 break;
07696
07697 case 279:
07698
07699
07700 #line 2628 "parse.y"
07701 {
07702
07703 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
07704
07705
07706
07707 ;}
07708 break;
07709
07710 case 280:
07711
07712
07713 #line 2636 "parse.y"
07714 {
07715
07716 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
07717
07718
07719
07720 ;}
07721 break;
07722
07723 case 281:
07724
07725
07726 #line 2644 "parse.y"
07727 {
07728
07729 if ((yyvsp[(2) - (3)].node) == 0) {
07730 (yyval.node) = NEW_ZARRAY();
07731 }
07732 else {
07733 (yyval.node) = (yyvsp[(2) - (3)].node);
07734 }
07735
07736
07737
07738 ;}
07739 break;
07740
07741 case 282:
07742
07743
07744 #line 2657 "parse.y"
07745 {
07746
07747 (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node));
07748
07749
07750
07751 ;}
07752 break;
07753
07754 case 283:
07755
07756
07757 #line 2665 "parse.y"
07758 {
07759
07760 (yyval.node) = NEW_RETURN(0);
07761
07762
07763
07764 ;}
07765 break;
07766
07767 case 284:
07768
07769
07770 #line 2673 "parse.y"
07771 {
07772
07773 (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
07774
07775
07776
07777 ;}
07778 break;
07779
07780 case 285:
07781
07782
07783 #line 2681 "parse.y"
07784 {
07785
07786 (yyval.node) = NEW_YIELD(0, Qfalse);
07787
07788
07789
07790 ;}
07791 break;
07792
07793 case 286:
07794
07795
07796 #line 2689 "parse.y"
07797 {
07798
07799 (yyval.node) = NEW_YIELD(0, Qfalse);
07800
07801
07802
07803 ;}
07804 break;
07805
07806 case 287:
07807
07808
07809 #line 2696 "parse.y"
07810 {in_defined = 1;;}
07811 break;
07812
07813 case 288:
07814
07815
07816 #line 2697 "parse.y"
07817 {
07818
07819 in_defined = 0;
07820 (yyval.node) = NEW_DEFINED((yyvsp[(5) - (6)].node));
07821
07822
07823
07824
07825 ;}
07826 break;
07827
07828 case 289:
07829
07830
07831 #line 2707 "parse.y"
07832 {
07833
07834 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!');
07835
07836
07837
07838 ;}
07839 break;
07840
07841 case 290:
07842
07843
07844 #line 2715 "parse.y"
07845 {
07846
07847 (yyval.node) = call_uni_op(cond(NEW_NIL()), '!');
07848
07849
07850
07851 ;}
07852 break;
07853
07854 case 291:
07855
07856
07857 #line 2723 "parse.y"
07858 {
07859
07860 (yyvsp[(2) - (2)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (2)].id), 0);
07861 (yyval.node) = (yyvsp[(2) - (2)].node);
07862 fixpos((yyvsp[(2) - (2)].node)->nd_iter, (yyvsp[(2) - (2)].node));
07863
07864
07865
07866
07867 ;}
07868 break;
07869
07870 case 293:
07871
07872
07873 #line 2735 "parse.y"
07874 {
07875
07876 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
07877 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
07878 (yyval.node) = (yyvsp[(2) - (2)].node);
07879 fixpos((yyval.node), (yyvsp[(1) - (2)].node));
07880
07881
07882
07883 ;}
07884 break;
07885
07886 case 294:
07887
07888
07889 #line 2746 "parse.y"
07890 {
07891 (yyval.node) = (yyvsp[(2) - (2)].node);
07892 ;}
07893 break;
07894
07895 case 295:
07896
07897
07898 #line 2753 "parse.y"
07899 {
07900
07901 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
07902 fixpos((yyval.node), (yyvsp[(2) - (6)].node));
07903
07904
07905
07906 ;}
07907 break;
07908
07909 case 296:
07910
07911
07912 #line 2765 "parse.y"
07913 {
07914
07915 (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
07916 fixpos((yyval.node), (yyvsp[(2) - (6)].node));
07917
07918
07919
07920 ;}
07921 break;
07922
07923 case 297:
07924
07925
07926 #line 2773 "parse.y"
07927 {COND_PUSH(1);;}
07928 break;
07929
07930 case 298:
07931
07932
07933 #line 2773 "parse.y"
07934 {COND_POP();;}
07935 break;
07936
07937 case 299:
07938
07939
07940 #line 2776 "parse.y"
07941 {
07942
07943 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
07944 fixpos((yyval.node), (yyvsp[(3) - (7)].node));
07945
07946
07947
07948 ;}
07949 break;
07950
07951 case 300:
07952
07953
07954 #line 2784 "parse.y"
07955 {COND_PUSH(1);;}
07956 break;
07957
07958 case 301:
07959
07960
07961 #line 2784 "parse.y"
07962 {COND_POP();;}
07963 break;
07964
07965 case 302:
07966
07967
07968 #line 2787 "parse.y"
07969 {
07970
07971 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
07972 fixpos((yyval.node), (yyvsp[(3) - (7)].node));
07973
07974
07975
07976 ;}
07977 break;
07978
07979 case 303:
07980
07981
07982 #line 2798 "parse.y"
07983 {
07984
07985 (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
07986 fixpos((yyval.node), (yyvsp[(2) - (5)].node));
07987
07988
07989
07990 ;}
07991 break;
07992
07993 case 304:
07994
07995
07996 #line 2807 "parse.y"
07997 {
07998
07999 (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
08000
08001
08002
08003 ;}
08004 break;
08005
08006 case 305:
08007
08008
08009 #line 2815 "parse.y"
08010 {COND_PUSH(1);;}
08011 break;
08012
08013 case 306:
08014
08015
08016 #line 2817 "parse.y"
08017 {COND_POP();;}
08018 break;
08019
08020 case 307:
08021
08022
08023 #line 2820 "parse.y"
08024 {
08025
08026
08027
08028
08029
08030
08031
08032
08033
08034
08035 ID id = internal_id();
08036 ID *tbl = ALLOC_N(ID, 2);
08037 NODE *m = NEW_ARGS_AUX(0, 0);
08038 NODE *args, *scope;
08039
08040 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) {
08041
08042
08043
08044
08045 NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
08046 NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
08047 m->nd_next = block_append(
08048 NEW_IF(
08049 NEW_NODE(NODE_AND,
08050 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("length"), 0),
08051 rb_intern("=="), one),
08052 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero),
08053 rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
08054 0),
08055 NEW_DASGN_CURR(id,
08056 NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero)),
08057 0),
08058 node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id)));
08059
08060 args = new_args(m, 0, id, 0, 0);
08061 }
08062 else {
08063 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN ||
08064 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN ||
08065 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) {
08066 (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
08067 m->nd_plen = 1;
08068 m->nd_next = (yyvsp[(2) - (9)].node);
08069 args = new_args(m, 0, 0, 0, 0);
08070 }
08071 else {
08072 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
08073 args = new_args(m, 0, id, 0, 0);
08074 }
08075 }
08076 scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
08077 tbl[0] = 1; tbl[1] = id;
08078 (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
08079 fixpos((yyval.node), (yyvsp[(2) - (9)].node));
08080
08081
08082
08083 ;}
08084 break;
08085
08086 case 308:
08087
08088
08089 #line 2881 "parse.y"
08090 {
08091 if (in_def || in_single)
08092 yyerror("class definition in method body");
08093 local_push(0);
08094
08095 (yyval.num) = ruby_sourceline;
08096
08097
08098 ;}
08099 break;
08100
08101 case 309:
08102
08103
08104 #line 2892 "parse.y"
08105 {
08106
08107 (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
08108 nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
08109
08110
08111
08112 local_pop();
08113 ;}
08114 break;
08115
08116 case 310:
08117
08118
08119 #line 2902 "parse.y"
08120 {
08121 (yyval.num) = in_def;
08122 in_def = 0;
08123 ;}
08124 break;
08125
08126 case 311:
08127
08128
08129 #line 2907 "parse.y"
08130 {
08131 (yyval.num) = in_single;
08132 in_single = 0;
08133 local_push(0);
08134 ;}
08135 break;
08136
08137 case 312:
08138
08139
08140 #line 2914 "parse.y"
08141 {
08142
08143 (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
08144 fixpos((yyval.node), (yyvsp[(3) - (8)].node));
08145
08146
08147
08148 local_pop();
08149 in_def = (yyvsp[(4) - (8)].num);
08150 in_single = (yyvsp[(6) - (8)].num);
08151 ;}
08152 break;
08153
08154 case 313:
08155
08156
08157 #line 2926 "parse.y"
08158 {
08159 if (in_def || in_single)
08160 yyerror("module definition in method body");
08161 local_push(0);
08162
08163 (yyval.num) = ruby_sourceline;
08164
08165
08166 ;}
08167 break;
08168
08169 case 314:
08170
08171
08172 #line 2937 "parse.y"
08173 {
08174
08175 (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08176 nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
08177
08178
08179
08180 local_pop();
08181 ;}
08182 break;
08183
08184 case 315:
08185
08186
08187 #line 2947 "parse.y"
08188 {
08189 (yyval.id) = cur_mid;
08190 cur_mid = (yyvsp[(2) - (2)].id);
08191 in_def++;
08192 local_push(0);
08193 ;}
08194 break;
08195
08196 case 316:
08197
08198
08199 #line 2956 "parse.y"
08200 {
08201
08202 NODE *body = remove_begin((yyvsp[(5) - (6)].node));
08203 reduce_nodes(&body);
08204 (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
08205 nd_set_line((yyval.node), (yyvsp[(1) - (6)].num));
08206
08207
08208
08209 local_pop();
08210 in_def--;
08211 cur_mid = (yyvsp[(3) - (6)].id);
08212 ;}
08213 break;
08214
08215 case 317:
08216
08217
08218 #line 2969 "parse.y"
08219 {lex_state = EXPR_FNAME;;}
08220 break;
08221
08222 case 318:
08223
08224
08225 #line 2970 "parse.y"
08226 {
08227 in_single++;
08228 lex_state = EXPR_ENDFN;
08229 local_push(0);
08230 ;}
08231 break;
08232
08233 case 319:
08234
08235
08236 #line 2978 "parse.y"
08237 {
08238
08239 NODE *body = remove_begin((yyvsp[(8) - (9)].node));
08240 reduce_nodes(&body);
08241 (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
08242 nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
08243
08244
08245
08246 local_pop();
08247 in_single--;
08248 ;}
08249 break;
08250
08251 case 320:
08252
08253
08254 #line 2991 "parse.y"
08255 {
08256
08257 (yyval.node) = NEW_BREAK(0);
08258
08259
08260
08261 ;}
08262 break;
08263
08264 case 321:
08265
08266
08267 #line 2999 "parse.y"
08268 {
08269
08270 (yyval.node) = NEW_NEXT(0);
08271
08272
08273
08274 ;}
08275 break;
08276
08277 case 322:
08278
08279
08280 #line 3007 "parse.y"
08281 {
08282
08283 (yyval.node) = NEW_REDO();
08284
08285
08286
08287 ;}
08288 break;
08289
08290 case 323:
08291
08292
08293 #line 3015 "parse.y"
08294 {
08295
08296 (yyval.node) = NEW_RETRY();
08297
08298
08299
08300 ;}
08301 break;
08302
08303 case 324:
08304
08305
08306 #line 3025 "parse.y"
08307 {
08308
08309 value_expr((yyvsp[(1) - (1)].node));
08310 (yyval.node) = (yyvsp[(1) - (1)].node);
08311 if (!(yyval.node)) (yyval.node) = NEW_NIL();
08312
08313
08314
08315 ;}
08316 break;
08317
08318 case 325:
08319
08320
08321 #line 3037 "parse.y"
08322 {
08323 token_info_push("begin");
08324 ;}
08325 break;
08326
08327 case 326:
08328
08329
08330 #line 3043 "parse.y"
08331 {
08332 token_info_push("if");
08333 ;}
08334 break;
08335
08336 case 327:
08337
08338
08339 #line 3049 "parse.y"
08340 {
08341 token_info_push("unless");
08342 ;}
08343 break;
08344
08345 case 328:
08346
08347
08348 #line 3055 "parse.y"
08349 {
08350 token_info_push("while");
08351 ;}
08352 break;
08353
08354 case 329:
08355
08356
08357 #line 3061 "parse.y"
08358 {
08359 token_info_push("until");
08360 ;}
08361 break;
08362
08363 case 330:
08364
08365
08366 #line 3067 "parse.y"
08367 {
08368 token_info_push("case");
08369 ;}
08370 break;
08371
08372 case 331:
08373
08374
08375 #line 3073 "parse.y"
08376 {
08377 token_info_push("for");
08378 ;}
08379 break;
08380
08381 case 332:
08382
08383
08384 #line 3079 "parse.y"
08385 {
08386 token_info_push("class");
08387 ;}
08388 break;
08389
08390 case 333:
08391
08392
08393 #line 3085 "parse.y"
08394 {
08395 token_info_push("module");
08396 ;}
08397 break;
08398
08399 case 334:
08400
08401
08402 #line 3091 "parse.y"
08403 {
08404 token_info_push("def");
08405
08406 (yyval.num) = ruby_sourceline;
08407
08408
08409 ;}
08410 break;
08411
08412 case 335:
08413
08414
08415 #line 3101 "parse.y"
08416 {
08417 token_info_pop("end");
08418 ;}
08419 break;
08420
08421 case 342:
08422
08423
08424 #line 3131 "parse.y"
08425 {
08426
08427 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
08428 fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08429
08430
08431
08432 ;}
08433 break;
08434
08435 case 344:
08436
08437
08438 #line 3143 "parse.y"
08439 {
08440
08441 (yyval.node) = (yyvsp[(2) - (2)].node);
08442
08443
08444
08445 ;}
08446 break;
08447
08448 case 347:
08449
08450
08451 #line 3157 "parse.y"
08452 {
08453 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
08454
08455
08456
08457
08458 ;}
08459 break;
08460
08461 case 348:
08462
08463
08464 #line 3165 "parse.y"
08465 {
08466
08467 (yyval.node) = (yyvsp[(2) - (3)].node);
08468
08469
08470
08471 ;}
08472 break;
08473
08474 case 349:
08475
08476
08477 #line 3175 "parse.y"
08478 {
08479
08480 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
08481
08482
08483
08484 ;}
08485 break;
08486
08487 case 350:
08488
08489
08490 #line 3183 "parse.y"
08491 {
08492
08493 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
08494
08495
08496
08497 ;}
08498 break;
08499
08500 case 351:
08501
08502
08503 #line 3193 "parse.y"
08504 {
08505
08506 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
08507
08508
08509
08510 ;}
08511 break;
08512
08513 case 352:
08514
08515
08516 #line 3201 "parse.y"
08517 {
08518 (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
08519
08520 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
08521
08522
08523
08524 ;}
08525 break;
08526
08527 case 353:
08528
08529
08530 #line 3210 "parse.y"
08531 {
08532 (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
08533
08534 (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
08535
08536
08537
08538 ;}
08539 break;
08540
08541 case 354:
08542
08543
08544 #line 3219 "parse.y"
08545 {
08546
08547 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
08548
08549
08550
08551 ;}
08552 break;
08553
08554 case 355:
08555
08556
08557 #line 3227 "parse.y"
08558 {
08559
08560 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
08561
08562
08563
08564 ;}
08565 break;
08566
08567 case 356:
08568
08569
08570 #line 3235 "parse.y"
08571 {
08572 (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
08573
08574 (yyval.node) = NEW_MASGN(0, (yyval.node));
08575
08576
08577
08578 ;}
08579 break;
08580
08581 case 357:
08582
08583
08584 #line 3244 "parse.y"
08585 {
08586 (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
08587
08588 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
08589
08590
08591
08592
08593
08594
08595 ;}
08596 break;
08597
08598 case 358:
08599
08600
08601 #line 3256 "parse.y"
08602 {
08603
08604 (yyval.node) = NEW_MASGN(0, -1);
08605
08606
08607
08608 ;}
08609 break;
08610
08611 case 359:
08612
08613
08614 #line 3264 "parse.y"
08615 {
08616
08617 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
08618
08619
08620
08621 ;}
08622 break;
08623
08624 case 360:
08625
08626
08627 #line 3274 "parse.y"
08628 {
08629
08630 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
08631
08632
08633
08634 ;}
08635 break;
08636
08637 case 361:
08638
08639
08640 #line 3282 "parse.y"
08641 {
08642
08643 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
08644
08645
08646
08647 ;}
08648 break;
08649
08650 case 362:
08651
08652
08653 #line 3290 "parse.y"
08654 {
08655
08656 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
08657
08658
08659
08660 ;}
08661 break;
08662
08663 case 363:
08664
08665
08666 #line 3298 "parse.y"
08667 {
08668
08669 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08670
08671
08672
08673 ;}
08674 break;
08675
08676 case 364:
08677
08678
08679 #line 3306 "parse.y"
08680 {
08681
08682 (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08683
08684
08685
08686 ;}
08687 break;
08688
08689 case 365:
08690
08691
08692 #line 3314 "parse.y"
08693 {
08694
08695 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 1, 0, 0);
08696
08697
08698
08699
08700 ;}
08701 break;
08702
08703 case 366:
08704
08705
08706 #line 3323 "parse.y"
08707 {
08708
08709 (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08710
08711
08712
08713 ;}
08714 break;
08715
08716 case 367:
08717
08718
08719 #line 3331 "parse.y"
08720 {
08721
08722 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
08723
08724
08725
08726 ;}
08727 break;
08728
08729 case 368:
08730
08731
08732 #line 3339 "parse.y"
08733 {
08734
08735 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08736
08737
08738
08739 ;}
08740 break;
08741
08742 case 369:
08743
08744
08745 #line 3347 "parse.y"
08746 {
08747
08748 (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08749
08750
08751
08752 ;}
08753 break;
08754
08755 case 370:
08756
08757
08758 #line 3355 "parse.y"
08759 {
08760
08761 (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
08762
08763
08764
08765 ;}
08766 break;
08767
08768 case 371:
08769
08770
08771 #line 3363 "parse.y"
08772 {
08773
08774 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08775
08776
08777
08778 ;}
08779 break;
08780
08781 case 372:
08782
08783
08784 #line 3371 "parse.y"
08785 {
08786
08787 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
08788
08789
08790
08791 ;}
08792 break;
08793
08794 case 373:
08795
08796
08797 #line 3379 "parse.y"
08798 {
08799
08800 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08801
08802
08803
08804 ;}
08805 break;
08806
08807 case 374:
08808
08809
08810 #line 3387 "parse.y"
08811 {
08812
08813 (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
08814
08815
08816
08817 ;}
08818 break;
08819
08820 case 376:
08821
08822
08823 #line 3398 "parse.y"
08824 {
08825 command_start = TRUE;
08826 ;}
08827 break;
08828
08829 case 377:
08830
08831
08832 #line 3404 "parse.y"
08833 {
08834
08835 (yyval.node) = 0;
08836
08837
08838
08839
08840 ;}
08841 break;
08842
08843 case 378:
08844
08845
08846 #line 3413 "parse.y"
08847 {
08848
08849 (yyval.node) = 0;
08850
08851
08852
08853
08854 ;}
08855 break;
08856
08857 case 379:
08858
08859
08860 #line 3422 "parse.y"
08861 {
08862
08863 (yyval.node) = (yyvsp[(2) - (4)].node);
08864
08865
08866
08867 ;}
08868 break;
08869
08870 case 381:
08871
08872
08873 #line 3434 "parse.y"
08874 {
08875
08876 (yyval.node) = 0;
08877
08878
08879
08880 ;}
08881 break;
08882
08883 case 384:
08884
08885
08886 #line 3460 "parse.y"
08887 {
08888 new_bv(get_id((yyvsp[(1) - (1)].id)));
08889
08890
08891
08892
08893 ;}
08894 break;
08895
08896 case 385:
08897
08898
08899 #line 3468 "parse.y"
08900 {
08901 (yyval.node) = 0;
08902 ;}
08903 break;
08904
08905 case 386:
08906
08907
08908 #line 3473 "parse.y"
08909 {
08910 (yyval.vars) = dyna_push();
08911 ;}
08912 break;
08913
08914 case 387:
08915
08916
08917 #line 3476 "parse.y"
08918 {
08919 (yyval.num) = lpar_beg;
08920 lpar_beg = ++paren_nest;
08921 ;}
08922 break;
08923
08924 case 388:
08925
08926
08927 #line 3482 "parse.y"
08928 {
08929 lpar_beg = (yyvsp[(2) - (4)].num);
08930
08931 (yyval.node) = (yyvsp[(3) - (4)].node);
08932 (yyval.node)->nd_body = NEW_SCOPE((yyvsp[(3) - (4)].node)->nd_head, (yyvsp[(4) - (4)].node));
08933
08934
08935
08936 dyna_pop((yyvsp[(1) - (4)].vars));
08937 ;}
08938 break;
08939
08940 case 389:
08941
08942
08943 #line 3495 "parse.y"
08944 {
08945
08946 (yyval.node) = NEW_LAMBDA((yyvsp[(2) - (4)].node));
08947
08948
08949
08950 ;}
08951 break;
08952
08953 case 390:
08954
08955
08956 #line 3503 "parse.y"
08957 {
08958
08959 (yyval.node) = NEW_LAMBDA((yyvsp[(1) - (1)].node));
08960
08961
08962
08963 ;}
08964 break;
08965
08966 case 391:
08967
08968
08969 #line 3513 "parse.y"
08970 {
08971 (yyval.node) = (yyvsp[(2) - (3)].node);
08972 ;}
08973 break;
08974
08975 case 392:
08976
08977
08978 #line 3517 "parse.y"
08979 {
08980 (yyval.node) = (yyvsp[(2) - (3)].node);
08981 ;}
08982 break;
08983
08984 case 393:
08985
08986
08987 #line 3523 "parse.y"
08988 {
08989 (yyvsp[(1) - (1)].vars) = dyna_push();
08990
08991 (yyval.num) = ruby_sourceline;
08992
08993 ;}
08994 break;
08995
08996 case 394:
08997
08998
08999 #line 3532 "parse.y"
09000 {
09001
09002 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09003 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09004
09005
09006
09007 dyna_pop((yyvsp[(1) - (5)].vars));
09008 ;}
09009 break;
09010
09011 case 395:
09012
09013
09014 #line 3544 "parse.y"
09015 {
09016
09017 if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
09018 compile_error(PARSER_ARG "block given to yield");
09019 }
09020 else {
09021 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
09022 }
09023 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
09024 (yyval.node) = (yyvsp[(2) - (2)].node);
09025 fixpos((yyval.node), (yyvsp[(1) - (2)].node));
09026
09027
09028
09029 ;}
09030 break;
09031
09032 case 396:
09033
09034
09035 #line 3560 "parse.y"
09036 {
09037
09038 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09039
09040
09041
09042
09043 ;}
09044 break;
09045
09046 case 397:
09047
09048
09049 #line 3569 "parse.y"
09050 {
09051
09052 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09053
09054
09055
09056
09057 ;}
09058 break;
09059
09060 case 398:
09061
09062
09063 #line 3580 "parse.y"
09064 {
09065
09066 (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
09067 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
09068
09069
09070
09071 ;}
09072 break;
09073
09074 case 399:
09075
09076
09077 #line 3589 "parse.y"
09078 {
09079
09080 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09081 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09082
09083
09084
09085
09086 ;}
09087 break;
09088
09089 case 400:
09090
09091
09092 #line 3599 "parse.y"
09093 {
09094
09095 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09096 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09097
09098
09099
09100
09101 ;}
09102 break;
09103
09104 case 401:
09105
09106
09107 #line 3609 "parse.y"
09108 {
09109
09110 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
09111
09112
09113
09114 ;}
09115 break;
09116
09117 case 402:
09118
09119
09120 #line 3617 "parse.y"
09121 {
09122
09123 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09124 fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09125
09126
09127
09128
09129
09130 ;}
09131 break;
09132
09133 case 403:
09134
09135
09136 #line 3628 "parse.y"
09137 {
09138
09139 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09140 fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09141
09142
09143
09144
09145
09146 ;}
09147 break;
09148
09149 case 404:
09150
09151
09152 #line 3639 "parse.y"
09153 {
09154
09155 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
09156
09157
09158
09159 ;}
09160 break;
09161
09162 case 405:
09163
09164
09165 #line 3647 "parse.y"
09166 {
09167
09168 (yyval.node) = NEW_ZSUPER();
09169
09170
09171
09172 ;}
09173 break;
09174
09175 case 406:
09176
09177
09178 #line 3655 "parse.y"
09179 {
09180
09181 if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
09182 (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
09183 else
09184 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
09185 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09186
09187
09188
09189 ;}
09190 break;
09191
09192 case 407:
09193
09194
09195 #line 3669 "parse.y"
09196 {
09197 (yyvsp[(1) - (1)].vars) = dyna_push();
09198
09199 (yyval.num) = ruby_sourceline;
09200
09201
09202 ;}
09203 break;
09204
09205 case 408:
09206
09207
09208 #line 3678 "parse.y"
09209 {
09210
09211 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09212 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09213
09214
09215
09216 dyna_pop((yyvsp[(1) - (5)].vars));
09217 ;}
09218 break;
09219
09220 case 409:
09221
09222
09223 #line 3688 "parse.y"
09224 {
09225 (yyvsp[(1) - (1)].vars) = dyna_push();
09226
09227 (yyval.num) = ruby_sourceline;
09228
09229
09230 ;}
09231 break;
09232
09233 case 410:
09234
09235
09236 #line 3697 "parse.y"
09237 {
09238
09239 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09240 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09241
09242
09243
09244 dyna_pop((yyvsp[(1) - (5)].vars));
09245 ;}
09246 break;
09247
09248 case 411:
09249
09250
09251 #line 3711 "parse.y"
09252 {
09253
09254 (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09255
09256
09257
09258 ;}
09259 break;
09260
09261 case 414:
09262
09263
09264 #line 3727 "parse.y"
09265 {
09266
09267 if ((yyvsp[(3) - (6)].node)) {
09268 (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
09269 (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
09270 }
09271 (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
09272 fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
09273
09274
09275
09276
09277
09278
09279
09280 ;}
09281 break;
09282
09283 case 416:
09284
09285
09286 #line 3747 "parse.y"
09287 {
09288
09289 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
09290
09291
09292
09293 ;}
09294 break;
09295
09296 case 417:
09297
09298
09299 #line 3755 "parse.y"
09300 {
09301
09302 if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
09303
09304
09305
09306 ;}
09307 break;
09308
09309 case 419:
09310
09311
09312 #line 3766 "parse.y"
09313 {
09314 (yyval.node) = (yyvsp[(2) - (2)].node);
09315 ;}
09316 break;
09317
09318 case 421:
09319
09320
09321 #line 3773 "parse.y"
09322 {
09323
09324 (yyval.node) = (yyvsp[(2) - (2)].node);
09325
09326
09327
09328 ;}
09329 break;
09330
09331 case 424:
09332
09333
09334 #line 3785 "parse.y"
09335 {
09336
09337 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
09338
09339
09340
09341 ;}
09342 break;
09343
09344 case 426:
09345
09346
09347 #line 3796 "parse.y"
09348 {
09349
09350 NODE *node = (yyvsp[(1) - (1)].node);
09351 if (!node) {
09352 node = NEW_STR(STR_NEW0());
09353 }
09354 else {
09355 node = evstr2dstr(node);
09356 }
09357 (yyval.node) = node;
09358
09359
09360
09361 ;}
09362 break;
09363
09364 case 429:
09365
09366
09367 #line 3815 "parse.y"
09368 {
09369
09370 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09371
09372
09373
09374 ;}
09375 break;
09376
09377 case 430:
09378
09379
09380 #line 3825 "parse.y"
09381 {
09382
09383 (yyval.node) = (yyvsp[(2) - (3)].node);
09384
09385
09386
09387 ;}
09388 break;
09389
09390 case 431:
09391
09392
09393 #line 3835 "parse.y"
09394 {
09395
09396 NODE *node = (yyvsp[(2) - (3)].node);
09397 if (!node) {
09398 node = NEW_XSTR(STR_NEW0());
09399 }
09400 else {
09401 switch (nd_type(node)) {
09402 case NODE_STR:
09403 nd_set_type(node, NODE_XSTR);
09404 break;
09405 case NODE_DSTR:
09406 nd_set_type(node, NODE_DXSTR);
09407 break;
09408 default:
09409 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
09410 break;
09411 }
09412 }
09413 (yyval.node) = node;
09414
09415
09416
09417 ;}
09418 break;
09419
09420 case 432:
09421
09422
09423 #line 3862 "parse.y"
09424 {
09425
09426 int options = (yyvsp[(3) - (3)].num);
09427 NODE *node = (yyvsp[(2) - (3)].node);
09428 NODE *list, *prev;
09429 if (!node) {
09430 node = NEW_LIT(reg_compile(STR_NEW0(), options));
09431 }
09432 else switch (nd_type(node)) {
09433 case NODE_STR:
09434 {
09435 VALUE src = node->nd_lit;
09436 nd_set_type(node, NODE_LIT);
09437 node->nd_lit = reg_compile(src, options);
09438 }
09439 break;
09440 default:
09441 node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
09442 case NODE_DSTR:
09443 if (options & RE_OPTION_ONCE) {
09444 nd_set_type(node, NODE_DREGX_ONCE);
09445 }
09446 else {
09447 nd_set_type(node, NODE_DREGX);
09448 }
09449 node->nd_cflag = options & RE_OPTION_MASK;
09450 if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
09451 for (list = (prev = node)->nd_next; list; list = list->nd_next) {
09452 if (nd_type(list->nd_head) == NODE_STR) {
09453 VALUE tail = list->nd_head->nd_lit;
09454 if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
09455 if (!literal_concat0(parser, prev->nd_lit, tail)) {
09456 node = 0;
09457 break;
09458 }
09459 rb_str_resize(tail, 0);
09460 prev->nd_next = list->nd_next;
09461 rb_gc_force_recycle((VALUE)list->nd_head);
09462 rb_gc_force_recycle((VALUE)list);
09463 list = prev;
09464 }
09465 else {
09466 prev = list;
09467 }
09468 }
09469 else {
09470 prev = 0;
09471 }
09472 }
09473 if (!node->nd_next) {
09474 VALUE src = node->nd_lit;
09475 nd_set_type(node, NODE_LIT);
09476 node->nd_lit = reg_compile(src, options);
09477 }
09478 break;
09479 }
09480 (yyval.node) = node;
09481
09482
09483
09484 ;}
09485 break;
09486
09487 case 433:
09488
09489
09490 #line 3926 "parse.y"
09491 {
09492
09493 (yyval.node) = NEW_ZARRAY();
09494
09495
09496
09497 ;}
09498 break;
09499
09500 case 434:
09501
09502
09503 #line 3934 "parse.y"
09504 {
09505 (yyval.node) = (yyvsp[(2) - (3)].node);
09506 ;}
09507 break;
09508
09509 case 435:
09510
09511
09512 #line 3940 "parse.y"
09513 {
09514
09515 (yyval.node) = 0;
09516
09517
09518
09519 ;}
09520 break;
09521
09522 case 436:
09523
09524
09525 #line 3948 "parse.y"
09526 {
09527
09528 (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
09529
09530
09531
09532 ;}
09533 break;
09534
09535 case 438:
09536
09537
09538 #line 3966 "parse.y"
09539 {
09540
09541 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09542
09543
09544
09545 ;}
09546 break;
09547
09548 case 439:
09549
09550
09551 #line 3976 "parse.y"
09552 {
09553
09554 (yyval.node) = NEW_ZARRAY();
09555
09556
09557
09558 ;}
09559 break;
09560
09561 case 440:
09562
09563
09564 #line 3984 "parse.y"
09565 {
09566 (yyval.node) = (yyvsp[(2) - (3)].node);
09567 ;}
09568 break;
09569
09570 case 441:
09571
09572
09573 #line 3990 "parse.y"
09574 {
09575
09576 (yyval.node) = 0;
09577
09578
09579
09580 ;}
09581 break;
09582
09583 case 442:
09584
09585
09586 #line 3998 "parse.y"
09587 {
09588
09589 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
09590
09591
09592
09593 ;}
09594 break;
09595
09596 case 443:
09597
09598
09599 #line 4008 "parse.y"
09600 {
09601
09602 (yyval.node) = 0;
09603
09604
09605
09606 ;}
09607 break;
09608
09609 case 444:
09610
09611
09612 #line 4016 "parse.y"
09613 {
09614
09615 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09616
09617
09618
09619 ;}
09620 break;
09621
09622 case 445:
09623
09624
09625 #line 4026 "parse.y"
09626 {
09627
09628 (yyval.node) = 0;
09629
09630
09631
09632 ;}
09633 break;
09634
09635 case 446:
09636
09637
09638 #line 4034 "parse.y"
09639 {
09640
09641 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09642
09643
09644
09645 ;}
09646 break;
09647
09648 case 447:
09649
09650
09651 #line 4044 "parse.y"
09652 {
09653
09654 (yyval.node) = 0;
09655
09656
09657
09658 ;}
09659 break;
09660
09661 case 448:
09662
09663
09664 #line 4052 "parse.y"
09665 {
09666
09667 NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
09668 if (!head) {
09669 (yyval.node) = tail;
09670 }
09671 else if (!tail) {
09672 (yyval.node) = head;
09673 }
09674 else {
09675 switch (nd_type(head)) {
09676 case NODE_STR:
09677 nd_set_type(head, NODE_DSTR);
09678 break;
09679 case NODE_DSTR:
09680 break;
09681 default:
09682 head = list_append(NEW_DSTR(Qnil), head);
09683 break;
09684 }
09685 (yyval.node) = list_append(head, tail);
09686 }
09687
09688
09689
09690 ;}
09691 break;
09692
09693 case 450:
09694
09695
09696 #line 4082 "parse.y"
09697 {
09698 (yyval.node) = lex_strterm;
09699 lex_strterm = 0;
09700 lex_state = EXPR_BEG;
09701 ;}
09702 break;
09703
09704 case 451:
09705
09706
09707 #line 4088 "parse.y"
09708 {
09709
09710 lex_strterm = (yyvsp[(2) - (3)].node);
09711 (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
09712
09713
09714
09715
09716 ;}
09717 break;
09718
09719 case 452:
09720
09721
09722 #line 4098 "parse.y"
09723 {
09724 (yyvsp[(1) - (1)].val) = cond_stack;
09725 (yyval.val) = cmdarg_stack;
09726 cond_stack = 0;
09727 cmdarg_stack = 0;
09728 ;}
09729 break;
09730
09731 case 453:
09732
09733
09734 #line 4104 "parse.y"
09735 {
09736 (yyval.node) = lex_strterm;
09737 lex_strterm = 0;
09738 lex_state = EXPR_BEG;
09739 ;}
09740 break;
09741
09742 case 454:
09743
09744
09745 #line 4110 "parse.y"
09746 {
09747 cond_stack = (yyvsp[(1) - (5)].val);
09748 cmdarg_stack = (yyvsp[(2) - (5)].val);
09749 lex_strterm = (yyvsp[(3) - (5)].node);
09750
09751 if ((yyvsp[(4) - (5)].node)) (yyvsp[(4) - (5)].node)->flags &= ~NODE_FL_NEWLINE;
09752 (yyval.node) = new_evstr((yyvsp[(4) - (5)].node));
09753
09754
09755
09756 ;}
09757 break;
09758
09759 case 455:
09760
09761
09762 #line 4124 "parse.y"
09763 {
09764
09765 (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
09766
09767
09768
09769 ;}
09770 break;
09771
09772 case 456:
09773
09774
09775 #line 4132 "parse.y"
09776 {
09777
09778 (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
09779
09780
09781
09782 ;}
09783 break;
09784
09785 case 457:
09786
09787
09788 #line 4140 "parse.y"
09789 {
09790
09791 (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
09792
09793
09794
09795 ;}
09796 break;
09797
09798 case 459:
09799
09800
09801 #line 4151 "parse.y"
09802 {
09803 lex_state = EXPR_END;
09804
09805 (yyval.id) = (yyvsp[(2) - (2)].id);
09806
09807
09808
09809 ;}
09810 break;
09811
09812 case 464:
09813
09814
09815 #line 4168 "parse.y"
09816 {
09817 lex_state = EXPR_END;
09818
09819 if (!((yyval.node) = (yyvsp[(2) - (3)].node))) {
09820 (yyval.node) = NEW_LIT(ID2SYM(rb_intern("")));
09821 }
09822 else {
09823 VALUE lit;
09824
09825 switch (nd_type((yyval.node))) {
09826 case NODE_DSTR:
09827 nd_set_type((yyval.node), NODE_DSYM);
09828 break;
09829 case NODE_STR:
09830 lit = (yyval.node)->nd_lit;
09831 (yyval.node)->nd_lit = ID2SYM(rb_intern_str(lit));
09832 nd_set_type((yyval.node), NODE_LIT);
09833 break;
09834 default:
09835 (yyval.node) = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST((yyval.node)));
09836 break;
09837 }
09838 }
09839
09840
09841
09842 ;}
09843 break;
09844
09845 case 467:
09846
09847
09848 #line 4200 "parse.y"
09849 {
09850
09851 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
09852
09853
09854
09855 ;}
09856 break;
09857
09858 case 468:
09859
09860
09861 #line 4208 "parse.y"
09862 {
09863
09864 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
09865
09866
09867
09868 ;}
09869 break;
09870
09871 case 474:
09872
09873
09874 #line 4222 "parse.y"
09875 {ifndef_ripper((yyval.id) = keyword_nil);;}
09876 break;
09877
09878 case 475:
09879
09880
09881 #line 4223 "parse.y"
09882 {ifndef_ripper((yyval.id) = keyword_self);;}
09883 break;
09884
09885 case 476:
09886
09887
09888 #line 4224 "parse.y"
09889 {ifndef_ripper((yyval.id) = keyword_true);;}
09890 break;
09891
09892 case 477:
09893
09894
09895 #line 4225 "parse.y"
09896 {ifndef_ripper((yyval.id) = keyword_false);;}
09897 break;
09898
09899 case 478:
09900
09901
09902 #line 4226 "parse.y"
09903 {ifndef_ripper((yyval.id) = keyword__FILE__);;}
09904 break;
09905
09906 case 479:
09907
09908
09909 #line 4227 "parse.y"
09910 {ifndef_ripper((yyval.id) = keyword__LINE__);;}
09911 break;
09912
09913 case 480:
09914
09915
09916 #line 4228 "parse.y"
09917 {ifndef_ripper((yyval.id) = keyword__ENCODING__);;}
09918 break;
09919
09920 case 481:
09921
09922
09923 #line 4232 "parse.y"
09924 {
09925
09926 if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
09927
09928
09929
09930 ;}
09931 break;
09932
09933 case 482:
09934
09935
09936 #line 4242 "parse.y"
09937 {
09938 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
09939
09940
09941
09942
09943 ;}
09944 break;
09945
09946 case 485:
09947
09948
09949 #line 4256 "parse.y"
09950 {
09951
09952 (yyval.node) = 0;
09953
09954
09955
09956 ;}
09957 break;
09958
09959 case 486:
09960
09961
09962 #line 4264 "parse.y"
09963 {
09964 lex_state = EXPR_BEG;
09965 ;}
09966 break;
09967
09968 case 487:
09969
09970
09971 #line 4268 "parse.y"
09972 {
09973 (yyval.node) = (yyvsp[(3) - (4)].node);
09974 ;}
09975 break;
09976
09977 case 488:
09978
09979
09980 #line 4272 "parse.y"
09981 {
09982
09983 yyerrok;
09984 (yyval.node) = 0;
09985
09986
09987
09988
09989 ;}
09990 break;
09991
09992 case 489:
09993
09994
09995 #line 4284 "parse.y"
09996 {
09997
09998 (yyval.node) = (yyvsp[(2) - (3)].node);
09999
10000
10001
10002 lex_state = EXPR_BEG;
10003 command_start = TRUE;
10004 ;}
10005 break;
10006
10007 case 490:
10008
10009
10010 #line 4294 "parse.y"
10011 {
10012 (yyval.node) = (yyvsp[(1) - (2)].node);
10013 ;}
10014 break;
10015
10016 case 491:
10017
10018
10019 #line 4300 "parse.y"
10020 {
10021
10022 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
10023
10024
10025
10026 ;}
10027 break;
10028
10029 case 492:
10030
10031
10032 #line 4308 "parse.y"
10033 {
10034
10035 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
10036
10037
10038
10039 ;}
10040 break;
10041
10042 case 493:
10043
10044
10045 #line 4316 "parse.y"
10046 {
10047
10048 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
10049
10050
10051
10052 ;}
10053 break;
10054
10055 case 494:
10056
10057
10058 #line 4324 "parse.y"
10059 {
10060
10061 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10062
10063
10064
10065 ;}
10066 break;
10067
10068 case 495:
10069
10070
10071 #line 4332 "parse.y"
10072 {
10073
10074 (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10075
10076
10077
10078 ;}
10079 break;
10080
10081 case 496:
10082
10083
10084 #line 4340 "parse.y"
10085 {
10086
10087 (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10088
10089
10090
10091 ;}
10092 break;
10093
10094 case 497:
10095
10096
10097 #line 4348 "parse.y"
10098 {
10099
10100 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
10101
10102
10103
10104 ;}
10105 break;
10106
10107 case 498:
10108
10109
10110 #line 4356 "parse.y"
10111 {
10112
10113 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10114
10115
10116
10117 ;}
10118 break;
10119
10120 case 499:
10121
10122
10123 #line 4364 "parse.y"
10124 {
10125
10126 (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10127
10128
10129
10130 ;}
10131 break;
10132
10133 case 500:
10134
10135
10136 #line 4372 "parse.y"
10137 {
10138
10139 (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
10140
10141
10142
10143 ;}
10144 break;
10145
10146 case 501:
10147
10148
10149 #line 4380 "parse.y"
10150 {
10151
10152 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10153
10154
10155
10156 ;}
10157 break;
10158
10159 case 502:
10160
10161
10162 #line 4388 "parse.y"
10163 {
10164
10165 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
10166
10167
10168
10169 ;}
10170 break;
10171
10172 case 503:
10173
10174
10175 #line 4396 "parse.y"
10176 {
10177
10178 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10179
10180
10181
10182 ;}
10183 break;
10184
10185 case 504:
10186
10187
10188 #line 4404 "parse.y"
10189 {
10190
10191 (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
10192
10193
10194
10195 ;}
10196 break;
10197
10198 case 505:
10199
10200
10201 #line 4412 "parse.y"
10202 {
10203
10204 (yyval.node) = new_args(0, 0, 0, 0, 0);
10205
10206
10207
10208 ;}
10209 break;
10210
10211 case 506:
10212
10213
10214 #line 4422 "parse.y"
10215 {
10216
10217 yyerror("formal argument cannot be a constant");
10218 (yyval.id) = 0;
10219
10220
10221
10222 ;}
10223 break;
10224
10225 case 507:
10226
10227
10228 #line 4431 "parse.y"
10229 {
10230
10231 yyerror("formal argument cannot be an instance variable");
10232 (yyval.id) = 0;
10233
10234
10235
10236 ;}
10237 break;
10238
10239 case 508:
10240
10241
10242 #line 4440 "parse.y"
10243 {
10244
10245 yyerror("formal argument cannot be a global variable");
10246 (yyval.id) = 0;
10247
10248
10249
10250 ;}
10251 break;
10252
10253 case 509:
10254
10255
10256 #line 4449 "parse.y"
10257 {
10258
10259 yyerror("formal argument cannot be a class variable");
10260 (yyval.id) = 0;
10261
10262
10263
10264 ;}
10265 break;
10266
10267 case 511:
10268
10269
10270 #line 4461 "parse.y"
10271 {
10272 formal_argument(get_id((yyvsp[(1) - (1)].id)));
10273 (yyval.id) = (yyvsp[(1) - (1)].id);
10274 ;}
10275 break;
10276
10277 case 512:
10278
10279
10280 #line 4468 "parse.y"
10281 {
10282 arg_var(get_id((yyvsp[(1) - (1)].id)));
10283
10284 (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
10285
10286
10287
10288 ;}
10289 break;
10290
10291 case 513:
10292
10293
10294 #line 4477 "parse.y"
10295 {
10296 ID tid = internal_id();
10297 arg_var(tid);
10298
10299 if (dyna_in_block()) {
10300 (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
10301 }
10302 else {
10303 (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
10304 }
10305 (yyval.node) = NEW_ARGS_AUX(tid, 1);
10306 (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
10307
10308
10309
10310 ;}
10311 break;
10312
10313 case 515:
10314
10315
10316 #line 4503 "parse.y"
10317 {
10318
10319 (yyval.node) = (yyvsp[(1) - (3)].node);
10320 (yyval.node)->nd_plen++;
10321 (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
10322 rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
10323
10324
10325
10326 ;}
10327 break;
10328
10329 case 516:
10330
10331
10332 #line 4516 "parse.y"
10333 {
10334 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10335 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10336
10337 (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10338
10339
10340
10341 ;}
10342 break;
10343
10344 case 517:
10345
10346
10347 #line 4528 "parse.y"
10348 {
10349 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10350 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10351
10352 (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10353
10354
10355
10356 ;}
10357 break;
10358
10359 case 518:
10360
10361
10362 #line 4540 "parse.y"
10363 {
10364
10365 (yyval.node) = (yyvsp[(1) - (1)].node);
10366
10367
10368
10369 ;}
10370 break;
10371
10372 case 519:
10373
10374
10375 #line 4548 "parse.y"
10376 {
10377
10378 NODE *opts = (yyvsp[(1) - (3)].node);
10379
10380 while (opts->nd_next) {
10381 opts = opts->nd_next;
10382 }
10383 opts->nd_next = (yyvsp[(3) - (3)].node);
10384 (yyval.node) = (yyvsp[(1) - (3)].node);
10385
10386
10387
10388 ;}
10389 break;
10390
10391 case 520:
10392
10393
10394 #line 4564 "parse.y"
10395 {
10396
10397 (yyval.node) = (yyvsp[(1) - (1)].node);
10398
10399
10400
10401 ;}
10402 break;
10403
10404 case 521:
10405
10406
10407 #line 4572 "parse.y"
10408 {
10409
10410 NODE *opts = (yyvsp[(1) - (3)].node);
10411
10412 while (opts->nd_next) {
10413 opts = opts->nd_next;
10414 }
10415 opts->nd_next = (yyvsp[(3) - (3)].node);
10416 (yyval.node) = (yyvsp[(1) - (3)].node);
10417
10418
10419
10420 ;}
10421 break;
10422
10423 case 524:
10424
10425
10426 #line 4592 "parse.y"
10427 {
10428
10429 if (!is_local_id((yyvsp[(2) - (2)].id)))
10430 yyerror("rest argument must be local variable");
10431
10432 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10433
10434 (yyval.id) = (yyvsp[(2) - (2)].id);
10435
10436
10437
10438 ;}
10439 break;
10440
10441 case 525:
10442
10443
10444 #line 4605 "parse.y"
10445 {
10446
10447 (yyval.id) = internal_id();
10448 arg_var((yyval.id));
10449
10450
10451
10452 ;}
10453 break;
10454
10455 case 528:
10456
10457
10458 #line 4620 "parse.y"
10459 {
10460
10461 if (!is_local_id((yyvsp[(2) - (2)].id)))
10462 yyerror("block argument must be local variable");
10463 else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
10464 yyerror("duplicated block argument name");
10465
10466 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10467
10468 (yyval.id) = (yyvsp[(2) - (2)].id);
10469
10470
10471
10472 ;}
10473 break;
10474
10475 case 529:
10476
10477
10478 #line 4637 "parse.y"
10479 {
10480 (yyval.id) = (yyvsp[(2) - (2)].id);
10481 ;}
10482 break;
10483
10484 case 530:
10485
10486
10487 #line 4641 "parse.y"
10488 {
10489
10490 (yyval.id) = 0;
10491
10492
10493
10494 ;}
10495 break;
10496
10497 case 531:
10498
10499
10500 #line 4651 "parse.y"
10501 {
10502
10503 value_expr((yyvsp[(1) - (1)].node));
10504 (yyval.node) = (yyvsp[(1) - (1)].node);
10505 if (!(yyval.node)) (yyval.node) = NEW_NIL();
10506
10507
10508
10509 ;}
10510 break;
10511
10512 case 532:
10513
10514
10515 #line 4660 "parse.y"
10516 {lex_state = EXPR_BEG;;}
10517 break;
10518
10519 case 533:
10520
10521
10522 #line 4661 "parse.y"
10523 {
10524
10525 if ((yyvsp[(3) - (4)].node) == 0) {
10526 yyerror("can't define singleton method for ().");
10527 }
10528 else {
10529 switch (nd_type((yyvsp[(3) - (4)].node))) {
10530 case NODE_STR:
10531 case NODE_DSTR:
10532 case NODE_XSTR:
10533 case NODE_DXSTR:
10534 case NODE_DREGX:
10535 case NODE_LIT:
10536 case NODE_ARRAY:
10537 case NODE_ZARRAY:
10538 yyerror("can't define singleton method for literals");
10539 default:
10540 value_expr((yyvsp[(3) - (4)].node));
10541 break;
10542 }
10543 }
10544 (yyval.node) = (yyvsp[(3) - (4)].node);
10545
10546
10547
10548 ;}
10549 break;
10550
10551 case 535:
10552
10553
10554 #line 4691 "parse.y"
10555 {
10556
10557 (yyval.node) = (yyvsp[(1) - (2)].node);
10558
10559
10560
10561 ;}
10562 break;
10563
10564 case 537:
10565
10566
10567 #line 4708 "parse.y"
10568 {
10569
10570 (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
10571
10572
10573
10574 ;}
10575 break;
10576
10577 case 538:
10578
10579
10580 #line 4718 "parse.y"
10581 {
10582
10583 (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
10584
10585
10586
10587 ;}
10588 break;
10589
10590 case 539:
10591
10592
10593 #line 4726 "parse.y"
10594 {
10595
10596 (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
10597
10598
10599
10600 ;}
10601 break;
10602
10603 case 561:
10604
10605
10606 #line 4782 "parse.y"
10607 {yyerrok;;}
10608 break;
10609
10610 case 564:
10611
10612
10613 #line 4787 "parse.y"
10614 {yyerrok;;}
10615 break;
10616
10617 case 565:
10618
10619
10620 #line 4791 "parse.y"
10621 {
10622
10623 (yyval.node) = 0;
10624
10625
10626
10627 ;}
10628 break;
10629
10630
10631
10632
10633 #line 10632 "parse.c"
10634 default: break;
10635 }
10636 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
10637
10638 YYPOPSTACK (yylen);
10639 yylen = 0;
10640 YY_STACK_PRINT (yyss, yyssp);
10641
10642 *++yyvsp = yyval;
10643
10644
10645
10646
10647
10648 yyn = yyr1[yyn];
10649
10650 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
10651 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
10652 yystate = yytable[yystate];
10653 else
10654 yystate = yydefgoto[yyn - YYNTOKENS];
10655
10656 goto yynewstate;
10657
10658
10659
10660
10661
10662 yyerrlab:
10663
10664 if (!yyerrstatus)
10665 {
10666 ++yynerrs;
10667 #if ! YYERROR_VERBOSE
10668 parser_yyerror (parser, YY_("syntax error"));
10669 #else
10670 {
10671 YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
10672 if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
10673 {
10674 YYSIZE_T yyalloc = 2 * yysize;
10675 if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
10676 yyalloc = YYSTACK_ALLOC_MAXIMUM;
10677 if (yymsg != yymsgbuf)
10678 YYSTACK_FREE (yymsg);
10679 yymsg = (char *) YYSTACK_ALLOC (yyalloc);
10680 if (yymsg)
10681 yymsg_alloc = yyalloc;
10682 else
10683 {
10684 yymsg = yymsgbuf;
10685 yymsg_alloc = sizeof yymsgbuf;
10686 }
10687 }
10688
10689 if (0 < yysize && yysize <= yymsg_alloc)
10690 {
10691 (void) yysyntax_error (yymsg, yystate, yychar);
10692 parser_yyerror (parser, yymsg);
10693 }
10694 else
10695 {
10696 parser_yyerror (parser, YY_("syntax error"));
10697 if (yysize != 0)
10698 goto yyexhaustedlab;
10699 }
10700 }
10701 #endif
10702 }
10703
10704
10705
10706 if (yyerrstatus == 3)
10707 {
10708
10709
10710
10711 if (yychar <= YYEOF)
10712 {
10713
10714 if (yychar == YYEOF)
10715 YYABORT;
10716 }
10717 else
10718 {
10719 yydestruct ("Error: discarding",
10720 yytoken, &yylval, parser);
10721 yychar = YYEMPTY;
10722 }
10723 }
10724
10725
10726
10727 goto yyerrlab1;
10728
10729
10730
10731
10732
10733 yyerrorlab:
10734
10735
10736
10737
10738 if ( 0)
10739 goto yyerrorlab;
10740
10741
10742
10743 YYPOPSTACK (yylen);
10744 yylen = 0;
10745 YY_STACK_PRINT (yyss, yyssp);
10746 yystate = *yyssp;
10747 goto yyerrlab1;
10748
10749
10750
10751
10752
10753 yyerrlab1:
10754 yyerrstatus = 3;
10755
10756 for (;;)
10757 {
10758 yyn = yypact[yystate];
10759 if (yyn != YYPACT_NINF)
10760 {
10761 yyn += YYTERROR;
10762 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
10763 {
10764 yyn = yytable[yyn];
10765 if (0 < yyn)
10766 break;
10767 }
10768 }
10769
10770
10771 if (yyssp == yyss)
10772 YYABORT;
10773
10774
10775 yydestruct ("Error: popping",
10776 yystos[yystate], yyvsp, parser);
10777 YYPOPSTACK (1);
10778 yystate = *yyssp;
10779 YY_STACK_PRINT (yyss, yyssp);
10780 }
10781
10782 *++yyvsp = yylval;
10783
10784
10785
10786 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
10787
10788 yystate = yyn;
10789 goto yynewstate;
10790
10791
10792
10793
10794
10795 yyacceptlab:
10796 yyresult = 0;
10797 goto yyreturn;
10798
10799
10800
10801
10802 yyabortlab:
10803 yyresult = 1;
10804 goto yyreturn;
10805
10806 #if !defined(yyoverflow) || YYERROR_VERBOSE
10807
10808
10809
10810 yyexhaustedlab:
10811 parser_yyerror (parser, YY_("memory exhausted"));
10812 yyresult = 2;
10813
10814 #endif
10815
10816 yyreturn:
10817 if (yychar != YYEMPTY)
10818 yydestruct ("Cleanup: discarding lookahead",
10819 yytoken, &yylval, parser);
10820
10821
10822 YYPOPSTACK (yylen);
10823 YY_STACK_PRINT (yyss, yyssp);
10824 while (yyssp != yyss)
10825 {
10826 yydestruct ("Cleanup: popping",
10827 yystos[*yyssp], yyvsp, parser);
10828 YYPOPSTACK (1);
10829 }
10830 #ifndef yyoverflow
10831 if (yyss != yyssa)
10832 YYSTACK_FREE (yyss);
10833 #endif
10834 #if YYERROR_VERBOSE
10835 if (yymsg != yymsgbuf)
10836 YYSTACK_FREE (yymsg);
10837 #endif
10838
10839 return YYID (yyresult);
10840 }
10841
10842
10843
10844
10845 #line 4799 "parse.y"
10846
10847 # undef parser
10848 # undef yylex
10849 # undef yylval
10850 # define yylval (*((YYSTYPE*)(parser->parser_yylval)))
10851
10852 static int parser_regx_options(struct parser_params*);
10853 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
10854 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
10855 static int parser_parse_string(struct parser_params*,NODE*);
10856 static int parser_here_document(struct parser_params*,NODE*);
10857
10858
10859 # define nextc() parser_nextc(parser)
10860 # define pushback(c) parser_pushback(parser, c)
10861 # define newtok() parser_newtok(parser)
10862 # define tokspace(n) parser_tokspace(parser, n)
10863 # define tokadd(c) parser_tokadd(parser, c)
10864 # define tok_hex(numlen) parser_tok_hex(parser, numlen)
10865 # define read_escape(flags,e) parser_read_escape(parser, flags, e)
10866 # define tokadd_escape(e) parser_tokadd_escape(parser, e)
10867 # define regx_options() parser_regx_options(parser)
10868 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,f,t,p,n,e)
10869 # define parse_string(n) parser_parse_string(parser,n)
10870 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, c, enc)
10871 # define here_document(n) parser_here_document(parser,n)
10872 # define heredoc_identifier() parser_heredoc_identifier(parser)
10873 # define heredoc_restore(n) parser_heredoc_restore(parser,n)
10874 # define whole_match_p(e,l,i) parser_whole_match_p(parser,e,l,i)
10875
10876 #ifndef RIPPER
10877 # define set_yylval_str(x) yylval.node = NEW_STR(x)
10878 # define set_yylval_num(x) yylval.num = x
10879 # define set_yylval_id(x) yylval.id = x
10880 # define set_yylval_name(x) yylval.id = x
10881 # define set_yylval_literal(x) yylval.node = NEW_LIT(x)
10882 # define set_yylval_node(x) yylval.node = x
10883 # define yylval_id() yylval.id
10884 #else
10885 static inline VALUE
10886 ripper_yylval_id(ID x)
10887 {
10888 return (VALUE)NEW_LASGN(x, ID2SYM(x));
10889 }
10890 # define set_yylval_str(x) (void)(x)
10891 # define set_yylval_num(x) (void)(x)
10892 # define set_yylval_id(x) (void)(x)
10893 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
10894 # define set_yylval_literal(x) (void)(x)
10895 # define set_yylval_node(x) (void)(x)
10896 # define yylval_id() yylval.id
10897 #endif
10898
10899 #ifndef RIPPER
10900 #define ripper_flush(p) (void)(p)
10901 #else
10902 #define ripper_flush(p) (p->tokp = p->parser_lex_p)
10903
10904 #define yylval_rval *(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val)
10905
10906 static int
10907 ripper_has_scan_event(struct parser_params *parser)
10908 {
10909
10910 if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
10911 return lex_p > parser->tokp;
10912 }
10913
10914 static VALUE
10915 ripper_scan_event_val(struct parser_params *parser, int t)
10916 {
10917 VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
10918 VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
10919 ripper_flush(parser);
10920 return rval;
10921 }
10922
10923 static void
10924 ripper_dispatch_scan_event(struct parser_params *parser, int t)
10925 {
10926 if (!ripper_has_scan_event(parser)) return;
10927 yylval_rval = ripper_scan_event_val(parser, t);
10928 }
10929
10930 static void
10931 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
10932 {
10933 if (!ripper_has_scan_event(parser)) return;
10934 (void)ripper_scan_event_val(parser, t);
10935 }
10936
10937 static void
10938 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
10939 {
10940 int saved_line = ruby_sourceline;
10941 const char *saved_tokp = parser->tokp;
10942
10943 ruby_sourceline = parser->delayed_line;
10944 parser->tokp = lex_pbeg + parser->delayed_col;
10945 yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
10946 parser->delayed = Qnil;
10947 ruby_sourceline = saved_line;
10948 parser->tokp = saved_tokp;
10949 }
10950 #endif
10951
10952 #include "ruby/regex.h"
10953 #include "ruby/util.h"
10954
10955
10956
10957
10958
10959 #undef SIGN_EXTEND_CHAR
10960 #if __STDC__
10961 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
10962 #else
10963
10964 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
10965 #endif
10966
10967 #define parser_encoding_name() (parser->enc->name)
10968 #define parser_mbclen() mbclen((lex_p-1),lex_pend,parser->enc)
10969 #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,parser->enc)
10970 #define is_identchar(p,e,enc) (rb_enc_isalnum(*p,enc) || (*p) == '_' || !ISASCII(*p))
10971 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,parser->enc))
10972
10973 #define parser_isascii() ISASCII(*(lex_p-1))
10974
10975 #ifndef RIPPER
10976 static int
10977 token_info_get_column(struct parser_params *parser, const char *token)
10978 {
10979 int column = 1;
10980 const char *p, *pend = lex_p - strlen(token);
10981 for (p = lex_pbeg; p < pend; p++) {
10982 if (*p == '\t') {
10983 column = (((column - 1) / 8) + 1) * 8;
10984 }
10985 column++;
10986 }
10987 return column;
10988 }
10989
10990 static int
10991 token_info_has_nonspaces(struct parser_params *parser, const char *token)
10992 {
10993 const char *p, *pend = lex_p - strlen(token);
10994 for (p = lex_pbeg; p < pend; p++) {
10995 if (*p != ' ' && *p != '\t') {
10996 return 1;
10997 }
10998 }
10999 return 0;
11000 }
11001
11002 #undef token_info_push
11003 static void
11004 token_info_push(struct parser_params *parser, const char *token)
11005 {
11006 token_info *ptinfo;
11007
11008 if (compile_for_eval) return;
11009 ptinfo = ALLOC(token_info);
11010 ptinfo->token = token;
11011 ptinfo->linenum = ruby_sourceline;
11012 ptinfo->column = token_info_get_column(parser, token);
11013 ptinfo->nonspc = token_info_has_nonspaces(parser, token);
11014 ptinfo->next = parser->parser_token_info;
11015
11016 parser->parser_token_info = ptinfo;
11017 }
11018
11019 #undef token_info_pop
11020 static void
11021 token_info_pop(struct parser_params *parser, const char *token)
11022 {
11023 int linenum;
11024 token_info *ptinfo = parser->parser_token_info;
11025
11026 if (!ptinfo) return;
11027 parser->parser_token_info = ptinfo->next;
11028 if (token_info_get_column(parser, token) == ptinfo->column) {
11029 goto finish;
11030 }
11031 linenum = ruby_sourceline;
11032 if (linenum == ptinfo->linenum) {
11033 goto finish;
11034 }
11035 if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) {
11036 goto finish;
11037 }
11038 rb_compile_warning(ruby_sourcefile, linenum,
11039 "mismatched indentations at '%s' with '%s' at %d",
11040 token, ptinfo->token, ptinfo->linenum);
11041
11042 finish:
11043 xfree(ptinfo);
11044 }
11045 #endif
11046
11047 static int
11048 parser_yyerror(struct parser_params *parser, const char *msg)
11049 {
11050 #ifndef RIPPER
11051 const int max_line_margin = 30;
11052 const char *p, *pe;
11053 char *buf;
11054 long len;
11055 int i;
11056
11057 compile_error(PARSER_ARG "%s", msg);
11058 p = lex_p;
11059 while (lex_pbeg <= p) {
11060 if (*p == '\n') break;
11061 p--;
11062 }
11063 p++;
11064
11065 pe = lex_p;
11066 while (pe < lex_pend) {
11067 if (*pe == '\n') break;
11068 pe++;
11069 }
11070
11071 len = pe - p;
11072 if (len > 4) {
11073 char *p2;
11074 const char *pre = "", *post = "";
11075
11076 if (len > max_line_margin * 2 + 10) {
11077 if (lex_p - p > max_line_margin) {
11078 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
11079 pre = "...";
11080 }
11081 if (pe - lex_p > max_line_margin) {
11082 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
11083 post = "...";
11084 }
11085 len = pe - p;
11086 }
11087 buf = ALLOCA_N(char, len+2);
11088 MEMCPY(buf, p, char, len);
11089 buf[len] = '\0';
11090 rb_compile_error_append("%s%s%s", pre, buf, post);
11091
11092 i = (int)(lex_p - p);
11093 p2 = buf; pe = buf + len;
11094
11095 while (p2 < pe) {
11096 if (*p2 != '\t') *p2 = ' ';
11097 p2++;
11098 }
11099 buf[i] = '^';
11100 buf[i+1] = '\0';
11101 rb_compile_error_append("%s%s", pre, buf);
11102 }
11103 #else
11104 dispatch1(parse_error, STR_NEW2(msg));
11105 #endif
11106 return 0;
11107 }
11108
11109 static void parser_prepare(struct parser_params *parser);
11110
11111 #ifndef RIPPER
11112 VALUE ruby_suppress_tracing(VALUE (*func)(VALUE, int), VALUE arg, int always);
11113
11114 static VALUE
11115 debug_lines(const char *f)
11116 {
11117 ID script_lines;
11118 CONST_ID(script_lines, "SCRIPT_LINES__");
11119 if (rb_const_defined_at(rb_cObject, script_lines)) {
11120 VALUE hash = rb_const_get_at(rb_cObject, script_lines);
11121 if (TYPE(hash) == T_HASH) {
11122 VALUE fname = rb_str_new2(f);
11123 VALUE lines = rb_ary_new();
11124 rb_hash_aset(hash, fname, lines);
11125 return lines;
11126 }
11127 }
11128 return 0;
11129 }
11130
11131 static VALUE
11132 coverage(const char *f, int n)
11133 {
11134 extern VALUE rb_get_coverages(void);
11135 VALUE coverages = rb_get_coverages();
11136 if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
11137 VALUE fname = rb_str_new2(f);
11138 VALUE lines = rb_ary_new2(n);
11139 int i;
11140 RBASIC(lines)->klass = 0;
11141 for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil;
11142 RARRAY(lines)->as.heap.len = n;
11143 rb_hash_aset(coverages, fname, lines);
11144 return lines;
11145 }
11146 return 0;
11147 }
11148
11149 static int
11150 e_option_supplied(struct parser_params *parser)
11151 {
11152 return strcmp(ruby_sourcefile, "-e") == 0;
11153 }
11154
11155 static VALUE
11156 yycompile0(VALUE arg, int tracing)
11157 {
11158 int n;
11159 NODE *tree;
11160 struct parser_params *parser = (struct parser_params *)arg;
11161
11162 if (!compile_for_eval && rb_safe_level() == 0) {
11163 ruby_debug_lines = debug_lines(ruby_sourcefile);
11164 if (ruby_debug_lines && ruby_sourceline > 0) {
11165 VALUE str = STR_NEW0();
11166 n = ruby_sourceline;
11167 do {
11168 rb_ary_push(ruby_debug_lines, str);
11169 } while (--n);
11170 }
11171
11172 if (!e_option_supplied(parser)) {
11173 ruby_coverage = coverage(ruby_sourcefile, ruby_sourceline);
11174 }
11175 }
11176
11177 parser_prepare(parser);
11178 deferred_nodes = 0;
11179 n = yyparse((void*)parser);
11180 ruby_debug_lines = 0;
11181 ruby_coverage = 0;
11182 compile_for_eval = 0;
11183
11184 lex_strterm = 0;
11185 lex_p = lex_pbeg = lex_pend = 0;
11186 lex_lastline = lex_nextline = 0;
11187 if (parser->nerr) {
11188 return 0;
11189 }
11190 tree = ruby_eval_tree;
11191 if (!tree) {
11192 tree = NEW_NIL();
11193 }
11194 else if (ruby_eval_tree_begin) {
11195 tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
11196 }
11197 return (VALUE)tree;
11198 }
11199
11200 static NODE*
11201 yycompile(struct parser_params *parser, const char *f, int line)
11202 {
11203 ruby_sourcefile = ruby_strdup(f);
11204 ruby_sourceline = line - 1;
11205 return (NODE *)ruby_suppress_tracing(yycompile0, (VALUE)parser, TRUE);
11206 }
11207 #endif
11208
11209 static rb_encoding *
11210 must_be_ascii_compatible(VALUE s)
11211 {
11212 rb_encoding *enc = rb_enc_get(s);
11213 if (!rb_enc_asciicompat(enc)) {
11214 rb_raise(rb_eArgError, "invalid source encoding");
11215 }
11216 return enc;
11217 }
11218
11219 static VALUE
11220 lex_get_str(struct parser_params *parser, VALUE s)
11221 {
11222 char *beg, *end, *pend;
11223 rb_encoding *enc = must_be_ascii_compatible(s);
11224
11225 beg = RSTRING_PTR(s);
11226 if (lex_gets_ptr) {
11227 if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
11228 beg += lex_gets_ptr;
11229 }
11230 pend = RSTRING_PTR(s) + RSTRING_LEN(s);
11231 end = beg;
11232 while (end < pend) {
11233 if (*end++ == '\n') break;
11234 }
11235 lex_gets_ptr = end - RSTRING_PTR(s);
11236 return rb_enc_str_new(beg, end - beg, enc);
11237 }
11238
11239 static VALUE
11240 lex_getline(struct parser_params *parser)
11241 {
11242 VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
11243 if (NIL_P(line)) return line;
11244 must_be_ascii_compatible(line);
11245 #ifndef RIPPER
11246 if (ruby_debug_lines) {
11247 rb_ary_push(ruby_debug_lines, line);
11248 }
11249 if (ruby_coverage) {
11250 rb_ary_push(ruby_coverage, Qnil);
11251 }
11252 #endif
11253 return line;
11254 }
11255
11256 static const rb_data_type_t parser_data_type;
11257
11258 #ifndef RIPPER
11259 static NODE*
11260 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11261 {
11262 struct parser_params *parser;
11263 NODE *node;
11264 volatile VALUE tmp;
11265
11266 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11267 lex_gets = lex_get_str;
11268 lex_gets_ptr = 0;
11269 lex_input = s;
11270 lex_pbeg = lex_p = lex_pend = 0;
11271 compile_for_eval = rb_parse_in_eval();
11272
11273 node = yycompile(parser, f, line);
11274 tmp = vparser;
11275
11276 return node;
11277 }
11278
11279 NODE*
11280 rb_compile_string(const char *f, VALUE s, int line)
11281 {
11282 must_be_ascii_compatible(s);
11283 return parser_compile_string(rb_parser_new(), f, s, line);
11284 }
11285
11286 NODE*
11287 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11288 {
11289 must_be_ascii_compatible(s);
11290 return parser_compile_string(vparser, f, s, line);
11291 }
11292
11293 NODE*
11294 rb_compile_cstr(const char *f, const char *s, int len, int line)
11295 {
11296 VALUE str = rb_str_new(s, len);
11297 return parser_compile_string(rb_parser_new(), f, str, line);
11298 }
11299
11300 NODE*
11301 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
11302 {
11303 VALUE str = rb_str_new(s, len);
11304 return parser_compile_string(vparser, f, str, line);
11305 }
11306
11307 static VALUE
11308 lex_io_gets(struct parser_params *parser, VALUE io)
11309 {
11310 return rb_io_gets(io);
11311 }
11312
11313 NODE*
11314 rb_compile_file(const char *f, VALUE file, int start)
11315 {
11316 VALUE volatile vparser = rb_parser_new();
11317
11318 return rb_parser_compile_file(vparser, f, file, start);
11319 }
11320
11321 NODE*
11322 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
11323 {
11324 struct parser_params *parser;
11325 volatile VALUE tmp;
11326 NODE *node;
11327
11328 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11329 lex_gets = lex_io_gets;
11330 lex_input = file;
11331 lex_pbeg = lex_p = lex_pend = 0;
11332 compile_for_eval = rb_parse_in_eval();
11333
11334 node = yycompile(parser, f, start);
11335 tmp = vparser;
11336
11337 return node;
11338 }
11339 #endif
11340
11341 #define STR_FUNC_ESCAPE 0x01
11342 #define STR_FUNC_EXPAND 0x02
11343 #define STR_FUNC_REGEXP 0x04
11344 #define STR_FUNC_QWORDS 0x08
11345 #define STR_FUNC_SYMBOL 0x10
11346 #define STR_FUNC_INDENT 0x20
11347
11348 enum string_type {
11349 str_squote = (0),
11350 str_dquote = (STR_FUNC_EXPAND),
11351 str_xquote = (STR_FUNC_EXPAND),
11352 str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND),
11353 str_sword = (STR_FUNC_QWORDS),
11354 str_dword = (STR_FUNC_QWORDS|STR_FUNC_EXPAND),
11355 str_ssym = (STR_FUNC_SYMBOL),
11356 str_dsym = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND)
11357 };
11358
11359 static VALUE
11360 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
11361 {
11362 VALUE str;
11363
11364 str = rb_enc_str_new(p, n, enc);
11365 if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
11366 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
11367 }
11368 else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
11369 rb_enc_associate(str, rb_ascii8bit_encoding());
11370 }
11371 }
11372
11373 return str;
11374 }
11375
11376 #define lex_goto_eol(parser) (parser->parser_lex_p = parser->parser_lex_pend)
11377 #define peek(c) (lex_p < lex_pend && (c) == *lex_p)
11378
11379 static inline int
11380 parser_nextc(struct parser_params *parser)
11381 {
11382 int c;
11383
11384 if (lex_p == lex_pend) {
11385 VALUE v = lex_nextline;
11386 lex_nextline = 0;
11387 if (!v) {
11388 if (parser->eofp)
11389 return -1;
11390
11391 if (!lex_input || NIL_P(v = lex_getline(parser))) {
11392 parser->eofp = Qtrue;
11393 lex_goto_eol(parser);
11394 return -1;
11395 }
11396 }
11397 {
11398 #ifdef RIPPER
11399 if (parser->tokp < lex_pend) {
11400 if (NIL_P(parser->delayed)) {
11401 parser->delayed = rb_str_buf_new(1024);
11402 rb_str_buf_cat(parser->delayed,
11403 parser->tokp, lex_pend - parser->tokp);
11404 parser->delayed_line = ruby_sourceline;
11405 parser->delayed_col = (int)(parser->tokp - lex_pbeg);
11406 }
11407 else {
11408 rb_str_buf_cat(parser->delayed,
11409 parser->tokp, lex_pend - parser->tokp);
11410 }
11411 }
11412 #endif
11413 if (heredoc_end > 0) {
11414 ruby_sourceline = heredoc_end;
11415 heredoc_end = 0;
11416 }
11417 ruby_sourceline++;
11418 parser->line_count++;
11419 lex_pbeg = lex_p = RSTRING_PTR(v);
11420 lex_pend = lex_p + RSTRING_LEN(v);
11421 ripper_flush(parser);
11422 lex_lastline = v;
11423 }
11424 }
11425 c = (unsigned char)*lex_p++;
11426 if (c == '\r' && peek('\n')) {
11427 lex_p++;
11428 c = '\n';
11429 }
11430
11431 return c;
11432 }
11433
11434 static void
11435 parser_pushback(struct parser_params *parser, int c)
11436 {
11437 if (c == -1) return;
11438 lex_p--;
11439 if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
11440 lex_p--;
11441 }
11442 }
11443
11444 #define was_bol() (lex_p == lex_pbeg + 1)
11445
11446 #define tokfix() (tokenbuf[tokidx]='\0')
11447 #define tok() tokenbuf
11448 #define toklen() tokidx
11449 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
11450
11451 static char*
11452 parser_newtok(struct parser_params *parser)
11453 {
11454 tokidx = 0;
11455 if (!tokenbuf) {
11456 toksiz = 60;
11457 tokenbuf = ALLOC_N(char, 60);
11458 }
11459 if (toksiz > 4096) {
11460 toksiz = 60;
11461 REALLOC_N(tokenbuf, char, 60);
11462 }
11463 return tokenbuf;
11464 }
11465
11466 static char *
11467 parser_tokspace(struct parser_params *parser, int n)
11468 {
11469 tokidx += n;
11470
11471 if (tokidx >= toksiz) {
11472 do {toksiz *= 2;} while (toksiz < tokidx);
11473 REALLOC_N(tokenbuf, char, toksiz);
11474 }
11475 return &tokenbuf[tokidx-n];
11476 }
11477
11478 static void
11479 parser_tokadd(struct parser_params *parser, int c)
11480 {
11481 tokenbuf[tokidx++] = (char)c;
11482 if (tokidx >= toksiz) {
11483 toksiz *= 2;
11484 REALLOC_N(tokenbuf, char, toksiz);
11485 }
11486 }
11487
11488 static int
11489 parser_tok_hex(struct parser_params *parser, size_t *numlen)
11490 {
11491 int c;
11492
11493 c = scan_hex(lex_p, 2, numlen);
11494 if (!*numlen) {
11495 yyerror("invalid hex escape");
11496 return 0;
11497 }
11498 lex_p += *numlen;
11499 return c;
11500 }
11501
11502 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
11503
11504 static int
11505 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
11506 int string_literal, int symbol_literal, int regexp_literal)
11507 {
11508
11509
11510
11511
11512
11513
11514
11515 int codepoint;
11516 size_t numlen;
11517
11518 if (regexp_literal) { tokadd('\\'); tokadd('u'); }
11519
11520 if (peek('{')) {
11521 do {
11522 if (regexp_literal) { tokadd(*lex_p); }
11523 nextc();
11524 codepoint = scan_hex(lex_p, 6, &numlen);
11525 if (numlen == 0) {
11526 yyerror("invalid Unicode escape");
11527 return 0;
11528 }
11529 if (codepoint > 0x10ffff) {
11530 yyerror("invalid Unicode codepoint (too large)");
11531 return 0;
11532 }
11533 lex_p += numlen;
11534 if (regexp_literal) {
11535 tokcopy((int)numlen);
11536 }
11537 else if (codepoint >= 0x80) {
11538 *encp = UTF8_ENC();
11539 if (string_literal) tokaddmbc(codepoint, *encp);
11540 }
11541 else if (string_literal) {
11542 tokadd(codepoint);
11543 }
11544 } while (string_literal && (peek(' ') || peek('\t')));
11545
11546 if (!peek('}')) {
11547 yyerror("unterminated Unicode escape");
11548 return 0;
11549 }
11550
11551 if (regexp_literal) { tokadd('}'); }
11552 nextc();
11553 }
11554 else {
11555 codepoint = scan_hex(lex_p, 4, &numlen);
11556 if (numlen < 4) {
11557 yyerror("invalid Unicode escape");
11558 return 0;
11559 }
11560 lex_p += 4;
11561 if (regexp_literal) {
11562 tokcopy(4);
11563 }
11564 else if (codepoint >= 0x80) {
11565 *encp = UTF8_ENC();
11566 if (string_literal) tokaddmbc(codepoint, *encp);
11567 }
11568 else if (string_literal) {
11569 tokadd(codepoint);
11570 }
11571 }
11572
11573 return codepoint;
11574 }
11575
11576 #define ESCAPE_CONTROL 1
11577 #define ESCAPE_META 2
11578
11579 static int
11580 parser_read_escape(struct parser_params *parser, int flags,
11581 rb_encoding **encp)
11582 {
11583 int c;
11584 size_t numlen;
11585
11586 switch (c = nextc()) {
11587 case '\\':
11588 return c;
11589
11590 case 'n':
11591 return '\n';
11592
11593 case 't':
11594 return '\t';
11595
11596 case 'r':
11597 return '\r';
11598
11599 case 'f':
11600 return '\f';
11601
11602 case 'v':
11603 return '\13';
11604
11605 case 'a':
11606 return '\007';
11607
11608 case 'e':
11609 return 033;
11610
11611 case '0': case '1': case '2': case '3':
11612 case '4': case '5': case '6': case '7':
11613 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11614 pushback(c);
11615 c = scan_oct(lex_p, 3, &numlen);
11616 lex_p += numlen;
11617 return c;
11618
11619 case 'x':
11620 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11621 c = tok_hex(&numlen);
11622 if (numlen == 0) return 0;
11623 return c;
11624
11625 case 'b':
11626 return '\010';
11627
11628 case 's':
11629 return ' ';
11630
11631 case 'M':
11632 if (flags & ESCAPE_META) goto eof;
11633 if ((c = nextc()) != '-') {
11634 pushback(c);
11635 goto eof;
11636 }
11637 if ((c = nextc()) == '\\') {
11638 if (peek('u')) goto eof;
11639 return read_escape(flags|ESCAPE_META, encp) | 0x80;
11640 }
11641 else if (c == -1 || !ISASCII(c)) goto eof;
11642 else {
11643 return ((c & 0xff) | 0x80);
11644 }
11645
11646 case 'C':
11647 if ((c = nextc()) != '-') {
11648 pushback(c);
11649 goto eof;
11650 }
11651 case 'c':
11652 if (flags & ESCAPE_CONTROL) goto eof;
11653 if ((c = nextc())== '\\') {
11654 if (peek('u')) goto eof;
11655 c = read_escape(flags|ESCAPE_CONTROL, encp);
11656 }
11657 else if (c == '?')
11658 return 0177;
11659 else if (c == -1 || !ISASCII(c)) goto eof;
11660 return c & 0x9f;
11661
11662 eof:
11663 case -1:
11664 yyerror("Invalid escape character syntax");
11665 return '\0';
11666
11667 default:
11668 return c;
11669 }
11670 }
11671
11672 static void
11673 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
11674 {
11675 int len = rb_enc_codelen(c, enc);
11676 rb_enc_mbcput(c, tokspace(len), enc);
11677 }
11678
11679 static int
11680 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
11681 {
11682 int c;
11683 int flags = 0;
11684 size_t numlen;
11685
11686 first:
11687 switch (c = nextc()) {
11688 case '\n':
11689 return 0;
11690
11691 case '0': case '1': case '2': case '3':
11692 case '4': case '5': case '6': case '7':
11693 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11694 {
11695 ruby_scan_oct(--lex_p, 3, &numlen);
11696 if (numlen == 0) goto eof;
11697 lex_p += numlen;
11698 tokcopy((int)numlen + 1);
11699 }
11700 return 0;
11701
11702 case 'x':
11703 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11704 {
11705 tok_hex(&numlen);
11706 if (numlen == 0) goto eof;
11707 tokcopy((int)numlen + 2);
11708 }
11709 return 0;
11710
11711 case 'M':
11712 if (flags & ESCAPE_META) goto eof;
11713 if ((c = nextc()) != '-') {
11714 pushback(c);
11715 goto eof;
11716 }
11717 tokcopy(3);
11718 flags |= ESCAPE_META;
11719 goto escaped;
11720
11721 case 'C':
11722 if (flags & ESCAPE_CONTROL) goto eof;
11723 if ((c = nextc()) != '-') {
11724 pushback(c);
11725 goto eof;
11726 }
11727 tokcopy(3);
11728 goto escaped;
11729
11730 case 'c':
11731 if (flags & ESCAPE_CONTROL) goto eof;
11732 tokcopy(2);
11733 flags |= ESCAPE_CONTROL;
11734 escaped:
11735 if ((c = nextc()) == '\\') {
11736 goto first;
11737 }
11738 else if (c == -1) goto eof;
11739 tokadd(c);
11740 return 0;
11741
11742 eof:
11743 case -1:
11744 yyerror("Invalid escape character syntax");
11745 return -1;
11746
11747 default:
11748 tokadd('\\');
11749 tokadd(c);
11750 }
11751 return 0;
11752 }
11753
11754 extern int rb_char_to_option_kcode(int c, int *option, int *kcode);
11755
11756 static int
11757 parser_regx_options(struct parser_params *parser)
11758 {
11759 int kcode = 0;
11760 int kopt = 0;
11761 int options = 0;
11762 int c, opt, kc;
11763
11764 newtok();
11765 while (c = nextc(), ISALPHA(c)) {
11766 if (c == 'o') {
11767 options |= RE_OPTION_ONCE;
11768 }
11769 else if (rb_char_to_option_kcode(c, &opt, &kc)) {
11770 if (kc >= 0) {
11771 if (kc != rb_ascii8bit_encindex()) kcode = c;
11772 kopt = opt;
11773 }
11774 else {
11775 options |= opt;
11776 }
11777 }
11778 else {
11779 tokadd(c);
11780 }
11781 }
11782 options |= kopt;
11783 pushback(c);
11784 if (toklen()) {
11785 tokfix();
11786 compile_error(PARSER_ARG "unknown regexp option%s - %s",
11787 toklen() > 1 ? "s" : "", tok());
11788 }
11789 return options | RE_OPTION_ENCODING(kcode);
11790 }
11791
11792 static void
11793 dispose_string(VALUE str)
11794 {
11795
11796 if (RBASIC(str)->flags & RSTRING_NOEMBED)
11797 xfree(RSTRING_PTR(str));
11798 rb_gc_force_recycle(str);
11799 }
11800
11801 static int
11802 parser_tokadd_mbchar(struct parser_params *parser, int c)
11803 {
11804 int len = parser_precise_mbclen();
11805 if (!MBCLEN_CHARFOUND_P(len)) {
11806 compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
11807 return -1;
11808 }
11809 tokadd(c);
11810 lex_p += --len;
11811 if (len > 0) tokcopy(len);
11812 return c;
11813 }
11814
11815 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, c)
11816
11817 static int
11818 parser_tokadd_string(struct parser_params *parser,
11819 int func, int term, int paren, long *nest,
11820 rb_encoding **encp)
11821 {
11822 int c;
11823 int has_nonascii = 0;
11824 rb_encoding *enc = *encp;
11825 char *errbuf = 0;
11826 static const char mixed_msg[] = "%s mixed within %s source";
11827
11828 #define mixed_error(enc1, enc2) if (!errbuf) { \
11829 size_t len = sizeof(mixed_msg) - 4; \
11830 len += strlen(rb_enc_name(enc1)); \
11831 len += strlen(rb_enc_name(enc2)); \
11832 errbuf = ALLOCA_N(char, len); \
11833 snprintf(errbuf, len, mixed_msg, \
11834 rb_enc_name(enc1), \
11835 rb_enc_name(enc2)); \
11836 yyerror(errbuf); \
11837 }
11838 #define mixed_escape(beg, enc1, enc2) do { \
11839 const char *pos = lex_p; \
11840 lex_p = beg; \
11841 mixed_error(enc1, enc2); \
11842 lex_p = pos; \
11843 } while (0)
11844
11845 while ((c = nextc()) != -1) {
11846 if (paren && c == paren) {
11847 ++*nest;
11848 }
11849 else if (c == term) {
11850 if (!nest || !*nest) {
11851 pushback(c);
11852 break;
11853 }
11854 --*nest;
11855 }
11856 else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
11857 int c2 = *lex_p;
11858 if (c2 == '$' || c2 == '@' || c2 == '{') {
11859 pushback(c);
11860 break;
11861 }
11862 }
11863 else if (c == '\\') {
11864 const char *beg = lex_p - 1;
11865 c = nextc();
11866 switch (c) {
11867 case '\n':
11868 if (func & STR_FUNC_QWORDS) break;
11869 if (func & STR_FUNC_EXPAND) continue;
11870 tokadd('\\');
11871 break;
11872
11873 case '\\':
11874 if (func & STR_FUNC_ESCAPE) tokadd(c);
11875 break;
11876
11877 case 'u':
11878 if ((func & STR_FUNC_EXPAND) == 0) {
11879 tokadd('\\');
11880 break;
11881 }
11882 parser_tokadd_utf8(parser, &enc, 1,
11883 func & STR_FUNC_SYMBOL,
11884 func & STR_FUNC_REGEXP);
11885 if (has_nonascii && enc != *encp) {
11886 mixed_escape(beg, enc, *encp);
11887 }
11888 continue;
11889
11890 default:
11891 if (func & STR_FUNC_REGEXP) {
11892 pushback(c);
11893 if ((c = tokadd_escape(&enc)) < 0)
11894 return -1;
11895 if (has_nonascii && enc != *encp) {
11896 mixed_escape(beg, enc, *encp);
11897 }
11898 continue;
11899 }
11900 else if (func & STR_FUNC_EXPAND) {
11901 pushback(c);
11902 if (func & STR_FUNC_ESCAPE) tokadd('\\');
11903 c = read_escape(0, &enc);
11904 }
11905 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11906
11907 }
11908 else if (c != term && !(paren && c == paren)) {
11909 tokadd('\\');
11910 pushback(c);
11911 continue;
11912 }
11913 }
11914 }
11915 else if (!parser_isascii()) {
11916 has_nonascii = 1;
11917 if (enc != *encp) {
11918 mixed_error(enc, *encp);
11919 continue;
11920 }
11921 if (tokadd_mbchar(c) == -1) return -1;
11922 continue;
11923 }
11924 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11925 pushback(c);
11926 break;
11927 }
11928 if (c & 0x80) {
11929 has_nonascii = 1;
11930 if (enc != *encp) {
11931 mixed_error(enc, *encp);
11932 continue;
11933 }
11934 }
11935 tokadd(c);
11936 }
11937 *encp = enc;
11938 return c;
11939 }
11940
11941 #define NEW_STRTERM(func, term, paren) \
11942 rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
11943
11944 static int
11945 parser_parse_string(struct parser_params *parser, NODE *quote)
11946 {
11947 int func = (int)quote->nd_func;
11948 int term = nd_term(quote);
11949 int paren = nd_paren(quote);
11950 int c, space = 0;
11951 rb_encoding *enc = parser->enc;
11952
11953 if (func == -1) return tSTRING_END;
11954 c = nextc();
11955 if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11956 do {c = nextc();} while (ISSPACE(c));
11957 space = 1;
11958 }
11959 if (c == term && !quote->nd_nest) {
11960 if (func & STR_FUNC_QWORDS) {
11961 quote->nd_func = -1;
11962 return ' ';
11963 }
11964 if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
11965 set_yylval_num(regx_options());
11966 return tREGEXP_END;
11967 }
11968 if (space) {
11969 pushback(c);
11970 return ' ';
11971 }
11972 newtok();
11973 if ((func & STR_FUNC_EXPAND) && c == '#') {
11974 switch (c = nextc()) {
11975 case '$':
11976 case '@':
11977 pushback(c);
11978 return tSTRING_DVAR;
11979 case '{':
11980 return tSTRING_DBEG;
11981 }
11982 tokadd('#');
11983 }
11984 pushback(c);
11985 if (tokadd_string(func, term, paren, "e->nd_nest,
11986 &enc) == -1) {
11987 ruby_sourceline = nd_line(quote);
11988 if (func & STR_FUNC_REGEXP) {
11989 if (parser->eofp)
11990 compile_error(PARSER_ARG "unterminated regexp meets end of file");
11991 return tREGEXP_END;
11992 }
11993 else {
11994 if (parser->eofp)
11995 compile_error(PARSER_ARG "unterminated string meets end of file");
11996 return tSTRING_END;
11997 }
11998 }
11999
12000 tokfix();
12001 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12002 return tSTRING_CONTENT;
12003 }
12004
12005 static int
12006 parser_heredoc_identifier(struct parser_params *parser)
12007 {
12008 int c = nextc(), term, func = 0;
12009 long len;
12010
12011 if (c == '-') {
12012 c = nextc();
12013 func = STR_FUNC_INDENT;
12014 }
12015 switch (c) {
12016 case '\'':
12017 func |= str_squote; goto quoted;
12018 case '"':
12019 func |= str_dquote; goto quoted;
12020 case '`':
12021 func |= str_xquote;
12022 quoted:
12023 newtok();
12024 tokadd(func);
12025 term = c;
12026 while ((c = nextc()) != -1 && c != term) {
12027 if (tokadd_mbchar(c) == -1) return 0;
12028 }
12029 if (c == -1) {
12030 compile_error(PARSER_ARG "unterminated here document identifier");
12031 return 0;
12032 }
12033 break;
12034
12035 default:
12036 if (!parser_is_identchar()) {
12037 pushback(c);
12038 if (func & STR_FUNC_INDENT) {
12039 pushback('-');
12040 }
12041 return 0;
12042 }
12043 newtok();
12044 term = '"';
12045 tokadd(func |= str_dquote);
12046 do {
12047 if (tokadd_mbchar(c) == -1) return 0;
12048 } while ((c = nextc()) != -1 && parser_is_identchar());
12049 pushback(c);
12050 break;
12051 }
12052
12053 tokfix();
12054 #ifdef RIPPER
12055 ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
12056 #endif
12057 len = lex_p - lex_pbeg;
12058 lex_goto_eol(parser);
12059 lex_strterm = rb_node_newnode(NODE_HEREDOC,
12060 STR_NEW(tok(), toklen()),
12061 len,
12062 lex_lastline);
12063 nd_set_line(lex_strterm, ruby_sourceline);
12064 ripper_flush(parser);
12065 return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
12066 }
12067
12068 static void
12069 parser_heredoc_restore(struct parser_params *parser, NODE *here)
12070 {
12071 VALUE line;
12072
12073 line = here->nd_orig;
12074 lex_lastline = line;
12075 lex_pbeg = RSTRING_PTR(line);
12076 lex_pend = lex_pbeg + RSTRING_LEN(line);
12077 lex_p = lex_pbeg + here->nd_nth;
12078 heredoc_end = ruby_sourceline;
12079 ruby_sourceline = nd_line(here);
12080 dispose_string(here->nd_lit);
12081 rb_gc_force_recycle((VALUE)here);
12082 ripper_flush(parser);
12083 }
12084
12085 static int
12086 parser_whole_match_p(struct parser_params *parser,
12087 const char *eos, long len, int indent)
12088 {
12089 const char *p = lex_pbeg;
12090 long n;
12091
12092 if (indent) {
12093 while (*p && ISSPACE(*p)) p++;
12094 }
12095 n = lex_pend - (p + len);
12096 if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE;
12097 return strncmp(eos, p, len) == 0;
12098 }
12099
12100 static int
12101 parser_here_document(struct parser_params *parser, NODE *here)
12102 {
12103 int c, func, indent = 0;
12104 const char *eos, *p, *pend;
12105 long len;
12106 VALUE str = 0;
12107 rb_encoding *enc = parser->enc;
12108
12109 eos = RSTRING_PTR(here->nd_lit);
12110 len = RSTRING_LEN(here->nd_lit) - 1;
12111 indent = (func = *eos++) & STR_FUNC_INDENT;
12112
12113 if ((c = nextc()) == -1) {
12114 error:
12115 compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
12116 #ifdef RIPPER
12117 if (NIL_P(parser->delayed)) {
12118 ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
12119 }
12120 else {
12121 if (str ||
12122 ((len = lex_p - parser->tokp) > 0 &&
12123 (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
12124 rb_str_append(parser->delayed, str);
12125 }
12126 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12127 }
12128 lex_goto_eol(parser);
12129 #endif
12130 restore:
12131 heredoc_restore(lex_strterm);
12132 lex_strterm = 0;
12133 return 0;
12134 }
12135 if (was_bol() && whole_match_p(eos, len, indent)) {
12136 heredoc_restore(lex_strterm);
12137 return tSTRING_END;
12138 }
12139
12140 if (!(func & STR_FUNC_EXPAND)) {
12141 do {
12142 p = RSTRING_PTR(lex_lastline);
12143 pend = lex_pend;
12144 if (pend > p) {
12145 switch (pend[-1]) {
12146 case '\n':
12147 if (--pend == p || pend[-1] != '\r') {
12148 pend++;
12149 break;
12150 }
12151 case '\r':
12152 --pend;
12153 }
12154 }
12155 if (str)
12156 rb_str_cat(str, p, pend - p);
12157 else
12158 str = STR_NEW(p, pend - p);
12159 if (pend < lex_pend) rb_str_cat(str, "\n", 1);
12160 lex_goto_eol(parser);
12161 if (nextc() == -1) {
12162 if (str) dispose_string(str);
12163 goto error;
12164 }
12165 } while (!whole_match_p(eos, len, indent));
12166 }
12167 else {
12168
12169 newtok();
12170 if (c == '#') {
12171 switch (c = nextc()) {
12172 case '$':
12173 case '@':
12174 pushback(c);
12175 return tSTRING_DVAR;
12176 case '{':
12177 return tSTRING_DBEG;
12178 }
12179 tokadd('#');
12180 }
12181 do {
12182 pushback(c);
12183 if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
12184 if (parser->eofp) goto error;
12185 goto restore;
12186 }
12187 if (c != '\n') {
12188 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12189 return tSTRING_CONTENT;
12190 }
12191 tokadd(nextc());
12192
12193 if ((c = nextc()) == -1) goto error;
12194 } while (!whole_match_p(eos, len, indent));
12195 str = STR_NEW3(tok(), toklen(), enc, func);
12196 }
12197 #ifdef RIPPER
12198 if (!NIL_P(parser->delayed))
12199 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12200 lex_goto_eol(parser);
12201 ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
12202 #endif
12203 heredoc_restore(lex_strterm);
12204 lex_strterm = NEW_STRTERM(-1, 0, 0);
12205 set_yylval_str(str);
12206 return tSTRING_CONTENT;
12207 }
12208
12209 #include "lex.c"
12210
12211 static void
12212 arg_ambiguous_gen(struct parser_params *parser)
12213 {
12214 #ifndef RIPPER
12215 rb_warning0("ambiguous first argument; put parentheses or even spaces");
12216 #else
12217 dispatch0(arg_ambiguous);
12218 #endif
12219 }
12220 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
12221
12222 static ID
12223 formal_argument_gen(struct parser_params *parser, ID lhs)
12224 {
12225 #ifndef RIPPER
12226 if (!is_local_id(lhs))
12227 yyerror("formal argument must be local variable");
12228 #endif
12229 shadowing_lvar(lhs);
12230 return lhs;
12231 }
12232
12233 static int
12234 lvar_defined_gen(struct parser_params *parser, ID id)
12235 {
12236 return (dyna_in_block() && dvar_defined(id)) || local_id(id);
12237 }
12238
12239
12240 static long
12241 parser_encode_length(struct parser_params *parser, const char *name, long len)
12242 {
12243 long nlen;
12244
12245 if (len > 5 && name[nlen = len - 5] == '-') {
12246 if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
12247 return nlen;
12248 }
12249 if (len > 4 && name[nlen = len - 5] == '-') {
12250 if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
12251 return nlen;
12252 if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0)
12253 return nlen;
12254 }
12255 return len;
12256 }
12257
12258 static void
12259 parser_set_encode(struct parser_params *parser, const char *name)
12260 {
12261 int idx = rb_enc_find_index(name);
12262 rb_encoding *enc;
12263 VALUE excargs[3];
12264
12265 if (idx < 0) {
12266 VALUE rb_make_backtrace(void);
12267 VALUE rb_make_exception(int, VALUE*);
12268
12269 excargs[1] = rb_sprintf("unknown encoding name: %s", name);
12270 error:
12271 excargs[0] = rb_eArgError;
12272 excargs[2] = rb_make_backtrace();
12273 rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
12274 rb_exc_raise(rb_make_exception(3, excargs));
12275 }
12276 enc = rb_enc_from_index(idx);
12277 if (!rb_enc_asciicompat(enc)) {
12278 excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
12279 goto error;
12280 }
12281 parser->enc = enc;
12282 }
12283
12284 static int
12285 comment_at_top(struct parser_params *parser)
12286 {
12287 const char *p = lex_pbeg, *pend = lex_p - 1;
12288 if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
12289 while (p < pend) {
12290 if (!ISSPACE(*p)) return 0;
12291 p++;
12292 }
12293 return 1;
12294 }
12295
12296 #ifndef RIPPER
12297 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
12298 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
12299
12300 static void
12301 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
12302 {
12303 if (!comment_at_top(parser)) {
12304 return;
12305 }
12306 parser_set_encode(parser, val);
12307 }
12308
12309 struct magic_comment {
12310 const char *name;
12311 rb_magic_comment_setter_t func;
12312 rb_magic_comment_length_t length;
12313 };
12314
12315 static const struct magic_comment magic_comments[] = {
12316 {"coding", magic_comment_encoding, parser_encode_length},
12317 {"encoding", magic_comment_encoding, parser_encode_length},
12318 };
12319 #endif
12320
12321 static const char *
12322 magic_comment_marker(const char *str, long len)
12323 {
12324 long i = 2;
12325
12326 while (i < len) {
12327 switch (str[i]) {
12328 case '-':
12329 if (str[i-1] == '*' && str[i-2] == '-') {
12330 return str + i + 1;
12331 }
12332 i += 2;
12333 break;
12334 case '*':
12335 if (i + 1 >= len) return 0;
12336 if (str[i+1] != '-') {
12337 i += 4;
12338 }
12339 else if (str[i-1] != '-') {
12340 i += 2;
12341 }
12342 else {
12343 return str + i + 2;
12344 }
12345 break;
12346 default:
12347 i += 3;
12348 break;
12349 }
12350 }
12351 return 0;
12352 }
12353
12354 static int
12355 parser_magic_comment(struct parser_params *parser, const char *str, long len)
12356 {
12357 VALUE name = 0, val = 0;
12358 const char *beg, *end, *vbeg, *vend;
12359 #define str_copy(_s, _p, _n) ((_s) \
12360 ? (rb_str_resize((_s), (_n)), \
12361 MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
12362 : ((_s) = STR_NEW((_p), (_n))))
12363
12364 if (len <= 7) return FALSE;
12365 if (!(beg = magic_comment_marker(str, len))) return FALSE;
12366 if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
12367 str = beg;
12368 len = end - beg - 3;
12369
12370
12371 while (len > 0) {
12372 #ifndef RIPPER
12373 const struct magic_comment *p = magic_comments;
12374 #endif
12375 char *s;
12376 int i;
12377 long n = 0;
12378
12379 for (; len > 0 && *str; str++, --len) {
12380 switch (*str) {
12381 case '\'': case '"': case ':': case ';':
12382 continue;
12383 }
12384 if (!ISSPACE(*str)) break;
12385 }
12386 for (beg = str; len > 0; str++, --len) {
12387 switch (*str) {
12388 case '\'': case '"': case ':': case ';':
12389 break;
12390 default:
12391 if (ISSPACE(*str)) break;
12392 continue;
12393 }
12394 break;
12395 }
12396 for (end = str; len > 0 && ISSPACE(*str); str++, --len);
12397 if (!len) break;
12398 if (*str != ':') continue;
12399
12400 do str++; while (--len > 0 && ISSPACE(*str));
12401 if (!len) break;
12402 if (*str == '"') {
12403 for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
12404 if (*str == '\\') {
12405 --len;
12406 ++str;
12407 }
12408 }
12409 vend = str;
12410 if (len) {
12411 --len;
12412 ++str;
12413 }
12414 }
12415 else {
12416 for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
12417 vend = str;
12418 }
12419 while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
12420
12421 n = end - beg;
12422 str_copy(name, beg, n);
12423 s = RSTRING_PTR(name);
12424 for (i = 0; i < n; ++i) {
12425 if (s[i] == '-') s[i] = '_';
12426 }
12427 #ifndef RIPPER
12428 do {
12429 if (STRNCASECMP(p->name, s, n) == 0) {
12430 n = vend - vbeg;
12431 if (p->length) {
12432 n = (*p->length)(parser, vbeg, n);
12433 }
12434 str_copy(val, vbeg, n);
12435 (*p->func)(parser, s, RSTRING_PTR(val));
12436 break;
12437 }
12438 } while (++p < magic_comments + numberof(magic_comments));
12439 #else
12440 dispatch2(magic_comment, name, val);
12441 #endif
12442 }
12443
12444 return TRUE;
12445 }
12446
12447 static void
12448 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
12449 {
12450 int sep = 0;
12451 const char *beg = str;
12452 VALUE s;
12453
12454 for (;;) {
12455 if (send - str <= 6) return;
12456 switch (str[6]) {
12457 case 'C': case 'c': str += 6; continue;
12458 case 'O': case 'o': str += 5; continue;
12459 case 'D': case 'd': str += 4; continue;
12460 case 'I': case 'i': str += 3; continue;
12461 case 'N': case 'n': str += 2; continue;
12462 case 'G': case 'g': str += 1; continue;
12463 case '=': case ':':
12464 sep = 1;
12465 str += 6;
12466 break;
12467 default:
12468 str += 6;
12469 if (ISSPACE(*str)) break;
12470 continue;
12471 }
12472 if (STRNCASECMP(str-6, "coding", 6) == 0) break;
12473 }
12474 for (;;) {
12475 do {
12476 if (++str >= send) return;
12477 } while (ISSPACE(*str));
12478 if (sep) break;
12479 if (*str != '=' && *str != ':') return;
12480 sep = 1;
12481 str++;
12482 }
12483 beg = str;
12484 while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
12485 s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
12486 parser_set_encode(parser, RSTRING_PTR(s));
12487 rb_str_resize(s, 0);
12488 }
12489
12490 static void
12491 parser_prepare(struct parser_params *parser)
12492 {
12493 int c = nextc();
12494 switch (c) {
12495 case '#':
12496 if (peek('!')) parser->has_shebang = 1;
12497 break;
12498 case 0xef:
12499 if (lex_pend - lex_p >= 2 &&
12500 (unsigned char)lex_p[0] == 0xbb &&
12501 (unsigned char)lex_p[1] == 0xbf) {
12502 parser->enc = rb_utf8_encoding();
12503 lex_p += 2;
12504 lex_pbeg = lex_p;
12505 return;
12506 }
12507 break;
12508 case EOF:
12509 return;
12510 }
12511 pushback(c);
12512 parser->enc = rb_enc_get(lex_lastline);
12513 }
12514
12515 #define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG)
12516 #define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_ENDFN)
12517 #define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS)
12518 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
12519
12520 #ifndef RIPPER
12521 #define ambiguous_operator(op, syn) ( \
12522 rb_warning0("`"op"' after local variable is interpreted as binary operator"), \
12523 rb_warning0("even though it seems like "syn""))
12524 #else
12525 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
12526 #endif
12527 #define warn_balanced(op, syn) \
12528 (last_state != EXPR_CLASS && last_state != EXPR_DOT && \
12529 last_state != EXPR_FNAME && last_state != EXPR_ENDFN && \
12530 last_state != EXPR_ENDARG && \
12531 space_seen && !ISSPACE(c) && \
12532 (ambiguous_operator(op, syn), 0))
12533
12534 static int
12535 parser_yylex(struct parser_params *parser)
12536 {
12537 register int c;
12538 int space_seen = 0;
12539 int cmd_state;
12540 enum lex_state_e last_state;
12541 rb_encoding *enc;
12542 int mb;
12543 #ifdef RIPPER
12544 int fallthru = FALSE;
12545 #endif
12546
12547 if (lex_strterm) {
12548 int token;
12549 if (nd_type(lex_strterm) == NODE_HEREDOC) {
12550 token = here_document(lex_strterm);
12551 if (token == tSTRING_END) {
12552 lex_strterm = 0;
12553 lex_state = EXPR_END;
12554 }
12555 }
12556 else {
12557 token = parse_string(lex_strterm);
12558 if (token == tSTRING_END || token == tREGEXP_END) {
12559 rb_gc_force_recycle((VALUE)lex_strterm);
12560 lex_strterm = 0;
12561 lex_state = EXPR_END;
12562 }
12563 }
12564 return token;
12565 }
12566 cmd_state = command_start;
12567 command_start = FALSE;
12568 retry:
12569 last_state = lex_state;
12570 switch (c = nextc()) {
12571 case '\0':
12572 case '\004':
12573 case '\032':
12574 case -1:
12575 return 0;
12576
12577
12578 case ' ': case '\t': case '\f': case '\r':
12579 case '\13':
12580 space_seen = 1;
12581 #ifdef RIPPER
12582 while ((c = nextc())) {
12583 switch (c) {
12584 case ' ': case '\t': case '\f': case '\r':
12585 case '\13':
12586 break;
12587 default:
12588 goto outofloop;
12589 }
12590 }
12591 outofloop:
12592 pushback(c);
12593 ripper_dispatch_scan_event(parser, tSP);
12594 #endif
12595 goto retry;
12596
12597 case '#':
12598
12599 if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
12600 if (comment_at_top(parser)) {
12601 set_file_encoding(parser, lex_p, lex_pend);
12602 }
12603 }
12604 lex_p = lex_pend;
12605 #ifdef RIPPER
12606 ripper_dispatch_scan_event(parser, tCOMMENT);
12607 fallthru = TRUE;
12608 #endif
12609
12610 case '\n':
12611 switch (lex_state) {
12612 case EXPR_BEG:
12613 case EXPR_FNAME:
12614 case EXPR_DOT:
12615 case EXPR_CLASS:
12616 case EXPR_VALUE:
12617 #ifdef RIPPER
12618 if (!fallthru) {
12619 ripper_dispatch_scan_event(parser, tIGNORED_NL);
12620 }
12621 fallthru = FALSE;
12622 #endif
12623 goto retry;
12624 default:
12625 break;
12626 }
12627 while ((c = nextc())) {
12628 switch (c) {
12629 case ' ': case '\t': case '\f': case '\r':
12630 case '\13':
12631 space_seen = 1;
12632 break;
12633 case '.': {
12634 if ((c = nextc()) != '.') {
12635 pushback(c);
12636 pushback('.');
12637 goto retry;
12638 }
12639 }
12640 default:
12641 --ruby_sourceline;
12642 lex_nextline = lex_lastline;
12643 case -1:
12644 lex_goto_eol(parser);
12645 #ifdef RIPPER
12646 if (c != -1) {
12647 parser->tokp = lex_p;
12648 }
12649 #endif
12650 goto normal_newline;
12651 }
12652 }
12653 normal_newline:
12654 command_start = TRUE;
12655 lex_state = EXPR_BEG;
12656 return '\n';
12657
12658 case '*':
12659 if ((c = nextc()) == '*') {
12660 if ((c = nextc()) == '=') {
12661 set_yylval_id(tPOW);
12662 lex_state = EXPR_BEG;
12663 return tOP_ASGN;
12664 }
12665 pushback(c);
12666 c = tPOW;
12667 }
12668 else {
12669 if (c == '=') {
12670 set_yylval_id('*');
12671 lex_state = EXPR_BEG;
12672 return tOP_ASGN;
12673 }
12674 pushback(c);
12675 if (IS_SPCARG(c)) {
12676 rb_warning0("`*' interpreted as argument prefix");
12677 c = tSTAR;
12678 }
12679 else if (IS_BEG()) {
12680 c = tSTAR;
12681 }
12682 else {
12683 warn_balanced("*", "argument prefix");
12684 c = '*';
12685 }
12686 }
12687 switch (lex_state) {
12688 case EXPR_FNAME: case EXPR_DOT:
12689 lex_state = EXPR_ARG; break;
12690 default:
12691 lex_state = EXPR_BEG; break;
12692 }
12693 return c;
12694
12695 case '!':
12696 c = nextc();
12697 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12698 lex_state = EXPR_ARG;
12699 if (c == '@') {
12700 return '!';
12701 }
12702 }
12703 else {
12704 lex_state = EXPR_BEG;
12705 }
12706 if (c == '=') {
12707 return tNEQ;
12708 }
12709 if (c == '~') {
12710 return tNMATCH;
12711 }
12712 pushback(c);
12713 return '!';
12714
12715 case '=':
12716 if (was_bol()) {
12717
12718 if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
12719 #ifdef RIPPER
12720 int first_p = TRUE;
12721
12722 lex_goto_eol(parser);
12723 ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
12724 #endif
12725 for (;;) {
12726 lex_goto_eol(parser);
12727 #ifdef RIPPER
12728 if (!first_p) {
12729 ripper_dispatch_scan_event(parser, tEMBDOC);
12730 }
12731 first_p = FALSE;
12732 #endif
12733 c = nextc();
12734 if (c == -1) {
12735 compile_error(PARSER_ARG "embedded document meets end of file");
12736 return 0;
12737 }
12738 if (c != '=') continue;
12739 if (strncmp(lex_p, "end", 3) == 0 &&
12740 (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
12741 break;
12742 }
12743 }
12744 lex_goto_eol(parser);
12745 #ifdef RIPPER
12746 ripper_dispatch_scan_event(parser, tEMBDOC_END);
12747 #endif
12748 goto retry;
12749 }
12750 }
12751
12752 switch (lex_state) {
12753 case EXPR_FNAME: case EXPR_DOT:
12754 lex_state = EXPR_ARG; break;
12755 default:
12756 lex_state = EXPR_BEG; break;
12757 }
12758 if ((c = nextc()) == '=') {
12759 if ((c = nextc()) == '=') {
12760 return tEQQ;
12761 }
12762 pushback(c);
12763 return tEQ;
12764 }
12765 if (c == '~') {
12766 return tMATCH;
12767 }
12768 else if (c == '>') {
12769 return tASSOC;
12770 }
12771 pushback(c);
12772 return '=';
12773
12774 case '<':
12775 last_state = lex_state;
12776 c = nextc();
12777 if (c == '<' &&
12778 lex_state != EXPR_DOT &&
12779 lex_state != EXPR_CLASS &&
12780 !IS_END() &&
12781 (!IS_ARG() || space_seen)) {
12782 int token = heredoc_identifier();
12783 if (token) return token;
12784 }
12785 switch (lex_state) {
12786 case EXPR_FNAME: case EXPR_DOT:
12787 lex_state = EXPR_ARG; break;
12788 default:
12789 lex_state = EXPR_BEG; break;
12790 }
12791 if (c == '=') {
12792 if ((c = nextc()) == '>') {
12793 return tCMP;
12794 }
12795 pushback(c);
12796 return tLEQ;
12797 }
12798 if (c == '<') {
12799 if ((c = nextc()) == '=') {
12800 set_yylval_id(tLSHFT);
12801 lex_state = EXPR_BEG;
12802 return tOP_ASGN;
12803 }
12804 pushback(c);
12805 warn_balanced("<<", "here document");
12806 return tLSHFT;
12807 }
12808 pushback(c);
12809 return '<';
12810
12811 case '>':
12812 switch (lex_state) {
12813 case EXPR_FNAME: case EXPR_DOT:
12814 lex_state = EXPR_ARG; break;
12815 default:
12816 lex_state = EXPR_BEG; break;
12817 }
12818 if ((c = nextc()) == '=') {
12819 return tGEQ;
12820 }
12821 if (c == '>') {
12822 if ((c = nextc()) == '=') {
12823 set_yylval_id(tRSHFT);
12824 lex_state = EXPR_BEG;
12825 return tOP_ASGN;
12826 }
12827 pushback(c);
12828 return tRSHFT;
12829 }
12830 pushback(c);
12831 return '>';
12832
12833 case '"':
12834 lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
12835 return tSTRING_BEG;
12836
12837 case '`':
12838 if (lex_state == EXPR_FNAME) {
12839 lex_state = EXPR_ENDFN;
12840 return c;
12841 }
12842 if (lex_state == EXPR_DOT) {
12843 if (cmd_state)
12844 lex_state = EXPR_CMDARG;
12845 else
12846 lex_state = EXPR_ARG;
12847 return c;
12848 }
12849 lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
12850 return tXSTRING_BEG;
12851
12852 case '\'':
12853 lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
12854 return tSTRING_BEG;
12855
12856 case '?':
12857 if (IS_END()) {
12858 lex_state = EXPR_VALUE;
12859 return '?';
12860 }
12861 c = nextc();
12862 if (c == -1) {
12863 compile_error(PARSER_ARG "incomplete character syntax");
12864 return 0;
12865 }
12866 if (rb_enc_isspace(c, parser->enc)) {
12867 if (!IS_ARG()) {
12868 int c2 = 0;
12869 switch (c) {
12870 case ' ':
12871 c2 = 's';
12872 break;
12873 case '\n':
12874 c2 = 'n';
12875 break;
12876 case '\t':
12877 c2 = 't';
12878 break;
12879 case '\v':
12880 c2 = 'v';
12881 break;
12882 case '\r':
12883 c2 = 'r';
12884 break;
12885 case '\f':
12886 c2 = 'f';
12887 break;
12888 }
12889 if (c2) {
12890 rb_warnI("invalid character syntax; use ?\\%c", c2);
12891 }
12892 }
12893 ternary:
12894 pushback(c);
12895 lex_state = EXPR_VALUE;
12896 return '?';
12897 }
12898 newtok();
12899 enc = parser->enc;
12900 if (!parser_isascii()) {
12901 if (tokadd_mbchar(c) == -1) return 0;
12902 }
12903 else if ((rb_enc_isalnum(c, parser->enc) || c == '_') &&
12904 lex_p < lex_pend && is_identchar(lex_p, lex_pend, parser->enc)) {
12905 goto ternary;
12906 }
12907 else if (c == '\\') {
12908 if (peek('u')) {
12909 nextc();
12910 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
12911 if (0x80 <= c) {
12912 tokaddmbc(c, enc);
12913 }
12914 else {
12915 tokadd(c);
12916 }
12917 }
12918 else {
12919 c = read_escape(0, &enc);
12920 tokadd(c);
12921 }
12922 }
12923 else {
12924 tokadd(c);
12925 }
12926 tokfix();
12927 set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
12928 lex_state = EXPR_END;
12929 return tCHAR;
12930
12931 case '&':
12932 if ((c = nextc()) == '&') {
12933 lex_state = EXPR_BEG;
12934 if ((c = nextc()) == '=') {
12935 set_yylval_id(tANDOP);
12936 lex_state = EXPR_BEG;
12937 return tOP_ASGN;
12938 }
12939 pushback(c);
12940 return tANDOP;
12941 }
12942 else if (c == '=') {
12943 set_yylval_id('&');
12944 lex_state = EXPR_BEG;
12945 return tOP_ASGN;
12946 }
12947 pushback(c);
12948 if (IS_SPCARG(c)) {
12949 rb_warning0("`&' interpreted as argument prefix");
12950 c = tAMPER;
12951 }
12952 else if (IS_BEG()) {
12953 c = tAMPER;
12954 }
12955 else {
12956 warn_balanced("&", "argument prefix");
12957 c = '&';
12958 }
12959 switch (lex_state) {
12960 case EXPR_FNAME: case EXPR_DOT:
12961 lex_state = EXPR_ARG; break;
12962 default:
12963 lex_state = EXPR_BEG;
12964 }
12965 return c;
12966
12967 case '|':
12968 if ((c = nextc()) == '|') {
12969 lex_state = EXPR_BEG;
12970 if ((c = nextc()) == '=') {
12971 set_yylval_id(tOROP);
12972 lex_state = EXPR_BEG;
12973 return tOP_ASGN;
12974 }
12975 pushback(c);
12976 return tOROP;
12977 }
12978 if (c == '=') {
12979 set_yylval_id('|');
12980 lex_state = EXPR_BEG;
12981 return tOP_ASGN;
12982 }
12983 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12984 lex_state = EXPR_ARG;
12985 }
12986 else {
12987 lex_state = EXPR_BEG;
12988 }
12989 pushback(c);
12990 return '|';
12991
12992 case '+':
12993 c = nextc();
12994 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12995 lex_state = EXPR_ARG;
12996 if (c == '@') {
12997 return tUPLUS;
12998 }
12999 pushback(c);
13000 return '+';
13001 }
13002 if (c == '=') {
13003 set_yylval_id('+');
13004 lex_state = EXPR_BEG;
13005 return tOP_ASGN;
13006 }
13007 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13008 lex_state = EXPR_BEG;
13009 pushback(c);
13010 if (c != -1 && ISDIGIT(c)) {
13011 c = '+';
13012 goto start_num;
13013 }
13014 return tUPLUS;
13015 }
13016 lex_state = EXPR_BEG;
13017 pushback(c);
13018 warn_balanced("+", "unary operator");
13019 return '+';
13020
13021 case '-':
13022 c = nextc();
13023 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13024 lex_state = EXPR_ARG;
13025 if (c == '@') {
13026 return tUMINUS;
13027 }
13028 pushback(c);
13029 return '-';
13030 }
13031 if (c == '=') {
13032 set_yylval_id('-');
13033 lex_state = EXPR_BEG;
13034 return tOP_ASGN;
13035 }
13036 if (c == '>') {
13037 lex_state = EXPR_ARG;
13038 return tLAMBDA;
13039 }
13040 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13041 lex_state = EXPR_BEG;
13042 pushback(c);
13043 if (c != -1 && ISDIGIT(c)) {
13044 return tUMINUS_NUM;
13045 }
13046 return tUMINUS;
13047 }
13048 lex_state = EXPR_BEG;
13049 pushback(c);
13050 warn_balanced("-", "unary operator");
13051 return '-';
13052
13053 case '.':
13054 lex_state = EXPR_BEG;
13055 if ((c = nextc()) == '.') {
13056 if ((c = nextc()) == '.') {
13057 return tDOT3;
13058 }
13059 pushback(c);
13060 return tDOT2;
13061 }
13062 pushback(c);
13063 if (c != -1 && ISDIGIT(c)) {
13064 yyerror("no .<digit> floating literal anymore; put 0 before dot");
13065 }
13066 lex_state = EXPR_DOT;
13067 return '.';
13068
13069 start_num:
13070 case '0': case '1': case '2': case '3': case '4':
13071 case '5': case '6': case '7': case '8': case '9':
13072 {
13073 int is_float, seen_point, seen_e, nondigit;
13074
13075 is_float = seen_point = seen_e = nondigit = 0;
13076 lex_state = EXPR_END;
13077 newtok();
13078 if (c == '-' || c == '+') {
13079 tokadd(c);
13080 c = nextc();
13081 }
13082 if (c == '0') {
13083 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13084 int start = toklen();
13085 c = nextc();
13086 if (c == 'x' || c == 'X') {
13087
13088 c = nextc();
13089 if (c != -1 && ISXDIGIT(c)) {
13090 do {
13091 if (c == '_') {
13092 if (nondigit) break;
13093 nondigit = c;
13094 continue;
13095 }
13096 if (!ISXDIGIT(c)) break;
13097 nondigit = 0;
13098 tokadd(c);
13099 } while ((c = nextc()) != -1);
13100 }
13101 pushback(c);
13102 tokfix();
13103 if (toklen() == start) {
13104 no_digits();
13105 }
13106 else if (nondigit) goto trailing_uc;
13107 set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE));
13108 return tINTEGER;
13109 }
13110 if (c == 'b' || c == 'B') {
13111
13112 c = nextc();
13113 if (c == '0' || c == '1') {
13114 do {
13115 if (c == '_') {
13116 if (nondigit) break;
13117 nondigit = c;
13118 continue;
13119 }
13120 if (c != '0' && c != '1') break;
13121 nondigit = 0;
13122 tokadd(c);
13123 } while ((c = nextc()) != -1);
13124 }
13125 pushback(c);
13126 tokfix();
13127 if (toklen() == start) {
13128 no_digits();
13129 }
13130 else if (nondigit) goto trailing_uc;
13131 set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE));
13132 return tINTEGER;
13133 }
13134 if (c == 'd' || c == 'D') {
13135
13136 c = nextc();
13137 if (c != -1 && ISDIGIT(c)) {
13138 do {
13139 if (c == '_') {
13140 if (nondigit) break;
13141 nondigit = c;
13142 continue;
13143 }
13144 if (!ISDIGIT(c)) break;
13145 nondigit = 0;
13146 tokadd(c);
13147 } while ((c = nextc()) != -1);
13148 }
13149 pushback(c);
13150 tokfix();
13151 if (toklen() == start) {
13152 no_digits();
13153 }
13154 else if (nondigit) goto trailing_uc;
13155 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13156 return tINTEGER;
13157 }
13158 if (c == '_') {
13159
13160 goto octal_number;
13161 }
13162 if (c == 'o' || c == 'O') {
13163
13164 c = nextc();
13165 if (c == -1 || c == '_' || !ISDIGIT(c)) {
13166 no_digits();
13167 }
13168 }
13169 if (c >= '0' && c <= '7') {
13170
13171 octal_number:
13172 do {
13173 if (c == '_') {
13174 if (nondigit) break;
13175 nondigit = c;
13176 continue;
13177 }
13178 if (c < '0' || c > '9') break;
13179 if (c > '7') goto invalid_octal;
13180 nondigit = 0;
13181 tokadd(c);
13182 } while ((c = nextc()) != -1);
13183 if (toklen() > start) {
13184 pushback(c);
13185 tokfix();
13186 if (nondigit) goto trailing_uc;
13187 set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE));
13188 return tINTEGER;
13189 }
13190 if (nondigit) {
13191 pushback(c);
13192 goto trailing_uc;
13193 }
13194 }
13195 if (c > '7' && c <= '9') {
13196 invalid_octal:
13197 yyerror("Invalid octal digit");
13198 }
13199 else if (c == '.' || c == 'e' || c == 'E') {
13200 tokadd('0');
13201 }
13202 else {
13203 pushback(c);
13204 set_yylval_literal(INT2FIX(0));
13205 return tINTEGER;
13206 }
13207 }
13208
13209 for (;;) {
13210 switch (c) {
13211 case '0': case '1': case '2': case '3': case '4':
13212 case '5': case '6': case '7': case '8': case '9':
13213 nondigit = 0;
13214 tokadd(c);
13215 break;
13216
13217 case '.':
13218 if (nondigit) goto trailing_uc;
13219 if (seen_point || seen_e) {
13220 goto decode_num;
13221 }
13222 else {
13223 int c0 = nextc();
13224 if (c0 == -1 || !ISDIGIT(c0)) {
13225 pushback(c0);
13226 goto decode_num;
13227 }
13228 c = c0;
13229 }
13230 tokadd('.');
13231 tokadd(c);
13232 is_float++;
13233 seen_point++;
13234 nondigit = 0;
13235 break;
13236
13237 case 'e':
13238 case 'E':
13239 if (nondigit) {
13240 pushback(c);
13241 c = nondigit;
13242 goto decode_num;
13243 }
13244 if (seen_e) {
13245 goto decode_num;
13246 }
13247 tokadd(c);
13248 seen_e++;
13249 is_float++;
13250 nondigit = c;
13251 c = nextc();
13252 if (c != '-' && c != '+') continue;
13253 tokadd(c);
13254 nondigit = c;
13255 break;
13256
13257 case '_':
13258 if (nondigit) goto decode_num;
13259 nondigit = c;
13260 break;
13261
13262 default:
13263 goto decode_num;
13264 }
13265 c = nextc();
13266 }
13267
13268 decode_num:
13269 pushback(c);
13270 if (nondigit) {
13271 char tmp[30];
13272 trailing_uc:
13273 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
13274 yyerror(tmp);
13275 }
13276 tokfix();
13277 if (is_float) {
13278 double d = strtod(tok(), 0);
13279 if (errno == ERANGE) {
13280 rb_warningS("Float %s out of range", tok());
13281 errno = 0;
13282 }
13283 set_yylval_literal(DBL2NUM(d));
13284 return tFLOAT;
13285 }
13286 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13287 return tINTEGER;
13288 }
13289
13290 case ')':
13291 case ']':
13292 paren_nest--;
13293 case '}':
13294 COND_LEXPOP();
13295 CMDARG_LEXPOP();
13296 if (c == ')')
13297 lex_state = EXPR_ENDFN;
13298 else
13299 lex_state = EXPR_ENDARG;
13300 return c;
13301
13302 case ':':
13303 c = nextc();
13304 if (c == ':') {
13305 if (IS_BEG() || lex_state == EXPR_CLASS || IS_SPCARG(-1)) {
13306 lex_state = EXPR_BEG;
13307 return tCOLON3;
13308 }
13309 lex_state = EXPR_DOT;
13310 return tCOLON2;
13311 }
13312 if (IS_END() || ISSPACE(c)) {
13313 pushback(c);
13314 warn_balanced(":", "symbol literal");
13315 lex_state = EXPR_BEG;
13316 return ':';
13317 }
13318 switch (c) {
13319 case '\'':
13320 lex_strterm = NEW_STRTERM(str_ssym, c, 0);
13321 break;
13322 case '"':
13323 lex_strterm = NEW_STRTERM(str_dsym, c, 0);
13324 break;
13325 default:
13326 pushback(c);
13327 break;
13328 }
13329 lex_state = EXPR_FNAME;
13330 return tSYMBEG;
13331
13332 case '/':
13333 if (IS_BEG()) {
13334 lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13335 return tREGEXP_BEG;
13336 }
13337 if ((c = nextc()) == '=') {
13338 set_yylval_id('/');
13339 lex_state = EXPR_BEG;
13340 return tOP_ASGN;
13341 }
13342 pushback(c);
13343 if (IS_SPCARG(c)) {
13344 arg_ambiguous();
13345 lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13346 return tREGEXP_BEG;
13347 }
13348 switch (lex_state) {
13349 case EXPR_FNAME: case EXPR_DOT:
13350 lex_state = EXPR_ARG; break;
13351 default:
13352 lex_state = EXPR_BEG; break;
13353 }
13354 warn_balanced("/", "regexp literal");
13355 return '/';
13356
13357 case '^':
13358 if ((c = nextc()) == '=') {
13359 set_yylval_id('^');
13360 lex_state = EXPR_BEG;
13361 return tOP_ASGN;
13362 }
13363 switch (lex_state) {
13364 case EXPR_FNAME: case EXPR_DOT:
13365 lex_state = EXPR_ARG; break;
13366 default:
13367 lex_state = EXPR_BEG; break;
13368 }
13369 pushback(c);
13370 return '^';
13371
13372 case ';':
13373 lex_state = EXPR_BEG;
13374 command_start = TRUE;
13375 return ';';
13376
13377 case ',':
13378 lex_state = EXPR_BEG;
13379 return ',';
13380
13381 case '~':
13382 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13383 if ((c = nextc()) != '@') {
13384 pushback(c);
13385 }
13386 lex_state = EXPR_ARG;
13387 }
13388 else {
13389 lex_state = EXPR_BEG;
13390 }
13391 return '~';
13392
13393 case '(':
13394 if (IS_BEG()) {
13395 c = tLPAREN;
13396 }
13397 else if (IS_SPCARG(-1)) {
13398 c = tLPAREN_ARG;
13399 }
13400 paren_nest++;
13401 COND_PUSH(0);
13402 CMDARG_PUSH(0);
13403 lex_state = EXPR_BEG;
13404 return c;
13405
13406 case '[':
13407 paren_nest++;
13408 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13409 lex_state = EXPR_ARG;
13410 if ((c = nextc()) == ']') {
13411 if ((c = nextc()) == '=') {
13412 return tASET;
13413 }
13414 pushback(c);
13415 return tAREF;
13416 }
13417 pushback(c);
13418 return '[';
13419 }
13420 else if (IS_BEG()) {
13421 c = tLBRACK;
13422 }
13423 else if (IS_ARG() && space_seen) {
13424 c = tLBRACK;
13425 }
13426 lex_state = EXPR_BEG;
13427 COND_PUSH(0);
13428 CMDARG_PUSH(0);
13429 return c;
13430
13431 case '{':
13432 if (lpar_beg && lpar_beg == paren_nest) {
13433 lex_state = EXPR_BEG;
13434 lpar_beg = 0;
13435 --paren_nest;
13436 COND_PUSH(0);
13437 CMDARG_PUSH(0);
13438 return tLAMBEG;
13439 }
13440 if (IS_ARG() || lex_state == EXPR_END || lex_state == EXPR_ENDFN)
13441 c = '{';
13442 else if (lex_state == EXPR_ENDARG)
13443 c = tLBRACE_ARG;
13444 else
13445 c = tLBRACE;
13446 COND_PUSH(0);
13447 CMDARG_PUSH(0);
13448 lex_state = EXPR_BEG;
13449 if (c != tLBRACE) command_start = TRUE;
13450 return c;
13451
13452 case '\\':
13453 c = nextc();
13454 if (c == '\n') {
13455 space_seen = 1;
13456 #ifdef RIPPER
13457 ripper_dispatch_scan_event(parser, tSP);
13458 #endif
13459 goto retry;
13460 }
13461 pushback(c);
13462 return '\\';
13463
13464 case '%':
13465 if (IS_BEG()) {
13466 int term;
13467 int paren;
13468
13469 c = nextc();
13470 quotation:
13471 if (c == -1 || !ISALNUM(c)) {
13472 term = c;
13473 c = 'Q';
13474 }
13475 else {
13476 term = nextc();
13477 if (rb_enc_isalnum(term, parser->enc) || !parser_isascii()) {
13478 yyerror("unknown type of %string");
13479 return 0;
13480 }
13481 }
13482 if (c == -1 || term == -1) {
13483 compile_error(PARSER_ARG "unterminated quoted string meets end of file");
13484 return 0;
13485 }
13486 paren = term;
13487 if (term == '(') term = ')';
13488 else if (term == '[') term = ']';
13489 else if (term == '{') term = '}';
13490 else if (term == '<') term = '>';
13491 else paren = 0;
13492
13493 switch (c) {
13494 case 'Q':
13495 lex_strterm = NEW_STRTERM(str_dquote, term, paren);
13496 return tSTRING_BEG;
13497
13498 case 'q':
13499 lex_strterm = NEW_STRTERM(str_squote, term, paren);
13500 return tSTRING_BEG;
13501
13502 case 'W':
13503 lex_strterm = NEW_STRTERM(str_dword, term, paren);
13504 do {c = nextc();} while (ISSPACE(c));
13505 pushback(c);
13506 return tWORDS_BEG;
13507
13508 case 'w':
13509 lex_strterm = NEW_STRTERM(str_sword, term, paren);
13510 do {c = nextc();} while (ISSPACE(c));
13511 pushback(c);
13512 return tQWORDS_BEG;
13513
13514 case 'x':
13515 lex_strterm = NEW_STRTERM(str_xquote, term, paren);
13516 return tXSTRING_BEG;
13517
13518 case 'r':
13519 lex_strterm = NEW_STRTERM(str_regexp, term, paren);
13520 return tREGEXP_BEG;
13521
13522 case 's':
13523 lex_strterm = NEW_STRTERM(str_ssym, term, paren);
13524 lex_state = EXPR_FNAME;
13525 return tSYMBEG;
13526
13527 default:
13528 yyerror("unknown type of %string");
13529 return 0;
13530 }
13531 }
13532 if ((c = nextc()) == '=') {
13533 set_yylval_id('%');
13534 lex_state = EXPR_BEG;
13535 return tOP_ASGN;
13536 }
13537 if (IS_SPCARG(c)) {
13538 goto quotation;
13539 }
13540 switch (lex_state) {
13541 case EXPR_FNAME: case EXPR_DOT:
13542 lex_state = EXPR_ARG; break;
13543 default:
13544 lex_state = EXPR_BEG; break;
13545 }
13546 pushback(c);
13547 warn_balanced("%%", "string literal");
13548 return '%';
13549
13550 case '$':
13551 lex_state = EXPR_END;
13552 newtok();
13553 c = nextc();
13554 switch (c) {
13555 case '_':
13556 c = nextc();
13557 if (parser_is_identchar()) {
13558 tokadd('$');
13559 tokadd('_');
13560 break;
13561 }
13562 pushback(c);
13563 c = '_';
13564
13565 case '~':
13566 case '*':
13567 case '$':
13568 case '?':
13569 case '!':
13570 case '@':
13571 case '/':
13572 case '\\':
13573 case ';':
13574 case ',':
13575 case '.':
13576 case '=':
13577 case ':':
13578 case '<':
13579 case '>':
13580 case '\"':
13581 tokadd('$');
13582 tokadd(c);
13583 tokfix();
13584 set_yylval_name(rb_intern(tok()));
13585 return tGVAR;
13586
13587 case '-':
13588 tokadd('$');
13589 tokadd(c);
13590 c = nextc();
13591 if (parser_is_identchar()) {
13592 if (tokadd_mbchar(c) == -1) return 0;
13593 }
13594 else {
13595 pushback(c);
13596 }
13597 gvar:
13598 tokfix();
13599 set_yylval_name(rb_intern(tok()));
13600 return tGVAR;
13601
13602 case '&':
13603 case '`':
13604 case '\'':
13605 case '+':
13606 if (last_state == EXPR_FNAME) {
13607 tokadd('$');
13608 tokadd(c);
13609 goto gvar;
13610 }
13611 set_yylval_node(NEW_BACK_REF(c));
13612 return tBACK_REF;
13613
13614 case '1': case '2': case '3':
13615 case '4': case '5': case '6':
13616 case '7': case '8': case '9':
13617 tokadd('$');
13618 do {
13619 tokadd(c);
13620 c = nextc();
13621 } while (c != -1 && ISDIGIT(c));
13622 pushback(c);
13623 if (last_state == EXPR_FNAME) goto gvar;
13624 tokfix();
13625 set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
13626 return tNTH_REF;
13627
13628 default:
13629 if (!parser_is_identchar()) {
13630 pushback(c);
13631 return '$';
13632 }
13633 case '0':
13634 tokadd('$');
13635 }
13636 break;
13637
13638 case '@':
13639 c = nextc();
13640 newtok();
13641 tokadd('@');
13642 if (c == '@') {
13643 tokadd('@');
13644 c = nextc();
13645 }
13646 if (c != -1 && ISDIGIT(c)) {
13647 if (tokidx == 1) {
13648 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
13649 }
13650 else {
13651 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
13652 }
13653 return 0;
13654 }
13655 if (!parser_is_identchar()) {
13656 pushback(c);
13657 return '@';
13658 }
13659 break;
13660
13661 case '_':
13662 if (was_bol() && whole_match_p("__END__", 7, 0)) {
13663 ruby__end__seen = 1;
13664 parser->eofp = Qtrue;
13665 #ifndef RIPPER
13666 return -1;
13667 #else
13668 lex_goto_eol(parser);
13669 ripper_dispatch_scan_event(parser, k__END__);
13670 return 0;
13671 #endif
13672 }
13673 newtok();
13674 break;
13675
13676 default:
13677 if (!parser_is_identchar()) {
13678 rb_compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c);
13679 goto retry;
13680 }
13681
13682 newtok();
13683 break;
13684 }
13685
13686 mb = ENC_CODERANGE_7BIT;
13687 do {
13688 if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
13689 if (tokadd_mbchar(c) == -1) return 0;
13690 c = nextc();
13691 } while (parser_is_identchar());
13692 switch (tok()[0]) {
13693 case '@': case '$':
13694 pushback(c);
13695 break;
13696 default:
13697 if ((c == '!' || c == '?') && !peek('=')) {
13698 tokadd(c);
13699 }
13700 else {
13701 pushback(c);
13702 }
13703 }
13704 tokfix();
13705
13706 {
13707 int result = 0;
13708
13709 last_state = lex_state;
13710 switch (tok()[0]) {
13711 case '$':
13712 lex_state = EXPR_END;
13713 result = tGVAR;
13714 break;
13715 case '@':
13716 lex_state = EXPR_END;
13717 if (tok()[1] == '@')
13718 result = tCVAR;
13719 else
13720 result = tIVAR;
13721 break;
13722
13723 default:
13724 if (toklast() == '!' || toklast() == '?') {
13725 result = tFID;
13726 }
13727 else {
13728 if (lex_state == EXPR_FNAME) {
13729 if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
13730 (!peek('=') || (lex_p + 1 < lex_pend && lex_p[1] == '>'))) {
13731 result = tIDENTIFIER;
13732 tokadd(c);
13733 tokfix();
13734 }
13735 else {
13736 pushback(c);
13737 }
13738 }
13739 if (result == 0 && ISUPPER(tok()[0])) {
13740 result = tCONSTANT;
13741 }
13742 else {
13743 result = tIDENTIFIER;
13744 }
13745 }
13746
13747 if ((lex_state == EXPR_BEG && !cmd_state) ||
13748 IS_ARG()) {
13749 if (peek(':') && !(lex_p + 1 < lex_pend && lex_p[1] == ':')) {
13750 lex_state = EXPR_BEG;
13751 nextc();
13752 set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb)));
13753 return tLABEL;
13754 }
13755 }
13756 if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) {
13757 const struct kwtable *kw;
13758
13759
13760 kw = rb_reserved_word(tok(), toklen());
13761 if (kw) {
13762 enum lex_state_e state = lex_state;
13763 lex_state = kw->state;
13764 if (state == EXPR_FNAME) {
13765 set_yylval_name(rb_intern(kw->name));
13766 return kw->id[0];
13767 }
13768 if (kw->id[0] == keyword_do) {
13769 command_start = TRUE;
13770 if (lpar_beg && lpar_beg == paren_nest) {
13771 lpar_beg = 0;
13772 --paren_nest;
13773 return keyword_do_LAMBDA;
13774 }
13775 if (COND_P()) return keyword_do_cond;
13776 if (CMDARG_P() && state != EXPR_CMDARG)
13777 return keyword_do_block;
13778 if (state == EXPR_ENDARG || state == EXPR_BEG)
13779 return keyword_do_block;
13780 return keyword_do;
13781 }
13782 if (state == EXPR_BEG || state == EXPR_VALUE)
13783 return kw->id[0];
13784 else {
13785 if (kw->id[0] != kw->id[1])
13786 lex_state = EXPR_BEG;
13787 return kw->id[1];
13788 }
13789 }
13790 }
13791
13792 if (IS_BEG() ||
13793 lex_state == EXPR_DOT ||
13794 IS_ARG()) {
13795 if (cmd_state) {
13796 lex_state = EXPR_CMDARG;
13797 }
13798 else {
13799 lex_state = EXPR_ARG;
13800 }
13801 }
13802 else if (lex_state == EXPR_FNAME) {
13803 lex_state = EXPR_ENDFN;
13804 }
13805 else {
13806 lex_state = EXPR_END;
13807 }
13808 }
13809 {
13810 ID ident = TOK_INTERN(!ENC_SINGLE(mb));
13811
13812 set_yylval_name(ident);
13813 if (last_state != EXPR_DOT && is_local_id(ident) && lvar_defined(ident)) {
13814 lex_state = EXPR_END;
13815 }
13816 }
13817 return result;
13818 }
13819 }
13820
13821 #if YYPURE
13822 static int
13823 yylex(void *lval, void *p)
13824 #else
13825 yylex(void *p)
13826 #endif
13827 {
13828 struct parser_params *parser = (struct parser_params*)p;
13829 int t;
13830
13831 #if YYPURE
13832 parser->parser_yylval = lval;
13833 parser->parser_yylval->val = Qundef;
13834 #endif
13835 t = parser_yylex(parser);
13836 #ifdef RIPPER
13837 if (!NIL_P(parser->delayed)) {
13838 ripper_dispatch_delayed_token(parser, t);
13839 }
13840 if (t != 0)
13841 ripper_dispatch_scan_event(parser, t);
13842 #endif
13843
13844 return t;
13845 }
13846
13847 #ifndef RIPPER
13848 static NODE*
13849 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
13850 {
13851 NODE *n = (rb_node_newnode)(type, a0, a1, a2);
13852 nd_set_line(n, ruby_sourceline);
13853 return n;
13854 }
13855
13856 enum node_type
13857 nodetype(NODE *node)
13858 {
13859 return (enum node_type)nd_type(node);
13860 }
13861
13862 int
13863 nodeline(NODE *node)
13864 {
13865 return nd_line(node);
13866 }
13867
13868 static NODE*
13869 newline_node(NODE *node)
13870 {
13871 if (node) {
13872 node = remove_begin(node);
13873 node->flags |= NODE_FL_NEWLINE;
13874 }
13875 return node;
13876 }
13877
13878 static void
13879 fixpos(NODE *node, NODE *orig)
13880 {
13881 if (!node) return;
13882 if (!orig) return;
13883 if (orig == (NODE*)1) return;
13884 nd_set_line(node, nd_line(orig));
13885 }
13886
13887 static void
13888 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
13889 {
13890 rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
13891 }
13892 #define parser_warning(node, mesg) parser_warning(parser, node, mesg)
13893
13894 static void
13895 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
13896 {
13897 rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
13898 }
13899 #define parser_warn(node, mesg) parser_warn(parser, node, mesg)
13900
13901 static NODE*
13902 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
13903 {
13904 NODE *end, *h = head, *nd;
13905
13906 if (tail == 0) return head;
13907
13908 if (h == 0) return tail;
13909 switch (nd_type(h)) {
13910 case NODE_LIT:
13911 case NODE_STR:
13912 case NODE_SELF:
13913 case NODE_TRUE:
13914 case NODE_FALSE:
13915 case NODE_NIL:
13916 parser_warning(h, "unused literal ignored");
13917 return tail;
13918 default:
13919 h = end = NEW_BLOCK(head);
13920 end->nd_end = end;
13921 fixpos(end, head);
13922 head = end;
13923 break;
13924 case NODE_BLOCK:
13925 end = h->nd_end;
13926 break;
13927 }
13928
13929 nd = end->nd_head;
13930 switch (nd_type(nd)) {
13931 case NODE_RETURN:
13932 case NODE_BREAK:
13933 case NODE_NEXT:
13934 case NODE_REDO:
13935 case NODE_RETRY:
13936 if (RTEST(ruby_verbose)) {
13937 parser_warning(nd, "statement not reached");
13938 }
13939 break;
13940
13941 default:
13942 break;
13943 }
13944
13945 if (nd_type(tail) != NODE_BLOCK) {
13946 tail = NEW_BLOCK(tail);
13947 tail->nd_end = tail;
13948 }
13949 end->nd_next = tail;
13950 h->nd_end = tail->nd_end;
13951 return head;
13952 }
13953
13954
13955 static NODE*
13956 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
13957 {
13958 NODE *last;
13959
13960 if (list == 0) return NEW_LIST(item);
13961 if (list->nd_next) {
13962 last = list->nd_next->nd_end;
13963 }
13964 else {
13965 last = list;
13966 }
13967
13968 list->nd_alen += 1;
13969 last->nd_next = NEW_LIST(item);
13970 list->nd_next->nd_end = last->nd_next;
13971 return list;
13972 }
13973
13974
13975 static NODE*
13976 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
13977 {
13978 NODE *last;
13979
13980 if (head->nd_next) {
13981 last = head->nd_next->nd_end;
13982 }
13983 else {
13984 last = head;
13985 }
13986
13987 head->nd_alen += tail->nd_alen;
13988 last->nd_next = tail;
13989 if (tail->nd_next) {
13990 head->nd_next->nd_end = tail->nd_next->nd_end;
13991 }
13992 else {
13993 head->nd_next->nd_end = tail;
13994 }
13995
13996 return head;
13997 }
13998
13999 static int
14000 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
14001 {
14002 if (NIL_P(tail)) return 1;
14003 if (!rb_enc_compatible(head, tail)) {
14004 compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
14005 rb_enc_name(rb_enc_get(head)),
14006 rb_enc_name(rb_enc_get(tail)));
14007 rb_str_resize(head, 0);
14008 rb_str_resize(tail, 0);
14009 return 0;
14010 }
14011 rb_str_buf_append(head, tail);
14012 return 1;
14013 }
14014
14015
14016 static NODE *
14017 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14018 {
14019 enum node_type htype;
14020
14021 if (!head) return tail;
14022 if (!tail) return head;
14023
14024 htype = nd_type(head);
14025 if (htype == NODE_EVSTR) {
14026 NODE *node = NEW_DSTR(Qnil);
14027 head = list_append(node, head);
14028 }
14029 switch (nd_type(tail)) {
14030 case NODE_STR:
14031 if (htype == NODE_STR) {
14032 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) {
14033 error:
14034 rb_gc_force_recycle((VALUE)head);
14035 rb_gc_force_recycle((VALUE)tail);
14036 return 0;
14037 }
14038 rb_gc_force_recycle((VALUE)tail);
14039 }
14040 else {
14041 list_append(head, tail);
14042 }
14043 break;
14044
14045 case NODE_DSTR:
14046 if (htype == NODE_STR) {
14047 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
14048 goto error;
14049 tail->nd_lit = head->nd_lit;
14050 rb_gc_force_recycle((VALUE)head);
14051 head = tail;
14052 }
14053 else if (NIL_P(tail->nd_lit)) {
14054 head->nd_alen += tail->nd_alen - 1;
14055 head->nd_next->nd_end->nd_next = tail->nd_next;
14056 head->nd_next->nd_end = tail->nd_next->nd_end;
14057 rb_gc_force_recycle((VALUE)tail);
14058 }
14059 else {
14060 nd_set_type(tail, NODE_ARRAY);
14061 tail->nd_head = NEW_STR(tail->nd_lit);
14062 list_concat(head, tail);
14063 }
14064 break;
14065
14066 case NODE_EVSTR:
14067 if (htype == NODE_STR) {
14068 nd_set_type(head, NODE_DSTR);
14069 head->nd_alen = 1;
14070 }
14071 list_append(head, tail);
14072 break;
14073 }
14074 return head;
14075 }
14076
14077 static NODE *
14078 evstr2dstr_gen(struct parser_params *parser, NODE *node)
14079 {
14080 if (nd_type(node) == NODE_EVSTR) {
14081 node = list_append(NEW_DSTR(Qnil), node);
14082 }
14083 return node;
14084 }
14085
14086 static NODE *
14087 new_evstr_gen(struct parser_params *parser, NODE *node)
14088 {
14089 NODE *head = node;
14090
14091 if (node) {
14092 switch (nd_type(node)) {
14093 case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
14094 return node;
14095 }
14096 }
14097 return NEW_EVSTR(head);
14098 }
14099
14100 static NODE *
14101 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
14102 {
14103 value_expr(recv);
14104 value_expr(arg1);
14105 return NEW_CALL(recv, id, NEW_LIST(arg1));
14106 }
14107
14108 static NODE *
14109 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
14110 {
14111 value_expr(recv);
14112 return NEW_CALL(recv, id, 0);
14113 }
14114
14115 static NODE*
14116 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14117 {
14118 value_expr(node1);
14119 value_expr(node2);
14120 if (node1) {
14121 switch (nd_type(node1)) {
14122 case NODE_DREGX:
14123 case NODE_DREGX_ONCE:
14124 return NEW_MATCH2(node1, node2);
14125
14126 case NODE_LIT:
14127 if (TYPE(node1->nd_lit) == T_REGEXP) {
14128 return NEW_MATCH2(node1, node2);
14129 }
14130 }
14131 }
14132
14133 if (node2) {
14134 switch (nd_type(node2)) {
14135 case NODE_DREGX:
14136 case NODE_DREGX_ONCE:
14137 return NEW_MATCH3(node2, node1);
14138
14139 case NODE_LIT:
14140 if (TYPE(node2->nd_lit) == T_REGEXP) {
14141 return NEW_MATCH3(node2, node1);
14142 }
14143 }
14144 }
14145
14146 return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
14147 }
14148
14149 static NODE*
14150 gettable_gen(struct parser_params *parser, ID id)
14151 {
14152 if (id == keyword_self) {
14153 return NEW_SELF();
14154 }
14155 else if (id == keyword_nil) {
14156 return NEW_NIL();
14157 }
14158 else if (id == keyword_true) {
14159 return NEW_TRUE();
14160 }
14161 else if (id == keyword_false) {
14162 return NEW_FALSE();
14163 }
14164 else if (id == keyword__FILE__) {
14165 return NEW_STR(rb_external_str_new_with_enc(ruby_sourcefile, strlen(ruby_sourcefile),
14166 rb_filesystem_encoding()));
14167 }
14168 else if (id == keyword__LINE__) {
14169 return NEW_LIT(INT2FIX(ruby_sourceline));
14170 }
14171 else if (id == keyword__ENCODING__) {
14172 return NEW_LIT(rb_enc_from_encoding(parser->enc));
14173 }
14174 else if (is_local_id(id)) {
14175 if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
14176 if (local_id(id)) return NEW_LVAR(id);
14177
14178 return NEW_VCALL(id);
14179 }
14180 else if (is_global_id(id)) {
14181 return NEW_GVAR(id);
14182 }
14183 else if (is_instance_id(id)) {
14184 return NEW_IVAR(id);
14185 }
14186 else if (is_const_id(id)) {
14187 return NEW_CONST(id);
14188 }
14189 else if (is_class_id(id)) {
14190 return NEW_CVAR(id);
14191 }
14192 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14193 return 0;
14194 }
14195 #endif
14196
14197 #ifdef RIPPER
14198 static VALUE
14199 assignable_gen(struct parser_params *parser, VALUE lhs)
14200 #else
14201 static NODE*
14202 assignable_gen(struct parser_params *parser, ID id, NODE *val)
14203 #endif
14204 {
14205 #ifdef RIPPER
14206 ID id = get_id(lhs);
14207 # define assignable_result(x) get_value(lhs)
14208 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
14209 #else
14210 # define assignable_result(x) x
14211 #endif
14212 if (!id) return assignable_result(0);
14213 if (id == keyword_self) {
14214 yyerror("Can't change the value of self");
14215 }
14216 else if (id == keyword_nil) {
14217 yyerror("Can't assign to nil");
14218 }
14219 else if (id == keyword_true) {
14220 yyerror("Can't assign to true");
14221 }
14222 else if (id == keyword_false) {
14223 yyerror("Can't assign to false");
14224 }
14225 else if (id == keyword__FILE__) {
14226 yyerror("Can't assign to __FILE__");
14227 }
14228 else if (id == keyword__LINE__) {
14229 yyerror("Can't assign to __LINE__");
14230 }
14231 else if (id == keyword__ENCODING__) {
14232 yyerror("Can't assign to __ENCODING__");
14233 }
14234 else if (is_local_id(id)) {
14235 if (dyna_in_block()) {
14236 if (dvar_curr(id)) {
14237 return assignable_result(NEW_DASGN_CURR(id, val));
14238 }
14239 else if (dvar_defined(id)) {
14240 return assignable_result(NEW_DASGN(id, val));
14241 }
14242 else if (local_id(id)) {
14243 return assignable_result(NEW_LASGN(id, val));
14244 }
14245 else {
14246 dyna_var(id);
14247 return assignable_result(NEW_DASGN_CURR(id, val));
14248 }
14249 }
14250 else {
14251 if (!local_id(id)) {
14252 local_var(id);
14253 }
14254 return assignable_result(NEW_LASGN(id, val));
14255 }
14256 }
14257 else if (is_global_id(id)) {
14258 return assignable_result(NEW_GASGN(id, val));
14259 }
14260 else if (is_instance_id(id)) {
14261 return assignable_result(NEW_IASGN(id, val));
14262 }
14263 else if (is_const_id(id)) {
14264 if (!in_def && !in_single)
14265 return assignable_result(NEW_CDECL(id, val, 0));
14266 yyerror("dynamic constant assignment");
14267 }
14268 else if (is_class_id(id)) {
14269 return assignable_result(NEW_CVASGN(id, val));
14270 }
14271 else {
14272 compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
14273 }
14274 return assignable_result(0);
14275 #undef assignable_result
14276 #undef parser_yyerror
14277 }
14278
14279 static ID
14280 shadowing_lvar_gen(struct parser_params *parser, ID name)
14281 {
14282 ID uscore;
14283
14284 CONST_ID(uscore, "_");
14285 if (uscore == name) return name;
14286 if (dyna_in_block()) {
14287 if (dvar_curr(name)) {
14288 yyerror("duplicated argument name");
14289 }
14290 else if (dvar_defined(name) || local_id(name)) {
14291 rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
14292 vtable_add(lvtbl->vars, name);
14293 }
14294 }
14295 else {
14296 if (local_id(name)) {
14297 yyerror("duplicated argument name");
14298 }
14299 }
14300 return name;
14301 }
14302
14303 static void
14304 new_bv_gen(struct parser_params *parser, ID name)
14305 {
14306 if (!name) return;
14307 if (!is_local_id(name)) {
14308 compile_error(PARSER_ARG "invalid local variable - %s",
14309 rb_id2name(name));
14310 return;
14311 }
14312 shadowing_lvar(name);
14313 dyna_var(name);
14314 }
14315
14316 #ifndef RIPPER
14317 static NODE *
14318 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
14319 {
14320 if (recv && nd_type(recv) == NODE_SELF)
14321 recv = (NODE *)1;
14322 return NEW_ATTRASGN(recv, tASET, idx);
14323 }
14324
14325 static void
14326 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14327 {
14328 if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
14329 compile_error(PARSER_ARG "both block arg and actual block given");
14330 }
14331 }
14332
14333 ID
14334 rb_id_attrset(ID id)
14335 {
14336 id &= ~ID_SCOPE_MASK;
14337 id |= ID_ATTRSET;
14338 return id;
14339 }
14340
14341 static NODE *
14342 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
14343 {
14344 if (recv && nd_type(recv) == NODE_SELF)
14345 recv = (NODE *)1;
14346 return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
14347 }
14348
14349 static void
14350 rb_backref_error_gen(struct parser_params *parser, NODE *node)
14351 {
14352 switch (nd_type(node)) {
14353 case NODE_NTH_REF:
14354 compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
14355 break;
14356 case NODE_BACK_REF:
14357 compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
14358 break;
14359 }
14360 }
14361
14362 static NODE *
14363 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14364 {
14365 if (!node2) return node1;
14366 switch (nd_type(node1)) {
14367 case NODE_BLOCK_PASS:
14368 if (node1->nd_head)
14369 node1->nd_head = arg_concat(node1->nd_head, node2);
14370 else
14371 node1->nd_head = NEW_LIST(node2);
14372 return node1;
14373 case NODE_ARGSPUSH:
14374 if (nd_type(node2) != NODE_ARRAY) break;
14375 node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
14376 nd_set_type(node1, NODE_ARGSCAT);
14377 return node1;
14378 case NODE_ARGSCAT:
14379 if (nd_type(node2) != NODE_ARRAY ||
14380 nd_type(node1->nd_body) != NODE_ARRAY) break;
14381 node1->nd_body = list_concat(node1->nd_body, node2);
14382 return node1;
14383 }
14384 return NEW_ARGSCAT(node1, node2);
14385 }
14386
14387 static NODE *
14388 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14389 {
14390 if (!node1) return NEW_LIST(node2);
14391 switch (nd_type(node1)) {
14392 case NODE_ARRAY:
14393 return list_append(node1, node2);
14394 case NODE_BLOCK_PASS:
14395 node1->nd_head = arg_append(node1->nd_head, node2);
14396 return node1;
14397 case NODE_ARGSPUSH:
14398 node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
14399 nd_set_type(node1, NODE_ARGSCAT);
14400 return node1;
14401 }
14402 return NEW_ARGSPUSH(node1, node2);
14403 }
14404
14405 static NODE *
14406 splat_array(NODE* node)
14407 {
14408 if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
14409 if (nd_type(node) == NODE_ARRAY) return node;
14410 return 0;
14411 }
14412
14413 static NODE *
14414 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
14415 {
14416 if (!lhs) return 0;
14417
14418 switch (nd_type(lhs)) {
14419 case NODE_GASGN:
14420 case NODE_IASGN:
14421 case NODE_IASGN2:
14422 case NODE_LASGN:
14423 case NODE_DASGN:
14424 case NODE_DASGN_CURR:
14425 case NODE_MASGN:
14426 case NODE_CDECL:
14427 case NODE_CVASGN:
14428 lhs->nd_value = rhs;
14429 break;
14430
14431 case NODE_ATTRASGN:
14432 case NODE_CALL:
14433 lhs->nd_args = arg_append(lhs->nd_args, rhs);
14434 break;
14435
14436 default:
14437
14438 break;
14439 }
14440
14441 return lhs;
14442 }
14443
14444 static int
14445 value_expr_gen(struct parser_params *parser, NODE *node)
14446 {
14447 int cond = 0;
14448
14449 if (!node) {
14450 rb_warning0("empty expression");
14451 }
14452 while (node) {
14453 switch (nd_type(node)) {
14454 case NODE_DEFN:
14455 case NODE_DEFS:
14456 parser_warning(node, "void value expression");
14457 return FALSE;
14458
14459 case NODE_RETURN:
14460 case NODE_BREAK:
14461 case NODE_NEXT:
14462 case NODE_REDO:
14463 case NODE_RETRY:
14464 if (!cond) yyerror("void value expression");
14465
14466 return FALSE;
14467
14468 case NODE_BLOCK:
14469 while (node->nd_next) {
14470 node = node->nd_next;
14471 }
14472 node = node->nd_head;
14473 break;
14474
14475 case NODE_BEGIN:
14476 node = node->nd_body;
14477 break;
14478
14479 case NODE_IF:
14480 if (!node->nd_body) {
14481 node = node->nd_else;
14482 break;
14483 }
14484 else if (!node->nd_else) {
14485 node = node->nd_body;
14486 break;
14487 }
14488 if (!value_expr(node->nd_body)) return FALSE;
14489 node = node->nd_else;
14490 break;
14491
14492 case NODE_AND:
14493 case NODE_OR:
14494 cond = 1;
14495 node = node->nd_2nd;
14496 break;
14497
14498 default:
14499 return TRUE;
14500 }
14501 }
14502
14503 return TRUE;
14504 }
14505
14506 static void
14507 void_expr_gen(struct parser_params *parser, NODE *node)
14508 {
14509 const char *useless = 0;
14510
14511 if (!RTEST(ruby_verbose)) return;
14512
14513 if (!node) return;
14514 switch (nd_type(node)) {
14515 case NODE_CALL:
14516 switch (node->nd_mid) {
14517 case '+':
14518 case '-':
14519 case '*':
14520 case '/':
14521 case '%':
14522 case tPOW:
14523 case tUPLUS:
14524 case tUMINUS:
14525 case '|':
14526 case '^':
14527 case '&':
14528 case tCMP:
14529 case '>':
14530 case tGEQ:
14531 case '<':
14532 case tLEQ:
14533 case tEQ:
14534 case tNEQ:
14535 useless = rb_id2name(node->nd_mid);
14536 break;
14537 }
14538 break;
14539
14540 case NODE_LVAR:
14541 case NODE_DVAR:
14542 case NODE_GVAR:
14543 case NODE_IVAR:
14544 case NODE_CVAR:
14545 case NODE_NTH_REF:
14546 case NODE_BACK_REF:
14547 useless = "a variable";
14548 break;
14549 case NODE_CONST:
14550 useless = "a constant";
14551 break;
14552 case NODE_LIT:
14553 case NODE_STR:
14554 case NODE_DSTR:
14555 case NODE_DREGX:
14556 case NODE_DREGX_ONCE:
14557 useless = "a literal";
14558 break;
14559 case NODE_COLON2:
14560 case NODE_COLON3:
14561 useless = "::";
14562 break;
14563 case NODE_DOT2:
14564 useless = "..";
14565 break;
14566 case NODE_DOT3:
14567 useless = "...";
14568 break;
14569 case NODE_SELF:
14570 useless = "self";
14571 break;
14572 case NODE_NIL:
14573 useless = "nil";
14574 break;
14575 case NODE_TRUE:
14576 useless = "true";
14577 break;
14578 case NODE_FALSE:
14579 useless = "false";
14580 break;
14581 case NODE_DEFINED:
14582 useless = "defined?";
14583 break;
14584 }
14585
14586 if (useless) {
14587 int line = ruby_sourceline;
14588
14589 ruby_sourceline = nd_line(node);
14590 rb_warnS("useless use of %s in void context", useless);
14591 ruby_sourceline = line;
14592 }
14593 }
14594
14595 static void
14596 void_stmts_gen(struct parser_params *parser, NODE *node)
14597 {
14598 if (!RTEST(ruby_verbose)) return;
14599 if (!node) return;
14600 if (nd_type(node) != NODE_BLOCK) return;
14601
14602 for (;;) {
14603 if (!node->nd_next) return;
14604 void_expr0(node->nd_head);
14605 node = node->nd_next;
14606 }
14607 }
14608
14609 static NODE *
14610 remove_begin(NODE *node)
14611 {
14612 NODE **n = &node, *n1 = node;
14613 while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
14614 *n = n1 = n1->nd_body;
14615 }
14616 return node;
14617 }
14618
14619 static void
14620 reduce_nodes_gen(struct parser_params *parser, NODE **body)
14621 {
14622 NODE *node = *body;
14623
14624 if (!node) {
14625 *body = NEW_NIL();
14626 return;
14627 }
14628 #define subnodes(n1, n2) \
14629 ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
14630 (!node->n2) ? (body = &node->n1, 1) : \
14631 (reduce_nodes(&node->n1), body = &node->n2, 1))
14632
14633 while (node) {
14634 int newline = (int)(node->flags & NODE_FL_NEWLINE);
14635 switch (nd_type(node)) {
14636 end:
14637 case NODE_NIL:
14638 *body = 0;
14639 return;
14640 case NODE_RETURN:
14641 *body = node = node->nd_stts;
14642 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14643 continue;
14644 case NODE_BEGIN:
14645 *body = node = node->nd_body;
14646 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14647 continue;
14648 case NODE_BLOCK:
14649 body = &node->nd_end->nd_head;
14650 break;
14651 case NODE_IF:
14652 if (subnodes(nd_body, nd_else)) break;
14653 return;
14654 case NODE_CASE:
14655 body = &node->nd_body;
14656 break;
14657 case NODE_WHEN:
14658 if (!subnodes(nd_body, nd_next)) goto end;
14659 break;
14660 case NODE_ENSURE:
14661 if (!subnodes(nd_head, nd_resq)) goto end;
14662 break;
14663 case NODE_RESCUE:
14664 if (!subnodes(nd_head, nd_resq)) goto end;
14665 break;
14666 default:
14667 return;
14668 }
14669 node = *body;
14670 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14671 }
14672
14673 #undef subnodes
14674 }
14675
14676 static int
14677 assign_in_cond(struct parser_params *parser, NODE *node)
14678 {
14679 switch (nd_type(node)) {
14680 case NODE_MASGN:
14681 yyerror("multiple assignment in conditional");
14682 return 1;
14683
14684 case NODE_LASGN:
14685 case NODE_DASGN:
14686 case NODE_DASGN_CURR:
14687 case NODE_GASGN:
14688 case NODE_IASGN:
14689 break;
14690
14691 default:
14692 return 0;
14693 }
14694
14695 switch (nd_type(node->nd_value)) {
14696 case NODE_LIT:
14697 case NODE_STR:
14698 case NODE_NIL:
14699 case NODE_TRUE:
14700 case NODE_FALSE:
14701
14702 parser_warn(node->nd_value, "found = in conditional, should be ==");
14703 return 1;
14704
14705 case NODE_DSTR:
14706 case NODE_XSTR:
14707 case NODE_DXSTR:
14708 case NODE_EVSTR:
14709 case NODE_DREGX:
14710 default:
14711 break;
14712 }
14713 return 1;
14714 }
14715
14716 static void
14717 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14718 {
14719 if (!e_option_supplied(parser)) parser_warn(node, str);
14720 }
14721
14722 static void
14723 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14724 {
14725 if (!e_option_supplied(parser)) parser_warning(node, str);
14726 }
14727
14728 static void
14729 fixup_nodes(NODE **rootnode)
14730 {
14731 NODE *node, *next, *head;
14732
14733 for (node = *rootnode; node; node = next) {
14734 enum node_type type;
14735 VALUE val;
14736
14737 next = node->nd_next;
14738 head = node->nd_head;
14739 rb_gc_force_recycle((VALUE)node);
14740 *rootnode = next;
14741 switch (type = nd_type(head)) {
14742 case NODE_DOT2:
14743 case NODE_DOT3:
14744 val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
14745 type == NODE_DOT3);
14746 rb_gc_force_recycle((VALUE)head->nd_beg);
14747 rb_gc_force_recycle((VALUE)head->nd_end);
14748 nd_set_type(head, NODE_LIT);
14749 head->nd_lit = val;
14750 break;
14751 default:
14752 break;
14753 }
14754 }
14755 }
14756
14757 static NODE *cond0(struct parser_params*,NODE*);
14758
14759 static NODE*
14760 range_op(struct parser_params *parser, NODE *node)
14761 {
14762 enum node_type type;
14763
14764 if (node == 0) return 0;
14765
14766 type = nd_type(node);
14767 value_expr(node);
14768 if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
14769 warn_unless_e_option(parser, node, "integer literal in conditional range");
14770 return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
14771 }
14772 return cond0(parser, node);
14773 }
14774
14775 static int
14776 literal_node(NODE *node)
14777 {
14778 if (!node) return 1;
14779 switch (nd_type(node)) {
14780 case NODE_LIT:
14781 case NODE_STR:
14782 case NODE_DSTR:
14783 case NODE_EVSTR:
14784 case NODE_DREGX:
14785 case NODE_DREGX_ONCE:
14786 case NODE_DSYM:
14787 return 2;
14788 case NODE_TRUE:
14789 case NODE_FALSE:
14790 case NODE_NIL:
14791 return 1;
14792 }
14793 return 0;
14794 }
14795
14796 static NODE*
14797 cond0(struct parser_params *parser, NODE *node)
14798 {
14799 if (node == 0) return 0;
14800 assign_in_cond(parser, node);
14801
14802 switch (nd_type(node)) {
14803 case NODE_DSTR:
14804 case NODE_EVSTR:
14805 case NODE_STR:
14806 rb_warn0("string literal in condition");
14807 break;
14808
14809 case NODE_DREGX:
14810 case NODE_DREGX_ONCE:
14811 warning_unless_e_option(parser, node, "regex literal in condition");
14812 return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
14813
14814 case NODE_AND:
14815 case NODE_OR:
14816 node->nd_1st = cond0(parser, node->nd_1st);
14817 node->nd_2nd = cond0(parser, node->nd_2nd);
14818 break;
14819
14820 case NODE_DOT2:
14821 case NODE_DOT3:
14822 node->nd_beg = range_op(parser, node->nd_beg);
14823 node->nd_end = range_op(parser, node->nd_end);
14824 if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
14825 else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
14826 if (!e_option_supplied(parser)) {
14827 int b = literal_node(node->nd_beg);
14828 int e = literal_node(node->nd_end);
14829 if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
14830 parser_warn(node, "range literal in condition");
14831 }
14832 }
14833 break;
14834
14835 case NODE_DSYM:
14836 parser_warning(node, "literal in condition");
14837 break;
14838
14839 case NODE_LIT:
14840 if (TYPE(node->nd_lit) == T_REGEXP) {
14841 warn_unless_e_option(parser, node, "regex literal in condition");
14842 nd_set_type(node, NODE_MATCH);
14843 }
14844 else {
14845 parser_warning(node, "literal in condition");
14846 }
14847 default:
14848 break;
14849 }
14850 return node;
14851 }
14852
14853 static NODE*
14854 cond_gen(struct parser_params *parser, NODE *node)
14855 {
14856 if (node == 0) return 0;
14857 return cond0(parser, node);
14858 }
14859
14860 static NODE*
14861 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
14862 {
14863 value_expr(left);
14864 if (left && (enum node_type)nd_type(left) == type) {
14865 NODE *node = left, *second;
14866 while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
14867 node = second;
14868 }
14869 node->nd_2nd = NEW_NODE(type, second, right, 0);
14870 return left;
14871 }
14872 return NEW_NODE(type, left, right, 0);
14873 }
14874
14875 static void
14876 no_blockarg(struct parser_params *parser, NODE *node)
14877 {
14878 if (node && nd_type(node) == NODE_BLOCK_PASS) {
14879 compile_error(PARSER_ARG "block argument should not be given");
14880 }
14881 }
14882
14883 static NODE *
14884 ret_args_gen(struct parser_params *parser, NODE *node)
14885 {
14886 if (node) {
14887 no_blockarg(parser, node);
14888 if (nd_type(node) == NODE_ARRAY) {
14889 if (node->nd_next == 0) {
14890 node = node->nd_head;
14891 }
14892 else {
14893 nd_set_type(node, NODE_VALUES);
14894 }
14895 }
14896 }
14897 return node;
14898 }
14899
14900 static NODE *
14901 new_yield_gen(struct parser_params *parser, NODE *node)
14902 {
14903 long state = Qtrue;
14904
14905 if (node) {
14906 no_blockarg(parser, node);
14907 if (node && nd_type(node) == NODE_SPLAT) {
14908 state = Qtrue;
14909 }
14910 }
14911 else {
14912 state = Qfalse;
14913 }
14914 return NEW_YIELD(node, state);
14915 }
14916
14917 static NODE*
14918 negate_lit(NODE *node)
14919 {
14920 switch (TYPE(node->nd_lit)) {
14921 case T_FIXNUM:
14922 node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
14923 break;
14924 case T_BIGNUM:
14925 node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
14926 break;
14927 case T_FLOAT:
14928 RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
14929 break;
14930 default:
14931 break;
14932 }
14933 return node;
14934 }
14935
14936 static NODE *
14937 arg_blk_pass(NODE *node1, NODE *node2)
14938 {
14939 if (node2) {
14940 node2->nd_head = node1;
14941 return node2;
14942 }
14943 return node1;
14944 }
14945
14946 static NODE*
14947 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b)
14948 {
14949 int saved_line = ruby_sourceline;
14950 NODE *node;
14951 NODE *i1, *i2 = 0;
14952
14953 node = NEW_ARGS(m ? m->nd_plen : 0, o);
14954 i1 = m ? m->nd_next : 0;
14955 node->nd_next = NEW_ARGS_AUX(r, b);
14956
14957 if (p) {
14958 i2 = p->nd_next;
14959 node->nd_next->nd_next = NEW_ARGS_AUX(p->nd_pid, p->nd_plen);
14960 }
14961 else if (i1) {
14962 node->nd_next->nd_next = NEW_ARGS_AUX(0, 0);
14963 }
14964 if (i1 || i2) {
14965 node->nd_next->nd_next->nd_next = NEW_NODE(NODE_AND, i1, i2, 0);
14966 }
14967 ruby_sourceline = saved_line;
14968 return node;
14969 }
14970 #endif
14971
14972 static void
14973 local_push_gen(struct parser_params *parser, int inherit_dvars)
14974 {
14975 struct local_vars *local;
14976
14977 local = ALLOC(struct local_vars);
14978 local->prev = lvtbl;
14979 local->args = vtable_alloc(0);
14980 local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
14981 lvtbl = local;
14982 }
14983
14984 static void
14985 local_pop_gen(struct parser_params *parser)
14986 {
14987 struct local_vars *local = lvtbl->prev;
14988 vtable_free(lvtbl->args);
14989 vtable_free(lvtbl->vars);
14990 xfree(lvtbl);
14991 lvtbl = local;
14992 }
14993
14994 #ifndef RIPPER
14995 static ID*
14996 vtable_tblcpy(ID *buf, const struct vtable *src)
14997 {
14998 int i, cnt = vtable_size(src);
14999
15000 if (cnt > 0) {
15001 buf[0] = cnt;
15002 for (i = 0; i < cnt; i++) {
15003 buf[i] = src->tbl[i];
15004 }
15005 return buf;
15006 }
15007 return 0;
15008 }
15009
15010 static ID*
15011 local_tbl_gen(struct parser_params *parser)
15012 {
15013 int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars);
15014 ID *buf;
15015
15016 if (cnt <= 0) return 0;
15017 buf = ALLOC_N(ID, cnt + 1);
15018 vtable_tblcpy(buf+1, lvtbl->args);
15019 vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars);
15020 buf[0] = cnt;
15021 return buf;
15022 }
15023 #endif
15024
15025 static int
15026 arg_var_gen(struct parser_params *parser, ID id)
15027 {
15028 vtable_add(lvtbl->args, id);
15029 return vtable_size(lvtbl->args) - 1;
15030 }
15031
15032 static int
15033 local_var_gen(struct parser_params *parser, ID id)
15034 {
15035 vtable_add(lvtbl->vars, id);
15036 return vtable_size(lvtbl->vars) - 1;
15037 }
15038
15039 static int
15040 local_id_gen(struct parser_params *parser, ID id)
15041 {
15042 struct vtable *vars, *args;
15043
15044 vars = lvtbl->vars;
15045 args = lvtbl->args;
15046
15047 while (vars && POINTER_P(vars->prev)) {
15048 vars = vars->prev;
15049 args = args->prev;
15050 }
15051
15052 if (vars && vars->prev == DVARS_INHERIT) {
15053 return rb_local_defined(id);
15054 }
15055 else {
15056 return (vtable_included(args, id) ||
15057 vtable_included(vars, id));
15058 }
15059 }
15060
15061 static const struct vtable *
15062 dyna_push_gen(struct parser_params *parser)
15063 {
15064 lvtbl->args = vtable_alloc(lvtbl->args);
15065 lvtbl->vars = vtable_alloc(lvtbl->vars);
15066 return lvtbl->args;
15067 }
15068
15069 static void
15070 dyna_pop_1(struct parser_params *parser)
15071 {
15072 struct vtable *tmp;
15073
15074 tmp = lvtbl->args;
15075 lvtbl->args = lvtbl->args->prev;
15076 vtable_free(tmp);
15077 tmp = lvtbl->vars;
15078 lvtbl->vars = lvtbl->vars->prev;
15079 vtable_free(tmp);
15080 }
15081
15082 static void
15083 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
15084 {
15085 while (lvtbl->args != lvargs) {
15086 dyna_pop_1(parser);
15087 if (!lvtbl->args) {
15088 struct local_vars *local = lvtbl->prev;
15089 xfree(lvtbl);
15090 lvtbl = local;
15091 }
15092 }
15093 dyna_pop_1(parser);
15094 }
15095
15096 static int
15097 dyna_in_block_gen(struct parser_params *parser)
15098 {
15099 return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
15100 }
15101
15102 static int
15103 dvar_defined_gen(struct parser_params *parser, ID id)
15104 {
15105 struct vtable *vars, *args;
15106
15107 args = lvtbl->args;
15108 vars = lvtbl->vars;
15109
15110 while (POINTER_P(vars)) {
15111 if (vtable_included(args, id)) {
15112 return 1;
15113 }
15114 if (vtable_included(vars, id)) {
15115 return 1;
15116 }
15117 args = args->prev;
15118 vars = vars->prev;
15119 }
15120
15121 if (vars == DVARS_INHERIT) {
15122 return rb_dvar_defined(id);
15123 }
15124
15125 return 0;
15126 }
15127
15128 static int
15129 dvar_curr_gen(struct parser_params *parser, ID id)
15130 {
15131 return (vtable_included(lvtbl->args, id) ||
15132 vtable_included(lvtbl->vars, id));
15133 }
15134
15135 #ifndef RIPPER
15136 VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline);
15137 VALUE rb_reg_check_preprocess(VALUE);
15138
15139 static void
15140 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
15141 {
15142 int c = RE_OPTION_ENCODING_IDX(options);
15143
15144 if (c) {
15145 int opt, idx;
15146 rb_char_to_option_kcode(c, &opt, &idx);
15147 if (idx != ENCODING_GET(str) &&
15148 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15149 goto error;
15150 }
15151 ENCODING_SET(str, idx);
15152 }
15153 else if (RE_OPTION_ENCODING_NONE(options)) {
15154 if (!ENCODING_IS_ASCII8BIT(str) &&
15155 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15156 c = 'n';
15157 goto error;
15158 }
15159 rb_enc_associate(str, rb_ascii8bit_encoding());
15160 }
15161 else if (parser->enc == rb_usascii_encoding()) {
15162 if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15163
15164 rb_enc_associate(str, rb_usascii_encoding());
15165 }
15166 else {
15167 rb_enc_associate(str, rb_ascii8bit_encoding());
15168 }
15169 }
15170 return;
15171
15172 error:
15173 compile_error(PARSER_ARG
15174 "regexp encoding option '%c' differs from source encoding '%s'",
15175 c, rb_enc_name(rb_enc_get(str)));
15176 }
15177
15178 static int
15179 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
15180 {
15181 VALUE err;
15182 reg_fragment_setenc(str, options);
15183 err = rb_reg_check_preprocess(str);
15184 if (err != Qnil) {
15185 err = rb_obj_as_string(err);
15186 compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
15187 RB_GC_GUARD(err);
15188 return 0;
15189 }
15190 return 1;
15191 }
15192
15193 typedef struct {
15194 struct parser_params* parser;
15195 rb_encoding *enc;
15196 NODE *succ_block;
15197 NODE *fail_block;
15198 int num;
15199 } reg_named_capture_assign_t;
15200
15201 static int
15202 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
15203 int back_num, int *back_refs, OnigRegex regex, void *arg0)
15204 {
15205 reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
15206 struct parser_params* parser = arg->parser;
15207 rb_encoding *enc = arg->enc;
15208 long len = name_end - name;
15209 const char *s = (const char *)name;
15210 ID var;
15211
15212 arg->num++;
15213
15214 if (arg->succ_block == 0) {
15215 arg->succ_block = NEW_BEGIN(0);
15216 arg->fail_block = NEW_BEGIN(0);
15217 }
15218
15219 if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
15220 (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
15221 !rb_enc_symname2_p(s, len, enc)) {
15222 return ST_CONTINUE;
15223 }
15224 var = rb_intern3(s, len, enc);
15225 if (dvar_defined(var) || local_id(var)) {
15226 rb_warningS("named capture conflicts a local variable - %s",
15227 rb_id2name(var));
15228 }
15229 arg->succ_block = block_append(arg->succ_block,
15230 newline_node(node_assign(assignable(var,0),
15231 NEW_CALL(
15232 gettable(rb_intern("$~")),
15233 idAREF,
15234 NEW_LIST(NEW_LIT(ID2SYM(var))))
15235 )));
15236 arg->fail_block = block_append(arg->fail_block,
15237 newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil))));
15238 return ST_CONTINUE;
15239 }
15240
15241 static NODE *
15242 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match)
15243 {
15244 reg_named_capture_assign_t arg;
15245
15246 arg.parser = parser;
15247 arg.enc = rb_enc_get(regexp);
15248 arg.succ_block = 0;
15249 arg.fail_block = 0;
15250 arg.num = 0;
15251 onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
15252
15253 if (arg.num == 0)
15254 return match;
15255
15256 return
15257 block_append(
15258 newline_node(match),
15259 NEW_IF(gettable(rb_intern("$~")),
15260 block_append(
15261 newline_node(arg.succ_block),
15262 newline_node(
15263 NEW_CALL(
15264 gettable(rb_intern("$~")),
15265 rb_intern("begin"),
15266 NEW_LIST(NEW_LIT(INT2FIX(0)))))),
15267 block_append(
15268 newline_node(arg.fail_block),
15269 newline_node(
15270 NEW_LIT(Qnil)))));
15271 }
15272
15273 static VALUE
15274 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
15275 {
15276 VALUE re;
15277 VALUE err;
15278
15279 reg_fragment_setenc(str, options);
15280 err = rb_errinfo();
15281 re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline);
15282 if (NIL_P(re)) {
15283 ID mesg = rb_intern("mesg");
15284 VALUE m = rb_attr_get(rb_errinfo(), mesg);
15285 rb_set_errinfo(err);
15286 if (!NIL_P(err)) {
15287 rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
15288 }
15289 else {
15290 compile_error(PARSER_ARG "%s", RSTRING_PTR(m));
15291 }
15292 return Qnil;
15293 }
15294 return re;
15295 }
15296
15297 void
15298 rb_gc_mark_parser(void)
15299 {
15300 }
15301
15302 NODE*
15303 rb_parser_append_print(VALUE vparser, NODE *node)
15304 {
15305 NODE *prelude = 0;
15306 NODE *scope = node;
15307 struct parser_params *parser;
15308
15309 if (!node) return node;
15310
15311 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15312
15313 node = node->nd_body;
15314
15315 if (nd_type(node) == NODE_PRELUDE) {
15316 prelude = node;
15317 node = node->nd_body;
15318 }
15319
15320 node = block_append(node,
15321 NEW_FCALL(rb_intern("print"),
15322 NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
15323 if (prelude) {
15324 prelude->nd_body = node;
15325 scope->nd_body = prelude;
15326 }
15327 else {
15328 scope->nd_body = node;
15329 }
15330
15331 return scope;
15332 }
15333
15334 NODE *
15335 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
15336 {
15337 NODE *prelude = 0;
15338 NODE *scope = node;
15339 struct parser_params *parser;
15340
15341 if (!node) return node;
15342
15343 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15344
15345 node = node->nd_body;
15346
15347 if (nd_type(node) == NODE_PRELUDE) {
15348 prelude = node;
15349 node = node->nd_body;
15350 }
15351 if (split) {
15352 node = block_append(NEW_GASGN(rb_intern("$F"),
15353 NEW_CALL(NEW_GVAR(rb_intern("$_")),
15354 rb_intern("split"), 0)),
15355 node);
15356 }
15357 if (chop) {
15358 node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
15359 rb_intern("chop!"), 0), node);
15360 }
15361
15362 node = NEW_OPT_N(node);
15363
15364 if (prelude) {
15365 prelude->nd_body = node;
15366 scope->nd_body = prelude;
15367 }
15368 else {
15369 scope->nd_body = node;
15370 }
15371
15372 return scope;
15373 }
15374
15375 static const struct {
15376 ID token;
15377 const char *name;
15378 } op_tbl[] = {
15379 {tDOT2, ".."},
15380 {tDOT3, "..."},
15381 {'+', "+(binary)"},
15382 {'-', "-(binary)"},
15383 {tPOW, "**"},
15384 {tUPLUS, "+@"},
15385 {tUMINUS, "-@"},
15386 {tCMP, "<=>"},
15387 {tGEQ, ">="},
15388 {tLEQ, "<="},
15389 {tEQ, "=="},
15390 {tEQQ, "==="},
15391 {tNEQ, "!="},
15392 {tMATCH, "=~"},
15393 {tNMATCH, "!~"},
15394 {tAREF, "[]"},
15395 {tASET, "[]="},
15396 {tLSHFT, "<<"},
15397 {tRSHFT, ">>"},
15398 {tCOLON2, "::"},
15399 };
15400
15401 #define op_tbl_count numberof(op_tbl)
15402
15403 #ifndef ENABLE_SELECTOR_NAMESPACE
15404 #define ENABLE_SELECTOR_NAMESPACE 0
15405 #endif
15406
15407 static struct symbols {
15408 ID last_id;
15409 st_table *sym_id;
15410 st_table *id_str;
15411 #if ENABLE_SELECTOR_NAMESPACE
15412 st_table *ivar2_id;
15413 st_table *id_ivar2;
15414 #endif
15415 VALUE op_sym[tLAST_TOKEN];
15416 } global_symbols = {tLAST_ID};
15417
15418 static const struct st_hash_type symhash = {
15419 rb_str_hash_cmp,
15420 rb_str_hash,
15421 };
15422
15423 #if ENABLE_SELECTOR_NAMESPACE
15424 struct ivar2_key {
15425 ID id;
15426 VALUE klass;
15427 };
15428
15429 static int
15430 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
15431 {
15432 if (key1->id == key2->id && key1->klass == key2->klass) {
15433 return 0;
15434 }
15435 return 1;
15436 }
15437
15438 static int
15439 ivar2_hash(struct ivar2_key *key)
15440 {
15441 return (key->id << 8) ^ (key->klass >> 2);
15442 }
15443
15444 static const struct st_hash_type ivar2_hash_type = {
15445 ivar2_cmp,
15446 ivar2_hash,
15447 };
15448 #endif
15449
15450 void
15451 Init_sym(void)
15452 {
15453 global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
15454 global_symbols.id_str = st_init_numtable_with_size(1000);
15455 #if ENABLE_SELECTOR_NAMESPACE
15456 global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
15457 global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
15458 #endif
15459
15460 Init_id();
15461 }
15462
15463 void
15464 rb_gc_mark_symbols(void)
15465 {
15466 rb_mark_tbl(global_symbols.id_str);
15467 rb_gc_mark_locations(global_symbols.op_sym,
15468 global_symbols.op_sym + tLAST_TOKEN);
15469 }
15470 #endif
15471
15472 static ID
15473 internal_id_gen(struct parser_params *parser)
15474 {
15475 ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
15476 id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
15477 return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
15478 }
15479
15480 #ifndef RIPPER
15481 static int
15482 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
15483 {
15484 int mb = 0;
15485
15486 if (m >= e) return 0;
15487 switch (*m) {
15488 case '~': case '*': case '$': case '?': case '!': case '@':
15489 case '/': case '\\': case ';': case ',': case '.': case '=':
15490 case ':': case '<': case '>': case '\"':
15491 case '&': case '`': case '\'': case '+':
15492 case '0':
15493 ++m;
15494 break;
15495 case '-':
15496 ++m;
15497 if (m < e && is_identchar(m, e, enc)) {
15498 if (!ISASCII(*m)) mb = 1;
15499 m += rb_enc_mbclen(m, e, enc);
15500 }
15501 break;
15502 default:
15503 if (!rb_enc_isdigit(*m, enc)) return 0;
15504 do {
15505 if (!ISASCII(*m)) mb = 1;
15506 ++m;
15507 } while (m < e && rb_enc_isdigit(*m, enc));
15508 }
15509 return m == e ? mb + 1 : 0;
15510 }
15511
15512 int
15513 rb_symname_p(const char *name)
15514 {
15515 return rb_enc_symname_p(name, rb_ascii8bit_encoding());
15516 }
15517
15518 int
15519 rb_enc_symname_p(const char *name, rb_encoding *enc)
15520 {
15521 return rb_enc_symname2_p(name, strlen(name), enc);
15522 }
15523
15524 int
15525 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
15526 {
15527 const char *m = name;
15528 const char *e = m + len;
15529 int localid = FALSE;
15530
15531 if (!m) return FALSE;
15532 switch (*m) {
15533 case '\0':
15534 return FALSE;
15535
15536 case '$':
15537 if (is_special_global_name(++m, e, enc)) return TRUE;
15538 goto id;
15539
15540 case '@':
15541 if (*++m == '@') ++m;
15542 goto id;
15543
15544 case '<':
15545 switch (*++m) {
15546 case '<': ++m; break;
15547 case '=': if (*++m == '>') ++m; break;
15548 default: break;
15549 }
15550 break;
15551
15552 case '>':
15553 switch (*++m) {
15554 case '>': case '=': ++m; break;
15555 }
15556 break;
15557
15558 case '=':
15559 switch (*++m) {
15560 case '~': ++m; break;
15561 case '=': if (*++m == '=') ++m; break;
15562 default: return FALSE;
15563 }
15564 break;
15565
15566 case '*':
15567 if (*++m == '*') ++m;
15568 break;
15569
15570 case '+': case '-':
15571 if (*++m == '@') ++m;
15572 break;
15573
15574 case '|': case '^': case '&': case '/': case '%': case '~': case '`':
15575 ++m;
15576 break;
15577
15578 case '[':
15579 if (*++m != ']') return FALSE;
15580 if (*++m == '=') ++m;
15581 break;
15582
15583 case '!':
15584 switch (*++m) {
15585 case '\0': return TRUE;
15586 case '=': case '~': ++m; break;
15587 default: return FALSE;
15588 }
15589 break;
15590
15591 default:
15592 localid = !rb_enc_isupper(*m, enc);
15593 id:
15594 if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
15595 return FALSE;
15596 while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
15597 if (localid) {
15598 switch (*m) {
15599 case '!': case '?': case '=': ++m;
15600 }
15601 }
15602 break;
15603 }
15604 return m == e;
15605 }
15606
15607 static ID
15608 register_symid(ID id, const char *name, long len, rb_encoding *enc)
15609 {
15610 VALUE str = rb_enc_str_new(name, len, enc);
15611 OBJ_FREEZE(str);
15612 st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
15613 st_add_direct(global_symbols.id_str, id, (st_data_t)str);
15614 return id;
15615 }
15616
15617 ID
15618 rb_intern3(const char *name, long len, rb_encoding *enc)
15619 {
15620 const char *m = name;
15621 const char *e = m + len;
15622 unsigned char c;
15623 VALUE str;
15624 ID id;
15625 long last;
15626 int mb;
15627 st_data_t data;
15628 struct RString fake_str;
15629 fake_str.basic.flags = T_STRING|RSTRING_NOEMBED|FL_FREEZE;
15630 fake_str.basic.klass = rb_cString;
15631 fake_str.as.heap.len = len;
15632 fake_str.as.heap.ptr = (char *)name;
15633 fake_str.as.heap.aux.capa = len;
15634 str = (VALUE)&fake_str;
15635 rb_enc_associate(str, enc);
15636
15637 if (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) {
15638 rb_raise(rb_eEncodingError, "invalid encoding symbol");
15639 }
15640
15641 if (st_lookup(global_symbols.sym_id, str, &data))
15642 return (ID)data;
15643
15644 if (rb_cString && !rb_enc_asciicompat(enc)) {
15645 id = ID_JUNK;
15646 goto new_id;
15647 }
15648 last = len-1;
15649 id = 0;
15650 switch (*m) {
15651 case '$':
15652 id |= ID_GLOBAL;
15653 if ((mb = is_special_global_name(++m, e, enc)) != 0) {
15654 if (!--mb) enc = rb_ascii8bit_encoding();
15655 goto new_id;
15656 }
15657 break;
15658 case '@':
15659 if (m[1] == '@') {
15660 m++;
15661 id |= ID_CLASS;
15662 }
15663 else {
15664 id |= ID_INSTANCE;
15665 }
15666 m++;
15667 break;
15668 default:
15669 c = m[0];
15670 if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
15671
15672 int i;
15673
15674 if (len == 1) {
15675 id = c;
15676 goto id_register;
15677 }
15678 for (i = 0; i < op_tbl_count; i++) {
15679 if (*op_tbl[i].name == *m &&
15680 strcmp(op_tbl[i].name, m) == 0) {
15681 id = op_tbl[i].token;
15682 goto id_register;
15683 }
15684 }
15685 }
15686
15687 if (m[last] == '=') {
15688
15689 id = rb_intern3(name, last, enc);
15690 if (id > tLAST_TOKEN && !is_attrset_id(id)) {
15691 enc = rb_enc_get(rb_id2str(id));
15692 id = rb_id_attrset(id);
15693 goto id_register;
15694 }
15695 id = ID_ATTRSET;
15696 }
15697 else if (rb_enc_isupper(m[0], enc)) {
15698 id = ID_CONST;
15699 }
15700 else {
15701 id = ID_LOCAL;
15702 }
15703 break;
15704 }
15705 mb = 0;
15706 if (!rb_enc_isdigit(*m, enc)) {
15707 while (m <= name + last && is_identchar(m, e, enc)) {
15708 if (ISASCII(*m)) {
15709 m++;
15710 }
15711 else {
15712 mb = 1;
15713 m += rb_enc_mbclen(m, e, enc);
15714 }
15715 }
15716 }
15717 if (m - name < len) id = ID_JUNK;
15718 if (enc != rb_usascii_encoding()) {
15719
15720
15721
15722
15723 if (!mb) {
15724 for (; m <= name + len; ++m) {
15725 if (!ISASCII(*m)) goto mbstr;
15726 }
15727 enc = rb_usascii_encoding();
15728 }
15729 mbstr:;
15730 }
15731 new_id:
15732 if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) {
15733 if (len > 20) {
15734 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
15735 name);
15736 }
15737 else {
15738 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
15739 (int)len, name);
15740 }
15741 }
15742 id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
15743 id_register:
15744 return register_symid(id, name, len, enc);
15745 }
15746
15747 ID
15748 rb_intern2(const char *name, long len)
15749 {
15750 return rb_intern3(name, len, rb_usascii_encoding());
15751 }
15752
15753 #undef rb_intern
15754 ID
15755 rb_intern(const char *name)
15756 {
15757 return rb_intern2(name, strlen(name));
15758 }
15759
15760 ID
15761 rb_intern_str(VALUE str)
15762 {
15763 rb_encoding *enc;
15764 ID id;
15765
15766 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
15767 enc = rb_usascii_encoding();
15768 }
15769 else {
15770 enc = rb_enc_get(str);
15771 }
15772 id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc);
15773 RB_GC_GUARD(str);
15774 return id;
15775 }
15776
15777 VALUE
15778 rb_id2str(ID id)
15779 {
15780 st_data_t data;
15781
15782 if (id < tLAST_TOKEN) {
15783 int i = 0;
15784
15785 if (id < INT_MAX && rb_ispunct((int)id)) {
15786 VALUE str = global_symbols.op_sym[i = (int)id];
15787 if (!str) {
15788 char name[2];
15789 name[0] = (char)id;
15790 name[1] = 0;
15791 str = rb_usascii_str_new(name, 1);
15792 OBJ_FREEZE(str);
15793 global_symbols.op_sym[i] = str;
15794 }
15795 return str;
15796 }
15797 for (i = 0; i < op_tbl_count; i++) {
15798 if (op_tbl[i].token == id) {
15799 VALUE str = global_symbols.op_sym[i];
15800 if (!str) {
15801 str = rb_usascii_str_new2(op_tbl[i].name);
15802 OBJ_FREEZE(str);
15803 global_symbols.op_sym[i] = str;
15804 }
15805 return str;
15806 }
15807 }
15808 }
15809
15810 if (st_lookup(global_symbols.id_str, id, &data)) {
15811 VALUE str = (VALUE)data;
15812 if (RBASIC(str)->klass == 0)
15813 RBASIC(str)->klass = rb_cString;
15814 return str;
15815 }
15816
15817 if (is_attrset_id(id)) {
15818 ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL;
15819 VALUE str;
15820
15821 while (!(str = rb_id2str(id2))) {
15822 if (!is_local_id(id2)) return 0;
15823 id2 = (id & ~ID_SCOPE_MASK) | ID_CONST;
15824 }
15825 str = rb_str_dup(str);
15826 rb_str_cat(str, "=", 1);
15827 rb_intern_str(str);
15828 if (st_lookup(global_symbols.id_str, id, &data)) {
15829 VALUE str = (VALUE)data;
15830 if (RBASIC(str)->klass == 0)
15831 RBASIC(str)->klass = rb_cString;
15832 return str;
15833 }
15834 }
15835 return 0;
15836 }
15837
15838 const char *
15839 rb_id2name(ID id)
15840 {
15841 VALUE str = rb_id2str(id);
15842
15843 if (!str) return 0;
15844 return RSTRING_PTR(str);
15845 }
15846
15847 static int
15848 symbols_i(VALUE sym, ID value, VALUE ary)
15849 {
15850 rb_ary_push(ary, ID2SYM(value));
15851 return ST_CONTINUE;
15852 }
15853
15854
15855
15856
15857
15858
15859
15860
15861
15862
15863
15864
15865
15866
15867
15868
15869
15870 VALUE
15871 rb_sym_all_symbols(void)
15872 {
15873 VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries);
15874
15875 st_foreach(global_symbols.sym_id, symbols_i, ary);
15876 return ary;
15877 }
15878
15879 int
15880 rb_is_const_id(ID id)
15881 {
15882 return is_const_id(id);
15883 }
15884
15885 int
15886 rb_is_class_id(ID id)
15887 {
15888 return is_class_id(id);
15889 }
15890
15891 int
15892 rb_is_instance_id(ID id)
15893 {
15894 return is_instance_id(id);
15895 }
15896
15897 int
15898 rb_is_local_id(ID id)
15899 {
15900 return is_local_id(id);
15901 }
15902
15903 int
15904 rb_is_junk_id(ID id)
15905 {
15906 return is_junk_id(id);
15907 }
15908
15909 #endif
15910
15911 static void
15912 parser_initialize(struct parser_params *parser)
15913 {
15914 parser->eofp = Qfalse;
15915
15916 parser->parser_lex_strterm = 0;
15917 parser->parser_cond_stack = 0;
15918 parser->parser_cmdarg_stack = 0;
15919 parser->parser_class_nest = 0;
15920 parser->parser_paren_nest = 0;
15921 parser->parser_lpar_beg = 0;
15922 parser->parser_in_single = 0;
15923 parser->parser_in_def = 0;
15924 parser->parser_in_defined = 0;
15925 parser->parser_compile_for_eval = 0;
15926 parser->parser_cur_mid = 0;
15927 parser->parser_tokenbuf = NULL;
15928 parser->parser_tokidx = 0;
15929 parser->parser_toksiz = 0;
15930 parser->parser_heredoc_end = 0;
15931 parser->parser_command_start = TRUE;
15932 parser->parser_deferred_nodes = 0;
15933 parser->parser_lex_pbeg = 0;
15934 parser->parser_lex_p = 0;
15935 parser->parser_lex_pend = 0;
15936 parser->parser_lvtbl = 0;
15937 parser->parser_ruby__end__seen = 0;
15938 parser->parser_ruby_sourcefile = 0;
15939 #ifndef RIPPER
15940 parser->is_ripper = 0;
15941 parser->parser_eval_tree_begin = 0;
15942 parser->parser_eval_tree = 0;
15943 #else
15944 parser->is_ripper = 1;
15945 parser->parser_ruby_sourcefile_string = Qnil;
15946 parser->delayed = Qnil;
15947
15948 parser->result = Qnil;
15949 parser->parsing_thread = Qnil;
15950 parser->toplevel_p = TRUE;
15951 #endif
15952 #ifdef YYMALLOC
15953 parser->heap = NULL;
15954 #endif
15955 parser->enc = rb_usascii_encoding();
15956 }
15957
15958 #ifdef RIPPER
15959 #define parser_mark ripper_parser_mark
15960 #define parser_free ripper_parser_free
15961 #endif
15962
15963 static void
15964 parser_mark(void *ptr)
15965 {
15966 struct parser_params *p = (struct parser_params*)ptr;
15967
15968 rb_gc_mark((VALUE)p->parser_lex_strterm);
15969 rb_gc_mark((VALUE)p->parser_deferred_nodes);
15970 rb_gc_mark(p->parser_lex_input);
15971 rb_gc_mark(p->parser_lex_lastline);
15972 rb_gc_mark(p->parser_lex_nextline);
15973 #ifndef RIPPER
15974 rb_gc_mark((VALUE)p->parser_eval_tree_begin) ;
15975 rb_gc_mark((VALUE)p->parser_eval_tree) ;
15976 rb_gc_mark(p->debug_lines);
15977 #else
15978 rb_gc_mark(p->parser_ruby_sourcefile_string);
15979 rb_gc_mark(p->delayed);
15980 rb_gc_mark(p->value);
15981 rb_gc_mark(p->result);
15982 rb_gc_mark(p->parsing_thread);
15983 #endif
15984 #ifdef YYMALLOC
15985 rb_gc_mark((VALUE)p->heap);
15986 #endif
15987 }
15988
15989 static void
15990 parser_free(void *ptr)
15991 {
15992 struct parser_params *p = (struct parser_params*)ptr;
15993 struct local_vars *local, *prev;
15994
15995 if (p->parser_tokenbuf) {
15996 xfree(p->parser_tokenbuf);
15997 }
15998 for (local = p->parser_lvtbl; local; local = prev) {
15999 if (local->vars) xfree(local->vars);
16000 prev = local->prev;
16001 xfree(local);
16002 }
16003 #ifndef RIPPER
16004 xfree(p->parser_ruby_sourcefile);
16005 #endif
16006 xfree(p);
16007 }
16008
16009 static size_t
16010 parser_memsize(const void *ptr)
16011 {
16012 struct parser_params *p = (struct parser_params*)ptr;
16013 struct local_vars *local;
16014 size_t size = sizeof(*p);
16015
16016 if (!ptr) return 0;
16017 size += p->parser_toksiz;
16018 for (local = p->parser_lvtbl; local; local = local->prev) {
16019 size += sizeof(*local);
16020 if (local->vars) size += local->vars->capa * sizeof(ID);
16021 }
16022 #ifndef RIPPER
16023 if (p->parser_ruby_sourcefile) {
16024 size += strlen(p->parser_ruby_sourcefile) + 1;
16025 }
16026 #endif
16027 return size;
16028 }
16029
16030 static const rb_data_type_t parser_data_type = {
16031 "parser",
16032 parser_mark,
16033 parser_free,
16034 parser_memsize,
16035 };
16036
16037 VALUE rb_parser_get_yydebug(VALUE);
16038 VALUE rb_parser_set_yydebug(VALUE, VALUE);
16039
16040 #ifndef RIPPER
16041 #undef rb_reserved_word
16042
16043 const struct kwtable *
16044 rb_reserved_word(const char *str, unsigned int len)
16045 {
16046 return reserved_word(str, len);
16047 }
16048
16049 static struct parser_params *
16050 parser_new(void)
16051 {
16052 struct parser_params *p;
16053
16054 p = ALLOC_N(struct parser_params, 1);
16055 MEMZERO(p, struct parser_params, 1);
16056 parser_initialize(p);
16057 return p;
16058 }
16059
16060 VALUE
16061 rb_parser_new(void)
16062 {
16063 struct parser_params *p = parser_new();
16064
16065 return TypedData_Wrap_Struct(0, &parser_data_type, p);
16066 }
16067
16068
16069
16070
16071
16072
16073
16074
16075 VALUE
16076 rb_parser_end_seen_p(VALUE vparser)
16077 {
16078 struct parser_params *parser;
16079
16080 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16081 return ruby__end__seen ? Qtrue : Qfalse;
16082 }
16083
16084
16085
16086
16087
16088
16089
16090 VALUE
16091 rb_parser_encoding(VALUE vparser)
16092 {
16093 struct parser_params *parser;
16094
16095 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16096 return rb_enc_from_encoding(parser->enc);
16097 }
16098
16099
16100
16101
16102
16103
16104
16105 VALUE
16106 rb_parser_get_yydebug(VALUE self)
16107 {
16108 struct parser_params *parser;
16109
16110 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16111 return yydebug ? Qtrue : Qfalse;
16112 }
16113
16114
16115
16116
16117
16118
16119
16120 VALUE
16121 rb_parser_set_yydebug(VALUE self, VALUE flag)
16122 {
16123 struct parser_params *parser;
16124
16125 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16126 yydebug = RTEST(flag);
16127 return flag;
16128 }
16129
16130 #ifdef YYMALLOC
16131 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
16132 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
16133 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
16134 (n)->u3.cnt = (c), (p))
16135
16136 void *
16137 rb_parser_malloc(struct parser_params *parser, size_t size)
16138 {
16139 size_t cnt = HEAPCNT(1, size);
16140 NODE *n = NEWHEAP();
16141 void *ptr = xmalloc(size);
16142
16143 return ADD2HEAP(n, cnt, ptr);
16144 }
16145
16146 void *
16147 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
16148 {
16149 size_t cnt = HEAPCNT(nelem, size);
16150 NODE *n = NEWHEAP();
16151 void *ptr = xcalloc(nelem, size);
16152
16153 return ADD2HEAP(n, cnt, ptr);
16154 }
16155
16156 void *
16157 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
16158 {
16159 NODE *n;
16160 size_t cnt = HEAPCNT(1, size);
16161
16162 if (ptr && (n = parser->heap) != NULL) {
16163 do {
16164 if (n->u1.node == ptr) {
16165 n->u1.node = ptr = xrealloc(ptr, size);
16166 if (n->u3.cnt) n->u3.cnt = cnt;
16167 return ptr;
16168 }
16169 } while ((n = n->u2.node) != NULL);
16170 }
16171 n = NEWHEAP();
16172 ptr = xrealloc(ptr, size);
16173 return ADD2HEAP(n, cnt, ptr);
16174 }
16175
16176 void
16177 rb_parser_free(struct parser_params *parser, void *ptr)
16178 {
16179 NODE **prev = &parser->heap, *n;
16180
16181 while ((n = *prev) != NULL) {
16182 if (n->u1.node == ptr) {
16183 *prev = n->u2.node;
16184 rb_gc_force_recycle((VALUE)n);
16185 break;
16186 }
16187 prev = &n->u2.node;
16188 }
16189 xfree(ptr);
16190 }
16191 #endif
16192 #endif
16193
16194 #ifdef RIPPER
16195 #ifdef RIPPER_DEBUG
16196 extern int rb_is_pointer_to_heap(VALUE);
16197
16198
16199 static VALUE
16200 ripper_validate_object(VALUE self, VALUE x)
16201 {
16202 if (x == Qfalse) return x;
16203 if (x == Qtrue) return x;
16204 if (x == Qnil) return x;
16205 if (x == Qundef)
16206 rb_raise(rb_eArgError, "Qundef given");
16207 if (FIXNUM_P(x)) return x;
16208 if (SYMBOL_P(x)) return x;
16209 if (!rb_is_pointer_to_heap(x))
16210 rb_raise(rb_eArgError, "invalid pointer: %p", x);
16211 switch (TYPE(x)) {
16212 case T_STRING:
16213 case T_OBJECT:
16214 case T_ARRAY:
16215 case T_BIGNUM:
16216 case T_FLOAT:
16217 return x;
16218 case T_NODE:
16219 if (nd_type(x) != NODE_LASGN) {
16220 rb_raise(rb_eArgError, "NODE given: %p", x);
16221 }
16222 return ((NODE *)x)->nd_rval;
16223 default:
16224 rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
16225 x, rb_obj_classname(x));
16226 }
16227 return x;
16228 }
16229 #endif
16230
16231 #define validate(x) (x = get_value(x))
16232
16233 static VALUE
16234 ripper_dispatch0(struct parser_params *parser, ID mid)
16235 {
16236 return rb_funcall(parser->value, mid, 0);
16237 }
16238
16239 static VALUE
16240 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
16241 {
16242 validate(a);
16243 return rb_funcall(parser->value, mid, 1, a);
16244 }
16245
16246 static VALUE
16247 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
16248 {
16249 validate(a);
16250 validate(b);
16251 return rb_funcall(parser->value, mid, 2, a, b);
16252 }
16253
16254 static VALUE
16255 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
16256 {
16257 validate(a);
16258 validate(b);
16259 validate(c);
16260 return rb_funcall(parser->value, mid, 3, a, b, c);
16261 }
16262
16263 static VALUE
16264 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
16265 {
16266 validate(a);
16267 validate(b);
16268 validate(c);
16269 validate(d);
16270 return rb_funcall(parser->value, mid, 4, a, b, c, d);
16271 }
16272
16273 static VALUE
16274 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
16275 {
16276 validate(a);
16277 validate(b);
16278 validate(c);
16279 validate(d);
16280 validate(e);
16281 return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
16282 }
16283
16284 static const struct kw_assoc {
16285 ID id;
16286 const char *name;
16287 } keyword_to_name[] = {
16288 {keyword_class, "class"},
16289 {keyword_module, "module"},
16290 {keyword_def, "def"},
16291 {keyword_undef, "undef"},
16292 {keyword_begin, "begin"},
16293 {keyword_rescue, "rescue"},
16294 {keyword_ensure, "ensure"},
16295 {keyword_end, "end"},
16296 {keyword_if, "if"},
16297 {keyword_unless, "unless"},
16298 {keyword_then, "then"},
16299 {keyword_elsif, "elsif"},
16300 {keyword_else, "else"},
16301 {keyword_case, "case"},
16302 {keyword_when, "when"},
16303 {keyword_while, "while"},
16304 {keyword_until, "until"},
16305 {keyword_for, "for"},
16306 {keyword_break, "break"},
16307 {keyword_next, "next"},
16308 {keyword_redo, "redo"},
16309 {keyword_retry, "retry"},
16310 {keyword_in, "in"},
16311 {keyword_do, "do"},
16312 {keyword_do_cond, "do"},
16313 {keyword_do_block, "do"},
16314 {keyword_return, "return"},
16315 {keyword_yield, "yield"},
16316 {keyword_super, "super"},
16317 {keyword_self, "self"},
16318 {keyword_nil, "nil"},
16319 {keyword_true, "true"},
16320 {keyword_false, "false"},
16321 {keyword_and, "and"},
16322 {keyword_or, "or"},
16323 {keyword_not, "not"},
16324 {modifier_if, "if"},
16325 {modifier_unless, "unless"},
16326 {modifier_while, "while"},
16327 {modifier_until, "until"},
16328 {modifier_rescue, "rescue"},
16329 {keyword_alias, "alias"},
16330 {keyword_defined, "defined?"},
16331 {keyword_BEGIN, "BEGIN"},
16332 {keyword_END, "END"},
16333 {keyword__LINE__, "__LINE__"},
16334 {keyword__FILE__, "__FILE__"},
16335 {keyword__ENCODING__, "__ENCODING__"},
16336 {0, NULL}
16337 };
16338
16339 static const char*
16340 keyword_id_to_str(ID id)
16341 {
16342 const struct kw_assoc *a;
16343
16344 for (a = keyword_to_name; a->id; a++) {
16345 if (a->id == id)
16346 return a->name;
16347 }
16348 return NULL;
16349 }
16350
16351 #undef ripper_id2sym
16352 static VALUE
16353 ripper_id2sym(ID id)
16354 {
16355 const char *name;
16356 char buf[8];
16357
16358 if (id <= 256) {
16359 buf[0] = (char)id;
16360 buf[1] = '\0';
16361 return ID2SYM(rb_intern2(buf, 1));
16362 }
16363 if ((name = keyword_id_to_str(id))) {
16364 return ID2SYM(rb_intern(name));
16365 }
16366 switch (id) {
16367 case tOROP:
16368 name = "||";
16369 break;
16370 case tANDOP:
16371 name = "&&";
16372 break;
16373 default:
16374 name = rb_id2name(id);
16375 if (!name) {
16376 rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
16377 }
16378 return ID2SYM(id);
16379 }
16380 return ID2SYM(rb_intern(name));
16381 }
16382
16383 static ID
16384 ripper_get_id(VALUE v)
16385 {
16386 NODE *nd;
16387 if (!RB_TYPE_P(v, T_NODE)) return 0;
16388 nd = (NODE *)v;
16389 if (nd_type(nd) != NODE_LASGN) return 0;
16390 return nd->nd_vid;
16391 }
16392
16393 static VALUE
16394 ripper_get_value(VALUE v)
16395 {
16396 NODE *nd;
16397 if (v == Qundef) return Qnil;
16398 if (!RB_TYPE_P(v, T_NODE)) return v;
16399 nd = (NODE *)v;
16400 if (nd_type(nd) != NODE_LASGN) return Qnil;
16401 return nd->nd_rval;
16402 }
16403
16404 static void
16405 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
16406 {
16407 VALUE str;
16408 va_list args;
16409
16410 va_start(args, fmt);
16411 str = rb_vsprintf(fmt, args);
16412 va_end(args);
16413 rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
16414 }
16415
16416 static void
16417 ripper_warn0(struct parser_params *parser, const char *fmt)
16418 {
16419 rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
16420 }
16421
16422 static void
16423 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
16424 {
16425 rb_funcall(parser->value, rb_intern("warn"), 2,
16426 STR_NEW2(fmt), INT2NUM(a));
16427 }
16428
16429 #if 0
16430 static void
16431 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
16432 {
16433 rb_funcall(parser->value, rb_intern("warn"), 2,
16434 STR_NEW2(fmt), STR_NEW2(str));
16435 }
16436 #endif
16437
16438 static void
16439 ripper_warning0(struct parser_params *parser, const char *fmt)
16440 {
16441 rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
16442 }
16443
16444 static void
16445 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
16446 {
16447 rb_funcall(parser->value, rb_intern("warning"), 2,
16448 STR_NEW2(fmt), STR_NEW2(str));
16449 }
16450
16451 static VALUE
16452 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
16453 {
16454 return rb_funcall(src, ripper_id_gets, 0);
16455 }
16456
16457 static VALUE
16458 ripper_s_allocate(VALUE klass)
16459 {
16460 struct parser_params *p;
16461 VALUE self;
16462
16463 p = ALLOC_N(struct parser_params, 1);
16464 MEMZERO(p, struct parser_params, 1);
16465 self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
16466 p->value = self;
16467 return self;
16468 }
16469
16470 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
16471
16472
16473
16474
16475
16476
16477
16478
16479
16480
16481
16482 static VALUE
16483 ripper_initialize(int argc, VALUE *argv, VALUE self)
16484 {
16485 struct parser_params *parser;
16486 VALUE src, fname, lineno;
16487
16488 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16489 rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
16490 if (rb_obj_respond_to(src, ripper_id_gets, 0)) {
16491 parser->parser_lex_gets = ripper_lex_get_generic;
16492 }
16493 else {
16494 StringValue(src);
16495 parser->parser_lex_gets = lex_get_str;
16496 }
16497 parser->parser_lex_input = src;
16498 parser->eofp = Qfalse;
16499 if (NIL_P(fname)) {
16500 fname = STR_NEW2("(ripper)");
16501 }
16502 else {
16503 StringValue(fname);
16504 }
16505 parser_initialize(parser);
16506
16507 parser->parser_ruby_sourcefile_string = fname;
16508 parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
16509 parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
16510
16511 return Qnil;
16512 }
16513
16514 extern VALUE rb_thread_pass(void);
16515
16516 struct ripper_args {
16517 struct parser_params *parser;
16518 int argc;
16519 VALUE *argv;
16520 };
16521
16522 static VALUE
16523 ripper_parse0(VALUE parser_v)
16524 {
16525 struct parser_params *parser;
16526
16527 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16528 parser_prepare(parser);
16529 ripper_yyparse((void*)parser);
16530 return parser->result;
16531 }
16532
16533 static VALUE
16534 ripper_ensure(VALUE parser_v)
16535 {
16536 struct parser_params *parser;
16537
16538 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16539 parser->parsing_thread = Qnil;
16540 return Qnil;
16541 }
16542
16543
16544
16545
16546
16547
16548
16549 static VALUE
16550 ripper_parse(VALUE self)
16551 {
16552 struct parser_params *parser;
16553
16554 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16555 if (!ripper_initialized_p(parser)) {
16556 rb_raise(rb_eArgError, "method called for uninitialized object");
16557 }
16558 if (!NIL_P(parser->parsing_thread)) {
16559 if (parser->parsing_thread == rb_thread_current())
16560 rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
16561 else
16562 rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
16563 }
16564 parser->parsing_thread = rb_thread_current();
16565 rb_ensure(ripper_parse0, self, ripper_ensure, self);
16566
16567 return parser->result;
16568 }
16569
16570
16571
16572
16573
16574
16575
16576
16577 static VALUE
16578 ripper_column(VALUE self)
16579 {
16580 struct parser_params *parser;
16581 long col;
16582
16583 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16584 if (!ripper_initialized_p(parser)) {
16585 rb_raise(rb_eArgError, "method called for uninitialized object");
16586 }
16587 if (NIL_P(parser->parsing_thread)) return Qnil;
16588 col = parser->tokp - parser->parser_lex_pbeg;
16589 return LONG2NUM(col);
16590 }
16591
16592
16593
16594
16595
16596
16597
16598 static VALUE
16599 ripper_filename(VALUE self)
16600 {
16601 struct parser_params *parser;
16602
16603 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16604 if (!ripper_initialized_p(parser)) {
16605 rb_raise(rb_eArgError, "method called for uninitialized object");
16606 }
16607 return parser->parser_ruby_sourcefile_string;
16608 }
16609
16610
16611
16612
16613
16614
16615
16616
16617 static VALUE
16618 ripper_lineno(VALUE self)
16619 {
16620 struct parser_params *parser;
16621
16622 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16623 if (!ripper_initialized_p(parser)) {
16624 rb_raise(rb_eArgError, "method called for uninitialized object");
16625 }
16626 if (NIL_P(parser->parsing_thread)) return Qnil;
16627 return INT2NUM(parser->parser_ruby_sourceline);
16628 }
16629
16630 #ifdef RIPPER_DEBUG
16631
16632 static VALUE
16633 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
16634 {
16635 StringValue(msg);
16636 if (obj == Qundef) {
16637 rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg));
16638 }
16639 return Qnil;
16640 }
16641
16642
16643 static VALUE
16644 ripper_value(VALUE self, VALUE obj)
16645 {
16646 return ULONG2NUM(obj);
16647 }
16648 #endif
16649
16650 void
16651 Init_ripper(void)
16652 {
16653 VALUE Ripper;
16654
16655 Ripper = rb_define_class("Ripper", rb_cObject);
16656 rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
16657 rb_define_alloc_func(Ripper, ripper_s_allocate);
16658 rb_define_method(Ripper, "initialize", ripper_initialize, -1);
16659 rb_define_method(Ripper, "parse", ripper_parse, 0);
16660 rb_define_method(Ripper, "column", ripper_column, 0);
16661 rb_define_method(Ripper, "filename", ripper_filename, 0);
16662 rb_define_method(Ripper, "lineno", ripper_lineno, 0);
16663 rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
16664 rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
16665 rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
16666 rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
16667 #ifdef RIPPER_DEBUG
16668 rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
16669 rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
16670 rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
16671 #endif
16672
16673 ripper_id_gets = rb_intern("gets");
16674 ripper_init_eventids1(Ripper);
16675 ripper_init_eventids2(Ripper);
16676
16677 rb_intern("||");
16678 rb_intern("&&");
16679 }
16680 #endif
16681
16682