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 "internal.h"
00080 #include "node.h"
00081 #include "parse.h"
00082 #include "id.h"
00083 #include "regenc.h"
00084 #include <stdio.h>
00085 #include <errno.h>
00086 #include <ctype.h>
00087
00088 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
00089
00090 #define YYMALLOC(size) rb_parser_malloc(parser, (size))
00091 #define YYREALLOC(ptr, size) rb_parser_realloc(parser, (ptr), (size))
00092 #define YYCALLOC(nelem, size) rb_parser_calloc(parser, (nelem), (size))
00093 #define YYFREE(ptr) rb_parser_free(parser, (ptr))
00094 #define malloc YYMALLOC
00095 #define realloc YYREALLOC
00096 #define calloc YYCALLOC
00097 #define free YYFREE
00098
00099 #ifndef RIPPER
00100 static ID register_symid(ID, const char *, long, rb_encoding *);
00101 #define REGISTER_SYMID(id, name) register_symid((id), (name), strlen(name), enc)
00102 #include "id.c"
00103 #endif
00104
00105 #define is_notop_id(id) ((id)>tLAST_TOKEN)
00106 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL)
00107 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL)
00108 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE)
00109 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET)
00110 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST)
00111 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS)
00112 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK)
00113
00114 #define is_asgn_or_id(id) ((is_notop_id(id)) && \
00115 (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \
00116 ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \
00117 ((id)&ID_SCOPE_MASK) == ID_CLASS))
00118
00119 enum lex_state_e {
00120 EXPR_BEG,
00121 EXPR_END,
00122 EXPR_ENDARG,
00123 EXPR_ENDFN,
00124 EXPR_ARG,
00125 EXPR_CMDARG,
00126 EXPR_MID,
00127 EXPR_FNAME,
00128 EXPR_DOT,
00129 EXPR_CLASS,
00130 EXPR_VALUE,
00131 EXPR_MAX_STATE
00132 };
00133
00134 typedef VALUE stack_type;
00135
00136 # define BITSTACK_PUSH(stack, n) ((stack) = ((stack)<<1)|((n)&1))
00137 # define BITSTACK_POP(stack) ((stack) = (stack) >> 1)
00138 # define BITSTACK_LEXPOP(stack) ((stack) = ((stack) >> 1) | ((stack) & 1))
00139 # define BITSTACK_SET_P(stack) ((stack)&1)
00140
00141 #define COND_PUSH(n) BITSTACK_PUSH(cond_stack, (n))
00142 #define COND_POP() BITSTACK_POP(cond_stack)
00143 #define COND_LEXPOP() BITSTACK_LEXPOP(cond_stack)
00144 #define COND_P() BITSTACK_SET_P(cond_stack)
00145
00146 #define CMDARG_PUSH(n) BITSTACK_PUSH(cmdarg_stack, (n))
00147 #define CMDARG_POP() BITSTACK_POP(cmdarg_stack)
00148 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
00149 #define CMDARG_P() BITSTACK_SET_P(cmdarg_stack)
00150
00151 struct vtable {
00152 ID *tbl;
00153 int pos;
00154 int capa;
00155 struct vtable *prev;
00156 };
00157
00158 struct local_vars {
00159 struct vtable *args;
00160 struct vtable *vars;
00161 struct vtable *used;
00162 struct local_vars *prev;
00163 stack_type cmdargs;
00164 };
00165
00166 #define DVARS_INHERIT ((void*)1)
00167 #define DVARS_TOPSCOPE NULL
00168 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
00169 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
00170
00171 static int
00172 vtable_size(const struct vtable *tbl)
00173 {
00174 if (POINTER_P(tbl)) {
00175 return tbl->pos;
00176 }
00177 else {
00178 return 0;
00179 }
00180 }
00181
00182 #define VTBL_DEBUG 0
00183
00184 static struct vtable *
00185 vtable_alloc(struct vtable *prev)
00186 {
00187 struct vtable *tbl = ALLOC(struct vtable);
00188 tbl->pos = 0;
00189 tbl->capa = 8;
00190 tbl->tbl = ALLOC_N(ID, tbl->capa);
00191 tbl->prev = prev;
00192 if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
00193 return tbl;
00194 }
00195
00196 static void
00197 vtable_free(struct vtable *tbl)
00198 {
00199 if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
00200 if (POINTER_P(tbl)) {
00201 if (tbl->tbl) {
00202 xfree(tbl->tbl);
00203 }
00204 xfree(tbl);
00205 }
00206 }
00207
00208 static void
00209 vtable_add(struct vtable *tbl, ID id)
00210 {
00211 if (!POINTER_P(tbl)) {
00212 rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
00213 }
00214 if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id));
00215
00216 if (tbl->pos == tbl->capa) {
00217 tbl->capa = tbl->capa * 2;
00218 REALLOC_N(tbl->tbl, ID, tbl->capa);
00219 }
00220 tbl->tbl[tbl->pos++] = id;
00221 }
00222
00223 static int
00224 vtable_included(const struct vtable * tbl, ID id)
00225 {
00226 int i;
00227
00228 if (POINTER_P(tbl)) {
00229 for (i = 0; i < tbl->pos; i++) {
00230 if (tbl->tbl[i] == id) {
00231 return i+1;
00232 }
00233 }
00234 }
00235 return 0;
00236 }
00237
00238
00239 #ifndef RIPPER
00240 typedef struct token_info {
00241 const char *token;
00242 int linenum;
00243 int column;
00244 int nonspc;
00245 struct token_info *next;
00246 } token_info;
00247 #endif
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258 struct parser_params {
00259 int is_ripper;
00260 NODE *heap;
00261
00262 YYSTYPE *parser_yylval;
00263 VALUE eofp;
00264
00265 NODE *parser_lex_strterm;
00266 enum lex_state_e parser_lex_state;
00267 stack_type parser_cond_stack;
00268 stack_type parser_cmdarg_stack;
00269 int parser_class_nest;
00270 int parser_paren_nest;
00271 int parser_lpar_beg;
00272 int parser_in_single;
00273 int parser_in_def;
00274 int parser_compile_for_eval;
00275 VALUE parser_cur_mid;
00276 int parser_in_defined;
00277 char *parser_tokenbuf;
00278 int parser_tokidx;
00279 int parser_toksiz;
00280 VALUE parser_lex_input;
00281 VALUE parser_lex_lastline;
00282 VALUE parser_lex_nextline;
00283 const char *parser_lex_pbeg;
00284 const char *parser_lex_p;
00285 const char *parser_lex_pend;
00286 int parser_heredoc_end;
00287 int parser_command_start;
00288 NODE *parser_deferred_nodes;
00289 long parser_lex_gets_ptr;
00290 VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
00291 struct local_vars *parser_lvtbl;
00292 int parser_ruby__end__seen;
00293 int line_count;
00294 int has_shebang;
00295 char *parser_ruby_sourcefile;
00296 int parser_ruby_sourceline;
00297 rb_encoding *enc;
00298 rb_encoding *utf8;
00299
00300 int parser_yydebug;
00301
00302 #ifndef RIPPER
00303
00304 NODE *parser_eval_tree_begin;
00305 NODE *parser_eval_tree;
00306 VALUE debug_lines;
00307 VALUE coverage;
00308 int nerr;
00309
00310 int parser_token_info_enabled;
00311 token_info *parser_token_info;
00312 #else
00313
00314 VALUE parser_ruby_sourcefile_string;
00315 const char *tokp;
00316 VALUE delayed;
00317 int delayed_line;
00318 int delayed_col;
00319
00320 VALUE value;
00321 VALUE result;
00322 VALUE parsing_thread;
00323 int toplevel_p;
00324 #endif
00325 };
00326
00327 #define UTF8_ENC() (parser->utf8 ? parser->utf8 : \
00328 (parser->utf8 = rb_utf8_encoding()))
00329 #define STR_NEW(p,n) rb_enc_str_new((p),(n),parser->enc)
00330 #define STR_NEW0() rb_enc_str_new(0,0,parser->enc)
00331 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),parser->enc)
00332 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),parser->enc)
00333 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
00334 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), parser->enc)
00335
00336 static int parser_yyerror(struct parser_params*, const char*);
00337 #define yyerror(msg) parser_yyerror(parser, (msg))
00338
00339 #define lex_strterm (parser->parser_lex_strterm)
00340 #define lex_state (parser->parser_lex_state)
00341 #define cond_stack (parser->parser_cond_stack)
00342 #define cmdarg_stack (parser->parser_cmdarg_stack)
00343 #define class_nest (parser->parser_class_nest)
00344 #define paren_nest (parser->parser_paren_nest)
00345 #define lpar_beg (parser->parser_lpar_beg)
00346 #define in_single (parser->parser_in_single)
00347 #define in_def (parser->parser_in_def)
00348 #define compile_for_eval (parser->parser_compile_for_eval)
00349 #define cur_mid (parser->parser_cur_mid)
00350 #define in_defined (parser->parser_in_defined)
00351 #define tokenbuf (parser->parser_tokenbuf)
00352 #define tokidx (parser->parser_tokidx)
00353 #define toksiz (parser->parser_toksiz)
00354 #define lex_input (parser->parser_lex_input)
00355 #define lex_lastline (parser->parser_lex_lastline)
00356 #define lex_nextline (parser->parser_lex_nextline)
00357 #define lex_pbeg (parser->parser_lex_pbeg)
00358 #define lex_p (parser->parser_lex_p)
00359 #define lex_pend (parser->parser_lex_pend)
00360 #define heredoc_end (parser->parser_heredoc_end)
00361 #define command_start (parser->parser_command_start)
00362 #define deferred_nodes (parser->parser_deferred_nodes)
00363 #define lex_gets_ptr (parser->parser_lex_gets_ptr)
00364 #define lex_gets (parser->parser_lex_gets)
00365 #define lvtbl (parser->parser_lvtbl)
00366 #define ruby__end__seen (parser->parser_ruby__end__seen)
00367 #define ruby_sourceline (parser->parser_ruby_sourceline)
00368 #define ruby_sourcefile (parser->parser_ruby_sourcefile)
00369 #define current_enc (parser->enc)
00370 #define yydebug (parser->parser_yydebug)
00371 #ifdef RIPPER
00372 #else
00373 #define ruby_eval_tree (parser->parser_eval_tree)
00374 #define ruby_eval_tree_begin (parser->parser_eval_tree_begin)
00375 #define ruby_debug_lines (parser->debug_lines)
00376 #define ruby_coverage (parser->coverage)
00377 #endif
00378
00379 #if YYPURE
00380 static int yylex(void*, void*);
00381 #else
00382 static int yylex(void*);
00383 #endif
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 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
00470 #define reg_compile(str,options) reg_compile_gen(parser, (str), (options))
00471 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
00472 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, (str), (options))
00473 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
00474 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, (str), (options))
00475 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
00476 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,(regexp),(match))
00477
00478 #define get_id(id) (id)
00479 #define get_value(val) (val)
00480 #else
00481 #define remove_begin(node) (node)
00482 #define rb_dvar_defined(id) 0
00483 #define rb_local_defined(id) 0
00484 static ID ripper_get_id(VALUE);
00485 #define get_id(id) ripper_get_id(id)
00486 static VALUE ripper_get_value(VALUE);
00487 #define get_value(val) ripper_get_value(val)
00488 static VALUE assignable_gen(struct parser_params*,VALUE);
00489 #define assignable(lhs,node) assignable_gen(parser, (lhs))
00490 static int id_is_var_gen(struct parser_params *parser, ID id);
00491 #define id_is_var(id) id_is_var_gen(parser, (id))
00492 #endif
00493
00494 static ID formal_argument_gen(struct parser_params*, ID);
00495 #define formal_argument(id) formal_argument_gen(parser, (id))
00496 static ID shadowing_lvar_gen(struct parser_params*,ID);
00497 #define shadowing_lvar(name) shadowing_lvar_gen(parser, (name))
00498 static void new_bv_gen(struct parser_params*,ID);
00499 #define new_bv(id) new_bv_gen(parser, (id))
00500
00501 static void local_push_gen(struct parser_params*,int);
00502 #define local_push(top) local_push_gen(parser,(top))
00503 static void local_pop_gen(struct parser_params*);
00504 #define local_pop() local_pop_gen(parser)
00505 static int local_var_gen(struct parser_params*, ID);
00506 #define local_var(id) local_var_gen(parser, (id));
00507 static int arg_var_gen(struct parser_params*, ID);
00508 #define arg_var(id) arg_var_gen(parser, (id))
00509 static int local_id_gen(struct parser_params*, ID);
00510 #define local_id(id) local_id_gen(parser, (id))
00511 static ID internal_id_gen(struct parser_params*);
00512 #define internal_id() internal_id_gen(parser)
00513
00514 static const struct vtable *dyna_push_gen(struct parser_params *);
00515 #define dyna_push() dyna_push_gen(parser)
00516 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
00517 #define dyna_pop(node) dyna_pop_gen(parser, (node))
00518 static int dyna_in_block_gen(struct parser_params*);
00519 #define dyna_in_block() dyna_in_block_gen(parser)
00520 #define dyna_var(id) local_var(id)
00521 static int dvar_defined_gen(struct parser_params*,ID,int);
00522 #define dvar_defined(id) dvar_defined_gen(parser, (id), 0)
00523 #define dvar_defined_get(id) dvar_defined_gen(parser, (id), 1)
00524 static int dvar_curr_gen(struct parser_params*,ID);
00525 #define dvar_curr(id) dvar_curr_gen(parser, (id))
00526
00527 static int lvar_defined_gen(struct parser_params*, ID);
00528 #define lvar_defined(id) lvar_defined_gen(parser, (id))
00529
00530 #define RE_OPTION_ONCE (1<<16)
00531 #define RE_OPTION_ENCODING_SHIFT 8
00532 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
00533 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
00534 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
00535 #define RE_OPTION_MASK 0xff
00536 #define RE_OPTION_ARG_ENCODING_NONE 32
00537
00538 #define NODE_STRTERM NODE_ZARRAY
00539 #define NODE_HEREDOC NODE_ARRAY
00540 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
00541 #define nd_func u1.id
00542 #if SIZEOF_SHORT == 2
00543 #define nd_term(node) ((signed short)(node)->u2.id)
00544 #else
00545 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
00546 #endif
00547 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
00548 #define nd_nest u3.cnt
00549
00550
00551
00552 #ifdef RIPPER
00553 #define RIPPER_VERSION "0.1.0"
00554
00555 #include "eventids1.c"
00556 #include "eventids2.c"
00557 static ID ripper_id_gets;
00558
00559 static VALUE ripper_dispatch0(struct parser_params*,ID);
00560 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
00561 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
00562 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
00563 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
00564 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
00565
00566 #define dispatch0(n) ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
00567 #define dispatch1(n,a) ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a))
00568 #define dispatch2(n,a,b) ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), (a), (b))
00569 #define dispatch3(n,a,b,c) ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c))
00570 #define dispatch4(n,a,b,c,d) ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d))
00571 #define dispatch5(n,a,b,c,d,e) ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e))
00572
00573 #define yyparse ripper_yyparse
00574
00575 #define ripper_intern(s) ID2SYM(rb_intern(s))
00576 static VALUE ripper_id2sym(ID);
00577 #ifdef __GNUC__
00578 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
00579 ID2SYM(id) : ripper_id2sym(id))
00580 #endif
00581
00582 #define arg_new() dispatch0(args_new)
00583 #define arg_add(l,a) dispatch2(args_add, (l), (a))
00584 #define arg_add_star(l,a) dispatch2(args_add_star, (l), (a))
00585 #define arg_add_block(l,b) dispatch2(args_add_block, (l), (b))
00586 #define arg_add_optblock(l,b) ((b)==Qundef? (l) : dispatch2(args_add_block, (l), (b)))
00587 #define bare_assoc(v) dispatch1(bare_assoc_hash, (v))
00588 #define arg_add_assocs(l,b) arg_add((l), bare_assoc(b))
00589
00590 #define args2mrhs(a) dispatch1(mrhs_new_from_args, (a))
00591 #define mrhs_new() dispatch0(mrhs_new)
00592 #define mrhs_add(l,a) dispatch2(mrhs_add, (l), (a))
00593 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, (l), (a))
00594
00595 #define mlhs_new() dispatch0(mlhs_new)
00596 #define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a))
00597 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a))
00598
00599 #define params_new(pars, opts, rest, pars2, blk) \
00600 dispatch5(params, (pars), (opts), (rest), (pars2), (blk))
00601
00602 #define blockvar_new(p,v) dispatch2(block_var, (p), (v))
00603 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a))
00604 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, (l), (a))
00605
00606 #define method_optarg(m,a) ((a)==Qundef ? (m) : dispatch2(method_add_arg,(m),(a)))
00607 #define method_arg(m,a) dispatch2(method_add_arg,(m),(a))
00608 #define method_add_block(m,b) dispatch2(method_add_block, (m), (b))
00609
00610 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
00611
00612 #define FIXME 0
00613
00614 #endif
00615
00616 #ifndef RIPPER
00617 # define ifndef_ripper(x) (x)
00618 #else
00619 # define ifndef_ripper(x)
00620 #endif
00621
00622 #ifndef RIPPER
00623 # define rb_warn0(fmt) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt))
00624 # define rb_warnI(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00625 # define rb_warnS(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00626 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt))
00627 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00628 #else
00629 # define rb_warn0(fmt) ripper_warn0(parser, (fmt))
00630 # define rb_warnI(fmt,a) ripper_warnI(parser, (fmt), (a))
00631 # define rb_warnS(fmt,a) ripper_warnS(parser, (fmt), (a))
00632 # define rb_warning0(fmt) ripper_warning0(parser, (fmt))
00633 # define rb_warningS(fmt,a) ripper_warningS(parser, (fmt), (a))
00634 static void ripper_warn0(struct parser_params*, const char*);
00635 static void ripper_warnI(struct parser_params*, const char*, int);
00636 #if 0
00637 static void ripper_warnS(struct parser_params*, const char*, const char*);
00638 #endif
00639 static void ripper_warning0(struct parser_params*, const char*);
00640 static void ripper_warningS(struct parser_params*, const char*, const char*);
00641 #endif
00642
00643 #ifdef RIPPER
00644 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
00645 # define rb_compile_error ripper_compile_error
00646 # define compile_error ripper_compile_error
00647 # define PARSER_ARG parser,
00648 #else
00649 # define rb_compile_error rb_compile_error_with_enc
00650 # define compile_error parser->nerr++,rb_compile_error_with_enc
00651 # define PARSER_ARG ruby_sourcefile, ruby_sourceline, current_enc,
00652 #endif
00653
00654
00655
00656
00657 #ifdef OLD_YACC
00658 #ifndef YYMAXDEPTH
00659 #define YYMAXDEPTH 10000
00660 #endif
00661 #endif
00662
00663 #ifndef RIPPER
00664 static void token_info_push(struct parser_params*, const char *token);
00665 static void token_info_pop(struct parser_params*, const char *token);
00666 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, (token)) : (void)0)
00667 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, (token)) : (void)0)
00668 #else
00669 #define token_info_push(token)
00670 #define token_info_pop(token)
00671 #endif
00672
00673
00674
00675 #line 676 "parse.c"
00676
00677
00678 #ifndef YYDEBUG
00679 # define YYDEBUG 0
00680 #endif
00681
00682
00683 #ifdef YYERROR_VERBOSE
00684 # undef YYERROR_VERBOSE
00685 # define YYERROR_VERBOSE 1
00686 #else
00687 # define YYERROR_VERBOSE 0
00688 #endif
00689
00690
00691 #ifndef YYTOKEN_TABLE
00692 # define YYTOKEN_TABLE 0
00693 #endif
00694
00695
00696
00697 #ifndef YYTOKENTYPE
00698 # define YYTOKENTYPE
00699
00700
00701 enum yytokentype {
00702 keyword_class = 258,
00703 keyword_module = 259,
00704 keyword_def = 260,
00705 keyword_undef = 261,
00706 keyword_begin = 262,
00707 keyword_rescue = 263,
00708 keyword_ensure = 264,
00709 keyword_end = 265,
00710 keyword_if = 266,
00711 keyword_unless = 267,
00712 keyword_then = 268,
00713 keyword_elsif = 269,
00714 keyword_else = 270,
00715 keyword_case = 271,
00716 keyword_when = 272,
00717 keyword_while = 273,
00718 keyword_until = 274,
00719 keyword_for = 275,
00720 keyword_break = 276,
00721 keyword_next = 277,
00722 keyword_redo = 278,
00723 keyword_retry = 279,
00724 keyword_in = 280,
00725 keyword_do = 281,
00726 keyword_do_cond = 282,
00727 keyword_do_block = 283,
00728 keyword_do_LAMBDA = 284,
00729 keyword_return = 285,
00730 keyword_yield = 286,
00731 keyword_super = 287,
00732 keyword_self = 288,
00733 keyword_nil = 289,
00734 keyword_true = 290,
00735 keyword_false = 291,
00736 keyword_and = 292,
00737 keyword_or = 293,
00738 keyword_not = 294,
00739 modifier_if = 295,
00740 modifier_unless = 296,
00741 modifier_while = 297,
00742 modifier_until = 298,
00743 modifier_rescue = 299,
00744 keyword_alias = 300,
00745 keyword_defined = 301,
00746 keyword_BEGIN = 302,
00747 keyword_END = 303,
00748 keyword__LINE__ = 304,
00749 keyword__FILE__ = 305,
00750 keyword__ENCODING__ = 306,
00751 tIDENTIFIER = 307,
00752 tFID = 308,
00753 tGVAR = 309,
00754 tIVAR = 310,
00755 tCONSTANT = 311,
00756 tCVAR = 312,
00757 tLABEL = 313,
00758 tINTEGER = 314,
00759 tFLOAT = 315,
00760 tSTRING_CONTENT = 316,
00761 tCHAR = 317,
00762 tNTH_REF = 318,
00763 tBACK_REF = 319,
00764 tREGEXP_END = 320,
00765 tUPLUS = 321,
00766 tUMINUS = 322,
00767 tPOW = 323,
00768 tCMP = 324,
00769 tEQ = 325,
00770 tEQQ = 326,
00771 tNEQ = 327,
00772 tGEQ = 328,
00773 tLEQ = 329,
00774 tANDOP = 330,
00775 tOROP = 331,
00776 tMATCH = 332,
00777 tNMATCH = 333,
00778 tDOT2 = 334,
00779 tDOT3 = 335,
00780 tAREF = 336,
00781 tASET = 337,
00782 tLSHFT = 338,
00783 tRSHFT = 339,
00784 tCOLON2 = 340,
00785 tCOLON3 = 341,
00786 tOP_ASGN = 342,
00787 tASSOC = 343,
00788 tLPAREN = 344,
00789 tLPAREN_ARG = 345,
00790 tRPAREN = 346,
00791 tLBRACK = 347,
00792 tLBRACE = 348,
00793 tLBRACE_ARG = 349,
00794 tSTAR = 350,
00795 tAMPER = 351,
00796 tLAMBDA = 352,
00797 tSYMBEG = 353,
00798 tSTRING_BEG = 354,
00799 tXSTRING_BEG = 355,
00800 tREGEXP_BEG = 356,
00801 tWORDS_BEG = 357,
00802 tQWORDS_BEG = 358,
00803 tSTRING_DBEG = 359,
00804 tSTRING_DVAR = 360,
00805 tSTRING_END = 361,
00806 tLAMBEG = 362,
00807 tLOWEST = 363,
00808 tUMINUS_NUM = 364,
00809 idNULL = 365,
00810 idRespond_to = 366,
00811 idIFUNC = 367,
00812 idCFUNC = 368,
00813 id_core_set_method_alias = 369,
00814 id_core_set_variable_alias = 370,
00815 id_core_undef_method = 371,
00816 id_core_define_method = 372,
00817 id_core_define_singleton_method = 373,
00818 id_core_set_postexe = 374,
00819 tLAST_TOKEN = 375
00820 };
00821 #endif
00822
00823
00824
00825 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
00826 typedef union YYSTYPE
00827 {
00828
00829
00830 #line 620 "parse.y"
00831
00832 VALUE val;
00833 NODE *node;
00834 ID id;
00835 int num;
00836 const struct vtable *vars;
00837
00838
00839
00840
00841 #line 842 "parse.c"
00842 } YYSTYPE;
00843 # define YYSTYPE_IS_TRIVIAL 1
00844 # define yystype YYSTYPE
00845 # define YYSTYPE_IS_DECLARED 1
00846 #endif
00847
00848
00849
00850
00851
00852
00853 #line 854 "parse.c"
00854
00855 #ifdef short
00856 # undef short
00857 #endif
00858
00859 #ifdef YYTYPE_UINT8
00860 typedef YYTYPE_UINT8 yytype_uint8;
00861 #else
00862 typedef unsigned char yytype_uint8;
00863 #endif
00864
00865 #ifdef YYTYPE_INT8
00866 typedef YYTYPE_INT8 yytype_int8;
00867 #elif (defined __STDC__ || defined __C99__FUNC__ \
00868 || defined __cplusplus || defined _MSC_VER)
00869 typedef signed char yytype_int8;
00870 #else
00871 typedef short int yytype_int8;
00872 #endif
00873
00874 #ifdef YYTYPE_UINT16
00875 typedef YYTYPE_UINT16 yytype_uint16;
00876 #else
00877 typedef unsigned short int yytype_uint16;
00878 #endif
00879
00880 #ifdef YYTYPE_INT16
00881 typedef YYTYPE_INT16 yytype_int16;
00882 #else
00883 typedef short int yytype_int16;
00884 #endif
00885
00886 #ifndef YYSIZE_T
00887 # ifdef __SIZE_TYPE__
00888 # define YYSIZE_T __SIZE_TYPE__
00889 # elif defined size_t
00890 # define YYSIZE_T size_t
00891 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
00892 || defined __cplusplus || defined _MSC_VER)
00893 # include <stddef.h>
00894 # define YYSIZE_T size_t
00895 # else
00896 # define YYSIZE_T unsigned int
00897 # endif
00898 #endif
00899
00900 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
00901
00902 #ifndef YY_
00903 # if defined YYENABLE_NLS && YYENABLE_NLS
00904 # if ENABLE_NLS
00905 # include <libintl.h>
00906 # define YY_(msgid) dgettext ("bison-runtime", msgid)
00907 # endif
00908 # endif
00909 # ifndef YY_
00910 # define YY_(msgid) msgid
00911 # endif
00912 #endif
00913
00914
00915 #if ! defined lint || defined __GNUC__
00916 # define YYUSE(e) ((void) (e))
00917 #else
00918 # define YYUSE(e)
00919 #endif
00920
00921
00922 #ifndef lint
00923 # define YYID(n) (n)
00924 #else
00925 #if (defined __STDC__ || defined __C99__FUNC__ \
00926 || defined __cplusplus || defined _MSC_VER)
00927 static int
00928 YYID (int yyi)
00929 #else
00930 static int
00931 YYID (yyi)
00932 int yyi;
00933 #endif
00934 {
00935 return yyi;
00936 }
00937 #endif
00938
00939 #if ! defined yyoverflow || YYERROR_VERBOSE
00940
00941
00942
00943 # ifdef YYSTACK_USE_ALLOCA
00944 # if YYSTACK_USE_ALLOCA
00945 # ifdef __GNUC__
00946 # define YYSTACK_ALLOC __builtin_alloca
00947 # elif defined __BUILTIN_VA_ARG_INCR
00948 # include <alloca.h>
00949 # elif defined _AIX
00950 # define YYSTACK_ALLOC __alloca
00951 # elif defined _MSC_VER
00952 # include <malloc.h>
00953 # define alloca _alloca
00954 # else
00955 # define YYSTACK_ALLOC alloca
00956 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
00957 || defined __cplusplus || defined _MSC_VER)
00958 # include <stdlib.h>
00959 # ifndef EXIT_SUCCESS
00960 # define EXIT_SUCCESS 0
00961 # endif
00962 # endif
00963 # endif
00964 # endif
00965 # endif
00966
00967 # ifdef YYSTACK_ALLOC
00968
00969 # define YYSTACK_FREE(Ptr) do { ; } while (YYID (0))
00970 # ifndef YYSTACK_ALLOC_MAXIMUM
00971
00972
00973
00974
00975 # define YYSTACK_ALLOC_MAXIMUM 4032
00976 # endif
00977 # else
00978 # define YYSTACK_ALLOC YYMALLOC
00979 # define YYSTACK_FREE YYFREE
00980 # ifndef YYSTACK_ALLOC_MAXIMUM
00981 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
00982 # endif
00983 # if (defined __cplusplus && ! defined EXIT_SUCCESS \
00984 && ! ((defined YYMALLOC || defined malloc) \
00985 && (defined YYFREE || defined free)))
00986 # include <stdlib.h>
00987 # ifndef EXIT_SUCCESS
00988 # define EXIT_SUCCESS 0
00989 # endif
00990 # endif
00991 # ifndef YYMALLOC
00992 # define YYMALLOC malloc
00993 # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
00994 || defined __cplusplus || defined _MSC_VER)
00995 void *malloc (YYSIZE_T);
00996 # endif
00997 # endif
00998 # ifndef YYFREE
00999 # define YYFREE free
01000 # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
01001 || defined __cplusplus || defined _MSC_VER)
01002 void free (void *);
01003 # endif
01004 # endif
01005 # endif
01006 #endif
01007
01008
01009 #if (! defined yyoverflow \
01010 && (! defined __cplusplus \
01011 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
01012
01013
01014 union yyalloc
01015 {
01016 yytype_int16 yyss_alloc;
01017 YYSTYPE yyvs_alloc;
01018 };
01019
01020
01021 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
01022
01023
01024
01025 # define YYSTACK_BYTES(N) \
01026 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
01027 + YYSTACK_GAP_MAXIMUM)
01028
01029 # define YYCOPY_NEEDED 1
01030
01031
01032
01033
01034
01035
01036 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
01037 do \
01038 { \
01039 YYSIZE_T yynewbytes; \
01040 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
01041 Stack = &yyptr->Stack_alloc; \
01042 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
01043 yyptr += yynewbytes / sizeof (*yyptr); \
01044 } \
01045 while (YYID (0))
01046
01047 #endif
01048
01049 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
01050
01051
01052 # ifndef YYCOPY
01053 # if defined __GNUC__ && 1 < __GNUC__
01054 # define YYCOPY(To, From, Count) \
01055 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
01056 # else
01057 # define YYCOPY(To, From, Count) \
01058 do \
01059 { \
01060 YYSIZE_T yyi; \
01061 for (yyi = 0; yyi < (Count); yyi++) \
01062 (To)[yyi] = (From)[yyi]; \
01063 } \
01064 while (YYID (0))
01065 # endif
01066 # endif
01067 #endif
01068
01069
01070 #define YYFINAL 3
01071
01072 #define YYLAST 10748
01073
01074
01075 #define YYNTOKENS 148
01076
01077 #define YYNNTS 174
01078
01079 #define YYNRULES 573
01080
01081 #define YYNSTATES 991
01082
01083
01084 #define YYUNDEFTOK 2
01085 #define YYMAXUTOK 375
01086
01087 #define YYTRANSLATE(YYX) \
01088 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
01089
01090
01091 static const yytype_uint8 yytranslate[] =
01092 {
01093 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01094 147, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01095 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01096 2, 2, 146, 123, 2, 2, 2, 121, 116, 2,
01097 142, 143, 119, 117, 140, 118, 139, 120, 2, 2,
01098 2, 2, 2, 2, 2, 2, 2, 2, 111, 145,
01099 113, 109, 112, 110, 2, 2, 2, 2, 2, 2,
01100 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01101 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01102 2, 138, 2, 144, 115, 2, 141, 2, 2, 2,
01103 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01104 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01105 2, 2, 2, 136, 114, 137, 124, 2, 2, 2,
01106 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01107 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01108 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01109 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01110 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01111 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01112 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01113 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01114 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01115 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01116 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01117 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01118 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
01119 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
01120 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
01121 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
01122 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
01123 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
01124 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
01125 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
01126 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
01127 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
01128 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
01129 105, 106, 107, 108, 122, 125, 126, 127, 128, 129,
01130 130, 131, 132, 133, 134, 135
01131 };
01132
01133 #if YYDEBUG
01134
01135
01136 static const yytype_uint16 yyprhs[] =
01137 {
01138 0, 0, 3, 4, 7, 10, 12, 14, 18, 21,
01139 23, 24, 30, 35, 38, 40, 42, 46, 49, 50,
01140 55, 59, 63, 67, 70, 74, 78, 82, 86, 90,
01141 95, 97, 101, 105, 112, 118, 124, 130, 136, 140,
01142 144, 148, 152, 154, 158, 162, 164, 168, 172, 176,
01143 179, 181, 183, 185, 187, 189, 194, 199, 200, 206,
01144 209, 213, 218, 224, 229, 235, 238, 241, 244, 247,
01145 250, 252, 256, 258, 262, 264, 267, 271, 277, 280,
01146 285, 288, 293, 295, 299, 301, 305, 308, 312, 314,
01147 318, 320, 322, 327, 331, 335, 339, 343, 346, 348,
01148 350, 352, 357, 361, 365, 369, 373, 376, 378, 380,
01149 382, 385, 387, 391, 393, 395, 397, 399, 401, 403,
01150 405, 407, 409, 411, 412, 417, 419, 421, 423, 425,
01151 427, 429, 431, 433, 435, 437, 439, 441, 443, 445,
01152 447, 449, 451, 453, 455, 457, 459, 461, 463, 465,
01153 467, 469, 471, 473, 475, 477, 479, 481, 483, 485,
01154 487, 489, 491, 493, 495, 497, 499, 501, 503, 505,
01155 507, 509, 511, 513, 515, 517, 519, 521, 523, 525,
01156 527, 529, 531, 533, 535, 537, 539, 541, 543, 545,
01157 547, 549, 551, 553, 555, 557, 561, 567, 571, 577,
01158 584, 590, 596, 602, 608, 613, 617, 621, 625, 629,
01159 633, 637, 641, 645, 649, 654, 659, 662, 665, 669,
01160 673, 677, 681, 685, 689, 693, 697, 701, 705, 709,
01161 713, 717, 720, 723, 727, 731, 735, 739, 740, 745,
01162 752, 754, 756, 758, 761, 766, 769, 773, 775, 777,
01163 779, 781, 784, 789, 792, 794, 797, 800, 805, 807,
01164 808, 811, 814, 817, 819, 821, 824, 828, 833, 837,
01165 842, 845, 847, 849, 851, 853, 855, 857, 859, 861,
01166 863, 864, 869, 870, 875, 879, 883, 886, 890, 894,
01167 896, 901, 905, 907, 908, 915, 920, 924, 927, 929,
01168 932, 935, 942, 949, 950, 951, 959, 960, 961, 969,
01169 975, 980, 981, 982, 992, 993, 1000, 1001, 1002, 1011,
01170 1012, 1018, 1019, 1026, 1027, 1028, 1038, 1040, 1042, 1044,
01171 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064,
01172 1066, 1068, 1070, 1072, 1074, 1077, 1079, 1081, 1083, 1089,
01173 1091, 1094, 1096, 1098, 1100, 1104, 1106, 1110, 1112, 1117,
01174 1124, 1128, 1134, 1137, 1142, 1144, 1148, 1155, 1164, 1169,
01175 1176, 1181, 1184, 1191, 1194, 1199, 1206, 1209, 1214, 1217,
01176 1222, 1224, 1226, 1228, 1232, 1234, 1239, 1241, 1244, 1246,
01177 1250, 1252, 1254, 1255, 1256, 1261, 1266, 1268, 1272, 1276,
01178 1277, 1283, 1286, 1291, 1296, 1299, 1304, 1309, 1313, 1317,
01179 1321, 1324, 1326, 1331, 1332, 1338, 1339, 1345, 1351, 1353,
01180 1355, 1362, 1364, 1366, 1368, 1370, 1373, 1375, 1378, 1380,
01181 1382, 1384, 1386, 1388, 1390, 1392, 1395, 1399, 1403, 1407,
01182 1411, 1415, 1416, 1420, 1422, 1425, 1429, 1433, 1434, 1438,
01183 1439, 1442, 1443, 1446, 1447, 1450, 1452, 1453, 1457, 1458,
01184 1459, 1465, 1467, 1469, 1471, 1473, 1476, 1478, 1480, 1482,
01185 1484, 1488, 1490, 1492, 1495, 1498, 1500, 1502, 1504, 1506,
01186 1508, 1510, 1512, 1514, 1516, 1518, 1520, 1522, 1524, 1526,
01187 1528, 1530, 1532, 1534, 1536, 1537, 1542, 1545, 1549, 1552,
01188 1559, 1568, 1573, 1580, 1585, 1592, 1595, 1600, 1607, 1610,
01189 1615, 1618, 1623, 1625, 1626, 1628, 1630, 1632, 1634, 1636,
01190 1638, 1640, 1644, 1646, 1650, 1654, 1658, 1660, 1664, 1666,
01191 1670, 1672, 1674, 1677, 1679, 1681, 1683, 1686, 1689, 1691,
01192 1693, 1694, 1699, 1701, 1704, 1706, 1710, 1714, 1717, 1719,
01193 1721, 1723, 1725, 1727, 1729, 1731, 1733, 1735, 1737, 1739,
01194 1741, 1742, 1744, 1745, 1747, 1750, 1753, 1754, 1756, 1758,
01195 1760, 1762, 1764, 1767
01196 };
01197
01198
01199 static const yytype_int16 yyrhs[] =
01200 {
01201 149, 0, -1, -1, 150, 151, -1, 152, 314, -1,
01202 321, -1, 153, -1, 152, 320, 153, -1, 1, 153,
01203 -1, 158, -1, -1, 47, 154, 136, 151, 137, -1,
01204 156, 256, 231, 259, -1, 157, 314, -1, 321, -1,
01205 158, -1, 157, 320, 158, -1, 1, 158, -1, -1,
01206 45, 180, 159, 180, -1, 45, 54, 54, -1, 45,
01207 54, 64, -1, 45, 54, 63, -1, 6, 181, -1,
01208 158, 40, 162, -1, 158, 41, 162, -1, 158, 42,
01209 162, -1, 158, 43, 162, -1, 158, 44, 158, -1,
01210 48, 136, 156, 137, -1, 160, -1, 168, 109, 163,
01211 -1, 286, 87, 163, -1, 216, 138, 191, 317, 87,
01212 163, -1, 216, 139, 52, 87, 163, -1, 216, 139,
01213 56, 87, 163, -1, 216, 85, 56, 87, 163, -1,
01214 216, 85, 52, 87, 163, -1, 287, 87, 163, -1,
01215 175, 109, 198, -1, 168, 109, 187, -1, 168, 109,
01216 198, -1, 161, -1, 175, 109, 163, -1, 175, 109,
01217 160, -1, 163, -1, 161, 37, 161, -1, 161, 38,
01218 161, -1, 39, 315, 161, -1, 123, 163, -1, 185,
01219 -1, 161, -1, 167, -1, 164, -1, 249, -1, 249,
01220 139, 311, 193, -1, 249, 85, 311, 193, -1, -1,
01221 94, 166, 237, 156, 137, -1, 310, 193, -1, 310,
01222 193, 165, -1, 216, 139, 311, 193, -1, 216, 139,
01223 311, 193, 165, -1, 216, 85, 311, 193, -1, 216,
01224 85, 311, 193, 165, -1, 32, 193, -1, 31, 193,
01225 -1, 30, 192, -1, 21, 192, -1, 22, 192, -1,
01226 170, -1, 89, 169, 316, -1, 170, -1, 89, 169,
01227 316, -1, 172, -1, 172, 171, -1, 172, 95, 174,
01228 -1, 172, 95, 174, 140, 173, -1, 172, 95, -1,
01229 172, 95, 140, 173, -1, 95, 174, -1, 95, 174,
01230 140, 173, -1, 95, -1, 95, 140, 173, -1, 174,
01231 -1, 89, 169, 316, -1, 171, 140, -1, 172, 171,
01232 140, -1, 171, -1, 173, 140, 171, -1, 283, -1,
01233 284, -1, 216, 138, 191, 317, -1, 216, 139, 52,
01234 -1, 216, 85, 52, -1, 216, 139, 56, -1, 216,
01235 85, 56, -1, 86, 56, -1, 287, -1, 283, -1,
01236 284, -1, 216, 138, 191, 317, -1, 216, 139, 52,
01237 -1, 216, 85, 52, -1, 216, 139, 56, -1, 216,
01238 85, 56, -1, 86, 56, -1, 287, -1, 52, -1,
01239 56, -1, 86, 176, -1, 176, -1, 216, 85, 176,
01240 -1, 52, -1, 56, -1, 53, -1, 183, -1, 184,
01241 -1, 178, -1, 279, -1, 179, -1, 281, -1, 180,
01242 -1, -1, 181, 140, 182, 180, -1, 114, -1, 115,
01243 -1, 116, -1, 69, -1, 70, -1, 71, -1, 77,
01244 -1, 78, -1, 112, -1, 73, -1, 113, -1, 74,
01245 -1, 72, -1, 83, -1, 84, -1, 117, -1, 118,
01246 -1, 119, -1, 95, -1, 120, -1, 121, -1, 68,
01247 -1, 123, -1, 124, -1, 66, -1, 67, -1, 81,
01248 -1, 82, -1, 141, -1, 49, -1, 50, -1, 51,
01249 -1, 47, -1, 48, -1, 45, -1, 37, -1, 7,
01250 -1, 21, -1, 16, -1, 3, -1, 5, -1, 46,
01251 -1, 26, -1, 15, -1, 14, -1, 10, -1, 9,
01252 -1, 36, -1, 20, -1, 25, -1, 4, -1, 22,
01253 -1, 34, -1, 39, -1, 38, -1, 23, -1, 8,
01254 -1, 24, -1, 30, -1, 33, -1, 32, -1, 13,
01255 -1, 35, -1, 6, -1, 17, -1, 31, -1, 11,
01256 -1, 12, -1, 18, -1, 19, -1, 175, 109, 185,
01257 -1, 175, 109, 185, 44, 185, -1, 286, 87, 185,
01258 -1, 286, 87, 185, 44, 185, -1, 216, 138, 191,
01259 317, 87, 185, -1, 216, 139, 52, 87, 185, -1,
01260 216, 139, 56, 87, 185, -1, 216, 85, 52, 87,
01261 185, -1, 216, 85, 56, 87, 185, -1, 86, 56,
01262 87, 185, -1, 287, 87, 185, -1, 185, 79, 185,
01263 -1, 185, 80, 185, -1, 185, 117, 185, -1, 185,
01264 118, 185, -1, 185, 119, 185, -1, 185, 120, 185,
01265 -1, 185, 121, 185, -1, 185, 68, 185, -1, 122,
01266 59, 68, 185, -1, 122, 60, 68, 185, -1, 66,
01267 185, -1, 67, 185, -1, 185, 114, 185, -1, 185,
01268 115, 185, -1, 185, 116, 185, -1, 185, 69, 185,
01269 -1, 185, 112, 185, -1, 185, 73, 185, -1, 185,
01270 113, 185, -1, 185, 74, 185, -1, 185, 70, 185,
01271 -1, 185, 71, 185, -1, 185, 72, 185, -1, 185,
01272 77, 185, -1, 185, 78, 185, -1, 123, 185, -1,
01273 124, 185, -1, 185, 83, 185, -1, 185, 84, 185,
01274 -1, 185, 75, 185, -1, 185, 76, 185, -1, -1,
01275 46, 315, 186, 185, -1, 185, 110, 185, 315, 111,
01276 185, -1, 199, -1, 185, -1, 321, -1, 197, 318,
01277 -1, 197, 140, 308, 318, -1, 308, 318, -1, 142,
01278 191, 316, -1, 321, -1, 189, -1, 321, -1, 192,
01279 -1, 197, 140, -1, 197, 140, 308, 140, -1, 308,
01280 140, -1, 167, -1, 197, 196, -1, 308, 196, -1,
01281 197, 140, 308, 196, -1, 195, -1, -1, 194, 192,
01282 -1, 96, 187, -1, 140, 195, -1, 321, -1, 187,
01283 -1, 95, 187, -1, 197, 140, 187, -1, 197, 140,
01284 95, 187, -1, 197, 140, 187, -1, 197, 140, 95,
01285 187, -1, 95, 187, -1, 260, -1, 261, -1, 264,
01286 -1, 265, -1, 266, -1, 269, -1, 285, -1, 287,
01287 -1, 53, -1, -1, 217, 200, 155, 227, -1, -1,
01288 90, 161, 201, 316, -1, 89, 156, 143, -1, 216,
01289 85, 56, -1, 86, 56, -1, 92, 188, 144, -1,
01290 93, 307, 137, -1, 30, -1, 31, 142, 192, 316,
01291 -1, 31, 142, 316, -1, 31, -1, -1, 46, 315,
01292 142, 202, 161, 316, -1, 39, 142, 161, 316, -1,
01293 39, 142, 316, -1, 310, 251, -1, 250, -1, 250,
01294 251, -1, 97, 242, -1, 218, 162, 228, 156, 230,
01295 227, -1, 219, 162, 228, 156, 231, 227, -1, -1,
01296 -1, 220, 203, 162, 229, 204, 156, 227, -1, -1,
01297 -1, 221, 205, 162, 229, 206, 156, 227, -1, 222,
01298 162, 314, 254, 227, -1, 222, 314, 254, 227, -1,
01299 -1, -1, 223, 232, 25, 207, 162, 229, 208, 156,
01300 227, -1, -1, 224, 177, 288, 209, 155, 227, -1,
01301 -1, -1, 224, 83, 161, 210, 319, 211, 155, 227,
01302 -1, -1, 225, 177, 212, 155, 227, -1, -1, 226,
01303 178, 213, 290, 155, 227, -1, -1, -1, 226, 305,
01304 313, 214, 178, 215, 290, 155, 227, -1, 21, -1,
01305 22, -1, 23, -1, 24, -1, 199, -1, 7, -1,
01306 11, -1, 12, -1, 18, -1, 19, -1, 16, -1,
01307 20, -1, 3, -1, 4, -1, 5, -1, 10, -1,
01308 319, -1, 13, -1, 319, 13, -1, 319, -1, 27,
01309 -1, 231, -1, 14, 162, 228, 156, 230, -1, 321,
01310 -1, 15, 156, -1, 175, -1, 168, -1, 293, -1,
01311 89, 235, 316, -1, 233, -1, 234, 140, 233, -1,
01312 234, -1, 234, 140, 95, 293, -1, 234, 140, 95,
01313 293, 140, 234, -1, 234, 140, 95, -1, 234, 140,
01314 95, 140, 234, -1, 95, 293, -1, 95, 293, 140,
01315 234, -1, 95, -1, 95, 140, 234, -1, 295, 140,
01316 298, 140, 301, 304, -1, 295, 140, 298, 140, 301,
01317 140, 295, 304, -1, 295, 140, 298, 304, -1, 295,
01318 140, 298, 140, 295, 304, -1, 295, 140, 301, 304,
01319 -1, 295, 140, -1, 295, 140, 301, 140, 295, 304,
01320 -1, 295, 304, -1, 298, 140, 301, 304, -1, 298,
01321 140, 301, 140, 295, 304, -1, 298, 304, -1, 298,
01322 140, 295, 304, -1, 301, 304, -1, 301, 140, 295,
01323 304, -1, 303, -1, 321, -1, 238, -1, 114, 239,
01324 114, -1, 76, -1, 114, 236, 239, 114, -1, 321,
01325 -1, 145, 240, -1, 241, -1, 240, 140, 241, -1,
01326 52, -1, 292, -1, -1, -1, 243, 244, 245, 246,
01327 -1, 142, 291, 239, 316, -1, 291, -1, 107, 156,
01328 137, -1, 29, 156, 10, -1, -1, 28, 248, 237,
01329 156, 10, -1, 167, 247, -1, 249, 139, 311, 190,
01330 -1, 249, 85, 311, 190, -1, 310, 189, -1, 216,
01331 139, 311, 190, -1, 216, 85, 311, 189, -1, 216,
01332 85, 312, -1, 216, 139, 189, -1, 216, 85, 189,
01333 -1, 32, 189, -1, 32, -1, 216, 138, 191, 317,
01334 -1, -1, 136, 252, 237, 156, 137, -1, -1, 26,
01335 253, 237, 156, 10, -1, 17, 197, 228, 156, 255,
01336 -1, 231, -1, 254, -1, 8, 257, 258, 228, 156,
01337 256, -1, 321, -1, 187, -1, 198, -1, 321, -1,
01338 88, 175, -1, 321, -1, 9, 156, -1, 321, -1,
01339 282, -1, 279, -1, 281, -1, 262, -1, 62, -1,
01340 263, -1, 262, 263, -1, 99, 271, 106, -1, 100,
01341 272, 106, -1, 101, 273, 65, -1, 102, 146, 106,
01342 -1, 102, 267, 106, -1, -1, 267, 268, 146, -1,
01343 274, -1, 268, 274, -1, 103, 146, 106, -1, 103,
01344 270, 106, -1, -1, 270, 61, 146, -1, -1, 271,
01345 274, -1, -1, 272, 274, -1, -1, 273, 274, -1,
01346 61, -1, -1, 105, 275, 278, -1, -1, -1, 104,
01347 276, 277, 156, 137, -1, 54, -1, 55, -1, 57,
01348 -1, 287, -1, 98, 280, -1, 178, -1, 55, -1,
01349 54, -1, 57, -1, 98, 272, 106, -1, 59, -1,
01350 60, -1, 122, 59, -1, 122, 60, -1, 52, -1,
01351 55, -1, 54, -1, 56, -1, 57, -1, 34, -1,
01352 33, -1, 35, -1, 36, -1, 50, -1, 49, -1,
01353 51, -1, 283, -1, 284, -1, 283, -1, 284, -1,
01354 63, -1, 64, -1, 319, -1, -1, 113, 289, 162,
01355 319, -1, 1, 319, -1, 142, 291, 316, -1, 291,
01356 319, -1, 295, 140, 299, 140, 301, 304, -1, 295,
01357 140, 299, 140, 301, 140, 295, 304, -1, 295, 140,
01358 299, 304, -1, 295, 140, 299, 140, 295, 304, -1,
01359 295, 140, 301, 304, -1, 295, 140, 301, 140, 295,
01360 304, -1, 295, 304, -1, 299, 140, 301, 304, -1,
01361 299, 140, 301, 140, 295, 304, -1, 299, 304, -1,
01362 299, 140, 295, 304, -1, 301, 304, -1, 301, 140,
01363 295, 304, -1, 303, -1, -1, 56, -1, 55, -1,
01364 54, -1, 57, -1, 292, -1, 52, -1, 293, -1,
01365 89, 235, 316, -1, 294, -1, 295, 140, 294, -1,
01366 52, 109, 187, -1, 52, 109, 216, -1, 297, -1,
01367 298, 140, 297, -1, 296, -1, 299, 140, 296, -1,
01368 119, -1, 95, -1, 300, 52, -1, 300, -1, 116,
01369 -1, 96, -1, 302, 52, -1, 140, 303, -1, 321,
01370 -1, 285, -1, -1, 142, 306, 161, 316, -1, 321,
01371 -1, 308, 318, -1, 309, -1, 308, 140, 309, -1,
01372 187, 88, 187, -1, 58, 187, -1, 52, -1, 56,
01373 -1, 53, -1, 52, -1, 56, -1, 53, -1, 183,
01374 -1, 52, -1, 53, -1, 183, -1, 139, -1, 85,
01375 -1, -1, 320, -1, -1, 147, -1, 315, 143, -1,
01376 315, 144, -1, -1, 147, -1, 140, -1, 145, -1,
01377 147, -1, 319, -1, 320, 145, -1, -1
01378 };
01379
01380
01381 static const yytype_uint16 yyrline[] =
01382 {
01383 0, 786, 786, 786, 817, 828, 837, 845, 853, 859,
01384 861, 860, 884, 917, 928, 937, 945, 953, 959, 959,
01385 967, 975, 986, 996, 1004, 1013, 1022, 1035, 1048, 1057,
01386 1069, 1070, 1080, 1109, 1130, 1147, 1164, 1175, 1192, 1202,
01387 1211, 1220, 1229, 1232, 1241, 1253, 1254, 1262, 1270, 1278,
01388 1286, 1289, 1301, 1302, 1305, 1306, 1315, 1327, 1326, 1348,
01389 1357, 1369, 1378, 1390, 1399, 1411, 1420, 1429, 1437, 1445,
01390 1455, 1456, 1466, 1467, 1477, 1485, 1493, 1501, 1510, 1518,
01391 1527, 1535, 1544, 1552, 1563, 1564, 1574, 1582, 1592, 1600,
01392 1610, 1614, 1618, 1626, 1634, 1642, 1650, 1662, 1672, 1684,
01393 1693, 1702, 1710, 1718, 1726, 1734, 1747, 1760, 1771, 1779,
01394 1782, 1790, 1798, 1808, 1809, 1810, 1811, 1816, 1827, 1828,
01395 1831, 1839, 1842, 1850, 1850, 1860, 1861, 1862, 1863, 1864,
01396 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874,
01397 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884,
01398 1885, 1886, 1887, 1888, 1891, 1891, 1891, 1892, 1892, 1893,
01399 1893, 1893, 1894, 1894, 1894, 1894, 1895, 1895, 1895, 1895,
01400 1896, 1896, 1896, 1897, 1897, 1897, 1897, 1898, 1898, 1898,
01401 1898, 1899, 1899, 1899, 1899, 1900, 1900, 1900, 1900, 1901,
01402 1901, 1901, 1901, 1902, 1902, 1905, 1914, 1924, 1953, 1984,
01403 2010, 2027, 2044, 2061, 2072, 2083, 2094, 2108, 2122, 2130,
01404 2138, 2146, 2154, 2162, 2170, 2179, 2188, 2196, 2204, 2212,
01405 2220, 2228, 2236, 2244, 2252, 2260, 2268, 2276, 2284, 2292,
01406 2303, 2311, 2319, 2327, 2335, 2343, 2351, 2359, 2359, 2369,
01407 2379, 2385, 2397, 2398, 2402, 2410, 2420, 2430, 2431, 2434,
01408 2435, 2436, 2440, 2448, 2458, 2467, 2475, 2485, 2494, 2503,
01409 2503, 2515, 2525, 2529, 2535, 2543, 2551, 2565, 2581, 2595,
01410 2610, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628,
01411 2637, 2636, 2661, 2661, 2670, 2678, 2686, 2694, 2707, 2715,
01412 2723, 2731, 2739, 2747, 2747, 2757, 2765, 2773, 2784, 2785,
01413 2796, 2800, 2812, 2824, 2824, 2824, 2835, 2835, 2835, 2846,
01414 2857, 2866, 2868, 2865, 2932, 2931, 2953, 2958, 2952, 2977,
01415 2976, 2998, 2997, 3020, 3021, 3020, 3041, 3049, 3057, 3065,
01416 3075, 3087, 3093, 3099, 3105, 3111, 3117, 3123, 3129, 3135,
01417 3141, 3151, 3157, 3162, 3163, 3170, 3175, 3178, 3179, 3192,
01418 3193, 3203, 3204, 3207, 3215, 3225, 3233, 3243, 3251, 3260,
01419 3269, 3277, 3285, 3294, 3306, 3314, 3324, 3332, 3340, 3348,
01420 3356, 3364, 3373, 3381, 3389, 3397, 3405, 3413, 3421, 3429,
01421 3437, 3447, 3448, 3454, 3463, 3472, 3483, 3484, 3494, 3501,
01422 3510, 3518, 3524, 3527, 3524, 3545, 3553, 3563, 3567, 3574,
01423 3573, 3594, 3610, 3619, 3630, 3639, 3649, 3659, 3667, 3678,
01424 3689, 3697, 3705, 3720, 3719, 3739, 3738, 3759, 3771, 3772,
01425 3775, 3794, 3797, 3805, 3813, 3816, 3820, 3823, 3831, 3834,
01426 3835, 3843, 3846, 3863, 3864, 3865, 3875, 3885, 3912, 3977,
01427 3986, 3997, 4004, 4014, 4022, 4032, 4041, 4052, 4059, 4070,
01428 4077, 4088, 4095, 4106, 4113, 4142, 4144, 4143, 4160, 4166,
01429 4159, 4185, 4193, 4201, 4209, 4212, 4223, 4224, 4225, 4226,
01430 4229, 4259, 4260, 4261, 4269, 4279, 4280, 4281, 4282, 4283,
01431 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4295, 4308, 4318,
01432 4326, 4336, 4337, 4340, 4349, 4348, 4356, 4368, 4378, 4386,
01433 4394, 4402, 4410, 4418, 4426, 4434, 4442, 4450, 4458, 4466,
01434 4474, 4482, 4490, 4499, 4508, 4517, 4526, 4535, 4546, 4547,
01435 4554, 4563, 4582, 4589, 4602, 4614, 4626, 4634, 4650, 4658,
01436 4674, 4675, 4678, 4691, 4702, 4703, 4706, 4723, 4727, 4737,
01437 4747, 4747, 4776, 4777, 4787, 4794, 4804, 4812, 4822, 4823,
01438 4824, 4827, 4828, 4829, 4830, 4833, 4834, 4835, 4838, 4843,
01439 4850, 4851, 4854, 4855, 4858, 4861, 4864, 4865, 4866, 4869,
01440 4870, 4873, 4874, 4878
01441 };
01442 #endif
01443
01444 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
01445
01446
01447 static const char *const yytname[] =
01448 {
01449 "$end", "error", "$undefined", "keyword_class", "keyword_module",
01450 "keyword_def", "keyword_undef", "keyword_begin", "keyword_rescue",
01451 "keyword_ensure", "keyword_end", "keyword_if", "keyword_unless",
01452 "keyword_then", "keyword_elsif", "keyword_else", "keyword_case",
01453 "keyword_when", "keyword_while", "keyword_until", "keyword_for",
01454 "keyword_break", "keyword_next", "keyword_redo", "keyword_retry",
01455 "keyword_in", "keyword_do", "keyword_do_cond", "keyword_do_block",
01456 "keyword_do_LAMBDA", "keyword_return", "keyword_yield", "keyword_super",
01457 "keyword_self", "keyword_nil", "keyword_true", "keyword_false",
01458 "keyword_and", "keyword_or", "keyword_not", "modifier_if",
01459 "modifier_unless", "modifier_while", "modifier_until", "modifier_rescue",
01460 "keyword_alias", "keyword_defined", "keyword_BEGIN", "keyword_END",
01461 "keyword__LINE__", "keyword__FILE__", "keyword__ENCODING__",
01462 "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tCVAR", "tLABEL",
01463 "tINTEGER", "tFLOAT", "tSTRING_CONTENT", "tCHAR", "tNTH_REF",
01464 "tBACK_REF", "tREGEXP_END", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ",
01465 "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH",
01466 "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2",
01467 "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN_ARG", "tRPAREN",
01468 "tLBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tAMPER", "tLAMBDA",
01469 "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG",
01470 "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG",
01471 "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'",
01472 "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "idNULL",
01473 "idRespond_to", "idIFUNC", "idCFUNC", "id_core_set_method_alias",
01474 "id_core_set_variable_alias", "id_core_undef_method",
01475 "id_core_define_method", "id_core_define_singleton_method",
01476 "id_core_set_postexe", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'", "','",
01477 "'`'", "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program",
01478 "$@1", "top_compstmt", "top_stmts", "top_stmt", "$@2", "bodystmt",
01479 "compstmt", "stmts", "stmt", "$@3", "command_asgn", "expr", "expr_value",
01480 "command_call", "block_command", "cmd_brace_block", "@4", "command",
01481 "mlhs", "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head",
01482 "mlhs_post", "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym",
01483 "fitem", "undef_list", "$@5", "op", "reswords", "arg", "$@6",
01484 "arg_value", "aref_args", "paren_args", "opt_paren_args",
01485 "opt_call_args", "call_args", "command_args", "@7", "block_arg",
01486 "opt_block_arg", "args", "mrhs", "primary", "@8", "$@9", "$@10", "$@11",
01487 "$@12", "$@13", "$@14", "$@15", "$@16", "@17", "@18", "@19", "@20",
01488 "@21", "$@22", "$@23", "primary_value", "k_begin", "k_if", "k_unless",
01489 "k_while", "k_until", "k_case", "k_for", "k_class", "k_module", "k_def",
01490 "k_end", "then", "do", "if_tail", "opt_else", "for_var", "f_marg",
01491 "f_marg_list", "f_margs", "block_param", "opt_block_param",
01492 "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "lambda", "@24",
01493 "@25", "f_larglist", "lambda_body", "do_block", "@26", "block_call",
01494 "method_call", "brace_block", "@27", "@28", "case_body", "cases",
01495 "opt_rescue", "exc_list", "exc_var", "opt_ensure", "literal", "strings",
01496 "string", "string1", "xstring", "regexp", "words", "word_list", "word",
01497 "qwords", "qword_list", "string_contents", "xstring_contents",
01498 "regexp_contents", "string_content", "@29", "@30", "@31", "string_dvar",
01499 "symbol", "sym", "dsym", "numeric", "user_variable", "keyword_variable",
01500 "var_ref", "var_lhs", "backref", "superclass", "$@32", "f_arglist",
01501 "f_args", "f_bad_arg", "f_norm_arg", "f_arg_item", "f_arg", "f_opt",
01502 "f_block_opt", "f_block_optarg", "f_optarg", "restarg_mark",
01503 "f_rest_arg", "blkarg_mark", "f_block_arg", "opt_f_block_arg",
01504 "singleton", "$@33", "assoc_list", "assocs", "assoc", "operation",
01505 "operation2", "operation3", "dot_or_colon", "opt_terms", "opt_nl",
01506 "rparen", "rbracket", "trailer", "term", "terms", "none", 0
01507 };
01508 #endif
01509
01510 # ifdef YYPRINT
01511
01512
01513 static const yytype_uint16 yytoknum[] =
01514 {
01515 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
01516 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
01517 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
01518 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
01519 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
01520 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
01521 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
01522 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
01523 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
01524 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
01525 355, 356, 357, 358, 359, 360, 361, 362, 363, 61,
01526 63, 58, 62, 60, 124, 94, 38, 43, 45, 42,
01527 47, 37, 364, 33, 126, 365, 366, 367, 368, 369,
01528 370, 371, 372, 373, 374, 375, 123, 125, 91, 46,
01529 44, 96, 40, 41, 93, 59, 32, 10
01530 };
01531 # endif
01532
01533
01534 static const yytype_uint16 yyr1[] =
01535 {
01536 0, 148, 150, 149, 151, 152, 152, 152, 152, 153,
01537 154, 153, 155, 156, 157, 157, 157, 157, 159, 158,
01538 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
01539 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
01540 158, 158, 158, 160, 160, 161, 161, 161, 161, 161,
01541 161, 162, 163, 163, 164, 164, 164, 166, 165, 167,
01542 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
01543 168, 168, 169, 169, 170, 170, 170, 170, 170, 170,
01544 170, 170, 170, 170, 171, 171, 172, 172, 173, 173,
01545 174, 174, 174, 174, 174, 174, 174, 174, 174, 175,
01546 175, 175, 175, 175, 175, 175, 175, 175, 176, 176,
01547 177, 177, 177, 178, 178, 178, 178, 178, 179, 179,
01548 180, 180, 181, 182, 181, 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, 183, 183, 183, 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, 184, 184, 185, 185, 185, 185, 185,
01556 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
01557 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
01558 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
01559 185, 185, 185, 185, 185, 185, 185, 186, 185, 185,
01560 185, 187, 188, 188, 188, 188, 189, 190, 190, 191,
01561 191, 191, 191, 191, 192, 192, 192, 192, 192, 194,
01562 193, 195, 196, 196, 197, 197, 197, 197, 198, 198,
01563 198, 199, 199, 199, 199, 199, 199, 199, 199, 199,
01564 200, 199, 201, 199, 199, 199, 199, 199, 199, 199,
01565 199, 199, 199, 202, 199, 199, 199, 199, 199, 199,
01566 199, 199, 199, 203, 204, 199, 205, 206, 199, 199,
01567 199, 207, 208, 199, 209, 199, 210, 211, 199, 212,
01568 199, 213, 199, 214, 215, 199, 199, 199, 199, 199,
01569 216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
01570 226, 227, 228, 228, 228, 229, 229, 230, 230, 231,
01571 231, 232, 232, 233, 233, 234, 234, 235, 235, 235,
01572 235, 235, 235, 235, 235, 235, 236, 236, 236, 236,
01573 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
01574 236, 237, 237, 238, 238, 238, 239, 239, 240, 240,
01575 241, 241, 243, 244, 242, 245, 245, 246, 246, 248,
01576 247, 249, 249, 249, 250, 250, 250, 250, 250, 250,
01577 250, 250, 250, 252, 251, 253, 251, 254, 255, 255,
01578 256, 256, 257, 257, 257, 258, 258, 259, 259, 260,
01579 260, 260, 261, 262, 262, 262, 263, 264, 265, 266,
01580 266, 267, 267, 268, 268, 269, 269, 270, 270, 271,
01581 271, 272, 272, 273, 273, 274, 275, 274, 276, 277,
01582 274, 278, 278, 278, 278, 279, 280, 280, 280, 280,
01583 281, 282, 282, 282, 282, 283, 283, 283, 283, 283,
01584 284, 284, 284, 284, 284, 284, 284, 285, 285, 286,
01585 286, 287, 287, 288, 289, 288, 288, 290, 290, 291,
01586 291, 291, 291, 291, 291, 291, 291, 291, 291, 291,
01587 291, 291, 291, 291, 292, 292, 292, 292, 293, 293,
01588 294, 294, 295, 295, 296, 297, 298, 298, 299, 299,
01589 300, 300, 301, 301, 302, 302, 303, 304, 304, 305,
01590 306, 305, 307, 307, 308, 308, 309, 309, 310, 310,
01591 310, 311, 311, 311, 311, 312, 312, 312, 313, 313,
01592 314, 314, 315, 315, 316, 317, 318, 318, 318, 319,
01593 319, 320, 320, 321
01594 };
01595
01596
01597 static const yytype_uint8 yyr2[] =
01598 {
01599 0, 2, 0, 2, 2, 1, 1, 3, 2, 1,
01600 0, 5, 4, 2, 1, 1, 3, 2, 0, 4,
01601 3, 3, 3, 2, 3, 3, 3, 3, 3, 4,
01602 1, 3, 3, 6, 5, 5, 5, 5, 3, 3,
01603 3, 3, 1, 3, 3, 1, 3, 3, 3, 2,
01604 1, 1, 1, 1, 1, 4, 4, 0, 5, 2,
01605 3, 4, 5, 4, 5, 2, 2, 2, 2, 2,
01606 1, 3, 1, 3, 1, 2, 3, 5, 2, 4,
01607 2, 4, 1, 3, 1, 3, 2, 3, 1, 3,
01608 1, 1, 4, 3, 3, 3, 3, 2, 1, 1,
01609 1, 4, 3, 3, 3, 3, 2, 1, 1, 1,
01610 2, 1, 3, 1, 1, 1, 1, 1, 1, 1,
01611 1, 1, 1, 0, 4, 1, 1, 1, 1, 1,
01612 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01613 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01614 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01615 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01616 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01617 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01618 1, 1, 1, 1, 1, 3, 5, 3, 5, 6,
01619 5, 5, 5, 5, 4, 3, 3, 3, 3, 3,
01620 3, 3, 3, 3, 4, 4, 2, 2, 3, 3,
01621 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
01622 3, 2, 2, 3, 3, 3, 3, 0, 4, 6,
01623 1, 1, 1, 2, 4, 2, 3, 1, 1, 1,
01624 1, 2, 4, 2, 1, 2, 2, 4, 1, 0,
01625 2, 2, 2, 1, 1, 2, 3, 4, 3, 4,
01626 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01627 0, 4, 0, 4, 3, 3, 2, 3, 3, 1,
01628 4, 3, 1, 0, 6, 4, 3, 2, 1, 2,
01629 2, 6, 6, 0, 0, 7, 0, 0, 7, 5,
01630 4, 0, 0, 9, 0, 6, 0, 0, 8, 0,
01631 5, 0, 6, 0, 0, 9, 1, 1, 1, 1,
01632 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01633 1, 1, 1, 1, 2, 1, 1, 1, 5, 1,
01634 2, 1, 1, 1, 3, 1, 3, 1, 4, 6,
01635 3, 5, 2, 4, 1, 3, 6, 8, 4, 6,
01636 4, 2, 6, 2, 4, 6, 2, 4, 2, 4,
01637 1, 1, 1, 3, 1, 4, 1, 2, 1, 3,
01638 1, 1, 0, 0, 4, 4, 1, 3, 3, 0,
01639 5, 2, 4, 4, 2, 4, 4, 3, 3, 3,
01640 2, 1, 4, 0, 5, 0, 5, 5, 1, 1,
01641 6, 1, 1, 1, 1, 2, 1, 2, 1, 1,
01642 1, 1, 1, 1, 1, 2, 3, 3, 3, 3,
01643 3, 0, 3, 1, 2, 3, 3, 0, 3, 0,
01644 2, 0, 2, 0, 2, 1, 0, 3, 0, 0,
01645 5, 1, 1, 1, 1, 2, 1, 1, 1, 1,
01646 3, 1, 1, 2, 2, 1, 1, 1, 1, 1,
01647 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01648 1, 1, 1, 1, 0, 4, 2, 3, 2, 6,
01649 8, 4, 6, 4, 6, 2, 4, 6, 2, 4,
01650 2, 4, 1, 0, 1, 1, 1, 1, 1, 1,
01651 1, 3, 1, 3, 3, 3, 1, 3, 1, 3,
01652 1, 1, 2, 1, 1, 1, 2, 2, 1, 1,
01653 0, 4, 1, 2, 1, 3, 3, 2, 1, 1,
01654 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01655 0, 1, 0, 1, 2, 2, 0, 1, 1, 1,
01656 1, 1, 2, 0
01657 };
01658
01659
01660
01661
01662 static const yytype_uint16 yydefact[] =
01663 {
01664 2, 0, 0, 1, 0, 338, 339, 340, 0, 331,
01665 332, 333, 336, 334, 335, 337, 326, 327, 328, 329,
01666 289, 259, 259, 481, 480, 482, 483, 562, 0, 562,
01667 10, 0, 485, 484, 486, 475, 550, 477, 476, 478,
01668 479, 471, 472, 433, 491, 492, 0, 0, 0, 0,
01669 0, 573, 573, 82, 392, 451, 449, 451, 453, 441,
01670 447, 0, 0, 0, 3, 560, 6, 9, 30, 42,
01671 45, 53, 52, 0, 70, 0, 74, 84, 0, 50,
01672 240, 0, 280, 0, 0, 303, 306, 560, 0, 0,
01673 0, 0, 54, 298, 271, 272, 432, 434, 273, 274,
01674 275, 276, 430, 431, 429, 487, 488, 277, 0, 278,
01675 259, 5, 8, 164, 175, 165, 188, 161, 181, 171,
01676 170, 191, 192, 186, 169, 168, 163, 189, 193, 194,
01677 173, 162, 176, 180, 182, 174, 167, 183, 190, 185,
01678 184, 177, 187, 172, 160, 179, 178, 159, 166, 157,
01679 158, 154, 155, 156, 113, 115, 114, 149, 150, 146,
01680 128, 129, 130, 137, 134, 136, 131, 132, 151, 152,
01681 138, 139, 143, 133, 135, 125, 126, 127, 140, 141,
01682 142, 144, 145, 147, 148, 153, 118, 120, 122, 23,
01683 116, 117, 119, 121, 0, 0, 0, 0, 0, 0,
01684 0, 254, 0, 241, 264, 68, 258, 573, 0, 487,
01685 488, 0, 278, 573, 544, 69, 67, 562, 66, 0,
01686 573, 410, 65, 562, 563, 0, 0, 18, 237, 0,
01687 0, 326, 327, 289, 292, 411, 216, 0, 0, 217,
01688 286, 0, 0, 0, 560, 15, 562, 72, 14, 282,
01689 0, 566, 566, 242, 0, 0, 566, 542, 562, 0,
01690 0, 0, 80, 330, 0, 90, 91, 98, 300, 393,
01691 468, 467, 469, 466, 0, 465, 0, 0, 0, 0,
01692 0, 0, 0, 473, 474, 49, 231, 232, 569, 570,
01693 4, 571, 561, 0, 0, 0, 0, 0, 0, 0,
01694 399, 401, 0, 86, 0, 78, 75, 0, 0, 0,
01695 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
01696 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
01697 0, 0, 0, 0, 0, 573, 0, 0, 51, 0,
01698 0, 0, 0, 560, 0, 561, 0, 352, 351, 0,
01699 0, 487, 488, 278, 108, 109, 0, 0, 111, 0,
01700 0, 487, 488, 278, 319, 184, 177, 187, 172, 154,
01701 155, 156, 113, 114, 540, 321, 539, 0, 0, 0,
01702 415, 413, 299, 435, 0, 0, 404, 59, 297, 123,
01703 547, 286, 265, 261, 0, 0, 0, 255, 263, 0,
01704 573, 0, 0, 0, 0, 256, 562, 0, 291, 260,
01705 562, 250, 573, 573, 249, 562, 296, 48, 20, 22,
01706 21, 0, 293, 0, 0, 0, 0, 0, 0, 17,
01707 562, 284, 13, 561, 71, 562, 287, 568, 567, 243,
01708 568, 245, 288, 543, 0, 97, 473, 474, 88, 83,
01709 0, 0, 573, 0, 513, 455, 458, 456, 470, 452,
01710 436, 450, 437, 438, 454, 439, 440, 0, 443, 445,
01711 0, 446, 0, 0, 572, 7, 24, 25, 26, 27,
01712 28, 46, 47, 573, 0, 31, 40, 0, 41, 562,
01713 0, 76, 87, 44, 43, 0, 195, 264, 39, 213,
01714 221, 226, 227, 228, 223, 225, 235, 236, 229, 230,
01715 206, 207, 233, 234, 562, 222, 224, 218, 219, 220,
01716 208, 209, 210, 211, 212, 551, 556, 552, 557, 409,
01717 259, 407, 562, 551, 553, 552, 554, 408, 259, 0,
01718 573, 343, 0, 342, 0, 0, 0, 0, 0, 0,
01719 286, 0, 573, 0, 311, 316, 108, 109, 110, 0,
01720 494, 314, 493, 0, 573, 0, 0, 0, 513, 559,
01721 558, 323, 551, 552, 259, 259, 573, 573, 32, 197,
01722 38, 205, 57, 60, 0, 195, 546, 0, 266, 262,
01723 573, 555, 552, 562, 551, 552, 545, 290, 564, 246,
01724 251, 253, 295, 19, 0, 238, 0, 29, 0, 573,
01725 204, 73, 16, 283, 566, 0, 81, 94, 96, 562,
01726 551, 552, 519, 516, 515, 514, 517, 0, 531, 535,
01727 534, 530, 513, 0, 396, 518, 520, 522, 573, 528,
01728 573, 533, 573, 0, 512, 459, 0, 442, 444, 448,
01729 214, 215, 384, 573, 0, 382, 381, 270, 0, 85,
01730 79, 0, 0, 0, 0, 0, 0, 406, 63, 0,
01731 412, 0, 0, 248, 405, 61, 247, 341, 281, 573,
01732 573, 421, 573, 344, 573, 346, 304, 345, 307, 0,
01733 0, 310, 555, 285, 562, 551, 552, 0, 0, 496,
01734 0, 0, 108, 109, 112, 562, 0, 562, 513, 0,
01735 0, 0, 403, 56, 402, 55, 0, 0, 0, 573,
01736 124, 267, 257, 0, 0, 412, 0, 0, 573, 562,
01737 11, 244, 89, 92, 0, 519, 0, 364, 355, 357,
01738 562, 353, 573, 0, 0, 394, 0, 505, 538, 0,
01739 508, 532, 0, 510, 536, 0, 461, 462, 463, 457,
01740 464, 519, 0, 573, 0, 573, 526, 573, 573, 380,
01741 386, 0, 0, 268, 77, 196, 0, 37, 202, 36,
01742 203, 64, 565, 0, 34, 200, 35, 201, 62, 422,
01743 423, 573, 424, 0, 573, 349, 0, 0, 347, 0,
01744 0, 0, 309, 0, 0, 412, 0, 317, 0, 0,
01745 412, 320, 541, 562, 0, 498, 324, 0, 0, 198,
01746 0, 0, 252, 294, 524, 562, 0, 362, 0, 521,
01747 562, 0, 0, 523, 573, 573, 537, 573, 529, 573,
01748 573, 0, 0, 390, 387, 388, 391, 0, 383, 371,
01749 373, 0, 376, 0, 378, 400, 269, 239, 33, 199,
01750 0, 0, 426, 350, 0, 12, 428, 0, 301, 302,
01751 0, 0, 266, 573, 312, 0, 495, 315, 497, 322,
01752 513, 416, 414, 0, 354, 365, 0, 360, 356, 395,
01753 398, 397, 0, 501, 0, 503, 0, 509, 0, 506,
01754 511, 460, 0, 525, 0, 385, 573, 573, 573, 527,
01755 573, 573, 0, 425, 0, 99, 100, 107, 0, 427,
01756 0, 305, 308, 418, 419, 417, 0, 0, 0, 58,
01757 0, 363, 0, 358, 573, 573, 573, 573, 286, 0,
01758 389, 0, 368, 0, 370, 377, 0, 374, 379, 106,
01759 0, 573, 0, 573, 573, 0, 318, 0, 361, 0,
01760 502, 0, 499, 504, 507, 555, 285, 573, 573, 573,
01761 573, 555, 105, 562, 551, 552, 420, 348, 313, 325,
01762 359, 573, 369, 0, 366, 372, 375, 412, 500, 573,
01763 367
01764 };
01765
01766
01767 static const yytype_int16 yydefgoto[] =
01768 {
01769 -1, 1, 2, 64, 65, 66, 229, 539, 540, 244,
01770 245, 421, 68, 69, 339, 70, 71, 583, 719, 72,
01771 73, 246, 74, 75, 76, 449, 77, 202, 358, 359,
01772 186, 187, 188, 189, 584, 536, 191, 79, 423, 204,
01773 250, 529, 674, 410, 411, 218, 219, 206, 397, 412,
01774 488, 80, 337, 435, 604, 341, 800, 342, 801, 697,
01775 926, 701, 698, 875, 566, 568, 711, 880, 237, 82,
01776 83, 84, 85, 86, 87, 88, 89, 90, 91, 678,
01777 542, 686, 797, 798, 350, 738, 739, 740, 763, 654,
01778 655, 764, 844, 845, 268, 269, 454, 633, 745, 301,
01779 483, 92, 93, 388, 577, 576, 549, 925, 680, 791,
01780 861, 865, 94, 95, 96, 97, 98, 99, 100, 280,
01781 467, 101, 282, 276, 274, 278, 459, 646, 645, 755,
01782 759, 102, 275, 103, 104, 209, 210, 107, 211, 212,
01783 561, 700, 709, 710, 635, 636, 637, 638, 639, 766,
01784 767, 640, 641, 642, 643, 836, 747, 377, 567, 255,
01785 413, 214, 238, 608, 531, 571, 290, 407, 408, 670,
01786 439, 543, 345, 248
01787 };
01788
01789
01790
01791 #define YYPACT_NINF -747
01792 static const yytype_int16 yypact[] =
01793 {
01794 -747, 81, 2552, -747, 7102, -747, -747, -747, 6615, -747,
01795 -747, -747, -747, -747, -747, -747, 7320, 7320, -747, -747,
01796 7320, 3237, 2814, -747, -747, -747, -747, 100, 6476, -31,
01797 -747, -26, -747, -747, -747, 5715, 2955, -747, -747, 5842,
01798 -747, -747, -747, -747, -747, -747, 8519, 8519, 83, 4434,
01799 8628, 7538, 7865, 6878, -747, 6337, -747, -747, -747, -24,
01800 29, 252, 8737, 8519, -747, 193, -747, 1104, -747, 458,
01801 -747, -747, 129, 77, -747, 69, 8846, -747, 139, 2797,
01802 22, 41, -747, 8628, 8628, -747, -747, 5078, 8951, 9056,
01803 9161, 5588, 33, 46, -747, -747, 157, -747, -747, -747,
01804 -747, -747, -747, -747, -747, 25, 58, -747, 179, 613,
01805 51, -747, -747, -747, -747, -747, -747, -747, -747, -747,
01806 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747,
01807 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747,
01808 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747,
01809 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747,
01810 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747,
01811 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747,
01812 -747, -747, -747, -747, -747, -747, -747, -747, -747, 134,
01813 -747, -747, -747, -747, 182, 8519, 279, 4564, 8519, 8519,
01814 8519, -747, 263, 2797, 260, -747, -747, 237, 207, 43,
01815 206, 298, 254, 265, -747, -747, -747, 4969, -747, 7320,
01816 7320, -747, -747, 5208, -747, 8628, 661, -747, 272, 287,
01817 4694, -747, -747, -747, 295, 307, -747, 304, 51, 416,
01818 619, 7211, 4434, 384, 193, 1104, -31, 399, -747, 458,
01819 419, 221, 300, -747, 260, 430, 300, -747, -31, 497,
01820 501, 9266, 442, -747, 351, 366, 383, 409, -747, -747,
01821 -747, -747, -747, -747, 644, -747, 754, 813, 605, 464,
01822 819, 478, 68, 530, 532, -747, -747, -747, -747, -747,
01823 -747, -747, 5317, 8628, 8628, 8628, 8628, 7211, 8628, 8628,
01824 -747, -747, 7974, -747, 4434, 6990, 470, 7974, 8519, 8519,
01825 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519,
01826 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519,
01827 8519, 8519, 8519, 8519, 9548, 7320, 9625, 3609, 458, 86,
01828 86, 8628, 8628, 193, 597, 480, 562, -747, -747, 454,
01829 601, 54, 76, 99, 331, 349, 8628, 481, -747, 45,
01830 473, -747, -747, -747, -747, 217, 286, 305, 318, 321,
01831 347, 363, 376, 381, -747, -747, -747, 391, 10549, 10549,
01832 -747, -747, -747, -747, 8737, 8737, -747, 535, -747, -747,
01833 -747, 388, -747, -747, 8519, 8519, 7429, -747, -747, 9702,
01834 7320, 9779, 8519, 8519, 7647, -747, -31, 492, -747, -747,
01835 -31, -747, 506, 539, -747, 106, -747, -747, -747, -747,
01836 -747, 6615, -747, 8519, 4029, 508, 9702, 9779, 8519, 1104,
01837 -31, -747, -747, 5445, 541, -31, -747, 7756, -747, -747,
01838 7865, -747, -747, -747, 272, 510, -747, -747, -747, 543,
01839 9266, 9856, 7320, 9933, 774, -747, -747, -747, -747, -747,
01840 -747, -747, -747, -747, -747, -747, -747, 313, -747, -747,
01841 491, -747, 8519, 8519, -747, -747, -747, -747, -747, -747,
01842 -747, -747, -747, 32, 8519, -747, 545, 546, -747, -31,
01843 9266, 551, -747, -747, -747, 566, 9473, -747, -747, 416,
01844 2184, 2184, 2184, 2184, 781, 781, 2273, 2938, 2184, 2184,
01845 1364, 1364, 662, 662, 2656, 781, 781, 927, 927, 768,
01846 397, 397, 416, 416, 416, 3378, 6083, 3464, 6197, -747,
01847 307, -747, -31, 647, -747, 660, -747, -747, 3096, 650,
01848 688, -747, 3754, 685, 4174, 56, 56, 597, 8083, 650,
01849 112, 10010, 7320, 10087, -747, 458, -747, 510, -747, 193,
01850 -747, -747, -747, 10164, 7320, 10241, 3609, 8628, 1131, -747,
01851 -747, -747, -747, -747, 1739, 1739, 32, 32, -747, 10608,
01852 -747, 2797, -747, -747, 6615, 10627, -747, 8519, 260, -747,
01853 265, 5969, 2673, -31, 490, 500, -747, -747, -747, -747,
01854 7429, 7647, -747, -747, 8628, 2797, 570, -747, 307, 307,
01855 2797, 213, 1104, -747, 300, 9266, 543, 505, 282, -31,
01856 38, 261, 603, -747, -747, -747, -747, 972, -747, -747,
01857 -747, -747, 1223, 66, -747, -747, -747, -747, 580, -747,
01858 583, 683, 589, 687, -747, -747, 893, -747, -747, -747,
01859 416, 416, -747, 576, 4839, -747, -747, 604, 8192, -747,
01860 543, 9266, 8737, 8519, 630, 8737, 8737, -747, 535, 608,
01861 677, 8737, 8737, -747, -747, 535, -747, -747, -747, 8301,
01862 740, -747, 588, -747, 740, -747, -747, -747, -747, 650,
01863 44, -747, 239, 257, -31, 141, 145, 8628, 193, -747,
01864 8628, 3609, 505, 282, -747, -31, 650, 106, 1223, 3609,
01865 193, 6754, -747, -747, -747, -747, 4839, 4694, 8519, 32,
01866 -747, -747, -747, 8519, 8519, 507, 8519, 8519, 636, 106,
01867 -747, -747, -747, 291, 8519, -747, 972, 457, -747, 651,
01868 -31, -747, 639, 4839, 4694, -747, 1223, -747, -747, 1223,
01869 -747, -747, 598, -747, -747, 4694, -747, -747, -747, -747,
01870 -747, 681, 1017, 639, 679, 654, -747, 656, 657, -747,
01871 -747, 789, 8519, 664, 543, 2797, 8519, -747, 2797, -747,
01872 2797, -747, -747, 8737, -747, 2797, -747, 2797, -747, 545,
01873 -747, 713, -747, 4304, 796, -747, 8628, 650, -747, 650,
01874 4839, 4839, -747, 8410, 3899, 189, 56, -747, 193, 650,
01875 -747, -747, -747, -31, 650, -747, -747, 799, 673, 2797,
01876 4694, 8519, 7647, -747, -747, -31, 884, 671, 1079, -747,
01877 -31, 803, 686, -747, 676, 678, -747, 684, -747, 694,
01878 684, 690, 9371, -747, 699, -747, -747, 711, -747, 1251,
01879 -747, 1251, -747, 598, -747, -747, 700, 2797, -747, 2797,
01880 9476, 86, -747, -747, 4839, -747, -747, 86, -747, -747,
01881 650, 650, -747, 365, -747, 3609, -747, -747, -747, -747,
01882 1131, -747, -747, 706, -747, 707, 884, 716, -747, -747,
01883 -747, -747, 1223, -747, 598, -747, 598, -747, 598, -747,
01884 -747, -747, 790, 520, 1017, -747, 708, 715, 684, -747,
01885 717, 684, 797, -747, 523, 366, 383, 409, 3609, -747,
01886 3754, -747, -747, -747, -747, -747, 4839, 650, 3609, -747,
01887 884, 707, 884, 721, 684, 727, 684, 684, -747, 10318,
01888 -747, 1251, -747, 598, -747, -747, 598, -747, -747, 510,
01889 10395, 7320, 10472, 688, 588, 650, -747, 650, 707, 884,
01890 -747, 598, -747, -747, -747, 730, 731, 684, 735, 684,
01891 684, 55, 282, -31, 128, 158, -747, -747, -747, -747,
01892 707, 684, -747, 598, -747, -747, -747, 163, -747, 684,
01893 -747
01894 };
01895
01896
01897 static const yytype_int16 yypgoto[] =
01898 {
01899 -747, -747, -747, 452, -747, 28, -747, -545, 277, -747,
01900 39, -747, -293, 184, -58, 71, -747, -169, -747, -7,
01901 791, -142, -13, -37, -747, -396, -29, 1623, -312, 788,
01902 -54, -747, -25, -747, -747, 20, -747, 1066, -747, -45,
01903 -747, 11, 47, -324, 115, 5, -747, -322, -196, 53,
01904 -295, 8, -747, -747, -747, -747, -747, -747, -747, -747,
01905 -747, -747, -747, -747, -747, -747, -747, -747, 2, -747,
01906 -747, -747, -747, -747, -747, -747, -747, -747, -747, 205,
01907 -338, -516, -72, -618, -747, -722, -671, 147, -747, -489,
01908 -747, -600, -747, -12, -747, -747, -747, -747, -747, -747,
01909 -747, -747, -747, 798, -747, -747, -531, -747, -50, -747,
01910 -747, -747, -747, -747, -747, 811, -747, -747, -747, -747,
01911 -747, -747, -747, -747, 856, -747, -140, -747, -747, -747,
01912 -747, 7, -747, 12, -747, 1268, 1605, 823, 1289, 1575,
01913 -747, -747, 35, -387, -697, -568, -690, 273, -696, -746,
01914 72, 181, -747, -526, -747, -449, 270, -747, -747, -747,
01915 97, -360, 758, -276, -747, -747, -56, -4, 278, -585,
01916 -214, 6, -18, -2
01917 };
01918
01919
01920
01921
01922 #define YYTABLE_NINF -574
01923 static const yytype_int16 yytable[] =
01924 {
01925 111, 273, 544, 227, 81, 644, 81, 254, 725, 201,
01926 201, 532, 498, 201, 493, 192, 689, 405, 208, 208,
01927 193, 706, 208, 225, 262, 228, 340, 222, 190, 343,
01928 688, 344, 112, 221, 733, 192, 247, 375, 441, 306,
01929 193, 67, 443, 67, 596, 558, 559, 292, 190, 253,
01930 257, 81, 208, 838, 616, 264, 833, 541, 530, 741,
01931 538, 263, 794, -93, 208, 846, 799, 634, -103, 207,
01932 207, 291, 380, 207, 589, 190, 593, 380, 264, -99,
01933 596, 3, 589, 685, 263, 208, 208, 716, 717, 208,
01934 349, 360, 360, 291, 660, 743, 263, 263, 263, 541,
01935 430, -100, 574, 575, 251, 909, 888, -330, 652, 805,
01936 230, 190, -489, 213, 213, 387, 224, 213, 378, 644,
01937 810, 386, 279, 530, -107, 538, 334, 768, 619, 470,
01938 -489, 205, 215, 285, -99, 216, 461, -106, 464, 240,
01939 468, -102, 830, 298, 299, -490, 653, -93, 252, 256,
01940 390, 609, -99, 392, 393, 885, 809, 300, 560, 833,
01941 -330, -330, 489, 847, 814, -90, -102, -100, 741, 827,
01942 -104, -104, 379, 744, 471, 281, -101, 609, -93, 335,
01943 336, -93, 381, 644, 803, -93, 302, 381, 432, 288,
01944 288, 289, 289, 220, -90, 909, 838, -551, -91, 81,
01945 -103, 288, -103, 289, 769, 398, 833, 846, 888, 303,
01946 201, 398, 201, 201, -101, 931, -91, 405, 414, 208,
01947 835, 208, 208, 839, 448, 208, 433, 208, 694, 247,
01948 820, 288, 81, 289, 249, 476, 477, 478, 479, -98,
01949 705, 596, 223, 81, 81, 742, 221, 224, 307, 386,
01950 291, 704, -97, 224, 444, 923, 56, 486, 741, 644,
01951 741, 958, 497, 264, -103, 774, 384, 338, 338, 263,
01952 207, 338, 207, -102, 389, -102, 491, 609, 589, 589,
01953 429, -93, -105, 545, 546, -95, -95, 547, 980, 609,
01954 874, 247, 399, -490, 81, 208, 208, 208, 208, 81,
01955 208, 208, -481, -104, 208, -104, 81, 264, -101, 208,
01956 -101, 283, 284, 263, 213, -100, 213, -412, 741, 933,
01957 475, 813, -71, 907, 223, 910, 243, 648, 201, -92,
01958 927, 67, 406, 414, 409, 391, 480, 208, 288, 81,
01959 289, 403, 924, 208, 208, 400, 401, 537, 395, 291,
01960 586, 588, 804, -85, 528, 487, -481, -548, 208, 254,
01961 487, 437, 741, -107, 741, 562, 935, -285, 438, 493,
01962 -95, -480, 394, 485, 455, -549, -412, 396, 494, -94,
01963 793, -551, 548, 957, 790, 402, 208, 208, 987, 426,
01964 -482, 741, 588, 201, 722, 254, 603, -96, 414, -552,
01965 731, -95, 208, -483, -95, 404, -485, 415, -95, 417,
01966 398, 398, 537, 448, 422, 968, -475, 456, 457, 528,
01967 -285, -285, 111, 424, -552, -480, 81, -412, 192, -412,
01968 -412, 644, -484, 193, -478, 81, 451, 217, 537, 657,
01969 440, 190, 400, 427, -482, 201, 528, 438, -486, 220,
01970 414, -487, 264, 448, 208, 578, 580, -483, 263, 647,
01971 -485, -475, 596, 67, 537, 308, -478, -548, -488, -475,
01972 -475, 528, 612, -548, 243, 428, 569, 338, 338, 338,
01973 338, 656, 481, 482, 308, -549, -484, -478, -478, 452,
01974 453, -549, 264, 590, -278, 298, 299, -106, 263, 781,
01975 589, 416, -486, 497, -487, -487, 788, 425, -70, 735,
01976 664, 623, 624, 625, 626, -475, 331, 332, 333, 243,
01977 -478, -488, -488, 918, 434, 338, 338, 431, 669, 920,
01978 570, -555, 722, 556, 614, 668, 676, 557, 681, 551,
01979 555, 667, 721, 675, 81, 201, 81, -278, -278, 673,
01980 414, 687, 687, 445, 208, 588, 254, 201, 563, 720,
01981 446, 447, 414, 436, 537, 699, 208, 442, 81, 208,
01982 465, 528, 676, 676, 656, 656, 537, 726, 732, 713,
01983 715, 243, 450, 528, 469, 673, 673, 727, 398, 669,
01984 -555, 192, 552, 553, 821, -286, 193, 826, 472, -102,
01985 473, 690, 796, 793, 190, 939, 208, 676, 950, -104,
01986 492, 564, 565, 773, 548, 669, -101, 264, 550, 667,
01987 673, 712, 714, 263, 448, 474, 554, 973, 761, 582,
01988 623, 624, 625, 626, 789, 598, 748, 649, 748, 806,
01989 748, -555, 808, -555, -555, 607, 600, -551, -286, -286,
01990 735, 770, 623, 624, 625, 626, 81, 816, 564, 565,
01991 677, 951, 952, 264, 208, 627, 455, 208, 208, 263,
01992 463, 628, 629, 208, 208, 662, 609, 792, 795, 601,
01993 795, -85, 795, 615, 597, -264, 658, 627, 599, 824,
01994 669, 661, 630, 602, 629, 631, 679, 728, 683, 208,
01995 385, 669, 208, 81, 807, 455, 428, 730, 611, 456,
01996 457, 81, 734, 613, 630, 418, 815, 656, 81, 81,
01997 746, 762, -107, 749, 419, 420, 398, 856, -106, 752,
01998 308, 190, 487, 494, 671, 751, 777, 779, 867, 754,
01999 770, 776, 784, 786, -265, 81, 81, 672, 456, 457,
02000 458, 707, 782, -98, 691, 793, -102, 81, 872, -97,
02001 110, 770, 110, 748, 783, 748, 748, 659, 735, -104,
02002 623, 624, 625, 626, 110, 110, 822, 254, 110, 329,
02003 330, 331, 332, 333, 762, 208, -101, -93, 729, 862,
02004 842, 828, 866, 848, 849, 81, 851, 853, 208, 855,
02005 -95, 860, 81, 81, -266, 864, 81, 110, 110, 881,
02006 882, 886, 687, 890, 876, 455, 892, -92, 894, 682,
02007 110, 684, 81, 891, 896, 905, 622, 901, 623, 624,
02008 625, 626, 748, 748, 898, 748, 308, 748, 748, 904,
02009 -267, 110, 110, 929, 903, 110, 938, 930, 941, 308,
02010 263, 321, 322, 949, 858, 943, 932, 946, 456, 457,
02011 460, 959, 914, 627, 321, 322, 81, 961, 263, 628,
02012 629, 795, -551, -552, 455, 983, 606, 81, 364, 347,
02013 455, 338, 977, 825, 338, 329, 330, 331, 332, 333,
02014 630, 382, 940, 631, 802, 326, 327, 328, 329, 330,
02015 331, 332, 333, 976, 748, 748, 748, 383, 748, 748,
02016 750, 811, 753, 277, 376, 928, 632, 456, 457, 462,
02017 81, 906, 81, 456, 457, 466, 765, 834, 81, 0,
02018 81, 771, 748, 748, 748, 748, 735, 0, 623, 624,
02019 625, 626, 0, 0, 201, 0, 0, 756, 757, 414,
02020 758, 681, 795, 208, 0, 110, 44, 45, 0, 528,
02021 0, 0, 0, 537, 0, 748, 748, 748, 748, 669,
02022 528, 0, 0, 736, 0, 110, 0, 110, 110, 748,
02023 338, 110, 0, 110, 0, 812, 0, 748, 110, 0,
02024 0, 0, 0, 817, 818, 308, 0, 0, 0, 110,
02025 110, 0, 868, 0, 869, 0, 0, 823, 0, 0,
02026 321, 322, 0, 0, 877, 0, 0, 0, 829, 879,
02027 831, 832, 837, 0, 735, 840, 623, 624, 625, 626,
02028 0, 0, 841, 0, 0, 850, 0, 852, 854, 0,
02029 0, 0, 0, 328, 329, 330, 331, 332, 333, 0,
02030 110, 110, 110, 110, 110, 110, 110, 110, 0, 0,
02031 110, 736, 110, 0, 0, 110, 0, 737, 0, 843,
02032 863, 623, 624, 625, 626, 921, 922, 870, 871, 0,
02033 0, 873, 203, 203, 0, 0, 203, 0, 0, 0,
02034 0, 878, 0, 110, 0, 110, 0, 883, 0, 110,
02035 110, 0, 0, 884, 893, 895, 0, 897, 889, 899,
02036 900, 0, 236, 239, 110, 0, 0, 203, 203, 0,
02037 0, 0, 0, 0, 908, 0, 911, 0, 286, 287,
02038 0, 735, 956, 623, 624, 625, 626, 0, 0, 0,
02039 0, 919, 110, 110, 293, 294, 295, 296, 297, 0,
02040 0, 0, 0, 0, 0, 0, 0, 0, 110, 0,
02041 978, 0, 979, 0, 0, 934, 0, 936, 736, 0,
02042 0, 937, 0, 0, 887, 0, 942, 944, 945, 0,
02043 947, 948, 110, 622, 0, 623, 624, 625, 626, 0,
02044 0, 110, 0, 0, 0, 953, 0, 954, 0, 0,
02045 0, 0, 0, 955, 960, 962, 963, 964, 0, 0,
02046 110, 0, 0, 0, 967, 0, 969, 0, 0, 970,
02047 627, 0, 0, 0, 0, 0, 628, 629, 0, 0,
02048 0, 0, 0, 0, 981, 0, 0, 982, 984, 985,
02049 986, 0, 0, 0, 0, 0, 0, 630, 0, 0,
02050 631, 988, 0, 0, 0, 0, 989, 0, 0, 990,
02051 0, 203, 0, 0, 203, 203, 286, 0, 0, 0,
02052 105, 0, 105, 708, 0, 622, 0, 623, 624, 625,
02053 626, 0, 0, 203, 0, 203, 203, 0, 0, 0,
02054 0, 108, 0, 108, 0, 0, 0, 0, 0, 0,
02055 110, 0, 110, 761, 0, 623, 624, 625, 626, 0,
02056 110, 0, 627, 0, 0, 0, 0, 105, 628, 629,
02057 0, 265, 110, 0, 110, 110, 0, 0, 0, 0,
02058 0, 0, 0, 0, 0, 0, 0, 0, 108, 630,
02059 627, 0, 631, 0, 265, 0, 628, 629, 0, 0,
02060 0, 0, 0, 0, 0, 0, 351, 361, 361, 361,
02061 0, 0, 110, 0, 0, 0, 0, 630, 203, 0,
02062 631, 0, 0, 496, 499, 500, 501, 502, 503, 504,
02063 505, 506, 507, 508, 509, 510, 511, 512, 513, 514,
02064 515, 516, 517, 518, 519, 520, 521, 522, 523, 524,
02065 0, 203, 0, 0, 0, 0, 0, 0, 0, 0,
02066 0, 0, 110, 0, 0, 0, 0, 0, 0, 0,
02067 110, 0, 0, 110, 110, 0, 0, 0, 0, 110,
02068 110, 0, 308, 309, 310, 311, 312, 313, 314, 315,
02069 316, 317, 318, -574, -574, 0, 0, 321, 322, 0,
02070 579, 581, 0, 0, 0, 110, 0, 0, 110, 110,
02071 585, 203, 203, 0, 0, 105, 203, 110, 579, 581,
02072 203, 0, 0, 0, 110, 110, 324, 325, 326, 327,
02073 328, 329, 330, 331, 332, 333, 108, 0, 0, 605,
02074 0, 0, 0, 0, 610, 0, 0, 0, 105, 0,
02075 0, 110, 110, 203, 0, 0, 203, 0, 0, 105,
02076 105, 0, 0, 110, 0, 0, 0, 0, 203, 108,
02077 0, 0, 0, 0, 0, 0, 0, 0, 0, 265,
02078 108, 108, 0, 0, 0, 0, 0, 0, 650, 651,
02079 0, 110, 0, 0, 0, 0, 0, 0, 0, 0,
02080 203, 110, 0, 0, 110, 0, 0, 0, 110, 110,
02081 105, 0, 110, 0, 0, 105, 0, 0, 0, 0,
02082 0, 0, 105, 265, 0, 0, 0, 109, 110, 109,
02083 0, 108, 0, 0, 0, 0, 108, 0, 0, 0,
02084 0, 0, 0, 108, 0, 0, 0, 0, 0, 0,
02085 0, 0, 0, 0, 0, 105, 0, 106, 0, 106,
02086 0, 0, 0, 0, 203, 0, 0, 0, 203, 0,
02087 0, 0, 110, 0, 109, 78, 108, 78, 267, 0,
02088 203, 0, 0, 110, 0, 0, 0, 0, 0, 0,
02089 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02090 0, 267, 0, 203, 106, 0, 0, 0, 266, 0,
02091 0, 0, 0, 353, 363, 363, 203, 203, 0, 0,
02092 0, 0, 78, 0, 0, 0, 110, 0, 110, 0,
02093 0, 266, 0, 0, 110, 0, 110, 0, 0, 0,
02094 0, 0, 105, 352, 362, 362, 362, 0, 0, 0,
02095 0, 105, 0, 0, 0, 0, 0, 0, 0, 110,
02096 0, 348, 0, 108, 0, 0, 0, 0, 265, 0,
02097 0, 0, 108, 0, 203, 0, 0, 0, 585, 775,
02098 0, 778, 780, 0, 0, 0, 0, 785, 787, -573,
02099 0, 0, 0, 0, 0, 203, 0, -573, -573, -573,
02100 0, 0, -573, -573, -573, 0, -573, 0, 265, 0,
02101 0, 0, 0, 0, 0, 0, -573, 0, 0, 0,
02102 0, 0, 109, 0, 0, 0, -573, -573, 0, -573,
02103 -573, -573, -573, -573, 819, 0, 0, 0, 0, 778,
02104 780, 0, 785, 787, 0, 0, 0, 0, 0, 0,
02105 203, 0, 106, 0, 0, 109, 0, 0, 0, 0,
02106 105, 0, 105, 0, 0, 0, 109, 109, 0, 0,
02107 78, 0, 0, 0, -573, 0, 0, 0, 0, 0,
02108 0, 108, 0, 108, 105, 106, 267, 0, 203, 0,
02109 0, 0, 857, 0, 0, 0, 106, 106, 0, 859,
02110 0, 0, 0, 78, 0, 108, 0, 0, 0, 0,
02111 0, 0, 0, 0, 78, 78, 266, 109, 0, 203,
02112 0, 0, 109, 0, 0, 0, -573, 0, -573, 109,
02113 267, 220, -573, 265, -573, 0, -573, 859, 203, 0,
02114 0, 0, 0, 0, 0, 0, 0, 106, 0, 0,
02115 0, 0, 106, 0, 0, 0, 0, 0, 0, 106,
02116 266, 0, 109, 0, 0, 78, 0, 0, 0, 0,
02117 78, 0, 105, 0, 0, 0, 0, 78, 0, 265,
02118 495, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02119 0, 0, 106, 108, 0, 0, 0, 0, 0, 0,
02120 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02121 78, 0, 0, 0, 0, 0, 0, 0, 0, 105,
02122 0, 0, 0, 0, 0, 0, 0, 105, 0, 0,
02123 0, 0, 0, 0, 105, 105, 0, 0, 0, 0,
02124 108, 0, 0, 0, 0, 0, 0, 0, 108, 109,
02125 0, 0, 0, 0, 0, 108, 108, 0, 109, 0,
02126 0, 105, 105, 0, 0, 0, 0, 203, 0, 0,
02127 0, 0, 0, 105, 0, 267, 0, 0, 0, 106,
02128 0, 0, 108, 108, 0, 0, 0, 0, 106, 0,
02129 0, 0, 0, 0, 108, 0, 0, 78, 0, 0,
02130 0, 0, 0, 0, 0, 266, 78, 0, 0, 0,
02131 0, 105, 0, 0, 0, 267, 0, 0, 105, 105,
02132 0, 0, 105, 0, 0, 0, 0, 0, 0, 0,
02133 0, 0, 108, 0, 0, 0, 0, 0, 105, 108,
02134 108, 0, 0, 108, 0, 266, 0, 0, 0, 0,
02135 0, 0, 0, 0, 0, 0, 0, 0, 0, 108,
02136 361, 0, 0, 0, 0, 0, 0, 109, 0, 109,
02137 0, 0, 0, 0, 0, 0, 0, 0, 915, 0,
02138 0, 0, 105, 0, 0, 0, 0, 0, 0, 0,
02139 0, 109, 0, 105, 0, 0, 0, 106, 0, 106,
02140 0, 0, 0, 108, 0, 0, 0, 0, 0, 0,
02141 0, 0, 0, 0, 108, 78, 0, 78, 0, 0,
02142 0, 106, 0, 0, 0, 0, 0, 0, 0, 0,
02143 0, 0, 0, 0, 0, 0, 105, 0, 105, 78,
02144 267, 0, 0, 0, 105, 0, 105, 0, 0, 0,
02145 0, 0, 0, 0, 0, 0, 0, 108, 0, 108,
02146 0, 0, 0, 0, 0, 108, 0, 108, 0, 0,
02147 266, 760, 0, 0, 0, 0, 0, 0, 0, 109,
02148 0, 0, 0, 0, 0, 0, 267, 0, 0, 0,
02149 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02150 0, 0, 308, -574, -574, -574, -574, 313, 314, 106,
02151 0, -574, -574, 0, 0, 0, 266, 321, 322, 0,
02152 0, 0, 0, 0, 0, 0, 109, 78, 0, 0,
02153 0, 0, 0, 0, 109, 495, 0, 0, 0, 0,
02154 0, 109, 109, 0, 0, 0, 324, 325, 326, 327,
02155 328, 329, 330, 331, 332, 333, 106, 0, 0, 0,
02156 0, 0, 0, 0, 106, 0, 0, 0, 109, 109,
02157 0, 106, 106, 0, 78, 0, 0, 0, 0, 0,
02158 109, 0, 78, 0, 0, 0, 0, 0, 0, 78,
02159 78, 308, 309, 310, 311, 312, 313, 314, 106, 106,
02160 317, 318, 0, 0, 0, 0, 321, 322, 0, 0,
02161 106, 0, 0, 0, 0, 0, 78, 78, 109, 0,
02162 0, 0, 0, 0, 0, 109, 109, 0, 78, 109,
02163 0, 0, 0, 0, 0, 324, 325, 326, 327, 328,
02164 329, 330, 331, 332, 333, 109, 0, 0, 106, 0,
02165 0, 0, 0, 0, 0, 106, 106, 0, 0, 106,
02166 0, 0, 0, 0, 0, 0, 78, 363, 0, 0,
02167 0, 0, 0, 78, 78, 106, 0, 78, 0, 0,
02168 0, 0, 0, 0, 0, 917, 0, 0, 0, 109,
02169 0, 0, 0, 78, 0, 0, 0, 362, 0, 0,
02170 109, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02171 0, 0, 0, 0, 0, 916, 0, 0, 0, 106,
02172 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02173 106, 0, 0, 913, 0, 0, 0, 78, 0, 0,
02174 0, 0, 0, 109, 0, 109, 0, 0, 78, 0,
02175 0, 109, 0, 109, 0, 0, 0, 0, 0, 0,
02176 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02177 0, 0, 0, 106, 0, 106, 0, 0, 0, 0,
02178 0, 106, 0, 106, 0, 0, 0, 0, 0, 0,
02179 0, 78, 0, 78, 0, 0, 0, 0, 0, 78,
02180 0, 78, -573, 4, 0, 5, 6, 7, 8, 9,
02181 0, 0, 0, 10, 11, 0, 0, 0, 12, 0,
02182 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02183 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02184 0, 27, 0, 0, 0, 0, 0, 28, 29, 30,
02185 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02186 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02187 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02188 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02189 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02190 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02191 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02192 0, 0, 0, -285, 61, 62, 63, 0, 0, 0,
02193 0, -285, -285, -285, 0, 0, -285, -285, -285, 0,
02194 -285, 0, 0, 0, 0, 0, 0, -573, 0, -573,
02195 -285, -285, -285, 0, 0, 0, 0, 0, 0, 0,
02196 -285, -285, 0, -285, -285, -285, -285, -285, 0, 0,
02197 0, 0, 0, 0, 308, 309, 310, 311, 312, 313,
02198 314, 315, 316, 317, 318, 319, 320, 0, 0, 321,
02199 322, -285, -285, -285, -285, -285, -285, -285, -285, -285,
02200 -285, -285, -285, -285, 0, 0, -285, -285, -285, 0,
02201 724, -285, 0, 0, 0, 0, 323, -285, 324, 325,
02202 326, 327, 328, 329, 330, 331, 332, 333, 0, 0,
02203 -285, 0, -105, -285, -285, -285, -285, -285, -285, -285,
02204 -285, -285, -285, -285, -285, 0, 0, 0, 0, 0,
02205 0, 0, 0, 224, 0, 0, 0, 0, 0, 0,
02206 -285, -285, -285, -285, -411, 0, -285, -285, -285, 0,
02207 -285, 0, -411, -411, -411, 0, 0, -411, -411, -411,
02208 0, -411, 0, 0, 0, 0, 0, 0, 0, 0,
02209 -411, -411, -411, 0, 0, 0, 0, 0, 0, 0,
02210 0, -411, -411, 0, -411, -411, -411, -411, -411, 0,
02211 0, 0, 0, 0, 0, 308, 309, 310, 311, 312,
02212 313, 314, 315, 316, 317, 318, 319, 320, 0, 0,
02213 321, 322, -411, -411, -411, -411, -411, -411, -411, -411,
02214 -411, -411, -411, -411, -411, 0, 0, -411, -411, -411,
02215 0, 0, -411, 0, 0, 0, 0, 323, -411, 324,
02216 325, 326, 327, 328, 329, 330, 331, 332, 333, 0,
02217 0, 0, 0, 0, -411, 0, -411, -411, -411, -411,
02218 -411, -411, -411, -411, -411, -411, 0, 0, 0, 0,
02219 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02220 -411, -411, -411, -411, -411, -279, 220, -411, -411, -411,
02221 0, -411, 0, -279, -279, -279, 0, 0, -279, -279,
02222 -279, 0, -279, 0, 0, 0, 0, 0, 0, 0,
02223 0, 0, -279, -279, -279, 0, 0, 0, 0, 0,
02224 0, 0, -279, -279, 0, -279, -279, -279, -279, -279,
02225 0, 0, 0, 0, 0, 0, 308, 309, 310, 311,
02226 312, 313, 314, 315, 0, 317, 318, 0, 0, 0,
02227 0, 321, 322, -279, -279, -279, -279, -279, -279, -279,
02228 -279, -279, -279, -279, -279, -279, 0, 0, -279, -279,
02229 -279, 0, 0, -279, 0, 0, 0, 0, 0, -279,
02230 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
02231 0, 0, -279, 0, 0, -279, -279, -279, -279, -279,
02232 -279, -279, -279, -279, -279, -279, -279, 0, 0, 0,
02233 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02234 0, 0, -279, -279, -279, -279, -573, 0, -279, -279,
02235 -279, 0, -279, 0, -573, -573, -573, 0, 0, -573,
02236 -573, -573, 0, -573, 0, 0, 0, 0, 0, 0,
02237 0, 0, -573, -573, -573, 0, 0, 0, 0, 0,
02238 0, 0, 0, -573, -573, 0, -573, -573, -573, -573,
02239 -573, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02240 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02241 0, 0, 0, 0, -573, -573, -573, -573, -573, -573,
02242 -573, -573, -573, -573, -573, -573, -573, 0, 0, -573,
02243 -573, -573, 0, 0, -573, 0, 0, 0, 0, 0,
02244 -573, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02245 0, 0, 0, 0, 0, 0, -573, 0, -573, -573,
02246 -573, -573, -573, -573, -573, -573, -573, -573, 0, 0,
02247 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02248 0, 0, -573, -573, -573, -573, -573, -292, 220, -573,
02249 -573, -573, 0, -573, 0, -292, -292, -292, 0, 0,
02250 -292, -292, -292, 0, -292, 0, 0, 0, 0, 0,
02251 0, 0, 0, 0, -292, -292, 0, 0, 0, 0,
02252 0, 0, 0, 0, -292, -292, 0, -292, -292, -292,
02253 -292, -292, 0, 0, 0, 0, 0, 0, 0, 0,
02254 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02255 0, 0, 0, 0, 0, -292, -292, -292, -292, -292,
02256 -292, -292, -292, -292, -292, -292, -292, -292, 0, 0,
02257 -292, -292, -292, 0, 0, -292, 0, 0, 0, 0,
02258 0, -292, 0, 0, 0, 0, 0, 0, 0, 0,
02259 0, 0, 0, 0, 0, 0, 0, -292, 0, -292,
02260 -292, -292, -292, -292, -292, -292, -292, -292, -292, 0,
02261 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02262 0, 0, 0, 0, -292, -292, -292, -292, -555, 217,
02263 -292, -292, -292, 0, -292, 0, -555, -555, -555, 0,
02264 0, 0, -555, -555, 0, -555, 0, 0, 0, 0,
02265 0, 0, 0, 0, -555, 0, 0, 0, 0, 0,
02266 0, 0, 0, 0, 0, -555, -555, 0, -555, -555,
02267 -555, -555, -555, 0, 0, 0, 0, 0, 0, 0,
02268 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02269 0, 0, 0, 0, 0, 0, -555, -555, -555, -555,
02270 -555, -555, -555, -555, -555, -555, -555, -555, -555, 0,
02271 0, -555, -555, -555, -285, 665, 0, 0, 0, 0,
02272 0, 0, -285, -285, -285, 0, 0, 0, -285, -285,
02273 0, -285, 0, 0, 0, 0, 0, -103, -555, 0,
02274 -555, -555, -555, -555, -555, -555, -555, -555, -555, -555,
02275 0, -285, -285, 0, -285, -285, -285, -285, -285, 0,
02276 0, 0, 0, 0, -555, -555, -555, -555, -94, 0,
02277 0, -555, 0, -555, 0, -555, 0, 0, 0, 0,
02278 0, 0, -285, -285, -285, -285, -285, -285, -285, -285,
02279 -285, -285, -285, -285, -285, 0, 0, -285, -285, -285,
02280 0, 666, 0, 0, 0, 0, 0, 0, 0, 0,
02281 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02282 0, 0, 0, -105, -285, 0, -285, -285, -285, -285,
02283 -285, -285, -285, -285, -285, -285, 0, 0, 0, 0,
02284 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02285 0, -285, -285, -285, -96, 0, 0, -285, 0, -285,
02286 241, -285, 5, 6, 7, 8, 9, -573, -573, -573,
02287 10, 11, 0, 0, -573, 12, 0, 13, 14, 15,
02288 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
02289 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
02290 0, 0, 0, 0, 28, 29, 0, 31, 32, 33,
02291 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02292 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02293 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02294 0, 0, 0, 0, 0, 48, 0, 0, 49, 50,
02295 0, 51, 52, 0, 53, 0, 54, 55, 56, 57,
02296 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02297 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02298 0, 61, 62, 63, 0, 0, 0, 0, 0, 0,
02299 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02300 0, 0, 0, 0, -573, 241, -573, 5, 6, 7,
02301 8, 9, 0, 0, -573, 10, 11, 0, -573, -573,
02302 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
02303 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02304 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02305 29, 0, 31, 32, 33, 34, 35, 36, 37, 38,
02306 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02307 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02308 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02309 48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
02310 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02311 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02312 0, 0, 0, 0, 0, 0, 61, 62, 63, 0,
02313 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02314 0, 0, 0, 0, 0, 0, 0, 0, 0, -573,
02315 241, -573, 5, 6, 7, 8, 9, 0, 0, -573,
02316 10, 11, 0, 0, -573, 12, -573, 13, 14, 15,
02317 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
02318 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
02319 0, 0, 0, 0, 28, 29, 0, 31, 32, 33,
02320 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02321 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02322 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02323 0, 0, 0, 0, 0, 48, 0, 0, 49, 50,
02324 0, 51, 52, 0, 53, 0, 54, 55, 56, 57,
02325 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02326 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02327 0, 61, 62, 63, 0, 0, 0, 0, 0, 0,
02328 4, 0, 5, 6, 7, 8, 9, 0, 0, 0,
02329 10, 11, 0, 0, -573, 12, -573, 13, 14, 15,
02330 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
02331 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
02332 0, 0, 0, 0, 28, 29, 30, 31, 32, 33,
02333 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02334 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02335 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02336 0, 0, 0, 0, 0, 48, 0, 0, 49, 50,
02337 0, 51, 52, 0, 53, 0, 54, 55, 56, 57,
02338 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02339 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02340 0, 61, 62, 63, 0, 0, 0, 0, 0, 0,
02341 0, 0, 0, 0, 0, 0, -573, 0, 0, 0,
02342 0, 0, 0, 0, -573, 241, -573, 5, 6, 7,
02343 8, 9, 0, 0, -573, 10, 11, 0, 0, -573,
02344 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
02345 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02346 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02347 29, 0, 31, 32, 33, 34, 35, 36, 37, 38,
02348 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02349 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02350 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02351 48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
02352 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02353 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02354 0, 0, 0, 0, 0, 0, 61, 62, 63, 0,
02355 0, 0, 0, 0, 0, 241, 0, 5, 6, 7,
02356 8, 9, 0, -573, -573, 10, 11, 0, 0, -573,
02357 12, -573, 13, 14, 15, 16, 17, 18, 19, 0,
02358 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02359 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02360 29, 0, 31, 32, 33, 34, 35, 36, 37, 38,
02361 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02362 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02363 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02364 48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
02365 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02366 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02367 0, 0, 0, 0, 0, 0, 61, 62, 63, 0,
02368 0, 0, 0, 0, 0, 241, 0, 5, 6, 7,
02369 8, 9, 0, 0, 0, 10, 11, 0, 0, -573,
02370 12, -573, 13, 14, 15, 16, 17, 18, 19, 0,
02371 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02372 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02373 29, 0, 31, 32, 33, 34, 35, 36, 37, 38,
02374 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02375 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02376 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02377 48, 0, 0, 242, 50, 0, 51, 52, 0, 53,
02378 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02379 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02380 0, 0, 0, 0, 0, 0, 61, 62, 63, 0,
02381 0, 0, 0, 0, 0, 241, 0, 5, 6, 7,
02382 8, 9, 0, 0, 0, 10, 11, -573, 0, -573,
02383 12, -573, 13, 14, 15, 16, 17, 18, 19, 0,
02384 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02385 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02386 29, 0, 31, 32, 33, 34, 35, 36, 37, 38,
02387 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02388 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02389 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02390 48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
02391 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02392 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02393 0, 0, 0, 0, 0, 0, 61, 62, 63, 0,
02394 0, 0, 0, 0, 0, 241, 0, 5, 6, 7,
02395 8, 9, 0, 0, 0, 10, 11, -573, 0, -573,
02396 12, -573, 13, 14, 15, 16, 17, 18, 19, 0,
02397 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02398 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02399 29, 0, 31, 32, 33, 34, 35, 36, 37, 38,
02400 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02401 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02402 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02403 48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
02404 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02405 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02406 0, 0, 0, 0, 0, 0, 61, 62, 63, 0,
02407 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02408 0, -573, 0, 0, 0, 0, 0, 0, 0, -573,
02409 241, -573, 5, 6, 7, 8, 9, 0, 0, -573,
02410 10, 11, 0, 0, 0, 12, 0, 13, 14, 15,
02411 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
02412 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
02413 0, 0, 0, 0, 28, 29, 0, 31, 32, 33,
02414 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02415 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02416 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02417 0, 0, 0, 0, 0, 48, 0, 0, 49, 50,
02418 0, 51, 52, 0, 53, 0, 54, 55, 56, 57,
02419 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02420 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02421 0, 61, 62, 63, 0, 0, 0, 0, 0, 0,
02422 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02423 10, 11, 0, 0, -573, 12, -573, 13, 14, 15,
02424 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
02425 21, 22, 23, 24, 25, 26, 0, 0, 194, 0,
02426 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02427 34, 35, 36, 37, 38, 39, 40, 195, 41, 42,
02428 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02429 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02430 0, 0, 0, 0, 0, 196, 0, 0, 197, 50,
02431 0, 51, 52, 0, 198, 199, 54, 55, 56, 57,
02432 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02433 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
02434 11, 61, 200, 63, 12, 0, 13, 14, 15, 16,
02435 17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
02436 22, 23, 24, 25, 26, 0, 224, 27, 0, 0,
02437 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
02438 35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
02439 43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
02440 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02441 0, 0, 0, 0, 196, 0, 0, 197, 50, 0,
02442 51, 52, 0, 0, 0, 54, 55, 56, 57, 58,
02443 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02444 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02445 61, 62, 63, 0, 0, 0, 0, 0, 0, 0,
02446 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
02447 11, 0, 0, 288, 12, 289, 13, 14, 15, 16,
02448 17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
02449 22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
02450 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
02451 35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
02452 43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
02453 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02454 0, 0, 0, 0, 196, 0, 0, 197, 50, 0,
02455 51, 52, 0, 0, 0, 54, 55, 56, 57, 58,
02456 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02457 5, 6, 7, 8, 9, 0, 0, 0, 10, 11,
02458 61, 62, 63, 12, 0, 13, 14, 15, 16, 17,
02459 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02460 23, 24, 25, 26, 0, 224, 27, 0, 0, 0,
02461 0, 0, 28, 29, 30, 31, 32, 33, 34, 35,
02462 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02463 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02464 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02465 0, 0, 0, 48, 0, 0, 49, 50, 0, 51,
02466 52, 0, 53, 0, 54, 55, 56, 57, 58, 59,
02467 60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02468 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
02469 62, 63, 0, 0, 0, 0, 0, 0, 5, 6,
02470 7, 8, 9, 0, 0, 0, 10, 11, 0, 0,
02471 0, 12, 474, 13, 14, 15, 16, 17, 18, 19,
02472 0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
02473 25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
02474 28, 29, 0, 31, 32, 33, 34, 35, 36, 37,
02475 38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
02476 0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
02477 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02478 0, 48, 0, 0, 49, 50, 0, 51, 52, 0,
02479 53, 0, 54, 55, 56, 57, 58, 59, 60, 0,
02480 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02481 0, 0, 0, 0, 0, 0, 0, 61, 62, 63,
02482 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02483 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02484 474, 113, 114, 115, 116, 117, 118, 119, 120, 121,
02485 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
02486 132, 133, 134, 135, 136, 0, 0, 0, 137, 138,
02487 139, 365, 366, 367, 368, 144, 145, 146, 0, 0,
02488 0, 0, 0, 147, 148, 149, 150, 369, 370, 371,
02489 372, 155, 37, 38, 373, 40, 0, 0, 0, 0,
02490 0, 0, 0, 0, 157, 158, 159, 160, 161, 162,
02491 163, 164, 165, 0, 0, 166, 167, 0, 0, 168,
02492 169, 170, 171, 0, 0, 0, 0, 0, 0, 0,
02493 0, 0, 0, 172, 0, 0, 0, 0, 0, 0,
02494 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02495 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
02496 0, 183, 184, 0, 0, 0, 0, 0, -548, -548,
02497 -548, 0, -548, 0, 0, 0, -548, -548, 0, 185,
02498 374, -548, 0, -548, -548, -548, -548, -548, -548, -548,
02499 0, -548, 0, 0, 0, -548, -548, -548, -548, -548,
02500 -548, -548, 0, 0, -548, 0, 0, 0, 0, 0,
02501 0, -548, 0, 0, -548, -548, -548, -548, -548, -548,
02502 -548, -548, -548, -548, -548, -548, 0, -548, -548, -548,
02503 0, -548, -548, 0, 0, 0, 0, 0, 0, 0,
02504 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02505 0, -548, 0, 0, -548, -548, 0, -548, -548, 0,
02506 -548, -548, -548, -548, -548, -548, -548, -548, -548, 0,
02507 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02508 0, 0, 0, 0, 0, 0, 0, -548, -548, -548,
02509 0, 0, 0, 0, 0, -549, -549, -549, 0, -549,
02510 0, -548, 0, -549, -549, 0, 0, -548, -549, 0,
02511 -549, -549, -549, -549, -549, -549, -549, 0, -549, 0,
02512 0, 0, -549, -549, -549, -549, -549, -549, -549, 0,
02513 0, -549, 0, 0, 0, 0, 0, 0, -549, 0,
02514 0, -549, -549, -549, -549, -549, -549, -549, -549, -549,
02515 -549, -549, -549, 0, -549, -549, -549, 0, -549, -549,
02516 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02517 0, 0, 0, 0, 0, 0, 0, 0, -549, 0,
02518 0, -549, -549, 0, -549, -549, 0, -549, -549, -549,
02519 -549, -549, -549, -549, -549, -549, 0, 0, 0, 0,
02520 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02521 0, 0, 0, 0, -549, -549, -549, 0, 0, 0,
02522 0, 0, -551, -551, -551, 0, -551, 0, -549, 0,
02523 -551, -551, 0, 0, -549, -551, 0, -551, -551, -551,
02524 -551, -551, -551, -551, 0, 0, 0, 0, 0, -551,
02525 -551, -551, -551, -551, -551, -551, 0, 0, -551, 0,
02526 0, 0, 0, 0, 0, -551, 0, 0, -551, -551,
02527 -551, -551, -551, -551, -551, -551, -551, -551, -551, -551,
02528 0, -551, -551, -551, 0, -551, -551, 0, 0, 0,
02529 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02530 0, 0, 0, 0, 0, -551, 723, 0, -551, -551,
02531 0, -551, -551, 0, -551, -551, -551, -551, -551, -551,
02532 -551, -551, -551, 0, 0, 0, 0, 0, -103, 0,
02533 0, 0, 0, 0, 0, 0, -553, -553, -553, 0,
02534 -553, -551, -551, -551, -553, -553, 0, 0, 0, -553,
02535 0, -553, -553, -553, -553, -553, -553, -553, 0, 0,
02536 0, -551, 0, -553, -553, -553, -553, -553, -553, -553,
02537 0, 0, -553, 0, 0, 0, 0, 0, 0, -553,
02538 0, 0, -553, -553, -553, -553, -553, -553, -553, -553,
02539 -553, -553, -553, -553, 0, -553, -553, -553, 0, -553,
02540 -553, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02541 0, 0, 0, 0, 0, 0, 0, 0, 0, -553,
02542 0, 0, -553, -553, 0, -553, -553, 0, -553, -553,
02543 -553, -553, -553, -553, -553, -553, -553, 0, 0, 0,
02544 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02545 -554, -554, -554, 0, -554, -553, -553, -553, -554, -554,
02546 0, 0, 0, -554, 0, -554, -554, -554, -554, -554,
02547 -554, -554, 0, 0, 0, -553, 0, -554, -554, -554,
02548 -554, -554, -554, -554, 0, 0, -554, 0, 0, 0,
02549 0, 0, 0, -554, 0, 0, -554, -554, -554, -554,
02550 -554, -554, -554, -554, -554, -554, -554, -554, 0, -554,
02551 -554, -554, 0, -554, -554, 0, 0, 0, 0, 0,
02552 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02553 0, 0, 0, -554, 0, 0, -554, -554, 0, -554,
02554 -554, 0, -554, -554, -554, -554, -554, -554, -554, -554,
02555 -554, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02556 0, 0, 0, 0, 0, 0, 0, 0, 0, -554,
02557 -554, -554, 0, 0, 0, 0, 0, 0, 0, 0,
02558 0, 0, 0, 0, 0, 0, 0, 0, 0, -554,
02559 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
02560 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
02561 133, 134, 135, 136, 0, 0, 0, 137, 138, 139,
02562 140, 141, 142, 143, 144, 145, 146, 0, 0, 0,
02563 0, 0, 147, 148, 149, 150, 151, 152, 153, 154,
02564 155, 270, 271, 156, 272, 0, 0, 0, 0, 0,
02565 0, 0, 0, 157, 158, 159, 160, 161, 162, 163,
02566 164, 165, 0, 0, 166, 167, 0, 0, 168, 169,
02567 170, 171, 0, 0, 0, 0, 0, 0, 0, 0,
02568 0, 0, 172, 0, 0, 0, 0, 0, 0, 0,
02569 0, 0, 0, 0, 0, 0, 0, 0, 0, 173,
02570 174, 175, 176, 177, 178, 179, 180, 181, 182, 0,
02571 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
02572 0, 0, 0, 0, 0, 0, 0, 0, 185, 113,
02573 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
02574 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
02575 134, 135, 136, 0, 0, 0, 137, 138, 139, 140,
02576 141, 142, 143, 144, 145, 146, 0, 0, 0, 0,
02577 0, 147, 148, 149, 150, 151, 152, 153, 154, 155,
02578 226, 0, 156, 0, 0, 0, 0, 0, 0, 0,
02579 0, 0, 157, 158, 159, 160, 161, 162, 163, 164,
02580 165, 0, 0, 166, 167, 0, 0, 168, 169, 170,
02581 171, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02582 0, 172, 0, 0, 55, 0, 0, 0, 0, 0,
02583 0, 0, 0, 0, 0, 0, 0, 0, 173, 174,
02584 175, 176, 177, 178, 179, 180, 181, 182, 0, 183,
02585 184, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02586 0, 0, 0, 0, 0, 0, 0, 185, 113, 114,
02587 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
02588 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
02589 135, 136, 0, 0, 0, 137, 138, 139, 140, 141,
02590 142, 143, 144, 145, 146, 0, 0, 0, 0, 0,
02591 147, 148, 149, 150, 151, 152, 153, 154, 155, 0,
02592 0, 156, 0, 0, 0, 0, 0, 0, 0, 0,
02593 0, 157, 158, 159, 160, 161, 162, 163, 164, 165,
02594 0, 0, 166, 167, 0, 0, 168, 169, 170, 171,
02595 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02596 172, 0, 0, 55, 0, 0, 0, 0, 0, 0,
02597 0, 0, 0, 0, 0, 0, 0, 173, 174, 175,
02598 176, 177, 178, 179, 180, 181, 182, 0, 183, 184,
02599 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02600 0, 0, 0, 0, 0, 0, 185, 113, 114, 115,
02601 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
02602 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
02603 136, 0, 0, 0, 137, 138, 139, 140, 141, 142,
02604 143, 144, 145, 146, 0, 0, 0, 0, 0, 147,
02605 148, 149, 150, 151, 152, 153, 154, 155, 0, 0,
02606 156, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02607 157, 158, 159, 160, 161, 162, 163, 164, 165, 0,
02608 0, 166, 167, 0, 0, 168, 169, 170, 171, 0,
02609 0, 0, 0, 0, 0, 0, 0, 0, 0, 172,
02610 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02611 0, 0, 0, 0, 0, 0, 173, 174, 175, 176,
02612 177, 178, 179, 180, 181, 182, 0, 183, 184, 0,
02613 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
02614 11, 0, 0, 0, 12, 185, 13, 14, 15, 231,
02615 232, 18, 19, 0, 0, 0, 0, 0, 233, 234,
02616 235, 23, 24, 25, 26, 0, 0, 194, 0, 0,
02617 0, 0, 0, 0, 258, 0, 0, 32, 33, 34,
02618 35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
02619 43, 44, 45, 0, 0, 0, 0, 0, 0, 0,
02620 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02621 0, 0, 0, 0, 259, 0, 0, 197, 50, 0,
02622 51, 52, 0, 0, 0, 54, 55, 56, 57, 58,
02623 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02624 0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
02625 260, 10, 11, 0, 0, 0, 12, 0, 13, 14,
02626 15, 231, 232, 18, 19, 0, 0, 0, 261, 0,
02627 233, 234, 235, 23, 24, 25, 26, 0, 0, 194,
02628 0, 0, 0, 0, 0, 0, 258, 0, 0, 32,
02629 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
02630 42, 0, 43, 44, 45, 0, 0, 0, 0, 0,
02631 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02632 0, 0, 0, 0, 0, 0, 259, 0, 0, 197,
02633 50, 0, 51, 52, 0, 0, 0, 54, 55, 56,
02634 57, 58, 59, 60, 0, 0, 0, 0, 0, 0,
02635 0, 0, 0, 0, 0, 5, 6, 7, 8, 9,
02636 0, 0, 260, 10, 11, 0, 0, 0, 12, 0,
02637 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02638 490, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02639 0, 27, 0, 0, 0, 0, 0, 28, 29, 30,
02640 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02641 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02642 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02643 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02644 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02645 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02646 0, 0, 0, 0, 5, 6, 7, 8, 9, 0,
02647 0, 0, 10, 11, 61, 62, 63, 12, 0, 13,
02648 14, 15, 16, 17, 18, 19, 0, 0, 0, 0,
02649 0, 20, 21, 22, 23, 24, 25, 26, 0, 0,
02650 27, 0, 0, 0, 0, 0, 28, 29, 0, 31,
02651 32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
02652 41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
02653 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02654 0, 0, 0, 0, 0, 0, 0, 48, 0, 0,
02655 49, 50, 0, 51, 52, 0, 53, 0, 54, 55,
02656 56, 57, 58, 59, 60, 0, 0, 0, 0, 0,
02657 0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
02658 0, 10, 11, 61, 62, 63, 12, 0, 13, 14,
02659 15, 16, 17, 18, 19, 0, 0, 0, 0, 0,
02660 20, 21, 22, 23, 24, 25, 26, 0, 0, 194,
02661 0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
02662 33, 34, 35, 36, 37, 38, 39, 40, 195, 41,
02663 42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
02664 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02665 0, 0, 0, 0, 0, 0, 196, 0, 0, 197,
02666 50, 0, 51, 52, 0, 198, 199, 54, 55, 56,
02667 57, 58, 59, 60, 0, 0, 0, 0, 0, 0,
02668 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02669 10, 11, 61, 200, 63, 12, 0, 13, 14, 15,
02670 231, 232, 18, 19, 0, 0, 0, 0, 0, 233,
02671 234, 235, 23, 24, 25, 26, 0, 0, 194, 0,
02672 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02673 34, 35, 36, 37, 38, 39, 40, 195, 41, 42,
02674 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02675 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02676 0, 0, 0, 0, 0, 196, 0, 0, 197, 50,
02677 0, 51, 52, 0, 587, 199, 54, 55, 56, 57,
02678 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02679 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
02680 11, 61, 200, 63, 12, 0, 13, 14, 15, 231,
02681 232, 18, 19, 0, 0, 0, 0, 0, 233, 234,
02682 235, 23, 24, 25, 26, 0, 0, 194, 0, 0,
02683 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
02684 35, 36, 37, 38, 39, 40, 195, 41, 42, 0,
02685 43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
02686 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02687 0, 0, 0, 0, 196, 0, 0, 197, 50, 0,
02688 51, 52, 0, 198, 0, 54, 55, 56, 57, 58,
02689 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02690 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
02691 61, 200, 63, 12, 0, 13, 14, 15, 231, 232,
02692 18, 19, 0, 0, 0, 0, 0, 233, 234, 235,
02693 23, 24, 25, 26, 0, 0, 194, 0, 0, 0,
02694 0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
02695 36, 37, 38, 39, 40, 195, 41, 42, 0, 43,
02696 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02697 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02698 0, 0, 0, 196, 0, 0, 197, 50, 0, 51,
02699 52, 0, 0, 199, 54, 55, 56, 57, 58, 59,
02700 60, 0, 0, 0, 0, 0, 0, 0, 0, 5,
02701 6, 7, 0, 9, 0, 0, 0, 10, 11, 61,
02702 200, 63, 12, 0, 13, 14, 15, 231, 232, 18,
02703 19, 0, 0, 0, 0, 0, 233, 234, 235, 23,
02704 24, 25, 26, 0, 0, 194, 0, 0, 0, 0,
02705 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
02706 37, 38, 39, 40, 195, 41, 42, 0, 43, 44,
02707 45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
02708 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02709 0, 0, 196, 0, 0, 197, 50, 0, 51, 52,
02710 0, 587, 0, 54, 55, 56, 57, 58, 59, 60,
02711 0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
02712 7, 0, 9, 0, 0, 0, 10, 11, 61, 200,
02713 63, 12, 0, 13, 14, 15, 231, 232, 18, 19,
02714 0, 0, 0, 0, 0, 233, 234, 235, 23, 24,
02715 25, 26, 0, 0, 194, 0, 0, 0, 0, 0,
02716 0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
02717 38, 39, 40, 195, 41, 42, 0, 43, 44, 45,
02718 0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
02719 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02720 0, 196, 0, 0, 197, 50, 0, 51, 52, 0,
02721 0, 0, 54, 55, 56, 57, 58, 59, 60, 0,
02722 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02723 0, 9, 0, 0, 0, 10, 11, 61, 200, 63,
02724 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
02725 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02726 26, 0, 0, 194, 0, 0, 0, 0, 0, 0,
02727 29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02728 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02729 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02730 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02731 196, 0, 0, 197, 50, 0, 51, 52, 0, 484,
02732 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02733 0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
02734 9, 0, 0, 0, 10, 11, 61, 200, 63, 12,
02735 0, 13, 14, 15, 231, 232, 18, 19, 0, 0,
02736 0, 0, 0, 233, 234, 235, 23, 24, 25, 26,
02737 0, 0, 194, 0, 0, 0, 0, 0, 0, 29,
02738 0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
02739 40, 0, 41, 42, 0, 43, 44, 45, 0, 46,
02740 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02741 0, 0, 0, 0, 0, 0, 0, 0, 0, 196,
02742 0, 0, 197, 50, 0, 51, 52, 0, 198, 0,
02743 54, 55, 56, 57, 58, 59, 60, 0, 0, 0,
02744 0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
02745 0, 0, 0, 10, 11, 61, 200, 63, 12, 0,
02746 13, 14, 15, 231, 232, 18, 19, 0, 0, 0,
02747 0, 0, 233, 234, 235, 23, 24, 25, 26, 0,
02748 0, 194, 0, 0, 0, 0, 0, 0, 29, 0,
02749 0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02750 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02751 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02752 0, 0, 0, 0, 0, 0, 0, 0, 196, 0,
02753 0, 197, 50, 0, 51, 52, 0, 772, 0, 54,
02754 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02755 0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
02756 0, 0, 10, 11, 61, 200, 63, 12, 0, 13,
02757 14, 15, 231, 232, 18, 19, 0, 0, 0, 0,
02758 0, 233, 234, 235, 23, 24, 25, 26, 0, 0,
02759 194, 0, 0, 0, 0, 0, 0, 29, 0, 0,
02760 32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
02761 41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
02762 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02763 0, 0, 0, 0, 0, 0, 0, 196, 0, 0,
02764 197, 50, 0, 51, 52, 0, 484, 0, 54, 55,
02765 56, 57, 58, 59, 60, 0, 0, 0, 0, 0,
02766 0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
02767 0, 10, 11, 61, 200, 63, 12, 0, 13, 14,
02768 15, 231, 232, 18, 19, 0, 0, 0, 0, 0,
02769 233, 234, 235, 23, 24, 25, 26, 0, 0, 194,
02770 0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
02771 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
02772 42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
02773 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02774 0, 0, 0, 0, 0, 0, 196, 0, 0, 197,
02775 50, 0, 51, 52, 0, 587, 0, 54, 55, 56,
02776 57, 58, 59, 60, 0, 0, 0, 0, 0, 0,
02777 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02778 10, 11, 61, 200, 63, 12, 0, 13, 14, 15,
02779 231, 232, 18, 19, 0, 0, 0, 0, 0, 233,
02780 234, 235, 23, 24, 25, 26, 0, 0, 194, 0,
02781 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02782 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02783 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02784 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02785 0, 0, 0, 0, 0, 196, 0, 0, 197, 50,
02786 0, 51, 52, 0, 0, 0, 54, 55, 56, 57,
02787 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02788 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
02789 11, 61, 200, 63, 12, 0, 13, 14, 15, 16,
02790 17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
02791 22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
02792 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
02793 35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
02794 43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
02795 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02796 0, 0, 0, 0, 196, 0, 0, 197, 50, 0,
02797 51, 52, 0, 0, 0, 54, 55, 56, 57, 58,
02798 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02799 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
02800 61, 62, 63, 12, 0, 13, 14, 15, 16, 17,
02801 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02802 23, 24, 25, 26, 0, 0, 194, 0, 0, 0,
02803 0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
02804 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02805 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02806 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02807 0, 0, 0, 196, 0, 0, 197, 50, 0, 51,
02808 52, 0, 0, 0, 54, 55, 56, 57, 58, 59,
02809 60, 0, 0, 0, 0, 0, 0, 0, 0, 5,
02810 6, 7, 0, 9, 0, 0, 0, 10, 11, 61,
02811 200, 63, 12, 0, 13, 14, 15, 231, 232, 18,
02812 19, 0, 0, 0, 0, 0, 233, 234, 235, 23,
02813 24, 25, 26, 0, 0, 194, 0, 0, 0, 0,
02814 0, 0, 258, 0, 0, 32, 33, 34, 35, 36,
02815 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02816 45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02817 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02818 0, 0, 259, 0, 0, 304, 50, 0, 51, 52,
02819 0, 305, 0, 54, 55, 56, 57, 58, 59, 60,
02820 0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
02821 0, 0, 10, 11, 0, 0, 0, 12, 260, 13,
02822 14, 15, 231, 232, 18, 19, 0, 0, 0, 0,
02823 0, 233, 234, 235, 23, 24, 25, 26, 0, 0,
02824 194, 0, 0, 0, 0, 0, 0, 258, 0, 0,
02825 32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
02826 41, 42, 0, 43, 44, 45, 0, 0, 0, 0,
02827 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02828 0, 0, 0, 0, 0, 0, 0, 346, 0, 0,
02829 49, 50, 0, 51, 52, 0, 53, 0, 54, 55,
02830 56, 57, 58, 59, 60, 0, 0, 0, 0, 5,
02831 6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
02832 0, 0, 12, 260, 13, 14, 15, 231, 232, 18,
02833 19, 0, 0, 0, 0, 0, 233, 234, 235, 23,
02834 24, 25, 26, 0, 0, 194, 0, 0, 0, 0,
02835 0, 0, 258, 0, 0, 32, 33, 34, 354, 36,
02836 37, 38, 355, 40, 0, 41, 42, 0, 43, 44,
02837 45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02838 0, 0, 0, 0, 0, 0, 0, 0, 0, 356,
02839 0, 0, 357, 0, 0, 197, 50, 0, 51, 52,
02840 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02841 0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
02842 0, 0, 10, 11, 0, 0, 0, 12, 260, 13,
02843 14, 15, 231, 232, 18, 19, 0, 0, 0, 0,
02844 0, 233, 234, 235, 23, 24, 25, 26, 0, 0,
02845 194, 0, 0, 0, 0, 0, 0, 258, 0, 0,
02846 32, 33, 34, 354, 36, 37, 38, 355, 40, 0,
02847 41, 42, 0, 43, 44, 45, 0, 0, 0, 0,
02848 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02849 0, 0, 0, 0, 0, 0, 0, 357, 0, 0,
02850 197, 50, 0, 51, 52, 0, 0, 0, 54, 55,
02851 56, 57, 58, 59, 60, 0, 0, 0, 0, 5,
02852 6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
02853 0, 0, 12, 260, 13, 14, 15, 231, 232, 18,
02854 19, 0, 0, 0, 0, 0, 233, 234, 235, 23,
02855 24, 25, 26, 0, 0, 194, 0, 0, 0, 0,
02856 0, 0, 258, 0, 0, 32, 33, 34, 35, 36,
02857 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02858 45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02859 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02860 0, 0, 259, 0, 0, 304, 50, 0, 51, 52,
02861 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02862 0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
02863 0, 0, 10, 11, 0, 0, 0, 12, 260, 13,
02864 14, 15, 231, 232, 18, 19, 0, 0, 0, 0,
02865 0, 233, 234, 235, 23, 24, 25, 26, 0, 0,
02866 194, 0, 0, 0, 0, 0, 0, 258, 0, 0,
02867 32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
02868 41, 42, 0, 43, 44, 45, 0, 0, 0, 0,
02869 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02870 0, 0, 0, 0, 0, 0, 0, 902, 0, 0,
02871 197, 50, 0, 51, 52, 0, 0, 0, 54, 55,
02872 56, 57, 58, 59, 60, 0, 0, 0, 0, 5,
02873 6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
02874 0, 0, 12, 260, 13, 14, 15, 231, 232, 18,
02875 19, 0, 0, 0, 0, 0, 233, 234, 235, 23,
02876 24, 25, 26, 0, 0, 194, 0, 663, 0, 0,
02877 0, 0, 258, 0, 0, 32, 33, 34, 35, 36,
02878 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02879 45, 308, 309, 310, 311, 312, 313, 314, 315, 316,
02880 317, 318, 319, 320, 0, 0, 321, 322, 0, 0,
02881 0, 0, 912, 0, 0, 197, 50, 0, 51, 52,
02882 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02883 0, 0, 0, 323, 0, 324, 325, 326, 327, 328,
02884 329, 330, 331, 332, 333, 0, 0, 0, 260, 0,
02885 525, 526, 0, 0, 527, 0, 0, 0, 0, 0,
02886 0, 0, 0, -241, 157, 158, 159, 160, 161, 162,
02887 163, 164, 165, 0, 0, 166, 167, 0, 0, 168,
02888 169, 170, 171, 0, 0, 0, 0, 0, 0, 0,
02889 0, 0, 0, 172, 0, 0, 0, 0, 0, 0,
02890 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02891 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
02892 0, 183, 184, 0, 0, 0, 0, 533, 534, 0,
02893 0, 535, 0, 0, 0, 0, 0, 0, 0, 185,
02894 220, 157, 158, 159, 160, 161, 162, 163, 164, 165,
02895 0, 0, 166, 167, 0, 0, 168, 169, 170, 171,
02896 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02897 172, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02898 0, 0, 0, 0, 0, 0, 0, 173, 174, 175,
02899 176, 177, 178, 179, 180, 181, 182, 0, 183, 184,
02900 0, 0, 0, 0, 591, 526, 0, 0, 592, 0,
02901 0, 0, 0, 0, 0, 0, 185, 220, 157, 158,
02902 159, 160, 161, 162, 163, 164, 165, 0, 0, 166,
02903 167, 0, 0, 168, 169, 170, 171, 0, 0, 0,
02904 0, 0, 0, 0, 0, 0, 0, 172, 0, 0,
02905 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02906 0, 0, 0, 0, 173, 174, 175, 176, 177, 178,
02907 179, 180, 181, 182, 0, 183, 184, 0, 0, 0,
02908 0, 594, 534, 0, 0, 595, 0, 0, 0, 0,
02909 0, 0, 0, 185, 220, 157, 158, 159, 160, 161,
02910 162, 163, 164, 165, 0, 0, 166, 167, 0, 0,
02911 168, 169, 170, 171, 0, 0, 0, 0, 0, 0,
02912 0, 0, 0, 0, 172, 0, 0, 0, 0, 0,
02913 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02914 0, 173, 174, 175, 176, 177, 178, 179, 180, 181,
02915 182, 0, 183, 184, 0, 0, 0, 0, 617, 526,
02916 0, 0, 618, 0, 0, 0, 0, 0, 0, 0,
02917 185, 220, 157, 158, 159, 160, 161, 162, 163, 164,
02918 165, 0, 0, 166, 167, 0, 0, 168, 169, 170,
02919 171, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02920 0, 172, 0, 0, 0, 0, 0, 0, 0, 0,
02921 0, 0, 0, 0, 0, 0, 0, 0, 173, 174,
02922 175, 176, 177, 178, 179, 180, 181, 182, 0, 183,
02923 184, 0, 0, 0, 0, 620, 534, 0, 0, 621,
02924 0, 0, 0, 0, 0, 0, 0, 185, 220, 157,
02925 158, 159, 160, 161, 162, 163, 164, 165, 0, 0,
02926 166, 167, 0, 0, 168, 169, 170, 171, 0, 0,
02927 0, 0, 0, 0, 0, 0, 0, 0, 172, 0,
02928 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02929 0, 0, 0, 0, 0, 173, 174, 175, 176, 177,
02930 178, 179, 180, 181, 182, 0, 183, 184, 0, 0,
02931 0, 0, 692, 526, 0, 0, 693, 0, 0, 0,
02932 0, 0, 0, 0, 185, 220, 157, 158, 159, 160,
02933 161, 162, 163, 164, 165, 0, 0, 166, 167, 0,
02934 0, 168, 169, 170, 171, 0, 0, 0, 0, 0,
02935 0, 0, 0, 0, 0, 172, 0, 0, 0, 0,
02936 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02937 0, 0, 173, 174, 175, 176, 177, 178, 179, 180,
02938 181, 182, 0, 183, 184, 0, 0, 0, 0, 695,
02939 534, 0, 0, 696, 0, 0, 0, 0, 0, 0,
02940 0, 185, 220, 157, 158, 159, 160, 161, 162, 163,
02941 164, 165, 0, 0, 166, 167, 0, 0, 168, 169,
02942 170, 171, 0, 0, 0, 0, 0, 0, 0, 0,
02943 0, 0, 172, 0, 0, 0, 0, 0, 0, 0,
02944 0, 0, 0, 0, 0, 0, 0, 0, 0, 173,
02945 174, 175, 176, 177, 178, 179, 180, 181, 182, 0,
02946 183, 184, 0, 0, 0, 0, 702, 526, 0, 0,
02947 703, 0, 0, 0, 0, 0, 0, 0, 185, 220,
02948 157, 158, 159, 160, 161, 162, 163, 164, 165, 0,
02949 0, 166, 167, 0, 0, 168, 169, 170, 171, 0,
02950 0, 0, 0, 0, 0, 0, 0, 0, 0, 172,
02951 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02952 0, 0, 0, 0, 0, 0, 173, 174, 175, 176,
02953 177, 178, 179, 180, 181, 182, 0, 183, 184, 0,
02954 0, 0, 0, 572, 534, 0, 0, 573, 0, 0,
02955 0, 0, 0, 0, 0, 185, 220, 157, 158, 159,
02956 160, 161, 162, 163, 164, 165, 0, 0, 166, 167,
02957 0, 0, 168, 169, 170, 171, 0, 0, 0, 0,
02958 0, 0, 0, 0, 0, 0, 172, 0, 0, 0,
02959 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02960 0, 0, 0, 173, 174, 175, 176, 177, 178, 179,
02961 180, 181, 182, 0, 183, 184, 0, 0, 0, 0,
02962 965, 526, 0, 0, 966, 0, 0, 0, 0, 0,
02963 0, 0, 185, 220, 157, 158, 159, 160, 161, 162,
02964 163, 164, 165, 0, 0, 166, 167, 0, 0, 168,
02965 169, 170, 171, 0, 0, 0, 0, 0, 0, 0,
02966 0, 0, 0, 172, 0, 0, 0, 0, 0, 0,
02967 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02968 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
02969 0, 183, 184, 0, 0, 0, 0, 971, 526, 0,
02970 0, 972, 0, 0, 0, 0, 0, 0, 0, 185,
02971 220, 157, 158, 159, 160, 161, 162, 163, 164, 165,
02972 0, 0, 166, 167, 0, 0, 168, 169, 170, 171,
02973 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02974 172, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02975 0, 0, 0, 0, 0, 0, 0, 173, 174, 175,
02976 176, 177, 178, 179, 180, 181, 182, 0, 183, 184,
02977 0, 0, 0, 0, 974, 534, 0, 0, 975, 0,
02978 0, 0, 0, 0, 0, 0, 185, 220, 157, 158,
02979 159, 160, 161, 162, 163, 164, 165, 0, 0, 166,
02980 167, 0, 0, 168, 169, 170, 171, 0, 0, 0,
02981 0, 0, 0, 0, 0, 0, 0, 172, 0, 0,
02982 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02983 0, 0, 0, 0, 173, 174, 175, 176, 177, 178,
02984 179, 180, 181, 182, 0, 183, 184, 0, 0, 0,
02985 0, 572, 534, 0, 0, 573, 0, 0, 0, 0,
02986 0, 0, 0, 185, 220, 157, 158, 159, 160, 161,
02987 162, 163, 164, 165, 0, 0, 166, 167, 0, 0,
02988 168, 169, 170, 171, 0, 0, 0, 0, 0, 0,
02989 0, 0, 0, 0, 172, 0, 0, 0, 0, 0,
02990 0, 0, 718, 0, 0, 0, 0, 0, 0, 0,
02991 0, 173, 174, 175, 176, 177, 178, 179, 180, 181,
02992 182, 663, 183, 184, 0, 0, 308, 309, 310, 311,
02993 312, 313, 314, 315, 316, 317, 318, 319, 320, 0,
02994 185, 321, 322, 0, 0, 308, 309, 310, 311, 312,
02995 313, 314, 315, 316, 317, 318, 319, 320, 0, 0,
02996 321, 322, 0, 0, 0, 0, 0, 0, 323, 0,
02997 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
02998 0, 0, 0, 0, 0, 0, 0, 323, 0, 324,
02999 325, 326, 327, 328, 329, 330, 331, 332, 333
03000 };
03001
03002 #define yypact_value_is_default(yystate) \
03003 ((yystate) == (-747))
03004
03005 #define yytable_value_is_error(yytable_value) \
03006 ((yytable_value) == (-574))
03007
03008 static const yytype_int16 yycheck[] =
03009 {
03010 2, 55, 340, 28, 2, 454, 4, 52, 593, 16,
03011 17, 335, 307, 20, 307, 8, 547, 213, 16, 17,
03012 8, 566, 20, 27, 53, 29, 84, 22, 8, 87,
03013 546, 87, 4, 22, 619, 28, 49, 91, 252, 76,
03014 28, 2, 256, 4, 404, 357, 1, 65, 28, 51,
03015 52, 49, 50, 749, 450, 53, 746, 13, 334, 627,
03016 336, 53, 680, 25, 62, 762, 684, 454, 13, 16,
03017 17, 65, 26, 20, 396, 55, 400, 26, 76, 25,
03018 440, 0, 404, 27, 76, 83, 84, 576, 577, 87,
03019 88, 89, 90, 87, 490, 29, 88, 89, 90, 13,
03020 242, 25, 378, 379, 51, 851, 828, 85, 76, 694,
03021 136, 91, 87, 16, 17, 110, 147, 20, 85, 568,
03022 705, 110, 146, 399, 25, 401, 85, 653, 452, 61,
03023 87, 16, 17, 62, 109, 20, 276, 25, 278, 56,
03024 280, 13, 742, 37, 38, 87, 114, 109, 51, 52,
03025 195, 427, 109, 198, 199, 826, 701, 28, 113, 849,
03026 138, 139, 304, 763, 709, 140, 25, 109, 736, 737,
03027 25, 13, 139, 107, 106, 146, 13, 453, 140, 138,
03028 139, 143, 136, 632, 140, 147, 109, 136, 244, 145,
03029 145, 147, 147, 142, 140, 941, 892, 142, 140, 197,
03030 145, 145, 147, 147, 653, 207, 896, 904, 930, 140,
03031 217, 213, 219, 220, 25, 886, 140, 413, 220, 217,
03032 746, 219, 220, 749, 261, 223, 244, 225, 552, 242,
03033 719, 145, 230, 147, 50, 293, 294, 295, 296, 140,
03034 564, 601, 142, 241, 242, 632, 235, 147, 109, 238,
03035 244, 563, 140, 147, 258, 873, 99, 302, 826, 708,
03036 828, 932, 307, 261, 25, 661, 87, 83, 84, 261,
03037 217, 87, 219, 145, 140, 147, 305, 553, 600, 601,
03038 241, 140, 25, 341, 342, 140, 25, 343, 959, 565,
03039 806, 304, 85, 87, 292, 293, 294, 295, 296, 297,
03040 298, 299, 85, 145, 302, 147, 304, 305, 145, 307,
03041 147, 59, 60, 305, 217, 109, 219, 26, 886, 887,
03042 292, 708, 109, 849, 142, 851, 49, 467, 335, 140,
03043 875, 292, 217, 335, 219, 56, 297, 335, 145, 337,
03044 147, 87, 873, 341, 342, 138, 139, 336, 88, 343,
03045 395, 396, 690, 140, 334, 302, 139, 26, 356, 404,
03046 307, 140, 930, 109, 932, 359, 892, 85, 147, 662,
03047 109, 85, 109, 302, 61, 26, 85, 140, 307, 140,
03048 15, 142, 17, 928, 679, 87, 384, 385, 973, 85,
03049 85, 959, 437, 400, 590, 440, 421, 140, 400, 142,
03050 614, 140, 400, 85, 143, 140, 85, 223, 147, 225,
03051 412, 413, 401, 450, 142, 941, 85, 104, 105, 399,
03052 138, 139, 424, 136, 142, 139, 424, 136, 421, 138,
03053 139, 880, 85, 421, 85, 433, 85, 142, 427, 484,
03054 140, 421, 138, 139, 139, 452, 426, 147, 85, 142,
03055 452, 85, 450, 490, 452, 384, 385, 139, 450, 146,
03056 139, 85, 822, 424, 453, 68, 85, 136, 85, 138,
03057 139, 451, 433, 142, 197, 87, 85, 293, 294, 295,
03058 296, 483, 298, 299, 68, 136, 139, 138, 139, 138,
03059 139, 142, 490, 396, 85, 37, 38, 109, 490, 668,
03060 822, 223, 139, 548, 138, 139, 675, 230, 109, 52,
03061 514, 54, 55, 56, 57, 139, 119, 120, 121, 242,
03062 139, 138, 139, 861, 246, 341, 342, 143, 532, 867,
03063 139, 26, 728, 52, 437, 530, 538, 56, 540, 85,
03064 356, 530, 587, 538, 542, 552, 544, 138, 139, 538,
03065 552, 545, 546, 56, 552, 600, 601, 564, 85, 584,
03066 59, 60, 564, 144, 553, 559, 564, 137, 566, 567,
03067 106, 551, 574, 575, 576, 577, 565, 87, 615, 574,
03068 575, 304, 140, 563, 106, 574, 575, 87, 590, 593,
03069 85, 584, 138, 139, 87, 85, 584, 140, 68, 109,
03070 68, 548, 14, 15, 584, 85, 604, 609, 85, 109,
03071 140, 138, 139, 658, 17, 619, 109, 615, 56, 608,
03072 609, 574, 575, 615, 661, 145, 25, 951, 52, 94,
03073 54, 55, 56, 57, 679, 143, 638, 146, 640, 697,
03074 642, 136, 700, 138, 139, 137, 140, 142, 138, 139,
03075 52, 653, 54, 55, 56, 57, 654, 711, 138, 139,
03076 10, 138, 139, 661, 662, 89, 61, 665, 666, 661,
03077 65, 95, 96, 671, 672, 109, 952, 679, 680, 140,
03078 682, 140, 684, 140, 406, 140, 140, 89, 410, 734,
03079 694, 140, 116, 415, 96, 119, 8, 600, 13, 697,
03080 87, 705, 700, 701, 698, 61, 87, 137, 430, 104,
03081 105, 709, 109, 435, 116, 54, 710, 719, 716, 717,
03082 140, 145, 109, 140, 63, 64, 728, 772, 109, 140,
03083 68, 711, 679, 662, 87, 52, 665, 666, 796, 52,
03084 742, 111, 671, 672, 140, 743, 744, 87, 104, 105,
03085 106, 567, 144, 140, 549, 15, 109, 755, 803, 140,
03086 2, 763, 4, 765, 87, 767, 768, 489, 52, 109,
03087 54, 55, 56, 57, 16, 17, 140, 822, 20, 117,
03088 118, 119, 120, 121, 145, 783, 109, 140, 604, 791,
03089 109, 140, 794, 114, 140, 793, 140, 140, 796, 10,
03090 140, 88, 800, 801, 140, 9, 804, 49, 50, 10,
03091 137, 140, 806, 10, 808, 61, 140, 140, 140, 542,
03092 62, 544, 820, 137, 140, 114, 52, 137, 54, 55,
03093 56, 57, 834, 835, 140, 837, 68, 839, 840, 140,
03094 140, 83, 84, 137, 842, 87, 56, 140, 140, 68,
03095 842, 83, 84, 56, 783, 140, 140, 140, 104, 105,
03096 106, 140, 860, 89, 83, 84, 864, 140, 860, 95,
03097 96, 873, 142, 142, 61, 140, 424, 875, 90, 88,
03098 61, 697, 954, 736, 700, 117, 118, 119, 120, 121,
03099 116, 93, 904, 119, 689, 114, 115, 116, 117, 118,
03100 119, 120, 121, 953, 906, 907, 908, 96, 910, 911,
03101 640, 706, 642, 57, 91, 880, 142, 104, 105, 106,
03102 918, 849, 920, 104, 105, 106, 653, 746, 926, -1,
03103 928, 654, 934, 935, 936, 937, 52, -1, 54, 55,
03104 56, 57, -1, -1, 951, -1, -1, 54, 55, 951,
03105 57, 953, 954, 951, -1, 197, 63, 64, -1, 939,
03106 -1, -1, -1, 952, -1, 967, 968, 969, 970, 973,
03107 950, -1, -1, 89, -1, 217, -1, 219, 220, 981,
03108 796, 223, -1, 225, -1, 707, -1, 989, 230, -1,
03109 -1, -1, -1, 716, 717, 68, -1, -1, -1, 241,
03110 242, -1, 797, -1, 799, -1, -1, 729, -1, -1,
03111 83, 84, -1, -1, 809, -1, -1, -1, 740, 814,
03112 743, 744, 749, -1, 52, 752, 54, 55, 56, 57,
03113 -1, -1, 755, -1, -1, 765, -1, 767, 768, -1,
03114 -1, -1, -1, 116, 117, 118, 119, 120, 121, -1,
03115 292, 293, 294, 295, 296, 297, 298, 299, -1, -1,
03116 302, 89, 304, -1, -1, 307, -1, 95, -1, 52,
03117 793, 54, 55, 56, 57, 870, 871, 800, 801, -1,
03118 -1, 804, 16, 17, -1, -1, 20, -1, -1, -1,
03119 -1, 813, -1, 335, -1, 337, -1, 820, -1, 341,
03120 342, -1, -1, 825, 834, 835, -1, 837, 830, 839,
03121 840, -1, 46, 47, 356, -1, -1, 51, 52, -1,
03122 -1, -1, -1, -1, 851, -1, 853, -1, 62, 63,
03123 -1, 52, 927, 54, 55, 56, 57, -1, -1, -1,
03124 -1, 864, 384, 385, 40, 41, 42, 43, 44, -1,
03125 -1, -1, -1, -1, -1, -1, -1, -1, 400, -1,
03126 955, -1, 957, -1, -1, 892, -1, 894, 89, -1,
03127 -1, 898, -1, -1, 95, -1, 906, 907, 908, -1,
03128 910, 911, 424, 52, -1, 54, 55, 56, 57, -1,
03129 -1, 433, -1, -1, -1, 918, -1, 920, -1, -1,
03130 -1, -1, -1, 926, 934, 935, 936, 937, -1, -1,
03131 452, -1, -1, -1, 941, -1, 943, -1, -1, 946,
03132 89, -1, -1, -1, -1, -1, 95, 96, -1, -1,
03133 -1, -1, -1, -1, 961, -1, -1, 967, 968, 969,
03134 970, -1, -1, -1, -1, -1, -1, 116, -1, -1,
03135 119, 981, -1, -1, -1, -1, 983, -1, -1, 989,
03136 -1, 195, -1, -1, 198, 199, 200, -1, -1, -1,
03137 2, -1, 4, 142, -1, 52, -1, 54, 55, 56,
03138 57, -1, -1, 217, -1, 219, 220, -1, -1, -1,
03139 -1, 2, -1, 4, -1, -1, -1, -1, -1, -1,
03140 542, -1, 544, 52, -1, 54, 55, 56, 57, -1,
03141 552, -1, 89, -1, -1, -1, -1, 49, 95, 96,
03142 -1, 53, 564, -1, 566, 567, -1, -1, -1, -1,
03143 -1, -1, -1, -1, -1, -1, -1, -1, 49, 116,
03144 89, -1, 119, -1, 76, -1, 95, 96, -1, -1,
03145 -1, -1, -1, -1, -1, -1, 88, 89, 90, 91,
03146 -1, -1, 604, -1, -1, -1, -1, 116, 302, -1,
03147 119, -1, -1, 307, 308, 309, 310, 311, 312, 313,
03148 314, 315, 316, 317, 318, 319, 320, 321, 322, 323,
03149 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
03150 -1, 335, -1, -1, -1, -1, -1, -1, -1, -1,
03151 -1, -1, 654, -1, -1, -1, -1, -1, -1, -1,
03152 662, -1, -1, 665, 666, -1, -1, -1, -1, 671,
03153 672, -1, 68, 69, 70, 71, 72, 73, 74, 75,
03154 76, 77, 78, 79, 80, -1, -1, 83, 84, -1,
03155 384, 385, -1, -1, -1, 697, -1, -1, 700, 701,
03156 394, 395, 396, -1, -1, 197, 400, 709, 402, 403,
03157 404, -1, -1, -1, 716, 717, 112, 113, 114, 115,
03158 116, 117, 118, 119, 120, 121, 197, -1, -1, 423,
03159 -1, -1, -1, -1, 428, -1, -1, -1, 230, -1,
03160 -1, 743, 744, 437, -1, -1, 440, -1, -1, 241,
03161 242, -1, -1, 755, -1, -1, -1, -1, 452, 230,
03162 -1, -1, -1, -1, -1, -1, -1, -1, -1, 261,
03163 241, 242, -1, -1, -1, -1, -1, -1, 472, 473,
03164 -1, 783, -1, -1, -1, -1, -1, -1, -1, -1,
03165 484, 793, -1, -1, 796, -1, -1, -1, 800, 801,
03166 292, -1, 804, -1, -1, 297, -1, -1, -1, -1,
03167 -1, -1, 304, 305, -1, -1, -1, 2, 820, 4,
03168 -1, 292, -1, -1, -1, -1, 297, -1, -1, -1,
03169 -1, -1, -1, 304, -1, -1, -1, -1, -1, -1,
03170 -1, -1, -1, -1, -1, 337, -1, 2, -1, 4,
03171 -1, -1, -1, -1, 548, -1, -1, -1, 552, -1,
03172 -1, -1, 864, -1, 49, 2, 337, 4, 53, -1,
03173 564, -1, -1, 875, -1, -1, -1, -1, -1, -1,
03174 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03175 -1, 76, -1, 587, 49, -1, -1, -1, 53, -1,
03176 -1, -1, -1, 88, 89, 90, 600, 601, -1, -1,
03177 -1, -1, 49, -1, -1, -1, 918, -1, 920, -1,
03178 -1, 76, -1, -1, 926, -1, 928, -1, -1, -1,
03179 -1, -1, 424, 88, 89, 90, 91, -1, -1, -1,
03180 -1, 433, -1, -1, -1, -1, -1, -1, -1, 951,
03181 -1, 88, -1, 424, -1, -1, -1, -1, 450, -1,
03182 -1, -1, 433, -1, 658, -1, -1, -1, 662, 663,
03183 -1, 665, 666, -1, -1, -1, -1, 671, 672, 0,
03184 -1, -1, -1, -1, -1, 679, -1, 8, 9, 10,
03185 -1, -1, 13, 14, 15, -1, 17, -1, 490, -1,
03186 -1, -1, -1, -1, -1, -1, 27, -1, -1, -1,
03187 -1, -1, 197, -1, -1, -1, 37, 38, -1, 40,
03188 41, 42, 43, 44, 718, -1, -1, -1, -1, 723,
03189 724, -1, 726, 727, -1, -1, -1, -1, -1, -1,
03190 734, -1, 197, -1, -1, 230, -1, -1, -1, -1,
03191 542, -1, 544, -1, -1, -1, 241, 242, -1, -1,
03192 197, -1, -1, -1, 85, -1, -1, -1, -1, -1,
03193 -1, 542, -1, 544, 566, 230, 261, -1, 772, -1,
03194 -1, -1, 776, -1, -1, -1, 241, 242, -1, 783,
03195 -1, -1, -1, 230, -1, 566, -1, -1, -1, -1,
03196 -1, -1, -1, -1, 241, 242, 261, 292, -1, 803,
03197 -1, -1, 297, -1, -1, -1, 137, -1, 139, 304,
03198 305, 142, 143, 615, 145, -1, 147, 821, 822, -1,
03199 -1, -1, -1, -1, -1, -1, -1, 292, -1, -1,
03200 -1, -1, 297, -1, -1, -1, -1, -1, -1, 304,
03201 305, -1, 337, -1, -1, 292, -1, -1, -1, -1,
03202 297, -1, 654, -1, -1, -1, -1, 304, -1, 661,
03203 307, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03204 -1, -1, 337, 654, -1, -1, -1, -1, -1, -1,
03205 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03206 337, -1, -1, -1, -1, -1, -1, -1, -1, 701,
03207 -1, -1, -1, -1, -1, -1, -1, 709, -1, -1,
03208 -1, -1, -1, -1, 716, 717, -1, -1, -1, -1,
03209 701, -1, -1, -1, -1, -1, -1, -1, 709, 424,
03210 -1, -1, -1, -1, -1, 716, 717, -1, 433, -1,
03211 -1, 743, 744, -1, -1, -1, -1, 951, -1, -1,
03212 -1, -1, -1, 755, -1, 450, -1, -1, -1, 424,
03213 -1, -1, 743, 744, -1, -1, -1, -1, 433, -1,
03214 -1, -1, -1, -1, 755, -1, -1, 424, -1, -1,
03215 -1, -1, -1, -1, -1, 450, 433, -1, -1, -1,
03216 -1, 793, -1, -1, -1, 490, -1, -1, 800, 801,
03217 -1, -1, 804, -1, -1, -1, -1, -1, -1, -1,
03218 -1, -1, 793, -1, -1, -1, -1, -1, 820, 800,
03219 801, -1, -1, 804, -1, 490, -1, -1, -1, -1,
03220 -1, -1, -1, -1, -1, -1, -1, -1, -1, 820,
03221 842, -1, -1, -1, -1, -1, -1, 542, -1, 544,
03222 -1, -1, -1, -1, -1, -1, -1, -1, 860, -1,
03223 -1, -1, 864, -1, -1, -1, -1, -1, -1, -1,
03224 -1, 566, -1, 875, -1, -1, -1, 542, -1, 544,
03225 -1, -1, -1, 864, -1, -1, -1, -1, -1, -1,
03226 -1, -1, -1, -1, 875, 542, -1, 544, -1, -1,
03227 -1, 566, -1, -1, -1, -1, -1, -1, -1, -1,
03228 -1, -1, -1, -1, -1, -1, 918, -1, 920, 566,
03229 615, -1, -1, -1, 926, -1, 928, -1, -1, -1,
03230 -1, -1, -1, -1, -1, -1, -1, 918, -1, 920,
03231 -1, -1, -1, -1, -1, 926, -1, 928, -1, -1,
03232 615, 646, -1, -1, -1, -1, -1, -1, -1, 654,
03233 -1, -1, -1, -1, -1, -1, 661, -1, -1, -1,
03234 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03235 -1, -1, 68, 69, 70, 71, 72, 73, 74, 654,
03236 -1, 77, 78, -1, -1, -1, 661, 83, 84, -1,
03237 -1, -1, -1, -1, -1, -1, 701, 654, -1, -1,
03238 -1, -1, -1, -1, 709, 662, -1, -1, -1, -1,
03239 -1, 716, 717, -1, -1, -1, 112, 113, 114, 115,
03240 116, 117, 118, 119, 120, 121, 701, -1, -1, -1,
03241 -1, -1, -1, -1, 709, -1, -1, -1, 743, 744,
03242 -1, 716, 717, -1, 701, -1, -1, -1, -1, -1,
03243 755, -1, 709, -1, -1, -1, -1, -1, -1, 716,
03244 717, 68, 69, 70, 71, 72, 73, 74, 743, 744,
03245 77, 78, -1, -1, -1, -1, 83, 84, -1, -1,
03246 755, -1, -1, -1, -1, -1, 743, 744, 793, -1,
03247 -1, -1, -1, -1, -1, 800, 801, -1, 755, 804,
03248 -1, -1, -1, -1, -1, 112, 113, 114, 115, 116,
03249 117, 118, 119, 120, 121, 820, -1, -1, 793, -1,
03250 -1, -1, -1, -1, -1, 800, 801, -1, -1, 804,
03251 -1, -1, -1, -1, -1, -1, 793, 842, -1, -1,
03252 -1, -1, -1, 800, 801, 820, -1, 804, -1, -1,
03253 -1, -1, -1, -1, -1, 860, -1, -1, -1, 864,
03254 -1, -1, -1, 820, -1, -1, -1, 842, -1, -1,
03255 875, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03256 -1, -1, -1, -1, -1, 860, -1, -1, -1, 864,
03257 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03258 875, -1, -1, 860, -1, -1, -1, 864, -1, -1,
03259 -1, -1, -1, 918, -1, 920, -1, -1, 875, -1,
03260 -1, 926, -1, 928, -1, -1, -1, -1, -1, -1,
03261 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03262 -1, -1, -1, 918, -1, 920, -1, -1, -1, -1,
03263 -1, 926, -1, 928, -1, -1, -1, -1, -1, -1,
03264 -1, 918, -1, 920, -1, -1, -1, -1, -1, 926,
03265 -1, 928, 0, 1, -1, 3, 4, 5, 6, 7,
03266 -1, -1, -1, 11, 12, -1, -1, -1, 16, -1,
03267 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03268 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03269 -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
03270 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03271 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03272 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03273 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03274 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03275 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03276 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03277 -1, -1, -1, 0, 122, 123, 124, -1, -1, -1,
03278 -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
03279 17, -1, -1, -1, -1, -1, -1, 145, -1, 147,
03280 27, 28, 29, -1, -1, -1, -1, -1, -1, -1,
03281 37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
03282 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
03283 74, 75, 76, 77, 78, 79, 80, -1, -1, 83,
03284 84, 68, 69, 70, 71, 72, 73, 74, 75, 76,
03285 77, 78, 79, 80, -1, -1, 83, 84, 85, -1,
03286 87, 88, -1, -1, -1, -1, 110, 94, 112, 113,
03287 114, 115, 116, 117, 118, 119, 120, 121, -1, -1,
03288 107, -1, 109, 110, 111, 112, 113, 114, 115, 116,
03289 117, 118, 119, 120, 121, -1, -1, -1, -1, -1,
03290 -1, -1, -1, 147, -1, -1, -1, -1, -1, -1,
03291 137, 138, 139, 140, 0, -1, 143, 144, 145, -1,
03292 147, -1, 8, 9, 10, -1, -1, 13, 14, 15,
03293 -1, 17, -1, -1, -1, -1, -1, -1, -1, -1,
03294 26, 27, 28, -1, -1, -1, -1, -1, -1, -1,
03295 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1,
03296 -1, -1, -1, -1, -1, 68, 69, 70, 71, 72,
03297 73, 74, 75, 76, 77, 78, 79, 80, -1, -1,
03298 83, 84, 68, 69, 70, 71, 72, 73, 74, 75,
03299 76, 77, 78, 79, 80, -1, -1, 83, 84, 85,
03300 -1, -1, 88, -1, -1, -1, -1, 110, 94, 112,
03301 113, 114, 115, 116, 117, 118, 119, 120, 121, -1,
03302 -1, -1, -1, -1, 110, -1, 112, 113, 114, 115,
03303 116, 117, 118, 119, 120, 121, -1, -1, -1, -1,
03304 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03305 136, 137, 138, 139, 140, 0, 142, 143, 144, 145,
03306 -1, 147, -1, 8, 9, 10, -1, -1, 13, 14,
03307 15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
03308 -1, -1, 27, 28, 29, -1, -1, -1, -1, -1,
03309 -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
03310 -1, -1, -1, -1, -1, -1, 68, 69, 70, 71,
03311 72, 73, 74, 75, -1, 77, 78, -1, -1, -1,
03312 -1, 83, 84, 68, 69, 70, 71, 72, 73, 74,
03313 75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
03314 85, -1, -1, 88, -1, -1, -1, -1, -1, 94,
03315 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
03316 -1, -1, 107, -1, -1, 110, 111, 112, 113, 114,
03317 115, 116, 117, 118, 119, 120, 121, -1, -1, -1,
03318 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03319 -1, -1, 137, 138, 139, 140, 0, -1, 143, 144,
03320 145, -1, 147, -1, 8, 9, 10, -1, -1, 13,
03321 14, 15, -1, 17, -1, -1, -1, -1, -1, -1,
03322 -1, -1, 26, 27, 28, -1, -1, -1, -1, -1,
03323 -1, -1, -1, 37, 38, -1, 40, 41, 42, 43,
03324 44, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03325 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03326 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
03327 74, 75, 76, 77, 78, 79, 80, -1, -1, 83,
03328 84, 85, -1, -1, 88, -1, -1, -1, -1, -1,
03329 94, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03330 -1, -1, -1, -1, -1, -1, 110, -1, 112, 113,
03331 114, 115, 116, 117, 118, 119, 120, 121, -1, -1,
03332 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03333 -1, -1, 136, 137, 138, 139, 140, 0, 142, 143,
03334 144, 145, -1, 147, -1, 8, 9, 10, -1, -1,
03335 13, 14, 15, -1, 17, -1, -1, -1, -1, -1,
03336 -1, -1, -1, -1, 27, 28, -1, -1, -1, -1,
03337 -1, -1, -1, -1, 37, 38, -1, 40, 41, 42,
03338 43, 44, -1, -1, -1, -1, -1, -1, -1, -1,
03339 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03340 -1, -1, -1, -1, -1, 68, 69, 70, 71, 72,
03341 73, 74, 75, 76, 77, 78, 79, 80, -1, -1,
03342 83, 84, 85, -1, -1, 88, -1, -1, -1, -1,
03343 -1, 94, -1, -1, -1, -1, -1, -1, -1, -1,
03344 -1, -1, -1, -1, -1, -1, -1, 110, -1, 112,
03345 113, 114, 115, 116, 117, 118, 119, 120, 121, -1,
03346 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03347 -1, -1, -1, -1, 137, 138, 139, 140, 0, 142,
03348 143, 144, 145, -1, 147, -1, 8, 9, 10, -1,
03349 -1, -1, 14, 15, -1, 17, -1, -1, -1, -1,
03350 -1, -1, -1, -1, 26, -1, -1, -1, -1, -1,
03351 -1, -1, -1, -1, -1, 37, 38, -1, 40, 41,
03352 42, 43, 44, -1, -1, -1, -1, -1, -1, -1,
03353 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03354 -1, -1, -1, -1, -1, -1, 68, 69, 70, 71,
03355 72, 73, 74, 75, 76, 77, 78, 79, 80, -1,
03356 -1, 83, 84, 85, 0, 87, -1, -1, -1, -1,
03357 -1, -1, 8, 9, 10, -1, -1, -1, 14, 15,
03358 -1, 17, -1, -1, -1, -1, -1, 109, 110, -1,
03359 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
03360 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1,
03361 -1, -1, -1, -1, 136, 137, 138, 139, 140, -1,
03362 -1, 143, -1, 145, -1, 147, -1, -1, -1, -1,
03363 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
03364 76, 77, 78, 79, 80, -1, -1, 83, 84, 85,
03365 -1, 87, -1, -1, -1, -1, -1, -1, -1, -1,
03366 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03367 -1, -1, -1, 109, 110, -1, 112, 113, 114, 115,
03368 116, 117, 118, 119, 120, 121, -1, -1, -1, -1,
03369 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03370 -1, 137, 138, 139, 140, -1, -1, 143, -1, 145,
03371 1, 147, 3, 4, 5, 6, 7, 8, 9, 10,
03372 11, 12, -1, -1, 15, 16, -1, 18, 19, 20,
03373 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03374 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03375 -1, -1, -1, -1, 45, 46, -1, 48, 49, 50,
03376 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03377 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03378 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03379 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03380 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
03381 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03382 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03383 -1, 122, 123, 124, -1, -1, -1, -1, -1, -1,
03384 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03385 -1, -1, -1, -1, 145, 1, 147, 3, 4, 5,
03386 6, 7, -1, -1, 10, 11, 12, -1, 14, 15,
03387 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03388 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03389 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03390 46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
03391 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03392 66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
03393 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03394 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03395 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03396 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03397 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1,
03398 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03399 -1, -1, -1, -1, -1, -1, -1, -1, -1, 145,
03400 1, 147, 3, 4, 5, 6, 7, -1, -1, 10,
03401 11, 12, -1, -1, 15, 16, 17, 18, 19, 20,
03402 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03403 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03404 -1, -1, -1, -1, 45, 46, -1, 48, 49, 50,
03405 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03406 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03407 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03408 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03409 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
03410 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03411 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03412 -1, 122, 123, 124, -1, -1, -1, -1, -1, -1,
03413 1, -1, 3, 4, 5, 6, 7, -1, -1, -1,
03414 11, 12, -1, -1, 145, 16, 147, 18, 19, 20,
03415 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03416 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03417 -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
03418 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03419 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03420 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03421 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03422 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
03423 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03424 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03425 -1, 122, 123, 124, -1, -1, -1, -1, -1, -1,
03426 -1, -1, -1, -1, -1, -1, 137, -1, -1, -1,
03427 -1, -1, -1, -1, 145, 1, 147, 3, 4, 5,
03428 6, 7, -1, -1, 10, 11, 12, -1, -1, 15,
03429 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03430 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03431 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03432 46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
03433 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03434 66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
03435 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03436 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03437 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03438 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03439 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1,
03440 -1, -1, -1, -1, -1, 1, -1, 3, 4, 5,
03441 6, 7, -1, 9, 10, 11, 12, -1, -1, 145,
03442 16, 147, 18, 19, 20, 21, 22, 23, 24, -1,
03443 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03444 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03445 46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
03446 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03447 66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
03448 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03449 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03450 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03451 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03452 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1,
03453 -1, -1, -1, -1, -1, 1, -1, 3, 4, 5,
03454 6, 7, -1, -1, -1, 11, 12, -1, -1, 145,
03455 16, 147, 18, 19, 20, 21, 22, 23, 24, -1,
03456 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03457 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03458 46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
03459 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03460 66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
03461 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03462 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03463 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03464 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03465 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1,
03466 -1, -1, -1, -1, -1, 1, -1, 3, 4, 5,
03467 6, 7, -1, -1, -1, 11, 12, 143, -1, 145,
03468 16, 147, 18, 19, 20, 21, 22, 23, 24, -1,
03469 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03470 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03471 46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
03472 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03473 66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
03474 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03475 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03476 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03477 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03478 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1,
03479 -1, -1, -1, -1, -1, 1, -1, 3, 4, 5,
03480 6, 7, -1, -1, -1, 11, 12, 143, -1, 145,
03481 16, 147, 18, 19, 20, 21, 22, 23, 24, -1,
03482 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03483 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03484 46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
03485 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03486 66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
03487 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03488 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03489 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03490 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03491 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1,
03492 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03493 -1, 137, -1, -1, -1, -1, -1, -1, -1, 145,
03494 1, 147, 3, 4, 5, 6, 7, -1, -1, 10,
03495 11, 12, -1, -1, -1, 16, -1, 18, 19, 20,
03496 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03497 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03498 -1, -1, -1, -1, 45, 46, -1, 48, 49, 50,
03499 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03500 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03501 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03502 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03503 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
03504 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03505 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03506 -1, 122, 123, 124, -1, -1, -1, -1, -1, -1,
03507 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03508 11, 12, -1, -1, 145, 16, 147, 18, 19, 20,
03509 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03510 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03511 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03512 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
03513 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03514 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03515 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03516 -1, 92, 93, -1, 95, 96, 97, 98, 99, 100,
03517 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03518 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
03519 12, 122, 123, 124, 16, -1, 18, 19, 20, 21,
03520 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03521 32, 33, 34, 35, 36, -1, 147, 39, -1, -1,
03522 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03523 52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
03524 62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
03525 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03526 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03527 92, 93, -1, -1, -1, 97, 98, 99, 100, 101,
03528 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03529 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03530 122, 123, 124, -1, -1, -1, -1, -1, -1, -1,
03531 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
03532 12, -1, -1, 145, 16, 147, 18, 19, 20, 21,
03533 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03534 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03535 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03536 52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
03537 62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
03538 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03539 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03540 92, 93, -1, -1, -1, 97, 98, 99, 100, 101,
03541 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03542 3, 4, 5, 6, 7, -1, -1, -1, 11, 12,
03543 122, 123, 124, 16, -1, 18, 19, 20, 21, 22,
03544 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03545 33, 34, 35, 36, -1, 147, 39, -1, -1, -1,
03546 -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
03547 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03548 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03549 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03550 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03551 93, -1, 95, -1, 97, 98, 99, 100, 101, 102,
03552 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03553 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
03554 123, 124, -1, -1, -1, -1, -1, -1, 3, 4,
03555 5, 6, 7, -1, -1, -1, 11, 12, -1, -1,
03556 -1, 16, 145, 18, 19, 20, 21, 22, 23, 24,
03557 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
03558 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
03559 45, 46, -1, 48, 49, 50, 51, 52, 53, 54,
03560 55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
03561 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03562 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03563 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03564 95, -1, 97, 98, 99, 100, 101, 102, 103, -1,
03565 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03566 -1, -1, -1, -1, -1, -1, -1, 122, 123, 124,
03567 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03568 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03569 145, 3, 4, 5, 6, 7, 8, 9, 10, 11,
03570 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
03571 22, 23, 24, 25, 26, -1, -1, -1, 30, 31,
03572 32, 33, 34, 35, 36, 37, 38, 39, -1, -1,
03573 -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
03574 52, 53, 54, 55, 56, 57, -1, -1, -1, -1,
03575 -1, -1, -1, -1, 66, 67, 68, 69, 70, 71,
03576 72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
03577 82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
03578 -1, -1, -1, 95, -1, -1, -1, -1, -1, -1,
03579 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03580 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
03581 -1, 123, 124, -1, -1, -1, -1, -1, 3, 4,
03582 5, -1, 7, -1, -1, -1, 11, 12, -1, 141,
03583 142, 16, -1, 18, 19, 20, 21, 22, 23, 24,
03584 -1, 26, -1, -1, -1, 30, 31, 32, 33, 34,
03585 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
03586 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
03587 55, 56, 57, 58, 59, 60, -1, 62, 63, 64,
03588 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03589 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03590 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03591 95, 96, 97, 98, 99, 100, 101, 102, 103, -1,
03592 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03593 -1, -1, -1, -1, -1, -1, -1, 122, 123, 124,
03594 -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
03595 -1, 136, -1, 11, 12, -1, -1, 142, 16, -1,
03596 18, 19, 20, 21, 22, 23, 24, -1, 26, -1,
03597 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03598 -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
03599 -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03600 58, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03601 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03602 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03603 -1, 89, 90, -1, 92, 93, -1, 95, 96, 97,
03604 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03605 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03606 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03607 -1, -1, 3, 4, 5, -1, 7, -1, 136, -1,
03608 11, 12, -1, -1, 142, 16, -1, 18, 19, 20,
03609 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03610 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03611 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03612 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
03613 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03614 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03615 -1, -1, -1, -1, -1, 86, 87, -1, 89, 90,
03616 -1, 92, 93, -1, 95, 96, 97, 98, 99, 100,
03617 101, 102, 103, -1, -1, -1, -1, -1, 109, -1,
03618 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
03619 7, 122, 123, 124, 11, 12, -1, -1, -1, 16,
03620 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
03621 -1, 142, -1, 30, 31, 32, 33, 34, 35, 36,
03622 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
03623 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
03624 57, 58, 59, 60, -1, 62, 63, 64, -1, 66,
03625 67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03626 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
03627 -1, -1, 89, 90, -1, 92, 93, -1, 95, 96,
03628 97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
03629 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03630 3, 4, 5, -1, 7, 122, 123, 124, 11, 12,
03631 -1, -1, -1, 16, -1, 18, 19, 20, 21, 22,
03632 23, 24, -1, -1, -1, 142, -1, 30, 31, 32,
03633 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03634 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03635 53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
03636 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03637 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03638 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03639 93, -1, 95, 96, 97, 98, 99, 100, 101, 102,
03640 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03641 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
03642 123, 124, -1, -1, -1, -1, -1, -1, -1, -1,
03643 -1, -1, -1, -1, -1, -1, -1, -1, -1, 142,
03644 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
03645 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
03646 23, 24, 25, 26, -1, -1, -1, 30, 31, 32,
03647 33, 34, 35, 36, 37, 38, 39, -1, -1, -1,
03648 -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
03649 53, 54, 55, 56, 57, -1, -1, -1, -1, -1,
03650 -1, -1, -1, 66, 67, 68, 69, 70, 71, 72,
03651 73, 74, -1, -1, 77, 78, -1, -1, 81, 82,
03652 83, 84, -1, -1, -1, -1, -1, -1, -1, -1,
03653 -1, -1, 95, -1, -1, -1, -1, -1, -1, -1,
03654 -1, -1, -1, -1, -1, -1, -1, -1, -1, 112,
03655 113, 114, 115, 116, 117, 118, 119, 120, 121, -1,
03656 123, 124, -1, -1, -1, -1, -1, -1, -1, -1,
03657 -1, -1, -1, -1, -1, -1, -1, -1, 141, 3,
03658 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
03659 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
03660 24, 25, 26, -1, -1, -1, 30, 31, 32, 33,
03661 34, 35, 36, 37, 38, 39, -1, -1, -1, -1,
03662 -1, 45, 46, 47, 48, 49, 50, 51, 52, 53,
03663 54, -1, 56, -1, -1, -1, -1, -1, -1, -1,
03664 -1, -1, 66, 67, 68, 69, 70, 71, 72, 73,
03665 74, -1, -1, 77, 78, -1, -1, 81, 82, 83,
03666 84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03667 -1, 95, -1, -1, 98, -1, -1, -1, -1, -1,
03668 -1, -1, -1, -1, -1, -1, -1, -1, 112, 113,
03669 114, 115, 116, 117, 118, 119, 120, 121, -1, 123,
03670 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03671 -1, -1, -1, -1, -1, -1, -1, 141, 3, 4,
03672 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
03673 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
03674 25, 26, -1, -1, -1, 30, 31, 32, 33, 34,
03675 35, 36, 37, 38, 39, -1, -1, -1, -1, -1,
03676 45, 46, 47, 48, 49, 50, 51, 52, 53, -1,
03677 -1, 56, -1, -1, -1, -1, -1, -1, -1, -1,
03678 -1, 66, 67, 68, 69, 70, 71, 72, 73, 74,
03679 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
03680 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03681 95, -1, -1, 98, -1, -1, -1, -1, -1, -1,
03682 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114,
03683 115, 116, 117, 118, 119, 120, 121, -1, 123, 124,
03684 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03685 -1, -1, -1, -1, -1, -1, 141, 3, 4, 5,
03686 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
03687 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
03688 26, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03689 36, 37, 38, 39, -1, -1, -1, -1, -1, 45,
03690 46, 47, 48, 49, 50, 51, 52, 53, -1, -1,
03691 56, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03692 66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
03693 -1, 77, 78, -1, -1, 81, 82, 83, 84, -1,
03694 -1, -1, -1, -1, -1, -1, -1, -1, -1, 95,
03695 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03696 -1, -1, -1, -1, -1, -1, 112, 113, 114, 115,
03697 116, 117, 118, 119, 120, 121, -1, 123, 124, -1,
03698 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
03699 12, -1, -1, -1, 16, 141, 18, 19, 20, 21,
03700 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03701 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03702 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03703 52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
03704 62, 63, 64, -1, -1, -1, -1, -1, -1, -1,
03705 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03706 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03707 92, 93, -1, -1, -1, 97, 98, 99, 100, 101,
03708 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03709 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
03710 122, 11, 12, -1, -1, -1, 16, -1, 18, 19,
03711 20, 21, 22, 23, 24, -1, -1, -1, 140, -1,
03712 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
03713 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
03714 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
03715 60, -1, 62, 63, 64, -1, -1, -1, -1, -1,
03716 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03717 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
03718 90, -1, 92, 93, -1, -1, -1, 97, 98, 99,
03719 100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
03720 -1, -1, -1, -1, -1, 3, 4, 5, 6, 7,
03721 -1, -1, 122, 11, 12, -1, -1, -1, 16, -1,
03722 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03723 140, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03724 -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
03725 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03726 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03727 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03728 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03729 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03730 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03731 -1, -1, -1, -1, 3, 4, 5, 6, 7, -1,
03732 -1, -1, 11, 12, 122, 123, 124, 16, -1, 18,
03733 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
03734 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
03735 39, -1, -1, -1, -1, -1, 45, 46, -1, 48,
03736 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
03737 59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
03738 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03739 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
03740 89, 90, -1, 92, 93, -1, 95, -1, 97, 98,
03741 99, 100, 101, 102, 103, -1, -1, -1, -1, -1,
03742 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
03743 -1, 11, 12, 122, 123, 124, 16, -1, 18, 19,
03744 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
03745 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
03746 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
03747 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
03748 60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
03749 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03750 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
03751 90, -1, 92, 93, -1, 95, 96, 97, 98, 99,
03752 100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
03753 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03754 11, 12, 122, 123, 124, 16, -1, 18, 19, 20,
03755 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03756 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03757 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03758 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
03759 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03760 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03761 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03762 -1, 92, 93, -1, 95, 96, 97, 98, 99, 100,
03763 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03764 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
03765 12, 122, 123, 124, 16, -1, 18, 19, 20, 21,
03766 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03767 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03768 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03769 52, 53, 54, 55, 56, 57, 58, 59, 60, -1,
03770 62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
03771 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03772 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03773 92, 93, -1, 95, -1, 97, 98, 99, 100, 101,
03774 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03775 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
03776 122, 123, 124, 16, -1, 18, 19, 20, 21, 22,
03777 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03778 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03779 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03780 53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
03781 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03782 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03783 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03784 93, -1, -1, 96, 97, 98, 99, 100, 101, 102,
03785 103, -1, -1, -1, -1, -1, -1, -1, -1, 3,
03786 4, 5, -1, 7, -1, -1, -1, 11, 12, 122,
03787 123, 124, 16, -1, 18, 19, 20, 21, 22, 23,
03788 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03789 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03790 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03791 54, 55, 56, 57, 58, 59, 60, -1, 62, 63,
03792 64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
03793 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03794 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03795 -1, 95, -1, 97, 98, 99, 100, 101, 102, 103,
03796 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
03797 5, -1, 7, -1, -1, -1, 11, 12, 122, 123,
03798 124, 16, -1, 18, 19, 20, 21, 22, 23, 24,
03799 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
03800 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
03801 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
03802 55, 56, 57, 58, 59, 60, -1, 62, 63, 64,
03803 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03804 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03805 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03806 -1, -1, 97, 98, 99, 100, 101, 102, 103, -1,
03807 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
03808 -1, 7, -1, -1, -1, 11, 12, 122, 123, 124,
03809 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03810 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03811 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03812 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03813 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03814 66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
03815 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03816 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03817 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03818 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
03819 7, -1, -1, -1, 11, 12, 122, 123, 124, 16,
03820 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
03821 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
03822 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
03823 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
03824 57, -1, 59, 60, -1, 62, 63, 64, -1, 66,
03825 67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03826 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
03827 -1, -1, 89, 90, -1, 92, 93, -1, 95, -1,
03828 97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
03829 -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
03830 -1, -1, -1, 11, 12, 122, 123, 124, 16, -1,
03831 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03832 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03833 -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
03834 -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03835 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03836 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03837 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03838 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03839 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03840 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
03841 -1, -1, 11, 12, 122, 123, 124, 16, -1, 18,
03842 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
03843 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
03844 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
03845 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
03846 59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
03847 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03848 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
03849 89, 90, -1, 92, 93, -1, 95, -1, 97, 98,
03850 99, 100, 101, 102, 103, -1, -1, -1, -1, -1,
03851 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
03852 -1, 11, 12, 122, 123, 124, 16, -1, 18, 19,
03853 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
03854 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
03855 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
03856 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
03857 60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
03858 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03859 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
03860 90, -1, 92, 93, -1, 95, -1, 97, 98, 99,
03861 100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
03862 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03863 11, 12, 122, 123, 124, 16, -1, 18, 19, 20,
03864 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03865 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03866 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03867 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03868 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03869 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03870 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03871 -1, 92, 93, -1, -1, -1, 97, 98, 99, 100,
03872 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03873 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
03874 12, 122, 123, 124, 16, -1, 18, 19, 20, 21,
03875 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03876 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03877 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03878 52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
03879 62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
03880 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03881 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03882 92, 93, -1, -1, -1, 97, 98, 99, 100, 101,
03883 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03884 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
03885 122, 123, 124, 16, -1, 18, 19, 20, 21, 22,
03886 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03887 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03888 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03889 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03890 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03891 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03892 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03893 93, -1, -1, -1, 97, 98, 99, 100, 101, 102,
03894 103, -1, -1, -1, -1, -1, -1, -1, -1, 3,
03895 4, 5, -1, 7, -1, -1, -1, 11, 12, 122,
03896 123, 124, 16, -1, 18, 19, 20, 21, 22, 23,
03897 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03898 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03899 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03900 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03901 64, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03902 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03903 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03904 -1, 95, -1, 97, 98, 99, 100, 101, 102, 103,
03905 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
03906 -1, -1, 11, 12, -1, -1, -1, 16, 122, 18,
03907 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
03908 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
03909 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
03910 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
03911 59, 60, -1, 62, 63, 64, -1, -1, -1, -1,
03912 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03913 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
03914 89, 90, -1, 92, 93, -1, 95, -1, 97, 98,
03915 99, 100, 101, 102, 103, -1, -1, -1, -1, 3,
03916 4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
03917 -1, -1, 16, 122, 18, 19, 20, 21, 22, 23,
03918 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03919 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03920 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03921 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03922 64, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03923 -1, -1, -1, -1, -1, -1, -1, -1, -1, 83,
03924 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03925 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03926 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
03927 -1, -1, 11, 12, -1, -1, -1, 16, 122, 18,
03928 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
03929 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
03930 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
03931 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
03932 59, 60, -1, 62, 63, 64, -1, -1, -1, -1,
03933 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03934 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
03935 89, 90, -1, 92, 93, -1, -1, -1, 97, 98,
03936 99, 100, 101, 102, 103, -1, -1, -1, -1, 3,
03937 4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
03938 -1, -1, 16, 122, 18, 19, 20, 21, 22, 23,
03939 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03940 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03941 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03942 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03943 64, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03944 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03945 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03946 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03947 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
03948 -1, -1, 11, 12, -1, -1, -1, 16, 122, 18,
03949 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
03950 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
03951 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
03952 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
03953 59, 60, -1, 62, 63, 64, -1, -1, -1, -1,
03954 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03955 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
03956 89, 90, -1, 92, 93, -1, -1, -1, 97, 98,
03957 99, 100, 101, 102, 103, -1, -1, -1, -1, 3,
03958 4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
03959 -1, -1, 16, 122, 18, 19, 20, 21, 22, 23,
03960 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03961 34, 35, 36, -1, -1, 39, -1, 44, -1, -1,
03962 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03963 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03964 64, 68, 69, 70, 71, 72, 73, 74, 75, 76,
03965 77, 78, 79, 80, -1, -1, 83, 84, -1, -1,
03966 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03967 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03968 -1, -1, -1, 110, -1, 112, 113, 114, 115, 116,
03969 117, 118, 119, 120, 121, -1, -1, -1, 122, -1,
03970 52, 53, -1, -1, 56, -1, -1, -1, -1, -1,
03971 -1, -1, -1, 140, 66, 67, 68, 69, 70, 71,
03972 72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
03973 82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
03974 -1, -1, -1, 95, -1, -1, -1, -1, -1, -1,
03975 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03976 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
03977 -1, 123, 124, -1, -1, -1, -1, 52, 53, -1,
03978 -1, 56, -1, -1, -1, -1, -1, -1, -1, 141,
03979 142, 66, 67, 68, 69, 70, 71, 72, 73, 74,
03980 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
03981 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03982 95, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03983 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114,
03984 115, 116, 117, 118, 119, 120, 121, -1, 123, 124,
03985 -1, -1, -1, -1, 52, 53, -1, -1, 56, -1,
03986 -1, -1, -1, -1, -1, -1, 141, 142, 66, 67,
03987 68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
03988 78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
03989 -1, -1, -1, -1, -1, -1, -1, 95, -1, -1,
03990 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03991 -1, -1, -1, -1, 112, 113, 114, 115, 116, 117,
03992 118, 119, 120, 121, -1, 123, 124, -1, -1, -1,
03993 -1, 52, 53, -1, -1, 56, -1, -1, -1, -1,
03994 -1, -1, -1, 141, 142, 66, 67, 68, 69, 70,
03995 71, 72, 73, 74, -1, -1, 77, 78, -1, -1,
03996 81, 82, 83, 84, -1, -1, -1, -1, -1, -1,
03997 -1, -1, -1, -1, 95, -1, -1, -1, -1, -1,
03998 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03999 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
04000 121, -1, 123, 124, -1, -1, -1, -1, 52, 53,
04001 -1, -1, 56, -1, -1, -1, -1, -1, -1, -1,
04002 141, 142, 66, 67, 68, 69, 70, 71, 72, 73,
04003 74, -1, -1, 77, 78, -1, -1, 81, 82, 83,
04004 84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04005 -1, 95, -1, -1, -1, -1, -1, -1, -1, -1,
04006 -1, -1, -1, -1, -1, -1, -1, -1, 112, 113,
04007 114, 115, 116, 117, 118, 119, 120, 121, -1, 123,
04008 124, -1, -1, -1, -1, 52, 53, -1, -1, 56,
04009 -1, -1, -1, -1, -1, -1, -1, 141, 142, 66,
04010 67, 68, 69, 70, 71, 72, 73, 74, -1, -1,
04011 77, 78, -1, -1, 81, 82, 83, 84, -1, -1,
04012 -1, -1, -1, -1, -1, -1, -1, -1, 95, -1,
04013 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04014 -1, -1, -1, -1, -1, 112, 113, 114, 115, 116,
04015 117, 118, 119, 120, 121, -1, 123, 124, -1, -1,
04016 -1, -1, 52, 53, -1, -1, 56, -1, -1, -1,
04017 -1, -1, -1, -1, 141, 142, 66, 67, 68, 69,
04018 70, 71, 72, 73, 74, -1, -1, 77, 78, -1,
04019 -1, 81, 82, 83, 84, -1, -1, -1, -1, -1,
04020 -1, -1, -1, -1, -1, 95, -1, -1, -1, -1,
04021 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04022 -1, -1, 112, 113, 114, 115, 116, 117, 118, 119,
04023 120, 121, -1, 123, 124, -1, -1, -1, -1, 52,
04024 53, -1, -1, 56, -1, -1, -1, -1, -1, -1,
04025 -1, 141, 142, 66, 67, 68, 69, 70, 71, 72,
04026 73, 74, -1, -1, 77, 78, -1, -1, 81, 82,
04027 83, 84, -1, -1, -1, -1, -1, -1, -1, -1,
04028 -1, -1, 95, -1, -1, -1, -1, -1, -1, -1,
04029 -1, -1, -1, -1, -1, -1, -1, -1, -1, 112,
04030 113, 114, 115, 116, 117, 118, 119, 120, 121, -1,
04031 123, 124, -1, -1, -1, -1, 52, 53, -1, -1,
04032 56, -1, -1, -1, -1, -1, -1, -1, 141, 142,
04033 66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
04034 -1, 77, 78, -1, -1, 81, 82, 83, 84, -1,
04035 -1, -1, -1, -1, -1, -1, -1, -1, -1, 95,
04036 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04037 -1, -1, -1, -1, -1, -1, 112, 113, 114, 115,
04038 116, 117, 118, 119, 120, 121, -1, 123, 124, -1,
04039 -1, -1, -1, 52, 53, -1, -1, 56, -1, -1,
04040 -1, -1, -1, -1, -1, 141, 142, 66, 67, 68,
04041 69, 70, 71, 72, 73, 74, -1, -1, 77, 78,
04042 -1, -1, 81, 82, 83, 84, -1, -1, -1, -1,
04043 -1, -1, -1, -1, -1, -1, 95, -1, -1, -1,
04044 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04045 -1, -1, -1, 112, 113, 114, 115, 116, 117, 118,
04046 119, 120, 121, -1, 123, 124, -1, -1, -1, -1,
04047 52, 53, -1, -1, 56, -1, -1, -1, -1, -1,
04048 -1, -1, 141, 142, 66, 67, 68, 69, 70, 71,
04049 72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
04050 82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
04051 -1, -1, -1, 95, -1, -1, -1, -1, -1, -1,
04052 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04053 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
04054 -1, 123, 124, -1, -1, -1, -1, 52, 53, -1,
04055 -1, 56, -1, -1, -1, -1, -1, -1, -1, 141,
04056 142, 66, 67, 68, 69, 70, 71, 72, 73, 74,
04057 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
04058 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04059 95, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04060 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114,
04061 115, 116, 117, 118, 119, 120, 121, -1, 123, 124,
04062 -1, -1, -1, -1, 52, 53, -1, -1, 56, -1,
04063 -1, -1, -1, -1, -1, -1, 141, 142, 66, 67,
04064 68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
04065 78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
04066 -1, -1, -1, -1, -1, -1, -1, 95, -1, -1,
04067 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04068 -1, -1, -1, -1, 112, 113, 114, 115, 116, 117,
04069 118, 119, 120, 121, -1, 123, 124, -1, -1, -1,
04070 -1, 52, 53, -1, -1, 56, -1, -1, -1, -1,
04071 -1, -1, -1, 141, 142, 66, 67, 68, 69, 70,
04072 71, 72, 73, 74, -1, -1, 77, 78, -1, -1,
04073 81, 82, 83, 84, -1, -1, -1, -1, -1, -1,
04074 -1, -1, -1, -1, 95, -1, -1, -1, -1, -1,
04075 -1, -1, 44, -1, -1, -1, -1, -1, -1, -1,
04076 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
04077 121, 44, 123, 124, -1, -1, 68, 69, 70, 71,
04078 72, 73, 74, 75, 76, 77, 78, 79, 80, -1,
04079 141, 83, 84, -1, -1, 68, 69, 70, 71, 72,
04080 73, 74, 75, 76, 77, 78, 79, 80, -1, -1,
04081 83, 84, -1, -1, -1, -1, -1, -1, 110, -1,
04082 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
04083 -1, -1, -1, -1, -1, -1, -1, 110, -1, 112,
04084 113, 114, 115, 116, 117, 118, 119, 120, 121
04085 };
04086
04087
04088
04089 static const yytype_uint16 yystos[] =
04090 {
04091 0, 149, 150, 0, 1, 3, 4, 5, 6, 7,
04092 11, 12, 16, 18, 19, 20, 21, 22, 23, 24,
04093 30, 31, 32, 33, 34, 35, 36, 39, 45, 46,
04094 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
04095 57, 59, 60, 62, 63, 64, 66, 67, 86, 89,
04096 90, 92, 93, 95, 97, 98, 99, 100, 101, 102,
04097 103, 122, 123, 124, 151, 152, 153, 158, 160, 161,
04098 163, 164, 167, 168, 170, 171, 172, 174, 175, 185,
04099 199, 216, 217, 218, 219, 220, 221, 222, 223, 224,
04100 225, 226, 249, 250, 260, 261, 262, 263, 264, 265,
04101 266, 269, 279, 281, 282, 283, 284, 285, 286, 287,
04102 310, 321, 153, 3, 4, 5, 6, 7, 8, 9,
04103 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
04104 20, 21, 22, 23, 24, 25, 26, 30, 31, 32,
04105 33, 34, 35, 36, 37, 38, 39, 45, 46, 47,
04106 48, 49, 50, 51, 52, 53, 56, 66, 67, 68,
04107 69, 70, 71, 72, 73, 74, 77, 78, 81, 82,
04108 83, 84, 95, 112, 113, 114, 115, 116, 117, 118,
04109 119, 120, 121, 123, 124, 141, 178, 179, 180, 181,
04110 183, 184, 279, 281, 39, 58, 86, 89, 95, 96,
04111 123, 167, 175, 185, 187, 192, 195, 197, 216, 283,
04112 284, 286, 287, 308, 309, 192, 192, 142, 193, 194,
04113 142, 189, 193, 142, 147, 315, 54, 180, 315, 154,
04114 136, 21, 22, 30, 31, 32, 185, 216, 310, 185,
04115 56, 1, 89, 156, 157, 158, 169, 170, 321, 161,
04116 188, 197, 308, 321, 187, 307, 308, 321, 46, 86,
04117 122, 140, 174, 199, 216, 283, 284, 287, 242, 243,
04118 54, 55, 57, 178, 272, 280, 271, 272, 273, 146,
04119 267, 146, 270, 59, 60, 163, 185, 185, 145, 147,
04120 314, 319, 320, 40, 41, 42, 43, 44, 37, 38,
04121 28, 247, 109, 140, 89, 95, 171, 109, 68, 69,
04122 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
04123 80, 83, 84, 110, 112, 113, 114, 115, 116, 117,
04124 118, 119, 120, 121, 85, 138, 139, 200, 161, 162,
04125 162, 203, 205, 162, 314, 320, 86, 168, 175, 216,
04126 232, 283, 284, 287, 52, 56, 83, 86, 176, 177,
04127 216, 283, 284, 287, 177, 33, 34, 35, 36, 49,
04128 50, 51, 52, 56, 142, 178, 285, 305, 85, 139,
04129 26, 136, 251, 263, 87, 87, 189, 193, 251, 140,
04130 187, 56, 187, 187, 109, 88, 140, 196, 321, 85,
04131 138, 139, 87, 87, 140, 196, 192, 315, 316, 192,
04132 191, 192, 197, 308, 321, 161, 316, 161, 54, 63,
04133 64, 159, 142, 186, 136, 156, 85, 139, 87, 158,
04134 169, 143, 314, 320, 316, 201, 144, 140, 147, 318,
04135 140, 318, 137, 318, 315, 56, 59, 60, 171, 173,
04136 140, 85, 138, 139, 244, 61, 104, 105, 106, 274,
04137 106, 274, 106, 65, 274, 106, 106, 268, 274, 106,
04138 61, 106, 68, 68, 145, 153, 162, 162, 162, 162,
04139 158, 161, 161, 248, 95, 163, 187, 197, 198, 169,
04140 140, 174, 140, 160, 163, 175, 185, 187, 198, 185,
04141 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
04142 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
04143 185, 185, 185, 185, 185, 52, 53, 56, 183, 189,
04144 311, 312, 191, 52, 53, 56, 183, 189, 311, 155,
04145 156, 13, 228, 319, 228, 162, 162, 314, 17, 254,
04146 56, 85, 138, 139, 25, 161, 52, 56, 176, 1,
04147 113, 288, 319, 85, 138, 139, 212, 306, 213, 85,
04148 139, 313, 52, 56, 311, 311, 253, 252, 163, 185,
04149 163, 185, 94, 165, 182, 185, 187, 95, 187, 195,
04150 308, 52, 56, 191, 52, 56, 309, 316, 143, 316,
04151 140, 140, 316, 180, 202, 185, 151, 137, 311, 311,
04152 185, 316, 158, 316, 308, 140, 173, 52, 56, 191,
04153 52, 56, 52, 54, 55, 56, 57, 89, 95, 96,
04154 116, 119, 142, 245, 291, 292, 293, 294, 295, 296,
04155 299, 300, 301, 302, 303, 276, 275, 146, 274, 146,
04156 185, 185, 76, 114, 237, 238, 321, 187, 140, 316,
04157 173, 140, 109, 44, 315, 87, 87, 189, 193, 315,
04158 317, 87, 87, 189, 190, 193, 321, 10, 227, 8,
04159 256, 321, 156, 13, 156, 27, 229, 319, 229, 254,
04160 197, 227, 52, 56, 191, 52, 56, 207, 210, 319,
04161 289, 209, 52, 56, 176, 191, 155, 161, 142, 290,
04162 291, 214, 190, 193, 190, 193, 237, 237, 44, 166,
04163 180, 187, 196, 87, 87, 317, 87, 87, 308, 161,
04164 137, 318, 171, 317, 109, 52, 89, 95, 233, 234,
04165 235, 293, 291, 29, 107, 246, 140, 304, 321, 140,
04166 304, 52, 140, 304, 52, 277, 54, 55, 57, 278,
04167 287, 52, 145, 236, 239, 295, 297, 298, 301, 303,
04168 321, 156, 95, 187, 173, 185, 111, 163, 185, 163,
04169 185, 165, 144, 87, 163, 185, 163, 185, 165, 187,
04170 198, 257, 321, 15, 231, 321, 14, 230, 231, 231,
04171 204, 206, 227, 140, 228, 317, 162, 319, 162, 155,
04172 317, 227, 316, 291, 155, 319, 178, 156, 156, 185,
04173 237, 87, 140, 316, 187, 235, 140, 293, 140, 316,
04174 239, 156, 156, 294, 299, 301, 303, 295, 296, 301,
04175 295, 156, 109, 52, 240, 241, 292, 239, 114, 140,
04176 304, 140, 304, 140, 304, 10, 187, 185, 163, 185,
04177 88, 258, 321, 156, 9, 259, 321, 162, 227, 227,
04178 156, 156, 187, 156, 229, 211, 319, 227, 316, 227,
04179 215, 10, 137, 156, 316, 234, 140, 95, 233, 316,
04180 10, 137, 140, 304, 140, 304, 140, 304, 140, 304,
04181 304, 137, 86, 216, 140, 114, 298, 301, 295, 297,
04182 301, 295, 86, 175, 216, 283, 284, 287, 228, 156,
04183 228, 227, 227, 231, 254, 255, 208, 155, 290, 137,
04184 140, 234, 140, 293, 295, 301, 295, 295, 56, 85,
04185 241, 140, 304, 140, 304, 304, 140, 304, 304, 56,
04186 85, 138, 139, 156, 156, 156, 227, 155, 234, 140,
04187 304, 140, 304, 304, 304, 52, 56, 295, 301, 295,
04188 295, 52, 56, 191, 52, 56, 256, 230, 227, 227,
04189 234, 295, 304, 140, 304, 304, 304, 317, 304, 295,
04190 304
04191 };
04192
04193 #define yyerrok (yyerrstatus = 0)
04194 #define yyclearin (yychar = YYEMPTY)
04195 #define YYEMPTY (-2)
04196 #define YYEOF 0
04197
04198 #define YYACCEPT goto yyacceptlab
04199 #define YYABORT goto yyabortlab
04200 #define YYERROR goto yyerrorlab
04201
04202
04203
04204
04205
04206
04207
04208
04209
04210 #define YYFAIL goto yyerrlab
04211 #if defined YYFAIL
04212
04213
04214
04215
04216 #endif
04217
04218 #define YYRECOVERING() (!!yyerrstatus)
04219
04220 #define YYBACKUP(Token, Value) \
04221 do \
04222 if (yychar == YYEMPTY && yylen == 1) \
04223 { \
04224 yychar = (Token); \
04225 yylval = (Value); \
04226 YYPOPSTACK (1); \
04227 goto yybackup; \
04228 } \
04229 else \
04230 { \
04231 parser_yyerror (parser, YY_("syntax error: cannot back up")); \
04232 YYERROR; \
04233 } \
04234 while (YYID (0))
04235
04236
04237 #define YYTERROR 1
04238 #define YYERRCODE 256
04239
04240
04241
04242
04243
04244
04245 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
04246 #ifndef YYLLOC_DEFAULT
04247 # define YYLLOC_DEFAULT(Current, Rhs, N) \
04248 do \
04249 if (YYID (N)) \
04250 { \
04251 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
04252 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
04253 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
04254 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
04255 } \
04256 else \
04257 { \
04258 (Current).first_line = (Current).last_line = \
04259 YYRHSLOC (Rhs, 0).last_line; \
04260 (Current).first_column = (Current).last_column = \
04261 YYRHSLOC (Rhs, 0).last_column; \
04262 } \
04263 while (YYID (0))
04264 #endif
04265
04266
04267
04268
04269 #ifndef YY_LOCATION_PRINT
04270 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
04271 #endif
04272
04273
04274
04275
04276 #ifdef YYLEX_PARAM
04277 # define YYLEX yylex (&yylval, YYLEX_PARAM)
04278 #else
04279 # define YYLEX yylex (&yylval, parser)
04280 #endif
04281
04282
04283 #if YYDEBUG
04284
04285 # ifndef YYFPRINTF
04286 # include <stdio.h>
04287 # define YYFPRINTF fprintf
04288 # endif
04289
04290 # define YYDPRINTF(Args) \
04291 do { \
04292 if (yydebug) \
04293 YYFPRINTF Args; \
04294 } while (YYID (0))
04295
04296 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
04297 do { \
04298 if (yydebug) \
04299 { \
04300 YYFPRINTF (stderr, "%s ", Title); \
04301 yy_symbol_print (stderr, \
04302 Type, Value, parser); \
04303 YYFPRINTF (stderr, "\n"); \
04304 } \
04305 } while (YYID (0))
04306
04307
04308
04309
04310
04311
04312
04313 #if (defined __STDC__ || defined __C99__FUNC__ \
04314 || defined __cplusplus || defined _MSC_VER)
04315 static void
04316 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04317 #else
04318 static void
04319 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
04320 FILE *yyoutput;
04321 int yytype;
04322 YYSTYPE const * const yyvaluep;
04323 struct parser_params *parser;
04324 #endif
04325 {
04326 if (!yyvaluep)
04327 return;
04328 YYUSE (parser);
04329 # ifdef YYPRINT
04330 if (yytype < YYNTOKENS)
04331 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
04332 # else
04333 YYUSE (yyoutput);
04334 # endif
04335 switch (yytype)
04336 {
04337 default:
04338 break;
04339 }
04340 }
04341
04342
04343
04344
04345
04346
04347 #if (defined __STDC__ || defined __C99__FUNC__ \
04348 || defined __cplusplus || defined _MSC_VER)
04349 static void
04350 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04351 #else
04352 static void
04353 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
04354 FILE *yyoutput;
04355 int yytype;
04356 YYSTYPE const * const yyvaluep;
04357 struct parser_params *parser;
04358 #endif
04359 {
04360 if (yytype < YYNTOKENS)
04361 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
04362 else
04363 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
04364
04365 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
04366 YYFPRINTF (yyoutput, ")");
04367 }
04368
04369
04370
04371
04372
04373
04374 #if (defined __STDC__ || defined __C99__FUNC__ \
04375 || defined __cplusplus || defined _MSC_VER)
04376 static void
04377 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
04378 #else
04379 static void
04380 yy_stack_print (yybottom, yytop)
04381 yytype_int16 *yybottom;
04382 yytype_int16 *yytop;
04383 #endif
04384 {
04385 YYFPRINTF (stderr, "Stack now");
04386 for (; yybottom <= yytop; yybottom++)
04387 {
04388 int yybot = *yybottom;
04389 YYFPRINTF (stderr, " %d", yybot);
04390 }
04391 YYFPRINTF (stderr, "\n");
04392 }
04393
04394 # define YY_STACK_PRINT(Bottom, Top) \
04395 do { \
04396 if (yydebug) \
04397 yy_stack_print ((Bottom), (Top)); \
04398 } while (YYID (0))
04399
04400
04401
04402
04403
04404
04405 #if (defined __STDC__ || defined __C99__FUNC__ \
04406 || defined __cplusplus || defined _MSC_VER)
04407 static void
04408 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
04409 #else
04410 static void
04411 yy_reduce_print (yyvsp, yyrule, parser)
04412 YYSTYPE *yyvsp;
04413 int yyrule;
04414 struct parser_params *parser;
04415 #endif
04416 {
04417 int yynrhs = yyr2[yyrule];
04418 int yyi;
04419 unsigned long int yylno = yyrline[yyrule];
04420 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
04421 yyrule - 1, yylno);
04422
04423 for (yyi = 0; yyi < yynrhs; yyi++)
04424 {
04425 YYFPRINTF (stderr, " $%d = ", yyi + 1);
04426 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
04427 &(yyvsp[(yyi + 1) - (yynrhs)])
04428 , parser);
04429 YYFPRINTF (stderr, "\n");
04430 }
04431 }
04432
04433 # define YY_REDUCE_PRINT(Rule) \
04434 do { \
04435 if (yydebug) \
04436 yy_reduce_print (yyvsp, Rule, parser); \
04437 } while (YYID (0))
04438
04439
04440
04441 #ifndef yydebug
04442 int yydebug;
04443 #endif
04444 #else
04445 # define YYDPRINTF(Args)
04446 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
04447 # define YY_STACK_PRINT(Bottom, Top)
04448 # define YY_REDUCE_PRINT(Rule)
04449 #endif
04450
04451
04452
04453 #ifndef YYINITDEPTH
04454 # define YYINITDEPTH 200
04455 #endif
04456
04457
04458
04459
04460
04461
04462
04463
04464 #ifndef YYMAXDEPTH
04465 # define YYMAXDEPTH 10000
04466 #endif
04467
04468
04469 #if YYERROR_VERBOSE
04470
04471 # ifndef yystrlen
04472 # if defined __GLIBC__ && defined _STRING_H
04473 # define yystrlen strlen
04474 # else
04475
04476 #if (defined __STDC__ || defined __C99__FUNC__ \
04477 || defined __cplusplus || defined _MSC_VER)
04478 static YYSIZE_T
04479 yystrlen (const char *yystr)
04480 #else
04481 static YYSIZE_T
04482 yystrlen (yystr)
04483 const char *yystr;
04484 #endif
04485 {
04486 YYSIZE_T yylen;
04487 for (yylen = 0; yystr[yylen]; yylen++)
04488 continue;
04489 return yylen;
04490 }
04491 # endif
04492 # endif
04493
04494 # ifndef yystpcpy
04495 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
04496 # define yystpcpy stpcpy
04497 # else
04498
04499
04500 #if (defined __STDC__ || defined __C99__FUNC__ \
04501 || defined __cplusplus || defined _MSC_VER)
04502 static char *
04503 yystpcpy (char *yydest, const char *yysrc)
04504 #else
04505 static char *
04506 yystpcpy (yydest, yysrc)
04507 char *yydest;
04508 const char *yysrc;
04509 #endif
04510 {
04511 char *yyd = yydest;
04512 const char *yys = yysrc;
04513
04514 while ((*yyd++ = *yys++) != '\0')
04515 continue;
04516
04517 return yyd - 1;
04518 }
04519 # endif
04520 # endif
04521
04522 # ifndef yytnamerr
04523
04524
04525
04526
04527
04528
04529
04530 static YYSIZE_T
04531 yytnamerr (char *yyres, const char *yystr)
04532 {
04533 if (*yystr == '"')
04534 {
04535 YYSIZE_T yyn = 0;
04536 char const *yyp = yystr;
04537
04538 for (;;)
04539 switch (*++yyp)
04540 {
04541 case '\'':
04542 case ',':
04543 goto do_not_strip_quotes;
04544
04545 case '\\':
04546 if (*++yyp != '\\')
04547 goto do_not_strip_quotes;
04548
04549 default:
04550 if (yyres)
04551 yyres[yyn] = *yyp;
04552 yyn++;
04553 break;
04554
04555 case '"':
04556 if (yyres)
04557 yyres[yyn] = '\0';
04558 return yyn;
04559 }
04560 do_not_strip_quotes: ;
04561 }
04562
04563 if (! yyres)
04564 return yystrlen (yystr);
04565
04566 return yystpcpy (yyres, yystr) - yyres;
04567 }
04568 # endif
04569
04570
04571
04572
04573
04574
04575
04576
04577
04578 static int
04579 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
04580 yytype_int16 *yyssp, int yytoken)
04581 {
04582 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
04583 YYSIZE_T yysize = yysize0;
04584 YYSIZE_T yysize1;
04585 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
04586
04587 const char *yyformat = 0;
04588
04589 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
04590
04591
04592 int yycount = 0;
04593
04594
04595
04596
04597
04598
04599
04600
04601
04602
04603
04604
04605
04606
04607
04608
04609
04610
04611
04612
04613
04614
04615
04616
04617
04618
04619
04620
04621 if (yytoken != YYEMPTY)
04622 {
04623 int yyn = yypact[*yyssp];
04624 yyarg[yycount++] = yytname[yytoken];
04625 if (!yypact_value_is_default (yyn))
04626 {
04627
04628
04629
04630 int yyxbegin = yyn < 0 ? -yyn : 0;
04631
04632 int yychecklim = YYLAST - yyn + 1;
04633 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
04634 int yyx;
04635
04636 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
04637 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
04638 && !yytable_value_is_error (yytable[yyx + yyn]))
04639 {
04640 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
04641 {
04642 yycount = 1;
04643 yysize = yysize0;
04644 break;
04645 }
04646 yyarg[yycount++] = yytname[yyx];
04647 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
04648 if (! (yysize <= yysize1
04649 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
04650 return 2;
04651 yysize = yysize1;
04652 }
04653 }
04654 }
04655
04656 switch (yycount)
04657 {
04658 # define YYCASE_(N, S) \
04659 case N: \
04660 yyformat = S; \
04661 break
04662 YYCASE_(0, YY_("syntax error"));
04663 YYCASE_(1, YY_("syntax error, unexpected %s"));
04664 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
04665 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
04666 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
04667 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
04668 # undef YYCASE_
04669 }
04670
04671 yysize1 = yysize + yystrlen (yyformat);
04672 if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
04673 return 2;
04674 yysize = yysize1;
04675
04676 if (*yymsg_alloc < yysize)
04677 {
04678 *yymsg_alloc = 2 * yysize;
04679 if (! (yysize <= *yymsg_alloc
04680 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
04681 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
04682 return 1;
04683 }
04684
04685
04686
04687
04688 {
04689 char *yyp = *yymsg;
04690 int yyi = 0;
04691 while ((*yyp = *yyformat) != '\0')
04692 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
04693 {
04694 yyp += yytnamerr (yyp, yyarg[yyi++]);
04695 yyformat += 2;
04696 }
04697 else
04698 {
04699 yyp++;
04700 yyformat++;
04701 }
04702 }
04703 return 0;
04704 }
04705 #endif
04706
04707
04708
04709
04710
04711
04712 #if (defined __STDC__ || defined __C99__FUNC__ \
04713 || defined __cplusplus || defined _MSC_VER)
04714 static void
04715 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
04716 #else
04717 static void
04718 yydestruct (yymsg, yytype, yyvaluep, parser)
04719 const char *yymsg;
04720 int yytype;
04721 YYSTYPE *yyvaluep;
04722 struct parser_params *parser;
04723 #endif
04724 {
04725 YYUSE (yyvaluep);
04726 YYUSE (parser);
04727
04728 if (!yymsg)
04729 yymsg = "Deleting";
04730 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
04731
04732 switch (yytype)
04733 {
04734
04735 default:
04736 break;
04737 }
04738 }
04739
04740
04741
04742 #ifdef YYPARSE_PARAM
04743 #if defined __STDC__ || defined __cplusplus
04744 int yyparse (void *YYPARSE_PARAM);
04745 #else
04746 int yyparse ();
04747 #endif
04748 #else
04749 #if defined __STDC__ || defined __cplusplus
04750 int yyparse (struct parser_params *parser);
04751 #else
04752 int yyparse ();
04753 #endif
04754 #endif
04755
04756
04757
04758
04759
04760
04761 #ifdef YYPARSE_PARAM
04762 #if (defined __STDC__ || defined __C99__FUNC__ \
04763 || defined __cplusplus || defined _MSC_VER)
04764 int
04765 yyparse (void *YYPARSE_PARAM)
04766 #else
04767 int
04768 yyparse (YYPARSE_PARAM)
04769 void *YYPARSE_PARAM;
04770 #endif
04771 #else
04772 #if (defined __STDC__ || defined __C99__FUNC__ \
04773 || defined __cplusplus || defined _MSC_VER)
04774 int
04775 yyparse (struct parser_params *parser)
04776 #else
04777 int
04778 yyparse (parser)
04779 struct parser_params *parser;
04780 #endif
04781 #endif
04782 {
04783
04784 int yychar;
04785
04786
04787 YYSTYPE yylval;
04788
04789
04790 int yynerrs;
04791
04792 int yystate;
04793
04794 int yyerrstatus;
04795
04796
04797
04798
04799
04800
04801
04802
04803
04804 yytype_int16 yyssa[YYINITDEPTH];
04805 yytype_int16 *yyss;
04806 yytype_int16 *yyssp;
04807
04808
04809 YYSTYPE yyvsa[YYINITDEPTH];
04810 YYSTYPE *yyvs;
04811 YYSTYPE *yyvsp;
04812
04813 YYSIZE_T yystacksize;
04814
04815 int yyn;
04816 int yyresult;
04817
04818 int yytoken;
04819
04820
04821 YYSTYPE yyval;
04822
04823 #if YYERROR_VERBOSE
04824
04825 char yymsgbuf[128];
04826 char *yymsg = yymsgbuf;
04827 YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
04828 #endif
04829
04830 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
04831
04832
04833
04834 int yylen = 0;
04835
04836 yytoken = 0;
04837 yyss = yyssa;
04838 yyvs = yyvsa;
04839 yystacksize = YYINITDEPTH;
04840
04841 YYDPRINTF ((stderr, "Starting parse\n"));
04842
04843 yystate = 0;
04844 yyerrstatus = 0;
04845 yynerrs = 0;
04846 yychar = YYEMPTY;
04847
04848
04849
04850
04851
04852 yyssp = yyss;
04853 yyvsp = yyvs;
04854
04855 goto yysetstate;
04856
04857
04858
04859
04860 yynewstate:
04861
04862
04863 yyssp++;
04864
04865 yysetstate:
04866 *yyssp = yystate;
04867
04868 if (yyss + yystacksize - 1 <= yyssp)
04869 {
04870
04871 YYSIZE_T yysize = yyssp - yyss + 1;
04872
04873 #ifdef yyoverflow
04874 {
04875
04876
04877
04878 YYSTYPE *yyvs1 = yyvs;
04879 yytype_int16 *yyss1 = yyss;
04880
04881
04882
04883
04884
04885 yyoverflow (YY_("memory exhausted"),
04886 &yyss1, yysize * sizeof (*yyssp),
04887 &yyvs1, yysize * sizeof (*yyvsp),
04888 &yystacksize);
04889
04890 yyss = yyss1;
04891 yyvs = yyvs1;
04892 }
04893 #else
04894 # ifndef YYSTACK_RELOCATE
04895 goto yyexhaustedlab;
04896 # else
04897
04898 if (YYMAXDEPTH <= yystacksize)
04899 goto yyexhaustedlab;
04900 yystacksize *= 2;
04901 if (YYMAXDEPTH < yystacksize)
04902 yystacksize = YYMAXDEPTH;
04903
04904 {
04905 yytype_int16 *yyss1 = yyss;
04906 union yyalloc *yyptr =
04907 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
04908 if (! yyptr)
04909 goto yyexhaustedlab;
04910 YYSTACK_RELOCATE (yyss_alloc, yyss);
04911 YYSTACK_RELOCATE (yyvs_alloc, yyvs);
04912 # undef YYSTACK_RELOCATE
04913 if (yyss1 != yyssa)
04914 YYSTACK_FREE (yyss1);
04915 }
04916 # endif
04917 #endif
04918
04919 yyssp = yyss + yysize - 1;
04920 yyvsp = yyvs + yysize - 1;
04921
04922 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
04923 (unsigned long int) yystacksize));
04924
04925 if (yyss + yystacksize - 1 <= yyssp)
04926 YYABORT;
04927 }
04928
04929 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
04930
04931 if (yystate == YYFINAL)
04932 YYACCEPT;
04933
04934 goto yybackup;
04935
04936
04937
04938
04939 yybackup:
04940
04941
04942
04943
04944
04945 yyn = yypact[yystate];
04946 if (yypact_value_is_default (yyn))
04947 goto yydefault;
04948
04949
04950
04951
04952 if (yychar == YYEMPTY)
04953 {
04954 YYDPRINTF ((stderr, "Reading a token: "));
04955 yychar = YYLEX;
04956 }
04957
04958 if (yychar <= YYEOF)
04959 {
04960 yychar = yytoken = YYEOF;
04961 YYDPRINTF ((stderr, "Now at end of input.\n"));
04962 }
04963 else
04964 {
04965 yytoken = YYTRANSLATE (yychar);
04966 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
04967 }
04968
04969
04970
04971 yyn += yytoken;
04972 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
04973 goto yydefault;
04974 yyn = yytable[yyn];
04975 if (yyn <= 0)
04976 {
04977 if (yytable_value_is_error (yyn))
04978 goto yyerrlab;
04979 yyn = -yyn;
04980 goto yyreduce;
04981 }
04982
04983
04984
04985 if (yyerrstatus)
04986 yyerrstatus--;
04987
04988
04989 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
04990
04991
04992 yychar = YYEMPTY;
04993
04994 yystate = yyn;
04995 *++yyvsp = yylval;
04996
04997 goto yynewstate;
04998
04999
05000
05001
05002
05003 yydefault:
05004 yyn = yydefact[yystate];
05005 if (yyn == 0)
05006 goto yyerrlab;
05007 goto yyreduce;
05008
05009
05010
05011
05012
05013 yyreduce:
05014
05015 yylen = yyr2[yyn];
05016
05017
05018
05019
05020
05021
05022
05023
05024
05025 yyval = yyvsp[1-yylen];
05026
05027
05028 YY_REDUCE_PRINT (yyn);
05029 switch (yyn)
05030 {
05031 case 2:
05032
05033
05034 #line 786 "parse.y"
05035 {
05036 lex_state = EXPR_BEG;
05037
05038 local_push(compile_for_eval || rb_parse_in_main());
05039
05040
05041
05042 }
05043 break;
05044
05045 case 3:
05046
05047
05048 #line 795 "parse.y"
05049 {
05050
05051 if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
05052
05053 if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
05054 else {
05055 NODE *node = (yyvsp[(2) - (2)].node);
05056 while (node->nd_next) {
05057 node = node->nd_next;
05058 }
05059 void_expr(node->nd_head);
05060 }
05061 }
05062 ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
05063
05064
05065
05066
05067 local_pop();
05068 }
05069 break;
05070
05071 case 4:
05072
05073
05074 #line 818 "parse.y"
05075 {
05076
05077 void_stmts((yyvsp[(1) - (2)].node));
05078 fixup_nodes(&deferred_nodes);
05079
05080
05081 (yyval.node) = (yyvsp[(1) - (2)].node);
05082 }
05083 break;
05084
05085 case 5:
05086
05087
05088 #line 829 "parse.y"
05089 {
05090
05091 (yyval.node) = NEW_BEGIN(0);
05092
05093
05094
05095
05096 }
05097 break;
05098
05099 case 6:
05100
05101
05102 #line 838 "parse.y"
05103 {
05104
05105 (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05106
05107
05108
05109 }
05110 break;
05111
05112 case 7:
05113
05114
05115 #line 846 "parse.y"
05116 {
05117
05118 (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05119
05120
05121
05122 }
05123 break;
05124
05125 case 8:
05126
05127
05128 #line 854 "parse.y"
05129 {
05130 (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05131 }
05132 break;
05133
05134 case 10:
05135
05136
05137 #line 861 "parse.y"
05138 {
05139 if (in_def || in_single) {
05140 yyerror("BEGIN in method");
05141 }
05142
05143
05144
05145
05146 }
05147 break;
05148
05149 case 11:
05150
05151
05152 #line 871 "parse.y"
05153 {
05154
05155 ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
05156 (yyvsp[(4) - (5)].node));
05157
05158
05159 (yyval.node) = NEW_BEGIN(0);
05160
05161
05162
05163 }
05164 break;
05165
05166 case 12:
05167
05168
05169 #line 888 "parse.y"
05170 {
05171
05172 (yyval.node) = (yyvsp[(1) - (4)].node);
05173 if ((yyvsp[(2) - (4)].node)) {
05174 (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
05175 }
05176 else if ((yyvsp[(3) - (4)].node)) {
05177 rb_warn0("else without rescue is useless");
05178 (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
05179 }
05180 if ((yyvsp[(4) - (4)].node)) {
05181 if ((yyval.node)) {
05182 (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
05183 }
05184 else {
05185 (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
05186 }
05187 }
05188 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05189
05190
05191
05192
05193
05194
05195
05196 }
05197 break;
05198
05199 case 13:
05200
05201
05202 #line 918 "parse.y"
05203 {
05204
05205 void_stmts((yyvsp[(1) - (2)].node));
05206 fixup_nodes(&deferred_nodes);
05207
05208
05209 (yyval.node) = (yyvsp[(1) - (2)].node);
05210 }
05211 break;
05212
05213 case 14:
05214
05215
05216 #line 929 "parse.y"
05217 {
05218
05219 (yyval.node) = NEW_BEGIN(0);
05220
05221
05222
05223
05224 }
05225 break;
05226
05227 case 15:
05228
05229
05230 #line 938 "parse.y"
05231 {
05232
05233 (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05234
05235
05236
05237 }
05238 break;
05239
05240 case 16:
05241
05242
05243 #line 946 "parse.y"
05244 {
05245
05246 (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05247
05248
05249
05250 }
05251 break;
05252
05253 case 17:
05254
05255
05256 #line 954 "parse.y"
05257 {
05258 (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05259 }
05260 break;
05261
05262 case 18:
05263
05264
05265 #line 959 "parse.y"
05266 {lex_state = EXPR_FNAME;}
05267 break;
05268
05269 case 19:
05270
05271
05272 #line 960 "parse.y"
05273 {
05274
05275 (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
05276
05277
05278
05279 }
05280 break;
05281
05282 case 20:
05283
05284
05285 #line 968 "parse.y"
05286 {
05287
05288 (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
05289
05290
05291
05292 }
05293 break;
05294
05295 case 21:
05296
05297
05298 #line 976 "parse.y"
05299 {
05300
05301 char buf[2];
05302 buf[0] = '$';
05303 buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
05304 (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
05305
05306
05307
05308 }
05309 break;
05310
05311 case 22:
05312
05313
05314 #line 987 "parse.y"
05315 {
05316
05317 yyerror("can't make alias for the number variables");
05318 (yyval.node) = NEW_BEGIN(0);
05319
05320
05321
05322
05323 }
05324 break;
05325
05326 case 23:
05327
05328
05329 #line 997 "parse.y"
05330 {
05331
05332 (yyval.node) = (yyvsp[(2) - (2)].node);
05333
05334
05335
05336 }
05337 break;
05338
05339 case 24:
05340
05341
05342 #line 1005 "parse.y"
05343 {
05344
05345 (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05346 fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05347
05348
05349
05350 }
05351 break;
05352
05353 case 25:
05354
05355
05356 #line 1014 "parse.y"
05357 {
05358
05359 (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05360 fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05361
05362
05363
05364 }
05365 break;
05366
05367 case 26:
05368
05369
05370 #line 1023 "parse.y"
05371 {
05372
05373 if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05374 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05375 }
05376 else {
05377 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05378 }
05379
05380
05381
05382 }
05383 break;
05384
05385 case 27:
05386
05387
05388 #line 1036 "parse.y"
05389 {
05390
05391 if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05392 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05393 }
05394 else {
05395 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05396 }
05397
05398
05399
05400 }
05401 break;
05402
05403 case 28:
05404
05405
05406 #line 1049 "parse.y"
05407 {
05408
05409 NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
05410 (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
05411
05412
05413
05414 }
05415 break;
05416
05417 case 29:
05418
05419
05420 #line 1058 "parse.y"
05421 {
05422 if (in_def || in_single) {
05423 rb_warn0("END in method; use at_exit");
05424 }
05425
05426 (yyval.node) = NEW_POSTEXE(NEW_NODE(
05427 NODE_SCOPE, 0 , (yyvsp[(3) - (4)].node) , 0 ));
05428
05429
05430
05431 }
05432 break;
05433
05434 case 31:
05435
05436
05437 #line 1071 "parse.y"
05438 {
05439
05440 value_expr((yyvsp[(3) - (3)].node));
05441 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05442 (yyval.node) = (yyvsp[(1) - (3)].node);
05443
05444
05445
05446 }
05447 break;
05448
05449 case 32:
05450
05451
05452 #line 1081 "parse.y"
05453 {
05454
05455 value_expr((yyvsp[(3) - (3)].node));
05456 if ((yyvsp[(1) - (3)].node)) {
05457 ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
05458 if ((yyvsp[(2) - (3)].id) == tOROP) {
05459 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05460 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
05461 if (is_asgn_or_id(vid)) {
05462 (yyval.node)->nd_aid = vid;
05463 }
05464 }
05465 else if ((yyvsp[(2) - (3)].id) == tANDOP) {
05466 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05467 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
05468 }
05469 else {
05470 (yyval.node) = (yyvsp[(1) - (3)].node);
05471 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
05472 }
05473 }
05474 else {
05475 (yyval.node) = NEW_BEGIN(0);
05476 }
05477
05478
05479
05480 }
05481 break;
05482
05483 case 33:
05484
05485
05486 #line 1110 "parse.y"
05487 {
05488
05489 NODE *args;
05490
05491 value_expr((yyvsp[(6) - (6)].node));
05492 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
05493 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
05494 if ((yyvsp[(5) - (6)].id) == tOROP) {
05495 (yyvsp[(5) - (6)].id) = 0;
05496 }
05497 else if ((yyvsp[(5) - (6)].id) == tANDOP) {
05498 (yyvsp[(5) - (6)].id) = 1;
05499 }
05500 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
05501 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
05502
05503
05504
05505
05506 }
05507 break;
05508
05509 case 34:
05510
05511
05512 #line 1131 "parse.y"
05513 {
05514
05515 value_expr((yyvsp[(5) - (5)].node));
05516 if ((yyvsp[(4) - (5)].id) == tOROP) {
05517 (yyvsp[(4) - (5)].id) = 0;
05518 }
05519 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05520 (yyvsp[(4) - (5)].id) = 1;
05521 }
05522 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05523 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05524
05525
05526
05527
05528 }
05529 break;
05530
05531 case 35:
05532
05533
05534 #line 1148 "parse.y"
05535 {
05536
05537 value_expr((yyvsp[(5) - (5)].node));
05538 if ((yyvsp[(4) - (5)].id) == tOROP) {
05539 (yyvsp[(4) - (5)].id) = 0;
05540 }
05541 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05542 (yyvsp[(4) - (5)].id) = 1;
05543 }
05544 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05545 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05546
05547
05548
05549
05550 }
05551 break;
05552
05553 case 36:
05554
05555
05556 #line 1165 "parse.y"
05557 {
05558
05559 yyerror("constant re-assignment");
05560 (yyval.node) = 0;
05561
05562
05563
05564
05565
05566 }
05567 break;
05568
05569 case 37:
05570
05571
05572 #line 1176 "parse.y"
05573 {
05574
05575 value_expr((yyvsp[(5) - (5)].node));
05576 if ((yyvsp[(4) - (5)].id) == tOROP) {
05577 (yyvsp[(4) - (5)].id) = 0;
05578 }
05579 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05580 (yyvsp[(4) - (5)].id) = 1;
05581 }
05582 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05583 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05584
05585
05586
05587
05588 }
05589 break;
05590
05591 case 38:
05592
05593
05594 #line 1193 "parse.y"
05595 {
05596
05597 rb_backref_error((yyvsp[(1) - (3)].node));
05598 (yyval.node) = NEW_BEGIN(0);
05599
05600
05601
05602
05603 }
05604 break;
05605
05606 case 39:
05607
05608
05609 #line 1203 "parse.y"
05610 {
05611
05612 value_expr((yyvsp[(3) - (3)].node));
05613 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05614
05615
05616
05617 }
05618 break;
05619
05620 case 40:
05621
05622
05623 #line 1212 "parse.y"
05624 {
05625
05626 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05627 (yyval.node) = (yyvsp[(1) - (3)].node);
05628
05629
05630
05631 }
05632 break;
05633
05634 case 41:
05635
05636
05637 #line 1221 "parse.y"
05638 {
05639
05640 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05641 (yyval.node) = (yyvsp[(1) - (3)].node);
05642
05643
05644
05645 }
05646 break;
05647
05648 case 43:
05649
05650
05651 #line 1233 "parse.y"
05652 {
05653
05654 value_expr((yyvsp[(3) - (3)].node));
05655 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05656
05657
05658
05659 }
05660 break;
05661
05662 case 44:
05663
05664
05665 #line 1242 "parse.y"
05666 {
05667
05668 value_expr((yyvsp[(3) - (3)].node));
05669 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05670
05671
05672
05673 }
05674 break;
05675
05676 case 46:
05677
05678
05679 #line 1255 "parse.y"
05680 {
05681
05682 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05683
05684
05685
05686 }
05687 break;
05688
05689 case 47:
05690
05691
05692 #line 1263 "parse.y"
05693 {
05694
05695 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05696
05697
05698
05699 }
05700 break;
05701
05702 case 48:
05703
05704
05705 #line 1271 "parse.y"
05706 {
05707
05708 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
05709
05710
05711
05712 }
05713 break;
05714
05715 case 49:
05716
05717
05718 #line 1279 "parse.y"
05719 {
05720
05721 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
05722
05723
05724
05725 }
05726 break;
05727
05728 case 51:
05729
05730
05731 #line 1290 "parse.y"
05732 {
05733
05734 value_expr((yyvsp[(1) - (1)].node));
05735 (yyval.node) = (yyvsp[(1) - (1)].node);
05736 if (!(yyval.node)) (yyval.node) = NEW_NIL();
05737
05738
05739
05740 }
05741 break;
05742
05743 case 55:
05744
05745
05746 #line 1307 "parse.y"
05747 {
05748
05749 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05750
05751
05752
05753
05754 }
05755 break;
05756
05757 case 56:
05758
05759
05760 #line 1316 "parse.y"
05761 {
05762
05763 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05764
05765
05766
05767
05768 }
05769 break;
05770
05771 case 57:
05772
05773
05774 #line 1327 "parse.y"
05775 {
05776 (yyvsp[(1) - (1)].vars) = dyna_push();
05777
05778 (yyval.num) = ruby_sourceline;
05779
05780
05781 }
05782 break;
05783
05784 case 58:
05785
05786
05787 #line 1337 "parse.y"
05788 {
05789
05790 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
05791 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
05792
05793
05794
05795 dyna_pop((yyvsp[(1) - (5)].vars));
05796 }
05797 break;
05798
05799 case 59:
05800
05801
05802 #line 1349 "parse.y"
05803 {
05804
05805 (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
05806 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05807
05808
05809
05810 }
05811 break;
05812
05813 case 60:
05814
05815
05816 #line 1358 "parse.y"
05817 {
05818
05819 block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
05820 (yyvsp[(3) - (3)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].node));
05821 (yyval.node) = (yyvsp[(3) - (3)].node);
05822 fixpos((yyval.node), (yyvsp[(2) - (3)].node));
05823
05824
05825
05826
05827 }
05828 break;
05829
05830 case 61:
05831
05832
05833 #line 1370 "parse.y"
05834 {
05835
05836 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05837 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05838
05839
05840
05841 }
05842 break;
05843
05844 case 62:
05845
05846
05847 #line 1379 "parse.y"
05848 {
05849
05850 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05851 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05852 (yyval.node) = (yyvsp[(5) - (5)].node);
05853 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05854
05855
05856
05857
05858 }
05859 break;
05860
05861 case 63:
05862
05863
05864 #line 1391 "parse.y"
05865 {
05866
05867 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05868 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05869
05870
05871
05872 }
05873 break;
05874
05875 case 64:
05876
05877
05878 #line 1400 "parse.y"
05879 {
05880
05881 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05882 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05883 (yyval.node) = (yyvsp[(5) - (5)].node);
05884 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05885
05886
05887
05888
05889 }
05890 break;
05891
05892 case 65:
05893
05894
05895 #line 1412 "parse.y"
05896 {
05897
05898 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
05899 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05900
05901
05902
05903 }
05904 break;
05905
05906 case 66:
05907
05908
05909 #line 1421 "parse.y"
05910 {
05911
05912 (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
05913 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05914
05915
05916
05917 }
05918 break;
05919
05920 case 67:
05921
05922
05923 #line 1430 "parse.y"
05924 {
05925
05926 (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
05927
05928
05929
05930 }
05931 break;
05932
05933 case 68:
05934
05935
05936 #line 1438 "parse.y"
05937 {
05938
05939 (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
05940
05941
05942
05943 }
05944 break;
05945
05946 case 69:
05947
05948
05949 #line 1446 "parse.y"
05950 {
05951
05952 (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
05953
05954
05955
05956 }
05957 break;
05958
05959 case 71:
05960
05961
05962 #line 1457 "parse.y"
05963 {
05964
05965 (yyval.node) = (yyvsp[(2) - (3)].node);
05966
05967
05968
05969 }
05970 break;
05971
05972 case 73:
05973
05974
05975 #line 1468 "parse.y"
05976 {
05977
05978 (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
05979
05980
05981
05982 }
05983 break;
05984
05985 case 74:
05986
05987
05988 #line 1478 "parse.y"
05989 {
05990
05991 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
05992
05993
05994
05995 }
05996 break;
05997
05998 case 75:
05999
06000
06001 #line 1486 "parse.y"
06002 {
06003
06004 (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
06005
06006
06007
06008 }
06009 break;
06010
06011 case 76:
06012
06013
06014 #line 1494 "parse.y"
06015 {
06016
06017 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06018
06019
06020
06021 }
06022 break;
06023
06024 case 77:
06025
06026
06027 #line 1502 "parse.y"
06028 {
06029
06030 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
06031
06032
06033
06034
06035 }
06036 break;
06037
06038 case 78:
06039
06040
06041 #line 1511 "parse.y"
06042 {
06043
06044 (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
06045
06046
06047
06048 }
06049 break;
06050
06051 case 79:
06052
06053
06054 #line 1519 "parse.y"
06055 {
06056
06057 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
06058
06059
06060
06061
06062 }
06063 break;
06064
06065 case 80:
06066
06067
06068 #line 1528 "parse.y"
06069 {
06070
06071 (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
06072
06073
06074
06075 }
06076 break;
06077
06078 case 81:
06079
06080
06081 #line 1536 "parse.y"
06082 {
06083
06084 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
06085
06086
06087
06088
06089 }
06090 break;
06091
06092 case 82:
06093
06094
06095 #line 1545 "parse.y"
06096 {
06097
06098 (yyval.node) = NEW_MASGN(0, -1);
06099
06100
06101
06102 }
06103 break;
06104
06105 case 83:
06106
06107
06108 #line 1553 "parse.y"
06109 {
06110
06111 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
06112
06113
06114
06115
06116 }
06117 break;
06118
06119 case 85:
06120
06121
06122 #line 1565 "parse.y"
06123 {
06124
06125 (yyval.node) = (yyvsp[(2) - (3)].node);
06126
06127
06128
06129 }
06130 break;
06131
06132 case 86:
06133
06134
06135 #line 1575 "parse.y"
06136 {
06137
06138 (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
06139
06140
06141
06142 }
06143 break;
06144
06145 case 87:
06146
06147
06148 #line 1583 "parse.y"
06149 {
06150
06151 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
06152
06153
06154
06155 }
06156 break;
06157
06158 case 88:
06159
06160
06161 #line 1593 "parse.y"
06162 {
06163
06164 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
06165
06166
06167
06168 }
06169 break;
06170
06171 case 89:
06172
06173
06174 #line 1601 "parse.y"
06175 {
06176
06177 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06178
06179
06180
06181 }
06182 break;
06183
06184 case 90:
06185
06186
06187 #line 1611 "parse.y"
06188 {
06189 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06190 }
06191 break;
06192
06193 case 91:
06194
06195
06196 #line 1615 "parse.y"
06197 {
06198 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06199 }
06200 break;
06201
06202 case 92:
06203
06204
06205 #line 1619 "parse.y"
06206 {
06207
06208 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06209
06210
06211
06212 }
06213 break;
06214
06215 case 93:
06216
06217
06218 #line 1627 "parse.y"
06219 {
06220
06221 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06222
06223
06224
06225 }
06226 break;
06227
06228 case 94:
06229
06230
06231 #line 1635 "parse.y"
06232 {
06233
06234 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06235
06236
06237
06238 }
06239 break;
06240
06241 case 95:
06242
06243
06244 #line 1643 "parse.y"
06245 {
06246
06247 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06248
06249
06250
06251 }
06252 break;
06253
06254 case 96:
06255
06256
06257 #line 1651 "parse.y"
06258 {
06259
06260 if (in_def || in_single)
06261 yyerror("dynamic constant assignment");
06262 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06263
06264
06265
06266
06267
06268 }
06269 break;
06270
06271 case 97:
06272
06273
06274 #line 1663 "parse.y"
06275 {
06276
06277 if (in_def || in_single)
06278 yyerror("dynamic constant assignment");
06279 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06280
06281
06282
06283 }
06284 break;
06285
06286 case 98:
06287
06288
06289 #line 1673 "parse.y"
06290 {
06291
06292 rb_backref_error((yyvsp[(1) - (1)].node));
06293 (yyval.node) = NEW_BEGIN(0);
06294
06295
06296
06297
06298 }
06299 break;
06300
06301 case 99:
06302
06303
06304 #line 1685 "parse.y"
06305 {
06306 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06307
06308 if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06309
06310
06311
06312 }
06313 break;
06314
06315 case 100:
06316
06317
06318 #line 1694 "parse.y"
06319 {
06320 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06321
06322 if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06323
06324
06325
06326 }
06327 break;
06328
06329 case 101:
06330
06331
06332 #line 1703 "parse.y"
06333 {
06334
06335 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06336
06337
06338
06339 }
06340 break;
06341
06342 case 102:
06343
06344
06345 #line 1711 "parse.y"
06346 {
06347
06348 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06349
06350
06351
06352 }
06353 break;
06354
06355 case 103:
06356
06357
06358 #line 1719 "parse.y"
06359 {
06360
06361 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06362
06363
06364
06365 }
06366 break;
06367
06368 case 104:
06369
06370
06371 #line 1727 "parse.y"
06372 {
06373
06374 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06375
06376
06377
06378 }
06379 break;
06380
06381 case 105:
06382
06383
06384 #line 1735 "parse.y"
06385 {
06386
06387 if (in_def || in_single)
06388 yyerror("dynamic constant assignment");
06389 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06390
06391
06392
06393
06394
06395
06396 }
06397 break;
06398
06399 case 106:
06400
06401
06402 #line 1748 "parse.y"
06403 {
06404
06405 if (in_def || in_single)
06406 yyerror("dynamic constant assignment");
06407 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06408
06409
06410
06411
06412
06413
06414 }
06415 break;
06416
06417 case 107:
06418
06419
06420 #line 1761 "parse.y"
06421 {
06422
06423 rb_backref_error((yyvsp[(1) - (1)].node));
06424 (yyval.node) = NEW_BEGIN(0);
06425
06426
06427
06428 }
06429 break;
06430
06431 case 108:
06432
06433
06434 #line 1772 "parse.y"
06435 {
06436
06437 yyerror("class/module name must be CONSTANT");
06438
06439
06440
06441 }
06442 break;
06443
06444 case 110:
06445
06446
06447 #line 1783 "parse.y"
06448 {
06449
06450 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
06451
06452
06453
06454 }
06455 break;
06456
06457 case 111:
06458
06459
06460 #line 1791 "parse.y"
06461 {
06462
06463 (yyval.node) = NEW_COLON2(0, (yyval.node));
06464
06465
06466
06467 }
06468 break;
06469
06470 case 112:
06471
06472
06473 #line 1799 "parse.y"
06474 {
06475
06476 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06477
06478
06479
06480 }
06481 break;
06482
06483 case 116:
06484
06485
06486 #line 1812 "parse.y"
06487 {
06488 lex_state = EXPR_ENDFN;
06489 (yyval.id) = (yyvsp[(1) - (1)].id);
06490 }
06491 break;
06492
06493 case 117:
06494
06495
06496 #line 1817 "parse.y"
06497 {
06498 lex_state = EXPR_ENDFN;
06499
06500 (yyval.id) = (yyvsp[(1) - (1)].id);
06501
06502
06503
06504 }
06505 break;
06506
06507 case 120:
06508
06509
06510 #line 1832 "parse.y"
06511 {
06512
06513 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
06514
06515
06516
06517 }
06518 break;
06519
06520 case 122:
06521
06522
06523 #line 1843 "parse.y"
06524 {
06525
06526 (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
06527
06528
06529
06530 }
06531 break;
06532
06533 case 123:
06534
06535
06536 #line 1850 "parse.y"
06537 {lex_state = EXPR_FNAME;}
06538 break;
06539
06540 case 124:
06541
06542
06543 #line 1851 "parse.y"
06544 {
06545
06546 (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
06547
06548
06549
06550 }
06551 break;
06552
06553 case 125:
06554
06555
06556 #line 1860 "parse.y"
06557 { ifndef_ripper((yyval.id) = '|'); }
06558 break;
06559
06560 case 126:
06561
06562
06563 #line 1861 "parse.y"
06564 { ifndef_ripper((yyval.id) = '^'); }
06565 break;
06566
06567 case 127:
06568
06569
06570 #line 1862 "parse.y"
06571 { ifndef_ripper((yyval.id) = '&'); }
06572 break;
06573
06574 case 128:
06575
06576
06577 #line 1863 "parse.y"
06578 { ifndef_ripper((yyval.id) = tCMP); }
06579 break;
06580
06581 case 129:
06582
06583
06584 #line 1864 "parse.y"
06585 { ifndef_ripper((yyval.id) = tEQ); }
06586 break;
06587
06588 case 130:
06589
06590
06591 #line 1865 "parse.y"
06592 { ifndef_ripper((yyval.id) = tEQQ); }
06593 break;
06594
06595 case 131:
06596
06597
06598 #line 1866 "parse.y"
06599 { ifndef_ripper((yyval.id) = tMATCH); }
06600 break;
06601
06602 case 132:
06603
06604
06605 #line 1867 "parse.y"
06606 { ifndef_ripper((yyval.id) = tNMATCH); }
06607 break;
06608
06609 case 133:
06610
06611
06612 #line 1868 "parse.y"
06613 { ifndef_ripper((yyval.id) = '>'); }
06614 break;
06615
06616 case 134:
06617
06618
06619 #line 1869 "parse.y"
06620 { ifndef_ripper((yyval.id) = tGEQ); }
06621 break;
06622
06623 case 135:
06624
06625
06626 #line 1870 "parse.y"
06627 { ifndef_ripper((yyval.id) = '<'); }
06628 break;
06629
06630 case 136:
06631
06632
06633 #line 1871 "parse.y"
06634 { ifndef_ripper((yyval.id) = tLEQ); }
06635 break;
06636
06637 case 137:
06638
06639
06640 #line 1872 "parse.y"
06641 { ifndef_ripper((yyval.id) = tNEQ); }
06642 break;
06643
06644 case 138:
06645
06646
06647 #line 1873 "parse.y"
06648 { ifndef_ripper((yyval.id) = tLSHFT); }
06649 break;
06650
06651 case 139:
06652
06653
06654 #line 1874 "parse.y"
06655 { ifndef_ripper((yyval.id) = tRSHFT); }
06656 break;
06657
06658 case 140:
06659
06660
06661 #line 1875 "parse.y"
06662 { ifndef_ripper((yyval.id) = '+'); }
06663 break;
06664
06665 case 141:
06666
06667
06668 #line 1876 "parse.y"
06669 { ifndef_ripper((yyval.id) = '-'); }
06670 break;
06671
06672 case 142:
06673
06674
06675 #line 1877 "parse.y"
06676 { ifndef_ripper((yyval.id) = '*'); }
06677 break;
06678
06679 case 143:
06680
06681
06682 #line 1878 "parse.y"
06683 { ifndef_ripper((yyval.id) = '*'); }
06684 break;
06685
06686 case 144:
06687
06688
06689 #line 1879 "parse.y"
06690 { ifndef_ripper((yyval.id) = '/'); }
06691 break;
06692
06693 case 145:
06694
06695
06696 #line 1880 "parse.y"
06697 { ifndef_ripper((yyval.id) = '%'); }
06698 break;
06699
06700 case 146:
06701
06702
06703 #line 1881 "parse.y"
06704 { ifndef_ripper((yyval.id) = tPOW); }
06705 break;
06706
06707 case 147:
06708
06709
06710 #line 1882 "parse.y"
06711 { ifndef_ripper((yyval.id) = '!'); }
06712 break;
06713
06714 case 148:
06715
06716
06717 #line 1883 "parse.y"
06718 { ifndef_ripper((yyval.id) = '~'); }
06719 break;
06720
06721 case 149:
06722
06723
06724 #line 1884 "parse.y"
06725 { ifndef_ripper((yyval.id) = tUPLUS); }
06726 break;
06727
06728 case 150:
06729
06730
06731 #line 1885 "parse.y"
06732 { ifndef_ripper((yyval.id) = tUMINUS); }
06733 break;
06734
06735 case 151:
06736
06737
06738 #line 1886 "parse.y"
06739 { ifndef_ripper((yyval.id) = tAREF); }
06740 break;
06741
06742 case 152:
06743
06744
06745 #line 1887 "parse.y"
06746 { ifndef_ripper((yyval.id) = tASET); }
06747 break;
06748
06749 case 153:
06750
06751
06752 #line 1888 "parse.y"
06753 { ifndef_ripper((yyval.id) = '`'); }
06754 break;
06755
06756 case 195:
06757
06758
06759 #line 1906 "parse.y"
06760 {
06761
06762 value_expr((yyvsp[(3) - (3)].node));
06763 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06764
06765
06766
06767 }
06768 break;
06769
06770 case 196:
06771
06772
06773 #line 1915 "parse.y"
06774 {
06775
06776 value_expr((yyvsp[(3) - (5)].node));
06777 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06778 (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
06779
06780
06781
06782 }
06783 break;
06784
06785 case 197:
06786
06787
06788 #line 1925 "parse.y"
06789 {
06790
06791 value_expr((yyvsp[(3) - (3)].node));
06792 if ((yyvsp[(1) - (3)].node)) {
06793 ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
06794 if ((yyvsp[(2) - (3)].id) == tOROP) {
06795 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06796 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
06797 if (is_asgn_or_id(vid)) {
06798 (yyval.node)->nd_aid = vid;
06799 }
06800 }
06801 else if ((yyvsp[(2) - (3)].id) == tANDOP) {
06802 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06803 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
06804 }
06805 else {
06806 (yyval.node) = (yyvsp[(1) - (3)].node);
06807 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
06808 }
06809 }
06810 else {
06811 (yyval.node) = NEW_BEGIN(0);
06812 }
06813
06814
06815
06816 }
06817 break;
06818
06819 case 198:
06820
06821
06822 #line 1954 "parse.y"
06823 {
06824
06825 value_expr((yyvsp[(3) - (5)].node));
06826 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06827 if ((yyvsp[(1) - (5)].node)) {
06828 ID vid = (yyvsp[(1) - (5)].node)->nd_vid;
06829 if ((yyvsp[(2) - (5)].id) == tOROP) {
06830 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06831 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (5)].node));
06832 if (is_asgn_or_id(vid)) {
06833 (yyval.node)->nd_aid = vid;
06834 }
06835 }
06836 else if ((yyvsp[(2) - (5)].id) == tANDOP) {
06837 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06838 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (5)].node));
06839 }
06840 else {
06841 (yyval.node) = (yyvsp[(1) - (5)].node);
06842 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (5)].id), NEW_LIST((yyvsp[(3) - (5)].node)));
06843 }
06844 }
06845 else {
06846 (yyval.node) = NEW_BEGIN(0);
06847 }
06848
06849
06850
06851
06852 }
06853 break;
06854
06855 case 199:
06856
06857
06858 #line 1985 "parse.y"
06859 {
06860
06861 NODE *args;
06862
06863 value_expr((yyvsp[(6) - (6)].node));
06864 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
06865 if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
06866 args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06867 }
06868 else {
06869 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06870 }
06871 if ((yyvsp[(5) - (6)].id) == tOROP) {
06872 (yyvsp[(5) - (6)].id) = 0;
06873 }
06874 else if ((yyvsp[(5) - (6)].id) == tANDOP) {
06875 (yyvsp[(5) - (6)].id) = 1;
06876 }
06877 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
06878 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
06879
06880
06881
06882
06883 }
06884 break;
06885
06886 case 200:
06887
06888
06889 #line 2011 "parse.y"
06890 {
06891
06892 value_expr((yyvsp[(5) - (5)].node));
06893 if ((yyvsp[(4) - (5)].id) == tOROP) {
06894 (yyvsp[(4) - (5)].id) = 0;
06895 }
06896 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06897 (yyvsp[(4) - (5)].id) = 1;
06898 }
06899 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06900 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06901
06902
06903
06904
06905 }
06906 break;
06907
06908 case 201:
06909
06910
06911 #line 2028 "parse.y"
06912 {
06913
06914 value_expr((yyvsp[(5) - (5)].node));
06915 if ((yyvsp[(4) - (5)].id) == tOROP) {
06916 (yyvsp[(4) - (5)].id) = 0;
06917 }
06918 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06919 (yyvsp[(4) - (5)].id) = 1;
06920 }
06921 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06922 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06923
06924
06925
06926
06927 }
06928 break;
06929
06930 case 202:
06931
06932
06933 #line 2045 "parse.y"
06934 {
06935
06936 value_expr((yyvsp[(5) - (5)].node));
06937 if ((yyvsp[(4) - (5)].id) == tOROP) {
06938 (yyvsp[(4) - (5)].id) = 0;
06939 }
06940 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06941 (yyvsp[(4) - (5)].id) = 1;
06942 }
06943 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06944 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06945
06946
06947
06948
06949 }
06950 break;
06951
06952 case 203:
06953
06954
06955 #line 2062 "parse.y"
06956 {
06957
06958 yyerror("constant re-assignment");
06959 (yyval.node) = NEW_BEGIN(0);
06960
06961
06962
06963
06964
06965 }
06966 break;
06967
06968 case 204:
06969
06970
06971 #line 2073 "parse.y"
06972 {
06973
06974 yyerror("constant re-assignment");
06975 (yyval.node) = NEW_BEGIN(0);
06976
06977
06978
06979
06980
06981 }
06982 break;
06983
06984 case 205:
06985
06986
06987 #line 2084 "parse.y"
06988 {
06989
06990 rb_backref_error((yyvsp[(1) - (3)].node));
06991 (yyval.node) = NEW_BEGIN(0);
06992
06993
06994
06995
06996
06997 }
06998 break;
06999
07000 case 206:
07001
07002
07003 #line 2095 "parse.y"
07004 {
07005
07006 value_expr((yyvsp[(1) - (3)].node));
07007 value_expr((yyvsp[(3) - (3)].node));
07008 (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07009 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
07010 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
07011 deferred_nodes = list_append(deferred_nodes, (yyval.node));
07012 }
07013
07014
07015
07016 }
07017 break;
07018
07019 case 207:
07020
07021
07022 #line 2109 "parse.y"
07023 {
07024
07025 value_expr((yyvsp[(1) - (3)].node));
07026 value_expr((yyvsp[(3) - (3)].node));
07027 (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07028 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
07029 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
07030 deferred_nodes = list_append(deferred_nodes, (yyval.node));
07031 }
07032
07033
07034
07035 }
07036 break;
07037
07038 case 208:
07039
07040
07041 #line 2123 "parse.y"
07042 {
07043
07044 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
07045
07046
07047
07048 }
07049 break;
07050
07051 case 209:
07052
07053
07054 #line 2131 "parse.y"
07055 {
07056
07057 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
07058
07059
07060
07061 }
07062 break;
07063
07064 case 210:
07065
07066
07067 #line 2139 "parse.y"
07068 {
07069
07070 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
07071
07072
07073
07074 }
07075 break;
07076
07077 case 211:
07078
07079
07080 #line 2147 "parse.y"
07081 {
07082
07083 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
07084
07085
07086
07087 }
07088 break;
07089
07090 case 212:
07091
07092
07093 #line 2155 "parse.y"
07094 {
07095
07096 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
07097
07098
07099
07100 }
07101 break;
07102
07103 case 213:
07104
07105
07106 #line 2163 "parse.y"
07107 {
07108
07109 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
07110
07111
07112
07113 }
07114 break;
07115
07116 case 214:
07117
07118
07119 #line 2171 "parse.y"
07120 {
07121
07122 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
07123
07124
07125
07126
07127 }
07128 break;
07129
07130 case 215:
07131
07132
07133 #line 2180 "parse.y"
07134 {
07135
07136 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
07137
07138
07139
07140
07141 }
07142 break;
07143
07144 case 216:
07145
07146
07147 #line 2189 "parse.y"
07148 {
07149
07150 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
07151
07152
07153
07154 }
07155 break;
07156
07157 case 217:
07158
07159
07160 #line 2197 "parse.y"
07161 {
07162
07163 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
07164
07165
07166
07167 }
07168 break;
07169
07170 case 218:
07171
07172
07173 #line 2205 "parse.y"
07174 {
07175
07176 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
07177
07178
07179
07180 }
07181 break;
07182
07183 case 219:
07184
07185
07186 #line 2213 "parse.y"
07187 {
07188
07189 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
07190
07191
07192
07193 }
07194 break;
07195
07196 case 220:
07197
07198
07199 #line 2221 "parse.y"
07200 {
07201
07202 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
07203
07204
07205
07206 }
07207 break;
07208
07209 case 221:
07210
07211
07212 #line 2229 "parse.y"
07213 {
07214
07215 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
07216
07217
07218
07219 }
07220 break;
07221
07222 case 222:
07223
07224
07225 #line 2237 "parse.y"
07226 {
07227
07228 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
07229
07230
07231
07232 }
07233 break;
07234
07235 case 223:
07236
07237
07238 #line 2245 "parse.y"
07239 {
07240
07241 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
07242
07243
07244
07245 }
07246 break;
07247
07248 case 224:
07249
07250
07251 #line 2253 "parse.y"
07252 {
07253
07254 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
07255
07256
07257
07258 }
07259 break;
07260
07261 case 225:
07262
07263
07264 #line 2261 "parse.y"
07265 {
07266
07267 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
07268
07269
07270
07271 }
07272 break;
07273
07274 case 226:
07275
07276
07277 #line 2269 "parse.y"
07278 {
07279
07280 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
07281
07282
07283
07284 }
07285 break;
07286
07287 case 227:
07288
07289
07290 #line 2277 "parse.y"
07291 {
07292
07293 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
07294
07295
07296
07297 }
07298 break;
07299
07300 case 228:
07301
07302
07303 #line 2285 "parse.y"
07304 {
07305
07306 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
07307
07308
07309
07310 }
07311 break;
07312
07313 case 229:
07314
07315
07316 #line 2293 "parse.y"
07317 {
07318
07319 (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07320 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && TYPE((yyvsp[(1) - (3)].node)->nd_lit) == T_REGEXP) {
07321 (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
07322 }
07323
07324
07325
07326 }
07327 break;
07328
07329 case 230:
07330
07331
07332 #line 2304 "parse.y"
07333 {
07334
07335 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
07336
07337
07338
07339 }
07340 break;
07341
07342 case 231:
07343
07344
07345 #line 2312 "parse.y"
07346 {
07347
07348 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
07349
07350
07351
07352 }
07353 break;
07354
07355 case 232:
07356
07357
07358 #line 2320 "parse.y"
07359 {
07360
07361 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
07362
07363
07364
07365 }
07366 break;
07367
07368 case 233:
07369
07370
07371 #line 2328 "parse.y"
07372 {
07373
07374 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
07375
07376
07377
07378 }
07379 break;
07380
07381 case 234:
07382
07383
07384 #line 2336 "parse.y"
07385 {
07386
07387 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
07388
07389
07390
07391 }
07392 break;
07393
07394 case 235:
07395
07396
07397 #line 2344 "parse.y"
07398 {
07399
07400 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07401
07402
07403
07404 }
07405 break;
07406
07407 case 236:
07408
07409
07410 #line 2352 "parse.y"
07411 {
07412
07413 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07414
07415
07416
07417 }
07418 break;
07419
07420 case 237:
07421
07422
07423 #line 2359 "parse.y"
07424 {in_defined = 1;}
07425 break;
07426
07427 case 238:
07428
07429
07430 #line 2360 "parse.y"
07431 {
07432
07433 in_defined = 0;
07434 (yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node));
07435
07436
07437
07438
07439 }
07440 break;
07441
07442 case 239:
07443
07444
07445 #line 2370 "parse.y"
07446 {
07447
07448 value_expr((yyvsp[(1) - (6)].node));
07449 (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
07450 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
07451
07452
07453
07454 }
07455 break;
07456
07457 case 240:
07458
07459
07460 #line 2380 "parse.y"
07461 {
07462 (yyval.node) = (yyvsp[(1) - (1)].node);
07463 }
07464 break;
07465
07466 case 241:
07467
07468
07469 #line 2386 "parse.y"
07470 {
07471
07472 value_expr((yyvsp[(1) - (1)].node));
07473 (yyval.node) = (yyvsp[(1) - (1)].node);
07474 if (!(yyval.node)) (yyval.node) = NEW_NIL();
07475
07476
07477
07478 }
07479 break;
07480
07481 case 243:
07482
07483
07484 #line 2399 "parse.y"
07485 {
07486 (yyval.node) = (yyvsp[(1) - (2)].node);
07487 }
07488 break;
07489
07490 case 244:
07491
07492
07493 #line 2403 "parse.y"
07494 {
07495
07496 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07497
07498
07499
07500 }
07501 break;
07502
07503 case 245:
07504
07505
07506 #line 2411 "parse.y"
07507 {
07508
07509 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07510
07511
07512
07513 }
07514 break;
07515
07516 case 246:
07517
07518
07519 #line 2421 "parse.y"
07520 {
07521
07522 (yyval.node) = (yyvsp[(2) - (3)].node);
07523
07524
07525
07526 }
07527 break;
07528
07529 case 251:
07530
07531
07532 #line 2437 "parse.y"
07533 {
07534 (yyval.node) = (yyvsp[(1) - (2)].node);
07535 }
07536 break;
07537
07538 case 252:
07539
07540
07541 #line 2441 "parse.y"
07542 {
07543
07544 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07545
07546
07547
07548 }
07549 break;
07550
07551 case 253:
07552
07553
07554 #line 2449 "parse.y"
07555 {
07556
07557 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07558
07559
07560
07561 }
07562 break;
07563
07564 case 254:
07565
07566
07567 #line 2459 "parse.y"
07568 {
07569
07570 value_expr((yyvsp[(1) - (1)].node));
07571 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07572
07573
07574
07575 }
07576 break;
07577
07578 case 255:
07579
07580
07581 #line 2468 "parse.y"
07582 {
07583
07584 (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
07585
07586
07587
07588 }
07589 break;
07590
07591 case 256:
07592
07593
07594 #line 2476 "parse.y"
07595 {
07596
07597 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07598 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
07599
07600
07601
07602
07603 }
07604 break;
07605
07606 case 257:
07607
07608
07609 #line 2486 "parse.y"
07610 {
07611
07612 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07613 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
07614
07615
07616
07617 }
07618 break;
07619
07620 case 259:
07621
07622
07623 #line 2503 "parse.y"
07624 {
07625 (yyval.val) = cmdarg_stack;
07626 CMDARG_PUSH(1);
07627 }
07628 break;
07629
07630 case 260:
07631
07632
07633 #line 2508 "parse.y"
07634 {
07635
07636 cmdarg_stack = (yyvsp[(1) - (2)].val);
07637 (yyval.node) = (yyvsp[(2) - (2)].node);
07638 }
07639 break;
07640
07641 case 261:
07642
07643
07644 #line 2516 "parse.y"
07645 {
07646
07647 (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
07648
07649
07650
07651 }
07652 break;
07653
07654 case 262:
07655
07656
07657 #line 2526 "parse.y"
07658 {
07659 (yyval.node) = (yyvsp[(2) - (2)].node);
07660 }
07661 break;
07662
07663 case 263:
07664
07665
07666 #line 2530 "parse.y"
07667 {
07668 (yyval.node) = 0;
07669 }
07670 break;
07671
07672 case 264:
07673
07674
07675 #line 2536 "parse.y"
07676 {
07677
07678 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07679
07680
07681
07682 }
07683 break;
07684
07685 case 265:
07686
07687
07688 #line 2544 "parse.y"
07689 {
07690
07691 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07692
07693
07694
07695 }
07696 break;
07697
07698 case 266:
07699
07700
07701 #line 2552 "parse.y"
07702 {
07703
07704 NODE *n1;
07705 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07706 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07707 }
07708 else {
07709 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07710 }
07711
07712
07713
07714 }
07715 break;
07716
07717 case 267:
07718
07719
07720 #line 2566 "parse.y"
07721 {
07722
07723 NODE *n1;
07724 if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07725 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07726 }
07727 else {
07728 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07729 }
07730
07731
07732
07733 }
07734 break;
07735
07736 case 268:
07737
07738
07739 #line 2582 "parse.y"
07740 {
07741
07742 NODE *n1;
07743 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07744 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07745 }
07746 else {
07747 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07748 }
07749
07750
07751
07752 }
07753 break;
07754
07755 case 269:
07756
07757
07758 #line 2596 "parse.y"
07759 {
07760
07761 NODE *n1;
07762 if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
07763 (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07764 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07765 }
07766 else {
07767 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07768 }
07769
07770
07771
07772 }
07773 break;
07774
07775 case 270:
07776
07777
07778 #line 2611 "parse.y"
07779 {
07780
07781 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07782
07783
07784
07785 }
07786 break;
07787
07788 case 279:
07789
07790
07791 #line 2629 "parse.y"
07792 {
07793
07794 (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
07795
07796
07797
07798 }
07799 break;
07800
07801 case 280:
07802
07803
07804 #line 2637 "parse.y"
07805 {
07806
07807 (yyval.num) = ruby_sourceline;
07808
07809
07810 }
07811 break;
07812
07813 case 281:
07814
07815
07816 #line 2645 "parse.y"
07817 {
07818
07819 if ((yyvsp[(3) - (4)].node) == NULL) {
07820 (yyval.node) = NEW_NIL();
07821 }
07822 else {
07823 if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
07824 nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
07825 nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
07826 (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
07827 }
07828 nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
07829
07830
07831
07832 }
07833 break;
07834
07835 case 282:
07836
07837
07838 #line 2661 "parse.y"
07839 {lex_state = EXPR_ENDARG;}
07840 break;
07841
07842 case 283:
07843
07844
07845 #line 2662 "parse.y"
07846 {
07847 rb_warning0("(...) interpreted as grouped expression");
07848
07849 (yyval.node) = (yyvsp[(2) - (4)].node);
07850
07851
07852
07853 }
07854 break;
07855
07856 case 284:
07857
07858
07859 #line 2671 "parse.y"
07860 {
07861
07862 (yyval.node) = (yyvsp[(2) - (3)].node);
07863
07864
07865
07866 }
07867 break;
07868
07869 case 285:
07870
07871
07872 #line 2679 "parse.y"
07873 {
07874
07875 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
07876
07877
07878
07879 }
07880 break;
07881
07882 case 286:
07883
07884
07885 #line 2687 "parse.y"
07886 {
07887
07888 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
07889
07890
07891
07892 }
07893 break;
07894
07895 case 287:
07896
07897
07898 #line 2695 "parse.y"
07899 {
07900
07901 if ((yyvsp[(2) - (3)].node) == 0) {
07902 (yyval.node) = NEW_ZARRAY();
07903 }
07904 else {
07905 (yyval.node) = (yyvsp[(2) - (3)].node);
07906 }
07907
07908
07909
07910 }
07911 break;
07912
07913 case 288:
07914
07915
07916 #line 2708 "parse.y"
07917 {
07918
07919 (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node));
07920
07921
07922
07923 }
07924 break;
07925
07926 case 289:
07927
07928
07929 #line 2716 "parse.y"
07930 {
07931
07932 (yyval.node) = NEW_RETURN(0);
07933
07934
07935
07936 }
07937 break;
07938
07939 case 290:
07940
07941
07942 #line 2724 "parse.y"
07943 {
07944
07945 (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
07946
07947
07948
07949 }
07950 break;
07951
07952 case 291:
07953
07954
07955 #line 2732 "parse.y"
07956 {
07957
07958 (yyval.node) = NEW_YIELD(0, Qfalse);
07959
07960
07961
07962 }
07963 break;
07964
07965 case 292:
07966
07967
07968 #line 2740 "parse.y"
07969 {
07970
07971 (yyval.node) = NEW_YIELD(0, Qfalse);
07972
07973
07974
07975 }
07976 break;
07977
07978 case 293:
07979
07980
07981 #line 2747 "parse.y"
07982 {in_defined = 1;}
07983 break;
07984
07985 case 294:
07986
07987
07988 #line 2748 "parse.y"
07989 {
07990
07991 in_defined = 0;
07992 (yyval.node) = NEW_DEFINED((yyvsp[(5) - (6)].node));
07993
07994
07995
07996
07997 }
07998 break;
07999
08000 case 295:
08001
08002
08003 #line 2758 "parse.y"
08004 {
08005
08006 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!');
08007
08008
08009
08010 }
08011 break;
08012
08013 case 296:
08014
08015
08016 #line 2766 "parse.y"
08017 {
08018
08019 (yyval.node) = call_uni_op(cond(NEW_NIL()), '!');
08020
08021
08022
08023 }
08024 break;
08025
08026 case 297:
08027
08028
08029 #line 2774 "parse.y"
08030 {
08031
08032 (yyvsp[(2) - (2)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (2)].id), 0);
08033 (yyval.node) = (yyvsp[(2) - (2)].node);
08034 fixpos((yyvsp[(2) - (2)].node)->nd_iter, (yyvsp[(2) - (2)].node));
08035
08036
08037
08038
08039 }
08040 break;
08041
08042 case 299:
08043
08044
08045 #line 2786 "parse.y"
08046 {
08047
08048 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
08049 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
08050 (yyval.node) = (yyvsp[(2) - (2)].node);
08051 fixpos((yyval.node), (yyvsp[(1) - (2)].node));
08052
08053
08054
08055 }
08056 break;
08057
08058 case 300:
08059
08060
08061 #line 2797 "parse.y"
08062 {
08063 (yyval.node) = (yyvsp[(2) - (2)].node);
08064 }
08065 break;
08066
08067 case 301:
08068
08069
08070 #line 2804 "parse.y"
08071 {
08072
08073 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
08074 fixpos((yyval.node), (yyvsp[(2) - (6)].node));
08075
08076
08077
08078 }
08079 break;
08080
08081 case 302:
08082
08083
08084 #line 2816 "parse.y"
08085 {
08086
08087 (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
08088 fixpos((yyval.node), (yyvsp[(2) - (6)].node));
08089
08090
08091
08092 }
08093 break;
08094
08095 case 303:
08096
08097
08098 #line 2824 "parse.y"
08099 {COND_PUSH(1);}
08100 break;
08101
08102 case 304:
08103
08104
08105 #line 2824 "parse.y"
08106 {COND_POP();}
08107 break;
08108
08109 case 305:
08110
08111
08112 #line 2827 "parse.y"
08113 {
08114
08115 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
08116 fixpos((yyval.node), (yyvsp[(3) - (7)].node));
08117
08118
08119
08120 }
08121 break;
08122
08123 case 306:
08124
08125
08126 #line 2835 "parse.y"
08127 {COND_PUSH(1);}
08128 break;
08129
08130 case 307:
08131
08132
08133 #line 2835 "parse.y"
08134 {COND_POP();}
08135 break;
08136
08137 case 308:
08138
08139
08140 #line 2838 "parse.y"
08141 {
08142
08143 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
08144 fixpos((yyval.node), (yyvsp[(3) - (7)].node));
08145
08146
08147
08148 }
08149 break;
08150
08151 case 309:
08152
08153
08154 #line 2849 "parse.y"
08155 {
08156
08157 (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08158 fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08159
08160
08161
08162 }
08163 break;
08164
08165 case 310:
08166
08167
08168 #line 2858 "parse.y"
08169 {
08170
08171 (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
08172
08173
08174
08175 }
08176 break;
08177
08178 case 311:
08179
08180
08181 #line 2866 "parse.y"
08182 {COND_PUSH(1);}
08183 break;
08184
08185 case 312:
08186
08187
08188 #line 2868 "parse.y"
08189 {COND_POP();}
08190 break;
08191
08192 case 313:
08193
08194
08195 #line 2871 "parse.y"
08196 {
08197
08198
08199
08200
08201
08202
08203
08204
08205
08206
08207 ID id = internal_id();
08208 ID *tbl = ALLOC_N(ID, 2);
08209 NODE *m = NEW_ARGS_AUX(0, 0);
08210 NODE *args, *scope;
08211
08212 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) {
08213
08214
08215
08216
08217 NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
08218 NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
08219 m->nd_next = block_append(
08220 NEW_IF(
08221 NEW_NODE(NODE_AND,
08222 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("length"), 0),
08223 rb_intern("=="), one),
08224 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero),
08225 rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
08226 0),
08227 NEW_DASGN_CURR(id,
08228 NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero)),
08229 0),
08230 node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id)));
08231
08232 args = new_args(m, 0, id, 0, 0);
08233 }
08234 else {
08235 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN ||
08236 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN ||
08237 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) {
08238 (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
08239 m->nd_plen = 1;
08240 m->nd_next = (yyvsp[(2) - (9)].node);
08241 args = new_args(m, 0, 0, 0, 0);
08242 }
08243 else {
08244 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
08245 args = new_args(m, 0, id, 0, 0);
08246 }
08247 }
08248 scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
08249 tbl[0] = 1; tbl[1] = id;
08250 (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
08251 fixpos((yyval.node), (yyvsp[(2) - (9)].node));
08252
08253
08254
08255 }
08256 break;
08257
08258 case 314:
08259
08260
08261 #line 2932 "parse.y"
08262 {
08263 if (in_def || in_single)
08264 yyerror("class definition in method body");
08265 local_push(0);
08266
08267 (yyval.num) = ruby_sourceline;
08268
08269
08270 }
08271 break;
08272
08273 case 315:
08274
08275
08276 #line 2943 "parse.y"
08277 {
08278
08279 (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
08280 nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
08281
08282
08283
08284 local_pop();
08285 }
08286 break;
08287
08288 case 316:
08289
08290
08291 #line 2953 "parse.y"
08292 {
08293 (yyval.num) = in_def;
08294 in_def = 0;
08295 }
08296 break;
08297
08298 case 317:
08299
08300
08301 #line 2958 "parse.y"
08302 {
08303 (yyval.num) = in_single;
08304 in_single = 0;
08305 local_push(0);
08306 }
08307 break;
08308
08309 case 318:
08310
08311
08312 #line 2965 "parse.y"
08313 {
08314
08315 (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
08316 fixpos((yyval.node), (yyvsp[(3) - (8)].node));
08317
08318
08319
08320 local_pop();
08321 in_def = (yyvsp[(4) - (8)].num);
08322 in_single = (yyvsp[(6) - (8)].num);
08323 }
08324 break;
08325
08326 case 319:
08327
08328
08329 #line 2977 "parse.y"
08330 {
08331 if (in_def || in_single)
08332 yyerror("module definition in method body");
08333 local_push(0);
08334
08335 (yyval.num) = ruby_sourceline;
08336
08337
08338 }
08339 break;
08340
08341 case 320:
08342
08343
08344 #line 2988 "parse.y"
08345 {
08346
08347 (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08348 nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
08349
08350
08351
08352 local_pop();
08353 }
08354 break;
08355
08356 case 321:
08357
08358
08359 #line 2998 "parse.y"
08360 {
08361 (yyval.id) = cur_mid;
08362 cur_mid = (yyvsp[(2) - (2)].id);
08363 in_def++;
08364 local_push(0);
08365 }
08366 break;
08367
08368 case 322:
08369
08370
08371 #line 3007 "parse.y"
08372 {
08373
08374 NODE *body = remove_begin((yyvsp[(5) - (6)].node));
08375 reduce_nodes(&body);
08376 (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
08377 nd_set_line((yyval.node), (yyvsp[(1) - (6)].num));
08378
08379
08380
08381 local_pop();
08382 in_def--;
08383 cur_mid = (yyvsp[(3) - (6)].id);
08384 }
08385 break;
08386
08387 case 323:
08388
08389
08390 #line 3020 "parse.y"
08391 {lex_state = EXPR_FNAME;}
08392 break;
08393
08394 case 324:
08395
08396
08397 #line 3021 "parse.y"
08398 {
08399 in_single++;
08400 lex_state = EXPR_ENDFN;
08401 local_push(0);
08402 }
08403 break;
08404
08405 case 325:
08406
08407
08408 #line 3029 "parse.y"
08409 {
08410
08411 NODE *body = remove_begin((yyvsp[(8) - (9)].node));
08412 reduce_nodes(&body);
08413 (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
08414 nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
08415
08416
08417
08418 local_pop();
08419 in_single--;
08420 }
08421 break;
08422
08423 case 326:
08424
08425
08426 #line 3042 "parse.y"
08427 {
08428
08429 (yyval.node) = NEW_BREAK(0);
08430
08431
08432
08433 }
08434 break;
08435
08436 case 327:
08437
08438
08439 #line 3050 "parse.y"
08440 {
08441
08442 (yyval.node) = NEW_NEXT(0);
08443
08444
08445
08446 }
08447 break;
08448
08449 case 328:
08450
08451
08452 #line 3058 "parse.y"
08453 {
08454
08455 (yyval.node) = NEW_REDO();
08456
08457
08458
08459 }
08460 break;
08461
08462 case 329:
08463
08464
08465 #line 3066 "parse.y"
08466 {
08467
08468 (yyval.node) = NEW_RETRY();
08469
08470
08471
08472 }
08473 break;
08474
08475 case 330:
08476
08477
08478 #line 3076 "parse.y"
08479 {
08480
08481 value_expr((yyvsp[(1) - (1)].node));
08482 (yyval.node) = (yyvsp[(1) - (1)].node);
08483 if (!(yyval.node)) (yyval.node) = NEW_NIL();
08484
08485
08486
08487 }
08488 break;
08489
08490 case 331:
08491
08492
08493 #line 3088 "parse.y"
08494 {
08495 token_info_push("begin");
08496 }
08497 break;
08498
08499 case 332:
08500
08501
08502 #line 3094 "parse.y"
08503 {
08504 token_info_push("if");
08505 }
08506 break;
08507
08508 case 333:
08509
08510
08511 #line 3100 "parse.y"
08512 {
08513 token_info_push("unless");
08514 }
08515 break;
08516
08517 case 334:
08518
08519
08520 #line 3106 "parse.y"
08521 {
08522 token_info_push("while");
08523 }
08524 break;
08525
08526 case 335:
08527
08528
08529 #line 3112 "parse.y"
08530 {
08531 token_info_push("until");
08532 }
08533 break;
08534
08535 case 336:
08536
08537
08538 #line 3118 "parse.y"
08539 {
08540 token_info_push("case");
08541 }
08542 break;
08543
08544 case 337:
08545
08546
08547 #line 3124 "parse.y"
08548 {
08549 token_info_push("for");
08550 }
08551 break;
08552
08553 case 338:
08554
08555
08556 #line 3130 "parse.y"
08557 {
08558 token_info_push("class");
08559 }
08560 break;
08561
08562 case 339:
08563
08564
08565 #line 3136 "parse.y"
08566 {
08567 token_info_push("module");
08568 }
08569 break;
08570
08571 case 340:
08572
08573
08574 #line 3142 "parse.y"
08575 {
08576 token_info_push("def");
08577
08578 (yyval.num) = ruby_sourceline;
08579
08580
08581 }
08582 break;
08583
08584 case 341:
08585
08586
08587 #line 3152 "parse.y"
08588 {
08589 token_info_pop("end");
08590 }
08591 break;
08592
08593 case 348:
08594
08595
08596 #line 3182 "parse.y"
08597 {
08598
08599 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
08600 fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08601
08602
08603
08604 }
08605 break;
08606
08607 case 350:
08608
08609
08610 #line 3194 "parse.y"
08611 {
08612
08613 (yyval.node) = (yyvsp[(2) - (2)].node);
08614
08615
08616
08617 }
08618 break;
08619
08620 case 353:
08621
08622
08623 #line 3208 "parse.y"
08624 {
08625 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
08626
08627
08628
08629
08630 }
08631 break;
08632
08633 case 354:
08634
08635
08636 #line 3216 "parse.y"
08637 {
08638
08639 (yyval.node) = (yyvsp[(2) - (3)].node);
08640
08641
08642
08643 }
08644 break;
08645
08646 case 355:
08647
08648
08649 #line 3226 "parse.y"
08650 {
08651
08652 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
08653
08654
08655
08656 }
08657 break;
08658
08659 case 356:
08660
08661
08662 #line 3234 "parse.y"
08663 {
08664
08665 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
08666
08667
08668
08669 }
08670 break;
08671
08672 case 357:
08673
08674
08675 #line 3244 "parse.y"
08676 {
08677
08678 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
08679
08680
08681
08682 }
08683 break;
08684
08685 case 358:
08686
08687
08688 #line 3252 "parse.y"
08689 {
08690 (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
08691
08692 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
08693
08694
08695
08696 }
08697 break;
08698
08699 case 359:
08700
08701
08702 #line 3261 "parse.y"
08703 {
08704 (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
08705
08706 (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
08707
08708
08709
08710 }
08711 break;
08712
08713 case 360:
08714
08715
08716 #line 3270 "parse.y"
08717 {
08718
08719 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
08720
08721
08722
08723 }
08724 break;
08725
08726 case 361:
08727
08728
08729 #line 3278 "parse.y"
08730 {
08731
08732 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
08733
08734
08735
08736 }
08737 break;
08738
08739 case 362:
08740
08741
08742 #line 3286 "parse.y"
08743 {
08744 (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
08745
08746 (yyval.node) = NEW_MASGN(0, (yyval.node));
08747
08748
08749
08750 }
08751 break;
08752
08753 case 363:
08754
08755
08756 #line 3295 "parse.y"
08757 {
08758 (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
08759
08760 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
08761
08762
08763
08764
08765
08766
08767 }
08768 break;
08769
08770 case 364:
08771
08772
08773 #line 3307 "parse.y"
08774 {
08775
08776 (yyval.node) = NEW_MASGN(0, -1);
08777
08778
08779
08780 }
08781 break;
08782
08783 case 365:
08784
08785
08786 #line 3315 "parse.y"
08787 {
08788
08789 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
08790
08791
08792
08793 }
08794 break;
08795
08796 case 366:
08797
08798
08799 #line 3325 "parse.y"
08800 {
08801
08802 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
08803
08804
08805
08806 }
08807 break;
08808
08809 case 367:
08810
08811
08812 #line 3333 "parse.y"
08813 {
08814
08815 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
08816
08817
08818
08819 }
08820 break;
08821
08822 case 368:
08823
08824
08825 #line 3341 "parse.y"
08826 {
08827
08828 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
08829
08830
08831
08832 }
08833 break;
08834
08835 case 369:
08836
08837
08838 #line 3349 "parse.y"
08839 {
08840
08841 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08842
08843
08844
08845 }
08846 break;
08847
08848 case 370:
08849
08850
08851 #line 3357 "parse.y"
08852 {
08853
08854 (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08855
08856
08857
08858 }
08859 break;
08860
08861 case 371:
08862
08863
08864 #line 3365 "parse.y"
08865 {
08866
08867 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 1, 0, 0);
08868
08869
08870
08871
08872 }
08873 break;
08874
08875 case 372:
08876
08877
08878 #line 3374 "parse.y"
08879 {
08880
08881 (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08882
08883
08884
08885 }
08886 break;
08887
08888 case 373:
08889
08890
08891 #line 3382 "parse.y"
08892 {
08893
08894 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
08895
08896
08897
08898 }
08899 break;
08900
08901 case 374:
08902
08903
08904 #line 3390 "parse.y"
08905 {
08906
08907 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08908
08909
08910
08911 }
08912 break;
08913
08914 case 375:
08915
08916
08917 #line 3398 "parse.y"
08918 {
08919
08920 (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08921
08922
08923
08924 }
08925 break;
08926
08927 case 376:
08928
08929
08930 #line 3406 "parse.y"
08931 {
08932
08933 (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
08934
08935
08936
08937 }
08938 break;
08939
08940 case 377:
08941
08942
08943 #line 3414 "parse.y"
08944 {
08945
08946 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08947
08948
08949
08950 }
08951 break;
08952
08953 case 378:
08954
08955
08956 #line 3422 "parse.y"
08957 {
08958
08959 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
08960
08961
08962
08963 }
08964 break;
08965
08966 case 379:
08967
08968
08969 #line 3430 "parse.y"
08970 {
08971
08972 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08973
08974
08975
08976 }
08977 break;
08978
08979 case 380:
08980
08981
08982 #line 3438 "parse.y"
08983 {
08984
08985 (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
08986
08987
08988
08989 }
08990 break;
08991
08992 case 382:
08993
08994
08995 #line 3449 "parse.y"
08996 {
08997 command_start = TRUE;
08998 }
08999 break;
09000
09001 case 383:
09002
09003
09004 #line 3455 "parse.y"
09005 {
09006
09007 (yyval.node) = 0;
09008
09009
09010
09011
09012 }
09013 break;
09014
09015 case 384:
09016
09017
09018 #line 3464 "parse.y"
09019 {
09020
09021 (yyval.node) = 0;
09022
09023
09024
09025
09026 }
09027 break;
09028
09029 case 385:
09030
09031
09032 #line 3473 "parse.y"
09033 {
09034
09035 (yyval.node) = (yyvsp[(2) - (4)].node);
09036
09037
09038
09039 }
09040 break;
09041
09042 case 387:
09043
09044
09045 #line 3485 "parse.y"
09046 {
09047
09048 (yyval.node) = 0;
09049
09050
09051
09052 }
09053 break;
09054
09055 case 390:
09056
09057
09058 #line 3511 "parse.y"
09059 {
09060 new_bv(get_id((yyvsp[(1) - (1)].id)));
09061
09062
09063
09064
09065 }
09066 break;
09067
09068 case 391:
09069
09070
09071 #line 3519 "parse.y"
09072 {
09073 (yyval.node) = 0;
09074 }
09075 break;
09076
09077 case 392:
09078
09079
09080 #line 3524 "parse.y"
09081 {
09082 (yyval.vars) = dyna_push();
09083 }
09084 break;
09085
09086 case 393:
09087
09088
09089 #line 3527 "parse.y"
09090 {
09091 (yyval.num) = lpar_beg;
09092 lpar_beg = ++paren_nest;
09093 }
09094 break;
09095
09096 case 394:
09097
09098
09099 #line 3533 "parse.y"
09100 {
09101 lpar_beg = (yyvsp[(2) - (4)].num);
09102
09103 (yyval.node) = (yyvsp[(3) - (4)].node);
09104 (yyval.node)->nd_body = NEW_SCOPE((yyvsp[(3) - (4)].node)->nd_head, (yyvsp[(4) - (4)].node));
09105
09106
09107
09108 dyna_pop((yyvsp[(1) - (4)].vars));
09109 }
09110 break;
09111
09112 case 395:
09113
09114
09115 #line 3546 "parse.y"
09116 {
09117
09118 (yyval.node) = NEW_LAMBDA((yyvsp[(2) - (4)].node));
09119
09120
09121
09122 }
09123 break;
09124
09125 case 396:
09126
09127
09128 #line 3554 "parse.y"
09129 {
09130
09131 (yyval.node) = NEW_LAMBDA((yyvsp[(1) - (1)].node));
09132
09133
09134
09135 }
09136 break;
09137
09138 case 397:
09139
09140
09141 #line 3564 "parse.y"
09142 {
09143 (yyval.node) = (yyvsp[(2) - (3)].node);
09144 }
09145 break;
09146
09147 case 398:
09148
09149
09150 #line 3568 "parse.y"
09151 {
09152 (yyval.node) = (yyvsp[(2) - (3)].node);
09153 }
09154 break;
09155
09156 case 399:
09157
09158
09159 #line 3574 "parse.y"
09160 {
09161 (yyvsp[(1) - (1)].vars) = dyna_push();
09162
09163 (yyval.num) = ruby_sourceline;
09164
09165 }
09166 break;
09167
09168 case 400:
09169
09170
09171 #line 3583 "parse.y"
09172 {
09173
09174 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09175 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09176
09177
09178
09179 dyna_pop((yyvsp[(1) - (5)].vars));
09180 }
09181 break;
09182
09183 case 401:
09184
09185
09186 #line 3595 "parse.y"
09187 {
09188
09189 if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
09190 compile_error(PARSER_ARG "block given to yield");
09191 }
09192 else {
09193 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
09194 }
09195 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
09196 (yyval.node) = (yyvsp[(2) - (2)].node);
09197 fixpos((yyval.node), (yyvsp[(1) - (2)].node));
09198
09199
09200
09201 }
09202 break;
09203
09204 case 402:
09205
09206
09207 #line 3611 "parse.y"
09208 {
09209
09210 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09211
09212
09213
09214
09215 }
09216 break;
09217
09218 case 403:
09219
09220
09221 #line 3620 "parse.y"
09222 {
09223
09224 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09225
09226
09227
09228
09229 }
09230 break;
09231
09232 case 404:
09233
09234
09235 #line 3631 "parse.y"
09236 {
09237
09238 (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
09239 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
09240
09241
09242
09243 }
09244 break;
09245
09246 case 405:
09247
09248
09249 #line 3640 "parse.y"
09250 {
09251
09252 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09253 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09254
09255
09256
09257
09258 }
09259 break;
09260
09261 case 406:
09262
09263
09264 #line 3650 "parse.y"
09265 {
09266
09267 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09268 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09269
09270
09271
09272
09273 }
09274 break;
09275
09276 case 407:
09277
09278
09279 #line 3660 "parse.y"
09280 {
09281
09282 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
09283
09284
09285
09286 }
09287 break;
09288
09289 case 408:
09290
09291
09292 #line 3668 "parse.y"
09293 {
09294
09295 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09296 fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09297
09298
09299
09300
09301
09302 }
09303 break;
09304
09305 case 409:
09306
09307
09308 #line 3679 "parse.y"
09309 {
09310
09311 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09312 fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09313
09314
09315
09316
09317
09318 }
09319 break;
09320
09321 case 410:
09322
09323
09324 #line 3690 "parse.y"
09325 {
09326
09327 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
09328
09329
09330
09331 }
09332 break;
09333
09334 case 411:
09335
09336
09337 #line 3698 "parse.y"
09338 {
09339
09340 (yyval.node) = NEW_ZSUPER();
09341
09342
09343
09344 }
09345 break;
09346
09347 case 412:
09348
09349
09350 #line 3706 "parse.y"
09351 {
09352
09353 if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
09354 (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
09355 else
09356 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
09357 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09358
09359
09360
09361 }
09362 break;
09363
09364 case 413:
09365
09366
09367 #line 3720 "parse.y"
09368 {
09369 (yyvsp[(1) - (1)].vars) = dyna_push();
09370
09371 (yyval.num) = ruby_sourceline;
09372
09373
09374 }
09375 break;
09376
09377 case 414:
09378
09379
09380 #line 3729 "parse.y"
09381 {
09382
09383 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09384 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09385
09386
09387
09388 dyna_pop((yyvsp[(1) - (5)].vars));
09389 }
09390 break;
09391
09392 case 415:
09393
09394
09395 #line 3739 "parse.y"
09396 {
09397 (yyvsp[(1) - (1)].vars) = dyna_push();
09398
09399 (yyval.num) = ruby_sourceline;
09400
09401
09402 }
09403 break;
09404
09405 case 416:
09406
09407
09408 #line 3748 "parse.y"
09409 {
09410
09411 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09412 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09413
09414
09415
09416 dyna_pop((yyvsp[(1) - (5)].vars));
09417 }
09418 break;
09419
09420 case 417:
09421
09422
09423 #line 3762 "parse.y"
09424 {
09425
09426 (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09427
09428
09429
09430 }
09431 break;
09432
09433 case 420:
09434
09435
09436 #line 3778 "parse.y"
09437 {
09438
09439 if ((yyvsp[(3) - (6)].node)) {
09440 (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
09441 (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
09442 }
09443 (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
09444 fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
09445
09446
09447
09448
09449
09450
09451
09452 }
09453 break;
09454
09455 case 422:
09456
09457
09458 #line 3798 "parse.y"
09459 {
09460
09461 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
09462
09463
09464
09465 }
09466 break;
09467
09468 case 423:
09469
09470
09471 #line 3806 "parse.y"
09472 {
09473
09474 if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
09475
09476
09477
09478 }
09479 break;
09480
09481 case 425:
09482
09483
09484 #line 3817 "parse.y"
09485 {
09486 (yyval.node) = (yyvsp[(2) - (2)].node);
09487 }
09488 break;
09489
09490 case 427:
09491
09492
09493 #line 3824 "parse.y"
09494 {
09495
09496 (yyval.node) = (yyvsp[(2) - (2)].node);
09497
09498
09499
09500 }
09501 break;
09502
09503 case 430:
09504
09505
09506 #line 3836 "parse.y"
09507 {
09508
09509 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
09510
09511
09512
09513 }
09514 break;
09515
09516 case 432:
09517
09518
09519 #line 3847 "parse.y"
09520 {
09521
09522 NODE *node = (yyvsp[(1) - (1)].node);
09523 if (!node) {
09524 node = NEW_STR(STR_NEW0());
09525 }
09526 else {
09527 node = evstr2dstr(node);
09528 }
09529 (yyval.node) = node;
09530
09531
09532
09533 }
09534 break;
09535
09536 case 435:
09537
09538
09539 #line 3866 "parse.y"
09540 {
09541
09542 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09543
09544
09545
09546 }
09547 break;
09548
09549 case 436:
09550
09551
09552 #line 3876 "parse.y"
09553 {
09554
09555 (yyval.node) = (yyvsp[(2) - (3)].node);
09556
09557
09558
09559 }
09560 break;
09561
09562 case 437:
09563
09564
09565 #line 3886 "parse.y"
09566 {
09567
09568 NODE *node = (yyvsp[(2) - (3)].node);
09569 if (!node) {
09570 node = NEW_XSTR(STR_NEW0());
09571 }
09572 else {
09573 switch (nd_type(node)) {
09574 case NODE_STR:
09575 nd_set_type(node, NODE_XSTR);
09576 break;
09577 case NODE_DSTR:
09578 nd_set_type(node, NODE_DXSTR);
09579 break;
09580 default:
09581 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
09582 break;
09583 }
09584 }
09585 (yyval.node) = node;
09586
09587
09588
09589 }
09590 break;
09591
09592 case 438:
09593
09594
09595 #line 3913 "parse.y"
09596 {
09597
09598 int options = (yyvsp[(3) - (3)].num);
09599 NODE *node = (yyvsp[(2) - (3)].node);
09600 NODE *list, *prev;
09601 if (!node) {
09602 node = NEW_LIT(reg_compile(STR_NEW0(), options));
09603 }
09604 else switch (nd_type(node)) {
09605 case NODE_STR:
09606 {
09607 VALUE src = node->nd_lit;
09608 nd_set_type(node, NODE_LIT);
09609 node->nd_lit = reg_compile(src, options);
09610 }
09611 break;
09612 default:
09613 node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
09614 case NODE_DSTR:
09615 if (options & RE_OPTION_ONCE) {
09616 nd_set_type(node, NODE_DREGX_ONCE);
09617 }
09618 else {
09619 nd_set_type(node, NODE_DREGX);
09620 }
09621 node->nd_cflag = options & RE_OPTION_MASK;
09622 if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
09623 for (list = (prev = node)->nd_next; list; list = list->nd_next) {
09624 if (nd_type(list->nd_head) == NODE_STR) {
09625 VALUE tail = list->nd_head->nd_lit;
09626 if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
09627 VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
09628 if (!literal_concat0(parser, lit, tail)) {
09629 node = 0;
09630 break;
09631 }
09632 rb_str_resize(tail, 0);
09633 prev->nd_next = list->nd_next;
09634 rb_gc_force_recycle((VALUE)list->nd_head);
09635 rb_gc_force_recycle((VALUE)list);
09636 list = prev;
09637 }
09638 else {
09639 prev = list;
09640 }
09641 }
09642 else {
09643 prev = 0;
09644 }
09645 }
09646 if (!node->nd_next) {
09647 VALUE src = node->nd_lit;
09648 nd_set_type(node, NODE_LIT);
09649 node->nd_lit = reg_compile(src, options);
09650 }
09651 break;
09652 }
09653 (yyval.node) = node;
09654
09655
09656
09657 }
09658 break;
09659
09660 case 439:
09661
09662
09663 #line 3978 "parse.y"
09664 {
09665
09666 (yyval.node) = NEW_ZARRAY();
09667
09668
09669
09670
09671 }
09672 break;
09673
09674 case 440:
09675
09676
09677 #line 3987 "parse.y"
09678 {
09679
09680 (yyval.node) = (yyvsp[(2) - (3)].node);
09681
09682
09683
09684 }
09685 break;
09686
09687 case 441:
09688
09689
09690 #line 3997 "parse.y"
09691 {
09692
09693 (yyval.node) = 0;
09694
09695
09696
09697 }
09698 break;
09699
09700 case 442:
09701
09702
09703 #line 4005 "parse.y"
09704 {
09705
09706 (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
09707
09708
09709
09710 }
09711 break;
09712
09713 case 444:
09714
09715
09716 #line 4023 "parse.y"
09717 {
09718
09719 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09720
09721
09722
09723 }
09724 break;
09725
09726 case 445:
09727
09728
09729 #line 4033 "parse.y"
09730 {
09731
09732 (yyval.node) = NEW_ZARRAY();
09733
09734
09735
09736
09737 }
09738 break;
09739
09740 case 446:
09741
09742
09743 #line 4042 "parse.y"
09744 {
09745
09746 (yyval.node) = (yyvsp[(2) - (3)].node);
09747
09748
09749
09750 }
09751 break;
09752
09753 case 447:
09754
09755
09756 #line 4052 "parse.y"
09757 {
09758
09759 (yyval.node) = 0;
09760
09761
09762
09763 }
09764 break;
09765
09766 case 448:
09767
09768
09769 #line 4060 "parse.y"
09770 {
09771
09772 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
09773
09774
09775
09776 }
09777 break;
09778
09779 case 449:
09780
09781
09782 #line 4070 "parse.y"
09783 {
09784
09785 (yyval.node) = 0;
09786
09787
09788
09789 }
09790 break;
09791
09792 case 450:
09793
09794
09795 #line 4078 "parse.y"
09796 {
09797
09798 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09799
09800
09801
09802 }
09803 break;
09804
09805 case 451:
09806
09807
09808 #line 4088 "parse.y"
09809 {
09810
09811 (yyval.node) = 0;
09812
09813
09814
09815 }
09816 break;
09817
09818 case 452:
09819
09820
09821 #line 4096 "parse.y"
09822 {
09823
09824 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09825
09826
09827
09828 }
09829 break;
09830
09831 case 453:
09832
09833
09834 #line 4106 "parse.y"
09835 {
09836
09837 (yyval.node) = 0;
09838
09839
09840
09841 }
09842 break;
09843
09844 case 454:
09845
09846
09847 #line 4114 "parse.y"
09848 {
09849
09850 NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
09851 if (!head) {
09852 (yyval.node) = tail;
09853 }
09854 else if (!tail) {
09855 (yyval.node) = head;
09856 }
09857 else {
09858 switch (nd_type(head)) {
09859 case NODE_STR:
09860 nd_set_type(head, NODE_DSTR);
09861 break;
09862 case NODE_DSTR:
09863 break;
09864 default:
09865 head = list_append(NEW_DSTR(Qnil), head);
09866 break;
09867 }
09868 (yyval.node) = list_append(head, tail);
09869 }
09870
09871
09872
09873 }
09874 break;
09875
09876 case 456:
09877
09878
09879 #line 4144 "parse.y"
09880 {
09881 (yyval.node) = lex_strterm;
09882 lex_strterm = 0;
09883 lex_state = EXPR_BEG;
09884 }
09885 break;
09886
09887 case 457:
09888
09889
09890 #line 4150 "parse.y"
09891 {
09892
09893 lex_strterm = (yyvsp[(2) - (3)].node);
09894 (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
09895
09896
09897
09898
09899 }
09900 break;
09901
09902 case 458:
09903
09904
09905 #line 4160 "parse.y"
09906 {
09907 (yyvsp[(1) - (1)].val) = cond_stack;
09908 (yyval.val) = cmdarg_stack;
09909 cond_stack = 0;
09910 cmdarg_stack = 0;
09911 }
09912 break;
09913
09914 case 459:
09915
09916
09917 #line 4166 "parse.y"
09918 {
09919 (yyval.node) = lex_strterm;
09920 lex_strterm = 0;
09921 lex_state = EXPR_BEG;
09922 }
09923 break;
09924
09925 case 460:
09926
09927
09928 #line 4172 "parse.y"
09929 {
09930 cond_stack = (yyvsp[(1) - (5)].val);
09931 cmdarg_stack = (yyvsp[(2) - (5)].val);
09932 lex_strterm = (yyvsp[(3) - (5)].node);
09933
09934 if ((yyvsp[(4) - (5)].node)) (yyvsp[(4) - (5)].node)->flags &= ~NODE_FL_NEWLINE;
09935 (yyval.node) = new_evstr((yyvsp[(4) - (5)].node));
09936
09937
09938
09939 }
09940 break;
09941
09942 case 461:
09943
09944
09945 #line 4186 "parse.y"
09946 {
09947
09948 (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
09949
09950
09951
09952 }
09953 break;
09954
09955 case 462:
09956
09957
09958 #line 4194 "parse.y"
09959 {
09960
09961 (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
09962
09963
09964
09965 }
09966 break;
09967
09968 case 463:
09969
09970
09971 #line 4202 "parse.y"
09972 {
09973
09974 (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
09975
09976
09977
09978 }
09979 break;
09980
09981 case 465:
09982
09983
09984 #line 4213 "parse.y"
09985 {
09986 lex_state = EXPR_END;
09987
09988 (yyval.id) = (yyvsp[(2) - (2)].id);
09989
09990
09991
09992 }
09993 break;
09994
09995 case 470:
09996
09997
09998 #line 4230 "parse.y"
09999 {
10000 lex_state = EXPR_END;
10001
10002 if (!((yyval.node) = (yyvsp[(2) - (3)].node))) {
10003 (yyval.node) = NEW_LIT(ID2SYM(rb_intern("")));
10004 }
10005 else {
10006 VALUE lit;
10007
10008 switch (nd_type((yyval.node))) {
10009 case NODE_DSTR:
10010 nd_set_type((yyval.node), NODE_DSYM);
10011 break;
10012 case NODE_STR:
10013 lit = (yyval.node)->nd_lit;
10014 (yyval.node)->nd_lit = ID2SYM(rb_intern_str(lit));
10015 nd_set_type((yyval.node), NODE_LIT);
10016 break;
10017 default:
10018 (yyval.node) = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST((yyval.node)));
10019 break;
10020 }
10021 }
10022
10023
10024
10025 }
10026 break;
10027
10028 case 473:
10029
10030
10031 #line 4262 "parse.y"
10032 {
10033
10034 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
10035
10036
10037
10038 }
10039 break;
10040
10041 case 474:
10042
10043
10044 #line 4270 "parse.y"
10045 {
10046
10047 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
10048
10049
10050
10051 }
10052 break;
10053
10054 case 480:
10055
10056
10057 #line 4286 "parse.y"
10058 {ifndef_ripper((yyval.id) = keyword_nil);}
10059 break;
10060
10061 case 481:
10062
10063
10064 #line 4287 "parse.y"
10065 {ifndef_ripper((yyval.id) = keyword_self);}
10066 break;
10067
10068 case 482:
10069
10070
10071 #line 4288 "parse.y"
10072 {ifndef_ripper((yyval.id) = keyword_true);}
10073 break;
10074
10075 case 483:
10076
10077
10078 #line 4289 "parse.y"
10079 {ifndef_ripper((yyval.id) = keyword_false);}
10080 break;
10081
10082 case 484:
10083
10084
10085 #line 4290 "parse.y"
10086 {ifndef_ripper((yyval.id) = keyword__FILE__);}
10087 break;
10088
10089 case 485:
10090
10091
10092 #line 4291 "parse.y"
10093 {ifndef_ripper((yyval.id) = keyword__LINE__);}
10094 break;
10095
10096 case 486:
10097
10098
10099 #line 4292 "parse.y"
10100 {ifndef_ripper((yyval.id) = keyword__ENCODING__);}
10101 break;
10102
10103 case 487:
10104
10105
10106 #line 4296 "parse.y"
10107 {
10108
10109 if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10110
10111
10112
10113
10114
10115
10116
10117
10118 }
10119 break;
10120
10121 case 488:
10122
10123
10124 #line 4309 "parse.y"
10125 {
10126
10127 if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10128
10129
10130
10131 }
10132 break;
10133
10134 case 489:
10135
10136
10137 #line 4319 "parse.y"
10138 {
10139 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10140
10141
10142
10143
10144 }
10145 break;
10146
10147 case 490:
10148
10149
10150 #line 4327 "parse.y"
10151 {
10152 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10153
10154
10155
10156
10157 }
10158 break;
10159
10160 case 493:
10161
10162
10163 #line 4341 "parse.y"
10164 {
10165
10166 (yyval.node) = 0;
10167
10168
10169
10170 }
10171 break;
10172
10173 case 494:
10174
10175
10176 #line 4349 "parse.y"
10177 {
10178 lex_state = EXPR_BEG;
10179 }
10180 break;
10181
10182 case 495:
10183
10184
10185 #line 4353 "parse.y"
10186 {
10187 (yyval.node) = (yyvsp[(3) - (4)].node);
10188 }
10189 break;
10190
10191 case 496:
10192
10193
10194 #line 4357 "parse.y"
10195 {
10196
10197 yyerrok;
10198 (yyval.node) = 0;
10199
10200
10201
10202
10203 }
10204 break;
10205
10206 case 497:
10207
10208
10209 #line 4369 "parse.y"
10210 {
10211
10212 (yyval.node) = (yyvsp[(2) - (3)].node);
10213
10214
10215
10216 lex_state = EXPR_BEG;
10217 command_start = TRUE;
10218 }
10219 break;
10220
10221 case 498:
10222
10223
10224 #line 4379 "parse.y"
10225 {
10226 (yyval.node) = (yyvsp[(1) - (2)].node);
10227 lex_state = EXPR_BEG;
10228 command_start = TRUE;
10229 }
10230 break;
10231
10232 case 499:
10233
10234
10235 #line 4387 "parse.y"
10236 {
10237
10238 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
10239
10240
10241
10242 }
10243 break;
10244
10245 case 500:
10246
10247
10248 #line 4395 "parse.y"
10249 {
10250
10251 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
10252
10253
10254
10255 }
10256 break;
10257
10258 case 501:
10259
10260
10261 #line 4403 "parse.y"
10262 {
10263
10264 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
10265
10266
10267
10268 }
10269 break;
10270
10271 case 502:
10272
10273
10274 #line 4411 "parse.y"
10275 {
10276
10277 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10278
10279
10280
10281 }
10282 break;
10283
10284 case 503:
10285
10286
10287 #line 4419 "parse.y"
10288 {
10289
10290 (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10291
10292
10293
10294 }
10295 break;
10296
10297 case 504:
10298
10299
10300 #line 4427 "parse.y"
10301 {
10302
10303 (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10304
10305
10306
10307 }
10308 break;
10309
10310 case 505:
10311
10312
10313 #line 4435 "parse.y"
10314 {
10315
10316 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
10317
10318
10319
10320 }
10321 break;
10322
10323 case 506:
10324
10325
10326 #line 4443 "parse.y"
10327 {
10328
10329 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10330
10331
10332
10333 }
10334 break;
10335
10336 case 507:
10337
10338
10339 #line 4451 "parse.y"
10340 {
10341
10342 (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10343
10344
10345
10346 }
10347 break;
10348
10349 case 508:
10350
10351
10352 #line 4459 "parse.y"
10353 {
10354
10355 (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
10356
10357
10358
10359 }
10360 break;
10361
10362 case 509:
10363
10364
10365 #line 4467 "parse.y"
10366 {
10367
10368 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10369
10370
10371
10372 }
10373 break;
10374
10375 case 510:
10376
10377
10378 #line 4475 "parse.y"
10379 {
10380
10381 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
10382
10383
10384
10385 }
10386 break;
10387
10388 case 511:
10389
10390
10391 #line 4483 "parse.y"
10392 {
10393
10394 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10395
10396
10397
10398 }
10399 break;
10400
10401 case 512:
10402
10403
10404 #line 4491 "parse.y"
10405 {
10406
10407 (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
10408
10409
10410
10411 }
10412 break;
10413
10414 case 513:
10415
10416
10417 #line 4499 "parse.y"
10418 {
10419
10420 (yyval.node) = new_args(0, 0, 0, 0, 0);
10421
10422
10423
10424 }
10425 break;
10426
10427 case 514:
10428
10429
10430 #line 4509 "parse.y"
10431 {
10432
10433 yyerror("formal argument cannot be a constant");
10434 (yyval.id) = 0;
10435
10436
10437
10438 }
10439 break;
10440
10441 case 515:
10442
10443
10444 #line 4518 "parse.y"
10445 {
10446
10447 yyerror("formal argument cannot be an instance variable");
10448 (yyval.id) = 0;
10449
10450
10451
10452 }
10453 break;
10454
10455 case 516:
10456
10457
10458 #line 4527 "parse.y"
10459 {
10460
10461 yyerror("formal argument cannot be a global variable");
10462 (yyval.id) = 0;
10463
10464
10465
10466 }
10467 break;
10468
10469 case 517:
10470
10471
10472 #line 4536 "parse.y"
10473 {
10474
10475 yyerror("formal argument cannot be a class variable");
10476 (yyval.id) = 0;
10477
10478
10479
10480 }
10481 break;
10482
10483 case 519:
10484
10485
10486 #line 4548 "parse.y"
10487 {
10488 formal_argument(get_id((yyvsp[(1) - (1)].id)));
10489 (yyval.id) = (yyvsp[(1) - (1)].id);
10490 }
10491 break;
10492
10493 case 520:
10494
10495
10496 #line 4555 "parse.y"
10497 {
10498 arg_var(get_id((yyvsp[(1) - (1)].id)));
10499
10500 (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
10501
10502
10503
10504 }
10505 break;
10506
10507 case 521:
10508
10509
10510 #line 4564 "parse.y"
10511 {
10512 ID tid = internal_id();
10513 arg_var(tid);
10514
10515 if (dyna_in_block()) {
10516 (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
10517 }
10518 else {
10519 (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
10520 }
10521 (yyval.node) = NEW_ARGS_AUX(tid, 1);
10522 (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
10523
10524
10525
10526 }
10527 break;
10528
10529 case 523:
10530
10531
10532 #line 4590 "parse.y"
10533 {
10534
10535 (yyval.node) = (yyvsp[(1) - (3)].node);
10536 (yyval.node)->nd_plen++;
10537 (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
10538 rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
10539
10540
10541
10542 }
10543 break;
10544
10545 case 524:
10546
10547
10548 #line 4603 "parse.y"
10549 {
10550 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10551 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10552
10553 (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10554
10555
10556
10557 }
10558 break;
10559
10560 case 525:
10561
10562
10563 #line 4615 "parse.y"
10564 {
10565 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10566 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10567
10568 (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10569
10570
10571
10572 }
10573 break;
10574
10575 case 526:
10576
10577
10578 #line 4627 "parse.y"
10579 {
10580
10581 (yyval.node) = (yyvsp[(1) - (1)].node);
10582
10583
10584
10585 }
10586 break;
10587
10588 case 527:
10589
10590
10591 #line 4635 "parse.y"
10592 {
10593
10594 NODE *opts = (yyvsp[(1) - (3)].node);
10595
10596 while (opts->nd_next) {
10597 opts = opts->nd_next;
10598 }
10599 opts->nd_next = (yyvsp[(3) - (3)].node);
10600 (yyval.node) = (yyvsp[(1) - (3)].node);
10601
10602
10603
10604 }
10605 break;
10606
10607 case 528:
10608
10609
10610 #line 4651 "parse.y"
10611 {
10612
10613 (yyval.node) = (yyvsp[(1) - (1)].node);
10614
10615
10616
10617 }
10618 break;
10619
10620 case 529:
10621
10622
10623 #line 4659 "parse.y"
10624 {
10625
10626 NODE *opts = (yyvsp[(1) - (3)].node);
10627
10628 while (opts->nd_next) {
10629 opts = opts->nd_next;
10630 }
10631 opts->nd_next = (yyvsp[(3) - (3)].node);
10632 (yyval.node) = (yyvsp[(1) - (3)].node);
10633
10634
10635
10636 }
10637 break;
10638
10639 case 532:
10640
10641
10642 #line 4679 "parse.y"
10643 {
10644
10645 if (!is_local_id((yyvsp[(2) - (2)].id)))
10646 yyerror("rest argument must be local variable");
10647
10648 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10649
10650 (yyval.id) = (yyvsp[(2) - (2)].id);
10651
10652
10653
10654 }
10655 break;
10656
10657 case 533:
10658
10659
10660 #line 4692 "parse.y"
10661 {
10662
10663 (yyval.id) = internal_id();
10664 arg_var((yyval.id));
10665
10666
10667
10668 }
10669 break;
10670
10671 case 536:
10672
10673
10674 #line 4707 "parse.y"
10675 {
10676
10677 if (!is_local_id((yyvsp[(2) - (2)].id)))
10678 yyerror("block argument must be local variable");
10679 else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
10680 yyerror("duplicated block argument name");
10681
10682 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10683
10684 (yyval.id) = (yyvsp[(2) - (2)].id);
10685
10686
10687
10688 }
10689 break;
10690
10691 case 537:
10692
10693
10694 #line 4724 "parse.y"
10695 {
10696 (yyval.id) = (yyvsp[(2) - (2)].id);
10697 }
10698 break;
10699
10700 case 538:
10701
10702
10703 #line 4728 "parse.y"
10704 {
10705
10706 (yyval.id) = 0;
10707
10708
10709
10710 }
10711 break;
10712
10713 case 539:
10714
10715
10716 #line 4738 "parse.y"
10717 {
10718
10719 value_expr((yyvsp[(1) - (1)].node));
10720 (yyval.node) = (yyvsp[(1) - (1)].node);
10721 if (!(yyval.node)) (yyval.node) = NEW_NIL();
10722
10723
10724
10725 }
10726 break;
10727
10728 case 540:
10729
10730
10731 #line 4747 "parse.y"
10732 {lex_state = EXPR_BEG;}
10733 break;
10734
10735 case 541:
10736
10737
10738 #line 4748 "parse.y"
10739 {
10740
10741 if ((yyvsp[(3) - (4)].node) == 0) {
10742 yyerror("can't define singleton method for ().");
10743 }
10744 else {
10745 switch (nd_type((yyvsp[(3) - (4)].node))) {
10746 case NODE_STR:
10747 case NODE_DSTR:
10748 case NODE_XSTR:
10749 case NODE_DXSTR:
10750 case NODE_DREGX:
10751 case NODE_LIT:
10752 case NODE_ARRAY:
10753 case NODE_ZARRAY:
10754 yyerror("can't define singleton method for literals");
10755 default:
10756 value_expr((yyvsp[(3) - (4)].node));
10757 break;
10758 }
10759 }
10760 (yyval.node) = (yyvsp[(3) - (4)].node);
10761
10762
10763
10764 }
10765 break;
10766
10767 case 543:
10768
10769
10770 #line 4778 "parse.y"
10771 {
10772
10773 (yyval.node) = (yyvsp[(1) - (2)].node);
10774
10775
10776
10777 }
10778 break;
10779
10780 case 545:
10781
10782
10783 #line 4795 "parse.y"
10784 {
10785
10786 (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
10787
10788
10789
10790 }
10791 break;
10792
10793 case 546:
10794
10795
10796 #line 4805 "parse.y"
10797 {
10798
10799 (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
10800
10801
10802
10803 }
10804 break;
10805
10806 case 547:
10807
10808
10809 #line 4813 "parse.y"
10810 {
10811
10812 (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
10813
10814
10815
10816 }
10817 break;
10818
10819 case 569:
10820
10821
10822 #line 4869 "parse.y"
10823 {yyerrok;}
10824 break;
10825
10826 case 572:
10827
10828
10829 #line 4874 "parse.y"
10830 {yyerrok;}
10831 break;
10832
10833 case 573:
10834
10835
10836 #line 4878 "parse.y"
10837 {
10838
10839 (yyval.node) = 0;
10840
10841
10842
10843 }
10844 break;
10845
10846
10847
10848
10849 #line 10848 "parse.c"
10850 default: break;
10851 }
10852
10853
10854
10855
10856
10857
10858
10859
10860
10861
10862
10863 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
10864
10865 YYPOPSTACK (yylen);
10866 yylen = 0;
10867 YY_STACK_PRINT (yyss, yyssp);
10868
10869 *++yyvsp = yyval;
10870
10871
10872
10873
10874
10875 yyn = yyr1[yyn];
10876
10877 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
10878 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
10879 yystate = yytable[yystate];
10880 else
10881 yystate = yydefgoto[yyn - YYNTOKENS];
10882
10883 goto yynewstate;
10884
10885
10886
10887
10888
10889 yyerrlab:
10890
10891
10892 yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
10893
10894
10895 if (!yyerrstatus)
10896 {
10897 ++yynerrs;
10898 #if ! YYERROR_VERBOSE
10899 parser_yyerror (parser, YY_("syntax error"));
10900 #else
10901 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
10902 yyssp, yytoken)
10903 {
10904 char const *yymsgp = YY_("syntax error");
10905 int yysyntax_error_status;
10906 yysyntax_error_status = YYSYNTAX_ERROR;
10907 if (yysyntax_error_status == 0)
10908 yymsgp = yymsg;
10909 else if (yysyntax_error_status == 1)
10910 {
10911 if (yymsg != yymsgbuf)
10912 YYSTACK_FREE (yymsg);
10913 yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
10914 if (!yymsg)
10915 {
10916 yymsg = yymsgbuf;
10917 yymsg_alloc = sizeof yymsgbuf;
10918 yysyntax_error_status = 2;
10919 }
10920 else
10921 {
10922 yysyntax_error_status = YYSYNTAX_ERROR;
10923 yymsgp = yymsg;
10924 }
10925 }
10926 parser_yyerror (parser, yymsgp);
10927 if (yysyntax_error_status == 2)
10928 goto yyexhaustedlab;
10929 }
10930 # undef YYSYNTAX_ERROR
10931 #endif
10932 }
10933
10934
10935
10936 if (yyerrstatus == 3)
10937 {
10938
10939
10940
10941 if (yychar <= YYEOF)
10942 {
10943
10944 if (yychar == YYEOF)
10945 YYABORT;
10946 }
10947 else
10948 {
10949 yydestruct ("Error: discarding",
10950 yytoken, &yylval, parser);
10951 yychar = YYEMPTY;
10952 }
10953 }
10954
10955
10956
10957 goto yyerrlab1;
10958
10959
10960
10961
10962
10963 yyerrorlab:
10964
10965
10966
10967
10968 if ( 0)
10969 goto yyerrorlab;
10970
10971
10972
10973 YYPOPSTACK (yylen);
10974 yylen = 0;
10975 YY_STACK_PRINT (yyss, yyssp);
10976 yystate = *yyssp;
10977 goto yyerrlab1;
10978
10979
10980
10981
10982
10983 yyerrlab1:
10984 yyerrstatus = 3;
10985
10986 for (;;)
10987 {
10988 yyn = yypact[yystate];
10989 if (!yypact_value_is_default (yyn))
10990 {
10991 yyn += YYTERROR;
10992 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
10993 {
10994 yyn = yytable[yyn];
10995 if (0 < yyn)
10996 break;
10997 }
10998 }
10999
11000
11001 if (yyssp == yyss)
11002 YYABORT;
11003
11004
11005 yydestruct ("Error: popping",
11006 yystos[yystate], yyvsp, parser);
11007 YYPOPSTACK (1);
11008 yystate = *yyssp;
11009 YY_STACK_PRINT (yyss, yyssp);
11010 }
11011
11012 *++yyvsp = yylval;
11013
11014
11015
11016 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
11017
11018 yystate = yyn;
11019 goto yynewstate;
11020
11021
11022
11023
11024
11025 yyacceptlab:
11026 yyresult = 0;
11027 goto yyreturn;
11028
11029
11030
11031
11032 yyabortlab:
11033 yyresult = 1;
11034 goto yyreturn;
11035
11036 #if !defined(yyoverflow) || YYERROR_VERBOSE
11037
11038
11039
11040 yyexhaustedlab:
11041 parser_yyerror (parser, YY_("memory exhausted"));
11042 yyresult = 2;
11043
11044 #endif
11045
11046 yyreturn:
11047 if (yychar != YYEMPTY)
11048 {
11049
11050
11051 yytoken = YYTRANSLATE (yychar);
11052 yydestruct ("Cleanup: discarding lookahead",
11053 yytoken, &yylval, parser);
11054 }
11055
11056
11057 YYPOPSTACK (yylen);
11058 YY_STACK_PRINT (yyss, yyssp);
11059 while (yyssp != yyss)
11060 {
11061 yydestruct ("Cleanup: popping",
11062 yystos[*yyssp], yyvsp, parser);
11063 YYPOPSTACK (1);
11064 }
11065 #ifndef yyoverflow
11066 if (yyss != yyssa)
11067 YYSTACK_FREE (yyss);
11068 #endif
11069 #if YYERROR_VERBOSE
11070 if (yymsg != yymsgbuf)
11071 YYSTACK_FREE (yymsg);
11072 #endif
11073
11074 return YYID (yyresult);
11075 }
11076
11077
11078
11079
11080 #line 4886 "parse.y"
11081
11082 # undef parser
11083 # undef yylex
11084 # undef yylval
11085 # define yylval (*((YYSTYPE*)(parser->parser_yylval)))
11086
11087 static int parser_regx_options(struct parser_params*);
11088 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
11089 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
11090 static int parser_parse_string(struct parser_params*,NODE*);
11091 static int parser_here_document(struct parser_params*,NODE*);
11092
11093
11094 # define nextc() parser_nextc(parser)
11095 # define pushback(c) parser_pushback(parser, (c))
11096 # define newtok() parser_newtok(parser)
11097 # define tokspace(n) parser_tokspace(parser, (n))
11098 # define tokadd(c) parser_tokadd(parser, (c))
11099 # define tok_hex(numlen) parser_tok_hex(parser, (numlen))
11100 # define read_escape(flags,e) parser_read_escape(parser, (flags), (e))
11101 # define tokadd_escape(e) parser_tokadd_escape(parser, (e))
11102 # define regx_options() parser_regx_options(parser)
11103 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,(f),(t),(p),(n),(e))
11104 # define parse_string(n) parser_parse_string(parser,(n))
11105 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, (c), (enc))
11106 # define here_document(n) parser_here_document(parser,(n))
11107 # define heredoc_identifier() parser_heredoc_identifier(parser)
11108 # define heredoc_restore(n) parser_heredoc_restore(parser,(n))
11109 # define whole_match_p(e,l,i) parser_whole_match_p(parser,(e),(l),(i))
11110
11111 #ifndef RIPPER
11112 # define set_yylval_str(x) (yylval.node = NEW_STR(x))
11113 # define set_yylval_num(x) (yylval.num = (x))
11114 # define set_yylval_id(x) (yylval.id = (x))
11115 # define set_yylval_name(x) (yylval.id = (x))
11116 # define set_yylval_literal(x) (yylval.node = NEW_LIT(x))
11117 # define set_yylval_node(x) (yylval.node = (x))
11118 # define yylval_id() (yylval.id)
11119 #else
11120 static inline VALUE
11121 ripper_yylval_id(ID x)
11122 {
11123 return (VALUE)NEW_LASGN(x, ID2SYM(x));
11124 }
11125 # define set_yylval_str(x) (void)(x)
11126 # define set_yylval_num(x) (void)(x)
11127 # define set_yylval_id(x) (void)(x)
11128 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
11129 # define set_yylval_literal(x) (void)(x)
11130 # define set_yylval_node(x) (void)(x)
11131 # define yylval_id() yylval.id
11132 #endif
11133
11134 #ifndef RIPPER
11135 #define ripper_flush(p) (void)(p)
11136 #else
11137 #define ripper_flush(p) ((p)->tokp = (p)->parser_lex_p)
11138
11139 #define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
11140
11141 static int
11142 ripper_has_scan_event(struct parser_params *parser)
11143 {
11144
11145 if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
11146 return lex_p > parser->tokp;
11147 }
11148
11149 static VALUE
11150 ripper_scan_event_val(struct parser_params *parser, int t)
11151 {
11152 VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
11153 VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
11154 ripper_flush(parser);
11155 return rval;
11156 }
11157
11158 static void
11159 ripper_dispatch_scan_event(struct parser_params *parser, int t)
11160 {
11161 if (!ripper_has_scan_event(parser)) return;
11162 yylval_rval = ripper_scan_event_val(parser, t);
11163 }
11164
11165 static void
11166 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
11167 {
11168 if (!ripper_has_scan_event(parser)) return;
11169 (void)ripper_scan_event_val(parser, t);
11170 }
11171
11172 static void
11173 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
11174 {
11175 int saved_line = ruby_sourceline;
11176 const char *saved_tokp = parser->tokp;
11177
11178 ruby_sourceline = parser->delayed_line;
11179 parser->tokp = lex_pbeg + parser->delayed_col;
11180 yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
11181 parser->delayed = Qnil;
11182 ruby_sourceline = saved_line;
11183 parser->tokp = saved_tokp;
11184 }
11185 #endif
11186
11187 #include "ruby/regex.h"
11188 #include "ruby/util.h"
11189
11190
11191
11192
11193
11194 #undef SIGN_EXTEND_CHAR
11195 #if __STDC__
11196 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
11197 #else
11198
11199 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
11200 #endif
11201
11202 #define parser_encoding_name() (parser->enc->name)
11203 #define parser_mbclen() mbclen((lex_p-1),lex_pend,parser->enc)
11204 #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,parser->enc)
11205 #define is_identchar(p,e,enc) (rb_enc_isalnum(*(p),(enc)) || (*(p)) == '_' || !ISASCII(*(p)))
11206 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,parser->enc))
11207
11208 #define parser_isascii() ISASCII(*(lex_p-1))
11209
11210 #ifndef RIPPER
11211 static int
11212 token_info_get_column(struct parser_params *parser, const char *token)
11213 {
11214 int column = 1;
11215 const char *p, *pend = lex_p - strlen(token);
11216 for (p = lex_pbeg; p < pend; p++) {
11217 if (*p == '\t') {
11218 column = (((column - 1) / 8) + 1) * 8;
11219 }
11220 column++;
11221 }
11222 return column;
11223 }
11224
11225 static int
11226 token_info_has_nonspaces(struct parser_params *parser, const char *token)
11227 {
11228 const char *p, *pend = lex_p - strlen(token);
11229 for (p = lex_pbeg; p < pend; p++) {
11230 if (*p != ' ' && *p != '\t') {
11231 return 1;
11232 }
11233 }
11234 return 0;
11235 }
11236
11237 #undef token_info_push
11238 static void
11239 token_info_push(struct parser_params *parser, const char *token)
11240 {
11241 token_info *ptinfo;
11242
11243 if (!parser->parser_token_info_enabled) return;
11244 ptinfo = ALLOC(token_info);
11245 ptinfo->token = token;
11246 ptinfo->linenum = ruby_sourceline;
11247 ptinfo->column = token_info_get_column(parser, token);
11248 ptinfo->nonspc = token_info_has_nonspaces(parser, token);
11249 ptinfo->next = parser->parser_token_info;
11250
11251 parser->parser_token_info = ptinfo;
11252 }
11253
11254 #undef token_info_pop
11255 static void
11256 token_info_pop(struct parser_params *parser, const char *token)
11257 {
11258 int linenum;
11259 token_info *ptinfo = parser->parser_token_info;
11260
11261 if (!ptinfo) return;
11262 parser->parser_token_info = ptinfo->next;
11263 if (token_info_get_column(parser, token) == ptinfo->column) {
11264 goto finish;
11265 }
11266 linenum = ruby_sourceline;
11267 if (linenum == ptinfo->linenum) {
11268 goto finish;
11269 }
11270 if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) {
11271 goto finish;
11272 }
11273 if (parser->parser_token_info_enabled) {
11274 rb_compile_warn(ruby_sourcefile, linenum,
11275 "mismatched indentations at '%s' with '%s' at %d",
11276 token, ptinfo->token, ptinfo->linenum);
11277 }
11278
11279 finish:
11280 xfree(ptinfo);
11281 }
11282 #endif
11283
11284 static int
11285 parser_yyerror(struct parser_params *parser, const char *msg)
11286 {
11287 #ifndef RIPPER
11288 const int max_line_margin = 30;
11289 const char *p, *pe;
11290 char *buf;
11291 long len;
11292 int i;
11293
11294 compile_error(PARSER_ARG "%s", msg);
11295 p = lex_p;
11296 while (lex_pbeg <= p) {
11297 if (*p == '\n') break;
11298 p--;
11299 }
11300 p++;
11301
11302 pe = lex_p;
11303 while (pe < lex_pend) {
11304 if (*pe == '\n') break;
11305 pe++;
11306 }
11307
11308 len = pe - p;
11309 if (len > 4) {
11310 char *p2;
11311 const char *pre = "", *post = "";
11312
11313 if (len > max_line_margin * 2 + 10) {
11314 if (lex_p - p > max_line_margin) {
11315 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
11316 pre = "...";
11317 }
11318 if (pe - lex_p > max_line_margin) {
11319 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
11320 post = "...";
11321 }
11322 len = pe - p;
11323 }
11324 buf = ALLOCA_N(char, len+2);
11325 MEMCPY(buf, p, char, len);
11326 buf[len] = '\0';
11327 rb_compile_error_append("%s%s%s", pre, buf, post);
11328
11329 i = (int)(lex_p - p);
11330 p2 = buf; pe = buf + len;
11331
11332 while (p2 < pe) {
11333 if (*p2 != '\t') *p2 = ' ';
11334 p2++;
11335 }
11336 buf[i] = '^';
11337 buf[i+1] = '\0';
11338 rb_compile_error_append("%s%s", pre, buf);
11339 }
11340 #else
11341 dispatch1(parse_error, STR_NEW2(msg));
11342 #endif
11343 return 0;
11344 }
11345
11346 static void parser_prepare(struct parser_params *parser);
11347
11348 #ifndef RIPPER
11349 static VALUE
11350 debug_lines(const char *f)
11351 {
11352 ID script_lines;
11353 CONST_ID(script_lines, "SCRIPT_LINES__");
11354 if (rb_const_defined_at(rb_cObject, script_lines)) {
11355 VALUE hash = rb_const_get_at(rb_cObject, script_lines);
11356 if (TYPE(hash) == T_HASH) {
11357 VALUE fname = rb_external_str_new_with_enc(f, strlen(f), rb_filesystem_encoding());
11358 VALUE lines = rb_ary_new();
11359 rb_hash_aset(hash, fname, lines);
11360 return lines;
11361 }
11362 }
11363 return 0;
11364 }
11365
11366 static VALUE
11367 coverage(const char *f, int n)
11368 {
11369 VALUE coverages = rb_get_coverages();
11370 if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
11371 VALUE fname = rb_external_str_new_with_enc(f, strlen(f), rb_filesystem_encoding());
11372 VALUE lines = rb_ary_new2(n);
11373 int i;
11374 RBASIC(lines)->klass = 0;
11375 for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil;
11376 RARRAY(lines)->as.heap.len = n;
11377 rb_hash_aset(coverages, fname, lines);
11378 return lines;
11379 }
11380 return 0;
11381 }
11382
11383 static int
11384 e_option_supplied(struct parser_params *parser)
11385 {
11386 return strcmp(ruby_sourcefile, "-e") == 0;
11387 }
11388
11389 static VALUE
11390 yycompile0(VALUE arg, int tracing)
11391 {
11392 int n;
11393 NODE *tree;
11394 struct parser_params *parser = (struct parser_params *)arg;
11395
11396 if (!compile_for_eval && rb_safe_level() == 0) {
11397 ruby_debug_lines = debug_lines(ruby_sourcefile);
11398 if (ruby_debug_lines && ruby_sourceline > 0) {
11399 VALUE str = STR_NEW0();
11400 n = ruby_sourceline;
11401 do {
11402 rb_ary_push(ruby_debug_lines, str);
11403 } while (--n);
11404 }
11405
11406 if (!e_option_supplied(parser)) {
11407 ruby_coverage = coverage(ruby_sourcefile, ruby_sourceline);
11408 }
11409 }
11410
11411 parser_prepare(parser);
11412 deferred_nodes = 0;
11413 #ifndef RIPPER
11414 parser->parser_token_info_enabled = !compile_for_eval && RTEST(ruby_verbose);
11415 #endif
11416 n = yyparse((void*)parser);
11417 ruby_debug_lines = 0;
11418 ruby_coverage = 0;
11419 compile_for_eval = 0;
11420
11421 lex_strterm = 0;
11422 lex_p = lex_pbeg = lex_pend = 0;
11423 lex_lastline = lex_nextline = 0;
11424 if (parser->nerr) {
11425 return 0;
11426 }
11427 tree = ruby_eval_tree;
11428 if (!tree) {
11429 tree = NEW_NIL();
11430 }
11431 else if (ruby_eval_tree_begin) {
11432 tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
11433 }
11434 return (VALUE)tree;
11435 }
11436
11437 static NODE*
11438 yycompile(struct parser_params *parser, const char *f, int line)
11439 {
11440 ruby_sourcefile = ruby_strdup(f);
11441 ruby_sourceline = line - 1;
11442 return (NODE *)ruby_suppress_tracing(yycompile0, (VALUE)parser, TRUE);
11443 }
11444 #endif
11445
11446 static rb_encoding *
11447 must_be_ascii_compatible(VALUE s)
11448 {
11449 rb_encoding *enc = rb_enc_get(s);
11450 if (!rb_enc_asciicompat(enc)) {
11451 rb_raise(rb_eArgError, "invalid source encoding");
11452 }
11453 return enc;
11454 }
11455
11456 static VALUE
11457 lex_get_str(struct parser_params *parser, VALUE s)
11458 {
11459 char *beg, *end, *pend;
11460 rb_encoding *enc = must_be_ascii_compatible(s);
11461
11462 beg = RSTRING_PTR(s);
11463 if (lex_gets_ptr) {
11464 if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
11465 beg += lex_gets_ptr;
11466 }
11467 pend = RSTRING_PTR(s) + RSTRING_LEN(s);
11468 end = beg;
11469 while (end < pend) {
11470 if (*end++ == '\n') break;
11471 }
11472 lex_gets_ptr = end - RSTRING_PTR(s);
11473 return rb_enc_str_new(beg, end - beg, enc);
11474 }
11475
11476 static VALUE
11477 lex_getline(struct parser_params *parser)
11478 {
11479 VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
11480 if (NIL_P(line)) return line;
11481 must_be_ascii_compatible(line);
11482 #ifndef RIPPER
11483 if (ruby_debug_lines) {
11484 rb_enc_associate(line, parser->enc);
11485 rb_ary_push(ruby_debug_lines, line);
11486 }
11487 if (ruby_coverage) {
11488 rb_ary_push(ruby_coverage, Qnil);
11489 }
11490 #endif
11491 return line;
11492 }
11493
11494 #ifdef RIPPER
11495 static rb_data_type_t parser_data_type;
11496 #else
11497 static const rb_data_type_t parser_data_type;
11498
11499 static NODE*
11500 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11501 {
11502 struct parser_params *parser;
11503 NODE *node;
11504 volatile VALUE tmp;
11505
11506 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11507 lex_gets = lex_get_str;
11508 lex_gets_ptr = 0;
11509 lex_input = s;
11510 lex_pbeg = lex_p = lex_pend = 0;
11511 compile_for_eval = rb_parse_in_eval();
11512
11513 node = yycompile(parser, f, line);
11514 tmp = vparser;
11515
11516 return node;
11517 }
11518
11519 NODE*
11520 rb_compile_string(const char *f, VALUE s, int line)
11521 {
11522 must_be_ascii_compatible(s);
11523 return parser_compile_string(rb_parser_new(), f, s, line);
11524 }
11525
11526 NODE*
11527 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11528 {
11529 must_be_ascii_compatible(s);
11530 return parser_compile_string(vparser, f, s, line);
11531 }
11532
11533 NODE*
11534 rb_compile_cstr(const char *f, const char *s, int len, int line)
11535 {
11536 VALUE str = rb_str_new(s, len);
11537 return parser_compile_string(rb_parser_new(), f, str, line);
11538 }
11539
11540 NODE*
11541 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
11542 {
11543 VALUE str = rb_str_new(s, len);
11544 return parser_compile_string(vparser, f, str, line);
11545 }
11546
11547 static VALUE
11548 lex_io_gets(struct parser_params *parser, VALUE io)
11549 {
11550 return rb_io_gets(io);
11551 }
11552
11553 NODE*
11554 rb_compile_file(const char *f, VALUE file, int start)
11555 {
11556 VALUE volatile vparser = rb_parser_new();
11557
11558 return rb_parser_compile_file(vparser, f, file, start);
11559 }
11560
11561 NODE*
11562 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
11563 {
11564 struct parser_params *parser;
11565 volatile VALUE tmp;
11566 NODE *node;
11567
11568 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11569 lex_gets = lex_io_gets;
11570 lex_input = file;
11571 lex_pbeg = lex_p = lex_pend = 0;
11572 compile_for_eval = rb_parse_in_eval();
11573
11574 node = yycompile(parser, f, start);
11575 tmp = vparser;
11576
11577 return node;
11578 }
11579 #endif
11580
11581 #define STR_FUNC_ESCAPE 0x01
11582 #define STR_FUNC_EXPAND 0x02
11583 #define STR_FUNC_REGEXP 0x04
11584 #define STR_FUNC_QWORDS 0x08
11585 #define STR_FUNC_SYMBOL 0x10
11586 #define STR_FUNC_INDENT 0x20
11587
11588 enum string_type {
11589 str_squote = (0),
11590 str_dquote = (STR_FUNC_EXPAND),
11591 str_xquote = (STR_FUNC_EXPAND),
11592 str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND),
11593 str_sword = (STR_FUNC_QWORDS),
11594 str_dword = (STR_FUNC_QWORDS|STR_FUNC_EXPAND),
11595 str_ssym = (STR_FUNC_SYMBOL),
11596 str_dsym = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND)
11597 };
11598
11599 static VALUE
11600 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
11601 {
11602 VALUE str;
11603
11604 str = rb_enc_str_new(p, n, enc);
11605 if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
11606 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
11607 }
11608 else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
11609 rb_enc_associate(str, rb_ascii8bit_encoding());
11610 }
11611 }
11612
11613 return str;
11614 }
11615
11616 #define lex_goto_eol(parser) ((parser)->parser_lex_p = (parser)->parser_lex_pend)
11617 #define lex_eol_p() (lex_p >= lex_pend)
11618 #define peek(c) peek_n((c), 0)
11619 #define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n])
11620
11621 static inline int
11622 parser_nextc(struct parser_params *parser)
11623 {
11624 int c;
11625
11626 if (lex_p == lex_pend) {
11627 VALUE v = lex_nextline;
11628 lex_nextline = 0;
11629 if (!v) {
11630 if (parser->eofp)
11631 return -1;
11632
11633 if (!lex_input || NIL_P(v = lex_getline(parser))) {
11634 parser->eofp = Qtrue;
11635 lex_goto_eol(parser);
11636 return -1;
11637 }
11638 }
11639 {
11640 #ifdef RIPPER
11641 if (parser->tokp < lex_pend) {
11642 if (NIL_P(parser->delayed)) {
11643 parser->delayed = rb_str_buf_new(1024);
11644 rb_enc_associate(parser->delayed, parser->enc);
11645 rb_str_buf_cat(parser->delayed,
11646 parser->tokp, lex_pend - parser->tokp);
11647 parser->delayed_line = ruby_sourceline;
11648 parser->delayed_col = (int)(parser->tokp - lex_pbeg);
11649 }
11650 else {
11651 rb_str_buf_cat(parser->delayed,
11652 parser->tokp, lex_pend - parser->tokp);
11653 }
11654 }
11655 #endif
11656 if (heredoc_end > 0) {
11657 ruby_sourceline = heredoc_end;
11658 heredoc_end = 0;
11659 }
11660 ruby_sourceline++;
11661 parser->line_count++;
11662 lex_pbeg = lex_p = RSTRING_PTR(v);
11663 lex_pend = lex_p + RSTRING_LEN(v);
11664 ripper_flush(parser);
11665 lex_lastline = v;
11666 }
11667 }
11668 c = (unsigned char)*lex_p++;
11669 if (c == '\r' && peek('\n')) {
11670 lex_p++;
11671 c = '\n';
11672 }
11673
11674 return c;
11675 }
11676
11677 static void
11678 parser_pushback(struct parser_params *parser, int c)
11679 {
11680 if (c == -1) return;
11681 lex_p--;
11682 if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
11683 lex_p--;
11684 }
11685 }
11686
11687 #define was_bol() (lex_p == lex_pbeg + 1)
11688
11689 #define tokfix() (tokenbuf[tokidx]='\0')
11690 #define tok() tokenbuf
11691 #define toklen() tokidx
11692 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
11693
11694 static char*
11695 parser_newtok(struct parser_params *parser)
11696 {
11697 tokidx = 0;
11698 if (!tokenbuf) {
11699 toksiz = 60;
11700 tokenbuf = ALLOC_N(char, 60);
11701 }
11702 if (toksiz > 4096) {
11703 toksiz = 60;
11704 REALLOC_N(tokenbuf, char, 60);
11705 }
11706 return tokenbuf;
11707 }
11708
11709 static char *
11710 parser_tokspace(struct parser_params *parser, int n)
11711 {
11712 tokidx += n;
11713
11714 if (tokidx >= toksiz) {
11715 do {toksiz *= 2;} while (toksiz < tokidx);
11716 REALLOC_N(tokenbuf, char, toksiz);
11717 }
11718 return &tokenbuf[tokidx-n];
11719 }
11720
11721 static void
11722 parser_tokadd(struct parser_params *parser, int c)
11723 {
11724 tokenbuf[tokidx++] = (char)c;
11725 if (tokidx >= toksiz) {
11726 toksiz *= 2;
11727 REALLOC_N(tokenbuf, char, toksiz);
11728 }
11729 }
11730
11731 static int
11732 parser_tok_hex(struct parser_params *parser, size_t *numlen)
11733 {
11734 int c;
11735
11736 c = scan_hex(lex_p, 2, numlen);
11737 if (!*numlen) {
11738 yyerror("invalid hex escape");
11739 return 0;
11740 }
11741 lex_p += *numlen;
11742 return c;
11743 }
11744
11745 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
11746
11747 static int
11748 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
11749 int string_literal, int symbol_literal, int regexp_literal)
11750 {
11751
11752
11753
11754
11755
11756
11757
11758 int codepoint;
11759 size_t numlen;
11760
11761 if (regexp_literal) { tokadd('\\'); tokadd('u'); }
11762
11763 if (peek('{')) {
11764 do {
11765 if (regexp_literal) { tokadd(*lex_p); }
11766 nextc();
11767 codepoint = scan_hex(lex_p, 6, &numlen);
11768 if (numlen == 0) {
11769 yyerror("invalid Unicode escape");
11770 return 0;
11771 }
11772 if (codepoint > 0x10ffff) {
11773 yyerror("invalid Unicode codepoint (too large)");
11774 return 0;
11775 }
11776 lex_p += numlen;
11777 if (regexp_literal) {
11778 tokcopy((int)numlen);
11779 }
11780 else if (codepoint >= 0x80) {
11781 *encp = UTF8_ENC();
11782 if (string_literal) tokaddmbc(codepoint, *encp);
11783 }
11784 else if (string_literal) {
11785 tokadd(codepoint);
11786 }
11787 } while (string_literal && (peek(' ') || peek('\t')));
11788
11789 if (!peek('}')) {
11790 yyerror("unterminated Unicode escape");
11791 return 0;
11792 }
11793
11794 if (regexp_literal) { tokadd('}'); }
11795 nextc();
11796 }
11797 else {
11798 codepoint = scan_hex(lex_p, 4, &numlen);
11799 if (numlen < 4) {
11800 yyerror("invalid Unicode escape");
11801 return 0;
11802 }
11803 lex_p += 4;
11804 if (regexp_literal) {
11805 tokcopy(4);
11806 }
11807 else if (codepoint >= 0x80) {
11808 *encp = UTF8_ENC();
11809 if (string_literal) tokaddmbc(codepoint, *encp);
11810 }
11811 else if (string_literal) {
11812 tokadd(codepoint);
11813 }
11814 }
11815
11816 return codepoint;
11817 }
11818
11819 #define ESCAPE_CONTROL 1
11820 #define ESCAPE_META 2
11821
11822 static int
11823 parser_read_escape(struct parser_params *parser, int flags,
11824 rb_encoding **encp)
11825 {
11826 int c;
11827 size_t numlen;
11828
11829 switch (c = nextc()) {
11830 case '\\':
11831 return c;
11832
11833 case 'n':
11834 return '\n';
11835
11836 case 't':
11837 return '\t';
11838
11839 case 'r':
11840 return '\r';
11841
11842 case 'f':
11843 return '\f';
11844
11845 case 'v':
11846 return '\13';
11847
11848 case 'a':
11849 return '\007';
11850
11851 case 'e':
11852 return 033;
11853
11854 case '0': case '1': case '2': case '3':
11855 case '4': case '5': case '6': case '7':
11856 pushback(c);
11857 c = scan_oct(lex_p, 3, &numlen);
11858 lex_p += numlen;
11859 return c;
11860
11861 case 'x':
11862 c = tok_hex(&numlen);
11863 if (numlen == 0) return 0;
11864 return c;
11865
11866 case 'b':
11867 return '\010';
11868
11869 case 's':
11870 return ' ';
11871
11872 case 'M':
11873 if (flags & ESCAPE_META) goto eof;
11874 if ((c = nextc()) != '-') {
11875 pushback(c);
11876 goto eof;
11877 }
11878 if ((c = nextc()) == '\\') {
11879 if (peek('u')) goto eof;
11880 return read_escape(flags|ESCAPE_META, encp) | 0x80;
11881 }
11882 else if (c == -1 || !ISASCII(c)) goto eof;
11883 else {
11884 return ((c & 0xff) | 0x80);
11885 }
11886
11887 case 'C':
11888 if ((c = nextc()) != '-') {
11889 pushback(c);
11890 goto eof;
11891 }
11892 case 'c':
11893 if (flags & ESCAPE_CONTROL) goto eof;
11894 if ((c = nextc())== '\\') {
11895 if (peek('u')) goto eof;
11896 c = read_escape(flags|ESCAPE_CONTROL, encp);
11897 }
11898 else if (c == '?')
11899 return 0177;
11900 else if (c == -1 || !ISASCII(c)) goto eof;
11901 return c & 0x9f;
11902
11903 eof:
11904 case -1:
11905 yyerror("Invalid escape character syntax");
11906 return '\0';
11907
11908 default:
11909 return c;
11910 }
11911 }
11912
11913 static void
11914 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
11915 {
11916 int len = rb_enc_codelen(c, enc);
11917 rb_enc_mbcput(c, tokspace(len), enc);
11918 }
11919
11920 static int
11921 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
11922 {
11923 int c;
11924 int flags = 0;
11925 size_t numlen;
11926
11927 first:
11928 switch (c = nextc()) {
11929 case '\n':
11930 return 0;
11931
11932 case '0': case '1': case '2': case '3':
11933 case '4': case '5': case '6': case '7':
11934 {
11935 ruby_scan_oct(--lex_p, 3, &numlen);
11936 if (numlen == 0) goto eof;
11937 lex_p += numlen;
11938 tokcopy((int)numlen + 1);
11939 }
11940 return 0;
11941
11942 case 'x':
11943 {
11944 tok_hex(&numlen);
11945 if (numlen == 0) return -1;
11946 tokcopy((int)numlen + 2);
11947 }
11948 return 0;
11949
11950 case 'M':
11951 if (flags & ESCAPE_META) goto eof;
11952 if ((c = nextc()) != '-') {
11953 pushback(c);
11954 goto eof;
11955 }
11956 tokcopy(3);
11957 flags |= ESCAPE_META;
11958 goto escaped;
11959
11960 case 'C':
11961 if (flags & ESCAPE_CONTROL) goto eof;
11962 if ((c = nextc()) != '-') {
11963 pushback(c);
11964 goto eof;
11965 }
11966 tokcopy(3);
11967 goto escaped;
11968
11969 case 'c':
11970 if (flags & ESCAPE_CONTROL) goto eof;
11971 tokcopy(2);
11972 flags |= ESCAPE_CONTROL;
11973 escaped:
11974 if ((c = nextc()) == '\\') {
11975 goto first;
11976 }
11977 else if (c == -1) goto eof;
11978 tokadd(c);
11979 return 0;
11980
11981 eof:
11982 case -1:
11983 yyerror("Invalid escape character syntax");
11984 return -1;
11985
11986 default:
11987 tokadd('\\');
11988 tokadd(c);
11989 }
11990 return 0;
11991 }
11992
11993 static int
11994 parser_regx_options(struct parser_params *parser)
11995 {
11996 int kcode = 0;
11997 int kopt = 0;
11998 int options = 0;
11999 int c, opt, kc;
12000
12001 newtok();
12002 while (c = nextc(), ISALPHA(c)) {
12003 if (c == 'o') {
12004 options |= RE_OPTION_ONCE;
12005 }
12006 else if (rb_char_to_option_kcode(c, &opt, &kc)) {
12007 if (kc >= 0) {
12008 if (kc != rb_ascii8bit_encindex()) kcode = c;
12009 kopt = opt;
12010 }
12011 else {
12012 options |= opt;
12013 }
12014 }
12015 else {
12016 tokadd(c);
12017 }
12018 }
12019 options |= kopt;
12020 pushback(c);
12021 if (toklen()) {
12022 tokfix();
12023 compile_error(PARSER_ARG "unknown regexp option%s - %s",
12024 toklen() > 1 ? "s" : "", tok());
12025 }
12026 return options | RE_OPTION_ENCODING(kcode);
12027 }
12028
12029 static void
12030 dispose_string(VALUE str)
12031 {
12032
12033 if (RBASIC(str)->flags & RSTRING_NOEMBED)
12034 xfree(RSTRING_PTR(str));
12035 rb_gc_force_recycle(str);
12036 }
12037
12038 static int
12039 parser_tokadd_mbchar(struct parser_params *parser, int c)
12040 {
12041 int len = parser_precise_mbclen();
12042 if (!MBCLEN_CHARFOUND_P(len)) {
12043 compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
12044 return -1;
12045 }
12046 tokadd(c);
12047 lex_p += --len;
12048 if (len > 0) tokcopy(len);
12049 return c;
12050 }
12051
12052 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c))
12053
12054 static int
12055 parser_tokadd_string(struct parser_params *parser,
12056 int func, int term, int paren, long *nest,
12057 rb_encoding **encp)
12058 {
12059 int c;
12060 int has_nonascii = 0;
12061 rb_encoding *enc = *encp;
12062 char *errbuf = 0;
12063 static const char mixed_msg[] = "%s mixed within %s source";
12064
12065 #define mixed_error(enc1, enc2) if (!errbuf) { \
12066 size_t len = sizeof(mixed_msg) - 4; \
12067 len += strlen(rb_enc_name(enc1)); \
12068 len += strlen(rb_enc_name(enc2)); \
12069 errbuf = ALLOCA_N(char, len); \
12070 snprintf(errbuf, len, mixed_msg, \
12071 rb_enc_name(enc1), \
12072 rb_enc_name(enc2)); \
12073 yyerror(errbuf); \
12074 }
12075 #define mixed_escape(beg, enc1, enc2) do { \
12076 const char *pos = lex_p; \
12077 lex_p = (beg); \
12078 mixed_error((enc1), (enc2)); \
12079 lex_p = pos; \
12080 } while (0)
12081
12082 while ((c = nextc()) != -1) {
12083 if (paren && c == paren) {
12084 ++*nest;
12085 }
12086 else if (c == term) {
12087 if (!nest || !*nest) {
12088 pushback(c);
12089 break;
12090 }
12091 --*nest;
12092 }
12093 else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
12094 int c2 = *lex_p;
12095 if (c2 == '$' || c2 == '@' || c2 == '{') {
12096 pushback(c);
12097 break;
12098 }
12099 }
12100 else if (c == '\\') {
12101 const char *beg = lex_p - 1;
12102 c = nextc();
12103 switch (c) {
12104 case '\n':
12105 if (func & STR_FUNC_QWORDS) break;
12106 if (func & STR_FUNC_EXPAND) continue;
12107 tokadd('\\');
12108 break;
12109
12110 case '\\':
12111 if (func & STR_FUNC_ESCAPE) tokadd(c);
12112 break;
12113
12114 case 'u':
12115 if ((func & STR_FUNC_EXPAND) == 0) {
12116 tokadd('\\');
12117 break;
12118 }
12119 parser_tokadd_utf8(parser, &enc, 1,
12120 func & STR_FUNC_SYMBOL,
12121 func & STR_FUNC_REGEXP);
12122 if (has_nonascii && enc != *encp) {
12123 mixed_escape(beg, enc, *encp);
12124 }
12125 continue;
12126
12127 default:
12128 if (c == -1) return -1;
12129 if (!ISASCII(c)) {
12130 if ((func & STR_FUNC_EXPAND) == 0) tokadd('\\');
12131 goto non_ascii;
12132 }
12133 if (func & STR_FUNC_REGEXP) {
12134 pushback(c);
12135 if ((c = tokadd_escape(&enc)) < 0)
12136 return -1;
12137 if (has_nonascii && enc != *encp) {
12138 mixed_escape(beg, enc, *encp);
12139 }
12140 continue;
12141 }
12142 else if (func & STR_FUNC_EXPAND) {
12143 pushback(c);
12144 if (func & STR_FUNC_ESCAPE) tokadd('\\');
12145 c = read_escape(0, &enc);
12146 }
12147 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12148
12149 }
12150 else if (c != term && !(paren && c == paren)) {
12151 tokadd('\\');
12152 pushback(c);
12153 continue;
12154 }
12155 }
12156 }
12157 else if (!parser_isascii()) {
12158 non_ascii:
12159 has_nonascii = 1;
12160 if (enc != *encp) {
12161 mixed_error(enc, *encp);
12162 continue;
12163 }
12164 if (tokadd_mbchar(c) == -1) return -1;
12165 continue;
12166 }
12167 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12168 pushback(c);
12169 break;
12170 }
12171 if (c & 0x80) {
12172 has_nonascii = 1;
12173 if (enc != *encp) {
12174 mixed_error(enc, *encp);
12175 continue;
12176 }
12177 }
12178 tokadd(c);
12179 }
12180 *encp = enc;
12181 return c;
12182 }
12183
12184 #define NEW_STRTERM(func, term, paren) \
12185 rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
12186
12187 #ifdef RIPPER
12188 static void
12189 ripper_flush_string_content(struct parser_params *parser, rb_encoding *enc)
12190 {
12191 if (!NIL_P(parser->delayed)) {
12192 ptrdiff_t len = lex_p - parser->tokp;
12193 if (len > 0) {
12194 rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
12195 }
12196 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12197 parser->tokp = lex_p;
12198 }
12199 }
12200
12201 #define flush_string_content(enc) ripper_flush_string_content(parser, (enc))
12202 #else
12203 #define flush_string_content(enc) ((void)(enc))
12204 #endif
12205
12206 RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20 + 31) / 32];
12207
12208
12209 #ifndef RIPPER
12210 #define BIT(c, idx) (((c) / 32 - 1 == idx) ? (1U << ((c) % 32)) : 0)
12211 #define SPECIAL_PUNCT(idx) ( \
12212 BIT('~', idx) | BIT('*', idx) | BIT('$', idx) | BIT('?', idx) | \
12213 BIT('!', idx) | BIT('@', idx) | BIT('/', idx) | BIT('\\', idx) | \
12214 BIT(';', idx) | BIT(',', idx) | BIT('.', idx) | BIT('=', idx) | \
12215 BIT(':', idx) | BIT('<', idx) | BIT('>', idx) | BIT('\"', idx) | \
12216 BIT('&', idx) | BIT('`', idx) | BIT('\'', idx) | BIT('+', idx) | \
12217 BIT('0', idx))
12218 const unsigned int ruby_global_name_punct_bits[] = {
12219 SPECIAL_PUNCT(0),
12220 SPECIAL_PUNCT(1),
12221 SPECIAL_PUNCT(2),
12222 };
12223 #undef BIT
12224 #undef SPECIAL_PUNCT
12225 #endif
12226
12227 static inline int
12228 is_global_name_punct(const char c)
12229 {
12230 if (c <= 0x20 || 0x7e < c) return 0;
12231 return (ruby_global_name_punct_bits[(c - 0x20) / 32] >> (c % 32)) & 1;
12232 }
12233
12234 static int
12235 parser_peek_variable_name(struct parser_params *parser)
12236 {
12237 int c;
12238 const char *p = lex_p;
12239
12240 if (p + 1 >= lex_pend) return 0;
12241 c = *p++;
12242 switch (c) {
12243 case '$':
12244 if ((c = *p) == '-') {
12245 if (++p >= lex_pend) return 0;
12246 c = *p;
12247 }
12248 else if (is_global_name_punct(c) || ISDIGIT(c)) {
12249 return tSTRING_DVAR;
12250 }
12251 break;
12252 case '@':
12253 if ((c = *p) == '@') {
12254 if (++p >= lex_pend) return 0;
12255 c = *p;
12256 }
12257 break;
12258 case '{':
12259 lex_p = p;
12260 command_start = TRUE;
12261 return tSTRING_DBEG;
12262 default:
12263 return 0;
12264 }
12265 if (!ISASCII(c) || c == '_' || ISALPHA(c))
12266 return tSTRING_DVAR;
12267 return 0;
12268 }
12269
12270 static int
12271 parser_parse_string(struct parser_params *parser, NODE *quote)
12272 {
12273 int func = (int)quote->nd_func;
12274 int term = nd_term(quote);
12275 int paren = nd_paren(quote);
12276 int c, space = 0;
12277 rb_encoding *enc = parser->enc;
12278
12279 if (func == -1) return tSTRING_END;
12280 c = nextc();
12281 if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12282 do {c = nextc();} while (ISSPACE(c));
12283 space = 1;
12284 }
12285 if (c == term && !quote->nd_nest) {
12286 if (func & STR_FUNC_QWORDS) {
12287 quote->nd_func = -1;
12288 return ' ';
12289 }
12290 if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
12291 set_yylval_num(regx_options());
12292 return tREGEXP_END;
12293 }
12294 if (space) {
12295 pushback(c);
12296 return ' ';
12297 }
12298 newtok();
12299 if ((func & STR_FUNC_EXPAND) && c == '#') {
12300 int t = parser_peek_variable_name(parser);
12301 if (t) return t;
12302 tokadd('#');
12303 c = nextc();
12304 }
12305 pushback(c);
12306 if (tokadd_string(func, term, paren, "e->nd_nest,
12307 &enc) == -1) {
12308 ruby_sourceline = nd_line(quote);
12309 if (func & STR_FUNC_REGEXP) {
12310 if (parser->eofp)
12311 compile_error(PARSER_ARG "unterminated regexp meets end of file");
12312 return tREGEXP_END;
12313 }
12314 else {
12315 if (parser->eofp)
12316 compile_error(PARSER_ARG "unterminated string meets end of file");
12317 return tSTRING_END;
12318 }
12319 }
12320
12321 tokfix();
12322 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12323 flush_string_content(enc);
12324
12325 return tSTRING_CONTENT;
12326 }
12327
12328 static int
12329 parser_heredoc_identifier(struct parser_params *parser)
12330 {
12331 int c = nextc(), term, func = 0;
12332 long len;
12333
12334 if (c == '-') {
12335 c = nextc();
12336 func = STR_FUNC_INDENT;
12337 }
12338 switch (c) {
12339 case '\'':
12340 func |= str_squote; goto quoted;
12341 case '"':
12342 func |= str_dquote; goto quoted;
12343 case '`':
12344 func |= str_xquote;
12345 quoted:
12346 newtok();
12347 tokadd(func);
12348 term = c;
12349 while ((c = nextc()) != -1 && c != term) {
12350 if (tokadd_mbchar(c) == -1) return 0;
12351 }
12352 if (c == -1) {
12353 compile_error(PARSER_ARG "unterminated here document identifier");
12354 return 0;
12355 }
12356 break;
12357
12358 default:
12359 if (!parser_is_identchar()) {
12360 pushback(c);
12361 if (func & STR_FUNC_INDENT) {
12362 pushback('-');
12363 }
12364 return 0;
12365 }
12366 newtok();
12367 term = '"';
12368 tokadd(func |= str_dquote);
12369 do {
12370 if (tokadd_mbchar(c) == -1) return 0;
12371 } while ((c = nextc()) != -1 && parser_is_identchar());
12372 pushback(c);
12373 break;
12374 }
12375
12376 tokfix();
12377 #ifdef RIPPER
12378 ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
12379 #endif
12380 len = lex_p - lex_pbeg;
12381 lex_goto_eol(parser);
12382 lex_strterm = rb_node_newnode(NODE_HEREDOC,
12383 STR_NEW(tok(), toklen()),
12384 len,
12385 lex_lastline);
12386 nd_set_line(lex_strterm, ruby_sourceline);
12387 ripper_flush(parser);
12388 return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
12389 }
12390
12391 static void
12392 parser_heredoc_restore(struct parser_params *parser, NODE *here)
12393 {
12394 VALUE line;
12395
12396 line = here->nd_orig;
12397 lex_lastline = line;
12398 lex_pbeg = RSTRING_PTR(line);
12399 lex_pend = lex_pbeg + RSTRING_LEN(line);
12400 lex_p = lex_pbeg + here->nd_nth;
12401 heredoc_end = ruby_sourceline;
12402 ruby_sourceline = nd_line(here);
12403 dispose_string(here->nd_lit);
12404 rb_gc_force_recycle((VALUE)here);
12405 ripper_flush(parser);
12406 }
12407
12408 static int
12409 parser_whole_match_p(struct parser_params *parser,
12410 const char *eos, long len, int indent)
12411 {
12412 const char *p = lex_pbeg;
12413 long n;
12414
12415 if (indent) {
12416 while (*p && ISSPACE(*p)) p++;
12417 }
12418 n = lex_pend - (p + len);
12419 if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE;
12420 return strncmp(eos, p, len) == 0;
12421 }
12422
12423 #ifdef RIPPER
12424 static void
12425 ripper_dispatch_heredoc_end(struct parser_params *parser)
12426 {
12427 if (!NIL_P(parser->delayed))
12428 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12429 lex_goto_eol(parser);
12430 ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
12431 }
12432
12433 #define dispatch_heredoc_end() ripper_dispatch_heredoc_end(parser)
12434 #else
12435 #define dispatch_heredoc_end() ((void)0)
12436 #endif
12437
12438 static int
12439 parser_here_document(struct parser_params *parser, NODE *here)
12440 {
12441 int c, func, indent = 0;
12442 const char *eos, *p, *pend;
12443 long len;
12444 VALUE str = 0;
12445 rb_encoding *enc = parser->enc;
12446
12447 eos = RSTRING_PTR(here->nd_lit);
12448 len = RSTRING_LEN(here->nd_lit) - 1;
12449 indent = (func = *eos++) & STR_FUNC_INDENT;
12450
12451 if ((c = nextc()) == -1) {
12452 error:
12453 compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
12454 #ifdef RIPPER
12455 if (NIL_P(parser->delayed)) {
12456 ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
12457 }
12458 else {
12459 if (str ||
12460 ((len = lex_p - parser->tokp) > 0 &&
12461 (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
12462 rb_str_append(parser->delayed, str);
12463 }
12464 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12465 }
12466 lex_goto_eol(parser);
12467 #endif
12468 restore:
12469 heredoc_restore(lex_strterm);
12470 lex_strterm = 0;
12471 return 0;
12472 }
12473 if (was_bol() && whole_match_p(eos, len, indent)) {
12474 dispatch_heredoc_end();
12475 heredoc_restore(lex_strterm);
12476 return tSTRING_END;
12477 }
12478
12479 if (!(func & STR_FUNC_EXPAND)) {
12480 do {
12481 p = RSTRING_PTR(lex_lastline);
12482 pend = lex_pend;
12483 if (pend > p) {
12484 switch (pend[-1]) {
12485 case '\n':
12486 if (--pend == p || pend[-1] != '\r') {
12487 pend++;
12488 break;
12489 }
12490 case '\r':
12491 --pend;
12492 }
12493 }
12494 if (str)
12495 rb_str_cat(str, p, pend - p);
12496 else
12497 str = STR_NEW(p, pend - p);
12498 if (pend < lex_pend) rb_str_cat(str, "\n", 1);
12499 lex_goto_eol(parser);
12500 if (nextc() == -1) {
12501 if (str) dispose_string(str);
12502 goto error;
12503 }
12504 } while (!whole_match_p(eos, len, indent));
12505 }
12506 else {
12507
12508 newtok();
12509 if (c == '#') {
12510 int t = parser_peek_variable_name(parser);
12511 if (t) return t;
12512 tokadd('#');
12513 c = nextc();
12514 }
12515 do {
12516 pushback(c);
12517 if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
12518 if (parser->eofp) goto error;
12519 goto restore;
12520 }
12521 if (c != '\n') {
12522 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12523 flush_string_content(enc);
12524 return tSTRING_CONTENT;
12525 }
12526 tokadd(nextc());
12527
12528 if ((c = nextc()) == -1) goto error;
12529 } while (!whole_match_p(eos, len, indent));
12530 str = STR_NEW3(tok(), toklen(), enc, func);
12531 }
12532 dispatch_heredoc_end();
12533 heredoc_restore(lex_strterm);
12534 lex_strterm = NEW_STRTERM(-1, 0, 0);
12535 set_yylval_str(str);
12536 return tSTRING_CONTENT;
12537 }
12538
12539 #include "lex.c"
12540
12541 static void
12542 arg_ambiguous_gen(struct parser_params *parser)
12543 {
12544 #ifndef RIPPER
12545 rb_warning0("ambiguous first argument; put parentheses or even spaces");
12546 #else
12547 dispatch0(arg_ambiguous);
12548 #endif
12549 }
12550 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
12551
12552 static ID
12553 formal_argument_gen(struct parser_params *parser, ID lhs)
12554 {
12555 #ifndef RIPPER
12556 if (!is_local_id(lhs))
12557 yyerror("formal argument must be local variable");
12558 #endif
12559 shadowing_lvar(lhs);
12560 return lhs;
12561 }
12562
12563 static int
12564 lvar_defined_gen(struct parser_params *parser, ID id)
12565 {
12566 return (dyna_in_block() && dvar_defined_get(id)) || local_id(id);
12567 }
12568
12569
12570 static long
12571 parser_encode_length(struct parser_params *parser, const char *name, long len)
12572 {
12573 long nlen;
12574
12575 if (len > 5 && name[nlen = len - 5] == '-') {
12576 if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
12577 return nlen;
12578 }
12579 if (len > 4 && name[nlen = len - 4] == '-') {
12580 if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
12581 return nlen;
12582 if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
12583 !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
12584
12585 return nlen;
12586 }
12587 return len;
12588 }
12589
12590 static void
12591 parser_set_encode(struct parser_params *parser, const char *name)
12592 {
12593 int idx = rb_enc_find_index(name);
12594 rb_encoding *enc;
12595 VALUE excargs[3];
12596
12597 if (idx < 0) {
12598 excargs[1] = rb_sprintf("unknown encoding name: %s", name);
12599 error:
12600 excargs[0] = rb_eArgError;
12601 excargs[2] = rb_make_backtrace();
12602 rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
12603 rb_exc_raise(rb_make_exception(3, excargs));
12604 }
12605 enc = rb_enc_from_index(idx);
12606 if (!rb_enc_asciicompat(enc)) {
12607 excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
12608 goto error;
12609 }
12610 parser->enc = enc;
12611 #ifndef RIPPER
12612 if (ruby_debug_lines) {
12613 long i, n = RARRAY_LEN(ruby_debug_lines);
12614 const VALUE *p = RARRAY_PTR(ruby_debug_lines);
12615 for (i = 0; i < n; ++i) {
12616 rb_enc_associate_index(*p, idx);
12617 }
12618 }
12619 #endif
12620 }
12621
12622 static int
12623 comment_at_top(struct parser_params *parser)
12624 {
12625 const char *p = lex_pbeg, *pend = lex_p - 1;
12626 if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
12627 while (p < pend) {
12628 if (!ISSPACE(*p)) return 0;
12629 p++;
12630 }
12631 return 1;
12632 }
12633
12634 #ifndef RIPPER
12635 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
12636 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
12637
12638 static void
12639 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
12640 {
12641 if (!comment_at_top(parser)) {
12642 return;
12643 }
12644 parser_set_encode(parser, val);
12645 }
12646
12647 static void
12648 parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
12649 {
12650 int *p = &parser->parser_token_info_enabled;
12651
12652 switch (*val) {
12653 case 't': case 'T':
12654 if (strcasecmp(val, "true") == 0) {
12655 *p = TRUE;
12656 return;
12657 }
12658 break;
12659 case 'f': case 'F':
12660 if (strcasecmp(val, "false") == 0) {
12661 *p = FALSE;
12662 return;
12663 }
12664 break;
12665 }
12666 rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val);
12667 }
12668
12669 struct magic_comment {
12670 const char *name;
12671 rb_magic_comment_setter_t func;
12672 rb_magic_comment_length_t length;
12673 };
12674
12675 static const struct magic_comment magic_comments[] = {
12676 {"coding", magic_comment_encoding, parser_encode_length},
12677 {"encoding", magic_comment_encoding, parser_encode_length},
12678 {"warn_indent", parser_set_token_info},
12679 };
12680 #endif
12681
12682 static const char *
12683 magic_comment_marker(const char *str, long len)
12684 {
12685 long i = 2;
12686
12687 while (i < len) {
12688 switch (str[i]) {
12689 case '-':
12690 if (str[i-1] == '*' && str[i-2] == '-') {
12691 return str + i + 1;
12692 }
12693 i += 2;
12694 break;
12695 case '*':
12696 if (i + 1 >= len) return 0;
12697 if (str[i+1] != '-') {
12698 i += 4;
12699 }
12700 else if (str[i-1] != '-') {
12701 i += 2;
12702 }
12703 else {
12704 return str + i + 2;
12705 }
12706 break;
12707 default:
12708 i += 3;
12709 break;
12710 }
12711 }
12712 return 0;
12713 }
12714
12715 static int
12716 parser_magic_comment(struct parser_params *parser, const char *str, long len)
12717 {
12718 VALUE name = 0, val = 0;
12719 const char *beg, *end, *vbeg, *vend;
12720 #define str_copy(_s, _p, _n) ((_s) \
12721 ? (void)(rb_str_resize((_s), (_n)), \
12722 MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
12723 : (void)((_s) = STR_NEW((_p), (_n))))
12724
12725 if (len <= 7) return FALSE;
12726 if (!(beg = magic_comment_marker(str, len))) return FALSE;
12727 if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
12728 str = beg;
12729 len = end - beg - 3;
12730
12731
12732 while (len > 0) {
12733 #ifndef RIPPER
12734 const struct magic_comment *p = magic_comments;
12735 #endif
12736 char *s;
12737 int i;
12738 long n = 0;
12739
12740 for (; len > 0 && *str; str++, --len) {
12741 switch (*str) {
12742 case '\'': case '"': case ':': case ';':
12743 continue;
12744 }
12745 if (!ISSPACE(*str)) break;
12746 }
12747 for (beg = str; len > 0; str++, --len) {
12748 switch (*str) {
12749 case '\'': case '"': case ':': case ';':
12750 break;
12751 default:
12752 if (ISSPACE(*str)) break;
12753 continue;
12754 }
12755 break;
12756 }
12757 for (end = str; len > 0 && ISSPACE(*str); str++, --len);
12758 if (!len) break;
12759 if (*str != ':') continue;
12760
12761 do str++; while (--len > 0 && ISSPACE(*str));
12762 if (!len) break;
12763 if (*str == '"') {
12764 for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
12765 if (*str == '\\') {
12766 --len;
12767 ++str;
12768 }
12769 }
12770 vend = str;
12771 if (len) {
12772 --len;
12773 ++str;
12774 }
12775 }
12776 else {
12777 for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
12778 vend = str;
12779 }
12780 while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
12781
12782 n = end - beg;
12783 str_copy(name, beg, n);
12784 s = RSTRING_PTR(name);
12785 for (i = 0; i < n; ++i) {
12786 if (s[i] == '-') s[i] = '_';
12787 }
12788 #ifndef RIPPER
12789 do {
12790 if (STRNCASECMP(p->name, s, n) == 0) {
12791 n = vend - vbeg;
12792 if (p->length) {
12793 n = (*p->length)(parser, vbeg, n);
12794 }
12795 str_copy(val, vbeg, n);
12796 (*p->func)(parser, s, RSTRING_PTR(val));
12797 break;
12798 }
12799 } while (++p < magic_comments + numberof(magic_comments));
12800 #else
12801 str_copy(val, vbeg, vend - vbeg);
12802 dispatch2(magic_comment, name, val);
12803 #endif
12804 }
12805
12806 return TRUE;
12807 }
12808
12809 static void
12810 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
12811 {
12812 int sep = 0;
12813 const char *beg = str;
12814 VALUE s;
12815
12816 for (;;) {
12817 if (send - str <= 6) return;
12818 switch (str[6]) {
12819 case 'C': case 'c': str += 6; continue;
12820 case 'O': case 'o': str += 5; continue;
12821 case 'D': case 'd': str += 4; continue;
12822 case 'I': case 'i': str += 3; continue;
12823 case 'N': case 'n': str += 2; continue;
12824 case 'G': case 'g': str += 1; continue;
12825 case '=': case ':':
12826 sep = 1;
12827 str += 6;
12828 break;
12829 default:
12830 str += 6;
12831 if (ISSPACE(*str)) break;
12832 continue;
12833 }
12834 if (STRNCASECMP(str-6, "coding", 6) == 0) break;
12835 }
12836 for (;;) {
12837 do {
12838 if (++str >= send) return;
12839 } while (ISSPACE(*str));
12840 if (sep) break;
12841 if (*str != '=' && *str != ':') return;
12842 sep = 1;
12843 str++;
12844 }
12845 beg = str;
12846 while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
12847 s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
12848 parser_set_encode(parser, RSTRING_PTR(s));
12849 rb_str_resize(s, 0);
12850 }
12851
12852 static void
12853 parser_prepare(struct parser_params *parser)
12854 {
12855 int c = nextc();
12856 switch (c) {
12857 case '#':
12858 if (peek('!')) parser->has_shebang = 1;
12859 break;
12860 case 0xef:
12861 if (lex_pend - lex_p >= 2 &&
12862 (unsigned char)lex_p[0] == 0xbb &&
12863 (unsigned char)lex_p[1] == 0xbf) {
12864 parser->enc = rb_utf8_encoding();
12865 lex_p += 2;
12866 lex_pbeg = lex_p;
12867 return;
12868 }
12869 break;
12870 case EOF:
12871 return;
12872 }
12873 pushback(c);
12874 parser->enc = rb_enc_get(lex_lastline);
12875 }
12876
12877 #define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG)
12878 #define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_ENDFN)
12879 #define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS)
12880 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
12881 #define IS_LABEL_POSSIBLE() ((lex_state == EXPR_BEG && !cmd_state) || IS_ARG())
12882 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1))
12883
12884 #ifndef RIPPER
12885 #define ambiguous_operator(op, syn) ( \
12886 rb_warning0("`"op"' after local variable is interpreted as binary operator"), \
12887 rb_warning0("even though it seems like "syn""))
12888 #else
12889 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
12890 #endif
12891 #define warn_balanced(op, syn) ((void) \
12892 (last_state != EXPR_CLASS && last_state != EXPR_DOT && \
12893 last_state != EXPR_FNAME && last_state != EXPR_ENDFN && \
12894 last_state != EXPR_ENDARG && \
12895 space_seen && !ISSPACE(c) && \
12896 (ambiguous_operator(op, syn), 0)))
12897
12898 static int
12899 parser_yylex(struct parser_params *parser)
12900 {
12901 register int c;
12902 int space_seen = 0;
12903 int cmd_state;
12904 enum lex_state_e last_state;
12905 rb_encoding *enc;
12906 int mb;
12907 #ifdef RIPPER
12908 int fallthru = FALSE;
12909 #endif
12910
12911 if (lex_strterm) {
12912 int token;
12913 if (nd_type(lex_strterm) == NODE_HEREDOC) {
12914 token = here_document(lex_strterm);
12915 if (token == tSTRING_END) {
12916 lex_strterm = 0;
12917 lex_state = EXPR_END;
12918 }
12919 }
12920 else {
12921 token = parse_string(lex_strterm);
12922 if (token == tSTRING_END || token == tREGEXP_END) {
12923 rb_gc_force_recycle((VALUE)lex_strterm);
12924 lex_strterm = 0;
12925 lex_state = EXPR_END;
12926 }
12927 }
12928 return token;
12929 }
12930 cmd_state = command_start;
12931 command_start = FALSE;
12932 retry:
12933 last_state = lex_state;
12934 switch (c = nextc()) {
12935 case '\0':
12936 case '\004':
12937 case '\032':
12938 case -1:
12939 return 0;
12940
12941
12942 case ' ': case '\t': case '\f': case '\r':
12943 case '\13':
12944 space_seen = 1;
12945 #ifdef RIPPER
12946 while ((c = nextc())) {
12947 switch (c) {
12948 case ' ': case '\t': case '\f': case '\r':
12949 case '\13':
12950 break;
12951 default:
12952 goto outofloop;
12953 }
12954 }
12955 outofloop:
12956 pushback(c);
12957 ripper_dispatch_scan_event(parser, tSP);
12958 #endif
12959 goto retry;
12960
12961 case '#':
12962
12963 if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
12964 if (comment_at_top(parser)) {
12965 set_file_encoding(parser, lex_p, lex_pend);
12966 }
12967 }
12968 lex_p = lex_pend;
12969 #ifdef RIPPER
12970 ripper_dispatch_scan_event(parser, tCOMMENT);
12971 fallthru = TRUE;
12972 #endif
12973
12974 case '\n':
12975 switch (lex_state) {
12976 case EXPR_BEG:
12977 case EXPR_FNAME:
12978 case EXPR_DOT:
12979 case EXPR_CLASS:
12980 case EXPR_VALUE:
12981 #ifdef RIPPER
12982 if (!fallthru) {
12983 ripper_dispatch_scan_event(parser, tIGNORED_NL);
12984 }
12985 fallthru = FALSE;
12986 #endif
12987 goto retry;
12988 default:
12989 break;
12990 }
12991 while ((c = nextc())) {
12992 switch (c) {
12993 case ' ': case '\t': case '\f': case '\r':
12994 case '\13':
12995 space_seen = 1;
12996 break;
12997 case '.': {
12998 if ((c = nextc()) != '.') {
12999 pushback(c);
13000 pushback('.');
13001 goto retry;
13002 }
13003 }
13004 default:
13005 --ruby_sourceline;
13006 lex_nextline = lex_lastline;
13007 case -1:
13008 lex_goto_eol(parser);
13009 #ifdef RIPPER
13010 if (c != -1) {
13011 parser->tokp = lex_p;
13012 }
13013 #endif
13014 goto normal_newline;
13015 }
13016 }
13017 normal_newline:
13018 command_start = TRUE;
13019 lex_state = EXPR_BEG;
13020 return '\n';
13021
13022 case '*':
13023 if ((c = nextc()) == '*') {
13024 if ((c = nextc()) == '=') {
13025 set_yylval_id(tPOW);
13026 lex_state = EXPR_BEG;
13027 return tOP_ASGN;
13028 }
13029 pushback(c);
13030 c = tPOW;
13031 }
13032 else {
13033 if (c == '=') {
13034 set_yylval_id('*');
13035 lex_state = EXPR_BEG;
13036 return tOP_ASGN;
13037 }
13038 pushback(c);
13039 if (IS_SPCARG(c)) {
13040 rb_warning0("`*' interpreted as argument prefix");
13041 c = tSTAR;
13042 }
13043 else if (IS_BEG()) {
13044 c = tSTAR;
13045 }
13046 else {
13047 warn_balanced("*", "argument prefix");
13048 c = '*';
13049 }
13050 }
13051 switch (lex_state) {
13052 case EXPR_FNAME: case EXPR_DOT:
13053 lex_state = EXPR_ARG; break;
13054 default:
13055 lex_state = EXPR_BEG; break;
13056 }
13057 return c;
13058
13059 case '!':
13060 c = nextc();
13061 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13062 lex_state = EXPR_ARG;
13063 if (c == '@') {
13064 return '!';
13065 }
13066 }
13067 else {
13068 lex_state = EXPR_BEG;
13069 }
13070 if (c == '=') {
13071 return tNEQ;
13072 }
13073 if (c == '~') {
13074 return tNMATCH;
13075 }
13076 pushback(c);
13077 return '!';
13078
13079 case '=':
13080 if (was_bol()) {
13081
13082 if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
13083 #ifdef RIPPER
13084 int first_p = TRUE;
13085
13086 lex_goto_eol(parser);
13087 ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
13088 #endif
13089 for (;;) {
13090 lex_goto_eol(parser);
13091 #ifdef RIPPER
13092 if (!first_p) {
13093 ripper_dispatch_scan_event(parser, tEMBDOC);
13094 }
13095 first_p = FALSE;
13096 #endif
13097 c = nextc();
13098 if (c == -1) {
13099 compile_error(PARSER_ARG "embedded document meets end of file");
13100 return 0;
13101 }
13102 if (c != '=') continue;
13103 if (strncmp(lex_p, "end", 3) == 0 &&
13104 (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
13105 break;
13106 }
13107 }
13108 lex_goto_eol(parser);
13109 #ifdef RIPPER
13110 ripper_dispatch_scan_event(parser, tEMBDOC_END);
13111 #endif
13112 goto retry;
13113 }
13114 }
13115
13116 switch (lex_state) {
13117 case EXPR_FNAME: case EXPR_DOT:
13118 lex_state = EXPR_ARG; break;
13119 default:
13120 lex_state = EXPR_BEG; break;
13121 }
13122 if ((c = nextc()) == '=') {
13123 if ((c = nextc()) == '=') {
13124 return tEQQ;
13125 }
13126 pushback(c);
13127 return tEQ;
13128 }
13129 if (c == '~') {
13130 return tMATCH;
13131 }
13132 else if (c == '>') {
13133 return tASSOC;
13134 }
13135 pushback(c);
13136 return '=';
13137
13138 case '<':
13139 last_state = lex_state;
13140 c = nextc();
13141 if (c == '<' &&
13142 lex_state != EXPR_DOT &&
13143 lex_state != EXPR_CLASS &&
13144 !IS_END() &&
13145 (!IS_ARG() || space_seen)) {
13146 int token = heredoc_identifier();
13147 if (token) return token;
13148 }
13149 switch (lex_state) {
13150 case EXPR_FNAME: case EXPR_DOT:
13151 lex_state = EXPR_ARG; break;
13152 default:
13153 lex_state = EXPR_BEG; break;
13154 }
13155 if (c == '=') {
13156 if ((c = nextc()) == '>') {
13157 return tCMP;
13158 }
13159 pushback(c);
13160 return tLEQ;
13161 }
13162 if (c == '<') {
13163 if ((c = nextc()) == '=') {
13164 set_yylval_id(tLSHFT);
13165 lex_state = EXPR_BEG;
13166 return tOP_ASGN;
13167 }
13168 pushback(c);
13169 warn_balanced("<<", "here document");
13170 return tLSHFT;
13171 }
13172 pushback(c);
13173 return '<';
13174
13175 case '>':
13176 switch (lex_state) {
13177 case EXPR_FNAME: case EXPR_DOT:
13178 lex_state = EXPR_ARG; break;
13179 default:
13180 lex_state = EXPR_BEG; break;
13181 }
13182 if ((c = nextc()) == '=') {
13183 return tGEQ;
13184 }
13185 if (c == '>') {
13186 if ((c = nextc()) == '=') {
13187 set_yylval_id(tRSHFT);
13188 lex_state = EXPR_BEG;
13189 return tOP_ASGN;
13190 }
13191 pushback(c);
13192 return tRSHFT;
13193 }
13194 pushback(c);
13195 return '>';
13196
13197 case '"':
13198 lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
13199 return tSTRING_BEG;
13200
13201 case '`':
13202 if (lex_state == EXPR_FNAME) {
13203 lex_state = EXPR_ENDFN;
13204 return c;
13205 }
13206 if (lex_state == EXPR_DOT) {
13207 if (cmd_state)
13208 lex_state = EXPR_CMDARG;
13209 else
13210 lex_state = EXPR_ARG;
13211 return c;
13212 }
13213 lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
13214 return tXSTRING_BEG;
13215
13216 case '\'':
13217 lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
13218 return tSTRING_BEG;
13219
13220 case '?':
13221 if (IS_END()) {
13222 lex_state = EXPR_VALUE;
13223 return '?';
13224 }
13225 c = nextc();
13226 if (c == -1) {
13227 compile_error(PARSER_ARG "incomplete character syntax");
13228 return 0;
13229 }
13230 if (rb_enc_isspace(c, parser->enc)) {
13231 if (!IS_ARG()) {
13232 int c2 = 0;
13233 switch (c) {
13234 case ' ':
13235 c2 = 's';
13236 break;
13237 case '\n':
13238 c2 = 'n';
13239 break;
13240 case '\t':
13241 c2 = 't';
13242 break;
13243 case '\v':
13244 c2 = 'v';
13245 break;
13246 case '\r':
13247 c2 = 'r';
13248 break;
13249 case '\f':
13250 c2 = 'f';
13251 break;
13252 }
13253 if (c2) {
13254 rb_warnI("invalid character syntax; use ?\\%c", c2);
13255 }
13256 }
13257 ternary:
13258 pushback(c);
13259 lex_state = EXPR_VALUE;
13260 return '?';
13261 }
13262 newtok();
13263 enc = parser->enc;
13264 if (!parser_isascii()) {
13265 if (tokadd_mbchar(c) == -1) return 0;
13266 }
13267 else if ((rb_enc_isalnum(c, parser->enc) || c == '_') &&
13268 lex_p < lex_pend && is_identchar(lex_p, lex_pend, parser->enc)) {
13269 goto ternary;
13270 }
13271 else if (c == '\\') {
13272 if (peek('u')) {
13273 nextc();
13274 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
13275 if (0x80 <= c) {
13276 tokaddmbc(c, enc);
13277 }
13278 else {
13279 tokadd(c);
13280 }
13281 }
13282 else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) {
13283 nextc();
13284 if (tokadd_mbchar(c) == -1) return 0;
13285 }
13286 else {
13287 c = read_escape(0, &enc);
13288 tokadd(c);
13289 }
13290 }
13291 else {
13292 tokadd(c);
13293 }
13294 tokfix();
13295 set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
13296 lex_state = EXPR_END;
13297 return tCHAR;
13298
13299 case '&':
13300 if ((c = nextc()) == '&') {
13301 lex_state = EXPR_BEG;
13302 if ((c = nextc()) == '=') {
13303 set_yylval_id(tANDOP);
13304 lex_state = EXPR_BEG;
13305 return tOP_ASGN;
13306 }
13307 pushback(c);
13308 return tANDOP;
13309 }
13310 else if (c == '=') {
13311 set_yylval_id('&');
13312 lex_state = EXPR_BEG;
13313 return tOP_ASGN;
13314 }
13315 pushback(c);
13316 if (IS_SPCARG(c)) {
13317 rb_warning0("`&' interpreted as argument prefix");
13318 c = tAMPER;
13319 }
13320 else if (IS_BEG()) {
13321 c = tAMPER;
13322 }
13323 else {
13324 warn_balanced("&", "argument prefix");
13325 c = '&';
13326 }
13327 switch (lex_state) {
13328 case EXPR_FNAME: case EXPR_DOT:
13329 lex_state = EXPR_ARG; break;
13330 default:
13331 lex_state = EXPR_BEG;
13332 }
13333 return c;
13334
13335 case '|':
13336 if ((c = nextc()) == '|') {
13337 lex_state = EXPR_BEG;
13338 if ((c = nextc()) == '=') {
13339 set_yylval_id(tOROP);
13340 lex_state = EXPR_BEG;
13341 return tOP_ASGN;
13342 }
13343 pushback(c);
13344 return tOROP;
13345 }
13346 if (c == '=') {
13347 set_yylval_id('|');
13348 lex_state = EXPR_BEG;
13349 return tOP_ASGN;
13350 }
13351 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13352 lex_state = EXPR_ARG;
13353 }
13354 else {
13355 lex_state = EXPR_BEG;
13356 }
13357 pushback(c);
13358 return '|';
13359
13360 case '+':
13361 c = nextc();
13362 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13363 lex_state = EXPR_ARG;
13364 if (c == '@') {
13365 return tUPLUS;
13366 }
13367 pushback(c);
13368 return '+';
13369 }
13370 if (c == '=') {
13371 set_yylval_id('+');
13372 lex_state = EXPR_BEG;
13373 return tOP_ASGN;
13374 }
13375 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13376 lex_state = EXPR_BEG;
13377 pushback(c);
13378 if (c != -1 && ISDIGIT(c)) {
13379 c = '+';
13380 goto start_num;
13381 }
13382 return tUPLUS;
13383 }
13384 lex_state = EXPR_BEG;
13385 pushback(c);
13386 warn_balanced("+", "unary operator");
13387 return '+';
13388
13389 case '-':
13390 c = nextc();
13391 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13392 lex_state = EXPR_ARG;
13393 if (c == '@') {
13394 return tUMINUS;
13395 }
13396 pushback(c);
13397 return '-';
13398 }
13399 if (c == '=') {
13400 set_yylval_id('-');
13401 lex_state = EXPR_BEG;
13402 return tOP_ASGN;
13403 }
13404 if (c == '>') {
13405 lex_state = EXPR_ARG;
13406 return tLAMBDA;
13407 }
13408 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13409 lex_state = EXPR_BEG;
13410 pushback(c);
13411 if (c != -1 && ISDIGIT(c)) {
13412 return tUMINUS_NUM;
13413 }
13414 return tUMINUS;
13415 }
13416 lex_state = EXPR_BEG;
13417 pushback(c);
13418 warn_balanced("-", "unary operator");
13419 return '-';
13420
13421 case '.':
13422 lex_state = EXPR_BEG;
13423 if ((c = nextc()) == '.') {
13424 if ((c = nextc()) == '.') {
13425 return tDOT3;
13426 }
13427 pushback(c);
13428 return tDOT2;
13429 }
13430 pushback(c);
13431 if (c != -1 && ISDIGIT(c)) {
13432 yyerror("no .<digit> floating literal anymore; put 0 before dot");
13433 }
13434 lex_state = EXPR_DOT;
13435 return '.';
13436
13437 start_num:
13438 case '0': case '1': case '2': case '3': case '4':
13439 case '5': case '6': case '7': case '8': case '9':
13440 {
13441 int is_float, seen_point, seen_e, nondigit;
13442
13443 is_float = seen_point = seen_e = nondigit = 0;
13444 lex_state = EXPR_END;
13445 newtok();
13446 if (c == '-' || c == '+') {
13447 tokadd(c);
13448 c = nextc();
13449 }
13450 if (c == '0') {
13451 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13452 int start = toklen();
13453 c = nextc();
13454 if (c == 'x' || c == 'X') {
13455
13456 c = nextc();
13457 if (c != -1 && ISXDIGIT(c)) {
13458 do {
13459 if (c == '_') {
13460 if (nondigit) break;
13461 nondigit = c;
13462 continue;
13463 }
13464 if (!ISXDIGIT(c)) break;
13465 nondigit = 0;
13466 tokadd(c);
13467 } while ((c = nextc()) != -1);
13468 }
13469 pushback(c);
13470 tokfix();
13471 if (toklen() == start) {
13472 no_digits();
13473 }
13474 else if (nondigit) goto trailing_uc;
13475 set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE));
13476 return tINTEGER;
13477 }
13478 if (c == 'b' || c == 'B') {
13479
13480 c = nextc();
13481 if (c == '0' || c == '1') {
13482 do {
13483 if (c == '_') {
13484 if (nondigit) break;
13485 nondigit = c;
13486 continue;
13487 }
13488 if (c != '0' && c != '1') break;
13489 nondigit = 0;
13490 tokadd(c);
13491 } while ((c = nextc()) != -1);
13492 }
13493 pushback(c);
13494 tokfix();
13495 if (toklen() == start) {
13496 no_digits();
13497 }
13498 else if (nondigit) goto trailing_uc;
13499 set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE));
13500 return tINTEGER;
13501 }
13502 if (c == 'd' || c == 'D') {
13503
13504 c = nextc();
13505 if (c != -1 && ISDIGIT(c)) {
13506 do {
13507 if (c == '_') {
13508 if (nondigit) break;
13509 nondigit = c;
13510 continue;
13511 }
13512 if (!ISDIGIT(c)) break;
13513 nondigit = 0;
13514 tokadd(c);
13515 } while ((c = nextc()) != -1);
13516 }
13517 pushback(c);
13518 tokfix();
13519 if (toklen() == start) {
13520 no_digits();
13521 }
13522 else if (nondigit) goto trailing_uc;
13523 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13524 return tINTEGER;
13525 }
13526 if (c == '_') {
13527
13528 goto octal_number;
13529 }
13530 if (c == 'o' || c == 'O') {
13531
13532 c = nextc();
13533 if (c == -1 || c == '_' || !ISDIGIT(c)) {
13534 no_digits();
13535 }
13536 }
13537 if (c >= '0' && c <= '7') {
13538
13539 octal_number:
13540 do {
13541 if (c == '_') {
13542 if (nondigit) break;
13543 nondigit = c;
13544 continue;
13545 }
13546 if (c < '0' || c > '9') break;
13547 if (c > '7') goto invalid_octal;
13548 nondigit = 0;
13549 tokadd(c);
13550 } while ((c = nextc()) != -1);
13551 if (toklen() > start) {
13552 pushback(c);
13553 tokfix();
13554 if (nondigit) goto trailing_uc;
13555 set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE));
13556 return tINTEGER;
13557 }
13558 if (nondigit) {
13559 pushback(c);
13560 goto trailing_uc;
13561 }
13562 }
13563 if (c > '7' && c <= '9') {
13564 invalid_octal:
13565 yyerror("Invalid octal digit");
13566 }
13567 else if (c == '.' || c == 'e' || c == 'E') {
13568 tokadd('0');
13569 }
13570 else {
13571 pushback(c);
13572 set_yylval_literal(INT2FIX(0));
13573 return tINTEGER;
13574 }
13575 }
13576
13577 for (;;) {
13578 switch (c) {
13579 case '0': case '1': case '2': case '3': case '4':
13580 case '5': case '6': case '7': case '8': case '9':
13581 nondigit = 0;
13582 tokadd(c);
13583 break;
13584
13585 case '.':
13586 if (nondigit) goto trailing_uc;
13587 if (seen_point || seen_e) {
13588 goto decode_num;
13589 }
13590 else {
13591 int c0 = nextc();
13592 if (c0 == -1 || !ISDIGIT(c0)) {
13593 pushback(c0);
13594 goto decode_num;
13595 }
13596 c = c0;
13597 }
13598 tokadd('.');
13599 tokadd(c);
13600 is_float++;
13601 seen_point++;
13602 nondigit = 0;
13603 break;
13604
13605 case 'e':
13606 case 'E':
13607 if (nondigit) {
13608 pushback(c);
13609 c = nondigit;
13610 goto decode_num;
13611 }
13612 if (seen_e) {
13613 goto decode_num;
13614 }
13615 tokadd(c);
13616 seen_e++;
13617 is_float++;
13618 nondigit = c;
13619 c = nextc();
13620 if (c != '-' && c != '+') continue;
13621 tokadd(c);
13622 nondigit = c;
13623 break;
13624
13625 case '_':
13626 if (nondigit) goto decode_num;
13627 nondigit = c;
13628 break;
13629
13630 default:
13631 goto decode_num;
13632 }
13633 c = nextc();
13634 }
13635
13636 decode_num:
13637 pushback(c);
13638 if (nondigit) {
13639 char tmp[30];
13640 trailing_uc:
13641 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
13642 yyerror(tmp);
13643 }
13644 tokfix();
13645 if (is_float) {
13646 double d = strtod(tok(), 0);
13647 if (errno == ERANGE) {
13648 rb_warningS("Float %s out of range", tok());
13649 errno = 0;
13650 }
13651 set_yylval_literal(DBL2NUM(d));
13652 return tFLOAT;
13653 }
13654 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13655 return tINTEGER;
13656 }
13657
13658 case ')':
13659 case ']':
13660 paren_nest--;
13661 case '}':
13662 COND_LEXPOP();
13663 CMDARG_LEXPOP();
13664 if (c == ')')
13665 lex_state = EXPR_ENDFN;
13666 else
13667 lex_state = EXPR_ENDARG;
13668 return c;
13669
13670 case ':':
13671 c = nextc();
13672 if (c == ':') {
13673 if (IS_BEG() || lex_state == EXPR_CLASS || IS_SPCARG(-1)) {
13674 lex_state = EXPR_BEG;
13675 return tCOLON3;
13676 }
13677 lex_state = EXPR_DOT;
13678 return tCOLON2;
13679 }
13680 if (IS_END() || ISSPACE(c)) {
13681 pushback(c);
13682 warn_balanced(":", "symbol literal");
13683 lex_state = EXPR_BEG;
13684 return ':';
13685 }
13686 switch (c) {
13687 case '\'':
13688 lex_strterm = NEW_STRTERM(str_ssym, c, 0);
13689 break;
13690 case '"':
13691 lex_strterm = NEW_STRTERM(str_dsym, c, 0);
13692 break;
13693 default:
13694 pushback(c);
13695 break;
13696 }
13697 lex_state = EXPR_FNAME;
13698 return tSYMBEG;
13699
13700 case '/':
13701 if (IS_BEG()) {
13702 lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13703 return tREGEXP_BEG;
13704 }
13705 if ((c = nextc()) == '=') {
13706 set_yylval_id('/');
13707 lex_state = EXPR_BEG;
13708 return tOP_ASGN;
13709 }
13710 pushback(c);
13711 if (IS_SPCARG(c)) {
13712 (void)arg_ambiguous();
13713 lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13714 return tREGEXP_BEG;
13715 }
13716 switch (lex_state) {
13717 case EXPR_FNAME: case EXPR_DOT:
13718 lex_state = EXPR_ARG; break;
13719 default:
13720 lex_state = EXPR_BEG; break;
13721 }
13722 warn_balanced("/", "regexp literal");
13723 return '/';
13724
13725 case '^':
13726 if ((c = nextc()) == '=') {
13727 set_yylval_id('^');
13728 lex_state = EXPR_BEG;
13729 return tOP_ASGN;
13730 }
13731 switch (lex_state) {
13732 case EXPR_FNAME: case EXPR_DOT:
13733 lex_state = EXPR_ARG; break;
13734 default:
13735 lex_state = EXPR_BEG; break;
13736 }
13737 pushback(c);
13738 return '^';
13739
13740 case ';':
13741 lex_state = EXPR_BEG;
13742 command_start = TRUE;
13743 return ';';
13744
13745 case ',':
13746 lex_state = EXPR_BEG;
13747 return ',';
13748
13749 case '~':
13750 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13751 if ((c = nextc()) != '@') {
13752 pushback(c);
13753 }
13754 lex_state = EXPR_ARG;
13755 }
13756 else {
13757 lex_state = EXPR_BEG;
13758 }
13759 return '~';
13760
13761 case '(':
13762 if (IS_BEG()) {
13763 c = tLPAREN;
13764 }
13765 else if (IS_SPCARG(-1)) {
13766 c = tLPAREN_ARG;
13767 }
13768 paren_nest++;
13769 COND_PUSH(0);
13770 CMDARG_PUSH(0);
13771 lex_state = EXPR_BEG;
13772 return c;
13773
13774 case '[':
13775 paren_nest++;
13776 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13777 lex_state = EXPR_ARG;
13778 if ((c = nextc()) == ']') {
13779 if ((c = nextc()) == '=') {
13780 return tASET;
13781 }
13782 pushback(c);
13783 return tAREF;
13784 }
13785 pushback(c);
13786 return '[';
13787 }
13788 else if (IS_BEG()) {
13789 c = tLBRACK;
13790 }
13791 else if (IS_ARG() && space_seen) {
13792 c = tLBRACK;
13793 }
13794 lex_state = EXPR_BEG;
13795 COND_PUSH(0);
13796 CMDARG_PUSH(0);
13797 return c;
13798
13799 case '{':
13800 if (lpar_beg && lpar_beg == paren_nest) {
13801 lex_state = EXPR_BEG;
13802 lpar_beg = 0;
13803 --paren_nest;
13804 COND_PUSH(0);
13805 CMDARG_PUSH(0);
13806 return tLAMBEG;
13807 }
13808 if (IS_ARG() || lex_state == EXPR_END || lex_state == EXPR_ENDFN)
13809 c = '{';
13810 else if (lex_state == EXPR_ENDARG)
13811 c = tLBRACE_ARG;
13812 else
13813 c = tLBRACE;
13814 COND_PUSH(0);
13815 CMDARG_PUSH(0);
13816 lex_state = EXPR_BEG;
13817 if (c != tLBRACE) command_start = TRUE;
13818 return c;
13819
13820 case '\\':
13821 c = nextc();
13822 if (c == '\n') {
13823 space_seen = 1;
13824 #ifdef RIPPER
13825 ripper_dispatch_scan_event(parser, tSP);
13826 #endif
13827 goto retry;
13828 }
13829 pushback(c);
13830 return '\\';
13831
13832 case '%':
13833 if (IS_BEG()) {
13834 int term;
13835 int paren;
13836
13837 c = nextc();
13838 quotation:
13839 if (c == -1 || !ISALNUM(c)) {
13840 term = c;
13841 c = 'Q';
13842 }
13843 else {
13844 term = nextc();
13845 if (rb_enc_isalnum(term, parser->enc) || !parser_isascii()) {
13846 yyerror("unknown type of %string");
13847 return 0;
13848 }
13849 }
13850 if (c == -1 || term == -1) {
13851 compile_error(PARSER_ARG "unterminated quoted string meets end of file");
13852 return 0;
13853 }
13854 paren = term;
13855 if (term == '(') term = ')';
13856 else if (term == '[') term = ']';
13857 else if (term == '{') term = '}';
13858 else if (term == '<') term = '>';
13859 else paren = 0;
13860
13861 switch (c) {
13862 case 'Q':
13863 lex_strterm = NEW_STRTERM(str_dquote, term, paren);
13864 return tSTRING_BEG;
13865
13866 case 'q':
13867 lex_strterm = NEW_STRTERM(str_squote, term, paren);
13868 return tSTRING_BEG;
13869
13870 case 'W':
13871 lex_strterm = NEW_STRTERM(str_dword, term, paren);
13872 do {c = nextc();} while (ISSPACE(c));
13873 pushback(c);
13874 return tWORDS_BEG;
13875
13876 case 'w':
13877 lex_strterm = NEW_STRTERM(str_sword, term, paren);
13878 do {c = nextc();} while (ISSPACE(c));
13879 pushback(c);
13880 return tQWORDS_BEG;
13881
13882 case 'x':
13883 lex_strterm = NEW_STRTERM(str_xquote, term, paren);
13884 return tXSTRING_BEG;
13885
13886 case 'r':
13887 lex_strterm = NEW_STRTERM(str_regexp, term, paren);
13888 return tREGEXP_BEG;
13889
13890 case 's':
13891 lex_strterm = NEW_STRTERM(str_ssym, term, paren);
13892 lex_state = EXPR_FNAME;
13893 return tSYMBEG;
13894
13895 default:
13896 yyerror("unknown type of %string");
13897 return 0;
13898 }
13899 }
13900 if ((c = nextc()) == '=') {
13901 set_yylval_id('%');
13902 lex_state = EXPR_BEG;
13903 return tOP_ASGN;
13904 }
13905 if (IS_SPCARG(c)) {
13906 goto quotation;
13907 }
13908 switch (lex_state) {
13909 case EXPR_FNAME: case EXPR_DOT:
13910 lex_state = EXPR_ARG; break;
13911 default:
13912 lex_state = EXPR_BEG; break;
13913 }
13914 pushback(c);
13915 warn_balanced("%%", "string literal");
13916 return '%';
13917
13918 case '$':
13919 lex_state = EXPR_END;
13920 newtok();
13921 c = nextc();
13922 switch (c) {
13923 case '_':
13924 c = nextc();
13925 if (parser_is_identchar()) {
13926 tokadd('$');
13927 tokadd('_');
13928 break;
13929 }
13930 pushback(c);
13931 c = '_';
13932
13933 case '~':
13934 case '*':
13935 case '$':
13936 case '?':
13937 case '!':
13938 case '@':
13939 case '/':
13940 case '\\':
13941 case ';':
13942 case ',':
13943 case '.':
13944 case '=':
13945 case ':':
13946 case '<':
13947 case '>':
13948 case '\"':
13949 tokadd('$');
13950 tokadd(c);
13951 tokfix();
13952 set_yylval_name(rb_intern(tok()));
13953 return tGVAR;
13954
13955 case '-':
13956 tokadd('$');
13957 tokadd(c);
13958 c = nextc();
13959 if (parser_is_identchar()) {
13960 if (tokadd_mbchar(c) == -1) return 0;
13961 }
13962 else {
13963 pushback(c);
13964 }
13965 gvar:
13966 tokfix();
13967 set_yylval_name(rb_intern(tok()));
13968 return tGVAR;
13969
13970 case '&':
13971 case '`':
13972 case '\'':
13973 case '+':
13974 if (last_state == EXPR_FNAME) {
13975 tokadd('$');
13976 tokadd(c);
13977 goto gvar;
13978 }
13979 set_yylval_node(NEW_BACK_REF(c));
13980 return tBACK_REF;
13981
13982 case '1': case '2': case '3':
13983 case '4': case '5': case '6':
13984 case '7': case '8': case '9':
13985 tokadd('$');
13986 do {
13987 tokadd(c);
13988 c = nextc();
13989 } while (c != -1 && ISDIGIT(c));
13990 pushback(c);
13991 if (last_state == EXPR_FNAME) goto gvar;
13992 tokfix();
13993 set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
13994 return tNTH_REF;
13995
13996 default:
13997 if (!parser_is_identchar()) {
13998 pushback(c);
13999 compile_error(PARSER_ARG "`$%c' is not allowed as a global variable name", c);
14000 return 0;
14001 }
14002 case '0':
14003 tokadd('$');
14004 }
14005 break;
14006
14007 case '@':
14008 c = nextc();
14009 newtok();
14010 tokadd('@');
14011 if (c == '@') {
14012 tokadd('@');
14013 c = nextc();
14014 }
14015 if (c != -1 && (ISDIGIT(c) || !parser_is_identchar())) {
14016 pushback(c);
14017 if (tokidx == 1) {
14018 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
14019 }
14020 else {
14021 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
14022 }
14023 return 0;
14024 }
14025 break;
14026
14027 case '_':
14028 if (was_bol() && whole_match_p("__END__", 7, 0)) {
14029 ruby__end__seen = 1;
14030 parser->eofp = Qtrue;
14031 #ifndef RIPPER
14032 return -1;
14033 #else
14034 lex_goto_eol(parser);
14035 ripper_dispatch_scan_event(parser, k__END__);
14036 return 0;
14037 #endif
14038 }
14039 newtok();
14040 break;
14041
14042 default:
14043 if (!parser_is_identchar()) {
14044 rb_compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c);
14045 goto retry;
14046 }
14047
14048 newtok();
14049 break;
14050 }
14051
14052 mb = ENC_CODERANGE_7BIT;
14053 do {
14054 if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
14055 if (tokadd_mbchar(c) == -1) return 0;
14056 c = nextc();
14057 } while (parser_is_identchar());
14058 switch (tok()[0]) {
14059 case '@': case '$':
14060 pushback(c);
14061 break;
14062 default:
14063 if ((c == '!' || c == '?') && !peek('=')) {
14064 tokadd(c);
14065 }
14066 else {
14067 pushback(c);
14068 }
14069 }
14070 tokfix();
14071
14072 {
14073 int result = 0;
14074
14075 last_state = lex_state;
14076 switch (tok()[0]) {
14077 case '$':
14078 lex_state = EXPR_END;
14079 result = tGVAR;
14080 break;
14081 case '@':
14082 lex_state = EXPR_END;
14083 if (tok()[1] == '@')
14084 result = tCVAR;
14085 else
14086 result = tIVAR;
14087 break;
14088
14089 default:
14090 if (toklast() == '!' || toklast() == '?') {
14091 result = tFID;
14092 }
14093 else {
14094 if (lex_state == EXPR_FNAME) {
14095 if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
14096 (!peek('=') || (peek_n('>', 1)))) {
14097 result = tIDENTIFIER;
14098 tokadd(c);
14099 tokfix();
14100 }
14101 else {
14102 pushback(c);
14103 }
14104 }
14105 if (result == 0 && ISUPPER(tok()[0])) {
14106 result = tCONSTANT;
14107 }
14108 else {
14109 result = tIDENTIFIER;
14110 }
14111 }
14112
14113 if (IS_LABEL_POSSIBLE()) {
14114 if (IS_LABEL_SUFFIX(0)) {
14115 lex_state = EXPR_BEG;
14116 nextc();
14117 set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb)));
14118 return tLABEL;
14119 }
14120 }
14121 if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) {
14122 const struct kwtable *kw;
14123
14124
14125 kw = rb_reserved_word(tok(), toklen());
14126 if (kw) {
14127 enum lex_state_e state = lex_state;
14128 lex_state = kw->state;
14129 if (state == EXPR_FNAME) {
14130 set_yylval_name(rb_intern(kw->name));
14131 return kw->id[0];
14132 }
14133 if (kw->id[0] == keyword_do) {
14134 command_start = TRUE;
14135 if (lpar_beg && lpar_beg == paren_nest) {
14136 lpar_beg = 0;
14137 --paren_nest;
14138 return keyword_do_LAMBDA;
14139 }
14140 if (COND_P()) return keyword_do_cond;
14141 if (CMDARG_P() && state != EXPR_CMDARG)
14142 return keyword_do_block;
14143 if (state == EXPR_ENDARG || state == EXPR_BEG)
14144 return keyword_do_block;
14145 return keyword_do;
14146 }
14147 if (state == EXPR_BEG || state == EXPR_VALUE)
14148 return kw->id[0];
14149 else {
14150 if (kw->id[0] != kw->id[1])
14151 lex_state = EXPR_BEG;
14152 return kw->id[1];
14153 }
14154 }
14155 }
14156
14157 if (IS_BEG() ||
14158 lex_state == EXPR_DOT ||
14159 IS_ARG()) {
14160 if (cmd_state) {
14161 lex_state = EXPR_CMDARG;
14162 }
14163 else {
14164 lex_state = EXPR_ARG;
14165 }
14166 }
14167 else if (lex_state == EXPR_FNAME) {
14168 lex_state = EXPR_ENDFN;
14169 }
14170 else {
14171 lex_state = EXPR_END;
14172 }
14173 }
14174 {
14175 ID ident = TOK_INTERN(!ENC_SINGLE(mb));
14176
14177 set_yylval_name(ident);
14178 if (last_state != EXPR_DOT && last_state != EXPR_FNAME &&
14179 is_local_id(ident) && lvar_defined(ident)) {
14180 lex_state = EXPR_END;
14181 }
14182 }
14183 return result;
14184 }
14185 }
14186
14187 #if YYPURE
14188 static int
14189 yylex(void *lval, void *p)
14190 #else
14191 yylex(void *p)
14192 #endif
14193 {
14194 struct parser_params *parser = (struct parser_params*)p;
14195 int t;
14196
14197 #if YYPURE
14198 parser->parser_yylval = lval;
14199 parser->parser_yylval->val = Qundef;
14200 #endif
14201 t = parser_yylex(parser);
14202 #ifdef RIPPER
14203 if (!NIL_P(parser->delayed)) {
14204 ripper_dispatch_delayed_token(parser, t);
14205 return t;
14206 }
14207 if (t != 0)
14208 ripper_dispatch_scan_event(parser, t);
14209 #endif
14210
14211 return t;
14212 }
14213
14214 #ifndef RIPPER
14215 static NODE*
14216 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
14217 {
14218 NODE *n = (rb_node_newnode)(type, a0, a1, a2);
14219 nd_set_line(n, ruby_sourceline);
14220 return n;
14221 }
14222
14223 enum node_type
14224 nodetype(NODE *node)
14225 {
14226 return (enum node_type)nd_type(node);
14227 }
14228
14229 int
14230 nodeline(NODE *node)
14231 {
14232 return nd_line(node);
14233 }
14234
14235 static NODE*
14236 newline_node(NODE *node)
14237 {
14238 if (node) {
14239 node = remove_begin(node);
14240 node->flags |= NODE_FL_NEWLINE;
14241 }
14242 return node;
14243 }
14244
14245 static void
14246 fixpos(NODE *node, NODE *orig)
14247 {
14248 if (!node) return;
14249 if (!orig) return;
14250 if (orig == (NODE*)1) return;
14251 nd_set_line(node, nd_line(orig));
14252 }
14253
14254 static void
14255 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
14256 {
14257 rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
14258 }
14259 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg))
14260
14261 static void
14262 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
14263 {
14264 rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
14265 }
14266 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg))
14267
14268 static NODE*
14269 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
14270 {
14271 NODE *end, *h = head, *nd;
14272
14273 if (tail == 0) return head;
14274
14275 if (h == 0) return tail;
14276 switch (nd_type(h)) {
14277 case NODE_LIT:
14278 case NODE_STR:
14279 case NODE_SELF:
14280 case NODE_TRUE:
14281 case NODE_FALSE:
14282 case NODE_NIL:
14283 parser_warning(h, "unused literal ignored");
14284 return tail;
14285 default:
14286 h = end = NEW_BLOCK(head);
14287 end->nd_end = end;
14288 fixpos(end, head);
14289 head = end;
14290 break;
14291 case NODE_BLOCK:
14292 end = h->nd_end;
14293 break;
14294 }
14295
14296 nd = end->nd_head;
14297 switch (nd_type(nd)) {
14298 case NODE_RETURN:
14299 case NODE_BREAK:
14300 case NODE_NEXT:
14301 case NODE_REDO:
14302 case NODE_RETRY:
14303 if (RTEST(ruby_verbose)) {
14304 parser_warning(nd, "statement not reached");
14305 }
14306 break;
14307
14308 default:
14309 break;
14310 }
14311
14312 if (nd_type(tail) != NODE_BLOCK) {
14313 tail = NEW_BLOCK(tail);
14314 tail->nd_end = tail;
14315 }
14316 end->nd_next = tail;
14317 h->nd_end = tail->nd_end;
14318 return head;
14319 }
14320
14321
14322 static NODE*
14323 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
14324 {
14325 NODE *last;
14326
14327 if (list == 0) return NEW_LIST(item);
14328 if (list->nd_next) {
14329 last = list->nd_next->nd_end;
14330 }
14331 else {
14332 last = list;
14333 }
14334
14335 list->nd_alen += 1;
14336 last->nd_next = NEW_LIST(item);
14337 list->nd_next->nd_end = last->nd_next;
14338 return list;
14339 }
14340
14341
14342 static NODE*
14343 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14344 {
14345 NODE *last;
14346
14347 if (head->nd_next) {
14348 last = head->nd_next->nd_end;
14349 }
14350 else {
14351 last = head;
14352 }
14353
14354 head->nd_alen += tail->nd_alen;
14355 last->nd_next = tail;
14356 if (tail->nd_next) {
14357 head->nd_next->nd_end = tail->nd_next->nd_end;
14358 }
14359 else {
14360 head->nd_next->nd_end = tail;
14361 }
14362
14363 return head;
14364 }
14365
14366 static int
14367 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
14368 {
14369 if (NIL_P(tail)) return 1;
14370 if (!rb_enc_compatible(head, tail)) {
14371 compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
14372 rb_enc_name(rb_enc_get(head)),
14373 rb_enc_name(rb_enc_get(tail)));
14374 rb_str_resize(head, 0);
14375 rb_str_resize(tail, 0);
14376 return 0;
14377 }
14378 rb_str_buf_append(head, tail);
14379 return 1;
14380 }
14381
14382
14383 static NODE *
14384 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14385 {
14386 enum node_type htype;
14387
14388 if (!head) return tail;
14389 if (!tail) return head;
14390
14391 htype = nd_type(head);
14392 if (htype == NODE_EVSTR) {
14393 NODE *node = NEW_DSTR(Qnil);
14394 head = list_append(node, head);
14395 }
14396 switch (nd_type(tail)) {
14397 case NODE_STR:
14398 if (htype == NODE_STR) {
14399 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) {
14400 error:
14401 rb_gc_force_recycle((VALUE)head);
14402 rb_gc_force_recycle((VALUE)tail);
14403 return 0;
14404 }
14405 rb_gc_force_recycle((VALUE)tail);
14406 }
14407 else {
14408 list_append(head, tail);
14409 }
14410 break;
14411
14412 case NODE_DSTR:
14413 if (htype == NODE_STR) {
14414 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
14415 goto error;
14416 tail->nd_lit = head->nd_lit;
14417 rb_gc_force_recycle((VALUE)head);
14418 head = tail;
14419 }
14420 else if (NIL_P(tail->nd_lit)) {
14421 head->nd_alen += tail->nd_alen - 1;
14422 head->nd_next->nd_end->nd_next = tail->nd_next;
14423 head->nd_next->nd_end = tail->nd_next->nd_end;
14424 rb_gc_force_recycle((VALUE)tail);
14425 }
14426 else {
14427 nd_set_type(tail, NODE_ARRAY);
14428 tail->nd_head = NEW_STR(tail->nd_lit);
14429 list_concat(head, tail);
14430 }
14431 break;
14432
14433 case NODE_EVSTR:
14434 if (htype == NODE_STR) {
14435 nd_set_type(head, NODE_DSTR);
14436 head->nd_alen = 1;
14437 }
14438 list_append(head, tail);
14439 break;
14440 }
14441 return head;
14442 }
14443
14444 static NODE *
14445 evstr2dstr_gen(struct parser_params *parser, NODE *node)
14446 {
14447 if (nd_type(node) == NODE_EVSTR) {
14448 node = list_append(NEW_DSTR(Qnil), node);
14449 }
14450 return node;
14451 }
14452
14453 static NODE *
14454 new_evstr_gen(struct parser_params *parser, NODE *node)
14455 {
14456 NODE *head = node;
14457
14458 if (node) {
14459 switch (nd_type(node)) {
14460 case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
14461 return node;
14462 }
14463 }
14464 return NEW_EVSTR(head);
14465 }
14466
14467 static NODE *
14468 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
14469 {
14470 value_expr(recv);
14471 value_expr(arg1);
14472 return NEW_CALL(recv, id, NEW_LIST(arg1));
14473 }
14474
14475 static NODE *
14476 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
14477 {
14478 value_expr(recv);
14479 return NEW_CALL(recv, id, 0);
14480 }
14481
14482 static NODE*
14483 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14484 {
14485 value_expr(node1);
14486 value_expr(node2);
14487 if (node1) {
14488 switch (nd_type(node1)) {
14489 case NODE_DREGX:
14490 case NODE_DREGX_ONCE:
14491 return NEW_MATCH2(node1, node2);
14492
14493 case NODE_LIT:
14494 if (TYPE(node1->nd_lit) == T_REGEXP) {
14495 return NEW_MATCH2(node1, node2);
14496 }
14497 }
14498 }
14499
14500 if (node2) {
14501 switch (nd_type(node2)) {
14502 case NODE_DREGX:
14503 case NODE_DREGX_ONCE:
14504 return NEW_MATCH3(node2, node1);
14505
14506 case NODE_LIT:
14507 if (TYPE(node2->nd_lit) == T_REGEXP) {
14508 return NEW_MATCH3(node2, node1);
14509 }
14510 }
14511 }
14512
14513 return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
14514 }
14515
14516 static NODE*
14517 gettable_gen(struct parser_params *parser, ID id)
14518 {
14519 if (id == keyword_self) {
14520 return NEW_SELF();
14521 }
14522 else if (id == keyword_nil) {
14523 return NEW_NIL();
14524 }
14525 else if (id == keyword_true) {
14526 return NEW_TRUE();
14527 }
14528 else if (id == keyword_false) {
14529 return NEW_FALSE();
14530 }
14531 else if (id == keyword__FILE__) {
14532 return NEW_STR(rb_external_str_new_with_enc(ruby_sourcefile, strlen(ruby_sourcefile),
14533 rb_filesystem_encoding()));
14534 }
14535 else if (id == keyword__LINE__) {
14536 return NEW_LIT(INT2FIX(ruby_sourceline));
14537 }
14538 else if (id == keyword__ENCODING__) {
14539 return NEW_LIT(rb_enc_from_encoding(parser->enc));
14540 }
14541 else if (is_local_id(id)) {
14542 if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
14543 if (local_id(id)) return NEW_LVAR(id);
14544
14545 return NEW_VCALL(id);
14546 }
14547 else if (is_global_id(id)) {
14548 return NEW_GVAR(id);
14549 }
14550 else if (is_instance_id(id)) {
14551 return NEW_IVAR(id);
14552 }
14553 else if (is_const_id(id)) {
14554 return NEW_CONST(id);
14555 }
14556 else if (is_class_id(id)) {
14557 return NEW_CVAR(id);
14558 }
14559 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14560 return 0;
14561 }
14562 #else
14563 static int
14564 id_is_var_gen(struct parser_params *parser, ID id)
14565 {
14566 if (is_notop_id(id)) {
14567 switch (id & ID_SCOPE_MASK) {
14568 case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
14569 return 1;
14570 case ID_LOCAL:
14571 if (dyna_in_block() && dvar_defined(id)) return 1;
14572 if (local_id(id)) return 1;
14573
14574 return 0;
14575 }
14576 }
14577 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14578 return 0;
14579 }
14580 #endif
14581
14582 #ifdef RIPPER
14583 static VALUE
14584 assignable_gen(struct parser_params *parser, VALUE lhs)
14585 #else
14586 static NODE*
14587 assignable_gen(struct parser_params *parser, ID id, NODE *val)
14588 #endif
14589 {
14590 #ifdef RIPPER
14591 ID id = get_id(lhs);
14592 # define assignable_result(x) get_value(lhs)
14593 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
14594 #else
14595 # define assignable_result(x) (x)
14596 #endif
14597 if (!id) return assignable_result(0);
14598 if (id == keyword_self) {
14599 yyerror("Can't change the value of self");
14600 }
14601 else if (id == keyword_nil) {
14602 yyerror("Can't assign to nil");
14603 }
14604 else if (id == keyword_true) {
14605 yyerror("Can't assign to true");
14606 }
14607 else if (id == keyword_false) {
14608 yyerror("Can't assign to false");
14609 }
14610 else if (id == keyword__FILE__) {
14611 yyerror("Can't assign to __FILE__");
14612 }
14613 else if (id == keyword__LINE__) {
14614 yyerror("Can't assign to __LINE__");
14615 }
14616 else if (id == keyword__ENCODING__) {
14617 yyerror("Can't assign to __ENCODING__");
14618 }
14619 else if (is_local_id(id)) {
14620 if (dyna_in_block()) {
14621 if (dvar_curr(id)) {
14622 return assignable_result(NEW_DASGN_CURR(id, val));
14623 }
14624 else if (dvar_defined(id)) {
14625 return assignable_result(NEW_DASGN(id, val));
14626 }
14627 else if (local_id(id)) {
14628 return assignable_result(NEW_LASGN(id, val));
14629 }
14630 else {
14631 dyna_var(id);
14632 return assignable_result(NEW_DASGN_CURR(id, val));
14633 }
14634 }
14635 else {
14636 if (!local_id(id)) {
14637 local_var(id);
14638 }
14639 return assignable_result(NEW_LASGN(id, val));
14640 }
14641 }
14642 else if (is_global_id(id)) {
14643 return assignable_result(NEW_GASGN(id, val));
14644 }
14645 else if (is_instance_id(id)) {
14646 return assignable_result(NEW_IASGN(id, val));
14647 }
14648 else if (is_const_id(id)) {
14649 if (!in_def && !in_single)
14650 return assignable_result(NEW_CDECL(id, val, 0));
14651 yyerror("dynamic constant assignment");
14652 }
14653 else if (is_class_id(id)) {
14654 return assignable_result(NEW_CVASGN(id, val));
14655 }
14656 else {
14657 compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
14658 }
14659 return assignable_result(0);
14660 #undef assignable_result
14661 #undef parser_yyerror
14662 }
14663
14664 #define LVAR_USED ((int)1 << (sizeof(int) * CHAR_BIT - 1))
14665
14666 static ID
14667 shadowing_lvar_gen(struct parser_params *parser, ID name)
14668 {
14669 if (idUScore == name) return name;
14670 if (dyna_in_block()) {
14671 if (dvar_curr(name)) {
14672 yyerror("duplicated argument name");
14673 }
14674 else if (dvar_defined_get(name) || local_id(name)) {
14675 rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
14676 vtable_add(lvtbl->vars, name);
14677 if (lvtbl->used) {
14678 vtable_add(lvtbl->used, (ID)ruby_sourceline | LVAR_USED);
14679 }
14680 }
14681 }
14682 else {
14683 if (local_id(name)) {
14684 yyerror("duplicated argument name");
14685 }
14686 }
14687 return name;
14688 }
14689
14690 static void
14691 new_bv_gen(struct parser_params *parser, ID name)
14692 {
14693 if (!name) return;
14694 if (!is_local_id(name)) {
14695 compile_error(PARSER_ARG "invalid local variable - %s",
14696 rb_id2name(name));
14697 return;
14698 }
14699 shadowing_lvar(name);
14700 dyna_var(name);
14701 }
14702
14703 #ifndef RIPPER
14704 static NODE *
14705 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
14706 {
14707 if (recv && nd_type(recv) == NODE_SELF)
14708 recv = (NODE *)1;
14709 return NEW_ATTRASGN(recv, tASET, idx);
14710 }
14711
14712 static void
14713 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14714 {
14715 if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
14716 compile_error(PARSER_ARG "both block arg and actual block given");
14717 }
14718 }
14719
14720 ID
14721 rb_id_attrset(ID id)
14722 {
14723 id &= ~ID_SCOPE_MASK;
14724 id |= ID_ATTRSET;
14725 return id;
14726 }
14727
14728 static NODE *
14729 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
14730 {
14731 if (recv && nd_type(recv) == NODE_SELF)
14732 recv = (NODE *)1;
14733 return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
14734 }
14735
14736 static void
14737 rb_backref_error_gen(struct parser_params *parser, NODE *node)
14738 {
14739 switch (nd_type(node)) {
14740 case NODE_NTH_REF:
14741 compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
14742 break;
14743 case NODE_BACK_REF:
14744 compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
14745 break;
14746 }
14747 }
14748
14749 static NODE *
14750 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14751 {
14752 if (!node2) return node1;
14753 switch (nd_type(node1)) {
14754 case NODE_BLOCK_PASS:
14755 if (node1->nd_head)
14756 node1->nd_head = arg_concat(node1->nd_head, node2);
14757 else
14758 node1->nd_head = NEW_LIST(node2);
14759 return node1;
14760 case NODE_ARGSPUSH:
14761 if (nd_type(node2) != NODE_ARRAY) break;
14762 node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
14763 nd_set_type(node1, NODE_ARGSCAT);
14764 return node1;
14765 case NODE_ARGSCAT:
14766 if (nd_type(node2) != NODE_ARRAY ||
14767 nd_type(node1->nd_body) != NODE_ARRAY) break;
14768 node1->nd_body = list_concat(node1->nd_body, node2);
14769 return node1;
14770 }
14771 return NEW_ARGSCAT(node1, node2);
14772 }
14773
14774 static NODE *
14775 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14776 {
14777 if (!node1) return NEW_LIST(node2);
14778 switch (nd_type(node1)) {
14779 case NODE_ARRAY:
14780 return list_append(node1, node2);
14781 case NODE_BLOCK_PASS:
14782 node1->nd_head = arg_append(node1->nd_head, node2);
14783 return node1;
14784 case NODE_ARGSPUSH:
14785 node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
14786 nd_set_type(node1, NODE_ARGSCAT);
14787 return node1;
14788 }
14789 return NEW_ARGSPUSH(node1, node2);
14790 }
14791
14792 static NODE *
14793 splat_array(NODE* node)
14794 {
14795 if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
14796 if (nd_type(node) == NODE_ARRAY) return node;
14797 return 0;
14798 }
14799
14800 static NODE *
14801 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
14802 {
14803 if (!lhs) return 0;
14804
14805 switch (nd_type(lhs)) {
14806 case NODE_GASGN:
14807 case NODE_IASGN:
14808 case NODE_IASGN2:
14809 case NODE_LASGN:
14810 case NODE_DASGN:
14811 case NODE_DASGN_CURR:
14812 case NODE_MASGN:
14813 case NODE_CDECL:
14814 case NODE_CVASGN:
14815 lhs->nd_value = rhs;
14816 break;
14817
14818 case NODE_ATTRASGN:
14819 case NODE_CALL:
14820 lhs->nd_args = arg_append(lhs->nd_args, rhs);
14821 break;
14822
14823 default:
14824
14825 break;
14826 }
14827
14828 return lhs;
14829 }
14830
14831 static int
14832 value_expr_gen(struct parser_params *parser, NODE *node)
14833 {
14834 int cond = 0;
14835
14836 if (!node) {
14837 rb_warning0("empty expression");
14838 }
14839 while (node) {
14840 switch (nd_type(node)) {
14841 case NODE_DEFN:
14842 case NODE_DEFS:
14843 parser_warning(node, "void value expression");
14844 return FALSE;
14845
14846 case NODE_RETURN:
14847 case NODE_BREAK:
14848 case NODE_NEXT:
14849 case NODE_REDO:
14850 case NODE_RETRY:
14851 if (!cond) yyerror("void value expression");
14852
14853 return FALSE;
14854
14855 case NODE_BLOCK:
14856 while (node->nd_next) {
14857 node = node->nd_next;
14858 }
14859 node = node->nd_head;
14860 break;
14861
14862 case NODE_BEGIN:
14863 node = node->nd_body;
14864 break;
14865
14866 case NODE_IF:
14867 if (!node->nd_body) {
14868 node = node->nd_else;
14869 break;
14870 }
14871 else if (!node->nd_else) {
14872 node = node->nd_body;
14873 break;
14874 }
14875 if (!value_expr(node->nd_body)) return FALSE;
14876 node = node->nd_else;
14877 break;
14878
14879 case NODE_AND:
14880 case NODE_OR:
14881 cond = 1;
14882 node = node->nd_2nd;
14883 break;
14884
14885 default:
14886 return TRUE;
14887 }
14888 }
14889
14890 return TRUE;
14891 }
14892
14893 static void
14894 void_expr_gen(struct parser_params *parser, NODE *node)
14895 {
14896 const char *useless = 0;
14897
14898 if (!RTEST(ruby_verbose)) return;
14899
14900 if (!node) return;
14901 switch (nd_type(node)) {
14902 case NODE_CALL:
14903 switch (node->nd_mid) {
14904 case '+':
14905 case '-':
14906 case '*':
14907 case '/':
14908 case '%':
14909 case tPOW:
14910 case tUPLUS:
14911 case tUMINUS:
14912 case '|':
14913 case '^':
14914 case '&':
14915 case tCMP:
14916 case '>':
14917 case tGEQ:
14918 case '<':
14919 case tLEQ:
14920 case tEQ:
14921 case tNEQ:
14922 useless = rb_id2name(node->nd_mid);
14923 break;
14924 }
14925 break;
14926
14927 case NODE_LVAR:
14928 case NODE_DVAR:
14929 case NODE_GVAR:
14930 case NODE_IVAR:
14931 case NODE_CVAR:
14932 case NODE_NTH_REF:
14933 case NODE_BACK_REF:
14934 useless = "a variable";
14935 break;
14936 case NODE_CONST:
14937 useless = "a constant";
14938 break;
14939 case NODE_LIT:
14940 case NODE_STR:
14941 case NODE_DSTR:
14942 case NODE_DREGX:
14943 case NODE_DREGX_ONCE:
14944 useless = "a literal";
14945 break;
14946 case NODE_COLON2:
14947 case NODE_COLON3:
14948 useless = "::";
14949 break;
14950 case NODE_DOT2:
14951 useless = "..";
14952 break;
14953 case NODE_DOT3:
14954 useless = "...";
14955 break;
14956 case NODE_SELF:
14957 useless = "self";
14958 break;
14959 case NODE_NIL:
14960 useless = "nil";
14961 break;
14962 case NODE_TRUE:
14963 useless = "true";
14964 break;
14965 case NODE_FALSE:
14966 useless = "false";
14967 break;
14968 case NODE_DEFINED:
14969 useless = "defined?";
14970 break;
14971 }
14972
14973 if (useless) {
14974 int line = ruby_sourceline;
14975
14976 ruby_sourceline = nd_line(node);
14977 rb_warnS("possibly useless use of %s in void context", useless);
14978 ruby_sourceline = line;
14979 }
14980 }
14981
14982 static void
14983 void_stmts_gen(struct parser_params *parser, NODE *node)
14984 {
14985 if (!RTEST(ruby_verbose)) return;
14986 if (!node) return;
14987 if (nd_type(node) != NODE_BLOCK) return;
14988
14989 for (;;) {
14990 if (!node->nd_next) return;
14991 void_expr0(node->nd_head);
14992 node = node->nd_next;
14993 }
14994 }
14995
14996 static NODE *
14997 remove_begin(NODE *node)
14998 {
14999 NODE **n = &node, *n1 = node;
15000 while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
15001 *n = n1 = n1->nd_body;
15002 }
15003 return node;
15004 }
15005
15006 static void
15007 reduce_nodes_gen(struct parser_params *parser, NODE **body)
15008 {
15009 NODE *node = *body;
15010
15011 if (!node) {
15012 *body = NEW_NIL();
15013 return;
15014 }
15015 #define subnodes(n1, n2) \
15016 ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
15017 (!node->n2) ? (body = &node->n1, 1) : \
15018 (reduce_nodes(&node->n1), body = &node->n2, 1))
15019
15020 while (node) {
15021 int newline = (int)(node->flags & NODE_FL_NEWLINE);
15022 switch (nd_type(node)) {
15023 end:
15024 case NODE_NIL:
15025 *body = 0;
15026 return;
15027 case NODE_RETURN:
15028 *body = node = node->nd_stts;
15029 if (newline && node) node->flags |= NODE_FL_NEWLINE;
15030 continue;
15031 case NODE_BEGIN:
15032 *body = node = node->nd_body;
15033 if (newline && node) node->flags |= NODE_FL_NEWLINE;
15034 continue;
15035 case NODE_BLOCK:
15036 body = &node->nd_end->nd_head;
15037 break;
15038 case NODE_IF:
15039 if (subnodes(nd_body, nd_else)) break;
15040 return;
15041 case NODE_CASE:
15042 body = &node->nd_body;
15043 break;
15044 case NODE_WHEN:
15045 if (!subnodes(nd_body, nd_next)) goto end;
15046 break;
15047 case NODE_ENSURE:
15048 if (!subnodes(nd_head, nd_resq)) goto end;
15049 break;
15050 case NODE_RESCUE:
15051 if (node->nd_else) {
15052 body = &node->nd_resq;
15053 break;
15054 }
15055 if (!subnodes(nd_head, nd_resq)) goto end;
15056 break;
15057 default:
15058 return;
15059 }
15060 node = *body;
15061 if (newline && node) node->flags |= NODE_FL_NEWLINE;
15062 }
15063
15064 #undef subnodes
15065 }
15066
15067 static int
15068 assign_in_cond(struct parser_params *parser, NODE *node)
15069 {
15070 switch (nd_type(node)) {
15071 case NODE_MASGN:
15072 yyerror("multiple assignment in conditional");
15073 return 1;
15074
15075 case NODE_LASGN:
15076 case NODE_DASGN:
15077 case NODE_DASGN_CURR:
15078 case NODE_GASGN:
15079 case NODE_IASGN:
15080 break;
15081
15082 default:
15083 return 0;
15084 }
15085
15086 if (!node->nd_value) return 1;
15087 switch (nd_type(node->nd_value)) {
15088 case NODE_LIT:
15089 case NODE_STR:
15090 case NODE_NIL:
15091 case NODE_TRUE:
15092 case NODE_FALSE:
15093
15094 parser_warn(node->nd_value, "found = in conditional, should be ==");
15095 return 1;
15096
15097 case NODE_DSTR:
15098 case NODE_XSTR:
15099 case NODE_DXSTR:
15100 case NODE_EVSTR:
15101 case NODE_DREGX:
15102 default:
15103 break;
15104 }
15105 return 1;
15106 }
15107
15108 static void
15109 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15110 {
15111 if (!e_option_supplied(parser)) parser_warn(node, str);
15112 }
15113
15114 static void
15115 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15116 {
15117 if (!e_option_supplied(parser)) parser_warning(node, str);
15118 }
15119
15120 static void
15121 fixup_nodes(NODE **rootnode)
15122 {
15123 NODE *node, *next, *head;
15124
15125 for (node = *rootnode; node; node = next) {
15126 enum node_type type;
15127 VALUE val;
15128
15129 next = node->nd_next;
15130 head = node->nd_head;
15131 rb_gc_force_recycle((VALUE)node);
15132 *rootnode = next;
15133 switch (type = nd_type(head)) {
15134 case NODE_DOT2:
15135 case NODE_DOT3:
15136 val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
15137 type == NODE_DOT3);
15138 rb_gc_force_recycle((VALUE)head->nd_beg);
15139 rb_gc_force_recycle((VALUE)head->nd_end);
15140 nd_set_type(head, NODE_LIT);
15141 head->nd_lit = val;
15142 break;
15143 default:
15144 break;
15145 }
15146 }
15147 }
15148
15149 static NODE *cond0(struct parser_params*,NODE*);
15150
15151 static NODE*
15152 range_op(struct parser_params *parser, NODE *node)
15153 {
15154 enum node_type type;
15155
15156 if (node == 0) return 0;
15157
15158 type = nd_type(node);
15159 value_expr(node);
15160 if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
15161 warn_unless_e_option(parser, node, "integer literal in conditional range");
15162 return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
15163 }
15164 return cond0(parser, node);
15165 }
15166
15167 static int
15168 literal_node(NODE *node)
15169 {
15170 if (!node) return 1;
15171 switch (nd_type(node)) {
15172 case NODE_LIT:
15173 case NODE_STR:
15174 case NODE_DSTR:
15175 case NODE_EVSTR:
15176 case NODE_DREGX:
15177 case NODE_DREGX_ONCE:
15178 case NODE_DSYM:
15179 return 2;
15180 case NODE_TRUE:
15181 case NODE_FALSE:
15182 case NODE_NIL:
15183 return 1;
15184 }
15185 return 0;
15186 }
15187
15188 static NODE*
15189 cond0(struct parser_params *parser, NODE *node)
15190 {
15191 if (node == 0) return 0;
15192 assign_in_cond(parser, node);
15193
15194 switch (nd_type(node)) {
15195 case NODE_DSTR:
15196 case NODE_EVSTR:
15197 case NODE_STR:
15198 rb_warn0("string literal in condition");
15199 break;
15200
15201 case NODE_DREGX:
15202 case NODE_DREGX_ONCE:
15203 warning_unless_e_option(parser, node, "regex literal in condition");
15204 return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
15205
15206 case NODE_AND:
15207 case NODE_OR:
15208 node->nd_1st = cond0(parser, node->nd_1st);
15209 node->nd_2nd = cond0(parser, node->nd_2nd);
15210 break;
15211
15212 case NODE_DOT2:
15213 case NODE_DOT3:
15214 node->nd_beg = range_op(parser, node->nd_beg);
15215 node->nd_end = range_op(parser, node->nd_end);
15216 if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
15217 else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
15218 if (!e_option_supplied(parser)) {
15219 int b = literal_node(node->nd_beg);
15220 int e = literal_node(node->nd_end);
15221 if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
15222 parser_warn(node, "range literal in condition");
15223 }
15224 }
15225 break;
15226
15227 case NODE_DSYM:
15228 parser_warning(node, "literal in condition");
15229 break;
15230
15231 case NODE_LIT:
15232 if (TYPE(node->nd_lit) == T_REGEXP) {
15233 warn_unless_e_option(parser, node, "regex literal in condition");
15234 nd_set_type(node, NODE_MATCH);
15235 }
15236 else {
15237 parser_warning(node, "literal in condition");
15238 }
15239 default:
15240 break;
15241 }
15242 return node;
15243 }
15244
15245 static NODE*
15246 cond_gen(struct parser_params *parser, NODE *node)
15247 {
15248 if (node == 0) return 0;
15249 return cond0(parser, node);
15250 }
15251
15252 static NODE*
15253 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
15254 {
15255 value_expr(left);
15256 if (left && (enum node_type)nd_type(left) == type) {
15257 NODE *node = left, *second;
15258 while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
15259 node = second;
15260 }
15261 node->nd_2nd = NEW_NODE(type, second, right, 0);
15262 return left;
15263 }
15264 return NEW_NODE(type, left, right, 0);
15265 }
15266
15267 static void
15268 no_blockarg(struct parser_params *parser, NODE *node)
15269 {
15270 if (node && nd_type(node) == NODE_BLOCK_PASS) {
15271 compile_error(PARSER_ARG "block argument should not be given");
15272 }
15273 }
15274
15275 static NODE *
15276 ret_args_gen(struct parser_params *parser, NODE *node)
15277 {
15278 if (node) {
15279 no_blockarg(parser, node);
15280 if (nd_type(node) == NODE_ARRAY) {
15281 if (node->nd_next == 0) {
15282 node = node->nd_head;
15283 }
15284 else {
15285 nd_set_type(node, NODE_VALUES);
15286 }
15287 }
15288 }
15289 return node;
15290 }
15291
15292 static NODE *
15293 new_yield_gen(struct parser_params *parser, NODE *node)
15294 {
15295 long state = Qtrue;
15296
15297 if (node) {
15298 no_blockarg(parser, node);
15299 if (node && nd_type(node) == NODE_SPLAT) {
15300 state = Qtrue;
15301 }
15302 }
15303 else {
15304 state = Qfalse;
15305 }
15306 return NEW_YIELD(node, state);
15307 }
15308
15309 static NODE*
15310 negate_lit(NODE *node)
15311 {
15312 switch (TYPE(node->nd_lit)) {
15313 case T_FIXNUM:
15314 node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
15315 break;
15316 case T_BIGNUM:
15317 node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
15318 break;
15319 case T_FLOAT:
15320 RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15321 break;
15322 default:
15323 break;
15324 }
15325 return node;
15326 }
15327
15328 static NODE *
15329 arg_blk_pass(NODE *node1, NODE *node2)
15330 {
15331 if (node2) {
15332 node2->nd_head = node1;
15333 return node2;
15334 }
15335 return node1;
15336 }
15337
15338 static NODE*
15339 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b)
15340 {
15341 int saved_line = ruby_sourceline;
15342 NODE *node;
15343 NODE *i1, *i2 = 0;
15344
15345 node = NEW_ARGS(m ? m->nd_plen : 0, o);
15346 i1 = m ? m->nd_next : 0;
15347 node->nd_next = NEW_ARGS_AUX(r, b);
15348
15349 if (p) {
15350 i2 = p->nd_next;
15351 node->nd_next->nd_next = NEW_ARGS_AUX(p->nd_pid, p->nd_plen);
15352 }
15353 else if (i1) {
15354 node->nd_next->nd_next = NEW_ARGS_AUX(0, 0);
15355 }
15356 if (i1 || i2) {
15357 node->nd_next->nd_next->nd_next = NEW_NODE(NODE_AND, i1, i2, 0);
15358 }
15359 ruby_sourceline = saved_line;
15360 return node;
15361 }
15362 #endif
15363
15364 static void
15365 warn_unused_var(struct parser_params *parser, struct local_vars *local)
15366 {
15367 int i, cnt;
15368 ID *v, *u;
15369
15370 if (!local->used) return;
15371 v = local->vars->tbl;
15372 u = local->used->tbl;
15373 cnt = local->used->pos;
15374 if (cnt != local->vars->pos) {
15375 rb_bug("local->used->pos != local->vars->pos");
15376 }
15377 for (i = 0; i < cnt; ++i) {
15378 if (!v[i] || (u[i] & LVAR_USED)) continue;
15379 if (idUScore == v[i]) continue;
15380 rb_compile_warn(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i]));
15381 }
15382 }
15383
15384 static void
15385 local_push_gen(struct parser_params *parser, int inherit_dvars)
15386 {
15387 struct local_vars *local;
15388
15389 local = ALLOC(struct local_vars);
15390 local->prev = lvtbl;
15391 local->args = vtable_alloc(0);
15392 local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
15393 local->used = !inherit_dvars && RTEST(ruby_verbose) ? vtable_alloc(0) : 0;
15394 local->cmdargs = cmdarg_stack;
15395 cmdarg_stack = 0;
15396 lvtbl = local;
15397 }
15398
15399 static void
15400 local_pop_gen(struct parser_params *parser)
15401 {
15402 struct local_vars *local = lvtbl->prev;
15403 if (lvtbl->used) {
15404 warn_unused_var(parser, lvtbl);
15405 vtable_free(lvtbl->used);
15406 }
15407 vtable_free(lvtbl->args);
15408 vtable_free(lvtbl->vars);
15409 cmdarg_stack = lvtbl->cmdargs;
15410 xfree(lvtbl);
15411 lvtbl = local;
15412 }
15413
15414 #ifndef RIPPER
15415 static ID*
15416 vtable_tblcpy(ID *buf, const struct vtable *src)
15417 {
15418 int i, cnt = vtable_size(src);
15419
15420 if (cnt > 0) {
15421 buf[0] = cnt;
15422 for (i = 0; i < cnt; i++) {
15423 buf[i] = src->tbl[i];
15424 }
15425 return buf;
15426 }
15427 return 0;
15428 }
15429
15430 static ID*
15431 local_tbl_gen(struct parser_params *parser)
15432 {
15433 int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars);
15434 ID *buf;
15435
15436 if (cnt <= 0) return 0;
15437 buf = ALLOC_N(ID, cnt + 1);
15438 vtable_tblcpy(buf+1, lvtbl->args);
15439 vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars);
15440 buf[0] = cnt;
15441 return buf;
15442 }
15443 #endif
15444
15445 static int
15446 arg_var_gen(struct parser_params *parser, ID id)
15447 {
15448 vtable_add(lvtbl->args, id);
15449 return vtable_size(lvtbl->args) - 1;
15450 }
15451
15452 static int
15453 local_var_gen(struct parser_params *parser, ID id)
15454 {
15455 vtable_add(lvtbl->vars, id);
15456 if (lvtbl->used) {
15457 vtable_add(lvtbl->used, (ID)ruby_sourceline);
15458 }
15459 return vtable_size(lvtbl->vars) - 1;
15460 }
15461
15462 static int
15463 local_id_gen(struct parser_params *parser, ID id)
15464 {
15465 struct vtable *vars, *args, *used;
15466
15467 vars = lvtbl->vars;
15468 args = lvtbl->args;
15469 used = lvtbl->used;
15470
15471 while (vars && POINTER_P(vars->prev)) {
15472 vars = vars->prev;
15473 args = args->prev;
15474 if (used) used = used->prev;
15475 }
15476
15477 if (vars && vars->prev == DVARS_INHERIT) {
15478 return rb_local_defined(id);
15479 }
15480 else if (vtable_included(args, id)) {
15481 return 1;
15482 }
15483 else {
15484 int i = vtable_included(vars, id);
15485 if (i && used) used->tbl[i-1] |= LVAR_USED;
15486 return i != 0;
15487 }
15488 }
15489
15490 static const struct vtable *
15491 dyna_push_gen(struct parser_params *parser)
15492 {
15493 lvtbl->args = vtable_alloc(lvtbl->args);
15494 lvtbl->vars = vtable_alloc(lvtbl->vars);
15495 if (lvtbl->used) {
15496 lvtbl->used = vtable_alloc(lvtbl->used);
15497 }
15498 return lvtbl->args;
15499 }
15500
15501 static void
15502 dyna_pop_1(struct parser_params *parser)
15503 {
15504 struct vtable *tmp;
15505
15506 if ((tmp = lvtbl->used) != 0) {
15507 warn_unused_var(parser, lvtbl);
15508 lvtbl->used = lvtbl->used->prev;
15509 vtable_free(tmp);
15510 }
15511 tmp = lvtbl->args;
15512 lvtbl->args = lvtbl->args->prev;
15513 vtable_free(tmp);
15514 tmp = lvtbl->vars;
15515 lvtbl->vars = lvtbl->vars->prev;
15516 vtable_free(tmp);
15517 }
15518
15519 static void
15520 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
15521 {
15522 while (lvtbl->args != lvargs) {
15523 dyna_pop_1(parser);
15524 if (!lvtbl->args) {
15525 struct local_vars *local = lvtbl->prev;
15526 xfree(lvtbl);
15527 lvtbl = local;
15528 }
15529 }
15530 dyna_pop_1(parser);
15531 }
15532
15533 static int
15534 dyna_in_block_gen(struct parser_params *parser)
15535 {
15536 return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
15537 }
15538
15539 static int
15540 dvar_defined_gen(struct parser_params *parser, ID id, int get)
15541 {
15542 struct vtable *vars, *args, *used;
15543 int i;
15544
15545 args = lvtbl->args;
15546 vars = lvtbl->vars;
15547 used = lvtbl->used;
15548
15549 while (POINTER_P(vars)) {
15550 if (vtable_included(args, id)) {
15551 return 1;
15552 }
15553 if ((i = vtable_included(vars, id)) != 0) {
15554 if (used) used->tbl[i-1] |= LVAR_USED;
15555 return 1;
15556 }
15557 args = args->prev;
15558 vars = vars->prev;
15559 if (get) used = 0;
15560 if (used) used = used->prev;
15561 }
15562
15563 if (vars == DVARS_INHERIT) {
15564 return rb_dvar_defined(id);
15565 }
15566
15567 return 0;
15568 }
15569
15570 static int
15571 dvar_curr_gen(struct parser_params *parser, ID id)
15572 {
15573 return (vtable_included(lvtbl->args, id) ||
15574 vtable_included(lvtbl->vars, id));
15575 }
15576
15577 #ifndef RIPPER
15578 static void
15579 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
15580 {
15581 int c = RE_OPTION_ENCODING_IDX(options);
15582
15583 if (c) {
15584 int opt, idx;
15585 rb_char_to_option_kcode(c, &opt, &idx);
15586 if (idx != ENCODING_GET(str) &&
15587 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15588 goto error;
15589 }
15590 ENCODING_SET(str, idx);
15591 }
15592 else if (RE_OPTION_ENCODING_NONE(options)) {
15593 if (!ENCODING_IS_ASCII8BIT(str) &&
15594 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15595 c = 'n';
15596 goto error;
15597 }
15598 rb_enc_associate(str, rb_ascii8bit_encoding());
15599 }
15600 else if (parser->enc == rb_usascii_encoding()) {
15601 if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15602
15603 rb_enc_associate(str, rb_usascii_encoding());
15604 }
15605 else {
15606 rb_enc_associate(str, rb_ascii8bit_encoding());
15607 }
15608 }
15609 return;
15610
15611 error:
15612 compile_error(PARSER_ARG
15613 "regexp encoding option '%c' differs from source encoding '%s'",
15614 c, rb_enc_name(rb_enc_get(str)));
15615 }
15616
15617 static int
15618 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
15619 {
15620 VALUE err;
15621 reg_fragment_setenc(str, options);
15622 err = rb_reg_check_preprocess(str);
15623 if (err != Qnil) {
15624 err = rb_obj_as_string(err);
15625 compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
15626 RB_GC_GUARD(err);
15627 return 0;
15628 }
15629 return 1;
15630 }
15631
15632 typedef struct {
15633 struct parser_params* parser;
15634 rb_encoding *enc;
15635 NODE *succ_block;
15636 NODE *fail_block;
15637 int num;
15638 } reg_named_capture_assign_t;
15639
15640 static int
15641 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
15642 int back_num, int *back_refs, OnigRegex regex, void *arg0)
15643 {
15644 reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
15645 struct parser_params* parser = arg->parser;
15646 rb_encoding *enc = arg->enc;
15647 long len = name_end - name;
15648 const char *s = (const char *)name;
15649 ID var;
15650
15651 arg->num++;
15652
15653 if (arg->succ_block == 0) {
15654 arg->succ_block = NEW_BEGIN(0);
15655 arg->fail_block = NEW_BEGIN(0);
15656 }
15657
15658 if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
15659 (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
15660 !rb_enc_symname2_p(s, len, enc)) {
15661 return ST_CONTINUE;
15662 }
15663 var = rb_intern3(s, len, enc);
15664 if (dvar_defined(var) || local_id(var)) {
15665 rb_warningS("named capture conflicts a local variable - %s",
15666 rb_id2name(var));
15667 }
15668 arg->succ_block = block_append(arg->succ_block,
15669 newline_node(node_assign(assignable(var,0),
15670 NEW_CALL(
15671 gettable(rb_intern("$~")),
15672 idAREF,
15673 NEW_LIST(NEW_LIT(ID2SYM(var))))
15674 )));
15675 arg->fail_block = block_append(arg->fail_block,
15676 newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil))));
15677 return ST_CONTINUE;
15678 }
15679
15680 static NODE *
15681 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match)
15682 {
15683 reg_named_capture_assign_t arg;
15684
15685 arg.parser = parser;
15686 arg.enc = rb_enc_get(regexp);
15687 arg.succ_block = 0;
15688 arg.fail_block = 0;
15689 arg.num = 0;
15690 onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
15691
15692 if (arg.num == 0)
15693 return match;
15694
15695 return
15696 block_append(
15697 newline_node(match),
15698 NEW_IF(gettable(rb_intern("$~")),
15699 block_append(
15700 newline_node(arg.succ_block),
15701 newline_node(
15702 NEW_CALL(
15703 gettable(rb_intern("$~")),
15704 rb_intern("begin"),
15705 NEW_LIST(NEW_LIT(INT2FIX(0)))))),
15706 block_append(
15707 newline_node(arg.fail_block),
15708 newline_node(
15709 NEW_LIT(Qnil)))));
15710 }
15711
15712 static VALUE
15713 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
15714 {
15715 VALUE re;
15716 VALUE err;
15717
15718 reg_fragment_setenc(str, options);
15719 err = rb_errinfo();
15720 re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline);
15721 if (NIL_P(re)) {
15722 ID mesg = rb_intern("mesg");
15723 VALUE m = rb_attr_get(rb_errinfo(), mesg);
15724 rb_set_errinfo(err);
15725 if (!NIL_P(err)) {
15726 rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
15727 }
15728 else {
15729 compile_error(PARSER_ARG "%s", RSTRING_PTR(m));
15730 }
15731 return Qnil;
15732 }
15733 return re;
15734 }
15735
15736 void
15737 rb_gc_mark_parser(void)
15738 {
15739 }
15740
15741 NODE*
15742 rb_parser_append_print(VALUE vparser, NODE *node)
15743 {
15744 NODE *prelude = 0;
15745 NODE *scope = node;
15746 struct parser_params *parser;
15747
15748 if (!node) return node;
15749
15750 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15751
15752 node = node->nd_body;
15753
15754 if (nd_type(node) == NODE_PRELUDE) {
15755 prelude = node;
15756 node = node->nd_body;
15757 }
15758
15759 node = block_append(node,
15760 NEW_FCALL(rb_intern("print"),
15761 NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
15762 if (prelude) {
15763 prelude->nd_body = node;
15764 scope->nd_body = prelude;
15765 }
15766 else {
15767 scope->nd_body = node;
15768 }
15769
15770 return scope;
15771 }
15772
15773 NODE *
15774 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
15775 {
15776 NODE *prelude = 0;
15777 NODE *scope = node;
15778 struct parser_params *parser;
15779
15780 if (!node) return node;
15781
15782 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15783
15784 node = node->nd_body;
15785
15786 if (nd_type(node) == NODE_PRELUDE) {
15787 prelude = node;
15788 node = node->nd_body;
15789 }
15790 if (split) {
15791 node = block_append(NEW_GASGN(rb_intern("$F"),
15792 NEW_CALL(NEW_GVAR(rb_intern("$_")),
15793 rb_intern("split"), 0)),
15794 node);
15795 }
15796 if (chop) {
15797 node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
15798 rb_intern("chop!"), 0), node);
15799 }
15800
15801 node = NEW_OPT_N(node);
15802
15803 if (prelude) {
15804 prelude->nd_body = node;
15805 scope->nd_body = prelude;
15806 }
15807 else {
15808 scope->nd_body = node;
15809 }
15810
15811 return scope;
15812 }
15813
15814 static const struct {
15815 ID token;
15816 const char *name;
15817 } op_tbl[] = {
15818 {tDOT2, ".."},
15819 {tDOT3, "..."},
15820 {tPOW, "**"},
15821 {tUPLUS, "+@"},
15822 {tUMINUS, "-@"},
15823 {tCMP, "<=>"},
15824 {tGEQ, ">="},
15825 {tLEQ, "<="},
15826 {tEQ, "=="},
15827 {tEQQ, "==="},
15828 {tNEQ, "!="},
15829 {tMATCH, "=~"},
15830 {tNMATCH, "!~"},
15831 {tAREF, "[]"},
15832 {tASET, "[]="},
15833 {tLSHFT, "<<"},
15834 {tRSHFT, ">>"},
15835 {tCOLON2, "::"},
15836 };
15837
15838 #define op_tbl_count numberof(op_tbl)
15839
15840 #ifndef ENABLE_SELECTOR_NAMESPACE
15841 #define ENABLE_SELECTOR_NAMESPACE 0
15842 #endif
15843
15844 static struct symbols {
15845 ID last_id;
15846 st_table *sym_id;
15847 st_table *id_str;
15848 #if ENABLE_SELECTOR_NAMESPACE
15849 st_table *ivar2_id;
15850 st_table *id_ivar2;
15851 #endif
15852 VALUE op_sym[tLAST_TOKEN];
15853 } global_symbols = {tLAST_ID};
15854
15855 static const struct st_hash_type symhash = {
15856 rb_str_hash_cmp,
15857 rb_str_hash,
15858 };
15859
15860 #if ENABLE_SELECTOR_NAMESPACE
15861 struct ivar2_key {
15862 ID id;
15863 VALUE klass;
15864 };
15865
15866 static int
15867 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
15868 {
15869 if (key1->id == key2->id && key1->klass == key2->klass) {
15870 return 0;
15871 }
15872 return 1;
15873 }
15874
15875 static int
15876 ivar2_hash(struct ivar2_key *key)
15877 {
15878 return (key->id << 8) ^ (key->klass >> 2);
15879 }
15880
15881 static const struct st_hash_type ivar2_hash_type = {
15882 ivar2_cmp,
15883 ivar2_hash,
15884 };
15885 #endif
15886
15887 void
15888 Init_sym(void)
15889 {
15890 global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
15891 global_symbols.id_str = st_init_numtable_with_size(1000);
15892 #if ENABLE_SELECTOR_NAMESPACE
15893 global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
15894 global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
15895 #endif
15896
15897 Init_id();
15898 }
15899
15900 void
15901 rb_gc_mark_symbols(void)
15902 {
15903 rb_mark_tbl(global_symbols.id_str);
15904 rb_gc_mark_locations(global_symbols.op_sym,
15905 global_symbols.op_sym + tLAST_TOKEN);
15906 }
15907 #endif
15908
15909 static ID
15910 internal_id_gen(struct parser_params *parser)
15911 {
15912 ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
15913 id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
15914 return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
15915 }
15916
15917 #ifndef RIPPER
15918 static int
15919 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
15920 {
15921 int mb = 0;
15922
15923 if (m >= e) return 0;
15924 if (is_global_name_punct(*m)) {
15925 ++m;
15926 }
15927 else if (*m == '-') {
15928 ++m;
15929 if (m < e && is_identchar(m, e, enc)) {
15930 if (!ISASCII(*m)) mb = 1;
15931 m += rb_enc_mbclen(m, e, enc);
15932 }
15933 }
15934 else {
15935 if (!rb_enc_isdigit(*m, enc)) return 0;
15936 do {
15937 if (!ISASCII(*m)) mb = 1;
15938 ++m;
15939 } while (m < e && rb_enc_isdigit(*m, enc));
15940 }
15941 return m == e ? mb + 1 : 0;
15942 }
15943
15944 int
15945 rb_symname_p(const char *name)
15946 {
15947 return rb_enc_symname_p(name, rb_ascii8bit_encoding());
15948 }
15949
15950 int
15951 rb_enc_symname_p(const char *name, rb_encoding *enc)
15952 {
15953 return rb_enc_symname2_p(name, strlen(name), enc);
15954 }
15955
15956 int
15957 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
15958 {
15959 const char *m = name;
15960 const char *e = m + len;
15961 int localid = FALSE;
15962
15963 if (!m || len <= 0) return FALSE;
15964 switch (*m) {
15965 case '\0':
15966 return FALSE;
15967
15968 case '$':
15969 if (is_special_global_name(++m, e, enc)) return TRUE;
15970 goto id;
15971
15972 case '@':
15973 if (*++m == '@') ++m;
15974 goto id;
15975
15976 case '<':
15977 switch (*++m) {
15978 case '<': ++m; break;
15979 case '=': if (*++m == '>') ++m; break;
15980 default: break;
15981 }
15982 break;
15983
15984 case '>':
15985 switch (*++m) {
15986 case '>': case '=': ++m; break;
15987 }
15988 break;
15989
15990 case '=':
15991 switch (*++m) {
15992 case '~': ++m; break;
15993 case '=': if (*++m == '=') ++m; break;
15994 default: return FALSE;
15995 }
15996 break;
15997
15998 case '*':
15999 if (*++m == '*') ++m;
16000 break;
16001
16002 case '+': case '-':
16003 if (*++m == '@') ++m;
16004 break;
16005
16006 case '|': case '^': case '&': case '/': case '%': case '~': case '`':
16007 ++m;
16008 break;
16009
16010 case '[':
16011 if (*++m != ']') return FALSE;
16012 if (*++m == '=') ++m;
16013 break;
16014
16015 case '!':
16016 if (len == 1) return TRUE;
16017 switch (*++m) {
16018 case '=': case '~': ++m; break;
16019 default: return FALSE;
16020 }
16021 break;
16022
16023 default:
16024 localid = !rb_enc_isupper(*m, enc);
16025 id:
16026 if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
16027 return FALSE;
16028 while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
16029 if (localid) {
16030 switch (*m) {
16031 case '!': case '?': case '=': ++m;
16032 }
16033 }
16034 break;
16035 }
16036 return m == e;
16037 }
16038
16039 static ID
16040 register_symid(ID id, const char *name, long len, rb_encoding *enc)
16041 {
16042 VALUE str = rb_enc_str_new(name, len, enc);
16043 OBJ_FREEZE(str);
16044 st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
16045 st_add_direct(global_symbols.id_str, id, (st_data_t)str);
16046 return id;
16047 }
16048
16049 ID
16050 rb_intern3(const char *name, long len, rb_encoding *enc)
16051 {
16052 const char *m = name;
16053 const char *e = m + len;
16054 unsigned char c;
16055 VALUE str;
16056 ID id;
16057 long last;
16058 int mb;
16059 st_data_t data;
16060 struct RString fake_str;
16061 fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
16062 fake_str.basic.klass = rb_cString;
16063 fake_str.as.heap.len = len;
16064 fake_str.as.heap.ptr = (char *)name;
16065 fake_str.as.heap.aux.capa = len;
16066 str = (VALUE)&fake_str;
16067 rb_enc_associate(str, enc);
16068 OBJ_FREEZE(str);
16069
16070 if (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) {
16071 rb_raise(rb_eEncodingError, "invalid encoding symbol");
16072 }
16073
16074 if (st_lookup(global_symbols.sym_id, str, &data))
16075 return (ID)data;
16076
16077 if (rb_cString && !rb_enc_asciicompat(enc)) {
16078 id = ID_JUNK;
16079 goto new_id;
16080 }
16081 last = len-1;
16082 id = 0;
16083 switch (*m) {
16084 case '$':
16085 id |= ID_GLOBAL;
16086 if ((mb = is_special_global_name(++m, e, enc)) != 0) {
16087 if (!--mb) enc = rb_ascii8bit_encoding();
16088 goto new_id;
16089 }
16090 break;
16091 case '@':
16092 if (m[1] == '@') {
16093 m++;
16094 id |= ID_CLASS;
16095 }
16096 else {
16097 id |= ID_INSTANCE;
16098 }
16099 m++;
16100 break;
16101 default:
16102 c = m[0];
16103 if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
16104
16105 int i;
16106
16107 if (len == 1) {
16108 id = c;
16109 goto id_register;
16110 }
16111 for (i = 0; i < op_tbl_count; i++) {
16112 if (*op_tbl[i].name == *m &&
16113 strcmp(op_tbl[i].name, m) == 0) {
16114 id = op_tbl[i].token;
16115 goto id_register;
16116 }
16117 }
16118 }
16119
16120 if (m[last] == '=') {
16121
16122 id = rb_intern3(name, last, enc);
16123 if (id > tLAST_TOKEN && !is_attrset_id(id)) {
16124 enc = rb_enc_get(rb_id2str(id));
16125 id = rb_id_attrset(id);
16126 goto id_register;
16127 }
16128 id = ID_ATTRSET;
16129 }
16130 else if (rb_enc_isupper(m[0], enc)) {
16131 id = ID_CONST;
16132 }
16133 else {
16134 id = ID_LOCAL;
16135 }
16136 break;
16137 }
16138 mb = 0;
16139 if (!rb_enc_isdigit(*m, enc)) {
16140 while (m <= name + last && is_identchar(m, e, enc)) {
16141 if (ISASCII(*m)) {
16142 m++;
16143 }
16144 else {
16145 mb = 1;
16146 m += rb_enc_mbclen(m, e, enc);
16147 }
16148 }
16149 }
16150 if (m - name < len) id = ID_JUNK;
16151 if (enc != rb_usascii_encoding()) {
16152
16153
16154
16155
16156 if (!mb) {
16157 for (; m <= name + len; ++m) {
16158 if (!ISASCII(*m)) goto mbstr;
16159 }
16160 enc = rb_usascii_encoding();
16161 }
16162 mbstr:;
16163 }
16164 new_id:
16165 if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) {
16166 if (len > 20) {
16167 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
16168 name);
16169 }
16170 else {
16171 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
16172 (int)len, name);
16173 }
16174 }
16175 id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
16176 id_register:
16177 return register_symid(id, name, len, enc);
16178 }
16179
16180 ID
16181 rb_intern2(const char *name, long len)
16182 {
16183 return rb_intern3(name, len, rb_usascii_encoding());
16184 }
16185
16186 #undef rb_intern
16187 ID
16188 rb_intern(const char *name)
16189 {
16190 return rb_intern2(name, strlen(name));
16191 }
16192
16193 ID
16194 rb_intern_str(VALUE str)
16195 {
16196 rb_encoding *enc;
16197 ID id;
16198
16199 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
16200 enc = rb_usascii_encoding();
16201 }
16202 else {
16203 enc = rb_enc_get(str);
16204 }
16205 id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc);
16206 RB_GC_GUARD(str);
16207 return id;
16208 }
16209
16210 VALUE
16211 rb_id2str(ID id)
16212 {
16213 st_data_t data;
16214
16215 if (id < tLAST_TOKEN) {
16216 int i = 0;
16217
16218 if (id < INT_MAX && rb_ispunct((int)id)) {
16219 VALUE str = global_symbols.op_sym[i = (int)id];
16220 if (!str) {
16221 char name[2];
16222 name[0] = (char)id;
16223 name[1] = 0;
16224 str = rb_usascii_str_new(name, 1);
16225 OBJ_FREEZE(str);
16226 global_symbols.op_sym[i] = str;
16227 }
16228 return str;
16229 }
16230 for (i = 0; i < op_tbl_count; i++) {
16231 if (op_tbl[i].token == id) {
16232 VALUE str = global_symbols.op_sym[i];
16233 if (!str) {
16234 str = rb_usascii_str_new2(op_tbl[i].name);
16235 OBJ_FREEZE(str);
16236 global_symbols.op_sym[i] = str;
16237 }
16238 return str;
16239 }
16240 }
16241 }
16242
16243 if (st_lookup(global_symbols.id_str, id, &data)) {
16244 VALUE str = (VALUE)data;
16245 if (RBASIC(str)->klass == 0)
16246 RBASIC(str)->klass = rb_cString;
16247 return str;
16248 }
16249
16250 if (is_attrset_id(id)) {
16251 ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL;
16252 VALUE str;
16253
16254 while (!(str = rb_id2str(id2))) {
16255 if (!is_local_id(id2)) return 0;
16256 id2 = (id & ~ID_SCOPE_MASK) | ID_CONST;
16257 }
16258 str = rb_str_dup(str);
16259 rb_str_cat(str, "=", 1);
16260 rb_intern_str(str);
16261 if (st_lookup(global_symbols.id_str, id, &data)) {
16262 VALUE str = (VALUE)data;
16263 if (RBASIC(str)->klass == 0)
16264 RBASIC(str)->klass = rb_cString;
16265 return str;
16266 }
16267 }
16268 return 0;
16269 }
16270
16271 const char *
16272 rb_id2name(ID id)
16273 {
16274 VALUE str = rb_id2str(id);
16275
16276 if (!str) return 0;
16277 return RSTRING_PTR(str);
16278 }
16279
16280 static int
16281 symbols_i(VALUE sym, ID value, VALUE ary)
16282 {
16283 rb_ary_push(ary, ID2SYM(value));
16284 return ST_CONTINUE;
16285 }
16286
16287
16288
16289
16290
16291
16292
16293
16294
16295
16296
16297
16298
16299
16300
16301
16302
16303 VALUE
16304 rb_sym_all_symbols(void)
16305 {
16306 VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries);
16307
16308 st_foreach(global_symbols.sym_id, symbols_i, ary);
16309 return ary;
16310 }
16311
16312 int
16313 rb_is_const_id(ID id)
16314 {
16315 return is_const_id(id);
16316 }
16317
16318 int
16319 rb_is_class_id(ID id)
16320 {
16321 return is_class_id(id);
16322 }
16323
16324 int
16325 rb_is_instance_id(ID id)
16326 {
16327 return is_instance_id(id);
16328 }
16329
16330 int
16331 rb_is_local_id(ID id)
16332 {
16333 return is_local_id(id);
16334 }
16335
16336 int
16337 rb_is_junk_id(ID id)
16338 {
16339 return is_junk_id(id);
16340 }
16341
16342 #endif
16343
16344 static void
16345 parser_initialize(struct parser_params *parser)
16346 {
16347 parser->eofp = Qfalse;
16348
16349 parser->parser_lex_strterm = 0;
16350 parser->parser_cond_stack = 0;
16351 parser->parser_cmdarg_stack = 0;
16352 parser->parser_class_nest = 0;
16353 parser->parser_paren_nest = 0;
16354 parser->parser_lpar_beg = 0;
16355 parser->parser_in_single = 0;
16356 parser->parser_in_def = 0;
16357 parser->parser_in_defined = 0;
16358 parser->parser_compile_for_eval = 0;
16359 parser->parser_cur_mid = 0;
16360 parser->parser_tokenbuf = NULL;
16361 parser->parser_tokidx = 0;
16362 parser->parser_toksiz = 0;
16363 parser->parser_heredoc_end = 0;
16364 parser->parser_command_start = TRUE;
16365 parser->parser_deferred_nodes = 0;
16366 parser->parser_lex_pbeg = 0;
16367 parser->parser_lex_p = 0;
16368 parser->parser_lex_pend = 0;
16369 parser->parser_lvtbl = 0;
16370 parser->parser_ruby__end__seen = 0;
16371 parser->parser_ruby_sourcefile = 0;
16372 #ifndef RIPPER
16373 parser->is_ripper = 0;
16374 parser->parser_eval_tree_begin = 0;
16375 parser->parser_eval_tree = 0;
16376 #else
16377 parser->is_ripper = 1;
16378 parser->parser_ruby_sourcefile_string = Qnil;
16379 parser->delayed = Qnil;
16380
16381 parser->result = Qnil;
16382 parser->parsing_thread = Qnil;
16383 parser->toplevel_p = TRUE;
16384 #endif
16385 #ifdef YYMALLOC
16386 parser->heap = NULL;
16387 #endif
16388 parser->enc = rb_usascii_encoding();
16389 }
16390
16391 #ifdef RIPPER
16392 #define parser_mark ripper_parser_mark
16393 #define parser_free ripper_parser_free
16394 #endif
16395
16396 static void
16397 parser_mark(void *ptr)
16398 {
16399 struct parser_params *p = (struct parser_params*)ptr;
16400
16401 rb_gc_mark((VALUE)p->parser_lex_strterm);
16402 rb_gc_mark((VALUE)p->parser_deferred_nodes);
16403 rb_gc_mark(p->parser_lex_input);
16404 rb_gc_mark(p->parser_lex_lastline);
16405 rb_gc_mark(p->parser_lex_nextline);
16406 #ifndef RIPPER
16407 rb_gc_mark((VALUE)p->parser_eval_tree_begin) ;
16408 rb_gc_mark((VALUE)p->parser_eval_tree) ;
16409 rb_gc_mark(p->debug_lines);
16410 #else
16411 rb_gc_mark(p->parser_ruby_sourcefile_string);
16412 rb_gc_mark(p->delayed);
16413 rb_gc_mark(p->value);
16414 rb_gc_mark(p->result);
16415 rb_gc_mark(p->parsing_thread);
16416 #endif
16417 #ifdef YYMALLOC
16418 rb_gc_mark((VALUE)p->heap);
16419 #endif
16420 }
16421
16422 static void
16423 parser_free(void *ptr)
16424 {
16425 struct parser_params *p = (struct parser_params*)ptr;
16426 struct local_vars *local, *prev;
16427
16428 if (p->parser_tokenbuf) {
16429 xfree(p->parser_tokenbuf);
16430 }
16431 for (local = p->parser_lvtbl; local; local = prev) {
16432 if (local->vars) xfree(local->vars);
16433 prev = local->prev;
16434 xfree(local);
16435 }
16436 #ifndef RIPPER
16437 xfree(p->parser_ruby_sourcefile);
16438 #endif
16439 xfree(p);
16440 }
16441
16442 static size_t
16443 parser_memsize(const void *ptr)
16444 {
16445 struct parser_params *p = (struct parser_params*)ptr;
16446 struct local_vars *local;
16447 size_t size = sizeof(*p);
16448
16449 if (!ptr) return 0;
16450 size += p->parser_toksiz;
16451 for (local = p->parser_lvtbl; local; local = local->prev) {
16452 size += sizeof(*local);
16453 if (local->vars) size += local->vars->capa * sizeof(ID);
16454 }
16455 #ifndef RIPPER
16456 if (p->parser_ruby_sourcefile) {
16457 size += strlen(p->parser_ruby_sourcefile) + 1;
16458 }
16459 #endif
16460 return size;
16461 }
16462
16463 static
16464 #ifndef RIPPER
16465 const
16466 #endif
16467 rb_data_type_t parser_data_type = {
16468 "parser",
16469 {
16470 parser_mark,
16471 parser_free,
16472 parser_memsize,
16473 },
16474 };
16475
16476 #ifndef RIPPER
16477 #undef rb_reserved_word
16478
16479 const struct kwtable *
16480 rb_reserved_word(const char *str, unsigned int len)
16481 {
16482 return reserved_word(str, len);
16483 }
16484
16485 static struct parser_params *
16486 parser_new(void)
16487 {
16488 struct parser_params *p;
16489
16490 p = ALLOC_N(struct parser_params, 1);
16491 MEMZERO(p, struct parser_params, 1);
16492 parser_initialize(p);
16493 return p;
16494 }
16495
16496 VALUE
16497 rb_parser_new(void)
16498 {
16499 struct parser_params *p = parser_new();
16500
16501 return TypedData_Wrap_Struct(0, &parser_data_type, p);
16502 }
16503
16504
16505
16506
16507
16508
16509
16510 VALUE
16511 rb_parser_end_seen_p(VALUE vparser)
16512 {
16513 struct parser_params *parser;
16514
16515 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16516 return ruby__end__seen ? Qtrue : Qfalse;
16517 }
16518
16519
16520
16521
16522
16523
16524
16525 VALUE
16526 rb_parser_encoding(VALUE vparser)
16527 {
16528 struct parser_params *parser;
16529
16530 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16531 return rb_enc_from_encoding(parser->enc);
16532 }
16533
16534
16535
16536
16537
16538
16539
16540 VALUE
16541 rb_parser_get_yydebug(VALUE self)
16542 {
16543 struct parser_params *parser;
16544
16545 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16546 return yydebug ? Qtrue : Qfalse;
16547 }
16548
16549
16550
16551
16552
16553
16554
16555 VALUE
16556 rb_parser_set_yydebug(VALUE self, VALUE flag)
16557 {
16558 struct parser_params *parser;
16559
16560 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16561 yydebug = RTEST(flag);
16562 return flag;
16563 }
16564
16565 #ifdef YYMALLOC
16566 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
16567 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
16568 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
16569 (n)->u3.cnt = (c), (p))
16570
16571 void *
16572 rb_parser_malloc(struct parser_params *parser, size_t size)
16573 {
16574 size_t cnt = HEAPCNT(1, size);
16575 NODE *n = NEWHEAP();
16576 void *ptr = xmalloc(size);
16577
16578 return ADD2HEAP(n, cnt, ptr);
16579 }
16580
16581 void *
16582 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
16583 {
16584 size_t cnt = HEAPCNT(nelem, size);
16585 NODE *n = NEWHEAP();
16586 void *ptr = xcalloc(nelem, size);
16587
16588 return ADD2HEAP(n, cnt, ptr);
16589 }
16590
16591 void *
16592 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
16593 {
16594 NODE *n;
16595 size_t cnt = HEAPCNT(1, size);
16596
16597 if (ptr && (n = parser->heap) != NULL) {
16598 do {
16599 if (n->u1.node == ptr) {
16600 n->u1.node = ptr = xrealloc(ptr, size);
16601 if (n->u3.cnt) n->u3.cnt = cnt;
16602 return ptr;
16603 }
16604 } while ((n = n->u2.node) != NULL);
16605 }
16606 n = NEWHEAP();
16607 ptr = xrealloc(ptr, size);
16608 return ADD2HEAP(n, cnt, ptr);
16609 }
16610
16611 void
16612 rb_parser_free(struct parser_params *parser, void *ptr)
16613 {
16614 NODE **prev = &parser->heap, *n;
16615
16616 while ((n = *prev) != NULL) {
16617 if (n->u1.node == ptr) {
16618 *prev = n->u2.node;
16619 rb_gc_force_recycle((VALUE)n);
16620 break;
16621 }
16622 prev = &n->u2.node;
16623 }
16624 xfree(ptr);
16625 }
16626 #endif
16627 #endif
16628
16629 #ifdef RIPPER
16630 #ifdef RIPPER_DEBUG
16631 extern int rb_is_pointer_to_heap(VALUE);
16632
16633
16634 static VALUE
16635 ripper_validate_object(VALUE self, VALUE x)
16636 {
16637 if (x == Qfalse) return x;
16638 if (x == Qtrue) return x;
16639 if (x == Qnil) return x;
16640 if (x == Qundef)
16641 rb_raise(rb_eArgError, "Qundef given");
16642 if (FIXNUM_P(x)) return x;
16643 if (SYMBOL_P(x)) return x;
16644 if (!rb_is_pointer_to_heap(x))
16645 rb_raise(rb_eArgError, "invalid pointer: %p", x);
16646 switch (TYPE(x)) {
16647 case T_STRING:
16648 case T_OBJECT:
16649 case T_ARRAY:
16650 case T_BIGNUM:
16651 case T_FLOAT:
16652 return x;
16653 case T_NODE:
16654 if (nd_type(x) != NODE_LASGN) {
16655 rb_raise(rb_eArgError, "NODE given: %p", x);
16656 }
16657 return ((NODE *)x)->nd_rval;
16658 default:
16659 rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
16660 x, rb_obj_classname(x));
16661 }
16662 return x;
16663 }
16664 #endif
16665
16666 #define validate(x) ((x) = get_value(x))
16667
16668 static VALUE
16669 ripper_dispatch0(struct parser_params *parser, ID mid)
16670 {
16671 return rb_funcall(parser->value, mid, 0);
16672 }
16673
16674 static VALUE
16675 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
16676 {
16677 validate(a);
16678 return rb_funcall(parser->value, mid, 1, a);
16679 }
16680
16681 static VALUE
16682 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
16683 {
16684 validate(a);
16685 validate(b);
16686 return rb_funcall(parser->value, mid, 2, a, b);
16687 }
16688
16689 static VALUE
16690 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
16691 {
16692 validate(a);
16693 validate(b);
16694 validate(c);
16695 return rb_funcall(parser->value, mid, 3, a, b, c);
16696 }
16697
16698 static VALUE
16699 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
16700 {
16701 validate(a);
16702 validate(b);
16703 validate(c);
16704 validate(d);
16705 return rb_funcall(parser->value, mid, 4, a, b, c, d);
16706 }
16707
16708 static VALUE
16709 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
16710 {
16711 validate(a);
16712 validate(b);
16713 validate(c);
16714 validate(d);
16715 validate(e);
16716 return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
16717 }
16718
16719 static const struct kw_assoc {
16720 ID id;
16721 const char *name;
16722 } keyword_to_name[] = {
16723 {keyword_class, "class"},
16724 {keyword_module, "module"},
16725 {keyword_def, "def"},
16726 {keyword_undef, "undef"},
16727 {keyword_begin, "begin"},
16728 {keyword_rescue, "rescue"},
16729 {keyword_ensure, "ensure"},
16730 {keyword_end, "end"},
16731 {keyword_if, "if"},
16732 {keyword_unless, "unless"},
16733 {keyword_then, "then"},
16734 {keyword_elsif, "elsif"},
16735 {keyword_else, "else"},
16736 {keyword_case, "case"},
16737 {keyword_when, "when"},
16738 {keyword_while, "while"},
16739 {keyword_until, "until"},
16740 {keyword_for, "for"},
16741 {keyword_break, "break"},
16742 {keyword_next, "next"},
16743 {keyword_redo, "redo"},
16744 {keyword_retry, "retry"},
16745 {keyword_in, "in"},
16746 {keyword_do, "do"},
16747 {keyword_do_cond, "do"},
16748 {keyword_do_block, "do"},
16749 {keyword_return, "return"},
16750 {keyword_yield, "yield"},
16751 {keyword_super, "super"},
16752 {keyword_self, "self"},
16753 {keyword_nil, "nil"},
16754 {keyword_true, "true"},
16755 {keyword_false, "false"},
16756 {keyword_and, "and"},
16757 {keyword_or, "or"},
16758 {keyword_not, "not"},
16759 {modifier_if, "if"},
16760 {modifier_unless, "unless"},
16761 {modifier_while, "while"},
16762 {modifier_until, "until"},
16763 {modifier_rescue, "rescue"},
16764 {keyword_alias, "alias"},
16765 {keyword_defined, "defined?"},
16766 {keyword_BEGIN, "BEGIN"},
16767 {keyword_END, "END"},
16768 {keyword__LINE__, "__LINE__"},
16769 {keyword__FILE__, "__FILE__"},
16770 {keyword__ENCODING__, "__ENCODING__"},
16771 {0, NULL}
16772 };
16773
16774 static const char*
16775 keyword_id_to_str(ID id)
16776 {
16777 const struct kw_assoc *a;
16778
16779 for (a = keyword_to_name; a->id; a++) {
16780 if (a->id == id)
16781 return a->name;
16782 }
16783 return NULL;
16784 }
16785
16786 #undef ripper_id2sym
16787 static VALUE
16788 ripper_id2sym(ID id)
16789 {
16790 const char *name;
16791 char buf[8];
16792
16793 if (id <= 256) {
16794 buf[0] = (char)id;
16795 buf[1] = '\0';
16796 return ID2SYM(rb_intern2(buf, 1));
16797 }
16798 if ((name = keyword_id_to_str(id))) {
16799 return ID2SYM(rb_intern(name));
16800 }
16801 switch (id) {
16802 case tOROP:
16803 name = "||";
16804 break;
16805 case tANDOP:
16806 name = "&&";
16807 break;
16808 default:
16809 name = rb_id2name(id);
16810 if (!name) {
16811 rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
16812 }
16813 return ID2SYM(id);
16814 }
16815 return ID2SYM(rb_intern(name));
16816 }
16817
16818 static ID
16819 ripper_get_id(VALUE v)
16820 {
16821 NODE *nd;
16822 if (!RB_TYPE_P(v, T_NODE)) return 0;
16823 nd = (NODE *)v;
16824 if (nd_type(nd) != NODE_LASGN) return 0;
16825 return nd->nd_vid;
16826 }
16827
16828 static VALUE
16829 ripper_get_value(VALUE v)
16830 {
16831 NODE *nd;
16832 if (v == Qundef) return Qnil;
16833 if (!RB_TYPE_P(v, T_NODE)) return v;
16834 nd = (NODE *)v;
16835 if (nd_type(nd) != NODE_LASGN) return Qnil;
16836 return nd->nd_rval;
16837 }
16838
16839 static void
16840 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
16841 {
16842 VALUE str;
16843 va_list args;
16844
16845 va_start(args, fmt);
16846 str = rb_vsprintf(fmt, args);
16847 va_end(args);
16848 rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
16849 }
16850
16851 static void
16852 ripper_warn0(struct parser_params *parser, const char *fmt)
16853 {
16854 rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
16855 }
16856
16857 static void
16858 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
16859 {
16860 rb_funcall(parser->value, rb_intern("warn"), 2,
16861 STR_NEW2(fmt), INT2NUM(a));
16862 }
16863
16864 #if 0
16865 static void
16866 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
16867 {
16868 rb_funcall(parser->value, rb_intern("warn"), 2,
16869 STR_NEW2(fmt), STR_NEW2(str));
16870 }
16871 #endif
16872
16873 static void
16874 ripper_warning0(struct parser_params *parser, const char *fmt)
16875 {
16876 rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
16877 }
16878
16879 static void
16880 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
16881 {
16882 rb_funcall(parser->value, rb_intern("warning"), 2,
16883 STR_NEW2(fmt), STR_NEW2(str));
16884 }
16885
16886 static VALUE
16887 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
16888 {
16889 return rb_funcall(src, ripper_id_gets, 0);
16890 }
16891
16892 static VALUE
16893 ripper_s_allocate(VALUE klass)
16894 {
16895 struct parser_params *p;
16896 VALUE self;
16897
16898 p = ALLOC_N(struct parser_params, 1);
16899 MEMZERO(p, struct parser_params, 1);
16900 self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
16901 p->value = self;
16902 return self;
16903 }
16904
16905 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
16906
16907
16908
16909
16910
16911
16912
16913
16914
16915
16916
16917 static VALUE
16918 ripper_initialize(int argc, VALUE *argv, VALUE self)
16919 {
16920 struct parser_params *parser;
16921 VALUE src, fname, lineno;
16922
16923 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16924 rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
16925 if (rb_obj_respond_to(src, ripper_id_gets, 0)) {
16926 parser->parser_lex_gets = ripper_lex_get_generic;
16927 }
16928 else {
16929 StringValue(src);
16930 parser->parser_lex_gets = lex_get_str;
16931 }
16932 parser->parser_lex_input = src;
16933 parser->eofp = Qfalse;
16934 if (NIL_P(fname)) {
16935 fname = STR_NEW2("(ripper)");
16936 }
16937 else {
16938 StringValue(fname);
16939 }
16940 parser_initialize(parser);
16941
16942 parser->parser_ruby_sourcefile_string = fname;
16943 parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
16944 parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
16945
16946 return Qnil;
16947 }
16948
16949 struct ripper_args {
16950 struct parser_params *parser;
16951 int argc;
16952 VALUE *argv;
16953 };
16954
16955 static VALUE
16956 ripper_parse0(VALUE parser_v)
16957 {
16958 struct parser_params *parser;
16959
16960 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16961 parser_prepare(parser);
16962 ripper_yyparse((void*)parser);
16963 return parser->result;
16964 }
16965
16966 static VALUE
16967 ripper_ensure(VALUE parser_v)
16968 {
16969 struct parser_params *parser;
16970
16971 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16972 parser->parsing_thread = Qnil;
16973 return Qnil;
16974 }
16975
16976
16977
16978
16979
16980
16981
16982 static VALUE
16983 ripper_parse(VALUE self)
16984 {
16985 struct parser_params *parser;
16986
16987 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16988 if (!ripper_initialized_p(parser)) {
16989 rb_raise(rb_eArgError, "method called for uninitialized object");
16990 }
16991 if (!NIL_P(parser->parsing_thread)) {
16992 if (parser->parsing_thread == rb_thread_current())
16993 rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
16994 else
16995 rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
16996 }
16997 parser->parsing_thread = rb_thread_current();
16998 rb_ensure(ripper_parse0, self, ripper_ensure, self);
16999
17000 return parser->result;
17001 }
17002
17003
17004
17005
17006
17007
17008
17009
17010 static VALUE
17011 ripper_column(VALUE self)
17012 {
17013 struct parser_params *parser;
17014 long col;
17015
17016 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17017 if (!ripper_initialized_p(parser)) {
17018 rb_raise(rb_eArgError, "method called for uninitialized object");
17019 }
17020 if (NIL_P(parser->parsing_thread)) return Qnil;
17021 col = parser->tokp - parser->parser_lex_pbeg;
17022 return LONG2NUM(col);
17023 }
17024
17025
17026
17027
17028
17029
17030
17031 static VALUE
17032 ripper_filename(VALUE self)
17033 {
17034 struct parser_params *parser;
17035
17036 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17037 if (!ripper_initialized_p(parser)) {
17038 rb_raise(rb_eArgError, "method called for uninitialized object");
17039 }
17040 return parser->parser_ruby_sourcefile_string;
17041 }
17042
17043
17044
17045
17046
17047
17048
17049
17050 static VALUE
17051 ripper_lineno(VALUE self)
17052 {
17053 struct parser_params *parser;
17054
17055 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17056 if (!ripper_initialized_p(parser)) {
17057 rb_raise(rb_eArgError, "method called for uninitialized object");
17058 }
17059 if (NIL_P(parser->parsing_thread)) return Qnil;
17060 return INT2NUM(parser->parser_ruby_sourceline);
17061 }
17062
17063 #ifdef RIPPER_DEBUG
17064
17065 static VALUE
17066 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
17067 {
17068 StringValue(msg);
17069 if (obj == Qundef) {
17070 rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg));
17071 }
17072 return Qnil;
17073 }
17074
17075
17076 static VALUE
17077 ripper_value(VALUE self, VALUE obj)
17078 {
17079 return ULONG2NUM(obj);
17080 }
17081 #endif
17082
17083
17084 void
17085 InitVM_ripper(void)
17086 {
17087 parser_data_type.parent = RTYPEDDATA_TYPE(rb_parser_new());
17088 }
17089
17090 void
17091 Init_ripper(void)
17092 {
17093 VALUE Ripper;
17094
17095 InitVM(ripper);
17096 Ripper = rb_define_class("Ripper", rb_cObject);
17097 rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
17098 rb_define_alloc_func(Ripper, ripper_s_allocate);
17099 rb_define_method(Ripper, "initialize", ripper_initialize, -1);
17100 rb_define_method(Ripper, "parse", ripper_parse, 0);
17101 rb_define_method(Ripper, "column", ripper_column, 0);
17102 rb_define_method(Ripper, "filename", ripper_filename, 0);
17103 rb_define_method(Ripper, "lineno", ripper_lineno, 0);
17104 rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
17105 rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
17106 rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
17107 rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
17108 #ifdef RIPPER_DEBUG
17109 rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
17110 rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
17111 rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
17112 #endif
17113
17114 ripper_id_gets = rb_intern("gets");
17115 ripper_init_eventids1(Ripper);
17116 ripper_init_eventids2(Ripper);
17117
17118 (void)rb_intern("||");
17119 (void)rb_intern("&&");
17120
17121 # if 0
17122
17123
17124
17125
17126
17127
17128
17129 rb_define_global_const("SCRIPT_LINES__", Qnil);
17130 #endif
17131
17132 }
17133 #endif
17134
17135