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 };
00164
00165 #define DVARS_INHERIT ((void*)1)
00166 #define DVARS_TOPSCOPE NULL
00167 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
00168 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
00169
00170 static int
00171 vtable_size(const struct vtable *tbl)
00172 {
00173 if (POINTER_P(tbl)) {
00174 return tbl->pos;
00175 }
00176 else {
00177 return 0;
00178 }
00179 }
00180
00181 #define VTBL_DEBUG 0
00182
00183 static struct vtable *
00184 vtable_alloc(struct vtable *prev)
00185 {
00186 struct vtable *tbl = ALLOC(struct vtable);
00187 tbl->pos = 0;
00188 tbl->capa = 8;
00189 tbl->tbl = ALLOC_N(ID, tbl->capa);
00190 tbl->prev = prev;
00191 if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
00192 return tbl;
00193 }
00194
00195 static void
00196 vtable_free(struct vtable *tbl)
00197 {
00198 if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
00199 if (POINTER_P(tbl)) {
00200 if (tbl->tbl) {
00201 xfree(tbl->tbl);
00202 }
00203 xfree(tbl);
00204 }
00205 }
00206
00207 static void
00208 vtable_add(struct vtable *tbl, ID id)
00209 {
00210 if (!POINTER_P(tbl)) {
00211 rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
00212 }
00213 if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id));
00214
00215 if (tbl->pos == tbl->capa) {
00216 tbl->capa = tbl->capa * 2;
00217 REALLOC_N(tbl->tbl, ID, tbl->capa);
00218 }
00219 tbl->tbl[tbl->pos++] = id;
00220 }
00221
00222 static int
00223 vtable_included(const struct vtable * tbl, ID id)
00224 {
00225 int i;
00226
00227 if (POINTER_P(tbl)) {
00228 for (i = 0; i < tbl->pos; i++) {
00229 if (tbl->tbl[i] == id) {
00230 return i+1;
00231 }
00232 }
00233 }
00234 return 0;
00235 }
00236
00237
00238 #ifndef RIPPER
00239 typedef struct token_info {
00240 const char *token;
00241 int linenum;
00242 int column;
00243 int nonspc;
00244 struct token_info *next;
00245 } token_info;
00246 #endif
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257 struct parser_params {
00258 int is_ripper;
00259 NODE *heap;
00260
00261 YYSTYPE *parser_yylval;
00262 VALUE eofp;
00263
00264 NODE *parser_lex_strterm;
00265 enum lex_state_e parser_lex_state;
00266 stack_type parser_cond_stack;
00267 stack_type parser_cmdarg_stack;
00268 int parser_class_nest;
00269 int parser_paren_nest;
00270 int parser_lpar_beg;
00271 int parser_in_single;
00272 int parser_in_def;
00273 int parser_compile_for_eval;
00274 VALUE parser_cur_mid;
00275 int parser_in_defined;
00276 char *parser_tokenbuf;
00277 int parser_tokidx;
00278 int parser_toksiz;
00279 VALUE parser_lex_input;
00280 VALUE parser_lex_lastline;
00281 VALUE parser_lex_nextline;
00282 const char *parser_lex_pbeg;
00283 const char *parser_lex_p;
00284 const char *parser_lex_pend;
00285 int parser_heredoc_end;
00286 int parser_command_start;
00287 NODE *parser_deferred_nodes;
00288 long parser_lex_gets_ptr;
00289 VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
00290 struct local_vars *parser_lvtbl;
00291 int parser_ruby__end__seen;
00292 int line_count;
00293 int has_shebang;
00294 char *parser_ruby_sourcefile;
00295 int parser_ruby_sourceline;
00296 rb_encoding *enc;
00297 rb_encoding *utf8;
00298
00299 int parser_yydebug;
00300
00301 #ifndef RIPPER
00302
00303 NODE *parser_eval_tree_begin;
00304 NODE *parser_eval_tree;
00305 VALUE debug_lines;
00306 VALUE coverage;
00307 int nerr;
00308
00309 int parser_token_info_enabled;
00310 token_info *parser_token_info;
00311 #else
00312
00313 VALUE parser_ruby_sourcefile_string;
00314 const char *tokp;
00315 VALUE delayed;
00316 int delayed_line;
00317 int delayed_col;
00318
00319 VALUE value;
00320 VALUE result;
00321 VALUE parsing_thread;
00322 int toplevel_p;
00323 #endif
00324 };
00325
00326 #define UTF8_ENC() (parser->utf8 ? parser->utf8 : \
00327 (parser->utf8 = rb_utf8_encoding()))
00328 #define STR_NEW(p,n) rb_enc_str_new((p),(n),parser->enc)
00329 #define STR_NEW0() rb_enc_str_new(0,0,parser->enc)
00330 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),parser->enc)
00331 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),parser->enc)
00332 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
00333 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), parser->enc)
00334
00335 static int parser_yyerror(struct parser_params*, const char*);
00336 #define yyerror(msg) parser_yyerror(parser, (msg))
00337
00338 #define YYLEX_PARAM parser
00339
00340 #define lex_strterm (parser->parser_lex_strterm)
00341 #define lex_state (parser->parser_lex_state)
00342 #define cond_stack (parser->parser_cond_stack)
00343 #define cmdarg_stack (parser->parser_cmdarg_stack)
00344 #define class_nest (parser->parser_class_nest)
00345 #define paren_nest (parser->parser_paren_nest)
00346 #define lpar_beg (parser->parser_lpar_beg)
00347 #define in_single (parser->parser_in_single)
00348 #define in_def (parser->parser_in_def)
00349 #define compile_for_eval (parser->parser_compile_for_eval)
00350 #define cur_mid (parser->parser_cur_mid)
00351 #define in_defined (parser->parser_in_defined)
00352 #define tokenbuf (parser->parser_tokenbuf)
00353 #define tokidx (parser->parser_tokidx)
00354 #define toksiz (parser->parser_toksiz)
00355 #define lex_input (parser->parser_lex_input)
00356 #define lex_lastline (parser->parser_lex_lastline)
00357 #define lex_nextline (parser->parser_lex_nextline)
00358 #define lex_pbeg (parser->parser_lex_pbeg)
00359 #define lex_p (parser->parser_lex_p)
00360 #define lex_pend (parser->parser_lex_pend)
00361 #define heredoc_end (parser->parser_heredoc_end)
00362 #define command_start (parser->parser_command_start)
00363 #define deferred_nodes (parser->parser_deferred_nodes)
00364 #define lex_gets_ptr (parser->parser_lex_gets_ptr)
00365 #define lex_gets (parser->parser_lex_gets)
00366 #define lvtbl (parser->parser_lvtbl)
00367 #define ruby__end__seen (parser->parser_ruby__end__seen)
00368 #define ruby_sourceline (parser->parser_ruby_sourceline)
00369 #define ruby_sourcefile (parser->parser_ruby_sourcefile)
00370 #define current_enc (parser->enc)
00371 #define yydebug (parser->parser_yydebug)
00372 #ifdef RIPPER
00373 #else
00374 #define ruby_eval_tree (parser->parser_eval_tree)
00375 #define ruby_eval_tree_begin (parser->parser_eval_tree_begin)
00376 #define ruby_debug_lines (parser->debug_lines)
00377 #define ruby_coverage (parser->coverage)
00378 #endif
00379
00380 static int yylex(void*, void*);
00381
00382 #ifndef RIPPER
00383 #define yyparse ruby_yyparse
00384
00385 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
00386 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, (type), (a1), (a2), (a3))
00387
00388 static NODE *cond_gen(struct parser_params*,NODE*);
00389 #define cond(node) cond_gen(parser, (node))
00390 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
00391 #define logop(type,node1,node2) logop_gen(parser, (type), (node1), (node2))
00392
00393 static NODE *newline_node(NODE*);
00394 static void fixpos(NODE*,NODE*);
00395
00396 static int value_expr_gen(struct parser_params*,NODE*);
00397 static void void_expr_gen(struct parser_params*,NODE*);
00398 static NODE *remove_begin(NODE*);
00399 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
00400 #define void_expr0(node) void_expr_gen(parser, (node))
00401 #define void_expr(node) void_expr0((node) = remove_begin(node))
00402 static void void_stmts_gen(struct parser_params*,NODE*);
00403 #define void_stmts(node) void_stmts_gen(parser, (node))
00404 static void reduce_nodes_gen(struct parser_params*,NODE**);
00405 #define reduce_nodes(n) reduce_nodes_gen(parser,(n))
00406 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
00407 #define block_dup_check(n1,n2) block_dup_check_gen(parser,(n1),(n2))
00408
00409 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
00410 #define block_append(h,t) block_append_gen(parser,(h),(t))
00411 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
00412 #define list_append(l,i) list_append_gen(parser,(l),(i))
00413 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
00414 #define list_concat(h,t) list_concat_gen(parser,(h),(t))
00415 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
00416 #define arg_append(h,t) arg_append_gen(parser,(h),(t))
00417 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
00418 #define arg_concat(h,t) arg_concat_gen(parser,(h),(t))
00419 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
00420 #define literal_concat(h,t) literal_concat_gen(parser,(h),(t))
00421 static int literal_concat0(struct parser_params *, VALUE, VALUE);
00422 static NODE *new_evstr_gen(struct parser_params*,NODE*);
00423 #define new_evstr(n) new_evstr_gen(parser,(n))
00424 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
00425 #define evstr2dstr(n) evstr2dstr_gen(parser,(n))
00426 static NODE *splat_array(NODE*);
00427
00428 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
00429 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, (recv),(id),(arg1))
00430 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
00431 #define call_uni_op(recv,id) call_uni_op_gen(parser, (recv),(id))
00432
00433 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,ID);
00434 #define new_args(f,o,r,p,b) new_args_gen(parser, (f),(o),(r),(p),(b))
00435
00436 static NODE *negate_lit(NODE*);
00437 static NODE *ret_args_gen(struct parser_params*,NODE*);
00438 #define ret_args(node) ret_args_gen(parser, (node))
00439 static NODE *arg_blk_pass(NODE*,NODE*);
00440 static NODE *new_yield_gen(struct parser_params*,NODE*);
00441 #define new_yield(node) new_yield_gen(parser, (node))
00442
00443 static NODE *gettable_gen(struct parser_params*,ID);
00444 #define gettable(id) gettable_gen(parser,(id))
00445 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
00446 #define assignable(id,node) assignable_gen(parser, (id), (node))
00447
00448 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
00449 #define aryset(node1,node2) aryset_gen(parser, (node1), (node2))
00450 static NODE *attrset_gen(struct parser_params*,NODE*,ID);
00451 #define attrset(node,id) attrset_gen(parser, (node), (id))
00452
00453 static void rb_backref_error_gen(struct parser_params*,NODE*);
00454 #define rb_backref_error(n) rb_backref_error_gen(parser,(n))
00455 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
00456 #define node_assign(node1, node2) node_assign_gen(parser, (node1), (node2))
00457
00458 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
00459 #define match_op(node1,node2) match_op_gen(parser, (node1), (node2))
00460
00461 static ID *local_tbl_gen(struct parser_params*);
00462 #define local_tbl() local_tbl_gen(parser)
00463
00464 static void fixup_nodes(NODE **);
00465
00466 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
00467 #define reg_compile(str,options) reg_compile_gen(parser, (str), (options))
00468 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
00469 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, (str), (options))
00470 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
00471 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, (str), (options))
00472 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
00473 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,(regexp),(match))
00474
00475 #define get_id(id) (id)
00476 #define get_value(val) (val)
00477 #else
00478 #define remove_begin(node) (node)
00479 #define rb_dvar_defined(id) 0
00480 #define rb_local_defined(id) 0
00481 static ID ripper_get_id(VALUE);
00482 #define get_id(id) ripper_get_id(id)
00483 static VALUE ripper_get_value(VALUE);
00484 #define get_value(val) ripper_get_value(val)
00485 static VALUE assignable_gen(struct parser_params*,VALUE);
00486 #define assignable(lhs,node) assignable_gen(parser, (lhs))
00487 static int id_is_var_gen(struct parser_params *parser, ID id);
00488 #define id_is_var(id) id_is_var_gen(parser, (id))
00489 #endif
00490
00491 static ID formal_argument_gen(struct parser_params*, ID);
00492 #define formal_argument(id) formal_argument_gen(parser, (id))
00493 static ID shadowing_lvar_gen(struct parser_params*,ID);
00494 #define shadowing_lvar(name) shadowing_lvar_gen(parser, (name))
00495 static void new_bv_gen(struct parser_params*,ID);
00496 #define new_bv(id) new_bv_gen(parser, (id))
00497
00498 static void local_push_gen(struct parser_params*,int);
00499 #define local_push(top) local_push_gen(parser,(top))
00500 static void local_pop_gen(struct parser_params*);
00501 #define local_pop() local_pop_gen(parser)
00502 static int local_var_gen(struct parser_params*, ID);
00503 #define local_var(id) local_var_gen(parser, (id));
00504 static int arg_var_gen(struct parser_params*, ID);
00505 #define arg_var(id) arg_var_gen(parser, (id))
00506 static int local_id_gen(struct parser_params*, ID);
00507 #define local_id(id) local_id_gen(parser, (id))
00508 static ID internal_id_gen(struct parser_params*);
00509 #define internal_id() internal_id_gen(parser)
00510
00511 static const struct vtable *dyna_push_gen(struct parser_params *);
00512 #define dyna_push() dyna_push_gen(parser)
00513 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
00514 #define dyna_pop(node) dyna_pop_gen(parser, (node))
00515 static int dyna_in_block_gen(struct parser_params*);
00516 #define dyna_in_block() dyna_in_block_gen(parser)
00517 #define dyna_var(id) local_var(id)
00518 static int dvar_defined_gen(struct parser_params*,ID,int);
00519 #define dvar_defined(id) dvar_defined_gen(parser, (id), 0)
00520 #define dvar_defined_get(id) dvar_defined_gen(parser, (id), 1)
00521 static int dvar_curr_gen(struct parser_params*,ID);
00522 #define dvar_curr(id) dvar_curr_gen(parser, (id))
00523
00524 static int lvar_defined_gen(struct parser_params*, ID);
00525 #define lvar_defined(id) lvar_defined_gen(parser, (id))
00526
00527 #define RE_OPTION_ONCE (1<<16)
00528 #define RE_OPTION_ENCODING_SHIFT 8
00529 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
00530 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
00531 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
00532 #define RE_OPTION_MASK 0xff
00533 #define RE_OPTION_ARG_ENCODING_NONE 32
00534
00535 #define NODE_STRTERM NODE_ZARRAY
00536 #define NODE_HEREDOC NODE_ARRAY
00537 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
00538 #define nd_func u1.id
00539 #if SIZEOF_SHORT == 2
00540 #define nd_term(node) ((signed short)(node)->u2.id)
00541 #else
00542 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
00543 #endif
00544 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
00545 #define nd_nest u3.cnt
00546
00547
00548
00549 #ifdef RIPPER
00550 #define RIPPER_VERSION "0.1.0"
00551
00552 #include "eventids1.c"
00553 #include "eventids2.c"
00554 static ID ripper_id_gets;
00555
00556 static VALUE ripper_dispatch0(struct parser_params*,ID);
00557 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
00558 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
00559 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
00560 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
00561 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
00562
00563 #define dispatch0(n) ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
00564 #define dispatch1(n,a) ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a))
00565 #define dispatch2(n,a,b) ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), (a), (b))
00566 #define dispatch3(n,a,b,c) ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c))
00567 #define dispatch4(n,a,b,c,d) ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d))
00568 #define dispatch5(n,a,b,c,d,e) ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e))
00569
00570 #define yyparse ripper_yyparse
00571
00572 #define ripper_intern(s) ID2SYM(rb_intern(s))
00573 static VALUE ripper_id2sym(ID);
00574 #ifdef __GNUC__
00575 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
00576 ID2SYM(id) : ripper_id2sym(id))
00577 #endif
00578
00579 #define arg_new() dispatch0(args_new)
00580 #define arg_add(l,a) dispatch2(args_add, (l), (a))
00581 #define arg_add_star(l,a) dispatch2(args_add_star, (l), (a))
00582 #define arg_add_block(l,b) dispatch2(args_add_block, (l), (b))
00583 #define arg_add_optblock(l,b) ((b)==Qundef? (l) : dispatch2(args_add_block, (l), (b)))
00584 #define bare_assoc(v) dispatch1(bare_assoc_hash, (v))
00585 #define arg_add_assocs(l,b) arg_add((l), bare_assoc(b))
00586
00587 #define args2mrhs(a) dispatch1(mrhs_new_from_args, (a))
00588 #define mrhs_new() dispatch0(mrhs_new)
00589 #define mrhs_add(l,a) dispatch2(mrhs_add, (l), (a))
00590 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, (l), (a))
00591
00592 #define mlhs_new() dispatch0(mlhs_new)
00593 #define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a))
00594 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a))
00595
00596 #define params_new(pars, opts, rest, pars2, blk) \
00597 dispatch5(params, (pars), (opts), (rest), (pars2), (blk))
00598
00599 #define blockvar_new(p,v) dispatch2(block_var, (p), (v))
00600 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a))
00601 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, (l), (a))
00602
00603 #define method_optarg(m,a) ((a)==Qundef ? (m) : dispatch2(method_add_arg,(m),(a)))
00604 #define method_arg(m,a) dispatch2(method_add_arg,(m),(a))
00605 #define method_add_block(m,b) dispatch2(method_add_block, (m), (b))
00606
00607 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
00608
00609 #define FIXME 0
00610
00611 #endif
00612
00613 #ifndef RIPPER
00614 # define ifndef_ripper(x) (x)
00615 #else
00616 # define ifndef_ripper(x)
00617 #endif
00618
00619 #ifndef RIPPER
00620 # define rb_warn0(fmt) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt))
00621 # define rb_warnI(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00622 # define rb_warnS(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00623 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt))
00624 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00625 #else
00626 # define rb_warn0(fmt) ripper_warn0(parser, (fmt))
00627 # define rb_warnI(fmt,a) ripper_warnI(parser, (fmt), (a))
00628 # define rb_warnS(fmt,a) ripper_warnS(parser, (fmt), (a))
00629 # define rb_warning0(fmt) ripper_warning0(parser, (fmt))
00630 # define rb_warningS(fmt,a) ripper_warningS(parser, (fmt), (a))
00631 static void ripper_warn0(struct parser_params*, const char*);
00632 static void ripper_warnI(struct parser_params*, const char*, int);
00633 #if 0
00634 static void ripper_warnS(struct parser_params*, const char*, const char*);
00635 #endif
00636 static void ripper_warning0(struct parser_params*, const char*);
00637 static void ripper_warningS(struct parser_params*, const char*, const char*);
00638 #endif
00639
00640 #ifdef RIPPER
00641 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
00642 # define rb_compile_error ripper_compile_error
00643 # define compile_error ripper_compile_error
00644 # define PARSER_ARG parser,
00645 #else
00646 # define rb_compile_error rb_compile_error_with_enc
00647 # define compile_error parser->nerr++,rb_compile_error_with_enc
00648 # define PARSER_ARG ruby_sourcefile, ruby_sourceline, current_enc,
00649 #endif
00650
00651
00652
00653
00654 #ifdef OLD_YACC
00655 #ifndef YYMAXDEPTH
00656 #define YYMAXDEPTH 10000
00657 #endif
00658 #endif
00659
00660 #ifndef RIPPER
00661 static void token_info_push(struct parser_params*, const char *token);
00662 static void token_info_pop(struct parser_params*, const char *token);
00663 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, (token)) : (void)0)
00664 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, (token)) : (void)0)
00665 #else
00666 #define token_info_push(token)
00667 #define token_info_pop(token)
00668 #endif
00669
00670
00671
00672 #line 673 "parse.c"
00673
00674
00675 #ifndef YYDEBUG
00676 # define YYDEBUG 0
00677 #endif
00678
00679
00680 #ifdef YYERROR_VERBOSE
00681 # undef YYERROR_VERBOSE
00682 # define YYERROR_VERBOSE 1
00683 #else
00684 # define YYERROR_VERBOSE 0
00685 #endif
00686
00687
00688 #ifndef YYTOKEN_TABLE
00689 # define YYTOKEN_TABLE 0
00690 #endif
00691
00692
00693
00694 #ifndef YYTOKENTYPE
00695 # define YYTOKENTYPE
00696
00697
00698 enum yytokentype {
00699 keyword_class = 258,
00700 keyword_module = 259,
00701 keyword_def = 260,
00702 keyword_undef = 261,
00703 keyword_begin = 262,
00704 keyword_rescue = 263,
00705 keyword_ensure = 264,
00706 keyword_end = 265,
00707 keyword_if = 266,
00708 keyword_unless = 267,
00709 keyword_then = 268,
00710 keyword_elsif = 269,
00711 keyword_else = 270,
00712 keyword_case = 271,
00713 keyword_when = 272,
00714 keyword_while = 273,
00715 keyword_until = 274,
00716 keyword_for = 275,
00717 keyword_break = 276,
00718 keyword_next = 277,
00719 keyword_redo = 278,
00720 keyword_retry = 279,
00721 keyword_in = 280,
00722 keyword_do = 281,
00723 keyword_do_cond = 282,
00724 keyword_do_block = 283,
00725 keyword_do_LAMBDA = 284,
00726 keyword_return = 285,
00727 keyword_yield = 286,
00728 keyword_super = 287,
00729 keyword_self = 288,
00730 keyword_nil = 289,
00731 keyword_true = 290,
00732 keyword_false = 291,
00733 keyword_and = 292,
00734 keyword_or = 293,
00735 keyword_not = 294,
00736 modifier_if = 295,
00737 modifier_unless = 296,
00738 modifier_while = 297,
00739 modifier_until = 298,
00740 modifier_rescue = 299,
00741 keyword_alias = 300,
00742 keyword_defined = 301,
00743 keyword_BEGIN = 302,
00744 keyword_END = 303,
00745 keyword__LINE__ = 304,
00746 keyword__FILE__ = 305,
00747 keyword__ENCODING__ = 306,
00748 tIDENTIFIER = 307,
00749 tFID = 308,
00750 tGVAR = 309,
00751 tIVAR = 310,
00752 tCONSTANT = 311,
00753 tCVAR = 312,
00754 tLABEL = 313,
00755 tINTEGER = 314,
00756 tFLOAT = 315,
00757 tSTRING_CONTENT = 316,
00758 tCHAR = 317,
00759 tNTH_REF = 318,
00760 tBACK_REF = 319,
00761 tREGEXP_END = 320,
00762 tUPLUS = 321,
00763 tUMINUS = 322,
00764 tPOW = 323,
00765 tCMP = 324,
00766 tEQ = 325,
00767 tEQQ = 326,
00768 tNEQ = 327,
00769 tGEQ = 328,
00770 tLEQ = 329,
00771 tANDOP = 330,
00772 tOROP = 331,
00773 tMATCH = 332,
00774 tNMATCH = 333,
00775 tDOT2 = 334,
00776 tDOT3 = 335,
00777 tAREF = 336,
00778 tASET = 337,
00779 tLSHFT = 338,
00780 tRSHFT = 339,
00781 tCOLON2 = 340,
00782 tCOLON3 = 341,
00783 tOP_ASGN = 342,
00784 tASSOC = 343,
00785 tLPAREN = 344,
00786 tLPAREN_ARG = 345,
00787 tRPAREN = 346,
00788 tLBRACK = 347,
00789 tLBRACE = 348,
00790 tLBRACE_ARG = 349,
00791 tSTAR = 350,
00792 tAMPER = 351,
00793 tLAMBDA = 352,
00794 tSYMBEG = 353,
00795 tSTRING_BEG = 354,
00796 tXSTRING_BEG = 355,
00797 tREGEXP_BEG = 356,
00798 tWORDS_BEG = 357,
00799 tQWORDS_BEG = 358,
00800 tSTRING_DBEG = 359,
00801 tSTRING_DVAR = 360,
00802 tSTRING_END = 361,
00803 tLAMBEG = 362,
00804 tLOWEST = 363,
00805 tUMINUS_NUM = 364,
00806 idNULL = 365,
00807 idRespond_to = 366,
00808 idIFUNC = 367,
00809 idCFUNC = 368,
00810 id_core_set_method_alias = 369,
00811 id_core_set_variable_alias = 370,
00812 id_core_undef_method = 371,
00813 id_core_define_method = 372,
00814 id_core_define_singleton_method = 373,
00815 id_core_set_postexe = 374,
00816 tLAST_TOKEN = 375
00817 };
00818 #endif
00819
00820
00821
00822 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
00823 typedef union YYSTYPE
00824 {
00825
00826
00827 #line 616 "parse.y"
00828
00829 VALUE val;
00830 NODE *node;
00831 ID id;
00832 int num;
00833 const struct vtable *vars;
00834
00835
00836
00837
00838 #line 839 "parse.c"
00839 } YYSTYPE;
00840 # define YYSTYPE_IS_TRIVIAL 1
00841 # define yystype YYSTYPE
00842 # define YYSTYPE_IS_DECLARED 1
00843 #endif
00844
00845
00846
00847
00848
00849
00850 #line 851 "parse.c"
00851
00852 #ifdef short
00853 # undef short
00854 #endif
00855
00856 #ifdef YYTYPE_UINT8
00857 typedef YYTYPE_UINT8 yytype_uint8;
00858 #else
00859 typedef unsigned char yytype_uint8;
00860 #endif
00861
00862 #ifdef YYTYPE_INT8
00863 typedef YYTYPE_INT8 yytype_int8;
00864 #elif (defined __STDC__ || defined __C99__FUNC__ \
00865 || defined __cplusplus || defined _MSC_VER)
00866 typedef signed char yytype_int8;
00867 #else
00868 typedef short int yytype_int8;
00869 #endif
00870
00871 #ifdef YYTYPE_UINT16
00872 typedef YYTYPE_UINT16 yytype_uint16;
00873 #else
00874 typedef unsigned short int yytype_uint16;
00875 #endif
00876
00877 #ifdef YYTYPE_INT16
00878 typedef YYTYPE_INT16 yytype_int16;
00879 #else
00880 typedef short int yytype_int16;
00881 #endif
00882
00883 #ifndef YYSIZE_T
00884 # ifdef __SIZE_TYPE__
00885 # define YYSIZE_T __SIZE_TYPE__
00886 # elif defined size_t
00887 # define YYSIZE_T size_t
00888 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
00889 || defined __cplusplus || defined _MSC_VER)
00890 # include <stddef.h>
00891 # define YYSIZE_T size_t
00892 # else
00893 # define YYSIZE_T unsigned int
00894 # endif
00895 #endif
00896
00897 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
00898
00899 #ifndef YY_
00900 # if defined YYENABLE_NLS && YYENABLE_NLS
00901 # if ENABLE_NLS
00902 # include <libintl.h>
00903 # define YY_(msgid) dgettext ("bison-runtime", msgid)
00904 # endif
00905 # endif
00906 # ifndef YY_
00907 # define YY_(msgid) msgid
00908 # endif
00909 #endif
00910
00911
00912 #if ! defined lint || defined __GNUC__
00913 # define YYUSE(e) ((void) (e))
00914 #else
00915 # define YYUSE(e)
00916 #endif
00917
00918
00919 #ifndef lint
00920 # define YYID(n) (n)
00921 #else
00922 #if (defined __STDC__ || defined __C99__FUNC__ \
00923 || defined __cplusplus || defined _MSC_VER)
00924 static int
00925 YYID (int yyi)
00926 #else
00927 static int
00928 YYID (yyi)
00929 int yyi;
00930 #endif
00931 {
00932 return yyi;
00933 }
00934 #endif
00935
00936 #if ! defined yyoverflow || YYERROR_VERBOSE
00937
00938
00939
00940 # ifdef YYSTACK_USE_ALLOCA
00941 # if YYSTACK_USE_ALLOCA
00942 # ifdef __GNUC__
00943 # define YYSTACK_ALLOC __builtin_alloca
00944 # elif defined __BUILTIN_VA_ARG_INCR
00945 # include <alloca.h>
00946 # elif defined _AIX
00947 # define YYSTACK_ALLOC __alloca
00948 # elif defined _MSC_VER
00949 # include <malloc.h>
00950 # define alloca _alloca
00951 # else
00952 # define YYSTACK_ALLOC alloca
00953 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
00954 || defined __cplusplus || defined _MSC_VER)
00955 # include <stdlib.h>
00956 # ifndef EXIT_SUCCESS
00957 # define EXIT_SUCCESS 0
00958 # endif
00959 # endif
00960 # endif
00961 # endif
00962 # endif
00963
00964 # ifdef YYSTACK_ALLOC
00965
00966 # define YYSTACK_FREE(Ptr) do { ; } while (YYID (0))
00967 # ifndef YYSTACK_ALLOC_MAXIMUM
00968
00969
00970
00971
00972 # define YYSTACK_ALLOC_MAXIMUM 4032
00973 # endif
00974 # else
00975 # define YYSTACK_ALLOC YYMALLOC
00976 # define YYSTACK_FREE YYFREE
00977 # ifndef YYSTACK_ALLOC_MAXIMUM
00978 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
00979 # endif
00980 # if (defined __cplusplus && ! defined EXIT_SUCCESS \
00981 && ! ((defined YYMALLOC || defined malloc) \
00982 && (defined YYFREE || defined free)))
00983 # include <stdlib.h>
00984 # ifndef EXIT_SUCCESS
00985 # define EXIT_SUCCESS 0
00986 # endif
00987 # endif
00988 # ifndef YYMALLOC
00989 # define YYMALLOC malloc
00990 # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
00991 || defined __cplusplus || defined _MSC_VER)
00992 void *malloc (YYSIZE_T);
00993 # endif
00994 # endif
00995 # ifndef YYFREE
00996 # define YYFREE free
00997 # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
00998 || defined __cplusplus || defined _MSC_VER)
00999 void free (void *);
01000 # endif
01001 # endif
01002 # endif
01003 #endif
01004
01005
01006 #if (! defined yyoverflow \
01007 && (! defined __cplusplus \
01008 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
01009
01010
01011 union yyalloc
01012 {
01013 yytype_int16 yyss_alloc;
01014 YYSTYPE yyvs_alloc;
01015 };
01016
01017
01018 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
01019
01020
01021
01022 # define YYSTACK_BYTES(N) \
01023 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
01024 + YYSTACK_GAP_MAXIMUM)
01025
01026 # define YYCOPY_NEEDED 1
01027
01028
01029
01030
01031
01032
01033 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
01034 do \
01035 { \
01036 YYSIZE_T yynewbytes; \
01037 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
01038 Stack = &yyptr->Stack_alloc; \
01039 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
01040 yyptr += yynewbytes / sizeof (*yyptr); \
01041 } \
01042 while (YYID (0))
01043
01044 #endif
01045
01046 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
01047
01048
01049 # ifndef YYCOPY
01050 # if defined __GNUC__ && 1 < __GNUC__
01051 # define YYCOPY(To, From, Count) \
01052 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
01053 # else
01054 # define YYCOPY(To, From, Count) \
01055 do \
01056 { \
01057 YYSIZE_T yyi; \
01058 for (yyi = 0; yyi < (Count); yyi++) \
01059 (To)[yyi] = (From)[yyi]; \
01060 } \
01061 while (YYID (0))
01062 # endif
01063 # endif
01064 #endif
01065
01066
01067 #define YYFINAL 3
01068
01069 #define YYLAST 10748
01070
01071
01072 #define YYNTOKENS 148
01073
01074 #define YYNNTS 174
01075
01076 #define YYNRULES 573
01077
01078 #define YYNSTATES 991
01079
01080
01081 #define YYUNDEFTOK 2
01082 #define YYMAXUTOK 375
01083
01084 #define YYTRANSLATE(YYX) \
01085 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
01086
01087
01088 static const yytype_uint8 yytranslate[] =
01089 {
01090 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01091 147, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01092 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01093 2, 2, 146, 123, 2, 2, 2, 121, 116, 2,
01094 142, 143, 119, 117, 140, 118, 139, 120, 2, 2,
01095 2, 2, 2, 2, 2, 2, 2, 2, 111, 145,
01096 113, 109, 112, 110, 2, 2, 2, 2, 2, 2,
01097 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01098 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01099 2, 138, 2, 144, 115, 2, 141, 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, 2, 2, 136, 114, 137, 124, 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, 2, 2, 2, 2, 2, 2, 2,
01106 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01107 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01108 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01109 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01110 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01111 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01112 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01113 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01114 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01115 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
01116 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
01117 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
01118 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
01119 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
01120 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
01121 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
01122 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
01123 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
01124 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
01125 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
01126 105, 106, 107, 108, 122, 125, 126, 127, 128, 129,
01127 130, 131, 132, 133, 134, 135
01128 };
01129
01130 #if YYDEBUG
01131
01132
01133 static const yytype_uint16 yyprhs[] =
01134 {
01135 0, 0, 3, 4, 7, 10, 12, 14, 18, 21,
01136 23, 24, 30, 35, 38, 40, 42, 46, 49, 50,
01137 55, 59, 63, 67, 70, 74, 78, 82, 86, 90,
01138 95, 97, 101, 105, 112, 118, 124, 130, 136, 140,
01139 144, 148, 152, 154, 158, 162, 164, 168, 172, 176,
01140 179, 181, 183, 185, 187, 189, 194, 199, 200, 206,
01141 209, 213, 218, 224, 229, 235, 238, 241, 244, 247,
01142 250, 252, 256, 258, 262, 264, 267, 271, 277, 280,
01143 285, 288, 293, 295, 299, 301, 305, 308, 312, 314,
01144 318, 320, 322, 327, 331, 335, 339, 343, 346, 348,
01145 350, 352, 357, 361, 365, 369, 373, 376, 378, 380,
01146 382, 385, 387, 391, 393, 395, 397, 399, 401, 403,
01147 405, 407, 409, 411, 412, 417, 419, 421, 423, 425,
01148 427, 429, 431, 433, 435, 437, 439, 441, 443, 445,
01149 447, 449, 451, 453, 455, 457, 459, 461, 463, 465,
01150 467, 469, 471, 473, 475, 477, 479, 481, 483, 485,
01151 487, 489, 491, 493, 495, 497, 499, 501, 503, 505,
01152 507, 509, 511, 513, 515, 517, 519, 521, 523, 525,
01153 527, 529, 531, 533, 535, 537, 539, 541, 543, 545,
01154 547, 549, 551, 553, 555, 557, 561, 567, 571, 577,
01155 584, 590, 596, 602, 608, 613, 617, 621, 625, 629,
01156 633, 637, 641, 645, 649, 654, 659, 662, 665, 669,
01157 673, 677, 681, 685, 689, 693, 697, 701, 705, 709,
01158 713, 717, 720, 723, 727, 731, 735, 739, 740, 745,
01159 752, 754, 756, 758, 761, 766, 769, 773, 775, 777,
01160 779, 781, 784, 789, 792, 794, 797, 800, 805, 807,
01161 808, 811, 814, 817, 819, 821, 824, 828, 833, 837,
01162 842, 845, 847, 849, 851, 853, 855, 857, 859, 861,
01163 863, 864, 869, 870, 875, 879, 883, 886, 890, 894,
01164 896, 901, 905, 907, 908, 915, 920, 924, 927, 929,
01165 932, 935, 942, 949, 950, 951, 959, 960, 961, 969,
01166 975, 980, 981, 982, 992, 993, 1000, 1001, 1002, 1011,
01167 1012, 1018, 1019, 1026, 1027, 1028, 1038, 1040, 1042, 1044,
01168 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064,
01169 1066, 1068, 1070, 1072, 1074, 1077, 1079, 1081, 1083, 1089,
01170 1091, 1094, 1096, 1098, 1100, 1104, 1106, 1110, 1112, 1117,
01171 1124, 1128, 1134, 1137, 1142, 1144, 1148, 1155, 1164, 1169,
01172 1176, 1181, 1184, 1191, 1194, 1199, 1206, 1209, 1214, 1217,
01173 1222, 1224, 1226, 1228, 1232, 1234, 1239, 1241, 1244, 1246,
01174 1250, 1252, 1254, 1255, 1256, 1261, 1266, 1268, 1272, 1276,
01175 1277, 1283, 1286, 1291, 1296, 1299, 1304, 1309, 1313, 1317,
01176 1321, 1324, 1326, 1331, 1332, 1338, 1339, 1345, 1351, 1353,
01177 1355, 1362, 1364, 1366, 1368, 1370, 1373, 1375, 1378, 1380,
01178 1382, 1384, 1386, 1388, 1390, 1392, 1395, 1399, 1403, 1407,
01179 1411, 1415, 1416, 1420, 1422, 1425, 1429, 1433, 1434, 1438,
01180 1439, 1442, 1443, 1446, 1447, 1450, 1452, 1453, 1457, 1458,
01181 1459, 1465, 1467, 1469, 1471, 1473, 1476, 1478, 1480, 1482,
01182 1484, 1488, 1490, 1492, 1495, 1498, 1500, 1502, 1504, 1506,
01183 1508, 1510, 1512, 1514, 1516, 1518, 1520, 1522, 1524, 1526,
01184 1528, 1530, 1532, 1534, 1536, 1537, 1542, 1545, 1549, 1552,
01185 1559, 1568, 1573, 1580, 1585, 1592, 1595, 1600, 1607, 1610,
01186 1615, 1618, 1623, 1625, 1626, 1628, 1630, 1632, 1634, 1636,
01187 1638, 1640, 1644, 1646, 1650, 1654, 1658, 1660, 1664, 1666,
01188 1670, 1672, 1674, 1677, 1679, 1681, 1683, 1686, 1689, 1691,
01189 1693, 1694, 1699, 1701, 1704, 1706, 1710, 1714, 1717, 1719,
01190 1721, 1723, 1725, 1727, 1729, 1731, 1733, 1735, 1737, 1739,
01191 1741, 1742, 1744, 1745, 1747, 1750, 1753, 1754, 1756, 1758,
01192 1760, 1762, 1764, 1767
01193 };
01194
01195
01196 static const yytype_int16 yyrhs[] =
01197 {
01198 149, 0, -1, -1, 150, 151, -1, 152, 314, -1,
01199 321, -1, 153, -1, 152, 320, 153, -1, 1, 153,
01200 -1, 158, -1, -1, 47, 154, 136, 151, 137, -1,
01201 156, 256, 231, 259, -1, 157, 314, -1, 321, -1,
01202 158, -1, 157, 320, 158, -1, 1, 158, -1, -1,
01203 45, 180, 159, 180, -1, 45, 54, 54, -1, 45,
01204 54, 64, -1, 45, 54, 63, -1, 6, 181, -1,
01205 158, 40, 162, -1, 158, 41, 162, -1, 158, 42,
01206 162, -1, 158, 43, 162, -1, 158, 44, 158, -1,
01207 48, 136, 156, 137, -1, 160, -1, 168, 109, 163,
01208 -1, 286, 87, 163, -1, 216, 138, 191, 317, 87,
01209 163, -1, 216, 139, 52, 87, 163, -1, 216, 139,
01210 56, 87, 163, -1, 216, 85, 56, 87, 163, -1,
01211 216, 85, 52, 87, 163, -1, 287, 87, 163, -1,
01212 175, 109, 198, -1, 168, 109, 187, -1, 168, 109,
01213 198, -1, 161, -1, 175, 109, 163, -1, 175, 109,
01214 160, -1, 163, -1, 161, 37, 161, -1, 161, 38,
01215 161, -1, 39, 315, 161, -1, 123, 163, -1, 185,
01216 -1, 161, -1, 167, -1, 164, -1, 249, -1, 249,
01217 139, 311, 193, -1, 249, 85, 311, 193, -1, -1,
01218 94, 166, 237, 156, 137, -1, 310, 193, -1, 310,
01219 193, 165, -1, 216, 139, 311, 193, -1, 216, 139,
01220 311, 193, 165, -1, 216, 85, 311, 193, -1, 216,
01221 85, 311, 193, 165, -1, 32, 193, -1, 31, 193,
01222 -1, 30, 192, -1, 21, 192, -1, 22, 192, -1,
01223 170, -1, 89, 169, 316, -1, 170, -1, 89, 169,
01224 316, -1, 172, -1, 172, 171, -1, 172, 95, 174,
01225 -1, 172, 95, 174, 140, 173, -1, 172, 95, -1,
01226 172, 95, 140, 173, -1, 95, 174, -1, 95, 174,
01227 140, 173, -1, 95, -1, 95, 140, 173, -1, 174,
01228 -1, 89, 169, 316, -1, 171, 140, -1, 172, 171,
01229 140, -1, 171, -1, 173, 140, 171, -1, 283, -1,
01230 284, -1, 216, 138, 191, 317, -1, 216, 139, 52,
01231 -1, 216, 85, 52, -1, 216, 139, 56, -1, 216,
01232 85, 56, -1, 86, 56, -1, 287, -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, 52, -1,
01236 56, -1, 86, 176, -1, 176, -1, 216, 85, 176,
01237 -1, 52, -1, 56, -1, 53, -1, 183, -1, 184,
01238 -1, 178, -1, 279, -1, 179, -1, 281, -1, 180,
01239 -1, -1, 181, 140, 182, 180, -1, 114, -1, 115,
01240 -1, 116, -1, 69, -1, 70, -1, 71, -1, 77,
01241 -1, 78, -1, 112, -1, 73, -1, 113, -1, 74,
01242 -1, 72, -1, 83, -1, 84, -1, 117, -1, 118,
01243 -1, 119, -1, 95, -1, 120, -1, 121, -1, 68,
01244 -1, 123, -1, 124, -1, 66, -1, 67, -1, 81,
01245 -1, 82, -1, 141, -1, 49, -1, 50, -1, 51,
01246 -1, 47, -1, 48, -1, 45, -1, 37, -1, 7,
01247 -1, 21, -1, 16, -1, 3, -1, 5, -1, 46,
01248 -1, 26, -1, 15, -1, 14, -1, 10, -1, 9,
01249 -1, 36, -1, 20, -1, 25, -1, 4, -1, 22,
01250 -1, 34, -1, 39, -1, 38, -1, 23, -1, 8,
01251 -1, 24, -1, 30, -1, 33, -1, 32, -1, 13,
01252 -1, 35, -1, 6, -1, 17, -1, 31, -1, 11,
01253 -1, 12, -1, 18, -1, 19, -1, 175, 109, 185,
01254 -1, 175, 109, 185, 44, 185, -1, 286, 87, 185,
01255 -1, 286, 87, 185, 44, 185, -1, 216, 138, 191,
01256 317, 87, 185, -1, 216, 139, 52, 87, 185, -1,
01257 216, 139, 56, 87, 185, -1, 216, 85, 52, 87,
01258 185, -1, 216, 85, 56, 87, 185, -1, 86, 56,
01259 87, 185, -1, 287, 87, 185, -1, 185, 79, 185,
01260 -1, 185, 80, 185, -1, 185, 117, 185, -1, 185,
01261 118, 185, -1, 185, 119, 185, -1, 185, 120, 185,
01262 -1, 185, 121, 185, -1, 185, 68, 185, -1, 122,
01263 59, 68, 185, -1, 122, 60, 68, 185, -1, 66,
01264 185, -1, 67, 185, -1, 185, 114, 185, -1, 185,
01265 115, 185, -1, 185, 116, 185, -1, 185, 69, 185,
01266 -1, 185, 112, 185, -1, 185, 73, 185, -1, 185,
01267 113, 185, -1, 185, 74, 185, -1, 185, 70, 185,
01268 -1, 185, 71, 185, -1, 185, 72, 185, -1, 185,
01269 77, 185, -1, 185, 78, 185, -1, 123, 185, -1,
01270 124, 185, -1, 185, 83, 185, -1, 185, 84, 185,
01271 -1, 185, 75, 185, -1, 185, 76, 185, -1, -1,
01272 46, 315, 186, 185, -1, 185, 110, 185, 315, 111,
01273 185, -1, 199, -1, 185, -1, 321, -1, 197, 318,
01274 -1, 197, 140, 308, 318, -1, 308, 318, -1, 142,
01275 191, 316, -1, 321, -1, 189, -1, 321, -1, 192,
01276 -1, 197, 140, -1, 197, 140, 308, 140, -1, 308,
01277 140, -1, 167, -1, 197, 196, -1, 308, 196, -1,
01278 197, 140, 308, 196, -1, 195, -1, -1, 194, 192,
01279 -1, 96, 187, -1, 140, 195, -1, 321, -1, 187,
01280 -1, 95, 187, -1, 197, 140, 187, -1, 197, 140,
01281 95, 187, -1, 197, 140, 187, -1, 197, 140, 95,
01282 187, -1, 95, 187, -1, 260, -1, 261, -1, 264,
01283 -1, 265, -1, 266, -1, 269, -1, 285, -1, 287,
01284 -1, 53, -1, -1, 217, 200, 155, 227, -1, -1,
01285 90, 161, 201, 316, -1, 89, 156, 143, -1, 216,
01286 85, 56, -1, 86, 56, -1, 92, 188, 144, -1,
01287 93, 307, 137, -1, 30, -1, 31, 142, 192, 316,
01288 -1, 31, 142, 316, -1, 31, -1, -1, 46, 315,
01289 142, 202, 161, 316, -1, 39, 142, 161, 316, -1,
01290 39, 142, 316, -1, 310, 251, -1, 250, -1, 250,
01291 251, -1, 97, 242, -1, 218, 162, 228, 156, 230,
01292 227, -1, 219, 162, 228, 156, 231, 227, -1, -1,
01293 -1, 220, 203, 162, 229, 204, 156, 227, -1, -1,
01294 -1, 221, 205, 162, 229, 206, 156, 227, -1, 222,
01295 162, 314, 254, 227, -1, 222, 314, 254, 227, -1,
01296 -1, -1, 223, 232, 25, 207, 162, 229, 208, 156,
01297 227, -1, -1, 224, 177, 288, 209, 155, 227, -1,
01298 -1, -1, 224, 83, 161, 210, 319, 211, 155, 227,
01299 -1, -1, 225, 177, 212, 155, 227, -1, -1, 226,
01300 178, 213, 290, 155, 227, -1, -1, -1, 226, 305,
01301 313, 214, 178, 215, 290, 155, 227, -1, 21, -1,
01302 22, -1, 23, -1, 24, -1, 199, -1, 7, -1,
01303 11, -1, 12, -1, 18, -1, 19, -1, 16, -1,
01304 20, -1, 3, -1, 4, -1, 5, -1, 10, -1,
01305 319, -1, 13, -1, 319, 13, -1, 319, -1, 27,
01306 -1, 231, -1, 14, 162, 228, 156, 230, -1, 321,
01307 -1, 15, 156, -1, 175, -1, 168, -1, 293, -1,
01308 89, 235, 316, -1, 233, -1, 234, 140, 233, -1,
01309 234, -1, 234, 140, 95, 293, -1, 234, 140, 95,
01310 293, 140, 234, -1, 234, 140, 95, -1, 234, 140,
01311 95, 140, 234, -1, 95, 293, -1, 95, 293, 140,
01312 234, -1, 95, -1, 95, 140, 234, -1, 295, 140,
01313 298, 140, 301, 304, -1, 295, 140, 298, 140, 301,
01314 140, 295, 304, -1, 295, 140, 298, 304, -1, 295,
01315 140, 298, 140, 295, 304, -1, 295, 140, 301, 304,
01316 -1, 295, 140, -1, 295, 140, 301, 140, 295, 304,
01317 -1, 295, 304, -1, 298, 140, 301, 304, -1, 298,
01318 140, 301, 140, 295, 304, -1, 298, 304, -1, 298,
01319 140, 295, 304, -1, 301, 304, -1, 301, 140, 295,
01320 304, -1, 303, -1, 321, -1, 238, -1, 114, 239,
01321 114, -1, 76, -1, 114, 236, 239, 114, -1, 321,
01322 -1, 145, 240, -1, 241, -1, 240, 140, 241, -1,
01323 52, -1, 292, -1, -1, -1, 243, 244, 245, 246,
01324 -1, 142, 291, 239, 316, -1, 291, -1, 107, 156,
01325 137, -1, 29, 156, 10, -1, -1, 28, 248, 237,
01326 156, 10, -1, 167, 247, -1, 249, 139, 311, 190,
01327 -1, 249, 85, 311, 190, -1, 310, 189, -1, 216,
01328 139, 311, 190, -1, 216, 85, 311, 189, -1, 216,
01329 85, 312, -1, 216, 139, 189, -1, 216, 85, 189,
01330 -1, 32, 189, -1, 32, -1, 216, 138, 191, 317,
01331 -1, -1, 136, 252, 237, 156, 137, -1, -1, 26,
01332 253, 237, 156, 10, -1, 17, 197, 228, 156, 255,
01333 -1, 231, -1, 254, -1, 8, 257, 258, 228, 156,
01334 256, -1, 321, -1, 187, -1, 198, -1, 321, -1,
01335 88, 175, -1, 321, -1, 9, 156, -1, 321, -1,
01336 282, -1, 279, -1, 281, -1, 262, -1, 62, -1,
01337 263, -1, 262, 263, -1, 99, 271, 106, -1, 100,
01338 272, 106, -1, 101, 273, 65, -1, 102, 146, 106,
01339 -1, 102, 267, 106, -1, -1, 267, 268, 146, -1,
01340 274, -1, 268, 274, -1, 103, 146, 106, -1, 103,
01341 270, 106, -1, -1, 270, 61, 146, -1, -1, 271,
01342 274, -1, -1, 272, 274, -1, -1, 273, 274, -1,
01343 61, -1, -1, 105, 275, 278, -1, -1, -1, 104,
01344 276, 277, 156, 137, -1, 54, -1, 55, -1, 57,
01345 -1, 287, -1, 98, 280, -1, 178, -1, 55, -1,
01346 54, -1, 57, -1, 98, 272, 106, -1, 59, -1,
01347 60, -1, 122, 59, -1, 122, 60, -1, 52, -1,
01348 55, -1, 54, -1, 56, -1, 57, -1, 34, -1,
01349 33, -1, 35, -1, 36, -1, 50, -1, 49, -1,
01350 51, -1, 283, -1, 284, -1, 283, -1, 284, -1,
01351 63, -1, 64, -1, 319, -1, -1, 113, 289, 162,
01352 319, -1, 1, 319, -1, 142, 291, 316, -1, 291,
01353 319, -1, 295, 140, 299, 140, 301, 304, -1, 295,
01354 140, 299, 140, 301, 140, 295, 304, -1, 295, 140,
01355 299, 304, -1, 295, 140, 299, 140, 295, 304, -1,
01356 295, 140, 301, 304, -1, 295, 140, 301, 140, 295,
01357 304, -1, 295, 304, -1, 299, 140, 301, 304, -1,
01358 299, 140, 301, 140, 295, 304, -1, 299, 304, -1,
01359 299, 140, 295, 304, -1, 301, 304, -1, 301, 140,
01360 295, 304, -1, 303, -1, -1, 56, -1, 55, -1,
01361 54, -1, 57, -1, 292, -1, 52, -1, 293, -1,
01362 89, 235, 316, -1, 294, -1, 295, 140, 294, -1,
01363 52, 109, 187, -1, 52, 109, 216, -1, 297, -1,
01364 298, 140, 297, -1, 296, -1, 299, 140, 296, -1,
01365 119, -1, 95, -1, 300, 52, -1, 300, -1, 116,
01366 -1, 96, -1, 302, 52, -1, 140, 303, -1, 321,
01367 -1, 285, -1, -1, 142, 306, 161, 316, -1, 321,
01368 -1, 308, 318, -1, 309, -1, 308, 140, 309, -1,
01369 187, 88, 187, -1, 58, 187, -1, 52, -1, 56,
01370 -1, 53, -1, 52, -1, 56, -1, 53, -1, 183,
01371 -1, 52, -1, 53, -1, 183, -1, 139, -1, 85,
01372 -1, -1, 320, -1, -1, 147, -1, 315, 143, -1,
01373 315, 144, -1, -1, 147, -1, 140, -1, 145, -1,
01374 147, -1, 319, -1, 320, 145, -1, -1
01375 };
01376
01377
01378 static const yytype_uint16 yyrline[] =
01379 {
01380 0, 782, 782, 782, 813, 824, 833, 841, 849, 855,
01381 857, 856, 880, 913, 924, 933, 941, 949, 955, 955,
01382 963, 971, 982, 992, 1000, 1009, 1018, 1031, 1044, 1053,
01383 1065, 1066, 1076, 1105, 1126, 1143, 1160, 1171, 1188, 1198,
01384 1207, 1216, 1225, 1228, 1237, 1249, 1250, 1258, 1266, 1274,
01385 1282, 1285, 1297, 1298, 1301, 1302, 1311, 1323, 1322, 1344,
01386 1353, 1365, 1374, 1386, 1395, 1407, 1416, 1425, 1433, 1441,
01387 1451, 1452, 1462, 1463, 1473, 1481, 1489, 1497, 1506, 1514,
01388 1523, 1531, 1540, 1548, 1559, 1560, 1570, 1578, 1588, 1596,
01389 1606, 1610, 1614, 1622, 1630, 1638, 1646, 1658, 1668, 1680,
01390 1689, 1698, 1706, 1714, 1722, 1730, 1743, 1756, 1767, 1775,
01391 1778, 1786, 1794, 1804, 1805, 1806, 1807, 1812, 1823, 1824,
01392 1827, 1835, 1838, 1846, 1846, 1856, 1857, 1858, 1859, 1860,
01393 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870,
01394 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880,
01395 1881, 1882, 1883, 1884, 1887, 1887, 1887, 1888, 1888, 1889,
01396 1889, 1889, 1890, 1890, 1890, 1890, 1891, 1891, 1891, 1891,
01397 1892, 1892, 1892, 1893, 1893, 1893, 1893, 1894, 1894, 1894,
01398 1894, 1895, 1895, 1895, 1895, 1896, 1896, 1896, 1896, 1897,
01399 1897, 1897, 1897, 1898, 1898, 1901, 1910, 1920, 1949, 1980,
01400 2006, 2023, 2040, 2057, 2068, 2079, 2090, 2104, 2118, 2126,
01401 2134, 2142, 2150, 2158, 2166, 2175, 2184, 2192, 2200, 2208,
01402 2216, 2224, 2232, 2240, 2248, 2256, 2264, 2272, 2280, 2288,
01403 2299, 2307, 2315, 2323, 2331, 2339, 2347, 2355, 2355, 2365,
01404 2375, 2381, 2393, 2394, 2398, 2406, 2416, 2426, 2427, 2430,
01405 2431, 2432, 2436, 2444, 2454, 2463, 2471, 2481, 2490, 2499,
01406 2499, 2511, 2521, 2525, 2531, 2539, 2547, 2561, 2577, 2591,
01407 2606, 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624,
01408 2633, 2632, 2657, 2657, 2666, 2674, 2682, 2690, 2703, 2711,
01409 2719, 2727, 2735, 2743, 2743, 2753, 2761, 2769, 2780, 2781,
01410 2792, 2796, 2808, 2820, 2820, 2820, 2831, 2831, 2831, 2842,
01411 2853, 2862, 2864, 2861, 2928, 2927, 2949, 2954, 2948, 2973,
01412 2972, 2994, 2993, 3016, 3017, 3016, 3037, 3045, 3053, 3061,
01413 3071, 3083, 3089, 3095, 3101, 3107, 3113, 3119, 3125, 3131,
01414 3137, 3147, 3153, 3158, 3159, 3166, 3171, 3174, 3175, 3188,
01415 3189, 3199, 3200, 3203, 3211, 3221, 3229, 3239, 3247, 3256,
01416 3265, 3273, 3281, 3290, 3302, 3310, 3320, 3328, 3336, 3344,
01417 3352, 3360, 3369, 3377, 3385, 3393, 3401, 3409, 3417, 3425,
01418 3433, 3443, 3444, 3450, 3459, 3468, 3479, 3480, 3490, 3497,
01419 3506, 3514, 3520, 3523, 3520, 3541, 3549, 3559, 3563, 3570,
01420 3569, 3590, 3606, 3615, 3626, 3635, 3645, 3655, 3663, 3674,
01421 3685, 3693, 3701, 3716, 3715, 3735, 3734, 3755, 3767, 3768,
01422 3771, 3790, 3793, 3801, 3809, 3812, 3816, 3819, 3827, 3830,
01423 3831, 3839, 3842, 3859, 3860, 3861, 3871, 3881, 3908, 3973,
01424 3982, 3993, 4000, 4010, 4018, 4028, 4037, 4048, 4055, 4066,
01425 4073, 4084, 4091, 4102, 4109, 4138, 4140, 4139, 4156, 4162,
01426 4155, 4181, 4189, 4197, 4205, 4208, 4219, 4220, 4221, 4222,
01427 4225, 4255, 4256, 4257, 4265, 4275, 4276, 4277, 4278, 4279,
01428 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4291, 4304, 4314,
01429 4322, 4332, 4333, 4336, 4345, 4344, 4352, 4364, 4374, 4380,
01430 4388, 4396, 4404, 4412, 4420, 4428, 4436, 4444, 4452, 4460,
01431 4468, 4476, 4484, 4493, 4502, 4511, 4520, 4529, 4540, 4541,
01432 4548, 4557, 4576, 4583, 4596, 4608, 4620, 4628, 4644, 4652,
01433 4668, 4669, 4672, 4685, 4696, 4697, 4700, 4717, 4721, 4731,
01434 4741, 4741, 4770, 4771, 4781, 4788, 4798, 4806, 4816, 4817,
01435 4818, 4821, 4822, 4823, 4824, 4827, 4828, 4829, 4832, 4837,
01436 4844, 4845, 4848, 4849, 4852, 4855, 4858, 4859, 4860, 4863,
01437 4864, 4867, 4868, 4872
01438 };
01439 #endif
01440
01441 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
01442
01443
01444 static const char *const yytname[] =
01445 {
01446 "$end", "error", "$undefined", "keyword_class", "keyword_module",
01447 "keyword_def", "keyword_undef", "keyword_begin", "keyword_rescue",
01448 "keyword_ensure", "keyword_end", "keyword_if", "keyword_unless",
01449 "keyword_then", "keyword_elsif", "keyword_else", "keyword_case",
01450 "keyword_when", "keyword_while", "keyword_until", "keyword_for",
01451 "keyword_break", "keyword_next", "keyword_redo", "keyword_retry",
01452 "keyword_in", "keyword_do", "keyword_do_cond", "keyword_do_block",
01453 "keyword_do_LAMBDA", "keyword_return", "keyword_yield", "keyword_super",
01454 "keyword_self", "keyword_nil", "keyword_true", "keyword_false",
01455 "keyword_and", "keyword_or", "keyword_not", "modifier_if",
01456 "modifier_unless", "modifier_while", "modifier_until", "modifier_rescue",
01457 "keyword_alias", "keyword_defined", "keyword_BEGIN", "keyword_END",
01458 "keyword__LINE__", "keyword__FILE__", "keyword__ENCODING__",
01459 "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tCVAR", "tLABEL",
01460 "tINTEGER", "tFLOAT", "tSTRING_CONTENT", "tCHAR", "tNTH_REF",
01461 "tBACK_REF", "tREGEXP_END", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ",
01462 "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH",
01463 "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2",
01464 "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN_ARG", "tRPAREN",
01465 "tLBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tAMPER", "tLAMBDA",
01466 "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG",
01467 "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG",
01468 "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'",
01469 "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "idNULL",
01470 "idRespond_to", "idIFUNC", "idCFUNC", "id_core_set_method_alias",
01471 "id_core_set_variable_alias", "id_core_undef_method",
01472 "id_core_define_method", "id_core_define_singleton_method",
01473 "id_core_set_postexe", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'", "','",
01474 "'`'", "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program",
01475 "$@1", "top_compstmt", "top_stmts", "top_stmt", "$@2", "bodystmt",
01476 "compstmt", "stmts", "stmt", "$@3", "command_asgn", "expr", "expr_value",
01477 "command_call", "block_command", "cmd_brace_block", "@4", "command",
01478 "mlhs", "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head",
01479 "mlhs_post", "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym",
01480 "fitem", "undef_list", "$@5", "op", "reswords", "arg", "$@6",
01481 "arg_value", "aref_args", "paren_args", "opt_paren_args",
01482 "opt_call_args", "call_args", "command_args", "@7", "block_arg",
01483 "opt_block_arg", "args", "mrhs", "primary", "@8", "$@9", "$@10", "$@11",
01484 "$@12", "$@13", "$@14", "$@15", "$@16", "@17", "@18", "@19", "@20",
01485 "@21", "$@22", "$@23", "primary_value", "k_begin", "k_if", "k_unless",
01486 "k_while", "k_until", "k_case", "k_for", "k_class", "k_module", "k_def",
01487 "k_end", "then", "do", "if_tail", "opt_else", "for_var", "f_marg",
01488 "f_marg_list", "f_margs", "block_param", "opt_block_param",
01489 "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "lambda", "@24",
01490 "@25", "f_larglist", "lambda_body", "do_block", "@26", "block_call",
01491 "method_call", "brace_block", "@27", "@28", "case_body", "cases",
01492 "opt_rescue", "exc_list", "exc_var", "opt_ensure", "literal", "strings",
01493 "string", "string1", "xstring", "regexp", "words", "word_list", "word",
01494 "qwords", "qword_list", "string_contents", "xstring_contents",
01495 "regexp_contents", "string_content", "@29", "@30", "@31", "string_dvar",
01496 "symbol", "sym", "dsym", "numeric", "user_variable", "keyword_variable",
01497 "var_ref", "var_lhs", "backref", "superclass", "$@32", "f_arglist",
01498 "f_args", "f_bad_arg", "f_norm_arg", "f_arg_item", "f_arg", "f_opt",
01499 "f_block_opt", "f_block_optarg", "f_optarg", "restarg_mark",
01500 "f_rest_arg", "blkarg_mark", "f_block_arg", "opt_f_block_arg",
01501 "singleton", "$@33", "assoc_list", "assocs", "assoc", "operation",
01502 "operation2", "operation3", "dot_or_colon", "opt_terms", "opt_nl",
01503 "rparen", "rbracket", "trailer", "term", "terms", "none", 0
01504 };
01505 #endif
01506
01507 # ifdef YYPRINT
01508
01509
01510 static const yytype_uint16 yytoknum[] =
01511 {
01512 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
01513 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
01514 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
01515 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
01516 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
01517 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
01518 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
01519 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
01520 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
01521 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
01522 355, 356, 357, 358, 359, 360, 361, 362, 363, 61,
01523 63, 58, 62, 60, 124, 94, 38, 43, 45, 42,
01524 47, 37, 364, 33, 126, 365, 366, 367, 368, 369,
01525 370, 371, 372, 373, 374, 375, 123, 125, 91, 46,
01526 44, 96, 40, 41, 93, 59, 32, 10
01527 };
01528 # endif
01529
01530
01531 static const yytype_uint16 yyr1[] =
01532 {
01533 0, 148, 150, 149, 151, 152, 152, 152, 152, 153,
01534 154, 153, 155, 156, 157, 157, 157, 157, 159, 158,
01535 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
01536 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
01537 158, 158, 158, 160, 160, 161, 161, 161, 161, 161,
01538 161, 162, 163, 163, 164, 164, 164, 166, 165, 167,
01539 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
01540 168, 168, 169, 169, 170, 170, 170, 170, 170, 170,
01541 170, 170, 170, 170, 171, 171, 172, 172, 173, 173,
01542 174, 174, 174, 174, 174, 174, 174, 174, 174, 175,
01543 175, 175, 175, 175, 175, 175, 175, 175, 176, 176,
01544 177, 177, 177, 178, 178, 178, 178, 178, 179, 179,
01545 180, 180, 181, 182, 181, 183, 183, 183, 183, 183,
01546 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
01547 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
01548 183, 183, 183, 183, 184, 184, 184, 184, 184, 184,
01549 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01550 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01551 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01552 184, 184, 184, 184, 184, 185, 185, 185, 185, 185,
01553 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
01554 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
01555 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
01556 185, 185, 185, 185, 185, 185, 185, 186, 185, 185,
01557 185, 187, 188, 188, 188, 188, 189, 190, 190, 191,
01558 191, 191, 191, 191, 192, 192, 192, 192, 192, 194,
01559 193, 195, 196, 196, 197, 197, 197, 197, 198, 198,
01560 198, 199, 199, 199, 199, 199, 199, 199, 199, 199,
01561 200, 199, 201, 199, 199, 199, 199, 199, 199, 199,
01562 199, 199, 199, 202, 199, 199, 199, 199, 199, 199,
01563 199, 199, 199, 203, 204, 199, 205, 206, 199, 199,
01564 199, 207, 208, 199, 209, 199, 210, 211, 199, 212,
01565 199, 213, 199, 214, 215, 199, 199, 199, 199, 199,
01566 216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
01567 226, 227, 228, 228, 228, 229, 229, 230, 230, 231,
01568 231, 232, 232, 233, 233, 234, 234, 235, 235, 235,
01569 235, 235, 235, 235, 235, 235, 236, 236, 236, 236,
01570 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
01571 236, 237, 237, 238, 238, 238, 239, 239, 240, 240,
01572 241, 241, 243, 244, 242, 245, 245, 246, 246, 248,
01573 247, 249, 249, 249, 250, 250, 250, 250, 250, 250,
01574 250, 250, 250, 252, 251, 253, 251, 254, 255, 255,
01575 256, 256, 257, 257, 257, 258, 258, 259, 259, 260,
01576 260, 260, 261, 262, 262, 262, 263, 264, 265, 266,
01577 266, 267, 267, 268, 268, 269, 269, 270, 270, 271,
01578 271, 272, 272, 273, 273, 274, 275, 274, 276, 277,
01579 274, 278, 278, 278, 278, 279, 280, 280, 280, 280,
01580 281, 282, 282, 282, 282, 283, 283, 283, 283, 283,
01581 284, 284, 284, 284, 284, 284, 284, 285, 285, 286,
01582 286, 287, 287, 288, 289, 288, 288, 290, 290, 291,
01583 291, 291, 291, 291, 291, 291, 291, 291, 291, 291,
01584 291, 291, 291, 291, 292, 292, 292, 292, 293, 293,
01585 294, 294, 295, 295, 296, 297, 298, 298, 299, 299,
01586 300, 300, 301, 301, 302, 302, 303, 304, 304, 305,
01587 306, 305, 307, 307, 308, 308, 309, 309, 310, 310,
01588 310, 311, 311, 311, 311, 312, 312, 312, 313, 313,
01589 314, 314, 315, 315, 316, 317, 318, 318, 318, 319,
01590 319, 320, 320, 321
01591 };
01592
01593
01594 static const yytype_uint8 yyr2[] =
01595 {
01596 0, 2, 0, 2, 2, 1, 1, 3, 2, 1,
01597 0, 5, 4, 2, 1, 1, 3, 2, 0, 4,
01598 3, 3, 3, 2, 3, 3, 3, 3, 3, 4,
01599 1, 3, 3, 6, 5, 5, 5, 5, 3, 3,
01600 3, 3, 1, 3, 3, 1, 3, 3, 3, 2,
01601 1, 1, 1, 1, 1, 4, 4, 0, 5, 2,
01602 3, 4, 5, 4, 5, 2, 2, 2, 2, 2,
01603 1, 3, 1, 3, 1, 2, 3, 5, 2, 4,
01604 2, 4, 1, 3, 1, 3, 2, 3, 1, 3,
01605 1, 1, 4, 3, 3, 3, 3, 2, 1, 1,
01606 1, 4, 3, 3, 3, 3, 2, 1, 1, 1,
01607 2, 1, 3, 1, 1, 1, 1, 1, 1, 1,
01608 1, 1, 1, 0, 4, 1, 1, 1, 1, 1,
01609 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01610 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01611 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01612 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01613 1, 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, 3, 5, 3, 5, 6,
01616 5, 5, 5, 5, 4, 3, 3, 3, 3, 3,
01617 3, 3, 3, 3, 4, 4, 2, 2, 3, 3,
01618 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
01619 3, 2, 2, 3, 3, 3, 3, 0, 4, 6,
01620 1, 1, 1, 2, 4, 2, 3, 1, 1, 1,
01621 1, 2, 4, 2, 1, 2, 2, 4, 1, 0,
01622 2, 2, 2, 1, 1, 2, 3, 4, 3, 4,
01623 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01624 0, 4, 0, 4, 3, 3, 2, 3, 3, 1,
01625 4, 3, 1, 0, 6, 4, 3, 2, 1, 2,
01626 2, 6, 6, 0, 0, 7, 0, 0, 7, 5,
01627 4, 0, 0, 9, 0, 6, 0, 0, 8, 0,
01628 5, 0, 6, 0, 0, 9, 1, 1, 1, 1,
01629 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01630 1, 1, 1, 1, 2, 1, 1, 1, 5, 1,
01631 2, 1, 1, 1, 3, 1, 3, 1, 4, 6,
01632 3, 5, 2, 4, 1, 3, 6, 8, 4, 6,
01633 4, 2, 6, 2, 4, 6, 2, 4, 2, 4,
01634 1, 1, 1, 3, 1, 4, 1, 2, 1, 3,
01635 1, 1, 0, 0, 4, 4, 1, 3, 3, 0,
01636 5, 2, 4, 4, 2, 4, 4, 3, 3, 3,
01637 2, 1, 4, 0, 5, 0, 5, 5, 1, 1,
01638 6, 1, 1, 1, 1, 2, 1, 2, 1, 1,
01639 1, 1, 1, 1, 1, 2, 3, 3, 3, 3,
01640 3, 0, 3, 1, 2, 3, 3, 0, 3, 0,
01641 2, 0, 2, 0, 2, 1, 0, 3, 0, 0,
01642 5, 1, 1, 1, 1, 2, 1, 1, 1, 1,
01643 3, 1, 1, 2, 2, 1, 1, 1, 1, 1,
01644 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01645 1, 1, 1, 1, 0, 4, 2, 3, 2, 6,
01646 8, 4, 6, 4, 6, 2, 4, 6, 2, 4,
01647 2, 4, 1, 0, 1, 1, 1, 1, 1, 1,
01648 1, 3, 1, 3, 3, 3, 1, 3, 1, 3,
01649 1, 1, 2, 1, 1, 1, 2, 2, 1, 1,
01650 0, 4, 1, 2, 1, 3, 3, 2, 1, 1,
01651 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01652 0, 1, 0, 1, 2, 2, 0, 1, 1, 1,
01653 1, 1, 2, 0
01654 };
01655
01656
01657
01658
01659 static const yytype_uint16 yydefact[] =
01660 {
01661 2, 0, 0, 1, 0, 338, 339, 340, 0, 331,
01662 332, 333, 336, 334, 335, 337, 326, 327, 328, 329,
01663 289, 259, 259, 481, 480, 482, 483, 562, 0, 562,
01664 10, 0, 485, 484, 486, 475, 550, 477, 476, 478,
01665 479, 471, 472, 433, 491, 492, 0, 0, 0, 0,
01666 0, 573, 573, 82, 392, 451, 449, 451, 453, 441,
01667 447, 0, 0, 0, 3, 560, 6, 9, 30, 42,
01668 45, 53, 52, 0, 70, 0, 74, 84, 0, 50,
01669 240, 0, 280, 0, 0, 303, 306, 560, 0, 0,
01670 0, 0, 54, 298, 271, 272, 432, 434, 273, 274,
01671 275, 276, 430, 431, 429, 487, 488, 277, 0, 278,
01672 259, 5, 8, 164, 175, 165, 188, 161, 181, 171,
01673 170, 191, 192, 186, 169, 168, 163, 189, 193, 194,
01674 173, 162, 176, 180, 182, 174, 167, 183, 190, 185,
01675 184, 177, 187, 172, 160, 179, 178, 159, 166, 157,
01676 158, 154, 155, 156, 113, 115, 114, 149, 150, 146,
01677 128, 129, 130, 137, 134, 136, 131, 132, 151, 152,
01678 138, 139, 143, 133, 135, 125, 126, 127, 140, 141,
01679 142, 144, 145, 147, 148, 153, 118, 120, 122, 23,
01680 116, 117, 119, 121, 0, 0, 0, 0, 0, 0,
01681 0, 254, 0, 241, 264, 68, 258, 573, 0, 487,
01682 488, 0, 278, 573, 544, 69, 67, 562, 66, 0,
01683 573, 410, 65, 562, 563, 0, 0, 18, 237, 0,
01684 0, 326, 327, 289, 292, 411, 216, 0, 0, 217,
01685 286, 0, 0, 0, 560, 15, 562, 72, 14, 282,
01686 0, 566, 566, 242, 0, 0, 566, 542, 562, 0,
01687 0, 0, 80, 330, 0, 90, 91, 98, 300, 393,
01688 468, 467, 469, 466, 0, 465, 0, 0, 0, 0,
01689 0, 0, 0, 473, 474, 49, 231, 232, 569, 570,
01690 4, 571, 561, 0, 0, 0, 0, 0, 0, 0,
01691 399, 401, 0, 86, 0, 78, 75, 0, 0, 0,
01692 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
01693 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
01694 0, 0, 0, 0, 0, 573, 0, 0, 51, 0,
01695 0, 0, 0, 560, 0, 561, 0, 352, 351, 0,
01696 0, 487, 488, 278, 108, 109, 0, 0, 111, 0,
01697 0, 487, 488, 278, 319, 184, 177, 187, 172, 154,
01698 155, 156, 113, 114, 540, 321, 539, 0, 0, 0,
01699 415, 413, 299, 435, 0, 0, 404, 59, 297, 123,
01700 547, 286, 265, 261, 0, 0, 0, 255, 263, 0,
01701 573, 0, 0, 0, 0, 256, 562, 0, 291, 260,
01702 562, 250, 573, 573, 249, 562, 296, 48, 20, 22,
01703 21, 0, 293, 0, 0, 0, 0, 0, 0, 17,
01704 562, 284, 13, 561, 71, 562, 287, 568, 567, 243,
01705 568, 245, 288, 543, 0, 97, 473, 474, 88, 83,
01706 0, 0, 573, 0, 513, 455, 458, 456, 470, 452,
01707 436, 450, 437, 438, 454, 439, 440, 0, 443, 445,
01708 0, 446, 0, 0, 572, 7, 24, 25, 26, 27,
01709 28, 46, 47, 573, 0, 31, 40, 0, 41, 562,
01710 0, 76, 87, 44, 43, 0, 195, 264, 39, 213,
01711 221, 226, 227, 228, 223, 225, 235, 236, 229, 230,
01712 206, 207, 233, 234, 562, 222, 224, 218, 219, 220,
01713 208, 209, 210, 211, 212, 551, 556, 552, 557, 409,
01714 259, 407, 562, 551, 553, 552, 554, 408, 259, 0,
01715 573, 343, 0, 342, 0, 0, 0, 0, 0, 0,
01716 286, 0, 573, 0, 311, 316, 108, 109, 110, 0,
01717 494, 314, 493, 0, 573, 0, 0, 0, 513, 559,
01718 558, 323, 551, 552, 259, 259, 573, 573, 32, 197,
01719 38, 205, 57, 60, 0, 195, 546, 0, 266, 262,
01720 573, 555, 552, 562, 551, 552, 545, 290, 564, 246,
01721 251, 253, 295, 19, 0, 238, 0, 29, 0, 573,
01722 204, 73, 16, 283, 566, 0, 81, 94, 96, 562,
01723 551, 552, 519, 516, 515, 514, 517, 0, 531, 535,
01724 534, 530, 513, 0, 396, 518, 520, 522, 573, 528,
01725 573, 533, 573, 0, 512, 459, 0, 442, 444, 448,
01726 214, 215, 384, 573, 0, 382, 381, 270, 0, 85,
01727 79, 0, 0, 0, 0, 0, 0, 406, 63, 0,
01728 412, 0, 0, 248, 405, 61, 247, 341, 281, 573,
01729 573, 421, 573, 344, 573, 346, 304, 345, 307, 0,
01730 0, 310, 555, 285, 562, 551, 552, 0, 0, 496,
01731 0, 0, 108, 109, 112, 562, 0, 562, 513, 0,
01732 0, 0, 403, 56, 402, 55, 0, 0, 0, 573,
01733 124, 267, 257, 0, 0, 412, 0, 0, 573, 562,
01734 11, 244, 89, 92, 0, 519, 0, 364, 355, 357,
01735 562, 353, 573, 0, 0, 394, 0, 505, 538, 0,
01736 508, 532, 0, 510, 536, 0, 461, 462, 463, 457,
01737 464, 519, 0, 573, 0, 573, 526, 573, 573, 380,
01738 386, 0, 0, 268, 77, 196, 0, 37, 202, 36,
01739 203, 64, 565, 0, 34, 200, 35, 201, 62, 422,
01740 423, 573, 424, 0, 573, 349, 0, 0, 347, 0,
01741 0, 0, 309, 0, 0, 412, 0, 317, 0, 0,
01742 412, 320, 541, 562, 0, 498, 324, 0, 0, 198,
01743 0, 0, 252, 294, 524, 562, 0, 362, 0, 521,
01744 562, 0, 0, 523, 573, 573, 537, 573, 529, 573,
01745 573, 0, 0, 390, 387, 388, 391, 0, 383, 371,
01746 373, 0, 376, 0, 378, 400, 269, 239, 33, 199,
01747 0, 0, 426, 350, 0, 12, 428, 0, 301, 302,
01748 0, 0, 266, 573, 312, 0, 495, 315, 497, 322,
01749 513, 416, 414, 0, 354, 365, 0, 360, 356, 395,
01750 398, 397, 0, 501, 0, 503, 0, 509, 0, 506,
01751 511, 460, 0, 525, 0, 385, 573, 573, 573, 527,
01752 573, 573, 0, 425, 0, 99, 100, 107, 0, 427,
01753 0, 305, 308, 418, 419, 417, 0, 0, 0, 58,
01754 0, 363, 0, 358, 573, 573, 573, 573, 286, 0,
01755 389, 0, 368, 0, 370, 377, 0, 374, 379, 106,
01756 0, 573, 0, 573, 573, 0, 318, 0, 361, 0,
01757 502, 0, 499, 504, 507, 555, 285, 573, 573, 573,
01758 573, 555, 105, 562, 551, 552, 420, 348, 313, 325,
01759 359, 573, 369, 0, 366, 372, 375, 412, 500, 573,
01760 367
01761 };
01762
01763
01764 static const yytype_int16 yydefgoto[] =
01765 {
01766 -1, 1, 2, 64, 65, 66, 229, 539, 540, 244,
01767 245, 421, 68, 69, 339, 70, 71, 583, 719, 72,
01768 73, 246, 74, 75, 76, 449, 77, 202, 358, 359,
01769 186, 187, 188, 189, 584, 536, 191, 79, 423, 204,
01770 250, 529, 674, 410, 411, 218, 219, 206, 397, 412,
01771 488, 80, 337, 435, 604, 341, 800, 342, 801, 697,
01772 926, 701, 698, 875, 566, 568, 711, 880, 237, 82,
01773 83, 84, 85, 86, 87, 88, 89, 90, 91, 678,
01774 542, 686, 797, 798, 350, 738, 739, 740, 763, 654,
01775 655, 764, 844, 845, 268, 269, 454, 633, 745, 301,
01776 483, 92, 93, 388, 577, 576, 549, 925, 680, 791,
01777 861, 865, 94, 95, 96, 97, 98, 99, 100, 280,
01778 467, 101, 282, 276, 274, 278, 459, 646, 645, 755,
01779 759, 102, 275, 103, 104, 209, 210, 107, 211, 212,
01780 561, 700, 709, 710, 635, 636, 637, 638, 639, 766,
01781 767, 640, 641, 642, 643, 836, 747, 377, 567, 255,
01782 413, 214, 238, 608, 531, 571, 290, 407, 408, 670,
01783 439, 543, 345, 248
01784 };
01785
01786
01787
01788 #define YYPACT_NINF -747
01789 static const yytype_int16 yypact[] =
01790 {
01791 -747, 81, 2552, -747, 7102, -747, -747, -747, 6615, -747,
01792 -747, -747, -747, -747, -747, -747, 7320, 7320, -747, -747,
01793 7320, 3237, 2814, -747, -747, -747, -747, 100, 6476, -31,
01794 -747, -26, -747, -747, -747, 5715, 2955, -747, -747, 5842,
01795 -747, -747, -747, -747, -747, -747, 8519, 8519, 83, 4434,
01796 8628, 7538, 7865, 6878, -747, 6337, -747, -747, -747, -24,
01797 29, 252, 8737, 8519, -747, 193, -747, 1104, -747, 458,
01798 -747, -747, 129, 77, -747, 69, 8846, -747, 139, 2797,
01799 22, 41, -747, 8628, 8628, -747, -747, 5078, 8951, 9056,
01800 9161, 5588, 33, 46, -747, -747, 157, -747, -747, -747,
01801 -747, -747, -747, -747, -747, 25, 58, -747, 179, 613,
01802 51, -747, -747, -747, -747, -747, -747, -747, -747, -747,
01803 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747,
01804 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747,
01805 -747, -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, 134,
01810 -747, -747, -747, -747, 182, 8519, 279, 4564, 8519, 8519,
01811 8519, -747, 263, 2797, 260, -747, -747, 237, 207, 43,
01812 206, 298, 254, 265, -747, -747, -747, 4969, -747, 7320,
01813 7320, -747, -747, 5208, -747, 8628, 661, -747, 272, 287,
01814 4694, -747, -747, -747, 295, 307, -747, 304, 51, 416,
01815 619, 7211, 4434, 384, 193, 1104, -31, 399, -747, 458,
01816 419, 221, 300, -747, 260, 430, 300, -747, -31, 497,
01817 501, 9266, 442, -747, 351, 366, 383, 409, -747, -747,
01818 -747, -747, -747, -747, 644, -747, 754, 813, 605, 464,
01819 819, 478, 68, 530, 532, -747, -747, -747, -747, -747,
01820 -747, -747, 5317, 8628, 8628, 8628, 8628, 7211, 8628, 8628,
01821 -747, -747, 7974, -747, 4434, 6990, 470, 7974, 8519, 8519,
01822 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519,
01823 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519,
01824 8519, 8519, 8519, 8519, 9548, 7320, 9625, 3609, 458, 86,
01825 86, 8628, 8628, 193, 597, 480, 562, -747, -747, 454,
01826 601, 54, 76, 99, 331, 349, 8628, 481, -747, 45,
01827 473, -747, -747, -747, -747, 217, 286, 305, 318, 321,
01828 347, 363, 376, 381, -747, -747, -747, 391, 10549, 10549,
01829 -747, -747, -747, -747, 8737, 8737, -747, 535, -747, -747,
01830 -747, 388, -747, -747, 8519, 8519, 7429, -747, -747, 9702,
01831 7320, 9779, 8519, 8519, 7647, -747, -31, 492, -747, -747,
01832 -31, -747, 506, 539, -747, 106, -747, -747, -747, -747,
01833 -747, 6615, -747, 8519, 4029, 508, 9702, 9779, 8519, 1104,
01834 -31, -747, -747, 5445, 541, -31, -747, 7756, -747, -747,
01835 7865, -747, -747, -747, 272, 510, -747, -747, -747, 543,
01836 9266, 9856, 7320, 9933, 774, -747, -747, -747, -747, -747,
01837 -747, -747, -747, -747, -747, -747, -747, 313, -747, -747,
01838 491, -747, 8519, 8519, -747, -747, -747, -747, -747, -747,
01839 -747, -747, -747, 32, 8519, -747, 545, 546, -747, -31,
01840 9266, 551, -747, -747, -747, 566, 9473, -747, -747, 416,
01841 2184, 2184, 2184, 2184, 781, 781, 2273, 2938, 2184, 2184,
01842 1364, 1364, 662, 662, 2656, 781, 781, 927, 927, 768,
01843 397, 397, 416, 416, 416, 3378, 6083, 3464, 6197, -747,
01844 307, -747, -31, 647, -747, 660, -747, -747, 3096, 650,
01845 688, -747, 3754, 685, 4174, 56, 56, 597, 8083, 650,
01846 112, 10010, 7320, 10087, -747, 458, -747, 510, -747, 193,
01847 -747, -747, -747, 10164, 7320, 10241, 3609, 8628, 1131, -747,
01848 -747, -747, -747, -747, 1739, 1739, 32, 32, -747, 10608,
01849 -747, 2797, -747, -747, 6615, 10627, -747, 8519, 260, -747,
01850 265, 5969, 2673, -31, 490, 500, -747, -747, -747, -747,
01851 7429, 7647, -747, -747, 8628, 2797, 570, -747, 307, 307,
01852 2797, 213, 1104, -747, 300, 9266, 543, 505, 282, -31,
01853 38, 261, 603, -747, -747, -747, -747, 972, -747, -747,
01854 -747, -747, 1223, 66, -747, -747, -747, -747, 580, -747,
01855 583, 683, 589, 687, -747, -747, 893, -747, -747, -747,
01856 416, 416, -747, 576, 4839, -747, -747, 604, 8192, -747,
01857 543, 9266, 8737, 8519, 630, 8737, 8737, -747, 535, 608,
01858 677, 8737, 8737, -747, -747, 535, -747, -747, -747, 8301,
01859 740, -747, 588, -747, 740, -747, -747, -747, -747, 650,
01860 44, -747, 239, 257, -31, 141, 145, 8628, 193, -747,
01861 8628, 3609, 505, 282, -747, -31, 650, 106, 1223, 3609,
01862 193, 6754, -747, -747, -747, -747, 4839, 4694, 8519, 32,
01863 -747, -747, -747, 8519, 8519, 507, 8519, 8519, 636, 106,
01864 -747, -747, -747, 291, 8519, -747, 972, 457, -747, 651,
01865 -31, -747, 639, 4839, 4694, -747, 1223, -747, -747, 1223,
01866 -747, -747, 598, -747, -747, 4694, -747, -747, -747, -747,
01867 -747, 681, 1017, 639, 679, 654, -747, 656, 657, -747,
01868 -747, 789, 8519, 664, 543, 2797, 8519, -747, 2797, -747,
01869 2797, -747, -747, 8737, -747, 2797, -747, 2797, -747, 545,
01870 -747, 713, -747, 4304, 796, -747, 8628, 650, -747, 650,
01871 4839, 4839, -747, 8410, 3899, 189, 56, -747, 193, 650,
01872 -747, -747, -747, -31, 650, -747, -747, 799, 673, 2797,
01873 4694, 8519, 7647, -747, -747, -31, 884, 671, 1079, -747,
01874 -31, 803, 686, -747, 676, 678, -747, 684, -747, 694,
01875 684, 690, 9371, -747, 699, -747, -747, 711, -747, 1251,
01876 -747, 1251, -747, 598, -747, -747, 700, 2797, -747, 2797,
01877 9476, 86, -747, -747, 4839, -747, -747, 86, -747, -747,
01878 650, 650, -747, 365, -747, 3609, -747, -747, -747, -747,
01879 1131, -747, -747, 706, -747, 707, 884, 716, -747, -747,
01880 -747, -747, 1223, -747, 598, -747, 598, -747, 598, -747,
01881 -747, -747, 790, 520, 1017, -747, 708, 715, 684, -747,
01882 717, 684, 797, -747, 523, 366, 383, 409, 3609, -747,
01883 3754, -747, -747, -747, -747, -747, 4839, 650, 3609, -747,
01884 884, 707, 884, 721, 684, 727, 684, 684, -747, 10318,
01885 -747, 1251, -747, 598, -747, -747, 598, -747, -747, 510,
01886 10395, 7320, 10472, 688, 588, 650, -747, 650, 707, 884,
01887 -747, 598, -747, -747, -747, 730, 731, 684, 735, 684,
01888 684, 55, 282, -31, 128, 158, -747, -747, -747, -747,
01889 707, 684, -747, 598, -747, -747, -747, 163, -747, 684,
01890 -747
01891 };
01892
01893
01894 static const yytype_int16 yypgoto[] =
01895 {
01896 -747, -747, -747, 452, -747, 28, -747, -545, 277, -747,
01897 39, -747, -293, 184, -58, 71, -747, -169, -747, -7,
01898 791, -142, -13, -37, -747, -396, -29, 1623, -312, 788,
01899 -54, -747, -25, -747, -747, 20, -747, 1066, -747, -45,
01900 -747, 11, 47, -324, 115, 5, -747, -322, -196, 53,
01901 -295, 8, -747, -747, -747, -747, -747, -747, -747, -747,
01902 -747, -747, -747, -747, -747, -747, -747, -747, 2, -747,
01903 -747, -747, -747, -747, -747, -747, -747, -747, -747, 205,
01904 -338, -516, -72, -618, -747, -722, -671, 147, -747, -489,
01905 -747, -600, -747, -12, -747, -747, -747, -747, -747, -747,
01906 -747, -747, -747, 798, -747, -747, -531, -747, -50, -747,
01907 -747, -747, -747, -747, -747, 811, -747, -747, -747, -747,
01908 -747, -747, -747, -747, 856, -747, -140, -747, -747, -747,
01909 -747, 7, -747, 12, -747, 1268, 1605, 823, 1289, 1575,
01910 -747, -747, 35, -387, -697, -568, -690, 273, -696, -746,
01911 72, 181, -747, -526, -747, -449, 270, -747, -747, -747,
01912 97, -360, 758, -276, -747, -747, -56, -4, 278, -585,
01913 -214, 6, -18, -2
01914 };
01915
01916
01917
01918
01919 #define YYTABLE_NINF -574
01920 static const yytype_int16 yytable[] =
01921 {
01922 111, 273, 544, 227, 81, 644, 81, 254, 725, 201,
01923 201, 532, 498, 201, 493, 192, 689, 405, 208, 208,
01924 193, 706, 208, 225, 262, 228, 340, 222, 190, 343,
01925 688, 344, 112, 221, 733, 192, 247, 375, 441, 306,
01926 193, 67, 443, 67, 596, 558, 559, 292, 190, 253,
01927 257, 81, 208, 838, 616, 264, 833, 541, 530, 741,
01928 538, 263, 794, -93, 208, 846, 799, 634, -103, 207,
01929 207, 291, 380, 207, 589, 190, 593, 380, 264, -99,
01930 596, 3, 589, 685, 263, 208, 208, 716, 717, 208,
01931 349, 360, 360, 291, 660, 743, 263, 263, 263, 541,
01932 430, -100, 574, 575, 251, 909, 888, -330, 652, 805,
01933 230, 190, -489, 213, 213, 387, 224, 213, 378, 644,
01934 810, 386, 279, 530, -107, 538, 334, 768, 619, 470,
01935 -489, 205, 215, 285, -99, 216, 461, -106, 464, 240,
01936 468, -102, 830, 298, 299, -490, 653, -93, 252, 256,
01937 390, 609, -99, 392, 393, 885, 809, 300, 560, 833,
01938 -330, -330, 489, 847, 814, -90, -102, -100, 741, 827,
01939 -104, -104, 379, 744, 471, 281, -101, 609, -93, 335,
01940 336, -93, 381, 644, 803, -93, 302, 381, 432, 288,
01941 288, 289, 289, 220, -90, 909, 838, -551, -91, 81,
01942 -103, 288, -103, 289, 769, 398, 833, 846, 888, 303,
01943 201, 398, 201, 201, -101, 931, -91, 405, 414, 208,
01944 835, 208, 208, 839, 448, 208, 433, 208, 694, 247,
01945 820, 288, 81, 289, 249, 476, 477, 478, 479, -98,
01946 705, 596, 223, 81, 81, 742, 221, 224, 307, 386,
01947 291, 704, -97, 224, 444, 923, 56, 486, 741, 644,
01948 741, 958, 497, 264, -103, 774, 384, 338, 338, 263,
01949 207, 338, 207, -102, 389, -102, 491, 609, 589, 589,
01950 429, -93, -105, 545, 546, -95, -95, 547, 980, 609,
01951 874, 247, 399, -490, 81, 208, 208, 208, 208, 81,
01952 208, 208, -481, -104, 208, -104, 81, 264, -101, 208,
01953 -101, 283, 284, 263, 213, -100, 213, -412, 741, 933,
01954 475, 813, -71, 907, 223, 910, 243, 648, 201, -92,
01955 927, 67, 406, 414, 409, 391, 480, 208, 288, 81,
01956 289, 403, 924, 208, 208, 400, 401, 537, 395, 291,
01957 586, 588, 804, -85, 528, 487, -481, -548, 208, 254,
01958 487, 437, 741, -107, 741, 562, 935, -285, 438, 493,
01959 -95, -480, 394, 485, 455, -549, -412, 396, 494, -94,
01960 793, -551, 548, 957, 790, 402, 208, 208, 987, 426,
01961 -482, 741, 588, 201, 722, 254, 603, -96, 414, -552,
01962 731, -95, 208, -483, -95, 404, -485, 415, -95, 417,
01963 398, 398, 537, 448, 422, 968, -475, 456, 457, 528,
01964 -285, -285, 111, 424, -552, -480, 81, -412, 192, -412,
01965 -412, 644, -484, 193, -478, 81, 451, 217, 537, 657,
01966 440, 190, 400, 427, -482, 201, 528, 438, -486, 220,
01967 414, -487, 264, 448, 208, 578, 580, -483, 263, 647,
01968 -485, -475, 596, 67, 537, 308, -478, -548, -488, -475,
01969 -475, 528, 612, -548, 243, 428, 569, 338, 338, 338,
01970 338, 656, 481, 482, 308, -549, -484, -478, -478, 452,
01971 453, -549, 264, 590, -278, 298, 299, -106, 263, 781,
01972 589, 416, -486, 497, -487, -487, 788, 425, -70, 735,
01973 664, 623, 624, 625, 626, -475, 331, 332, 333, 243,
01974 -478, -488, -488, 918, 434, 338, 338, 431, 669, 920,
01975 570, -555, 722, 556, 614, 668, 676, 557, 681, 551,
01976 555, 667, 721, 675, 81, 201, 81, -278, -278, 673,
01977 414, 687, 687, 445, 208, 588, 254, 201, 563, 720,
01978 446, 447, 414, 436, 537, 699, 208, 442, 81, 208,
01979 465, 528, 676, 676, 656, 656, 537, 726, 732, 713,
01980 715, 243, 450, 528, 469, 673, 673, 727, 398, 669,
01981 -555, 192, 552, 553, 821, -286, 193, 826, 472, -102,
01982 473, 690, 796, 793, 190, 939, 208, 676, 950, -104,
01983 492, 564, 565, 773, 548, 669, -101, 264, 550, 667,
01984 673, 712, 714, 263, 448, 474, 554, 973, 761, 582,
01985 623, 624, 625, 626, 789, 598, 748, 649, 748, 806,
01986 748, -555, 808, -555, -555, 607, 600, -551, -286, -286,
01987 735, 770, 623, 624, 625, 626, 81, 816, 564, 565,
01988 677, 951, 952, 264, 208, 627, 455, 208, 208, 263,
01989 463, 628, 629, 208, 208, 662, 609, 792, 795, 601,
01990 795, -85, 795, 615, 597, -264, 658, 627, 599, 824,
01991 669, 661, 630, 602, 629, 631, 679, 728, 683, 208,
01992 385, 669, 208, 81, 807, 455, 428, 730, 611, 456,
01993 457, 81, 734, 613, 630, 418, 815, 656, 81, 81,
01994 746, 762, -107, 749, 419, 420, 398, 856, -106, 752,
01995 308, 190, 487, 494, 671, 751, 777, 779, 867, 754,
01996 770, 776, 784, 786, -265, 81, 81, 672, 456, 457,
01997 458, 707, 782, -98, 691, 793, -102, 81, 872, -97,
01998 110, 770, 110, 748, 783, 748, 748, 659, 735, -104,
01999 623, 624, 625, 626, 110, 110, 822, 254, 110, 329,
02000 330, 331, 332, 333, 762, 208, -101, -93, 729, 862,
02001 842, 828, 866, 848, 849, 81, 851, 853, 208, 855,
02002 -95, 860, 81, 81, -266, 864, 81, 110, 110, 881,
02003 882, 886, 687, 890, 876, 455, 892, -92, 894, 682,
02004 110, 684, 81, 891, 896, 905, 622, 901, 623, 624,
02005 625, 626, 748, 748, 898, 748, 308, 748, 748, 904,
02006 -267, 110, 110, 929, 903, 110, 938, 930, 941, 308,
02007 263, 321, 322, 949, 858, 943, 932, 946, 456, 457,
02008 460, 959, 914, 627, 321, 322, 81, 961, 263, 628,
02009 629, 795, -551, -552, 455, 983, 606, 81, 364, 347,
02010 455, 338, 977, 825, 338, 329, 330, 331, 332, 333,
02011 630, 382, 940, 631, 802, 326, 327, 328, 329, 330,
02012 331, 332, 333, 976, 748, 748, 748, 383, 748, 748,
02013 750, 811, 753, 277, 376, 928, 632, 456, 457, 462,
02014 81, 906, 81, 456, 457, 466, 765, 834, 81, 0,
02015 81, 771, 748, 748, 748, 748, 735, 0, 623, 624,
02016 625, 626, 0, 0, 201, 0, 0, 756, 757, 414,
02017 758, 681, 795, 208, 0, 110, 44, 45, 0, 528,
02018 0, 0, 0, 537, 0, 748, 748, 748, 748, 669,
02019 528, 0, 0, 736, 0, 110, 0, 110, 110, 748,
02020 338, 110, 0, 110, 0, 812, 0, 748, 110, 0,
02021 0, 0, 0, 817, 818, 308, 0, 0, 0, 110,
02022 110, 0, 868, 0, 869, 0, 0, 823, 0, 0,
02023 321, 322, 0, 0, 877, 0, 0, 0, 829, 879,
02024 831, 832, 837, 0, 735, 840, 623, 624, 625, 626,
02025 0, 0, 841, 0, 0, 850, 0, 852, 854, 0,
02026 0, 0, 0, 328, 329, 330, 331, 332, 333, 0,
02027 110, 110, 110, 110, 110, 110, 110, 110, 0, 0,
02028 110, 736, 110, 0, 0, 110, 0, 737, 0, 843,
02029 863, 623, 624, 625, 626, 921, 922, 870, 871, 0,
02030 0, 873, 203, 203, 0, 0, 203, 0, 0, 0,
02031 0, 878, 0, 110, 0, 110, 0, 883, 0, 110,
02032 110, 0, 0, 884, 893, 895, 0, 897, 889, 899,
02033 900, 0, 236, 239, 110, 0, 0, 203, 203, 0,
02034 0, 0, 0, 0, 908, 0, 911, 0, 286, 287,
02035 0, 735, 956, 623, 624, 625, 626, 0, 0, 0,
02036 0, 919, 110, 110, 293, 294, 295, 296, 297, 0,
02037 0, 0, 0, 0, 0, 0, 0, 0, 110, 0,
02038 978, 0, 979, 0, 0, 934, 0, 936, 736, 0,
02039 0, 937, 0, 0, 887, 0, 942, 944, 945, 0,
02040 947, 948, 110, 622, 0, 623, 624, 625, 626, 0,
02041 0, 110, 0, 0, 0, 953, 0, 954, 0, 0,
02042 0, 0, 0, 955, 960, 962, 963, 964, 0, 0,
02043 110, 0, 0, 0, 967, 0, 969, 0, 0, 970,
02044 627, 0, 0, 0, 0, 0, 628, 629, 0, 0,
02045 0, 0, 0, 0, 981, 0, 0, 982, 984, 985,
02046 986, 0, 0, 0, 0, 0, 0, 630, 0, 0,
02047 631, 988, 0, 0, 0, 0, 989, 0, 0, 990,
02048 0, 203, 0, 0, 203, 203, 286, 0, 0, 0,
02049 105, 0, 105, 708, 0, 622, 0, 623, 624, 625,
02050 626, 0, 0, 203, 0, 203, 203, 0, 0, 0,
02051 0, 108, 0, 108, 0, 0, 0, 0, 0, 0,
02052 110, 0, 110, 761, 0, 623, 624, 625, 626, 0,
02053 110, 0, 627, 0, 0, 0, 0, 105, 628, 629,
02054 0, 265, 110, 0, 110, 110, 0, 0, 0, 0,
02055 0, 0, 0, 0, 0, 0, 0, 0, 108, 630,
02056 627, 0, 631, 0, 265, 0, 628, 629, 0, 0,
02057 0, 0, 0, 0, 0, 0, 351, 361, 361, 361,
02058 0, 0, 110, 0, 0, 0, 0, 630, 203, 0,
02059 631, 0, 0, 496, 499, 500, 501, 502, 503, 504,
02060 505, 506, 507, 508, 509, 510, 511, 512, 513, 514,
02061 515, 516, 517, 518, 519, 520, 521, 522, 523, 524,
02062 0, 203, 0, 0, 0, 0, 0, 0, 0, 0,
02063 0, 0, 110, 0, 0, 0, 0, 0, 0, 0,
02064 110, 0, 0, 110, 110, 0, 0, 0, 0, 110,
02065 110, 0, 308, 309, 310, 311, 312, 313, 314, 315,
02066 316, 317, 318, -574, -574, 0, 0, 321, 322, 0,
02067 579, 581, 0, 0, 0, 110, 0, 0, 110, 110,
02068 585, 203, 203, 0, 0, 105, 203, 110, 579, 581,
02069 203, 0, 0, 0, 110, 110, 324, 325, 326, 327,
02070 328, 329, 330, 331, 332, 333, 108, 0, 0, 605,
02071 0, 0, 0, 0, 610, 0, 0, 0, 105, 0,
02072 0, 110, 110, 203, 0, 0, 203, 0, 0, 105,
02073 105, 0, 0, 110, 0, 0, 0, 0, 203, 108,
02074 0, 0, 0, 0, 0, 0, 0, 0, 0, 265,
02075 108, 108, 0, 0, 0, 0, 0, 0, 650, 651,
02076 0, 110, 0, 0, 0, 0, 0, 0, 0, 0,
02077 203, 110, 0, 0, 110, 0, 0, 0, 110, 110,
02078 105, 0, 110, 0, 0, 105, 0, 0, 0, 0,
02079 0, 0, 105, 265, 0, 0, 0, 109, 110, 109,
02080 0, 108, 0, 0, 0, 0, 108, 0, 0, 0,
02081 0, 0, 0, 108, 0, 0, 0, 0, 0, 0,
02082 0, 0, 0, 0, 0, 105, 0, 106, 0, 106,
02083 0, 0, 0, 0, 203, 0, 0, 0, 203, 0,
02084 0, 0, 110, 0, 109, 78, 108, 78, 267, 0,
02085 203, 0, 0, 110, 0, 0, 0, 0, 0, 0,
02086 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02087 0, 267, 0, 203, 106, 0, 0, 0, 266, 0,
02088 0, 0, 0, 353, 363, 363, 203, 203, 0, 0,
02089 0, 0, 78, 0, 0, 0, 110, 0, 110, 0,
02090 0, 266, 0, 0, 110, 0, 110, 0, 0, 0,
02091 0, 0, 105, 352, 362, 362, 362, 0, 0, 0,
02092 0, 105, 0, 0, 0, 0, 0, 0, 0, 110,
02093 0, 348, 0, 108, 0, 0, 0, 0, 265, 0,
02094 0, 0, 108, 0, 203, 0, 0, 0, 585, 775,
02095 0, 778, 780, 0, 0, 0, 0, 785, 787, -573,
02096 0, 0, 0, 0, 0, 203, 0, -573, -573, -573,
02097 0, 0, -573, -573, -573, 0, -573, 0, 265, 0,
02098 0, 0, 0, 0, 0, 0, -573, 0, 0, 0,
02099 0, 0, 109, 0, 0, 0, -573, -573, 0, -573,
02100 -573, -573, -573, -573, 819, 0, 0, 0, 0, 778,
02101 780, 0, 785, 787, 0, 0, 0, 0, 0, 0,
02102 203, 0, 106, 0, 0, 109, 0, 0, 0, 0,
02103 105, 0, 105, 0, 0, 0, 109, 109, 0, 0,
02104 78, 0, 0, 0, -573, 0, 0, 0, 0, 0,
02105 0, 108, 0, 108, 105, 106, 267, 0, 203, 0,
02106 0, 0, 857, 0, 0, 0, 106, 106, 0, 859,
02107 0, 0, 0, 78, 0, 108, 0, 0, 0, 0,
02108 0, 0, 0, 0, 78, 78, 266, 109, 0, 203,
02109 0, 0, 109, 0, 0, 0, -573, 0, -573, 109,
02110 267, 220, -573, 265, -573, 0, -573, 859, 203, 0,
02111 0, 0, 0, 0, 0, 0, 0, 106, 0, 0,
02112 0, 0, 106, 0, 0, 0, 0, 0, 0, 106,
02113 266, 0, 109, 0, 0, 78, 0, 0, 0, 0,
02114 78, 0, 105, 0, 0, 0, 0, 78, 0, 265,
02115 495, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02116 0, 0, 106, 108, 0, 0, 0, 0, 0, 0,
02117 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02118 78, 0, 0, 0, 0, 0, 0, 0, 0, 105,
02119 0, 0, 0, 0, 0, 0, 0, 105, 0, 0,
02120 0, 0, 0, 0, 105, 105, 0, 0, 0, 0,
02121 108, 0, 0, 0, 0, 0, 0, 0, 108, 109,
02122 0, 0, 0, 0, 0, 108, 108, 0, 109, 0,
02123 0, 105, 105, 0, 0, 0, 0, 203, 0, 0,
02124 0, 0, 0, 105, 0, 267, 0, 0, 0, 106,
02125 0, 0, 108, 108, 0, 0, 0, 0, 106, 0,
02126 0, 0, 0, 0, 108, 0, 0, 78, 0, 0,
02127 0, 0, 0, 0, 0, 266, 78, 0, 0, 0,
02128 0, 105, 0, 0, 0, 267, 0, 0, 105, 105,
02129 0, 0, 105, 0, 0, 0, 0, 0, 0, 0,
02130 0, 0, 108, 0, 0, 0, 0, 0, 105, 108,
02131 108, 0, 0, 108, 0, 266, 0, 0, 0, 0,
02132 0, 0, 0, 0, 0, 0, 0, 0, 0, 108,
02133 361, 0, 0, 0, 0, 0, 0, 109, 0, 109,
02134 0, 0, 0, 0, 0, 0, 0, 0, 915, 0,
02135 0, 0, 105, 0, 0, 0, 0, 0, 0, 0,
02136 0, 109, 0, 105, 0, 0, 0, 106, 0, 106,
02137 0, 0, 0, 108, 0, 0, 0, 0, 0, 0,
02138 0, 0, 0, 0, 108, 78, 0, 78, 0, 0,
02139 0, 106, 0, 0, 0, 0, 0, 0, 0, 0,
02140 0, 0, 0, 0, 0, 0, 105, 0, 105, 78,
02141 267, 0, 0, 0, 105, 0, 105, 0, 0, 0,
02142 0, 0, 0, 0, 0, 0, 0, 108, 0, 108,
02143 0, 0, 0, 0, 0, 108, 0, 108, 0, 0,
02144 266, 760, 0, 0, 0, 0, 0, 0, 0, 109,
02145 0, 0, 0, 0, 0, 0, 267, 0, 0, 0,
02146 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02147 0, 0, 308, -574, -574, -574, -574, 313, 314, 106,
02148 0, -574, -574, 0, 0, 0, 266, 321, 322, 0,
02149 0, 0, 0, 0, 0, 0, 109, 78, 0, 0,
02150 0, 0, 0, 0, 109, 495, 0, 0, 0, 0,
02151 0, 109, 109, 0, 0, 0, 324, 325, 326, 327,
02152 328, 329, 330, 331, 332, 333, 106, 0, 0, 0,
02153 0, 0, 0, 0, 106, 0, 0, 0, 109, 109,
02154 0, 106, 106, 0, 78, 0, 0, 0, 0, 0,
02155 109, 0, 78, 0, 0, 0, 0, 0, 0, 78,
02156 78, 308, 309, 310, 311, 312, 313, 314, 106, 106,
02157 317, 318, 0, 0, 0, 0, 321, 322, 0, 0,
02158 106, 0, 0, 0, 0, 0, 78, 78, 109, 0,
02159 0, 0, 0, 0, 0, 109, 109, 0, 78, 109,
02160 0, 0, 0, 0, 0, 324, 325, 326, 327, 328,
02161 329, 330, 331, 332, 333, 109, 0, 0, 106, 0,
02162 0, 0, 0, 0, 0, 106, 106, 0, 0, 106,
02163 0, 0, 0, 0, 0, 0, 78, 363, 0, 0,
02164 0, 0, 0, 78, 78, 106, 0, 78, 0, 0,
02165 0, 0, 0, 0, 0, 917, 0, 0, 0, 109,
02166 0, 0, 0, 78, 0, 0, 0, 362, 0, 0,
02167 109, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02168 0, 0, 0, 0, 0, 916, 0, 0, 0, 106,
02169 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02170 106, 0, 0, 913, 0, 0, 0, 78, 0, 0,
02171 0, 0, 0, 109, 0, 109, 0, 0, 78, 0,
02172 0, 109, 0, 109, 0, 0, 0, 0, 0, 0,
02173 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02174 0, 0, 0, 106, 0, 106, 0, 0, 0, 0,
02175 0, 106, 0, 106, 0, 0, 0, 0, 0, 0,
02176 0, 78, 0, 78, 0, 0, 0, 0, 0, 78,
02177 0, 78, -573, 4, 0, 5, 6, 7, 8, 9,
02178 0, 0, 0, 10, 11, 0, 0, 0, 12, 0,
02179 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02180 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02181 0, 27, 0, 0, 0, 0, 0, 28, 29, 30,
02182 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02183 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02184 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02185 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02186 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02187 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02188 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02189 0, 0, 0, -285, 61, 62, 63, 0, 0, 0,
02190 0, -285, -285, -285, 0, 0, -285, -285, -285, 0,
02191 -285, 0, 0, 0, 0, 0, 0, -573, 0, -573,
02192 -285, -285, -285, 0, 0, 0, 0, 0, 0, 0,
02193 -285, -285, 0, -285, -285, -285, -285, -285, 0, 0,
02194 0, 0, 0, 0, 308, 309, 310, 311, 312, 313,
02195 314, 315, 316, 317, 318, 319, 320, 0, 0, 321,
02196 322, -285, -285, -285, -285, -285, -285, -285, -285, -285,
02197 -285, -285, -285, -285, 0, 0, -285, -285, -285, 0,
02198 724, -285, 0, 0, 0, 0, 323, -285, 324, 325,
02199 326, 327, 328, 329, 330, 331, 332, 333, 0, 0,
02200 -285, 0, -105, -285, -285, -285, -285, -285, -285, -285,
02201 -285, -285, -285, -285, -285, 0, 0, 0, 0, 0,
02202 0, 0, 0, 224, 0, 0, 0, 0, 0, 0,
02203 -285, -285, -285, -285, -411, 0, -285, -285, -285, 0,
02204 -285, 0, -411, -411, -411, 0, 0, -411, -411, -411,
02205 0, -411, 0, 0, 0, 0, 0, 0, 0, 0,
02206 -411, -411, -411, 0, 0, 0, 0, 0, 0, 0,
02207 0, -411, -411, 0, -411, -411, -411, -411, -411, 0,
02208 0, 0, 0, 0, 0, 308, 309, 310, 311, 312,
02209 313, 314, 315, 316, 317, 318, 319, 320, 0, 0,
02210 321, 322, -411, -411, -411, -411, -411, -411, -411, -411,
02211 -411, -411, -411, -411, -411, 0, 0, -411, -411, -411,
02212 0, 0, -411, 0, 0, 0, 0, 323, -411, 324,
02213 325, 326, 327, 328, 329, 330, 331, 332, 333, 0,
02214 0, 0, 0, 0, -411, 0, -411, -411, -411, -411,
02215 -411, -411, -411, -411, -411, -411, 0, 0, 0, 0,
02216 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02217 -411, -411, -411, -411, -411, -279, 220, -411, -411, -411,
02218 0, -411, 0, -279, -279, -279, 0, 0, -279, -279,
02219 -279, 0, -279, 0, 0, 0, 0, 0, 0, 0,
02220 0, 0, -279, -279, -279, 0, 0, 0, 0, 0,
02221 0, 0, -279, -279, 0, -279, -279, -279, -279, -279,
02222 0, 0, 0, 0, 0, 0, 308, 309, 310, 311,
02223 312, 313, 314, 315, 0, 317, 318, 0, 0, 0,
02224 0, 321, 322, -279, -279, -279, -279, -279, -279, -279,
02225 -279, -279, -279, -279, -279, -279, 0, 0, -279, -279,
02226 -279, 0, 0, -279, 0, 0, 0, 0, 0, -279,
02227 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
02228 0, 0, -279, 0, 0, -279, -279, -279, -279, -279,
02229 -279, -279, -279, -279, -279, -279, -279, 0, 0, 0,
02230 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02231 0, 0, -279, -279, -279, -279, -573, 0, -279, -279,
02232 -279, 0, -279, 0, -573, -573, -573, 0, 0, -573,
02233 -573, -573, 0, -573, 0, 0, 0, 0, 0, 0,
02234 0, 0, -573, -573, -573, 0, 0, 0, 0, 0,
02235 0, 0, 0, -573, -573, 0, -573, -573, -573, -573,
02236 -573, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02237 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02238 0, 0, 0, 0, -573, -573, -573, -573, -573, -573,
02239 -573, -573, -573, -573, -573, -573, -573, 0, 0, -573,
02240 -573, -573, 0, 0, -573, 0, 0, 0, 0, 0,
02241 -573, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02242 0, 0, 0, 0, 0, 0, -573, 0, -573, -573,
02243 -573, -573, -573, -573, -573, -573, -573, -573, 0, 0,
02244 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02245 0, 0, -573, -573, -573, -573, -573, -292, 220, -573,
02246 -573, -573, 0, -573, 0, -292, -292, -292, 0, 0,
02247 -292, -292, -292, 0, -292, 0, 0, 0, 0, 0,
02248 0, 0, 0, 0, -292, -292, 0, 0, 0, 0,
02249 0, 0, 0, 0, -292, -292, 0, -292, -292, -292,
02250 -292, -292, 0, 0, 0, 0, 0, 0, 0, 0,
02251 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02252 0, 0, 0, 0, 0, -292, -292, -292, -292, -292,
02253 -292, -292, -292, -292, -292, -292, -292, -292, 0, 0,
02254 -292, -292, -292, 0, 0, -292, 0, 0, 0, 0,
02255 0, -292, 0, 0, 0, 0, 0, 0, 0, 0,
02256 0, 0, 0, 0, 0, 0, 0, -292, 0, -292,
02257 -292, -292, -292, -292, -292, -292, -292, -292, -292, 0,
02258 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02259 0, 0, 0, 0, -292, -292, -292, -292, -555, 217,
02260 -292, -292, -292, 0, -292, 0, -555, -555, -555, 0,
02261 0, 0, -555, -555, 0, -555, 0, 0, 0, 0,
02262 0, 0, 0, 0, -555, 0, 0, 0, 0, 0,
02263 0, 0, 0, 0, 0, -555, -555, 0, -555, -555,
02264 -555, -555, -555, 0, 0, 0, 0, 0, 0, 0,
02265 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02266 0, 0, 0, 0, 0, 0, -555, -555, -555, -555,
02267 -555, -555, -555, -555, -555, -555, -555, -555, -555, 0,
02268 0, -555, -555, -555, -285, 665, 0, 0, 0, 0,
02269 0, 0, -285, -285, -285, 0, 0, 0, -285, -285,
02270 0, -285, 0, 0, 0, 0, 0, -103, -555, 0,
02271 -555, -555, -555, -555, -555, -555, -555, -555, -555, -555,
02272 0, -285, -285, 0, -285, -285, -285, -285, -285, 0,
02273 0, 0, 0, 0, -555, -555, -555, -555, -94, 0,
02274 0, -555, 0, -555, 0, -555, 0, 0, 0, 0,
02275 0, 0, -285, -285, -285, -285, -285, -285, -285, -285,
02276 -285, -285, -285, -285, -285, 0, 0, -285, -285, -285,
02277 0, 666, 0, 0, 0, 0, 0, 0, 0, 0,
02278 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02279 0, 0, 0, -105, -285, 0, -285, -285, -285, -285,
02280 -285, -285, -285, -285, -285, -285, 0, 0, 0, 0,
02281 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02282 0, -285, -285, -285, -96, 0, 0, -285, 0, -285,
02283 241, -285, 5, 6, 7, 8, 9, -573, -573, -573,
02284 10, 11, 0, 0, -573, 12, 0, 13, 14, 15,
02285 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
02286 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
02287 0, 0, 0, 0, 28, 29, 0, 31, 32, 33,
02288 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02289 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02290 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02291 0, 0, 0, 0, 0, 48, 0, 0, 49, 50,
02292 0, 51, 52, 0, 53, 0, 54, 55, 56, 57,
02293 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02294 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02295 0, 61, 62, 63, 0, 0, 0, 0, 0, 0,
02296 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02297 0, 0, 0, 0, -573, 241, -573, 5, 6, 7,
02298 8, 9, 0, 0, -573, 10, 11, 0, -573, -573,
02299 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
02300 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02301 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02302 29, 0, 31, 32, 33, 34, 35, 36, 37, 38,
02303 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02304 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02305 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02306 48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
02307 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02308 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02309 0, 0, 0, 0, 0, 0, 61, 62, 63, 0,
02310 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02311 0, 0, 0, 0, 0, 0, 0, 0, 0, -573,
02312 241, -573, 5, 6, 7, 8, 9, 0, 0, -573,
02313 10, 11, 0, 0, -573, 12, -573, 13, 14, 15,
02314 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
02315 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
02316 0, 0, 0, 0, 28, 29, 0, 31, 32, 33,
02317 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02318 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02319 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02320 0, 0, 0, 0, 0, 48, 0, 0, 49, 50,
02321 0, 51, 52, 0, 53, 0, 54, 55, 56, 57,
02322 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02323 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02324 0, 61, 62, 63, 0, 0, 0, 0, 0, 0,
02325 4, 0, 5, 6, 7, 8, 9, 0, 0, 0,
02326 10, 11, 0, 0, -573, 12, -573, 13, 14, 15,
02327 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
02328 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
02329 0, 0, 0, 0, 28, 29, 30, 31, 32, 33,
02330 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02331 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02332 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02333 0, 0, 0, 0, 0, 48, 0, 0, 49, 50,
02334 0, 51, 52, 0, 53, 0, 54, 55, 56, 57,
02335 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02336 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02337 0, 61, 62, 63, 0, 0, 0, 0, 0, 0,
02338 0, 0, 0, 0, 0, 0, -573, 0, 0, 0,
02339 0, 0, 0, 0, -573, 241, -573, 5, 6, 7,
02340 8, 9, 0, 0, -573, 10, 11, 0, 0, -573,
02341 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
02342 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02343 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02344 29, 0, 31, 32, 33, 34, 35, 36, 37, 38,
02345 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02346 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02347 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02348 48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
02349 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02350 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02351 0, 0, 0, 0, 0, 0, 61, 62, 63, 0,
02352 0, 0, 0, 0, 0, 241, 0, 5, 6, 7,
02353 8, 9, 0, -573, -573, 10, 11, 0, 0, -573,
02354 12, -573, 13, 14, 15, 16, 17, 18, 19, 0,
02355 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02356 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02357 29, 0, 31, 32, 33, 34, 35, 36, 37, 38,
02358 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02359 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02360 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02361 48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
02362 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02363 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02364 0, 0, 0, 0, 0, 0, 61, 62, 63, 0,
02365 0, 0, 0, 0, 0, 241, 0, 5, 6, 7,
02366 8, 9, 0, 0, 0, 10, 11, 0, 0, -573,
02367 12, -573, 13, 14, 15, 16, 17, 18, 19, 0,
02368 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02369 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02370 29, 0, 31, 32, 33, 34, 35, 36, 37, 38,
02371 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02372 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02373 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02374 48, 0, 0, 242, 50, 0, 51, 52, 0, 53,
02375 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02376 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02377 0, 0, 0, 0, 0, 0, 61, 62, 63, 0,
02378 0, 0, 0, 0, 0, 241, 0, 5, 6, 7,
02379 8, 9, 0, 0, 0, 10, 11, -573, 0, -573,
02380 12, -573, 13, 14, 15, 16, 17, 18, 19, 0,
02381 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02382 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02383 29, 0, 31, 32, 33, 34, 35, 36, 37, 38,
02384 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02385 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02386 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02387 48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
02388 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02389 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02390 0, 0, 0, 0, 0, 0, 61, 62, 63, 0,
02391 0, 0, 0, 0, 0, 241, 0, 5, 6, 7,
02392 8, 9, 0, 0, 0, 10, 11, -573, 0, -573,
02393 12, -573, 13, 14, 15, 16, 17, 18, 19, 0,
02394 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02395 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02396 29, 0, 31, 32, 33, 34, 35, 36, 37, 38,
02397 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02398 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02399 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02400 48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
02401 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02402 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02403 0, 0, 0, 0, 0, 0, 61, 62, 63, 0,
02404 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02405 0, -573, 0, 0, 0, 0, 0, 0, 0, -573,
02406 241, -573, 5, 6, 7, 8, 9, 0, 0, -573,
02407 10, 11, 0, 0, 0, 12, 0, 13, 14, 15,
02408 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
02409 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
02410 0, 0, 0, 0, 28, 29, 0, 31, 32, 33,
02411 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02412 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02413 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02414 0, 0, 0, 0, 0, 48, 0, 0, 49, 50,
02415 0, 51, 52, 0, 53, 0, 54, 55, 56, 57,
02416 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02417 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02418 0, 61, 62, 63, 0, 0, 0, 0, 0, 0,
02419 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02420 10, 11, 0, 0, -573, 12, -573, 13, 14, 15,
02421 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
02422 21, 22, 23, 24, 25, 26, 0, 0, 194, 0,
02423 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02424 34, 35, 36, 37, 38, 39, 40, 195, 41, 42,
02425 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02426 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02427 0, 0, 0, 0, 0, 196, 0, 0, 197, 50,
02428 0, 51, 52, 0, 198, 199, 54, 55, 56, 57,
02429 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02430 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
02431 11, 61, 200, 63, 12, 0, 13, 14, 15, 16,
02432 17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
02433 22, 23, 24, 25, 26, 0, 224, 27, 0, 0,
02434 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
02435 35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
02436 43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
02437 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02438 0, 0, 0, 0, 196, 0, 0, 197, 50, 0,
02439 51, 52, 0, 0, 0, 54, 55, 56, 57, 58,
02440 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02441 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02442 61, 62, 63, 0, 0, 0, 0, 0, 0, 0,
02443 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
02444 11, 0, 0, 288, 12, 289, 13, 14, 15, 16,
02445 17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
02446 22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
02447 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
02448 35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
02449 43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
02450 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02451 0, 0, 0, 0, 196, 0, 0, 197, 50, 0,
02452 51, 52, 0, 0, 0, 54, 55, 56, 57, 58,
02453 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02454 5, 6, 7, 8, 9, 0, 0, 0, 10, 11,
02455 61, 62, 63, 12, 0, 13, 14, 15, 16, 17,
02456 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02457 23, 24, 25, 26, 0, 224, 27, 0, 0, 0,
02458 0, 0, 28, 29, 30, 31, 32, 33, 34, 35,
02459 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02460 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02461 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02462 0, 0, 0, 48, 0, 0, 49, 50, 0, 51,
02463 52, 0, 53, 0, 54, 55, 56, 57, 58, 59,
02464 60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02465 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
02466 62, 63, 0, 0, 0, 0, 0, 0, 5, 6,
02467 7, 8, 9, 0, 0, 0, 10, 11, 0, 0,
02468 0, 12, 474, 13, 14, 15, 16, 17, 18, 19,
02469 0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
02470 25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
02471 28, 29, 0, 31, 32, 33, 34, 35, 36, 37,
02472 38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
02473 0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
02474 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02475 0, 48, 0, 0, 49, 50, 0, 51, 52, 0,
02476 53, 0, 54, 55, 56, 57, 58, 59, 60, 0,
02477 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02478 0, 0, 0, 0, 0, 0, 0, 61, 62, 63,
02479 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02480 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02481 474, 113, 114, 115, 116, 117, 118, 119, 120, 121,
02482 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
02483 132, 133, 134, 135, 136, 0, 0, 0, 137, 138,
02484 139, 365, 366, 367, 368, 144, 145, 146, 0, 0,
02485 0, 0, 0, 147, 148, 149, 150, 369, 370, 371,
02486 372, 155, 37, 38, 373, 40, 0, 0, 0, 0,
02487 0, 0, 0, 0, 157, 158, 159, 160, 161, 162,
02488 163, 164, 165, 0, 0, 166, 167, 0, 0, 168,
02489 169, 170, 171, 0, 0, 0, 0, 0, 0, 0,
02490 0, 0, 0, 172, 0, 0, 0, 0, 0, 0,
02491 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02492 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
02493 0, 183, 184, 0, 0, 0, 0, 0, -548, -548,
02494 -548, 0, -548, 0, 0, 0, -548, -548, 0, 185,
02495 374, -548, 0, -548, -548, -548, -548, -548, -548, -548,
02496 0, -548, 0, 0, 0, -548, -548, -548, -548, -548,
02497 -548, -548, 0, 0, -548, 0, 0, 0, 0, 0,
02498 0, -548, 0, 0, -548, -548, -548, -548, -548, -548,
02499 -548, -548, -548, -548, -548, -548, 0, -548, -548, -548,
02500 0, -548, -548, 0, 0, 0, 0, 0, 0, 0,
02501 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02502 0, -548, 0, 0, -548, -548, 0, -548, -548, 0,
02503 -548, -548, -548, -548, -548, -548, -548, -548, -548, 0,
02504 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02505 0, 0, 0, 0, 0, 0, 0, -548, -548, -548,
02506 0, 0, 0, 0, 0, -549, -549, -549, 0, -549,
02507 0, -548, 0, -549, -549, 0, 0, -548, -549, 0,
02508 -549, -549, -549, -549, -549, -549, -549, 0, -549, 0,
02509 0, 0, -549, -549, -549, -549, -549, -549, -549, 0,
02510 0, -549, 0, 0, 0, 0, 0, 0, -549, 0,
02511 0, -549, -549, -549, -549, -549, -549, -549, -549, -549,
02512 -549, -549, -549, 0, -549, -549, -549, 0, -549, -549,
02513 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02514 0, 0, 0, 0, 0, 0, 0, 0, -549, 0,
02515 0, -549, -549, 0, -549, -549, 0, -549, -549, -549,
02516 -549, -549, -549, -549, -549, -549, 0, 0, 0, 0,
02517 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02518 0, 0, 0, 0, -549, -549, -549, 0, 0, 0,
02519 0, 0, -551, -551, -551, 0, -551, 0, -549, 0,
02520 -551, -551, 0, 0, -549, -551, 0, -551, -551, -551,
02521 -551, -551, -551, -551, 0, 0, 0, 0, 0, -551,
02522 -551, -551, -551, -551, -551, -551, 0, 0, -551, 0,
02523 0, 0, 0, 0, 0, -551, 0, 0, -551, -551,
02524 -551, -551, -551, -551, -551, -551, -551, -551, -551, -551,
02525 0, -551, -551, -551, 0, -551, -551, 0, 0, 0,
02526 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02527 0, 0, 0, 0, 0, -551, 723, 0, -551, -551,
02528 0, -551, -551, 0, -551, -551, -551, -551, -551, -551,
02529 -551, -551, -551, 0, 0, 0, 0, 0, -103, 0,
02530 0, 0, 0, 0, 0, 0, -553, -553, -553, 0,
02531 -553, -551, -551, -551, -553, -553, 0, 0, 0, -553,
02532 0, -553, -553, -553, -553, -553, -553, -553, 0, 0,
02533 0, -551, 0, -553, -553, -553, -553, -553, -553, -553,
02534 0, 0, -553, 0, 0, 0, 0, 0, 0, -553,
02535 0, 0, -553, -553, -553, -553, -553, -553, -553, -553,
02536 -553, -553, -553, -553, 0, -553, -553, -553, 0, -553,
02537 -553, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02538 0, 0, 0, 0, 0, 0, 0, 0, 0, -553,
02539 0, 0, -553, -553, 0, -553, -553, 0, -553, -553,
02540 -553, -553, -553, -553, -553, -553, -553, 0, 0, 0,
02541 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02542 -554, -554, -554, 0, -554, -553, -553, -553, -554, -554,
02543 0, 0, 0, -554, 0, -554, -554, -554, -554, -554,
02544 -554, -554, 0, 0, 0, -553, 0, -554, -554, -554,
02545 -554, -554, -554, -554, 0, 0, -554, 0, 0, 0,
02546 0, 0, 0, -554, 0, 0, -554, -554, -554, -554,
02547 -554, -554, -554, -554, -554, -554, -554, -554, 0, -554,
02548 -554, -554, 0, -554, -554, 0, 0, 0, 0, 0,
02549 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02550 0, 0, 0, -554, 0, 0, -554, -554, 0, -554,
02551 -554, 0, -554, -554, -554, -554, -554, -554, -554, -554,
02552 -554, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02553 0, 0, 0, 0, 0, 0, 0, 0, 0, -554,
02554 -554, -554, 0, 0, 0, 0, 0, 0, 0, 0,
02555 0, 0, 0, 0, 0, 0, 0, 0, 0, -554,
02556 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
02557 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
02558 133, 134, 135, 136, 0, 0, 0, 137, 138, 139,
02559 140, 141, 142, 143, 144, 145, 146, 0, 0, 0,
02560 0, 0, 147, 148, 149, 150, 151, 152, 153, 154,
02561 155, 270, 271, 156, 272, 0, 0, 0, 0, 0,
02562 0, 0, 0, 157, 158, 159, 160, 161, 162, 163,
02563 164, 165, 0, 0, 166, 167, 0, 0, 168, 169,
02564 170, 171, 0, 0, 0, 0, 0, 0, 0, 0,
02565 0, 0, 172, 0, 0, 0, 0, 0, 0, 0,
02566 0, 0, 0, 0, 0, 0, 0, 0, 0, 173,
02567 174, 175, 176, 177, 178, 179, 180, 181, 182, 0,
02568 183, 184, 0, 0, 0, 0, 0, 0, 0, 0,
02569 0, 0, 0, 0, 0, 0, 0, 0, 185, 113,
02570 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
02571 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
02572 134, 135, 136, 0, 0, 0, 137, 138, 139, 140,
02573 141, 142, 143, 144, 145, 146, 0, 0, 0, 0,
02574 0, 147, 148, 149, 150, 151, 152, 153, 154, 155,
02575 226, 0, 156, 0, 0, 0, 0, 0, 0, 0,
02576 0, 0, 157, 158, 159, 160, 161, 162, 163, 164,
02577 165, 0, 0, 166, 167, 0, 0, 168, 169, 170,
02578 171, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02579 0, 172, 0, 0, 55, 0, 0, 0, 0, 0,
02580 0, 0, 0, 0, 0, 0, 0, 0, 173, 174,
02581 175, 176, 177, 178, 179, 180, 181, 182, 0, 183,
02582 184, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02583 0, 0, 0, 0, 0, 0, 0, 185, 113, 114,
02584 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
02585 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
02586 135, 136, 0, 0, 0, 137, 138, 139, 140, 141,
02587 142, 143, 144, 145, 146, 0, 0, 0, 0, 0,
02588 147, 148, 149, 150, 151, 152, 153, 154, 155, 0,
02589 0, 156, 0, 0, 0, 0, 0, 0, 0, 0,
02590 0, 157, 158, 159, 160, 161, 162, 163, 164, 165,
02591 0, 0, 166, 167, 0, 0, 168, 169, 170, 171,
02592 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02593 172, 0, 0, 55, 0, 0, 0, 0, 0, 0,
02594 0, 0, 0, 0, 0, 0, 0, 173, 174, 175,
02595 176, 177, 178, 179, 180, 181, 182, 0, 183, 184,
02596 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02597 0, 0, 0, 0, 0, 0, 185, 113, 114, 115,
02598 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
02599 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
02600 136, 0, 0, 0, 137, 138, 139, 140, 141, 142,
02601 143, 144, 145, 146, 0, 0, 0, 0, 0, 147,
02602 148, 149, 150, 151, 152, 153, 154, 155, 0, 0,
02603 156, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02604 157, 158, 159, 160, 161, 162, 163, 164, 165, 0,
02605 0, 166, 167, 0, 0, 168, 169, 170, 171, 0,
02606 0, 0, 0, 0, 0, 0, 0, 0, 0, 172,
02607 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02608 0, 0, 0, 0, 0, 0, 173, 174, 175, 176,
02609 177, 178, 179, 180, 181, 182, 0, 183, 184, 0,
02610 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
02611 11, 0, 0, 0, 12, 185, 13, 14, 15, 231,
02612 232, 18, 19, 0, 0, 0, 0, 0, 233, 234,
02613 235, 23, 24, 25, 26, 0, 0, 194, 0, 0,
02614 0, 0, 0, 0, 258, 0, 0, 32, 33, 34,
02615 35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
02616 43, 44, 45, 0, 0, 0, 0, 0, 0, 0,
02617 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02618 0, 0, 0, 0, 259, 0, 0, 197, 50, 0,
02619 51, 52, 0, 0, 0, 54, 55, 56, 57, 58,
02620 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02621 0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
02622 260, 10, 11, 0, 0, 0, 12, 0, 13, 14,
02623 15, 231, 232, 18, 19, 0, 0, 0, 261, 0,
02624 233, 234, 235, 23, 24, 25, 26, 0, 0, 194,
02625 0, 0, 0, 0, 0, 0, 258, 0, 0, 32,
02626 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
02627 42, 0, 43, 44, 45, 0, 0, 0, 0, 0,
02628 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02629 0, 0, 0, 0, 0, 0, 259, 0, 0, 197,
02630 50, 0, 51, 52, 0, 0, 0, 54, 55, 56,
02631 57, 58, 59, 60, 0, 0, 0, 0, 0, 0,
02632 0, 0, 0, 0, 0, 5, 6, 7, 8, 9,
02633 0, 0, 260, 10, 11, 0, 0, 0, 12, 0,
02634 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
02635 490, 0, 20, 21, 22, 23, 24, 25, 26, 0,
02636 0, 27, 0, 0, 0, 0, 0, 28, 29, 30,
02637 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02638 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02639 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02640 0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
02641 0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
02642 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02643 0, 0, 0, 0, 5, 6, 7, 8, 9, 0,
02644 0, 0, 10, 11, 61, 62, 63, 12, 0, 13,
02645 14, 15, 16, 17, 18, 19, 0, 0, 0, 0,
02646 0, 20, 21, 22, 23, 24, 25, 26, 0, 0,
02647 27, 0, 0, 0, 0, 0, 28, 29, 0, 31,
02648 32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
02649 41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
02650 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02651 0, 0, 0, 0, 0, 0, 0, 48, 0, 0,
02652 49, 50, 0, 51, 52, 0, 53, 0, 54, 55,
02653 56, 57, 58, 59, 60, 0, 0, 0, 0, 0,
02654 0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
02655 0, 10, 11, 61, 62, 63, 12, 0, 13, 14,
02656 15, 16, 17, 18, 19, 0, 0, 0, 0, 0,
02657 20, 21, 22, 23, 24, 25, 26, 0, 0, 194,
02658 0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
02659 33, 34, 35, 36, 37, 38, 39, 40, 195, 41,
02660 42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
02661 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02662 0, 0, 0, 0, 0, 0, 196, 0, 0, 197,
02663 50, 0, 51, 52, 0, 198, 199, 54, 55, 56,
02664 57, 58, 59, 60, 0, 0, 0, 0, 0, 0,
02665 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02666 10, 11, 61, 200, 63, 12, 0, 13, 14, 15,
02667 231, 232, 18, 19, 0, 0, 0, 0, 0, 233,
02668 234, 235, 23, 24, 25, 26, 0, 0, 194, 0,
02669 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02670 34, 35, 36, 37, 38, 39, 40, 195, 41, 42,
02671 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02672 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02673 0, 0, 0, 0, 0, 196, 0, 0, 197, 50,
02674 0, 51, 52, 0, 587, 199, 54, 55, 56, 57,
02675 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02676 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
02677 11, 61, 200, 63, 12, 0, 13, 14, 15, 231,
02678 232, 18, 19, 0, 0, 0, 0, 0, 233, 234,
02679 235, 23, 24, 25, 26, 0, 0, 194, 0, 0,
02680 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
02681 35, 36, 37, 38, 39, 40, 195, 41, 42, 0,
02682 43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
02683 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02684 0, 0, 0, 0, 196, 0, 0, 197, 50, 0,
02685 51, 52, 0, 198, 0, 54, 55, 56, 57, 58,
02686 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02687 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
02688 61, 200, 63, 12, 0, 13, 14, 15, 231, 232,
02689 18, 19, 0, 0, 0, 0, 0, 233, 234, 235,
02690 23, 24, 25, 26, 0, 0, 194, 0, 0, 0,
02691 0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
02692 36, 37, 38, 39, 40, 195, 41, 42, 0, 43,
02693 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02694 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02695 0, 0, 0, 196, 0, 0, 197, 50, 0, 51,
02696 52, 0, 0, 199, 54, 55, 56, 57, 58, 59,
02697 60, 0, 0, 0, 0, 0, 0, 0, 0, 5,
02698 6, 7, 0, 9, 0, 0, 0, 10, 11, 61,
02699 200, 63, 12, 0, 13, 14, 15, 231, 232, 18,
02700 19, 0, 0, 0, 0, 0, 233, 234, 235, 23,
02701 24, 25, 26, 0, 0, 194, 0, 0, 0, 0,
02702 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
02703 37, 38, 39, 40, 195, 41, 42, 0, 43, 44,
02704 45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
02705 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02706 0, 0, 196, 0, 0, 197, 50, 0, 51, 52,
02707 0, 587, 0, 54, 55, 56, 57, 58, 59, 60,
02708 0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
02709 7, 0, 9, 0, 0, 0, 10, 11, 61, 200,
02710 63, 12, 0, 13, 14, 15, 231, 232, 18, 19,
02711 0, 0, 0, 0, 0, 233, 234, 235, 23, 24,
02712 25, 26, 0, 0, 194, 0, 0, 0, 0, 0,
02713 0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
02714 38, 39, 40, 195, 41, 42, 0, 43, 44, 45,
02715 0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
02716 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02717 0, 196, 0, 0, 197, 50, 0, 51, 52, 0,
02718 0, 0, 54, 55, 56, 57, 58, 59, 60, 0,
02719 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02720 0, 9, 0, 0, 0, 10, 11, 61, 200, 63,
02721 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
02722 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02723 26, 0, 0, 194, 0, 0, 0, 0, 0, 0,
02724 29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02725 39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
02726 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02727 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02728 196, 0, 0, 197, 50, 0, 51, 52, 0, 484,
02729 0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
02730 0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
02731 9, 0, 0, 0, 10, 11, 61, 200, 63, 12,
02732 0, 13, 14, 15, 231, 232, 18, 19, 0, 0,
02733 0, 0, 0, 233, 234, 235, 23, 24, 25, 26,
02734 0, 0, 194, 0, 0, 0, 0, 0, 0, 29,
02735 0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
02736 40, 0, 41, 42, 0, 43, 44, 45, 0, 46,
02737 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02738 0, 0, 0, 0, 0, 0, 0, 0, 0, 196,
02739 0, 0, 197, 50, 0, 51, 52, 0, 198, 0,
02740 54, 55, 56, 57, 58, 59, 60, 0, 0, 0,
02741 0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
02742 0, 0, 0, 10, 11, 61, 200, 63, 12, 0,
02743 13, 14, 15, 231, 232, 18, 19, 0, 0, 0,
02744 0, 0, 233, 234, 235, 23, 24, 25, 26, 0,
02745 0, 194, 0, 0, 0, 0, 0, 0, 29, 0,
02746 0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02747 0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
02748 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02749 0, 0, 0, 0, 0, 0, 0, 0, 196, 0,
02750 0, 197, 50, 0, 51, 52, 0, 772, 0, 54,
02751 55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
02752 0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
02753 0, 0, 10, 11, 61, 200, 63, 12, 0, 13,
02754 14, 15, 231, 232, 18, 19, 0, 0, 0, 0,
02755 0, 233, 234, 235, 23, 24, 25, 26, 0, 0,
02756 194, 0, 0, 0, 0, 0, 0, 29, 0, 0,
02757 32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
02758 41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
02759 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02760 0, 0, 0, 0, 0, 0, 0, 196, 0, 0,
02761 197, 50, 0, 51, 52, 0, 484, 0, 54, 55,
02762 56, 57, 58, 59, 60, 0, 0, 0, 0, 0,
02763 0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
02764 0, 10, 11, 61, 200, 63, 12, 0, 13, 14,
02765 15, 231, 232, 18, 19, 0, 0, 0, 0, 0,
02766 233, 234, 235, 23, 24, 25, 26, 0, 0, 194,
02767 0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
02768 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
02769 42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
02770 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02771 0, 0, 0, 0, 0, 0, 196, 0, 0, 197,
02772 50, 0, 51, 52, 0, 587, 0, 54, 55, 56,
02773 57, 58, 59, 60, 0, 0, 0, 0, 0, 0,
02774 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02775 10, 11, 61, 200, 63, 12, 0, 13, 14, 15,
02776 231, 232, 18, 19, 0, 0, 0, 0, 0, 233,
02777 234, 235, 23, 24, 25, 26, 0, 0, 194, 0,
02778 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02779 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02780 0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
02781 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02782 0, 0, 0, 0, 0, 196, 0, 0, 197, 50,
02783 0, 51, 52, 0, 0, 0, 54, 55, 56, 57,
02784 58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
02785 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
02786 11, 61, 200, 63, 12, 0, 13, 14, 15, 16,
02787 17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
02788 22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
02789 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
02790 35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
02791 43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
02792 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02793 0, 0, 0, 0, 196, 0, 0, 197, 50, 0,
02794 51, 52, 0, 0, 0, 54, 55, 56, 57, 58,
02795 59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
02796 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
02797 61, 62, 63, 12, 0, 13, 14, 15, 16, 17,
02798 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02799 23, 24, 25, 26, 0, 0, 194, 0, 0, 0,
02800 0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
02801 36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
02802 44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
02803 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02804 0, 0, 0, 196, 0, 0, 197, 50, 0, 51,
02805 52, 0, 0, 0, 54, 55, 56, 57, 58, 59,
02806 60, 0, 0, 0, 0, 0, 0, 0, 0, 5,
02807 6, 7, 0, 9, 0, 0, 0, 10, 11, 61,
02808 200, 63, 12, 0, 13, 14, 15, 231, 232, 18,
02809 19, 0, 0, 0, 0, 0, 233, 234, 235, 23,
02810 24, 25, 26, 0, 0, 194, 0, 0, 0, 0,
02811 0, 0, 258, 0, 0, 32, 33, 34, 35, 36,
02812 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02813 45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02814 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02815 0, 0, 259, 0, 0, 304, 50, 0, 51, 52,
02816 0, 305, 0, 54, 55, 56, 57, 58, 59, 60,
02817 0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
02818 0, 0, 10, 11, 0, 0, 0, 12, 260, 13,
02819 14, 15, 231, 232, 18, 19, 0, 0, 0, 0,
02820 0, 233, 234, 235, 23, 24, 25, 26, 0, 0,
02821 194, 0, 0, 0, 0, 0, 0, 258, 0, 0,
02822 32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
02823 41, 42, 0, 43, 44, 45, 0, 0, 0, 0,
02824 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02825 0, 0, 0, 0, 0, 0, 0, 346, 0, 0,
02826 49, 50, 0, 51, 52, 0, 53, 0, 54, 55,
02827 56, 57, 58, 59, 60, 0, 0, 0, 0, 5,
02828 6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
02829 0, 0, 12, 260, 13, 14, 15, 231, 232, 18,
02830 19, 0, 0, 0, 0, 0, 233, 234, 235, 23,
02831 24, 25, 26, 0, 0, 194, 0, 0, 0, 0,
02832 0, 0, 258, 0, 0, 32, 33, 34, 354, 36,
02833 37, 38, 355, 40, 0, 41, 42, 0, 43, 44,
02834 45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02835 0, 0, 0, 0, 0, 0, 0, 0, 0, 356,
02836 0, 0, 357, 0, 0, 197, 50, 0, 51, 52,
02837 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02838 0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
02839 0, 0, 10, 11, 0, 0, 0, 12, 260, 13,
02840 14, 15, 231, 232, 18, 19, 0, 0, 0, 0,
02841 0, 233, 234, 235, 23, 24, 25, 26, 0, 0,
02842 194, 0, 0, 0, 0, 0, 0, 258, 0, 0,
02843 32, 33, 34, 354, 36, 37, 38, 355, 40, 0,
02844 41, 42, 0, 43, 44, 45, 0, 0, 0, 0,
02845 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02846 0, 0, 0, 0, 0, 0, 0, 357, 0, 0,
02847 197, 50, 0, 51, 52, 0, 0, 0, 54, 55,
02848 56, 57, 58, 59, 60, 0, 0, 0, 0, 5,
02849 6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
02850 0, 0, 12, 260, 13, 14, 15, 231, 232, 18,
02851 19, 0, 0, 0, 0, 0, 233, 234, 235, 23,
02852 24, 25, 26, 0, 0, 194, 0, 0, 0, 0,
02853 0, 0, 258, 0, 0, 32, 33, 34, 35, 36,
02854 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02855 45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02856 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02857 0, 0, 259, 0, 0, 304, 50, 0, 51, 52,
02858 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02859 0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
02860 0, 0, 10, 11, 0, 0, 0, 12, 260, 13,
02861 14, 15, 231, 232, 18, 19, 0, 0, 0, 0,
02862 0, 233, 234, 235, 23, 24, 25, 26, 0, 0,
02863 194, 0, 0, 0, 0, 0, 0, 258, 0, 0,
02864 32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
02865 41, 42, 0, 43, 44, 45, 0, 0, 0, 0,
02866 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02867 0, 0, 0, 0, 0, 0, 0, 902, 0, 0,
02868 197, 50, 0, 51, 52, 0, 0, 0, 54, 55,
02869 56, 57, 58, 59, 60, 0, 0, 0, 0, 5,
02870 6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
02871 0, 0, 12, 260, 13, 14, 15, 231, 232, 18,
02872 19, 0, 0, 0, 0, 0, 233, 234, 235, 23,
02873 24, 25, 26, 0, 0, 194, 0, 663, 0, 0,
02874 0, 0, 258, 0, 0, 32, 33, 34, 35, 36,
02875 37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
02876 45, 308, 309, 310, 311, 312, 313, 314, 315, 316,
02877 317, 318, 319, 320, 0, 0, 321, 322, 0, 0,
02878 0, 0, 912, 0, 0, 197, 50, 0, 51, 52,
02879 0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
02880 0, 0, 0, 323, 0, 324, 325, 326, 327, 328,
02881 329, 330, 331, 332, 333, 0, 0, 0, 260, 0,
02882 525, 526, 0, 0, 527, 0, 0, 0, 0, 0,
02883 0, 0, 0, -241, 157, 158, 159, 160, 161, 162,
02884 163, 164, 165, 0, 0, 166, 167, 0, 0, 168,
02885 169, 170, 171, 0, 0, 0, 0, 0, 0, 0,
02886 0, 0, 0, 172, 0, 0, 0, 0, 0, 0,
02887 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02888 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
02889 0, 183, 184, 0, 0, 0, 0, 533, 534, 0,
02890 0, 535, 0, 0, 0, 0, 0, 0, 0, 185,
02891 220, 157, 158, 159, 160, 161, 162, 163, 164, 165,
02892 0, 0, 166, 167, 0, 0, 168, 169, 170, 171,
02893 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02894 172, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02895 0, 0, 0, 0, 0, 0, 0, 173, 174, 175,
02896 176, 177, 178, 179, 180, 181, 182, 0, 183, 184,
02897 0, 0, 0, 0, 591, 526, 0, 0, 592, 0,
02898 0, 0, 0, 0, 0, 0, 185, 220, 157, 158,
02899 159, 160, 161, 162, 163, 164, 165, 0, 0, 166,
02900 167, 0, 0, 168, 169, 170, 171, 0, 0, 0,
02901 0, 0, 0, 0, 0, 0, 0, 172, 0, 0,
02902 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02903 0, 0, 0, 0, 173, 174, 175, 176, 177, 178,
02904 179, 180, 181, 182, 0, 183, 184, 0, 0, 0,
02905 0, 594, 534, 0, 0, 595, 0, 0, 0, 0,
02906 0, 0, 0, 185, 220, 157, 158, 159, 160, 161,
02907 162, 163, 164, 165, 0, 0, 166, 167, 0, 0,
02908 168, 169, 170, 171, 0, 0, 0, 0, 0, 0,
02909 0, 0, 0, 0, 172, 0, 0, 0, 0, 0,
02910 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02911 0, 173, 174, 175, 176, 177, 178, 179, 180, 181,
02912 182, 0, 183, 184, 0, 0, 0, 0, 617, 526,
02913 0, 0, 618, 0, 0, 0, 0, 0, 0, 0,
02914 185, 220, 157, 158, 159, 160, 161, 162, 163, 164,
02915 165, 0, 0, 166, 167, 0, 0, 168, 169, 170,
02916 171, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02917 0, 172, 0, 0, 0, 0, 0, 0, 0, 0,
02918 0, 0, 0, 0, 0, 0, 0, 0, 173, 174,
02919 175, 176, 177, 178, 179, 180, 181, 182, 0, 183,
02920 184, 0, 0, 0, 0, 620, 534, 0, 0, 621,
02921 0, 0, 0, 0, 0, 0, 0, 185, 220, 157,
02922 158, 159, 160, 161, 162, 163, 164, 165, 0, 0,
02923 166, 167, 0, 0, 168, 169, 170, 171, 0, 0,
02924 0, 0, 0, 0, 0, 0, 0, 0, 172, 0,
02925 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02926 0, 0, 0, 0, 0, 173, 174, 175, 176, 177,
02927 178, 179, 180, 181, 182, 0, 183, 184, 0, 0,
02928 0, 0, 692, 526, 0, 0, 693, 0, 0, 0,
02929 0, 0, 0, 0, 185, 220, 157, 158, 159, 160,
02930 161, 162, 163, 164, 165, 0, 0, 166, 167, 0,
02931 0, 168, 169, 170, 171, 0, 0, 0, 0, 0,
02932 0, 0, 0, 0, 0, 172, 0, 0, 0, 0,
02933 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02934 0, 0, 173, 174, 175, 176, 177, 178, 179, 180,
02935 181, 182, 0, 183, 184, 0, 0, 0, 0, 695,
02936 534, 0, 0, 696, 0, 0, 0, 0, 0, 0,
02937 0, 185, 220, 157, 158, 159, 160, 161, 162, 163,
02938 164, 165, 0, 0, 166, 167, 0, 0, 168, 169,
02939 170, 171, 0, 0, 0, 0, 0, 0, 0, 0,
02940 0, 0, 172, 0, 0, 0, 0, 0, 0, 0,
02941 0, 0, 0, 0, 0, 0, 0, 0, 0, 173,
02942 174, 175, 176, 177, 178, 179, 180, 181, 182, 0,
02943 183, 184, 0, 0, 0, 0, 702, 526, 0, 0,
02944 703, 0, 0, 0, 0, 0, 0, 0, 185, 220,
02945 157, 158, 159, 160, 161, 162, 163, 164, 165, 0,
02946 0, 166, 167, 0, 0, 168, 169, 170, 171, 0,
02947 0, 0, 0, 0, 0, 0, 0, 0, 0, 172,
02948 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02949 0, 0, 0, 0, 0, 0, 173, 174, 175, 176,
02950 177, 178, 179, 180, 181, 182, 0, 183, 184, 0,
02951 0, 0, 0, 572, 534, 0, 0, 573, 0, 0,
02952 0, 0, 0, 0, 0, 185, 220, 157, 158, 159,
02953 160, 161, 162, 163, 164, 165, 0, 0, 166, 167,
02954 0, 0, 168, 169, 170, 171, 0, 0, 0, 0,
02955 0, 0, 0, 0, 0, 0, 172, 0, 0, 0,
02956 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02957 0, 0, 0, 173, 174, 175, 176, 177, 178, 179,
02958 180, 181, 182, 0, 183, 184, 0, 0, 0, 0,
02959 965, 526, 0, 0, 966, 0, 0, 0, 0, 0,
02960 0, 0, 185, 220, 157, 158, 159, 160, 161, 162,
02961 163, 164, 165, 0, 0, 166, 167, 0, 0, 168,
02962 169, 170, 171, 0, 0, 0, 0, 0, 0, 0,
02963 0, 0, 0, 172, 0, 0, 0, 0, 0, 0,
02964 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02965 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
02966 0, 183, 184, 0, 0, 0, 0, 971, 526, 0,
02967 0, 972, 0, 0, 0, 0, 0, 0, 0, 185,
02968 220, 157, 158, 159, 160, 161, 162, 163, 164, 165,
02969 0, 0, 166, 167, 0, 0, 168, 169, 170, 171,
02970 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02971 172, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02972 0, 0, 0, 0, 0, 0, 0, 173, 174, 175,
02973 176, 177, 178, 179, 180, 181, 182, 0, 183, 184,
02974 0, 0, 0, 0, 974, 534, 0, 0, 975, 0,
02975 0, 0, 0, 0, 0, 0, 185, 220, 157, 158,
02976 159, 160, 161, 162, 163, 164, 165, 0, 0, 166,
02977 167, 0, 0, 168, 169, 170, 171, 0, 0, 0,
02978 0, 0, 0, 0, 0, 0, 0, 172, 0, 0,
02979 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02980 0, 0, 0, 0, 173, 174, 175, 176, 177, 178,
02981 179, 180, 181, 182, 0, 183, 184, 0, 0, 0,
02982 0, 572, 534, 0, 0, 573, 0, 0, 0, 0,
02983 0, 0, 0, 185, 220, 157, 158, 159, 160, 161,
02984 162, 163, 164, 165, 0, 0, 166, 167, 0, 0,
02985 168, 169, 170, 171, 0, 0, 0, 0, 0, 0,
02986 0, 0, 0, 0, 172, 0, 0, 0, 0, 0,
02987 0, 0, 718, 0, 0, 0, 0, 0, 0, 0,
02988 0, 173, 174, 175, 176, 177, 178, 179, 180, 181,
02989 182, 663, 183, 184, 0, 0, 308, 309, 310, 311,
02990 312, 313, 314, 315, 316, 317, 318, 319, 320, 0,
02991 185, 321, 322, 0, 0, 308, 309, 310, 311, 312,
02992 313, 314, 315, 316, 317, 318, 319, 320, 0, 0,
02993 321, 322, 0, 0, 0, 0, 0, 0, 323, 0,
02994 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
02995 0, 0, 0, 0, 0, 0, 0, 323, 0, 324,
02996 325, 326, 327, 328, 329, 330, 331, 332, 333
02997 };
02998
02999 #define yypact_value_is_default(yystate) \
03000 ((yystate) == (-747))
03001
03002 #define yytable_value_is_error(yytable_value) \
03003 ((yytable_value) == (-574))
03004
03005 static const yytype_int16 yycheck[] =
03006 {
03007 2, 55, 340, 28, 2, 454, 4, 52, 593, 16,
03008 17, 335, 307, 20, 307, 8, 547, 213, 16, 17,
03009 8, 566, 20, 27, 53, 29, 84, 22, 8, 87,
03010 546, 87, 4, 22, 619, 28, 49, 91, 252, 76,
03011 28, 2, 256, 4, 404, 357, 1, 65, 28, 51,
03012 52, 49, 50, 749, 450, 53, 746, 13, 334, 627,
03013 336, 53, 680, 25, 62, 762, 684, 454, 13, 16,
03014 17, 65, 26, 20, 396, 55, 400, 26, 76, 25,
03015 440, 0, 404, 27, 76, 83, 84, 576, 577, 87,
03016 88, 89, 90, 87, 490, 29, 88, 89, 90, 13,
03017 242, 25, 378, 379, 51, 851, 828, 85, 76, 694,
03018 136, 91, 87, 16, 17, 110, 147, 20, 85, 568,
03019 705, 110, 146, 399, 25, 401, 85, 653, 452, 61,
03020 87, 16, 17, 62, 109, 20, 276, 25, 278, 56,
03021 280, 13, 742, 37, 38, 87, 114, 109, 51, 52,
03022 195, 427, 109, 198, 199, 826, 701, 28, 113, 849,
03023 138, 139, 304, 763, 709, 140, 25, 109, 736, 737,
03024 25, 13, 139, 107, 106, 146, 13, 453, 140, 138,
03025 139, 143, 136, 632, 140, 147, 109, 136, 244, 145,
03026 145, 147, 147, 142, 140, 941, 892, 142, 140, 197,
03027 145, 145, 147, 147, 653, 207, 896, 904, 930, 140,
03028 217, 213, 219, 220, 25, 886, 140, 413, 220, 217,
03029 746, 219, 220, 749, 261, 223, 244, 225, 552, 242,
03030 719, 145, 230, 147, 50, 293, 294, 295, 296, 140,
03031 564, 601, 142, 241, 242, 632, 235, 147, 109, 238,
03032 244, 563, 140, 147, 258, 873, 99, 302, 826, 708,
03033 828, 932, 307, 261, 25, 661, 87, 83, 84, 261,
03034 217, 87, 219, 145, 140, 147, 305, 553, 600, 601,
03035 241, 140, 25, 341, 342, 140, 25, 343, 959, 565,
03036 806, 304, 85, 87, 292, 293, 294, 295, 296, 297,
03037 298, 299, 85, 145, 302, 147, 304, 305, 145, 307,
03038 147, 59, 60, 305, 217, 109, 219, 26, 886, 887,
03039 292, 708, 109, 849, 142, 851, 49, 467, 335, 140,
03040 875, 292, 217, 335, 219, 56, 297, 335, 145, 337,
03041 147, 87, 873, 341, 342, 138, 139, 336, 88, 343,
03042 395, 396, 690, 140, 334, 302, 139, 26, 356, 404,
03043 307, 140, 930, 109, 932, 359, 892, 85, 147, 662,
03044 109, 85, 109, 302, 61, 26, 85, 140, 307, 140,
03045 15, 142, 17, 928, 679, 87, 384, 385, 973, 85,
03046 85, 959, 437, 400, 590, 440, 421, 140, 400, 142,
03047 614, 140, 400, 85, 143, 140, 85, 223, 147, 225,
03048 412, 413, 401, 450, 142, 941, 85, 104, 105, 399,
03049 138, 139, 424, 136, 142, 139, 424, 136, 421, 138,
03050 139, 880, 85, 421, 85, 433, 85, 142, 427, 484,
03051 140, 421, 138, 139, 139, 452, 426, 147, 85, 142,
03052 452, 85, 450, 490, 452, 384, 385, 139, 450, 146,
03053 139, 85, 822, 424, 453, 68, 85, 136, 85, 138,
03054 139, 451, 433, 142, 197, 87, 85, 293, 294, 295,
03055 296, 483, 298, 299, 68, 136, 139, 138, 139, 138,
03056 139, 142, 490, 396, 85, 37, 38, 109, 490, 668,
03057 822, 223, 139, 548, 138, 139, 675, 230, 109, 52,
03058 514, 54, 55, 56, 57, 139, 119, 120, 121, 242,
03059 139, 138, 139, 861, 246, 341, 342, 143, 532, 867,
03060 139, 26, 728, 52, 437, 530, 538, 56, 540, 85,
03061 356, 530, 587, 538, 542, 552, 544, 138, 139, 538,
03062 552, 545, 546, 56, 552, 600, 601, 564, 85, 584,
03063 59, 60, 564, 144, 553, 559, 564, 137, 566, 567,
03064 106, 551, 574, 575, 576, 577, 565, 87, 615, 574,
03065 575, 304, 140, 563, 106, 574, 575, 87, 590, 593,
03066 85, 584, 138, 139, 87, 85, 584, 140, 68, 109,
03067 68, 548, 14, 15, 584, 85, 604, 609, 85, 109,
03068 140, 138, 139, 658, 17, 619, 109, 615, 56, 608,
03069 609, 574, 575, 615, 661, 145, 25, 951, 52, 94,
03070 54, 55, 56, 57, 679, 143, 638, 146, 640, 697,
03071 642, 136, 700, 138, 139, 137, 140, 142, 138, 139,
03072 52, 653, 54, 55, 56, 57, 654, 711, 138, 139,
03073 10, 138, 139, 661, 662, 89, 61, 665, 666, 661,
03074 65, 95, 96, 671, 672, 109, 952, 679, 680, 140,
03075 682, 140, 684, 140, 406, 140, 140, 89, 410, 734,
03076 694, 140, 116, 415, 96, 119, 8, 600, 13, 697,
03077 87, 705, 700, 701, 698, 61, 87, 137, 430, 104,
03078 105, 709, 109, 435, 116, 54, 710, 719, 716, 717,
03079 140, 145, 109, 140, 63, 64, 728, 772, 109, 140,
03080 68, 711, 679, 662, 87, 52, 665, 666, 796, 52,
03081 742, 111, 671, 672, 140, 743, 744, 87, 104, 105,
03082 106, 567, 144, 140, 549, 15, 109, 755, 803, 140,
03083 2, 763, 4, 765, 87, 767, 768, 489, 52, 109,
03084 54, 55, 56, 57, 16, 17, 140, 822, 20, 117,
03085 118, 119, 120, 121, 145, 783, 109, 140, 604, 791,
03086 109, 140, 794, 114, 140, 793, 140, 140, 796, 10,
03087 140, 88, 800, 801, 140, 9, 804, 49, 50, 10,
03088 137, 140, 806, 10, 808, 61, 140, 140, 140, 542,
03089 62, 544, 820, 137, 140, 114, 52, 137, 54, 55,
03090 56, 57, 834, 835, 140, 837, 68, 839, 840, 140,
03091 140, 83, 84, 137, 842, 87, 56, 140, 140, 68,
03092 842, 83, 84, 56, 783, 140, 140, 140, 104, 105,
03093 106, 140, 860, 89, 83, 84, 864, 140, 860, 95,
03094 96, 873, 142, 142, 61, 140, 424, 875, 90, 88,
03095 61, 697, 954, 736, 700, 117, 118, 119, 120, 121,
03096 116, 93, 904, 119, 689, 114, 115, 116, 117, 118,
03097 119, 120, 121, 953, 906, 907, 908, 96, 910, 911,
03098 640, 706, 642, 57, 91, 880, 142, 104, 105, 106,
03099 918, 849, 920, 104, 105, 106, 653, 746, 926, -1,
03100 928, 654, 934, 935, 936, 937, 52, -1, 54, 55,
03101 56, 57, -1, -1, 951, -1, -1, 54, 55, 951,
03102 57, 953, 954, 951, -1, 197, 63, 64, -1, 939,
03103 -1, -1, -1, 952, -1, 967, 968, 969, 970, 973,
03104 950, -1, -1, 89, -1, 217, -1, 219, 220, 981,
03105 796, 223, -1, 225, -1, 707, -1, 989, 230, -1,
03106 -1, -1, -1, 716, 717, 68, -1, -1, -1, 241,
03107 242, -1, 797, -1, 799, -1, -1, 729, -1, -1,
03108 83, 84, -1, -1, 809, -1, -1, -1, 740, 814,
03109 743, 744, 749, -1, 52, 752, 54, 55, 56, 57,
03110 -1, -1, 755, -1, -1, 765, -1, 767, 768, -1,
03111 -1, -1, -1, 116, 117, 118, 119, 120, 121, -1,
03112 292, 293, 294, 295, 296, 297, 298, 299, -1, -1,
03113 302, 89, 304, -1, -1, 307, -1, 95, -1, 52,
03114 793, 54, 55, 56, 57, 870, 871, 800, 801, -1,
03115 -1, 804, 16, 17, -1, -1, 20, -1, -1, -1,
03116 -1, 813, -1, 335, -1, 337, -1, 820, -1, 341,
03117 342, -1, -1, 825, 834, 835, -1, 837, 830, 839,
03118 840, -1, 46, 47, 356, -1, -1, 51, 52, -1,
03119 -1, -1, -1, -1, 851, -1, 853, -1, 62, 63,
03120 -1, 52, 927, 54, 55, 56, 57, -1, -1, -1,
03121 -1, 864, 384, 385, 40, 41, 42, 43, 44, -1,
03122 -1, -1, -1, -1, -1, -1, -1, -1, 400, -1,
03123 955, -1, 957, -1, -1, 892, -1, 894, 89, -1,
03124 -1, 898, -1, -1, 95, -1, 906, 907, 908, -1,
03125 910, 911, 424, 52, -1, 54, 55, 56, 57, -1,
03126 -1, 433, -1, -1, -1, 918, -1, 920, -1, -1,
03127 -1, -1, -1, 926, 934, 935, 936, 937, -1, -1,
03128 452, -1, -1, -1, 941, -1, 943, -1, -1, 946,
03129 89, -1, -1, -1, -1, -1, 95, 96, -1, -1,
03130 -1, -1, -1, -1, 961, -1, -1, 967, 968, 969,
03131 970, -1, -1, -1, -1, -1, -1, 116, -1, -1,
03132 119, 981, -1, -1, -1, -1, 983, -1, -1, 989,
03133 -1, 195, -1, -1, 198, 199, 200, -1, -1, -1,
03134 2, -1, 4, 142, -1, 52, -1, 54, 55, 56,
03135 57, -1, -1, 217, -1, 219, 220, -1, -1, -1,
03136 -1, 2, -1, 4, -1, -1, -1, -1, -1, -1,
03137 542, -1, 544, 52, -1, 54, 55, 56, 57, -1,
03138 552, -1, 89, -1, -1, -1, -1, 49, 95, 96,
03139 -1, 53, 564, -1, 566, 567, -1, -1, -1, -1,
03140 -1, -1, -1, -1, -1, -1, -1, -1, 49, 116,
03141 89, -1, 119, -1, 76, -1, 95, 96, -1, -1,
03142 -1, -1, -1, -1, -1, -1, 88, 89, 90, 91,
03143 -1, -1, 604, -1, -1, -1, -1, 116, 302, -1,
03144 119, -1, -1, 307, 308, 309, 310, 311, 312, 313,
03145 314, 315, 316, 317, 318, 319, 320, 321, 322, 323,
03146 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
03147 -1, 335, -1, -1, -1, -1, -1, -1, -1, -1,
03148 -1, -1, 654, -1, -1, -1, -1, -1, -1, -1,
03149 662, -1, -1, 665, 666, -1, -1, -1, -1, 671,
03150 672, -1, 68, 69, 70, 71, 72, 73, 74, 75,
03151 76, 77, 78, 79, 80, -1, -1, 83, 84, -1,
03152 384, 385, -1, -1, -1, 697, -1, -1, 700, 701,
03153 394, 395, 396, -1, -1, 197, 400, 709, 402, 403,
03154 404, -1, -1, -1, 716, 717, 112, 113, 114, 115,
03155 116, 117, 118, 119, 120, 121, 197, -1, -1, 423,
03156 -1, -1, -1, -1, 428, -1, -1, -1, 230, -1,
03157 -1, 743, 744, 437, -1, -1, 440, -1, -1, 241,
03158 242, -1, -1, 755, -1, -1, -1, -1, 452, 230,
03159 -1, -1, -1, -1, -1, -1, -1, -1, -1, 261,
03160 241, 242, -1, -1, -1, -1, -1, -1, 472, 473,
03161 -1, 783, -1, -1, -1, -1, -1, -1, -1, -1,
03162 484, 793, -1, -1, 796, -1, -1, -1, 800, 801,
03163 292, -1, 804, -1, -1, 297, -1, -1, -1, -1,
03164 -1, -1, 304, 305, -1, -1, -1, 2, 820, 4,
03165 -1, 292, -1, -1, -1, -1, 297, -1, -1, -1,
03166 -1, -1, -1, 304, -1, -1, -1, -1, -1, -1,
03167 -1, -1, -1, -1, -1, 337, -1, 2, -1, 4,
03168 -1, -1, -1, -1, 548, -1, -1, -1, 552, -1,
03169 -1, -1, 864, -1, 49, 2, 337, 4, 53, -1,
03170 564, -1, -1, 875, -1, -1, -1, -1, -1, -1,
03171 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03172 -1, 76, -1, 587, 49, -1, -1, -1, 53, -1,
03173 -1, -1, -1, 88, 89, 90, 600, 601, -1, -1,
03174 -1, -1, 49, -1, -1, -1, 918, -1, 920, -1,
03175 -1, 76, -1, -1, 926, -1, 928, -1, -1, -1,
03176 -1, -1, 424, 88, 89, 90, 91, -1, -1, -1,
03177 -1, 433, -1, -1, -1, -1, -1, -1, -1, 951,
03178 -1, 88, -1, 424, -1, -1, -1, -1, 450, -1,
03179 -1, -1, 433, -1, 658, -1, -1, -1, 662, 663,
03180 -1, 665, 666, -1, -1, -1, -1, 671, 672, 0,
03181 -1, -1, -1, -1, -1, 679, -1, 8, 9, 10,
03182 -1, -1, 13, 14, 15, -1, 17, -1, 490, -1,
03183 -1, -1, -1, -1, -1, -1, 27, -1, -1, -1,
03184 -1, -1, 197, -1, -1, -1, 37, 38, -1, 40,
03185 41, 42, 43, 44, 718, -1, -1, -1, -1, 723,
03186 724, -1, 726, 727, -1, -1, -1, -1, -1, -1,
03187 734, -1, 197, -1, -1, 230, -1, -1, -1, -1,
03188 542, -1, 544, -1, -1, -1, 241, 242, -1, -1,
03189 197, -1, -1, -1, 85, -1, -1, -1, -1, -1,
03190 -1, 542, -1, 544, 566, 230, 261, -1, 772, -1,
03191 -1, -1, 776, -1, -1, -1, 241, 242, -1, 783,
03192 -1, -1, -1, 230, -1, 566, -1, -1, -1, -1,
03193 -1, -1, -1, -1, 241, 242, 261, 292, -1, 803,
03194 -1, -1, 297, -1, -1, -1, 137, -1, 139, 304,
03195 305, 142, 143, 615, 145, -1, 147, 821, 822, -1,
03196 -1, -1, -1, -1, -1, -1, -1, 292, -1, -1,
03197 -1, -1, 297, -1, -1, -1, -1, -1, -1, 304,
03198 305, -1, 337, -1, -1, 292, -1, -1, -1, -1,
03199 297, -1, 654, -1, -1, -1, -1, 304, -1, 661,
03200 307, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03201 -1, -1, 337, 654, -1, -1, -1, -1, -1, -1,
03202 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03203 337, -1, -1, -1, -1, -1, -1, -1, -1, 701,
03204 -1, -1, -1, -1, -1, -1, -1, 709, -1, -1,
03205 -1, -1, -1, -1, 716, 717, -1, -1, -1, -1,
03206 701, -1, -1, -1, -1, -1, -1, -1, 709, 424,
03207 -1, -1, -1, -1, -1, 716, 717, -1, 433, -1,
03208 -1, 743, 744, -1, -1, -1, -1, 951, -1, -1,
03209 -1, -1, -1, 755, -1, 450, -1, -1, -1, 424,
03210 -1, -1, 743, 744, -1, -1, -1, -1, 433, -1,
03211 -1, -1, -1, -1, 755, -1, -1, 424, -1, -1,
03212 -1, -1, -1, -1, -1, 450, 433, -1, -1, -1,
03213 -1, 793, -1, -1, -1, 490, -1, -1, 800, 801,
03214 -1, -1, 804, -1, -1, -1, -1, -1, -1, -1,
03215 -1, -1, 793, -1, -1, -1, -1, -1, 820, 800,
03216 801, -1, -1, 804, -1, 490, -1, -1, -1, -1,
03217 -1, -1, -1, -1, -1, -1, -1, -1, -1, 820,
03218 842, -1, -1, -1, -1, -1, -1, 542, -1, 544,
03219 -1, -1, -1, -1, -1, -1, -1, -1, 860, -1,
03220 -1, -1, 864, -1, -1, -1, -1, -1, -1, -1,
03221 -1, 566, -1, 875, -1, -1, -1, 542, -1, 544,
03222 -1, -1, -1, 864, -1, -1, -1, -1, -1, -1,
03223 -1, -1, -1, -1, 875, 542, -1, 544, -1, -1,
03224 -1, 566, -1, -1, -1, -1, -1, -1, -1, -1,
03225 -1, -1, -1, -1, -1, -1, 918, -1, 920, 566,
03226 615, -1, -1, -1, 926, -1, 928, -1, -1, -1,
03227 -1, -1, -1, -1, -1, -1, -1, 918, -1, 920,
03228 -1, -1, -1, -1, -1, 926, -1, 928, -1, -1,
03229 615, 646, -1, -1, -1, -1, -1, -1, -1, 654,
03230 -1, -1, -1, -1, -1, -1, 661, -1, -1, -1,
03231 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03232 -1, -1, 68, 69, 70, 71, 72, 73, 74, 654,
03233 -1, 77, 78, -1, -1, -1, 661, 83, 84, -1,
03234 -1, -1, -1, -1, -1, -1, 701, 654, -1, -1,
03235 -1, -1, -1, -1, 709, 662, -1, -1, -1, -1,
03236 -1, 716, 717, -1, -1, -1, 112, 113, 114, 115,
03237 116, 117, 118, 119, 120, 121, 701, -1, -1, -1,
03238 -1, -1, -1, -1, 709, -1, -1, -1, 743, 744,
03239 -1, 716, 717, -1, 701, -1, -1, -1, -1, -1,
03240 755, -1, 709, -1, -1, -1, -1, -1, -1, 716,
03241 717, 68, 69, 70, 71, 72, 73, 74, 743, 744,
03242 77, 78, -1, -1, -1, -1, 83, 84, -1, -1,
03243 755, -1, -1, -1, -1, -1, 743, 744, 793, -1,
03244 -1, -1, -1, -1, -1, 800, 801, -1, 755, 804,
03245 -1, -1, -1, -1, -1, 112, 113, 114, 115, 116,
03246 117, 118, 119, 120, 121, 820, -1, -1, 793, -1,
03247 -1, -1, -1, -1, -1, 800, 801, -1, -1, 804,
03248 -1, -1, -1, -1, -1, -1, 793, 842, -1, -1,
03249 -1, -1, -1, 800, 801, 820, -1, 804, -1, -1,
03250 -1, -1, -1, -1, -1, 860, -1, -1, -1, 864,
03251 -1, -1, -1, 820, -1, -1, -1, 842, -1, -1,
03252 875, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03253 -1, -1, -1, -1, -1, 860, -1, -1, -1, 864,
03254 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03255 875, -1, -1, 860, -1, -1, -1, 864, -1, -1,
03256 -1, -1, -1, 918, -1, 920, -1, -1, 875, -1,
03257 -1, 926, -1, 928, -1, -1, -1, -1, -1, -1,
03258 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03259 -1, -1, -1, 918, -1, 920, -1, -1, -1, -1,
03260 -1, 926, -1, 928, -1, -1, -1, -1, -1, -1,
03261 -1, 918, -1, 920, -1, -1, -1, -1, -1, 926,
03262 -1, 928, 0, 1, -1, 3, 4, 5, 6, 7,
03263 -1, -1, -1, 11, 12, -1, -1, -1, 16, -1,
03264 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03265 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03266 -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
03267 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03268 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03269 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03270 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03271 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03272 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03273 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03274 -1, -1, -1, 0, 122, 123, 124, -1, -1, -1,
03275 -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
03276 17, -1, -1, -1, -1, -1, -1, 145, -1, 147,
03277 27, 28, 29, -1, -1, -1, -1, -1, -1, -1,
03278 37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
03279 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
03280 74, 75, 76, 77, 78, 79, 80, -1, -1, 83,
03281 84, 68, 69, 70, 71, 72, 73, 74, 75, 76,
03282 77, 78, 79, 80, -1, -1, 83, 84, 85, -1,
03283 87, 88, -1, -1, -1, -1, 110, 94, 112, 113,
03284 114, 115, 116, 117, 118, 119, 120, 121, -1, -1,
03285 107, -1, 109, 110, 111, 112, 113, 114, 115, 116,
03286 117, 118, 119, 120, 121, -1, -1, -1, -1, -1,
03287 -1, -1, -1, 147, -1, -1, -1, -1, -1, -1,
03288 137, 138, 139, 140, 0, -1, 143, 144, 145, -1,
03289 147, -1, 8, 9, 10, -1, -1, 13, 14, 15,
03290 -1, 17, -1, -1, -1, -1, -1, -1, -1, -1,
03291 26, 27, 28, -1, -1, -1, -1, -1, -1, -1,
03292 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1,
03293 -1, -1, -1, -1, -1, 68, 69, 70, 71, 72,
03294 73, 74, 75, 76, 77, 78, 79, 80, -1, -1,
03295 83, 84, 68, 69, 70, 71, 72, 73, 74, 75,
03296 76, 77, 78, 79, 80, -1, -1, 83, 84, 85,
03297 -1, -1, 88, -1, -1, -1, -1, 110, 94, 112,
03298 113, 114, 115, 116, 117, 118, 119, 120, 121, -1,
03299 -1, -1, -1, -1, 110, -1, 112, 113, 114, 115,
03300 116, 117, 118, 119, 120, 121, -1, -1, -1, -1,
03301 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03302 136, 137, 138, 139, 140, 0, 142, 143, 144, 145,
03303 -1, 147, -1, 8, 9, 10, -1, -1, 13, 14,
03304 15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
03305 -1, -1, 27, 28, 29, -1, -1, -1, -1, -1,
03306 -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
03307 -1, -1, -1, -1, -1, -1, 68, 69, 70, 71,
03308 72, 73, 74, 75, -1, 77, 78, -1, -1, -1,
03309 -1, 83, 84, 68, 69, 70, 71, 72, 73, 74,
03310 75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
03311 85, -1, -1, 88, -1, -1, -1, -1, -1, 94,
03312 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
03313 -1, -1, 107, -1, -1, 110, 111, 112, 113, 114,
03314 115, 116, 117, 118, 119, 120, 121, -1, -1, -1,
03315 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03316 -1, -1, 137, 138, 139, 140, 0, -1, 143, 144,
03317 145, -1, 147, -1, 8, 9, 10, -1, -1, 13,
03318 14, 15, -1, 17, -1, -1, -1, -1, -1, -1,
03319 -1, -1, 26, 27, 28, -1, -1, -1, -1, -1,
03320 -1, -1, -1, 37, 38, -1, 40, 41, 42, 43,
03321 44, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03322 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03323 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
03324 74, 75, 76, 77, 78, 79, 80, -1, -1, 83,
03325 84, 85, -1, -1, 88, -1, -1, -1, -1, -1,
03326 94, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03327 -1, -1, -1, -1, -1, -1, 110, -1, 112, 113,
03328 114, 115, 116, 117, 118, 119, 120, 121, -1, -1,
03329 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03330 -1, -1, 136, 137, 138, 139, 140, 0, 142, 143,
03331 144, 145, -1, 147, -1, 8, 9, 10, -1, -1,
03332 13, 14, 15, -1, 17, -1, -1, -1, -1, -1,
03333 -1, -1, -1, -1, 27, 28, -1, -1, -1, -1,
03334 -1, -1, -1, -1, 37, 38, -1, 40, 41, 42,
03335 43, 44, -1, -1, -1, -1, -1, -1, -1, -1,
03336 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03337 -1, -1, -1, -1, -1, 68, 69, 70, 71, 72,
03338 73, 74, 75, 76, 77, 78, 79, 80, -1, -1,
03339 83, 84, 85, -1, -1, 88, -1, -1, -1, -1,
03340 -1, 94, -1, -1, -1, -1, -1, -1, -1, -1,
03341 -1, -1, -1, -1, -1, -1, -1, 110, -1, 112,
03342 113, 114, 115, 116, 117, 118, 119, 120, 121, -1,
03343 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03344 -1, -1, -1, -1, 137, 138, 139, 140, 0, 142,
03345 143, 144, 145, -1, 147, -1, 8, 9, 10, -1,
03346 -1, -1, 14, 15, -1, 17, -1, -1, -1, -1,
03347 -1, -1, -1, -1, 26, -1, -1, -1, -1, -1,
03348 -1, -1, -1, -1, -1, 37, 38, -1, 40, 41,
03349 42, 43, 44, -1, -1, -1, -1, -1, -1, -1,
03350 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03351 -1, -1, -1, -1, -1, -1, 68, 69, 70, 71,
03352 72, 73, 74, 75, 76, 77, 78, 79, 80, -1,
03353 -1, 83, 84, 85, 0, 87, -1, -1, -1, -1,
03354 -1, -1, 8, 9, 10, -1, -1, -1, 14, 15,
03355 -1, 17, -1, -1, -1, -1, -1, 109, 110, -1,
03356 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
03357 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1,
03358 -1, -1, -1, -1, 136, 137, 138, 139, 140, -1,
03359 -1, 143, -1, 145, -1, 147, -1, -1, -1, -1,
03360 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
03361 76, 77, 78, 79, 80, -1, -1, 83, 84, 85,
03362 -1, 87, -1, -1, -1, -1, -1, -1, -1, -1,
03363 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03364 -1, -1, -1, 109, 110, -1, 112, 113, 114, 115,
03365 116, 117, 118, 119, 120, 121, -1, -1, -1, -1,
03366 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03367 -1, 137, 138, 139, 140, -1, -1, 143, -1, 145,
03368 1, 147, 3, 4, 5, 6, 7, 8, 9, 10,
03369 11, 12, -1, -1, 15, 16, -1, 18, 19, 20,
03370 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03371 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03372 -1, -1, -1, -1, 45, 46, -1, 48, 49, 50,
03373 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03374 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03375 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03376 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03377 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
03378 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03379 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03380 -1, 122, 123, 124, -1, -1, -1, -1, -1, -1,
03381 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03382 -1, -1, -1, -1, 145, 1, 147, 3, 4, 5,
03383 6, 7, -1, -1, 10, 11, 12, -1, 14, 15,
03384 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03385 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03386 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03387 46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
03388 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03389 66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
03390 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03391 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03392 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03393 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03394 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1,
03395 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03396 -1, -1, -1, -1, -1, -1, -1, -1, -1, 145,
03397 1, 147, 3, 4, 5, 6, 7, -1, -1, 10,
03398 11, 12, -1, -1, 15, 16, 17, 18, 19, 20,
03399 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03400 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03401 -1, -1, -1, -1, 45, 46, -1, 48, 49, 50,
03402 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03403 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03404 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03405 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03406 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
03407 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03408 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03409 -1, 122, 123, 124, -1, -1, -1, -1, -1, -1,
03410 1, -1, 3, 4, 5, 6, 7, -1, -1, -1,
03411 11, 12, -1, -1, 145, 16, 147, 18, 19, 20,
03412 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03413 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03414 -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
03415 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03416 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03417 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03418 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03419 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
03420 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03421 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03422 -1, 122, 123, 124, -1, -1, -1, -1, -1, -1,
03423 -1, -1, -1, -1, -1, -1, 137, -1, -1, -1,
03424 -1, -1, -1, -1, 145, 1, 147, 3, 4, 5,
03425 6, 7, -1, -1, 10, 11, 12, -1, -1, 15,
03426 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03427 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03428 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03429 46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
03430 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03431 66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
03432 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03433 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03434 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03435 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03436 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1,
03437 -1, -1, -1, -1, -1, 1, -1, 3, 4, 5,
03438 6, 7, -1, 9, 10, 11, 12, -1, -1, 145,
03439 16, 147, 18, 19, 20, 21, 22, 23, 24, -1,
03440 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03441 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03442 46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
03443 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03444 66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
03445 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03446 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03447 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03448 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03449 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1,
03450 -1, -1, -1, -1, -1, 1, -1, 3, 4, 5,
03451 6, 7, -1, -1, -1, 11, 12, -1, -1, 145,
03452 16, 147, 18, 19, 20, 21, 22, 23, 24, -1,
03453 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03454 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03455 46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
03456 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03457 66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
03458 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03459 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03460 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03461 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03462 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1,
03463 -1, -1, -1, -1, -1, 1, -1, 3, 4, 5,
03464 6, 7, -1, -1, -1, 11, 12, 143, -1, 145,
03465 16, 147, 18, 19, 20, 21, 22, 23, 24, -1,
03466 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03467 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03468 46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
03469 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03470 66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
03471 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03472 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03473 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03474 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03475 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1,
03476 -1, -1, -1, -1, -1, 1, -1, 3, 4, 5,
03477 6, 7, -1, -1, -1, 11, 12, 143, -1, 145,
03478 16, 147, 18, 19, 20, 21, 22, 23, 24, -1,
03479 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03480 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03481 46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
03482 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03483 66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
03484 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03485 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03486 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03487 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03488 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1,
03489 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03490 -1, 137, -1, -1, -1, -1, -1, -1, -1, 145,
03491 1, 147, 3, 4, 5, 6, 7, -1, -1, 10,
03492 11, 12, -1, -1, -1, 16, -1, 18, 19, 20,
03493 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03494 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03495 -1, -1, -1, -1, 45, 46, -1, 48, 49, 50,
03496 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03497 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03498 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03499 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03500 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
03501 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03502 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03503 -1, 122, 123, 124, -1, -1, -1, -1, -1, -1,
03504 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03505 11, 12, -1, -1, 145, 16, 147, 18, 19, 20,
03506 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03507 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03508 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03509 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
03510 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03511 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03512 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03513 -1, 92, 93, -1, 95, 96, 97, 98, 99, 100,
03514 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03515 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
03516 12, 122, 123, 124, 16, -1, 18, 19, 20, 21,
03517 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03518 32, 33, 34, 35, 36, -1, 147, 39, -1, -1,
03519 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03520 52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
03521 62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
03522 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03523 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03524 92, 93, -1, -1, -1, 97, 98, 99, 100, 101,
03525 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03526 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03527 122, 123, 124, -1, -1, -1, -1, -1, -1, -1,
03528 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
03529 12, -1, -1, 145, 16, 147, 18, 19, 20, 21,
03530 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03531 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03532 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03533 52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
03534 62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
03535 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03536 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03537 92, 93, -1, -1, -1, 97, 98, 99, 100, 101,
03538 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03539 3, 4, 5, 6, 7, -1, -1, -1, 11, 12,
03540 122, 123, 124, 16, -1, 18, 19, 20, 21, 22,
03541 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03542 33, 34, 35, 36, -1, 147, 39, -1, -1, -1,
03543 -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
03544 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03545 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03546 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03547 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03548 93, -1, 95, -1, 97, 98, 99, 100, 101, 102,
03549 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03550 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
03551 123, 124, -1, -1, -1, -1, -1, -1, 3, 4,
03552 5, 6, 7, -1, -1, -1, 11, 12, -1, -1,
03553 -1, 16, 145, 18, 19, 20, 21, 22, 23, 24,
03554 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
03555 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
03556 45, 46, -1, 48, 49, 50, 51, 52, 53, 54,
03557 55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
03558 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03559 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03560 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03561 95, -1, 97, 98, 99, 100, 101, 102, 103, -1,
03562 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03563 -1, -1, -1, -1, -1, -1, -1, 122, 123, 124,
03564 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03565 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03566 145, 3, 4, 5, 6, 7, 8, 9, 10, 11,
03567 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
03568 22, 23, 24, 25, 26, -1, -1, -1, 30, 31,
03569 32, 33, 34, 35, 36, 37, 38, 39, -1, -1,
03570 -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
03571 52, 53, 54, 55, 56, 57, -1, -1, -1, -1,
03572 -1, -1, -1, -1, 66, 67, 68, 69, 70, 71,
03573 72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
03574 82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
03575 -1, -1, -1, 95, -1, -1, -1, -1, -1, -1,
03576 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03577 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
03578 -1, 123, 124, -1, -1, -1, -1, -1, 3, 4,
03579 5, -1, 7, -1, -1, -1, 11, 12, -1, 141,
03580 142, 16, -1, 18, 19, 20, 21, 22, 23, 24,
03581 -1, 26, -1, -1, -1, 30, 31, 32, 33, 34,
03582 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
03583 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
03584 55, 56, 57, 58, 59, 60, -1, 62, 63, 64,
03585 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03586 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03587 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03588 95, 96, 97, 98, 99, 100, 101, 102, 103, -1,
03589 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03590 -1, -1, -1, -1, -1, -1, -1, 122, 123, 124,
03591 -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
03592 -1, 136, -1, 11, 12, -1, -1, 142, 16, -1,
03593 18, 19, 20, 21, 22, 23, 24, -1, 26, -1,
03594 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03595 -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
03596 -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03597 58, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03598 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03599 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03600 -1, 89, 90, -1, 92, 93, -1, 95, 96, 97,
03601 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03602 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03603 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
03604 -1, -1, 3, 4, 5, -1, 7, -1, 136, -1,
03605 11, 12, -1, -1, 142, 16, -1, 18, 19, 20,
03606 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03607 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03608 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03609 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
03610 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03611 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03612 -1, -1, -1, -1, -1, 86, 87, -1, 89, 90,
03613 -1, 92, 93, -1, 95, 96, 97, 98, 99, 100,
03614 101, 102, 103, -1, -1, -1, -1, -1, 109, -1,
03615 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
03616 7, 122, 123, 124, 11, 12, -1, -1, -1, 16,
03617 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
03618 -1, 142, -1, 30, 31, 32, 33, 34, 35, 36,
03619 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
03620 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
03621 57, 58, 59, 60, -1, 62, 63, 64, -1, 66,
03622 67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03623 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
03624 -1, -1, 89, 90, -1, 92, 93, -1, 95, 96,
03625 97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
03626 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03627 3, 4, 5, -1, 7, 122, 123, 124, 11, 12,
03628 -1, -1, -1, 16, -1, 18, 19, 20, 21, 22,
03629 23, 24, -1, -1, -1, 142, -1, 30, 31, 32,
03630 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03631 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03632 53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
03633 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03634 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03635 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03636 93, -1, 95, 96, 97, 98, 99, 100, 101, 102,
03637 103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03638 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
03639 123, 124, -1, -1, -1, -1, -1, -1, -1, -1,
03640 -1, -1, -1, -1, -1, -1, -1, -1, -1, 142,
03641 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
03642 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
03643 23, 24, 25, 26, -1, -1, -1, 30, 31, 32,
03644 33, 34, 35, 36, 37, 38, 39, -1, -1, -1,
03645 -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
03646 53, 54, 55, 56, 57, -1, -1, -1, -1, -1,
03647 -1, -1, -1, 66, 67, 68, 69, 70, 71, 72,
03648 73, 74, -1, -1, 77, 78, -1, -1, 81, 82,
03649 83, 84, -1, -1, -1, -1, -1, -1, -1, -1,
03650 -1, -1, 95, -1, -1, -1, -1, -1, -1, -1,
03651 -1, -1, -1, -1, -1, -1, -1, -1, -1, 112,
03652 113, 114, 115, 116, 117, 118, 119, 120, 121, -1,
03653 123, 124, -1, -1, -1, -1, -1, -1, -1, -1,
03654 -1, -1, -1, -1, -1, -1, -1, -1, 141, 3,
03655 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
03656 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
03657 24, 25, 26, -1, -1, -1, 30, 31, 32, 33,
03658 34, 35, 36, 37, 38, 39, -1, -1, -1, -1,
03659 -1, 45, 46, 47, 48, 49, 50, 51, 52, 53,
03660 54, -1, 56, -1, -1, -1, -1, -1, -1, -1,
03661 -1, -1, 66, 67, 68, 69, 70, 71, 72, 73,
03662 74, -1, -1, 77, 78, -1, -1, 81, 82, 83,
03663 84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03664 -1, 95, -1, -1, 98, -1, -1, -1, -1, -1,
03665 -1, -1, -1, -1, -1, -1, -1, -1, 112, 113,
03666 114, 115, 116, 117, 118, 119, 120, 121, -1, 123,
03667 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03668 -1, -1, -1, -1, -1, -1, -1, 141, 3, 4,
03669 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
03670 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
03671 25, 26, -1, -1, -1, 30, 31, 32, 33, 34,
03672 35, 36, 37, 38, 39, -1, -1, -1, -1, -1,
03673 45, 46, 47, 48, 49, 50, 51, 52, 53, -1,
03674 -1, 56, -1, -1, -1, -1, -1, -1, -1, -1,
03675 -1, 66, 67, 68, 69, 70, 71, 72, 73, 74,
03676 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
03677 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03678 95, -1, -1, 98, -1, -1, -1, -1, -1, -1,
03679 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114,
03680 115, 116, 117, 118, 119, 120, 121, -1, 123, 124,
03681 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03682 -1, -1, -1, -1, -1, -1, 141, 3, 4, 5,
03683 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
03684 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
03685 26, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03686 36, 37, 38, 39, -1, -1, -1, -1, -1, 45,
03687 46, 47, 48, 49, 50, 51, 52, 53, -1, -1,
03688 56, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03689 66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
03690 -1, 77, 78, -1, -1, 81, 82, 83, 84, -1,
03691 -1, -1, -1, -1, -1, -1, -1, -1, -1, 95,
03692 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03693 -1, -1, -1, -1, -1, -1, 112, 113, 114, 115,
03694 116, 117, 118, 119, 120, 121, -1, 123, 124, -1,
03695 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
03696 12, -1, -1, -1, 16, 141, 18, 19, 20, 21,
03697 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03698 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03699 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03700 52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
03701 62, 63, 64, -1, -1, -1, -1, -1, -1, -1,
03702 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03703 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03704 92, 93, -1, -1, -1, 97, 98, 99, 100, 101,
03705 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03706 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
03707 122, 11, 12, -1, -1, -1, 16, -1, 18, 19,
03708 20, 21, 22, 23, 24, -1, -1, -1, 140, -1,
03709 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
03710 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
03711 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
03712 60, -1, 62, 63, 64, -1, -1, -1, -1, -1,
03713 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03714 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
03715 90, -1, 92, 93, -1, -1, -1, 97, 98, 99,
03716 100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
03717 -1, -1, -1, -1, -1, 3, 4, 5, 6, 7,
03718 -1, -1, 122, 11, 12, -1, -1, -1, 16, -1,
03719 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03720 140, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03721 -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
03722 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03723 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03724 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03725 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03726 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03727 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03728 -1, -1, -1, -1, 3, 4, 5, 6, 7, -1,
03729 -1, -1, 11, 12, 122, 123, 124, 16, -1, 18,
03730 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
03731 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
03732 39, -1, -1, -1, -1, -1, 45, 46, -1, 48,
03733 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
03734 59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
03735 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03736 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
03737 89, 90, -1, 92, 93, -1, 95, -1, 97, 98,
03738 99, 100, 101, 102, 103, -1, -1, -1, -1, -1,
03739 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
03740 -1, 11, 12, 122, 123, 124, 16, -1, 18, 19,
03741 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
03742 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
03743 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
03744 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
03745 60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
03746 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03747 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
03748 90, -1, 92, 93, -1, 95, 96, 97, 98, 99,
03749 100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
03750 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03751 11, 12, 122, 123, 124, 16, -1, 18, 19, 20,
03752 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03753 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03754 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03755 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
03756 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03757 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03758 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03759 -1, 92, 93, -1, 95, 96, 97, 98, 99, 100,
03760 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03761 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
03762 12, 122, 123, 124, 16, -1, 18, 19, 20, 21,
03763 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03764 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03765 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03766 52, 53, 54, 55, 56, 57, 58, 59, 60, -1,
03767 62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
03768 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03769 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03770 92, 93, -1, 95, -1, 97, 98, 99, 100, 101,
03771 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03772 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
03773 122, 123, 124, 16, -1, 18, 19, 20, 21, 22,
03774 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03775 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03776 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03777 53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
03778 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03779 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03780 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03781 93, -1, -1, 96, 97, 98, 99, 100, 101, 102,
03782 103, -1, -1, -1, -1, -1, -1, -1, -1, 3,
03783 4, 5, -1, 7, -1, -1, -1, 11, 12, 122,
03784 123, 124, 16, -1, 18, 19, 20, 21, 22, 23,
03785 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03786 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03787 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03788 54, 55, 56, 57, 58, 59, 60, -1, 62, 63,
03789 64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
03790 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03791 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03792 -1, 95, -1, 97, 98, 99, 100, 101, 102, 103,
03793 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
03794 5, -1, 7, -1, -1, -1, 11, 12, 122, 123,
03795 124, 16, -1, 18, 19, 20, 21, 22, 23, 24,
03796 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
03797 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
03798 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
03799 55, 56, 57, 58, 59, 60, -1, 62, 63, 64,
03800 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
03801 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03802 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
03803 -1, -1, 97, 98, 99, 100, 101, 102, 103, -1,
03804 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
03805 -1, 7, -1, -1, -1, 11, 12, 122, 123, 124,
03806 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03807 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03808 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03809 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03810 56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
03811 66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
03812 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03813 86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
03814 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
03815 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
03816 7, -1, -1, -1, 11, 12, 122, 123, 124, 16,
03817 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
03818 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
03819 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
03820 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
03821 57, -1, 59, 60, -1, 62, 63, 64, -1, 66,
03822 67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03823 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
03824 -1, -1, 89, 90, -1, 92, 93, -1, 95, -1,
03825 97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
03826 -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
03827 -1, -1, -1, 11, 12, 122, 123, 124, 16, -1,
03828 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03829 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03830 -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
03831 -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03832 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
03833 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03834 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
03835 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
03836 98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
03837 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
03838 -1, -1, 11, 12, 122, 123, 124, 16, -1, 18,
03839 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
03840 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
03841 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
03842 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
03843 59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
03844 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03845 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
03846 89, 90, -1, 92, 93, -1, 95, -1, 97, 98,
03847 99, 100, 101, 102, 103, -1, -1, -1, -1, -1,
03848 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
03849 -1, 11, 12, 122, 123, 124, 16, -1, 18, 19,
03850 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
03851 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
03852 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
03853 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
03854 60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
03855 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03856 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
03857 90, -1, 92, 93, -1, 95, -1, 97, 98, 99,
03858 100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
03859 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03860 11, 12, 122, 123, 124, 16, -1, 18, 19, 20,
03861 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03862 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03863 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03864 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03865 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
03866 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03867 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
03868 -1, 92, 93, -1, -1, -1, 97, 98, 99, 100,
03869 101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
03870 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
03871 12, 122, 123, 124, 16, -1, 18, 19, 20, 21,
03872 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03873 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03874 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
03875 52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
03876 62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
03877 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03878 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
03879 92, 93, -1, -1, -1, 97, 98, 99, 100, 101,
03880 102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
03881 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
03882 122, 123, 124, 16, -1, 18, 19, 20, 21, 22,
03883 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03884 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03885 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
03886 53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
03887 63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
03888 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03889 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
03890 93, -1, -1, -1, 97, 98, 99, 100, 101, 102,
03891 103, -1, -1, -1, -1, -1, -1, -1, -1, 3,
03892 4, 5, -1, 7, -1, -1, -1, 11, 12, 122,
03893 123, 124, 16, -1, 18, 19, 20, 21, 22, 23,
03894 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03895 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03896 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03897 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03898 64, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03899 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03900 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03901 -1, 95, -1, 97, 98, 99, 100, 101, 102, 103,
03902 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
03903 -1, -1, 11, 12, -1, -1, -1, 16, 122, 18,
03904 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
03905 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
03906 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
03907 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
03908 59, 60, -1, 62, 63, 64, -1, -1, -1, -1,
03909 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03910 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
03911 89, 90, -1, 92, 93, -1, 95, -1, 97, 98,
03912 99, 100, 101, 102, 103, -1, -1, -1, -1, 3,
03913 4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
03914 -1, -1, 16, 122, 18, 19, 20, 21, 22, 23,
03915 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03916 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03917 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03918 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03919 64, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03920 -1, -1, -1, -1, -1, -1, -1, -1, -1, 83,
03921 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03922 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03923 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
03924 -1, -1, 11, 12, -1, -1, -1, 16, 122, 18,
03925 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
03926 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
03927 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
03928 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
03929 59, 60, -1, 62, 63, 64, -1, -1, -1, -1,
03930 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03931 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
03932 89, 90, -1, 92, 93, -1, -1, -1, 97, 98,
03933 99, 100, 101, 102, 103, -1, -1, -1, -1, 3,
03934 4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
03935 -1, -1, 16, 122, 18, 19, 20, 21, 22, 23,
03936 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03937 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03938 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03939 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03940 64, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03941 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03942 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03943 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03944 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
03945 -1, -1, 11, 12, -1, -1, -1, 16, 122, 18,
03946 19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
03947 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
03948 39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
03949 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
03950 59, 60, -1, 62, 63, 64, -1, -1, -1, -1,
03951 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03952 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
03953 89, 90, -1, 92, 93, -1, -1, -1, 97, 98,
03954 99, 100, 101, 102, 103, -1, -1, -1, -1, 3,
03955 4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
03956 -1, -1, 16, 122, 18, 19, 20, 21, 22, 23,
03957 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03958 34, 35, 36, -1, -1, 39, -1, 44, -1, -1,
03959 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
03960 54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
03961 64, 68, 69, 70, 71, 72, 73, 74, 75, 76,
03962 77, 78, 79, 80, -1, -1, 83, 84, -1, -1,
03963 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
03964 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
03965 -1, -1, -1, 110, -1, 112, 113, 114, 115, 116,
03966 117, 118, 119, 120, 121, -1, -1, -1, 122, -1,
03967 52, 53, -1, -1, 56, -1, -1, -1, -1, -1,
03968 -1, -1, -1, 140, 66, 67, 68, 69, 70, 71,
03969 72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
03970 82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
03971 -1, -1, -1, 95, -1, -1, -1, -1, -1, -1,
03972 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03973 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
03974 -1, 123, 124, -1, -1, -1, -1, 52, 53, -1,
03975 -1, 56, -1, -1, -1, -1, -1, -1, -1, 141,
03976 142, 66, 67, 68, 69, 70, 71, 72, 73, 74,
03977 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
03978 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03979 95, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03980 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114,
03981 115, 116, 117, 118, 119, 120, 121, -1, 123, 124,
03982 -1, -1, -1, -1, 52, 53, -1, -1, 56, -1,
03983 -1, -1, -1, -1, -1, -1, 141, 142, 66, 67,
03984 68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
03985 78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
03986 -1, -1, -1, -1, -1, -1, -1, 95, -1, -1,
03987 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03988 -1, -1, -1, -1, 112, 113, 114, 115, 116, 117,
03989 118, 119, 120, 121, -1, 123, 124, -1, -1, -1,
03990 -1, 52, 53, -1, -1, 56, -1, -1, -1, -1,
03991 -1, -1, -1, 141, 142, 66, 67, 68, 69, 70,
03992 71, 72, 73, 74, -1, -1, 77, 78, -1, -1,
03993 81, 82, 83, 84, -1, -1, -1, -1, -1, -1,
03994 -1, -1, -1, -1, 95, -1, -1, -1, -1, -1,
03995 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03996 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
03997 121, -1, 123, 124, -1, -1, -1, -1, 52, 53,
03998 -1, -1, 56, -1, -1, -1, -1, -1, -1, -1,
03999 141, 142, 66, 67, 68, 69, 70, 71, 72, 73,
04000 74, -1, -1, 77, 78, -1, -1, 81, 82, 83,
04001 84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04002 -1, 95, -1, -1, -1, -1, -1, -1, -1, -1,
04003 -1, -1, -1, -1, -1, -1, -1, -1, 112, 113,
04004 114, 115, 116, 117, 118, 119, 120, 121, -1, 123,
04005 124, -1, -1, -1, -1, 52, 53, -1, -1, 56,
04006 -1, -1, -1, -1, -1, -1, -1, 141, 142, 66,
04007 67, 68, 69, 70, 71, 72, 73, 74, -1, -1,
04008 77, 78, -1, -1, 81, 82, 83, 84, -1, -1,
04009 -1, -1, -1, -1, -1, -1, -1, -1, 95, -1,
04010 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04011 -1, -1, -1, -1, -1, 112, 113, 114, 115, 116,
04012 117, 118, 119, 120, 121, -1, 123, 124, -1, -1,
04013 -1, -1, 52, 53, -1, -1, 56, -1, -1, -1,
04014 -1, -1, -1, -1, 141, 142, 66, 67, 68, 69,
04015 70, 71, 72, 73, 74, -1, -1, 77, 78, -1,
04016 -1, 81, 82, 83, 84, -1, -1, -1, -1, -1,
04017 -1, -1, -1, -1, -1, 95, -1, -1, -1, -1,
04018 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04019 -1, -1, 112, 113, 114, 115, 116, 117, 118, 119,
04020 120, 121, -1, 123, 124, -1, -1, -1, -1, 52,
04021 53, -1, -1, 56, -1, -1, -1, -1, -1, -1,
04022 -1, 141, 142, 66, 67, 68, 69, 70, 71, 72,
04023 73, 74, -1, -1, 77, 78, -1, -1, 81, 82,
04024 83, 84, -1, -1, -1, -1, -1, -1, -1, -1,
04025 -1, -1, 95, -1, -1, -1, -1, -1, -1, -1,
04026 -1, -1, -1, -1, -1, -1, -1, -1, -1, 112,
04027 113, 114, 115, 116, 117, 118, 119, 120, 121, -1,
04028 123, 124, -1, -1, -1, -1, 52, 53, -1, -1,
04029 56, -1, -1, -1, -1, -1, -1, -1, 141, 142,
04030 66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
04031 -1, 77, 78, -1, -1, 81, 82, 83, 84, -1,
04032 -1, -1, -1, -1, -1, -1, -1, -1, -1, 95,
04033 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04034 -1, -1, -1, -1, -1, -1, 112, 113, 114, 115,
04035 116, 117, 118, 119, 120, 121, -1, 123, 124, -1,
04036 -1, -1, -1, 52, 53, -1, -1, 56, -1, -1,
04037 -1, -1, -1, -1, -1, 141, 142, 66, 67, 68,
04038 69, 70, 71, 72, 73, 74, -1, -1, 77, 78,
04039 -1, -1, 81, 82, 83, 84, -1, -1, -1, -1,
04040 -1, -1, -1, -1, -1, -1, 95, -1, -1, -1,
04041 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04042 -1, -1, -1, 112, 113, 114, 115, 116, 117, 118,
04043 119, 120, 121, -1, 123, 124, -1, -1, -1, -1,
04044 52, 53, -1, -1, 56, -1, -1, -1, -1, -1,
04045 -1, -1, 141, 142, 66, 67, 68, 69, 70, 71,
04046 72, 73, 74, -1, -1, 77, 78, -1, -1, 81,
04047 82, 83, 84, -1, -1, -1, -1, -1, -1, -1,
04048 -1, -1, -1, 95, -1, -1, -1, -1, -1, -1,
04049 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04050 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
04051 -1, 123, 124, -1, -1, -1, -1, 52, 53, -1,
04052 -1, 56, -1, -1, -1, -1, -1, -1, -1, 141,
04053 142, 66, 67, 68, 69, 70, 71, 72, 73, 74,
04054 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
04055 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04056 95, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04057 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114,
04058 115, 116, 117, 118, 119, 120, 121, -1, 123, 124,
04059 -1, -1, -1, -1, 52, 53, -1, -1, 56, -1,
04060 -1, -1, -1, -1, -1, -1, 141, 142, 66, 67,
04061 68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
04062 78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
04063 -1, -1, -1, -1, -1, -1, -1, 95, -1, -1,
04064 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04065 -1, -1, -1, -1, 112, 113, 114, 115, 116, 117,
04066 118, 119, 120, 121, -1, 123, 124, -1, -1, -1,
04067 -1, 52, 53, -1, -1, 56, -1, -1, -1, -1,
04068 -1, -1, -1, 141, 142, 66, 67, 68, 69, 70,
04069 71, 72, 73, 74, -1, -1, 77, 78, -1, -1,
04070 81, 82, 83, 84, -1, -1, -1, -1, -1, -1,
04071 -1, -1, -1, -1, 95, -1, -1, -1, -1, -1,
04072 -1, -1, 44, -1, -1, -1, -1, -1, -1, -1,
04073 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
04074 121, 44, 123, 124, -1, -1, 68, 69, 70, 71,
04075 72, 73, 74, 75, 76, 77, 78, 79, 80, -1,
04076 141, 83, 84, -1, -1, 68, 69, 70, 71, 72,
04077 73, 74, 75, 76, 77, 78, 79, 80, -1, -1,
04078 83, 84, -1, -1, -1, -1, -1, -1, 110, -1,
04079 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
04080 -1, -1, -1, -1, -1, -1, -1, 110, -1, 112,
04081 113, 114, 115, 116, 117, 118, 119, 120, 121
04082 };
04083
04084
04085
04086 static const yytype_uint16 yystos[] =
04087 {
04088 0, 149, 150, 0, 1, 3, 4, 5, 6, 7,
04089 11, 12, 16, 18, 19, 20, 21, 22, 23, 24,
04090 30, 31, 32, 33, 34, 35, 36, 39, 45, 46,
04091 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
04092 57, 59, 60, 62, 63, 64, 66, 67, 86, 89,
04093 90, 92, 93, 95, 97, 98, 99, 100, 101, 102,
04094 103, 122, 123, 124, 151, 152, 153, 158, 160, 161,
04095 163, 164, 167, 168, 170, 171, 172, 174, 175, 185,
04096 199, 216, 217, 218, 219, 220, 221, 222, 223, 224,
04097 225, 226, 249, 250, 260, 261, 262, 263, 264, 265,
04098 266, 269, 279, 281, 282, 283, 284, 285, 286, 287,
04099 310, 321, 153, 3, 4, 5, 6, 7, 8, 9,
04100 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
04101 20, 21, 22, 23, 24, 25, 26, 30, 31, 32,
04102 33, 34, 35, 36, 37, 38, 39, 45, 46, 47,
04103 48, 49, 50, 51, 52, 53, 56, 66, 67, 68,
04104 69, 70, 71, 72, 73, 74, 77, 78, 81, 82,
04105 83, 84, 95, 112, 113, 114, 115, 116, 117, 118,
04106 119, 120, 121, 123, 124, 141, 178, 179, 180, 181,
04107 183, 184, 279, 281, 39, 58, 86, 89, 95, 96,
04108 123, 167, 175, 185, 187, 192, 195, 197, 216, 283,
04109 284, 286, 287, 308, 309, 192, 192, 142, 193, 194,
04110 142, 189, 193, 142, 147, 315, 54, 180, 315, 154,
04111 136, 21, 22, 30, 31, 32, 185, 216, 310, 185,
04112 56, 1, 89, 156, 157, 158, 169, 170, 321, 161,
04113 188, 197, 308, 321, 187, 307, 308, 321, 46, 86,
04114 122, 140, 174, 199, 216, 283, 284, 287, 242, 243,
04115 54, 55, 57, 178, 272, 280, 271, 272, 273, 146,
04116 267, 146, 270, 59, 60, 163, 185, 185, 145, 147,
04117 314, 319, 320, 40, 41, 42, 43, 44, 37, 38,
04118 28, 247, 109, 140, 89, 95, 171, 109, 68, 69,
04119 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
04120 80, 83, 84, 110, 112, 113, 114, 115, 116, 117,
04121 118, 119, 120, 121, 85, 138, 139, 200, 161, 162,
04122 162, 203, 205, 162, 314, 320, 86, 168, 175, 216,
04123 232, 283, 284, 287, 52, 56, 83, 86, 176, 177,
04124 216, 283, 284, 287, 177, 33, 34, 35, 36, 49,
04125 50, 51, 52, 56, 142, 178, 285, 305, 85, 139,
04126 26, 136, 251, 263, 87, 87, 189, 193, 251, 140,
04127 187, 56, 187, 187, 109, 88, 140, 196, 321, 85,
04128 138, 139, 87, 87, 140, 196, 192, 315, 316, 192,
04129 191, 192, 197, 308, 321, 161, 316, 161, 54, 63,
04130 64, 159, 142, 186, 136, 156, 85, 139, 87, 158,
04131 169, 143, 314, 320, 316, 201, 144, 140, 147, 318,
04132 140, 318, 137, 318, 315, 56, 59, 60, 171, 173,
04133 140, 85, 138, 139, 244, 61, 104, 105, 106, 274,
04134 106, 274, 106, 65, 274, 106, 106, 268, 274, 106,
04135 61, 106, 68, 68, 145, 153, 162, 162, 162, 162,
04136 158, 161, 161, 248, 95, 163, 187, 197, 198, 169,
04137 140, 174, 140, 160, 163, 175, 185, 187, 198, 185,
04138 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
04139 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
04140 185, 185, 185, 185, 185, 52, 53, 56, 183, 189,
04141 311, 312, 191, 52, 53, 56, 183, 189, 311, 155,
04142 156, 13, 228, 319, 228, 162, 162, 314, 17, 254,
04143 56, 85, 138, 139, 25, 161, 52, 56, 176, 1,
04144 113, 288, 319, 85, 138, 139, 212, 306, 213, 85,
04145 139, 313, 52, 56, 311, 311, 253, 252, 163, 185,
04146 163, 185, 94, 165, 182, 185, 187, 95, 187, 195,
04147 308, 52, 56, 191, 52, 56, 309, 316, 143, 316,
04148 140, 140, 316, 180, 202, 185, 151, 137, 311, 311,
04149 185, 316, 158, 316, 308, 140, 173, 52, 56, 191,
04150 52, 56, 52, 54, 55, 56, 57, 89, 95, 96,
04151 116, 119, 142, 245, 291, 292, 293, 294, 295, 296,
04152 299, 300, 301, 302, 303, 276, 275, 146, 274, 146,
04153 185, 185, 76, 114, 237, 238, 321, 187, 140, 316,
04154 173, 140, 109, 44, 315, 87, 87, 189, 193, 315,
04155 317, 87, 87, 189, 190, 193, 321, 10, 227, 8,
04156 256, 321, 156, 13, 156, 27, 229, 319, 229, 254,
04157 197, 227, 52, 56, 191, 52, 56, 207, 210, 319,
04158 289, 209, 52, 56, 176, 191, 155, 161, 142, 290,
04159 291, 214, 190, 193, 190, 193, 237, 237, 44, 166,
04160 180, 187, 196, 87, 87, 317, 87, 87, 308, 161,
04161 137, 318, 171, 317, 109, 52, 89, 95, 233, 234,
04162 235, 293, 291, 29, 107, 246, 140, 304, 321, 140,
04163 304, 52, 140, 304, 52, 277, 54, 55, 57, 278,
04164 287, 52, 145, 236, 239, 295, 297, 298, 301, 303,
04165 321, 156, 95, 187, 173, 185, 111, 163, 185, 163,
04166 185, 165, 144, 87, 163, 185, 163, 185, 165, 187,
04167 198, 257, 321, 15, 231, 321, 14, 230, 231, 231,
04168 204, 206, 227, 140, 228, 317, 162, 319, 162, 155,
04169 317, 227, 316, 291, 155, 319, 178, 156, 156, 185,
04170 237, 87, 140, 316, 187, 235, 140, 293, 140, 316,
04171 239, 156, 156, 294, 299, 301, 303, 295, 296, 301,
04172 295, 156, 109, 52, 240, 241, 292, 239, 114, 140,
04173 304, 140, 304, 140, 304, 10, 187, 185, 163, 185,
04174 88, 258, 321, 156, 9, 259, 321, 162, 227, 227,
04175 156, 156, 187, 156, 229, 211, 319, 227, 316, 227,
04176 215, 10, 137, 156, 316, 234, 140, 95, 233, 316,
04177 10, 137, 140, 304, 140, 304, 140, 304, 140, 304,
04178 304, 137, 86, 216, 140, 114, 298, 301, 295, 297,
04179 301, 295, 86, 175, 216, 283, 284, 287, 228, 156,
04180 228, 227, 227, 231, 254, 255, 208, 155, 290, 137,
04181 140, 234, 140, 293, 295, 301, 295, 295, 56, 85,
04182 241, 140, 304, 140, 304, 304, 140, 304, 304, 56,
04183 85, 138, 139, 156, 156, 156, 227, 155, 234, 140,
04184 304, 140, 304, 304, 304, 52, 56, 295, 301, 295,
04185 295, 52, 56, 191, 52, 56, 256, 230, 227, 227,
04186 234, 295, 304, 140, 304, 304, 304, 317, 304, 295,
04187 304
04188 };
04189
04190 #define yyerrok (yyerrstatus = 0)
04191 #define yyclearin (yychar = YYEMPTY)
04192 #define YYEMPTY (-2)
04193 #define YYEOF 0
04194
04195 #define YYACCEPT goto yyacceptlab
04196 #define YYABORT goto yyabortlab
04197 #define YYERROR goto yyerrorlab
04198
04199
04200
04201
04202
04203
04204
04205
04206
04207 #define YYFAIL goto yyerrlab
04208 #if defined YYFAIL
04209
04210
04211
04212
04213 #endif
04214
04215 #define YYRECOVERING() (!!yyerrstatus)
04216
04217 #define YYBACKUP(Token, Value) \
04218 do \
04219 if (yychar == YYEMPTY && yylen == 1) \
04220 { \
04221 yychar = (Token); \
04222 yylval = (Value); \
04223 YYPOPSTACK (1); \
04224 goto yybackup; \
04225 } \
04226 else \
04227 { \
04228 parser_yyerror (parser, YY_("syntax error: cannot back up")); \
04229 YYERROR; \
04230 } \
04231 while (YYID (0))
04232
04233
04234 #define YYTERROR 1
04235 #define YYERRCODE 256
04236
04237
04238
04239
04240
04241
04242 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
04243 #ifndef YYLLOC_DEFAULT
04244 # define YYLLOC_DEFAULT(Current, Rhs, N) \
04245 do \
04246 if (YYID (N)) \
04247 { \
04248 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
04249 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
04250 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
04251 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
04252 } \
04253 else \
04254 { \
04255 (Current).first_line = (Current).last_line = \
04256 YYRHSLOC (Rhs, 0).last_line; \
04257 (Current).first_column = (Current).last_column = \
04258 YYRHSLOC (Rhs, 0).last_column; \
04259 } \
04260 while (YYID (0))
04261 #endif
04262
04263
04264
04265
04266 #ifndef YY_LOCATION_PRINT
04267 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
04268 #endif
04269
04270
04271
04272
04273 #ifdef YYLEX_PARAM
04274 # define YYLEX yylex (&yylval, YYLEX_PARAM)
04275 #else
04276 # define YYLEX yylex (&yylval)
04277 #endif
04278
04279
04280 #if YYDEBUG
04281
04282 # ifndef YYFPRINTF
04283 # include <stdio.h>
04284 # define YYFPRINTF fprintf
04285 # endif
04286
04287 # define YYDPRINTF(Args) \
04288 do { \
04289 if (yydebug) \
04290 YYFPRINTF Args; \
04291 } while (YYID (0))
04292
04293 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
04294 do { \
04295 if (yydebug) \
04296 { \
04297 YYFPRINTF (stderr, "%s ", Title); \
04298 yy_symbol_print (stderr, \
04299 Type, Value, parser); \
04300 YYFPRINTF (stderr, "\n"); \
04301 } \
04302 } while (YYID (0))
04303
04304
04305
04306
04307
04308
04309
04310 #if (defined __STDC__ || defined __C99__FUNC__ \
04311 || defined __cplusplus || defined _MSC_VER)
04312 static void
04313 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04314 #else
04315 static void
04316 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
04317 FILE *yyoutput;
04318 int yytype;
04319 YYSTYPE const * const yyvaluep;
04320 struct parser_params *parser;
04321 #endif
04322 {
04323 if (!yyvaluep)
04324 return;
04325 YYUSE (parser);
04326 # ifdef YYPRINT
04327 if (yytype < YYNTOKENS)
04328 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
04329 # else
04330 YYUSE (yyoutput);
04331 # endif
04332 switch (yytype)
04333 {
04334 default:
04335 break;
04336 }
04337 }
04338
04339
04340
04341
04342
04343
04344 #if (defined __STDC__ || defined __C99__FUNC__ \
04345 || defined __cplusplus || defined _MSC_VER)
04346 static void
04347 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04348 #else
04349 static void
04350 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
04351 FILE *yyoutput;
04352 int yytype;
04353 YYSTYPE const * const yyvaluep;
04354 struct parser_params *parser;
04355 #endif
04356 {
04357 if (yytype < YYNTOKENS)
04358 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
04359 else
04360 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
04361
04362 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
04363 YYFPRINTF (yyoutput, ")");
04364 }
04365
04366
04367
04368
04369
04370
04371 #if (defined __STDC__ || defined __C99__FUNC__ \
04372 || defined __cplusplus || defined _MSC_VER)
04373 static void
04374 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
04375 #else
04376 static void
04377 yy_stack_print (yybottom, yytop)
04378 yytype_int16 *yybottom;
04379 yytype_int16 *yytop;
04380 #endif
04381 {
04382 YYFPRINTF (stderr, "Stack now");
04383 for (; yybottom <= yytop; yybottom++)
04384 {
04385 int yybot = *yybottom;
04386 YYFPRINTF (stderr, " %d", yybot);
04387 }
04388 YYFPRINTF (stderr, "\n");
04389 }
04390
04391 # define YY_STACK_PRINT(Bottom, Top) \
04392 do { \
04393 if (yydebug) \
04394 yy_stack_print ((Bottom), (Top)); \
04395 } while (YYID (0))
04396
04397
04398
04399
04400
04401
04402 #if (defined __STDC__ || defined __C99__FUNC__ \
04403 || defined __cplusplus || defined _MSC_VER)
04404 static void
04405 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
04406 #else
04407 static void
04408 yy_reduce_print (yyvsp, yyrule, parser)
04409 YYSTYPE *yyvsp;
04410 int yyrule;
04411 struct parser_params *parser;
04412 #endif
04413 {
04414 int yynrhs = yyr2[yyrule];
04415 int yyi;
04416 unsigned long int yylno = yyrline[yyrule];
04417 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
04418 yyrule - 1, yylno);
04419
04420 for (yyi = 0; yyi < yynrhs; yyi++)
04421 {
04422 YYFPRINTF (stderr, " $%d = ", yyi + 1);
04423 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
04424 &(yyvsp[(yyi + 1) - (yynrhs)])
04425 , parser);
04426 YYFPRINTF (stderr, "\n");
04427 }
04428 }
04429
04430 # define YY_REDUCE_PRINT(Rule) \
04431 do { \
04432 if (yydebug) \
04433 yy_reduce_print (yyvsp, Rule, parser); \
04434 } while (YYID (0))
04435
04436
04437
04438 #ifndef yydebug
04439 int yydebug;
04440 #endif
04441 #else
04442 # define YYDPRINTF(Args)
04443 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
04444 # define YY_STACK_PRINT(Bottom, Top)
04445 # define YY_REDUCE_PRINT(Rule)
04446 #endif
04447
04448
04449
04450 #ifndef YYINITDEPTH
04451 # define YYINITDEPTH 200
04452 #endif
04453
04454
04455
04456
04457
04458
04459
04460
04461 #ifndef YYMAXDEPTH
04462 # define YYMAXDEPTH 10000
04463 #endif
04464
04465
04466 #if YYERROR_VERBOSE
04467
04468 # ifndef yystrlen
04469 # if defined __GLIBC__ && defined _STRING_H
04470 # define yystrlen strlen
04471 # else
04472
04473 #if (defined __STDC__ || defined __C99__FUNC__ \
04474 || defined __cplusplus || defined _MSC_VER)
04475 static YYSIZE_T
04476 yystrlen (const char *yystr)
04477 #else
04478 static YYSIZE_T
04479 yystrlen (yystr)
04480 const char *yystr;
04481 #endif
04482 {
04483 YYSIZE_T yylen;
04484 for (yylen = 0; yystr[yylen]; yylen++)
04485 continue;
04486 return yylen;
04487 }
04488 # endif
04489 # endif
04490
04491 # ifndef yystpcpy
04492 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
04493 # define yystpcpy stpcpy
04494 # else
04495
04496
04497 #if (defined __STDC__ || defined __C99__FUNC__ \
04498 || defined __cplusplus || defined _MSC_VER)
04499 static char *
04500 yystpcpy (char *yydest, const char *yysrc)
04501 #else
04502 static char *
04503 yystpcpy (yydest, yysrc)
04504 char *yydest;
04505 const char *yysrc;
04506 #endif
04507 {
04508 char *yyd = yydest;
04509 const char *yys = yysrc;
04510
04511 while ((*yyd++ = *yys++) != '\0')
04512 continue;
04513
04514 return yyd - 1;
04515 }
04516 # endif
04517 # endif
04518
04519 # ifndef yytnamerr
04520
04521
04522
04523
04524
04525
04526
04527 static YYSIZE_T
04528 yytnamerr (char *yyres, const char *yystr)
04529 {
04530 if (*yystr == '"')
04531 {
04532 YYSIZE_T yyn = 0;
04533 char const *yyp = yystr;
04534
04535 for (;;)
04536 switch (*++yyp)
04537 {
04538 case '\'':
04539 case ',':
04540 goto do_not_strip_quotes;
04541
04542 case '\\':
04543 if (*++yyp != '\\')
04544 goto do_not_strip_quotes;
04545
04546 default:
04547 if (yyres)
04548 yyres[yyn] = *yyp;
04549 yyn++;
04550 break;
04551
04552 case '"':
04553 if (yyres)
04554 yyres[yyn] = '\0';
04555 return yyn;
04556 }
04557 do_not_strip_quotes: ;
04558 }
04559
04560 if (! yyres)
04561 return yystrlen (yystr);
04562
04563 return yystpcpy (yyres, yystr) - yyres;
04564 }
04565 # endif
04566
04567
04568
04569
04570
04571
04572
04573
04574
04575 static int
04576 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
04577 yytype_int16 *yyssp, int yytoken)
04578 {
04579 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
04580 YYSIZE_T yysize = yysize0;
04581 YYSIZE_T yysize1;
04582 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
04583
04584 const char *yyformat = 0;
04585
04586 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
04587
04588
04589 int yycount = 0;
04590
04591
04592
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 if (yytoken != YYEMPTY)
04619 {
04620 int yyn = yypact[*yyssp];
04621 yyarg[yycount++] = yytname[yytoken];
04622 if (!yypact_value_is_default (yyn))
04623 {
04624
04625
04626
04627 int yyxbegin = yyn < 0 ? -yyn : 0;
04628
04629 int yychecklim = YYLAST - yyn + 1;
04630 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
04631 int yyx;
04632
04633 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
04634 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
04635 && !yytable_value_is_error (yytable[yyx + yyn]))
04636 {
04637 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
04638 {
04639 yycount = 1;
04640 yysize = yysize0;
04641 break;
04642 }
04643 yyarg[yycount++] = yytname[yyx];
04644 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
04645 if (! (yysize <= yysize1
04646 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
04647 return 2;
04648 yysize = yysize1;
04649 }
04650 }
04651 }
04652
04653 switch (yycount)
04654 {
04655 # define YYCASE_(N, S) \
04656 case N: \
04657 yyformat = S; \
04658 break
04659 YYCASE_(0, YY_("syntax error"));
04660 YYCASE_(1, YY_("syntax error, unexpected %s"));
04661 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
04662 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
04663 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
04664 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
04665 # undef YYCASE_
04666 }
04667
04668 yysize1 = yysize + yystrlen (yyformat);
04669 if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
04670 return 2;
04671 yysize = yysize1;
04672
04673 if (*yymsg_alloc < yysize)
04674 {
04675 *yymsg_alloc = 2 * yysize;
04676 if (! (yysize <= *yymsg_alloc
04677 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
04678 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
04679 return 1;
04680 }
04681
04682
04683
04684
04685 {
04686 char *yyp = *yymsg;
04687 int yyi = 0;
04688 while ((*yyp = *yyformat) != '\0')
04689 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
04690 {
04691 yyp += yytnamerr (yyp, yyarg[yyi++]);
04692 yyformat += 2;
04693 }
04694 else
04695 {
04696 yyp++;
04697 yyformat++;
04698 }
04699 }
04700 return 0;
04701 }
04702 #endif
04703
04704
04705
04706
04707
04708
04709 #if (defined __STDC__ || defined __C99__FUNC__ \
04710 || defined __cplusplus || defined _MSC_VER)
04711 static void
04712 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
04713 #else
04714 static void
04715 yydestruct (yymsg, yytype, yyvaluep, parser)
04716 const char *yymsg;
04717 int yytype;
04718 YYSTYPE *yyvaluep;
04719 struct parser_params *parser;
04720 #endif
04721 {
04722 YYUSE (yyvaluep);
04723 YYUSE (parser);
04724
04725 if (!yymsg)
04726 yymsg = "Deleting";
04727 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
04728
04729 switch (yytype)
04730 {
04731
04732 default:
04733 break;
04734 }
04735 }
04736
04737
04738
04739 #ifdef YYPARSE_PARAM
04740 #if defined __STDC__ || defined __cplusplus
04741 int yyparse (void *YYPARSE_PARAM);
04742 #else
04743 int yyparse ();
04744 #endif
04745 #else
04746 #if defined __STDC__ || defined __cplusplus
04747 int yyparse (struct parser_params *parser);
04748 #else
04749 int yyparse ();
04750 #endif
04751 #endif
04752
04753
04754
04755
04756
04757
04758 #ifdef YYPARSE_PARAM
04759 #if (defined __STDC__ || defined __C99__FUNC__ \
04760 || defined __cplusplus || defined _MSC_VER)
04761 int
04762 yyparse (void *YYPARSE_PARAM)
04763 #else
04764 int
04765 yyparse (YYPARSE_PARAM)
04766 void *YYPARSE_PARAM;
04767 #endif
04768 #else
04769 #if (defined __STDC__ || defined __C99__FUNC__ \
04770 || defined __cplusplus || defined _MSC_VER)
04771 int
04772 yyparse (struct parser_params *parser)
04773 #else
04774 int
04775 yyparse (parser)
04776 struct parser_params *parser;
04777 #endif
04778 #endif
04779 {
04780
04781 int yychar;
04782
04783
04784 YYSTYPE yylval;
04785
04786
04787 int yynerrs;
04788
04789 int yystate;
04790
04791 int yyerrstatus;
04792
04793
04794
04795
04796
04797
04798
04799
04800
04801 yytype_int16 yyssa[YYINITDEPTH];
04802 yytype_int16 *yyss;
04803 yytype_int16 *yyssp;
04804
04805
04806 YYSTYPE yyvsa[YYINITDEPTH];
04807 YYSTYPE *yyvs;
04808 YYSTYPE *yyvsp;
04809
04810 YYSIZE_T yystacksize;
04811
04812 int yyn;
04813 int yyresult;
04814
04815 int yytoken;
04816
04817
04818 YYSTYPE yyval;
04819
04820 #if YYERROR_VERBOSE
04821
04822 char yymsgbuf[128];
04823 char *yymsg = yymsgbuf;
04824 YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
04825 #endif
04826
04827 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
04828
04829
04830
04831 int yylen = 0;
04832
04833 yytoken = 0;
04834 yyss = yyssa;
04835 yyvs = yyvsa;
04836 yystacksize = YYINITDEPTH;
04837
04838 YYDPRINTF ((stderr, "Starting parse\n"));
04839
04840 yystate = 0;
04841 yyerrstatus = 0;
04842 yynerrs = 0;
04843 yychar = YYEMPTY;
04844
04845
04846
04847
04848
04849 yyssp = yyss;
04850 yyvsp = yyvs;
04851
04852 goto yysetstate;
04853
04854
04855
04856
04857 yynewstate:
04858
04859
04860 yyssp++;
04861
04862 yysetstate:
04863 *yyssp = yystate;
04864
04865 if (yyss + yystacksize - 1 <= yyssp)
04866 {
04867
04868 YYSIZE_T yysize = yyssp - yyss + 1;
04869
04870 #ifdef yyoverflow
04871 {
04872
04873
04874
04875 YYSTYPE *yyvs1 = yyvs;
04876 yytype_int16 *yyss1 = yyss;
04877
04878
04879
04880
04881
04882 yyoverflow (YY_("memory exhausted"),
04883 &yyss1, yysize * sizeof (*yyssp),
04884 &yyvs1, yysize * sizeof (*yyvsp),
04885 &yystacksize);
04886
04887 yyss = yyss1;
04888 yyvs = yyvs1;
04889 }
04890 #else
04891 # ifndef YYSTACK_RELOCATE
04892 goto yyexhaustedlab;
04893 # else
04894
04895 if (YYMAXDEPTH <= yystacksize)
04896 goto yyexhaustedlab;
04897 yystacksize *= 2;
04898 if (YYMAXDEPTH < yystacksize)
04899 yystacksize = YYMAXDEPTH;
04900
04901 {
04902 yytype_int16 *yyss1 = yyss;
04903 union yyalloc *yyptr =
04904 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
04905 if (! yyptr)
04906 goto yyexhaustedlab;
04907 YYSTACK_RELOCATE (yyss_alloc, yyss);
04908 YYSTACK_RELOCATE (yyvs_alloc, yyvs);
04909 # undef YYSTACK_RELOCATE
04910 if (yyss1 != yyssa)
04911 YYSTACK_FREE (yyss1);
04912 }
04913 # endif
04914 #endif
04915
04916 yyssp = yyss + yysize - 1;
04917 yyvsp = yyvs + yysize - 1;
04918
04919 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
04920 (unsigned long int) yystacksize));
04921
04922 if (yyss + yystacksize - 1 <= yyssp)
04923 YYABORT;
04924 }
04925
04926 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
04927
04928 if (yystate == YYFINAL)
04929 YYACCEPT;
04930
04931 goto yybackup;
04932
04933
04934
04935
04936 yybackup:
04937
04938
04939
04940
04941
04942 yyn = yypact[yystate];
04943 if (yypact_value_is_default (yyn))
04944 goto yydefault;
04945
04946
04947
04948
04949 if (yychar == YYEMPTY)
04950 {
04951 YYDPRINTF ((stderr, "Reading a token: "));
04952 yychar = YYLEX;
04953 }
04954
04955 if (yychar <= YYEOF)
04956 {
04957 yychar = yytoken = YYEOF;
04958 YYDPRINTF ((stderr, "Now at end of input.\n"));
04959 }
04960 else
04961 {
04962 yytoken = YYTRANSLATE (yychar);
04963 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
04964 }
04965
04966
04967
04968 yyn += yytoken;
04969 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
04970 goto yydefault;
04971 yyn = yytable[yyn];
04972 if (yyn <= 0)
04973 {
04974 if (yytable_value_is_error (yyn))
04975 goto yyerrlab;
04976 yyn = -yyn;
04977 goto yyreduce;
04978 }
04979
04980
04981
04982 if (yyerrstatus)
04983 yyerrstatus--;
04984
04985
04986 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
04987
04988
04989 yychar = YYEMPTY;
04990
04991 yystate = yyn;
04992 *++yyvsp = yylval;
04993
04994 goto yynewstate;
04995
04996
04997
04998
04999
05000 yydefault:
05001 yyn = yydefact[yystate];
05002 if (yyn == 0)
05003 goto yyerrlab;
05004 goto yyreduce;
05005
05006
05007
05008
05009
05010 yyreduce:
05011
05012 yylen = yyr2[yyn];
05013
05014
05015
05016
05017
05018
05019
05020
05021
05022 yyval = yyvsp[1-yylen];
05023
05024
05025 YY_REDUCE_PRINT (yyn);
05026 switch (yyn)
05027 {
05028 case 2:
05029
05030
05031 #line 782 "parse.y"
05032 {
05033 lex_state = EXPR_BEG;
05034
05035 local_push(compile_for_eval || rb_parse_in_main());
05036
05037
05038
05039 }
05040 break;
05041
05042 case 3:
05043
05044
05045 #line 791 "parse.y"
05046 {
05047
05048 if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
05049
05050 if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
05051 else {
05052 NODE *node = (yyvsp[(2) - (2)].node);
05053 while (node->nd_next) {
05054 node = node->nd_next;
05055 }
05056 void_expr(node->nd_head);
05057 }
05058 }
05059 ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
05060
05061
05062
05063
05064 local_pop();
05065 }
05066 break;
05067
05068 case 4:
05069
05070
05071 #line 814 "parse.y"
05072 {
05073
05074 void_stmts((yyvsp[(1) - (2)].node));
05075 fixup_nodes(&deferred_nodes);
05076
05077
05078 (yyval.node) = (yyvsp[(1) - (2)].node);
05079 }
05080 break;
05081
05082 case 5:
05083
05084
05085 #line 825 "parse.y"
05086 {
05087
05088 (yyval.node) = NEW_BEGIN(0);
05089
05090
05091
05092
05093 }
05094 break;
05095
05096 case 6:
05097
05098
05099 #line 834 "parse.y"
05100 {
05101
05102 (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05103
05104
05105
05106 }
05107 break;
05108
05109 case 7:
05110
05111
05112 #line 842 "parse.y"
05113 {
05114
05115 (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05116
05117
05118
05119 }
05120 break;
05121
05122 case 8:
05123
05124
05125 #line 850 "parse.y"
05126 {
05127 (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05128 }
05129 break;
05130
05131 case 10:
05132
05133
05134 #line 857 "parse.y"
05135 {
05136 if (in_def || in_single) {
05137 yyerror("BEGIN in method");
05138 }
05139
05140
05141
05142
05143 }
05144 break;
05145
05146 case 11:
05147
05148
05149 #line 867 "parse.y"
05150 {
05151
05152 ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
05153 (yyvsp[(4) - (5)].node));
05154
05155
05156 (yyval.node) = NEW_BEGIN(0);
05157
05158
05159
05160 }
05161 break;
05162
05163 case 12:
05164
05165
05166 #line 884 "parse.y"
05167 {
05168
05169 (yyval.node) = (yyvsp[(1) - (4)].node);
05170 if ((yyvsp[(2) - (4)].node)) {
05171 (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
05172 }
05173 else if ((yyvsp[(3) - (4)].node)) {
05174 rb_warn0("else without rescue is useless");
05175 (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
05176 }
05177 if ((yyvsp[(4) - (4)].node)) {
05178 if ((yyval.node)) {
05179 (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
05180 }
05181 else {
05182 (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
05183 }
05184 }
05185 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05186
05187
05188
05189
05190
05191
05192
05193 }
05194 break;
05195
05196 case 13:
05197
05198
05199 #line 914 "parse.y"
05200 {
05201
05202 void_stmts((yyvsp[(1) - (2)].node));
05203 fixup_nodes(&deferred_nodes);
05204
05205
05206 (yyval.node) = (yyvsp[(1) - (2)].node);
05207 }
05208 break;
05209
05210 case 14:
05211
05212
05213 #line 925 "parse.y"
05214 {
05215
05216 (yyval.node) = NEW_BEGIN(0);
05217
05218
05219
05220
05221 }
05222 break;
05223
05224 case 15:
05225
05226
05227 #line 934 "parse.y"
05228 {
05229
05230 (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05231
05232
05233
05234 }
05235 break;
05236
05237 case 16:
05238
05239
05240 #line 942 "parse.y"
05241 {
05242
05243 (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05244
05245
05246
05247 }
05248 break;
05249
05250 case 17:
05251
05252
05253 #line 950 "parse.y"
05254 {
05255 (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05256 }
05257 break;
05258
05259 case 18:
05260
05261
05262 #line 955 "parse.y"
05263 {lex_state = EXPR_FNAME;}
05264 break;
05265
05266 case 19:
05267
05268
05269 #line 956 "parse.y"
05270 {
05271
05272 (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
05273
05274
05275
05276 }
05277 break;
05278
05279 case 20:
05280
05281
05282 #line 964 "parse.y"
05283 {
05284
05285 (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
05286
05287
05288
05289 }
05290 break;
05291
05292 case 21:
05293
05294
05295 #line 972 "parse.y"
05296 {
05297
05298 char buf[2];
05299 buf[0] = '$';
05300 buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
05301 (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
05302
05303
05304
05305 }
05306 break;
05307
05308 case 22:
05309
05310
05311 #line 983 "parse.y"
05312 {
05313
05314 yyerror("can't make alias for the number variables");
05315 (yyval.node) = NEW_BEGIN(0);
05316
05317
05318
05319
05320 }
05321 break;
05322
05323 case 23:
05324
05325
05326 #line 993 "parse.y"
05327 {
05328
05329 (yyval.node) = (yyvsp[(2) - (2)].node);
05330
05331
05332
05333 }
05334 break;
05335
05336 case 24:
05337
05338
05339 #line 1001 "parse.y"
05340 {
05341
05342 (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05343 fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05344
05345
05346
05347 }
05348 break;
05349
05350 case 25:
05351
05352
05353 #line 1010 "parse.y"
05354 {
05355
05356 (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05357 fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05358
05359
05360
05361 }
05362 break;
05363
05364 case 26:
05365
05366
05367 #line 1019 "parse.y"
05368 {
05369
05370 if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05371 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05372 }
05373 else {
05374 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05375 }
05376
05377
05378
05379 }
05380 break;
05381
05382 case 27:
05383
05384
05385 #line 1032 "parse.y"
05386 {
05387
05388 if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05389 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05390 }
05391 else {
05392 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05393 }
05394
05395
05396
05397 }
05398 break;
05399
05400 case 28:
05401
05402
05403 #line 1045 "parse.y"
05404 {
05405
05406 NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
05407 (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
05408
05409
05410
05411 }
05412 break;
05413
05414 case 29:
05415
05416
05417 #line 1054 "parse.y"
05418 {
05419 if (in_def || in_single) {
05420 rb_warn0("END in method; use at_exit");
05421 }
05422
05423 (yyval.node) = NEW_POSTEXE(NEW_NODE(
05424 NODE_SCOPE, 0 , (yyvsp[(3) - (4)].node) , 0 ));
05425
05426
05427
05428 }
05429 break;
05430
05431 case 31:
05432
05433
05434 #line 1067 "parse.y"
05435 {
05436
05437 value_expr((yyvsp[(3) - (3)].node));
05438 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05439 (yyval.node) = (yyvsp[(1) - (3)].node);
05440
05441
05442
05443 }
05444 break;
05445
05446 case 32:
05447
05448
05449 #line 1077 "parse.y"
05450 {
05451
05452 value_expr((yyvsp[(3) - (3)].node));
05453 if ((yyvsp[(1) - (3)].node)) {
05454 ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
05455 if ((yyvsp[(2) - (3)].id) == tOROP) {
05456 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05457 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
05458 if (is_asgn_or_id(vid)) {
05459 (yyval.node)->nd_aid = vid;
05460 }
05461 }
05462 else if ((yyvsp[(2) - (3)].id) == tANDOP) {
05463 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05464 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
05465 }
05466 else {
05467 (yyval.node) = (yyvsp[(1) - (3)].node);
05468 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
05469 }
05470 }
05471 else {
05472 (yyval.node) = NEW_BEGIN(0);
05473 }
05474
05475
05476
05477 }
05478 break;
05479
05480 case 33:
05481
05482
05483 #line 1106 "parse.y"
05484 {
05485
05486 NODE *args;
05487
05488 value_expr((yyvsp[(6) - (6)].node));
05489 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
05490 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
05491 if ((yyvsp[(5) - (6)].id) == tOROP) {
05492 (yyvsp[(5) - (6)].id) = 0;
05493 }
05494 else if ((yyvsp[(5) - (6)].id) == tANDOP) {
05495 (yyvsp[(5) - (6)].id) = 1;
05496 }
05497 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
05498 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
05499
05500
05501
05502
05503 }
05504 break;
05505
05506 case 34:
05507
05508
05509 #line 1127 "parse.y"
05510 {
05511
05512 value_expr((yyvsp[(5) - (5)].node));
05513 if ((yyvsp[(4) - (5)].id) == tOROP) {
05514 (yyvsp[(4) - (5)].id) = 0;
05515 }
05516 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05517 (yyvsp[(4) - (5)].id) = 1;
05518 }
05519 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05520 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05521
05522
05523
05524
05525 }
05526 break;
05527
05528 case 35:
05529
05530
05531 #line 1144 "parse.y"
05532 {
05533
05534 value_expr((yyvsp[(5) - (5)].node));
05535 if ((yyvsp[(4) - (5)].id) == tOROP) {
05536 (yyvsp[(4) - (5)].id) = 0;
05537 }
05538 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05539 (yyvsp[(4) - (5)].id) = 1;
05540 }
05541 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05542 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05543
05544
05545
05546
05547 }
05548 break;
05549
05550 case 36:
05551
05552
05553 #line 1161 "parse.y"
05554 {
05555
05556 yyerror("constant re-assignment");
05557 (yyval.node) = 0;
05558
05559
05560
05561
05562
05563 }
05564 break;
05565
05566 case 37:
05567
05568
05569 #line 1172 "parse.y"
05570 {
05571
05572 value_expr((yyvsp[(5) - (5)].node));
05573 if ((yyvsp[(4) - (5)].id) == tOROP) {
05574 (yyvsp[(4) - (5)].id) = 0;
05575 }
05576 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05577 (yyvsp[(4) - (5)].id) = 1;
05578 }
05579 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05580 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05581
05582
05583
05584
05585 }
05586 break;
05587
05588 case 38:
05589
05590
05591 #line 1189 "parse.y"
05592 {
05593
05594 rb_backref_error((yyvsp[(1) - (3)].node));
05595 (yyval.node) = NEW_BEGIN(0);
05596
05597
05598
05599
05600 }
05601 break;
05602
05603 case 39:
05604
05605
05606 #line 1199 "parse.y"
05607 {
05608
05609 value_expr((yyvsp[(3) - (3)].node));
05610 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05611
05612
05613
05614 }
05615 break;
05616
05617 case 40:
05618
05619
05620 #line 1208 "parse.y"
05621 {
05622
05623 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05624 (yyval.node) = (yyvsp[(1) - (3)].node);
05625
05626
05627
05628 }
05629 break;
05630
05631 case 41:
05632
05633
05634 #line 1217 "parse.y"
05635 {
05636
05637 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05638 (yyval.node) = (yyvsp[(1) - (3)].node);
05639
05640
05641
05642 }
05643 break;
05644
05645 case 43:
05646
05647
05648 #line 1229 "parse.y"
05649 {
05650
05651 value_expr((yyvsp[(3) - (3)].node));
05652 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05653
05654
05655
05656 }
05657 break;
05658
05659 case 44:
05660
05661
05662 #line 1238 "parse.y"
05663 {
05664
05665 value_expr((yyvsp[(3) - (3)].node));
05666 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05667
05668
05669
05670 }
05671 break;
05672
05673 case 46:
05674
05675
05676 #line 1251 "parse.y"
05677 {
05678
05679 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05680
05681
05682
05683 }
05684 break;
05685
05686 case 47:
05687
05688
05689 #line 1259 "parse.y"
05690 {
05691
05692 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05693
05694
05695
05696 }
05697 break;
05698
05699 case 48:
05700
05701
05702 #line 1267 "parse.y"
05703 {
05704
05705 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
05706
05707
05708
05709 }
05710 break;
05711
05712 case 49:
05713
05714
05715 #line 1275 "parse.y"
05716 {
05717
05718 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
05719
05720
05721
05722 }
05723 break;
05724
05725 case 51:
05726
05727
05728 #line 1286 "parse.y"
05729 {
05730
05731 value_expr((yyvsp[(1) - (1)].node));
05732 (yyval.node) = (yyvsp[(1) - (1)].node);
05733 if (!(yyval.node)) (yyval.node) = NEW_NIL();
05734
05735
05736
05737 }
05738 break;
05739
05740 case 55:
05741
05742
05743 #line 1303 "parse.y"
05744 {
05745
05746 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05747
05748
05749
05750
05751 }
05752 break;
05753
05754 case 56:
05755
05756
05757 #line 1312 "parse.y"
05758 {
05759
05760 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05761
05762
05763
05764
05765 }
05766 break;
05767
05768 case 57:
05769
05770
05771 #line 1323 "parse.y"
05772 {
05773 (yyvsp[(1) - (1)].vars) = dyna_push();
05774
05775 (yyval.num) = ruby_sourceline;
05776
05777
05778 }
05779 break;
05780
05781 case 58:
05782
05783
05784 #line 1333 "parse.y"
05785 {
05786
05787 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
05788 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
05789
05790
05791
05792 dyna_pop((yyvsp[(1) - (5)].vars));
05793 }
05794 break;
05795
05796 case 59:
05797
05798
05799 #line 1345 "parse.y"
05800 {
05801
05802 (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
05803 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05804
05805
05806
05807 }
05808 break;
05809
05810 case 60:
05811
05812
05813 #line 1354 "parse.y"
05814 {
05815
05816 block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
05817 (yyvsp[(3) - (3)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].node));
05818 (yyval.node) = (yyvsp[(3) - (3)].node);
05819 fixpos((yyval.node), (yyvsp[(2) - (3)].node));
05820
05821
05822
05823
05824 }
05825 break;
05826
05827 case 61:
05828
05829
05830 #line 1366 "parse.y"
05831 {
05832
05833 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05834 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05835
05836
05837
05838 }
05839 break;
05840
05841 case 62:
05842
05843
05844 #line 1375 "parse.y"
05845 {
05846
05847 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05848 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05849 (yyval.node) = (yyvsp[(5) - (5)].node);
05850 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05851
05852
05853
05854
05855 }
05856 break;
05857
05858 case 63:
05859
05860
05861 #line 1387 "parse.y"
05862 {
05863
05864 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05865 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05866
05867
05868
05869 }
05870 break;
05871
05872 case 64:
05873
05874
05875 #line 1396 "parse.y"
05876 {
05877
05878 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05879 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05880 (yyval.node) = (yyvsp[(5) - (5)].node);
05881 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05882
05883
05884
05885
05886 }
05887 break;
05888
05889 case 65:
05890
05891
05892 #line 1408 "parse.y"
05893 {
05894
05895 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
05896 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05897
05898
05899
05900 }
05901 break;
05902
05903 case 66:
05904
05905
05906 #line 1417 "parse.y"
05907 {
05908
05909 (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
05910 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05911
05912
05913
05914 }
05915 break;
05916
05917 case 67:
05918
05919
05920 #line 1426 "parse.y"
05921 {
05922
05923 (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
05924
05925
05926
05927 }
05928 break;
05929
05930 case 68:
05931
05932
05933 #line 1434 "parse.y"
05934 {
05935
05936 (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
05937
05938
05939
05940 }
05941 break;
05942
05943 case 69:
05944
05945
05946 #line 1442 "parse.y"
05947 {
05948
05949 (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
05950
05951
05952
05953 }
05954 break;
05955
05956 case 71:
05957
05958
05959 #line 1453 "parse.y"
05960 {
05961
05962 (yyval.node) = (yyvsp[(2) - (3)].node);
05963
05964
05965
05966 }
05967 break;
05968
05969 case 73:
05970
05971
05972 #line 1464 "parse.y"
05973 {
05974
05975 (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
05976
05977
05978
05979 }
05980 break;
05981
05982 case 74:
05983
05984
05985 #line 1474 "parse.y"
05986 {
05987
05988 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
05989
05990
05991
05992 }
05993 break;
05994
05995 case 75:
05996
05997
05998 #line 1482 "parse.y"
05999 {
06000
06001 (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
06002
06003
06004
06005 }
06006 break;
06007
06008 case 76:
06009
06010
06011 #line 1490 "parse.y"
06012 {
06013
06014 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06015
06016
06017
06018 }
06019 break;
06020
06021 case 77:
06022
06023
06024 #line 1498 "parse.y"
06025 {
06026
06027 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
06028
06029
06030
06031
06032 }
06033 break;
06034
06035 case 78:
06036
06037
06038 #line 1507 "parse.y"
06039 {
06040
06041 (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
06042
06043
06044
06045 }
06046 break;
06047
06048 case 79:
06049
06050
06051 #line 1515 "parse.y"
06052 {
06053
06054 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
06055
06056
06057
06058
06059 }
06060 break;
06061
06062 case 80:
06063
06064
06065 #line 1524 "parse.y"
06066 {
06067
06068 (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
06069
06070
06071
06072 }
06073 break;
06074
06075 case 81:
06076
06077
06078 #line 1532 "parse.y"
06079 {
06080
06081 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
06082
06083
06084
06085
06086 }
06087 break;
06088
06089 case 82:
06090
06091
06092 #line 1541 "parse.y"
06093 {
06094
06095 (yyval.node) = NEW_MASGN(0, -1);
06096
06097
06098
06099 }
06100 break;
06101
06102 case 83:
06103
06104
06105 #line 1549 "parse.y"
06106 {
06107
06108 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
06109
06110
06111
06112
06113 }
06114 break;
06115
06116 case 85:
06117
06118
06119 #line 1561 "parse.y"
06120 {
06121
06122 (yyval.node) = (yyvsp[(2) - (3)].node);
06123
06124
06125
06126 }
06127 break;
06128
06129 case 86:
06130
06131
06132 #line 1571 "parse.y"
06133 {
06134
06135 (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
06136
06137
06138
06139 }
06140 break;
06141
06142 case 87:
06143
06144
06145 #line 1579 "parse.y"
06146 {
06147
06148 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
06149
06150
06151
06152 }
06153 break;
06154
06155 case 88:
06156
06157
06158 #line 1589 "parse.y"
06159 {
06160
06161 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
06162
06163
06164
06165 }
06166 break;
06167
06168 case 89:
06169
06170
06171 #line 1597 "parse.y"
06172 {
06173
06174 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06175
06176
06177
06178 }
06179 break;
06180
06181 case 90:
06182
06183
06184 #line 1607 "parse.y"
06185 {
06186 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06187 }
06188 break;
06189
06190 case 91:
06191
06192
06193 #line 1611 "parse.y"
06194 {
06195 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06196 }
06197 break;
06198
06199 case 92:
06200
06201
06202 #line 1615 "parse.y"
06203 {
06204
06205 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06206
06207
06208
06209 }
06210 break;
06211
06212 case 93:
06213
06214
06215 #line 1623 "parse.y"
06216 {
06217
06218 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06219
06220
06221
06222 }
06223 break;
06224
06225 case 94:
06226
06227
06228 #line 1631 "parse.y"
06229 {
06230
06231 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06232
06233
06234
06235 }
06236 break;
06237
06238 case 95:
06239
06240
06241 #line 1639 "parse.y"
06242 {
06243
06244 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06245
06246
06247
06248 }
06249 break;
06250
06251 case 96:
06252
06253
06254 #line 1647 "parse.y"
06255 {
06256
06257 if (in_def || in_single)
06258 yyerror("dynamic constant assignment");
06259 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06260
06261
06262
06263
06264
06265 }
06266 break;
06267
06268 case 97:
06269
06270
06271 #line 1659 "parse.y"
06272 {
06273
06274 if (in_def || in_single)
06275 yyerror("dynamic constant assignment");
06276 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06277
06278
06279
06280 }
06281 break;
06282
06283 case 98:
06284
06285
06286 #line 1669 "parse.y"
06287 {
06288
06289 rb_backref_error((yyvsp[(1) - (1)].node));
06290 (yyval.node) = NEW_BEGIN(0);
06291
06292
06293
06294
06295 }
06296 break;
06297
06298 case 99:
06299
06300
06301 #line 1681 "parse.y"
06302 {
06303 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06304
06305 if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06306
06307
06308
06309 }
06310 break;
06311
06312 case 100:
06313
06314
06315 #line 1690 "parse.y"
06316 {
06317 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06318
06319 if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06320
06321
06322
06323 }
06324 break;
06325
06326 case 101:
06327
06328
06329 #line 1699 "parse.y"
06330 {
06331
06332 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06333
06334
06335
06336 }
06337 break;
06338
06339 case 102:
06340
06341
06342 #line 1707 "parse.y"
06343 {
06344
06345 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06346
06347
06348
06349 }
06350 break;
06351
06352 case 103:
06353
06354
06355 #line 1715 "parse.y"
06356 {
06357
06358 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06359
06360
06361
06362 }
06363 break;
06364
06365 case 104:
06366
06367
06368 #line 1723 "parse.y"
06369 {
06370
06371 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06372
06373
06374
06375 }
06376 break;
06377
06378 case 105:
06379
06380
06381 #line 1731 "parse.y"
06382 {
06383
06384 if (in_def || in_single)
06385 yyerror("dynamic constant assignment");
06386 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06387
06388
06389
06390
06391
06392
06393 }
06394 break;
06395
06396 case 106:
06397
06398
06399 #line 1744 "parse.y"
06400 {
06401
06402 if (in_def || in_single)
06403 yyerror("dynamic constant assignment");
06404 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06405
06406
06407
06408
06409
06410
06411 }
06412 break;
06413
06414 case 107:
06415
06416
06417 #line 1757 "parse.y"
06418 {
06419
06420 rb_backref_error((yyvsp[(1) - (1)].node));
06421 (yyval.node) = NEW_BEGIN(0);
06422
06423
06424
06425 }
06426 break;
06427
06428 case 108:
06429
06430
06431 #line 1768 "parse.y"
06432 {
06433
06434 yyerror("class/module name must be CONSTANT");
06435
06436
06437
06438 }
06439 break;
06440
06441 case 110:
06442
06443
06444 #line 1779 "parse.y"
06445 {
06446
06447 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
06448
06449
06450
06451 }
06452 break;
06453
06454 case 111:
06455
06456
06457 #line 1787 "parse.y"
06458 {
06459
06460 (yyval.node) = NEW_COLON2(0, (yyval.node));
06461
06462
06463
06464 }
06465 break;
06466
06467 case 112:
06468
06469
06470 #line 1795 "parse.y"
06471 {
06472
06473 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06474
06475
06476
06477 }
06478 break;
06479
06480 case 116:
06481
06482
06483 #line 1808 "parse.y"
06484 {
06485 lex_state = EXPR_ENDFN;
06486 (yyval.id) = (yyvsp[(1) - (1)].id);
06487 }
06488 break;
06489
06490 case 117:
06491
06492
06493 #line 1813 "parse.y"
06494 {
06495 lex_state = EXPR_ENDFN;
06496
06497 (yyval.id) = (yyvsp[(1) - (1)].id);
06498
06499
06500
06501 }
06502 break;
06503
06504 case 120:
06505
06506
06507 #line 1828 "parse.y"
06508 {
06509
06510 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
06511
06512
06513
06514 }
06515 break;
06516
06517 case 122:
06518
06519
06520 #line 1839 "parse.y"
06521 {
06522
06523 (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
06524
06525
06526
06527 }
06528 break;
06529
06530 case 123:
06531
06532
06533 #line 1846 "parse.y"
06534 {lex_state = EXPR_FNAME;}
06535 break;
06536
06537 case 124:
06538
06539
06540 #line 1847 "parse.y"
06541 {
06542
06543 (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
06544
06545
06546
06547 }
06548 break;
06549
06550 case 125:
06551
06552
06553 #line 1856 "parse.y"
06554 { ifndef_ripper((yyval.id) = '|'); }
06555 break;
06556
06557 case 126:
06558
06559
06560 #line 1857 "parse.y"
06561 { ifndef_ripper((yyval.id) = '^'); }
06562 break;
06563
06564 case 127:
06565
06566
06567 #line 1858 "parse.y"
06568 { ifndef_ripper((yyval.id) = '&'); }
06569 break;
06570
06571 case 128:
06572
06573
06574 #line 1859 "parse.y"
06575 { ifndef_ripper((yyval.id) = tCMP); }
06576 break;
06577
06578 case 129:
06579
06580
06581 #line 1860 "parse.y"
06582 { ifndef_ripper((yyval.id) = tEQ); }
06583 break;
06584
06585 case 130:
06586
06587
06588 #line 1861 "parse.y"
06589 { ifndef_ripper((yyval.id) = tEQQ); }
06590 break;
06591
06592 case 131:
06593
06594
06595 #line 1862 "parse.y"
06596 { ifndef_ripper((yyval.id) = tMATCH); }
06597 break;
06598
06599 case 132:
06600
06601
06602 #line 1863 "parse.y"
06603 { ifndef_ripper((yyval.id) = tNMATCH); }
06604 break;
06605
06606 case 133:
06607
06608
06609 #line 1864 "parse.y"
06610 { ifndef_ripper((yyval.id) = '>'); }
06611 break;
06612
06613 case 134:
06614
06615
06616 #line 1865 "parse.y"
06617 { ifndef_ripper((yyval.id) = tGEQ); }
06618 break;
06619
06620 case 135:
06621
06622
06623 #line 1866 "parse.y"
06624 { ifndef_ripper((yyval.id) = '<'); }
06625 break;
06626
06627 case 136:
06628
06629
06630 #line 1867 "parse.y"
06631 { ifndef_ripper((yyval.id) = tLEQ); }
06632 break;
06633
06634 case 137:
06635
06636
06637 #line 1868 "parse.y"
06638 { ifndef_ripper((yyval.id) = tNEQ); }
06639 break;
06640
06641 case 138:
06642
06643
06644 #line 1869 "parse.y"
06645 { ifndef_ripper((yyval.id) = tLSHFT); }
06646 break;
06647
06648 case 139:
06649
06650
06651 #line 1870 "parse.y"
06652 { ifndef_ripper((yyval.id) = tRSHFT); }
06653 break;
06654
06655 case 140:
06656
06657
06658 #line 1871 "parse.y"
06659 { ifndef_ripper((yyval.id) = '+'); }
06660 break;
06661
06662 case 141:
06663
06664
06665 #line 1872 "parse.y"
06666 { ifndef_ripper((yyval.id) = '-'); }
06667 break;
06668
06669 case 142:
06670
06671
06672 #line 1873 "parse.y"
06673 { ifndef_ripper((yyval.id) = '*'); }
06674 break;
06675
06676 case 143:
06677
06678
06679 #line 1874 "parse.y"
06680 { ifndef_ripper((yyval.id) = '*'); }
06681 break;
06682
06683 case 144:
06684
06685
06686 #line 1875 "parse.y"
06687 { ifndef_ripper((yyval.id) = '/'); }
06688 break;
06689
06690 case 145:
06691
06692
06693 #line 1876 "parse.y"
06694 { ifndef_ripper((yyval.id) = '%'); }
06695 break;
06696
06697 case 146:
06698
06699
06700 #line 1877 "parse.y"
06701 { ifndef_ripper((yyval.id) = tPOW); }
06702 break;
06703
06704 case 147:
06705
06706
06707 #line 1878 "parse.y"
06708 { ifndef_ripper((yyval.id) = '!'); }
06709 break;
06710
06711 case 148:
06712
06713
06714 #line 1879 "parse.y"
06715 { ifndef_ripper((yyval.id) = '~'); }
06716 break;
06717
06718 case 149:
06719
06720
06721 #line 1880 "parse.y"
06722 { ifndef_ripper((yyval.id) = tUPLUS); }
06723 break;
06724
06725 case 150:
06726
06727
06728 #line 1881 "parse.y"
06729 { ifndef_ripper((yyval.id) = tUMINUS); }
06730 break;
06731
06732 case 151:
06733
06734
06735 #line 1882 "parse.y"
06736 { ifndef_ripper((yyval.id) = tAREF); }
06737 break;
06738
06739 case 152:
06740
06741
06742 #line 1883 "parse.y"
06743 { ifndef_ripper((yyval.id) = tASET); }
06744 break;
06745
06746 case 153:
06747
06748
06749 #line 1884 "parse.y"
06750 { ifndef_ripper((yyval.id) = '`'); }
06751 break;
06752
06753 case 195:
06754
06755
06756 #line 1902 "parse.y"
06757 {
06758
06759 value_expr((yyvsp[(3) - (3)].node));
06760 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06761
06762
06763
06764 }
06765 break;
06766
06767 case 196:
06768
06769
06770 #line 1911 "parse.y"
06771 {
06772
06773 value_expr((yyvsp[(3) - (5)].node));
06774 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06775 (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
06776
06777
06778
06779 }
06780 break;
06781
06782 case 197:
06783
06784
06785 #line 1921 "parse.y"
06786 {
06787
06788 value_expr((yyvsp[(3) - (3)].node));
06789 if ((yyvsp[(1) - (3)].node)) {
06790 ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
06791 if ((yyvsp[(2) - (3)].id) == tOROP) {
06792 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06793 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
06794 if (is_asgn_or_id(vid)) {
06795 (yyval.node)->nd_aid = vid;
06796 }
06797 }
06798 else if ((yyvsp[(2) - (3)].id) == tANDOP) {
06799 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06800 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
06801 }
06802 else {
06803 (yyval.node) = (yyvsp[(1) - (3)].node);
06804 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
06805 }
06806 }
06807 else {
06808 (yyval.node) = NEW_BEGIN(0);
06809 }
06810
06811
06812
06813 }
06814 break;
06815
06816 case 198:
06817
06818
06819 #line 1950 "parse.y"
06820 {
06821
06822 value_expr((yyvsp[(3) - (5)].node));
06823 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06824 if ((yyvsp[(1) - (5)].node)) {
06825 ID vid = (yyvsp[(1) - (5)].node)->nd_vid;
06826 if ((yyvsp[(2) - (5)].id) == tOROP) {
06827 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06828 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (5)].node));
06829 if (is_asgn_or_id(vid)) {
06830 (yyval.node)->nd_aid = vid;
06831 }
06832 }
06833 else if ((yyvsp[(2) - (5)].id) == tANDOP) {
06834 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06835 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (5)].node));
06836 }
06837 else {
06838 (yyval.node) = (yyvsp[(1) - (5)].node);
06839 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (5)].id), NEW_LIST((yyvsp[(3) - (5)].node)));
06840 }
06841 }
06842 else {
06843 (yyval.node) = NEW_BEGIN(0);
06844 }
06845
06846
06847
06848
06849 }
06850 break;
06851
06852 case 199:
06853
06854
06855 #line 1981 "parse.y"
06856 {
06857
06858 NODE *args;
06859
06860 value_expr((yyvsp[(6) - (6)].node));
06861 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
06862 if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
06863 args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06864 }
06865 else {
06866 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06867 }
06868 if ((yyvsp[(5) - (6)].id) == tOROP) {
06869 (yyvsp[(5) - (6)].id) = 0;
06870 }
06871 else if ((yyvsp[(5) - (6)].id) == tANDOP) {
06872 (yyvsp[(5) - (6)].id) = 1;
06873 }
06874 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
06875 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
06876
06877
06878
06879
06880 }
06881 break;
06882
06883 case 200:
06884
06885
06886 #line 2007 "parse.y"
06887 {
06888
06889 value_expr((yyvsp[(5) - (5)].node));
06890 if ((yyvsp[(4) - (5)].id) == tOROP) {
06891 (yyvsp[(4) - (5)].id) = 0;
06892 }
06893 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06894 (yyvsp[(4) - (5)].id) = 1;
06895 }
06896 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06897 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06898
06899
06900
06901
06902 }
06903 break;
06904
06905 case 201:
06906
06907
06908 #line 2024 "parse.y"
06909 {
06910
06911 value_expr((yyvsp[(5) - (5)].node));
06912 if ((yyvsp[(4) - (5)].id) == tOROP) {
06913 (yyvsp[(4) - (5)].id) = 0;
06914 }
06915 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06916 (yyvsp[(4) - (5)].id) = 1;
06917 }
06918 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06919 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06920
06921
06922
06923
06924 }
06925 break;
06926
06927 case 202:
06928
06929
06930 #line 2041 "parse.y"
06931 {
06932
06933 value_expr((yyvsp[(5) - (5)].node));
06934 if ((yyvsp[(4) - (5)].id) == tOROP) {
06935 (yyvsp[(4) - (5)].id) = 0;
06936 }
06937 else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06938 (yyvsp[(4) - (5)].id) = 1;
06939 }
06940 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06941 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06942
06943
06944
06945
06946 }
06947 break;
06948
06949 case 203:
06950
06951
06952 #line 2058 "parse.y"
06953 {
06954
06955 yyerror("constant re-assignment");
06956 (yyval.node) = NEW_BEGIN(0);
06957
06958
06959
06960
06961
06962 }
06963 break;
06964
06965 case 204:
06966
06967
06968 #line 2069 "parse.y"
06969 {
06970
06971 yyerror("constant re-assignment");
06972 (yyval.node) = NEW_BEGIN(0);
06973
06974
06975
06976
06977
06978 }
06979 break;
06980
06981 case 205:
06982
06983
06984 #line 2080 "parse.y"
06985 {
06986
06987 rb_backref_error((yyvsp[(1) - (3)].node));
06988 (yyval.node) = NEW_BEGIN(0);
06989
06990
06991
06992
06993
06994 }
06995 break;
06996
06997 case 206:
06998
06999
07000 #line 2091 "parse.y"
07001 {
07002
07003 value_expr((yyvsp[(1) - (3)].node));
07004 value_expr((yyvsp[(3) - (3)].node));
07005 (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07006 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
07007 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
07008 deferred_nodes = list_append(deferred_nodes, (yyval.node));
07009 }
07010
07011
07012
07013 }
07014 break;
07015
07016 case 207:
07017
07018
07019 #line 2105 "parse.y"
07020 {
07021
07022 value_expr((yyvsp[(1) - (3)].node));
07023 value_expr((yyvsp[(3) - (3)].node));
07024 (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07025 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
07026 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
07027 deferred_nodes = list_append(deferred_nodes, (yyval.node));
07028 }
07029
07030
07031
07032 }
07033 break;
07034
07035 case 208:
07036
07037
07038 #line 2119 "parse.y"
07039 {
07040
07041 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
07042
07043
07044
07045 }
07046 break;
07047
07048 case 209:
07049
07050
07051 #line 2127 "parse.y"
07052 {
07053
07054 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
07055
07056
07057
07058 }
07059 break;
07060
07061 case 210:
07062
07063
07064 #line 2135 "parse.y"
07065 {
07066
07067 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
07068
07069
07070
07071 }
07072 break;
07073
07074 case 211:
07075
07076
07077 #line 2143 "parse.y"
07078 {
07079
07080 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
07081
07082
07083
07084 }
07085 break;
07086
07087 case 212:
07088
07089
07090 #line 2151 "parse.y"
07091 {
07092
07093 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
07094
07095
07096
07097 }
07098 break;
07099
07100 case 213:
07101
07102
07103 #line 2159 "parse.y"
07104 {
07105
07106 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
07107
07108
07109
07110 }
07111 break;
07112
07113 case 214:
07114
07115
07116 #line 2167 "parse.y"
07117 {
07118
07119 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
07120
07121
07122
07123
07124 }
07125 break;
07126
07127 case 215:
07128
07129
07130 #line 2176 "parse.y"
07131 {
07132
07133 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
07134
07135
07136
07137
07138 }
07139 break;
07140
07141 case 216:
07142
07143
07144 #line 2185 "parse.y"
07145 {
07146
07147 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
07148
07149
07150
07151 }
07152 break;
07153
07154 case 217:
07155
07156
07157 #line 2193 "parse.y"
07158 {
07159
07160 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
07161
07162
07163
07164 }
07165 break;
07166
07167 case 218:
07168
07169
07170 #line 2201 "parse.y"
07171 {
07172
07173 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
07174
07175
07176
07177 }
07178 break;
07179
07180 case 219:
07181
07182
07183 #line 2209 "parse.y"
07184 {
07185
07186 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
07187
07188
07189
07190 }
07191 break;
07192
07193 case 220:
07194
07195
07196 #line 2217 "parse.y"
07197 {
07198
07199 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
07200
07201
07202
07203 }
07204 break;
07205
07206 case 221:
07207
07208
07209 #line 2225 "parse.y"
07210 {
07211
07212 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
07213
07214
07215
07216 }
07217 break;
07218
07219 case 222:
07220
07221
07222 #line 2233 "parse.y"
07223 {
07224
07225 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
07226
07227
07228
07229 }
07230 break;
07231
07232 case 223:
07233
07234
07235 #line 2241 "parse.y"
07236 {
07237
07238 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
07239
07240
07241
07242 }
07243 break;
07244
07245 case 224:
07246
07247
07248 #line 2249 "parse.y"
07249 {
07250
07251 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
07252
07253
07254
07255 }
07256 break;
07257
07258 case 225:
07259
07260
07261 #line 2257 "parse.y"
07262 {
07263
07264 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
07265
07266
07267
07268 }
07269 break;
07270
07271 case 226:
07272
07273
07274 #line 2265 "parse.y"
07275 {
07276
07277 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
07278
07279
07280
07281 }
07282 break;
07283
07284 case 227:
07285
07286
07287 #line 2273 "parse.y"
07288 {
07289
07290 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
07291
07292
07293
07294 }
07295 break;
07296
07297 case 228:
07298
07299
07300 #line 2281 "parse.y"
07301 {
07302
07303 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
07304
07305
07306
07307 }
07308 break;
07309
07310 case 229:
07311
07312
07313 #line 2289 "parse.y"
07314 {
07315
07316 (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07317 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && TYPE((yyvsp[(1) - (3)].node)->nd_lit) == T_REGEXP) {
07318 (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
07319 }
07320
07321
07322
07323 }
07324 break;
07325
07326 case 230:
07327
07328
07329 #line 2300 "parse.y"
07330 {
07331
07332 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
07333
07334
07335
07336 }
07337 break;
07338
07339 case 231:
07340
07341
07342 #line 2308 "parse.y"
07343 {
07344
07345 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
07346
07347
07348
07349 }
07350 break;
07351
07352 case 232:
07353
07354
07355 #line 2316 "parse.y"
07356 {
07357
07358 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
07359
07360
07361
07362 }
07363 break;
07364
07365 case 233:
07366
07367
07368 #line 2324 "parse.y"
07369 {
07370
07371 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
07372
07373
07374
07375 }
07376 break;
07377
07378 case 234:
07379
07380
07381 #line 2332 "parse.y"
07382 {
07383
07384 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
07385
07386
07387
07388 }
07389 break;
07390
07391 case 235:
07392
07393
07394 #line 2340 "parse.y"
07395 {
07396
07397 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07398
07399
07400
07401 }
07402 break;
07403
07404 case 236:
07405
07406
07407 #line 2348 "parse.y"
07408 {
07409
07410 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07411
07412
07413
07414 }
07415 break;
07416
07417 case 237:
07418
07419
07420 #line 2355 "parse.y"
07421 {in_defined = 1;}
07422 break;
07423
07424 case 238:
07425
07426
07427 #line 2356 "parse.y"
07428 {
07429
07430 in_defined = 0;
07431 (yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node));
07432
07433
07434
07435
07436 }
07437 break;
07438
07439 case 239:
07440
07441
07442 #line 2366 "parse.y"
07443 {
07444
07445 value_expr((yyvsp[(1) - (6)].node));
07446 (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
07447 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
07448
07449
07450
07451 }
07452 break;
07453
07454 case 240:
07455
07456
07457 #line 2376 "parse.y"
07458 {
07459 (yyval.node) = (yyvsp[(1) - (1)].node);
07460 }
07461 break;
07462
07463 case 241:
07464
07465
07466 #line 2382 "parse.y"
07467 {
07468
07469 value_expr((yyvsp[(1) - (1)].node));
07470 (yyval.node) = (yyvsp[(1) - (1)].node);
07471 if (!(yyval.node)) (yyval.node) = NEW_NIL();
07472
07473
07474
07475 }
07476 break;
07477
07478 case 243:
07479
07480
07481 #line 2395 "parse.y"
07482 {
07483 (yyval.node) = (yyvsp[(1) - (2)].node);
07484 }
07485 break;
07486
07487 case 244:
07488
07489
07490 #line 2399 "parse.y"
07491 {
07492
07493 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07494
07495
07496
07497 }
07498 break;
07499
07500 case 245:
07501
07502
07503 #line 2407 "parse.y"
07504 {
07505
07506 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07507
07508
07509
07510 }
07511 break;
07512
07513 case 246:
07514
07515
07516 #line 2417 "parse.y"
07517 {
07518
07519 (yyval.node) = (yyvsp[(2) - (3)].node);
07520
07521
07522
07523 }
07524 break;
07525
07526 case 251:
07527
07528
07529 #line 2433 "parse.y"
07530 {
07531 (yyval.node) = (yyvsp[(1) - (2)].node);
07532 }
07533 break;
07534
07535 case 252:
07536
07537
07538 #line 2437 "parse.y"
07539 {
07540
07541 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07542
07543
07544
07545 }
07546 break;
07547
07548 case 253:
07549
07550
07551 #line 2445 "parse.y"
07552 {
07553
07554 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07555
07556
07557
07558 }
07559 break;
07560
07561 case 254:
07562
07563
07564 #line 2455 "parse.y"
07565 {
07566
07567 value_expr((yyvsp[(1) - (1)].node));
07568 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07569
07570
07571
07572 }
07573 break;
07574
07575 case 255:
07576
07577
07578 #line 2464 "parse.y"
07579 {
07580
07581 (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
07582
07583
07584
07585 }
07586 break;
07587
07588 case 256:
07589
07590
07591 #line 2472 "parse.y"
07592 {
07593
07594 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07595 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
07596
07597
07598
07599
07600 }
07601 break;
07602
07603 case 257:
07604
07605
07606 #line 2482 "parse.y"
07607 {
07608
07609 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07610 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
07611
07612
07613
07614 }
07615 break;
07616
07617 case 259:
07618
07619
07620 #line 2499 "parse.y"
07621 {
07622 (yyval.val) = cmdarg_stack;
07623 CMDARG_PUSH(1);
07624 }
07625 break;
07626
07627 case 260:
07628
07629
07630 #line 2504 "parse.y"
07631 {
07632
07633 cmdarg_stack = (yyvsp[(1) - (2)].val);
07634 (yyval.node) = (yyvsp[(2) - (2)].node);
07635 }
07636 break;
07637
07638 case 261:
07639
07640
07641 #line 2512 "parse.y"
07642 {
07643
07644 (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
07645
07646
07647
07648 }
07649 break;
07650
07651 case 262:
07652
07653
07654 #line 2522 "parse.y"
07655 {
07656 (yyval.node) = (yyvsp[(2) - (2)].node);
07657 }
07658 break;
07659
07660 case 263:
07661
07662
07663 #line 2526 "parse.y"
07664 {
07665 (yyval.node) = 0;
07666 }
07667 break;
07668
07669 case 264:
07670
07671
07672 #line 2532 "parse.y"
07673 {
07674
07675 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07676
07677
07678
07679 }
07680 break;
07681
07682 case 265:
07683
07684
07685 #line 2540 "parse.y"
07686 {
07687
07688 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07689
07690
07691
07692 }
07693 break;
07694
07695 case 266:
07696
07697
07698 #line 2548 "parse.y"
07699 {
07700
07701 NODE *n1;
07702 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07703 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07704 }
07705 else {
07706 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07707 }
07708
07709
07710
07711 }
07712 break;
07713
07714 case 267:
07715
07716
07717 #line 2562 "parse.y"
07718 {
07719
07720 NODE *n1;
07721 if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07722 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07723 }
07724 else {
07725 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07726 }
07727
07728
07729
07730 }
07731 break;
07732
07733 case 268:
07734
07735
07736 #line 2578 "parse.y"
07737 {
07738
07739 NODE *n1;
07740 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07741 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07742 }
07743 else {
07744 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07745 }
07746
07747
07748
07749 }
07750 break;
07751
07752 case 269:
07753
07754
07755 #line 2592 "parse.y"
07756 {
07757
07758 NODE *n1;
07759 if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
07760 (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07761 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07762 }
07763 else {
07764 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07765 }
07766
07767
07768
07769 }
07770 break;
07771
07772 case 270:
07773
07774
07775 #line 2607 "parse.y"
07776 {
07777
07778 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07779
07780
07781
07782 }
07783 break;
07784
07785 case 279:
07786
07787
07788 #line 2625 "parse.y"
07789 {
07790
07791 (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
07792
07793
07794
07795 }
07796 break;
07797
07798 case 280:
07799
07800
07801 #line 2633 "parse.y"
07802 {
07803
07804 (yyval.num) = ruby_sourceline;
07805
07806
07807 }
07808 break;
07809
07810 case 281:
07811
07812
07813 #line 2641 "parse.y"
07814 {
07815
07816 if ((yyvsp[(3) - (4)].node) == NULL) {
07817 (yyval.node) = NEW_NIL();
07818 }
07819 else {
07820 if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
07821 nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
07822 nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
07823 (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
07824 }
07825 nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
07826
07827
07828
07829 }
07830 break;
07831
07832 case 282:
07833
07834
07835 #line 2657 "parse.y"
07836 {lex_state = EXPR_ENDARG;}
07837 break;
07838
07839 case 283:
07840
07841
07842 #line 2658 "parse.y"
07843 {
07844 rb_warning0("(...) interpreted as grouped expression");
07845
07846 (yyval.node) = (yyvsp[(2) - (4)].node);
07847
07848
07849
07850 }
07851 break;
07852
07853 case 284:
07854
07855
07856 #line 2667 "parse.y"
07857 {
07858
07859 (yyval.node) = (yyvsp[(2) - (3)].node);
07860
07861
07862
07863 }
07864 break;
07865
07866 case 285:
07867
07868
07869 #line 2675 "parse.y"
07870 {
07871
07872 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
07873
07874
07875
07876 }
07877 break;
07878
07879 case 286:
07880
07881
07882 #line 2683 "parse.y"
07883 {
07884
07885 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
07886
07887
07888
07889 }
07890 break;
07891
07892 case 287:
07893
07894
07895 #line 2691 "parse.y"
07896 {
07897
07898 if ((yyvsp[(2) - (3)].node) == 0) {
07899 (yyval.node) = NEW_ZARRAY();
07900 }
07901 else {
07902 (yyval.node) = (yyvsp[(2) - (3)].node);
07903 }
07904
07905
07906
07907 }
07908 break;
07909
07910 case 288:
07911
07912
07913 #line 2704 "parse.y"
07914 {
07915
07916 (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node));
07917
07918
07919
07920 }
07921 break;
07922
07923 case 289:
07924
07925
07926 #line 2712 "parse.y"
07927 {
07928
07929 (yyval.node) = NEW_RETURN(0);
07930
07931
07932
07933 }
07934 break;
07935
07936 case 290:
07937
07938
07939 #line 2720 "parse.y"
07940 {
07941
07942 (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
07943
07944
07945
07946 }
07947 break;
07948
07949 case 291:
07950
07951
07952 #line 2728 "parse.y"
07953 {
07954
07955 (yyval.node) = NEW_YIELD(0, Qfalse);
07956
07957
07958
07959 }
07960 break;
07961
07962 case 292:
07963
07964
07965 #line 2736 "parse.y"
07966 {
07967
07968 (yyval.node) = NEW_YIELD(0, Qfalse);
07969
07970
07971
07972 }
07973 break;
07974
07975 case 293:
07976
07977
07978 #line 2743 "parse.y"
07979 {in_defined = 1;}
07980 break;
07981
07982 case 294:
07983
07984
07985 #line 2744 "parse.y"
07986 {
07987
07988 in_defined = 0;
07989 (yyval.node) = NEW_DEFINED((yyvsp[(5) - (6)].node));
07990
07991
07992
07993
07994 }
07995 break;
07996
07997 case 295:
07998
07999
08000 #line 2754 "parse.y"
08001 {
08002
08003 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!');
08004
08005
08006
08007 }
08008 break;
08009
08010 case 296:
08011
08012
08013 #line 2762 "parse.y"
08014 {
08015
08016 (yyval.node) = call_uni_op(cond(NEW_NIL()), '!');
08017
08018
08019
08020 }
08021 break;
08022
08023 case 297:
08024
08025
08026 #line 2770 "parse.y"
08027 {
08028
08029 (yyvsp[(2) - (2)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (2)].id), 0);
08030 (yyval.node) = (yyvsp[(2) - (2)].node);
08031 fixpos((yyvsp[(2) - (2)].node)->nd_iter, (yyvsp[(2) - (2)].node));
08032
08033
08034
08035
08036 }
08037 break;
08038
08039 case 299:
08040
08041
08042 #line 2782 "parse.y"
08043 {
08044
08045 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
08046 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
08047 (yyval.node) = (yyvsp[(2) - (2)].node);
08048 fixpos((yyval.node), (yyvsp[(1) - (2)].node));
08049
08050
08051
08052 }
08053 break;
08054
08055 case 300:
08056
08057
08058 #line 2793 "parse.y"
08059 {
08060 (yyval.node) = (yyvsp[(2) - (2)].node);
08061 }
08062 break;
08063
08064 case 301:
08065
08066
08067 #line 2800 "parse.y"
08068 {
08069
08070 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
08071 fixpos((yyval.node), (yyvsp[(2) - (6)].node));
08072
08073
08074
08075 }
08076 break;
08077
08078 case 302:
08079
08080
08081 #line 2812 "parse.y"
08082 {
08083
08084 (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
08085 fixpos((yyval.node), (yyvsp[(2) - (6)].node));
08086
08087
08088
08089 }
08090 break;
08091
08092 case 303:
08093
08094
08095 #line 2820 "parse.y"
08096 {COND_PUSH(1);}
08097 break;
08098
08099 case 304:
08100
08101
08102 #line 2820 "parse.y"
08103 {COND_POP();}
08104 break;
08105
08106 case 305:
08107
08108
08109 #line 2823 "parse.y"
08110 {
08111
08112 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
08113 fixpos((yyval.node), (yyvsp[(3) - (7)].node));
08114
08115
08116
08117 }
08118 break;
08119
08120 case 306:
08121
08122
08123 #line 2831 "parse.y"
08124 {COND_PUSH(1);}
08125 break;
08126
08127 case 307:
08128
08129
08130 #line 2831 "parse.y"
08131 {COND_POP();}
08132 break;
08133
08134 case 308:
08135
08136
08137 #line 2834 "parse.y"
08138 {
08139
08140 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
08141 fixpos((yyval.node), (yyvsp[(3) - (7)].node));
08142
08143
08144
08145 }
08146 break;
08147
08148 case 309:
08149
08150
08151 #line 2845 "parse.y"
08152 {
08153
08154 (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08155 fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08156
08157
08158
08159 }
08160 break;
08161
08162 case 310:
08163
08164
08165 #line 2854 "parse.y"
08166 {
08167
08168 (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
08169
08170
08171
08172 }
08173 break;
08174
08175 case 311:
08176
08177
08178 #line 2862 "parse.y"
08179 {COND_PUSH(1);}
08180 break;
08181
08182 case 312:
08183
08184
08185 #line 2864 "parse.y"
08186 {COND_POP();}
08187 break;
08188
08189 case 313:
08190
08191
08192 #line 2867 "parse.y"
08193 {
08194
08195
08196
08197
08198
08199
08200
08201
08202
08203
08204 ID id = internal_id();
08205 ID *tbl = ALLOC_N(ID, 2);
08206 NODE *m = NEW_ARGS_AUX(0, 0);
08207 NODE *args, *scope;
08208
08209 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) {
08210
08211
08212
08213
08214 NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
08215 NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
08216 m->nd_next = block_append(
08217 NEW_IF(
08218 NEW_NODE(NODE_AND,
08219 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("length"), 0),
08220 rb_intern("=="), one),
08221 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero),
08222 rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
08223 0),
08224 NEW_DASGN_CURR(id,
08225 NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero)),
08226 0),
08227 node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id)));
08228
08229 args = new_args(m, 0, id, 0, 0);
08230 }
08231 else {
08232 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN ||
08233 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN ||
08234 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) {
08235 (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
08236 m->nd_plen = 1;
08237 m->nd_next = (yyvsp[(2) - (9)].node);
08238 args = new_args(m, 0, 0, 0, 0);
08239 }
08240 else {
08241 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
08242 args = new_args(m, 0, id, 0, 0);
08243 }
08244 }
08245 scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
08246 tbl[0] = 1; tbl[1] = id;
08247 (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
08248 fixpos((yyval.node), (yyvsp[(2) - (9)].node));
08249
08250
08251
08252 }
08253 break;
08254
08255 case 314:
08256
08257
08258 #line 2928 "parse.y"
08259 {
08260 if (in_def || in_single)
08261 yyerror("class definition in method body");
08262 local_push(0);
08263
08264 (yyval.num) = ruby_sourceline;
08265
08266
08267 }
08268 break;
08269
08270 case 315:
08271
08272
08273 #line 2939 "parse.y"
08274 {
08275
08276 (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
08277 nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
08278
08279
08280
08281 local_pop();
08282 }
08283 break;
08284
08285 case 316:
08286
08287
08288 #line 2949 "parse.y"
08289 {
08290 (yyval.num) = in_def;
08291 in_def = 0;
08292 }
08293 break;
08294
08295 case 317:
08296
08297
08298 #line 2954 "parse.y"
08299 {
08300 (yyval.num) = in_single;
08301 in_single = 0;
08302 local_push(0);
08303 }
08304 break;
08305
08306 case 318:
08307
08308
08309 #line 2961 "parse.y"
08310 {
08311
08312 (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
08313 fixpos((yyval.node), (yyvsp[(3) - (8)].node));
08314
08315
08316
08317 local_pop();
08318 in_def = (yyvsp[(4) - (8)].num);
08319 in_single = (yyvsp[(6) - (8)].num);
08320 }
08321 break;
08322
08323 case 319:
08324
08325
08326 #line 2973 "parse.y"
08327 {
08328 if (in_def || in_single)
08329 yyerror("module definition in method body");
08330 local_push(0);
08331
08332 (yyval.num) = ruby_sourceline;
08333
08334
08335 }
08336 break;
08337
08338 case 320:
08339
08340
08341 #line 2984 "parse.y"
08342 {
08343
08344 (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08345 nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
08346
08347
08348
08349 local_pop();
08350 }
08351 break;
08352
08353 case 321:
08354
08355
08356 #line 2994 "parse.y"
08357 {
08358 (yyval.id) = cur_mid;
08359 cur_mid = (yyvsp[(2) - (2)].id);
08360 in_def++;
08361 local_push(0);
08362 }
08363 break;
08364
08365 case 322:
08366
08367
08368 #line 3003 "parse.y"
08369 {
08370
08371 NODE *body = remove_begin((yyvsp[(5) - (6)].node));
08372 reduce_nodes(&body);
08373 (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
08374 nd_set_line((yyval.node), (yyvsp[(1) - (6)].num));
08375
08376
08377
08378 local_pop();
08379 in_def--;
08380 cur_mid = (yyvsp[(3) - (6)].id);
08381 }
08382 break;
08383
08384 case 323:
08385
08386
08387 #line 3016 "parse.y"
08388 {lex_state = EXPR_FNAME;}
08389 break;
08390
08391 case 324:
08392
08393
08394 #line 3017 "parse.y"
08395 {
08396 in_single++;
08397 lex_state = EXPR_ENDFN;
08398 local_push(0);
08399 }
08400 break;
08401
08402 case 325:
08403
08404
08405 #line 3025 "parse.y"
08406 {
08407
08408 NODE *body = remove_begin((yyvsp[(8) - (9)].node));
08409 reduce_nodes(&body);
08410 (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
08411 nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
08412
08413
08414
08415 local_pop();
08416 in_single--;
08417 }
08418 break;
08419
08420 case 326:
08421
08422
08423 #line 3038 "parse.y"
08424 {
08425
08426 (yyval.node) = NEW_BREAK(0);
08427
08428
08429
08430 }
08431 break;
08432
08433 case 327:
08434
08435
08436 #line 3046 "parse.y"
08437 {
08438
08439 (yyval.node) = NEW_NEXT(0);
08440
08441
08442
08443 }
08444 break;
08445
08446 case 328:
08447
08448
08449 #line 3054 "parse.y"
08450 {
08451
08452 (yyval.node) = NEW_REDO();
08453
08454
08455
08456 }
08457 break;
08458
08459 case 329:
08460
08461
08462 #line 3062 "parse.y"
08463 {
08464
08465 (yyval.node) = NEW_RETRY();
08466
08467
08468
08469 }
08470 break;
08471
08472 case 330:
08473
08474
08475 #line 3072 "parse.y"
08476 {
08477
08478 value_expr((yyvsp[(1) - (1)].node));
08479 (yyval.node) = (yyvsp[(1) - (1)].node);
08480 if (!(yyval.node)) (yyval.node) = NEW_NIL();
08481
08482
08483
08484 }
08485 break;
08486
08487 case 331:
08488
08489
08490 #line 3084 "parse.y"
08491 {
08492 token_info_push("begin");
08493 }
08494 break;
08495
08496 case 332:
08497
08498
08499 #line 3090 "parse.y"
08500 {
08501 token_info_push("if");
08502 }
08503 break;
08504
08505 case 333:
08506
08507
08508 #line 3096 "parse.y"
08509 {
08510 token_info_push("unless");
08511 }
08512 break;
08513
08514 case 334:
08515
08516
08517 #line 3102 "parse.y"
08518 {
08519 token_info_push("while");
08520 }
08521 break;
08522
08523 case 335:
08524
08525
08526 #line 3108 "parse.y"
08527 {
08528 token_info_push("until");
08529 }
08530 break;
08531
08532 case 336:
08533
08534
08535 #line 3114 "parse.y"
08536 {
08537 token_info_push("case");
08538 }
08539 break;
08540
08541 case 337:
08542
08543
08544 #line 3120 "parse.y"
08545 {
08546 token_info_push("for");
08547 }
08548 break;
08549
08550 case 338:
08551
08552
08553 #line 3126 "parse.y"
08554 {
08555 token_info_push("class");
08556 }
08557 break;
08558
08559 case 339:
08560
08561
08562 #line 3132 "parse.y"
08563 {
08564 token_info_push("module");
08565 }
08566 break;
08567
08568 case 340:
08569
08570
08571 #line 3138 "parse.y"
08572 {
08573 token_info_push("def");
08574
08575 (yyval.num) = ruby_sourceline;
08576
08577
08578 }
08579 break;
08580
08581 case 341:
08582
08583
08584 #line 3148 "parse.y"
08585 {
08586 token_info_pop("end");
08587 }
08588 break;
08589
08590 case 348:
08591
08592
08593 #line 3178 "parse.y"
08594 {
08595
08596 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
08597 fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08598
08599
08600
08601 }
08602 break;
08603
08604 case 350:
08605
08606
08607 #line 3190 "parse.y"
08608 {
08609
08610 (yyval.node) = (yyvsp[(2) - (2)].node);
08611
08612
08613
08614 }
08615 break;
08616
08617 case 353:
08618
08619
08620 #line 3204 "parse.y"
08621 {
08622 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
08623
08624
08625
08626
08627 }
08628 break;
08629
08630 case 354:
08631
08632
08633 #line 3212 "parse.y"
08634 {
08635
08636 (yyval.node) = (yyvsp[(2) - (3)].node);
08637
08638
08639
08640 }
08641 break;
08642
08643 case 355:
08644
08645
08646 #line 3222 "parse.y"
08647 {
08648
08649 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
08650
08651
08652
08653 }
08654 break;
08655
08656 case 356:
08657
08658
08659 #line 3230 "parse.y"
08660 {
08661
08662 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
08663
08664
08665
08666 }
08667 break;
08668
08669 case 357:
08670
08671
08672 #line 3240 "parse.y"
08673 {
08674
08675 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
08676
08677
08678
08679 }
08680 break;
08681
08682 case 358:
08683
08684
08685 #line 3248 "parse.y"
08686 {
08687 (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
08688
08689 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
08690
08691
08692
08693 }
08694 break;
08695
08696 case 359:
08697
08698
08699 #line 3257 "parse.y"
08700 {
08701 (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
08702
08703 (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
08704
08705
08706
08707 }
08708 break;
08709
08710 case 360:
08711
08712
08713 #line 3266 "parse.y"
08714 {
08715
08716 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
08717
08718
08719
08720 }
08721 break;
08722
08723 case 361:
08724
08725
08726 #line 3274 "parse.y"
08727 {
08728
08729 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
08730
08731
08732
08733 }
08734 break;
08735
08736 case 362:
08737
08738
08739 #line 3282 "parse.y"
08740 {
08741 (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
08742
08743 (yyval.node) = NEW_MASGN(0, (yyval.node));
08744
08745
08746
08747 }
08748 break;
08749
08750 case 363:
08751
08752
08753 #line 3291 "parse.y"
08754 {
08755 (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
08756
08757 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
08758
08759
08760
08761
08762
08763
08764 }
08765 break;
08766
08767 case 364:
08768
08769
08770 #line 3303 "parse.y"
08771 {
08772
08773 (yyval.node) = NEW_MASGN(0, -1);
08774
08775
08776
08777 }
08778 break;
08779
08780 case 365:
08781
08782
08783 #line 3311 "parse.y"
08784 {
08785
08786 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
08787
08788
08789
08790 }
08791 break;
08792
08793 case 366:
08794
08795
08796 #line 3321 "parse.y"
08797 {
08798
08799 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
08800
08801
08802
08803 }
08804 break;
08805
08806 case 367:
08807
08808
08809 #line 3329 "parse.y"
08810 {
08811
08812 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
08813
08814
08815
08816 }
08817 break;
08818
08819 case 368:
08820
08821
08822 #line 3337 "parse.y"
08823 {
08824
08825 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
08826
08827
08828
08829 }
08830 break;
08831
08832 case 369:
08833
08834
08835 #line 3345 "parse.y"
08836 {
08837
08838 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08839
08840
08841
08842 }
08843 break;
08844
08845 case 370:
08846
08847
08848 #line 3353 "parse.y"
08849 {
08850
08851 (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08852
08853
08854
08855 }
08856 break;
08857
08858 case 371:
08859
08860
08861 #line 3361 "parse.y"
08862 {
08863
08864 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 1, 0, 0);
08865
08866
08867
08868
08869 }
08870 break;
08871
08872 case 372:
08873
08874
08875 #line 3370 "parse.y"
08876 {
08877
08878 (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08879
08880
08881
08882 }
08883 break;
08884
08885 case 373:
08886
08887
08888 #line 3378 "parse.y"
08889 {
08890
08891 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
08892
08893
08894
08895 }
08896 break;
08897
08898 case 374:
08899
08900
08901 #line 3386 "parse.y"
08902 {
08903
08904 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08905
08906
08907
08908 }
08909 break;
08910
08911 case 375:
08912
08913
08914 #line 3394 "parse.y"
08915 {
08916
08917 (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08918
08919
08920
08921 }
08922 break;
08923
08924 case 376:
08925
08926
08927 #line 3402 "parse.y"
08928 {
08929
08930 (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
08931
08932
08933
08934 }
08935 break;
08936
08937 case 377:
08938
08939
08940 #line 3410 "parse.y"
08941 {
08942
08943 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08944
08945
08946
08947 }
08948 break;
08949
08950 case 378:
08951
08952
08953 #line 3418 "parse.y"
08954 {
08955
08956 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
08957
08958
08959
08960 }
08961 break;
08962
08963 case 379:
08964
08965
08966 #line 3426 "parse.y"
08967 {
08968
08969 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08970
08971
08972
08973 }
08974 break;
08975
08976 case 380:
08977
08978
08979 #line 3434 "parse.y"
08980 {
08981
08982 (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
08983
08984
08985
08986 }
08987 break;
08988
08989 case 382:
08990
08991
08992 #line 3445 "parse.y"
08993 {
08994 command_start = TRUE;
08995 }
08996 break;
08997
08998 case 383:
08999
09000
09001 #line 3451 "parse.y"
09002 {
09003
09004 (yyval.node) = 0;
09005
09006
09007
09008
09009 }
09010 break;
09011
09012 case 384:
09013
09014
09015 #line 3460 "parse.y"
09016 {
09017
09018 (yyval.node) = 0;
09019
09020
09021
09022
09023 }
09024 break;
09025
09026 case 385:
09027
09028
09029 #line 3469 "parse.y"
09030 {
09031
09032 (yyval.node) = (yyvsp[(2) - (4)].node);
09033
09034
09035
09036 }
09037 break;
09038
09039 case 387:
09040
09041
09042 #line 3481 "parse.y"
09043 {
09044
09045 (yyval.node) = 0;
09046
09047
09048
09049 }
09050 break;
09051
09052 case 390:
09053
09054
09055 #line 3507 "parse.y"
09056 {
09057 new_bv(get_id((yyvsp[(1) - (1)].id)));
09058
09059
09060
09061
09062 }
09063 break;
09064
09065 case 391:
09066
09067
09068 #line 3515 "parse.y"
09069 {
09070 (yyval.node) = 0;
09071 }
09072 break;
09073
09074 case 392:
09075
09076
09077 #line 3520 "parse.y"
09078 {
09079 (yyval.vars) = dyna_push();
09080 }
09081 break;
09082
09083 case 393:
09084
09085
09086 #line 3523 "parse.y"
09087 {
09088 (yyval.num) = lpar_beg;
09089 lpar_beg = ++paren_nest;
09090 }
09091 break;
09092
09093 case 394:
09094
09095
09096 #line 3529 "parse.y"
09097 {
09098 lpar_beg = (yyvsp[(2) - (4)].num);
09099
09100 (yyval.node) = (yyvsp[(3) - (4)].node);
09101 (yyval.node)->nd_body = NEW_SCOPE((yyvsp[(3) - (4)].node)->nd_head, (yyvsp[(4) - (4)].node));
09102
09103
09104
09105 dyna_pop((yyvsp[(1) - (4)].vars));
09106 }
09107 break;
09108
09109 case 395:
09110
09111
09112 #line 3542 "parse.y"
09113 {
09114
09115 (yyval.node) = NEW_LAMBDA((yyvsp[(2) - (4)].node));
09116
09117
09118
09119 }
09120 break;
09121
09122 case 396:
09123
09124
09125 #line 3550 "parse.y"
09126 {
09127
09128 (yyval.node) = NEW_LAMBDA((yyvsp[(1) - (1)].node));
09129
09130
09131
09132 }
09133 break;
09134
09135 case 397:
09136
09137
09138 #line 3560 "parse.y"
09139 {
09140 (yyval.node) = (yyvsp[(2) - (3)].node);
09141 }
09142 break;
09143
09144 case 398:
09145
09146
09147 #line 3564 "parse.y"
09148 {
09149 (yyval.node) = (yyvsp[(2) - (3)].node);
09150 }
09151 break;
09152
09153 case 399:
09154
09155
09156 #line 3570 "parse.y"
09157 {
09158 (yyvsp[(1) - (1)].vars) = dyna_push();
09159
09160 (yyval.num) = ruby_sourceline;
09161
09162 }
09163 break;
09164
09165 case 400:
09166
09167
09168 #line 3579 "parse.y"
09169 {
09170
09171 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09172 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09173
09174
09175
09176 dyna_pop((yyvsp[(1) - (5)].vars));
09177 }
09178 break;
09179
09180 case 401:
09181
09182
09183 #line 3591 "parse.y"
09184 {
09185
09186 if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
09187 compile_error(PARSER_ARG "block given to yield");
09188 }
09189 else {
09190 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
09191 }
09192 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
09193 (yyval.node) = (yyvsp[(2) - (2)].node);
09194 fixpos((yyval.node), (yyvsp[(1) - (2)].node));
09195
09196
09197
09198 }
09199 break;
09200
09201 case 402:
09202
09203
09204 #line 3607 "parse.y"
09205 {
09206
09207 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09208
09209
09210
09211
09212 }
09213 break;
09214
09215 case 403:
09216
09217
09218 #line 3616 "parse.y"
09219 {
09220
09221 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09222
09223
09224
09225
09226 }
09227 break;
09228
09229 case 404:
09230
09231
09232 #line 3627 "parse.y"
09233 {
09234
09235 (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
09236 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
09237
09238
09239
09240 }
09241 break;
09242
09243 case 405:
09244
09245
09246 #line 3636 "parse.y"
09247 {
09248
09249 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09250 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09251
09252
09253
09254
09255 }
09256 break;
09257
09258 case 406:
09259
09260
09261 #line 3646 "parse.y"
09262 {
09263
09264 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09265 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09266
09267
09268
09269
09270 }
09271 break;
09272
09273 case 407:
09274
09275
09276 #line 3656 "parse.y"
09277 {
09278
09279 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
09280
09281
09282
09283 }
09284 break;
09285
09286 case 408:
09287
09288
09289 #line 3664 "parse.y"
09290 {
09291
09292 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09293 fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09294
09295
09296
09297
09298
09299 }
09300 break;
09301
09302 case 409:
09303
09304
09305 #line 3675 "parse.y"
09306 {
09307
09308 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09309 fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09310
09311
09312
09313
09314
09315 }
09316 break;
09317
09318 case 410:
09319
09320
09321 #line 3686 "parse.y"
09322 {
09323
09324 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
09325
09326
09327
09328 }
09329 break;
09330
09331 case 411:
09332
09333
09334 #line 3694 "parse.y"
09335 {
09336
09337 (yyval.node) = NEW_ZSUPER();
09338
09339
09340
09341 }
09342 break;
09343
09344 case 412:
09345
09346
09347 #line 3702 "parse.y"
09348 {
09349
09350 if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
09351 (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
09352 else
09353 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
09354 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09355
09356
09357
09358 }
09359 break;
09360
09361 case 413:
09362
09363
09364 #line 3716 "parse.y"
09365 {
09366 (yyvsp[(1) - (1)].vars) = dyna_push();
09367
09368 (yyval.num) = ruby_sourceline;
09369
09370
09371 }
09372 break;
09373
09374 case 414:
09375
09376
09377 #line 3725 "parse.y"
09378 {
09379
09380 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09381 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09382
09383
09384
09385 dyna_pop((yyvsp[(1) - (5)].vars));
09386 }
09387 break;
09388
09389 case 415:
09390
09391
09392 #line 3735 "parse.y"
09393 {
09394 (yyvsp[(1) - (1)].vars) = dyna_push();
09395
09396 (yyval.num) = ruby_sourceline;
09397
09398
09399 }
09400 break;
09401
09402 case 416:
09403
09404
09405 #line 3744 "parse.y"
09406 {
09407
09408 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09409 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09410
09411
09412
09413 dyna_pop((yyvsp[(1) - (5)].vars));
09414 }
09415 break;
09416
09417 case 417:
09418
09419
09420 #line 3758 "parse.y"
09421 {
09422
09423 (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09424
09425
09426
09427 }
09428 break;
09429
09430 case 420:
09431
09432
09433 #line 3774 "parse.y"
09434 {
09435
09436 if ((yyvsp[(3) - (6)].node)) {
09437 (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
09438 (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
09439 }
09440 (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
09441 fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
09442
09443
09444
09445
09446
09447
09448
09449 }
09450 break;
09451
09452 case 422:
09453
09454
09455 #line 3794 "parse.y"
09456 {
09457
09458 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
09459
09460
09461
09462 }
09463 break;
09464
09465 case 423:
09466
09467
09468 #line 3802 "parse.y"
09469 {
09470
09471 if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
09472
09473
09474
09475 }
09476 break;
09477
09478 case 425:
09479
09480
09481 #line 3813 "parse.y"
09482 {
09483 (yyval.node) = (yyvsp[(2) - (2)].node);
09484 }
09485 break;
09486
09487 case 427:
09488
09489
09490 #line 3820 "parse.y"
09491 {
09492
09493 (yyval.node) = (yyvsp[(2) - (2)].node);
09494
09495
09496
09497 }
09498 break;
09499
09500 case 430:
09501
09502
09503 #line 3832 "parse.y"
09504 {
09505
09506 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
09507
09508
09509
09510 }
09511 break;
09512
09513 case 432:
09514
09515
09516 #line 3843 "parse.y"
09517 {
09518
09519 NODE *node = (yyvsp[(1) - (1)].node);
09520 if (!node) {
09521 node = NEW_STR(STR_NEW0());
09522 }
09523 else {
09524 node = evstr2dstr(node);
09525 }
09526 (yyval.node) = node;
09527
09528
09529
09530 }
09531 break;
09532
09533 case 435:
09534
09535
09536 #line 3862 "parse.y"
09537 {
09538
09539 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09540
09541
09542
09543 }
09544 break;
09545
09546 case 436:
09547
09548
09549 #line 3872 "parse.y"
09550 {
09551
09552 (yyval.node) = (yyvsp[(2) - (3)].node);
09553
09554
09555
09556 }
09557 break;
09558
09559 case 437:
09560
09561
09562 #line 3882 "parse.y"
09563 {
09564
09565 NODE *node = (yyvsp[(2) - (3)].node);
09566 if (!node) {
09567 node = NEW_XSTR(STR_NEW0());
09568 }
09569 else {
09570 switch (nd_type(node)) {
09571 case NODE_STR:
09572 nd_set_type(node, NODE_XSTR);
09573 break;
09574 case NODE_DSTR:
09575 nd_set_type(node, NODE_DXSTR);
09576 break;
09577 default:
09578 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
09579 break;
09580 }
09581 }
09582 (yyval.node) = node;
09583
09584
09585
09586 }
09587 break;
09588
09589 case 438:
09590
09591
09592 #line 3909 "parse.y"
09593 {
09594
09595 int options = (yyvsp[(3) - (3)].num);
09596 NODE *node = (yyvsp[(2) - (3)].node);
09597 NODE *list, *prev;
09598 if (!node) {
09599 node = NEW_LIT(reg_compile(STR_NEW0(), options));
09600 }
09601 else switch (nd_type(node)) {
09602 case NODE_STR:
09603 {
09604 VALUE src = node->nd_lit;
09605 nd_set_type(node, NODE_LIT);
09606 node->nd_lit = reg_compile(src, options);
09607 }
09608 break;
09609 default:
09610 node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
09611 case NODE_DSTR:
09612 if (options & RE_OPTION_ONCE) {
09613 nd_set_type(node, NODE_DREGX_ONCE);
09614 }
09615 else {
09616 nd_set_type(node, NODE_DREGX);
09617 }
09618 node->nd_cflag = options & RE_OPTION_MASK;
09619 if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
09620 for (list = (prev = node)->nd_next; list; list = list->nd_next) {
09621 if (nd_type(list->nd_head) == NODE_STR) {
09622 VALUE tail = list->nd_head->nd_lit;
09623 if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
09624 VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
09625 if (!literal_concat0(parser, lit, tail)) {
09626 node = 0;
09627 break;
09628 }
09629 rb_str_resize(tail, 0);
09630 prev->nd_next = list->nd_next;
09631 rb_gc_force_recycle((VALUE)list->nd_head);
09632 rb_gc_force_recycle((VALUE)list);
09633 list = prev;
09634 }
09635 else {
09636 prev = list;
09637 }
09638 }
09639 else {
09640 prev = 0;
09641 }
09642 }
09643 if (!node->nd_next) {
09644 VALUE src = node->nd_lit;
09645 nd_set_type(node, NODE_LIT);
09646 node->nd_lit = reg_compile(src, options);
09647 }
09648 break;
09649 }
09650 (yyval.node) = node;
09651
09652
09653
09654 }
09655 break;
09656
09657 case 439:
09658
09659
09660 #line 3974 "parse.y"
09661 {
09662
09663 (yyval.node) = NEW_ZARRAY();
09664
09665
09666
09667
09668 }
09669 break;
09670
09671 case 440:
09672
09673
09674 #line 3983 "parse.y"
09675 {
09676
09677 (yyval.node) = (yyvsp[(2) - (3)].node);
09678
09679
09680
09681 }
09682 break;
09683
09684 case 441:
09685
09686
09687 #line 3993 "parse.y"
09688 {
09689
09690 (yyval.node) = 0;
09691
09692
09693
09694 }
09695 break;
09696
09697 case 442:
09698
09699
09700 #line 4001 "parse.y"
09701 {
09702
09703 (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
09704
09705
09706
09707 }
09708 break;
09709
09710 case 444:
09711
09712
09713 #line 4019 "parse.y"
09714 {
09715
09716 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09717
09718
09719
09720 }
09721 break;
09722
09723 case 445:
09724
09725
09726 #line 4029 "parse.y"
09727 {
09728
09729 (yyval.node) = NEW_ZARRAY();
09730
09731
09732
09733
09734 }
09735 break;
09736
09737 case 446:
09738
09739
09740 #line 4038 "parse.y"
09741 {
09742
09743 (yyval.node) = (yyvsp[(2) - (3)].node);
09744
09745
09746
09747 }
09748 break;
09749
09750 case 447:
09751
09752
09753 #line 4048 "parse.y"
09754 {
09755
09756 (yyval.node) = 0;
09757
09758
09759
09760 }
09761 break;
09762
09763 case 448:
09764
09765
09766 #line 4056 "parse.y"
09767 {
09768
09769 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
09770
09771
09772
09773 }
09774 break;
09775
09776 case 449:
09777
09778
09779 #line 4066 "parse.y"
09780 {
09781
09782 (yyval.node) = 0;
09783
09784
09785
09786 }
09787 break;
09788
09789 case 450:
09790
09791
09792 #line 4074 "parse.y"
09793 {
09794
09795 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09796
09797
09798
09799 }
09800 break;
09801
09802 case 451:
09803
09804
09805 #line 4084 "parse.y"
09806 {
09807
09808 (yyval.node) = 0;
09809
09810
09811
09812 }
09813 break;
09814
09815 case 452:
09816
09817
09818 #line 4092 "parse.y"
09819 {
09820
09821 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09822
09823
09824
09825 }
09826 break;
09827
09828 case 453:
09829
09830
09831 #line 4102 "parse.y"
09832 {
09833
09834 (yyval.node) = 0;
09835
09836
09837
09838 }
09839 break;
09840
09841 case 454:
09842
09843
09844 #line 4110 "parse.y"
09845 {
09846
09847 NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
09848 if (!head) {
09849 (yyval.node) = tail;
09850 }
09851 else if (!tail) {
09852 (yyval.node) = head;
09853 }
09854 else {
09855 switch (nd_type(head)) {
09856 case NODE_STR:
09857 nd_set_type(head, NODE_DSTR);
09858 break;
09859 case NODE_DSTR:
09860 break;
09861 default:
09862 head = list_append(NEW_DSTR(Qnil), head);
09863 break;
09864 }
09865 (yyval.node) = list_append(head, tail);
09866 }
09867
09868
09869
09870 }
09871 break;
09872
09873 case 456:
09874
09875
09876 #line 4140 "parse.y"
09877 {
09878 (yyval.node) = lex_strterm;
09879 lex_strterm = 0;
09880 lex_state = EXPR_BEG;
09881 }
09882 break;
09883
09884 case 457:
09885
09886
09887 #line 4146 "parse.y"
09888 {
09889
09890 lex_strterm = (yyvsp[(2) - (3)].node);
09891 (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
09892
09893
09894
09895
09896 }
09897 break;
09898
09899 case 458:
09900
09901
09902 #line 4156 "parse.y"
09903 {
09904 (yyvsp[(1) - (1)].val) = cond_stack;
09905 (yyval.val) = cmdarg_stack;
09906 cond_stack = 0;
09907 cmdarg_stack = 0;
09908 }
09909 break;
09910
09911 case 459:
09912
09913
09914 #line 4162 "parse.y"
09915 {
09916 (yyval.node) = lex_strterm;
09917 lex_strterm = 0;
09918 lex_state = EXPR_BEG;
09919 }
09920 break;
09921
09922 case 460:
09923
09924
09925 #line 4168 "parse.y"
09926 {
09927 cond_stack = (yyvsp[(1) - (5)].val);
09928 cmdarg_stack = (yyvsp[(2) - (5)].val);
09929 lex_strterm = (yyvsp[(3) - (5)].node);
09930
09931 if ((yyvsp[(4) - (5)].node)) (yyvsp[(4) - (5)].node)->flags &= ~NODE_FL_NEWLINE;
09932 (yyval.node) = new_evstr((yyvsp[(4) - (5)].node));
09933
09934
09935
09936 }
09937 break;
09938
09939 case 461:
09940
09941
09942 #line 4182 "parse.y"
09943 {
09944
09945 (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
09946
09947
09948
09949 }
09950 break;
09951
09952 case 462:
09953
09954
09955 #line 4190 "parse.y"
09956 {
09957
09958 (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
09959
09960
09961
09962 }
09963 break;
09964
09965 case 463:
09966
09967
09968 #line 4198 "parse.y"
09969 {
09970
09971 (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
09972
09973
09974
09975 }
09976 break;
09977
09978 case 465:
09979
09980
09981 #line 4209 "parse.y"
09982 {
09983 lex_state = EXPR_END;
09984
09985 (yyval.id) = (yyvsp[(2) - (2)].id);
09986
09987
09988
09989 }
09990 break;
09991
09992 case 470:
09993
09994
09995 #line 4226 "parse.y"
09996 {
09997 lex_state = EXPR_END;
09998
09999 if (!((yyval.node) = (yyvsp[(2) - (3)].node))) {
10000 (yyval.node) = NEW_LIT(ID2SYM(rb_intern("")));
10001 }
10002 else {
10003 VALUE lit;
10004
10005 switch (nd_type((yyval.node))) {
10006 case NODE_DSTR:
10007 nd_set_type((yyval.node), NODE_DSYM);
10008 break;
10009 case NODE_STR:
10010 lit = (yyval.node)->nd_lit;
10011 (yyval.node)->nd_lit = ID2SYM(rb_intern_str(lit));
10012 nd_set_type((yyval.node), NODE_LIT);
10013 break;
10014 default:
10015 (yyval.node) = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST((yyval.node)));
10016 break;
10017 }
10018 }
10019
10020
10021
10022 }
10023 break;
10024
10025 case 473:
10026
10027
10028 #line 4258 "parse.y"
10029 {
10030
10031 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
10032
10033
10034
10035 }
10036 break;
10037
10038 case 474:
10039
10040
10041 #line 4266 "parse.y"
10042 {
10043
10044 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
10045
10046
10047
10048 }
10049 break;
10050
10051 case 480:
10052
10053
10054 #line 4282 "parse.y"
10055 {ifndef_ripper((yyval.id) = keyword_nil);}
10056 break;
10057
10058 case 481:
10059
10060
10061 #line 4283 "parse.y"
10062 {ifndef_ripper((yyval.id) = keyword_self);}
10063 break;
10064
10065 case 482:
10066
10067
10068 #line 4284 "parse.y"
10069 {ifndef_ripper((yyval.id) = keyword_true);}
10070 break;
10071
10072 case 483:
10073
10074
10075 #line 4285 "parse.y"
10076 {ifndef_ripper((yyval.id) = keyword_false);}
10077 break;
10078
10079 case 484:
10080
10081
10082 #line 4286 "parse.y"
10083 {ifndef_ripper((yyval.id) = keyword__FILE__);}
10084 break;
10085
10086 case 485:
10087
10088
10089 #line 4287 "parse.y"
10090 {ifndef_ripper((yyval.id) = keyword__LINE__);}
10091 break;
10092
10093 case 486:
10094
10095
10096 #line 4288 "parse.y"
10097 {ifndef_ripper((yyval.id) = keyword__ENCODING__);}
10098 break;
10099
10100 case 487:
10101
10102
10103 #line 4292 "parse.y"
10104 {
10105
10106 if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10107
10108
10109
10110
10111
10112
10113
10114
10115 }
10116 break;
10117
10118 case 488:
10119
10120
10121 #line 4305 "parse.y"
10122 {
10123
10124 if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10125
10126
10127
10128 }
10129 break;
10130
10131 case 489:
10132
10133
10134 #line 4315 "parse.y"
10135 {
10136 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10137
10138
10139
10140
10141 }
10142 break;
10143
10144 case 490:
10145
10146
10147 #line 4323 "parse.y"
10148 {
10149 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10150
10151
10152
10153
10154 }
10155 break;
10156
10157 case 493:
10158
10159
10160 #line 4337 "parse.y"
10161 {
10162
10163 (yyval.node) = 0;
10164
10165
10166
10167 }
10168 break;
10169
10170 case 494:
10171
10172
10173 #line 4345 "parse.y"
10174 {
10175 lex_state = EXPR_BEG;
10176 }
10177 break;
10178
10179 case 495:
10180
10181
10182 #line 4349 "parse.y"
10183 {
10184 (yyval.node) = (yyvsp[(3) - (4)].node);
10185 }
10186 break;
10187
10188 case 496:
10189
10190
10191 #line 4353 "parse.y"
10192 {
10193
10194 yyerrok;
10195 (yyval.node) = 0;
10196
10197
10198
10199
10200 }
10201 break;
10202
10203 case 497:
10204
10205
10206 #line 4365 "parse.y"
10207 {
10208
10209 (yyval.node) = (yyvsp[(2) - (3)].node);
10210
10211
10212
10213 lex_state = EXPR_BEG;
10214 command_start = TRUE;
10215 }
10216 break;
10217
10218 case 498:
10219
10220
10221 #line 4375 "parse.y"
10222 {
10223 (yyval.node) = (yyvsp[(1) - (2)].node);
10224 }
10225 break;
10226
10227 case 499:
10228
10229
10230 #line 4381 "parse.y"
10231 {
10232
10233 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
10234
10235
10236
10237 }
10238 break;
10239
10240 case 500:
10241
10242
10243 #line 4389 "parse.y"
10244 {
10245
10246 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
10247
10248
10249
10250 }
10251 break;
10252
10253 case 501:
10254
10255
10256 #line 4397 "parse.y"
10257 {
10258
10259 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
10260
10261
10262
10263 }
10264 break;
10265
10266 case 502:
10267
10268
10269 #line 4405 "parse.y"
10270 {
10271
10272 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10273
10274
10275
10276 }
10277 break;
10278
10279 case 503:
10280
10281
10282 #line 4413 "parse.y"
10283 {
10284
10285 (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10286
10287
10288
10289 }
10290 break;
10291
10292 case 504:
10293
10294
10295 #line 4421 "parse.y"
10296 {
10297
10298 (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10299
10300
10301
10302 }
10303 break;
10304
10305 case 505:
10306
10307
10308 #line 4429 "parse.y"
10309 {
10310
10311 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
10312
10313
10314
10315 }
10316 break;
10317
10318 case 506:
10319
10320
10321 #line 4437 "parse.y"
10322 {
10323
10324 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10325
10326
10327
10328 }
10329 break;
10330
10331 case 507:
10332
10333
10334 #line 4445 "parse.y"
10335 {
10336
10337 (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10338
10339
10340
10341 }
10342 break;
10343
10344 case 508:
10345
10346
10347 #line 4453 "parse.y"
10348 {
10349
10350 (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
10351
10352
10353
10354 }
10355 break;
10356
10357 case 509:
10358
10359
10360 #line 4461 "parse.y"
10361 {
10362
10363 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10364
10365
10366
10367 }
10368 break;
10369
10370 case 510:
10371
10372
10373 #line 4469 "parse.y"
10374 {
10375
10376 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
10377
10378
10379
10380 }
10381 break;
10382
10383 case 511:
10384
10385
10386 #line 4477 "parse.y"
10387 {
10388
10389 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10390
10391
10392
10393 }
10394 break;
10395
10396 case 512:
10397
10398
10399 #line 4485 "parse.y"
10400 {
10401
10402 (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
10403
10404
10405
10406 }
10407 break;
10408
10409 case 513:
10410
10411
10412 #line 4493 "parse.y"
10413 {
10414
10415 (yyval.node) = new_args(0, 0, 0, 0, 0);
10416
10417
10418
10419 }
10420 break;
10421
10422 case 514:
10423
10424
10425 #line 4503 "parse.y"
10426 {
10427
10428 yyerror("formal argument cannot be a constant");
10429 (yyval.id) = 0;
10430
10431
10432
10433 }
10434 break;
10435
10436 case 515:
10437
10438
10439 #line 4512 "parse.y"
10440 {
10441
10442 yyerror("formal argument cannot be an instance variable");
10443 (yyval.id) = 0;
10444
10445
10446
10447 }
10448 break;
10449
10450 case 516:
10451
10452
10453 #line 4521 "parse.y"
10454 {
10455
10456 yyerror("formal argument cannot be a global variable");
10457 (yyval.id) = 0;
10458
10459
10460
10461 }
10462 break;
10463
10464 case 517:
10465
10466
10467 #line 4530 "parse.y"
10468 {
10469
10470 yyerror("formal argument cannot be a class variable");
10471 (yyval.id) = 0;
10472
10473
10474
10475 }
10476 break;
10477
10478 case 519:
10479
10480
10481 #line 4542 "parse.y"
10482 {
10483 formal_argument(get_id((yyvsp[(1) - (1)].id)));
10484 (yyval.id) = (yyvsp[(1) - (1)].id);
10485 }
10486 break;
10487
10488 case 520:
10489
10490
10491 #line 4549 "parse.y"
10492 {
10493 arg_var(get_id((yyvsp[(1) - (1)].id)));
10494
10495 (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
10496
10497
10498
10499 }
10500 break;
10501
10502 case 521:
10503
10504
10505 #line 4558 "parse.y"
10506 {
10507 ID tid = internal_id();
10508 arg_var(tid);
10509
10510 if (dyna_in_block()) {
10511 (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
10512 }
10513 else {
10514 (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
10515 }
10516 (yyval.node) = NEW_ARGS_AUX(tid, 1);
10517 (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
10518
10519
10520
10521 }
10522 break;
10523
10524 case 523:
10525
10526
10527 #line 4584 "parse.y"
10528 {
10529
10530 (yyval.node) = (yyvsp[(1) - (3)].node);
10531 (yyval.node)->nd_plen++;
10532 (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
10533 rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
10534
10535
10536
10537 }
10538 break;
10539
10540 case 524:
10541
10542
10543 #line 4597 "parse.y"
10544 {
10545 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10546 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10547
10548 (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10549
10550
10551
10552 }
10553 break;
10554
10555 case 525:
10556
10557
10558 #line 4609 "parse.y"
10559 {
10560 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10561 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10562
10563 (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10564
10565
10566
10567 }
10568 break;
10569
10570 case 526:
10571
10572
10573 #line 4621 "parse.y"
10574 {
10575
10576 (yyval.node) = (yyvsp[(1) - (1)].node);
10577
10578
10579
10580 }
10581 break;
10582
10583 case 527:
10584
10585
10586 #line 4629 "parse.y"
10587 {
10588
10589 NODE *opts = (yyvsp[(1) - (3)].node);
10590
10591 while (opts->nd_next) {
10592 opts = opts->nd_next;
10593 }
10594 opts->nd_next = (yyvsp[(3) - (3)].node);
10595 (yyval.node) = (yyvsp[(1) - (3)].node);
10596
10597
10598
10599 }
10600 break;
10601
10602 case 528:
10603
10604
10605 #line 4645 "parse.y"
10606 {
10607
10608 (yyval.node) = (yyvsp[(1) - (1)].node);
10609
10610
10611
10612 }
10613 break;
10614
10615 case 529:
10616
10617
10618 #line 4653 "parse.y"
10619 {
10620
10621 NODE *opts = (yyvsp[(1) - (3)].node);
10622
10623 while (opts->nd_next) {
10624 opts = opts->nd_next;
10625 }
10626 opts->nd_next = (yyvsp[(3) - (3)].node);
10627 (yyval.node) = (yyvsp[(1) - (3)].node);
10628
10629
10630
10631 }
10632 break;
10633
10634 case 532:
10635
10636
10637 #line 4673 "parse.y"
10638 {
10639
10640 if (!is_local_id((yyvsp[(2) - (2)].id)))
10641 yyerror("rest argument must be local variable");
10642
10643 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10644
10645 (yyval.id) = (yyvsp[(2) - (2)].id);
10646
10647
10648
10649 }
10650 break;
10651
10652 case 533:
10653
10654
10655 #line 4686 "parse.y"
10656 {
10657
10658 (yyval.id) = internal_id();
10659 arg_var((yyval.id));
10660
10661
10662
10663 }
10664 break;
10665
10666 case 536:
10667
10668
10669 #line 4701 "parse.y"
10670 {
10671
10672 if (!is_local_id((yyvsp[(2) - (2)].id)))
10673 yyerror("block argument must be local variable");
10674 else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
10675 yyerror("duplicated block argument name");
10676
10677 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10678
10679 (yyval.id) = (yyvsp[(2) - (2)].id);
10680
10681
10682
10683 }
10684 break;
10685
10686 case 537:
10687
10688
10689 #line 4718 "parse.y"
10690 {
10691 (yyval.id) = (yyvsp[(2) - (2)].id);
10692 }
10693 break;
10694
10695 case 538:
10696
10697
10698 #line 4722 "parse.y"
10699 {
10700
10701 (yyval.id) = 0;
10702
10703
10704
10705 }
10706 break;
10707
10708 case 539:
10709
10710
10711 #line 4732 "parse.y"
10712 {
10713
10714 value_expr((yyvsp[(1) - (1)].node));
10715 (yyval.node) = (yyvsp[(1) - (1)].node);
10716 if (!(yyval.node)) (yyval.node) = NEW_NIL();
10717
10718
10719
10720 }
10721 break;
10722
10723 case 540:
10724
10725
10726 #line 4741 "parse.y"
10727 {lex_state = EXPR_BEG;}
10728 break;
10729
10730 case 541:
10731
10732
10733 #line 4742 "parse.y"
10734 {
10735
10736 if ((yyvsp[(3) - (4)].node) == 0) {
10737 yyerror("can't define singleton method for ().");
10738 }
10739 else {
10740 switch (nd_type((yyvsp[(3) - (4)].node))) {
10741 case NODE_STR:
10742 case NODE_DSTR:
10743 case NODE_XSTR:
10744 case NODE_DXSTR:
10745 case NODE_DREGX:
10746 case NODE_LIT:
10747 case NODE_ARRAY:
10748 case NODE_ZARRAY:
10749 yyerror("can't define singleton method for literals");
10750 default:
10751 value_expr((yyvsp[(3) - (4)].node));
10752 break;
10753 }
10754 }
10755 (yyval.node) = (yyvsp[(3) - (4)].node);
10756
10757
10758
10759 }
10760 break;
10761
10762 case 543:
10763
10764
10765 #line 4772 "parse.y"
10766 {
10767
10768 (yyval.node) = (yyvsp[(1) - (2)].node);
10769
10770
10771
10772 }
10773 break;
10774
10775 case 545:
10776
10777
10778 #line 4789 "parse.y"
10779 {
10780
10781 (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
10782
10783
10784
10785 }
10786 break;
10787
10788 case 546:
10789
10790
10791 #line 4799 "parse.y"
10792 {
10793
10794 (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
10795
10796
10797
10798 }
10799 break;
10800
10801 case 547:
10802
10803
10804 #line 4807 "parse.y"
10805 {
10806
10807 (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
10808
10809
10810
10811 }
10812 break;
10813
10814 case 569:
10815
10816
10817 #line 4863 "parse.y"
10818 {yyerrok;}
10819 break;
10820
10821 case 572:
10822
10823
10824 #line 4868 "parse.y"
10825 {yyerrok;}
10826 break;
10827
10828 case 573:
10829
10830
10831 #line 4872 "parse.y"
10832 {
10833
10834 (yyval.node) = 0;
10835
10836
10837
10838 }
10839 break;
10840
10841
10842
10843
10844 #line 10843 "parse.c"
10845 default: break;
10846 }
10847
10848
10849
10850
10851
10852
10853
10854
10855
10856
10857
10858 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
10859
10860 YYPOPSTACK (yylen);
10861 yylen = 0;
10862 YY_STACK_PRINT (yyss, yyssp);
10863
10864 *++yyvsp = yyval;
10865
10866
10867
10868
10869
10870 yyn = yyr1[yyn];
10871
10872 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
10873 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
10874 yystate = yytable[yystate];
10875 else
10876 yystate = yydefgoto[yyn - YYNTOKENS];
10877
10878 goto yynewstate;
10879
10880
10881
10882
10883
10884 yyerrlab:
10885
10886
10887 yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
10888
10889
10890 if (!yyerrstatus)
10891 {
10892 ++yynerrs;
10893 #if ! YYERROR_VERBOSE
10894 parser_yyerror (parser, YY_("syntax error"));
10895 #else
10896 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
10897 yyssp, yytoken)
10898 {
10899 char const *yymsgp = YY_("syntax error");
10900 int yysyntax_error_status;
10901 yysyntax_error_status = YYSYNTAX_ERROR;
10902 if (yysyntax_error_status == 0)
10903 yymsgp = yymsg;
10904 else if (yysyntax_error_status == 1)
10905 {
10906 if (yymsg != yymsgbuf)
10907 YYSTACK_FREE (yymsg);
10908 yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
10909 if (!yymsg)
10910 {
10911 yymsg = yymsgbuf;
10912 yymsg_alloc = sizeof yymsgbuf;
10913 yysyntax_error_status = 2;
10914 }
10915 else
10916 {
10917 yysyntax_error_status = YYSYNTAX_ERROR;
10918 yymsgp = yymsg;
10919 }
10920 }
10921 parser_yyerror (parser, yymsgp);
10922 if (yysyntax_error_status == 2)
10923 goto yyexhaustedlab;
10924 }
10925 # undef YYSYNTAX_ERROR
10926 #endif
10927 }
10928
10929
10930
10931 if (yyerrstatus == 3)
10932 {
10933
10934
10935
10936 if (yychar <= YYEOF)
10937 {
10938
10939 if (yychar == YYEOF)
10940 YYABORT;
10941 }
10942 else
10943 {
10944 yydestruct ("Error: discarding",
10945 yytoken, &yylval, parser);
10946 yychar = YYEMPTY;
10947 }
10948 }
10949
10950
10951
10952 goto yyerrlab1;
10953
10954
10955
10956
10957
10958 yyerrorlab:
10959
10960
10961
10962
10963 if ( 0)
10964 goto yyerrorlab;
10965
10966
10967
10968 YYPOPSTACK (yylen);
10969 yylen = 0;
10970 YY_STACK_PRINT (yyss, yyssp);
10971 yystate = *yyssp;
10972 goto yyerrlab1;
10973
10974
10975
10976
10977
10978 yyerrlab1:
10979 yyerrstatus = 3;
10980
10981 for (;;)
10982 {
10983 yyn = yypact[yystate];
10984 if (!yypact_value_is_default (yyn))
10985 {
10986 yyn += YYTERROR;
10987 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
10988 {
10989 yyn = yytable[yyn];
10990 if (0 < yyn)
10991 break;
10992 }
10993 }
10994
10995
10996 if (yyssp == yyss)
10997 YYABORT;
10998
10999
11000 yydestruct ("Error: popping",
11001 yystos[yystate], yyvsp, parser);
11002 YYPOPSTACK (1);
11003 yystate = *yyssp;
11004 YY_STACK_PRINT (yyss, yyssp);
11005 }
11006
11007 *++yyvsp = yylval;
11008
11009
11010
11011 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
11012
11013 yystate = yyn;
11014 goto yynewstate;
11015
11016
11017
11018
11019
11020 yyacceptlab:
11021 yyresult = 0;
11022 goto yyreturn;
11023
11024
11025
11026
11027 yyabortlab:
11028 yyresult = 1;
11029 goto yyreturn;
11030
11031 #if !defined(yyoverflow) || YYERROR_VERBOSE
11032
11033
11034
11035 yyexhaustedlab:
11036 parser_yyerror (parser, YY_("memory exhausted"));
11037 yyresult = 2;
11038
11039 #endif
11040
11041 yyreturn:
11042 if (yychar != YYEMPTY)
11043 {
11044
11045
11046 yytoken = YYTRANSLATE (yychar);
11047 yydestruct ("Cleanup: discarding lookahead",
11048 yytoken, &yylval, parser);
11049 }
11050
11051
11052 YYPOPSTACK (yylen);
11053 YY_STACK_PRINT (yyss, yyssp);
11054 while (yyssp != yyss)
11055 {
11056 yydestruct ("Cleanup: popping",
11057 yystos[*yyssp], yyvsp, parser);
11058 YYPOPSTACK (1);
11059 }
11060 #ifndef yyoverflow
11061 if (yyss != yyssa)
11062 YYSTACK_FREE (yyss);
11063 #endif
11064 #if YYERROR_VERBOSE
11065 if (yymsg != yymsgbuf)
11066 YYSTACK_FREE (yymsg);
11067 #endif
11068
11069 return YYID (yyresult);
11070 }
11071
11072
11073
11074
11075 #line 4880 "parse.y"
11076
11077 # undef parser
11078 # undef yylex
11079 # undef yylval
11080 # define yylval (*((YYSTYPE*)(parser->parser_yylval)))
11081
11082 static int parser_regx_options(struct parser_params*);
11083 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
11084 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
11085 static int parser_parse_string(struct parser_params*,NODE*);
11086 static int parser_here_document(struct parser_params*,NODE*);
11087
11088
11089 # define nextc() parser_nextc(parser)
11090 # define pushback(c) parser_pushback(parser, (c))
11091 # define newtok() parser_newtok(parser)
11092 # define tokspace(n) parser_tokspace(parser, (n))
11093 # define tokadd(c) parser_tokadd(parser, (c))
11094 # define tok_hex(numlen) parser_tok_hex(parser, (numlen))
11095 # define read_escape(flags,e) parser_read_escape(parser, (flags), (e))
11096 # define tokadd_escape(e) parser_tokadd_escape(parser, (e))
11097 # define regx_options() parser_regx_options(parser)
11098 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,(f),(t),(p),(n),(e))
11099 # define parse_string(n) parser_parse_string(parser,(n))
11100 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, (c), (enc))
11101 # define here_document(n) parser_here_document(parser,(n))
11102 # define heredoc_identifier() parser_heredoc_identifier(parser)
11103 # define heredoc_restore(n) parser_heredoc_restore(parser,(n))
11104 # define whole_match_p(e,l,i) parser_whole_match_p(parser,(e),(l),(i))
11105
11106 #ifndef RIPPER
11107 # define set_yylval_str(x) (yylval.node = NEW_STR(x))
11108 # define set_yylval_num(x) (yylval.num = (x))
11109 # define set_yylval_id(x) (yylval.id = (x))
11110 # define set_yylval_name(x) (yylval.id = (x))
11111 # define set_yylval_literal(x) (yylval.node = NEW_LIT(x))
11112 # define set_yylval_node(x) (yylval.node = (x))
11113 # define yylval_id() (yylval.id)
11114 #else
11115 static inline VALUE
11116 ripper_yylval_id(ID x)
11117 {
11118 return (VALUE)NEW_LASGN(x, ID2SYM(x));
11119 }
11120 # define set_yylval_str(x) (void)(x)
11121 # define set_yylval_num(x) (void)(x)
11122 # define set_yylval_id(x) (void)(x)
11123 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
11124 # define set_yylval_literal(x) (void)(x)
11125 # define set_yylval_node(x) (void)(x)
11126 # define yylval_id() yylval.id
11127 #endif
11128
11129 #ifndef RIPPER
11130 #define ripper_flush(p) (void)(p)
11131 #else
11132 #define ripper_flush(p) ((p)->tokp = (p)->parser_lex_p)
11133
11134 #define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
11135
11136 static int
11137 ripper_has_scan_event(struct parser_params *parser)
11138 {
11139
11140 if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
11141 return lex_p > parser->tokp;
11142 }
11143
11144 static VALUE
11145 ripper_scan_event_val(struct parser_params *parser, int t)
11146 {
11147 VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
11148 VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
11149 ripper_flush(parser);
11150 return rval;
11151 }
11152
11153 static void
11154 ripper_dispatch_scan_event(struct parser_params *parser, int t)
11155 {
11156 if (!ripper_has_scan_event(parser)) return;
11157 yylval_rval = ripper_scan_event_val(parser, t);
11158 }
11159
11160 static void
11161 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
11162 {
11163 if (!ripper_has_scan_event(parser)) return;
11164 (void)ripper_scan_event_val(parser, t);
11165 }
11166
11167 static void
11168 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
11169 {
11170 int saved_line = ruby_sourceline;
11171 const char *saved_tokp = parser->tokp;
11172
11173 ruby_sourceline = parser->delayed_line;
11174 parser->tokp = lex_pbeg + parser->delayed_col;
11175 yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
11176 parser->delayed = Qnil;
11177 ruby_sourceline = saved_line;
11178 parser->tokp = saved_tokp;
11179 }
11180 #endif
11181
11182 #include "ruby/regex.h"
11183 #include "ruby/util.h"
11184
11185
11186
11187
11188
11189 #undef SIGN_EXTEND_CHAR
11190 #if __STDC__
11191 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
11192 #else
11193
11194 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
11195 #endif
11196
11197 #define parser_encoding_name() (parser->enc->name)
11198 #define parser_mbclen() mbclen((lex_p-1),lex_pend,parser->enc)
11199 #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,parser->enc)
11200 #define is_identchar(p,e,enc) (rb_enc_isalnum(*(p),(enc)) || (*(p)) == '_' || !ISASCII(*(p)))
11201 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,parser->enc))
11202
11203 #define parser_isascii() ISASCII(*(lex_p-1))
11204
11205 #ifndef RIPPER
11206 static int
11207 token_info_get_column(struct parser_params *parser, const char *token)
11208 {
11209 int column = 1;
11210 const char *p, *pend = lex_p - strlen(token);
11211 for (p = lex_pbeg; p < pend; p++) {
11212 if (*p == '\t') {
11213 column = (((column - 1) / 8) + 1) * 8;
11214 }
11215 column++;
11216 }
11217 return column;
11218 }
11219
11220 static int
11221 token_info_has_nonspaces(struct parser_params *parser, const char *token)
11222 {
11223 const char *p, *pend = lex_p - strlen(token);
11224 for (p = lex_pbeg; p < pend; p++) {
11225 if (*p != ' ' && *p != '\t') {
11226 return 1;
11227 }
11228 }
11229 return 0;
11230 }
11231
11232 #undef token_info_push
11233 static void
11234 token_info_push(struct parser_params *parser, const char *token)
11235 {
11236 token_info *ptinfo;
11237
11238 if (!parser->parser_token_info_enabled) return;
11239 ptinfo = ALLOC(token_info);
11240 ptinfo->token = token;
11241 ptinfo->linenum = ruby_sourceline;
11242 ptinfo->column = token_info_get_column(parser, token);
11243 ptinfo->nonspc = token_info_has_nonspaces(parser, token);
11244 ptinfo->next = parser->parser_token_info;
11245
11246 parser->parser_token_info = ptinfo;
11247 }
11248
11249 #undef token_info_pop
11250 static void
11251 token_info_pop(struct parser_params *parser, const char *token)
11252 {
11253 int linenum;
11254 token_info *ptinfo = parser->parser_token_info;
11255
11256 if (!ptinfo) return;
11257 parser->parser_token_info = ptinfo->next;
11258 if (token_info_get_column(parser, token) == ptinfo->column) {
11259 goto finish;
11260 }
11261 linenum = ruby_sourceline;
11262 if (linenum == ptinfo->linenum) {
11263 goto finish;
11264 }
11265 if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) {
11266 goto finish;
11267 }
11268 if (parser->parser_token_info_enabled) {
11269 rb_compile_warn(ruby_sourcefile, linenum,
11270 "mismatched indentations at '%s' with '%s' at %d",
11271 token, ptinfo->token, ptinfo->linenum);
11272 }
11273
11274 finish:
11275 xfree(ptinfo);
11276 }
11277 #endif
11278
11279 static int
11280 parser_yyerror(struct parser_params *parser, const char *msg)
11281 {
11282 #ifndef RIPPER
11283 const int max_line_margin = 30;
11284 const char *p, *pe;
11285 char *buf;
11286 long len;
11287 int i;
11288
11289 compile_error(PARSER_ARG "%s", msg);
11290 p = lex_p;
11291 while (lex_pbeg <= p) {
11292 if (*p == '\n') break;
11293 p--;
11294 }
11295 p++;
11296
11297 pe = lex_p;
11298 while (pe < lex_pend) {
11299 if (*pe == '\n') break;
11300 pe++;
11301 }
11302
11303 len = pe - p;
11304 if (len > 4) {
11305 char *p2;
11306 const char *pre = "", *post = "";
11307
11308 if (len > max_line_margin * 2 + 10) {
11309 if (lex_p - p > max_line_margin) {
11310 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
11311 pre = "...";
11312 }
11313 if (pe - lex_p > max_line_margin) {
11314 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
11315 post = "...";
11316 }
11317 len = pe - p;
11318 }
11319 buf = ALLOCA_N(char, len+2);
11320 MEMCPY(buf, p, char, len);
11321 buf[len] = '\0';
11322 rb_compile_error_append("%s%s%s", pre, buf, post);
11323
11324 i = (int)(lex_p - p);
11325 p2 = buf; pe = buf + len;
11326
11327 while (p2 < pe) {
11328 if (*p2 != '\t') *p2 = ' ';
11329 p2++;
11330 }
11331 buf[i] = '^';
11332 buf[i+1] = '\0';
11333 rb_compile_error_append("%s%s", pre, buf);
11334 }
11335 #else
11336 dispatch1(parse_error, STR_NEW2(msg));
11337 #endif
11338 return 0;
11339 }
11340
11341 static void parser_prepare(struct parser_params *parser);
11342
11343 #ifndef RIPPER
11344 static VALUE
11345 debug_lines(const char *f)
11346 {
11347 ID script_lines;
11348 CONST_ID(script_lines, "SCRIPT_LINES__");
11349 if (rb_const_defined_at(rb_cObject, script_lines)) {
11350 VALUE hash = rb_const_get_at(rb_cObject, script_lines);
11351 if (TYPE(hash) == T_HASH) {
11352 VALUE fname = rb_external_str_new_with_enc(f, strlen(f), rb_filesystem_encoding());
11353 VALUE lines = rb_ary_new();
11354 rb_hash_aset(hash, fname, lines);
11355 return lines;
11356 }
11357 }
11358 return 0;
11359 }
11360
11361 static VALUE
11362 coverage(const char *f, int n)
11363 {
11364 VALUE coverages = rb_get_coverages();
11365 if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
11366 VALUE fname = rb_external_str_new_with_enc(f, strlen(f), rb_filesystem_encoding());
11367 VALUE lines = rb_ary_new2(n);
11368 int i;
11369 RBASIC(lines)->klass = 0;
11370 for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil;
11371 RARRAY(lines)->as.heap.len = n;
11372 rb_hash_aset(coverages, fname, lines);
11373 return lines;
11374 }
11375 return 0;
11376 }
11377
11378 static int
11379 e_option_supplied(struct parser_params *parser)
11380 {
11381 return strcmp(ruby_sourcefile, "-e") == 0;
11382 }
11383
11384 static VALUE
11385 yycompile0(VALUE arg, int tracing)
11386 {
11387 int n;
11388 NODE *tree;
11389 struct parser_params *parser = (struct parser_params *)arg;
11390
11391 if (!compile_for_eval && rb_safe_level() == 0) {
11392 ruby_debug_lines = debug_lines(ruby_sourcefile);
11393 if (ruby_debug_lines && ruby_sourceline > 0) {
11394 VALUE str = STR_NEW0();
11395 n = ruby_sourceline;
11396 do {
11397 rb_ary_push(ruby_debug_lines, str);
11398 } while (--n);
11399 }
11400
11401 if (!e_option_supplied(parser)) {
11402 ruby_coverage = coverage(ruby_sourcefile, ruby_sourceline);
11403 }
11404 }
11405
11406 parser_prepare(parser);
11407 deferred_nodes = 0;
11408 #ifndef RIPPER
11409 parser->parser_token_info_enabled = !compile_for_eval && RTEST(ruby_verbose);
11410 #endif
11411 n = yyparse((void*)parser);
11412 ruby_debug_lines = 0;
11413 ruby_coverage = 0;
11414 compile_for_eval = 0;
11415
11416 lex_strterm = 0;
11417 lex_p = lex_pbeg = lex_pend = 0;
11418 lex_lastline = lex_nextline = 0;
11419 if (parser->nerr) {
11420 return 0;
11421 }
11422 tree = ruby_eval_tree;
11423 if (!tree) {
11424 tree = NEW_NIL();
11425 }
11426 else if (ruby_eval_tree_begin) {
11427 tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
11428 }
11429 return (VALUE)tree;
11430 }
11431
11432 static NODE*
11433 yycompile(struct parser_params *parser, const char *f, int line)
11434 {
11435 ruby_sourcefile = ruby_strdup(f);
11436 ruby_sourceline = line - 1;
11437 return (NODE *)ruby_suppress_tracing(yycompile0, (VALUE)parser, TRUE);
11438 }
11439 #endif
11440
11441 static rb_encoding *
11442 must_be_ascii_compatible(VALUE s)
11443 {
11444 rb_encoding *enc = rb_enc_get(s);
11445 if (!rb_enc_asciicompat(enc)) {
11446 rb_raise(rb_eArgError, "invalid source encoding");
11447 }
11448 return enc;
11449 }
11450
11451 static VALUE
11452 lex_get_str(struct parser_params *parser, VALUE s)
11453 {
11454 char *beg, *end, *pend;
11455 rb_encoding *enc = must_be_ascii_compatible(s);
11456
11457 beg = RSTRING_PTR(s);
11458 if (lex_gets_ptr) {
11459 if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
11460 beg += lex_gets_ptr;
11461 }
11462 pend = RSTRING_PTR(s) + RSTRING_LEN(s);
11463 end = beg;
11464 while (end < pend) {
11465 if (*end++ == '\n') break;
11466 }
11467 lex_gets_ptr = end - RSTRING_PTR(s);
11468 return rb_enc_str_new(beg, end - beg, enc);
11469 }
11470
11471 static VALUE
11472 lex_getline(struct parser_params *parser)
11473 {
11474 VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
11475 if (NIL_P(line)) return line;
11476 must_be_ascii_compatible(line);
11477 #ifndef RIPPER
11478 if (ruby_debug_lines) {
11479 rb_enc_associate(line, parser->enc);
11480 rb_ary_push(ruby_debug_lines, line);
11481 }
11482 if (ruby_coverage) {
11483 rb_ary_push(ruby_coverage, Qnil);
11484 }
11485 #endif
11486 return line;
11487 }
11488
11489 #ifdef RIPPER
11490 static rb_data_type_t parser_data_type;
11491 #else
11492 static const rb_data_type_t parser_data_type;
11493
11494 static NODE*
11495 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11496 {
11497 struct parser_params *parser;
11498 NODE *node;
11499 volatile VALUE tmp;
11500
11501 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11502 lex_gets = lex_get_str;
11503 lex_gets_ptr = 0;
11504 lex_input = s;
11505 lex_pbeg = lex_p = lex_pend = 0;
11506 compile_for_eval = rb_parse_in_eval();
11507
11508 node = yycompile(parser, f, line);
11509 tmp = vparser;
11510
11511 return node;
11512 }
11513
11514 NODE*
11515 rb_compile_string(const char *f, VALUE s, int line)
11516 {
11517 must_be_ascii_compatible(s);
11518 return parser_compile_string(rb_parser_new(), f, s, line);
11519 }
11520
11521 NODE*
11522 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11523 {
11524 must_be_ascii_compatible(s);
11525 return parser_compile_string(vparser, f, s, line);
11526 }
11527
11528 NODE*
11529 rb_compile_cstr(const char *f, const char *s, int len, int line)
11530 {
11531 VALUE str = rb_str_new(s, len);
11532 return parser_compile_string(rb_parser_new(), f, str, line);
11533 }
11534
11535 NODE*
11536 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
11537 {
11538 VALUE str = rb_str_new(s, len);
11539 return parser_compile_string(vparser, f, str, line);
11540 }
11541
11542 static VALUE
11543 lex_io_gets(struct parser_params *parser, VALUE io)
11544 {
11545 return rb_io_gets(io);
11546 }
11547
11548 NODE*
11549 rb_compile_file(const char *f, VALUE file, int start)
11550 {
11551 VALUE volatile vparser = rb_parser_new();
11552
11553 return rb_parser_compile_file(vparser, f, file, start);
11554 }
11555
11556 NODE*
11557 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
11558 {
11559 struct parser_params *parser;
11560 volatile VALUE tmp;
11561 NODE *node;
11562
11563 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11564 lex_gets = lex_io_gets;
11565 lex_input = file;
11566 lex_pbeg = lex_p = lex_pend = 0;
11567 compile_for_eval = rb_parse_in_eval();
11568
11569 node = yycompile(parser, f, start);
11570 tmp = vparser;
11571
11572 return node;
11573 }
11574 #endif
11575
11576 #define STR_FUNC_ESCAPE 0x01
11577 #define STR_FUNC_EXPAND 0x02
11578 #define STR_FUNC_REGEXP 0x04
11579 #define STR_FUNC_QWORDS 0x08
11580 #define STR_FUNC_SYMBOL 0x10
11581 #define STR_FUNC_INDENT 0x20
11582
11583 enum string_type {
11584 str_squote = (0),
11585 str_dquote = (STR_FUNC_EXPAND),
11586 str_xquote = (STR_FUNC_EXPAND),
11587 str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND),
11588 str_sword = (STR_FUNC_QWORDS),
11589 str_dword = (STR_FUNC_QWORDS|STR_FUNC_EXPAND),
11590 str_ssym = (STR_FUNC_SYMBOL),
11591 str_dsym = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND)
11592 };
11593
11594 static VALUE
11595 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
11596 {
11597 VALUE str;
11598
11599 str = rb_enc_str_new(p, n, enc);
11600 if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
11601 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
11602 }
11603 else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
11604 rb_enc_associate(str, rb_ascii8bit_encoding());
11605 }
11606 }
11607
11608 return str;
11609 }
11610
11611 #define lex_goto_eol(parser) ((parser)->parser_lex_p = (parser)->parser_lex_pend)
11612 #define lex_eol_p() (lex_p >= lex_pend)
11613 #define peek(c) peek_n((c), 0)
11614 #define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n])
11615
11616 static inline int
11617 parser_nextc(struct parser_params *parser)
11618 {
11619 int c;
11620
11621 if (lex_p == lex_pend) {
11622 VALUE v = lex_nextline;
11623 lex_nextline = 0;
11624 if (!v) {
11625 if (parser->eofp)
11626 return -1;
11627
11628 if (!lex_input || NIL_P(v = lex_getline(parser))) {
11629 parser->eofp = Qtrue;
11630 lex_goto_eol(parser);
11631 return -1;
11632 }
11633 }
11634 {
11635 #ifdef RIPPER
11636 if (parser->tokp < lex_pend) {
11637 if (NIL_P(parser->delayed)) {
11638 parser->delayed = rb_str_buf_new(1024);
11639 rb_enc_associate(parser->delayed, parser->enc);
11640 rb_str_buf_cat(parser->delayed,
11641 parser->tokp, lex_pend - parser->tokp);
11642 parser->delayed_line = ruby_sourceline;
11643 parser->delayed_col = (int)(parser->tokp - lex_pbeg);
11644 }
11645 else {
11646 rb_str_buf_cat(parser->delayed,
11647 parser->tokp, lex_pend - parser->tokp);
11648 }
11649 }
11650 #endif
11651 if (heredoc_end > 0) {
11652 ruby_sourceline = heredoc_end;
11653 heredoc_end = 0;
11654 }
11655 ruby_sourceline++;
11656 parser->line_count++;
11657 lex_pbeg = lex_p = RSTRING_PTR(v);
11658 lex_pend = lex_p + RSTRING_LEN(v);
11659 ripper_flush(parser);
11660 lex_lastline = v;
11661 }
11662 }
11663 c = (unsigned char)*lex_p++;
11664 if (c == '\r' && peek('\n')) {
11665 lex_p++;
11666 c = '\n';
11667 }
11668
11669 return c;
11670 }
11671
11672 static void
11673 parser_pushback(struct parser_params *parser, int c)
11674 {
11675 if (c == -1) return;
11676 lex_p--;
11677 if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
11678 lex_p--;
11679 }
11680 }
11681
11682 #define was_bol() (lex_p == lex_pbeg + 1)
11683
11684 #define tokfix() (tokenbuf[tokidx]='\0')
11685 #define tok() tokenbuf
11686 #define toklen() tokidx
11687 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
11688
11689 static char*
11690 parser_newtok(struct parser_params *parser)
11691 {
11692 tokidx = 0;
11693 if (!tokenbuf) {
11694 toksiz = 60;
11695 tokenbuf = ALLOC_N(char, 60);
11696 }
11697 if (toksiz > 4096) {
11698 toksiz = 60;
11699 REALLOC_N(tokenbuf, char, 60);
11700 }
11701 return tokenbuf;
11702 }
11703
11704 static char *
11705 parser_tokspace(struct parser_params *parser, int n)
11706 {
11707 tokidx += n;
11708
11709 if (tokidx >= toksiz) {
11710 do {toksiz *= 2;} while (toksiz < tokidx);
11711 REALLOC_N(tokenbuf, char, toksiz);
11712 }
11713 return &tokenbuf[tokidx-n];
11714 }
11715
11716 static void
11717 parser_tokadd(struct parser_params *parser, int c)
11718 {
11719 tokenbuf[tokidx++] = (char)c;
11720 if (tokidx >= toksiz) {
11721 toksiz *= 2;
11722 REALLOC_N(tokenbuf, char, toksiz);
11723 }
11724 }
11725
11726 static int
11727 parser_tok_hex(struct parser_params *parser, size_t *numlen)
11728 {
11729 int c;
11730
11731 c = scan_hex(lex_p, 2, numlen);
11732 if (!*numlen) {
11733 yyerror("invalid hex escape");
11734 return 0;
11735 }
11736 lex_p += *numlen;
11737 return c;
11738 }
11739
11740 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
11741
11742 static int
11743 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
11744 int string_literal, int symbol_literal, int regexp_literal)
11745 {
11746
11747
11748
11749
11750
11751
11752
11753 int codepoint;
11754 size_t numlen;
11755
11756 if (regexp_literal) { tokadd('\\'); tokadd('u'); }
11757
11758 if (peek('{')) {
11759 do {
11760 if (regexp_literal) { tokadd(*lex_p); }
11761 nextc();
11762 codepoint = scan_hex(lex_p, 6, &numlen);
11763 if (numlen == 0) {
11764 yyerror("invalid Unicode escape");
11765 return 0;
11766 }
11767 if (codepoint > 0x10ffff) {
11768 yyerror("invalid Unicode codepoint (too large)");
11769 return 0;
11770 }
11771 lex_p += numlen;
11772 if (regexp_literal) {
11773 tokcopy((int)numlen);
11774 }
11775 else if (codepoint >= 0x80) {
11776 *encp = UTF8_ENC();
11777 if (string_literal) tokaddmbc(codepoint, *encp);
11778 }
11779 else if (string_literal) {
11780 tokadd(codepoint);
11781 }
11782 } while (string_literal && (peek(' ') || peek('\t')));
11783
11784 if (!peek('}')) {
11785 yyerror("unterminated Unicode escape");
11786 return 0;
11787 }
11788
11789 if (regexp_literal) { tokadd('}'); }
11790 nextc();
11791 }
11792 else {
11793 codepoint = scan_hex(lex_p, 4, &numlen);
11794 if (numlen < 4) {
11795 yyerror("invalid Unicode escape");
11796 return 0;
11797 }
11798 lex_p += 4;
11799 if (regexp_literal) {
11800 tokcopy(4);
11801 }
11802 else if (codepoint >= 0x80) {
11803 *encp = UTF8_ENC();
11804 if (string_literal) tokaddmbc(codepoint, *encp);
11805 }
11806 else if (string_literal) {
11807 tokadd(codepoint);
11808 }
11809 }
11810
11811 return codepoint;
11812 }
11813
11814 #define ESCAPE_CONTROL 1
11815 #define ESCAPE_META 2
11816
11817 static int
11818 parser_read_escape(struct parser_params *parser, int flags,
11819 rb_encoding **encp)
11820 {
11821 int c;
11822 size_t numlen;
11823
11824 switch (c = nextc()) {
11825 case '\\':
11826 return c;
11827
11828 case 'n':
11829 return '\n';
11830
11831 case 't':
11832 return '\t';
11833
11834 case 'r':
11835 return '\r';
11836
11837 case 'f':
11838 return '\f';
11839
11840 case 'v':
11841 return '\13';
11842
11843 case 'a':
11844 return '\007';
11845
11846 case 'e':
11847 return 033;
11848
11849 case '0': case '1': case '2': case '3':
11850 case '4': case '5': case '6': case '7':
11851 pushback(c);
11852 c = scan_oct(lex_p, 3, &numlen);
11853 lex_p += numlen;
11854 return c;
11855
11856 case 'x':
11857 c = tok_hex(&numlen);
11858 if (numlen == 0) return 0;
11859 return c;
11860
11861 case 'b':
11862 return '\010';
11863
11864 case 's':
11865 return ' ';
11866
11867 case 'M':
11868 if (flags & ESCAPE_META) goto eof;
11869 if ((c = nextc()) != '-') {
11870 pushback(c);
11871 goto eof;
11872 }
11873 if ((c = nextc()) == '\\') {
11874 if (peek('u')) goto eof;
11875 return read_escape(flags|ESCAPE_META, encp) | 0x80;
11876 }
11877 else if (c == -1 || !ISASCII(c)) goto eof;
11878 else {
11879 return ((c & 0xff) | 0x80);
11880 }
11881
11882 case 'C':
11883 if ((c = nextc()) != '-') {
11884 pushback(c);
11885 goto eof;
11886 }
11887 case 'c':
11888 if (flags & ESCAPE_CONTROL) goto eof;
11889 if ((c = nextc())== '\\') {
11890 if (peek('u')) goto eof;
11891 c = read_escape(flags|ESCAPE_CONTROL, encp);
11892 }
11893 else if (c == '?')
11894 return 0177;
11895 else if (c == -1 || !ISASCII(c)) goto eof;
11896 return c & 0x9f;
11897
11898 eof:
11899 case -1:
11900 yyerror("Invalid escape character syntax");
11901 return '\0';
11902
11903 default:
11904 return c;
11905 }
11906 }
11907
11908 static void
11909 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
11910 {
11911 int len = rb_enc_codelen(c, enc);
11912 rb_enc_mbcput(c, tokspace(len), enc);
11913 }
11914
11915 static int
11916 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
11917 {
11918 int c;
11919 int flags = 0;
11920 size_t numlen;
11921
11922 first:
11923 switch (c = nextc()) {
11924 case '\n':
11925 return 0;
11926
11927 case '0': case '1': case '2': case '3':
11928 case '4': case '5': case '6': case '7':
11929 {
11930 ruby_scan_oct(--lex_p, 3, &numlen);
11931 if (numlen == 0) goto eof;
11932 lex_p += numlen;
11933 tokcopy((int)numlen + 1);
11934 }
11935 return 0;
11936
11937 case 'x':
11938 {
11939 tok_hex(&numlen);
11940 if (numlen == 0) return -1;
11941 tokcopy((int)numlen + 2);
11942 }
11943 return 0;
11944
11945 case 'M':
11946 if (flags & ESCAPE_META) goto eof;
11947 if ((c = nextc()) != '-') {
11948 pushback(c);
11949 goto eof;
11950 }
11951 tokcopy(3);
11952 flags |= ESCAPE_META;
11953 goto escaped;
11954
11955 case 'C':
11956 if (flags & ESCAPE_CONTROL) goto eof;
11957 if ((c = nextc()) != '-') {
11958 pushback(c);
11959 goto eof;
11960 }
11961 tokcopy(3);
11962 goto escaped;
11963
11964 case 'c':
11965 if (flags & ESCAPE_CONTROL) goto eof;
11966 tokcopy(2);
11967 flags |= ESCAPE_CONTROL;
11968 escaped:
11969 if ((c = nextc()) == '\\') {
11970 goto first;
11971 }
11972 else if (c == -1) goto eof;
11973 tokadd(c);
11974 return 0;
11975
11976 eof:
11977 case -1:
11978 yyerror("Invalid escape character syntax");
11979 return -1;
11980
11981 default:
11982 tokadd('\\');
11983 tokadd(c);
11984 }
11985 return 0;
11986 }
11987
11988 static int
11989 parser_regx_options(struct parser_params *parser)
11990 {
11991 int kcode = 0;
11992 int kopt = 0;
11993 int options = 0;
11994 int c, opt, kc;
11995
11996 newtok();
11997 while (c = nextc(), ISALPHA(c)) {
11998 if (c == 'o') {
11999 options |= RE_OPTION_ONCE;
12000 }
12001 else if (rb_char_to_option_kcode(c, &opt, &kc)) {
12002 if (kc >= 0) {
12003 if (kc != rb_ascii8bit_encindex()) kcode = c;
12004 kopt = opt;
12005 }
12006 else {
12007 options |= opt;
12008 }
12009 }
12010 else {
12011 tokadd(c);
12012 }
12013 }
12014 options |= kopt;
12015 pushback(c);
12016 if (toklen()) {
12017 tokfix();
12018 compile_error(PARSER_ARG "unknown regexp option%s - %s",
12019 toklen() > 1 ? "s" : "", tok());
12020 }
12021 return options | RE_OPTION_ENCODING(kcode);
12022 }
12023
12024 static void
12025 dispose_string(VALUE str)
12026 {
12027
12028 if (RBASIC(str)->flags & RSTRING_NOEMBED)
12029 xfree(RSTRING_PTR(str));
12030 rb_gc_force_recycle(str);
12031 }
12032
12033 static int
12034 parser_tokadd_mbchar(struct parser_params *parser, int c)
12035 {
12036 int len = parser_precise_mbclen();
12037 if (!MBCLEN_CHARFOUND_P(len)) {
12038 compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
12039 return -1;
12040 }
12041 tokadd(c);
12042 lex_p += --len;
12043 if (len > 0) tokcopy(len);
12044 return c;
12045 }
12046
12047 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c))
12048
12049 static int
12050 parser_tokadd_string(struct parser_params *parser,
12051 int func, int term, int paren, long *nest,
12052 rb_encoding **encp)
12053 {
12054 int c;
12055 int has_nonascii = 0;
12056 rb_encoding *enc = *encp;
12057 char *errbuf = 0;
12058 static const char mixed_msg[] = "%s mixed within %s source";
12059
12060 #define mixed_error(enc1, enc2) if (!errbuf) { \
12061 size_t len = sizeof(mixed_msg) - 4; \
12062 len += strlen(rb_enc_name(enc1)); \
12063 len += strlen(rb_enc_name(enc2)); \
12064 errbuf = ALLOCA_N(char, len); \
12065 snprintf(errbuf, len, mixed_msg, \
12066 rb_enc_name(enc1), \
12067 rb_enc_name(enc2)); \
12068 yyerror(errbuf); \
12069 }
12070 #define mixed_escape(beg, enc1, enc2) do { \
12071 const char *pos = lex_p; \
12072 lex_p = (beg); \
12073 mixed_error((enc1), (enc2)); \
12074 lex_p = pos; \
12075 } while (0)
12076
12077 while ((c = nextc()) != -1) {
12078 if (paren && c == paren) {
12079 ++*nest;
12080 }
12081 else if (c == term) {
12082 if (!nest || !*nest) {
12083 pushback(c);
12084 break;
12085 }
12086 --*nest;
12087 }
12088 else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
12089 int c2 = *lex_p;
12090 if (c2 == '$' || c2 == '@' || c2 == '{') {
12091 pushback(c);
12092 break;
12093 }
12094 }
12095 else if (c == '\\') {
12096 const char *beg = lex_p - 1;
12097 c = nextc();
12098 switch (c) {
12099 case '\n':
12100 if (func & STR_FUNC_QWORDS) break;
12101 if (func & STR_FUNC_EXPAND) continue;
12102 tokadd('\\');
12103 break;
12104
12105 case '\\':
12106 if (func & STR_FUNC_ESCAPE) tokadd(c);
12107 break;
12108
12109 case 'u':
12110 if ((func & STR_FUNC_EXPAND) == 0) {
12111 tokadd('\\');
12112 break;
12113 }
12114 parser_tokadd_utf8(parser, &enc, 1,
12115 func & STR_FUNC_SYMBOL,
12116 func & STR_FUNC_REGEXP);
12117 if (has_nonascii && enc != *encp) {
12118 mixed_escape(beg, enc, *encp);
12119 }
12120 continue;
12121
12122 default:
12123 if (c == -1) return -1;
12124 if (!ISASCII(c)) {
12125 tokadd('\\');
12126 goto non_ascii;
12127 }
12128 if (func & STR_FUNC_REGEXP) {
12129 pushback(c);
12130 if ((c = tokadd_escape(&enc)) < 0)
12131 return -1;
12132 if (has_nonascii && enc != *encp) {
12133 mixed_escape(beg, enc, *encp);
12134 }
12135 continue;
12136 }
12137 else if (func & STR_FUNC_EXPAND) {
12138 pushback(c);
12139 if (func & STR_FUNC_ESCAPE) tokadd('\\');
12140 c = read_escape(0, &enc);
12141 }
12142 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12143
12144 }
12145 else if (c != term && !(paren && c == paren)) {
12146 tokadd('\\');
12147 pushback(c);
12148 continue;
12149 }
12150 }
12151 }
12152 else if (!parser_isascii()) {
12153 non_ascii:
12154 has_nonascii = 1;
12155 if (enc != *encp) {
12156 mixed_error(enc, *encp);
12157 continue;
12158 }
12159 if (tokadd_mbchar(c) == -1) return -1;
12160 continue;
12161 }
12162 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12163 pushback(c);
12164 break;
12165 }
12166 if (c & 0x80) {
12167 has_nonascii = 1;
12168 if (enc != *encp) {
12169 mixed_error(enc, *encp);
12170 continue;
12171 }
12172 }
12173 tokadd(c);
12174 }
12175 *encp = enc;
12176 return c;
12177 }
12178
12179 #define NEW_STRTERM(func, term, paren) \
12180 rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
12181
12182 static int
12183 parser_parse_string(struct parser_params *parser, NODE *quote)
12184 {
12185 int func = (int)quote->nd_func;
12186 int term = nd_term(quote);
12187 int paren = nd_paren(quote);
12188 int c, space = 0;
12189 rb_encoding *enc = parser->enc;
12190
12191 if (func == -1) return tSTRING_END;
12192 c = nextc();
12193 if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12194 do {c = nextc();} while (ISSPACE(c));
12195 space = 1;
12196 }
12197 if (c == term && !quote->nd_nest) {
12198 if (func & STR_FUNC_QWORDS) {
12199 quote->nd_func = -1;
12200 return ' ';
12201 }
12202 if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
12203 set_yylval_num(regx_options());
12204 return tREGEXP_END;
12205 }
12206 if (space) {
12207 pushback(c);
12208 return ' ';
12209 }
12210 newtok();
12211 if ((func & STR_FUNC_EXPAND) && c == '#') {
12212 switch (c = nextc()) {
12213 case '$':
12214 case '@':
12215 pushback(c);
12216 return tSTRING_DVAR;
12217 case '{':
12218 return tSTRING_DBEG;
12219 }
12220 tokadd('#');
12221 }
12222 pushback(c);
12223 if (tokadd_string(func, term, paren, "e->nd_nest,
12224 &enc) == -1) {
12225 ruby_sourceline = nd_line(quote);
12226 if (func & STR_FUNC_REGEXP) {
12227 if (parser->eofp)
12228 compile_error(PARSER_ARG "unterminated regexp meets end of file");
12229 return tREGEXP_END;
12230 }
12231 else {
12232 if (parser->eofp)
12233 compile_error(PARSER_ARG "unterminated string meets end of file");
12234 return tSTRING_END;
12235 }
12236 }
12237
12238 tokfix();
12239 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12240
12241 #ifdef RIPPER
12242 if (!NIL_P(parser->delayed)) {
12243 ptrdiff_t len = lex_p - parser->tokp;
12244 if (len > 0) {
12245 rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
12246 }
12247 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12248 parser->tokp = lex_p;
12249 }
12250 #endif
12251
12252 return tSTRING_CONTENT;
12253 }
12254
12255 static int
12256 parser_heredoc_identifier(struct parser_params *parser)
12257 {
12258 int c = nextc(), term, func = 0;
12259 long len;
12260
12261 if (c == '-') {
12262 c = nextc();
12263 func = STR_FUNC_INDENT;
12264 }
12265 switch (c) {
12266 case '\'':
12267 func |= str_squote; goto quoted;
12268 case '"':
12269 func |= str_dquote; goto quoted;
12270 case '`':
12271 func |= str_xquote;
12272 quoted:
12273 newtok();
12274 tokadd(func);
12275 term = c;
12276 while ((c = nextc()) != -1 && c != term) {
12277 if (tokadd_mbchar(c) == -1) return 0;
12278 }
12279 if (c == -1) {
12280 compile_error(PARSER_ARG "unterminated here document identifier");
12281 return 0;
12282 }
12283 break;
12284
12285 default:
12286 if (!parser_is_identchar()) {
12287 pushback(c);
12288 if (func & STR_FUNC_INDENT) {
12289 pushback('-');
12290 }
12291 return 0;
12292 }
12293 newtok();
12294 term = '"';
12295 tokadd(func |= str_dquote);
12296 do {
12297 if (tokadd_mbchar(c) == -1) return 0;
12298 } while ((c = nextc()) != -1 && parser_is_identchar());
12299 pushback(c);
12300 break;
12301 }
12302
12303 tokfix();
12304 #ifdef RIPPER
12305 ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
12306 #endif
12307 len = lex_p - lex_pbeg;
12308 lex_goto_eol(parser);
12309 lex_strterm = rb_node_newnode(NODE_HEREDOC,
12310 STR_NEW(tok(), toklen()),
12311 len,
12312 lex_lastline);
12313 nd_set_line(lex_strterm, ruby_sourceline);
12314 ripper_flush(parser);
12315 return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
12316 }
12317
12318 static void
12319 parser_heredoc_restore(struct parser_params *parser, NODE *here)
12320 {
12321 VALUE line;
12322
12323 line = here->nd_orig;
12324 lex_lastline = line;
12325 lex_pbeg = RSTRING_PTR(line);
12326 lex_pend = lex_pbeg + RSTRING_LEN(line);
12327 lex_p = lex_pbeg + here->nd_nth;
12328 heredoc_end = ruby_sourceline;
12329 ruby_sourceline = nd_line(here);
12330 dispose_string(here->nd_lit);
12331 rb_gc_force_recycle((VALUE)here);
12332 ripper_flush(parser);
12333 }
12334
12335 static int
12336 parser_whole_match_p(struct parser_params *parser,
12337 const char *eos, long len, int indent)
12338 {
12339 const char *p = lex_pbeg;
12340 long n;
12341
12342 if (indent) {
12343 while (*p && ISSPACE(*p)) p++;
12344 }
12345 n = lex_pend - (p + len);
12346 if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE;
12347 return strncmp(eos, p, len) == 0;
12348 }
12349
12350 #ifdef RIPPER
12351 static void
12352 ripper_dispatch_heredoc_end(struct parser_params *parser)
12353 {
12354 if (!NIL_P(parser->delayed))
12355 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12356 lex_goto_eol(parser);
12357 ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
12358 }
12359
12360 #define dispatch_heredoc_end() ripper_dispatch_heredoc_end(parser)
12361 #else
12362 #define dispatch_heredoc_end() ((void)0)
12363 #endif
12364
12365 static int
12366 parser_here_document(struct parser_params *parser, NODE *here)
12367 {
12368 int c, func, indent = 0;
12369 const char *eos, *p, *pend;
12370 long len;
12371 VALUE str = 0;
12372 rb_encoding *enc = parser->enc;
12373
12374 eos = RSTRING_PTR(here->nd_lit);
12375 len = RSTRING_LEN(here->nd_lit) - 1;
12376 indent = (func = *eos++) & STR_FUNC_INDENT;
12377
12378 if ((c = nextc()) == -1) {
12379 error:
12380 compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
12381 #ifdef RIPPER
12382 if (NIL_P(parser->delayed)) {
12383 ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
12384 }
12385 else {
12386 if (str ||
12387 ((len = lex_p - parser->tokp) > 0 &&
12388 (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
12389 rb_str_append(parser->delayed, str);
12390 }
12391 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12392 }
12393 lex_goto_eol(parser);
12394 #endif
12395 restore:
12396 heredoc_restore(lex_strterm);
12397 lex_strterm = 0;
12398 return 0;
12399 }
12400 if (was_bol() && whole_match_p(eos, len, indent)) {
12401 dispatch_heredoc_end();
12402 heredoc_restore(lex_strterm);
12403 return tSTRING_END;
12404 }
12405
12406 if (!(func & STR_FUNC_EXPAND)) {
12407 do {
12408 p = RSTRING_PTR(lex_lastline);
12409 pend = lex_pend;
12410 if (pend > p) {
12411 switch (pend[-1]) {
12412 case '\n':
12413 if (--pend == p || pend[-1] != '\r') {
12414 pend++;
12415 break;
12416 }
12417 case '\r':
12418 --pend;
12419 }
12420 }
12421 if (str)
12422 rb_str_cat(str, p, pend - p);
12423 else
12424 str = STR_NEW(p, pend - p);
12425 if (pend < lex_pend) rb_str_cat(str, "\n", 1);
12426 lex_goto_eol(parser);
12427 if (nextc() == -1) {
12428 if (str) dispose_string(str);
12429 goto error;
12430 }
12431 } while (!whole_match_p(eos, len, indent));
12432 }
12433 else {
12434
12435 newtok();
12436 if (c == '#') {
12437 switch (c = nextc()) {
12438 case '$':
12439 case '@':
12440 pushback(c);
12441 return tSTRING_DVAR;
12442 case '{':
12443 return tSTRING_DBEG;
12444 }
12445 tokadd('#');
12446 }
12447 do {
12448 pushback(c);
12449 if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
12450 if (parser->eofp) goto error;
12451 goto restore;
12452 }
12453 if (c != '\n') {
12454 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12455 return tSTRING_CONTENT;
12456 }
12457 tokadd(nextc());
12458
12459 if ((c = nextc()) == -1) goto error;
12460 } while (!whole_match_p(eos, len, indent));
12461 str = STR_NEW3(tok(), toklen(), enc, func);
12462 }
12463 dispatch_heredoc_end();
12464 heredoc_restore(lex_strterm);
12465 lex_strterm = NEW_STRTERM(-1, 0, 0);
12466 set_yylval_str(str);
12467 return tSTRING_CONTENT;
12468 }
12469
12470 #include "lex.c"
12471
12472 static void
12473 arg_ambiguous_gen(struct parser_params *parser)
12474 {
12475 #ifndef RIPPER
12476 rb_warning0("ambiguous first argument; put parentheses or even spaces");
12477 #else
12478 dispatch0(arg_ambiguous);
12479 #endif
12480 }
12481 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
12482
12483 static ID
12484 formal_argument_gen(struct parser_params *parser, ID lhs)
12485 {
12486 #ifndef RIPPER
12487 if (!is_local_id(lhs))
12488 yyerror("formal argument must be local variable");
12489 #endif
12490 shadowing_lvar(lhs);
12491 return lhs;
12492 }
12493
12494 static int
12495 lvar_defined_gen(struct parser_params *parser, ID id)
12496 {
12497 return (dyna_in_block() && dvar_defined_get(id)) || local_id(id);
12498 }
12499
12500
12501 static long
12502 parser_encode_length(struct parser_params *parser, const char *name, long len)
12503 {
12504 long nlen;
12505
12506 if (len > 5 && name[nlen = len - 5] == '-') {
12507 if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
12508 return nlen;
12509 }
12510 if (len > 4 && name[nlen = len - 4] == '-') {
12511 if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
12512 return nlen;
12513 if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
12514 !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
12515
12516 return nlen;
12517 }
12518 return len;
12519 }
12520
12521 static void
12522 parser_set_encode(struct parser_params *parser, const char *name)
12523 {
12524 int idx = rb_enc_find_index(name);
12525 rb_encoding *enc;
12526 VALUE excargs[3];
12527
12528 if (idx < 0) {
12529 excargs[1] = rb_sprintf("unknown encoding name: %s", name);
12530 error:
12531 excargs[0] = rb_eArgError;
12532 excargs[2] = rb_make_backtrace();
12533 rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
12534 rb_exc_raise(rb_make_exception(3, excargs));
12535 }
12536 enc = rb_enc_from_index(idx);
12537 if (!rb_enc_asciicompat(enc)) {
12538 excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
12539 goto error;
12540 }
12541 parser->enc = enc;
12542 #ifndef RIPPER
12543 if (ruby_debug_lines) {
12544 long i, n = RARRAY_LEN(ruby_debug_lines);
12545 const VALUE *p = RARRAY_PTR(ruby_debug_lines);
12546 for (i = 0; i < n; ++i) {
12547 rb_enc_associate_index(*p, idx);
12548 }
12549 }
12550 #endif
12551 }
12552
12553 static int
12554 comment_at_top(struct parser_params *parser)
12555 {
12556 const char *p = lex_pbeg, *pend = lex_p - 1;
12557 if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
12558 while (p < pend) {
12559 if (!ISSPACE(*p)) return 0;
12560 p++;
12561 }
12562 return 1;
12563 }
12564
12565 #ifndef RIPPER
12566 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
12567 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
12568
12569 static void
12570 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
12571 {
12572 if (!comment_at_top(parser)) {
12573 return;
12574 }
12575 parser_set_encode(parser, val);
12576 }
12577
12578 static void
12579 parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
12580 {
12581 int *p = &parser->parser_token_info_enabled;
12582
12583 switch (*val) {
12584 case 't': case 'T':
12585 if (strcasecmp(val, "true") == 0) {
12586 *p = TRUE;
12587 return;
12588 }
12589 break;
12590 case 'f': case 'F':
12591 if (strcasecmp(val, "false") == 0) {
12592 *p = FALSE;
12593 return;
12594 }
12595 break;
12596 }
12597 rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val);
12598 }
12599
12600 struct magic_comment {
12601 const char *name;
12602 rb_magic_comment_setter_t func;
12603 rb_magic_comment_length_t length;
12604 };
12605
12606 static const struct magic_comment magic_comments[] = {
12607 {"coding", magic_comment_encoding, parser_encode_length},
12608 {"encoding", magic_comment_encoding, parser_encode_length},
12609 {"warn_indent", parser_set_token_info},
12610 };
12611 #endif
12612
12613 static const char *
12614 magic_comment_marker(const char *str, long len)
12615 {
12616 long i = 2;
12617
12618 while (i < len) {
12619 switch (str[i]) {
12620 case '-':
12621 if (str[i-1] == '*' && str[i-2] == '-') {
12622 return str + i + 1;
12623 }
12624 i += 2;
12625 break;
12626 case '*':
12627 if (i + 1 >= len) return 0;
12628 if (str[i+1] != '-') {
12629 i += 4;
12630 }
12631 else if (str[i-1] != '-') {
12632 i += 2;
12633 }
12634 else {
12635 return str + i + 2;
12636 }
12637 break;
12638 default:
12639 i += 3;
12640 break;
12641 }
12642 }
12643 return 0;
12644 }
12645
12646 static int
12647 parser_magic_comment(struct parser_params *parser, const char *str, long len)
12648 {
12649 VALUE name = 0, val = 0;
12650 const char *beg, *end, *vbeg, *vend;
12651 #define str_copy(_s, _p, _n) ((_s) \
12652 ? (void)(rb_str_resize((_s), (_n)), \
12653 MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
12654 : (void)((_s) = STR_NEW((_p), (_n))))
12655
12656 if (len <= 7) return FALSE;
12657 if (!(beg = magic_comment_marker(str, len))) return FALSE;
12658 if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
12659 str = beg;
12660 len = end - beg - 3;
12661
12662
12663 while (len > 0) {
12664 #ifndef RIPPER
12665 const struct magic_comment *p = magic_comments;
12666 #endif
12667 char *s;
12668 int i;
12669 long n = 0;
12670
12671 for (; len > 0 && *str; str++, --len) {
12672 switch (*str) {
12673 case '\'': case '"': case ':': case ';':
12674 continue;
12675 }
12676 if (!ISSPACE(*str)) break;
12677 }
12678 for (beg = str; len > 0; str++, --len) {
12679 switch (*str) {
12680 case '\'': case '"': case ':': case ';':
12681 break;
12682 default:
12683 if (ISSPACE(*str)) break;
12684 continue;
12685 }
12686 break;
12687 }
12688 for (end = str; len > 0 && ISSPACE(*str); str++, --len);
12689 if (!len) break;
12690 if (*str != ':') continue;
12691
12692 do str++; while (--len > 0 && ISSPACE(*str));
12693 if (!len) break;
12694 if (*str == '"') {
12695 for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
12696 if (*str == '\\') {
12697 --len;
12698 ++str;
12699 }
12700 }
12701 vend = str;
12702 if (len) {
12703 --len;
12704 ++str;
12705 }
12706 }
12707 else {
12708 for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
12709 vend = str;
12710 }
12711 while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
12712
12713 n = end - beg;
12714 str_copy(name, beg, n);
12715 s = RSTRING_PTR(name);
12716 for (i = 0; i < n; ++i) {
12717 if (s[i] == '-') s[i] = '_';
12718 }
12719 #ifndef RIPPER
12720 do {
12721 if (STRNCASECMP(p->name, s, n) == 0) {
12722 n = vend - vbeg;
12723 if (p->length) {
12724 n = (*p->length)(parser, vbeg, n);
12725 }
12726 str_copy(val, vbeg, n);
12727 (*p->func)(parser, s, RSTRING_PTR(val));
12728 break;
12729 }
12730 } while (++p < magic_comments + numberof(magic_comments));
12731 #else
12732 dispatch2(magic_comment, name, val);
12733 #endif
12734 }
12735
12736 return TRUE;
12737 }
12738
12739 static void
12740 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
12741 {
12742 int sep = 0;
12743 const char *beg = str;
12744 VALUE s;
12745
12746 for (;;) {
12747 if (send - str <= 6) return;
12748 switch (str[6]) {
12749 case 'C': case 'c': str += 6; continue;
12750 case 'O': case 'o': str += 5; continue;
12751 case 'D': case 'd': str += 4; continue;
12752 case 'I': case 'i': str += 3; continue;
12753 case 'N': case 'n': str += 2; continue;
12754 case 'G': case 'g': str += 1; continue;
12755 case '=': case ':':
12756 sep = 1;
12757 str += 6;
12758 break;
12759 default:
12760 str += 6;
12761 if (ISSPACE(*str)) break;
12762 continue;
12763 }
12764 if (STRNCASECMP(str-6, "coding", 6) == 0) break;
12765 }
12766 for (;;) {
12767 do {
12768 if (++str >= send) return;
12769 } while (ISSPACE(*str));
12770 if (sep) break;
12771 if (*str != '=' && *str != ':') return;
12772 sep = 1;
12773 str++;
12774 }
12775 beg = str;
12776 while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
12777 s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
12778 parser_set_encode(parser, RSTRING_PTR(s));
12779 rb_str_resize(s, 0);
12780 }
12781
12782 static void
12783 parser_prepare(struct parser_params *parser)
12784 {
12785 int c = nextc();
12786 switch (c) {
12787 case '#':
12788 if (peek('!')) parser->has_shebang = 1;
12789 break;
12790 case 0xef:
12791 if (lex_pend - lex_p >= 2 &&
12792 (unsigned char)lex_p[0] == 0xbb &&
12793 (unsigned char)lex_p[1] == 0xbf) {
12794 parser->enc = rb_utf8_encoding();
12795 lex_p += 2;
12796 lex_pbeg = lex_p;
12797 return;
12798 }
12799 break;
12800 case EOF:
12801 return;
12802 }
12803 pushback(c);
12804 parser->enc = rb_enc_get(lex_lastline);
12805 }
12806
12807 #define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG)
12808 #define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_ENDFN)
12809 #define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS)
12810 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
12811 #define IS_LABEL_POSSIBLE() ((lex_state == EXPR_BEG && !cmd_state) || IS_ARG())
12812 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1))
12813
12814 #ifndef RIPPER
12815 #define ambiguous_operator(op, syn) ( \
12816 rb_warning0("`"op"' after local variable is interpreted as binary operator"), \
12817 rb_warning0("even though it seems like "syn""))
12818 #else
12819 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
12820 #endif
12821 #define warn_balanced(op, syn) ((void) \
12822 (last_state != EXPR_CLASS && last_state != EXPR_DOT && \
12823 last_state != EXPR_FNAME && last_state != EXPR_ENDFN && \
12824 last_state != EXPR_ENDARG && \
12825 space_seen && !ISSPACE(c) && \
12826 (ambiguous_operator(op, syn), 0)))
12827
12828 static int
12829 parser_yylex(struct parser_params *parser)
12830 {
12831 register int c;
12832 int space_seen = 0;
12833 int cmd_state;
12834 enum lex_state_e last_state;
12835 rb_encoding *enc;
12836 int mb;
12837 #ifdef RIPPER
12838 int fallthru = FALSE;
12839 #endif
12840
12841 if (lex_strterm) {
12842 int token;
12843 if (nd_type(lex_strterm) == NODE_HEREDOC) {
12844 token = here_document(lex_strterm);
12845 if (token == tSTRING_END) {
12846 lex_strterm = 0;
12847 lex_state = EXPR_END;
12848 }
12849 }
12850 else {
12851 token = parse_string(lex_strterm);
12852 if (token == tSTRING_END || token == tREGEXP_END) {
12853 rb_gc_force_recycle((VALUE)lex_strterm);
12854 lex_strterm = 0;
12855 lex_state = EXPR_END;
12856 }
12857 }
12858 return token;
12859 }
12860 cmd_state = command_start;
12861 command_start = FALSE;
12862 retry:
12863 last_state = lex_state;
12864 switch (c = nextc()) {
12865 case '\0':
12866 case '\004':
12867 case '\032':
12868 case -1:
12869 return 0;
12870
12871
12872 case ' ': case '\t': case '\f': case '\r':
12873 case '\13':
12874 space_seen = 1;
12875 #ifdef RIPPER
12876 while ((c = nextc())) {
12877 switch (c) {
12878 case ' ': case '\t': case '\f': case '\r':
12879 case '\13':
12880 break;
12881 default:
12882 goto outofloop;
12883 }
12884 }
12885 outofloop:
12886 pushback(c);
12887 ripper_dispatch_scan_event(parser, tSP);
12888 #endif
12889 goto retry;
12890
12891 case '#':
12892
12893 if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
12894 if (comment_at_top(parser)) {
12895 set_file_encoding(parser, lex_p, lex_pend);
12896 }
12897 }
12898 lex_p = lex_pend;
12899 #ifdef RIPPER
12900 ripper_dispatch_scan_event(parser, tCOMMENT);
12901 fallthru = TRUE;
12902 #endif
12903
12904 case '\n':
12905 switch (lex_state) {
12906 case EXPR_BEG:
12907 case EXPR_FNAME:
12908 case EXPR_DOT:
12909 case EXPR_CLASS:
12910 case EXPR_VALUE:
12911 #ifdef RIPPER
12912 if (!fallthru) {
12913 ripper_dispatch_scan_event(parser, tIGNORED_NL);
12914 }
12915 fallthru = FALSE;
12916 #endif
12917 goto retry;
12918 default:
12919 break;
12920 }
12921 while ((c = nextc())) {
12922 switch (c) {
12923 case ' ': case '\t': case '\f': case '\r':
12924 case '\13':
12925 space_seen = 1;
12926 break;
12927 case '.': {
12928 if ((c = nextc()) != '.') {
12929 pushback(c);
12930 pushback('.');
12931 goto retry;
12932 }
12933 }
12934 default:
12935 --ruby_sourceline;
12936 lex_nextline = lex_lastline;
12937 case -1:
12938 lex_goto_eol(parser);
12939 #ifdef RIPPER
12940 if (c != -1) {
12941 parser->tokp = lex_p;
12942 }
12943 #endif
12944 goto normal_newline;
12945 }
12946 }
12947 normal_newline:
12948 command_start = TRUE;
12949 lex_state = EXPR_BEG;
12950 return '\n';
12951
12952 case '*':
12953 if ((c = nextc()) == '*') {
12954 if ((c = nextc()) == '=') {
12955 set_yylval_id(tPOW);
12956 lex_state = EXPR_BEG;
12957 return tOP_ASGN;
12958 }
12959 pushback(c);
12960 c = tPOW;
12961 }
12962 else {
12963 if (c == '=') {
12964 set_yylval_id('*');
12965 lex_state = EXPR_BEG;
12966 return tOP_ASGN;
12967 }
12968 pushback(c);
12969 if (IS_SPCARG(c)) {
12970 rb_warning0("`*' interpreted as argument prefix");
12971 c = tSTAR;
12972 }
12973 else if (IS_BEG()) {
12974 c = tSTAR;
12975 }
12976 else {
12977 warn_balanced("*", "argument prefix");
12978 c = '*';
12979 }
12980 }
12981 switch (lex_state) {
12982 case EXPR_FNAME: case EXPR_DOT:
12983 lex_state = EXPR_ARG; break;
12984 default:
12985 lex_state = EXPR_BEG; break;
12986 }
12987 return c;
12988
12989 case '!':
12990 c = nextc();
12991 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12992 lex_state = EXPR_ARG;
12993 if (c == '@') {
12994 return '!';
12995 }
12996 }
12997 else {
12998 lex_state = EXPR_BEG;
12999 }
13000 if (c == '=') {
13001 return tNEQ;
13002 }
13003 if (c == '~') {
13004 return tNMATCH;
13005 }
13006 pushback(c);
13007 return '!';
13008
13009 case '=':
13010 if (was_bol()) {
13011
13012 if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
13013 #ifdef RIPPER
13014 int first_p = TRUE;
13015
13016 lex_goto_eol(parser);
13017 ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
13018 #endif
13019 for (;;) {
13020 lex_goto_eol(parser);
13021 #ifdef RIPPER
13022 if (!first_p) {
13023 ripper_dispatch_scan_event(parser, tEMBDOC);
13024 }
13025 first_p = FALSE;
13026 #endif
13027 c = nextc();
13028 if (c == -1) {
13029 compile_error(PARSER_ARG "embedded document meets end of file");
13030 return 0;
13031 }
13032 if (c != '=') continue;
13033 if (strncmp(lex_p, "end", 3) == 0 &&
13034 (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
13035 break;
13036 }
13037 }
13038 lex_goto_eol(parser);
13039 #ifdef RIPPER
13040 ripper_dispatch_scan_event(parser, tEMBDOC_END);
13041 #endif
13042 goto retry;
13043 }
13044 }
13045
13046 switch (lex_state) {
13047 case EXPR_FNAME: case EXPR_DOT:
13048 lex_state = EXPR_ARG; break;
13049 default:
13050 lex_state = EXPR_BEG; break;
13051 }
13052 if ((c = nextc()) == '=') {
13053 if ((c = nextc()) == '=') {
13054 return tEQQ;
13055 }
13056 pushback(c);
13057 return tEQ;
13058 }
13059 if (c == '~') {
13060 return tMATCH;
13061 }
13062 else if (c == '>') {
13063 return tASSOC;
13064 }
13065 pushback(c);
13066 return '=';
13067
13068 case '<':
13069 last_state = lex_state;
13070 c = nextc();
13071 if (c == '<' &&
13072 lex_state != EXPR_DOT &&
13073 lex_state != EXPR_CLASS &&
13074 !IS_END() &&
13075 (!IS_ARG() || space_seen)) {
13076 int token = heredoc_identifier();
13077 if (token) return token;
13078 }
13079 switch (lex_state) {
13080 case EXPR_FNAME: case EXPR_DOT:
13081 lex_state = EXPR_ARG; break;
13082 default:
13083 lex_state = EXPR_BEG; break;
13084 }
13085 if (c == '=') {
13086 if ((c = nextc()) == '>') {
13087 return tCMP;
13088 }
13089 pushback(c);
13090 return tLEQ;
13091 }
13092 if (c == '<') {
13093 if ((c = nextc()) == '=') {
13094 set_yylval_id(tLSHFT);
13095 lex_state = EXPR_BEG;
13096 return tOP_ASGN;
13097 }
13098 pushback(c);
13099 warn_balanced("<<", "here document");
13100 return tLSHFT;
13101 }
13102 pushback(c);
13103 return '<';
13104
13105 case '>':
13106 switch (lex_state) {
13107 case EXPR_FNAME: case EXPR_DOT:
13108 lex_state = EXPR_ARG; break;
13109 default:
13110 lex_state = EXPR_BEG; break;
13111 }
13112 if ((c = nextc()) == '=') {
13113 return tGEQ;
13114 }
13115 if (c == '>') {
13116 if ((c = nextc()) == '=') {
13117 set_yylval_id(tRSHFT);
13118 lex_state = EXPR_BEG;
13119 return tOP_ASGN;
13120 }
13121 pushback(c);
13122 return tRSHFT;
13123 }
13124 pushback(c);
13125 return '>';
13126
13127 case '"':
13128 lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
13129 return tSTRING_BEG;
13130
13131 case '`':
13132 if (lex_state == EXPR_FNAME) {
13133 lex_state = EXPR_ENDFN;
13134 return c;
13135 }
13136 if (lex_state == EXPR_DOT) {
13137 if (cmd_state)
13138 lex_state = EXPR_CMDARG;
13139 else
13140 lex_state = EXPR_ARG;
13141 return c;
13142 }
13143 lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
13144 return tXSTRING_BEG;
13145
13146 case '\'':
13147 lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
13148 return tSTRING_BEG;
13149
13150 case '?':
13151 if (IS_END()) {
13152 lex_state = EXPR_VALUE;
13153 return '?';
13154 }
13155 c = nextc();
13156 if (c == -1) {
13157 compile_error(PARSER_ARG "incomplete character syntax");
13158 return 0;
13159 }
13160 if (rb_enc_isspace(c, parser->enc)) {
13161 if (!IS_ARG()) {
13162 int c2 = 0;
13163 switch (c) {
13164 case ' ':
13165 c2 = 's';
13166 break;
13167 case '\n':
13168 c2 = 'n';
13169 break;
13170 case '\t':
13171 c2 = 't';
13172 break;
13173 case '\v':
13174 c2 = 'v';
13175 break;
13176 case '\r':
13177 c2 = 'r';
13178 break;
13179 case '\f':
13180 c2 = 'f';
13181 break;
13182 }
13183 if (c2) {
13184 rb_warnI("invalid character syntax; use ?\\%c", c2);
13185 }
13186 }
13187 ternary:
13188 pushback(c);
13189 lex_state = EXPR_VALUE;
13190 return '?';
13191 }
13192 newtok();
13193 enc = parser->enc;
13194 if (!parser_isascii()) {
13195 if (tokadd_mbchar(c) == -1) return 0;
13196 }
13197 else if ((rb_enc_isalnum(c, parser->enc) || c == '_') &&
13198 lex_p < lex_pend && is_identchar(lex_p, lex_pend, parser->enc)) {
13199 goto ternary;
13200 }
13201 else if (c == '\\') {
13202 if (peek('u')) {
13203 nextc();
13204 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
13205 if (0x80 <= c) {
13206 tokaddmbc(c, enc);
13207 }
13208 else {
13209 tokadd(c);
13210 }
13211 }
13212 else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) {
13213 nextc();
13214 tokadd('\\');
13215 if (tokadd_mbchar(c) == -1) return 0;
13216 }
13217 else {
13218 c = read_escape(0, &enc);
13219 tokadd(c);
13220 }
13221 }
13222 else {
13223 tokadd(c);
13224 }
13225 tokfix();
13226 set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
13227 lex_state = EXPR_END;
13228 return tCHAR;
13229
13230 case '&':
13231 if ((c = nextc()) == '&') {
13232 lex_state = EXPR_BEG;
13233 if ((c = nextc()) == '=') {
13234 set_yylval_id(tANDOP);
13235 lex_state = EXPR_BEG;
13236 return tOP_ASGN;
13237 }
13238 pushback(c);
13239 return tANDOP;
13240 }
13241 else if (c == '=') {
13242 set_yylval_id('&');
13243 lex_state = EXPR_BEG;
13244 return tOP_ASGN;
13245 }
13246 pushback(c);
13247 if (IS_SPCARG(c)) {
13248 rb_warning0("`&' interpreted as argument prefix");
13249 c = tAMPER;
13250 }
13251 else if (IS_BEG()) {
13252 c = tAMPER;
13253 }
13254 else {
13255 warn_balanced("&", "argument prefix");
13256 c = '&';
13257 }
13258 switch (lex_state) {
13259 case EXPR_FNAME: case EXPR_DOT:
13260 lex_state = EXPR_ARG; break;
13261 default:
13262 lex_state = EXPR_BEG;
13263 }
13264 return c;
13265
13266 case '|':
13267 if ((c = nextc()) == '|') {
13268 lex_state = EXPR_BEG;
13269 if ((c = nextc()) == '=') {
13270 set_yylval_id(tOROP);
13271 lex_state = EXPR_BEG;
13272 return tOP_ASGN;
13273 }
13274 pushback(c);
13275 return tOROP;
13276 }
13277 if (c == '=') {
13278 set_yylval_id('|');
13279 lex_state = EXPR_BEG;
13280 return tOP_ASGN;
13281 }
13282 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13283 lex_state = EXPR_ARG;
13284 }
13285 else {
13286 lex_state = EXPR_BEG;
13287 }
13288 pushback(c);
13289 return '|';
13290
13291 case '+':
13292 c = nextc();
13293 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13294 lex_state = EXPR_ARG;
13295 if (c == '@') {
13296 return tUPLUS;
13297 }
13298 pushback(c);
13299 return '+';
13300 }
13301 if (c == '=') {
13302 set_yylval_id('+');
13303 lex_state = EXPR_BEG;
13304 return tOP_ASGN;
13305 }
13306 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13307 lex_state = EXPR_BEG;
13308 pushback(c);
13309 if (c != -1 && ISDIGIT(c)) {
13310 c = '+';
13311 goto start_num;
13312 }
13313 return tUPLUS;
13314 }
13315 lex_state = EXPR_BEG;
13316 pushback(c);
13317 warn_balanced("+", "unary operator");
13318 return '+';
13319
13320 case '-':
13321 c = nextc();
13322 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13323 lex_state = EXPR_ARG;
13324 if (c == '@') {
13325 return tUMINUS;
13326 }
13327 pushback(c);
13328 return '-';
13329 }
13330 if (c == '=') {
13331 set_yylval_id('-');
13332 lex_state = EXPR_BEG;
13333 return tOP_ASGN;
13334 }
13335 if (c == '>') {
13336 lex_state = EXPR_ARG;
13337 return tLAMBDA;
13338 }
13339 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13340 lex_state = EXPR_BEG;
13341 pushback(c);
13342 if (c != -1 && ISDIGIT(c)) {
13343 return tUMINUS_NUM;
13344 }
13345 return tUMINUS;
13346 }
13347 lex_state = EXPR_BEG;
13348 pushback(c);
13349 warn_balanced("-", "unary operator");
13350 return '-';
13351
13352 case '.':
13353 lex_state = EXPR_BEG;
13354 if ((c = nextc()) == '.') {
13355 if ((c = nextc()) == '.') {
13356 return tDOT3;
13357 }
13358 pushback(c);
13359 return tDOT2;
13360 }
13361 pushback(c);
13362 if (c != -1 && ISDIGIT(c)) {
13363 yyerror("no .<digit> floating literal anymore; put 0 before dot");
13364 }
13365 lex_state = EXPR_DOT;
13366 return '.';
13367
13368 start_num:
13369 case '0': case '1': case '2': case '3': case '4':
13370 case '5': case '6': case '7': case '8': case '9':
13371 {
13372 int is_float, seen_point, seen_e, nondigit;
13373
13374 is_float = seen_point = seen_e = nondigit = 0;
13375 lex_state = EXPR_END;
13376 newtok();
13377 if (c == '-' || c == '+') {
13378 tokadd(c);
13379 c = nextc();
13380 }
13381 if (c == '0') {
13382 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13383 int start = toklen();
13384 c = nextc();
13385 if (c == 'x' || c == 'X') {
13386
13387 c = nextc();
13388 if (c != -1 && ISXDIGIT(c)) {
13389 do {
13390 if (c == '_') {
13391 if (nondigit) break;
13392 nondigit = c;
13393 continue;
13394 }
13395 if (!ISXDIGIT(c)) break;
13396 nondigit = 0;
13397 tokadd(c);
13398 } while ((c = nextc()) != -1);
13399 }
13400 pushback(c);
13401 tokfix();
13402 if (toklen() == start) {
13403 no_digits();
13404 }
13405 else if (nondigit) goto trailing_uc;
13406 set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE));
13407 return tINTEGER;
13408 }
13409 if (c == 'b' || c == 'B') {
13410
13411 c = nextc();
13412 if (c == '0' || c == '1') {
13413 do {
13414 if (c == '_') {
13415 if (nondigit) break;
13416 nondigit = c;
13417 continue;
13418 }
13419 if (c != '0' && c != '1') break;
13420 nondigit = 0;
13421 tokadd(c);
13422 } while ((c = nextc()) != -1);
13423 }
13424 pushback(c);
13425 tokfix();
13426 if (toklen() == start) {
13427 no_digits();
13428 }
13429 else if (nondigit) goto trailing_uc;
13430 set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE));
13431 return tINTEGER;
13432 }
13433 if (c == 'd' || c == 'D') {
13434
13435 c = nextc();
13436 if (c != -1 && ISDIGIT(c)) {
13437 do {
13438 if (c == '_') {
13439 if (nondigit) break;
13440 nondigit = c;
13441 continue;
13442 }
13443 if (!ISDIGIT(c)) break;
13444 nondigit = 0;
13445 tokadd(c);
13446 } while ((c = nextc()) != -1);
13447 }
13448 pushback(c);
13449 tokfix();
13450 if (toklen() == start) {
13451 no_digits();
13452 }
13453 else if (nondigit) goto trailing_uc;
13454 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13455 return tINTEGER;
13456 }
13457 if (c == '_') {
13458
13459 goto octal_number;
13460 }
13461 if (c == 'o' || c == 'O') {
13462
13463 c = nextc();
13464 if (c == -1 || c == '_' || !ISDIGIT(c)) {
13465 no_digits();
13466 }
13467 }
13468 if (c >= '0' && c <= '7') {
13469
13470 octal_number:
13471 do {
13472 if (c == '_') {
13473 if (nondigit) break;
13474 nondigit = c;
13475 continue;
13476 }
13477 if (c < '0' || c > '9') break;
13478 if (c > '7') goto invalid_octal;
13479 nondigit = 0;
13480 tokadd(c);
13481 } while ((c = nextc()) != -1);
13482 if (toklen() > start) {
13483 pushback(c);
13484 tokfix();
13485 if (nondigit) goto trailing_uc;
13486 set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE));
13487 return tINTEGER;
13488 }
13489 if (nondigit) {
13490 pushback(c);
13491 goto trailing_uc;
13492 }
13493 }
13494 if (c > '7' && c <= '9') {
13495 invalid_octal:
13496 yyerror("Invalid octal digit");
13497 }
13498 else if (c == '.' || c == 'e' || c == 'E') {
13499 tokadd('0');
13500 }
13501 else {
13502 pushback(c);
13503 set_yylval_literal(INT2FIX(0));
13504 return tINTEGER;
13505 }
13506 }
13507
13508 for (;;) {
13509 switch (c) {
13510 case '0': case '1': case '2': case '3': case '4':
13511 case '5': case '6': case '7': case '8': case '9':
13512 nondigit = 0;
13513 tokadd(c);
13514 break;
13515
13516 case '.':
13517 if (nondigit) goto trailing_uc;
13518 if (seen_point || seen_e) {
13519 goto decode_num;
13520 }
13521 else {
13522 int c0 = nextc();
13523 if (c0 == -1 || !ISDIGIT(c0)) {
13524 pushback(c0);
13525 goto decode_num;
13526 }
13527 c = c0;
13528 }
13529 tokadd('.');
13530 tokadd(c);
13531 is_float++;
13532 seen_point++;
13533 nondigit = 0;
13534 break;
13535
13536 case 'e':
13537 case 'E':
13538 if (nondigit) {
13539 pushback(c);
13540 c = nondigit;
13541 goto decode_num;
13542 }
13543 if (seen_e) {
13544 goto decode_num;
13545 }
13546 tokadd(c);
13547 seen_e++;
13548 is_float++;
13549 nondigit = c;
13550 c = nextc();
13551 if (c != '-' && c != '+') continue;
13552 tokadd(c);
13553 nondigit = c;
13554 break;
13555
13556 case '_':
13557 if (nondigit) goto decode_num;
13558 nondigit = c;
13559 break;
13560
13561 default:
13562 goto decode_num;
13563 }
13564 c = nextc();
13565 }
13566
13567 decode_num:
13568 pushback(c);
13569 if (nondigit) {
13570 char tmp[30];
13571 trailing_uc:
13572 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
13573 yyerror(tmp);
13574 }
13575 tokfix();
13576 if (is_float) {
13577 double d = strtod(tok(), 0);
13578 if (errno == ERANGE) {
13579 rb_warningS("Float %s out of range", tok());
13580 errno = 0;
13581 }
13582 set_yylval_literal(DBL2NUM(d));
13583 return tFLOAT;
13584 }
13585 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13586 return tINTEGER;
13587 }
13588
13589 case ')':
13590 case ']':
13591 paren_nest--;
13592 case '}':
13593 COND_LEXPOP();
13594 CMDARG_LEXPOP();
13595 if (c == ')')
13596 lex_state = EXPR_ENDFN;
13597 else
13598 lex_state = EXPR_ENDARG;
13599 return c;
13600
13601 case ':':
13602 c = nextc();
13603 if (c == ':') {
13604 if (IS_BEG() || lex_state == EXPR_CLASS || IS_SPCARG(-1)) {
13605 lex_state = EXPR_BEG;
13606 return tCOLON3;
13607 }
13608 lex_state = EXPR_DOT;
13609 return tCOLON2;
13610 }
13611 if (IS_END() || ISSPACE(c)) {
13612 pushback(c);
13613 warn_balanced(":", "symbol literal");
13614 lex_state = EXPR_BEG;
13615 return ':';
13616 }
13617 switch (c) {
13618 case '\'':
13619 lex_strterm = NEW_STRTERM(str_ssym, c, 0);
13620 break;
13621 case '"':
13622 lex_strterm = NEW_STRTERM(str_dsym, c, 0);
13623 break;
13624 default:
13625 pushback(c);
13626 break;
13627 }
13628 lex_state = EXPR_FNAME;
13629 return tSYMBEG;
13630
13631 case '/':
13632 if (IS_BEG()) {
13633 lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13634 return tREGEXP_BEG;
13635 }
13636 if ((c = nextc()) == '=') {
13637 set_yylval_id('/');
13638 lex_state = EXPR_BEG;
13639 return tOP_ASGN;
13640 }
13641 pushback(c);
13642 if (IS_SPCARG(c)) {
13643 (void)arg_ambiguous();
13644 lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13645 return tREGEXP_BEG;
13646 }
13647 switch (lex_state) {
13648 case EXPR_FNAME: case EXPR_DOT:
13649 lex_state = EXPR_ARG; break;
13650 default:
13651 lex_state = EXPR_BEG; break;
13652 }
13653 warn_balanced("/", "regexp literal");
13654 return '/';
13655
13656 case '^':
13657 if ((c = nextc()) == '=') {
13658 set_yylval_id('^');
13659 lex_state = EXPR_BEG;
13660 return tOP_ASGN;
13661 }
13662 switch (lex_state) {
13663 case EXPR_FNAME: case EXPR_DOT:
13664 lex_state = EXPR_ARG; break;
13665 default:
13666 lex_state = EXPR_BEG; break;
13667 }
13668 pushback(c);
13669 return '^';
13670
13671 case ';':
13672 lex_state = EXPR_BEG;
13673 command_start = TRUE;
13674 return ';';
13675
13676 case ',':
13677 lex_state = EXPR_BEG;
13678 return ',';
13679
13680 case '~':
13681 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13682 if ((c = nextc()) != '@') {
13683 pushback(c);
13684 }
13685 lex_state = EXPR_ARG;
13686 }
13687 else {
13688 lex_state = EXPR_BEG;
13689 }
13690 return '~';
13691
13692 case '(':
13693 if (IS_BEG()) {
13694 c = tLPAREN;
13695 }
13696 else if (IS_SPCARG(-1)) {
13697 c = tLPAREN_ARG;
13698 }
13699 paren_nest++;
13700 COND_PUSH(0);
13701 CMDARG_PUSH(0);
13702 lex_state = EXPR_BEG;
13703 return c;
13704
13705 case '[':
13706 paren_nest++;
13707 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13708 lex_state = EXPR_ARG;
13709 if ((c = nextc()) == ']') {
13710 if ((c = nextc()) == '=') {
13711 return tASET;
13712 }
13713 pushback(c);
13714 return tAREF;
13715 }
13716 pushback(c);
13717 return '[';
13718 }
13719 else if (IS_BEG()) {
13720 c = tLBRACK;
13721 }
13722 else if (IS_ARG() && space_seen) {
13723 c = tLBRACK;
13724 }
13725 lex_state = EXPR_BEG;
13726 COND_PUSH(0);
13727 CMDARG_PUSH(0);
13728 return c;
13729
13730 case '{':
13731 if (lpar_beg && lpar_beg == paren_nest) {
13732 lex_state = EXPR_BEG;
13733 lpar_beg = 0;
13734 --paren_nest;
13735 COND_PUSH(0);
13736 CMDARG_PUSH(0);
13737 return tLAMBEG;
13738 }
13739 if (IS_ARG() || lex_state == EXPR_END || lex_state == EXPR_ENDFN)
13740 c = '{';
13741 else if (lex_state == EXPR_ENDARG)
13742 c = tLBRACE_ARG;
13743 else
13744 c = tLBRACE;
13745 COND_PUSH(0);
13746 CMDARG_PUSH(0);
13747 lex_state = EXPR_BEG;
13748 if (c != tLBRACE) command_start = TRUE;
13749 return c;
13750
13751 case '\\':
13752 c = nextc();
13753 if (c == '\n') {
13754 space_seen = 1;
13755 #ifdef RIPPER
13756 ripper_dispatch_scan_event(parser, tSP);
13757 #endif
13758 goto retry;
13759 }
13760 pushback(c);
13761 return '\\';
13762
13763 case '%':
13764 if (IS_BEG()) {
13765 int term;
13766 int paren;
13767
13768 c = nextc();
13769 quotation:
13770 if (c == -1 || !ISALNUM(c)) {
13771 term = c;
13772 c = 'Q';
13773 }
13774 else {
13775 term = nextc();
13776 if (rb_enc_isalnum(term, parser->enc) || !parser_isascii()) {
13777 yyerror("unknown type of %string");
13778 return 0;
13779 }
13780 }
13781 if (c == -1 || term == -1) {
13782 compile_error(PARSER_ARG "unterminated quoted string meets end of file");
13783 return 0;
13784 }
13785 paren = term;
13786 if (term == '(') term = ')';
13787 else if (term == '[') term = ']';
13788 else if (term == '{') term = '}';
13789 else if (term == '<') term = '>';
13790 else paren = 0;
13791
13792 switch (c) {
13793 case 'Q':
13794 lex_strterm = NEW_STRTERM(str_dquote, term, paren);
13795 return tSTRING_BEG;
13796
13797 case 'q':
13798 lex_strterm = NEW_STRTERM(str_squote, term, paren);
13799 return tSTRING_BEG;
13800
13801 case 'W':
13802 lex_strterm = NEW_STRTERM(str_dword, term, paren);
13803 do {c = nextc();} while (ISSPACE(c));
13804 pushback(c);
13805 return tWORDS_BEG;
13806
13807 case 'w':
13808 lex_strterm = NEW_STRTERM(str_sword, term, paren);
13809 do {c = nextc();} while (ISSPACE(c));
13810 pushback(c);
13811 return tQWORDS_BEG;
13812
13813 case 'x':
13814 lex_strterm = NEW_STRTERM(str_xquote, term, paren);
13815 return tXSTRING_BEG;
13816
13817 case 'r':
13818 lex_strterm = NEW_STRTERM(str_regexp, term, paren);
13819 return tREGEXP_BEG;
13820
13821 case 's':
13822 lex_strterm = NEW_STRTERM(str_ssym, term, paren);
13823 lex_state = EXPR_FNAME;
13824 return tSYMBEG;
13825
13826 default:
13827 yyerror("unknown type of %string");
13828 return 0;
13829 }
13830 }
13831 if ((c = nextc()) == '=') {
13832 set_yylval_id('%');
13833 lex_state = EXPR_BEG;
13834 return tOP_ASGN;
13835 }
13836 if (IS_SPCARG(c)) {
13837 goto quotation;
13838 }
13839 switch (lex_state) {
13840 case EXPR_FNAME: case EXPR_DOT:
13841 lex_state = EXPR_ARG; break;
13842 default:
13843 lex_state = EXPR_BEG; break;
13844 }
13845 pushback(c);
13846 warn_balanced("%%", "string literal");
13847 return '%';
13848
13849 case '$':
13850 lex_state = EXPR_END;
13851 newtok();
13852 c = nextc();
13853 switch (c) {
13854 case '_':
13855 c = nextc();
13856 if (parser_is_identchar()) {
13857 tokadd('$');
13858 tokadd('_');
13859 break;
13860 }
13861 pushback(c);
13862 c = '_';
13863
13864 case '~':
13865 case '*':
13866 case '$':
13867 case '?':
13868 case '!':
13869 case '@':
13870 case '/':
13871 case '\\':
13872 case ';':
13873 case ',':
13874 case '.':
13875 case '=':
13876 case ':':
13877 case '<':
13878 case '>':
13879 case '\"':
13880 tokadd('$');
13881 tokadd(c);
13882 tokfix();
13883 set_yylval_name(rb_intern(tok()));
13884 return tGVAR;
13885
13886 case '-':
13887 tokadd('$');
13888 tokadd(c);
13889 c = nextc();
13890 if (parser_is_identchar()) {
13891 if (tokadd_mbchar(c) == -1) return 0;
13892 }
13893 else {
13894 pushback(c);
13895 }
13896 gvar:
13897 tokfix();
13898 set_yylval_name(rb_intern(tok()));
13899 return tGVAR;
13900
13901 case '&':
13902 case '`':
13903 case '\'':
13904 case '+':
13905 if (last_state == EXPR_FNAME) {
13906 tokadd('$');
13907 tokadd(c);
13908 goto gvar;
13909 }
13910 set_yylval_node(NEW_BACK_REF(c));
13911 return tBACK_REF;
13912
13913 case '1': case '2': case '3':
13914 case '4': case '5': case '6':
13915 case '7': case '8': case '9':
13916 tokadd('$');
13917 do {
13918 tokadd(c);
13919 c = nextc();
13920 } while (c != -1 && ISDIGIT(c));
13921 pushback(c);
13922 if (last_state == EXPR_FNAME) goto gvar;
13923 tokfix();
13924 set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
13925 return tNTH_REF;
13926
13927 default:
13928 if (!parser_is_identchar()) {
13929 pushback(c);
13930 return '$';
13931 }
13932 case '0':
13933 tokadd('$');
13934 }
13935 break;
13936
13937 case '@':
13938 c = nextc();
13939 newtok();
13940 tokadd('@');
13941 if (c == '@') {
13942 tokadd('@');
13943 c = nextc();
13944 }
13945 if (c != -1 && ISDIGIT(c)) {
13946 if (tokidx == 1) {
13947 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
13948 }
13949 else {
13950 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
13951 }
13952 return 0;
13953 }
13954 if (!parser_is_identchar()) {
13955 pushback(c);
13956 return '@';
13957 }
13958 break;
13959
13960 case '_':
13961 if (was_bol() && whole_match_p("__END__", 7, 0)) {
13962 ruby__end__seen = 1;
13963 parser->eofp = Qtrue;
13964 #ifndef RIPPER
13965 return -1;
13966 #else
13967 lex_goto_eol(parser);
13968 ripper_dispatch_scan_event(parser, k__END__);
13969 return 0;
13970 #endif
13971 }
13972 newtok();
13973 break;
13974
13975 default:
13976 if (!parser_is_identchar()) {
13977 rb_compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c);
13978 goto retry;
13979 }
13980
13981 newtok();
13982 break;
13983 }
13984
13985 mb = ENC_CODERANGE_7BIT;
13986 do {
13987 if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
13988 if (tokadd_mbchar(c) == -1) return 0;
13989 c = nextc();
13990 } while (parser_is_identchar());
13991 switch (tok()[0]) {
13992 case '@': case '$':
13993 pushback(c);
13994 break;
13995 default:
13996 if ((c == '!' || c == '?') && !peek('=')) {
13997 tokadd(c);
13998 }
13999 else {
14000 pushback(c);
14001 }
14002 }
14003 tokfix();
14004
14005 {
14006 int result = 0;
14007
14008 last_state = lex_state;
14009 switch (tok()[0]) {
14010 case '$':
14011 lex_state = EXPR_END;
14012 result = tGVAR;
14013 break;
14014 case '@':
14015 lex_state = EXPR_END;
14016 if (tok()[1] == '@')
14017 result = tCVAR;
14018 else
14019 result = tIVAR;
14020 break;
14021
14022 default:
14023 if (toklast() == '!' || toklast() == '?') {
14024 result = tFID;
14025 }
14026 else {
14027 if (lex_state == EXPR_FNAME) {
14028 if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
14029 (!peek('=') || (peek_n('>', 1)))) {
14030 result = tIDENTIFIER;
14031 tokadd(c);
14032 tokfix();
14033 }
14034 else {
14035 pushback(c);
14036 }
14037 }
14038 if (result == 0 && ISUPPER(tok()[0])) {
14039 result = tCONSTANT;
14040 }
14041 else {
14042 result = tIDENTIFIER;
14043 }
14044 }
14045
14046 if (IS_LABEL_POSSIBLE()) {
14047 if (IS_LABEL_SUFFIX(0)) {
14048 lex_state = EXPR_BEG;
14049 nextc();
14050 set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb)));
14051 return tLABEL;
14052 }
14053 }
14054 if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) {
14055 const struct kwtable *kw;
14056
14057
14058 kw = rb_reserved_word(tok(), toklen());
14059 if (kw) {
14060 enum lex_state_e state = lex_state;
14061 lex_state = kw->state;
14062 if (state == EXPR_FNAME) {
14063 set_yylval_name(rb_intern(kw->name));
14064 return kw->id[0];
14065 }
14066 if (kw->id[0] == keyword_do) {
14067 command_start = TRUE;
14068 if (lpar_beg && lpar_beg == paren_nest) {
14069 lpar_beg = 0;
14070 --paren_nest;
14071 return keyword_do_LAMBDA;
14072 }
14073 if (COND_P()) return keyword_do_cond;
14074 if (CMDARG_P() && state != EXPR_CMDARG)
14075 return keyword_do_block;
14076 if (state == EXPR_ENDARG || state == EXPR_BEG)
14077 return keyword_do_block;
14078 return keyword_do;
14079 }
14080 if (state == EXPR_BEG || state == EXPR_VALUE)
14081 return kw->id[0];
14082 else {
14083 if (kw->id[0] != kw->id[1])
14084 lex_state = EXPR_BEG;
14085 return kw->id[1];
14086 }
14087 }
14088 }
14089
14090 if (IS_BEG() ||
14091 lex_state == EXPR_DOT ||
14092 IS_ARG()) {
14093 if (cmd_state) {
14094 lex_state = EXPR_CMDARG;
14095 }
14096 else {
14097 lex_state = EXPR_ARG;
14098 }
14099 }
14100 else if (lex_state == EXPR_FNAME) {
14101 lex_state = EXPR_ENDFN;
14102 }
14103 else {
14104 lex_state = EXPR_END;
14105 }
14106 }
14107 {
14108 ID ident = TOK_INTERN(!ENC_SINGLE(mb));
14109
14110 set_yylval_name(ident);
14111 if (last_state != EXPR_DOT && is_local_id(ident) && lvar_defined(ident)) {
14112 lex_state = EXPR_END;
14113 }
14114 }
14115 return result;
14116 }
14117 }
14118
14119 #if YYPURE
14120 static int
14121 yylex(void *lval, void *p)
14122 #else
14123 yylex(void *p)
14124 #endif
14125 {
14126 struct parser_params *parser = (struct parser_params*)p;
14127 int t;
14128
14129 #if YYPURE
14130 parser->parser_yylval = lval;
14131 parser->parser_yylval->val = Qundef;
14132 #endif
14133 t = parser_yylex(parser);
14134 #ifdef RIPPER
14135 if (!NIL_P(parser->delayed)) {
14136 ripper_dispatch_delayed_token(parser, t);
14137 return t;
14138 }
14139 if (t != 0)
14140 ripper_dispatch_scan_event(parser, t);
14141 #endif
14142
14143 return t;
14144 }
14145
14146 #ifndef RIPPER
14147 static NODE*
14148 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
14149 {
14150 NODE *n = (rb_node_newnode)(type, a0, a1, a2);
14151 nd_set_line(n, ruby_sourceline);
14152 return n;
14153 }
14154
14155 enum node_type
14156 nodetype(NODE *node)
14157 {
14158 return (enum node_type)nd_type(node);
14159 }
14160
14161 int
14162 nodeline(NODE *node)
14163 {
14164 return nd_line(node);
14165 }
14166
14167 static NODE*
14168 newline_node(NODE *node)
14169 {
14170 if (node) {
14171 node = remove_begin(node);
14172 node->flags |= NODE_FL_NEWLINE;
14173 }
14174 return node;
14175 }
14176
14177 static void
14178 fixpos(NODE *node, NODE *orig)
14179 {
14180 if (!node) return;
14181 if (!orig) return;
14182 if (orig == (NODE*)1) return;
14183 nd_set_line(node, nd_line(orig));
14184 }
14185
14186 static void
14187 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
14188 {
14189 rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
14190 }
14191 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg))
14192
14193 static void
14194 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
14195 {
14196 rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
14197 }
14198 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg))
14199
14200 static NODE*
14201 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
14202 {
14203 NODE *end, *h = head, *nd;
14204
14205 if (tail == 0) return head;
14206
14207 if (h == 0) return tail;
14208 switch (nd_type(h)) {
14209 case NODE_LIT:
14210 case NODE_STR:
14211 case NODE_SELF:
14212 case NODE_TRUE:
14213 case NODE_FALSE:
14214 case NODE_NIL:
14215 parser_warning(h, "unused literal ignored");
14216 return tail;
14217 default:
14218 h = end = NEW_BLOCK(head);
14219 end->nd_end = end;
14220 fixpos(end, head);
14221 head = end;
14222 break;
14223 case NODE_BLOCK:
14224 end = h->nd_end;
14225 break;
14226 }
14227
14228 nd = end->nd_head;
14229 switch (nd_type(nd)) {
14230 case NODE_RETURN:
14231 case NODE_BREAK:
14232 case NODE_NEXT:
14233 case NODE_REDO:
14234 case NODE_RETRY:
14235 if (RTEST(ruby_verbose)) {
14236 parser_warning(nd, "statement not reached");
14237 }
14238 break;
14239
14240 default:
14241 break;
14242 }
14243
14244 if (nd_type(tail) != NODE_BLOCK) {
14245 tail = NEW_BLOCK(tail);
14246 tail->nd_end = tail;
14247 }
14248 end->nd_next = tail;
14249 h->nd_end = tail->nd_end;
14250 return head;
14251 }
14252
14253
14254 static NODE*
14255 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
14256 {
14257 NODE *last;
14258
14259 if (list == 0) return NEW_LIST(item);
14260 if (list->nd_next) {
14261 last = list->nd_next->nd_end;
14262 }
14263 else {
14264 last = list;
14265 }
14266
14267 list->nd_alen += 1;
14268 last->nd_next = NEW_LIST(item);
14269 list->nd_next->nd_end = last->nd_next;
14270 return list;
14271 }
14272
14273
14274 static NODE*
14275 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14276 {
14277 NODE *last;
14278
14279 if (head->nd_next) {
14280 last = head->nd_next->nd_end;
14281 }
14282 else {
14283 last = head;
14284 }
14285
14286 head->nd_alen += tail->nd_alen;
14287 last->nd_next = tail;
14288 if (tail->nd_next) {
14289 head->nd_next->nd_end = tail->nd_next->nd_end;
14290 }
14291 else {
14292 head->nd_next->nd_end = tail;
14293 }
14294
14295 return head;
14296 }
14297
14298 static int
14299 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
14300 {
14301 if (NIL_P(tail)) return 1;
14302 if (!rb_enc_compatible(head, tail)) {
14303 compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
14304 rb_enc_name(rb_enc_get(head)),
14305 rb_enc_name(rb_enc_get(tail)));
14306 rb_str_resize(head, 0);
14307 rb_str_resize(tail, 0);
14308 return 0;
14309 }
14310 rb_str_buf_append(head, tail);
14311 return 1;
14312 }
14313
14314
14315 static NODE *
14316 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14317 {
14318 enum node_type htype;
14319
14320 if (!head) return tail;
14321 if (!tail) return head;
14322
14323 htype = nd_type(head);
14324 if (htype == NODE_EVSTR) {
14325 NODE *node = NEW_DSTR(Qnil);
14326 head = list_append(node, head);
14327 }
14328 switch (nd_type(tail)) {
14329 case NODE_STR:
14330 if (htype == NODE_STR) {
14331 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) {
14332 error:
14333 rb_gc_force_recycle((VALUE)head);
14334 rb_gc_force_recycle((VALUE)tail);
14335 return 0;
14336 }
14337 rb_gc_force_recycle((VALUE)tail);
14338 }
14339 else {
14340 list_append(head, tail);
14341 }
14342 break;
14343
14344 case NODE_DSTR:
14345 if (htype == NODE_STR) {
14346 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
14347 goto error;
14348 tail->nd_lit = head->nd_lit;
14349 rb_gc_force_recycle((VALUE)head);
14350 head = tail;
14351 }
14352 else if (NIL_P(tail->nd_lit)) {
14353 head->nd_alen += tail->nd_alen - 1;
14354 head->nd_next->nd_end->nd_next = tail->nd_next;
14355 head->nd_next->nd_end = tail->nd_next->nd_end;
14356 rb_gc_force_recycle((VALUE)tail);
14357 }
14358 else {
14359 nd_set_type(tail, NODE_ARRAY);
14360 tail->nd_head = NEW_STR(tail->nd_lit);
14361 list_concat(head, tail);
14362 }
14363 break;
14364
14365 case NODE_EVSTR:
14366 if (htype == NODE_STR) {
14367 nd_set_type(head, NODE_DSTR);
14368 head->nd_alen = 1;
14369 }
14370 list_append(head, tail);
14371 break;
14372 }
14373 return head;
14374 }
14375
14376 static NODE *
14377 evstr2dstr_gen(struct parser_params *parser, NODE *node)
14378 {
14379 if (nd_type(node) == NODE_EVSTR) {
14380 node = list_append(NEW_DSTR(Qnil), node);
14381 }
14382 return node;
14383 }
14384
14385 static NODE *
14386 new_evstr_gen(struct parser_params *parser, NODE *node)
14387 {
14388 NODE *head = node;
14389
14390 if (node) {
14391 switch (nd_type(node)) {
14392 case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
14393 return node;
14394 }
14395 }
14396 return NEW_EVSTR(head);
14397 }
14398
14399 static NODE *
14400 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
14401 {
14402 value_expr(recv);
14403 value_expr(arg1);
14404 return NEW_CALL(recv, id, NEW_LIST(arg1));
14405 }
14406
14407 static NODE *
14408 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
14409 {
14410 value_expr(recv);
14411 return NEW_CALL(recv, id, 0);
14412 }
14413
14414 static NODE*
14415 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14416 {
14417 value_expr(node1);
14418 value_expr(node2);
14419 if (node1) {
14420 switch (nd_type(node1)) {
14421 case NODE_DREGX:
14422 case NODE_DREGX_ONCE:
14423 return NEW_MATCH2(node1, node2);
14424
14425 case NODE_LIT:
14426 if (TYPE(node1->nd_lit) == T_REGEXP) {
14427 return NEW_MATCH2(node1, node2);
14428 }
14429 }
14430 }
14431
14432 if (node2) {
14433 switch (nd_type(node2)) {
14434 case NODE_DREGX:
14435 case NODE_DREGX_ONCE:
14436 return NEW_MATCH3(node2, node1);
14437
14438 case NODE_LIT:
14439 if (TYPE(node2->nd_lit) == T_REGEXP) {
14440 return NEW_MATCH3(node2, node1);
14441 }
14442 }
14443 }
14444
14445 return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
14446 }
14447
14448 static NODE*
14449 gettable_gen(struct parser_params *parser, ID id)
14450 {
14451 if (id == keyword_self) {
14452 return NEW_SELF();
14453 }
14454 else if (id == keyword_nil) {
14455 return NEW_NIL();
14456 }
14457 else if (id == keyword_true) {
14458 return NEW_TRUE();
14459 }
14460 else if (id == keyword_false) {
14461 return NEW_FALSE();
14462 }
14463 else if (id == keyword__FILE__) {
14464 return NEW_STR(rb_external_str_new_with_enc(ruby_sourcefile, strlen(ruby_sourcefile),
14465 rb_filesystem_encoding()));
14466 }
14467 else if (id == keyword__LINE__) {
14468 return NEW_LIT(INT2FIX(ruby_sourceline));
14469 }
14470 else if (id == keyword__ENCODING__) {
14471 return NEW_LIT(rb_enc_from_encoding(parser->enc));
14472 }
14473 else if (is_local_id(id)) {
14474 if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
14475 if (local_id(id)) return NEW_LVAR(id);
14476
14477 return NEW_VCALL(id);
14478 }
14479 else if (is_global_id(id)) {
14480 return NEW_GVAR(id);
14481 }
14482 else if (is_instance_id(id)) {
14483 return NEW_IVAR(id);
14484 }
14485 else if (is_const_id(id)) {
14486 return NEW_CONST(id);
14487 }
14488 else if (is_class_id(id)) {
14489 return NEW_CVAR(id);
14490 }
14491 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14492 return 0;
14493 }
14494 #else
14495 static int
14496 id_is_var_gen(struct parser_params *parser, ID id)
14497 {
14498 if (is_notop_id(id)) {
14499 switch (id & ID_SCOPE_MASK) {
14500 case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
14501 return 1;
14502 case ID_LOCAL:
14503 if (dyna_in_block() && dvar_defined(id)) return 1;
14504 if (local_id(id)) return 1;
14505
14506 return 0;
14507 }
14508 }
14509 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14510 return 0;
14511 }
14512 #endif
14513
14514 #ifdef RIPPER
14515 static VALUE
14516 assignable_gen(struct parser_params *parser, VALUE lhs)
14517 #else
14518 static NODE*
14519 assignable_gen(struct parser_params *parser, ID id, NODE *val)
14520 #endif
14521 {
14522 #ifdef RIPPER
14523 ID id = get_id(lhs);
14524 # define assignable_result(x) get_value(lhs)
14525 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
14526 #else
14527 # define assignable_result(x) (x)
14528 #endif
14529 if (!id) return assignable_result(0);
14530 if (id == keyword_self) {
14531 yyerror("Can't change the value of self");
14532 }
14533 else if (id == keyword_nil) {
14534 yyerror("Can't assign to nil");
14535 }
14536 else if (id == keyword_true) {
14537 yyerror("Can't assign to true");
14538 }
14539 else if (id == keyword_false) {
14540 yyerror("Can't assign to false");
14541 }
14542 else if (id == keyword__FILE__) {
14543 yyerror("Can't assign to __FILE__");
14544 }
14545 else if (id == keyword__LINE__) {
14546 yyerror("Can't assign to __LINE__");
14547 }
14548 else if (id == keyword__ENCODING__) {
14549 yyerror("Can't assign to __ENCODING__");
14550 }
14551 else if (is_local_id(id)) {
14552 if (dyna_in_block()) {
14553 if (dvar_curr(id)) {
14554 return assignable_result(NEW_DASGN_CURR(id, val));
14555 }
14556 else if (dvar_defined(id)) {
14557 return assignable_result(NEW_DASGN(id, val));
14558 }
14559 else if (local_id(id)) {
14560 return assignable_result(NEW_LASGN(id, val));
14561 }
14562 else {
14563 dyna_var(id);
14564 return assignable_result(NEW_DASGN_CURR(id, val));
14565 }
14566 }
14567 else {
14568 if (!local_id(id)) {
14569 local_var(id);
14570 }
14571 return assignable_result(NEW_LASGN(id, val));
14572 }
14573 }
14574 else if (is_global_id(id)) {
14575 return assignable_result(NEW_GASGN(id, val));
14576 }
14577 else if (is_instance_id(id)) {
14578 return assignable_result(NEW_IASGN(id, val));
14579 }
14580 else if (is_const_id(id)) {
14581 if (!in_def && !in_single)
14582 return assignable_result(NEW_CDECL(id, val, 0));
14583 yyerror("dynamic constant assignment");
14584 }
14585 else if (is_class_id(id)) {
14586 return assignable_result(NEW_CVASGN(id, val));
14587 }
14588 else {
14589 compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
14590 }
14591 return assignable_result(0);
14592 #undef assignable_result
14593 #undef parser_yyerror
14594 }
14595
14596 #define LVAR_USED ((int)1 << (sizeof(int) * CHAR_BIT - 1))
14597
14598 static ID
14599 shadowing_lvar_gen(struct parser_params *parser, ID name)
14600 {
14601 if (idUScore == name) return name;
14602 if (dyna_in_block()) {
14603 if (dvar_curr(name)) {
14604 yyerror("duplicated argument name");
14605 }
14606 else if (dvar_defined_get(name) || local_id(name)) {
14607 rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
14608 vtable_add(lvtbl->vars, name);
14609 if (lvtbl->used) {
14610 vtable_add(lvtbl->used, (ID)ruby_sourceline | LVAR_USED);
14611 }
14612 }
14613 }
14614 else {
14615 if (local_id(name)) {
14616 yyerror("duplicated argument name");
14617 }
14618 }
14619 return name;
14620 }
14621
14622 static void
14623 new_bv_gen(struct parser_params *parser, ID name)
14624 {
14625 if (!name) return;
14626 if (!is_local_id(name)) {
14627 compile_error(PARSER_ARG "invalid local variable - %s",
14628 rb_id2name(name));
14629 return;
14630 }
14631 shadowing_lvar(name);
14632 dyna_var(name);
14633 }
14634
14635 #ifndef RIPPER
14636 static NODE *
14637 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
14638 {
14639 if (recv && nd_type(recv) == NODE_SELF)
14640 recv = (NODE *)1;
14641 return NEW_ATTRASGN(recv, tASET, idx);
14642 }
14643
14644 static void
14645 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14646 {
14647 if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
14648 compile_error(PARSER_ARG "both block arg and actual block given");
14649 }
14650 }
14651
14652 ID
14653 rb_id_attrset(ID id)
14654 {
14655 id &= ~ID_SCOPE_MASK;
14656 id |= ID_ATTRSET;
14657 return id;
14658 }
14659
14660 static NODE *
14661 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
14662 {
14663 if (recv && nd_type(recv) == NODE_SELF)
14664 recv = (NODE *)1;
14665 return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
14666 }
14667
14668 static void
14669 rb_backref_error_gen(struct parser_params *parser, NODE *node)
14670 {
14671 switch (nd_type(node)) {
14672 case NODE_NTH_REF:
14673 compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
14674 break;
14675 case NODE_BACK_REF:
14676 compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
14677 break;
14678 }
14679 }
14680
14681 static NODE *
14682 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14683 {
14684 if (!node2) return node1;
14685 switch (nd_type(node1)) {
14686 case NODE_BLOCK_PASS:
14687 if (node1->nd_head)
14688 node1->nd_head = arg_concat(node1->nd_head, node2);
14689 else
14690 node1->nd_head = NEW_LIST(node2);
14691 return node1;
14692 case NODE_ARGSPUSH:
14693 if (nd_type(node2) != NODE_ARRAY) break;
14694 node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
14695 nd_set_type(node1, NODE_ARGSCAT);
14696 return node1;
14697 case NODE_ARGSCAT:
14698 if (nd_type(node2) != NODE_ARRAY ||
14699 nd_type(node1->nd_body) != NODE_ARRAY) break;
14700 node1->nd_body = list_concat(node1->nd_body, node2);
14701 return node1;
14702 }
14703 return NEW_ARGSCAT(node1, node2);
14704 }
14705
14706 static NODE *
14707 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14708 {
14709 if (!node1) return NEW_LIST(node2);
14710 switch (nd_type(node1)) {
14711 case NODE_ARRAY:
14712 return list_append(node1, node2);
14713 case NODE_BLOCK_PASS:
14714 node1->nd_head = arg_append(node1->nd_head, node2);
14715 return node1;
14716 case NODE_ARGSPUSH:
14717 node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
14718 nd_set_type(node1, NODE_ARGSCAT);
14719 return node1;
14720 }
14721 return NEW_ARGSPUSH(node1, node2);
14722 }
14723
14724 static NODE *
14725 splat_array(NODE* node)
14726 {
14727 if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
14728 if (nd_type(node) == NODE_ARRAY) return node;
14729 return 0;
14730 }
14731
14732 static NODE *
14733 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
14734 {
14735 if (!lhs) return 0;
14736
14737 switch (nd_type(lhs)) {
14738 case NODE_GASGN:
14739 case NODE_IASGN:
14740 case NODE_IASGN2:
14741 case NODE_LASGN:
14742 case NODE_DASGN:
14743 case NODE_DASGN_CURR:
14744 case NODE_MASGN:
14745 case NODE_CDECL:
14746 case NODE_CVASGN:
14747 lhs->nd_value = rhs;
14748 break;
14749
14750 case NODE_ATTRASGN:
14751 case NODE_CALL:
14752 lhs->nd_args = arg_append(lhs->nd_args, rhs);
14753 break;
14754
14755 default:
14756
14757 break;
14758 }
14759
14760 return lhs;
14761 }
14762
14763 static int
14764 value_expr_gen(struct parser_params *parser, NODE *node)
14765 {
14766 int cond = 0;
14767
14768 if (!node) {
14769 rb_warning0("empty expression");
14770 }
14771 while (node) {
14772 switch (nd_type(node)) {
14773 case NODE_DEFN:
14774 case NODE_DEFS:
14775 parser_warning(node, "void value expression");
14776 return FALSE;
14777
14778 case NODE_RETURN:
14779 case NODE_BREAK:
14780 case NODE_NEXT:
14781 case NODE_REDO:
14782 case NODE_RETRY:
14783 if (!cond) yyerror("void value expression");
14784
14785 return FALSE;
14786
14787 case NODE_BLOCK:
14788 while (node->nd_next) {
14789 node = node->nd_next;
14790 }
14791 node = node->nd_head;
14792 break;
14793
14794 case NODE_BEGIN:
14795 node = node->nd_body;
14796 break;
14797
14798 case NODE_IF:
14799 if (!node->nd_body) {
14800 node = node->nd_else;
14801 break;
14802 }
14803 else if (!node->nd_else) {
14804 node = node->nd_body;
14805 break;
14806 }
14807 if (!value_expr(node->nd_body)) return FALSE;
14808 node = node->nd_else;
14809 break;
14810
14811 case NODE_AND:
14812 case NODE_OR:
14813 cond = 1;
14814 node = node->nd_2nd;
14815 break;
14816
14817 default:
14818 return TRUE;
14819 }
14820 }
14821
14822 return TRUE;
14823 }
14824
14825 static void
14826 void_expr_gen(struct parser_params *parser, NODE *node)
14827 {
14828 const char *useless = 0;
14829
14830 if (!RTEST(ruby_verbose)) return;
14831
14832 if (!node) return;
14833 switch (nd_type(node)) {
14834 case NODE_CALL:
14835 switch (node->nd_mid) {
14836 case '+':
14837 case '-':
14838 case '*':
14839 case '/':
14840 case '%':
14841 case tPOW:
14842 case tUPLUS:
14843 case tUMINUS:
14844 case '|':
14845 case '^':
14846 case '&':
14847 case tCMP:
14848 case '>':
14849 case tGEQ:
14850 case '<':
14851 case tLEQ:
14852 case tEQ:
14853 case tNEQ:
14854 useless = rb_id2name(node->nd_mid);
14855 break;
14856 }
14857 break;
14858
14859 case NODE_LVAR:
14860 case NODE_DVAR:
14861 case NODE_GVAR:
14862 case NODE_IVAR:
14863 case NODE_CVAR:
14864 case NODE_NTH_REF:
14865 case NODE_BACK_REF:
14866 useless = "a variable";
14867 break;
14868 case NODE_CONST:
14869 useless = "a constant";
14870 break;
14871 case NODE_LIT:
14872 case NODE_STR:
14873 case NODE_DSTR:
14874 case NODE_DREGX:
14875 case NODE_DREGX_ONCE:
14876 useless = "a literal";
14877 break;
14878 case NODE_COLON2:
14879 case NODE_COLON3:
14880 useless = "::";
14881 break;
14882 case NODE_DOT2:
14883 useless = "..";
14884 break;
14885 case NODE_DOT3:
14886 useless = "...";
14887 break;
14888 case NODE_SELF:
14889 useless = "self";
14890 break;
14891 case NODE_NIL:
14892 useless = "nil";
14893 break;
14894 case NODE_TRUE:
14895 useless = "true";
14896 break;
14897 case NODE_FALSE:
14898 useless = "false";
14899 break;
14900 case NODE_DEFINED:
14901 useless = "defined?";
14902 break;
14903 }
14904
14905 if (useless) {
14906 int line = ruby_sourceline;
14907
14908 ruby_sourceline = nd_line(node);
14909 rb_warnS("possibly useless use of %s in void context", useless);
14910 ruby_sourceline = line;
14911 }
14912 }
14913
14914 static void
14915 void_stmts_gen(struct parser_params *parser, NODE *node)
14916 {
14917 if (!RTEST(ruby_verbose)) return;
14918 if (!node) return;
14919 if (nd_type(node) != NODE_BLOCK) return;
14920
14921 for (;;) {
14922 if (!node->nd_next) return;
14923 void_expr0(node->nd_head);
14924 node = node->nd_next;
14925 }
14926 }
14927
14928 static NODE *
14929 remove_begin(NODE *node)
14930 {
14931 NODE **n = &node, *n1 = node;
14932 while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
14933 *n = n1 = n1->nd_body;
14934 }
14935 return node;
14936 }
14937
14938 static void
14939 reduce_nodes_gen(struct parser_params *parser, NODE **body)
14940 {
14941 NODE *node = *body;
14942
14943 if (!node) {
14944 *body = NEW_NIL();
14945 return;
14946 }
14947 #define subnodes(n1, n2) \
14948 ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
14949 (!node->n2) ? (body = &node->n1, 1) : \
14950 (reduce_nodes(&node->n1), body = &node->n2, 1))
14951
14952 while (node) {
14953 int newline = (int)(node->flags & NODE_FL_NEWLINE);
14954 switch (nd_type(node)) {
14955 end:
14956 case NODE_NIL:
14957 *body = 0;
14958 return;
14959 case NODE_RETURN:
14960 *body = node = node->nd_stts;
14961 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14962 continue;
14963 case NODE_BEGIN:
14964 *body = node = node->nd_body;
14965 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14966 continue;
14967 case NODE_BLOCK:
14968 body = &node->nd_end->nd_head;
14969 break;
14970 case NODE_IF:
14971 if (subnodes(nd_body, nd_else)) break;
14972 return;
14973 case NODE_CASE:
14974 body = &node->nd_body;
14975 break;
14976 case NODE_WHEN:
14977 if (!subnodes(nd_body, nd_next)) goto end;
14978 break;
14979 case NODE_ENSURE:
14980 if (!subnodes(nd_head, nd_resq)) goto end;
14981 break;
14982 case NODE_RESCUE:
14983 if (node->nd_else) {
14984 body = &node->nd_resq;
14985 break;
14986 }
14987 if (!subnodes(nd_head, nd_resq)) goto end;
14988 break;
14989 default:
14990 return;
14991 }
14992 node = *body;
14993 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14994 }
14995
14996 #undef subnodes
14997 }
14998
14999 static int
15000 assign_in_cond(struct parser_params *parser, NODE *node)
15001 {
15002 switch (nd_type(node)) {
15003 case NODE_MASGN:
15004 yyerror("multiple assignment in conditional");
15005 return 1;
15006
15007 case NODE_LASGN:
15008 case NODE_DASGN:
15009 case NODE_DASGN_CURR:
15010 case NODE_GASGN:
15011 case NODE_IASGN:
15012 break;
15013
15014 default:
15015 return 0;
15016 }
15017
15018 if (!node->nd_value) return 1;
15019 switch (nd_type(node->nd_value)) {
15020 case NODE_LIT:
15021 case NODE_STR:
15022 case NODE_NIL:
15023 case NODE_TRUE:
15024 case NODE_FALSE:
15025
15026 parser_warn(node->nd_value, "found = in conditional, should be ==");
15027 return 1;
15028
15029 case NODE_DSTR:
15030 case NODE_XSTR:
15031 case NODE_DXSTR:
15032 case NODE_EVSTR:
15033 case NODE_DREGX:
15034 default:
15035 break;
15036 }
15037 return 1;
15038 }
15039
15040 static void
15041 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15042 {
15043 if (!e_option_supplied(parser)) parser_warn(node, str);
15044 }
15045
15046 static void
15047 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15048 {
15049 if (!e_option_supplied(parser)) parser_warning(node, str);
15050 }
15051
15052 static void
15053 fixup_nodes(NODE **rootnode)
15054 {
15055 NODE *node, *next, *head;
15056
15057 for (node = *rootnode; node; node = next) {
15058 enum node_type type;
15059 VALUE val;
15060
15061 next = node->nd_next;
15062 head = node->nd_head;
15063 rb_gc_force_recycle((VALUE)node);
15064 *rootnode = next;
15065 switch (type = nd_type(head)) {
15066 case NODE_DOT2:
15067 case NODE_DOT3:
15068 val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
15069 type == NODE_DOT3);
15070 rb_gc_force_recycle((VALUE)head->nd_beg);
15071 rb_gc_force_recycle((VALUE)head->nd_end);
15072 nd_set_type(head, NODE_LIT);
15073 head->nd_lit = val;
15074 break;
15075 default:
15076 break;
15077 }
15078 }
15079 }
15080
15081 static NODE *cond0(struct parser_params*,NODE*);
15082
15083 static NODE*
15084 range_op(struct parser_params *parser, NODE *node)
15085 {
15086 enum node_type type;
15087
15088 if (node == 0) return 0;
15089
15090 type = nd_type(node);
15091 value_expr(node);
15092 if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
15093 warn_unless_e_option(parser, node, "integer literal in conditional range");
15094 return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
15095 }
15096 return cond0(parser, node);
15097 }
15098
15099 static int
15100 literal_node(NODE *node)
15101 {
15102 if (!node) return 1;
15103 switch (nd_type(node)) {
15104 case NODE_LIT:
15105 case NODE_STR:
15106 case NODE_DSTR:
15107 case NODE_EVSTR:
15108 case NODE_DREGX:
15109 case NODE_DREGX_ONCE:
15110 case NODE_DSYM:
15111 return 2;
15112 case NODE_TRUE:
15113 case NODE_FALSE:
15114 case NODE_NIL:
15115 return 1;
15116 }
15117 return 0;
15118 }
15119
15120 static NODE*
15121 cond0(struct parser_params *parser, NODE *node)
15122 {
15123 if (node == 0) return 0;
15124 assign_in_cond(parser, node);
15125
15126 switch (nd_type(node)) {
15127 case NODE_DSTR:
15128 case NODE_EVSTR:
15129 case NODE_STR:
15130 rb_warn0("string literal in condition");
15131 break;
15132
15133 case NODE_DREGX:
15134 case NODE_DREGX_ONCE:
15135 warning_unless_e_option(parser, node, "regex literal in condition");
15136 return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
15137
15138 case NODE_AND:
15139 case NODE_OR:
15140 node->nd_1st = cond0(parser, node->nd_1st);
15141 node->nd_2nd = cond0(parser, node->nd_2nd);
15142 break;
15143
15144 case NODE_DOT2:
15145 case NODE_DOT3:
15146 node->nd_beg = range_op(parser, node->nd_beg);
15147 node->nd_end = range_op(parser, node->nd_end);
15148 if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
15149 else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
15150 if (!e_option_supplied(parser)) {
15151 int b = literal_node(node->nd_beg);
15152 int e = literal_node(node->nd_end);
15153 if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
15154 parser_warn(node, "range literal in condition");
15155 }
15156 }
15157 break;
15158
15159 case NODE_DSYM:
15160 parser_warning(node, "literal in condition");
15161 break;
15162
15163 case NODE_LIT:
15164 if (TYPE(node->nd_lit) == T_REGEXP) {
15165 warn_unless_e_option(parser, node, "regex literal in condition");
15166 nd_set_type(node, NODE_MATCH);
15167 }
15168 else {
15169 parser_warning(node, "literal in condition");
15170 }
15171 default:
15172 break;
15173 }
15174 return node;
15175 }
15176
15177 static NODE*
15178 cond_gen(struct parser_params *parser, NODE *node)
15179 {
15180 if (node == 0) return 0;
15181 return cond0(parser, node);
15182 }
15183
15184 static NODE*
15185 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
15186 {
15187 value_expr(left);
15188 if (left && (enum node_type)nd_type(left) == type) {
15189 NODE *node = left, *second;
15190 while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
15191 node = second;
15192 }
15193 node->nd_2nd = NEW_NODE(type, second, right, 0);
15194 return left;
15195 }
15196 return NEW_NODE(type, left, right, 0);
15197 }
15198
15199 static void
15200 no_blockarg(struct parser_params *parser, NODE *node)
15201 {
15202 if (node && nd_type(node) == NODE_BLOCK_PASS) {
15203 compile_error(PARSER_ARG "block argument should not be given");
15204 }
15205 }
15206
15207 static NODE *
15208 ret_args_gen(struct parser_params *parser, NODE *node)
15209 {
15210 if (node) {
15211 no_blockarg(parser, node);
15212 if (nd_type(node) == NODE_ARRAY) {
15213 if (node->nd_next == 0) {
15214 node = node->nd_head;
15215 }
15216 else {
15217 nd_set_type(node, NODE_VALUES);
15218 }
15219 }
15220 }
15221 return node;
15222 }
15223
15224 static NODE *
15225 new_yield_gen(struct parser_params *parser, NODE *node)
15226 {
15227 long state = Qtrue;
15228
15229 if (node) {
15230 no_blockarg(parser, node);
15231 if (node && nd_type(node) == NODE_SPLAT) {
15232 state = Qtrue;
15233 }
15234 }
15235 else {
15236 state = Qfalse;
15237 }
15238 return NEW_YIELD(node, state);
15239 }
15240
15241 static NODE*
15242 negate_lit(NODE *node)
15243 {
15244 switch (TYPE(node->nd_lit)) {
15245 case T_FIXNUM:
15246 node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
15247 break;
15248 case T_BIGNUM:
15249 node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
15250 break;
15251 case T_FLOAT:
15252 RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15253 break;
15254 default:
15255 break;
15256 }
15257 return node;
15258 }
15259
15260 static NODE *
15261 arg_blk_pass(NODE *node1, NODE *node2)
15262 {
15263 if (node2) {
15264 node2->nd_head = node1;
15265 return node2;
15266 }
15267 return node1;
15268 }
15269
15270 static NODE*
15271 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b)
15272 {
15273 int saved_line = ruby_sourceline;
15274 NODE *node;
15275 NODE *i1, *i2 = 0;
15276
15277 node = NEW_ARGS(m ? m->nd_plen : 0, o);
15278 i1 = m ? m->nd_next : 0;
15279 node->nd_next = NEW_ARGS_AUX(r, b);
15280
15281 if (p) {
15282 i2 = p->nd_next;
15283 node->nd_next->nd_next = NEW_ARGS_AUX(p->nd_pid, p->nd_plen);
15284 }
15285 else if (i1) {
15286 node->nd_next->nd_next = NEW_ARGS_AUX(0, 0);
15287 }
15288 if (i1 || i2) {
15289 node->nd_next->nd_next->nd_next = NEW_NODE(NODE_AND, i1, i2, 0);
15290 }
15291 ruby_sourceline = saved_line;
15292 return node;
15293 }
15294 #endif
15295
15296 static void
15297 warn_unused_var(struct parser_params *parser, struct local_vars *local)
15298 {
15299 int i, cnt;
15300 ID *v, *u;
15301
15302 if (!local->used) return;
15303 v = local->vars->tbl;
15304 u = local->used->tbl;
15305 cnt = local->used->pos;
15306 if (cnt != local->vars->pos) {
15307 rb_bug("local->used->pos != local->vars->pos");
15308 }
15309 for (i = 0; i < cnt; ++i) {
15310 if (!v[i] || (u[i] & LVAR_USED)) continue;
15311 if (idUScore == v[i]) continue;
15312 rb_compile_warn(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i]));
15313 }
15314 }
15315
15316 static void
15317 local_push_gen(struct parser_params *parser, int inherit_dvars)
15318 {
15319 struct local_vars *local;
15320
15321 local = ALLOC(struct local_vars);
15322 local->prev = lvtbl;
15323 local->args = vtable_alloc(0);
15324 local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
15325 local->used = !inherit_dvars && RTEST(ruby_verbose) ? vtable_alloc(0) : 0;
15326 lvtbl = local;
15327 }
15328
15329 static void
15330 local_pop_gen(struct parser_params *parser)
15331 {
15332 struct local_vars *local = lvtbl->prev;
15333 if (lvtbl->used) {
15334 warn_unused_var(parser, lvtbl);
15335 vtable_free(lvtbl->used);
15336 }
15337 vtable_free(lvtbl->args);
15338 vtable_free(lvtbl->vars);
15339 xfree(lvtbl);
15340 lvtbl = local;
15341 }
15342
15343 #ifndef RIPPER
15344 static ID*
15345 vtable_tblcpy(ID *buf, const struct vtable *src)
15346 {
15347 int i, cnt = vtable_size(src);
15348
15349 if (cnt > 0) {
15350 buf[0] = cnt;
15351 for (i = 0; i < cnt; i++) {
15352 buf[i] = src->tbl[i];
15353 }
15354 return buf;
15355 }
15356 return 0;
15357 }
15358
15359 static ID*
15360 local_tbl_gen(struct parser_params *parser)
15361 {
15362 int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars);
15363 ID *buf;
15364
15365 if (cnt <= 0) return 0;
15366 buf = ALLOC_N(ID, cnt + 1);
15367 vtable_tblcpy(buf+1, lvtbl->args);
15368 vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars);
15369 buf[0] = cnt;
15370 return buf;
15371 }
15372 #endif
15373
15374 static int
15375 arg_var_gen(struct parser_params *parser, ID id)
15376 {
15377 vtable_add(lvtbl->args, id);
15378 return vtable_size(lvtbl->args) - 1;
15379 }
15380
15381 static int
15382 local_var_gen(struct parser_params *parser, ID id)
15383 {
15384 vtable_add(lvtbl->vars, id);
15385 if (lvtbl->used) {
15386 vtable_add(lvtbl->used, (ID)ruby_sourceline);
15387 }
15388 return vtable_size(lvtbl->vars) - 1;
15389 }
15390
15391 static int
15392 local_id_gen(struct parser_params *parser, ID id)
15393 {
15394 struct vtable *vars, *args, *used;
15395
15396 vars = lvtbl->vars;
15397 args = lvtbl->args;
15398 used = lvtbl->used;
15399
15400 while (vars && POINTER_P(vars->prev)) {
15401 vars = vars->prev;
15402 args = args->prev;
15403 if (used) used = used->prev;
15404 }
15405
15406 if (vars && vars->prev == DVARS_INHERIT) {
15407 return rb_local_defined(id);
15408 }
15409 else if (vtable_included(args, id)) {
15410 return 1;
15411 }
15412 else {
15413 int i = vtable_included(vars, id);
15414 if (i && used) used->tbl[i-1] |= LVAR_USED;
15415 return i != 0;
15416 }
15417 }
15418
15419 static const struct vtable *
15420 dyna_push_gen(struct parser_params *parser)
15421 {
15422 lvtbl->args = vtable_alloc(lvtbl->args);
15423 lvtbl->vars = vtable_alloc(lvtbl->vars);
15424 if (lvtbl->used) {
15425 lvtbl->used = vtable_alloc(lvtbl->used);
15426 }
15427 return lvtbl->args;
15428 }
15429
15430 static void
15431 dyna_pop_1(struct parser_params *parser)
15432 {
15433 struct vtable *tmp;
15434
15435 if ((tmp = lvtbl->used) != 0) {
15436 warn_unused_var(parser, lvtbl);
15437 lvtbl->used = lvtbl->used->prev;
15438 vtable_free(tmp);
15439 }
15440 tmp = lvtbl->args;
15441 lvtbl->args = lvtbl->args->prev;
15442 vtable_free(tmp);
15443 tmp = lvtbl->vars;
15444 lvtbl->vars = lvtbl->vars->prev;
15445 vtable_free(tmp);
15446 }
15447
15448 static void
15449 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
15450 {
15451 while (lvtbl->args != lvargs) {
15452 dyna_pop_1(parser);
15453 if (!lvtbl->args) {
15454 struct local_vars *local = lvtbl->prev;
15455 xfree(lvtbl);
15456 lvtbl = local;
15457 }
15458 }
15459 dyna_pop_1(parser);
15460 }
15461
15462 static int
15463 dyna_in_block_gen(struct parser_params *parser)
15464 {
15465 return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
15466 }
15467
15468 static int
15469 dvar_defined_gen(struct parser_params *parser, ID id, int get)
15470 {
15471 struct vtable *vars, *args, *used;
15472 int i;
15473
15474 args = lvtbl->args;
15475 vars = lvtbl->vars;
15476 used = lvtbl->used;
15477
15478 while (POINTER_P(vars)) {
15479 if (vtable_included(args, id)) {
15480 return 1;
15481 }
15482 if ((i = vtable_included(vars, id)) != 0) {
15483 if (used) used->tbl[i-1] |= LVAR_USED;
15484 return 1;
15485 }
15486 args = args->prev;
15487 vars = vars->prev;
15488 if (get) used = 0;
15489 if (used) used = used->prev;
15490 }
15491
15492 if (vars == DVARS_INHERIT) {
15493 return rb_dvar_defined(id);
15494 }
15495
15496 return 0;
15497 }
15498
15499 static int
15500 dvar_curr_gen(struct parser_params *parser, ID id)
15501 {
15502 return (vtable_included(lvtbl->args, id) ||
15503 vtable_included(lvtbl->vars, id));
15504 }
15505
15506 #ifndef RIPPER
15507 static void
15508 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
15509 {
15510 int c = RE_OPTION_ENCODING_IDX(options);
15511
15512 if (c) {
15513 int opt, idx;
15514 rb_char_to_option_kcode(c, &opt, &idx);
15515 if (idx != ENCODING_GET(str) &&
15516 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15517 goto error;
15518 }
15519 ENCODING_SET(str, idx);
15520 }
15521 else if (RE_OPTION_ENCODING_NONE(options)) {
15522 if (!ENCODING_IS_ASCII8BIT(str) &&
15523 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15524 c = 'n';
15525 goto error;
15526 }
15527 rb_enc_associate(str, rb_ascii8bit_encoding());
15528 }
15529 else if (parser->enc == rb_usascii_encoding()) {
15530 if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15531
15532 rb_enc_associate(str, rb_usascii_encoding());
15533 }
15534 else {
15535 rb_enc_associate(str, rb_ascii8bit_encoding());
15536 }
15537 }
15538 return;
15539
15540 error:
15541 compile_error(PARSER_ARG
15542 "regexp encoding option '%c' differs from source encoding '%s'",
15543 c, rb_enc_name(rb_enc_get(str)));
15544 }
15545
15546 static int
15547 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
15548 {
15549 VALUE err;
15550 reg_fragment_setenc(str, options);
15551 err = rb_reg_check_preprocess(str);
15552 if (err != Qnil) {
15553 err = rb_obj_as_string(err);
15554 compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
15555 RB_GC_GUARD(err);
15556 return 0;
15557 }
15558 return 1;
15559 }
15560
15561 typedef struct {
15562 struct parser_params* parser;
15563 rb_encoding *enc;
15564 NODE *succ_block;
15565 NODE *fail_block;
15566 int num;
15567 } reg_named_capture_assign_t;
15568
15569 static int
15570 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
15571 int back_num, int *back_refs, OnigRegex regex, void *arg0)
15572 {
15573 reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
15574 struct parser_params* parser = arg->parser;
15575 rb_encoding *enc = arg->enc;
15576 long len = name_end - name;
15577 const char *s = (const char *)name;
15578 ID var;
15579
15580 arg->num++;
15581
15582 if (arg->succ_block == 0) {
15583 arg->succ_block = NEW_BEGIN(0);
15584 arg->fail_block = NEW_BEGIN(0);
15585 }
15586
15587 if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
15588 (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
15589 !rb_enc_symname2_p(s, len, enc)) {
15590 return ST_CONTINUE;
15591 }
15592 var = rb_intern3(s, len, enc);
15593 if (dvar_defined(var) || local_id(var)) {
15594 rb_warningS("named capture conflicts a local variable - %s",
15595 rb_id2name(var));
15596 }
15597 arg->succ_block = block_append(arg->succ_block,
15598 newline_node(node_assign(assignable(var,0),
15599 NEW_CALL(
15600 gettable(rb_intern("$~")),
15601 idAREF,
15602 NEW_LIST(NEW_LIT(ID2SYM(var))))
15603 )));
15604 arg->fail_block = block_append(arg->fail_block,
15605 newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil))));
15606 return ST_CONTINUE;
15607 }
15608
15609 static NODE *
15610 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match)
15611 {
15612 reg_named_capture_assign_t arg;
15613
15614 arg.parser = parser;
15615 arg.enc = rb_enc_get(regexp);
15616 arg.succ_block = 0;
15617 arg.fail_block = 0;
15618 arg.num = 0;
15619 onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
15620
15621 if (arg.num == 0)
15622 return match;
15623
15624 return
15625 block_append(
15626 newline_node(match),
15627 NEW_IF(gettable(rb_intern("$~")),
15628 block_append(
15629 newline_node(arg.succ_block),
15630 newline_node(
15631 NEW_CALL(
15632 gettable(rb_intern("$~")),
15633 rb_intern("begin"),
15634 NEW_LIST(NEW_LIT(INT2FIX(0)))))),
15635 block_append(
15636 newline_node(arg.fail_block),
15637 newline_node(
15638 NEW_LIT(Qnil)))));
15639 }
15640
15641 static VALUE
15642 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
15643 {
15644 VALUE re;
15645 VALUE err;
15646
15647 reg_fragment_setenc(str, options);
15648 err = rb_errinfo();
15649 re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline);
15650 if (NIL_P(re)) {
15651 ID mesg = rb_intern("mesg");
15652 VALUE m = rb_attr_get(rb_errinfo(), mesg);
15653 rb_set_errinfo(err);
15654 if (!NIL_P(err)) {
15655 rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
15656 }
15657 else {
15658 compile_error(PARSER_ARG "%s", RSTRING_PTR(m));
15659 }
15660 return Qnil;
15661 }
15662 return re;
15663 }
15664
15665 void
15666 rb_gc_mark_parser(void)
15667 {
15668 }
15669
15670 NODE*
15671 rb_parser_append_print(VALUE vparser, NODE *node)
15672 {
15673 NODE *prelude = 0;
15674 NODE *scope = node;
15675 struct parser_params *parser;
15676
15677 if (!node) return node;
15678
15679 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15680
15681 node = node->nd_body;
15682
15683 if (nd_type(node) == NODE_PRELUDE) {
15684 prelude = node;
15685 node = node->nd_body;
15686 }
15687
15688 node = block_append(node,
15689 NEW_FCALL(rb_intern("print"),
15690 NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
15691 if (prelude) {
15692 prelude->nd_body = node;
15693 scope->nd_body = prelude;
15694 }
15695 else {
15696 scope->nd_body = node;
15697 }
15698
15699 return scope;
15700 }
15701
15702 NODE *
15703 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
15704 {
15705 NODE *prelude = 0;
15706 NODE *scope = node;
15707 struct parser_params *parser;
15708
15709 if (!node) return node;
15710
15711 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15712
15713 node = node->nd_body;
15714
15715 if (nd_type(node) == NODE_PRELUDE) {
15716 prelude = node;
15717 node = node->nd_body;
15718 }
15719 if (split) {
15720 node = block_append(NEW_GASGN(rb_intern("$F"),
15721 NEW_CALL(NEW_GVAR(rb_intern("$_")),
15722 rb_intern("split"), 0)),
15723 node);
15724 }
15725 if (chop) {
15726 node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
15727 rb_intern("chop!"), 0), node);
15728 }
15729
15730 node = NEW_OPT_N(node);
15731
15732 if (prelude) {
15733 prelude->nd_body = node;
15734 scope->nd_body = prelude;
15735 }
15736 else {
15737 scope->nd_body = node;
15738 }
15739
15740 return scope;
15741 }
15742
15743 static const struct {
15744 ID token;
15745 const char *name;
15746 } op_tbl[] = {
15747 {tDOT2, ".."},
15748 {tDOT3, "..."},
15749 {'+', "+(binary)"},
15750 {'-', "-(binary)"},
15751 {tPOW, "**"},
15752 {tUPLUS, "+@"},
15753 {tUMINUS, "-@"},
15754 {tCMP, "<=>"},
15755 {tGEQ, ">="},
15756 {tLEQ, "<="},
15757 {tEQ, "=="},
15758 {tEQQ, "==="},
15759 {tNEQ, "!="},
15760 {tMATCH, "=~"},
15761 {tNMATCH, "!~"},
15762 {tAREF, "[]"},
15763 {tASET, "[]="},
15764 {tLSHFT, "<<"},
15765 {tRSHFT, ">>"},
15766 {tCOLON2, "::"},
15767 };
15768
15769 #define op_tbl_count numberof(op_tbl)
15770
15771 #ifndef ENABLE_SELECTOR_NAMESPACE
15772 #define ENABLE_SELECTOR_NAMESPACE 0
15773 #endif
15774
15775 static struct symbols {
15776 ID last_id;
15777 st_table *sym_id;
15778 st_table *id_str;
15779 #if ENABLE_SELECTOR_NAMESPACE
15780 st_table *ivar2_id;
15781 st_table *id_ivar2;
15782 #endif
15783 VALUE op_sym[tLAST_TOKEN];
15784 } global_symbols = {tLAST_ID};
15785
15786 static const struct st_hash_type symhash = {
15787 rb_str_hash_cmp,
15788 rb_str_hash,
15789 };
15790
15791 #if ENABLE_SELECTOR_NAMESPACE
15792 struct ivar2_key {
15793 ID id;
15794 VALUE klass;
15795 };
15796
15797 static int
15798 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
15799 {
15800 if (key1->id == key2->id && key1->klass == key2->klass) {
15801 return 0;
15802 }
15803 return 1;
15804 }
15805
15806 static int
15807 ivar2_hash(struct ivar2_key *key)
15808 {
15809 return (key->id << 8) ^ (key->klass >> 2);
15810 }
15811
15812 static const struct st_hash_type ivar2_hash_type = {
15813 ivar2_cmp,
15814 ivar2_hash,
15815 };
15816 #endif
15817
15818 void
15819 Init_sym(void)
15820 {
15821 global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
15822 global_symbols.id_str = st_init_numtable_with_size(1000);
15823 #if ENABLE_SELECTOR_NAMESPACE
15824 global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
15825 global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
15826 #endif
15827
15828 Init_id();
15829 }
15830
15831 void
15832 rb_gc_mark_symbols(void)
15833 {
15834 rb_mark_tbl(global_symbols.id_str);
15835 rb_gc_mark_locations(global_symbols.op_sym,
15836 global_symbols.op_sym + tLAST_TOKEN);
15837 }
15838 #endif
15839
15840 static ID
15841 internal_id_gen(struct parser_params *parser)
15842 {
15843 ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
15844 id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
15845 return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
15846 }
15847
15848 #ifndef RIPPER
15849 static int
15850 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
15851 {
15852 int mb = 0;
15853
15854 if (m >= e) return 0;
15855 switch (*m) {
15856 case '~': case '*': case '$': case '?': case '!': case '@':
15857 case '/': case '\\': case ';': case ',': case '.': case '=':
15858 case ':': case '<': case '>': case '\"':
15859 case '&': case '`': case '\'': case '+':
15860 case '0':
15861 ++m;
15862 break;
15863 case '-':
15864 ++m;
15865 if (m < e && is_identchar(m, e, enc)) {
15866 if (!ISASCII(*m)) mb = 1;
15867 m += rb_enc_mbclen(m, e, enc);
15868 }
15869 break;
15870 default:
15871 if (!rb_enc_isdigit(*m, enc)) return 0;
15872 do {
15873 if (!ISASCII(*m)) mb = 1;
15874 ++m;
15875 } while (m < e && rb_enc_isdigit(*m, enc));
15876 }
15877 return m == e ? mb + 1 : 0;
15878 }
15879
15880 int
15881 rb_symname_p(const char *name)
15882 {
15883 return rb_enc_symname_p(name, rb_ascii8bit_encoding());
15884 }
15885
15886 int
15887 rb_enc_symname_p(const char *name, rb_encoding *enc)
15888 {
15889 return rb_enc_symname2_p(name, strlen(name), enc);
15890 }
15891
15892 int
15893 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
15894 {
15895 const char *m = name;
15896 const char *e = m + len;
15897 int localid = FALSE;
15898
15899 if (!m || len <= 0) return FALSE;
15900 switch (*m) {
15901 case '\0':
15902 return FALSE;
15903
15904 case '$':
15905 if (is_special_global_name(++m, e, enc)) return TRUE;
15906 goto id;
15907
15908 case '@':
15909 if (*++m == '@') ++m;
15910 goto id;
15911
15912 case '<':
15913 switch (*++m) {
15914 case '<': ++m; break;
15915 case '=': if (*++m == '>') ++m; break;
15916 default: break;
15917 }
15918 break;
15919
15920 case '>':
15921 switch (*++m) {
15922 case '>': case '=': ++m; break;
15923 }
15924 break;
15925
15926 case '=':
15927 switch (*++m) {
15928 case '~': ++m; break;
15929 case '=': if (*++m == '=') ++m; break;
15930 default: return FALSE;
15931 }
15932 break;
15933
15934 case '*':
15935 if (*++m == '*') ++m;
15936 break;
15937
15938 case '+': case '-':
15939 if (*++m == '@') ++m;
15940 break;
15941
15942 case '|': case '^': case '&': case '/': case '%': case '~': case '`':
15943 ++m;
15944 break;
15945
15946 case '[':
15947 if (*++m != ']') return FALSE;
15948 if (*++m == '=') ++m;
15949 break;
15950
15951 case '!':
15952 if (len == 1) return TRUE;
15953 switch (*++m) {
15954 case '=': case '~': ++m; break;
15955 default: return FALSE;
15956 }
15957 break;
15958
15959 default:
15960 localid = !rb_enc_isupper(*m, enc);
15961 id:
15962 if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
15963 return FALSE;
15964 while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
15965 if (localid) {
15966 switch (*m) {
15967 case '!': case '?': case '=': ++m;
15968 }
15969 }
15970 break;
15971 }
15972 return m == e;
15973 }
15974
15975 static ID
15976 register_symid(ID id, const char *name, long len, rb_encoding *enc)
15977 {
15978 VALUE str = rb_enc_str_new(name, len, enc);
15979 OBJ_FREEZE(str);
15980 st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
15981 st_add_direct(global_symbols.id_str, id, (st_data_t)str);
15982 return id;
15983 }
15984
15985 ID
15986 rb_intern3(const char *name, long len, rb_encoding *enc)
15987 {
15988 const char *m = name;
15989 const char *e = m + len;
15990 unsigned char c;
15991 VALUE str;
15992 ID id;
15993 long last;
15994 int mb;
15995 st_data_t data;
15996 struct RString fake_str;
15997 fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
15998 fake_str.basic.klass = rb_cString;
15999 fake_str.as.heap.len = len;
16000 fake_str.as.heap.ptr = (char *)name;
16001 fake_str.as.heap.aux.capa = len;
16002 str = (VALUE)&fake_str;
16003 rb_enc_associate(str, enc);
16004 OBJ_FREEZE(str);
16005
16006 if (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) {
16007 rb_raise(rb_eEncodingError, "invalid encoding symbol");
16008 }
16009
16010 if (st_lookup(global_symbols.sym_id, str, &data))
16011 return (ID)data;
16012
16013 if (rb_cString && !rb_enc_asciicompat(enc)) {
16014 id = ID_JUNK;
16015 goto new_id;
16016 }
16017 last = len-1;
16018 id = 0;
16019 switch (*m) {
16020 case '$':
16021 id |= ID_GLOBAL;
16022 if ((mb = is_special_global_name(++m, e, enc)) != 0) {
16023 if (!--mb) enc = rb_ascii8bit_encoding();
16024 goto new_id;
16025 }
16026 break;
16027 case '@':
16028 if (m[1] == '@') {
16029 m++;
16030 id |= ID_CLASS;
16031 }
16032 else {
16033 id |= ID_INSTANCE;
16034 }
16035 m++;
16036 break;
16037 default:
16038 c = m[0];
16039 if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
16040
16041 int i;
16042
16043 if (len == 1) {
16044 id = c;
16045 goto id_register;
16046 }
16047 for (i = 0; i < op_tbl_count; i++) {
16048 if (*op_tbl[i].name == *m &&
16049 strcmp(op_tbl[i].name, m) == 0) {
16050 id = op_tbl[i].token;
16051 goto id_register;
16052 }
16053 }
16054 }
16055
16056 if (m[last] == '=') {
16057
16058 id = rb_intern3(name, last, enc);
16059 if (id > tLAST_TOKEN && !is_attrset_id(id)) {
16060 enc = rb_enc_get(rb_id2str(id));
16061 id = rb_id_attrset(id);
16062 goto id_register;
16063 }
16064 id = ID_ATTRSET;
16065 }
16066 else if (rb_enc_isupper(m[0], enc)) {
16067 id = ID_CONST;
16068 }
16069 else {
16070 id = ID_LOCAL;
16071 }
16072 break;
16073 }
16074 mb = 0;
16075 if (!rb_enc_isdigit(*m, enc)) {
16076 while (m <= name + last && is_identchar(m, e, enc)) {
16077 if (ISASCII(*m)) {
16078 m++;
16079 }
16080 else {
16081 mb = 1;
16082 m += rb_enc_mbclen(m, e, enc);
16083 }
16084 }
16085 }
16086 if (m - name < len) id = ID_JUNK;
16087 if (enc != rb_usascii_encoding()) {
16088
16089
16090
16091
16092 if (!mb) {
16093 for (; m <= name + len; ++m) {
16094 if (!ISASCII(*m)) goto mbstr;
16095 }
16096 enc = rb_usascii_encoding();
16097 }
16098 mbstr:;
16099 }
16100 new_id:
16101 if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) {
16102 if (len > 20) {
16103 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
16104 name);
16105 }
16106 else {
16107 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
16108 (int)len, name);
16109 }
16110 }
16111 id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
16112 id_register:
16113 return register_symid(id, name, len, enc);
16114 }
16115
16116 ID
16117 rb_intern2(const char *name, long len)
16118 {
16119 return rb_intern3(name, len, rb_usascii_encoding());
16120 }
16121
16122 #undef rb_intern
16123 ID
16124 rb_intern(const char *name)
16125 {
16126 return rb_intern2(name, strlen(name));
16127 }
16128
16129 ID
16130 rb_intern_str(VALUE str)
16131 {
16132 rb_encoding *enc;
16133 ID id;
16134
16135 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
16136 enc = rb_usascii_encoding();
16137 }
16138 else {
16139 enc = rb_enc_get(str);
16140 }
16141 id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc);
16142 RB_GC_GUARD(str);
16143 return id;
16144 }
16145
16146 VALUE
16147 rb_id2str(ID id)
16148 {
16149 st_data_t data;
16150
16151 if (id < tLAST_TOKEN) {
16152 int i = 0;
16153
16154 if (id < INT_MAX && rb_ispunct((int)id)) {
16155 VALUE str = global_symbols.op_sym[i = (int)id];
16156 if (!str) {
16157 char name[2];
16158 name[0] = (char)id;
16159 name[1] = 0;
16160 str = rb_usascii_str_new(name, 1);
16161 OBJ_FREEZE(str);
16162 global_symbols.op_sym[i] = str;
16163 }
16164 return str;
16165 }
16166 for (i = 0; i < op_tbl_count; i++) {
16167 if (op_tbl[i].token == id) {
16168 VALUE str = global_symbols.op_sym[i];
16169 if (!str) {
16170 str = rb_usascii_str_new2(op_tbl[i].name);
16171 OBJ_FREEZE(str);
16172 global_symbols.op_sym[i] = str;
16173 }
16174 return str;
16175 }
16176 }
16177 }
16178
16179 if (st_lookup(global_symbols.id_str, id, &data)) {
16180 VALUE str = (VALUE)data;
16181 if (RBASIC(str)->klass == 0)
16182 RBASIC(str)->klass = rb_cString;
16183 return str;
16184 }
16185
16186 if (is_attrset_id(id)) {
16187 ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL;
16188 VALUE str;
16189
16190 while (!(str = rb_id2str(id2))) {
16191 if (!is_local_id(id2)) return 0;
16192 id2 = (id & ~ID_SCOPE_MASK) | ID_CONST;
16193 }
16194 str = rb_str_dup(str);
16195 rb_str_cat(str, "=", 1);
16196 rb_intern_str(str);
16197 if (st_lookup(global_symbols.id_str, id, &data)) {
16198 VALUE str = (VALUE)data;
16199 if (RBASIC(str)->klass == 0)
16200 RBASIC(str)->klass = rb_cString;
16201 return str;
16202 }
16203 }
16204 return 0;
16205 }
16206
16207 const char *
16208 rb_id2name(ID id)
16209 {
16210 VALUE str = rb_id2str(id);
16211
16212 if (!str) return 0;
16213 return RSTRING_PTR(str);
16214 }
16215
16216 static int
16217 symbols_i(VALUE sym, ID value, VALUE ary)
16218 {
16219 rb_ary_push(ary, ID2SYM(value));
16220 return ST_CONTINUE;
16221 }
16222
16223
16224
16225
16226
16227
16228
16229
16230
16231
16232
16233
16234
16235
16236
16237
16238
16239 VALUE
16240 rb_sym_all_symbols(void)
16241 {
16242 VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries);
16243
16244 st_foreach(global_symbols.sym_id, symbols_i, ary);
16245 return ary;
16246 }
16247
16248 int
16249 rb_is_const_id(ID id)
16250 {
16251 return is_const_id(id);
16252 }
16253
16254 int
16255 rb_is_class_id(ID id)
16256 {
16257 return is_class_id(id);
16258 }
16259
16260 int
16261 rb_is_instance_id(ID id)
16262 {
16263 return is_instance_id(id);
16264 }
16265
16266 int
16267 rb_is_local_id(ID id)
16268 {
16269 return is_local_id(id);
16270 }
16271
16272 int
16273 rb_is_junk_id(ID id)
16274 {
16275 return is_junk_id(id);
16276 }
16277
16278 #endif
16279
16280 static void
16281 parser_initialize(struct parser_params *parser)
16282 {
16283 parser->eofp = Qfalse;
16284
16285 parser->parser_lex_strterm = 0;
16286 parser->parser_cond_stack = 0;
16287 parser->parser_cmdarg_stack = 0;
16288 parser->parser_class_nest = 0;
16289 parser->parser_paren_nest = 0;
16290 parser->parser_lpar_beg = 0;
16291 parser->parser_in_single = 0;
16292 parser->parser_in_def = 0;
16293 parser->parser_in_defined = 0;
16294 parser->parser_compile_for_eval = 0;
16295 parser->parser_cur_mid = 0;
16296 parser->parser_tokenbuf = NULL;
16297 parser->parser_tokidx = 0;
16298 parser->parser_toksiz = 0;
16299 parser->parser_heredoc_end = 0;
16300 parser->parser_command_start = TRUE;
16301 parser->parser_deferred_nodes = 0;
16302 parser->parser_lex_pbeg = 0;
16303 parser->parser_lex_p = 0;
16304 parser->parser_lex_pend = 0;
16305 parser->parser_lvtbl = 0;
16306 parser->parser_ruby__end__seen = 0;
16307 parser->parser_ruby_sourcefile = 0;
16308 #ifndef RIPPER
16309 parser->is_ripper = 0;
16310 parser->parser_eval_tree_begin = 0;
16311 parser->parser_eval_tree = 0;
16312 #else
16313 parser->is_ripper = 1;
16314 parser->parser_ruby_sourcefile_string = Qnil;
16315 parser->delayed = Qnil;
16316
16317 parser->result = Qnil;
16318 parser->parsing_thread = Qnil;
16319 parser->toplevel_p = TRUE;
16320 #endif
16321 #ifdef YYMALLOC
16322 parser->heap = NULL;
16323 #endif
16324 parser->enc = rb_usascii_encoding();
16325 }
16326
16327 #ifdef RIPPER
16328 #define parser_mark ripper_parser_mark
16329 #define parser_free ripper_parser_free
16330 #endif
16331
16332 static void
16333 parser_mark(void *ptr)
16334 {
16335 struct parser_params *p = (struct parser_params*)ptr;
16336
16337 rb_gc_mark((VALUE)p->parser_lex_strterm);
16338 rb_gc_mark((VALUE)p->parser_deferred_nodes);
16339 rb_gc_mark(p->parser_lex_input);
16340 rb_gc_mark(p->parser_lex_lastline);
16341 rb_gc_mark(p->parser_lex_nextline);
16342 #ifndef RIPPER
16343 rb_gc_mark((VALUE)p->parser_eval_tree_begin) ;
16344 rb_gc_mark((VALUE)p->parser_eval_tree) ;
16345 rb_gc_mark(p->debug_lines);
16346 #else
16347 rb_gc_mark(p->parser_ruby_sourcefile_string);
16348 rb_gc_mark(p->delayed);
16349 rb_gc_mark(p->value);
16350 rb_gc_mark(p->result);
16351 rb_gc_mark(p->parsing_thread);
16352 #endif
16353 #ifdef YYMALLOC
16354 rb_gc_mark((VALUE)p->heap);
16355 #endif
16356 }
16357
16358 static void
16359 parser_free(void *ptr)
16360 {
16361 struct parser_params *p = (struct parser_params*)ptr;
16362 struct local_vars *local, *prev;
16363
16364 if (p->parser_tokenbuf) {
16365 xfree(p->parser_tokenbuf);
16366 }
16367 for (local = p->parser_lvtbl; local; local = prev) {
16368 if (local->vars) xfree(local->vars);
16369 prev = local->prev;
16370 xfree(local);
16371 }
16372 #ifndef RIPPER
16373 xfree(p->parser_ruby_sourcefile);
16374 #endif
16375 xfree(p);
16376 }
16377
16378 static size_t
16379 parser_memsize(const void *ptr)
16380 {
16381 struct parser_params *p = (struct parser_params*)ptr;
16382 struct local_vars *local;
16383 size_t size = sizeof(*p);
16384
16385 if (!ptr) return 0;
16386 size += p->parser_toksiz;
16387 for (local = p->parser_lvtbl; local; local = local->prev) {
16388 size += sizeof(*local);
16389 if (local->vars) size += local->vars->capa * sizeof(ID);
16390 }
16391 #ifndef RIPPER
16392 if (p->parser_ruby_sourcefile) {
16393 size += strlen(p->parser_ruby_sourcefile) + 1;
16394 }
16395 #endif
16396 return size;
16397 }
16398
16399 static
16400 #ifndef RIPPER
16401 const
16402 #endif
16403 rb_data_type_t parser_data_type = {
16404 "parser",
16405 {
16406 parser_mark,
16407 parser_free,
16408 parser_memsize,
16409 },
16410 };
16411
16412 #ifndef RIPPER
16413 #undef rb_reserved_word
16414
16415 const struct kwtable *
16416 rb_reserved_word(const char *str, unsigned int len)
16417 {
16418 return reserved_word(str, len);
16419 }
16420
16421 static struct parser_params *
16422 parser_new(void)
16423 {
16424 struct parser_params *p;
16425
16426 p = ALLOC_N(struct parser_params, 1);
16427 MEMZERO(p, struct parser_params, 1);
16428 parser_initialize(p);
16429 return p;
16430 }
16431
16432 VALUE
16433 rb_parser_new(void)
16434 {
16435 struct parser_params *p = parser_new();
16436
16437 return TypedData_Wrap_Struct(0, &parser_data_type, p);
16438 }
16439
16440
16441
16442
16443
16444
16445
16446 VALUE
16447 rb_parser_end_seen_p(VALUE vparser)
16448 {
16449 struct parser_params *parser;
16450
16451 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16452 return ruby__end__seen ? Qtrue : Qfalse;
16453 }
16454
16455
16456
16457
16458
16459
16460
16461 VALUE
16462 rb_parser_encoding(VALUE vparser)
16463 {
16464 struct parser_params *parser;
16465
16466 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16467 return rb_enc_from_encoding(parser->enc);
16468 }
16469
16470
16471
16472
16473
16474
16475
16476 VALUE
16477 rb_parser_get_yydebug(VALUE self)
16478 {
16479 struct parser_params *parser;
16480
16481 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16482 return yydebug ? Qtrue : Qfalse;
16483 }
16484
16485
16486
16487
16488
16489
16490
16491 VALUE
16492 rb_parser_set_yydebug(VALUE self, VALUE flag)
16493 {
16494 struct parser_params *parser;
16495
16496 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16497 yydebug = RTEST(flag);
16498 return flag;
16499 }
16500
16501 #ifdef YYMALLOC
16502 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
16503 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
16504 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
16505 (n)->u3.cnt = (c), (p))
16506
16507 void *
16508 rb_parser_malloc(struct parser_params *parser, size_t size)
16509 {
16510 size_t cnt = HEAPCNT(1, size);
16511 NODE *n = NEWHEAP();
16512 void *ptr = xmalloc(size);
16513
16514 return ADD2HEAP(n, cnt, ptr);
16515 }
16516
16517 void *
16518 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
16519 {
16520 size_t cnt = HEAPCNT(nelem, size);
16521 NODE *n = NEWHEAP();
16522 void *ptr = xcalloc(nelem, size);
16523
16524 return ADD2HEAP(n, cnt, ptr);
16525 }
16526
16527 void *
16528 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
16529 {
16530 NODE *n;
16531 size_t cnt = HEAPCNT(1, size);
16532
16533 if (ptr && (n = parser->heap) != NULL) {
16534 do {
16535 if (n->u1.node == ptr) {
16536 n->u1.node = ptr = xrealloc(ptr, size);
16537 if (n->u3.cnt) n->u3.cnt = cnt;
16538 return ptr;
16539 }
16540 } while ((n = n->u2.node) != NULL);
16541 }
16542 n = NEWHEAP();
16543 ptr = xrealloc(ptr, size);
16544 return ADD2HEAP(n, cnt, ptr);
16545 }
16546
16547 void
16548 rb_parser_free(struct parser_params *parser, void *ptr)
16549 {
16550 NODE **prev = &parser->heap, *n;
16551
16552 while ((n = *prev) != NULL) {
16553 if (n->u1.node == ptr) {
16554 *prev = n->u2.node;
16555 rb_gc_force_recycle((VALUE)n);
16556 break;
16557 }
16558 prev = &n->u2.node;
16559 }
16560 xfree(ptr);
16561 }
16562 #endif
16563 #endif
16564
16565 #ifdef RIPPER
16566 #ifdef RIPPER_DEBUG
16567 extern int rb_is_pointer_to_heap(VALUE);
16568
16569
16570 static VALUE
16571 ripper_validate_object(VALUE self, VALUE x)
16572 {
16573 if (x == Qfalse) return x;
16574 if (x == Qtrue) return x;
16575 if (x == Qnil) return x;
16576 if (x == Qundef)
16577 rb_raise(rb_eArgError, "Qundef given");
16578 if (FIXNUM_P(x)) return x;
16579 if (SYMBOL_P(x)) return x;
16580 if (!rb_is_pointer_to_heap(x))
16581 rb_raise(rb_eArgError, "invalid pointer: %p", x);
16582 switch (TYPE(x)) {
16583 case T_STRING:
16584 case T_OBJECT:
16585 case T_ARRAY:
16586 case T_BIGNUM:
16587 case T_FLOAT:
16588 return x;
16589 case T_NODE:
16590 if (nd_type(x) != NODE_LASGN) {
16591 rb_raise(rb_eArgError, "NODE given: %p", x);
16592 }
16593 return ((NODE *)x)->nd_rval;
16594 default:
16595 rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
16596 x, rb_obj_classname(x));
16597 }
16598 return x;
16599 }
16600 #endif
16601
16602 #define validate(x) ((x) = get_value(x))
16603
16604 static VALUE
16605 ripper_dispatch0(struct parser_params *parser, ID mid)
16606 {
16607 return rb_funcall(parser->value, mid, 0);
16608 }
16609
16610 static VALUE
16611 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
16612 {
16613 validate(a);
16614 return rb_funcall(parser->value, mid, 1, a);
16615 }
16616
16617 static VALUE
16618 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
16619 {
16620 validate(a);
16621 validate(b);
16622 return rb_funcall(parser->value, mid, 2, a, b);
16623 }
16624
16625 static VALUE
16626 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
16627 {
16628 validate(a);
16629 validate(b);
16630 validate(c);
16631 return rb_funcall(parser->value, mid, 3, a, b, c);
16632 }
16633
16634 static VALUE
16635 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
16636 {
16637 validate(a);
16638 validate(b);
16639 validate(c);
16640 validate(d);
16641 return rb_funcall(parser->value, mid, 4, a, b, c, d);
16642 }
16643
16644 static VALUE
16645 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
16646 {
16647 validate(a);
16648 validate(b);
16649 validate(c);
16650 validate(d);
16651 validate(e);
16652 return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
16653 }
16654
16655 static const struct kw_assoc {
16656 ID id;
16657 const char *name;
16658 } keyword_to_name[] = {
16659 {keyword_class, "class"},
16660 {keyword_module, "module"},
16661 {keyword_def, "def"},
16662 {keyword_undef, "undef"},
16663 {keyword_begin, "begin"},
16664 {keyword_rescue, "rescue"},
16665 {keyword_ensure, "ensure"},
16666 {keyword_end, "end"},
16667 {keyword_if, "if"},
16668 {keyword_unless, "unless"},
16669 {keyword_then, "then"},
16670 {keyword_elsif, "elsif"},
16671 {keyword_else, "else"},
16672 {keyword_case, "case"},
16673 {keyword_when, "when"},
16674 {keyword_while, "while"},
16675 {keyword_until, "until"},
16676 {keyword_for, "for"},
16677 {keyword_break, "break"},
16678 {keyword_next, "next"},
16679 {keyword_redo, "redo"},
16680 {keyword_retry, "retry"},
16681 {keyword_in, "in"},
16682 {keyword_do, "do"},
16683 {keyword_do_cond, "do"},
16684 {keyword_do_block, "do"},
16685 {keyword_return, "return"},
16686 {keyword_yield, "yield"},
16687 {keyword_super, "super"},
16688 {keyword_self, "self"},
16689 {keyword_nil, "nil"},
16690 {keyword_true, "true"},
16691 {keyword_false, "false"},
16692 {keyword_and, "and"},
16693 {keyword_or, "or"},
16694 {keyword_not, "not"},
16695 {modifier_if, "if"},
16696 {modifier_unless, "unless"},
16697 {modifier_while, "while"},
16698 {modifier_until, "until"},
16699 {modifier_rescue, "rescue"},
16700 {keyword_alias, "alias"},
16701 {keyword_defined, "defined?"},
16702 {keyword_BEGIN, "BEGIN"},
16703 {keyword_END, "END"},
16704 {keyword__LINE__, "__LINE__"},
16705 {keyword__FILE__, "__FILE__"},
16706 {keyword__ENCODING__, "__ENCODING__"},
16707 {0, NULL}
16708 };
16709
16710 static const char*
16711 keyword_id_to_str(ID id)
16712 {
16713 const struct kw_assoc *a;
16714
16715 for (a = keyword_to_name; a->id; a++) {
16716 if (a->id == id)
16717 return a->name;
16718 }
16719 return NULL;
16720 }
16721
16722 #undef ripper_id2sym
16723 static VALUE
16724 ripper_id2sym(ID id)
16725 {
16726 const char *name;
16727 char buf[8];
16728
16729 if (id <= 256) {
16730 buf[0] = (char)id;
16731 buf[1] = '\0';
16732 return ID2SYM(rb_intern2(buf, 1));
16733 }
16734 if ((name = keyword_id_to_str(id))) {
16735 return ID2SYM(rb_intern(name));
16736 }
16737 switch (id) {
16738 case tOROP:
16739 name = "||";
16740 break;
16741 case tANDOP:
16742 name = "&&";
16743 break;
16744 default:
16745 name = rb_id2name(id);
16746 if (!name) {
16747 rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
16748 }
16749 return ID2SYM(id);
16750 }
16751 return ID2SYM(rb_intern(name));
16752 }
16753
16754 static ID
16755 ripper_get_id(VALUE v)
16756 {
16757 NODE *nd;
16758 if (!RB_TYPE_P(v, T_NODE)) return 0;
16759 nd = (NODE *)v;
16760 if (nd_type(nd) != NODE_LASGN) return 0;
16761 return nd->nd_vid;
16762 }
16763
16764 static VALUE
16765 ripper_get_value(VALUE v)
16766 {
16767 NODE *nd;
16768 if (v == Qundef) return Qnil;
16769 if (!RB_TYPE_P(v, T_NODE)) return v;
16770 nd = (NODE *)v;
16771 if (nd_type(nd) != NODE_LASGN) return Qnil;
16772 return nd->nd_rval;
16773 }
16774
16775 static void
16776 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
16777 {
16778 VALUE str;
16779 va_list args;
16780
16781 va_start(args, fmt);
16782 str = rb_vsprintf(fmt, args);
16783 va_end(args);
16784 rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
16785 }
16786
16787 static void
16788 ripper_warn0(struct parser_params *parser, const char *fmt)
16789 {
16790 rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
16791 }
16792
16793 static void
16794 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
16795 {
16796 rb_funcall(parser->value, rb_intern("warn"), 2,
16797 STR_NEW2(fmt), INT2NUM(a));
16798 }
16799
16800 #if 0
16801 static void
16802 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
16803 {
16804 rb_funcall(parser->value, rb_intern("warn"), 2,
16805 STR_NEW2(fmt), STR_NEW2(str));
16806 }
16807 #endif
16808
16809 static void
16810 ripper_warning0(struct parser_params *parser, const char *fmt)
16811 {
16812 rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
16813 }
16814
16815 static void
16816 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
16817 {
16818 rb_funcall(parser->value, rb_intern("warning"), 2,
16819 STR_NEW2(fmt), STR_NEW2(str));
16820 }
16821
16822 static VALUE
16823 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
16824 {
16825 return rb_funcall(src, ripper_id_gets, 0);
16826 }
16827
16828 static VALUE
16829 ripper_s_allocate(VALUE klass)
16830 {
16831 struct parser_params *p;
16832 VALUE self;
16833
16834 p = ALLOC_N(struct parser_params, 1);
16835 MEMZERO(p, struct parser_params, 1);
16836 self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
16837 p->value = self;
16838 return self;
16839 }
16840
16841 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
16842
16843
16844
16845
16846
16847
16848
16849
16850
16851
16852
16853 static VALUE
16854 ripper_initialize(int argc, VALUE *argv, VALUE self)
16855 {
16856 struct parser_params *parser;
16857 VALUE src, fname, lineno;
16858
16859 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16860 rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
16861 if (rb_obj_respond_to(src, ripper_id_gets, 0)) {
16862 parser->parser_lex_gets = ripper_lex_get_generic;
16863 }
16864 else {
16865 StringValue(src);
16866 parser->parser_lex_gets = lex_get_str;
16867 }
16868 parser->parser_lex_input = src;
16869 parser->eofp = Qfalse;
16870 if (NIL_P(fname)) {
16871 fname = STR_NEW2("(ripper)");
16872 }
16873 else {
16874 StringValue(fname);
16875 }
16876 parser_initialize(parser);
16877
16878 parser->parser_ruby_sourcefile_string = fname;
16879 parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
16880 parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
16881
16882 return Qnil;
16883 }
16884
16885 struct ripper_args {
16886 struct parser_params *parser;
16887 int argc;
16888 VALUE *argv;
16889 };
16890
16891 static VALUE
16892 ripper_parse0(VALUE parser_v)
16893 {
16894 struct parser_params *parser;
16895
16896 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16897 parser_prepare(parser);
16898 ripper_yyparse((void*)parser);
16899 return parser->result;
16900 }
16901
16902 static VALUE
16903 ripper_ensure(VALUE parser_v)
16904 {
16905 struct parser_params *parser;
16906
16907 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16908 parser->parsing_thread = Qnil;
16909 return Qnil;
16910 }
16911
16912
16913
16914
16915
16916
16917
16918 static VALUE
16919 ripper_parse(VALUE self)
16920 {
16921 struct parser_params *parser;
16922
16923 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16924 if (!ripper_initialized_p(parser)) {
16925 rb_raise(rb_eArgError, "method called for uninitialized object");
16926 }
16927 if (!NIL_P(parser->parsing_thread)) {
16928 if (parser->parsing_thread == rb_thread_current())
16929 rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
16930 else
16931 rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
16932 }
16933 parser->parsing_thread = rb_thread_current();
16934 rb_ensure(ripper_parse0, self, ripper_ensure, self);
16935
16936 return parser->result;
16937 }
16938
16939
16940
16941
16942
16943
16944
16945
16946 static VALUE
16947 ripper_column(VALUE self)
16948 {
16949 struct parser_params *parser;
16950 long col;
16951
16952 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16953 if (!ripper_initialized_p(parser)) {
16954 rb_raise(rb_eArgError, "method called for uninitialized object");
16955 }
16956 if (NIL_P(parser->parsing_thread)) return Qnil;
16957 col = parser->tokp - parser->parser_lex_pbeg;
16958 return LONG2NUM(col);
16959 }
16960
16961
16962
16963
16964
16965
16966
16967 static VALUE
16968 ripper_filename(VALUE self)
16969 {
16970 struct parser_params *parser;
16971
16972 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16973 if (!ripper_initialized_p(parser)) {
16974 rb_raise(rb_eArgError, "method called for uninitialized object");
16975 }
16976 return parser->parser_ruby_sourcefile_string;
16977 }
16978
16979
16980
16981
16982
16983
16984
16985
16986 static VALUE
16987 ripper_lineno(VALUE self)
16988 {
16989 struct parser_params *parser;
16990
16991 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16992 if (!ripper_initialized_p(parser)) {
16993 rb_raise(rb_eArgError, "method called for uninitialized object");
16994 }
16995 if (NIL_P(parser->parsing_thread)) return Qnil;
16996 return INT2NUM(parser->parser_ruby_sourceline);
16997 }
16998
16999 #ifdef RIPPER_DEBUG
17000
17001 static VALUE
17002 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
17003 {
17004 StringValue(msg);
17005 if (obj == Qundef) {
17006 rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg));
17007 }
17008 return Qnil;
17009 }
17010
17011
17012 static VALUE
17013 ripper_value(VALUE self, VALUE obj)
17014 {
17015 return ULONG2NUM(obj);
17016 }
17017 #endif
17018
17019
17020 void
17021 InitVM_ripper(void)
17022 {
17023 parser_data_type.parent = RTYPEDDATA_TYPE(rb_parser_new());
17024 }
17025
17026 void
17027 Init_ripper(void)
17028 {
17029 VALUE Ripper;
17030
17031 InitVM(ripper);
17032 Ripper = rb_define_class("Ripper", rb_cObject);
17033 rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
17034 rb_define_alloc_func(Ripper, ripper_s_allocate);
17035 rb_define_method(Ripper, "initialize", ripper_initialize, -1);
17036 rb_define_method(Ripper, "parse", ripper_parse, 0);
17037 rb_define_method(Ripper, "column", ripper_column, 0);
17038 rb_define_method(Ripper, "filename", ripper_filename, 0);
17039 rb_define_method(Ripper, "lineno", ripper_lineno, 0);
17040 rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
17041 rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
17042 rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
17043 rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
17044 #ifdef RIPPER_DEBUG
17045 rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
17046 rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
17047 rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
17048 #endif
17049
17050 ripper_id_gets = rb_intern("gets");
17051 ripper_init_eventids1(Ripper);
17052 ripper_init_eventids2(Ripper);
17053
17054 (void)rb_intern("||");
17055 (void)rb_intern("&&");
17056
17057 # if 0
17058
17059
17060
17061
17062
17063
17064
17065 rb_define_global_const("SCRIPT_LINES__", Qnil);
17066 #endif
17067
17068 }
17069 #endif
17070
17071