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 #define YYBISON 1
00045
00046
00047 #define YYBISON_VERSION "2.5"
00048
00049
00050 #define YYSKELETON_NAME "yacc.c"
00051
00052
00053 #define YYPURE 1
00054
00055
00056 #define YYPUSH 0
00057
00058
00059 #define YYPULL 1
00060
00061
00062 #define YYLSP_NEEDED 0
00063
00064
00065
00066
00067
00068
00069 #line 12 "parse.y"
00070
00071
00072 #define YYDEBUG 1
00073 #define YYERROR_VERBOSE 1
00074 #define YYSTACK_USE_ALLOCA 0
00075
00076 #include "ruby/ruby.h"
00077 #include "ruby/st.h"
00078 #include "ruby/encoding.h"
00079 #include "node.h"
00080 #include "parse.h"
00081 #include "id.h"
00082 #include "regenc.h"
00083 #include <stdio.h>
00084 #include <errno.h>
00085 #include <ctype.h>
00086
00087 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
00088
00089 #define YYMALLOC(size) rb_parser_malloc(parser, size)
00090 #define YYREALLOC(ptr, size) rb_parser_realloc(parser, ptr, size)
00091 #define YYCALLOC(nelem, size) rb_parser_calloc(parser, nelem, size)
00092 #define YYFREE(ptr) rb_parser_free(parser, ptr)
00093 #define malloc YYMALLOC
00094 #define realloc YYREALLOC
00095 #define calloc YYCALLOC
00096 #define free YYFREE
00097
00098 #ifndef RIPPER
00099 static ID register_symid(ID, const char *, long, rb_encoding *);
00100 #define REGISTER_SYMID(id, name) register_symid(id, name, strlen(name), enc)
00101 #include "id.c"
00102 #endif
00103
00104 #define is_notop_id(id) ((id)>tLAST_TOKEN)
00105 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL)
00106 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL)
00107 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE)
00108 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET)
00109 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST)
00110 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS)
00111 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK)
00112
00113 #define is_asgn_or_id(id) ((is_notop_id(id)) && \
00114 (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \
00115 ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \
00116 ((id)&ID_SCOPE_MASK) == ID_CLASS))
00117
00118 enum lex_state_e {
00119 EXPR_BEG,
00120 EXPR_END,
00121 EXPR_ENDARG,
00122 EXPR_ENDFN,
00123 EXPR_ARG,
00124 EXPR_CMDARG,
00125 EXPR_MID,
00126 EXPR_FNAME,
00127 EXPR_DOT,
00128 EXPR_CLASS,
00129 EXPR_VALUE,
00130 EXPR_MAX_STATE
00131 };
00132
00133 typedef VALUE stack_type;
00134
00135 # define BITSTACK_PUSH(stack, n) (stack = (stack<<1)|((n)&1))
00136 # define BITSTACK_POP(stack) (stack = stack >> 1)
00137 # define BITSTACK_LEXPOP(stack) (stack = (stack >> 1) | (stack & 1))
00138 # define BITSTACK_SET_P(stack) (stack&1)
00139
00140 #define COND_PUSH(n) BITSTACK_PUSH(cond_stack, n)
00141 #define COND_POP() BITSTACK_POP(cond_stack)
00142 #define COND_LEXPOP() BITSTACK_LEXPOP(cond_stack)
00143 #define COND_P() BITSTACK_SET_P(cond_stack)
00144
00145 #define CMDARG_PUSH(n) BITSTACK_PUSH(cmdarg_stack, n)
00146 #define CMDARG_POP() BITSTACK_POP(cmdarg_stack)
00147 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
00148 #define CMDARG_P() BITSTACK_SET_P(cmdarg_stack)
00149
00150 struct vtable {
00151 ID *tbl;
00152 int pos;
00153 int capa;
00154 struct vtable *prev;
00155 };
00156
00157 struct local_vars {
00158 struct vtable *args;
00159 struct vtable *vars;
00160 struct local_vars *prev;
00161 };
00162
00163 #define DVARS_INHERIT ((void*)1)
00164 #define DVARS_TOPSCOPE NULL
00165 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
00166 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
00167
00168 static int
00169 vtable_size(const struct vtable *tbl)
00170 {
00171 if (POINTER_P(tbl)) {
00172 return tbl->pos;
00173 }
00174 else {
00175 return 0;
00176 }
00177 }
00178
00179 #define VTBL_DEBUG 0
00180
00181 static struct vtable *
00182 vtable_alloc(struct vtable *prev)
00183 {
00184 struct vtable *tbl = ALLOC(struct vtable);
00185 tbl->pos = 0;
00186 tbl->capa = 8;
00187 tbl->tbl = ALLOC_N(ID, tbl->capa);
00188 tbl->prev = prev;
00189 if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
00190 return tbl;
00191 }
00192
00193 static void
00194 vtable_free(struct vtable *tbl)
00195 {
00196 if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
00197 if (POINTER_P(tbl)) {
00198 if (tbl->tbl) {
00199 xfree(tbl->tbl);
00200 }
00201 xfree(tbl);
00202 }
00203 }
00204
00205 static void
00206 vtable_add(struct vtable *tbl, ID id)
00207 {
00208 if (!POINTER_P(tbl)) {
00209 rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
00210 }
00211 if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id));
00212
00213 if (tbl->pos == tbl->capa) {
00214 tbl->capa = tbl->capa * 2;
00215 REALLOC_N(tbl->tbl, ID, tbl->capa);
00216 }
00217 tbl->tbl[tbl->pos++] = id;
00218 }
00219
00220 static int
00221 vtable_included(const struct vtable * tbl, ID id)
00222 {
00223 int i;
00224
00225 if (POINTER_P(tbl)) {
00226 for (i = 0; i < tbl->pos; i++) {
00227 if (tbl->tbl[i] == id) {
00228 return 1;
00229 }
00230 }
00231 }
00232 return 0;
00233 }
00234
00235
00236 #ifndef RIPPER
00237 typedef struct token_info {
00238 const char *token;
00239 int linenum;
00240 int column;
00241 int nonspc;
00242 struct token_info *next;
00243 } token_info;
00244 #endif
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255 struct parser_params {
00256 int is_ripper;
00257 NODE *heap;
00258
00259 YYSTYPE *parser_yylval;
00260 VALUE eofp;
00261
00262 NODE *parser_lex_strterm;
00263 enum lex_state_e parser_lex_state;
00264 stack_type parser_cond_stack;
00265 stack_type parser_cmdarg_stack;
00266 int parser_class_nest;
00267 int parser_paren_nest;
00268 int parser_lpar_beg;
00269 int parser_in_single;
00270 int parser_in_def;
00271 int parser_compile_for_eval;
00272 VALUE parser_cur_mid;
00273 int parser_in_defined;
00274 char *parser_tokenbuf;
00275 int parser_tokidx;
00276 int parser_toksiz;
00277 VALUE parser_lex_input;
00278 VALUE parser_lex_lastline;
00279 VALUE parser_lex_nextline;
00280 const char *parser_lex_pbeg;
00281 const char *parser_lex_p;
00282 const char *parser_lex_pend;
00283 int parser_heredoc_end;
00284 int parser_command_start;
00285 NODE *parser_deferred_nodes;
00286 long parser_lex_gets_ptr;
00287 VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
00288 struct local_vars *parser_lvtbl;
00289 int parser_ruby__end__seen;
00290 int line_count;
00291 int has_shebang;
00292 char *parser_ruby_sourcefile;
00293 int parser_ruby_sourceline;
00294 rb_encoding *enc;
00295 rb_encoding *utf8;
00296
00297 int parser_yydebug;
00298
00299 #ifndef RIPPER
00300
00301 NODE *parser_eval_tree_begin;
00302 NODE *parser_eval_tree;
00303 VALUE debug_lines;
00304 VALUE coverage;
00305 int nerr;
00306
00307 token_info *parser_token_info;
00308 #else
00309
00310 VALUE parser_ruby_sourcefile_string;
00311 const char *tokp;
00312 VALUE delayed;
00313 int delayed_line;
00314 int delayed_col;
00315
00316 VALUE value;
00317 VALUE result;
00318 VALUE parsing_thread;
00319 int toplevel_p;
00320 #endif
00321 };
00322
00323 #define UTF8_ENC() (parser->utf8 ? parser->utf8 : \
00324 (parser->utf8 = rb_utf8_encoding()))
00325 #define STR_NEW(p,n) rb_enc_str_new((p),(n),parser->enc)
00326 #define STR_NEW0() rb_enc_str_new(0,0,parser->enc)
00327 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),parser->enc)
00328 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),parser->enc)
00329 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
00330 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), parser->enc)
00331
00332 #ifdef YYMALLOC
00333 void *rb_parser_malloc(struct parser_params *, size_t);
00334 void *rb_parser_realloc(struct parser_params *, void *, size_t);
00335 void *rb_parser_calloc(struct parser_params *, size_t, size_t);
00336 void rb_parser_free(struct parser_params *, void *);
00337 #endif
00338
00339 static int parser_yyerror(struct parser_params*, const char*);
00340 #define yyerror(msg) parser_yyerror(parser, msg)
00341
00342 #define YYLEX_PARAM parser
00343
00344 #define lex_strterm (parser->parser_lex_strterm)
00345 #define lex_state (parser->parser_lex_state)
00346 #define cond_stack (parser->parser_cond_stack)
00347 #define cmdarg_stack (parser->parser_cmdarg_stack)
00348 #define class_nest (parser->parser_class_nest)
00349 #define paren_nest (parser->parser_paren_nest)
00350 #define lpar_beg (parser->parser_lpar_beg)
00351 #define in_single (parser->parser_in_single)
00352 #define in_def (parser->parser_in_def)
00353 #define compile_for_eval (parser->parser_compile_for_eval)
00354 #define cur_mid (parser->parser_cur_mid)
00355 #define in_defined (parser->parser_in_defined)
00356 #define tokenbuf (parser->parser_tokenbuf)
00357 #define tokidx (parser->parser_tokidx)
00358 #define toksiz (parser->parser_toksiz)
00359 #define lex_input (parser->parser_lex_input)
00360 #define lex_lastline (parser->parser_lex_lastline)
00361 #define lex_nextline (parser->parser_lex_nextline)
00362 #define lex_pbeg (parser->parser_lex_pbeg)
00363 #define lex_p (parser->parser_lex_p)
00364 #define lex_pend (parser->parser_lex_pend)
00365 #define heredoc_end (parser->parser_heredoc_end)
00366 #define command_start (parser->parser_command_start)
00367 #define deferred_nodes (parser->parser_deferred_nodes)
00368 #define lex_gets_ptr (parser->parser_lex_gets_ptr)
00369 #define lex_gets (parser->parser_lex_gets)
00370 #define lvtbl (parser->parser_lvtbl)
00371 #define ruby__end__seen (parser->parser_ruby__end__seen)
00372 #define ruby_sourceline (parser->parser_ruby_sourceline)
00373 #define ruby_sourcefile (parser->parser_ruby_sourcefile)
00374 #define yydebug (parser->parser_yydebug)
00375 #ifdef RIPPER
00376 #else
00377 #define ruby_eval_tree (parser->parser_eval_tree)
00378 #define ruby_eval_tree_begin (parser->parser_eval_tree_begin)
00379 #define ruby_debug_lines (parser->debug_lines)
00380 #define ruby_coverage (parser->coverage)
00381 #endif
00382
00383 static int yylex(void*, void*);
00384
00385 #ifndef RIPPER
00386 #define yyparse ruby_yyparse
00387
00388 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
00389 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, type, a1, a2, a3)
00390
00391 static NODE *cond_gen(struct parser_params*,NODE*);
00392 #define cond(node) cond_gen(parser, node)
00393 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
00394 #define logop(type,node1,node2) logop_gen(parser, type, node1, node2)
00395
00396 static NODE *newline_node(NODE*);
00397 static void fixpos(NODE*,NODE*);
00398
00399 static int value_expr_gen(struct parser_params*,NODE*);
00400 static void void_expr_gen(struct parser_params*,NODE*);
00401 static NODE *remove_begin(NODE*);
00402 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
00403 #define void_expr0(node) void_expr_gen(parser, (node))
00404 #define void_expr(node) void_expr0((node) = remove_begin(node))
00405 static void void_stmts_gen(struct parser_params*,NODE*);
00406 #define void_stmts(node) void_stmts_gen(parser, node)
00407 static void reduce_nodes_gen(struct parser_params*,NODE**);
00408 #define reduce_nodes(n) reduce_nodes_gen(parser,n)
00409 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
00410 #define block_dup_check(n1,n2) block_dup_check_gen(parser,n1,n2)
00411
00412 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
00413 #define block_append(h,t) block_append_gen(parser,h,t)
00414 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
00415 #define list_append(l,i) list_append_gen(parser,l,i)
00416 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
00417 #define list_concat(h,t) list_concat_gen(parser,h,t)
00418 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
00419 #define arg_append(h,t) arg_append_gen(parser,h,t)
00420 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
00421 #define arg_concat(h,t) arg_concat_gen(parser,h,t)
00422 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
00423 #define literal_concat(h,t) literal_concat_gen(parser,h,t)
00424 static int literal_concat0(struct parser_params *, VALUE, VALUE);
00425 static NODE *new_evstr_gen(struct parser_params*,NODE*);
00426 #define new_evstr(n) new_evstr_gen(parser,n)
00427 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
00428 #define evstr2dstr(n) evstr2dstr_gen(parser,n)
00429 static NODE *splat_array(NODE*);
00430
00431 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
00432 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, recv,id,arg1)
00433 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
00434 #define call_uni_op(recv,id) call_uni_op_gen(parser, recv,id)
00435
00436 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,ID);
00437 #define new_args(f,o,r,p,b) new_args_gen(parser, f,o,r,p,b)
00438
00439 static NODE *negate_lit(NODE*);
00440 static NODE *ret_args_gen(struct parser_params*,NODE*);
00441 #define ret_args(node) ret_args_gen(parser, node)
00442 static NODE *arg_blk_pass(NODE*,NODE*);
00443 static NODE *new_yield_gen(struct parser_params*,NODE*);
00444 #define new_yield(node) new_yield_gen(parser, node)
00445
00446 static NODE *gettable_gen(struct parser_params*,ID);
00447 #define gettable(id) gettable_gen(parser,id)
00448 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
00449 #define assignable(id,node) assignable_gen(parser, id, node)
00450
00451 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
00452 #define aryset(node1,node2) aryset_gen(parser, node1, node2)
00453 static NODE *attrset_gen(struct parser_params*,NODE*,ID);
00454 #define attrset(node,id) attrset_gen(parser, node, id)
00455
00456 static void rb_backref_error_gen(struct parser_params*,NODE*);
00457 #define rb_backref_error(n) rb_backref_error_gen(parser,n)
00458 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
00459 #define node_assign(node1, node2) node_assign_gen(parser, node1, node2)
00460
00461 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
00462 #define match_op(node1,node2) match_op_gen(parser, node1, node2)
00463
00464 static ID *local_tbl_gen(struct parser_params*);
00465 #define local_tbl() local_tbl_gen(parser)
00466
00467 static void fixup_nodes(NODE **);
00468
00469 extern int rb_dvar_defined(ID);
00470 extern int rb_local_defined(ID);
00471 extern int rb_parse_in_eval(void);
00472 extern int rb_parse_in_main(void);
00473
00474 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
00475 #define reg_compile(str,options) reg_compile_gen(parser, str, options)
00476 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
00477 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, str, options)
00478 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
00479 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, str, options)
00480 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
00481 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,regexp,match)
00482
00483 #define get_id(id) (id)
00484 #define get_value(val) (val)
00485 #else
00486 #define remove_begin(node) (node)
00487 #define rb_dvar_defined(id) 0
00488 #define rb_local_defined(id) 0
00489 static ID ripper_get_id(VALUE);
00490 #define get_id(id) ripper_get_id(id)
00491 static VALUE ripper_get_value(VALUE);
00492 #define get_value(val) ripper_get_value(val)
00493 static VALUE assignable_gen(struct parser_params*,VALUE);
00494 #define assignable(lhs,node) assignable_gen(parser, lhs)
00495 #endif
00496
00497 static ID formal_argument_gen(struct parser_params*, ID);
00498 #define formal_argument(id) formal_argument_gen(parser, id)
00499 static ID shadowing_lvar_gen(struct parser_params*,ID);
00500 #define shadowing_lvar(name) shadowing_lvar_gen(parser, name)
00501 static void new_bv_gen(struct parser_params*,ID);
00502 #define new_bv(id) new_bv_gen(parser, id)
00503
00504 static void local_push_gen(struct parser_params*,int);
00505 #define local_push(top) local_push_gen(parser,top)
00506 static void local_pop_gen(struct parser_params*);
00507 #define local_pop() local_pop_gen(parser)
00508 static int local_var_gen(struct parser_params*, ID);
00509 #define local_var(id) local_var_gen(parser, id);
00510 static int arg_var_gen(struct parser_params*, ID);
00511 #define arg_var(id) arg_var_gen(parser, id)
00512 static int local_id_gen(struct parser_params*, ID);
00513 #define local_id(id) local_id_gen(parser, id)
00514 static ID internal_id_gen(struct parser_params*);
00515 #define internal_id() internal_id_gen(parser)
00516
00517 static const struct vtable *dyna_push_gen(struct parser_params *);
00518 #define dyna_push() dyna_push_gen(parser)
00519 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
00520 #define dyna_pop(node) dyna_pop_gen(parser, node)
00521 static int dyna_in_block_gen(struct parser_params*);
00522 #define dyna_in_block() dyna_in_block_gen(parser)
00523 #define dyna_var(id) local_var(id)
00524 static int dvar_defined_gen(struct parser_params*,ID);
00525 #define dvar_defined(id) dvar_defined_gen(parser, id)
00526 static int dvar_curr_gen(struct parser_params*,ID);
00527 #define dvar_curr(id) dvar_curr_gen(parser, id)
00528
00529 static int lvar_defined_gen(struct parser_params*, ID);
00530 #define lvar_defined(id) lvar_defined_gen(parser, id)
00531
00532 #define RE_OPTION_ONCE (1<<16)
00533 #define RE_OPTION_ENCODING_SHIFT 8
00534 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
00535 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
00536 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
00537 #define RE_OPTION_MASK 0xff
00538 #define RE_OPTION_ARG_ENCODING_NONE 32
00539
00540 #define NODE_STRTERM NODE_ZARRAY
00541 #define NODE_HEREDOC NODE_ARRAY
00542 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
00543 #define nd_func u1.id
00544 #if SIZEOF_SHORT == 2
00545 #define nd_term(node) ((signed short)(node)->u2.id)
00546 #else
00547 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
00548 #endif
00549 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
00550 #define nd_nest u3.cnt
00551
00552
00553
00554 #ifdef RIPPER
00555 #define RIPPER_VERSION "0.1.0"
00556
00557 #include "eventids1.c"
00558 #include "eventids2.c"
00559 static ID ripper_id_gets;
00560
00561 static VALUE ripper_dispatch0(struct parser_params*,ID);
00562 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
00563 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
00564 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
00565 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
00566 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
00567
00568 #define dispatch0(n) ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
00569 #define dispatch1(n,a) ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), a)
00570 #define dispatch2(n,a,b) ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), a, b)
00571 #define dispatch3(n,a,b,c) ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), a, b, c)
00572 #define dispatch4(n,a,b,c,d) ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), a, b, c, d)
00573 #define dispatch5(n,a,b,c,d,e) ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), a, b, c, d, e)
00574
00575 #define yyparse ripper_yyparse
00576
00577 #define ripper_intern(s) ID2SYM(rb_intern(s))
00578 static VALUE ripper_id2sym(ID);
00579 #ifdef __GNUC__
00580 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
00581 ID2SYM(id) : ripper_id2sym(id))
00582 #endif
00583
00584 #define arg_new() dispatch0(args_new)
00585 #define arg_add(l,a) dispatch2(args_add, l, a)
00586 #define arg_add_star(l,a) dispatch2(args_add_star, l, a)
00587 #define arg_add_block(l,b) dispatch2(args_add_block, l, b)
00588 #define arg_add_optblock(l,b) ((b)==Qundef? l : dispatch2(args_add_block, l, b))
00589 #define bare_assoc(v) dispatch1(bare_assoc_hash, v)
00590 #define arg_add_assocs(l,b) arg_add(l, bare_assoc(b))
00591
00592 #define args2mrhs(a) dispatch1(mrhs_new_from_args, a)
00593 #define mrhs_new() dispatch0(mrhs_new)
00594 #define mrhs_add(l,a) dispatch2(mrhs_add, l, a)
00595 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, l, a)
00596
00597 #define mlhs_new() dispatch0(mlhs_new)
00598 #define mlhs_add(l,a) dispatch2(mlhs_add, l, a)
00599 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, l, a)
00600
00601 #define params_new(pars, opts, rest, pars2, blk) \
00602 dispatch5(params, pars, opts, rest, pars2, blk)
00603
00604 #define blockvar_new(p,v) dispatch2(block_var, p, v)
00605 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, l, a)
00606 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, l, a)
00607
00608 #define method_optarg(m,a) ((a)==Qundef ? m : dispatch2(method_add_arg,m,a))
00609 #define method_arg(m,a) dispatch2(method_add_arg,m,a)
00610 #define method_add_block(m,b) dispatch2(method_add_block, m, b)
00611
00612 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
00613
00614 #define FIXME 0
00615
00616 #endif
00617
00618 #ifndef RIPPER
00619 # define ifndef_ripper(x) x
00620 #else
00621 # define ifndef_ripper(x)
00622 #endif
00623
00624 #ifndef RIPPER
00625 # define rb_warn0(fmt) rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt)
00626 # define rb_warnI(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt, a)
00627 # define rb_warnS(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt, a)
00628 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, fmt)
00629 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, fmt, a)
00630 #else
00631 # define rb_warn0(fmt) ripper_warn0(parser, fmt)
00632 # define rb_warnI(fmt,a) ripper_warnI(parser, fmt, a)
00633 # define rb_warnS(fmt,a) ripper_warnS(parser, fmt, a)
00634 # define rb_warning0(fmt) ripper_warning0(parser, fmt)
00635 # define rb_warningS(fmt,a) ripper_warningS(parser, fmt, a)
00636 static void ripper_warn0(struct parser_params*, const char*);
00637 static void ripper_warnI(struct parser_params*, const char*, int);
00638 #if 0
00639 static void ripper_warnS(struct parser_params*, const char*, const char*);
00640 #endif
00641 static void ripper_warning0(struct parser_params*, const char*);
00642 static void ripper_warningS(struct parser_params*, const char*, const char*);
00643 #endif
00644
00645 #ifdef RIPPER
00646 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
00647 # define rb_compile_error ripper_compile_error
00648 # define compile_error ripper_compile_error
00649 # define PARSER_ARG parser,
00650 #else
00651 # define compile_error parser->nerr++,rb_compile_error
00652 # define PARSER_ARG ruby_sourcefile, ruby_sourceline,
00653 #endif
00654
00655
00656
00657
00658 #ifdef OLD_YACC
00659 #ifndef YYMAXDEPTH
00660 #define YYMAXDEPTH 10000
00661 #endif
00662 #endif
00663
00664 #ifndef RIPPER
00665 static void token_info_push(struct parser_params*, const char *token);
00666 static void token_info_pop(struct parser_params*, const char *token);
00667 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, token) : (void)0)
00668 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, token) : (void)0)
00669 #else
00670 #define token_info_push(token)
00671 #define token_info_pop(token)
00672 #endif
00673
00674
00675
00676 #line 677 "parse.c"
00677
00678
00679 #ifndef YYDEBUG
00680 # define YYDEBUG 0
00681 #endif
00682
00683
00684 #ifdef YYERROR_VERBOSE
00685 # undef YYERROR_VERBOSE
00686 # define YYERROR_VERBOSE 1
00687 #else
00688 # define YYERROR_VERBOSE 0
00689 #endif
00690
00691
00692 #ifndef YYTOKEN_TABLE
00693 # define YYTOKEN_TABLE 0
00694 #endif
00695
00696
00697
00698 #ifndef YYTOKENTYPE
00699 # define YYTOKENTYPE
00700
00701
00702 enum yytokentype {
00703 keyword_class = 258,
00704 keyword_module = 259,
00705 keyword_def = 260,
00706 keyword_undef = 261,
00707 keyword_begin = 262,
00708 keyword_rescue = 263,
00709 keyword_ensure = 264,
00710 keyword_end = 265,
00711 keyword_if = 266,
00712 keyword_unless = 267,
00713 keyword_then = 268,
00714 keyword_elsif = 269,
00715 keyword_else = 270,
00716 keyword_case = 271,
00717 keyword_when = 272,
00718 keyword_while = 273,
00719 keyword_until = 274,
00720 keyword_for = 275,
00721 keyword_break = 276,
00722 keyword_next = 277,
00723 keyword_redo = 278,
00724 keyword_retry = 279,
00725 keyword_in = 280,
00726 keyword_do = 281,
00727 keyword_do_cond = 282,
00728 keyword_do_block = 283,
00729 keyword_do_LAMBDA = 284,
00730 keyword_return = 285,
00731 keyword_yield = 286,
00732 keyword_super = 287,
00733 keyword_self = 288,
00734 keyword_nil = 289,
00735 keyword_true = 290,
00736 keyword_false = 291,
00737 keyword_and = 292,
00738 keyword_or = 293,
00739 keyword_not = 294,
00740 modifier_if = 295,
00741 modifier_unless = 296,
00742 modifier_while = 297,
00743 modifier_until = 298,
00744 modifier_rescue = 299,
00745 keyword_alias = 300,
00746 keyword_defined = 301,
00747 keyword_BEGIN = 302,
00748 keyword_END = 303,
00749 keyword__LINE__ = 304,
00750 keyword__FILE__ = 305,
00751 keyword__ENCODING__ = 306,
00752 tIDENTIFIER = 307,
00753 tFID = 308,
00754 tGVAR = 309,
00755 tIVAR = 310,
00756 tCONSTANT = 311,
00757 tCVAR = 312,
00758 tLABEL = 313,
00759 tINTEGER = 314,
00760 tFLOAT = 315,
00761 tSTRING_CONTENT = 316,
00762 tCHAR = 317,
00763 tNTH_REF = 318,
00764 tBACK_REF = 319,
00765 tREGEXP_END = 320,
00766 tUPLUS = 321,
00767 tUMINUS = 322,
00768 tPOW = 323,
00769 tCMP = 324,
00770 tEQ = 325,
00771 tEQQ = 326,
00772 tNEQ = 327,
00773 tGEQ = 328,
00774 tLEQ = 329,
00775 tANDOP = 330,
00776 tOROP = 331,
00777 tMATCH = 332,
00778 tNMATCH = 333,
00779 tDOT2 = 334,
00780 tDOT3 = 335,
00781 tAREF = 336,
00782 tASET = 337,
00783 tLSHFT = 338,
00784 tRSHFT = 339,
00785 tCOLON2 = 340,
00786 tCOLON3 = 341,
00787 tOP_ASGN = 342,
00788 tASSOC = 343,
00789 tLPAREN = 344,
00790 tLPAREN_ARG = 345,
00791 tRPAREN = 346,
00792 tLBRACK = 347,
00793 tLBRACE = 348,
00794 tLBRACE_ARG = 349,
00795 tSTAR = 350,
00796 tAMPER = 351,
00797 tLAMBDA = 352,
00798 tSYMBEG = 353,
00799 tSTRING_BEG = 354,
00800 tXSTRING_BEG = 355,
00801 tREGEXP_BEG = 356,
00802 tWORDS_BEG = 357,
00803 tQWORDS_BEG = 358,
00804 tSTRING_DBEG = 359,
00805 tSTRING_DVAR = 360,
00806 tSTRING_END = 361,
00807 tLAMBEG = 362,
00808 tLOWEST = 363,
00809 tUMINUS_NUM = 364,
00810 idNULL = 365,
00811 idRespond_to = 366,
00812 idIFUNC = 367,
00813 idCFUNC = 368,
00814 id_core_set_method_alias = 369,
00815 id_core_set_variable_alias = 370,
00816 id_core_undef_method = 371,
00817 id_core_define_method = 372,
00818 id_core_define_singleton_method = 373,
00819 id_core_set_postexe = 374,
00820 tLAST_TOKEN = 375
00821 };
00822 #endif
00823
00824
00825
00826 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
00827 typedef union YYSTYPE
00828 {
00829
00830
00831 #line 620 "parse.y"
00832
00833 VALUE val;
00834 NODE *node;
00835 ID id;
00836 int num;
00837 const struct vtable *vars;
00838
00839
00840
00841
00842 #line 843 "parse.c"
00843 } YYSTYPE;
00844 # define YYSTYPE_IS_TRIVIAL 1
00845 # define yystype YYSTYPE
00846 # define YYSTYPE_IS_DECLARED 1
00847 #endif
00848
00849
00850
00851
00852
00853
00854 #line 855 "parse.c"
00855
00856 #ifdef short
00857 # undef short
00858 #endif
00859
00860 #ifdef YYTYPE_UINT8
00861 typedef YYTYPE_UINT8 yytype_uint8;
00862 #else
00863 typedef unsigned char yytype_uint8;
00864 #endif
00865
00866 #ifdef YYTYPE_INT8
00867 typedef YYTYPE_INT8 yytype_int8;
00868 #elif (defined __STDC__ || defined __C99__FUNC__ \
00869 || defined __cplusplus || defined _MSC_VER)
00870 typedef signed char yytype_int8;
00871 #else
00872 typedef short int yytype_int8;
00873 #endif
00874
00875 #ifdef YYTYPE_UINT16
00876 typedef YYTYPE_UINT16 yytype_uint16;
00877 #else
00878 typedef unsigned short int yytype_uint16;
00879 #endif
00880
00881 #ifdef YYTYPE_INT16
00882 typedef YYTYPE_INT16 yytype_int16;
00883 #else
00884 typedef short int yytype_int16;
00885 #endif
00886
00887 #ifndef YYSIZE_T
00888 # ifdef __SIZE_TYPE__
00889 # define YYSIZE_T __SIZE_TYPE__
00890 # elif defined size_t
00891 # define YYSIZE_T size_t
00892 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
00893 || defined __cplusplus || defined _MSC_VER)
00894 # include <stddef.h>
00895 # define YYSIZE_T size_t
00896 # else
00897 # define YYSIZE_T unsigned int
00898 # endif
00899 #endif
00900
00901 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
00902
00903 #ifndef YY_
00904 # if defined YYENABLE_NLS && YYENABLE_NLS
00905 # if ENABLE_NLS
00906 # include <libintl.h>
00907 # define YY_(msgid) dgettext ("bison-runtime", msgid)
00908 # endif
00909 # endif
00910 # ifndef YY_
00911 # define YY_(msgid) msgid
00912 # endif
00913 #endif
00914
00915
00916 #if ! defined lint || defined __GNUC__
00917 # define YYUSE(e) ((void) (e))
00918 #else
00919 # define YYUSE(e)
00920 #endif
00921
00922
00923 #ifndef lint
00924 # define YYID(n) (n)
00925 #else
00926 #if (defined __STDC__ || defined __C99__FUNC__ \
00927 || defined __cplusplus || defined _MSC_VER)
00928 static int
00929 YYID (int yyi)
00930 #else
00931 static int
00932 YYID (yyi)
00933 int yyi;
00934 #endif
00935 {
00936 return yyi;
00937 }
00938 #endif
00939
00940 #if ! defined yyoverflow || YYERROR_VERBOSE
00941
00942
00943
00944 # ifdef YYSTACK_USE_ALLOCA
00945 # if YYSTACK_USE_ALLOCA
00946 # ifdef __GNUC__
00947 # define YYSTACK_ALLOC __builtin_alloca
00948 # elif defined __BUILTIN_VA_ARG_INCR
00949 # include <alloca.h>
00950 # elif defined _AIX
00951 # define YYSTACK_ALLOC __alloca
00952 # elif defined _MSC_VER
00953 # include <malloc.h>
00954 # define alloca _alloca
00955 # else
00956 # define YYSTACK_ALLOC alloca
00957 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
00958 || defined __cplusplus || defined _MSC_VER)
00959 # include <stdlib.h>
00960 # ifndef EXIT_SUCCESS
00961 # define EXIT_SUCCESS 0
00962 # endif
00963 # endif
00964 # endif
00965 # endif
00966 # endif
00967
00968 # ifdef YYSTACK_ALLOC
00969
00970 # define YYSTACK_FREE(Ptr) do { ; } while (YYID (0))
00971 # ifndef YYSTACK_ALLOC_MAXIMUM
00972
00973
00974
00975
00976 # define YYSTACK_ALLOC_MAXIMUM 4032
00977 # endif
00978 # else
00979 # define YYSTACK_ALLOC YYMALLOC
00980 # define YYSTACK_FREE YYFREE
00981 # ifndef YYSTACK_ALLOC_MAXIMUM
00982 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
00983 # endif
00984 # if (defined __cplusplus && ! defined EXIT_SUCCESS \
00985 && ! ((defined YYMALLOC || defined malloc) \
00986 && (defined YYFREE || defined free)))
00987 # include <stdlib.h>
00988 # ifndef EXIT_SUCCESS
00989 # define EXIT_SUCCESS 0
00990 # endif
00991 # endif
00992 # ifndef YYMALLOC
00993 # define YYMALLOC malloc
00994 # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
00995 || defined __cplusplus || defined _MSC_VER)
00996 void *malloc (YYSIZE_T);
00997 # endif
00998 # endif
00999 # ifndef YYFREE
01000 # define YYFREE free
01001 # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
01002 || defined __cplusplus || defined _MSC_VER)
01003 void free (void *);
01004 # endif
01005 # endif
01006 # endif
01007 #endif
01008
01009
01010 #if (! defined yyoverflow \
01011 && (! defined __cplusplus \
01012 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
01013
01014
01015 union yyalloc
01016 {
01017 yytype_int16 yyss_alloc;
01018 YYSTYPE yyvs_alloc;
01019 };
01020
01021
01022 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
01023
01024
01025
01026 # define YYSTACK_BYTES(N) \
01027 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
01028 + YYSTACK_GAP_MAXIMUM)
01029
01030 # define YYCOPY_NEEDED 1
01031
01032
01033
01034
01035
01036
01037 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
01038 do \
01039 { \
01040 YYSIZE_T yynewbytes; \
01041 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
01042 Stack = &yyptr->Stack_alloc; \
01043 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
01044 yyptr += yynewbytes / sizeof (*yyptr); \
01045 } \
01046 while (YYID (0))
01047
01048 #endif
01049
01050 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
01051
01052
01053 # ifndef YYCOPY
01054 # if defined __GNUC__ && 1 < __GNUC__
01055 # define YYCOPY(To, From, Count) \
01056 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
01057 # else
01058 # define YYCOPY(To, From, Count) \
01059 do \
01060 { \
01061 YYSIZE_T yyi; \
01062 for (yyi = 0; yyi < (Count); yyi++) \
01063 (To)[yyi] = (From)[yyi]; \
01064 } \
01065 while (YYID (0))
01066 # endif
01067 # endif
01068 #endif
01069
01070
01071 #define YYFINAL 3
01072
01073 #define YYLAST 10410
01074
01075
01076 #define YYNTOKENS 148
01077
01078 #define YYNNTS 172
01079
01080 #define YYNRULES 565
01081
01082 #define YYNSTATES 975
01083
01084
01085 #define YYUNDEFTOK 2
01086 #define YYMAXUTOK 375
01087
01088 #define YYTRANSLATE(YYX) \
01089 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
01090
01091
01092 static const yytype_uint8 yytranslate[] =
01093 {
01094 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01095 147, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01096 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01097 2, 2, 146, 123, 2, 2, 2, 121, 116, 2,
01098 142, 143, 119, 117, 140, 118, 139, 120, 2, 2,
01099 2, 2, 2, 2, 2, 2, 2, 2, 111, 145,
01100 113, 109, 112, 110, 2, 2, 2, 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, 138, 2, 144, 115, 2, 141, 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, 136, 114, 137, 124, 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, 2, 2, 2, 2,
01117 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01118 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01119 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
01120 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
01121 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
01122 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
01123 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
01124 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
01125 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
01126 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
01127 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
01128 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
01129 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
01130 105, 106, 107, 108, 122, 125, 126, 127, 128, 129,
01131 130, 131, 132, 133, 134, 135
01132 };
01133
01134 #if YYDEBUG
01135
01136
01137 static const yytype_uint16 yyprhs[] =
01138 {
01139 0, 0, 3, 4, 7, 10, 12, 14, 18, 21,
01140 23, 24, 30, 35, 38, 40, 42, 46, 49, 50,
01141 55, 59, 63, 67, 70, 74, 78, 82, 86, 90,
01142 95, 99, 103, 107, 114, 120, 126, 132, 138, 142,
01143 146, 150, 154, 156, 158, 162, 166, 170, 173, 175,
01144 177, 179, 181, 183, 188, 193, 194, 200, 203, 207,
01145 212, 218, 223, 229, 232, 235, 238, 241, 244, 246,
01146 250, 252, 256, 258, 261, 265, 271, 274, 279, 282,
01147 287, 289, 293, 295, 299, 302, 306, 308, 312, 314,
01148 319, 323, 327, 331, 335, 338, 340, 342, 347, 351,
01149 355, 359, 363, 366, 368, 370, 372, 375, 377, 381,
01150 383, 385, 387, 389, 391, 393, 395, 397, 399, 401,
01151 402, 407, 409, 411, 413, 415, 417, 419, 421, 423,
01152 425, 427, 429, 431, 433, 435, 437, 439, 441, 443,
01153 445, 447, 449, 451, 453, 455, 457, 459, 461, 463,
01154 465, 467, 469, 471, 473, 475, 477, 479, 481, 483,
01155 485, 487, 489, 491, 493, 495, 497, 499, 501, 503,
01156 505, 507, 509, 511, 513, 515, 517, 519, 521, 523,
01157 525, 527, 529, 531, 533, 535, 537, 539, 541, 543,
01158 545, 547, 551, 557, 561, 567, 574, 580, 586, 592,
01159 598, 603, 607, 611, 615, 619, 623, 627, 631, 635,
01160 639, 644, 649, 652, 655, 659, 663, 667, 671, 675,
01161 679, 683, 687, 691, 695, 699, 703, 707, 710, 713,
01162 717, 721, 725, 729, 730, 735, 742, 744, 746, 748,
01163 751, 756, 759, 763, 765, 767, 769, 771, 773, 776,
01164 779, 784, 786, 787, 790, 793, 796, 798, 800, 802,
01165 805, 809, 814, 818, 823, 826, 828, 830, 832, 834,
01166 836, 838, 840, 842, 844, 845, 850, 851, 856, 860,
01167 864, 867, 871, 875, 877, 882, 886, 888, 889, 896,
01168 901, 905, 908, 910, 913, 916, 923, 930, 931, 932,
01169 940, 941, 942, 950, 956, 961, 962, 963, 973, 974,
01170 981, 982, 983, 992, 993, 999, 1000, 1007, 1008, 1009,
01171 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037,
01172 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1058,
01173 1060, 1062, 1064, 1070, 1072, 1075, 1077, 1079, 1081, 1085,
01174 1087, 1091, 1093, 1098, 1105, 1109, 1115, 1118, 1123, 1125,
01175 1129, 1136, 1145, 1150, 1157, 1162, 1165, 1172, 1175, 1180,
01176 1187, 1190, 1195, 1198, 1203, 1205, 1207, 1209, 1213, 1215,
01177 1220, 1222, 1225, 1227, 1231, 1233, 1235, 1236, 1237, 1242,
01178 1247, 1249, 1253, 1257, 1258, 1264, 1267, 1272, 1277, 1280,
01179 1285, 1290, 1294, 1298, 1302, 1305, 1307, 1312, 1313, 1319,
01180 1320, 1326, 1332, 1334, 1336, 1343, 1345, 1347, 1349, 1351,
01181 1354, 1356, 1359, 1361, 1363, 1365, 1367, 1369, 1371, 1373,
01182 1376, 1380, 1384, 1388, 1392, 1396, 1397, 1401, 1403, 1406,
01183 1410, 1414, 1415, 1419, 1420, 1423, 1424, 1427, 1428, 1431,
01184 1433, 1434, 1438, 1439, 1440, 1446, 1448, 1450, 1452, 1454,
01185 1457, 1459, 1461, 1463, 1465, 1469, 1471, 1473, 1476, 1479,
01186 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499,
01187 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1514, 1519, 1522,
01188 1526, 1529, 1536, 1545, 1550, 1557, 1562, 1569, 1572, 1577,
01189 1584, 1587, 1592, 1595, 1600, 1602, 1603, 1605, 1607, 1609,
01190 1611, 1613, 1615, 1617, 1621, 1623, 1627, 1631, 1635, 1637,
01191 1641, 1643, 1647, 1649, 1651, 1654, 1656, 1658, 1660, 1663,
01192 1666, 1668, 1670, 1671, 1676, 1678, 1681, 1683, 1687, 1691,
01193 1694, 1696, 1698, 1700, 1702, 1704, 1706, 1708, 1710, 1712,
01194 1714, 1716, 1718, 1719, 1721, 1722, 1724, 1727, 1730, 1731,
01195 1733, 1735, 1737, 1739, 1741, 1744
01196 };
01197
01198
01199 static const yytype_int16 yyrhs[] =
01200 {
01201 149, 0, -1, -1, 150, 151, -1, 152, 312, -1,
01202 319, -1, 153, -1, 152, 318, 153, -1, 1, 153,
01203 -1, 158, -1, -1, 47, 154, 136, 151, 137, -1,
01204 156, 255, 230, 258, -1, 157, 312, -1, 319, -1,
01205 158, -1, 157, 318, 158, -1, 1, 158, -1, -1,
01206 45, 179, 159, 179, -1, 45, 54, 54, -1, 45,
01207 54, 64, -1, 45, 54, 63, -1, 6, 180, -1,
01208 158, 40, 161, -1, 158, 41, 161, -1, 158, 42,
01209 161, -1, 158, 43, 161, -1, 158, 44, 158, -1,
01210 48, 136, 156, 137, -1, 174, 109, 162, -1, 167,
01211 109, 162, -1, 284, 87, 162, -1, 215, 138, 190,
01212 315, 87, 162, -1, 215, 139, 52, 87, 162, -1,
01213 215, 139, 56, 87, 162, -1, 215, 85, 56, 87,
01214 162, -1, 215, 85, 52, 87, 162, -1, 285, 87,
01215 162, -1, 174, 109, 197, -1, 167, 109, 186, -1,
01216 167, 109, 197, -1, 160, -1, 162, -1, 160, 37,
01217 160, -1, 160, 38, 160, -1, 39, 313, 160, -1,
01218 123, 162, -1, 184, -1, 160, -1, 166, -1, 163,
01219 -1, 248, -1, 248, 139, 309, 192, -1, 248, 85,
01220 309, 192, -1, -1, 94, 165, 236, 156, 137, -1,
01221 308, 192, -1, 308, 192, 164, -1, 215, 139, 309,
01222 192, -1, 215, 139, 309, 192, 164, -1, 215, 85,
01223 309, 192, -1, 215, 85, 309, 192, 164, -1, 32,
01224 192, -1, 31, 192, -1, 30, 191, -1, 21, 191,
01225 -1, 22, 191, -1, 169, -1, 89, 168, 314, -1,
01226 169, -1, 89, 168, 314, -1, 171, -1, 171, 170,
01227 -1, 171, 95, 173, -1, 171, 95, 173, 140, 172,
01228 -1, 171, 95, -1, 171, 95, 140, 172, -1, 95,
01229 173, -1, 95, 173, 140, 172, -1, 95, -1, 95,
01230 140, 172, -1, 173, -1, 89, 168, 314, -1, 170,
01231 140, -1, 171, 170, 140, -1, 170, -1, 172, 140,
01232 170, -1, 282, -1, 215, 138, 190, 315, -1, 215,
01233 139, 52, -1, 215, 85, 52, -1, 215, 139, 56,
01234 -1, 215, 85, 56, -1, 86, 56, -1, 285, -1,
01235 282, -1, 215, 138, 190, 315, -1, 215, 139, 52,
01236 -1, 215, 85, 52, -1, 215, 139, 56, -1, 215,
01237 85, 56, -1, 86, 56, -1, 285, -1, 52, -1,
01238 56, -1, 86, 175, -1, 175, -1, 215, 85, 175,
01239 -1, 52, -1, 56, -1, 53, -1, 182, -1, 183,
01240 -1, 177, -1, 278, -1, 178, -1, 280, -1, 179,
01241 -1, -1, 180, 140, 181, 179, -1, 114, -1, 115,
01242 -1, 116, -1, 69, -1, 70, -1, 71, -1, 77,
01243 -1, 78, -1, 112, -1, 73, -1, 113, -1, 74,
01244 -1, 72, -1, 83, -1, 84, -1, 117, -1, 118,
01245 -1, 119, -1, 95, -1, 120, -1, 121, -1, 68,
01246 -1, 123, -1, 124, -1, 66, -1, 67, -1, 81,
01247 -1, 82, -1, 141, -1, 49, -1, 50, -1, 51,
01248 -1, 47, -1, 48, -1, 45, -1, 37, -1, 7,
01249 -1, 21, -1, 16, -1, 3, -1, 5, -1, 46,
01250 -1, 26, -1, 15, -1, 14, -1, 10, -1, 9,
01251 -1, 36, -1, 20, -1, 25, -1, 4, -1, 22,
01252 -1, 34, -1, 39, -1, 38, -1, 23, -1, 8,
01253 -1, 24, -1, 30, -1, 33, -1, 32, -1, 13,
01254 -1, 35, -1, 6, -1, 17, -1, 31, -1, 11,
01255 -1, 12, -1, 18, -1, 19, -1, 174, 109, 184,
01256 -1, 174, 109, 184, 44, 184, -1, 284, 87, 184,
01257 -1, 284, 87, 184, 44, 184, -1, 215, 138, 190,
01258 315, 87, 184, -1, 215, 139, 52, 87, 184, -1,
01259 215, 139, 56, 87, 184, -1, 215, 85, 52, 87,
01260 184, -1, 215, 85, 56, 87, 184, -1, 86, 56,
01261 87, 184, -1, 285, 87, 184, -1, 184, 79, 184,
01262 -1, 184, 80, 184, -1, 184, 117, 184, -1, 184,
01263 118, 184, -1, 184, 119, 184, -1, 184, 120, 184,
01264 -1, 184, 121, 184, -1, 184, 68, 184, -1, 122,
01265 59, 68, 184, -1, 122, 60, 68, 184, -1, 66,
01266 184, -1, 67, 184, -1, 184, 114, 184, -1, 184,
01267 115, 184, -1, 184, 116, 184, -1, 184, 69, 184,
01268 -1, 184, 112, 184, -1, 184, 73, 184, -1, 184,
01269 113, 184, -1, 184, 74, 184, -1, 184, 70, 184,
01270 -1, 184, 71, 184, -1, 184, 72, 184, -1, 184,
01271 77, 184, -1, 184, 78, 184, -1, 123, 184, -1,
01272 124, 184, -1, 184, 83, 184, -1, 184, 84, 184,
01273 -1, 184, 75, 184, -1, 184, 76, 184, -1, -1,
01274 46, 313, 185, 184, -1, 184, 110, 184, 313, 111,
01275 184, -1, 198, -1, 184, -1, 319, -1, 196, 316,
01276 -1, 196, 140, 306, 316, -1, 306, 316, -1, 142,
01277 190, 314, -1, 319, -1, 188, -1, 319, -1, 191,
01278 -1, 166, -1, 196, 195, -1, 306, 195, -1, 196,
01279 140, 306, 195, -1, 194, -1, -1, 193, 191, -1,
01280 96, 186, -1, 140, 194, -1, 140, -1, 319, -1,
01281 186, -1, 95, 186, -1, 196, 140, 186, -1, 196,
01282 140, 95, 186, -1, 196, 140, 186, -1, 196, 140,
01283 95, 186, -1, 95, 186, -1, 259, -1, 260, -1,
01284 263, -1, 264, -1, 265, -1, 268, -1, 283, -1,
01285 285, -1, 53, -1, -1, 216, 199, 155, 226, -1,
01286 -1, 90, 160, 200, 314, -1, 89, 156, 143, -1,
01287 215, 85, 56, -1, 86, 56, -1, 92, 187, 144,
01288 -1, 93, 305, 137, -1, 30, -1, 31, 142, 191,
01289 314, -1, 31, 142, 314, -1, 31, -1, -1, 46,
01290 313, 142, 201, 160, 314, -1, 39, 142, 160, 314,
01291 -1, 39, 142, 314, -1, 308, 250, -1, 249, -1,
01292 249, 250, -1, 97, 241, -1, 217, 161, 227, 156,
01293 229, 226, -1, 218, 161, 227, 156, 230, 226, -1,
01294 -1, -1, 219, 202, 161, 228, 203, 156, 226, -1,
01295 -1, -1, 220, 204, 161, 228, 205, 156, 226, -1,
01296 221, 161, 312, 253, 226, -1, 221, 312, 253, 226,
01297 -1, -1, -1, 222, 231, 25, 206, 161, 228, 207,
01298 156, 226, -1, -1, 223, 176, 286, 208, 155, 226,
01299 -1, -1, -1, 223, 83, 160, 209, 317, 210, 155,
01300 226, -1, -1, 224, 176, 211, 155, 226, -1, -1,
01301 225, 177, 212, 288, 155, 226, -1, -1, -1, 225,
01302 303, 311, 213, 177, 214, 288, 155, 226, -1, 21,
01303 -1, 22, -1, 23, -1, 24, -1, 198, -1, 7,
01304 -1, 11, -1, 12, -1, 18, -1, 19, -1, 16,
01305 -1, 20, -1, 3, -1, 4, -1, 5, -1, 10,
01306 -1, 317, -1, 13, -1, 317, 13, -1, 317, -1,
01307 27, -1, 230, -1, 14, 161, 227, 156, 229, -1,
01308 319, -1, 15, 156, -1, 174, -1, 167, -1, 291,
01309 -1, 89, 234, 314, -1, 232, -1, 233, 140, 232,
01310 -1, 233, -1, 233, 140, 95, 291, -1, 233, 140,
01311 95, 291, 140, 233, -1, 233, 140, 95, -1, 233,
01312 140, 95, 140, 233, -1, 95, 291, -1, 95, 291,
01313 140, 233, -1, 95, -1, 95, 140, 233, -1, 293,
01314 140, 296, 140, 299, 302, -1, 293, 140, 296, 140,
01315 299, 140, 293, 302, -1, 293, 140, 296, 302, -1,
01316 293, 140, 296, 140, 293, 302, -1, 293, 140, 299,
01317 302, -1, 293, 140, -1, 293, 140, 299, 140, 293,
01318 302, -1, 293, 302, -1, 296, 140, 299, 302, -1,
01319 296, 140, 299, 140, 293, 302, -1, 296, 302, -1,
01320 296, 140, 293, 302, -1, 299, 302, -1, 299, 140,
01321 293, 302, -1, 301, -1, 319, -1, 237, -1, 114,
01322 238, 114, -1, 76, -1, 114, 235, 238, 114, -1,
01323 319, -1, 145, 239, -1, 240, -1, 239, 140, 240,
01324 -1, 52, -1, 290, -1, -1, -1, 242, 243, 244,
01325 245, -1, 142, 289, 238, 314, -1, 289, -1, 107,
01326 156, 137, -1, 29, 156, 10, -1, -1, 28, 247,
01327 236, 156, 10, -1, 166, 246, -1, 248, 139, 309,
01328 189, -1, 248, 85, 309, 189, -1, 308, 188, -1,
01329 215, 139, 309, 189, -1, 215, 85, 309, 188, -1,
01330 215, 85, 310, -1, 215, 139, 188, -1, 215, 85,
01331 188, -1, 32, 188, -1, 32, -1, 215, 138, 190,
01332 315, -1, -1, 136, 251, 236, 156, 137, -1, -1,
01333 26, 252, 236, 156, 10, -1, 17, 196, 227, 156,
01334 254, -1, 230, -1, 253, -1, 8, 256, 257, 227,
01335 156, 255, -1, 319, -1, 186, -1, 197, -1, 319,
01336 -1, 88, 174, -1, 319, -1, 9, 156, -1, 319,
01337 -1, 281, -1, 278, -1, 280, -1, 261, -1, 62,
01338 -1, 262, -1, 261, 262, -1, 99, 270, 106, -1,
01339 100, 271, 106, -1, 101, 272, 65, -1, 102, 146,
01340 106, -1, 102, 266, 106, -1, -1, 266, 267, 146,
01341 -1, 273, -1, 267, 273, -1, 103, 146, 106, -1,
01342 103, 269, 106, -1, -1, 269, 61, 146, -1, -1,
01343 270, 273, -1, -1, 271, 273, -1, -1, 272, 273,
01344 -1, 61, -1, -1, 105, 274, 277, -1, -1, -1,
01345 104, 275, 276, 156, 137, -1, 54, -1, 55, -1,
01346 57, -1, 285, -1, 98, 279, -1, 177, -1, 55,
01347 -1, 54, -1, 57, -1, 98, 271, 106, -1, 59,
01348 -1, 60, -1, 122, 59, -1, 122, 60, -1, 52,
01349 -1, 55, -1, 54, -1, 56, -1, 57, -1, 34,
01350 -1, 33, -1, 35, -1, 36, -1, 50, -1, 49,
01351 -1, 51, -1, 282, -1, 282, -1, 63, -1, 64,
01352 -1, 317, -1, -1, 113, 287, 161, 317, -1, 1,
01353 317, -1, 142, 289, 314, -1, 289, 317, -1, 293,
01354 140, 297, 140, 299, 302, -1, 293, 140, 297, 140,
01355 299, 140, 293, 302, -1, 293, 140, 297, 302, -1,
01356 293, 140, 297, 140, 293, 302, -1, 293, 140, 299,
01357 302, -1, 293, 140, 299, 140, 293, 302, -1, 293,
01358 302, -1, 297, 140, 299, 302, -1, 297, 140, 299,
01359 140, 293, 302, -1, 297, 302, -1, 297, 140, 293,
01360 302, -1, 299, 302, -1, 299, 140, 293, 302, -1,
01361 301, -1, -1, 56, -1, 55, -1, 54, -1, 57,
01362 -1, 290, -1, 52, -1, 291, -1, 89, 234, 314,
01363 -1, 292, -1, 293, 140, 292, -1, 52, 109, 186,
01364 -1, 52, 109, 215, -1, 295, -1, 296, 140, 295,
01365 -1, 294, -1, 297, 140, 294, -1, 119, -1, 95,
01366 -1, 298, 52, -1, 298, -1, 116, -1, 96, -1,
01367 300, 52, -1, 140, 301, -1, 319, -1, 283, -1,
01368 -1, 142, 304, 160, 314, -1, 319, -1, 306, 316,
01369 -1, 307, -1, 306, 140, 307, -1, 186, 88, 186,
01370 -1, 58, 186, -1, 52, -1, 56, -1, 53, -1,
01371 52, -1, 56, -1, 53, -1, 182, -1, 52, -1,
01372 53, -1, 182, -1, 139, -1, 85, -1, -1, 318,
01373 -1, -1, 147, -1, 313, 143, -1, 313, 144, -1,
01374 -1, 147, -1, 140, -1, 145, -1, 147, -1, 317,
01375 -1, 318, 145, -1, -1
01376 };
01377
01378
01379 static const yytype_uint16 yyrline[] =
01380 {
01381 0, 786, 786, 786, 817, 828, 837, 845, 853, 859,
01382 861, 860, 884, 917, 928, 937, 945, 953, 959, 959,
01383 967, 975, 986, 996, 1004, 1013, 1022, 1035, 1048, 1057,
01384 1069, 1078, 1088, 1117, 1138, 1155, 1172, 1183, 1200, 1210,
01385 1219, 1228, 1237, 1240, 1241, 1249, 1257, 1265, 1273, 1276,
01386 1288, 1289, 1292, 1293, 1302, 1314, 1313, 1335, 1344, 1356,
01387 1365, 1377, 1386, 1398, 1407, 1416, 1424, 1432, 1442, 1443,
01388 1453, 1454, 1464, 1472, 1480, 1488, 1497, 1505, 1514, 1522,
01389 1531, 1539, 1550, 1551, 1561, 1569, 1579, 1587, 1597, 1601,
01390 1609, 1617, 1625, 1633, 1645, 1655, 1667, 1676, 1684, 1692,
01391 1700, 1708, 1721, 1734, 1745, 1753, 1756, 1764, 1772, 1782,
01392 1783, 1784, 1785, 1790, 1801, 1802, 1805, 1813, 1816, 1824,
01393 1824, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842,
01394 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852,
01395 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862,
01396 1865, 1865, 1865, 1866, 1866, 1867, 1867, 1867, 1868, 1868,
01397 1868, 1868, 1869, 1869, 1869, 1869, 1870, 1870, 1870, 1871,
01398 1871, 1871, 1871, 1872, 1872, 1872, 1872, 1873, 1873, 1873,
01399 1873, 1874, 1874, 1874, 1874, 1875, 1875, 1875, 1875, 1876,
01400 1876, 1879, 1888, 1898, 1927, 1958, 1984, 2001, 2018, 2035,
01401 2046, 2057, 2068, 2082, 2096, 2104, 2112, 2120, 2128, 2136,
01402 2144, 2153, 2162, 2170, 2178, 2186, 2194, 2202, 2210, 2218,
01403 2226, 2234, 2242, 2250, 2258, 2266, 2277, 2285, 2293, 2301,
01404 2309, 2317, 2325, 2333, 2333, 2343, 2353, 2359, 2371, 2372,
01405 2376, 2384, 2394, 2404, 2405, 2408, 2409, 2412, 2421, 2429,
01406 2439, 2448, 2457, 2457, 2469, 2479, 2483, 2487, 2493, 2501,
01407 2509, 2523, 2539, 2553, 2568, 2578, 2579, 2580, 2581, 2582,
01408 2583, 2584, 2585, 2586, 2595, 2594, 2619, 2619, 2628, 2636,
01409 2644, 2652, 2665, 2673, 2681, 2689, 2697, 2705, 2705, 2715,
01410 2723, 2731, 2742, 2743, 2754, 2758, 2770, 2782, 2782, 2782,
01411 2793, 2793, 2793, 2804, 2815, 2824, 2826, 2823, 2890, 2889,
01412 2911, 2916, 2910, 2935, 2934, 2956, 2955, 2978, 2979, 2978,
01413 2999, 3007, 3015, 3023, 3033, 3045, 3051, 3057, 3063, 3069,
01414 3075, 3081, 3087, 3093, 3099, 3109, 3115, 3120, 3121, 3128,
01415 3133, 3136, 3137, 3150, 3151, 3161, 3162, 3165, 3173, 3183,
01416 3191, 3201, 3209, 3218, 3227, 3235, 3243, 3252, 3264, 3272,
01417 3282, 3290, 3298, 3306, 3314, 3322, 3331, 3339, 3347, 3355,
01418 3363, 3371, 3379, 3387, 3395, 3405, 3406, 3412, 3421, 3430,
01419 3441, 3442, 3452, 3459, 3468, 3476, 3482, 3485, 3482, 3503,
01420 3511, 3521, 3525, 3532, 3531, 3552, 3568, 3577, 3588, 3597,
01421 3607, 3617, 3625, 3636, 3647, 3655, 3663, 3678, 3677, 3697,
01422 3696, 3717, 3729, 3730, 3733, 3752, 3755, 3763, 3771, 3774,
01423 3778, 3781, 3789, 3792, 3793, 3801, 3804, 3821, 3822, 3823,
01424 3833, 3843, 3870, 3935, 3944, 3955, 3962, 3972, 3980, 3990,
01425 3999, 4010, 4017, 4028, 4035, 4046, 4053, 4064, 4071, 4100,
01426 4102, 4101, 4118, 4124, 4117, 4143, 4151, 4159, 4167, 4170,
01427 4181, 4182, 4183, 4184, 4187, 4217, 4218, 4219, 4227, 4237,
01428 4238, 4239, 4240, 4241, 4242, 4243, 4244, 4245, 4246, 4247,
01429 4248, 4251, 4261, 4271, 4272, 4275, 4284, 4283, 4291, 4303,
01430 4313, 4319, 4327, 4335, 4343, 4351, 4359, 4367, 4375, 4383,
01431 4391, 4399, 4407, 4415, 4423, 4432, 4441, 4450, 4459, 4468,
01432 4479, 4480, 4487, 4496, 4515, 4522, 4535, 4547, 4559, 4567,
01433 4583, 4591, 4607, 4608, 4611, 4624, 4635, 4636, 4639, 4656,
01434 4660, 4670, 4680, 4680, 4709, 4710, 4720, 4727, 4737, 4745,
01435 4755, 4756, 4757, 4760, 4761, 4762, 4763, 4766, 4767, 4768,
01436 4771, 4776, 4783, 4784, 4787, 4788, 4791, 4794, 4797, 4798,
01437 4799, 4802, 4803, 4806, 4807, 4811
01438 };
01439 #endif
01440
01441 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
01442
01443
01444 static const char *const yytname[] =
01445 {
01446 "$end", "error", "$undefined", "keyword_class", "keyword_module",
01447 "keyword_def", "keyword_undef", "keyword_begin", "keyword_rescue",
01448 "keyword_ensure", "keyword_end", "keyword_if", "keyword_unless",
01449 "keyword_then", "keyword_elsif", "keyword_else", "keyword_case",
01450 "keyword_when", "keyword_while", "keyword_until", "keyword_for",
01451 "keyword_break", "keyword_next", "keyword_redo", "keyword_retry",
01452 "keyword_in", "keyword_do", "keyword_do_cond", "keyword_do_block",
01453 "keyword_do_LAMBDA", "keyword_return", "keyword_yield", "keyword_super",
01454 "keyword_self", "keyword_nil", "keyword_true", "keyword_false",
01455 "keyword_and", "keyword_or", "keyword_not", "modifier_if",
01456 "modifier_unless", "modifier_while", "modifier_until", "modifier_rescue",
01457 "keyword_alias", "keyword_defined", "keyword_BEGIN", "keyword_END",
01458 "keyword__LINE__", "keyword__FILE__", "keyword__ENCODING__",
01459 "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tCVAR", "tLABEL",
01460 "tINTEGER", "tFLOAT", "tSTRING_CONTENT", "tCHAR", "tNTH_REF",
01461 "tBACK_REF", "tREGEXP_END", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ",
01462 "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH",
01463 "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2",
01464 "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN_ARG", "tRPAREN",
01465 "tLBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tAMPER", "tLAMBDA",
01466 "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG",
01467 "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG",
01468 "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'",
01469 "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "idNULL",
01470 "idRespond_to", "idIFUNC", "idCFUNC", "id_core_set_method_alias",
01471 "id_core_set_variable_alias", "id_core_undef_method",
01472 "id_core_define_method", "id_core_define_singleton_method",
01473 "id_core_set_postexe", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'", "','",
01474 "'`'", "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program",
01475 "$@1", "top_compstmt", "top_stmts", "top_stmt", "$@2", "bodystmt",
01476 "compstmt", "stmts", "stmt", "$@3", "expr", "expr_value", "command_call",
01477 "block_command", "cmd_brace_block", "@4", "command", "mlhs",
01478 "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head", "mlhs_post",
01479 "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", "fitem",
01480 "undef_list", "$@5", "op", "reswords", "arg", "$@6", "arg_value",
01481 "aref_args", "paren_args", "opt_paren_args", "opt_call_args",
01482 "call_args", "command_args", "@7", "block_arg", "opt_block_arg", "args",
01483 "mrhs", "primary", "@8", "$@9", "$@10", "$@11", "$@12", "$@13", "$@14",
01484 "$@15", "$@16", "@17", "@18", "@19", "@20", "@21", "$@22", "$@23",
01485 "primary_value", "k_begin", "k_if", "k_unless", "k_while", "k_until",
01486 "k_case", "k_for", "k_class", "k_module", "k_def", "k_end", "then", "do",
01487 "if_tail", "opt_else", "for_var", "f_marg", "f_marg_list", "f_margs",
01488 "block_param", "opt_block_param", "block_param_def", "opt_bv_decl",
01489 "bv_decls", "bvar", "lambda", "@24", "@25", "f_larglist", "lambda_body",
01490 "do_block", "@26", "block_call", "method_call", "brace_block", "@27",
01491 "@28", "case_body", "cases", "opt_rescue", "exc_list", "exc_var",
01492 "opt_ensure", "literal", "strings", "string", "string1", "xstring",
01493 "regexp", "words", "word_list", "word", "qwords", "qword_list",
01494 "string_contents", "xstring_contents", "regexp_contents",
01495 "string_content", "@29", "@30", "@31", "string_dvar", "symbol", "sym",
01496 "dsym", "numeric", "variable", "var_ref", "var_lhs", "backref",
01497 "superclass", "$@32", "f_arglist", "f_args", "f_bad_arg", "f_norm_arg",
01498 "f_arg_item", "f_arg", "f_opt", "f_block_opt", "f_block_optarg",
01499 "f_optarg", "restarg_mark", "f_rest_arg", "blkarg_mark", "f_block_arg",
01500 "opt_f_block_arg", "singleton", "$@33", "assoc_list", "assocs", "assoc",
01501 "operation", "operation2", "operation3", "dot_or_colon", "opt_terms",
01502 "opt_nl", "rparen", "rbracket", "trailer", "term", "terms", "none", 0
01503 };
01504 #endif
01505
01506 # ifdef YYPRINT
01507
01508
01509 static const yytype_uint16 yytoknum[] =
01510 {
01511 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
01512 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
01513 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
01514 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
01515 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
01516 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
01517 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
01518 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
01519 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
01520 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
01521 355, 356, 357, 358, 359, 360, 361, 362, 363, 61,
01522 63, 58, 62, 60, 124, 94, 38, 43, 45, 42,
01523 47, 37, 364, 33, 126, 365, 366, 367, 368, 369,
01524 370, 371, 372, 373, 374, 375, 123, 125, 91, 46,
01525 44, 96, 40, 41, 93, 59, 32, 10
01526 };
01527 # endif
01528
01529
01530 static const yytype_uint16 yyr1[] =
01531 {
01532 0, 148, 150, 149, 151, 152, 152, 152, 152, 153,
01533 154, 153, 155, 156, 157, 157, 157, 157, 159, 158,
01534 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
01535 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
01536 158, 158, 158, 160, 160, 160, 160, 160, 160, 161,
01537 162, 162, 163, 163, 163, 165, 164, 166, 166, 166,
01538 166, 166, 166, 166, 166, 166, 166, 166, 167, 167,
01539 168, 168, 169, 169, 169, 169, 169, 169, 169, 169,
01540 169, 169, 170, 170, 171, 171, 172, 172, 173, 173,
01541 173, 173, 173, 173, 173, 173, 174, 174, 174, 174,
01542 174, 174, 174, 174, 175, 175, 176, 176, 176, 177,
01543 177, 177, 177, 177, 178, 178, 179, 179, 180, 181,
01544 180, 182, 182, 182, 182, 182, 182, 182, 182, 182,
01545 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
01546 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
01547 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
01548 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
01549 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
01550 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
01551 183, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01552 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01553 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01554 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01555 184, 184, 184, 185, 184, 184, 184, 186, 187, 187,
01556 187, 187, 188, 189, 189, 190, 190, 191, 191, 191,
01557 191, 191, 193, 192, 194, 195, 195, 195, 196, 196,
01558 196, 196, 197, 197, 197, 198, 198, 198, 198, 198,
01559 198, 198, 198, 198, 199, 198, 200, 198, 198, 198,
01560 198, 198, 198, 198, 198, 198, 198, 201, 198, 198,
01561 198, 198, 198, 198, 198, 198, 198, 202, 203, 198,
01562 204, 205, 198, 198, 198, 206, 207, 198, 208, 198,
01563 209, 210, 198, 211, 198, 212, 198, 213, 214, 198,
01564 198, 198, 198, 198, 215, 216, 217, 218, 219, 220,
01565 221, 222, 223, 224, 225, 226, 227, 227, 227, 228,
01566 228, 229, 229, 230, 230, 231, 231, 232, 232, 233,
01567 233, 234, 234, 234, 234, 234, 234, 234, 234, 234,
01568 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
01569 235, 235, 235, 235, 235, 236, 236, 237, 237, 237,
01570 238, 238, 239, 239, 240, 240, 242, 243, 241, 244,
01571 244, 245, 245, 247, 246, 248, 248, 248, 249, 249,
01572 249, 249, 249, 249, 249, 249, 249, 251, 250, 252,
01573 250, 253, 254, 254, 255, 255, 256, 256, 256, 257,
01574 257, 258, 258, 259, 259, 259, 260, 261, 261, 261,
01575 262, 263, 264, 265, 265, 266, 266, 267, 267, 268,
01576 268, 269, 269, 270, 270, 271, 271, 272, 272, 273,
01577 274, 273, 275, 276, 273, 277, 277, 277, 277, 278,
01578 279, 279, 279, 279, 280, 281, 281, 281, 281, 282,
01579 282, 282, 282, 282, 282, 282, 282, 282, 282, 282,
01580 282, 283, 284, 285, 285, 286, 287, 286, 286, 288,
01581 288, 289, 289, 289, 289, 289, 289, 289, 289, 289,
01582 289, 289, 289, 289, 289, 289, 290, 290, 290, 290,
01583 291, 291, 292, 292, 293, 293, 294, 295, 296, 296,
01584 297, 297, 298, 298, 299, 299, 300, 300, 301, 302,
01585 302, 303, 304, 303, 305, 305, 306, 306, 307, 307,
01586 308, 308, 308, 309, 309, 309, 309, 310, 310, 310,
01587 311, 311, 312, 312, 313, 313, 314, 315, 316, 316,
01588 316, 317, 317, 318, 318, 319
01589 };
01590
01591
01592 static const yytype_uint8 yyr2[] =
01593 {
01594 0, 2, 0, 2, 2, 1, 1, 3, 2, 1,
01595 0, 5, 4, 2, 1, 1, 3, 2, 0, 4,
01596 3, 3, 3, 2, 3, 3, 3, 3, 3, 4,
01597 3, 3, 3, 6, 5, 5, 5, 5, 3, 3,
01598 3, 3, 1, 1, 3, 3, 3, 2, 1, 1,
01599 1, 1, 1, 4, 4, 0, 5, 2, 3, 4,
01600 5, 4, 5, 2, 2, 2, 2, 2, 1, 3,
01601 1, 3, 1, 2, 3, 5, 2, 4, 2, 4,
01602 1, 3, 1, 3, 2, 3, 1, 3, 1, 4,
01603 3, 3, 3, 3, 2, 1, 1, 4, 3, 3,
01604 3, 3, 2, 1, 1, 1, 2, 1, 3, 1,
01605 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
01606 4, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01611 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01612 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01613 1, 3, 5, 3, 5, 6, 5, 5, 5, 5,
01614 4, 3, 3, 3, 3, 3, 3, 3, 3, 3,
01615 4, 4, 2, 2, 3, 3, 3, 3, 3, 3,
01616 3, 3, 3, 3, 3, 3, 3, 2, 2, 3,
01617 3, 3, 3, 0, 4, 6, 1, 1, 1, 2,
01618 4, 2, 3, 1, 1, 1, 1, 1, 2, 2,
01619 4, 1, 0, 2, 2, 2, 1, 1, 1, 2,
01620 3, 4, 3, 4, 2, 1, 1, 1, 1, 1,
01621 1, 1, 1, 1, 0, 4, 0, 4, 3, 3,
01622 2, 3, 3, 1, 4, 3, 1, 0, 6, 4,
01623 3, 2, 1, 2, 2, 6, 6, 0, 0, 7,
01624 0, 0, 7, 5, 4, 0, 0, 9, 0, 6,
01625 0, 0, 8, 0, 5, 0, 6, 0, 0, 9,
01626 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01627 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
01628 1, 1, 5, 1, 2, 1, 1, 1, 3, 1,
01629 3, 1, 4, 6, 3, 5, 2, 4, 1, 3,
01630 6, 8, 4, 6, 4, 2, 6, 2, 4, 6,
01631 2, 4, 2, 4, 1, 1, 1, 3, 1, 4,
01632 1, 2, 1, 3, 1, 1, 0, 0, 4, 4,
01633 1, 3, 3, 0, 5, 2, 4, 4, 2, 4,
01634 4, 3, 3, 3, 2, 1, 4, 0, 5, 0,
01635 5, 5, 1, 1, 6, 1, 1, 1, 1, 2,
01636 1, 2, 1, 1, 1, 1, 1, 1, 1, 2,
01637 3, 3, 3, 3, 3, 0, 3, 1, 2, 3,
01638 3, 0, 3, 0, 2, 0, 2, 0, 2, 1,
01639 0, 3, 0, 0, 5, 1, 1, 1, 1, 2,
01640 1, 1, 1, 1, 3, 1, 1, 2, 2, 1,
01641 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01642 1, 1, 1, 1, 1, 1, 0, 4, 2, 3,
01643 2, 6, 8, 4, 6, 4, 6, 2, 4, 6,
01644 2, 4, 2, 4, 1, 0, 1, 1, 1, 1,
01645 1, 1, 1, 3, 1, 3, 3, 3, 1, 3,
01646 1, 3, 1, 1, 2, 1, 1, 1, 2, 2,
01647 1, 1, 0, 4, 1, 2, 1, 3, 3, 2,
01648 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01649 1, 1, 0, 1, 0, 1, 2, 2, 0, 1,
01650 1, 1, 1, 1, 2, 0
01651 };
01652
01653
01654
01655
01656 static const yytype_uint16 yydefact[] =
01657 {
01658 2, 0, 0, 1, 0, 332, 333, 334, 0, 325,
01659 326, 327, 330, 328, 329, 331, 320, 321, 322, 323,
01660 283, 252, 252, 475, 474, 476, 477, 554, 0, 554,
01661 10, 0, 479, 478, 480, 469, 542, 471, 470, 472,
01662 473, 465, 466, 427, 483, 484, 0, 0, 0, 0,
01663 0, 565, 565, 80, 386, 445, 443, 445, 447, 435,
01664 441, 0, 0, 0, 3, 552, 6, 9, 42, 43,
01665 51, 50, 0, 68, 0, 72, 82, 0, 48, 236,
01666 0, 274, 0, 0, 297, 300, 552, 0, 0, 0,
01667 0, 52, 292, 265, 266, 426, 428, 267, 268, 269,
01668 270, 424, 425, 423, 481, 271, 0, 272, 252, 5,
01669 8, 160, 171, 161, 184, 157, 177, 167, 166, 187,
01670 188, 182, 165, 164, 159, 185, 189, 190, 169, 158,
01671 172, 176, 178, 170, 163, 179, 186, 181, 180, 173,
01672 183, 168, 156, 175, 174, 155, 162, 153, 154, 150,
01673 151, 152, 109, 111, 110, 145, 146, 142, 124, 125,
01674 126, 133, 130, 132, 127, 128, 147, 148, 134, 135,
01675 139, 129, 131, 121, 122, 123, 136, 137, 138, 140,
01676 141, 143, 144, 149, 114, 116, 118, 23, 112, 113,
01677 115, 117, 0, 0, 0, 0, 0, 0, 0, 247,
01678 0, 237, 258, 66, 251, 565, 0, 481, 0, 272,
01679 565, 536, 67, 65, 554, 64, 0, 565, 404, 63,
01680 554, 555, 0, 0, 18, 233, 0, 0, 320, 321,
01681 283, 286, 405, 212, 0, 0, 213, 280, 0, 0,
01682 0, 552, 15, 554, 70, 14, 276, 0, 558, 558,
01683 238, 0, 0, 558, 534, 554, 0, 0, 0, 78,
01684 324, 0, 88, 95, 294, 387, 462, 461, 463, 460,
01685 0, 459, 0, 0, 0, 0, 0, 0, 0, 467,
01686 468, 47, 227, 228, 561, 562, 4, 563, 553, 0,
01687 0, 0, 0, 0, 0, 0, 393, 395, 0, 84,
01688 0, 76, 73, 0, 0, 0, 0, 0, 0, 0,
01689 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
01690 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
01691 0, 565, 0, 0, 49, 0, 0, 0, 0, 552,
01692 0, 553, 0, 346, 345, 0, 0, 481, 272, 104,
01693 105, 0, 0, 107, 0, 0, 481, 272, 313, 180,
01694 173, 183, 168, 150, 151, 152, 109, 110, 532, 315,
01695 531, 0, 0, 0, 409, 407, 293, 429, 0, 0,
01696 398, 57, 291, 119, 539, 280, 259, 254, 0, 0,
01697 256, 248, 257, 0, 565, 0, 0, 0, 256, 249,
01698 554, 0, 285, 253, 554, 246, 245, 554, 290, 46,
01699 20, 22, 21, 0, 287, 0, 0, 0, 0, 0,
01700 0, 17, 554, 278, 13, 553, 69, 554, 281, 560,
01701 559, 239, 560, 241, 282, 535, 0, 94, 467, 468,
01702 86, 81, 0, 0, 565, 0, 505, 449, 452, 450,
01703 464, 446, 430, 444, 431, 432, 448, 433, 434, 0,
01704 437, 439, 0, 440, 0, 0, 564, 7, 24, 25,
01705 26, 27, 28, 44, 45, 565, 0, 31, 40, 0,
01706 41, 554, 0, 74, 85, 30, 191, 258, 39, 209,
01707 217, 222, 223, 224, 219, 221, 231, 232, 225, 226,
01708 202, 203, 229, 230, 554, 218, 220, 214, 215, 216,
01709 204, 205, 206, 207, 208, 543, 548, 544, 549, 403,
01710 252, 401, 554, 543, 545, 544, 546, 402, 252, 0,
01711 565, 337, 0, 336, 0, 0, 0, 0, 0, 0,
01712 280, 0, 565, 0, 305, 310, 104, 105, 106, 0,
01713 486, 308, 485, 0, 565, 0, 0, 0, 505, 551,
01714 550, 317, 543, 544, 252, 252, 565, 565, 32, 193,
01715 38, 201, 55, 58, 0, 191, 538, 0, 260, 255,
01716 565, 547, 544, 554, 543, 544, 537, 284, 556, 242,
01717 289, 19, 0, 234, 0, 29, 0, 565, 200, 71,
01718 16, 277, 558, 0, 79, 91, 93, 554, 543, 544,
01719 511, 508, 507, 506, 509, 0, 523, 527, 526, 522,
01720 505, 0, 390, 510, 512, 514, 565, 520, 565, 525,
01721 565, 0, 504, 453, 0, 436, 438, 442, 210, 211,
01722 378, 565, 0, 376, 375, 264, 0, 83, 77, 0,
01723 0, 0, 0, 0, 400, 61, 0, 406, 0, 0,
01724 244, 399, 59, 243, 335, 275, 565, 565, 415, 565,
01725 338, 565, 340, 298, 339, 301, 0, 0, 304, 547,
01726 279, 554, 543, 544, 0, 0, 488, 0, 0, 104,
01727 105, 108, 554, 0, 554, 505, 0, 0, 0, 397,
01728 54, 396, 53, 0, 0, 0, 565, 120, 261, 250,
01729 0, 0, 406, 0, 0, 554, 11, 240, 87, 89,
01730 0, 511, 0, 358, 349, 351, 554, 347, 565, 0,
01731 0, 388, 0, 497, 530, 0, 500, 524, 0, 502,
01732 528, 0, 455, 456, 457, 451, 458, 511, 0, 565,
01733 0, 565, 518, 565, 565, 374, 380, 0, 0, 262,
01734 75, 192, 0, 37, 198, 36, 199, 62, 557, 0,
01735 34, 196, 35, 197, 60, 416, 417, 565, 418, 0,
01736 565, 343, 0, 0, 341, 0, 0, 0, 303, 0,
01737 0, 406, 0, 311, 0, 0, 406, 314, 533, 554,
01738 0, 490, 318, 0, 0, 194, 0, 0, 288, 516,
01739 554, 0, 356, 0, 513, 554, 0, 0, 515, 565,
01740 565, 529, 565, 521, 565, 565, 0, 0, 384, 381,
01741 382, 385, 0, 377, 365, 367, 0, 370, 0, 372,
01742 394, 263, 235, 33, 195, 0, 0, 420, 344, 0,
01743 12, 422, 0, 295, 296, 0, 0, 260, 565, 306,
01744 0, 487, 309, 489, 316, 505, 410, 408, 0, 348,
01745 359, 0, 354, 350, 389, 392, 391, 0, 493, 0,
01746 495, 0, 501, 0, 498, 503, 454, 0, 517, 0,
01747 379, 565, 565, 565, 519, 565, 565, 0, 419, 0,
01748 96, 103, 0, 421, 0, 299, 302, 412, 413, 411,
01749 0, 0, 0, 56, 0, 357, 0, 352, 565, 565,
01750 565, 565, 280, 0, 383, 0, 362, 0, 364, 371,
01751 0, 368, 373, 102, 0, 565, 0, 565, 565, 0,
01752 312, 0, 355, 0, 494, 0, 491, 496, 499, 547,
01753 279, 565, 565, 565, 565, 547, 101, 554, 543, 544,
01754 414, 342, 307, 319, 353, 565, 363, 0, 360, 366,
01755 369, 406, 492, 565, 361
01756 };
01757
01758
01759 static const yytype_int16 yydefgoto[] =
01760 {
01761 -1, 1, 2, 64, 65, 66, 226, 529, 530, 241,
01762 242, 413, 68, 335, 69, 70, 573, 706, 71, 72,
01763 243, 73, 74, 75, 441, 76, 200, 353, 354, 184,
01764 185, 186, 187, 574, 526, 189, 78, 415, 202, 247,
01765 519, 661, 404, 405, 215, 216, 204, 391, 205, 480,
01766 79, 333, 427, 592, 337, 786, 338, 787, 684, 910,
01767 688, 685, 860, 556, 558, 698, 865, 234, 81, 82,
01768 83, 84, 85, 86, 87, 88, 89, 90, 665, 532,
01769 673, 783, 784, 346, 724, 725, 726, 749, 642, 643,
01770 750, 829, 830, 264, 265, 446, 621, 731, 297, 475,
01771 91, 92, 382, 567, 566, 539, 909, 667, 777, 846,
01772 850, 93, 94, 95, 96, 97, 98, 99, 276, 459,
01773 100, 278, 272, 270, 274, 451, 634, 633, 741, 745,
01774 101, 271, 102, 103, 207, 105, 208, 209, 551, 687,
01775 696, 697, 623, 624, 625, 626, 627, 752, 753, 628,
01776 629, 630, 631, 821, 733, 371, 557, 252, 210, 211,
01777 108, 596, 521, 561, 286, 401, 402, 657, 431, 533,
01778 341, 245
01779 };
01780
01781
01782
01783 #define YYPACT_NINF -778
01784 static const yytype_int16 yypact[] =
01785 {
01786 -778, 133, 2394, -778, 7010, -778, -778, -778, 6523, -778,
01787 -778, -778, -778, -778, -778, -778, 7228, 7228, -778, -778,
01788 7228, 3145, 2722, -778, -778, -778, -778, 164, 6384, -11,
01789 -778, 69, -778, -778, -778, 5623, 2863, -778, -778, 5750,
01790 -778, -778, -778, -778, -778, -778, 8427, 8427, 96, 4342,
01791 8536, 7446, 7773, 6786, -778, 6245, -778, -778, -778, 74,
01792 93, 122, 8645, 8427, -778, 187, -778, 698, 288, -778,
01793 -778, 230, 167, -778, 180, 8754, -778, 234, 2846, 273,
01794 310, -778, 8536, 8536, -778, -778, 4986, 8859, 8964, 9069,
01795 5496, 16, 60, -778, -778, 174, -778, -778, -778, -778,
01796 -778, -778, -778, -778, 201, -778, 258, 282, 206, -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, -778, -778, -778,
01802 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01803 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01804 -778, -778, -778, -778, -778, -778, -778, 212, -778, -778,
01805 -778, -778, 215, 8427, 303, 4472, 8427, 8427, 8427, -778,
01806 257, 2846, 285, -778, -778, 281, 343, 38, 337, 263,
01807 290, -778, -778, -778, 4877, -778, 7228, 7228, -778, -778,
01808 5116, -778, 8536, 599, -778, 296, 315, 4602, -778, -778,
01809 -778, 311, 328, -778, 347, 206, 396, 446, 7119, 4342,
01810 329, 187, 698, -11, 370, -778, 288, 339, -30, 30,
01811 -778, 285, 356, 30, -778, -11, 442, 375, 9174, 390,
01812 -778, 351, 373, 383, -778, -778, -778, -778, -778, -778,
01813 515, -778, 552, 587, 620, 397, 607, 407, 34, 473,
01814 474, -778, -778, -778, -778, -778, -778, -778, 5225, 8536,
01815 8536, 8536, 8536, 7119, 8536, 8536, -778, -778, 7882, -778,
01816 4342, 6898, 413, 7882, 8427, 8427, 8427, 8427, 8427, 8427,
01817 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427,
01818 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427,
01819 1712, 7228, 2060, 3517, 288, 80, 80, 8536, 8536, 187,
01820 534, 416, 516, -778, -778, 386, 568, 50, 72, 301,
01821 321, 8536, 363, -778, 66, 393, -778, -778, -778, 36,
01822 41, 103, 224, 259, 266, 322, 348, 369, -778, -778,
01823 -778, 377, 10211, 10211, -778, -778, -778, -778, 8645, 8645,
01824 -778, 483, -778, -778, -778, 268, -778, -778, 8427, 8427,
01825 7337, -778, -778, 2216, 7228, 9441, 8427, 8427, 7555, -778,
01826 -11, 454, -778, -778, -11, -778, -778, 70, -778, -778,
01827 -778, -778, -778, 6523, -778, 8427, 3937, 463, 2216, 9441,
01828 8427, 698, -11, -778, -778, 5353, 462, -11, -778, 7664,
01829 -778, -778, 7773, -778, -778, -778, 296, 411, -778, -778,
01830 -778, 467, 9174, 9518, 7228, 9595, 1033, -778, -778, -778,
01831 -778, -778, -778, -778, -778, -778, -778, -778, -778, 39,
01832 -778, -778, 472, -778, 8427, 8427, -778, -778, -778, -778,
01833 -778, -778, -778, -778, -778, 28, 8427, -778, 468, 487,
01834 -778, -11, 9174, 496, -778, -778, 1576, -778, -778, 396,
01835 1512, 1512, 1512, 1512, 1223, 1223, 1879, 2079, 1512, 1512,
01836 2146, 2146, 582, 582, 2705, 1223, 1223, 1098, 1098, 790,
01837 514, 514, 396, 396, 396, 3286, 5991, 3372, 6105, -778,
01838 328, -778, -11, 448, -778, 451, -778, -778, 3004, 639,
01839 644, -778, 3662, 646, 4082, 42, 42, 534, 7991, 639,
01840 109, 9672, 7228, 9749, -778, 288, -778, 411, -778, 187,
01841 -778, -778, -778, 9826, 7228, 9903, 3517, 8536, 1115, -778,
01842 -778, -778, -778, -778, 1235, 1235, 28, 28, -778, 10270,
01843 -778, 2846, -778, -778, 6523, 10289, -778, 8427, 285, -778,
01844 290, 5877, 2581, -11, 410, 529, -778, -778, -778, -778,
01845 -778, -778, 8536, 2846, 535, -778, 328, 328, 2846, 20,
01846 698, -778, 30, 9174, 467, 338, 271, -11, 228, 261,
01847 557, -778, -778, -778, -778, 666, -778, -778, -778, -778,
01848 923, 43, -778, -778, -778, -778, 543, -778, 544, 623,
01849 547, 642, -778, -778, 722, -778, -778, -778, 396, 396,
01850 -778, 904, 4747, -778, -778, 555, 8100, -778, 467, 9174,
01851 8427, 598, 8645, 8645, -778, 483, 570, 538, 8645, 8645,
01852 -778, -778, 483, -778, -778, -778, 8209, 701, -778, 441,
01853 -778, 701, -778, -778, -778, -778, 639, 31, -778, 110,
01854 132, -11, 126, 144, 8536, 187, -778, 8536, 3517, 338,
01855 271, -778, -11, 639, 70, 923, 3517, 187, 6662, -778,
01856 -778, -778, -778, 4747, 4602, 8427, 28, -778, -778, -778,
01857 8427, 8427, 536, 8427, 8427, 70, -778, -778, -778, 251,
01858 8427, -778, 666, 450, -778, 579, -11, -778, 583, 4747,
01859 4602, -778, 923, -778, -778, 923, -778, -778, 779, -778,
01860 -778, 4602, -778, -778, -778, -778, -778, 625, 809, 583,
01861 615, 595, -778, 604, 605, -778, -778, 740, 8427, 619,
01862 467, 2846, 8427, -778, 2846, -778, 2846, -778, -778, 8645,
01863 -778, 2846, -778, 2846, -778, 468, -778, 675, -778, 4212,
01864 757, -778, 8536, 639, -778, 639, 4747, 4747, -778, 8318,
01865 3807, 147, 42, -778, 187, 639, -778, -778, -778, -11,
01866 639, -778, -778, 759, 630, 2846, 4602, 8427, -778, -778,
01867 -11, 845, 632, 826, -778, -11, 760, 637, -778, 640,
01868 643, -778, 647, -778, 651, 647, 656, 9279, -778, 657,
01869 -778, -778, 682, -778, 1199, -778, 1199, -778, 779, -778,
01870 -778, 658, 2846, -778, 2846, 9384, 80, -778, -778, 4747,
01871 -778, -778, 80, -778, -778, 639, 639, -778, 115, -778,
01872 3517, -778, -778, -778, -778, 1115, -778, -778, 664, -778,
01873 662, 845, 491, -778, -778, -778, -778, 923, -778, 779,
01874 -778, 779, -778, 779, -778, -778, -778, 751, 429, 809,
01875 -778, 672, 673, 647, -778, 679, 647, 765, -778, 432,
01876 373, 383, 3517, -778, 3662, -778, -778, -778, -778, -778,
01877 4747, 639, 3517, -778, 845, 662, 845, 685, 647, 686,
01878 647, 647, -778, 9980, -778, 1199, -778, 779, -778, -778,
01879 779, -778, -778, 411, 10057, 7228, 10134, 644, 441, 639,
01880 -778, 639, 662, 845, -778, 779, -778, -778, -778, 688,
01881 690, 647, 687, 647, 647, 81, 271, -11, 86, 118,
01882 -778, -778, -778, -778, 662, 647, -778, 779, -778, -778,
01883 -778, 124, -778, 647, -778
01884 };
01885
01886
01887 static const yytype_int16 yypgoto[] =
01888 {
01889 -778, -778, -778, 399, -778, 33, -778, -530, -33, -778,
01890 159, -778, 23, -55, 21, -778, -462, -778, -15, 741,
01891 -136, -1, -66, -778, -403, -26, 1181, -306, 750, -52,
01892 -778, -20, -778, -778, 32, -778, 748, -778, 540, -778,
01893 46, -98, -298, 54, 76, -778, -278, -196, -44, -283,
01894 27, -778, -778, -778, -778, -778, -778, -778, -778, -778,
01895 -778, -778, -778, -778, -778, -778, -778, 2, -778, -778,
01896 -778, -778, -778, -778, -778, -778, -778, -778, 298, -323,
01897 -512, -97, -610, -778, -755, -748, 120, -778, -485, -778,
01898 -636, -778, -49, -778, -778, -778, -778, -778, -778, -778,
01899 -778, -778, 752, -778, -778, -520, -778, -92, -778, -778,
01900 -778, -778, -778, -778, 753, -778, -778, -778, -778, -778,
01901 -778, -778, -778, 792, -778, -229, -778, -778, -778, -778,
01902 7, -778, 13, -778, 1031, 762, 1198, 1109, -778, -778,
01903 -12, -416, -706, -549, -667, -121, -679, -777, 25, 128,
01904 -778, -579, -778, -434, 531, -778, -778, -778, -41, -287,
01905 1927, -254, -778, -778, -32, -4, 88, -554, -217, 63,
01906 -31, -2
01907 };
01908
01909
01910
01911
01912 #define YYTABLE_NINF -566
01913 static const yytype_int16 yytable[] =
01914 {
01915 109, 199, 199, 269, 80, 199, 80, 248, 224, 302,
01916 249, 253, 632, 534, 399, 190, 240, 676, 206, 206,
01917 488, 191, 206, 222, 675, 225, 693, 259, 336, 712,
01918 622, 339, 433, 522, 288, 190, 435, 110, 369, 604,
01919 188, 191, 831, 453, 531, 456, 548, 460, 244, 250,
01920 254, 80, 206, 719, 340, 261, 823, 780, 873, 894,
01921 188, 785, 754, 870, 206, 818, 727, 549, 218, 672,
01922 203, 212, 729, 246, 213, -96, 520, 261, 528, 648,
01923 260, 703, 704, 281, 206, 206, 374, 188, 206, 345,
01924 355, 355, 815, 531, -99, 462, 583, -103, 219, -98,
01925 447, 372, 260, 422, 640, 334, 334, 294, 295, 334,
01926 429, 586, 579, 832, 260, 260, 260, 430, 564, 565,
01927 579, -475, 188, 915, 632, -482, -474, 791, 287, -69,
01928 779, -100, 538, 3, -102, -99, 221, -97, 796, 520,
01929 463, 528, 641, 448, 449, 586, 607, -96, 894, 287,
01930 730, -98, 237, 820, 380, 373, 824, -101, 795, 873,
01931 -83, 67, 240, 67, 481, 597, 800, 818, 942, -100,
01932 432, 789, -97, 727, 812, -475, 284, 430, 285, 550,
01933 -474, 279, 280, 831, 381, 635, 632, 284, -476, 285,
01934 -88, 597, 440, 767, 417, 964, 375, 80, 823, 199,
01935 774, 199, 199, 392, 728, 227, 240, 755, 392, 424,
01936 425, 284, -95, 285, 818, 406, 206, 221, 206, 206,
01937 275, 806, 206, -543, 206, 284, -99, 285, -99, 80,
01938 636, -98, 374, -98, 468, 469, 470, 471, 244, 277,
01939 80, 80, -476, 407, 681, 409, 760, 691, 907, -94,
01940 -91, 436, -543, -90, 479, 892, 692, 895, 296, 479,
01941 261, 632, 727, -100, 727, -100, -90, 240, 400, -97,
01942 403, -97, -93, 56, -544, 483, 298, -406, 218, 799,
01943 859, 380, 535, 536, -92, 260, -92, -89, -482, 597,
01944 80, 206, 206, 206, 206, 80, 206, 206, 919, 244,
01945 206, 597, 80, 261, 287, 206, 220, 537, 408, -477,
01946 -96, 221, 334, 334, 334, 334, 199, 473, 474, 477,
01947 299, 467, 727, 917, 485, 294, 295, -540, 260, 406,
01948 911, 426, 284, 206, 285, 80, -406, -90, 908, 206,
01949 206, -88, 375, 303, -479, 378, 952, -541, 217, 580,
01950 397, -478, 383, 206, 790, 420, -279, 220, -324, 385,
01951 334, 334, 518, -477, -547, 727, 388, 727, -90, 379,
01952 -92, -90, -103, 389, 545, -90, 440, -102, 527, 199,
01953 206, 206, 941, 776, 709, 717, -469, -406, 602, -406,
01954 -406, -103, 406, 591, 727, 330, 206, 421, -479, 568,
01955 570, -92, 287, 971, -92, -478, -472, -480, -92, -279,
01956 -279, -324, -324, -544, 109, 546, 440, 552, 80, 547,
01957 190, 390, -95, -547, 396, 518, 191, 80, 393, 199,
01958 398, 632, 418, -469, 438, 439, 443, -540, 414, -469,
01959 -469, 527, 406, -540, 261, 188, 206, 67, 331, 332,
01960 518, 416, 472, 214, -472, 782, 779, -541, -481, -472,
01961 -472, -480, 559, -541, 304, 527, 699, 701, -272, 260,
01962 217, 541, 423, 644, -547, 518, -547, -547, 553, -68,
01963 -543, 394, 395, 428, 261, 394, 419, -469, 587, 444,
01964 445, 527, 589, 434, 677, 590, -280, 713, 437, 669,
01965 651, 671, 721, 457, 611, 612, 613, 614, -472, 260,
01966 599, -481, -481, 461, 923, 601, 560, 934, 656, -98,
01967 751, -272, -272, 902, 542, 543, 663, 199, 668, 904,
01968 442, 554, 555, 420, 80, 658, 80, 718, 659, 199,
01969 406, 464, 465, 721, 206, 611, 612, 613, 614, -280,
01970 -280, 538, 406, 484, 707, -102, 206, -98, 80, 206,
01971 -100, 466, 663, 663, 644, 644, 654, 554, 555, 647,
01972 935, 936, 540, 518, 660, 67, 447, 572, 392, 656,
01973 694, 190, 304, 440, 600, 518, -94, 191, -90, 527,
01974 811, -92, 251, 544, 206, 663, 655, 588, 674, 674,
01975 595, 527, -83, 656, 662, 261, 188, 603, -258, 757,
01976 660, 660, 686, 447, 822, 715, 714, 825, 637, 448,
01977 449, 450, 479, 807, 734, 769, 734, 646, 734, 792,
01978 260, 916, 794, 327, 328, 329, 649, 957, -100, 756,
01979 700, 702, 654, 660, 80, -97, 802, -97, 447, 664,
01980 304, 261, 666, 410, 206, 206, 448, 449, 452, 670,
01981 206, 206, 411, 412, 778, 781, 720, 781, 447, 781,
01982 803, 804, 716, 763, 765, 737, 260, 656, -89, 770,
01983 772, 447, 597, 732, 735, 455, 206, 738, 656, 206,
01984 80, 448, 449, 454, 740, -259, 816, 817, 80, 325,
01985 326, 327, 328, 329, 644, 80, 80, 334, 826, 762,
01986 334, 448, 449, 458, 768, 893, 779, 896, 721, 813,
01987 611, 612, 613, 614, 448, 449, 756, 852, 748, 833,
01988 188, 80, 80, 384, 827, 834, 386, 387, 289, 290,
01989 291, 292, 293, 80, 836, 838, 848, 756, 793, 734,
01990 840, 734, 734, 855, 856, 722, 918, 858, 920, -260,
01991 801, 723, 921, 845, 201, 201, 849, 867, 201, 866,
01992 875, 206, 871, 868, 876, 847, 742, 743, 851, 744,
01993 877, 80, 798, 879, 206, 44, 45, 881, 80, 80,
01994 843, 883, 80, 886, 233, 236, 890, 889, -261, 201,
01995 201, 913, 914, 808, 951, 334, 953, 922, 80, 954,
01996 282, 283, 925, 927, 814, 594, 903, 734, 734, 930,
01997 734, 933, 734, 734, 965, 943, 945, 967, 343, 888,
01998 -543, 721, -544, 611, 612, 613, 614, 678, 478, 358,
01999 924, 961, 810, 487, 376, 960, 973, 899, 377, 273,
02000 0, 80, 370, 912, 260, 674, 781, 861, 304, 891,
02001 819, 828, 80, 611, 612, 613, 614, 0, 615, 937,
02002 0, 938, 260, 317, 318, 617, 0, 939, 721, 0,
02003 611, 612, 613, 614, 0, 0, 0, 863, 0, 734,
02004 734, 734, 0, 734, 734, 618, 0, 721, 869, 611,
02005 612, 613, 614, 874, 80, 0, 80, 325, 326, 327,
02006 328, 329, 80, 0, 80, 722, 734, 734, 734, 734,
02007 199, 872, 0, 0, 0, 0, 0, 0, 0, 576,
02008 578, 0, 0, 406, 722, 668, 781, 206, 251, 0,
02009 0, 201, 0, 0, 201, 201, 282, 0, 0, 734,
02010 734, 734, 734, 656, 0, 518, 747, 0, 611, 612,
02011 613, 614, 201, 734, 201, 201, 518, 0, 0, 578,
02012 0, 734, 251, 0, 788, 610, 0, 611, 612, 613,
02013 614, 0, 527, 0, 0, 0, 0, 0, 0, 0,
02014 0, 797, 0, 615, 0, 0, 0, 0, 0, 616,
02015 617, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02016 0, 0, 615, 0, 0, 0, 645, 0, 616, 617,
02017 618, 0, 0, 619, 0, 0, 0, 0, 0, 0,
02018 0, 0, 0, 104, 0, 104, 0, 0, 0, 618,
02019 0, 0, 619, 0, 0, 0, 201, 0, 0, 748,
02020 0, 486, 489, 490, 491, 492, 493, 494, 495, 496,
02021 497, 498, 499, 500, 501, 502, 503, 504, 505, 506,
02022 507, 508, 509, 510, 511, 512, 513, 514, 487, 201,
02023 104, 853, 0, 854, 262, 610, 0, 611, 612, 613,
02024 614, 0, 0, 862, 0, 0, 0, 0, 864, 0,
02025 0, 0, 0, 0, 0, 0, 262, 0, 0, 0,
02026 0, 107, 0, 107, 0, 0, 0, 708, 347, 356,
02027 356, 356, 615, 0, 0, 0, 569, 571, 616, 617,
02028 0, 0, 0, 0, 0, 0, 575, 201, 201, 0,
02029 0, 0, 201, 0, 569, 571, 201, 0, 0, 618,
02030 0, 0, 619, 905, 906, 0, 0, 0, 107, 736,
02031 0, 739, 263, 593, 0, 0, 304, 610, 598, 611,
02032 612, 613, 614, 0, 0, 620, 0, 201, 0, 0,
02033 201, 317, 318, 77, 263, 77, 759, 0, 0, 0,
02034 0, 0, 201, 0, 0, 0, 348, 357, 357, 0,
02035 106, 0, 106, 0, 615, 0, 775, 0, 0, 940,
02036 616, 617, 638, 639, 324, 325, 326, 327, 328, 329,
02037 0, 0, 0, 0, 201, 0, 104, 0, 0, 0,
02038 77, 618, 0, 0, 619, -565, 0, 962, 0, 963,
02039 0, 0, 0, -565, -565, -565, 0, 106, -565, -565,
02040 -565, 747, -565, 611, 612, 613, 614, 695, 104, 0,
02041 809, 0, -565, 0, 0, 0, 0, 0, 344, 104,
02042 104, 0, -565, -565, 0, -565, -565, -565, -565, -565,
02043 0, 0, 835, 0, 837, 839, 201, 0, 615, 262,
02044 201, 304, 0, 0, 616, 617, 0, 0, 841, 0,
02045 0, 0, 201, 0, 107, 0, 317, 318, 0, 0,
02046 0, 0, 0, 0, 0, 618, 0, 0, 619, 104,
02047 -565, 0, 0, 0, 104, 201, 0, 0, 0, 857,
02048 0, 104, 262, 0, 0, 0, 107, 322, 323, 324,
02049 325, 326, 327, 328, 329, 0, 0, 107, 107, 0,
02050 878, 880, 0, 882, 0, 884, 885, 0, 0, 0,
02051 0, 0, 0, 0, 104, 0, 0, 263, 0, 0,
02052 0, 0, -565, 0, -565, 0, 77, 217, -565, 0,
02053 -565, 0, -565, 0, 0, 0, 0, 0, 0, 0,
02054 0, 0, 0, 106, 201, 0, 0, 107, 761, 0,
02055 764, 766, 107, 0, 0, 0, 771, 773, 77, 107,
02056 263, 0, 0, 0, 201, 0, 0, 0, 0, 77,
02057 77, 0, 926, 928, 929, 106, 931, 932, 0, 0,
02058 0, 0, 0, 0, 0, 0, 106, 106, 0, 0,
02059 0, 0, 107, 0, 0, 0, 0, 104, 0, 944,
02060 946, 947, 948, 805, 0, 0, 104, 0, 764, 766,
02061 0, 771, 773, 0, 0, 0, 0, 0, 201, 77,
02062 0, 0, 0, 262, 77, 0, 0, 0, 0, 0,
02063 0, 77, 966, 968, 969, 970, 106, 0, 0, 0,
02064 0, 106, 0, 0, 0, 0, 972, 0, 106, 0,
02065 0, 0, 0, 0, 974, 0, 201, 0, 0, 0,
02066 842, 0, 0, 262, 77, 0, 0, 844, 0, 0,
02067 0, 0, 0, 0, 0, 107, 0, 0, 0, 0,
02068 0, 106, 0, 0, 107, 0, 0, 201, 0, 0,
02069 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02070 0, 263, 0, 0, 0, 844, 0, 0, 0, 0,
02071 0, 0, 0, 104, 0, 104, 0, 0, 0, 0,
02072 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02073 304, -566, -566, -566, -566, 309, 310, 104, 0, -566,
02074 -566, 263, 0, 0, 0, 317, 318, 77, 0, 0,
02075 0, 0, 0, 0, 0, 0, 77, 0, 0, 0,
02076 0, 0, 0, 0, 106, 0, 0, 0, 0, 0,
02077 650, 0, 0, 106, 320, 321, 322, 323, 324, 325,
02078 326, 327, 328, 329, 262, 0, 0, 0, 0, 0,
02079 0, 107, 0, 107, 304, 305, 306, 307, 308, 309,
02080 310, 311, 312, 313, 314, 315, 316, 0, 0, 317,
02081 318, 0, 0, 0, 0, 107, 0, 0, 0, 0,
02082 0, 0, 0, 104, 0, 0, 0, 0, 0, 0,
02083 262, 0, 0, 201, 0, 0, 319, 0, 320, 321,
02084 322, 323, 324, 325, 326, 327, 328, 329, 0, 0,
02085 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02086 0, 0, 263, 77, 0, 77, -237, 0, 0, 104,
02087 0, 0, 0, 0, 0, 0, 0, 104, 0, 0,
02088 106, 0, 106, 0, 104, 104, 0, 77, 0, 0,
02089 0, 0, 0, 746, 0, 0, 0, 0, 0, 0,
02090 0, 107, 0, 0, 106, 0, 0, 0, 263, 0,
02091 104, 104, 0, 0, 515, 516, 0, 0, 517, 0,
02092 0, 0, 104, 0, 0, 0, 0, 0, 155, 156,
02093 157, 158, 159, 160, 161, 162, 163, 0, 0, 164,
02094 165, 0, 0, 166, 167, 168, 169, 107, 0, 0,
02095 0, 0, 0, 0, 0, 107, 0, 170, 0, 0,
02096 104, 0, 107, 107, 0, 0, 0, 104, 104, 0,
02097 0, 104, 0, 77, 171, 172, 173, 174, 175, 176,
02098 177, 178, 179, 180, 0, 181, 182, 104, 107, 107,
02099 106, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02100 107, 0, 0, 183, 217, 0, 0, 0, 356, 0,
02101 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,
02102 0, 0, 0, 0, 0, 0, 900, 77, 0, 0,
02103 104, 0, 0, 0, 77, 77, 106, 0, 107, 0,
02104 0, 104, 0, 0, 106, 107, 107, 0, 0, 107,
02105 0, 106, 106, 0, 0, 0, 0, 0, 0, 0,
02106 77, 77, 0, 0, 0, 107, 0, 0, 0, 0,
02107 0, 0, 77, 0, 0, 0, 0, 106, 106, 0,
02108 0, 0, 0, 104, 0, 104, 357, 0, 0, 106,
02109 0, 104, 0, 104, 0, 0, 0, 304, 305, 306,
02110 307, 308, 309, 310, 901, 0, 313, 314, 107, 0,
02111 77, 0, 317, 318, 0, 0, 0, 77, 77, 107,
02112 0, 77, 0, 235, 235, 0, 0, 106, 235, 235,
02113 235, 0, 0, 0, 106, 106, 0, 77, 106, 0,
02114 235, 320, 321, 322, 323, 324, 325, 326, 327, 328,
02115 329, 0, 235, 0, 106, 0, 0, 0, 0, 0,
02116 0, 107, 0, 107, 235, 235, 235, 0, 0, 107,
02117 0, 107, 0, 0, 0, 0, 898, 0, 0, 0,
02118 77, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02119 0, 77, 0, 0, 0, 0, 0, 106, 0, 0,
02120 0, 0, 0, 0, 0, 0, 0, 0, 106, 0,
02121 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02122 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02123 0, 0, 0, 77, 0, 77, 0, 0, 0, 0,
02124 0, 77, 0, 77, 0, 0, 0, 0, 0, 0,
02125 106, 0, 106, 0, 0, 0, 0, 0, 106, 0,
02126 106, 0, 523, 524, 0, 0, 525, 0, 0, 0,
02127 235, 0, 0, 235, 235, 235, 155, 156, 157, 158,
02128 159, 160, 161, 162, 163, 0, 0, 164, 165, 0,
02129 0, 166, 167, 168, 169, 0, 0, 304, 305, 306,
02130 307, 308, 309, 310, 311, 170, 313, 314, 0, 0,
02131 0, 0, 317, 318, 0, 0, 0, 0, 0, 0,
02132 0, 0, 171, 172, 173, 174, 175, 176, 177, 178,
02133 179, 180, 0, 181, 182, 235, 0, 0, 0, 0,
02134 0, 320, 321, 322, 323, 324, 325, 326, 327, 328,
02135 329, 183, 217, 0, 0, 0, 0, 0, 0, 0,
02136 0, 0, 0, 0, 304, 305, 306, 307, 308, 309,
02137 310, 311, 312, 313, 314, -566, -566, 0, 235, 317,
02138 318, 235, 235, 235, 235, 235, 235, 235, 235, 235,
02139 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
02140 235, 235, 235, 235, 235, 235, 235, 0, 320, 321,
02141 322, 323, 324, 325, 326, 327, 328, 329, 581, 516,
02142 0, 0, 582, 0, 0, 0, 0, 0, 0, 0,
02143 0, 0, 155, 156, 157, 158, 159, 160, 161, 162,
02144 163, 0, 0, 164, 165, 0, 0, 166, 167, 168,
02145 169, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02146 0, 170, 0, 0, 0, 235, 235, 235, 0, 0,
02147 0, 0, 0, 235, 235, 235, 0, 0, 171, 172,
02148 173, 174, 175, 176, 177, 178, 179, 180, 0, 181,
02149 182, 0, 235, 0, 0, 0, 0, 235, 0, 0,
02150 0, 0, 0, 0, 0, 0, 235, 183, 217, 235,
02151 0, 0, 0, 0, 0, 0, 0, 0, 0, 235,
02152 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02153 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02154 0, 235, 235, 0, -565, 4, 0, 5, 6, 7,
02155 8, 9, 0, 235, 0, 10, 11, 0, 0, 235,
02156 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
02157 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02158 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02159 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
02160 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02161 46, 47, 0, 0, 0, 235, 0, 0, 0, 0,
02162 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02163 48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
02164 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02165 0, 0, 0, 0, 235, 0, 0, 0, 0, 0,
02166 0, 0, 0, 0, 0, 0, 61, 62, 63, 0,
02167 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02168 235, 0, 0, 0, 0, 0, 0, 0, 0, -565,
02169 0, -565, 0, 0, 0, 0, 0, 0, 0, 0,
02170 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02171 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02172 0, 0, 0, 235, 0, 0, 235, 235, 0, 0,
02173 0, -279, 0, 0, 0, 0, 0, 0, 0, -279,
02174 -279, -279, 0, 235, -279, -279, -279, 0, -279, 0,
02175 0, 0, 0, 0, 0, 0, 0, 0, -279, -279,
02176 -279, 0, 0, 0, 0, 0, 0, 0, -279, -279,
02177 0, -279, -279, -279, -279, -279, 0, 0, 0, 0,
02178 0, 0, 235, 0, 0, 0, 0, 235, 235, 0,
02179 235, 235, 0, 0, 0, 0, 0, 235, 0, -279,
02180 -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
02181 -279, -279, 0, 0, -279, -279, -279, 0, 711, -279,
02182 0, 0, 0, 0, 0, -279, 0, 0, 0, 0,
02183 0, 0, 0, 0, 0, 235, 0, 0, -279, 235,
02184 -101, -279, -279, -279, -279, -279, -279, -279, -279, -279,
02185 -279, -279, -279, 0, 0, 0, 0, 0, 0, 0,
02186 0, 0, 0, 0, 0, 0, 235, 0, -279, -279,
02187 -279, -279, -405, 0, -279, -279, -279, 0, -279, 0,
02188 -405, -405, -405, 0, 235, -405, -405, -405, 0, -405,
02189 0, 0, 0, 0, 0, 0, 0, 0, -405, -405,
02190 -405, 0, 0, 0, 235, 0, 0, 0, 0, -405,
02191 -405, 0, -405, -405, -405, -405, -405, 0, 0, 0,
02192 0, 0, 235, 304, 305, 306, 307, 308, 309, 310,
02193 311, 312, 313, 314, 315, 316, 0, 0, 317, 318,
02194 -405, -405, -405, -405, -405, -405, -405, -405, -405, -405,
02195 -405, -405, -405, 0, 0, -405, -405, -405, 0, 0,
02196 -405, 0, 0, 0, 0, 319, -405, 320, 321, 322,
02197 323, 324, 325, 326, 327, 328, 329, 0, 0, 0,
02198 0, 0, -405, 0, -405, -405, -405, -405, -405, -405,
02199 -405, -405, -405, -405, 0, 0, 0, 0, 0, 0,
02200 0, 0, 221, 0, 0, 0, 0, 0, -405, -405,
02201 -405, -405, -405, -273, 217, -405, -405, -405, 0, -405,
02202 0, -273, -273, -273, 0, 0, -273, -273, -273, 0,
02203 -273, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02204 -273, -273, -273, 0, 0, 0, 0, 0, 0, 0,
02205 -273, -273, 0, -273, -273, -273, -273, -273, 0, 0,
02206 0, 0, 0, 0, 304, 305, 306, 307, 308, 309,
02207 310, 311, 312, 313, 314, 315, 316, 0, 0, 317,
02208 318, -273, -273, -273, -273, -273, -273, -273, -273, -273,
02209 -273, -273, -273, -273, 0, 0, -273, -273, -273, 0,
02210 0, -273, 0, 0, 0, 0, 319, -273, 320, 321,
02211 322, 323, 324, 325, 326, 327, 328, 329, 0, 0,
02212 -273, 0, 0, -273, -273, -273, -273, -273, -273, -273,
02213 -273, -273, -273, -273, -273, 0, 0, 0, 0, 0,
02214 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02215 -273, -273, -273, -273, -565, 0, -273, -273, -273, 0,
02216 -273, 0, -565, -565, -565, 0, 0, -565, -565, -565,
02217 0, -565, 0, 0, 0, 0, 0, 0, 0, 0,
02218 -565, -565, -565, 0, 0, 0, 0, 0, 0, 0,
02219 0, -565, -565, 0, -565, -565, -565, -565, -565, 0,
02220 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02221 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02222 0, 0, -565, -565, -565, -565, -565, -565, -565, -565,
02223 -565, -565, -565, -565, -565, 0, 0, -565, -565, -565,
02224 0, 0, -565, 0, 0, 0, 0, 0, -565, 0,
02225 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02226 0, 0, 0, 0, -565, 0, -565, -565, -565, -565,
02227 -565, -565, -565, -565, -565, -565, 0, 0, 0, 0,
02228 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02229 -565, -565, -565, -565, -565, -286, 217, -565, -565, -565,
02230 0, -565, 0, -286, -286, -286, 0, 0, -286, -286,
02231 -286, 0, -286, 0, 0, 0, 0, 0, 0, 0,
02232 0, 0, -286, -286, 0, 0, 0, 0, 0, 0,
02233 0, 0, -286, -286, 0, -286, -286, -286, -286, -286,
02234 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02235 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02236 0, 0, 0, -286, -286, -286, -286, -286, -286, -286,
02237 -286, -286, -286, -286, -286, -286, 0, 0, -286, -286,
02238 -286, 0, 0, -286, 0, 0, 0, 0, 0, -286,
02239 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02240 0, 0, 0, 0, 0, -286, 0, -286, -286, -286,
02241 -286, -286, -286, -286, -286, -286, -286, 0, 0, 0,
02242 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02243 0, 0, -286, -286, -286, -286, -547, 214, -286, -286,
02244 -286, 0, -286, 0, -547, -547, -547, 0, 0, 0,
02245 -547, -547, 0, -547, 0, 0, 0, 0, 0, 0,
02246 0, 0, -547, 0, 0, 0, 0, 0, 0, 0,
02247 0, 0, 0, -547, -547, 0, -547, -547, -547, -547,
02248 -547, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02249 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02250 0, 0, 0, 0, -547, -547, -547, -547, -547, -547,
02251 -547, -547, -547, -547, -547, -547, -547, 0, 0, -547,
02252 -547, -547, -279, 652, 0, 0, 0, 0, 0, 0,
02253 -279, -279, -279, 0, 0, 0, -279, -279, 0, -279,
02254 0, 0, 0, 0, 0, -99, -547, 0, -547, -547,
02255 -547, -547, -547, -547, -547, -547, -547, -547, 0, -279,
02256 -279, 0, -279, -279, -279, -279, -279, 0, 0, 0,
02257 0, 0, -547, -547, -547, -547, -91, 0, 0, -547,
02258 0, -547, 0, -547, 0, 0, 0, 0, 0, 0,
02259 -279, -279, -279, -279, -279, -279, -279, -279, -279, -279,
02260 -279, -279, -279, 0, 0, -279, -279, -279, 0, 653,
02261 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02262 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02263 0, -101, -279, 0, -279, -279, -279, -279, -279, -279,
02264 -279, -279, -279, -279, 0, 0, 0, 0, 0, 0,
02265 0, 0, 0, 0, 0, 0, 0, 0, 0, -279,
02266 -279, -279, -93, 0, 0, -279, 0, -279, 238, -279,
02267 5, 6, 7, 8, 9, -565, -565, -565, 10, 11,
02268 0, 0, -565, 12, 0, 13, 14, 15, 16, 17,
02269 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02270 23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
02271 0, 0, 28, 29, 0, 31, 32, 33, 34, 35,
02272 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02273 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02274 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02275 0, 0, 0, 48, 0, 0, 49, 50, 0, 51,
02276 52, 0, 53, 0, 54, 55, 56, 57, 58, 59,
02277 60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02278 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
02279 62, 63, 0, 0, 0, 0, 0, 0, 0, 0,
02280 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02281 0, 0, -565, 238, -565, 5, 6, 7, 8, 9,
02282 0, 0, -565, 10, 11, 0, -565, -565, 12, 0,
02283 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02284 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02285 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02286 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02287 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02288 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02289 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02290 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02291 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02293 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02294 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02295 0, 0, 0, 0, 0, 0, 0, -565, 238, -565,
02296 5, 6, 7, 8, 9, 0, 0, -565, 10, 11,
02297 0, 0, -565, 12, -565, 13, 14, 15, 16, 17,
02298 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02299 23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
02300 0, 0, 28, 29, 0, 31, 32, 33, 34, 35,
02301 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02302 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02303 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02304 0, 0, 0, 48, 0, 0, 49, 50, 0, 51,
02305 52, 0, 53, 0, 54, 55, 56, 57, 58, 59,
02306 60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02307 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
02308 62, 63, 0, 0, 0, 0, 0, 0, 4, 0,
02309 5, 6, 7, 8, 9, 0, 0, 0, 10, 11,
02310 0, 0, -565, 12, -565, 13, 14, 15, 16, 17,
02311 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02312 23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
02313 0, 0, 28, 29, 30, 31, 32, 33, 34, 35,
02314 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02315 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02316 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02317 0, 0, 0, 48, 0, 0, 49, 50, 0, 51,
02318 52, 0, 53, 0, 54, 55, 56, 57, 58, 59,
02319 60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02320 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
02321 62, 63, 0, 0, 0, 0, 0, 0, 0, 0,
02322 0, 0, 0, 0, -565, 0, 0, 0, 0, 0,
02323 0, 0, -565, 238, -565, 5, 6, 7, 8, 9,
02324 0, 0, -565, 10, 11, 0, 0, -565, 12, 0,
02325 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02326 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02327 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02328 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02329 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02330 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02331 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02332 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02333 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02334 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02335 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02336 0, 0, 0, 238, 0, 5, 6, 7, 8, 9,
02337 0, -565, -565, 10, 11, 0, 0, -565, 12, -565,
02338 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02339 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02340 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02341 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02342 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02343 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02344 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02345 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02346 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02347 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02348 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02349 0, 0, 0, 238, 0, 5, 6, 7, 8, 9,
02350 0, 0, 0, 10, 11, 0, 0, -565, 12, -565,
02351 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02352 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02353 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02354 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02355 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02356 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02357 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02358 0, 239, 50, 0, 51, 52, 0, 53, 0, 54,
02359 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02360 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02361 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02362 0, 0, 0, 238, 0, 5, 6, 7, 8, 9,
02363 0, 0, 0, 10, 11, -565, 0, -565, 12, -565,
02364 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02365 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02366 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02367 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02368 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02369 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02370 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02371 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02372 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02373 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02374 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02375 0, 0, 0, 238, 0, 5, 6, 7, 8, 9,
02376 0, 0, 0, 10, 11, -565, 0, -565, 12, -565,
02377 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02378 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02379 0, 27, 0, 0, 0, 0, 0, 28, 29, 0,
02380 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02381 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02382 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02383 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02384 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02385 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02386 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02387 0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
02388 0, 0, 0, 0, 0, 0, 0, 0, 0, -565,
02389 0, 0, 0, 0, 0, 0, 0, -565, 238, -565,
02390 5, 6, 7, 8, 9, 0, 0, -565, 10, 11,
02391 0, 0, 0, 12, 0, 13, 14, 15, 16, 17,
02392 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02393 23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
02394 0, 0, 28, 29, 0, 31, 32, 33, 34, 35,
02395 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02396 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02397 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02398 0, 0, 0, 48, 0, 0, 49, 50, 0, 51,
02399 52, 0, 53, 0, 54, 55, 56, 57, 58, 59,
02400 60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02401 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
02402 62, 63, 0, 0, 0, 0, 0, 0, 0, 0,
02403 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
02404 0, 0, -565, 12, -565, 13, 14, 15, 16, 17,
02405 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02406 23, 24, 25, 26, 0, 0, 192, 0, 0, 0,
02407 0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
02408 36, 37, 38, 39, 40, 193, 41, 42, 0, 43,
02409 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02410 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02411 0, 0, 0, 194, 0, 0, 195, 50, 0, 51,
02412 52, 0, 196, 197, 54, 55, 56, 57, 58, 59,
02413 60, 0, 0, 0, 0, 0, 0, 0, 0, 5,
02414 6, 7, 0, 9, 0, 0, 0, 10, 11, 61,
02415 198, 63, 12, 0, 13, 14, 15, 16, 17, 18,
02416 19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
02417 24, 25, 26, 0, 221, 27, 0, 0, 0, 0,
02418 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
02419 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02420 45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
02421 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02422 0, 0, 194, 0, 0, 195, 50, 0, 51, 52,
02423 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02424 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02425 0, 0, 0, 0, 0, 0, 0, 0, 61, 62,
02426 63, 0, 0, 0, 0, 0, 0, 0, 0, 5,
02427 6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
02428 0, 284, 12, 285, 13, 14, 15, 16, 17, 18,
02429 19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
02430 24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
02431 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
02432 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02433 45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
02434 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02435 0, 0, 194, 0, 0, 195, 50, 0, 51, 52,
02436 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02437 0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
02438 7, 8, 9, 0, 0, 0, 10, 11, 61, 62,
02439 63, 12, 0, 13, 14, 15, 16, 17, 18, 19,
02440 0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
02441 25, 26, 0, 221, 27, 0, 0, 0, 0, 0,
02442 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
02443 38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
02444 0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
02445 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02446 0, 48, 0, 0, 49, 50, 0, 51, 52, 0,
02447 53, 0, 54, 55, 56, 57, 58, 59, 60, 0,
02448 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02449 0, 0, 0, 0, 0, 0, 0, 61, 62, 63,
02450 0, 0, 0, 0, 0, 0, 5, 6, 7, 8,
02451 9, 0, 0, 0, 10, 11, 0, 0, 0, 12,
02452 466, 13, 14, 15, 16, 17, 18, 19, 0, 0,
02453 0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
02454 0, 0, 27, 0, 0, 0, 0, 0, 28, 29,
02455 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
02456 40, 0, 41, 42, 0, 43, 44, 45, 0, 46,
02457 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02458 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
02459 0, 0, 49, 50, 0, 51, 52, 0, 53, 0,
02460 54, 55, 56, 57, 58, 59, 60, 0, 0, 0,
02461 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02462 0, 0, 0, 0, 0, 61, 62, 63, 0, 0,
02463 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02464 0, 0, 0, 0, 0, 0, 0, 0, 466, 111,
02465 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
02466 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
02467 132, 133, 134, 0, 0, 0, 135, 136, 137, 359,
02468 360, 361, 362, 142, 143, 144, 0, 0, 0, 0,
02469 0, 145, 146, 147, 148, 363, 364, 365, 366, 153,
02470 37, 38, 367, 40, 0, 0, 0, 0, 0, 0,
02471 0, 0, 155, 156, 157, 158, 159, 160, 161, 162,
02472 163, 0, 0, 164, 165, 0, 0, 166, 167, 168,
02473 169, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02474 0, 170, 0, 0, 0, 0, 0, 0, 0, 0,
02475 0, 0, 0, 0, 0, 0, 0, 0, 171, 172,
02476 173, 174, 175, 176, 177, 178, 179, 180, 0, 181,
02477 182, 0, 0, 0, 0, 0, -540, -540, -540, 0,
02478 -540, 0, 0, 0, -540, -540, 0, 183, 368, -540,
02479 0, -540, -540, -540, -540, -540, -540, -540, 0, -540,
02480 0, 0, 0, -540, -540, -540, -540, -540, -540, -540,
02481 0, 0, -540, 0, 0, 0, 0, 0, 0, -540,
02482 0, 0, -540, -540, -540, -540, -540, -540, -540, -540,
02483 -540, -540, -540, -540, 0, -540, -540, -540, 0, -540,
02484 -540, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02485 0, 0, 0, 0, 0, 0, 0, 0, 0, -540,
02486 0, 0, -540, -540, 0, -540, -540, 0, -540, -540,
02487 -540, -540, -540, -540, -540, -540, -540, 0, 0, 0,
02488 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02489 0, 0, 0, 0, 0, -540, -540, -540, 0, 0,
02490 0, 0, 0, -541, -541, -541, 0, -541, 0, -540,
02491 0, -541, -541, 0, 0, -540, -541, 0, -541, -541,
02492 -541, -541, -541, -541, -541, 0, -541, 0, 0, 0,
02493 -541, -541, -541, -541, -541, -541, -541, 0, 0, -541,
02494 0, 0, 0, 0, 0, 0, -541, 0, 0, -541,
02495 -541, -541, -541, -541, -541, -541, -541, -541, -541, -541,
02496 -541, 0, -541, -541, -541, 0, -541, -541, 0, 0,
02497 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02498 0, 0, 0, 0, 0, 0, -541, 0, 0, -541,
02499 -541, 0, -541, -541, 0, -541, -541, -541, -541, -541,
02500 -541, -541, -541, -541, 0, 0, 0, 0, 0, 0,
02501 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02502 0, 0, -541, -541, -541, 0, 0, 0, 0, 0,
02503 -543, -543, -543, 0, -543, 0, -541, 0, -543, -543,
02504 0, 0, -541, -543, 0, -543, -543, -543, -543, -543,
02505 -543, -543, 0, 0, 0, 0, 0, -543, -543, -543,
02506 -543, -543, -543, -543, 0, 0, -543, 0, 0, 0,
02507 0, 0, 0, -543, 0, 0, -543, -543, -543, -543,
02508 -543, -543, -543, -543, -543, -543, -543, -543, 0, -543,
02509 -543, -543, 0, -543, -543, 0, 0, 0, 0, 0,
02510 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02511 0, 0, 0, -543, 710, 0, -543, -543, 0, -543,
02512 -543, 0, -543, -543, -543, -543, -543, -543, -543, -543,
02513 -543, 0, 0, 0, 0, 0, -99, 0, 0, 0,
02514 0, 0, 0, 0, -545, -545, -545, 0, -545, -543,
02515 -543, -543, -545, -545, 0, 0, 0, -545, 0, -545,
02516 -545, -545, -545, -545, -545, -545, 0, 0, 0, -543,
02517 0, -545, -545, -545, -545, -545, -545, -545, 0, 0,
02518 -545, 0, 0, 0, 0, 0, 0, -545, 0, 0,
02519 -545, -545, -545, -545, -545, -545, -545, -545, -545, -545,
02520 -545, -545, 0, -545, -545, -545, 0, -545, -545, 0,
02521 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02522 0, 0, 0, 0, 0, 0, 0, -545, 0, 0,
02523 -545, -545, 0, -545, -545, 0, -545, -545, -545, -545,
02524 -545, -545, -545, -545, -545, 0, 0, 0, 0, 0,
02525 0, 0, 0, 0, 0, 0, 0, 0, -546, -546,
02526 -546, 0, -546, -545, -545, -545, -546, -546, 0, 0,
02527 0, -546, 0, -546, -546, -546, -546, -546, -546, -546,
02528 0, 0, 0, -545, 0, -546, -546, -546, -546, -546,
02529 -546, -546, 0, 0, -546, 0, 0, 0, 0, 0,
02530 0, -546, 0, 0, -546, -546, -546, -546, -546, -546,
02531 -546, -546, -546, -546, -546, -546, 0, -546, -546, -546,
02532 0, -546, -546, 0, 0, 0, 0, 0, 0, 0,
02533 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02534 0, -546, 0, 0, -546, -546, 0, -546, -546, 0,
02535 -546, -546, -546, -546, -546, -546, -546, -546, -546, 0,
02536 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02537 0, 0, 0, 0, 0, 0, 0, -546, -546, -546,
02538 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02539 0, 0, 0, 0, 0, 0, 0, -546, 111, 112,
02540 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
02541 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
02542 133, 134, 0, 0, 0, 135, 136, 137, 138, 139,
02543 140, 141, 142, 143, 144, 0, 0, 0, 0, 0,
02544 145, 146, 147, 148, 149, 150, 151, 152, 153, 266,
02545 267, 154, 268, 0, 0, 0, 0, 0, 0, 0,
02546 0, 155, 156, 157, 158, 159, 160, 161, 162, 163,
02547 0, 0, 164, 165, 0, 0, 166, 167, 168, 169,
02548 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02549 170, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02550 0, 0, 0, 0, 0, 0, 0, 171, 172, 173,
02551 174, 175, 176, 177, 178, 179, 180, 0, 181, 182,
02552 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02553 0, 0, 0, 0, 0, 0, 183, 111, 112, 113,
02554 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
02555 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
02556 134, 0, 0, 0, 135, 136, 137, 138, 139, 140,
02557 141, 142, 143, 144, 0, 0, 0, 0, 0, 145,
02558 146, 147, 148, 149, 150, 151, 152, 153, 223, 0,
02559 154, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02560 155, 156, 157, 158, 159, 160, 161, 162, 163, 0,
02561 0, 164, 165, 0, 0, 166, 167, 168, 169, 0,
02562 0, 0, 0, 0, 0, 0, 0, 0, 0, 170,
02563 0, 0, 55, 0, 0, 0, 0, 0, 0, 0,
02564 0, 0, 0, 0, 0, 0, 171, 172, 173, 174,
02565 175, 176, 177, 178, 179, 180, 0, 181, 182, 0,
02566 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02567 0, 0, 0, 0, 0, 183, 111, 112, 113, 114,
02568 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
02569 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
02570 0, 0, 0, 135, 136, 137, 138, 139, 140, 141,
02571 142, 143, 144, 0, 0, 0, 0, 0, 145, 146,
02572 147, 148, 149, 150, 151, 152, 153, 0, 0, 154,
02573 0, 0, 0, 0, 0, 0, 0, 0, 0, 155,
02574 156, 157, 158, 159, 160, 161, 162, 163, 0, 0,
02575 164, 165, 0, 0, 166, 167, 168, 169, 0, 0,
02576 0, 0, 0, 0, 0, 0, 0, 0, 170, 0,
02577 0, 55, 0, 0, 0, 0, 0, 0, 0, 0,
02578 0, 0, 0, 0, 0, 171, 172, 173, 174, 175,
02579 176, 177, 178, 179, 180, 0, 181, 182, 0, 0,
02580 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02581 0, 0, 0, 0, 183, 111, 112, 113, 114, 115,
02582 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
02583 126, 127, 128, 129, 130, 131, 132, 133, 134, 0,
02584 0, 0, 135, 136, 137, 138, 139, 140, 141, 142,
02585 143, 144, 0, 0, 0, 0, 0, 145, 146, 147,
02586 148, 149, 150, 151, 152, 153, 0, 0, 154, 0,
02587 0, 0, 0, 0, 0, 0, 0, 0, 155, 156,
02588 157, 158, 159, 160, 161, 162, 163, 0, 0, 164,
02589 165, 0, 0, 166, 167, 168, 169, 0, 0, 0,
02590 0, 0, 0, 0, 0, 0, 0, 170, 0, 0,
02591 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02592 0, 0, 0, 0, 171, 172, 173, 174, 175, 176,
02593 177, 178, 179, 180, 0, 181, 182, 0, 0, 5,
02594 6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
02595 0, 0, 12, 183, 13, 14, 15, 228, 229, 18,
02596 19, 0, 0, 0, 0, 0, 230, 231, 232, 23,
02597 24, 25, 26, 0, 0, 192, 0, 0, 0, 0,
02598 0, 0, 255, 0, 0, 32, 33, 34, 35, 36,
02599 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02600 45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02601 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02602 0, 0, 256, 0, 0, 195, 50, 0, 51, 52,
02603 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02604 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02605 0, 5, 6, 7, 0, 9, 0, 0, 257, 10,
02606 11, 0, 0, 0, 12, 0, 13, 14, 15, 228,
02607 229, 18, 19, 0, 0, 0, 258, 0, 230, 231,
02608 232, 23, 24, 25, 26, 0, 0, 192, 0, 0,
02609 0, 0, 0, 0, 255, 0, 0, 32, 33, 34,
02610 35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
02611 43, 44, 45, 0, 0, 0, 0, 0, 0, 0,
02612 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02613 0, 0, 0, 0, 256, 0, 0, 195, 50, 0,
02614 51, 52, 0, 0, 0, 54, 55, 56, 57, 58,
02615 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02616 0, 0, 0, 5, 6, 7, 8, 9, 0, 0,
02617 257, 10, 11, 0, 0, 0, 12, 0, 13, 14,
02618 15, 16, 17, 18, 19, 0, 0, 0, 482, 0,
02619 20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
02620 0, 0, 0, 0, 0, 28, 29, 30, 31, 32,
02621 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
02622 42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
02623 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02624 0, 0, 0, 0, 0, 0, 48, 0, 0, 49,
02625 50, 0, 51, 52, 0, 53, 0, 54, 55, 56,
02626 57, 58, 59, 60, 0, 0, 0, 0, 0, 0,
02627 0, 0, 5, 6, 7, 8, 9, 0, 0, 0,
02628 10, 11, 61, 62, 63, 12, 0, 13, 14, 15,
02629 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
02630 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
02631 0, 0, 0, 0, 28, 29, 0, 31, 32, 33,
02632 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02633 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02634 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02635 0, 0, 0, 0, 0, 48, 0, 0, 49, 50,
02636 0, 51, 52, 0, 53, 0, 54, 55, 56, 57,
02637 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02638 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
02639 11, 61, 62, 63, 12, 0, 13, 14, 15, 16,
02640 17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
02641 22, 23, 24, 25, 26, 0, 0, 192, 0, 0,
02642 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
02643 35, 36, 37, 38, 39, 40, 193, 41, 42, 0,
02644 43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
02645 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02646 0, 0, 0, 0, 194, 0, 0, 195, 50, 0,
02647 51, 52, 0, 196, 197, 54, 55, 56, 57, 58,
02648 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02649 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
02650 61, 198, 63, 12, 0, 13, 14, 15, 228, 229,
02651 18, 19, 0, 0, 0, 0, 0, 230, 231, 232,
02652 23, 24, 25, 26, 0, 0, 192, 0, 0, 0,
02653 0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
02654 36, 37, 38, 39, 40, 193, 41, 42, 0, 43,
02655 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02656 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02657 0, 0, 0, 194, 0, 0, 195, 50, 0, 51,
02658 52, 0, 577, 197, 54, 55, 56, 57, 58, 59,
02659 60, 0, 0, 0, 0, 0, 0, 0, 0, 5,
02660 6, 7, 0, 9, 0, 0, 0, 10, 11, 61,
02661 198, 63, 12, 0, 13, 14, 15, 228, 229, 18,
02662 19, 0, 0, 0, 0, 0, 230, 231, 232, 23,
02663 24, 25, 26, 0, 0, 192, 0, 0, 0, 0,
02664 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
02665 37, 38, 39, 40, 193, 41, 42, 0, 43, 44,
02666 45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
02667 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02668 0, 0, 194, 0, 0, 195, 50, 0, 51, 52,
02669 0, 196, 0, 54, 55, 56, 57, 58, 59, 60,
02670 0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
02671 7, 0, 9, 0, 0, 0, 10, 11, 61, 198,
02672 63, 12, 0, 13, 14, 15, 228, 229, 18, 19,
02673 0, 0, 0, 0, 0, 230, 231, 232, 23, 24,
02674 25, 26, 0, 0, 192, 0, 0, 0, 0, 0,
02675 0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
02676 38, 39, 40, 193, 41, 42, 0, 43, 44, 45,
02677 0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
02678 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02679 0, 194, 0, 0, 195, 50, 0, 51, 52, 0,
02680 0, 197, 54, 55, 56, 57, 58, 59, 60, 0,
02681 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02682 0, 9, 0, 0, 0, 10, 11, 61, 198, 63,
02683 12, 0, 13, 14, 15, 228, 229, 18, 19, 0,
02684 0, 0, 0, 0, 230, 231, 232, 23, 24, 25,
02685 26, 0, 0, 192, 0, 0, 0, 0, 0, 0,
02686 29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02687 39, 40, 193, 41, 42, 0, 43, 44, 45, 0,
02688 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02689 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02690 194, 0, 0, 195, 50, 0, 51, 52, 0, 577,
02691 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02692 0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
02693 9, 0, 0, 0, 10, 11, 61, 198, 63, 12,
02694 0, 13, 14, 15, 228, 229, 18, 19, 0, 0,
02695 0, 0, 0, 230, 231, 232, 23, 24, 25, 26,
02696 0, 0, 192, 0, 0, 0, 0, 0, 0, 29,
02697 0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
02698 40, 193, 41, 42, 0, 43, 44, 45, 0, 46,
02699 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02700 0, 0, 0, 0, 0, 0, 0, 0, 0, 194,
02701 0, 0, 195, 50, 0, 51, 52, 0, 0, 0,
02702 54, 55, 56, 57, 58, 59, 60, 0, 0, 0,
02703 0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
02704 0, 0, 0, 10, 11, 61, 198, 63, 12, 0,
02705 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02706 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02707 0, 192, 0, 0, 0, 0, 0, 0, 29, 0,
02708 0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02709 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02710 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02711 0, 0, 0, 0, 0, 0, 0, 0, 194, 0,
02712 0, 195, 50, 0, 51, 52, 0, 476, 0, 54,
02713 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02714 0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
02715 0, 0, 10, 11, 61, 198, 63, 12, 0, 13,
02716 14, 15, 228, 229, 18, 19, 0, 0, 0, 0,
02717 0, 230, 231, 232, 23, 24, 25, 26, 0, 0,
02718 192, 0, 0, 0, 0, 0, 0, 29, 0, 0,
02719 32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
02720 41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
02721 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02722 0, 0, 0, 0, 0, 0, 0, 194, 0, 0,
02723 195, 50, 0, 51, 52, 0, 196, 0, 54, 55,
02724 56, 57, 58, 59, 60, 0, 0, 0, 0, 0,
02725 0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
02726 0, 10, 11, 61, 198, 63, 12, 0, 13, 14,
02727 15, 228, 229, 18, 19, 0, 0, 0, 0, 0,
02728 230, 231, 232, 23, 24, 25, 26, 0, 0, 192,
02729 0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
02730 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
02731 42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
02732 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02733 0, 0, 0, 0, 0, 0, 194, 0, 0, 195,
02734 50, 0, 51, 52, 0, 758, 0, 54, 55, 56,
02735 57, 58, 59, 60, 0, 0, 0, 0, 0, 0,
02736 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02737 10, 11, 61, 198, 63, 12, 0, 13, 14, 15,
02738 228, 229, 18, 19, 0, 0, 0, 0, 0, 230,
02739 231, 232, 23, 24, 25, 26, 0, 0, 192, 0,
02740 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02741 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02742 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02743 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02744 0, 0, 0, 0, 0, 194, 0, 0, 195, 50,
02745 0, 51, 52, 0, 476, 0, 54, 55, 56, 57,
02746 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02747 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
02748 11, 61, 198, 63, 12, 0, 13, 14, 15, 228,
02749 229, 18, 19, 0, 0, 0, 0, 0, 230, 231,
02750 232, 23, 24, 25, 26, 0, 0, 192, 0, 0,
02751 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
02752 35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
02753 43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
02754 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02755 0, 0, 0, 0, 194, 0, 0, 195, 50, 0,
02756 51, 52, 0, 577, 0, 54, 55, 56, 57, 58,
02757 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02758 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
02759 61, 198, 63, 12, 0, 13, 14, 15, 228, 229,
02760 18, 19, 0, 0, 0, 0, 0, 230, 231, 232,
02761 23, 24, 25, 26, 0, 0, 192, 0, 0, 0,
02762 0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
02763 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02764 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02765 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02766 0, 0, 0, 194, 0, 0, 195, 50, 0, 51,
02767 52, 0, 0, 0, 54, 55, 56, 57, 58, 59,
02768 60, 0, 0, 0, 0, 0, 0, 0, 0, 5,
02769 6, 7, 0, 9, 0, 0, 0, 10, 11, 61,
02770 198, 63, 12, 0, 13, 14, 15, 16, 17, 18,
02771 19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
02772 24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
02773 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
02774 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02775 45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
02776 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02777 0, 0, 194, 0, 0, 195, 50, 0, 51, 52,
02778 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02779 0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
02780 7, 0, 9, 0, 0, 0, 10, 11, 61, 62,
02781 63, 12, 0, 13, 14, 15, 16, 17, 18, 19,
02782 0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
02783 25, 26, 0, 0, 192, 0, 0, 0, 0, 0,
02784 0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
02785 38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
02786 0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
02787 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02788 0, 194, 0, 0, 195, 50, 0, 51, 52, 0,
02789 0, 0, 54, 55, 56, 57, 58, 59, 60, 0,
02790 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02791 0, 9, 0, 0, 0, 10, 11, 61, 198, 63,
02792 12, 0, 13, 14, 15, 228, 229, 18, 19, 0,
02793 0, 0, 0, 0, 230, 231, 232, 23, 24, 25,
02794 26, 0, 0, 192, 0, 0, 0, 0, 0, 0,
02795 255, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02796 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02797 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02798 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02799 256, 0, 0, 300, 50, 0, 51, 52, 0, 301,
02800 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02801 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02802 10, 11, 0, 0, 0, 12, 257, 13, 14, 15,
02803 228, 229, 18, 19, 0, 0, 0, 0, 0, 230,
02804 231, 232, 23, 24, 25, 26, 0, 0, 192, 0,
02805 0, 0, 0, 0, 0, 255, 0, 0, 32, 33,
02806 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02807 0, 43, 44, 45, 0, 0, 0, 0, 0, 0,
02808 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02809 0, 0, 0, 0, 0, 342, 0, 0, 49, 50,
02810 0, 51, 52, 0, 53, 0, 54, 55, 56, 57,
02811 58, 59, 60, 0, 0, 0, 0, 5, 6, 7,
02812 0, 9, 0, 0, 0, 10, 11, 0, 0, 0,
02813 12, 257, 13, 14, 15, 228, 229, 18, 19, 0,
02814 0, 0, 0, 0, 230, 231, 232, 23, 24, 25,
02815 26, 0, 0, 192, 0, 0, 0, 0, 0, 0,
02816 255, 0, 0, 32, 33, 34, 349, 36, 37, 38,
02817 350, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02818 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02819 0, 0, 0, 0, 0, 0, 0, 351, 0, 0,
02820 352, 0, 0, 195, 50, 0, 51, 52, 0, 0,
02821 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02822 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02823 10, 11, 0, 0, 0, 12, 257, 13, 14, 15,
02824 228, 229, 18, 19, 0, 0, 0, 0, 0, 230,
02825 231, 232, 23, 24, 25, 26, 0, 0, 192, 0,
02826 0, 0, 0, 0, 0, 255, 0, 0, 32, 33,
02827 34, 349, 36, 37, 38, 350, 40, 0, 41, 42,
02828 0, 43, 44, 45, 0, 0, 0, 0, 0, 0,
02829 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02830 0, 0, 0, 0, 0, 352, 0, 0, 195, 50,
02831 0, 51, 52, 0, 0, 0, 54, 55, 56, 57,
02832 58, 59, 60, 0, 0, 0, 0, 5, 6, 7,
02833 0, 9, 0, 0, 0, 10, 11, 0, 0, 0,
02834 12, 257, 13, 14, 15, 228, 229, 18, 19, 0,
02835 0, 0, 0, 0, 230, 231, 232, 23, 24, 25,
02836 26, 0, 0, 192, 0, 0, 0, 0, 0, 0,
02837 255, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02838 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02839 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02840 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02841 256, 0, 0, 300, 50, 0, 51, 52, 0, 0,
02842 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02843 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02844 10, 11, 0, 0, 0, 12, 257, 13, 14, 15,
02845 228, 229, 18, 19, 0, 0, 0, 0, 0, 230,
02846 231, 232, 23, 24, 25, 26, 0, 0, 192, 0,
02847 0, 0, 0, 0, 0, 255, 0, 0, 32, 33,
02848 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02849 0, 43, 44, 45, 0, 0, 0, 0, 0, 0,
02850 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02851 0, 0, 0, 0, 0, 887, 0, 0, 195, 50,
02852 0, 51, 52, 0, 0, 0, 54, 55, 56, 57,
02853 58, 59, 60, 0, 0, 0, 0, 5, 6, 7,
02854 0, 9, 0, 0, 0, 10, 11, 0, 0, 0,
02855 12, 257, 13, 14, 15, 228, 229, 18, 19, 0,
02856 0, 0, 0, 0, 230, 231, 232, 23, 24, 25,
02857 26, 0, 0, 192, 0, 0, 0, 0, 0, 0,
02858 255, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02859 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02860 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02861 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02862 897, 0, 0, 195, 50, 0, 51, 52, 0, 0,
02863 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02864 0, 0, 0, 584, 524, 0, 0, 585, 0, 0,
02865 0, 0, 0, 0, 0, 0, 257, 155, 156, 157,
02866 158, 159, 160, 161, 162, 163, 0, 0, 164, 165,
02867 0, 0, 166, 167, 168, 169, 0, 0, 0, 0,
02868 0, 0, 0, 0, 0, 0, 170, 0, 0, 0,
02869 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02870 0, 0, 0, 171, 172, 173, 174, 175, 176, 177,
02871 178, 179, 180, 0, 181, 182, 0, 0, 0, 0,
02872 605, 516, 0, 0, 606, 0, 0, 0, 0, 0,
02873 0, 0, 183, 217, 155, 156, 157, 158, 159, 160,
02874 161, 162, 163, 0, 0, 164, 165, 0, 0, 166,
02875 167, 168, 169, 0, 0, 0, 0, 0, 0, 0,
02876 0, 0, 0, 170, 0, 0, 0, 0, 0, 0,
02877 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02878 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
02879 0, 181, 182, 0, 0, 0, 0, 608, 524, 0,
02880 0, 609, 0, 0, 0, 0, 0, 0, 0, 183,
02881 217, 155, 156, 157, 158, 159, 160, 161, 162, 163,
02882 0, 0, 164, 165, 0, 0, 166, 167, 168, 169,
02883 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02884 170, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02885 0, 0, 0, 0, 0, 0, 0, 171, 172, 173,
02886 174, 175, 176, 177, 178, 179, 180, 0, 181, 182,
02887 0, 0, 0, 0, 679, 516, 0, 0, 680, 0,
02888 0, 0, 0, 0, 0, 0, 183, 217, 155, 156,
02889 157, 158, 159, 160, 161, 162, 163, 0, 0, 164,
02890 165, 0, 0, 166, 167, 168, 169, 0, 0, 0,
02891 0, 0, 0, 0, 0, 0, 0, 170, 0, 0,
02892 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02893 0, 0, 0, 0, 171, 172, 173, 174, 175, 176,
02894 177, 178, 179, 180, 0, 181, 182, 0, 0, 0,
02895 0, 682, 524, 0, 0, 683, 0, 0, 0, 0,
02896 0, 0, 0, 183, 217, 155, 156, 157, 158, 159,
02897 160, 161, 162, 163, 0, 0, 164, 165, 0, 0,
02898 166, 167, 168, 169, 0, 0, 0, 0, 0, 0,
02899 0, 0, 0, 0, 170, 0, 0, 0, 0, 0,
02900 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02901 0, 171, 172, 173, 174, 175, 176, 177, 178, 179,
02902 180, 0, 181, 182, 0, 0, 0, 0, 689, 516,
02903 0, 0, 690, 0, 0, 0, 0, 0, 0, 0,
02904 183, 217, 155, 156, 157, 158, 159, 160, 161, 162,
02905 163, 0, 0, 164, 165, 0, 0, 166, 167, 168,
02906 169, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02907 0, 170, 0, 0, 0, 0, 0, 0, 0, 0,
02908 0, 0, 0, 0, 0, 0, 0, 0, 171, 172,
02909 173, 174, 175, 176, 177, 178, 179, 180, 0, 181,
02910 182, 0, 0, 0, 0, 562, 524, 0, 0, 563,
02911 0, 0, 0, 0, 0, 0, 0, 183, 217, 155,
02912 156, 157, 158, 159, 160, 161, 162, 163, 0, 0,
02913 164, 165, 0, 0, 166, 167, 168, 169, 0, 0,
02914 0, 0, 0, 0, 0, 0, 0, 0, 170, 0,
02915 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02916 0, 0, 0, 0, 0, 171, 172, 173, 174, 175,
02917 176, 177, 178, 179, 180, 0, 181, 182, 0, 0,
02918 0, 0, 949, 516, 0, 0, 950, 0, 0, 0,
02919 0, 0, 0, 0, 183, 217, 155, 156, 157, 158,
02920 159, 160, 161, 162, 163, 0, 0, 164, 165, 0,
02921 0, 166, 167, 168, 169, 0, 0, 0, 0, 0,
02922 0, 0, 0, 0, 0, 170, 0, 0, 0, 0,
02923 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02924 0, 0, 171, 172, 173, 174, 175, 176, 177, 178,
02925 179, 180, 0, 181, 182, 0, 0, 0, 0, 955,
02926 516, 0, 0, 956, 0, 0, 0, 0, 0, 0,
02927 0, 183, 217, 155, 156, 157, 158, 159, 160, 161,
02928 162, 163, 0, 0, 164, 165, 0, 0, 166, 167,
02929 168, 169, 0, 0, 0, 0, 0, 0, 0, 0,
02930 0, 0, 170, 0, 0, 0, 0, 0, 0, 0,
02931 0, 0, 0, 0, 0, 0, 0, 0, 0, 171,
02932 172, 173, 174, 175, 176, 177, 178, 179, 180, 0,
02933 181, 182, 0, 0, 0, 0, 958, 524, 0, 0,
02934 959, 0, 0, 0, 0, 0, 0, 0, 183, 217,
02935 155, 156, 157, 158, 159, 160, 161, 162, 163, 0,
02936 0, 164, 165, 0, 0, 166, 167, 168, 169, 0,
02937 0, 0, 0, 0, 0, 0, 0, 0, 0, 170,
02938 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02939 0, 0, 0, 0, 0, 0, 171, 172, 173, 174,
02940 175, 176, 177, 178, 179, 180, 0, 181, 182, 0,
02941 0, 0, 0, 562, 524, 0, 0, 563, 0, 0,
02942 0, 0, 0, 0, 0, 183, 217, 155, 156, 157,
02943 158, 159, 160, 161, 162, 163, 0, 0, 164, 165,
02944 0, 0, 166, 167, 168, 169, 0, 0, 0, 0,
02945 0, 0, 0, 0, 0, 0, 170, 0, 0, 0,
02946 0, 0, 0, 0, 705, 0, 0, 0, 0, 0,
02947 0, 0, 0, 171, 172, 173, 174, 175, 176, 177,
02948 178, 179, 180, 650, 181, 182, 0, 0, 304, 305,
02949 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
02950 316, 0, 183, 317, 318, 0, 0, 304, 305, 306,
02951 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
02952 0, 0, 317, 318, 0, 0, 0, 0, 0, 0,
02953 319, 0, 320, 321, 322, 323, 324, 325, 326, 327,
02954 328, 329, 0, 0, 0, 0, 0, 0, 0, 319,
02955 0, 320, 321, 322, 323, 324, 325, 326, 327, 328,
02956 329
02957 };
02958
02959 #define yypact_value_is_default(yystate) \
02960 ((yystate) == (-778))
02961
02962 #define yytable_value_is_error(yytable_value) \
02963 ((yytable_value) == (-566))
02964
02965 static const yytype_int16 yycheck[] =
02966 {
02967 2, 16, 17, 55, 2, 20, 4, 51, 28, 75,
02968 51, 52, 446, 336, 210, 8, 49, 537, 16, 17,
02969 303, 8, 20, 27, 536, 29, 556, 53, 83, 583,
02970 446, 86, 249, 331, 65, 28, 253, 4, 90, 442,
02971 8, 28, 748, 272, 13, 274, 352, 276, 49, 51,
02972 52, 49, 50, 607, 86, 53, 735, 667, 813, 836,
02973 28, 671, 641, 811, 62, 732, 615, 1, 22, 27,
02974 16, 17, 29, 50, 20, 25, 330, 75, 332, 482,
02975 53, 566, 567, 62, 82, 83, 26, 55, 86, 87,
02976 88, 89, 728, 13, 13, 61, 394, 25, 22, 13,
02977 61, 85, 75, 239, 76, 82, 83, 37, 38, 86,
02978 140, 398, 390, 749, 87, 88, 89, 147, 372, 373,
02979 398, 85, 90, 871, 558, 87, 85, 681, 65, 109,
02980 15, 13, 17, 0, 25, 25, 147, 13, 692, 393,
02981 106, 395, 114, 104, 105, 432, 444, 109, 925, 86,
02982 107, 25, 56, 732, 108, 139, 735, 25, 688, 914,
02983 140, 2, 195, 4, 300, 419, 696, 834, 916, 25,
02984 140, 140, 25, 722, 723, 139, 145, 147, 147, 113,
02985 139, 59, 60, 889, 108, 146, 620, 145, 85, 147,
02986 140, 445, 258, 655, 227, 943, 136, 195, 877, 214,
02987 662, 216, 217, 205, 620, 136, 239, 641, 210, 241,
02988 241, 145, 140, 147, 881, 217, 214, 147, 216, 217,
02989 146, 706, 220, 142, 222, 145, 145, 147, 147, 227,
02990 459, 145, 26, 147, 289, 290, 291, 292, 239, 146,
02991 238, 239, 139, 220, 542, 222, 649, 553, 858, 140,
02992 140, 255, 142, 25, 298, 834, 554, 836, 28, 303,
02993 258, 695, 811, 145, 813, 147, 140, 300, 214, 145,
02994 216, 147, 140, 99, 142, 301, 109, 26, 232, 695,
02995 792, 235, 337, 338, 140, 258, 25, 140, 87, 543,
02996 288, 289, 290, 291, 292, 293, 294, 295, 877, 300,
02997 298, 555, 300, 301, 241, 303, 142, 339, 220, 85,
02998 109, 147, 289, 290, 291, 292, 331, 294, 295, 298,
02999 140, 288, 871, 872, 303, 37, 38, 26, 301, 331,
03000 860, 243, 145, 331, 147, 333, 85, 109, 858, 337,
03001 338, 140, 136, 109, 85, 87, 925, 26, 142, 390,
03002 87, 85, 140, 351, 677, 87, 85, 142, 85, 56,
03003 337, 338, 330, 139, 26, 914, 109, 916, 140, 87,
03004 109, 143, 109, 88, 351, 147, 442, 109, 332, 394,
03005 378, 379, 912, 666, 580, 602, 85, 136, 429, 138,
03006 139, 109, 394, 413, 943, 85, 394, 238, 139, 378,
03007 379, 140, 339, 957, 143, 139, 85, 85, 147, 138,
03008 139, 138, 139, 142, 416, 52, 482, 354, 416, 56,
03009 413, 140, 140, 85, 87, 393, 413, 425, 85, 444,
03010 140, 865, 85, 85, 59, 60, 85, 136, 142, 138,
03011 139, 395, 444, 142, 442, 413, 444, 288, 138, 139,
03012 418, 136, 293, 142, 85, 14, 15, 136, 85, 138,
03013 139, 139, 85, 142, 68, 419, 564, 565, 85, 442,
03014 142, 85, 143, 475, 136, 443, 138, 139, 85, 109,
03015 142, 138, 139, 144, 482, 138, 139, 139, 400, 138,
03016 139, 445, 404, 137, 538, 407, 85, 87, 56, 532,
03017 504, 534, 52, 106, 54, 55, 56, 57, 139, 482,
03018 422, 138, 139, 106, 85, 427, 139, 85, 522, 109,
03019 641, 138, 139, 846, 138, 139, 528, 542, 530, 852,
03020 140, 138, 139, 87, 532, 87, 534, 603, 87, 554,
03021 542, 68, 68, 52, 542, 54, 55, 56, 57, 138,
03022 139, 17, 554, 140, 574, 109, 554, 109, 556, 557,
03023 109, 145, 564, 565, 566, 567, 520, 138, 139, 481,
03024 138, 139, 56, 541, 528, 416, 61, 94, 580, 583,
03025 557, 574, 68, 649, 425, 553, 140, 574, 140, 543,
03026 140, 140, 52, 25, 592, 597, 520, 143, 535, 536,
03027 137, 555, 140, 607, 528, 603, 574, 140, 140, 642,
03028 564, 565, 549, 61, 735, 592, 87, 738, 146, 104,
03029 105, 106, 666, 87, 626, 87, 628, 140, 630, 684,
03030 603, 140, 687, 119, 120, 121, 140, 935, 109, 641,
03031 564, 565, 596, 597, 642, 109, 698, 109, 61, 10,
03032 68, 649, 8, 54, 652, 653, 104, 105, 106, 13,
03033 658, 659, 63, 64, 666, 667, 109, 669, 61, 671,
03034 703, 704, 137, 652, 653, 52, 649, 681, 140, 658,
03035 659, 61, 936, 140, 140, 65, 684, 140, 692, 687,
03036 688, 104, 105, 106, 52, 140, 729, 730, 696, 117,
03037 118, 119, 120, 121, 706, 703, 704, 684, 741, 111,
03038 687, 104, 105, 106, 144, 836, 15, 838, 52, 140,
03039 54, 55, 56, 57, 104, 105, 728, 782, 145, 114,
03040 698, 729, 730, 193, 109, 140, 196, 197, 40, 41,
03041 42, 43, 44, 741, 140, 140, 779, 749, 685, 751,
03042 10, 753, 754, 786, 787, 89, 877, 790, 879, 140,
03043 697, 95, 883, 88, 16, 17, 9, 137, 20, 10,
03044 10, 769, 140, 806, 137, 777, 54, 55, 780, 57,
03045 140, 779, 694, 140, 782, 63, 64, 140, 786, 787,
03046 769, 140, 790, 137, 46, 47, 114, 140, 140, 51,
03047 52, 137, 140, 715, 925, 782, 927, 56, 806, 930,
03048 62, 63, 140, 140, 726, 416, 849, 819, 820, 140,
03049 822, 56, 824, 825, 945, 140, 140, 140, 87, 827,
03050 142, 52, 142, 54, 55, 56, 57, 539, 298, 89,
03051 889, 938, 722, 303, 92, 937, 967, 845, 95, 57,
03052 -1, 849, 90, 865, 827, 792, 858, 794, 68, 834,
03053 732, 52, 860, 54, 55, 56, 57, -1, 89, 902,
03054 -1, 904, 845, 83, 84, 96, -1, 910, 52, -1,
03055 54, 55, 56, 57, -1, -1, -1, 799, -1, 891,
03056 892, 893, -1, 895, 896, 116, -1, 52, 810, 54,
03057 55, 56, 57, 815, 902, -1, 904, 117, 118, 119,
03058 120, 121, 910, -1, 912, 89, 918, 919, 920, 921,
03059 935, 95, -1, -1, -1, -1, -1, -1, -1, 389,
03060 390, -1, -1, 935, 89, 937, 938, 935, 398, -1,
03061 -1, 193, -1, -1, 196, 197, 198, -1, -1, 951,
03062 952, 953, 954, 957, -1, 923, 52, -1, 54, 55,
03063 56, 57, 214, 965, 216, 217, 934, -1, -1, 429,
03064 -1, 973, 432, -1, 676, 52, -1, 54, 55, 56,
03065 57, -1, 936, -1, -1, -1, -1, -1, -1, -1,
03066 -1, 693, -1, 89, -1, -1, -1, -1, -1, 95,
03067 96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03068 -1, -1, 89, -1, -1, -1, 476, -1, 95, 96,
03069 116, -1, -1, 119, -1, -1, -1, -1, -1, -1,
03070 -1, -1, -1, 2, -1, 4, -1, -1, -1, 116,
03071 -1, -1, 119, -1, -1, -1, 298, -1, -1, 145,
03072 -1, 303, 304, 305, 306, 307, 308, 309, 310, 311,
03073 312, 313, 314, 315, 316, 317, 318, 319, 320, 321,
03074 322, 323, 324, 325, 326, 327, 328, 329, 538, 331,
03075 49, 783, -1, 785, 53, 52, -1, 54, 55, 56,
03076 57, -1, -1, 795, -1, -1, -1, -1, 800, -1,
03077 -1, -1, -1, -1, -1, -1, 75, -1, -1, -1,
03078 -1, 2, -1, 4, -1, -1, -1, 577, 87, 88,
03079 89, 90, 89, -1, -1, -1, 378, 379, 95, 96,
03080 -1, -1, -1, -1, -1, -1, 388, 389, 390, -1,
03081 -1, -1, 394, -1, 396, 397, 398, -1, -1, 116,
03082 -1, -1, 119, 855, 856, -1, -1, -1, 49, 628,
03083 -1, 630, 53, 415, -1, -1, 68, 52, 420, 54,
03084 55, 56, 57, -1, -1, 142, -1, 429, -1, -1,
03085 432, 83, 84, 2, 75, 4, 646, -1, -1, -1,
03086 -1, -1, 444, -1, -1, -1, 87, 88, 89, -1,
03087 2, -1, 4, -1, 89, -1, 666, -1, -1, 911,
03088 95, 96, 464, 465, 116, 117, 118, 119, 120, 121,
03089 -1, -1, -1, -1, 476, -1, 195, -1, -1, -1,
03090 49, 116, -1, -1, 119, 0, -1, 939, -1, 941,
03091 -1, -1, -1, 8, 9, 10, -1, 49, 13, 14,
03092 15, 52, 17, 54, 55, 56, 57, 142, 227, -1,
03093 720, -1, 27, -1, -1, -1, -1, -1, 87, 238,
03094 239, -1, 37, 38, -1, 40, 41, 42, 43, 44,
03095 -1, -1, 751, -1, 753, 754, 538, -1, 89, 258,
03096 542, 68, -1, -1, 95, 96, -1, -1, 758, -1,
03097 -1, -1, 554, -1, 195, -1, 83, 84, -1, -1,
03098 -1, -1, -1, -1, -1, 116, -1, -1, 119, 288,
03099 85, -1, -1, -1, 293, 577, -1, -1, -1, 789,
03100 -1, 300, 301, -1, -1, -1, 227, 114, 115, 116,
03101 117, 118, 119, 120, 121, -1, -1, 238, 239, -1,
03102 819, 820, -1, 822, -1, 824, 825, -1, -1, -1,
03103 -1, -1, -1, -1, 333, -1, -1, 258, -1, -1,
03104 -1, -1, 137, -1, 139, -1, 195, 142, 143, -1,
03105 145, -1, 147, -1, -1, -1, -1, -1, -1, -1,
03106 -1, -1, -1, 195, 646, -1, -1, 288, 650, -1,
03107 652, 653, 293, -1, -1, -1, 658, 659, 227, 300,
03108 301, -1, -1, -1, 666, -1, -1, -1, -1, 238,
03109 239, -1, 891, 892, 893, 227, 895, 896, -1, -1,
03110 -1, -1, -1, -1, -1, -1, 238, 239, -1, -1,
03111 -1, -1, 333, -1, -1, -1, -1, 416, -1, 918,
03112 919, 920, 921, 705, -1, -1, 425, -1, 710, 711,
03113 -1, 713, 714, -1, -1, -1, -1, -1, 720, 288,
03114 -1, -1, -1, 442, 293, -1, -1, -1, -1, -1,
03115 -1, 300, 951, 952, 953, 954, 288, -1, -1, -1,
03116 -1, 293, -1, -1, -1, -1, 965, -1, 300, -1,
03117 -1, -1, -1, -1, 973, -1, 758, -1, -1, -1,
03118 762, -1, -1, 482, 333, -1, -1, 769, -1, -1,
03119 -1, -1, -1, -1, -1, 416, -1, -1, -1, -1,
03120 -1, 333, -1, -1, 425, -1, -1, 789, -1, -1,
03121 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03122 -1, 442, -1, -1, -1, 807, -1, -1, -1, -1,
03123 -1, -1, -1, 532, -1, 534, -1, -1, -1, -1,
03124 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03125 68, 69, 70, 71, 72, 73, 74, 556, -1, 77,
03126 78, 482, -1, -1, -1, 83, 84, 416, -1, -1,
03127 -1, -1, -1, -1, -1, -1, 425, -1, -1, -1,
03128 -1, -1, -1, -1, 416, -1, -1, -1, -1, -1,
03129 44, -1, -1, 425, 112, 113, 114, 115, 116, 117,
03130 118, 119, 120, 121, 603, -1, -1, -1, -1, -1,
03131 -1, 532, -1, 534, 68, 69, 70, 71, 72, 73,
03132 74, 75, 76, 77, 78, 79, 80, -1, -1, 83,
03133 84, -1, -1, -1, -1, 556, -1, -1, -1, -1,
03134 -1, -1, -1, 642, -1, -1, -1, -1, -1, -1,
03135 649, -1, -1, 935, -1, -1, 110, -1, 112, 113,
03136 114, 115, 116, 117, 118, 119, 120, 121, -1, -1,
03137 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03138 -1, -1, 603, 532, -1, 534, 140, -1, -1, 688,
03139 -1, -1, -1, -1, -1, -1, -1, 696, -1, -1,
03140 532, -1, 534, -1, 703, 704, -1, 556, -1, -1,
03141 -1, -1, -1, 634, -1, -1, -1, -1, -1, -1,
03142 -1, 642, -1, -1, 556, -1, -1, -1, 649, -1,
03143 729, 730, -1, -1, 52, 53, -1, -1, 56, -1,
03144 -1, -1, 741, -1, -1, -1, -1, -1, 66, 67,
03145 68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
03146 78, -1, -1, 81, 82, 83, 84, 688, -1, -1,
03147 -1, -1, -1, -1, -1, 696, -1, 95, -1, -1,
03148 779, -1, 703, 704, -1, -1, -1, 786, 787, -1,
03149 -1, 790, -1, 642, 112, 113, 114, 115, 116, 117,
03150 118, 119, 120, 121, -1, 123, 124, 806, 729, 730,
03151 642, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03152 741, -1, -1, 141, 142, -1, -1, -1, 827, -1,
03153 -1, -1, -1, -1, -1, -1, -1, -1, -1, 688,
03154 -1, -1, -1, -1, -1, -1, 845, 696, -1, -1,
03155 849, -1, -1, -1, 703, 704, 688, -1, 779, -1,
03156 -1, 860, -1, -1, 696, 786, 787, -1, -1, 790,
03157 -1, 703, 704, -1, -1, -1, -1, -1, -1, -1,
03158 729, 730, -1, -1, -1, 806, -1, -1, -1, -1,
03159 -1, -1, 741, -1, -1, -1, -1, 729, 730, -1,
03160 -1, -1, -1, 902, -1, 904, 827, -1, -1, 741,
03161 -1, 910, -1, 912, -1, -1, -1, 68, 69, 70,
03162 71, 72, 73, 74, 845, -1, 77, 78, 849, -1,
03163 779, -1, 83, 84, -1, -1, -1, 786, 787, 860,
03164 -1, 790, -1, 46, 47, -1, -1, 779, 51, 52,
03165 53, -1, -1, -1, 786, 787, -1, 806, 790, -1,
03166 63, 112, 113, 114, 115, 116, 117, 118, 119, 120,
03167 121, -1, 75, -1, 806, -1, -1, -1, -1, -1,
03168 -1, 902, -1, 904, 87, 88, 89, -1, -1, 910,
03169 -1, 912, -1, -1, -1, -1, 845, -1, -1, -1,
03170 849, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03171 -1, 860, -1, -1, -1, -1, -1, 849, -1, -1,
03172 -1, -1, -1, -1, -1, -1, -1, -1, 860, -1,
03173 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03174 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03175 -1, -1, -1, 902, -1, 904, -1, -1, -1, -1,
03176 -1, 910, -1, 912, -1, -1, -1, -1, -1, -1,
03177 902, -1, 904, -1, -1, -1, -1, -1, 910, -1,
03178 912, -1, 52, 53, -1, -1, 56, -1, -1, -1,
03179 193, -1, -1, 196, 197, 198, 66, 67, 68, 69,
03180 70, 71, 72, 73, 74, -1, -1, 77, 78, -1,
03181 -1, 81, 82, 83, 84, -1, -1, 68, 69, 70,
03182 71, 72, 73, 74, 75, 95, 77, 78, -1, -1,
03183 -1, -1, 83, 84, -1, -1, -1, -1, -1, -1,
03184 -1, -1, 112, 113, 114, 115, 116, 117, 118, 119,
03185 120, 121, -1, 123, 124, 258, -1, -1, -1, -1,
03186 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
03187 121, 141, 142, -1, -1, -1, -1, -1, -1, -1,
03188 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
03189 74, 75, 76, 77, 78, 79, 80, -1, 301, 83,
03190 84, 304, 305, 306, 307, 308, 309, 310, 311, 312,
03191 313, 314, 315, 316, 317, 318, 319, 320, 321, 322,
03192 323, 324, 325, 326, 327, 328, 329, -1, 112, 113,
03193 114, 115, 116, 117, 118, 119, 120, 121, 52, 53,
03194 -1, -1, 56, -1, -1, -1, -1, -1, -1, -1,
03195 -1, -1, 66, 67, 68, 69, 70, 71, 72, 73,
03196 74, -1, -1, 77, 78, -1, -1, 81, 82, 83,
03197 84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03198 -1, 95, -1, -1, -1, 388, 389, 390, -1, -1,
03199 -1, -1, -1, 396, 397, 398, -1, -1, 112, 113,
03200 114, 115, 116, 117, 118, 119, 120, 121, -1, 123,
03201 124, -1, 415, -1, -1, -1, -1, 420, -1, -1,
03202 -1, -1, -1, -1, -1, -1, 429, 141, 142, 432,
03203 -1, -1, -1, -1, -1, -1, -1, -1, -1, 442,
03204 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03205 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03206 -1, 464, 465, -1, 0, 1, -1, 3, 4, 5,
03207 6, 7, -1, 476, -1, 11, 12, -1, -1, 482,
03208 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03209 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03210 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03211 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
03212 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03213 66, 67, -1, -1, -1, 538, -1, -1, -1, -1,
03214 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03215 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03216 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03217 -1, -1, -1, -1, 577, -1, -1, -1, -1, -1,
03218 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1,
03219 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03220 603, -1, -1, -1, -1, -1, -1, -1, -1, 145,
03221 -1, 147, -1, -1, -1, -1, -1, -1, -1, -1,
03222 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03223 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03224 -1, -1, -1, 646, -1, -1, 649, 650, -1, -1,
03225 -1, 0, -1, -1, -1, -1, -1, -1, -1, 8,
03226 9, 10, -1, 666, 13, 14, 15, -1, 17, -1,
03227 -1, -1, -1, -1, -1, -1, -1, -1, 27, 28,
03228 29, -1, -1, -1, -1, -1, -1, -1, 37, 38,
03229 -1, 40, 41, 42, 43, 44, -1, -1, -1, -1,
03230 -1, -1, 705, -1, -1, -1, -1, 710, 711, -1,
03231 713, 714, -1, -1, -1, -1, -1, 720, -1, 68,
03232 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
03233 79, 80, -1, -1, 83, 84, 85, -1, 87, 88,
03234 -1, -1, -1, -1, -1, 94, -1, -1, -1, -1,
03235 -1, -1, -1, -1, -1, 758, -1, -1, 107, 762,
03236 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
03237 119, 120, 121, -1, -1, -1, -1, -1, -1, -1,
03238 -1, -1, -1, -1, -1, -1, 789, -1, 137, 138,
03239 139, 140, 0, -1, 143, 144, 145, -1, 147, -1,
03240 8, 9, 10, -1, 807, 13, 14, 15, -1, 17,
03241 -1, -1, -1, -1, -1, -1, -1, -1, 26, 27,
03242 28, -1, -1, -1, 827, -1, -1, -1, -1, 37,
03243 38, -1, 40, 41, 42, 43, 44, -1, -1, -1,
03244 -1, -1, 845, 68, 69, 70, 71, 72, 73, 74,
03245 75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
03246 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
03247 78, 79, 80, -1, -1, 83, 84, 85, -1, -1,
03248 88, -1, -1, -1, -1, 110, 94, 112, 113, 114,
03249 115, 116, 117, 118, 119, 120, 121, -1, -1, -1,
03250 -1, -1, 110, -1, 112, 113, 114, 115, 116, 117,
03251 118, 119, 120, 121, -1, -1, -1, -1, -1, -1,
03252 -1, -1, 147, -1, -1, -1, -1, -1, 136, 137,
03253 138, 139, 140, 0, 142, 143, 144, 145, -1, 147,
03254 -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
03255 17, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03256 27, 28, 29, -1, -1, -1, -1, -1, -1, -1,
03257 37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
03258 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
03259 74, 75, 76, 77, 78, 79, 80, -1, -1, 83,
03260 84, 68, 69, 70, 71, 72, 73, 74, 75, 76,
03261 77, 78, 79, 80, -1, -1, 83, 84, 85, -1,
03262 -1, 88, -1, -1, -1, -1, 110, 94, 112, 113,
03263 114, 115, 116, 117, 118, 119, 120, 121, -1, -1,
03264 107, -1, -1, 110, 111, 112, 113, 114, 115, 116,
03265 117, 118, 119, 120, 121, -1, -1, -1, -1, -1,
03266 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03267 137, 138, 139, 140, 0, -1, 143, 144, 145, -1,
03268 147, -1, 8, 9, 10, -1, -1, 13, 14, 15,
03269 -1, 17, -1, -1, -1, -1, -1, -1, -1, -1,
03270 26, 27, 28, -1, -1, -1, -1, -1, -1, -1,
03271 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1,
03272 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03273 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03274 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
03275 76, 77, 78, 79, 80, -1, -1, 83, 84, 85,
03276 -1, -1, 88, -1, -1, -1, -1, -1, 94, -1,
03277 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03278 -1, -1, -1, -1, 110, -1, 112, 113, 114, 115,
03279 116, 117, 118, 119, 120, 121, -1, -1, -1, -1,
03280 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03281 136, 137, 138, 139, 140, 0, 142, 143, 144, 145,
03282 -1, 147, -1, 8, 9, 10, -1, -1, 13, 14,
03283 15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
03284 -1, -1, 27, 28, -1, -1, -1, -1, -1, -1,
03285 -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
03286 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03287 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03288 -1, -1, -1, 68, 69, 70, 71, 72, 73, 74,
03289 75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
03290 85, -1, -1, 88, -1, -1, -1, -1, -1, 94,
03291 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03292 -1, -1, -1, -1, -1, 110, -1, 112, 113, 114,
03293 115, 116, 117, 118, 119, 120, 121, -1, -1, -1,
03294 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03295 -1, -1, 137, 138, 139, 140, 0, 142, 143, 144,
03296 145, -1, 147, -1, 8, 9, 10, -1, -1, -1,
03297 14, 15, -1, 17, -1, -1, -1, -1, -1, -1,
03298 -1, -1, 26, -1, -1, -1, -1, -1, -1, -1,
03299 -1, -1, -1, 37, 38, -1, 40, 41, 42, 43,
03300 44, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03301 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03302 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
03303 74, 75, 76, 77, 78, 79, 80, -1, -1, 83,
03304 84, 85, 0, 87, -1, -1, -1, -1, -1, -1,
03305 8, 9, 10, -1, -1, -1, 14, 15, -1, 17,
03306 -1, -1, -1, -1, -1, 109, 110, -1, 112, 113,
03307 114, 115, 116, 117, 118, 119, 120, 121, -1, 37,
03308 38, -1, 40, 41, 42, 43, 44, -1, -1, -1,
03309 -1, -1, 136, 137, 138, 139, 140, -1, -1, 143,
03310 -1, 145, -1, 147, -1, -1, -1, -1, -1, -1,
03311 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
03312 78, 79, 80, -1, -1, 83, 84, 85, -1, 87,
03313 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03314 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03315 -1, 109, 110, -1, 112, 113, 114, 115, 116, 117,
03316 118, 119, 120, 121, -1, -1, -1, -1, -1, -1,
03317 -1, -1, -1, -1, -1, -1, -1, -1, -1, 137,
03318 138, 139, 140, -1, -1, 143, -1, 145, 1, 147,
03319 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
03320 -1, -1, 15, 16, -1, 18, 19, 20, 21, 22,
03321 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03322 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03323 -1, -1, 45, 46, -1, 48, 49, 50, 51, 52,
03324 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03325 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03326 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03327 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03328 93, -1, 95, -1, 97, 98, 99, 100, 101, 102,
03329 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03330 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
03331 123, 124, -1, -1, -1, -1, -1, -1, -1, -1,
03332 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03333 -1, -1, 145, 1, 147, 3, 4, 5, 6, 7,
03334 -1, -1, 10, 11, 12, -1, 14, 15, 16, -1,
03335 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03336 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03337 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03338 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03339 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03340 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03341 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03342 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03343 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03344 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03345 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03346 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03347 -1, -1, -1, -1, -1, -1, -1, 145, 1, 147,
03348 3, 4, 5, 6, 7, -1, -1, 10, 11, 12,
03349 -1, -1, 15, 16, 17, 18, 19, 20, 21, 22,
03350 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03351 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03352 -1, -1, 45, 46, -1, 48, 49, 50, 51, 52,
03353 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03354 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03355 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03356 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03357 93, -1, 95, -1, 97, 98, 99, 100, 101, 102,
03358 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03359 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
03360 123, 124, -1, -1, -1, -1, -1, -1, 1, -1,
03361 3, 4, 5, 6, 7, -1, -1, -1, 11, 12,
03362 -1, -1, 145, 16, 147, 18, 19, 20, 21, 22,
03363 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03364 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03365 -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
03366 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03367 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03368 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03369 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03370 93, -1, 95, -1, 97, 98, 99, 100, 101, 102,
03371 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03372 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
03373 123, 124, -1, -1, -1, -1, -1, -1, -1, -1,
03374 -1, -1, -1, -1, 137, -1, -1, -1, -1, -1,
03375 -1, -1, 145, 1, 147, 3, 4, 5, 6, 7,
03376 -1, -1, 10, 11, 12, -1, -1, 15, 16, -1,
03377 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03378 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03379 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03380 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03381 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03382 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03383 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03384 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03385 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03386 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03387 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03388 -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
03389 -1, 9, 10, 11, 12, -1, -1, 145, 16, 147,
03390 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03391 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03392 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03393 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03394 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03395 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03396 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03397 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03398 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03399 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03400 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03401 -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
03402 -1, -1, -1, 11, 12, -1, -1, 145, 16, 147,
03403 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03404 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03405 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03406 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03407 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03408 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03409 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03410 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03411 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03412 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03413 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03414 -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
03415 -1, -1, -1, 11, 12, 143, -1, 145, 16, 147,
03416 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03417 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03418 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03419 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03420 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03421 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03422 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03423 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03424 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03425 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03426 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03427 -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
03428 -1, -1, -1, 11, 12, 143, -1, 145, 16, 147,
03429 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03430 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03431 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1,
03432 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03433 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03434 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03435 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03436 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03437 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03438 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03439 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03440 -1, -1, -1, -1, -1, -1, -1, -1, -1, 137,
03441 -1, -1, -1, -1, -1, -1, -1, 145, 1, 147,
03442 3, 4, 5, 6, 7, -1, -1, 10, 11, 12,
03443 -1, -1, -1, 16, -1, 18, 19, 20, 21, 22,
03444 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03445 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03446 -1, -1, 45, 46, -1, 48, 49, 50, 51, 52,
03447 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03448 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03449 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03450 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03451 93, -1, 95, -1, 97, 98, 99, 100, 101, 102,
03452 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03453 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
03454 123, 124, -1, -1, -1, -1, -1, -1, -1, -1,
03455 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
03456 -1, -1, 145, 16, 147, 18, 19, 20, 21, 22,
03457 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03458 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03459 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03460 53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
03461 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03462 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03463 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03464 93, -1, 95, 96, 97, 98, 99, 100, 101, 102,
03465 103, -1, -1, -1, -1, -1, -1, -1, -1, 3,
03466 4, 5, -1, 7, -1, -1, -1, 11, 12, 122,
03467 123, 124, 16, -1, 18, 19, 20, 21, 22, 23,
03468 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03469 34, 35, 36, -1, 147, 39, -1, -1, -1, -1,
03470 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03471 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03472 64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
03473 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03474 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03475 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03476 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03477 -1, -1, -1, -1, -1, -1, -1, -1, 122, 123,
03478 124, -1, -1, -1, -1, -1, -1, -1, -1, 3,
03479 4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
03480 -1, 145, 16, 147, 18, 19, 20, 21, 22, 23,
03481 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03482 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03483 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03484 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03485 64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
03486 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03487 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03488 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03489 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
03490 5, 6, 7, -1, -1, -1, 11, 12, 122, 123,
03491 124, 16, -1, 18, 19, 20, 21, 22, 23, 24,
03492 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
03493 35, 36, -1, 147, 39, -1, -1, -1, -1, -1,
03494 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
03495 55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
03496 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03497 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03498 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03499 95, -1, 97, 98, 99, 100, 101, 102, 103, -1,
03500 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03501 -1, -1, -1, -1, -1, -1, -1, 122, 123, 124,
03502 -1, -1, -1, -1, -1, -1, 3, 4, 5, 6,
03503 7, -1, -1, -1, 11, 12, -1, -1, -1, 16,
03504 145, 18, 19, 20, 21, 22, 23, 24, -1, -1,
03505 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
03506 -1, -1, 39, -1, -1, -1, -1, -1, 45, 46,
03507 -1, 48, 49, 50, 51, 52, 53, 54, 55, 56,
03508 57, -1, 59, 60, -1, 62, 63, 64, -1, 66,
03509 67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03510 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
03511 -1, -1, 89, 90, -1, 92, 93, -1, 95, -1,
03512 97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
03513 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03514 -1, -1, -1, -1, -1, 122, 123, 124, -1, -1,
03515 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03516 -1, -1, -1, -1, -1, -1, -1, -1, 145, 3,
03517 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
03518 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
03519 24, 25, 26, -1, -1, -1, 30, 31, 32, 33,
03520 34, 35, 36, 37, 38, 39, -1, -1, -1, -1,
03521 -1, 45, 46, 47, 48, 49, 50, 51, 52, 53,
03522 54, 55, 56, 57, -1, -1, -1, -1, -1, -1,
03523 -1, -1, 66, 67, 68, 69, 70, 71, 72, 73,
03524 74, -1, -1, 77, 78, -1, -1, 81, 82, 83,
03525 84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03526 -1, 95, -1, -1, -1, -1, -1, -1, -1, -1,
03527 -1, -1, -1, -1, -1, -1, -1, -1, 112, 113,
03528 114, 115, 116, 117, 118, 119, 120, 121, -1, 123,
03529 124, -1, -1, -1, -1, -1, 3, 4, 5, -1,
03530 7, -1, -1, -1, 11, 12, -1, 141, 142, 16,
03531 -1, 18, 19, 20, 21, 22, 23, 24, -1, 26,
03532 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
03533 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
03534 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
03535 57, 58, 59, 60, -1, 62, 63, 64, -1, 66,
03536 67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03537 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
03538 -1, -1, 89, 90, -1, 92, 93, -1, 95, 96,
03539 97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
03540 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03541 -1, -1, -1, -1, -1, 122, 123, 124, -1, -1,
03542 -1, -1, -1, 3, 4, 5, -1, 7, -1, 136,
03543 -1, 11, 12, -1, -1, 142, 16, -1, 18, 19,
03544 20, 21, 22, 23, 24, -1, 26, -1, -1, -1,
03545 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
03546 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
03547 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
03548 60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
03549 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03550 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
03551 90, -1, 92, 93, -1, 95, 96, 97, 98, 99,
03552 100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
03553 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03554 -1, -1, 122, 123, 124, -1, -1, -1, -1, -1,
03555 3, 4, 5, -1, 7, -1, 136, -1, 11, 12,
03556 -1, -1, 142, 16, -1, 18, 19, 20, 21, 22,
03557 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03558 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03559 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03560 53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
03561 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03562 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03563 -1, -1, -1, 86, 87, -1, 89, 90, -1, 92,
03564 93, -1, 95, 96, 97, 98, 99, 100, 101, 102,
03565 103, -1, -1, -1, -1, -1, 109, -1, -1, -1,
03566 -1, -1, -1, -1, 3, 4, 5, -1, 7, 122,
03567 123, 124, 11, 12, -1, -1, -1, 16, -1, 18,
03568 19, 20, 21, 22, 23, 24, -1, -1, -1, 142,
03569 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
03570 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
03571 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
03572 59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
03573 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03574 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
03575 89, 90, -1, 92, 93, -1, 95, 96, 97, 98,
03576 99, 100, 101, 102, 103, -1, -1, -1, -1, -1,
03577 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
03578 5, -1, 7, 122, 123, 124, 11, 12, -1, -1,
03579 -1, 16, -1, 18, 19, 20, 21, 22, 23, 24,
03580 -1, -1, -1, 142, -1, 30, 31, 32, 33, 34,
03581 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
03582 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
03583 55, 56, 57, 58, 59, 60, -1, 62, 63, 64,
03584 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03585 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03586 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03587 95, 96, 97, 98, 99, 100, 101, 102, 103, -1,
03588 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03589 -1, -1, -1, -1, -1, -1, -1, 122, 123, 124,
03590 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03591 -1, -1, -1, -1, -1, -1, -1, 142, 3, 4,
03592 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
03593 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
03594 25, 26, -1, -1, -1, 30, 31, 32, 33, 34,
03595 35, 36, 37, 38, 39, -1, -1, -1, -1, -1,
03596 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
03597 55, 56, 57, -1, -1, -1, -1, -1, -1, -1,
03598 -1, 66, 67, 68, 69, 70, 71, 72, 73, 74,
03599 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
03600 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03601 95, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03602 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114,
03603 115, 116, 117, 118, 119, 120, 121, -1, 123, 124,
03604 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03605 -1, -1, -1, -1, -1, -1, 141, 3, 4, 5,
03606 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
03607 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
03608 26, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03609 36, 37, 38, 39, -1, -1, -1, -1, -1, 45,
03610 46, 47, 48, 49, 50, 51, 52, 53, 54, -1,
03611 56, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03612 66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
03613 -1, 77, 78, -1, -1, 81, 82, 83, 84, -1,
03614 -1, -1, -1, -1, -1, -1, -1, -1, -1, 95,
03615 -1, -1, 98, -1, -1, -1, -1, -1, -1, -1,
03616 -1, -1, -1, -1, -1, -1, 112, 113, 114, 115,
03617 116, 117, 118, 119, 120, 121, -1, 123, 124, -1,
03618 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03619 -1, -1, -1, -1, -1, 141, 3, 4, 5, 6,
03620 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
03621 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
03622 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
03623 37, 38, 39, -1, -1, -1, -1, -1, 45, 46,
03624 47, 48, 49, 50, 51, 52, 53, -1, -1, 56,
03625 -1, -1, -1, -1, -1, -1, -1, -1, -1, 66,
03626 67, 68, 69, 70, 71, 72, 73, 74, -1, -1,
03627 77, 78, -1, -1, 81, 82, 83, 84, -1, -1,
03628 -1, -1, -1, -1, -1, -1, -1, -1, 95, -1,
03629 -1, 98, -1, -1, -1, -1, -1, -1, -1, -1,
03630 -1, -1, -1, -1, -1, 112, 113, 114, 115, 116,
03631 117, 118, 119, 120, 121, -1, 123, 124, -1, -1,
03632 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03633 -1, -1, -1, -1, 141, 3, 4, 5, 6, 7,
03634 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
03635 18, 19, 20, 21, 22, 23, 24, 25, 26, -1,
03636 -1, -1, 30, 31, 32, 33, 34, 35, 36, 37,
03637 38, 39, -1, -1, -1, -1, -1, 45, 46, 47,
03638 48, 49, 50, 51, 52, 53, -1, -1, 56, -1,
03639 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67,
03640 68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
03641 78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
03642 -1, -1, -1, -1, -1, -1, -1, 95, -1, -1,
03643 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03644 -1, -1, -1, -1, 112, 113, 114, 115, 116, 117,
03645 118, 119, 120, 121, -1, 123, 124, -1, -1, 3,
03646 4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
03647 -1, -1, 16, 141, 18, 19, 20, 21, 22, 23,
03648 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03649 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03650 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03651 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03652 64, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03653 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03654 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03655 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03656 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03657 -1, 3, 4, 5, -1, 7, -1, -1, 122, 11,
03658 12, -1, -1, -1, 16, -1, 18, 19, 20, 21,
03659 22, 23, 24, -1, -1, -1, 140, -1, 30, 31,
03660 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03661 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03662 52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
03663 62, 63, 64, -1, -1, -1, -1, -1, -1, -1,
03664 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03665 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03666 92, 93, -1, -1, -1, 97, 98, 99, 100, 101,
03667 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03668 -1, -1, -1, 3, 4, 5, 6, 7, -1, -1,
03669 122, 11, 12, -1, -1, -1, 16, -1, 18, 19,
03670 20, 21, 22, 23, 24, -1, -1, -1, 140, -1,
03671 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
03672 -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
03673 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
03674 60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
03675 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03676 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
03677 90, -1, 92, 93, -1, 95, -1, 97, 98, 99,
03678 100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
03679 -1, -1, 3, 4, 5, 6, 7, -1, -1, -1,
03680 11, 12, 122, 123, 124, 16, -1, 18, 19, 20,
03681 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03682 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03683 -1, -1, -1, -1, 45, 46, -1, 48, 49, 50,
03684 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03685 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03686 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03687 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03688 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
03689 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03690 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
03691 12, 122, 123, 124, 16, -1, 18, 19, 20, 21,
03692 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03693 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03694 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03695 52, 53, 54, 55, 56, 57, 58, 59, 60, -1,
03696 62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
03697 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03698 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03699 92, 93, -1, 95, 96, 97, 98, 99, 100, 101,
03700 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03701 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
03702 122, 123, 124, 16, -1, 18, 19, 20, 21, 22,
03703 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03704 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03705 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03706 53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
03707 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03708 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03709 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03710 93, -1, 95, 96, 97, 98, 99, 100, 101, 102,
03711 103, -1, -1, -1, -1, -1, -1, -1, -1, 3,
03712 4, 5, -1, 7, -1, -1, -1, 11, 12, 122,
03713 123, 124, 16, -1, 18, 19, 20, 21, 22, 23,
03714 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03715 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03716 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03717 54, 55, 56, 57, 58, 59, 60, -1, 62, 63,
03718 64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
03719 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03720 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03721 -1, 95, -1, 97, 98, 99, 100, 101, 102, 103,
03722 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
03723 5, -1, 7, -1, -1, -1, 11, 12, 122, 123,
03724 124, 16, -1, 18, 19, 20, 21, 22, 23, 24,
03725 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
03726 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
03727 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
03728 55, 56, 57, 58, 59, 60, -1, 62, 63, 64,
03729 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03730 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03731 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03732 -1, 96, 97, 98, 99, 100, 101, 102, 103, -1,
03733 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
03734 -1, 7, -1, -1, -1, 11, 12, 122, 123, 124,
03735 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03736 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03737 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03738 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03739 56, 57, 58, 59, 60, -1, 62, 63, 64, -1,
03740 66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
03741 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03742 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03743 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03744 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
03745 7, -1, -1, -1, 11, 12, 122, 123, 124, 16,
03746 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
03747 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
03748 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
03749 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
03750 57, 58, 59, 60, -1, 62, 63, 64, -1, 66,
03751 67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03752 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
03753 -1, -1, 89, 90, -1, 92, 93, -1, -1, -1,
03754 97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
03755 -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
03756 -1, -1, -1, 11, 12, 122, 123, 124, 16, -1,
03757 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03758 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03759 -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
03760 -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03761 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03762 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03763 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03764 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03765 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03766 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
03767 -1, -1, 11, 12, 122, 123, 124, 16, -1, 18,
03768 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
03769 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
03770 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
03771 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
03772 59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
03773 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03774 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
03775 89, 90, -1, 92, 93, -1, 95, -1, 97, 98,
03776 99, 100, 101, 102, 103, -1, -1, -1, -1, -1,
03777 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
03778 -1, 11, 12, 122, 123, 124, 16, -1, 18, 19,
03779 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
03780 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
03781 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
03782 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
03783 60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
03784 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03785 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
03786 90, -1, 92, 93, -1, 95, -1, 97, 98, 99,
03787 100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
03788 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03789 11, 12, 122, 123, 124, 16, -1, 18, 19, 20,
03790 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03791 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03792 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03793 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03794 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03795 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03796 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03797 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
03798 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03799 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
03800 12, 122, 123, 124, 16, -1, 18, 19, 20, 21,
03801 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03802 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03803 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03804 52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
03805 62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
03806 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03807 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03808 92, 93, -1, 95, -1, 97, 98, 99, 100, 101,
03809 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03810 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
03811 122, 123, 124, 16, -1, 18, 19, 20, 21, 22,
03812 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03813 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03814 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03815 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03816 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03817 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03818 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03819 93, -1, -1, -1, 97, 98, 99, 100, 101, 102,
03820 103, -1, -1, -1, -1, -1, -1, -1, -1, 3,
03821 4, 5, -1, 7, -1, -1, -1, 11, 12, 122,
03822 123, 124, 16, -1, 18, 19, 20, 21, 22, 23,
03823 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03824 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03825 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03826 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03827 64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
03828 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03829 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03830 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03831 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
03832 5, -1, 7, -1, -1, -1, 11, 12, 122, 123,
03833 124, 16, -1, 18, 19, 20, 21, 22, 23, 24,
03834 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
03835 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
03836 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
03837 55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
03838 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03839 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03840 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03841 -1, -1, 97, 98, 99, 100, 101, 102, 103, -1,
03842 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
03843 -1, 7, -1, -1, -1, 11, 12, 122, 123, 124,
03844 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03845 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03846 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03847 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03848 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03849 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03850 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03851 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03852 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03853 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03854 11, 12, -1, -1, -1, 16, 122, 18, 19, 20,
03855 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03856 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03857 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03858 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03859 -1, 62, 63, 64, -1, -1, -1, -1, -1, -1,
03860 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03861 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03862 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
03863 101, 102, 103, -1, -1, -1, -1, 3, 4, 5,
03864 -1, 7, -1, -1, -1, 11, 12, -1, -1, -1,
03865 16, 122, 18, 19, 20, 21, 22, 23, 24, -1,
03866 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03867 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03868 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03869 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03870 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03871 -1, -1, -1, -1, -1, -1, -1, 83, -1, -1,
03872 86, -1, -1, 89, 90, -1, 92, 93, -1, -1,
03873 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03874 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03875 11, 12, -1, -1, -1, 16, 122, 18, 19, 20,
03876 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03877 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03878 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03879 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03880 -1, 62, 63, 64, -1, -1, -1, -1, -1, -1,
03881 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03882 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03883 -1, 92, 93, -1, -1, -1, 97, 98, 99, 100,
03884 101, 102, 103, -1, -1, -1, -1, 3, 4, 5,
03885 -1, 7, -1, -1, -1, 11, 12, -1, -1, -1,
03886 16, 122, 18, 19, 20, 21, 22, 23, 24, -1,
03887 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03888 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03889 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03890 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03891 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03892 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03893 86, -1, -1, 89, 90, -1, 92, 93, -1, -1,
03894 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03895 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03896 11, 12, -1, -1, -1, 16, 122, 18, 19, 20,
03897 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03898 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03899 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03900 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03901 -1, 62, 63, 64, -1, -1, -1, -1, -1, -1,
03902 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03903 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03904 -1, 92, 93, -1, -1, -1, 97, 98, 99, 100,
03905 101, 102, 103, -1, -1, -1, -1, 3, 4, 5,
03906 -1, 7, -1, -1, -1, 11, 12, -1, -1, -1,
03907 16, 122, 18, 19, 20, 21, 22, 23, 24, -1,
03908 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03909 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03910 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03911 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03912 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03913 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03914 86, -1, -1, 89, 90, -1, 92, 93, -1, -1,
03915 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03916 -1, -1, -1, 52, 53, -1, -1, 56, -1, -1,
03917 -1, -1, -1, -1, -1, -1, 122, 66, 67, 68,
03918 69, 70, 71, 72, 73, 74, -1, -1, 77, 78,
03919 -1, -1, 81, 82, 83, 84, -1, -1, -1, -1,
03920 -1, -1, -1, -1, -1, -1, 95, -1, -1, -1,
03921 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03922 -1, -1, -1, 112, 113, 114, 115, 116, 117, 118,
03923 119, 120, 121, -1, 123, 124, -1, -1, -1, -1,
03924 52, 53, -1, -1, 56, -1, -1, -1, -1, -1,
03925 -1, -1, 141, 142, 66, 67, 68, 69, 70, 71,
03926 72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
03927 82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
03928 -1, -1, -1, 95, -1, -1, -1, -1, -1, -1,
03929 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03930 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
03931 -1, 123, 124, -1, -1, -1, -1, 52, 53, -1,
03932 -1, 56, -1, -1, -1, -1, -1, -1, -1, 141,
03933 142, 66, 67, 68, 69, 70, 71, 72, 73, 74,
03934 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
03935 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03936 95, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03937 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114,
03938 115, 116, 117, 118, 119, 120, 121, -1, 123, 124,
03939 -1, -1, -1, -1, 52, 53, -1, -1, 56, -1,
03940 -1, -1, -1, -1, -1, -1, 141, 142, 66, 67,
03941 68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
03942 78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
03943 -1, -1, -1, -1, -1, -1, -1, 95, -1, -1,
03944 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03945 -1, -1, -1, -1, 112, 113, 114, 115, 116, 117,
03946 118, 119, 120, 121, -1, 123, 124, -1, -1, -1,
03947 -1, 52, 53, -1, -1, 56, -1, -1, -1, -1,
03948 -1, -1, -1, 141, 142, 66, 67, 68, 69, 70,
03949 71, 72, 73, 74, -1, -1, 77, 78, -1, -1,
03950 81, 82, 83, 84, -1, -1, -1, -1, -1, -1,
03951 -1, -1, -1, -1, 95, -1, -1, -1, -1, -1,
03952 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03953 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
03954 121, -1, 123, 124, -1, -1, -1, -1, 52, 53,
03955 -1, -1, 56, -1, -1, -1, -1, -1, -1, -1,
03956 141, 142, 66, 67, 68, 69, 70, 71, 72, 73,
03957 74, -1, -1, 77, 78, -1, -1, 81, 82, 83,
03958 84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03959 -1, 95, -1, -1, -1, -1, -1, -1, -1, -1,
03960 -1, -1, -1, -1, -1, -1, -1, -1, 112, 113,
03961 114, 115, 116, 117, 118, 119, 120, 121, -1, 123,
03962 124, -1, -1, -1, -1, 52, 53, -1, -1, 56,
03963 -1, -1, -1, -1, -1, -1, -1, 141, 142, 66,
03964 67, 68, 69, 70, 71, 72, 73, 74, -1, -1,
03965 77, 78, -1, -1, 81, 82, 83, 84, -1, -1,
03966 -1, -1, -1, -1, -1, -1, -1, -1, 95, -1,
03967 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03968 -1, -1, -1, -1, -1, 112, 113, 114, 115, 116,
03969 117, 118, 119, 120, 121, -1, 123, 124, -1, -1,
03970 -1, -1, 52, 53, -1, -1, 56, -1, -1, -1,
03971 -1, -1, -1, -1, 141, 142, 66, 67, 68, 69,
03972 70, 71, 72, 73, 74, -1, -1, 77, 78, -1,
03973 -1, 81, 82, 83, 84, -1, -1, -1, -1, -1,
03974 -1, -1, -1, -1, -1, 95, -1, -1, -1, -1,
03975 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03976 -1, -1, 112, 113, 114, 115, 116, 117, 118, 119,
03977 120, 121, -1, 123, 124, -1, -1, -1, -1, 52,
03978 53, -1, -1, 56, -1, -1, -1, -1, -1, -1,
03979 -1, 141, 142, 66, 67, 68, 69, 70, 71, 72,
03980 73, 74, -1, -1, 77, 78, -1, -1, 81, 82,
03981 83, 84, -1, -1, -1, -1, -1, -1, -1, -1,
03982 -1, -1, 95, -1, -1, -1, -1, -1, -1, -1,
03983 -1, -1, -1, -1, -1, -1, -1, -1, -1, 112,
03984 113, 114, 115, 116, 117, 118, 119, 120, 121, -1,
03985 123, 124, -1, -1, -1, -1, 52, 53, -1, -1,
03986 56, -1, -1, -1, -1, -1, -1, -1, 141, 142,
03987 66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
03988 -1, 77, 78, -1, -1, 81, 82, 83, 84, -1,
03989 -1, -1, -1, -1, -1, -1, -1, -1, -1, 95,
03990 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03991 -1, -1, -1, -1, -1, -1, 112, 113, 114, 115,
03992 116, 117, 118, 119, 120, 121, -1, 123, 124, -1,
03993 -1, -1, -1, 52, 53, -1, -1, 56, -1, -1,
03994 -1, -1, -1, -1, -1, 141, 142, 66, 67, 68,
03995 69, 70, 71, 72, 73, 74, -1, -1, 77, 78,
03996 -1, -1, 81, 82, 83, 84, -1, -1, -1, -1,
03997 -1, -1, -1, -1, -1, -1, 95, -1, -1, -1,
03998 -1, -1, -1, -1, 44, -1, -1, -1, -1, -1,
03999 -1, -1, -1, 112, 113, 114, 115, 116, 117, 118,
04000 119, 120, 121, 44, 123, 124, -1, -1, 68, 69,
04001 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
04002 80, -1, 141, 83, 84, -1, -1, 68, 69, 70,
04003 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
04004 -1, -1, 83, 84, -1, -1, -1, -1, -1, -1,
04005 110, -1, 112, 113, 114, 115, 116, 117, 118, 119,
04006 120, 121, -1, -1, -1, -1, -1, -1, -1, 110,
04007 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
04008 121
04009 };
04010
04011
04012
04013 static const yytype_uint16 yystos[] =
04014 {
04015 0, 149, 150, 0, 1, 3, 4, 5, 6, 7,
04016 11, 12, 16, 18, 19, 20, 21, 22, 23, 24,
04017 30, 31, 32, 33, 34, 35, 36, 39, 45, 46,
04018 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
04019 57, 59, 60, 62, 63, 64, 66, 67, 86, 89,
04020 90, 92, 93, 95, 97, 98, 99, 100, 101, 102,
04021 103, 122, 123, 124, 151, 152, 153, 158, 160, 162,
04022 163, 166, 167, 169, 170, 171, 173, 174, 184, 198,
04023 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
04024 225, 248, 249, 259, 260, 261, 262, 263, 264, 265,
04025 268, 278, 280, 281, 282, 283, 284, 285, 308, 319,
04026 153, 3, 4, 5, 6, 7, 8, 9, 10, 11,
04027 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
04028 22, 23, 24, 25, 26, 30, 31, 32, 33, 34,
04029 35, 36, 37, 38, 39, 45, 46, 47, 48, 49,
04030 50, 51, 52, 53, 56, 66, 67, 68, 69, 70,
04031 71, 72, 73, 74, 77, 78, 81, 82, 83, 84,
04032 95, 112, 113, 114, 115, 116, 117, 118, 119, 120,
04033 121, 123, 124, 141, 177, 178, 179, 180, 182, 183,
04034 278, 280, 39, 58, 86, 89, 95, 96, 123, 166,
04035 174, 184, 186, 191, 194, 196, 215, 282, 284, 285,
04036 306, 307, 191, 191, 142, 192, 193, 142, 188, 192,
04037 142, 147, 313, 54, 179, 313, 154, 136, 21, 22,
04038 30, 31, 32, 184, 215, 308, 184, 56, 1, 89,
04039 156, 157, 158, 168, 169, 319, 160, 187, 196, 306,
04040 319, 186, 305, 306, 319, 46, 86, 122, 140, 173,
04041 198, 215, 282, 285, 241, 242, 54, 55, 57, 177,
04042 271, 279, 270, 271, 272, 146, 266, 146, 269, 59,
04043 60, 162, 184, 184, 145, 147, 312, 317, 318, 40,
04044 41, 42, 43, 44, 37, 38, 28, 246, 109, 140,
04045 89, 95, 170, 109, 68, 69, 70, 71, 72, 73,
04046 74, 75, 76, 77, 78, 79, 80, 83, 84, 110,
04047 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
04048 85, 138, 139, 199, 160, 161, 161, 202, 204, 161,
04049 312, 318, 86, 167, 174, 215, 231, 282, 285, 52,
04050 56, 83, 86, 175, 176, 215, 282, 285, 176, 33,
04051 34, 35, 36, 49, 50, 51, 52, 56, 142, 177,
04052 283, 303, 85, 139, 26, 136, 250, 262, 87, 87,
04053 188, 192, 250, 140, 186, 56, 186, 186, 109, 88,
04054 140, 195, 319, 85, 138, 139, 87, 87, 140, 195,
04055 191, 313, 314, 191, 190, 191, 319, 160, 314, 160,
04056 54, 63, 64, 159, 142, 185, 136, 156, 85, 139,
04057 87, 158, 168, 143, 312, 318, 314, 200, 144, 140,
04058 147, 316, 140, 316, 137, 316, 313, 56, 59, 60,
04059 170, 172, 140, 85, 138, 139, 243, 61, 104, 105,
04060 106, 273, 106, 273, 106, 65, 273, 106, 106, 267,
04061 273, 106, 61, 106, 68, 68, 145, 153, 161, 161,
04062 161, 161, 158, 160, 160, 247, 95, 162, 186, 196,
04063 197, 168, 140, 173, 140, 162, 184, 186, 197, 184,
04064 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
04065 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
04066 184, 184, 184, 184, 184, 52, 53, 56, 182, 188,
04067 309, 310, 190, 52, 53, 56, 182, 188, 309, 155,
04068 156, 13, 227, 317, 227, 161, 161, 312, 17, 253,
04069 56, 85, 138, 139, 25, 160, 52, 56, 175, 1,
04070 113, 286, 317, 85, 138, 139, 211, 304, 212, 85,
04071 139, 311, 52, 56, 309, 309, 252, 251, 162, 184,
04072 162, 184, 94, 164, 181, 184, 186, 95, 186, 194,
04073 306, 52, 56, 190, 52, 56, 307, 314, 143, 314,
04074 314, 179, 201, 184, 151, 137, 309, 309, 184, 314,
04075 158, 314, 306, 140, 172, 52, 56, 190, 52, 56,
04076 52, 54, 55, 56, 57, 89, 95, 96, 116, 119,
04077 142, 244, 289, 290, 291, 292, 293, 294, 297, 298,
04078 299, 300, 301, 275, 274, 146, 273, 146, 184, 184,
04079 76, 114, 236, 237, 319, 186, 140, 314, 172, 140,
04080 44, 313, 87, 87, 188, 192, 313, 315, 87, 87,
04081 188, 189, 192, 319, 10, 226, 8, 255, 319, 156,
04082 13, 156, 27, 228, 317, 228, 253, 196, 226, 52,
04083 56, 190, 52, 56, 206, 209, 317, 287, 208, 52,
04084 56, 175, 190, 155, 160, 142, 288, 289, 213, 189,
04085 192, 189, 192, 236, 236, 44, 165, 179, 186, 195,
04086 87, 87, 315, 87, 87, 160, 137, 316, 170, 315,
04087 109, 52, 89, 95, 232, 233, 234, 291, 289, 29,
04088 107, 245, 140, 302, 319, 140, 302, 52, 140, 302,
04089 52, 276, 54, 55, 57, 277, 285, 52, 145, 235,
04090 238, 293, 295, 296, 299, 301, 319, 156, 95, 186,
04091 172, 184, 111, 162, 184, 162, 184, 164, 144, 87,
04092 162, 184, 162, 184, 164, 186, 197, 256, 319, 15,
04093 230, 319, 14, 229, 230, 230, 203, 205, 226, 140,
04094 227, 315, 161, 317, 161, 155, 315, 226, 314, 289,
04095 155, 317, 177, 156, 156, 184, 236, 87, 314, 186,
04096 234, 140, 291, 140, 314, 238, 156, 156, 292, 297,
04097 299, 301, 293, 294, 299, 293, 156, 109, 52, 239,
04098 240, 290, 238, 114, 140, 302, 140, 302, 140, 302,
04099 10, 186, 184, 162, 184, 88, 257, 319, 156, 9,
04100 258, 319, 161, 226, 226, 156, 156, 186, 156, 228,
04101 210, 317, 226, 314, 226, 214, 10, 137, 156, 314,
04102 233, 140, 95, 232, 314, 10, 137, 140, 302, 140,
04103 302, 140, 302, 140, 302, 302, 137, 86, 215, 140,
04104 114, 296, 299, 293, 295, 299, 293, 86, 174, 215,
04105 282, 285, 227, 156, 227, 226, 226, 230, 253, 254,
04106 207, 155, 288, 137, 140, 233, 140, 291, 293, 299,
04107 293, 293, 56, 85, 240, 140, 302, 140, 302, 302,
04108 140, 302, 302, 56, 85, 138, 139, 156, 156, 156,
04109 226, 155, 233, 140, 302, 140, 302, 302, 302, 52,
04110 56, 293, 299, 293, 293, 52, 56, 190, 52, 56,
04111 255, 229, 226, 226, 233, 293, 302, 140, 302, 302,
04112 302, 315, 302, 293, 302
04113 };
04114
04115 #define yyerrok (yyerrstatus = 0)
04116 #define yyclearin (yychar = YYEMPTY)
04117 #define YYEMPTY (-2)
04118 #define YYEOF 0
04119
04120 #define YYACCEPT goto yyacceptlab
04121 #define YYABORT goto yyabortlab
04122 #define YYERROR goto yyerrorlab
04123
04124
04125
04126
04127
04128
04129
04130
04131
04132 #define YYFAIL goto yyerrlab
04133 #if defined YYFAIL
04134
04135
04136
04137
04138 #endif
04139
04140 #define YYRECOVERING() (!!yyerrstatus)
04141
04142 #define YYBACKUP(Token, Value) \
04143 do \
04144 if (yychar == YYEMPTY && yylen == 1) \
04145 { \
04146 yychar = (Token); \
04147 yylval = (Value); \
04148 YYPOPSTACK (1); \
04149 goto yybackup; \
04150 } \
04151 else \
04152 { \
04153 parser_yyerror (parser, YY_("syntax error: cannot back up")); \
04154 YYERROR; \
04155 } \
04156 while (YYID (0))
04157
04158
04159 #define YYTERROR 1
04160 #define YYERRCODE 256
04161
04162
04163
04164
04165
04166
04167 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
04168 #ifndef YYLLOC_DEFAULT
04169 # define YYLLOC_DEFAULT(Current, Rhs, N) \
04170 do \
04171 if (YYID (N)) \
04172 { \
04173 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
04174 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
04175 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
04176 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
04177 } \
04178 else \
04179 { \
04180 (Current).first_line = (Current).last_line = \
04181 YYRHSLOC (Rhs, 0).last_line; \
04182 (Current).first_column = (Current).last_column = \
04183 YYRHSLOC (Rhs, 0).last_column; \
04184 } \
04185 while (YYID (0))
04186 #endif
04187
04188
04189
04190
04191 #ifndef YY_LOCATION_PRINT
04192 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
04193 #endif
04194
04195
04196
04197
04198 #ifdef YYLEX_PARAM
04199 # define YYLEX yylex (&yylval, YYLEX_PARAM)
04200 #else
04201 # define YYLEX yylex (&yylval)
04202 #endif
04203
04204
04205 #if YYDEBUG
04206
04207 # ifndef YYFPRINTF
04208 # include <stdio.h>
04209 # define YYFPRINTF fprintf
04210 # endif
04211
04212 # define YYDPRINTF(Args) \
04213 do { \
04214 if (yydebug) \
04215 YYFPRINTF Args; \
04216 } while (YYID (0))
04217
04218 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
04219 do { \
04220 if (yydebug) \
04221 { \
04222 YYFPRINTF (stderr, "%s ", Title); \
04223 yy_symbol_print (stderr, \
04224 Type, Value, parser); \
04225 YYFPRINTF (stderr, "\n"); \
04226 } \
04227 } while (YYID (0))
04228
04229
04230
04231
04232
04233
04234
04235 #if (defined __STDC__ || defined __C99__FUNC__ \
04236 || defined __cplusplus || defined _MSC_VER)
04237 static void
04238 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04239 #else
04240 static void
04241 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
04242 FILE *yyoutput;
04243 int yytype;
04244 YYSTYPE const * const yyvaluep;
04245 struct parser_params *parser;
04246 #endif
04247 {
04248 if (!yyvaluep)
04249 return;
04250 YYUSE (parser);
04251 # ifdef YYPRINT
04252 if (yytype < YYNTOKENS)
04253 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
04254 # else
04255 YYUSE (yyoutput);
04256 # endif
04257 switch (yytype)
04258 {
04259 default:
04260 break;
04261 }
04262 }
04263
04264
04265
04266
04267
04268
04269 #if (defined __STDC__ || defined __C99__FUNC__ \
04270 || defined __cplusplus || defined _MSC_VER)
04271 static void
04272 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04273 #else
04274 static void
04275 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
04276 FILE *yyoutput;
04277 int yytype;
04278 YYSTYPE const * const yyvaluep;
04279 struct parser_params *parser;
04280 #endif
04281 {
04282 if (yytype < YYNTOKENS)
04283 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
04284 else
04285 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
04286
04287 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
04288 YYFPRINTF (yyoutput, ")");
04289 }
04290
04291
04292
04293
04294
04295
04296 #if (defined __STDC__ || defined __C99__FUNC__ \
04297 || defined __cplusplus || defined _MSC_VER)
04298 static void
04299 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
04300 #else
04301 static void
04302 yy_stack_print (yybottom, yytop)
04303 yytype_int16 *yybottom;
04304 yytype_int16 *yytop;
04305 #endif
04306 {
04307 YYFPRINTF (stderr, "Stack now");
04308 for (; yybottom <= yytop; yybottom++)
04309 {
04310 int yybot = *yybottom;
04311 YYFPRINTF (stderr, " %d", yybot);
04312 }
04313 YYFPRINTF (stderr, "\n");
04314 }
04315
04316 # define YY_STACK_PRINT(Bottom, Top) \
04317 do { \
04318 if (yydebug) \
04319 yy_stack_print ((Bottom), (Top)); \
04320 } while (YYID (0))
04321
04322
04323
04324
04325
04326
04327 #if (defined __STDC__ || defined __C99__FUNC__ \
04328 || defined __cplusplus || defined _MSC_VER)
04329 static void
04330 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
04331 #else
04332 static void
04333 yy_reduce_print (yyvsp, yyrule, parser)
04334 YYSTYPE *yyvsp;
04335 int yyrule;
04336 struct parser_params *parser;
04337 #endif
04338 {
04339 int yynrhs = yyr2[yyrule];
04340 int yyi;
04341 unsigned long int yylno = yyrline[yyrule];
04342 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
04343 yyrule - 1, yylno);
04344
04345 for (yyi = 0; yyi < yynrhs; yyi++)
04346 {
04347 YYFPRINTF (stderr, " $%d = ", yyi + 1);
04348 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
04349 &(yyvsp[(yyi + 1) - (yynrhs)])
04350 , parser);
04351 YYFPRINTF (stderr, "\n");
04352 }
04353 }
04354
04355 # define YY_REDUCE_PRINT(Rule) \
04356 do { \
04357 if (yydebug) \
04358 yy_reduce_print (yyvsp, Rule, parser); \
04359 } while (YYID (0))
04360
04361
04362
04363 #ifndef yydebug
04364 int yydebug;
04365 #endif
04366 #else
04367 # define YYDPRINTF(Args)
04368 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
04369 # define YY_STACK_PRINT(Bottom, Top)
04370 # define YY_REDUCE_PRINT(Rule)
04371 #endif
04372
04373
04374
04375 #ifndef YYINITDEPTH
04376 # define YYINITDEPTH 200
04377 #endif
04378
04379
04380
04381
04382
04383
04384
04385
04386 #ifndef YYMAXDEPTH
04387 # define YYMAXDEPTH 10000
04388 #endif
04389
04390
04391 #if YYERROR_VERBOSE
04392
04393 # ifndef yystrlen
04394 # if defined __GLIBC__ && defined _STRING_H
04395 # define yystrlen strlen
04396 # else
04397
04398 #if (defined __STDC__ || defined __C99__FUNC__ \
04399 || defined __cplusplus || defined _MSC_VER)
04400 static YYSIZE_T
04401 yystrlen (const char *yystr)
04402 #else
04403 static YYSIZE_T
04404 yystrlen (yystr)
04405 const char *yystr;
04406 #endif
04407 {
04408 YYSIZE_T yylen;
04409 for (yylen = 0; yystr[yylen]; yylen++)
04410 continue;
04411 return yylen;
04412 }
04413 # endif
04414 # endif
04415
04416 # ifndef yystpcpy
04417 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
04418 # define yystpcpy stpcpy
04419 # else
04420
04421
04422 #if (defined __STDC__ || defined __C99__FUNC__ \
04423 || defined __cplusplus || defined _MSC_VER)
04424 static char *
04425 yystpcpy (char *yydest, const char *yysrc)
04426 #else
04427 static char *
04428 yystpcpy (yydest, yysrc)
04429 char *yydest;
04430 const char *yysrc;
04431 #endif
04432 {
04433 char *yyd = yydest;
04434 const char *yys = yysrc;
04435
04436 while ((*yyd++ = *yys++) != '\0')
04437 continue;
04438
04439 return yyd - 1;
04440 }
04441 # endif
04442 # endif
04443
04444 # ifndef yytnamerr
04445
04446
04447
04448
04449
04450
04451
04452 static YYSIZE_T
04453 yytnamerr (char *yyres, const char *yystr)
04454 {
04455 if (*yystr == '"')
04456 {
04457 YYSIZE_T yyn = 0;
04458 char const *yyp = yystr;
04459
04460 for (;;)
04461 switch (*++yyp)
04462 {
04463 case '\'':
04464 case ',':
04465 goto do_not_strip_quotes;
04466
04467 case '\\':
04468 if (*++yyp != '\\')
04469 goto do_not_strip_quotes;
04470
04471 default:
04472 if (yyres)
04473 yyres[yyn] = *yyp;
04474 yyn++;
04475 break;
04476
04477 case '"':
04478 if (yyres)
04479 yyres[yyn] = '\0';
04480 return yyn;
04481 }
04482 do_not_strip_quotes: ;
04483 }
04484
04485 if (! yyres)
04486 return yystrlen (yystr);
04487
04488 return yystpcpy (yyres, yystr) - yyres;
04489 }
04490 # endif
04491
04492
04493
04494
04495
04496
04497
04498
04499
04500 static int
04501 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
04502 yytype_int16 *yyssp, int yytoken)
04503 {
04504 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
04505 YYSIZE_T yysize = yysize0;
04506 YYSIZE_T yysize1;
04507 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
04508
04509 const char *yyformat = 0;
04510
04511 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
04512
04513
04514 int yycount = 0;
04515
04516
04517
04518
04519
04520
04521
04522
04523
04524
04525
04526
04527
04528
04529
04530
04531
04532
04533
04534
04535
04536
04537
04538
04539
04540
04541
04542
04543 if (yytoken != YYEMPTY)
04544 {
04545 int yyn = yypact[*yyssp];
04546 yyarg[yycount++] = yytname[yytoken];
04547 if (!yypact_value_is_default (yyn))
04548 {
04549
04550
04551
04552 int yyxbegin = yyn < 0 ? -yyn : 0;
04553
04554 int yychecklim = YYLAST - yyn + 1;
04555 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
04556 int yyx;
04557
04558 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
04559 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
04560 && !yytable_value_is_error (yytable[yyx + yyn]))
04561 {
04562 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
04563 {
04564 yycount = 1;
04565 yysize = yysize0;
04566 break;
04567 }
04568 yyarg[yycount++] = yytname[yyx];
04569 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
04570 if (! (yysize <= yysize1
04571 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
04572 return 2;
04573 yysize = yysize1;
04574 }
04575 }
04576 }
04577
04578 switch (yycount)
04579 {
04580 # define YYCASE_(N, S) \
04581 case N: \
04582 yyformat = S; \
04583 break
04584 YYCASE_(0, YY_("syntax error"));
04585 YYCASE_(1, YY_("syntax error, unexpected %s"));
04586 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
04587 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
04588 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
04589 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
04590 # undef YYCASE_
04591 }
04592
04593 yysize1 = yysize + yystrlen (yyformat);
04594 if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
04595 return 2;
04596 yysize = yysize1;
04597
04598 if (*yymsg_alloc < yysize)
04599 {
04600 *yymsg_alloc = 2 * yysize;
04601 if (! (yysize <= *yymsg_alloc
04602 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
04603 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
04604 return 1;
04605 }
04606
04607
04608
04609
04610 {
04611 char *yyp = *yymsg;
04612 int yyi = 0;
04613 while ((*yyp = *yyformat) != '\0')
04614 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
04615 {
04616 yyp += yytnamerr (yyp, yyarg[yyi++]);
04617 yyformat += 2;
04618 }
04619 else
04620 {
04621 yyp++;
04622 yyformat++;
04623 }
04624 }
04625 return 0;
04626 }
04627 #endif
04628
04629
04630
04631
04632
04633
04634 #if (defined __STDC__ || defined __C99__FUNC__ \
04635 || defined __cplusplus || defined _MSC_VER)
04636 static void
04637 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
04638 #else
04639 static void
04640 yydestruct (yymsg, yytype, yyvaluep, parser)
04641 const char *yymsg;
04642 int yytype;
04643 YYSTYPE *yyvaluep;
04644 struct parser_params *parser;
04645 #endif
04646 {
04647 YYUSE (yyvaluep);
04648 YYUSE (parser);
04649
04650 if (!yymsg)
04651 yymsg = "Deleting";
04652 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
04653
04654 switch (yytype)
04655 {
04656
04657 default:
04658 break;
04659 }
04660 }
04661
04662
04663
04664 #ifdef YYPARSE_PARAM
04665 #if defined __STDC__ || defined __cplusplus
04666 int yyparse (void *YYPARSE_PARAM);
04667 #else
04668 int yyparse ();
04669 #endif
04670 #else
04671 #if defined __STDC__ || defined __cplusplus
04672 int yyparse (struct parser_params *parser);
04673 #else
04674 int yyparse ();
04675 #endif
04676 #endif
04677
04678
04679
04680
04681
04682
04683 #ifdef YYPARSE_PARAM
04684 #if (defined __STDC__ || defined __C99__FUNC__ \
04685 || defined __cplusplus || defined _MSC_VER)
04686 int
04687 yyparse (void *YYPARSE_PARAM)
04688 #else
04689 int
04690 yyparse (YYPARSE_PARAM)
04691 void *YYPARSE_PARAM;
04692 #endif
04693 #else
04694 #if (defined __STDC__ || defined __C99__FUNC__ \
04695 || defined __cplusplus || defined _MSC_VER)
04696 int
04697 yyparse (struct parser_params *parser)
04698 #else
04699 int
04700 yyparse (parser)
04701 struct parser_params *parser;
04702 #endif
04703 #endif
04704 {
04705
04706 int yychar;
04707
04708
04709 YYSTYPE yylval;
04710
04711
04712 int yynerrs;
04713
04714 int yystate;
04715
04716 int yyerrstatus;
04717
04718
04719
04720
04721
04722
04723
04724
04725
04726 yytype_int16 yyssa[YYINITDEPTH];
04727 yytype_int16 *yyss;
04728 yytype_int16 *yyssp;
04729
04730
04731 YYSTYPE yyvsa[YYINITDEPTH];
04732 YYSTYPE *yyvs;
04733 YYSTYPE *yyvsp;
04734
04735 YYSIZE_T yystacksize;
04736
04737 int yyn;
04738 int yyresult;
04739
04740 int yytoken;
04741
04742
04743 YYSTYPE yyval;
04744
04745 #if YYERROR_VERBOSE
04746
04747 char yymsgbuf[128];
04748 char *yymsg = yymsgbuf;
04749 YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
04750 #endif
04751
04752 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
04753
04754
04755
04756 int yylen = 0;
04757
04758 yytoken = 0;
04759 yyss = yyssa;
04760 yyvs = yyvsa;
04761 yystacksize = YYINITDEPTH;
04762
04763 YYDPRINTF ((stderr, "Starting parse\n"));
04764
04765 yystate = 0;
04766 yyerrstatus = 0;
04767 yynerrs = 0;
04768 yychar = YYEMPTY;
04769
04770
04771
04772
04773
04774 yyssp = yyss;
04775 yyvsp = yyvs;
04776
04777 goto yysetstate;
04778
04779
04780
04781
04782 yynewstate:
04783
04784
04785 yyssp++;
04786
04787 yysetstate:
04788 *yyssp = yystate;
04789
04790 if (yyss + yystacksize - 1 <= yyssp)
04791 {
04792
04793 YYSIZE_T yysize = yyssp - yyss + 1;
04794
04795 #ifdef yyoverflow
04796 {
04797
04798
04799
04800 YYSTYPE *yyvs1 = yyvs;
04801 yytype_int16 *yyss1 = yyss;
04802
04803
04804
04805
04806
04807 yyoverflow (YY_("memory exhausted"),
04808 &yyss1, yysize * sizeof (*yyssp),
04809 &yyvs1, yysize * sizeof (*yyvsp),
04810 &yystacksize);
04811
04812 yyss = yyss1;
04813 yyvs = yyvs1;
04814 }
04815 #else
04816 # ifndef YYSTACK_RELOCATE
04817 goto yyexhaustedlab;
04818 # else
04819
04820 if (YYMAXDEPTH <= yystacksize)
04821 goto yyexhaustedlab;
04822 yystacksize *= 2;
04823 if (YYMAXDEPTH < yystacksize)
04824 yystacksize = YYMAXDEPTH;
04825
04826 {
04827 yytype_int16 *yyss1 = yyss;
04828 union yyalloc *yyptr =
04829 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
04830 if (! yyptr)
04831 goto yyexhaustedlab;
04832 YYSTACK_RELOCATE (yyss_alloc, yyss);
04833 YYSTACK_RELOCATE (yyvs_alloc, yyvs);
04834 # undef YYSTACK_RELOCATE
04835 if (yyss1 != yyssa)
04836 YYSTACK_FREE (yyss1);
04837 }
04838 # endif
04839 #endif
04840
04841 yyssp = yyss + yysize - 1;
04842 yyvsp = yyvs + yysize - 1;
04843
04844 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
04845 (unsigned long int) yystacksize));
04846
04847 if (yyss + yystacksize - 1 <= yyssp)
04848 YYABORT;
04849 }
04850
04851 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
04852
04853 if (yystate == YYFINAL)
04854 YYACCEPT;
04855
04856 goto yybackup;
04857
04858
04859
04860
04861 yybackup:
04862
04863
04864
04865
04866
04867 yyn = yypact[yystate];
04868 if (yypact_value_is_default (yyn))
04869 goto yydefault;
04870
04871
04872
04873
04874 if (yychar == YYEMPTY)
04875 {
04876 YYDPRINTF ((stderr, "Reading a token: "));
04877 yychar = YYLEX;
04878 }
04879
04880 if (yychar <= YYEOF)
04881 {
04882 yychar = yytoken = YYEOF;
04883 YYDPRINTF ((stderr, "Now at end of input.\n"));
04884 }
04885 else
04886 {
04887 yytoken = YYTRANSLATE (yychar);
04888 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
04889 }
04890
04891
04892
04893 yyn += yytoken;
04894 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
04895 goto yydefault;
04896 yyn = yytable[yyn];
04897 if (yyn <= 0)
04898 {
04899 if (yytable_value_is_error (yyn))
04900 goto yyerrlab;
04901 yyn = -yyn;
04902 goto yyreduce;
04903 }
04904
04905
04906
04907 if (yyerrstatus)
04908 yyerrstatus--;
04909
04910
04911 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
04912
04913
04914 yychar = YYEMPTY;
04915
04916 yystate = yyn;
04917 *++yyvsp = yylval;
04918
04919 goto yynewstate;
04920
04921
04922
04923
04924
04925 yydefault:
04926 yyn = yydefact[yystate];
04927 if (yyn == 0)
04928 goto yyerrlab;
04929 goto yyreduce;
04930
04931
04932
04933
04934
04935 yyreduce:
04936
04937 yylen = yyr2[yyn];
04938
04939
04940
04941
04942
04943
04944
04945
04946
04947 yyval = yyvsp[1-yylen];
04948
04949
04950 YY_REDUCE_PRINT (yyn);
04951 switch (yyn)
04952 {
04953 case 2:
04954
04955
04956 #line 786 "parse.y"
04957 {
04958 lex_state = EXPR_BEG;
04959
04960 local_push(compile_for_eval || rb_parse_in_main());
04961
04962
04963
04964 }
04965 break;
04966
04967 case 3:
04968
04969
04970 #line 795 "parse.y"
04971 {
04972
04973 if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
04974
04975 if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
04976 else {
04977 NODE *node = (yyvsp[(2) - (2)].node);
04978 while (node->nd_next) {
04979 node = node->nd_next;
04980 }
04981 void_expr(node->nd_head);
04982 }
04983 }
04984 ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
04985
04986
04987
04988
04989 local_pop();
04990 }
04991 break;
04992
04993 case 4:
04994
04995
04996 #line 818 "parse.y"
04997 {
04998
04999 void_stmts((yyvsp[(1) - (2)].node));
05000 fixup_nodes(&deferred_nodes);
05001
05002
05003 (yyval.node) = (yyvsp[(1) - (2)].node);
05004 }
05005 break;
05006
05007 case 5:
05008
05009
05010 #line 829 "parse.y"
05011 {
05012
05013 (yyval.node) = NEW_BEGIN(0);
05014
05015
05016
05017
05018 }
05019 break;
05020
05021 case 6:
05022
05023
05024 #line 838 "parse.y"
05025 {
05026
05027 (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05028
05029
05030
05031 }
05032 break;
05033
05034 case 7:
05035
05036
05037 #line 846 "parse.y"
05038 {
05039
05040 (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05041
05042
05043
05044 }
05045 break;
05046
05047 case 8:
05048
05049
05050 #line 854 "parse.y"
05051 {
05052 (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05053 }
05054 break;
05055
05056 case 10:
05057
05058
05059 #line 861 "parse.y"
05060 {
05061 if (in_def || in_single) {
05062 yyerror("BEGIN in method");
05063 }
05064
05065
05066
05067
05068 }
05069 break;
05070
05071 case 11:
05072
05073
05074 #line 871 "parse.y"
05075 {
05076
05077 ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
05078 (yyvsp[(4) - (5)].node));
05079
05080
05081 (yyval.node) = NEW_BEGIN(0);
05082
05083
05084
05085 }
05086 break;
05087
05088 case 12:
05089
05090
05091 #line 888 "parse.y"
05092 {
05093
05094 (yyval.node) = (yyvsp[(1) - (4)].node);
05095 if ((yyvsp[(2) - (4)].node)) {
05096 (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
05097 }
05098 else if ((yyvsp[(3) - (4)].node)) {
05099 rb_warn0("else without rescue is useless");
05100 (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
05101 }
05102 if ((yyvsp[(4) - (4)].node)) {
05103 if ((yyval.node)) {
05104 (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
05105 }
05106 else {
05107 (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
05108 }
05109 }
05110 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05111
05112
05113
05114
05115
05116
05117
05118 }
05119 break;
05120
05121 case 13:
05122
05123
05124 #line 918 "parse.y"
05125 {
05126
05127 void_stmts((yyvsp[(1) - (2)].node));
05128 fixup_nodes(&deferred_nodes);
05129
05130
05131 (yyval.node) = (yyvsp[(1) - (2)].node);
05132 }
05133 break;
05134
05135 case 14:
05136
05137
05138 #line 929 "parse.y"
05139 {
05140
05141 (yyval.node) = NEW_BEGIN(0);
05142
05143
05144
05145
05146 }
05147 break;
05148
05149 case 15:
05150
05151
05152 #line 938 "parse.y"
05153 {
05154
05155 (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05156
05157
05158
05159 }
05160 break;
05161
05162 case 16:
05163
05164
05165 #line 946 "parse.y"
05166 {
05167
05168 (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05169
05170
05171
05172 }
05173 break;
05174
05175 case 17:
05176
05177
05178 #line 954 "parse.y"
05179 {
05180 (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05181 }
05182 break;
05183
05184 case 18:
05185
05186
05187 #line 959 "parse.y"
05188 {lex_state = EXPR_FNAME;}
05189 break;
05190
05191 case 19:
05192
05193
05194 #line 960 "parse.y"
05195 {
05196
05197 (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
05198
05199
05200
05201 }
05202 break;
05203
05204 case 20:
05205
05206
05207 #line 968 "parse.y"
05208 {
05209
05210 (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
05211
05212
05213
05214 }
05215 break;
05216
05217 case 21:
05218
05219
05220 #line 976 "parse.y"
05221 {
05222
05223 char buf[2];
05224 buf[0] = '$';
05225 buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
05226 (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
05227
05228
05229
05230 }
05231 break;
05232
05233 case 22:
05234
05235
05236 #line 987 "parse.y"
05237 {
05238
05239 yyerror("can't make alias for the number variables");
05240 (yyval.node) = NEW_BEGIN(0);
05241
05242
05243
05244
05245 }
05246 break;
05247
05248 case 23:
05249
05250
05251 #line 997 "parse.y"
05252 {
05253
05254 (yyval.node) = (yyvsp[(2) - (2)].node);
05255
05256
05257
05258 }
05259 break;
05260
05261 case 24:
05262
05263
05264 #line 1005 "parse.y"
05265 {
05266
05267 (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05268 fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05269
05270
05271
05272 }
05273 break;
05274
05275 case 25:
05276
05277
05278 #line 1014 "parse.y"
05279 {
05280
05281 (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05282 fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05283
05284
05285
05286 }
05287 break;
05288
05289 case 26:
05290
05291
05292 #line 1023 "parse.y"
05293 {
05294
05295 if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05296 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05297 }
05298 else {
05299 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05300 }
05301
05302
05303
05304 }
05305 break;
05306
05307 case 27:
05308
05309
05310 #line 1036 "parse.y"
05311 {
05312
05313 if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05314 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05315 }
05316 else {
05317 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05318 }
05319
05320
05321
05322 }
05323 break;
05324
05325 case 28:
05326
05327
05328 #line 1049 "parse.y"
05329 {
05330
05331 NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
05332 (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
05333
05334
05335
05336 }
05337 break;
05338
05339 case 29:
05340
05341
05342 #line 1058 "parse.y"
05343 {
05344 if (in_def || in_single) {
05345 rb_warn0("END in method; use at_exit");
05346 }
05347
05348 (yyval.node) = NEW_POSTEXE(NEW_NODE(
05349 NODE_SCOPE, 0 , (yyvsp[(3) - (4)].node) , 0 ));
05350
05351
05352
05353 }
05354 break;
05355
05356 case 30:
05357
05358
05359 #line 1070 "parse.y"
05360 {
05361
05362 value_expr((yyvsp[(3) - (3)].node));
05363 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05364
05365
05366
05367 }
05368 break;
05369
05370 case 31:
05371
05372
05373 #line 1079 "parse.y"
05374 {
05375
05376 value_expr((yyvsp[(3) - (3)].node));
05377 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05378 (yyval.node) = (yyvsp[(1) - (3)].node);
05379
05380
05381
05382 }
05383 break;
05384
05385 case 32:
05386
05387
05388 #line 1089 "parse.y"
05389 {
05390
05391 value_expr((yyvsp[(3) - (3)].node));
05392 if ((yyvsp[(1) - (3)].node)) {
05393 ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
05394 if ((yyvsp[(2) - (3)].id) == tOROP) {
05395 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05396 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
05397 if (is_asgn_or_id(vid)) {
05398 (yyval.node)->nd_aid = vid;
05399 }
05400 }
05401 else if ((yyvsp[(2) - (3)].id) == tANDOP) {
05402 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05403 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
05404 }
05405 else {
05406 (yyval.node) = (yyvsp[(1) - (3)].node);
05407 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
05408 }
05409 }
05410 else {
05411 (yyval.node) = NEW_BEGIN(0);
05412 }
05413
05414
05415
05416 }
05417 break;
05418
05419 case 33:
05420
05421
05422 #line 1118 "parse.y"
05423 {
05424
05425 NODE *args;
05426
05427 value_expr((yyvsp[(6) - (6)].node));
05428 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
05429 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
05430 if ((yyvsp[(5) - (6)].id) == tOROP) {
05431 (yyvsp[(5) - (6)].id) = 0;
05432 }
05433 else if ((yyvsp[(5) - (6)].id) == tANDOP) {
05434 (yyvsp[(5) - (6)].id) = 1;
05435 }
05436 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
05437 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
05438
05439
05440
05441
05442 }
05443 break;
05444
05445 case 34:
05446
05447
05448 #line 1139 "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 35:
05468
05469
05470 #line 1156 "parse.y"
05471 {
05472
05473 value_expr((yyvsp[(5) - (5)].node));
05474 if ((yyvsp[(4) - (5)].id) == tOROP) {
05475 (yyvsp[(4) - (5)].id) = 0;
05476 }
05477 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05478 (yyvsp[(4) - (5)].id) = 1;
05479 }
05480 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05481 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05482
05483
05484
05485
05486 }
05487 break;
05488
05489 case 36:
05490
05491
05492 #line 1173 "parse.y"
05493 {
05494
05495 yyerror("constant re-assignment");
05496 (yyval.node) = 0;
05497
05498
05499
05500
05501
05502 }
05503 break;
05504
05505 case 37:
05506
05507
05508 #line 1184 "parse.y"
05509 {
05510
05511 value_expr((yyvsp[(5) - (5)].node));
05512 if ((yyvsp[(4) - (5)].id) == tOROP) {
05513 (yyvsp[(4) - (5)].id) = 0;
05514 }
05515 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05516 (yyvsp[(4) - (5)].id) = 1;
05517 }
05518 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05519 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05520
05521
05522
05523
05524 }
05525 break;
05526
05527 case 38:
05528
05529
05530 #line 1201 "parse.y"
05531 {
05532
05533 rb_backref_error((yyvsp[(1) - (3)].node));
05534 (yyval.node) = NEW_BEGIN(0);
05535
05536
05537
05538
05539 }
05540 break;
05541
05542 case 39:
05543
05544
05545 #line 1211 "parse.y"
05546 {
05547
05548 value_expr((yyvsp[(3) - (3)].node));
05549 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05550
05551
05552
05553 }
05554 break;
05555
05556 case 40:
05557
05558
05559 #line 1220 "parse.y"
05560 {
05561
05562 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05563 (yyval.node) = (yyvsp[(1) - (3)].node);
05564
05565
05566
05567 }
05568 break;
05569
05570 case 41:
05571
05572
05573 #line 1229 "parse.y"
05574 {
05575
05576 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05577 (yyval.node) = (yyvsp[(1) - (3)].node);
05578
05579
05580
05581 }
05582 break;
05583
05584 case 44:
05585
05586
05587 #line 1242 "parse.y"
05588 {
05589
05590 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05591
05592
05593
05594 }
05595 break;
05596
05597 case 45:
05598
05599
05600 #line 1250 "parse.y"
05601 {
05602
05603 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05604
05605
05606
05607 }
05608 break;
05609
05610 case 46:
05611
05612
05613 #line 1258 "parse.y"
05614 {
05615
05616 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
05617
05618
05619
05620 }
05621 break;
05622
05623 case 47:
05624
05625
05626 #line 1266 "parse.y"
05627 {
05628
05629 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
05630
05631
05632
05633 }
05634 break;
05635
05636 case 49:
05637
05638
05639 #line 1277 "parse.y"
05640 {
05641
05642 value_expr((yyvsp[(1) - (1)].node));
05643 (yyval.node) = (yyvsp[(1) - (1)].node);
05644 if (!(yyval.node)) (yyval.node) = NEW_NIL();
05645
05646
05647
05648 }
05649 break;
05650
05651 case 53:
05652
05653
05654 #line 1294 "parse.y"
05655 {
05656
05657 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05658
05659
05660
05661
05662 }
05663 break;
05664
05665 case 54:
05666
05667
05668 #line 1303 "parse.y"
05669 {
05670
05671 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05672
05673
05674
05675
05676 }
05677 break;
05678
05679 case 55:
05680
05681
05682 #line 1314 "parse.y"
05683 {
05684 (yyvsp[(1) - (1)].vars) = dyna_push();
05685
05686 (yyval.num) = ruby_sourceline;
05687
05688
05689 }
05690 break;
05691
05692 case 56:
05693
05694
05695 #line 1324 "parse.y"
05696 {
05697
05698 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
05699 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
05700
05701
05702
05703 dyna_pop((yyvsp[(1) - (5)].vars));
05704 }
05705 break;
05706
05707 case 57:
05708
05709
05710 #line 1336 "parse.y"
05711 {
05712
05713 (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
05714 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05715
05716
05717
05718 }
05719 break;
05720
05721 case 58:
05722
05723
05724 #line 1345 "parse.y"
05725 {
05726
05727 block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
05728 (yyvsp[(3) - (3)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].node));
05729 (yyval.node) = (yyvsp[(3) - (3)].node);
05730 fixpos((yyval.node), (yyvsp[(2) - (3)].node));
05731
05732
05733
05734
05735 }
05736 break;
05737
05738 case 59:
05739
05740
05741 #line 1357 "parse.y"
05742 {
05743
05744 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05745 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05746
05747
05748
05749 }
05750 break;
05751
05752 case 60:
05753
05754
05755 #line 1366 "parse.y"
05756 {
05757
05758 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05759 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05760 (yyval.node) = (yyvsp[(5) - (5)].node);
05761 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05762
05763
05764
05765
05766 }
05767 break;
05768
05769 case 61:
05770
05771
05772 #line 1378 "parse.y"
05773 {
05774
05775 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05776 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05777
05778
05779
05780 }
05781 break;
05782
05783 case 62:
05784
05785
05786 #line 1387 "parse.y"
05787 {
05788
05789 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05790 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05791 (yyval.node) = (yyvsp[(5) - (5)].node);
05792 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05793
05794
05795
05796
05797 }
05798 break;
05799
05800 case 63:
05801
05802
05803 #line 1399 "parse.y"
05804 {
05805
05806 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
05807 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05808
05809
05810
05811 }
05812 break;
05813
05814 case 64:
05815
05816
05817 #line 1408 "parse.y"
05818 {
05819
05820 (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
05821 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05822
05823
05824
05825 }
05826 break;
05827
05828 case 65:
05829
05830
05831 #line 1417 "parse.y"
05832 {
05833
05834 (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
05835
05836
05837
05838 }
05839 break;
05840
05841 case 66:
05842
05843
05844 #line 1425 "parse.y"
05845 {
05846
05847 (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
05848
05849
05850
05851 }
05852 break;
05853
05854 case 67:
05855
05856
05857 #line 1433 "parse.y"
05858 {
05859
05860 (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
05861
05862
05863
05864 }
05865 break;
05866
05867 case 69:
05868
05869
05870 #line 1444 "parse.y"
05871 {
05872
05873 (yyval.node) = (yyvsp[(2) - (3)].node);
05874
05875
05876
05877 }
05878 break;
05879
05880 case 71:
05881
05882
05883 #line 1455 "parse.y"
05884 {
05885
05886 (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
05887
05888
05889
05890 }
05891 break;
05892
05893 case 72:
05894
05895
05896 #line 1465 "parse.y"
05897 {
05898
05899 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
05900
05901
05902
05903 }
05904 break;
05905
05906 case 73:
05907
05908
05909 #line 1473 "parse.y"
05910 {
05911
05912 (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
05913
05914
05915
05916 }
05917 break;
05918
05919 case 74:
05920
05921
05922 #line 1481 "parse.y"
05923 {
05924
05925 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05926
05927
05928
05929 }
05930 break;
05931
05932 case 75:
05933
05934
05935 #line 1489 "parse.y"
05936 {
05937
05938 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
05939
05940
05941
05942
05943 }
05944 break;
05945
05946 case 76:
05947
05948
05949 #line 1498 "parse.y"
05950 {
05951
05952 (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
05953
05954
05955
05956 }
05957 break;
05958
05959 case 77:
05960
05961
05962 #line 1506 "parse.y"
05963 {
05964
05965 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
05966
05967
05968
05969
05970 }
05971 break;
05972
05973 case 78:
05974
05975
05976 #line 1515 "parse.y"
05977 {
05978
05979 (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
05980
05981
05982
05983 }
05984 break;
05985
05986 case 79:
05987
05988
05989 #line 1523 "parse.y"
05990 {
05991
05992 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
05993
05994
05995
05996
05997 }
05998 break;
05999
06000 case 80:
06001
06002
06003 #line 1532 "parse.y"
06004 {
06005
06006 (yyval.node) = NEW_MASGN(0, -1);
06007
06008
06009
06010 }
06011 break;
06012
06013 case 81:
06014
06015
06016 #line 1540 "parse.y"
06017 {
06018
06019 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
06020
06021
06022
06023
06024 }
06025 break;
06026
06027 case 83:
06028
06029
06030 #line 1552 "parse.y"
06031 {
06032
06033 (yyval.node) = (yyvsp[(2) - (3)].node);
06034
06035
06036
06037 }
06038 break;
06039
06040 case 84:
06041
06042
06043 #line 1562 "parse.y"
06044 {
06045
06046 (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
06047
06048
06049
06050 }
06051 break;
06052
06053 case 85:
06054
06055
06056 #line 1570 "parse.y"
06057 {
06058
06059 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
06060
06061
06062
06063 }
06064 break;
06065
06066 case 86:
06067
06068
06069 #line 1580 "parse.y"
06070 {
06071
06072 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
06073
06074
06075
06076 }
06077 break;
06078
06079 case 87:
06080
06081
06082 #line 1588 "parse.y"
06083 {
06084
06085 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06086
06087
06088
06089 }
06090 break;
06091
06092 case 88:
06093
06094
06095 #line 1598 "parse.y"
06096 {
06097 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06098 }
06099 break;
06100
06101 case 89:
06102
06103
06104 #line 1602 "parse.y"
06105 {
06106
06107 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06108
06109
06110
06111 }
06112 break;
06113
06114 case 90:
06115
06116
06117 #line 1610 "parse.y"
06118 {
06119
06120 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06121
06122
06123
06124 }
06125 break;
06126
06127 case 91:
06128
06129
06130 #line 1618 "parse.y"
06131 {
06132
06133 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06134
06135
06136
06137 }
06138 break;
06139
06140 case 92:
06141
06142
06143 #line 1626 "parse.y"
06144 {
06145
06146 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06147
06148
06149
06150 }
06151 break;
06152
06153 case 93:
06154
06155
06156 #line 1634 "parse.y"
06157 {
06158
06159 if (in_def || in_single)
06160 yyerror("dynamic constant assignment");
06161 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06162
06163
06164
06165
06166
06167 }
06168 break;
06169
06170 case 94:
06171
06172
06173 #line 1646 "parse.y"
06174 {
06175
06176 if (in_def || in_single)
06177 yyerror("dynamic constant assignment");
06178 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06179
06180
06181
06182 }
06183 break;
06184
06185 case 95:
06186
06187
06188 #line 1656 "parse.y"
06189 {
06190
06191 rb_backref_error((yyvsp[(1) - (1)].node));
06192 (yyval.node) = NEW_BEGIN(0);
06193
06194
06195
06196
06197 }
06198 break;
06199
06200 case 96:
06201
06202
06203 #line 1668 "parse.y"
06204 {
06205 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06206
06207 if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06208
06209
06210
06211 }
06212 break;
06213
06214 case 97:
06215
06216
06217 #line 1677 "parse.y"
06218 {
06219
06220 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06221
06222
06223
06224 }
06225 break;
06226
06227 case 98:
06228
06229
06230 #line 1685 "parse.y"
06231 {
06232
06233 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06234
06235
06236
06237 }
06238 break;
06239
06240 case 99:
06241
06242
06243 #line 1693 "parse.y"
06244 {
06245
06246 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06247
06248
06249
06250 }
06251 break;
06252
06253 case 100:
06254
06255
06256 #line 1701 "parse.y"
06257 {
06258
06259 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06260
06261
06262
06263 }
06264 break;
06265
06266 case 101:
06267
06268
06269 #line 1709 "parse.y"
06270 {
06271
06272 if (in_def || in_single)
06273 yyerror("dynamic constant assignment");
06274 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06275
06276
06277
06278
06279
06280
06281 }
06282 break;
06283
06284 case 102:
06285
06286
06287 #line 1722 "parse.y"
06288 {
06289
06290 if (in_def || in_single)
06291 yyerror("dynamic constant assignment");
06292 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06293
06294
06295
06296
06297
06298
06299 }
06300 break;
06301
06302 case 103:
06303
06304
06305 #line 1735 "parse.y"
06306 {
06307
06308 rb_backref_error((yyvsp[(1) - (1)].node));
06309 (yyval.node) = NEW_BEGIN(0);
06310
06311
06312
06313 }
06314 break;
06315
06316 case 104:
06317
06318
06319 #line 1746 "parse.y"
06320 {
06321
06322 yyerror("class/module name must be CONSTANT");
06323
06324
06325
06326 }
06327 break;
06328
06329 case 106:
06330
06331
06332 #line 1757 "parse.y"
06333 {
06334
06335 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
06336
06337
06338
06339 }
06340 break;
06341
06342 case 107:
06343
06344
06345 #line 1765 "parse.y"
06346 {
06347
06348 (yyval.node) = NEW_COLON2(0, (yyval.node));
06349
06350
06351
06352 }
06353 break;
06354
06355 case 108:
06356
06357
06358 #line 1773 "parse.y"
06359 {
06360
06361 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06362
06363
06364
06365 }
06366 break;
06367
06368 case 112:
06369
06370
06371 #line 1786 "parse.y"
06372 {
06373 lex_state = EXPR_ENDFN;
06374 (yyval.id) = (yyvsp[(1) - (1)].id);
06375 }
06376 break;
06377
06378 case 113:
06379
06380
06381 #line 1791 "parse.y"
06382 {
06383 lex_state = EXPR_ENDFN;
06384
06385 (yyval.id) = (yyvsp[(1) - (1)].id);
06386
06387
06388
06389 }
06390 break;
06391
06392 case 116:
06393
06394
06395 #line 1806 "parse.y"
06396 {
06397
06398 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
06399
06400
06401
06402 }
06403 break;
06404
06405 case 118:
06406
06407
06408 #line 1817 "parse.y"
06409 {
06410
06411 (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
06412
06413
06414
06415 }
06416 break;
06417
06418 case 119:
06419
06420
06421 #line 1824 "parse.y"
06422 {lex_state = EXPR_FNAME;}
06423 break;
06424
06425 case 120:
06426
06427
06428 #line 1825 "parse.y"
06429 {
06430
06431 (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
06432
06433
06434
06435 }
06436 break;
06437
06438 case 121:
06439
06440
06441 #line 1834 "parse.y"
06442 { ifndef_ripper((yyval.id) = '|'); }
06443 break;
06444
06445 case 122:
06446
06447
06448 #line 1835 "parse.y"
06449 { ifndef_ripper((yyval.id) = '^'); }
06450 break;
06451
06452 case 123:
06453
06454
06455 #line 1836 "parse.y"
06456 { ifndef_ripper((yyval.id) = '&'); }
06457 break;
06458
06459 case 124:
06460
06461
06462 #line 1837 "parse.y"
06463 { ifndef_ripper((yyval.id) = tCMP); }
06464 break;
06465
06466 case 125:
06467
06468
06469 #line 1838 "parse.y"
06470 { ifndef_ripper((yyval.id) = tEQ); }
06471 break;
06472
06473 case 126:
06474
06475
06476 #line 1839 "parse.y"
06477 { ifndef_ripper((yyval.id) = tEQQ); }
06478 break;
06479
06480 case 127:
06481
06482
06483 #line 1840 "parse.y"
06484 { ifndef_ripper((yyval.id) = tMATCH); }
06485 break;
06486
06487 case 128:
06488
06489
06490 #line 1841 "parse.y"
06491 { ifndef_ripper((yyval.id) = tNMATCH); }
06492 break;
06493
06494 case 129:
06495
06496
06497 #line 1842 "parse.y"
06498 { ifndef_ripper((yyval.id) = '>'); }
06499 break;
06500
06501 case 130:
06502
06503
06504 #line 1843 "parse.y"
06505 { ifndef_ripper((yyval.id) = tGEQ); }
06506 break;
06507
06508 case 131:
06509
06510
06511 #line 1844 "parse.y"
06512 { ifndef_ripper((yyval.id) = '<'); }
06513 break;
06514
06515 case 132:
06516
06517
06518 #line 1845 "parse.y"
06519 { ifndef_ripper((yyval.id) = tLEQ); }
06520 break;
06521
06522 case 133:
06523
06524
06525 #line 1846 "parse.y"
06526 { ifndef_ripper((yyval.id) = tNEQ); }
06527 break;
06528
06529 case 134:
06530
06531
06532 #line 1847 "parse.y"
06533 { ifndef_ripper((yyval.id) = tLSHFT); }
06534 break;
06535
06536 case 135:
06537
06538
06539 #line 1848 "parse.y"
06540 { ifndef_ripper((yyval.id) = tRSHFT); }
06541 break;
06542
06543 case 136:
06544
06545
06546 #line 1849 "parse.y"
06547 { ifndef_ripper((yyval.id) = '+'); }
06548 break;
06549
06550 case 137:
06551
06552
06553 #line 1850 "parse.y"
06554 { ifndef_ripper((yyval.id) = '-'); }
06555 break;
06556
06557 case 138:
06558
06559
06560 #line 1851 "parse.y"
06561 { ifndef_ripper((yyval.id) = '*'); }
06562 break;
06563
06564 case 139:
06565
06566
06567 #line 1852 "parse.y"
06568 { ifndef_ripper((yyval.id) = '*'); }
06569 break;
06570
06571 case 140:
06572
06573
06574 #line 1853 "parse.y"
06575 { ifndef_ripper((yyval.id) = '/'); }
06576 break;
06577
06578 case 141:
06579
06580
06581 #line 1854 "parse.y"
06582 { ifndef_ripper((yyval.id) = '%'); }
06583 break;
06584
06585 case 142:
06586
06587
06588 #line 1855 "parse.y"
06589 { ifndef_ripper((yyval.id) = tPOW); }
06590 break;
06591
06592 case 143:
06593
06594
06595 #line 1856 "parse.y"
06596 { ifndef_ripper((yyval.id) = '!'); }
06597 break;
06598
06599 case 144:
06600
06601
06602 #line 1857 "parse.y"
06603 { ifndef_ripper((yyval.id) = '~'); }
06604 break;
06605
06606 case 145:
06607
06608
06609 #line 1858 "parse.y"
06610 { ifndef_ripper((yyval.id) = tUPLUS); }
06611 break;
06612
06613 case 146:
06614
06615
06616 #line 1859 "parse.y"
06617 { ifndef_ripper((yyval.id) = tUMINUS); }
06618 break;
06619
06620 case 147:
06621
06622
06623 #line 1860 "parse.y"
06624 { ifndef_ripper((yyval.id) = tAREF); }
06625 break;
06626
06627 case 148:
06628
06629
06630 #line 1861 "parse.y"
06631 { ifndef_ripper((yyval.id) = tASET); }
06632 break;
06633
06634 case 149:
06635
06636
06637 #line 1862 "parse.y"
06638 { ifndef_ripper((yyval.id) = '`'); }
06639 break;
06640
06641 case 191:
06642
06643
06644 #line 1880 "parse.y"
06645 {
06646
06647 value_expr((yyvsp[(3) - (3)].node));
06648 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06649
06650
06651
06652 }
06653 break;
06654
06655 case 192:
06656
06657
06658 #line 1889 "parse.y"
06659 {
06660
06661 value_expr((yyvsp[(3) - (5)].node));
06662 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06663 (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
06664
06665
06666
06667 }
06668 break;
06669
06670 case 193:
06671
06672
06673 #line 1899 "parse.y"
06674 {
06675
06676 value_expr((yyvsp[(3) - (3)].node));
06677 if ((yyvsp[(1) - (3)].node)) {
06678 ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
06679 if ((yyvsp[(2) - (3)].id) == tOROP) {
06680 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06681 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
06682 if (is_asgn_or_id(vid)) {
06683 (yyval.node)->nd_aid = vid;
06684 }
06685 }
06686 else if ((yyvsp[(2) - (3)].id) == tANDOP) {
06687 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06688 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
06689 }
06690 else {
06691 (yyval.node) = (yyvsp[(1) - (3)].node);
06692 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
06693 }
06694 }
06695 else {
06696 (yyval.node) = NEW_BEGIN(0);
06697 }
06698
06699
06700
06701 }
06702 break;
06703
06704 case 194:
06705
06706
06707 #line 1928 "parse.y"
06708 {
06709
06710 value_expr((yyvsp[(3) - (5)].node));
06711 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06712 if ((yyvsp[(1) - (5)].node)) {
06713 ID vid = (yyvsp[(1) - (5)].node)->nd_vid;
06714 if ((yyvsp[(2) - (5)].id) == tOROP) {
06715 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06716 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (5)].node));
06717 if (is_asgn_or_id(vid)) {
06718 (yyval.node)->nd_aid = vid;
06719 }
06720 }
06721 else if ((yyvsp[(2) - (5)].id) == tANDOP) {
06722 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06723 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (5)].node));
06724 }
06725 else {
06726 (yyval.node) = (yyvsp[(1) - (5)].node);
06727 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (5)].id), NEW_LIST((yyvsp[(3) - (5)].node)));
06728 }
06729 }
06730 else {
06731 (yyval.node) = NEW_BEGIN(0);
06732 }
06733
06734
06735
06736
06737 }
06738 break;
06739
06740 case 195:
06741
06742
06743 #line 1959 "parse.y"
06744 {
06745
06746 NODE *args;
06747
06748 value_expr((yyvsp[(6) - (6)].node));
06749 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
06750 if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
06751 args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06752 }
06753 else {
06754 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06755 }
06756 if ((yyvsp[(5) - (6)].id) == tOROP) {
06757 (yyvsp[(5) - (6)].id) = 0;
06758 }
06759 else if ((yyvsp[(5) - (6)].id) == tANDOP) {
06760 (yyvsp[(5) - (6)].id) = 1;
06761 }
06762 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
06763 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
06764
06765
06766
06767
06768 }
06769 break;
06770
06771 case 196:
06772
06773
06774 #line 1985 "parse.y"
06775 {
06776
06777 value_expr((yyvsp[(5) - (5)].node));
06778 if ((yyvsp[(4) - (5)].id) == tOROP) {
06779 (yyvsp[(4) - (5)].id) = 0;
06780 }
06781 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06782 (yyvsp[(4) - (5)].id) = 1;
06783 }
06784 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06785 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06786
06787
06788
06789
06790 }
06791 break;
06792
06793 case 197:
06794
06795
06796 #line 2002 "parse.y"
06797 {
06798
06799 value_expr((yyvsp[(5) - (5)].node));
06800 if ((yyvsp[(4) - (5)].id) == tOROP) {
06801 (yyvsp[(4) - (5)].id) = 0;
06802 }
06803 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06804 (yyvsp[(4) - (5)].id) = 1;
06805 }
06806 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06807 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06808
06809
06810
06811
06812 }
06813 break;
06814
06815 case 198:
06816
06817
06818 #line 2019 "parse.y"
06819 {
06820
06821 value_expr((yyvsp[(5) - (5)].node));
06822 if ((yyvsp[(4) - (5)].id) == tOROP) {
06823 (yyvsp[(4) - (5)].id) = 0;
06824 }
06825 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06826 (yyvsp[(4) - (5)].id) = 1;
06827 }
06828 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06829 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06830
06831
06832
06833
06834 }
06835 break;
06836
06837 case 199:
06838
06839
06840 #line 2036 "parse.y"
06841 {
06842
06843 yyerror("constant re-assignment");
06844 (yyval.node) = NEW_BEGIN(0);
06845
06846
06847
06848
06849
06850 }
06851 break;
06852
06853 case 200:
06854
06855
06856 #line 2047 "parse.y"
06857 {
06858
06859 yyerror("constant re-assignment");
06860 (yyval.node) = NEW_BEGIN(0);
06861
06862
06863
06864
06865
06866 }
06867 break;
06868
06869 case 201:
06870
06871
06872 #line 2058 "parse.y"
06873 {
06874
06875 rb_backref_error((yyvsp[(1) - (3)].node));
06876 (yyval.node) = NEW_BEGIN(0);
06877
06878
06879
06880
06881
06882 }
06883 break;
06884
06885 case 202:
06886
06887
06888 #line 2069 "parse.y"
06889 {
06890
06891 value_expr((yyvsp[(1) - (3)].node));
06892 value_expr((yyvsp[(3) - (3)].node));
06893 (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06894 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
06895 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
06896 deferred_nodes = list_append(deferred_nodes, (yyval.node));
06897 }
06898
06899
06900
06901 }
06902 break;
06903
06904 case 203:
06905
06906
06907 #line 2083 "parse.y"
06908 {
06909
06910 value_expr((yyvsp[(1) - (3)].node));
06911 value_expr((yyvsp[(3) - (3)].node));
06912 (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06913 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
06914 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
06915 deferred_nodes = list_append(deferred_nodes, (yyval.node));
06916 }
06917
06918
06919
06920 }
06921 break;
06922
06923 case 204:
06924
06925
06926 #line 2097 "parse.y"
06927 {
06928
06929 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
06930
06931
06932
06933 }
06934 break;
06935
06936 case 205:
06937
06938
06939 #line 2105 "parse.y"
06940 {
06941
06942 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
06943
06944
06945
06946 }
06947 break;
06948
06949 case 206:
06950
06951
06952 #line 2113 "parse.y"
06953 {
06954
06955 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
06956
06957
06958
06959 }
06960 break;
06961
06962 case 207:
06963
06964
06965 #line 2121 "parse.y"
06966 {
06967
06968 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
06969
06970
06971
06972 }
06973 break;
06974
06975 case 208:
06976
06977
06978 #line 2129 "parse.y"
06979 {
06980
06981 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
06982
06983
06984
06985 }
06986 break;
06987
06988 case 209:
06989
06990
06991 #line 2137 "parse.y"
06992 {
06993
06994 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
06995
06996
06997
06998 }
06999 break;
07000
07001 case 210:
07002
07003
07004 #line 2145 "parse.y"
07005 {
07006
07007 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
07008
07009
07010
07011
07012 }
07013 break;
07014
07015 case 211:
07016
07017
07018 #line 2154 "parse.y"
07019 {
07020
07021 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
07022
07023
07024
07025
07026 }
07027 break;
07028
07029 case 212:
07030
07031
07032 #line 2163 "parse.y"
07033 {
07034
07035 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
07036
07037
07038
07039 }
07040 break;
07041
07042 case 213:
07043
07044
07045 #line 2171 "parse.y"
07046 {
07047
07048 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
07049
07050
07051
07052 }
07053 break;
07054
07055 case 214:
07056
07057
07058 #line 2179 "parse.y"
07059 {
07060
07061 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
07062
07063
07064
07065 }
07066 break;
07067
07068 case 215:
07069
07070
07071 #line 2187 "parse.y"
07072 {
07073
07074 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
07075
07076
07077
07078 }
07079 break;
07080
07081 case 216:
07082
07083
07084 #line 2195 "parse.y"
07085 {
07086
07087 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
07088
07089
07090
07091 }
07092 break;
07093
07094 case 217:
07095
07096
07097 #line 2203 "parse.y"
07098 {
07099
07100 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
07101
07102
07103
07104 }
07105 break;
07106
07107 case 218:
07108
07109
07110 #line 2211 "parse.y"
07111 {
07112
07113 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
07114
07115
07116
07117 }
07118 break;
07119
07120 case 219:
07121
07122
07123 #line 2219 "parse.y"
07124 {
07125
07126 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
07127
07128
07129
07130 }
07131 break;
07132
07133 case 220:
07134
07135
07136 #line 2227 "parse.y"
07137 {
07138
07139 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
07140
07141
07142
07143 }
07144 break;
07145
07146 case 221:
07147
07148
07149 #line 2235 "parse.y"
07150 {
07151
07152 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
07153
07154
07155
07156 }
07157 break;
07158
07159 case 222:
07160
07161
07162 #line 2243 "parse.y"
07163 {
07164
07165 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
07166
07167
07168
07169 }
07170 break;
07171
07172 case 223:
07173
07174
07175 #line 2251 "parse.y"
07176 {
07177
07178 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
07179
07180
07181
07182 }
07183 break;
07184
07185 case 224:
07186
07187
07188 #line 2259 "parse.y"
07189 {
07190
07191 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
07192
07193
07194
07195 }
07196 break;
07197
07198 case 225:
07199
07200
07201 #line 2267 "parse.y"
07202 {
07203
07204 (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07205 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && TYPE((yyvsp[(1) - (3)].node)->nd_lit) == T_REGEXP) {
07206 (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
07207 }
07208
07209
07210
07211 }
07212 break;
07213
07214 case 226:
07215
07216
07217 #line 2278 "parse.y"
07218 {
07219
07220 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
07221
07222
07223
07224 }
07225 break;
07226
07227 case 227:
07228
07229
07230 #line 2286 "parse.y"
07231 {
07232
07233 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
07234
07235
07236
07237 }
07238 break;
07239
07240 case 228:
07241
07242
07243 #line 2294 "parse.y"
07244 {
07245
07246 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
07247
07248
07249
07250 }
07251 break;
07252
07253 case 229:
07254
07255
07256 #line 2302 "parse.y"
07257 {
07258
07259 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
07260
07261
07262
07263 }
07264 break;
07265
07266 case 230:
07267
07268
07269 #line 2310 "parse.y"
07270 {
07271
07272 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
07273
07274
07275
07276 }
07277 break;
07278
07279 case 231:
07280
07281
07282 #line 2318 "parse.y"
07283 {
07284
07285 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07286
07287
07288
07289 }
07290 break;
07291
07292 case 232:
07293
07294
07295 #line 2326 "parse.y"
07296 {
07297
07298 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07299
07300
07301
07302 }
07303 break;
07304
07305 case 233:
07306
07307
07308 #line 2333 "parse.y"
07309 {in_defined = 1;}
07310 break;
07311
07312 case 234:
07313
07314
07315 #line 2334 "parse.y"
07316 {
07317
07318 in_defined = 0;
07319 (yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node));
07320
07321
07322
07323
07324 }
07325 break;
07326
07327 case 235:
07328
07329
07330 #line 2344 "parse.y"
07331 {
07332
07333 value_expr((yyvsp[(1) - (6)].node));
07334 (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
07335 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
07336
07337
07338
07339 }
07340 break;
07341
07342 case 236:
07343
07344
07345 #line 2354 "parse.y"
07346 {
07347 (yyval.node) = (yyvsp[(1) - (1)].node);
07348 }
07349 break;
07350
07351 case 237:
07352
07353
07354 #line 2360 "parse.y"
07355 {
07356
07357 value_expr((yyvsp[(1) - (1)].node));
07358 (yyval.node) = (yyvsp[(1) - (1)].node);
07359 if (!(yyval.node)) (yyval.node) = NEW_NIL();
07360
07361
07362
07363 }
07364 break;
07365
07366 case 239:
07367
07368
07369 #line 2373 "parse.y"
07370 {
07371 (yyval.node) = (yyvsp[(1) - (2)].node);
07372 }
07373 break;
07374
07375 case 240:
07376
07377
07378 #line 2377 "parse.y"
07379 {
07380
07381 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07382
07383
07384
07385 }
07386 break;
07387
07388 case 241:
07389
07390
07391 #line 2385 "parse.y"
07392 {
07393
07394 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07395
07396
07397
07398 }
07399 break;
07400
07401 case 242:
07402
07403
07404 #line 2395 "parse.y"
07405 {
07406
07407 (yyval.node) = (yyvsp[(2) - (3)].node);
07408
07409
07410
07411 }
07412 break;
07413
07414 case 247:
07415
07416
07417 #line 2413 "parse.y"
07418 {
07419
07420 value_expr((yyvsp[(1) - (1)].node));
07421 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07422
07423
07424
07425 }
07426 break;
07427
07428 case 248:
07429
07430
07431 #line 2422 "parse.y"
07432 {
07433
07434 (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
07435
07436
07437
07438 }
07439 break;
07440
07441 case 249:
07442
07443
07444 #line 2430 "parse.y"
07445 {
07446
07447 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07448 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
07449
07450
07451
07452
07453 }
07454 break;
07455
07456 case 250:
07457
07458
07459 #line 2440 "parse.y"
07460 {
07461
07462 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07463 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
07464
07465
07466
07467 }
07468 break;
07469
07470 case 252:
07471
07472
07473 #line 2457 "parse.y"
07474 {
07475 (yyval.val) = cmdarg_stack;
07476 CMDARG_PUSH(1);
07477 }
07478 break;
07479
07480 case 253:
07481
07482
07483 #line 2462 "parse.y"
07484 {
07485
07486 cmdarg_stack = (yyvsp[(1) - (2)].val);
07487 (yyval.node) = (yyvsp[(2) - (2)].node);
07488 }
07489 break;
07490
07491 case 254:
07492
07493
07494 #line 2470 "parse.y"
07495 {
07496
07497 (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
07498
07499
07500
07501 }
07502 break;
07503
07504 case 255:
07505
07506
07507 #line 2480 "parse.y"
07508 {
07509 (yyval.node) = (yyvsp[(2) - (2)].node);
07510 }
07511 break;
07512
07513 case 256:
07514
07515
07516 #line 2484 "parse.y"
07517 {
07518 (yyval.node) = 0;
07519 }
07520 break;
07521
07522 case 257:
07523
07524
07525 #line 2488 "parse.y"
07526 {
07527 (yyval.node) = 0;
07528 }
07529 break;
07530
07531 case 258:
07532
07533
07534 #line 2494 "parse.y"
07535 {
07536
07537 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07538
07539
07540
07541 }
07542 break;
07543
07544 case 259:
07545
07546
07547 #line 2502 "parse.y"
07548 {
07549
07550 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07551
07552
07553
07554 }
07555 break;
07556
07557 case 260:
07558
07559
07560 #line 2510 "parse.y"
07561 {
07562
07563 NODE *n1;
07564 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07565 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07566 }
07567 else {
07568 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07569 }
07570
07571
07572
07573 }
07574 break;
07575
07576 case 261:
07577
07578
07579 #line 2524 "parse.y"
07580 {
07581
07582 NODE *n1;
07583 if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07584 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07585 }
07586 else {
07587 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07588 }
07589
07590
07591
07592 }
07593 break;
07594
07595 case 262:
07596
07597
07598 #line 2540 "parse.y"
07599 {
07600
07601 NODE *n1;
07602 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07603 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07604 }
07605 else {
07606 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07607 }
07608
07609
07610
07611 }
07612 break;
07613
07614 case 263:
07615
07616
07617 #line 2554 "parse.y"
07618 {
07619
07620 NODE *n1;
07621 if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
07622 (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07623 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07624 }
07625 else {
07626 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07627 }
07628
07629
07630
07631 }
07632 break;
07633
07634 case 264:
07635
07636
07637 #line 2569 "parse.y"
07638 {
07639
07640 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07641
07642
07643
07644 }
07645 break;
07646
07647 case 273:
07648
07649
07650 #line 2587 "parse.y"
07651 {
07652
07653 (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
07654
07655
07656
07657 }
07658 break;
07659
07660 case 274:
07661
07662
07663 #line 2595 "parse.y"
07664 {
07665
07666 (yyval.num) = ruby_sourceline;
07667
07668
07669 }
07670 break;
07671
07672 case 275:
07673
07674
07675 #line 2603 "parse.y"
07676 {
07677
07678 if ((yyvsp[(3) - (4)].node) == NULL) {
07679 (yyval.node) = NEW_NIL();
07680 }
07681 else {
07682 if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
07683 nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
07684 nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
07685 (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
07686 }
07687 nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
07688
07689
07690
07691 }
07692 break;
07693
07694 case 276:
07695
07696
07697 #line 2619 "parse.y"
07698 {lex_state = EXPR_ENDARG;}
07699 break;
07700
07701 case 277:
07702
07703
07704 #line 2620 "parse.y"
07705 {
07706 rb_warning0("(...) interpreted as grouped expression");
07707
07708 (yyval.node) = (yyvsp[(2) - (4)].node);
07709
07710
07711
07712 }
07713 break;
07714
07715 case 278:
07716
07717
07718 #line 2629 "parse.y"
07719 {
07720
07721 (yyval.node) = (yyvsp[(2) - (3)].node);
07722
07723
07724
07725 }
07726 break;
07727
07728 case 279:
07729
07730
07731 #line 2637 "parse.y"
07732 {
07733
07734 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
07735
07736
07737
07738 }
07739 break;
07740
07741 case 280:
07742
07743
07744 #line 2645 "parse.y"
07745 {
07746
07747 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
07748
07749
07750
07751 }
07752 break;
07753
07754 case 281:
07755
07756
07757 #line 2653 "parse.y"
07758 {
07759
07760 if ((yyvsp[(2) - (3)].node) == 0) {
07761 (yyval.node) = NEW_ZARRAY();
07762 }
07763 else {
07764 (yyval.node) = (yyvsp[(2) - (3)].node);
07765 }
07766
07767
07768
07769 }
07770 break;
07771
07772 case 282:
07773
07774
07775 #line 2666 "parse.y"
07776 {
07777
07778 (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node));
07779
07780
07781
07782 }
07783 break;
07784
07785 case 283:
07786
07787
07788 #line 2674 "parse.y"
07789 {
07790
07791 (yyval.node) = NEW_RETURN(0);
07792
07793
07794
07795 }
07796 break;
07797
07798 case 284:
07799
07800
07801 #line 2682 "parse.y"
07802 {
07803
07804 (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
07805
07806
07807
07808 }
07809 break;
07810
07811 case 285:
07812
07813
07814 #line 2690 "parse.y"
07815 {
07816
07817 (yyval.node) = NEW_YIELD(0, Qfalse);
07818
07819
07820
07821 }
07822 break;
07823
07824 case 286:
07825
07826
07827 #line 2698 "parse.y"
07828 {
07829
07830 (yyval.node) = NEW_YIELD(0, Qfalse);
07831
07832
07833
07834 }
07835 break;
07836
07837 case 287:
07838
07839
07840 #line 2705 "parse.y"
07841 {in_defined = 1;}
07842 break;
07843
07844 case 288:
07845
07846
07847 #line 2706 "parse.y"
07848 {
07849
07850 in_defined = 0;
07851 (yyval.node) = NEW_DEFINED((yyvsp[(5) - (6)].node));
07852
07853
07854
07855
07856 }
07857 break;
07858
07859 case 289:
07860
07861
07862 #line 2716 "parse.y"
07863 {
07864
07865 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!');
07866
07867
07868
07869 }
07870 break;
07871
07872 case 290:
07873
07874
07875 #line 2724 "parse.y"
07876 {
07877
07878 (yyval.node) = call_uni_op(cond(NEW_NIL()), '!');
07879
07880
07881
07882 }
07883 break;
07884
07885 case 291:
07886
07887
07888 #line 2732 "parse.y"
07889 {
07890
07891 (yyvsp[(2) - (2)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (2)].id), 0);
07892 (yyval.node) = (yyvsp[(2) - (2)].node);
07893 fixpos((yyvsp[(2) - (2)].node)->nd_iter, (yyvsp[(2) - (2)].node));
07894
07895
07896
07897
07898 }
07899 break;
07900
07901 case 293:
07902
07903
07904 #line 2744 "parse.y"
07905 {
07906
07907 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
07908 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
07909 (yyval.node) = (yyvsp[(2) - (2)].node);
07910 fixpos((yyval.node), (yyvsp[(1) - (2)].node));
07911
07912
07913
07914 }
07915 break;
07916
07917 case 294:
07918
07919
07920 #line 2755 "parse.y"
07921 {
07922 (yyval.node) = (yyvsp[(2) - (2)].node);
07923 }
07924 break;
07925
07926 case 295:
07927
07928
07929 #line 2762 "parse.y"
07930 {
07931
07932 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
07933 fixpos((yyval.node), (yyvsp[(2) - (6)].node));
07934
07935
07936
07937 }
07938 break;
07939
07940 case 296:
07941
07942
07943 #line 2774 "parse.y"
07944 {
07945
07946 (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
07947 fixpos((yyval.node), (yyvsp[(2) - (6)].node));
07948
07949
07950
07951 }
07952 break;
07953
07954 case 297:
07955
07956
07957 #line 2782 "parse.y"
07958 {COND_PUSH(1);}
07959 break;
07960
07961 case 298:
07962
07963
07964 #line 2782 "parse.y"
07965 {COND_POP();}
07966 break;
07967
07968 case 299:
07969
07970
07971 #line 2785 "parse.y"
07972 {
07973
07974 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
07975 fixpos((yyval.node), (yyvsp[(3) - (7)].node));
07976
07977
07978
07979 }
07980 break;
07981
07982 case 300:
07983
07984
07985 #line 2793 "parse.y"
07986 {COND_PUSH(1);}
07987 break;
07988
07989 case 301:
07990
07991
07992 #line 2793 "parse.y"
07993 {COND_POP();}
07994 break;
07995
07996 case 302:
07997
07998
07999 #line 2796 "parse.y"
08000 {
08001
08002 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
08003 fixpos((yyval.node), (yyvsp[(3) - (7)].node));
08004
08005
08006
08007 }
08008 break;
08009
08010 case 303:
08011
08012
08013 #line 2807 "parse.y"
08014 {
08015
08016 (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08017 fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08018
08019
08020
08021 }
08022 break;
08023
08024 case 304:
08025
08026
08027 #line 2816 "parse.y"
08028 {
08029
08030 (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
08031
08032
08033
08034 }
08035 break;
08036
08037 case 305:
08038
08039
08040 #line 2824 "parse.y"
08041 {COND_PUSH(1);}
08042 break;
08043
08044 case 306:
08045
08046
08047 #line 2826 "parse.y"
08048 {COND_POP();}
08049 break;
08050
08051 case 307:
08052
08053
08054 #line 2829 "parse.y"
08055 {
08056
08057
08058
08059
08060
08061
08062
08063
08064
08065
08066 ID id = internal_id();
08067 ID *tbl = ALLOC_N(ID, 2);
08068 NODE *m = NEW_ARGS_AUX(0, 0);
08069 NODE *args, *scope;
08070
08071 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) {
08072
08073
08074
08075
08076 NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
08077 NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
08078 m->nd_next = block_append(
08079 NEW_IF(
08080 NEW_NODE(NODE_AND,
08081 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("length"), 0),
08082 rb_intern("=="), one),
08083 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero),
08084 rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
08085 0),
08086 NEW_DASGN_CURR(id,
08087 NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero)),
08088 0),
08089 node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id)));
08090
08091 args = new_args(m, 0, id, 0, 0);
08092 }
08093 else {
08094 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN ||
08095 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN ||
08096 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) {
08097 (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
08098 m->nd_plen = 1;
08099 m->nd_next = (yyvsp[(2) - (9)].node);
08100 args = new_args(m, 0, 0, 0, 0);
08101 }
08102 else {
08103 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
08104 args = new_args(m, 0, id, 0, 0);
08105 }
08106 }
08107 scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
08108 tbl[0] = 1; tbl[1] = id;
08109 (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
08110 fixpos((yyval.node), (yyvsp[(2) - (9)].node));
08111
08112
08113
08114 }
08115 break;
08116
08117 case 308:
08118
08119
08120 #line 2890 "parse.y"
08121 {
08122 if (in_def || in_single)
08123 yyerror("class definition in method body");
08124 local_push(0);
08125
08126 (yyval.num) = ruby_sourceline;
08127
08128
08129 }
08130 break;
08131
08132 case 309:
08133
08134
08135 #line 2901 "parse.y"
08136 {
08137
08138 (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
08139 nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
08140
08141
08142
08143 local_pop();
08144 }
08145 break;
08146
08147 case 310:
08148
08149
08150 #line 2911 "parse.y"
08151 {
08152 (yyval.num) = in_def;
08153 in_def = 0;
08154 }
08155 break;
08156
08157 case 311:
08158
08159
08160 #line 2916 "parse.y"
08161 {
08162 (yyval.num) = in_single;
08163 in_single = 0;
08164 local_push(0);
08165 }
08166 break;
08167
08168 case 312:
08169
08170
08171 #line 2923 "parse.y"
08172 {
08173
08174 (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
08175 fixpos((yyval.node), (yyvsp[(3) - (8)].node));
08176
08177
08178
08179 local_pop();
08180 in_def = (yyvsp[(4) - (8)].num);
08181 in_single = (yyvsp[(6) - (8)].num);
08182 }
08183 break;
08184
08185 case 313:
08186
08187
08188 #line 2935 "parse.y"
08189 {
08190 if (in_def || in_single)
08191 yyerror("module definition in method body");
08192 local_push(0);
08193
08194 (yyval.num) = ruby_sourceline;
08195
08196
08197 }
08198 break;
08199
08200 case 314:
08201
08202
08203 #line 2946 "parse.y"
08204 {
08205
08206 (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08207 nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
08208
08209
08210
08211 local_pop();
08212 }
08213 break;
08214
08215 case 315:
08216
08217
08218 #line 2956 "parse.y"
08219 {
08220 (yyval.id) = cur_mid;
08221 cur_mid = (yyvsp[(2) - (2)].id);
08222 in_def++;
08223 local_push(0);
08224 }
08225 break;
08226
08227 case 316:
08228
08229
08230 #line 2965 "parse.y"
08231 {
08232
08233 NODE *body = remove_begin((yyvsp[(5) - (6)].node));
08234 reduce_nodes(&body);
08235 (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
08236 nd_set_line((yyval.node), (yyvsp[(1) - (6)].num));
08237
08238
08239
08240 local_pop();
08241 in_def--;
08242 cur_mid = (yyvsp[(3) - (6)].id);
08243 }
08244 break;
08245
08246 case 317:
08247
08248
08249 #line 2978 "parse.y"
08250 {lex_state = EXPR_FNAME;}
08251 break;
08252
08253 case 318:
08254
08255
08256 #line 2979 "parse.y"
08257 {
08258 in_single++;
08259 lex_state = EXPR_ENDFN;
08260 local_push(0);
08261 }
08262 break;
08263
08264 case 319:
08265
08266
08267 #line 2987 "parse.y"
08268 {
08269
08270 NODE *body = remove_begin((yyvsp[(8) - (9)].node));
08271 reduce_nodes(&body);
08272 (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
08273 nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
08274
08275
08276
08277 local_pop();
08278 in_single--;
08279 }
08280 break;
08281
08282 case 320:
08283
08284
08285 #line 3000 "parse.y"
08286 {
08287
08288 (yyval.node) = NEW_BREAK(0);
08289
08290
08291
08292 }
08293 break;
08294
08295 case 321:
08296
08297
08298 #line 3008 "parse.y"
08299 {
08300
08301 (yyval.node) = NEW_NEXT(0);
08302
08303
08304
08305 }
08306 break;
08307
08308 case 322:
08309
08310
08311 #line 3016 "parse.y"
08312 {
08313
08314 (yyval.node) = NEW_REDO();
08315
08316
08317
08318 }
08319 break;
08320
08321 case 323:
08322
08323
08324 #line 3024 "parse.y"
08325 {
08326
08327 (yyval.node) = NEW_RETRY();
08328
08329
08330
08331 }
08332 break;
08333
08334 case 324:
08335
08336
08337 #line 3034 "parse.y"
08338 {
08339
08340 value_expr((yyvsp[(1) - (1)].node));
08341 (yyval.node) = (yyvsp[(1) - (1)].node);
08342 if (!(yyval.node)) (yyval.node) = NEW_NIL();
08343
08344
08345
08346 }
08347 break;
08348
08349 case 325:
08350
08351
08352 #line 3046 "parse.y"
08353 {
08354 token_info_push("begin");
08355 }
08356 break;
08357
08358 case 326:
08359
08360
08361 #line 3052 "parse.y"
08362 {
08363 token_info_push("if");
08364 }
08365 break;
08366
08367 case 327:
08368
08369
08370 #line 3058 "parse.y"
08371 {
08372 token_info_push("unless");
08373 }
08374 break;
08375
08376 case 328:
08377
08378
08379 #line 3064 "parse.y"
08380 {
08381 token_info_push("while");
08382 }
08383 break;
08384
08385 case 329:
08386
08387
08388 #line 3070 "parse.y"
08389 {
08390 token_info_push("until");
08391 }
08392 break;
08393
08394 case 330:
08395
08396
08397 #line 3076 "parse.y"
08398 {
08399 token_info_push("case");
08400 }
08401 break;
08402
08403 case 331:
08404
08405
08406 #line 3082 "parse.y"
08407 {
08408 token_info_push("for");
08409 }
08410 break;
08411
08412 case 332:
08413
08414
08415 #line 3088 "parse.y"
08416 {
08417 token_info_push("class");
08418 }
08419 break;
08420
08421 case 333:
08422
08423
08424 #line 3094 "parse.y"
08425 {
08426 token_info_push("module");
08427 }
08428 break;
08429
08430 case 334:
08431
08432
08433 #line 3100 "parse.y"
08434 {
08435 token_info_push("def");
08436
08437 (yyval.num) = ruby_sourceline;
08438
08439
08440 }
08441 break;
08442
08443 case 335:
08444
08445
08446 #line 3110 "parse.y"
08447 {
08448 token_info_pop("end");
08449 }
08450 break;
08451
08452 case 342:
08453
08454
08455 #line 3140 "parse.y"
08456 {
08457
08458 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
08459 fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08460
08461
08462
08463 }
08464 break;
08465
08466 case 344:
08467
08468
08469 #line 3152 "parse.y"
08470 {
08471
08472 (yyval.node) = (yyvsp[(2) - (2)].node);
08473
08474
08475
08476 }
08477 break;
08478
08479 case 347:
08480
08481
08482 #line 3166 "parse.y"
08483 {
08484 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
08485
08486
08487
08488
08489 }
08490 break;
08491
08492 case 348:
08493
08494
08495 #line 3174 "parse.y"
08496 {
08497
08498 (yyval.node) = (yyvsp[(2) - (3)].node);
08499
08500
08501
08502 }
08503 break;
08504
08505 case 349:
08506
08507
08508 #line 3184 "parse.y"
08509 {
08510
08511 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
08512
08513
08514
08515 }
08516 break;
08517
08518 case 350:
08519
08520
08521 #line 3192 "parse.y"
08522 {
08523
08524 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
08525
08526
08527
08528 }
08529 break;
08530
08531 case 351:
08532
08533
08534 #line 3202 "parse.y"
08535 {
08536
08537 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
08538
08539
08540
08541 }
08542 break;
08543
08544 case 352:
08545
08546
08547 #line 3210 "parse.y"
08548 {
08549 (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
08550
08551 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
08552
08553
08554
08555 }
08556 break;
08557
08558 case 353:
08559
08560
08561 #line 3219 "parse.y"
08562 {
08563 (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
08564
08565 (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
08566
08567
08568
08569 }
08570 break;
08571
08572 case 354:
08573
08574
08575 #line 3228 "parse.y"
08576 {
08577
08578 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
08579
08580
08581
08582 }
08583 break;
08584
08585 case 355:
08586
08587
08588 #line 3236 "parse.y"
08589 {
08590
08591 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
08592
08593
08594
08595 }
08596 break;
08597
08598 case 356:
08599
08600
08601 #line 3244 "parse.y"
08602 {
08603 (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
08604
08605 (yyval.node) = NEW_MASGN(0, (yyval.node));
08606
08607
08608
08609 }
08610 break;
08611
08612 case 357:
08613
08614
08615 #line 3253 "parse.y"
08616 {
08617 (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
08618
08619 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
08620
08621
08622
08623
08624
08625
08626 }
08627 break;
08628
08629 case 358:
08630
08631
08632 #line 3265 "parse.y"
08633 {
08634
08635 (yyval.node) = NEW_MASGN(0, -1);
08636
08637
08638
08639 }
08640 break;
08641
08642 case 359:
08643
08644
08645 #line 3273 "parse.y"
08646 {
08647
08648 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
08649
08650
08651
08652 }
08653 break;
08654
08655 case 360:
08656
08657
08658 #line 3283 "parse.y"
08659 {
08660
08661 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
08662
08663
08664
08665 }
08666 break;
08667
08668 case 361:
08669
08670
08671 #line 3291 "parse.y"
08672 {
08673
08674 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
08675
08676
08677
08678 }
08679 break;
08680
08681 case 362:
08682
08683
08684 #line 3299 "parse.y"
08685 {
08686
08687 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
08688
08689
08690
08691 }
08692 break;
08693
08694 case 363:
08695
08696
08697 #line 3307 "parse.y"
08698 {
08699
08700 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08701
08702
08703
08704 }
08705 break;
08706
08707 case 364:
08708
08709
08710 #line 3315 "parse.y"
08711 {
08712
08713 (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08714
08715
08716
08717 }
08718 break;
08719
08720 case 365:
08721
08722
08723 #line 3323 "parse.y"
08724 {
08725
08726 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 1, 0, 0);
08727
08728
08729
08730
08731 }
08732 break;
08733
08734 case 366:
08735
08736
08737 #line 3332 "parse.y"
08738 {
08739
08740 (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08741
08742
08743
08744 }
08745 break;
08746
08747 case 367:
08748
08749
08750 #line 3340 "parse.y"
08751 {
08752
08753 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
08754
08755
08756
08757 }
08758 break;
08759
08760 case 368:
08761
08762
08763 #line 3348 "parse.y"
08764 {
08765
08766 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08767
08768
08769
08770 }
08771 break;
08772
08773 case 369:
08774
08775
08776 #line 3356 "parse.y"
08777 {
08778
08779 (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08780
08781
08782
08783 }
08784 break;
08785
08786 case 370:
08787
08788
08789 #line 3364 "parse.y"
08790 {
08791
08792 (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
08793
08794
08795
08796 }
08797 break;
08798
08799 case 371:
08800
08801
08802 #line 3372 "parse.y"
08803 {
08804
08805 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08806
08807
08808
08809 }
08810 break;
08811
08812 case 372:
08813
08814
08815 #line 3380 "parse.y"
08816 {
08817
08818 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
08819
08820
08821
08822 }
08823 break;
08824
08825 case 373:
08826
08827
08828 #line 3388 "parse.y"
08829 {
08830
08831 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08832
08833
08834
08835 }
08836 break;
08837
08838 case 374:
08839
08840
08841 #line 3396 "parse.y"
08842 {
08843
08844 (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
08845
08846
08847
08848 }
08849 break;
08850
08851 case 376:
08852
08853
08854 #line 3407 "parse.y"
08855 {
08856 command_start = TRUE;
08857 }
08858 break;
08859
08860 case 377:
08861
08862
08863 #line 3413 "parse.y"
08864 {
08865
08866 (yyval.node) = 0;
08867
08868
08869
08870
08871 }
08872 break;
08873
08874 case 378:
08875
08876
08877 #line 3422 "parse.y"
08878 {
08879
08880 (yyval.node) = 0;
08881
08882
08883
08884
08885 }
08886 break;
08887
08888 case 379:
08889
08890
08891 #line 3431 "parse.y"
08892 {
08893
08894 (yyval.node) = (yyvsp[(2) - (4)].node);
08895
08896
08897
08898 }
08899 break;
08900
08901 case 381:
08902
08903
08904 #line 3443 "parse.y"
08905 {
08906
08907 (yyval.node) = 0;
08908
08909
08910
08911 }
08912 break;
08913
08914 case 384:
08915
08916
08917 #line 3469 "parse.y"
08918 {
08919 new_bv(get_id((yyvsp[(1) - (1)].id)));
08920
08921
08922
08923
08924 }
08925 break;
08926
08927 case 385:
08928
08929
08930 #line 3477 "parse.y"
08931 {
08932 (yyval.node) = 0;
08933 }
08934 break;
08935
08936 case 386:
08937
08938
08939 #line 3482 "parse.y"
08940 {
08941 (yyval.vars) = dyna_push();
08942 }
08943 break;
08944
08945 case 387:
08946
08947
08948 #line 3485 "parse.y"
08949 {
08950 (yyval.num) = lpar_beg;
08951 lpar_beg = ++paren_nest;
08952 }
08953 break;
08954
08955 case 388:
08956
08957
08958 #line 3491 "parse.y"
08959 {
08960 lpar_beg = (yyvsp[(2) - (4)].num);
08961
08962 (yyval.node) = (yyvsp[(3) - (4)].node);
08963 (yyval.node)->nd_body = NEW_SCOPE((yyvsp[(3) - (4)].node)->nd_head, (yyvsp[(4) - (4)].node));
08964
08965
08966
08967 dyna_pop((yyvsp[(1) - (4)].vars));
08968 }
08969 break;
08970
08971 case 389:
08972
08973
08974 #line 3504 "parse.y"
08975 {
08976
08977 (yyval.node) = NEW_LAMBDA((yyvsp[(2) - (4)].node));
08978
08979
08980
08981 }
08982 break;
08983
08984 case 390:
08985
08986
08987 #line 3512 "parse.y"
08988 {
08989
08990 (yyval.node) = NEW_LAMBDA((yyvsp[(1) - (1)].node));
08991
08992
08993
08994 }
08995 break;
08996
08997 case 391:
08998
08999
09000 #line 3522 "parse.y"
09001 {
09002 (yyval.node) = (yyvsp[(2) - (3)].node);
09003 }
09004 break;
09005
09006 case 392:
09007
09008
09009 #line 3526 "parse.y"
09010 {
09011 (yyval.node) = (yyvsp[(2) - (3)].node);
09012 }
09013 break;
09014
09015 case 393:
09016
09017
09018 #line 3532 "parse.y"
09019 {
09020 (yyvsp[(1) - (1)].vars) = dyna_push();
09021
09022 (yyval.num) = ruby_sourceline;
09023
09024 }
09025 break;
09026
09027 case 394:
09028
09029
09030 #line 3541 "parse.y"
09031 {
09032
09033 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09034 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09035
09036
09037
09038 dyna_pop((yyvsp[(1) - (5)].vars));
09039 }
09040 break;
09041
09042 case 395:
09043
09044
09045 #line 3553 "parse.y"
09046 {
09047
09048 if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
09049 compile_error(PARSER_ARG "block given to yield");
09050 }
09051 else {
09052 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
09053 }
09054 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
09055 (yyval.node) = (yyvsp[(2) - (2)].node);
09056 fixpos((yyval.node), (yyvsp[(1) - (2)].node));
09057
09058
09059
09060 }
09061 break;
09062
09063 case 396:
09064
09065
09066 #line 3569 "parse.y"
09067 {
09068
09069 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09070
09071
09072
09073
09074 }
09075 break;
09076
09077 case 397:
09078
09079
09080 #line 3578 "parse.y"
09081 {
09082
09083 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09084
09085
09086
09087
09088 }
09089 break;
09090
09091 case 398:
09092
09093
09094 #line 3589 "parse.y"
09095 {
09096
09097 (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
09098 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
09099
09100
09101
09102 }
09103 break;
09104
09105 case 399:
09106
09107
09108 #line 3598 "parse.y"
09109 {
09110
09111 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09112 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09113
09114
09115
09116
09117 }
09118 break;
09119
09120 case 400:
09121
09122
09123 #line 3608 "parse.y"
09124 {
09125
09126 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09127 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09128
09129
09130
09131
09132 }
09133 break;
09134
09135 case 401:
09136
09137
09138 #line 3618 "parse.y"
09139 {
09140
09141 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
09142
09143
09144
09145 }
09146 break;
09147
09148 case 402:
09149
09150
09151 #line 3626 "parse.y"
09152 {
09153
09154 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09155 fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09156
09157
09158
09159
09160
09161 }
09162 break;
09163
09164 case 403:
09165
09166
09167 #line 3637 "parse.y"
09168 {
09169
09170 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09171 fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09172
09173
09174
09175
09176
09177 }
09178 break;
09179
09180 case 404:
09181
09182
09183 #line 3648 "parse.y"
09184 {
09185
09186 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
09187
09188
09189
09190 }
09191 break;
09192
09193 case 405:
09194
09195
09196 #line 3656 "parse.y"
09197 {
09198
09199 (yyval.node) = NEW_ZSUPER();
09200
09201
09202
09203 }
09204 break;
09205
09206 case 406:
09207
09208
09209 #line 3664 "parse.y"
09210 {
09211
09212 if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
09213 (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
09214 else
09215 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
09216 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09217
09218
09219
09220 }
09221 break;
09222
09223 case 407:
09224
09225
09226 #line 3678 "parse.y"
09227 {
09228 (yyvsp[(1) - (1)].vars) = dyna_push();
09229
09230 (yyval.num) = ruby_sourceline;
09231
09232
09233 }
09234 break;
09235
09236 case 408:
09237
09238
09239 #line 3687 "parse.y"
09240 {
09241
09242 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09243 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09244
09245
09246
09247 dyna_pop((yyvsp[(1) - (5)].vars));
09248 }
09249 break;
09250
09251 case 409:
09252
09253
09254 #line 3697 "parse.y"
09255 {
09256 (yyvsp[(1) - (1)].vars) = dyna_push();
09257
09258 (yyval.num) = ruby_sourceline;
09259
09260
09261 }
09262 break;
09263
09264 case 410:
09265
09266
09267 #line 3706 "parse.y"
09268 {
09269
09270 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09271 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09272
09273
09274
09275 dyna_pop((yyvsp[(1) - (5)].vars));
09276 }
09277 break;
09278
09279 case 411:
09280
09281
09282 #line 3720 "parse.y"
09283 {
09284
09285 (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09286
09287
09288
09289 }
09290 break;
09291
09292 case 414:
09293
09294
09295 #line 3736 "parse.y"
09296 {
09297
09298 if ((yyvsp[(3) - (6)].node)) {
09299 (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
09300 (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
09301 }
09302 (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
09303 fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
09304
09305
09306
09307
09308
09309
09310
09311 }
09312 break;
09313
09314 case 416:
09315
09316
09317 #line 3756 "parse.y"
09318 {
09319
09320 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
09321
09322
09323
09324 }
09325 break;
09326
09327 case 417:
09328
09329
09330 #line 3764 "parse.y"
09331 {
09332
09333 if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
09334
09335
09336
09337 }
09338 break;
09339
09340 case 419:
09341
09342
09343 #line 3775 "parse.y"
09344 {
09345 (yyval.node) = (yyvsp[(2) - (2)].node);
09346 }
09347 break;
09348
09349 case 421:
09350
09351
09352 #line 3782 "parse.y"
09353 {
09354
09355 (yyval.node) = (yyvsp[(2) - (2)].node);
09356
09357
09358
09359 }
09360 break;
09361
09362 case 424:
09363
09364
09365 #line 3794 "parse.y"
09366 {
09367
09368 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
09369
09370
09371
09372 }
09373 break;
09374
09375 case 426:
09376
09377
09378 #line 3805 "parse.y"
09379 {
09380
09381 NODE *node = (yyvsp[(1) - (1)].node);
09382 if (!node) {
09383 node = NEW_STR(STR_NEW0());
09384 }
09385 else {
09386 node = evstr2dstr(node);
09387 }
09388 (yyval.node) = node;
09389
09390
09391
09392 }
09393 break;
09394
09395 case 429:
09396
09397
09398 #line 3824 "parse.y"
09399 {
09400
09401 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09402
09403
09404
09405 }
09406 break;
09407
09408 case 430:
09409
09410
09411 #line 3834 "parse.y"
09412 {
09413
09414 (yyval.node) = (yyvsp[(2) - (3)].node);
09415
09416
09417
09418 }
09419 break;
09420
09421 case 431:
09422
09423
09424 #line 3844 "parse.y"
09425 {
09426
09427 NODE *node = (yyvsp[(2) - (3)].node);
09428 if (!node) {
09429 node = NEW_XSTR(STR_NEW0());
09430 }
09431 else {
09432 switch (nd_type(node)) {
09433 case NODE_STR:
09434 nd_set_type(node, NODE_XSTR);
09435 break;
09436 case NODE_DSTR:
09437 nd_set_type(node, NODE_DXSTR);
09438 break;
09439 default:
09440 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
09441 break;
09442 }
09443 }
09444 (yyval.node) = node;
09445
09446
09447
09448 }
09449 break;
09450
09451 case 432:
09452
09453
09454 #line 3871 "parse.y"
09455 {
09456
09457 int options = (yyvsp[(3) - (3)].num);
09458 NODE *node = (yyvsp[(2) - (3)].node);
09459 NODE *list, *prev;
09460 if (!node) {
09461 node = NEW_LIT(reg_compile(STR_NEW0(), options));
09462 }
09463 else switch (nd_type(node)) {
09464 case NODE_STR:
09465 {
09466 VALUE src = node->nd_lit;
09467 nd_set_type(node, NODE_LIT);
09468 node->nd_lit = reg_compile(src, options);
09469 }
09470 break;
09471 default:
09472 node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
09473 case NODE_DSTR:
09474 if (options & RE_OPTION_ONCE) {
09475 nd_set_type(node, NODE_DREGX_ONCE);
09476 }
09477 else {
09478 nd_set_type(node, NODE_DREGX);
09479 }
09480 node->nd_cflag = options & RE_OPTION_MASK;
09481 if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
09482 for (list = (prev = node)->nd_next; list; list = list->nd_next) {
09483 if (nd_type(list->nd_head) == NODE_STR) {
09484 VALUE tail = list->nd_head->nd_lit;
09485 if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
09486 VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
09487 if (!literal_concat0(parser, lit, tail)) {
09488 node = 0;
09489 break;
09490 }
09491 rb_str_resize(tail, 0);
09492 prev->nd_next = list->nd_next;
09493 rb_gc_force_recycle((VALUE)list->nd_head);
09494 rb_gc_force_recycle((VALUE)list);
09495 list = prev;
09496 }
09497 else {
09498 prev = list;
09499 }
09500 }
09501 else {
09502 prev = 0;
09503 }
09504 }
09505 if (!node->nd_next) {
09506 VALUE src = node->nd_lit;
09507 nd_set_type(node, NODE_LIT);
09508 node->nd_lit = reg_compile(src, options);
09509 }
09510 break;
09511 }
09512 (yyval.node) = node;
09513
09514
09515
09516 }
09517 break;
09518
09519 case 433:
09520
09521
09522 #line 3936 "parse.y"
09523 {
09524
09525 (yyval.node) = NEW_ZARRAY();
09526
09527
09528
09529
09530 }
09531 break;
09532
09533 case 434:
09534
09535
09536 #line 3945 "parse.y"
09537 {
09538
09539 (yyval.node) = (yyvsp[(2) - (3)].node);
09540
09541
09542
09543 }
09544 break;
09545
09546 case 435:
09547
09548
09549 #line 3955 "parse.y"
09550 {
09551
09552 (yyval.node) = 0;
09553
09554
09555
09556 }
09557 break;
09558
09559 case 436:
09560
09561
09562 #line 3963 "parse.y"
09563 {
09564
09565 (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
09566
09567
09568
09569 }
09570 break;
09571
09572 case 438:
09573
09574
09575 #line 3981 "parse.y"
09576 {
09577
09578 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09579
09580
09581
09582 }
09583 break;
09584
09585 case 439:
09586
09587
09588 #line 3991 "parse.y"
09589 {
09590
09591 (yyval.node) = NEW_ZARRAY();
09592
09593
09594
09595
09596 }
09597 break;
09598
09599 case 440:
09600
09601
09602 #line 4000 "parse.y"
09603 {
09604
09605 (yyval.node) = (yyvsp[(2) - (3)].node);
09606
09607
09608
09609 }
09610 break;
09611
09612 case 441:
09613
09614
09615 #line 4010 "parse.y"
09616 {
09617
09618 (yyval.node) = 0;
09619
09620
09621
09622 }
09623 break;
09624
09625 case 442:
09626
09627
09628 #line 4018 "parse.y"
09629 {
09630
09631 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
09632
09633
09634
09635 }
09636 break;
09637
09638 case 443:
09639
09640
09641 #line 4028 "parse.y"
09642 {
09643
09644 (yyval.node) = 0;
09645
09646
09647
09648 }
09649 break;
09650
09651 case 444:
09652
09653
09654 #line 4036 "parse.y"
09655 {
09656
09657 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09658
09659
09660
09661 }
09662 break;
09663
09664 case 445:
09665
09666
09667 #line 4046 "parse.y"
09668 {
09669
09670 (yyval.node) = 0;
09671
09672
09673
09674 }
09675 break;
09676
09677 case 446:
09678
09679
09680 #line 4054 "parse.y"
09681 {
09682
09683 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09684
09685
09686
09687 }
09688 break;
09689
09690 case 447:
09691
09692
09693 #line 4064 "parse.y"
09694 {
09695
09696 (yyval.node) = 0;
09697
09698
09699
09700 }
09701 break;
09702
09703 case 448:
09704
09705
09706 #line 4072 "parse.y"
09707 {
09708
09709 NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
09710 if (!head) {
09711 (yyval.node) = tail;
09712 }
09713 else if (!tail) {
09714 (yyval.node) = head;
09715 }
09716 else {
09717 switch (nd_type(head)) {
09718 case NODE_STR:
09719 nd_set_type(head, NODE_DSTR);
09720 break;
09721 case NODE_DSTR:
09722 break;
09723 default:
09724 head = list_append(NEW_DSTR(Qnil), head);
09725 break;
09726 }
09727 (yyval.node) = list_append(head, tail);
09728 }
09729
09730
09731
09732 }
09733 break;
09734
09735 case 450:
09736
09737
09738 #line 4102 "parse.y"
09739 {
09740 (yyval.node) = lex_strterm;
09741 lex_strterm = 0;
09742 lex_state = EXPR_BEG;
09743 }
09744 break;
09745
09746 case 451:
09747
09748
09749 #line 4108 "parse.y"
09750 {
09751
09752 lex_strterm = (yyvsp[(2) - (3)].node);
09753 (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
09754
09755
09756
09757
09758 }
09759 break;
09760
09761 case 452:
09762
09763
09764 #line 4118 "parse.y"
09765 {
09766 (yyvsp[(1) - (1)].val) = cond_stack;
09767 (yyval.val) = cmdarg_stack;
09768 cond_stack = 0;
09769 cmdarg_stack = 0;
09770 }
09771 break;
09772
09773 case 453:
09774
09775
09776 #line 4124 "parse.y"
09777 {
09778 (yyval.node) = lex_strterm;
09779 lex_strterm = 0;
09780 lex_state = EXPR_BEG;
09781 }
09782 break;
09783
09784 case 454:
09785
09786
09787 #line 4130 "parse.y"
09788 {
09789 cond_stack = (yyvsp[(1) - (5)].val);
09790 cmdarg_stack = (yyvsp[(2) - (5)].val);
09791 lex_strterm = (yyvsp[(3) - (5)].node);
09792
09793 if ((yyvsp[(4) - (5)].node)) (yyvsp[(4) - (5)].node)->flags &= ~NODE_FL_NEWLINE;
09794 (yyval.node) = new_evstr((yyvsp[(4) - (5)].node));
09795
09796
09797
09798 }
09799 break;
09800
09801 case 455:
09802
09803
09804 #line 4144 "parse.y"
09805 {
09806
09807 (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
09808
09809
09810
09811 }
09812 break;
09813
09814 case 456:
09815
09816
09817 #line 4152 "parse.y"
09818 {
09819
09820 (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
09821
09822
09823
09824 }
09825 break;
09826
09827 case 457:
09828
09829
09830 #line 4160 "parse.y"
09831 {
09832
09833 (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
09834
09835
09836
09837 }
09838 break;
09839
09840 case 459:
09841
09842
09843 #line 4171 "parse.y"
09844 {
09845 lex_state = EXPR_END;
09846
09847 (yyval.id) = (yyvsp[(2) - (2)].id);
09848
09849
09850
09851 }
09852 break;
09853
09854 case 464:
09855
09856
09857 #line 4188 "parse.y"
09858 {
09859 lex_state = EXPR_END;
09860
09861 if (!((yyval.node) = (yyvsp[(2) - (3)].node))) {
09862 (yyval.node) = NEW_LIT(ID2SYM(rb_intern("")));
09863 }
09864 else {
09865 VALUE lit;
09866
09867 switch (nd_type((yyval.node))) {
09868 case NODE_DSTR:
09869 nd_set_type((yyval.node), NODE_DSYM);
09870 break;
09871 case NODE_STR:
09872 lit = (yyval.node)->nd_lit;
09873 (yyval.node)->nd_lit = ID2SYM(rb_intern_str(lit));
09874 nd_set_type((yyval.node), NODE_LIT);
09875 break;
09876 default:
09877 (yyval.node) = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST((yyval.node)));
09878 break;
09879 }
09880 }
09881
09882
09883
09884 }
09885 break;
09886
09887 case 467:
09888
09889
09890 #line 4220 "parse.y"
09891 {
09892
09893 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
09894
09895
09896
09897 }
09898 break;
09899
09900 case 468:
09901
09902
09903 #line 4228 "parse.y"
09904 {
09905
09906 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
09907
09908
09909
09910 }
09911 break;
09912
09913 case 474:
09914
09915
09916 #line 4242 "parse.y"
09917 {ifndef_ripper((yyval.id) = keyword_nil);}
09918 break;
09919
09920 case 475:
09921
09922
09923 #line 4243 "parse.y"
09924 {ifndef_ripper((yyval.id) = keyword_self);}
09925 break;
09926
09927 case 476:
09928
09929
09930 #line 4244 "parse.y"
09931 {ifndef_ripper((yyval.id) = keyword_true);}
09932 break;
09933
09934 case 477:
09935
09936
09937 #line 4245 "parse.y"
09938 {ifndef_ripper((yyval.id) = keyword_false);}
09939 break;
09940
09941 case 478:
09942
09943
09944 #line 4246 "parse.y"
09945 {ifndef_ripper((yyval.id) = keyword__FILE__);}
09946 break;
09947
09948 case 479:
09949
09950
09951 #line 4247 "parse.y"
09952 {ifndef_ripper((yyval.id) = keyword__LINE__);}
09953 break;
09954
09955 case 480:
09956
09957
09958 #line 4248 "parse.y"
09959 {ifndef_ripper((yyval.id) = keyword__ENCODING__);}
09960 break;
09961
09962 case 481:
09963
09964
09965 #line 4252 "parse.y"
09966 {
09967
09968 if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
09969
09970
09971
09972 }
09973 break;
09974
09975 case 482:
09976
09977
09978 #line 4262 "parse.y"
09979 {
09980 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
09981
09982
09983
09984
09985 }
09986 break;
09987
09988 case 485:
09989
09990
09991 #line 4276 "parse.y"
09992 {
09993
09994 (yyval.node) = 0;
09995
09996
09997
09998 }
09999 break;
10000
10001 case 486:
10002
10003
10004 #line 4284 "parse.y"
10005 {
10006 lex_state = EXPR_BEG;
10007 }
10008 break;
10009
10010 case 487:
10011
10012
10013 #line 4288 "parse.y"
10014 {
10015 (yyval.node) = (yyvsp[(3) - (4)].node);
10016 }
10017 break;
10018
10019 case 488:
10020
10021
10022 #line 4292 "parse.y"
10023 {
10024
10025 yyerrok;
10026 (yyval.node) = 0;
10027
10028
10029
10030
10031 }
10032 break;
10033
10034 case 489:
10035
10036
10037 #line 4304 "parse.y"
10038 {
10039
10040 (yyval.node) = (yyvsp[(2) - (3)].node);
10041
10042
10043
10044 lex_state = EXPR_BEG;
10045 command_start = TRUE;
10046 }
10047 break;
10048
10049 case 490:
10050
10051
10052 #line 4314 "parse.y"
10053 {
10054 (yyval.node) = (yyvsp[(1) - (2)].node);
10055 }
10056 break;
10057
10058 case 491:
10059
10060
10061 #line 4320 "parse.y"
10062 {
10063
10064 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
10065
10066
10067
10068 }
10069 break;
10070
10071 case 492:
10072
10073
10074 #line 4328 "parse.y"
10075 {
10076
10077 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
10078
10079
10080
10081 }
10082 break;
10083
10084 case 493:
10085
10086
10087 #line 4336 "parse.y"
10088 {
10089
10090 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
10091
10092
10093
10094 }
10095 break;
10096
10097 case 494:
10098
10099
10100 #line 4344 "parse.y"
10101 {
10102
10103 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10104
10105
10106
10107 }
10108 break;
10109
10110 case 495:
10111
10112
10113 #line 4352 "parse.y"
10114 {
10115
10116 (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10117
10118
10119
10120 }
10121 break;
10122
10123 case 496:
10124
10125
10126 #line 4360 "parse.y"
10127 {
10128
10129 (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10130
10131
10132
10133 }
10134 break;
10135
10136 case 497:
10137
10138
10139 #line 4368 "parse.y"
10140 {
10141
10142 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
10143
10144
10145
10146 }
10147 break;
10148
10149 case 498:
10150
10151
10152 #line 4376 "parse.y"
10153 {
10154
10155 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10156
10157
10158
10159 }
10160 break;
10161
10162 case 499:
10163
10164
10165 #line 4384 "parse.y"
10166 {
10167
10168 (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10169
10170
10171
10172 }
10173 break;
10174
10175 case 500:
10176
10177
10178 #line 4392 "parse.y"
10179 {
10180
10181 (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
10182
10183
10184
10185 }
10186 break;
10187
10188 case 501:
10189
10190
10191 #line 4400 "parse.y"
10192 {
10193
10194 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10195
10196
10197
10198 }
10199 break;
10200
10201 case 502:
10202
10203
10204 #line 4408 "parse.y"
10205 {
10206
10207 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
10208
10209
10210
10211 }
10212 break;
10213
10214 case 503:
10215
10216
10217 #line 4416 "parse.y"
10218 {
10219
10220 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10221
10222
10223
10224 }
10225 break;
10226
10227 case 504:
10228
10229
10230 #line 4424 "parse.y"
10231 {
10232
10233 (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
10234
10235
10236
10237 }
10238 break;
10239
10240 case 505:
10241
10242
10243 #line 4432 "parse.y"
10244 {
10245
10246 (yyval.node) = new_args(0, 0, 0, 0, 0);
10247
10248
10249
10250 }
10251 break;
10252
10253 case 506:
10254
10255
10256 #line 4442 "parse.y"
10257 {
10258
10259 yyerror("formal argument cannot be a constant");
10260 (yyval.id) = 0;
10261
10262
10263
10264 }
10265 break;
10266
10267 case 507:
10268
10269
10270 #line 4451 "parse.y"
10271 {
10272
10273 yyerror("formal argument cannot be an instance variable");
10274 (yyval.id) = 0;
10275
10276
10277
10278 }
10279 break;
10280
10281 case 508:
10282
10283
10284 #line 4460 "parse.y"
10285 {
10286
10287 yyerror("formal argument cannot be a global variable");
10288 (yyval.id) = 0;
10289
10290
10291
10292 }
10293 break;
10294
10295 case 509:
10296
10297
10298 #line 4469 "parse.y"
10299 {
10300
10301 yyerror("formal argument cannot be a class variable");
10302 (yyval.id) = 0;
10303
10304
10305
10306 }
10307 break;
10308
10309 case 511:
10310
10311
10312 #line 4481 "parse.y"
10313 {
10314 formal_argument(get_id((yyvsp[(1) - (1)].id)));
10315 (yyval.id) = (yyvsp[(1) - (1)].id);
10316 }
10317 break;
10318
10319 case 512:
10320
10321
10322 #line 4488 "parse.y"
10323 {
10324 arg_var(get_id((yyvsp[(1) - (1)].id)));
10325
10326 (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
10327
10328
10329
10330 }
10331 break;
10332
10333 case 513:
10334
10335
10336 #line 4497 "parse.y"
10337 {
10338 ID tid = internal_id();
10339 arg_var(tid);
10340
10341 if (dyna_in_block()) {
10342 (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
10343 }
10344 else {
10345 (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
10346 }
10347 (yyval.node) = NEW_ARGS_AUX(tid, 1);
10348 (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
10349
10350
10351
10352 }
10353 break;
10354
10355 case 515:
10356
10357
10358 #line 4523 "parse.y"
10359 {
10360
10361 (yyval.node) = (yyvsp[(1) - (3)].node);
10362 (yyval.node)->nd_plen++;
10363 (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
10364 rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
10365
10366
10367
10368 }
10369 break;
10370
10371 case 516:
10372
10373
10374 #line 4536 "parse.y"
10375 {
10376 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10377 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10378
10379 (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10380
10381
10382
10383 }
10384 break;
10385
10386 case 517:
10387
10388
10389 #line 4548 "parse.y"
10390 {
10391 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10392 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10393
10394 (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10395
10396
10397
10398 }
10399 break;
10400
10401 case 518:
10402
10403
10404 #line 4560 "parse.y"
10405 {
10406
10407 (yyval.node) = (yyvsp[(1) - (1)].node);
10408
10409
10410
10411 }
10412 break;
10413
10414 case 519:
10415
10416
10417 #line 4568 "parse.y"
10418 {
10419
10420 NODE *opts = (yyvsp[(1) - (3)].node);
10421
10422 while (opts->nd_next) {
10423 opts = opts->nd_next;
10424 }
10425 opts->nd_next = (yyvsp[(3) - (3)].node);
10426 (yyval.node) = (yyvsp[(1) - (3)].node);
10427
10428
10429
10430 }
10431 break;
10432
10433 case 520:
10434
10435
10436 #line 4584 "parse.y"
10437 {
10438
10439 (yyval.node) = (yyvsp[(1) - (1)].node);
10440
10441
10442
10443 }
10444 break;
10445
10446 case 521:
10447
10448
10449 #line 4592 "parse.y"
10450 {
10451
10452 NODE *opts = (yyvsp[(1) - (3)].node);
10453
10454 while (opts->nd_next) {
10455 opts = opts->nd_next;
10456 }
10457 opts->nd_next = (yyvsp[(3) - (3)].node);
10458 (yyval.node) = (yyvsp[(1) - (3)].node);
10459
10460
10461
10462 }
10463 break;
10464
10465 case 524:
10466
10467
10468 #line 4612 "parse.y"
10469 {
10470
10471 if (!is_local_id((yyvsp[(2) - (2)].id)))
10472 yyerror("rest argument must be local variable");
10473
10474 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10475
10476 (yyval.id) = (yyvsp[(2) - (2)].id);
10477
10478
10479
10480 }
10481 break;
10482
10483 case 525:
10484
10485
10486 #line 4625 "parse.y"
10487 {
10488
10489 (yyval.id) = internal_id();
10490 arg_var((yyval.id));
10491
10492
10493
10494 }
10495 break;
10496
10497 case 528:
10498
10499
10500 #line 4640 "parse.y"
10501 {
10502
10503 if (!is_local_id((yyvsp[(2) - (2)].id)))
10504 yyerror("block argument must be local variable");
10505 else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
10506 yyerror("duplicated block argument name");
10507
10508 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10509
10510 (yyval.id) = (yyvsp[(2) - (2)].id);
10511
10512
10513
10514 }
10515 break;
10516
10517 case 529:
10518
10519
10520 #line 4657 "parse.y"
10521 {
10522 (yyval.id) = (yyvsp[(2) - (2)].id);
10523 }
10524 break;
10525
10526 case 530:
10527
10528
10529 #line 4661 "parse.y"
10530 {
10531
10532 (yyval.id) = 0;
10533
10534
10535
10536 }
10537 break;
10538
10539 case 531:
10540
10541
10542 #line 4671 "parse.y"
10543 {
10544
10545 value_expr((yyvsp[(1) - (1)].node));
10546 (yyval.node) = (yyvsp[(1) - (1)].node);
10547 if (!(yyval.node)) (yyval.node) = NEW_NIL();
10548
10549
10550
10551 }
10552 break;
10553
10554 case 532:
10555
10556
10557 #line 4680 "parse.y"
10558 {lex_state = EXPR_BEG;}
10559 break;
10560
10561 case 533:
10562
10563
10564 #line 4681 "parse.y"
10565 {
10566
10567 if ((yyvsp[(3) - (4)].node) == 0) {
10568 yyerror("can't define singleton method for ().");
10569 }
10570 else {
10571 switch (nd_type((yyvsp[(3) - (4)].node))) {
10572 case NODE_STR:
10573 case NODE_DSTR:
10574 case NODE_XSTR:
10575 case NODE_DXSTR:
10576 case NODE_DREGX:
10577 case NODE_LIT:
10578 case NODE_ARRAY:
10579 case NODE_ZARRAY:
10580 yyerror("can't define singleton method for literals");
10581 default:
10582 value_expr((yyvsp[(3) - (4)].node));
10583 break;
10584 }
10585 }
10586 (yyval.node) = (yyvsp[(3) - (4)].node);
10587
10588
10589
10590 }
10591 break;
10592
10593 case 535:
10594
10595
10596 #line 4711 "parse.y"
10597 {
10598
10599 (yyval.node) = (yyvsp[(1) - (2)].node);
10600
10601
10602
10603 }
10604 break;
10605
10606 case 537:
10607
10608
10609 #line 4728 "parse.y"
10610 {
10611
10612 (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
10613
10614
10615
10616 }
10617 break;
10618
10619 case 538:
10620
10621
10622 #line 4738 "parse.y"
10623 {
10624
10625 (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
10626
10627
10628
10629 }
10630 break;
10631
10632 case 539:
10633
10634
10635 #line 4746 "parse.y"
10636 {
10637
10638 (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
10639
10640
10641
10642 }
10643 break;
10644
10645 case 561:
10646
10647
10648 #line 4802 "parse.y"
10649 {yyerrok;}
10650 break;
10651
10652 case 564:
10653
10654
10655 #line 4807 "parse.y"
10656 {yyerrok;}
10657 break;
10658
10659 case 565:
10660
10661
10662 #line 4811 "parse.y"
10663 {
10664
10665 (yyval.node) = 0;
10666
10667
10668
10669 }
10670 break;
10671
10672
10673
10674
10675 #line 10674 "parse.c"
10676 default: break;
10677 }
10678
10679
10680
10681
10682
10683
10684
10685
10686
10687
10688
10689 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
10690
10691 YYPOPSTACK (yylen);
10692 yylen = 0;
10693 YY_STACK_PRINT (yyss, yyssp);
10694
10695 *++yyvsp = yyval;
10696
10697
10698
10699
10700
10701 yyn = yyr1[yyn];
10702
10703 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
10704 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
10705 yystate = yytable[yystate];
10706 else
10707 yystate = yydefgoto[yyn - YYNTOKENS];
10708
10709 goto yynewstate;
10710
10711
10712
10713
10714
10715 yyerrlab:
10716
10717
10718 yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
10719
10720
10721 if (!yyerrstatus)
10722 {
10723 ++yynerrs;
10724 #if ! YYERROR_VERBOSE
10725 parser_yyerror (parser, YY_("syntax error"));
10726 #else
10727 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
10728 yyssp, yytoken)
10729 {
10730 char const *yymsgp = YY_("syntax error");
10731 int yysyntax_error_status;
10732 yysyntax_error_status = YYSYNTAX_ERROR;
10733 if (yysyntax_error_status == 0)
10734 yymsgp = yymsg;
10735 else if (yysyntax_error_status == 1)
10736 {
10737 if (yymsg != yymsgbuf)
10738 YYSTACK_FREE (yymsg);
10739 yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
10740 if (!yymsg)
10741 {
10742 yymsg = yymsgbuf;
10743 yymsg_alloc = sizeof yymsgbuf;
10744 yysyntax_error_status = 2;
10745 }
10746 else
10747 {
10748 yysyntax_error_status = YYSYNTAX_ERROR;
10749 yymsgp = yymsg;
10750 }
10751 }
10752 parser_yyerror (parser, yymsgp);
10753 if (yysyntax_error_status == 2)
10754 goto yyexhaustedlab;
10755 }
10756 # undef YYSYNTAX_ERROR
10757 #endif
10758 }
10759
10760
10761
10762 if (yyerrstatus == 3)
10763 {
10764
10765
10766
10767 if (yychar <= YYEOF)
10768 {
10769
10770 if (yychar == YYEOF)
10771 YYABORT;
10772 }
10773 else
10774 {
10775 yydestruct ("Error: discarding",
10776 yytoken, &yylval, parser);
10777 yychar = YYEMPTY;
10778 }
10779 }
10780
10781
10782
10783 goto yyerrlab1;
10784
10785
10786
10787
10788
10789 yyerrorlab:
10790
10791
10792
10793
10794 if ( 0)
10795 goto yyerrorlab;
10796
10797
10798
10799 YYPOPSTACK (yylen);
10800 yylen = 0;
10801 YY_STACK_PRINT (yyss, yyssp);
10802 yystate = *yyssp;
10803 goto yyerrlab1;
10804
10805
10806
10807
10808
10809 yyerrlab1:
10810 yyerrstatus = 3;
10811
10812 for (;;)
10813 {
10814 yyn = yypact[yystate];
10815 if (!yypact_value_is_default (yyn))
10816 {
10817 yyn += YYTERROR;
10818 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
10819 {
10820 yyn = yytable[yyn];
10821 if (0 < yyn)
10822 break;
10823 }
10824 }
10825
10826
10827 if (yyssp == yyss)
10828 YYABORT;
10829
10830
10831 yydestruct ("Error: popping",
10832 yystos[yystate], yyvsp, parser);
10833 YYPOPSTACK (1);
10834 yystate = *yyssp;
10835 YY_STACK_PRINT (yyss, yyssp);
10836 }
10837
10838 *++yyvsp = yylval;
10839
10840
10841
10842 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
10843
10844 yystate = yyn;
10845 goto yynewstate;
10846
10847
10848
10849
10850
10851 yyacceptlab:
10852 yyresult = 0;
10853 goto yyreturn;
10854
10855
10856
10857
10858 yyabortlab:
10859 yyresult = 1;
10860 goto yyreturn;
10861
10862 #if !defined(yyoverflow) || YYERROR_VERBOSE
10863
10864
10865
10866 yyexhaustedlab:
10867 parser_yyerror (parser, YY_("memory exhausted"));
10868 yyresult = 2;
10869
10870 #endif
10871
10872 yyreturn:
10873 if (yychar != YYEMPTY)
10874 {
10875
10876
10877 yytoken = YYTRANSLATE (yychar);
10878 yydestruct ("Cleanup: discarding lookahead",
10879 yytoken, &yylval, parser);
10880 }
10881
10882
10883 YYPOPSTACK (yylen);
10884 YY_STACK_PRINT (yyss, yyssp);
10885 while (yyssp != yyss)
10886 {
10887 yydestruct ("Cleanup: popping",
10888 yystos[*yyssp], yyvsp, parser);
10889 YYPOPSTACK (1);
10890 }
10891 #ifndef yyoverflow
10892 if (yyss != yyssa)
10893 YYSTACK_FREE (yyss);
10894 #endif
10895 #if YYERROR_VERBOSE
10896 if (yymsg != yymsgbuf)
10897 YYSTACK_FREE (yymsg);
10898 #endif
10899
10900 return YYID (yyresult);
10901 }
10902
10903
10904
10905
10906 #line 4819 "parse.y"
10907
10908 # undef parser
10909 # undef yylex
10910 # undef yylval
10911 # define yylval (*((YYSTYPE*)(parser->parser_yylval)))
10912
10913 static int parser_regx_options(struct parser_params*);
10914 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
10915 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
10916 static int parser_parse_string(struct parser_params*,NODE*);
10917 static int parser_here_document(struct parser_params*,NODE*);
10918
10919
10920 # define nextc() parser_nextc(parser)
10921 # define pushback(c) parser_pushback(parser, c)
10922 # define newtok() parser_newtok(parser)
10923 # define tokspace(n) parser_tokspace(parser, n)
10924 # define tokadd(c) parser_tokadd(parser, c)
10925 # define tok_hex(numlen) parser_tok_hex(parser, numlen)
10926 # define read_escape(flags,e) parser_read_escape(parser, flags, e)
10927 # define tokadd_escape(e) parser_tokadd_escape(parser, e)
10928 # define regx_options() parser_regx_options(parser)
10929 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,f,t,p,n,e)
10930 # define parse_string(n) parser_parse_string(parser,n)
10931 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, c, enc)
10932 # define here_document(n) parser_here_document(parser,n)
10933 # define heredoc_identifier() parser_heredoc_identifier(parser)
10934 # define heredoc_restore(n) parser_heredoc_restore(parser,n)
10935 # define whole_match_p(e,l,i) parser_whole_match_p(parser,e,l,i)
10936
10937 #ifndef RIPPER
10938 # define set_yylval_str(x) yylval.node = NEW_STR(x)
10939 # define set_yylval_num(x) yylval.num = x
10940 # define set_yylval_id(x) yylval.id = x
10941 # define set_yylval_name(x) yylval.id = x
10942 # define set_yylval_literal(x) yylval.node = NEW_LIT(x)
10943 # define set_yylval_node(x) yylval.node = x
10944 # define yylval_id() yylval.id
10945 #else
10946 static inline VALUE
10947 ripper_yylval_id(ID x)
10948 {
10949 return (VALUE)NEW_LASGN(x, ID2SYM(x));
10950 }
10951 # define set_yylval_str(x) (void)(x)
10952 # define set_yylval_num(x) (void)(x)
10953 # define set_yylval_id(x) (void)(x)
10954 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
10955 # define set_yylval_literal(x) (void)(x)
10956 # define set_yylval_node(x) (void)(x)
10957 # define yylval_id() yylval.id
10958 #endif
10959
10960 #ifndef RIPPER
10961 #define ripper_flush(p) (void)(p)
10962 #else
10963 #define ripper_flush(p) (p->tokp = p->parser_lex_p)
10964
10965 #define yylval_rval *(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val)
10966
10967 static int
10968 ripper_has_scan_event(struct parser_params *parser)
10969 {
10970
10971 if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
10972 return lex_p > parser->tokp;
10973 }
10974
10975 static VALUE
10976 ripper_scan_event_val(struct parser_params *parser, int t)
10977 {
10978 VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
10979 VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
10980 ripper_flush(parser);
10981 return rval;
10982 }
10983
10984 static void
10985 ripper_dispatch_scan_event(struct parser_params *parser, int t)
10986 {
10987 if (!ripper_has_scan_event(parser)) return;
10988 yylval_rval = ripper_scan_event_val(parser, t);
10989 }
10990
10991 static void
10992 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
10993 {
10994 if (!ripper_has_scan_event(parser)) return;
10995 (void)ripper_scan_event_val(parser, t);
10996 }
10997
10998 static void
10999 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
11000 {
11001 int saved_line = ruby_sourceline;
11002 const char *saved_tokp = parser->tokp;
11003
11004 ruby_sourceline = parser->delayed_line;
11005 parser->tokp = lex_pbeg + parser->delayed_col;
11006 yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
11007 parser->delayed = Qnil;
11008 ruby_sourceline = saved_line;
11009 parser->tokp = saved_tokp;
11010 }
11011 #endif
11012
11013 #include "ruby/regex.h"
11014 #include "ruby/util.h"
11015
11016
11017
11018
11019
11020 #undef SIGN_EXTEND_CHAR
11021 #if __STDC__
11022 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
11023 #else
11024
11025 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
11026 #endif
11027
11028 #define parser_encoding_name() (parser->enc->name)
11029 #define parser_mbclen() mbclen((lex_p-1),lex_pend,parser->enc)
11030 #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,parser->enc)
11031 #define is_identchar(p,e,enc) (rb_enc_isalnum(*p,enc) || (*p) == '_' || !ISASCII(*p))
11032 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,parser->enc))
11033
11034 #define parser_isascii() ISASCII(*(lex_p-1))
11035
11036 #ifndef RIPPER
11037 static int
11038 token_info_get_column(struct parser_params *parser, const char *token)
11039 {
11040 int column = 1;
11041 const char *p, *pend = lex_p - strlen(token);
11042 for (p = lex_pbeg; p < pend; p++) {
11043 if (*p == '\t') {
11044 column = (((column - 1) / 8) + 1) * 8;
11045 }
11046 column++;
11047 }
11048 return column;
11049 }
11050
11051 static int
11052 token_info_has_nonspaces(struct parser_params *parser, const char *token)
11053 {
11054 const char *p, *pend = lex_p - strlen(token);
11055 for (p = lex_pbeg; p < pend; p++) {
11056 if (*p != ' ' && *p != '\t') {
11057 return 1;
11058 }
11059 }
11060 return 0;
11061 }
11062
11063 #undef token_info_push
11064 static void
11065 token_info_push(struct parser_params *parser, const char *token)
11066 {
11067 token_info *ptinfo;
11068
11069 if (compile_for_eval) return;
11070 ptinfo = ALLOC(token_info);
11071 ptinfo->token = token;
11072 ptinfo->linenum = ruby_sourceline;
11073 ptinfo->column = token_info_get_column(parser, token);
11074 ptinfo->nonspc = token_info_has_nonspaces(parser, token);
11075 ptinfo->next = parser->parser_token_info;
11076
11077 parser->parser_token_info = ptinfo;
11078 }
11079
11080 #undef token_info_pop
11081 static void
11082 token_info_pop(struct parser_params *parser, const char *token)
11083 {
11084 int linenum;
11085 token_info *ptinfo = parser->parser_token_info;
11086
11087 if (!ptinfo) return;
11088 parser->parser_token_info = ptinfo->next;
11089 if (token_info_get_column(parser, token) == ptinfo->column) {
11090 goto finish;
11091 }
11092 linenum = ruby_sourceline;
11093 if (linenum == ptinfo->linenum) {
11094 goto finish;
11095 }
11096 if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) {
11097 goto finish;
11098 }
11099 rb_compile_warning(ruby_sourcefile, linenum,
11100 "mismatched indentations at '%s' with '%s' at %d",
11101 token, ptinfo->token, ptinfo->linenum);
11102
11103 finish:
11104 xfree(ptinfo);
11105 }
11106 #endif
11107
11108 static int
11109 parser_yyerror(struct parser_params *parser, const char *msg)
11110 {
11111 #ifndef RIPPER
11112 const int max_line_margin = 30;
11113 const char *p, *pe;
11114 char *buf;
11115 long len;
11116 int i;
11117
11118 compile_error(PARSER_ARG "%s", msg);
11119 p = lex_p;
11120 while (lex_pbeg <= p) {
11121 if (*p == '\n') break;
11122 p--;
11123 }
11124 p++;
11125
11126 pe = lex_p;
11127 while (pe < lex_pend) {
11128 if (*pe == '\n') break;
11129 pe++;
11130 }
11131
11132 len = pe - p;
11133 if (len > 4) {
11134 char *p2;
11135 const char *pre = "", *post = "";
11136
11137 if (len > max_line_margin * 2 + 10) {
11138 if (lex_p - p > max_line_margin) {
11139 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
11140 pre = "...";
11141 }
11142 if (pe - lex_p > max_line_margin) {
11143 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
11144 post = "...";
11145 }
11146 len = pe - p;
11147 }
11148 buf = ALLOCA_N(char, len+2);
11149 MEMCPY(buf, p, char, len);
11150 buf[len] = '\0';
11151 rb_compile_error_append("%s%s%s", pre, buf, post);
11152
11153 i = (int)(lex_p - p);
11154 p2 = buf; pe = buf + len;
11155
11156 while (p2 < pe) {
11157 if (*p2 != '\t') *p2 = ' ';
11158 p2++;
11159 }
11160 buf[i] = '^';
11161 buf[i+1] = '\0';
11162 rb_compile_error_append("%s%s", pre, buf);
11163 }
11164 #else
11165 dispatch1(parse_error, STR_NEW2(msg));
11166 #endif
11167 return 0;
11168 }
11169
11170 static void parser_prepare(struct parser_params *parser);
11171
11172 #ifndef RIPPER
11173 VALUE ruby_suppress_tracing(VALUE (*func)(VALUE, int), VALUE arg, int always);
11174
11175 static VALUE
11176 debug_lines(const char *f)
11177 {
11178 ID script_lines;
11179 CONST_ID(script_lines, "SCRIPT_LINES__");
11180 if (rb_const_defined_at(rb_cObject, script_lines)) {
11181 VALUE hash = rb_const_get_at(rb_cObject, script_lines);
11182 if (TYPE(hash) == T_HASH) {
11183 VALUE fname = rb_str_new2(f);
11184 VALUE lines = rb_ary_new();
11185 rb_hash_aset(hash, fname, lines);
11186 return lines;
11187 }
11188 }
11189 return 0;
11190 }
11191
11192 static VALUE
11193 coverage(const char *f, int n)
11194 {
11195 extern VALUE rb_get_coverages(void);
11196 VALUE coverages = rb_get_coverages();
11197 if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
11198 VALUE fname = rb_str_new2(f);
11199 VALUE lines = rb_ary_new2(n);
11200 int i;
11201 RBASIC(lines)->klass = 0;
11202 for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil;
11203 RARRAY(lines)->as.heap.len = n;
11204 rb_hash_aset(coverages, fname, lines);
11205 return lines;
11206 }
11207 return 0;
11208 }
11209
11210 static int
11211 e_option_supplied(struct parser_params *parser)
11212 {
11213 return strcmp(ruby_sourcefile, "-e") == 0;
11214 }
11215
11216 static VALUE
11217 yycompile0(VALUE arg, int tracing)
11218 {
11219 int n;
11220 NODE *tree;
11221 struct parser_params *parser = (struct parser_params *)arg;
11222
11223 if (!compile_for_eval && rb_safe_level() == 0) {
11224 ruby_debug_lines = debug_lines(ruby_sourcefile);
11225 if (ruby_debug_lines && ruby_sourceline > 0) {
11226 VALUE str = STR_NEW0();
11227 n = ruby_sourceline;
11228 do {
11229 rb_ary_push(ruby_debug_lines, str);
11230 } while (--n);
11231 }
11232
11233 if (!e_option_supplied(parser)) {
11234 ruby_coverage = coverage(ruby_sourcefile, ruby_sourceline);
11235 }
11236 }
11237
11238 parser_prepare(parser);
11239 deferred_nodes = 0;
11240 n = yyparse((void*)parser);
11241 ruby_debug_lines = 0;
11242 ruby_coverage = 0;
11243 compile_for_eval = 0;
11244
11245 lex_strterm = 0;
11246 lex_p = lex_pbeg = lex_pend = 0;
11247 lex_lastline = lex_nextline = 0;
11248 if (parser->nerr) {
11249 return 0;
11250 }
11251 tree = ruby_eval_tree;
11252 if (!tree) {
11253 tree = NEW_NIL();
11254 }
11255 else if (ruby_eval_tree_begin) {
11256 tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
11257 }
11258 return (VALUE)tree;
11259 }
11260
11261 static NODE*
11262 yycompile(struct parser_params *parser, const char *f, int line)
11263 {
11264 ruby_sourcefile = ruby_strdup(f);
11265 ruby_sourceline = line - 1;
11266 return (NODE *)ruby_suppress_tracing(yycompile0, (VALUE)parser, TRUE);
11267 }
11268 #endif
11269
11270 static rb_encoding *
11271 must_be_ascii_compatible(VALUE s)
11272 {
11273 rb_encoding *enc = rb_enc_get(s);
11274 if (!rb_enc_asciicompat(enc)) {
11275 rb_raise(rb_eArgError, "invalid source encoding");
11276 }
11277 return enc;
11278 }
11279
11280 static VALUE
11281 lex_get_str(struct parser_params *parser, VALUE s)
11282 {
11283 char *beg, *end, *pend;
11284 rb_encoding *enc = must_be_ascii_compatible(s);
11285
11286 beg = RSTRING_PTR(s);
11287 if (lex_gets_ptr) {
11288 if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
11289 beg += lex_gets_ptr;
11290 }
11291 pend = RSTRING_PTR(s) + RSTRING_LEN(s);
11292 end = beg;
11293 while (end < pend) {
11294 if (*end++ == '\n') break;
11295 }
11296 lex_gets_ptr = end - RSTRING_PTR(s);
11297 return rb_enc_str_new(beg, end - beg, enc);
11298 }
11299
11300 static VALUE
11301 lex_getline(struct parser_params *parser)
11302 {
11303 VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
11304 if (NIL_P(line)) return line;
11305 must_be_ascii_compatible(line);
11306 #ifndef RIPPER
11307 if (ruby_debug_lines) {
11308 rb_enc_associate(line, parser->enc);
11309 rb_ary_push(ruby_debug_lines, line);
11310 }
11311 if (ruby_coverage) {
11312 rb_ary_push(ruby_coverage, Qnil);
11313 }
11314 #endif
11315 return line;
11316 }
11317
11318 static const rb_data_type_t parser_data_type;
11319
11320 #ifndef RIPPER
11321 static NODE*
11322 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11323 {
11324 struct parser_params *parser;
11325 NODE *node;
11326 volatile VALUE tmp;
11327
11328 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11329 lex_gets = lex_get_str;
11330 lex_gets_ptr = 0;
11331 lex_input = s;
11332 lex_pbeg = lex_p = lex_pend = 0;
11333 compile_for_eval = rb_parse_in_eval();
11334
11335 node = yycompile(parser, f, line);
11336 tmp = vparser;
11337
11338 return node;
11339 }
11340
11341 NODE*
11342 rb_compile_string(const char *f, VALUE s, int line)
11343 {
11344 must_be_ascii_compatible(s);
11345 return parser_compile_string(rb_parser_new(), f, s, line);
11346 }
11347
11348 NODE*
11349 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11350 {
11351 must_be_ascii_compatible(s);
11352 return parser_compile_string(vparser, f, s, line);
11353 }
11354
11355 NODE*
11356 rb_compile_cstr(const char *f, const char *s, int len, int line)
11357 {
11358 VALUE str = rb_str_new(s, len);
11359 return parser_compile_string(rb_parser_new(), f, str, line);
11360 }
11361
11362 NODE*
11363 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
11364 {
11365 VALUE str = rb_str_new(s, len);
11366 return parser_compile_string(vparser, f, str, line);
11367 }
11368
11369 static VALUE
11370 lex_io_gets(struct parser_params *parser, VALUE io)
11371 {
11372 return rb_io_gets(io);
11373 }
11374
11375 NODE*
11376 rb_compile_file(const char *f, VALUE file, int start)
11377 {
11378 VALUE volatile vparser = rb_parser_new();
11379
11380 return rb_parser_compile_file(vparser, f, file, start);
11381 }
11382
11383 NODE*
11384 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
11385 {
11386 struct parser_params *parser;
11387 volatile VALUE tmp;
11388 NODE *node;
11389
11390 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11391 lex_gets = lex_io_gets;
11392 lex_input = file;
11393 lex_pbeg = lex_p = lex_pend = 0;
11394 compile_for_eval = rb_parse_in_eval();
11395
11396 node = yycompile(parser, f, start);
11397 tmp = vparser;
11398
11399 return node;
11400 }
11401 #endif
11402
11403 #define STR_FUNC_ESCAPE 0x01
11404 #define STR_FUNC_EXPAND 0x02
11405 #define STR_FUNC_REGEXP 0x04
11406 #define STR_FUNC_QWORDS 0x08
11407 #define STR_FUNC_SYMBOL 0x10
11408 #define STR_FUNC_INDENT 0x20
11409
11410 enum string_type {
11411 str_squote = (0),
11412 str_dquote = (STR_FUNC_EXPAND),
11413 str_xquote = (STR_FUNC_EXPAND),
11414 str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND),
11415 str_sword = (STR_FUNC_QWORDS),
11416 str_dword = (STR_FUNC_QWORDS|STR_FUNC_EXPAND),
11417 str_ssym = (STR_FUNC_SYMBOL),
11418 str_dsym = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND)
11419 };
11420
11421 static VALUE
11422 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
11423 {
11424 VALUE str;
11425
11426 str = rb_enc_str_new(p, n, enc);
11427 if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
11428 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
11429 }
11430 else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
11431 rb_enc_associate(str, rb_ascii8bit_encoding());
11432 }
11433 }
11434
11435 return str;
11436 }
11437
11438 #define lex_goto_eol(parser) (parser->parser_lex_p = parser->parser_lex_pend)
11439 #define peek(c) (lex_p < lex_pend && (c) == *lex_p)
11440
11441 static inline int
11442 parser_nextc(struct parser_params *parser)
11443 {
11444 int c;
11445
11446 if (lex_p == lex_pend) {
11447 VALUE v = lex_nextline;
11448 lex_nextline = 0;
11449 if (!v) {
11450 if (parser->eofp)
11451 return -1;
11452
11453 if (!lex_input || NIL_P(v = lex_getline(parser))) {
11454 parser->eofp = Qtrue;
11455 lex_goto_eol(parser);
11456 return -1;
11457 }
11458 }
11459 {
11460 #ifdef RIPPER
11461 if (parser->tokp < lex_pend) {
11462 if (NIL_P(parser->delayed)) {
11463 parser->delayed = rb_str_buf_new(1024);
11464 rb_str_buf_cat(parser->delayed,
11465 parser->tokp, lex_pend - parser->tokp);
11466 parser->delayed_line = ruby_sourceline;
11467 parser->delayed_col = (int)(parser->tokp - lex_pbeg);
11468 }
11469 else {
11470 rb_str_buf_cat(parser->delayed,
11471 parser->tokp, lex_pend - parser->tokp);
11472 }
11473 }
11474 #endif
11475 if (heredoc_end > 0) {
11476 ruby_sourceline = heredoc_end;
11477 heredoc_end = 0;
11478 }
11479 ruby_sourceline++;
11480 parser->line_count++;
11481 lex_pbeg = lex_p = RSTRING_PTR(v);
11482 lex_pend = lex_p + RSTRING_LEN(v);
11483 ripper_flush(parser);
11484 lex_lastline = v;
11485 }
11486 }
11487 c = (unsigned char)*lex_p++;
11488 if (c == '\r' && peek('\n')) {
11489 lex_p++;
11490 c = '\n';
11491 }
11492
11493 return c;
11494 }
11495
11496 static void
11497 parser_pushback(struct parser_params *parser, int c)
11498 {
11499 if (c == -1) return;
11500 lex_p--;
11501 if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
11502 lex_p--;
11503 }
11504 }
11505
11506 #define was_bol() (lex_p == lex_pbeg + 1)
11507
11508 #define tokfix() (tokenbuf[tokidx]='\0')
11509 #define tok() tokenbuf
11510 #define toklen() tokidx
11511 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
11512
11513 static char*
11514 parser_newtok(struct parser_params *parser)
11515 {
11516 tokidx = 0;
11517 if (!tokenbuf) {
11518 toksiz = 60;
11519 tokenbuf = ALLOC_N(char, 60);
11520 }
11521 if (toksiz > 4096) {
11522 toksiz = 60;
11523 REALLOC_N(tokenbuf, char, 60);
11524 }
11525 return tokenbuf;
11526 }
11527
11528 static char *
11529 parser_tokspace(struct parser_params *parser, int n)
11530 {
11531 tokidx += n;
11532
11533 if (tokidx >= toksiz) {
11534 do {toksiz *= 2;} while (toksiz < tokidx);
11535 REALLOC_N(tokenbuf, char, toksiz);
11536 }
11537 return &tokenbuf[tokidx-n];
11538 }
11539
11540 static void
11541 parser_tokadd(struct parser_params *parser, int c)
11542 {
11543 tokenbuf[tokidx++] = (char)c;
11544 if (tokidx >= toksiz) {
11545 toksiz *= 2;
11546 REALLOC_N(tokenbuf, char, toksiz);
11547 }
11548 }
11549
11550 static int
11551 parser_tok_hex(struct parser_params *parser, size_t *numlen)
11552 {
11553 int c;
11554
11555 c = scan_hex(lex_p, 2, numlen);
11556 if (!*numlen) {
11557 yyerror("invalid hex escape");
11558 return 0;
11559 }
11560 lex_p += *numlen;
11561 return c;
11562 }
11563
11564 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
11565
11566 static int
11567 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
11568 int string_literal, int symbol_literal, int regexp_literal)
11569 {
11570
11571
11572
11573
11574
11575
11576
11577 int codepoint;
11578 size_t numlen;
11579
11580 if (regexp_literal) { tokadd('\\'); tokadd('u'); }
11581
11582 if (peek('{')) {
11583 do {
11584 if (regexp_literal) { tokadd(*lex_p); }
11585 nextc();
11586 codepoint = scan_hex(lex_p, 6, &numlen);
11587 if (numlen == 0) {
11588 yyerror("invalid Unicode escape");
11589 return 0;
11590 }
11591 if (codepoint > 0x10ffff) {
11592 yyerror("invalid Unicode codepoint (too large)");
11593 return 0;
11594 }
11595 lex_p += numlen;
11596 if (regexp_literal) {
11597 tokcopy((int)numlen);
11598 }
11599 else if (codepoint >= 0x80) {
11600 *encp = UTF8_ENC();
11601 if (string_literal) tokaddmbc(codepoint, *encp);
11602 }
11603 else if (string_literal) {
11604 tokadd(codepoint);
11605 }
11606 } while (string_literal && (peek(' ') || peek('\t')));
11607
11608 if (!peek('}')) {
11609 yyerror("unterminated Unicode escape");
11610 return 0;
11611 }
11612
11613 if (regexp_literal) { tokadd('}'); }
11614 nextc();
11615 }
11616 else {
11617 codepoint = scan_hex(lex_p, 4, &numlen);
11618 if (numlen < 4) {
11619 yyerror("invalid Unicode escape");
11620 return 0;
11621 }
11622 lex_p += 4;
11623 if (regexp_literal) {
11624 tokcopy(4);
11625 }
11626 else if (codepoint >= 0x80) {
11627 *encp = UTF8_ENC();
11628 if (string_literal) tokaddmbc(codepoint, *encp);
11629 }
11630 else if (string_literal) {
11631 tokadd(codepoint);
11632 }
11633 }
11634
11635 return codepoint;
11636 }
11637
11638 #define ESCAPE_CONTROL 1
11639 #define ESCAPE_META 2
11640
11641 static int
11642 parser_read_escape(struct parser_params *parser, int flags,
11643 rb_encoding **encp)
11644 {
11645 int c;
11646 size_t numlen;
11647
11648 switch (c = nextc()) {
11649 case '\\':
11650 return c;
11651
11652 case 'n':
11653 return '\n';
11654
11655 case 't':
11656 return '\t';
11657
11658 case 'r':
11659 return '\r';
11660
11661 case 'f':
11662 return '\f';
11663
11664 case 'v':
11665 return '\13';
11666
11667 case 'a':
11668 return '\007';
11669
11670 case 'e':
11671 return 033;
11672
11673 case '0': case '1': case '2': case '3':
11674 case '4': case '5': case '6': case '7':
11675 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11676 pushback(c);
11677 c = scan_oct(lex_p, 3, &numlen);
11678 lex_p += numlen;
11679 return c;
11680
11681 case 'x':
11682 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11683 c = tok_hex(&numlen);
11684 if (numlen == 0) return 0;
11685 return c;
11686
11687 case 'b':
11688 return '\010';
11689
11690 case 's':
11691 return ' ';
11692
11693 case 'M':
11694 if (flags & ESCAPE_META) goto eof;
11695 if ((c = nextc()) != '-') {
11696 pushback(c);
11697 goto eof;
11698 }
11699 if ((c = nextc()) == '\\') {
11700 if (peek('u')) goto eof;
11701 return read_escape(flags|ESCAPE_META, encp) | 0x80;
11702 }
11703 else if (c == -1 || !ISASCII(c)) goto eof;
11704 else {
11705 return ((c & 0xff) | 0x80);
11706 }
11707
11708 case 'C':
11709 if ((c = nextc()) != '-') {
11710 pushback(c);
11711 goto eof;
11712 }
11713 case 'c':
11714 if (flags & ESCAPE_CONTROL) goto eof;
11715 if ((c = nextc())== '\\') {
11716 if (peek('u')) goto eof;
11717 c = read_escape(flags|ESCAPE_CONTROL, encp);
11718 }
11719 else if (c == '?')
11720 return 0177;
11721 else if (c == -1 || !ISASCII(c)) goto eof;
11722 return c & 0x9f;
11723
11724 eof:
11725 case -1:
11726 yyerror("Invalid escape character syntax");
11727 return '\0';
11728
11729 default:
11730 return c;
11731 }
11732 }
11733
11734 static void
11735 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
11736 {
11737 int len = rb_enc_codelen(c, enc);
11738 rb_enc_mbcput(c, tokspace(len), enc);
11739 }
11740
11741 static int
11742 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
11743 {
11744 int c;
11745 int flags = 0;
11746 size_t numlen;
11747
11748 first:
11749 switch (c = nextc()) {
11750 case '\n':
11751 return 0;
11752
11753 case '0': case '1': case '2': case '3':
11754 case '4': case '5': case '6': case '7':
11755 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11756 {
11757 ruby_scan_oct(--lex_p, 3, &numlen);
11758 if (numlen == 0) goto eof;
11759 lex_p += numlen;
11760 tokcopy((int)numlen + 1);
11761 }
11762 return 0;
11763
11764 case 'x':
11765 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11766 {
11767 tok_hex(&numlen);
11768 if (numlen == 0) goto eof;
11769 tokcopy((int)numlen + 2);
11770 }
11771 return 0;
11772
11773 case 'M':
11774 if (flags & ESCAPE_META) goto eof;
11775 if ((c = nextc()) != '-') {
11776 pushback(c);
11777 goto eof;
11778 }
11779 tokcopy(3);
11780 flags |= ESCAPE_META;
11781 goto escaped;
11782
11783 case 'C':
11784 if (flags & ESCAPE_CONTROL) goto eof;
11785 if ((c = nextc()) != '-') {
11786 pushback(c);
11787 goto eof;
11788 }
11789 tokcopy(3);
11790 goto escaped;
11791
11792 case 'c':
11793 if (flags & ESCAPE_CONTROL) goto eof;
11794 tokcopy(2);
11795 flags |= ESCAPE_CONTROL;
11796 escaped:
11797 if ((c = nextc()) == '\\') {
11798 goto first;
11799 }
11800 else if (c == -1) goto eof;
11801 tokadd(c);
11802 return 0;
11803
11804 eof:
11805 case -1:
11806 yyerror("Invalid escape character syntax");
11807 return -1;
11808
11809 default:
11810 tokadd('\\');
11811 tokadd(c);
11812 }
11813 return 0;
11814 }
11815
11816 extern int rb_char_to_option_kcode(int c, int *option, int *kcode);
11817
11818 static int
11819 parser_regx_options(struct parser_params *parser)
11820 {
11821 int kcode = 0;
11822 int kopt = 0;
11823 int options = 0;
11824 int c, opt, kc;
11825
11826 newtok();
11827 while (c = nextc(), ISALPHA(c)) {
11828 if (c == 'o') {
11829 options |= RE_OPTION_ONCE;
11830 }
11831 else if (rb_char_to_option_kcode(c, &opt, &kc)) {
11832 if (kc >= 0) {
11833 if (kc != rb_ascii8bit_encindex()) kcode = c;
11834 kopt = opt;
11835 }
11836 else {
11837 options |= opt;
11838 }
11839 }
11840 else {
11841 tokadd(c);
11842 }
11843 }
11844 options |= kopt;
11845 pushback(c);
11846 if (toklen()) {
11847 tokfix();
11848 compile_error(PARSER_ARG "unknown regexp option%s - %s",
11849 toklen() > 1 ? "s" : "", tok());
11850 }
11851 return options | RE_OPTION_ENCODING(kcode);
11852 }
11853
11854 static void
11855 dispose_string(VALUE str)
11856 {
11857
11858 if (RBASIC(str)->flags & RSTRING_NOEMBED)
11859 xfree(RSTRING_PTR(str));
11860 rb_gc_force_recycle(str);
11861 }
11862
11863 static int
11864 parser_tokadd_mbchar(struct parser_params *parser, int c)
11865 {
11866 int len = parser_precise_mbclen();
11867 if (!MBCLEN_CHARFOUND_P(len)) {
11868 compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
11869 return -1;
11870 }
11871 tokadd(c);
11872 lex_p += --len;
11873 if (len > 0) tokcopy(len);
11874 return c;
11875 }
11876
11877 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, c)
11878
11879 static int
11880 parser_tokadd_string(struct parser_params *parser,
11881 int func, int term, int paren, long *nest,
11882 rb_encoding **encp)
11883 {
11884 int c;
11885 int has_nonascii = 0;
11886 rb_encoding *enc = *encp;
11887 char *errbuf = 0;
11888 static const char mixed_msg[] = "%s mixed within %s source";
11889
11890 #define mixed_error(enc1, enc2) if (!errbuf) { \
11891 size_t len = sizeof(mixed_msg) - 4; \
11892 len += strlen(rb_enc_name(enc1)); \
11893 len += strlen(rb_enc_name(enc2)); \
11894 errbuf = ALLOCA_N(char, len); \
11895 snprintf(errbuf, len, mixed_msg, \
11896 rb_enc_name(enc1), \
11897 rb_enc_name(enc2)); \
11898 yyerror(errbuf); \
11899 }
11900 #define mixed_escape(beg, enc1, enc2) do { \
11901 const char *pos = lex_p; \
11902 lex_p = beg; \
11903 mixed_error(enc1, enc2); \
11904 lex_p = pos; \
11905 } while (0)
11906
11907 while ((c = nextc()) != -1) {
11908 if (paren && c == paren) {
11909 ++*nest;
11910 }
11911 else if (c == term) {
11912 if (!nest || !*nest) {
11913 pushback(c);
11914 break;
11915 }
11916 --*nest;
11917 }
11918 else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
11919 int c2 = *lex_p;
11920 if (c2 == '$' || c2 == '@' || c2 == '{') {
11921 pushback(c);
11922 break;
11923 }
11924 }
11925 else if (c == '\\') {
11926 const char *beg = lex_p - 1;
11927 c = nextc();
11928 switch (c) {
11929 case '\n':
11930 if (func & STR_FUNC_QWORDS) break;
11931 if (func & STR_FUNC_EXPAND) continue;
11932 tokadd('\\');
11933 break;
11934
11935 case '\\':
11936 if (func & STR_FUNC_ESCAPE) tokadd(c);
11937 break;
11938
11939 case 'u':
11940 if ((func & STR_FUNC_EXPAND) == 0) {
11941 tokadd('\\');
11942 break;
11943 }
11944 parser_tokadd_utf8(parser, &enc, 1,
11945 func & STR_FUNC_SYMBOL,
11946 func & STR_FUNC_REGEXP);
11947 if (has_nonascii && enc != *encp) {
11948 mixed_escape(beg, enc, *encp);
11949 }
11950 continue;
11951
11952 default:
11953 if (func & STR_FUNC_REGEXP) {
11954 pushback(c);
11955 if ((c = tokadd_escape(&enc)) < 0)
11956 return -1;
11957 if (has_nonascii && enc != *encp) {
11958 mixed_escape(beg, enc, *encp);
11959 }
11960 continue;
11961 }
11962 else if (func & STR_FUNC_EXPAND) {
11963 pushback(c);
11964 if (func & STR_FUNC_ESCAPE) tokadd('\\');
11965 c = read_escape(0, &enc);
11966 }
11967 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11968
11969 }
11970 else if (c != term && !(paren && c == paren)) {
11971 tokadd('\\');
11972 pushback(c);
11973 continue;
11974 }
11975 }
11976 }
11977 else if (!parser_isascii()) {
11978 has_nonascii = 1;
11979 if (enc != *encp) {
11980 mixed_error(enc, *encp);
11981 continue;
11982 }
11983 if (tokadd_mbchar(c) == -1) return -1;
11984 continue;
11985 }
11986 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11987 pushback(c);
11988 break;
11989 }
11990 if (c & 0x80) {
11991 has_nonascii = 1;
11992 if (enc != *encp) {
11993 mixed_error(enc, *encp);
11994 continue;
11995 }
11996 }
11997 tokadd(c);
11998 }
11999 *encp = enc;
12000 return c;
12001 }
12002
12003 #define NEW_STRTERM(func, term, paren) \
12004 rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
12005
12006 static int
12007 parser_parse_string(struct parser_params *parser, NODE *quote)
12008 {
12009 int func = (int)quote->nd_func;
12010 int term = nd_term(quote);
12011 int paren = nd_paren(quote);
12012 int c, space = 0;
12013 rb_encoding *enc = parser->enc;
12014
12015 if (func == -1) return tSTRING_END;
12016 c = nextc();
12017 if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12018 do {c = nextc();} while (ISSPACE(c));
12019 space = 1;
12020 }
12021 if (c == term && !quote->nd_nest) {
12022 if (func & STR_FUNC_QWORDS) {
12023 quote->nd_func = -1;
12024 return ' ';
12025 }
12026 if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
12027 set_yylval_num(regx_options());
12028 return tREGEXP_END;
12029 }
12030 if (space) {
12031 pushback(c);
12032 return ' ';
12033 }
12034 newtok();
12035 if ((func & STR_FUNC_EXPAND) && c == '#') {
12036 switch (c = nextc()) {
12037 case '$':
12038 case '@':
12039 pushback(c);
12040 return tSTRING_DVAR;
12041 case '{':
12042 return tSTRING_DBEG;
12043 }
12044 tokadd('#');
12045 }
12046 pushback(c);
12047 if (tokadd_string(func, term, paren, "e->nd_nest,
12048 &enc) == -1) {
12049 ruby_sourceline = nd_line(quote);
12050 if (func & STR_FUNC_REGEXP) {
12051 if (parser->eofp)
12052 compile_error(PARSER_ARG "unterminated regexp meets end of file");
12053 return tREGEXP_END;
12054 }
12055 else {
12056 if (parser->eofp)
12057 compile_error(PARSER_ARG "unterminated string meets end of file");
12058 return tSTRING_END;
12059 }
12060 }
12061
12062 tokfix();
12063 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12064
12065 #ifdef RIPPER
12066 if (!NIL_P(parser->delayed)){
12067 ptrdiff_t len = lex_p - parser->tokp;
12068 if (len > 0) {
12069 rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
12070 }
12071 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12072 parser->tokp = lex_p;
12073 }
12074 #endif
12075
12076 return tSTRING_CONTENT;
12077 }
12078
12079 static int
12080 parser_heredoc_identifier(struct parser_params *parser)
12081 {
12082 int c = nextc(), term, func = 0;
12083 long len;
12084
12085 if (c == '-') {
12086 c = nextc();
12087 func = STR_FUNC_INDENT;
12088 }
12089 switch (c) {
12090 case '\'':
12091 func |= str_squote; goto quoted;
12092 case '"':
12093 func |= str_dquote; goto quoted;
12094 case '`':
12095 func |= str_xquote;
12096 quoted:
12097 newtok();
12098 tokadd(func);
12099 term = c;
12100 while ((c = nextc()) != -1 && c != term) {
12101 if (tokadd_mbchar(c) == -1) return 0;
12102 }
12103 if (c == -1) {
12104 compile_error(PARSER_ARG "unterminated here document identifier");
12105 return 0;
12106 }
12107 break;
12108
12109 default:
12110 if (!parser_is_identchar()) {
12111 pushback(c);
12112 if (func & STR_FUNC_INDENT) {
12113 pushback('-');
12114 }
12115 return 0;
12116 }
12117 newtok();
12118 term = '"';
12119 tokadd(func |= str_dquote);
12120 do {
12121 if (tokadd_mbchar(c) == -1) return 0;
12122 } while ((c = nextc()) != -1 && parser_is_identchar());
12123 pushback(c);
12124 break;
12125 }
12126
12127 tokfix();
12128 #ifdef RIPPER
12129 ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
12130 #endif
12131 len = lex_p - lex_pbeg;
12132 lex_goto_eol(parser);
12133 lex_strterm = rb_node_newnode(NODE_HEREDOC,
12134 STR_NEW(tok(), toklen()),
12135 len,
12136 lex_lastline);
12137 nd_set_line(lex_strterm, ruby_sourceline);
12138 ripper_flush(parser);
12139 return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
12140 }
12141
12142 static void
12143 parser_heredoc_restore(struct parser_params *parser, NODE *here)
12144 {
12145 VALUE line;
12146
12147 line = here->nd_orig;
12148 lex_lastline = line;
12149 lex_pbeg = RSTRING_PTR(line);
12150 lex_pend = lex_pbeg + RSTRING_LEN(line);
12151 lex_p = lex_pbeg + here->nd_nth;
12152 heredoc_end = ruby_sourceline;
12153 ruby_sourceline = nd_line(here);
12154 dispose_string(here->nd_lit);
12155 rb_gc_force_recycle((VALUE)here);
12156 ripper_flush(parser);
12157 }
12158
12159 static int
12160 parser_whole_match_p(struct parser_params *parser,
12161 const char *eos, long len, int indent)
12162 {
12163 const char *p = lex_pbeg;
12164 long n;
12165
12166 if (indent) {
12167 while (*p && ISSPACE(*p)) p++;
12168 }
12169 n = lex_pend - (p + len);
12170 if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE;
12171 return strncmp(eos, p, len) == 0;
12172 }
12173
12174 static int
12175 parser_here_document(struct parser_params *parser, NODE *here)
12176 {
12177 int c, func, indent = 0;
12178 const char *eos, *p, *pend;
12179 long len;
12180 VALUE str = 0;
12181 rb_encoding *enc = parser->enc;
12182
12183 eos = RSTRING_PTR(here->nd_lit);
12184 len = RSTRING_LEN(here->nd_lit) - 1;
12185 indent = (func = *eos++) & STR_FUNC_INDENT;
12186
12187 if ((c = nextc()) == -1) {
12188 error:
12189 compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
12190 #ifdef RIPPER
12191 if (NIL_P(parser->delayed)) {
12192 ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
12193 }
12194 else {
12195 if (str ||
12196 ((len = lex_p - parser->tokp) > 0 &&
12197 (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
12198 rb_str_append(parser->delayed, str);
12199 }
12200 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12201 }
12202 lex_goto_eol(parser);
12203 #endif
12204 restore:
12205 heredoc_restore(lex_strterm);
12206 lex_strterm = 0;
12207 return 0;
12208 }
12209 if (was_bol() && whole_match_p(eos, len, indent)) {
12210 heredoc_restore(lex_strterm);
12211 return tSTRING_END;
12212 }
12213
12214 if (!(func & STR_FUNC_EXPAND)) {
12215 do {
12216 p = RSTRING_PTR(lex_lastline);
12217 pend = lex_pend;
12218 if (pend > p) {
12219 switch (pend[-1]) {
12220 case '\n':
12221 if (--pend == p || pend[-1] != '\r') {
12222 pend++;
12223 break;
12224 }
12225 case '\r':
12226 --pend;
12227 }
12228 }
12229 if (str)
12230 rb_str_cat(str, p, pend - p);
12231 else
12232 str = STR_NEW(p, pend - p);
12233 if (pend < lex_pend) rb_str_cat(str, "\n", 1);
12234 lex_goto_eol(parser);
12235 if (nextc() == -1) {
12236 if (str) dispose_string(str);
12237 goto error;
12238 }
12239 } while (!whole_match_p(eos, len, indent));
12240 }
12241 else {
12242
12243 newtok();
12244 if (c == '#') {
12245 switch (c = nextc()) {
12246 case '$':
12247 case '@':
12248 pushback(c);
12249 return tSTRING_DVAR;
12250 case '{':
12251 return tSTRING_DBEG;
12252 }
12253 tokadd('#');
12254 }
12255 do {
12256 pushback(c);
12257 if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
12258 if (parser->eofp) goto error;
12259 goto restore;
12260 }
12261 if (c != '\n') {
12262 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12263 return tSTRING_CONTENT;
12264 }
12265 tokadd(nextc());
12266
12267 if ((c = nextc()) == -1) goto error;
12268 } while (!whole_match_p(eos, len, indent));
12269 str = STR_NEW3(tok(), toklen(), enc, func);
12270 }
12271 #ifdef RIPPER
12272 if (!NIL_P(parser->delayed))
12273 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12274 lex_goto_eol(parser);
12275 ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
12276 #endif
12277 heredoc_restore(lex_strterm);
12278 lex_strterm = NEW_STRTERM(-1, 0, 0);
12279 set_yylval_str(str);
12280 return tSTRING_CONTENT;
12281 }
12282
12283 #include "lex.c"
12284
12285 static void
12286 arg_ambiguous_gen(struct parser_params *parser)
12287 {
12288 #ifndef RIPPER
12289 rb_warning0("ambiguous first argument; put parentheses or even spaces");
12290 #else
12291 dispatch0(arg_ambiguous);
12292 #endif
12293 }
12294 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
12295
12296 static ID
12297 formal_argument_gen(struct parser_params *parser, ID lhs)
12298 {
12299 #ifndef RIPPER
12300 if (!is_local_id(lhs))
12301 yyerror("formal argument must be local variable");
12302 #endif
12303 shadowing_lvar(lhs);
12304 return lhs;
12305 }
12306
12307 static int
12308 lvar_defined_gen(struct parser_params *parser, ID id)
12309 {
12310 return (dyna_in_block() && dvar_defined(id)) || local_id(id);
12311 }
12312
12313
12314 static long
12315 parser_encode_length(struct parser_params *parser, const char *name, long len)
12316 {
12317 long nlen;
12318
12319 if (len > 5 && name[nlen = len - 5] == '-') {
12320 if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
12321 return nlen;
12322 }
12323 if (len > 4 && name[nlen = len - 4] == '-') {
12324 if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
12325 return nlen;
12326 if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
12327 !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
12328
12329 return nlen;
12330 }
12331 return len;
12332 }
12333
12334 static void
12335 parser_set_encode(struct parser_params *parser, const char *name)
12336 {
12337 int idx = rb_enc_find_index(name);
12338 rb_encoding *enc;
12339 VALUE excargs[3];
12340
12341 if (idx < 0) {
12342 VALUE rb_make_backtrace(void);
12343 VALUE rb_make_exception(int, VALUE*);
12344
12345 excargs[1] = rb_sprintf("unknown encoding name: %s", name);
12346 error:
12347 excargs[0] = rb_eArgError;
12348 excargs[2] = rb_make_backtrace();
12349 rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
12350 rb_exc_raise(rb_make_exception(3, excargs));
12351 }
12352 enc = rb_enc_from_index(idx);
12353 if (!rb_enc_asciicompat(enc)) {
12354 excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
12355 goto error;
12356 }
12357 parser->enc = enc;
12358 #ifndef RIPPER
12359 if (ruby_debug_lines) {
12360 long i, n = RARRAY_LEN(ruby_debug_lines);
12361 const VALUE *p = RARRAY_PTR(ruby_debug_lines);
12362 for (i = 0; i < n; ++i) {
12363 rb_enc_associate_index(*p, idx);
12364 }
12365 }
12366 #endif
12367 }
12368
12369 static int
12370 comment_at_top(struct parser_params *parser)
12371 {
12372 const char *p = lex_pbeg, *pend = lex_p - 1;
12373 if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
12374 while (p < pend) {
12375 if (!ISSPACE(*p)) return 0;
12376 p++;
12377 }
12378 return 1;
12379 }
12380
12381 #ifndef RIPPER
12382 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
12383 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
12384
12385 static void
12386 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
12387 {
12388 if (!comment_at_top(parser)) {
12389 return;
12390 }
12391 parser_set_encode(parser, val);
12392 }
12393
12394 struct magic_comment {
12395 const char *name;
12396 rb_magic_comment_setter_t func;
12397 rb_magic_comment_length_t length;
12398 };
12399
12400 static const struct magic_comment magic_comments[] = {
12401 {"coding", magic_comment_encoding, parser_encode_length},
12402 {"encoding", magic_comment_encoding, parser_encode_length},
12403 };
12404 #endif
12405
12406 static const char *
12407 magic_comment_marker(const char *str, long len)
12408 {
12409 long i = 2;
12410
12411 while (i < len) {
12412 switch (str[i]) {
12413 case '-':
12414 if (str[i-1] == '*' && str[i-2] == '-') {
12415 return str + i + 1;
12416 }
12417 i += 2;
12418 break;
12419 case '*':
12420 if (i + 1 >= len) return 0;
12421 if (str[i+1] != '-') {
12422 i += 4;
12423 }
12424 else if (str[i-1] != '-') {
12425 i += 2;
12426 }
12427 else {
12428 return str + i + 2;
12429 }
12430 break;
12431 default:
12432 i += 3;
12433 break;
12434 }
12435 }
12436 return 0;
12437 }
12438
12439 static int
12440 parser_magic_comment(struct parser_params *parser, const char *str, long len)
12441 {
12442 VALUE name = 0, val = 0;
12443 const char *beg, *end, *vbeg, *vend;
12444 #define str_copy(_s, _p, _n) ((_s) \
12445 ? (rb_str_resize((_s), (_n)), \
12446 MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
12447 : ((_s) = STR_NEW((_p), (_n))))
12448
12449 if (len <= 7) return FALSE;
12450 if (!(beg = magic_comment_marker(str, len))) return FALSE;
12451 if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
12452 str = beg;
12453 len = end - beg - 3;
12454
12455
12456 while (len > 0) {
12457 #ifndef RIPPER
12458 const struct magic_comment *p = magic_comments;
12459 #endif
12460 char *s;
12461 int i;
12462 long n = 0;
12463
12464 for (; len > 0 && *str; str++, --len) {
12465 switch (*str) {
12466 case '\'': case '"': case ':': case ';':
12467 continue;
12468 }
12469 if (!ISSPACE(*str)) break;
12470 }
12471 for (beg = str; len > 0; str++, --len) {
12472 switch (*str) {
12473 case '\'': case '"': case ':': case ';':
12474 break;
12475 default:
12476 if (ISSPACE(*str)) break;
12477 continue;
12478 }
12479 break;
12480 }
12481 for (end = str; len > 0 && ISSPACE(*str); str++, --len);
12482 if (!len) break;
12483 if (*str != ':') continue;
12484
12485 do str++; while (--len > 0 && ISSPACE(*str));
12486 if (!len) break;
12487 if (*str == '"') {
12488 for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
12489 if (*str == '\\') {
12490 --len;
12491 ++str;
12492 }
12493 }
12494 vend = str;
12495 if (len) {
12496 --len;
12497 ++str;
12498 }
12499 }
12500 else {
12501 for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
12502 vend = str;
12503 }
12504 while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
12505
12506 n = end - beg;
12507 str_copy(name, beg, n);
12508 s = RSTRING_PTR(name);
12509 for (i = 0; i < n; ++i) {
12510 if (s[i] == '-') s[i] = '_';
12511 }
12512 #ifndef RIPPER
12513 do {
12514 if (STRNCASECMP(p->name, s, n) == 0) {
12515 n = vend - vbeg;
12516 if (p->length) {
12517 n = (*p->length)(parser, vbeg, n);
12518 }
12519 str_copy(val, vbeg, n);
12520 (*p->func)(parser, s, RSTRING_PTR(val));
12521 break;
12522 }
12523 } while (++p < magic_comments + numberof(magic_comments));
12524 #else
12525 dispatch2(magic_comment, name, val);
12526 #endif
12527 }
12528
12529 return TRUE;
12530 }
12531
12532 static void
12533 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
12534 {
12535 int sep = 0;
12536 const char *beg = str;
12537 VALUE s;
12538
12539 for (;;) {
12540 if (send - str <= 6) return;
12541 switch (str[6]) {
12542 case 'C': case 'c': str += 6; continue;
12543 case 'O': case 'o': str += 5; continue;
12544 case 'D': case 'd': str += 4; continue;
12545 case 'I': case 'i': str += 3; continue;
12546 case 'N': case 'n': str += 2; continue;
12547 case 'G': case 'g': str += 1; continue;
12548 case '=': case ':':
12549 sep = 1;
12550 str += 6;
12551 break;
12552 default:
12553 str += 6;
12554 if (ISSPACE(*str)) break;
12555 continue;
12556 }
12557 if (STRNCASECMP(str-6, "coding", 6) == 0) break;
12558 }
12559 for (;;) {
12560 do {
12561 if (++str >= send) return;
12562 } while (ISSPACE(*str));
12563 if (sep) break;
12564 if (*str != '=' && *str != ':') return;
12565 sep = 1;
12566 str++;
12567 }
12568 beg = str;
12569 while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
12570 s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
12571 parser_set_encode(parser, RSTRING_PTR(s));
12572 rb_str_resize(s, 0);
12573 }
12574
12575 static void
12576 parser_prepare(struct parser_params *parser)
12577 {
12578 int c = nextc();
12579 switch (c) {
12580 case '#':
12581 if (peek('!')) parser->has_shebang = 1;
12582 break;
12583 case 0xef:
12584 if (lex_pend - lex_p >= 2 &&
12585 (unsigned char)lex_p[0] == 0xbb &&
12586 (unsigned char)lex_p[1] == 0xbf) {
12587 parser->enc = rb_utf8_encoding();
12588 lex_p += 2;
12589 lex_pbeg = lex_p;
12590 return;
12591 }
12592 break;
12593 case EOF:
12594 return;
12595 }
12596 pushback(c);
12597 parser->enc = rb_enc_get(lex_lastline);
12598 }
12599
12600 #define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG)
12601 #define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_ENDFN)
12602 #define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS)
12603 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
12604
12605 #ifndef RIPPER
12606 #define ambiguous_operator(op, syn) ( \
12607 rb_warning0("`"op"' after local variable is interpreted as binary operator"), \
12608 rb_warning0("even though it seems like "syn""))
12609 #else
12610 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
12611 #endif
12612 #define warn_balanced(op, syn) \
12613 (last_state != EXPR_CLASS && last_state != EXPR_DOT && \
12614 last_state != EXPR_FNAME && last_state != EXPR_ENDFN && \
12615 last_state != EXPR_ENDARG && \
12616 space_seen && !ISSPACE(c) && \
12617 (ambiguous_operator(op, syn), 0))
12618
12619 static int
12620 parser_yylex(struct parser_params *parser)
12621 {
12622 register int c;
12623 int space_seen = 0;
12624 int cmd_state;
12625 enum lex_state_e last_state;
12626 rb_encoding *enc;
12627 int mb;
12628 #ifdef RIPPER
12629 int fallthru = FALSE;
12630 #endif
12631
12632 if (lex_strterm) {
12633 int token;
12634 if (nd_type(lex_strterm) == NODE_HEREDOC) {
12635 token = here_document(lex_strterm);
12636 if (token == tSTRING_END) {
12637 lex_strterm = 0;
12638 lex_state = EXPR_END;
12639 }
12640 }
12641 else {
12642 token = parse_string(lex_strterm);
12643 if (token == tSTRING_END || token == tREGEXP_END) {
12644 rb_gc_force_recycle((VALUE)lex_strterm);
12645 lex_strterm = 0;
12646 lex_state = EXPR_END;
12647 }
12648 }
12649 return token;
12650 }
12651 cmd_state = command_start;
12652 command_start = FALSE;
12653 retry:
12654 last_state = lex_state;
12655 switch (c = nextc()) {
12656 case '\0':
12657 case '\004':
12658 case '\032':
12659 case -1:
12660 return 0;
12661
12662
12663 case ' ': case '\t': case '\f': case '\r':
12664 case '\13':
12665 space_seen = 1;
12666 #ifdef RIPPER
12667 while ((c = nextc())) {
12668 switch (c) {
12669 case ' ': case '\t': case '\f': case '\r':
12670 case '\13':
12671 break;
12672 default:
12673 goto outofloop;
12674 }
12675 }
12676 outofloop:
12677 pushback(c);
12678 ripper_dispatch_scan_event(parser, tSP);
12679 #endif
12680 goto retry;
12681
12682 case '#':
12683
12684 if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
12685 if (comment_at_top(parser)) {
12686 set_file_encoding(parser, lex_p, lex_pend);
12687 }
12688 }
12689 lex_p = lex_pend;
12690 #ifdef RIPPER
12691 ripper_dispatch_scan_event(parser, tCOMMENT);
12692 fallthru = TRUE;
12693 #endif
12694
12695 case '\n':
12696 switch (lex_state) {
12697 case EXPR_BEG:
12698 case EXPR_FNAME:
12699 case EXPR_DOT:
12700 case EXPR_CLASS:
12701 case EXPR_VALUE:
12702 #ifdef RIPPER
12703 if (!fallthru) {
12704 ripper_dispatch_scan_event(parser, tIGNORED_NL);
12705 }
12706 fallthru = FALSE;
12707 #endif
12708 goto retry;
12709 default:
12710 break;
12711 }
12712 while ((c = nextc())) {
12713 switch (c) {
12714 case ' ': case '\t': case '\f': case '\r':
12715 case '\13':
12716 space_seen = 1;
12717 break;
12718 case '.': {
12719 if ((c = nextc()) != '.') {
12720 pushback(c);
12721 pushback('.');
12722 goto retry;
12723 }
12724 }
12725 default:
12726 --ruby_sourceline;
12727 lex_nextline = lex_lastline;
12728 case -1:
12729 lex_goto_eol(parser);
12730 #ifdef RIPPER
12731 if (c != -1) {
12732 parser->tokp = lex_p;
12733 }
12734 #endif
12735 goto normal_newline;
12736 }
12737 }
12738 normal_newline:
12739 command_start = TRUE;
12740 lex_state = EXPR_BEG;
12741 return '\n';
12742
12743 case '*':
12744 if ((c = nextc()) == '*') {
12745 if ((c = nextc()) == '=') {
12746 set_yylval_id(tPOW);
12747 lex_state = EXPR_BEG;
12748 return tOP_ASGN;
12749 }
12750 pushback(c);
12751 c = tPOW;
12752 }
12753 else {
12754 if (c == '=') {
12755 set_yylval_id('*');
12756 lex_state = EXPR_BEG;
12757 return tOP_ASGN;
12758 }
12759 pushback(c);
12760 if (IS_SPCARG(c)) {
12761 rb_warning0("`*' interpreted as argument prefix");
12762 c = tSTAR;
12763 }
12764 else if (IS_BEG()) {
12765 c = tSTAR;
12766 }
12767 else {
12768 warn_balanced("*", "argument prefix");
12769 c = '*';
12770 }
12771 }
12772 switch (lex_state) {
12773 case EXPR_FNAME: case EXPR_DOT:
12774 lex_state = EXPR_ARG; break;
12775 default:
12776 lex_state = EXPR_BEG; break;
12777 }
12778 return c;
12779
12780 case '!':
12781 c = nextc();
12782 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12783 lex_state = EXPR_ARG;
12784 if (c == '@') {
12785 return '!';
12786 }
12787 }
12788 else {
12789 lex_state = EXPR_BEG;
12790 }
12791 if (c == '=') {
12792 return tNEQ;
12793 }
12794 if (c == '~') {
12795 return tNMATCH;
12796 }
12797 pushback(c);
12798 return '!';
12799
12800 case '=':
12801 if (was_bol()) {
12802
12803 if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
12804 #ifdef RIPPER
12805 int first_p = TRUE;
12806
12807 lex_goto_eol(parser);
12808 ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
12809 #endif
12810 for (;;) {
12811 lex_goto_eol(parser);
12812 #ifdef RIPPER
12813 if (!first_p) {
12814 ripper_dispatch_scan_event(parser, tEMBDOC);
12815 }
12816 first_p = FALSE;
12817 #endif
12818 c = nextc();
12819 if (c == -1) {
12820 compile_error(PARSER_ARG "embedded document meets end of file");
12821 return 0;
12822 }
12823 if (c != '=') continue;
12824 if (strncmp(lex_p, "end", 3) == 0 &&
12825 (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
12826 break;
12827 }
12828 }
12829 lex_goto_eol(parser);
12830 #ifdef RIPPER
12831 ripper_dispatch_scan_event(parser, tEMBDOC_END);
12832 #endif
12833 goto retry;
12834 }
12835 }
12836
12837 switch (lex_state) {
12838 case EXPR_FNAME: case EXPR_DOT:
12839 lex_state = EXPR_ARG; break;
12840 default:
12841 lex_state = EXPR_BEG; break;
12842 }
12843 if ((c = nextc()) == '=') {
12844 if ((c = nextc()) == '=') {
12845 return tEQQ;
12846 }
12847 pushback(c);
12848 return tEQ;
12849 }
12850 if (c == '~') {
12851 return tMATCH;
12852 }
12853 else if (c == '>') {
12854 return tASSOC;
12855 }
12856 pushback(c);
12857 return '=';
12858
12859 case '<':
12860 last_state = lex_state;
12861 c = nextc();
12862 if (c == '<' &&
12863 lex_state != EXPR_DOT &&
12864 lex_state != EXPR_CLASS &&
12865 !IS_END() &&
12866 (!IS_ARG() || space_seen)) {
12867 int token = heredoc_identifier();
12868 if (token) return token;
12869 }
12870 switch (lex_state) {
12871 case EXPR_FNAME: case EXPR_DOT:
12872 lex_state = EXPR_ARG; break;
12873 default:
12874 lex_state = EXPR_BEG; break;
12875 }
12876 if (c == '=') {
12877 if ((c = nextc()) == '>') {
12878 return tCMP;
12879 }
12880 pushback(c);
12881 return tLEQ;
12882 }
12883 if (c == '<') {
12884 if ((c = nextc()) == '=') {
12885 set_yylval_id(tLSHFT);
12886 lex_state = EXPR_BEG;
12887 return tOP_ASGN;
12888 }
12889 pushback(c);
12890 warn_balanced("<<", "here document");
12891 return tLSHFT;
12892 }
12893 pushback(c);
12894 return '<';
12895
12896 case '>':
12897 switch (lex_state) {
12898 case EXPR_FNAME: case EXPR_DOT:
12899 lex_state = EXPR_ARG; break;
12900 default:
12901 lex_state = EXPR_BEG; break;
12902 }
12903 if ((c = nextc()) == '=') {
12904 return tGEQ;
12905 }
12906 if (c == '>') {
12907 if ((c = nextc()) == '=') {
12908 set_yylval_id(tRSHFT);
12909 lex_state = EXPR_BEG;
12910 return tOP_ASGN;
12911 }
12912 pushback(c);
12913 return tRSHFT;
12914 }
12915 pushback(c);
12916 return '>';
12917
12918 case '"':
12919 lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
12920 return tSTRING_BEG;
12921
12922 case '`':
12923 if (lex_state == EXPR_FNAME) {
12924 lex_state = EXPR_ENDFN;
12925 return c;
12926 }
12927 if (lex_state == EXPR_DOT) {
12928 if (cmd_state)
12929 lex_state = EXPR_CMDARG;
12930 else
12931 lex_state = EXPR_ARG;
12932 return c;
12933 }
12934 lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
12935 return tXSTRING_BEG;
12936
12937 case '\'':
12938 lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
12939 return tSTRING_BEG;
12940
12941 case '?':
12942 if (IS_END()) {
12943 lex_state = EXPR_VALUE;
12944 return '?';
12945 }
12946 c = nextc();
12947 if (c == -1) {
12948 compile_error(PARSER_ARG "incomplete character syntax");
12949 return 0;
12950 }
12951 if (rb_enc_isspace(c, parser->enc)) {
12952 if (!IS_ARG()) {
12953 int c2 = 0;
12954 switch (c) {
12955 case ' ':
12956 c2 = 's';
12957 break;
12958 case '\n':
12959 c2 = 'n';
12960 break;
12961 case '\t':
12962 c2 = 't';
12963 break;
12964 case '\v':
12965 c2 = 'v';
12966 break;
12967 case '\r':
12968 c2 = 'r';
12969 break;
12970 case '\f':
12971 c2 = 'f';
12972 break;
12973 }
12974 if (c2) {
12975 rb_warnI("invalid character syntax; use ?\\%c", c2);
12976 }
12977 }
12978 ternary:
12979 pushback(c);
12980 lex_state = EXPR_VALUE;
12981 return '?';
12982 }
12983 newtok();
12984 enc = parser->enc;
12985 if (!parser_isascii()) {
12986 if (tokadd_mbchar(c) == -1) return 0;
12987 }
12988 else if ((rb_enc_isalnum(c, parser->enc) || c == '_') &&
12989 lex_p < lex_pend && is_identchar(lex_p, lex_pend, parser->enc)) {
12990 goto ternary;
12991 }
12992 else if (c == '\\') {
12993 if (peek('u')) {
12994 nextc();
12995 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
12996 if (0x80 <= c) {
12997 tokaddmbc(c, enc);
12998 }
12999 else {
13000 tokadd(c);
13001 }
13002 }
13003 else {
13004 c = read_escape(0, &enc);
13005 tokadd(c);
13006 }
13007 }
13008 else {
13009 tokadd(c);
13010 }
13011 tokfix();
13012 set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
13013 lex_state = EXPR_END;
13014 return tCHAR;
13015
13016 case '&':
13017 if ((c = nextc()) == '&') {
13018 lex_state = EXPR_BEG;
13019 if ((c = nextc()) == '=') {
13020 set_yylval_id(tANDOP);
13021 lex_state = EXPR_BEG;
13022 return tOP_ASGN;
13023 }
13024 pushback(c);
13025 return tANDOP;
13026 }
13027 else if (c == '=') {
13028 set_yylval_id('&');
13029 lex_state = EXPR_BEG;
13030 return tOP_ASGN;
13031 }
13032 pushback(c);
13033 if (IS_SPCARG(c)) {
13034 rb_warning0("`&' interpreted as argument prefix");
13035 c = tAMPER;
13036 }
13037 else if (IS_BEG()) {
13038 c = tAMPER;
13039 }
13040 else {
13041 warn_balanced("&", "argument prefix");
13042 c = '&';
13043 }
13044 switch (lex_state) {
13045 case EXPR_FNAME: case EXPR_DOT:
13046 lex_state = EXPR_ARG; break;
13047 default:
13048 lex_state = EXPR_BEG;
13049 }
13050 return c;
13051
13052 case '|':
13053 if ((c = nextc()) == '|') {
13054 lex_state = EXPR_BEG;
13055 if ((c = nextc()) == '=') {
13056 set_yylval_id(tOROP);
13057 lex_state = EXPR_BEG;
13058 return tOP_ASGN;
13059 }
13060 pushback(c);
13061 return tOROP;
13062 }
13063 if (c == '=') {
13064 set_yylval_id('|');
13065 lex_state = EXPR_BEG;
13066 return tOP_ASGN;
13067 }
13068 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13069 lex_state = EXPR_ARG;
13070 }
13071 else {
13072 lex_state = EXPR_BEG;
13073 }
13074 pushback(c);
13075 return '|';
13076
13077 case '+':
13078 c = nextc();
13079 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13080 lex_state = EXPR_ARG;
13081 if (c == '@') {
13082 return tUPLUS;
13083 }
13084 pushback(c);
13085 return '+';
13086 }
13087 if (c == '=') {
13088 set_yylval_id('+');
13089 lex_state = EXPR_BEG;
13090 return tOP_ASGN;
13091 }
13092 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13093 lex_state = EXPR_BEG;
13094 pushback(c);
13095 if (c != -1 && ISDIGIT(c)) {
13096 c = '+';
13097 goto start_num;
13098 }
13099 return tUPLUS;
13100 }
13101 lex_state = EXPR_BEG;
13102 pushback(c);
13103 warn_balanced("+", "unary operator");
13104 return '+';
13105
13106 case '-':
13107 c = nextc();
13108 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13109 lex_state = EXPR_ARG;
13110 if (c == '@') {
13111 return tUMINUS;
13112 }
13113 pushback(c);
13114 return '-';
13115 }
13116 if (c == '=') {
13117 set_yylval_id('-');
13118 lex_state = EXPR_BEG;
13119 return tOP_ASGN;
13120 }
13121 if (c == '>') {
13122 lex_state = EXPR_ARG;
13123 return tLAMBDA;
13124 }
13125 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13126 lex_state = EXPR_BEG;
13127 pushback(c);
13128 if (c != -1 && ISDIGIT(c)) {
13129 return tUMINUS_NUM;
13130 }
13131 return tUMINUS;
13132 }
13133 lex_state = EXPR_BEG;
13134 pushback(c);
13135 warn_balanced("-", "unary operator");
13136 return '-';
13137
13138 case '.':
13139 lex_state = EXPR_BEG;
13140 if ((c = nextc()) == '.') {
13141 if ((c = nextc()) == '.') {
13142 return tDOT3;
13143 }
13144 pushback(c);
13145 return tDOT2;
13146 }
13147 pushback(c);
13148 if (c != -1 && ISDIGIT(c)) {
13149 yyerror("no .<digit> floating literal anymore; put 0 before dot");
13150 }
13151 lex_state = EXPR_DOT;
13152 return '.';
13153
13154 start_num:
13155 case '0': case '1': case '2': case '3': case '4':
13156 case '5': case '6': case '7': case '8': case '9':
13157 {
13158 int is_float, seen_point, seen_e, nondigit;
13159
13160 is_float = seen_point = seen_e = nondigit = 0;
13161 lex_state = EXPR_END;
13162 newtok();
13163 if (c == '-' || c == '+') {
13164 tokadd(c);
13165 c = nextc();
13166 }
13167 if (c == '0') {
13168 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13169 int start = toklen();
13170 c = nextc();
13171 if (c == 'x' || c == 'X') {
13172
13173 c = nextc();
13174 if (c != -1 && ISXDIGIT(c)) {
13175 do {
13176 if (c == '_') {
13177 if (nondigit) break;
13178 nondigit = c;
13179 continue;
13180 }
13181 if (!ISXDIGIT(c)) break;
13182 nondigit = 0;
13183 tokadd(c);
13184 } while ((c = nextc()) != -1);
13185 }
13186 pushback(c);
13187 tokfix();
13188 if (toklen() == start) {
13189 no_digits();
13190 }
13191 else if (nondigit) goto trailing_uc;
13192 set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE));
13193 return tINTEGER;
13194 }
13195 if (c == 'b' || c == 'B') {
13196
13197 c = nextc();
13198 if (c == '0' || c == '1') {
13199 do {
13200 if (c == '_') {
13201 if (nondigit) break;
13202 nondigit = c;
13203 continue;
13204 }
13205 if (c != '0' && c != '1') break;
13206 nondigit = 0;
13207 tokadd(c);
13208 } while ((c = nextc()) != -1);
13209 }
13210 pushback(c);
13211 tokfix();
13212 if (toklen() == start) {
13213 no_digits();
13214 }
13215 else if (nondigit) goto trailing_uc;
13216 set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE));
13217 return tINTEGER;
13218 }
13219 if (c == 'd' || c == 'D') {
13220
13221 c = nextc();
13222 if (c != -1 && ISDIGIT(c)) {
13223 do {
13224 if (c == '_') {
13225 if (nondigit) break;
13226 nondigit = c;
13227 continue;
13228 }
13229 if (!ISDIGIT(c)) break;
13230 nondigit = 0;
13231 tokadd(c);
13232 } while ((c = nextc()) != -1);
13233 }
13234 pushback(c);
13235 tokfix();
13236 if (toklen() == start) {
13237 no_digits();
13238 }
13239 else if (nondigit) goto trailing_uc;
13240 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13241 return tINTEGER;
13242 }
13243 if (c == '_') {
13244
13245 goto octal_number;
13246 }
13247 if (c == 'o' || c == 'O') {
13248
13249 c = nextc();
13250 if (c == -1 || c == '_' || !ISDIGIT(c)) {
13251 no_digits();
13252 }
13253 }
13254 if (c >= '0' && c <= '7') {
13255
13256 octal_number:
13257 do {
13258 if (c == '_') {
13259 if (nondigit) break;
13260 nondigit = c;
13261 continue;
13262 }
13263 if (c < '0' || c > '9') break;
13264 if (c > '7') goto invalid_octal;
13265 nondigit = 0;
13266 tokadd(c);
13267 } while ((c = nextc()) != -1);
13268 if (toklen() > start) {
13269 pushback(c);
13270 tokfix();
13271 if (nondigit) goto trailing_uc;
13272 set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE));
13273 return tINTEGER;
13274 }
13275 if (nondigit) {
13276 pushback(c);
13277 goto trailing_uc;
13278 }
13279 }
13280 if (c > '7' && c <= '9') {
13281 invalid_octal:
13282 yyerror("Invalid octal digit");
13283 }
13284 else if (c == '.' || c == 'e' || c == 'E') {
13285 tokadd('0');
13286 }
13287 else {
13288 pushback(c);
13289 set_yylval_literal(INT2FIX(0));
13290 return tINTEGER;
13291 }
13292 }
13293
13294 for (;;) {
13295 switch (c) {
13296 case '0': case '1': case '2': case '3': case '4':
13297 case '5': case '6': case '7': case '8': case '9':
13298 nondigit = 0;
13299 tokadd(c);
13300 break;
13301
13302 case '.':
13303 if (nondigit) goto trailing_uc;
13304 if (seen_point || seen_e) {
13305 goto decode_num;
13306 }
13307 else {
13308 int c0 = nextc();
13309 if (c0 == -1 || !ISDIGIT(c0)) {
13310 pushback(c0);
13311 goto decode_num;
13312 }
13313 c = c0;
13314 }
13315 tokadd('.');
13316 tokadd(c);
13317 is_float++;
13318 seen_point++;
13319 nondigit = 0;
13320 break;
13321
13322 case 'e':
13323 case 'E':
13324 if (nondigit) {
13325 pushback(c);
13326 c = nondigit;
13327 goto decode_num;
13328 }
13329 if (seen_e) {
13330 goto decode_num;
13331 }
13332 tokadd(c);
13333 seen_e++;
13334 is_float++;
13335 nondigit = c;
13336 c = nextc();
13337 if (c != '-' && c != '+') continue;
13338 tokadd(c);
13339 nondigit = c;
13340 break;
13341
13342 case '_':
13343 if (nondigit) goto decode_num;
13344 nondigit = c;
13345 break;
13346
13347 default:
13348 goto decode_num;
13349 }
13350 c = nextc();
13351 }
13352
13353 decode_num:
13354 pushback(c);
13355 if (nondigit) {
13356 char tmp[30];
13357 trailing_uc:
13358 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
13359 yyerror(tmp);
13360 }
13361 tokfix();
13362 if (is_float) {
13363 double d = strtod(tok(), 0);
13364 if (errno == ERANGE) {
13365 rb_warningS("Float %s out of range", tok());
13366 errno = 0;
13367 }
13368 set_yylval_literal(DBL2NUM(d));
13369 return tFLOAT;
13370 }
13371 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13372 return tINTEGER;
13373 }
13374
13375 case ')':
13376 case ']':
13377 paren_nest--;
13378 case '}':
13379 COND_LEXPOP();
13380 CMDARG_LEXPOP();
13381 if (c == ')')
13382 lex_state = EXPR_ENDFN;
13383 else
13384 lex_state = EXPR_ENDARG;
13385 return c;
13386
13387 case ':':
13388 c = nextc();
13389 if (c == ':') {
13390 if (IS_BEG() || lex_state == EXPR_CLASS || IS_SPCARG(-1)) {
13391 lex_state = EXPR_BEG;
13392 return tCOLON3;
13393 }
13394 lex_state = EXPR_DOT;
13395 return tCOLON2;
13396 }
13397 if (IS_END() || ISSPACE(c)) {
13398 pushback(c);
13399 warn_balanced(":", "symbol literal");
13400 lex_state = EXPR_BEG;
13401 return ':';
13402 }
13403 switch (c) {
13404 case '\'':
13405 lex_strterm = NEW_STRTERM(str_ssym, c, 0);
13406 break;
13407 case '"':
13408 lex_strterm = NEW_STRTERM(str_dsym, c, 0);
13409 break;
13410 default:
13411 pushback(c);
13412 break;
13413 }
13414 lex_state = EXPR_FNAME;
13415 return tSYMBEG;
13416
13417 case '/':
13418 if (IS_BEG()) {
13419 lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13420 return tREGEXP_BEG;
13421 }
13422 if ((c = nextc()) == '=') {
13423 set_yylval_id('/');
13424 lex_state = EXPR_BEG;
13425 return tOP_ASGN;
13426 }
13427 pushback(c);
13428 if (IS_SPCARG(c)) {
13429 arg_ambiguous();
13430 lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13431 return tREGEXP_BEG;
13432 }
13433 switch (lex_state) {
13434 case EXPR_FNAME: case EXPR_DOT:
13435 lex_state = EXPR_ARG; break;
13436 default:
13437 lex_state = EXPR_BEG; break;
13438 }
13439 warn_balanced("/", "regexp literal");
13440 return '/';
13441
13442 case '^':
13443 if ((c = nextc()) == '=') {
13444 set_yylval_id('^');
13445 lex_state = EXPR_BEG;
13446 return tOP_ASGN;
13447 }
13448 switch (lex_state) {
13449 case EXPR_FNAME: case EXPR_DOT:
13450 lex_state = EXPR_ARG; break;
13451 default:
13452 lex_state = EXPR_BEG; break;
13453 }
13454 pushback(c);
13455 return '^';
13456
13457 case ';':
13458 lex_state = EXPR_BEG;
13459 command_start = TRUE;
13460 return ';';
13461
13462 case ',':
13463 lex_state = EXPR_BEG;
13464 return ',';
13465
13466 case '~':
13467 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13468 if ((c = nextc()) != '@') {
13469 pushback(c);
13470 }
13471 lex_state = EXPR_ARG;
13472 }
13473 else {
13474 lex_state = EXPR_BEG;
13475 }
13476 return '~';
13477
13478 case '(':
13479 if (IS_BEG()) {
13480 c = tLPAREN;
13481 }
13482 else if (IS_SPCARG(-1)) {
13483 c = tLPAREN_ARG;
13484 }
13485 paren_nest++;
13486 COND_PUSH(0);
13487 CMDARG_PUSH(0);
13488 lex_state = EXPR_BEG;
13489 return c;
13490
13491 case '[':
13492 paren_nest++;
13493 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13494 lex_state = EXPR_ARG;
13495 if ((c = nextc()) == ']') {
13496 if ((c = nextc()) == '=') {
13497 return tASET;
13498 }
13499 pushback(c);
13500 return tAREF;
13501 }
13502 pushback(c);
13503 return '[';
13504 }
13505 else if (IS_BEG()) {
13506 c = tLBRACK;
13507 }
13508 else if (IS_ARG() && space_seen) {
13509 c = tLBRACK;
13510 }
13511 lex_state = EXPR_BEG;
13512 COND_PUSH(0);
13513 CMDARG_PUSH(0);
13514 return c;
13515
13516 case '{':
13517 if (lpar_beg && lpar_beg == paren_nest) {
13518 lex_state = EXPR_BEG;
13519 lpar_beg = 0;
13520 --paren_nest;
13521 COND_PUSH(0);
13522 CMDARG_PUSH(0);
13523 return tLAMBEG;
13524 }
13525 if (IS_ARG() || lex_state == EXPR_END || lex_state == EXPR_ENDFN)
13526 c = '{';
13527 else if (lex_state == EXPR_ENDARG)
13528 c = tLBRACE_ARG;
13529 else
13530 c = tLBRACE;
13531 COND_PUSH(0);
13532 CMDARG_PUSH(0);
13533 lex_state = EXPR_BEG;
13534 if (c != tLBRACE) command_start = TRUE;
13535 return c;
13536
13537 case '\\':
13538 c = nextc();
13539 if (c == '\n') {
13540 space_seen = 1;
13541 #ifdef RIPPER
13542 ripper_dispatch_scan_event(parser, tSP);
13543 #endif
13544 goto retry;
13545 }
13546 pushback(c);
13547 return '\\';
13548
13549 case '%':
13550 if (IS_BEG()) {
13551 int term;
13552 int paren;
13553
13554 c = nextc();
13555 quotation:
13556 if (c == -1 || !ISALNUM(c)) {
13557 term = c;
13558 c = 'Q';
13559 }
13560 else {
13561 term = nextc();
13562 if (rb_enc_isalnum(term, parser->enc) || !parser_isascii()) {
13563 yyerror("unknown type of %string");
13564 return 0;
13565 }
13566 }
13567 if (c == -1 || term == -1) {
13568 compile_error(PARSER_ARG "unterminated quoted string meets end of file");
13569 return 0;
13570 }
13571 paren = term;
13572 if (term == '(') term = ')';
13573 else if (term == '[') term = ']';
13574 else if (term == '{') term = '}';
13575 else if (term == '<') term = '>';
13576 else paren = 0;
13577
13578 switch (c) {
13579 case 'Q':
13580 lex_strterm = NEW_STRTERM(str_dquote, term, paren);
13581 return tSTRING_BEG;
13582
13583 case 'q':
13584 lex_strterm = NEW_STRTERM(str_squote, term, paren);
13585 return tSTRING_BEG;
13586
13587 case 'W':
13588 lex_strterm = NEW_STRTERM(str_dword, term, paren);
13589 do {c = nextc();} while (ISSPACE(c));
13590 pushback(c);
13591 return tWORDS_BEG;
13592
13593 case 'w':
13594 lex_strterm = NEW_STRTERM(str_sword, term, paren);
13595 do {c = nextc();} while (ISSPACE(c));
13596 pushback(c);
13597 return tQWORDS_BEG;
13598
13599 case 'x':
13600 lex_strterm = NEW_STRTERM(str_xquote, term, paren);
13601 return tXSTRING_BEG;
13602
13603 case 'r':
13604 lex_strterm = NEW_STRTERM(str_regexp, term, paren);
13605 return tREGEXP_BEG;
13606
13607 case 's':
13608 lex_strterm = NEW_STRTERM(str_ssym, term, paren);
13609 lex_state = EXPR_FNAME;
13610 return tSYMBEG;
13611
13612 default:
13613 yyerror("unknown type of %string");
13614 return 0;
13615 }
13616 }
13617 if ((c = nextc()) == '=') {
13618 set_yylval_id('%');
13619 lex_state = EXPR_BEG;
13620 return tOP_ASGN;
13621 }
13622 if (IS_SPCARG(c)) {
13623 goto quotation;
13624 }
13625 switch (lex_state) {
13626 case EXPR_FNAME: case EXPR_DOT:
13627 lex_state = EXPR_ARG; break;
13628 default:
13629 lex_state = EXPR_BEG; break;
13630 }
13631 pushback(c);
13632 warn_balanced("%%", "string literal");
13633 return '%';
13634
13635 case '$':
13636 lex_state = EXPR_END;
13637 newtok();
13638 c = nextc();
13639 switch (c) {
13640 case '_':
13641 c = nextc();
13642 if (parser_is_identchar()) {
13643 tokadd('$');
13644 tokadd('_');
13645 break;
13646 }
13647 pushback(c);
13648 c = '_';
13649
13650 case '~':
13651 case '*':
13652 case '$':
13653 case '?':
13654 case '!':
13655 case '@':
13656 case '/':
13657 case '\\':
13658 case ';':
13659 case ',':
13660 case '.':
13661 case '=':
13662 case ':':
13663 case '<':
13664 case '>':
13665 case '\"':
13666 tokadd('$');
13667 tokadd(c);
13668 tokfix();
13669 set_yylval_name(rb_intern(tok()));
13670 return tGVAR;
13671
13672 case '-':
13673 tokadd('$');
13674 tokadd(c);
13675 c = nextc();
13676 if (parser_is_identchar()) {
13677 if (tokadd_mbchar(c) == -1) return 0;
13678 }
13679 else {
13680 pushback(c);
13681 }
13682 gvar:
13683 tokfix();
13684 set_yylval_name(rb_intern(tok()));
13685 return tGVAR;
13686
13687 case '&':
13688 case '`':
13689 case '\'':
13690 case '+':
13691 if (last_state == EXPR_FNAME) {
13692 tokadd('$');
13693 tokadd(c);
13694 goto gvar;
13695 }
13696 set_yylval_node(NEW_BACK_REF(c));
13697 return tBACK_REF;
13698
13699 case '1': case '2': case '3':
13700 case '4': case '5': case '6':
13701 case '7': case '8': case '9':
13702 tokadd('$');
13703 do {
13704 tokadd(c);
13705 c = nextc();
13706 } while (c != -1 && ISDIGIT(c));
13707 pushback(c);
13708 if (last_state == EXPR_FNAME) goto gvar;
13709 tokfix();
13710 set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
13711 return tNTH_REF;
13712
13713 default:
13714 if (!parser_is_identchar()) {
13715 pushback(c);
13716 return '$';
13717 }
13718 case '0':
13719 tokadd('$');
13720 }
13721 break;
13722
13723 case '@':
13724 c = nextc();
13725 newtok();
13726 tokadd('@');
13727 if (c == '@') {
13728 tokadd('@');
13729 c = nextc();
13730 }
13731 if (c != -1 && ISDIGIT(c)) {
13732 if (tokidx == 1) {
13733 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
13734 }
13735 else {
13736 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
13737 }
13738 return 0;
13739 }
13740 if (!parser_is_identchar()) {
13741 pushback(c);
13742 return '@';
13743 }
13744 break;
13745
13746 case '_':
13747 if (was_bol() && whole_match_p("__END__", 7, 0)) {
13748 ruby__end__seen = 1;
13749 parser->eofp = Qtrue;
13750 #ifndef RIPPER
13751 return -1;
13752 #else
13753 lex_goto_eol(parser);
13754 ripper_dispatch_scan_event(parser, k__END__);
13755 return 0;
13756 #endif
13757 }
13758 newtok();
13759 break;
13760
13761 default:
13762 if (!parser_is_identchar()) {
13763 rb_compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c);
13764 goto retry;
13765 }
13766
13767 newtok();
13768 break;
13769 }
13770
13771 mb = ENC_CODERANGE_7BIT;
13772 do {
13773 if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
13774 if (tokadd_mbchar(c) == -1) return 0;
13775 c = nextc();
13776 } while (parser_is_identchar());
13777 switch (tok()[0]) {
13778 case '@': case '$':
13779 pushback(c);
13780 break;
13781 default:
13782 if ((c == '!' || c == '?') && !peek('=')) {
13783 tokadd(c);
13784 }
13785 else {
13786 pushback(c);
13787 }
13788 }
13789 tokfix();
13790
13791 {
13792 int result = 0;
13793
13794 last_state = lex_state;
13795 switch (tok()[0]) {
13796 case '$':
13797 lex_state = EXPR_END;
13798 result = tGVAR;
13799 break;
13800 case '@':
13801 lex_state = EXPR_END;
13802 if (tok()[1] == '@')
13803 result = tCVAR;
13804 else
13805 result = tIVAR;
13806 break;
13807
13808 default:
13809 if (toklast() == '!' || toklast() == '?') {
13810 result = tFID;
13811 }
13812 else {
13813 if (lex_state == EXPR_FNAME) {
13814 if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
13815 (!peek('=') || (lex_p + 1 < lex_pend && lex_p[1] == '>'))) {
13816 result = tIDENTIFIER;
13817 tokadd(c);
13818 tokfix();
13819 }
13820 else {
13821 pushback(c);
13822 }
13823 }
13824 if (result == 0 && ISUPPER(tok()[0])) {
13825 result = tCONSTANT;
13826 }
13827 else {
13828 result = tIDENTIFIER;
13829 }
13830 }
13831
13832 if ((lex_state == EXPR_BEG && !cmd_state) ||
13833 IS_ARG()) {
13834 if (peek(':') && !(lex_p + 1 < lex_pend && lex_p[1] == ':')) {
13835 lex_state = EXPR_BEG;
13836 nextc();
13837 set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb)));
13838 return tLABEL;
13839 }
13840 }
13841 if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) {
13842 const struct kwtable *kw;
13843
13844
13845 kw = rb_reserved_word(tok(), toklen());
13846 if (kw) {
13847 enum lex_state_e state = lex_state;
13848 lex_state = kw->state;
13849 if (state == EXPR_FNAME) {
13850 set_yylval_name(rb_intern(kw->name));
13851 return kw->id[0];
13852 }
13853 if (kw->id[0] == keyword_do) {
13854 command_start = TRUE;
13855 if (lpar_beg && lpar_beg == paren_nest) {
13856 lpar_beg = 0;
13857 --paren_nest;
13858 return keyword_do_LAMBDA;
13859 }
13860 if (COND_P()) return keyword_do_cond;
13861 if (CMDARG_P() && state != EXPR_CMDARG)
13862 return keyword_do_block;
13863 if (state == EXPR_ENDARG || state == EXPR_BEG)
13864 return keyword_do_block;
13865 return keyword_do;
13866 }
13867 if (state == EXPR_BEG || state == EXPR_VALUE)
13868 return kw->id[0];
13869 else {
13870 if (kw->id[0] != kw->id[1])
13871 lex_state = EXPR_BEG;
13872 return kw->id[1];
13873 }
13874 }
13875 }
13876
13877 if (IS_BEG() ||
13878 lex_state == EXPR_DOT ||
13879 IS_ARG()) {
13880 if (cmd_state) {
13881 lex_state = EXPR_CMDARG;
13882 }
13883 else {
13884 lex_state = EXPR_ARG;
13885 }
13886 }
13887 else if (lex_state == EXPR_FNAME) {
13888 lex_state = EXPR_ENDFN;
13889 }
13890 else {
13891 lex_state = EXPR_END;
13892 }
13893 }
13894 {
13895 ID ident = TOK_INTERN(!ENC_SINGLE(mb));
13896
13897 set_yylval_name(ident);
13898 if (last_state != EXPR_DOT && is_local_id(ident) && lvar_defined(ident)) {
13899 lex_state = EXPR_END;
13900 }
13901 }
13902 return result;
13903 }
13904 }
13905
13906 #if YYPURE
13907 static int
13908 yylex(void *lval, void *p)
13909 #else
13910 yylex(void *p)
13911 #endif
13912 {
13913 struct parser_params *parser = (struct parser_params*)p;
13914 int t;
13915
13916 #if YYPURE
13917 parser->parser_yylval = lval;
13918 parser->parser_yylval->val = Qundef;
13919 #endif
13920 t = parser_yylex(parser);
13921 #ifdef RIPPER
13922 if (!NIL_P(parser->delayed)) {
13923 ripper_dispatch_delayed_token(parser, t);
13924 return t;
13925 }
13926 if (t != 0)
13927 ripper_dispatch_scan_event(parser, t);
13928 #endif
13929
13930 return t;
13931 }
13932
13933 #ifndef RIPPER
13934 static NODE*
13935 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
13936 {
13937 NODE *n = (rb_node_newnode)(type, a0, a1, a2);
13938 nd_set_line(n, ruby_sourceline);
13939 return n;
13940 }
13941
13942 enum node_type
13943 nodetype(NODE *node)
13944 {
13945 return (enum node_type)nd_type(node);
13946 }
13947
13948 int
13949 nodeline(NODE *node)
13950 {
13951 return nd_line(node);
13952 }
13953
13954 static NODE*
13955 newline_node(NODE *node)
13956 {
13957 if (node) {
13958 node = remove_begin(node);
13959 node->flags |= NODE_FL_NEWLINE;
13960 }
13961 return node;
13962 }
13963
13964 static void
13965 fixpos(NODE *node, NODE *orig)
13966 {
13967 if (!node) return;
13968 if (!orig) return;
13969 if (orig == (NODE*)1) return;
13970 nd_set_line(node, nd_line(orig));
13971 }
13972
13973 static void
13974 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
13975 {
13976 rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
13977 }
13978 #define parser_warning(node, mesg) parser_warning(parser, node, mesg)
13979
13980 static void
13981 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
13982 {
13983 rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
13984 }
13985 #define parser_warn(node, mesg) parser_warn(parser, node, mesg)
13986
13987 static NODE*
13988 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
13989 {
13990 NODE *end, *h = head, *nd;
13991
13992 if (tail == 0) return head;
13993
13994 if (h == 0) return tail;
13995 switch (nd_type(h)) {
13996 case NODE_LIT:
13997 case NODE_STR:
13998 case NODE_SELF:
13999 case NODE_TRUE:
14000 case NODE_FALSE:
14001 case NODE_NIL:
14002 parser_warning(h, "unused literal ignored");
14003 return tail;
14004 default:
14005 h = end = NEW_BLOCK(head);
14006 end->nd_end = end;
14007 fixpos(end, head);
14008 head = end;
14009 break;
14010 case NODE_BLOCK:
14011 end = h->nd_end;
14012 break;
14013 }
14014
14015 nd = end->nd_head;
14016 switch (nd_type(nd)) {
14017 case NODE_RETURN:
14018 case NODE_BREAK:
14019 case NODE_NEXT:
14020 case NODE_REDO:
14021 case NODE_RETRY:
14022 if (RTEST(ruby_verbose)) {
14023 parser_warning(nd, "statement not reached");
14024 }
14025 break;
14026
14027 default:
14028 break;
14029 }
14030
14031 if (nd_type(tail) != NODE_BLOCK) {
14032 tail = NEW_BLOCK(tail);
14033 tail->nd_end = tail;
14034 }
14035 end->nd_next = tail;
14036 h->nd_end = tail->nd_end;
14037 return head;
14038 }
14039
14040
14041 static NODE*
14042 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
14043 {
14044 NODE *last;
14045
14046 if (list == 0) return NEW_LIST(item);
14047 if (list->nd_next) {
14048 last = list->nd_next->nd_end;
14049 }
14050 else {
14051 last = list;
14052 }
14053
14054 list->nd_alen += 1;
14055 last->nd_next = NEW_LIST(item);
14056 list->nd_next->nd_end = last->nd_next;
14057 return list;
14058 }
14059
14060
14061 static NODE*
14062 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14063 {
14064 NODE *last;
14065
14066 if (head->nd_next) {
14067 last = head->nd_next->nd_end;
14068 }
14069 else {
14070 last = head;
14071 }
14072
14073 head->nd_alen += tail->nd_alen;
14074 last->nd_next = tail;
14075 if (tail->nd_next) {
14076 head->nd_next->nd_end = tail->nd_next->nd_end;
14077 }
14078 else {
14079 head->nd_next->nd_end = tail;
14080 }
14081
14082 return head;
14083 }
14084
14085 static int
14086 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
14087 {
14088 if (NIL_P(tail)) return 1;
14089 if (!rb_enc_compatible(head, tail)) {
14090 compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
14091 rb_enc_name(rb_enc_get(head)),
14092 rb_enc_name(rb_enc_get(tail)));
14093 rb_str_resize(head, 0);
14094 rb_str_resize(tail, 0);
14095 return 0;
14096 }
14097 rb_str_buf_append(head, tail);
14098 return 1;
14099 }
14100
14101
14102 static NODE *
14103 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14104 {
14105 enum node_type htype;
14106
14107 if (!head) return tail;
14108 if (!tail) return head;
14109
14110 htype = nd_type(head);
14111 if (htype == NODE_EVSTR) {
14112 NODE *node = NEW_DSTR(Qnil);
14113 head = list_append(node, head);
14114 }
14115 switch (nd_type(tail)) {
14116 case NODE_STR:
14117 if (htype == NODE_STR) {
14118 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) {
14119 error:
14120 rb_gc_force_recycle((VALUE)head);
14121 rb_gc_force_recycle((VALUE)tail);
14122 return 0;
14123 }
14124 rb_gc_force_recycle((VALUE)tail);
14125 }
14126 else {
14127 list_append(head, tail);
14128 }
14129 break;
14130
14131 case NODE_DSTR:
14132 if (htype == NODE_STR) {
14133 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
14134 goto error;
14135 tail->nd_lit = head->nd_lit;
14136 rb_gc_force_recycle((VALUE)head);
14137 head = tail;
14138 }
14139 else if (NIL_P(tail->nd_lit)) {
14140 head->nd_alen += tail->nd_alen - 1;
14141 head->nd_next->nd_end->nd_next = tail->nd_next;
14142 head->nd_next->nd_end = tail->nd_next->nd_end;
14143 rb_gc_force_recycle((VALUE)tail);
14144 }
14145 else {
14146 nd_set_type(tail, NODE_ARRAY);
14147 tail->nd_head = NEW_STR(tail->nd_lit);
14148 list_concat(head, tail);
14149 }
14150 break;
14151
14152 case NODE_EVSTR:
14153 if (htype == NODE_STR) {
14154 nd_set_type(head, NODE_DSTR);
14155 head->nd_alen = 1;
14156 }
14157 list_append(head, tail);
14158 break;
14159 }
14160 return head;
14161 }
14162
14163 static NODE *
14164 evstr2dstr_gen(struct parser_params *parser, NODE *node)
14165 {
14166 if (nd_type(node) == NODE_EVSTR) {
14167 node = list_append(NEW_DSTR(Qnil), node);
14168 }
14169 return node;
14170 }
14171
14172 static NODE *
14173 new_evstr_gen(struct parser_params *parser, NODE *node)
14174 {
14175 NODE *head = node;
14176
14177 if (node) {
14178 switch (nd_type(node)) {
14179 case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
14180 return node;
14181 }
14182 }
14183 return NEW_EVSTR(head);
14184 }
14185
14186 static NODE *
14187 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
14188 {
14189 value_expr(recv);
14190 value_expr(arg1);
14191 return NEW_CALL(recv, id, NEW_LIST(arg1));
14192 }
14193
14194 static NODE *
14195 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
14196 {
14197 value_expr(recv);
14198 return NEW_CALL(recv, id, 0);
14199 }
14200
14201 static NODE*
14202 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14203 {
14204 value_expr(node1);
14205 value_expr(node2);
14206 if (node1) {
14207 switch (nd_type(node1)) {
14208 case NODE_DREGX:
14209 case NODE_DREGX_ONCE:
14210 return NEW_MATCH2(node1, node2);
14211
14212 case NODE_LIT:
14213 if (TYPE(node1->nd_lit) == T_REGEXP) {
14214 return NEW_MATCH2(node1, node2);
14215 }
14216 }
14217 }
14218
14219 if (node2) {
14220 switch (nd_type(node2)) {
14221 case NODE_DREGX:
14222 case NODE_DREGX_ONCE:
14223 return NEW_MATCH3(node2, node1);
14224
14225 case NODE_LIT:
14226 if (TYPE(node2->nd_lit) == T_REGEXP) {
14227 return NEW_MATCH3(node2, node1);
14228 }
14229 }
14230 }
14231
14232 return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
14233 }
14234
14235 static NODE*
14236 gettable_gen(struct parser_params *parser, ID id)
14237 {
14238 if (id == keyword_self) {
14239 return NEW_SELF();
14240 }
14241 else if (id == keyword_nil) {
14242 return NEW_NIL();
14243 }
14244 else if (id == keyword_true) {
14245 return NEW_TRUE();
14246 }
14247 else if (id == keyword_false) {
14248 return NEW_FALSE();
14249 }
14250 else if (id == keyword__FILE__) {
14251 return NEW_STR(rb_external_str_new_with_enc(ruby_sourcefile, strlen(ruby_sourcefile),
14252 rb_filesystem_encoding()));
14253 }
14254 else if (id == keyword__LINE__) {
14255 return NEW_LIT(INT2FIX(ruby_sourceline));
14256 }
14257 else if (id == keyword__ENCODING__) {
14258 return NEW_LIT(rb_enc_from_encoding(parser->enc));
14259 }
14260 else if (is_local_id(id)) {
14261 if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
14262 if (local_id(id)) return NEW_LVAR(id);
14263
14264 return NEW_VCALL(id);
14265 }
14266 else if (is_global_id(id)) {
14267 return NEW_GVAR(id);
14268 }
14269 else if (is_instance_id(id)) {
14270 return NEW_IVAR(id);
14271 }
14272 else if (is_const_id(id)) {
14273 return NEW_CONST(id);
14274 }
14275 else if (is_class_id(id)) {
14276 return NEW_CVAR(id);
14277 }
14278 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14279 return 0;
14280 }
14281 #endif
14282
14283 #ifdef RIPPER
14284 static VALUE
14285 assignable_gen(struct parser_params *parser, VALUE lhs)
14286 #else
14287 static NODE*
14288 assignable_gen(struct parser_params *parser, ID id, NODE *val)
14289 #endif
14290 {
14291 #ifdef RIPPER
14292 ID id = get_id(lhs);
14293 # define assignable_result(x) get_value(lhs)
14294 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
14295 #else
14296 # define assignable_result(x) x
14297 #endif
14298 if (!id) return assignable_result(0);
14299 if (id == keyword_self) {
14300 yyerror("Can't change the value of self");
14301 }
14302 else if (id == keyword_nil) {
14303 yyerror("Can't assign to nil");
14304 }
14305 else if (id == keyword_true) {
14306 yyerror("Can't assign to true");
14307 }
14308 else if (id == keyword_false) {
14309 yyerror("Can't assign to false");
14310 }
14311 else if (id == keyword__FILE__) {
14312 yyerror("Can't assign to __FILE__");
14313 }
14314 else if (id == keyword__LINE__) {
14315 yyerror("Can't assign to __LINE__");
14316 }
14317 else if (id == keyword__ENCODING__) {
14318 yyerror("Can't assign to __ENCODING__");
14319 }
14320 else if (is_local_id(id)) {
14321 if (dyna_in_block()) {
14322 if (dvar_curr(id)) {
14323 return assignable_result(NEW_DASGN_CURR(id, val));
14324 }
14325 else if (dvar_defined(id)) {
14326 return assignable_result(NEW_DASGN(id, val));
14327 }
14328 else if (local_id(id)) {
14329 return assignable_result(NEW_LASGN(id, val));
14330 }
14331 else {
14332 dyna_var(id);
14333 return assignable_result(NEW_DASGN_CURR(id, val));
14334 }
14335 }
14336 else {
14337 if (!local_id(id)) {
14338 local_var(id);
14339 }
14340 return assignable_result(NEW_LASGN(id, val));
14341 }
14342 }
14343 else if (is_global_id(id)) {
14344 return assignable_result(NEW_GASGN(id, val));
14345 }
14346 else if (is_instance_id(id)) {
14347 return assignable_result(NEW_IASGN(id, val));
14348 }
14349 else if (is_const_id(id)) {
14350 if (!in_def && !in_single)
14351 return assignable_result(NEW_CDECL(id, val, 0));
14352 yyerror("dynamic constant assignment");
14353 }
14354 else if (is_class_id(id)) {
14355 return assignable_result(NEW_CVASGN(id, val));
14356 }
14357 else {
14358 compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
14359 }
14360 return assignable_result(0);
14361 #undef assignable_result
14362 #undef parser_yyerror
14363 }
14364
14365 static ID
14366 shadowing_lvar_gen(struct parser_params *parser, ID name)
14367 {
14368 ID uscore;
14369
14370 CONST_ID(uscore, "_");
14371 if (uscore == name) return name;
14372 if (dyna_in_block()) {
14373 if (dvar_curr(name)) {
14374 yyerror("duplicated argument name");
14375 }
14376 else if (dvar_defined(name) || local_id(name)) {
14377 rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
14378 vtable_add(lvtbl->vars, name);
14379 }
14380 }
14381 else {
14382 if (local_id(name)) {
14383 yyerror("duplicated argument name");
14384 }
14385 }
14386 return name;
14387 }
14388
14389 static void
14390 new_bv_gen(struct parser_params *parser, ID name)
14391 {
14392 if (!name) return;
14393 if (!is_local_id(name)) {
14394 compile_error(PARSER_ARG "invalid local variable - %s",
14395 rb_id2name(name));
14396 return;
14397 }
14398 shadowing_lvar(name);
14399 dyna_var(name);
14400 }
14401
14402 #ifndef RIPPER
14403 static NODE *
14404 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
14405 {
14406 if (recv && nd_type(recv) == NODE_SELF)
14407 recv = (NODE *)1;
14408 return NEW_ATTRASGN(recv, tASET, idx);
14409 }
14410
14411 static void
14412 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14413 {
14414 if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
14415 compile_error(PARSER_ARG "both block arg and actual block given");
14416 }
14417 }
14418
14419 ID
14420 rb_id_attrset(ID id)
14421 {
14422 id &= ~ID_SCOPE_MASK;
14423 id |= ID_ATTRSET;
14424 return id;
14425 }
14426
14427 static NODE *
14428 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
14429 {
14430 if (recv && nd_type(recv) == NODE_SELF)
14431 recv = (NODE *)1;
14432 return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
14433 }
14434
14435 static void
14436 rb_backref_error_gen(struct parser_params *parser, NODE *node)
14437 {
14438 switch (nd_type(node)) {
14439 case NODE_NTH_REF:
14440 compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
14441 break;
14442 case NODE_BACK_REF:
14443 compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
14444 break;
14445 }
14446 }
14447
14448 static NODE *
14449 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14450 {
14451 if (!node2) return node1;
14452 switch (nd_type(node1)) {
14453 case NODE_BLOCK_PASS:
14454 if (node1->nd_head)
14455 node1->nd_head = arg_concat(node1->nd_head, node2);
14456 else
14457 node1->nd_head = NEW_LIST(node2);
14458 return node1;
14459 case NODE_ARGSPUSH:
14460 if (nd_type(node2) != NODE_ARRAY) break;
14461 node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
14462 nd_set_type(node1, NODE_ARGSCAT);
14463 return node1;
14464 case NODE_ARGSCAT:
14465 if (nd_type(node2) != NODE_ARRAY ||
14466 nd_type(node1->nd_body) != NODE_ARRAY) break;
14467 node1->nd_body = list_concat(node1->nd_body, node2);
14468 return node1;
14469 }
14470 return NEW_ARGSCAT(node1, node2);
14471 }
14472
14473 static NODE *
14474 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14475 {
14476 if (!node1) return NEW_LIST(node2);
14477 switch (nd_type(node1)) {
14478 case NODE_ARRAY:
14479 return list_append(node1, node2);
14480 case NODE_BLOCK_PASS:
14481 node1->nd_head = arg_append(node1->nd_head, node2);
14482 return node1;
14483 case NODE_ARGSPUSH:
14484 node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
14485 nd_set_type(node1, NODE_ARGSCAT);
14486 return node1;
14487 }
14488 return NEW_ARGSPUSH(node1, node2);
14489 }
14490
14491 static NODE *
14492 splat_array(NODE* node)
14493 {
14494 if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
14495 if (nd_type(node) == NODE_ARRAY) return node;
14496 return 0;
14497 }
14498
14499 static NODE *
14500 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
14501 {
14502 if (!lhs) return 0;
14503
14504 switch (nd_type(lhs)) {
14505 case NODE_GASGN:
14506 case NODE_IASGN:
14507 case NODE_IASGN2:
14508 case NODE_LASGN:
14509 case NODE_DASGN:
14510 case NODE_DASGN_CURR:
14511 case NODE_MASGN:
14512 case NODE_CDECL:
14513 case NODE_CVASGN:
14514 lhs->nd_value = rhs;
14515 break;
14516
14517 case NODE_ATTRASGN:
14518 case NODE_CALL:
14519 lhs->nd_args = arg_append(lhs->nd_args, rhs);
14520 break;
14521
14522 default:
14523
14524 break;
14525 }
14526
14527 return lhs;
14528 }
14529
14530 static int
14531 value_expr_gen(struct parser_params *parser, NODE *node)
14532 {
14533 int cond = 0;
14534
14535 if (!node) {
14536 rb_warning0("empty expression");
14537 }
14538 while (node) {
14539 switch (nd_type(node)) {
14540 case NODE_DEFN:
14541 case NODE_DEFS:
14542 parser_warning(node, "void value expression");
14543 return FALSE;
14544
14545 case NODE_RETURN:
14546 case NODE_BREAK:
14547 case NODE_NEXT:
14548 case NODE_REDO:
14549 case NODE_RETRY:
14550 if (!cond) yyerror("void value expression");
14551
14552 return FALSE;
14553
14554 case NODE_BLOCK:
14555 while (node->nd_next) {
14556 node = node->nd_next;
14557 }
14558 node = node->nd_head;
14559 break;
14560
14561 case NODE_BEGIN:
14562 node = node->nd_body;
14563 break;
14564
14565 case NODE_IF:
14566 if (!node->nd_body) {
14567 node = node->nd_else;
14568 break;
14569 }
14570 else if (!node->nd_else) {
14571 node = node->nd_body;
14572 break;
14573 }
14574 if (!value_expr(node->nd_body)) return FALSE;
14575 node = node->nd_else;
14576 break;
14577
14578 case NODE_AND:
14579 case NODE_OR:
14580 cond = 1;
14581 node = node->nd_2nd;
14582 break;
14583
14584 default:
14585 return TRUE;
14586 }
14587 }
14588
14589 return TRUE;
14590 }
14591
14592 static void
14593 void_expr_gen(struct parser_params *parser, NODE *node)
14594 {
14595 const char *useless = 0;
14596
14597 if (!RTEST(ruby_verbose)) return;
14598
14599 if (!node) return;
14600 switch (nd_type(node)) {
14601 case NODE_CALL:
14602 switch (node->nd_mid) {
14603 case '+':
14604 case '-':
14605 case '*':
14606 case '/':
14607 case '%':
14608 case tPOW:
14609 case tUPLUS:
14610 case tUMINUS:
14611 case '|':
14612 case '^':
14613 case '&':
14614 case tCMP:
14615 case '>':
14616 case tGEQ:
14617 case '<':
14618 case tLEQ:
14619 case tEQ:
14620 case tNEQ:
14621 useless = rb_id2name(node->nd_mid);
14622 break;
14623 }
14624 break;
14625
14626 case NODE_LVAR:
14627 case NODE_DVAR:
14628 case NODE_GVAR:
14629 case NODE_IVAR:
14630 case NODE_CVAR:
14631 case NODE_NTH_REF:
14632 case NODE_BACK_REF:
14633 useless = "a variable";
14634 break;
14635 case NODE_CONST:
14636 useless = "a constant";
14637 break;
14638 case NODE_LIT:
14639 case NODE_STR:
14640 case NODE_DSTR:
14641 case NODE_DREGX:
14642 case NODE_DREGX_ONCE:
14643 useless = "a literal";
14644 break;
14645 case NODE_COLON2:
14646 case NODE_COLON3:
14647 useless = "::";
14648 break;
14649 case NODE_DOT2:
14650 useless = "..";
14651 break;
14652 case NODE_DOT3:
14653 useless = "...";
14654 break;
14655 case NODE_SELF:
14656 useless = "self";
14657 break;
14658 case NODE_NIL:
14659 useless = "nil";
14660 break;
14661 case NODE_TRUE:
14662 useless = "true";
14663 break;
14664 case NODE_FALSE:
14665 useless = "false";
14666 break;
14667 case NODE_DEFINED:
14668 useless = "defined?";
14669 break;
14670 }
14671
14672 if (useless) {
14673 int line = ruby_sourceline;
14674
14675 ruby_sourceline = nd_line(node);
14676 rb_warnS("useless use of %s in void context", useless);
14677 ruby_sourceline = line;
14678 }
14679 }
14680
14681 static void
14682 void_stmts_gen(struct parser_params *parser, NODE *node)
14683 {
14684 if (!RTEST(ruby_verbose)) return;
14685 if (!node) return;
14686 if (nd_type(node) != NODE_BLOCK) return;
14687
14688 for (;;) {
14689 if (!node->nd_next) return;
14690 void_expr0(node->nd_head);
14691 node = node->nd_next;
14692 }
14693 }
14694
14695 static NODE *
14696 remove_begin(NODE *node)
14697 {
14698 NODE **n = &node, *n1 = node;
14699 while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
14700 *n = n1 = n1->nd_body;
14701 }
14702 return node;
14703 }
14704
14705 static void
14706 reduce_nodes_gen(struct parser_params *parser, NODE **body)
14707 {
14708 NODE *node = *body;
14709
14710 if (!node) {
14711 *body = NEW_NIL();
14712 return;
14713 }
14714 #define subnodes(n1, n2) \
14715 ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
14716 (!node->n2) ? (body = &node->n1, 1) : \
14717 (reduce_nodes(&node->n1), body = &node->n2, 1))
14718
14719 while (node) {
14720 int newline = (int)(node->flags & NODE_FL_NEWLINE);
14721 switch (nd_type(node)) {
14722 end:
14723 case NODE_NIL:
14724 *body = 0;
14725 return;
14726 case NODE_RETURN:
14727 *body = node = node->nd_stts;
14728 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14729 continue;
14730 case NODE_BEGIN:
14731 *body = node = node->nd_body;
14732 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14733 continue;
14734 case NODE_BLOCK:
14735 body = &node->nd_end->nd_head;
14736 break;
14737 case NODE_IF:
14738 if (subnodes(nd_body, nd_else)) break;
14739 return;
14740 case NODE_CASE:
14741 body = &node->nd_body;
14742 break;
14743 case NODE_WHEN:
14744 if (!subnodes(nd_body, nd_next)) goto end;
14745 break;
14746 case NODE_ENSURE:
14747 if (!subnodes(nd_head, nd_resq)) goto end;
14748 break;
14749 case NODE_RESCUE:
14750 if (!subnodes(nd_head, nd_resq)) goto end;
14751 break;
14752 default:
14753 return;
14754 }
14755 node = *body;
14756 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14757 }
14758
14759 #undef subnodes
14760 }
14761
14762 static int
14763 assign_in_cond(struct parser_params *parser, NODE *node)
14764 {
14765 switch (nd_type(node)) {
14766 case NODE_MASGN:
14767 yyerror("multiple assignment in conditional");
14768 return 1;
14769
14770 case NODE_LASGN:
14771 case NODE_DASGN:
14772 case NODE_DASGN_CURR:
14773 case NODE_GASGN:
14774 case NODE_IASGN:
14775 break;
14776
14777 default:
14778 return 0;
14779 }
14780
14781 if (!node->nd_value) return 1;
14782 switch (nd_type(node->nd_value)) {
14783 case NODE_LIT:
14784 case NODE_STR:
14785 case NODE_NIL:
14786 case NODE_TRUE:
14787 case NODE_FALSE:
14788
14789 parser_warn(node->nd_value, "found = in conditional, should be ==");
14790 return 1;
14791
14792 case NODE_DSTR:
14793 case NODE_XSTR:
14794 case NODE_DXSTR:
14795 case NODE_EVSTR:
14796 case NODE_DREGX:
14797 default:
14798 break;
14799 }
14800 return 1;
14801 }
14802
14803 static void
14804 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14805 {
14806 if (!e_option_supplied(parser)) parser_warn(node, str);
14807 }
14808
14809 static void
14810 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14811 {
14812 if (!e_option_supplied(parser)) parser_warning(node, str);
14813 }
14814
14815 static void
14816 fixup_nodes(NODE **rootnode)
14817 {
14818 NODE *node, *next, *head;
14819
14820 for (node = *rootnode; node; node = next) {
14821 enum node_type type;
14822 VALUE val;
14823
14824 next = node->nd_next;
14825 head = node->nd_head;
14826 rb_gc_force_recycle((VALUE)node);
14827 *rootnode = next;
14828 switch (type = nd_type(head)) {
14829 case NODE_DOT2:
14830 case NODE_DOT3:
14831 val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
14832 type == NODE_DOT3);
14833 rb_gc_force_recycle((VALUE)head->nd_beg);
14834 rb_gc_force_recycle((VALUE)head->nd_end);
14835 nd_set_type(head, NODE_LIT);
14836 head->nd_lit = val;
14837 break;
14838 default:
14839 break;
14840 }
14841 }
14842 }
14843
14844 static NODE *cond0(struct parser_params*,NODE*);
14845
14846 static NODE*
14847 range_op(struct parser_params *parser, NODE *node)
14848 {
14849 enum node_type type;
14850
14851 if (node == 0) return 0;
14852
14853 type = nd_type(node);
14854 value_expr(node);
14855 if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
14856 warn_unless_e_option(parser, node, "integer literal in conditional range");
14857 return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
14858 }
14859 return cond0(parser, node);
14860 }
14861
14862 static int
14863 literal_node(NODE *node)
14864 {
14865 if (!node) return 1;
14866 switch (nd_type(node)) {
14867 case NODE_LIT:
14868 case NODE_STR:
14869 case NODE_DSTR:
14870 case NODE_EVSTR:
14871 case NODE_DREGX:
14872 case NODE_DREGX_ONCE:
14873 case NODE_DSYM:
14874 return 2;
14875 case NODE_TRUE:
14876 case NODE_FALSE:
14877 case NODE_NIL:
14878 return 1;
14879 }
14880 return 0;
14881 }
14882
14883 static NODE*
14884 cond0(struct parser_params *parser, NODE *node)
14885 {
14886 if (node == 0) return 0;
14887 assign_in_cond(parser, node);
14888
14889 switch (nd_type(node)) {
14890 case NODE_DSTR:
14891 case NODE_EVSTR:
14892 case NODE_STR:
14893 rb_warn0("string literal in condition");
14894 break;
14895
14896 case NODE_DREGX:
14897 case NODE_DREGX_ONCE:
14898 warning_unless_e_option(parser, node, "regex literal in condition");
14899 return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
14900
14901 case NODE_AND:
14902 case NODE_OR:
14903 node->nd_1st = cond0(parser, node->nd_1st);
14904 node->nd_2nd = cond0(parser, node->nd_2nd);
14905 break;
14906
14907 case NODE_DOT2:
14908 case NODE_DOT3:
14909 node->nd_beg = range_op(parser, node->nd_beg);
14910 node->nd_end = range_op(parser, node->nd_end);
14911 if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
14912 else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
14913 if (!e_option_supplied(parser)) {
14914 int b = literal_node(node->nd_beg);
14915 int e = literal_node(node->nd_end);
14916 if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
14917 parser_warn(node, "range literal in condition");
14918 }
14919 }
14920 break;
14921
14922 case NODE_DSYM:
14923 parser_warning(node, "literal in condition");
14924 break;
14925
14926 case NODE_LIT:
14927 if (TYPE(node->nd_lit) == T_REGEXP) {
14928 warn_unless_e_option(parser, node, "regex literal in condition");
14929 nd_set_type(node, NODE_MATCH);
14930 }
14931 else {
14932 parser_warning(node, "literal in condition");
14933 }
14934 default:
14935 break;
14936 }
14937 return node;
14938 }
14939
14940 static NODE*
14941 cond_gen(struct parser_params *parser, NODE *node)
14942 {
14943 if (node == 0) return 0;
14944 return cond0(parser, node);
14945 }
14946
14947 static NODE*
14948 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
14949 {
14950 value_expr(left);
14951 if (left && (enum node_type)nd_type(left) == type) {
14952 NODE *node = left, *second;
14953 while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
14954 node = second;
14955 }
14956 node->nd_2nd = NEW_NODE(type, second, right, 0);
14957 return left;
14958 }
14959 return NEW_NODE(type, left, right, 0);
14960 }
14961
14962 static void
14963 no_blockarg(struct parser_params *parser, NODE *node)
14964 {
14965 if (node && nd_type(node) == NODE_BLOCK_PASS) {
14966 compile_error(PARSER_ARG "block argument should not be given");
14967 }
14968 }
14969
14970 static NODE *
14971 ret_args_gen(struct parser_params *parser, NODE *node)
14972 {
14973 if (node) {
14974 no_blockarg(parser, node);
14975 if (nd_type(node) == NODE_ARRAY) {
14976 if (node->nd_next == 0) {
14977 node = node->nd_head;
14978 }
14979 else {
14980 nd_set_type(node, NODE_VALUES);
14981 }
14982 }
14983 }
14984 return node;
14985 }
14986
14987 static NODE *
14988 new_yield_gen(struct parser_params *parser, NODE *node)
14989 {
14990 long state = Qtrue;
14991
14992 if (node) {
14993 no_blockarg(parser, node);
14994 if (node && nd_type(node) == NODE_SPLAT) {
14995 state = Qtrue;
14996 }
14997 }
14998 else {
14999 state = Qfalse;
15000 }
15001 return NEW_YIELD(node, state);
15002 }
15003
15004 static NODE*
15005 negate_lit(NODE *node)
15006 {
15007 switch (TYPE(node->nd_lit)) {
15008 case T_FIXNUM:
15009 node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
15010 break;
15011 case T_BIGNUM:
15012 node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
15013 break;
15014 case T_FLOAT:
15015 RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15016 break;
15017 default:
15018 break;
15019 }
15020 return node;
15021 }
15022
15023 static NODE *
15024 arg_blk_pass(NODE *node1, NODE *node2)
15025 {
15026 if (node2) {
15027 node2->nd_head = node1;
15028 return node2;
15029 }
15030 return node1;
15031 }
15032
15033 static NODE*
15034 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b)
15035 {
15036 int saved_line = ruby_sourceline;
15037 NODE *node;
15038 NODE *i1, *i2 = 0;
15039
15040 node = NEW_ARGS(m ? m->nd_plen : 0, o);
15041 i1 = m ? m->nd_next : 0;
15042 node->nd_next = NEW_ARGS_AUX(r, b);
15043
15044 if (p) {
15045 i2 = p->nd_next;
15046 node->nd_next->nd_next = NEW_ARGS_AUX(p->nd_pid, p->nd_plen);
15047 }
15048 else if (i1) {
15049 node->nd_next->nd_next = NEW_ARGS_AUX(0, 0);
15050 }
15051 if (i1 || i2) {
15052 node->nd_next->nd_next->nd_next = NEW_NODE(NODE_AND, i1, i2, 0);
15053 }
15054 ruby_sourceline = saved_line;
15055 return node;
15056 }
15057 #endif
15058
15059 static void
15060 local_push_gen(struct parser_params *parser, int inherit_dvars)
15061 {
15062 struct local_vars *local;
15063
15064 local = ALLOC(struct local_vars);
15065 local->prev = lvtbl;
15066 local->args = vtable_alloc(0);
15067 local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
15068 lvtbl = local;
15069 }
15070
15071 static void
15072 local_pop_gen(struct parser_params *parser)
15073 {
15074 struct local_vars *local = lvtbl->prev;
15075 vtable_free(lvtbl->args);
15076 vtable_free(lvtbl->vars);
15077 xfree(lvtbl);
15078 lvtbl = local;
15079 }
15080
15081 #ifndef RIPPER
15082 static ID*
15083 vtable_tblcpy(ID *buf, const struct vtable *src)
15084 {
15085 int i, cnt = vtable_size(src);
15086
15087 if (cnt > 0) {
15088 buf[0] = cnt;
15089 for (i = 0; i < cnt; i++) {
15090 buf[i] = src->tbl[i];
15091 }
15092 return buf;
15093 }
15094 return 0;
15095 }
15096
15097 static ID*
15098 local_tbl_gen(struct parser_params *parser)
15099 {
15100 int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars);
15101 ID *buf;
15102
15103 if (cnt <= 0) return 0;
15104 buf = ALLOC_N(ID, cnt + 1);
15105 vtable_tblcpy(buf+1, lvtbl->args);
15106 vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars);
15107 buf[0] = cnt;
15108 return buf;
15109 }
15110 #endif
15111
15112 static int
15113 arg_var_gen(struct parser_params *parser, ID id)
15114 {
15115 vtable_add(lvtbl->args, id);
15116 return vtable_size(lvtbl->args) - 1;
15117 }
15118
15119 static int
15120 local_var_gen(struct parser_params *parser, ID id)
15121 {
15122 vtable_add(lvtbl->vars, id);
15123 return vtable_size(lvtbl->vars) - 1;
15124 }
15125
15126 static int
15127 local_id_gen(struct parser_params *parser, ID id)
15128 {
15129 struct vtable *vars, *args;
15130
15131 vars = lvtbl->vars;
15132 args = lvtbl->args;
15133
15134 while (vars && POINTER_P(vars->prev)) {
15135 vars = vars->prev;
15136 args = args->prev;
15137 }
15138
15139 if (vars && vars->prev == DVARS_INHERIT) {
15140 return rb_local_defined(id);
15141 }
15142 else {
15143 return (vtable_included(args, id) ||
15144 vtable_included(vars, id));
15145 }
15146 }
15147
15148 static const struct vtable *
15149 dyna_push_gen(struct parser_params *parser)
15150 {
15151 lvtbl->args = vtable_alloc(lvtbl->args);
15152 lvtbl->vars = vtable_alloc(lvtbl->vars);
15153 return lvtbl->args;
15154 }
15155
15156 static void
15157 dyna_pop_1(struct parser_params *parser)
15158 {
15159 struct vtable *tmp;
15160
15161 tmp = lvtbl->args;
15162 lvtbl->args = lvtbl->args->prev;
15163 vtable_free(tmp);
15164 tmp = lvtbl->vars;
15165 lvtbl->vars = lvtbl->vars->prev;
15166 vtable_free(tmp);
15167 }
15168
15169 static void
15170 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
15171 {
15172 while (lvtbl->args != lvargs) {
15173 dyna_pop_1(parser);
15174 if (!lvtbl->args) {
15175 struct local_vars *local = lvtbl->prev;
15176 xfree(lvtbl);
15177 lvtbl = local;
15178 }
15179 }
15180 dyna_pop_1(parser);
15181 }
15182
15183 static int
15184 dyna_in_block_gen(struct parser_params *parser)
15185 {
15186 return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
15187 }
15188
15189 static int
15190 dvar_defined_gen(struct parser_params *parser, ID id)
15191 {
15192 struct vtable *vars, *args;
15193
15194 args = lvtbl->args;
15195 vars = lvtbl->vars;
15196
15197 while (POINTER_P(vars)) {
15198 if (vtable_included(args, id)) {
15199 return 1;
15200 }
15201 if (vtable_included(vars, id)) {
15202 return 1;
15203 }
15204 args = args->prev;
15205 vars = vars->prev;
15206 }
15207
15208 if (vars == DVARS_INHERIT) {
15209 return rb_dvar_defined(id);
15210 }
15211
15212 return 0;
15213 }
15214
15215 static int
15216 dvar_curr_gen(struct parser_params *parser, ID id)
15217 {
15218 return (vtable_included(lvtbl->args, id) ||
15219 vtable_included(lvtbl->vars, id));
15220 }
15221
15222 #ifndef RIPPER
15223 VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline);
15224 VALUE rb_reg_check_preprocess(VALUE);
15225
15226 static void
15227 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
15228 {
15229 int c = RE_OPTION_ENCODING_IDX(options);
15230
15231 if (c) {
15232 int opt, idx;
15233 rb_char_to_option_kcode(c, &opt, &idx);
15234 if (idx != ENCODING_GET(str) &&
15235 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15236 goto error;
15237 }
15238 ENCODING_SET(str, idx);
15239 }
15240 else if (RE_OPTION_ENCODING_NONE(options)) {
15241 if (!ENCODING_IS_ASCII8BIT(str) &&
15242 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15243 c = 'n';
15244 goto error;
15245 }
15246 rb_enc_associate(str, rb_ascii8bit_encoding());
15247 }
15248 else if (parser->enc == rb_usascii_encoding()) {
15249 if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15250
15251 rb_enc_associate(str, rb_usascii_encoding());
15252 }
15253 else {
15254 rb_enc_associate(str, rb_ascii8bit_encoding());
15255 }
15256 }
15257 return;
15258
15259 error:
15260 compile_error(PARSER_ARG
15261 "regexp encoding option '%c' differs from source encoding '%s'",
15262 c, rb_enc_name(rb_enc_get(str)));
15263 }
15264
15265 static int
15266 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
15267 {
15268 VALUE err;
15269 reg_fragment_setenc(str, options);
15270 err = rb_reg_check_preprocess(str);
15271 if (err != Qnil) {
15272 err = rb_obj_as_string(err);
15273 compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
15274 RB_GC_GUARD(err);
15275 return 0;
15276 }
15277 return 1;
15278 }
15279
15280 typedef struct {
15281 struct parser_params* parser;
15282 rb_encoding *enc;
15283 NODE *succ_block;
15284 NODE *fail_block;
15285 int num;
15286 } reg_named_capture_assign_t;
15287
15288 static int
15289 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
15290 int back_num, int *back_refs, OnigRegex regex, void *arg0)
15291 {
15292 reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
15293 struct parser_params* parser = arg->parser;
15294 rb_encoding *enc = arg->enc;
15295 long len = name_end - name;
15296 const char *s = (const char *)name;
15297 ID var;
15298
15299 arg->num++;
15300
15301 if (arg->succ_block == 0) {
15302 arg->succ_block = NEW_BEGIN(0);
15303 arg->fail_block = NEW_BEGIN(0);
15304 }
15305
15306 if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
15307 (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
15308 !rb_enc_symname2_p(s, len, enc)) {
15309 return ST_CONTINUE;
15310 }
15311 var = rb_intern3(s, len, enc);
15312 if (dvar_defined(var) || local_id(var)) {
15313 rb_warningS("named capture conflicts a local variable - %s",
15314 rb_id2name(var));
15315 }
15316 arg->succ_block = block_append(arg->succ_block,
15317 newline_node(node_assign(assignable(var,0),
15318 NEW_CALL(
15319 gettable(rb_intern("$~")),
15320 idAREF,
15321 NEW_LIST(NEW_LIT(ID2SYM(var))))
15322 )));
15323 arg->fail_block = block_append(arg->fail_block,
15324 newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil))));
15325 return ST_CONTINUE;
15326 }
15327
15328 static NODE *
15329 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match)
15330 {
15331 reg_named_capture_assign_t arg;
15332
15333 arg.parser = parser;
15334 arg.enc = rb_enc_get(regexp);
15335 arg.succ_block = 0;
15336 arg.fail_block = 0;
15337 arg.num = 0;
15338 onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
15339
15340 if (arg.num == 0)
15341 return match;
15342
15343 return
15344 block_append(
15345 newline_node(match),
15346 NEW_IF(gettable(rb_intern("$~")),
15347 block_append(
15348 newline_node(arg.succ_block),
15349 newline_node(
15350 NEW_CALL(
15351 gettable(rb_intern("$~")),
15352 rb_intern("begin"),
15353 NEW_LIST(NEW_LIT(INT2FIX(0)))))),
15354 block_append(
15355 newline_node(arg.fail_block),
15356 newline_node(
15357 NEW_LIT(Qnil)))));
15358 }
15359
15360 static VALUE
15361 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
15362 {
15363 VALUE re;
15364 VALUE err;
15365
15366 reg_fragment_setenc(str, options);
15367 err = rb_errinfo();
15368 re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline);
15369 if (NIL_P(re)) {
15370 ID mesg = rb_intern("mesg");
15371 VALUE m = rb_attr_get(rb_errinfo(), mesg);
15372 rb_set_errinfo(err);
15373 if (!NIL_P(err)) {
15374 rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
15375 }
15376 else {
15377 compile_error(PARSER_ARG "%s", RSTRING_PTR(m));
15378 }
15379 return Qnil;
15380 }
15381 return re;
15382 }
15383
15384 void
15385 rb_gc_mark_parser(void)
15386 {
15387 }
15388
15389 NODE*
15390 rb_parser_append_print(VALUE vparser, NODE *node)
15391 {
15392 NODE *prelude = 0;
15393 NODE *scope = node;
15394 struct parser_params *parser;
15395
15396 if (!node) return node;
15397
15398 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15399
15400 node = node->nd_body;
15401
15402 if (nd_type(node) == NODE_PRELUDE) {
15403 prelude = node;
15404 node = node->nd_body;
15405 }
15406
15407 node = block_append(node,
15408 NEW_FCALL(rb_intern("print"),
15409 NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
15410 if (prelude) {
15411 prelude->nd_body = node;
15412 scope->nd_body = prelude;
15413 }
15414 else {
15415 scope->nd_body = node;
15416 }
15417
15418 return scope;
15419 }
15420
15421 NODE *
15422 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
15423 {
15424 NODE *prelude = 0;
15425 NODE *scope = node;
15426 struct parser_params *parser;
15427
15428 if (!node) return node;
15429
15430 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15431
15432 node = node->nd_body;
15433
15434 if (nd_type(node) == NODE_PRELUDE) {
15435 prelude = node;
15436 node = node->nd_body;
15437 }
15438 if (split) {
15439 node = block_append(NEW_GASGN(rb_intern("$F"),
15440 NEW_CALL(NEW_GVAR(rb_intern("$_")),
15441 rb_intern("split"), 0)),
15442 node);
15443 }
15444 if (chop) {
15445 node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
15446 rb_intern("chop!"), 0), node);
15447 }
15448
15449 node = NEW_OPT_N(node);
15450
15451 if (prelude) {
15452 prelude->nd_body = node;
15453 scope->nd_body = prelude;
15454 }
15455 else {
15456 scope->nd_body = node;
15457 }
15458
15459 return scope;
15460 }
15461
15462 static const struct {
15463 ID token;
15464 const char *name;
15465 } op_tbl[] = {
15466 {tDOT2, ".."},
15467 {tDOT3, "..."},
15468 {'+', "+(binary)"},
15469 {'-', "-(binary)"},
15470 {tPOW, "**"},
15471 {tUPLUS, "+@"},
15472 {tUMINUS, "-@"},
15473 {tCMP, "<=>"},
15474 {tGEQ, ">="},
15475 {tLEQ, "<="},
15476 {tEQ, "=="},
15477 {tEQQ, "==="},
15478 {tNEQ, "!="},
15479 {tMATCH, "=~"},
15480 {tNMATCH, "!~"},
15481 {tAREF, "[]"},
15482 {tASET, "[]="},
15483 {tLSHFT, "<<"},
15484 {tRSHFT, ">>"},
15485 {tCOLON2, "::"},
15486 };
15487
15488 #define op_tbl_count numberof(op_tbl)
15489
15490 #ifndef ENABLE_SELECTOR_NAMESPACE
15491 #define ENABLE_SELECTOR_NAMESPACE 0
15492 #endif
15493
15494 static struct symbols {
15495 ID last_id;
15496 st_table *sym_id;
15497 st_table *id_str;
15498 #if ENABLE_SELECTOR_NAMESPACE
15499 st_table *ivar2_id;
15500 st_table *id_ivar2;
15501 #endif
15502 VALUE op_sym[tLAST_TOKEN];
15503 } global_symbols = {tLAST_ID};
15504
15505 static const struct st_hash_type symhash = {
15506 rb_str_hash_cmp,
15507 rb_str_hash,
15508 };
15509
15510 #if ENABLE_SELECTOR_NAMESPACE
15511 struct ivar2_key {
15512 ID id;
15513 VALUE klass;
15514 };
15515
15516 static int
15517 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
15518 {
15519 if (key1->id == key2->id && key1->klass == key2->klass) {
15520 return 0;
15521 }
15522 return 1;
15523 }
15524
15525 static int
15526 ivar2_hash(struct ivar2_key *key)
15527 {
15528 return (key->id << 8) ^ (key->klass >> 2);
15529 }
15530
15531 static const struct st_hash_type ivar2_hash_type = {
15532 ivar2_cmp,
15533 ivar2_hash,
15534 };
15535 #endif
15536
15537 void
15538 Init_sym(void)
15539 {
15540 global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
15541 global_symbols.id_str = st_init_numtable_with_size(1000);
15542 #if ENABLE_SELECTOR_NAMESPACE
15543 global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
15544 global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
15545 #endif
15546
15547 Init_id();
15548 }
15549
15550 void
15551 rb_gc_mark_symbols(void)
15552 {
15553 rb_mark_tbl(global_symbols.id_str);
15554 rb_gc_mark_locations(global_symbols.op_sym,
15555 global_symbols.op_sym + tLAST_TOKEN);
15556 }
15557 #endif
15558
15559 static ID
15560 internal_id_gen(struct parser_params *parser)
15561 {
15562 ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
15563 id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
15564 return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
15565 }
15566
15567 #ifndef RIPPER
15568 static int
15569 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
15570 {
15571 int mb = 0;
15572
15573 if (m >= e) return 0;
15574 switch (*m) {
15575 case '~': case '*': case '$': case '?': case '!': case '@':
15576 case '/': case '\\': case ';': case ',': case '.': case '=':
15577 case ':': case '<': case '>': case '\"':
15578 case '&': case '`': case '\'': case '+':
15579 case '0':
15580 ++m;
15581 break;
15582 case '-':
15583 ++m;
15584 if (m < e && is_identchar(m, e, enc)) {
15585 if (!ISASCII(*m)) mb = 1;
15586 m += rb_enc_mbclen(m, e, enc);
15587 }
15588 break;
15589 default:
15590 if (!rb_enc_isdigit(*m, enc)) return 0;
15591 do {
15592 if (!ISASCII(*m)) mb = 1;
15593 ++m;
15594 } while (m < e && rb_enc_isdigit(*m, enc));
15595 }
15596 return m == e ? mb + 1 : 0;
15597 }
15598
15599 int
15600 rb_symname_p(const char *name)
15601 {
15602 return rb_enc_symname_p(name, rb_ascii8bit_encoding());
15603 }
15604
15605 int
15606 rb_enc_symname_p(const char *name, rb_encoding *enc)
15607 {
15608 return rb_enc_symname2_p(name, strlen(name), enc);
15609 }
15610
15611 int
15612 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
15613 {
15614 const char *m = name;
15615 const char *e = m + len;
15616 int localid = FALSE;
15617
15618 if (!m) return FALSE;
15619 switch (*m) {
15620 case '\0':
15621 return FALSE;
15622
15623 case '$':
15624 if (is_special_global_name(++m, e, enc)) return TRUE;
15625 goto id;
15626
15627 case '@':
15628 if (*++m == '@') ++m;
15629 goto id;
15630
15631 case '<':
15632 switch (*++m) {
15633 case '<': ++m; break;
15634 case '=': if (*++m == '>') ++m; break;
15635 default: break;
15636 }
15637 break;
15638
15639 case '>':
15640 switch (*++m) {
15641 case '>': case '=': ++m; break;
15642 }
15643 break;
15644
15645 case '=':
15646 switch (*++m) {
15647 case '~': ++m; break;
15648 case '=': if (*++m == '=') ++m; break;
15649 default: return FALSE;
15650 }
15651 break;
15652
15653 case '*':
15654 if (*++m == '*') ++m;
15655 break;
15656
15657 case '+': case '-':
15658 if (*++m == '@') ++m;
15659 break;
15660
15661 case '|': case '^': case '&': case '/': case '%': case '~': case '`':
15662 ++m;
15663 break;
15664
15665 case '[':
15666 if (*++m != ']') return FALSE;
15667 if (*++m == '=') ++m;
15668 break;
15669
15670 case '!':
15671 switch (*++m) {
15672 case '\0': return TRUE;
15673 case '=': case '~': ++m; break;
15674 default: return FALSE;
15675 }
15676 break;
15677
15678 default:
15679 localid = !rb_enc_isupper(*m, enc);
15680 id:
15681 if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
15682 return FALSE;
15683 while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
15684 if (localid) {
15685 switch (*m) {
15686 case '!': case '?': case '=': ++m;
15687 }
15688 }
15689 break;
15690 }
15691 return m == e;
15692 }
15693
15694 static ID
15695 register_symid(ID id, const char *name, long len, rb_encoding *enc)
15696 {
15697 VALUE str = rb_enc_str_new(name, len, enc);
15698 OBJ_FREEZE(str);
15699 st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
15700 st_add_direct(global_symbols.id_str, id, (st_data_t)str);
15701 return id;
15702 }
15703
15704 ID
15705 rb_intern3(const char *name, long len, rb_encoding *enc)
15706 {
15707 const char *m = name;
15708 const char *e = m + len;
15709 unsigned char c;
15710 VALUE str;
15711 ID id;
15712 long last;
15713 int mb;
15714 st_data_t data;
15715 struct RString fake_str;
15716 fake_str.basic.flags = T_STRING|RSTRING_NOEMBED|FL_FREEZE;
15717 fake_str.basic.klass = rb_cString;
15718 fake_str.as.heap.len = len;
15719 fake_str.as.heap.ptr = (char *)name;
15720 fake_str.as.heap.aux.capa = len;
15721 str = (VALUE)&fake_str;
15722 rb_enc_associate(str, enc);
15723
15724 if (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) {
15725 rb_raise(rb_eEncodingError, "invalid encoding symbol");
15726 }
15727
15728 if (st_lookup(global_symbols.sym_id, str, &data))
15729 return (ID)data;
15730
15731 if (rb_cString && !rb_enc_asciicompat(enc)) {
15732 id = ID_JUNK;
15733 goto new_id;
15734 }
15735 last = len-1;
15736 id = 0;
15737 switch (*m) {
15738 case '$':
15739 id |= ID_GLOBAL;
15740 if ((mb = is_special_global_name(++m, e, enc)) != 0) {
15741 if (!--mb) enc = rb_ascii8bit_encoding();
15742 goto new_id;
15743 }
15744 break;
15745 case '@':
15746 if (m[1] == '@') {
15747 m++;
15748 id |= ID_CLASS;
15749 }
15750 else {
15751 id |= ID_INSTANCE;
15752 }
15753 m++;
15754 break;
15755 default:
15756 c = m[0];
15757 if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
15758
15759 int i;
15760
15761 if (len == 1) {
15762 id = c;
15763 goto id_register;
15764 }
15765 for (i = 0; i < op_tbl_count; i++) {
15766 if (*op_tbl[i].name == *m &&
15767 strcmp(op_tbl[i].name, m) == 0) {
15768 id = op_tbl[i].token;
15769 goto id_register;
15770 }
15771 }
15772 }
15773
15774 if (m[last] == '=') {
15775
15776 id = rb_intern3(name, last, enc);
15777 if (id > tLAST_TOKEN && !is_attrset_id(id)) {
15778 enc = rb_enc_get(rb_id2str(id));
15779 id = rb_id_attrset(id);
15780 goto id_register;
15781 }
15782 id = ID_ATTRSET;
15783 }
15784 else if (rb_enc_isupper(m[0], enc)) {
15785 id = ID_CONST;
15786 }
15787 else {
15788 id = ID_LOCAL;
15789 }
15790 break;
15791 }
15792 mb = 0;
15793 if (!rb_enc_isdigit(*m, enc)) {
15794 while (m <= name + last && is_identchar(m, e, enc)) {
15795 if (ISASCII(*m)) {
15796 m++;
15797 }
15798 else {
15799 mb = 1;
15800 m += rb_enc_mbclen(m, e, enc);
15801 }
15802 }
15803 }
15804 if (m - name < len) id = ID_JUNK;
15805 if (enc != rb_usascii_encoding()) {
15806
15807
15808
15809
15810 if (!mb) {
15811 for (; m <= name + len; ++m) {
15812 if (!ISASCII(*m)) goto mbstr;
15813 }
15814 enc = rb_usascii_encoding();
15815 }
15816 mbstr:;
15817 }
15818 new_id:
15819 if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) {
15820 if (len > 20) {
15821 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
15822 name);
15823 }
15824 else {
15825 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
15826 (int)len, name);
15827 }
15828 }
15829 id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
15830 id_register:
15831 return register_symid(id, name, len, enc);
15832 }
15833
15834 ID
15835 rb_intern2(const char *name, long len)
15836 {
15837 return rb_intern3(name, len, rb_usascii_encoding());
15838 }
15839
15840 #undef rb_intern
15841 ID
15842 rb_intern(const char *name)
15843 {
15844 return rb_intern2(name, strlen(name));
15845 }
15846
15847 ID
15848 rb_intern_str(VALUE str)
15849 {
15850 rb_encoding *enc;
15851 ID id;
15852
15853 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
15854 enc = rb_usascii_encoding();
15855 }
15856 else {
15857 enc = rb_enc_get(str);
15858 }
15859 id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc);
15860 RB_GC_GUARD(str);
15861 return id;
15862 }
15863
15864 VALUE
15865 rb_id2str(ID id)
15866 {
15867 st_data_t data;
15868
15869 if (id < tLAST_TOKEN) {
15870 int i = 0;
15871
15872 if (id < INT_MAX && rb_ispunct((int)id)) {
15873 VALUE str = global_symbols.op_sym[i = (int)id];
15874 if (!str) {
15875 char name[2];
15876 name[0] = (char)id;
15877 name[1] = 0;
15878 str = rb_usascii_str_new(name, 1);
15879 OBJ_FREEZE(str);
15880 global_symbols.op_sym[i] = str;
15881 }
15882 return str;
15883 }
15884 for (i = 0; i < op_tbl_count; i++) {
15885 if (op_tbl[i].token == id) {
15886 VALUE str = global_symbols.op_sym[i];
15887 if (!str) {
15888 str = rb_usascii_str_new2(op_tbl[i].name);
15889 OBJ_FREEZE(str);
15890 global_symbols.op_sym[i] = str;
15891 }
15892 return str;
15893 }
15894 }
15895 }
15896
15897 if (st_lookup(global_symbols.id_str, id, &data)) {
15898 VALUE str = (VALUE)data;
15899 if (RBASIC(str)->klass == 0)
15900 RBASIC(str)->klass = rb_cString;
15901 return str;
15902 }
15903
15904 if (is_attrset_id(id)) {
15905 ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL;
15906 VALUE str;
15907
15908 while (!(str = rb_id2str(id2))) {
15909 if (!is_local_id(id2)) return 0;
15910 id2 = (id & ~ID_SCOPE_MASK) | ID_CONST;
15911 }
15912 str = rb_str_dup(str);
15913 rb_str_cat(str, "=", 1);
15914 rb_intern_str(str);
15915 if (st_lookup(global_symbols.id_str, id, &data)) {
15916 VALUE str = (VALUE)data;
15917 if (RBASIC(str)->klass == 0)
15918 RBASIC(str)->klass = rb_cString;
15919 return str;
15920 }
15921 }
15922 return 0;
15923 }
15924
15925 const char *
15926 rb_id2name(ID id)
15927 {
15928 VALUE str = rb_id2str(id);
15929
15930 if (!str) return 0;
15931 return RSTRING_PTR(str);
15932 }
15933
15934 static int
15935 symbols_i(VALUE sym, ID value, VALUE ary)
15936 {
15937 rb_ary_push(ary, ID2SYM(value));
15938 return ST_CONTINUE;
15939 }
15940
15941
15942
15943
15944
15945
15946
15947
15948
15949
15950
15951
15952
15953
15954
15955
15956
15957 VALUE
15958 rb_sym_all_symbols(void)
15959 {
15960 VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries);
15961
15962 st_foreach(global_symbols.sym_id, symbols_i, ary);
15963 return ary;
15964 }
15965
15966 int
15967 rb_is_const_id(ID id)
15968 {
15969 return is_const_id(id);
15970 }
15971
15972 int
15973 rb_is_class_id(ID id)
15974 {
15975 return is_class_id(id);
15976 }
15977
15978 int
15979 rb_is_instance_id(ID id)
15980 {
15981 return is_instance_id(id);
15982 }
15983
15984 int
15985 rb_is_local_id(ID id)
15986 {
15987 return is_local_id(id);
15988 }
15989
15990 int
15991 rb_is_junk_id(ID id)
15992 {
15993 return is_junk_id(id);
15994 }
15995
15996 #endif
15997
15998 static void
15999 parser_initialize(struct parser_params *parser)
16000 {
16001 parser->eofp = Qfalse;
16002
16003 parser->parser_lex_strterm = 0;
16004 parser->parser_cond_stack = 0;
16005 parser->parser_cmdarg_stack = 0;
16006 parser->parser_class_nest = 0;
16007 parser->parser_paren_nest = 0;
16008 parser->parser_lpar_beg = 0;
16009 parser->parser_in_single = 0;
16010 parser->parser_in_def = 0;
16011 parser->parser_in_defined = 0;
16012 parser->parser_compile_for_eval = 0;
16013 parser->parser_cur_mid = 0;
16014 parser->parser_tokenbuf = NULL;
16015 parser->parser_tokidx = 0;
16016 parser->parser_toksiz = 0;
16017 parser->parser_heredoc_end = 0;
16018 parser->parser_command_start = TRUE;
16019 parser->parser_deferred_nodes = 0;
16020 parser->parser_lex_pbeg = 0;
16021 parser->parser_lex_p = 0;
16022 parser->parser_lex_pend = 0;
16023 parser->parser_lvtbl = 0;
16024 parser->parser_ruby__end__seen = 0;
16025 parser->parser_ruby_sourcefile = 0;
16026 #ifndef RIPPER
16027 parser->is_ripper = 0;
16028 parser->parser_eval_tree_begin = 0;
16029 parser->parser_eval_tree = 0;
16030 #else
16031 parser->is_ripper = 1;
16032 parser->parser_ruby_sourcefile_string = Qnil;
16033 parser->delayed = Qnil;
16034
16035 parser->result = Qnil;
16036 parser->parsing_thread = Qnil;
16037 parser->toplevel_p = TRUE;
16038 #endif
16039 #ifdef YYMALLOC
16040 parser->heap = NULL;
16041 #endif
16042 parser->enc = rb_usascii_encoding();
16043 }
16044
16045 #ifdef RIPPER
16046 #define parser_mark ripper_parser_mark
16047 #define parser_free ripper_parser_free
16048 #endif
16049
16050 static void
16051 parser_mark(void *ptr)
16052 {
16053 struct parser_params *p = (struct parser_params*)ptr;
16054
16055 rb_gc_mark((VALUE)p->parser_lex_strterm);
16056 rb_gc_mark((VALUE)p->parser_deferred_nodes);
16057 rb_gc_mark(p->parser_lex_input);
16058 rb_gc_mark(p->parser_lex_lastline);
16059 rb_gc_mark(p->parser_lex_nextline);
16060 #ifndef RIPPER
16061 rb_gc_mark((VALUE)p->parser_eval_tree_begin) ;
16062 rb_gc_mark((VALUE)p->parser_eval_tree) ;
16063 rb_gc_mark(p->debug_lines);
16064 #else
16065 rb_gc_mark(p->parser_ruby_sourcefile_string);
16066 rb_gc_mark(p->delayed);
16067 rb_gc_mark(p->value);
16068 rb_gc_mark(p->result);
16069 rb_gc_mark(p->parsing_thread);
16070 #endif
16071 #ifdef YYMALLOC
16072 rb_gc_mark((VALUE)p->heap);
16073 #endif
16074 }
16075
16076 static void
16077 parser_free(void *ptr)
16078 {
16079 struct parser_params *p = (struct parser_params*)ptr;
16080 struct local_vars *local, *prev;
16081
16082 if (p->parser_tokenbuf) {
16083 xfree(p->parser_tokenbuf);
16084 }
16085 for (local = p->parser_lvtbl; local; local = prev) {
16086 if (local->vars) xfree(local->vars);
16087 prev = local->prev;
16088 xfree(local);
16089 }
16090 #ifndef RIPPER
16091 xfree(p->parser_ruby_sourcefile);
16092 #endif
16093 xfree(p);
16094 }
16095
16096 static size_t
16097 parser_memsize(const void *ptr)
16098 {
16099 struct parser_params *p = (struct parser_params*)ptr;
16100 struct local_vars *local;
16101 size_t size = sizeof(*p);
16102
16103 if (!ptr) return 0;
16104 size += p->parser_toksiz;
16105 for (local = p->parser_lvtbl; local; local = local->prev) {
16106 size += sizeof(*local);
16107 if (local->vars) size += local->vars->capa * sizeof(ID);
16108 }
16109 #ifndef RIPPER
16110 if (p->parser_ruby_sourcefile) {
16111 size += strlen(p->parser_ruby_sourcefile) + 1;
16112 }
16113 #endif
16114 return size;
16115 }
16116
16117 static const rb_data_type_t parser_data_type = {
16118 "parser",
16119 parser_mark,
16120 parser_free,
16121 parser_memsize,
16122 };
16123
16124 VALUE rb_parser_get_yydebug(VALUE);
16125 VALUE rb_parser_set_yydebug(VALUE, VALUE);
16126
16127 #ifndef RIPPER
16128 #undef rb_reserved_word
16129
16130 const struct kwtable *
16131 rb_reserved_word(const char *str, unsigned int len)
16132 {
16133 return reserved_word(str, len);
16134 }
16135
16136 static struct parser_params *
16137 parser_new(void)
16138 {
16139 struct parser_params *p;
16140
16141 p = ALLOC_N(struct parser_params, 1);
16142 MEMZERO(p, struct parser_params, 1);
16143 parser_initialize(p);
16144 return p;
16145 }
16146
16147 VALUE
16148 rb_parser_new(void)
16149 {
16150 struct parser_params *p = parser_new();
16151
16152 return TypedData_Wrap_Struct(0, &parser_data_type, p);
16153 }
16154
16155
16156
16157
16158
16159
16160
16161 VALUE
16162 rb_parser_end_seen_p(VALUE vparser)
16163 {
16164 struct parser_params *parser;
16165
16166 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16167 return ruby__end__seen ? Qtrue : Qfalse;
16168 }
16169
16170
16171
16172
16173
16174
16175
16176 VALUE
16177 rb_parser_encoding(VALUE vparser)
16178 {
16179 struct parser_params *parser;
16180
16181 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16182 return rb_enc_from_encoding(parser->enc);
16183 }
16184
16185
16186
16187
16188
16189
16190
16191 VALUE
16192 rb_parser_get_yydebug(VALUE self)
16193 {
16194 struct parser_params *parser;
16195
16196 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16197 return yydebug ? Qtrue : Qfalse;
16198 }
16199
16200
16201
16202
16203
16204
16205
16206 VALUE
16207 rb_parser_set_yydebug(VALUE self, VALUE flag)
16208 {
16209 struct parser_params *parser;
16210
16211 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16212 yydebug = RTEST(flag);
16213 return flag;
16214 }
16215
16216 #ifdef YYMALLOC
16217 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
16218 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
16219 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
16220 (n)->u3.cnt = (c), (p))
16221
16222 void *
16223 rb_parser_malloc(struct parser_params *parser, size_t size)
16224 {
16225 size_t cnt = HEAPCNT(1, size);
16226 NODE *n = NEWHEAP();
16227 void *ptr = xmalloc(size);
16228
16229 return ADD2HEAP(n, cnt, ptr);
16230 }
16231
16232 void *
16233 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
16234 {
16235 size_t cnt = HEAPCNT(nelem, size);
16236 NODE *n = NEWHEAP();
16237 void *ptr = xcalloc(nelem, size);
16238
16239 return ADD2HEAP(n, cnt, ptr);
16240 }
16241
16242 void *
16243 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
16244 {
16245 NODE *n;
16246 size_t cnt = HEAPCNT(1, size);
16247
16248 if (ptr && (n = parser->heap) != NULL) {
16249 do {
16250 if (n->u1.node == ptr) {
16251 n->u1.node = ptr = xrealloc(ptr, size);
16252 if (n->u3.cnt) n->u3.cnt = cnt;
16253 return ptr;
16254 }
16255 } while ((n = n->u2.node) != NULL);
16256 }
16257 n = NEWHEAP();
16258 ptr = xrealloc(ptr, size);
16259 return ADD2HEAP(n, cnt, ptr);
16260 }
16261
16262 void
16263 rb_parser_free(struct parser_params *parser, void *ptr)
16264 {
16265 NODE **prev = &parser->heap, *n;
16266
16267 while ((n = *prev) != NULL) {
16268 if (n->u1.node == ptr) {
16269 *prev = n->u2.node;
16270 rb_gc_force_recycle((VALUE)n);
16271 break;
16272 }
16273 prev = &n->u2.node;
16274 }
16275 xfree(ptr);
16276 }
16277 #endif
16278 #endif
16279
16280 #ifdef RIPPER
16281 #ifdef RIPPER_DEBUG
16282 extern int rb_is_pointer_to_heap(VALUE);
16283
16284
16285 static VALUE
16286 ripper_validate_object(VALUE self, VALUE x)
16287 {
16288 if (x == Qfalse) return x;
16289 if (x == Qtrue) return x;
16290 if (x == Qnil) return x;
16291 if (x == Qundef)
16292 rb_raise(rb_eArgError, "Qundef given");
16293 if (FIXNUM_P(x)) return x;
16294 if (SYMBOL_P(x)) return x;
16295 if (!rb_is_pointer_to_heap(x))
16296 rb_raise(rb_eArgError, "invalid pointer: %p", x);
16297 switch (TYPE(x)) {
16298 case T_STRING:
16299 case T_OBJECT:
16300 case T_ARRAY:
16301 case T_BIGNUM:
16302 case T_FLOAT:
16303 return x;
16304 case T_NODE:
16305 if (nd_type(x) != NODE_LASGN) {
16306 rb_raise(rb_eArgError, "NODE given: %p", x);
16307 }
16308 return ((NODE *)x)->nd_rval;
16309 default:
16310 rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
16311 x, rb_obj_classname(x));
16312 }
16313 return x;
16314 }
16315 #endif
16316
16317 #define validate(x) (x = get_value(x))
16318
16319 static VALUE
16320 ripper_dispatch0(struct parser_params *parser, ID mid)
16321 {
16322 return rb_funcall(parser->value, mid, 0);
16323 }
16324
16325 static VALUE
16326 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
16327 {
16328 validate(a);
16329 return rb_funcall(parser->value, mid, 1, a);
16330 }
16331
16332 static VALUE
16333 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
16334 {
16335 validate(a);
16336 validate(b);
16337 return rb_funcall(parser->value, mid, 2, a, b);
16338 }
16339
16340 static VALUE
16341 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
16342 {
16343 validate(a);
16344 validate(b);
16345 validate(c);
16346 return rb_funcall(parser->value, mid, 3, a, b, c);
16347 }
16348
16349 static VALUE
16350 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
16351 {
16352 validate(a);
16353 validate(b);
16354 validate(c);
16355 validate(d);
16356 return rb_funcall(parser->value, mid, 4, a, b, c, d);
16357 }
16358
16359 static VALUE
16360 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
16361 {
16362 validate(a);
16363 validate(b);
16364 validate(c);
16365 validate(d);
16366 validate(e);
16367 return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
16368 }
16369
16370 static const struct kw_assoc {
16371 ID id;
16372 const char *name;
16373 } keyword_to_name[] = {
16374 {keyword_class, "class"},
16375 {keyword_module, "module"},
16376 {keyword_def, "def"},
16377 {keyword_undef, "undef"},
16378 {keyword_begin, "begin"},
16379 {keyword_rescue, "rescue"},
16380 {keyword_ensure, "ensure"},
16381 {keyword_end, "end"},
16382 {keyword_if, "if"},
16383 {keyword_unless, "unless"},
16384 {keyword_then, "then"},
16385 {keyword_elsif, "elsif"},
16386 {keyword_else, "else"},
16387 {keyword_case, "case"},
16388 {keyword_when, "when"},
16389 {keyword_while, "while"},
16390 {keyword_until, "until"},
16391 {keyword_for, "for"},
16392 {keyword_break, "break"},
16393 {keyword_next, "next"},
16394 {keyword_redo, "redo"},
16395 {keyword_retry, "retry"},
16396 {keyword_in, "in"},
16397 {keyword_do, "do"},
16398 {keyword_do_cond, "do"},
16399 {keyword_do_block, "do"},
16400 {keyword_return, "return"},
16401 {keyword_yield, "yield"},
16402 {keyword_super, "super"},
16403 {keyword_self, "self"},
16404 {keyword_nil, "nil"},
16405 {keyword_true, "true"},
16406 {keyword_false, "false"},
16407 {keyword_and, "and"},
16408 {keyword_or, "or"},
16409 {keyword_not, "not"},
16410 {modifier_if, "if"},
16411 {modifier_unless, "unless"},
16412 {modifier_while, "while"},
16413 {modifier_until, "until"},
16414 {modifier_rescue, "rescue"},
16415 {keyword_alias, "alias"},
16416 {keyword_defined, "defined?"},
16417 {keyword_BEGIN, "BEGIN"},
16418 {keyword_END, "END"},
16419 {keyword__LINE__, "__LINE__"},
16420 {keyword__FILE__, "__FILE__"},
16421 {keyword__ENCODING__, "__ENCODING__"},
16422 {0, NULL}
16423 };
16424
16425 static const char*
16426 keyword_id_to_str(ID id)
16427 {
16428 const struct kw_assoc *a;
16429
16430 for (a = keyword_to_name; a->id; a++) {
16431 if (a->id == id)
16432 return a->name;
16433 }
16434 return NULL;
16435 }
16436
16437 #undef ripper_id2sym
16438 static VALUE
16439 ripper_id2sym(ID id)
16440 {
16441 const char *name;
16442 char buf[8];
16443
16444 if (id <= 256) {
16445 buf[0] = (char)id;
16446 buf[1] = '\0';
16447 return ID2SYM(rb_intern2(buf, 1));
16448 }
16449 if ((name = keyword_id_to_str(id))) {
16450 return ID2SYM(rb_intern(name));
16451 }
16452 switch (id) {
16453 case tOROP:
16454 name = "||";
16455 break;
16456 case tANDOP:
16457 name = "&&";
16458 break;
16459 default:
16460 name = rb_id2name(id);
16461 if (!name) {
16462 rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
16463 }
16464 return ID2SYM(id);
16465 }
16466 return ID2SYM(rb_intern(name));
16467 }
16468
16469 static ID
16470 ripper_get_id(VALUE v)
16471 {
16472 NODE *nd;
16473 if (!RB_TYPE_P(v, T_NODE)) return 0;
16474 nd = (NODE *)v;
16475 if (nd_type(nd) != NODE_LASGN) return 0;
16476 return nd->nd_vid;
16477 }
16478
16479 static VALUE
16480 ripper_get_value(VALUE v)
16481 {
16482 NODE *nd;
16483 if (v == Qundef) return Qnil;
16484 if (!RB_TYPE_P(v, T_NODE)) return v;
16485 nd = (NODE *)v;
16486 if (nd_type(nd) != NODE_LASGN) return Qnil;
16487 return nd->nd_rval;
16488 }
16489
16490 static void
16491 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
16492 {
16493 VALUE str;
16494 va_list args;
16495
16496 va_start(args, fmt);
16497 str = rb_vsprintf(fmt, args);
16498 va_end(args);
16499 rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
16500 }
16501
16502 static void
16503 ripper_warn0(struct parser_params *parser, const char *fmt)
16504 {
16505 rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
16506 }
16507
16508 static void
16509 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
16510 {
16511 rb_funcall(parser->value, rb_intern("warn"), 2,
16512 STR_NEW2(fmt), INT2NUM(a));
16513 }
16514
16515 #if 0
16516 static void
16517 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
16518 {
16519 rb_funcall(parser->value, rb_intern("warn"), 2,
16520 STR_NEW2(fmt), STR_NEW2(str));
16521 }
16522 #endif
16523
16524 static void
16525 ripper_warning0(struct parser_params *parser, const char *fmt)
16526 {
16527 rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
16528 }
16529
16530 static void
16531 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
16532 {
16533 rb_funcall(parser->value, rb_intern("warning"), 2,
16534 STR_NEW2(fmt), STR_NEW2(str));
16535 }
16536
16537 static VALUE
16538 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
16539 {
16540 return rb_funcall(src, ripper_id_gets, 0);
16541 }
16542
16543 static VALUE
16544 ripper_s_allocate(VALUE klass)
16545 {
16546 struct parser_params *p;
16547 VALUE self;
16548
16549 p = ALLOC_N(struct parser_params, 1);
16550 MEMZERO(p, struct parser_params, 1);
16551 self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
16552 p->value = self;
16553 return self;
16554 }
16555
16556 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
16557
16558
16559
16560
16561
16562
16563
16564
16565
16566
16567
16568 static VALUE
16569 ripper_initialize(int argc, VALUE *argv, VALUE self)
16570 {
16571 struct parser_params *parser;
16572 VALUE src, fname, lineno;
16573
16574 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16575 rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
16576 if (rb_obj_respond_to(src, ripper_id_gets, 0)) {
16577 parser->parser_lex_gets = ripper_lex_get_generic;
16578 }
16579 else {
16580 StringValue(src);
16581 parser->parser_lex_gets = lex_get_str;
16582 }
16583 parser->parser_lex_input = src;
16584 parser->eofp = Qfalse;
16585 if (NIL_P(fname)) {
16586 fname = STR_NEW2("(ripper)");
16587 }
16588 else {
16589 StringValue(fname);
16590 }
16591 parser_initialize(parser);
16592
16593 parser->parser_ruby_sourcefile_string = fname;
16594 parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
16595 parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
16596
16597 return Qnil;
16598 }
16599
16600 extern VALUE rb_thread_pass(void);
16601
16602 struct ripper_args {
16603 struct parser_params *parser;
16604 int argc;
16605 VALUE *argv;
16606 };
16607
16608 static VALUE
16609 ripper_parse0(VALUE parser_v)
16610 {
16611 struct parser_params *parser;
16612
16613 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16614 parser_prepare(parser);
16615 ripper_yyparse((void*)parser);
16616 return parser->result;
16617 }
16618
16619 static VALUE
16620 ripper_ensure(VALUE parser_v)
16621 {
16622 struct parser_params *parser;
16623
16624 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16625 parser->parsing_thread = Qnil;
16626 return Qnil;
16627 }
16628
16629
16630
16631
16632
16633
16634
16635 static VALUE
16636 ripper_parse(VALUE self)
16637 {
16638 struct parser_params *parser;
16639
16640 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16641 if (!ripper_initialized_p(parser)) {
16642 rb_raise(rb_eArgError, "method called for uninitialized object");
16643 }
16644 if (!NIL_P(parser->parsing_thread)) {
16645 if (parser->parsing_thread == rb_thread_current())
16646 rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
16647 else
16648 rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
16649 }
16650 parser->parsing_thread = rb_thread_current();
16651 rb_ensure(ripper_parse0, self, ripper_ensure, self);
16652
16653 return parser->result;
16654 }
16655
16656
16657
16658
16659
16660
16661
16662
16663 static VALUE
16664 ripper_column(VALUE self)
16665 {
16666 struct parser_params *parser;
16667 long col;
16668
16669 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16670 if (!ripper_initialized_p(parser)) {
16671 rb_raise(rb_eArgError, "method called for uninitialized object");
16672 }
16673 if (NIL_P(parser->parsing_thread)) return Qnil;
16674 col = parser->tokp - parser->parser_lex_pbeg;
16675 return LONG2NUM(col);
16676 }
16677
16678
16679
16680
16681
16682
16683
16684 static VALUE
16685 ripper_filename(VALUE self)
16686 {
16687 struct parser_params *parser;
16688
16689 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16690 if (!ripper_initialized_p(parser)) {
16691 rb_raise(rb_eArgError, "method called for uninitialized object");
16692 }
16693 return parser->parser_ruby_sourcefile_string;
16694 }
16695
16696
16697
16698
16699
16700
16701
16702
16703 static VALUE
16704 ripper_lineno(VALUE self)
16705 {
16706 struct parser_params *parser;
16707
16708 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16709 if (!ripper_initialized_p(parser)) {
16710 rb_raise(rb_eArgError, "method called for uninitialized object");
16711 }
16712 if (NIL_P(parser->parsing_thread)) return Qnil;
16713 return INT2NUM(parser->parser_ruby_sourceline);
16714 }
16715
16716 #ifdef RIPPER_DEBUG
16717
16718 static VALUE
16719 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
16720 {
16721 StringValue(msg);
16722 if (obj == Qundef) {
16723 rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg));
16724 }
16725 return Qnil;
16726 }
16727
16728
16729 static VALUE
16730 ripper_value(VALUE self, VALUE obj)
16731 {
16732 return ULONG2NUM(obj);
16733 }
16734 #endif
16735
16736 void
16737 Init_ripper(void)
16738 {
16739 VALUE Ripper;
16740
16741 Ripper = rb_define_class("Ripper", rb_cObject);
16742 rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
16743 rb_define_alloc_func(Ripper, ripper_s_allocate);
16744 rb_define_method(Ripper, "initialize", ripper_initialize, -1);
16745 rb_define_method(Ripper, "parse", ripper_parse, 0);
16746 rb_define_method(Ripper, "column", ripper_column, 0);
16747 rb_define_method(Ripper, "filename", ripper_filename, 0);
16748 rb_define_method(Ripper, "lineno", ripper_lineno, 0);
16749 rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
16750 rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
16751 rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
16752 rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
16753 #ifdef RIPPER_DEBUG
16754 rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
16755 rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
16756 rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
16757 #endif
16758
16759 ripper_id_gets = rb_intern("gets");
16760 ripper_init_eventids1(Ripper);
16761 ripper_init_eventids2(Ripper);
16762
16763 rb_intern("||");
16764 rb_intern("&&");
16765 }
16766 #endif
16767
16768